<?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>88226</bug_id>
          
          <creation_ts>2012-06-04 04:57:13 -0700</creation_ts>
          <short_desc>[Qt][WK2] Rename QtViewportInteractionEngine to QtViewportHandler</short_desc>
          <delta_ts>2012-06-04 08:31:09 -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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>640482</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-06-04 04:57:13 -0700</bug_when>
    <thetext>as discussed with Kenneth and Simon. New name reflects functionality better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640531</commentid>
    <comment_count>1</comment_count>
      <attachid>145572</attachid>
    <who name="alan">zalan</who>
    <bug_when>2012-06-04 06:15:49 -0700</bug_when>
    <thetext>Created attachment 145572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640538</commentid>
    <comment_count>2</comment_count>
      <attachid>145572</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-06-04 06:26:24 -0700</bug_when>
    <thetext>Comment on attachment 145572
Patch

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

&gt; Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp:689
&gt; +QRect QtViewportInteractionEngine::visibleContentsRect() const

huh? half rename?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640541</commentid>
    <comment_count>3</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2012-06-04 06:29:29 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 145572 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145572&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp:689
&gt; &gt; +QRect QtViewportInteractionEngine::visibleContentsRect() const
&gt; 
&gt; huh? half rename?

uh, probably wrong diff. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640544</commentid>
    <comment_count>4</comment_count>
      <attachid>145572</attachid>
    <who name="alan">zalan</who>
    <bug_when>2012-06-04 06:33:35 -0700</bug_when>
    <thetext>Comment on attachment 145572
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp:689
&gt;&gt;&gt; +QRect QtViewportHandler::visibleContentsRect() const
&gt;&gt; 
&gt;&gt; huh? half rename?
&gt; 
&gt; uh, probably wrong diff. :(

actually it shows - for Interaction and + for Handler in my view. and my local copy is like that too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640545</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-06-04 06:34:22 -0700</bug_when>
    <thetext>anyway rs=me but can you land manually?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640559</commentid>
    <comment_count>6</comment_count>
      <attachid>145580</attachid>
    <who name="alan">zalan</who>
    <bug_when>2012-06-04 07:18:50 -0700</bug_when>
    <thetext>Created attachment 145580
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640562</commentid>
    <comment_count>7</comment_count>
      <attachid>145580</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-06-04 07:21:32 -0700</bug_when>
    <thetext>Comment on attachment 145580
Patch

lets hope this is correct and just due to the renaming... or lets do the file renaming separately</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640609</commentid>
    <comment_count>8</comment_count>
      <attachid>145580</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-04 08:31:04 -0700</bug_when>
    <thetext>Comment on attachment 145580
Patch

Clearing flags on attachment: 145580

Committed r119400: &lt;http://trac.webkit.org/changeset/119400&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640610</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-04 08:31:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145572</attachid>
            <date>2012-06-04 06:15:49 -0700</date>
            <delta_ts>2012-06-04 07:18:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88226-20120604151547.patch</filename>
            <type>text/plain</type>
            <size>116165</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTM4OSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0wNi0wNCAgWmFsYW4g
QnVqdGFzICA8emJ1anRhc0BnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIFJlbmFtZSBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUgdG8gUXRWaWV3cG9ydEhhbmRsZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODIyNgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmg6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHA6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6flFRdWlja1dlYlZpZXdGbGlj
a2FibGVQcml2YXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpv
bkNvbXBvbmVudENvbXBsZXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2
YXRlOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMpOgorICAgICAgICAoUVF1aWNrV2ViVmll
d0ZsaWNrYWJsZVByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChRUXVpY2tX
ZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6cGFnZURpZFJlcXVlc3RTY3JvbGwpOgorICAgICAgICAo
UVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjp2aWV3cG9y
dEhhbmRsZXIpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnZpZXdw
b3J0SGFuZGxlcik6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHA6CisgICAgICAgIChRV2Vi
S2l0VGVzdDo6Y29udGVudHNTY2FsZSk6CisgICAgICAgIChRV2ViS2l0VGVzdDo6ZGV2aWNlUGl4
ZWxSYXRpbyk6CisgICAgICAgIChRV2ViS2l0VGVzdDo6aW5pdGlhbFNjYWxlKToKKyAgICAgICAg
KFFXZWJLaXRUZXN0OjptaW5pbXVtU2NhbGUpOgorICAgICAgICAoUVdlYktpdFRlc3Q6Om1heGlt
dW1TY2FsZSk6CisgICAgICAgIChRV2ViS2l0VGVzdDo6aXNTY2FsYWJsZSk6CisgICAgICAgIChR
V2ViS2l0VGVzdDo6bGF5b3V0U2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0R2VzdHVy
ZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdEdlc3R1cmVSZWNvZ25pemVyOjp2
aWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25p
emVyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdl
c3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVjb2du
aXplcjo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6
ZmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6Y2FuY2Vs
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OmZpbmlzaCk6CisgICAgICAg
IChXZWJLaXQ6OlF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6Y2FuY2VsKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcC4KKyAgICAg
ICAgKFdlYktpdDo6Vmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6Vmlld3BvcnRVcGRhdGVEZWZlcnJl
cik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6On5WaWV3cG9ydFVw
ZGF0ZURlZmVycmVyKToKKyAgICAgICAgKFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIpOgorICAgICAg
ICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6c3VzcGVuZFBhZ2VDb250ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnJlc3VtZVBhZ2VDb250ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OmNzc1NjYWxlRnJvbUl0ZW0pOgorICAgICAg
ICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6aXRlbVNjYWxlRnJvbUNTUyk6CisgICAgICAg
IChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjppdGVtQ29vcmRGcm9tQ1NTKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6Oml0ZW1SZWN0RnJvbUNTUyk6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpRdFZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjp+UXRWaWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAo
V2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6aW5uZXJCb3VuZGVkQ1NTU2NhbGUpOgorICAgICAg
ICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6b3V0ZXJCb3VuZGVkQ1NTU2NhbGUpOgorICAg
ICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6dmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpwYWdlQ29udGVudHNTaXpl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpzZXRQYWdlSXRl
bVJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OmFuaW1h
dGVQYWdlSXRlbVJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRs
ZXI6OmZsaWNrTW92ZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxl
cjo6ZmxpY2tNb3ZlRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6
cGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFu
ZGxlcjo6cGFnZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0
Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjp0b3VjaEJlZ2luKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnRvdWNoRW5kKToKKyAgICAgICAgKFdlYktpdDo6
UXRWaWV3cG9ydEhhbmRsZXI6OmNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpmb2N1c0VkaXRhYmxlQXJlYSk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjp6b29tVG9BcmVhR2VzdHVyZUVuZGVk
KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6Om5lYXJlc3RWYWxpZEJvdW5k
cyk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpzZXRDU1NTY2FsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpjdXJyZW50Q1NTU2NhbGUpOgorICAg
ICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKToK
KyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVBY3RpdmUpOgor
ICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZVN0YXJ0ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZVJlcXVlc3RVcGRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZUVuZGVk
KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVDYW5jZWxs
ZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6c2NhbGVBbmltYXRpb25B
Y3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6Y2FuY2VsU2Nyb2xs
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OmludGVycnVw
dFNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnBp
bmNoR2VzdHVyZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpw
aW5jaEdlc3R1cmVTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6
OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0
SGFuZGxlcjo6cGluY2hHZXN0dXJlRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0
SGFuZGxlcjo6cGluY2hHZXN0dXJlQ2FuY2VsbGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3
cG9ydEhhbmRsZXI6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpRdFZp
ZXdwb3J0SGFuZGxlcjo6aW5mb3JtVmlzaWJsZUNvbnRlbnRDaGFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6dmlld3BvcnRJdGVtU2l6ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6c2NhbGVDb250ZW50KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oLgorICAgICAgICAo
UXRWaWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdl
RXZlbnRIYW5kbGVyOjpRdFdlYlBhZ2VFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpR
dFdlYlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgIChXZWJL
aXQ6OlF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aW5wdXRQYW5lbFZpc2libGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0aFRvdWNoRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRpZEZpbmRab29tYWJs
ZUFyZWEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXIpOgorICAg
ICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnZpZXdwb3J0SGFuZGxlcik6CisK
IDIwMTItMDYtMDQgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+CiAKICAg
ICAgICAgW1F0XVtXSzJdIFJlZmFjdG9yIHRoZSB0YXAgZ2VzdHVyZSByZWNvZ25pemVyCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1RhcmdldC5wcmkJKHJldmlzaW9uIDExOTM4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCBIRUFERVJTICs9IFwKICAgICBV
SVByb2Nlc3MvcXQvUXRXZWJQYWdlUG9saWN5Q2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VTR05vZGUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVVJQ2xpZW50Lmgg
XAotICAgIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCBcCisgICAg
VUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdl
YlVuZG9Db250cm9sbGVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNs
aWVudC5oIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmggXApAQCAt
NjI0LDcgKzYyNCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VT
R05vZGUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlVUlDbGllbnQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvUXRWaWV3cG9y
dEhhbmRsZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNw
cCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9x
dC9XZWJHZW9sb2NhdGlvblByb3ZpZGVyUXQuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgJKHJldmlzaW9uIDEx
OTM4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9w
X3AuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTsKK2NsYXNzIFF0Vmlld3BvcnRIYW5kbGVyOwogY2xhc3MgUXRXZWJQYWdlRXZlbnRIYW5kbGVy
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHAJKHJldmlzaW9uIDExOTM4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1
LDcgQEAKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgogI2luY2x1ZGUgIlF0RGlh
bG9nUnVubmVyLmgiCiAjaW5jbHVkZSAiUXREb3dubG9hZE1hbmFnZXIuaCIKLSNpbmNsdWRlICJR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKKyNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxl
ci5oIgogI2luY2x1ZGUgIlF0V2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIK
ICNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNsaWVudC5oIgpAQCAtODIxLDcgKzgyMSw3IEBA
IFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpRUXVpY2tXZWIKIAogUVF1aWNrV2ViVmll
d0ZsaWNrYWJsZVByaXZhdGU6On5RUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZSgpCiB7Ci0g
ICAgaW50ZXJhY3Rpb25FbmdpbmUtPmRpc2Nvbm5lY3QoKTsKKyAgICBtX3ZpZXdwb3J0SGFuZGxl
ci0+ZGlzY29ubmVjdCgpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRl
Ojppbml0aWFsaXplKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYpCkBAIC04MzQsOCArODM0LDggQEAgdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxl
UHJpdmF0ZTo6b25DbwogewogICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKIAotICAgIGludGVyYWN0
aW9uRW5naW5lLnJlc2V0KG5ldyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUod2ViUGFnZVBy
b3h5LmdldCgpLCBxLCBwYWdlVmlldy5kYXRhKCkpKTsKLSAgICBwYWdlVmlldy0+ZXZlbnRIYW5k
bGVyKCktPnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoaW50ZXJhY3Rpb25FbmdpbmUuZGF0
YSgpKTsKKyAgICBtX3ZpZXdwb3J0SGFuZGxlci5yZXNldChuZXcgUXRWaWV3cG9ydEhhbmRsZXIo
d2ViUGFnZVByb3h5LmdldCgpLCBxLCBwYWdlVmlldy5kYXRhKCkpKTsKKyAgICBwYWdlVmlldy0+
ZXZlbnRIYW5kbGVyKCktPnNldFZpZXdwb3J0SGFuZGxlcihtX3ZpZXdwb3J0SGFuZGxlci5kYXRh
KCkpOwogCiAgICAgLy8gVHJpZ2dlciBzZXR0aW5nIG9mIGNvcnJlY3QgdmlzaWJpbGl0eSBmbGFn
cyBhZnRlciBldmVyeXRoaW5nIHdhcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLgogICAgIF9x
X29uVmlzaWJsZUNoYW5nZWQoKTsKQEAgLTg0MywyMCArODQzLDIwIEBAIHZvaWQgUVF1aWNrV2Vi
Vmlld0ZsaWNrYWJsZVByaXZhdGU6Om9uQ28KIAogdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxl
UHJpdmF0ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdw
b3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKIHsKLSAgICBpZiAoaW50ZXJhY3Rpb25Fbmdp
bmUpCi0gICAgICAgIGludGVyYWN0aW9uRW5naW5lLT52aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2Vk
KG5ld0F0dHJpYnV0ZXMpOworICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxlcikKKyAgICAgICAgbV92
aWV3cG9ydEhhbmRsZXItPnZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQobmV3QXR0cmlidXRlcyk7
CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0
U2l6ZSgpCiB7Ci0gICAgLy8gRklYTUU6IEV4YW1pbmUgd2h5IHRoZXJlIGlzIG5vdCBhbiBpbnRl
cmFjdGlvbkVuZ2luZSBoZXJlIGluIHRoZSBiZWdpbm5pbmcuCi0gICAgaWYgKGludGVyYWN0aW9u
RW5naW5lKQotICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZS0+dmlld3BvcnRJdGVtU2l6ZUNoYW5n
ZWQoKTsKKyAgICAvLyBGSVhNRTogRXhhbWluZSB3aHkgdGhlcmUgaXMgbm90IGFuIHZpZXdwb3J0
SGFuZGxlciBoZXJlIGluIHRoZSBiZWdpbm5pbmcuCisgICAgaWYgKG1fdmlld3BvcnRIYW5kbGVy
KQorICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+dmlld3BvcnRJdGVtU2l6ZUNoYW5nZWQoKTsK
IH0KIAogdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6cGFnZURpZFJlcXVlc3RT
Y3JvbGwoY29uc3QgUVBvaW50JiBwb3MpCiB7Ci0gICAgaW50ZXJhY3Rpb25FbmdpbmUtPnBhZ2VD
b250ZW50UG9zaXRpb25SZXF1ZXN0ZWQocG9zKTsKKyAgICBtX3ZpZXdwb3J0SGFuZGxlci0+cGFn
ZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZChwb3MpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdG
bGlja2FibGVQcml2YXRlOjpkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgUVNpemUmIG5ld1Np
emUpCkBAIC04NjQsNyArODY0LDcgQEAgdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0
ZTo6ZGlkQwogICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKIAogICAgIHBhZ2VWaWV3LT5zZXRDb250
ZW50c1NpemUobmV3U2l6ZSk7IC8vIGVtaXRzIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKQotICAgIGlu
dGVyYWN0aW9uRW5naW5lLT5wYWdlQ29udGVudHNTaXplQ2hhbmdlZChuZXdTaXplLCBxLT5ib3Vu
ZGluZ1JlY3QoKS5zaXplKCkudG9TaXplKCkpOworICAgIG1fdmlld3BvcnRIYW5kbGVyLT5wYWdl
Q29udGVudHNTaXplQ2hhbmdlZChuZXdTaXplLCBxLT5ib3VuZGluZ1JlY3QoKS5zaXplKCkudG9T
aXplKCkpOwogfQogCiAvKiEKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2Vidmlld19wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAkocmV2aXNpb24gMTE5Mzg5KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAkod29ya2luZyBjb3B5KQpA
QCAtNDcsNyArNDcsNyBAQCBjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogY2xhc3MgUXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhOwotY2xhc3MgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOworY2xhc3MgUXRWaWV3cG9ydEhhbmRsZXI7CiBjbGFzcyBR
dFdlYlBhZ2VMb2FkQ2xpZW50OwogY2xhc3MgUXRXZWJQYWdlUG9saWN5Q2xpZW50OwogY2xhc3Mg
UXRXZWJQYWdlVUlDbGllbnQ7CkBAIC0yMTQsNyArMjE0LDcgQEAgcHJpdmF0ZToKICAgICBRUXVp
Y2tXZWJWaWV3RXhwZXJpbWVudGFsKiBtX2V4cGVyaW1lbnRhbDsKIAogICAgIGZyaWVuZCBjbGFz
cyBRV2ViS2l0VGVzdDsKLSAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmU7CisgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI7
CiAgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDsKICAgICBmcmll
bmQgY2xhc3MgV2ViS2l0OjpRdFdlYlBhZ2VQb2xpY3lDbGllbnQ7CiAgICAgZnJpZW5kIGNsYXNz
IFdlYktpdDo6UXRXZWJQYWdlVUlDbGllbnQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCShyZXZpc2lvbiAxMTkzODkp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFz
cyBEb3dubG9hZFByb3h5OwogY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKIGNsYXNzIFF0RGlhbG9n
UnVubmVyOwotY2xhc3MgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOworY2xhc3MgUXRWaWV3
cG9ydEhhbmRsZXI7CiBjbGFzcyBRdFdlYkNvbnRleHQ7CiBjbGFzcyBRdFdlYkVycm9yOwogY2xh
c3MgUXRXZWJQYWdlTG9hZENsaWVudDsKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIGlu
dCBsb2FkUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX2xvYWRQcm9ncmVzczsgfQogICAgIHZv
aWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKLSAgICB2aXJ0dWFsIFdlYktpdDo6UXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKiB2aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCkgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlciogdmlld3BvcnRIYW5kbGVy
KCkgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKSB7
IH0KICAgICB2b2lkIHVwZGF0ZVRvdWNoVmlld3BvcnRTaXplKCk7CiAKQEAgLTIyMiwxNCArMjIy
LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Db21wb25lbnRDb21wbGV0ZSgpOwog
CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6UXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKiB2aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCkgeyByZXR1cm4g
aW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgpOyB9CisgICAgdmlydHVhbCBXZWJLaXQ6OlF0Vmlld3Bv
cnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRsZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci5k
YXRhKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgUVBvaW50JiBwb3MpOwogICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgUVNpemUmIG5ld1NpemUp
OwogCiBwcml2YXRlOgotICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6UXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lPiBpbnRlcmFjdGlvbkVuZ2luZTsKKyAgICBRU2NvcGVkUG9pbnRlcjxXZWJL
aXQ6OlF0Vmlld3BvcnRIYW5kbGVyPiBtX3ZpZXdwb3J0SGFuZGxlcjsKIH07CiAKICNlbmRpZiAv
LyBxcXVpY2t3ZWJ2aWV3X3BfcF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F3ZWJraXR0ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNwcAkocmV2aXNpb24gMTE5Mzg5KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxd2Via2l0dGVz
dF9wLmgiCiAKLSNpbmNsdWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKKyNpbmNs
dWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgogI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcF9wLmgi
CiAjaW5jbHVkZSAicXdpbmRvd3N5c3RlbWludGVyZmFjZV9xcGEuaCIKICNpbmNsdWRlIDxRTXV0
YWJsZUxpc3RJdGVyYXRvcj4KQEAgLTEyMCw0OSArMTIwLDQ5IEBAIFFTaXplIFFXZWJLaXRUZXN0
Ojpjb250ZW50c1NpemUoKSBjb25zdAogCiBRVmFyaWFudCBRV2ViS2l0VGVzdDo6Y29udGVudHNT
Y2FsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogdmll
d3BvcnQgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCkpCisg
ICAgaWYgKFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZp
ZXdwb3J0SGFuZGxlcigpKQogICAgICAgICByZXR1cm4gdmlld3BvcnQtPmN1cnJlbnRDU1NTY2Fs
ZSgpOwogICAgIHJldHVybiAxLjA7CiB9CiAKIFFWYXJpYW50IFFXZWJLaXRUZXN0OjpkZXZpY2VQ
aXhlbFJhdGlvKCkgY29uc3QKIHsKLSAgICBpZiAoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
KiB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUo
KSkKKyAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0
ZS0+dmlld3BvcnRIYW5kbGVyKCkpCiAgICAgICAgIHJldHVybiB2aWV3cG9ydC0+bV9kZXZpY2VQ
aXhlbFJhdGlvOwogICAgIHJldHVybiAxLjA7CiB9CiAKIFFWYXJpYW50IFFXZWJLaXRUZXN0Ojpp
bml0aWFsU2NhbGUoKSBjb25zdAogewotICAgIGlmIChRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmUqIHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZSgpKQorICAgIGlmIChRdFZpZXdwb3J0SGFuZGxlciogdmlld3BvcnQgPSBtX3dlYlZpZXdQcml2
YXRlLT52aWV3cG9ydEhhbmRsZXIoKSkKICAgICAgICAgcmV0dXJuIHZpZXdwb3J0LT5tX3Jhd0F0
dHJpYnV0ZXMuaW5pdGlhbFNjYWxlOwogICAgIHJldHVybiAxLjA7CiB9CiAKIFFWYXJpYW50IFFX
ZWJLaXRUZXN0OjptaW5pbXVtU2NhbGUoKSBjb25zdAogewotICAgIGlmIChRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUqIHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZSgpKQorICAgIGlmIChRdFZpZXdwb3J0SGFuZGxlciogdmlld3BvcnQgPSBt
X3dlYlZpZXdQcml2YXRlLT52aWV3cG9ydEhhbmRsZXIoKSkKICAgICAgICAgcmV0dXJuIHZpZXdw
b3J0LT5tX21pbmltdW1TY2FsZTsKICAgICByZXR1cm4gMS4wOwogfQogCiBRVmFyaWFudCBRV2Vi
S2l0VGVzdDo6bWF4aW11bVNjYWxlKCkgY29uc3QKIHsKLSAgICBpZiAoUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lKiB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmUoKSkKKyAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0ID0gbV93
ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyKCkpCiAgICAgICAgIHJldHVybiB2aWV3cG9y
dC0+bV9tYXhpbXVtU2NhbGU7CiAgICAgcmV0dXJuIDEuMDsKIH0KIAogUVZhcmlhbnQgUVdlYktp
dFRlc3Q6OmlzU2NhbGFibGUoKSBjb25zdAogewotICAgIGlmIChRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUqIHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZSgpKQorICAgIGlmIChRdFZpZXdwb3J0SGFuZGxlciogdmlld3BvcnQgPSBtX3dlYlZp
ZXdQcml2YXRlLT52aWV3cG9ydEhhbmRsZXIoKSkKICAgICAgICAgcmV0dXJuICEhdmlld3BvcnQt
Pm1fcmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBR
VmFyaWFudCBRV2ViS2l0VGVzdDo6bGF5b3V0U2l6ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogdmlld3BvcnQgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3
cG9ydEludGVyYWN0aW9uRW5naW5lKCkpCisgICAgaWYgKFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3
cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlcigpKQogICAgICAgICByZXR1
cm4gUVNpemVGKHZpZXdwb3J0LT5tX3Jhd0F0dHJpYnV0ZXMubGF5b3V0U2l6ZSk7CiAgICAgcmV0
dXJuIFFTaXplRigpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2Vz
dHVyZVJlY29nbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcAkocmV2aXNpb24gMTE5Mzg5KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw5ICs0MSw5IEBAIHZvaWQgUXRHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQog
ICAgIG1fc3RhdGUgPSBOb0dlc3R1cmU7CiB9CiAKLVF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZSogUXRHZXN0dXJlUmVjb2duaXplcjo6aW50ZXJhY3Rpb25FbmdpbmUoKQorUXRWaWV3cG9ydEhh
bmRsZXIqIFF0R2VzdHVyZVJlY29nbml6ZXI6OnZpZXdwb3J0SGFuZGxlcigpCiB7Ci0gICAgcmV0
dXJuIG1fZXZlbnRIYW5kbGVyLT5pbnRlcmFjdGlvbkVuZ2luZSgpOworICAgIHJldHVybiBtX2V2
ZW50SGFuZGxlci0+dmlld3BvcnRIYW5kbGVyKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVj
b2duaXplci5oCShyZXZpc2lvbiAxMTkzODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRHZXN0dXJlUmVjb2duaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmU7CitjbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKIGNsYXNzIFF0V2ViUGFnZUV2ZW50SGFuZGxl
cjsKIAogY2xhc3MgUXRHZXN0dXJlUmVjb2duaXplciB7CkBAIC00Niw3ICs0Niw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgR2VzdHVyZVJlY29nbml6ZWQKICAgICB9IG1fc3RhdGU7CiAKLSAgICBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIGludGVyYWN0aW9uRW5naW5lKCk7CisgICAgUXRW
aWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0SGFuZGxlcigpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVj
b2duaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwCShyZXZpc2lvbiAxMTkzODkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJRdFBh
bkdlc3R1cmVSZWNvZ25pemVyLmgiCiAKLSNpbmNsdWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUuaCIKKyNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2Vi
UGFnZUV2ZW50SGFuZGxlci5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM4LDcgKzM4LDcg
QEAgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6UXRQYW5HZXN0dXJlUmVjbwogCiBib29sIFF0UGFu
R2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZShjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYg
dG91Y2hQb2ludCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQogewotICAgIGlmICghaW50
ZXJhY3Rpb25FbmdpbmUoKSkKKyAgICBpZiAoIXZpZXdwb3J0SGFuZGxlcigpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBtX2xhc3RQb3NpdGlvbiA9IHRvdWNoUG9pbnQucG9zKCk7CkBA
IC00OCw3ICs0OCw3IEBAIGJvb2wgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlKGNvbnMK
ICAgICBjYXNlIE5vR2VzdHVyZToKICAgICAgICAgbV9zdGF0ZSA9IEdlc3R1cmVSZWNvZ25pdGlv
blN0YXJ0ZWQ7CiAgICAgICAgIG1fZmlyc3RTY3JlZW5Qb3NpdGlvbiA9IHRvdWNoUG9pbnQuc2Nl
bmVQb3MoKTsKLSAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+Y2FuY2VsU2Nyb2xsQW5pbWF0
aW9uKCk7CisgICAgICAgIHZpZXdwb3J0SGFuZGxlcigpLT5jYW5jZWxTY3JvbGxBbmltYXRpb24o
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGNhc2UgR2VzdHVyZVJlY29nbml0aW9uU3Rh
cnRlZDogewogICAgICAgICAvLyBUbyBzdGFydCB0aGUgZ2VzdHVyZSwgdGhlIGRlbHRhIGZyb20g
c3RhcnQgaW4gc2NyZWVuIGNvb3JkaW5hdGVzCkBAIC01OCwxMSArNTgsMTEgQEAgYm9vbCBRdFBh
bkdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGUoY29ucwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVjb2duaXplZDsKLSAgICAgICAgaW50ZXJh
Y3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVN0YXJ0ZWQodG91Y2hQb2ludC5wb3MoKSwgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOworICAgICAgICB2aWV3cG9ydEhhbmRsZXIoKS0+cGFuR2VzdHVyZVN0
YXJ0ZWQodG91Y2hQb2ludC5wb3MoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplZDoKLSAgICAgICAg
aW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUodG91Y2hQb2ludC5w
b3MoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgICAgICB2aWV3cG9ydEhhbmRsZXIoKS0+
cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUodG91Y2hQb2ludC5wb3MoKSwgZXZlbnRUaW1lc3RhbXBN
aWxsaXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTc1LDggKzc1LDggQEAgdm9pZCBRdFBhbkdlc3R1cmVSZWNv
Z25pemVyOjpmaW5pc2goY29ucwogICAgIGlmIChtX3N0YXRlID09IE5vR2VzdHVyZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGludGVyYWN0aW9uRW5naW5lKCkpOwotICAgIGludGVy
YWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVFbmRlZCh0b3VjaFBvaW50LnBvcygpLCBldmVudFRp
bWVzdGFtcE1pbGxpcyk7CisgICAgQVNTRVJUKHZpZXdwb3J0SGFuZGxlcigpKTsKKyAgICB2aWV3
cG9ydEhhbmRsZXIoKS0+cGFuR2VzdHVyZUVuZGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGlt
ZXN0YW1wTWlsbGlzKTsKICAgICByZXNldCgpOwogfQogCkBAIC04NSw4ICs4NSw4IEBAIHZvaWQg
UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6Y2FuY2VsKCkKICAgICBpZiAobV9zdGF0ZSA9PSBOb0dl
c3R1cmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdl
c3R1cmVFbmRlZChtX2xhc3RQb3NpdGlvbiwgbV9sYXN0RXZlbnRUaW1lc3RhbXBNaWxsaXMpOwot
ICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVDYW5jZWxsZWQoKTsKKyAgICB2aWV3
cG9ydEhhbmRsZXIoKS0+cGFuR2VzdHVyZUVuZGVkKG1fbGFzdFBvc2l0aW9uLCBtX2xhc3RFdmVu
dFRpbWVzdGFtcE1pbGxpcyk7CisgICAgdmlld3BvcnRIYW5kbGVyKCktPnBhbkdlc3R1cmVDYW5j
ZWxsZWQoKTsKICAgICByZXNldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcAkocmV2aXNp
b24gMTE5Mzg5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJl
UmVjb2duaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaCIKIAotI2lu
Y2x1ZGUgIlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oIgorI2luY2x1ZGUgIlF0Vmlld3Bv
cnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVk
ZSA8UXRDb3JlL1FMaW5lRj4KIApAQCAtNDcsNyArNDcsNyBAQCBRdFBpbmNoR2VzdHVyZVJlY29n
bml6ZXI6OlF0UGluY2hHZXN0dXJlCiAKIGJvb2wgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjp1
cGRhdGUoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50MSwgY29uc3QgUVRvdWNo
RXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50MikKIHsKLSAgICBBU1NFUlQoaW50ZXJhY3Rpb25Fbmdp
bmUoKSk7CisgICAgQVNTRVJUKHZpZXdwb3J0SGFuZGxlcigpKTsKICAgICBjb25zdCBxcmVhbCBj
dXJyZW50RmluZ2VyRGlzdGFuY2UgPSBRTGluZUYocG9pbnQxLnNjcmVlblBvcygpLCBwb2ludDIu
c2NyZWVuUG9zKCkpLmxlbmd0aCgpOwogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2Ug
Tm9HZXN0dXJlOgpAQCAtNTksNyArNTksNyBAQCBib29sIFF0UGluY2hHZXN0dXJlUmVjb2duaXpl
cjo6dXBkYXRlKGNvCiAgICAgICAgIGlmIChwaW5jaERpc3RhbmNlIDwgcGluY2hJbml0aWFsVHJp
Z2dlckRpc3RhbmNlVGhyZXNob2xkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml6ZWQ7Ci0gICAgICAgIGludGVyYWN0aW9uRW5naW5l
KCktPnBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29tcHV0ZVBpbmNoQ2VudGVyKHBvaW50MSwgcG9pbnQy
KSk7CisgICAgICAgIHZpZXdwb3J0SGFuZGxlcigpLT5waW5jaEdlc3R1cmVTdGFydGVkKGNvbXB1
dGVQaW5jaENlbnRlcihwb2ludDEsIHBvaW50MikpOwogCiAgICAgICAgIC8vIFdlIHJlc2V0IHRo
ZSBpbml0aWFsIHNwYW4gZGlzdGFuY2UgdG8gdGhlIGN1cnJlbnQgZGlzdGFuY2Ugb2YgdGhlCiAg
ICAgICAgIC8vIHRvdWNoIHBvaW50cyBpbiBvcmRlciB0byBhdm9pZCB0aGUganVtcCBjYXVzZWQg
YnkgdGhlIGV2ZW50cyB3aGljaApAQCAtNzEsNyArNzEsNyBAQCBib29sIFF0UGluY2hHZXN0dXJl
UmVjb2duaXplcjo6dXBkYXRlKGNvCiAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplZDoKICAgICAg
ICAgY29uc3QgcXJlYWwgdG90YWxTY2FsZUZhY3RvciA9IGN1cnJlbnRGaW5nZXJEaXN0YW5jZSAv
IG1faW5pdGlhbEZpbmdlckRpc3RhbmNlOwogICAgICAgICBjb25zdCBRUG9pbnRGIHRvdWNoQ2Vu
dGVySW5WaWV3Q29vcmRpbmF0ZXMgPSBjb21wdXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIp
OwotICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5waW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRl
KHRvdWNoQ2VudGVySW5WaWV3Q29vcmRpbmF0ZXMsIHRvdGFsU2NhbGVGYWN0b3IpOworICAgICAg
ICB2aWV3cG9ydEhhbmRsZXIoKS0+cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZSh0b3VjaENlbnRl
ckluVmlld0Nvb3JkaW5hdGVzLCB0b3RhbFNjYWxlRmFjdG9yKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTg1LDggKzg1LDggQEAgdm9pZCBRdFBpbmNo
R2VzdHVyZVJlY29nbml6ZXI6OmZpbmlzaCgpCiAgICAgaWYgKG1fc3RhdGUgPT0gTm9HZXN0dXJl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaW50ZXJhY3Rpb25FbmdpbmUoKSk7Ci0g
ICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGluY2hHZXN0dXJlRW5kZWQoKTsKKyAgICBBU1NFUlQo
dmlld3BvcnRIYW5kbGVyKCkpOworICAgIHZpZXdwb3J0SGFuZGxlcigpLT5waW5jaEdlc3R1cmVF
bmRlZCgpOwogICAgIHJlc2V0KCk7CiB9CiAKQEAgLTk1LDggKzk1LDggQEAgdm9pZCBRdFBpbmNo
R2VzdHVyZVJlY29nbml6ZXI6OmNhbmNlbCgpCiAgICAgaWYgKG1fc3RhdGUgPT0gTm9HZXN0dXJl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaW50ZXJhY3Rpb25FbmdpbmUoKSk7Ci0g
ICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGluY2hHZXN0dXJlQ2FuY2VsbGVkKCk7CisgICAgQVNT
RVJUKHZpZXdwb3J0SGFuZGxlcigpKTsKKyAgICB2aWV3cG9ydEhhbmRsZXIoKS0+cGluY2hHZXN0
dXJlQ2FuY2VsbGVkKCk7CiAgICAgcmVzZXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwCShyZXZpc2lvbiAxMTkz
NzIpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUuY3BwOjExOTM3MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8YmVuamFt
aW5Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKKworI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCisjaW5j
bHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisj
aW5jbHVkZSAicXdlYmtpdHRlc3RfcC5oIgorI2luY2x1ZGUgPFFQb2ludEY+CisjaW5jbHVkZSA8
UVRyYW5zZm9ybT4KKyNpbmNsdWRlIDxRV2hlZWxFdmVudD4KKyNpbmNsdWRlIDxRdFF1aWNrL3Fx
dWlja2l0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RhdGljIGNvbnN0IGludCBrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxpcyA9
IDI1MDsKKworLy8gVVBEQVRFIERFRkVSUklORyAoU1VTUEVORC9SRVNVTUUpCisvLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBXaGVuIGludGVyYWN0aW9uIHdpdGgg
dGhlIGNvbnRlbnQsIGVpdGhlciBieSBhbmltYXRpbmcgb3IgYnkgdGhlIGhhbmQgb2YgdGhlIHVz
ZXIsCisvLyBpdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHNtb290aCBhbmltYXRpb25zIG9mIGF0
IGxlYXN0IDYwZnBzIGluIG9yZGVyIHRvIGdpdmUgYQorLy8gZ29vZCB1c2VyIGV4cGVyaWVuY2Uu
CisvLworLy8gSW4gb3JkZXIgdG8gZG8gdGhpcyB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdW5rbm93
biBmYWN0b3JzLiBUaGVzZSBpbmNsdWRlIGRldmljZQorLy8gc2Vuc29ycyAoZ2VvbG9jYXRpb24s
IG9yaWVudGF0aW9uIHVwZGF0ZXMgZXRjKSwgQ1NTMyBhbmltYXRpb25zLCBKYXZhU2NyaXB0Cisv
LyBleGVjdHV0aW9uLCBzdWIgcmVzb3VyY2UgbG9hZHMgZXRjLiBXZSBkbyB0aGlzIGJ5IGVtaXR0
aW5nIHN1c3BlbmQgYW5kIHJlc3VtZQorLy8gc2lnbmFscywgd2hpY2ggYXJlIHRoZW4gaGFuZGxl
ZCBieSB0aGUgdmlld3BvcnQgYW5kIHByb3BhZ2F0ZXMgdG8gdGhlIHJpZ2h0IHBsYWNlLgorLy8K
Ky8vIEZvciB0aGlzIHJlYXNvbiB0aGUgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCBtdXN0
IGJlIHVzZWQgd2hlbiB3ZSBpbnRlcmFjdAorLy8gb3IgYW5pbWF0ZSB0aGUgY29udGVudC4KKy8v
CisvLyBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB3aGVuIHdlIHVwZGF0ZSBjb250ZW50IHByb3Bl
cnRpZXMsIHdlIG1pZ2h0IHJlY2VpdmUgbm90aWZ5CisvLyBzaWduYWxzIHNlbmQgbXkgdGhlIGNv
bnRlbnQgaXRlbSBpdHNlbGYsIGFuZCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBub3QgYWN0IG9u
CisvLyB0aGVzZSB1bmNvbmRpdGlvbmFsbHkuIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgcGlu
Y2ggem9vbSwgd2hpY2ggY2hhbmdlcyB0aGUKKy8vIHBvc2l0aW9uIGFuZCB3aWxsIHRodXMgcmVz
dWx0IGluIGEgUVF1aWNrV2ViUGFnZTo6Z2VvbWV0cnlDaGFuZ2VkKCkgc2lnbmFsIGdldHRpbmcK
Ky8vIGVtaXR0ZWQuCisvLworLy8gSWYgc29tZXRoaW5nIHNob3VsZCBvbmx5IGJlIGV4ZWN1dGVk
IGR1cmluZyB1cGRhdGUgZGVmZXJyaW5nLCBpdCBpcyBwb3NzaWJsZSB0bworLy8gY2hlY2sgZm9y
IHRoYXQgdXNpbmcgQVNTRVJUKG1fc3VzcGVuZENvdW50KS4KKworY2xhc3MgVmlld3BvcnRVcGRh
dGVEZWZlcnJlciB7CitwdWJsaWM6CisgICAgZW51bSBTdXNwZW5kQ29udGVudEZsYWcgeyBEZWZl
clVwZGF0ZSwgRGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCB9OworICAgIFZpZXdwb3J0VXBk
YXRlRGVmZXJyZXIoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUsIFN1c3BlbmRD
b250ZW50RmxhZyBzdXNwZW5kQ29udGVudEZsYWcgPSBEZWZlclVwZGF0ZSkKKyAgICAgICAgOiBl
bmdpbmUoZW5naW5lKQorICAgIHsKKyAgICAgICAgZW5naW5lLT5tX3N1c3BlbmRDb3VudCsrOwor
CisgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3VzcGVuZCBjb250ZW50IGZvciBpbW1l
ZGlhdGUgdXBkYXRlcworICAgICAgICAvLyBvbmx5IGR1cmluZyBhbmltYXRpb25zIG9yIGxvbmdl
ciBnZXN0dXJlcy4KKyAgICAgICAgaWYgKHN1c3BlbmRDb250ZW50RmxhZyA9PSBEZWZlclVwZGF0
ZUFuZFN1c3BlbmRDb250ZW50KQorICAgICAgICAgICAgZW5naW5lLT5zdXNwZW5kUGFnZUNvbnRl
bnQoKTsKKyAgICB9CisKKyAgICB+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcigpCisgICAgeworICAg
ICAgICBpZiAoLS0oZW5naW5lLT5tX3N1c3BlbmRDb3VudCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgZW5naW5lLT5yZXN1bWVQYWdlQ29udGVudCgpOworCisgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IHdpbGwgYmUgcmVxdWVz
dGVkLgorICAgICAgICBlbmdpbmUtPmluZm9ybVZpc2libGVDb250ZW50Q2hhbmdlKFFQb2ludEYo
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSog
Y29uc3QgZW5naW5lOworfTsKKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnN1
c3BlbmRQYWdlQ29udGVudCgpCit7CisgICAgaWYgKG1faGFzU3VzcGVuZGVkQ29udGVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9oYXNTdXNwZW5kZWRDb250ZW50ID0gdHJ1ZTsKKyAgICBt
X3dlYlBhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9
CisKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpyZXN1bWVQYWdlQ29udGVudCgp
Cit7CisgICAgaWYgKCFtX2hhc1N1c3BlbmRlZENvbnRlbnQpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2hhc1N1c3BlbmRlZENvbnRlbnQgPSBmYWxzZTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cmVz
dW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKworLy8gQSBmbG9hdGluZyBw
b2ludCBjb21wYXJlIHdpdGggYWJzb2x1dGUgZXJyb3IuCitzdGF0aWMgaW5saW5lIGJvb2wgZnV6
enlDb21wYXJlKHFyZWFsIGEsIHFyZWFsIGIsIHFyZWFsIGVwc2lsb24pCit7CisgICAgcmV0dXJu
IHFBYnMoYSAtIGIpIDwgZXBzaWxvbjsKK30KKworaW5saW5lIHFyZWFsIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6Y3NzU2NhbGVGcm9tSXRlbShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGl0ZW1TY2FsZSAvIG1fZGV2aWNlUGl4ZWxSYXRpbzsKK30KKworaW5saW5l
IHFyZWFsIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6aXRlbVNjYWxlRnJvbUNTUyhxcmVh
bCBjc3NTY2FsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gY3NzU2NhbGUgKiBtX2RldmljZVBpeGVs
UmF0aW87Cit9CisKK2lubGluZSBxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Oml0
ZW1Db29yZEZyb21DU1MocXJlYWwgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZhbHVlICog
bV9kZXZpY2VQaXhlbFJhdGlvOworfQorCitzdGF0aWMgaW5saW5lIFFQb2ludEYgYm91bmRQb3Np
dGlvbihjb25zdCBRUG9pbnRGIG1pblBvc2l0aW9uLCBjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwg
Y29uc3QgUVBvaW50RiYgbWF4UG9zaXRpb24pCit7CisgICAgcmV0dXJuIFFQb2ludEYocUJvdW5k
KG1pblBvc2l0aW9uLngoKSwgcG9zaXRpb24ueCgpLCBtYXhQb3NpdGlvbi54KCkpLAorICAgICAg
ICAgICAgICAgICAgIHFCb3VuZChtaW5Qb3NpdGlvbi55KCksIHBvc2l0aW9uLnkoKSwgbWF4UG9z
aXRpb24ueSgpKSk7Cit9CisKK2lubGluZSBRUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjppdGVtUmVjdEZyb21DU1MoY29uc3QgUVJlY3RGJiBjc3NSZWN0KSBjb25zdAoreworICAg
IFFSZWN0RiBpdGVtUmVjdDsKKworICAgIGl0ZW1SZWN0LnNldFgoaXRlbUNvb3JkRnJvbUNTUyhj
c3NSZWN0LngoKSkpOworICAgIGl0ZW1SZWN0LnNldFkoaXRlbUNvb3JkRnJvbUNTUyhjc3NSZWN0
LnkoKSkpOworICAgIGl0ZW1SZWN0LnNldFdpZHRoKGl0ZW1Db29yZEZyb21DU1MoY3NzUmVjdC53
aWR0aCgpKSk7CisgICAgaXRlbVJlY3Quc2V0SGVpZ2h0KGl0ZW1Db29yZEZyb21DU1MoY3NzUmVj
dC5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIGl0ZW1SZWN0OworfQorCitRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShXZWJLaXQ6OldlYlBh
Z2VQcm94eSogcHJveHksIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSwgUVF1aWNrV2ViUGFn
ZSogcGFnZUl0ZW0pCisgICAgOiBtX3dlYlBhZ2VQcm94eShwcm94eSkKKyAgICAsIG1fdmlld3Bv
cnRJdGVtKHZpZXdwb3J0SXRlbSkKKyAgICAsIG1fcGFnZUl0ZW0ocGFnZUl0ZW0pCisgICAgLCBt
X2FsbG93c1VzZXJTY2FsaW5nKGZhbHNlKQorICAgICwgbV9taW5pbXVtU2NhbGUoMSkKKyAgICAs
IG1fbWF4aW11bVNjYWxlKDEpCisgICAgLCBtX2RldmljZVBpeGVsUmF0aW8oMSkKKyAgICAsIG1f
c3VzcGVuZENvdW50KDApCisgICAgLCBtX2hhc1N1c3BlbmRlZENvbnRlbnQoZmFsc2UpCisgICAg
LCBtX2hhZFVzZXJJbnRlcmFjdGlvbihmYWxzZSkKKyAgICAsIG1fc2NhbGVBbmltYXRpb24obmV3
IFNjYWxlQW5pbWF0aW9uKHRoaXMpKQorICAgICwgbV9waW5jaFN0YXJ0U2NhbGUoLTEpCisgICAg
LCBtX2xhc3RDb21taXR0ZWRTY2FsZSgtMSkKKyAgICAsIG1fem9vbU91dFNjYWxlKDAuMCkKK3sK
KyAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBT
TE9UKGZsaWNrTW92ZVN0YXJ0ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25u
ZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRFbmRlZCgpKSwgU0xPVChmbGlja01v
dmVFbmRlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworCisgICAgY29ubmVjdChtX3NjYWxl
QW5pbWF0aW9uLCBTSUdOQUwodmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksCisgICAgICAgICAgICBT
TE9UKHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksIFF0OjpEaXJlY3RDb25u
ZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTChzdGF0ZUNoYW5n
ZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkp
LAorICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RB
bmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSksIFF0OjpEaXJlY3RD
b25uZWN0aW9uKTsKK30KKworUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp+UXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKCkKK3sKK30KKworcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjppbm5lckJvdW5kZWRDU1NTY2FsZShxcmVhbCBjc3NTY2FsZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gcUJvdW5kKG1fbWluaW11bVNjYWxlLCBjc3NTY2FsZSwgbV9tYXhpbXVtU2NhbGUp
OworfQorCitxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Om91dGVyQm91bmRlZENT
U1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAoreworICAgIGlmIChtX2FsbG93c1VzZXJTY2Fs
aW5nKSB7CisgICAgICAgIC8vIEJvdW5kZWQgYnkgWzAuMSwgMTAuMF0gbGlrZSB0aGUgdmlld3Bv
cnQgbWV0YSBjb2RlIGluIFdlYkNvcmUuCisgICAgICAgIHFyZWFsIGhhcmRNaW4gPSBxTWF4PHFy
ZWFsPigwLjEsIHFyZWFsKDAuNSkgKiBtX21pbmltdW1TY2FsZSk7CisgICAgICAgIHFyZWFsIGhh
cmRNYXggPSBxTWluPHFyZWFsPigxMCwgcXJlYWwoMi4wKSAqIG1fbWF4aW11bVNjYWxlKTsKKyAg
ICAgICAgcmV0dXJuIHFCb3VuZChoYXJkTWluLCBjc3NTY2FsZSwgaGFyZE1heCk7CisgICAgfQor
ICAgIHJldHVybiBpbm5lckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7Cit9CisKK3ZvaWQgUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKGNvbnN0
IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKK3sKKyAgICBtX3Jh
d0F0dHJpYnV0ZXMgPSBuZXdBdHRyaWJ1dGVzOworICAgIFdlYkNvcmU6OnJlc3RyaWN0U2NhbGVG
YWN0b3JUb0luaXRpYWxTY2FsZUlmTm90VXNlclNjYWxhYmxlKG1fcmF3QXR0cmlidXRlcyk7CisK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBSZXNldHRpbmcgaGVyZSBpcyB3cm9uZywgaXQgc2hv
dWxkIGhhcHBlbiBvbmx5IGZvciB0aGUgZmlyc3QKKyAgICAgICAgLy8gdmlld3BvcnQgY2hhbmdl
IGZvciBhIGdpdmVuIHBhZ2UgYW5kIGZpcnN0IHdoZW4gd2UgcGFpbnQgdGhlIHBhZ2UgZm9yCisg
ICAgICAgIC8vIHRoZSBmaXJzdCB0aW1lLgorCisgICAgICAgIG1faGFkVXNlckludGVyYWN0aW9u
ID0gZmFsc2U7CisKKyAgICAgICAgbV96b29tT3V0U2NhbGUgPSAwLjA7CisgICAgICAgIG1fc2Nh
bGVTdGFjay5jbGVhcigpOworCisgICAgICAgIC8vIFRoaXMgcGFydCBiZWxvdyBzaG91bGQgZ28g
ZnVsbHkgYXdheSB3aGVuIHRoZSBhYm92ZSBwbGFuIGlzIGltcGxlbWVudGVkLgorCisgICAgICAg
IG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOworICAgICAgICBtX3NjYWxlQW5pbWF0aW9u
LT5zdG9wKCk7CisKKyAgICAgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7CisgICAg
ICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKKyAgICAgICAgbV90b3VjaFVwZGF0
ZURlZmVycmVyLmNsZWFyKCk7CisgICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIuY2xl
YXIoKTsKKyAgICAgICAgQVNTRVJUKCFtX3N1c3BlbmRDb3VudCk7CisgICAgICAgIEFTU0VSVCgh
bV9oYXNTdXNwZW5kZWRDb250ZW50KTsKKyAgICB9CisKKyAgICBtX2RldmljZVBpeGVsUmF0aW8g
PSBtX3Jhd0F0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbzsgLy8gU2hvdWxkIHJldHVybiB2YWx1
ZSBmcm9tIHRoZSB3ZWJQYWdlUHJveHkuCisgICAgbV9hbGxvd3NVc2VyU2NhbGluZyA9ICEhbV9y
YXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZTsKKyAgICBtX21pbmltdW1TY2FsZSA9IG1fcmF3QXR0
cmlidXRlcy5taW5pbXVtU2NhbGU7CisgICAgbV9tYXhpbXVtU2NhbGUgPSBtX3Jhd0F0dHJpYnV0
ZXMubWF4aW11bVNjYWxlOworCisgICAgaWYgKCFtX2hhZFVzZXJJbnRlcmFjdGlvbiAmJiAhbV9o
YXNTdXNwZW5kZWRDb250ZW50KSB7CisgICAgICAgIEFTU0VSVChtX3BpbmNoU3RhcnRTY2FsZSA9
PSAtMSk7CisgICAgICAgIC8vIEVtaXRzIGNvbnRlbnRzU2NhbGVDaGFuZ2VkKCk7CisgICAgICAg
IHNldENTU1NjYWxlKG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUpOworICAgIH0KKworICAg
IGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPnZpZXdwb3J0Q2hh
bmdlZCgpOworCisgICAgLy8gSWYgdGhlIHdlYiBhcHAgc3VjY2Vzc2l2ZWx5IGNoYW5nZXMgdGhl
IHZpZXdwb3J0IG9uIHB1cnBvc2UKKyAgICAvLyBpdCB3YW50cyB0byBiZSBpbiBjb250cm9sIGFu
ZCB3ZSBzaG91bGQgZGlzYWJsZSBhbmltYXRpb25zLgorICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXIgZ3VhcmQodGhpcyk7CisgICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRC
b3VuZHMoKSk7Cit9CisKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYWdlQ29u
dGVudHNTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6ZSwgY29uc3QgUVNpemUmIHZpZXdw
b3J0U2l6ZSkKK3sKKyAgICBmbG9hdCBtaW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpjb21wdXRlTWlu
aW11bVNjYWxlRmFjdG9yRm9yQ29udGVudENvbnRhaW5lZChtX3Jhd0F0dHJpYnV0ZXMsIHZpZXdw
b3J0U2l6ZSwgbmV3U2l6ZSk7CisKKyAgICBpZiAoIXFGdXp6eUNvbXBhcmUobWluaW11bVNjYWxl
LCBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlKSkgeworICAgICAgICBtX21pbmltdW1TY2Fs
ZSA9IG1pbmltdW1TY2FsZTsKKyAgICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVu
dGFsKCktPnRlc3QoKS0+dmlld3BvcnRDaGFuZ2VkKCk7CisKKyAgICAgICAgaWYgKCFtX2hhZFVz
ZXJJbnRlcmFjdGlvbiAmJiAhbV9oYXNTdXNwZW5kZWRDb250ZW50KSB7CisgICAgICAgICAgICAv
LyBFbWl0cyBjb250ZW50c1NjYWxlQ2hhbmdlZCgpOworICAgICAgICAgICAgc2V0Q1NTU2NhbGUo
bWluaW11bVNjYWxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEVtaXQgZm9yIHRlc3Rp
bmcgcHVycG9zZXMsIHNvIHRoYXQgaXQgY2FuIGJlIHZlcmlmaWVkIHRoYXQKKyAgICAvLyB3ZSBk
aWRuJ3QgZG8gc2NhbGUgYWRqdXN0bWVudC4KKyAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBl
cmltZW50YWwoKS0+dGVzdCgpLT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7CisKKyAgICBWaWV3
cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOworICAgIHNldFBhZ2VJdGVtUmVjdFZpc2li
bGUobmVhcmVzdFZhbGlkQm91bmRzKCkpOworfQorCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6c2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGl0ZW1SZWN0KQor
eworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdXNwZW5kQ291bnQsCisgICAgICAgICJzZXRQ
YWdlSXRlbVJlY3RWaXNpYmxlIGhhcyB0byBiZSBndWFyZGVkIHVzaW5nIGEgVmlld3BvcnRVcGRh
dGVEZWZlcnJlci4iKTsKKworICAgIGlmIChpdGVtUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHFyZWFsIGl0ZW1TY2FsZSA9IG1fdmlld3BvcnRJdGVtLT53aWR0aCgpIC8g
aXRlbVJlY3Qud2lkdGgoKTsKKworICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUoaXRl
bVNjYWxlKTsKKworICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0aGVyIHdpdGgg
dGhlIHNjYWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNjYWxl
CisgICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgcGFnZSBwb3NpdGlvbiAoZGlzcGxhY2VtZW50IG9u
IHRoZSBmbGlja2FibGUgY29udGVudEl0ZW0gYmVjYXVzZSBvZiBhZGRpdGlvbmFsIGl0ZW1zKS4K
KyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uKG1fcGFnZUl0ZW0tPnBvcygpICsgKGl0ZW1SZWN0LnRv
cExlZnQoKSAqIGl0ZW1TY2FsZSkpOworCisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQ
b3MobmV3UG9zaXRpb24pOworfQorCisvLyBFYXNlIG91dCBvdmVyc2hvb3Qgb2YgMS4yNSBjb21i
aW5lZCB3aXRoIGVhc2UgaW4gY29ycmVjdGlvbiBvZiAwLjI1LiBCb3RoIHF1YWRyYXRpYyB0byBo
YXZlIHBoeXNpY2FsIG1vdGlvbi4KK3N0YXRpYyBxcmVhbCBwaHlzaWNhbE92ZXJzaG9vdChxcmVh
bCB0KQoreworICAgIHJldHVybiAoLXQgKiAodCAtIDIpKSAqIDEuMjUgLSAodCAqIHQpICogMC4y
NTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmFuaW1hdGVQYWdlSXRl
bVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCit7CisgICAgQVNTRVJUKG1fc2Nh
bGVBbmltYXRpb24tPnN0YXRlKCkgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVkKTsKKwor
ICAgIEFTU0VSVCghc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpOworICAgIGlmIChzY3JvbGxBbmlt
YXRpb25BY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVJlY3RGIGN1cnJlbnRQYWdl
SXRlbVJlY3RWaXNpYmxlID0gbV92aWV3cG9ydEl0ZW0tPm1hcFJlY3RUb1dlYkNvbnRlbnQobV92
aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsKKyAgICBpZiAoaXRlbVJlY3QgPT0gY3VycmVu
dFBhZ2VJdGVtUmVjdFZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIFFFYXNpbmdDdXJ2
ZSBlYXNpbmdDdXJ2ZTsKKyAgICBlYXNpbmdDdXJ2ZS5zZXRDdXN0b21UeXBlKHBoeXNpY2FsT3Zl
cnNob290KTsKKworICAgIG1fc2NhbGVBbmltYXRpb24tPnNldER1cmF0aW9uKGtTY2FsZUFuaW1h
dGlvbkR1cmF0aW9uTWlsbGlzKTsKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFYXNpbmdDdXJ2
ZShlYXNpbmdDdXJ2ZSk7CisKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRTdGFydFZhbHVlKGN1
cnJlbnRQYWdlSXRlbVJlY3RWaXNpYmxlKTsKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFbmRW
YWx1ZShpdGVtUmVjdCk7CisKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdGFydCgpOworfQorCit2
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZmxpY2tNb3ZlU3RhcnRlZCgpCit7Cisg
ICAgUV9BU1NFUlQobV92aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOworICAgIG1fc2Nyb2xsVXBk
YXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBW
aWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7CisK
KyAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCk7
CisgICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwg
U0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7CisgICAgY29ubmVjdChtX3ZpZXdwb3J0
SXRlbSwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hh
bmdlZCgpKSk7Cit9CisKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpmbGlja01v
dmVFbmRlZCgpCit7CisgICAgUV9BU1NFUlQoIW1fdmlld3BvcnRJdGVtLT5pc01vdmluZygpKTsK
KyAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGVuZCBvZiB0aGUgcGFuIG9yIHBh
biBraW5ldGljIGFuaW1hdGlvbi4KKyAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7
CisKKyAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IFFQb2ludEYoKTsKKyAgICBkaXNjb25uZWN0
KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKHBh
Z2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsKKyAgICBkaXNjb25uZWN0KG1fdmlld3BvcnRJdGVt
LCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25D
aGFuZ2VkKCkpKTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhZ2VJ
dGVtUG9zaXRpb25DaGFuZ2VkKCkKK3sKKyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uID0gbV92aWV3
cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKTsKKworICAgIGluZm9ybVZpc2libGVDb250ZW50Q2hhbmdl
KG1fbGFzdFNjcm9sbFBvc2l0aW9uIC0gbmV3UG9zaXRpb24pOworCisgICAgbV9sYXN0U2Nyb2xs
UG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OnBhZ2VDb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBjc3NQb3Np
dGlvbikKK3sKKyAgICAvLyBJZ25vcmUgdGhlIHJlcXVlc3QgaWYgc3VzcGVuZGVkLiBDYW4gb25s
eSBoYXBwZW4gZHVlIHRvIGRlbGF5IGluIGV2ZW50IGRlbGl2ZXJ5LgorICAgIGlmIChtX3N1c3Bl
bmRDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gbV9w
YWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOyAvLyBTdGF5IGF0IHNhbWUgc2NhbGUuCisKKyAgICBR
UmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5k
SXRlbVNjYWxlKTsKKyAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQ
b3NSYW5nZS50b3BMZWZ0KCksIGNzc1Bvc2l0aW9uICogZW5kSXRlbVNjYWxlLCBlbmRQb3NSYW5n
ZS5ib3R0b21SaWdodCgpKTsKKworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5k
UG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKS5z
aXplKCkgLyBlbmRJdGVtU2NhbGUpOworCisgICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFy
ZCh0aGlzKTsKKyAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVj
dCk7Cit9CisKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlv
blN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlIC8qb2xkU3RhdGUqLykKK3sKKyAgICBzd2l0Y2ggKG5ld1N0YXRl
KSB7CisgICAgY2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc6CisgICAgICAgIG1fdmll
d3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOworICAgICAgICBBU1NFUlQoIW1fYW5pbWF0aW9uVXBk
YXRlRGVmZXJyZXIpOworICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyID0gYWRvcHRQ
dHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZlcnJl
cjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RvcHBlZDoKKyAgICAgICAgbV9hbmltYXRpb25VcGRh
dGVEZWZlcnJlci5jbGVhcigpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpz
Y2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZChRVmFyaWFudCB2YWx1ZSkKK3sKKyAgICBzZXRQYWdl
SXRlbVJlY3RWaXNpYmxlKHZhbHVlLnRvUmVjdEYoKSk7Cit9CisKK3ZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjp0b3VjaEJlZ2luKCkKK3sKKyAgICBtX2hhZFVzZXJJbnRlcmFjdGlv
biA9IHRydWU7CisKKyAgICAvLyBQcmV2ZW50cyByZXN1bWluZyB0aGUgcGFnZSBiZXR3ZWVuIHRo
ZSB1c2VyJ3MgZmxpY2tzIG9mIHRoZSBwYWdlIHdoaWxlIHRoZSBhbmltYXRpb24gaXMgcnVubmlu
Zy4KKyAgICBpZiAoc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCisgICAgICAgIG1fdG91Y2hVcGRh
dGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMsIFZp
ZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKK30K
Kwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnRvdWNoRW5kKCkKK3sKKyAgICBt
X3RvdWNoVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKK30KKworUVJlY3RGIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6Y29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKHFyZWFsIGl0
ZW1TY2FsZSkgY29uc3QKK3sKKyAgICBjb25zdCBRU2l6ZUYgY29udGVudEl0ZW1TaXplID0gbV9w
YWdlSXRlbS0+Y29udGVudHNTaXplKCkgKiBpdGVtU2NhbGU7CisgICAgY29uc3QgUVNpemVGIHZp
ZXdwb3J0SXRlbVNpemUgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpOwor
CisgICAgY29uc3QgcXJlYWwgaG9yaXpvbnRhbFJhbmdlID0gY29udGVudEl0ZW1TaXplLndpZHRo
KCkgLSB2aWV3cG9ydEl0ZW1TaXplLndpZHRoKCk7CisgICAgY29uc3QgcXJlYWwgdmVydGljYWxS
YW5nZSA9IGNvbnRlbnRJdGVtU2l6ZS5oZWlnaHQoKSAtIHZpZXdwb3J0SXRlbVNpemUuaGVpZ2h0
KCk7CisKKyAgICByZXR1cm4gUVJlY3RGKFFQb2ludEYoMCwgMCksIFFTaXplRihob3Jpem9udGFs
UmFuZ2UsIHZlcnRpY2FsUmFuZ2UpKTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OmZvY3VzRWRpdGFibGVBcmVhKGNvbnN0IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25zdCBR
UmVjdEYmIHRhcmdldEFyZWEpCit7CisgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSBy
ZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgorICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFj
dGlvbik7CisKKyAgICBRUmVjdEYgZW5kQXJlYSA9IGl0ZW1SZWN0RnJvbUNTUyh0YXJnZXRBcmVh
KTsKKworICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IGl0ZW1TY2FsZUZyb21DU1MoaW5uZXJCb3Vu
ZGVkQ1NTU2NhbGUoMi4wKSk7CisgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmll
d3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKKworICAgIHFyZWFsIHg7CisgICAgY29uc3QgcXJl
YWwgYm9yZGVyT2Zmc2V0ID0gMTA7CisgICAgaWYgKChlbmRBcmVhLndpZHRoKCkgKyBib3JkZXJP
ZmZzZXQpICogZW5kSXRlbVNjYWxlIDw9IHZpZXdwb3J0UmVjdC53aWR0aCgpKSB7CisgICAgICAg
IC8vIENlbnRlciB0aGUgaW5wdXQgZmllbGQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdmlldywgaWYg
aXQgaXMgc21hbGxlciB0aGFuCisgICAgICAgIC8vIHRoZSB2aWV3IGF0IHRoZSBzY2FsZSB0YXJn
ZXQuCisgICAgICAgIHggPSB2aWV3cG9ydFJlY3QuY2VudGVyKCkueCgpIC0gZW5kQXJlYS53aWR0
aCgpICogZW5kSXRlbVNjYWxlIC8gMi4wOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEVuc3Vy
ZSB0aGF0IHRoZSBjYXJldCBhbHdheXMgaGFzIGJvcmRlck9mZnNldCBjb250ZW50cyBwaXhlbHMg
dG8gdGhlIHJpZ2h0CisgICAgICAgIC8vIG9mIGl0LCBhbmQgc2Vjb25kYXJpbHkgKGlmIHBvc3Np
YmxlKSwgdGhhdCB0aGUgYXJlYSBoYXMgYm9yZGVyT2Zmc2V0CisgICAgICAgIC8vIGNvbnRlbnRz
IHBpeGVscyB0byB0aGUgbGVmdCBvZiBpdC4KKyAgICAgICAgcXJlYWwgY2FyZXRPZmZzZXQgPSBp
dGVtQ29vcmRGcm9tQ1NTKGNhcmV0QXJlYS54KCkpIC0gZW5kQXJlYS54KCk7CisgICAgICAgIHgg
PSBxTWluKHZpZXdwb3J0UmVjdC53aWR0aCgpIC0gKGNhcmV0T2Zmc2V0ICsgYm9yZGVyT2Zmc2V0
KSAqIGVuZEl0ZW1TY2FsZSwgYm9yZGVyT2Zmc2V0ICogZW5kSXRlbVNjYWxlKTsKKyAgICB9CisK
KyAgICBjb25zdCBRUG9pbnRGIGhvdHNwb3QgPSBRUG9pbnRGKGVuZEFyZWEueCgpLCBlbmRBcmVh
LmNlbnRlcigpLnkoKSk7CisgICAgY29uc3QgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSBRUG9p
bnRGKHgsIC8qIEZJWE1FOiB2aXNpYmxlQ2VudGVyICovIHZpZXdwb3J0UmVjdC5jZW50ZXIoKS55
KCkpOworCisgICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNwb3QgKiBlbmRJdGVtU2NhbGUg
LSB2aWV3cG9ydEhvdHNwb3Q7CisgICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1Jh
bmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7CisKKyAgICBlbmRQb3NpdGlvbiA9
IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9z
UmFuZ2UuYm90dG9tUmlnaHQoKSk7CisKKyAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0
KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRl
bVNjYWxlKTsKKworICAgIGFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250
ZW50UmVjdCk7Cit9CisKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp6b29tVG9B
cmVhR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHRvdWNoUG9pbnQsIGNvbnN0IFFSZWN0RiYg
dGFyZ2V0QXJlYSkKK3sKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBv
ZiBhIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgQVNTRVJUKG1faGFkVXNlckludGVyYWN0aW9uKTsK
KworICAgIGlmICghdGFyZ2V0QXJlYS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChtX3N1c3BlbmRDb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgaW50IG1h
cmdpbiA9IDEwOyAvLyBXZSB3YW50IGF0IGxlYXN0IGEgbGl0dGxlIGJpdCBvZiBtYXJnaW4uCisg
ICAgUVJlY3RGIGVuZEFyZWEgPSBpdGVtUmVjdEZyb21DU1ModGFyZ2V0QXJlYS5hZGp1c3RlZCgt
bWFyZ2luLCAtbWFyZ2luLCBtYXJnaW4sIG1hcmdpbikpOworCisgICAgY29uc3QgUVJlY3RGIHZp
ZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKKworICAgIHFyZWFs
IHRhcmdldENTU1NjYWxlID0gdmlld3BvcnRSZWN0LnNpemUoKS53aWR0aCgpIC8gZW5kQXJlYS5z
aXplKCkud2lkdGgoKTsKKyAgICBxcmVhbCBlbmRDU1NTY2FsZSA9IGlubmVyQm91bmRlZENTU1Nj
YWxlKHFNaW4odGFyZ2V0Q1NTU2NhbGUsIHFyZWFsKDIuNSkpKTsKKyAgICBxcmVhbCBlbmRJdGVt
U2NhbGUgPSBpdGVtU2NhbGVGcm9tQ1NTKGVuZENTU1NjYWxlKTsKKyAgICBxcmVhbCBjdXJyZW50
U2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7CisKKyAgICAvLyBXZSB3YW50IHRv
IGVuZCB1cCB3aXRoIHRoZSB0YXJnZXQgYXJlYSBmaWxsaW5nIHRoZSB3aG9sZSB3aWR0aCBvZiB0
aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKSwKKyAgICAvLyBhbmQgY2VudHJhbGl6ZWQgdmVydGlj
YWxseSB3aGVyZSB0aGUgdXNlciByZXF1ZXN0ZWQgem9vbS4gVGh1cyBvdXIgaG90c3BvdCBpcyB0
aGUgY2VudGVyIG9mCisgICAgLy8gdGhlIHRhcmdldEFyZWEgeC13aXNlIGFuZCB0aGUgcmVxdWVz
dGVkIHpvb20gcG9zaXRpb24sIHktd2lzZS4KKyAgICBjb25zdCBRUG9pbnRGIGhvdHNwb3QgPSBR
UG9pbnRGKGVuZEFyZWEuY2VudGVyKCkueCgpLCBpdGVtQ29vcmRGcm9tQ1NTKHRvdWNoUG9pbnQu
eSgpKSk7CisgICAgY29uc3QgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSB2aWV3cG9ydFJlY3Qu
Y2VudGVyKCk7CisKKyAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gaG90c3BvdCAqIGVuZENTU1Nj
YWxlIC0gdmlld3BvcnRIb3RzcG90OworCisgICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0
ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7CisgICAgZW5kUG9zaXRp
b24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVu
ZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOworCisgICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50
UmVjdChlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVu
ZEl0ZW1TY2FsZSk7CisKKyAgICBlbnVtIHsgWm9vbUluLCBab29tQmFjaywgWm9vbU91dCwgTm9a
b29tIH0gem9vbUFjdGlvbiA9IFpvb21JbjsKKworICAgIGlmICghbV9zY2FsZVN0YWNrLmlzRW1w
dHkoKSkgeworICAgICAgICAvLyBab29tIGJhY2sgb3V0IGlmIGF0dGVtcHRpbmcgdG8gc2NhbGUg
dG8gdGhlIHNhbWUgY3VycmVudCBzY2FsZSwgb3IKKyAgICAgICAgLy8gYXR0ZW1wdGluZyB0byBj
b250aW51ZSBzY2FsaW5nIG91dCBmcm9tIHRoZSBpbm5lciBtb3N0IGxldmVsLgorICAgICAgICAv
LyBVc2UgZnV6enkgY29tcGFyZSB3aXRoIGEgZml4ZWQgZXJyb3IgdG8gYmUgYWJsZSB0byBkZWFs
IHdpdGggbGFyZ2lzaCBkaWZmZXJlbmNlcyBkdWUgdG8gcGl4ZWwgcm91bmRpbmcuCisgICAgICAg
IGlmIChmdXp6eUNvbXBhcmUoZW5kSXRlbVNjYWxlLCBjdXJyZW50U2NhbGUsIDAuMDEpKSB7Cisg
ICAgICAgICAgICAvLyBJZiBtb3ZpbmcgdGhlIHZpZXdwb3J0IHdvdWxkIGV4cG9zZSBtb3JlIG9m
IHRoZSB0YXJnZXRSZWN0IGFuZCBtb3ZlIGF0IGxlYXN0IDQwIHBpeGVscywgdXBkYXRlIHBvc2l0
aW9uIGJ1dCBkbyBub3Qgc2NhbGUgb3V0LgorICAgICAgICAgICAgUVJlY3RGIGN1cnJlbnRDb250
ZW50UmVjdChtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpIC8gY3VycmVudFNjYWxlLCB2aWV3
cG9ydFJlY3Quc2l6ZSgpIC8gY3VycmVudFNjYWxlKTsKKyAgICAgICAgICAgIFFSZWN0RiB0YXJn
ZXRJbnRlcnNlY3Rpb24gPSBlbmRWaXNpYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0ZWQodGFyZ2V0
QXJlYSk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRDb250ZW50UmVjdC5jb250YWlucyh0YXJn
ZXRJbnRlcnNlY3Rpb24pICYmIChxQWJzKGVuZFZpc2libGVDb250ZW50UmVjdC50b3AoKSAtIGN1
cnJlbnRDb250ZW50UmVjdC50b3AoKSkgPj0gNDAgfHwgcUFicyhlbmRWaXNpYmxlQ29udGVudFJl
Y3QubGVmdCgpIC0gY3VycmVudENvbnRlbnRSZWN0LmxlZnQoKSkgPj0gNDApKQorICAgICAgICAg
ICAgICAgIHpvb21BY3Rpb24gPSBOb1pvb207CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgem9vbUFjdGlvbiA9IFpvb21CYWNrOworICAgICAgICB9IGVsc2UgaWYgKGZ1enp5Q29t
cGFyZShlbmRJdGVtU2NhbGUsIG1fem9vbU91dFNjYWxlLCAwLjAxKSkKKyAgICAgICAgICAgIHpv
b21BY3Rpb24gPSBab29tQmFjazsKKyAgICAgICAgZWxzZSBpZiAoZW5kSXRlbVNjYWxlIDwgY3Vy
cmVudFNjYWxlKQorICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21PdXQ7CisgICAgfQorCisg
ICAgc3dpdGNoICh6b29tQWN0aW9uKSB7CisgICAgY2FzZSBab29tSW46CisgICAgICAgIG1fc2Nh
bGVTdGFjay5hcHBlbmQoU2NhbGVTdGFja0l0ZW0oY3VycmVudFNjYWxlLCBtX3ZpZXdwb3J0SXRl
bS0+Y29udGVudFBvcygpLngoKSkpOworICAgICAgICBtX3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1T
Y2FsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBab29tQmFjazogeworICAgICAgICBTY2Fs
ZVN0YWNrSXRlbSBsYXN0U2NhbGUgPSBtX3NjYWxlU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAg
ZW5kSXRlbVNjYWxlID0gbGFzdFNjYWxlLnNjYWxlOworICAgICAgICBlbmRDU1NTY2FsZSA9IGNz
c1NjYWxlRnJvbUl0ZW0obGFzdFNjYWxlLnNjYWxlKTsKKyAgICAgICAgLy8gUmVjYWxjdWxhdGUg
ZW5kUG9zaXRpb24gYW5kIGJvdW5kIGl0IGFjY29yZGluZyB0byBuZXcgc2NhbGUuCisgICAgICAg
IGVuZFBvc2l0aW9uLnNldFkoaG90c3BvdC55KCkgKiBlbmRDU1NTY2FsZSAtIHZpZXdwb3J0SG90
c3BvdC55KCkpOworICAgICAgICBlbmRQb3NpdGlvbi5zZXRYKGxhc3RTY2FsZS54UG9zaXRpb24p
OworICAgICAgICBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2Fs
ZShlbmRJdGVtU2NhbGUpOworICAgICAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5k
UG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQo
KSk7CisgICAgICAgIGVuZFZpc2libGVDb250ZW50UmVjdCA9IFFSZWN0RihlbmRQb3NpdGlvbiAv
IGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFpvb21PdXQ6CisgICAgICAgIC8vIFVuc3RhY2sg
YWxsIHNjYWxlLWxldmVscyBkZWVwZXIgdGhhbiB0aGUgbmV3IGxldmVsLCBzbyBhIHpvb20tYmFj
ayB3b24ndCBlbmQgdXAgem9vbWluZyBpbi4KKyAgICAgICAgd2hpbGUgKCFtX3NjYWxlU3RhY2su
aXNFbXB0eSgpICYmIG1fc2NhbGVTdGFjay5sYXN0KCkuc2NhbGUgPj0gZW5kSXRlbVNjYWxlKQor
ICAgICAgICAgICAgbV9zY2FsZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgbV96b29tT3V0
U2NhbGUgPSBlbmRJdGVtU2NhbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9ab29tOgor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhbmltYXRlUGFnZUl0ZW1SZWN0VmlzaWJsZShl
bmRWaXNpYmxlQ29udGVudFJlY3QpOworfQorCitRUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpuZWFyZXN0VmFsaWRCb3VuZHMoKSBjb25zdAoreworICAgIHFyZWFsIGVuZEl0ZW1T
Y2FsZSA9IGl0ZW1TY2FsZUZyb21DU1MoaW5uZXJCb3VuZGVkQ1NTU2NhbGUoY3VycmVudENTU1Nj
YWxlKCkpKTsKKworICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRl
bS0+Ym91bmRpbmdSZWN0KCk7CisgICAgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSB2aWV3cG9y
dFJlY3QuY2VudGVyKCk7CisKKyAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gbV92aWV3cG9ydEl0
ZW0tPm1hcFRvV2ViQ29udGVudCh2aWV3cG9ydEhvdHNwb3QpICogZW5kSXRlbVNjYWxlIC0gdmll
d3BvcnRIb3RzcG90OworCisgICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1Jhbmdl
Rm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7CisgICAgZW5kUG9zaXRpb24gPSBib3Vu
ZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVuZFBvc1Jhbmdl
LmJvdHRvbVJpZ2h0KCkpOworCisgICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQ
b3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2Fs
ZSk7CisKKyAgICByZXR1cm4gZW5kVmlzaWJsZUNvbnRlbnRSZWN0OworfQorCit2b2lkIFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2V0Q1NTU2NhbGUocXJlYWwgc2NhbGUpCit7CisgICAg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKKworICAgIHFyZWFsIG5ld1NjYWxl
ID0gaW5uZXJCb3VuZGVkQ1NTU2NhbGUoc2NhbGUpOworICAgIG1fcGFnZUl0ZW0tPnNldENvbnRl
bnRzU2NhbGUoaXRlbVNjYWxlRnJvbUNTUyhuZXdTY2FsZSkpOworfQorCitxcmVhbCBRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmU6OmN1cnJlbnRDU1NTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNzc1NjYWxlRnJvbUl0ZW0obV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpKTsKK30KKwor
Ym9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRJdGVtLT5pc0ZsaWNraW5nKCk7Cit9CisK
K2Jvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQWN0aXZlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRHJhZ2dpbmcoKTsKK30KKwordm9p
ZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQ
b2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgLy8g
VGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgor
ICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7CisKKyAgICBtX3ZpZXdwb3J0SXRlbS0+
aGFuZGxlRmxpY2thYmxlTW91c2VQcmVzcyhwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
OworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247
Cit9CisKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlUmVxdWVz
dFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWls
bGlzKQoreworICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZU1vdmUocG9z
aXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBtX2xhc3RQaW5jaENlbnRlckluVmll
d3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9uOworfQorCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50
NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRsZUZs
aWNrYWJsZU1vdXNlUmVsZWFzZShwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAg
IG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247Cit9CisK
K3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkK
K3sKKyAgICAvLyBSZXNldCB0aGUgdmVsb2NpdHkgc2FtcGxlcyBvZiB0aGUgZmxpY2thYmxlLgor
ICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSByZWNvZ25pemVyIGlmIHdl
IGhhdmUgYSByZWNvZ25pemVkCisgICAgLy8gcGFuIGdlc3R1cmUgYW5kIHJlY2VpdmUgYSB0b3Vj
aCBldmVudCB3aXRoIG11bHRpcGxlIHRvdWNoIHBvaW50cworICAgIC8vIChpZS4gdHJhbnNpdGlv
biB0byBhIHBpbmNoIGdlc3R1cmUpIGFzIGl0IGRvZXMgbm90IG1vdmUgdGhlIGNvbnRlbnQKKyAg
ICAvLyBiYWNrIGluc2lkZSB2YWxpZCBib3VuZHMuCisgICAgLy8gV2hlbiB0aGUgcGluY2ggZ2Vz
dHVyZSBlbmRzLCB0aGUgY29udGVudCBpcyBwb3NpdGlvbmVkIGFuZCBzY2FsZWQKKyAgICAvLyBi
YWNrIHRvIHZhbGlkIGJvdW5kYXJpZXMuCisgICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNr
KCk7Cit9CisKK2Jvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlv
bkFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NhbGVBbmltYXRpb24tPnN0YXRlKCkg
PT0gUUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nOworfQorCit2b2lkIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6Y2FuY2VsU2Nyb2xsQW5pbWF0aW9uKCkKK3sKKyAgICBpZiAoIXNjcm9s
bEFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgcGFu
IGdlc3R1cmUgcmVjb2duaXplciByZWNlaXZlcyBhIHRvdWNoIGJlZ2luIGV2ZW50CisgICAgLy8g
ZHVyaW5nIGFuIG9uZ29pbmcga2luZXRpYyBzY3JvbGwgYW5pbWF0aW9uIG9mIGEgcHJldmlvdXMK
KyAgICAvLyBwYW4gZ2VzdHVyZSwgdGhlIGFuaW1hdGlvbiBpcyBzdG9wcGVkIGFuZCB0aGUgY29u
dGVudCBpcworICAgIC8vIGltbWVkaWF0ZWx5IHBvc2l0aW9uZWQgYmFjayB0byB2YWxpZCBib3Vu
ZGFyaWVzLgorCisgICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7CisgICAgVmlld3Bv
cnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKKyAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxl
KG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OmludGVycnVwdFNjYWxlQW5pbWF0aW9uKCkKK3sKKyAgICAvLyBUaGlzIGludGVycnVw
dHMgdGhlIHNjYWxlIGFuaW1hdGlvbiBleGFjdGx5IHdoZXJlIGl0IGlzLCBldmVuIGlmIGl0IGlz
IG91dCBvZiBib3VuZHMuCisgICAgbV9zY2FsZUFuaW1hdGlvbi0+c3RvcCgpOworfQorCitib29s
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlQWN0aXZlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9waW5jaFN0YXJ0U2NhbGUgPiAwOworfQorCit2b2lkIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBw
aW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcykKK3sKKyAgICAvLyBUaGlzIGNhbiBvbmx5
IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgQVNTRVJUKG1f
aGFkVXNlckludGVyYWN0aW9uKTsKKworICAgIGlmICghbV9hbGxvd3NVc2VyU2NhbGluZykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zY2FsZVN0YWNrLmNsZWFyKCk7CisgICAgbV96b29tT3V0
U2NhbGUgPSAwLjA7CisKKyAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZl
clVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7CisKKyAgICBtX2xhc3RQaW5jaENlbnRlckluVmll
d3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOworICAg
IG1fcGluY2hTdGFydFNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOworfQorCit2
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0
ZShjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwg
dG90YWxTY2FsZUZhY3RvcikKK3sKKyAgICBBU1NFUlQobV9zdXNwZW5kQ291bnQpOworCisgICAg
aWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAgQ2hh
bmdlcyBvZiB0aGUgY2VudGVyIHBvc2l0aW9uIHNob3VsZCBtb3ZlIHRoZSBwYWdlIGV2ZW4gaWYg
dGhlIHpvb20gZmFjdG9yCisgICAgLy8gIGRvZXMgbm90IGNoYW5nZS4KKyAgICBjb25zdCBxcmVh
bCBjc3NTY2FsZSA9IGNzc1NjYWxlRnJvbUl0ZW0obV9waW5jaFN0YXJ0U2NhbGUgKiB0b3RhbFNj
YWxlRmFjdG9yKTsKKworICAgIC8vIEFsbG93IHpvb21pbmcgb3V0IGJleW9uZCBtaW1pbXVtIHNj
YWxlIG9uIHBhZ2VzIHRoYXQgZG8gbm90IGV4cGxpY2l0bHkgZGlzYWxsb3cgaXQuCisgICAgY29u
c3QgcXJlYWwgdGFyZ2V0Q1NTU2NhbGUgPSBvdXRlckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7
CisKKyAgICBzY2FsZUNvbnRlbnQobV92aWV3cG9ydEl0ZW0tPm1hcFRvV2ViQ29udGVudChwaW5j
aENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyksIHRhcmdldENTU1NjYWxlKTsKKworICAgIGNv
bnN0IFFQb2ludEYgcG9zaXRpb25EaWZmID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0
ZXMgLSBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKKyAgICBtX2xhc3RQ
aW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENv
b3JkaW5hdGVzOworCisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92aWV3cG9y
dEl0ZW0tPmNvbnRlbnRQb3MoKSAtIHBvc2l0aW9uRGlmZik7Cit9CisKK3ZvaWQgUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVFbmRlZCgpCit7CisgICAgQVNTRVJUKG1f
c3VzcGVuZENvdW50KTsKKworICAgIGlmICghbV9hbGxvd3NVc2VyU2NhbGluZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9waW5jaFN0YXJ0U2NhbGUgPSAtMTsKKworICAgIGFuaW1hdGVQYWdl
SXRlbVJlY3RWaXNpYmxlKG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKKyAgICBtX3NjYWxlVXBkYXRl
RGVmZXJyZXIuY2xlYXIoKTsgLy8gQ2xlYXIgYWZ0ZXIgc3RhcnRpbmcgcG90ZW50aWFsIGFuaW1h
dGlvbiwgd2hpY2ggdGFrZXMgb3ZlciBkZWZlcnJpbmcuCit9CisKK3ZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQoreworICAgIG1fcGluY2hT
dGFydFNjYWxlID0gLTE7CisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Cit9CisK
K1FSZWN0IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6dmlzaWJsZUNvbnRlbnRzUmVjdCgp
IGNvbnN0Cit7CisgICAgY29uc3QgUVJlY3RGIHZpc2libGVSZWN0KG1fdmlld3BvcnRJdGVtLT5i
b3VuZGluZ1JlY3QoKS5pbnRlcnNlY3RlZChtX3BhZ2VJdGVtLT5ib3VuZGluZ1JlY3QoKSkpOwor
CisgICAgLy8gV2UgYXZvaWQgdXNpbmcgdG9BbGlnbmVkUmVjdCgpIGJlY2F1c2UgaXQgcHJvZHVj
ZXMgaW5jb25zaXN0ZW50IHdpZHRoIGFuZCBoZWlnaHQuCisgICAgUVJlY3RGIG1hcHBlZFJlY3Qo
bV92aWV3cG9ydEl0ZW0tPm1hcFJlY3RUb1dlYkNvbnRlbnQodmlzaWJsZVJlY3QpKTsKKyAgICBy
ZXR1cm4gUVJlY3QoZmxvb3IobWFwcGVkUmVjdC54KCkpLCBmbG9vcihtYXBwZWRSZWN0LnkoKSks
IGZsb29yKG1hcHBlZFJlY3Qud2lkdGgoKSksIGZsb29yKG1hcHBlZFJlY3QuaGVpZ2h0KCkpKTsK
K30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmluZm9ybVZpc2libGVDb250
ZW50Q2hhbmdlKGNvbnN0IFFQb2ludEYmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsK
KyAgICBpZiAoIWRyYXdpbmdBcmVhKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9sYXN0
VmlzaWJsZUNvbnRlbnRzUmVjdCA9PSB2aXNpYmxlQ29udGVudHNSZWN0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHFyZWFsIHNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOwor
CisgICAgaWYgKHNjYWxlICE9IG1fbGFzdENvbW1pdHRlZFNjYWxlKQorICAgICAgICBlbWl0IG1f
dmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT5jb250ZW50c1NjYWxlQ29tbWl0
dGVkKCk7CisgICAgbV9sYXN0Q29tbWl0dGVkU2NhbGUgPSBzY2FsZTsKKyAgICBtX2xhc3RWaXNp
YmxlQ29udGVudHNSZWN0ID0gdmlzaWJsZUNvbnRlbnRzUmVjdCgpOworCisgICAgZHJhd2luZ0Fy
ZWEtPnNldFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVjdCgpLCBzY2FsZSwg
dHJhamVjdG9yeVZlY3RvciwgbV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSk7CisKKyAgICAv
LyBFbnN1cmUgdGhhdCB1cGRhdGVQYWludE5vZGUgaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgcGFp
bnRpbmcuCisgICAgbV9wYWdlSXRlbS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjp2aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpCit7CisgICAgUVNpemUg
dmlld3BvcnRTaXplID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1Np
emUoKTsKKworICAgIGlmICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZywgYWRkIFFNTCBhcGkhCisgICAgV2ViUHJl
ZmVyZW5jZXMqIHdrUHJlZnMgPSBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCk7CisgICAgd2tQcmVmcy0+c2V0RGV2aWNlV2lkdGgodmlld3BvcnRTaXplLndpZHRoKCkp
OworICAgIHdrUHJlZnMtPnNldERldmljZUhlaWdodCh2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOwor
CisgICAgLy8gTGV0IHRoZSBXZWJQcm9jZXNzIGtub3cgYWJvdXQgdGhlIG5ldyB2aWV3cG9ydCBz
aXplLCBzbyB0aGF0CisgICAgLy8gaXQgY2FuIHJlc2l6ZSB0aGUgY29udGVudCBhY2NvcmRpbmds
eS4KKyAgICBtX3dlYlBhZ2VQcm94eS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSk7CisK
KyAgICBpbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShRUG9pbnRGKCkpOworfQorCit2b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNl
bnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKQoreworICAgIFFQb2ludEYgb2xk
UGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50
KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOworICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2Nh
bGUoaXRlbVNjYWxlRnJvbUNTUyhjc3NTY2FsZSkpOworICAgIFFQb2ludEYgbmV3UGluY2hDZW50
ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNlbnRlcklu
Q1NTQ29vcmRpbmF0ZXMpOworCisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92
aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSArIChuZXdQaW5jaENlbnRlck9uVmlld3BvcnQgLSBv
bGRQaW5jaENlbnRlck9uVmlld3BvcnQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNpbmNsdWRlICJtb2NfUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCIKKworCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5j
cHAJKHJldmlzaW9uIDExOTM3MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lLmgiCisjaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKIAogI2luY2x1ZGUgIldlYlBh
Z2VHcm91cC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgpAQCAtNjUsMzMgKzY1LDMzIEBA
IHN0YXRpYyBjb25zdCBpbnQga1NjYWxlQW5pbWF0aW9uRHVyYXRpb24KIGNsYXNzIFZpZXdwb3J0
VXBkYXRlRGVmZXJyZXIgewogcHVibGljOgogICAgIGVudW0gU3VzcGVuZENvbnRlbnRGbGFnIHsg
RGVmZXJVcGRhdGUsIERlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQgfTsKLSAgICBWaWV3cG9y
dFVwZGF0ZURlZmVycmVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogZW5naW5lLCBTdXNw
ZW5kQ29udGVudEZsYWcgc3VzcGVuZENvbnRlbnRGbGFnID0gRGVmZXJVcGRhdGUpCi0gICAgICAg
IDogZW5naW5lKGVuZ2luZSkKKyAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKFF0Vmlld3BvcnRI
YW5kbGVyKiBoYW5kbGVyLCBTdXNwZW5kQ29udGVudEZsYWcgc3VzcGVuZENvbnRlbnRGbGFnID0g
RGVmZXJVcGRhdGUpCisgICAgICAgIDogaGFuZGxlcihoYW5kbGVyKQogICAgIHsKLSAgICAgICAg
ZW5naW5lLT5tX3N1c3BlbmRDb3VudCsrOworICAgICAgICBoYW5kbGVyLT5tX3N1c3BlbmRDb3Vu
dCsrOwogCiAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3VzcGVuZCBjb250ZW50IGZv
ciBpbW1lZGlhdGUgdXBkYXRlcwogICAgICAgICAvLyBvbmx5IGR1cmluZyBhbmltYXRpb25zIG9y
IGxvbmdlciBnZXN0dXJlcy4KICAgICAgICAgaWYgKHN1c3BlbmRDb250ZW50RmxhZyA9PSBEZWZl
clVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KQotICAgICAgICAgICAgZW5naW5lLT5zdXNwZW5kUGFn
ZUNvbnRlbnQoKTsKKyAgICAgICAgICAgIGhhbmRsZXItPnN1c3BlbmRQYWdlQ29udGVudCgpOwog
ICAgIH0KIAogICAgIH5WaWV3cG9ydFVwZGF0ZURlZmVycmVyKCkKICAgICB7Ci0gICAgICAgIGlm
ICgtLShlbmdpbmUtPm1fc3VzcGVuZENvdW50KSkKKyAgICAgICAgaWYgKC0tKGhhbmRsZXItPm1f
c3VzcGVuZENvdW50KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBlbmdpbmUtPnJl
c3VtZVBhZ2VDb250ZW50KCk7CisgICAgICAgIGhhbmRsZXItPnJlc3VtZVBhZ2VDb250ZW50KCk7
CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3Bv
cnQgd2lsbCBiZSByZXF1ZXN0ZWQuCi0gICAgICAgIGVuZ2luZS0+aW5mb3JtVmlzaWJsZUNvbnRl
bnRDaGFuZ2UoUVBvaW50RigpKTsKKyAgICAgICAgaGFuZGxlci0+aW5mb3JtVmlzaWJsZUNvbnRl
bnRDaGFuZ2UoUVBvaW50RigpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKiBjb25zdCBlbmdpbmU7CisgICAgUXRWaWV3cG9ydEhhbmRsZXIqIGNv
bnN0IGhhbmRsZXI7CiB9OwogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c3Vz
cGVuZFBhZ2VDb250ZW50KCkKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnN1c3BlbmRQYWdlQ29u
dGVudCgpCiB7CiAgICAgaWYgKG1faGFzU3VzcGVuZGVkQ29udGVudCkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpz
dXNwZW4KICAgICBtX3dlYlBhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmlt
YXRpb25zKCk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpyZXN1bWVQ
YWdlQ29udGVudCgpCit2b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpyZXN1bWVQYWdlQ29udGVudCgp
CiB7CiAgICAgaWYgKCFtX2hhc1N1c3BlbmRlZENvbnRlbnQpCiAgICAgICAgIHJldHVybjsKQEAg
LTExNCwxNyArMTE0LDE3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmdXp6eUNvbXBhcmUocXJlYWwg
YSwKICAgICByZXR1cm4gcUFicyhhIC0gYikgPCBlcHNpbG9uOwogfQogCi1pbmxpbmUgcXJlYWwg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpjc3NTY2FsZUZyb21JdGVtKHFyZWFsIGl0ZW1T
Y2FsZSkgY29uc3QKK2lubGluZSBxcmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6Y3NzU2NhbGVGcm9t
SXRlbShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGl0ZW1TY2FsZSAvIG1f
ZGV2aWNlUGl4ZWxSYXRpbzsKIH0KIAotaW5saW5lIHFyZWFsIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6aXRlbVNjYWxlRnJvbUNTUyhxcmVhbCBjc3NTY2FsZSkgY29uc3QKK2lubGluZSBx
cmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6aXRlbVNjYWxlRnJvbUNTUyhxcmVhbCBjc3NTY2FsZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gY3NzU2NhbGUgKiBtX2RldmljZVBpeGVsUmF0aW87CiB9CiAK
LWlubGluZSBxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Oml0ZW1Db29yZEZyb21D
U1MocXJlYWwgdmFsdWUpIGNvbnN0CitpbmxpbmUgcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6Oml0
ZW1Db29yZEZyb21DU1MocXJlYWwgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHZhbHVlICog
bV9kZXZpY2VQaXhlbFJhdGlvOwogfQpAQCAtMTM1LDcgKzEzNSw3IEBAIHN0YXRpYyBpbmxpbmUg
UVBvaW50RiBib3VuZFBvc2l0aW9uKGNvbnMKICAgICAgICAgICAgICAgICAgICBxQm91bmQobWlu
UG9zaXRpb24ueSgpLCBwb3NpdGlvbi55KCksIG1heFBvc2l0aW9uLnkoKSkpOwogfQogCi1pbmxp
bmUgUVJlY3RGIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6aXRlbVJlY3RGcm9tQ1NTKGNv
bnN0IFFSZWN0RiYgY3NzUmVjdCkgY29uc3QKK2lubGluZSBRUmVjdEYgUXRWaWV3cG9ydEhhbmRs
ZXI6Oml0ZW1SZWN0RnJvbUNTUyhjb25zdCBRUmVjdEYmIGNzc1JlY3QpIGNvbnN0CiB7CiAgICAg
UVJlY3RGIGl0ZW1SZWN0OwogCkBAIC0xNDcsNyArMTQ3LDcgQEAgaW5saW5lIFFSZWN0RiBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbgogICAgIHJldHVybiBpdGVtUmVjdDsKIH0KIAotUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoV2ViS2l0
OjpXZWJQYWdlUHJveHkqIHByb3h5LCBRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydEl0ZW0sIFFRdWlj
a1dlYlBhZ2UqIHBhZ2VJdGVtKQorUXRWaWV3cG9ydEhhbmRsZXI6OlF0Vmlld3BvcnRIYW5kbGVy
KFdlYktpdDo6V2ViUGFnZVByb3h5KiBwcm94eSwgUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVt
LCBRUXVpY2tXZWJQYWdlKiBwYWdlSXRlbSkKICAgICA6IG1fd2ViUGFnZVByb3h5KHByb3h5KQog
ICAgICwgbV92aWV3cG9ydEl0ZW0odmlld3BvcnRJdGVtKQogICAgICwgbV9wYWdlSXRlbShwYWdl
SXRlbSkKQEAgLTE3MiwxNiArMTcyLDE2IEBAIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
UXRWaWV3cG9ydEkKICAgICAgICAgICAgIFNMT1Qoc2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQo
UUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLCBR
dDo6RGlyZWN0Q29ubmVjdGlvbik7CiB9CiAKLVF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
flF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgpCitRdFZpZXdwb3J0SGFuZGxlcjo6flF0Vmll
d3BvcnRIYW5kbGVyKCkKIHsKIH0KIAotcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
Ojppbm5lckJvdW5kZWRDU1NTY2FsZShxcmVhbCBjc3NTY2FsZSkgY29uc3QKK3FyZWFsIFF0Vmll
d3BvcnRIYW5kbGVyOjppbm5lckJvdW5kZWRDU1NTY2FsZShxcmVhbCBjc3NTY2FsZSkgY29uc3QK
IHsKICAgICByZXR1cm4gcUJvdW5kKG1fbWluaW11bVNjYWxlLCBjc3NTY2FsZSwgbV9tYXhpbXVt
U2NhbGUpOwogfQogCi1xcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Om91dGVyQm91
bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAorcXJlYWwgUXRWaWV3cG9ydEhhbmRs
ZXI6Om91dGVyQm91bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAogewogICAgIGlm
IChtX2FsbG93c1VzZXJTY2FsaW5nKSB7CiAgICAgICAgIC8vIEJvdW5kZWQgYnkgWzAuMSwgMTAu
MF0gbGlrZSB0aGUgdmlld3BvcnQgbWV0YSBjb2RlIGluIFdlYkNvcmUuCkBAIC0xOTIsNyArMTky
LDcgQEAgcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpvdXRlcgogICAgIHJldHVy
biBpbm5lckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjp2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKK3ZvaWQgUXRWaWV3cG9ydEhhbmRs
ZXI6OnZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRy
aWJ1dGVzJiBuZXdBdHRyaWJ1dGVzKQogewogICAgIG1fcmF3QXR0cmlidXRlcyA9IG5ld0F0dHJp
YnV0ZXM7CiAgICAgV2ViQ29yZTo6cmVzdHJpY3RTY2FsZUZhY3RvclRvSW5pdGlhbFNjYWxlSWZO
b3RVc2VyU2NhbGFibGUobV9yYXdBdHRyaWJ1dGVzKTsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6dmlld3BvCiAgICAgc2V0UGFnZUl0ZW1SZWN0
VmlzaWJsZShuZWFyZXN0VmFsaWRCb3VuZHMoKSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjpwYWdlQ29udGVudHNTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6
ZSwgY29uc3QgUVNpemUmIHZpZXdwb3J0U2l6ZSkKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBh
Z2VDb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJiBuZXdTaXplLCBjb25zdCBRU2l6ZSYg
dmlld3BvcnRTaXplKQogewogICAgIGZsb2F0IG1pbmltdW1TY2FsZSA9IFdlYkNvcmU6OmNvbXB1
dGVNaW5pbXVtU2NhbGVGYWN0b3JGb3JDb250ZW50Q29udGFpbmVkKG1fcmF3QXR0cmlidXRlcywg
dmlld3BvcnRTaXplLCBuZXdTaXplKTsKIApAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYWdlQ28KICAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxl
KG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OnNldFBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVjdCkKK3Zv
aWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNldFBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RG
JiBpdGVtUmVjdCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc3VzcGVuZENvdW50LAog
ICAgICAgICAic2V0UGFnZUl0ZW1SZWN0VmlzaWJsZSBoYXMgdG8gYmUgZ3VhcmRlZCB1c2luZyBh
IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIuIik7CkBAIC0yODYsNyArMjg2LDcgQEAgc3RhdGljIHFy
ZWFsIHBoeXNpY2FsT3ZlcnNob290KHFyZWFsIHQpCiAgICAgcmV0dXJuICgtdCAqICh0IC0gMikp
ICogMS4yNSAtICh0ICogdCkgKiAwLjI1OwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6YW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVj
dCkKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGNv
bnN0IFFSZWN0RiYgaXRlbVJlY3QpCiB7CiAgICAgQVNTRVJUKG1fc2NhbGVBbmltYXRpb24tPnN0
YXRlKCkgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVkKTsKIApAQCAtMzEwLDcgKzMxMCw3
IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphbmltYXQKICAgICBtX3NjYWxl
QW5pbWF0aW9uLT5zdGFydCgpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTo6ZmxpY2tNb3ZlU3RhcnRlZCgpCit2b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpmbGlja01vdmVT
dGFydGVkKCkKIHsKICAgICBRX0FTU0VSVChtX3ZpZXdwb3J0SXRlbS0+aXNNb3ZpbmcoKSk7CiAg
ICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURl
ZmVycmVyKHRoaXMsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVu
ZENvbnRlbnQpKTsKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6ZmxpY2tNCiAgICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRl
bnRZQ2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7CiB9CiAKLXZv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpmbGlja01vdmVFbmRlZCgpCit2b2lkIFF0
Vmlld3BvcnRIYW5kbGVyOjpmbGlja01vdmVFbmRlZCgpCiB7CiAgICAgUV9BU1NFUlQoIW1fdmll
d3BvcnRJdGVtLT5pc01vdmluZygpKTsKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24g
dGhlIGVuZCBvZiB0aGUgcGFuIG9yIHBhbiBraW5ldGljIGFuaW1hdGlvbi4KQEAgLTMzMSw3ICsz
MzEsNyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZmxpY2tNCiAgICAgZGlz
Y29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgdGhpcywg
U0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpCit2b2lkIFF0Vmlld3Bv
cnRIYW5kbGVyOjpwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpCiB7CiAgICAgUVBvaW50RiBuZXdQ
b3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCk7CiAKQEAgLTM0MCw3ICszNDAs
NyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFnZUl0CiAgICAgbV9sYXN0
U2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmU6OnBhZ2VDb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBj
c3NQb3NpdGlvbikKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhZ2VDb250ZW50UG9zaXRpb25S
ZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBjc3NQb3NpdGlvbikKIHsKICAgICAvLyBJZ25vcmUgdGhl
IHJlcXVlc3QgaWYgc3VzcGVuZGVkLiBDYW4gb25seSBoYXBwZW4gZHVlIHRvIGRlbGF5IGluIGV2
ZW50IGRlbGl2ZXJ5LgogICAgIGlmIChtX3N1c3BlbmRDb3VudCkKQEAgLTM1Nyw3ICszNTcsNyBA
QCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFnZUNvCiAgICAgc2V0UGFnZUl0
ZW1SZWN0VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOwogfQogCi12b2lkIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0
QW5pbWF0aW9uOjpTdGF0ZSBuZXdTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSAvKm9s
ZFN0YXRlKi8pCit2b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hh
bmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJhY3RBbmltYXRp
b246OlN0YXRlIC8qb2xkU3RhdGUqLykKIHsKICAgICBzd2l0Y2ggKG5ld1N0YXRlKSB7CiAgICAg
Y2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc6CkBAIC0zNzMsMTIgKzM3MywxMiBAQCB2
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBCiAgICAgfQogfQogCi12b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25WYWx1ZUNoYW5nZWQo
UVZhcmlhbnQgdmFsdWUpCit2b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlvblZh
bHVlQ2hhbmdlZChRVmFyaWFudCB2YWx1ZSkKIHsKICAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxl
KHZhbHVlLnRvUmVjdEYoKSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
Ojp0b3VjaEJlZ2luKCkKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnRvdWNoQmVnaW4oKQogewog
ICAgIG1faGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsKIApAQCAtMzg3LDEyICszODcsMTIgQEAg
dm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnRvdWNoQgogICAgICAgICBtX3RvdWNo
VXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlz
LCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7
CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp0b3VjaEVuZCgpCit2b2lk
IFF0Vmlld3BvcnRIYW5kbGVyOjp0b3VjaEVuZCgpCiB7CiAgICAgbV90b3VjaFVwZGF0ZURlZmVy
cmVyLmNsZWFyKCk7CiB9CiAKLVFSZWN0RiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmNv
bXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0CitR
UmVjdEYgUXRWaWV3cG9ydEhhbmRsZXI6OmNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2Fs
ZShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0CiB7CiAgICAgY29uc3QgUVNpemVGIGNvbnRlbnRJdGVt
U2l6ZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2l6ZSgpICogaXRlbVNjYWxlOwogICAgIGNvbnN0
IFFTaXplRiB2aWV3cG9ydEl0ZW1TaXplID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgp
LnNpemUoKTsKQEAgLTQwMyw3ICs0MDMsNyBAQCBRUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpjb21wCiAgICAgcmV0dXJuIFFSZWN0RihRUG9pbnRGKDAsIDApLCBRU2l6ZUYoaG9y
aXpvbnRhbFJhbmdlLCB2ZXJ0aWNhbFJhbmdlKSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjpmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNhcmV0QXJlYSwg
Y29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6Zm9jdXNF
ZGl0YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBjYXJldEFyZWEsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0
QXJlYSkKIHsKICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVz
ZXIgaW50ZXJhY3Rpb24uCiAgICAgQVNTRVJUKG1faGFkVXNlckludGVyYWN0aW9uKTsKQEAgLTQ0
MCw3ICs0NDAsNyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Zm9jdXNFCiAg
ICAgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoZW5kVmlzaWJsZUNvbnRlbnRSZWN0KTsKIH0K
IAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Onpvb21Ub0FyZWFHZXN0dXJlRW5k
ZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKQor
dm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6em9vbVRvQXJlYUdlc3R1cmVFbmRlZChjb25zdCBRUG9p
bnRGJiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpCiB7CiAgICAgLy8gVGhp
cyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgogICAg
IEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7CkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Onpvb21UbwogICAgIGFuaW1hdGVQYWdlSXRlbVJl
Y3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7CiB9CiAKLVFSZWN0RiBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6Om5lYXJlc3RWYWxpZEJvdW5kcygpIGNvbnN0CitRUmVjdEYgUXRW
aWV3cG9ydEhhbmRsZXI6Om5lYXJlc3RWYWxpZEJvdW5kcygpIGNvbnN0CiB7CiAgICAgcXJlYWwg
ZW5kSXRlbVNjYWxlID0gaXRlbVNjYWxlRnJvbUNTUyhpbm5lckJvdW5kZWRDU1NTY2FsZShjdXJy
ZW50Q1NTU2NhbGUoKSkpOwogCkBAIC01NDEsNyArNTQxLDcgQEAgUVJlY3RGIFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZTo6bmVhcgogICAgIHJldHVybiBlbmRWaXNpYmxlQ29udGVudFJlY3Q7
CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRDU1NTY2FsZShxcmVh
bCBzY2FsZSkKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNldENTU1NjYWxlKHFyZWFsIHNjYWxl
KQogewogICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7CiAKQEAgLTU0OSwy
MiArNTQ5LDIyIEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRDU1MKICAg
ICBtX3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21DU1MobmV3U2NhbGUp
KTsKIH0KIAotcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpjdXJyZW50Q1NTU2Nh
bGUoKSBjb25zdAorcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6OmN1cnJlbnRDU1NTY2FsZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGNzc1NjYWxlRnJvbUl0ZW0obV9wYWdlSXRlbS0+Y29udGVudHNT
Y2FsZSgpKTsKIH0KIAotYm9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9sbEFu
aW1hdGlvbkFjdGl2ZSgpIGNvbnN0Citib29sIFF0Vmlld3BvcnRIYW5kbGVyOjpzY3JvbGxBbmlt
YXRpb25BY3RpdmUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+aXNGbGlj
a2luZygpOwogfQogCi1ib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVy
ZUFjdGl2ZSgpIGNvbnN0Citib29sIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlQWN0aXZl
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRHJhZ2dpbmcoKTsKIH0K
IAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVTdGFydGVkKGNv
bnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit2b2lk
IFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwb3Np
dGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQogewogICAgIC8vIFRoaXMgY2FuIG9u
bHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KICAgICBBU1NFUlQo
bV9oYWRVc2VySW50ZXJhY3Rpb24pOwpAQCAtNTczLDE5ICs1NzMsMTkgQEAgdm9pZCBRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlcwogICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3
cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwb3NpdGlv
biwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6
cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBl
dmVudFRpbWVzdGFtcE1pbGxpcykKIHsKICAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2th
YmxlTW91c2VNb3ZlKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgbV9sYXN0
UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKIH0KIAotdm9pZCBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRG
JiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0
SGFuZGxlcjo6cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQg
ZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiB7CiAgICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRsZUZsaWNr
YWJsZU1vdXNlUmVsZWFzZShwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwogICAgIG1f
bGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247CiB9CiAKLXZv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkKK3Zv
aWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVDYW5jZWxsZWQoKQogewogICAgIC8vIFJl
c2V0IHRoZSB2ZWxvY2l0eSBzYW1wbGVzIG9mIHRoZSBmbGlja2FibGUuCiAgICAgLy8gVGhpcyBz
aG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIHJlY29nbml6ZXIgaWYgd2UgaGF2ZSBhIHJlY29n
bml6ZWQKQEAgLTU5NywxMiArNTk3LDEyIEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjpwYW5HZXMKICAgICBtX3ZpZXdwb3J0SXRlbS0+Y2FuY2VsRmxpY2soKTsKIH0KIAotYm9v
bCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29u
c3QKK2Jvb2wgUXRWaWV3cG9ydEhhbmRsZXI6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9zY2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmlt
YXRpb246OlJ1bm5pbmc7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpj
YW5jZWxTY3JvbGxBbmltYXRpb24oKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6Y2FuY2VsU2Ny
b2xsQW5pbWF0aW9uKCkKIHsKICAgICBpZiAoIXNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQogICAg
ICAgICByZXR1cm47CkBAIC02MTcsMTggKzYxNywxOCBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6Y2FuY2VsCiAgICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFs
aWRCb3VuZHMoKSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppbnRl
cnJ1cHRTY2FsZUFuaW1hdGlvbigpCit2b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjppbnRlcnJ1cHRT
Y2FsZUFuaW1hdGlvbigpCiB7CiAgICAgLy8gVGhpcyBpbnRlcnJ1cHRzIHRoZSBzY2FsZSBhbmlt
YXRpb24gZXhhY3RseSB3aGVyZSBpdCBpcywgZXZlbiBpZiBpdCBpcyBvdXQgb2YgYm91bmRzLgog
ICAgIG1fc2NhbGVBbmltYXRpb24tPnN0b3AoKTsKIH0KIAotYm9vbCBRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Citib29sIFF0Vmlld3BvcnRI
YW5kbGVyOjpwaW5jaEdlc3R1cmVBY3RpdmUoKSBjb25zdAogewogICAgIHJldHVybiBtX3BpbmNo
U3RhcnRTY2FsZSA+IDA7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpw
aW5jaEdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENv
b3JkaW5hdGVzKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlU3RhcnRlZChj
b25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcykKIHsKICAgICAv
LyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24u
CiAgICAgQVNTRVJUKG1faGFkVXNlckludGVyYWN0aW9uKTsKQEAgLTY0NSw3ICs2NDUsNyBAQCB2
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHCiAgICAgbV9waW5jaFN0YXJ0
U2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7CiB9CiAKLXZvaWQgUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2lu
dEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzLCBxcmVhbCB0b3RhbFNjYWxlRmFj
dG9yKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShj
b25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwgdG90
YWxTY2FsZUZhY3RvcikKIHsKICAgICBBU1NFUlQobV9zdXNwZW5kQ291bnQpOwogCkBAIC02Njcs
NyArNjY3LDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoRwogICAg
IG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9z
KCkgLSBwb3NpdGlvbkRpZmYpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTo6cGluY2hHZXN0dXJlRW5kZWQoKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0
dXJlRW5kZWQoKQogewogICAgIEFTU0VSVChtX3N1c3BlbmRDb3VudCk7CiAKQEAgLTY4MCwxMyAr
NjgwLDEzIEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEcKICAgICBt
X3NjYWxlVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsgLy8gQ2xlYXIgYWZ0ZXIgc3RhcnRpbmcgcG90
ZW50aWFsIGFuaW1hdGlvbiwgd2hpY2ggdGFrZXMgb3ZlciBkZWZlcnJpbmcuCiB9CiAKLXZvaWQg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQordm9p
ZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlQ2FuY2VsbGVkKCkKIHsKICAgICBtX3Bp
bmNoU3RhcnRTY2FsZSA9IC0xOwogICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOwog
fQogCi1RUmVjdCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdAorUVJlY3QgUXRWaWV3cG9ydEhhbmRsZXI6OnZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdAogewogICAgIGNvbnN0IFFSZWN0RiB2aXNpYmxlUmVjdChtX3ZpZXdwb3J0SXRlbS0+
Ym91bmRpbmdSZWN0KCkuaW50ZXJzZWN0ZWQobV9wYWdlSXRlbS0+Ym91bmRpbmdSZWN0KCkpKTsK
IApAQCAtNjk1LDcgKzY5NSw3IEBAIFFSZWN0IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
dmlzaWIKICAgICByZXR1cm4gUVJlY3QoZmxvb3IobWFwcGVkUmVjdC54KCkpLCBmbG9vcihtYXBw
ZWRSZWN0LnkoKSksIGZsb29yKG1hcHBlZFJlY3Qud2lkdGgoKSksIGZsb29yKG1hcHBlZFJlY3Qu
aGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmluZm9y
bVZpc2libGVDb250ZW50Q2hhbmdlKGNvbnN0IFFQb2ludEYmIHRyYWplY3RvcnlWZWN0b3IpCit2
b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjppbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShjb25zdCBR
UG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQogewogICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdp
bmdBcmVhID0gbV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7CiAgICAgaWYgKCFkcmF3aW5n
QXJlYSkKQEAgLTcxNyw3ICs3MTcsNyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTo6aW5mb3JtCiAgICAgbV9wYWdlSXRlbS0+dXBkYXRlKCk7CiB9CiAKLXZvaWQgUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lOjp2aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpCit2b2lkIFF0Vmll
d3BvcnRIYW5kbGVyOjp2aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpCiB7CiAgICAgUVNpemUgdmll
d3BvcnRTaXplID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUo
KTsKIApAQCAtNzM2LDcgKzczNiw3IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
Ojp2aWV3cG8KICAgICBpbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShRUG9pbnRGKCkpOwogfQog
Ci12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVDb250ZW50KGNvbnN0IFFQ
b2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKQordm9pZCBRdFZp
ZXdwb3J0SGFuZGxlcjo6c2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNlbnRlckluQ1NTQ29v
cmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKQogewogICAgIFFQb2ludEYgb2xkUGluY2hDZW50ZXJP
blZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NT
Q29vcmRpbmF0ZXMpOwogICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUoaXRlbVNjYWxl
RnJvbUNTUyhjc3NTY2FsZSkpOwpAQCAtNzQ3LDYgKzc0Nyw2IEBAIHZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpzY2FsZUMKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNpbmNs
dWRlICJtb2NfUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCIKKyNpbmNsdWRlICJtb2Nf
UXRWaWV3cG9ydEhhbmRsZXIuY3BwIgogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oCShyZXZpc2lvbiAxMTkzNzIpCShmcm9tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaDox
MTkzNzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbkB3ZWJraXQub3JnPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmVfaAorI2RlZmluZSBRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmVfaAorCisjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5j
bHVkZSA8UXRDb3JlL1FSZWN0Rj4KKyNpbmNsdWRlIDxRdENvcmUvUVZhcmlhbnQ+CisjaW5jbHVk
ZSA8UXRDb3JlL1FWYXJpYW50QW5pbWF0aW9uPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlld3BvcnRB
cmd1bWVudHMuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK1FUX0JFR0lOX05BTUVTUEFD
RQorY2xhc3MgUVBvaW50RjsKK2NsYXNzIFFRdWlja1dlYlBhZ2U7CitjbGFzcyBRUXVpY2tXZWJW
aWV3OworY2xhc3MgUVdoZWVsRXZlbnQ7CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFFXZWJL
aXRUZXN0OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xh
c3MgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjsKKworY2xhc3MgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoV2ViUGFnZVByb3h5KiwgUVF1aWNrV2ViVmlldyos
IFFRdWlja1dlYlBhZ2UqKTsKKyAgICB+UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCk7CisK
KyAgICB2b2lkIHRvdWNoQmVnaW4oKTsKKyAgICB2b2lkIHRvdWNoRW5kKCk7CisKKyAgICBib29s
IHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQgY2FuY2VsU2Nyb2xsQW5p
bWF0aW9uKCk7CisKKyAgICBib29sIHBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdDsKKyAgICB2b2lk
IHBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3Qg
UVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgdm9p
ZCBwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRp
bWVzdGFtcE1pbGxpcyk7CisgICAgdm9pZCBwYW5HZXN0dXJlQ2FuY2VsbGVkKCk7CisKKyAgICBi
b29sIHNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7CisgICAgdm9pZCBpbnRlcnJ1cHRTY2Fs
ZUFuaW1hdGlvbigpOworCisgICAgYm9vbCBwaW5jaEdlc3R1cmVBY3RpdmUoKSBjb25zdDsKKyAg
ICB2b2lkIHBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXMpOworICAgIHZvaWQgcGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShj
b25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwgdG90
YWxTY2FsZUZhY3Rvcik7CisgICAgdm9pZCBwaW5jaEdlc3R1cmVFbmRlZCgpOworICAgIHZvaWQg
cGluY2hHZXN0dXJlQ2FuY2VsbGVkKCk7CisKKyAgICB2b2lkIHpvb21Ub0FyZWFHZXN0dXJlRW5k
ZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsK
KyAgICB2b2lkIGZvY3VzRWRpdGFibGVBcmVhKGNvbnN0IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25z
dCBRUmVjdEYmIHRhcmdldEFyZWEpOworCisgICAgdm9pZCBwYWdlQ29udGVudFBvc2l0aW9uUmVx
dWVzdGVkKGNvbnN0IFFQb2ludCYgcG9zaXRpb24pOworCisgICAgdm9pZCB2aWV3cG9ydEl0ZW1T
aXplQ2hhbmdlZCgpOworICAgIHZvaWQgdmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKKyAgICB2b2lkIGluZm9ybVZpc2libGVDb250
ZW50Q2hhbmdlKGNvbnN0IFFQb2ludEYmIHRyYWplY3RvcnkgPSBRUG9pbnRGKCkpOworICAgIHZv
aWQgcGFnZUNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1NpemUsIGNvbnN0IFFT
aXplJiB2aWV3cG9ydFNpemUpOworCitwcml2YXRlIFFfU0xPVFM6CisgICAgLy8gUmVzcG9uZCB0
byBjaGFuZ2VzIG9mIHBvc2l0aW9uIHRoYXQgYXJlIG5vdCBkcml2ZW4gYnkgdXMuCisgICAgdm9p
ZCBwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpOworCisgICAgdm9pZCBzY2FsZUFuaW1hdGlvblN0
YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246
OlN0YXRlKTsKKyAgICB2b2lkIHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50IHZh
bHVlKTsKKworICAgIHZvaWQgZmxpY2tNb3ZlU3RhcnRlZCgpOyAvLyBDYWxsZWQgd2hlbiBwYW5u
aW5nIHN0YXJ0cy4KKyAgICB2b2lkIGZsaWNrTW92ZUVuZGVkKCk7IC8vICAgQ2FsbGVkIHdoZW4g
cGFubmluZyAoKyBraW5ldGljIGFuaW1hdGlvbikgZW5kcy4KKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjsKKyAgICBmcmllbmQgY2xhc3MgOjpRV2Vi
S2l0VGVzdDsKKworICAgIFdlYlBhZ2VQcm94eSogY29uc3QgbV93ZWJQYWdlUHJveHk7CisgICAg
UVF1aWNrV2ViVmlldyogY29uc3QgbV92aWV3cG9ydEl0ZW07CisgICAgUVF1aWNrV2ViUGFnZSog
Y29uc3QgbV9wYWdlSXRlbTsKKworICAgIHFyZWFsIGNzc1NjYWxlRnJvbUl0ZW0ocXJlYWwpIGNv
bnN0OworICAgIHFyZWFsIGl0ZW1TY2FsZUZyb21DU1MocXJlYWwpIGNvbnN0OworICAgIHFyZWFs
IGl0ZW1Db29yZEZyb21DU1MocXJlYWwpIGNvbnN0OworICAgIFFSZWN0RiBpdGVtUmVjdEZyb21D
U1MoY29uc3QgUVJlY3RGJikgY29uc3Q7CisKKyAgICBxcmVhbCBpbm5lckJvdW5kZWRDU1NTY2Fs
ZShxcmVhbCkgY29uc3Q7CisgICAgcXJlYWwgb3V0ZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwpIGNv
bnN0OworCisgICAgdm9pZCBzZXRDU1NTY2FsZShxcmVhbCk7CisgICAgcXJlYWwgY3VycmVudENT
U1NjYWxlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3Qg
UVJlY3RGJik7CisgICAgdm9pZCBhbmltYXRlUGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVj
dEYmKTsKKworICAgIFFSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKKyAgICBRUmVj
dEYgbmVhcmVzdFZhbGlkQm91bmRzKCkgY29uc3Q7CisKKyAgICBRUmVjdEYgY29tcHV0ZVBvc1Jh
bmdlRm9yUGFnZUl0ZW1BdFNjYWxlKHFyZWFsIGl0ZW1TY2FsZSkgY29uc3Q7CisgICAgdm9pZCBz
Y2FsZUNvbnRlbnQoY29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluYXRlcywgcXJlYWwg
Y3NzU2NhbGUpOworCisgICAgdm9pZCBzdXNwZW5kUGFnZUNvbnRlbnQoKTsKKyAgICB2b2lkIHJl
c3VtZVBhZ2VDb250ZW50KCk7CisKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgbV9y
YXdBdHRyaWJ1dGVzOworCisgICAgYm9vbCBtX2FsbG93c1VzZXJTY2FsaW5nOworICAgIHFyZWFs
IG1fbWluaW11bVNjYWxlOworICAgIHFyZWFsIG1fbWF4aW11bVNjYWxlOworICAgIHFyZWFsIG1f
ZGV2aWNlUGl4ZWxSYXRpbzsKKworICAgIFFTaXplIG1fbGF5b3V0U2l6ZTsKKworICAgIGludCBt
X3N1c3BlbmRDb3VudDsKKyAgICBib29sIG1faGFzU3VzcGVuZGVkQ29udGVudDsKKworICAgIE93
blB0cjxWaWV3cG9ydFVwZGF0ZURlZmVycmVyPiBtX3NjYWxlVXBkYXRlRGVmZXJyZXI7CisgICAg
T3duUHRyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXI7Cisg
ICAgT3duUHRyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fdG91Y2hVcGRhdGVEZWZlcnJlcjsK
KyAgICBPd25QdHI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9hbmltYXRpb25VcGRhdGVEZWZl
cnJlcjsKKworICAgIGJvb2wgbV9oYWRVc2VySW50ZXJhY3Rpb247CisKKyAgICBjbGFzcyBTY2Fs
ZUFuaW1hdGlvbiA6IHB1YmxpYyBRVmFyaWFudEFuaW1hdGlvbiB7CisgICAgcHVibGljOgorICAg
ICAgICBTY2FsZUFuaW1hdGlvbihRT2JqZWN0KiBwYXJlbnQgPSAwKQorICAgICAgICAgICAgOiBR
VmFyaWFudEFuaW1hdGlvbihwYXJlbnQpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDdXJyZW50VmFsdWUoY29uc3QgUVZhcmlhbnQmKSB7IH0KKyAgICB9OworCisg
ICAgc3RydWN0IFNjYWxlU3RhY2tJdGVtIHsKKyAgICAgICAgU2NhbGVTdGFja0l0ZW0ocXJlYWwg
c2NhbGUsIHFyZWFsIHhQb3NpdGlvbikKKyAgICAgICAgICAgIDogc2NhbGUoc2NhbGUpCisgICAg
ICAgICAgICAsIHhQb3NpdGlvbih4UG9zaXRpb24pCisgICAgICAgIHsgfQorCisgICAgICAgIHFy
ZWFsIHNjYWxlOworICAgICAgICBxcmVhbCB4UG9zaXRpb247CisgICAgfTsKKworICAgIFNjYWxl
QW5pbWF0aW9uKiBtX3NjYWxlQW5pbWF0aW9uOworICAgIFFQb2ludEYgbV9sYXN0UGluY2hDZW50
ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CisgICAgUVBvaW50RiBtX2xhc3RTY3JvbGxQb3NpdGlv
bjsKKyAgICBxcmVhbCBtX3BpbmNoU3RhcnRTY2FsZTsKKyAgICBxcmVhbCBtX2xhc3RDb21taXR0
ZWRTY2FsZTsKKyAgICBRUmVjdEYgbV9sYXN0VmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBxcmVh
bCBtX3pvb21PdXRTY2FsZTsKKyAgICBRTGlzdDxTY2FsZVN0YWNrSXRlbT4gbV9zY2FsZVN0YWNr
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmVfaApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmll
d3BvcnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0Vmlld3BvcnRIYW5kbGVyLmgJKHJldmlzaW9uIDExOTM3MikKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw4
ICsxOSw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
X2gKLSNkZWZpbmUgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lX2gKKyNpZm5kZWYgUXRWaWV3
cG9ydEhhbmRsZXJfaAorI2RlZmluZSBRdFZpZXdwb3J0SGFuZGxlcl9oCiAKICNpbmNsdWRlIDxR
dENvcmUvUU9iamVjdD4KICNpbmNsdWRlIDxRdENvcmUvUVJlY3RGPgpAQCAtNDMsMTIgKzQzLDEy
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgVmlld3Bv
cnRVcGRhdGVEZWZlcnJlcjsKIAotY2xhc3MgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lIDog
cHVibGljIFFPYmplY3QgeworY2xhc3MgUXRWaWV3cG9ydEhhbmRsZXIgOiBwdWJsaWMgUU9iamVj
dCB7CiAgICAgUV9PQkpFQ1QKIAogcHVibGljOgotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZShXZWJQYWdlUHJveHkqLCBRUXVpY2tXZWJWaWV3KiwgUVF1aWNrV2ViUGFnZSopOwotICAg
IH5RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoKTsKKyAgICBRdFZpZXdwb3J0SGFuZGxlcihX
ZWJQYWdlUHJveHkqLCBRUXVpY2tXZWJWaWV3KiwgUVF1aWNrV2ViUGFnZSopOworICAgIH5RdFZp
ZXdwb3J0SGFuZGxlcigpOwogCiAgICAgdm9pZCB0b3VjaEJlZ2luKCk7CiAgICAgdm9pZCB0b3Vj
aEVuZCgpOwpAQCAtMTcyLDQgKzE3Miw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAogCi0jZW5kaWYgLy8gUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lX2gKKyNlbmRpZiAv
LyBRdFZpZXdwb3J0SGFuZGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcAkocmV2aXNp
b24gMTE5Mzg5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzUyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8YmVuamFt
aW5Ad2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5j
bHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCi0j
aW5jbHVkZSAicXdlYmtpdHRlc3RfcC5oIgotI2luY2x1ZGUgPFFQb2ludEY+Ci0jaW5jbHVkZSA8
UVRyYW5zZm9ybT4KLSNpbmNsdWRlIDxRV2hlZWxFdmVudD4KLSNpbmNsdWRlIDxRdFF1aWNrL3Fx
dWlja2l0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotc3RhdGljIGNvbnN0IGludCBrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxpcyA9
IDI1MDsKLQotLy8gVVBEQVRFIERFRkVSUklORyAoU1VTUEVORC9SRVNVTUUpCi0vLyA9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBXaGVuIGludGVyYWN0aW9uIHdpdGgg
dGhlIGNvbnRlbnQsIGVpdGhlciBieSBhbmltYXRpbmcgb3IgYnkgdGhlIGhhbmQgb2YgdGhlIHVz
ZXIsCi0vLyBpdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHNtb290aCBhbmltYXRpb25zIG9mIGF0
IGxlYXN0IDYwZnBzIGluIG9yZGVyIHRvIGdpdmUgYQotLy8gZ29vZCB1c2VyIGV4cGVyaWVuY2Uu
Ci0vLwotLy8gSW4gb3JkZXIgdG8gZG8gdGhpcyB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdW5rbm93
biBmYWN0b3JzLiBUaGVzZSBpbmNsdWRlIGRldmljZQotLy8gc2Vuc29ycyAoZ2VvbG9jYXRpb24s
IG9yaWVudGF0aW9uIHVwZGF0ZXMgZXRjKSwgQ1NTMyBhbmltYXRpb25zLCBKYXZhU2NyaXB0Ci0v
LyBleGVjdHV0aW9uLCBzdWIgcmVzb3VyY2UgbG9hZHMgZXRjLiBXZSBkbyB0aGlzIGJ5IGVtaXR0
aW5nIHN1c3BlbmQgYW5kIHJlc3VtZQotLy8gc2lnbmFscywgd2hpY2ggYXJlIHRoZW4gaGFuZGxl
ZCBieSB0aGUgdmlld3BvcnQgYW5kIHByb3BhZ2F0ZXMgdG8gdGhlIHJpZ2h0IHBsYWNlLgotLy8K
LS8vIEZvciB0aGlzIHJlYXNvbiB0aGUgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCBtdXN0
IGJlIHVzZWQgd2hlbiB3ZSBpbnRlcmFjdAotLy8gb3IgYW5pbWF0ZSB0aGUgY29udGVudC4KLS8v
Ci0vLyBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB3aGVuIHdlIHVwZGF0ZSBjb250ZW50IHByb3Bl
cnRpZXMsIHdlIG1pZ2h0IHJlY2VpdmUgbm90aWZ5Ci0vLyBzaWduYWxzIHNlbmQgbXkgdGhlIGNv
bnRlbnQgaXRlbSBpdHNlbGYsIGFuZCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBub3QgYWN0IG9u
Ci0vLyB0aGVzZSB1bmNvbmRpdGlvbmFsbHkuIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgcGlu
Y2ggem9vbSwgd2hpY2ggY2hhbmdlcyB0aGUKLS8vIHBvc2l0aW9uIGFuZCB3aWxsIHRodXMgcmVz
dWx0IGluIGEgUVF1aWNrV2ViUGFnZTo6Z2VvbWV0cnlDaGFuZ2VkKCkgc2lnbmFsIGdldHRpbmcK
LS8vIGVtaXR0ZWQuCi0vLwotLy8gSWYgc29tZXRoaW5nIHNob3VsZCBvbmx5IGJlIGV4ZWN1dGVk
IGR1cmluZyB1cGRhdGUgZGVmZXJyaW5nLCBpdCBpcyBwb3NzaWJsZSB0bwotLy8gY2hlY2sgZm9y
IHRoYXQgdXNpbmcgQVNTRVJUKG1fc3VzcGVuZENvdW50KS4KLQotY2xhc3MgVmlld3BvcnRVcGRh
dGVEZWZlcnJlciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdXNwZW5kQ29udGVudEZsYWcgeyBEZWZl
clVwZGF0ZSwgRGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCB9OwotICAgIFZpZXdwb3J0VXBk
YXRlRGVmZXJyZXIoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUsIFN1c3BlbmRD
b250ZW50RmxhZyBzdXNwZW5kQ29udGVudEZsYWcgPSBEZWZlclVwZGF0ZSkKLSAgICAgICAgOiBl
bmdpbmUoZW5naW5lKQotICAgIHsKLSAgICAgICAgZW5naW5lLT5tX3N1c3BlbmRDb3VudCsrOwot
Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3VzcGVuZCBjb250ZW50IGZvciBpbW1l
ZGlhdGUgdXBkYXRlcwotICAgICAgICAvLyBvbmx5IGR1cmluZyBhbmltYXRpb25zIG9yIGxvbmdl
ciBnZXN0dXJlcy4KLSAgICAgICAgaWYgKHN1c3BlbmRDb250ZW50RmxhZyA9PSBEZWZlclVwZGF0
ZUFuZFN1c3BlbmRDb250ZW50KQotICAgICAgICAgICAgZW5naW5lLT5zdXNwZW5kUGFnZUNvbnRl
bnQoKTsKLSAgICB9Ci0KLSAgICB+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcigpCi0gICAgewotICAg
ICAgICBpZiAoLS0oZW5naW5lLT5tX3N1c3BlbmRDb3VudCkpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgZW5naW5lLT5yZXN1bWVQYWdlQ29udGVudCgpOwotCi0gICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IHdpbGwgYmUgcmVxdWVz
dGVkLgotICAgICAgICBlbmdpbmUtPmluZm9ybVZpc2libGVDb250ZW50Q2hhbmdlKFFQb2ludEYo
KSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSog
Y29uc3QgZW5naW5lOwotfTsKLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnN1
c3BlbmRQYWdlQ29udGVudCgpCi17Ci0gICAgaWYgKG1faGFzU3VzcGVuZGVkQ29udGVudCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9oYXNTdXNwZW5kZWRDb250ZW50ID0gdHJ1ZTsKLSAgICBt
X3dlYlBhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci19
Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpyZXN1bWVQYWdlQ29udGVudCgp
Ci17Ci0gICAgaWYgKCFtX2hhc1N1c3BlbmRlZENvbnRlbnQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2hhc1N1c3BlbmRlZENvbnRlbnQgPSBmYWxzZTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+cmVz
dW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0KLQotLy8gQSBmbG9hdGluZyBw
b2ludCBjb21wYXJlIHdpdGggYWJzb2x1dGUgZXJyb3IuCi1zdGF0aWMgaW5saW5lIGJvb2wgZnV6
enlDb21wYXJlKHFyZWFsIGEsIHFyZWFsIGIsIHFyZWFsIGVwc2lsb24pCi17Ci0gICAgcmV0dXJu
IHFBYnMoYSAtIGIpIDwgZXBzaWxvbjsKLX0KLQotaW5saW5lIHFyZWFsIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6Y3NzU2NhbGVGcm9tSXRlbShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGl0ZW1TY2FsZSAvIG1fZGV2aWNlUGl4ZWxSYXRpbzsKLX0KLQotaW5saW5l
IHFyZWFsIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6aXRlbVNjYWxlRnJvbUNTUyhxcmVh
bCBjc3NTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3NzU2NhbGUgKiBtX2RldmljZVBpeGVs
UmF0aW87Ci19Ci0KLWlubGluZSBxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Oml0
ZW1Db29yZEZyb21DU1MocXJlYWwgdmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZhbHVlICog
bV9kZXZpY2VQaXhlbFJhdGlvOwotfQotCi1zdGF0aWMgaW5saW5lIFFQb2ludEYgYm91bmRQb3Np
dGlvbihjb25zdCBRUG9pbnRGIG1pblBvc2l0aW9uLCBjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwg
Y29uc3QgUVBvaW50RiYgbWF4UG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIFFQb2ludEYocUJvdW5k
KG1pblBvc2l0aW9uLngoKSwgcG9zaXRpb24ueCgpLCBtYXhQb3NpdGlvbi54KCkpLAotICAgICAg
ICAgICAgICAgICAgIHFCb3VuZChtaW5Qb3NpdGlvbi55KCksIHBvc2l0aW9uLnkoKSwgbWF4UG9z
aXRpb24ueSgpKSk7Ci19Ci0KLWlubGluZSBRUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjppdGVtUmVjdEZyb21DU1MoY29uc3QgUVJlY3RGJiBjc3NSZWN0KSBjb25zdAotewotICAg
IFFSZWN0RiBpdGVtUmVjdDsKLQotICAgIGl0ZW1SZWN0LnNldFgoaXRlbUNvb3JkRnJvbUNTUyhj
c3NSZWN0LngoKSkpOwotICAgIGl0ZW1SZWN0LnNldFkoaXRlbUNvb3JkRnJvbUNTUyhjc3NSZWN0
LnkoKSkpOwotICAgIGl0ZW1SZWN0LnNldFdpZHRoKGl0ZW1Db29yZEZyb21DU1MoY3NzUmVjdC53
aWR0aCgpKSk7Ci0gICAgaXRlbVJlY3Quc2V0SGVpZ2h0KGl0ZW1Db29yZEZyb21DU1MoY3NzUmVj
dC5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGl0ZW1SZWN0OwotfQotCi1RdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShXZWJLaXQ6OldlYlBh
Z2VQcm94eSogcHJveHksIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSwgUVF1aWNrV2ViUGFn
ZSogcGFnZUl0ZW0pCi0gICAgOiBtX3dlYlBhZ2VQcm94eShwcm94eSkKLSAgICAsIG1fdmlld3Bv
cnRJdGVtKHZpZXdwb3J0SXRlbSkKLSAgICAsIG1fcGFnZUl0ZW0ocGFnZUl0ZW0pCi0gICAgLCBt
X2FsbG93c1VzZXJTY2FsaW5nKGZhbHNlKQotICAgICwgbV9taW5pbXVtU2NhbGUoMSkKLSAgICAs
IG1fbWF4aW11bVNjYWxlKDEpCi0gICAgLCBtX2RldmljZVBpeGVsUmF0aW8oMSkKLSAgICAsIG1f
c3VzcGVuZENvdW50KDApCi0gICAgLCBtX2hhc1N1c3BlbmRlZENvbnRlbnQoZmFsc2UpCi0gICAg
LCBtX2hhZFVzZXJJbnRlcmFjdGlvbihmYWxzZSkKLSAgICAsIG1fc2NhbGVBbmltYXRpb24obmV3
IFNjYWxlQW5pbWF0aW9uKHRoaXMpKQotICAgICwgbV9waW5jaFN0YXJ0U2NhbGUoLTEpCi0gICAg
LCBtX2xhc3RDb21taXR0ZWRTY2FsZSgtMSkKLSAgICAsIG1fem9vbU91dFNjYWxlKDAuMCkKLXsK
LSAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBT
TE9UKGZsaWNrTW92ZVN0YXJ0ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25u
ZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRFbmRlZCgpKSwgU0xPVChmbGlja01v
dmVFbmRlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotCi0gICAgY29ubmVjdChtX3NjYWxl
QW5pbWF0aW9uLCBTSUdOQUwodmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksCi0gICAgICAgICAgICBT
TE9UKHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksIFF0OjpEaXJlY3RDb25u
ZWN0aW9uKTsKLSAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTChzdGF0ZUNoYW5n
ZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkp
LAotICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RB
bmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSksIFF0OjpEaXJlY3RD
b25uZWN0aW9uKTsKLX0KLQotUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp+UXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lKCkKLXsKLX0KLQotcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjppbm5lckJvdW5kZWRDU1NTY2FsZShxcmVhbCBjc3NTY2FsZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gcUJvdW5kKG1fbWluaW11bVNjYWxlLCBjc3NTY2FsZSwgbV9tYXhpbXVtU2NhbGUp
OwotfQotCi1xcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Om91dGVyQm91bmRlZENT
U1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAotewotICAgIGlmIChtX2FsbG93c1VzZXJTY2Fs
aW5nKSB7Ci0gICAgICAgIC8vIEJvdW5kZWQgYnkgWzAuMSwgMTAuMF0gbGlrZSB0aGUgdmlld3Bv
cnQgbWV0YSBjb2RlIGluIFdlYkNvcmUuCi0gICAgICAgIHFyZWFsIGhhcmRNaW4gPSBxTWF4PHFy
ZWFsPigwLjEsIHFyZWFsKDAuNSkgKiBtX21pbmltdW1TY2FsZSk7Ci0gICAgICAgIHFyZWFsIGhh
cmRNYXggPSBxTWluPHFyZWFsPigxMCwgcXJlYWwoMi4wKSAqIG1fbWF4aW11bVNjYWxlKTsKLSAg
ICAgICAgcmV0dXJuIHFCb3VuZChoYXJkTWluLCBjc3NTY2FsZSwgaGFyZE1heCk7Ci0gICAgfQot
ICAgIHJldHVybiBpbm5lckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7Ci19Ci0KLXZvaWQgUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKGNvbnN0
IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKLXsKLSAgICBtX3Jh
d0F0dHJpYnV0ZXMgPSBuZXdBdHRyaWJ1dGVzOwotICAgIFdlYkNvcmU6OnJlc3RyaWN0U2NhbGVG
YWN0b3JUb0luaXRpYWxTY2FsZUlmTm90VXNlclNjYWxhYmxlKG1fcmF3QXR0cmlidXRlcyk7Ci0K
LSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXNldHRpbmcgaGVyZSBpcyB3cm9uZywgaXQgc2hv
dWxkIGhhcHBlbiBvbmx5IGZvciB0aGUgZmlyc3QKLSAgICAgICAgLy8gdmlld3BvcnQgY2hhbmdl
IGZvciBhIGdpdmVuIHBhZ2UgYW5kIGZpcnN0IHdoZW4gd2UgcGFpbnQgdGhlIHBhZ2UgZm9yCi0g
ICAgICAgIC8vIHRoZSBmaXJzdCB0aW1lLgotCi0gICAgICAgIG1faGFkVXNlckludGVyYWN0aW9u
ID0gZmFsc2U7Ci0KLSAgICAgICAgbV96b29tT3V0U2NhbGUgPSAwLjA7Ci0gICAgICAgIG1fc2Nh
bGVTdGFjay5jbGVhcigpOwotCi0gICAgICAgIC8vIFRoaXMgcGFydCBiZWxvdyBzaG91bGQgZ28g
ZnVsbHkgYXdheSB3aGVuIHRoZSBhYm92ZSBwbGFuIGlzIGltcGxlbWVudGVkLgotCi0gICAgICAg
IG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwotICAgICAgICBtX3NjYWxlQW5pbWF0aW9u
LT5zdG9wKCk7Ci0KLSAgICAgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci0gICAg
ICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKLSAgICAgICAgbV90b3VjaFVwZGF0
ZURlZmVycmVyLmNsZWFyKCk7Ci0gICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIuY2xl
YXIoKTsKLSAgICAgICAgQVNTRVJUKCFtX3N1c3BlbmRDb3VudCk7Ci0gICAgICAgIEFTU0VSVCgh
bV9oYXNTdXNwZW5kZWRDb250ZW50KTsKLSAgICB9Ci0KLSAgICBtX2RldmljZVBpeGVsUmF0aW8g
PSBtX3Jhd0F0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbzsgLy8gU2hvdWxkIHJldHVybiB2YWx1
ZSBmcm9tIHRoZSB3ZWJQYWdlUHJveHkuCi0gICAgbV9hbGxvd3NVc2VyU2NhbGluZyA9ICEhbV9y
YXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZTsKLSAgICBtX21pbmltdW1TY2FsZSA9IG1fcmF3QXR0
cmlidXRlcy5taW5pbXVtU2NhbGU7Ci0gICAgbV9tYXhpbXVtU2NhbGUgPSBtX3Jhd0F0dHJpYnV0
ZXMubWF4aW11bVNjYWxlOwotCi0gICAgaWYgKCFtX2hhZFVzZXJJbnRlcmFjdGlvbiAmJiAhbV9o
YXNTdXNwZW5kZWRDb250ZW50KSB7Ci0gICAgICAgIEFTU0VSVChtX3BpbmNoU3RhcnRTY2FsZSA9
PSAtMSk7Ci0gICAgICAgIC8vIEVtaXRzIGNvbnRlbnRzU2NhbGVDaGFuZ2VkKCk7Ci0gICAgICAg
IHNldENTU1NjYWxlKG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUpOwotICAgIH0KLQotICAg
IGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPnZpZXdwb3J0Q2hh
bmdlZCgpOwotCi0gICAgLy8gSWYgdGhlIHdlYiBhcHAgc3VjY2Vzc2l2ZWx5IGNoYW5nZXMgdGhl
IHZpZXdwb3J0IG9uIHB1cnBvc2UKLSAgICAvLyBpdCB3YW50cyB0byBiZSBpbiBjb250cm9sIGFu
ZCB3ZSBzaG91bGQgZGlzYWJsZSBhbmltYXRpb25zLgotICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXIgZ3VhcmQodGhpcyk7Ci0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRC
b3VuZHMoKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYWdlQ29u
dGVudHNTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6ZSwgY29uc3QgUVNpemUmIHZpZXdw
b3J0U2l6ZSkKLXsKLSAgICBmbG9hdCBtaW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpjb21wdXRlTWlu
aW11bVNjYWxlRmFjdG9yRm9yQ29udGVudENvbnRhaW5lZChtX3Jhd0F0dHJpYnV0ZXMsIHZpZXdw
b3J0U2l6ZSwgbmV3U2l6ZSk7Ci0KLSAgICBpZiAoIXFGdXp6eUNvbXBhcmUobWluaW11bVNjYWxl
LCBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlKSkgewotICAgICAgICBtX21pbmltdW1TY2Fs
ZSA9IG1pbmltdW1TY2FsZTsKLSAgICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVu
dGFsKCktPnRlc3QoKS0+dmlld3BvcnRDaGFuZ2VkKCk7Ci0KLSAgICAgICAgaWYgKCFtX2hhZFVz
ZXJJbnRlcmFjdGlvbiAmJiAhbV9oYXNTdXNwZW5kZWRDb250ZW50KSB7Ci0gICAgICAgICAgICAv
LyBFbWl0cyBjb250ZW50c1NjYWxlQ2hhbmdlZCgpOwotICAgICAgICAgICAgc2V0Q1NTU2NhbGUo
bWluaW11bVNjYWxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEVtaXQgZm9yIHRlc3Rp
bmcgcHVycG9zZXMsIHNvIHRoYXQgaXQgY2FuIGJlIHZlcmlmaWVkIHRoYXQKLSAgICAvLyB3ZSBk
aWRuJ3QgZG8gc2NhbGUgYWRqdXN0bWVudC4KLSAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBl
cmltZW50YWwoKS0+dGVzdCgpLT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7Ci0KLSAgICBWaWV3
cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOwotICAgIHNldFBhZ2VJdGVtUmVjdFZpc2li
bGUobmVhcmVzdFZhbGlkQm91bmRzKCkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6c2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGl0ZW1SZWN0KQot
ewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdXNwZW5kQ291bnQsCi0gICAgICAgICJzZXRQ
YWdlSXRlbVJlY3RWaXNpYmxlIGhhcyB0byBiZSBndWFyZGVkIHVzaW5nIGEgVmlld3BvcnRVcGRh
dGVEZWZlcnJlci4iKTsKLQotICAgIGlmIChpdGVtUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHFyZWFsIGl0ZW1TY2FsZSA9IG1fdmlld3BvcnRJdGVtLT53aWR0aCgpIC8g
aXRlbVJlY3Qud2lkdGgoKTsKLQotICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUoaXRl
bVNjYWxlKTsKLQotICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0aGVyIHdpdGgg
dGhlIHNjYWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNjYWxl
Ci0gICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgcGFnZSBwb3NpdGlvbiAoZGlzcGxhY2VtZW50IG9u
IHRoZSBmbGlja2FibGUgY29udGVudEl0ZW0gYmVjYXVzZSBvZiBhZGRpdGlvbmFsIGl0ZW1zKS4K
LSAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uKG1fcGFnZUl0ZW0tPnBvcygpICsgKGl0ZW1SZWN0LnRv
cExlZnQoKSAqIGl0ZW1TY2FsZSkpOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQ
b3MobmV3UG9zaXRpb24pOwotfQotCi0vLyBFYXNlIG91dCBvdmVyc2hvb3Qgb2YgMS4yNSBjb21i
aW5lZCB3aXRoIGVhc2UgaW4gY29ycmVjdGlvbiBvZiAwLjI1LiBCb3RoIHF1YWRyYXRpYyB0byBo
YXZlIHBoeXNpY2FsIG1vdGlvbi4KLXN0YXRpYyBxcmVhbCBwaHlzaWNhbE92ZXJzaG9vdChxcmVh
bCB0KQotewotICAgIHJldHVybiAoLXQgKiAodCAtIDIpKSAqIDEuMjUgLSAodCAqIHQpICogMC4y
NTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmFuaW1hdGVQYWdlSXRl
bVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fc2Nh
bGVBbmltYXRpb24tPnN0YXRlKCkgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVkKTsKLQot
ICAgIEFTU0VSVCghc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpOwotICAgIGlmIChzY3JvbGxBbmlt
YXRpb25BY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVJlY3RGIGN1cnJlbnRQYWdl
SXRlbVJlY3RWaXNpYmxlID0gbV92aWV3cG9ydEl0ZW0tPm1hcFJlY3RUb1dlYkNvbnRlbnQobV92
aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsKLSAgICBpZiAoaXRlbVJlY3QgPT0gY3VycmVu
dFBhZ2VJdGVtUmVjdFZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFFYXNpbmdDdXJ2
ZSBlYXNpbmdDdXJ2ZTsKLSAgICBlYXNpbmdDdXJ2ZS5zZXRDdXN0b21UeXBlKHBoeXNpY2FsT3Zl
cnNob290KTsKLQotICAgIG1fc2NhbGVBbmltYXRpb24tPnNldER1cmF0aW9uKGtTY2FsZUFuaW1h
dGlvbkR1cmF0aW9uTWlsbGlzKTsKLSAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFYXNpbmdDdXJ2
ZShlYXNpbmdDdXJ2ZSk7Ci0KLSAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRTdGFydFZhbHVlKGN1
cnJlbnRQYWdlSXRlbVJlY3RWaXNpYmxlKTsKLSAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFbmRW
YWx1ZShpdGVtUmVjdCk7Ci0KLSAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdGFydCgpOwotfQotCi12
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZmxpY2tNb3ZlU3RhcnRlZCgpCi17Ci0g
ICAgUV9BU1NFUlQobV92aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOwotICAgIG1fc2Nyb2xsVXBk
YXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBW
aWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci0K
LSAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCk7
Ci0gICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwg
U0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7Ci0gICAgY29ubmVjdChtX3ZpZXdwb3J0
SXRlbSwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hh
bmdlZCgpKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpmbGlja01v
dmVFbmRlZCgpCi17Ci0gICAgUV9BU1NFUlQoIW1fdmlld3BvcnRJdGVtLT5pc01vdmluZygpKTsK
LSAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGVuZCBvZiB0aGUgcGFuIG9yIHBh
biBraW5ldGljIGFuaW1hdGlvbi4KLSAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7
Ci0KLSAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IFFQb2ludEYoKTsKLSAgICBkaXNjb25uZWN0
KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKHBh
Z2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsKLSAgICBkaXNjb25uZWN0KG1fdmlld3BvcnRJdGVt
LCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25D
aGFuZ2VkKCkpKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhZ2VJ
dGVtUG9zaXRpb25DaGFuZ2VkKCkKLXsKLSAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uID0gbV92aWV3
cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKTsKLQotICAgIGluZm9ybVZpc2libGVDb250ZW50Q2hhbmdl
KG1fbGFzdFNjcm9sbFBvc2l0aW9uIC0gbmV3UG9zaXRpb24pOwotCi0gICAgbV9sYXN0U2Nyb2xs
UG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OnBhZ2VDb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBjc3NQb3Np
dGlvbikKLXsKLSAgICAvLyBJZ25vcmUgdGhlIHJlcXVlc3QgaWYgc3VzcGVuZGVkLiBDYW4gb25s
eSBoYXBwZW4gZHVlIHRvIGRlbGF5IGluIGV2ZW50IGRlbGl2ZXJ5LgotICAgIGlmIChtX3N1c3Bl
bmRDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gbV9w
YWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOyAvLyBTdGF5IGF0IHNhbWUgc2NhbGUuCi0KLSAgICBR
UmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5k
SXRlbVNjYWxlKTsKLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQ
b3NSYW5nZS50b3BMZWZ0KCksIGNzc1Bvc2l0aW9uICogZW5kSXRlbVNjYWxlLCBlbmRQb3NSYW5n
ZS5ib3R0b21SaWdodCgpKTsKLQotICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5k
UG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKS5z
aXplKCkgLyBlbmRJdGVtU2NhbGUpOwotCi0gICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFy
ZCh0aGlzKTsKLSAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVj
dCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlv
blN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlIC8qb2xkU3RhdGUqLykKLXsKLSAgICBzd2l0Y2ggKG5ld1N0YXRl
KSB7Ci0gICAgY2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc6Ci0gICAgICAgIG1fdmll
d3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwotICAgICAgICBBU1NFUlQoIW1fYW5pbWF0aW9uVXBk
YXRlRGVmZXJyZXIpOwotICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyID0gYWRvcHRQ
dHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZlcnJl
cjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RvcHBlZDoKLSAgICAgICAgbV9hbmltYXRpb25VcGRh
dGVEZWZlcnJlci5jbGVhcigpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpz
Y2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZChRVmFyaWFudCB2YWx1ZSkKLXsKLSAgICBzZXRQYWdl
SXRlbVJlY3RWaXNpYmxlKHZhbHVlLnRvUmVjdEYoKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjp0b3VjaEJlZ2luKCkKLXsKLSAgICBtX2hhZFVzZXJJbnRlcmFjdGlv
biA9IHRydWU7Ci0KLSAgICAvLyBQcmV2ZW50cyByZXN1bWluZyB0aGUgcGFnZSBiZXR3ZWVuIHRo
ZSB1c2VyJ3MgZmxpY2tzIG9mIHRoZSBwYWdlIHdoaWxlIHRoZSBhbmltYXRpb24gaXMgcnVubmlu
Zy4KLSAgICBpZiAoc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgIG1fdG91Y2hVcGRh
dGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMsIFZp
ZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKLX0K
LQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnRvdWNoRW5kKCkKLXsKLSAgICBt
X3RvdWNoVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKLX0KLQotUVJlY3RGIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6Y29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKHFyZWFsIGl0
ZW1TY2FsZSkgY29uc3QKLXsKLSAgICBjb25zdCBRU2l6ZUYgY29udGVudEl0ZW1TaXplID0gbV9w
YWdlSXRlbS0+Y29udGVudHNTaXplKCkgKiBpdGVtU2NhbGU7Ci0gICAgY29uc3QgUVNpemVGIHZp
ZXdwb3J0SXRlbVNpemUgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpOwot
Ci0gICAgY29uc3QgcXJlYWwgaG9yaXpvbnRhbFJhbmdlID0gY29udGVudEl0ZW1TaXplLndpZHRo
KCkgLSB2aWV3cG9ydEl0ZW1TaXplLndpZHRoKCk7Ci0gICAgY29uc3QgcXJlYWwgdmVydGljYWxS
YW5nZSA9IGNvbnRlbnRJdGVtU2l6ZS5oZWlnaHQoKSAtIHZpZXdwb3J0SXRlbVNpemUuaGVpZ2h0
KCk7Ci0KLSAgICByZXR1cm4gUVJlY3RGKFFQb2ludEYoMCwgMCksIFFTaXplRihob3Jpem9udGFs
UmFuZ2UsIHZlcnRpY2FsUmFuZ2UpKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OmZvY3VzRWRpdGFibGVBcmVhKGNvbnN0IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25zdCBR
UmVjdEYmIHRhcmdldEFyZWEpCi17Ci0gICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSBy
ZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgotICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFj
dGlvbik7Ci0KLSAgICBRUmVjdEYgZW5kQXJlYSA9IGl0ZW1SZWN0RnJvbUNTUyh0YXJnZXRBcmVh
KTsKLQotICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IGl0ZW1TY2FsZUZyb21DU1MoaW5uZXJCb3Vu
ZGVkQ1NTU2NhbGUoMi4wKSk7Ci0gICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmll
d3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKLQotICAgIHFyZWFsIHg7Ci0gICAgY29uc3QgcXJl
YWwgYm9yZGVyT2Zmc2V0ID0gMTA7Ci0gICAgaWYgKChlbmRBcmVhLndpZHRoKCkgKyBib3JkZXJP
ZmZzZXQpICogZW5kSXRlbVNjYWxlIDw9IHZpZXdwb3J0UmVjdC53aWR0aCgpKSB7Ci0gICAgICAg
IC8vIENlbnRlciB0aGUgaW5wdXQgZmllbGQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdmlldywgaWYg
aXQgaXMgc21hbGxlciB0aGFuCi0gICAgICAgIC8vIHRoZSB2aWV3IGF0IHRoZSBzY2FsZSB0YXJn
ZXQuCi0gICAgICAgIHggPSB2aWV3cG9ydFJlY3QuY2VudGVyKCkueCgpIC0gZW5kQXJlYS53aWR0
aCgpICogZW5kSXRlbVNjYWxlIC8gMi4wOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEVuc3Vy
ZSB0aGF0IHRoZSBjYXJldCBhbHdheXMgaGFzIGJvcmRlck9mZnNldCBjb250ZW50cyBwaXhlbHMg
dG8gdGhlIHJpZ2h0Ci0gICAgICAgIC8vIG9mIGl0LCBhbmQgc2Vjb25kYXJpbHkgKGlmIHBvc3Np
YmxlKSwgdGhhdCB0aGUgYXJlYSBoYXMgYm9yZGVyT2Zmc2V0Ci0gICAgICAgIC8vIGNvbnRlbnRz
IHBpeGVscyB0byB0aGUgbGVmdCBvZiBpdC4KLSAgICAgICAgcXJlYWwgY2FyZXRPZmZzZXQgPSBp
dGVtQ29vcmRGcm9tQ1NTKGNhcmV0QXJlYS54KCkpIC0gZW5kQXJlYS54KCk7Ci0gICAgICAgIHgg
PSBxTWluKHZpZXdwb3J0UmVjdC53aWR0aCgpIC0gKGNhcmV0T2Zmc2V0ICsgYm9yZGVyT2Zmc2V0
KSAqIGVuZEl0ZW1TY2FsZSwgYm9yZGVyT2Zmc2V0ICogZW5kSXRlbVNjYWxlKTsKLSAgICB9Ci0K
LSAgICBjb25zdCBRUG9pbnRGIGhvdHNwb3QgPSBRUG9pbnRGKGVuZEFyZWEueCgpLCBlbmRBcmVh
LmNlbnRlcigpLnkoKSk7Ci0gICAgY29uc3QgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSBRUG9p
bnRGKHgsIC8qIEZJWE1FOiB2aXNpYmxlQ2VudGVyICovIHZpZXdwb3J0UmVjdC5jZW50ZXIoKS55
KCkpOwotCi0gICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNwb3QgKiBlbmRJdGVtU2NhbGUg
LSB2aWV3cG9ydEhvdHNwb3Q7Ci0gICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1Jh
bmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0KLSAgICBlbmRQb3NpdGlvbiA9
IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9z
UmFuZ2UuYm90dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0
KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRl
bVNjYWxlKTsKLQotICAgIGFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250
ZW50UmVjdCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp6b29tVG9B
cmVhR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHRvdWNoUG9pbnQsIGNvbnN0IFFSZWN0RiYg
dGFyZ2V0QXJlYSkKLXsKLSAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBv
ZiBhIHVzZXIgaW50ZXJhY3Rpb24uCi0gICAgQVNTRVJUKG1faGFkVXNlckludGVyYWN0aW9uKTsK
LQotICAgIGlmICghdGFyZ2V0QXJlYS5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX3N1c3BlbmRDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgaW50IG1h
cmdpbiA9IDEwOyAvLyBXZSB3YW50IGF0IGxlYXN0IGEgbGl0dGxlIGJpdCBvZiBtYXJnaW4uCi0g
ICAgUVJlY3RGIGVuZEFyZWEgPSBpdGVtUmVjdEZyb21DU1ModGFyZ2V0QXJlYS5hZGp1c3RlZCgt
bWFyZ2luLCAtbWFyZ2luLCBtYXJnaW4sIG1hcmdpbikpOwotCi0gICAgY29uc3QgUVJlY3RGIHZp
ZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKLQotICAgIHFyZWFs
IHRhcmdldENTU1NjYWxlID0gdmlld3BvcnRSZWN0LnNpemUoKS53aWR0aCgpIC8gZW5kQXJlYS5z
aXplKCkud2lkdGgoKTsKLSAgICBxcmVhbCBlbmRDU1NTY2FsZSA9IGlubmVyQm91bmRlZENTU1Nj
YWxlKHFNaW4odGFyZ2V0Q1NTU2NhbGUsIHFyZWFsKDIuNSkpKTsKLSAgICBxcmVhbCBlbmRJdGVt
U2NhbGUgPSBpdGVtU2NhbGVGcm9tQ1NTKGVuZENTU1NjYWxlKTsKLSAgICBxcmVhbCBjdXJyZW50
U2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Ci0KLSAgICAvLyBXZSB3YW50IHRv
IGVuZCB1cCB3aXRoIHRoZSB0YXJnZXQgYXJlYSBmaWxsaW5nIHRoZSB3aG9sZSB3aWR0aCBvZiB0
aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKSwKLSAgICAvLyBhbmQgY2VudHJhbGl6ZWQgdmVydGlj
YWxseSB3aGVyZSB0aGUgdXNlciByZXF1ZXN0ZWQgem9vbS4gVGh1cyBvdXIgaG90c3BvdCBpcyB0
aGUgY2VudGVyIG9mCi0gICAgLy8gdGhlIHRhcmdldEFyZWEgeC13aXNlIGFuZCB0aGUgcmVxdWVz
dGVkIHpvb20gcG9zaXRpb24sIHktd2lzZS4KLSAgICBjb25zdCBRUG9pbnRGIGhvdHNwb3QgPSBR
UG9pbnRGKGVuZEFyZWEuY2VudGVyKCkueCgpLCBpdGVtQ29vcmRGcm9tQ1NTKHRvdWNoUG9pbnQu
eSgpKSk7Ci0gICAgY29uc3QgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSB2aWV3cG9ydFJlY3Qu
Y2VudGVyKCk7Ci0KLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gaG90c3BvdCAqIGVuZENTU1Nj
YWxlIC0gdmlld3BvcnRIb3RzcG90OwotCi0gICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0
ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0gICAgZW5kUG9zaXRp
b24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVu
ZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOwotCi0gICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50
UmVjdChlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVu
ZEl0ZW1TY2FsZSk7Ci0KLSAgICBlbnVtIHsgWm9vbUluLCBab29tQmFjaywgWm9vbU91dCwgTm9a
b29tIH0gem9vbUFjdGlvbiA9IFpvb21JbjsKLQotICAgIGlmICghbV9zY2FsZVN0YWNrLmlzRW1w
dHkoKSkgewotICAgICAgICAvLyBab29tIGJhY2sgb3V0IGlmIGF0dGVtcHRpbmcgdG8gc2NhbGUg
dG8gdGhlIHNhbWUgY3VycmVudCBzY2FsZSwgb3IKLSAgICAgICAgLy8gYXR0ZW1wdGluZyB0byBj
b250aW51ZSBzY2FsaW5nIG91dCBmcm9tIHRoZSBpbm5lciBtb3N0IGxldmVsLgotICAgICAgICAv
LyBVc2UgZnV6enkgY29tcGFyZSB3aXRoIGEgZml4ZWQgZXJyb3IgdG8gYmUgYWJsZSB0byBkZWFs
IHdpdGggbGFyZ2lzaCBkaWZmZXJlbmNlcyBkdWUgdG8gcGl4ZWwgcm91bmRpbmcuCi0gICAgICAg
IGlmIChmdXp6eUNvbXBhcmUoZW5kSXRlbVNjYWxlLCBjdXJyZW50U2NhbGUsIDAuMDEpKSB7Ci0g
ICAgICAgICAgICAvLyBJZiBtb3ZpbmcgdGhlIHZpZXdwb3J0IHdvdWxkIGV4cG9zZSBtb3JlIG9m
IHRoZSB0YXJnZXRSZWN0IGFuZCBtb3ZlIGF0IGxlYXN0IDQwIHBpeGVscywgdXBkYXRlIHBvc2l0
aW9uIGJ1dCBkbyBub3Qgc2NhbGUgb3V0LgotICAgICAgICAgICAgUVJlY3RGIGN1cnJlbnRDb250
ZW50UmVjdChtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpIC8gY3VycmVudFNjYWxlLCB2aWV3
cG9ydFJlY3Quc2l6ZSgpIC8gY3VycmVudFNjYWxlKTsKLSAgICAgICAgICAgIFFSZWN0RiB0YXJn
ZXRJbnRlcnNlY3Rpb24gPSBlbmRWaXNpYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0ZWQodGFyZ2V0
QXJlYSk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb250ZW50UmVjdC5jb250YWlucyh0YXJn
ZXRJbnRlcnNlY3Rpb24pICYmIChxQWJzKGVuZFZpc2libGVDb250ZW50UmVjdC50b3AoKSAtIGN1
cnJlbnRDb250ZW50UmVjdC50b3AoKSkgPj0gNDAgfHwgcUFicyhlbmRWaXNpYmxlQ29udGVudFJl
Y3QubGVmdCgpIC0gY3VycmVudENvbnRlbnRSZWN0LmxlZnQoKSkgPj0gNDApKQotICAgICAgICAg
ICAgICAgIHpvb21BY3Rpb24gPSBOb1pvb207Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgem9vbUFjdGlvbiA9IFpvb21CYWNrOwotICAgICAgICB9IGVsc2UgaWYgKGZ1enp5Q29t
cGFyZShlbmRJdGVtU2NhbGUsIG1fem9vbU91dFNjYWxlLCAwLjAxKSkKLSAgICAgICAgICAgIHpv
b21BY3Rpb24gPSBab29tQmFjazsKLSAgICAgICAgZWxzZSBpZiAoZW5kSXRlbVNjYWxlIDwgY3Vy
cmVudFNjYWxlKQotICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21PdXQ7Ci0gICAgfQotCi0g
ICAgc3dpdGNoICh6b29tQWN0aW9uKSB7Ci0gICAgY2FzZSBab29tSW46Ci0gICAgICAgIG1fc2Nh
bGVTdGFjay5hcHBlbmQoU2NhbGVTdGFja0l0ZW0oY3VycmVudFNjYWxlLCBtX3ZpZXdwb3J0SXRl
bS0+Y29udGVudFBvcygpLngoKSkpOwotICAgICAgICBtX3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1T
Y2FsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBab29tQmFjazogewotICAgICAgICBTY2Fs
ZVN0YWNrSXRlbSBsYXN0U2NhbGUgPSBtX3NjYWxlU3RhY2sudGFrZUxhc3QoKTsKLSAgICAgICAg
ZW5kSXRlbVNjYWxlID0gbGFzdFNjYWxlLnNjYWxlOwotICAgICAgICBlbmRDU1NTY2FsZSA9IGNz
c1NjYWxlRnJvbUl0ZW0obGFzdFNjYWxlLnNjYWxlKTsKLSAgICAgICAgLy8gUmVjYWxjdWxhdGUg
ZW5kUG9zaXRpb24gYW5kIGJvdW5kIGl0IGFjY29yZGluZyB0byBuZXcgc2NhbGUuCi0gICAgICAg
IGVuZFBvc2l0aW9uLnNldFkoaG90c3BvdC55KCkgKiBlbmRDU1NTY2FsZSAtIHZpZXdwb3J0SG90
c3BvdC55KCkpOwotICAgICAgICBlbmRQb3NpdGlvbi5zZXRYKGxhc3RTY2FsZS54UG9zaXRpb24p
OwotICAgICAgICBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2Fs
ZShlbmRJdGVtU2NhbGUpOwotICAgICAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5k
UG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQo
KSk7Ci0gICAgICAgIGVuZFZpc2libGVDb250ZW50UmVjdCA9IFFSZWN0RihlbmRQb3NpdGlvbiAv
IGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFpvb21PdXQ6Ci0gICAgICAgIC8vIFVuc3RhY2sg
YWxsIHNjYWxlLWxldmVscyBkZWVwZXIgdGhhbiB0aGUgbmV3IGxldmVsLCBzbyBhIHpvb20tYmFj
ayB3b24ndCBlbmQgdXAgem9vbWluZyBpbi4KLSAgICAgICAgd2hpbGUgKCFtX3NjYWxlU3RhY2su
aXNFbXB0eSgpICYmIG1fc2NhbGVTdGFjay5sYXN0KCkuc2NhbGUgPj0gZW5kSXRlbVNjYWxlKQot
ICAgICAgICAgICAgbV9zY2FsZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgbV96b29tT3V0
U2NhbGUgPSBlbmRJdGVtU2NhbGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTm9ab29tOgot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBhbmltYXRlUGFnZUl0ZW1SZWN0VmlzaWJsZShl
bmRWaXNpYmxlQ29udGVudFJlY3QpOwotfQotCi1RUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpuZWFyZXN0VmFsaWRCb3VuZHMoKSBjb25zdAotewotICAgIHFyZWFsIGVuZEl0ZW1T
Y2FsZSA9IGl0ZW1TY2FsZUZyb21DU1MoaW5uZXJCb3VuZGVkQ1NTU2NhbGUoY3VycmVudENTU1Nj
YWxlKCkpKTsKLQotICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRl
bS0+Ym91bmRpbmdSZWN0KCk7Ci0gICAgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSB2aWV3cG9y
dFJlY3QuY2VudGVyKCk7Ci0KLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gbV92aWV3cG9ydEl0
ZW0tPm1hcFRvV2ViQ29udGVudCh2aWV3cG9ydEhvdHNwb3QpICogZW5kSXRlbVNjYWxlIC0gdmll
d3BvcnRIb3RzcG90OwotCi0gICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1Jhbmdl
Rm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0gICAgZW5kUG9zaXRpb24gPSBib3Vu
ZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVuZFBvc1Jhbmdl
LmJvdHRvbVJpZ2h0KCkpOwotCi0gICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQ
b3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2Fs
ZSk7Ci0KLSAgICByZXR1cm4gZW5kVmlzaWJsZUNvbnRlbnRSZWN0OwotfQotCi12b2lkIFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2V0Q1NTU2NhbGUocXJlYWwgc2NhbGUpCi17Ci0gICAg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKLQotICAgIHFyZWFsIG5ld1NjYWxl
ID0gaW5uZXJCb3VuZGVkQ1NTU2NhbGUoc2NhbGUpOwotICAgIG1fcGFnZUl0ZW0tPnNldENvbnRl
bnRzU2NhbGUoaXRlbVNjYWxlRnJvbUNTUyhuZXdTY2FsZSkpOwotfQotCi1xcmVhbCBRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmU6OmN1cnJlbnRDU1NTY2FsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNzc1NjYWxlRnJvbUl0ZW0obV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpKTsKLX0KLQot
Ym9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlld3BvcnRJdGVtLT5pc0ZsaWNraW5nKCk7Ci19Ci0K
LWJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQWN0aXZlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRHJhZ2dpbmcoKTsKLX0KLQotdm9p
ZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQ
b2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCi17Ci0gICAgLy8g
VGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgot
ICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0KLSAgICBtX3ZpZXdwb3J0SXRlbS0+
aGFuZGxlRmxpY2thYmxlTW91c2VQcmVzcyhwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
OwotICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247
Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlUmVxdWVz
dFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWls
bGlzKQotewotICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZU1vdmUocG9z
aXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICBtX2xhc3RQaW5jaENlbnRlckluVmll
d3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9uOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50
NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCi17Ci0gICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRsZUZs
aWNrYWJsZU1vdXNlUmVsZWFzZShwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAg
IG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247Ci19Ci0K
LXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkK
LXsKLSAgICAvLyBSZXNldCB0aGUgdmVsb2NpdHkgc2FtcGxlcyBvZiB0aGUgZmxpY2thYmxlLgot
ICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSByZWNvZ25pemVyIGlmIHdl
IGhhdmUgYSByZWNvZ25pemVkCi0gICAgLy8gcGFuIGdlc3R1cmUgYW5kIHJlY2VpdmUgYSB0b3Vj
aCBldmVudCB3aXRoIG11bHRpcGxlIHRvdWNoIHBvaW50cwotICAgIC8vIChpZS4gdHJhbnNpdGlv
biB0byBhIHBpbmNoIGdlc3R1cmUpIGFzIGl0IGRvZXMgbm90IG1vdmUgdGhlIGNvbnRlbnQKLSAg
ICAvLyBiYWNrIGluc2lkZSB2YWxpZCBib3VuZHMuCi0gICAgLy8gV2hlbiB0aGUgcGluY2ggZ2Vz
dHVyZSBlbmRzLCB0aGUgY29udGVudCBpcyBwb3NpdGlvbmVkIGFuZCBzY2FsZWQKLSAgICAvLyBi
YWNrIHRvIHZhbGlkIGJvdW5kYXJpZXMuCi0gICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNr
KCk7Ci19Ci0KLWJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlv
bkFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2NhbGVBbmltYXRpb24tPnN0YXRlKCkg
PT0gUUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6Y2FuY2VsU2Nyb2xsQW5pbWF0aW9uKCkKLXsKLSAgICBpZiAoIXNjcm9s
bEFuaW1hdGlvbkFjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgcGFu
IGdlc3R1cmUgcmVjb2duaXplciByZWNlaXZlcyBhIHRvdWNoIGJlZ2luIGV2ZW50Ci0gICAgLy8g
ZHVyaW5nIGFuIG9uZ29pbmcga2luZXRpYyBzY3JvbGwgYW5pbWF0aW9uIG9mIGEgcHJldmlvdXMK
LSAgICAvLyBwYW4gZ2VzdHVyZSwgdGhlIGFuaW1hdGlvbiBpcyBzdG9wcGVkIGFuZCB0aGUgY29u
dGVudCBpcwotICAgIC8vIGltbWVkaWF0ZWx5IHBvc2l0aW9uZWQgYmFjayB0byB2YWxpZCBib3Vu
ZGFyaWVzLgotCi0gICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7Ci0gICAgVmlld3Bv
cnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKLSAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxl
KG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OmludGVycnVwdFNjYWxlQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBUaGlzIGludGVycnVw
dHMgdGhlIHNjYWxlIGFuaW1hdGlvbiBleGFjdGx5IHdoZXJlIGl0IGlzLCBldmVuIGlmIGl0IGlz
IG91dCBvZiBib3VuZHMuCi0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c3RvcCgpOwotfQotCi1ib29s
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlQWN0aXZlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9waW5jaFN0YXJ0U2NhbGUgPiAwOwotfQotCi12b2lkIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBw
aW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcykKLXsKLSAgICAvLyBUaGlzIGNhbiBvbmx5
IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCi0gICAgQVNTRVJUKG1f
aGFkVXNlckludGVyYWN0aW9uKTsKLQotICAgIGlmICghbV9hbGxvd3NVc2VyU2NhbGluZykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9zY2FsZVN0YWNrLmNsZWFyKCk7Ci0gICAgbV96b29tT3V0
U2NhbGUgPSAwLjA7Ci0KLSAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZl
clVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci0KLSAgICBtX2xhc3RQaW5jaENlbnRlckluVmll
d3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwotICAg
IG1fcGluY2hTdGFydFNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOwotfQotCi12
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0
ZShjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwg
dG90YWxTY2FsZUZhY3RvcikKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kQ291bnQpOwotCi0gICAg
aWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyAgQ2hh
bmdlcyBvZiB0aGUgY2VudGVyIHBvc2l0aW9uIHNob3VsZCBtb3ZlIHRoZSBwYWdlIGV2ZW4gaWYg
dGhlIHpvb20gZmFjdG9yCi0gICAgLy8gIGRvZXMgbm90IGNoYW5nZS4KLSAgICBjb25zdCBxcmVh
bCBjc3NTY2FsZSA9IGNzc1NjYWxlRnJvbUl0ZW0obV9waW5jaFN0YXJ0U2NhbGUgKiB0b3RhbFNj
YWxlRmFjdG9yKTsKLQotICAgIC8vIEFsbG93IHpvb21pbmcgb3V0IGJleW9uZCBtaW1pbXVtIHNj
YWxlIG9uIHBhZ2VzIHRoYXQgZG8gbm90IGV4cGxpY2l0bHkgZGlzYWxsb3cgaXQuCi0gICAgY29u
c3QgcXJlYWwgdGFyZ2V0Q1NTU2NhbGUgPSBvdXRlckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7
Ci0KLSAgICBzY2FsZUNvbnRlbnQobV92aWV3cG9ydEl0ZW0tPm1hcFRvV2ViQ29udGVudChwaW5j
aENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyksIHRhcmdldENTU1NjYWxlKTsKLQotICAgIGNv
bnN0IFFQb2ludEYgcG9zaXRpb25EaWZmID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0
ZXMgLSBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKLSAgICBtX2xhc3RQ
aW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENv
b3JkaW5hdGVzOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92aWV3cG9y
dEl0ZW0tPmNvbnRlbnRQb3MoKSAtIHBvc2l0aW9uRGlmZik7Ci19Ci0KLXZvaWQgUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVFbmRlZCgpCi17Ci0gICAgQVNTRVJUKG1f
c3VzcGVuZENvdW50KTsKLQotICAgIGlmICghbV9hbGxvd3NVc2VyU2NhbGluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9waW5jaFN0YXJ0U2NhbGUgPSAtMTsKLQotICAgIGFuaW1hdGVQYWdl
SXRlbVJlY3RWaXNpYmxlKG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKLSAgICBtX3NjYWxlVXBkYXRl
RGVmZXJyZXIuY2xlYXIoKTsgLy8gQ2xlYXIgYWZ0ZXIgc3RhcnRpbmcgcG90ZW50aWFsIGFuaW1h
dGlvbiwgd2hpY2ggdGFrZXMgb3ZlciBkZWZlcnJpbmcuCi19Ci0KLXZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQotewotICAgIG1fcGluY2hT
dGFydFNjYWxlID0gLTE7Ci0gICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci19Ci0K
LVFSZWN0IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6dmlzaWJsZUNvbnRlbnRzUmVjdCgp
IGNvbnN0Ci17Ci0gICAgY29uc3QgUVJlY3RGIHZpc2libGVSZWN0KG1fdmlld3BvcnRJdGVtLT5i
b3VuZGluZ1JlY3QoKS5pbnRlcnNlY3RlZChtX3BhZ2VJdGVtLT5ib3VuZGluZ1JlY3QoKSkpOwot
Ci0gICAgLy8gV2UgYXZvaWQgdXNpbmcgdG9BbGlnbmVkUmVjdCgpIGJlY2F1c2UgaXQgcHJvZHVj
ZXMgaW5jb25zaXN0ZW50IHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgUVJlY3RGIG1hcHBlZFJlY3Qo
bV92aWV3cG9ydEl0ZW0tPm1hcFJlY3RUb1dlYkNvbnRlbnQodmlzaWJsZVJlY3QpKTsKLSAgICBy
ZXR1cm4gUVJlY3QoZmxvb3IobWFwcGVkUmVjdC54KCkpLCBmbG9vcihtYXBwZWRSZWN0LnkoKSks
IGZsb29yKG1hcHBlZFJlY3Qud2lkdGgoKSksIGZsb29yKG1hcHBlZFJlY3QuaGVpZ2h0KCkpKTsK
LX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmluZm9ybVZpc2libGVDb250
ZW50Q2hhbmdlKGNvbnN0IFFQb2ludEYmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsK
LSAgICBpZiAoIWRyYXdpbmdBcmVhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9sYXN0
VmlzaWJsZUNvbnRlbnRzUmVjdCA9PSB2aXNpYmxlQ29udGVudHNSZWN0KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHFyZWFsIHNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOwot
Ci0gICAgaWYgKHNjYWxlICE9IG1fbGFzdENvbW1pdHRlZFNjYWxlKQotICAgICAgICBlbWl0IG1f
dmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT5jb250ZW50c1NjYWxlQ29tbWl0
dGVkKCk7Ci0gICAgbV9sYXN0Q29tbWl0dGVkU2NhbGUgPSBzY2FsZTsKLSAgICBtX2xhc3RWaXNp
YmxlQ29udGVudHNSZWN0ID0gdmlzaWJsZUNvbnRlbnRzUmVjdCgpOwotCi0gICAgZHJhd2luZ0Fy
ZWEtPnNldFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVjdCgpLCBzY2FsZSwg
dHJhamVjdG9yeVZlY3RvciwgbV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSk7Ci0KLSAgICAv
LyBFbnN1cmUgdGhhdCB1cGRhdGVQYWludE5vZGUgaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgcGFp
bnRpbmcuCi0gICAgbV9wYWdlSXRlbS0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjp2aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpCi17Ci0gICAgUVNpemUg
dmlld3BvcnRTaXplID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1Np
emUoKTsKLQotICAgIGlmICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZywgYWRkIFFNTCBhcGkhCi0gICAgV2ViUHJl
ZmVyZW5jZXMqIHdrUHJlZnMgPSBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCk7Ci0gICAgd2tQcmVmcy0+c2V0RGV2aWNlV2lkdGgodmlld3BvcnRTaXplLndpZHRoKCkp
OwotICAgIHdrUHJlZnMtPnNldERldmljZUhlaWdodCh2aWV3cG9ydFNpemUuaGVpZ2h0KCkpOwot
Ci0gICAgLy8gTGV0IHRoZSBXZWJQcm9jZXNzIGtub3cgYWJvdXQgdGhlIG5ldyB2aWV3cG9ydCBz
aXplLCBzbyB0aGF0Ci0gICAgLy8gaXQgY2FuIHJlc2l6ZSB0aGUgY29udGVudCBhY2NvcmRpbmds
eS4KLSAgICBtX3dlYlBhZ2VQcm94eS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSk7Ci0K
LSAgICBpbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShRUG9pbnRGKCkpOwotfQotCi12b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNl
bnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKQotewotICAgIFFQb2ludEYgb2xk
UGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50
KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOwotICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2Nh
bGUoaXRlbVNjYWxlRnJvbUNTUyhjc3NTY2FsZSkpOwotICAgIFFQb2ludEYgbmV3UGluY2hDZW50
ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNlbnRlcklu
Q1NTQ29vcmRpbmF0ZXMpOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92
aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSArIChuZXdQaW5jaENlbnRlck9uVmlld3BvcnQgLSBv
bGRQaW5jaENlbnRlck9uVmlld3BvcnQpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNpbmNsdWRlICJtb2NfUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCIKLQotCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZS5oCShyZXZpc2lvbiAxMTkzODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QmVuamFtaW4gUG91bGFpbiA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lX2gKLSNkZWZpbmUgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lX2gKLQotI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgotI2luY2x1ZGUgPFF0Q29yZS9RUmVj
dEY+Ci0jaW5jbHVkZSA8UXRDb3JlL1FWYXJpYW50PgotI2luY2x1ZGUgPFF0Q29yZS9RVmFyaWFu
dEFuaW1hdGlvbj4KLSNpbmNsdWRlIDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+Ci0jaW5j
bHVkZSA8d3RmL093blB0ci5oPgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQb2ludEY7
Ci1jbGFzcyBRUXVpY2tXZWJQYWdlOwotY2xhc3MgUVF1aWNrV2ViVmlldzsKLWNsYXNzIFFXaGVl
bEV2ZW50OwotUVRfRU5EX05BTUVTUEFDRQotCi1jbGFzcyBRV2ViS2l0VGVzdDsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFZpZXdwb3J0VXBkYXRl
RGVmZXJyZXI7Ci0KLWNsYXNzIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSA6IHB1YmxpYyBR
T2JqZWN0IHsKLSAgICBRX09CSkVDVAotCi1wdWJsaWM6Ci0gICAgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKFdlYlBhZ2VQcm94eSosIFFRdWlja1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKik7
Ci0gICAgflF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgpOwotCi0gICAgdm9pZCB0b3VjaEJl
Z2luKCk7Ci0gICAgdm9pZCB0b3VjaEVuZCgpOwotCi0gICAgYm9vbCBzY3JvbGxBbmltYXRpb25B
Y3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIGNhbmNlbFNjcm9sbEFuaW1hdGlvbigpOwotCi0gICAg
Ym9vbCBwYW5HZXN0dXJlQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBwYW5HZXN0dXJlU3RhcnRl
ZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsK
LSAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9u
LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIHZvaWQgcGFuR2VzdHVyZUVuZGVk
KGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwot
ICAgIHZvaWQgcGFuR2VzdHVyZUNhbmNlbGxlZCgpOwotCi0gICAgYm9vbCBzY2FsZUFuaW1hdGlv
bkFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgaW50ZXJydXB0U2NhbGVBbmltYXRpb24oKTsKLQot
ICAgIGJvb2wgcGluY2hHZXN0dXJlQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBwaW5jaEdlc3R1
cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVz
KTsKLSAgICB2b2lkIHBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMsIHFyZWFsIHRvdGFsU2NhbGVGYWN0b3IpOwot
ICAgIHZvaWQgcGluY2hHZXN0dXJlRW5kZWQoKTsKLSAgICB2b2lkIHBpbmNoR2VzdHVyZUNhbmNl
bGxlZCgpOwotCi0gICAgdm9pZCB6b29tVG9BcmVhR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYm
IHRvdWNoUG9pbnQsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSk7Ci0gICAgdm9pZCBmb2N1c0Vk
aXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNhcmV0QXJlYSwgY29uc3QgUVJlY3RGJiB0YXJnZXRB
cmVhKTsKLQotICAgIHZvaWQgcGFnZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9p
bnQmIHBvc2l0aW9uKTsKLQotICAgIHZvaWQgdmlld3BvcnRJdGVtU2l6ZUNoYW5nZWQoKTsKLSAg
ICB2b2lkIHZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRB
dHRyaWJ1dGVzJik7Ci0gICAgdm9pZCBpbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShjb25zdCBR
UG9pbnRGJiB0cmFqZWN0b3J5ID0gUVBvaW50RigpKTsKLSAgICB2b2lkIHBhZ2VDb250ZW50c1Np
emVDaGFuZ2VkKGNvbnN0IFFTaXplJiBuZXdTaXplLCBjb25zdCBRU2l6ZSYgdmlld3BvcnRTaXpl
KTsKLQotcHJpdmF0ZSBRX1NMT1RTOgotICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBvZiBwb3Np
dGlvbiB0aGF0IGFyZSBub3QgZHJpdmVuIGJ5IHVzLgotICAgIHZvaWQgcGFnZUl0ZW1Qb3NpdGlv
bkNoYW5nZWQoKTsKLQotICAgIHZvaWQgc2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3Ry
YWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSk7Ci0gICAgdm9p
ZCBzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZChRVmFyaWFudCB2YWx1ZSk7Ci0KLSAgICB2b2lk
IGZsaWNrTW92ZVN0YXJ0ZWQoKTsgLy8gQ2FsbGVkIHdoZW4gcGFubmluZyBzdGFydHMuCi0gICAg
dm9pZCBmbGlja01vdmVFbmRlZCgpOyAvLyAgIENhbGxlZCB3aGVuIHBhbm5pbmcgKCsga2luZXRp
YyBhbmltYXRpb24pIGVuZHMuCi0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFZpZXdwb3J0
VXBkYXRlRGVmZXJyZXI7Ci0gICAgZnJpZW5kIGNsYXNzIDo6UVdlYktpdFRlc3Q7Ci0KLSAgICBX
ZWJQYWdlUHJveHkqIGNvbnN0IG1fd2ViUGFnZVByb3h5OwotICAgIFFRdWlja1dlYlZpZXcqIGNv
bnN0IG1fdmlld3BvcnRJdGVtOwotICAgIFFRdWlja1dlYlBhZ2UqIGNvbnN0IG1fcGFnZUl0ZW07
Ci0KLSAgICBxcmVhbCBjc3NTY2FsZUZyb21JdGVtKHFyZWFsKSBjb25zdDsKLSAgICBxcmVhbCBp
dGVtU2NhbGVGcm9tQ1NTKHFyZWFsKSBjb25zdDsKLSAgICBxcmVhbCBpdGVtQ29vcmRGcm9tQ1NT
KHFyZWFsKSBjb25zdDsKLSAgICBRUmVjdEYgaXRlbVJlY3RGcm9tQ1NTKGNvbnN0IFFSZWN0RiYp
IGNvbnN0OwotCi0gICAgcXJlYWwgaW5uZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwpIGNvbnN0Owot
ICAgIHFyZWFsIG91dGVyQm91bmRlZENTU1NjYWxlKHFyZWFsKSBjb25zdDsKLQotICAgIHZvaWQg
c2V0Q1NTU2NhbGUocXJlYWwpOwotICAgIHFyZWFsIGN1cnJlbnRDU1NTY2FsZSgpIGNvbnN0Owot
Ci0gICAgdm9pZCBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYpOwotICAgIHZv
aWQgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJik7Ci0KLSAgICBRUmVj
dCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Ci0gICAgUVJlY3RGIG5lYXJlc3RWYWxpZEJv
dW5kcygpIGNvbnN0OwotCi0gICAgUVJlY3RGIGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRT
Y2FsZShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0OwotICAgIHZvaWQgc2NhbGVDb250ZW50KGNvbnN0
IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKTsKLQotICAg
IHZvaWQgc3VzcGVuZFBhZ2VDb250ZW50KCk7Ci0gICAgdm9pZCByZXN1bWVQYWdlQ29udGVudCgp
OwotCi0gICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIG1fcmF3QXR0cmlidXRlczsKLQot
ICAgIGJvb2wgbV9hbGxvd3NVc2VyU2NhbGluZzsKLSAgICBxcmVhbCBtX21pbmltdW1TY2FsZTsK
LSAgICBxcmVhbCBtX21heGltdW1TY2FsZTsKLSAgICBxcmVhbCBtX2RldmljZVBpeGVsUmF0aW87
Ci0KLSAgICBRU2l6ZSBtX2xheW91dFNpemU7Ci0KLSAgICBpbnQgbV9zdXNwZW5kQ291bnQ7Ci0g
ICAgYm9vbCBtX2hhc1N1c3BlbmRlZENvbnRlbnQ7Ci0KLSAgICBPd25QdHI8Vmlld3BvcnRVcGRh
dGVEZWZlcnJlcj4gbV9zY2FsZVVwZGF0ZURlZmVycmVyOwotICAgIE93blB0cjxWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyPiBtX3Njcm9sbFVwZGF0ZURlZmVycmVyOwotICAgIE93blB0cjxWaWV3cG9y
dFVwZGF0ZURlZmVycmVyPiBtX3RvdWNoVXBkYXRlRGVmZXJyZXI7Ci0gICAgT3duUHRyPFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXI+IG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXI7Ci0KLSAgICBib29s
IG1faGFkVXNlckludGVyYWN0aW9uOwotCi0gICAgY2xhc3MgU2NhbGVBbmltYXRpb24gOiBwdWJs
aWMgUVZhcmlhbnRBbmltYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NhbGVBbmltYXRp
b24oUU9iamVjdCogcGFyZW50ID0gMCkKLSAgICAgICAgICAgIDogUVZhcmlhbnRBbmltYXRpb24o
cGFyZW50KQotICAgICAgICB7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ3VycmVu
dFZhbHVlKGNvbnN0IFFWYXJpYW50JikgeyB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTY2FsZVN0
YWNrSXRlbSB7Ci0gICAgICAgIFNjYWxlU3RhY2tJdGVtKHFyZWFsIHNjYWxlLCBxcmVhbCB4UG9z
aXRpb24pCi0gICAgICAgICAgICA6IHNjYWxlKHNjYWxlKQotICAgICAgICAgICAgLCB4UG9zaXRp
b24oeFBvc2l0aW9uKQotICAgICAgICB7IH0KLQotICAgICAgICBxcmVhbCBzY2FsZTsKLSAgICAg
ICAgcXJlYWwgeFBvc2l0aW9uOwotICAgIH07Ci0KLSAgICBTY2FsZUFuaW1hdGlvbiogbV9zY2Fs
ZUFuaW1hdGlvbjsKLSAgICBRUG9pbnRGIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzOwotICAgIFFQb2ludEYgbV9sYXN0U2Nyb2xsUG9zaXRpb247Ci0gICAgcXJlYWwgbV9w
aW5jaFN0YXJ0U2NhbGU7Ci0gICAgcXJlYWwgbV9sYXN0Q29tbWl0dGVkU2NhbGU7Ci0gICAgUVJl
Y3RGIG1fbGFzdFZpc2libGVDb250ZW50c1JlY3Q7Ci0gICAgcXJlYWwgbV96b29tT3V0U2NhbGU7
Ci0gICAgUUxpc3Q8U2NhbGVTdGFja0l0ZW0+IG1fc2NhbGVTdGFjazsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lX2gK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VF
dmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAxMTkzODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQs
NyArMjQsNyBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRl
ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5o
IgotI2luY2x1ZGUgIlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oIgorI2luY2x1ZGUgIlF0
Vmlld3BvcnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAi
cXF1aWNrd2VicGFnZV9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCkBAIC04OSw3
ICs4OSw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViQ29yZTo6RHJhZ09wZXJhdGlvbiBkcm8KIAogUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyOjpRdFdlYlBhZ2VFdmVudEhhbmRsZXIoV0tQYWdlUmVmIHBhZ2VS
ZWYsIFFRdWlja1dlYlBhZ2UqIHFtbFdlYlBhZ2UsIFFRdWlja1dlYlZpZXcqIHFtbFdlYlZpZXcp
CiAgICAgOiBtX3dlYlBhZ2VQcm94eSh0b0ltcGwocGFnZVJlZikpCi0gICAgLCBtX2ludGVyYWN0
aW9uRW5naW5lKDApCisgICAgLCBtX3ZpZXdwb3J0SGFuZGxlcigwKQogICAgICwgbV9wYW5HZXN0
dXJlUmVjb2duaXplcih0aGlzKQogICAgICwgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyKHRoaXMp
CiAgICAgLCBtX3RhcEdlc3R1cmVSZWNvZ25pemVyKHRoaXMpCkBAIC0yOTcsOSArMjk3LDkgQEAg
dm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUZvY3VzTwogICAgIG1fd2ViUGFnZVBy
b3h5LT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3SXNGb2N1c2VkIHwgV2Vi
UGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwogfQogCi12b2lkIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6c2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUqIGVuZ2luZSkKK3ZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpzZXRWaWV3cG9y
dEhhbmRsZXIoUXRWaWV3cG9ydEhhbmRsZXIqIGhhbmRsZXIpCiB7Ci0gICAgbV9pbnRlcmFjdGlv
bkVuZ2luZSA9IGVuZ2luZTsKKyAgICBtX3ZpZXdwb3J0SGFuZGxlciA9IGhhbmRsZXI7CiB9CiAK
IHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVJbnB1dE1ldGhvZEV2ZW50KFFJbnB1
dE1ldGhvZEV2ZW50KiBldikKQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgdm9pZCBzZXRJbnB1
dFBhbmVsVmlzaWJsZShib29sIHZpCiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjppbnB1
dFBhbmVsVmlzaWJsZUNoYW5nZWQoKQogewotICAgIGlmICghbV9pbnRlcmFjdGlvbkVuZ2luZSkK
KyAgICBpZiAoIW1fdmlld3BvcnRIYW5kbGVyKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBX
ZSBvbmx5IHJlc3BvbmQgdG8gdGhlIGlucHV0IHBhbmVsIGJlY29taW5nIHZpc2libGUuCkBAIC00
MDcsNyArNDA3LDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmlucHV0UGFuZWxWaQog
CiAgICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvciA9IG1fd2ViUGFnZVByb3h5LT5lZGl0b3JT
dGF0ZSgpOwogICAgIGlmIChlZGl0b3IuaXNDb250ZW50RWRpdGFibGUpCi0gICAgICAgIG1faW50
ZXJhY3Rpb25FbmdpbmUtPmZvY3VzRWRpdGFibGVBcmVhKFFSZWN0RihlZGl0b3IuY3Vyc29yUmVj
dCksIFFSZWN0RihlZGl0b3IuZWRpdG9yUmVjdCkpOworICAgICAgICBtX3ZpZXdwb3J0SGFuZGxl
ci0+Zm9jdXNFZGl0YWJsZUFyZWEoUVJlY3RGKGVkaXRvci5jdXJzb3JSZWN0KSwgUVJlY3RGKGVk
aXRvci5lZGl0b3JSZWN0KSk7CiB9CiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjp1cGRh
dGVUZXh0SW5wdXRTdGF0ZSgpCkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVu
dEhhbmRsZXI6OmRvbmVXaXRoR2VzdAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiB2b2lkIFF0
V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRv
dWNoRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKIHsKLSAgICBpZiAoIW1faW50
ZXJhY3Rpb25FbmdpbmUpCisgICAgaWYgKCFtX3ZpZXdwb3J0SGFuZGxlcikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKHdhc0V2ZW50SGFuZGxlZCB8fCBldmVudC50eXBlKCkgPT0gV2ViRXZl
bnQ6OlRvdWNoQ2FuY2VsKSB7CkBAIC00NTgsOSArNDU4LDkgQEAgdm9pZCBRdFdlYlBhZ2VFdmVu
dEhhbmRsZXI6OmRvbmVXaXRoVG91YwogCiAgICAgc3dpdGNoIChldi0+dHlwZSgpKSB7CiAgICAg
Y2FzZSBRRXZlbnQ6OlRvdWNoQmVnaW46Ci0gICAgICAgIEFTU0VSVCghbV9pbnRlcmFjdGlvbkVu
Z2luZS0+cGFuR2VzdHVyZUFjdGl2ZSgpKTsKLSAgICAgICAgQVNTRVJUKCFtX2ludGVyYWN0aW9u
RW5naW5lLT5waW5jaEdlc3R1cmVBY3RpdmUoKSk7Ci0gICAgICAgIG1faW50ZXJhY3Rpb25Fbmdp
bmUtPnRvdWNoQmVnaW4oKTsKKyAgICAgICAgQVNTRVJUKCFtX3ZpZXdwb3J0SGFuZGxlci0+cGFu
R2VzdHVyZUFjdGl2ZSgpKTsKKyAgICAgICAgQVNTRVJUKCFtX3ZpZXdwb3J0SGFuZGxlci0+cGlu
Y2hHZXN0dXJlQWN0aXZlKCkpOworICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+dG91Y2hCZWdp
bigpOwogCiAgICAgICAgIC8vIFRoZSBpbnRlcmFjdGlvbiBlbmdpbmUgbWlnaHQgc3RpbGwgYmUg
YW5pbWF0aW5nIGtpbmV0aWMgc2Nyb2xsaW5nIG9yIGEgc2NhbGUgYW5pbWF0aW9uCiAgICAgICAg
IC8vIHN1Y2ggYXMgZG91YmxlLXRhcCB0byB6b29tIG9yIHRoZSBib3VuY2UgYmFjayBlZmZlY3Qu
IEEgdG91Y2ggc3RvcHMgdGhlIGtpbmV0aWMgc2Nyb2xsaW5nCkBAIC00NjksMTEgKzQ2OSwxMSBA
QCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZG9uZVdpdGhUb3VjCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKICAgICAgICAgLy8gVGhlIHNjYWxlIGFu
aW1hdGlvbiBjYW4gb25seSBiZSBpbnRlcnJ1cHRlZCBieSBhIHBpbmNoIGdlc3R1cmUsIHdoaWNo
IHdpbGwgdGhlbiB0YWtlIG92ZXIuCi0gICAgICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lLT5z
Y2FsZUFuaW1hdGlvbkFjdGl2ZSgpICYmIG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5pc1JlY29n
bml6ZWQoKSkKLSAgICAgICAgICAgIG1faW50ZXJhY3Rpb25FbmdpbmUtPmludGVycnVwdFNjYWxl
QW5pbWF0aW9uKCk7CisgICAgICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxlci0+c2NhbGVBbmltYXRp
b25BY3RpdmUoKSAmJiBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuaXNSZWNvZ25pemVkKCkpCisg
ICAgICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+aW50ZXJydXB0U2NhbGVBbmltYXRpb24oKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBRRXZlbnQ6OlRvdWNoRW5kOgotICAgICAgICBtX2lu
dGVyYWN0aW9uRW5naW5lLT50b3VjaEVuZCgpOworICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+
dG91Y2hFbmQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CkBAIC00ODEsNyArNDgxLDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRo
VG91YwogCiAgICAgLy8gSWYgdGhlIHNjYWxlIGFuaW1hdGlvbiBpcyBhY3RpdmUgd2UgZG9uJ3Qg
cGFzcyB0aGUgZXZlbnQgdG8gdGhlIHJlY29nbml6ZXJzLiBJbiB0aGUgZnV0dXJlCiAgICAgLy8g
d2Ugd291bGQgd2FudCB0byBxdWV1ZSB0aGUgZXZlbnQgaGVyZSBhbmQgcmVwb3N0IHRoZW4gd2hl
biB0aGUgYW5pbWF0aW9uIGVuZHMuCi0gICAgaWYgKG1faW50ZXJhY3Rpb25FbmdpbmUtPnNjYWxl
QW5pbWF0aW9uQWN0aXZlKCkpCisgICAgaWYgKG1fdmlld3BvcnRIYW5kbGVyLT5zY2FsZUFuaW1h
dGlvbkFjdGl2ZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBRTGlzdDxRVG91Y2hF
dmVudDo6VG91Y2hQb2ludD4mIHRvdWNoUG9pbnRzID0gZXYtPnRvdWNoUG9pbnRzKCk7CkBAIC01
MzMsMTIgKzUzMywxMiBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZG9uZVdpdGhUb3Vj
CiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0
IEludFBvaW50JiB0YXJnZXQsIGNvbnN0IEludFJlY3QmIGFyZWEpCiB7Ci0gICAgaWYgKCFtX2lu
dGVyYWN0aW9uRW5naW5lKQorICAgIGlmICghbV92aWV3cG9ydEhhbmRsZXIpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEZJWE1FOiBBcyB0aGUgZmluZCBtZXRob2QgbWlnaHQgbm90IHJlc3Bv
bmQgaW1tZWRpYXRlbHkgZHVyaW5nIGxvYWQgZXRjLAogICAgIC8vIHdlIHNob3VsZCBpZ25vcmUg
YWxsIGJ1dCB0aGUgbGF0ZXN0IHJlcXVlc3QuCi0gICAgbV9pbnRlcmFjdGlvbkVuZ2luZS0+em9v
bVRvQXJlYUdlc3R1cmVFbmRlZChRUG9pbnRGKHRhcmdldCksIFFSZWN0RihhcmVhKSk7CisgICAg
bV92aWV3cG9ydEhhbmRsZXItPnpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoUVBvaW50Rih0YXJnZXQp
LCBRUmVjdEYoYXJlYSkpOwogfQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6c3RhcnRE
cmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiBkcmFnRGF0YSwgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGRyYWdJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDExOTM4OSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBJbnRSZWN0OwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIE5hdGl2ZVdlYlRvdWNoRXZlbnQ7Ci1jbGFzcyBRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmU7CitjbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKIGNsYXNzIFNoYXJlYWJsZUJp
dG1hcDsKIGNsYXNzIFdlYkdlc3R1cmVFdmVudDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTc1
LDcgKzc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgaGFuZGxlSW5wdXRNZXRob2RFdmVudChRSW5w
dXRNZXRob2RFdmVudCopOwogICAgIHZvaWQgaGFuZGxlVG91Y2hFdmVudChRVG91Y2hFdmVudCop
OwogCi0gICAgdm9pZCBzZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZSopOworICAgIHZvaWQgc2V0Vmlld3BvcnRIYW5kbGVyKFF0Vmlld3BvcnRI
YW5kbGVyKik7CiAKICAgICB2b2lkIGFjdGl2YXRlVGFwSGlnaGxpZ2h0KGNvbnN0IFFUb3VjaEV2
ZW50OjpUb3VjaFBvaW50Jik7CiAgICAgdm9pZCBkZWFjdGl2YXRlVGFwSGlnaGxpZ2h0KCk7CkBA
IC05MCwxMyArOTAsMTMgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCByZXNldEdlc3R1cmVS
ZWNvZ25pemVycygpOwogCi0gICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBpbnRlcmFj
dGlvbkVuZ2luZSgpIHsgcmV0dXJuIG1faW50ZXJhY3Rpb25FbmdpbmU7IH0KKyAgICBRdFZpZXdw
b3J0SGFuZGxlciogdmlld3BvcnRIYW5kbGVyKCkgeyByZXR1cm4gbV92aWV3cG9ydEhhbmRsZXI7
IH0KIAogICAgIHZvaWQgc3RhcnREcmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSk7CiAKIHByb3RlY3RlZDoKICAgICBXZWJQ
YWdlUHJveHkqIG1fd2ViUGFnZVByb3h5OwotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZSogbV9pbnRlcmFjdGlvbkVuZ2luZTsKKyAgICBRdFZpZXdwb3J0SGFuZGxlciogbV92aWV3cG9y
dEhhbmRsZXI7CiAgICAgUXRQYW5HZXN0dXJlUmVjb2duaXplciBtX3Bhbkdlc3R1cmVSZWNvZ25p
emVyOwogICAgIFF0UGluY2hHZXN0dXJlUmVjb2duaXplciBtX3BpbmNoR2VzdHVyZVJlY29nbml6
ZXI7CiAgICAgUXRUYXBHZXN0dXJlUmVjb2duaXplciBtX3RhcEdlc3R1cmVSZWNvZ25pemVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145580</attachid>
            <date>2012-06-04 07:18:50 -0700</date>
            <delta_ts>2012-06-04 08:31:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88226-20120604161848.patch</filename>
            <type>text/plain</type>
            <size>115590</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDExOTM5MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMiBAQAorMjAxMi0wNi0wNCAgWmFsYW4g
QnVqdGFzICA8emJ1anRhc0BnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIFJlbmFtZSBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUgdG8gUXRWaWV3cG9ydEhhbmRsZXIuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODIyNgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmg6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHA6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6flFRdWlja1dlYlZpZXdGbGlj
a2FibGVQcml2YXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpv
bkNvbXBvbmVudENvbXBsZXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2
YXRlOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMpOgorICAgICAgICAoUVF1aWNrV2ViVmll
d0ZsaWNrYWJsZVByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSk6CisgICAgICAgIChRUXVpY2tX
ZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6cGFnZURpZFJlcXVlc3RTY3JvbGwpOgorICAgICAgICAo
UVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjp2aWV3cG9y
dEhhbmRsZXIpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnZpZXdw
b3J0SGFuZGxlcik6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHA6CisgICAgICAgIChRV2Vi
S2l0VGVzdDo6Y29udGVudHNTY2FsZSk6CisgICAgICAgIChRV2ViS2l0VGVzdDo6ZGV2aWNlUGl4
ZWxSYXRpbyk6CisgICAgICAgIChRV2ViS2l0VGVzdDo6aW5pdGlhbFNjYWxlKToKKyAgICAgICAg
KFFXZWJLaXRUZXN0OjptaW5pbXVtU2NhbGUpOgorICAgICAgICAoUVdlYktpdFRlc3Q6Om1heGlt
dW1TY2FsZSk6CisgICAgICAgIChRV2ViS2l0VGVzdDo6aXNTY2FsYWJsZSk6CisgICAgICAgIChR
V2ViS2l0VGVzdDo6bGF5b3V0U2l6ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0R2VzdHVy
ZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdEdlc3R1cmVSZWNvZ25pemVyOjp2
aWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25p
emVyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdl
c3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVjb2du
aXplcjo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6
ZmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6Y2FuY2Vs
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OmZpbmlzaCk6CisgICAgICAg
IChXZWJLaXQ6OlF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6Y2FuY2VsKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcC4KKyAgICAg
ICAgKFdlYktpdDo6Vmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6Vmlld3BvcnRVcGRhdGVEZWZlcnJl
cik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6On5WaWV3cG9ydFVw
ZGF0ZURlZmVycmVyKToKKyAgICAgICAgKFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIpOgorICAgICAg
ICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6c3VzcGVuZFBhZ2VDb250ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnJlc3VtZVBhZ2VDb250ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OmNzc1NjYWxlRnJvbUl0ZW0pOgorICAgICAg
ICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6aXRlbVNjYWxlRnJvbUNTUyk6CisgICAgICAg
IChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjppdGVtQ29vcmRGcm9tQ1NTKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6Oml0ZW1SZWN0RnJvbUNTUyk6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpRdFZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjp+UXRWaWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAo
V2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6aW5uZXJCb3VuZGVkQ1NTU2NhbGUpOgorICAgICAg
ICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6b3V0ZXJCb3VuZGVkQ1NTU2NhbGUpOgorICAg
ICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6dmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpwYWdlQ29udGVudHNTaXpl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpzZXRQYWdlSXRl
bVJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OmFuaW1h
dGVQYWdlSXRlbVJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRs
ZXI6OmZsaWNrTW92ZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxl
cjo6ZmxpY2tNb3ZlRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6
cGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFu
ZGxlcjo6cGFnZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0
Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjp0b3VjaEJlZ2luKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnRvdWNoRW5kKToKKyAgICAgICAgKFdlYktpdDo6
UXRWaWV3cG9ydEhhbmRsZXI6OmNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpmb2N1c0VkaXRhYmxlQXJlYSk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjp6b29tVG9BcmVhR2VzdHVyZUVuZGVk
KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6Om5lYXJlc3RWYWxpZEJvdW5k
cyk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpzZXRDU1NTY2FsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpjdXJyZW50Q1NTU2NhbGUpOgorICAg
ICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKToK
KyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVBY3RpdmUpOgor
ICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZVN0YXJ0ZWQpOgor
ICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZVJlcXVlc3RVcGRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZUVuZGVk
KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVDYW5jZWxs
ZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6c2NhbGVBbmltYXRpb25B
Y3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6Y2FuY2VsU2Nyb2xs
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OmludGVycnVw
dFNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6OnBp
bmNoR2VzdHVyZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOjpw
aW5jaEdlc3R1cmVTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI6
OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0
SGFuZGxlcjo6cGluY2hHZXN0dXJlRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0
SGFuZGxlcjo6cGluY2hHZXN0dXJlQ2FuY2VsbGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3
cG9ydEhhbmRsZXI6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpRdFZp
ZXdwb3J0SGFuZGxlcjo6aW5mb3JtVmlzaWJsZUNvbnRlbnRDaGFuZ2UpOgorICAgICAgICAoV2Vi
S2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6dmlld3BvcnRJdGVtU2l6ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjo6c2NhbGVDb250ZW50KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oLgorICAgICAgICAo
UXRWaWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdl
RXZlbnRIYW5kbGVyOjpRdFdlYlBhZ2VFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpR
dFdlYlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgIChXZWJL
aXQ6OlF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aW5wdXRQYW5lbFZpc2libGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYktpdDo6UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0aFRvdWNoRXZlbnQp
OgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRpZEZpbmRab29tYWJs
ZUFyZWEpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXIpOgorICAg
ICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnZpZXdwb3J0SGFuZGxlcik6CisK
IDIwMTItMDYtMDQgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5j
b20+CiAKICAgICAgICAgW1F0XSBUYXAtdG8tem9vbSBvdmVyc2hvb3QgYW5pbWF0aW9uLgpJbmRl
eDogU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCShyZXZpc2lvbiAxMTkzOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgSEVBREVSUyArPSBcCiAgICAg
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZVBvbGljeUNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlU0dOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VVSUNsaWVudC5o
IFwKLSAgICBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmggXAorICAg
IFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRX
ZWJVbmRvQ29udHJvbGxlci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VD
bGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oIFwKQEAg
LTYyNCw3ICs2MjQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdl
U0dOb2RlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVVJQ2xpZW50LmNwcCBcCiAg
ICAgVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwIFwKLSAgICBVSVByb2Nlc3MvcXQvUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L1F0Vmlld3Bv
cnRIYW5kbGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5j
cHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0UXQuY3BwIFwKICAgICBVSVByb2Nlc3Mv
cXQvV2ViR2VvbG9jYXRpb25Qcm92aWRlclF0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCShyZXZpc2lvbiAx
MTkzOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2Vf
cF9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmU7CitjbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKIGNsYXNzIFF0V2ViUGFnZUV2ZW50SGFuZGxl
cjsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXcuY3BwCShyZXZpc2lvbiAxMTkzOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKICNpbmNsdWRlICJRdERp
YWxvZ1J1bm5lci5oIgogI2luY2x1ZGUgIlF0RG93bmxvYWRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAi
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCisjaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRs
ZXIuaCIKICNpbmNsdWRlICJRdFdlYkNvbnRleHQuaCIKICNpbmNsdWRlICJRdFdlYkVycm9yLmgi
CiAjaW5jbHVkZSAiUXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKQEAgLTgyMSw3ICs4MjEsNyBA
QCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6UVF1aWNrV2ViCiAKIFFRdWlja1dlYlZp
ZXdGbGlja2FibGVQcml2YXRlOjp+UVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGUoKQogewot
ICAgIGludGVyYWN0aW9uRW5naW5lLT5kaXNjb25uZWN0KCk7CisgICAgbV92aWV3cG9ydEhhbmRs
ZXItPmRpc2Nvbm5lY3QoKTsKIH0KIAogdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0
ZTo6aW5pdGlhbGl6ZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmKQpAQCAtODM0LDggKzgzNCw4IEBAIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGU6Om9uQ28KIHsKICAgICBRX1EoUVF1aWNrV2ViVmlldyk7CiAKLSAgICBpbnRlcmFj
dGlvbkVuZ2luZS5yZXNldChuZXcgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKHdlYlBhZ2VQ
cm94eS5nZXQoKSwgcSwgcGFnZVZpZXcuZGF0YSgpKSk7Ci0gICAgcGFnZVZpZXctPmV2ZW50SGFu
ZGxlcigpLT5zZXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKGludGVyYWN0aW9uRW5naW5lLmRh
dGEoKSk7CisgICAgbV92aWV3cG9ydEhhbmRsZXIucmVzZXQobmV3IFF0Vmlld3BvcnRIYW5kbGVy
KHdlYlBhZ2VQcm94eS5nZXQoKSwgcSwgcGFnZVZpZXcuZGF0YSgpKSk7CisgICAgcGFnZVZpZXct
PmV2ZW50SGFuZGxlcigpLT5zZXRWaWV3cG9ydEhhbmRsZXIobV92aWV3cG9ydEhhbmRsZXIuZGF0
YSgpKTsKIAogICAgIC8vIFRyaWdnZXIgc2V0dGluZyBvZiBjb3JyZWN0IHZpc2liaWxpdHkgZmxh
Z3MgYWZ0ZXIgZXZlcnl0aGluZyB3YXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4KICAgICBf
cV9vblZpc2libGVDaGFuZ2VkKCk7CkBAIC04NDMsMjAgKzg0MywyMCBAQCB2b2lkIFFRdWlja1dl
YlZpZXdGbGlja2FibGVQcml2YXRlOjpvbkNvCiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGU6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWaWV3
cG9ydEF0dHJpYnV0ZXMmIG5ld0F0dHJpYnV0ZXMpCiB7Ci0gICAgaWYgKGludGVyYWN0aW9uRW5n
aW5lKQotICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZS0+dmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdl
ZChuZXdBdHRyaWJ1dGVzKTsKKyAgICBpZiAobV92aWV3cG9ydEhhbmRsZXIpCisgICAgICAgIG1f
dmlld3BvcnRIYW5kbGVyLT52aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKG5ld0F0dHJpYnV0ZXMp
OwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9y
dFNpemUoKQogewotICAgIC8vIEZJWE1FOiBFeGFtaW5lIHdoeSB0aGVyZSBpcyBub3QgYW4gaW50
ZXJhY3Rpb25FbmdpbmUgaGVyZSBpbiB0aGUgYmVnaW5uaW5nLgotICAgIGlmIChpbnRlcmFjdGlv
bkVuZ2luZSkKLSAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUtPnZpZXdwb3J0SXRlbVNpemVDaGFu
Z2VkKCk7CisgICAgLy8gRklYTUU6IEV4YW1pbmUgd2h5IHRoZXJlIGlzIG5vdCBhbiB2aWV3cG9y
dEhhbmRsZXIgaGVyZSBpbiB0aGUgYmVnaW5uaW5nLgorICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxl
cikKKyAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPnZpZXdwb3J0SXRlbVNpemVDaGFuZ2VkKCk7
CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnBhZ2VEaWRSZXF1ZXN0
U2Nyb2xsKGNvbnN0IFFQb2ludCYgcG9zKQogewotICAgIGludGVyYWN0aW9uRW5naW5lLT5wYWdl
Q29udGVudFBvc2l0aW9uUmVxdWVzdGVkKHBvcyk7CisgICAgbV92aWV3cG9ydEhhbmRsZXItPnBh
Z2VDb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQocG9zKTsKIH0KIAogdm9pZCBRUXVpY2tXZWJWaWV3
RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFFTaXplJiBuZXdT
aXplKQpAQCAtODY0LDcgKzg2NCw3IEBAIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZh
dGU6OmRpZEMKICAgICBRX1EoUVF1aWNrV2ViVmlldyk7CiAKICAgICBwYWdlVmlldy0+c2V0Q29u
dGVudHNTaXplKG5ld1NpemUpOyAvLyBlbWl0cyBjb250ZW50c1NpemVDaGFuZ2VkKCkKLSAgICBp
bnRlcmFjdGlvbkVuZ2luZS0+cGFnZUNvbnRlbnRzU2l6ZUNoYW5nZWQobmV3U2l6ZSwgcS0+Ym91
bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpKTsKKyAgICBtX3ZpZXdwb3J0SGFuZGxlci0+cGFn
ZUNvbnRlbnRzU2l6ZUNoYW5nZWQobmV3U2l6ZSwgcS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRv
U2l6ZSgpKTsKIH0KIAogLyohCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXdfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgJKHJldmlzaW9uIDExOTM5MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgUGxhdGZvcm1XZWJWaWV3OwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGNsYXNzIFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YTsKLWNsYXNzIFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZTsKK2NsYXNzIFF0Vmlld3BvcnRIYW5kbGVyOwogY2xhc3Mg
UXRXZWJQYWdlTG9hZENsaWVudDsKIGNsYXNzIFF0V2ViUGFnZVBvbGljeUNsaWVudDsKIGNsYXNz
IFF0V2ViUGFnZVVJQ2xpZW50OwpAQCAtMjE0LDcgKzIxNCw3IEBAIHByaXZhdGU6CiAgICAgUVF1
aWNrV2ViVmlld0V4cGVyaW1lbnRhbCogbV9leHBlcmltZW50YWw7CiAKICAgICBmcmllbmQgY2xh
c3MgUVdlYktpdFRlc3Q7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOworICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVy
OwogICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0V2ViUGFnZUxvYWRDbGllbnQ7CiAgICAgZnJp
ZW5kIGNsYXNzIFdlYktpdDo6UXRXZWJQYWdlUG9saWN5Q2xpZW50OwogICAgIGZyaWVuZCBjbGFz
cyBXZWJLaXQ6OlF0V2ViUGFnZVVJQ2xpZW50OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAkocmV2aXNpb24gMTE5Mzky
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xh
c3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBRdERpYWxv
Z1J1bm5lcjsKLWNsYXNzIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTsKK2NsYXNzIFF0Vmll
d3BvcnRIYW5kbGVyOwogY2xhc3MgUXRXZWJDb250ZXh0OwogY2xhc3MgUXRXZWJFcnJvcjsKIGNs
YXNzIFF0V2ViUGFnZUxvYWRDbGllbnQ7CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICBp
bnQgbG9hZFByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkUHJvZ3Jlc3M7IH0KICAgICB2
b2lkIHNldE5lZWRzRGlzcGxheSgpOwogCi0gICAgdmlydHVhbCBXZWJLaXQ6OlF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZSogdmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgpIHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0SGFuZGxl
cigpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCkg
eyB9CiAgICAgdm9pZCB1cGRhdGVUb3VjaFZpZXdwb3J0U2l6ZSgpOwogCkBAIC0yMjIsMTQgKzIy
MiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uQ29tcG9uZW50Q29tcGxldGUoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2Vi
Q29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OlF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSogdmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgpIHsgcmV0dXJu
IGludGVyYWN0aW9uRW5naW5lLmRhdGEoKTsgfQorICAgIHZpcnR1YWwgV2ViS2l0OjpRdFZpZXdw
b3J0SGFuZGxlciogdmlld3BvcnRIYW5kbGVyKCkgeyByZXR1cm4gbV92aWV3cG9ydEhhbmRsZXIu
ZGF0YSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwogCiAgICAg
dmlydHVhbCB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IFFQb2ludCYgcG9zKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFFTaXplJiBuZXdTaXpl
KTsKIAogcHJpdmF0ZToKLSAgICBRU2NvcGVkUG9pbnRlcjxXZWJLaXQ6OlF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZT4gaW50ZXJhY3Rpb25FbmdpbmU7CisgICAgUVNjb3BlZFBvaW50ZXI8V2Vi
S2l0OjpRdFZpZXdwb3J0SGFuZGxlcj4gbV92aWV3cG9ydEhhbmRsZXI7CiB9OwogCiAjZW5kaWYg
Ly8gcXF1aWNrd2Vidmlld19wX3BfaApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xd2Via2l0dGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHAJKHJldmlzaW9uIDExOTM5MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmtpdHRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicXdlYmtpdHRl
c3RfcC5oIgogCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCisjaW5j
bHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3BfcC5o
IgogI2luY2x1ZGUgInF3aW5kb3dzeXN0ZW1pbnRlcmZhY2VfcXBhLmgiCiAjaW5jbHVkZSA8UU11
dGFibGVMaXN0SXRlcmF0b3I+CkBAIC0xMjAsNDkgKzEyMCw0OSBAQCBRU2l6ZSBRV2ViS2l0VGVz
dDo6Y29udGVudHNTaXplKCkgY29uc3QKIAogUVZhcmlhbnQgUVdlYktpdFRlc3Q6OmNvbnRlbnRz
U2NhbGUoKSBjb25zdAogewotICAgIGlmIChRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIHZp
ZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgpKQor
ICAgIGlmIChRdFZpZXdwb3J0SGFuZGxlciogdmlld3BvcnQgPSBtX3dlYlZpZXdQcml2YXRlLT52
aWV3cG9ydEhhbmRsZXIoKSkKICAgICAgICAgcmV0dXJuIHZpZXdwb3J0LT5jdXJyZW50Q1NTU2Nh
bGUoKTsKICAgICByZXR1cm4gMS4wOwogfQogCiBRVmFyaWFudCBRV2ViS2l0VGVzdDo6ZGV2aWNl
UGl4ZWxSYXRpbygpIGNvbnN0CiB7Ci0gICAgaWYgKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZSogdmlld3BvcnQgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3cG9ydEludGVyYWN0aW9uRW5naW5l
KCkpCisgICAgaWYgKFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZh
dGUtPnZpZXdwb3J0SGFuZGxlcigpKQogICAgICAgICByZXR1cm4gdmlld3BvcnQtPm1fZGV2aWNl
UGl4ZWxSYXRpbzsKICAgICByZXR1cm4gMS4wOwogfQogCiBRVmFyaWFudCBRV2ViS2l0VGVzdDo6
aW5pdGlhbFNjYWxlKCkgY29uc3QKIHsKLSAgICBpZiAoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lKiB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmUoKSkKKyAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJp
dmF0ZS0+dmlld3BvcnRIYW5kbGVyKCkpCiAgICAgICAgIHJldHVybiB2aWV3cG9ydC0+bV9yYXdB
dHRyaWJ1dGVzLmluaXRpYWxTY2FsZTsKICAgICByZXR1cm4gMS4wOwogfQogCiBRVmFyaWFudCBR
V2ViS2l0VGVzdDo6bWluaW11bVNjYWxlKCkgY29uc3QKIHsKLSAgICBpZiAoUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKiB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUoKSkKKyAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0ID0g
bV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyKCkpCiAgICAgICAgIHJldHVybiB2aWV3
cG9ydC0+bV9taW5pbXVtU2NhbGU7CiAgICAgcmV0dXJuIDEuMDsKIH0KIAogUVZhcmlhbnQgUVdl
YktpdFRlc3Q6Om1heGltdW1TY2FsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZSogdmlld3BvcnQgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3cG9ydEludGVy
YWN0aW9uRW5naW5lKCkpCisgICAgaWYgKFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydCA9IG1f
d2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlcigpKQogICAgICAgICByZXR1cm4gdmlld3Bv
cnQtPm1fbWF4aW11bVNjYWxlOwogICAgIHJldHVybiAxLjA7CiB9CiAKIFFWYXJpYW50IFFXZWJL
aXRUZXN0Ojppc1NjYWxhYmxlKCkgY29uc3QKIHsKLSAgICBpZiAoUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKiB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUoKSkKKyAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0ID0gbV93ZWJW
aWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyKCkpCiAgICAgICAgIHJldHVybiAhIXZpZXdwb3J0
LT5tX3Jhd0F0dHJpYnV0ZXMudXNlclNjYWxhYmxlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
UVZhcmlhbnQgUVdlYktpdFRlc3Q6OmxheW91dFNpemUoKSBjb25zdAogewotICAgIGlmIChRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgpKQorICAgIGlmIChRdFZpZXdwb3J0SGFuZGxlciogdmll
d3BvcnQgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3cG9ydEhhbmRsZXIoKSkKICAgICAgICAgcmV0
dXJuIFFTaXplRih2aWV3cG9ydC0+bV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemUpOwogICAgIHJl
dHVybiBRU2l6ZUYoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdl
c3R1cmVSZWNvZ25pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAJKHJldmlzaW9uIDExOTM5MikKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsOSArNDEsOSBAQCB2b2lkIFF0R2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0KCkK
ICAgICBtX3N0YXRlID0gTm9HZXN0dXJlOwogfQogCi1RdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmUqIFF0R2VzdHVyZVJlY29nbml6ZXI6OmludGVyYWN0aW9uRW5naW5lKCkKK1F0Vmlld3BvcnRI
YW5kbGVyKiBRdEdlc3R1cmVSZWNvZ25pemVyOjp2aWV3cG9ydEhhbmRsZXIoKQogewotICAgIHJl
dHVybiBtX2V2ZW50SGFuZGxlci0+aW50ZXJhY3Rpb25FbmdpbmUoKTsKKyAgICByZXR1cm4gbV9l
dmVudEhhbmRsZXItPnZpZXdwb3J0SGFuZGxlcigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJl
Y29nbml6ZXIuaAkocmV2aXNpb24gMTE5MzkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBA
QAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOworY2xhc3MgUXRWaWV3cG9ydEhhbmRsZXI7CiBjbGFzcyBRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI7CiAKIGNsYXNzIFF0R2VzdHVyZVJlY29nbml6ZXIgewpAQCAtNDYsNyArNDYsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIEdlc3R1cmVSZWNvZ25pemVkCiAgICAgfSBtX3N0YXRlOwogCi0gICAg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBpbnRlcmFjdGlvbkVuZ2luZSgpOworICAgIFF0
Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRsZXIoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJl
Y29nbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAkocmV2aXNpb24gMTE5MzkyKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRQ
YW5HZXN0dXJlUmVjb2duaXplci5oIgogCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lLmgiCisjaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdl
YlBhZ2VFdmVudEhhbmRsZXIuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0zOCw3ICszOCw3
IEBAIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OlF0UGFuR2VzdHVyZVJlY28KIAogYm9vbCBRdFBh
bkdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGUoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQm
IHRvdWNoUG9pbnQsIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKIHsKLSAgICBpZiAoIWlu
dGVyYWN0aW9uRW5naW5lKCkpCisgICAgaWYgKCF2aWV3cG9ydEhhbmRsZXIoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgbV9sYXN0UG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOwpA
QCAtNDgsNyArNDgsNyBAQCBib29sIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZShjb25z
CiAgICAgY2FzZSBOb0dlc3R1cmU6CiAgICAgICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVjb2duaXRp
b25TdGFydGVkOwogICAgICAgICBtX2ZpcnN0U2NyZWVuUG9zaXRpb24gPSB0b3VjaFBvaW50LnNj
ZW5lUG9zKCk7Ci0gICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPmNhbmNlbFNjcm9sbEFuaW1h
dGlvbigpOworICAgICAgICB2aWV3cG9ydEhhbmRsZXIoKS0+Y2FuY2VsU2Nyb2xsQW5pbWF0aW9u
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pdGlvblN0
YXJ0ZWQ6IHsKICAgICAgICAgLy8gVG8gc3RhcnQgdGhlIGdlc3R1cmUsIHRoZSBkZWx0YSBmcm9t
IHN0YXJ0IGluIHNjcmVlbiBjb29yZGluYXRlcwpAQCAtNTgsMTEgKzU4LDExIEBAIGJvb2wgUXRQ
YW5HZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlKGNvbnMKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml6ZWQ7Ci0gICAgICAgIGludGVy
YWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVTdGFydGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50
VGltZXN0YW1wTWlsbGlzKTsKKyAgICAgICAgdmlld3BvcnRIYW5kbGVyKCktPnBhbkdlc3R1cmVT
dGFydGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZWQ6Ci0gICAgICAg
IGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKHRvdWNoUG9pbnQu
cG9zKCksIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICAgICAgdmlld3BvcnRIYW5kbGVyKCkt
PnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGltZXN0YW1w
TWlsbGlzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgUXRQYW5HZXN0dXJlUmVj
b2duaXplcjo6ZmluaXNoKGNvbnMKICAgICBpZiAobV9zdGF0ZSA9PSBOb0dlc3R1cmUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEFTU0VSVChpbnRlcmFjdGlvbkVuZ2luZSgpKTsKLSAgICBpbnRl
cmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlRW5kZWQodG91Y2hQb2ludC5wb3MoKSwgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOworICAgIEFTU0VSVCh2aWV3cG9ydEhhbmRsZXIoKSk7CisgICAgdmll
d3BvcnRIYW5kbGVyKCktPnBhbkdlc3R1cmVFbmRlZCh0b3VjaFBvaW50LnBvcygpLCBldmVudFRp
bWVzdGFtcE1pbGxpcyk7CiAgICAgcmVzZXQoKTsKIH0KIApAQCAtODUsOCArODUsOCBAQCB2b2lk
IFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OmNhbmNlbCgpCiAgICAgaWYgKG1fc3RhdGUgPT0gTm9H
ZXN0dXJlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5H
ZXN0dXJlRW5kZWQobV9sYXN0UG9zaXRpb24sIG1fbGFzdEV2ZW50VGltZXN0YW1wTWlsbGlzKTsK
LSAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlQ2FuY2VsbGVkKCk7CisgICAgdmll
d3BvcnRIYW5kbGVyKCktPnBhbkdlc3R1cmVFbmRlZChtX2xhc3RQb3NpdGlvbiwgbV9sYXN0RXZl
bnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZpZXdwb3J0SGFuZGxlcigpLT5wYW5HZXN0dXJlQ2Fu
Y2VsbGVkKCk7CiAgICAgcmVzZXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAJKHJldmlz
aW9uIDExOTM5MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVy
ZVJlY29nbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmgiCiAKLSNp
bmNsdWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKKyNpbmNsdWRlICJRdFZpZXdw
b3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgogI2luY2x1
ZGUgPFF0Q29yZS9RTGluZUY+CiAKQEAgLTQ3LDcgKzQ3LDcgQEAgUXRQaW5jaEdlc3R1cmVSZWNv
Z25pemVyOjpRdFBpbmNoR2VzdHVyZQogCiBib29sIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6
dXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludDEsIGNvbnN0IFFUb3Vj
aEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludDIpCiB7Ci0gICAgQVNTRVJUKGludGVyYWN0aW9uRW5n
aW5lKCkpOworICAgIEFTU0VSVCh2aWV3cG9ydEhhbmRsZXIoKSk7CiAgICAgY29uc3QgcXJlYWwg
Y3VycmVudEZpbmdlckRpc3RhbmNlID0gUUxpbmVGKHBvaW50MS5zY3JlZW5Qb3MoKSwgcG9pbnQy
LnNjcmVlblBvcygpKS5sZW5ndGgoKTsKICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKICAgICBjYXNl
IE5vR2VzdHVyZToKQEAgLTU5LDcgKzU5LDcgQEAgYm9vbCBRdFBpbmNoR2VzdHVyZVJlY29nbml6
ZXI6OnVwZGF0ZShjbwogICAgICAgICBpZiAocGluY2hEaXN0YW5jZSA8IHBpbmNoSW5pdGlhbFRy
aWdnZXJEaXN0YW5jZVRocmVzaG9sZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgbV9zdGF0ZSA9IEdlc3R1cmVSZWNvZ25pemVkOwotICAgICAgICBpbnRlcmFjdGlvbkVuZ2lu
ZSgpLT5waW5jaEdlc3R1cmVTdGFydGVkKGNvbXB1dGVQaW5jaENlbnRlcihwb2ludDEsIHBvaW50
MikpOworICAgICAgICB2aWV3cG9ydEhhbmRsZXIoKS0+cGluY2hHZXN0dXJlU3RhcnRlZChjb21w
dXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIpKTsKIAogICAgICAgICAvLyBXZSByZXNldCB0
aGUgaW5pdGlhbCBzcGFuIGRpc3RhbmNlIHRvIHRoZSBjdXJyZW50IGRpc3RhbmNlIG9mIHRoZQog
ICAgICAgICAvLyB0b3VjaCBwb2ludHMgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIGp1bXAgY2F1c2Vk
IGJ5IHRoZSBldmVudHMgd2hpY2gKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBRdFBpbmNoR2VzdHVy
ZVJlY29nbml6ZXI6OnVwZGF0ZShjbwogICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZWQ6CiAgICAg
ICAgIGNvbnN0IHFyZWFsIHRvdGFsU2NhbGVGYWN0b3IgPSBjdXJyZW50RmluZ2VyRGlzdGFuY2Ug
LyBtX2luaXRpYWxGaW5nZXJEaXN0YW5jZTsKICAgICAgICAgY29uc3QgUVBvaW50RiB0b3VjaENl
bnRlckluVmlld0Nvb3JkaW5hdGVzID0gY29tcHV0ZVBpbmNoQ2VudGVyKHBvaW50MSwgcG9pbnQy
KTsKLSAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0
ZSh0b3VjaENlbnRlckluVmlld0Nvb3JkaW5hdGVzLCB0b3RhbFNjYWxlRmFjdG9yKTsKKyAgICAg
ICAgdmlld3BvcnRIYW5kbGVyKCktPnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUodG91Y2hDZW50
ZXJJblZpZXdDb29yZGluYXRlcywgdG90YWxTY2FsZUZhY3Rvcik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC04NSw4ICs4NSw4IEBAIHZvaWQgUXRQaW5j
aEdlc3R1cmVSZWNvZ25pemVyOjpmaW5pc2goKQogICAgIGlmIChtX3N0YXRlID09IE5vR2VzdHVy
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGludGVyYWN0aW9uRW5naW5lKCkpOwot
ICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBpbmNoR2VzdHVyZUVuZGVkKCk7CisgICAgQVNTRVJU
KHZpZXdwb3J0SGFuZGxlcigpKTsKKyAgICB2aWV3cG9ydEhhbmRsZXIoKS0+cGluY2hHZXN0dXJl
RW5kZWQoKTsKICAgICByZXNldCgpOwogfQogCkBAIC05NSw4ICs5NSw4IEBAIHZvaWQgUXRQaW5j
aEdlc3R1cmVSZWNvZ25pemVyOjpjYW5jZWwoKQogICAgIGlmIChtX3N0YXRlID09IE5vR2VzdHVy
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGludGVyYWN0aW9uRW5naW5lKCkpOwot
ICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpOworICAgIEFT
U0VSVCh2aWV3cG9ydEhhbmRsZXIoKSk7CisgICAgdmlld3BvcnRIYW5kbGVyKCktPnBpbmNoR2Vz
dHVyZUNhbmNlbGxlZCgpOwogICAgIHJlc2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTE5
MzkyKQkoZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lLmNwcDoxMTkzOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRW
aWV3cG9ydEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxhaW4gPGJlbmph
bWluQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCisKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2lu
Y2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgor
I2luY2x1ZGUgInF3ZWJraXR0ZXN0X3AuaCIKKyNpbmNsdWRlIDxRUG9pbnRGPgorI2luY2x1ZGUg
PFFUcmFuc2Zvcm0+CisjaW5jbHVkZSA8UVdoZWVsRXZlbnQ+CisjaW5jbHVkZSA8UXRRdWljay9x
cXVpY2tpdGVtLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3N0YXRpYyBjb25zdCBpbnQga1NjYWxlQW5pbWF0aW9uRHVyYXRpb25NaWxsaXMg
PSAyNTA7CisKKy8vIFVQREFURSBERUZFUlJJTkcgKFNVU1BFTkQvUkVTVU1FKQorLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLworLy8gV2hlbiBpbnRlcmFjdGlvbiB3aXRo
IHRoZSBjb250ZW50LCBlaXRoZXIgYnkgYW5pbWF0aW5nIG9yIGJ5IHRoZSBoYW5kIG9mIHRoZSB1
c2VyLAorLy8gaXQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBzbW9vdGggYW5pbWF0aW9ucyBvZiBh
dCBsZWFzdCA2MGZwcyBpbiBvcmRlciB0byBnaXZlIGEKKy8vIGdvb2QgdXNlciBleHBlcmllbmNl
LgorLy8KKy8vIEluIG9yZGVyIHRvIGRvIHRoaXMgd2UgbmVlZCB0byBnZXQgcmlkIG9mIHVua25v
d24gZmFjdG9ycy4gVGhlc2UgaW5jbHVkZSBkZXZpY2UKKy8vIHNlbnNvcnMgKGdlb2xvY2F0aW9u
LCBvcmllbnRhdGlvbiB1cGRhdGVzIGV0YyksIENTUzMgYW5pbWF0aW9ucywgSmF2YVNjcmlwdAor
Ly8gZXhlY3R1dGlvbiwgc3ViIHJlc291cmNlIGxvYWRzIGV0Yy4gV2UgZG8gdGhpcyBieSBlbWl0
dGluZyBzdXNwZW5kIGFuZCByZXN1bWUKKy8vIHNpZ25hbHMsIHdoaWNoIGFyZSB0aGVuIGhhbmRs
ZWQgYnkgdGhlIHZpZXdwb3J0IGFuZCBwcm9wYWdhdGVzIHRvIHRoZSByaWdodCBwbGFjZS4KKy8v
CisvLyBGb3IgdGhpcyByZWFzb24gdGhlIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQgbXVz
dCBiZSB1c2VkIHdoZW4gd2UgaW50ZXJhY3QKKy8vIG9yIGFuaW1hdGUgdGhlIGNvbnRlbnQuCisv
LworLy8gSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgd2hlbiB3ZSB1cGRhdGUgY29udGVudCBwcm9w
ZXJ0aWVzLCB3ZSBtaWdodCByZWNlaXZlIG5vdGlmeQorLy8gc2lnbmFscyBzZW5kIG15IHRoZSBj
b250ZW50IGl0ZW0gaXRzZWxmLCBhbmQgY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gbm90IGFjdCBv
bgorLy8gdGhlc2UgdW5jb25kaXRpb25hbGx5LiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgdGhlIHBp
bmNoIHpvb20sIHdoaWNoIGNoYW5nZXMgdGhlCisvLyBwb3NpdGlvbiBhbmQgd2lsbCB0aHVzIHJl
c3VsdCBpbiBhIFFRdWlja1dlYlBhZ2U6Omdlb21ldHJ5Q2hhbmdlZCgpIHNpZ25hbCBnZXR0aW5n
CisvLyBlbWl0dGVkLgorLy8KKy8vIElmIHNvbWV0aGluZyBzaG91bGQgb25seSBiZSBleGVjdXRl
ZCBkdXJpbmcgdXBkYXRlIGRlZmVycmluZywgaXQgaXMgcG9zc2libGUgdG8KKy8vIGNoZWNrIGZv
ciB0aGF0IHVzaW5nIEFTU0VSVChtX3N1c3BlbmRDb3VudCkuCisKK2NsYXNzIFZpZXdwb3J0VXBk
YXRlRGVmZXJyZXIgeworcHVibGljOgorICAgIGVudW0gU3VzcGVuZENvbnRlbnRGbGFnIHsgRGVm
ZXJVcGRhdGUsIERlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQgfTsKKyAgICBWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyKFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogZW5naW5lLCBTdXNwZW5k
Q29udGVudEZsYWcgc3VzcGVuZENvbnRlbnRGbGFnID0gRGVmZXJVcGRhdGUpCisgICAgICAgIDog
ZW5naW5lKGVuZ2luZSkKKyAgICB7CisgICAgICAgIGVuZ2luZS0+bV9zdXNwZW5kQ291bnQrKzsK
KworICAgICAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHN1c3BlbmQgY29udGVudCBmb3IgaW1t
ZWRpYXRlIHVwZGF0ZXMKKyAgICAgICAgLy8gb25seSBkdXJpbmcgYW5pbWF0aW9ucyBvciBsb25n
ZXIgZ2VzdHVyZXMuCisgICAgICAgIGlmIChzdXNwZW5kQ29udGVudEZsYWcgPT0gRGVmZXJVcGRh
dGVBbmRTdXNwZW5kQ29udGVudCkKKyAgICAgICAgICAgIGVuZ2luZS0+c3VzcGVuZFBhZ2VDb250
ZW50KCk7CisgICAgfQorCisgICAgflZpZXdwb3J0VXBkYXRlRGVmZXJyZXIoKQorICAgIHsKKyAg
ICAgICAgaWYgKC0tKGVuZ2luZS0+bV9zdXNwZW5kQ291bnQpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGVuZ2luZS0+cmVzdW1lUGFnZUNvbnRlbnQoKTsKKworICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCB3aWxsIGJlIHJlcXVl
c3RlZC4KKyAgICAgICAgZW5naW5lLT5pbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShRUG9pbnRG
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUq
IGNvbnN0IGVuZ2luZTsKK307CisKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpz
dXNwZW5kUGFnZUNvbnRlbnQoKQoreworICAgIGlmIChtX2hhc1N1c3BlbmRlZENvbnRlbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faGFzU3VzcGVuZGVkQ29udGVudCA9IHRydWU7CisgICAg
bV93ZWJQYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwor
fQorCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cmVzdW1lUGFnZUNvbnRlbnQo
KQoreworICAgIGlmICghbV9oYXNTdXNwZW5kZWRDb250ZW50KQorICAgICAgICByZXR1cm47Cisg
ICAgbV9oYXNTdXNwZW5kZWRDb250ZW50ID0gZmFsc2U7CisgICAgbV93ZWJQYWdlUHJveHktPnJl
c3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKKy8vIEEgZmxvYXRpbmcg
cG9pbnQgY29tcGFyZSB3aXRoIGFic29sdXRlIGVycm9yLgorc3RhdGljIGlubGluZSBib29sIGZ1
enp5Q29tcGFyZShxcmVhbCBhLCBxcmVhbCBiLCBxcmVhbCBlcHNpbG9uKQoreworICAgIHJldHVy
biBxQWJzKGEgLSBiKSA8IGVwc2lsb247Cit9CisKK2lubGluZSBxcmVhbCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OmNzc1NjYWxlRnJvbUl0ZW0ocXJlYWwgaXRlbVNjYWxlKSBjb25zdAor
eworICAgIHJldHVybiBpdGVtU2NhbGUgLyBtX2RldmljZVBpeGVsUmF0aW87Cit9CisKK2lubGlu
ZSBxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Oml0ZW1TY2FsZUZyb21DU1MocXJl
YWwgY3NzU2NhbGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNzc1NjYWxlICogbV9kZXZpY2VQaXhl
bFJhdGlvOworfQorCitpbmxpbmUgcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpp
dGVtQ29vcmRGcm9tQ1NTKHFyZWFsIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiB2YWx1ZSAq
IG1fZGV2aWNlUGl4ZWxSYXRpbzsKK30KKworc3RhdGljIGlubGluZSBRUG9pbnRGIGJvdW5kUG9z
aXRpb24oY29uc3QgUVBvaW50RiBtaW5Qb3NpdGlvbiwgY29uc3QgUVBvaW50RiYgcG9zaXRpb24s
IGNvbnN0IFFQb2ludEYmIG1heFBvc2l0aW9uKQoreworICAgIHJldHVybiBRUG9pbnRGKHFCb3Vu
ZChtaW5Qb3NpdGlvbi54KCksIHBvc2l0aW9uLngoKSwgbWF4UG9zaXRpb24ueCgpKSwKKyAgICAg
ICAgICAgICAgICAgICBxQm91bmQobWluUG9zaXRpb24ueSgpLCBwb3NpdGlvbi55KCksIG1heFBv
c2l0aW9uLnkoKSkpOworfQorCitpbmxpbmUgUVJlY3RGIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6aXRlbVJlY3RGcm9tQ1NTKGNvbnN0IFFSZWN0RiYgY3NzUmVjdCkgY29uc3QKK3sKKyAg
ICBRUmVjdEYgaXRlbVJlY3Q7CisKKyAgICBpdGVtUmVjdC5zZXRYKGl0ZW1Db29yZEZyb21DU1Mo
Y3NzUmVjdC54KCkpKTsKKyAgICBpdGVtUmVjdC5zZXRZKGl0ZW1Db29yZEZyb21DU1MoY3NzUmVj
dC55KCkpKTsKKyAgICBpdGVtUmVjdC5zZXRXaWR0aChpdGVtQ29vcmRGcm9tQ1NTKGNzc1JlY3Qu
d2lkdGgoKSkpOworICAgIGl0ZW1SZWN0LnNldEhlaWdodChpdGVtQ29vcmRGcm9tQ1NTKGNzc1Jl
Y3QuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBpdGVtUmVjdDsKK30KKworUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkqIHByb3h5LCBRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydEl0ZW0sIFFRdWlja1dlYlBh
Z2UqIHBhZ2VJdGVtKQorICAgIDogbV93ZWJQYWdlUHJveHkocHJveHkpCisgICAgLCBtX3ZpZXdw
b3J0SXRlbSh2aWV3cG9ydEl0ZW0pCisgICAgLCBtX3BhZ2VJdGVtKHBhZ2VJdGVtKQorICAgICwg
bV9hbGxvd3NVc2VyU2NhbGluZyhmYWxzZSkKKyAgICAsIG1fbWluaW11bVNjYWxlKDEpCisgICAg
LCBtX21heGltdW1TY2FsZSgxKQorICAgICwgbV9kZXZpY2VQaXhlbFJhdGlvKDEpCisgICAgLCBt
X3N1c3BlbmRDb3VudCgwKQorICAgICwgbV9oYXNTdXNwZW5kZWRDb250ZW50KGZhbHNlKQorICAg
ICwgbV9oYWRVc2VySW50ZXJhY3Rpb24oZmFsc2UpCisgICAgLCBtX3NjYWxlQW5pbWF0aW9uKG5l
dyBTY2FsZUFuaW1hdGlvbih0aGlzKSkKKyAgICAsIG1fcGluY2hTdGFydFNjYWxlKC0xKQorICAg
ICwgbV9sYXN0Q29tbWl0dGVkU2NhbGUoLTEpCisgICAgLCBtX3pvb21PdXRTY2FsZSgwLjApCit7
CisgICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1vdmVtZW50U3RhcnRlZCgpKSwg
U0xPVChmbGlja01vdmVTdGFydGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29u
bmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1vdmVtZW50RW5kZWQoKSksIFNMT1QoZmxpY2tN
b3ZlRW5kZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKworICAgIGNvbm5lY3QobV9zY2Fs
ZUFuaW1hdGlvbiwgU0lHTkFMKHZhbHVlQ2hhbmdlZChRVmFyaWFudCkpLAorICAgICAgICAgICAg
U0xPVChzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZChRVmFyaWFudCkpLCBRdDo6RGlyZWN0Q29u
bmVjdGlvbik7CisgICAgY29ubmVjdChtX3NjYWxlQW5pbWF0aW9uLCBTSUdOQUwoc3RhdGVDaGFu
Z2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUp
KSwKKyAgICAgICAgICAgIFNMT1Qoc2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0
QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLCBRdDo6RGlyZWN0
Q29ubmVjdGlvbik7Cit9CisKK1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6flF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSgpCit7Cit9CisKK3FyZWFsIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6aW5uZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwgY3NzU2NhbGUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHFCb3VuZChtX21pbmltdW1TY2FsZSwgY3NzU2NhbGUsIG1fbWF4aW11bVNjYWxl
KTsKK30KKworcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpvdXRlckJvdW5kZWRD
U1NTY2FsZShxcmVhbCBjc3NTY2FsZSkgY29uc3QKK3sKKyAgICBpZiAobV9hbGxvd3NVc2VyU2Nh
bGluZykgeworICAgICAgICAvLyBCb3VuZGVkIGJ5IFswLjEsIDEwLjBdIGxpa2UgdGhlIHZpZXdw
b3J0IG1ldGEgY29kZSBpbiBXZWJDb3JlLgorICAgICAgICBxcmVhbCBoYXJkTWluID0gcU1heDxx
cmVhbD4oMC4xLCBxcmVhbCgwLjUpICogbV9taW5pbXVtU2NhbGUpOworICAgICAgICBxcmVhbCBo
YXJkTWF4ID0gcU1pbjxxcmVhbD4oMTAsIHFyZWFsKDIuMCkgKiBtX21heGltdW1TY2FsZSk7Cisg
ICAgICAgIHJldHVybiBxQm91bmQoaGFyZE1pbiwgY3NzU2NhbGUsIGhhcmRNYXgpOworICAgIH0K
KyAgICByZXR1cm4gaW5uZXJCb3VuZGVkQ1NTU2NhbGUoY3NzU2NhbGUpOworfQorCit2b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6dmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZChjb25z
dCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmIG5ld0F0dHJpYnV0ZXMpCit7CisgICAgbV9y
YXdBdHRyaWJ1dGVzID0gbmV3QXR0cmlidXRlczsKKyAgICBXZWJDb3JlOjpyZXN0cmljdFNjYWxl
RmFjdG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2FsYWJsZShtX3Jhd0F0dHJpYnV0ZXMpOwor
CisgICAgeworICAgICAgICAvLyBGSVhNRTogUmVzZXR0aW5nIGhlcmUgaXMgd3JvbmcsIGl0IHNo
b3VsZCBoYXBwZW4gb25seSBmb3IgdGhlIGZpcnN0CisgICAgICAgIC8vIHZpZXdwb3J0IGNoYW5n
ZSBmb3IgYSBnaXZlbiBwYWdlIGFuZCBmaXJzdCB3aGVuIHdlIHBhaW50IHRoZSBwYWdlIGZvcgor
ICAgICAgICAvLyB0aGUgZmlyc3QgdGltZS4KKworICAgICAgICBtX2hhZFVzZXJJbnRlcmFjdGlv
biA9IGZhbHNlOworCisgICAgICAgIG1fem9vbU91dFNjYWxlID0gMC4wOworICAgICAgICBtX3Nj
YWxlU3RhY2suY2xlYXIoKTsKKworICAgICAgICAvLyBUaGlzIHBhcnQgYmVsb3cgc2hvdWxkIGdv
IGZ1bGx5IGF3YXkgd2hlbiB0aGUgYWJvdmUgcGxhbiBpcyBpbXBsZW1lbnRlZC4KKworICAgICAg
ICBtX3ZpZXdwb3J0SXRlbS0+Y2FuY2VsRmxpY2soKTsKKyAgICAgICAgbV9zY2FsZUFuaW1hdGlv
bi0+c3RvcCgpOworCisgICAgICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOworICAg
ICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7CisgICAgICAgIG1fdG91Y2hVcGRh
dGVEZWZlcnJlci5jbGVhcigpOworICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyLmNs
ZWFyKCk7CisgICAgICAgIEFTU0VSVCghbV9zdXNwZW5kQ291bnQpOworICAgICAgICBBU1NFUlQo
IW1faGFzU3VzcGVuZGVkQ29udGVudCk7CisgICAgfQorCisgICAgbV9kZXZpY2VQaXhlbFJhdGlv
ID0gbV9yYXdBdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW87IC8vIFNob3VsZCByZXR1cm4gdmFs
dWUgZnJvbSB0aGUgd2ViUGFnZVByb3h5LgorICAgIG1fYWxsb3dzVXNlclNjYWxpbmcgPSAhIW1f
cmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGU7CisgICAgbV9taW5pbXVtU2NhbGUgPSBtX3Jhd0F0
dHJpYnV0ZXMubWluaW11bVNjYWxlOworICAgIG1fbWF4aW11bVNjYWxlID0gbV9yYXdBdHRyaWJ1
dGVzLm1heGltdW1TY2FsZTsKKworICAgIGlmICghbV9oYWRVc2VySW50ZXJhY3Rpb24gJiYgIW1f
aGFzU3VzcGVuZGVkQ29udGVudCkgeworICAgICAgICBBU1NFUlQobV9waW5jaFN0YXJ0U2NhbGUg
PT0gLTEpOworICAgICAgICAvLyBFbWl0cyBjb250ZW50c1NjYWxlQ2hhbmdlZCgpOworICAgICAg
ICBzZXRDU1NTY2FsZShtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlKTsKKyAgICB9CisKKyAg
ICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT52aWV3cG9ydENo
YW5nZWQoKTsKKworICAgIC8vIElmIHRoZSB3ZWIgYXBwIHN1Y2Nlc3NpdmVseSBjaGFuZ2VzIHRo
ZSB2aWV3cG9ydCBvbiBwdXJwb3NlCisgICAgLy8gaXQgd2FudHMgdG8gYmUgaW4gY29udHJvbCBh
bmQgd2Ugc2hvdWxkIGRpc2FibGUgYW5pbWF0aW9ucy4KKyAgICBWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyIGd1YXJkKHRoaXMpOworICAgIHNldFBhZ2VJdGVtUmVjdFZpc2libGUobmVhcmVzdFZhbGlk
Qm91bmRzKCkpOworfQorCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFnZUNv
bnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1NpemUsIGNvbnN0IFFTaXplJiB2aWV3
cG9ydFNpemUpCit7CisgICAgZmxvYXQgbWluaW11bVNjYWxlID0gV2ViQ29yZTo6Y29tcHV0ZU1p
bmltdW1TY2FsZUZhY3RvckZvckNvbnRlbnRDb250YWluZWQobV9yYXdBdHRyaWJ1dGVzLCB2aWV3
cG9ydFNpemUsIG5ld1NpemUpOworCisgICAgaWYgKCFxRnV6enlDb21wYXJlKG1pbmltdW1TY2Fs
ZSwgbV9yYXdBdHRyaWJ1dGVzLm1pbmltdW1TY2FsZSkpIHsKKyAgICAgICAgbV9taW5pbXVtU2Nh
bGUgPSBtaW5pbXVtU2NhbGU7CisgICAgICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1l
bnRhbCgpLT50ZXN0KCktPnZpZXdwb3J0Q2hhbmdlZCgpOworCisgICAgICAgIGlmICghbV9oYWRV
c2VySW50ZXJhY3Rpb24gJiYgIW1faGFzU3VzcGVuZGVkQ29udGVudCkgeworICAgICAgICAgICAg
Ly8gRW1pdHMgY29udGVudHNTY2FsZUNoYW5nZWQoKTsKKyAgICAgICAgICAgIHNldENTU1NjYWxl
KG1pbmltdW1TY2FsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBFbWl0IGZvciB0ZXN0
aW5nIHB1cnBvc2VzLCBzbyB0aGF0IGl0IGNhbiBiZSB2ZXJpZmllZCB0aGF0CisgICAgLy8gd2Ug
ZGlkbid0IGRvIHNjYWxlIGFkanVzdG1lbnQuCisgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhw
ZXJpbWVudGFsKCktPnRlc3QoKS0+Y29udGVudHNTY2FsZUNvbW1pdHRlZCgpOworCisgICAgVmll
d3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKKyAgICBzZXRQYWdlSXRlbVJlY3RWaXNp
YmxlKG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnNldFBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVjdCkK
K3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc3VzcGVuZENvdW50LAorICAgICAgICAic2V0
UGFnZUl0ZW1SZWN0VmlzaWJsZSBoYXMgdG8gYmUgZ3VhcmRlZCB1c2luZyBhIFZpZXdwb3J0VXBk
YXRlRGVmZXJyZXIuIik7CisKKyAgICBpZiAoaXRlbVJlY3QuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBxcmVhbCBpdGVtU2NhbGUgPSBtX3ZpZXdwb3J0SXRlbS0+d2lkdGgoKSAv
IGl0ZW1SZWN0LndpZHRoKCk7CisKKyAgICBtX3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0
ZW1TY2FsZSk7CisKKyAgICAvLyBUbyBhbmltYXRlIHRoZSBwb3NpdGlvbiB0b2dldGhlciB3aXRo
IHRoZSBzY2FsZSB3ZSBtdWx0aXBseSB0aGUgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCBzY2Fs
ZQorICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIHBhZ2UgcG9zaXRpb24gKGRpc3BsYWNlbWVudCBv
biB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtIGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBpdGVtcyku
CisgICAgUVBvaW50RiBuZXdQb3NpdGlvbihtX3BhZ2VJdGVtLT5wb3MoKSArIChpdGVtUmVjdC50
b3BMZWZ0KCkgKiBpdGVtU2NhbGUpKTsKKworICAgIG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50
UG9zKG5ld1Bvc2l0aW9uKTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OmFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCit7Cisg
ICAgQVNTRVJUKG1fc2NhbGVBbmltYXRpb24tPnN0YXRlKCkgPT0gUUFic3RyYWN0QW5pbWF0aW9u
OjpTdG9wcGVkKTsKKworICAgIEFTU0VSVCghc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpOworICAg
IGlmIChzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVJl
Y3RGIGN1cnJlbnRQYWdlSXRlbVJlY3RWaXNpYmxlID0gbV92aWV3cG9ydEl0ZW0tPm1hcFJlY3RU
b1dlYkNvbnRlbnQobV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsKKyAgICBpZiAoaXRl
bVJlY3QgPT0gY3VycmVudFBhZ2VJdGVtUmVjdFZpc2libGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fc2NhbGVBbmltYXRpb24tPnNldER1cmF0aW9uKGtTY2FsZUFuaW1hdGlvbkR1cmF0aW9u
TWlsbGlzKTsKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFYXNpbmdDdXJ2ZShRRWFzaW5nQ3Vy
dmU6Ok91dEN1YmljKTsKKworICAgIG1fc2NhbGVBbmltYXRpb24tPnNldFN0YXJ0VmFsdWUoY3Vy
cmVudFBhZ2VJdGVtUmVjdFZpc2libGUpOworICAgIG1fc2NhbGVBbmltYXRpb24tPnNldEVuZFZh
bHVlKGl0ZW1SZWN0KTsKKworICAgIG1fc2NhbGVBbmltYXRpb24tPnN0YXJ0KCk7Cit9CisKK3Zv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpmbGlja01vdmVTdGFydGVkKCkKK3sKKyAg
ICBRX0FTU0VSVChtX3ZpZXdwb3J0SXRlbS0+aXNNb3ZpbmcoKSk7CisgICAgbV9zY3JvbGxVcGRh
dGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMsIFZp
ZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKKwor
ICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gbV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKTsK
KyAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCBT
TE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsKKyAgICBjb25uZWN0KG1fdmlld3BvcnRJ
dGVtLCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFu
Z2VkKCkpKTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmZsaWNrTW92
ZUVuZGVkKCkKK3sKKyAgICBRX0FTU0VSVCghbV92aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOwor
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgZW5kIG9mIHRoZSBwYW4gb3IgcGFu
IGtpbmV0aWMgYW5pbWF0aW9uLgorICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsK
KworICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gUVBvaW50RigpOworICAgIGRpc2Nvbm5lY3Qo
bV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIHRoaXMsIFNMT1QocGFn
ZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOworICAgIGRpc2Nvbm5lY3QobV92aWV3cG9ydEl0ZW0s
IFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIHRoaXMsIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNo
YW5nZWQoKSkpOworfQorCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFnZUl0
ZW1Qb3NpdGlvbkNoYW5nZWQoKQoreworICAgIFFQb2ludEYgbmV3UG9zaXRpb24gPSBtX3ZpZXdw
b3J0SXRlbS0+Y29udGVudFBvcygpOworCisgICAgaW5mb3JtVmlzaWJsZUNvbnRlbnRDaGFuZ2Uo
bV9sYXN0U2Nyb2xsUG9zaXRpb24gLSBuZXdQb3NpdGlvbik7CisKKyAgICBtX2xhc3RTY3JvbGxQ
b3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworfQorCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6cGFnZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIGNzc1Bvc2l0
aW9uKQoreworICAgIC8vIElnbm9yZSB0aGUgcmVxdWVzdCBpZiBzdXNwZW5kZWQuIENhbiBvbmx5
IGhhcHBlbiBkdWUgdG8gZGVsYXkgaW4gZXZlbnQgZGVsaXZlcnkuCisgICAgaWYgKG1fc3VzcGVu
ZENvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBxcmVhbCBlbmRJdGVtU2NhbGUgPSBtX3Bh
Z2VJdGVtLT5jb250ZW50c1NjYWxlKCk7IC8vIFN0YXkgYXQgc2FtZSBzY2FsZS4KKworICAgIFFS
ZWN0RiBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShlbmRJ
dGVtU2NhbGUpOworICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBv
c1JhbmdlLnRvcExlZnQoKSwgY3NzUG9zaXRpb24gKiBlbmRJdGVtU2NhbGUsIGVuZFBvc1Jhbmdl
LmJvdHRvbVJpZ2h0KCkpOworCisgICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQ
b3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNp
emUoKSAvIGVuZEl0ZW1TY2FsZSk7CisKKyAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJk
KHRoaXMpOworICAgIHNldFBhZ2VJdGVtUmVjdFZpc2libGUoZW5kVmlzaWJsZUNvbnRlbnRSZWN0
KTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQW5pbWF0aW9u
U3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0cmFj
dEFuaW1hdGlvbjo6U3RhdGUgLypvbGRTdGF0ZSovKQoreworICAgIHN3aXRjaCAobmV3U3RhdGUp
IHsKKyAgICBjYXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzoKKyAgICAgICAgbV92aWV3
cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7CisgICAgICAgIEFTU0VSVCghbV9hbmltYXRpb25VcGRh
dGVEZWZlcnJlcik7CisgICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0
cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVy
OjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVkOgorICAgICAgICBtX2FuaW1hdGlvblVwZGF0
ZURlZmVycmVyLmNsZWFyKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNj
YWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50IHZhbHVlKQoreworICAgIHNldFBhZ2VJ
dGVtUmVjdFZpc2libGUodmFsdWUudG9SZWN0RigpKTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OnRvdWNoQmVnaW4oKQoreworICAgIG1faGFkVXNlckludGVyYWN0aW9u
ID0gdHJ1ZTsKKworICAgIC8vIFByZXZlbnRzIHJlc3VtaW5nIHRoZSBwYWdlIGJldHdlZW4gdGhl
IHVzZXIncyBmbGlja3Mgb2YgdGhlIHBhZ2Ugd2hpbGUgdGhlIGFuaW1hdGlvbiBpcyBydW5uaW5n
LgorICAgIGlmIChzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKKyAgICAgICAgbV90b3VjaFVwZGF0
ZURlZmVycmVyID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmll
d3BvcnRVcGRhdGVEZWZlcnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOworfQor
Cit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6dG91Y2hFbmQoKQoreworICAgIG1f
dG91Y2hVcGRhdGVEZWZlcnJlci5jbGVhcigpOworfQorCitRUmVjdEYgUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjpjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUocXJlYWwgaXRl
bVNjYWxlKSBjb25zdAoreworICAgIGNvbnN0IFFTaXplRiBjb250ZW50SXRlbVNpemUgPSBtX3Bh
Z2VJdGVtLT5jb250ZW50c1NpemUoKSAqIGl0ZW1TY2FsZTsKKyAgICBjb25zdCBRU2l6ZUYgdmll
d3BvcnRJdGVtU2l6ZSA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKS5zaXplKCk7CisK
KyAgICBjb25zdCBxcmVhbCBob3Jpem9udGFsUmFuZ2UgPSBjb250ZW50SXRlbVNpemUud2lkdGgo
KSAtIHZpZXdwb3J0SXRlbVNpemUud2lkdGgoKTsKKyAgICBjb25zdCBxcmVhbCB2ZXJ0aWNhbFJh
bmdlID0gY29udGVudEl0ZW1TaXplLmhlaWdodCgpIC0gdmlld3BvcnRJdGVtU2l6ZS5oZWlnaHQo
KTsKKworICAgIHJldHVybiBRUmVjdEYoUVBvaW50RigwLCAwKSwgUVNpemVGKGhvcml6b250YWxS
YW5nZSwgdmVydGljYWxSYW5nZSkpOworfQorCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6Zm9jdXNFZGl0YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBjYXJldEFyZWEsIGNvbnN0IFFS
ZWN0RiYgdGFyZ2V0QXJlYSkKK3sKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJl
c3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgQVNTRVJUKG1faGFkVXNlckludGVyYWN0
aW9uKTsKKworICAgIFFSZWN0RiBlbmRBcmVhID0gaXRlbVJlY3RGcm9tQ1NTKHRhcmdldEFyZWEp
OworCisgICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gaXRlbVNjYWxlRnJvbUNTUyhpbm5lckJvdW5k
ZWRDU1NTY2FsZSgyLjApKTsKKyAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3
cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOworCisgICAgcXJlYWwgeDsKKyAgICBjb25zdCBxcmVh
bCBib3JkZXJPZmZzZXQgPSAxMDsKKyAgICBpZiAoKGVuZEFyZWEud2lkdGgoKSArIGJvcmRlck9m
ZnNldCkgKiBlbmRJdGVtU2NhbGUgPD0gdmlld3BvcnRSZWN0LndpZHRoKCkpIHsKKyAgICAgICAg
Ly8gQ2VudGVyIHRoZSBpbnB1dCBmaWVsZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB2aWV3LCBpZiBp
dCBpcyBzbWFsbGVyIHRoYW4KKyAgICAgICAgLy8gdGhlIHZpZXcgYXQgdGhlIHNjYWxlIHRhcmdl
dC4KKyAgICAgICAgeCA9IHZpZXdwb3J0UmVjdC5jZW50ZXIoKS54KCkgLSBlbmRBcmVhLndpZHRo
KCkgKiBlbmRJdGVtU2NhbGUgLyAyLjA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdGhlIGNhcmV0IGFsd2F5cyBoYXMgYm9yZGVyT2Zmc2V0IGNvbnRlbnRzIHBpeGVscyB0
byB0aGUgcmlnaHQKKyAgICAgICAgLy8gb2YgaXQsIGFuZCBzZWNvbmRhcmlseSAoaWYgcG9zc2li
bGUpLCB0aGF0IHRoZSBhcmVhIGhhcyBib3JkZXJPZmZzZXQKKyAgICAgICAgLy8gY29udGVudHMg
cGl4ZWxzIHRvIHRoZSBsZWZ0IG9mIGl0LgorICAgICAgICBxcmVhbCBjYXJldE9mZnNldCA9IGl0
ZW1Db29yZEZyb21DU1MoY2FyZXRBcmVhLngoKSkgLSBlbmRBcmVhLngoKTsKKyAgICAgICAgeCA9
IHFNaW4odmlld3BvcnRSZWN0LndpZHRoKCkgLSAoY2FyZXRPZmZzZXQgKyBib3JkZXJPZmZzZXQp
ICogZW5kSXRlbVNjYWxlLCBib3JkZXJPZmZzZXQgKiBlbmRJdGVtU2NhbGUpOworICAgIH0KKwor
ICAgIGNvbnN0IFFQb2ludEYgaG90c3BvdCA9IFFQb2ludEYoZW5kQXJlYS54KCksIGVuZEFyZWEu
Y2VudGVyKCkueSgpKTsKKyAgICBjb25zdCBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IFFQb2lu
dEYoeCwgLyogRklYTUU6IHZpc2libGVDZW50ZXIgKi8gdmlld3BvcnRSZWN0LmNlbnRlcigpLnko
KSk7CisKKyAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gaG90c3BvdCAqIGVuZEl0ZW1TY2FsZSAt
IHZpZXdwb3J0SG90c3BvdDsKKyAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFu
Z2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKKworICAgIGVuZFBvc2l0aW9uID0g
Ym91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NS
YW5nZS5ib3R0b21SaWdodCgpKTsKKworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3Qo
ZW5kUG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVt
U2NhbGUpOworCisgICAgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoZW5kVmlzaWJsZUNvbnRl
bnRSZWN0KTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Onpvb21Ub0Fy
ZWFHZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3QgUVJlY3RGJiB0
YXJnZXRBcmVhKQoreworICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9m
IGEgdXNlciBpbnRlcmFjdGlvbi4KKyAgICBBU1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24pOwor
CisgICAgaWYgKCF0YXJnZXRBcmVhLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKG1fc3VzcGVuZENvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBpbnQgbWFy
Z2luID0gMTA7IC8vIFdlIHdhbnQgYXQgbGVhc3QgYSBsaXR0bGUgYml0IG9mIG1hcmdpbi4KKyAg
ICBRUmVjdEYgZW5kQXJlYSA9IGl0ZW1SZWN0RnJvbUNTUyh0YXJnZXRBcmVhLmFkanVzdGVkKC1t
YXJnaW4sIC1tYXJnaW4sIG1hcmdpbiwgbWFyZ2luKSk7CisKKyAgICBjb25zdCBRUmVjdEYgdmll
d3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOworCisgICAgcXJlYWwg
dGFyZ2V0Q1NTU2NhbGUgPSB2aWV3cG9ydFJlY3Quc2l6ZSgpLndpZHRoKCkgLyBlbmRBcmVhLnNp
emUoKS53aWR0aCgpOworICAgIHFyZWFsIGVuZENTU1NjYWxlID0gaW5uZXJCb3VuZGVkQ1NTU2Nh
bGUocU1pbih0YXJnZXRDU1NTY2FsZSwgcXJlYWwoMi41KSkpOworICAgIHFyZWFsIGVuZEl0ZW1T
Y2FsZSA9IGl0ZW1TY2FsZUZyb21DU1MoZW5kQ1NTU2NhbGUpOworICAgIHFyZWFsIGN1cnJlbnRT
Y2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKKworICAgIC8vIFdlIHdhbnQgdG8g
ZW5kIHVwIHdpdGggdGhlIHRhcmdldCBhcmVhIGZpbGxpbmcgdGhlIHdob2xlIHdpZHRoIG9mIHRo
ZSB2aWV3cG9ydCAoaWYgcG9zc2libGUpLAorICAgIC8vIGFuZCBjZW50cmFsaXplZCB2ZXJ0aWNh
bGx5IHdoZXJlIHRoZSB1c2VyIHJlcXVlc3RlZCB6b29tLiBUaHVzIG91ciBob3RzcG90IGlzIHRo
ZSBjZW50ZXIgb2YKKyAgICAvLyB0aGUgdGFyZ2V0QXJlYSB4LXdpc2UgYW5kIHRoZSByZXF1ZXN0
ZWQgem9vbSBwb3NpdGlvbiwgeS13aXNlLgorICAgIGNvbnN0IFFQb2ludEYgaG90c3BvdCA9IFFQ
b2ludEYoZW5kQXJlYS5jZW50ZXIoKS54KCksIGl0ZW1Db29yZEZyb21DU1ModG91Y2hQb2ludC55
KCkpKTsKKyAgICBjb25zdCBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IHZpZXdwb3J0UmVjdC5j
ZW50ZXIoKTsKKworICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBob3RzcG90ICogZW5kQ1NTU2Nh
bGUgLSB2aWV3cG9ydEhvdHNwb3Q7CisKKyAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRl
UG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKKyAgICBlbmRQb3NpdGlv
biA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5k
UG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7CisKKyAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRS
ZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5k
SXRlbVNjYWxlKTsKKworICAgIGVudW0geyBab29tSW4sIFpvb21CYWNrLCBab29tT3V0LCBOb1pv
b20gfSB6b29tQWN0aW9uID0gWm9vbUluOworCisgICAgaWYgKCFtX3NjYWxlU3RhY2suaXNFbXB0
eSgpKSB7CisgICAgICAgIC8vIFpvb20gYmFjayBvdXQgaWYgYXR0ZW1wdGluZyB0byBzY2FsZSB0
byB0aGUgc2FtZSBjdXJyZW50IHNjYWxlLCBvcgorICAgICAgICAvLyBhdHRlbXB0aW5nIHRvIGNv
bnRpbnVlIHNjYWxpbmcgb3V0IGZyb20gdGhlIGlubmVyIG1vc3QgbGV2ZWwuCisgICAgICAgIC8v
IFVzZSBmdXp6eSBjb21wYXJlIHdpdGggYSBmaXhlZCBlcnJvciB0byBiZSBhYmxlIHRvIGRlYWwg
d2l0aCBsYXJnaXNoIGRpZmZlcmVuY2VzIGR1ZSB0byBwaXhlbCByb3VuZGluZy4KKyAgICAgICAg
aWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIGN1cnJlbnRTY2FsZSwgMC4wMSkpIHsKKyAg
ICAgICAgICAgIC8vIElmIG1vdmluZyB0aGUgdmlld3BvcnQgd291bGQgZXhwb3NlIG1vcmUgb2Yg
dGhlIHRhcmdldFJlY3QgYW5kIG1vdmUgYXQgbGVhc3QgNDAgcGl4ZWxzLCB1cGRhdGUgcG9zaXRp
b24gYnV0IGRvIG5vdCBzY2FsZSBvdXQuCisgICAgICAgICAgICBRUmVjdEYgY3VycmVudENvbnRl
bnRSZWN0KG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkgLyBjdXJyZW50U2NhbGUsIHZpZXdw
b3J0UmVjdC5zaXplKCkgLyBjdXJyZW50U2NhbGUpOworICAgICAgICAgICAgUVJlY3RGIHRhcmdl
dEludGVyc2VjdGlvbiA9IGVuZFZpc2libGVDb250ZW50UmVjdC5pbnRlcnNlY3RlZCh0YXJnZXRB
cmVhKTsKKyAgICAgICAgICAgIGlmICghY3VycmVudENvbnRlbnRSZWN0LmNvbnRhaW5zKHRhcmdl
dEludGVyc2VjdGlvbikgJiYgKHFBYnMoZW5kVmlzaWJsZUNvbnRlbnRSZWN0LnRvcCgpIC0gY3Vy
cmVudENvbnRlbnRSZWN0LnRvcCgpKSA+PSA0MCB8fCBxQWJzKGVuZFZpc2libGVDb250ZW50UmVj
dC5sZWZ0KCkgLSBjdXJyZW50Q29udGVudFJlY3QubGVmdCgpKSA+PSA0MCkpCisgICAgICAgICAg
ICAgICAgem9vbUFjdGlvbiA9IE5vWm9vbTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB6b29tQWN0aW9uID0gWm9vbUJhY2s7CisgICAgICAgIH0gZWxzZSBpZiAoZnV6enlDb21w
YXJlKGVuZEl0ZW1TY2FsZSwgbV96b29tT3V0U2NhbGUsIDAuMDEpKQorICAgICAgICAgICAgem9v
bUFjdGlvbiA9IFpvb21CYWNrOworICAgICAgICBlbHNlIGlmIChlbmRJdGVtU2NhbGUgPCBjdXJy
ZW50U2NhbGUpCisgICAgICAgICAgICB6b29tQWN0aW9uID0gWm9vbU91dDsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKHpvb21BY3Rpb24pIHsKKyAgICBjYXNlIFpvb21JbjoKKyAgICAgICAgbV9zY2Fs
ZVN0YWNrLmFwcGVuZChTY2FsZVN0YWNrSXRlbShjdXJyZW50U2NhbGUsIG1fdmlld3BvcnRJdGVt
LT5jb250ZW50UG9zKCkueCgpKSk7CisgICAgICAgIG1fem9vbU91dFNjYWxlID0gZW5kSXRlbVNj
YWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpvb21CYWNrOiB7CisgICAgICAgIFNjYWxl
U3RhY2tJdGVtIGxhc3RTY2FsZSA9IG1fc2NhbGVTdGFjay50YWtlTGFzdCgpOworICAgICAgICBl
bmRJdGVtU2NhbGUgPSBsYXN0U2NhbGUuc2NhbGU7CisgICAgICAgIGVuZENTU1NjYWxlID0gY3Nz
U2NhbGVGcm9tSXRlbShsYXN0U2NhbGUuc2NhbGUpOworICAgICAgICAvLyBSZWNhbGN1bGF0ZSBl
bmRQb3NpdGlvbiBhbmQgYm91bmQgaXQgYWNjb3JkaW5nIHRvIG5ldyBzY2FsZS4KKyAgICAgICAg
ZW5kUG9zaXRpb24uc2V0WShob3RzcG90LnkoKSAqIGVuZENTU1NjYWxlIC0gdmlld3BvcnRIb3Rz
cG90LnkoKSk7CisgICAgICAgIGVuZFBvc2l0aW9uLnNldFgobGFzdFNjYWxlLnhQb3NpdGlvbik7
CisgICAgICAgIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxl
KGVuZEl0ZW1TY2FsZSk7CisgICAgICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQ
b3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgp
KTsKKyAgICAgICAgZW5kVmlzaWJsZUNvbnRlbnRSZWN0ID0gUVJlY3RGKGVuZFBvc2l0aW9uIC8g
ZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgWm9vbU91dDoKKyAgICAgICAgLy8gVW5zdGFjayBh
bGwgc2NhbGUtbGV2ZWxzIGRlZXBlciB0aGFuIHRoZSBuZXcgbGV2ZWwsIHNvIGEgem9vbS1iYWNr
IHdvbid0IGVuZCB1cCB6b29taW5nIGluLgorICAgICAgICB3aGlsZSAoIW1fc2NhbGVTdGFjay5p
c0VtcHR5KCkgJiYgbV9zY2FsZVN0YWNrLmxhc3QoKS5zY2FsZSA+PSBlbmRJdGVtU2NhbGUpCisg
ICAgICAgICAgICBtX3NjYWxlU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICBtX3pvb21PdXRT
Y2FsZSA9IGVuZEl0ZW1TY2FsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOb1pvb206Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGVu
ZFZpc2libGVDb250ZW50UmVjdCk7Cit9CisKK1FSZWN0RiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6Om5lYXJlc3RWYWxpZEJvdW5kcygpIGNvbnN0Cit7CisgICAgcXJlYWwgZW5kSXRlbVNj
YWxlID0gaXRlbVNjYWxlRnJvbUNTUyhpbm5lckJvdW5kZWRDU1NTY2FsZShjdXJyZW50Q1NTU2Nh
bGUoKSkpOworCisgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVt
LT5ib3VuZGluZ1JlY3QoKTsKKyAgICBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IHZpZXdwb3J0
UmVjdC5jZW50ZXIoKTsKKworICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRl
bS0+bWFwVG9XZWJDb250ZW50KHZpZXdwb3J0SG90c3BvdCkgKiBlbmRJdGVtU2NhbGUgLSB2aWV3
cG9ydEhvdHNwb3Q7CisKKyAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VG
b3JQYWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKKyAgICBlbmRQb3NpdGlvbiA9IGJvdW5k
UG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2Uu
Ym90dG9tUmlnaHQoKSk7CisKKyAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBv
c2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxl
KTsKKworICAgIHJldHVybiBlbmRWaXNpYmxlQ29udGVudFJlY3Q7Cit9CisKK3ZvaWQgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRDU1NTY2FsZShxcmVhbCBzY2FsZSkKK3sKKyAgICBW
aWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOworCisgICAgcXJlYWwgbmV3U2NhbGUg
PSBpbm5lckJvdW5kZWRDU1NTY2FsZShzY2FsZSk7CisgICAgbV9wYWdlSXRlbS0+c2V0Q29udGVu
dHNTY2FsZShpdGVtU2NhbGVGcm9tQ1NTKG5ld1NjYWxlKSk7Cit9CisKK3FyZWFsIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6Y3VycmVudENTU1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gY3NzU2NhbGVGcm9tSXRlbShtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCkpOworfQorCiti
b29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRmxpY2tpbmcoKTsKK30KKwor
Ym9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVBY3RpdmUoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+aXNEcmFnZ2luZygpOworfQorCit2b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBv
aW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK3sKKyAgICAvLyBU
aGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCisg
ICAgQVNTRVJUKG1faGFkVXNlckludGVyYWN0aW9uKTsKKworICAgIG1fdmlld3BvcnRJdGVtLT5o
YW5kbGVGbGlja2FibGVNb3VzZVByZXNzKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7
CisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsK
K30KKwordm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVSZXF1ZXN0
VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxs
aXMpCit7CisgICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRsZUZsaWNrYWJsZU1vdXNlTW92ZShwb3Np
dGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3
cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247Cit9CisKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjpwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2
NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK3sKKyAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxp
Y2thYmxlTW91c2VSZWxlYXNlKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAg
bV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKK30KKwor
dm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVDYW5jZWxsZWQoKQor
eworICAgIC8vIFJlc2V0IHRoZSB2ZWxvY2l0eSBzYW1wbGVzIG9mIHRoZSBmbGlja2FibGUuCisg
ICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIHJlY29nbml6ZXIgaWYgd2Ug
aGF2ZSBhIHJlY29nbml6ZWQKKyAgICAvLyBwYW4gZ2VzdHVyZSBhbmQgcmVjZWl2ZSBhIHRvdWNo
IGV2ZW50IHdpdGggbXVsdGlwbGUgdG91Y2ggcG9pbnRzCisgICAgLy8gKGllLiB0cmFuc2l0aW9u
IHRvIGEgcGluY2ggZ2VzdHVyZSkgYXMgaXQgZG9lcyBub3QgbW92ZSB0aGUgY29udGVudAorICAg
IC8vIGJhY2sgaW5zaWRlIHZhbGlkIGJvdW5kcy4KKyAgICAvLyBXaGVuIHRoZSBwaW5jaCBnZXN0
dXJlIGVuZHMsIHRoZSBjb250ZW50IGlzIHBvc2l0aW9uZWQgYW5kIHNjYWxlZAorICAgIC8vIGJh
Y2sgdG8gdmFsaWQgYm91bmRhcmllcy4KKyAgICBtX3ZpZXdwb3J0SXRlbS0+Y2FuY2VsRmxpY2so
KTsKK30KKworYm9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQW5pbWF0aW9u
QWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9
PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc7Cit9CisKK3ZvaWQgUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjpjYW5jZWxTY3JvbGxBbmltYXRpb24oKQoreworICAgIGlmICghc2Nyb2xs
QW5pbWF0aW9uQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBwYW4g
Z2VzdHVyZSByZWNvZ25pemVyIHJlY2VpdmVzIGEgdG91Y2ggYmVnaW4gZXZlbnQKKyAgICAvLyBk
dXJpbmcgYW4gb25nb2luZyBraW5ldGljIHNjcm9sbCBhbmltYXRpb24gb2YgYSBwcmV2aW91cwor
ICAgIC8vIHBhbiBnZXN0dXJlLCB0aGUgYW5pbWF0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSBjb250
ZW50IGlzCisgICAgLy8gaW1tZWRpYXRlbHkgcG9zaXRpb25lZCBiYWNrIHRvIHZhbGlkIGJvdW5k
YXJpZXMuCisKKyAgICBtX3ZpZXdwb3J0SXRlbS0+Y2FuY2VsRmxpY2soKTsKKyAgICBWaWV3cG9y
dFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOworICAgIHNldFBhZ2VJdGVtUmVjdFZpc2libGUo
bmVhcmVzdFZhbGlkQm91bmRzKCkpOworfQorCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6aW50ZXJydXB0U2NhbGVBbmltYXRpb24oKQoreworICAgIC8vIFRoaXMgaW50ZXJydXB0
cyB0aGUgc2NhbGUgYW5pbWF0aW9uIGV4YWN0bHkgd2hlcmUgaXQgaXMsIGV2ZW4gaWYgaXQgaXMg
b3V0IG9mIGJvdW5kcy4KKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdG9wKCk7Cit9CisKK2Jvb2wg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVBY3RpdmUoKSBjb25zdAor
eworICAgIHJldHVybiBtX3BpbmNoU3RhcnRTY2FsZSA+IDA7Cit9CisKK3ZvaWQgUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBp
bmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKQoreworICAgIC8vIFRoaXMgY2FuIG9ubHkg
aGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KKyAgICBBU1NFUlQobV9o
YWRVc2VySW50ZXJhY3Rpb24pOworCisgICAgaWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3NjYWxlU3RhY2suY2xlYXIoKTsKKyAgICBtX3pvb21PdXRT
Y2FsZSA9IDAuMDsKKworICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBW
aWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVy
VXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKKworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3
cG9ydENvb3JkaW5hdGVzID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CisgICAg
bV9waW5jaFN0YXJ0U2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Cit9CisKK3Zv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRl
KGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzLCBxcmVhbCB0
b3RhbFNjYWxlRmFjdG9yKQoreworICAgIEFTU0VSVChtX3N1c3BlbmRDb3VudCk7CisKKyAgICBp
ZiAoIW1fYWxsb3dzVXNlclNjYWxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vICBDaGFu
Z2VzIG9mIHRoZSBjZW50ZXIgcG9zaXRpb24gc2hvdWxkIG1vdmUgdGhlIHBhZ2UgZXZlbiBpZiB0
aGUgem9vbSBmYWN0b3IKKyAgICAvLyAgZG9lcyBub3QgY2hhbmdlLgorICAgIGNvbnN0IHFyZWFs
IGNzc1NjYWxlID0gY3NzU2NhbGVGcm9tSXRlbShtX3BpbmNoU3RhcnRTY2FsZSAqIHRvdGFsU2Nh
bGVGYWN0b3IpOworCisgICAgLy8gQWxsb3cgem9vbWluZyBvdXQgYmV5b25kIG1pbWltdW0gc2Nh
bGUgb24gcGFnZXMgdGhhdCBkbyBub3QgZXhwbGljaXRseSBkaXNhbGxvdyBpdC4KKyAgICBjb25z
dCBxcmVhbCB0YXJnZXRDU1NTY2FsZSA9IG91dGVyQm91bmRlZENTU1NjYWxlKGNzc1NjYWxlKTsK
KworICAgIHNjYWxlQ29udGVudChtX3ZpZXdwb3J0SXRlbS0+bWFwVG9XZWJDb250ZW50KHBpbmNo
Q2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKSwgdGFyZ2V0Q1NTU2NhbGUpOworCisgICAgY29u
c3QgUVBvaW50RiBwb3NpdGlvbkRpZmYgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRl
cyAtIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOworICAgIG1fbGFzdFBp
bmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29v
cmRpbmF0ZXM7CisKKyAgICBtX3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhtX3ZpZXdwb3J0
SXRlbS0+Y29udGVudFBvcygpIC0gcG9zaXRpb25EaWZmKTsKK30KKwordm9pZCBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZUVuZGVkKCkKK3sKKyAgICBBU1NFUlQobV9z
dXNwZW5kQ291bnQpOworCisgICAgaWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3BpbmNoU3RhcnRTY2FsZSA9IC0xOworCisgICAgYW5pbWF0ZVBhZ2VJ
dGVtUmVjdFZpc2libGUobmVhcmVzdFZhbGlkQm91bmRzKCkpOworICAgIG1fc2NhbGVVcGRhdGVE
ZWZlcnJlci5jbGVhcigpOyAvLyBDbGVhciBhZnRlciBzdGFydGluZyBwb3RlbnRpYWwgYW5pbWF0
aW9uLCB3aGljaCB0YWtlcyBvdmVyIGRlZmVycmluZy4KK30KKwordm9pZCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpCit7CisgICAgbV9waW5jaFN0
YXJ0U2NhbGUgPSAtMTsKKyAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKK30KKwor
UVJlY3QgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp2aXNpYmxlQ29udGVudHNSZWN0KCkg
Y29uc3QKK3sKKyAgICBjb25zdCBRUmVjdEYgdmlzaWJsZVJlY3QobV92aWV3cG9ydEl0ZW0tPmJv
dW5kaW5nUmVjdCgpLmludGVyc2VjdGVkKG1fcGFnZUl0ZW0tPmJvdW5kaW5nUmVjdCgpKSk7CisK
KyAgICAvLyBXZSBhdm9pZCB1c2luZyB0b0FsaWduZWRSZWN0KCkgYmVjYXVzZSBpdCBwcm9kdWNl
cyBpbmNvbnNpc3RlbnQgd2lkdGggYW5kIGhlaWdodC4KKyAgICBRUmVjdEYgbWFwcGVkUmVjdCht
X3ZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvV2ViQ29udGVudCh2aXNpYmxlUmVjdCkpOworICAgIHJl
dHVybiBRUmVjdChmbG9vcihtYXBwZWRSZWN0LngoKSksIGZsb29yKG1hcHBlZFJlY3QueSgpKSwg
Zmxvb3IobWFwcGVkUmVjdC53aWR0aCgpKSwgZmxvb3IobWFwcGVkUmVjdC5oZWlnaHQoKSkpOwor
fQorCit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6aW5mb3JtVmlzaWJsZUNvbnRl
bnRDaGFuZ2UoY29uc3QgUVBvaW50RiYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBEcmF3aW5n
QXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwor
ICAgIGlmICghZHJhd2luZ0FyZWEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2xhc3RW
aXNpYmxlQ29udGVudHNSZWN0ID09IHZpc2libGVDb250ZW50c1JlY3QoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcXJlYWwgc2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7CisK
KyAgICBpZiAoc2NhbGUgIT0gbV9sYXN0Q29tbWl0dGVkU2NhbGUpCisgICAgICAgIGVtaXQgbV92
aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPmNvbnRlbnRzU2NhbGVDb21taXR0
ZWQoKTsKKyAgICBtX2xhc3RDb21taXR0ZWRTY2FsZSA9IHNjYWxlOworICAgIG1fbGFzdFZpc2li
bGVDb250ZW50c1JlY3QgPSB2aXNpYmxlQ29udGVudHNSZWN0KCk7CisKKyAgICBkcmF3aW5nQXJl
YS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0KCksIHNjYWxlLCB0
cmFqZWN0b3J5VmVjdG9yLCBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpKTsKKworICAgIC8v
IEVuc3VyZSB0aGF0IHVwZGF0ZVBhaW50Tm9kZSBpcyBhbHdheXMgY2FsbGVkIGJlZm9yZSBwYWlu
dGluZy4KKyAgICBtX3BhZ2VJdGVtLT51cGRhdGUoKTsKK30KKwordm9pZCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OnZpZXdwb3J0SXRlbVNpemVDaGFuZ2VkKCkKK3sKKyAgICBRU2l6ZSB2
aWV3cG9ydFNpemUgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6
ZSgpOworCisgICAgaWYgKHZpZXdwb3J0U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nLCBhZGQgUU1MIGFwaSEKKyAgICBXZWJQcmVm
ZXJlbmNlcyogd2tQcmVmcyA9IG1fd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5j
ZXMoKTsKKyAgICB3a1ByZWZzLT5zZXREZXZpY2VXaWR0aCh2aWV3cG9ydFNpemUud2lkdGgoKSk7
CisgICAgd2tQcmVmcy0+c2V0RGV2aWNlSGVpZ2h0KHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSk7CisK
KyAgICAvLyBMZXQgdGhlIFdlYlByb2Nlc3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0IHNp
emUsIHNvIHRoYXQKKyAgICAvLyBpdCBjYW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29yZGluZ2x5
LgorICAgIG1fd2ViUGFnZVByb3h5LT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKKwor
ICAgIGluZm9ybVZpc2libGVDb250ZW50Q2hhbmdlKFFQb2ludEYoKSk7Cit9CisKK3ZvaWQgUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUNvbnRlbnQoY29uc3QgUVBvaW50RiYgY2Vu
dGVySW5DU1NDb29yZGluYXRlcywgcXJlYWwgY3NzU2NhbGUpCit7CisgICAgUVBvaW50RiBvbGRQ
aW5jaENlbnRlck9uVmlld3BvcnQgPSBtX3ZpZXdwb3J0SXRlbS0+bWFwRnJvbVdlYkNvbnRlbnQo
Y2VudGVySW5DU1NDb29yZGluYXRlcyk7CisgICAgbV9wYWdlSXRlbS0+c2V0Q29udGVudHNTY2Fs
ZShpdGVtU2NhbGVGcm9tQ1NTKGNzc1NjYWxlKSk7CisgICAgUVBvaW50RiBuZXdQaW5jaENlbnRl
ck9uVmlld3BvcnQgPSBtX3ZpZXdwb3J0SXRlbS0+bWFwRnJvbVdlYkNvbnRlbnQoY2VudGVySW5D
U1NDb29yZGluYXRlcyk7CisKKyAgICBtX3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhtX3Zp
ZXdwb3J0SXRlbS0+Y29udGVudFBvcygpICsgKG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCAtIG9s
ZFBpbmNoQ2VudGVyT25WaWV3cG9ydCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2luY2x1ZGUgIm1vY19RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwIgorCisKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNw
cAkocmV2aXNpb24gMTE5MzkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmll
d3BvcnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmUuaCIKKyNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgogCiAjaW5jbHVkZSAiV2ViUGFn
ZUdyb3VwLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCkBAIC02NSwzMyArNjUsMzMgQEAg
c3RhdGljIGNvbnN0IGludCBrU2NhbGVBbmltYXRpb25EdXJhdGlvbgogY2xhc3MgVmlld3BvcnRV
cGRhdGVEZWZlcnJlciB7CiBwdWJsaWM6CiAgICAgZW51bSBTdXNwZW5kQ29udGVudEZsYWcgeyBE
ZWZlclVwZGF0ZSwgRGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCB9OwotICAgIFZpZXdwb3J0
VXBkYXRlRGVmZXJyZXIoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUsIFN1c3Bl
bmRDb250ZW50RmxhZyBzdXNwZW5kQ29udGVudEZsYWcgPSBEZWZlclVwZGF0ZSkKLSAgICAgICAg
OiBlbmdpbmUoZW5naW5lKQorICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIoUXRWaWV3cG9ydEhh
bmRsZXIqIGhhbmRsZXIsIFN1c3BlbmRDb250ZW50RmxhZyBzdXNwZW5kQ29udGVudEZsYWcgPSBE
ZWZlclVwZGF0ZSkKKyAgICAgICAgOiBoYW5kbGVyKGhhbmRsZXIpCiAgICAgewotICAgICAgICBl
bmdpbmUtPm1fc3VzcGVuZENvdW50Kys7CisgICAgICAgIGhhbmRsZXItPm1fc3VzcGVuZENvdW50
Kys7CiAKICAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzdXNwZW5kIGNvbnRlbnQgZm9y
IGltbWVkaWF0ZSB1cGRhdGVzCiAgICAgICAgIC8vIG9ubHkgZHVyaW5nIGFuaW1hdGlvbnMgb3Ig
bG9uZ2VyIGdlc3R1cmVzLgogICAgICAgICBpZiAoc3VzcGVuZENvbnRlbnRGbGFnID09IERlZmVy
VXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpCi0gICAgICAgICAgICBlbmdpbmUtPnN1c3BlbmRQYWdl
Q29udGVudCgpOworICAgICAgICAgICAgaGFuZGxlci0+c3VzcGVuZFBhZ2VDb250ZW50KCk7CiAg
ICAgfQogCiAgICAgflZpZXdwb3J0VXBkYXRlRGVmZXJyZXIoKQogICAgIHsKLSAgICAgICAgaWYg
KC0tKGVuZ2luZS0+bV9zdXNwZW5kQ291bnQpKQorICAgICAgICBpZiAoLS0oaGFuZGxlci0+bV9z
dXNwZW5kQ291bnQpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGVuZ2luZS0+cmVz
dW1lUGFnZUNvbnRlbnQoKTsKKyAgICAgICAgaGFuZGxlci0+cmVzdW1lUGFnZUNvbnRlbnQoKTsK
IAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9y
dCB3aWxsIGJlIHJlcXVlc3RlZC4KLSAgICAgICAgZW5naW5lLT5pbmZvcm1WaXNpYmxlQ29udGVu
dENoYW5nZShRUG9pbnRGKCkpOworICAgICAgICBoYW5kbGVyLT5pbmZvcm1WaXNpYmxlQ29udGVu
dENoYW5nZShRUG9pbnRGKCkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUqIGNvbnN0IGVuZ2luZTsKKyAgICBRdFZpZXdwb3J0SGFuZGxlciogY29u
c3QgaGFuZGxlcjsKIH07CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzdXNw
ZW5kUGFnZUNvbnRlbnQoKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6c3VzcGVuZFBhZ2VDb250
ZW50KCkKIHsKICAgICBpZiAobV9oYXNTdXNwZW5kZWRDb250ZW50KQogICAgICAgICByZXR1cm47
CkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnN1
c3BlbgogICAgIG1fd2ViUGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnJlc3VtZVBh
Z2VDb250ZW50KCkKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnJlc3VtZVBhZ2VDb250ZW50KCkK
IHsKICAgICBpZiAoIW1faGFzU3VzcGVuZGVkQ29udGVudCkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE0LDE3ICsxMTQsMTcgQEAgc3RhdGljIGlubGluZSBib29sIGZ1enp5Q29tcGFyZShxcmVhbCBh
LAogICAgIHJldHVybiBxQWJzKGEgLSBiKSA8IGVwc2lsb247CiB9CiAKLWlubGluZSBxcmVhbCBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmNzc1NjYWxlRnJvbUl0ZW0ocXJlYWwgaXRlbVNj
YWxlKSBjb25zdAoraW5saW5lIHFyZWFsIFF0Vmlld3BvcnRIYW5kbGVyOjpjc3NTY2FsZUZyb21J
dGVtKHFyZWFsIGl0ZW1TY2FsZSkgY29uc3QKIHsKICAgICByZXR1cm4gaXRlbVNjYWxlIC8gbV9k
ZXZpY2VQaXhlbFJhdGlvOwogfQogCi1pbmxpbmUgcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjppdGVtU2NhbGVGcm9tQ1NTKHFyZWFsIGNzc1NjYWxlKSBjb25zdAoraW5saW5lIHFy
ZWFsIFF0Vmlld3BvcnRIYW5kbGVyOjppdGVtU2NhbGVGcm9tQ1NTKHFyZWFsIGNzc1NjYWxlKSBj
b25zdAogewogICAgIHJldHVybiBjc3NTY2FsZSAqIG1fZGV2aWNlUGl4ZWxSYXRpbzsKIH0KIAot
aW5saW5lIHFyZWFsIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6aXRlbUNvb3JkRnJvbUNT
UyhxcmVhbCB2YWx1ZSkgY29uc3QKK2lubGluZSBxcmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6aXRl
bUNvb3JkRnJvbUNTUyhxcmVhbCB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gdmFsdWUgKiBt
X2RldmljZVBpeGVsUmF0aW87CiB9CkBAIC0xMzUsNyArMTM1LDcgQEAgc3RhdGljIGlubGluZSBR
UG9pbnRGIGJvdW5kUG9zaXRpb24oY29ucwogICAgICAgICAgICAgICAgICAgIHFCb3VuZChtaW5Q
b3NpdGlvbi55KCksIHBvc2l0aW9uLnkoKSwgbWF4UG9zaXRpb24ueSgpKSk7CiB9CiAKLWlubGlu
ZSBRUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppdGVtUmVjdEZyb21DU1MoY29u
c3QgUVJlY3RGJiBjc3NSZWN0KSBjb25zdAoraW5saW5lIFFSZWN0RiBRdFZpZXdwb3J0SGFuZGxl
cjo6aXRlbVJlY3RGcm9tQ1NTKGNvbnN0IFFSZWN0RiYgY3NzUmVjdCkgY29uc3QKIHsKICAgICBR
UmVjdEYgaXRlbVJlY3Q7CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQCBpbmxpbmUgUVJlY3RGIFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luCiAgICAgcmV0dXJuIGl0ZW1SZWN0OwogfQogCi1RdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmU6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShXZWJLaXQ6
OldlYlBhZ2VQcm94eSogcHJveHksIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSwgUVF1aWNr
V2ViUGFnZSogcGFnZUl0ZW0pCitRdFZpZXdwb3J0SGFuZGxlcjo6UXRWaWV3cG9ydEhhbmRsZXIo
V2ViS2l0OjpXZWJQYWdlUHJveHkqIHByb3h5LCBRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydEl0ZW0s
IFFRdWlja1dlYlBhZ2UqIHBhZ2VJdGVtKQogICAgIDogbV93ZWJQYWdlUHJveHkocHJveHkpCiAg
ICAgLCBtX3ZpZXdwb3J0SXRlbSh2aWV3cG9ydEl0ZW0pCiAgICAgLCBtX3BhZ2VJdGVtKHBhZ2VJ
dGVtKQpAQCAtMTcyLDE2ICsxNzIsMTYgQEAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpR
dFZpZXdwb3J0SQogICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChR
QWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSksIFF0
OjpEaXJlY3RDb25uZWN0aW9uKTsKIH0KIAotUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp+
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCkKK1F0Vmlld3BvcnRIYW5kbGVyOjp+UXRWaWV3
cG9ydEhhbmRsZXIoKQogewogfQogCi1xcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OmlubmVyQm91bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAorcXJlYWwgUXRWaWV3
cG9ydEhhbmRsZXI6OmlubmVyQm91bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAog
ewogICAgIHJldHVybiBxQm91bmQobV9taW5pbXVtU2NhbGUsIGNzc1NjYWxlLCBtX21heGltdW1T
Y2FsZSk7CiB9CiAKLXFyZWFsIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6b3V0ZXJCb3Vu
ZGVkQ1NTU2NhbGUocXJlYWwgY3NzU2NhbGUpIGNvbnN0CitxcmVhbCBRdFZpZXdwb3J0SGFuZGxl
cjo6b3V0ZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwgY3NzU2NhbGUpIGNvbnN0CiB7CiAgICAgaWYg
KG1fYWxsb3dzVXNlclNjYWxpbmcpIHsKICAgICAgICAgLy8gQm91bmRlZCBieSBbMC4xLCAxMC4w
XSBsaWtlIHRoZSB2aWV3cG9ydCBtZXRhIGNvZGUgaW4gV2ViQ29yZS4KQEAgLTE5Miw3ICsxOTIs
NyBAQCBxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Om91dGVyCiAgICAgcmV0dXJu
IGlubmVyQm91bmRlZENTU1NjYWxlKGNzc1NjYWxlKTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OnZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6
Vmlld3BvcnRBdHRyaWJ1dGVzJiBuZXdBdHRyaWJ1dGVzKQordm9pZCBRdFZpZXdwb3J0SGFuZGxl
cjo6dmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJp
YnV0ZXMmIG5ld0F0dHJpYnV0ZXMpCiB7CiAgICAgbV9yYXdBdHRyaWJ1dGVzID0gbmV3QXR0cmli
dXRlczsKICAgICBXZWJDb3JlOjpyZXN0cmljdFNjYWxlRmFjdG9yVG9Jbml0aWFsU2NhbGVJZk5v
dFVzZXJTY2FsYWJsZShtX3Jhd0F0dHJpYnV0ZXMpOwpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp2aWV3cG8KICAgICBzZXRQYWdlSXRlbVJlY3RW
aXNpYmxlKG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmU6OnBhZ2VDb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJiBuZXdTaXpl
LCBjb25zdCBRU2l6ZSYgdmlld3BvcnRTaXplKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGFn
ZUNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1NpemUsIGNvbnN0IFFTaXplJiB2
aWV3cG9ydFNpemUpCiB7CiAgICAgZmxvYXQgbWluaW11bVNjYWxlID0gV2ViQ29yZTo6Y29tcHV0
ZU1pbmltdW1TY2FsZUZhY3RvckZvckNvbnRlbnRDb250YWluZWQobV9yYXdBdHRyaWJ1dGVzLCB2
aWV3cG9ydFNpemUsIG5ld1NpemUpOwogCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhZ2VDbwogICAgIHNldFBhZ2VJdGVtUmVjdFZpc2libGUo
bmVhcmVzdFZhbGlkQm91bmRzKCkpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6c2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGl0ZW1SZWN0KQordm9p
ZCBRdFZpZXdwb3J0SGFuZGxlcjo6c2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYm
IGl0ZW1SZWN0KQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdXNwZW5kQ291bnQsCiAg
ICAgICAgICJzZXRQYWdlSXRlbVJlY3RWaXNpYmxlIGhhcyB0byBiZSBndWFyZGVkIHVzaW5nIGEg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlci4iKTsKQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIFF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2V0UGFnCiAgICAgbV92aWV3cG9ydEl0ZW0tPnNldENv
bnRlbnRQb3MobmV3UG9zaXRpb24pOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6YW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVjdCkK
K3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGNvbnN0
IFFSZWN0RiYgaXRlbVJlY3QpCiB7CiAgICAgQVNTRVJUKG1fc2NhbGVBbmltYXRpb24tPnN0YXRl
KCkgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVkKTsKIApAQCAtMzAxLDcgKzMwMSw3IEBA
IHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjphbmltYXQKICAgICBtX3NjYWxlQW5p
bWF0aW9uLT5zdGFydCgpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
ZmxpY2tNb3ZlU3RhcnRlZCgpCit2b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpmbGlja01vdmVTdGFy
dGVkKCkKIHsKICAgICBRX0FTU0VSVChtX3ZpZXdwb3J0SXRlbS0+aXNNb3ZpbmcoKSk7CiAgICAg
bV9zY3JvbGxVcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyKHRoaXMsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENv
bnRlbnQpKTsKQEAgLTMxMSw3ICszMTEsNyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6ZmxpY2tNCiAgICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRZ
Q2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7CiB9CiAKLXZvaWQg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpmbGlja01vdmVFbmRlZCgpCit2b2lkIFF0Vmll
d3BvcnRIYW5kbGVyOjpmbGlja01vdmVFbmRlZCgpCiB7CiAgICAgUV9BU1NFUlQoIW1fdmlld3Bv
cnRJdGVtLT5pc01vdmluZygpKTsKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhl
IGVuZCBvZiB0aGUgcGFuIG9yIHBhbiBraW5ldGljIGFuaW1hdGlvbi4KQEAgLTMyMiw3ICszMjIs
NyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZmxpY2tNCiAgICAgZGlzY29u
bmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgdGhpcywgU0xP
VChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjpwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpCit2b2lkIFF0Vmlld3BvcnRI
YW5kbGVyOjpwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpCiB7CiAgICAgUVBvaW50RiBuZXdQb3Np
dGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCk7CiAKQEAgLTMzMSw3ICszMzEsNyBA
QCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFnZUl0CiAgICAgbV9sYXN0U2Ny
b2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnBhZ2VDb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBjc3NQ
b3NpdGlvbikKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhZ2VDb250ZW50UG9zaXRpb25SZXF1
ZXN0ZWQoY29uc3QgUVBvaW50JiBjc3NQb3NpdGlvbikKIHsKICAgICAvLyBJZ25vcmUgdGhlIHJl
cXVlc3QgaWYgc3VzcGVuZGVkLiBDYW4gb25seSBoYXBwZW4gZHVlIHRvIGRlbGF5IGluIGV2ZW50
IGRlbGl2ZXJ5LgogICAgIGlmIChtX3N1c3BlbmRDb3VudCkKQEAgLTM0OCw3ICszNDgsNyBAQCB2
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFnZUNvCiAgICAgc2V0UGFnZUl0ZW1S
ZWN0VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5p
bWF0aW9uOjpTdGF0ZSBuZXdTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSAvKm9sZFN0
YXRlKi8pCit2b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdl
ZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246
OlN0YXRlIC8qb2xkU3RhdGUqLykKIHsKICAgICBzd2l0Y2ggKG5ld1N0YXRlKSB7CiAgICAgY2Fz
ZSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc6CkBAIC0zNjQsMTIgKzM2NCwxMiBAQCB2b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBCiAgICAgfQogfQogCi12b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25WYWx1ZUNoYW5nZWQoUVZh
cmlhbnQgdmFsdWUpCit2b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlvblZhbHVl
Q2hhbmdlZChRVmFyaWFudCB2YWx1ZSkKIHsKICAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKHZh
bHVlLnRvUmVjdEYoKSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp0
b3VjaEJlZ2luKCkKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnRvdWNoQmVnaW4oKQogewogICAg
IG1faGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsKIApAQCAtMzc4LDEyICszNzgsMTIgQEAgdm9p
ZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnRvdWNoQgogICAgICAgICBtX3RvdWNoVXBk
YXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBW
aWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7CiB9
CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp0b3VjaEVuZCgpCit2b2lkIFF0
Vmlld3BvcnRIYW5kbGVyOjp0b3VjaEVuZCgpCiB7CiAgICAgbV90b3VjaFVwZGF0ZURlZmVycmVy
LmNsZWFyKCk7CiB9CiAKLVFSZWN0RiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmNvbXB1
dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0CitRUmVj
dEYgUXRWaWV3cG9ydEhhbmRsZXI6OmNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShx
cmVhbCBpdGVtU2NhbGUpIGNvbnN0CiB7CiAgICAgY29uc3QgUVNpemVGIGNvbnRlbnRJdGVtU2l6
ZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2l6ZSgpICogaXRlbVNjYWxlOwogICAgIGNvbnN0IFFT
aXplRiB2aWV3cG9ydEl0ZW1TaXplID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNp
emUoKTsKQEAgLTM5NCw3ICszOTQsNyBAQCBRUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjpjb21wCiAgICAgcmV0dXJuIFFSZWN0RihRUG9pbnRGKDAsIDApLCBRU2l6ZUYoaG9yaXpv
bnRhbFJhbmdlLCB2ZXJ0aWNhbFJhbmdlKSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjpmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNhcmV0QXJlYSwgY29u
c3QgUVJlY3RGJiB0YXJnZXRBcmVhKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6Zm9jdXNFZGl0
YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBjYXJldEFyZWEsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJl
YSkKIHsKICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIg
aW50ZXJhY3Rpb24uCiAgICAgQVNTRVJUKG1faGFkVXNlckludGVyYWN0aW9uKTsKQEAgLTQzMSw3
ICs0MzEsNyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Zm9jdXNFCiAgICAg
YW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoZW5kVmlzaWJsZUNvbnRlbnRSZWN0KTsKIH0KIAot
dm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Onpvb21Ub0FyZWFHZXN0dXJlRW5kZWQo
Y29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKQordm9p
ZCBRdFZpZXdwb3J0SGFuZGxlcjo6em9vbVRvQXJlYUdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRG
JiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpCiB7CiAgICAgLy8gVGhpcyBj
YW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgogICAgIEFT
U0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7CkBAIC01MTUsNyArNTE1LDcgQEAgdm9pZCBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Onpvb21UbwogICAgIGFuaW1hdGVQYWdlSXRlbVJlY3RW
aXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7CiB9CiAKLVFSZWN0RiBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6Om5lYXJlc3RWYWxpZEJvdW5kcygpIGNvbnN0CitRUmVjdEYgUXRWaWV3
cG9ydEhhbmRsZXI6Om5lYXJlc3RWYWxpZEJvdW5kcygpIGNvbnN0CiB7CiAgICAgcXJlYWwgZW5k
SXRlbVNjYWxlID0gaXRlbVNjYWxlRnJvbUNTUyhpbm5lckJvdW5kZWRDU1NTY2FsZShjdXJyZW50
Q1NTU2NhbGUoKSkpOwogCkBAIC01MzIsNyArNTMyLDcgQEAgUVJlY3RGIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6bmVhcgogICAgIHJldHVybiBlbmRWaXNpYmxlQ29udGVudFJlY3Q7CiB9
CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRDU1NTY2FsZShxcmVhbCBz
Y2FsZSkKK3ZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNldENTU1NjYWxlKHFyZWFsIHNjYWxlKQog
ewogICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7CiAKQEAgLTU0MCwyMiAr
NTQwLDIyIEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRDU1MKICAgICBt
X3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21DU1MobmV3U2NhbGUpKTsK
IH0KIAotcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpjdXJyZW50Q1NTU2NhbGUo
KSBjb25zdAorcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6OmN1cnJlbnRDU1NTY2FsZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGNzc1NjYWxlRnJvbUl0ZW0obV9wYWdlSXRlbS0+Y29udGVudHNTY2Fs
ZSgpKTsKIH0KIAotYm9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjcm9sbEFuaW1h
dGlvbkFjdGl2ZSgpIGNvbnN0Citib29sIFF0Vmlld3BvcnRIYW5kbGVyOjpzY3JvbGxBbmltYXRp
b25BY3RpdmUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+aXNGbGlja2lu
ZygpOwogfQogCi1ib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUFj
dGl2ZSgpIGNvbnN0Citib29sIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlQWN0aXZlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRHJhZ2dpbmcoKTsKIH0KIAot
dm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVTdGFydGVkKGNvbnN0
IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit2b2lkIFF0
Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlv
biwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQogewogICAgIC8vIFRoaXMgY2FuIG9ubHkg
aGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KICAgICBBU1NFUlQobV9o
YWRVc2VySW50ZXJhY3Rpb24pOwpAQCAtNTY0LDE5ICs1NjQsMTkgQEAgdm9pZCBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlcwogICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9y
dENvb3JkaW5hdGVzID0gcG9zaXRpb247CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwg
cWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGFu
R2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVu
dFRpbWVzdGFtcE1pbGxpcykKIHsKICAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxl
TW91c2VNb3ZlKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgbV9sYXN0UGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKIH0KIAotdm9pZCBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiBw
b3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQordm9pZCBRdFZpZXdwb3J0SGFu
ZGxlcjo6cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZl
bnRUaW1lc3RhbXBNaWxsaXMpCiB7CiAgICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRsZUZsaWNrYWJs
ZU1vdXNlUmVsZWFzZShwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwogICAgIG1fbGFz
dFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247CiB9CiAKLXZvaWQg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkKK3ZvaWQg
UXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVDYW5jZWxsZWQoKQogewogICAgIC8vIFJlc2V0
IHRoZSB2ZWxvY2l0eSBzYW1wbGVzIG9mIHRoZSBmbGlja2FibGUuCiAgICAgLy8gVGhpcyBzaG91
bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIHJlY29nbml6ZXIgaWYgd2UgaGF2ZSBhIHJlY29nbml6
ZWQKQEAgLTU4OCwxMiArNTg4LDEyIEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
OjpwYW5HZXMKICAgICBtX3ZpZXdwb3J0SXRlbS0+Y2FuY2VsRmxpY2soKTsKIH0KIAotYm9vbCBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QK
K2Jvb2wgUXRWaWV3cG9ydEhhbmRsZXI6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9zY2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmltYXRp
b246OlJ1bm5pbmc7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpjYW5j
ZWxTY3JvbGxBbmltYXRpb24oKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6Y2FuY2VsU2Nyb2xs
QW5pbWF0aW9uKCkKIHsKICAgICBpZiAoIXNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQogICAgICAg
ICByZXR1cm47CkBAIC02MDgsMTggKzYwOCwxOCBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6Y2FuY2VsCiAgICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRC
b3VuZHMoKSk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppbnRlcnJ1
cHRTY2FsZUFuaW1hdGlvbigpCit2b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjppbnRlcnJ1cHRTY2Fs
ZUFuaW1hdGlvbigpCiB7CiAgICAgLy8gVGhpcyBpbnRlcnJ1cHRzIHRoZSBzY2FsZSBhbmltYXRp
b24gZXhhY3RseSB3aGVyZSBpdCBpcywgZXZlbiBpZiBpdCBpcyBvdXQgb2YgYm91bmRzLgogICAg
IG1fc2NhbGVBbmltYXRpb24tPnN0b3AoKTsKIH0KIAotYm9vbCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnBpbmNoR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Citib29sIFF0Vmlld3BvcnRIYW5k
bGVyOjpwaW5jaEdlc3R1cmVBY3RpdmUoKSBjb25zdAogewogICAgIHJldHVybiBtX3BpbmNoU3Rh
cnRTY2FsZSA+IDA7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5j
aEdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlU3RhcnRlZChjb25z
dCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcykKIHsKICAgICAvLyBU
aGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCiAg
ICAgQVNTRVJUKG1faGFkVXNlckludGVyYWN0aW9uKTsKQEAgLTYzNiw3ICs2MzYsNyBAQCB2b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHCiAgICAgbV9waW5jaFN0YXJ0U2Nh
bGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYm
IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzLCBxcmVhbCB0b3RhbFNjYWxlRmFjdG9y
KQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25z
dCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwgdG90YWxT
Y2FsZUZhY3RvcikKIHsKICAgICBBU1NFUlQobV9zdXNwZW5kQ291bnQpOwogCkBAIC02NTgsNyAr
NjU4LDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoRwogICAgIG1f
dmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkg
LSBwb3NpdGlvbkRpZmYpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
cGluY2hHZXN0dXJlRW5kZWQoKQordm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJl
RW5kZWQoKQogewogICAgIEFTU0VSVChtX3N1c3BlbmRDb3VudCk7CiAKQEAgLTY3MSwxMyArNjcx
LDEzIEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEcKICAgICBtX3Nj
YWxlVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsgLy8gQ2xlYXIgYWZ0ZXIgc3RhcnRpbmcgcG90ZW50
aWFsIGFuaW1hdGlvbiwgd2hpY2ggdGFrZXMgb3ZlciBkZWZlcnJpbmcuCiB9CiAKLXZvaWQgUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQordm9pZCBR
dFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlQ2FuY2VsbGVkKCkKIHsKICAgICBtX3BpbmNo
U3RhcnRTY2FsZSA9IC0xOwogICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOwogfQog
Ci1RUmVjdCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdAorUVJlY3QgUXRWaWV3cG9ydEhhbmRsZXI6OnZpc2libGVDb250ZW50c1JlY3QoKSBj
b25zdAogewogICAgIGNvbnN0IFFSZWN0RiB2aXNpYmxlUmVjdChtX3ZpZXdwb3J0SXRlbS0+Ym91
bmRpbmdSZWN0KCkuaW50ZXJzZWN0ZWQobV9wYWdlSXRlbS0+Ym91bmRpbmdSZWN0KCkpKTsKIApA
QCAtNjg2LDcgKzY4Niw3IEBAIFFSZWN0IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6dmlz
aWIKICAgICByZXR1cm4gUVJlY3QoZmxvb3IobWFwcGVkUmVjdC54KCkpLCBmbG9vcihtYXBwZWRS
ZWN0LnkoKSksIGZsb29yKG1hcHBlZFJlY3Qud2lkdGgoKSksIGZsb29yKG1hcHBlZFJlY3QuaGVp
Z2h0KCkpKTsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmluZm9ybVZp
c2libGVDb250ZW50Q2hhbmdlKGNvbnN0IFFQb2ludEYmIHRyYWplY3RvcnlWZWN0b3IpCit2b2lk
IFF0Vmlld3BvcnRIYW5kbGVyOjppbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShjb25zdCBRUG9p
bnRGJiB0cmFqZWN0b3J5VmVjdG9yKQogewogICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdB
cmVhID0gbV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7CiAgICAgaWYgKCFkcmF3aW5nQXJl
YSkKQEAgLTcwOCw3ICs3MDgsNyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6
aW5mb3JtCiAgICAgbV9wYWdlSXRlbS0+dXBkYXRlKCk7CiB9CiAKLXZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjp2aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpCit2b2lkIFF0Vmlld3Bv
cnRIYW5kbGVyOjp2aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpCiB7CiAgICAgUVNpemUgdmlld3Bv
cnRTaXplID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUoKTsK
IApAQCAtNzI3LDcgKzcyNyw3IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp2
aWV3cG8KICAgICBpbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShRUG9pbnRGKCkpOwogfQogCi12
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVDb250ZW50KGNvbnN0IFFQb2lu
dEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKQordm9pZCBRdFZpZXdw
b3J0SGFuZGxlcjo6c2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRp
bmF0ZXMsIHFyZWFsIGNzc1NjYWxlKQogewogICAgIFFQb2ludEYgb2xkUGluY2hDZW50ZXJPblZp
ZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NTQ29v
cmRpbmF0ZXMpOwogICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUoaXRlbVNjYWxlRnJv
bUNTUyhjc3NTY2FsZSkpOwpAQCAtNzM4LDYgKzczOCw2IEBAIHZvaWQgUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjpzY2FsZUMKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNpbmNsdWRl
ICJtb2NfUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCIKKyNpbmNsdWRlICJtb2NfUXRW
aWV3cG9ydEhhbmRsZXIuY3BwIgogCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFZpZXdwb3J0SGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oCShyZXZpc2lvbiAxMTkzOTIpCShmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaDoxMTkz
OTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHly
aWdodCAoQykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbkB3ZWJraXQub3JnPgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmVfaAorI2RlZmluZSBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmVfaAorCisjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5jbHVk
ZSA8UXRDb3JlL1FSZWN0Rj4KKyNpbmNsdWRlIDxRdENvcmUvUVZhcmlhbnQ+CisjaW5jbHVkZSA8
UXRDb3JlL1FWYXJpYW50QW5pbWF0aW9uPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlld3BvcnRBcmd1
bWVudHMuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK1FUX0JFR0lOX05BTUVTUEFDRQor
Y2xhc3MgUVBvaW50RjsKK2NsYXNzIFFRdWlja1dlYlBhZ2U7CitjbGFzcyBRUXVpY2tXZWJWaWV3
OworY2xhc3MgUVdoZWVsRXZlbnQ7CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFFXZWJLaXRU
ZXN0OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3Mg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlcjsKKworY2xhc3MgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoV2ViUGFnZVByb3h5KiwgUVF1aWNrV2ViVmlldyosIFFR
dWlja1dlYlBhZ2UqKTsKKyAgICB+UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKCk7CisKKyAg
ICB2b2lkIHRvdWNoQmVnaW4oKTsKKyAgICB2b2lkIHRvdWNoRW5kKCk7CisKKyAgICBib29sIHNj
cm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQgY2FuY2VsU2Nyb2xsQW5pbWF0
aW9uKCk7CisKKyAgICBib29sIHBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdDsKKyAgICB2b2lkIHBh
bkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1l
c3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBv
aW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgdm9pZCBw
YW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVz
dGFtcE1pbGxpcyk7CisgICAgdm9pZCBwYW5HZXN0dXJlQ2FuY2VsbGVkKCk7CisKKyAgICBib29s
IHNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7CisgICAgdm9pZCBpbnRlcnJ1cHRTY2FsZUFu
aW1hdGlvbigpOworCisgICAgYm9vbCBwaW5jaEdlc3R1cmVBY3RpdmUoKSBjb25zdDsKKyAgICB2
b2lkIHBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdw
b3J0Q29vcmRpbmF0ZXMpOworICAgIHZvaWQgcGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25z
dCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwgdG90YWxT
Y2FsZUZhY3Rvcik7CisgICAgdm9pZCBwaW5jaEdlc3R1cmVFbmRlZCgpOworICAgIHZvaWQgcGlu
Y2hHZXN0dXJlQ2FuY2VsbGVkKCk7CisKKyAgICB2b2lkIHpvb21Ub0FyZWFHZXN0dXJlRW5kZWQo
Y29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsKKyAg
ICB2b2lkIGZvY3VzRWRpdGFibGVBcmVhKGNvbnN0IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25zdCBR
UmVjdEYmIHRhcmdldEFyZWEpOworCisgICAgdm9pZCBwYWdlQ29udGVudFBvc2l0aW9uUmVxdWVz
dGVkKGNvbnN0IFFQb2ludCYgcG9zaXRpb24pOworCisgICAgdm9pZCB2aWV3cG9ydEl0ZW1TaXpl
Q2hhbmdlZCgpOworICAgIHZvaWQgdmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZChjb25zdCBXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKKyAgICB2b2lkIGluZm9ybVZpc2libGVDb250ZW50
Q2hhbmdlKGNvbnN0IFFQb2ludEYmIHRyYWplY3RvcnkgPSBRUG9pbnRGKCkpOworICAgIHZvaWQg
cGFnZUNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1NpemUsIGNvbnN0IFFTaXpl
JiB2aWV3cG9ydFNpemUpOworCitwcml2YXRlIFFfU0xPVFM6CisgICAgLy8gUmVzcG9uZCB0byBj
aGFuZ2VzIG9mIHBvc2l0aW9uIHRoYXQgYXJlIG5vdCBkcml2ZW4gYnkgdXMuCisgICAgdm9pZCBw
YWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpOworCisgICAgdm9pZCBzY2FsZUFuaW1hdGlvblN0YXRl
Q2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0
YXRlKTsKKyAgICB2b2lkIHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50IHZhbHVl
KTsKKworICAgIHZvaWQgZmxpY2tNb3ZlU3RhcnRlZCgpOyAvLyBDYWxsZWQgd2hlbiBwYW5uaW5n
IHN0YXJ0cy4KKyAgICB2b2lkIGZsaWNrTW92ZUVuZGVkKCk7IC8vICAgQ2FsbGVkIHdoZW4gcGFu
bmluZyAoKyBraW5ldGljIGFuaW1hdGlvbikgZW5kcy4KKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjsKKyAgICBmcmllbmQgY2xhc3MgOjpRV2ViS2l0
VGVzdDsKKworICAgIFdlYlBhZ2VQcm94eSogY29uc3QgbV93ZWJQYWdlUHJveHk7CisgICAgUVF1
aWNrV2ViVmlldyogY29uc3QgbV92aWV3cG9ydEl0ZW07CisgICAgUVF1aWNrV2ViUGFnZSogY29u
c3QgbV9wYWdlSXRlbTsKKworICAgIHFyZWFsIGNzc1NjYWxlRnJvbUl0ZW0ocXJlYWwpIGNvbnN0
OworICAgIHFyZWFsIGl0ZW1TY2FsZUZyb21DU1MocXJlYWwpIGNvbnN0OworICAgIHFyZWFsIGl0
ZW1Db29yZEZyb21DU1MocXJlYWwpIGNvbnN0OworICAgIFFSZWN0RiBpdGVtUmVjdEZyb21DU1Mo
Y29uc3QgUVJlY3RGJikgY29uc3Q7CisKKyAgICBxcmVhbCBpbm5lckJvdW5kZWRDU1NTY2FsZShx
cmVhbCkgY29uc3Q7CisgICAgcXJlYWwgb3V0ZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwpIGNvbnN0
OworCisgICAgdm9pZCBzZXRDU1NTY2FsZShxcmVhbCk7CisgICAgcXJlYWwgY3VycmVudENTU1Nj
YWxlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJl
Y3RGJik7CisgICAgdm9pZCBhbmltYXRlUGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYm
KTsKKworICAgIFFSZWN0IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKKyAgICBRUmVjdEYg
bmVhcmVzdFZhbGlkQm91bmRzKCkgY29uc3Q7CisKKyAgICBRUmVjdEYgY29tcHV0ZVBvc1Jhbmdl
Rm9yUGFnZUl0ZW1BdFNjYWxlKHFyZWFsIGl0ZW1TY2FsZSkgY29uc3Q7CisgICAgdm9pZCBzY2Fs
ZUNvbnRlbnQoY29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluYXRlcywgcXJlYWwgY3Nz
U2NhbGUpOworCisgICAgdm9pZCBzdXNwZW5kUGFnZUNvbnRlbnQoKTsKKyAgICB2b2lkIHJlc3Vt
ZVBhZ2VDb250ZW50KCk7CisKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgbV9yYXdB
dHRyaWJ1dGVzOworCisgICAgYm9vbCBtX2FsbG93c1VzZXJTY2FsaW5nOworICAgIHFyZWFsIG1f
bWluaW11bVNjYWxlOworICAgIHFyZWFsIG1fbWF4aW11bVNjYWxlOworICAgIHFyZWFsIG1fZGV2
aWNlUGl4ZWxSYXRpbzsKKworICAgIFFTaXplIG1fbGF5b3V0U2l6ZTsKKworICAgIGludCBtX3N1
c3BlbmRDb3VudDsKKyAgICBib29sIG1faGFzU3VzcGVuZGVkQ29udGVudDsKKworICAgIE93blB0
cjxWaWV3cG9ydFVwZGF0ZURlZmVycmVyPiBtX3NjYWxlVXBkYXRlRGVmZXJyZXI7CisgICAgT3du
UHRyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXI7CisgICAg
T3duUHRyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fdG91Y2hVcGRhdGVEZWZlcnJlcjsKKyAg
ICBPd25QdHI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9hbmltYXRpb25VcGRhdGVEZWZlcnJl
cjsKKworICAgIGJvb2wgbV9oYWRVc2VySW50ZXJhY3Rpb247CisKKyAgICBjbGFzcyBTY2FsZUFu
aW1hdGlvbiA6IHB1YmxpYyBRVmFyaWFudEFuaW1hdGlvbiB7CisgICAgcHVibGljOgorICAgICAg
ICBTY2FsZUFuaW1hdGlvbihRT2JqZWN0KiBwYXJlbnQgPSAwKQorICAgICAgICAgICAgOiBRVmFy
aWFudEFuaW1hdGlvbihwYXJlbnQpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDdXJyZW50VmFsdWUoY29uc3QgUVZhcmlhbnQmKSB7IH0KKyAgICB9OworCisgICAg
c3RydWN0IFNjYWxlU3RhY2tJdGVtIHsKKyAgICAgICAgU2NhbGVTdGFja0l0ZW0ocXJlYWwgc2Nh
bGUsIHFyZWFsIHhQb3NpdGlvbikKKyAgICAgICAgICAgIDogc2NhbGUoc2NhbGUpCisgICAgICAg
ICAgICAsIHhQb3NpdGlvbih4UG9zaXRpb24pCisgICAgICAgIHsgfQorCisgICAgICAgIHFyZWFs
IHNjYWxlOworICAgICAgICBxcmVhbCB4UG9zaXRpb247CisgICAgfTsKKworICAgIFNjYWxlQW5p
bWF0aW9uKiBtX3NjYWxlQW5pbWF0aW9uOworICAgIFFQb2ludEYgbV9sYXN0UGluY2hDZW50ZXJJ
blZpZXdwb3J0Q29vcmRpbmF0ZXM7CisgICAgUVBvaW50RiBtX2xhc3RTY3JvbGxQb3NpdGlvbjsK
KyAgICBxcmVhbCBtX3BpbmNoU3RhcnRTY2FsZTsKKyAgICBxcmVhbCBtX2xhc3RDb21taXR0ZWRT
Y2FsZTsKKyAgICBRUmVjdEYgbV9sYXN0VmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBxcmVhbCBt
X3pvb21PdXRTY2FsZTsKKyAgICBRTGlzdDxTY2FsZVN0YWNrSXRlbT4gbV9zY2FsZVN0YWNrOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmVfaApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3Bv
cnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
Vmlld3BvcnRIYW5kbGVyLmgJKHJldmlzaW9uIDExOTM5MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSw4ICsx
OSw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lX2gK
LSNkZWZpbmUgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lX2gKKyNpZm5kZWYgUXRWaWV3cG9y
dEhhbmRsZXJfaAorI2RlZmluZSBRdFZpZXdwb3J0SGFuZGxlcl9oCiAKICNpbmNsdWRlIDxRdENv
cmUvUU9iamVjdD4KICNpbmNsdWRlIDxRdENvcmUvUVJlY3RGPgpAQCAtNDMsMTIgKzQzLDEyIEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgVmlld3BvcnRV
cGRhdGVEZWZlcnJlcjsKIAotY2xhc3MgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lIDogcHVi
bGljIFFPYmplY3QgeworY2xhc3MgUXRWaWV3cG9ydEhhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7
CiAgICAgUV9PQkpFQ1QKIAogcHVibGljOgotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZShXZWJQYWdlUHJveHkqLCBRUXVpY2tXZWJWaWV3KiwgUVF1aWNrV2ViUGFnZSopOwotICAgIH5R
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoKTsKKyAgICBRdFZpZXdwb3J0SGFuZGxlcihXZWJQ
YWdlUHJveHkqLCBRUXVpY2tXZWJWaWV3KiwgUVF1aWNrV2ViUGFnZSopOworICAgIH5RdFZpZXdw
b3J0SGFuZGxlcigpOwogCiAgICAgdm9pZCB0b3VjaEJlZ2luKCk7CiAgICAgdm9pZCB0b3VjaEVu
ZCgpOwpAQCAtMTcyLDQgKzE3Miw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCi0jZW5kaWYgLy8gUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lX2gKKyNlbmRpZiAvLyBR
dFZpZXdwb3J0SGFuZGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcAkocmV2aXNpb24g
MTE5MzkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8YmVuamFtaW5A
d2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgotI2luY2x1
ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5jbHVk
ZSAicXF1aWNrd2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCi0jaW5j
bHVkZSAicXdlYmtpdHRlc3RfcC5oIgotI2luY2x1ZGUgPFFQb2ludEY+Ci0jaW5jbHVkZSA8UVRy
YW5zZm9ybT4KLSNpbmNsdWRlIDxRV2hlZWxFdmVudD4KLSNpbmNsdWRlIDxRdFF1aWNrL3FxdWlj
a2l0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotc3RhdGljIGNvbnN0IGludCBrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxpcyA9IDI1
MDsKLQotLy8gVVBEQVRFIERFRkVSUklORyAoU1VTUEVORC9SRVNVTUUpCi0vLyA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBXaGVuIGludGVyYWN0aW9uIHdpdGggdGhl
IGNvbnRlbnQsIGVpdGhlciBieSBhbmltYXRpbmcgb3IgYnkgdGhlIGhhbmQgb2YgdGhlIHVzZXIs
Ci0vLyBpdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHNtb290aCBhbmltYXRpb25zIG9mIGF0IGxl
YXN0IDYwZnBzIGluIG9yZGVyIHRvIGdpdmUgYQotLy8gZ29vZCB1c2VyIGV4cGVyaWVuY2UuCi0v
LwotLy8gSW4gb3JkZXIgdG8gZG8gdGhpcyB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdW5rbm93biBm
YWN0b3JzLiBUaGVzZSBpbmNsdWRlIGRldmljZQotLy8gc2Vuc29ycyAoZ2VvbG9jYXRpb24sIG9y
aWVudGF0aW9uIHVwZGF0ZXMgZXRjKSwgQ1NTMyBhbmltYXRpb25zLCBKYXZhU2NyaXB0Ci0vLyBl
eGVjdHV0aW9uLCBzdWIgcmVzb3VyY2UgbG9hZHMgZXRjLiBXZSBkbyB0aGlzIGJ5IGVtaXR0aW5n
IHN1c3BlbmQgYW5kIHJlc3VtZQotLy8gc2lnbmFscywgd2hpY2ggYXJlIHRoZW4gaGFuZGxlZCBi
eSB0aGUgdmlld3BvcnQgYW5kIHByb3BhZ2F0ZXMgdG8gdGhlIHJpZ2h0IHBsYWNlLgotLy8KLS8v
IEZvciB0aGlzIHJlYXNvbiB0aGUgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCBtdXN0IGJl
IHVzZWQgd2hlbiB3ZSBpbnRlcmFjdAotLy8gb3IgYW5pbWF0ZSB0aGUgY29udGVudC4KLS8vCi0v
LyBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB3aGVuIHdlIHVwZGF0ZSBjb250ZW50IHByb3BlcnRp
ZXMsIHdlIG1pZ2h0IHJlY2VpdmUgbm90aWZ5Ci0vLyBzaWduYWxzIHNlbmQgbXkgdGhlIGNvbnRl
bnQgaXRlbSBpdHNlbGYsIGFuZCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBub3QgYWN0IG9uCi0v
LyB0aGVzZSB1bmNvbmRpdGlvbmFsbHkuIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUgcGluY2gg
em9vbSwgd2hpY2ggY2hhbmdlcyB0aGUKLS8vIHBvc2l0aW9uIGFuZCB3aWxsIHRodXMgcmVzdWx0
IGluIGEgUVF1aWNrV2ViUGFnZTo6Z2VvbWV0cnlDaGFuZ2VkKCkgc2lnbmFsIGdldHRpbmcKLS8v
IGVtaXR0ZWQuCi0vLwotLy8gSWYgc29tZXRoaW5nIHNob3VsZCBvbmx5IGJlIGV4ZWN1dGVkIGR1
cmluZyB1cGRhdGUgZGVmZXJyaW5nLCBpdCBpcyBwb3NzaWJsZSB0bwotLy8gY2hlY2sgZm9yIHRo
YXQgdXNpbmcgQVNTRVJUKG1fc3VzcGVuZENvdW50KS4KLQotY2xhc3MgVmlld3BvcnRVcGRhdGVE
ZWZlcnJlciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdXNwZW5kQ29udGVudEZsYWcgeyBEZWZlclVw
ZGF0ZSwgRGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCB9OwotICAgIFZpZXdwb3J0VXBkYXRl
RGVmZXJyZXIoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKiBlbmdpbmUsIFN1c3BlbmRDb250
ZW50RmxhZyBzdXNwZW5kQ29udGVudEZsYWcgPSBEZWZlclVwZGF0ZSkKLSAgICAgICAgOiBlbmdp
bmUoZW5naW5lKQotICAgIHsKLSAgICAgICAgZW5naW5lLT5tX3N1c3BlbmRDb3VudCsrOwotCi0g
ICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3VzcGVuZCBjb250ZW50IGZvciBpbW1lZGlh
dGUgdXBkYXRlcwotICAgICAgICAvLyBvbmx5IGR1cmluZyBhbmltYXRpb25zIG9yIGxvbmdlciBn
ZXN0dXJlcy4KLSAgICAgICAgaWYgKHN1c3BlbmRDb250ZW50RmxhZyA9PSBEZWZlclVwZGF0ZUFu
ZFN1c3BlbmRDb250ZW50KQotICAgICAgICAgICAgZW5naW5lLT5zdXNwZW5kUGFnZUNvbnRlbnQo
KTsKLSAgICB9Ci0KLSAgICB+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcigpCi0gICAgewotICAgICAg
ICBpZiAoLS0oZW5naW5lLT5tX3N1c3BlbmRDb3VudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgZW5naW5lLT5yZXN1bWVQYWdlQ29udGVudCgpOwotCi0gICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IHdpbGwgYmUgcmVxdWVzdGVk
LgotICAgICAgICBlbmdpbmUtPmluZm9ybVZpc2libGVDb250ZW50Q2hhbmdlKFFQb2ludEYoKSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogY29u
c3QgZW5naW5lOwotfTsKLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnN1c3Bl
bmRQYWdlQ29udGVudCgpCi17Ci0gICAgaWYgKG1faGFzU3VzcGVuZGVkQ29udGVudCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9oYXNTdXNwZW5kZWRDb250ZW50ID0gdHJ1ZTsKLSAgICBtX3dl
YlBhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci19Ci0K
LXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpyZXN1bWVQYWdlQ29udGVudCgpCi17
Ci0gICAgaWYgKCFtX2hhc1N1c3BlbmRlZENvbnRlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2hhc1N1c3BlbmRlZENvbnRlbnQgPSBmYWxzZTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+cmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0KLQotLy8gQSBmbG9hdGluZyBwb2lu
dCBjb21wYXJlIHdpdGggYWJzb2x1dGUgZXJyb3IuCi1zdGF0aWMgaW5saW5lIGJvb2wgZnV6enlD
b21wYXJlKHFyZWFsIGEsIHFyZWFsIGIsIHFyZWFsIGVwc2lsb24pCi17Ci0gICAgcmV0dXJuIHFB
YnMoYSAtIGIpIDwgZXBzaWxvbjsKLX0KLQotaW5saW5lIHFyZWFsIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6Y3NzU2NhbGVGcm9tSXRlbShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGl0ZW1TY2FsZSAvIG1fZGV2aWNlUGl4ZWxSYXRpbzsKLX0KLQotaW5saW5lIHFy
ZWFsIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6aXRlbVNjYWxlRnJvbUNTUyhxcmVhbCBj
c3NTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3NzU2NhbGUgKiBtX2RldmljZVBpeGVsUmF0
aW87Ci19Ci0KLWlubGluZSBxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Oml0ZW1D
b29yZEZyb21DU1MocXJlYWwgdmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHZhbHVlICogbV9k
ZXZpY2VQaXhlbFJhdGlvOwotfQotCi1zdGF0aWMgaW5saW5lIFFQb2ludEYgYm91bmRQb3NpdGlv
bihjb25zdCBRUG9pbnRGIG1pblBvc2l0aW9uLCBjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgY29u
c3QgUVBvaW50RiYgbWF4UG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIFFQb2ludEYocUJvdW5kKG1p
blBvc2l0aW9uLngoKSwgcG9zaXRpb24ueCgpLCBtYXhQb3NpdGlvbi54KCkpLAotICAgICAgICAg
ICAgICAgICAgIHFCb3VuZChtaW5Qb3NpdGlvbi55KCksIHBvc2l0aW9uLnkoKSwgbWF4UG9zaXRp
b24ueSgpKSk7Ci19Ci0KLWlubGluZSBRUmVjdEYgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
OjppdGVtUmVjdEZyb21DU1MoY29uc3QgUVJlY3RGJiBjc3NSZWN0KSBjb25zdAotewotICAgIFFS
ZWN0RiBpdGVtUmVjdDsKLQotICAgIGl0ZW1SZWN0LnNldFgoaXRlbUNvb3JkRnJvbUNTUyhjc3NS
ZWN0LngoKSkpOwotICAgIGl0ZW1SZWN0LnNldFkoaXRlbUNvb3JkRnJvbUNTUyhjc3NSZWN0Lnko
KSkpOwotICAgIGl0ZW1SZWN0LnNldFdpZHRoKGl0ZW1Db29yZEZyb21DU1MoY3NzUmVjdC53aWR0
aCgpKSk7Ci0gICAgaXRlbVJlY3Quc2V0SGVpZ2h0KGl0ZW1Db29yZEZyb21DU1MoY3NzUmVjdC5o
ZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGl0ZW1SZWN0OwotfQotCi1RdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmU6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShXZWJLaXQ6OldlYlBhZ2VQ
cm94eSogcHJveHksIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSwgUVF1aWNrV2ViUGFnZSog
cGFnZUl0ZW0pCi0gICAgOiBtX3dlYlBhZ2VQcm94eShwcm94eSkKLSAgICAsIG1fdmlld3BvcnRJ
dGVtKHZpZXdwb3J0SXRlbSkKLSAgICAsIG1fcGFnZUl0ZW0ocGFnZUl0ZW0pCi0gICAgLCBtX2Fs
bG93c1VzZXJTY2FsaW5nKGZhbHNlKQotICAgICwgbV9taW5pbXVtU2NhbGUoMSkKLSAgICAsIG1f
bWF4aW11bVNjYWxlKDEpCi0gICAgLCBtX2RldmljZVBpeGVsUmF0aW8oMSkKLSAgICAsIG1fc3Vz
cGVuZENvdW50KDApCi0gICAgLCBtX2hhc1N1c3BlbmRlZENvbnRlbnQoZmFsc2UpCi0gICAgLCBt
X2hhZFVzZXJJbnRlcmFjdGlvbihmYWxzZSkKLSAgICAsIG1fc2NhbGVBbmltYXRpb24obmV3IFNj
YWxlQW5pbWF0aW9uKHRoaXMpKQotICAgICwgbV9waW5jaFN0YXJ0U2NhbGUoLTEpCi0gICAgLCBt
X2xhc3RDb21taXR0ZWRTY2FsZSgtMSkKLSAgICAsIG1fem9vbU91dFNjYWxlKDAuMCkKLXsKLSAg
ICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBTTE9U
KGZsaWNrTW92ZVN0YXJ0ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0
KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRFbmRlZCgpKSwgU0xPVChmbGlja01vdmVF
bmRlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotCi0gICAgY29ubmVjdChtX3NjYWxlQW5p
bWF0aW9uLCBTSUdOQUwodmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksCi0gICAgICAgICAgICBTTE9U
KHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksIFF0OjpEaXJlY3RDb25uZWN0
aW9uKTsKLSAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTChzdGF0ZUNoYW5nZWQo
UUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLAot
ICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmlt
YXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSksIFF0OjpEaXJlY3RDb25u
ZWN0aW9uKTsKLX0KLQotUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp+UXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lKCkKLXsKLX0KLQotcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjppbm5lckJvdW5kZWRDU1NTY2FsZShxcmVhbCBjc3NTY2FsZSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gcUJvdW5kKG1fbWluaW11bVNjYWxlLCBjc3NTY2FsZSwgbV9tYXhpbXVtU2NhbGUpOwot
fQotCi1xcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Om91dGVyQm91bmRlZENTU1Nj
YWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAotewotICAgIGlmIChtX2FsbG93c1VzZXJTY2FsaW5n
KSB7Ci0gICAgICAgIC8vIEJvdW5kZWQgYnkgWzAuMSwgMTAuMF0gbGlrZSB0aGUgdmlld3BvcnQg
bWV0YSBjb2RlIGluIFdlYkNvcmUuCi0gICAgICAgIHFyZWFsIGhhcmRNaW4gPSBxTWF4PHFyZWFs
PigwLjEsIHFyZWFsKDAuNSkgKiBtX21pbmltdW1TY2FsZSk7Ci0gICAgICAgIHFyZWFsIGhhcmRN
YXggPSBxTWluPHFyZWFsPigxMCwgcXJlYWwoMi4wKSAqIG1fbWF4aW11bVNjYWxlKTsKLSAgICAg
ICAgcmV0dXJuIHFCb3VuZChoYXJkTWluLCBjc3NTY2FsZSwgaGFyZE1heCk7Ci0gICAgfQotICAg
IHJldHVybiBpbm5lckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7Ci19Ci0KLXZvaWQgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjp2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKGNvbnN0IFdl
YkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKLXsKLSAgICBtX3Jhd0F0
dHJpYnV0ZXMgPSBuZXdBdHRyaWJ1dGVzOwotICAgIFdlYkNvcmU6OnJlc3RyaWN0U2NhbGVGYWN0
b3JUb0luaXRpYWxTY2FsZUlmTm90VXNlclNjYWxhYmxlKG1fcmF3QXR0cmlidXRlcyk7Ci0KLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZXNldHRpbmcgaGVyZSBpcyB3cm9uZywgaXQgc2hvdWxk
IGhhcHBlbiBvbmx5IGZvciB0aGUgZmlyc3QKLSAgICAgICAgLy8gdmlld3BvcnQgY2hhbmdlIGZv
ciBhIGdpdmVuIHBhZ2UgYW5kIGZpcnN0IHdoZW4gd2UgcGFpbnQgdGhlIHBhZ2UgZm9yCi0gICAg
ICAgIC8vIHRoZSBmaXJzdCB0aW1lLgotCi0gICAgICAgIG1faGFkVXNlckludGVyYWN0aW9uID0g
ZmFsc2U7Ci0KLSAgICAgICAgbV96b29tT3V0U2NhbGUgPSAwLjA7Ci0gICAgICAgIG1fc2NhbGVT
dGFjay5jbGVhcigpOwotCi0gICAgICAgIC8vIFRoaXMgcGFydCBiZWxvdyBzaG91bGQgZ28gZnVs
bHkgYXdheSB3aGVuIHRoZSBhYm92ZSBwbGFuIGlzIGltcGxlbWVudGVkLgotCi0gICAgICAgIG1f
dmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwotICAgICAgICBtX3NjYWxlQW5pbWF0aW9uLT5z
dG9wKCk7Ci0KLSAgICAgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci0gICAgICAg
IG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKLSAgICAgICAgbV90b3VjaFVwZGF0ZURl
ZmVycmVyLmNsZWFyKCk7Ci0gICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIuY2xlYXIo
KTsKLSAgICAgICAgQVNTRVJUKCFtX3N1c3BlbmRDb3VudCk7Ci0gICAgICAgIEFTU0VSVCghbV9o
YXNTdXNwZW5kZWRDb250ZW50KTsKLSAgICB9Ci0KLSAgICBtX2RldmljZVBpeGVsUmF0aW8gPSBt
X3Jhd0F0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbzsgLy8gU2hvdWxkIHJldHVybiB2YWx1ZSBm
cm9tIHRoZSB3ZWJQYWdlUHJveHkuCi0gICAgbV9hbGxvd3NVc2VyU2NhbGluZyA9ICEhbV9yYXdB
dHRyaWJ1dGVzLnVzZXJTY2FsYWJsZTsKLSAgICBtX21pbmltdW1TY2FsZSA9IG1fcmF3QXR0cmli
dXRlcy5taW5pbXVtU2NhbGU7Ci0gICAgbV9tYXhpbXVtU2NhbGUgPSBtX3Jhd0F0dHJpYnV0ZXMu
bWF4aW11bVNjYWxlOwotCi0gICAgaWYgKCFtX2hhZFVzZXJJbnRlcmFjdGlvbiAmJiAhbV9oYXNT
dXNwZW5kZWRDb250ZW50KSB7Ci0gICAgICAgIEFTU0VSVChtX3BpbmNoU3RhcnRTY2FsZSA9PSAt
MSk7Ci0gICAgICAgIC8vIEVtaXRzIGNvbnRlbnRzU2NhbGVDaGFuZ2VkKCk7Ci0gICAgICAgIHNl
dENTU1NjYWxlKG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUpOwotICAgIH0KLQotICAgIGVt
aXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPnZpZXdwb3J0Q2hhbmdl
ZCgpOwotCi0gICAgLy8gSWYgdGhlIHdlYiBhcHAgc3VjY2Vzc2l2ZWx5IGNoYW5nZXMgdGhlIHZp
ZXdwb3J0IG9uIHB1cnBvc2UKLSAgICAvLyBpdCB3YW50cyB0byBiZSBpbiBjb250cm9sIGFuZCB3
ZSBzaG91bGQgZGlzYWJsZSBhbmltYXRpb25zLgotICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIg
Z3VhcmQodGhpcyk7Ci0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRCb3Vu
ZHMoKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYWdlQ29udGVu
dHNTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6ZSwgY29uc3QgUVNpemUmIHZpZXdwb3J0
U2l6ZSkKLXsKLSAgICBmbG9hdCBtaW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpjb21wdXRlTWluaW11
bVNjYWxlRmFjdG9yRm9yQ29udGVudENvbnRhaW5lZChtX3Jhd0F0dHJpYnV0ZXMsIHZpZXdwb3J0
U2l6ZSwgbmV3U2l6ZSk7Ci0KLSAgICBpZiAoIXFGdXp6eUNvbXBhcmUobWluaW11bVNjYWxlLCBt
X3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlKSkgewotICAgICAgICBtX21pbmltdW1TY2FsZSA9
IG1pbmltdW1TY2FsZTsKLSAgICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFs
KCktPnRlc3QoKS0+dmlld3BvcnRDaGFuZ2VkKCk7Ci0KLSAgICAgICAgaWYgKCFtX2hhZFVzZXJJ
bnRlcmFjdGlvbiAmJiAhbV9oYXNTdXNwZW5kZWRDb250ZW50KSB7Ci0gICAgICAgICAgICAvLyBF
bWl0cyBjb250ZW50c1NjYWxlQ2hhbmdlZCgpOwotICAgICAgICAgICAgc2V0Q1NTU2NhbGUobWlu
aW11bVNjYWxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEVtaXQgZm9yIHRlc3Rpbmcg
cHVycG9zZXMsIHNvIHRoYXQgaXQgY2FuIGJlIHZlcmlmaWVkIHRoYXQKLSAgICAvLyB3ZSBkaWRu
J3QgZG8gc2NhbGUgYWRqdXN0bWVudC4KLSAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmlt
ZW50YWwoKS0+dGVzdCgpLT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7Ci0KLSAgICBWaWV3cG9y
dFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOwotICAgIHNldFBhZ2VJdGVtUmVjdFZpc2libGUo
bmVhcmVzdFZhbGlkQm91bmRzKCkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6c2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGl0ZW1SZWN0KQotewot
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdXNwZW5kQ291bnQsCi0gICAgICAgICJzZXRQYWdl
SXRlbVJlY3RWaXNpYmxlIGhhcyB0byBiZSBndWFyZGVkIHVzaW5nIGEgVmlld3BvcnRVcGRhdGVE
ZWZlcnJlci4iKTsKLQotICAgIGlmIChpdGVtUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHFyZWFsIGl0ZW1TY2FsZSA9IG1fdmlld3BvcnRJdGVtLT53aWR0aCgpIC8gaXRl
bVJlY3Qud2lkdGgoKTsKLQotICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUoaXRlbVNj
YWxlKTsKLQotICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0aGVyIHdpdGggdGhl
IHNjYWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNjYWxlCi0g
ICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgcGFnZSBwb3NpdGlvbiAoZGlzcGxhY2VtZW50IG9uIHRo
ZSBmbGlja2FibGUgY29udGVudEl0ZW0gYmVjYXVzZSBvZiBhZGRpdGlvbmFsIGl0ZW1zKS4KLSAg
ICBRUG9pbnRGIG5ld1Bvc2l0aW9uKG1fcGFnZUl0ZW0tPnBvcygpICsgKGl0ZW1SZWN0LnRvcExl
ZnQoKSAqIGl0ZW1TY2FsZSkpOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3Mo
bmV3UG9zaXRpb24pOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6YW5p
bWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVjdCkKLXsKLSAgICBB
U1NFUlQobV9zY2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlN0
b3BwZWQpOwotCi0gICAgQVNTRVJUKCFzY3JvbGxBbmltYXRpb25BY3RpdmUoKSk7Ci0gICAgaWYg
KHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRUmVjdEYg
Y3VycmVudFBhZ2VJdGVtUmVjdFZpc2libGUgPSBtX3ZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvV2Vi
Q29udGVudChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkpOwotICAgIGlmIChpdGVtUmVj
dCA9PSBjdXJyZW50UGFnZUl0ZW1SZWN0VmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9zY2FsZUFuaW1hdGlvbi0+c2V0RHVyYXRpb24oa1NjYWxlQW5pbWF0aW9uRHVyYXRpb25NaWxs
aXMpOwotICAgIG1fc2NhbGVBbmltYXRpb24tPnNldEVhc2luZ0N1cnZlKFFFYXNpbmdDdXJ2ZTo6
T3V0Q3ViaWMpOwotCi0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0U3RhcnRWYWx1ZShjdXJyZW50
UGFnZUl0ZW1SZWN0VmlzaWJsZSk7Ci0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0RW5kVmFsdWUo
aXRlbVJlY3QpOwotCi0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c3RhcnQoKTsKLX0KLQotdm9pZCBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmZsaWNrTW92ZVN0YXJ0ZWQoKQotewotICAgIFFf
QVNTRVJUKG1fdmlld3BvcnRJdGVtLT5pc01vdmluZygpKTsKLSAgICBtX3Njcm9sbFVwZGF0ZURl
ZmVycmVyID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3Bv
cnRVcGRhdGVEZWZlcnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwotCi0gICAg
bV9sYXN0U2Nyb2xsUG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpOwotICAg
IGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIFNMT1Qo
cGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOwotICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0s
IFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQo
KSkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZmxpY2tNb3ZlRW5k
ZWQoKQotewotICAgIFFfQVNTRVJUKCFtX3ZpZXdwb3J0SXRlbS0+aXNNb3ZpbmcoKSk7Ci0gICAg
Ly8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBlbmQgb2YgdGhlIHBhbiBvciBwYW4ga2lu
ZXRpYyBhbmltYXRpb24uCi0gICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotCi0g
ICAgbV9sYXN0U2Nyb2xsUG9zaXRpb24gPSBRUG9pbnRGKCk7Ci0gICAgZGlzY29ubmVjdChtX3Zp
ZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChwYWdlSXRl
bVBvc2l0aW9uQ2hhbmdlZCgpKSk7Ci0gICAgZGlzY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lH
TkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdl
ZCgpKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYWdlSXRlbVBv
c2l0aW9uQ2hhbmdlZCgpCi17Ci0gICAgUVBvaW50RiBuZXdQb3NpdGlvbiA9IG1fdmlld3BvcnRJ
dGVtLT5jb250ZW50UG9zKCk7Ci0KLSAgICBpbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShtX2xh
c3RTY3JvbGxQb3NpdGlvbiAtIG5ld1Bvc2l0aW9uKTsKLQotICAgIG1fbGFzdFNjcm9sbFBvc2l0
aW9uID0gbmV3UG9zaXRpb247Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
OjpwYWdlQ29udGVudFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2ludCYgY3NzUG9zaXRpb24p
Ci17Ci0gICAgLy8gSWdub3JlIHRoZSByZXF1ZXN0IGlmIHN1c3BlbmRlZC4gQ2FuIG9ubHkgaGFw
cGVuIGR1ZSB0byBkZWxheSBpbiBldmVudCBkZWxpdmVyeS4KLSAgICBpZiAobV9zdXNwZW5kQ291
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IG1fcGFnZUl0
ZW0tPmNvbnRlbnRzU2NhbGUoKTsgLy8gU3RheSBhdCBzYW1lIHNjYWxlLgotCi0gICAgUVJlY3RG
IGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1T
Y2FsZSk7Ci0gICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFu
Z2UudG9wTGVmdCgpLCBjc3NQb3NpdGlvbiAqIGVuZEl0ZW1TY2FsZSwgZW5kUG9zUmFuZ2UuYm90
dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBvc2l0
aW9uIC8gZW5kSXRlbVNjYWxlLCBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgp
IC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhp
cyk7Ci0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOwot
fQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25TdGF0
ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSBuZXdTdGF0ZSwgUUFic3RyYWN0QW5p
bWF0aW9uOjpTdGF0ZSAvKm9sZFN0YXRlKi8pCi17Ci0gICAgc3dpdGNoIChuZXdTdGF0ZSkgewot
ICAgIGNhc2UgUUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nOgotICAgICAgICBtX3ZpZXdwb3J0
SXRlbS0+Y2FuY2VsRmxpY2soKTsKLSAgICAgICAgQVNTRVJUKCFtX2FuaW1hdGlvblVwZGF0ZURl
ZmVycmVyKTsKLSAgICAgICAgbV9hbmltYXRpb25VcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5l
dyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRl
ZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBR
QWJzdHJhY3RBbmltYXRpb246OlN0b3BwZWQ6Ci0gICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVm
ZXJyZXIuY2xlYXIoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVB
bmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlhbnQgdmFsdWUpCi17Ci0gICAgc2V0UGFnZUl0ZW1S
ZWN0VmlzaWJsZSh2YWx1ZS50b1JlY3RGKCkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6dG91Y2hCZWdpbigpCi17Ci0gICAgbV9oYWRVc2VySW50ZXJhY3Rpb24gPSB0
cnVlOwotCi0gICAgLy8gUHJldmVudHMgcmVzdW1pbmcgdGhlIHBhZ2UgYmV0d2VlbiB0aGUgdXNl
cidzIGZsaWNrcyBvZiB0aGUgcGFnZSB3aGlsZSB0aGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcuCi0g
ICAgaWYgKHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQotICAgICAgICBtX3RvdWNoVXBkYXRlRGVm
ZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9y
dFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci19Ci0KLXZv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp0b3VjaEVuZCgpCi17Ci0gICAgbV90b3Vj
aFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci19Ci0KLVFSZWN0RiBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OmNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShxcmVhbCBpdGVtU2Nh
bGUpIGNvbnN0Ci17Ci0gICAgY29uc3QgUVNpemVGIGNvbnRlbnRJdGVtU2l6ZSA9IG1fcGFnZUl0
ZW0tPmNvbnRlbnRzU2l6ZSgpICogaXRlbVNjYWxlOwotICAgIGNvbnN0IFFTaXplRiB2aWV3cG9y
dEl0ZW1TaXplID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKTsKLQotICAg
IGNvbnN0IHFyZWFsIGhvcml6b250YWxSYW5nZSA9IGNvbnRlbnRJdGVtU2l6ZS53aWR0aCgpIC0g
dmlld3BvcnRJdGVtU2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHFyZWFsIHZlcnRpY2FsUmFuZ2Ug
PSBjb250ZW50SXRlbVNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydEl0ZW1TaXplLmhlaWdodCgpOwot
Ci0gICAgcmV0dXJuIFFSZWN0RihRUG9pbnRGKDAsIDApLCBRU2l6ZUYoaG9yaXpvbnRhbFJhbmdl
LCB2ZXJ0aWNhbFJhbmdlKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
Ojpmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNhcmV0QXJlYSwgY29uc3QgUVJlY3RG
JiB0YXJnZXRBcmVhKQotewotICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0
IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KLSAgICBBU1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24p
OwotCi0gICAgUVJlY3RGIGVuZEFyZWEgPSBpdGVtUmVjdEZyb21DU1ModGFyZ2V0QXJlYSk7Ci0K
LSAgICBxcmVhbCBlbmRJdGVtU2NhbGUgPSBpdGVtU2NhbGVGcm9tQ1NTKGlubmVyQm91bmRlZENT
U1NjYWxlKDIuMCkpOwotICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0
SXRlbS0+Ym91bmRpbmdSZWN0KCk7Ci0KLSAgICBxcmVhbCB4OwotICAgIGNvbnN0IHFyZWFsIGJv
cmRlck9mZnNldCA9IDEwOwotICAgIGlmICgoZW5kQXJlYS53aWR0aCgpICsgYm9yZGVyT2Zmc2V0
KSAqIGVuZEl0ZW1TY2FsZSA8PSB2aWV3cG9ydFJlY3Qud2lkdGgoKSkgewotICAgICAgICAvLyBD
ZW50ZXIgdGhlIGlucHV0IGZpZWxkIGluIHRoZSBtaWRkbGUgb2YgdGhlIHZpZXcsIGlmIGl0IGlz
IHNtYWxsZXIgdGhhbgotICAgICAgICAvLyB0aGUgdmlldyBhdCB0aGUgc2NhbGUgdGFyZ2V0Lgot
ICAgICAgICB4ID0gdmlld3BvcnRSZWN0LmNlbnRlcigpLngoKSAtIGVuZEFyZWEud2lkdGgoKSAq
IGVuZEl0ZW1TY2FsZSAvIDIuMDsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBFbnN1cmUgdGhh
dCB0aGUgY2FyZXQgYWx3YXlzIGhhcyBib3JkZXJPZmZzZXQgY29udGVudHMgcGl4ZWxzIHRvIHRo
ZSByaWdodAotICAgICAgICAvLyBvZiBpdCwgYW5kIHNlY29uZGFyaWx5IChpZiBwb3NzaWJsZSks
IHRoYXQgdGhlIGFyZWEgaGFzIGJvcmRlck9mZnNldAotICAgICAgICAvLyBjb250ZW50cyBwaXhl
bHMgdG8gdGhlIGxlZnQgb2YgaXQuCi0gICAgICAgIHFyZWFsIGNhcmV0T2Zmc2V0ID0gaXRlbUNv
b3JkRnJvbUNTUyhjYXJldEFyZWEueCgpKSAtIGVuZEFyZWEueCgpOwotICAgICAgICB4ID0gcU1p
bih2aWV3cG9ydFJlY3Qud2lkdGgoKSAtIChjYXJldE9mZnNldCArIGJvcmRlck9mZnNldCkgKiBl
bmRJdGVtU2NhbGUsIGJvcmRlck9mZnNldCAqIGVuZEl0ZW1TY2FsZSk7Ci0gICAgfQotCi0gICAg
Y29uc3QgUVBvaW50RiBob3RzcG90ID0gUVBvaW50RihlbmRBcmVhLngoKSwgZW5kQXJlYS5jZW50
ZXIoKS55KCkpOwotICAgIGNvbnN0IFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0gUVBvaW50Rih4
LCAvKiBGSVhNRTogdmlzaWJsZUNlbnRlciAqLyB2aWV3cG9ydFJlY3QuY2VudGVyKCkueSgpKTsK
LQotICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBob3RzcG90ICogZW5kSXRlbVNjYWxlIC0gdmll
d3BvcnRIb3RzcG90OwotICAgIFFSZWN0RiBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZv
clBhZ2VJdGVtQXRTY2FsZShlbmRJdGVtU2NhbGUpOwotCi0gICAgZW5kUG9zaXRpb24gPSBib3Vu
ZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVuZFBvc1Jhbmdl
LmJvdHRvbVJpZ2h0KCkpOwotCi0gICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQ
b3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2Fs
ZSk7Ci0KLSAgICBhbmltYXRlUGFnZUl0ZW1SZWN0VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJl
Y3QpOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6em9vbVRvQXJlYUdl
c3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYmIHRhcmdl
dEFyZWEpCi17Ci0gICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1
c2VyIGludGVyYWN0aW9uLgotICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0KLSAg
ICBpZiAoIXRhcmdldEFyZWEuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9zdXNwZW5kQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGludCBtYXJnaW4g
PSAxMDsgLy8gV2Ugd2FudCBhdCBsZWFzdCBhIGxpdHRsZSBiaXQgb2YgbWFyZ2luLgotICAgIFFS
ZWN0RiBlbmRBcmVhID0gaXRlbVJlY3RGcm9tQ1NTKHRhcmdldEFyZWEuYWRqdXN0ZWQoLW1hcmdp
biwgLW1hcmdpbiwgbWFyZ2luLCBtYXJnaW4pKTsKLQotICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9y
dFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCk7Ci0KLSAgICBxcmVhbCB0YXJn
ZXRDU1NTY2FsZSA9IHZpZXdwb3J0UmVjdC5zaXplKCkud2lkdGgoKSAvIGVuZEFyZWEuc2l6ZSgp
LndpZHRoKCk7Ci0gICAgcXJlYWwgZW5kQ1NTU2NhbGUgPSBpbm5lckJvdW5kZWRDU1NTY2FsZShx
TWluKHRhcmdldENTU1NjYWxlLCBxcmVhbCgyLjUpKSk7Ci0gICAgcXJlYWwgZW5kSXRlbVNjYWxl
ID0gaXRlbVNjYWxlRnJvbUNTUyhlbmRDU1NTY2FsZSk7Ci0gICAgcXJlYWwgY3VycmVudFNjYWxl
ID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOwotCi0gICAgLy8gV2Ugd2FudCB0byBlbmQg
dXAgd2l0aCB0aGUgdGFyZ2V0IGFyZWEgZmlsbGluZyB0aGUgd2hvbGUgd2lkdGggb2YgdGhlIHZp
ZXdwb3J0IChpZiBwb3NzaWJsZSksCi0gICAgLy8gYW5kIGNlbnRyYWxpemVkIHZlcnRpY2FsbHkg
d2hlcmUgdGhlIHVzZXIgcmVxdWVzdGVkIHpvb20uIFRodXMgb3VyIGhvdHNwb3QgaXMgdGhlIGNl
bnRlciBvZgotICAgIC8vIHRoZSB0YXJnZXRBcmVhIHgtd2lzZSBhbmQgdGhlIHJlcXVlc3RlZCB6
b29tIHBvc2l0aW9uLCB5LXdpc2UuCi0gICAgY29uc3QgUVBvaW50RiBob3RzcG90ID0gUVBvaW50
RihlbmRBcmVhLmNlbnRlcigpLngoKSwgaXRlbUNvb3JkRnJvbUNTUyh0b3VjaFBvaW50LnkoKSkp
OwotICAgIGNvbnN0IFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0gdmlld3BvcnRSZWN0LmNlbnRl
cigpOwotCi0gICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNwb3QgKiBlbmRDU1NTY2FsZSAt
IHZpZXdwb3J0SG90c3BvdDsKLQotICAgIFFSZWN0RiBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NS
YW5nZUZvclBhZ2VJdGVtQXRTY2FsZShlbmRJdGVtU2NhbGUpOwotICAgIGVuZFBvc2l0aW9uID0g
Ym91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NS
YW5nZS5ib3R0b21SaWdodCgpKTsKLQotICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3Qo
ZW5kUG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVt
U2NhbGUpOwotCi0gICAgZW51bSB7IFpvb21JbiwgWm9vbUJhY2ssIFpvb21PdXQsIE5vWm9vbSB9
IHpvb21BY3Rpb24gPSBab29tSW47Ci0KLSAgICBpZiAoIW1fc2NhbGVTdGFjay5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gWm9vbSBiYWNrIG91dCBpZiBhdHRlbXB0aW5nIHRvIHNjYWxlIHRvIHRo
ZSBzYW1lIGN1cnJlbnQgc2NhbGUsIG9yCi0gICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gY29udGlu
dWUgc2NhbGluZyBvdXQgZnJvbSB0aGUgaW5uZXIgbW9zdCBsZXZlbC4KLSAgICAgICAgLy8gVXNl
IGZ1enp5IGNvbXBhcmUgd2l0aCBhIGZpeGVkIGVycm9yIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRo
IGxhcmdpc2ggZGlmZmVyZW5jZXMgZHVlIHRvIHBpeGVsIHJvdW5kaW5nLgotICAgICAgICBpZiAo
ZnV6enlDb21wYXJlKGVuZEl0ZW1TY2FsZSwgY3VycmVudFNjYWxlLCAwLjAxKSkgewotICAgICAg
ICAgICAgLy8gSWYgbW92aW5nIHRoZSB2aWV3cG9ydCB3b3VsZCBleHBvc2UgbW9yZSBvZiB0aGUg
dGFyZ2V0UmVjdCBhbmQgbW92ZSBhdCBsZWFzdCA0MCBwaXhlbHMsIHVwZGF0ZSBwb3NpdGlvbiBi
dXQgZG8gbm90IHNjYWxlIG91dC4KLSAgICAgICAgICAgIFFSZWN0RiBjdXJyZW50Q29udGVudFJl
Y3QobV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSAvIGN1cnJlbnRTY2FsZSwgdmlld3BvcnRS
ZWN0LnNpemUoKSAvIGN1cnJlbnRTY2FsZSk7Ci0gICAgICAgICAgICBRUmVjdEYgdGFyZ2V0SW50
ZXJzZWN0aW9uID0gZW5kVmlzaWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdGVkKHRhcmdldEFyZWEp
OwotICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29udGVudFJlY3QuY29udGFpbnModGFyZ2V0SW50
ZXJzZWN0aW9uKSAmJiAocUFicyhlbmRWaXNpYmxlQ29udGVudFJlY3QudG9wKCkgLSBjdXJyZW50
Q29udGVudFJlY3QudG9wKCkpID49IDQwIHx8IHFBYnMoZW5kVmlzaWJsZUNvbnRlbnRSZWN0Lmxl
ZnQoKSAtIGN1cnJlbnRDb250ZW50UmVjdC5sZWZ0KCkpID49IDQwKSkKLSAgICAgICAgICAgICAg
ICB6b29tQWN0aW9uID0gTm9ab29tOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHpvb21BY3Rpb24gPSBab29tQmFjazsKLSAgICAgICAgfSBlbHNlIGlmIChmdXp6eUNvbXBhcmUo
ZW5kSXRlbVNjYWxlLCBtX3pvb21PdXRTY2FsZSwgMC4wMSkpCi0gICAgICAgICAgICB6b29tQWN0
aW9uID0gWm9vbUJhY2s7Ci0gICAgICAgIGVsc2UgaWYgKGVuZEl0ZW1TY2FsZSA8IGN1cnJlbnRT
Y2FsZSkKLSAgICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tT3V0OwotICAgIH0KLQotICAgIHN3
aXRjaCAoem9vbUFjdGlvbikgewotICAgIGNhc2UgWm9vbUluOgotICAgICAgICBtX3NjYWxlU3Rh
Y2suYXBwZW5kKFNjYWxlU3RhY2tJdGVtKGN1cnJlbnRTY2FsZSwgbV92aWV3cG9ydEl0ZW0tPmNv
bnRlbnRQb3MoKS54KCkpKTsKLSAgICAgICAgbV96b29tT3V0U2NhbGUgPSBlbmRJdGVtU2NhbGU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWm9vbUJhY2s6IHsKLSAgICAgICAgU2NhbGVTdGFj
a0l0ZW0gbGFzdFNjYWxlID0gbV9zY2FsZVN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIGVuZEl0
ZW1TY2FsZSA9IGxhc3RTY2FsZS5zY2FsZTsKLSAgICAgICAgZW5kQ1NTU2NhbGUgPSBjc3NTY2Fs
ZUZyb21JdGVtKGxhc3RTY2FsZS5zY2FsZSk7Ci0gICAgICAgIC8vIFJlY2FsY3VsYXRlIGVuZFBv
c2l0aW9uIGFuZCBib3VuZCBpdCBhY2NvcmRpbmcgdG8gbmV3IHNjYWxlLgotICAgICAgICBlbmRQ
b3NpdGlvbi5zZXRZKGhvdHNwb3QueSgpICogZW5kQ1NTU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Qu
eSgpKTsKLSAgICAgICAgZW5kUG9zaXRpb24uc2V0WChsYXN0U2NhbGUueFBvc2l0aW9uKTsKLSAg
ICAgICAgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5k
SXRlbVNjYWxlKTsKLSAgICAgICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1Jh
bmdlLnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOwot
ICAgICAgICBlbmRWaXNpYmxlQ29udGVudFJlY3QgPSBRUmVjdEYoZW5kUG9zaXRpb24gLyBlbmRJ
dGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBab29tT3V0OgotICAgICAgICAvLyBVbnN0YWNrIGFsbCBz
Y2FsZS1sZXZlbHMgZGVlcGVyIHRoYW4gdGhlIG5ldyBsZXZlbCwgc28gYSB6b29tLWJhY2sgd29u
J3QgZW5kIHVwIHpvb21pbmcgaW4uCi0gICAgICAgIHdoaWxlICghbV9zY2FsZVN0YWNrLmlzRW1w
dHkoKSAmJiBtX3NjYWxlU3RhY2subGFzdCgpLnNjYWxlID49IGVuZEl0ZW1TY2FsZSkKLSAgICAg
ICAgICAgIG1fc2NhbGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1fem9vbU91dFNjYWxl
ID0gZW5kSXRlbVNjYWxlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5vWm9vbToKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoZW5kVmlz
aWJsZUNvbnRlbnRSZWN0KTsKLX0KLQotUVJlY3RGIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTo6bmVhcmVzdFZhbGlkQm91bmRzKCkgY29uc3QKLXsKLSAgICBxcmVhbCBlbmRJdGVtU2NhbGUg
PSBpdGVtU2NhbGVGcm9tQ1NTKGlubmVyQm91bmRlZENTU1NjYWxlKGN1cnJlbnRDU1NTY2FsZSgp
KSk7Ci0KLSAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJv
dW5kaW5nUmVjdCgpOwotICAgIFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0gdmlld3BvcnRSZWN0
LmNlbnRlcigpOwotCi0gICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5t
YXBUb1dlYkNvbnRlbnQodmlld3BvcnRIb3RzcG90KSAqIGVuZEl0ZW1TY2FsZSAtIHZpZXdwb3J0
SG90c3BvdDsKLQotICAgIFFSZWN0RiBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBh
Z2VJdGVtQXRTY2FsZShlbmRJdGVtU2NhbGUpOwotICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3Np
dGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0
b21SaWdodCgpKTsKLQotICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5kUG9zaXRp
b24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOwot
Ci0gICAgcmV0dXJuIGVuZFZpc2libGVDb250ZW50UmVjdDsKLX0KLQotdm9pZCBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OnNldENTU1NjYWxlKHFyZWFsIHNjYWxlKQotewotICAgIFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7Ci0KLSAgICBxcmVhbCBuZXdTY2FsZSA9IGlu
bmVyQm91bmRlZENTU1NjYWxlKHNjYWxlKTsKLSAgICBtX3BhZ2VJdGVtLT5zZXRDb250ZW50c1Nj
YWxlKGl0ZW1TY2FsZUZyb21DU1MobmV3U2NhbGUpKTsKLX0KLQotcXJlYWwgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpjdXJyZW50Q1NTU2NhbGUoKSBjb25zdAotewotICAgIHJldHVybiBj
c3NTY2FsZUZyb21JdGVtKG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKSk7Ci19Ci0KLWJvb2wg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY3JvbGxBbmltYXRpb25BY3RpdmUoKSBjb25z
dAotewotICAgIHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+aXNGbGlja2luZygpOwotfQotCi1ib29s
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fdmlld3BvcnRJdGVtLT5pc0RyYWdnaW5nKCk7Ci19Ci0KLXZvaWQgUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRG
JiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQotewotICAgIC8vIFRoaXMg
Y2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KLSAgICBB
U1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRs
ZUZsaWNrYWJsZU1vdXNlUHJlc3MocG9zaXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAg
ICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9uOwotfQot
Ci12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZVJlcXVlc3RVcGRh
dGUoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykK
LXsKLSAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VNb3ZlKHBvc2l0aW9u
LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0
Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OnBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2
ZW50VGltZXN0YW1wTWlsbGlzKQotewotICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2Fi
bGVNb3VzZVJlbGVhc2UocG9zaXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICBtX2xh
c3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9uOwotfQotCi12b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUNhbmNlbGxlZCgpCi17Ci0g
ICAgLy8gUmVzZXQgdGhlIHZlbG9jaXR5IHNhbXBsZXMgb2YgdGhlIGZsaWNrYWJsZS4KLSAgICAv
LyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgcmVjb2duaXplciBpZiB3ZSBoYXZl
IGEgcmVjb2duaXplZAotICAgIC8vIHBhbiBnZXN0dXJlIGFuZCByZWNlaXZlIGEgdG91Y2ggZXZl
bnQgd2l0aCBtdWx0aXBsZSB0b3VjaCBwb2ludHMKLSAgICAvLyAoaWUuIHRyYW5zaXRpb24gdG8g
YSBwaW5jaCBnZXN0dXJlKSBhcyBpdCBkb2VzIG5vdCBtb3ZlIHRoZSBjb250ZW50Ci0gICAgLy8g
YmFjayBpbnNpZGUgdmFsaWQgYm91bmRzLgotICAgIC8vIFdoZW4gdGhlIHBpbmNoIGdlc3R1cmUg
ZW5kcywgdGhlIGNvbnRlbnQgaXMgcG9zaXRpb25lZCBhbmQgc2NhbGVkCi0gICAgLy8gYmFjayB0
byB2YWxpZCBib3VuZGFyaWVzLgotICAgIG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwot
fQotCi1ib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25BY3Rp
dmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3NjYWxlQW5pbWF0aW9uLT5zdGF0ZSgpID09IFFB
YnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OmNhbmNlbFNjcm9sbEFuaW1hdGlvbigpCi17Ci0gICAgaWYgKCFzY3JvbGxBbmlt
YXRpb25BY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBhbiBnZXN0
dXJlIHJlY29nbml6ZXIgcmVjZWl2ZXMgYSB0b3VjaCBiZWdpbiBldmVudAotICAgIC8vIGR1cmlu
ZyBhbiBvbmdvaW5nIGtpbmV0aWMgc2Nyb2xsIGFuaW1hdGlvbiBvZiBhIHByZXZpb3VzCi0gICAg
Ly8gcGFuIGdlc3R1cmUsIHRoZSBhbmltYXRpb24gaXMgc3RvcHBlZCBhbmQgdGhlIGNvbnRlbnQg
aXMKLSAgICAvLyBpbW1lZGlhdGVseSBwb3NpdGlvbmVkIGJhY2sgdG8gdmFsaWQgYm91bmRhcmll
cy4KLQotICAgIG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwotICAgIFZpZXdwb3J0VXBk
YXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7Ci0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShuZWFy
ZXN0VmFsaWRCb3VuZHMoKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
OjppbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigpCi17Ci0gICAgLy8gVGhpcyBpbnRlcnJ1cHRzIHRo
ZSBzY2FsZSBhbmltYXRpb24gZXhhY3RseSB3aGVyZSBpdCBpcywgZXZlbiBpZiBpdCBpcyBvdXQg
b2YgYm91bmRzLgotICAgIG1fc2NhbGVBbmltYXRpb24tPnN0b3AoKTsKLX0KLQotYm9vbCBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcGluY2hTdGFydFNjYWxlID4gMDsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcGluY2hD
ZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpCi17Ci0gICAgLy8gVGhpcyBjYW4gb25seSBoYXBw
ZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgotICAgIEFTU0VSVChtX2hhZFVz
ZXJJbnRlcmFjdGlvbik7Ci0KLSAgICBpZiAoIW1fYWxsb3dzVXNlclNjYWxpbmcpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2NhbGVTdGFjay5jbGVhcigpOwotICAgIG1fem9vbU91dFNjYWxl
ID0gMC4wOwotCi0gICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyID0gYWRvcHRQdHIobmV3IFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6RGVmZXJVcGRh
dGVBbmRTdXNwZW5kQ29udGVudCkpOwotCi0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0
Q29vcmRpbmF0ZXMgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKLSAgICBtX3Bp
bmNoU3RhcnRTY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKLX0KLQotdm9pZCBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29u
c3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMsIHFyZWFsIHRvdGFs
U2NhbGVGYWN0b3IpCi17Ci0gICAgQVNTRVJUKG1fc3VzcGVuZENvdW50KTsKLQotICAgIGlmICgh
bV9hbGxvd3NVc2VyU2NhbGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gIENoYW5nZXMg
b2YgdGhlIGNlbnRlciBwb3NpdGlvbiBzaG91bGQgbW92ZSB0aGUgcGFnZSBldmVuIGlmIHRoZSB6
b29tIGZhY3RvcgotICAgIC8vICBkb2VzIG5vdCBjaGFuZ2UuCi0gICAgY29uc3QgcXJlYWwgY3Nz
U2NhbGUgPSBjc3NTY2FsZUZyb21JdGVtKG1fcGluY2hTdGFydFNjYWxlICogdG90YWxTY2FsZUZh
Y3Rvcik7Ci0KLSAgICAvLyBBbGxvdyB6b29taW5nIG91dCBiZXlvbmQgbWltaW11bSBzY2FsZSBv
biBwYWdlcyB0aGF0IGRvIG5vdCBleHBsaWNpdGx5IGRpc2FsbG93IGl0LgotICAgIGNvbnN0IHFy
ZWFsIHRhcmdldENTU1NjYWxlID0gb3V0ZXJCb3VuZGVkQ1NTU2NhbGUoY3NzU2NhbGUpOwotCi0g
ICAgc2NhbGVDb250ZW50KG1fdmlld3BvcnRJdGVtLT5tYXBUb1dlYkNvbnRlbnQocGluY2hDZW50
ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpLCB0YXJnZXRDU1NTY2FsZSk7Ci0KLSAgICBjb25zdCBR
UG9pbnRGIHBvc2l0aW9uRGlmZiA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzIC0g
bV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7Ci0gICAgbV9sYXN0UGluY2hD
ZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGlu
YXRlczsKLQotICAgIG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVt
LT5jb250ZW50UG9zKCkgLSBwb3NpdGlvbkRpZmYpOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlRW5kZWQoKQotewotICAgIEFTU0VSVChtX3N1c3Bl
bmRDb3VudCk7Ci0KLSAgICBpZiAoIW1fYWxsb3dzVXNlclNjYWxpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7Ci0KLSAgICBhbmltYXRlUGFnZUl0ZW1S
ZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRCb3VuZHMoKSk7Ci0gICAgbV9zY2FsZVVwZGF0ZURlZmVy
cmVyLmNsZWFyKCk7IC8vIENsZWFyIGFmdGVyIHN0YXJ0aW5nIHBvdGVudGlhbCBhbmltYXRpb24s
IHdoaWNoIHRha2VzIG92ZXIgZGVmZXJyaW5nLgotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlQ2FuY2VsbGVkKCkKLXsKLSAgICBtX3BpbmNoU3RhcnRT
Y2FsZSA9IC0xOwotICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotfQotCi1RUmVj
dCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25z
dAotewotICAgIGNvbnN0IFFSZWN0RiB2aXNpYmxlUmVjdChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRp
bmdSZWN0KCkuaW50ZXJzZWN0ZWQobV9wYWdlSXRlbS0+Ym91bmRpbmdSZWN0KCkpKTsKLQotICAg
IC8vIFdlIGF2b2lkIHVzaW5nIHRvQWxpZ25lZFJlY3QoKSBiZWNhdXNlIGl0IHByb2R1Y2VzIGlu
Y29uc2lzdGVudCB3aWR0aCBhbmQgaGVpZ2h0LgotICAgIFFSZWN0RiBtYXBwZWRSZWN0KG1fdmll
d3BvcnRJdGVtLT5tYXBSZWN0VG9XZWJDb250ZW50KHZpc2libGVSZWN0KSk7Ci0gICAgcmV0dXJu
IFFSZWN0KGZsb29yKG1hcHBlZFJlY3QueCgpKSwgZmxvb3IobWFwcGVkUmVjdC55KCkpLCBmbG9v
cihtYXBwZWRSZWN0LndpZHRoKCkpLCBmbG9vcihtYXBwZWRSZWN0LmhlaWdodCgpKSk7Ci19Ci0K
LXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppbmZvcm1WaXNpYmxlQ29udGVudENo
YW5nZShjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIERyYXdpbmdBcmVh
UHJveHkqIGRyYXdpbmdBcmVhID0gbV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7Ci0gICAg
aWYgKCFkcmF3aW5nQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fbGFzdFZpc2li
bGVDb250ZW50c1JlY3QgPT0gdmlzaWJsZUNvbnRlbnRzUmVjdCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBxcmVhbCBzY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKLQotICAg
IGlmIChzY2FsZSAhPSBtX2xhc3RDb21taXR0ZWRTY2FsZSkKLSAgICAgICAgZW1pdCBtX3ZpZXdw
b3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+Y29udGVudHNTY2FsZUNvbW1pdHRlZCgp
OwotICAgIG1fbGFzdENvbW1pdHRlZFNjYWxlID0gc2NhbGU7Ci0gICAgbV9sYXN0VmlzaWJsZUNv
bnRlbnRzUmVjdCA9IHZpc2libGVDb250ZW50c1JlY3QoKTsKLQotICAgIGRyYXdpbmdBcmVhLT5z
ZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVDb250ZW50c1JlY3QoKSwgc2NhbGUsIHRyYWpl
Y3RvcnlWZWN0b3IsIG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkpOwotCi0gICAgLy8gRW5z
dXJlIHRoYXQgdXBkYXRlUGFpbnROb2RlIGlzIGFsd2F5cyBjYWxsZWQgYmVmb3JlIHBhaW50aW5n
LgotICAgIG1fcGFnZUl0ZW0tPnVwZGF0ZSgpOwotfQotCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6dmlld3BvcnRJdGVtU2l6ZUNoYW5nZWQoKQotewotICAgIFFTaXplIHZpZXdw
b3J0U2l6ZSA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKS5zaXplKCkudG9TaXplKCk7
Ci0KLSAgICBpZiAodmlld3BvcnRTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcsIGFkZCBRTUwgYXBpIQotICAgIFdlYlByZWZlcmVu
Y2VzKiB3a1ByZWZzID0gbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygp
OwotICAgIHdrUHJlZnMtPnNldERldmljZVdpZHRoKHZpZXdwb3J0U2l6ZS53aWR0aCgpKTsKLSAg
ICB3a1ByZWZzLT5zZXREZXZpY2VIZWlnaHQodmlld3BvcnRTaXplLmhlaWdodCgpKTsKLQotICAg
IC8vIExldCB0aGUgV2ViUHJvY2VzcyBrbm93IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwg
c28gdGhhdAotICAgIC8vIGl0IGNhbiByZXNpemUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCi0g
ICAgbV93ZWJQYWdlUHJveHktPnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFNpemUpOwotCi0gICAg
aW5mb3JtVmlzaWJsZUNvbnRlbnRDaGFuZ2UoUVBvaW50RigpKTsKLX0KLQotdm9pZCBRdFZpZXdw
b3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQ29udGVudChjb25zdCBRUG9pbnRGJiBjZW50ZXJJ
bkNTU0Nvb3JkaW5hdGVzLCBxcmVhbCBjc3NTY2FsZSkKLXsKLSAgICBRUG9pbnRGIG9sZFBpbmNo
Q2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnRJdGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50
ZXJJbkNTU0Nvb3JkaW5hdGVzKTsKLSAgICBtX3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0
ZW1TY2FsZUZyb21DU1MoY3NzU2NhbGUpKTsKLSAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25W
aWV3cG9ydCA9IG1fdmlld3BvcnRJdGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNTU0Nv
b3JkaW5hdGVzKTsKLQotICAgIG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG1fdmlld3Bv
cnRJdGVtLT5jb250ZW50UG9zKCkgKyAobmV3UGluY2hDZW50ZXJPblZpZXdwb3J0IC0gb2xkUGlu
Y2hDZW50ZXJPblZpZXdwb3J0KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jaW5j
bHVkZSAibW9jX1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAiCi0KLQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmUuaAkocmV2aXNpb24gMTE5MzkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmph
bWluIFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZV9oCi0jZGVmaW5lIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZV9o
Ci0KLSNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KLSNpbmNsdWRlIDxRdENvcmUvUVJlY3RGPgot
I2luY2x1ZGUgPFF0Q29yZS9RVmFyaWFudD4KLSNpbmNsdWRlIDxRdENvcmUvUVZhcmlhbnRBbmlt
YXRpb24+Ci0jaW5jbHVkZSA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRUG9pbnRGOwotY2xh
c3MgUVF1aWNrV2ViUGFnZTsKLWNsYXNzIFFRdWlja1dlYlZpZXc7Ci1jbGFzcyBRV2hlZWxFdmVu
dDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotY2xhc3MgUVdlYktpdFRlc3Q7Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1jbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyOwotCi1jbGFzcyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUgOiBwdWJsaWMgUU9iamVj
dCB7Ci0gICAgUV9PQkpFQ1QKLQotcHVibGljOgotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZShXZWJQYWdlUHJveHkqLCBRUXVpY2tXZWJWaWV3KiwgUVF1aWNrV2ViUGFnZSopOwotICAg
IH5RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoKTsKLQotICAgIHZvaWQgdG91Y2hCZWdpbigp
OwotICAgIHZvaWQgdG91Y2hFbmQoKTsKLQotICAgIGJvb2wgc2Nyb2xsQW5pbWF0aW9uQWN0aXZl
KCkgY29uc3Q7Ci0gICAgdm9pZCBjYW5jZWxTY3JvbGxBbmltYXRpb24oKTsKLQotICAgIGJvb2wg
cGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgcGFuR2VzdHVyZVN0YXJ0ZWQoY29u
c3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAg
dm9pZCBwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWlu
dDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICB2b2lkIHBhbkdlc3R1cmVFbmRlZChjb25z
dCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICB2
b2lkIHBhbkdlc3R1cmVDYW5jZWxsZWQoKTsKLQotICAgIGJvb2wgc2NhbGVBbmltYXRpb25BY3Rp
dmUoKSBjb25zdDsKLSAgICB2b2lkIGludGVycnVwdFNjYWxlQW5pbWF0aW9uKCk7Ci0KLSAgICBi
b29sIHBpbmNoR2VzdHVyZUFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgcGluY2hHZXN0dXJlU3Rh
cnRlZChjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyk7Ci0g
ICAgdm9pZCBwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzLCBxcmVhbCB0b3RhbFNjYWxlRmFjdG9yKTsKLSAgICB2
b2lkIHBpbmNoR2VzdHVyZUVuZGVkKCk7Ci0gICAgdm9pZCBwaW5jaEdlc3R1cmVDYW5jZWxsZWQo
KTsKLQotICAgIHZvaWQgem9vbVRvQXJlYUdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiB0b3Vj
aFBvaW50LCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpOwotICAgIHZvaWQgZm9jdXNFZGl0YWJs
ZUFyZWEoY29uc3QgUVJlY3RGJiBjYXJldEFyZWEsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSk7
Ci0KLSAgICB2b2lkIHBhZ2VDb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBw
b3NpdGlvbik7Ci0KLSAgICB2b2lkIHZpZXdwb3J0SXRlbVNpemVDaGFuZ2VkKCk7Ci0gICAgdm9p
ZCB2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmli
dXRlcyYpOwotICAgIHZvaWQgaW5mb3JtVmlzaWJsZUNvbnRlbnRDaGFuZ2UoY29uc3QgUVBvaW50
RiYgdHJhamVjdG9yeSA9IFFQb2ludEYoKSk7Ci0gICAgdm9pZCBwYWdlQ29udGVudHNTaXplQ2hh
bmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6ZSwgY29uc3QgUVNpemUmIHZpZXdwb3J0U2l6ZSk7Ci0K
LXByaXZhdGUgUV9TTE9UUzoKLSAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgb2YgcG9zaXRpb24g
dGhhdCBhcmUgbm90IGRyaXZlbiBieSB1cy4KLSAgICB2b2lkIHBhZ2VJdGVtUG9zaXRpb25DaGFu
Z2VkKCk7Ci0KLSAgICB2b2lkIHNjYWxlQW5pbWF0aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFu
aW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUpOwotICAgIHZvaWQgc2Nh
bGVBbmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlhbnQgdmFsdWUpOwotCi0gICAgdm9pZCBmbGlj
a01vdmVTdGFydGVkKCk7IC8vIENhbGxlZCB3aGVuIHBhbm5pbmcgc3RhcnRzLgotICAgIHZvaWQg
ZmxpY2tNb3ZlRW5kZWQoKTsgLy8gICBDYWxsZWQgd2hlbiBwYW5uaW5nICgrIGtpbmV0aWMgYW5p
bWF0aW9uKSBlbmRzLgotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBWaWV3cG9ydFVwZGF0
ZURlZmVycmVyOwotICAgIGZyaWVuZCBjbGFzcyA6OlFXZWJLaXRUZXN0OwotCi0gICAgV2ViUGFn
ZVByb3h5KiBjb25zdCBtX3dlYlBhZ2VQcm94eTsKLSAgICBRUXVpY2tXZWJWaWV3KiBjb25zdCBt
X3ZpZXdwb3J0SXRlbTsKLSAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBtX3BhZ2VJdGVtOwotCi0g
ICAgcXJlYWwgY3NzU2NhbGVGcm9tSXRlbShxcmVhbCkgY29uc3Q7Ci0gICAgcXJlYWwgaXRlbVNj
YWxlRnJvbUNTUyhxcmVhbCkgY29uc3Q7Ci0gICAgcXJlYWwgaXRlbUNvb3JkRnJvbUNTUyhxcmVh
bCkgY29uc3Q7Ci0gICAgUVJlY3RGIGl0ZW1SZWN0RnJvbUNTUyhjb25zdCBRUmVjdEYmKSBjb25z
dDsKLQotICAgIHFyZWFsIGlubmVyQm91bmRlZENTU1NjYWxlKHFyZWFsKSBjb25zdDsKLSAgICBx
cmVhbCBvdXRlckJvdW5kZWRDU1NTY2FsZShxcmVhbCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldENT
U1NjYWxlKHFyZWFsKTsKLSAgICBxcmVhbCBjdXJyZW50Q1NTU2NhbGUoKSBjb25zdDsKLQotICAg
IHZvaWQgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmKTsKLSAgICB2b2lkIGFu
aW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYpOwotCi0gICAgUVJlY3Qgdmlz
aWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIFFSZWN0RiBuZWFyZXN0VmFsaWRCb3VuZHMo
KSBjb25zdDsKLQotICAgIFFSZWN0RiBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUo
cXJlYWwgaXRlbVNjYWxlKSBjb25zdDsKLSAgICB2b2lkIHNjYWxlQ29udGVudChjb25zdCBRUG9p
bnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzLCBxcmVhbCBjc3NTY2FsZSk7Ci0KLSAgICB2b2lk
IHN1c3BlbmRQYWdlQ29udGVudCgpOwotICAgIHZvaWQgcmVzdW1lUGFnZUNvbnRlbnQoKTsKLQot
ICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBtX3Jhd0F0dHJpYnV0ZXM7Ci0KLSAgICBi
b29sIG1fYWxsb3dzVXNlclNjYWxpbmc7Ci0gICAgcXJlYWwgbV9taW5pbXVtU2NhbGU7Ci0gICAg
cXJlYWwgbV9tYXhpbXVtU2NhbGU7Ci0gICAgcXJlYWwgbV9kZXZpY2VQaXhlbFJhdGlvOwotCi0g
ICAgUVNpemUgbV9sYXlvdXRTaXplOwotCi0gICAgaW50IG1fc3VzcGVuZENvdW50OwotICAgIGJv
b2wgbV9oYXNTdXNwZW5kZWRDb250ZW50OwotCi0gICAgT3duUHRyPFZpZXdwb3J0VXBkYXRlRGVm
ZXJyZXI+IG1fc2NhbGVVcGRhdGVEZWZlcnJlcjsKLSAgICBPd25QdHI8Vmlld3BvcnRVcGRhdGVE
ZWZlcnJlcj4gbV9zY3JvbGxVcGRhdGVEZWZlcnJlcjsKLSAgICBPd25QdHI8Vmlld3BvcnRVcGRh
dGVEZWZlcnJlcj4gbV90b3VjaFVwZGF0ZURlZmVycmVyOwotICAgIE93blB0cjxWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyPiBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyOwotCi0gICAgYm9vbCBtX2hh
ZFVzZXJJbnRlcmFjdGlvbjsKLQotICAgIGNsYXNzIFNjYWxlQW5pbWF0aW9uIDogcHVibGljIFFW
YXJpYW50QW5pbWF0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNjYWxlQW5pbWF0aW9uKFFP
YmplY3QqIHBhcmVudCA9IDApCi0gICAgICAgICAgICA6IFFWYXJpYW50QW5pbWF0aW9uKHBhcmVu
dCkKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1cnJlbnRWYWx1
ZShjb25zdCBRVmFyaWFudCYpIHsgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgU2NhbGVTdGFja0l0
ZW0gewotICAgICAgICBTY2FsZVN0YWNrSXRlbShxcmVhbCBzY2FsZSwgcXJlYWwgeFBvc2l0aW9u
KQotICAgICAgICAgICAgOiBzY2FsZShzY2FsZSkKLSAgICAgICAgICAgICwgeFBvc2l0aW9uKHhQ
b3NpdGlvbikKLSAgICAgICAgeyB9Ci0KLSAgICAgICAgcXJlYWwgc2NhbGU7Ci0gICAgICAgIHFy
ZWFsIHhQb3NpdGlvbjsKLSAgICB9OwotCi0gICAgU2NhbGVBbmltYXRpb24qIG1fc2NhbGVBbmlt
YXRpb247Ci0gICAgUVBvaW50RiBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRl
czsKLSAgICBRUG9pbnRGIG1fbGFzdFNjcm9sbFBvc2l0aW9uOwotICAgIHFyZWFsIG1fcGluY2hT
dGFydFNjYWxlOwotICAgIHFyZWFsIG1fbGFzdENvbW1pdHRlZFNjYWxlOwotICAgIFFSZWN0RiBt
X2xhc3RWaXNpYmxlQ29udGVudHNSZWN0OwotICAgIHFyZWFsIG1fem9vbU91dFNjYWxlOwotICAg
IFFMaXN0PFNjYWxlU3RhY2tJdGVtPiBtX3NjYWxlU3RhY2s7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKLQotI2VuZGlmIC8vIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZV9oCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRI
YW5kbGVyLmNwcAkocmV2aXNpb24gMTE5MzkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0
LDcgQEAKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0
aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKLSNp
bmNsdWRlICJRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCIKKyNpbmNsdWRlICJRdFZpZXdw
b3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgInFxdWlj
a3dlYnBhZ2VfcC5oIgogI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgpAQCAtODksNyArODks
NyBAQCBzdGF0aWMgaW5saW5lIFdlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJvCiAKIFF0V2ViUGFn
ZUV2ZW50SGFuZGxlcjo6UXRXZWJQYWdlRXZlbnRIYW5kbGVyKFdLUGFnZVJlZiBwYWdlUmVmLCBR
UXVpY2tXZWJQYWdlKiBxbWxXZWJQYWdlLCBRUXVpY2tXZWJWaWV3KiBxbWxXZWJWaWV3KQogICAg
IDogbV93ZWJQYWdlUHJveHkodG9JbXBsKHBhZ2VSZWYpKQotICAgICwgbV9pbnRlcmFjdGlvbkVu
Z2luZSgwKQorICAgICwgbV92aWV3cG9ydEhhbmRsZXIoMCkKICAgICAsIG1fcGFuR2VzdHVyZVJl
Y29nbml6ZXIodGhpcykKICAgICAsIG1fcGluY2hHZXN0dXJlUmVjb2duaXplcih0aGlzKQogICAg
ICwgbV90YXBHZXN0dXJlUmVjb2duaXplcih0aGlzKQpAQCAtMjk3LDkgKzI5Nyw5IEBAIHZvaWQg
UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVGb2N1c08KICAgICBtX3dlYlBhZ2VQcm94eS0+
dmlld1N0YXRlRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQ
cm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKIH0KIAotdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI6OnNldFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lKiBlbmdpbmUpCit2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6c2V0Vmlld3BvcnRIYW5k
bGVyKFF0Vmlld3BvcnRIYW5kbGVyKiBoYW5kbGVyKQogewotICAgIG1faW50ZXJhY3Rpb25Fbmdp
bmUgPSBlbmdpbmU7CisgICAgbV92aWV3cG9ydEhhbmRsZXIgPSBoYW5kbGVyOwogfQogCiB2b2lk
IFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRo
b2RFdmVudCogZXYpCkBAIC0zOTgsNyArMzk4LDcgQEAgc3RhdGljIHZvaWQgc2V0SW5wdXRQYW5l
bFZpc2libGUoYm9vbCB2aQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aW5wdXRQYW5l
bFZpc2libGVDaGFuZ2VkKCkKIHsKLSAgICBpZiAoIW1faW50ZXJhY3Rpb25FbmdpbmUpCisgICAg
aWYgKCFtX3ZpZXdwb3J0SGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2Ugb25s
eSByZXNwb25kIHRvIHRoZSBpbnB1dCBwYW5lbCBiZWNvbWluZyB2aXNpYmxlLgpAQCAtNDA3LDcg
KzQwNyw3IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjppbnB1dFBhbmVsVmkKIAogICAg
IGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3IgPSBtX3dlYlBhZ2VQcm94eS0+ZWRpdG9yU3RhdGUo
KTsKICAgICBpZiAoZWRpdG9yLmlzQ29udGVudEVkaXRhYmxlKQotICAgICAgICBtX2ludGVyYWN0
aW9uRW5naW5lLT5mb2N1c0VkaXRhYmxlQXJlYShRUmVjdEYoZWRpdG9yLmN1cnNvclJlY3QpLCBR
UmVjdEYoZWRpdG9yLmVkaXRvclJlY3QpKTsKKyAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPmZv
Y3VzRWRpdGFibGVBcmVhKFFSZWN0RihlZGl0b3IuY3Vyc29yUmVjdCksIFFSZWN0RihlZGl0b3Iu
ZWRpdG9yUmVjdCkpOwogfQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6dXBkYXRlVGV4
dElucHV0U3RhdGUoKQpAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5k
bGVyOjpkb25lV2l0aEdlc3QKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBRdFdlYlBh
Z2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2
ZW50JiBldmVudCwgYm9vbCB3YXNFdmVudEhhbmRsZWQpCiB7Ci0gICAgaWYgKCFtX2ludGVyYWN0
aW9uRW5naW5lKQorICAgIGlmICghbV92aWV3cG9ydEhhbmRsZXIpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICh3YXNFdmVudEhhbmRsZWQgfHwgZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpU
b3VjaENhbmNlbCkgewpAQCAtNDU4LDkgKzQ1OCw5IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5k
bGVyOjpkb25lV2l0aFRvdWMKIAogICAgIHN3aXRjaCAoZXYtPnR5cGUoKSkgewogICAgIGNhc2Ug
UUV2ZW50OjpUb3VjaEJlZ2luOgotICAgICAgICBBU1NFUlQoIW1faW50ZXJhY3Rpb25FbmdpbmUt
PnBhbkdlc3R1cmVBY3RpdmUoKSk7Ci0gICAgICAgIEFTU0VSVCghbV9pbnRlcmFjdGlvbkVuZ2lu
ZS0+cGluY2hHZXN0dXJlQWN0aXZlKCkpOwotICAgICAgICBtX2ludGVyYWN0aW9uRW5naW5lLT50
b3VjaEJlZ2luKCk7CisgICAgICAgIEFTU0VSVCghbV92aWV3cG9ydEhhbmRsZXItPnBhbkdlc3R1
cmVBY3RpdmUoKSk7CisgICAgICAgIEFTU0VSVCghbV92aWV3cG9ydEhhbmRsZXItPnBpbmNoR2Vz
dHVyZUFjdGl2ZSgpKTsKKyAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPnRvdWNoQmVnaW4oKTsK
IAogICAgICAgICAvLyBUaGUgaW50ZXJhY3Rpb24gZW5naW5lIG1pZ2h0IHN0aWxsIGJlIGFuaW1h
dGluZyBraW5ldGljIHNjcm9sbGluZyBvciBhIHNjYWxlIGFuaW1hdGlvbgogICAgICAgICAvLyBz
dWNoIGFzIGRvdWJsZS10YXAgdG8gem9vbSBvciB0aGUgYm91bmNlIGJhY2sgZWZmZWN0LiBBIHRv
dWNoIHN0b3BzIHRoZSBraW5ldGljIHNjcm9sbGluZwpAQCAtNDY5LDExICs0NjksMTEgQEAgdm9p
ZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91YwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFFFdmVudDo6VG91Y2hVcGRhdGU6CiAgICAgICAgIC8vIFRoZSBzY2FsZSBhbmltYXRp
b24gY2FuIG9ubHkgYmUgaW50ZXJydXB0ZWQgYnkgYSBwaW5jaCBnZXN0dXJlLCB3aGljaCB3aWxs
IHRoZW4gdGFrZSBvdmVyLgotICAgICAgICBpZiAobV9pbnRlcmFjdGlvbkVuZ2luZS0+c2NhbGVB
bmltYXRpb25BY3RpdmUoKSAmJiBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuaXNSZWNvZ25pemVk
KCkpCi0gICAgICAgICAgICBtX2ludGVyYWN0aW9uRW5naW5lLT5pbnRlcnJ1cHRTY2FsZUFuaW1h
dGlvbigpOworICAgICAgICBpZiAobV92aWV3cG9ydEhhbmRsZXItPnNjYWxlQW5pbWF0aW9uQWN0
aXZlKCkgJiYgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgpKQorICAgICAg
ICAgICAgbV92aWV3cG9ydEhhbmRsZXItPmludGVycnVwdFNjYWxlQW5pbWF0aW9uKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgUUV2ZW50OjpUb3VjaEVuZDoKLSAgICAgICAgbV9pbnRlcmFj
dGlvbkVuZ2luZS0+dG91Y2hFbmQoKTsKKyAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPnRvdWNo
RW5kKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAt
NDgxLDcgKzQ4MSw3IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0aFRvdWMK
IAogICAgIC8vIElmIHRoZSBzY2FsZSBhbmltYXRpb24gaXMgYWN0aXZlIHdlIGRvbid0IHBhc3Mg
dGhlIGV2ZW50IHRvIHRoZSByZWNvZ25pemVycy4gSW4gdGhlIGZ1dHVyZQogICAgIC8vIHdlIHdv
dWxkIHdhbnQgdG8gcXVldWUgdGhlIGV2ZW50IGhlcmUgYW5kIHJlcG9zdCB0aGVuIHdoZW4gdGhl
IGFuaW1hdGlvbiBlbmRzLgotICAgIGlmIChtX2ludGVyYWN0aW9uRW5naW5lLT5zY2FsZUFuaW1h
dGlvbkFjdGl2ZSgpKQorICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxlci0+c2NhbGVBbmltYXRpb25B
Y3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgUUxpc3Q8UVRvdWNoRXZlbnQ6
OlRvdWNoUG9pbnQ+JiB0b3VjaFBvaW50cyA9IGV2LT50b3VjaFBvaW50cygpOwpAQCAtNTMzLDEy
ICs1MzMsMTIgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91YwogCiB2
b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBJbnRQ
b2ludCYgdGFyZ2V0LCBjb25zdCBJbnRSZWN0JiBhcmVhKQogewotICAgIGlmICghbV9pbnRlcmFj
dGlvbkVuZ2luZSkKKyAgICBpZiAoIW1fdmlld3BvcnRIYW5kbGVyKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBGSVhNRTogQXMgdGhlIGZpbmQgbWV0aG9kIG1pZ2h0IG5vdCByZXNwb25kIGlt
bWVkaWF0ZWx5IGR1cmluZyBsb2FkIGV0YywKICAgICAvLyB3ZSBzaG91bGQgaWdub3JlIGFsbCBi
dXQgdGhlIGxhdGVzdCByZXF1ZXN0LgotICAgIG1faW50ZXJhY3Rpb25FbmdpbmUtPnpvb21Ub0Fy
ZWFHZXN0dXJlRW5kZWQoUVBvaW50Rih0YXJnZXQpLCBRUmVjdEYoYXJlYSkpOworICAgIG1fdmll
d3BvcnRIYW5kbGVyLT56b29tVG9BcmVhR2VzdHVyZUVuZGVkKFFQb2ludEYodGFyZ2V0KSwgUVJl
Y3RGKGFyZWEpKTsKIH0KIAogdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnN0YXJ0RHJhZyhj
b25zdCBXZWJDb3JlOjpEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBkcmFnSW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oCShyZXZpc2lvbiAxMTkzOTIpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgSW50UmVjdDsKIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBOYXRpdmVXZWJUb3VjaEV2ZW50OwotY2xhc3MgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOworY2xhc3MgUXRWaWV3cG9ydEhhbmRsZXI7CiBjbGFzcyBTaGFyZWFibGVCaXRtYXA7
CiBjbGFzcyBXZWJHZXN0dXJlRXZlbnQ7CiBjbGFzcyBXZWJQYWdlUHJveHk7CkBAIC03NSw3ICs3
NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZUlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0
aG9kRXZlbnQqKTsKICAgICB2b2lkIGhhbmRsZVRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqKTsKIAot
ICAgIHZvaWQgc2V0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUqKTsKKyAgICB2b2lkIHNldFZpZXdwb3J0SGFuZGxlcihRdFZpZXdwb3J0SGFuZGxl
ciopOwogCiAgICAgdm9pZCBhY3RpdmF0ZVRhcEhpZ2hsaWdodChjb25zdCBRVG91Y2hFdmVudDo6
VG91Y2hQb2ludCYpOwogICAgIHZvaWQgZGVhY3RpdmF0ZVRhcEhpZ2hsaWdodCgpOwpAQCAtOTAs
MTMgKzkwLDEzIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZvaWQgcmVzZXRHZXN0dXJlUmVjb2du
aXplcnMoKTsKIAotICAgIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSogaW50ZXJhY3Rpb25F
bmdpbmUoKSB7IHJldHVybiBtX2ludGVyYWN0aW9uRW5naW5lOyB9CisgICAgUXRWaWV3cG9ydEhh
bmRsZXIqIHZpZXdwb3J0SGFuZGxlcigpIHsgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVyOyB9CiAK
ICAgICB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViUGFnZVBy
b3h5KiBtX3dlYlBhZ2VQcm94eTsKLSAgICBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUqIG1f
aW50ZXJhY3Rpb25FbmdpbmU7CisgICAgUXRWaWV3cG9ydEhhbmRsZXIqIG1fdmlld3BvcnRIYW5k
bGVyOwogICAgIFF0UGFuR2VzdHVyZVJlY29nbml6ZXIgbV9wYW5HZXN0dXJlUmVjb2duaXplcjsK
ICAgICBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyOwog
ICAgIFF0VGFwR2VzdHVyZVJlY29nbml6ZXIgbV90YXBHZXN0dXJlUmVjb2duaXplcjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>