<?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>37204</bug_id>
          
          <creation_ts>2010-04-07 05:37:24 -0700</creation_ts>
          <short_desc>RenderThemeChromiumMac.mm should share code with RenderThemeMac.mm</short_desc>
          <delta_ts>2010-05-09 17:44:49 -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>PC</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>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>37309</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>tkent</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>209584</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-04-07 05:37:24 -0700</bug_when>
    <thetext>RenderThemeChromiumMac.mm/h is almost a clone of RnederThemeMac.mm/h with difference of few tens of lines.
So RenderThemeChromiumMac should share the codebase with RenderThemeMac instead of copying it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209592</commentid>
    <comment_count>1</comment_count>
      <attachid>52732</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-04-07 05:55:57 -0700</bug_when>
    <thetext>Created attachment 52732
patch v0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209597</commentid>
    <comment_count>2</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-04-07 06:07:53 -0700</bug_when>
    <thetext>Another idea would be extracting base class for both RenderThemeMac and RenderThemeChromiumMac.
But it feels overdone for me because RenderThemeChromiumMac is essentially patched RenderThemeMac.

RenderThemeMac.mm and RenderThemeChromium.mm mac become included 
Chromium mac build, so this change enclose some Mac Webkit specific mehods into 
PLATFORM(MAC) ifdefs. But even with that,
it looks better than extracting something like RenderThemeMacBase, thanks for smaller the size of change.

It might be massy to have chromium-aware hooks for RenderThemeMac. 
But having copy-n-pasted clone should be worse. 
It would be happy to remove large code duplication in return for small hooks like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210056</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-08 00:48:41 -0700</bug_when>
    <thetext>Removed [Chromium] from the summary because the patch modifies non-Chromium code too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210886</commentid>
    <comment_count>4</comment_count>
      <attachid>52732</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 13:36:24 -0700</bug_when>
    <thetext>Comment on attachment 52732
patch v0

OK.  This is WAY better than what we have now.  The only worry I have is burned on the Mac folks and/or regressions to the Mac code.

In general I think this looks great.

I think the new methods you&apos;re adding to RenderThemeMac.h should be commented/documented in the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210907</commentid>
    <comment_count>5</comment_count>
      <attachid>52732</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-09 14:01:09 -0700</bug_when>
    <thetext>Comment on attachment 52732
patch v0

This guard seems unecessary:
60 #if PLATFORM(CHROMIUM)
15961 PassRefPtr&lt;RenderTheme&gt; RenderTheme::themeForPage(Page*)
16062 {
I&apos;m ready to r+ this with additional comments in the header explaining the new methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211109</commentid>
    <comment_count>6</comment_count>
      <attachid>53031</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-04-09 22:24:17 -0700</bug_when>
    <thetext>Created attachment 53031
took feedbacks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211110</commentid>
    <comment_count>7</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-04-09 22:29:26 -0700</bug_when>
    <thetext>Hi Eric, Thank you for reviewing!

&gt; OK.  This is WAY better than what we have now.  The only worry I have is burned
&gt; on the Mac folks and/or regressions to the Mac code.
I agree your concern. 
Fortunately changes on RenderThemeMac.mm is small and is (or should be) trivial -
It just added empty hooks, extract a part of code blocks to methods.
I hope these changes would be acceptable...

&gt; I think the new methods you&apos;re adding to RenderThemeMac.h should be
&gt; commented/documented in the header.
Added comments to explain their purpose.

&gt;This guard seems unecessary:
&gt;60 #if PLATFORM(CHROMIUM)
&gt;15961 PassRefPtr&lt;RenderTheme&gt; RenderTheme::themeForPage(Page*)
&gt;16062 {
Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222172</commentid>
    <comment_count>8</comment_count>
      <attachid>53031</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-06 22:31:54 -0700</bug_when>
    <thetext>Comment on attachment 53031
took feedbacks

LGTM.  Please be careful to update to tip of tree before landing.  There were likely changes to RenderThemeMac while this was out for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222291</commentid>
    <comment_count>9</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-05-07 05:31:37 -0700</bug_when>
    <thetext>Committed r58943: &lt;http://trac.webkit.org/changeset/58943&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52732</attachid>
            <date>2010-04-07 05:55:57 -0700</date>
            <delta_ts>2010-04-09 22:24:11 -0700</delta_ts>
            <desc>patch v0</desc>
            <filename>bug-37204-20100407215555.patch</filename>
            <type>text/plain</type>
            <size>85099</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGQxN2IwYy4uNGU2NDMxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxMC0wNC0wNyAgTU9SSVRBIEhhamlt
ZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0gc2hv
dWxkIHNoYXJlIGNvZGUgd2l0aCBSZW5kZXJUaGVtZU1hYy5tbQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcyMDQKKworICAgICAgICBNYWRlIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWMgc3ViY2xhc3Mgb2YgUmVuZGVyVGhlbWVNYWMsIGluc3RlYWQgb2Yg
UmVuZGVyVGhlbWUuCisgICAgICAgIEFkZGVkIHNvbWUgbWV0aG9kIHRvIFJlbmRlclRoZW1lTWFj
IGZvciBvdmVycmlkaW5nIG9uIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMuCisgICAgICAgIAorICAg
ICAgICBObyBuZXcgdGVzdHM7IFNob3VsZCBoYXZlIG5vIGJlaGF2aW91cmFsIGNoYW5nZS4KKwor
ICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtTWFjLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFj
Ojp1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpkb2N1bWVudFZpZXdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQWN0aXZlU3Rh
dGUpOiBBZGRlZCBmb3Igb3ZlcnJpZGUKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXNlc1Rlc3RNb2RlRm9j
dXNSaW5nQ29sb3IpOiBBZGRlZCBmb3Igb3ZlcnJpZGluZworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OmRvY3VtZW50Vmlld0Zvcik6IEFkZGVkIGZvciBvdmVycmlkaW5nCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjph
ZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZSk6IEFkZGVkIGZvciBvdmVycmlkaW5nCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6
ICAgICAgICAKKwogMjAxMC0wNC0wNiAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmlhbiBMaS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
CmluZGV4IGMxYTU2MGIuLjNkNjJiMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtOTkx
LDYgKzk5MSw3IEBACiAgICAgICAgICAgICAjIENoZXJyeS1waWNrIHNvbWUgZmlsZXMgdGhhdCBj
YW4ndCBiZSBpbmNsdWRlZCBieSBicm9hZGVyIHJlZ2V4cHMuCiAgICAgICAgICAgICAjIFNvbWUg
b2YgdGhlc2UgYXJlIHVzZWQgaW5zdGVhZCBvZiBDaHJvbWl1bSBwbGF0Zm9ybSBmaWxlcywgc2Vl
CiAgICAgICAgICAgICAjIHRoZSBzcGVjaWZpYyBleGNsdXNpb25zIGluIHRoZSAic291cmNlcyEi
IGxpc3QgYmVsb3cuCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnbG9hZGVyL2FyY2hpdmUv
Y2YvTGVnYWN5V2ViQXJjaGl2ZVxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5j
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hY1xcLm1tJCddLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCmluZGV4IDgxMDEwMzguLmFh
YWFkZTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1N
YWMuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgKQEAg
LTI0LDE3MyArMjQsMzIgQEAKICNpZm5kZWYgUmVuZGVyVGhlbWVDaHJvbWl1bU1hY19oCiAjZGVm
aW5lIFJlbmRlclRoZW1lQ2hyb21pdW1NYWNfaAogCi0jaW1wb3J0ICJSZW5kZXJUaGVtZS5oIgot
I2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lm
ZGVmIF9fT0JKQ19fCi1AY2xhc3MgV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2
ZXI7Ci0jZWxzZQotY2xhc3MgV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXI7
Ci0jZW5kaWYKLQotLy8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlz
IGEgY2xvbmUgb2YgUmVuZGVyVGhlbWVNYWMuaC4gU2VlCi0vLyB0aGUgLm1tIGZpbGUgZm9yIGRl
dGFpbHMuCisjaW1wb3J0ICJSZW5kZXJUaGVtZU1hYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFJlbmRlclN0eWxlOwotCi1jbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtTWFjIDog
cHVibGljIFJlbmRlclRoZW1lIHsKK2NsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMgOiBwdWJs
aWMgUmVuZGVyVGhlbWVNYWMgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRl
clRoZW1lPiBjcmVhdGUoKTsKLQotICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJv
bCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgotICAg
IHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBj
b25zdDsKLQotICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRp
bnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250
cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOwotCi0gICAgdmly
dHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRl
ckRhdGEmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVy
JiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9s
bGJhckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gU21hbGxTY3JvbGxi
YXI7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsK
LQotICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQg
Y3NzVmFsdWVJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBt
aW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgIAotICAg
IHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJT
dHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9t
KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xv
Y2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKGludCBj
c3NWYWx1ZUlkKSBjb25zdDsKLQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c1NlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0g
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51
TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQogI2lmIEVOQUJMRShWSURFTykK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFy
dCwgRWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6
ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAvLyBNZWRpYSBjb250cm9scworICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0LCBF
bGVtZW50Kik7CiAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dCgpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpOwot
ICAgIHZpcnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1NYWMoKTsKLQotICAgIEludFJlY3QgaW5m
bGF0ZVJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdp
bnMsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpIGNvbnN0OwotCi0gICAgRmxvYXRSZWN0IGNvbnZl
cnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0
IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwg
Y29uc3QgSW50UmVjdCYgcikgY29uc3Q7Ci0gICAgCi0gICAgLy8gR2V0IHRoZSBjb250cm9sIHNp
emUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBieSBzb21lIG9mIHRoZSBjb250cm9scyAobGlr
ZSBidXR0b25zKS4KLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJT
dHlsZSopIGNvbnN0OwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250
KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBj
b25zdCBJbnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxl
dmVsID0gMS4wZik7Ci0gICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJT
dHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JT
eXN0ZW1Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAg
IHZvaWQgc2V0Rm9udEZyb21Db250cm9sU2l6ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBOU0NvbnRyb2xTaXplKSBjb25zdDsKIAotICAgIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUo
TlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCB1cGRhdGVDaGVja2VkU3Rh
dGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCB1cGRhdGVFbmFibGVk
U3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCB1cGRhdGVGb2N1
c2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCB1cGRhdGVQ
cmVzc2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0KLSAgICAvLyBIZWxw
ZXJzIGZvciBhZGp1c3RpbmcgYXBwZWFyYW5jZSBhbmQgZm9yIHBhaW50aW5nCi0KLSAgICB2b2lk
IHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJl
Y3QmKTsKLSAgICBjb25zdCBJbnRTaXplKiBwb3B1cEJ1dHRvblNpemVzKCkgY29uc3Q7Ci0gICAg
Y29uc3QgaW50KiBwb3B1cEJ1dHRvbk1hcmdpbnMoKSBjb25zdDsKLSAgICBjb25zdCBpbnQqIHBv
cHVwQnV0dG9uUGFkZGluZyhOU0NvbnRyb2xTaXplKSBjb25zdDsKLSAgICB2b2lkIHBhaW50TWVu
dUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgY29uc3QgSW50U2l6ZSogbWVudUxpc3RT
aXplcygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihS
ZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKIAotICAgIGNvbnN0IEludFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKLSAg
ICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0OwotICAgIGNvbnN0IElu
dFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VhcmNoQ2Vs
bFN0YXRlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHNldFNlYXJj
aEZpZWxkU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIAotICAgIE5TUG9wVXBCdXR0b25D
ZWxsKiBwb3B1cEJ1dHRvbigpIGNvbnN0OwotICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2go
KSBjb25zdDsKLSAgICBOU01lbnUqIHNlYXJjaE1lbnVUZW1wbGF0ZSgpIGNvbnN0OwotICAgIE5T
U2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJIb3Jpem9udGFsKCkgY29uc3Q7Ci0gICAgTlNTbGlkZXJD
ZWxsKiBzbGlkZXJUaHVtYlZlcnRpY2FsKCkgY29uc3Q7CisjZW5kaWYKIAorICAgIHZpcnR1YWwg
Ym9vbCB1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgTlNW
aWV3KiBkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiBwcml2YXRlOgotICAg
IG11dGFibGUgUmV0YWluUHRyPE5TUG9wVXBCdXR0b25DZWxsPiBtX3BvcHVwQnV0dG9uOwotICAg
IG11dGFibGUgUmV0YWluUHRyPE5TU2VhcmNoRmllbGRDZWxsPiBtX3NlYXJjaDsKLSAgICBtdXRh
YmxlIFJldGFpblB0cjxOU01lbnU+IG1fc2VhcmNoTWVudVRlbXBsYXRlOwotICAgIG11dGFibGUg
UmV0YWluUHRyPE5TU2xpZGVyQ2VsbD4gbV9zbGlkZXJUaHVtYkhvcml6b250YWw7Ci0gICAgbXV0
YWJsZSBSZXRhaW5QdHI8TlNTbGlkZXJDZWxsPiBtX3NsaWRlclRodW1iVmVydGljYWw7Ci0KLSAg
ICBib29sIG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOwotICAgIGJvb2wgbV9pc1Ns
aWRlclRodW1iVmVydGljYWxQcmVzc2VkOwotCi0gICAgbXV0YWJsZSBIYXNoTWFwPGludCwgUkdC
QTMyPiBtX3N5c3RlbUNvbG9yQ2FjaGU7Ci0KLSAgICBSZXRhaW5QdHI8V2ViQ29yZVJlbmRlclRo
ZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXI+IG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXI7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUFjdGl2ZVN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCop
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbSBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMubW0KaW5kZXggMDNhYWIxYy4uZWViZjA2YyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCkBAIC0yMCwyOSArMjAsOCBAQAog
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlJlbmRlclRoZW1lQ2hyb21pdW1NYWMuaCIK
LQotI2ltcG9ydCAiQml0bWFwSW1hZ2UuaCIKICNpbXBvcnQgIkNocm9taXVtQnJpZGdlLmgiCi0j
aW1wb3J0ICJDb2xvck1hYy5oIgotI2ltcG9ydCAiQ1NTU3R5bGVTZWxlY3Rvci5oIgotI2ltcG9y
dCAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkVs
ZW1lbnQuaCIKLSNpbXBvcnQgIkZyYW1lVmlldy5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW1wb3J0ICJIVE1MTWVkaWFFbGVt
ZW50LmgiCi0jaW1wb3J0ICJIVE1MTmFtZXMuaCIKLSNpbXBvcnQgIkltYWdlLmgiCi0jaW1wb3J0
ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIk1lZGlhQ29udHJvbEVs
ZW1lbnRzLmgiCi0jaW1wb3J0ICJSZW5kZXJNZWRpYS5oIgogI2ltcG9ydCAiUmVuZGVyTWVkaWFD
b250cm9sc0Nocm9taXVtLmgiCi0jaW1wb3J0ICJSZW5kZXJTbGlkZXIuaCIKLSNpbXBvcnQgIlJl
bmRlclZpZXcuaCIKLSNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgotI2ltcG9ydCAiVGltZVJhbmdl
cy5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiVXNlckFn
ZW50U3R5bGVTaGVldHMuaCIKICNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KICNpbXBvcnQgPENv
Y29hL0NvY29hLmg+CkBAIC01MCw2NCArMjksNiBAQAogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2ltcG9ydCA8bWF0aC5oPgogCi0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLXR5cGVk
ZWYgaW50IE5TSW50ZWdlcjsKLXR5cGVkZWYgdW5zaWduZWQgTlNVSW50ZWdlcjsKLSNlbmRpZgot
Ci11c2luZyBzdGQ6Om1pbjsKLQotLy8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLmgg
ZmlsZSkgaXMgYSBjbG9uZSBvZiBSZW5kZXJUaGVtZU1hYy5tbS4KLS8vIEJlY2F1c2UgdGhlIG9y
aWdpbmFsIGZpbGUgaXMgZGVzaWduZWQgdG8gcnVuIGluLXByb2Nlc3MgaW5zaWRlIGEgQ29jb2Eg
dmlldywKLS8vIHdlIG11c3QgbWFpbnRhaW4gYSBmb3JrLiBQbGVhc2UgbWFpbnRhaW4gdGhpcyBm
aWxlIGJ5IHBlcmZvcm1pbmcgcGFyYWxsZWwKLS8vIGNoYW5nZXMgdG8gaXQuCi0vLwotLy8gVGhl
IG9ubHkgY2hhbmdlcyBmcm9tIFJlbmRlclRoZW1lTWFjIHNob3VsZCBiZToKLS8vIC0gVGhlIGNs
YXNzbmFtZSBjaGFuZ2UgZnJvbSBSZW5kZXJUaGVtZU1hYyB0byBSZW5kZXJUaGVtZUNocm9taXVt
TWFjLgotLy8gLSBUaGUgaW50cm9kdWN0aW9uIG9mIFJUQ01GbGlwcGVkVmlldyBhbmQgRmxpcHBl
ZFZpZXcoKSBhbmQgaXRzIHVzZSBhcyB0aGUKLS8vICAgcGFyZW50IHZpZXcgZm9yIGNlbGwgcmVu
ZGVyaW5nLgotLy8gLSBJbiBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCksIHRoZSB1c2Ugb2YgQ2hy
b21pdW1CcmlkZ2UgdG8gZGV0ZXJtaW5lIGlmCi0vLyAgIHdlJ3JlIGluIGxheW91dCB0ZXN0IG1v
ZGUuCi0vLyAtIHVwZGF0ZUFjdGl2ZVN0YXRlKCkgYW5kIGl0cyB1c2UgdG8gdXBkYXRlIHRoZSBj
ZWxscycgdmlzdWFsIGFwcGVhcmFuY2UuCi0vLyAtIEFsbCB0aGUgcGFpbnRNZWRpYSooKSBmdW5j
dGlvbnMgYW5kIGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQotLy8gICBhcmUgZm9ya2Vk
IGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgaW5zdGVhZCBvZiBSZW5kZXJUaGVtZU1hYy4K
LS8vCi0vLyBGb3IgYWxsIG90aGVyIGRpZmZlcmVuY2VzLCBpZiBpdCB3YXMgaW50cm9kdWNlZCBp
biB0aGlzIGZpbGUsIHRoZW4gdGhlCi0vLyBtYWludGFpbmVyIGZvcmdvdCB0byBpbmNsdWRlIGl0
IGluIHRoZSBsaXN0OyBvdGhlcndpc2UgaXQgaXMgYW4gdXBkYXRlIHRoYXQKLS8vIHNob3VsZCBo
YXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIGZpbGUgYnV0IHdhcyBub3QuCi0KLS8vIFRoZSBtZXRo
b2RzIGluIHRoaXMgZmlsZSBhcmUgc3BlY2lmaWMgdG8gdGhlIE1hYyBPUyBYIHBsYXRmb3JtLgot
Ci0vLyBGSVhNRTogVGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IGNvZGUgaW4gdGhpcyBjbGFzcyBz
aG91bGQgYmUgZmFjdG9yZWQgb3V0IGFuZCBtZXJnZWQgd2l0aCBSZW5kZXJUaGVtZVNhZmFyaS4K
LQotQGludGVyZmFjZSBXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlciA6IE5T
T2JqZWN0Ci17Ci0gICAgV2ViQ29yZTo6UmVuZGVyVGhlbWUgKl90aGVtZTsKLX0KLQotLSAoaWQp
aW5pdFdpdGhUaGVtZTooV2ViQ29yZTo6UmVuZGVyVGhlbWUgKil0aGVtZTsKLS0gKHZvaWQpc3lz
dGVtQ29sb3JzRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKLQotQGVu
ZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2
ZXIKLQotLSAoaWQpaW5pdFdpdGhUaGVtZTooV2ViQ29yZTo6UmVuZGVyVGhlbWUgKil0aGVtZQot
ewotICAgIFtzdXBlciBpbml0XTsKLSAgICBfdGhlbWUgPSB0aGVtZTsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKXN5c3RlbUNvbG9yc0RpZENoYW5nZTooTlNOb3RpZmljYXRpb24g
Kil1bnVzZWROb3RpZmljYXRpb24KLXsKLSAgICBBU1NFUlRfVU5VU0VEKHVudXNlZE5vdGlmaWNh
dGlvbiwgW1t1bnVzZWROb3RpZmljYXRpb24gbmFtZV0gaXNFcXVhbFRvU3RyaW5nOk5TU3lzdGVt
Q29sb3JzRGlkQ2hhbmdlTm90aWZpY2F0aW9uXSk7Ci0gICAgX3RoZW1lLT5wbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSgpOwotfQotCi1AZW5kCi0KIEBpbnRlcmZhY2UgUlRDTUZsaXBwZWRWaWV3IDog
TlNWaWV3CiB7fQogCkBAIC0xMzAsNDU5ICs1MSwzMyBAQCB1c2luZyBzdGQ6Om1pbjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCi1lbnVtIHsK
LSAgICB0b3BNYXJnaW4sCi0gICAgcmlnaHRNYXJnaW4sCi0gICAgYm90dG9tTWFyZ2luLAotICAg
IGxlZnRNYXJnaW4KLX07Ci0KLWVudW0gewotICAgIHRvcFBhZGRpbmcsCi0gICAgcmlnaHRQYWRk
aW5nLAotICAgIGJvdHRvbVBhZGRpbmcsCi0gICAgbGVmdFBhZGRpbmcKLX07Ci0KLS8vIEluIFNu
b3cgTGVvcGFyZCwgbWFueSBjZWxscyBvbmx5IGNoZWNrIHRvIHNlZSBpZiB0aGUgdmlldyB0aGV5
J3JlIHBhc3NlZCBpcwotLy8gZmxpcHBlZCwgYW5kIGlmIGEgbmlsIHZpZXcgaXMgcGFzc2VkLCBu
ZWdsZWN0IHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50Ci0vLyBncmFwaGljcyBjb250ZXh0IGlzIGZs
aXBwZWQuIFRodXMgd2UgcGFzcyBhIHNoYW0gdmlldyB0byB0aGVtLCBvbmUgd2hvc2UKLS8vIGZs
aXBwZWQgc3RhdGUganVzdCByZWZsZWN0cyB0aGUgc3RhdGUgb2YgdGhlIGNvbnRleHQuCiBOU1Zp
ZXcqIEZsaXBwZWRWaWV3KCkKIHsKICAgICBzdGF0aWMgTlNWaWV3KiB2aWV3ID0gW1tSVENNRmxp
cHBlZFZpZXcgYWxsb2NdIGluaXRdOwogICAgIHJldHVybiB2aWV3OwogfQogCisjaWYgUExBVEZP
Uk0oQ0hST01JVU0pCiBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVG
b3JQYWdlKFBhZ2UqKQogewogICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7CiAgICAgcmV0dXJuIHJ0OwogfQor
I2VuZGlmCiAKIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OmNyZWF0ZSgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZUNocm9taXVt
TWFjKTsKIH0KIAotUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
YygpCi0gICAgOiBtX2lzU2xpZGVyVGh1bWJIb3Jpem9udGFsUHJlc3NlZChmYWxzZSkKLSAgICAs
IG1faXNTbGlkZXJUaHVtYlZlcnRpY2FsUHJlc3NlZChmYWxzZSkKLSAgICAsIG1fbm90aWZpY2F0
aW9uT2JzZXJ2ZXIoQWRvcHROUywgW1tXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNl
cnZlciBhbGxvY10gaW5pdFdpdGhUaGVtZTp0aGlzXSkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6dXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKSBjb25zdAogewotICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9ub3RpZmljYXRpb25P
YnNlcnZlci5nZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3Ioc3lzdGVtQ29sb3JzRGlkQ2hhbmdlOikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWU6TlNTeXN0ZW1Db2xvcnNEaWRDaGFuZ2VOb3RpZmljYXRpb24KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6bmls
XTsKKyAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCk7CiB9CiAKLVJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6On5SZW5kZXJUaGVtZUNocm9taXVtTWFjKCkKK05TVmlldyog
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6ZG9jdW1lbnRWaWV3Rm9yKFJlbmRlck9iamVjdCopIGNv
bnN0CiB7Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVP
YnNlcnZlcjptX25vdGlmaWNhdGlvbk9ic2VydmVyLmdldCgpXTsKLX0KLQotQ29sb3IgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAotewotICAgIE5TQ29sb3IqIGNvbG9yID0gW1tOU0NvbG9yIHNlbGVjdGVkVGV4dEJh
Y2tncm91bmRDb2xvcl0gY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JT
cGFjZV07Ci0gICAgcmV0dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3Ig
cmVkQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgZ3JlZW5Db21w
b25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciBibHVlQ29tcG9uZW50XSkp
OwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBOU0NvbG9yKiBjb2xvciA9IFtb
TlNDb2xvciBzZWNvbmRhcnlTZWxlY3RlZENvbnRyb2xDb2xvcl0gY29sb3JVc2luZ0NvbG9yU3Bh
Y2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07Ci0gICAgcmV0dXJuIENvbG9yKHN0YXRpY19j
YXN0PGludD4oMjU1LjAgKiBbY29sb3IgcmVkQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4o
MjU1LjAgKiBbY29sb3IgZ3JlZW5Db21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAq
IFtjb2xvciBibHVlQ29tcG9uZW50XSkpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dAotewotICAgIE5TQ29sb3IqIGNvbG9yID0gW1tOU0NvbG9yIGFsdGVybmF0ZVNlbGVjdGVkQ29u
dHJvbENvbG9yXSBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNl
XTsKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciByZWRD
b21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciBncmVlbkNvbXBvbmVu
dF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGJsdWVDb21wb25lbnRdKSk7Ci19
Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yOjp3aGl0
ZTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xv
cjo6YmxhY2s7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtRm9j
dXNSaW5nQ29sb3IoKSBjb25zdAotewotICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVz
dE1vZGUoKSkKLSAgICAgICAgcmV0dXJuIG9sZEFxdWFGb2N1c1JpbmdDb2xvcigpOwotCi0gICAg
cmV0dXJuIHN5c3RlbUNvbG9yKENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpOwotfQotCi1D
b2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKLX0KLQotc3RhdGljIEZvbnRXZWlnaHQgdG9G
b250V2VpZ2h0KE5TSW50ZWdlciBhcHBLaXRGb250V2VpZ2h0KQotewotICAgIEFTU0VSVChhcHBL
aXRGb250V2VpZ2h0ID4gMCAmJiBhcHBLaXRGb250V2VpZ2h0IDwgMTUpOwotICAgIGlmIChhcHBL
aXRGb250V2VpZ2h0ID4gMTQpCi0gICAgICAgIGFwcEtpdEZvbnRXZWlnaHQgPSAxNDsKLSAgICBl
bHNlIGlmIChhcHBLaXRGb250V2VpZ2h0IDwgMSkKLSAgICAgICAgYXBwS2l0Rm9udFdlaWdodCA9
IDE7Ci0KLSAgICBzdGF0aWMgRm9udFdlaWdodCBmb250V2VpZ2h0c1tdID0gewotICAgICAgICBG
b250V2VpZ2h0MTAwLAotICAgICAgICBGb250V2VpZ2h0MTAwLAotICAgICAgICBGb250V2VpZ2h0
MjAwLAotICAgICAgICBGb250V2VpZ2h0MzAwLAotICAgICAgICBGb250V2VpZ2h0NDAwLAotICAg
ICAgICBGb250V2VpZ2h0NTAwLAotICAgICAgICBGb250V2VpZ2h0NjAwLAotICAgICAgICBGb250
V2VpZ2h0NjAwLAotICAgICAgICBGb250V2VpZ2h0NzAwLAotICAgICAgICBGb250V2VpZ2h0ODAw
LAotICAgICAgICBGb250V2VpZ2h0ODAwLAotICAgICAgICBGb250V2VpZ2h0OTAwLAotICAgICAg
ICBGb250V2VpZ2h0OTAwLAotICAgICAgICBGb250V2VpZ2h0OTAwCi0gICAgfTsKLSAgICByZXR1
cm4gZm9udFdlaWdodHNbYXBwS2l0Rm9udFdlaWdodCAtIDFdOwotfQotCi12b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnN5c3RlbUZvbnQoaW50IGNzc1ZhbHVlSWQsIEZvbnREZXNjcmlwdGlv
biYgZm9udERlc2NyaXB0aW9uKSBjb25zdAotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9u
dERlc2NyaXB0aW9uLCBzeXN0ZW1Gb250LCAoKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChG
b250RGVzY3JpcHRpb24sIHNtYWxsU3lzdGVtRm9udCwgKCkpOwotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoRm9udERlc2NyaXB0aW9uLCBtZW51Rm9udCwgKCkpOwotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoRm9udERlc2NyaXB0aW9uLCBsYWJlbEZvbnQsICgpKTsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgbWluaUNvbnRyb2xGb250LCAoKSk7Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRpb24sIHNtYWxsQ29udHJvbEZvbnQsICgpKTsKLSAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgY29udHJvbEZvbnQsICgpKTsK
LQotICAgIEZvbnREZXNjcmlwdGlvbiogY2FjaGVkRGVzYzsKLSAgICBOU0ZvbnQqIGZvbnQgPSBu
aWw7Ci0gICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFs
bENhcHRpb246Ci0gICAgICAgICAgICBjYWNoZWREZXNjID0gJnNtYWxsU3lzdGVtRm9udDsKLSAg
ICAgICAgICAgIGlmICghc21hbGxTeXN0ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAg
ICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHNtYWxsU3lz
dGVtRm9udFNpemVdXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVl
TWVudToKLSAgICAgICAgICAgIGNhY2hlZERlc2MgPSAmbWVudUZvbnQ7Ci0gICAgICAgICAgICBp
ZiAoIW1lbnVGb250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAgICAgICAgZm9udCA9IFtO
U0ZvbnQgbWVudUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZV1dOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTdGF0dXNCYXI6Ci0gICAgICAgICAgICBj
YWNoZWREZXNjID0gJmxhYmVsRm9udDsKLSAgICAgICAgICAgIGlmICghbGFiZWxGb250LmlzQWJz
b2x1dGVTaXplKCkpCi0gICAgICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgbGFiZWxGb250T2ZT
aXplOltOU0ZvbnQgbGFiZWxGb250U2l6ZV1dOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKLSAgICAgICAgICAgIGNhY2hlZERlc2Mg
PSAmbWluaUNvbnRyb2xGb250OwotICAgICAgICAgICAgaWYgKCFtaW5pQ29udHJvbEZvbnQuaXNB
YnNvbHV0ZVNpemUoKSkKLSAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250
T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU01pbmlDb250cm9s
U2l6ZV1dOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRT
bWFsbENvbnRyb2w6Ci0gICAgICAgICAgICBjYWNoZWREZXNjID0gJnNtYWxsQ29udHJvbEZvbnQ7
Ci0gICAgICAgICAgICBpZiAoIXNtYWxsQ29udHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKLSAg
ICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lz
dGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1NtYWxsQ29udHJvbFNpemVdXTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q29udHJvbDoKLSAgICAgICAg
ICAgIGNhY2hlZERlc2MgPSAmY29udHJvbEZvbnQ7Ci0gICAgICAgICAgICBpZiAoIWNvbnRyb2xG
b250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lz
dGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6TlNSZWd1
bGFyQ29udHJvbFNpemVdXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZzeXN0ZW1Gb250OwotICAgICAgICAgICAgaWYgKCFz
eXN0ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAgICAgICAgZm9udCA9IFtOU0Zv
bnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplXV07Ci0gICAgfQotCi0g
ICAgaWYgKGZvbnQpIHsKLSAgICAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0gICAgICAgIGNhY2hlZERlc2MtPnNldElz
QWJzb2x1dGVTaXplKHRydWUpOwotICAgICAgICBjYWNoZWREZXNjLT5zZXRHZW5lcmljRmFtaWx5
KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkpOwotICAgICAgICBjYWNoZWREZXNjLT5maXJzdEZh
bWlseSgpLnNldEZhbWlseShbZm9udCBmYW1pbHlOYW1lXSk7Ci0gICAgICAgIGNhY2hlZERlc2Mt
PnNldFNwZWNpZmllZFNpemUoW2ZvbnQgcG9pbnRTaXplXSk7Ci0gICAgICAgIGNhY2hlZERlc2Mt
PnNldFdlaWdodCh0b0ZvbnRXZWlnaHQoW2ZvbnRNYW5hZ2VyIHdlaWdodE9mRm9udDpmb250XSkp
OwotICAgICAgICBjYWNoZWREZXNjLT5zZXRJdGFsaWMoW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9u
dDpmb250XSAmIE5TSXRhbGljRm9udE1hc2spOwotICAgIH0KLSAgICBmb250RGVzY3JpcHRpb24g
PSAqY2FjaGVkRGVzYzsKLX0KLQotc3RhdGljIFJHQkEzMiBjb252ZXJ0TlNDb2xvclRvQ29sb3Io
TlNDb2xvciAqY29sb3IpCi17Ci0gICAgTlNDb2xvciAqY29sb3JJbkNvbG9yU3BhY2UgPSBbY29s
b3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07Ci0gICAg
aWYgKGNvbG9ySW5Db2xvclNwYWNlKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc2Nh
bGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAsIDAuMCk7Ci0gICAgICAgIHJldHVybiBtYWtlUkdC
KHN0YXRpY19jYXN0PGludD4oc2NhbGVGYWN0b3IgKiBbY29sb3JJbkNvbG9yU3BhY2UgcmVkQ29t
cG9uZW50XSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRmFjdG9yICogW2Nv
bG9ySW5Db2xvclNwYWNlIGdyZWVuQ29tcG9uZW50XSksCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KHNjYWxlRmFjdG9yICogW2NvbG9ySW5Db2xvclNwYWNlIGJsdWVDb21wb25lbnRdKSk7
Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjb252ZXJzaW9uIGFib3ZlIGNhbiBmYWlsIGlmIHRoZSBO
U0NvbG9yIGluIHF1ZXN0aW9uIGlzIGFuIE5TUGF0dGVybkNvbG9yCi0gICAgLy8gKGFzIG1hbnkg
c3lzdGVtIGNvbG9ycyBhcmUpLiBUaGVzZSBjb2xvcnMgYXJlIGFjdHVhbGx5IGEgcmVwZWF0aW5n
IHBhdHRlcm4KLSAgICAvLyBub3QganVzdCBhIHNvbGlkIGNvbG9yLiBUbyB3b3JrIGFyb3VuZCB0
aGlzIHdlIHNpbXBseSBkcmF3IGEgMXgxIGltYWdlIG9mCi0gICAgLy8gdGhlIGNvbG9yIGFuZCB1
c2UgdGhhdCBwaXhlbCdzIGNvbG9yLiBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gdXNlIGFuIGF2ZXJh
Z2Ugb2YKLSAgICAvLyB0aGUgY29sb3JzIGluIHRoZSBwYXR0ZXJuIGluc3RlYWQuCi0gICAgTlNC
aXRtYXBJbWFnZVJlcCAqb2Zmc2NyZWVuUmVwID0gW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBp
bml0V2l0aEJpdG1hcERhdGFQbGFuZXM6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1dp
ZGU6MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNIaWdoOjEKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Yml0c1BlclNhbXBsZTo4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzUGVyUGl4ZWw6NAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhhc0FscGhhOllFUwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGxh
bmFyOk5PCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNw
YWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNQZXJSb3c6NAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Yml0c1BlclBpeGVsOjMyXTsKLQotICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NT
dGF0ZV07Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OltOU0dyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoQml0bWFwSW1hZ2VSZXA6b2Zmc2NyZWVuUmVw
XV07Ci0gICAgTlNFcmFzZVJlY3QoTlNNYWtlUmVjdCgwLCAwLCAxLCAxKSk7Ci0gICAgW2NvbG9y
IGRyYXdTd2F0Y2hJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV07Ci0gICAgW05TR3JhcGhp
Y3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKLQotICAgIE5TVUludGVnZXIgcGl4ZWxb
NF07Ci0gICAgW29mZnNjcmVlblJlcCBnZXRQaXhlbDpwaXhlbCBhdFg6MCB5OjBdOwotCi0gICAg
W29mZnNjcmVlblJlcCByZWxlYXNlXTsKLQotICAgIHJldHVybiBtYWtlUkdCKHBpeGVsWzBdLCBw
aXhlbFsxXSwgcGl4ZWxbMl0pOwotfQotCi1zdGF0aWMgUkdCQTMyIG1lbnVCYWNrZ3JvdW5kQ29s
b3IoKQotewotICAgIE5TQml0bWFwSW1hZ2VSZXAgKm9mZnNjcmVlblJlcCA9IFtbTlNCaXRtYXBJ
bWFnZVJlcCBhbGxvY10gaW5pdFdpdGhCaXRtYXBEYXRhUGxhbmVzOm5pbAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwaXhlbHNXaWRlOjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzSGlnaDoxCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJpdHNQZXJTYW1wbGU6OAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlc1Bl
clBpeGVsOjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNBbHBoYTpZRVMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc1BsYW5hcjpOTwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2VOYW1lOk5T
RGV2aWNlUkdCQ29sb3JTcGFjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyUm93OjQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJpdHNQZXJQaXhlbDozMl07Ci0KLSAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHN0YXRpY19jYXN0PENHQ29udGV4dFJlZj4oW1tOU0dyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHRXaXRoQml0bWFwSW1hZ2VSZXA6b2Zmc2NyZWVuUmVwXSBncmFwaGljc1BvcnRd
KTsKLSAgICBDR1JlY3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgMSwgMSk7Ci0gICAgSElUaGVt
ZU1lbnVEcmF3SW5mbyBkcmF3SW5mbzsKLSAgICBkcmF3SW5mby52ZXJzaW9uID0gIDA7Ci0gICAg
ZHJhd0luZm8ubWVudVR5cGUgPSBrVGhlbWVNZW51VHlwZVBvcFVwOwotICAgIEhJVGhlbWVEcmF3
TWVudUJhY2tncm91bmQoJnJlY3QsICZkcmF3SW5mbywgY29udGV4dCwga0hJVGhlbWVPcmllbnRh
dGlvbkludmVydGVkKTsKLQotICAgIE5TVUludGVnZXIgcGl4ZWxbNF07Ci0gICAgW29mZnNjcmVl
blJlcCBnZXRQaXhlbDpwaXhlbCBhdFg6MCB5OjBdOwotCi0gICAgW29mZnNjcmVlblJlcCByZWxl
YXNlXTsKLQotICAgIHJldHVybiBtYWtlUkdCKHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0p
OwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtQ29sb3JzRGlkQ2hh
bmdlKCkKLXsKLSAgICBtX3N5c3RlbUNvbG9yQ2FjaGUuY2xlYXIoKTsKLSAgICBSZW5kZXJUaGVt
ZTo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
c3lzdGVtQ29sb3JDYWNoZS5jb250YWlucyhjc3NWYWx1ZUlkKSkKLSAgICAgICAgcmV0dXJuIG1f
c3lzdGVtQ29sb3JDYWNoZS5nZXQoY3NzVmFsdWVJZCk7Ci0KLSAgICBDb2xvciBjb2xvcjsKLSAg
ICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUFjdGl2ZWJvcmRl
cjoKLSAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGtl
eWJvYXJkRm9jdXNJbmRpY2F0b3JDb2xvcl0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ1NTVmFsdWVBY3RpdmVjYXB0aW9uOgotICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0
TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igd2luZG93RnJhbWVUZXh0Q29sb3JdKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlQXBwd29ya3NwYWNlOgotICAgICAgICAg
ICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgaGVhZGVyQ29sb3JdKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlQmFja2dyb3VuZDoKLSAg
ICAgICAgICAgIC8vIFVzZSB0aGVtZSBpbmRlcGVuZGVudCBkZWZhdWx0Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbmZhY2U6Ci0gICAgICAgICAgICAvLyBX
ZSB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIE5TQ29sb3IncyBjb250cm9sQ29sb3IgdG8gYXZv
aWQgd2Vic2l0ZSBpbmNvbXBhdGliaWxpdGllcy4KLSAgICAgICAgICAgIC8vIFdlIG1heSB3YW50
IHRvIGNoYW5nZSB0aGlzIHRvIHVzZSB0aGUgTlNDb2xvciBpbiBmdXR1cmUuCi0gICAgICAgICAg
ICBjb2xvciA9IDB4RkZDMEMwQzA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUJ1dHRvbmhpZ2hsaWdodDoKLSAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29s
b3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xIaWdobGlnaHRDb2xvcl0pOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVCdXR0b25zaGFkb3c6Ci0gICAgICAgICAgICBj
b2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sU2hhZG93Q29sb3Jd
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoK
LSAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRy
b2xUZXh0Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVl
Q2FwdGlvbnRleHQ6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihb
TlNDb2xvciB0ZXh0Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1ZhbHVlR3JheXRleHQ6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xv
cihbTlNDb2xvciBkaXNhYmxlZENvbnRyb2xUZXh0Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ZhbHVlSGlnaGxpZ2h0OgotICAgICAgICAgICAgY29sb3IgPSBj
b252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9y
XSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUhpZ2hsaWdodHRl
eHQ6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBz
ZWxlY3RlZFRleHRDb2xvcl0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
VmFsdWVJbmFjdGl2ZWJvcmRlcjoKLSAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JU
b0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xCYWNrZ3JvdW5kQ29sb3JdKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVjYXB0aW9uOgotICAgICAgICAgICAg
Y29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbEJhY2tncm91bmRD
b2xvcl0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2
ZWNhcHRpb250ZXh0OgotICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3Io
W05TQ29sb3IgdGV4dENvbG9yXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
U1NWYWx1ZUluZm9iYWNrZ3JvdW5kOgotICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gY29ycmVz
cG9uZGluZyBOU0NvbG9yIGZvciB0aGlzIHNvIHdlIHVzZSBhIGhhcmQgY29kZWQgdmFsdWUuCi0g
ICAgICAgICAgICBjb2xvciA9IDB4RkZGQkZDQzU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZUluZm90ZXh0OgotICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlND
b2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9yXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NWYWx1ZU1lbnU6Ci0gICAgICAgICAgICBjb2xvciA9IG1lbnVCYWNrZ3Jv
dW5kQ29sb3IoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlTWVu
dXRleHQ6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xv
ciBzZWxlY3RlZE1lbnVJdGVtVGV4dENvbG9yXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZVNjcm9sbGJhcjoKLSAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5T
Q29sb3JUb0NvbG9yKFtOU0NvbG9yIHNjcm9sbEJhckNvbG9yXSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRleHQ6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZl
cnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB0ZXh0Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVkZGFya3NoYWRvdzoKLSAgICAgICAgICAgIGNv
bG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xEYXJrU2hhZG93Q29s
b3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVkc2hh
ZG93OgotICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Ig
c2hhZG93Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVl
VGhyZWVkZmFjZToKLSAgICAgICAgICAgIC8vIFdlIHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2Yg
TlNDb2xvcidzIGNvbnRyb2xDb2xvciB0byBhdm9pZCB3ZWJzaXRlIGluY29tcGF0aWJpbGl0aWVz
LgotICAgICAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBO
U0NvbG9yIGluIGZ1dHVyZS4KLSAgICAgICAgICAgIGNvbG9yID0gMHhGRkMwQzBDMDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVkaGlnaGxpZ2h0OgotICAg
ICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgaGlnaGxpZ2h0
Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVk
bGlnaHRzaGFkb3c6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihb
TlNDb2xvciBjb250cm9sTGlnaHRIaWdobGlnaHRDb2xvcl0pOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKLSAgICAgICAgICAg
IGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRp
Y2F0b3JDb2xvcl0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVX
aW5kb3c6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xv
ciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENTU1ZhbHVlV2luZG93ZnJhbWU6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0Nv
bG9yVG9Db2xvcihbTlNDb2xvciB3aW5kb3dGcmFtZUNvbG9yXSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVdpbmRvd3RleHQ6Ci0gICAgICAgICAgICBjb2xvciA9
IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB3aW5kb3dGcmFtZVRleHRDb2xvcl0pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgIGNvbG9yID0gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwotCi0g
ICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9zeXN0ZW1Db2xvckNhY2hlLnNldChj
c3NWYWx1ZUlkLCBjb2xvci5yZ2IoKSk7Ci0KLSAgICByZXR1cm4gY29sb3I7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3Im
IGJhY2tncm91bmRDb2xvcikgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0IHx8
IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybiBzdHls
ZS0+Ym9yZGVyKCkgIT0gYm9yZGVyOwotCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgaG9ycmlibGUs
IGJ1dCB0aGVyZSBpcyBub3QgbXVjaCBlbHNlIHRoYXQgY2FuIGJlIGRvbmUuICBNZW51IGxpc3Rz
IGNhbm5vdCBkcmF3IHByb3Blcmx5IHdoZW4KLSAgICAvLyBzY2FsZWQuICBUaGV5IGNhbid0IHJl
YWxseSBkcmF3IHByb3Blcmx5IHdoZW4gdHJhbnNmb3JtZWQgZWl0aGVyLiAgV2UgY2FuJ3QgZGV0
ZWN0IHRoZSB0cmFuc2Zvcm0gY2FzZSBhdCBzdHlsZQotICAgIC8vIGFkanVzdG1lbnQgdGltZSBz
byB0aGF0IHdpbGwganVzdCBoYXZlIHRvIHN0YXkgYnJva2VuLiAgV2UgY2FuIGhvd2V2ZXIgZGV0
ZWN0IHRoYXQgd2UncmUgem9vbWluZy4gIElmIHpvb21pbmcKLSAgICAvLyBpcyBpbiBlZmZlY3Qg
d2UgdHJlYXQgaXQgbGlrZSB0aGUgY29udHJvbCBpcyBzdHlsZWQuCi0gICAgaWYgKHN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0ICYmIHN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0g
MS4wZikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6Omlz
Q29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3Ip
OwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFJlcGFpbnRSZWN0KGNv
bnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0
ID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwotCi0jaWYgVVNFKE5FV19USEVNRSkKLSAgICBz
d2l0Y2ggKHBhcnQpIHsKLSAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIGNhc2Ug
UmFkaW9QYXJ0OgotICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgICAgICBjYXNlIFNx
dWFyZUJ1dHRvblBhcnQ6Ci0gICAgICAgIGNhc2UgTGlzdEJ1dHRvblBhcnQ6Ci0gICAgICAgIGNh
c2UgRGVmYXVsdEJ1dHRvblBhcnQ6Ci0gICAgICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICAgICAg
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YWRqdXN0UmVwYWludFJlY3Qobywgcik7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGZsb2F0
IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIGlmIChwYXJ0
ID09IE1lbnVsaXN0UGFydCkgewotICAgICAgICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCBy
KTsKLSAgICAgICAgSW50U2l6ZSBzaXplID0gcG9wdXBCdXR0b25TaXplcygpW1twb3B1cEJ1dHRv
bigpIGNvbnRyb2xTaXplXV07Ci0gICAgICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkg
KiB6b29tTGV2ZWwpOwotICAgICAgICBzaXplLnNldFdpZHRoKHIud2lkdGgoKSk7Ci0gICAgICAg
IHIgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBwb3B1cEJ1dHRvbk1hcmdpbnMoKSwgem9vbUxldmVs
KTsKLSAgICB9Ci19Ci0KLUludFJlY3QgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aW5mbGF0ZVJl
Y3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgaW50KiBtYXJn
aW5zLCBmbG9hdCB6b29tTGV2ZWwpIGNvbnN0Ci17Ci0gICAgLy8gT25seSBkbyB0aGUgaW5mbGF0
aW9uIGlmIHRoZSBhdmFpbGFibGUgd2lkdGgvaGVpZ2h0IGFyZSB0b28gc21hbGwuICBPdGhlcndp
c2UgdHJ5IHRvCi0gICAgLy8gZml0IHRoZSBnbG93L2NoZWNrIHNwYWNlIGludG8gdGhlIGF2YWls
YWJsZSBib3gncyB3aWR0aC9oZWlnaHQuCi0gICAgaW50IHdpZHRoRGVsdGEgPSByLndpZHRoKCkg
LSAoc2l6ZS53aWR0aCgpICsgbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdp
bnNbcmlnaHRNYXJnaW5dICogem9vbUxldmVsKTsKLSAgICBpbnQgaGVpZ2h0RGVsdGEgPSByLmhl
aWdodCgpIC0gKHNpemUuaGVpZ2h0KCkgKyBtYXJnaW5zW3RvcE1hcmdpbl0gKiB6b29tTGV2ZWwg
KyBtYXJnaW5zW2JvdHRvbU1hcmdpbl0gKiB6b29tTGV2ZWwpOwotICAgIEludFJlY3QgcmVzdWx0
KHIpOwotICAgIGlmICh3aWR0aERlbHRhIDwgMCkgewotICAgICAgICByZXN1bHQuc2V0WChyZXN1
bHQueCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCk7Ci0gICAgICAgIHJlc3Vs
dC5zZXRXaWR0aChyZXN1bHQud2lkdGgoKSAtIHdpZHRoRGVsdGEpOwotICAgIH0KLSAgICBpZiAo
aGVpZ2h0RGVsdGEgPCAwKSB7Ci0gICAgICAgIHJlc3VsdC5zZXRZKHJlc3VsdC55KCkgLSBtYXJn
aW5zW3RvcE1hcmdpbl0gKiB6b29tTGV2ZWwpOwotICAgICAgICByZXN1bHQuc2V0SGVpZ2h0KHJl
c3VsdC5oZWlnaHQoKSAtIGhlaWdodERlbHRhKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotRmxvYXRSZWN0IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNvbnZlcnRUb1BhaW50aW5n
UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVj
dCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVj
dCYgcikgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgcGFydFJlY3QoaW5wdXRSZWN0KTsKLQotICAg
IC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJldHdlZW4gdGhlIHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBp
bnB1dCByZW5kZXJlcgotICAgIEZsb2F0U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcjsKLSAg
ICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcGFydFJlbmRlcmVyOwotICAgIHdoaWxl
IChyZW5kZXJlciAmJiByZW5kZXJlciAhPSBpbnB1dFJlbmRlcmVyKSB7Ci0gICAgICAgIFJlbmRl
ck9iamVjdCogY29udGFpbmluZ1JlbmRlcmVyID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOwotICAg
ICAgICBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlciAtPSByZW5kZXJlci0+b2Zmc2V0RnJvbUNvbnRh
aW5lcihjb250YWluaW5nUmVuZGVyZXIsIEludFBvaW50KCkpOwotICAgICAgICByZW5kZXJlciA9
IGNvbnRhaW5pbmdSZW5kZXJlcjsKLSAgICB9Ci0gICAgLy8gSWYgdGhlIGlucHV0IHJlbmRlcmVy
IHdhcyBub3QgYSBjb250YWluZXIsIHNvbWV0aGluZyB3ZW50IHdyb25nCi0gICAgQVNTRVJUKHJl
bmRlcmVyID09IGlucHV0UmVuZGVyZXIpOwotICAgIC8vIE1vdmUgdGhlIHJlY3QgaW50byBwYXJ0
UmVuZGVyZXIncyBjb29yZHMKLSAgICBwYXJ0UmVjdC5tb3ZlKG9mZnNldEZyb21JbnB1dFJlbmRl
cmVyKTsKLSAgICAvLyBBY2NvdW50IGZvciB0aGUgbG9jYWwgZHJhd2luZyBvZmZzZXQgKHR4LCB0
eSkKLSAgICBwYXJ0UmVjdC5tb3ZlKHIueCgpLCByLnkoKSk7Ci0KLSAgICByZXR1cm4gcGFydFJl
Y3Q7CisgICAgcmV0dXJuIEZsaXBwZWRWaWV3KCk7CiB9CiAKIC8vIFVwZGF0ZXMgdGhlIGNvbnRy
b2wgdGludCAoYS5rLmEuIGFjdGl2ZSBzdGF0ZSkgb2YgfGNlbGx8IChmcm9tIHxvfCkuCkBAIC02
MDQsOTE3ICs5OSwxMyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnVwZGF0ZUFjdGl2
ZVN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KgogICAgICAgICBbY2VsbCBz
ZXRDb250cm9sVGludDp0aW50XTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjp1
cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCi17
Ci0gICAgYm9vbCBvbGRJbmRldGVybWluYXRlID0gW2NlbGwgc3RhdGVdID09IE5TTWl4ZWRTdGF0
ZTsKLSAgICBib29sIGluZGV0ZXJtaW5hdGUgPSBpc0luZGV0ZXJtaW5hdGUobyk7Ci0gICAgYm9v
bCBjaGVja2VkID0gaXNDaGVja2VkKG8pOwotCi0gICAgaWYgKG9sZEluZGV0ZXJtaW5hdGUgIT0g
aW5kZXRlcm1pbmF0ZSkgewotICAgICAgICBbY2VsbCBzZXRTdGF0ZTppbmRldGVybWluYXRlID8g
TlNNaXhlZFN0YXRlIDogKGNoZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlKV07Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sIG9sZENoZWNrZWQgPSBbY2VsbCBzdGF0ZV0g
PT0gTlNPblN0YXRlOwotICAgIGlmIChjaGVja2VkICE9IG9sZENoZWNrZWQpCi0gICAgICAgIFtj
ZWxsIHNldFN0YXRlOmNoZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLX0KLQotdm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjp1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiBjZWxs
LCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCi17Ci0gICAgYm9vbCBvbGRFbmFibGVkID0gW2NlbGwg
aXNFbmFibGVkXTsKLSAgICBib29sIGVuYWJsZWQgPSBpc0VuYWJsZWQobyk7Ci0gICAgaWYgKGVu
YWJsZWQgIT0gb2xkRW5hYmxlZCkKLSAgICAgICAgW2NlbGwgc2V0RW5hYmxlZDplbmFibGVkXTsK
LX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUoTlND
ZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCi17Ci0gICAgYm9vbCBvbGRGb2N1c2Vk
ID0gW2NlbGwgc2hvd3NGaXJzdFJlc3BvbmRlcl07Ci0gICAgYm9vbCBmb2N1c2VkID0gaXNGb2N1
c2VkKG8pICYmIG8tPnN0eWxlKCktPm91dGxpbmVTdHlsZUlzQXV0bygpOwotICAgIGlmIChmb2N1
c2VkICE9IG9sZEZvY3VzZWQpCi0gICAgICAgIFtjZWxsIHNldFNob3dzRmlyc3RSZXNwb25kZXI6
Zm9jdXNlZF07Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6dXBkYXRlUHJlc3Nl
ZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQotewotICAgIGJvb2wg
b2xkUHJlc3NlZCA9IFtjZWxsIGlzSGlnaGxpZ2h0ZWRdOwotICAgIGJvb2wgcHJlc3NlZCA9IChv
LT5ub2RlKCkgJiYgby0+bm9kZSgpLT5hY3RpdmUoKSk7Ci0gICAgaWYgKHByZXNzZWQgIT0gb2xk
UHJlc3NlZCkKLSAgICAgICAgW2NlbGwgc2V0SGlnaGxpZ2h0ZWQ6cHJlc3NlZF07Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVu
ZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIC8vIEFuIGFsdGVybmF0ZSB3YXkgdG8gaW1wbGVt
ZW50IHRoaXMgd291bGQgYmUgdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBjZWxsIG9iamVjdAotICAg
IC8vIGFuZCBjYWxsIHRoZSBwcml2YXRlIF9uZWVkUmVkcmF3T25XaW5kb3dDaGFuZ2VkS2V5U3Rh
dGUgbWV0aG9kLiBBbiBhZHZhbnRhZ2Ugb2YKLSAgICAvLyB0aGF0IHdvdWxkIGJlIHRoYXQgd2Ug
d291bGQgbWF0Y2ggQXBwS2l0IGJlaGF2aW9yIG1vcmUgY2xvc2VseSwgYnV0IGEgZGlzYWR2YW50
YWdlCi0gICAgLy8gd291bGQgYmUgdGhhdCB3ZSB3b3VsZCByZWx5IG9uIGFuIEFwcEtpdCBTUEkg
bWV0aG9kLgotCi0gICAgaWYgKCFpc0VuYWJsZWQobykpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIENoZWNrYm94ZXMgb25seSBoYXZlIHRpbnQgd2hlbiBjaGVja2VkLgotICAgIGlm
IChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0KQotICAgICAgICByZXR1
cm4gaXNDaGVja2VkKG8pOwotCi0gICAgLy8gRm9yIG5vdyBhc3N1bWUgb3RoZXIgY29udHJvbHMg
aGF2ZSB0aW50IGlmIGVuYWJsZWQuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLU5TQ29udHJvbFNp
emUgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKLXsKLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsK
LSAgICBpZiAoZm9udFNpemUgPj0gMTYpCi0gICAgICAgIHJldHVybiBOU1JlZ3VsYXJDb250cm9s
U2l6ZTsKLSAgICBpZiAoZm9udFNpemUgPj0gMTEpCi0gICAgICAgIHJldHVybiBOU1NtYWxsQ29u
dHJvbFNpemU7Ci0gICAgcmV0dXJuIE5TTWluaUNvbnRyb2xTaXplOwotfQotCi12b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnNldENvbnRyb2xTaXplKE5TQ2VsbCogY2VsbCwgY29uc3QgSW50
U2l6ZSogc2l6ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCkKLXsK
LSAgICBOU0NvbnRyb2xTaXplIHNpemU7Ci0gICAgaWYgKG1pblNpemUud2lkdGgoKSA+PSBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVzW05TUmVndWxhckNvbnRyb2xTaXplXS53aWR0aCgpICogem9vbUxl
dmVsKSAmJgotICAgICAgICBtaW5TaXplLmhlaWdodCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6
ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLmhlaWdodCgpICogem9vbUxldmVsKSkKLSAgICAgICAg
c2l6ZSA9IE5TUmVndWxhckNvbnRyb2xTaXplOwotICAgIGVsc2UgaWYgKG1pblNpemUud2lkdGgo
KSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0ud2lkdGgoKSAq
IHpvb21MZXZlbCkgJiYKLSAgICAgICAgICAgICBtaW5TaXplLmhlaWdodCgpID49IHN0YXRpY19j
YXN0PGludD4oc2l6ZXNbTlNTbWFsbENvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21MZXZlbCkp
Ci0gICAgICAgIHNpemUgPSBOU1NtYWxsQ29udHJvbFNpemU7Ci0gICAgZWxzZQotICAgICAgICBz
aXplID0gTlNNaW5pQ29udHJvbFNpemU7Ci0gICAgaWYgKHNpemUgIT0gW2NlbGwgY29udHJvbFNp
emVdKSAvLyBPbmx5IHVwZGF0ZSBpZiB3ZSBoYXZlIHRvLCBzaW5jZSBBcHBLaXQgZG9lcyB3b3Jr
IGV2ZW4gaWYgdGhlIHNpemUgaXMgdGhlIHNhbWUuCi0gICAgICAgIFtjZWxsIHNldENvbnRyb2xT
aXplOnNpemVdOwotfQotCi1JbnRTaXplIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNpemVGb3JG
b250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Ci17Ci0g
ICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikgewotICAgICAgICBJbnRTaXpl
IHJlc3VsdCA9IHNpemVzW2NvbnRyb2xTaXplRm9yRm9udChzdHlsZSldOwotICAgICAgICByZXR1
cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCksIHJlc3Vs
dC5oZWlnaHQoKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwotICAgIH0KLSAgICByZXR1cm4g
c2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0eWxlKV07Ci19Ci0KLUludFNpemUgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSAhPSAxLjBmKSB7Ci0gICAgICAgIEludFNpemUgcmVzdWx0ID0gc2l6ZXNbY29udHJvbFNpemVG
b3JTeXN0ZW1Gb250KHN0eWxlKV07Ci0gICAgICAgIHJldHVybiBJbnRTaXplKHJlc3VsdC53aWR0
aCgpICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSwgcmVzdWx0LmhlaWdodCgpICogc3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSk7Ci0gICAgfQotICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvclN5
c3RlbUZvbnQoc3R5bGUpXTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRT
aXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRh
a2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCi0gICAgSW50U2l6ZSBzaXplID0g
c2l6ZUZvckZvbnQoc3R5bGUsIHNpemVzKTsKLSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgp
LmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29uc3QKLXsKLSAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJ
c0Fic29sdXRlU2l6ZSh0cnVlKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWls
eShGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5KTsKLQotICAgIE5TRm9udCogZm9udCA9IFtO
U0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNp
emU6Y29udHJvbFNpemVdXTsKLSAgICBmb250RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRG
YW1pbHkoW2ZvbnQgZmFtaWx5TmFtZV0pOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRl
ZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOwotICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpKTsKLQotICAgIC8vIFJlc2V0IGxpbmUgaGVpZ2h0Ci0gICAgc3R5bGUt
PnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotCi0gICAg
aWYgKHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKSkKLSAgICAgICAg
c3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7Ci19Ci0KLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKLXsKLSAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKLSAgICBpZiAo
Zm9udFNpemUgPj0gW05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TUmVndWxh
ckNvbnRyb2xTaXplXSkKLSAgICAgICAgcmV0dXJuIE5TUmVndWxhckNvbnRyb2xTaXplOwotICAg
IGlmIChmb250U2l6ZSA+PSBbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6TlNT
bWFsbENvbnRyb2xTaXplXSkKLSAgICAgICAgcmV0dXJuIE5TU21hbGxDb250cm9sU2l6ZTsKLSAg
ICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAg
IHdrRHJhd0JlemVsZWRUZXh0RmllbGRDZWxsKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25s
eUNvbnRyb2wobykpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3QKLXsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYg
KHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWlu
dEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3Q2Fwc0xvY2tJbmRpY2F0b3IocGFpbnRJbmZvLmNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBh
aW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdCZXplbGVkVGV4dEFyZWEociwgaXNFbmFibGVk
KG8pICYmICFpc1JlYWRPbmx5Q29udHJvbChvKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Ci17Ci19Ci0KLWNvbnN0IGlu
dCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3QKLXsK
LSAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQotICAgIHsKLSAgICAgICAgeyAw
LCAzLCAxLCAzIH0sCi0gICAgICAgIHsgMCwgMywgMiwgMyB9LAotICAgICAgICB7IDAsIDEsIDAs
IDEgfQotICAgIH07Ci0gICAgcmV0dXJuIG1hcmdpbnNbW3BvcHVwQnV0dG9uKCkgY29udHJvbFNp
emVdXTsKLX0KLQotY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBC
dXR0b25TaXplcygpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10g
PSB7IEludFNpemUoMCwgMjEpLCBJbnRTaXplKDAsIDE4KSwgSW50U2l6ZSgwLCAxNSkgfTsKLSAg
ICByZXR1cm4gc2l6ZXM7Ci19Ci0KLWNvbnN0IGludCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cG9wdXBCdXR0b25QYWRkaW5nKE5TQ29udHJvbFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICBzdGF0
aWMgY29uc3QgaW50IHBhZGRpbmdbM11bNF0gPQotICAgIHsKLSAgICAgICAgeyAyLCAyNiwgMywg
OCB9LAotICAgICAgICB7IDIsIDIzLCAzLCA4IH0sCi0gICAgICAgIHsgMiwgMjIsIDMsIDEwIH0K
LSAgICB9OwotICAgIHJldHVybiBwYWRkaW5nW3NpemVdOwotfQotCi1ib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHNl
dFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwotCi0gICAgTlNQb3BVcEJ1dHRvbkNlbGwqIHBv
cHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKLQotICAgIGZsb2F0IHpvb21MZXZlbCA9
IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBJbnRTaXplIHNpemUgPSBwb3B1cEJ1
dHRvblNpemVzKClbW3BvcHVwQnV0dG9uIGNvbnRyb2xTaXplXV07Ci0gICAgc2l6ZS5zZXRIZWln
aHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7Ci0gICAgc2l6ZS5zZXRXaWR0aChyLndpZHRo
KCkpOwotCi0gICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4K
LSAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7Ci0gICAgaWYgKHIud2lkdGgoKSA+PSBtaW5p
bXVtTWVudUxpc3RTaXplKG8tPnN0eWxlKCkpKQotICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZs
YXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6b29tTGV2
ZWwpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQotI2lmbmRlZiBCVUlMRElO
R19PTl9USUdFUgotICAgIC8vIE9uIExlb3BhcmQsIHRoZSBjZWxsIHdpbGwgZHJhdyBvdXRzaWRl
IG9mIHRoZSBnaXZlbiByZWN0LCBzbyB3ZSBoYXZlIHRvIGNsaXAgdG8gdGhlIHJlY3QKLSAgICBw
YWludEluZm8uY29udGV4dC0+Y2xpcChpbmZsYXRlZFJlY3QpOwotI2VuZGlmCi0KLSAgICBpZiAo
em9vbUxldmVsICE9IDEuMGYpIHsKLSAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxh
dGVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKLSAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhl
aWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwotICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55KCkp
OwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwg
em9vbUxldmVsKSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLWluZmxh
dGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKLSAgICB9Ci0KLSAgICBbcG9wdXBCdXR0
b24gZHJhd1dpdGhGcmFtZTppbmZsYXRlZFJlY3QgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwotICAg
IFtwb3B1cEJ1dHRvbiBzZXRDb250cm9sVmlldzpuaWxdOwotCi0gICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnJlc3RvcmUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotY29uc3QgZmxvYXQgYmFz
ZUZvbnRTaXplID0gMTEuMGY7Ci1jb25zdCBmbG9hdCBiYXNlQXJyb3dIZWlnaHQgPSA0LjBmOwot
Y29uc3QgZmxvYXQgYmFzZUFycm93V2lkdGggPSA1LjBmOwotY29uc3QgZmxvYXQgYmFzZVNwYWNl
QmV0d2VlbkFycm93cyA9IDIuMGY7Ci1jb25zdCBpbnQgYXJyb3dQYWRkaW5nTGVmdCA9IDY7Ci1j
b25zdCBpbnQgYXJyb3dQYWRkaW5nUmlnaHQgPSA2OwotY29uc3QgaW50IHBhZGRpbmdCZWZvcmVT
ZXBhcmF0b3IgPSA0OwotY29uc3QgaW50IGJhc2VCb3JkZXJSYWRpdXMgPSA1OwotY29uc3QgaW50
IHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQgPSA4OwotY29uc3QgaW50IHN0eWxlZFBvcHVwUGFkZGlu
Z1RvcCA9IDE7Ci1jb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tID0gMjsKLQotc3Rh
dGljIHZvaWQgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5E
YXRhLCBDR0Zsb2F0KiBvdXREYXRhKQotewotICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAx
LjBmLCAxLjBmLCAxLjBmLCAwLjRmIH07Ci0gICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAx
LjBmLCAxLjBmLCAxLjBmLCAwLjE1ZiB9OwotICAgIGZsb2F0IGEgPSBpbkRhdGFbMF07Ci0gICAg
aW50IGkgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0gICAgICAgIG91dERhdGFb
aV0gPSAoMS4wZiAtIGEpICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKLX0KLQotc3RhdGljIHZv
aWQgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRh
LCBDR0Zsb2F0KiBvdXREYXRhKQotewotICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAxLjBm
LCAxLjBmLCAxLjBmLCAwLjBmIH07Ci0gICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAxLjBm
LCAxLjBmLCAxLjBmLCAwLjNmIH07Ci0gICAgZmxvYXQgYSA9IGluRGF0YVswXTsKLSAgICBpbnQg
aSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgICAgb3V0RGF0YVtpXSA9
ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOwotfQotCi1zdGF0aWMgdm9pZCBN
YWluR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zs
b2F0KiBvdXREYXRhKQotewotICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAwLjBmLCAwLjBm
LCAwLjBmLCAwLjE1ZiB9OwotICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMC4wZiwgMC4w
ZiwgMC4wZiwgMC4wZiB9OwotICAgIGZsb2F0IGEgPSBpbkRhdGFbMF07Ci0gICAgaW50IGkgPSAw
OwotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0gICAgICAgIG91dERhdGFbaV0gPSAoMS4w
ZiAtIGEpICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKLX0KLQotc3RhdGljIHZvaWQgVHJhY2tH
cmFkaWVudEludGVycG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQq
IG91dERhdGEpCi17Ci0gICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAuMGYsIDAuMGYsIDAu
MGYsIDAuNjc4ZiB9OwotICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMC4wZiwgMC4wZiwg
MC4wZiwgMC4xM2YgfTsKLSAgICBmbG9hdCBhID0gaW5EYXRhWzBdOwotICAgIGludCBpID0gMDsK
LSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYg
LSBhKSAqIGRhcmtbaV0gKyBhICogbGlnaHRbaV07Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Ci17Ci0gICAgaWYgKHIuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQot
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBJbnRTaXplIHRvcExlZnRSYWRp
dXM7Ci0gICAgSW50U2l6ZSB0b3BSaWdodFJhZGl1czsKLSAgICBJbnRTaXplIGJvdHRvbUxlZnRS
YWRpdXM7Ci0gICAgSW50U2l6ZSBib3R0b21SaWdodFJhZGl1czsKLQotICAgIG8tPnN0eWxlKCkt
PmdldEJvcmRlclJhZGlpRm9yUmVjdChyLCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywg
Ym90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOwotCi0gICAgaW50IHJhZGl1cyA9
IHRvcExlZnRSYWRpdXMud2lkdGgoKTsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IGNzcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0KLSAgICBG
bG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkg
LyAyLjBmKTsKLSAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyB0b3BDYWxsYmFja3MgPSB7
IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKLSAgICBSZXRhaW5QdHI8Q0dGdW5j
dGlvblJlZj4gdG9wRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBO
VUxMLCA0LCBOVUxMLCAmdG9wQ2FsbGJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1Jl
Zj4gdG9wU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UuZ2V0KCks
IENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1h
a2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC5ib3R0b20oKSksIHRvcEZ1bmN0aW9uLmdl
dCgpLCBmYWxzZSwgZmFsc2UpKTsKLQotICAgIEZsb2F0UmVjdCBib3R0b21HcmFkaWVudChyLngo
KSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgpIC8gMi4wZiwgci53aWR0aCgpIC0gMi4wZiAq
IHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOwotICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJh
Y2tzIGJvdHRvbUNhbGxiYWNrcyA9IHsgMCwgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVM
TCB9OwotICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBib3R0b21GdW5jdGlvbihBZG9wdENG
LCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZib3R0b21DYWxsYmFj
a3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBib3R0b21TaGFkaW5nKEFkb3B0Q0Ys
IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZS5nZXQoKSwgQ0dQb2ludE1ha2UoYm90dG9tR3Jh
ZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UoYm90dG9tR3JhZGll
bnQueCgpLCBib3R0b21HcmFkaWVudC5ib3R0b20oKSksIGJvdHRvbUZ1bmN0aW9uLmdldCgpLCBm
YWxzZSwgZmFsc2UpKTsKLQotICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIG1haW5DYWxs
YmFja3MgPSB7IDAsIE1haW5HcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07Ci0gICAgUmV0YWlu
UHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRl
KE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7Ci0gICAgUmV0YWluUHRy
PENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwo
Y3NwYWNlLmdldCgpLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54
KCksIHIuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwotCi0g
ICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbGVmdFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5n
Q3JlYXRlQXhpYWwoY3NwYWNlLmdldCgpLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQ
b2ludE1ha2Uoci54KCkgKyByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxz
ZSwgZmFsc2UpKTsKLQotICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhB
ZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UuZ2V0KCksIENHUG9pbnRNYWtlKHIu
cmlnaHQoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSks
IG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKLSAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHIpOwotICAgIHBh
aW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAociwgdG9wTGVmdFJhZGl1cywgdG9w
UmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKLSAgICBD
R0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZy5nZXQoKSk7Ci0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZl
KCk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCB0b3BHcmFkaWVudCk7Ci0gICAg
cGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRv
cEdyYWRpZW50KSwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIEludFNpemUoKSwgSW50
U2l6ZSgpKTsKLSAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCB0b3BTaGFkaW5nLmdl
dCgpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotCi0gICAgaWYgKCFib3R0
b21HcmFkaWVudC5pc0VtcHR5KCkpIHsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUo
KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3R0b21HcmFkaWVudCk7
Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoZW5jbG9zaW5n
SW50UmVjdChib3R0b21HcmFkaWVudCksIEludFNpemUoKSwgSW50U2l6ZSgpLCBib3R0b21MZWZ0
UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Ci0gICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5n
KGNvbnRleHQsIGJvdHRvbVNoYWRpbmcuZ2V0KCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4
dC0+cmVzdG9yZSgpOwotICAgIH0KLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0g
ICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByKTsKLSAgICBwYWludEluZm8uY29udGV4
dC0+YWRkUm91bmRlZFJlY3RDbGlwKHIsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBi
b3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Ci0gICAgQ0dDb250ZXh0RHJhd1No
YWRpbmcoY29udGV4dCwgbGVmdFNoYWRpbmcuZ2V0KCkpOwotICAgIENHQ29udGV4dERyYXdTaGFk
aW5nKGNvbnRleHQsIHJpZ2h0U2hhZGluZy5nZXQoKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQt
PnJlc3RvcmUoKTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCi17Ci0gICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHIueCgpICsgby0+c3R5
bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIu
eSgpICsgby0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgci53aWR0aCgpIC0gby0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBvLT5z
dHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHIuaGVpZ2h0KCkgLSBvLT5zdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpIC0gby0+c3R5bGUoKS0+
Ym9yZGVyQm90dG9tV2lkdGgoKSk7Ci0gICAgLy8gRHJhdyB0aGUgZ3JhZGllbnRzIHRvIGdpdmUg
dGhlIHN0eWxlZCBwb3B1cCBtZW51IGEgYnV0dG9uIGFwcGVhcmFuY2UKLSAgICBwYWludE1lbnVM
aXN0QnV0dG9uR3JhZGllbnRzKG8sIHBhaW50SW5mbywgYm91bmRzKTsKLQotICAgIC8vIFNpbmNl
IHdlIGFjdHVhbGx5IGtub3cgdGhlIHNpemUgb2YgdGhlIGNvbnRyb2wgaGVyZSwgd2UgcmVzdHJp
Y3QgdGhlIGZvbnQgc2NhbGUgdG8gbWFrZSBzdXJlIHRoZSBhcnJvd3Mgd2lsbCBmaXQgdmVydGlj
YWxseSBpbiB0aGUgYm91bmRzCi0gICAgZmxvYXQgZm9udFNjYWxlID0gbWluKG8tPnN0eWxlKCkt
PmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemUsIGJvdW5kcy5oZWlnaHQoKSAvIChiYXNlQXJyb3dI
ZWlnaHQgKiAyICsgYmFzZVNwYWNlQmV0d2VlbkFycm93cykpOwotICAgIGZsb2F0IGNlbnRlclkg
PSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMi4wZjsKLSAgICBmbG9hdCBhcnJvd0hl
aWdodCA9IGJhc2VBcnJvd0hlaWdodCAqIGZvbnRTY2FsZTsKLSAgICBmbG9hdCBhcnJvd1dpZHRo
ID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7Ci0gICAgZmxvYXQgbGVmdEVkZ2UgPSBib3Vu
ZHMucmlnaHQoKSAtIGFycm93UGFkZGluZ1JpZ2h0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpIC0gYXJyb3dXaWR0aDsKLSAgICBmbG9hdCBzcGFjZUJldHdlZW5BcnJvd3MgPSBiYXNlU3Bh
Y2VCZXR3ZWVuQXJyb3dzICogZm9udFNjYWxlOwotCi0gICAgaWYgKGJvdW5kcy53aWR0aCgpIDwg
YXJyb3dXaWR0aCArIGFycm93UGFkZGluZ0xlZnQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZl
KCk7Ci0KLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCktPmNv
bG9yKCksIG8tPnN0eWxlKCktPmNvbG9yU3BhY2UoKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKLQotICAgIEZsb2F0UG9pbnQgYXJyb3cxWzNdOwot
ICAgIGFycm93MVswXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgLSBzcGFjZUJldHdl
ZW5BcnJvd3MgLyAyLjBmKTsKLSAgICBhcnJvdzFbMV0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsg
YXJyb3dXaWR0aCwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOwotICAgIGFy
cm93MVsyXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVy
WSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYgLSBhcnJvd0hlaWdodCk7Ci0KLSAgICAvLyBE
cmF3IHRoZSB0b3AgYXJyb3cKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHln
b24oMywgYXJyb3cxLCB0cnVlKTsKLQotICAgIEZsb2F0UG9pbnQgYXJyb3cyWzNdOwotICAgIGFy
cm93MlswXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJv
d3MgLyAyLjBmKTsKLSAgICBhcnJvdzJbMV0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dX
aWR0aCwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOwotICAgIGFycm93Mlsy
XSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVyWSArIHNw
YWNlQmV0d2VlbkFycm93cyAvIDIuMGYgKyBhcnJvd0hlaWdodCk7Ci0KLSAgICAvLyBEcmF3IHRo
ZSBib3R0b20gYXJyb3cKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24o
MywgYXJyb3cyLCB0cnVlKTsKLQotICAgIENvbG9yIGxlZnRTZXBhcmF0b3JDb2xvcigwLCAwLCAw
LCA0MCk7Ci0gICAgQ29sb3IgcmlnaHRTZXBhcmF0b3JDb2xvcigyNTUsIDI1NSwgMjU1LCA0MCk7
Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoZSBzZXBhcmF0b3IgdGhpY2tuZXNzIGFuZCBzcGFj
ZSBiZSBzY2FsZWQgdXAgYnkgZm9udFNjYWxlPwotICAgIGludCBzZXBhcmF0b3JTcGFjZSA9IDI7
IC8vIERlbGliZXJhdGVseSBpZ25vcmVzIHpvb20gc2luY2UgaXQgbG9va3MgbmljZXIgaWYgaXQg
c3RheXMgdGhpbi4KLSAgICBpbnQgbGVmdEVkZ2VPZlNlcGFyYXRvciA9IHN0YXRpY19jYXN0PGlu
dD4obGVmdEVkZ2UgLSBhcnJvd1BhZGRpbmdMZWZ0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKTsgLy8gRklYTUU6IFJvdW5kPwotCi0gICAgLy8gRHJhdyB0aGUgc2VwYXJhdG9yIHRvIHRo
ZSBsZWZ0IG9mIHRoZSBhcnJvd3MKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhp
Y2tuZXNzKDEuMGYpOyAvLyBEZWxpYmVyYXRlbHkgaWdub3JlcyB6b29tIHNpbmNlIGl0IGxvb2tz
IG5pY2VyIGlmIGl0IHN0YXlzIHRoaW4uCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9r
ZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IobGVmdFNlcGFyYXRvckNvbG9yLCBEZXZpY2VDb2xvclNwYWNlKTsKLSAgICBwYWludEluZm8u
Y29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLnko
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZT
ZXBhcmF0b3IsIGJvdW5kcy5ib3R0b20oKSkpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dFN0cm9rZUNvbG9yKHJpZ2h0U2VwYXJhdG9yQ29sb3IsIERldmljZUNvbG9yU3BhY2UpOwotICAg
IHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9y
ICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJv
dW5kcy5ib3R0b20oKSkpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBjb25zdCBJbnRTaXplKiBtZW51TGlzdEJ1dHRv
blNpemVzKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6
ZSgwLCAyMSksIEludFNpemUoMCwgMTgpLCBJbnRTaXplKDAsIDE1KSB9OwotICAgIHJldHVybiBz
aXplczsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RNZW51TGlzdFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqIGUpIGNvbnN0Ci17Ci0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xT
aXplRm9yRm9udChzdHlsZSk7Ci0KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHls
ZS0+cmVzZXRQYWRkaW5nKCk7Ci0KLSAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0g
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwotCi0gICAgLy8gV2hpdGUtc3BhY2Ug
aXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7Ci0KLSAgICAv
LyBTZXQgdGhlIGZvcmVncm91bmQgY29sb3IgdG8gYmxhY2sgb3IgZ3JheSB3aGVuIHdlIGhhdmUg
dGhlIGFxdWEgbG9vay4KLSAgICAvLyBDYXN0IHRvIFJHQjMyIGlzIHRvIHdvcmsgYXJvdW5kIGEg
Y29tcGlsZXIgYnVnLgotICAgIHN0eWxlLT5zZXRDb2xvcihlICYmIGUtPmlzRW5hYmxlZEZvcm1D
b250cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFy
a0dyYXkpOwotCi0gICAgLy8gU2V0IHRoZSBidXR0b24ncyB2ZXJ0aWNhbCBzaXplLgotICAgIHNl
dFNpemVGcm9tRm9udChzdHlsZSwgbWVudUxpc3RCdXR0b25TaXplcygpKTsKLQotICAgIC8vIE91
ciBmb250IGlzIGxvY2tlZCB0byB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGZvbnQgc2l6ZSBmb3Ig
dGhlIGNvbnRyb2wuICBUbyBjbGFyaWZ5LCB3ZSBmaXJzdCB1c2UgdGhlIENTUy1zcGVjaWZpZWQg
Zm9udCB0byBmaWd1cmUgb3V0Ci0gICAgLy8gYSByZWFzb25hYmxlIGNvbnRyb2wgc2l6ZSwgYnV0
IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMgZGV0ZXJtaW5lZCwgd2UgdGhyb3cgdGhhdCBmb250
IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUKLSAgICAvLyBzeXN0ZW0gZm9udCBmb3IgdGhl
IGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgotICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc2VsZWN0
b3IsIHN0eWxlLCBjb250cm9sU2l6ZSk7Ci0KLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwot
fQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29u
dHJvbFNpemVGb3JGb250KHN0eWxlKSlbbGVmdFBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQp
Ci0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdMZWZ0ICogc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewot
ICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0
dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBh
ZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpIHsKLSAgICAgICAgZmxvYXQgZm9udFNjYWxlID0g
c3R5bGUtPmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemU7Ci0gICAgICAgIGZsb2F0IGFycm93V2lk
dGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4oY2VpbGYoYXJyb3dXaWR0aCArIChhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRk
aW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yKSAqIHN0eWxlLT5lZmZlY3RpdmVab29t
KCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17
Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICBy
ZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3RvcFBh
ZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBh
ZGRpbmdUb3AgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIHJldHVybiAwOwotfQotCi1p
bnQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09
IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9s
U2l6ZUZvckZvbnQoc3R5bGUpKVtib3R0b21QYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29t
KCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQot
ICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tICogc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxl
LT5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwotCi0gICAgc3R5bGUtPnJlc2V0UGFkZGluZygp
OwotICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRpdXMoSW50U2l6ZShpbnQoYmFzZUJvcmRlclJhZGl1
cyArIGZvbnRTY2FsZSAtIDEpLCBpbnQoYmFzZUJvcmRlclJhZGl1cyArIGZvbnRTY2FsZSAtIDEp
KSk7IC8vIEZJWE1FOiBSb3VuZCB1cD8KLQotICAgIGNvbnN0IGludCBtaW5IZWlnaHQgPSAxNTsK
LSAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7Ci0KLSAg
ICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3Rh
dGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIE5TUG9w
VXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRvbiA9IHRoaXMtPnBvcHVwQnV0dG9uKCk7Ci0KLSAgICAv
LyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIHJlY3RhbmdsZSB3ZSdyZSBwYWlu
dGluZyBpbnRvLgotICAgIHNldENvbnRyb2xTaXplKHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNp
emVzKCksIHIuc2l6ZSgpLCBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwotCi0gICAgLy8g
VXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgotICAgIHVwZGF0ZUFjdGl2
ZVN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKLSAgICB1cGRhdGVDaGVja2VkU3RhdGUocG9wdXBCdXR0
b24sIG8pOwotICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShwb3B1cEJ1dHRvbiwgbyk7Ci0gICAgdXBk
YXRlUHJlc3NlZFN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKLSAgICB1cGRhdGVGb2N1c2VkU3RhdGUo
cG9wdXBCdXR0b24sIG8pOwotfQotCi1jb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjptZW51TGlzdFNpemVzKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBz
aXplc1szXSA9IHsgSW50U2l6ZSg5LCAwKSwgSW50U2l6ZSg1LCAwKSwgSW50U2l6ZSgwLCAwKSB9
OwotICAgIHJldHVybiBzaXplczsKLX0KLQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6Om1p
bmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVy
biBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgbWVudUxpc3RTaXplcygpKS53aWR0aCgpOwotfQot
Ci1jb25zdCBpbnQgdHJhY2tXaWR0aCA9IDU7Ci1jb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOwot
Ci12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0g
ICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBJbnRSZWN0
IGJvdW5kcyA9IHI7Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpOwotICAgIGZsb2F0IHpvb21lZFRyYWNrV2lkdGggPSB0cmFja1dpZHRoICogem9vbUxl
dmVsOwotCi0gICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpv
bnRhbFBhcnQgfHwgby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09ICBNZWRpYVNsaWRlclBhcnQp
IHsKLSAgICAgICAgYm91bmRzLnNldEhlaWdodCh6b29tZWRUcmFja1dpZHRoKTsKLSAgICAgICAg
Ym91bmRzLnNldFkoci55KCkgKyByLmhlaWdodCgpIC8gMiAtIHpvb21lZFRyYWNrV2lkdGggLyAy
KTsKLSAgICB9IGVsc2UgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0
aWNhbFBhcnQpIHsKLSAgICAgICAgYm91bmRzLnNldFdpZHRoKHpvb21lZFRyYWNrV2lkdGgpOwot
ICAgICAgICBib3VuZHMuc2V0WChyLngoKSArIHIud2lkdGgoKSAvIDIgLSB6b29tZWRUcmFja1dp
ZHRoIC8gMik7Ci0gICAgfQotCi0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2Fs
Q29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgUmV0YWluUHRyPENHQ29s
b3JTcGFjZVJlZj4gY3NwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigp
KTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRv
UmVjdChjb250ZXh0LCBib3VuZHMpOwotCi0gICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3Mg
bWFpbkNhbGxiYWNrcyA9IHsgMCwgVHJhY2tHcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07Ci0g
ICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0
aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7Ci0gICAg
UmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmc7Ci0gICAgaWYgKG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG1haW5TaGFkaW5n
LmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLmdldCgpLCBDR1BvaW50TWFrZShi
b3VuZHMueCgpLCAgYm91bmRzLmJvdHRvbSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLnJpZ2h0KCks
IGJvdW5kcy5ib3R0b20oKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7Ci0g
ICAgZWxzZQotICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFs
KGNzcGFjZS5nZXQoKSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy55KCkpLCBDR1Bv
aW50TWFrZShib3VuZHMueCgpLCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCks
IGZhbHNlLCBmYWxzZSkpOwotCi0gICAgSW50U2l6ZSByYWRpdXModHJhY2tSYWRpdXMsIHRyYWNr
UmFkaXVzKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGJvdW5k
cywKLSAgICAgICAgcmFkaXVzLCByYWRpdXMsCi0gICAgICAgIHJhZGl1cywgcmFkaXVzKTsKLSAg
ICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZy5nZXQoKSk7Ci0gICAg
cGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAg
IHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Ci19Ci0KLWNvbnN0IGZsb2F0IHZlcnRpY2FsU2xpZGVy
SGVpZ2h0UGFkZGluZyA9IDAuMWY7Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFp
bnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgQVNTRVJUKG8tPnBhcmVu
dCgpLT5pc1NsaWRlcigpKTsKLQotICAgIE5TU2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJDZWxsID0g
by0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0Ci0gICAg
ICAgID8gc2xpZGVyVGh1bWJWZXJ0aWNhbCgpCi0gICAgICAgIDogc2xpZGVyVGh1bWJIb3Jpem9u
dGFsKCk7Ci0KLSAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBh
aW50SW5mby5jb250ZXh0KTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2Ug
cmVzcG9uZCB0by4KLSAgICB1cGRhdGVBY3RpdmVTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8tPnBh
cmVudCgpKTsKLSAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCBvLT5wYXJl
bnQoKSk7Ci0gICAgdXBkYXRlRm9jdXNlZFN0YXRlKHNsaWRlclRodW1iQ2VsbCwgby0+cGFyZW50
KCkpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwcmVzc2VkIHN0YXRlIHVzaW5nIHRoZSBOU0NlbGwg
dHJhY2tpbmcgbWV0aG9kcywgc2luY2UgdGhhdCdzIGhvdyBOU1NsaWRlckNlbGwga2VlcHMgdHJh
Y2sgb2YgaXQuCi0gICAgYm9vbCBvbGRQcmVzc2VkOwotICAgIGlmIChvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG9sZFByZXNzZWQg
PSBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNzZWQ7Ci0gICAgZWxzZQotICAgICAgICBvbGRQ
cmVzc2VkID0gbV9pc1NsaWRlclRodW1iSG9yaXpvbnRhbFByZXNzZWQ7Ci0KLSAgICBib29sIHBy
ZXNzZWQgPSB0b1JlbmRlclNsaWRlcihvLT5wYXJlbnQoKSktPmluRHJhZ01vZGUoKTsKLQotICAg
IGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQp
Ci0gICAgICAgIG1faXNTbGlkZXJUaHVtYlZlcnRpY2FsUHJlc3NlZCA9IHByZXNzZWQ7Ci0gICAg
ZWxzZQotICAgICAgICBtX2lzU2xpZGVyVGh1bWJIb3Jpem9udGFsUHJlc3NlZCA9IHByZXNzZWQ7
Ci0KLSAgICBpZiAocHJlc3NlZCAhPSBvbGRQcmVzc2VkKSB7Ci0gICAgICAgIGlmIChwcmVzc2Vk
KQotICAgICAgICAgICAgW3NsaWRlclRodW1iQ2VsbCBzdGFydFRyYWNraW5nQXQ6TlNQb2ludCgp
IGluVmlldzpuaWxdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc2xpZGVyVGh1bWJDZWxs
IHN0b3BUcmFja2luZzpOU1BvaW50KCkgYXQ6TlNQb2ludCgpIGluVmlldzpuaWwgbW91c2VJc1Vw
OllFU107Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7Ci0gICAgLy8gTWFrZSB0
aGUgaGVpZ2h0IG9mIHRoZSB2ZXJ0aWNhbCBzbGlkZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5TU2xp
ZGVyQ2VsbCB3aWxsIGRyYXcgYSB2ZXJ0aWNhbCBzbGlkZXIuCi0gICAgaWYgKG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgYm91bmRz
LnNldEhlaWdodChib3VuZHMuaGVpZ2h0KCkgKyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcg
KiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNhdmUoKTsKLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCk7Ci0KLSAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gYm91bmRzOwotICAgIGlmICh6b29t
TGV2ZWwgIT0gMS4wZikgewotICAgICAgICB1bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRS
ZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOwotICAgICAgICB1bnpvb21lZFJlY3Quc2V0SGVpZ2h0
KHVuem9vbWVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZlbCk7Ci0gICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUodW56b29tZWRSZWN0LngoKSwgdW56b29tZWRSZWN0LnkoKSk7Ci0g
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29t
TGV2ZWwpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRS
ZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwotICAgIH0KLQotICAgIFtzbGlkZXJUaHVtYkNl
bGwgZHJhd1dpdGhGcmFtZTp1bnpvb21lZFJlY3QgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwotICAg
IFtzbGlkZXJUaHVtYkNlbGwgc2V0Q29udHJvbFZpZXc6bmlsXTsKLQotICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwotICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQp
OwotCi0gICAgc2V0U2VhcmNoQ2VsbFN0YXRlKG8sIHIpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKLQotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKTsKLQotICAgIEludFJlY3QgdW56b29tZWRSZWN0ID0gcjsKLQotICAgIGlmICh6b29t
TGV2ZWwgIT0gMS4wZikgewotICAgICAgICB1bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRS
ZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOwotICAgICAgICB1bnpvb21lZFJlY3Quc2V0SGVpZ2h0
KHVuem9vbWVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZlbCk7Ci0gICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUodW56b29tZWRSZWN0LngoKSwgdW56b29tZWRSZWN0LnkoKSk7Ci0g
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29t
TGV2ZWwpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRS
ZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgc2Vh
cmNoIGJ1dHRvbiB0byBuaWwgYmVmb3JlIGRyYXdpbmcuICBUaGVuIHJlc2V0IGl0IHNvIHdlIGNh
biBkcmF3IGl0IGxhdGVyLgotICAgIFtzZWFyY2ggc2V0U2VhcmNoQnV0dG9uQ2VsbDpuaWxdOwot
Ci0gICAgW3NlYXJjaCBkcmF3V2l0aEZyYW1lOk5TUmVjdCh1bnpvb21lZFJlY3QpIGluVmlldzpG
bGlwcGVkVmlldygpXTsKLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIGlmIChbc2VhcmNo
IHNob3dzRmlyc3RSZXNwb25kZXJdKQotICAgICAgICB3a0RyYXdUZXh0RmllbGRDZWxsRm9jdXNS
aW5nKHNlYXJjaCwgTlNSZWN0KHVuem9vbWVkUmVjdCkpOwotI2VuZGlmCi0KLSAgICBbc2VhcmNo
IHNldENvbnRyb2xWaWV3Om5pbF07Ci0gICAgW3NlYXJjaCByZXNldFNlYXJjaEJ1dHRvbkNlbGxd
OwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JikKLXsKLSAgICBOU1NlYXJjaEZpZWxkQ2Vs
bCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7Ci0KLSAgICBbc2VhcmNoIHNldENvbnRyb2xTaXpl
OmNvbnRyb2xTaXplRm9yRm9udChvLT5zdHlsZSgpKV07Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHZh
cmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCi0gICAgdXBkYXRlQWN0aXZlU3RhdGUoc2VhcmNo
LCBvKTsKLSAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2VhcmNoLCBvKTsKLSAgICB1cGRhdGVGb2N1
c2VkU3RhdGUoc2VhcmNoLCBvKTsKLX0KLQotY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6c2VhcmNoRmllbGRTaXplcygpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IElu
dFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjIpLCBJbnRTaXplKDAsIDE5KSwgSW50U2l6
ZSgwLCAxNykgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsK
LSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4g
d2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5z
aWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3
aWR0aCBvZiB0aGUgY29udHJvbC4KLSAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZp
ZWxkU2l6ZXMoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICAvLyBPdmVycmlkZSBib3JkZXIuCi0gICAgc3R5
bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgY29uc3Qgc2hvcnQgYm9yZGVyV2lkdGggPSAyICogc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRl
cldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyTGVmdFN0eWxlKElOU0VUKTsKLSAgICBzdHls
ZS0+c2V0Qm9yZGVyUmlnaHRXaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRl
clJpZ2h0U3R5bGUoSU5TRVQpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJCb3R0b21XaWR0aChib3Jk
ZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlckJvdHRvbVN0eWxlKElOU0VUKTsKLSAgICBz
dHlsZS0+c2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3Jk
ZXJUb3BTdHlsZShJTlNFVCk7Ci0KLSAgICAvLyBPdmVycmlkZSBoZWlnaHQuCi0gICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoQXV0bykpOwotICAgIHNldFNlYXJjaEZpZWxkU2l6ZShzdHlsZSk7
Ci0KLSAgICAvLyBPdmVycmlkZSBwYWRkaW5nIHNpemUgdG8gbWF0Y2ggQXBwS2l0IHRleHQgcG9z
aXRpb25pbmcuCi0gICAgY29uc3QgaW50IHBhZGRpbmcgPSAxICogc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAg
ICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHls
ZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLQotICAgIE5TQ29u
dHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwotICAgIHNl
dEZvbnRGcm9tQ29udHJvbFNpemUoc2VsZWN0b3IsIHN0eWxlLCBjb250cm9sU2l6ZSk7Ci0KLSAg
ICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewot
ICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICBp
ZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBzZXRTZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJlbmRlcmVyKCksIHIpOwotCi0gICAgTlNT
ZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwotCi0gICAgdXBkYXRlQWN0
aXZlU3RhdGUoW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSwgbyk7Ci0gICAgdXBkYXRlUHJlc3Nl
ZFN0YXRlKFtzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0sIG8pOwotCi0gICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNhdmUoKTsKLQotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKTsKLQotICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggY2FuY2Vs
QnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hS
ZWN0KCkpXTsKLSAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+
cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOwotCi0gICAgRmxvYXRSZWN0IHVuem9vbWVk
UmVjdChsb2NhbEJvdW5kcyk7Ci0gICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7Ci0gICAgICAg
IHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7
Ci0gICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8g
em9vbUxldmVsKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21l
ZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOwotICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0Lnko
KSk7Ci0gICAgfQotCi0gICAgW1tzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFt
ZTp1bnpvb21lZFJlY3QgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwotICAgIFtbc2VhcmNoIGNhbmNl
bEJ1dHRvbkNlbGxdIHNldENvbnRyb2xWaWV3Om5pbF07Ci0KLSAgICBwYWludEluZm8uY29udGV4
dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotY29uc3QgSW50U2l6ZSogUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdAotewotICAgIHN0
YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDE2LCAxMyksIEludFNpemUo
MTMsIDExKSwgSW50U2l6ZSgxMywgOSkgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLXZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
LXsKLSAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgY2FuY2VsQnV0
dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwotfQotCi1jb25zdCBJbnRTaXplKiBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpyZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdAotewotICAgIHN0
YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDE5LCAxMyksIEludFNpemUo
MTcsIDExKSwgSW50U2l6ZSgxNywgOSkgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLWNvbnN0
IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5Owotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNpemUgPSBz
aXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlSZXN1bHRzT2Zmc2V0LCBGaXhl
ZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3Rl
bUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0
aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBOb2RlKiBpbnB1dCA9IG8tPm5v
ZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+
aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2V0U2VhcmNoQ2VsbFN0YXRl
KGlucHV0LT5yZW5kZXJlcigpLCByKTsKLQotICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2gg
PSB0aGlzLT5zZWFyY2goKTsKLQotICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNo
QnV0dG9uQ2VsbF0sIG8pOwotCi0gICAgaWYgKFtzZWFyY2ggc2VhcmNoTWVudVRlbXBsYXRlXSAh
PSBuaWwpCi0gICAgICAgIFtzZWFyY2ggc2V0U2VhcmNoTWVudVRlbXBsYXRlOm5pbF07Ci0KLSAg
ICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3Vu
ZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07Ci0gICAgbG9j
YWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxv
Y2FsQm91bmRzLCByKTsKLQotICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRo
RnJhbWU6bG9jYWxCb3VuZHMgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwotICAgIFtbc2VhcmNoIHNl
YXJjaEJ1dHRvbkNlbGxdIHNldENvbnRyb2xWaWV3Om5pbF07Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1jb25zdCBpbnQgcmVzdWx0c0Fycm93V2lkdGggPSA1Owotdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRT
aXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkp
OwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpICsgcmVzdWx0c0Fycm93
V2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQo
KSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwotfQotCi1ib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKLXsKLSAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0
b3JOb2RlKCk7Ci0gICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigp
LCByKTsKLQotICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsK
LQotICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0sIG8pOwot
Ci0gICAgaWYgKCFbc2VhcmNoIHNlYXJjaE1lbnVUZW1wbGF0ZV0pCi0gICAgICAgIFtzZWFyY2gg
c2V0U2VhcmNoTWVudVRlbXBsYXRlOnNlYXJjaE1lbnVUZW1wbGF0ZSgpXTsKLQotICAgIHBhaW50
SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNo
IHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9y
ZGVyQm94UmVjdCgpKV07Ci0gICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3Qo
aW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKLQotICAgIEludFJlY3QgdW56
b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKLSAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKLSAg
ICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxl
dmVsKTsKLSAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0
KCkgLyB6b29tTGV2ZWwpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVu
em9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55KCkpOwotICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7Ci0gICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJl
Y3QueSgpKTsKLSAgICB9Ci0KLSAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0
aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07Ci0gICAgW1tzZWFyY2gg
c2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKLQotICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWNvbnN0IGludCBz
bGlkZXJUaHVtYldpZHRoID0gMTU7Ci1jb25zdCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsK
KyNpZiBFTkFCTEUoVklERU8pCiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBj
b25zdAogewotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KTsKLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQgfHwgby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KSB7Ci0gICAgICAgIG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2Fz
dDxpbnQ+KHNsaWRlclRodW1iV2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwotICAgICAgICBv
LT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJI
ZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwotICAgIH0KLQotI2lmIEVOQUJMRShWSURFTykK
ICAgICBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJT
aXplKG8pOwotI2VuZGlmCiB9CiAKLSNpZiBFTkFCTEUoVklERU8pCiBib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnNob3VsZFJlbmRlck1lZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQgcGFy
dCwgRWxlbWVudCogZSkKIHsKICAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVt
OjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KHBhcnQsIGUpOwpAQCAtMTUzNSwyMSArMTI2
LDYgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFIKICAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250
cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29udHJvbHNQYXJ0KE1lZGlhU2xpZGVyLCBvYmplY3Qs
IHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9s
c1BhcnQoTWVkaWFWb2x1bWVTbGlkZXIsIG9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0KLQot
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHND
aHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVNsaWRlclRodW1iLCBvYmplY3Qs
IHBhaW50SW5mbywgcmVjdCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9s
c1BhcnQoTWVkaWFWb2x1bWVTbGlkZXJUaHVtYiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwot
fQotCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFDb250cm9sc0JhY2tn
cm91bmQoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIFJlbmRlck1l
ZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVRpbWVsaW5l
Q29udGFpbmVyLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CkBAIC0xNTYwLDY0ICsxMzYsMTYg
QEAgU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxl
U2hlZXQoKQogICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hl
ZXQpKTsKIH0KIAotI2VuZGlmCi0KLU5TUG9wVXBCdXR0b25DZWxsKiBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwb3B1cEJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BvcHVwQnV0dG9uKSB7
Ci0gICAgICAgIG1fcG9wdXBCdXR0b24uYWRvcHROUyhbW05TUG9wVXBCdXR0b25DZWxsIGFsbG9j
XSBpbml0VGV4dENlbGw6QCIiIHB1bGxzRG93bjpOT10pOwotICAgICAgICBbbV9wb3B1cEJ1dHRv
bi5nZXQoKSBzZXRVc2VzSXRlbUZyb21NZW51Ok5PXTsKLSAgICAgICAgW21fcG9wdXBCdXR0b24u
Z2V0KCkgc2V0Rm9jdXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5cGVFeHRlcmlvcl07Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1fcG9wdXBCdXR0b24uZ2V0KCk7Ci19Ci0KLU5TU2VhcmNoRmllbGRDZWxs
KiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZWFyY2goKSBjb25zdAotewotICAgIGlmICghbV9z
ZWFyY2gpIHsKLSAgICAgICAgbV9zZWFyY2guYWRvcHROUyhbW05TU2VhcmNoRmllbGRDZWxsIGFs
bG9jXSBpbml0VGV4dENlbGw6QCIiXSk7Ci0gICAgICAgIFttX3NlYXJjaC5nZXQoKSBzZXRCZXpl
bFN0eWxlOk5TVGV4dEZpZWxkUm91bmRlZEJlemVsXTsKLSAgICAgICAgW21fc2VhcmNoLmdldCgp
IHNldEJlemVsZWQ6WUVTXTsKLSAgICAgICAgW21fc2VhcmNoLmdldCgpIHNldEVkaXRhYmxlOllF
U107Ci0gICAgICAgIFttX3NlYXJjaC5nZXQoKSBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5n
VHlwZUV4dGVyaW9yXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9zZWFyY2guZ2V0KCk7Ci19Ci0K
LU5TTWVudSogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2VhcmNoTWVudVRlbXBsYXRlKCkgY29u
c3QKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghbV9zZWFyY2hNZW51
VGVtcGxhdGUpCi0gICAgICAgIG1fc2VhcmNoTWVudVRlbXBsYXRlLmFkb3B0TlMoW1tOU01lbnUg
YWxsb2NdIGluaXRXaXRoVGl0bGU6QCIiXSk7Ci0KLSAgICByZXR1cm4gbV9zZWFyY2hNZW51VGVt
cGxhdGUuZ2V0KCk7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFp
bnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNsaWRlciwgb2JqZWN0LCBwYWludEluZm8s
IHJlY3QpOwogfQogCi1OU1NsaWRlckNlbGwqIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNsaWRl
clRodW1iSG9yaXpvbnRhbCgpIGNvbnN0Citib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBh
aW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICBpZiAoIW1fc2xpZGVyVGh1bWJIb3Jpem9udGFsKSB7Ci0gICAgICAgIG1fc2xpZGVyVGh1
bWJIb3Jpem9udGFsLmFkb3B0TlMoW1tOU1NsaWRlckNlbGwgYWxsb2NdIGluaXRdKTsKLSAgICAg
ICAgW21fc2xpZGVyVGh1bWJIb3Jpem9udGFsLmdldCgpIHNldFRpdGxlOm5pbF07Ci0gICAgICAg
IFttX3NsaWRlclRodW1iSG9yaXpvbnRhbC5nZXQoKSBzZXRTbGlkZXJUeXBlOk5TTGluZWFyU2xp
ZGVyXTsKLSAgICAgICAgW21fc2xpZGVyVGh1bWJIb3Jpem9udGFsLmdldCgpIHNldENvbnRyb2xT
aXplOk5TU21hbGxDb250cm9sU2l6ZV07Ci0gICAgICAgIFttX3NsaWRlclRodW1iSG9yaXpvbnRh
bC5nZXQoKSBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9zbGlkZXJUaHVtYkhvcml6b250YWwuZ2V0KCk7CisgICAgcmV0dXJu
IFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRp
YVZvbHVtZVNsaWRlclRodW1iLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLU5TU2xp
ZGVyQ2VsbCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2xpZGVyVGh1bWJWZXJ0aWNhbCgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX3NsaWRlclRodW1iVmVydGljYWwpIHsKLSAgICAgICAgbV9zbGlk
ZXJUaHVtYlZlcnRpY2FsLmFkb3B0TlMoW1tOU1NsaWRlckNlbGwgYWxsb2NdIGluaXRdKTsKLSAg
ICAgICAgW21fc2xpZGVyVGh1bWJWZXJ0aWNhbC5nZXQoKSBzZXRUaXRsZTpuaWxdOwotICAgICAg
ICBbbV9zbGlkZXJUaHVtYlZlcnRpY2FsLmdldCgpIHNldFNsaWRlclR5cGU6TlNMaW5lYXJTbGlk
ZXJdOwotICAgICAgICBbbV9zbGlkZXJUaHVtYlZlcnRpY2FsLmdldCgpIHNldENvbnRyb2xTaXpl
Ok5TU21hbGxDb250cm9sU2l6ZV07Ci0gICAgICAgIFttX3NsaWRlclRodW1iVmVydGljYWwuZ2V0
KCkgc2V0Rm9jdXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5cGVFeHRlcmlvcl07Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1fc2xpZGVyVGh1bWJWZXJ0aWNhbC5nZXQoKTsKLX0KKyNlbmRpZgogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMuaAppbmRleCBjYmE5
MjdmLi40OGJmODE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKQEAgLTg4LDggKzg4
LDEyIEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihp
bnQgY3NzVmFsdWVJZCkgY29uc3Q7Ci0KKyAgICB2aXJ0dWFsIGJvb2wgdXNlc1Rlc3RNb2RlRm9j
dXNSaW5nQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5TVmlldyogZG9jdW1lbnRWaWV3Rm9y
KFJlbmRlck9iamVjdCopIGNvbnN0OwogcHJvdGVjdGVkOgorICAgIFJlbmRlclRoZW1lTWFjKCk7
CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVNYWMoKTsKKwogICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c1NlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMTQ5LDExICsxNTMs
MTAgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9sc1N0
eWxlU2hlZXQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQ
YXJ0KENvbnRyb2xQYXJ0LCBFbGVtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lZGlh
U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCopIGNvbnN0OwogI2VuZGlmCiAKIHByaXZhdGU6
Ci0gICAgUmVuZGVyVGhlbWVNYWMoKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZU1hYygpOwog
CiAgICAgSW50UmVjdCBpbmZsYXRlUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYs
IGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxldmVsID0gMS4wZikgY29uc3Q7CiAKQEAg
LTE3Miw2ICsxNzUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRlKE5T
Q2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCopOwogICAgIHZvaWQgdXBkYXRlRm9jdXNlZFN0YXRl
KE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCopOwogICAgIHZvaWQgdXBkYXRlUHJlc3NlZFN0
YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVBY3RpdmVTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKSB7fQogCiAgICAgLy8g
SGVscGVycyBmb3IgYWRqdXN0aW5nIGFwcGVhcmFuY2UgYW5kIGZvciBwYWludGluZwogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IGZlNTBjYzQuLjNjMzE2MTYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC0xMTQsMTEgKzExNCwxMyBAQCBlbnVtIHsKICAg
ICBsZWZ0UGFkZGluZwogfTsKIAorI2lmIFBMQVRGT1JNKE1BQykKIFBhc3NSZWZQdHI8UmVuZGVy
VGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSopCiB7CiAgICAgc3RhdGljIFJl
bmRlclRoZW1lKiBydCA9IFJlbmRlclRoZW1lTWFjOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7CiAg
ICAgcmV0dXJuIHJ0OwogfQorI2VuZGlmCiAKIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRl
clRoZW1lTWFjOjpjcmVhdGUoKQogewpAQCAtNDU3LDYgKzQ1OSwyMSBAQCBDb2xvciBSZW5kZXJU
aGVtZU1hYzo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0CiAgICAgcmV0dXJuIGNv
bG9yOwogfQogCitib29sIFJlbmRlclRoZW1lTWFjOjp1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0Nv
bG9yKCk7Cit9CisKK05TVmlldyogUmVuZGVyVGhlbWVNYWM6OmRvY3VtZW50Vmlld0ZvcihSZW5k
ZXJPYmplY3QqIG8pIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBvLT52
aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKTsKKyNlbHNlCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwogYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9y
ZGVyRGF0YSYgYm9yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikg
Y29uc3QKIHsKQEAgLTc3NCw3ICs3OTEsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZgogICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5m
bGF0ZWRSZWN0LnkoKSk7CiAgICAgfQogCi0gICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6
aW5mbGF0ZWRSZWN0IGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXco
KV07CisgICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzpk
b2N1bWVudFZpZXdGb3IobyldOwogICAgIFtwb3B1cEJ1dHRvbiBzZXRDb250cm9sVmlldzpuaWxd
OwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTExMDksNiArMTEyNiw3
IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJl
bmRlck9iamVjdCogbywgY29uc3QgSW50UmVjCiAgICAgc2V0Q29udHJvbFNpemUocG9wdXBCdXR0
b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgci5zaXplKCksIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8u
CisgICAgdXBkYXRlQWN0aXZlU3RhdGUocG9wdXBCdXR0b24sIG8pOwogICAgIHVwZGF0ZUNoZWNr
ZWRTdGF0ZShwb3B1cEJ1dHRvbiwgbyk7CiAgICAgdXBkYXRlRW5hYmxlZFN0YXRlKHBvcHVwQnV0
dG9uLCBvKTsKICAgICB1cGRhdGVQcmVzc2VkU3RhdGUocG9wdXBCdXR0b24sIG8pOwpAQCAtMTE5
MSw2ICsxMjA5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnQKICAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIC8v
IFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVBY3Rp
dmVTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8tPnBhcmVudCgpKTsKICAgICB1cGRhdGVFbmFibGVk
U3RhdGUoc2xpZGVyVGh1bWJDZWxsLCBvLT5wYXJlbnQoKSk7CiAgICAgdXBkYXRlRm9jdXNlZFN0
YXRlKHNsaWRlclRodW1iQ2VsbCwgby0+cGFyZW50KCkpOwogCkBAIC0xMjMyLDcgKzEyNTEsNyBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludAogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJh
bnNsYXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CiAgICAgfQogCi0g
ICAgW3NsaWRlclRodW1iQ2VsbCBkcmF3V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6by0+
dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOworICAgIFtzbGlkZXJUaHVtYkNl
bGwgZHJhd1dpdGhGcmFtZTp1bnpvb21lZFJlY3QgaW5WaWV3OmRvY3VtZW50Vmlld0ZvcihvKV07
CiAgICAgW3NsaWRlclRodW1iQ2VsbCBzZXRDb250cm9sVmlldzpuaWxdOwogCiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTEyNjQsNyArMTI4Myw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50CiAgICAgLy8gU2V0IHRoZSBzZWFyY2ggYnV0dG9uIHRvIG5pbCBiZWZvcmUg
ZHJhd2luZy4gIFRoZW4gcmVzZXQgaXQgc28gd2UgY2FuIGRyYXcgaXQgbGF0ZXIuCiAgICAgW3Nl
YXJjaCBzZXRTZWFyY2hCdXR0b25DZWxsOm5pbF07CiAKLSAgICBbc2VhcmNoIGRyYXdXaXRoRnJh
bWU6TlNSZWN0KHVuem9vbWVkUmVjdCkgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRv
Y3VtZW50VmlldygpXTsKKyAgICBbc2VhcmNoIGRyYXdXaXRoRnJhbWU6TlNSZWN0KHVuem9vbWVk
UmVjdCkgaW5WaWV3OmRvY3VtZW50Vmlld0ZvcihvKV07CiAjaWZkZWYgQlVJTERJTkdfT05fVElH
RVIKICAgICBpZiAoW3NlYXJjaCBzaG93c0ZpcnN0UmVzcG9uZGVyXSkKICAgICAgICAgd2tEcmF3
VGV4dEZpZWxkQ2VsbEZvY3VzUmluZyhzZWFyY2gsIE5TUmVjdCh1bnpvb21lZFJlY3QpKTsKQEAg
LTEyODUsNiArMTMwNCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0
ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmKQogICAgIFtzZWFyY2ggc2V0Q29udHJv
bFNpemU6Y29udHJvbFNpemVGb3JGb250KG8tPnN0eWxlKCkpXTsKIAogICAgIC8vIFVwZGF0ZSB0
aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVBY3RpdmVTdGF0ZShz
ZWFyY2gsIG8pOwogICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzZWFyY2gsIG8pOwogICAgIHVwZGF0
ZUZvY3VzZWRTdGF0ZShzZWFyY2gsIG8pOwogfQpAQCAtMTM0Niw2ICsxMzY2LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck8KIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlz
LT5zZWFyY2goKTsKIAorICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggY2FuY2VsQnV0dG9u
Q2VsbF0sIG8pOwogICAgIHVwZGF0ZVByZXNzZWRTdGF0ZShbc2VhcmNoIGNhbmNlbEJ1dHRvbkNl
bGxdLCBvKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CkBAIC0xMzY0LDcgKzEz
ODUsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyTwogICAgICAgICBwYWludEluZm8uY29udGV4
dC0+dHJhbnNsYXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CiAgICAg
fQogCi0gICAgW1tzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTp1bnpvb21l
ZFJlY3QgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpXTsKKyAg
ICBbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBp
blZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8pXTsKICAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxs
XSBzZXRDb250cm9sVmlldzpuaWxdOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKQEAgLTE0MjMsMTMgKzE0NDQsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmUKIAogICAg
IE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAorICAgIHVwZGF0
ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0sIG8pOworCiAgICAgaWYgKFtz
ZWFyY2ggc2VhcmNoTWVudVRlbXBsYXRlXSAhPSBuaWwpCiAgICAgICAgIFtzZWFyY2ggc2V0U2Vh
cmNoTWVudVRlbXBsYXRlOm5pbF07CiAKICAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2Vh
cmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+
Ym9yZGVyQm94UmVjdCgpKV07CiAgICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1Jl
Y3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKIAotICAgIFtbc2VhcmNo
IHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6bG9jYWxCb3VuZHMgaW5WaWV3Om8tPnZp
ZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpXTsKKyAgICBbW3NlYXJjaCBzZWFyY2hC
dXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmxvY2FsQm91bmRzIGluVmlldzpkb2N1bWVudFZpZXdG
b3IobyldOwogICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIHNldENvbnRyb2xWaWV3Om5p
bF07CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTQ1Myw2ICsxNDc2LDggQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXIKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5z
ZWFyY2goKTsKIAorICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNoQnV0dG9uQ2Vs
bF0sIG8pOworCiAgICAgaWYgKCFbc2VhcmNoIHNlYXJjaE1lbnVUZW1wbGF0ZV0pCiAgICAgICAg
IFtzZWFyY2ggc2V0U2VhcmNoTWVudVRlbXBsYXRlOnNlYXJjaE1lbnVUZW1wbGF0ZSgpXTsKIApA
QCAtMTQ3Miw3ICsxNDk3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXIKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVj
dC55KCkpOwogICAgIH0KIAotICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRo
RnJhbWU6dW56b29tZWRSZWN0IGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVu
dFZpZXcoKV07CisgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTp1
bnpvb21lZFJlY3QgaW5WaWV3OmRvY3VtZW50Vmlld0ZvcihvKV07CiAgICAgW1tzZWFyY2ggc2Vh
cmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKICAgICAKICAgICBwYWludEluZm8u
Y29udGV4dC0+cmVzdG9yZSgpOwpAQCAtMTUyNiwyNiArMTU1MSwzMSBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogCiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIGVsc2UgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9
PSBNZWRpYVNsaWRlclRodW1iUGFydCkgewotICAgICAgICBpbnQgd2lkdGggPSBtZWRpYVNsaWRl
clRodW1iV2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQgPSBtZWRpYVNsaWRlclRodW1iSGVpZ2h0
OwotICAgICAgICAKLSAgICAgICAgaWYgKG1lZGlhQ29udHJvbGxlclRoZW1lKCkgPT0gTWVkaWFD
b250cm9sbGVyVGhlbWVRdWlja1RpbWUpIHsKLSAgICAgICAgICAgIENHU2l6ZSAgc2l6ZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgd2tNZWFzdXJlTWVkaWFVSVBhcnQoTWVkaWFTbGlkZXJU
aHVtYiwgTWVkaWFDb250cm9sbGVyVGhlbWVRdWlja1RpbWUsIE5VTEwsICZzaXplKTsKLSAgICAg
ICAgICAgIHdpZHRoID0gc2l6ZS53aWR0aDsKLSAgICAgICAgICAgIGhlaWdodCA9IHNpemUuaGVp
Z2h0OwotICAgICAgICB9Ci0KLSAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHN0
YXRpY19jYXN0PGludD4od2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwotICAgICAgICBvLT5z
dHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oaGVpZ2h0ICogem9vbUxl
dmVsKSwgRml4ZWQpKTsKKyAgICAgICAgYWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUobyk7CiAg
ICAgfQogI2VuZGlmCiB9CiAKLQogI2lmIEVOQUJMRShWSURFTykKIAordm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAor
eworICAgIGludCB3aWR0aCA9IG1lZGlhU2xpZGVyVGh1bWJXaWR0aDsKKyAgICBpbnQgaGVpZ2h0
ID0gbWVkaWFTbGlkZXJUaHVtYkhlaWdodDsKKyAgICAgICAgCisgICAgaWYgKG1lZGlhQ29udHJv
bGxlclRoZW1lKCkgPT0gTWVkaWFDb250cm9sbGVyVGhlbWVRdWlja1RpbWUpIHsKKyAgICAgICAg
Q0dTaXplICBzaXplOworICAgICAgICAgICAgCisgICAgICAgIHdrTWVhc3VyZU1lZGlhVUlQYXJ0
KE1lZGlhU2xpZGVyVGh1bWIsIE1lZGlhQ29udHJvbGxlclRoZW1lUXVpY2tUaW1lLCBOVUxMLCAm
c2l6ZSk7CisgICAgICAgIHdpZHRoID0gc2l6ZS53aWR0aDsKKyAgICAgICAgaGVpZ2h0ID0gc2l6
ZS5oZWlnaHQ7CisgICAgfQorCisgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpOworICAgIG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2Fz
dDxpbnQ+KHdpZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKKyAgICBvLT5zdHlsZSgpLT5zZXRI
ZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oaGVpZ2h0ICogem9vbUxldmVsKSwgRml4ZWQp
KTsKK30KKwogZW51bSBXS01lZGlhQ29udHJvbGxlclRoZW1lU3RhdGUgeyAKICAgICBNZWRpYVVJ
UGFydERpc2FibGVkRmxhZyA9IDEgPDwgMCwKICAgICBNZWRpYVVJUGFydFByZXNzZWRGbGFnID0g
MSA8PCAxLApAQCAtMTc1NywxMCArMTc4NywxNSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dE1lZGlhVGltZVJlbWFpbmluZyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdAog
CiBTdHJpbmcgUmVuZGVyVGhlbWVNYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQog
eworI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAobWVkaWFDb250cm9sbGVyVGhlbWUoKSA9PSBN
ZWRpYUNvbnRyb2xsZXJUaGVtZVF1aWNrVGltZSkKICAgICAgICAgcmV0dXJuIFN0cmluZyhtZWRp
YUNvbnRyb2xzUXVpY2tUaW1lVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJv
bHNRdWlja1RpbWVVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiAgICAgZWxzZQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBTdHJpbmcoKTsKKyNlbmRpZgogfQogCiBib29sIFJlbmRlclRoZW1lTWFjOjpzaG91bGRSZW5k
ZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0IHBhcnQsIEVsZW1lbnQqIGVsZW1lbnQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53031</attachid>
            <date>2010-04-09 22:24:17 -0700</date>
            <delta_ts>2010-05-09 17:44:49 -0700</delta_ts>
            <desc>took feedbacks</desc>
            <filename>bug-37204-20100410142414.patch</filename>
            <type>text/plain</type>
            <size>85196</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OGQxN2IwYy4uNGU2NDMxNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxMC0wNC0wNyAgTU9SSVRBIEhhamlt
ZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbQ2hyb21pdW1dIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0gc2hv
dWxkIHNoYXJlIGNvZGUgd2l0aCBSZW5kZXJUaGVtZU1hYy5tbQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcyMDQKKworICAgICAgICBNYWRlIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWMgc3ViY2xhc3Mgb2YgUmVuZGVyVGhlbWVNYWMsIGluc3RlYWQgb2Yg
UmVuZGVyVGhlbWUuCisgICAgICAgIEFkZGVkIHNvbWUgbWV0aG9kIHRvIFJlbmRlclRoZW1lTWFj
IGZvciBvdmVycmlkaW5nIG9uIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMuCisgICAgICAgIAorICAg
ICAgICBObyBuZXcgdGVzdHM7IFNob3VsZCBoYXZlIG5vIGJlaGF2aW91cmFsIGNoYW5nZS4KKwor
ICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtTWFjLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFj
Ojp1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpkb2N1bWVudFZpZXdGb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0TWVkaWFTbGlkZXJUaHVtYlNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXBkYXRlQWN0aXZlU3Rh
dGUpOiBBZGRlZCBmb3Igb3ZlcnJpZGUKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6dXNlc1Rlc3RNb2RlRm9j
dXNSaW5nQ29sb3IpOiBBZGRlZCBmb3Igb3ZlcnJpZGluZworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OmRvY3VtZW50Vmlld0Zvcik6IEFkZGVkIGZvciBvdmVycmlkaW5nCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6YWRq
dXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjph
ZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZSk6IEFkZGVkIGZvciBvdmVycmlkaW5nCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6
ICAgICAgICAKKwogMjAxMC0wNC0wNiAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmlhbiBMaS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
CmluZGV4IGMxYTU2MGIuLjNkNjJiMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtOTkx
LDYgKzk5MSw3IEBACiAgICAgICAgICAgICAjIENoZXJyeS1waWNrIHNvbWUgZmlsZXMgdGhhdCBj
YW4ndCBiZSBpbmNsdWRlZCBieSBicm9hZGVyIHJlZ2V4cHMuCiAgICAgICAgICAgICAjIFNvbWUg
b2YgdGhlc2UgYXJlIHVzZWQgaW5zdGVhZCBvZiBDaHJvbWl1bSBwbGF0Zm9ybSBmaWxlcywgc2Vl
CiAgICAgICAgICAgICAjIHRoZSBzcGVjaWZpYyBleGNsdXNpb25zIGluIHRoZSAic291cmNlcyEi
IGxpc3QgYmVsb3cuCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnbG9hZGVyL2FyY2hpdmUv
Y2YvTGVnYWN5V2ViQXJjaGl2ZVxcLmNwcCQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5j
bHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hY1xcLm1tJCddLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCmluZGV4IDgxMDEwMzguLmFh
YWFkZTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1N
YWMuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgKQEAg
LTI0LDE3MyArMjQsMzIgQEAKICNpZm5kZWYgUmVuZGVyVGhlbWVDaHJvbWl1bU1hY19oCiAjZGVm
aW5lIFJlbmRlclRoZW1lQ2hyb21pdW1NYWNfaAogCi0jaW1wb3J0ICJSZW5kZXJUaGVtZS5oIgot
I2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lm
ZGVmIF9fT0JKQ19fCi1AY2xhc3MgV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2
ZXI7Ci0jZWxzZQotY2xhc3MgV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXI7
Ci0jZW5kaWYKLQotLy8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlz
IGEgY2xvbmUgb2YgUmVuZGVyVGhlbWVNYWMuaC4gU2VlCi0vLyB0aGUgLm1tIGZpbGUgZm9yIGRl
dGFpbHMuCisjaW1wb3J0ICJSZW5kZXJUaGVtZU1hYy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFJlbmRlclN0eWxlOwotCi1jbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtTWFjIDog
cHVibGljIFJlbmRlclRoZW1lIHsKK2NsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMgOiBwdWJs
aWMgUmVuZGVyVGhlbWVNYWMgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRl
clRoZW1lPiBjcmVhdGUoKTsKLQotICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJv
bCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgotICAg
IHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBj
b25zdDsKLQotICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRp
bnRpbmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250
cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOwotCi0gICAgdmly
dHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRl
ckRhdGEmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVy
JiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9s
bGJhckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gU21hbGxTY3JvbGxi
YXI7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsK
LQotICAgIC8vIFN5c3RlbSBmb250cy4KLSAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQg
Y3NzVmFsdWVJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGludCBt
aW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCopIGNvbnN0OwotICAgIAotICAg
IHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUq
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJT
dHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9t
KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xv
Y2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKGludCBj
c3NWYWx1ZUlkKSBjb25zdDsKLQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c1NlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0g
ICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51
TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQogI2lmIEVOQUJMRShWSURFTykK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFy
dCwgRWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6
ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIHBhaW50TWVk
aWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAvLyBNZWRpYSBjb250cm9scworICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQYXJ0KENvbnRyb2xQYXJ0LCBF
bGVtZW50Kik7CiAgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dCgpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpOwot
ICAgIHZpcnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1NYWMoKTsKLQotICAgIEludFJlY3QgaW5m
bGF0ZVJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdp
bnMsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpIGNvbnN0OwotCi0gICAgRmxvYXRSZWN0IGNvbnZl
cnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0
IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwg
Y29uc3QgSW50UmVjdCYgcikgY29uc3Q7Ci0gICAgCi0gICAgLy8gR2V0IHRoZSBjb250cm9sIHNp
emUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBieSBzb21lIG9mIHRoZSBjb250cm9scyAobGlr
ZSBidXR0b25zKS4KLSAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJT
dHlsZSopIGNvbnN0OwotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250
KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBj
b25zdCBJbnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxl
dmVsID0gMS4wZik7Ci0gICAgdm9pZCBzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25z
dCBJbnRTaXplKiBzaXplcykgY29uc3Q7Ci0gICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJT
dHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICBJbnRTaXplIHNpemVGb3JT
eXN0ZW1Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAg
IHZvaWQgc2V0Rm9udEZyb21Db250cm9sU2l6ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBOU0NvbnRyb2xTaXplKSBjb25zdDsKIAotICAgIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUo
TlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCB1cGRhdGVDaGVja2VkU3Rh
dGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCB1cGRhdGVFbmFibGVk
U3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCB1cGRhdGVGb2N1
c2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgdm9pZCB1cGRhdGVQ
cmVzc2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0KLSAgICAvLyBIZWxw
ZXJzIGZvciBhZGp1c3RpbmcgYXBwZWFyYW5jZSBhbmQgZm9yIHBhaW50aW5nCi0KLSAgICB2b2lk
IHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJl
Y3QmKTsKLSAgICBjb25zdCBJbnRTaXplKiBwb3B1cEJ1dHRvblNpemVzKCkgY29uc3Q7Ci0gICAg
Y29uc3QgaW50KiBwb3B1cEJ1dHRvbk1hcmdpbnMoKSBjb25zdDsKLSAgICBjb25zdCBpbnQqIHBv
cHVwQnV0dG9uUGFkZGluZyhOU0NvbnRyb2xTaXplKSBjb25zdDsKLSAgICB2b2lkIHBhaW50TWVu
dUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgY29uc3QgSW50U2l6ZSogbWVudUxpc3RT
aXplcygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihS
ZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKIAotICAgIGNvbnN0IEludFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKLSAg
ICBjb25zdCBJbnRTaXplKiBjYW5jZWxCdXR0b25TaXplcygpIGNvbnN0OwotICAgIGNvbnN0IElu
dFNpemUqIHJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0OwotICAgIHZvaWQgc2V0U2VhcmNoQ2Vs
bFN0YXRlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIHNldFNlYXJj
aEZpZWxkU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIAotICAgIE5TUG9wVXBCdXR0b25D
ZWxsKiBwb3B1cEJ1dHRvbigpIGNvbnN0OwotICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2go
KSBjb25zdDsKLSAgICBOU01lbnUqIHNlYXJjaE1lbnVUZW1wbGF0ZSgpIGNvbnN0OwotICAgIE5T
U2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJIb3Jpem9udGFsKCkgY29uc3Q7Ci0gICAgTlNTbGlkZXJD
ZWxsKiBzbGlkZXJUaHVtYlZlcnRpY2FsKCkgY29uc3Q7CisjZW5kaWYKIAorICAgIHZpcnR1YWwg
Ym9vbCB1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgTlNW
aWV3KiBkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiBwcml2YXRlOgotICAg
IG11dGFibGUgUmV0YWluUHRyPE5TUG9wVXBCdXR0b25DZWxsPiBtX3BvcHVwQnV0dG9uOwotICAg
IG11dGFibGUgUmV0YWluUHRyPE5TU2VhcmNoRmllbGRDZWxsPiBtX3NlYXJjaDsKLSAgICBtdXRh
YmxlIFJldGFpblB0cjxOU01lbnU+IG1fc2VhcmNoTWVudVRlbXBsYXRlOwotICAgIG11dGFibGUg
UmV0YWluUHRyPE5TU2xpZGVyQ2VsbD4gbV9zbGlkZXJUaHVtYkhvcml6b250YWw7Ci0gICAgbXV0
YWJsZSBSZXRhaW5QdHI8TlNTbGlkZXJDZWxsPiBtX3NsaWRlclRodW1iVmVydGljYWw7Ci0KLSAg
ICBib29sIG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOwotICAgIGJvb2wgbV9pc1Ns
aWRlclRodW1iVmVydGljYWxQcmVzc2VkOwotCi0gICAgbXV0YWJsZSBIYXNoTWFwPGludCwgUkdC
QTMyPiBtX3N5c3RlbUNvbG9yQ2FjaGU7Ci0KLSAgICBSZXRhaW5QdHI8V2ViQ29yZVJlbmRlclRo
ZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXI+IG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXI7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUFjdGl2ZVN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCop
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbSBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMubW0KaW5kZXggMDNhYWIxYy4uNDdhODcyZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCkBAIC0yMCwyOSArMjAsOCBAQAog
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlJlbmRlclRoZW1lQ2hyb21pdW1NYWMuaCIK
LQotI2ltcG9ydCAiQml0bWFwSW1hZ2UuaCIKICNpbXBvcnQgIkNocm9taXVtQnJpZGdlLmgiCi0j
aW1wb3J0ICJDb2xvck1hYy5oIgotI2ltcG9ydCAiQ1NTU3R5bGVTZWxlY3Rvci5oIgotI2ltcG9y
dCAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkVs
ZW1lbnQuaCIKLSNpbXBvcnQgIkZyYW1lVmlldy5oIgotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW1wb3J0ICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW1wb3J0ICJIVE1MTWVkaWFFbGVt
ZW50LmgiCi0jaW1wb3J0ICJIVE1MTmFtZXMuaCIKLSNpbXBvcnQgIkltYWdlLmgiCi0jaW1wb3J0
ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIk1lZGlhQ29udHJvbEVs
ZW1lbnRzLmgiCi0jaW1wb3J0ICJSZW5kZXJNZWRpYS5oIgogI2ltcG9ydCAiUmVuZGVyTWVkaWFD
b250cm9sc0Nocm9taXVtLmgiCi0jaW1wb3J0ICJSZW5kZXJTbGlkZXIuaCIKLSNpbXBvcnQgIlJl
bmRlclZpZXcuaCIKLSNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgotI2ltcG9ydCAiVGltZVJhbmdl
cy5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiVXNlckFn
ZW50U3R5bGVTaGVldHMuaCIKICNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KICNpbXBvcnQgPENv
Y29hL0NvY29hLmg+CkBAIC01MCw2NCArMjksNiBAQAogI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2ltcG9ydCA8bWF0aC5oPgogCi0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLXR5cGVk
ZWYgaW50IE5TSW50ZWdlcjsKLXR5cGVkZWYgdW5zaWduZWQgTlNVSW50ZWdlcjsKLSNlbmRpZgot
Ci11c2luZyBzdGQ6Om1pbjsKLQotLy8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLmgg
ZmlsZSkgaXMgYSBjbG9uZSBvZiBSZW5kZXJUaGVtZU1hYy5tbS4KLS8vIEJlY2F1c2UgdGhlIG9y
aWdpbmFsIGZpbGUgaXMgZGVzaWduZWQgdG8gcnVuIGluLXByb2Nlc3MgaW5zaWRlIGEgQ29jb2Eg
dmlldywKLS8vIHdlIG11c3QgbWFpbnRhaW4gYSBmb3JrLiBQbGVhc2UgbWFpbnRhaW4gdGhpcyBm
aWxlIGJ5IHBlcmZvcm1pbmcgcGFyYWxsZWwKLS8vIGNoYW5nZXMgdG8gaXQuCi0vLwotLy8gVGhl
IG9ubHkgY2hhbmdlcyBmcm9tIFJlbmRlclRoZW1lTWFjIHNob3VsZCBiZToKLS8vIC0gVGhlIGNs
YXNzbmFtZSBjaGFuZ2UgZnJvbSBSZW5kZXJUaGVtZU1hYyB0byBSZW5kZXJUaGVtZUNocm9taXVt
TWFjLgotLy8gLSBUaGUgaW50cm9kdWN0aW9uIG9mIFJUQ01GbGlwcGVkVmlldyBhbmQgRmxpcHBl
ZFZpZXcoKSBhbmQgaXRzIHVzZSBhcyB0aGUKLS8vICAgcGFyZW50IHZpZXcgZm9yIGNlbGwgcmVu
ZGVyaW5nLgotLy8gLSBJbiBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCksIHRoZSB1c2Ugb2YgQ2hy
b21pdW1CcmlkZ2UgdG8gZGV0ZXJtaW5lIGlmCi0vLyAgIHdlJ3JlIGluIGxheW91dCB0ZXN0IG1v
ZGUuCi0vLyAtIHVwZGF0ZUFjdGl2ZVN0YXRlKCkgYW5kIGl0cyB1c2UgdG8gdXBkYXRlIHRoZSBj
ZWxscycgdmlzdWFsIGFwcGVhcmFuY2UuCi0vLyAtIEFsbCB0aGUgcGFpbnRNZWRpYSooKSBmdW5j
dGlvbnMgYW5kIGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQotLy8gICBhcmUgZm9ya2Vk
IGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEgaW5zdGVhZCBvZiBSZW5kZXJUaGVtZU1hYy4K
LS8vCi0vLyBGb3IgYWxsIG90aGVyIGRpZmZlcmVuY2VzLCBpZiBpdCB3YXMgaW50cm9kdWNlZCBp
biB0aGlzIGZpbGUsIHRoZW4gdGhlCi0vLyBtYWludGFpbmVyIGZvcmdvdCB0byBpbmNsdWRlIGl0
IGluIHRoZSBsaXN0OyBvdGhlcndpc2UgaXQgaXMgYW4gdXBkYXRlIHRoYXQKLS8vIHNob3VsZCBo
YXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIGZpbGUgYnV0IHdhcyBub3QuCi0KLS8vIFRoZSBtZXRo
b2RzIGluIHRoaXMgZmlsZSBhcmUgc3BlY2lmaWMgdG8gdGhlIE1hYyBPUyBYIHBsYXRmb3JtLgot
Ci0vLyBGSVhNRTogVGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IGNvZGUgaW4gdGhpcyBjbGFzcyBz
aG91bGQgYmUgZmFjdG9yZWQgb3V0IGFuZCBtZXJnZWQgd2l0aCBSZW5kZXJUaGVtZVNhZmFyaS4K
LQotQGludGVyZmFjZSBXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlciA6IE5T
T2JqZWN0Ci17Ci0gICAgV2ViQ29yZTo6UmVuZGVyVGhlbWUgKl90aGVtZTsKLX0KLQotLSAoaWQp
aW5pdFdpdGhUaGVtZTooV2ViQ29yZTo6UmVuZGVyVGhlbWUgKil0aGVtZTsKLS0gKHZvaWQpc3lz
dGVtQ29sb3JzRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKLQotQGVu
ZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2
ZXIKLQotLSAoaWQpaW5pdFdpdGhUaGVtZTooV2ViQ29yZTo6UmVuZGVyVGhlbWUgKil0aGVtZQot
ewotICAgIFtzdXBlciBpbml0XTsKLSAgICBfdGhlbWUgPSB0aGVtZTsKLQotICAgIHJldHVybiBz
ZWxmOwotfQotCi0tICh2b2lkKXN5c3RlbUNvbG9yc0RpZENoYW5nZTooTlNOb3RpZmljYXRpb24g
Kil1bnVzZWROb3RpZmljYXRpb24KLXsKLSAgICBBU1NFUlRfVU5VU0VEKHVudXNlZE5vdGlmaWNh
dGlvbiwgW1t1bnVzZWROb3RpZmljYXRpb24gbmFtZV0gaXNFcXVhbFRvU3RyaW5nOk5TU3lzdGVt
Q29sb3JzRGlkQ2hhbmdlTm90aWZpY2F0aW9uXSk7Ci0gICAgX3RoZW1lLT5wbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSgpOwotfQotCi1AZW5kCi0KIEBpbnRlcmZhY2UgUlRDTUZsaXBwZWRWaWV3IDog
TlNWaWV3CiB7fQogCkBAIC0xMzAsMjYgKzUxLDYgQEAgdXNpbmcgc3RkOjptaW47CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotZW51bSB7Ci0g
ICAgdG9wTWFyZ2luLAotICAgIHJpZ2h0TWFyZ2luLAotICAgIGJvdHRvbU1hcmdpbiwKLSAgICBs
ZWZ0TWFyZ2luCi19OwotCi1lbnVtIHsKLSAgICB0b3BQYWRkaW5nLAotICAgIHJpZ2h0UGFkZGlu
ZywKLSAgICBib3R0b21QYWRkaW5nLAotICAgIGxlZnRQYWRkaW5nCi19OwotCi0vLyBJbiBTbm93
IExlb3BhcmQsIG1hbnkgY2VsbHMgb25seSBjaGVjayB0byBzZWUgaWYgdGhlIHZpZXcgdGhleSdy
ZSBwYXNzZWQgaXMKLS8vIGZsaXBwZWQsIGFuZCBpZiBhIG5pbCB2aWV3IGlzIHBhc3NlZCwgbmVn
bGVjdCB0byBjaGVjayBpZiB0aGUgY3VycmVudAotLy8gZ3JhcGhpY3MgY29udGV4dCBpcyBmbGlw
cGVkLiBUaHVzIHdlIHBhc3MgYSBzaGFtIHZpZXcgdG8gdGhlbSwgb25lIHdob3NlCi0vLyBmbGlw
cGVkIHN0YXRlIGp1c3QgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBjb250ZXh0LgogTlNWaWV3
KiBGbGlwcGVkVmlldygpCiB7CiAgICAgc3RhdGljIE5TVmlldyogdmlldyA9IFtbUlRDTUZsaXBw
ZWRWaWV3IGFsbG9jXSBpbml0XTsKQEAgLTE2Nyw0MjIgKzY4LDE0IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyVGhlbWU+IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSZW5kZXJUaGVtZUNocm9taXVtTWFjKTsKIH0KIAotUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpCi0gICAgOiBtX2lzU2xpZGVyVGh1bWJI
b3Jpem9udGFsUHJlc3NlZChmYWxzZSkKLSAgICAsIG1faXNTbGlkZXJUaHVtYlZlcnRpY2FsUHJl
c3NlZChmYWxzZSkKLSAgICAsIG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXIoQWRvcHROUywgW1tXZWJD
b3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlciBhbGxvY10gaW5pdFdpdGhUaGVtZTp0
aGlzXSkKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6dXNlc1Rlc3RNb2RlRm9jdXNSaW5n
Q29sb3IoKSBjb25zdAogewotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gYWRkT2JzZXJ2ZXI6bV9ub3RpZmljYXRpb25PYnNlcnZlci5nZXQoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2Vs
ZWN0b3Ioc3lzdGVtQ29sb3JzRGlkQ2hhbmdlOikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6TlNTeXN0ZW1Db2xvcnNEaWRD
aGFuZ2VOb3RpZmljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3Q6bmlsXTsKKyAgICByZXR1cm4gQ2hyb21pdW1Ccmlk
Z2U6OmxheW91dFRlc3RNb2RlKCk7CiB9CiAKLVJlbmRlclRoZW1lQ2hyb21pdW1NYWM6On5SZW5k
ZXJUaGVtZUNocm9taXVtTWFjKCkKK05TVmlldyogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6ZG9j
dW1lbnRWaWV3Rm9yKFJlbmRlck9iamVjdCopIGNvbnN0CiB7Ci0gICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX25vdGlmaWNhdGlvbk9ic2Vy
dmVyLmdldCgpXTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIE5TQ29sb3IqIGNv
bG9yID0gW1tOU0NvbG9yIHNlbGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl0gY29sb3JVc2luZ0Nv
bG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07Ci0gICAgcmV0dXJuIENvbG9yKHN0
YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgcmVkQ29tcG9uZW50XSksIHN0YXRpY19jYXN0
PGludD4oMjU1LjAgKiBbY29sb3IgZ3JlZW5Db21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50Pigy
NTUuMCAqIFtjb2xvciBibHVlQ29tcG9uZW50XSkpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKLXsKLSAgICBOU0NvbG9yKiBjb2xvciA9IFtbTlNDb2xvciBzZWNvbmRhcnlTZWxlY3RlZENv
bnRyb2xDb2xvcl0gY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFj
ZV07Ci0gICAgcmV0dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgcmVk
Q29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgZ3JlZW5Db21wb25l
bnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciBibHVlQ29tcG9uZW50XSkpOwot
fQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIE5TQ29sb3IqIGNvbG9yID0g
W1tOU0NvbG9yIGFsdGVybmF0ZVNlbGVjdGVkQ29udHJvbENvbG9yXSBjb2xvclVzaW5nQ29sb3JT
cGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGlj
X2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciByZWRDb21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50
PigyNTUuMCAqIFtjb2xvciBncmVlbkNvbXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4w
ICogW2NvbG9yIGJsdWVDb21wb25lbnRdKSk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIENvbG9yOjp3aGl0ZTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcjo6YmxhY2s7Ci19Ci0KLUNvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdAotewotICAg
IGlmIChDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKLSAgICAgICAgcmV0dXJuIG9s
ZEFxdWFGb2N1c1JpbmdDb2xvcigpOwotCi0gICAgcmV0dXJuIHN5c3RlbUNvbG9yKENTU1ZhbHVl
V2Via2l0Rm9jdXNSaW5nQ29sb3IpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KTsKLX0KLQotc3RhdGljIEZvbnRXZWlnaHQgdG9Gb250V2VpZ2h0KE5TSW50ZWdlciBhcHBLaXRG
b250V2VpZ2h0KQotewotICAgIEFTU0VSVChhcHBLaXRGb250V2VpZ2h0ID4gMCAmJiBhcHBLaXRG
b250V2VpZ2h0IDwgMTUpOwotICAgIGlmIChhcHBLaXRGb250V2VpZ2h0ID4gMTQpCi0gICAgICAg
IGFwcEtpdEZvbnRXZWlnaHQgPSAxNDsKLSAgICBlbHNlIGlmIChhcHBLaXRGb250V2VpZ2h0IDwg
MSkKLSAgICAgICAgYXBwS2l0Rm9udFdlaWdodCA9IDE7Ci0KLSAgICBzdGF0aWMgRm9udFdlaWdo
dCBmb250V2VpZ2h0c1tdID0gewotICAgICAgICBGb250V2VpZ2h0MTAwLAotICAgICAgICBGb250
V2VpZ2h0MTAwLAotICAgICAgICBGb250V2VpZ2h0MjAwLAotICAgICAgICBGb250V2VpZ2h0MzAw
LAotICAgICAgICBGb250V2VpZ2h0NDAwLAotICAgICAgICBGb250V2VpZ2h0NTAwLAotICAgICAg
ICBGb250V2VpZ2h0NjAwLAotICAgICAgICBGb250V2VpZ2h0NjAwLAotICAgICAgICBGb250V2Vp
Z2h0NzAwLAotICAgICAgICBGb250V2VpZ2h0ODAwLAotICAgICAgICBGb250V2VpZ2h0ODAwLAot
ICAgICAgICBGb250V2VpZ2h0OTAwLAotICAgICAgICBGb250V2VpZ2h0OTAwLAotICAgICAgICBG
b250V2VpZ2h0OTAwCi0gICAgfTsKLSAgICByZXR1cm4gZm9udFdlaWdodHNbYXBwS2l0Rm9udFdl
aWdodCAtIDFdOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnN5c3RlbUZvbnQo
aW50IGNzc1ZhbHVlSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBzeXN0ZW1Gb250LCAo
KSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRpb24sIHNtYWxsU3lzdGVt
Rm9udCwgKCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBtZW51
Rm9udCwgKCkpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBsYWJl
bEZvbnQsICgpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgbWlu
aUNvbnRyb2xGb250LCAoKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRp
b24sIHNtYWxsQ29udHJvbEZvbnQsICgpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRE
ZXNjcmlwdGlvbiwgY29udHJvbEZvbnQsICgpKTsKLQotICAgIEZvbnREZXNjcmlwdGlvbiogY2Fj
aGVkRGVzYzsKLSAgICBOU0ZvbnQqIGZvbnQgPSBuaWw7Ci0gICAgc3dpdGNoIChjc3NWYWx1ZUlk
KSB7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVTbWFsbENhcHRpb246Ci0gICAgICAgICAgICBjYWNo
ZWREZXNjID0gJnNtYWxsU3lzdGVtRm9udDsKLSAgICAgICAgICAgIGlmICghc21hbGxTeXN0ZW1G
b250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lz
dGVtRm9udE9mU2l6ZTpbTlNGb250IHNtYWxsU3lzdGVtRm9udFNpemVdXTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlTWVudToKLSAgICAgICAgICAgIGNhY2hlZERl
c2MgPSAmbWVudUZvbnQ7Ci0gICAgICAgICAgICBpZiAoIW1lbnVGb250LmlzQWJzb2x1dGVTaXpl
KCkpCi0gICAgICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgbWVudUZvbnRPZlNpemU6W05TRm9u
dCBzeXN0ZW1Gb250U2l6ZV1dOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
VmFsdWVTdGF0dXNCYXI6Ci0gICAgICAgICAgICBjYWNoZWREZXNjID0gJmxhYmVsRm9udDsKLSAg
ICAgICAgICAgIGlmICghbGFiZWxGb250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAgICAg
ICAgZm9udCA9IFtOU0ZvbnQgbGFiZWxGb250T2ZTaXplOltOU0ZvbnQgbGFiZWxGb250U2l6ZV1d
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29u
dHJvbDoKLSAgICAgICAgICAgIGNhY2hlZERlc2MgPSAmbWluaUNvbnRyb2xGb250OwotICAgICAg
ICAgICAgaWYgKCFtaW5pQ29udHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKLSAgICAgICAgICAg
ICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNp
emVGb3JDb250cm9sU2l6ZTpOU01pbmlDb250cm9sU2l6ZV1dOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6Ci0gICAgICAgICAgICBj
YWNoZWREZXNjID0gJnNtYWxsQ29udHJvbEZvbnQ7Ci0gICAgICAgICAgICBpZiAoIXNtYWxsQ29u
dHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKLSAgICAgICAgICAgICAgICBmb250ID0gW05TRm9u
dCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpO
U1NtYWxsQ29udHJvbFNpemVdXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1ZhbHVlV2Via2l0Q29udHJvbDoKLSAgICAgICAgICAgIGNhY2hlZERlc2MgPSAmY29udHJvbEZv
bnQ7Ci0gICAgICAgICAgICBpZiAoIWNvbnRyb2xGb250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAg
ICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3Rl
bUZvbnRTaXplRm9yQ29udHJvbFNpemU6TlNSZWd1bGFyQ29udHJvbFNpemVdXTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZz
eXN0ZW1Gb250OwotICAgICAgICAgICAgaWYgKCFzeXN0ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkp
Ci0gICAgICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250
IHN5c3RlbUZvbnRTaXplXV07Ci0gICAgfQotCi0gICAgaWYgKGZvbnQpIHsKLSAgICAgICAgTlNG
b250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdl
cl07Ci0gICAgICAgIGNhY2hlZERlc2MtPnNldElzQWJzb2x1dGVTaXplKHRydWUpOwotICAgICAg
ICBjYWNoZWREZXNjLT5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHkp
OwotICAgICAgICBjYWNoZWREZXNjLT5maXJzdEZhbWlseSgpLnNldEZhbWlseShbZm9udCBmYW1p
bHlOYW1lXSk7Ci0gICAgICAgIGNhY2hlZERlc2MtPnNldFNwZWNpZmllZFNpemUoW2ZvbnQgcG9p
bnRTaXplXSk7Ci0gICAgICAgIGNhY2hlZERlc2MtPnNldFdlaWdodCh0b0ZvbnRXZWlnaHQoW2Zv
bnRNYW5hZ2VyIHdlaWdodE9mRm9udDpmb250XSkpOwotICAgICAgICBjYWNoZWREZXNjLT5zZXRJ
dGFsaWMoW2ZvbnRNYW5hZ2VyIHRyYWl0c09mRm9udDpmb250XSAmIE5TSXRhbGljRm9udE1hc2sp
OwotICAgIH0KLSAgICBmb250RGVzY3JpcHRpb24gPSAqY2FjaGVkRGVzYzsKLX0KLQotc3RhdGlj
IFJHQkEzMiBjb252ZXJ0TlNDb2xvclRvQ29sb3IoTlNDb2xvciAqY29sb3IpCi17Ci0gICAgTlND
b2xvciAqY29sb3JJbkNvbG9yU3BhY2UgPSBbY29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1l
Ok5TRGV2aWNlUkdCQ29sb3JTcGFjZV07Ci0gICAgaWYgKGNvbG9ySW5Db2xvclNwYWNlKSB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXIoMjU2LjAs
IDAuMCk7Ci0gICAgICAgIHJldHVybiBtYWtlUkdCKHN0YXRpY19jYXN0PGludD4oc2NhbGVGYWN0
b3IgKiBbY29sb3JJbkNvbG9yU3BhY2UgcmVkQ29tcG9uZW50XSksCi0gICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQ+KHNjYWxlRmFjdG9yICogW2NvbG9ySW5Db2xvclNwYWNlIGdyZWVuQ29tcG9u
ZW50XSksCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRmFjdG9yICogW2NvbG9y
SW5Db2xvclNwYWNlIGJsdWVDb21wb25lbnRdKSk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjb252
ZXJzaW9uIGFib3ZlIGNhbiBmYWlsIGlmIHRoZSBOU0NvbG9yIGluIHF1ZXN0aW9uIGlzIGFuIE5T
UGF0dGVybkNvbG9yCi0gICAgLy8gKGFzIG1hbnkgc3lzdGVtIGNvbG9ycyBhcmUpLiBUaGVzZSBj
b2xvcnMgYXJlIGFjdHVhbGx5IGEgcmVwZWF0aW5nIHBhdHRlcm4KLSAgICAvLyBub3QganVzdCBh
IHNvbGlkIGNvbG9yLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIHNpbXBseSBkcmF3IGEgMXgxIGlt
YWdlIG9mCi0gICAgLy8gdGhlIGNvbG9yIGFuZCB1c2UgdGhhdCBwaXhlbCdzIGNvbG9yLiBJdCBt
aWdodCBiZSBiZXR0ZXIgdG8gdXNlIGFuIGF2ZXJhZ2Ugb2YKLSAgICAvLyB0aGUgY29sb3JzIGlu
IHRoZSBwYXR0ZXJuIGluc3RlYWQuCi0gICAgTlNCaXRtYXBJbWFnZVJlcCAqb2Zmc2NyZWVuUmVw
ID0gW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aEJpdG1hcERhdGFQbGFuZXM6bmls
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1dpZGU6MQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
aXhlbHNIaWdoOjEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzYW1wbGVzUGVyUGl4ZWw6NAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0FscGhhOllF
UwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGxhbmFyOk5PCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
b3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0
ZXNQZXJSb3c6NAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1BlclBpeGVsOjMyXTsKLQotICAgIFtO
U0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07Ci0gICAgW05TR3JhcGhpY3NDb250
ZXh0IHNldEN1cnJlbnRDb250ZXh0OltOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRX
aXRoQml0bWFwSW1hZ2VSZXA6b2Zmc2NyZWVuUmVwXV07Ci0gICAgTlNFcmFzZVJlY3QoTlNNYWtl
UmVjdCgwLCAwLCAxLCAxKSk7Ci0gICAgW2NvbG9yIGRyYXdTd2F0Y2hJblJlY3Q6TlNNYWtlUmVj
dCgwLCAwLCAxLCAxKV07Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0
YXRlXTsKLQotICAgIE5TVUludGVnZXIgcGl4ZWxbNF07Ci0gICAgW29mZnNjcmVlblJlcCBnZXRQ
aXhlbDpwaXhlbCBhdFg6MCB5OjBdOwotCi0gICAgW29mZnNjcmVlblJlcCByZWxlYXNlXTsKLQot
ICAgIHJldHVybiBtYWtlUkdCKHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0pOwotfQotCi1z
dGF0aWMgUkdCQTMyIG1lbnVCYWNrZ3JvdW5kQ29sb3IoKQotewotICAgIE5TQml0bWFwSW1hZ2VS
ZXAgKm9mZnNjcmVlblJlcCA9IFtbTlNCaXRtYXBJbWFnZVJlcCBhbGxvY10gaW5pdFdpdGhCaXRt
YXBEYXRhUGxhbmVzOm5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNXaWRlOjEKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGl4ZWxzSGlnaDoxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNQZXJTYW1w
bGU6OAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2FtcGxlc1BlclBpeGVsOjQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoYXNBbHBoYTpZRVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BsYW5hcjpOTwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ5dGVzUGVyUm93OjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNQZXJQaXhl
bDozMl07Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHN0YXRpY19jYXN0PENHQ29udGV4
dFJlZj4oW1tOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoQml0bWFwSW1hZ2VS
ZXA6b2Zmc2NyZWVuUmVwXSBncmFwaGljc1BvcnRdKTsKLSAgICBDR1JlY3QgcmVjdCA9IENHUmVj
dE1ha2UoMCwgMCwgMSwgMSk7Ci0gICAgSElUaGVtZU1lbnVEcmF3SW5mbyBkcmF3SW5mbzsKLSAg
ICBkcmF3SW5mby52ZXJzaW9uID0gIDA7Ci0gICAgZHJhd0luZm8ubWVudVR5cGUgPSBrVGhlbWVN
ZW51VHlwZVBvcFVwOwotICAgIEhJVGhlbWVEcmF3TWVudUJhY2tncm91bmQoJnJlY3QsICZkcmF3
SW5mbywgY29udGV4dCwga0hJVGhlbWVPcmllbnRhdGlvbkludmVydGVkKTsKLQotICAgIE5TVUlu
dGVnZXIgcGl4ZWxbNF07Ci0gICAgW29mZnNjcmVlblJlcCBnZXRQaXhlbDpwaXhlbCBhdFg6MCB5
OjBdOwotCi0gICAgW29mZnNjcmVlblJlcCByZWxlYXNlXTsKLQotICAgIHJldHVybiBtYWtlUkdC
KHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0pOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkKLXsKLSAgICBtX3N5c3RlbUNvbG9y
Q2FjaGUuY2xlYXIoKTsKLSAgICBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2Uo
KTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtQ29sb3IoaW50IGNz
c1ZhbHVlSWQpIGNvbnN0Ci17Ci0gICAgaWYgKG1fc3lzdGVtQ29sb3JDYWNoZS5jb250YWlucyhj
c3NWYWx1ZUlkKSkKLSAgICAgICAgcmV0dXJuIG1fc3lzdGVtQ29sb3JDYWNoZS5nZXQoY3NzVmFs
dWVJZCk7Ci0KLSAgICBDb2xvciBjb2xvcjsKLSAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKLSAg
ICAgICAgY2FzZSBDU1NWYWx1ZUFjdGl2ZWJvcmRlcjoKLSAgICAgICAgICAgIGNvbG9yID0gY29u
dmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRpY2F0b3JDb2xvcl0p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVBY3RpdmVjYXB0aW9u
OgotICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igd2lu
ZG93RnJhbWVUZXh0Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENT
U1ZhbHVlQXBwd29ya3NwYWNlOgotICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRv
Q29sb3IoW05TQ29sb3IgaGVhZGVyQ29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU1ZhbHVlQmFja2dyb3VuZDoKLSAgICAgICAgICAgIC8vIFVzZSB0aGVtZSBpbmRl
cGVuZGVudCBkZWZhdWx0Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1
ZUJ1dHRvbmZhY2U6Ci0gICAgICAgICAgICAvLyBXZSB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkIG9m
IE5TQ29sb3IncyBjb250cm9sQ29sb3IgdG8gYXZvaWQgd2Vic2l0ZSBpbmNvbXBhdGliaWxpdGll
cy4KLSAgICAgICAgICAgIC8vIFdlIG1heSB3YW50IHRvIGNoYW5nZSB0aGlzIHRvIHVzZSB0aGUg
TlNDb2xvciBpbiBmdXR1cmUuCi0gICAgICAgICAgICBjb2xvciA9IDB4RkZDMEMwQzA7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbmhpZ2hsaWdodDoKLSAg
ICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xI
aWdobGlnaHRDb2xvcl0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFs
dWVCdXR0b25zaGFkb3c6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xv
cihbTlNDb2xvciBjb250cm9sU2hhZG93Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoKLSAgICAgICAgICAgIGNvbG9yID0gY29udmVy
dE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xUZXh0Q29sb3JdKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6Ci0gICAgICAgICAgICBj
b2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB0ZXh0Q29sb3JdKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlR3JheXRleHQ6Ci0gICAgICAgICAg
ICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBkaXNhYmxlZENvbnRyb2xU
ZXh0Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlSGln
aGxpZ2h0OgotICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29s
b3Igc2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9yXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDU1NWYWx1ZUhpZ2hsaWdodHRleHQ6Ci0gICAgICAgICAgICBjb2xvciA9IGNv
bnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBzZWxlY3RlZFRleHRDb2xvcl0pOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWJvcmRlcjoKLSAgICAg
ICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xCYWNr
Z3JvdW5kQ29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVl
SW5hY3RpdmVjYXB0aW9uOgotICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29s
b3IoW05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWNhcHRpb250ZXh0OgotICAgICAgICAgICAg
Y29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9yXSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUluZm9iYWNrZ3JvdW5kOgotICAg
ICAgICAgICAgLy8gVGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBOU0NvbG9yIGZvciB0aGlzIHNv
IHdlIHVzZSBhIGhhcmQgY29kZWQgdmFsdWUuCi0gICAgICAgICAgICBjb2xvciA9IDB4RkZGQkZD
QzU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZUluZm90ZXh0Ogot
ICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENv
bG9yXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZU1lbnU6Ci0g
ICAgICAgICAgICBjb2xvciA9IG1lbnVCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlTWVudXRleHQ6Ci0gICAgICAgICAgICBjb2xvciA9
IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBzZWxlY3RlZE1lbnVJdGVtVGV4dENvbG9y
XSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVNjcm9sbGJhcjoK
LSAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHNjcm9s
bEJhckNvbG9yXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVRl
eHQ6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB0
ZXh0Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVGhy
ZWVkZGFya3NoYWRvdzoKLSAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9y
KFtOU0NvbG9yIGNvbnRyb2xEYXJrU2hhZG93Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVkc2hhZG93OgotICAgICAgICAgICAgY29sb3IgPSBj
b252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2hhZG93Q29sb3JdKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVkZmFjZToKLSAgICAgICAgICAgIC8v
IFdlIHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2YgTlNDb2xvcidzIGNvbnRyb2xDb2xvciB0byBh
dm9pZCB3ZWJzaXRlIGluY29tcGF0aWJpbGl0aWVzLgotICAgICAgICAgICAgLy8gV2UgbWF5IHdh
bnQgdG8gY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBOU0NvbG9yIGluIGZ1dHVyZS4KLSAgICAgICAg
ICAgIGNvbG9yID0gMHhGRkMwQzBDMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENTU1ZhbHVlVGhyZWVkaGlnaGxpZ2h0OgotICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlND
b2xvclRvQ29sb3IoW05TQ29sb3IgaGlnaGxpZ2h0Q29sb3JdKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVkbGlnaHRzaGFkb3c6Ci0gICAgICAgICAgICBj
b2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sTGlnaHRIaWdobGln
aHRDb2xvcl0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRGb2N1c1JpbmdDb2xvcjoKLSAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0Nv
bG9yKFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRpY2F0b3JDb2xvcl0pOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWVXaW5kb3c6Ci0gICAgICAgICAgICBjb2xvciA9
IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3JdKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1ZhbHVlV2luZG93ZnJhbWU6Ci0g
ICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB3aW5kb3dG
cmFtZUNvbG9yXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZVdp
bmRvd3RleHQ6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlND
b2xvciB3aW5kb3dGcmFtZVRleHRDb2xvcl0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIGNvbG9yID0gUmVuZGVyVGhlbWU6
OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwotCi0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkKLSAg
ICAgICAgbV9zeXN0ZW1Db2xvckNhY2hlLnNldChjc3NWYWx1ZUlkLCBjb2xvci5yZ2IoKSk7Ci0K
LSAgICByZXR1cm4gY29sb3I7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aXND
b250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYg
Ym9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxM
YXllciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKLXsK
LSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gVGV4dEFyZWFQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTGlz
dGJveFBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyOwotCi0g
ICAgLy8gRklYTUU6IFRoaXMgaXMgaG9ycmlibGUsIGJ1dCB0aGVyZSBpcyBub3QgbXVjaCBlbHNl
IHRoYXQgY2FuIGJlIGRvbmUuICBNZW51IGxpc3RzIGNhbm5vdCBkcmF3IHByb3Blcmx5IHdoZW4K
LSAgICAvLyBzY2FsZWQuICBUaGV5IGNhbid0IHJlYWxseSBkcmF3IHByb3Blcmx5IHdoZW4gdHJh
bnNmb3JtZWQgZWl0aGVyLiAgV2UgY2FuJ3QgZGV0ZWN0IHRoZSB0cmFuc2Zvcm0gY2FzZSBhdCBz
dHlsZQotICAgIC8vIGFkanVzdG1lbnQgdGltZSBzbyB0aGF0IHdpbGwganVzdCBoYXZlIHRvIHN0
YXkgYnJva2VuLiAgV2UgY2FuIGhvd2V2ZXIgZGV0ZWN0IHRoYXQgd2UncmUgem9vbWluZy4gIElm
IHpvb21pbmcKLSAgICAvLyBpcyBpbiBlZmZlY3Qgd2UgdHJlYXQgaXQgbGlrZSB0aGUgY29udHJv
bCBpcyBzdHlsZWQuCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0
ICYmIHN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVy
LCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVj
dCYgcikKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
OwotCi0jaWYgVVNFKE5FV19USEVNRSkKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICAgICAgY2Fz
ZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICBjYXNlIFB1
c2hCdXR0b25QYXJ0OgotICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6Ci0gICAgICAgIGNh
c2UgTGlzdEJ1dHRvblBhcnQ6Ci0gICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6Ci0gICAg
ICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YWRq
dXN0UmVwYWludFJlY3Qobywgcik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKTsKLQotICAgIGlmIChwYXJ0ID09IE1lbnVsaXN0UGFydCkgewotICAgICAg
ICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKLSAgICAgICAgSW50U2l6ZSBzaXplID0g
cG9wdXBCdXR0b25TaXplcygpW1twb3B1cEJ1dHRvbigpIGNvbnRyb2xTaXplXV07Ci0gICAgICAg
IHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgICAgICBzaXpl
LnNldFdpZHRoKHIud2lkdGgoKSk7Ci0gICAgICAgIHIgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBw
b3B1cEJ1dHRvbk1hcmdpbnMoKSwgem9vbUxldmVsKTsKLSAgICB9Ci19Ci0KLUludFJlY3QgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6aW5mbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwpIGNvbnN0
Ci17Ci0gICAgLy8gT25seSBkbyB0aGUgaW5mbGF0aW9uIGlmIHRoZSBhdmFpbGFibGUgd2lkdGgv
aGVpZ2h0IGFyZSB0b28gc21hbGwuICBPdGhlcndpc2UgdHJ5IHRvCi0gICAgLy8gZml0IHRoZSBn
bG93L2NoZWNrIHNwYWNlIGludG8gdGhlIGF2YWlsYWJsZSBib3gncyB3aWR0aC9oZWlnaHQuCi0g
ICAgaW50IHdpZHRoRGVsdGEgPSByLndpZHRoKCkgLSAoc2l6ZS53aWR0aCgpICsgbWFyZ2luc1ts
ZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdpbnNbcmlnaHRNYXJnaW5dICogem9vbUxldmVs
KTsKLSAgICBpbnQgaGVpZ2h0RGVsdGEgPSByLmhlaWdodCgpIC0gKHNpemUuaGVpZ2h0KCkgKyBt
YXJnaW5zW3RvcE1hcmdpbl0gKiB6b29tTGV2ZWwgKyBtYXJnaW5zW2JvdHRvbU1hcmdpbl0gKiB6
b29tTGV2ZWwpOwotICAgIEludFJlY3QgcmVzdWx0KHIpOwotICAgIGlmICh3aWR0aERlbHRhIDwg
MCkgewotICAgICAgICByZXN1bHQuc2V0WChyZXN1bHQueCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2lu
XSAqIHpvb21MZXZlbCk7Ci0gICAgICAgIHJlc3VsdC5zZXRXaWR0aChyZXN1bHQud2lkdGgoKSAt
IHdpZHRoRGVsdGEpOwotICAgIH0KLSAgICBpZiAoaGVpZ2h0RGVsdGEgPCAwKSB7Ci0gICAgICAg
IHJlc3VsdC5zZXRZKHJlc3VsdC55KCkgLSBtYXJnaW5zW3RvcE1hcmdpbl0gKiB6b29tTGV2ZWwp
OwotICAgICAgICByZXN1bHQuc2V0SGVpZ2h0KHJlc3VsdC5oZWlnaHQoKSAtIGhlaWdodERlbHRh
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRmxvYXRSZWN0IFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlu
cHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9h
dFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKLXsKLSAgICBGbG9hdFJl
Y3QgcGFydFJlY3QoaW5wdXRSZWN0KTsKLQotICAgIC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJldHdl
ZW4gdGhlIHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBpbnB1dCByZW5kZXJlcgotICAgIEZsb2F0U2l6
ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcjsKLSAgICBjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gcGFydFJlbmRlcmVyOwotICAgIHdoaWxlIChyZW5kZXJlciAmJiByZW5kZXJlciAhPSBp
bnB1dFJlbmRlcmVyKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogY29udGFpbmluZ1JlbmRlcmVy
ID0gcmVuZGVyZXItPmNvbnRhaW5lcigpOwotICAgICAgICBvZmZzZXRGcm9tSW5wdXRSZW5kZXJl
ciAtPSByZW5kZXJlci0+b2Zmc2V0RnJvbUNvbnRhaW5lcihjb250YWluaW5nUmVuZGVyZXIsIElu
dFBvaW50KCkpOwotICAgICAgICByZW5kZXJlciA9IGNvbnRhaW5pbmdSZW5kZXJlcjsKLSAgICB9
Ci0gICAgLy8gSWYgdGhlIGlucHV0IHJlbmRlcmVyIHdhcyBub3QgYSBjb250YWluZXIsIHNvbWV0
aGluZyB3ZW50IHdyb25nCi0gICAgQVNTRVJUKHJlbmRlcmVyID09IGlucHV0UmVuZGVyZXIpOwot
ICAgIC8vIE1vdmUgdGhlIHJlY3QgaW50byBwYXJ0UmVuZGVyZXIncyBjb29yZHMKLSAgICBwYXJ0
UmVjdC5tb3ZlKG9mZnNldEZyb21JbnB1dFJlbmRlcmVyKTsKLSAgICAvLyBBY2NvdW50IGZvciB0
aGUgbG9jYWwgZHJhd2luZyBvZmZzZXQgKHR4LCB0eSkKLSAgICBwYXJ0UmVjdC5tb3ZlKHIueCgp
LCByLnkoKSk7Ci0KLSAgICByZXR1cm4gcGFydFJlY3Q7CisgICAgcmV0dXJuIEZsaXBwZWRWaWV3
KCk7CiB9CiAKIC8vIFVwZGF0ZXMgdGhlIGNvbnRyb2wgdGludCAoYS5rLmEuIGFjdGl2ZSBzdGF0
ZSkgb2YgfGNlbGx8IChmcm9tIHxvfCkuCkBAIC02MDQsOTE3ICs5NywxMyBAQCB2b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnVwZGF0ZUFjdGl2ZVN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3Qg
UmVuZGVyT2JqZWN0KgogICAgICAgICBbY2VsbCBzZXRDb250cm9sVGludDp0aW50XTsKIH0KIAot
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjp1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiBj
ZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCi17Ci0gICAgYm9vbCBvbGRJbmRldGVybWluYXRl
ID0gW2NlbGwgc3RhdGVdID09IE5TTWl4ZWRTdGF0ZTsKLSAgICBib29sIGluZGV0ZXJtaW5hdGUg
PSBpc0luZGV0ZXJtaW5hdGUobyk7Ci0gICAgYm9vbCBjaGVja2VkID0gaXNDaGVja2VkKG8pOwot
Ci0gICAgaWYgKG9sZEluZGV0ZXJtaW5hdGUgIT0gaW5kZXRlcm1pbmF0ZSkgewotICAgICAgICBb
Y2VsbCBzZXRTdGF0ZTppbmRldGVybWluYXRlID8gTlNNaXhlZFN0YXRlIDogKGNoZWNrZWQgPyBO
U09uU3RhdGUgOiBOU09mZlN0YXRlKV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBi
b29sIG9sZENoZWNrZWQgPSBbY2VsbCBzdGF0ZV0gPT0gTlNPblN0YXRlOwotICAgIGlmIChjaGVj
a2VkICE9IG9sZENoZWNrZWQpCi0gICAgICAgIFtjZWxsIHNldFN0YXRlOmNoZWNrZWQgPyBOU09u
U3RhdGUgOiBOU09mZlN0YXRlXTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjp1
cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCi17
Ci0gICAgYm9vbCBvbGRFbmFibGVkID0gW2NlbGwgaXNFbmFibGVkXTsKLSAgICBib29sIGVuYWJs
ZWQgPSBpc0VuYWJsZWQobyk7Ci0gICAgaWYgKGVuYWJsZWQgIT0gb2xkRW5hYmxlZCkKLSAgICAg
ICAgW2NlbGwgc2V0RW5hYmxlZDplbmFibGVkXTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmpl
Y3QqIG8pCi17Ci0gICAgYm9vbCBvbGRGb2N1c2VkID0gW2NlbGwgc2hvd3NGaXJzdFJlc3BvbmRl
cl07Ci0gICAgYm9vbCBmb2N1c2VkID0gaXNGb2N1c2VkKG8pICYmIG8tPnN0eWxlKCktPm91dGxp
bmVTdHlsZUlzQXV0bygpOwotICAgIGlmIChmb2N1c2VkICE9IG9sZEZvY3VzZWQpCi0gICAgICAg
IFtjZWxsIHNldFNob3dzRmlyc3RSZXNwb25kZXI6Zm9jdXNlZF07Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6dXBkYXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBvKQotewotICAgIGJvb2wgb2xkUHJlc3NlZCA9IFtjZWxsIGlzSGlnaGxp
Z2h0ZWRdOwotICAgIGJvb2wgcHJlc3NlZCA9IChvLT5ub2RlKCkgJiYgby0+bm9kZSgpLT5hY3Rp
dmUoKSk7Ci0gICAgaWYgKHByZXNzZWQgIT0gb2xkUHJlc3NlZCkKLSAgICAgICAgW2NlbGwgc2V0
SGlnaGxpZ2h0ZWQ6cHJlc3NlZF07Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAg
IC8vIEFuIGFsdGVybmF0ZSB3YXkgdG8gaW1wbGVtZW50IHRoaXMgd291bGQgYmUgdG8gZ2V0IHRo
ZSBhcHByb3ByaWF0ZSBjZWxsIG9iamVjdAotICAgIC8vIGFuZCBjYWxsIHRoZSBwcml2YXRlIF9u
ZWVkUmVkcmF3T25XaW5kb3dDaGFuZ2VkS2V5U3RhdGUgbWV0aG9kLiBBbiBhZHZhbnRhZ2Ugb2YK
LSAgICAvLyB0aGF0IHdvdWxkIGJlIHRoYXQgd2Ugd291bGQgbWF0Y2ggQXBwS2l0IGJlaGF2aW9y
IG1vcmUgY2xvc2VseSwgYnV0IGEgZGlzYWR2YW50YWdlCi0gICAgLy8gd291bGQgYmUgdGhhdCB3
ZSB3b3VsZCByZWx5IG9uIGFuIEFwcEtpdCBTUEkgbWV0aG9kLgotCi0gICAgaWYgKCFpc0VuYWJs
ZWQobykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENoZWNrYm94ZXMgb25seSBo
YXZlIHRpbnQgd2hlbiBjaGVja2VkLgotICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkg
PT0gQ2hlY2tib3hQYXJ0KQotICAgICAgICByZXR1cm4gaXNDaGVja2VkKG8pOwotCi0gICAgLy8g
Rm9yIG5vdyBhc3N1bWUgb3RoZXIgY29udHJvbHMgaGF2ZSB0aW50IGlmIGVuYWJsZWQuCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpbnQg
Zm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKLSAgICBpZiAoZm9udFNpemUgPj0gMTYpCi0g
ICAgICAgIHJldHVybiBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKLSAgICBpZiAoZm9udFNpemUgPj0g
MTEpCi0gICAgICAgIHJldHVybiBOU1NtYWxsQ29udHJvbFNpemU7Ci0gICAgcmV0dXJuIE5TTWlu
aUNvbnRyb2xTaXplOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldENvbnRy
b2xTaXplKE5TQ2VsbCogY2VsbCwgY29uc3QgSW50U2l6ZSogc2l6ZXMsIGNvbnN0IEludFNpemUm
IG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCkKLXsKLSAgICBOU0NvbnRyb2xTaXplIHNpemU7Ci0g
ICAgaWYgKG1pblNpemUud2lkdGgoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TUmVndWxh
ckNvbnRyb2xTaXplXS53aWR0aCgpICogem9vbUxldmVsKSAmJgotICAgICAgICBtaW5TaXplLmhl
aWdodCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLmhl
aWdodCgpICogem9vbUxldmVsKSkKLSAgICAgICAgc2l6ZSA9IE5TUmVndWxhckNvbnRyb2xTaXpl
OwotICAgIGVsc2UgaWYgKG1pblNpemUud2lkdGgoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVz
W05TU21hbGxDb250cm9sU2l6ZV0ud2lkdGgoKSAqIHpvb21MZXZlbCkgJiYKLSAgICAgICAgICAg
ICBtaW5TaXplLmhlaWdodCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6ZXNbTlNTbWFsbENvbnRy
b2xTaXplXS5oZWlnaHQoKSAqIHpvb21MZXZlbCkpCi0gICAgICAgIHNpemUgPSBOU1NtYWxsQ29u
dHJvbFNpemU7Ci0gICAgZWxzZQotICAgICAgICBzaXplID0gTlNNaW5pQ29udHJvbFNpemU7Ci0g
ICAgaWYgKHNpemUgIT0gW2NlbGwgY29udHJvbFNpemVdKSAvLyBPbmx5IHVwZGF0ZSBpZiB3ZSBo
YXZlIHRvLCBzaW5jZSBBcHBLaXQgZG9lcyB3b3JrIGV2ZW4gaWYgdGhlIHNpemUgaXMgdGhlIHNh
bWUuCi0gICAgICAgIFtjZWxsIHNldENvbnRyb2xTaXplOnNpemVdOwotfQotCi1JbnRTaXplIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnNpemVGb3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Ci17Ci0gICAgaWYgKHN0eWxlLT5lZmZlY3RpdmVab29t
KCkgIT0gMS4wZikgewotICAgICAgICBJbnRTaXplIHJlc3VsdCA9IHNpemVzW2NvbnRyb2xTaXpl
Rm9yRm9udChzdHlsZSldOwotICAgICAgICByZXR1cm4gSW50U2l6ZShyZXN1bHQud2lkdGgoKSAq
IHN0eWxlLT5lZmZlY3RpdmVab29tKCksIHJlc3VsdC5oZWlnaHQoKSAqIHN0eWxlLT5lZmZlY3Rp
dmVab29tKCkpOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0
eWxlKV07Ci19Ci0KLUludFNpemUgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2l6ZUZvclN5c3Rl
bUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKLXsK
LSAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKSB7Ci0gICAgICAgIEludFNp
emUgcmVzdWx0ID0gc2l6ZXNbY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KHN0eWxlKV07Ci0gICAg
ICAgIHJldHVybiBJbnRTaXplKHJlc3VsdC53aWR0aCgpICogc3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSwgcmVzdWx0LmhlaWdodCgpICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7Ci0gICAgfQotICAg
IHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUpXTsKLX0KLQotdm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogQ2hlY2sg
aXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRv
IGFjY291bnQuCi0gICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvckZvbnQoc3R5bGUsIHNpemVzKTsK
LSAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRo
KCkgPiAwKQotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4
ZWQpKTsKLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkg
PiAwKQotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhl
ZCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldEZvbnRGcm9tQ29udHJv
bFNpemUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6
ZSBjb250cm9sU2l6ZSkgY29uc3QKLXsKLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKLSAgICBm
b250RGVzY3JpcHRpb24uc2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246OlNlcmlmRmFt
aWx5KTsKLQotICAgIE5TRm9udCogZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNG
b250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6Y29udHJvbFNpemVdXTsKLSAgICBmb250
RGVzY3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoW2ZvbnQgZmFtaWx5TmFtZV0pOwot
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0
eWxlLT5lZmZlY3RpdmVab29tKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRT
aXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKLQotICAgIC8v
IFJlc2V0IGxpbmUgaGVpZ2h0Ci0gICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotCi0gICAgaWYgKHN0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKSkKLSAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoMCk7Ci19
Ci0KLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJvbFNpemVGb3JT
eXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBpbnQgZm9udFNpemUg
PSBzdHlsZS0+Zm9udFNpemUoKTsKLSAgICBpZiAoZm9udFNpemUgPj0gW05TRm9udCBzeXN0ZW1G
b250U2l6ZUZvckNvbnRyb2xTaXplOk5TUmVndWxhckNvbnRyb2xTaXplXSkKLSAgICAgICAgcmV0
dXJuIE5TUmVndWxhckNvbnRyb2xTaXplOwotICAgIGlmIChmb250U2l6ZSA+PSBbTlNGb250IHN5
c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6TlNTbWFsbENvbnRyb2xTaXplXSkKLSAgICAgICAg
cmV0dXJuIE5TU21hbGxDb250cm9sU2l6ZTsKLSAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7
Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQotewotICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENv
bnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd0JlemVsZWRUZXh0RmllbGRDZWxs
KHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RUZXh0RmllbGRT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKLXsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9y
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgTG9jYWxDdXJyZW50R3Jh
cGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3
Q2Fwc0xvY2tJbmRpY2F0b3IocGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBy
KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0Ry
YXdCZXplbGVkVGV4dEFyZWEociwgaXNFbmFibGVkKG8pICYmICFpc1JlYWRPbmx5Q29udHJvbChv
KSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0Ci17Ci19Ci0KLWNvbnN0IGludCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdp
bnNbM11bNF0gPQotICAgIHsKLSAgICAgICAgeyAwLCAzLCAxLCAzIH0sCi0gICAgICAgIHsgMCwg
MywgMiwgMyB9LAotICAgICAgICB7IDAsIDEsIDAsIDEgfQotICAgIH07Ci0gICAgcmV0dXJuIG1h
cmdpbnNbW3BvcHVwQnV0dG9uKCkgY29udHJvbFNpemVdXTsKLX0KLQotY29uc3QgSW50U2l6ZSog
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBCdXR0b25TaXplcygpIGNvbnN0Ci17Ci0gICAg
c3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjEpLCBJbnRTaXpl
KDAsIDE4KSwgSW50U2l6ZSgwLCAxNSkgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLWNvbnN0
IGludCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBCdXR0b25QYWRkaW5nKE5TQ29udHJv
bFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IHBhZGRpbmdbM11bNF0g
PQotICAgIHsKLSAgICAgICAgeyAyLCAyNiwgMywgOCB9LAotICAgICAgICB7IDIsIDIzLCAzLCA4
IH0sCi0gICAgICAgIHsgMiwgMjIsIDMsIDEwIH0KLSAgICB9OwotICAgIHJldHVybiBwYWRkaW5n
W3NpemVdOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVudUxpc3Qo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIp
OwotCi0gICAgTlNQb3BVcEJ1dHRvbkNlbGwqIHBvcHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0
b24oKTsKLQotICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KTsKLSAgICBJbnRTaXplIHNpemUgPSBwb3B1cEJ1dHRvblNpemVzKClbW3BvcHVwQnV0dG9uIGNv
bnRyb2xTaXplXV07Ci0gICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZl
bCk7Ci0gICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwotCi0gICAgLy8gTm93IGluZmxhdGUg
aXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KLSAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9
IHI7Ci0gICAgaWYgKHIud2lkdGgoKSA+PSBtaW5pbXVtTWVudUxpc3RTaXplKG8tPnN0eWxlKCkp
KQotICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUs
IHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKLQotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIC8vIE9uIExlb3Bh
cmQsIHRoZSBjZWxsIHdpbGwgZHJhdyBvdXRzaWRlIG9mIHRoZSBnaXZlbiByZWN0LCBzbyB3ZSBo
YXZlIHRvIGNsaXAgdG8gdGhlIHJlY3QKLSAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChpbmZs
YXRlZFJlY3QpOwotI2VuZGlmCi0KLSAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKLSAgICAg
ICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVs
KTsKLSAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkg
LyB6b29tTGV2ZWwpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKGluZmxh
dGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55KCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7Ci0gICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3Qu
eSgpKTsKLSAgICB9Ci0KLSAgICBbcG9wdXBCdXR0b24gZHJhd1dpdGhGcmFtZTppbmZsYXRlZFJl
Y3QgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwotICAgIFtwb3B1cEJ1dHRvbiBzZXRDb250cm9sVmll
dzpuaWxdOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotY29uc3QgZmxvYXQgYmFzZUZvbnRTaXplID0gMTEuMGY7Ci1jb25zdCBm
bG9hdCBiYXNlQXJyb3dIZWlnaHQgPSA0LjBmOwotY29uc3QgZmxvYXQgYmFzZUFycm93V2lkdGgg
PSA1LjBmOwotY29uc3QgZmxvYXQgYmFzZVNwYWNlQmV0d2VlbkFycm93cyA9IDIuMGY7Ci1jb25z
dCBpbnQgYXJyb3dQYWRkaW5nTGVmdCA9IDY7Ci1jb25zdCBpbnQgYXJyb3dQYWRkaW5nUmlnaHQg
PSA2OwotY29uc3QgaW50IHBhZGRpbmdCZWZvcmVTZXBhcmF0b3IgPSA0OwotY29uc3QgaW50IGJh
c2VCb3JkZXJSYWRpdXMgPSA1OwotY29uc3QgaW50IHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQgPSA4
OwotY29uc3QgaW50IHN0eWxlZFBvcHVwUGFkZGluZ1RvcCA9IDE7Ci1jb25zdCBpbnQgc3R5bGVk
UG9wdXBQYWRkaW5nQm90dG9tID0gMjsKLQotc3RhdGljIHZvaWQgVG9wR3JhZGllbnRJbnRlcnBv
bGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQotewot
ICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAwLjRmIH07Ci0g
ICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAwLjE1ZiB9Owot
ICAgIGZsb2F0IGEgPSBpbkRhdGFbMF07Ci0gICAgaW50IGkgPSAwOwotICAgIGZvciAoaSA9IDA7
IGkgPCA0OyBpKyspCi0gICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFya1tpXSAr
IGEgKiBsaWdodFtpXTsKLX0KLQotc3RhdGljIHZvaWQgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0
ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQotewotICAg
IHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAwLjBmIH07Ci0gICAg
c3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAxLjBmLCAxLjBmLCAxLjBmLCAwLjNmIH07Ci0gICAg
ZmxvYXQgYSA9IGluRGF0YVswXTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8
IDQ7IGkrKykKLSAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAq
IGxpZ2h0W2ldOwotfQotCi1zdGF0aWMgdm9pZCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lk
KiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQotewotICAgIHN0YXRp
YyBmbG9hdCBkYXJrWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAwLjE1ZiB9OwotICAgIHN0YXRp
YyBmbG9hdCBsaWdodFs0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4wZiB9OwotICAgIGZsb2F0
IGEgPSBpbkRhdGFbMF07Ci0gICAgaW50IGkgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBp
KyspCi0gICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFya1tpXSArIGEgKiBsaWdo
dFtpXTsKLX0KLQotc3RhdGljIHZvaWQgVHJhY2tHcmFkaWVudEludGVycG9sYXRlKHZvaWQqLCBj
b25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCi17Ci0gICAgc3RhdGljIGZs
b2F0IGRhcmtbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuNjc4ZiB9OwotICAgIHN0YXRpYyBm
bG9hdCBsaWdodFs0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4xM2YgfTsKLSAgICBmbG9hdCBh
ID0gaW5EYXRhWzBdOwotICAgIGludCBpID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsr
KQotICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICogbGlnaHRb
aV07Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRv
bkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKHIuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZl
KCk7Ci0KLSAgICBJbnRTaXplIHRvcExlZnRSYWRpdXM7Ci0gICAgSW50U2l6ZSB0b3BSaWdodFJh
ZGl1czsKLSAgICBJbnRTaXplIGJvdHRvbUxlZnRSYWRpdXM7Ci0gICAgSW50U2l6ZSBib3R0b21S
aWdodFJhZGl1czsKLQotICAgIG8tPnN0eWxlKCktPmdldEJvcmRlclJhZGlpRm9yUmVjdChyLCB0
b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmln
aHRSYWRpdXMpOwotCi0gICAgaW50IHJhZGl1cyA9IHRvcExlZnRSYWRpdXMud2lkdGgoKTsKLQot
ICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNzcGFjZShBZG9wdENGLCBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VSR0IoKSk7Ci0KLSAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCks
IHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKLSAgICBzdHJ1Y3QgQ0dGdW5j
dGlvbkNhbGxiYWNrcyB0b3BDYWxsYmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUs
IE5VTEwgfTsKLSAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rpb24oQWRvcHRD
RiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmdG9wQ2FsbGJhY2tz
KSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9wdENGLCBDR1No
YWRpbmdDcmVhdGVBeGlhbChjc3BhY2UuZ2V0KCksIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50Lngo
KSwgdG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFk
aWVudC5ib3R0b20oKSksIHRvcEZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKLQotICAg
IEZsb2F0UmVjdCBib3R0b21HcmFkaWVudChyLngoKSArIHJhZGl1cywgci55KCkgKyByLmhlaWdo
dCgpIC8gMi4wZiwgci53aWR0aCgpIC0gMi4wZiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYp
OwotICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9IHsgMCwg
Qm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwotICAgIFJldGFpblB0cjxDR0Z1bmN0
aW9uUmVmPiBib3R0b21GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEs
IE5VTEwsIDQsIE5VTEwsICZib3R0b21DYWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFk
aW5nUmVmPiBib3R0b21TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFj
ZS5nZXQoKSwgQ0dQb2ludE1ha2UoYm90dG9tR3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQu
eSgpKSwgQ0dQb2ludE1ha2UoYm90dG9tR3JhZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5ib3R0
b20oKSksIGJvdHRvbUZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKLQotICAgIHN0cnVj
dCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIG1haW5DYWxsYmFja3MgPSB7IDAsIE1haW5HcmFkaWVudElu
dGVycG9sYXRlLCBOVUxMIH07Ci0gICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5j
dGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZt
YWluQ2FsbGJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmco
QWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLmdldCgpLCBDR1BvaW50TWFrZShy
LngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54KCksIHIuYm90dG9tKCkpLCBtYWluRnVuY3Rp
b24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwotCi0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4g
bGVmdFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLmdldCgpLCBD
R1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54KCkgKyByYWRpdXMsIHIu
eSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKLQotICAgIFJldGFpblB0
cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlh
bChjc3BhY2UuZ2V0KCksIENHUG9pbnRNYWtlKHIucmlnaHQoKSwgIHIueSgpKSwgQ0dQb2ludE1h
a2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2Us
IGZhbHNlKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQsIHIpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVk
UmVjdENsaXAociwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRp
dXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKLSAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBtYWluU2hhZGluZy5nZXQoKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsK
LQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LCB0b3BHcmFkaWVudCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5k
ZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwgdG9wTGVmdFJhZGl1cywg
dG9wUmlnaHRSYWRpdXMsIEludFNpemUoKSwgSW50U2l6ZSgpKTsKLSAgICBDR0NvbnRleHREcmF3
U2hhZGluZyhjb250ZXh0LCB0b3BTaGFkaW5nLmdldCgpKTsKLSAgICBwYWludEluZm8uY29udGV4
dC0+cmVzdG9yZSgpOwotCi0gICAgaWYgKCFib3R0b21HcmFkaWVudC5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRv
UmVjdChjb250ZXh0LCBib3R0b21HcmFkaWVudCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5hZGRSb3VuZGVkUmVjdENsaXAoZW5jbG9zaW5nSW50UmVjdChib3R0b21HcmFkaWVudCksIElu
dFNpemUoKSwgSW50U2l6ZSgpLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7
Ci0gICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIGJvdHRvbVNoYWRpbmcuZ2V0
KCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIH0KLQotICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LCByKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHIsIHRv
cExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdo
dFJhZGl1cyk7Ci0gICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbGVmdFNoYWRpbmcu
Z2V0KCkpOwotICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHJpZ2h0U2hhZGluZy5n
ZXQoKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIHBhaW50SW5m
by5jb250ZXh0LT5yZXN0b3JlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgSW50UmVjdCBi
b3VuZHMgPSBJbnRSZWN0KHIueCgpICsgby0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIueSgpICsgby0+c3R5bGUoKS0+Ym9yZGVyVG9w
V2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci53aWR0aCgpIC0gby0+c3R5
bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBvLT5zdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuaGVpZ2h0KCkgLSBvLT5zdHlsZSgpLT5i
b3JkZXJUb3BXaWR0aCgpIC0gby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7Ci0gICAg
Ly8gRHJhdyB0aGUgZ3JhZGllbnRzIHRvIGdpdmUgdGhlIHN0eWxlZCBwb3B1cCBtZW51IGEgYnV0
dG9uIGFwcGVhcmFuY2UKLSAgICBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKG8sIHBhaW50
SW5mbywgYm91bmRzKTsKLQotICAgIC8vIFNpbmNlIHdlIGFjdHVhbGx5IGtub3cgdGhlIHNpemUg
b2YgdGhlIGNvbnRyb2wgaGVyZSwgd2UgcmVzdHJpY3QgdGhlIGZvbnQgc2NhbGUgdG8gbWFrZSBz
dXJlIHRoZSBhcnJvd3Mgd2lsbCBmaXQgdmVydGljYWxseSBpbiB0aGUgYm91bmRzCi0gICAgZmxv
YXQgZm9udFNjYWxlID0gbWluKG8tPnN0eWxlKCktPmZvbnRTaXplKCkgLyBiYXNlRm9udFNpemUs
IGJvdW5kcy5oZWlnaHQoKSAvIChiYXNlQXJyb3dIZWlnaHQgKiAyICsgYmFzZVNwYWNlQmV0d2Vl
bkFycm93cykpOwotICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdo
dCgpIC8gMi4wZjsKLSAgICBmbG9hdCBhcnJvd0hlaWdodCA9IGJhc2VBcnJvd0hlaWdodCAqIGZv
bnRTY2FsZTsKLSAgICBmbG9hdCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2Nh
bGU7Ci0gICAgZmxvYXQgbGVmdEVkZ2UgPSBib3VuZHMucmlnaHQoKSAtIGFycm93UGFkZGluZ1Jp
Z2h0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIC0gYXJyb3dXaWR0aDsKLSAgICBmbG9h
dCBzcGFjZUJldHdlZW5BcnJvd3MgPSBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzICogZm9udFNjYWxl
OwotCi0gICAgaWYgKGJvdW5kcy53aWR0aCgpIDwgYXJyb3dXaWR0aCArIGFycm93UGFkZGluZ0xl
ZnQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBwYWludEluZm8uY29udGV4
dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCktPmNvbG9yKCksIG8tPnN0eWxlKCktPmNvbG9yU3Bh
Y2UoKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsK
LQotICAgIEZsb2F0UG9pbnQgYXJyb3cxWzNdOwotICAgIGFycm93MVswXSA9IEZsb2F0UG9pbnQo
bGVmdEVkZ2UsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsKLSAgICBhcnJv
dzFbMV0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCwgY2VudGVyWSAtIHNwYWNl
QmV0d2VlbkFycm93cyAvIDIuMGYpOwotICAgIGFycm93MVsyXSA9IEZsb2F0UG9pbnQobGVmdEVk
Z2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIu
MGYgLSBhcnJvd0hlaWdodCk7Ci0KLSAgICAvLyBEcmF3IHRoZSB0b3AgYXJyb3cKLSAgICBwYWlu
dEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgYXJyb3cxLCB0cnVlKTsKLQotICAg
IEZsb2F0UG9pbnQgYXJyb3cyWzNdOwotICAgIGFycm93MlswXSA9IEZsb2F0UG9pbnQobGVmdEVk
Z2UsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsKLSAgICBhcnJvdzJbMV0g
PSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCwgY2VudGVyWSArIHNwYWNlQmV0d2Vl
bkFycm93cyAvIDIuMGYpOwotICAgIGFycm93MlsyXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBh
cnJvd1dpZHRoIC8gMi4wZiwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYgKyBh
cnJvd0hlaWdodCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBib3R0b20gYXJyb3cKLSAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywgYXJyb3cyLCB0cnVlKTsKLQotICAgIENv
bG9yIGxlZnRTZXBhcmF0b3JDb2xvcigwLCAwLCAwLCA0MCk7Ci0gICAgQ29sb3IgcmlnaHRTZXBh
cmF0b3JDb2xvcigyNTUsIDI1NSwgMjU1LCA0MCk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHRo
ZSBzZXBhcmF0b3IgdGhpY2tuZXNzIGFuZCBzcGFjZSBiZSBzY2FsZWQgdXAgYnkgZm9udFNjYWxl
PwotICAgIGludCBzZXBhcmF0b3JTcGFjZSA9IDI7IC8vIERlbGliZXJhdGVseSBpZ25vcmVzIHpv
b20gc2luY2UgaXQgbG9va3MgbmljZXIgaWYgaXQgc3RheXMgdGhpbi4KLSAgICBpbnQgbGVmdEVk
Z2VPZlNlcGFyYXRvciA9IHN0YXRpY19jYXN0PGludD4obGVmdEVkZ2UgLSBhcnJvd1BhZGRpbmdM
ZWZ0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsgLy8gRklYTUU6IFJvdW5kPwotCi0g
ICAgLy8gRHJhdyB0aGUgc2VwYXJhdG9yIHRvIHRoZSBsZWZ0IG9mIHRoZSBhcnJvd3MKLSAgICBw
YWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOyAvLyBEZWxpYmVyYXRl
bHkgaWdub3JlcyB6b29tIHNpbmNlIGl0IGxvb2tzIG5pY2VyIGlmIGl0IHN0YXlzIHRoaW4uCi0g
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICBw
YWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGVmdFNlcGFyYXRvckNvbG9yLCBEZXZp
Y2VDb2xvclNwYWNlKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQo
bGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLnkoKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy5ib3R0b20oKSkp
OwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJpZ2h0U2VwYXJhdG9y
Q29sb3IsIERldmljZUNvbG9yU3BhY2UpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGlu
ZShJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55
KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9m
U2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy5ib3R0b20oKSkpOwotCi0gICAgcGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRp
YyBjb25zdCBJbnRTaXplKiBtZW51TGlzdEJ1dHRvblNpemVzKCkKLXsKLSAgICBzdGF0aWMgY29u
c3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgwLCAyMSksIEludFNpemUoMCwgMTgpLCBJ
bnRTaXplKDAsIDE1KSB9OwotICAgIHJldHVybiBzaXplczsKLX0KLQotdm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgTlNDb250
cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7Ci0KLSAgICBz
dHlsZS0+cmVzZXRCb3JkZXIoKTsKLSAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7Ci0KLSAgICAv
LyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
QXV0bykpOwotCi0gICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKFBSRSk7Ci0KLSAgICAvLyBTZXQgdGhlIGZvcmVncm91bmQgY29sb3Ig
dG8gYmxhY2sgb3IgZ3JheSB3aGVuIHdlIGhhdmUgdGhlIGFxdWEgbG9vay4KLSAgICAvLyBDYXN0
IHRvIFJHQjMyIGlzIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnLgotICAgIHN0eWxlLT5z
ZXRDb2xvcihlICYmIGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JB
MzI+KENvbG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOwotCi0gICAgLy8gU2V0IHRoZSBi
dXR0b24ncyB2ZXJ0aWNhbCBzaXplLgotICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgbWVudUxp
c3RCdXR0b25TaXplcygpKTsKLQotICAgIC8vIE91ciBmb250IGlzIGxvY2tlZCB0byB0aGUgYXBw
cm9wcmlhdGUgc3lzdGVtIGZvbnQgc2l6ZSBmb3IgdGhlIGNvbnRyb2wuICBUbyBjbGFyaWZ5LCB3
ZSBmaXJzdCB1c2UgdGhlIENTUy1zcGVjaWZpZWQgZm9udCB0byBmaWd1cmUgb3V0Ci0gICAgLy8g
YSByZWFzb25hYmxlIGNvbnRyb2wgc2l6ZSwgYnV0IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMg
ZGV0ZXJtaW5lZCwgd2UgdGhyb3cgdGhhdCBmb250IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlh
dGUKLSAgICAvLyBzeXN0ZW0gZm9udCBmb3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgotICAg
IHNldEZvbnRGcm9tQ29udHJvbFNpemUoc2VsZWN0b3IsIHN0eWxlLCBjb250cm9sU2l6ZSk7Ci0K
LSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
LXsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAg
IHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbbGVm
dFBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCi0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1
cFBhZGRpbmdMZWZ0ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250
cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQp
IHsKLSAgICAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBiYXNlRm9u
dFNpemU7Ci0gICAgICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRT
Y2FsZTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYoYXJyb3dXaWR0aCAr
IChhcnJvd1BhZGRpbmdMZWZ0ICsgYXJyb3dQYWRkaW5nUmlnaHQgKyBwYWRkaW5nQmVmb3JlU2Vw
YXJhdG9yKSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWludCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1Rv
cChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNv
bnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3RvcFBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQp
Ci0gICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgKiBzdHlsZS0+ZWZmZWN0aXZl
Wm9vbSgpOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewot
ICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0
dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtib3R0b21Q
YWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQotICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQ
YWRkaW5nQm90dG9tICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAot
ewotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXpl
OwotCi0gICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJSYWRp
dXMoSW50U2l6ZShpbnQoYmFzZUJvcmRlclJhZGl1cyArIGZvbnRTY2FsZSAtIDEpLCBpbnQoYmFz
ZUJvcmRlclJhZGl1cyArIGZvbnRTY2FsZSAtIDEpKSk7IC8vIEZJWE1FOiBSb3VuZCB1cD8KLQot
ICAgIGNvbnN0IGludCBtaW5IZWlnaHQgPSAxNTsKLSAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExl
bmd0aChtaW5IZWlnaHQsIEZpeGVkKSk7Ci0KLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5k
ZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBJbnRSZWN0JiByKQotewotICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRvbiA9
IHRoaXMtPnBvcHVwQnV0dG9uKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNl
ZCBvZmYgdGhlIHJlY3RhbmdsZSB3ZSdyZSBwYWludGluZyBpbnRvLgotICAgIHNldENvbnRyb2xT
aXplKHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNpemVzKCksIHIuc2l6ZSgpLCBvLT5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCkpOwotCi0gICAgLy8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3
ZSByZXNwb25kIHRvLgotICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKLSAg
ICB1cGRhdGVDaGVja2VkU3RhdGUocG9wdXBCdXR0b24sIG8pOwotICAgIHVwZGF0ZUVuYWJsZWRT
dGF0ZShwb3B1cEJ1dHRvbiwgbyk7Ci0gICAgdXBkYXRlUHJlc3NlZFN0YXRlKHBvcHVwQnV0dG9u
LCBvKTsKLSAgICB1cGRhdGVGb2N1c2VkU3RhdGUocG9wdXBCdXR0b24sIG8pOwotfQotCi1jb25z
dCBJbnRTaXplKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjptZW51TGlzdFNpemVzKCkgY29uc3QK
LXsKLSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSg5LCAwKSwg
SW50U2l6ZSg1LCAwKSwgSW50U2l6ZSgwLCAwKSB9OwotICAgIHJldHVybiBzaXplczsKLX0KLQot
aW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5
bGUqIHN0eWxlKSBjb25zdAotewotICAgIHJldHVybiBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwg
bWVudUxpc3RTaXplcygpKS53aWR0aCgpOwotfQotCi1jb25zdCBpbnQgdHJhY2tXaWR0aCA9IDU7
Ci1jb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOwotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICBJbnRSZWN0IGJvdW5kcyA9IHI7Ci0gICAgZmxvYXQgem9v
bUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGZsb2F0IHpvb21lZFRy
YWNrV2lkdGggPSB0cmFja1dpZHRoICogem9vbUxldmVsOwotCi0gICAgaWYgKG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSAgU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgby0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpID09ICBNZWRpYVNsaWRlclBhcnQpIHsKLSAgICAgICAgYm91bmRzLnNldEhlaWdo
dCh6b29tZWRUcmFja1dpZHRoKTsKLSAgICAgICAgYm91bmRzLnNldFkoci55KCkgKyByLmhlaWdo
dCgpIC8gMiAtIHpvb21lZFRyYWNrV2lkdGggLyAyKTsKLSAgICB9IGVsc2UgaWYgKG8tPnN0eWxl
KCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKLSAgICAgICAgYm91bmRz
LnNldFdpZHRoKHpvb21lZFRyYWNrV2lkdGgpOwotICAgICAgICBib3VuZHMuc2V0WChyLngoKSAr
IHIud2lkdGgoKSAvIDIgLSB6b29tZWRUcmFja1dpZHRoIC8gMik7Ci0gICAgfQotCi0gICAgTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7
Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7Ci0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY3NwYWNlKEFkb3B0Q0Ys
IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0
LT5zYXZlKCk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3VuZHMpOwotCi0g
ICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgVHJhY2tH
cmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07Ci0gICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+
IG1haW5GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQs
IE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFp
blNoYWRpbmc7Ci0gICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0
aWNhbFBhcnQpCi0gICAgICAgIG1haW5TaGFkaW5nLmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhp
YWwoY3NwYWNlLmdldCgpLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91bmRzLmJvdHRvbSgp
KSwgQ0dQb2ludE1ha2UoYm91bmRzLnJpZ2h0KCksIGJvdW5kcy5ib3R0b20oKSksIG1haW5GdW5j
dGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgZWxzZQotICAgICAgICBtYWluU2hhZGlu
Zy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZS5nZXQoKSwgQ0dQb2ludE1ha2Uo
Ym91bmRzLngoKSwgIGJvdW5kcy55KCkpLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCBib3VuZHMu
Ym90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwotCi0gICAgSW50
U2l6ZSByYWRpdXModHJhY2tSYWRpdXMsIHRyYWNrUmFkaXVzKTsKLSAgICBwYWludEluZm8uY29u
dGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGJvdW5kcywKLSAgICAgICAgcmFkaXVzLCByYWRpdXMs
Ci0gICAgICAgIHJhZGl1cywgcmFkaXVzKTsKLSAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250
ZXh0LCBtYWluU2hhZGluZy5nZXQoKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Ci19
Ci0KLWNvbnN0IGZsb2F0IHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyA9IDAuMWY7Ci0KLWJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCi17Ci0gICAgQVNTRVJUKG8tPnBhcmVudCgpLT5pc1NsaWRlcigpKTsKLQotICAgIE5T
U2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJDZWxsID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0Ci0gICAgICAgID8gc2xpZGVyVGh1bWJWZXJ0aWNhbCgp
Ci0gICAgICAgIDogc2xpZGVyVGh1bWJIb3Jpem9udGFsKCk7Ci0KLSAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLQotICAgIC8v
IFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KLSAgICB1cGRhdGVBY3Rp
dmVTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8tPnBhcmVudCgpKTsKLSAgICB1cGRhdGVFbmFibGVk
U3RhdGUoc2xpZGVyVGh1bWJDZWxsLCBvLT5wYXJlbnQoKSk7Ci0gICAgdXBkYXRlRm9jdXNlZFN0
YXRlKHNsaWRlclRodW1iQ2VsbCwgby0+cGFyZW50KCkpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBw
cmVzc2VkIHN0YXRlIHVzaW5nIHRoZSBOU0NlbGwgdHJhY2tpbmcgbWV0aG9kcywgc2luY2UgdGhh
dCdzIGhvdyBOU1NsaWRlckNlbGwga2VlcHMgdHJhY2sgb2YgaXQuCi0gICAgYm9vbCBvbGRQcmVz
c2VkOwotICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQpCi0gICAgICAgIG9sZFByZXNzZWQgPSBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFBy
ZXNzZWQ7Ci0gICAgZWxzZQotICAgICAgICBvbGRQcmVzc2VkID0gbV9pc1NsaWRlclRodW1iSG9y
aXpvbnRhbFByZXNzZWQ7Ci0KLSAgICBib29sIHByZXNzZWQgPSB0b1JlbmRlclNsaWRlcihvLT5w
YXJlbnQoKSktPmluRHJhZ01vZGUoKTsKLQotICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNl
KCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG1faXNTbGlkZXJUaHVtYlZl
cnRpY2FsUHJlc3NlZCA9IHByZXNzZWQ7Ci0gICAgZWxzZQotICAgICAgICBtX2lzU2xpZGVyVGh1
bWJIb3Jpem9udGFsUHJlc3NlZCA9IHByZXNzZWQ7Ci0KLSAgICBpZiAocHJlc3NlZCAhPSBvbGRQ
cmVzc2VkKSB7Ci0gICAgICAgIGlmIChwcmVzc2VkKQotICAgICAgICAgICAgW3NsaWRlclRodW1i
Q2VsbCBzdGFydFRyYWNraW5nQXQ6TlNQb2ludCgpIGluVmlldzpuaWxdOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBbc2xpZGVyVGh1bWJDZWxsIHN0b3BUcmFja2luZzpOU1BvaW50KCkgYXQ6
TlNQb2ludCgpIGluVmlldzpuaWwgbW91c2VJc1VwOllFU107Ci0gICAgfQotCi0gICAgRmxvYXRS
ZWN0IGJvdW5kcyA9IHI7Ci0gICAgLy8gTWFrZSB0aGUgaGVpZ2h0IG9mIHRoZSB2ZXJ0aWNhbCBz
bGlkZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5TU2xpZGVyQ2VsbCB3aWxsIGRyYXcgYSB2ZXJ0aWNh
bCBzbGlkZXIuCi0gICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVt
YlZlcnRpY2FsUGFydCkKLSAgICAgICAgYm91bmRzLnNldEhlaWdodChib3VuZHMuaGVpZ2h0KCkg
KyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRpbmcgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICBmbG9hdCB6b29tTGV2
ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICBGbG9hdFJlY3QgdW56b29t
ZWRSZWN0ID0gYm91bmRzOwotICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgewotICAgICAgICB1
bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOwot
ICAgICAgICB1bnpvb21lZFJlY3Quc2V0SGVpZ2h0KHVuem9vbWVkUmVjdC5oZWlnaHQoKSAvIHpv
b21MZXZlbCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUodW56b29tZWRS
ZWN0LngoKSwgdW56b29tZWRSZWN0LnkoKSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKLSAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkp
OwotICAgIH0KLQotICAgIFtzbGlkZXJUaHVtYkNlbGwgZHJhd1dpdGhGcmFtZTp1bnpvb21lZFJl
Y3QgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwotICAgIFtzbGlkZXJUaHVtYkNlbGwgc2V0Q29udHJv
bFZpZXc6bmlsXTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFy
Y2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgTlNTZWFyY2hGaWVsZENlbGwqIHNl
YXJjaCA9IHRoaXMtPnNlYXJjaCgpOwotICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBs
b2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotCi0gICAgc2V0U2VhcmNoQ2VsbFN0YXRl
KG8sIHIpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQotICAgIGZsb2F0IHpv
b21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIEludFJlY3QgdW56
b29tZWRSZWN0ID0gcjsKLQotICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgewotICAgICAgICB1
bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOwot
ICAgICAgICB1bnpvb21lZFJlY3Quc2V0SGVpZ2h0KHVuem9vbWVkUmVjdC5oZWlnaHQoKSAvIHpv
b21MZXZlbCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUodW56b29tZWRS
ZWN0LngoKSwgdW56b29tZWRSZWN0LnkoKSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKLSAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkp
OwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgc2VhcmNoIGJ1dHRvbiB0byBuaWwgYmVmb3JlIGRy
YXdpbmcuICBUaGVuIHJlc2V0IGl0IHNvIHdlIGNhbiBkcmF3IGl0IGxhdGVyLgotICAgIFtzZWFy
Y2ggc2V0U2VhcmNoQnV0dG9uQ2VsbDpuaWxdOwotCi0gICAgW3NlYXJjaCBkcmF3V2l0aEZyYW1l
Ok5TUmVjdCh1bnpvb21lZFJlY3QpIGluVmlldzpGbGlwcGVkVmlldygpXTsKLSNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgotICAgIGlmIChbc2VhcmNoIHNob3dzRmlyc3RSZXNwb25kZXJdKQotICAg
ICAgICB3a0RyYXdUZXh0RmllbGRDZWxsRm9jdXNSaW5nKHNlYXJjaCwgTlNSZWN0KHVuem9vbWVk
UmVjdCkpOwotI2VuZGlmCi0KLSAgICBbc2VhcmNoIHNldENvbnRyb2xWaWV3Om5pbF07Ci0gICAg
W3NlYXJjaCByZXNldFNlYXJjaEJ1dHRvbkNlbGxdOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQt
PnJlc3RvcmUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRS
ZWN0JikKLXsKLSAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7
Ci0KLSAgICBbc2VhcmNoIHNldENvbnRyb2xTaXplOmNvbnRyb2xTaXplRm9yRm9udChvLT5zdHls
ZSgpKV07Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8u
Ci0gICAgdXBkYXRlQWN0aXZlU3RhdGUoc2VhcmNoLCBvKTsKLSAgICB1cGRhdGVFbmFibGVkU3Rh
dGUoc2VhcmNoLCBvKTsKLSAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2VhcmNoLCBvKTsKLX0KLQot
Y29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2VhcmNoRmllbGRTaXplcygp
IGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUo
MCwgMjIpLCBJbnRTaXplKDAsIDE5KSwgSW50U2l6ZSgwLCAxNykgfTsKLSAgICByZXR1cm4gc2l6
ZXM7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2V0U2VhcmNoRmllbGRTaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhl
aWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAg
IGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBVc2UgdGhlIGZvbnQgc2l6
ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KLSAgICBz
ZXRTaXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6ZXMoKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAg
ICAvLyBPdmVycmlkZSBib3JkZXIuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgY29u
c3Qgc2hvcnQgYm9yZGVyV2lkdGggPSAyICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBz
dHlsZS0+c2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRlcldpZHRoKTsKLSAgICBzdHlsZS0+c2V0Qm9y
ZGVyTGVmdFN0eWxlKElOU0VUKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRXaWR0aChib3Jk
ZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJvcmRlclJpZ2h0U3R5bGUoSU5TRVQpOwotICAgIHN0
eWxlLT5zZXRCb3JkZXJCb3R0b21XaWR0aChib3JkZXJXaWR0aCk7Ci0gICAgc3R5bGUtPnNldEJv
cmRlckJvdHRvbVN0eWxlKElOU0VUKTsKLSAgICBzdHlsZS0+c2V0Qm9yZGVyVG9wV2lkdGgoYm9y
ZGVyV2lkdGgpOwotICAgIHN0eWxlLT5zZXRCb3JkZXJUb3BTdHlsZShJTlNFVCk7Ci0KLSAgICAv
LyBPdmVycmlkZSBoZWlnaHQuCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwot
ICAgIHNldFNlYXJjaEZpZWxkU2l6ZShzdHlsZSk7Ci0KLSAgICAvLyBPdmVycmlkZSBwYWRkaW5n
IHNpemUgdG8gbWF0Y2ggQXBwS2l0IHRleHQgcG9zaXRpb25pbmcuCi0gICAgY29uc3QgaW50IHBh
ZGRpbmcgPSAxICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdo
dChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5n
dGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgo
cGFkZGluZywgRml4ZWQpKTsKLQotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250
cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwotICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc2VsZWN0
b3IsIHN0eWxlLCBjb250cm9sU2l6ZSk7Ci0KLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwot
fQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgp
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0Jv
eCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzZXRTZWFyY2hDZWxsU3RhdGUoaW5w
dXQtPnJlbmRlcmVyKCksIHIpOwotCi0gICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRo
aXMtPnNlYXJjaCgpOwotCi0gICAgdXBkYXRlQWN0aXZlU3RhdGUoW3NlYXJjaCBjYW5jZWxCdXR0
b25DZWxsXSwgbyk7Ci0gICAgdXBkYXRlUHJlc3NlZFN0YXRlKFtzZWFyY2ggY2FuY2VsQnV0dG9u
Q2VsbF0sIG8pOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQotICAgIGZsb2F0
IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIEZsb2F0UmVj
dCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggY2FuY2VsQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3Qo
aW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKLSAgICBsb2NhbEJvdW5kcyA9
IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMs
IHIpOwotCi0gICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7Ci0gICAgaWYg
KHpvb21MZXZlbCAhPSAxLjBmKSB7Ci0gICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpv
b21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7Ci0gICAgICAgIHVuem9vbWVkUmVjdC5zZXRI
ZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKLSAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgp
KTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWws
IHpvb21MZXZlbCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpv
b21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7Ci0gICAgfQotCi0gICAgW1tzZWFyY2gg
Y2FuY2VsQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTp1bnpvb21lZFJlY3QgaW5WaWV3OkZsaXBw
ZWRWaWV3KCldOwotICAgIFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdIHNldENvbnRyb2xWaWV3
Om5pbF07Ci0KLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y2FuY2Vs
QnV0dG9uU2l6ZXMoKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNd
ID0geyBJbnRTaXplKDE2LCAxMyksIEludFNpemUoMTMsIDExKSwgSW50U2l6ZSgxMywgOSkgfTsK
LSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNpemUgPSBzaXpl
Rm9yU3lzdGVtRm9udChzdHlsZSwgY2FuY2VsQnV0dG9uU2l6ZXMoKSk7Ci0gICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEhlaWdo
dChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0Qm94U2hhZG93
KDApOwotfQotCi1jb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpyZXN1bHRz
QnV0dG9uU2l6ZXMoKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNd
ID0geyBJbnRTaXplKDE5LCAxMyksIEludFNpemUoMTcsIDExKSwgSW50U2l6ZSgxNywgOSkgfTsK
LSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLWNvbnN0IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5
Owotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKLXsKLSAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVz
dWx0c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0
aCgpIC0gZW1wdHlSZXN1bHRzT2Zmc2V0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdygw
KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkRGVj
b3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0g
ICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25T
aXplcygpKTsKLSAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQp
KTsKLSAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7
Ci0gICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCByKTsKLQot
ICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKLQotICAgIHVw
ZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0sIG8pOwotCi0gICAgaWYg
KFtzZWFyY2ggc2VhcmNoTWVudVRlbXBsYXRlXSAhPSBuaWwpCi0gICAgICAgIFtzZWFyY2ggc2V0
U2VhcmNoTWVudVRlbXBsYXRlOm5pbF07Ci0KLSAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBb
c2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3go
KS0+Ym9yZGVyQm94UmVjdCgpKV07Ci0gICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGlu
Z1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKLQotICAgIFtbc2Vh
cmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6bG9jYWxCb3VuZHMgaW5WaWV3OkZs
aXBwZWRWaWV3KCldOwotICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIHNldENvbnRyb2xW
aWV3Om5pbF07Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1jb25zdCBpbnQgcmVzdWx0c0Fycm93
V2lkdGggPSA1Owotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVs
ZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9u
dChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwotICAgIHN0eWxlLT5zZXRXaWR0aChMZW5n
dGgoc2l6ZS53aWR0aCgpICsgcmVzdWx0c0Fycm93V2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0
Qm94U2hhZG93KDApOwotfQotCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBOb2RlKiBp
bnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7Ci0gICAgaWYgKCFpbnB1dC0+
cmVuZGVyZXIoKS0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2V0U2Vh
cmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCByKTsKLQotICAgIE5TU2VhcmNoRmllbGRD
ZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKLQotICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtz
ZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0sIG8pOwotCi0gICAgaWYgKCFbc2VhcmNoIHNlYXJjaE1l
bnVUZW1wbGF0ZV0pCi0gICAgICAgIFtzZWFyY2ggc2V0U2VhcmNoTWVudVRlbXBsYXRlOnNlYXJj
aE1lbnVUZW1wbGF0ZSgpXTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAg
ICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICBG
bG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6
TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07Ci0gICAgbG9jYWxC
b3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2Fs
Qm91bmRzLCByKTsKLQotICAgIEludFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKLSAg
ICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKLSAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRo
KHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKLSAgICAgICAgdW56b29tZWRSZWN0
LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwotICAgICAgICBw
YWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVj
dC55KCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21M
ZXZlbCwgem9vbUxldmVsKSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUo
LXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKLSAgICB9Ci0KLSAgICBbW3Nl
YXJjaCBzZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6
RmxpcHBlZFZpZXcoKV07Ci0gICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJv
bFZpZXc6bmlsXTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWNvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0gMTU7Ci1jb25z
dCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsKKyNpZiBFTkFCTEUoVklERU8pCiAKLXZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVj
dCogbykgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0TWVkaWFTbGlk
ZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewotICAgIGZsb2F0IHpvb21MZXZl
bCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoby0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgby0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIG8tPnN0eWxl
KCktPnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iV2lkdGggKiB6
b29tTGV2ZWwpLCBGaXhlZCkpOwotICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3Ro
KHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkp
OwotICAgIH0KLQotI2lmIEVOQUJMRShWSURFTykKICAgICBSZW5kZXJNZWRpYUNvbnRyb2xzQ2hy
b21pdW06OmFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKG8pOwotI2VuZGlmCiB9CiAKLSNpZiBF
TkFCTEUoVklERU8pCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNob3VsZFJlbmRlck1l
ZGlhQ29udHJvbFBhcnQoQ29udHJvbFBhcnQgcGFydCwgRWxlbWVudCogZSkKIHsKICAgICByZXR1
cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpzaG91bGRSZW5kZXJNZWRpYUNvbnRyb2xQ
YXJ0KHBhcnQsIGUpOwpAQCAtMTUzNSwyMSArMTI0LDYgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFIKICAgICByZXR1cm4gUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtOjpwYWludE1lZGlhQ29u
dHJvbHNQYXJ0KE1lZGlhU2xpZGVyLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFWb2x1bWVTbGlkZXIsIG9i
amVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xz
UGFydChNZWRpYVNsaWRlclRodW1iLCBvYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci19Ci0KLWJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJl
bmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBSZW5kZXJNZWRpYUNvbnRy
b2xzQ2hyb21pdW06OnBhaW50TWVkaWFDb250cm9sc1BhcnQoTWVkaWFWb2x1bWVTbGlkZXJUaHVt
Yiwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwotfQotCiBib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRN
ZWRpYUNvbnRyb2xzUGFydChNZWRpYVRpbWVsaW5lQ29udGFpbmVyLCBvYmplY3QsIHBhaW50SW5m
bywgcmVjdCk7CkBAIC0xNTYwLDY0ICsxMzQsMTYgQEAgU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQogICAgIHJldHVybiBTdHJpbmco
bWVkaWFDb250cm9sc0Nocm9taXVtVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29u
dHJvbHNDaHJvbWl1bVVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAotI2VuZGlmCi0KLU5TUG9w
VXBCdXR0b25DZWxsKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEJ1dHRvbigpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX3BvcHVwQnV0dG9uKSB7Ci0gICAgICAgIG1fcG9wdXBCdXR0b24uYWRv
cHROUyhbW05TUG9wVXBCdXR0b25DZWxsIGFsbG9jXSBpbml0VGV4dENlbGw6QCIiIHB1bGxzRG93
bjpOT10pOwotICAgICAgICBbbV9wb3B1cEJ1dHRvbi5nZXQoKSBzZXRVc2VzSXRlbUZyb21NZW51
Ok5PXTsKLSAgICAgICAgW21fcG9wdXBCdXR0b24uZ2V0KCkgc2V0Rm9jdXNSaW5nVHlwZTpOU0Zv
Y3VzUmluZ1R5cGVFeHRlcmlvcl07Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcG9wdXBCdXR0b24u
Z2V0KCk7Ci19Ci0KLU5TU2VhcmNoRmllbGRDZWxsKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpz
ZWFyY2goKSBjb25zdAotewotICAgIGlmICghbV9zZWFyY2gpIHsKLSAgICAgICAgbV9zZWFyY2gu
YWRvcHROUyhbW05TU2VhcmNoRmllbGRDZWxsIGFsbG9jXSBpbml0VGV4dENlbGw6QCIiXSk7Ci0g
ICAgICAgIFttX3NlYXJjaC5nZXQoKSBzZXRCZXplbFN0eWxlOk5TVGV4dEZpZWxkUm91bmRlZEJl
emVsXTsKLSAgICAgICAgW21fc2VhcmNoLmdldCgpIHNldEJlemVsZWQ6WUVTXTsKLSAgICAgICAg
W21fc2VhcmNoLmdldCgpIHNldEVkaXRhYmxlOllFU107Ci0gICAgICAgIFttX3NlYXJjaC5nZXQo
KSBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gbV9zZWFyY2guZ2V0KCk7Ci19Ci0KLU5TTWVudSogUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6c2VhcmNoTWVudVRlbXBsYXRlKCkgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogb2JqZWN0LCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIGlmICghbV9zZWFyY2hNZW51VGVtcGxhdGUpCi0gICAgICAgIG1fc2VhcmNo
TWVudVRlbXBsYXRlLmFkb3B0TlMoW1tOU01lbnUgYWxsb2NdIGluaXRXaXRoVGl0bGU6QCIiXSk7
Ci0KLSAgICByZXR1cm4gbV9zZWFyY2hNZW51VGVtcGxhdGUuZ2V0KCk7CisgICAgcmV0dXJuIFJl
bmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVZv
bHVtZVNsaWRlciwgb2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogfQogCi1OU1NsaWRlckNlbGwq
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNsaWRlclRodW1iSG9yaXpvbnRhbCgpIGNvbnN0Citi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihS
ZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAoIW1fc2xpZGVyVGh1bWJIb3Jp
em9udGFsKSB7Ci0gICAgICAgIG1fc2xpZGVyVGh1bWJIb3Jpem9udGFsLmFkb3B0TlMoW1tOU1Ns
aWRlckNlbGwgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW21fc2xpZGVyVGh1bWJIb3Jpem9udGFs
LmdldCgpIHNldFRpdGxlOm5pbF07Ci0gICAgICAgIFttX3NsaWRlclRodW1iSG9yaXpvbnRhbC5n
ZXQoKSBzZXRTbGlkZXJUeXBlOk5TTGluZWFyU2xpZGVyXTsKLSAgICAgICAgW21fc2xpZGVyVGh1
bWJIb3Jpem9udGFsLmdldCgpIHNldENvbnRyb2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV07Ci0g
ICAgICAgIFttX3NsaWRlclRodW1iSG9yaXpvbnRhbC5nZXQoKSBzZXRGb2N1c1JpbmdUeXBlOk5T
Rm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9zbGlkZXJUaHVt
Ykhvcml6b250YWwuZ2V0KCk7CisgICAgcmV0dXJuIFJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1
bTo6cGFpbnRNZWRpYUNvbnRyb2xzUGFydChNZWRpYVZvbHVtZVNsaWRlclRodW1iLCBvYmplY3Qs
IHBhaW50SW5mbywgcmVjdCk7CiB9CiAKLU5TU2xpZGVyQ2VsbCogUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6c2xpZGVyVGh1bWJWZXJ0aWNhbCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3NsaWRlclRo
dW1iVmVydGljYWwpIHsKLSAgICAgICAgbV9zbGlkZXJUaHVtYlZlcnRpY2FsLmFkb3B0TlMoW1tO
U1NsaWRlckNlbGwgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW21fc2xpZGVyVGh1bWJWZXJ0aWNh
bC5nZXQoKSBzZXRUaXRsZTpuaWxdOwotICAgICAgICBbbV9zbGlkZXJUaHVtYlZlcnRpY2FsLmdl
dCgpIHNldFNsaWRlclR5cGU6TlNMaW5lYXJTbGlkZXJdOwotICAgICAgICBbbV9zbGlkZXJUaHVt
YlZlcnRpY2FsLmdldCgpIHNldENvbnRyb2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV07Ci0gICAg
ICAgIFttX3NsaWRlclRodW1iVmVydGljYWwuZ2V0KCkgc2V0Rm9jdXNSaW5nVHlwZTpOU0ZvY3Vz
UmluZ1R5cGVFeHRlcmlvcl07Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fc2xpZGVyVGh1bWJWZXJ0
aWNhbC5nZXQoKTsKLX0KKyNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMuaAppbmRleCBjYmE5MjdmLi5jYjYwNGI5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lTWFjLmgKQEAgLTg4LDggKzg4LDE0IEBAIHB1YmxpYzoKICNlbmRpZgogCiAg
ICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3Q7Ci0KKyAg
ICAvLyBDb250cm9scyBjb2xvciB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBwbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yKCkuIHN5c3RlbUNvbG9yKCkgd2lsbCBiZSB1c2VkIHdoZW4gZmFsc2UuCisgICAgdmly
dHVhbCBib29sIHVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCkgY29uc3Q7CisgICAgLy8gQSB2
aWV3IGFzc29jaWF0ZWQgdG8gdGhlIGNvbnRhaW5lZCBkb2N1bWVudC4gU3ViY2xhc3NlcyBtYXkg
bm90IGhhdmUgc3VjaCBhIHZpZXcgYW5kIHJldHVybiBhIGZha2UuCisgICAgdmlydHVhbCBOU1Zp
ZXcqIGRvY3VtZW50Vmlld0ZvcihSZW5kZXJPYmplY3QqKSBjb25zdDsKIHByb3RlY3RlZDoKKyAg
ICBSZW5kZXJUaGVtZU1hYygpOworICAgIHZpcnR1YWwgflJlbmRlclRoZW1lTWFjKCk7CisKICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKQEAgLTE0OSwxMSArMTU1LDEwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFN0cmluZyBl
eHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UmVuZGVyTWVkaWFDb250cm9sUGFydChDb250cm9sUGFydCwgRWxlbWVudCopOworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZWRpYVNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqKSBjb25zdDsK
ICNlbmRpZgogCiBwcml2YXRlOgotICAgIFJlbmRlclRoZW1lTWFjKCk7Ci0gICAgdmlydHVhbCB+
UmVuZGVyVGhlbWVNYWMoKTsKIAogICAgIEludFJlY3QgaW5mbGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpvb21MZXZlbCA9
IDEuMGYpIGNvbnN0OwogCkBAIC0xNzIsNiArMTc3LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHVw
ZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKICAgICB2b2lk
IHVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKICAgICB2
b2lkIHVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAg
ICAvLyBBbiBvcHRpb25hbCBob29rIGZvciBzdWJjbGFzc2VzIHRvIHVwZGF0ZSB0aGUgY29udHJv
bCB0aW50IG9mIE5TQ2VsbC4KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUoTlND
ZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kikge30KIAogICAgIC8vIEhlbHBlcnMgZm9yIGFkanVz
dGluZyBhcHBlYXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0gYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQppbmRleCBmZTUwY2M0Li4zYzMxNjE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQpAQCAtMTE0LDExICsxMTQsMTMgQEAgZW51bSB7CiAgICAgbGVmdFBhZGRpbmcKIH07
CiAKKyNpZiBQTEFURk9STShNQUMpCiBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVt
ZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQogewogICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBS
ZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOwogICAgIHJldHVybiBydDsKIH0K
KyNlbmRpZgogCiBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZU1hYzo6Y3JlYXRl
KCkKIHsKQEAgLTQ1Nyw2ICs0NTksMjEgQEAgQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNv
bG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAogICAgIHJldHVybiBjb2xvcjsKIH0KIAorYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6dXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IoKSBjb25zdAoreworICAg
IHJldHVybiBXZWJDb3JlOjp1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpOworfQorCitOU1Zp
ZXcqIFJlbmRlclRoZW1lTWFjOjpkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2JqZWN0KiBvKSBjb25z
dAoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gby0+dmlldygpLT5mcmFtZVZpZXco
KS0+ZG9jdW1lbnRWaWV3KCk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworI2VuZGlmCit9CisKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJh
Y2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CkBAIC03NzQs
NyArNzkxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmYKICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOwog
ICAgIH0KIAotICAgIFtwb3B1cEJ1dHRvbiBkcmF3V2l0aEZyYW1lOmluZmxhdGVkUmVjdCBpblZp
ZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOworICAgIFtwb3B1cEJ1
dHRvbiBkcmF3V2l0aEZyYW1lOmluZmxhdGVkUmVjdCBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8p
XTsKICAgICBbcG9wdXBCdXR0b24gc2V0Q29udHJvbFZpZXc6bmlsXTsKIAogICAgIHBhaW50SW5m
by5jb250ZXh0LT5yZXN0b3JlKCk7CkBAIC0xMTA5LDYgKzExMjYsNyBAQCB2b2lkIFJlbmRlclRo
ZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IEludFJlYwogICAgIHNldENvbnRyb2xTaXplKHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNp
emVzKCksIHIuc2l6ZSgpLCBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogCiAgICAgLy8g
VXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgorICAgIHVwZGF0ZUFjdGl2
ZVN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKICAgICB1cGRhdGVDaGVja2VkU3RhdGUocG9wdXBCdXR0
b24sIG8pOwogICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShwb3B1cEJ1dHRvbiwgbyk7CiAgICAgdXBk
YXRlUHJlc3NlZFN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKQEAgLTExOTEsNiArMTIwOSw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxv
Y2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlv
dXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCisgICAgdXBkYXRlQWN0aXZlU3RhdGUoc2xpZGVyVGh1
bWJDZWxsLCBvLT5wYXJlbnQoKSk7CiAgICAgdXBkYXRlRW5hYmxlZFN0YXRlKHNsaWRlclRodW1i
Q2VsbCwgby0+cGFyZW50KCkpOwogICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzbGlkZXJUaHVtYkNl
bGwsIG8tPnBhcmVudCgpKTsKIApAQCAtMTIzMiw3ICsxMjUxLDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnQKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRS
ZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIAotICAgIFtzbGlkZXJUaHVtYkNl
bGwgZHJhd1dpdGhGcmFtZTp1bnpvb21lZFJlY3QgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3
KCktPmRvY3VtZW50VmlldygpXTsKKyAgICBbc2xpZGVyVGh1bWJDZWxsIGRyYXdXaXRoRnJhbWU6
dW56b29tZWRSZWN0IGluVmlldzpkb2N1bWVudFZpZXdGb3IobyldOwogICAgIFtzbGlkZXJUaHVt
YkNlbGwgc2V0Q29udHJvbFZpZXc6bmlsXTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0
b3JlKCk7CkBAIC0xMjY0LDcgKzEyODMsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNl
YXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludAogICAg
IC8vIFNldCB0aGUgc2VhcmNoIGJ1dHRvbiB0byBuaWwgYmVmb3JlIGRyYXdpbmcuICBUaGVuIHJl
c2V0IGl0IHNvIHdlIGNhbiBkcmF3IGl0IGxhdGVyLgogICAgIFtzZWFyY2ggc2V0U2VhcmNoQnV0
dG9uQ2VsbDpuaWxdOwogCi0gICAgW3NlYXJjaCBkcmF3V2l0aEZyYW1lOk5TUmVjdCh1bnpvb21l
ZFJlY3QpIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07Cisg
ICAgW3NlYXJjaCBkcmF3V2l0aEZyYW1lOk5TUmVjdCh1bnpvb21lZFJlY3QpIGluVmlldzpkb2N1
bWVudFZpZXdGb3IobyldOwogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgaWYgKFtzZWFy
Y2ggc2hvd3NGaXJzdFJlc3BvbmRlcl0pCiAgICAgICAgIHdrRHJhd1RleHRGaWVsZENlbGxGb2N1
c1Jpbmcoc2VhcmNoLCBOU1JlY3QodW56b29tZWRSZWN0KSk7CkBAIC0xMjg1LDYgKzEzMDQsNyBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBJbnRSZWN0JikKICAgICBbc2VhcmNoIHNldENvbnRyb2xTaXplOmNvbnRyb2xTaXpl
Rm9yRm9udChvLT5zdHlsZSgpKV07CiAKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVz
IHdlIHJlc3BvbmQgdG8uCisgICAgdXBkYXRlQWN0aXZlU3RhdGUoc2VhcmNoLCBvKTsKICAgICB1
cGRhdGVFbmFibGVkU3RhdGUoc2VhcmNoLCBvKTsKICAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2Vh
cmNoLCBvKTsKIH0KQEAgLTEzNDYsNiArMTM2Niw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
CiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKKyAg
ICB1cGRhdGVBY3RpdmVTdGF0ZShbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdLCBvKTsKICAgICB1
cGRhdGVQcmVzc2VkU3RhdGUoW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSwgbyk7CiAKICAgICBw
YWludEluZm8uY29udGV4dC0+c2F2ZSgpOwpAQCAtMTM2NCw3ICsxMzg1LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck8KICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56
b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIAotICAgIFtbc2VhcmNo
IGNhbmNlbEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6dW56b29tZWRSZWN0IGluVmlldzpvLT52
aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CisgICAgW1tzZWFyY2ggY2FuY2Vs
QnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTp1bnpvb21lZFJlY3QgaW5WaWV3OmRvY3VtZW50Vmll
d0ZvcihvKV07CiAgICAgW1tzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6
bmlsXTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CkBAIC0xNDIzLDEzICsx
NDQ0LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlCiAKICAgICBOU1NlYXJjaEZpZWxkQ2Vs
bCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKKyAgICB1cGRhdGVBY3RpdmVTdGF0ZShbc2Vh
cmNoIHNlYXJjaEJ1dHRvbkNlbGxdLCBvKTsKKwogICAgIGlmIChbc2VhcmNoIHNlYXJjaE1lbnVU
ZW1wbGF0ZV0gIT0gbmlsKQogICAgICAgICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1wbGF0ZTpu
aWxdOwogCiAgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25S
ZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSld
OwogICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJl
cigpLCBvLCBsb2NhbEJvdW5kcywgcik7CiAKLSAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxs
XSBkcmF3V2l0aEZyYW1lOmxvY2FsQm91bmRzIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygp
LT5kb2N1bWVudFZpZXcoKV07CisgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dp
dGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6ZG9jdW1lbnRWaWV3Rm9yKG8pXTsKICAgICBbW3Nl
YXJjaCBzZWFyY2hCdXR0b25DZWxsXSBzZXRDb250cm9sVmlldzpuaWxdOwogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTE0NTMsNiArMTQ3Niw4IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyCiAK
ICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKKyAgICB1
cGRhdGVBY3RpdmVTdGF0ZShbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdLCBvKTsKKwogICAgIGlm
ICghW3NlYXJjaCBzZWFyY2hNZW51VGVtcGxhdGVdKQogICAgICAgICBbc2VhcmNoIHNldFNlYXJj
aE1lbnVUZW1wbGF0ZTpzZWFyY2hNZW51VGVtcGxhdGUoKV07CiAKQEAgLTE0NzIsNyArMTQ5Nyw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50
cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAK
LSAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOnVuem9vbWVkUmVj
dCBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOworICAgIFtb
c2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6dW56b29tZWRSZWN0IGluVmll
dzpkb2N1bWVudFZpZXdGb3IobyldOwogICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIHNl
dENvbnRyb2xWaWV3Om5pbF07CiAgICAgCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKQEAgLTE1MjYsMjYgKzE1NTEsMzEgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2xp
ZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKIAogI2lmIEVOQUJMRShWSURFTykK
ICAgICBlbHNlIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJUaHVt
YlBhcnQpIHsKLSAgICAgICAgaW50IHdpZHRoID0gbWVkaWFTbGlkZXJUaHVtYldpZHRoOwotICAg
ICAgICBpbnQgaGVpZ2h0ID0gbWVkaWFTbGlkZXJUaHVtYkhlaWdodDsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1lZGlhQ29udHJvbGxlclRoZW1lUXVp
Y2tUaW1lKSB7Ci0gICAgICAgICAgICBDR1NpemUgIHNpemU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHdrTWVhc3VyZU1lZGlhVUlQYXJ0KE1lZGlhU2xpZGVyVGh1bWIsIE1lZGlhQ29udHJv
bGxlclRoZW1lUXVpY2tUaW1lLCBOVUxMLCAmc2l6ZSk7Ci0gICAgICAgICAgICB3aWR0aCA9IHNp
emUud2lkdGg7Ci0gICAgICAgICAgICBoZWlnaHQgPSBzaXplLmhlaWdodDsKLSAgICAgICAgfQot
Ci0gICAgICAgIG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHdp
ZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKLSAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0
KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Cisg
ICAgICAgIGFkanVzdE1lZGlhU2xpZGVyVGh1bWJTaXplKG8pOwogICAgIH0KICNlbmRpZgogfQog
Ci0KICNpZiBFTkFCTEUoVklERU8pCiAKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lZGlh
U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICBpbnQgd2lkdGgg
PSBtZWRpYVNsaWRlclRodW1iV2lkdGg7CisgICAgaW50IGhlaWdodCA9IG1lZGlhU2xpZGVyVGh1
bWJIZWlnaHQ7CisgICAgICAgIAorICAgIGlmIChtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1l
ZGlhQ29udHJvbGxlclRoZW1lUXVpY2tUaW1lKSB7CisgICAgICAgIENHU2l6ZSAgc2l6ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICB3a01lYXN1cmVNZWRpYVVJUGFydChNZWRpYVNsaWRlclRodW1i
LCBNZWRpYUNvbnRyb2xsZXJUaGVtZVF1aWNrVGltZSwgTlVMTCwgJnNpemUpOworICAgICAgICB3
aWR0aCA9IHNpemUud2lkdGg7CisgICAgICAgIGhlaWdodCA9IHNpemUuaGVpZ2h0OworICAgIH0K
KworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICBvLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCAqIHpv
b21MZXZlbCksIEZpeGVkKSk7CisgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChzdGF0
aWNfY2FzdDxpbnQ+KGhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Cit9CisKIGVudW0gV0tN
ZWRpYUNvbnRyb2xsZXJUaGVtZVN0YXRlIHsgCiAgICAgTWVkaWFVSVBhcnREaXNhYmxlZEZsYWcg
PSAxIDw8IDAsCiAgICAgTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA9IDEgPDwgMSwKQEAgLTE3NTcs
MTAgKzE3ODcsMTUgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVRpbWVSZW1haW5p
bmcoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3QKIAogU3RyaW5nIFJlbmRlclRo
ZW1lTWFjOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKIHsKKyNpZiBQTEFURk9STShN
QUMpCiAgICAgaWYgKG1lZGlhQ29udHJvbGxlclRoZW1lKCkgPT0gTWVkaWFDb250cm9sbGVyVGhl
bWVRdWlja1RpbWUpCiAgICAgICAgIHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc1F1aWNrVGlt
ZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzUXVpY2tUaW1lVXNlckFn
ZW50U3R5bGVTaGVldCkpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIFN0cmluZygpOworI2Vs
c2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7CisjZW5k
aWYKIH0KIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6c2hvdWxkUmVuZGVyTWVkaWFDb250cm9sUGFy
dChDb250cm9sUGFydCBwYXJ0LCBFbGVtZW50KiBlbGVtZW50KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>