<?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>61342</bug_id>
          
          <creation_ts>2011-05-23 21:50:00 -0700</creation_ts>
          <short_desc>Regression(r87118): chromium/mac: scroll layout tests failures</short_desc>
          <delta_ts>2013-04-09 16:10:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fumitoshi Ukai">ukai</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>jamesr</cc>
    
    <cc>sail</cc>
    
    <cc>thakis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>408635</commentid>
    <comment_count>0</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2011-05-23 21:50:00 -0700</bug_when>
    <thetext>Since r87118, chromium/mac started failing layout tests of scroll.

fast/repaint/fixed-move-after-keyboard-scroll.html = IMAGE+TEXT
fast/dom/vertical-scrollbar-in-rtl.html = TEXT
fast/events/node-event-anchor-lock.html = TEXT
fast/events/scroll-after-click-on-tab-index.html = TEXT
fast/events/scrollbar-double-click.html = TEXT

http://test-results.appspot.com/dashboards/flakiness_dashboard.html#group=%40ToT%20-%20chromium.org&amp;tests=fast%2Frepaint%2Ffixed-move-after-keyboard-scroll.html%2Cfast%2Fdom%2Fvertical-scrollbar-in-rtl.html%2Cfast%2Fevents%2Fnode-event-anchor-lock.html%2Cfast%2Fevents%2Fscroll-after-click-on-tab-index.html%2Cfast%2Fevents%2Fscrollbar-double-click.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408877</commentid>
    <comment_count>1</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-24 08:33:45 -0700</bug_when>
    <thetext>Sorry for breaking the tests. Adding relevant links:
http://trac.webkit.org/changeset/87126
http://trac.webkit.org/changeset/87130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409007</commentid>
    <comment_count>2</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-24 11:08:01 -0700</bug_when>
    <thetext>Hi Ukai, I can&apos;t reproduce the test failure. All 5 tests pass for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409282</commentid>
    <comment_count>3</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-24 16:00:20 -0700</bug_when>
    <thetext>CCing jamesr and thakis in case there&apos;s something I should be doing that I&apos;m not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409284</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-24 16:03:34 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; CCing jamesr and thakis in case there&apos;s something I should be doing that I&apos;m not.

Well, what are you doing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409286</commentid>
    <comment_count>5</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-24 16:04:58 -0700</bug_when>
    <thetext>I ran:
   Tools/Scripts/new-run-webkit-tests --debug --chromium
on tip of tree with and without my change and it passes. Not sure how to reproduce the failure from the dashboard link.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409960</commentid>
    <comment_count>6</comment_count>
      <attachid>94868</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-25 15:17:28 -0700</bug_when>
    <thetext>Created attachment 94868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409962</commentid>
    <comment_count>7</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-25 15:18:40 -0700</bug_when>
    <thetext>I&apos;ve updated a new patch that re-adds the reverted code. The patch contains the following additional changes:
- remove text exceptions
- disable smooth scrolling in ScrollAnimatorChroimiumMac::scroll()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410778</commentid>
    <comment_count>8</comment_count>
      <attachid>95028</attachid>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-26 13:32:09 -0700</bug_when>
    <thetext>Created attachment 95028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410781</commentid>
    <comment_count>9</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-26 13:34:29 -0700</bug_when>
    <thetext>Scroll tests no loger fail on the try bots with this patch:
http://build.chromium.org/p/tryserver.chromium/builders/mac_layout_rel/builds/194
For comparison here&apos;s the output from the try bot with an empty change list:
http://build.chromium.org/p/tryserver.chromium/builders/mac_layout_rel/builds/191</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410789</commentid>
    <comment_count>10</comment_count>
    <who name="Sailesh Agrawal">sail</who>
    <bug_when>2011-05-26 13:41:51 -0700</bug_when>
    <thetext>Here&apos;s the result for my patch on the mac_layout bot:
http://build.chromium.org/p/tryserver.chromium/builders/mac_layout/builds/633</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410793</commentid>
    <comment_count>11</comment_count>
      <attachid>95028</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-05-26 13:51:14 -0700</bug_when>
    <thetext>Comment on attachment 95028
Patch

I suggest you reopen bug 59753 and post this patch there with the change description from your original patch.  I would include what changes you made since the first time this patch landed (to make the review easier).  I would also ask jamesr to review the change since he gave the original r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872244</commentid>
    <comment_count>12</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2013-04-09 16:10:55 -0700</bug_when>
    <thetext>LayoutTest failures for Chromium are being marked WontFix. The Bug is still accessible and referenced from TestExpectations.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94868</attachid>
            <date>2011-05-25 15:17:28 -0700</date>
            <delta_ts>2011-05-26 13:32:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61342-20110525151727.patch</filename>
            <type>text/plain</type>
            <size>64789</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODcxNDEKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA4YTZlMjFmNzU3NzRhYjI3OTg3NmZh
NzgyMzYzODg4MDJlZmE1ZThlLi40OGJkYjg0MjhlMzU5M2FhNGYxZjk4ZTdhZTYyMmU2ODlmZDNk
MDcwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDUtMjUgIFNhaWxlc2ggQWdyYXdhbCAg
PHNhaWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlZ3Jlc3Npb24ocjg3MTE4KTogY2hyb21pdW0vbWFjOiBzY3JvbGwgbGF5
b3V0IHRlc3RzIGZhaWx1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTM0MgorCisgICAgICAgIFJlbW92ZSBleGNlcHRpb25zIGZvciBNYWMgc2Ny
b2xsIHRlc3RzIHRoYXQgYXJlIG5vdyBwYXNzaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorCiAyMDExLTA1LTI0ICBDc2FiYSBPc3p0cm9n
b27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtNYWNdIFNraXAgb25lIG1v
cmUgZmFpbGluZyB0ZXN0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vdGVzdF9leHBlY3RhdGlvbnMudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CmluZGV4IGJmODllNWEwYThmNzgyNzRlYzlmY2M0MzAxZWQ2
ODFkZGIzY2ZjMmEuLjRiMTkxMGNhZjVmYjRkZTU0MjAwOWNjMGQ4M2U2YTEwYzFlNTAzMDggMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQKQEAgLTQxNzQsMTAgKzQxNzQsMyBAQCBCVUdDUjgzNjgyIFdJTiBMSU5VWCA6IGZhc3Qv
ZXZlbnRzL3NlbGVjdHN0YXJ0LWJ5LWRvdWJsZS10cmlwbGUtY2xpY2tzLmh0bWwgPSBURQogQlVH
Q1I4MzY4MiBXSU4gTElOVVggOiBmYXN0L2V2ZW50cy9zZWxlY3RzdGFydC1ieS1kcmFnLmh0bWwg
PSBURVhUCiAKIEJVR0NSODM2ODMgOiBmYXN0L2RvbS9IVE1MTGlua0VsZW1lbnQvcHJlcmVuZGVy
Lmh0bWwgPSBURVhUCi0KLS8vIFJlZ3Jlc3Npb24gZnJvbSB3ZWJraXQgcjg3MTE4Ci1CVUdXSzYx
MzQyIE1BQyA6IGZhc3QvcmVwYWludC9maXhlZC1tb3ZlLWFmdGVyLWtleWJvYXJkLXNjcm9sbC5o
dG1sID0gSU1BR0UrVEVYVAotQlVHV0s2MTM0MiBNQUMgOiBmYXN0L2RvbS92ZXJ0aWNhbC1zY3Jv
bGxiYXItaW4tcnRsLmh0bWwgPSBURVhUCi1CVUdXSzYxMzQyIE1BQyA6IGZhc3QvZXZlbnRzL25v
ZGUtZXZlbnQtYW5jaG9yLWxvY2suaHRtbCA9IFRFWFQKLUJVR1dLNjEzNDIgTUFDIDogZmFzdC9l
dmVudHMvc2Nyb2xsLWFmdGVyLWNsaWNrLW9uLXRhYi1pbmRleC5odG1sID0gVEVYVAotQlVHV0s2
MTM0MiBNQUMgOiBmYXN0L2V2ZW50cy9zY3JvbGxiYXItZG91YmxlLWNsaWNrLmh0bWwgPSBURVhU
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZThmNTY4ZWJhMjU3OGM5OTJlZjcwZWU4ZWUwMzQyMmMwODg1MWM3MC4u
ODNmMjY0NmI1MzZjYTQ2NGJiNzg4OGE3MjcwYWY1ZjYwMDk3N2JjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
Miw2ICsyLDEwOCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisg
ICAgICAgIFJlZ3Jlc3Npb24ocjg3MTE4KTogY2hyb21pdW0vbWFjOiBzY3JvbGwgbGF5b3V0IHRl
c3RzIGZhaWx1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MTM0MgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gSnVzdCBmb3JraW5nIFNjcm9sbEFu
aW1hdG9yTWFjIHRvIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cDogQWRkZWQgSW50UG9pbnRNYWMubW0uIFRoaXMgaXMgdXNlZCBi
eSBzb21lIGZ1bmN0aW9ucyBpbiBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjLiBBbHNvIGFkZGVk
IGZpbHRlcnMgZm9yIGNvbmZsaWN0aW5nIGNsYXNzIG5hbWVzIGluIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwOiBFeHRlbmRl
ZCB0aGUgI2lmZGVmIGFyb3VuZCBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKCkgc28gdGhhdCB0aGUg
Y2hyb21pdW0gdmVyc2lvbiB3aWxsIGJlIGNyZWF0ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNldElzRHJhd2luZ0ludG9MYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppc0RyYXdpbmdJbnRv
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aGF2
ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbTogQWRkZWQuIEFkZGVkLiBGb3JrZWQgZnJvbSBTY3Jv
bGxBbmltYXRvck1hYyBhbmQgcmVwbGFjZWQgYWxsIGluc3RhbmNlcyBvZiBTY3JvbGxBbmltYXRv
ck1hYyB3aXRoIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMgYW5kIFNjcm9sbGJhclRoZW1lTWFj
IHdpdGggU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy4gUmVtb3ZlZCB0aGUgRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpIGFyb3VuZCB0aGUgZmlsZS4gU3R1YmJlZCBvdXQgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6c2Nyb2xsKCkgaWYgc21vb3RoIHNjcm9sbGluZyBpcyBkaXNhYmxlZC4KKyAg
ICAgICAgKGFicyk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGlu
aXRXaXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXSk6CisgICAgICAgICgt
W1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGJvdW5kc10pOgorICAgICAgICAoLVtTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDpdKToKKyAg
ICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgX3BpeGVsQWxpZ25Qcm9wb3Nl
ZFNjcm9sbFBvc2l0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxl
Z2F0ZSBjb252ZXJ0U2l6ZVRvQmFzZTpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGUgY29udmVydFNpemVGcm9tQmFzZTpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5p
bWF0aW9uSGVscGVyRGVsZWdhdGUgY29udmVydFNpemVUb0JhY2tpbmc6XSk6CisgICAgICAgICgt
W1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGNvbnZlcnRTaXplRnJvbUJhY2tpbmc6XSk6
CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIHN1cGVydmlld10pOgor
ICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBkb2N1bWVudFZpZXddKToK
KyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgd2luZG93XSk6CisgICAg
ICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIF9yZWN1cnNpdmVSZWNvbXB1dGVU
b29sVGlwc10pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
IGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdKToKKyAg
ICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBjb250ZW50QXJlYVJl
Y3RGb3JTY3JvbGxlckltcFBhaXI6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyRGVsZWdhdGUgaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAg
ICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIG1vdXNlTG9jYXRpb25JbkNv
bnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpjb252ZXJ0Q29udGVudFBvaW50
OnRvU2Nyb2xsZXJJbXA6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUgc2Nyb2xsZXJJbXBQYWlyOnNldENvbnRlbnRBcmVhTmVlZHNEaXNwbGF5SW5SZWN0
Ol0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9s
bGVySW1wUGFpcjp1cGRhdGVTY3JvbGxlclN0eWxlRm9yTmV3UmVjb21tZW5kZWRTY3JvbGxlclN0
eWxlOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGluaXRXaXRoU2Nyb2xs
YmFyUGFpbnRlcjpwYXJ0OldlYkNvcmU6OnNjcm9sbEFuaW1hdG9yOldlYkNvcmU6OmFuaW1hdGVB
bHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNl
dEN1cnJlbnRQcm9ncmVzczpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBz
Y3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUgaW5pdFdpdGhTY3JvbGxBbmltYXRvcjpXZWJDb3JlOjpdKToKKyAgICAgICAgKC1bU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIGNhbmNlbEFuaW1hdGlvbnNdKToKKyAgICAgICAgKC1bU2Ny
b2xsYmFyUGFpbnRlckRlbGVnYXRlIGNvbnZlcnRSZWN0VG9CYWNraW5nOl0pOgorICAgICAgICAo
LVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgY29udmVydFJlY3RGcm9tQmFja2luZzpdKToKKyAg
ICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGxheWVyXSk6CisgICAgICAgICgtW1Nj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzZXRVcEFuaW1hdGlvbjpzY3JvbGxlclBhaW50ZXI6cGFy
dDpXZWJDb3JlOjphbmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xs
YmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbGVySW1wOmFuaW1hdGVLbm9iQWxwaGFUbzpkdXJhdGlv
bjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbGVySW1wOmFu
aW1hdGVUcmFja0FscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDpvdmVybGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzpdKToK
KyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJv
eWVkXSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
flNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxYUG9zaXRp
b25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjphZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVk
aWF0ZVNjcm9sbFRvUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVgpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bm90aXR5UG9zaXRpb25DaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRl
bnRBcmVhV2lsbFBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VNb3ZlZEluQ29udGVudEFy
ZWEpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFN0
YXJ0TGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpjb250ZW50c1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6d2lsbEVuZExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRTaG93KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkSGlkZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRCZWdpblNjcm9sbEdl
c3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlk
RW5kU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQWRkSG9yaXpvbnRh
bFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
Ojp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpjYW5jZWxBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OmVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjplbGFzdGlj
RGVsdGFGb3JSZWJvdW5kRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6cmVib3VuZERlbHRhRm9y
RWxhc3RpY0RlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbFdoZWVsTXVsdGlwbGllcik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpoYW5kbGVXaGVl
bEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Omhh
bmRsZUdlc3R1cmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpwaW5uZWRJbkRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c21vb3Ro
U2Nyb2xsV2l0aEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmJlZ2luU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjplbmRTY3JvbGxHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OnJvdW5kVG93YXJkWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpyb3VuZFRvRGV2aWNlUGl4
ZWxUb3dhcmRaZXJvKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpzdGFydFNjcm9sbGJhclBhaW50VGltZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklz
QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0
b3BTY3JvbGxiYXJQYWludFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1
bWJSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOiBFeHBvc2Vk
IE5TUG9pbnQgY29udmVyc2lvbiByb3V0aW5lcyB0byBjaHJvbWl1bSBtYWMuCisKKzIwMTEtMDUt
MjUgIFNhaWxlc2ggQWdyYXdhbCAgPHNhaWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFJlbmFtZSBTY3JvbGxiYXJPdmVybGF5
VXRpbGl0aWVzTWFjIHRvIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYwogICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE0MDEKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA4ZWUxYWUwZjc2NzE4MTMwMDkw
MzA3Y2E1YjFhZGMxYzJhMGFiODczLi5iYzRlZWJiYTdhZGNkY2Y4ZGI1YmRjYzk5ZTk1NjU0NTI3
YjJiYTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTE0Niw2
ICsxMTQ2LDEwIEBACiAgICAgICAgICAgICAgICdTY3JvbGxiYXJQcmVmc09ic2VydmVyPUNocm9t
aXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQcmVmc09ic2VydmVyJywKICAgICAgICAgICAgICAgJ1dl
YkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyPUNocm9taXVtV2ViQ29yZU9iakNX
ZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcicsCiAgICAgICAgICAgICAgICdX
ZWJGb250Q2FjaGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYkZvbnRDYWNoZScsCisgICAgICAgICAg
ICAgICdTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJEZWxlZ2F0ZScsCisgICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZScsCisgICAg
ICAgICAgICAgICdTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPUNocm9taXVtV2ViQ29yZU9iakNTY3Jv
bGxiYXJQYXJ0QW5pbWF0aW9uJywKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAnaW5jbHVk
ZV9kaXJzJzogWwogICAgICAgICAgICAgICAnLi4vLi4vLi4vV2ViS2l0TGlicmFyaWVzJywKQEAg
LTEzNjQsNiArMTM2OCw3IEBACiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0Zsb2F0U2l6ZU1hY1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywg
J3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VUcmVlTm9kZU1hY1xcLmNwcCQnXSwKICAg
ICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0TWFjXFwubW0kJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ludFBvaW50TWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ludFJlY3RNYWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5j
bHVkZScsICdwbGF0Zm9ybS9tYWMvQmxvY2tFeGNlcHRpb25zXFwubW0kJ10sCiAgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFjL0tpbGxSaW5nTWFjXFwubW0kJ10sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggYzQzNGUwNTBlNTU0OTJl
ZjNhZjllMTcyZTBiMzRmNzc4OWJhNTAyNy4uYjdiMGE0MWE1NzJhZTk2MTJkMmIwNzVjOGVlOWY4
Mjg3ZmNlMzA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNw
cApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjaWYgIUVOQUJMRShTTU9P
VEhfU0NST0xMSU5HKSAmJiAhKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQogUGFz
c093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxB
bmltYXRvcihzY3JvbGxhYmxlQXJlYSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNkMGQ1YTEyYzgzNjVlYWQyMmRiYTY0YmRhNWJiMjVlNjk1YjY0ODAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAorI2RlZmluZSBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNp
bmNsdWRlICJTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCIKKyNpbmNsdWRl
ICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmZGVmIF9fT0JKQ19f
CitAY2xhc3MgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CitAY2xhc3MgU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlOworQGNsYXNzIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworI2Vsc2UKK2NsYXNzIFNjcm9s
bEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRl
OworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKK2NsYXNzIFNjcm9s
bGJhclBhaW50ZXJEZWxlZ2F0ZTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFNjcm9sbGJhcjsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyA6IHB1Ymxp
YyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYyhTY3JvbGxhYmxlQXJlYSopOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMoKTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50
YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmKTsKKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyNpZiBFTkFCTEUoR0VT
VFVSRV9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQ
bGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9p
ZCBjYW5jZWxBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xs
QnlEZWx0YVgoZmxvYXQgZGVsdGFYKTsKKyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZ
KGZsb2F0IGRlbHRhWSk7CisKKyAgICB2b2lkIHNldElzRHJhd2luZ0ludG9MYXllcihib29sIGIp
IHsgbV9kcmF3aW5nSW50b0xheWVyID0gYjsgfQorICAgIGJvb2wgaXNEcmF3aW5nSW50b0xheWVy
KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nSW50b0xheWVyOyB9CisKKyAgICBib29sIGhhdmVT
Y3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJldHVybiBtX2hhdmVTY3JvbGxlZFNpbmNl
UGFnZUxvYWQ7IH0KKworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBib29sIHNj
cm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRTY3JvbGxi
YXJQYWludFRpbWVyKCk7CisgICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworI2Vu
ZGlmCisKKyAgICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0
Jik7CisKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBl
cjsKKyAgICBSZXRhaW5QdHI8U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Nyb2xs
QW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIp
CisgICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWY+IG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKKyAg
ICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworCisgICAgdm9pZCBp
bml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM+Kik7CisgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9pbml0aWFs
U2Nyb2xsYmFyUGFpbnRUaW1lcjsKKyNlbmRpZgorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3Rp
dHlQb3NpdGlvbkNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxsUGFp
bnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnRl
bnRzUmVzaXplZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6ZSgp
OworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZFNob3coKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgY29uc3Q7CisgICAgdm9pZCBkaWRCZWdpblNj
cm9sbEdlc3R1cmUoKSBjb25zdDsKKyAgICB2b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJh
ciopOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJh
ciopOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3Jv
bGxiYXIqKTsKKworICAgIGZsb2F0IGFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZs
b2F0KSBjb25zdDsKKyAgICBmbG9hdCBhZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2FyeShm
bG9hdCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNz
YXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKKyAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0OworICAgIGJvb2wg
YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25zdDsKKyAgICBib29sIHBpbm5lZEluRGly
ZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKTsKKyAgICB2b2lkIHNuYXBSdWJiZXJC
YW5kKCk7CisgICAgdm9pZCBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYz4qKTsKKyAgICB2b2lkIHNtb290aFNjcm9sbFdpdGhFdmVudChQbGF0
Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICB2b2lkIGJlZ2luU2Nyb2xsR2VzdHVyZSgpOworICAgIHZv
aWQgZW5kU2Nyb2xsR2VzdHVyZSgpOworCisgICAgYm9vbCBtX2luU2Nyb2xsR2VzdHVyZTsKKyAg
ICBib29sIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzOworICAgIGJvb2wgbV9pZ25vcmVNb21l
bnR1bVNjcm9sbHM7CisgICAgCisgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0TW9tZW10dW1TY3Jv
bGxUaW1lc3RhbXA7CisgICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKKyAgICBG
bG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7CisgICAgRmxvYXRTaXplIG1fbW9tZW50dW1W
ZWxvY2l0eTsKKworICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgorICAgIENGVGltZUludGVydmFs
IG1fc3RhcnRUaW1lOworICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKKyAgICBGbG9hdFBv
aW50IG1fb3JpZ09yaWdpbjsKKyAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7CisgICAgVGlt
ZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9zbmFwUnViYmVyQmFuZFRpbWVyOworI2Vu
ZGlmCisgICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7CisgICAgYm9vbCBtX2hhdmVTY3JvbGxl
ZFNpbmNlUGFnZUxvYWQ7CisgICAgSW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Q3NDdj
NzQ3MGU5ZDlmN2EzNTYxMjY4Y2NjYzNhY2E3YzkxY2MzNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMu
bW0KQEAgLTAsMCArMSwxMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oIgorCisjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN5
c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworI2lmICFk
ZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fMTBfNikgfHwgTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxM
T1dFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfNgorQHByb3RvY29sIE5TQW5pbWF0aW9uRGVsZWdh
dGUKK0BlbmQKKworQGludGVyZmFjZSBOU1Byb2Nlc3NJbmZvIChOU09iamVjdCkKKy0gKE5TVGlt
ZUludGVydmFsKXN5c3RlbVVwdGltZTsKK0BlbmQKKyNlbmRpZgorCitAaW50ZXJmYWNlIE5TT2Jq
ZWN0IChTY3JvbGxBbmltYXRpb25IZWxwZXJEZXRhaWxzKQorLSAoaWQpaW5pdFdpdGhEZWxlZ2F0
ZTooaWQpZGVsZWdhdGU7CistICh2b2lkKV9zdG9wUnVuOworLSAoQk9PTClfaXNBbmltYXRpbmc7
CistIChOU1BvaW50KXRhcmdldE9yaWdpbjsKK0BlbmQKKworQGludGVyZmFjZSBTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7CisgICAgV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmlt
YXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7
CitAZW5kCisKK3N0YXRpYyBOU1NpemUgYWJzKE5TU2l6ZSBzaXplKQoreworICAgIE5TU2l6ZSBm
aW5hbFNpemUgPSBzaXplOworICAgIGlmIChmaW5hbFNpemUud2lkdGggPCAwKQorICAgICAgICBm
aW5hbFNpemUud2lkdGggPSAtZmluYWxTaXplLndpZHRoOworICAgIGlmIChmaW5hbFNpemUuaGVp
Z2h0IDwgMCkKKyAgICAgICAgZmluYWxTaXplLmhlaWdodCA9IC1maW5hbFNpemUuaGVpZ2h0Owor
ICAgIHJldHVybiBmaW5hbFNpemU7ICAgIAorfQorCitAaW1wbGVtZW50YXRpb24gU2Nyb2xsQW5p
bWF0aW9uSGVscGVyRGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IKK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKXNjcm9sbEFuaW1hdG9yRGVzdHJveWVkCit7CisgICAgX2FuaW1hdG9yID0gMDsK
K30KKworLSAoTlNSZWN0KWJvdW5kcworeworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICBy
ZXR1cm4gTlNaZXJvUmVjdDsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgY3VycmVudFBvc2l0
aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsKKyAgICByZXR1cm4gTlNNYWtlUmVj
dChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9zaXRpb24ueSgpLCAwLCAwKTsKK30KKwor
LSAodm9pZClfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDooTlNQb2ludCluZXdQb3NpdGlvbgorewor
ICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisgICAgX2FuaW1hdG9yLT5pbW1l
ZGlhdGVTY3JvbGxUb1BvaW50KG5ld1Bvc2l0aW9uKTsKK30KKworLSAoTlNQb2ludClfcGl4ZWxB
bGlnblByb3Bvc2VkU2Nyb2xsUG9zaXRpb246KE5TUG9pbnQpbmV3T3JpZ2luCit7CisgICAgcmV0
dXJuIG5ld09yaWdpbjsKK30KKworLSAoTlNTaXplKWNvbnZlcnRTaXplVG9CYXNlOihOU1NpemUp
c2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6ZSk7Cit9CisKKy0gKE5TU2l6ZSljb252ZXJ0U2l6
ZUZyb21CYXNlOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6ZSk7Cit9CisKKy0g
KE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFja2luZzooTlNTaXplKXNpemUKK3sKKyAgICByZXR1cm4g
YWJzKHNpemUpOworfQorCistIChOU1NpemUpY29udmVydFNpemVGcm9tQmFja2luZzooTlNTaXpl
KXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChpZClzdXBlcnZpZXcKK3sK
KyAgICByZXR1cm4gbmlsOworfQorCistIChpZClkb2N1bWVudFZpZXcKK3sKKyAgICByZXR1cm4g
bmlsOworfQorCistIChpZCl3aW5kb3cKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lk
KV9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlwcworeworfQorCitAZW5kCisKKyNpZiBVU0UoV0tf
U0NST0xMQkFSX1BBSU5URVIpCisKK0BpbnRlcmZhY2UgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7CisgICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYyogX2FuaW1hdG9yOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7CitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlCisKKy0g
KGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWMqKXNjcm9sbEFuaW1hdG9yCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBp
ZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2FuaW1hdG9yID0gc2Ny
b2xsQW5pbWF0b3I7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWQKK3sKKyAgICBfYW5pbWF0b3IgPSAwOworfQorCistIChOU1JlY3QpY29udGVu
dEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIKK3sKKyAgICBV
TlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAg
ICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRzU2l6
ZSA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y29udGVudHNTaXplKCk7CisgICAgcmV0
dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6ZS5o
ZWlnaHQoKSk7Cit9CisKKy0gKEJPT0wpaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWlyOihp
ZClzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsK
KyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgcmV0dXJuIF9h
bmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCk7Cit9CisKKy0gKE5TUG9p
bnQpbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6KGlkKXNjcm9s
bGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAgIGlm
ICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICByZXR1cm4g
X2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOworfQor
CistIChOU1BvaW50KXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIGNvbnZlcnRD
b250ZW50UG9pbnQ6KE5TUG9pbnQpcG9pbnRJbkNvbnRlbnRBcmVhIHRvU2Nyb2xsZXJJbXA6KGlk
KXNjcm9sbGVySW1wCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAg
aWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKKworICAgIFdlYkNv
cmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyID0gMDsKKyAgICBpZiAod2tTY3JvbGxiYXJQYWludGVy
SXNIb3Jpem9udGFsKChXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJJbXApKQorICAgICAg
ICBzY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmhvcml6b250YWxTY3Jv
bGxiYXIoKTsKKyAgICBlbHNlIAorICAgICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9s
bGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisKKyAgICAvLyBJdCBpcyBwb3NzaWJs
ZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxiYXIgaGVyZSBzaW5jZSBpdCBpcyBwb3NzaWJsZSBmb3Ig
dGhpcyBkZWxlZ2F0ZQorICAgIC8vIG1ldGhvZCB0byBiZSBjYWxsZWQgYmV0d2VlbiB0aGUgbW9t
ZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFzIGJlZW4gc2V0IHRvIDAgYW5kIHRoZQorICAgIC8vIG1v
bWVudCB3aGVuIGl0cyBkZXN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZC4gV2Ugc2hvdWxkIHByb2Jh
Ymx5IGRlLWNvdXBsZSBzb21lCisgICAgLy8gb2YgdGhlIGNsZWFuLXVwIHdvcmsgaW4gU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5yZWdpc3RlclNjcm9sbGJhcigpIHRvIGF2b2lkIHRoaXMK
KyAgICAvLyBpc3N1ZS4KKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkludFBvaW50KCk7CisgICAgCisgICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udmVydEZyb21D
b250YWluaW5nVmlldyhXZWJDb3JlOjpJbnRQb2ludChwb2ludEluQ29udGVudEFyZWEpKTsKK30K
KworLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBzZXRDb250ZW50
QXJlYU5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBVTlVTRURfUEFSQU0o
c2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7Cit9CisKKy0gKHZvaWQp
c2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJTdHlsZUZv
ck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1JlY29tbWVu
ZGVkU2Nyb2xsZXJTdHlsZQoreworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47
CisKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHBhaW50ZXJDb250cm9sbGVy
ID0gKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpc2Nyb2xsZXJJbXBQYWlyOworICAg
IFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIG1hY1RoZW1lID0gKFdlYkNvcmU6
OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqKVdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRp
dmVUaGVtZSgpOworCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG9sZFZlcnRpY2FsUGFpbnRl
ciA9IHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihwYWludGVyQ29udHJv
bGxlcik7CisgICAgaWYgKG9sZFZlcnRpY2FsUGFpbnRlcikgeworICAgICAgICBXZWJDb3JlOjpT
Y3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgp
LT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYgbmV3
VmVydGljYWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKG9sZFZl
cnRpY2FsUGFpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdSZWNvbW1lbmRl
ZFNjcm9sbGVyU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxTY3Jv
bGxiYXItPmNvbnRyb2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2Up
OworICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcih2ZXJ0aWNhbFNj
cm9sbGJhciwgbmV3VmVydGljYWxQYWludGVyKTsKKyAgICAgICAgd2tTZXRQYWludGVyRm9yUGFp
bnRlckNvbnRyb2xsZXIocGFpbnRlckNvbnRyb2xsZXIsIG5ld1ZlcnRpY2FsUGFpbnRlciwgZmFs
c2UpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRp
ZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAgICAvLyBm
cmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdp
bGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJs
eSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRo
aWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisgICAgICAgIHZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoV2ViQ29yZTo6SW50UmVjdCgwLCAwLCB0aGlja25l
c3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRI
b3Jpem9udGFsUGFpbnRlciA9IHdrSG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250cm9s
bGVyKHBhaW50ZXJDb250cm9sbGVyKTsKKyAgICBpZiAob2xkSG9yaXpvbnRhbFBhaW50ZXIpIHsK
KyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gX2FuaW1h
dG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFdL
U2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdIb3Jpem9udGFsUGFpbnRlciA9IHdrTWFrZVNjcm9sbGJh
clJlcGxhY2VtZW50UGFpbnRlcihvbGRIb3Jpem9udGFsUGFpbnRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgbWFjVGhlbWUtPnNl
dE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoaG9yaXpvbnRhbFNjcm9sbGJhciwgbmV3SG9yaXpvbnRh
bFBhaW50ZXIpOworICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihwYWlu
dGVyQ29udHJvbGxlciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIsIHRydWUpOworCisgICAgICAgIC8v
IFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25lc3Nl
cywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhlIG5l
dyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBwb3Np
dGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAgICAg
ICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhob3Jpem9udGFs
U2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKyAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+
c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25lc3Mp
KTsKKyAgICB9CisKKyAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUocGFp
bnRlckNvbnRyb2xsZXIsIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSk7CisKKyAgICAvLyBU
aGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgYWZmZWN0IGxheW91dCwgc28gd2UgbXVzdCBy
ZS1sYXlvdXQgZXZlcnl0aGluZy4KKyAgICBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnNj
cm9sbGJhclN0eWxlQ2hhbmdlZCgpOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uCit7CisgICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFy
UGFpbnRlclJlZj4gX3Njcm9sbGVyUGFpbnRlcjsKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0
IF9wYXJ0OworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmltYXRv
cjsKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGE7CisgICAgQ0dGbG9hdCBfbmV3QWxwaGE7Cit9
CistIChpZClpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilz
Y3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9sbEFu
aW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRv
ciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2
YWwpZHVyYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYXJ0QW5pbWF0
aW9uCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjooV0tTY3JvbGxiYXJQYWludGVy
UmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBhcnQgc2Ny
b2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFu
aW1hdG9yIGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1RpbWVJ
bnRlcnZhbClkdXJhdGlvbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhEdXJhdGlvbjpk
dXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07CisgICAgaWYgKCFz
ZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9zY3JvbGxlclBhaW50ZXIgPSBz
Y3JvbGxlclBhaW50ZXI7CisgICAgX3BhcnQgPSBwYXJ0OworICAgIF9hbmltYXRvciA9IHNjcm9s
bEFuaW1hdG9yOworICAgIF9pbml0aWFsQWxwaGEgPSBfcGFydCA9PSBXZWJDb3JlOjpUaHVtYlBh
cnQgPyB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoX3Njcm9sbGVyUGFpbnRlci5nZXQoKSkg
OiB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkpOwor
ICAgIF9uZXdBbHBoYSA9IG5ld0FscGhhOworICAgIAorICAgIHJldHVybiBzZWxmOyAgICAKK30K
KworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJvZ3Jl
c3MKK3sKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKworICAgIGlm
ICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0Zsb2F0IGN1cnJlbnRBbHBo
YTsKKyAgICBpZiAoX2luaXRpYWxBbHBoYSA+IF9uZXdBbHBoYSkKKyAgICAgICAgY3VycmVudEFs
cGhhID0gMSAtIHByb2dyZXNzOworICAgIGVsc2UKKyAgICAgICAgY3VycmVudEFscGhhID0gcHJv
Z3Jlc3M7CisgICAgCisgICAgaWYgKF9wYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCkKKyAgICAg
ICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCks
IGN1cnJlbnRBbHBoYSk7CisgICAgZWxzZQorICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJU
cmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7CisKKyAgICAv
LyBJbnZhbGlkYXRlIHRoZSBzY3JvbGxiYXJzIHNvIHRoYXQgdGhleSBwYWludCB0aGUgYW5pbWF0
aW9uCisgICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBfYW5p
bWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHZl
cnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIHZl
cnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCB2ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkpKTsK
KyAgICBpZiAoV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gX2FuaW1h
dG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIGhv
cml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwg
aG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwgaG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0
KCkpKTsKK30KKworLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAoreworICAgIFtzZWxm
IHN0b3BBbmltYXRpb25dOworICAgIF9hbmltYXRvciA9IDA7Cit9CisKK0BlbmQKKworQGludGVy
ZmFjZSBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgOiBOU09iamVjdDxOU0FuaW1hdGlvbkRlbGVn
YXRlPgoreworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmltYXRv
cjsKKworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdmVydGljYWxLbm9i
QW5pbWF0aW9uOworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfaG9yaXpv
bnRhbEtub2JBbmltYXRpb247CisKKyAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlv
bj4gX3ZlcnRpY2FsVHJhY2tBbmltYXRpb247CisgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhcnRB
bmltYXRpb24+IF9ob3Jpem9udGFsVHJhY2tBbmltYXRpb247Cit9CistIChpZClpbml0V2l0aFNj
cm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxB
bmltYXRvcjsKKy0gKHZvaWQpY2FuY2VsQW5pbWF0aW9uczsKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZQorCistIChpZClpbml0V2l0aFNjcm9sbEFuaW1h
dG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvcgor
eworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1
cm4gbmlsOworICAgIAorICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIHJldHVy
biBzZWxmOworfQorCistICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKK3sKKyAgICBbX3ZlcnRpY2Fs
S25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2hvcml6b250YWxLbm9i
QW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworICAgIFtfdmVydGljYWxUcmFja0FuaW1h
dGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2hvcml6b250YWxUcmFja0FuaW1hdGlv
bi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKK30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9CYWNr
aW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKE5TUmVjdClj
b252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7
Cit9CisKKy0gKENBTGF5ZXIgKilsYXllcgoreworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIGlmICghX2FuaW1hdG9yLT5pc0RyYXdpbmdJbnRvTGF5ZXIoKSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhdHRlbXB0
IHRvIHJldHVybiBhbiBhY3R1YWwgbGF5ZXIuCisgICAgc3RhdGljIENBTGF5ZXIgKmR1bW15TGF5
ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBkdW1teUxheWVyOworfQor
CistICh2b2lkKXNldFVwQW5pbWF0aW9uOihSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1hdGlv
bj4mKXNjcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOihXS1Njcm9sbGJhclBh
aW50ZXJSZWYpc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQpcGFy
dCBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2
YWwpZHVyYXRpb24KK3sKKyAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdGhlIHBhZ2Us
IHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVzdCBiZSBhbmltYXRlZCBoZXJlLiAKKyAgICAvLyBUaGlz
IG92ZXJyaWRlcyB0aGUgZWFybHkgcmV0dXJucy4KKyAgICBib29sIG11c3RBbmltYXRlID0gX2Fu
aW1hdG9yLT5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7CisKKyAgICBpZiAoX2FuaW1hdG9y
LT5zY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSAmJiAhbXVzdEFuaW1hdGUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYgIW11c3RBbmltYXRlKSB7CisgICAgICAgIF9hbmlt
YXRvci0+c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBhbmlt
YXRlIG5vdywgc28gc3RvcCB0aGUgdGltZXIuCisgICAgX2FuaW1hdG9yLT5zdG9wU2Nyb2xsYmFy
UGFpbnRUaW1lcigpOworCisgICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBhbmltYXRpbmcsIHN0
b3AKKyAgICBpZiAoc2Nyb2xsYmFyUGFydEFuaW1hdGlvbikgeworICAgICAgICBbc2Nyb2xsYmFy
UGFydEFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICAgICAgc2Nyb2xsYmFyUGFy
dEFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAocGFydCA9PSBXZWJDb3JlOjpUaHVt
YlBhcnQgJiYgIXdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpvbnRhbChzY3JvbGxlclBhaW50ZXIp
KSB7CisgICAgICAgIGlmIChuZXdBbHBoYSA9PSAxKSB7CisgICAgICAgICAgICBJbnRSZWN0IHRo
dW1iUmVjdCA9IEludFJlY3Qod2tTY3JvbGxiYXJQYWludGVyS25vYlJlY3Qoc2Nyb2xsZXJQYWlu
dGVyKSk7CisgICAgICAgICAgICBfYW5pbWF0b3ItPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVj
dCh0aHVtYlJlY3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIF9hbmltYXRvci0+c2V0
VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KEludFJlY3QoKSk7CisgICAgfQorCisgICAgW05TQW5p
bWF0aW9uQ29udGV4dCBiZWdpbkdyb3VwaW5nXTsKKyAgICBbW05TQW5pbWF0aW9uQ29udGV4dCBj
dXJyZW50Q29udGV4dF0gc2V0RHVyYXRpb246ZHVyYXRpb25dOworICAgIHNjcm9sbGJhclBhcnRB
bmltYXRpb24uYWRvcHROUyhbW1Njcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRXaXRo
U2Nyb2xsYmFyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ6cGFydAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxBbmltYXRvcjpfYW5pbWF0b3IgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVB
bHBoYVRvOm5ld0FscGhhIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOworICAgIFtz
Y3JvbGxiYXJQYXJ0QW5pbWF0aW9uLmdldCgpIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpOU0Fu
aW1hdGlvbk5vbmJsb2NraW5nXTsKKyAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBz
dGFydEFuaW1hdGlvbl07CisgICAgW05TQW5pbWF0aW9uQ29udGV4dCBlbmRHcm91cGluZ107Cit9
CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wIGFuaW1hdGVLbm9iQWxwaGFU
bzooQ0dGbG9hdCluZXdLbm9iQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9u
Cit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIFdLU2Nyb2xs
YmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNj
cm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xs
ZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxLbm9i
QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3JlOjpU
aHVtYlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9uXTsK
KyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNhbEtub2JBbmlt
YXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OlRodW1i
UGFydCBhbmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOworfQor
CistICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBhbmltYXRlVHJhY2tBbHBoYVRv
OihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9u
Cit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIFdLU2Nyb2xs
YmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNj
cm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xs
ZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxUcmFj
a0FuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29yZTo6
QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1cmF0
aW9uXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNhbFRy
YWNrQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3Jl
OjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEgZHVyYXRpb246ZHVy
YXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBvdmVybGF5
U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzooTlNVSW50ZWdlciluZXdPdmVybGF5U2Nyb2xsZXJTdGF0
ZQoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7CisgICAgVU5VU0VEX1BBUkFNKG5l
d092ZXJsYXlTY3JvbGxlclN0YXRlKTsKK30KKworLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ry
b3llZAoreworICAgIF9hbmltYXRvciA9IDA7CisgICAgW192ZXJ0aWNhbEtub2JBbmltYXRpb24u
Z2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFtfaG9yaXpvbnRhbEtub2JBbmlt
YXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFtfdmVydGljYWxUcmFj
a0FuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07CisgICAgW19ob3Jpem9u
dGFsVHJhY2tBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworfQorCitA
ZW5kCisKKyNlbmRpZiAvLyBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNy
ZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7CisgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKHNjcm9sbGFibGVBcmVhKSk7Cit9CisK
K1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMoU2Ny
b2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Nyb2xs
YWJsZUFyZWEpCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgICwgbV9pbml0aWFs
U2Nyb2xsYmFyUGFpbnRUaW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW5p
dGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkKKyNlbmRpZgorI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKKyAgICAsIG1faW5TY3JvbGxHZXN0dXJlKGZhbHNlKQorICAgICwgbV9tb21lbnR1
bVNjcm9sbEluUHJvZ3Jlc3MoZmFsc2UpCisgICAgLCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyhm
YWxzZSkKKyAgICAsIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wKDApCisgICAgLCBtX3N0
YXJ0VGltZSgwKQorICAgICwgbV9zbmFwUnViYmVyQmFuZFRpbWVyKHRoaXMsICZTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpCisjZW5kaWYKKyAgICAs
IG1fZHJhd2luZ0ludG9MYXllcihmYWxzZSkKKyAgICAsIG1faGF2ZVNjcm9sbGVkU2luY2VQYWdl
TG9hZChmYWxzZSkKK3sKKyAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmFkb3B0
TlMoW1tTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxB
bmltYXRvcjp0aGlzXSk7CisgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuYWRvcHROUyhbW05T
Q2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5pdFdp
dGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7CisKKyNp
ZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRl
IGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKKyAgICBtX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyID0gd2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIobV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpKTsKKyAgICBtX3Njcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBp
bml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKKyNlbmRpZgorfQorCitTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYygpCit7CisjaWYgVVNFKFdL
X1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVs
ZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFsoaWQpbV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX3Njcm9s
bGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07CisgICAg
W21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0
cm95ZWRdOworI2VuZGlmCit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Ny
b2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBtX2hhdmVT
Y3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworCisjaWYgIUVOQUJMRShTTU9PVEhfU0NST0xM
SU5HKQorICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFu
dWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZW5kaWYKKworICAgIGlmICghW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkFwcGxlU2Nyb2xsQW5p
bWF0aW9uRW5hYmxlZCJdKQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChv
cmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworCisgICAgaWYgKGdy
YW51bGFyaXR5ID09IFNjcm9sbEJ5UGl4ZWwpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisK
KyAgICBmbG9hdCBjdXJyZW50UG9zID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/IG1fY3VycmVudFBvc1ggOiBtX2N1cnJlbnRQb3NZOworICAgIGZsb2F0IG5ld1BvcyA9IHN0
ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4oY3VycmVudFBvcyArIChzdGVwICogbXVsdGlw
bGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXplKG9y
aWVudGF0aW9uKSkpLCAwKTsKKyAgICBpZiAoY3VycmVudFBvcyA9PSBuZXdQb3MpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIE5TUG9pbnQgbmV3UG9pbnQ7CisgICAgaWYgKFttX3Njcm9s
bEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfaXNBbmltYXRpbmddKSB7CisgICAgICAgIE5TUG9pbnQg
dGFyZ2V0T3JpZ2luID0gW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIHRhcmdldE9yaWdp
bl07CisgICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/IE5TTWFrZVBvaW50KG5ld1BvcywgdGFyZ2V0T3JpZ2luLnkpIDogTlNNYWtlUG9pbnQodGFy
Z2V0T3JpZ2luLngsIG5ld1Bvcyk7CisgICAgfSBlbHNlCisgICAgICAgIG5ld1BvaW50ID0gb3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgbV9j
dXJyZW50UG9zWSkgOiBOU01ha2VQb2ludChtX2N1cnJlbnRQb3NYLCBuZXdQb3MpOworCisgICAg
W21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIHNjcm9sbFRvUG9pbnQ6bmV3UG9pbnRdOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit7
CisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9zdG9wUnVuXTsKKyAgICBpbW1l
ZGlhdGVTY3JvbGxUb1BvaW50KG9mZnNldCk7Cit9CisKK2Zsb2F0IFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OmFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0IHBvc2l0aW9u
KSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgcmV0dXJu
IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVu
dHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0aCgpKSwgMCk7
Cit9CisKK2Zsb2F0IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFlQb3Np
dGlvbklmTmVjZXNzYXJ5KGZsb2F0IHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICghbV9zY3Jv
bGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKKyAgICAgICAg
cmV0dXJuIHBvc2l0aW9uOworCisgICAgcmV0dXJuIG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3Np
dGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBtX3Njcm9s
bGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKK30KKworRmxvYXRQb2ludCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJl
YS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBv
c2l0aW9uOworCisgICAgZmxvYXQgbmV3WCA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlv
bi54KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSBtX3Njcm9s
bGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOworICAgIGZsb2F0IG5ld1kgPSBtYXg8Zmxv
YXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50c1Np
emUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVIZWlnaHQoKSksIDApOwor
CisgICAgcmV0dXJuIEZsb2F0UG9pbnQobmV3WCwgbmV3WSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50
JiBuZXdQb3NpdGlvbikKK3sKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9zaXRpb24gPSBhZGp1
c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KG5ld1Bvc2l0aW9uKTsKKyAKKyAgICBpZiAoYWRq
dXN0ZWRQb3NpdGlvbi54KCkgPT0gbV9jdXJyZW50UG9zWCAmJiBhZGp1c3RlZFBvc2l0aW9uLnko
KSA9PSBtX2N1cnJlbnRQb3NZKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jdXJyZW50
UG9zWCA9IGFkanVzdGVkUG9zaXRpb24ueCgpOworICAgIG1fY3VycmVudFBvc1kgPSBhZGp1c3Rl
ZFBvc2l0aW9uLnkoKTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWChmbG9hdCBk
ZWx0YVgpCit7CisgICAgZmxvYXQgbmV3UG9zWCA9IGFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVj
ZXNzYXJ5KG1fY3VycmVudFBvc1ggKyBkZWx0YVgpOworICAgIAorICAgIGlmIChuZXdQb3NYID09
IG1fY3VycmVudFBvc1gpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRQb3NY
ID0gbmV3UG9zWDsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0
YVkpCit7CisgICAgZmxvYXQgbmV3UG9zWSA9IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNz
YXJ5KG1fY3VycmVudFBvc1kgKyBkZWx0YVkpOworICAgIAorICAgIGlmIChuZXdQb3NZID09IG1f
Y3VycmVudFBvc1kpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRQb3NZID0g
bmV3UG9zWTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpub3RpdHlQb3NpdGlvbkNoYW5nZWQoKQoreworI2lmIFVTRShX
S19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhU2Nyb2xsZWQobV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKKyAgICBTY3JvbGxBbmltYXRvcjo6
bm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAoreworI2lmIFVTRShXS19TQ1JPTExC
QVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhV2lsbFBhaW50KG1fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAoreworI2lmIFVTRShXS19T
Q1JPTExCQVJfUEFJTlRFUikKKyAgICB3a01vdXNlRW50ZXJlZENvbnRlbnRBcmVhKG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0Cit7CisjaWYg
VVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYSht
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QK
K3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tNb3VzZU1vdmVkSW5Db250
ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQor
eworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a1dpbGxTdGFydExpdmVSZXNp
emUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50c1Jlc2l6ZWQoKSBjb25zdAorewor
I2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhUmVzaXplZCht
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxFbmRMaXZlUmVzaXplKCkKK3sKKyNpZiBVU0Uo
V0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tXaWxsRW5kTGl2ZVJlc2l6ZShtX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0Cit7CisjaWYgVVNFKFdL
X1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFEaWRTaG93KG1fc2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29uc3QKK3sKKyNpZiBVU0UoV0tf
U0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tDb250ZW50QXJlYURpZEhpZGUobV9zY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworI2lmIFVTRShX
S19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0RpZEJlZ2luU2Nyb2xsR2VzdHVyZShtX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworI2lmIFVT
RShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0RpZEVuZFNjcm9sbEdlc3R1cmUobV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNj
cm9sbGJhcikKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgV0tTY3JvbGxi
YXJQYWludGVyUmVmIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjKj4oV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5w
YWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgd2tTY3JvbGxiYXJQYWludGVyU2V0
RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkpOworICAg
IHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCksIHBhaW50ZXIsIGZhbHNlKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+
aW5MaXZlUmVzaXplKCkpCisgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShw
YWludGVyLCAxKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7CisjZW5kaWYK
K30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsUmVtb3ZlVmVydGljYWxT
Y3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJBUl9Q
QUlOVEVSKQorICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpKS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAg
IHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG5pbCk7CisgICAgd2tTZXRQ
YWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5n
ZXQoKSwgbmlsLCBmYWxzZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOwor
I2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQWRkSG9yaXpv
bnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNpZiBVU0UoV0tfU0NST0xM
QkFSX1BBSU5URVIpCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4oV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7
CisgICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGUuZ2V0KCkpOworICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9s
bGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIHBhaW50ZXIsIHRydWUpOwor
ICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgd2tTZXRT
Y3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXIsIDEpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oc2Nyb2xsYmFyKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBXS1Njcm9sbGJhclBhaW50
ZXJSZWYgcGFpbnRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWMqPihXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKSktPnBhaW50ZXJG
b3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0
ZShwYWludGVyLCBuaWwpOworICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5pbCwgdHJ1ZSk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6Y2FuY2VsQW5pbWF0aW9ucygpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRT
aW5jZVBhZ2VMb2FkID0gZmFsc2U7CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisg
ICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQorICAgICAgICBzdG9wU2Nyb2xs
YmFyUGFpbnRUaW1lcigpOworICAgIFttX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBj
YW5jZWxBbmltYXRpb25zXTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQorCitzdGF0aWMgY29uc3QgZmxvYXQgc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCA9IDAu
MTBmOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRTdGlmZm5lc3MgPSAyMDsKK3N0YXRp
YyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7Citz
dGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3Ry
ZXRjaCA9IDEwOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRBbXBsaXR1ZGUgPSAwLjMx
ZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kUGVyaW9kID0gMS42ZjsKKworc3RhdGlj
IGZsb2F0IGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShmbG9hdCBpbml0aWFsUG9zaXRpb24sIGZs
b2F0IGluaXRpYWxWZWxvY2l0eSwgZmxvYXQgZWxhcHNlZFRpbWUpCit7CisgICAgZmxvYXQgYW1w
bGl0dWRlID0gcnViYmVyYmFuZEFtcGxpdHVkZTsKKyAgICBmbG9hdCBwZXJpb2QgPSBydWJiZXJi
YW5kUGVyaW9kOworICAgIGZsb2F0IGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9yID0gZXhwZigoLWVs
YXBzZWRUaW1lICogcnViYmVyYmFuZFN0aWZmbmVzcykgLyBwZXJpb2QpOworICAgICAgICAgICAg
IAorICAgIHJldHVybiAoaW5pdGlhbFBvc2l0aW9uICsgKC1pbml0aWFsVmVsb2NpdHkgKiBlbGFw
c2VkVGltZSAqIGFtcGxpdHVkZSkpICogY3JpdGljYWxEYW1wZW5pbmdGYWN0b3I7Cit9CisKK3N0
YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCit7Cisg
ICAgZmxvYXQgc3RpZmZuZXNzID0gc3RkOjptYXgocnViYmVyYmFuZFN0aWZmbmVzcywgMS4wZik7
CisgICAgcmV0dXJuIGRlbHRhIC8gc3RpZmZuZXNzOworfQorCitzdGF0aWMgZmxvYXQgcmVib3Vu
ZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQoreworICAgIHJldHVybiBkZWx0YSAq
IHJ1YmJlcmJhbmRTdGlmZm5lc3M7Cit9CisKK3N0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11bHRp
cGxpZXIoKQoreworICAgIHN0YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7CisgICAgaWYgKG11
bHRpcGxpZXIgPCAwKSB7CisgICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNlckRlZmF1bHRzIHN0
YW5kYXJkVXNlckRlZmF1bHRzXSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hlZWxNdWx0aXBsaWVy
Il07CisgICAgICAgIGlmIChtdWx0aXBsaWVyIDw9IDApCisgICAgICAgICAgICBtdWx0aXBsaWVy
ID0gMTsKKyAgICB9CisgICAgcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsKKwor
ICAgIGlmICghd2hlZWxFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkpIHsKKyAgICAg
ICAgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByb3VuZGFi
b3V0IGhhY2sgdG8gYWxsb3cgZm9yd2FyZGluZyB3aGVlbCBldmVudHMKKyAgICAvLyB1cCB0byB0
aGUgcGFyZW50IHNjcm9sbGFibGUgYXJlYS4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0
IHRoYXQKKyAgICAvLyB0aGUgYmFzZSBjbGFzcyBpbXBsZW1lbmF0YXRpb24gb2YgaGFuZGxlV2hl
ZWxFdmVudCB3aWxsIG5vdCBhY2NlcHQgdGhlCisgICAgLy8gd2hlZWwgZXZlbnQgaWYgdGhlcmUg
aXMgbm93aGVyZSB0byBzY3JvbGwuCisgICAgaWYgKGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFZKCkp
ID49IGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFYKCkpKSB7CisgICAgICAgIGlmICghYWxsb3dzVmVy
dGljYWxTdHJldGNoaW5nKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVX
aGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpKSB7
CisgICAgICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoZWVsRXZl
bnQuYWNjZXB0KCk7CisKKyAgICBib29sIGlzTW9tZXR1bVNjcm9sbEV2ZW50ID0gKHdoZWVsRXZl
bnQubW9tZW50dW1QaGFzZSgpICE9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSk7CisgICAg
aWYgKG1faWdub3JlTW9tZW50dW1TY3JvbGxzICYmIChpc01vbWV0dW1TY3JvbGxFdmVudCB8fCBt
X3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkpIHsKKyAgICAgICAgaWYgKHdoZWVsRXZl
bnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQpCisgICAg
ICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KHdoZWVsRXZlbnQpOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQ
bGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQoreworICAgIGlmIChnZXN0dXJlRXZl
bnQudHlwZSgpID09IFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxCZWdpblR5cGUpCisgICAg
ICAgIGJlZ2luU2Nyb2xsR2VzdHVyZSgpOworICAgIGVsc2UKKyAgICAgICAgZW5kU2Nyb2xsR2Vz
dHVyZSgpOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnBpbm5lZEluRGly
ZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQoreworICAgIEZsb2F0U2l6ZSBsaW1p
dERlbHRhOworICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKKyAgICAg
ICAgaWYgKGRlbHRhWSA8IDApIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Ny
b2xsIHVwLiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0b3AKKyAgICAgICAg
ICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50
UmVjdCgpLnkoKSArICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGRv
d24uICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRvbQorICAgICAgICAg
ICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCku
aGVpZ2h0KCkgLSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WSgp
ICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKSk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKGRlbHRhWCAhPSAwKSB7CisgICAgICAgIGlmIChkZWx0YVggPCAwKSB7Cisg
ICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdl
IGFyZSBub3QgcGlubmVkIHRvIHRoZSBsZWZ0CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldFdp
ZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLngoKSArIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3ZSBhcmUg
bm90IHBpbm5lZCB0byB0aGUgcmlnaHQKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgo
bV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIChtX3Njcm9sbGFibGVB
cmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhYKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3Jv
bGxPcmlnaW4oKS54KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoKGRlbHRh
WCAhPSAwIHx8IGRlbHRhWSAhPSAwKSAmJiAobGltaXREZWx0YS53aWR0aCgpIDwgMSAmJiBsaW1p
dERlbHRhLmhlaWdodCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphbGxvd3NWZXJ0aWNh
bFN0cmV0Y2hpbmcoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+dmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRv
bWF0aWM6IHsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVh
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0g
bV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgcmV0dXJuICgo
KHZTY3JvbGxlciAmJiB2U2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCFoU2Nyb2xsZXIgfHwgIWhT
Y3JvbGxlci0+ZW5hYmxlZCgpKSkpOworICAgIH0KKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlO
b25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxs
b3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBj
YXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Ny
b2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAg
IFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxi
YXIoKTsKKyAgICAgICAgcmV0dXJuICgoKGhTY3JvbGxlciAmJiBoU2Nyb2xsZXItPmVuYWJsZWQo
KSkgfHwgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKSkpOworICAgIH0KKyAg
ICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Y2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudChQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBh
Z2VMb2FkID0gdHJ1ZTsKKworICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS53aWR0aCgpOworICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWln
aHQoKTsKKworICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBkZWNp
ZGUgdG8gcmVtb3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBvdmVy
Zmxvdy4KKyAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKworICAgIGZs
b2F0IGV2ZW50Q29hbGxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOworICAgIGZs
b2F0IGV2ZW50Q29hbGxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgpOworCisgICAg
ZGVsdGFYICs9IGV2ZW50Q29hbGxlc2NlZERlbHRhWDsKKyAgICBkZWx0YVkgKz0gZXZlbnRDb2Fs
bGVzY2VkRGVsdGFZOworCisgICAgLy8gU2xpZ2h0bHkgcHJlZmVyIHNjcm9sbGluZyB2ZXJ0aWNh
bGx5IGJ5IGFwcGx5aW5nIHRoZSA9IGNhc2UgdG8gZGVsdGFZCisgICAgaWYgKGZhYnNmKGRlbHRh
WSkgPj0gZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAgICBlbHNlCisgICAg
ICAgIGRlbHRhWSA9IDA7CisKKyAgICBib29sIGlzVmVydGljYWxseVN0cmV0Y2hlZCA9IGZhbHNl
OworICAgIGJvb2wgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgPSBmYWxzZTsKKyAgICBib29sIHNo
b3VsZFN0cmV0Y2ggPSBmYWxzZTsKKyAgICAKKyAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBt
X3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworCisgICAgaXNIb3Jpem9udGFsbHlT
dHJldGNoZWQgPSBzdHJldGNoQW1vdW50LndpZHRoKCk7CisgICAgaXNWZXJ0aWNhbGx5U3RyZXRj
aGVkID0gc3RyZXRjaEFtb3VudC5oZWlnaHQoKTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVudFBo
YXNlIHBoYXNlID0gd2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCk7CisKKyAgICAvLyBJZiB3ZSBh
cmUgc3RhcnRpbmcgbW9tZW50dW0gc2Nyb2xsaW5nIHRoZW4gZG8gc29tZSBzZXR1cC4KKyAgICBp
ZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYmIChwaGFzZSA9PSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZUJlZ2FuIHx8IHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdl
ZCkpCisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gdHJ1ZTsKKworICAgIENG
VGltZUludGVydmFsIHRpbWVEZWx0YSA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCkgLSBtX2xhc3RN
b21lbXR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9pblNjcm9sbEdlc3R1cmUgfHwgbV9t
b21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgaWYgKG1fbGFzdE1vbWVtdHVtU2Ny
b2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+IDAgJiYgdGltZURlbHRhIDwgc2Nyb2xsVmVsb2Np
dHlaZXJvaW5nVGltZW91dCkgeworICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldFdp
ZHRoKGV2ZW50Q29hbGxlc2NlZERlbHRhWCAvIChmbG9hdCl0aW1lRGVsdGEpOworICAgICAgICAg
ICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldEhlaWdodChldmVudENvYWxsZXNjZWREZWx0YVkgLyAo
ZmxvYXQpdGltZURlbHRhKTsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0
YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAo
KTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCkgeworICAgICAgICAgICAg
aWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiBwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgs
IDApKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25s
eSBpbiB0aGUgdmVydGljYWwuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAhPSAwICYmIChm
YWJzZihkZWx0YVggLyBkZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0
aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZv
cmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5z
ZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAg
ICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Ny
b2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSBpZiAoaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIC8vIFN0cmV0Y2hp
bmcgb25seSBpbiB0aGUgaG9yaXpvbnRhbC4KKyAgICAgICAgICAgIGlmIChwaW5uZWRJbkRpcmVj
dGlvbigwLCBkZWx0YVkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWCAhPSAwICYmIChm
YWJzZihkZWx0YVkgLyBkZWx0YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0
aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGZhYnNmKGRlbHRhWSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZv
cmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5z
ZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93
U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxsIHlldC4KKyAgICAg
ICAgICAgIGlmIChwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERl
bHRhQmVmb3JlU3RyZXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Nj
cm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFY
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRh
LnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVsdGFYICE9IDAgfHwgZGVs
dGFZICE9IDApIHsKKyAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlT
dHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7CisgICAgICAgICAgICBpZiAo
ZGVsdGFZICE9IDApIHsKKyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0
aXBsaWVyKCk7CisgICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZGVsdGFZ
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWx0YVggIT0gMCkgeworICAgICAg
ICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAgICAgICAg
ICAgICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChkZWx0YVgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGlu
ZygpKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAgICBldmVu
dENvYWxsZXNjZWREZWx0YVggPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmICgoZGVsdGFYICE9
IDApICYmICFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiAhcGlubmVkSW5EaXJlY3Rpb24oZGVs
dGFYLCAwKSkgeworICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxp
ZXIoKTsKKworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNT
Y3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpbW1lZGlhdGVT
Y3JvbGxCeURlbHRhWChkZWx0YVgpOworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOworCisgICAgICAgICAg
ICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSkgeworICAgICAgICAgICAgICAgIGRl
bHRhWSA9IDA7CisgICAgICAgICAgICAgICAgZXZlbnRDb2FsbGVzY2VkRGVsdGFZID0gMDsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0aWNhbGx5U3RyZXRj
aGVkICYmICFwaW5uZWRJbkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7CisgICAgICAgICAgICAgICAg
ZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOworCisgICAgICAgICAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2Up
OworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGRlbHRhWSk7CisgICAg
ICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29u
dGVudEVkZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBt
X3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworICAgICAgICAKKyAgICAgICAgICAg
IGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgeworICAgICAgICAgICAgICAgIGlmICgo
cGlubmVkSW5EaXJlY3Rpb24oZXZlbnRDb2FsbGVzY2VkRGVsdGFYLCBldmVudENvYWxsZXNjZWRE
ZWx0YVkpIHx8IChmYWJzZihldmVudENvYWxsZXNjZWREZWx0YVgpICsgZmFic2YoZXZlbnRDb2Fs
bGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXApIHsK
KyAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFuZCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgo
bV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICBtX3N0
cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkg
KyBkZWx0YVkpOworCisgICAgICAgICAgICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxh
c3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwg
Y2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhl
aWdodCgpKSkpOworICAgICAgICAgICAgRmxvYXRQb2ludCBvcmlnT3JpZ2luID0gKG1fc2Nyb2xs
YWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFibGVB
cmVhLT5zY3JvbGxPcmlnaW4oKSkgLSBzdHJldGNoQW1vdW50OworICAgICAgICAgICAgRmxvYXRQ
b2ludCBuZXdPcmlnaW4gPSBvcmlnT3JpZ2luICsgZGFtcGVkRGVsdGE7CisKKyAgICAgICAgICAg
IGlmIChvcmlnT3JpZ2luICE9IG5ld09yaWdpbikgeworICAgICAgICAgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld09yaWdpbik7CisgICAgICAg
ICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
bV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VFbmRlZCkgeworICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNl
OworICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAgICBtX2xh
c3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7CisgICAgfQorfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OmJlZ2luU2Nyb2xsR2VzdHVyZSgpCit7CisgICAgZGlkQmVnaW5T
Y3JvbGxHZXN0dXJlKCk7CisKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVl
OworICAgIG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKKyAgICBtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcyA9IGZhbHNlOworICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Cisg
ICAgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgPSAwOworICAgIG1fbW9tZW50dW1WZWxv
Y2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9zY3Jv
bGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5z
ZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC53aWR0aCgp
KSk7CisgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVs
YXN0aWNEZWx0YShzdHJldGNoQW1vdW50LmhlaWdodCgpKSk7CisKKyAgICBtX292ZXJmbG93U2Ny
b2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKyAgICAKKyAgICBpZiAobV9zbmFwUnViYmVyQmFuZFRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7Cit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZW5kU2Nyb2xsR2VzdHVyZSgpCit7
CisgICAgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpOworCisgICAgc25hcFJ1YmJlckJhbmQoKTsKK30K
Kwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZCgpCit7Cisg
ICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZv
XSBzeXN0ZW1VcHRpbWVdIC0gbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXA7CisgICAgaWYg
KG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+PSBzY3JvbGxWZWxv
Y2l0eVplcm9pbmdUaW1lb3V0KQorICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNp
emUoKTsKKworICAgIG1faW5TY3JvbGxHZXN0dXJlID0gZmFsc2U7CisKKyAgICBpZiAobV9zbmFw
UnViYmVyQmFuZFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc3Rh
cnRUaW1lID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdOworICAgIG1f
c3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2lu
dCgpOworICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisKKyAgICBtX3NuYXBSdWJi
ZXJCYW5kVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wLzYwLjApOworfQorCitzdGF0aWMgaW5saW5l
IGZsb2F0IHJvdW5kVG93YXJkWmVybyhmbG9hdCBudW0pCit7CisgICAgcmV0dXJuIG51bSA+IDAg
PyBjZWlsZihudW0gLSAwLjVmKSA6IGZsb29yZihudW0gKyAwLjVmKTsKK30KKworc3RhdGljIGlu
bGluZSBmbG9hdCByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGZsb2F0IG51bSkKK3sKKyAg
ICBmbG9hdCByb3VuZGVkTnVtID0gcm91bmRmKG51bSk7CisgICAgaWYgKGZhYnMobnVtIC0gcm91
bmRlZE51bSkgPCAwLjEyNSkKKyAgICAgICAgbnVtID0gcm91bmRlZE51bTsKKworICAgIHJldHVy
biByb3VuZFRvd2FyZFplcm8obnVtKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYz4qKQoreworICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9pZ25v
cmVNb21lbnR1bVNjcm9sbHMpIHsKKyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0g
W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gbV9zdGFydFRpbWU7CisK
KyAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7CisgICAgICAgICAg
ICBtX3N0YXJ0U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7Cisg
ICAgICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsgICAgCisgICAg
ICAgICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKKyAgICAgICAgICAgICAg
ICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgICAgIG1f
c3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6
ZSgpOworICAgICAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKKyAgICAg
ICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSAo
bV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIG1fc3RhcnRTdHJldGNoOworICAgICAgICAg
ICAgbV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7CisKKyAgICAgICAgICAgIC8v
IEp1c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVydGljYWwgcnViYmVyYmFuZGlu
ZworICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJz
ZihtX29yaWdWZWxvY2l0eS53aWR0aCgpKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0
eS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVy
LWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9u
dGFsbHkKKyAgICAgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJl
YS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICAgICAgaWYgKCFoU2Nyb2xsZXIgfHwg
IWhTY3JvbGxlci0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNl
dFdpZHRoKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFu
ZCB2ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkK
KyAgICAgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVy
dGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgICAgIGlmICghdlNjcm9sbGVyIHx8ICF2U2Nyb2xs
ZXItPmVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRIZWlnaHQo
MCk7CisgICAgICAgIH0KKworICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQ
aXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLndp
ZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURlbHRhKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGlj
RGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29yaWdWZWxvY2l0
eS5oZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKKworICAgICAgICBpZiAoZmFicyhkZWx0
YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKKyAgICAgICAgICAgIEZsb2F0
UG9pbnQgbmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7CisKKyAgICAgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNl
KTsKKyAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsKKyAgICAg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRF
ZGdlKHRydWUpOworCisgICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fc2Nyb2xs
YWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
c3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShu
ZXdTdHJldGNoLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNl
dEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludCht
X29yaWdPcmlnaW4pOworCisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5kaWRDb21wbGV0
ZVJ1YmJlckJhbmQocm91bmRlZEludFNpemUobV9zdGFydFN0cmV0Y2gpKTsKKworICAgICAgICAg
ICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNj
cm9sbEZvcmNlID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3Rh
cnRUaW1lID0gMDsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Cisg
ICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgICAgICAgICBtX29y
aWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07
CisgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgfQorfQorI2VuZGlm
CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpCit7CisgICAgbV9pbml0aWFsU2Ny
b2xsYmFyUGFpbnRUaW1lci5zdGFydE9uZVNob3QoMC4xKTsKK30KKworYm9vbCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLmlzQWN0aXZlKCk7Cit9CisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIo
KQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RvcCgpOworfQorCit2b2lk
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmly
ZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKQoreworICAgIHdrU2Nyb2xsYmFy
UGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5n
ZXQoKSk7Cit9CisjZW5kaWYKKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzZXRW
aXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKK3sK
KyAgICBJbnRSZWN0IHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHNjcm9sbGVyVGh1bWI7CisgICAg
aWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0
aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNh
bFNjcm9sbGJhci0+Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7CisKKyAg
ICBpZiAocmVjdEluVmlld0Nvb3JkaW5hdGVzID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRWaXNpYmxlU2Ny
b2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBtX3Zpc2libGVTY3Jv
bGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGluYXRlczsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgK
aW5kZXggOGIwMjYzNGYwZWU5NGZhZDczZTI2M2U1MmZiZjFjMzM5NTFjZGQxYS4uYTMzZmE3N2Q3
MWQ0ZTJhOTE2YWQ4NjVmZWYyZGM0Y2JjMGVkNGM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCkBAIC0zNyw3ICszNyw3IEBAIHR5cGVkZWYgc3RydWN0
IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgogCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgT1Mo
REFSV0lOKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVT
CiB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiAjZWxzZQpAQCAtMTE5LDcgKzExOSw3
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VP
TUVUUllfVFlQRVMpCisjaWYgT1MoREFSV0lOKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVT
X1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKICAgICBleHBsaWNpdCBJbnRQb2ludChjb25zdCBO
U1BvaW50Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAg
ICAgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95028</attachid>
            <date>2011-05-26 13:32:09 -0700</date>
            <delta_ts>2011-05-26 13:51:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61342-20110526133208.patch</filename>
            <type>text/plain</type>
            <size>65647</size>
            <attacher name="Sailesh Agrawal">sail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODczOTgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ODQ4YzMzYTFmYTY3MjNhODhjNjBk
OTcxZWRmNmFhNmI2NmM0YmYwLi4wNzQwMjYwNGI0ZDg0Y2Q0Nzk2NTJjYjg0ZmJkNGUzNTUyMDAw
ZTkyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDUtMjYgIFNhaWxlc2ggQWdyYXdhbCAg
PHNhaWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlZ3Jlc3Npb24ocjg3MTE4KTogY2hyb21pdW0vbWFjOiBzY3JvbGwgbGF5
b3V0IHRlc3RzIGZhaWx1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MTM0MgorCisgICAgICAgIFJlbW92ZSBleGNlcHRpb25zIGZvciBNYWMgc2Ny
b2xsIHRlc3RzIHRoYXQgYXJlIG5vdyBwYXNzaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OgorCiAyMDExLTA1LTI2ICBBZGFtIEtsZWluICA8
YWRhbWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEFkZGVkIGJhc2VsaW5l
cyBhZnRlciByODczODcuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1
bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90
ZXN0X2V4cGVjdGF0aW9ucy50eHQKaW5kZXggNmZlZjA0MjQxN2Q1OTQ1ZjcwNDkyOWQ3MzNhM2Ix
ZTZlNThhNWFmOC4uYzVhMGU1NzQ4ZjRhMTg5NTE2NzNhNDViN2QzMGRhZGJlYWQzNmU4OCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMu
dHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25z
LnR4dApAQCAtNDA5OSwxMyArNDA5OSw2IEBAIEJVR0NSODM2ODMgOiBmYXN0L2RvbS9IVE1MTGlu
a0VsZW1lbnQvcHJlcmVuZGVyLmh0bWwgPSBURVhUCiBCVUdNT1JSSVRBIDogZmFzdC9odG1sL2Rl
dGFpbHMtcmVwbGFjZS10ZXh0Lmh0bWwgPSBGQUlMCiBCVUdNT1JSSVRBIDogZmFzdC9odG1sL2Rl
dGFpbHMtcmVwbGFjZS1zdW1tYXJ5LWNoaWxkLmh0bWwgPSBGQUlMCiAKLS8vIFJlZ3Jlc3Npb24g
ZnJvbSB3ZWJraXQgcjg3MTE4Ci1CVUdXSzYxMzQyIE1BQyA6IGZhc3QvcmVwYWludC9maXhlZC1t
b3ZlLWFmdGVyLWtleWJvYXJkLXNjcm9sbC5odG1sID0gSU1BR0UrVEVYVAotQlVHV0s2MTM0MiBN
QUMgOiBmYXN0L2RvbS92ZXJ0aWNhbC1zY3JvbGxiYXItaW4tcnRsLmh0bWwgPSBURVhUCi1CVUdX
SzYxMzQyIE1BQyA6IGZhc3QvZXZlbnRzL25vZGUtZXZlbnQtYW5jaG9yLWxvY2suaHRtbCA9IFRF
WFQKLUJVR1dLNjEzNDIgTUFDIDogZmFzdC9ldmVudHMvc2Nyb2xsLWFmdGVyLWNsaWNrLW9uLXRh
Yi1pbmRleC5odG1sID0gVEVYVAotQlVHV0s2MTM0MiBNQUMgOiBmYXN0L2V2ZW50cy9zY3JvbGxi
YXItZG91YmxlLWNsaWNrLmh0bWwgPSBURVhUCi0KIC8vIE5ldyB0ZXN0cyBhZGRlZCBpbiByODcx
MjEKIEJVR1dLNjExNjkgOiBjc3MzL2ltYWdlcy9vcHRpbWl6ZS1jb250cmFzdC1jYW52YXMuaHRt
bCA9IElNQUdFCiBCVUdXSzYxMTY5IDogY3NzMy9pbWFnZXMvb3B0aW1pemUtY29udHJhc3QtaW1h
Z2UuaHRtbCA9IElNQUdFCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzJhMTA5MjFmMGM1MzkzYjQ5YmE4ZTY2Zjk5
YWQyMTE3ZWQzMmEwNS4uMmJlOGRiMmRjZTYyZmQ5MGViMzA1NWQxMWFmOWQ5NTFlZmQyYjQwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNiBAQAorMjAxMS0wNS0yNiAgU2FpbGVzaCBBZ3Jhd2Fs
ICA8c2FpbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVncmVzc2lvbihyODcxMTgpOiBjaHJvbWl1bS9tYWM6IHNjcm9sbCBs
YXlvdXQgdGVzdHMgZmFpbHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYxMzQyCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBKdXN0IGZvcmtpbmcg
U2Nyb2xsQW5pbWF0b3JNYWMgdG8gU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy4KKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOiBBZGRlZCBJbnRQb2ludE1hYy5tbS4gVGhpcyBp
cyB1c2VkIGJ5IHNvbWUgZnVuY3Rpb25zIGluIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuIEFs
c28gYWRkZWQgZmlsdGVycyBmb3IgY29uZmxpY3RpbmcgY2xhc3MgbmFtZXMgaW4gU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYy4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZGVkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWMuaC9tbS4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5jcHA6IEV4dGVuZGVkIHRoZSAjaWZkZWYgYXJvdW5kIFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUo
KSBzbyB0aGF0IHRoZSBjaHJvbWl1bSB2ZXJzaW9uIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0SXNEcmF3aW5n
SW50b0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmlzRHJhd2luZ0ludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpoYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLm1tOiBBZGRlZC4gRm9ya2VkIGZy
b20gU2Nyb2xsQW5pbWF0b3JNYWMgYW5kIHJlcGxhY2VkIGFsbCBpbnN0YW5jZXMgb2YgU2Nyb2xs
QW5pbWF0b3JNYWMgd2l0aCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjIGFuZCBTY3JvbGxiYXJU
aGVtZU1hYyB3aXRoIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuIFJlbW92ZWQgdGhlIEVOQUJM
RShTTU9PVEhfU0NST0xMSU5HKSBhcm91bmQgdGhlIGZpbGUuIFN0dWJiZWQgb3V0IFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbCgpIGlmIHNtb290aCBzY3JvbGxpbmcgaXMgZGlzYWJs
ZWQuCisgICAgICAgIChhYnMpOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxl
Z2F0ZSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAg
ICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBib3VuZHNdKToKKyAgICAgICAg
KC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgX2ltbWVkaWF0ZVNjcm9sbFRvUG9pbnQ6
XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIF9waXhlbEFsaWdu
UHJvcG9zZWRTY3JvbGxQb3NpdGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVs
cGVyRGVsZWdhdGUgY29udmVydFNpemVUb0Jhc2U6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlIGNvbnZlcnRTaXplRnJvbUJhc2U6XSk6CisgICAgICAgICgtW1Nj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGNvbnZlcnRTaXplVG9CYWNraW5nOl0pOgorICAg
ICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBjb252ZXJ0U2l6ZUZyb21CYWNr
aW5nOl0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBzdXBlcnZp
ZXddKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgZG9jdW1lbnRW
aWV3XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIHdpbmRvd10p
OgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBfcmVjdXJzaXZlUmVj
b21wdXRlVG9vbFRpcHNdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJE
ZWxlZ2F0ZSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVk
XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgY29udGVu
dEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlckRlbGVnYXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjpdKToK
KyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBtb3VzZUxvY2F0
aW9uSW5Db250ZW50QXJlYUZvclNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6Y29udmVydENvbnRl
bnRQb2ludDp0b1Njcm9sbGVySW1wOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlIHNjcm9sbGVySW1wUGFpcjpzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxh
eUluUmVjdDpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0
ZSBzY3JvbGxlckltcFBhaXI6dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Ny
b2xsZXJTdHlsZTpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBpbml0V2l0
aFNjcm9sbGJhclBhaW50ZXI6cGFydDpXZWJDb3JlOjpzY3JvbGxBbmltYXRvcjpXZWJDb3JlOjph
bmltYXRlQWxwaGFUbzpkdXJhdGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1h
dGlvbiBzZXRDdXJyZW50UHJvZ3Jlc3M6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhcnRBbmlt
YXRpb24gc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAg
ICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXSk6CisgICAgICAg
ICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBjb252ZXJ0UmVjdFRvQmFja2luZzpdKToKKyAg
ICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6
XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBsYXllcl0pOgorICAgICAg
ICAoLVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgc2V0VXBBbmltYXRpb246c2Nyb2xsZXJQYWlu
dGVyOnBhcnQ6V2ViQ29yZTo6YW5pbWF0ZUFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgt
W1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25vYkFscGhhVG86
ZHVyYXRpb246XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxl
ckltcDphbmltYXRlVHJhY2tBbHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUgc2Nyb2xsZXJJbXA6b3ZlcmxheVNjcm9sbGVyU3RhdGVDaGFuZ2Vk
VG86XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxBbmltYXRv
ckRlc3Ryb3llZF0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6On5TY3JvbGxBbmltYXRvckNocm9taXVtTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xs
WFBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25J
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
OjppbW1lZGlhdGVTY3JvbGxUb1BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om5vdGl0eVBvc2l0
aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
Ojpjb250ZW50QXJlYVdpbGxQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjptb3VzZUVudGVyZWRDb250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRlbnRBcmVhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlTW92ZWRJbkNv
bnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OndpbGxTdGFydExpdmVSZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6Y29udGVudHNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OndpbGxFbmRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdyk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQmVnaW5T
Y3JvbGxHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y2FuY2VsQW5pbWF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjplbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6
ZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYm91bmRE
ZWx0YUZvckVsYXN0aWNEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxXaGVlbE11bHRp
cGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aGFu
ZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6cGlubmVkSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hvcml6b250YWxT
dHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OnNtb290aFNjcm9sbFdpdGhFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjpiZWdpblNjcm9sbEdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZW5kU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpyb3VuZFRvd2FyZFplcm8pOgorICAgICAgICAoV2ViQ29yZTo6cm91bmRUb0Rl
dmljZVBpeGVsVG93YXJkWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbGJhclBhaW50
VGltZXJJc0FjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNldFZpc2libGVTY3Jv
bGxlclRodW1iUmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaDog
RXhwb3NlZCBOU1BvaW50IGNvbnZlcnNpb24gcm91dGluZXMgdG8gY2hyb21pdW0gbWFjLgorCiAy
MDExLTA1LTI2ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgWXVyeSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAv
V2ViQ29yZS5neXAKaW5kZXggMDEzZjA0NDQyODU5ZmI5ZTYyMjNlM2M4NzJkM2U5YTIyNDJkODc0
MS4uZWZkNjg0ZTQ0ZjY4YmFlYjgxMTMxNzg5ZDgzYjIwNTIxNTFmMzkxMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTExNDgsNiArMTE0OCwxMCBAQAogICAgICAg
ICAgICAgICAnU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xs
YmFyUHJlZnNPYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJDb3JlUmVuZGVyVGhlbWVOb3Rp
ZmljYXRpb25PYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDV2ViQ29yZVJlbmRlclRoZW1lTm90
aWZpY2F0aW9uT2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViRm9udENhY2hlPUNocm9taXVt
V2ViQ29yZU9iakNXZWJGb250Q2FjaGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlJywKKyAgICAgICAgICAgICAgJ1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdh
dGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUn
LAorICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlPUNocm9taXVtV2ViQ29y
ZU9iakNTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsYmFy
UGFydEFuaW1hdGlvbj1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFydEFuaW1hdGlvbics
CiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKICAgICAgICAg
ICAgICAgJy4uLy4uLy4uL1dlYktpdExpYnJhcmllcycsCkBAIC0xMzY2LDYgKzEzNzAsNyBAQAog
ICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVN
YWNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR2x5cGhQYWdlVHJlZU5vZGVNYWNcXC5jcHAkJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dE1hY1xcLm1tJCddLAorICAg
ICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2ludE1hY1xc
Lm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9J
bnRSZWN0TWFjXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vbWFj
L0Jsb2NrRXhjZXB0aW9uc1xcLm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRm
b3JtL21hYy9LaWxsUmluZ01hY1xcLm1tJCddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDU2ZTMyYmJk
Y2ZkNGUzOGIzMmMxOTI0YWM0MTM3OTYxNDIyMDk1ODQuLmJhNTU2N2RiM2E3ZDZlZGRiYTBhYjZj
MmQ1MjE1ODUwN2VhZDNlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM4MzIsNiArMzgzMiw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNw
cCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJP
dmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjLm1tJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKaW5kZXggYzQzNGUwNTBlNTU0
OTJlZjNhZjllMTcyZTBiMzRmNzc4OWJhNTAyNy4uYjdiMGE0MWE1NzJhZTk2MTJkMmIwNzVjOGVl
OWY4Mjg3ZmNlMzA5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9y
LmNwcApAQCAtNDEsNyArNDEsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLSNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCisjaWYgIUVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKSAmJiAhKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKQog
UGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3Jv
bGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNkMGQ1YTEyYzgzNjVlYWQyMmRiYTY0YmRhNWJiMjVlNjk1YjY0ODAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAorI2RlZmluZSBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjX2gKKworI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFNp
emUuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmZGVmIF9fT0JK
Q19fCitAY2xhc3MgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CitAY2xhc3MgU2Nyb2xs
YmFyUGFpbnRlckRlbGVnYXRlOworQGNsYXNzIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVs
ZWdhdGU7CitAY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworI2Vsc2UKK2NsYXNzIFNj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlOworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKK2NsYXNzIFNj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbGJhcjsKKworY2xhc3MgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyA6IHB1
YmxpYyBTY3JvbGxBbmltYXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYyhTY3JvbGxhYmxlQXJlYSopOworICAgIHZpcnR1YWwgflNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWMoKTsKKworICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVy
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmKTsKKworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyNpZiBFTkFCTEUo
R0VTVFVSRV9FVkVOVFMpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZUdlc3R1cmVFdmVudChjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisjZW5kaWYKKworICAgIHZpcnR1YWwg
dm9pZCBjYW5jZWxBbmltYXRpb25zKCk7CisKKyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9p
bnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOworICAgIHZvaWQgaW1tZWRpYXRlU2Ny
b2xsQnlEZWx0YVgoZmxvYXQgZGVsdGFYKTsKKyAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5RGVs
dGFZKGZsb2F0IGRlbHRhWSk7CisKKyAgICB2b2lkIHNldElzRHJhd2luZ0ludG9MYXllcihib29s
IGIpIHsgbV9kcmF3aW5nSW50b0xheWVyID0gYjsgfQorICAgIGJvb2wgaXNEcmF3aW5nSW50b0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nSW50b0xheWVyOyB9CisKKyAgICBib29sIGhh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJldHVybiBtX2hhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQ7IH0KKworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBib29s
IHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRTY3Jv
bGxiYXJQYWludFRpbWVyKCk7CisgICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOwor
I2VuZGlmCisKKyAgICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRS
ZWN0Jik7CisKK3ByaXZhdGU6CisgICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbEFuaW1hdGlvbkhl
bHBlcjsKKyAgICBSZXRhaW5QdHI8U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU+IG1fc2Ny
b2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5U
RVIpCisgICAgUmV0YWluUHRyPFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWY+IG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7CisgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyRGVsZWdhdGU+IG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsK
KyAgICBSZXRhaW5QdHI8aWQ+IG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworCisgICAgdm9p
ZCBpbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM+Kik7CisgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9pbml0
aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcjsKKyNlbmRpZgorICAgIAorICAgIHZpcnR1YWwgdm9pZCBu
b3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFyZWFXaWxs
UGFpbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFbnRlcmVkQ29udGVudEFyZWEo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBtb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCB3aWxsU3RhcnRMaXZlUmVzaXplKCk7CisgICAgdmlydHVhbCB2b2lkIGNv
bnRlbnRzUmVzaXplZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB3aWxsRW5kTGl2ZVJlc2l6
ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50QXJlYURpZFNob3coKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgY29udGVudEFyZWFEaWRIaWRlKCkgY29uc3Q7CisgICAgdm9pZCBkaWRCZWdp
blNjcm9sbEdlc3R1cmUoKSBjb25zdDsKKyAgICB2b2lkIGRpZEVuZFNjcm9sbEdlc3R1cmUoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9s
bGJhciopOworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9s
bGJhciopOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihT
Y3JvbGxiYXIqKTsKKworICAgIGZsb2F0IGFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5
KGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCBhZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vzc2Fy
eShmbG9hdCkgY29uc3Q7CisgICAgRmxvYXRQb2ludCBhZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVj
ZXNzYXJ5KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKworI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKKyAgICBib29sIGFsbG93c1ZlcnRpY2FsU3RyZXRjaGluZygpIGNvbnN0OworICAgIGJv
b2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBjb25zdDsKKyAgICBib29sIHBpbm5lZElu
RGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKTsKKyAgICB2b2lkIHNuYXBSdWJi
ZXJCYW5kKCk7CisgICAgdm9pZCBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYz4qKTsKKyAgICB2b2lkIHNtb290aFNjcm9sbFdpdGhFdmVudChQ
bGF0Zm9ybVdoZWVsRXZlbnQmKTsKKyAgICB2b2lkIGJlZ2luU2Nyb2xsR2VzdHVyZSgpOworICAg
IHZvaWQgZW5kU2Nyb2xsR2VzdHVyZSgpOworCisgICAgYm9vbCBtX2luU2Nyb2xsR2VzdHVyZTsK
KyAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzOworICAgIGJvb2wgbV9pZ25vcmVN
b21lbnR1bVNjcm9sbHM7CisgICAgCisgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0TW9tZW10dW1T
Y3JvbGxUaW1lc3RhbXA7CisgICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsKKyAg
ICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7CisgICAgRmxvYXRTaXplIG1fbW9tZW50
dW1WZWxvY2l0eTsKKworICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgorICAgIENGVGltZUludGVy
dmFsIG1fc3RhcnRUaW1lOworICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKKyAgICBGbG9h
dFBvaW50IG1fb3JpZ09yaWdpbjsKKyAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7CisgICAg
VGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4gbV9zbmFwUnViYmVyQmFuZFRpbWVyOwor
I2VuZGlmCisgICAgYm9vbCBtX2RyYXdpbmdJbnRvTGF5ZXI7CisgICAgYm9vbCBtX2hhdmVTY3Jv
bGxlZFNpbmNlUGFnZUxvYWQ7CisgICAgSW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVj
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Q3
NDdjNzQ3MGU5ZDlmN2EzNTYxMjY4Y2NjYzNhY2E3YzkxY2MzNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMubW0KQEAgLTAsMCArMSwxMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oIgorCisjaW5j
bHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVyZUV2ZW50LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgor
I2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIK
KyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgiCisjaW5jbHVkZSAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworI2lm
ICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fMTBfNikgfHwgTUFDX09TX1hfVkVSU0lPTl9NQVhf
QUxMT1dFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfNgorQHByb3RvY29sIE5TQW5pbWF0aW9uRGVs
ZWdhdGUKK0BlbmQKKworQGludGVyZmFjZSBOU1Byb2Nlc3NJbmZvIChOU09iamVjdCkKKy0gKE5T
VGltZUludGVydmFsKXN5c3RlbVVwdGltZTsKK0BlbmQKKyNlbmRpZgorCitAaW50ZXJmYWNlIE5T
T2JqZWN0IChTY3JvbGxBbmltYXRpb25IZWxwZXJEZXRhaWxzKQorLSAoaWQpaW5pdFdpdGhEZWxl
Z2F0ZTooaWQpZGVsZWdhdGU7CistICh2b2lkKV9zdG9wUnVuOworLSAoQk9PTClfaXNBbmltYXRp
bmc7CistIChOU1BvaW50KXRhcmdldE9yaWdpbjsKK0BlbmQKKworQGludGVyZmFjZSBTY3JvbGxB
bmltYXRpb25IZWxwZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7CisgICAgV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxB
bmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0
b3I7CitAZW5kCisKK3N0YXRpYyBOU1NpemUgYWJzKE5TU2l6ZSBzaXplKQoreworICAgIE5TU2l6
ZSBmaW5hbFNpemUgPSBzaXplOworICAgIGlmIChmaW5hbFNpemUud2lkdGggPCAwKQorICAgICAg
ICBmaW5hbFNpemUud2lkdGggPSAtZmluYWxTaXplLndpZHRoOworICAgIGlmIChmaW5hbFNpemUu
aGVpZ2h0IDwgMCkKKyAgICAgICAgZmluYWxTaXplLmhlaWdodCA9IC1maW5hbFNpemUuaGVpZ2h0
OworICAgIHJldHVybiBmaW5hbFNpemU7ICAgIAorfQorCitAaW1wbGVtZW50YXRpb24gU2Nyb2xs
QW5pbWF0aW9uSGVscGVyRGVsZWdhdGUKKworLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjoo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IKK3sKKyAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIHJldHVybiBzZWxmOwor
fQorCistICh2b2lkKXNjcm9sbEFuaW1hdG9yRGVzdHJveWVkCit7CisgICAgX2FuaW1hdG9yID0g
MDsKK30KKworLSAoTlNSZWN0KWJvdW5kcworeworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAg
ICByZXR1cm4gTlNaZXJvUmVjdDsKKworICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgY3VycmVudFBv
c2l0aW9uID0gX2FuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKTsKKyAgICByZXR1cm4gTlNNYWtl
UmVjdChjdXJyZW50UG9zaXRpb24ueCgpLCBjdXJyZW50UG9zaXRpb24ueSgpLCAwLCAwKTsKK30K
KworLSAodm9pZClfaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludDooTlNQb2ludCluZXdQb3NpdGlvbgor
eworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisgICAgX2FuaW1hdG9yLT5p
bW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld1Bvc2l0aW9uKTsKK30KKworLSAoTlNQb2ludClfcGl4
ZWxBbGlnblByb3Bvc2VkU2Nyb2xsUG9zaXRpb246KE5TUG9pbnQpbmV3T3JpZ2luCit7CisgICAg
cmV0dXJuIG5ld09yaWdpbjsKK30KKworLSAoTlNTaXplKWNvbnZlcnRTaXplVG9CYXNlOihOU1Np
emUpc2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6ZSk7Cit9CisKKy0gKE5TU2l6ZSljb252ZXJ0
U2l6ZUZyb21CYXNlOihOU1NpemUpc2l6ZQoreworICAgIHJldHVybiBhYnMoc2l6ZSk7Cit9CisK
Ky0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFja2luZzooTlNTaXplKXNpemUKK3sKKyAgICByZXR1
cm4gYWJzKHNpemUpOworfQorCistIChOU1NpemUpY29udmVydFNpemVGcm9tQmFja2luZzooTlNT
aXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChpZClzdXBlcnZpZXcK
K3sKKyAgICByZXR1cm4gbmlsOworfQorCistIChpZClkb2N1bWVudFZpZXcKK3sKKyAgICByZXR1
cm4gbmlsOworfQorCistIChpZCl3aW5kb3cKK3sKKyAgICByZXR1cm4gbmlsOworfQorCistICh2
b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlwcworeworfQorCitAZW5kCisKKyNpZiBVU0Uo
V0tfU0NST0xMQkFSX1BBSU5URVIpCisKK0BpbnRlcmZhY2UgU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0Cit7CisgICAgV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYyogX2FuaW1hdG9yOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjoo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlCisK
Ky0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAg
ICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgX2FuaW1hdG9yID0g
c2Nyb2xsQW5pbWF0b3I7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpc2Nyb2xsQW5p
bWF0b3JEZXN0cm95ZWQKK3sKKyAgICBfYW5pbWF0b3IgPSAwOworfQorCistIChOU1JlY3QpY29u
dGVudEFyZWFSZWN0Rm9yU2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIKK3sKKyAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBpZiAoIV9hbmltYXRvcikKKyAg
ICAgICAgcmV0dXJuIE5TWmVyb1JlY3Q7CisKKyAgICBXZWJDb3JlOjpJbnRTaXplIGNvbnRlbnRz
U2l6ZSA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y29udGVudHNTaXplKCk7CisgICAg
cmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwgY29udGVudHNTaXplLndpZHRoKCksIGNvbnRlbnRzU2l6
ZS5oZWlnaHQoKSk7Cit9CisKKy0gKEJPT0wpaW5MaXZlUmVzaXplRm9yU2Nyb2xsZXJJbXBQYWly
OihpZClzY3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWly
KTsKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuIE5POworCisgICAgcmV0dXJu
IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCk7Cit9CisKKy0gKE5T
UG9pbnQpbW91c2VMb2NhdGlvbkluQ29udGVudEFyZWFGb3JTY3JvbGxlckltcFBhaXI6KGlkKXNj
cm9sbGVySW1wUGFpcgoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOworICAg
IGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICByZXR1
cm4gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOwor
fQorCistIChOU1BvaW50KXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIGNvbnZl
cnRDb250ZW50UG9pbnQ6KE5TUG9pbnQpcG9pbnRJbkNvbnRlbnRBcmVhIHRvU2Nyb2xsZXJJbXA6
KGlkKXNjcm9sbGVySW1wCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7Cisg
ICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsKKworICAgIFdl
YkNvcmU6OlNjcm9sbGJhciogc2Nyb2xsYmFyID0gMDsKKyAgICBpZiAod2tTY3JvbGxiYXJQYWlu
dGVySXNIb3Jpem9udGFsKChXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJJbXApKQorICAg
ICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmhvcml6b250YWxT
Y3JvbGxiYXIoKTsKKyAgICBlbHNlIAorICAgICAgICBzY3JvbGxiYXIgPSBfYW5pbWF0b3ItPnNj
cm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisKKyAgICAvLyBJdCBpcyBwb3Nz
aWJsZSB0byBoYXZlIGEgbnVsbCBzY3JvbGxiYXIgaGVyZSBzaW5jZSBpdCBpcyBwb3NzaWJsZSBm
b3IgdGhpcyBkZWxlZ2F0ZQorICAgIC8vIG1ldGhvZCB0byBiZSBjYWxsZWQgYmV0d2VlbiB0aGUg
bW9tZW50IHdoZW4gYSBzY3JvbGxiYXIgaGFzIGJlZW4gc2V0IHRvIDAgYW5kIHRoZQorICAgIC8v
IG1vbWVudCB3aGVuIGl0cyBkZXN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZC4gV2Ugc2hvdWxkIHBy
b2JhYmx5IGRlLWNvdXBsZSBzb21lCisgICAgLy8gb2YgdGhlIGNsZWFuLXVwIHdvcmsgaW4gU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5yZWdpc3RlclNjcm9sbGJhcigpIHRvIGF2b2lkIHRo
aXMKKyAgICAvLyBpc3N1ZS4KKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkludFBvaW50KCk7CisgICAgCisgICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udmVydEZy
b21Db250YWluaW5nVmlldyhXZWJDb3JlOjpJbnRQb2ludChwb2ludEluQ29udGVudEFyZWEpKTsK
K30KKworLSAodm9pZClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBzZXRDb250
ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBVTlVTRURfUEFS
QU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAgICBVTlVTRURfUEFSQU0ocmVjdCk7Cit9CisKKy0gKHZv
aWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgdXBkYXRlU2Nyb2xsZXJTdHls
ZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTooTlNTY3JvbGxlclN0eWxlKW5ld1JlY29t
bWVuZGVkU2Nyb2xsZXJTdHlsZQoreworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1
cm47CisKKyAgICBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIHBhaW50ZXJDb250cm9s
bGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpc2Nyb2xsZXJJbXBQYWlyOwor
ICAgIFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIG1hY1RoZW1lID0gKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqKVdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpu
YXRpdmVUaGVtZSgpOworCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG9sZFZlcnRpY2FsUGFp
bnRlciA9IHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29udHJvbGxlcihwYWludGVyQ29u
dHJvbGxlcik7CisgICAgaWYgKG9sZFZlcnRpY2FsUGFpbnRlcikgeworICAgICAgICBXZWJDb3Jl
OjpTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJl
YSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgICAgICBXS1Njcm9sbGJhclBhaW50ZXJSZWYg
bmV3VmVydGljYWxQYWludGVyID0gd2tNYWtlU2Nyb2xsYmFyUmVwbGFjZW1lbnRQYWludGVyKG9s
ZFZlcnRpY2FsUGFpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdSZWNvbW1l
bmRlZFNjcm9sbGVyU3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxT
Y3JvbGxiYXItPmNvbnRyb2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UpOworICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcih2ZXJ0aWNh
bFNjcm9sbGJhciwgbmV3VmVydGljYWxQYWludGVyKTsKKyAgICAgICAgd2tTZXRQYWludGVyRm9y
UGFpbnRlckNvbnRyb2xsZXIocGFpbnRlckNvbnRyb2xsZXIsIG5ld1ZlcnRpY2FsUGFpbnRlciwg
ZmFsc2UpOworCisgICAgICAgIC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZl
IGRpZmZlcmVudCB0aGlja25lc3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAgICAv
LyBmcmFtZVJlY3QgdG8gdGhlIG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93
IHdpbGwgZW5zdXJlIHRoZSBwb3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9w
ZXJseSB1cGRhdGVkLgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJh
clRoaWNrbmVzcyh2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisgICAgICAgIHZl
cnRpY2FsU2Nyb2xsYmFyLT5zZXRGcmFtZVJlY3QoV2ViQ29yZTo6SW50UmVjdCgwLCAwLCB0aGlj
a25lc3MsIHRoaWNrbmVzcykpOworICAgIH0KKworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBv
bGRIb3Jpem9udGFsUGFpbnRlciA9IHdrSG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJGb3JDb250
cm9sbGVyKHBhaW50ZXJDb250cm9sbGVyKTsKKyAgICBpZiAob2xkSG9yaXpvbnRhbFBhaW50ZXIp
IHsKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gX2Fu
aW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAg
IFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdIb3Jpem9udGFsUGFpbnRlciA9IHdrTWFrZVNjcm9s
bGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRIb3Jpem9udGFsUGFpbnRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPmNvbnRyb2xTaXplKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKKyAgICAgICAgbWFjVGhlbWUt
PnNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIoaG9yaXpvbnRhbFNjcm9sbGJhciwgbmV3SG9yaXpv
bnRhbFBhaW50ZXIpOworICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcihw
YWludGVyQ29udHJvbGxlciwgbmV3SG9yaXpvbnRhbFBhaW50ZXIsIHRydWUpOworCisgICAgICAg
IC8vIFRoZSBkaWZmZXJlbnQgc2Nyb2xsYmFyIHN0eWxlcyBoYXZlIGRpZmZlcmVudCB0aGlja25l
c3Nlcywgc28gd2UgbXVzdCByZS1zZXQgdGhlIAorICAgICAgICAvLyBmcmFtZVJlY3QgdG8gdGhl
IG5ldyB0aGlja25lc3MsIGFuZCB0aGUgcmUtbGF5b3V0IGJlbG93IHdpbGwgZW5zdXJlIHRoZSBw
b3NpdGlvbgorICAgICAgICAvLyBhbmQgbGVuZ3RoIGFyZSBwcm9wZXJseSB1cGRhdGVkLgorICAg
ICAgICBpbnQgdGhpY2tuZXNzID0gbWFjVGhlbWUtPnNjcm9sbGJhclRoaWNrbmVzcyhob3Jpem9u
dGFsU2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpKTsKKyAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJh
ci0+c2V0RnJhbWVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwgMCwgdGhpY2tuZXNzLCB0aGlja25l
c3MpKTsKKyAgICB9CisKKyAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUo
cGFpbnRlckNvbnRyb2xsZXIsIG5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSk7CisKKyAgICAv
LyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMgYWZmZWN0IGxheW91dCwgc28gd2UgbXVz
dCByZS1sYXlvdXQgZXZlcnl0aGluZy4KKyAgICBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCkt
PnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgU2Nyb2xs
YmFyUGFydEFuaW1hdGlvbiA6IE5TQW5pbWF0aW9uCit7CisgICAgUmV0YWluUHRyPFdLU2Nyb2xs
YmFyUGFpbnRlclJlZj4gX3Njcm9sbGVyUGFpbnRlcjsKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXJQ
YXJ0IF9wYXJ0OworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmlt
YXRvcjsKKyAgICBDR0Zsb2F0IF9pbml0aWFsQWxwaGE7CisgICAgQ0dGbG9hdCBfbmV3QWxwaGE7
Cit9CistIChpZClpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZilzY3JvbGxlclBhaW50ZXIgcGFydDooV2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9s
bEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmlt
YXRvciBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYXJ0QW5p
bWF0aW9uCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsYmFyUGFpbnRlcjooV0tTY3JvbGxiYXJQYWlu
dGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQYXJ0KXBhcnQg
c2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9s
bEFuaW1hdG9yIGFuaW1hdGVBbHBoYVRvOihDR0Zsb2F0KW5ld0FscGhhIGR1cmF0aW9uOihOU1Rp
bWVJbnRlcnZhbClkdXJhdGlvbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhEdXJhdGlv
bjpkdXJhdGlvbiBhbmltYXRpb25DdXJ2ZTpOU0FuaW1hdGlvbkVhc2VJbk91dF07CisgICAgaWYg
KCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9zY3JvbGxlclBhaW50ZXIg
PSBzY3JvbGxlclBhaW50ZXI7CisgICAgX3BhcnQgPSBwYXJ0OworICAgIF9hbmltYXRvciA9IHNj
cm9sbEFuaW1hdG9yOworICAgIF9pbml0aWFsQWxwaGEgPSBfcGFydCA9PSBXZWJDb3JlOjpUaHVt
YlBhcnQgPyB3a1Njcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoX3Njcm9sbGVyUGFpbnRlci5nZXQo
KSkgOiB3a1Njcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkp
OworICAgIF9uZXdBbHBoYSA9IG5ld0FscGhhOworICAgIAorICAgIHJldHVybiBzZWxmOyAgICAK
K30KKworLSAodm9pZClzZXRDdXJyZW50UHJvZ3Jlc3M6KE5TQW5pbWF0aW9uUHJvZ3Jlc3MpcHJv
Z3Jlc3MKK3sKKyAgICBbc3VwZXIgc2V0Q3VycmVudFByb2dyZXNzOnByb2dyZXNzXTsKKworICAg
IGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0Zsb2F0IGN1cnJlbnRB
bHBoYTsKKyAgICBpZiAoX2luaXRpYWxBbHBoYSA+IF9uZXdBbHBoYSkKKyAgICAgICAgY3VycmVu
dEFscGhhID0gMSAtIHByb2dyZXNzOworICAgIGVsc2UKKyAgICAgICAgY3VycmVudEFscGhhID0g
cHJvZ3Jlc3M7CisgICAgCisgICAgaWYgKF9wYXJ0ID09IFdlYkNvcmU6OlRodW1iUGFydCkKKyAg
ICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0
KCksIGN1cnJlbnRBbHBoYSk7CisgICAgZWxzZQorICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50
ZXJUcmFja0FscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCksIGN1cnJlbnRBbHBoYSk7CisKKyAg
ICAvLyBJbnZhbGlkYXRlIHRoZSBzY3JvbGxiYXJzIHNvIHRoYXQgdGhleSBwYWludCB0aGUgYW5p
bWF0aW9uCisgICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBf
YW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAg
IHZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlUmVjdChXZWJDb3JlOjpJbnRSZWN0KDAsIDAs
IHZlcnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpLCB2ZXJ0aWNhbFNjcm9sbGJhci0+aGVpZ2h0KCkp
KTsKKyAgICBpZiAoV2ViQ29yZTo6U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gX2Fu
aW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAg
IGhvcml6b250YWxTY3JvbGxiYXItPmludmFsaWRhdGVSZWN0KFdlYkNvcmU6OkludFJlY3QoMCwg
MCwgaG9yaXpvbnRhbFNjcm9sbGJhci0+d2lkdGgoKSwgaG9yaXpvbnRhbFNjcm9sbGJhci0+aGVp
Z2h0KCkpKTsKK30KKworLSAodm9pZClzY3JvbGxBbmltYXRvckRlc3Ryb3llZAoreworICAgIFtz
ZWxmIHN0b3BBbmltYXRpb25dOworICAgIF9hbmltYXRvciA9IDA7Cit9CisKK0BlbmQKKworQGlu
dGVyZmFjZSBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgOiBOU09iamVjdDxOU0FuaW1hdGlvbkRl
bGVnYXRlPgoreworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqIF9hbmlt
YXRvcjsKKworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfdmVydGljYWxL
bm9iQW5pbWF0aW9uOworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfaG9y
aXpvbnRhbEtub2JBbmltYXRpb247CisKKyAgICBSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1h
dGlvbj4gX3ZlcnRpY2FsVHJhY2tBbmltYXRpb247CisgICAgUmV0YWluUHRyPFNjcm9sbGJhclBh
cnRBbmltYXRpb24+IF9ob3Jpem9udGFsVHJhY2tBbmltYXRpb247Cit9CistIChpZClpbml0V2l0
aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3Jv
bGxBbmltYXRvcjsKKy0gKHZvaWQpY2FuY2VsQW5pbWF0aW9uczsKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZQorCistIChpZClpbml0V2l0aFNjcm9sbEFu
aW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRv
cgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIAorICAgIF9hbmltYXRvciA9IHNjcm9sbEFuaW1hdG9yOworICAgIHJl
dHVybiBzZWxmOworfQorCistICh2b2lkKWNhbmNlbEFuaW1hdGlvbnMKK3sKKyAgICBbX3ZlcnRp
Y2FsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2hvcml6b250YWxL
bm9iQW5pbWF0aW9uLmdldCgpIHN0b3BBbmltYXRpb25dOworICAgIFtfdmVydGljYWxUcmFja0Fu
aW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICBbX2hvcml6b250YWxUcmFja0FuaW1h
dGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKK30KKworLSAoTlNSZWN0KWNvbnZlcnRSZWN0VG9C
YWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJlY3Q7Cit9CisKKy0gKE5TUmVj
dCljb252ZXJ0UmVjdEZyb21CYWNraW5nOihOU1JlY3QpYVJlY3QKK3sKKyAgICByZXR1cm4gYVJl
Y3Q7Cit9CisKKy0gKENBTGF5ZXIgKilsYXllcgoreworICAgIGlmICghX2FuaW1hdG9yKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIGlmICghX2FuaW1hdG9yLT5pc0RyYXdpbmdJbnRvTGF5ZXIo
KSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhdHRl
bXB0IHRvIHJldHVybiBhbiBhY3R1YWwgbGF5ZXIuCisgICAgc3RhdGljIENBTGF5ZXIgKmR1bW15
TGF5ZXIgPSBbW0NBTGF5ZXIgYWxsb2NdIGluaXRdOworICAgIHJldHVybiBkdW1teUxheWVyOwor
fQorCistICh2b2lkKXNldFVwQW5pbWF0aW9uOihSZXRhaW5QdHI8U2Nyb2xsYmFyUGFydEFuaW1h
dGlvbj4mKXNjcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOihXS1Njcm9sbGJh
clBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNvcmU6OlNjcm9sbGJhclBhcnQp
cGFydCBhbmltYXRlQWxwaGFUbzooQ0dGbG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50
ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdGhlIHBh
Z2UsIHRoZW4gdGhlIHNjcm9sbGJhcnMgbXVzdCBiZSBhbmltYXRlZCBoZXJlLiAKKyAgICAvLyBU
aGlzIG92ZXJyaWRlcyB0aGUgZWFybHkgcmV0dXJucy4KKyAgICBib29sIG11c3RBbmltYXRlID0g
X2FuaW1hdG9yLT5oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkKCk7CisKKyAgICBpZiAoX2FuaW1h
dG9yLT5zY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSAmJiAhbXVzdEFuaW1hdGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPnNob3Vs
ZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgJiYgIW11c3RBbmltYXRlKSB7CisgICAgICAgIF9h
bmltYXRvci0+c3RhcnRTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBh
bmltYXRlIG5vdywgc28gc3RvcCB0aGUgdGltZXIuCisgICAgX2FuaW1hdG9yLT5zdG9wU2Nyb2xs
YmFyUGFpbnRUaW1lcigpOworCisgICAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBhbmltYXRpbmcs
IHN0b3AKKyAgICBpZiAoc2Nyb2xsYmFyUGFydEFuaW1hdGlvbikgeworICAgICAgICBbc2Nyb2xs
YmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0aW9uXTsKKyAgICAgICAgc2Nyb2xsYmFy
UGFydEFuaW1hdGlvbiA9IG5pbDsKKyAgICB9CisKKyAgICBpZiAocGFydCA9PSBXZWJDb3JlOjpU
aHVtYlBhcnQgJiYgIXdrU2Nyb2xsYmFyUGFpbnRlcklzSG9yaXpvbnRhbChzY3JvbGxlclBhaW50
ZXIpKSB7CisgICAgICAgIGlmIChuZXdBbHBoYSA9PSAxKSB7CisgICAgICAgICAgICBJbnRSZWN0
IHRodW1iUmVjdCA9IEludFJlY3Qod2tTY3JvbGxiYXJQYWludGVyS25vYlJlY3Qoc2Nyb2xsZXJQ
YWludGVyKSk7CisgICAgICAgICAgICBfYW5pbWF0b3ItPnNldFZpc2libGVTY3JvbGxlclRodW1i
UmVjdCh0aHVtYlJlY3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIF9hbmltYXRvci0+
c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KEludFJlY3QoKSk7CisgICAgfQorCisgICAgW05T
QW5pbWF0aW9uQ29udGV4dCBiZWdpbkdyb3VwaW5nXTsKKyAgICBbW05TQW5pbWF0aW9uQ29udGV4
dCBjdXJyZW50Q29udGV4dF0gc2V0RHVyYXRpb246ZHVyYXRpb25dOworICAgIHNjcm9sbGJhclBh
cnRBbmltYXRpb24uYWRvcHROUyhbW1Njcm9sbGJhclBhcnRBbmltYXRpb24gYWxsb2NdIGluaXRX
aXRoU2Nyb2xsYmFyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQ6cGFy
dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcjpfYW5pbWF0b3IgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1h
dGVBbHBoYVRvOm5ld0FscGhhIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjpkdXJhdGlvbl0pOworICAg
IFtzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uLmdldCgpIHNldEFuaW1hdGlvbkJsb2NraW5nTW9kZTpO
U0FuaW1hdGlvbk5vbmJsb2NraW5nXTsKKyAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQo
KSBzdGFydEFuaW1hdGlvbl07CisgICAgW05TQW5pbWF0aW9uQ29udGV4dCBlbmRHcm91cGluZ107
Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wIGFuaW1hdGVLbm9iQWxw
aGFUbzooQ0dGbG9hdCluZXdLbm9iQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0
aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIFdLU2Ny
b2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVm
KXNjcm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Ny
b2xsZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxL
bm9iQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3Jl
OjpUaHVtYlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9u
XTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNhbEtub2JB
bmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0OldlYkNvcmU6OlRo
dW1iUGFydCBhbmltYXRlQWxwaGFUbzpuZXdLbm9iQWxwaGEgZHVyYXRpb246ZHVyYXRpb25dOwor
fQorCistICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBhbmltYXRlVHJhY2tBbHBo
YVRvOihDR0Zsb2F0KW5ld1RyYWNrQWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0
aW9uCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIFdLU2Ny
b2xsYmFyUGFpbnRlclJlZiBzY3JvbGxlclBhaW50ZXIgPSAoV0tTY3JvbGxiYXJQYWludGVyUmVm
KXNjcm9sbGVySW1wOworICAgIGlmICh3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Ny
b2xsZXJQYWludGVyKSkKKyAgICAgICAgW3NlbGYgc2V0VXBBbmltYXRpb246X2hvcml6b250YWxU
cmFja0FuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2ViQ29y
ZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0aW9uOmR1
cmF0aW9uXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl92ZXJ0aWNh
bFRyYWNrQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJD
b3JlOjpCYWNrVHJhY2tQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld1RyYWNrQWxwaGEgZHVyYXRpb246
ZHVyYXRpb25dOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBvdmVy
bGF5U2Nyb2xsZXJTdGF0ZUNoYW5nZWRUbzooTlNVSW50ZWdlciluZXdPdmVybGF5U2Nyb2xsZXJT
dGF0ZQoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcCk7CisgICAgVU5VU0VEX1BBUkFN
KG5ld092ZXJsYXlTY3JvbGxlclN0YXRlKTsKK30KKworLSAodm9pZClzY3JvbGxBbmltYXRvckRl
c3Ryb3llZAoreworICAgIF9hbmltYXRvciA9IDA7CisgICAgW192ZXJ0aWNhbEtub2JBbmltYXRp
b24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFtfaG9yaXpvbnRhbEtub2JB
bmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFtfdmVydGljYWxU
cmFja0FuaW1hdGlvbi5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07CisgICAgW19ob3Jp
em9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworfQor
CitAZW5kCisKKyNlbmRpZiAvLyBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6
OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKHNjcm9sbGFibGVBcmVhKSk7Cit9
CisKK1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMo
U2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorICAgIDogU2Nyb2xsQW5pbWF0b3Ioc2Ny
b2xsYWJsZUFyZWEpCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgICwgbV9pbml0
aWFsU2Nyb2xsYmFyUGFpbnRUaW1lcih0aGlzLCAmU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkKKyNlbmRpZgorI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKKyAgICAsIG1faW5TY3JvbGxHZXN0dXJlKGZhbHNlKQorICAgICwgbV9tb21l
bnR1bVNjcm9sbEluUHJvZ3Jlc3MoZmFsc2UpCisgICAgLCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xs
cyhmYWxzZSkKKyAgICAsIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wKDApCisgICAgLCBt
X3N0YXJ0VGltZSgwKQorICAgICwgbV9zbmFwUnViYmVyQmFuZFRpbWVyKHRoaXMsICZTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpCisjZW5kaWYKKyAg
ICAsIG1fZHJhd2luZ0ludG9MYXllcihmYWxzZSkKKyAgICAsIG1faGF2ZVNjcm9sbGVkU2luY2VQ
YWdlTG9hZChmYWxzZSkKK3sKKyAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmFk
b3B0TlMoW1tTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3Jv
bGxBbmltYXRvcjp0aGlzXSk7CisgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuYWRvcHROUyhb
W05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5p
dFdpdGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7CisK
KyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVn
YXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKKyAgICBtX3Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyID0gd2tNYWtlU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIobV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpKTsKKyAgICBtX3Njcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9j
XSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKKyNlbmRpZgorfQorCitTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjp+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYygpCit7CisjaWYgVVNF
KFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFsoaWQpbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAgIFttX3Nj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07Cisg
ICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCkgc2Nyb2xsQW5pbWF0b3JE
ZXN0cm95ZWRdOworI2VuZGlmCit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBtX2hh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworCisjaWYgIUVOQUJMRShTTU9PVEhfU0NS
T0xMSU5HKQorICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBn
cmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZW5kaWYKKworICAgIGlmICghW1tOU1Vz
ZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkFwcGxlU2Nyb2xs
QW5pbWF0aW9uRW5hYmxlZCJdKQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9s
bChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworCisgICAgaWYg
KGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5UGl4ZWwpCisgICAgICAgIHJldHVybiBTY3JvbGxBbmlt
YXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7
CisKKyAgICBmbG9hdCBjdXJyZW50UG9zID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IG1fY3VycmVudFBvc1ggOiBtX2N1cnJlbnRQb3NZOworICAgIGZsb2F0IG5ld1BvcyA9
IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbjxmbG9hdD4oY3VycmVudFBvcyArIChzdGVwICogbXVs
dGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxTaXpl
KG9yaWVudGF0aW9uKSkpLCAwKTsKKyAgICBpZiAoY3VycmVudFBvcyA9PSBuZXdQb3MpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIE5TUG9pbnQgbmV3UG9pbnQ7CisgICAgaWYgKFttX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfaXNBbmltYXRpbmddKSB7CisgICAgICAgIE5TUG9p
bnQgdGFyZ2V0T3JpZ2luID0gW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIHRhcmdldE9y
aWdpbl07CisgICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgdGFyZ2V0T3JpZ2luLnkpIDogTlNNYWtlUG9pbnQo
dGFyZ2V0T3JpZ2luLngsIG5ld1Bvcyk7CisgICAgfSBlbHNlCisgICAgICAgIG5ld1BvaW50ID0g
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1Bvcywg
bV9jdXJyZW50UG9zWSkgOiBOU01ha2VQb2ludChtX2N1cnJlbnRQb3NYLCBuZXdQb3MpOworCisg
ICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIHNjcm9sbFRvUG9pbnQ6bmV3UG9pbnRd
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQp
Cit7CisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9zdG9wUnVuXTsKKyAgICBp
bW1lZGlhdGVTY3JvbGxUb1BvaW50KG9mZnNldCk7Cit9CisKK2Zsb2F0IFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0IHBvc2l0
aW9uKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgcmV0
dXJuIG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3NpdGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29u
dGVudHNTaXplKCkud2lkdGgoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVXaWR0aCgpKSwg
MCk7Cit9CisKK2Zsb2F0IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFkanVzdFNjcm9sbFlQ
b3NpdGlvbklmTmVjZXNzYXJ5KGZsb2F0IHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICghbV9z
Y3JvbGxhYmxlQXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKKyAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uOworCisgICAgcmV0dXJuIG1heDxmbG9hdD4obWluPGZsb2F0Pihw
b3NpdGlvbiwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBtX3Nj
cm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKK30KKworRmxvYXRQb2ludCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KGNv
bnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKSBjb25zdAoreworICAgIGlmICghbV9zY3JvbGxhYmxl
QXJlYS0+Y29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoKSkKKyAgICAgICAgcmV0dXJu
IHBvc2l0aW9uOworCisgICAgZmxvYXQgbmV3WCA9IG1heDxmbG9hdD4obWluPGZsb2F0Pihwb3Np
dGlvbi54KCksIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndpZHRoKCkgLSBtX3Nj
cm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOworICAgIGZsb2F0IG5ld1kgPSBtYXg8
ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueSgpLCBtX3Njcm9sbGFibGVBcmVhLT5jb250ZW50
c1NpemUoKS5oZWlnaHQoKSAtIG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVIZWlnaHQoKSksIDAp
OworCisgICAgcmV0dXJuIEZsb2F0UG9pbnQobmV3WCwgbmV3WSk7Cit9CisKK3ZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBv
aW50JiBuZXdQb3NpdGlvbikKK3sKKyAgICBGbG9hdFBvaW50IGFkanVzdGVkUG9zaXRpb24gPSBh
ZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KG5ld1Bvc2l0aW9uKTsKKyAKKyAgICBpZiAo
YWRqdXN0ZWRQb3NpdGlvbi54KCkgPT0gbV9jdXJyZW50UG9zWCAmJiBhZGp1c3RlZFBvc2l0aW9u
LnkoKSA9PSBtX2N1cnJlbnRQb3NZKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jdXJy
ZW50UG9zWCA9IGFkanVzdGVkUG9zaXRpb24ueCgpOworICAgIG1fY3VycmVudFBvc1kgPSBhZGp1
c3RlZFBvc2l0aW9uLnkoKTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWChmbG9h
dCBkZWx0YVgpCit7CisgICAgZmxvYXQgbmV3UG9zWCA9IGFkanVzdFNjcm9sbFhQb3NpdGlvbklm
TmVjZXNzYXJ5KG1fY3VycmVudFBvc1ggKyBkZWx0YVgpOworICAgIAorICAgIGlmIChuZXdQb3NY
ID09IG1fY3VycmVudFBvc1gpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRQ
b3NYID0gbmV3UG9zWDsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBT
Y3JvbGxBbmltYXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBk
ZWx0YVkpCit7CisgICAgZmxvYXQgbmV3UG9zWSA9IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVj
ZXNzYXJ5KG1fY3VycmVudFBvc1kgKyBkZWx0YVkpOworICAgIAorICAgIGlmIChuZXdQb3NZID09
IG1fY3VycmVudFBvc1kpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRQb3NZ
ID0gbmV3UG9zWTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpub3RpdHlQb3NpdGlvbkNoYW5nZWQoKQoreworI2lmIFVT
RShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhU2Nyb2xsZWQobV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKKyAgICBTY3JvbGxBbmltYXRv
cjo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAoreworI2lmIFVTRShXS19TQ1JP
TExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhV2lsbFBhaW50KG1fc2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAoreworI2lmIFVTRShX
S19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a01vdXNlRW50ZXJlZENvbnRlbnRBcmVhKG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpIGNvbnN0Cit7Cisj
aWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrTW91c2VFeGl0ZWRDb250ZW50QXJl
YShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lk
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29u
c3QKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tNb3VzZU1vdmVkSW5D
b250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgor
fQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxTdGFydExpdmVSZXNpemUo
KQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a1dpbGxTdGFydExpdmVS
ZXNpemUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwor
dm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50c1Jlc2l6ZWQoKSBjb25zdAor
eworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0NvbnRlbnRBcmVhUmVzaXpl
ZChtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lk
IFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxFbmRMaXZlUmVzaXplKCkKK3sKKyNpZiBV
U0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tXaWxsRW5kTGl2ZVJlc2l6ZShtX3Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0Cit7CisjaWYgVVNF
KFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHdrQ29udGVudEFyZWFEaWRTaG93KG1fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRIaWRlKCkgY29uc3QKK3sKKyNpZiBVU0Uo
V0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgd2tDb250ZW50QXJlYURpZEhpZGUobV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpkaWRCZWdpblNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworI2lmIFVT
RShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0RpZEJlZ2luU2Nyb2xsR2VzdHVyZShtX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNjcm9sbEdlc3R1cmUoKSBjb25zdAoreworI2lm
IFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICB3a0RpZEVuZFNjcm9sbEdlc3R1cmUobV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisjZW5kaWYKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikKK3sKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisgICAgV0tTY3Jv
bGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjKj4oV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkp
LT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgd2tTY3JvbGxiYXJQYWludGVy
U2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkpOwor
ICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCksIHBhaW50ZXIsIGZhbHNlKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEo
KS0+aW5MaXZlUmVzaXplKCkpCisgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBo
YShwYWludGVyLCAxKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7CisjZW5k
aWYKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsUmVtb3ZlVmVydGlj
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisjaWYgVVNFKFdLX1NDUk9MTEJB
Ul9QQUlOVEVSKQorICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyo+KFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpKS0+cGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwor
ICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50ZXIsIG5pbCk7CisgICAgd2tT
ZXRQYWludGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSwgbmlsLCBmYWxzZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIp
OworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQWRkSG9y
aXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyNpZiBVU0UoV0tfU0NS
T0xMQkFSX1BBSU5URVIpCisgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIgPSBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKj4oV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkpLT5wYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJh
cik7CisgICAgd2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUuZ2V0KCkpOworICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250
cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIHBhaW50ZXIsIHRydWUp
OworICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgd2tT
ZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHBhaW50ZXIsIDEpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2Nyb2xsYmFyKTsKKyNlbmRpZgorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQoreworI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKyAgICBXS1Njcm9sbGJhclBh
aW50ZXJSZWYgcGFpbnRlciA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hy
b21pdW1NYWMqPihXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKSktPnBhaW50
ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxl
Z2F0ZShwYWludGVyLCBuaWwpOworICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVy
KG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5pbCwgdHJ1ZSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCit9CisKK3ZvaWQgU2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYzo6Y2FuY2VsQW5pbWF0aW9ucygpCit7CisgICAgbV9oYXZlU2Nyb2xs
ZWRTaW5jZVBhZ2VMb2FkID0gZmFsc2U7CisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIp
CisgICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQorICAgICAgICBzdG9wU2Ny
b2xsYmFyUGFpbnRUaW1lcigpOworICAgIFttX3Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQo
KSBjYW5jZWxBbmltYXRpb25zXTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorCitzdGF0aWMgY29uc3QgZmxvYXQgc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCA9
IDAuMTBmOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRTdGlmZm5lc3MgPSAyMDsKK3N0
YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7
CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3Jl
U3RyZXRjaCA9IDEwOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRBbXBsaXR1ZGUgPSAw
LjMxZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kUGVyaW9kID0gMS42ZjsKKworc3Rh
dGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShmbG9hdCBpbml0aWFsUG9zaXRpb24s
IGZsb2F0IGluaXRpYWxWZWxvY2l0eSwgZmxvYXQgZWxhcHNlZFRpbWUpCit7CisgICAgZmxvYXQg
YW1wbGl0dWRlID0gcnViYmVyYmFuZEFtcGxpdHVkZTsKKyAgICBmbG9hdCBwZXJpb2QgPSBydWJi
ZXJiYW5kUGVyaW9kOworICAgIGZsb2F0IGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9yID0gZXhwZigo
LWVsYXBzZWRUaW1lICogcnViYmVyYmFuZFN0aWZmbmVzcykgLyBwZXJpb2QpOworICAgICAgICAg
ICAgIAorICAgIHJldHVybiAoaW5pdGlhbFBvc2l0aW9uICsgKC1pbml0aWFsVmVsb2NpdHkgKiBl
bGFwc2VkVGltZSAqIGFtcGxpdHVkZSkpICogY3JpdGljYWxEYW1wZW5pbmdGYWN0b3I7Cit9CisK
K3N0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCit7
CisgICAgZmxvYXQgc3RpZmZuZXNzID0gc3RkOjptYXgocnViYmVyYmFuZFN0aWZmbmVzcywgMS4w
Zik7CisgICAgcmV0dXJuIGRlbHRhIC8gc3RpZmZuZXNzOworfQorCitzdGF0aWMgZmxvYXQgcmVi
b3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQoreworICAgIHJldHVybiBkZWx0
YSAqIHJ1YmJlcmJhbmRTdGlmZm5lc3M7Cit9CisKK3N0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11
bHRpcGxpZXIoKQoreworICAgIHN0YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7CisgICAgaWYg
KG11bHRpcGxpZXIgPCAwKSB7CisgICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hlZWxNdWx0aXBs
aWVyIl07CisgICAgICAgIGlmIChtdWx0aXBsaWVyIDw9IDApCisgICAgICAgICAgICBtdWx0aXBs
aWVyID0gMTsKKyAgICB9CisgICAgcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK3ZvaWQgU2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQm
IHdoZWVsRXZlbnQpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gdHJ1ZTsK
KworICAgIGlmICghd2hlZWxFdmVudC5oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzKCkpIHsKKyAg
ICAgICAgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hhdCByb3Vu
ZGFib3V0IGhhY2sgdG8gYWxsb3cgZm9yd2FyZGluZyB3aGVlbCBldmVudHMKKyAgICAvLyB1cCB0
byB0aGUgcGFyZW50IHNjcm9sbGFibGUgYXJlYS4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBm
YWN0IHRoYXQKKyAgICAvLyB0aGUgYmFzZSBjbGFzcyBpbXBsZW1lbmF0YXRpb24gb2YgaGFuZGxl
V2hlZWxFdmVudCB3aWxsIG5vdCBhY2NlcHQgdGhlCisgICAgLy8gd2hlZWwgZXZlbnQgaWYgdGhl
cmUgaXMgbm93aGVyZSB0byBzY3JvbGwuCisgICAgaWYgKGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFZ
KCkpID49IGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFYKCkpKSB7CisgICAgICAgIGlmICghYWxsb3dz
VmVydGljYWxTdHJldGNoaW5nKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbEFuaW1hdG9yOjpoYW5k
bGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygp
KSB7CisgICAgICAgICAgICBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2
ZW50KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHdoZWVs
RXZlbnQuYWNjZXB0KCk7CisKKyAgICBib29sIGlzTW9tZXR1bVNjcm9sbEV2ZW50ID0gKHdoZWVs
RXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSk7Cisg
ICAgaWYgKG1faWdub3JlTW9tZW50dW1TY3JvbGxzICYmIChpc01vbWV0dW1TY3JvbGxFdmVudCB8
fCBtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkpIHsKKyAgICAgICAgaWYgKHdoZWVs
RXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQpCisg
ICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgc21vb3RoU2Nyb2xsV2l0aEV2ZW50KHdoZWVsRXZlbnQpOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZUdlc3R1cmVFdmVudChjb25z
dCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQoreworICAgIGlmIChnZXN0dXJl
RXZlbnQudHlwZSgpID09IFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxCZWdpblR5cGUpCisg
ICAgICAgIGJlZ2luU2Nyb2xsR2VzdHVyZSgpOworICAgIGVsc2UKKyAgICAgICAgZW5kU2Nyb2xs
R2VzdHVyZSgpOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnBpbm5lZElu
RGlyZWN0aW9uKGZsb2F0IGRlbHRhWCwgZmxvYXQgZGVsdGFZKQoreworICAgIEZsb2F0U2l6ZSBs
aW1pdERlbHRhOworICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKKyAg
ICAgICAgaWYgKGRlbHRhWSA8IDApIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8g
c2Nyb2xsIHVwLiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0b3AKKyAgICAg
ICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250
ZW50UmVjdCgpLnkoKSArICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xs
IGRvd24uICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRvbQorICAgICAg
ICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXpl
KCkuaGVpZ2h0KCkgLSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4
WSgpICsgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKGRlbHRhWCAhPSAwKSB7CisgICAgICAgIGlmIChkZWx0YVggPCAwKSB7
CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJl
IHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBsZWZ0CisgICAgICAgICAgICBsaW1pdERlbHRhLnNl
dFdpZHRoKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLngoKSArIG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpLngoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3ZSBh
cmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lk
dGgobV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIChtX3Njcm9sbGFi
bGVBcmVhLT52aXNpYmxlQ29udGVudFJlY3QoKS5tYXhYKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5z
Y3JvbGxPcmlnaW4oKS54KCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoKGRl
bHRhWCAhPSAwIHx8IGRlbHRhWSAhPSAwKSAmJiAobGltaXREZWx0YS53aWR0aCgpIDwgMSAmJiBs
aW1pdERlbHRhLmhlaWdodCgpIDwgMSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphbGxvd3NWZXJ0
aWNhbFN0cmV0Y2hpbmcoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+
dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlB
dXRvbWF0aWM6IHsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVB
cmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVy
ID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgcmV0dXJu
ICgoKHZTY3JvbGxlciAmJiB2U2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCFoU2Nyb2xsZXIgfHwg
IWhTY3JvbGxlci0+ZW5hYmxlZCgpKSkpOworICAgIH0KKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNp
dHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5
QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAg
ICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKKyAgICAgICAgU2Nyb2xsYmFyKiBo
U2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAg
ICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3Jv
bGxiYXIoKTsKKyAgICAgICAgcmV0dXJuICgoKGhTY3JvbGxlciAmJiBoU2Nyb2xsZXItPmVuYWJs
ZWQoKSkgfHwgKCF2U2Nyb2xsZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKSkpOworICAgIH0K
KyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudChQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRTaW5j
ZVBhZ2VMb2FkID0gdHJ1ZTsKKworICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3JvbGxE
ZWx0YS53aWR0aCgpOworICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5o
ZWlnaHQoKTsKKworICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBk
ZWNpZGUgdG8gcmVtb3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBv
dmVyZmxvdy4KKyAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKworICAg
IGZsb2F0IGV2ZW50Q29hbGxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOworICAg
IGZsb2F0IGV2ZW50Q29hbGxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgpOworCisg
ICAgZGVsdGFYICs9IGV2ZW50Q29hbGxlc2NlZERlbHRhWDsKKyAgICBkZWx0YVkgKz0gZXZlbnRD
b2FsbGVzY2VkRGVsdGFZOworCisgICAgLy8gU2xpZ2h0bHkgcHJlZmVyIHNjcm9sbGluZyB2ZXJ0
aWNhbGx5IGJ5IGFwcGx5aW5nIHRoZSA9IGNhc2UgdG8gZGVsdGFZCisgICAgaWYgKGZhYnNmKGRl
bHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAgICBlbHNlCisg
ICAgICAgIGRlbHRhWSA9IDA7CisKKyAgICBib29sIGlzVmVydGljYWxseVN0cmV0Y2hlZCA9IGZh
bHNlOworICAgIGJvb2wgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgPSBmYWxzZTsKKyAgICBib29s
IHNob3VsZFN0cmV0Y2ggPSBmYWxzZTsKKyAgICAKKyAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQg
PSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworCisgICAgaXNIb3Jpem9udGFs
bHlTdHJldGNoZWQgPSBzdHJldGNoQW1vdW50LndpZHRoKCk7CisgICAgaXNWZXJ0aWNhbGx5U3Ry
ZXRjaGVkID0gc3RyZXRjaEFtb3VudC5oZWlnaHQoKTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlIHBoYXNlID0gd2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCk7CisKKyAgICAvLyBJZiB3
ZSBhcmUgc3RhcnRpbmcgbW9tZW50dW0gc2Nyb2xsaW5nIHRoZW4gZG8gc29tZSBzZXR1cC4KKyAg
ICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYmIChwaGFzZSA9PSBQbGF0Zm9ybVdo
ZWVsRXZlbnRQaGFzZUJlZ2FuIHx8IHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hh
bmdlZCkpCisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gdHJ1ZTsKKworICAg
IENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCkgLSBtX2xh
c3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9pblNjcm9sbEdlc3R1cmUgfHwg
bV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgaWYgKG1fbGFzdE1vbWVtdHVt
U2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+IDAgJiYgdGltZURlbHRhIDwgc2Nyb2xsVmVs
b2NpdHlaZXJvaW5nVGltZW91dCkgeworICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNl
dFdpZHRoKGV2ZW50Q29hbGxlc2NlZERlbHRhWCAvIChmbG9hdCl0aW1lRGVsdGEpOworICAgICAg
ICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldEhlaWdodChldmVudENvYWxsZXNjZWREZWx0YVkg
LyAoZmxvYXQpdGltZURlbHRhKTsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGlt
ZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3Rh
bXAoKTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCkgeworICAgICAgICAg
ICAgaWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiBwaW5uZWRJbkRpcmVjdGlvbihkZWx0
YVgsIDApKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcg
b25seSBpbiB0aGUgdmVydGljYWwuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAhPSAwICYm
IChmYWJzZihkZWx0YVggLyBkZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNo
UmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFC
ZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAg
ICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93
U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIC8vIFN0cmV0
Y2hpbmcgb25seSBpbiB0aGUgaG9yaXpvbnRhbC4KKyAgICAgICAgICAgIGlmIChwaW5uZWRJbkRp
cmVjdGlvbigwLCBkZWx0YVkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWCAhPSAwICYm
IChmYWJzZihkZWx0YVkgLyBkZWx0YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNo
UmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGZhYnNmKGRlbHRhWSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFC
ZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJm
bG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxsIHlldC4KKyAg
ICAgICAgICAgIGlmIChwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJl
ZERlbHRhQmVmb3JlU3RyZXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxv
d1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVs
dGFYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERl
bHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVsdGFYICE9IDAgfHwg
ZGVsdGFZICE9IDApIHsKKyAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2Fs
bHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7CisgICAgICAgICAgICBp
ZiAoZGVsdGFZICE9IDApIHsKKyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxN
dWx0aXBsaWVyKCk7CisgICAgICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZGVs
dGFZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWx0YVggIT0gMCkgeworICAg
ICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAgICAg
ICAgICAgICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChkZWx0YVgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3RyZXRj
aGluZygpKSB7CisgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAgICBl
dmVudENvYWxsZXNjZWREZWx0YVggPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmICgoZGVsdGFY
ICE9IDApICYmICFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiAhcGlubmVkSW5EaXJlY3Rpb24o
ZGVsdGFYLCAwKSkgeworICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRp
cGxpZXIoKTsKKworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpbW1lZGlh
dGVTY3JvbGxCeURlbHRhWChkZWx0YVgpOworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOworCisgICAgICAg
ICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSkgeworICAgICAgICAgICAgICAg
IGRlbHRhWSA9IDA7CisgICAgICAgICAgICAgICAgZXZlbnRDb2FsbGVzY2VkRGVsdGFZID0gMDsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0aWNhbGx5U3Ry
ZXRjaGVkICYmICFwaW5uZWRJbkRpcmVjdGlvbigwLCBkZWx0YVkpKSB7CisgICAgICAgICAgICAg
ICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOworCisgICAgICAgICAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFs
c2UpOworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFZKGRlbHRhWSk7Cisg
ICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1Rv
Q29udGVudEVkZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQg
PSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOworICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgeworICAgICAgICAgICAgICAgIGlm
ICgocGlubmVkSW5EaXJlY3Rpb24oZXZlbnRDb2FsbGVzY2VkRGVsdGFYLCBldmVudENvYWxsZXNj
ZWREZWx0YVkpIHx8IChmYWJzZihldmVudENvYWxsZXNjZWREZWx0YVgpICsgZmFic2YoZXZlbnRD
b2FsbGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFuZCgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lk
dGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICBt
X3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0
KCkgKyBkZWx0YVkpOworCisgICAgICAgICAgICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2VpbGYo
ZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkp
KSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNl
LmhlaWdodCgpKSkpOworICAgICAgICAgICAgRmxvYXRQb2ludCBvcmlnT3JpZ2luID0gKG1fc2Ny
b2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFi
bGVBcmVhLT5zY3JvbGxPcmlnaW4oKSkgLSBzdHJldGNoQW1vdW50OworICAgICAgICAgICAgRmxv
YXRQb2ludCBuZXdPcmlnaW4gPSBvcmlnT3JpZ2luICsgZGFtcGVkRGVsdGE7CisKKyAgICAgICAg
ICAgIGlmIChvcmlnT3JpZ2luICE9IG5ld09yaWdpbikgeworICAgICAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KG5ld09yaWdpbik7CisgICAg
ICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29u
dGVudEVkZ2UodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgJiYgcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VFbmRlZCkgeworICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZh
bHNlOworICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAgICBt
X2xhc3RNb21lbXR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7CisgICAgfQorfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OmJlZ2luU2Nyb2xsR2VzdHVyZSgpCit7CisgICAgZGlkQmVn
aW5TY3JvbGxHZXN0dXJlKCk7CisKKyAgICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0
cnVlOworICAgIG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKKyAgICBtX21vbWVudHVtU2Nyb2xs
SW5Qcm9ncmVzcyA9IGZhbHNlOworICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7
CisgICAgbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXAgPSAwOworICAgIG1fbW9tZW50dW1W
ZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9z
Y3JvbGxhYmxlQXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICBtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC53aWR0
aCgpKSk7CisgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZv
ckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LmhlaWdodCgpKSk7CisKKyAgICBtX292ZXJmbG93
U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKyAgICAKKyAgICBpZiAobV9zbmFwUnViYmVyQmFu
ZFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdG9wKCk7
Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZW5kU2Nyb2xsR2VzdHVyZSgp
Cit7CisgICAgZGlkRW5kU2Nyb2xsR2VzdHVyZSgpOworCisgICAgc25hcFJ1YmJlckJhbmQoKTsK
K30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZCgpCit7
CisgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJ
bmZvXSBzeXN0ZW1VcHRpbWVdIC0gbV9sYXN0TW9tZW10dW1TY3JvbGxUaW1lc3RhbXA7CisgICAg
aWYgKG1fbGFzdE1vbWVtdHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+PSBzY3JvbGxW
ZWxvY2l0eVplcm9pbmdUaW1lb3V0KQorICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9h
dFNpemUoKTsKKworICAgIG1faW5TY3JvbGxHZXN0dXJlID0gZmFsc2U7CisKKyAgICBpZiAobV9z
bmFwUnViYmVyQmFuZFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c3RhcnRUaW1lID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdOworICAg
IG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQ
b2ludCgpOworICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisKKyAgICBtX3NuYXBS
dWJiZXJCYW5kVGltZXIuc3RhcnRSZXBlYXRpbmcoMS4wLzYwLjApOworfQorCitzdGF0aWMgaW5s
aW5lIGZsb2F0IHJvdW5kVG93YXJkWmVybyhmbG9hdCBudW0pCit7CisgICAgcmV0dXJuIG51bSA+
IDAgPyBjZWlsZihudW0gLSAwLjVmKSA6IGZsb29yZihudW0gKyAwLjVmKTsKK30KKworc3RhdGlj
IGlubGluZSBmbG9hdCByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGZsb2F0IG51bSkKK3sK
KyAgICBmbG9hdCByb3VuZGVkTnVtID0gcm91bmRmKG51bSk7CisgICAgaWYgKGZhYnMobnVtIC0g
cm91bmRlZE51bSkgPCAwLjEyNSkKKyAgICAgICAgbnVtID0gcm91bmRlZE51bTsKKworICAgIHJl
dHVybiByb3VuZFRvd2FyZFplcm8obnVtKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYz4qKQoreworICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9p
Z25vcmVNb21lbnR1bVNjcm9sbHMpIHsKKyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRh
ID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gbV9zdGFydFRpbWU7
CisKKyAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7CisgICAgICAg
ICAgICBtX3N0YXJ0U3RyZXRjaCA9IG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7
CisgICAgICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsgICAgCisg
ICAgICAgICAgICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKKyAgICAgICAgICAg
ICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEZsb2F0U2l6ZSgpOworICAgICAgICAgICAgICAg
IG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0
U2l6ZSgpOworICAgICAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKKyAg
ICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX29yaWdPcmlnaW4g
PSAobV9zY3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1f
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIG1fc3RhcnRTdHJldGNoOworICAgICAg
ICAgICAgbV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7CisKKyAgICAgICAgICAg
IC8vIEp1c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVydGljYWwgcnViYmVyYmFu
ZGluZworICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpKSA+PSBm
YWJzZihtX29yaWdWZWxvY2l0eS53aWR0aCgpKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxv
Y2l0eS5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRG9uJ3QgcnVi
YmVyLWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jp
em9udGFsbHkKKyAgICAgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxl
QXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICAgICAgaWYgKCFoU2Nyb2xsZXIg
fHwgIWhTY3JvbGxlci0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5
LnNldFdpZHRoKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEb24ndCBydWJiZXIt
YmFuZCB2ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFs
bHkKKyAgICAgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+
dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgICAgIGlmICghdlNjcm9sbGVyIHx8ICF2U2Ny
b2xsZXItPmVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRIZWln
aHQoMCk7CisgICAgICAgIH0KKworICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJvdW5kVG9EZXZp
Y2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNo
LndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURlbHRhKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFz
dGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29yaWdWZWxv
Y2l0eS5oZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKKworICAgICAgICBpZiAoZmFicyhk
ZWx0YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKKyAgICAgICAgICAgIEZs
b2F0UG9pbnQgbmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7CisKKyAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZh
bHNlKTsKKyAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsKKyAg
ICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRl
bnRFZGdlKHRydWUpOworCisgICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fc2Ny
b2xsYWJsZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0
YShuZXdTdHJldGNoLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNl
LnNldEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQo
KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2lu
dChtX29yaWdPcmlnaW4pOworCisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5kaWRDb21w
bGV0ZVJ1YmJlckJhbmQocm91bmRlZEludFNpemUobV9zdGFydFN0cmV0Y2gpKTsKKworICAgICAg
ICAgICAgbV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKKyAgICAgICAgICAgIG1fc3RyZXRj
aFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
c3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7
CisgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgICAgICAgICBt
X29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0
ZV07CisgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgfQorfQorI2Vu
ZGlmCisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCit2b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpCit7CisgICAgbV9pbml0aWFs
U2Nyb2xsYmFyUGFpbnRUaW1lci5zdGFydE9uZVNob3QoMC4xKTsKK30KKworYm9vbCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdAor
eworICAgIHJldHVybiBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyLmlzQWN0aXZlKCk7Cit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGlt
ZXIoKQoreworICAgIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIuc3RvcCgpOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVy
RmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYz4qKQoreworICAgIHdrU2Nyb2xs
YmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ci5nZXQoKSk7Cit9CisjZW5kaWYKKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpz
ZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikK
K3sKKyAgICBJbnRSZWN0IHJlY3RJblZpZXdDb29yZGluYXRlcyA9IHNjcm9sbGVyVGh1bWI7Cisg
ICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52
ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0
aWNhbFNjcm9sbGJhci0+Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7CisK
KyAgICBpZiAocmVjdEluVmlld0Nvb3JkaW5hdGVzID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJS
ZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRWaXNpYmxl
U2Nyb2xsZXJUaHVtYlJlY3QocmVjdEluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICBtX3Zpc2libGVT
Y3JvbGxlclRodW1iUmVjdCA9IHJlY3RJblZpZXdDb29yZGluYXRlczsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50
LmgKaW5kZXggYzQxMjgyZjA3N2FmZGFjZTkxOWRiNDkxY2MyYTM4YTNjYTU0NjU3Ni4uZmQwOGY1
YzdmN2I3OGEwMGNkZjkwZjAxYjRkMTU5ZmY1ZDFlZDg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oCkBAIC0zNyw3ICszNyw3IEBAIHR5cGVkZWYgc3Ry
dWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgogCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYg
T1MoREFSV0lOKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZ
UEVTCiB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiAjZWxzZQpAQCAtMTIwLDcgKzEy
MCw3IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NH
R0VPTUVUUllfVFlQRVMpCisjaWYgT1MoREFSV0lOKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZ
UEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKICAgICBleHBsaWNpdCBJbnRQb2ludChjb25z
dCBOU1BvaW50Jik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5
CiAgICAgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlmCg==
</data>
<flag name="review"
          id="88443"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>