<?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>21298</bug_id>
          
          <creation_ts>2008-10-01 23:43:26 -0700</creation_ts>
          <short_desc>Make updateScrollbars cross-platform</short_desc>
          <delta_ts>2008-10-02 11:24:17 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>21083</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>93679</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-01 23:43:26 -0700</bug_when>
    <thetext>Make updateScrollbars cross-platform on ScrollView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93681</commentid>
    <comment_count>1</comment_count>
      <attachid>24007</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-01 23:46:17 -0700</bug_when>
    <thetext>Created attachment 24007
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93682</commentid>
    <comment_count>2</comment_count>
      <attachid>24007</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-01 23:50:24 -0700</bug_when>
    <thetext>Comment on attachment 24007
Patch

Never mind.  I need to remove more code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93686</commentid>
    <comment_count>3</comment_count>
      <attachid>24008</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-02 00:04:58 -0700</bug_when>
    <thetext>Created attachment 24008
Patch #2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93687</commentid>
    <comment_count>4</comment_count>
      <attachid>24009</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-02 00:06:43 -0700</bug_when>
    <thetext>Created attachment 24009
Patch #3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93690</commentid>
    <comment_count>5</comment_count>
      <attachid>24009</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-02 00:38:05 -0700</bug_when>
    <thetext>Comment on attachment 24009
Patch #3

+        The ScrollView now implement ScrollbarClient, which means that there was a clash of windowClipRect methods from the
s/implement/implements/

+            }
+        }
+        else {
+            scrollsHorizontally = (hScroll == ScrollbarAuto) ? hasHorizontalScrollbar : (hScroll == ScrollbarAlwaysOn);

The else should be on the same line as the }.

+        if (pageStep &lt; 0) pageStep = clientWidth;
This should be on two lines.

+        if (pageStep &lt; 0) pageStep = clientHeight;
As should this

-// FIXME: ScrollViewPrivate will eventually be completely gone.  It&apos;s already gone on Mac.
-#if !PLATFORM(MAC)
+// FIXME: ScrollViewPrivate will eventually be completely gone.
I think this #if was incorrectly removed.

Otherwise, looks nice.  r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93757</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-10-02 11:24:17 -0700</bug_when>
    <thetext>Fixed in r37198.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24007</attachid>
            <date>2008-10-01 23:46:17 -0700</date>
            <delta_ts>2008-10-02 00:04:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>39170</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzE4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDgtMTAtMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5
OAorICAgICAgICAKKyAgICAgICAgTWFrZSB1cGRhdGVTY3JvbGxiYXJzIGNyb3NzLXBsYXRmb3Jt
LiAgRm9yIG5vdyBhIHN0dWJiZWQgb3V0IHNjcm9sbENvbnRlbnRzIGZ1bmN0aW9uIGlzIGludm9r
ZWQgdG8gZG8gdGhlIHNjcm9sbGluZyBvZiB0aGUgYmFja2luZyBzdG9yZS4gIE5leHQgcGF0Y2gK
KyAgICAgICAgd2lsbCBtYWtlIHRoYXQgY3Jvc3MtcGxhdGZvcm0uICAKKyAgICAgICAgCisgICAg
ICAgIFRoZSBTY3JvbGxWaWV3IG5vdyBpbXBsZW1lbnQgU2Nyb2xsYmFyQ2xpZW50LCB3aGljaCBt
ZWFucyB0aGF0IHRoZXJlIHdhcyBhIGNsYXNoIG9mIHdpbmRvd0NsaXBSZWN0IG1ldGhvZHMgZnJv
bSB0aGUKKyAgICAgICAgbXVsdGlwbGUgaW5oZXJpdGFuY2UuICBGb3Igbm93IEkgc29sdmVkIHRo
aXMgYnkgYWRkaW5nIGEgU2Nyb2xsYmFyKiB0byB0aGUgU2Nyb2xsYmFyQ2xpZW50IHZlcnNpb24g
b2YgdGhlIG1ldGhvZCwgYnV0IGxvbmdlciB0ZXJtCisgICAgICAgIHdpbmRvd0NsaXBSZWN0IGlz
IGdvaW5nIHRvIGJlIHJlbW92ZWQgZnJvbSBTY3JvbGxiYXJDbGllbnQgKHdoZW4gV2lkZ2V0IGlu
dmFsaWRhdGlvbiBnZXRzIHJld3JpdHRlbikuCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojppc0FjdGl2ZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dmlzaWJsZUNvbnRlbnRzUmVzaXplZCk6CisgICAg
ICAgICogcGxhdGZvcm0vUG9wdXBNZW51Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3Ojp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRl
U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUhhbmRsZUhvcml6b250
YWxBZGp1c3RtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtSGFu
ZGxlVmVydGljYWxBZGp1c3RtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhckNs
aWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtSGFuZGxlSG9yaXpvbnRhbEFkanVzdG1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1IYW5kbGVWZXJ0aWNh
bEFkanVzdG1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50cyk6CisgICAgICAgICog
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1l
bnU6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp3aW5kb3dDbGlwUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RCb3g6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5oOgorCiAyMDA4LTEwLTAxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkocmV2aXNpb24gMzcxNjIpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtOTcwLDYgKzk3MSwx
MyBAQCB2b2lkIEZyYW1lVmlldzo6ZGlzcGF0Y2hTY2hlZHVsZWRFdmVudHMoCiAgICAgfQogfQog
CitJbnRSZWN0IEZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QoY29uc3QgU2Nyb2xsYmFyKikgY29u
c3QKK3sKKyAgICAvLyBXaGVuIHdlIGdldCBjYWxsZWQgYnkgdGhlIHNjcm9sbGJhciBjbGllbnQs
IGl0IG1lYW5zIHRoYXQgd2UgYXJlIG5vdCBjbGlwcGluZyB0byBjb250ZW50cywgc2luY2UKKyAg
ICAvLyB0aGVzZSBzY3JvbGxiYXJzIGFyZSBvdXJzLgorICAgIHJldHVybiB3aW5kb3dDbGlwUmVj
dChmYWxzZSk7Cit9CisKIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIHdpbmRvd0NsaXBSZWN0KHRydWUpOwpAQCAtMTAxMSw2ICsxMDE5LDEy
IEBAIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdEZvckxheWUKICAgICByZXR1cm4g
aW50ZXJzZWN0aW9uKGNsaXBSZWN0LCB3aW5kb3dDbGlwUmVjdCgpKTsKIH0KIAorYm9vbCBGcmFt
ZVZpZXc6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS0+cGFn
ZSgpOworICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2
ZSgpOworfQorCiBJbnRSZWN0IEZyYW1lVmlldzo6d2luZG93UmVzaXplclJlY3QoKSBjb25zdAog
ewogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpID8gZnJhbWUoKS0+cGFnZSgpIDogMDsKSW5kZXg6
IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgJKHJldmlzaW9uIDM3MTU5KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTEsMTAgKzExMSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGp1
c3RWaWV3U2l6ZSgpOwogICAgIHZvaWQgaW5pdFNjcm9sbGJhcnMoKTsKICAgICAKKyAgICB2aXJ0
dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoY29uc3QgU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAg
dmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7CiAgICAgSW50UmVjdCB3aW5k
b3dDbGlwUmVjdChib29sIGNsaXBUb0NvbnRlbnRzKSBjb25zdDsKICAgICBJbnRSZWN0IHdpbmRv
d0NsaXBSZWN0Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqLCBib29sIGNsaXBUb0xheWVyQ29u
dGVudHMpIGNvbnN0OwogCisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworCiAgICAgdmlydHVh
bCBJbnRSZWN0IHdpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2Nyb2xsUmVjdEludG9WaWV3UmVjdXJzaXZlbHkoY29uc3QgSW50UmVjdCYpOwpAQCAtMTc4LDYg
KzE4MSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludENvbnRlbnRSZWN0
YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgaW1tZWRpYXRlKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y29udGVudHNSZXNpemVkKCkgeyBzZXROZWVkc0xheW91dCgpOyB9CisgICAgdmlydHVhbCB2b2lk
IHZpc2libGVDb250ZW50c1Jlc2l6ZWQoKSB7IGxheW91dCgpOyB9CiAKICAgICBzdGF0aWMgZG91
YmxlIHNDdXJyZW50UGFpbnRUaW1lU3RhbXA7IC8vIHVzZWQgZm9yIGRldGVjdGluZyBkZWNvZGVk
IHJlc291cmNlIHRocmFzaCBpbiB0aGUgY2FjaGUKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Q
b3B1cE1lbnUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5oCShy
ZXZpc2lvbiAzNzE0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBwcml2YXRlOgogI2VsaWYgUExBVEZPUk0oV0lOKQog
ICAgIC8vIFNjcm9sbEJhckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Ny
b2xsYmFyKik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAog
ICAgIHZvaWQgY2FsY3VsYXRlUG9zaXRpb25BbmRTaXplKGNvbnN0IEludFJlY3QmLCBGcmFtZVZp
ZXcqKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gMzcxNjIpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw5ICs0
NiwxNiBAQCB2b2lkIFNjcm9sbFZpZXc6OmluaXQoKQogICAgICAgICBwbGF0Zm9ybVNldENhbkJs
aXRPblNjcm9sbCgpOwogICAgIG1fc2Nyb2xsYmFyc0F2b2lkaW5nUmVzaXplciA9IDA7CiAgICAg
bV9zY3JvbGxiYXJzU3VwcHJlc3NlZCA9IGZhbHNlOworICAgIG1faW5VcGRhdGVTY3JvbGxiYXJz
ID0gZmFsc2U7CiAgICAgbV9kcmF3UGFuU2Nyb2xsSWNvbiA9IGZhbHNlOwogfQogCit2b2lkIFNj
cm9sbFZpZXc6OmRlc3Ryb3koKQoreworICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoZmFs
c2UpOworICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKK30KKwogdm9pZCBTY3Jv
bGxWaWV3OjphZGRDaGlsZChXaWRnZXQqIGNoaWxkKSAKIHsKICAgICBBU1NFUlQoY2hpbGQgIT0g
dGhpcyAmJiAhY2hpbGQtPnBhcmVudCgpKTsKQEAgLTcwLDYgKzc3LDI4IEBAIHZvaWQgU2Nyb2xs
Vmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0KiBjaGkKICAgICAgICAgcGxhdGZvcm1SZW1vdmVDaGls
ZChjaGlsZCk7CiB9CiAKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJh
cihib29sIGhhc0JhcikKK3sKKyAgICBpZiAoaGFzQmFyICYmICFtX2hvcml6b250YWxTY3JvbGxi
YXIpIHsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gU2Nyb2xsYmFyOjpjcmVhdGVO
YXRpdmVTY3JvbGxiYXIodGhpcywgSG9yaXpvbnRhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJh
cik7CisgICAgICAgIGFkZENoaWxkKG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKSk7CisgICAg
fSBlbHNlIGlmICghaGFzQmFyICYmIG1faG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBy
ZW1vdmVDaGlsZChtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCkpOworICAgICAgICBtX2hvcml6
b250YWxTY3JvbGxiYXIgPSAwOworICAgIH0KK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRIYXNW
ZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc0JhcikKK3sKKyAgICBpZiAoaGFzQmFyICYmICFtX3Zl
cnRpY2FsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIgPSBTY3JvbGxi
YXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgUmVndWxh
clNjcm9sbGJhcik7CisgICAgICAgIGFkZENoaWxkKG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCkp
OworICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiBtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7CisgICAg
ICAgIHJlbW92ZUNoaWxkKG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCkpOworICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyID0gMDsKKyAgICB9Cit9CisKIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Ny
b2xsYmFyTW9kZXMoU2Nyb2xsYmFyTW9kZSBob3Jpem9udGFsTW9kZSwgU2Nyb2xsYmFyTW9kZSB2
ZXJ0aWNhbE1vZGUpCiB7CiAgICAgaWYgKGhvcml6b250YWxNb2RlID09IGhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKCkgJiYgdmVydGljYWxNb2RlID09IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSgpKQpA
QCAtMTU1LDYgKzE4NCwxMCBAQCBJbnRQb2ludCBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsUG9z
aXRpCiAgICAgcmV0dXJuIEludFBvaW50KG1heGltdW1PZmZzZXQud2lkdGgoKSwgbWF4aW11bU9m
ZnNldC5oZWlnaHQoKSk7CiB9CiAKK3ZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9s
bGJhciopCit7Cit9CisKIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXJz
aXZlbHkoY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAocHJvaGliaXRzU2Nyb2xsaW5nKCkp
CkBAIC0yMDMsNiArMjM2LDEzMSBAQCBib29sIFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNj
cm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKK3sKKyAgICAvLyBEb24ndCBh
bGxvdyByZS1lbnRyYW5jeSBpbnRvIHRoaXMgZnVuY3Rpb24uCisgICAgaWYgKG1faW5VcGRhdGVT
Y3JvbGxiYXJzIHx8IHByb2hpYml0c1Njcm9sbGluZygpIHx8IHBsYXRmb3JtV2lkZ2V0KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faW5VcGRhdGVTY3JvbGxiYXJzID0gdHJ1ZTsKKworICAg
IGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyOworICAgIGJv
b2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IG1faG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBi
b29sIG9sZEhhc1ZlcnRpY2FsID0gaGFzVmVydGljYWxTY3JvbGxiYXI7CisgICAgYm9vbCBvbGRI
YXNIb3Jpem9udGFsID0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBTY3JvbGxiYXJNb2Rl
IGhTY3JvbGwgPSBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlOworICAgIFNjcm9sbGJhck1vZGUg
dlNjcm9sbCA9IG1fdmVydGljYWxTY3JvbGxiYXJNb2RlOworCisgICAgY29uc3QgaW50IHNjcm9s
bGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJU
aGlja25lc3MoKTsKKworICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7
CisgICAgICAgIGJvb2wgc2Nyb2xsc1ZlcnRpY2FsbHk7CisgICAgICAgIGJvb2wgc2Nyb2xsc0hv
cml6b250YWxseTsKKworICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKGhT
Y3JvbGwgPT0gU2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pKSB7Cisg
ICAgICAgICAgICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5nIGJlZm9yZSBjaGVja2luZyBpZiBz
Y3JvbGxiYXJzIGFyZSBuZWVkZWQuCisgICAgICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxi
YXIgIT0gb2xkSGFzVmVydGljYWwgfHwgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciAhPSBvbGRIYXNI
b3Jpem9udGFsKQorICAgICAgICAgICAgICAgIHZpc2libGVDb250ZW50c1Jlc2l6ZWQoKTsKKwor
ICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdh
eXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c0hlaWdodCgpID4g
aGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKHNjcm9sbHNWZXJ0aWNhbGx5KQorICAgICAgICAg
ICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNP
bikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c1dpZHRoKCkgKyBzY3Jv
bGxiYXJUaGlja25lc3MgPiB3aWR0aCgpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNP
bikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c1dpZHRoKCkgPiB3aWR0
aCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsc0hvcml6b250YWxseSkKKyAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdh
eXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c0hlaWdodCgpICsg
c2Nyb2xsYmFyVGhpY2tuZXNzID4gaGVpZ2h0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Ny
b2xsID09IFNjcm9sbGJhckF1dG8pID8gaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA6IChoU2Nyb2xs
ID09IFNjcm9sbGJhckFsd2F5c09uKTsKKyAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0g
KHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNWZXJ0aWNhbFNjcm9sbGJhciA6ICh2U2Ny
b2xsID09IFNjcm9sbGJhckFsd2F5c09uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyICE9IHNjcm9sbHNWZXJ0aWNhbGx5KSB7CisgICAgICAg
ICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxzVmVydGljYWxseSk7CisgICAgICAg
ICAgICBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbHNWZXJ0aWNhbGx5OworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIgIT0gc2Nyb2xsc0hvcml6b250
YWxseSkgeworICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9y
aXpvbnRhbGx5KTsKKyAgICAgICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxz
SG9yaXpvbnRhbGx5OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFNldCB1cCB0aGUg
cmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBJbnRTaXplIG1heFNjcm9sbFBv
c2l0aW9uKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpLCBjb250ZW50c0hlaWdodCgp
IC0gdmlzaWJsZUhlaWdodCgpKTsKKyAgICBJbnRTaXplIHNjcm9sbCA9IGRlc2lyZWRPZmZzZXQu
c2hydW5rVG8obWF4U2Nyb2xsUG9zaXRpb24pOworICAgIHNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9a
ZXJvKCk7CisgCisgICAgaWYgKCFwbGF0Zm9ybUhhbmRsZUhvcml6b250YWxBZGp1c3RtZW50KHNj
cm9sbCkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIGludCBjbGllbnRXaWR0
aCA9IHZpc2libGVXaWR0aCgpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEVu
YWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOworICAgICAgICBpbnQgcGFnZVN0
ZXAgPSAoY2xpZW50V2lkdGggLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7CisgICAgICAgIGlm
IChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50V2lkdGg7CisgICAgICAgIEludFJlY3Qg
b2xkUmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICAgICAgSW50
UmVjdCBoQmFyUmVjdCA9IEludFJlY3QoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gKG1fdmVydGljYWxTY3JvbGxi
YXIgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChoQmFyUmVjdCk7CisgICAg
ICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkK
KyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRp
b24odHJ1ZSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Njcm9s
bGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CisgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsKKyAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7Cisg
ICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7IAorICAgIH0gCisK
KyAgICBpZiAoIXBsYXRmb3JtSGFuZGxlVmVydGljYWxBZGp1c3RtZW50KHNjcm9sbCkgJiYgbV92
ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhl
aWdodCgpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRFbmFibGVkKGNvbnRlbnRz
SGVpZ2h0KCkgPiBjbGllbnRIZWlnaHQpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50
SGVpZ2h0IC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOworICAgICAgICBpZiAocGFnZVN0ZXAg
PCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKKyAgICAgICAgSW50UmVjdCBvbGRSZWN0KG1f
dmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICAgICAgSW50UmVjdCB2QmFyUmVj
dCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2hvcml6b250YWxTY3JvbGxiYXIg
PyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMCkpOworICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QodkJhclJlY3QpOworICAgICAgICBpZiAoIW1fc2Ny
b2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFt
ZVJlY3QoKSkKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsK
KworICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOworICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAs
IHBhZ2VTdGVwKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOworICAgICAgICBpZiAobV9zY3JvbGxiYXJz
U3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNz
SW52YWxpZGF0aW9uKGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAob2xkSGFzVmVydGljYWwgIT0g
KG1fdmVydGljYWxTY3JvbGxiYXIgIT0gMCkgfHwgb2xkSGFzSG9yaXpvbnRhbCAhPSAobV9ob3Jp
em9udGFsU2Nyb2xsYmFyICE9IDApKQorICAgICAgICBmcmFtZVJlY3RzQ2hhbmdlZCgpOworCisg
ICAgLy8gU2VlIGlmIG91ciBvZmZzZXQgaGFzIGNoYW5nZWQgaW4gYSBzaXR1YXRpb24gd2hlcmUg
d2UgbWlnaHQgbm90IGhhdmUgc2Nyb2xsYmFycy4KKyAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hl
biBlZGl0aW5nIGEgYm9keSB3aXRoIG92ZXJmbG93OmhpZGRlbiBhbmQgc2Nyb2xsaW5nIHRvIHJl
dmVhbCBzZWxlY3Rpb24uCisgICAgLy8gSXQgY2FuIGFsc28gaGFwcGVuIHdoZW4gbWF4aW1pemlu
ZyBhIHdpbmRvdyB0aGF0IGhhcyBzY3JvbGxiYXJzIChidXQgdGhlIG5ldyBtYXhpbWl6ZWQgcmVz
dWx0CisgICAgLy8gZG9lcyBub3QpLgorICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBzY3JvbGwg
LSBtX3Njcm9sbE9mZnNldDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEgIT0gSW50U2l6ZSgpKSB7Cisg
ICAgICAgbV9zY3JvbGxPZmZzZXQgPSBzY3JvbGw7CisgICAgICAgc2Nyb2xsQ29udGVudHMoc2Ny
b2xsRGVsdGEpOworICAgIH0KKworICAgIG1faW5VcGRhdGVTY3JvbGxiYXJzID0gZmFsc2U7Cit9
CisKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdYKQorLy8gRklYTUU6IFRoaXMgaXMg
anVzdCB0ZW1wb3Jhcnkgc28gd2UgY2FuIGNvbW1pdCBhIGNyb3NzLXBsYXRmb3JtIHZlcnNpb24g
b2YgdXBkYXRlU2Nyb2xsYmFycy4KK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVudHMoY29u
c3QgSW50U2l6ZSYpCit7Cit9CisjZW5kaWYKKwogSW50UG9pbnQgU2Nyb2xsVmlldzo6d2luZG93
VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpIGNvbnN0CiB7CiAgICAgSW50
UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KHdpbmRvd1BvaW50
KTsKQEAgLTU4Nyw1ICs3NDUsMTcgQEAgYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUlzT2Zmc2Ny
ZWVuKCkgYwogfQogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oR1RLKQorYm9vbCBTY3JvbGxWaWV3
OjpwbGF0Zm9ybUhhbmRsZUhvcml6b250YWxBZGp1c3RtZW50KGNvbnN0IEludFNpemUmKQorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUhhbmRsZVZl
cnRpY2FsQWRqdXN0bWVudChjb25zdCBJbnRTaXplJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisjZW5kaWYKKwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gMzcxNjIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5o
IgorI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgi
CiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKQEAgLTU4LDExICs1OSwxNCBAQCBjbGFzcyBIb3N0V2lu
ZG93OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgU2Nyb2xsYmFyOwogCi1jbGFz
cyBTY3JvbGxWaWV3IDogcHVibGljIFdpZGdldCB7CitjbGFzcyBTY3JvbGxWaWV3IDogcHVibGlj
IFdpZGdldCwgcHVibGljIFNjcm9sbGJhckNsaWVudCB7CiBwdWJsaWM6CiAgICAgU2Nyb2xsVmll
dygpOwogICAgIH5TY3JvbGxWaWV3KCk7CiAKKyAgICAvLyBTY3JvbGxiYXJDbGllbnQgbWV0aG9k
LiAgRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXIgdHdvLgorICAgIHZpcnR1YWwgdm9pZCB2
YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAgCiAgICAgLy8gVGhlIHdpbmRvdyB0aGF0cyBo
b3N0cyB0aGUgU2Nyb2xsVmlldy4gIFRoZSBTY3JvbGxWaWV3IHdpbGwgY29tbXVuaWNhdGUgc2Ny
b2xscyBhbmQgcmVwYWludHMgdG8gdGhlCiAgICAgLy8gaG9zdCB3aW5kb3cgaW4gdGhlIHdpbmRv
dydzIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93
KCkgY29uc3QgPSAwOwpAQCAtMjAxLDcgKzIwNSw5IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgcmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJv
b2wgbm93ID0gZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpID0gMDsKKyAgICAKICAgICB2aXJ0
dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpYmxl
Q29udGVudHNSZXNpemVkKCkgPSAwOwogICAgIAogICAgIHZvaWQgdXBkYXRlV2luZG93UmVjdChj
b25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7CiAKQEAgLTIyMCwxMCArMjI2LDIzIEBA
IHByaXZhdGU6CiAgICAgaW50IG1fc2Nyb2xsYmFyc0F2b2lkaW5nUmVzaXplcjsKICAgICBib29s
IG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQ7CiAKKyAgICBib29sIG1faW5VcGRhdGVTY3JvbGxiYXJz
OworCiAgICAgSW50UG9pbnQgbV9wYW5TY3JvbGxJY29uUG9pbnQ7CiAgICAgYm9vbCBtX2RyYXdQ
YW5TY3JvbGxJY29uOwogCiAgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBkZXN0cm95KCk7CisK
KyAgICAvLyBDYWxsZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXJzIHRvIGFjY3VyYXRlbHkgcmVm
bGVjdCB0aGUgc3RhdGUgb2YgdGhlIHZpZXcuCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKGNv
bnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpOworCisgICAgLy8gU2Nyb2xsIHRoZSBhY3R1YWwg
Y29udGVudHMgb2YgdGhlIHZpZXcgKGVpdGhlciBibGl0dGluZyBvciBpbnZhbGlkYXRpbmcgYXMg
bmVlZGVkKS4KKyAgICB2b2lkIHNjcm9sbENvbnRlbnRzKGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhKTsKKworICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8gY3JlYXRlL2Rlc3Ryb3kg
c2Nyb2xsYmFycy4KKyAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCk7Cisg
ICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKIAogICAgIHZvaWQgcGxhdGZv
cm1BZGRDaGlsZChXaWRnZXQqKTsKICAgICB2b2lkIHBsYXRmb3JtUmVtb3ZlQ2hpbGQoV2lkZ2V0
Kik7CkBAIC0yNDAsNiArMjU5LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHBsYXRmb3JtU2V0U2Ny
b2xsYmFyc1N1cHByZXNzZWQoYm9vbCByZXBhaW50T25VbnN1cHByZXNzKTsKICAgICB2b2lkIHBs
YXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgbm93KTsK
ICAgICBib29sIHBsYXRmb3JtSXNPZmZzY3JlZW4oKSBjb25zdDsKKyAgICBib29sIHBsYXRmb3Jt
SGFuZGxlSG9yaXpvbnRhbEFkanVzdG1lbnQoY29uc3QgSW50U2l6ZSYpOworICAgIGJvb2wgcGxh
dGZvcm1IYW5kbGVWZXJ0aWNhbEFkanVzdG1lbnQoY29uc3QgSW50U2l6ZSYpOwogCiAjaWYgUExB
VEZPUk0oTUFDKSAmJiBkZWZpbmVkIF9fT0JKQ19fCiBwdWJsaWM6CkBAIC0yNDksMjQgKzI3MCwx
NyBAQCBwcml2YXRlOgogICAgIE5TU2Nyb2xsVmlldzxXZWJDb3JlRnJhbWVTY3JvbGxWaWV3Piog
c2Nyb2xsVmlldygpIGNvbnN0OwogI2VuZGlmCiAKLS8vIEZJWE1FOiBTY3JvbGxWaWV3UHJpdmF0
ZSB3aWxsIGV2ZW50dWFsbHkgYmUgY29tcGxldGVseSBnb25lLiAgSXQncyBhbHJlYWR5IGdvbmUg
b24gTWFjLgotI2lmICFQTEFURk9STShNQUMpCisvLyBGSVhNRTogU2Nyb2xsVmlld1ByaXZhdGUg
d2lsbCBldmVudHVhbGx5IGJlIGNvbXBsZXRlbHkgZ29uZS4KICAgICBjbGFzcyBTY3JvbGxWaWV3
UHJpdmF0ZTsKICAgICBTY3JvbGxWaWV3UHJpdmF0ZSogbV9kYXRhOwogCiAgICAgZnJpZW5kIGNs
YXNzIFNjcm9sbFZpZXdQcml2YXRlOyAvLyBGSVhNRTogVGVtcG9yYXJ5LgotI2VuZGlmCiAgICAg
CiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFdYKQogcHVibGljOgogICAgIHZvaWQg
YWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBzY3JvbGxCYWNraW5n
U3RvcmUoaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJl
ZE9mZnNldCk7Ci0jZWxzZQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycyhjb25zdCBJbnRTaXpl
JiBkZXNpcmVkT2Zmc2V0KSB7fSAvLyBGSVhNRTogVGVtcG9yYXJ5LgogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShXSU4pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiAzNzE0OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI0
LDcgKzQyNCw3IEBAIEludFJlY3QgU2Nyb2xsYmFyOjp3aW5kb3dDbGlwUmVjdCgpIGNvbnMKIAog
ICAgIGNsaXBSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjbGlwUmVjdCk7CiAgICAg
aWYgKG1fY2xpZW50KQotICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3QobV9jbGllbnQtPndpbmRv
d0NsaXBSZWN0KCkpOworICAgICAgICBjbGlwUmVjdC5pbnRlcnNlY3QobV9jbGllbnQtPndpbmRv
d0NsaXBSZWN0KHRoaXMpKTsKIAogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkocmV2aXNpb24gMzcxNDgpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopID0gMDsKIAog
ICAgIC8vIFVzZWQgdG8gb2J0YWluIGEgd2luZG93IGNsaXAgcmVjdC4KLSAgICB2aXJ0dWFsIElu
dFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IHdp
bmRvd0NsaXBSZWN0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxWaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2d0ay9T
Y3JvbGxWaWV3R3RrLmNwcAkocmV2aXNpb24gMzcxNzMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2d0
ay9TY3JvbGxWaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk4LDY1ICsyOTgsOCBAQCB2
b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtUmVtb3ZlQ2hpbGQoV2lkCiAgICAgICAgIGd0a19jb250
YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIoY29udGFpbmluZ1dpbmRvdygpKSwgY2hpbGQtPnBs
YXRmb3JtV2lkZ2V0KCkpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMo
Y29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1I
YW5kbGVIb3Jpem9udGFsQWRqdXN0bWVudChjb25zdCBJbnRTaXplJiBzY3JvbGwpCiB7Ci0gICAg
Ly8gRG9uJ3QgYWxsb3cgcmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgotICAgIGlmICht
X2RhdGEtPmluVXBkYXRlU2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHBy
b2hpYml0c1Njcm9sbGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPmluVXBk
YXRlU2Nyb2xsYmFycyA9IHRydWU7Ci0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0g
bV92ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBt
X2hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgYm9vbCBvbGRIYXNWZXJ0aWNhbCA9IGhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyOwotICAgIGJvb2wgb2xkSGFzSG9yaXpvbnRhbCA9IGhhc0hvcml6b250YWxT
Y3JvbGxiYXI7Ci0gICAgU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsID0gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyTW9kZTsKLSAgICBTY3JvbGxiYXJNb2RlIHZTY3JvbGwgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFy
TW9kZTsKLQotICAgIGNvbnN0IGludCBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVt
ZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0KLSAgICBmb3IgKGludCBw
YXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykgewotICAgICAgICBib29sIHNjcm9sbHNWZXJ0aWNh
bGx5OwotICAgICAgICBib29sIHNjcm9sbHNIb3Jpem9udGFsbHk7Ci0KLSAgICAgICAgaWYgKCFt
X3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gfHwgdlNj
cm9sbCA9PSBTY3JvbGxiYXJBdXRvKSkgewotICAgICAgICAgICAgLy8gRG8gYSBsYXlvdXQgaWYg
cGVuZGluZyBiZWZvcmUgY2hlY2tpbmcgaWYgc2Nyb2xsYmFycyBhcmUgbmVlZGVkLgotICAgICAg
ICAgICAgaWYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyICE9IG9sZEhhc1ZlcnRpY2FsIHx8IGhhc0hv
cml6b250YWxTY3JvbGxiYXIgIT0gb2xkSGFzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlzKS0+bGF5b3V0KCk7Ci0KLSAgICAgICAgICAgIHNj
cm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Ny
b2xsID09IFNjcm9sbGJhckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKLSAg
ICAgICAgICAgIGlmIChzY3JvbGxzVmVydGljYWxseSkKLSAgICAgICAgICAgICAgICBzY3JvbGxz
SG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xs
ID09IFNjcm9sbGJhckF1dG8gJiYgY29udGVudHNXaWR0aCgpICsgc2Nyb2xsYmFyVGhpY2tuZXNz
ID4gd2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxz
SG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xs
ID09IFNjcm9sbGJhckF1dG8gJiYgY29udGVudHNXaWR0aCgpID4gd2lkdGgoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNjcm9sbHNIb3Jpem9udGFsbHkpCi0gICAgICAgICAgICAgICAgICAgIHNj
cm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Ny
b2xsID09IFNjcm9sbGJhckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSArIHNjcm9sbGJhclRoaWNr
bmVzcyA+IGhlaWdodCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxi
YXJBdXRvKSA/IGhhc0hvcml6b250YWxTY3JvbGxiYXIgOiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJB
bHdheXNPbik7Ci0gICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNj
cm9sbGJhckF1dG8pID8gaGFzVmVydGljYWxTY3JvbGxiYXIgOiAodlNjcm9sbCA9PSBTY3JvbGxi
YXJBbHdheXNPbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxi
YXIgIT0gc2Nyb2xsc1ZlcnRpY2FsbHkpIHsKLSAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVy
dGljYWxTY3JvbGxiYXIoc2Nyb2xsc1ZlcnRpY2FsbHkpOwotICAgICAgICAgICAgaGFzVmVydGlj
YWxTY3JvbGxiYXIgPSBzY3JvbGxzVmVydGljYWxseTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKLSAgICAg
ICAgICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9yaXpvbnRh
bGx5KTsKLSAgICAgICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpv
bnRhbGx5OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5k
IHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIEludFNpemUgbWF4U2Nyb2xsUG9zaXRpb24oY29u
dGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCksIGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxl
SGVpZ2h0KCkpOwotICAgIEludFNpemUgc2Nyb2xsID0gZGVzaXJlZE9mZnNldC5zaHJ1bmtUbyht
YXhTY3JvbGxQb3NpdGlvbik7Ci0gICAgc2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKLQog
ICAgIGlmIChtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KSB7CiAgICAgICAgIG1fZGF0YS0+
aG9yaXpvbnRhbEFkanVzdG1lbnQtPnBhZ2Vfc2l6ZSA9IHZpc2libGVXaWR0aCgpOwogICAgICAg
ICBtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IHZpc2libGVX
aWR0aCgpIC8gMTAuMDsKQEAgLTM2OSwyOSArMzEyLDEzIEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBk
YXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1fZGF0YS0+aG9yaXpvbnRhbEFkanVz
dG1lbnQtPnZhbHVlID0gc2Nyb2xsLndpZHRoKCk7CiAgICAgICAgICAgICBndGtfYWRqdXN0bWVu
dF92YWx1ZV9jaGFuZ2VkKG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOwogICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaW50IGNs
aWVudFdpZHRoID0gdmlzaWJsZVdpZHRoKCk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+c2V0RW5hYmxlZChjb250ZW50c1dpZHRoKCkgPiBjbGllbnRXaWR0aCk7Ci0gICAgICAgIGlu
dCBwYWdlU3RlcCA9IChjbGllbnRXaWR0aCAtIGNBbW91bnRUb0tlZXBXaGVuUGFnaW5nKTsKLSAg
ICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRXaWR0aDsKLSAgICAgICAg
SW50UmVjdCBvbGRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwotICAg
ICAgICBJbnRSZWN0IGhCYXJSZWN0ID0gSW50UmVjdCgwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV92ZXJ0aWNh
bFNjcm9sbGJhciA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQo
KSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KGhCYXJSZWN0
KTsKLSAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSkKLSAgICAgICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBw
cmVzc2VkKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0lu
dmFsaWRhdGlvbih0cnVlKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVw
cyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250ZW50c1dpZHRo
KCkpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0
aCgpKTsKLSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0gICAgICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAorYm9vbCBT
Y3JvbGxWaWV3OjpwbGF0Zm9ybUhhbmRsZVZlcnRpY2FsQWRqdXN0bWVudChjb25zdCBJbnRTaXpl
JiBzY3JvbGwpCit7CiAgICAgaWYgKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KSB7CiAgICAg
ICAgIG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50LT5wYWdlX3NpemUgPSB2aXNpYmxlSGVpZ2h0
KCk7CiAgICAgICAgIG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50LT5zdGVwX2luY3JlbWVudCA9
IHZpc2libGVIZWlnaHQoKSAvIDEwLjA7CkBAIC00MDQsNDMgKzMzMSw5IEBAIHZvaWQgU2Nyb2xs
Vmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1fZGF0YS0+dmVydGlj
YWxBZGp1c3RtZW50LT52YWx1ZSA9IHNjcm9sbC5oZWlnaHQoKTsKICAgICAgICAgICAgIGd0a19h
ZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpOwogICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGlu
dCBjbGllbnRIZWlnaHQgPSB2aXNpYmxlSGVpZ2h0KCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdodCk7Ci0gICAg
ICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBjQW1vdW50VG9LZWVwV2hlblBhZ2lu
Zyk7Ci0gICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50SGVpZ2h0Owot
ICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkp
OwotICAgICAgICBJbnRSZWN0IHZCYXJSZWN0ID0gSW50UmVjdCh3aWR0aCgpIC0gbV92ZXJ0aWNh
bFNjcm9sbGJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkg
LSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQo
KSA6IDApKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHZCYXJS
ZWN0KTsKLSAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0g
bV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCi0gICAgICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHBy
ZXNzZWQpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFs
aWRhdGlvbih0cnVlKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Nj
cm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsK
LSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpKTsK
LSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0gICAgICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7Ci0gICAgfQotCi0g
ICAgaWYgKG9sZEhhc1ZlcnRpY2FsICE9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICE9IDApIHx8IG9s
ZEhhc0hvcml6b250YWwgIT0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAhPSAwKSkKLSAgICAgICAg
ZnJhbWVSZWN0c0NoYW5nZWQoKTsKLQotICAgIC8vIFNlZSBpZiBvdXIgb2Zmc2V0IGhhcyBjaGFu
Z2VkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG1pZ2h0IG5vdCBoYXZlIHNjcm9sbGJhcnMuCi0g
ICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZWRpdGluZyBhIGJvZHkgd2l0aCBvdmVyZmxvdzpo
aWRkZW4gYW5kIHNjcm9sbGluZyB0byByZXZlYWwgc2VsZWN0aW9uLgotICAgIC8vIEl0IGNhbiBh
bHNvIGhhcHBlbiB3aGVuIG1heGltaXppbmcgYSB3aW5kb3cgdGhhdCBoYXMgc2Nyb2xsYmFycyAo
YnV0IHRoZSBuZXcgbWF4aW1pemVkIHJlc3VsdAotICAgIC8vIGRvZXMgbm90KS4KLSAgICBJbnRT
aXplIHNjcm9sbERlbHRhID0gc2Nyb2xsIC0gbV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9s
bERlbHRhICE9IEludFNpemUoKSkgewotICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsOwot
ICAgICAgIG1fZGF0YS0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKLSAgICB9Ci0K
LSAgICBtX2RhdGEtPmluVXBkYXRlU2Nyb2xsYmFycyA9IGZhbHNlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IAorICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3Ojph
ZGRUb0RpcnR5UmVnaW9uKGNvbnN0IEludFJlY3QmIGNvbnRhaW5pbmdXaW5kb3dSZWN0KQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAkocmV2aXNpb24gMzcxNjIpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MCwxNDkgKzE4MCw5IEBAIFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKICAgICBkZWxldGUgbV9k
YXRhOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6
ZSYgZGVzaXJlZE9mZnNldCkKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVudHMoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIHsKLSAgICAvLyBEb24ndCBhbGxvdyByZS1lbnRyYW5jeSBpbnRvIHRo
aXMgZnVuY3Rpb24uCi0gICAgaWYgKG1fZGF0YS0+bV9pblVwZGF0ZVNjcm9sbGJhcnMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChwcm9oaWJpdHNTY3JvbGxpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIG1fZGF0YS0+bV9pblVwZGF0ZVNjcm9sbGJhcnMgPSB0cnVlOwotCi0g
ICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0gICAg
Ym9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyOwotICAg
IGJvb2wgb2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICBib29sIG9s
ZEhhc0hvcml6b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIFNjcm9sbGJhck1v
ZGUgaFNjcm9sbCA9IG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGU7Ci0gICAgU2Nyb2xsYmFyTW9k
ZSB2U2Nyb2xsID0gbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGU7Ci0KLSAgICBjb25zdCBpbnQgY1Zl
cnRpY2FsV2lkdGggPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFyVGhp
Y2tuZXNzKCk7Ci0gICAgY29uc3QgaW50IGNIb3Jpem9udGFsSGVpZ2h0ID0gU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwotCi0gICAgZm9yIChpbnQg
cGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKLSAgICAgICAgYm9vbCBzY3JvbGxzVmVydGlj
YWxseTsKLSAgICAgICAgYm9vbCBzY3JvbGxzSG9yaXpvbnRhbGx5OwotCi0gICAgICAgIGlmICgh
bV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvIHx8IHZT
Y3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykpIHsKLSAgICAgICAgICAgIC8vIERvIGEgbGF5b3V0IGlm
IHBlbmRpbmcgYmVmb3JlIGNoZWNraW5nIGlmIHNjcm9sbGJhcnMgYXJlIG5lZWRlZC4KLSAgICAg
ICAgICAgIGlmIChoYXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBvbGRIYXNWZXJ0aWNhbCB8fCBoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyICE9IG9sZEhhc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyktPmxheW91dCgpOwotICAgICAgICAgICAgIAot
ICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdh
eXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c0hlaWdodCgpID4g
aGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKHNjcm9sbHNWZXJ0aWNhbGx5KQotICAgICAgICAg
ICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNP
bikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c1dpZHRoKCkgKyBjVmVy
dGljYWxXaWR0aCA+IHdpZHRoKCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8
fCAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzV2lkdGgoKSA+IHdpZHRoKCkp
OwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxzSG9yaXpvbnRhbGx5KQotICAgICAgICAgICAg
ICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09u
KSB8fCAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0KCkgKyBjSG9y
aXpvbnRhbEhlaWdodCA+IGhlaWdodCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9
PSBTY3JvbGxiYXJBdXRvKSA/IGhhc0hvcml6b250YWxTY3JvbGxiYXIgOiAoaFNjcm9sbCA9PSBT
Y3JvbGxiYXJBbHdheXNPbik7Ci0gICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Ny
b2xsID09IFNjcm9sbGJhckF1dG8pID8gaGFzVmVydGljYWxTY3JvbGxiYXIgOiAodlNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICho
YXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBzY3JvbGxzVmVydGljYWxseSkgewotICAgICAgICAgICAg
bV9kYXRhLT5zZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxzVmVydGljYWxseSk7Ci0gICAg
ICAgICAgICBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbHNWZXJ0aWNhbGx5OwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIgIT0gc2Nyb2xsc0hvcml6
b250YWxseSkgewotICAgICAgICAgICAgbV9kYXRhLT5zZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KHNjcm9sbHNIb3Jpem9udGFsbHkpOwotICAgICAgICAgICAgaGFzSG9yaXpvbnRhbFNjcm9sbGJh
ciA9IHNjcm9sbHNIb3Jpem9udGFsbHk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8g
U2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIEludFNpemUg
bWF4U2Nyb2xsUG9zaXRpb24oY29udGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCksIGNvbnRl
bnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpOwotICAgIEludFNpemUgc2Nyb2xsID0gZGVz
aXJlZE9mZnNldC5zaHJ1bmtUbyhtYXhTY3JvbGxQb3NpdGlvbik7Ci0gICAgc2Nyb2xsLmNsYW1w
TmVnYXRpdmVUb1plcm8oKTsKLQotICAgIFFQb2ludCBzY3JvbGxiYXJPZmZzZXQ7Ci0jaWYgZGVm
aW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTUFDX1VTRV9DT0NPQSkKLSAgICAvLyBPbiBN
YWMsIG9mZnNldCB0aGUgc2Nyb2xsYmFycyBzbyB0aGV5IGRvbid0IGNvdmVyIHRoZSBncm93IGJv
eC4gQ2hlY2sgaWYgdGhlIHdpbmRvdyAKLSAgICAvLyBoYXMgYSBncm93IGJveCwgYW5kIHRoZW4g
Y2hlY2sgaWYgdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgb2YgdGhlIHNjcm9sbCB2aWV3IAotICAg
IC8vIGludGVyc2VyY3RzIGl0LiBUaGUgY2FsY3VsYXRpb25zIGFyZSBkb25lIGluIGdsb2JhbCBj
b29yZGluYXRlcy4KLSAgICBRV2lkZ2V0KiBjb250ZW50V2lkZ2V0ID0gY29udGFpbmluZ1dpbmRv
dygpOwotICAgIGlmIChjb250ZW50V2lkZ2V0KSB7Ci0gICAgICAgIFFXaWRnZXQqIHdpbmRvd1dp
ZGdldCA9IGNvbnRlbnRXaWRnZXQtPndpbmRvdygpOwotICAgICAgICBpZiAod2luZG93V2lkZ2V0
KSB7Ci0gICAgICAgICAgICBISVZpZXdSZWYgZ3Jvd0JveCA9IDA7Ci0gICAgICAgICAgICBISVZp
ZXdGaW5kQnlJRChISVZpZXdHZXRSb290KEhJVmlld0dldFdpbmRvdyhISVZpZXdSZWYoY29udGVu
dFdpZGdldC0+d2luSWQoKSkpKSwga0hJVmlld1dpbmRvd0dyb3dCb3hJRCwgJmdyb3dCb3gpOwot
ICAgICAgICAgICAgY29uc3QgUVBvaW50IGNvbnRlbnRCciA9IGNvbnRlbnRXaWRnZXQtPm1hcFRv
R2xvYmFsKFFQb2ludCgwLDApKSArIGNvbnRlbnRXaWRnZXQtPnNpemUoKTsKLSAgICAgICAgICAg
IGNvbnN0IFFQb2ludCB3aW5kb3dCciA9IHdpbmRvd1dpZGdldC0+bWFwVG9HbG9iYWwoUVBvaW50
KDAsMCkpICsgd2luZG93V2lkZ2V0LT5zaXplKCk7Ci0gICAgICAgICAgICBjb25zdCBRUG9pbnQg
Y29udGVudE9mZnNldCA9ICh3aW5kb3dCciAtIGNvbnRlbnRCcik7Ci0gICAgICAgICAgICBjb25z
dCBpbnQgZ3Jvd0JveFNpemUgPSAxNTsKLSAgICAgICAgICAgIGNvbnN0IGJvb2wgZW5hYmxlT2Zm
c2V0ID0gKGdyb3dCb3ggIT0gMCAmJiBjb250ZW50T2Zmc2V0LngoKSA+PSAwICYmIGNvbnRlbnRP
ZmZzZXQuIHkoKSA+PSAwKTsKLSAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuYWJsZU9m
ZnNldCA/IFFQb2ludChncm93Qm94U2l6ZSAtIHFNaW4oY29udGVudE9mZnNldC54KCksIGdyb3dC
b3hTaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBncm93Qm94U2l6ZSAtIHFNaW4oY29udGVudE9mZnNldC55KCksIGdyb3dCb3hTaXplKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFFQb2ludCgwLDAp
OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xs
YmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVXaWR0aCgpOwotICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xp
ZW50V2lkdGgpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBjQW1vdW50
VG9LZWVwV2hlblBhZ2luZyk7Ci0gICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0g
Y2xpZW50V2lkdGg7Ci0gICAgICAgIEludFJlY3Qgb2xkUmVjdChtX2hvcml6b250YWxTY3JvbGxi
YXItPmZyYW1lUmVjdCgpKTsKLSAgICAgICAgSW50UmVjdCBoQmFyUmVjdCA9IEludFJlY3QoMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX2hvcml6b250
YWxTY3JvbGxiYXItPmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCgpIC0gKG1fdmVydGljYWxTY3JvbGxiYXIgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53
aWR0aCgpIDogc2Nyb2xsYmFyT2Zmc2V0LngoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwotICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChoQmFyUmVjdCk7Ci0gICAgICAgIGlmICgh
bV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmludmFs
aWRhdGUoKTsKLQotICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKLSAgICAgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7
Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVs
c1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsKLSAgICAgICAgbV9o
b3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7Ci0gICAgICAgIGlm
IChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7IAotICAgIH0gCi0KLSAgICBpZiAo
bV92ZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJs
ZUhlaWdodCgpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRFbmFibGVkKGNvbnRl
bnRzSGVpZ2h0KCkgPiBjbGllbnRIZWlnaHQpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xp
ZW50SGVpZ2h0IC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOwotICAgICAgICBpZiAocGFnZVN0
ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKLSAgICAgICAgSW50UmVjdCBvbGRSZWN0
KG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKLSAgICAgICAgSW50UmVjdCB2QmFy
UmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCksIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2hvcml6b250YWxTY3JvbGxi
YXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogc2Nyb2xsYmFyT2Zmc2V0Lnko
KSkpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QodkJhclJlY3Qp
OwotICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSkKLSAgICAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3Nl
ZCkKLSAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0
aW9uKHRydWUpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xs
YmFyUGl4ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwotICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOwotICAg
ICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKLSAgICAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBp
ZiAob2xkSGFzVmVydGljYWwgIT0gKG1fdmVydGljYWxTY3JvbGxiYXIgIT0gMCkgfHwgb2xkSGFz
SG9yaXpvbnRhbCAhPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICE9IDApKQotICAgICAgICBmcmFt
ZVJlY3RzQ2hhbmdlZCgpOwotCi0gICAgLy8gU2VlIGlmIG91ciBvZmZzZXQgaGFzIGNoYW5nZWQg
aW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgbWlnaHQgbm90IGhhdmUgc2Nyb2xsYmFycy4KLSAgICAv
LyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBlZGl0aW5nIGEgYm9keSB3aXRoIG92ZXJmbG93OmhpZGRl
biBhbmQgc2Nyb2xsaW5nIHRvIHJldmVhbCBzZWxlY3Rpb24uCi0gICAgLy8gSXQgY2FuIGFsc28g
aGFwcGVuIHdoZW4gbWF4aW1pemluZyBhIHdpbmRvdyB0aGF0IGhhcyBzY3JvbGxiYXJzIChidXQg
dGhlIG5ldyBtYXhpbWl6ZWQgcmVzdWx0Ci0gICAgLy8gZG9lcyBub3QpLgotICAgIEludFNpemUg
c2Nyb2xsRGVsdGEgPSBzY3JvbGwgLSBtX3Njcm9sbE9mZnNldDsKLSAgICBpZiAoc2Nyb2xsRGVs
dGEgIT0gSW50U2l6ZSgpKSB7Ci0gICAgICAgbV9zY3JvbGxPZmZzZXQgPSBzY3JvbGw7Ci0gICAg
ICAgbV9kYXRhLT5zY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOwotICAgIH0KLQotICAg
IG1fZGF0YS0+bV9pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKKyAgICBtX2RhdGEtPnNjcm9s
bEJhY2tpbmdTdG9yZShzaXplKTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENo
aWxkKFdpZGdldCogY2hpbGQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5j
cHAJKHJldmlzaW9uIDM3MTQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg0LDcgKzU4NCw3IEBAIHZvaWQgUG9wdXBNZW51Ojp2
YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiAKICAgICA6OlVwZGF0ZVdpbmRvdyhtX3BvcHVwKTsKIH0K
IAotSW50UmVjdCBQb3B1cE1lbnU6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKK0ludFJlY3QgUG9w
dXBNZW51Ojp3aW5kb3dDbGlwUmVjdChTY3JvbGxiYXIqKSBjb25zdAogewogICAgIHJldHVybiBt
X3dpbmRvd1JlY3Q7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2luLmNw
cAkocmV2aXNpb24gMzcxNzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3dpbi9TY3JvbGxWaWV3V2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCwxMSBAQCB2b2lkIFNjcm9sbFZpZXc6
OnRoZW1lQ2hhbmdlZCgpCiAgICAgaW52YWxpZGF0ZSgpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6
OnNjcm9sbENvbnRlbnRzKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9kYXRhLT5zY3Jv
bGxCYWNraW5nU3RvcmUoc2l6ZSk7Cit9CisKIHZvaWQgU2Nyb2xsVmlldzo6YWRkVG9EaXJ0eVJl
Z2lvbihjb25zdCBJbnRSZWN0JiBjb250YWluaW5nV2luZG93UmVjdCkKIHsKICAgICBBU1NFUlQo
aXNGcmFtZVZpZXcoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lv
biAzNzE0OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA5Miw3ICsxMDkyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dmFsdWVDaGFuZ2Vk
KFNjcm9sbGJhcgogICAgICAgICBzY3JvbGxUb09mZnNldChuZXdYLCBuZXdZLCBmYWxzZSk7CiB9
CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKK0ludFJlY3Qg
UmVuZGVyTGF5ZXI6OndpbmRvd0NsaXBSZWN0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0CiB7CiAg
ICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKICAgICBBU1NFUlQodmll
dyk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDM3MTQ4KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDcgKzM0
OSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRCZU92ZXJmbG93T25seSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFs
IEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2lu
ZG93Q2xpcFJlY3QoY29uc3QgU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
QWN0aXZlKCkgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9y
aXpvbnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpOwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDM3MTQ4KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw3ICs0MTEsOCBAQCB2
b2lkIFJlbmRlckxpc3RCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQCiAgICAgY29uc3QgaW50IGlj
b25SYWRpdXMgPSA3OwogICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSA0OwogCi0gICAgaW50
IG9mZnNldFggPSAwLCBvZmZzZXRZID0gd2luZG93Q2xpcFJlY3QoKS55KCk7CisgICAgaW50IG9m
ZnNldFg7CisgICAgaW50IG9mZnNldFk7CiAgICAgYWJzb2x1dGVQb3NpdGlvbihvZmZzZXRYLCBv
ZmZzZXRZKTsKIAogICAgIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7CkBAIC01
OTUsNyArNTk2LDcgQEAgSW50UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJlY3QoaQog
ICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotSW50UmVjdCBSZW5kZXJMaXN0Qm94Ojp3aW5kb3dD
bGlwUmVjdCgpIGNvbnN0CitJbnRSZWN0IFJlbmRlckxpc3RCb3g6OndpbmRvd0NsaXBSZWN0KGNv
bnN0IFNjcm9sbGJhciopIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB2aWV3
KCktPmZyYW1lVmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guaAkocmV2aXNpb24gMzcxNDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgdm9p
ZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0Ns
aXBSZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KGNvbnN0
IFNjcm9sbGJhciopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0Owog
CiAgICAgaW50IGl0ZW1IZWlnaHQoKSBjb25zdDsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAzNzE4MykKKysr
IFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MDgtMTAtMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5OAorICAgICAgICAKKyAgICAg
ICAgTWFrZSB1cGRhdGVTY3JvbGxiYXJzIGNyb3NzLXBsYXRmb3JtLiAgRm9yIG5vdyBhIHN0dWJi
ZWQgb3V0IHNjcm9sbENvbnRlbnRzIGZ1bmN0aW9uIGlzIGludm9rZWQgdG8gZG8gdGhlIHNjcm9s
bGluZyBvZiB0aGUgYmFja2luZyBzdG9yZS4gIE5leHQgcGF0Y2gKKyAgICAgICAgd2lsbCBtYWtl
IHRoYXQgY3Jvc3MtcGxhdGZvcm0uICAKKyAgICAgICAgCisgICAgICAgIFRoZSBTY3JvbGxWaWV3
IG5vdyBpbXBsZW1lbnQgU2Nyb2xsYmFyQ2xpZW50LCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIHdh
cyBhIGNsYXNoIG9mIHdpbmRvd0NsaXBSZWN0IG1ldGhvZHMgZnJvbSB0aGUKKyAgICAgICAgbXVs
dGlwbGUgaW5oZXJpdGFuY2UuICBGb3Igbm93IEkgc29sdmVkIHRoaXMgYnkgYWRkaW5nIGEgU2Ny
b2xsYmFyKiB0byB0aGUgU2Nyb2xsYmFyQ2xpZW50IHZlcnNpb24gb2YgdGhlIG1ldGhvZCwgYnV0
IGxvbmdlciB0ZXJtCisgICAgICAgIHdpbmRvd0NsaXBSZWN0IGlzIGdvaW5nIHRvIGJlIHJlbW92
ZWQgZnJvbSBTY3JvbGxiYXJDbGllbnQgKHdoZW4gV2lkZ2V0IGludmFsaWRhdGlvbiBnZXRzIHJl
d3JpdHRlbikuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJTY3JvbGxCYXIuY3BwOgorICAgICAgICAoV2ViU2Nyb2xsQmFyOjp3aW5kb3dDbGlw
UmVjdCk6CisgICAgICAgICogV2ViU2Nyb2xsQmFyLmg6CisKIDIwMDgtMTAtMDEgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogICAgICAgICAKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjgyCkluZGV4OiBXZWJLaXQvd2luL1dlYlNjcm9s
bEJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuY3BwCShyZXZp
c2lvbiAzNzE0OCkKKysrIFdlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgV2ViU2Nyb2xsQmFyOjp2YWx1ZUNoYW5nZWQoU2Ny
b2xsYmEKICAgICBtX2RlbGVnYXRlLT52YWx1ZUNoYW5nZWQodGhpcyk7CiB9CiAKLUludFJlY3Qg
V2ViU2Nyb2xsQmFyOjp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0CitJbnRSZWN0IFdlYlNjcm9sbEJh
cjo6d2luZG93Q2xpcFJlY3QoU2Nyb2xsYmFyKikgY29uc3QKIHsKICAgICBIV05EIHNiQ29udGFp
bmluZ1dpbmRvdyA9IG1fc2Nyb2xsQmFyLT5jb250YWluaW5nV2luZG93KCk7CiAgICAgUkVDVCBj
bGllbnRSZWN0OwpJbmRleDogV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd2luL1dlYlNjcm9sbEJhci5oCShyZXZpc2lvbiAzNzE0OCkKKysrIFdlYktpdC93
aW4vV2ViU2Nyb2xsQmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJs
aWM6CiBwcm90ZWN0ZWQ6CiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50CiAgICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xp
cFJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoU2Nyb2xs
YmFyKikgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3ZpZGUgYSB3YXkgdG8g
c2V0IHRoaXMgdmFsdWUuCiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQo=
</data>
<flag name="review"
          id="10854"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24008</attachid>
            <date>2008-10-02 00:04:58 -0700</date>
            <delta_ts>2008-10-02 00:06:43 -0700</delta_ts>
            <desc>Patch #2</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>60242</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzE4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDgtMTAtMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5
OAorICAgICAgICAKKyAgICAgICAgTWFrZSB1cGRhdGVTY3JvbGxiYXJzIGNyb3NzLXBsYXRmb3Jt
LiAgRm9yIG5vdyBhIHN0dWJiZWQgb3V0IHNjcm9sbENvbnRlbnRzIGZ1bmN0aW9uIGlzIGludm9r
ZWQgdG8gZG8gdGhlIHNjcm9sbGluZyBvZiB0aGUgYmFja2luZyBzdG9yZS4gIE5leHQgcGF0Y2gK
KyAgICAgICAgd2lsbCBtYWtlIHRoYXQgY3Jvc3MtcGxhdGZvcm0uICAKKyAgICAgICAgCisgICAg
ICAgIFRoZSBTY3JvbGxWaWV3IG5vdyBpbXBsZW1lbnQgU2Nyb2xsYmFyQ2xpZW50LCB3aGljaCBt
ZWFucyB0aGF0IHRoZXJlIHdhcyBhIGNsYXNoIG9mIHdpbmRvd0NsaXBSZWN0IG1ldGhvZHMgZnJv
bSB0aGUKKyAgICAgICAgbXVsdGlwbGUgaW5oZXJpdGFuY2UuICBGb3Igbm93IEkgc29sdmVkIHRo
aXMgYnkgYWRkaW5nIGEgU2Nyb2xsYmFyKiB0byB0aGUgU2Nyb2xsYmFyQ2xpZW50IHZlcnNpb24g
b2YgdGhlIG1ldGhvZCwgYnV0IGxvbmdlciB0ZXJtCisgICAgICAgIHdpbmRvd0NsaXBSZWN0IGlz
IGdvaW5nIHRvIGJlIHJlbW92ZWQgZnJvbSBTY3JvbGxiYXJDbGllbnQgKHdoZW4gV2lkZ2V0IGlu
dmFsaWRhdGlvbiBnZXRzIHJld3JpdHRlbikuCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojppc0FjdGl2ZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dmlzaWJsZUNvbnRlbnRzUmVzaXplZCk6CisgICAg
ICAgICogcGxhdGZvcm0vUG9wdXBNZW51Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3Ojp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRl
U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUhhbmRsZUhvcml6b250
YWxBZGp1c3RtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtSGFu
ZGxlVmVydGljYWxBZGp1c3RtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhckNs
aWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtSGFuZGxlSG9yaXpvbnRhbEFkanVzdG1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1IYW5kbGVWZXJ0aWNh
bEFkanVzdG1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50cyk6CisgICAgICAgICog
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1l
bnU6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp3aW5kb3dDbGlwUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RCb3g6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5oOgorCiAyMDA4LTEwLTAxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkocmV2aXNpb24gMzcxNjIpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtOTcwLDYgKzk3MSwx
MyBAQCB2b2lkIEZyYW1lVmlldzo6ZGlzcGF0Y2hTY2hlZHVsZWRFdmVudHMoCiAgICAgfQogfQog
CitJbnRSZWN0IEZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QoY29uc3QgU2Nyb2xsYmFyKikgY29u
c3QKK3sKKyAgICAvLyBXaGVuIHdlIGdldCBjYWxsZWQgYnkgdGhlIHNjcm9sbGJhciBjbGllbnQs
IGl0IG1lYW5zIHRoYXQgd2UgYXJlIG5vdCBjbGlwcGluZyB0byBjb250ZW50cywgc2luY2UKKyAg
ICAvLyB0aGVzZSBzY3JvbGxiYXJzIGFyZSBvdXJzLgorICAgIHJldHVybiB3aW5kb3dDbGlwUmVj
dChmYWxzZSk7Cit9CisKIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIHdpbmRvd0NsaXBSZWN0KHRydWUpOwpAQCAtMTAxMSw2ICsxMDE5LDIx
IEBAIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdEZvckxheWUKICAgICByZXR1cm4g
aW50ZXJzZWN0aW9uKGNsaXBSZWN0LCB3aW5kb3dDbGlwUmVjdCgpKTsKIH0KIAorYm9vbCBGcmFt
ZVZpZXc6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS0+cGFn
ZSgpOworICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2
ZSgpOworfQorCit2b2lkIEZyYW1lVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogYmFyKQor
eworICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgorICAgIEludFNpemUgb2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKGJhcik7
CisgICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgZnJhbWUoKS0+c2Vu
ZFNjcm9sbEV2ZW50KCk7Cit9CisKIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dSZXNpemVyUmVj
dCgpIGNvbnN0CiB7CiAgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkgPyBmcmFtZSgpLT5wYWdlKCkg
OiAwOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMzcxNTkpCisrKyBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMCArMTExLDE0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFkanVzdFZpZXdTaXplKCk7CiAgICAgdm9pZCBpbml0U2Nyb2xsYmFycygpOwogICAg
IAorICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdChjb25zdCBTY3JvbGxiYXIqKSBj
b25zdDsKICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKICAgICBJ
bnRSZWN0IHdpbmRvd0NsaXBSZWN0KGJvb2wgY2xpcFRvQ29udGVudHMpIGNvbnN0OwogICAgIElu
dFJlY3Qgd2luZG93Q2xpcFJlY3RGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciosIGJvb2wgY2xp
cFRvTGF5ZXJDb250ZW50cykgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOworICAgIAog
ICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0OwogCiAgICAgdmly
dHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlld1JlY3Vyc2l2ZWx5KGNvbnN0IEludFJlY3QmKTsK
QEAgLTE3OCw2ICsxODIsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRD
b250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIGltbWVkaWF0ZSk7CiAgICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIHsgc2V0TmVlZHNMYXlvdXQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCB2aXNpYmxlQ29udGVudHNSZXNpemVkKCkgeyBsYXlvdXQoKTsgfQogCiAgICAg
c3RhdGljIGRvdWJsZSBzQ3VycmVudFBhaW50VGltZVN0YW1wOyAvLyB1c2VkIGZvciBkZXRlY3Rp
bmcgZGVjb2RlZCByZXNvdXJjZSB0aHJhc2ggaW4gdGhlIGNhY2hlCiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vUG9wdXBNZW51LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1
cE1lbnUuaAkocmV2aXNpb24gMzcxNDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKFdJTikKICAgICAvLyBTY3JvbGxCYXJDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVD
aGFuZ2VkKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgp
IGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdChjb25zdCBTY3JvbGxi
YXIqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICB2b2lkIGNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZShjb25zdCBJbnRSZWN0
JiwgRnJhbWVWaWV3Kik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDM3
MTYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsOSArNDYsMTYgQEAgdm9pZCBTY3JvbGxWaWV3Ojppbml0KCkKICAgICAgICAgcGxhdGZv
cm1TZXRDYW5CbGl0T25TY3JvbGwoKTsKICAgICBtX3Njcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXIg
PSAwOwogICAgIG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgPSBmYWxzZTsKKyAgICBtX2luVXBkYXRl
U2Nyb2xsYmFycyA9IGZhbHNlOwogICAgIG1fZHJhd1BhblNjcm9sbEljb24gPSBmYWxzZTsKIH0K
IAordm9pZCBTY3JvbGxWaWV3OjpkZXN0cm95KCkKK3sKKyAgICBzZXRIYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKGZhbHNlKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSk7Cit9CisK
IHZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkgCiB7CiAgICAgQVNTRVJU
KGNoaWxkICE9IHRoaXMgJiYgIWNoaWxkLT5wYXJlbnQoKSk7CkBAIC03MCw2ICs3NywyOCBAQCB2
b2lkIFNjcm9sbFZpZXc6OnJlbW92ZUNoaWxkKFdpZGdldCogY2hpCiAgICAgICAgIHBsYXRmb3Jt
UmVtb3ZlQ2hpbGQoY2hpbGQpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7CisgICAgaWYgKGhhc0JhciAmJiAhbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IFNjcm9sbGJh
cjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIEhvcml6b250YWxTY3JvbGxiYXIsIFJlZ3Vs
YXJTY3JvbGxiYXIpOworICAgICAgICBhZGRDaGlsZChtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0
KCkpOworICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsK
KyAgICAgICAgcmVtb3ZlQ2hpbGQobV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpKTsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmll
dzo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7CisgICAgaWYgKGhhc0Jh
ciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxi
YXIsIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICBhZGRDaGlsZChtX3ZlcnRpY2FsU2Nyb2xs
YmFyLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYgbV92ZXJ0aWNhbFNjcm9sbGJh
cikgeworICAgICAgICByZW1vdmVDaGlsZChtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKKyAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IDA7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbFZp
ZXc6OnNldFNjcm9sbGJhck1vZGVzKFNjcm9sbGJhck1vZGUgaG9yaXpvbnRhbE1vZGUsIFNjcm9s
bGJhck1vZGUgdmVydGljYWxNb2RlKQogewogICAgIGlmIChob3Jpem9udGFsTW9kZSA9PSBob3Jp
em9udGFsU2Nyb2xsYmFyTW9kZSgpICYmIHZlcnRpY2FsTW9kZSA9PSB2ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUoKSkKQEAgLTE1NSw2ICsxODQsMjkgQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4aW11
bVNjcm9sbFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRoKCks
IG1heGltdW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hh
bmdlZChTY3JvbGxiYXIqIGJhcikKK3sKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBt
b3ZlZC4KKyAgICBJbnRTaXplIG5ld09mZnNldCA9IG1fc2Nyb2xsT2Zmc2V0OworICAgIGlmIChi
YXIpIHsKKyAgICAgICAgaWYgKGJhciA9PSBtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAg
ICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoYmFyLT52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAo
YmFyID09ID5tX3ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgbmV3T2Zmc2V0LnNldEhl
aWdodChiYXItPnZhbHVlKCkpOworICAgIH0KKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBu
ZXdPZmZzZXQgLSBtX3Njcm9sbE9mZnNldDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEgPT0gSW50U2l6
ZSgpKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3JvbGxPZmZzZXQgPSBuZXdPZmZzZXQ7CisK
KyAgICBpZiAoc2Nyb2xsYmFyc1N1cHByZXNzZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
c2Nyb2xsQ29udGVudHMoc2Nyb2xsRGVsdGEpOworICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+
KG1fdmlldyktPmZyYW1lKCktPnNlbmRTY3JvbGxFdmVudCgpOworfQorCiB2b2lkIFNjcm9sbFZp
ZXc6OnNjcm9sbFJlY3RJbnRvVmlld1JlY3Vyc2l2ZWx5KGNvbnN0IEludFJlY3QmIHIpCiB7CiAg
ICAgaWYgKHByb2hpYml0c1Njcm9sbGluZygpKQpAQCAtMjAzLDYgKzI1NSwxMzEgQEAgYm9vbCBT
Y3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAordm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2ly
ZWRPZmZzZXQpCit7CisgICAgLy8gRG9uJ3QgYWxsb3cgcmUtZW50cmFuY3kgaW50byB0aGlzIGZ1
bmN0aW9uLgorICAgIGlmIChtX2luVXBkYXRlU2Nyb2xsYmFycyB8fCBwcm9oaWJpdHNTY3JvbGxp
bmcoKSB8fCBwbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2luVXBk
YXRlU2Nyb2xsYmFycyA9IHRydWU7CisKKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0g
bV92ZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBt
X2hvcml6b250YWxTY3JvbGxiYXI7CisgICAgYm9vbCBvbGRIYXNWZXJ0aWNhbCA9IGhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyOworICAgIGJvb2wgb2xkSGFzSG9yaXpvbnRhbCA9IGhhc0hvcml6b250YWxT
Y3JvbGxiYXI7CisgICAgU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsID0gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyTW9kZTsKKyAgICBTY3JvbGxiYXJNb2RlIHZTY3JvbGwgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFy
TW9kZTsKKworICAgIGNvbnN0IGludCBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVt
ZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisKKyAgICBmb3IgKGludCBw
YXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykgeworICAgICAgICBib29sIHNjcm9sbHNWZXJ0aWNh
bGx5OworICAgICAgICBib29sIHNjcm9sbHNIb3Jpem9udGFsbHk7CisKKyAgICAgICAgaWYgKCFt
X3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gfHwgdlNj
cm9sbCA9PSBTY3JvbGxiYXJBdXRvKSkgeworICAgICAgICAgICAgLy8gRG8gYSBsYXlvdXQgaWYg
cGVuZGluZyBiZWZvcmUgY2hlY2tpbmcgaWYgc2Nyb2xsYmFycyBhcmUgbmVlZGVkLgorICAgICAg
ICAgICAgaWYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyICE9IG9sZEhhc1ZlcnRpY2FsIHx8IGhhc0hv
cml6b250YWxTY3JvbGxiYXIgIT0gb2xkSGFzSG9yaXpvbnRhbCkKKyAgICAgICAgICAgICAgICB2
aXNpYmxlQ29udGVudHNSZXNpemVkKCk7CisKKyAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5
ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJh
ckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChz
Y3JvbGxzVmVydGljYWxseSkKKyAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0g
KGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1
dG8gJiYgY29udGVudHNXaWR0aCgpICsgc2Nyb2xsYmFyVGhpY2tuZXNzID4gd2lkdGgoKSk7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0g
KGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1
dG8gJiYgY29udGVudHNXaWR0aCgpID4gd2lkdGgoKSk7CisgICAgICAgICAgICAgICAgaWYgKHNj
cm9sbHNIb3Jpem9udGFsbHkpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5
ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJh
ckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSArIHNjcm9sbGJhclRoaWNrbmVzcyA+IGhlaWdodCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc0hv
cml6b250YWxTY3JvbGxiYXIgOiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbik7CisgICAg
ICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pID8g
aGFzVmVydGljYWxTY3JvbGxiYXIgOiAodlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbik7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChoYXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBz
Y3JvbGxzVmVydGljYWxseSkgeworICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
c2Nyb2xsc1ZlcnRpY2FsbHkpOworICAgICAgICAgICAgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBz
Y3JvbGxzVmVydGljYWxseTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKKyAgICAgICAgICAgIHNldEhhc0hv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsc0hvcml6b250YWxseSk7CisgICAgICAgICAgICBoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsc0hvcml6b250YWxseTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3Rl
cCkuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxQb3NpdGlvbihjb250ZW50c1dpZHRoKCkgLSB2aXNp
YmxlV2lkdGgoKSwgY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSk7CisgICAgSW50
U2l6ZSBzY3JvbGwgPSBkZXNpcmVkT2Zmc2V0LnNocnVua1RvKG1heFNjcm9sbFBvc2l0aW9uKTsK
KyAgICBzY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygpOworIAorICAgIGlmICghcGxhdGZvcm1I
YW5kbGVIb3Jpem9udGFsQWRqdXN0bWVudChzY3JvbGwpICYmIG1faG9yaXpvbnRhbFNjcm9sbGJh
cikgeworICAgICAgICBpbnQgY2xpZW50V2lkdGggPSB2aXNpYmxlV2lkdGgoKTsKKyAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRFbmFibGVkKGNvbnRlbnRzV2lkdGgoKSA+IGNsaWVu
dFdpZHRoKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoIC0gY0Ftb3VudFRv
S2VlcFdoZW5QYWdpbmcpOworICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNs
aWVudFdpZHRoOworICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5mcmFtZVJlY3QoKSk7CisgICAgICAgIEludFJlY3QgaEJhclJlY3QgPSBJbnRSZWN0KDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9ob3Jpem9udGFs
U2Nyb2xsYmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2lkdGgoKSAtIChtX3ZlcnRpY2FsU2Nyb2xsYmFyID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lk
dGgoKSA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5z
ZXRGcmFtZVJlY3QoaEJhclJlY3QpOworICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNz
ZWQgJiYgb2xkUmVjdCAhPSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKQorICAg
ICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisKKyAgICAgICAg
aWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOworICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFN0ZXBzKGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCwgcGFnZVN0
ZXApOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50
V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkpOworICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJl
c3NlZCkKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24oZmFsc2UpOyAKKyAgICB9IAorCisgICAgaWYgKCFwbGF0Zm9ybUhhbmRsZVZlcnRp
Y2FsQWRqdXN0bWVudChzY3JvbGwpICYmIG1fdmVydGljYWxTY3JvbGxiYXIpIHsKKyAgICAgICAg
aW50IGNsaWVudEhlaWdodCA9IHZpc2libGVIZWlnaHQoKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0RW5hYmxlZChjb250ZW50c0hlaWdodCgpID4gY2xpZW50SGVpZ2h0KTsKKyAg
ICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudEhlaWdodCAtIGNBbW91bnRUb0tlZXBXaGVuUGFn
aW5nKTsKKyAgICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRIZWlnaHQ7
CisgICAgICAgIEludFJlY3Qgb2xkUmVjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3Qo
KSk7CisgICAgICAgIEludFJlY3QgdkJhclJlY3QgPSBJbnRSZWN0KHdpZHRoKCkgLSBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT53aWR0aCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
KCkgLSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSA6IDApKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHZC
YXJSZWN0KTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3Qg
IT0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCisgICAgICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisKKyAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1
cHByZXNzZWQpCisgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0lu
dmFsaWRhdGlvbih0cnVlKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMo
Y1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CisgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgp
KTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgp
KTsKKyAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAgICAgICBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7CisgICAgfQor
CisgICAgaWYgKG9sZEhhc1ZlcnRpY2FsICE9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICE9IDApIHx8
IG9sZEhhc0hvcml6b250YWwgIT0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAhPSAwKSkKKyAgICAg
ICAgZnJhbWVSZWN0c0NoYW5nZWQoKTsKKworICAgIC8vIFNlZSBpZiBvdXIgb2Zmc2V0IGhhcyBj
aGFuZ2VkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG1pZ2h0IG5vdCBoYXZlIHNjcm9sbGJhcnMu
CisgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZWRpdGluZyBhIGJvZHkgd2l0aCBvdmVyZmxv
dzpoaWRkZW4gYW5kIHNjcm9sbGluZyB0byByZXZlYWwgc2VsZWN0aW9uLgorICAgIC8vIEl0IGNh
biBhbHNvIGhhcHBlbiB3aGVuIG1heGltaXppbmcgYSB3aW5kb3cgdGhhdCBoYXMgc2Nyb2xsYmFy
cyAoYnV0IHRoZSBuZXcgbWF4aW1pemVkIHJlc3VsdAorICAgIC8vIGRvZXMgbm90KS4KKyAgICBJ
bnRTaXplIHNjcm9sbERlbHRhID0gc2Nyb2xsIC0gbV9zY3JvbGxPZmZzZXQ7CisgICAgaWYgKHNj
cm9sbERlbHRhICE9IEludFNpemUoKSkgeworICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xs
OworICAgICAgIHNjcm9sbENvbnRlbnRzKHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICBtX2lu
VXBkYXRlU2Nyb2xsYmFycyA9IGZhbHNlOworfQorCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFU
Rk9STShXWCkKKy8vIEZJWE1FOiBUaGlzIGlzIGp1c3QgdGVtcG9yYXJ5IHNvIHdlIGNhbiBjb21t
aXQgYSBjcm9zcy1wbGF0Zm9ybSB2ZXJzaW9uIG9mIHVwZGF0ZVNjcm9sbGJhcnMuCit2b2lkIFNj
cm9sbFZpZXc6OnNjcm9sbENvbnRlbnRzKGNvbnN0IEludFNpemUmKQoreworfQorI2VuZGlmCisK
IEludFBvaW50IFNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHdp
bmRvd1BvaW50KSBjb25zdAogewogICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CkBAIC01ODcsNSArNzY0LDE3IEBAIGJvb2wg
U2Nyb2xsVmlldzo6cGxhdGZvcm1Jc09mZnNjcmVlbigpIGMKIH0KICNlbmRpZgogCisjaWYgIVBM
QVRGT1JNKEdUSykKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1IYW5kbGVIb3Jpem9udGFsQWRq
dXN0bWVudChjb25zdCBJbnRTaXplJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
U2Nyb2xsVmlldzo6cGxhdGZvcm1IYW5kbGVWZXJ0aWNhbEFkanVzdG1lbnQoY29uc3QgSW50U2l6
ZSYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmgJKHJldmlzaW9uIDM3MTYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQu
aCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIldpZGdldC5oIgogCkBAIC01
OCwxMSArNTksMTQgQEAgY2xhc3MgSG9zdFdpbmRvdzsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVu
dDsKIGNsYXNzIFNjcm9sbGJhcjsKIAotY2xhc3MgU2Nyb2xsVmlldyA6IHB1YmxpYyBXaWRnZXQg
eworY2xhc3MgU2Nyb2xsVmlldyA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYyBTY3JvbGxiYXJDbGll
bnQgewogcHVibGljOgogICAgIFNjcm9sbFZpZXcoKTsKICAgICB+U2Nyb2xsVmlldygpOwogCisg
ICAgLy8gU2Nyb2xsYmFyQ2xpZW50IG1ldGhvZC4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90
aGVyIHR3by4KKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOworICAg
IAogICAgIC8vIFRoZSB3aW5kb3cgdGhhdHMgaG9zdHMgdGhlIFNjcm9sbFZpZXcuICBUaGUgU2Ny
b2xsVmlldyB3aWxsIGNvbW11bmljYXRlIHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQogICAg
IC8vIGhvc3Qgd2luZG93IGluIHRoZSB3aW5kb3cncyBjb29yZGluYXRlIHNwYWNlLgogICAgIHZp
cnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0ID0gMDsKQEAgLTIwMSw3ICsyMDUs
OSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRDb250ZW50
UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIG5vdyA9IGZhbHNlKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0KSA9IDA7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaWJsZUNvbnRlbnRzUmVzaXplZCgpID0gMDsKICAgICAK
ICAgICB2b2lkIHVwZGF0ZVdpbmRvd1JlY3QoY29uc3QgSW50UmVjdCYsIGJvb2wgbm93ID0gZmFs
c2UpOwogCkBAIC0yMjAsMTAgKzIyNiwyMyBAQCBwcml2YXRlOgogICAgIGludCBtX3Njcm9sbGJh
cnNBdm9pZGluZ1Jlc2l6ZXI7CiAgICAgYm9vbCBtX3Njcm9sbGJhcnNTdXBwcmVzc2VkOwogCisg
ICAgYm9vbCBtX2luVXBkYXRlU2Nyb2xsYmFyczsKKwogICAgIEludFBvaW50IG1fcGFuU2Nyb2xs
SWNvblBvaW50OwogICAgIGJvb2wgbV9kcmF3UGFuU2Nyb2xsSWNvbjsKIAogICAgIHZvaWQgaW5p
dCgpOworICAgIHZvaWQgZGVzdHJveSgpOworCisgICAgLy8gQ2FsbGVkIHRvIHVwZGF0ZSB0aGUg
c2Nyb2xsYmFycyB0byBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSB2aWV3Lgor
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycyhjb25zdCBJbnRTaXplJiBkZXNpcmVkT2Zmc2V0KTsK
KworICAgIC8vIFNjcm9sbCB0aGUgYWN0dWFsIGNvbnRlbnRzIG9mIHRoZSB2aWV3IChlaXRoZXIg
YmxpdHRpbmcgb3IgaW52YWxpZGF0aW5nIGFzIG5lZWRlZCkuCisgICAgdm9pZCBzY3JvbGxDb250
ZW50cyhjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CisKKyAgICAvLyBUaGVzZSBtZXRob2Rz
IGFyZSB1c2VkIHRvIGNyZWF0ZS9kZXN0cm95IHNjcm9sbGJhcnMuCisgICAgdm9pZCBzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOworICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxi
YXIoYm9vbCk7CiAKICAgICB2b2lkIHBsYXRmb3JtQWRkQ2hpbGQoV2lkZ2V0Kik7CiAgICAgdm9p
ZCBwbGF0Zm9ybVJlbW92ZUNoaWxkKFdpZGdldCopOwpAQCAtMjQwLDYgKzI1OSw4IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBwbGF0Zm9ybVNldFNjcm9sbGJhcnNTdXBwcmVzc2VkKGJvb2wgcmVwYWlu
dE9uVW5zdXBwcmVzcyk7CiAgICAgdm9pZCBwbGF0Zm9ybVJlcGFpbnRDb250ZW50UmVjdGFuZ2xl
KGNvbnN0IEludFJlY3QmLCBib29sIG5vdyk7CiAgICAgYm9vbCBwbGF0Zm9ybUlzT2Zmc2NyZWVu
KCkgY29uc3Q7CisgICAgYm9vbCBwbGF0Zm9ybUhhbmRsZUhvcml6b250YWxBZGp1c3RtZW50KGNv
bnN0IEludFNpemUmKTsKKyAgICBib29sIHBsYXRmb3JtSGFuZGxlVmVydGljYWxBZGp1c3RtZW50
KGNvbnN0IEludFNpemUmKTsKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgZGVmaW5lZCBfX09CSkNf
XwogcHVibGljOgpAQCAtMjQ5LDI0ICsyNzAsMTcgQEAgcHJpdmF0ZToKICAgICBOU1Njcm9sbFZp
ZXc8V2ViQ29yZUZyYW1lU2Nyb2xsVmlldz4qIHNjcm9sbFZpZXcoKSBjb25zdDsKICNlbmRpZgog
Ci0vLyBGSVhNRTogU2Nyb2xsVmlld1ByaXZhdGUgd2lsbCBldmVudHVhbGx5IGJlIGNvbXBsZXRl
bHkgZ29uZS4gIEl0J3MgYWxyZWFkeSBnb25lIG9uIE1hYy4KLSNpZiAhUExBVEZPUk0oTUFDKQor
Ly8gRklYTUU6IFNjcm9sbFZpZXdQcml2YXRlIHdpbGwgZXZlbnR1YWxseSBiZSBjb21wbGV0ZWx5
IGdvbmUuCiAgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7CiAgICAgU2Nyb2xsVmlld1ByaXZh
dGUqIG1fZGF0YTsKIAogICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsgLy8gRklY
TUU6IFRlbXBvcmFyeS4KLSNlbmRpZgogICAgIAogI2lmICFQTEFURk9STShNQUMpICYmICFQTEFU
Rk9STShXWCkKIHB1YmxpYzoKICAgICB2b2lkIGFkZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVj
dCYpOwogICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50IGR5LCBjb25zdCBJ
bnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwogICAgIHZv
aWQgdXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB1cGRhdGVTY3Jv
bGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpOwotI2Vsc2UKLSAgICB2b2lkIHVw
ZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkge30gLy8gRklYTUU6
IFRlbXBvcmFyeS4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmNwcAkocmV2aXNpb24gMzcxNDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNCw3ICs0MjQsNyBAQCBJbnRSZWN0IFNjcm9sbGJh
cjo6d2luZG93Q2xpcFJlY3QoKSBjb25zCiAKICAgICBjbGlwUmVjdCA9IGNvbnZlcnRUb0NvbnRh
aW5pbmdXaW5kb3coY2xpcFJlY3QpOwogICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgY2xpcFJl
Y3QuaW50ZXJzZWN0KG1fY2xpZW50LT53aW5kb3dDbGlwUmVjdCgpKTsKKyAgICAgICAgY2xpcFJl
Y3QuaW50ZXJzZWN0KG1fY2xpZW50LT53aW5kb3dDbGlwUmVjdCh0aGlzKSk7CiAKICAgICByZXR1
cm4gY2xpcFJlY3Q7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlz
aW9uIDM3MTQ4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CiAKICAgICAvLyBVc2VkIHRvIG9idGFpbiBhIHdpbmRv
dyBjbGlwIHJlY3QuCi0gICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdChjb25zdCBTY3JvbGxiYXIq
KSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCA9IDA7CiB9
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAJKHJldmlzaW9uIDM3
MTczKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsVmlld0d0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDM0ICs1MiwxNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbFZpZXdTY3JvbGxiYXIgOiBwdWJsaWMgU2Nyb2xs
YmFyR3RrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxWaWV3U2Nyb2xs
YmFyPiBjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxWaWV3U2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRp
b24sIHNpemUpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgU2Nyb2xsVmlld1Njcm9sbGJhcihT
Y3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNp
emUpOwotCi0gICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCkgY29uc3Q7Ci19Owot
Ci1jbGFzcyBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZSA6IHB1YmxpYyBTY3JvbGxiYXJD
bGllbnQKK2NsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlCiB7CiBwdWJsaWM6CiAg
ICAgU2Nyb2xsVmlld1ByaXZhdGUoU2Nyb2xsVmlldyogX3ZpZXcpCiAgICAgICAgIDogdmlldyhf
dmlldykKLSAgICAgICAgLCBpblVwZGF0ZVNjcm9sbGJhcnMoZmFsc2UpCiAgICAgICAgICwgaG9y
aXpvbnRhbEFkanVzdG1lbnQoMCkKICAgICAgICAgLCB2ZXJ0aWNhbEFkanVzdG1lbnQoMCkKICAg
ICB7fQogCiAgICAgflNjcm9sbFZpZXdQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIHNldEhhc0hv
cml6b250YWxTY3JvbGxiYXIoZmFsc2UpOwotICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJh
cihmYWxzZSk7Ci0KICAgICAgICAgaWYgKGhvcml6b250YWxBZGp1c3RtZW50KSB7CiAgICAgICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpFQ1QoaG9yaXpv
bnRhbEFkanVzdG1lbnQpLCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1lbnRD
aGFuZ2VkLCB0aGlzKTsKICAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGhvcml6b250YWxBZGp1
c3RtZW50KTsKQEAgLTkzLDY4ICs3NiwxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNjcm9sbEJh
Y2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CiAKLSAgICB2b2lkIHNldEhh
c0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpOwotICAgIHZvaWQgc2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpOwotCi0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdl
ZChTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLQogICAgIHN0YXRpYyB2b2lk
IGFkanVzdG1lbnRDaGFuZ2VkKEd0a0FkanVzdG1lbnQqLCBncG9pbnRlcik7CiAKICAgICBTY3Jv
bGxWaWV3KiB2aWV3OwogICAgIEludFNpemUgdmlld1BvcnRTaXplOwotICAgIGJvb2wgaW5VcGRh
dGVTY3JvbGxiYXJzOwotICAgIEhhc2hTZXQ8V2lkZ2V0Kj4gY2hpbGRyZW47CiAgICAgR3RrQWRq
dXN0bWVudCogaG9yaXpvbnRhbEFkanVzdG1lbnQ7CiAgICAgR3RrQWRqdXN0bWVudCogdmVydGlj
YWxBZGp1c3RtZW50OwogfTsKIAotU2Nyb2xsVmlld1Njcm9sbGJhcjo6U2Nyb2xsVmlld1Njcm9s
bGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpCi0gICAgOiBTY3JvbGxiYXJHdGsoY2xp
ZW50LCBvcmllbnRhdGlvbiwgc2l6ZSkKLXsKLX0KLQotdm9pZCBTY3JvbGxWaWV3U2Nyb2xsYmFy
OjpmcmFtZVJlY3RzQ2hhbmdlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFwYXJlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKLQotICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkp
OwotICAgIEludFBvaW50IGxvYyA9IGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRv
dyhmcmFtZVJlY3QoKS5sb2NhdGlvbigpKTsKLQotICAgIC8vIERvbid0IGFsbG93IHRoZSBhbGxv
Y2F0aW9uIHNpemUgdG8gYmUgbmVnYXRpdmUKLSAgICBJbnRTaXplIHN6ID0gZnJhbWVSZWN0KCku
c2l6ZSgpOwotICAgIHN6LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKLQotICAgIEd0a0FsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwgc3oud2lkdGgoKSwgc3ouaGVpZ2h0
KCkgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1XaWRnZXQoKSwgJmFs
bG9jYXRpb24pOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKQotewotICAgIGlmIChoYXNCYXIgJiYg
IXZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhciAmJiAhaG9yaXpvbnRhbEFkanVzdG1lbnQpIHsK
LSAgICAgICAgdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gU2Nyb2xsVmlld1Njcm9sbGJh
cjo6Y3JlYXRlKHRoaXMsIEhvcml6b250YWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOwot
ICAgICAgICB2aWV3LT5hZGRDaGlsZCh2aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCkp
OwotICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiB2aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIp
IHsKLSAgICAgICAgdmlldy0+cmVtb3ZlQ2hpbGQodmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFy
LmdldCgpKTsKLSAgICAgICAgdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gMDsKLSAgICB9
Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKGJvb2wgaGFzQmFyKQotewotICAgIGlmIChoYXNCYXIgJiYgIXZpZXctPm1fdmVy
dGljYWxTY3JvbGxiYXIgJiYgIXZlcnRpY2FsQWRqdXN0bWVudCkgewotICAgICAgICB2aWV3LT5t
X3ZlcnRpY2FsU2Nyb2xsYmFyID0gU2Nyb2xsVmlld1Njcm9sbGJhcjo6Y3JlYXRlKHRoaXMsIFZl
cnRpY2FsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICAgICAgdmlldy0+YWRkQ2hp
bGQodmlldy0+bV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmICghaGFz
QmFyICYmIHZpZXctPm1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgdmlldy0+cmVtb3Zl
Q2hpbGQodmlldy0+bV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKSk7Ci0gICAgICAgIHZpZXctPm1f
dmVydGljYWxTY3JvbGxiYXIgPSAwOwotICAgIH0KLX0KLQogdm9pZCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3UHJpdmF0ZTo6c2Nyb2xsQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhKQogewogICAgIC8vIFNpbmNlIHNjcm9sbGluZyBpcyBkb3VibGUgYnVmZmVyZWQsIHdlIHdp
bGwgYmUgYmxpdHRpbmcgdGhlIHNjcm9sbCB2aWV3J3MgaW50ZXJzZWN0aW9uCkBAIC0yMDcsMzkg
KzEzNiw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OmFkanUKICAgICBz
dGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGF0LT52aWV3KS0+ZnJhbWUoKS0+c2VuZFNjcm9sbEV2
ZW50KCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnZhbHVlQ2hh
bmdlZChTY3JvbGxiYXIqIGJhcikKLXsKLSAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBt
b3ZlZC4KLSAgICBJbnRTaXplIG5ld09mZnNldCA9IHZpZXctPm1fc2Nyb2xsT2Zmc2V0OwotICAg
IGlmIChiYXIpIHsKLSAgICAgICAgaWYgKGJhciA9PSB2aWV3LT5tX2hvcml6b250YWxTY3JvbGxi
YXIpCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoYmFyLT52YWx1ZSgpKTsKLSAgICAg
ICAgZWxzZSBpZiAoYmFyID09IHZpZXctPm1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAg
ICBuZXdPZmZzZXQuc2V0SGVpZ2h0KGJhci0+dmFsdWUoKSk7Ci0gICAgfQotICAgIEludFNpemUg
c2Nyb2xsRGVsdGEgPSBuZXdPZmZzZXQgLSB2aWV3LT5tX3Njcm9sbE9mZnNldDsKLSAgICBpZiAo
c2Nyb2xsRGVsdGEgPT0gSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgdmlldy0+bV9z
Y3JvbGxPZmZzZXQgPSBuZXdPZmZzZXQ7Ci0KLSAgICBpZiAodmlldy0+c2Nyb2xsYmFyc1N1cHBy
ZXNzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9s
bERlbHRhKTsKLSAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih2aWV3KS0+ZnJhbWUoKS0+c2Vu
ZFNjcm9sbEV2ZW50KCk7Ci19Ci0KLUludFJlY3QgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZh
dGU6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgRnJhbWVWaWV3Kj4odmlldyktPndpbmRvd0NsaXBSZWN0KGZhbHNlKTsKLX0KLQotYm9vbCBT
Y3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIFBh
Z2UqIHBhZ2UgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih2aWV3KS0+ZnJhbWUoKS0+
cGFnZSgpOwotICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0Fj
dGl2ZSgpOwotfQotCiBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKICAgICA6IG1fZGF0YShuZXcg
U2Nyb2xsVmlld1ByaXZhdGUodGhpcykpCiB7CkBAIC0yNDgsNiArMTQ0LDcgQEAgU2Nyb2xsVmll
dzo6U2Nyb2xsVmlldygpCiAKIFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKIHsKKyAgICBkZXN0
cm95KCk7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIApAQCAtMjc2LDggKzE3Myw4IEBAIHZvaWQg
U2Nyb2xsVmlldzo6c2V0R3RrQWRqdXN0bWVudHMoR3RrQWQKICAgICAgICAgLyoKICAgICAgICAg
ICogZGlzYWJsZSB0aGUgc2Nyb2xsYmFycyAoaWYgd2UgaGF2ZSBhbnkpIGFzIHRoZSBHdGtBZGp1
c3RtZW50IG92ZXIKICAgICAgICAgICovCi0gICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIoZmFsc2UpOwotICAgICAgICBtX2RhdGEtPnNldEhhc0hvcml6b250YWxTY3JvbGxi
YXIoZmFsc2UpOworICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSk7CisgICAg
ICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoZmFsc2UpOwogCiAgICAgICAgIGdfb2JqZWN0
X3JlZihtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKICAgICAgICAgZ19vYmplY3RfcmVm
KG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKQEAgLTI5OCw2NSArMTk1LDggQEAgdm9pZCBT
Y3JvbGxWaWV3OjpwbGF0Zm9ybVJlbW92ZUNoaWxkKFdpZAogICAgICAgICBndGtfY29udGFpbmVy
X3JlbW92ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIGNoaWxkLT5wbGF0Zm9y
bVdpZGdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0
IEludFNpemUmIGRlc2lyZWRPZmZzZXQpCitib29sIFNjcm9sbFZpZXc6OnBsYXRmb3JtSGFuZGxl
SG9yaXpvbnRhbEFkanVzdG1lbnQoY29uc3QgSW50U2l6ZSYgc2Nyb2xsKQogewotICAgIC8vIERv
bid0IGFsbG93IHJlLWVudHJhbmN5IGludG8gdGhpcyBmdW5jdGlvbi4KLSAgICBpZiAobV9kYXRh
LT5pblVwZGF0ZVNjcm9sbGJhcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcm9oaWJp
dHNTY3JvbGxpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5pblVwZGF0ZVNj
cm9sbGJhcnMgPSB0cnVlOwotCi0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IG1fdmVy
dGljYWxTY3JvbGxiYXI7Ci0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9ob3Jp
em9udGFsU2Nyb2xsYmFyOwotICAgIGJvb2wgb2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNj
cm9sbGJhcjsKLSAgICBib29sIG9sZEhhc0hvcml6b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyOwotICAgIFNjcm9sbGJhck1vZGUgaFNjcm9sbCA9IG1faG9yaXpvbnRhbFNjcm9sbGJhck1v
ZGU7Ci0gICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsID0gbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGU7
Ci0KLSAgICBjb25zdCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6Om5h
dGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwotCi0gICAgZm9yIChpbnQgcGFzcyA9
IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKLSAgICAgICAgYm9vbCBzY3JvbGxzVmVydGljYWxseTsK
LSAgICAgICAgYm9vbCBzY3JvbGxzSG9yaXpvbnRhbGx5OwotCi0gICAgICAgIGlmICghbV9zY3Jv
bGxiYXJzU3VwcHJlc3NlZCAmJiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvIHx8IHZTY3JvbGwg
PT0gU2Nyb2xsYmFyQXV0bykpIHsKLSAgICAgICAgICAgIC8vIERvIGEgbGF5b3V0IGlmIHBlbmRp
bmcgYmVmb3JlIGNoZWNraW5nIGlmIHNjcm9sbGJhcnMgYXJlIG5lZWRlZC4KLSAgICAgICAgICAg
IGlmIChoYXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBvbGRIYXNWZXJ0aWNhbCB8fCBoYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyICE9IG9sZEhhc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyktPmxheW91dCgpOwotCi0gICAgICAgICAgICBzY3JvbGxz
VmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAodlNjcm9sbCA9
PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0KCkgPiBoZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBpZiAoc2Nyb2xsc1ZlcnRpY2FsbHkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsc0hvcml6
b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAoaFNjcm9sbCA9PSBT
Y3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzV2lkdGgoKSArIHNjcm9sbGJhclRoaWNrbmVzcyA+IHdp
ZHRoKCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsc0hvcml6
b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAoaFNjcm9sbCA9PSBT
Y3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzV2lkdGgoKSA+IHdpZHRoKCkpOwotICAgICAgICAgICAg
ICAgIGlmIChzY3JvbGxzSG9yaXpvbnRhbGx5KQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxz
VmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAodlNjcm9sbCA9
PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0KCkgKyBzY3JvbGxiYXJUaGlja25lc3Mg
PiBoZWlnaHQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0
bykgPyBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlz
T24pOwotICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxi
YXJBdXRvKSA/IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyIDogKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3
YXlzT24pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyICE9
IHNjcm9sbHNWZXJ0aWNhbGx5KSB7Ci0gICAgICAgICAgICBtX2RhdGEtPnNldEhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKHNjcm9sbHNWZXJ0aWNhbGx5KTsKLSAgICAgICAgICAgIGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyID0gc2Nyb2xsc1ZlcnRpY2FsbHk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFz
SG9yaXpvbnRhbFNjcm9sbGJhciAhPSBzY3JvbGxzSG9yaXpvbnRhbGx5KSB7Ci0gICAgICAgICAg
ICBtX2RhdGEtPnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsc0hvcml6b250YWxseSk7
Ci0gICAgICAgICAgICBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsc0hvcml6b250YWxs
eTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdl
IHN0ZXAvbGluZSBzdGVwKS4KLSAgICBJbnRTaXplIG1heFNjcm9sbFBvc2l0aW9uKGNvbnRlbnRz
V2lkdGgoKSAtIHZpc2libGVXaWR0aCgpLCBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdo
dCgpKTsKLSAgICBJbnRTaXplIHNjcm9sbCA9IGRlc2lyZWRPZmZzZXQuc2hydW5rVG8obWF4U2Ny
b2xsUG9zaXRpb24pOwotICAgIHNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0KICAgICBp
ZiAobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCkgewogICAgICAgICBtX2RhdGEtPmhvcml6
b250YWxBZGp1c3RtZW50LT5wYWdlX3NpemUgPSB2aXNpYmxlV2lkdGgoKTsKICAgICAgICAgbV9k
YXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudC0+c3RlcF9pbmNyZW1lbnQgPSB2aXNpYmxlV2lkdGgo
KSAvIDEwLjA7CkBAIC0zNjksMjkgKzIwOSwxMyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNj
cm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50
LT52YWx1ZSA9IHNjcm9sbC53aWR0aCgpOwogICAgICAgICAgICAgZ3RrX2FkanVzdG1lbnRfdmFs
dWVfY2hhbmdlZChtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKICAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRX
aWR0aCA9IHZpc2libGVXaWR0aCgpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNl
dEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOwotICAgICAgICBpbnQgcGFn
ZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7Ci0gICAgICAg
IGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50V2lkdGg7Ci0gICAgICAgIEludFJl
Y3Qgb2xkUmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKLSAgICAgICAg
SW50UmVjdCBoQmFyUmVjdCA9IEludFJlY3QoMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gKG1fdmVydGljYWxTY3Jv
bGxiYXIgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwot
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChoQmFyUmVjdCk7Ci0g
ICAgICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3Nl
ZCkKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlk
YXRpb24odHJ1ZSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Nj
cm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsK
LSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7
Ci0gICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQotICAgICAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKK2Jvb2wgU2Nyb2xs
Vmlldzo6cGxhdGZvcm1IYW5kbGVWZXJ0aWNhbEFkanVzdG1lbnQoY29uc3QgSW50U2l6ZSYgc2Ny
b2xsKQorewogICAgIGlmIChtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCkgewogICAgICAgICBt
X2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudC0+cGFnZV9zaXplID0gdmlzaWJsZUhlaWdodCgpOwog
ICAgICAgICBtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudC0+c3RlcF9pbmNyZW1lbnQgPSB2aXNp
YmxlSGVpZ2h0KCkgLyAxMC4wOwpAQCAtNDA0LDQzICsyMjgsOSBAQCB2b2lkIFNjcm9sbFZpZXc6
OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX2RhdGEtPnZlcnRpY2FsQWRq
dXN0bWVudC0+dmFsdWUgPSBzY3JvbGwuaGVpZ2h0KCk7CiAgICAgICAgICAgICBndGtfYWRqdXN0
bWVudF92YWx1ZV9jaGFuZ2VkKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKICAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgY2xp
ZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LT5zZXRFbmFibGVkKGNvbnRlbnRzSGVpZ2h0KCkgPiBjbGllbnRIZWlnaHQpOwotICAgICAgICBp
bnQgcGFnZVN0ZXAgPSAoY2xpZW50SGVpZ2h0IC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOwot
ICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKLSAgICAg
ICAgSW50UmVjdCBvbGRSZWN0KG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKLSAg
ICAgICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3Jv
bGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gKG1f
aG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkgOiAw
KSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdCh2QmFyUmVjdCk7
Ci0gICAgICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1fdmVy
dGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2Vk
KQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRp
b24odHJ1ZSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0ZXBzKGNTY3JvbGxi
YXJQaXhlbHNQZXJMaW5lU3RlcCwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgY29udGVudHNIZWlnaHQoKSk7Ci0gICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSk7Ci0gICAg
ICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOwotICAgIH0KLQotICAgIGlm
IChvbGRIYXNWZXJ0aWNhbCAhPSAobV92ZXJ0aWNhbFNjcm9sbGJhciAhPSAwKSB8fCBvbGRIYXNI
b3Jpem9udGFsICE9IChtX2hvcml6b250YWxTY3JvbGxiYXIgIT0gMCkpCi0gICAgICAgIGZyYW1l
UmVjdHNDaGFuZ2VkKCk7Ci0KLSAgICAvLyBTZWUgaWYgb3VyIG9mZnNldCBoYXMgY2hhbmdlZCBp
biBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBtaWdodCBub3QgaGF2ZSBzY3JvbGxiYXJzLgotICAgIC8v
IFRoaXMgY2FuIGhhcHBlbiB3aGVuIGVkaXRpbmcgYSBib2R5IHdpdGggb3ZlcmZsb3c6aGlkZGVu
IGFuZCBzY3JvbGxpbmcgdG8gcmV2ZWFsIHNlbGVjdGlvbi4KLSAgICAvLyBJdCBjYW4gYWxzbyBo
YXBwZW4gd2hlbiBtYXhpbWl6aW5nIGEgd2luZG93IHRoYXQgaGFzIHNjcm9sbGJhcnMgKGJ1dCB0
aGUgbmV3IG1heGltaXplZCByZXN1bHQKLSAgICAvLyBkb2VzIG5vdCkuCi0gICAgSW50U2l6ZSBz
Y3JvbGxEZWx0YSA9IHNjcm9sbCAtIG1fc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChzY3JvbGxEZWx0
YSAhPSBJbnRTaXplKCkpIHsKLSAgICAgICBtX3Njcm9sbE9mZnNldCA9IHNjcm9sbDsKLSAgICAg
ICBtX2RhdGEtPnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7Ci0gICAgfQotCi0gICAg
bV9kYXRhLT5pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSAKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6YWRkVG9E
aXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0JiBjb250YWluaW5nV2luZG93UmVjdCkKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyR3RrLmNwcAkocmV2aXNpb24gMzcxNDgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2
ICs3NiwyMSBAQCBTY3JvbGxiYXJHdGs6On5TY3JvbGxiYXJHdGsoKQogICAgIGdfb2JqZWN0X3Vu
cmVmKEdfT0JKRUNUKHBsYXRmb3JtV2lkZ2V0KCkpKTsKIH0KIAordm9pZCBTY3JvbGxiYXJHdGs6
OmZyYW1lUmVjdHNDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIXBhcmVudCgpIHx8ICFwYXJl
bnQoKS0+aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKHRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRQb2ludCBsb2MgPSBwYXJlbnQoKS0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhmcmFt
ZVJlY3QoKS5sb2NhdGlvbigpKTsKKworICAgIC8vIERvbid0IGFsbG93IHRoZSBhbGxvY2F0aW9u
IHNpemUgdG8gYmUgbmVnYXRpdmUKKyAgICBJbnRTaXplIHN6ID0gZnJhbWVSZWN0KCkuc2l6ZSgp
OworICAgIHN6LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgbG9jLngoKSwgbG9jLnkoKSwgc3oud2lkdGgoKSwgc3ouaGVpZ2h0KCkgfTsK
KyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUocGxhdGZvcm1XaWRnZXQoKSwgJmFsbG9jYXRp
b24pOworfQorCiB2b2lkIFNjcm9sbGJhckd0azo6dXBkYXRlVGh1bWJQb3NpdGlvbigpCiB7CiAg
ICAgaWYgKG1fYWRqdXN0bWVudC0+dmFsdWUgIT0gbV9jdXJyZW50UG9zKSB7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxiYXJHdGsuaAkocmV2aXNpb24gMzcxNDgpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9TY3JvbGxiYXJHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKTsKIAorICAgIHZp
cnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hhbmdlZCgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAg
U2Nyb2xsYmFyR3RrKFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3Jv
bGxiYXJDb250cm9sU2l6ZSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbFZp
ZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01h
Yy5tbQkocmV2aXNpb24gMzcxNTYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxWaWV3
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIFNjcm9sbFZpZXc6OlNjcm9s
bFZpZXcoKQogCiBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpCiB7CisgICAgZGVzdHJveSgpOwog
fQogCiBpbmxpbmUgTlNTY3JvbGxWaWV3PFdlYkNvcmVGcmFtZVNjcm9sbFZpZXc+ICpTY3JvbGxW
aWV3OjpzY3JvbGxWaWV3KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xs
Vmlld1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdR
dC5jcHAJKHJldmlzaW9uIDM3MTYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgOiBwdWJsaWMgU2Ny
b2xsYmFyQ2xpZW50IHsKK2NsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlICB7CiBw
dWJsaWM6CiAgICAgU2Nyb2xsVmlld1ByaXZhdGUoU2Nyb2xsVmlldyogdmlldykKICAgICAgIDog
bV92aWV3KHZpZXcpCkBAIC03NCw2OCArNzQsMTQgQEAgcHVibGljOgogCiAgICAgflNjcm9sbFZp
ZXdQcml2YXRlKCkKICAgICB7Ci0gICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoZmFs
c2UpOwotICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSk7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKTsKLSAgICB2b2lk
IHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKTsKLQotICAgIHZpcnR1YWwgdm9p
ZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0Ns
aXBSZWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0KICAg
ICB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CiAK
ICAgICBTY3JvbGxWaWV3KiBtX3ZpZXc7CiAgICAgaW50ICBtX3BsYXRmb3JtV2lkZ2V0czsKLSAg
ICBib29sIG1faW5VcGRhdGVTY3JvbGxiYXJzOwogfTsKIAotdm9pZCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3UHJpdmF0ZTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc0JhcikKLXsK
LSAgICBpZiAoaGFzQmFyICYmICFtX3ZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAg
ICAgICBtX3ZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKHRoaXMsIEhvcml6b250YWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIp
OwotICAgICAgICBtX3ZpZXctPmFkZENoaWxkKG1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFy
LmdldCgpKTsKLSAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYgbV92aWV3LT5tX2hvcml6b250YWxT
Y3JvbGxiYXIpIHsKLSAgICAgICAgbV92aWV3LT5yZW1vdmVDaGlsZChtX3ZpZXctPm1faG9yaXpv
bnRhbFNjcm9sbGJhci5nZXQoKSk7Ci0gICAgICAgIG1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xs
YmFyID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6
OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKQotewotICAgIGlmIChoYXNCYXIg
JiYgIW1fdmlldy0+bV92ZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBtX3ZpZXctPm1fdmVy
dGljYWxTY3JvbGxiYXIgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBW
ZXJ0aWNhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgICAgIG1fdmlldy0+YWRk
Q2hpbGQobV92aWV3LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKLSAgICB9IGVsc2UgaWYg
KCFoYXNCYXIgJiYgbV92aWV3LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdmll
dy0+cmVtb3ZlQ2hpbGQobV92aWV3LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKLSAgICAg
ICAgbV92aWV3LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgU2Ny
b2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIGJhcikK
LXsKLSAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KLSAgICBJbnRTaXplIG5l
d09mZnNldCA9IG1fdmlldy0+bV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKGJhcikgewotICAgICAg
ICBpZiAoYmFyID09IG1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAg
bmV3T2Zmc2V0LnNldFdpZHRoKGJhci0+dmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGJhciA9
PSBtX3ZpZXctPm1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0
SGVpZ2h0KGJhci0+dmFsdWUoKSk7Ci0gICAgfQotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBu
ZXdPZmZzZXQgLSBtX3ZpZXctPm1fc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChzY3JvbGxEZWx0YSA9
PSBJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3ZpZXctPm1fc2Nyb2xsT2Zmc2V0
ID0gbmV3T2Zmc2V0OwotCi0gICAgaWYgKG1fdmlldy0+c2Nyb2xsYmFyc1N1cHByZXNzZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsK
LSAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3ZpZXcpLT5mcmFtZSgpLT5zZW5kU2Nyb2xs
RXZlbnQoKTsKLX0KLQogdm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2Nyb2xs
QmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIC8vIFNpbmNl
IHNjcm9sbGluZyBpcyBkb3VibGUgYnVmZmVyZWQsIHdlIHdpbGwgYmUgYmxpdHRpbmcgdGhlIHNj
cm9sbCB2aWV3J3MgaW50ZXJzZWN0aW9uCkBAIC0xNTgsMTcgKzEwNCw2IEBAIHZvaWQgU2Nyb2xs
Vmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm8KICAgICBtX3ZpZXctPmZyYW1lUmVjdHNDaGFu
Z2VkKCk7CiB9CiAKLUludFJlY3QgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OndpbmRv
d0NsaXBSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVW
aWV3Kj4obV92aWV3KS0+d2luZG93Q2xpcFJlY3QoZmFsc2UpOwotfQotCi1ib29sIFNjcm9sbFZp
ZXc6OlNjcm9sbFZpZXdQcml2YXRlOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgUGFnZSogcGFn
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KG1fdmlldyktPmZyYW1lKCktPnBhZ2Uo
KTsKLSAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUo
KTsKLX0KLQogU2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCiAgICAgOiBtX2RhdGEobmV3IFNjcm9s
bFZpZXdQcml2YXRlKHRoaXMpKQogewpAQCAtMTgwLDE0OSArMTE1LDkgQEAgU2Nyb2xsVmlldzo6
flNjcm9sbFZpZXcoKQogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6
dXBkYXRlU2Nyb2xsYmFycyhjb25zdCBJbnRTaXplJiBkZXNpcmVkT2Zmc2V0KQordm9pZCBTY3Jv
bGxWaWV3OjpzY3JvbGxDb250ZW50cyhjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIC8vIERv
bid0IGFsbG93IHJlLWVudHJhbmN5IGludG8gdGhpcyBmdW5jdGlvbi4KLSAgICBpZiAobV9kYXRh
LT5tX2luVXBkYXRlU2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHByb2hp
Yml0c1Njcm9sbGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9kYXRhLT5tX2lu
VXBkYXRlU2Nyb2xsYmFycyA9IHRydWU7Ci0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFy
ID0gbV92ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIg
PSBtX2hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgYm9vbCBvbGRIYXNWZXJ0aWNhbCA9IGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyOwotICAgIGJvb2wgb2xkSGFzSG9yaXpvbnRhbCA9IGhhc0hvcml6b250
YWxTY3JvbGxiYXI7Ci0gICAgU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsID0gbV9ob3Jpem9udGFsU2Ny
b2xsYmFyTW9kZTsKLSAgICBTY3JvbGxiYXJNb2RlIHZTY3JvbGwgPSBtX3ZlcnRpY2FsU2Nyb2xs
YmFyTW9kZTsKLQotICAgIGNvbnN0IGludCBjVmVydGljYWxXaWR0aCA9IFNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICBjb25zdCBpbnQgY0hv
cml6b250YWxIZWlnaHQgPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+c2Nyb2xsYmFy
VGhpY2tuZXNzKCk7Ci0KLSAgICBmb3IgKGludCBwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykg
ewotICAgICAgICBib29sIHNjcm9sbHNWZXJ0aWNhbGx5OwotICAgICAgICBib29sIHNjcm9sbHNI
b3Jpem9udGFsbHk7Ci0KLSAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmICho
U2Nyb2xsID09IFNjcm9sbGJhckF1dG8gfHwgdlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSkgewot
ICAgICAgICAgICAgLy8gRG8gYSBsYXlvdXQgaWYgcGVuZGluZyBiZWZvcmUgY2hlY2tpbmcgaWYg
c2Nyb2xsYmFycyBhcmUgbmVlZGVkLgotICAgICAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyICE9IG9sZEhhc1ZlcnRpY2FsIHx8IGhhc0hvcml6b250YWxTY3JvbGxiYXIgIT0gb2xkSGFz
SG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlz
KS0+bGF5b3V0KCk7Ci0gICAgICAgICAgICAgCi0gICAgICAgICAgICBzY3JvbGxzVmVydGljYWxs
eSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAodlNjcm9sbCA9PSBTY3JvbGxi
YXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0KCkgPiBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAo
c2Nyb2xsc1ZlcnRpY2FsbHkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9
IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAoaFNjcm9sbCA9PSBTY3JvbGxiYXJB
dXRvICYmIGNvbnRlbnRzV2lkdGgoKSArIGNWZXJ0aWNhbFdpZHRoID4gd2lkdGgoKSk7Ci0gICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhT
Y3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8g
JiYgY29udGVudHNXaWR0aCgpID4gd2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNjcm9s
bHNIb3Jpem9udGFsbHkpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0g
KHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1
dG8gJiYgY29udGVudHNIZWlnaHQoKSArIGNIb3Jpem9udGFsSGVpZ2h0ID4gaGVpZ2h0KCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2Ny
b2xsc0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8pID8gaGFzSG9yaXpv
bnRhbFNjcm9sbGJhciA6IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKTsKLSAgICAgICAg
ICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNW
ZXJ0aWNhbFNjcm9sbGJhciA6ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyICE9IHNjcm9s
bHNWZXJ0aWNhbGx5KSB7Ci0gICAgICAgICAgICBtX2RhdGEtPnNldEhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKHNjcm9sbHNWZXJ0aWNhbGx5KTsKLSAgICAgICAgICAgIGhhc1ZlcnRpY2FsU2Nyb2xsYmFy
ID0gc2Nyb2xsc1ZlcnRpY2FsbHk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzSG9yaXpv
bnRhbFNjcm9sbGJhciAhPSBzY3JvbGxzSG9yaXpvbnRhbGx5KSB7Ci0gICAgICAgICAgICBtX2Rh
dGEtPnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsc0hvcml6b250YWxseSk7Ci0gICAg
ICAgICAgICBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsc0hvcml6b250YWxseTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBz
dGVwL2xpbmUgc3RlcCkuCi0gICAgSW50U2l6ZSBtYXhTY3JvbGxQb3NpdGlvbihjb250ZW50c1dp
ZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSwgY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQo
KSk7Ci0gICAgSW50U2l6ZSBzY3JvbGwgPSBkZXNpcmVkT2Zmc2V0LnNocnVua1RvKG1heFNjcm9s
bFBvc2l0aW9uKTsKLSAgICBzY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwotCi0gICAgUVBv
aW50IHNjcm9sbGJhck9mZnNldDsKLSNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChR
VF9NQUNfVVNFX0NPQ09BKQotICAgIC8vIE9uIE1hYywgb2Zmc2V0IHRoZSBzY3JvbGxiYXJzIHNv
IHRoZXkgZG9uJ3QgY292ZXIgdGhlIGdyb3cgYm94LiBDaGVjayBpZiB0aGUgd2luZG93IAotICAg
IC8vIGhhcyBhIGdyb3cgYm94LCBhbmQgdGhlbiBjaGVjayBpZiB0aGUgYm90dG9tLXJpZ2h0IGNv
cm5lciBvZiB0aGUgc2Nyb2xsIHZpZXcgCi0gICAgLy8gaW50ZXJzZXJjdHMgaXQuIFRoZSBjYWxj
dWxhdGlvbnMgYXJlIGRvbmUgaW4gZ2xvYmFsIGNvb3JkaW5hdGVzLgotICAgIFFXaWRnZXQqIGNv
bnRlbnRXaWRnZXQgPSBjb250YWluaW5nV2luZG93KCk7Ci0gICAgaWYgKGNvbnRlbnRXaWRnZXQp
IHsKLSAgICAgICAgUVdpZGdldCogd2luZG93V2lkZ2V0ID0gY29udGVudFdpZGdldC0+d2luZG93
KCk7Ci0gICAgICAgIGlmICh3aW5kb3dXaWRnZXQpIHsKLSAgICAgICAgICAgIEhJVmlld1JlZiBn
cm93Qm94ID0gMDsKLSAgICAgICAgICAgIEhJVmlld0ZpbmRCeUlEKEhJVmlld0dldFJvb3QoSElW
aWV3R2V0V2luZG93KEhJVmlld1JlZihjb250ZW50V2lkZ2V0LT53aW5JZCgpKSkpLCBrSElWaWV3
V2luZG93R3Jvd0JveElELCAmZ3Jvd0JveCk7Ci0gICAgICAgICAgICBjb25zdCBRUG9pbnQgY29u
dGVudEJyID0gY29udGVudFdpZGdldC0+bWFwVG9HbG9iYWwoUVBvaW50KDAsMCkpICsgY29udGVu
dFdpZGdldC0+c2l6ZSgpOwotICAgICAgICAgICAgY29uc3QgUVBvaW50IHdpbmRvd0JyID0gd2lu
ZG93V2lkZ2V0LT5tYXBUb0dsb2JhbChRUG9pbnQoMCwwKSkgKyB3aW5kb3dXaWRnZXQtPnNpemUo
KTsKLSAgICAgICAgICAgIGNvbnN0IFFQb2ludCBjb250ZW50T2Zmc2V0ID0gKHdpbmRvd0JyIC0g
Y29udGVudEJyKTsKLSAgICAgICAgICAgIGNvbnN0IGludCBncm93Qm94U2l6ZSA9IDE1OwotICAg
ICAgICAgICAgY29uc3QgYm9vbCBlbmFibGVPZmZzZXQgPSAoZ3Jvd0JveCAhPSAwICYmIGNvbnRl
bnRPZmZzZXQueCgpID49IDAgJiYgY29udGVudE9mZnNldC4geSgpID49IDApOwotICAgICAgICAg
ICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5hYmxlT2Zmc2V0ID8gUVBvaW50KGdyb3dCb3hTaXplIC0g
cU1pbihjb250ZW50T2Zmc2V0LngoKSwgZ3Jvd0JveFNpemUpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3dCb3hTaXplIC0gcU1pbihjb250
ZW50T2Zmc2V0LnkoKSwgZ3Jvd0JveFNpemUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogUVBvaW50KDAsMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYK
LQotICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdp
ZHRoID0gdmlzaWJsZVdpZHRoKCk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0
RW5hYmxlZChjb250ZW50c1dpZHRoKCkgPiBjbGllbnRXaWR0aCk7Ci0gICAgICAgIGludCBwYWdl
U3RlcCA9IChjbGllbnRXaWR0aCAtIGNBbW91bnRUb0tlZXBXaGVuUGFnaW5nKTsKLSAgICAgICAg
aWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRXaWR0aDsKLSAgICAgICAgSW50UmVj
dCBvbGRSZWN0KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwotICAgICAgICBJ
bnRSZWN0IGhCYXJSZWN0ID0gSW50UmVjdCgwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV92ZXJ0aWNhbFNjcm9s
bGJhciA/IG1fdmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiBzY3JvbGxiYXJPZmZzZXQueCgp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVS
ZWN0KGhCYXJSZWN0KTsKLSAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9s
ZFJlY3QgIT0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSkKLSAgICAgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgICAgIGlmIChtX3Nj
cm9sbGJhcnNTdXBwcmVzc2VkKQotICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5z
ZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKLSAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBj
b250ZW50c1dpZHRoKCkpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFZhbHVl
KHNjcm9sbC53aWR0aCgpKTsKLSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0g
ICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9u
KGZhbHNlKTsgCi0gICAgfSAKLQotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAg
ICAgIGludCBjbGllbnRIZWlnaHQgPSB2aXNpYmxlSGVpZ2h0KCk7Ci0gICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdodCk7
Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBjQW1vdW50VG9LZWVwV2hl
blBhZ2luZyk7Ci0gICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50SGVp
Z2h0OwotICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVS
ZWN0KCkpOwotICAgICAgICBJbnRSZWN0IHZCYXJSZWN0ID0gSW50UmVjdCh3aWR0aCgpIC0gbV92
ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
aWdodCgpIC0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
aGVpZ2h0KCkgOiBzY3JvbGxiYXJPZmZzZXQueSgpKSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldEZyYW1lUmVjdCh2QmFyUmVjdCk7Ci0gICAgICAgIGlmICghbV9zY3JvbGxiYXJz
U3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgp
KQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAg
ICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7Ci0gICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnNldFN0ZXBzKGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCwgcGFnZVN0
ZXApOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhl
aWdodCwgY29udGVudHNIZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNl
dFZhbHVlKHNjcm9sbC5oZWlnaHQoKSk7Ci0gICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVz
c2VkKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlk
YXRpb24oZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChvbGRIYXNWZXJ0aWNhbCAhPSAobV92ZXJ0
aWNhbFNjcm9sbGJhciAhPSAwKSB8fCBvbGRIYXNIb3Jpem9udGFsICE9IChtX2hvcml6b250YWxT
Y3JvbGxiYXIgIT0gMCkpCi0gICAgICAgIGZyYW1lUmVjdHNDaGFuZ2VkKCk7Ci0KLSAgICAvLyBT
ZWUgaWYgb3VyIG9mZnNldCBoYXMgY2hhbmdlZCBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBtaWdo
dCBub3QgaGF2ZSBzY3JvbGxiYXJzLgotICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGVkaXRp
bmcgYSBib2R5IHdpdGggb3ZlcmZsb3c6aGlkZGVuIGFuZCBzY3JvbGxpbmcgdG8gcmV2ZWFsIHNl
bGVjdGlvbi4KLSAgICAvLyBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiBtYXhpbWl6aW5nIGEgd2lu
ZG93IHRoYXQgaGFzIHNjcm9sbGJhcnMgKGJ1dCB0aGUgbmV3IG1heGltaXplZCByZXN1bHQKLSAg
ICAvLyBkb2VzIG5vdCkuCi0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IHNjcm9sbCAtIG1fc2Ny
b2xsT2Zmc2V0OwotICAgIGlmIChzY3JvbGxEZWx0YSAhPSBJbnRTaXplKCkpIHsKLSAgICAgICBt
X3Njcm9sbE9mZnNldCA9IHNjcm9sbDsKLSAgICAgICBtX2RhdGEtPnNjcm9sbEJhY2tpbmdTdG9y
ZShzY3JvbGxEZWx0YSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLT5tX2luVXBkYXRlU2Nyb2xsYmFy
cyA9IGZhbHNlOworICAgIG1fZGF0YS0+c2Nyb2xsQmFja2luZ1N0b3JlKHNpemUpOwogfQogCiB2
b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtQWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gMzcxNDgpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODQs
NyArNTg0LDcgQEAgdm9pZCBQb3B1cE1lbnU6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIAogICAg
IDo6VXBkYXRlV2luZG93KG1fcG9wdXApOwogfQogCi1JbnRSZWN0IFBvcHVwTWVudTo6d2luZG93
Q2xpcFJlY3QoKSBjb25zdAorSW50UmVjdCBQb3B1cE1lbnU6OndpbmRvd0NsaXBSZWN0KFNjcm9s
bGJhciopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fd2luZG93UmVjdDsKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3BwCShyZXZpc2lvbiAzNzE3OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vd2luL1Njcm9sbFZpZXdXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw4
MSArNTQsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZSA6IHB1YmxpYyBTY3JvbGxiYXJD
bGllbnQgeworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgewogcHVibGljOgog
ICAgIFNjcm9sbFZpZXdQcml2YXRlKFNjcm9sbFZpZXcqIHZpZXcpCiAgICAgICAgIDogbV92aWV3
KHZpZXcpCi0gICAgICAgICwgbV9pblVwZGF0ZVNjcm9sbGJhcnMoZmFsc2UpCiAgICAgewogICAg
IH0KIAotICAgIH5TY3JvbGxWaWV3UHJpdmF0ZSgpCi0gICAgewotICAgICAgICBzZXRIYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKGZhbHNlKTsKLSAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
ZmFsc2UpOwotICAgIH0KLQotICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29s
IGhhc0Jhcik7Ci0gICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwotICAgIHZpcnR1
YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OwotCiAgICAgdm9pZCBzY3JvbGxCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEpOwogCi0KICAgICBTY3JvbGxWaWV3KiBtX3ZpZXc7Ci0gICAgYm9vbCBt
X2luVXBkYXRlU2Nyb2xsYmFyczsKLSAgICBIUkdOIG1fZGlydHlSZWdpb247CiB9OwogCiBjb25z
dCBpbnQgcGFuSWNvblNpemVMZW5ndGggPSAyMDsKIAotdm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxW
aWV3UHJpdmF0ZTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc0JhcikKLXsKLSAg
ICBpZiAoaGFzQmFyICYmICFtX3ZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAg
ICBtX3ZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZl
U2Nyb2xsYmFyKHRoaXMsIEhvcml6b250YWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOwot
ICAgICAgICBtX3ZpZXctPmFkZENoaWxkKG1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdl
dCgpKTsKLSAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYgbV92aWV3LT5tX2hvcml6b250YWxTY3Jv
bGxiYXIpIHsKLSAgICAgICAgbV92aWV3LT5yZW1vdmVDaGlsZChtX3ZpZXctPm1faG9yaXpvbnRh
bFNjcm9sbGJhci5nZXQoKSk7Ci0gICAgICAgIG1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNl
dEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKQotewotICAgIGlmIChoYXNCYXIgJiYg
IW1fdmlldy0+bV92ZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBtX3ZpZXctPm1fdmVydGlj
YWxTY3JvbGxiYXIgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcih0aGlzLCBWZXJ0
aWNhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgICAgIG1fdmlldy0+YWRkQ2hp
bGQobV92aWV3LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKLSAgICB9IGVsc2UgaWYgKCFo
YXNCYXIgJiYgbV92aWV3LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdmlldy0+
cmVtb3ZlQ2hpbGQobV92aWV3LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKLSAgICAgICAg
bV92aWV3LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xs
Vmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIGJhcikKLXsK
LSAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KLSAgICBJbnRTaXplIG5ld09m
ZnNldCA9IG1fdmlldy0+bV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKGJhcikgewotICAgICAgICBp
ZiAoYmFyID09IG1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbmV3
T2Zmc2V0LnNldFdpZHRoKGJhci0+dmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKGJhciA9PSBt
X3ZpZXctPm1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0SGVp
Z2h0KGJhci0+dmFsdWUoKSk7Ci0gICAgfQotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBuZXdP
ZmZzZXQgLSBtX3ZpZXctPm1fc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJ
bnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3ZpZXctPm1fc2Nyb2xsT2Zmc2V0ID0g
bmV3T2Zmc2V0OwotCi0gICAgaWYgKG1fdmlldy0+c2Nyb2xsYmFyc1N1cHByZXNzZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV92aWV3KS0+ZnJh
bWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Ci0gICAgc2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERl
bHRhKTsKLX0KLQogdm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2Nyb2xsQmFj
a2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQogewogICAgIC8vIFNpbmNlIHNj
cm9sbGluZyBpcyBkb3VibGUgYnVmZmVyZWQsIHdlIHdpbGwgYmUgYmxpdHRpbmcgdGhlIHNjcm9s
bCB2aWV3J3MgaW50ZXJzZWN0aW9uCkBAIC0xNjcsMTcgKzEwNiw2IEBAIHZvaWQgU2Nyb2xsVmll
dzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm8KICAgICA6OlVwZGF0ZVdpbmRvdyhjb250YWluaW5n
V2luZG93SGFuZGxlKTsKIH0KIAotSW50UmVjdCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0
ZTo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBGcmFtZVZpZXcqPihtX3ZpZXcpLT53aW5kb3dDbGlwUmVjdChmYWxzZSk7Ci19Ci0KLWJvb2wg
U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICBQ
YWdlKiBwYWdlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4obV92aWV3KS0+ZnJhbWUo
KS0+cGFnZSgpOwotICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5p
c0FjdGl2ZSgpOwotfQotCiBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKICAgICA6IG1fZGF0YShu
ZXcgU2Nyb2xsVmlld1ByaXZhdGUodGhpcykpCiB7CkBAIC0xODYsNiArMTE0LDcgQEAgU2Nyb2xs
Vmlldzo6U2Nyb2xsVmlldygpCiAKIFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKIHsKKyAgICBk
ZXN0cm95KCk7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIApAQCAtMjExLDEyNyArMTQwLDYgQEAg
dm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVXaW5kb3dSZWN0KGNvbnN0IAogICAgICAgICA6OlVwZGF0
ZVdpbmRvdyhjb250YWluaW5nV2luZG93SGFuZGxlKTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp1
cGRhdGVTY3JvbGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpCi17Ci0gICAgLy8g
RG9uJ3QgYWxsb3cgcmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgotICAgIGlmIChtX2Rh
dGEtPm1faW5VcGRhdGVTY3JvbGxiYXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJv
aGliaXRzU2Nyb2xsaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS0+bV9pblVw
ZGF0ZVNjcm9sbGJhcnMgPSB0cnVlOwotCi0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9
IG1fdmVydGljYWxTY3JvbGxiYXI7Ci0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0g
bV9ob3Jpem9udGFsU2Nyb2xsYmFyOwotICAgIGJvb2wgb2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0
aWNhbFNjcm9sbGJhcjsKLSAgICBib29sIG9sZEhhc0hvcml6b250YWwgPSBoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyOwotICAgIFNjcm9sbGJhck1vZGUgaFNjcm9sbCA9IG1faG9yaXpvbnRhbFNjcm9s
bGJhck1vZGU7Ci0gICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsID0gbV92ZXJ0aWNhbFNjcm9sbGJh
ck1vZGU7Ci0KLSAgICBjb25zdCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwotCi0gICAgZm9yIChpbnQg
cGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKLSAgICAgICAgYm9vbCBzY3JvbGxzVmVydGlj
YWxseTsKLSAgICAgICAgYm9vbCBzY3JvbGxzSG9yaXpvbnRhbGx5OwotCi0gICAgICAgIGlmICgh
bV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvIHx8IHZT
Y3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykpIHsKLSAgICAgICAgICAgIC8vIERvIGEgbGF5b3V0IGlm
IHBlbmRpbmcgYmVmb3JlIGNoZWNraW5nIGlmIHNjcm9sbGJhcnMgYXJlIG5lZWRlZC4KLSAgICAg
ICAgICAgIGlmIChoYXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBvbGRIYXNWZXJ0aWNhbCB8fCBoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyICE9IG9sZEhhc0hvcml6b250YWwpCi0gICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyktPmxheW91dCgpOwotCi0gICAgICAgICAgICBz
Y3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAodlNj
cm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0KCkgPiBoZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBpZiAoc2Nyb2xsc1ZlcnRpY2FsbHkpCi0gICAgICAgICAgICAgICAgc2Nyb2xs
c0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAoaFNjcm9s
bCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzV2lkdGgoKSArIHNjcm9sbGJhclRoaWNrbmVz
cyA+IHdpZHRoKCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xs
c0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAoaFNjcm9s
bCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzV2lkdGgoKSA+IHdpZHRoKCkpOwotICAgICAg
ICAgICAgICAgIGlmIChzY3JvbGxzSG9yaXpvbnRhbGx5KQotICAgICAgICAgICAgICAgICAgICBz
Y3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAodlNj
cm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0KCkgKyBzY3JvbGxiYXJUaGlj
a25lc3MgPiBoZWlnaHQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xs
YmFyQXV0bykgPyBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFy
QWx3YXlzT24pOwotICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBT
Y3JvbGxiYXJBdXRvKSA/IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyIDogKHZTY3JvbGwgPT0gU2Nyb2xs
YmFyQWx3YXlzT24pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaGFzVmVydGlj
YWxTY3JvbGxiYXIgIT0gc2Nyb2xsc1ZlcnRpY2FsbHkpIHsKLSAgICAgICAgICAgIG1fZGF0YS0+
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsc1ZlcnRpY2FsbHkpOwotICAgICAgICAgICAg
aGFzVmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxzVmVydGljYWxseTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkp
IHsKLSAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxz
SG9yaXpvbnRhbGx5KTsKLSAgICAgICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3Jv
bGxzSG9yaXpvbnRhbGx5OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIFNldCB1cCB0
aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBJbnRTaXplIG1heFNjcm9s
bFBvc2l0aW9uKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpLCBjb250ZW50c0hlaWdo
dCgpIC0gdmlzaWJsZUhlaWdodCgpKTsKLSAgICBJbnRTaXplIHNjcm9sbCA9IGRlc2lyZWRPZmZz
ZXQuc2hydW5rVG8obWF4U2Nyb2xsUG9zaXRpb24pOwotICAgIHNjcm9sbC5jbGFtcE5lZ2F0aXZl
VG9aZXJvKCk7Ci0gCi0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBp
bnQgY2xpZW50V2lkdGggPSB2aXNpYmxlV2lkdGgoKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zZXRFbmFibGVkKGNvbnRlbnRzV2lkdGgoKSA+IGNsaWVudFdpZHRoKTsKLSAgICAg
ICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcp
OwotICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdpZHRoOwotICAg
ICAgICBJbnRSZWN0IG9sZFJlY3QobV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7
Ci0gICAgICAgIEludFJlY3QgaEJhclJlY3QgPSBJbnRSZWN0KDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWln
aHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyID8gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IDApLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhl
aWdodCgpKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoaEJh
clJlY3QpOwotICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAh
PSBtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKQotICAgICAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKG1fc2Nyb2xsYmFy
c1N1cHByZXNzZWQpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKHRydWUpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNl
dFN0ZXBzKGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCwgcGFnZVN0ZXApOwotICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRz
V2lkdGgoKSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xs
LndpZHRoKCkpOwotICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKLSAgICAgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2Up
OyAKLSAgICB9IAotCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IHZpc2libGVIZWlnaHQoKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9s
bGJhci0+c2V0RW5hYmxlZChjb250ZW50c0hlaWdodCgpID4gY2xpZW50SGVpZ2h0KTsKLSAgICAg
ICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudEhlaWdodCAtIGNBbW91bnRUb0tlZXBXaGVuUGFnaW5n
KTsKLSAgICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRIZWlnaHQ7Ci0g
ICAgICAgIEludFJlY3Qgb2xkUmVjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7
Ci0gICAgICAgIEludFJlY3QgdkJhclJlY3QgPSBJbnRSZWN0KHdpZHRoKCkgLSBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT53aWR0aCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkg
LSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQo
KSA6IDApKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHZCYXJS
ZWN0KTsKLSAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0g
bV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCi0gICAgICAgICAgICBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHBy
ZXNzZWQpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFs
aWRhdGlvbih0cnVlKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Nj
cm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdmVydGljYWxT
Y3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsK
LSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpKTsK
LSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0gICAgICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7Ci0gICAgfQotCi0g
ICAgaWYgKG9sZEhhc1ZlcnRpY2FsICE9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICE9IDApIHx8IG9s
ZEhhc0hvcml6b250YWwgIT0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAhPSAwKSkKLSAgICAgICAg
ZnJhbWVSZWN0c0NoYW5nZWQoKTsKLQotICAgIC8vIFNlZSBpZiBvdXIgb2Zmc2V0IGhhcyBjaGFu
Z2VkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG1pZ2h0IG5vdCBoYXZlIHNjcm9sbGJhcnMuCi0g
ICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZWRpdGluZyBhIGJvZHkgd2l0aCBvdmVyZmxvdzpo
aWRkZW4gYW5kIHNjcm9sbGluZyB0byByZXZlYWwgc2VsZWN0aW9uLgotICAgIC8vIEl0IGNhbiBh
bHNvIGhhcHBlbiB3aGVuIG1heGltaXppbmcgYSB3aW5kb3cgdGhhdCBoYXMgc2Nyb2xsYmFycyAo
YnV0IHRoZSBuZXcgbWF4aW1pemVkIHJlc3VsdAotICAgIC8vIGRvZXMgbm90KS4KLSAgICBJbnRT
aXplIHNjcm9sbERlbHRhID0gc2Nyb2xsIC0gbV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9s
bERlbHRhICE9IEludFNpemUoKSkgewotICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsOwot
ICAgICAgIG1fZGF0YS0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKLSAgICB9Ci0K
LSAgICBtX2RhdGEtPm1faW5VcGRhdGVTY3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0KIHZvaWQgU2Ny
b2xsVmlldzo6cHJpbnRQYW5TY3JvbGxJY29uKGNvbnN0IEludFBvaW50JiBpY29uUG9zaXRpb24p
CiB7CiAgICAgbV9kcmF3UGFuU2Nyb2xsSWNvbiA9IHRydWU7ICAgIApAQCAtMzU0LDYgKzE2Miwx
MSBAQCB2b2lkIFNjcm9sbFZpZXc6OnRoZW1lQ2hhbmdlZCgpCiAgICAgaW52YWxpZGF0ZSgpOwog
fQogCit2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbENvbnRlbnRzKGNvbnN0IEludFNpemUmIHNpemUp
Cit7CisgICAgbV9kYXRhLT5zY3JvbGxCYWNraW5nU3RvcmUoc2l6ZSk7Cit9CisKIHZvaWQgU2Ny
b2xsVmlldzo6YWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0JiBjb250YWluaW5nV2luZG93
UmVjdCkKIHsKICAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3d4L1Njcm9sbFZpZXdXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
eC9TY3JvbGxWaWV3V3guY3BwCShyZXZpc2lvbiAzNzE1NikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
d3gvU2Nyb2xsVmlld1d4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYgKzEzMyw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6c2V0UGxhdGZvcm1XaWRnZXQod3hXaW4KIAogU2Nyb2xsVmlldzo6flNj
cm9sbFZpZXcoKQogeworICAgIGRlc3Ryb3koKTsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAzNzE0OCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5Miw3ICsx
MDkyLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhcgogICAgICAg
ICBzY3JvbGxUb09mZnNldChuZXdYLCBuZXdZLCBmYWxzZSk7CiB9CiAKLUludFJlY3QgUmVuZGVy
TGF5ZXI6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKK0ludFJlY3QgUmVuZGVyTGF5ZXI6OndpbmRv
d0NsaXBSZWN0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0CiB7CiAgICAgUmVuZGVyVmlldyogdmll
dyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKICAgICBBU1NFUlQodmlldyk7CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDM3MTQ4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ5LDcgKzM0OSw3IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBzaG91bGRCZU92ZXJmbG93T25seSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xp
cFJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoY29uc3Qg
U2Nyb2xsYmFyKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAK
ICAgICB2b2lkIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBi
b29sIHZlcnRpY2FsT3ZlcmZsb3cpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAJKHJldmlzaW9uIDM3MTQ4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw3ICs0MTEsOCBAQCB2b2lkIFJlbmRlckxpc3RCb3g6
OnBhblNjcm9sbChjb25zdCBJbnRQCiAgICAgY29uc3QgaW50IGljb25SYWRpdXMgPSA3OwogICAg
IGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSA0OwogCi0gICAgaW50IG9mZnNldFggPSAwLCBvZmZz
ZXRZID0gd2luZG93Q2xpcFJlY3QoKS55KCk7CisgICAgaW50IG9mZnNldFg7CisgICAgaW50IG9m
ZnNldFk7CiAgICAgYWJzb2x1dGVQb3NpdGlvbihvZmZzZXRYLCBvZmZzZXRZKTsKIAogICAgIElu
dFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRI
YW5kbGVyKCktPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7CkBAIC01OTUsNyArNTk2LDcgQEAgSW50
UmVjdCBSZW5kZXJMaXN0Qm94Ojpjb250cm9sQ2xpcFJlY3QoaQogICAgIHJldHVybiBjbGlwUmVj
dDsKIH0KIAotSW50UmVjdCBSZW5kZXJMaXN0Qm94Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0CitJ
bnRSZWN0IFJlbmRlckxpc3RCb3g6OndpbmRvd0NsaXBSZWN0KGNvbnN0IFNjcm9sbGJhciopIGNv
bnN0CiB7CiAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSB2aWV3KCktPmZyYW1lVmlldygpOwog
ICAgIGlmICghZnJhbWVWaWV3KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2
aXNpb24gMzcxNDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICAvLyBTY3Jv
bGxiYXJDbGllbnQgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Ny
b2xsYmFyKik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogCiAgICAgaW50IGl0ZW1IZWln
aHQoKSBjb25zdDsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAzNzE4MykKKysrIFdlYktpdC93aW4vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDgtMTAtMDEgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTI5OAorICAgICAgICAKKyAgICAgICAgTWFrZSB1cGRhdGVTY3Jv
bGxiYXJzIGNyb3NzLXBsYXRmb3JtLiAgRm9yIG5vdyBhIHN0dWJiZWQgb3V0IHNjcm9sbENvbnRl
bnRzIGZ1bmN0aW9uIGlzIGludm9rZWQgdG8gZG8gdGhlIHNjcm9sbGluZyBvZiB0aGUgYmFja2lu
ZyBzdG9yZS4gIE5leHQgcGF0Y2gKKyAgICAgICAgd2lsbCBtYWtlIHRoYXQgY3Jvc3MtcGxhdGZv
cm0uICAKKyAgICAgICAgCisgICAgICAgIFRoZSBTY3JvbGxWaWV3IG5vdyBpbXBsZW1lbnQgU2Ny
b2xsYmFyQ2xpZW50LCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIHdhcyBhIGNsYXNoIG9mIHdpbmRv
d0NsaXBSZWN0IG1ldGhvZHMgZnJvbSB0aGUKKyAgICAgICAgbXVsdGlwbGUgaW5oZXJpdGFuY2Uu
ICBGb3Igbm93IEkgc29sdmVkIHRoaXMgYnkgYWRkaW5nIGEgU2Nyb2xsYmFyKiB0byB0aGUgU2Ny
b2xsYmFyQ2xpZW50IHZlcnNpb24gb2YgdGhlIG1ldGhvZCwgYnV0IGxvbmdlciB0ZXJtCisgICAg
ICAgIHdpbmRvd0NsaXBSZWN0IGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgZnJvbSBTY3JvbGxiYXJD
bGllbnQgKHdoZW4gV2lkZ2V0IGludmFsaWRhdGlvbiBnZXRzIHJld3JpdHRlbikuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJTY3JvbGxCYXIu
Y3BwOgorICAgICAgICAoV2ViU2Nyb2xsQmFyOjp3aW5kb3dDbGlwUmVjdCk6CisgICAgICAgICog
V2ViU2Nyb2xsQmFyLmg6CisKIDIwMDgtMTAtMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUu
Y29tPgogICAgICAgICAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMjgyCkluZGV4OiBXZWJLaXQvd2luL1dlYlNjcm9sbEJhci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuY3BwCShyZXZpc2lvbiAzNzE0OCkKKysrIFdl
YktpdC93aW4vV2ViU2Nyb2xsQmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDcgKzI2MCw3
IEBAIHZvaWQgV2ViU2Nyb2xsQmFyOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmEKICAgICBtX2RlbGVn
YXRlLT52YWx1ZUNoYW5nZWQodGhpcyk7CiB9CiAKLUludFJlY3QgV2ViU2Nyb2xsQmFyOjp3aW5k
b3dDbGlwUmVjdCgpIGNvbnN0CitJbnRSZWN0IFdlYlNjcm9sbEJhcjo6d2luZG93Q2xpcFJlY3Qo
U2Nyb2xsYmFyKikgY29uc3QKIHsKICAgICBIV05EIHNiQ29udGFpbmluZ1dpbmRvdyA9IG1fc2Ny
b2xsQmFyLT5jb250YWluaW5nV2luZG93KCk7CiAgICAgUkVDVCBjbGllbnRSZWN0OwpJbmRleDog
V2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlNj
cm9sbEJhci5oCShyZXZpc2lvbiAzNzE0OCkKKysrIFdlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAg
ICAgLy8gU2Nyb2xsYmFyQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqKTsKLSAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoU2Nyb2xsYmFyKikgY29uc3Q7CiAKICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3ZpZGUgYSB3YXkgdG8gc2V0IHRoaXMgdmFsdWUuCiAg
ICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24009</attachid>
            <date>2008-10-02 00:06:43 -0700</date>
            <delta_ts>2008-10-02 00:38:05 -0700</delta_ts>
            <desc>Patch #3</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>60175</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNzE4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDgtMTAtMDEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI5
OAorICAgICAgICAKKyAgICAgICAgTWFrZSB1cGRhdGVTY3JvbGxiYXJzIGNyb3NzLXBsYXRmb3Jt
LiAgRm9yIG5vdyBhIHN0dWJiZWQgb3V0IHNjcm9sbENvbnRlbnRzIGZ1bmN0aW9uIGlzIGludm9r
ZWQgdG8gZG8gdGhlIHNjcm9sbGluZyBvZiB0aGUgYmFja2luZyBzdG9yZS4gIE5leHQgcGF0Y2gK
KyAgICAgICAgd2lsbCBtYWtlIHRoYXQgY3Jvc3MtcGxhdGZvcm0uICAKKyAgICAgICAgCisgICAg
ICAgIFRoZSBTY3JvbGxWaWV3IG5vdyBpbXBsZW1lbnQgU2Nyb2xsYmFyQ2xpZW50LCB3aGljaCBt
ZWFucyB0aGF0IHRoZXJlIHdhcyBhIGNsYXNoIG9mIHdpbmRvd0NsaXBSZWN0IG1ldGhvZHMgZnJv
bSB0aGUKKyAgICAgICAgbXVsdGlwbGUgaW5oZXJpdGFuY2UuICBGb3Igbm93IEkgc29sdmVkIHRo
aXMgYnkgYWRkaW5nIGEgU2Nyb2xsYmFyKiB0byB0aGUgU2Nyb2xsYmFyQ2xpZW50IHZlcnNpb24g
b2YgdGhlIG1ldGhvZCwgYnV0IGxvbmdlciB0ZXJtCisgICAgICAgIHdpbmRvd0NsaXBSZWN0IGlz
IGdvaW5nIHRvIGJlIHJlbW92ZWQgZnJvbSBTY3JvbGxiYXJDbGllbnQgKHdoZW4gV2lkZ2V0IGlu
dmFsaWRhdGlvbiBnZXRzIHJld3JpdHRlbikuCisgICAgICAgIAorICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVWaWV3Ojppc0FjdGl2ZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dmlzaWJsZUNvbnRlbnRzUmVzaXplZCk6CisgICAg
ICAgICogcGxhdGZvcm0vUG9wdXBNZW51Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojppbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmll
dzo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3Ojp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRl
U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpwbGF0Zm9ybUhhbmRsZUhvcml6b250
YWxBZGp1c3RtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtSGFu
ZGxlVmVydGljYWxBZGp1c3RtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhcjo6d2luZG93Q2xpcFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhckNs
aWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnBsYXRmb3JtSGFuZGxlSG9yaXpvbnRhbEFkanVzdG1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGxhdGZvcm1IYW5kbGVWZXJ0aWNh
bEFkanVzdG1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50cyk6CisgICAgICAgICog
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1l
bnU6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2Nyb2xsVmlld1dp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxDb250ZW50cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp3aW5kb3dDbGlwUmVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RCb3g6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5oOgorCiAyMDA4LTEwLTAxICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkocmV2aXNpb24gMzcxNjIpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtOTcwLDYgKzk3MSwx
MyBAQCB2b2lkIEZyYW1lVmlldzo6ZGlzcGF0Y2hTY2hlZHVsZWRFdmVudHMoCiAgICAgfQogfQog
CitJbnRSZWN0IEZyYW1lVmlldzo6d2luZG93Q2xpcFJlY3QoY29uc3QgU2Nyb2xsYmFyKikgY29u
c3QKK3sKKyAgICAvLyBXaGVuIHdlIGdldCBjYWxsZWQgYnkgdGhlIHNjcm9sbGJhciBjbGllbnQs
IGl0IG1lYW5zIHRoYXQgd2UgYXJlIG5vdCBjbGlwcGluZyB0byBjb250ZW50cywgc2luY2UKKyAg
ICAvLyB0aGVzZSBzY3JvbGxiYXJzIGFyZSBvdXJzLgorICAgIHJldHVybiB3aW5kb3dDbGlwUmVj
dChmYWxzZSk7Cit9CisKIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIHdpbmRvd0NsaXBSZWN0KHRydWUpOwpAQCAtMTAxMSw2ICsxMDE5LDIx
IEBAIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dDbGlwUmVjdEZvckxheWUKICAgICByZXR1cm4g
aW50ZXJzZWN0aW9uKGNsaXBSZWN0LCB3aW5kb3dDbGlwUmVjdCgpKTsKIH0KIAorYm9vbCBGcmFt
ZVZpZXc6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUoKS0+cGFn
ZSgpOworICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2
ZSgpOworfQorCit2b2lkIEZyYW1lVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogYmFyKQor
eworICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgorICAgIEludFNpemUgb2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKGJhcik7
CisgICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgZnJhbWUoKS0+c2Vu
ZFNjcm9sbEV2ZW50KCk7Cit9CisKIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dSZXNpemVyUmVj
dCgpIGNvbnN0CiB7CiAgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkgPyBmcmFtZSgpLT5wYWdlKCkg
OiAwOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMzcxNTkpCisrKyBXZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMCArMTExLDE0IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGFkanVzdFZpZXdTaXplKCk7CiAgICAgdm9pZCBpbml0U2Nyb2xsYmFycygpOwogICAg
IAorICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdChjb25zdCBTY3JvbGxiYXIqKSBj
b25zdDsKICAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKICAgICBJ
bnRSZWN0IHdpbmRvd0NsaXBSZWN0KGJvb2wgY2xpcFRvQ29udGVudHMpIGNvbnN0OwogICAgIElu
dFJlY3Qgd2luZG93Q2xpcFJlY3RGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciosIGJvb2wgY2xp
cFRvTGF5ZXJDb250ZW50cykgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOworICAgIAog
ICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0OwogCiAgICAgdmly
dHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlld1JlY3Vyc2l2ZWx5KGNvbnN0IEludFJlY3QmKTsK
QEAgLTE3OCw2ICsxODIsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRD
b250ZW50UmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmLCBib29sIGltbWVkaWF0ZSk7CiAgICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRzUmVzaXplZCgpIHsgc2V0TmVlZHNMYXlvdXQoKTsgfQorICAgIHZp
cnR1YWwgdm9pZCB2aXNpYmxlQ29udGVudHNSZXNpemVkKCkgeyBsYXlvdXQoKTsgfQogCiAgICAg
c3RhdGljIGRvdWJsZSBzQ3VycmVudFBhaW50VGltZVN0YW1wOyAvLyB1c2VkIGZvciBkZXRlY3Rp
bmcgZGVjb2RlZCByZXNvdXJjZSB0aHJhc2ggaW4gdGhlIGNhY2hlCiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vUG9wdXBNZW51LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1
cE1lbnUuaAkocmV2aXNpb24gMzcxNDgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BvcHVwTWVudS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRG
T1JNKFdJTikKICAgICAvLyBTY3JvbGxCYXJDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVD
aGFuZ2VkKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgp
IGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdChjb25zdCBTY3JvbGxi
YXIqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICB2b2lkIGNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZShjb25zdCBJbnRSZWN0
JiwgRnJhbWVWaWV3Kik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDM3
MTYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsOSArNDYsMTYgQEAgdm9pZCBTY3JvbGxWaWV3Ojppbml0KCkKICAgICAgICAgcGxhdGZv
cm1TZXRDYW5CbGl0T25TY3JvbGwoKTsKICAgICBtX3Njcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXIg
PSAwOwogICAgIG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgPSBmYWxzZTsKKyAgICBtX2luVXBkYXRl
U2Nyb2xsYmFycyA9IGZhbHNlOwogICAgIG1fZHJhd1BhblNjcm9sbEljb24gPSBmYWxzZTsKIH0K
IAordm9pZCBTY3JvbGxWaWV3OjpkZXN0cm95KCkKK3sKKyAgICBzZXRIYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKGZhbHNlKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSk7Cit9CisK
IHZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkgCiB7CiAgICAgQVNTRVJU
KGNoaWxkICE9IHRoaXMgJiYgIWNoaWxkLT5wYXJlbnQoKSk7CkBAIC03MCw2ICs3NywyOCBAQCB2
b2lkIFNjcm9sbFZpZXc6OnJlbW92ZUNoaWxkKFdpZGdldCogY2hpCiAgICAgICAgIHBsYXRmb3Jt
UmVtb3ZlQ2hpbGQoY2hpbGQpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7CisgICAgaWYgKGhhc0JhciAmJiAhbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhciA9IFNjcm9sbGJh
cjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIEhvcml6b250YWxTY3JvbGxiYXIsIFJlZ3Vs
YXJTY3JvbGxiYXIpOworICAgICAgICBhZGRDaGlsZChtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0
KCkpOworICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiBtX2hvcml6b250YWxTY3JvbGxiYXIpIHsK
KyAgICAgICAgcmVtb3ZlQ2hpbGQobV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpKTsKKyAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmll
dzo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7CisgICAgaWYgKGhhc0Jh
ciAmJiAhbV92ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFy
ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxi
YXIsIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICBhZGRDaGlsZChtX3ZlcnRpY2FsU2Nyb2xs
YmFyLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYgbV92ZXJ0aWNhbFNjcm9sbGJh
cikgeworICAgICAgICByZW1vdmVDaGlsZChtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKKyAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhciA9IDA7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbFZp
ZXc6OnNldFNjcm9sbGJhck1vZGVzKFNjcm9sbGJhck1vZGUgaG9yaXpvbnRhbE1vZGUsIFNjcm9s
bGJhck1vZGUgdmVydGljYWxNb2RlKQogewogICAgIGlmIChob3Jpem9udGFsTW9kZSA9PSBob3Jp
em9udGFsU2Nyb2xsYmFyTW9kZSgpICYmIHZlcnRpY2FsTW9kZSA9PSB2ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUoKSkKQEAgLTE1NSw2ICsxODQsMjggQEAgSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4aW11
bVNjcm9sbFBvc2l0aQogICAgIHJldHVybiBJbnRQb2ludChtYXhpbXVtT2Zmc2V0LndpZHRoKCks
IG1heGltdW1PZmZzZXQuaGVpZ2h0KCkpOwogfQogCit2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hh
bmdlZChTY3JvbGxiYXIqIGJhcikKK3sKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBt
b3ZlZC4KKyAgICBJbnRTaXplIG5ld09mZnNldCA9IG1fc2Nyb2xsT2Zmc2V0OworICAgIGlmIChi
YXIpIHsKKyAgICAgICAgaWYgKGJhciA9PSBtX2hvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAg
ICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoYmFyLT52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAo
YmFyID09IG1fdmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0SGVp
Z2h0KGJhci0+dmFsdWUoKSk7CisgICAgfQorCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IG5l
d09mZnNldCAtIG1fc2Nyb2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRTaXpl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Njcm9sbE9mZnNldCA9IG5ld09mZnNldDsKKwor
ICAgIGlmIChzY3JvbGxiYXJzU3VwcHJlc3NlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBz
Y3JvbGxDb250ZW50cyhzY3JvbGxEZWx0YSk7Cit9CisKIHZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xs
UmVjdEludG9WaWV3UmVjdXJzaXZlbHkoY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAocHJv
aGliaXRzU2Nyb2xsaW5nKCkpCkBAIC0yMDMsNiArMjU0LDEzMSBAQCBib29sIFNjcm9sbFZpZXc6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFNj
cm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkK
K3sKKyAgICAvLyBEb24ndCBhbGxvdyByZS1lbnRyYW5jeSBpbnRvIHRoaXMgZnVuY3Rpb24uCisg
ICAgaWYgKG1faW5VcGRhdGVTY3JvbGxiYXJzIHx8IHByb2hpYml0c1Njcm9sbGluZygpIHx8IHBs
YXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5VcGRhdGVTY3JvbGxi
YXJzID0gdHJ1ZTsKKworICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyOworICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IG1faG9yaXpvbnRh
bFNjcm9sbGJhcjsKKyAgICBib29sIG9sZEhhc1ZlcnRpY2FsID0gaGFzVmVydGljYWxTY3JvbGxi
YXI7CisgICAgYm9vbCBvbGRIYXNIb3Jpem9udGFsID0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcjsK
KyAgICBTY3JvbGxiYXJNb2RlIGhTY3JvbGwgPSBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlOwor
ICAgIFNjcm9sbGJhck1vZGUgdlNjcm9sbCA9IG1fdmVydGljYWxTY3JvbGxiYXJNb2RlOworCisg
ICAgY29uc3QgaW50IHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVU
aGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKKworICAgIGZvciAoaW50IHBhc3MgPSAwOyBw
YXNzIDwgMjsgcGFzcysrKSB7CisgICAgICAgIGJvb2wgc2Nyb2xsc1ZlcnRpY2FsbHk7CisgICAg
ICAgIGJvb2wgc2Nyb2xsc0hvcml6b250YWxseTsKKworICAgICAgICBpZiAoIW1fc2Nyb2xsYmFy
c1N1cHByZXNzZWQgJiYgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFNj
cm9sbGJhckF1dG8pKSB7CisgICAgICAgICAgICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5nIGJl
Zm9yZSBjaGVja2luZyBpZiBzY3JvbGxiYXJzIGFyZSBuZWVkZWQuCisgICAgICAgICAgICBpZiAo
aGFzVmVydGljYWxTY3JvbGxiYXIgIT0gb2xkSGFzVmVydGljYWwgfHwgaGFzSG9yaXpvbnRhbFNj
cm9sbGJhciAhPSBvbGRIYXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgIHZpc2libGVDb250
ZW50c1Jlc2l6ZWQoKTsKKworICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9s
bCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBj
b250ZW50c0hlaWdodCgpID4gaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKHNjcm9sbHNWZXJ0
aWNhbGx5KQorICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250
ZW50c1dpZHRoKCkgKyBzY3JvbGxiYXJUaGlja25lc3MgPiB3aWR0aCgpKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250
ZW50c1dpZHRoKCkgPiB3aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsc0hvcml6
b250YWxseSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9s
bCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBj
b250ZW50c0hlaWdodCgpICsgc2Nyb2xsYmFyVGhpY2tuZXNzID4gaGVpZ2h0KCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2Nyb2xsc0hv
cml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8pID8gaGFzSG9yaXpvbnRhbFNj
cm9sbGJhciA6IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKTsKKyAgICAgICAgICAgIHNj
cm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNWZXJ0aWNh
bFNjcm9sbGJhciA6ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyICE9IHNjcm9sbHNWZXJ0
aWNhbGx5KSB7CisgICAgICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxzVmVy
dGljYWxseSk7CisgICAgICAgICAgICBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbHNWZXJ0
aWNhbGx5OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIg
IT0gc2Nyb2xsc0hvcml6b250YWxseSkgeworICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihzY3JvbGxzSG9yaXpvbnRhbGx5KTsKKyAgICAgICAgICAgIGhhc0hvcml6b250YWxT
Y3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpvbnRhbGx5OworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBJ
bnRTaXplIG1heFNjcm9sbFBvc2l0aW9uKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgp
LCBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKTsKKyAgICBJbnRTaXplIHNjcm9s
bCA9IGRlc2lyZWRPZmZzZXQuc2hydW5rVG8obWF4U2Nyb2xsUG9zaXRpb24pOworICAgIHNjcm9s
bC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgCisgICAgaWYgKCFwbGF0Zm9ybUhhbmRsZUhvcml6
b250YWxBZGp1c3RtZW50KHNjcm9sbCkgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAg
ICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVXaWR0aCgpOworICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOwor
ICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBjQW1vdW50VG9LZWVwV2hlblBh
Z2luZyk7CisgICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50V2lkdGg7
CisgICAgICAgIEludFJlY3Qgb2xkUmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVj
dCgpKTsKKyAgICAgICAgSW50UmVjdCBoQmFyUmVjdCA9IEludFJlY3QoMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXIt
PmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0g
KG1fdmVydGljYWxTY3JvbGxiYXIgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+aGVpZ2h0KCkpOworICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVj
dChoQmFyUmVjdCk7CisgICAgICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRS
ZWN0ICE9IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCisgICAgICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBpZiAobV9zY3Jv
bGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0
U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJh
ci0+c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7CisgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29u
dGVudHNXaWR0aCgpKTsKKyAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShz
Y3JvbGwud2lkdGgoKSk7CisgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQorICAg
ICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihm
YWxzZSk7IAorICAgIH0gCisKKyAgICBpZiAoIXBsYXRmb3JtSGFuZGxlVmVydGljYWxBZGp1c3Rt
ZW50KHNjcm9sbCkgJiYgbV92ZXJ0aWNhbFNjcm9sbGJhcikgeworICAgICAgICBpbnQgY2xpZW50
SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRFbmFibGVkKGNvbnRlbnRzSGVpZ2h0KCkgPiBjbGllbnRIZWlnaHQpOworICAgICAgICBpbnQg
cGFnZVN0ZXAgPSAoY2xpZW50SGVpZ2h0IC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOworICAg
ICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKKyAgICAgICAg
SW50UmVjdCBvbGRSZWN0KG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKKyAgICAg
ICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxi
YXItPndpZHRoKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0
aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2hv
cml6b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMCkp
OworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QodkJhclJlY3QpOwor
ICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSkKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkK
KyAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9u
KHRydWUpOworICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFy
UGl4ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOworICAgICAg
ICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOworICAgICAg
ICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKKyAgICB9CisKKyAgICBpZiAo
b2xkSGFzVmVydGljYWwgIT0gKG1fdmVydGljYWxTY3JvbGxiYXIgIT0gMCkgfHwgb2xkSGFzSG9y
aXpvbnRhbCAhPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICE9IDApKQorICAgICAgICBmcmFtZVJl
Y3RzQ2hhbmdlZCgpOworCisgICAgLy8gU2VlIGlmIG91ciBvZmZzZXQgaGFzIGNoYW5nZWQgaW4g
YSBzaXR1YXRpb24gd2hlcmUgd2UgbWlnaHQgbm90IGhhdmUgc2Nyb2xsYmFycy4KKyAgICAvLyBU
aGlzIGNhbiBoYXBwZW4gd2hlbiBlZGl0aW5nIGEgYm9keSB3aXRoIG92ZXJmbG93OmhpZGRlbiBh
bmQgc2Nyb2xsaW5nIHRvIHJldmVhbCBzZWxlY3Rpb24uCisgICAgLy8gSXQgY2FuIGFsc28gaGFw
cGVuIHdoZW4gbWF4aW1pemluZyBhIHdpbmRvdyB0aGF0IGhhcyBzY3JvbGxiYXJzIChidXQgdGhl
IG5ldyBtYXhpbWl6ZWQgcmVzdWx0CisgICAgLy8gZG9lcyBub3QpLgorICAgIEludFNpemUgc2Ny
b2xsRGVsdGEgPSBzY3JvbGwgLSBtX3Njcm9sbE9mZnNldDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEg
IT0gSW50U2l6ZSgpKSB7CisgICAgICAgbV9zY3JvbGxPZmZzZXQgPSBzY3JvbGw7CisgICAgICAg
c2Nyb2xsQ29udGVudHMoc2Nyb2xsRGVsdGEpOworICAgIH0KKworICAgIG1faW5VcGRhdGVTY3Jv
bGxiYXJzID0gZmFsc2U7Cit9CisKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdYKQor
Ly8gRklYTUU6IFRoaXMgaXMganVzdCB0ZW1wb3Jhcnkgc28gd2UgY2FuIGNvbW1pdCBhIGNyb3Nz
LXBsYXRmb3JtIHZlcnNpb24gb2YgdXBkYXRlU2Nyb2xsYmFycy4KK3ZvaWQgU2Nyb2xsVmlldzo6
c2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYpCit7Cit9CisjZW5kaWYKKwogSW50UG9pbnQg
U2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQp
IGNvbnN0CiB7CiAgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5n
V2luZG93KHdpbmRvd1BvaW50KTsKQEAgLTU4Nyw1ICs3NjMsMTcgQEAgYm9vbCBTY3JvbGxWaWV3
OjpwbGF0Zm9ybUlzT2Zmc2NyZWVuKCkgYwogfQogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oR1RL
KQorYm9vbCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUhhbmRsZUhvcml6b250YWxBZGp1c3RtZW50KGNv
bnN0IEludFNpemUmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxWaWV3
OjpwbGF0Zm9ybUhhbmRsZVZlcnRpY2FsQWRqdXN0bWVudChjb25zdCBJbnRTaXplJikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
aAkocmV2aXNpb24gMzcxNjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogI2luY2x1
ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKQEAgLTU4LDExICs1OSwx
NCBAQCBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3Mg
U2Nyb2xsYmFyOwogCi1jbGFzcyBTY3JvbGxWaWV3IDogcHVibGljIFdpZGdldCB7CitjbGFzcyBT
Y3JvbGxWaWV3IDogcHVibGljIFdpZGdldCwgcHVibGljIFNjcm9sbGJhckNsaWVudCB7CiBwdWJs
aWM6CiAgICAgU2Nyb2xsVmlldygpOwogICAgIH5TY3JvbGxWaWV3KCk7CiAKKyAgICAvLyBTY3Jv
bGxiYXJDbGllbnQgbWV0aG9kLiAgRnJhbWVWaWV3IG92ZXJyaWRlcyB0aGUgb3RoZXIgdHdvLgor
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAgCiAgICAgLy8g
VGhlIHdpbmRvdyB0aGF0cyBob3N0cyB0aGUgU2Nyb2xsVmlldy4gIFRoZSBTY3JvbGxWaWV3IHdp
bGwgY29tbXVuaWNhdGUgc2Nyb2xscyBhbmQgcmVwYWludHMgdG8gdGhlCiAgICAgLy8gaG9zdCB3
aW5kb3cgaW4gdGhlIHdpbmRvdydzIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgdmlydHVhbCBIb3N0
V2luZG93KiBob3N0V2luZG93KCkgY29uc3QgPSAwOwpAQCAtMjAxLDcgKzIwNSw5IEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludENvbnRlbnRSZWN0YW5nbGUo
Y29uc3QgSW50UmVjdCYsIGJvb2wgbm93ID0gZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpID0g
MDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpYmxlQ29udGVudHNSZXNpemVkKCkgPSAwOwogICAgIAogICAgIHZvaWQg
dXBkYXRlV2luZG93UmVjdChjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7CiAKQEAg
LTIyMCwxMCArMjI2LDIzIEBAIHByaXZhdGU6CiAgICAgaW50IG1fc2Nyb2xsYmFyc0F2b2lkaW5n
UmVzaXplcjsKICAgICBib29sIG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQ7CiAKKyAgICBib29sIG1f
aW5VcGRhdGVTY3JvbGxiYXJzOworCiAgICAgSW50UG9pbnQgbV9wYW5TY3JvbGxJY29uUG9pbnQ7
CiAgICAgYm9vbCBtX2RyYXdQYW5TY3JvbGxJY29uOwogCiAgICAgdm9pZCBpbml0KCk7CisgICAg
dm9pZCBkZXN0cm95KCk7CisKKyAgICAvLyBDYWxsZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXJz
IHRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGUgc3RhdGUgb2YgdGhlIHZpZXcuCisgICAgdm9pZCB1
cGRhdGVTY3JvbGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpOworCisgICAgLy8g
U2Nyb2xsIHRoZSBhY3R1YWwgY29udGVudHMgb2YgdGhlIHZpZXcgKGVpdGhlciBibGl0dGluZyBv
ciBpbnZhbGlkYXRpbmcgYXMgbmVlZGVkKS4KKyAgICB2b2lkIHNjcm9sbENvbnRlbnRzKGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhKTsKKworICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQg
dG8gY3JlYXRlL2Rlc3Ryb3kgc2Nyb2xsYmFycy4KKyAgICB2b2lkIHNldEhhc0hvcml6b250YWxT
Y3JvbGxiYXIoYm9vbCk7CisgICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsK
IAogICAgIHZvaWQgcGxhdGZvcm1BZGRDaGlsZChXaWRnZXQqKTsKICAgICB2b2lkIHBsYXRmb3Jt
UmVtb3ZlQ2hpbGQoV2lkZ2V0Kik7CkBAIC0yNDAsNiArMjU5LDggQEAgcHJpdmF0ZToKICAgICB2
b2lkIHBsYXRmb3JtU2V0U2Nyb2xsYmFyc1N1cHByZXNzZWQoYm9vbCByZXBhaW50T25VbnN1cHBy
ZXNzKTsKICAgICB2b2lkIHBsYXRmb3JtUmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50
UmVjdCYsIGJvb2wgbm93KTsKICAgICBib29sIHBsYXRmb3JtSXNPZmZzY3JlZW4oKSBjb25zdDsK
KyAgICBib29sIHBsYXRmb3JtSGFuZGxlSG9yaXpvbnRhbEFkanVzdG1lbnQoY29uc3QgSW50U2l6
ZSYpOworICAgIGJvb2wgcGxhdGZvcm1IYW5kbGVWZXJ0aWNhbEFkanVzdG1lbnQoY29uc3QgSW50
U2l6ZSYpOwogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkIF9fT0JKQ19fCiBwdWJsaWM6
CkBAIC0yNDksMjQgKzI3MCwxNyBAQCBwcml2YXRlOgogICAgIE5TU2Nyb2xsVmlldzxXZWJDb3Jl
RnJhbWVTY3JvbGxWaWV3Piogc2Nyb2xsVmlldygpIGNvbnN0OwogI2VuZGlmCiAKLS8vIEZJWE1F
OiBTY3JvbGxWaWV3UHJpdmF0ZSB3aWxsIGV2ZW50dWFsbHkgYmUgY29tcGxldGVseSBnb25lLiAg
SXQncyBhbHJlYWR5IGdvbmUgb24gTWFjLgotI2lmICFQTEFURk9STShNQUMpCisvLyBGSVhNRTog
U2Nyb2xsVmlld1ByaXZhdGUgd2lsbCBldmVudHVhbGx5IGJlIGNvbXBsZXRlbHkgZ29uZS4KICAg
ICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsKICAgICBTY3JvbGxWaWV3UHJpdmF0ZSogbV9kYXRh
OwogCiAgICAgZnJpZW5kIGNsYXNzIFNjcm9sbFZpZXdQcml2YXRlOyAvLyBGSVhNRTogVGVtcG9y
YXJ5LgotI2VuZGlmCiAgICAgCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFdYKQog
cHVibGljOgogICAgIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0Jik7CiAgICAg
dm9pZCBzY3JvbGxCYWNraW5nU3RvcmUoaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNj
cm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCk7CiAgICAgdm9pZCB1cGRhdGVC
YWNraW5nU3RvcmUoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoY29u
c3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCk7Ci0jZWxzZQotICAgIHZvaWQgdXBkYXRlU2Nyb2xs
YmFycyhjb25zdCBJbnRTaXplJiBkZXNpcmVkT2Zmc2V0KSB7fSAvLyBGSVhNRTogVGVtcG9yYXJ5
LgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
CShyZXZpc2lvbiAzNzE0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDI0LDcgKzQyNCw3IEBAIEludFJlY3QgU2Nyb2xsYmFyOjp3aW5kb3dD
bGlwUmVjdCgpIGNvbnMKIAogICAgIGNsaXBSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dpbmRv
dyhjbGlwUmVjdCk7CiAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICBjbGlwUmVjdC5pbnRlcnNl
Y3QobV9jbGllbnQtPndpbmRvd0NsaXBSZWN0KCkpOworICAgICAgICBjbGlwUmVjdC5pbnRlcnNl
Y3QobV9jbGllbnQtPndpbmRvd0NsaXBSZWN0KHRoaXMpKTsKIAogICAgIHJldHVybiBjbGlwUmVj
dDsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkocmV2aXNpb24gMzcxNDgp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNj
cm9sbGJhciopID0gMDsKIAogICAgIC8vIFVzZWQgdG8gb2J0YWluIGEgd2luZG93IGNsaXAgcmVj
dC4KLSAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0ID0g
MDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKIH07CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkocmV2aXNpb24gMzcxNzMpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxWaWV3R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsMzQgKzUyLDE3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgU2Nyb2xsVmlld1Njcm9sbGJhciA6IHB1YmxpYyBTY3JvbGxiYXJHdGsgewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbFZpZXdTY3JvbGxiYXI+IGNyZWF0
ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24sIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNjcm9sbFZpZXdTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwgc2l6ZSkp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTY3JvbGxWaWV3U2Nyb2xsYmFyKFNjcm9sbGJhckNs
aWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVSZWN0c0NoYW5nZWQoKSBjb25zdDsKLX07Ci0KLWNsYXNzIFNj
cm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlIDogcHVibGljIFNjcm9sbGJhckNsaWVudAorY2xh
c3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUKIHsKIHB1YmxpYzoKICAgICBTY3JvbGxW
aWV3UHJpdmF0ZShTY3JvbGxWaWV3KiBfdmlldykKICAgICAgICAgOiB2aWV3KF92aWV3KQotICAg
ICAgICAsIGluVXBkYXRlU2Nyb2xsYmFycyhmYWxzZSkKICAgICAgICAgLCBob3Jpem9udGFsQWRq
dXN0bWVudCgwKQogICAgICAgICAsIHZlcnRpY2FsQWRqdXN0bWVudCgwKQogICAgIHt9CiAKICAg
ICB+U2Nyb2xsVmlld1ByaXZhdGUoKQogICAgIHsKLSAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihmYWxzZSk7Ci0gICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsK
LQogICAgICAgICBpZiAoaG9yaXpvbnRhbEFkanVzdG1lbnQpIHsKICAgICAgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVChob3Jpem9udGFsQWRqdXN0
bWVudCksIChncG9pbnRlcilTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQsIHRo
aXMpOwogICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoaG9yaXpvbnRhbEFkanVzdG1lbnQpOwpA
QCAtOTMsNjggKzc2LDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3Jl
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKIAotICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcihib29sIGhhc0Jhcik7Ci0gICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJh
cihib29sIGhhc0Jhcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJh
ciopOwotICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotCiAgICAgc3RhdGljIHZvaWQgYWRqdXN0bWVu
dENoYW5nZWQoR3RrQWRqdXN0bWVudCosIGdwb2ludGVyKTsKIAogICAgIFNjcm9sbFZpZXcqIHZp
ZXc7CiAgICAgSW50U2l6ZSB2aWV3UG9ydFNpemU7Ci0gICAgYm9vbCBpblVwZGF0ZVNjcm9sbGJh
cnM7Ci0gICAgSGFzaFNldDxXaWRnZXQqPiBjaGlsZHJlbjsKICAgICBHdGtBZGp1c3RtZW50KiBo
b3Jpem9udGFsQWRqdXN0bWVudDsKICAgICBHdGtBZGp1c3RtZW50KiB2ZXJ0aWNhbEFkanVzdG1l
bnQ7CiB9OwogCi1TY3JvbGxWaWV3U2Nyb2xsYmFyOjpTY3JvbGxWaWV3U2Nyb2xsYmFyKFNjcm9s
bGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Ny
b2xsYmFyQ29udHJvbFNpemUgc2l6ZSkKLSAgICA6IFNjcm9sbGJhckd0ayhjbGllbnQsIG9yaWVu
dGF0aW9uLCBzaXplKQotewotfQotCi12b2lkIFNjcm9sbFZpZXdTY3JvbGxiYXI6OmZyYW1lUmVj
dHNDaGFuZ2VkKCkgY29uc3QKLXsKLSAgICBpZiAoIXBhcmVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwotCi0gICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7Ci0gICAgSW50
UG9pbnQgbG9jID0gZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lUmVj
dCgpLmxvY2F0aW9uKCkpOwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6
ZSB0byBiZSBuZWdhdGl2ZQotICAgIEludFNpemUgc3ogPSBmcmFtZVJlY3QoKS5zaXplKCk7Ci0g
ICAgc3ouY2xhbXBOZWdhdGl2ZVRvWmVybygpOwotCi0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0
aW9uID0geyBsb2MueCgpLCBsb2MueSgpLCBzei53aWR0aCgpLCBzei5oZWlnaHQoKSB9OwotICAg
IGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShwbGF0Zm9ybVdpZGdldCgpLCAmYWxsb2NhdGlvbik7
Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCi17Ci0gICAgaWYgKGhhc0JhciAmJiAhdmlldy0+bV9o
b3Jpem9udGFsU2Nyb2xsYmFyICYmICFob3Jpem9udGFsQWRqdXN0bWVudCkgewotICAgICAgICB2
aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIgPSBTY3JvbGxWaWV3U2Nyb2xsYmFyOjpjcmVhdGUo
dGhpcywgSG9yaXpvbnRhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgICAgIHZp
ZXctPmFkZENoaWxkKHZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKSk7Ci0gICAgfSBl
bHNlIGlmICghaGFzQmFyICYmIHZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAg
ICB2aWV3LT5yZW1vdmVDaGlsZCh2aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCkpOwot
ICAgICAgICB2aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIgPSAwOwotICAgIH0KLX0KLQotdm9p
ZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
Ym9vbCBoYXNCYXIpCi17Ci0gICAgaWYgKGhhc0JhciAmJiAhdmlldy0+bV92ZXJ0aWNhbFNjcm9s
bGJhciAmJiAhdmVydGljYWxBZGp1c3RtZW50KSB7Ci0gICAgICAgIHZpZXctPm1fdmVydGljYWxT
Y3JvbGxiYXIgPSBTY3JvbGxWaWV3U2Nyb2xsYmFyOjpjcmVhdGUodGhpcywgVmVydGljYWxTY3Jv
bGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOwotICAgICAgICB2aWV3LT5hZGRDaGlsZCh2aWV3LT5t
X3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKLSAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYgdmll
dy0+bV92ZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICB2aWV3LT5yZW1vdmVDaGlsZCh2aWV3
LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpKTsKLSAgICAgICAgdmlldy0+bV92ZXJ0aWNhbFNj
cm9sbGJhciA9IDA7Ci0gICAgfQotfQotCiB2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2
YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAg
ICAgLy8gU2luY2Ugc2Nyb2xsaW5nIGlzIGRvdWJsZSBidWZmZXJlZCwgd2Ugd2lsbCBiZSBibGl0
dGluZyB0aGUgc2Nyb2xsIHZpZXcncyBpbnRlcnNlY3Rpb24KQEAgLTIwNywzOSArMTM2LDYgQEAg
dm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdQogICAgIHN0YXRpY19jYXN0
PEZyYW1lVmlldyo+KHRoYXQtPnZpZXcpLT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKIH0K
IAotdm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6dmFsdWVDaGFuZ2VkKFNjcm9s
bGJhciogYmFyKQotewotICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgotICAg
IEludFNpemUgbmV3T2Zmc2V0ID0gdmlldy0+bV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKGJhcikg
ewotICAgICAgICBpZiAoYmFyID09IHZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAg
ICAgICAgIG5ld09mZnNldC5zZXRXaWR0aChiYXItPnZhbHVlKCkpOwotICAgICAgICBlbHNlIGlm
IChiYXIgPT0gdmlldy0+bV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG5ld09mZnNl
dC5zZXRIZWlnaHQoYmFyLT52YWx1ZSgpKTsKLSAgICB9Ci0gICAgSW50U2l6ZSBzY3JvbGxEZWx0
YSA9IG5ld09mZnNldCAtIHZpZXctPm1fc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChzY3JvbGxEZWx0
YSA9PSBJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLSAgICB2aWV3LT5tX3Njcm9sbE9mZnNl
dCA9IG5ld09mZnNldDsKLQotICAgIGlmICh2aWV3LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOwot
ICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHZpZXcpLT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZl
bnQoKTsKLX0KLQotSW50UmVjdCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6d2luZG93
Q2xpcFJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZp
ZXcqPih2aWV3KS0+d2luZG93Q2xpcFJlY3QoZmFsc2UpOwotfQotCi1ib29sIFNjcm9sbFZpZXc6
OlNjcm9sbFZpZXdQcml2YXRlOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgUGFnZSogcGFnZSA9
IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHZpZXcpLT5mcmFtZSgpLT5wYWdlKCk7Ci0g
ICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7Ci19
Ci0KIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKQogICAgIDogbV9kYXRhKG5ldyBTY3JvbGxWaWV3
UHJpdmF0ZSh0aGlzKSkKIHsKQEAgLTI0OCw2ICsxNDQsNyBAQCBTY3JvbGxWaWV3OjpTY3JvbGxW
aWV3KCkKIAogU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQogeworICAgIGRlc3Ryb3koKTsKICAg
ICBkZWxldGUgbV9kYXRhOwogfQogCkBAIC0yNzYsOCArMTczLDggQEAgdm9pZCBTY3JvbGxWaWV3
OjpzZXRHdGtBZGp1c3RtZW50cyhHdGtBZAogICAgICAgICAvKgogICAgICAgICAgKiBkaXNhYmxl
IHRoZSBzY3JvbGxiYXJzIChpZiB3ZSBoYXZlIGFueSkgYXMgdGhlIEd0a0FkanVzdG1lbnQgb3Zl
cgogICAgICAgICAgKi8KLSAgICAgICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihm
YWxzZSk7Ci0gICAgICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSk7
CisgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKKyAgICAgICAgc2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSk7CiAKICAgICAgICAgZ19vYmplY3RfcmVmKG1fZGF0
YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOwogICAgICAgICBnX29iamVjdF9yZWYobV9kYXRhLT52
ZXJ0aWNhbEFkanVzdG1lbnQpOwpAQCAtMjk4LDY1ICsxOTUsOCBAQCB2b2lkIFNjcm9sbFZpZXc6
OnBsYXRmb3JtUmVtb3ZlQ2hpbGQoV2lkCiAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdU
S19DT05UQUlORVIoY29udGFpbmluZ1dpbmRvdygpKSwgY2hpbGQtPnBsYXRmb3JtV2lkZ2V0KCkp
OwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYg
ZGVzaXJlZE9mZnNldCkKK2Jvb2wgU2Nyb2xsVmlldzo6cGxhdGZvcm1IYW5kbGVIb3Jpem9udGFs
QWRqdXN0bWVudChjb25zdCBJbnRTaXplJiBzY3JvbGwpCiB7Ci0gICAgLy8gRG9uJ3QgYWxsb3cg
cmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgotICAgIGlmIChtX2RhdGEtPmluVXBkYXRl
U2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHByb2hpYml0c1Njcm9sbGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPmluVXBkYXRlU2Nyb2xsYmFycyA9
IHRydWU7Ci0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0gbV92ZXJ0aWNhbFNjcm9s
bGJhcjsKLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBtX2hvcml6b250YWxTY3Jv
bGxiYXI7Ci0gICAgYm9vbCBvbGRIYXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOwot
ICAgIGJvb2wgb2xkSGFzSG9yaXpvbnRhbCA9IGhhc0hvcml6b250YWxTY3JvbGxiYXI7Ci0gICAg
U2Nyb2xsYmFyTW9kZSBoU2Nyb2xsID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsKLSAgICBT
Y3JvbGxiYXJNb2RlIHZTY3JvbGwgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKLQotICAgIGNv
bnN0IGludCBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUo
KS0+c2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0KLSAgICBmb3IgKGludCBwYXNzID0gMDsgcGFzcyA8
IDI7IHBhc3MrKykgewotICAgICAgICBib29sIHNjcm9sbHNWZXJ0aWNhbGx5OwotICAgICAgICBi
b29sIHNjcm9sbHNIb3Jpem9udGFsbHk7Ci0KLSAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBw
cmVzc2VkICYmIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gfHwgdlNjcm9sbCA9PSBTY3JvbGxi
YXJBdXRvKSkgewotICAgICAgICAgICAgLy8gRG8gYSBsYXlvdXQgaWYgcGVuZGluZyBiZWZvcmUg
Y2hlY2tpbmcgaWYgc2Nyb2xsYmFycyBhcmUgbmVlZGVkLgotICAgICAgICAgICAgaWYgKGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyICE9IG9sZEhhc1ZlcnRpY2FsIHx8IGhhc0hvcml6b250YWxTY3JvbGxi
YXIgIT0gb2xkSGFzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGcmFt
ZVZpZXcqPih0aGlzKS0+bGF5b3V0KCk7Ci0KLSAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5
ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJh
ckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmIChz
Y3JvbGxzVmVydGljYWxseSkKLSAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0g
KGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1
dG8gJiYgY29udGVudHNXaWR0aCgpICsgc2Nyb2xsYmFyVGhpY2tuZXNzID4gd2lkdGgoKSk7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0g
KGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1
dG8gJiYgY29udGVudHNXaWR0aCgpID4gd2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNj
cm9sbHNIb3Jpem9udGFsbHkpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5
ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJh
ckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSArIHNjcm9sbGJhclRoaWNrbmVzcyA+IGhlaWdodCgp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc0hv
cml6b250YWxTY3JvbGxiYXIgOiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbik7Ci0gICAg
ICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pID8g
aGFzVmVydGljYWxTY3JvbGxiYXIgOiAodlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gc2Nyb2xsc1Zl
cnRpY2FsbHkpIHsKLSAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
c2Nyb2xsc1ZlcnRpY2FsbHkpOwotICAgICAgICAgICAgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBz
Y3JvbGxzVmVydGljYWxseTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKLSAgICAgICAgICAgIG1fZGF0YS0+
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9yaXpvbnRhbGx5KTsKLSAgICAgICAg
ICAgIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpvbnRhbGx5OwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5l
IHN0ZXApLgotICAgIEludFNpemUgbWF4U2Nyb2xsUG9zaXRpb24oY29udGVudHNXaWR0aCgpIC0g
dmlzaWJsZVdpZHRoKCksIGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpOwotICAg
IEludFNpemUgc2Nyb2xsID0gZGVzaXJlZE9mZnNldC5zaHJ1bmtUbyhtYXhTY3JvbGxQb3NpdGlv
bik7Ci0gICAgc2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKLQogICAgIGlmIChtX2RhdGEt
Pmhvcml6b250YWxBZGp1c3RtZW50KSB7CiAgICAgICAgIG1fZGF0YS0+aG9yaXpvbnRhbEFkanVz
dG1lbnQtPnBhZ2Vfc2l6ZSA9IHZpc2libGVXaWR0aCgpOwogICAgICAgICBtX2RhdGEtPmhvcml6
b250YWxBZGp1c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IHZpc2libGVXaWR0aCgpIC8gMTAuMDsK
QEAgLTM2OSwyOSArMjA5LDEzIEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhj
b25zdCAKICAgICAgICAgICAgIG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQtPnZhbHVlID0g
c2Nyb2xsLndpZHRoKCk7CiAgICAgICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2Vk
KG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChtX2hvcml6b250YWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gdmlz
aWJsZVdpZHRoKCk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RW5hYmxlZChj
b250ZW50c1dpZHRoKCkgPiBjbGllbnRXaWR0aCk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IChj
bGllbnRXaWR0aCAtIGNBbW91bnRUb0tlZXBXaGVuUGFnaW5nKTsKLSAgICAgICAgaWYgKHBhZ2VT
dGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRXaWR0aDsKLSAgICAgICAgSW50UmVjdCBvbGRSZWN0
KG1faG9yaXpvbnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwotICAgICAgICBJbnRSZWN0IGhC
YXJSZWN0ID0gSW50UmVjdCgwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWlnaHQoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV92ZXJ0aWNhbFNjcm9sbGJhciA/IG1f
dmVydGljYWxTY3JvbGxiYXItPndpZHRoKCkgOiAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KGhCYXJSZWN0KTsKLSAgICAgICAgaWYg
KCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0gbV9ob3Jpem9udGFsU2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKSkKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aW52
YWxpZGF0ZSgpOwotCi0gICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQotICAgICAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVl
KTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4
ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
LT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOwotICAgICAgICBt
X2hvcml6b250YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC53aWR0aCgpKTsKLSAgICAgICAg
aWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KIAorYm9vbCBTY3JvbGxWaWV3OjpwbGF0
Zm9ybUhhbmRsZVZlcnRpY2FsQWRqdXN0bWVudChjb25zdCBJbnRTaXplJiBzY3JvbGwpCit7CiAg
ICAgaWYgKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KSB7CiAgICAgICAgIG1fZGF0YS0+dmVy
dGljYWxBZGp1c3RtZW50LT5wYWdlX3NpemUgPSB2aXNpYmxlSGVpZ2h0KCk7CiAgICAgICAgIG1f
ZGF0YS0+dmVydGljYWxBZGp1c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IHZpc2libGVIZWlnaHQo
KSAvIDEwLjA7CkBAIC00MDQsNDMgKzIyOCw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Ny
b2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50LT52
YWx1ZSA9IHNjcm9sbC5oZWlnaHQoKTsKICAgICAgICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVl
X2NoYW5nZWQobV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpOwogICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQg
PSB2aXNpYmxlSGVpZ2h0KCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldEVuYWJs
ZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdodCk7Ci0gICAgICAgIGludCBwYWdlU3Rl
cCA9IChjbGllbnRIZWlnaHQgLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7Ci0gICAgICAgIGlm
IChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50SGVpZ2h0OwotICAgICAgICBJbnRSZWN0
IG9sZFJlY3QobV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpOwotICAgICAgICBJbnRS
ZWN0IHZCYXJSZWN0ID0gSW50UmVjdCh3aWR0aCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lk
dGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAobV9ob3Jpem9udGFs
U2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6IDApKTsKLSAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0RnJhbWVSZWN0KHZCYXJSZWN0KTsKLSAgICAgICAg
aWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0gbV92ZXJ0aWNhbFNjcm9s
bGJhci0+ZnJhbWVSZWN0KCkpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZh
bGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0gICAgICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsK
LSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVsc1Bl
ckxpbmVTdGVwLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFBy
b3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKG1f
c2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKG9sZEhhc1Zl
cnRpY2FsICE9IChtX3ZlcnRpY2FsU2Nyb2xsYmFyICE9IDApIHx8IG9sZEhhc0hvcml6b250YWwg
IT0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAhPSAwKSkKLSAgICAgICAgZnJhbWVSZWN0c0NoYW5n
ZWQoKTsKLQotICAgIC8vIFNlZSBpZiBvdXIgb2Zmc2V0IGhhcyBjaGFuZ2VkIGluIGEgc2l0dWF0
aW9uIHdoZXJlIHdlIG1pZ2h0IG5vdCBoYXZlIHNjcm9sbGJhcnMuCi0gICAgLy8gVGhpcyBjYW4g
aGFwcGVuIHdoZW4gZWRpdGluZyBhIGJvZHkgd2l0aCBvdmVyZmxvdzpoaWRkZW4gYW5kIHNjcm9s
bGluZyB0byByZXZlYWwgc2VsZWN0aW9uLgotICAgIC8vIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVu
IG1heGltaXppbmcgYSB3aW5kb3cgdGhhdCBoYXMgc2Nyb2xsYmFycyAoYnV0IHRoZSBuZXcgbWF4
aW1pemVkIHJlc3VsdAotICAgIC8vIGRvZXMgbm90KS4KLSAgICBJbnRTaXplIHNjcm9sbERlbHRh
ID0gc2Nyb2xsIC0gbV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9sbERlbHRhICE9IEludFNp
emUoKSkgewotICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsOwotICAgICAgIG1fZGF0YS0+
c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEtPmlu
VXBkYXRlU2Nyb2xsYmFycyA9IGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjphZGRUb0RpcnR5UmVnaW9u
KGNvbnN0IEludFJlY3QmIGNvbnRhaW5pbmdXaW5kb3dSZWN0KQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvU2Nyb2xsYmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxiYXJHdGsuY3BwCShyZXZpc2lvbiAzNzE0OCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbGJhckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDIxIEBA
IFNjcm9sbGJhckd0azo6flNjcm9sbGJhckd0aygpCiAgICAgZ19vYmplY3RfdW5yZWYoR19PQkpF
Q1QocGxhdGZvcm1XaWRnZXQoKSkpOwogfQogCit2b2lkIFNjcm9sbGJhckd0azo6ZnJhbWVSZWN0
c0NoYW5nZWQoKSBjb25zdAoreworICAgIGlmICghcGFyZW50KCkgfHwgIXBhcmVudCgpLT5pc1Nj
cm9sbFZpZXdTY3JvbGxiYXIodGhpcykpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50
IGxvYyA9IHBhcmVudCgpLT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lUmVjdCgpLmxv
Y2F0aW9uKCkpOworCisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGFsbG9jYXRpb24gc2l6ZSB0byBi
ZSBuZWdhdGl2ZQorICAgIEludFNpemUgc3ogPSBmcmFtZVJlY3QoKS5zaXplKCk7CisgICAgc3ou
Y2xhbXBOZWdhdGl2ZVRvWmVybygpOworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0g
eyBsb2MueCgpLCBsb2MueSgpLCBzei53aWR0aCgpLCBzei5oZWlnaHQoKSB9OworICAgIGd0a193
aWRnZXRfc2l6ZV9hbGxvY2F0ZShwbGF0Zm9ybVdpZGdldCgpLCAmYWxsb2NhdGlvbik7Cit9CisK
IHZvaWQgU2Nyb2xsYmFyR3RrOjp1cGRhdGVUaHVtYlBvc2l0aW9uKCkKIHsKICAgICBpZiAobV9h
ZGp1c3RtZW50LT52YWx1ZSAhPSBtX2N1cnJlbnRQb3MpIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Njcm9sbGJhckd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhckd0ay5oCShyZXZpc2lvbiAzNzE0OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Njcm9sbGJhckd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw4IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwogCisgICAgdmlydHVhbCB2b2lk
IGZyYW1lUmVjdHNDaGFuZ2VkKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBTY3JvbGxiYXJH
dGsoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRy
b2xTaXplKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsVmlld01hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1tCShyZXZp
c2lvbiAzNzE1NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbFZpZXdNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgU2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCiAK
IFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKIHsKKyAgICBkZXN0cm95KCk7CiB9CiAKIGlubGlu
ZSBOU1Njcm9sbFZpZXc8V2ViQ29yZUZyYW1lU2Nyb2xsVmlldz4gKlNjcm9sbFZpZXc6OnNjcm9s
bFZpZXcoKSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAkocmV2
aXNpb24gMzcxNjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZSA6IHB1YmxpYyBTY3JvbGxiYXJDbGll
bnQgeworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgIHsKIHB1YmxpYzoKICAg
ICBTY3JvbGxWaWV3UHJpdmF0ZShTY3JvbGxWaWV3KiB2aWV3KQogICAgICAgOiBtX3ZpZXcodmll
dykKQEAgLTc0LDY4ICs3NCwxNCBAQCBwdWJsaWM6CiAKICAgICB+U2Nyb2xsVmlld1ByaXZhdGUo
KQogICAgIHsKLSAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSk7Ci0gICAg
ICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKICAgICB9CiAKLSAgICB2b2lkIHNl
dEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpOwotICAgIHZvaWQgc2V0SGFzVmVy
dGljYWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpOwotCi0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hh
bmdlZChTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLQogICAgIHZvaWQgc2Ny
b2xsQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKIAogICAgIFNjcm9s
bFZpZXcqIG1fdmlldzsKICAgICBpbnQgIG1fcGxhdGZvcm1XaWRnZXRzOwotICAgIGJvb2wgbV9p
blVwZGF0ZVNjcm9sbGJhcnM7CiB9OwogCi12b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2
YXRlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKQotewotICAgIGlmICho
YXNCYXIgJiYgIW1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdmll
dy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIodGhpcywgSG9yaXpvbnRhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgICAg
IG1fdmlldy0+YWRkQ2hpbGQobV92aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCkpOwot
ICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiBtX3ZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhcikg
ewotICAgICAgICBtX3ZpZXctPnJlbW92ZUNoaWxkKG1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xs
YmFyLmdldCgpKTsKLSAgICAgICAgbV92aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIgPSAwOwot
ICAgIH0KLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SGFzVmVy
dGljYWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCi17Ci0gICAgaWYgKGhhc0JhciAmJiAhbV92aWV3
LT5tX3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdmlldy0+bV92ZXJ0aWNhbFNjcm9s
bGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Ny
b2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICAgICAgbV92aWV3LT5hZGRDaGlsZChtX3Zp
ZXctPm1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCkpOwotICAgIH0gZWxzZSBpZiAoIWhhc0JhciAm
JiBtX3ZpZXctPm1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92aWV3LT5yZW1vdmVD
aGlsZChtX3ZpZXctPm1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCkpOwotICAgICAgICBtX3ZpZXct
Pm1fdmVydGljYWxTY3JvbGxiYXIgPSAwOwotICAgIH0KLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpT
Y3JvbGxWaWV3UHJpdmF0ZTo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogYmFyKQotewotICAgIC8v
IEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgotICAgIEludFNpemUgbmV3T2Zmc2V0ID0g
bV92aWV3LT5tX3Njcm9sbE9mZnNldDsKLSAgICBpZiAoYmFyKSB7Ci0gICAgICAgIGlmIChiYXIg
PT0gbV92aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBuZXdPZmZzZXQu
c2V0V2lkdGgoYmFyLT52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAoYmFyID09IG1fdmlldy0+
bV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRIZWlnaHQoYmFy
LT52YWx1ZSgpKTsKLSAgICB9Ci0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IG5ld09mZnNldCAt
IG1fdmlldy0+bV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fdmlldy0+bV9zY3JvbGxPZmZzZXQgPSBuZXdPZmZz
ZXQ7Ci0KLSAgICBpZiAobV92aWV3LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBzY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOwotICAgIHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KG1fdmlldyktPmZyYW1lKCktPnNlbmRTY3JvbGxFdmVudCgpOwot
fQotCiB2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3Rv
cmUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgLy8gU2luY2Ugc2Nyb2xsaW5n
IGlzIGRvdWJsZSBidWZmZXJlZCwgd2Ugd2lsbCBiZSBibGl0dGluZyB0aGUgc2Nyb2xsIHZpZXcn
cyBpbnRlcnNlY3Rpb24KQEAgLTE1OCwxNyArMTA0LDYgQEAgdm9pZCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3UHJpdmF0ZTo6c2NybwogICAgIG1fdmlldy0+ZnJhbWVSZWN0c0NoYW5nZWQoKTsKIH0K
IAotSW50UmVjdCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6d2luZG93Q2xpcFJlY3Qo
KSBjb25zdAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPihtX3Zp
ZXcpLT53aW5kb3dDbGlwUmVjdChmYWxzZSk7Ci19Ci0KLWJvb2wgU2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGU6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICBQYWdlKiBwYWdlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4obV92aWV3KS0+ZnJhbWUoKS0+cGFnZSgpOwotICAgIHJl
dHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOwotfQotCiBT
Y3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKICAgICA6IG1fZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZh
dGUodGhpcykpCiB7CkBAIC0xODAsMTQ5ICsxMTUsOSBAQCBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmll
dygpCiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3Jv
bGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpCit2b2lkIFNjcm9sbFZpZXc6OnNj
cm9sbENvbnRlbnRzKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgLy8gRG9uJ3QgYWxsb3cg
cmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgotICAgIGlmIChtX2RhdGEtPm1faW5VcGRh
dGVTY3JvbGxiYXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJvaGliaXRzU2Nyb2xs
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2RhdGEtPm1faW5VcGRhdGVTY3Jv
bGxiYXJzID0gdHJ1ZTsKLQotICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyOwotICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IG1faG9yaXpv
bnRhbFNjcm9sbGJhcjsKLSAgICBib29sIG9sZEhhc1ZlcnRpY2FsID0gaGFzVmVydGljYWxTY3Jv
bGxiYXI7Ci0gICAgYm9vbCBvbGRIYXNIb3Jpem9udGFsID0gaGFzSG9yaXpvbnRhbFNjcm9sbGJh
cjsKLSAgICBTY3JvbGxiYXJNb2RlIGhTY3JvbGwgPSBtX2hvcml6b250YWxTY3JvbGxiYXJNb2Rl
OwotICAgIFNjcm9sbGJhck1vZGUgdlNjcm9sbCA9IG1fdmVydGljYWxTY3JvbGxiYXJNb2RlOwot
Ci0gICAgY29uc3QgaW50IGNWZXJ0aWNhbFdpZHRoID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
ZW1lKCktPnNjcm9sbGJhclRoaWNrbmVzcygpOwotICAgIGNvbnN0IGludCBjSG9yaXpvbnRhbEhl
aWdodCA9IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3Mo
KTsKLQotICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7Ci0gICAgICAg
IGJvb2wgc2Nyb2xsc1ZlcnRpY2FsbHk7Ci0gICAgICAgIGJvb2wgc2Nyb2xsc0hvcml6b250YWxs
eTsKLQotICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKGhTY3JvbGwgPT0g
U2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pKSB7Ci0gICAgICAgICAg
ICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5nIGJlZm9yZSBjaGVja2luZyBpZiBzY3JvbGxiYXJz
IGFyZSBuZWVkZWQuCi0gICAgICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gb2xk
SGFzVmVydGljYWwgfHwgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciAhPSBvbGRIYXNIb3Jpem9udGFs
KQotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5sYXlvdXQo
KTsKLSAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3Jv
bGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYg
Y29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmIChzY3JvbGxzVmVy
dGljYWxseSkKLSAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwg
PT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYgY29u
dGVudHNXaWR0aCgpICsgY1ZlcnRpY2FsV2lkdGggPiB3aWR0aCgpKTsKLSAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBT
Y3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50
c1dpZHRoKCkgPiB3aWR0aCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsc0hvcml6b250
YWxseSkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250
ZW50c0hlaWdodCgpICsgY0hvcml6b250YWxIZWlnaHQgPiBoZWlnaHQoKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzY3JvbGxzSG9yaXpv
bnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOwotICAgICAgICAgICAgc2Nyb2xs
c1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyIDogKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gc2Nyb2xsc1ZlcnRpY2Fs
bHkpIHsKLSAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xs
c1ZlcnRpY2FsbHkpOwotICAgICAgICAgICAgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxz
VmVydGljYWxseTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKLSAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9yaXpvbnRhbGx5KTsKLSAgICAgICAgICAgIGhh
c0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpvbnRhbGx5OwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBz
dGVwKS4KLSAgICBJbnRTaXplIG1heFNjcm9sbFBvc2l0aW9uKGNvbnRlbnRzV2lkdGgoKSAtIHZp
c2libGVXaWR0aCgpLCBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKTsKLSAgICBJ
bnRTaXplIHNjcm9sbCA9IGRlc2lyZWRPZmZzZXQuc2hydW5rVG8obWF4U2Nyb2xsUG9zaXRpb24p
OwotICAgIHNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0KLSAgICBRUG9pbnQgc2Nyb2xs
YmFyT2Zmc2V0OwotI2lmIGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVkKFFUX01BQ19VU0Vf
Q09DT0EpCi0gICAgLy8gT24gTWFjLCBvZmZzZXQgdGhlIHNjcm9sbGJhcnMgc28gdGhleSBkb24n
dCBjb3ZlciB0aGUgZ3JvdyBib3guIENoZWNrIGlmIHRoZSB3aW5kb3cgCi0gICAgLy8gaGFzIGEg
Z3JvdyBib3gsIGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBib3R0b20tcmlnaHQgY29ybmVyIG9mIHRo
ZSBzY3JvbGwgdmlldyAKLSAgICAvLyBpbnRlcnNlcmN0cyBpdC4gVGhlIGNhbGN1bGF0aW9ucyBh
cmUgZG9uZSBpbiBnbG9iYWwgY29vcmRpbmF0ZXMuCi0gICAgUVdpZGdldCogY29udGVudFdpZGdl
dCA9IGNvbnRhaW5pbmdXaW5kb3coKTsKLSAgICBpZiAoY29udGVudFdpZGdldCkgewotICAgICAg
ICBRV2lkZ2V0KiB3aW5kb3dXaWRnZXQgPSBjb250ZW50V2lkZ2V0LT53aW5kb3coKTsKLSAgICAg
ICAgaWYgKHdpbmRvd1dpZGdldCkgewotICAgICAgICAgICAgSElWaWV3UmVmIGdyb3dCb3ggPSAw
OwotICAgICAgICAgICAgSElWaWV3RmluZEJ5SUQoSElWaWV3R2V0Um9vdChISVZpZXdHZXRXaW5k
b3coSElWaWV3UmVmKGNvbnRlbnRXaWRnZXQtPndpbklkKCkpKSksIGtISVZpZXdXaW5kb3dHcm93
Qm94SUQsICZncm93Qm94KTsKLSAgICAgICAgICAgIGNvbnN0IFFQb2ludCBjb250ZW50QnIgPSBj
b250ZW50V2lkZ2V0LT5tYXBUb0dsb2JhbChRUG9pbnQoMCwwKSkgKyBjb250ZW50V2lkZ2V0LT5z
aXplKCk7Ci0gICAgICAgICAgICBjb25zdCBRUG9pbnQgd2luZG93QnIgPSB3aW5kb3dXaWRnZXQt
Pm1hcFRvR2xvYmFsKFFQb2ludCgwLDApKSArIHdpbmRvd1dpZGdldC0+c2l6ZSgpOwotICAgICAg
ICAgICAgY29uc3QgUVBvaW50IGNvbnRlbnRPZmZzZXQgPSAod2luZG93QnIgLSBjb250ZW50QnIp
OwotICAgICAgICAgICAgY29uc3QgaW50IGdyb3dCb3hTaXplID0gMTU7Ci0gICAgICAgICAgICBj
b25zdCBib29sIGVuYWJsZU9mZnNldCA9IChncm93Qm94ICE9IDAgJiYgY29udGVudE9mZnNldC54
KCkgPj0gMCAmJiBjb250ZW50T2Zmc2V0LiB5KCkgPj0gMCk7Ci0gICAgICAgICAgICBzY3JvbGxi
YXJPZmZzZXQgPSBlbmFibGVPZmZzZXQgPyBRUG9pbnQoZ3Jvd0JveFNpemUgLSBxTWluKGNvbnRl
bnRPZmZzZXQueCgpLCBncm93Qm94U2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3Jvd0JveFNpemUgLSBxTWluKGNvbnRlbnRPZmZzZXQu
eSgpLCBncm93Qm94U2l6ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBRUG9pbnQoMCwwKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYg
KG1faG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgY2xpZW50V2lkdGggPSB2aXNp
YmxlV2lkdGgoKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRFbmFibGVkKGNv
bnRlbnRzV2lkdGgoKSA+IGNsaWVudFdpZHRoKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNs
aWVudFdpZHRoIC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOwotICAgICAgICBpZiAocGFnZVN0
ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdpZHRoOwotICAgICAgICBJbnRSZWN0IG9sZFJlY3Qo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7Ci0gICAgICAgIEludFJlY3QgaEJh
clJlY3QgPSBJbnRSZWN0KDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
aWdodCgpIC0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIChtX3ZlcnRpY2FsU2Nyb2xsYmFyID8gbV92
ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSA6IHNjcm9sbGJhck9mZnNldC54KCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdo
dCgpKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoaEJhclJl
Y3QpOwotICAgICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBt
X2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKQotICAgICAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1
cHByZXNzZWQpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNz
SW52YWxpZGF0aW9uKHRydWUpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0
ZXBzKGNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcCwgcGFnZVN0ZXApOwotICAgICAgICBtX2hv
cml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lk
dGgoKSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndp
ZHRoKCkpOwotICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKLSAgICAgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOyAK
LSAgICB9IAotCi0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaW50IGNs
aWVudEhlaWdodCA9IHZpc2libGVIZWlnaHQoKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2V0RW5hYmxlZChjb250ZW50c0hlaWdodCgpID4gY2xpZW50SGVpZ2h0KTsKLSAgICAgICAg
aW50IHBhZ2VTdGVwID0gKGNsaWVudEhlaWdodCAtIGNBbW91bnRUb0tlZXBXaGVuUGFnaW5nKTsK
LSAgICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRIZWlnaHQ7Ci0gICAg
ICAgIEludFJlY3Qgb2xkUmVjdChtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7Ci0g
ICAgICAgIEludFJlY3QgdkJhclJlY3QgPSBJbnRSZWN0KHdpZHRoKCkgLSBtX3ZlcnRpY2FsU2Ny
b2xsYmFyLT53aWR0aCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAo
bV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5oZWlnaHQoKSA6
IHNjcm9sbGJhck9mZnNldC55KCkpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0
RnJhbWVSZWN0KHZCYXJSZWN0KTsKLSAgICAgICAgaWYgKCFtX3Njcm9sbGJhcnNTdXBwcmVzc2Vk
ICYmIG9sZFJlY3QgIT0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCi0gICAgICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKG1f
c2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0gICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2V0U3RlcHMoY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7Ci0gICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250
ZW50c0hlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Ny
b2xsLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0gICAg
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxz
ZSk7Ci0gICAgfQotCi0gICAgaWYgKG9sZEhhc1ZlcnRpY2FsICE9IChtX3ZlcnRpY2FsU2Nyb2xs
YmFyICE9IDApIHx8IG9sZEhhc0hvcml6b250YWwgIT0gKG1faG9yaXpvbnRhbFNjcm9sbGJhciAh
PSAwKSkKLSAgICAgICAgZnJhbWVSZWN0c0NoYW5nZWQoKTsKLQotICAgIC8vIFNlZSBpZiBvdXIg
b2Zmc2V0IGhhcyBjaGFuZ2VkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG1pZ2h0IG5vdCBoYXZl
IHNjcm9sbGJhcnMuCi0gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZWRpdGluZyBhIGJvZHkg
d2l0aCBvdmVyZmxvdzpoaWRkZW4gYW5kIHNjcm9sbGluZyB0byByZXZlYWwgc2VsZWN0aW9uLgot
ICAgIC8vIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVuIG1heGltaXppbmcgYSB3aW5kb3cgdGhhdCBo
YXMgc2Nyb2xsYmFycyAoYnV0IHRoZSBuZXcgbWF4aW1pemVkIHJlc3VsdAotICAgIC8vIGRvZXMg
bm90KS4KLSAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gc2Nyb2xsIC0gbV9zY3JvbGxPZmZzZXQ7
Ci0gICAgaWYgKHNjcm9sbERlbHRhICE9IEludFNpemUoKSkgewotICAgICAgIG1fc2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsOwotICAgICAgIG1fZGF0YS0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERl
bHRhKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEtPm1faW5VcGRhdGVTY3JvbGxiYXJzID0gZmFsc2U7
CisgICAgbV9kYXRhLT5zY3JvbGxCYWNraW5nU3RvcmUoc2l6ZSk7CiB9CiAKIHZvaWQgU2Nyb2xs
Vmlldzo6cGxhdGZvcm1BZGRDaGlsZChXaWRnZXQqIGNoaWxkKQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShyZXZpc2lvbiAzNzE0OCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NCw3ICs1ODQsNyBA
QCB2b2lkIFBvcHVwTWVudTo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogCiAgICAgOjpVcGRhdGVX
aW5kb3cobV9wb3B1cCk7CiB9CiAKLUludFJlY3QgUG9wdXBNZW51Ojp3aW5kb3dDbGlwUmVjdCgp
IGNvbnN0CitJbnRSZWN0IFBvcHVwTWVudTo6d2luZG93Q2xpcFJlY3QoU2Nyb2xsYmFyKikgY29u
c3QKIHsKICAgICByZXR1cm4gbV93aW5kb3dSZWN0OwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS93aW4vU2Nyb2xsVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
aW4vU2Nyb2xsVmlld1dpbi5jcHAJKHJldmlzaW9uIDM3MTc5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS93aW4vU2Nyb2xsVmlld1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDgxICs1NCwyMCBA
QCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNj
cm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlIDogcHVibGljIFNjcm9sbGJhckNsaWVudCB7Citj
bGFzcyBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgU2Nyb2xs
Vmlld1ByaXZhdGUoU2Nyb2xsVmlldyogdmlldykKICAgICAgICAgOiBtX3ZpZXcodmlldykKLSAg
ICAgICAgLCBtX2luVXBkYXRlU2Nyb2xsYmFycyhmYWxzZSkKICAgICB7CiAgICAgfQogCi0gICAg
flNjcm9sbFZpZXdQcml2YXRlKCkKLSAgICB7Ci0gICAgICAgIHNldEhhc0hvcml6b250YWxTY3Jv
bGxiYXIoZmFsc2UpOwotICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKTsK
LSAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKTsKLQotICAgIHZp
cnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBJbnRSZWN0
IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29u
c3Q7Ci0KICAgICB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSk7CiAKLQogICAgIFNjcm9sbFZpZXcqIG1fdmlldzsKLSAgICBib29sIG1faW5VcGRhdGVT
Y3JvbGxiYXJzOwotICAgIEhSR04gbV9kaXJ0eVJlZ2lvbjsKIH07CiAKIGNvbnN0IGludCBwYW5J
Y29uU2l6ZUxlbmd0aCA9IDIwOwogCi12b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRl
OjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKQotewotICAgIGlmIChoYXNC
YXIgJiYgIW1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdmlldy0+
bV9ob3Jpem9udGFsU2Nyb2xsYmFyID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIo
dGhpcywgSG9yaXpvbnRhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJhcik7Ci0gICAgICAgIG1f
dmlldy0+YWRkQ2hpbGQobV92aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCkpOwotICAg
IH0gZWxzZSBpZiAoIWhhc0JhciAmJiBtX3ZpZXctPm1faG9yaXpvbnRhbFNjcm9sbGJhcikgewot
ICAgICAgICBtX3ZpZXctPnJlbW92ZUNoaWxkKG1fdmlldy0+bV9ob3Jpem9udGFsU2Nyb2xsYmFy
LmdldCgpKTsKLSAgICAgICAgbV92aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIgPSAwOwotICAg
IH0KLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCi17Ci0gICAgaWYgKGhhc0JhciAmJiAhbV92aWV3LT5t
X3ZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdmlldy0+bV92ZXJ0aWNhbFNjcm9sbGJh
ciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xs
YmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICAgICAgbV92aWV3LT5hZGRDaGlsZChtX3ZpZXct
Pm1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCkpOwotICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiBt
X3ZpZXctPm1fdmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92aWV3LT5yZW1vdmVDaGls
ZChtX3ZpZXctPm1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCkpOwotICAgICAgICBtX3ZpZXctPm1f
dmVydGljYWxTY3JvbGxiYXIgPSAwOwotICAgIH0KLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3UHJpdmF0ZTo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogYmFyKQotewotICAgIC8vIEZp
Z3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgotICAgIEludFNpemUgbmV3T2Zmc2V0ID0gbV92
aWV3LT5tX3Njcm9sbE9mZnNldDsKLSAgICBpZiAoYmFyKSB7Ci0gICAgICAgIGlmIChiYXIgPT0g
bV92aWV3LT5tX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0
V2lkdGgoYmFyLT52YWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAoYmFyID09IG1fdmlldy0+bV92
ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRIZWlnaHQoYmFyLT52
YWx1ZSgpKTsKLSAgICB9Ci0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IG5ld09mZnNldCAtIG1f
dmlldy0+bV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fdmlldy0+bV9zY3JvbGxPZmZzZXQgPSBuZXdPZmZzZXQ7
Ci0KLSAgICBpZiAobV92aWV3LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3ZpZXcpLT5mcmFtZSgpLT5zZW5k
U2Nyb2xsRXZlbnQoKTsKLSAgICBzY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOwotfQot
CiB2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUo
Y29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCiB7CiAgICAgLy8gU2luY2Ugc2Nyb2xsaW5nIGlz
IGRvdWJsZSBidWZmZXJlZCwgd2Ugd2lsbCBiZSBibGl0dGluZyB0aGUgc2Nyb2xsIHZpZXcncyBp
bnRlcnNlY3Rpb24KQEAgLTE2NywxNyArMTA2LDYgQEAgdm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxW
aWV3UHJpdmF0ZTo6c2NybwogICAgIDo6VXBkYXRlV2luZG93KGNvbnRhaW5pbmdXaW5kb3dIYW5k
bGUpOwogfQogCi1JbnRSZWN0IFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp3aW5kb3dD
bGlwUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmll
dyo+KG1fdmlldyktPndpbmRvd0NsaXBSZWN0KGZhbHNlKTsKLX0KLQotYm9vbCBTY3JvbGxWaWV3
OjpTY3JvbGxWaWV3UHJpdmF0ZTo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIFBhZ2UqIHBhZ2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPihtX3ZpZXcpLT5mcmFtZSgpLT5wYWdlKCk7
Ci0gICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7
Ci19Ci0KIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKQogICAgIDogbV9kYXRhKG5ldyBTY3JvbGxW
aWV3UHJpdmF0ZSh0aGlzKSkKIHsKQEAgLTE4Niw2ICsxMTQsNyBAQCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3KCkKIAogU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQogeworICAgIGRlc3Ryb3koKTsK
ICAgICBkZWxldGUgbV9kYXRhOwogfQogCkBAIC0yMTEsMTI3ICsxNDAsNiBAQCB2b2lkIFNjcm9s
bFZpZXc6OnVwZGF0ZVdpbmRvd1JlY3QoY29uc3QgCiAgICAgICAgIDo6VXBkYXRlV2luZG93KGNv
bnRhaW5pbmdXaW5kb3dIYW5kbGUpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9s
bGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKLXsKLSAgICAvLyBEb24ndCBhbGxv
dyByZS1lbnRyYW5jeSBpbnRvIHRoaXMgZnVuY3Rpb24uCi0gICAgaWYgKG1fZGF0YS0+bV9pblVw
ZGF0ZVNjcm9sbGJhcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcm9oaWJpdHNTY3Jv
bGxpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5tX2luVXBkYXRlU2Nyb2xs
YmFycyA9IHRydWU7Ci0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0gbV92ZXJ0aWNh
bFNjcm9sbGJhcjsKLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBtX2hvcml6b250
YWxTY3JvbGxiYXI7Ci0gICAgYm9vbCBvbGRIYXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyOwotICAgIGJvb2wgb2xkSGFzSG9yaXpvbnRhbCA9IGhhc0hvcml6b250YWxTY3JvbGxiYXI7
Ci0gICAgU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZTsK
LSAgICBTY3JvbGxiYXJNb2RlIHZTY3JvbGwgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKLQot
ICAgIGNvbnN0IGludCBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZl
VGhlbWUoKS0+c2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0KLSAgICBmb3IgKGludCBwYXNzID0gMDsg
cGFzcyA8IDI7IHBhc3MrKykgewotICAgICAgICBib29sIHNjcm9sbHNWZXJ0aWNhbGx5OwotICAg
ICAgICBib29sIHNjcm9sbHNIb3Jpem9udGFsbHk7Ci0KLSAgICAgICAgaWYgKCFtX3Njcm9sbGJh
cnNTdXBwcmVzc2VkICYmIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gfHwgdlNjcm9sbCA9PSBT
Y3JvbGxiYXJBdXRvKSkgewotICAgICAgICAgICAgLy8gRG8gYSBsYXlvdXQgaWYgcGVuZGluZyBi
ZWZvcmUgY2hlY2tpbmcgaWYgc2Nyb2xsYmFycyBhcmUgbmVlZGVkLgotICAgICAgICAgICAgaWYg
KGhhc1ZlcnRpY2FsU2Nyb2xsYmFyICE9IG9sZEhhc1ZlcnRpY2FsIHx8IGhhc0hvcml6b250YWxT
Y3JvbGxiYXIgIT0gb2xkSGFzSG9yaXpvbnRhbCkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPih0aGlzKS0+bGF5b3V0KCk7Ci0KLSAgICAgICAgICAgIHNjcm9sbHNWZXJ0
aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNj
cm9sbGJhckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKLSAgICAgICAgICAg
IGlmIChzY3JvbGxzVmVydGljYWxseSkKLSAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRh
bGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9s
bGJhckF1dG8gJiYgY29udGVudHNXaWR0aCgpICsgc2Nyb2xsYmFyVGhpY2tuZXNzID4gd2lkdGgo
KSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRh
bGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9s
bGJhckF1dG8gJiYgY29udGVudHNXaWR0aCgpID4gd2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKHNjcm9sbHNIb3Jpem9udGFsbHkpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbHNWZXJ0
aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNj
cm9sbGJhckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSArIHNjcm9sbGJhclRoaWNrbmVzcyA+IGhl
aWdodCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/
IGhhc0hvcml6b250YWxTY3JvbGxiYXIgOiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbik7
Ci0gICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1
dG8pID8gaGFzVmVydGljYWxTY3JvbGxiYXIgOiAodlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNP
bik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChoYXNWZXJ0aWNhbFNjcm9sbGJh
ciAhPSBzY3JvbGxzVmVydGljYWxseSkgewotICAgICAgICAgICAgbV9kYXRhLT5zZXRIYXNWZXJ0
aWNhbFNjcm9sbGJhcihzY3JvbGxzVmVydGljYWxseSk7Ci0gICAgICAgICAgICBoYXNWZXJ0aWNh
bFNjcm9sbGJhciA9IHNjcm9sbHNWZXJ0aWNhbGx5OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGhhc0hvcml6b250YWxTY3JvbGxiYXIgIT0gc2Nyb2xsc0hvcml6b250YWxseSkgewotICAgICAg
ICAgICAgbV9kYXRhLT5zZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbHNIb3Jpem9udGFs
bHkpOwotICAgICAgICAgICAgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbHNIb3Jpem9u
dGFsbHk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gU2V0IHVwIHRoZSByYW5nZSAo
YW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIEludFNpemUgbWF4U2Nyb2xsUG9zaXRpb24o
Y29udGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCksIGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNp
YmxlSGVpZ2h0KCkpOwotICAgIEludFNpemUgc2Nyb2xsID0gZGVzaXJlZE9mZnNldC5zaHJ1bmtU
byhtYXhTY3JvbGxQb3NpdGlvbik7Ci0gICAgc2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsK
LSAKLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRX
aWR0aCA9IHZpc2libGVXaWR0aCgpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNl
dEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOwotICAgICAgICBpbnQgcGFn
ZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBjQW1vdW50VG9LZWVwV2hlblBhZ2luZyk7Ci0gICAgICAg
IGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50V2lkdGg7Ci0gICAgICAgIEludFJl
Y3Qgb2xkUmVjdChtX2hvcml6b250YWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKLSAgICAgICAg
SW50UmVjdCBoQmFyUmVjdCA9IEludFJlY3QoMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gKG1fdmVydGljYWxTY3Jv
bGxiYXIgPyBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpIDogMCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwot
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChoQmFyUmVjdCk7Ci0g
ICAgICAgIGlmICghbV9zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1faG9yaXpv
bnRhbFNjcm9sbGJhci0+ZnJhbWVSZWN0KCkpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3Jv
bGxiYXItPmludmFsaWRhdGUoKTsKLQotICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3Nl
ZCkKLSAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlk
YXRpb24odHJ1ZSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoY1Nj
cm9sbGJhclBpeGVsc1BlckxpbmVTdGVwLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsK
LSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7
Ci0gICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQotICAgICAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7IAotICAgIH0g
Ci0KLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBpbnQgY2xpZW50SGVp
Z2h0ID0gdmlzaWJsZUhlaWdodCgpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRF
bmFibGVkKGNvbnRlbnRzSGVpZ2h0KCkgPiBjbGllbnRIZWlnaHQpOwotICAgICAgICBpbnQgcGFn
ZVN0ZXAgPSAoY2xpZW50SGVpZ2h0IC0gY0Ftb3VudFRvS2VlcFdoZW5QYWdpbmcpOwotICAgICAg
ICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKLSAgICAgICAgSW50
UmVjdCBvbGRSZWN0KG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpKTsKLSAgICAgICAg
SW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fdmVydGljYWxTY3JvbGxiYXIt
PndpZHRoKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2hvcml6
b250YWxTY3JvbGxiYXIgPyBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpIDogMCkpOwot
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QodkJhclJlY3QpOwotICAg
ICAgICBpZiAoIW1fc2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBtX3ZlcnRpY2Fs
U2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSkKLSAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXIt
PmludmFsaWRhdGUoKTsKLQotICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKLSAg
ICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRy
dWUpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhjU2Nyb2xsYmFyUGl4
ZWxzUGVyTGluZVN0ZXAsIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+
c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwotICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOwotICAgICAgICBp
ZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKLSAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxi
YXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAob2xk
SGFzVmVydGljYWwgIT0gKG1fdmVydGljYWxTY3JvbGxiYXIgIT0gMCkgfHwgb2xkSGFzSG9yaXpv
bnRhbCAhPSAobV9ob3Jpem9udGFsU2Nyb2xsYmFyICE9IDApKQotICAgICAgICBmcmFtZVJlY3Rz
Q2hhbmdlZCgpOwotCi0gICAgLy8gU2VlIGlmIG91ciBvZmZzZXQgaGFzIGNoYW5nZWQgaW4gYSBz
aXR1YXRpb24gd2hlcmUgd2UgbWlnaHQgbm90IGhhdmUgc2Nyb2xsYmFycy4KLSAgICAvLyBUaGlz
IGNhbiBoYXBwZW4gd2hlbiBlZGl0aW5nIGEgYm9keSB3aXRoIG92ZXJmbG93OmhpZGRlbiBhbmQg
c2Nyb2xsaW5nIHRvIHJldmVhbCBzZWxlY3Rpb24uCi0gICAgLy8gSXQgY2FuIGFsc28gaGFwcGVu
IHdoZW4gbWF4aW1pemluZyBhIHdpbmRvdyB0aGF0IGhhcyBzY3JvbGxiYXJzIChidXQgdGhlIG5l
dyBtYXhpbWl6ZWQgcmVzdWx0Ci0gICAgLy8gZG9lcyBub3QpLgotICAgIEludFNpemUgc2Nyb2xs
RGVsdGEgPSBzY3JvbGwgLSBtX3Njcm9sbE9mZnNldDsKLSAgICBpZiAoc2Nyb2xsRGVsdGEgIT0g
SW50U2l6ZSgpKSB7Ci0gICAgICAgbV9zY3JvbGxPZmZzZXQgPSBzY3JvbGw7Ci0gICAgICAgbV9k
YXRhLT5zY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOwotICAgIH0KLQotICAgIG1fZGF0
YS0+bV9pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBTY3JvbGxWaWV3Ojpw
cmludFBhblNjcm9sbEljb24oY29uc3QgSW50UG9pbnQmIGljb25Qb3NpdGlvbikKIHsKICAgICBt
X2RyYXdQYW5TY3JvbGxJY29uID0gdHJ1ZTsgICAgCkBAIC0zNTQsNiArMTYyLDExIEBAIHZvaWQg
U2Nyb2xsVmlldzo6dGhlbWVDaGFuZ2VkKCkKICAgICBpbnZhbGlkYXRlKCk7CiB9CiAKK3ZvaWQg
U2Nyb2xsVmlldzo6c2Nyb2xsQ29udGVudHMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBt
X2RhdGEtPnNjcm9sbEJhY2tpbmdTdG9yZShzaXplKTsKK30KKwogdm9pZCBTY3JvbGxWaWV3Ojph
ZGRUb0RpcnR5UmVnaW9uKGNvbnN0IEludFJlY3QmIGNvbnRhaW5pbmdXaW5kb3dSZWN0KQogewog
ICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvU2Ny
b2xsVmlld1d4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbFZp
ZXdXeC5jcHAJKHJldmlzaW9uIDM3MTU2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxW
aWV3V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDcgQEAgdm9pZCBTY3JvbGxW
aWV3OjpzZXRQbGF0Zm9ybVdpZGdldCh3eFdpbgogCiBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygp
CiB7CisgICAgZGVzdHJveSgpOwogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDM3MTQ4KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDkyLDcgKzEwOTIsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyCiAgICAgICAgIHNjcm9sbFRv
T2Zmc2V0KG5ld1gsIG5ld1ksIGZhbHNlKTsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXllcjo6d2lu
ZG93Q2xpcFJlY3QoKSBjb25zdAorSW50UmVjdCBSZW5kZXJMYXllcjo6d2luZG93Q2xpcFJlY3Qo
Y29uc3QgU2Nyb2xsYmFyKikgY29uc3QKIHsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gcmVuZGVy
ZXIoKS0+dmlldygpOwogICAgIEFTU0VSVCh2aWV3KTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAkocmV2aXNpb24gMzcxNDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNyArMzQ5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHNo
b3VsZEJlT3ZlcmZsb3dPbmx5KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNv
bnN0OworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdChjb25zdCBTY3JvbGxiYXIq
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKIAogICAgIHZvaWQg
dXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGlj
YWxPdmVyZmxvdyk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNp
b24gMzcxNDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDExLDcgKzQxMSw4IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFuU2Nyb2xs
KGNvbnN0IEludFAKICAgICBjb25zdCBpbnQgaWNvblJhZGl1cyA9IDc7CiAgICAgY29uc3QgaW50
IHNwZWVkUmVkdWNlciA9IDQ7CiAKLSAgICBpbnQgb2Zmc2V0WCA9IDAsIG9mZnNldFkgPSB3aW5k
b3dDbGlwUmVjdCgpLnkoKTsKKyAgICBpbnQgb2Zmc2V0WDsKKyAgICBpbnQgb2Zmc2V0WTsKICAg
ICBhYnNvbHV0ZVBvc2l0aW9uKG9mZnNldFgsIG9mZnNldFkpOwogCiAgICAgSW50UG9pbnQgY3Vy
cmVudE1vdXNlUG9zaXRpb24gPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
Y3VycmVudE1vdXNlUG9zaXRpb24oKTsKQEAgLTU5NSw3ICs1OTYsNyBAQCBJbnRSZWN0IFJlbmRl
ckxpc3RCb3g6OmNvbnRyb2xDbGlwUmVjdChpCiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCi1J
bnRSZWN0IFJlbmRlckxpc3RCb3g6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKK0ludFJlY3QgUmVu
ZGVyTGlzdEJveDo6d2luZG93Q2xpcFJlY3QoY29uc3QgU2Nyb2xsYmFyKikgY29uc3QKIHsKICAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHZpZXcoKS0+ZnJhbWVWaWV3KCk7CiAgICAgaWYgKCFm
cmFtZVZpZXcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiAzNzE0
OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpA
QCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIC8vIFNjcm9sbGJhckNsaWVu
dCBpbnRlcmZhY2UuCiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsK
LSAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEludFJlY3Qgd2luZG93Q2xpcFJlY3QoY29uc3QgU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAKICAgICBpbnQgaXRlbUhlaWdodCgpIGNvbnN0
OwpJbmRleDogV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDM3MTgzKQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAwOC0xMC0wMSAgRGF2aWQgSHlhdHQgIDxoeWF0
dEBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMjk4CisgICAgICAgIAorICAgICAgICBNYWtlIHVwZGF0ZVNjcm9sbGJhcnMgY3Jv
c3MtcGxhdGZvcm0uICBGb3Igbm93IGEgc3R1YmJlZCBvdXQgc2Nyb2xsQ29udGVudHMgZnVuY3Rp
b24gaXMgaW52b2tlZCB0byBkbyB0aGUgc2Nyb2xsaW5nIG9mIHRoZSBiYWNraW5nIHN0b3JlLiAg
TmV4dCBwYXRjaAorICAgICAgICB3aWxsIG1ha2UgdGhhdCBjcm9zcy1wbGF0Zm9ybS4gIAorICAg
ICAgICAKKyAgICAgICAgVGhlIFNjcm9sbFZpZXcgbm93IGltcGxlbWVudCBTY3JvbGxiYXJDbGll
bnQsIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgd2FzIGEgY2xhc2ggb2Ygd2luZG93Q2xpcFJlY3Qg
bWV0aG9kcyBmcm9tIHRoZQorICAgICAgICBtdWx0aXBsZSBpbmhlcml0YW5jZS4gIEZvciBub3cg
SSBzb2x2ZWQgdGhpcyBieSBhZGRpbmcgYSBTY3JvbGxiYXIqIHRvIHRoZSBTY3JvbGxiYXJDbGll
bnQgdmVyc2lvbiBvZiB0aGUgbWV0aG9kLCBidXQgbG9uZ2VyIHRlcm0KKyAgICAgICAgd2luZG93
Q2xpcFJlY3QgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmcm9tIFNjcm9sbGJhckNsaWVudCAod2hl
biBXaWRnZXQgaW52YWxpZGF0aW9uIGdldHMgcmV3cml0dGVuKS4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlNjcm9sbEJhci5jcHA6CisgICAg
ICAgIChXZWJTY3JvbGxCYXI6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKiBXZWJTY3JvbGxC
YXIuaDoKKwogMjAwOC0xMC0wMSAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAgICAg
ICAgIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEy
ODIKSW5kZXg6IFdlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvd2luL1dlYlNjcm9sbEJhci5jcHAJKHJldmlzaW9uIDM3MTQ4KQorKysgV2ViS2l0L3dpbi9X
ZWJTY3JvbGxCYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBX
ZWJTY3JvbGxCYXI6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYQogICAgIG1fZGVsZWdhdGUtPnZhbHVl
Q2hhbmdlZCh0aGlzKTsKIH0KIAotSW50UmVjdCBXZWJTY3JvbGxCYXI6OndpbmRvd0NsaXBSZWN0
KCkgY29uc3QKK0ludFJlY3QgV2ViU2Nyb2xsQmFyOjp3aW5kb3dDbGlwUmVjdChTY3JvbGxiYXIq
KSBjb25zdAogewogICAgIEhXTkQgc2JDb250YWluaW5nV2luZG93ID0gbV9zY3JvbGxCYXItPmNv
bnRhaW5pbmdXaW5kb3coKTsKICAgICBSRUNUIGNsaWVudFJlY3Q7CkluZGV4OiBXZWJLaXQvd2lu
L1dlYlNjcm9sbEJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmgJ
KHJldmlzaW9uIDM3MTQ4KQorKysgV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICAvLyBTY3Jv
bGxiYXJDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwot
ICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwg
SW50UmVjdCB3aW5kb3dDbGlwUmVjdChTY3JvbGxiYXIqKSBjb25zdDsKIAogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcHJvdmlkZSBhIHdheSB0byBzZXQgdGhpcyB2YWx1ZS4KICAgICB2aXJ0dWFs
IGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cg==
</data>
<flag name="review"
          id="10856"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>