<?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>74915</bug_id>
          
          <creation_ts>2011-12-19 23:28:23 -0800</creation_ts>
          <short_desc>REGRESSION(r103291): Looks like it broke fast/events/touch and fast/events/touch/gesture/gesture-scroll.html http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac10.5/builds/7010 (Requested by loislo on #webkit).</short_desc>
          <delta_ts>2011-12-20 00:02:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>bdakin</cc>
    
    <cc>loislo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>524455</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 23:28:23 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/103291 broke the build:
Looks like it broke fast/events/touch and fast/events/touch/gesture/gesture-scroll.html http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Mac10.5/builds/7010 (Requested by loislo on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524456</commentid>
    <comment_count>1</comment_count>
      <attachid>119992</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 23:28:51 -0800</bug_when>
    <thetext>Created attachment 119992
ROLLOUT of r103291

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524462</commentid>
    <comment_count>2</comment_count>
      <attachid>119992</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-12-20 00:01:42 -0800</bug_when>
    <thetext>Comment on attachment 119992
ROLLOUT of r103291

Clearing flags on attachment: 119992

Committed r103308: &lt;http://trac.webkit.org/changeset/103308&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524463</commentid>
    <comment_count>3</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-12-20 00:02:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119992</attachid>
            <date>2011-12-19 23:28:51 -0800</date>
            <delta_ts>2011-12-20 00:01:42 -0800</delta_ts>
            <desc>ROLLOUT of r103291</desc>
            <filename>bug-74915-20111220072909.patch</filename>
            <type>text/plain</type>
            <size>164204</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTZiMjE3NjcwZDE0ZWYz
Y2QwODViOTA1NWJiN2E2MzY1ZTdkZWY4YS4uZjdhZGZhYjRlZGYzOGQwMzkzNjVlYjkzMjA0MzM3
OWIwMDg5YWRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0MyBAQAorMjAxMS0xMi0xOSAgU2hl
cmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CisKKyAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjEwMzI5MS4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMTAzMjkxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NDkxNQorCisgICAgICAgIExvb2tzIGxpa2UgaXQgYnJva2UgZmFzdC9ldmVu
dHMvdG91Y2ggYW5kCisgICAgICAgIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS1z
Y3JvbGwuaHRtbAorICAgICAgICBodHRwOi8vYnVpbGQuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0u
d2Via2l0L2J1aWxkZXJzL1dlYmtpdCUyME1hYzEwLjUvYnVpbGRzLzcwMTAKKyAgICAgICAgKFJl
cXVlc3RlZCBieSBsb2lzbG8gb24gI3dlYmtpdCkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9X
ZWJDb3JlLmd5cDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Nj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmguCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpzZXRJc0RyYXdpbmdJbnRvTGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aXNEcmF3aW5nSW50b0xheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhdmVTY3JvbGxlZFNp
bmNlUGFnZUxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6c2V0TmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6Om5lZWRzU2Nyb2xsZXJTdHlsZVVwZGF0ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbTogQWRkZWQu
CisgICAgICAgICgtW05TUHJvY2Vzc0luZm8gc3lzdGVtVXB0aW1lXSk6CisgICAgICAgIChhYnMp
OgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBpbml0V2l0aFNjcm9s
bEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtTY3JvbGxBbmltYXRpb25IZWxwZXJE
ZWxlZ2F0ZSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAgICAgICAoLVtTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSBib3VuZHNdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9u
SGVscGVyRGVsZWdhdGUgX2ltbWVkaWF0ZVNjcm9sbFRvUG9pbnQ6XSk6CisgICAgICAgICgtW1Nj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIF9waXhlbEFsaWduUHJvcG9zZWRTY3JvbGxQb3Np
dGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgY29udmVy
dFNpemVUb0Jhc2U6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRl
IGNvbnZlcnRTaXplRnJvbUJhc2U6XSk6CisgICAgICAgICgtW1Njcm9sbEFuaW1hdGlvbkhlbHBl
ckRlbGVnYXRlIGNvbnZlcnRTaXplVG9CYWNraW5nOl0pOgorICAgICAgICAoLVtTY3JvbGxBbmlt
YXRpb25IZWxwZXJEZWxlZ2F0ZSBjb252ZXJ0U2l6ZUZyb21CYWNraW5nOl0pOgorICAgICAgICAo
LVtTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBzdXBlcnZpZXddKToKKyAgICAgICAgKC1b
U2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgZG9jdW1lbnRWaWV3XSk6CisgICAgICAgICgt
W1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIHdpbmRvd10pOgorICAgICAgICAoLVtTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBfcmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHNdKToK
KyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBpbml0V2l0aFNj
cm9sbEFuaW1hdG9yOldlYkNvcmU6Ol0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXSk6CisgICAgICAgICgtW1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgY29udGVudEFyZWFSZWN0Rm9yU2Nyb2xs
ZXJJbXBQYWlyOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVn
YXRlIGluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBtb3VzZUxvY2F0aW9uSW5Db250ZW50QXJlYUZv
clNjcm9sbGVySW1wUGFpcjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6Y29udmVydENvbnRlbnRQb2ludDp0b1Njcm9sbGVy
SW1wOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIHNj
cm9sbGVySW1wUGFpcjpzZXRDb250ZW50QXJlYU5lZWRzRGlzcGxheUluUmVjdDpdKToKKyAgICAg
ICAgKC1bU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBzY3JvbGxlckltcFBhaXI6
dXBkYXRlU2Nyb2xsZXJTdHlsZUZvck5ld1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZTpdKToKKyAg
ICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBpbml0V2l0aFNjcm9sbGJhclBhaW50ZXI6
cGFydDpXZWJDb3JlOjpzY3JvbGxBbmltYXRvcjpXZWJDb3JlOjphbmltYXRlQWxwaGFUbzpkdXJh
dGlvbjpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFydEFuaW1hdGlvbiBzZXRDdXJyZW50UHJv
Z3Jlc3M6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhcnRBbmltYXRpb24gc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWRdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGluaXRX
aXRoU2Nyb2xsQW5pbWF0b3I6V2ViQ29yZTo6XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSBjYW5jZWxBbmltYXRpb25zXSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50
ZXJEZWxlZ2F0ZSBjb252ZXJ0UmVjdFRvQmFja2luZzpdKToKKyAgICAgICAgKC1bU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlIGNvbnZlcnRSZWN0RnJvbUJhY2tpbmc6XSk6CisgICAgICAgICgtW1Nj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBsYXllcl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWlu
dGVyRGVsZWdhdGUgc2V0VXBBbmltYXRpb246c2Nyb2xsZXJQYWludGVyOnBhcnQ6V2ViQ29yZTo6
YW5pbWF0ZUFscGhhVG86ZHVyYXRpb246XSk6CisgICAgICAgICgtW1Njcm9sbGJhclBhaW50ZXJE
ZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlS25vYkFscGhhVG86ZHVyYXRpb246XSk6CisgICAg
ICAgICgtW1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxlckltcDphbmltYXRlVHJhY2tB
bHBoYVRvOmR1cmF0aW9uOl0pOgorICAgICAgICAoLVtTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUg
c2Nyb2xsZXJJbXA6b3ZlcmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86XSk6CisgICAgICAgICgt
W1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF0pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjaHJvbWl1bVNjcm9sbGJhclRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6flNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxZUG9zaXRp
b25JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjphZGp1c3RTY3JvbGxQb3NpdGlvbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xs
QnlEZWx0YVgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
aW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpub3RpZnlQb3Np
dGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6Y29udGVudEFyZWFXaWxsUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFeGl0ZWRDb250ZW50QXJlYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZU1vdmVkSW5D
b250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFj
Ojp3aWxsU3RhcnRMaXZlUmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmNvbnRlbnRzUmVzaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZFNob3cpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6Y29udGVudEFyZWFEaWRIaWRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEJlZ2lu
U2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjpkaWRFbmRTY3JvbGxHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNjcm9sbGJh
cik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRI
b3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNhbmNlbEFuaW1hdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6
OmVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZWJvdW5k
RGVsdGFGb3JFbGFzdGljRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsV2hlZWxNdWx0
aXBsaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsaW5nTGVmdEFuZFNob3VsZE5vdFJ1
YmJlckJhbmQpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxpbmdSaWdodEFuZFNob3VsZE5v
dFJ1YmJlckJhbmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1h
Yzo6aGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JDaHJvbWl1bU1hYzo6cGlubmVkSW5EaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hvcml6
b250YWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjpiZWdpblNjcm9sbEdlc3R1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZW5kU2Nyb2xsR2VzdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpyb3VuZFRvd2FyZFplcm8pOgorICAgICAgICAoV2ViQ29yZTo6cm91
bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0SXNBY3RpdmUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzdGFydFNjcm9s
bGJhclBhaW50VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0b3BTY3JvbGxiYXJQYWludFRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQ
YWludFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JDaHJvbWl1
bU1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9t
aXVtTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKGxvb2tVcE5TU2Nyb2xsZXJJbXBDbGFzcyk6Cisg
ICAgICAgIChsb29rVXBOU1Njcm9sbGVySW1wUGFpckNsYXNzKToKKyAgICAgICAgKHNjcm9sbGJh
ckNvbnRyb2xTaXplVG9OU0NvbnRyb2xTaXplKToKKyAgICAgICAgKHByZWZlcnJlZFNjcm9sbGVy
U3R5bGUpOgorICAgICAgICAod2tTY3JvbGxiYXJQYWludGVyVXNlc092ZXJsYXlTY3JvbGxlcnMp
OgorICAgICAgICAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKToKKyAgICAgICAgKHdr
U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYSk6CisgICAgICAgICh3a1Njcm9sbGJhclBhaW50ZXJT
ZXRPdmVybGF5U3RhdGUpOgorICAgICAgICAod2tTY3JvbGxiYXJQYWludGVyUGFpbnQpOgorICAg
ICAgICAod2tTY3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayk6CisgICAgICAgICh3a1Njcm9sbGJh
clBhaW50ZXJQYWludEtub2IpOgorICAgICAgICAod2tTY3JvbGxiYXJNaW5pbXVtVGh1bWJMZW5n
dGgpOgorICAgICAgICAod2tTY3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUpOgorICAgICAgICAo
d2tTY3JvbGxiYXJQYWludGVyU2V0RW5hYmxlZCk6CisgICAgICAgICh3a1Njcm9sbGJhclBhaW50
ZXJUcmFja0FscGhhKToKKyAgICAgICAgKHdrTWFrZVNjcm9sbGJhclBhaW50ZXIpOgorICAgICAg
ICAod2tTY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAod2tTY3JvbGxiYXJNaW5pbXVtVG90
YWxMZW5ndGhOZWVkZWRGb3JUaHVtYik6CisgICAgICAgICh3a1ZlcnRpY2FsU2Nyb2xsYmFyUGFp
bnRlckZvckNvbnRyb2xsZXIpOgorICAgICAgICAod2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRl
ckZvckNvbnRyb2xsZXIpOgorICAgICAgICAod2tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0
eWxlKToKKyAgICAgICAgKHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcik6CisgICAg
ICAgICh3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlcik6CisgICAgICAgICh3a1NldFNj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUpOgorICAgICAgICAod2tTY3JvbGxiYXJQYWlu
dGVyS25vYlJlY3QpOgorICAgICAgICAod2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKToK
KyAgICAgICAgKHdrU2V0U2Nyb2xsYmFyUGFpbnRlclRyYWNrQWxwaGEpOgorICAgICAgICAod2tT
ZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKToKKyAgICAgICAgKHdrTWFrZVNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyKToKKyAgICAgICAgKHdrQ29udGVudEFyZWFTY3JvbGxlZCk6CisgICAg
ICAgICh3a0NvbnRlbnRBcmVhV2lsbFBhaW50KToKKyAgICAgICAgKHdrTW91c2VFbnRlcmVkQ29u
dGVudEFyZWEpOgorICAgICAgICAod2tNb3VzZUV4aXRlZENvbnRlbnRBcmVhKToKKyAgICAgICAg
KHdrTW91c2VNb3ZlZEluQ29udGVudEFyZWEpOgorICAgICAgICAod2tXaWxsU3RhcnRMaXZlUmVz
aXplKToKKyAgICAgICAgKHdrQ29udGVudEFyZWFSZXNpemVkKToKKyAgICAgICAgKHdrV2lsbEVu
ZExpdmVSZXNpemUpOgorICAgICAgICAod2tDb250ZW50QXJlYURpZFNob3cpOgorICAgICAgICAo
d2tDb250ZW50QXJlYURpZEhpZGUpOgorICAgICAgICAod2tEaWRCZWdpblNjcm9sbEdlc3R1cmUp
OgorICAgICAgICAod2tEaWRFbmRTY3JvbGxHZXN0dXJlKToKKyAgICAgICAgKHdrU2Nyb2xsYmFy
UGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMpOgorICAgICAgICAoaXNTY3JvbGxiYXJPdmVybGF5
QVBJQXZhaWxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjpzdXBwb3J0c0NvbnRyb2xUaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6c2Nyb2xsYmFyTWFwKToKKyAgICAgICAgKCtbU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciBh
cHBlYXJhbmNlUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAoK1tTY3JvbGxiYXJQcmVmc09ic2Vy
dmVyIGJlaGF2aW9yUHJlZnNDaGFuZ2VkOl0pOgorICAgICAgICAoK1tTY3JvbGxiYXJQcmVmc09i
c2VydmVyIHJlZ2lzdGVyQXNPYnNlcnZlcl0pOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQXJy
b3dQbGFjZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yzo6cmVnaXN0ZXJTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bU1hYzo6dW5yZWdpc3RlclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZUNocm9taXVtTWFjOjpzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50ZXJGb3JTY3JvbGxi
YXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6U2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjOjpwcmVmZXJlbmNlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYzo6c2Nyb2xsYmFyVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnVzZXNPdmVybGF5U2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1Njcm9sbGJhclBhaW50ZXJLbm9iU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dXBkYXRlU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6Omlu
aXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjOjphdXRvc2Nyb2xsVGltZXJEZWxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpidXR0b25zUGxhY2VtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6Omhhc0J1dHRvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6aGFzVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6YnV0dG9uUmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bU1hYzo6YmFja0J1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6Zm9yd2FyZEJ1dHRvblJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dHJhY2tSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1UaHVtYkxlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzaG91bGRDZW50
ZXJPblRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6
OnNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OnNj
cm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL0VtcHR5UHJvdG9jb2xEZWZpbml0aW9ucy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9O
U1Njcm9sbGVySW1wRGV0YWlscy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9OU1Njcm9sbGVy
SW1wRGV0YWlscy5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5p
bWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW06
CisgICAgICAgICgtW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBsYXllcl0pOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9sbEFuaW1hdG9yTWFjKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjp+U2Nyb2xsQW5pbWF0b3JNYWMpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjptb3VzZUV4
aXRlZENvbnRlbnRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6bW91c2VFbnRlcmVkU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjptb3VzZUV4aXRlZFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvck1hYzo6d2lsbFN0YXJ0TGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6Y29udGVudHNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFEaWRTaG93KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50QXJlYURpZEhpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmRpZEJlZ2luU2Nyb2xsR2VzdHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OndpbGxSZW1vdmVWZXJ0aWNhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6ZGlkQWRkSG9y
aXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6
d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JNYWM6OmNhbmNlbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JNYWM6OnNldElzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1h
dG9yTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yTWFjOjppbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lckZpcmVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyVGhlbWVNYWMubW06CisgICAgICAgICgrW1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIg
YXBwZWFyYW5jZVByZWZzQ2hhbmdlZDpdKToKKyAgICAgICAgKCtbV2ViU2Nyb2xsYmFyUHJlZnNP
YnNlcnZlciBiZWhhdmlvclByZWZzQ2hhbmdlZDpdKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lOjpuYXRpdmVUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVBcnJvd1Bs
YWNlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6cmVnaXN0ZXJT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OlNjcm9sbGJh
clRoZW1lTWFjKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjpzY3JvbGxi
YXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnVzZXNP
dmVybGF5U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6
dXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJh
clRoZW1lTWFjOjpoYXNCdXR0b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
TWFjOjpoYXNUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZU1hYzo6bWlu
aW11bVRodW1iTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclBhcnRUb0hJUHJl
c3NlZFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lTWFjOjp1cGRhdGVF
bmFibGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50
KToKKwogMjAxMS0xMi0xOSAgTGVvIFlhbmcgIDxsZW8ueWFuZ0B0b3JjaG1vYmlsZS5jb20uY24+
CiAKICAgICAgICAgW0JsYWNrQmVycnldIFVwc3RyZWFtIHRoZSBCbGFja0JlcnJ5IGNoYW5nZSB0
byBSZXNvdXJjZVJlcXVlc3RCYXNlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAppbmRleCAwMDY2NDY0NTAzNDlkYjE4M2YxODMxNmMxMTgwYTU4MWVkMjMyNzZjLi44ODYy
MDNkMGFkMGQ3NTcxMmYxMTNkOGI4MThmNzMzOGM1ZTMyOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTI5OSwxMyArMTI5OSwxMyBAQAogICAgICAgICAgICAg
ICAjIHN1Y2ggYXM6CiAgICAgICAgICAgICAgICMgY29tLmdvb2dsZS5DaHJvbWVbXSBvYmpjW106
IENsYXNzIFNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgaXMgaW1wbGVtZW50ZWQgaW4gYm90aCAuLi4v
R29vZ2xlIENocm9tZS5hcHAvQ29udGVudHMvVmVyc2lvbnMvLi4uL0dvb2dsZSBDaHJvbWUgSGVs
cGVyLmFwcC9Db250ZW50cy9NYWNPUy8uLi8uLi8uLi9Hb29nbGUgQ2hyb21lIEZyYW1ld29yay5m
cmFtZXdvcmsvR29vZ2xlIENocm9tZSBGcmFtZXdvcmsgYW5kIC9TeXN0ZW0vTGlicmFyeS9GcmFt
ZXdvcmtzL1dlYktpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9GcmFtZXdvcmtzL1dlYkNvcmUuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvV2ViQ29yZS4gT25lIG9mIHRoZSB0d28gd2lsbCBiZSB1c2VkLiBX
aGljaCBvbmUgaXMgdW5kZWZpbmVkLgogICAgICAgICAgICAgICAnV2ViQ2FzY2FkZUxpc3Q9Q2hy
b21pdW1XZWJDb3JlT2JqQ1dlYkNhc2NhZGVMaXN0JywKLSAgICAgICAgICAgICAgJ1dlYlNjcm9s
bGJhclByZWZzT2JzZXJ2ZXI9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYlNjcm9sbGJhclByZWZzT2Jz
ZXJ2ZXInLAorICAgICAgICAgICAgICAnU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcj1DaHJvbWl1bVdl
YkNvcmVPYmpDU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcicsCiAgICAgICAgICAgICAgICdXZWJDb3Jl
UmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcj1DaHJvbWl1bVdlYkNvcmVPYmpDV2ViQ29y
ZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXInLAogICAgICAgICAgICAgICAnV2ViRm9u
dENhY2hlPUNocm9taXVtV2ViQ29yZU9iakNXZWJGb250Q2FjaGUnLAotICAgICAgICAgICAgICAn
V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYlNj
cm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlJywKLSAgICAgICAgICAgICAgJ1dlYlNjcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU9Q2hyb21pdW1XZWJDb3JlT2JqQ1dlYlNjcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUnLAotICAgICAgICAgICAgICAnV2ViU2Nyb2xsYmFy
UGFpbnRlckRlbGVnYXRlPUNocm9taXVtV2ViQ29yZU9iakNXZWJTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUnLAotICAgICAgICAgICAgICAnV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbj1DaHJvbWl1
bVdlYkNvcmVPYmpDV2ViU2Nyb2xsYmFyUGFydEFuaW1hdGlvbicsCisgICAgICAgICAgICAgICdT
Y3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsQW5p
bWF0aW9uSGVscGVyRGVsZWdhdGUnLAorICAgICAgICAgICAgICAnU2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXJEZWxlZ2F0ZT1DaHJvbWl1bVdlYkNvcmVPYmpDU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJEZWxlZ2F0ZScsCisgICAgICAgICAgICAgICdTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU9
Q2hyb21pdW1XZWJDb3JlT2JqQ1Njcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZScsCisgICAgICAgICAg
ICAgICdTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPUNocm9taXVtV2ViQ29yZU9iakNTY3JvbGxiYXJQ
YXJ0QW5pbWF0aW9uJywKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJz
JzogWwogICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9hcHBs
ZV93ZWJraXQnLApAQCAtMTU2NSwxMSArMTU2NSw3IEBACiAgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vbWFjL0Jsb2NrRXhjZXB0aW9uc1xcLm1tJCddLAogICAgICAgICAgICAgWydp
bmNsdWRlJywgJ3BsYXRmb3JtL21hYy9LaWxsUmluZ01hY1xcLm1tJCddLAogICAgICAgICAgICAg
WydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9Mb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHRcXC5t
bSQnXSwKLSAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMvTlNTY3JvbGxlcklt
cERldGFpbHNcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9tYWMv
UHVyZ2VhYmxlQnVmZmVyTWFjXFwuY3BwJCddLAotICAgICAgICAgICAgWydpbmNsdWRlJywgJ3Bs
YXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hY1xcLm1tJCddLAotICAgICAgICAgICAgWydpbmNs
dWRlJywgJ3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hY1xcLm1tJCddLAotICAgICAgICAg
ICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlclxc
Lm1tJCddLAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL21hYy9XZWJDb3JlU3lz
dGVtSW50ZXJmYWNlXFwubW0kJ10sCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0v
bWFjL1dlYkNvcmVUZXh0UmVuZGVyZXJcXC5tbSQnXSwKICAgICAgICAgICAgIFsnaW5jbHVkZScs
ICdwbGF0Zm9ybS90ZXh0L21hYy9TaGFwZUFyYWJpY1xcLmMkJ10sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5k
ZXggZmNkZjViOGIzMjUwMTlkZDg0MmMyN2VhNTg1OTBkMmVlNmVlNDkzNS4uODU2OTg3MDEwM2E3
OGQzMjNmMmIyOGFjMTY3ZTI1YWY2MTk4YTU0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzMwOCw2
ICszMzA4LDEwIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBMaXN0Qm94
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudVByaXZhdGUuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0u
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9t
aXVtTWFjLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMubW0nLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJh
ck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMubW0nLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51
eC5jcHAnLApAQCAtNDE1MSw4ICs0MTU1LDYgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMv
TG9jYWxpemVkU3RyaW5nc01hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL0xvZ2dp
bmdNYWMubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9NSU1FVHlwZVJlZ2lzdHJ5TWFj
Lm1tJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMuaCcs
Ci0gICAgICAgICAgICAncGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZEhlbHBlci5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0v
bWFjL1BsYXRmb3JtQ2xvY2tDQS5jcHAnLApAQCAtNDE2NCw4ICs0MTY2LDYgQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9tYWMvU2NoZWR1bGVQYWlyTWFjLm1tJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFj
L1Njcm9sbEFuaW1hdG9yTWFjLm1tJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvU2Nyb2xs
RWxhc3RpY2l0eUNvbnRyb2xsZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Njcm9s
bEVsYXN0aWNpdHlDb250cm9sbGVyLm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvU2Ny
b2xsVmlld01hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1l
TWFjLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbScs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMDA3NDk3OWY4ZDAxZmU2YTZlYjY2ODJmYWRkMTExYzdlNDVlMGVkZi4uMzJhODgxOGE3
NGIxZGJjYjc0OGQ3OWFkYWZiODQ4NzdjZWYxZWFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTU1MSw3ICsxNTUxLDYgQEAK
IAkJNTFGQjU1MDUxMTNFM0U5MTAwODIxMTc2IC8qIEpTQ2xvc2VFdmVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUZCNTUwMzExM0UzRTkxMDA4
MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLzsgfTsKIAkJNTIxRDQ2RjYxMUFFQzk4MTAwNTE0
NjEzIC8qIEtpbGxSaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTIxRDQ2RjUxMUFFQzk4MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tICov
OyB9OwogCQk1MjFENDZGODExQUVDOUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMUQ0NkY3MTFBRUM5QjEwMDUx
NDYxMyAvKiBLaWxsUmluZy5oICovOyB9OwotCQk1MkY1MkUxMTE0QTAxMzRGMDBBQ0MzOTcgLyog
TlNTY3JvbGxlckltcERldGFpbHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkY1MkUxMDE0QTAxMzRGMDBBQ0MzOTcgLyogTlNTY3JvbGxlckltcERl
dGFpbHMubW0gKi87IH07CiAJCTUzMTc2MTIyMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZsZXhp
YmxlQm94RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzE3NjEyMDEzQzUxNjY5MDAyNkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuY3Bw
ICovOyB9OwogCQk1MzE3NjEyMzEzQzUxNjY5MDAyNkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERh
dGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTc2
MTIxMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUzMjVFNEQ3MTNBNkM4OEIw
MDQwNEEzNiAvKiBDU1NGbGV4VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTMyNUU0RDUxM0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1
ZS5jcHAgKi87IH07CkBAIC04ODI0LDcgKzg4MjMsNiBAQAogCQk1MUZCNTUwMzExM0UzRTkxMDA4
MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQ2xvc2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
MUQ0NkY1MTFBRUM5ODEwMDUxNDYxMyAvKiBLaWxsUmluZ01hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEtpbGxSaW5nTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MjFENDZGNzExQUVDOUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS2lsbFJpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTJGNTJFMTAxNEEwMTM0RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJbXBE
ZXRhaWxzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTlNTY3Jv
bGxlckltcERldGFpbHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTc2MTIw
MTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdHlsZUZsZXhpYmxlQm94RGF0YS5jcHA7IHBhdGgg
PSBzdHlsZS9TdHlsZUZsZXhpYmxlQm94RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzMTc2MTIxMTNDNTE2NjkwMDI2RTQ1NCAvKiBTdHlsZUZsZXhpYmxlQm94RGF0YS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZUZsZXhpYmxlQm94RGF0YS5o
OyBwYXRoID0gc3R5bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTMyNUU0RDUxM0E2Qzg4QjAwNDA0QTM2IC8qIENTU0ZsZXhWYWx1ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGbGV4VmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2MDMsNyArMTU2MDEsNiBAQAogCQkJCTY1
N0VEQTBBMTM4NUNCRDgwMDRFMDY0NSAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMubW0gKi8s
CiAJCQkJQkM3NzJDNUQwQzRFQjM0NDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnlNYWMubW0g
Ki8sCiAJCQkJOTM1MDBGMzExM0ZERTNCRTAwOTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxz
LmggKi8sCi0JCQkJNTJGNTJFMTAxNEEwMTM0RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJbXBEZXRh
aWxzLm1tICovLAogCQkJCUE3RDNDNTIzMEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVs
cGVyLmggKi8sCiAJCQkJNEIyNzA5ODEwQUYyRTVFMDAwNjUxMjdGIC8qIFBhc3RlYm9hcmRNYWMu
bW0gKi8sCiAJCQkJOTM1QzQ3NkYwOUFDNEQ3MzAwQTZBQUI0IC8qIFBsYXRmb3JtTW91c2VFdmVu
dE1hYy5tbSAqLywKQEAgLTI3ODUzLDcgKzI3ODUwLDYgQEAKIAkJCQkxQTFGMjhBMTE0OUU2Mjk4
MDBGQkMzNUYgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlBODBBOTQyMzE0OUYyMjVFMDA5ODkyOTEgLyogSlNET01XaW5kb3dXZWJBdWRpb0N1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBBOTQyNTE0OUYyMjcxMDA5ODkyOTEgLyogSlNET01X
aW5kb3dXZWJTb2NrZXRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTJGNTJFMTExNEEw
MTM0RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxB
bmltYXRvckNocm9taXVtTWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZiODQ5Y2YyODQyNzA0ZDMwMGY5ZTc3
MzVlMDQxYjc1MzExYTEzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMuaApAQCAtMCwwICsxLDE3MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hY19o
CisjZGVmaW5lIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWNfaAorCisjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhck92ZXJsYXlVdGls
aXRpZXNDaHJvbWl1bU1hYy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBTY3JvbGxBbmltYXRpb25IZWxw
ZXJEZWxlZ2F0ZTsKK0BjbGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CitAY2xhc3MgU2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZTsKK0BjbGFzcyBTY3JvbGxiYXJQYWludGVy
RGVsZWdhdGU7CisjZWxzZQorY2xhc3MgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7Citj
bGFzcyBTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CitjbGFzcyBTY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlckRlbGVnYXRlOworY2xhc3MgU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOworI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyOworCitjbGFzcyBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjIDogcHVibGljIFNjcm9sbEFuaW1hdG9yIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKFNjcm9sbGFibGVBcmVhKik7
CisgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYygpOworCisgICAgdmlydHVh
bCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworCisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpIE9WRVJSSURFOworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVy
ZUV2ZW50Jik7CisjZW5kaWYKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIGNhbmNlbEFuaW1h
dGlvbnMoKTsKKworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBv
aW50JiBuZXdQb3NpdGlvbik7CisgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWChmbG9h
dCBkZWx0YVgpOworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZmxvYXQgZGVsdGFZ
KTsKKworICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihj
b25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbik7CisKKyAgICB2b2lkIHNldElzRHJhd2luZ0lu
dG9MYXllcihib29sIGIpIHsgbV9kcmF3aW5nSW50b0xheWVyID0gYjsgfQorICAgIGJvb2wgaXNE
cmF3aW5nSW50b0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3aW5nSW50b0xheWVyOyB9CisK
KyAgICBib29sIGhhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQoKSBjb25zdCB7IHJldHVybiBtX2hh
dmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjdGl2
ZSgpOworCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIHZvaWQgdXBkYXRlU2Ny
b2xsZXJTdHlsZSgpOworCisgICAgYm9vbCBzY3JvbGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBj
b25zdDsKKyAgICB2b2lkIHN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgIHZvaWQgc3Rv
cFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXRWaXNpYmxlU2Ny
b2xsZXJUaHVtYlJlY3QoY29uc3QgSW50UmVjdCYpOworCitwcml2YXRlOgorICAgIFJldGFpblB0
cjxpZD4gbV9zY3JvbGxBbmltYXRpb25IZWxwZXI7CisgICAgUmV0YWluUHRyPFNjcm9sbEFuaW1h
dGlvbkhlbHBlckRlbGVnYXRlPiBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlOworCisj
aWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorICAgIFJldGFpblB0cjxXS1Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyUmVmPiBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyOworICAgIFJl
dGFpblB0cjxTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPiBtX3Njcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyRGVsZWdhdGU7CisgICAgUmV0YWluUHRyPGlkPiBtX3Njcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZTsKKworICAgIHZvaWQgaW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJl
ZChUaW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopOworICAgIFRpbWVyPFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM+IG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXI7CisjZW5kaWYK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CisgICAgdmly
dHVhbCB2b2lkIGNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIG1vdXNl
RXhpdGVkQ29udGVudEFyZWEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3ZlZElu
Q29udGVudEFyZWEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFN0YXJ0TGl2ZVJlc2l6
ZSgpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Jlc2l6ZWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgd2lsbEVuZExpdmVSZXNpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udGVudEFy
ZWFEaWRTaG93KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhRGlkSGlkZSgp
IGNvbnN0OworICAgIHZvaWQgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3Q7CisgICAgdm9p
ZCBkaWRFbmRTY3JvbGxHZXN0dXJlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRk
VmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxSZW1v
dmVWZXJ0aWNhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRk
SG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJl
bW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CisKKyAgICB2b2lkIHNldE5lZWRz
U2Nyb2xsZXJTdHlsZVVwZGF0ZShib29sIG5lZWRzVXBkYXRlKSB7IG1fbmVlZHNTY3JvbGxlclN0
eWxlVXBkYXRlID0gbmVlZHNVcGRhdGU7IH0KKyAgICBib29sIG5lZWRzU2Nyb2xsZXJTdHlsZVVw
ZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlOyB9CisKKyAg
ICBmbG9hdCBhZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCkgY29uc3Q7Cisg
ICAgZmxvYXQgYWRqdXN0U2Nyb2xsWVBvc2l0aW9uSWZOZWNlc3NhcnkoZmxvYXQpIGNvbnN0Owor
ICAgIEZsb2F0UG9pbnQgYWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9h
dFBvaW50JikgY29uc3Q7CisKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgYm9vbCBh
bGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBjb25zdDsKKyAgICBib29sIGFsbG93c0hvcml6b250
YWxTdHJldGNoaW5nKCkgY29uc3Q7CisgICAgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihmbG9hdCBk
ZWx0YVgsIGZsb2F0IGRlbHRhWSk7CisgICAgdm9pZCBzbmFwUnViYmVyQmFuZCgpOworICAgIHZv
aWQgc25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM+Kik7CisgICAgdm9pZCBzbW9vdGhTY3JvbGxXaXRoRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50Jik7CisgICAgdm9pZCBiZWdpblNjcm9sbEdlc3R1cmUoKTsKKyAgICB2b2lkIGVuZFNj
cm9sbEdlc3R1cmUoKTsKKworICAgIGJvb2wgbV9pblNjcm9sbEdlc3R1cmU7CisgICAgYm9vbCBt
X21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzczsKKyAgICBib29sIG1faWdub3JlTW9tZW50dW1TY3Jv
bGxzOworCisgICAgYm9vbCBtX3Njcm9sbGVySW5pdGlhbGx5UGlubmVkT25MZWZ0OworICAgIGJv
b2wgbV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uUmlnaHQ7CisgICAgaW50IG1fY3VtdWxhdGl2
ZUhvcml6b250YWxTY3JvbGw7CisgICAgYm9vbCBtX2RpZEN1bXVsYXRpdmVIb3Jpem9udGFsU2Ny
b2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rpb25PZlBpbjsKKworICAgIENGVGltZUludGVy
dmFsIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOworICAgIEZsb2F0U2l6ZSBtX292ZXJm
bG93U2Nyb2xsRGVsdGE7CisgICAgRmxvYXRTaXplIG1fc3RyZXRjaFNjcm9sbEZvcmNlOworICAg
IEZsb2F0U2l6ZSBtX21vbWVudHVtVmVsb2NpdHk7CisKKyAgICAvLyBSdWJiZXIgYmFuZCBzdGF0
ZS4KKyAgICBDRlRpbWVJbnRlcnZhbCBtX3N0YXJ0VGltZTsKKyAgICBGbG9hdFNpemUgbV9zdGFy
dFN0cmV0Y2g7CisgICAgRmxvYXRQb2ludCBtX29yaWdPcmlnaW47CisgICAgRmxvYXRTaXplIG1f
b3JpZ1ZlbG9jaXR5OworICAgIFRpbWVyPFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM+IG1fc25h
cFJ1YmJlckJhbmRUaW1lcjsKKyNlbmRpZgorICAgIGJvb2wgbV9kcmF3aW5nSW50b0xheWVyOwor
ICAgIGJvb2wgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkOworICAgIGJvb2wgbV9uZWVkc1Nj
cm9sbGVyU3R5bGVVcGRhdGU7CisgICAgSW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVj
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMubW0KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU0
NzMzZDU5NDMwNjBmN2FiMzAxYTRiZTQwNzI1ZGZlYTg0ZDk2NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMubW0KQEAgLTAsMCArMSwxMzQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+
CisKKyNpbmNsdWRlICJTY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgiCisKKyNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVk
ZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1
ZGUgIlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVt
SW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisjaWYgIWRlZmlu
ZWQoTUFDX09TX1hfVkVSU0lPTl8xMF82KSB8fCBNQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VE
IDwgTUFDX09TX1hfVkVSU0lPTl8xMF82CitAcHJvdG9jb2wgTlNBbmltYXRpb25EZWxlZ2F0ZQor
QGVuZAorCitAaW50ZXJmYWNlIE5TUHJvY2Vzc0luZm8gKFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWNFeHQpCistIChOU1RpbWVJbnRlcnZhbClzeXN0ZW1VcHRpbWU7CitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBOU1Byb2Nlc3NJbmZvIChTY3JvbGxBbmltYXRvckNocm9taXVtTWFjRXh0KQorLSAo
TlNUaW1lSW50ZXJ2YWwpc3lzdGVtVXB0aW1lCit7CisgICAgLy8gR2V0IGhvdyBsb25nIHN5c3Rl
bSBoYXMgYmVlbiB1cC4gRm91bmQgYnkgbG9va2luZyBnZXR0aW5nICJib290dGltZSIgZnJvbSB0
aGUga2VybmVsLgorICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBib290dGltZSA9IHswfTsKKyAg
ICBpZiAoIWJvb3R0aW1lLnR2X3NlYykgeworICAgICAgICBpbnQgbWliWzJdID0ge0NUTF9LRVJO
LCBLRVJOX0JPT1RUSU1FfTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoYm9vdHRpbWUp
OworICAgICAgICBpZiAoLTEgPT0gc3lzY3RsKG1pYiwgMiwgJmJvb3R0aW1lLCAmc2l6ZSwgMCwg
MCkpCisgICAgICAgICAgICBib290dGltZS50dl9zZWMgPSAwOworICAgIH0KKyAgICBzdHJ1Y3Qg
dGltZXZhbCBub3c7CisgICAgaWYgKGJvb3R0aW1lLnR2X3NlYyAmJiAtMSAhPSBnZXR0aW1lb2Zk
YXkoJm5vdywgMCkpIHsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdXB0aW1lOworICAgICAgICB0
aW1lcnN1Yigmbm93LCAmYm9vdHRpbWUsICZ1cHRpbWUpOworICAgICAgICBOU1RpbWVJbnRlcnZh
bCByZXN1bHQgPSB1cHRpbWUudHZfc2VjICsgKHVwdGltZS50dl91c2VjIC8gMUUrNik7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorQGVuZAorI2VuZGlm
CisKK0BpbnRlcmZhY2UgTlNPYmplY3QgKFNjcm9sbEFuaW1hdGlvbkhlbHBlckRldGFpbHMpCist
IChpZClpbml0V2l0aERlbGVnYXRlOihpZClkZWxlZ2F0ZTsKKy0gKHZvaWQpX3N0b3BSdW47Cist
IChCT09MKV9pc0FuaW1hdGluZzsKKy0gKE5TUG9pbnQpdGFyZ2V0T3JpZ2luOworLSAoQ0dGbG9h
dClfcHJvZ3Jlc3M7CitAZW5kCisKK0BpbnRlcmZhY2UgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVs
ZWdhdGUgOiBOU09iamVjdAoreworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWMqIF9hbmltYXRvcjsKK30KKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOworQGVuZAorCitzdGF0
aWMgTlNTaXplIGFicyhOU1NpemUgc2l6ZSkKK3sKKyAgICBOU1NpemUgZmluYWxTaXplID0gc2l6
ZTsKKyAgICBpZiAoZmluYWxTaXplLndpZHRoIDwgMCkKKyAgICAgICAgZmluYWxTaXplLndpZHRo
ID0gLWZpbmFsU2l6ZS53aWR0aDsKKyAgICBpZiAoZmluYWxTaXplLmhlaWdodCA8IDApCisgICAg
ICAgIGZpbmFsU2l6ZS5oZWlnaHQgPSAtZmluYWxTaXplLmhlaWdodDsKKyAgICByZXR1cm4gZmlu
YWxTaXplOyAgICAKK30KKworQGltcGxlbWVudGF0aW9uIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlCisKKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6KFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yCit7CisgICAgc2VsZiA9IFtzdXBlciBp
bml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfYW5pbWF0
b3IgPSBzY3JvbGxBbmltYXRvcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzY3Jv
bGxBbmltYXRvckRlc3Ryb3llZAoreworICAgIF9hbmltYXRvciA9IDA7Cit9CisKKy0gKE5TUmVj
dClib3VuZHMKK3sKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuIE5TWmVyb1Jl
Y3Q7CisKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IF9hbmltYXRv
ci0+Y3VycmVudFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIE5TTWFrZVJlY3QoY3VycmVudFBvc2l0
aW9uLngoKSwgY3VycmVudFBvc2l0aW9uLnkoKSwgMCwgMCk7Cit9CisKKy0gKHZvaWQpX2ltbWVk
aWF0ZVNjcm9sbFRvUG9pbnQ6KE5TUG9pbnQpbmV3UG9zaXRpb24KK3sKKyAgICBpZiAoIV9hbmlt
YXRvcikKKyAgICAgICAgcmV0dXJuOworICAgIF9hbmltYXRvci0+aW1tZWRpYXRlU2Nyb2xsVG9Q
b2ludEZvclNjcm9sbEFuaW1hdGlvbihuZXdQb3NpdGlvbik7Cit9CisKKy0gKE5TUG9pbnQpX3Bp
eGVsQWxpZ25Qcm9wb3NlZFNjcm9sbFBvc2l0aW9uOihOU1BvaW50KW5ld09yaWdpbgoreworICAg
IHJldHVybiBuZXdPcmlnaW47Cit9CisKKy0gKE5TU2l6ZSljb252ZXJ0U2l6ZVRvQmFzZTooTlNT
aXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOworfQorCistIChOU1NpemUpY29udmVy
dFNpemVGcm9tQmFzZTooTlNTaXplKXNpemUKK3sKKyAgICByZXR1cm4gYWJzKHNpemUpOworfQor
CistIChOU1NpemUpY29udmVydFNpemVUb0JhY2tpbmc6KE5TU2l6ZSlzaXplCit7CisgICAgcmV0
dXJuIGFicyhzaXplKTsKK30KKworLSAoTlNTaXplKWNvbnZlcnRTaXplRnJvbUJhY2tpbmc6KE5T
U2l6ZSlzaXplCit7CisgICAgcmV0dXJuIGFicyhzaXplKTsKK30KKworLSAoaWQpc3VwZXJ2aWV3
Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoaWQpZG9jdW1lbnRWaWV3Cit7CisgICAgcmV0
dXJuIG5pbDsKK30KKworLSAoaWQpd2luZG93Cit7CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAo
dm9pZClfcmVjdXJzaXZlUmVjb21wdXRlVG9vbFRpcHMKK3sKK30KKworQGVuZAorCisjaWYgVVNF
KFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorCitAaW50ZXJmYWNlIFNjcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyRGVsZWdhdGUgOiBOU09iamVjdAoreworICAgIFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWMqIF9hbmltYXRvcjsKK30KKy0gKGlkKWluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6
KFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWMqKXNjcm9sbEFuaW1hdG9yOworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZQor
CistIChpZClpbml0V2l0aFNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjKilzY3JvbGxBbmltYXRvcgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIF9hbmltYXRvciA9
IHNjcm9sbEFuaW1hdG9yOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXNjcm9sbEFu
aW1hdG9yRGVzdHJveWVkCit7CisgICAgX2FuaW1hdG9yID0gMDsKK30KKworLSAoTlNSZWN0KWNv
bnRlbnRBcmVhUmVjdEZvclNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyCit7Cisg
ICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAgaWYgKCFfYW5pbWF0b3IpCisg
ICAgICAgIHJldHVybiBOU1plcm9SZWN0OworCisgICAgV2ViQ29yZTo6SW50U2l6ZSBjb250ZW50
c1NpemUgPSBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmNvbnRlbnRzU2l6ZSgpOworICAg
IHJldHVybiBOU01ha2VSZWN0KDAsIDAsIGNvbnRlbnRzU2l6ZS53aWR0aCgpLCBjb250ZW50c1Np
emUuaGVpZ2h0KCkpOworfQorCistIChCT09MKWluTGl2ZVJlc2l6ZUZvclNjcm9sbGVySW1wUGFp
cjooaWQpc2Nyb2xsZXJJbXBQYWlyCit7CisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGVySW1wUGFp
cik7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAgIHJldHVybiBOTzsKKworICAgIHJldHVy
biBfYW5pbWF0b3ItPnNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJlc2l6ZSgpOworfQorCistIChO
U1BvaW50KW1vdXNlTG9jYXRpb25JbkNvbnRlbnRBcmVhRm9yU2Nyb2xsZXJJbXBQYWlyOihpZClz
Y3JvbGxlckltcFBhaXIKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXBQYWlyKTsKKyAg
ICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50OworCisgICAgcmV0
dXJuIF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+Y3VycmVudE1vdXNlUG9zaXRpb24oKTsK
K30KKworLSAoTlNQb2ludClzY3JvbGxlckltcFBhaXI6KGlkKXNjcm9sbGVySW1wUGFpciBjb252
ZXJ0Q29udGVudFBvaW50OihOU1BvaW50KXBvaW50SW5Db250ZW50QXJlYSB0b1Njcm9sbGVySW1w
OihpZClzY3JvbGxlckltcAoreworICAgIFVOVVNFRF9QQVJBTShzY3JvbGxlckltcFBhaXIpOwor
ICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm4gTlNaZXJvUG9pbnQ7CisKKyAgICBX
ZWJDb3JlOjpTY3JvbGxiYXIqIHNjcm9sbGJhciA9IDA7CisgICAgaWYgKHdrU2Nyb2xsYmFyUGFp
bnRlcklzSG9yaXpvbnRhbCgoV0tTY3JvbGxiYXJQYWludGVyUmVmKXNjcm9sbGVySW1wKSkKKyAg
ICAgICAgc2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCk7CisgICAgZWxzZSAKKyAgICAgICAgc2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5z
Y3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworCisgICAgLy8gSXQgaXMgcG9z
c2libGUgdG8gaGF2ZSBhIG51bGwgc2Nyb2xsYmFyIGhlcmUgc2luY2UgaXQgaXMgcG9zc2libGUg
Zm9yIHRoaXMgZGVsZWdhdGUKKyAgICAvLyBtZXRob2QgdG8gYmUgY2FsbGVkIGJldHdlZW4gdGhl
IG1vbWVudCB3aGVuIGEgc2Nyb2xsYmFyIGhhcyBiZWVuIHNldCB0byAwIGFuZCB0aGUKKyAgICAv
LyBtb21lbnQgd2hlbiBpdHMgZGVzdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQuIFdlIHNob3VsZCBw
cm9iYWJseSBkZS1jb3VwbGUgc29tZQorICAgIC8vIG9mIHRoZSBjbGVhbi11cCB3b3JrIGluIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoKSB0byBhdm9pZCB0
aGlzCisgICAgLy8gaXNzdWUuCisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBX
ZWJDb3JlOjpJbnRQb2ludCgpOworICAgIAorICAgIHJldHVybiBzY3JvbGxiYXItPmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXcoV2ViQ29yZTo6SW50UG9pbnQocG9pbnRJbkNvbnRlbnRBcmVhKSk7
Cit9CisKKy0gKHZvaWQpc2Nyb2xsZXJJbXBQYWlyOihpZClzY3JvbGxlckltcFBhaXIgc2V0Q29u
dGVudEFyZWFOZWVkc0Rpc3BsYXlJblJlY3Q6KE5TUmVjdClyZWN0Cit7CisgICAgVU5VU0VEX1BB
UkFNKHNjcm9sbGVySW1wUGFpcik7CisgICAgVU5VU0VEX1BBUkFNKHJlY3QpOworfQorCistICh2
b2lkKXNjcm9sbGVySW1wUGFpcjooaWQpc2Nyb2xsZXJJbXBQYWlyIHVwZGF0ZVNjcm9sbGVyU3R5
bGVGb3JOZXdSZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdSZWNv
bW1lbmRlZFNjcm9sbGVyU3R5bGUKK3sKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKChXS1Njcm9s
bGJhclBhaW50ZXJDb250cm9sbGVyUmVmKXNjcm9sbGVySW1wUGFpciwgbmV3UmVjb21tZW5kZWRT
Y3JvbGxlclN0eWxlKTsKKyAgICBfYW5pbWF0b3ItPnVwZGF0ZVNjcm9sbGVyU3R5bGUoKTsKK30K
KworQGVuZAorCitAaW50ZXJmYWNlIFNjcm9sbGJhclBhcnRBbmltYXRpb24gOiBOU0FuaW1hdGlv
bgoreworICAgIFJldGFpblB0cjxXS1Njcm9sbGJhclBhaW50ZXJSZWY+IF9zY3JvbGxlclBhaW50
ZXI7CisgICAgV2ViQ29yZTo6U2Nyb2xsYmFyUGFydCBfcGFydDsKKyAgICBXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7CisgICAgQ0dGbG9hdCBfaW5pdGlhbEFs
cGhhOworICAgIENHRmxvYXQgX25ld0FscGhhOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxiYXJQ
YWludGVyOihXS1Njcm9sbGJhclBhaW50ZXJSZWYpc2Nyb2xsZXJQYWludGVyIHBhcnQ6KFdlYkNv
cmU6OlNjcm9sbGJhclBhcnQpcGFydCBzY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5p
bWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQp
bmV3QWxwaGEgZHVyYXRpb246KE5TVGltZUludGVydmFsKWR1cmF0aW9uOworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gU2Nyb2xsYmFyUGFydEFuaW1hdGlvbgorCistIChpZClpbml0V2l0aFNjcm9s
bGJhclBhaW50ZXI6KFdLU2Nyb2xsYmFyUGFpbnRlclJlZilzY3JvbGxlclBhaW50ZXIgcGFydDoo
V2ViQ29yZTo6U2Nyb2xsYmFyUGFydClwYXJ0IHNjcm9sbEFuaW1hdG9yOihXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjKilzY3JvbGxBbmltYXRvciBhbmltYXRlQWxwaGFUbzooQ0dG
bG9hdCluZXdBbHBoYSBkdXJhdGlvbjooTlNUaW1lSW50ZXJ2YWwpZHVyYXRpb24KK3sKKyAgICBz
ZWxmID0gW3N1cGVyIGluaXRXaXRoRHVyYXRpb246ZHVyYXRpb24gYW5pbWF0aW9uQ3VydmU6TlNB
bmltYXRpb25FYXNlSW5PdXRdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICAKKyAgICBfc2Nyb2xsZXJQYWludGVyID0gc2Nyb2xsZXJQYWludGVyOworICAgIF9wYXJ0
ID0gcGFydDsKKyAgICBfYW5pbWF0b3IgPSBzY3JvbGxBbmltYXRvcjsKKyAgICBfaW5pdGlhbEFs
cGhhID0gX3BhcnQgPT0gV2ViQ29yZTo6VGh1bWJQYXJ0ID8gd2tTY3JvbGxiYXJQYWludGVyS25v
YkFscGhhKF9zY3JvbGxlclBhaW50ZXIuZ2V0KCkpIDogd2tTY3JvbGxiYXJQYWludGVyVHJhY2tB
bHBoYShfc2Nyb2xsZXJQYWludGVyLmdldCgpKTsKKyAgICBfbmV3QWxwaGEgPSBuZXdBbHBoYTsK
KyAgICAKKyAgICByZXR1cm4gc2VsZjsgICAgCit9CisKKy0gKHZvaWQpc2V0Q3VycmVudFByb2dy
ZXNzOihOU0FuaW1hdGlvblByb2dyZXNzKXByb2dyZXNzCit7CisgICAgW3N1cGVyIHNldEN1cnJl
bnRQcm9ncmVzczpwcm9ncmVzc107CisKKyAgICBpZiAoIV9hbmltYXRvcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgQ0dGbG9hdCBjdXJyZW50QWxwaGE7CisgICAgaWYgKF9pbml0aWFsQWxwaGEg
PiBfbmV3QWxwaGEpCisgICAgICAgIGN1cnJlbnRBbHBoYSA9IDEgLSBwcm9ncmVzczsKKyAgICBl
bHNlCisgICAgICAgIGN1cnJlbnRBbHBoYSA9IHByb2dyZXNzOworICAgIAorICAgIGlmIChfcGFy
dCA9PSBXZWJDb3JlOjpUaHVtYlBhcnQpCisgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktu
b2JBbHBoYShfc2Nyb2xsZXJQYWludGVyLmdldCgpLCBjdXJyZW50QWxwaGEpOworICAgIGVsc2UK
KyAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShfc2Nyb2xsZXJQYWludGVy
LmdldCgpLCBjdXJyZW50QWxwaGEpOworCisgICAgLy8gSW52YWxpZGF0ZSB0aGUgc2Nyb2xsYmFy
cyBzbyB0aGF0IHRoZXkgcGFpbnQgdGhlIGFuaW1hdGlvbgorICAgIGlmIChXZWJDb3JlOjpTY3Jv
bGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT52
ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0
ZVJlY3QoV2ViQ29yZTo6SW50UmVjdCgwLCAwLCB2ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSwg
dmVydGljYWxTY3JvbGxiYXItPmhlaWdodCgpKSk7CisgICAgaWYgKFdlYkNvcmU6OlNjcm9sbGJh
ciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IF9hbmltYXRvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aG9y
aXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlk
YXRlUmVjdChXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIGhvcml6b250YWxTY3JvbGxiYXItPndpZHRo
KCksIGhvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKSk7Cit9CisKKy0gKHZvaWQpc2Nyb2xs
QW5pbWF0b3JEZXN0cm95ZWQKK3sKKyAgICBbc2VsZiBzdG9wQW5pbWF0aW9uXTsKKyAgICBfYW5p
bWF0b3IgPSAwOworfQorCitAZW5kCisKK0BpbnRlcmZhY2UgU2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlIDogTlNPYmplY3Q8TlNBbmltYXRpb25EZWxlZ2F0ZT4KK3sKKyAgICBXZWJDb3JlOjpTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjKiBfYW5pbWF0b3I7CisKKyAgICBSZXRhaW5QdHI8U2Nyb2xs
YmFyUGFydEFuaW1hdGlvbj4gX3ZlcnRpY2FsS25vYkFuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8
U2Nyb2xsYmFyUGFydEFuaW1hdGlvbj4gX2hvcml6b250YWxLbm9iQW5pbWF0aW9uOworCisgICAg
UmV0YWluUHRyPFNjcm9sbGJhclBhcnRBbmltYXRpb24+IF92ZXJ0aWNhbFRyYWNrQW5pbWF0aW9u
OworICAgIFJldGFpblB0cjxTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uPiBfaG9yaXpvbnRhbFRyYWNr
QW5pbWF0aW9uOworfQorLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3I7CistICh2b2lkKWNhbmNlbEFu
aW1hdGlvbnM7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBTY3JvbGxiYXJQYWludGVyRGVsZWdh
dGUKKworLSAoaWQpaW5pdFdpdGhTY3JvbGxBbmltYXRvcjooV2ViQ29yZTo6U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYyopc2Nyb2xsQW5pbWF0b3IKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRd
OworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBfYW5pbWF0
b3IgPSBzY3JvbGxBbmltYXRvcjsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCljYW5j
ZWxBbmltYXRpb25zCit7CisgICAgW192ZXJ0aWNhbEtub2JBbmltYXRpb24uZ2V0KCkgc3RvcEFu
aW1hdGlvbl07CisgICAgW19ob3Jpem9udGFsS25vYkFuaW1hdGlvbi5nZXQoKSBzdG9wQW5pbWF0
aW9uXTsKKyAgICBbX3ZlcnRpY2FsVHJhY2tBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07
CisgICAgW19ob3Jpem9udGFsVHJhY2tBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07Cit9
CisKKy0gKE5TUmVjdCljb252ZXJ0UmVjdFRvQmFja2luZzooTlNSZWN0KWFSZWN0Cit7CisgICAg
cmV0dXJuIGFSZWN0OworfQorCistIChOU1JlY3QpY29udmVydFJlY3RGcm9tQmFja2luZzooTlNS
ZWN0KWFSZWN0Cit7CisgICAgcmV0dXJuIGFSZWN0OworfQorCisjaWYgIVBMQVRGT1JNKENIUk9N
SVVNKQorLSAoQ0FMYXllciAqKWxheWVyCit7CisgICAgaWYgKCFfYW5pbWF0b3IpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgaWYgKCFfYW5pbWF0b3ItPmlzRHJhd2luZ0ludG9MYXllcigpKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGF0dGVtcHQg
dG8gcmV0dXJuIGFuIGFjdHVhbCBsYXllci4KKyAgICBzdGF0aWMgQ0FMYXllciAqZHVtbXlMYXll
ciA9IFtbQ0FMYXllciBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIGR1bW15TGF5ZXI7Cit9Cisj
ZW5kaWYKKworLSAodm9pZClzZXRVcEFuaW1hdGlvbjooUmV0YWluUHRyPFNjcm9sbGJhclBhcnRB
bmltYXRpb24+JilzY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjooV0tTY3Jv
bGxiYXJQYWludGVyUmVmKXNjcm9sbGVyUGFpbnRlciBwYXJ0OihXZWJDb3JlOjpTY3JvbGxiYXJQ
YXJ0KXBhcnQgYW5pbWF0ZUFscGhhVG86KENHRmxvYXQpbmV3QWxwaGEgZHVyYXRpb246KE5TVGlt
ZUludGVydmFsKWR1cmF0aW9uCit7CisgICAgLy8gSWYgdGhlIHVzZXIgaGFzIHNjcm9sbGVkIHRo
ZSBwYWdlLCB0aGVuIHRoZSBzY3JvbGxiYXJzIG11c3QgYmUgYW5pbWF0ZWQgaGVyZS4gCisgICAg
Ly8gVGhpcyBvdmVycmlkZXMgdGhlIGVhcmx5IHJldHVybnMuCisgICAgYm9vbCBtdXN0QW5pbWF0
ZSA9IF9hbmltYXRvci0+aGF2ZVNjcm9sbGVkU2luY2VQYWdlTG9hZCgpOworCisgICAgaWYgKF9h
bmltYXRvci0+c2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkgJiYgIW11c3RBbmltYXRlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoX2FuaW1hdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5z
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpICYmICFtdXN0QW5pbWF0ZSkgeworICAgICAg
ICBfYW5pbWF0b3ItPnN0YXJ0U2Nyb2xsYmFyUGFpbnRUaW1lcigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgYXJlIGRlZmluaXRlbHkgZ29pbmcg
dG8gYW5pbWF0ZSBub3csIHNvIHN0b3AgdGhlIHRpbWVyLgorICAgIF9hbmltYXRvci0+c3RvcFNj
cm9sbGJhclBhaW50VGltZXIoKTsKKworICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgYW5pbWF0
aW5nLCBzdG9wCisgICAgaWYgKHNjcm9sbGJhclBhcnRBbmltYXRpb24pIHsKKyAgICAgICAgW3Nj
cm9sbGJhclBhcnRBbmltYXRpb24uZ2V0KCkgc3RvcEFuaW1hdGlvbl07CisgICAgICAgIHNjcm9s
bGJhclBhcnRBbmltYXRpb24gPSBuaWw7CisgICAgfQorCisgICAgaWYgKHBhcnQgPT0gV2ViQ29y
ZTo6VGh1bWJQYXJ0ICYmICF3a1Njcm9sbGJhclBhaW50ZXJJc0hvcml6b250YWwoc2Nyb2xsZXJQ
YWludGVyKSkgeworICAgICAgICBpZiAobmV3QWxwaGEgPT0gMSkgeworICAgICAgICAgICAgSW50
UmVjdCB0aHVtYlJlY3QgPSBJbnRSZWN0KHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KHNjcm9s
bGVyUGFpbnRlcikpOworICAgICAgICAgICAgX2FuaW1hdG9yLT5zZXRWaXNpYmxlU2Nyb2xsZXJU
aHVtYlJlY3QodGh1bWJSZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBfYW5pbWF0
b3ItPnNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChJbnRSZWN0KCkpOworICAgIH0KKworICAg
IFtOU0FuaW1hdGlvbkNvbnRleHQgYmVnaW5Hcm91cGluZ107CisgICAgW1tOU0FuaW1hdGlvbkNv
bnRleHQgY3VycmVudENvbnRleHRdIHNldER1cmF0aW9uOmR1cmF0aW9uXTsKKyAgICBzY3JvbGxi
YXJQYXJ0QW5pbWF0aW9uLmFkb3B0TlMoW1tTY3JvbGxiYXJQYXJ0QW5pbWF0aW9uIGFsbG9jXSBp
bml0V2l0aFNjcm9sbGJhclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0
OnBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3I6X2FuaW1hdG9yIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bmltYXRlQWxwaGFUbzpuZXdBbHBoYSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ZHVyYXRpb25dKTsK
KyAgICBbc2Nyb2xsYmFyUGFydEFuaW1hdGlvbi5nZXQoKSBzZXRBbmltYXRpb25CbG9ja2luZ01v
ZGU6TlNBbmltYXRpb25Ob25ibG9ja2luZ107CisgICAgW3Njcm9sbGJhclBhcnRBbmltYXRpb24u
Z2V0KCkgc3RhcnRBbmltYXRpb25dOworICAgIFtOU0FuaW1hdGlvbkNvbnRleHQgZW5kR3JvdXBp
bmddOworfQorCistICh2b2lkKXNjcm9sbGVySW1wOihpZClzY3JvbGxlckltcCBhbmltYXRlS25v
YkFscGhhVG86KENHRmxvYXQpbmV3S25vYkFscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClk
dXJhdGlvbgoreworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBX
S1Njcm9sbGJhclBhaW50ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRl
clJlZilzY3JvbGxlckltcDsKKyAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFs
KHNjcm9sbGVyUGFpbnRlcikpCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9u
dGFsS25vYkFuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6V2Vi
Q29yZTo6VGh1bWJQYXJ0IGFuaW1hdGVBbHBoYVRvOm5ld0tub2JBbHBoYSBkdXJhdGlvbjpkdXJh
dGlvbl07CisgICAgZWxzZQorICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVydGljYWxL
bm9iQW5pbWF0aW9uIHNjcm9sbGVyUGFpbnRlcjpzY3JvbGxlclBhaW50ZXIgcGFydDpXZWJDb3Jl
OjpUaHVtYlBhcnQgYW5pbWF0ZUFscGhhVG86bmV3S25vYkFscGhhIGR1cmF0aW9uOmR1cmF0aW9u
XTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAgYW5pbWF0ZVRyYWNr
QWxwaGFUbzooQ0dGbG9hdCluZXdUcmFja0FscGhhIGR1cmF0aW9uOihOU1RpbWVJbnRlcnZhbClk
dXJhdGlvbgoreworICAgIGlmICghX2FuaW1hdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBX
S1Njcm9sbGJhclBhaW50ZXJSZWYgc2Nyb2xsZXJQYWludGVyID0gKFdLU2Nyb2xsYmFyUGFpbnRl
clJlZilzY3JvbGxlckltcDsKKyAgICBpZiAod2tTY3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFs
KHNjcm9sbGVyUGFpbnRlcikpCisgICAgICAgIFtzZWxmIHNldFVwQW5pbWF0aW9uOl9ob3Jpem9u
dGFsVHJhY2tBbmltYXRpb24gc2Nyb2xsZXJQYWludGVyOnNjcm9sbGVyUGFpbnRlciBwYXJ0Oldl
YkNvcmU6OkJhY2tUcmFja1BhcnQgYW5pbWF0ZUFscGhhVG86bmV3VHJhY2tBbHBoYSBkdXJhdGlv
bjpkdXJhdGlvbl07CisgICAgZWxzZQorICAgICAgICBbc2VsZiBzZXRVcEFuaW1hdGlvbjpfdmVy
dGljYWxUcmFja0FuaW1hdGlvbiBzY3JvbGxlclBhaW50ZXI6c2Nyb2xsZXJQYWludGVyIHBhcnQ6
V2ViQ29yZTo6QmFja1RyYWNrUGFydCBhbmltYXRlQWxwaGFUbzpuZXdUcmFja0FscGhhIGR1cmF0
aW9uOmR1cmF0aW9uXTsKK30KKworLSAodm9pZClzY3JvbGxlckltcDooaWQpc2Nyb2xsZXJJbXAg
b3ZlcmxheVNjcm9sbGVyU3RhdGVDaGFuZ2VkVG86KE5TVUludGVnZXIpbmV3T3ZlcmxheVNjcm9s
bGVyU3RhdGUKK3sKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xsZXJJbXApOworICAgIFVOVVNFRF9Q
QVJBTShuZXdPdmVybGF5U2Nyb2xsZXJTdGF0ZSk7Cit9CisKKy0gKHZvaWQpc2Nyb2xsQW5pbWF0
b3JEZXN0cm95ZWQKK3sKKyAgICBfYW5pbWF0b3IgPSAwOworICAgIFtfdmVydGljYWxLbm9iQW5p
bWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKKyAgICBbX2hvcml6b250YWxL
bm9iQW5pbWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKKyAgICBbX3ZlcnRp
Y2FsVHJhY2tBbmltYXRpb24uZ2V0KCkgc2Nyb2xsQW5pbWF0b3JEZXN0cm95ZWRdOworICAgIFtf
aG9yaXpvbnRhbFRyYWNrQW5pbWF0aW9uLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJveWVkXTsK
K30KKworQGVuZAorCisjZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1h
dG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQoreworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyhzY3JvbGxhYmxlQXJlYSkp
OworfQorCitzdGF0aWMgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYyogY2hyb21pdW1TY3JvbGxi
YXJUaGVtZSgpCit7CisgICAgU2Nyb2xsYmFyVGhlbWUqIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCk7CisgICAgcmV0dXJuICFzY3JvbGxiYXJUaGVtZS0+aXNNb2NrVGhl
bWUoKSA/IHN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqPihzY3JvbGxiYXJU
aGVtZSkgOiAwOworfQorCitTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IFNjcm9s
bEFuaW1hdG9yKHNjcm9sbGFibGVBcmVhKQorI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikK
KyAgICAsIG1faW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXIodGhpcywgJlNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQpCisjZW5kaWYKKyNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgLCBtX2luU2Nyb2xsR2VzdHVyZShmYWxzZSkK
KyAgICAsIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKGZhbHNlKQorICAgICwgbV9pZ25vcmVN
b21lbnR1bVNjcm9sbHMoZmFsc2UpCisgICAgLCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCgwKQorICAgICwgbV9zdGFydFRpbWUoMCkKKyAgICAsIG1fc25hcFJ1YmJlckJhbmRUaW1lcih0
aGlzLCAmU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVk
KQorI2VuZGlmCisgICAgLCBtX2RyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpCisgICAgLCBtX2hhdmVT
Y3JvbGxlZFNpbmNlUGFnZUxvYWQoZmFsc2UpCisgICAgLCBtX25lZWRzU2Nyb2xsZXJTdHlsZVVw
ZGF0ZShmYWxzZSkKK3sKKyAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmFkb3B0
TlMoW1tTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxB
bmltYXRvcjp0aGlzXSk7CisgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuYWRvcHROUyhbW05T
Q2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxBbmltYXRpb25IZWxwZXIiKSBhbGxvY10gaW5pdFdp
dGhEZWxlZ2F0ZTptX3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpXSk7CisKKyAg
ICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsK
KyAgICAgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlciA9IHdrTWFrZVNjcm9sbGJhclBh
aW50ZXJDb250cm9sbGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQo
KSk7CisgICAgICAgIG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmFkb3B0TlMoW1tTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwor
ICAgIH0KK30KKworU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6flNjcm9sbEFuaW1hdG9yQ2hy
b21pdW1NYWMoKQoreworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkg
eworICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlLmdldCgpIHNj
cm9sbEFuaW1hdG9yRGVzdHJveWVkXTsKKyAgICAgICAgWyhpZCltX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm5pbF07CisgICAgICAgIFttX3Njcm9sbGJhclBh
aW50ZXJEZWxlZ2F0ZS5nZXQoKSBzY3JvbGxBbmltYXRvckRlc3Ryb3llZF07CisgICAgICAgIFtt
X3Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlLmdldCgpIHNjcm9sbEFuaW1hdG9yRGVzdHJv
eWVkXTsKKyAgICB9Cit9CisKK2Jvb2wgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2Nyb2xs
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICBtX2hhdmVTY3Jv
bGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworCisjaWYgIUVOQUJMRShTTU9PVEhfU0NST0xMSU5H
KQorICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxh
cml0eSwgc3RlcCwgbXVsdGlwbGllcik7CisjZW5kaWYKKworICAgIGlmICghW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkFwcGxlU2Nyb2xsQW5pbWF0
aW9uRW5hYmxlZCJdIHx8ICFtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvckVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwob3JpZW50YXRpb24sIGdy
YW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKKworICAgIGlmIChncmFudWxhcml0eSA9PSBT
Y3JvbGxCeVBpeGVsKQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbChvcmll
bnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworCisgICAgZmxvYXQgY3Vy
cmVudFBvcyA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2N1cnJlbnRQ
b3NYIDogbV9jdXJyZW50UG9zWTsKKyAgICBmbG9hdCBuZXdQb3MgPSBzdGQ6Om1heDxmbG9hdD4o
c3RkOjptaW48ZmxvYXQ+KGN1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwg
MCk7CisgICAgaWYgKGN1cnJlbnRQb3MgPT0gbmV3UG9zKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBOU1BvaW50IG5ld1BvaW50OworICAgIGlmIChbbV9zY3JvbGxBbmltYXRpb25IZWxw
ZXIuZ2V0KCkgX2lzQW5pbWF0aW5nXSkgeworICAgICAgICBOU1BvaW50IHRhcmdldE9yaWdpbiA9
IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSB0YXJnZXRPcmlnaW5dOworICAgICAgICBu
ZXdQb2ludCA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBOU01ha2VQb2lu
dChuZXdQb3MsIHRhcmdldE9yaWdpbi55KSA6IE5TTWFrZVBvaW50KHRhcmdldE9yaWdpbi54LCBu
ZXdQb3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIG5ld1BvaW50ID0gb3JpZW50YXRpb24gPT0g
SG9yaXpvbnRhbFNjcm9sbGJhciA/IE5TTWFrZVBvaW50KG5ld1BvcywgbV9jdXJyZW50UG9zWSkg
OiBOU01ha2VQb2ludChtX2N1cnJlbnRQb3NYLCBuZXdQb3MpOworICAgICAgICBtX3Njcm9sbGFi
bGVBcmVhLT5kaWRTdGFydEFuaW1hdGVkU2Nyb2xsKCk7CisgICAgfQorICAgIFttX3Njcm9sbEFu
aW1hdGlvbkhlbHBlci5nZXQoKSBzY3JvbGxUb1BvaW50Om5ld1BvaW50XTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQoreworICAgIFttX3Nj
cm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfc3RvcFJ1bl07CisgICAgaW1tZWRpYXRlU2Nyb2xs
VG9Qb2ludChvZmZzZXQpOworfQorCitmbG9hdCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjph
ZGp1c3RTY3JvbGxYUG9zaXRpb25JZk5lY2Vzc2FyeShmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sK
KyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRF
ZGdlKCkpCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKworICAgIHJldHVybiBtYXg8ZmxvYXQ+
KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLndp
ZHRoKCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlV2lkdGgoKSksIDApOworfQorCitmbG9h
dCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphZGp1c3RTY3JvbGxZUG9zaXRpb25JZk5lY2Vz
c2FyeShmbG9hdCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEt
PmNvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCisgICAgICAgIHJldHVybiBwb3Np
dGlvbjsKKworICAgIHJldHVybiBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24sIG1fc2Ny
b2xsYWJsZUFyZWEtPmNvbnRlbnRzU2l6ZSgpLmhlaWdodCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+
dmlzaWJsZUhlaWdodCgpKSwgMCk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JDaHJv
bWl1bU1hYzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25JZk5lY2Vzc2FyeShjb25zdCBGbG9hdFBvaW50
JiBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEtPmNvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCkpCisgICAgICAgIHJldHVybiBwb3NpdGlvbjsKKwor
ICAgIGZsb2F0IG5ld1ggPSBtYXg8ZmxvYXQ+KG1pbjxmbG9hdD4ocG9zaXRpb24ueCgpLCBtX3Nj
cm9sbGFibGVBcmVhLT5jb250ZW50c1NpemUoKS53aWR0aCgpIC0gbV9zY3JvbGxhYmxlQXJlYS0+
dmlzaWJsZVdpZHRoKCkpLCAwKTsKKyAgICBmbG9hdCBuZXdZID0gbWF4PGZsb2F0PihtaW48Zmxv
YXQ+KHBvc2l0aW9uLnkoKSwgbV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0
KCkgLSBtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlSGVpZ2h0KCkpLCAwKTsKKworICAgIHJldHVy
biBGbG9hdFBvaW50KG5ld1gsIG5ld1kpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRp
b24pCit7CisgICAgRmxvYXRQb2ludCBhZGp1c3RlZFBvc2l0aW9uID0gYWRqdXN0U2Nyb2xsUG9z
aXRpb25JZk5lY2Vzc2FyeShuZXdQb3NpdGlvbik7CisgCisgICAgbV9jdXJyZW50UG9zWCA9IGFk
anVzdGVkUG9zaXRpb24ueCgpOworICAgIG1fY3VycmVudFBvc1kgPSBhZGp1c3RlZFBvc2l0aW9u
LnkoKTsKKyAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWChmbG9hdCBkZWx0YVgpCit7
CisgICAgZmxvYXQgbmV3UG9zWCA9IGFkanVzdFNjcm9sbFhQb3NpdGlvbklmTmVjZXNzYXJ5KG1f
Y3VycmVudFBvc1ggKyBkZWx0YVgpOworICAgIAorICAgIGlmIChuZXdQb3NYID09IG1fY3VycmVu
dFBvc1gpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRQb3NYID0gbmV3UG9z
WDsKKyAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRv
ckNocm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxCeURlbHRhWShmbG9hdCBkZWx0YVkpCit7Cisg
ICAgZmxvYXQgbmV3UG9zWSA9IGFkanVzdFNjcm9sbFlQb3NpdGlvbklmTmVjZXNzYXJ5KG1fY3Vy
cmVudFBvc1kgKyBkZWx0YVkpOworICAgIAorICAgIGlmIChuZXdQb3NZID09IG1fY3VycmVudFBv
c1kpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2N1cnJlbnRQb3NZID0gbmV3UG9zWTsK
KyAgICBub3RpZnlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNo
cm9taXVtTWFjOjppbW1lZGlhdGVTY3JvbGxUb1BvaW50Rm9yU2Nyb2xsQW5pbWF0aW9uKGNvbnN0
IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQoreworICAgIEFTU0VSVChtX3Njcm9sbEFuaW1hdGlv
bkhlbHBlcik7CisgICAgQ0dGbG9hdCBwcm9ncmVzcyA9IFttX3Njcm9sbEFuaW1hdGlvbkhlbHBl
ci5nZXQoKSBfcHJvZ3Jlc3NdOworICAgIAorICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3
UG9zaXRpb24pOworCisgICAgaWYgKHByb2dyZXNzID49IDEuMCkKKyAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYS0+ZGlkQ29tcGxldGVBbmltYXRlZFNjcm9sbCgpOworfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpCit7CisgICAgaWYgKGlz
U2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICB3a0NvbnRlbnRBcmVhU2Ny
b2xsZWQobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7CisgICAgU2Nyb2xsQW5p
bWF0b3I6Om5vdGlmeVBvc2l0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9y
Q2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhV2lsbFBhaW50KCkgY29uc3QKK3sKKyAgICBpZiAoaXNT
Y3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHdrQ29udGVudEFyZWFXaWxs
UGFpbnQobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Cit9CisKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKSBjb25zdAor
eworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgd2tN
b3VzZUVudGVyZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgp
KTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjptb3VzZUV4aXRlZENvbnRl
bnRBcmVhKCkgY29uc3QKK3sKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxl
KCkpCisgICAgICAgIHdrTW91c2VFeGl0ZWRDb250ZW50QXJlYShtX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpt
b3VzZU1vdmVkSW5Db250ZW50QXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGlzU2Nyb2xsYmFyT3Zl
cmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKG1f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworfQorCit2b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQoreworICAgIGlmIChpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgd2tXaWxsU3RhcnRMaXZlUmVzaXpl
KG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworfQorCit2b2lkIFNjcm9sbEFu
aW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRzUmVzaXplZCgpIGNvbnN0Cit7CisgICAgaWYgKGlz
U2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICB3a0NvbnRlbnRBcmVhUmVz
aXplZChtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKK30KKwordm9pZCBTY3Jv
bGxBbmltYXRvckNocm9taXVtTWFjOjp3aWxsRW5kTGl2ZVJlc2l6ZSgpCit7CisgICAgaWYgKGlz
U2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICB3a1dpbGxFbmRMaXZlUmVz
aXplKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkpOworfQorCit2b2lkIFNjcm9s
bEFuaW1hdG9yQ2hyb21pdW1NYWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0Cit7CisgICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICB3a0NvbnRlbnRB
cmVhRGlkU2hvdyhtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKK30KKwordm9p
ZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpjb250ZW50QXJlYURpZEhpZGUoKSBjb25zdAor
eworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgd2tD
b250ZW50QXJlYURpZEhpZGUobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Cit9
CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJl
KCkgY29uc3QKK3sKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisg
ICAgICAgIHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXIuZ2V0KCkpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmRpZEVuZFNj
cm9sbEdlc3R1cmUoKSBjb25zdAoreworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFp
bGFibGUoKSkKKyAgICAgICAgd2tEaWRFbmRTY3JvbGxHZXN0dXJlKG1fc2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXIuZ2V0KCkpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6
OmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGlm
ICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21p
dW1TY3JvbGxiYXJUaGVtZSgpKSB7CisgICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWlu
dGVyID0gdGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgd2tT
Y3JvbGxiYXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbV9zY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUuZ2V0KCkpOworICAgICAgICB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxlciht
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpLCBwYWludGVyLCBmYWxzZSk7CisgICAg
ICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKKyAgICAgICAgICAgIHdr
U2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVyLCAxKTsKKyAgICB9Cit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2lsbFJlbW92ZVZlcnRpY2FsU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJ
QXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjKiB0aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKSkgeworICAgICAgICBX
S1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFy
KHNjcm9sbGJhcik7CisgICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50
ZXIsIG5pbCk7CisgICAgICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKG1fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5pbCwgZmFsc2UpOworICAgIH0KK30KKwor
dm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFy
KFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJ
QXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjKiB0aGVtZSA9IGNocm9taXVtU2Nyb2xsYmFyVGhlbWUoKSkgeworICAgICAgICBX
S1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciA9IHRoZW1lLT5wYWludGVyRm9yU2Nyb2xsYmFy
KHNjcm9sbGJhcik7CisgICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKHBhaW50
ZXIsIG1fc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpKTsKKyAgICAgICAgd2tTZXRQYWlu
dGVyRm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQo
KSwgcGFpbnRlciwgdHJ1ZSk7CisgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVS
ZXNpemUoKSkKKyAgICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWlu
dGVyLCAxKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6d2ls
bFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAg
aWYgKCFpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMqIHRoZW1lID0gY2hyb21pdW1TY3Jv
bGxiYXJUaGVtZSgpKSB7CisgICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyID0g
dGhlbWUtPnBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKKyAgICAgICAgd2tTY3JvbGxi
YXJQYWludGVyU2V0RGVsZWdhdGUocGFpbnRlciwgbmlsKTsKKyAgICAgICAgd2tTZXRQYWludGVy
Rm9yUGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwg
bmlsLCB0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6
Y2FuY2VsQW5pbWF0aW9ucygpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0g
ZmFsc2U7CisKKyAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKKyAg
ICAgICAgaWYgKHNjcm9sbGJhclBhaW50VGltZXJJc0FjdGl2ZSgpKQorICAgICAgICAgICAgc3Rv
cFNjcm9sbGJhclBhaW50VGltZXIoKTsKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckRlbGVn
YXRlLmdldCgpIGNhbmNlbEFuaW1hdGlvbnNdOworICAgIH0KK30KKworI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKKworc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1Rp
bWVvdXQgPSAwLjEwZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kU3RpZmZuZXNzID0g
MjA7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0
aW8gPSAxOworc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0
YUJlZm9yZVN0cmV0Y2ggPSAxMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kQW1wbGl0
dWRlID0gMC4zMWY7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZFBlcmlvZCA9IDEuNmY7
CisKK3N0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEoZmxvYXQgaW5pdGlhbFBv
c2l0aW9uLCBmbG9hdCBpbml0aWFsVmVsb2NpdHksIGZsb2F0IGVsYXBzZWRUaW1lKQoreworICAg
IGZsb2F0IGFtcGxpdHVkZSA9IHJ1YmJlcmJhbmRBbXBsaXR1ZGU7CisgICAgZmxvYXQgcGVyaW9k
ID0gcnViYmVyYmFuZFBlcmlvZDsKKyAgICBmbG9hdCBjcml0aWNhbERhbXBlbmluZ0ZhY3RvciA9
IGV4cGYoKC1lbGFwc2VkVGltZSAqIHJ1YmJlcmJhbmRTdGlmZm5lc3MpIC8gcGVyaW9kKTsKKyAg
ICAgICAgICAgICAKKyAgICByZXR1cm4gKGluaXRpYWxQb3NpdGlvbiArICgtaW5pdGlhbFZlbG9j
aXR5ICogZWxhcHNlZFRpbWUgKiBhbXBsaXR1ZGUpKSAqIGNyaXRpY2FsRGFtcGVuaW5nRmFjdG9y
OworfQorCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGZsb2F0IGRl
bHRhKQoreworICAgIGZsb2F0IHN0aWZmbmVzcyA9IHN0ZDo6bWF4KHJ1YmJlcmJhbmRTdGlmZm5l
c3MsIDEuMGYpOworICAgIHJldHVybiBkZWx0YSAvIHN0aWZmbmVzczsKK30KKworc3RhdGljIGZs
b2F0IHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShmbG9hdCBkZWx0YSkKK3sKKyAgICByZXR1
cm4gZGVsdGEgKiBydWJiZXJiYW5kU3RpZmZuZXNzOworfQorCitzdGF0aWMgZmxvYXQgc2Nyb2xs
V2hlZWxNdWx0aXBsaWVyKCkKK3sKKyAgICBzdGF0aWMgZmxvYXQgbXVsdGlwbGllciA9IC0xOwor
ICAgIGlmIChtdWx0aXBsaWVyIDwgMCkgeworICAgICAgICBtdWx0aXBsaWVyID0gW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZmxvYXRGb3JLZXk6QCJOU1Njcm9sbFdoZWVs
TXVsdGlwbGllciJdOworICAgICAgICBpZiAobXVsdGlwbGllciA8PSAwKQorICAgICAgICAgICAg
bXVsdGlwbGllciA9IDE7CisgICAgfQorICAgIHJldHVybiBtdWx0aXBsaWVyOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNTY3JvbGxpbmdMZWZ0QW5kU2hvdWxkTm90UnViYmVyQmFuZChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSkKK3sKKyAgICByZXR1cm4gd2hlZWxFdmVudC5kZWx0YVgoKSA+IDAgJiYgIXNjcm9s
bGFibGVBcmVhLT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsTGVmdCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Njcm9sbGluZ1JpZ2h0QW5kU2hvdWxkTm90UnViYmVyQmFu
ZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGFibGVBcmVhKiBz
Y3JvbGxhYmxlQXJlYSkKK3sKKyAgICByZXR1cm4gd2hlZWxFdmVudC5kZWx0YVgoKSA8IDAgJiYg
IXNjcm9sbGFibGVBcmVhLT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsUmlnaHQp
OworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIG1faGF2ZVNjcm9s
bGVkU2luY2VQYWdlTG9hZCA9IHRydWU7CisKKyAgICBpZiAoIXdoZWVsRXZlbnQuaGFzUHJlY2lz
ZVNjcm9sbGluZ0RlbHRhcygpKQorICAgICAgICByZXR1cm4gU2Nyb2xsQW5pbWF0b3I6OmhhbmRs
ZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBzb21ld2hh
dCByb3VuZGFib3V0IGhhY2sgdG8gYWxsb3cgZm9yd2FyZGluZyB3aGVlbCBldmVudHMKKyAgICAv
LyB1cCB0byB0aGUgcGFyZW50IHNjcm9sbGFibGUgYXJlYS4gSXQgdGFrZXMgYWR2YW50YWdlIG9m
IHRoZSBmYWN0IHRoYXQKKyAgICAvLyB0aGUgYmFzZSBjbGFzcyBpbXBsZW1lbmF0YXRpb24gb2Yg
aGFuZGxlV2hlZWxFdmVudCB3aWxsIG5vdCBhY2NlcHQgdGhlCisgICAgLy8gd2hlZWwgZXZlbnQg
aWYgdGhlcmUgaXMgbm93aGVyZSB0byBzY3JvbGwuCisgICAgaWYgKGZhYnNmKHdoZWVsRXZlbnQu
ZGVsdGFZKCkpID49IGZhYnNmKHdoZWVsRXZlbnQuZGVsdGFYKCkpKSB7CisgICAgICAgIGlmICgh
YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQW5p
bWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpKQorICAgICAgICAgICAgcmV0dXJu
IFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgICAgICAK
KyAgICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXIoKSkgewor
ICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzY3JvbGxiYXIsIHdlIGFnZ3JlZ2F0ZSB0aGUg
d2hlZWwgZXZlbnRzIHRvIGdldCBhbgorICAgICAgICAgICAgLy8gb3ZlcmFsbCB0cmVuZCBvZiB0
aGUgc2Nyb2xsLiBJZiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzY3JvbGwgaXMgZXZlcgorICAgICAg
ICAgICAgLy8gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiB0aGUgcGluIGxvY2F0aW9uLCB0
aGVuIHdlIHN3aXRjaCB0aGUKKyAgICAgICAgICAgIC8vIGJvb2xlYW4sIGFuZCBydWJiZXIgYmFu
ZC4gVGhhdCBpcywgaWYgd2Ugd2VyZSBwaW5uZWQgdG8gdGhlIGxlZnQsCisgICAgICAgICAgICAv
LyBhbmQgd2UgZW5kZWQgdXAgc2Nyb2xsaW5nIHRvIHRoZSByaWdodCwgd2UgcnViYmVyIGJhbmQu
CisgICAgICAgICAgICBtX2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsICs9IHdoZWVsRXZlbnQu
ZGVsdGFYKCk7CisgICAgICAgICAgICBpZiAobV9zY3JvbGxlckluaXRpYWxseVBpbm5lZE9uTGVm
dCAmJiBtX2N1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsIDwgMCkKKyAgICAgICAgICAgICAgICBt
X2RpZEN1bXVsYXRpdmVIb3Jpem9udGFsU2Nyb2xsRXZlclN3aXRjaFRvT3Bwb3NpdGVEaXJlY3Rp
b25PZlBpbiA9IHRydWU7CisgICAgICAgICAgICBpZiAobV9zY3JvbGxlckluaXRpYWxseVBpbm5l
ZE9uUmlnaHQgJiYgbV9jdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbCA+IDApCisgICAgICAgICAg
ICAgICAgbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2ZXJTd2l0Y2hUb09wcG9zaXRl
RGlyZWN0aW9uT2ZQaW4gPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWZ0ZXIgYSBn
ZXN0dXJlIGJlZ2lucywgd2UgZ28gdGhyb3VnaDoKKyAgICAgICAgLy8gMSsgUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VOb25lCisgICAgICAgIC8vIDArIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hh
bmdlZAorICAgICAgICAvLyAxIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQgaWYgdGhlcmUg
d2FzIGF0IGxlYXN0IG9uZSBjaGFuZ2VkIGV2ZW50CisgICAgICAgIGlmICh3aGVlbEV2ZW50Lm1v
bWVudHVtUGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUgJiYgIW1fZGlkQ3Vt
dWxhdGl2ZUhvcml6b250YWxTY3JvbGxFdmVyU3dpdGNoVG9PcHBvc2l0ZURpcmVjdGlvbk9mUGlu
KSB7CisgICAgICAgICAgICBpZiAoKGlzU2Nyb2xsaW5nTGVmdEFuZFNob3VsZE5vdFJ1YmJlckJh
bmQod2hlZWxFdmVudCwgbV9zY3JvbGxhYmxlQXJlYSkgJiYKKyAgICAgICAgICAgICAgICBtX3Nj
cm9sbGVySW5pdGlhbGx5UGlubmVkT25MZWZ0ICYmCisgICAgICAgICAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01pbmltdW1Qb3NpdGlvbigpKSB8
fAorICAgICAgICAgICAgICAgIChpc1Njcm9sbGluZ1JpZ2h0QW5kU2hvdWxkTm90UnViYmVyQmFu
ZCh3aGVlbEV2ZW50LCBtX3Njcm9sbGFibGVBcmVhKSAmJgorICAgICAgICAgICAgICAgIG1fc2Ny
b2xsZXJJbml0aWFsbHlQaW5uZWRPblJpZ2h0ICYmCisgICAgICAgICAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYS0+aXNIb3Jpem9udGFsU2Nyb2xsZXJQaW5uZWRUb01heGltdW1Qb3NpdGlvbigpKSkg
eworICAgICAgICAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVu
dCh3aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgaXNNb21lbnR1bVNjcm9sbEV2ZW50ID0gKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpICE9
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSk7CisgICAgaWYgKG1faWdub3JlTW9tZW50dW1T
Y3JvbGxzICYmIChpc01vbWVudHVtU2Nyb2xsRXZlbnQgfHwgbV9zbmFwUnViYmVyQmFuZFRpbWVy
LmlzQWN0aXZlKCkpKSB7CisgICAgICAgIGlmICh3aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2UoKSA9
PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7CisgICAgICAgICAgICBtX2lnbm9yZU1v
bWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNtb290aFNjcm9sbFdpdGhF
dmVudCh3aGVlbEV2ZW50KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTY3JvbGxBbmlt
YXRvckNocm9taXVtTWFjOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJl
RXZlbnQmIGdlc3R1cmVFdmVudCkKK3sKKyAgICBpZiAoZ2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQ
bGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW4pCisgICAgICAgIGJlZ2luU2Nyb2xsR2Vz
dHVyZSgpOworICAgIGVsc2UgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVNjcm9sbEVuZCkKKyAgICAgICAgZW5kU2Nyb2xsR2VzdHVyZSgpOworfQorCiti
b29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnBpbm5lZEluRGlyZWN0aW9uKGZsb2F0IGRl
bHRhWCwgZmxvYXQgZGVsdGFZKQoreworICAgIEZsb2F0U2l6ZSBsaW1pdERlbHRhOworICAgIGlm
IChmYWJzZihkZWx0YVkpID49IGZhYnNmKGRlbHRhWCkpIHsKKyAgICAgICAgaWYgKGRlbHRhWSA8
IDApIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIHVwLiAgTWFrZSBz
dXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSB0b3AKKyAgICAgICAgICAgIGxpbWl0RGVsdGEu
c2V0SGVpZ2h0KG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLnkoKSArICsg
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gc2Nyb2xsIGRvd24uICBNYWtlIHN1cmUg
d2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIGJvdHRvbQorICAgICAgICAgICAgbGltaXREZWx0YS5z
ZXRIZWlnaHQobV9zY3JvbGxhYmxlQXJlYS0+Y29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSAobV9z
Y3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubWF4WSgpICsgbV9zY3JvbGxhYmxl
QXJlYS0+c2Nyb2xsT3JpZ2luKCkueSgpKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGRl
bHRhWCAhPSAwKSB7CisgICAgICAgIGlmIChkZWx0YVggPCAwKSB7CisgICAgICAgICAgICAvLyBX
ZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVk
IHRvIHRoZSBsZWZ0CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldFdpZHRoKG1fc2Nyb2xsYWJs
ZUFyZWEtPnZpc2libGVDb250ZW50UmVjdCgpLngoKSArIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bE9yaWdpbigpLngoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBhcmUg
dHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0
aGUgcmlnaHQKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0V2lkdGgobV9zY3JvbGxhYmxlQXJl
YS0+Y29udGVudHNTaXplKCkud2lkdGgoKSAtIChtX3Njcm9sbGFibGVBcmVhLT52aXNpYmxlQ29u
dGVudFJlY3QoKS5tYXhYKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKS54KCkp
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoKGRlbHRhWCAhPSAwIHx8IGRlbHRh
WSAhPSAwKSAmJiAobGltaXREZWx0YS53aWR0aCgpIDwgMSAmJiBsaW1pdERlbHRhLmhlaWdodCgp
IDwgMSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBj
b25zdAoreworICAgIHN3aXRjaCAobV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxFbGFz
dGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6IHsKKyAgICAg
ICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Ny
b2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJl
YS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAgcmV0dXJuICgoKHZTY3JvbGxlciAmJiB2
U2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCFoU2Nyb2xsZXIgfHwgIWhTY3JvbGxlci0+ZW5hYmxl
ZCgpKSkpOworICAgIH0KKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmFsbG93c0hv
cml6b250YWxTdHJldGNoaW5nKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc2Nyb2xsYWJsZUFy
ZWEtPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0
aWNpdHlBdXRvbWF0aWM6IHsKKyAgICAgICAgU2Nyb2xsYmFyKiBoU2Nyb2xsZXIgPSBtX3Njcm9s
bGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgICAgIFNjcm9sbGJhciogdlNj
cm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICAgICAg
cmV0dXJuICgoKGhTY3JvbGxlciAmJiBoU2Nyb2xsZXItPmVuYWJsZWQoKSkgfHwgKCF2U2Nyb2xs
ZXIgfHwgIXZTY3JvbGxlci0+ZW5hYmxlZCgpKSkpOworICAgIH0KKyAgICBjYXNlIFNjcm9sbEVs
YXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFz
dGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNjcm9sbEFuaW1h
dG9yQ2hyb21pdW1NYWM6OnNtb290aFNjcm9sbFdpdGhFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0g
dHJ1ZTsKKworICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgp
OworICAgIGZsb2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKTsKKwor
ICAgIC8vIFJlc2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gcmVt
b3ZlIGRlbHRhIGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBvdmVyZmxvdy4KKyAg
ICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKKworICAgIGZsb2F0IGV2ZW50
Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQuZGVsdGFYKCk7CisgICAgZmxvYXQgZXZlbnRD
b2FsZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVudC5kZWx0YVkoKTsKKworICAgIGRlbHRhWCArPSBl
dmVudENvYWxlc2NlZERlbHRhWDsKKyAgICBkZWx0YVkgKz0gZXZlbnRDb2FsZXNjZWREZWx0YVk7
CisKKyAgICAvLyBTbGlnaHRseSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRpY2FsbHkgYnkgYXBwbHlp
bmcgdGhlID0gY2FzZSB0byBkZWx0YVkKKyAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBmYWJzZihk
ZWx0YVgpKQorICAgICAgICBkZWx0YVggPSAwOworICAgIGVsc2UKKyAgICAgICAgZGVsdGFZID0g
MDsKKworICAgIGJvb2wgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkID0gZmFsc2U7CisgICAgYm9vbCBp
c0hvcml6b250YWxseVN0cmV0Y2hlZCA9IGZhbHNlOworICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9
IGZhbHNlOworICAgIAorICAgIEludFNpemUgc3RyZXRjaEFtb3VudCA9IG1fc2Nyb2xsYWJsZUFy
ZWEtPm92ZXJoYW5nQW1vdW50KCk7CisKKyAgICBpc0hvcml6b250YWxseVN0cmV0Y2hlZCA9IHN0
cmV0Y2hBbW91bnQud2lkdGgoKTsKKyAgICBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgPSBzdHJldGNo
QW1vdW50LmhlaWdodCgpOworCisgICAgUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UgcGhhc2UgPSB3
aGVlbEV2ZW50Lm1vbWVudHVtUGhhc2UoKTsKKworICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBt
b21lbnR1bSBzY3JvbGxpbmcgdGhlbiBkbyBzb21lIHNldHVwLgorICAgIGlmICghbV9tb21lbnR1
bVNjcm9sbEluUHJvZ3Jlc3MgJiYgKHBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVn
YW4gfHwgcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkKSkKKyAgICAgICAg
bV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSB0cnVlOworCisgICAgQ0ZUaW1lSW50ZXJ2YWwg
dGltZURlbHRhID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xs
VGltZXN0YW1wOworICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xs
SW5Qcm9ncmVzcykgeworICAgICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAg
JiYgdGltZURlbHRhID4gMCAmJiB0aW1lRGVsdGEgPCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1l
b3V0KSB7CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0V2lkdGgoZXZlbnRDb2Fs
ZXNjZWREZWx0YVggLyAoZmxvYXQpdGltZURlbHRhKTsKKyAgICAgICAgICAgIG1fbW9tZW50dW1W
ZWxvY2l0eS5zZXRIZWlnaHQoZXZlbnRDb2FsZXNjZWREZWx0YVkgLyAoZmxvYXQpdGltZURlbHRh
KTsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVu
dC50aW1lc3RhbXAoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fbGFzdE1vbWVu
dHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKKyAgICAgICAgICAg
IG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCkgeworICAgICAgICAgICAgaWYgKCFpc0hvcml6b250
YWxseVN0cmV0Y2hlZCAmJiBwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIDApKSB7ICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUgdmVydGlj
YWwuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAhPSAwICYmIChmYWJzZihkZWx0YVggLyBk
ZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQorICAgICAgICAg
ICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRl
bHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJm
bG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICAgICAgICAgIGRl
bHRhWCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgo
KSArIGRlbHRhWCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXNIb3Jpem9u
dGFsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcgb25seSBpbiB0aGUg
aG9yaXpvbnRhbC4KKyAgICAgICAgICAgIGlmIChwaW5uZWRJbkRpcmVjdGlvbigwLCBkZWx0YVkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWCAhPSAwICYmIChmYWJzZihkZWx0YVkgLyBk
ZWx0YVgpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQorICAgICAgICAg
ICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRl
bHRhWSkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVy
Zmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
bV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVp
Z2h0KCkgKyBkZWx0YVkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gTm90IHN0cmV0Y2hpbmcgYXQgYWxsIHlldC4KKyAgICAgICAgICAgIGlmIChwaW5u
ZWRJbkRpcmVjdGlvbihkZWx0YVgsIGRlbHRhWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmFi
c2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChm
YWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRj
aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdp
ZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVsdGFYICE9IDAgfHwgZGVsdGFZICE9IDApIHsKKyAg
ICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNI
b3Jpem9udGFsbHlTdHJldGNoZWQpKSB7CisgICAgICAgICAgICBpZiAoZGVsdGFZICE9IDApIHsK
KyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7CisgICAg
ICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsQnlEZWx0YVkoZGVsdGFZKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChkZWx0YVggIT0gMCkgeworICAgICAgICAgICAgICAgIGRlbHRh
WCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAgICAgICAgICAgICBpbW1lZGlhdGVT
Y3JvbGxCeURlbHRhWChkZWx0YVgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKCFhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpKSB7CisgICAgICAg
ICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgICAgICBldmVudENvYWxlc2NlZERlbHRh
WCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKChkZWx0YVggIT0gMCkgJiYgIWlzSG9yaXpv
bnRhbGx5U3RyZXRjaGVkICYmICFwaW5uZWRJbkRpcmVjdGlvbihkZWx0YVgsIDApKSB7CisgICAg
ICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOworCisgICAgICAg
ICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVu
dEVkZ2UoZmFsc2UpOworICAgICAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbEJ5RGVsdGFYKGRl
bHRhWCk7CisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0Q29uc3RyYWluc1Nj
cm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBkZWx0YVggPSAw
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWFsbG93c1Zl
cnRpY2FsU3RyZXRjaGluZygpKSB7CisgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAg
ICAgICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IDA7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKChkZWx0YVkgIT0gMCkgJiYgIWlzVmVydGljYWxseVN0cmV0Y2hlZCAmJiAhcGlubmVkSW5E
aXJlY3Rpb24oMCwgZGVsdGFZKSkgeworICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxX
aGVlbE11bHRpcGxpZXIoKTsKKworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNl
dENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBpbW1lZGlhdGVTY3JvbGxCeURlbHRhWShkZWx0YVkpOworICAgICAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKHRydWUpOwor
CisgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9zY3JvbGxhYmxlQXJlYS0+
b3ZlcmhhbmdBbW91bnQoKTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAobV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoKHBpbm5lZEluRGlyZWN0aW9u
KGV2ZW50Q29hbGVzY2VkRGVsdGFYLCBldmVudENvYWxlc2NlZERlbHRhWSkgfHwgKGZhYnNmKGV2
ZW50Q29hbGVzY2VkRGVsdGFYKSArIGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFZKSA8PSAwKSkg
JiYgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXApIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX21v
bWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzbmFw
UnViYmVyQmFuZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uu
d2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRI
ZWlnaHQobV9zdHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkgKyBkZWx0YVkpOworCisgICAgICAg
ICAgICBGbG9hdFNpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERl
bHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9y
UmVib3VuZERlbHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpKSkpOworICAgICAgICAg
ICAgRmxvYXRQb2ludCBvcmlnT3JpZ2luID0gKG1fc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250
ZW50UmVjdCgpLmxvY2F0aW9uKCkgKyBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKSkg
LSBzdHJldGNoQW1vdW50OworICAgICAgICAgICAgRmxvYXRQb2ludCBuZXdPcmlnaW4gPSBvcmln
T3JpZ2luICsgZGFtcGVkRGVsdGE7CisKKyAgICAgICAgICAgIGlmIChvcmlnT3JpZ2luICE9IG5l
d09yaWdpbikgeworICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpbW1lZGlh
dGVTY3JvbGxUb1BvaW50KG5ld09yaWdpbik7CisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UodHJ1ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJv
Z3Jlc3MgJiYgcGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCkgeworICAgICAg
ICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICBtX2lnbm9yZU1v
bWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVz
dGFtcCA9IDA7CisgICAgfQorfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OmJl
Z2luU2Nyb2xsR2VzdHVyZSgpCit7CisgICAgZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCk7CisKKyAg
ICBtX2hhdmVTY3JvbGxlZFNpbmNlUGFnZUxvYWQgPSB0cnVlOworICAgIG1faW5TY3JvbGxHZXN0
dXJlID0gdHJ1ZTsKKyAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOworICAg
IG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CisgICAgbV9sYXN0TW9tZW50dW1TY3Jv
bGxUaW1lc3RhbXAgPSAwOworICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwor
ICAgIG1fc2Nyb2xsZXJJbml0aWFsbHlQaW5uZWRPbkxlZnQgPSBtX3Njcm9sbGFibGVBcmVhLT5p
c0hvcml6b250YWxTY3JvbGxlclBpbm5lZFRvTWluaW11bVBvc2l0aW9uKCk7CisgICAgbV9zY3Jv
bGxlckluaXRpYWxseVBpbm5lZE9uUmlnaHQgPSBtX3Njcm9sbGFibGVBcmVhLT5pc0hvcml6b250
YWxTY3JvbGxlclBpbm5lZFRvTWF4aW11bVBvc2l0aW9uKCk7CisgICAgbV9jdW11bGF0aXZlSG9y
aXpvbnRhbFNjcm9sbCA9IDA7CisgICAgbV9kaWRDdW11bGF0aXZlSG9yaXpvbnRhbFNjcm9sbEV2
ZXJTd2l0Y2hUb09wcG9zaXRlRGlyZWN0aW9uT2ZQaW4gPSBmYWxzZTsKKyAgICAKKyAgICBJbnRT
aXplIHN0cmV0Y2hBbW91bnQgPSBtX3Njcm9sbGFibGVBcmVhLT5vdmVyaGFuZ0Ftb3VudCgpOwor
ICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNE
ZWx0YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKKyAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5z
ZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQuaGVpZ2h0
KCkpKTsKKworICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworICAgIAor
ICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zbmFw
UnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVt
TWFjOjplbmRTY3JvbGxHZXN0dXJlKCkKK3sKKyAgICBkaWRFbmRTY3JvbGxHZXN0dXJlKCk7CisK
KyAgICBzbmFwUnViYmVyQmFuZCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1N
YWM6OnNuYXBSdWJiZXJCYW5kKCkKK3sKKyAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBb
W05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5c3RlbVVwdGltZV0gLSBtX2xhc3RNb21lbnR1
bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAg
JiYgdGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCisgICAgICAgIG1f
bW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgbV9pblNjcm9sbEdlc3R1cmUg
PSBmYWxzZTsKKworICAgIGlmIChtX3NuYXBSdWJiZXJCYW5kVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNp
bmNlUmVmZXJlbmNlRGF0ZV07CisgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAg
ICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9h
dFNpemUoKTsKKworICAgIG1fc25hcFJ1YmJlckJhbmRUaW1lci5zdGFydFJlcGVhdGluZygxLjAv
NjAuMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51
bSkKK3sKKyAgICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51
bSArIDAuNWYpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRv
d2FyZFplcm8oZmxvYXQgbnVtKQoreworICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVt
KTsKKyAgICBpZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQorICAgICAgICBudW0g
PSByb3VuZGVkTnVtOworCisgICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOworfQorCit2
b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZChU
aW1lcjxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjPiopCit7CisgICAgaWYgKCFtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgeworICAgICAgICBD
RlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV0gLSBtX3N0YXJ0VGltZTsKKworICAgICAgICBpZiAobV9zdGFydFN0cmV0Y2ggPT0g
RmxvYXRTaXplKCkpIHsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gbV9zY3JvbGxhYmxl
QXJlYS0+b3ZlcmhhbmdBbW91bnQoKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9
PSBGbG9hdFNpemUoKSkgeyAgICAKKyAgICAgICAgICAgICAgICBtX3NuYXBSdWJiZXJCYW5kVGlt
ZXIuc3RvcCgpOworICAgICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRT
aXplKCk7CisgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICAgICAgICAg
IG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICAgICAgbV9vcmlnT3Jp
Z2luID0gRmxvYXRQb2ludCgpOworICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxv
YXRTaXplKCk7CisKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZFN0YXJ0UnViYmVyQmFuZChyb3VuZGVkSW50
U2l6ZShtX3N0YXJ0U3RyZXRjaCkpOworCisgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSAobV9z
Y3JvbGxhYmxlQXJlYS0+dmlzaWJsZUNvbnRlbnRSZWN0KCkubG9jYXRpb24oKSArIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbE9yaWdpbigpKSAtIG1fc3RhcnRTdHJldGNoOworICAgICAgICAgICAg
bV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2NpdHk7CisKKyAgICAgICAgICAgIC8vIEp1
c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIgdmVydGljYWwgcnViYmVyYmFuZGluZwor
ICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpKSA+PSBmYWJzZiht
X29yaWdWZWxvY2l0eS53aWR0aCgpKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5z
ZXRXaWR0aCgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJh
bmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFs
bHkKKyAgICAgICAgICAgIFNjcm9sbGJhciogaFNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+
aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgICAgICAgICAgaWYgKCFoU2Nyb2xsZXIgfHwgIWhT
Y3JvbGxlci0+ZW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdp
ZHRoKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCB2
ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkKKyAg
ICAgICAgICAgIFNjcm9sbGJhciogdlNjcm9sbGVyID0gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGlj
YWxTY3JvbGxiYXIoKTsKKyAgICAgICAgICAgIGlmICghdlNjcm9sbGVyIHx8ICF2U2Nyb2xsZXIt
PmVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRIZWlnaHQoMCk7
CisgICAgICAgIH0KKworICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhl
bFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRo
KCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURlbHRhKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVs
dGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1tX29yaWdWZWxvY2l0eS5o
ZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKKworICAgICAgICBpZiAoZmFicyhkZWx0YS54
KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKKyAgICAgICAgICAgIEZsb2F0UG9p
bnQgbmV3T3JpZ2luID0gbV9vcmlnT3JpZ2luICsgZGVsdGE7CisKKyAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsK
KyAgICAgICAgICAgIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQobmV3T3JpZ2luKTsKKyAgICAgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KHRydWUpOworCisgICAgICAgICAgICBGbG9hdFNpemUgbmV3U3RyZXRjaCA9IG1fc2Nyb2xsYWJs
ZUFyZWEtPm92ZXJoYW5nQW1vdW50KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3Ry
ZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdT
dHJldGNoLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhl
aWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChtX29y
aWdPcmlnaW4pOworCisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5kaWRDb21wbGV0ZVJ1
YmJlckJhbmQocm91bmRlZEludFNpemUobV9zdGFydFN0cmV0Y2gpKTsKKworICAgICAgICAgICAg
bV9zbmFwUnViYmVyQmFuZFRpbWVyLnN0b3AoKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9s
bEZvcmNlID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3RhcnRU
aW1lID0gMDsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAg
ICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgICAgICAgICBtX29yaWdW
ZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV07Cisg
ICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7CisgICAgfQorfQorI2VuZGlmCisK
K3ZvaWQgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYzo6c2V0SXNBY3RpdmUoKQoreworICAgIGlm
IChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICBpZiAobmVlZHNT
Y3JvbGxlclN0eWxlVXBkYXRlKCkpCisgICAgICAgICAgICB1cGRhdGVTY3JvbGxlclN0eWxlKCk7
CisgICAgfQorfQorCisjaWYgVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQordm9pZCBTY3JvbGxB
bmltYXRvckNocm9taXVtTWFjOjp1cGRhdGVTY3JvbGxlclN0eWxlKCkKK3sKKyAgICBpZiAoIXNj
cm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpIHsKKyAgICAgICAgc2V0TmVlZHNTY3Jv
bGxlclN0eWxlVXBkYXRlKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYyogbWFjVGhlbWUgPSBjaHJvbWl1bVNjcm9sbGJhclRoZW1l
KCk7CisgICAgaWYgKCFtYWNUaGVtZSkgeworICAgICAgICBzZXROZWVkc1Njcm9sbGVyU3R5bGVV
cGRhdGUoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IG5ld1N0eWxl
ID0gd2tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKG1fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkpOworCisgICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIg
PSBzY3JvbGxhYmxlQXJlYSgpLT52ZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgIHZlcnRp
Y2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisKKyAgICAgICAgV0tTY3JvbGxiYXJQYWludGVy
UmVmIG9sZFZlcnRpY2FsUGFpbnRlciA9IHdrVmVydGljYWxTY3JvbGxiYXJQYWludGVyRm9yQ29u
dHJvbGxlcihtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpKTsKKyAgICAgICAgV0tT
Y3JvbGxiYXJQYWludGVyUmVmIG5ld1ZlcnRpY2FsUGFpbnRlciA9IHdrTWFrZVNjcm9sbGJhclJl
cGxhY2VtZW50UGFpbnRlcihvbGRWZXJ0aWNhbFBhaW50ZXIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3U3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxT
Y3JvbGxiYXItPmNvbnRyb2xTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UpOworICAgICAgICBtYWNUaGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcih2ZXJ0aWNh
bFNjcm9sbGJhciwgbmV3VmVydGljYWxQYWludGVyKTsKKyAgICAgICAgd2tTZXRQYWludGVyRm9y
UGFpbnRlckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSwgbmV3
VmVydGljYWxQYWludGVyLCBmYWxzZSk7CisKKyAgICAgICAgLy8gVGhlIGRpZmZlcmVudCBzY3Jv
bGxiYXIgc3R5bGVzIGhhdmUgZGlmZmVyZW50IHRoaWNrbmVzc2VzLCBzbyB3ZSBtdXN0IHJlLXNl
dCB0aGUgCisgICAgICAgIC8vIGZyYW1lUmVjdCB0byB0aGUgbmV3IHRoaWNrbmVzcywgYW5kIHRo
ZSByZS1sYXlvdXQgYmVsb3cgd2lsbCBlbnN1cmUgdGhlIHBvc2l0aW9uCisgICAgICAgIC8vIGFu
ZCBsZW5ndGggYXJlIHByb3Blcmx5IHVwZGF0ZWQuCisgICAgICAgIGludCB0aGlja25lc3MgPSBt
YWNUaGVtZS0+c2Nyb2xsYmFyVGhpY2tuZXNzKHZlcnRpY2FsU2Nyb2xsYmFyLT5jb250cm9sU2l6
ZSgpKTsKKyAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAs
IDAsIHRoaWNrbmVzcywgdGhpY2tuZXNzKSk7CisgICAgfQorCisgICAgaWYgKFNjcm9sbGJhciog
aG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVBcmVhKCktPmhvcml6b250YWxTY3JvbGxi
YXIoKSkgeworICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CisKKyAg
ICAgICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIG9sZEhvcml6b250YWxQYWludGVyID0gd2tIb3Jp
em9udGFsU2Nyb2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIobV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlci5nZXQoKSk7CisgICAgICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBuZXdIb3Jpem9u
dGFsUGFpbnRlciA9IHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihvbGRIb3Jpem9u
dGFsUGFpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0eWxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJvbFNp
emUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOworICAgICAgICBtYWNU
aGVtZS0+c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihob3Jpem9udGFsU2Nyb2xsYmFyLCBuZXdI
b3Jpem9udGFsUGFpbnRlcik7CisgICAgICAgIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9s
bGVyKG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCksIG5ld0hvcml6b250YWxQYWlu
dGVyLCB0cnVlKTsKKworICAgICAgICAvLyBUaGUgZGlmZmVyZW50IHNjcm9sbGJhciBzdHlsZXMg
aGF2ZSBkaWZmZXJlbnQgdGhpY2tuZXNzZXMsIHNvIHdlIG11c3QgcmUtc2V0IHRoZSAKKyAgICAg
ICAgLy8gZnJhbWVSZWN0IHRvIHRoZSBuZXcgdGhpY2tuZXNzLCBhbmQgdGhlIHJlLWxheW91dCBi
ZWxvdyB3aWxsIGVuc3VyZSB0aGUgcG9zaXRpb24KKyAgICAgICAgLy8gYW5kIGxlbmd0aCBhcmUg
cHJvcGVybHkgdXBkYXRlZC4KKyAgICAgICAgaW50IHRoaWNrbmVzcyA9IG1hY1RoZW1lLT5zY3Jv
bGxiYXJUaGlja25lc3MoaG9yaXpvbnRhbFNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisgICAg
ICAgIGhvcml6b250YWxTY3JvbGxiYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KDAsIDAsIHRoaWNr
bmVzcywgdGhpY2tuZXNzKSk7CisgICAgfQorCisgICAgLy8gSWYgbmVlZHNTY3JvbGxlclN0eWxl
VXBkYXRlKCkgaXMgdHJ1ZSwgdGhlbiB0aGUgcGFnZSBpcyByZXN0b3JpbmcgZnJvbSB0aGUgcGFn
ZSBjYWNoZSwgYW5kIAorICAgIC8vIGEgcmVsYXlvdXQgd2lsbCBoYXBwZW4gb24gaXRzIG93bi4g
T3RoZXJ3aXNlLCB3ZSBtdXN0IGluaXRpYXRlIGEgcmUtbGF5b3V0IG91cnNlbHZlcy4KKyAgICBz
Y3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxiYXJTdHlsZUNoYW5nZWQobmV3U3R5bGUsICFuZWVkc1Nj
cm9sbGVyU3R5bGVVcGRhdGUoKSk7CisKKyAgICBzZXROZWVkc1Njcm9sbGVyU3R5bGVVcGRhdGUo
ZmFsc2UpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21pdW1NYWM6OnN0YXJ0U2Nyb2xs
YmFyUGFpbnRUaW1lcigpCit7CisgICAgbV9pbml0aWFsU2Nyb2xsYmFyUGFpbnRUaW1lci5zdGFy
dE9uZVNob3QoMC4xKTsKK30KKworYm9vbCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzY3Jv
bGxiYXJQYWludFRpbWVySXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2luaXRpYWxT
Y3JvbGxiYXJQYWludFRpbWVyLmlzQWN0aXZlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JD
aHJvbWl1bU1hYzo6c3RvcFNjcm9sbGJhclBhaW50VGltZXIoKQoreworICAgIG1faW5pdGlhbFNj
cm9sbGJhclBhaW50VGltZXIuc3RvcCgpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yQ2hyb21p
dW1NYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsQW5pbWF0
b3JDaHJvbWl1bU1hYz4qKQoreworICAgIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3Jv
bGxlcnMobV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSk7Cit9CisjZW5kaWYKKwor
dm9pZCBTY3JvbGxBbmltYXRvckNocm9taXVtTWFjOjpzZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJl
Y3QoY29uc3QgSW50UmVjdCYgc2Nyb2xsZXJUaHVtYikKK3sKKyAgICBJbnRSZWN0IHJlY3RJblZp
ZXdDb29yZGluYXRlcyA9IHNjcm9sbGVyVGh1bWI7CisgICAgaWYgKFNjcm9sbGJhciogdmVydGlj
YWxTY3JvbGxiYXIgPSBtX3Njcm9sbGFibGVBcmVhLT52ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAg
ICAgICByZWN0SW5WaWV3Q29vcmRpbmF0ZXMgPSB2ZXJ0aWNhbFNjcm9sbGJhci0+Y29udmVydFRv
Q29udGFpbmluZ1ZpZXcoc2Nyb2xsZXJUaHVtYik7CisKKyAgICBpZiAocmVjdEluVmlld0Nvb3Jk
aW5hdGVzID09IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRWaXNpYmxlU2Nyb2xsZXJUaHVtYlJlY3QocmVjdElu
Vmlld0Nvb3JkaW5hdGVzKTsKKyAgICBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdCA9IHJlY3RJ
blZpZXdDb29yZGluYXRlczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxp
dGllc0Nocm9taXVtTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzdmMjZhODQ0
NWZkNjkyNWI4MGIwMTZkMTgwMzkxZWU2NDFkN2VhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9t
aXVtTWFjLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXND
aHJvbWl1bU1hY19oCisjZGVmaW5lIFNjcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1h
Y19oCisKKyNpZiBVU0UoV0tfU0NST0xMQkFSX1BBSU5URVIpCisKKy8vIFB1YmxpYyBBUElzIG5v
dCBhdmFpbGFibGUgb24gdmVyc2lvbnMgb2YgTWFjIG9uIHdoaWNoIHdlIGJ1aWxkCisjaWYgKGRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkgfHwgZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xF
T1BBUkQpKQorZW51bSB7CisgICAgTlNTY3JvbGxlclN0eWxlTGVnYWN5ICAgICAgID0gMCwKKyAg
ICBOU1Njcm9sbGVyU3R5bGVPdmVybGF5ICAgICAgPSAxCit9OworCisjaWZkZWYgX19PQkpDX18K
K3R5cGVkZWYgTlNJbnRlZ2VyIE5TU2Nyb2xsZXJTdHlsZTsKKyNlbmRpZgorI2VuZGlmCisKK3R5
cGVkZWYgdWludDMyIHdrU2Nyb2xsZXJTdHlsZTsKKworI2lmZGVmIF9fT0JKQ19fCitAY2xhc3Mg
TlNTY3JvbGxlckltcDsKK0BjbGFzcyBOU1Njcm9sbGVySW1wUGFpcjsKKyNlbHNlCitjbGFzcyBO
U1Njcm9sbGVySW1wOworY2xhc3MgTlNTY3JvbGxlckltcFBhaXI7CisjZW5kaWYKKwordHlwZWRl
ZiBOU1Njcm9sbGVySW1wKiBXS1Njcm9sbGJhclBhaW50ZXJSZWY7Cit0eXBlZGVmIE5TU2Nyb2xs
ZXJJbXBQYWlyKiBXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmOworCitib29sIGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpOworCisvLyBTY3JvbGxiYXIgUGFpbnRlcgorYm9v
bCB3a1Njcm9sbGJhclBhaW50ZXJVc2VzT3ZlcmxheVNjcm9sbGVycyh2b2lkKTsKK2Jvb2wgd2tT
Y3JvbGxiYXJQYWludGVySXNIb3Jpem9udGFsKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7CitDR0Zs
b2F0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYpOwor
dm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXRPdmVybGF5U3RhdGUoV0tTY3JvbGxiYXJQYWludGVy
UmVmLCBpbnQgb3ZlcmxheVNjcm9sbGVyU3RhdGUpOwordm9pZCB3a1Njcm9sbGJhclBhaW50ZXJQ
YWludChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCwgZG91YmxlIHZhbHVlLCBD
R0Zsb2F0IHByb3BvcnRpb24sIE5TUmVjdCBmcmFtZVJlY3QpOwordm9pZCB3a1Njcm9sbGJhclBh
aW50ZXJQYWludFRyYWNrKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgYm9vbCBlbmFibGVkLCBkb3Vi
bGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgTlNSZWN0IGZyYW1lUmVjdCk7Cit2b2lkIHdr
U2Nyb2xsYmFyUGFpbnRlclBhaW50S25vYihXS1Njcm9sbGJhclBhaW50ZXJSZWYpOworaW50IHdr
U2Nyb2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKFdLU2Nyb2xsYmFyUGFpbnRlclJlZik7Cit2b2lk
IHdrU2Nyb2xsYmFyUGFpbnRlclNldERlbGVnYXRlKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiwgaWQg
c2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKTsKK3ZvaWQgd2tTY3JvbGxiYXJQYWludGVyU2V0RW5h
YmxlZChXS1Njcm9sbGJhclBhaW50ZXJSZWYsIGJvb2wgZW5hYmxlZCk7CitDR0Zsb2F0IHdrU2Ny
b2xsYmFyUGFpbnRlclRyYWNrQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmKTsKK1dLU2Nyb2xs
YmFyUGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJQYWludGVyKGludCBjb250cm9sU2l6ZSwgYm9v
bCBpc0hvcml6b250YWwpOworaW50IHdrU2Nyb2xsYmFyVGhpY2tuZXNzKGludCBjb250cm9sU2l6
ZSk7CitpbnQgd2tTY3JvbGxiYXJNaW5pbXVtVG90YWxMZW5ndGhOZWVkZWRGb3JUaHVtYihXS1Nj
cm9sbGJhclBhaW50ZXJSZWYpOworQ0dSZWN0IHdrU2Nyb2xsYmFyUGFpbnRlcktub2JSZWN0KFdL
U2Nyb2xsYmFyUGFpbnRlclJlZik7CitXS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tNYWtlU2Nyb2xs
YmFyUmVwbGFjZW1lbnRQYWludGVyKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBvbGRQYWludGVyLCBp
bnQgbmV3U3R5bGUsIGludCBjb250cm9sU2l6ZSwgYm9vbCBpc0hvcml6b250YWwpOwordm9pZCB3
a1NldFNjcm9sbGJhclBhaW50ZXJLbm9iQWxwaGEoV0tTY3JvbGxiYXJQYWludGVyUmVmLCBDR0Zs
b2F0KTsKK3ZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShXS1Njcm9sbGJhclBh
aW50ZXJSZWYsIENHRmxvYXQpOworCitlbnVtIHsKKyAgICB3a1Njcm9sbGVyS25vYlN0eWxlRGVm
YXVsdCA9IDAsCisgICAgd2tTY3JvbGxlcktub2JTdHlsZURhcmsgPSAxLAorICAgIHdrU2Nyb2xs
ZXJLbm9iU3R5bGVMaWdodCA9IDIKK307Cit0eXBlZGVmIHVpbnQzMiB3a1Njcm9sbGVyS25vYlN0
eWxlOworZXh0ZXJuIHZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYlN0eWxlKFdLU2Nyb2xs
YmFyUGFpbnRlclJlZiwgd2tTY3JvbGxlcktub2JTdHlsZSk7CisKKy8vIFNjcm9sbGJhciBQYWlu
dGVyIENvbnRyb2xsZXIKK1dLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgd2tNYWtlU2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXIoaWQgcGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSk7Cit2
b2lkIHdrQ29udGVudEFyZWFTY3JvbGxlZChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVm
KTsKK3ZvaWQgd2tDb250ZW50QXJlYVdpbGxQYWludChXS1Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyUmVmKTsKK3ZvaWQgd2tNb3VzZUVudGVyZWRDb250ZW50QXJlYShXS1Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyUmVmKTsKK3ZvaWQgd2tNb3VzZUV4aXRlZENvbnRlbnRBcmVhKFdLU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwordm9pZCB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVh
KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwordm9pZCB3a1dpbGxTdGFydExpdmVS
ZXNpemUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Cit2b2lkIHdrQ29udGVudEFy
ZWFSZXNpemVkKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwordm9pZCB3a1dpbGxF
bmRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYpOwordm9pZCB3a0Nv
bnRlbnRBcmVhRGlkU2hvdyhXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmKTsKK3ZvaWQg
d2tDb250ZW50QXJlYURpZEhpZGUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Cit2
b2lkIHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJS
ZWYpOwordm9pZCB3a0RpZEVuZFNjcm9sbEdlc3R1cmUoV0tTY3JvbGxiYXJQYWludGVyQ29udHJv
bGxlclJlZik7Cit2b2lkIHdrU2Nyb2xsYmFyUGFpbnRlckZvcmNlRmxhc2hTY3JvbGxlcnMoV0tT
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Cit2b2lkIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJTdHlsZShXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCB3a1Njcm9s
bGVyU3R5bGUgbmV3U3R5bGUpOwordm9pZCB3a1NldFBhaW50ZXJGb3JQYWludGVyQ29udHJvbGxl
cihXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmLCBXS1Njcm9sbGJhclBhaW50ZXJSZWYs
IGJvb2wgaXNIb3Jpem9udGFsKTsKK1dLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a1ZlcnRpY2FsU2Ny
b2xsYmFyUGFpbnRlckZvckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJl
Zik7CitXS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tIb3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckZv
ckNvbnRyb2xsZXIoV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZik7Cit3a1Njcm9sbGVy
U3R5bGUgd2tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKFdLU2Nyb2xsYmFyUGFpbnRl
ckNvbnRyb2xsZXJSZWYpOworCisjZW5kaWYgLy8gVVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQor
CisjZW5kaWYgLy8gU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGllc0Nocm9taXVtTWFjX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhck92ZXJsYXlV
dGlsaXRpZXNDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbGJhck92ZXJsYXlVdGlsaXRpZXNDaHJvbWl1bU1hYy5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOGIw
MWQ0YWI1ZDU4MTdiNTk1ZmNiODgwNjIxNDQ2MzgxYzY0Y2NlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyT3ZlcmxheVV0aWxpdGll
c0Nocm9taXVtTWFjLm1tCkBAIC0wLDAgKzEsMzY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
VVNFKFdLX1NDUk9MTEJBUl9QQUlOVEVSKQorCisjaW5jbHVkZSAiU2Nyb2xsYmFyT3ZlcmxheVV0
aWxpdGllc0Nocm9taXVtTWFjLmgiCisjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRl
IDxDb2NvYS9Db2NvYS5oPgorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhpcyBmaWxl
IGNvbnRhaW5zIHV0aWxpdGllcyB0byBkcmF3IG92ZXJsYXkgc2Nyb2xsYmFycy4gVGhlcmUgYXJl
IG5vIHB1YmxpYworLy8gQVBJcyB5ZXQgb24gdGhlIE1hYyB0byBkcmF3IG92ZXJsYXkgc2Nyb2xs
YmFycyBzbyB3ZSB1c2UgcHJpdmF0ZSBBUElzIHRoYXQKKy8vIHdlIGxvb2sgdXAgYXQgcnVudGlt
ZS4gSWYgdGhlIHByaXZhdGUgQVBJcyBkb24ndCBleGlzdCB0aGVuIHRoZSB3a01ha2UqCisvLyBm
dW5jdGlvbnMgd2lsbCByZXR1cm4gbmlsLgorLy8KKy8vIE5vdGUsIHRoaXMgZmlsZSBjb250YWlu
cyBmdW5jdGlvbnMgY29waWVkIGZyb20gV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oLgorLy8gVXNp
bmcgdGhlIHNhbWUgbmFtZXMgbWFrZXMgdGhlIGNvZGUgZWFzaWVyIHRvIG1haW50YWluLgorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gUHVibGljIEFQSXMgbm90IGF2YWlsYWJsZSBvbiB2
ZXJzaW9ucyBvZiBNYWMgb24gd2hpY2ggd2UgYnVpbGQKKyNpZiAoZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkpCitAaW50ZXJm
YWNlIE5TU2Nyb2xsZXIgKE5TT2JqZWN0KQorKyAoTlNTY3JvbGxlclN0eWxlKXByZWZlcnJlZFNj
cm9sbGVyU3R5bGU7CitAZW5kCisjZW5kaWYKKworLy8gVGhlc2UgYXJlIHByaXZhdGUgQVBJcyB0
byBkcmF3IG92ZXJsYXkgc2Nyb2xsYmFycy4KK0BpbnRlcmZhY2UgTlNTY3JvbGxlckltcCA6IE5T
T2JqZWN0CisKKysgKGlkKXNjcm9sbGVySW1wV2l0aFN0eWxlOihOU1Njcm9sbGVyU3R5bGUpc3R5
bGUKKyAgICAgICAgICAgICAgIGNvbnRyb2xTaXplOihOU0NvbnRyb2xTaXplKXNpemUKKyAgICAg
ICAgICAgICAgICBob3Jpem9udGFsOihCT09MKWhvcml6b250YWwKKyAgICAgIHJlcGxhY2luZ1Nj
cm9sbGVySW1wOihpZClzY3JvbGxlcjsKKworQHByb3BlcnR5IENHRmxvYXQga25vYkFscGhhOwor
QHByb3BlcnR5IENHRmxvYXQgdHJhY2tBbHBoYTsKK0Bwcm9wZXJ0eSBDR0Zsb2F0IGtub2JQcm9w
b3J0aW9uOworQHByb3BlcnR5IE5TSW50ZWdlciBrbm9iU3R5bGU7CitAcHJvcGVydHkoZ2V0dGVy
PWlzRW5hYmxlZCkgQk9PTCBlbmFibGVkOworQHByb3BlcnR5KGdldHRlcj1pc0hvcml6b250YWwp
IEJPT0wgaG9yaXpvbnRhbDsKK0Bwcm9wZXJ0eSBkb3VibGUgZG91YmxlVmFsdWU7CitAcHJvcGVy
dHkoYXNzaWduKSBpZCBkZWxlZ2F0ZTsKKworLSAoQ0dGbG9hdClrbm9iTWluTGVuZ3RoOworLSAo
Q0dGbG9hdCl0cmFja092ZXJsYXBFbmRJbnNldDsKKy0gKENHRmxvYXQpa25vYk92ZXJsYXBFbmRJ
bnNldDsKKy0gKENHRmxvYXQpdHJhY2tFbmRJbnNldDsKKy0gKENHRmxvYXQpa25vYkVuZEluc2V0
OworLSAoQ0dGbG9hdCl0cmFja0JveFdpZHRoOworLSAoQ0dGbG9hdCl0cmFja1dpZHRoOworLSAo
dm9pZClzZXRCb3VuZHNTaXplOihOU1NpemUpc2l6ZTsKKy0gKHZvaWQpZHJhd0tub2JTbG90SW5S
ZWN0OihOU1JlY3QpcmVjdAorICAgICAgICAgICAgICAgICBoaWdobGlnaHQ6KEJPT0wpZmxhZzsK
Ky0gKHZvaWQpZHJhd0tub2I7CistICh2b2lkKXNldE92ZXJsYXlTY3JvbGxlclN0YXRlOihOU1Nj
cm9sbGVyU3R5bGUpc3RhdGUKKyAgICAgICAgICAgICAgIGZvcmNlSW1tZWRpYXRlbHk6KEJPT0wp
ZmxhZzsKKy0gKHZvaWQpc2V0RGVsZWdhdGU6KGlkKWRlbGVnYXRlOworLSAoTlNSZWN0KXJlY3RG
b3JQYXJ0OihOU1VJbnRlZ2VyKWFyZzE7CisKK0BlbmQKKworLy8gVGhlc2UgYXJlIHByaXZhdGUg
QVBJcyB0byBtYW5hZ2Ugb3ZlcmxheSBzY3JvbGxiYXJzLgorQGludGVyZmFjZSBOU1Njcm9sbGVy
SW1wUGFpciA6IE5TT2JqZWN0CisKK0Bwcm9wZXJ0eSBOU1Njcm9sbGVyU3R5bGUgc2Nyb2xsZXJT
dHlsZTsKK0Bwcm9wZXJ0eShyZXRhaW4pIE5TU2Nyb2xsZXJJbXAgKmhvcml6b250YWxTY3JvbGxl
ckltcDsKK0Bwcm9wZXJ0eShyZXRhaW4pIE5TU2Nyb2xsZXJJbXAgKnZlcnRpY2FsU2Nyb2xsZXJJ
bXA7CitAcHJvcGVydHkoYXNzaWduKSBpZCBkZWxlZ2F0ZTsKKworLSAodm9pZCloaWRlT3Zlcmxh
eVNjcm9sbGVyczsKKy0gKHZvaWQpZmxhc2hTY3JvbGxlcnM7CistICh2b2lkKWNvbnRlbnRBcmVh
U2Nyb2xsZWQ7CistICh2b2lkKWNvbnRlbnRBcmVhV2lsbERyYXc7CistICh2b2lkKWNvbnRlbnRB
cmVhRGlkSGlkZTsKKy0gKHZvaWQpd2luZG93T3JkZXJlZE91dDsKKy0gKHZvaWQpd2luZG93T3Jk
ZXJlZEluOworLSAodm9pZCltb3VzZUVudGVyZWRDb250ZW50QXJlYTsKKy0gKHZvaWQpbW91c2VN
b3ZlZEluQ29udGVudEFyZWE7CistICh2b2lkKW1vdXNlRXhpdGVkQ29udGVudEFyZWE7CistICh2
b2lkKXN0YXJ0TGl2ZVJlc2l6ZTsKKy0gKHZvaWQpY29udGVudEFyZWFEaWRSZXNpemU7CistICh2
b2lkKWVuZExpdmVSZXNpemU7CistICh2b2lkKWJlZ2luU2Nyb2xsR2VzdHVyZTsKKy0gKHZvaWQp
ZW5kU2Nyb2xsR2VzdHVyZTsKKworQGVuZAorCitzdGF0aWMgQ2xhc3MgbG9va1VwTlNTY3JvbGxl
ckltcENsYXNzKCkKK3sKKyAgICBzdGF0aWMgQ2xhc3MgcmVzdWx0ID0gTlNDbGFzc0Zyb21TdHJp
bmcoQCJOU1Njcm9sbGVySW1wIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIENs
YXNzIGxvb2tVcE5TU2Nyb2xsZXJJbXBQYWlyQ2xhc3MoKQoreworICAgIHN0YXRpYyBDbGFzcyBy
ZXN1bHQgPSBOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXBQYWlyIik7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIE5TQ29udHJvbFNpemUgc2Nyb2xsYmFyQ29udHJvbFNp
emVUb05TQ29udHJvbFNpemUoaW50IGNvbnRyb2xTaXplKQoreworICAgIHJldHVybiBjb250cm9s
U2l6ZSA9PSBXZWJDb3JlOjpSZWd1bGFyU2Nyb2xsYmFyID8gTlNSZWd1bGFyQ29udHJvbFNpemUg
OiBOU1NtYWxsQ29udHJvbFNpemU7Cit9CisKK3N0YXRpYyBOU1Njcm9sbGVyU3R5bGUgcHJlZmVy
cmVkU2Nyb2xsZXJTdHlsZSgpCit7CisgICAgaWYgKFtOU1Njcm9sbGVyIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IocHJlZmVycmVkU2Nyb2xsZXJTdHlsZSldKQorICAgICAgICByZXR1cm4g
W05TU2Nyb2xsZXIgcHJlZmVycmVkU2Nyb2xsZXJTdHlsZV07CisgICAgcmV0dXJuIE5TU2Nyb2xs
ZXJTdHlsZUxlZ2FjeTsKK30KKworYm9vbCB3a1Njcm9sbGJhclBhaW50ZXJVc2VzT3ZlcmxheVNj
cm9sbGVycyh2b2lkKQoreworICAgIHJldHVybiBwcmVmZXJyZWRTY3JvbGxlclN0eWxlKCkgPT0g
TlNTY3JvbGxlclN0eWxlT3ZlcmxheTsKK30KKworYm9vbCB3a1Njcm9sbGJhclBhaW50ZXJJc0hv
cml6b250YWwoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIpCit7CisgICAgcmV0dXJuIFtw
YWludGVyIGlzSG9yaXpvbnRhbF07Cit9CisKK0NHRmxvYXQgd2tTY3JvbGxiYXJQYWludGVyS25v
YkFscGhhKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKQoreworICAgIHJldHVybiBbcGFp
bnRlciBrbm9iQWxwaGFdOworfQorCit2b2lkIHdrU2Nyb2xsYmFyUGFpbnRlclNldE92ZXJsYXlT
dGF0ZShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgaW50IG92ZXJsYXlTY3JvbGxlclN0
YXRlKQoreworICAgIFtwYWludGVyIHNldE92ZXJsYXlTY3JvbGxlclN0YXRlOm92ZXJsYXlTY3Jv
bGxlclN0YXRlCisgICAgICAgICAgICAgICAgICAgIGZvcmNlSW1tZWRpYXRlbHk6WUVTXTsKK30K
Kwordm9pZCB3a1Njcm9sbGJhclBhaW50ZXJQYWludChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFp
bnRlciwgYm9vbCBlbmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxvYXQgcHJvcG9ydGlvbiwgTlNS
ZWN0IGZyYW1lUmVjdCkKK3sKKyAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludFRyYWNrKHBhaW50
ZXIsIGVuYWJsZWQsIHZhbHVlLCBwcm9wb3J0aW9uLCBmcmFtZVJlY3QpOworICAgIHdrU2Nyb2xs
YmFyUGFpbnRlclBhaW50S25vYihwYWludGVyKTsKK30KKwordm9pZCB3a1Njcm9sbGJhclBhaW50
ZXJQYWludFRyYWNrKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBib29sIGVuYWJsZWQs
IGRvdWJsZSB2YWx1ZSwgQ0dGbG9hdCBwcm9wb3J0aW9uLCBOU1JlY3QgZnJhbWVSZWN0KQorewor
ICAgIFtwYWludGVyIHNldEVuYWJsZWQ6ZW5hYmxlZF07CisgICAgW3BhaW50ZXIgc2V0Qm91bmRz
U2l6ZTpmcmFtZVJlY3Quc2l6ZV07CisgICAgW3BhaW50ZXIgc2V0RG91YmxlVmFsdWU6dmFsdWVd
OworICAgIFtwYWludGVyIHNldEtub2JQcm9wb3J0aW9uOnByb3BvcnRpb25dOworCisgICAgaWYg
KFtwYWludGVyIGlzSG9yaXpvbnRhbF0pCisgICAgICAgIGZyYW1lUmVjdC5zaXplLmhlaWdodCA9
IFtwYWludGVyIHRyYWNrV2lkdGhdOworICAgIGVsc2UKKyAgICAgICAgZnJhbWVSZWN0LnNpemUu
d2lkdGggPSBbcGFpbnRlciB0cmFja1dpZHRoXTsKKyAgICBmcmFtZVJlY3Qub3JpZ2luID0gTlNa
ZXJvUG9pbnQ7CisKKyAgICBbcGFpbnRlciBkcmF3S25vYlNsb3RJblJlY3Q6ZnJhbWVSZWN0IGhp
Z2hsaWdodDpOT107Cit9CisKK3ZvaWQgd2tTY3JvbGxiYXJQYWludGVyUGFpbnRLbm9iKFdLU2Ny
b2xsYmFyUGFpbnRlclJlZiBwYWludGVyKQoreworICAgIFtwYWludGVyIGRyYXdLbm9iXTsKK30K
KworaW50IHdrU2Nyb2xsYmFyTWluaW11bVRodW1iTGVuZ3RoKFdLU2Nyb2xsYmFyUGFpbnRlclJl
ZiBwYWludGVyKQoreworICAgIHJldHVybiBbcGFpbnRlciBrbm9iTWluTGVuZ3RoXTsKK30KKwor
dm9pZCB3a1Njcm9sbGJhclBhaW50ZXJTZXREZWxlZ2F0ZShXS1Njcm9sbGJhclBhaW50ZXJSZWYg
cGFpbnRlciwgaWQgc2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlKQoreworICAgIFtwYWludGVyIHNl
dERlbGVnYXRlOnNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZV07Cit9CisKK3ZvaWQgd2tTY3JvbGxi
YXJQYWludGVyU2V0RW5hYmxlZChXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgYm9vbCBl
bmFibGVkKQoreworICAgIFtwYWludGVyIHNldEVuYWJsZWQ6ZW5hYmxlZF07Cit9CisKK0NHRmxv
YXQgd2tTY3JvbGxiYXJQYWludGVyVHJhY2tBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFp
bnRlcikKK3sKKyAgICByZXR1cm4gW3BhaW50ZXIgdHJhY2tBbHBoYV07Cit9CisKK1dLU2Nyb2xs
YmFyUGFpbnRlclJlZiB3a01ha2VTY3JvbGxiYXJQYWludGVyKGludCBjb250cm9sU2l6ZSwgYm9v
bCBpc0hvcml6b250YWwpCit7CisgICAgcmV0dXJuIHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50
UGFpbnRlcihuaWwsIHByZWZlcnJlZFNjcm9sbGVyU3R5bGUoKSwgY29udHJvbFNpemUsIGlzSG9y
aXpvbnRhbCk7Cit9CisKK2ludCB3a1Njcm9sbGJhclRoaWNrbmVzcyhpbnQgY29udHJvbFNpemUp
Cit7CisgICAgcmV0dXJuIFt3a01ha2VTY3JvbGxiYXJQYWludGVyKGNvbnRyb2xTaXplLCBmYWxz
ZSkgdHJhY2tCb3hXaWR0aF07Cit9CisKK2ludCB3a1Njcm9sbGJhck1pbmltdW1Ub3RhbExlbmd0
aE5lZWRlZEZvclRodW1iKFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyKQoreworICAgIHJl
dHVybiBbcGFpbnRlciBrbm9iTWluTGVuZ3RoXSArCisgICAgICAgICAgIFtwYWludGVyIHRyYWNr
T3ZlcmxhcEVuZEluc2V0XSArCisgICAgICAgICAgIFtwYWludGVyIGtub2JPdmVybGFwRW5kSW5z
ZXRdICsKKyAgICAgICAgICAgKFtwYWludGVyIHRyYWNrRW5kSW5zZXRdICsgW3BhaW50ZXIga25v
YkVuZEluc2V0XSkgKiAyOworfQorCitXS1Njcm9sbGJhclBhaW50ZXJSZWYgd2tWZXJ0aWNhbFNj
cm9sbGJhclBhaW50ZXJGb3JDb250cm9sbGVyKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJS
ZWYgY29udHJvbGxlcikKK3sKKyAgICByZXR1cm4gW2NvbnRyb2xsZXIgdmVydGljYWxTY3JvbGxl
ckltcF07Cit9CisKK1dLU2Nyb2xsYmFyUGFpbnRlclJlZiB3a0hvcml6b250YWxTY3JvbGxiYXJQ
YWludGVyRm9yQ29udHJvbGxlcihXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRy
b2xsZXIpCit7CisgICAgcmV0dXJuIFtjb250cm9sbGVyIGhvcml6b250YWxTY3JvbGxlckltcF07
Cit9CisKK3drU2Nyb2xsZXJTdHlsZSB3a1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyU3R5bGUo
V0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQoreworICAgIHJldHVy
biBbY29udHJvbGxlciBzY3JvbGxlclN0eWxlXTsKK30KKworV0tTY3JvbGxiYXJQYWludGVyUmVm
IHdrTWFrZVNjcm9sbGJhclJlcGxhY2VtZW50UGFpbnRlcihXS1Njcm9sbGJhclBhaW50ZXJSZWYg
b2xkUGFpbnRlciwgaW50IG5ld1N0eWxlLCBpbnQgY29udHJvbFNpemUsIGJvb2wgaXNIb3Jpem9u
dGFsKQoreworICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAg
ICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtsb29rVXBOU1Njcm9sbGVySW1wQ2xhc3MoKSBz
Y3JvbGxlckltcFdpdGhTdHlsZTpuZXdTdHlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udHJvbFNpemU6c2Nyb2xsYmFyQ29udHJvbFNpemVUb05T
Q29udHJvbFNpemUoY29udHJvbFNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDppc0hvcml6b250YWwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2luZ1Njcm9sbGVySW1wOm9sZFBhaW50ZXJd
OworfQorCit2b2lkIHdrU2V0UGFpbnRlckZvclBhaW50ZXJDb250cm9sbGVyKFdLU2Nyb2xsYmFy
UGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlciwgV0tTY3JvbGxiYXJQYWludGVyUmVmIHBh
aW50ZXIsIGJvb2wgaXNIb3Jpem9udGFsKQoreworICAgIGlmIChpc0hvcml6b250YWwpCisgICAg
ICAgIFtjb250cm9sbGVyIHNldEhvcml6b250YWxTY3JvbGxlckltcDpwYWludGVyXTsKKyAgICBl
bHNlCisgICAgICAgIFtjb250cm9sbGVyIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFpbnRlcl07
Cit9CisKK3ZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclN0eWxlKFdLU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgcGFpbnRlciwgd2tTY3JvbGxlclN0eWxlIG5ld1N0eWxl
KQoreworICAgIFtwYWludGVyIHNldFNjcm9sbGVyU3R5bGU6bmV3U3R5bGVdOworfQorCitDR1Jl
Y3Qgd2tTY3JvbGxiYXJQYWludGVyS25vYlJlY3QoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50
ZXIpCit7CisgICAgcmV0dXJuIE5TUmVjdFRvQ0dSZWN0KFtwYWludGVyIHJlY3RGb3JQYXJ0Ok5T
U2Nyb2xsZXJLbm9iXSk7Cit9CisKK3ZvaWQgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhh
KFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyLCBDR0Zsb2F0IGFscGhhKQoreworICAgIFtw
YWludGVyIHNldEtub2JBbHBoYTphbHBoYV07Cit9CisKK3ZvaWQgd2tTZXRTY3JvbGxiYXJQYWlu
dGVyVHJhY2tBbHBoYShXS1Njcm9sbGJhclBhaW50ZXJSZWYgcGFpbnRlciwgQ0dGbG9hdCBhbHBo
YSkKK3sKKyAgICBbcGFpbnRlciBzZXRUcmFja0FscGhhOmFscGhhXTsKK30KKwordm9pZCB3a1Nl
dFNjcm9sbGJhclBhaW50ZXJLbm9iU3R5bGUoV0tTY3JvbGxiYXJQYWludGVyUmVmIHBhaW50ZXIs
IHdrU2Nyb2xsZXJLbm9iU3R5bGUgc3R5bGUpCit7CisgICAgW3BhaW50ZXIgc2V0S25vYlN0eWxl
OnN0eWxlXTsKK30KKworV0tTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlclJlZiB3a01ha2VTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlcihpZCBwYWludGVyQ29udHJvbGxlckRlbGVnYXRlKQorewor
ICAgIGlmICghaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgTlNTY3JvbGxlckltcFBhaXIqIGNvbnRyb2xsZXIgPSBbW1tsb29rVXBOU1Nj
cm9sbGVySW1wUGFpckNsYXNzKCkgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBbY29u
dHJvbGxlciBzZXREZWxlZ2F0ZTpwYWludGVyQ29udHJvbGxlckRlbGVnYXRlXTsKKyAgICBbY29u
dHJvbGxlciBzZXRTY3JvbGxlclN0eWxlOnByZWZlcnJlZFNjcm9sbGVyU3R5bGUoKV07CisgICAg
cmV0dXJuIGNvbnRyb2xsZXI7Cit9CisKK3ZvaWQgd2tDb250ZW50QXJlYVNjcm9sbGVkKFdLU2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKK3sKKyAgICBbY29udHJvbGxl
ciBjb250ZW50QXJlYVNjcm9sbGVkXTsKK30KKwordm9pZCB3a0NvbnRlbnRBcmVhV2lsbFBhaW50
KFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKK3sKKyAgICBbY29u
dHJvbGxlciBjb250ZW50QXJlYVdpbGxEcmF3XTsKK30KKwordm9pZCB3a01vdXNlRW50ZXJlZENv
bnRlbnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKK3sK
KyAgICBbY29udHJvbGxlciBtb3VzZUVudGVyZWRDb250ZW50QXJlYV07Cit9CisKK3ZvaWQgd2tN
b3VzZUV4aXRlZENvbnRlbnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29u
dHJvbGxlcikKK3sKKyAgICBbY29udHJvbGxlciBtb3VzZUV4aXRlZENvbnRlbnRBcmVhXTsKK30K
Kwordm9pZCB3a01vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKFdLU2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXJSZWYgY29udHJvbGxlcikKK3sKKyAgICBbY29udHJvbGxlciBtb3VzZU1vdmVkSW5Db250
ZW50QXJlYV07Cit9CisKK3ZvaWQgd2tXaWxsU3RhcnRMaXZlUmVzaXplKFdLU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKK3sKKyAgICBbY29udHJvbGxlciBzdGFydExp
dmVSZXNpemVdOworfQorCit2b2lkIHdrQ29udGVudEFyZWFSZXNpemVkKFdLU2Nyb2xsYmFyUGFp
bnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKK3sKKyAgICBbY29udHJvbGxlciBjb250ZW50
QXJlYURpZFJlc2l6ZV07Cit9CisKK3ZvaWQgd2tXaWxsRW5kTGl2ZVJlc2l6ZShXS1Njcm9sbGJh
clBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCit7CisgICAgW2NvbnRyb2xsZXIgZW5k
TGl2ZVJlc2l6ZV07Cit9CisKK3ZvaWQgd2tDb250ZW50QXJlYURpZFNob3coV0tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQoreworICAgIFtjb250cm9sbGVyIHdpbmRv
d09yZGVyZWRJbl07Cit9CisKK3ZvaWQgd2tDb250ZW50QXJlYURpZEhpZGUoV0tTY3JvbGxiYXJQ
YWludGVyQ29udHJvbGxlclJlZiBjb250cm9sbGVyKQoreworICAgIFtjb250cm9sbGVyIHdpbmRv
d09yZGVyZWRPdXRdOworfQorCit2b2lkIHdrRGlkQmVnaW5TY3JvbGxHZXN0dXJlKFdLU2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXJSZWYgY29udHJvbGxlcikKK3sKKyAgICBbY29udHJvbGxlciBi
ZWdpblNjcm9sbEdlc3R1cmVdOworfQorCit2b2lkIHdrRGlkRW5kU2Nyb2xsR2VzdHVyZShXS1Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIpCit7CisgICAgW2NvbnRyb2xs
ZXIgZW5kU2Nyb2xsR2VzdHVyZV07Cit9CisKK3ZvaWQgd2tTY3JvbGxiYXJQYWludGVyRm9yY2VG
bGFzaFNjcm9sbGVycyhXS1Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyUmVmIGNvbnRyb2xsZXIp
Cit7CisgICAgW2NvbnRyb2xsZXIgaGlkZU92ZXJsYXlTY3JvbGxlcnNdOworICAgIFtjb250cm9s
bGVyIGZsYXNoU2Nyb2xsZXJzXTsKK30KKworYm9vbCBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFp
bGFibGUoKQoreworICAgIHN0YXRpYyBib29sIGFwaUF2YWlsYWJsZSA9IFtsb29rVXBOU1Njcm9s
bGVySW1wQ2xhc3MoKSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNjcm9sbGVySW1wV2l0
aFN0eWxlOmNvbnRyb2xTaXplOmhvcml6b250YWw6cmVwbGFjaW5nU2Nyb2xsZXJJbXA6KV0gJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9va1VwTlNTY3JvbGxlckltcFBhaXJD
bGFzcygpIGluc3RhbmNlc1Jlc3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzY3JvbGxlclN0eWxl
KV07CisgICAgcmV0dXJuIGFwaUF2YWlsYWJsZTsKK30KKworI2VuZGlmIC8vIFVTRShXS19TQ1JP
TExCQVJfUEFJTlRFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaAppbmRleCA0MWExOThlM2Y4NDIw
Yzg0ODk0NWZiODQ3NDRkZGI3MDAyNGNkNmU1Li5jYzlhMzA4ZWUyMzAwMjVlNTU0OWRmODIwMzEz
M2I3ZTNhZWUyYjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oCkBAIC0yNywyMiArMjcsNjMg
QEAKICNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hY19oCiAjZGVmaW5lIFNjcm9sbGJh
clRoZW1lQ2hyb21pdW1NYWNfaAogCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVNYWMuaCIKKyNp
bmNsdWRlICJTY3JvbGxiYXJPdmVybGF5VXRpbGl0aWVzQ2hyb21pdW1NYWMuaCIKKyNpbmNsdWRl
ICJTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oIgorCisvLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNz
b2NpYXRlZCAubW0gZmlsZSkgaXMgYSBjbG9uZSBvZiBTY3JvbGxiYXJUaGVtZU1hYy5oLgorLy8g
U2VlIHRoZSAubW0gZmlsZSBmb3IgZGV0YWlscy4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjIDogcHVibGljIFNjcm9sbGJhclRoZW1lTWFj
IHsKK2NsYXNzIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMgOiBwdWJsaWMgU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUgewogcHVibGljOgogICAgIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMoKTsK
ICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKCk7CiAKKyAgICB2b2lkIHBy
ZWZlcmVuY2VzQ2hhbmdlZCgpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0
ZShTY3JvbGxiYXIqKTsKKwogICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXIqLCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCisgICAg
dmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplID0gUmVn
dWxhclNjcm9sbGJhcik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHVzZXNPdmVybGF5U2Ny
b2xsYmFycygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxiYXJPdmVybGF5
U3R5bGUoU2Nyb2xsYmFyKik7CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBpbml0aWFsQXV0b3Njcm9s
bFRpbWVyRGVsYXkoKTsKKyAgICB2aXJ0dWFsIGRvdWJsZSBhdXRvc2Nyb2xsVGltZXJEZWxheSgp
OworCisgICAgdmlydHVhbCBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1l
bnQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxi
YXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqKTsK
KworICAgIHZvaWQgc2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqLCBXS1Njcm9s
bGJhclBhaW50ZXJSZWYpOworICAgIFdLU2Nyb2xsYmFyUGFpbnRlclJlZiBwYWludGVyRm9yU2Ny
b2xsYmFyKFNjcm9sbGJhciopOworCiAgICAgdmlydHVhbCB2b2lkIHBhaW50T3ZlcmhhbmdBcmVh
cyhTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgaG9yaXpvbnRh
bE92ZXJoYW5nQXJlYSwgY29uc3QgSW50UmVjdCYgdmVydGljYWxPdmVyaGFuZ0FyZWEsIGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCk7CiAgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29s
IGhhc0J1dHRvbnMoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9s
bGJhciopOworCisgICAgdmlydHVhbCBJbnRSZWN0IGJhY2tCdXR0b25SZWN0KFNjcm9sbGJhcios
IFNjcm9sbGJhclBhcnQsIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRS
ZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciosIFNjcm9sbGJhclBhcnQsIGJvb2wgcGFp
bnRpbmcgPSBmYWxzZSk7CisgICAgdmlydHVhbCBJbnRSZWN0IHRyYWNrUmVjdChTY3JvbGxiYXIq
LCBib29sIHBhaW50aW5nID0gZmFsc2UpOworCisgICAgdmlydHVhbCBpbnQgbWF4T3ZlcmxhcEJl
dHdlZW5QYWdlcygpIHsgcmV0dXJuIDQwOyB9CisKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtVGh1
bWJMZW5ndGgoU2Nyb2xsYmFyKik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25U
aHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkRHJhZ0RvY3VtZW50SW5zdGVhZE9mVGh1bWIoU2Nyb2xsYmFyKiwgY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisKIHByaXZhdGU6CiAgICAgdm9pZCBwYWludEdpdmVuVGlj
a21hcmtzKEdyYXBoaWNzQ29udGV4dCosIFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmLCBjb25z
dCBWZWN0b3I8SW50UmVjdD4mKTsKIAorcHJpdmF0ZToKICAgICBSZWZQdHI8UGF0dGVybj4gbV9v
dmVyaGFuZ1BhdHRlcm47CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbQppbmRleCA0NTlh
NThiMDc2ZjcwMDZmMjc3NjViMDI0OTdhMDk5MzVmODIzZmI3Li44NGQ1ZmUxYzQ5MThjZTdkYzkz
M2VlZjA2NWYxYzQ0OGE0OTA4YWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0KQEAgLTI3
LDIxICsyNywxMDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZUNocm9taXVtTWFjLmgiCiAKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKICNpbmNsdWRlICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJOU1Njcm9sbGVySW1wRGV0YWlscy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3VwcG9ydC5oIgotI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9y
TWFjLmgiCisjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYy5oIgogI2luY2x1ZGUg
IlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+CiAKICNpZiBVU0UoU0tJQSkKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRTa2lhLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvc2tpYV91dGlsc19tYWMuaCIKICNlbmRpZgog
CisKKworLy8gRklYTUU6IFRoZXJlIGFyZSByZXBhaW50aW5nIHByb2JsZW1zIGR1ZSB0byBBcXVh
IHNjcm9sbCBiYXIgYnV0dG9ucycgdmlzdWFsIG92ZXJmbG93LgorCit1c2luZyBuYW1lc3BhY2Ug
c3RkOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8vIFRoaXMgZmlsZSAoYW5kIGl0cyBh
c3NvY2lhdGVkIC5oIGZpbGUpIGlzIGEgY2xvbmUgb2YgU2Nyb2xsYmFyVGhlbWVNYWMubW0uCisv
LyBCZWNhdXNlIHdlIHdhbnQgdG8gZHJhdyB0aWNrbWFya3MgaW4gdGhlIHNjcm9sbGJhciwgd2Ug
bXVzdCBtYWludGFpbiBhIGZvcmsuCisvLyBQbGVhc2UgbWFpbnRhaW4gdGhpcyBmaWxlIGJ5IHBl
cmZvcm1pbmcgcGFyYWxsZWwgY2hhbmdlcyB0byBpdC4KKy8vCisvLyBUaGUgb25seSBjaGFuZ2Vz
IGZyb20gU2Nyb2xsYmFyVGhlbWVNYWMgc2hvdWxkIGJlOgorLy8gLSBUaGUgY2xhc3NuYW1lIGNo
YW5nZSBmcm9tIFNjcm9sbGJhclRoZW1lTWFjIHRvIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMu
CisvLyAtIEluIHBhaW50KCkgdGhlIGNvZGUgdG8gcGFpbnQgdGhlIHRyYWNrLCB0aWNrbWFya3Ms
IGFuZCB0aHVtYiBzZXBhcmF0ZWx5LgorLy8gLSBJbiBwYWludCgpIHRoZSB0aHVtYiBpcyBkcmF3
biB2aWEgQ2hyb21lQnJpZGdlL1dlYlRoZW1lRW5naW5lLgorLy8gLSBWYXJpb3VzIGZ1bmN0aW9u
cyB0aGF0IHdlcmUgc3BsaXQgdXNpbmcgI2lmIFVTRShXS19TQ1JPTExCQVJfUEFJTlRFUikKKy8v
ICAgaGF2ZSBiZWVuIGNvbWJpbmVkIHVzaW5nIHJ1bnRpbWUgY2hlY2tzIGluc3RlYWQuCisvLwor
Ly8gRm9yIGFsbCBvdGhlciBkaWZmZXJlbmNlcywgaWYgaXQgd2FzIGludHJvZHVjZWQgaW4gdGhp
cyBmaWxlLCB0aGVuIHRoZQorLy8gbWFpbnRhaW5lciBmb3Jnb3QgdG8gaW5jbHVkZSBpdCBpbiB0
aGUgbGlzdDsgb3RoZXJ3aXNlIGl0IGlzIGFuIHVwZGF0ZSB0aGF0CisvLyBzaG91bGQgaGF2ZSBi
ZWVuIGFwcGxpZWQgdG8gdGhpcyBmaWxlIGJ1dCB3YXMgbm90LgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxTY3JvbGxiYXIqLCBSZXRhaW5QdHI8V0tTY3JvbGxiYXJQ
YWludGVyUmVmPiA+IFNjcm9sbGJhclBhaW50ZXJNYXA7CisKK3N0YXRpYyBTY3JvbGxiYXJQYWlu
dGVyTWFwKiBzY3JvbGxiYXJNYXAoKQoreworICAgIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFw
KiBtYXAgPSBuZXcgU2Nyb2xsYmFyUGFpbnRlck1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCit9
CisKK0BpbnRlcmZhY2UgU2Nyb2xsYmFyUHJlZnNPYnNlcnZlciA6IE5TT2JqZWN0Cit7Cit9CisK
KysgKHZvaWQpcmVnaXN0ZXJBc09ic2VydmVyOworKyAodm9pZClhcHBlYXJhbmNlUHJlZnNDaGFu
Z2VkOihOU05vdGlmaWNhdGlvbiopdGhlTm90aWZpY2F0aW9uOworKyAodm9pZCliZWhhdmlvclBy
ZWZzQ2hhbmdlZDooTlNOb3RpZmljYXRpb24qKXRoZU5vdGlmaWNhdGlvbjsKKworQGVuZAorCitA
aW1wbGVtZW50YXRpb24gU2Nyb2xsYmFyUHJlZnNPYnNlcnZlcgorCisrICh2b2lkKWFwcGVhcmFu
Y2VQcmVmc0NoYW5nZWQ6KE5TTm90aWZpY2F0aW9uKil1bnVzZWROb3RpZmljYXRpb24KK3sKKyAg
ICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKKworICAgIFNjcm9sbGJhclRoZW1l
KiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOworICAgIGlmICh0aGVtZS0+aXNNb2Nr
VGhlbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bU1hYyo+KHRoZW1lKS0+cHJlZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgaWYgKHNj
cm9sbGJhck1hcCgpLT5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBTY3JvbGxiYXJQ
YWludGVyTWFwOjppdGVyYXRvciBlbmQgPSBzY3JvbGxiYXJNYXAoKS0+ZW5kKCk7CisgICAgZm9y
IChTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBpdCA9IHNjcm9sbGJhck1hcCgpLT5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaXQtPmZpcnN0LT5zdHlsZUNoYW5nZWQo
KTsKKyAgICAgICAgaXQtPmZpcnN0LT5pbnZhbGlkYXRlKCk7CisgICAgfQorfQorCisrICh2b2lk
KWJlaGF2aW9yUHJlZnNDaGFuZ2VkOihOU05vdGlmaWNhdGlvbiopdW51c2VkTm90aWZpY2F0aW9u
Cit7CisgICAgVU5VU0VEX1BBUkFNKHVudXNlZE5vdGlmaWNhdGlvbik7CisKKyAgICBTY3JvbGxi
YXJUaGVtZSogdGhlbWUgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKKyAgICBpZiAodGhlbWUt
PmlzTW9ja1RoZW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpY19jYXN0PFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1NYWMqPih0aGVtZSktPnByZWZlcmVuY2VzQ2hhbmdlZCgpOworfQor
CisrICh2b2lkKXJlZ2lzdGVyQXNPYnNlcnZlcgoreworICAgIFtbTlNEaXN0cmlidXRlZE5vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3RvcihhcHBlYXJhbmNlUHJlZnNDaGFuZ2VkOikgbmFtZTpAIkFwcGxlQXF1YVNjcm9sbEJh
clZhcmlhbnRDaGFuZ2VkIiBvYmplY3Q6bmlsIHN1c3BlbnNpb25CZWhhdmlvcjpOU05vdGlmaWNh
dGlvblN1c3BlbnNpb25CZWhhdmlvckRlbGl2ZXJJbW1lZGlhdGVseV07CisgICAgW1tOU0Rpc3Ry
aWJ1dGVkTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKGJlaGF2aW9yUHJlZnNDaGFuZ2VkOikgbmFtZTpAIkFwcGxlTm9S
ZWRpc3BsYXlBcHBlYXJhbmNlUHJlZmVyZW5jZUNoYW5nZWQiIG9iamVjdDpuaWwgc3VzcGVuc2lv
bkJlaGF2aW9yOk5TTm90aWZpY2F0aW9uU3VzcGVuc2lvbkJlaGF2aW9yQ29hbGVzY2VdOworfQor
CitAZW5kCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJh
clRoZW1lOjpuYXRpdmVUaGVtZSgpCkBAIC01MCwxNyArMTM3LDMzMyBAQCBTY3JvbGxiYXJUaGVt
ZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKICAgICByZXR1cm4gJnRoZW1lOwogfQog
CisvLyBGSVhNRTogR2V0IHRoZXNlIG51bWJlcnMgZnJvbSBDb3JlVUkuCitzdGF0aWMgaW50IGNT
Y3JvbGxiYXJUaGlja25lc3NbXSA9IHsgMTUsIDExIH07CitzdGF0aWMgaW50IGNSZWFsQnV0dG9u
TGVuZ3RoW10gPSB7IDI4LCAyMSB9Oworc3RhdGljIGludCBjQnV0dG9uSW5zZXRbXSA9IHsgMTQs
IDExIH07CitzdGF0aWMgaW50IGNCdXR0b25IaXRJbnNldFtdID0geyAzLCAyIH07CisvLyBjUmVh
bEJ1dHRvbkxlbmd0aCAtIGNCdXR0b25JbnNldAorc3RhdGljIGludCBjQnV0dG9uTGVuZ3RoW10g
PSB7IDE0LCAxMCB9Oworc3RhdGljIGludCBjVGh1bWJNaW5MZW5ndGhbXSA9IHsgMjYsIDIwIH07
CisKK3N0YXRpYyBpbnQgY091dGVyQnV0dG9uTGVuZ3RoW10gPSB7IDE2LCAxNCB9OyAvLyBUaGUg
b3V0ZXIgYnV0dG9uIGluIGEgZG91YmxlIGJ1dHRvbiBwYWlyIGlzIGEgYml0IGJpZ2dlci4KK3N0
YXRpYyBpbnQgY091dGVyQnV0dG9uT3ZlcmxhcCA9IDI7CisKK3N0YXRpYyBmbG9hdCBnSW5pdGlh
bEJ1dHRvbkRlbGF5ID0gMC41ZjsKK3N0YXRpYyBmbG9hdCBnQXV0b3Njcm9sbEJ1dHRvbkRlbGF5
ID0gMC4wNWY7CitzdGF0aWMgYm9vbCBnSnVtcE9uVHJhY2tDbGljayA9IGZhbHNlOworc3RhdGlj
IFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgZ0J1dHRvblBsYWNlbWVudCA9IGlzU2Nyb2xsYmFy
T3ZlcmxheUFQSUF2YWlsYWJsZSgpID8gU2Nyb2xsYmFyQnV0dG9uc05vbmUgOiBTY3JvbGxiYXJC
dXR0b25zRG91YmxlRW5kOworCitzdGF0aWMgdm9pZCB1cGRhdGVBcnJvd1BsYWNlbWVudCgpCit7
CisgICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBOU1N0cmluZyAqYnV0dG9uUGxhY2VtZW50ID0gW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OkAiQXBwbGVTY3JvbGxCYXJWYXJpYW50
Il07CisgICAgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5nOkAiU2luZ2xlIl0p
CisgICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOworICAg
IGVsc2UgaWYgKFtidXR0b25QbGFjZW1lbnQgaXNFcXVhbFRvU3RyaW5nOkAiRG91YmxlTWluIl0p
CisgICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zRG91YmxlU3RhcnQ7
CisgICAgZWxzZSBpZiAoW2J1dHRvblBsYWNlbWVudCBpc0VxdWFsVG9TdHJpbmc6QCJEb3VibGVC
b3RoIl0pCisgICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0b25zRG91Ymxl
Qm90aDsKKyAgICBlbHNlCisgICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBTY3JvbGxiYXJCdXR0
b25zRG91YmxlRW5kOworfQorCit2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnJlZ2lz
dGVyU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIGJvb2wgaXNIb3Jpem9u
dGFsID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7Cisg
ICAgV0tTY3JvbGxiYXJQYWludGVyUmVmIHNjcm9sbGJhclBhaW50ZXIgPSB3a01ha2VTY3JvbGxi
YXJQYWludGVyKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSwgaXNIb3Jpem9udGFsKTsKKyAgICBz
Y3JvbGxiYXJNYXAoKS0+YWRkKHNjcm9sbGJhciwgc2Nyb2xsYmFyUGFpbnRlcik7CisgICAgdXBk
YXRlRW5hYmxlZFN0YXRlKHNjcm9sbGJhcik7CisgICAgdXBkYXRlU2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKHNjcm9sbGJhcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6dW5y
ZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICBzY3JvbGxiYXJN
YXAoKS0+cmVtb3ZlKHNjcm9sbGJhcik7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bU1hYzo6c2V0TmV3UGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgV0tT
Y3JvbGxiYXJQYWludGVyUmVmIG5ld1BhaW50ZXIpCit7CisgICAgc2Nyb2xsYmFyTWFwKCktPnNl
dChzY3JvbGxiYXIsIG5ld1BhaW50ZXIpOworICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzY3JvbGxi
YXIpOworICAgIHVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShzY3JvbGxiYXIpOworfQorCitX
S1Njcm9sbGJhclBhaW50ZXJSZWYgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRlckZv
clNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFy
TWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpOworfQorCiBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjKCkKIHsKLSAgICAvLyBMb2FkIHRoZSBsaW5l
biBwYXR0ZXJuIGltYWdlIHVzZWQgZm9yIG92ZXJoYW5nIGRyYXdpbmcuCi0gICAgUmVmUHRyPElt
YWdlPiBwYXR0ZXJuSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoIm92ZXJoYW5n
UGF0dGVybiIpOwotICAgIG1fb3ZlcmhhbmdQYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHBhdHRl
cm5JbWFnZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CisgICAg
aWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisKKyAgICAg
ICAgLy8gTG9hZCB0aGUgbGluZW4gcGF0dGVybiBpbWFnZSB1c2VkIGZvciBvdmVyaGFuZyBkcmF3
aW5nLgorICAgICAgICBSZWZQdHI8SW1hZ2U+IHBhdHRlcm5JbWFnZSA9IEltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgib3ZlcmhhbmdQYXR0ZXJuIik7CisgICAgICAgIG1fb3ZlcmhhbmdQYXR0
ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHBhdHRlcm5JbWFnZSwgdHJ1ZSwgdHJ1ZSk7CisKKyAgICAg
ICAgW1Njcm9sbGJhclByZWZzT2JzZXJ2ZXIgcmVnaXN0ZXJBc09ic2VydmVyXTsKKyAgICAgICAg
cHJlZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgfQogfQogCiBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjp+U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYygpCiB7CiB9CiAKK3ZvaWQgU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYzo6cHJlZmVyZW5jZXNDaGFuZ2VkKCkKK3sKKyAgICBOU1VzZXJEZWZh
dWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwor
ICAgIFtkZWZhdWx0cyBzeW5jaHJvbml6ZV07CisgICAgdXBkYXRlQXJyb3dQbGFjZW1lbnQoKTsK
KyAgICBnSW5pdGlhbEJ1dHRvbkRlbGF5ID0gW2RlZmF1bHRzIGZsb2F0Rm9yS2V5OkAiTlNTY3Jv
bGxlckJ1dHRvbkRlbGF5Il07CisgICAgZ0F1dG9zY3JvbGxCdXR0b25EZWxheSA9IFtkZWZhdWx0
cyBmbG9hdEZvcktleTpAIk5TU2Nyb2xsZXJCdXR0b25QZXJpb2QiXTsKKyAgICBnSnVtcE9uVHJh
Y2tDbGljayA9IFtkZWZhdWx0cyBib29sRm9yS2V5OkAiQXBwbGVTY3JvbGxlclBhZ2luZ0JlaGF2
aW9yIl07Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCit7CisgICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJU
aGlja25lc3MoY29udHJvbFNpemUpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGNTY3JvbGxi
YXJUaGlja25lc3NbY29udHJvbFNpemVdOworfQorCitib29sIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWM6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7CisgICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJQYWlu
dGVyVXNlc092ZXJsYXlTY3JvbGxlcnMoKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIGlubGluZSB3a1Njcm9sbGVyS25vYlN0eWxlIHRvU2Nyb2xsYmFyUGFp
bnRlcktub2JTdHlsZShTY3JvbGxiYXJPdmVybGF5U3R5bGUgc3R5bGUpCit7CisgICAgc3dpdGNo
IChzdHlsZSkgeworICAgIGNhc2UgU2Nyb2xsYmFyT3ZlcmxheVN0eWxlRGFyazoKKyAgICAgICAg
cmV0dXJuIHdrU2Nyb2xsZXJLbm9iU3R5bGVEYXJrOworICAgIGNhc2UgU2Nyb2xsYmFyT3Zlcmxh
eVN0eWxlTGlnaHQ6CisgICAgICAgIHJldHVybiB3a1Njcm9sbGVyS25vYlN0eWxlTGlnaHQ7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHdrU2Nyb2xsZXJLbm9iU3R5bGVEZWZhdWx0Owor
ICAgIH0KK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjp1cGRhdGVTY3JvbGxi
YXJPdmVybGF5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7CisgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRl
cktub2JTdHlsZShwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhciksIHRvU2Nyb2xsYmFyUGFp
bnRlcktub2JTdHlsZShzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbGJhck92ZXJs
YXlTdHlsZSgpKSk7CisgICAgfQorfQorCitkb3VibGUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yzo6aW5pdGlhbEF1dG9zY3JvbGxUaW1lckRlbGF5KCkKK3sKKyAgICByZXR1cm4gZ0luaXRpYWxC
dXR0b25EZWxheTsKK30KKworZG91YmxlIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmF1dG9z
Y3JvbGxUaW1lckRlbGF5KCkKK3sKKyAgICByZXR1cm4gZ0F1dG9zY3JvbGxCdXR0b25EZWxheTsK
K30KKworU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFj
OjpidXR0b25zUGxhY2VtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ0J1dHRvblBsYWNlbWVu
dDsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpoYXNCdXR0b25zKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQoreworICAgIHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiBn
QnV0dG9uUGxhY2VtZW50ICE9IFNjcm9sbGJhckJ1dHRvbnNOb25lCisgICAgICAgICAgICAgJiYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyCisgICAgICAg
ICAgICAgPyBzY3JvbGxiYXItPndpZHRoKCkKKyAgICAgICAgICAgICA6IHNjcm9sbGJhci0+aGVp
Z2h0KCkpID49IDIgKiAoY1JlYWxCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgp
XSAtIGNCdXR0b25IaXRJbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldKTsKK30KKworYm9v
bCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpoYXNUaHVtYihTY3JvbGxiYXIqIHNjcm9sbGJh
cikKK3sKKyAgICBpbnQgbWluTGVuZ3RoRm9yVGh1bWI7CisgICAgaWYgKGlzU2Nyb2xsYmFyT3Zl
cmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IHdrU2Nyb2xs
YmFyTWluaW11bVRvdGFsTGVuZ3RoTmVlZGVkRm9yVGh1bWIoc2Nyb2xsYmFyTWFwKCktPmdldChz
Y3JvbGxiYXIpLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1pbkxlbmd0aEZvclRodW1iID0g
MiAqIGNCdXR0b25JbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgY1RodW1iTWluTGVu
Z3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAxOworICAgIHJldHVybiBzY3JvbGxiYXIt
PmVuYWJsZWQoKSAmJiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIgPworICAgICAgICAgICAgIHNjcm9sbGJhci0+d2lkdGgoKSA6CisgICAgICAgICAgICAg
c2Nyb2xsYmFyLT5oZWlnaHQoKSkgPj0gbWluTGVuZ3RoRm9yVGh1bWI7Cit9CisKK3N0YXRpYyBJ
bnRSZWN0IGJ1dHRvblJlcGFpbnRSZWN0KGNvbnN0IEludFJlY3QmIGJ1dHRvblJlY3QsIFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSwgYm9vbCBzdGFydCkKK3sKKyAgICBBU1NFUlQoZ0J1dHRvblBsYWNlbWVudCAhPSBTY3Jv
bGxiYXJCdXR0b25zTm9uZSk7CisKKyAgICBJbnRSZWN0IHBhaW50UmVjdChidXR0b25SZWN0KTsK
KyAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICBw
YWludFJlY3Quc2V0V2lkdGgoY1JlYWxCdXR0b25MZW5ndGhbY29udHJvbFNpemVdKTsKKyAgICAg
ICAgaWYgKCFzdGFydCkKKyAgICAgICAgICAgIHBhaW50UmVjdC5zZXRYKGJ1dHRvblJlY3QueCgp
IC0gKGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xTaXplXSAtIGJ1dHRvblJlY3Qud2lkdGgoKSkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHBhaW50UmVjdC5zZXRIZWlnaHQoY1JlYWxCdXR0b25M
ZW5ndGhbY29udHJvbFNpemVdKTsKKyAgICAgICAgaWYgKCFzdGFydCkKKyAgICAgICAgICAgIHBh
aW50UmVjdC5zZXRZKGJ1dHRvblJlY3QueSgpIC0gKGNSZWFsQnV0dG9uTGVuZ3RoW2NvbnRyb2xT
aXplXSAtIGJ1dHRvblJlY3QuaGVpZ2h0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFpbnRS
ZWN0OworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OmJhY2tCdXR0b25S
ZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgcGFpbnRp
bmcpCit7CisgICAgSW50UmVjdCByZXN1bHQ7CisKKyAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9u
U3RhcnRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc05vbmUg
fHwgYnV0dG9uc1BsYWNlbWVudCgpID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQpKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworCisgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQg
JiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25z
UGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0IHx8IGJ1dHRvbnNQbGFj
ZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlKSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKworICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpKTsKKyAgICBib29sIG91dGVyQnV0dG9uID0gcGFydCA9PSBCYWNrQnV0dG9u
U3RhcnRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZVN0YXJ0IHx8IGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBTY3JvbGxiYXJCdXR0b25zRG91YmxlQm90
aCk7CisgICAgaWYgKG91dGVyQnV0dG9uKSB7CisgICAgICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIHJlc3VsdCA9IElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpLCBjT3V0ZXJCdXR0b25MZW5ndGhb
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIChwYWludGluZyA/IGNPdXRlckJ1dHRvbk92ZXJs
YXAgOiAwKSwgdGhpY2tuZXNzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0g
SW50UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHRoaWNrbmVzcywgY091dGVy
QnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0gKyAocGFpbnRpbmcgPyBjT3V0
ZXJCdXR0b25PdmVybGFwIDogMCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIC8vIE91ciByZXBhaW50IHJlY3QgaXMgc2xpZ2h0bHkgbGFyZ2VyLCBzaW5jZSB3ZSBhcmUg
YSBidXR0b24gdGhhdCBpcyBhZGphY2VudCB0byB0aGUgdHJhY2suCisgICAgaWYgKHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIGludCBz
dGFydCA9IHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCA/IHNjcm9sbGJhci0+eCgpIDogc2Ny
b2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBjT3V0ZXJCdXR0b25MZW5ndGhbc2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpXSAtIGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXTsKKyAgICAgICAgcmVzdWx0ID0gSW50UmVjdChzdGFydCwgc2Nyb2xsYmFyLT55KCks
IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSwgdGhpY2tuZXNzKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbnQgc3RhcnQgPSBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBh
cnQgPyBzY3JvbGxiYXItPnkoKSA6IHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQo
KSAtIGNPdXRlckJ1dHRvbkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldIC0gY0J1dHRv
bkxlbmd0aFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldOworICAgICAgICByZXN1bHQgPSBJbnRS
ZWN0KHNjcm9sbGJhci0+eCgpLCBzdGFydCwgdGhpY2tuZXNzLCBjQnV0dG9uTGVuZ3RoW3Njcm9s
bGJhci0+Y29udHJvbFNpemUoKV0pOworICAgIH0KKworICAgIGlmIChwYWludGluZykKKyAgICAg
ICAgcmV0dXJuIGJ1dHRvblJlcGFpbnRSZWN0KHJlc3VsdCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpLCBzY3JvbGxiYXItPmNvbnRyb2xTaXplKCksIHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFy
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50UmVjdCBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtTWFjOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFy
UGFydCBwYXJ0LCBib29sIHBhaW50aW5nKQoreworICAgIEludFJlY3QgcmVzdWx0OworCisgICAg
aWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9
PSBTY3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFy
QnV0dG9uc0RvdWJsZVN0YXJ0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChw
YXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgJiYgKGJ1dHRvbnNQbGFjZW1lbnQoKSA9PSBT
Y3JvbGxiYXJCdXR0b25zTm9uZSB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0
dG9uc0RvdWJsZUVuZCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc1Np
bmdsZSkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpbnQgdGhpY2tuZXNzID0gc2Ny
b2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisgICAgaW50IG91dGVy
QnV0dG9uTGVuZ3RoID0gY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUo
KV07CisgICAgaW50IGJ1dHRvbkxlbmd0aCA9IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250
cm9sU2l6ZSgpXTsKKworICAgIGJvb2wgb3V0ZXJCdXR0b24gPSBwYXJ0ID09IEZvcndhcmRCdXR0
b25FbmRQYXJ0ICYmIChidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJs
ZUVuZCB8fCBidXR0b25zUGxhY2VtZW50KCkgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGgp
OworICAgIGlmIChvdXRlckJ1dHRvbikgeworICAgICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IElu
dFJlY3Qoc2Nyb2xsYmFyLT54KCkgKyBzY3JvbGxiYXItPndpZHRoKCkgLSBvdXRlckJ1dHRvbkxl
bmd0aCwgc2Nyb2xsYmFyLT55KCksIG91dGVyQnV0dG9uTGVuZ3RoLCB0aGlja25lc3MpOworICAg
ICAgICAgICAgaWYgKHBhaW50aW5nKQorICAgICAgICAgICAgICAgIHJlc3VsdC5pbmZsYXRlWChj
T3V0ZXJCdXR0b25PdmVybGFwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5o
ZWlnaHQoKSAtIG91dGVyQnV0dG9uTGVuZ3RoLCB0aGlja25lc3MsIG91dGVyQnV0dG9uTGVuZ3Ro
KTsKKyAgICAgICAgICAgIGlmIChwYWludGluZykKKyAgICAgICAgICAgICAgICByZXN1bHQuaW5m
bGF0ZVkoY091dGVyQnV0dG9uT3ZlcmxhcCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gcGFydCA9PSBGb3J3YXJkQnV0
dG9uRW5kUGFydCA/IHNjcm9sbGJhci0+eCgpICsgc2Nyb2xsYmFyLT53aWR0aCgpIC0gYnV0dG9u
TGVuZ3RoIDogc2Nyb2xsYmFyLT54KCkgKyBvdXRlckJ1dHRvbkxlbmd0aDsKKyAgICAgICAgcmVz
dWx0ID0gSW50UmVjdChzdGFydCwgc2Nyb2xsYmFyLT55KCksIGJ1dHRvbkxlbmd0aCwgdGhpY2tu
ZXNzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgc3RhcnQgPSBwYXJ0ID09IEZvcndhcmRC
dXR0b25FbmRQYXJ0ID8gc2Nyb2xsYmFyLT55KCkgKyBzY3JvbGxiYXItPmhlaWdodCgpIC0gYnV0
dG9uTGVuZ3RoIDogc2Nyb2xsYmFyLT55KCkgKyBvdXRlckJ1dHRvbkxlbmd0aDsKKyAgICAgICAg
cmVzdWx0ID0gSW50UmVjdChzY3JvbGxiYXItPngoKSwgc3RhcnQsIHRoaWNrbmVzcywgYnV0dG9u
TGVuZ3RoKTsKKyAgICB9CisgICAgaWYgKHBhaW50aW5nKQorICAgICAgICByZXR1cm4gYnV0dG9u
UmVwYWludFJlY3QocmVzdWx0LCBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCksIHNjcm9sbGJhci0+
Y29udHJvbFNpemUoKSwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnRyYWNr
UmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgYm9vbCBwYWludGluZykKK3sKKyAgICBpZiAocGFp
bnRpbmcgfHwgIWhhc0J1dHRvbnMoc2Nyb2xsYmFyKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCk7CisKKyAgICBJbnRSZWN0IHJlc3VsdDsKKyAgICBpbnQgdGhpY2tuZXNz
ID0gc2Nyb2xsYmFyVGhpY2tuZXNzKHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSk7CisgICAgaW50
IHN0YXJ0V2lkdGggPSAwOworICAgIGludCBlbmRXaWR0aCA9IDA7CisgICAgaW50IG91dGVyQnV0
dG9uTGVuZ3RoID0gY091dGVyQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV07
CisgICAgaW50IGJ1dHRvbkxlbmd0aCA9IGNCdXR0b25MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXTsKKyAgICBpbnQgZG91YmxlQnV0dG9uTGVuZ3RoID0gb3V0ZXJCdXR0b25MZW5ndGgg
KyBidXR0b25MZW5ndGg7CisgICAgc3dpdGNoIChidXR0b25zUGxhY2VtZW50KCkpIHsKKyAgICAg
ICAgY2FzZSBTY3JvbGxiYXJCdXR0b25zU2luZ2xlOgorICAgICAgICAgICAgc3RhcnRXaWR0aCA9
IGJ1dHRvbkxlbmd0aDsKKyAgICAgICAgICAgIGVuZFdpZHRoID0gYnV0dG9uTGVuZ3RoOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0
OgorICAgICAgICAgICAgc3RhcnRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNjcm9sbGJhckJ1dHRvbnNEb3VibGVFbmQ6CisgICAg
ICAgICAgICBlbmRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOgorICAgICAgICAgICAg
c3RhcnRXaWR0aCA9IGRvdWJsZUJ1dHRvbkxlbmd0aDsKKyAgICAgICAgICAgIGVuZFdpZHRoID0g
ZG91YmxlQnV0dG9uTGVuZ3RoOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpbnQgdG90YWxXaWR0aCA9IHN0YXJ0
V2lkdGggKyBlbmRXaWR0aDsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgp
ICsgc3RhcnRXaWR0aCwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSAtIHRvdGFs
V2lkdGgsIHRoaWNrbmVzcyk7CisgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNj
cm9sbGJhci0+eSgpICsgc3RhcnRXaWR0aCwgdGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgp
IC0gdG90YWxXaWR0aCk7Cit9CisKK2ludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjptaW5p
bXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gd2tTY3JvbGxiYXJNaW5p
bXVtVGh1bWJMZW5ndGgoc2Nyb2xsYmFyTWFwKCktPmdldChzY3JvbGxiYXIpLmdldCgpKTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9s
U2l6ZSgpXTsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpzaG91bGRDZW50
ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQorewor
ICAgIGlmIChldnQuYnV0dG9uKCkgIT0gTGVmdEJ1dHRvbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChnSnVtcE9uVHJhY2tDbGljaykKKyAgICAgICAgcmV0dXJuICFldnQuYWx0S2V5
KCk7CisgICAgcmV0dXJuIGV2dC5hbHRLZXkoKTsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTWFjOjpzaG91bGREcmFnRG9jdW1lbnRJbnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXIqLCBj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIHJldHVybiBldmVudC5hbHRL
ZXkoKTsKK30KKworc3RhdGljIGludCBzY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0ZShTY3Jv
bGxiYXJQYXJ0IHBhcnQpCit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgQmFj
a0J1dHRvblN0YXJ0UGFydDoKKyAgICAgICAgICAgIHJldHVybiBrVGhlbWVUb3BPdXRzaWRlQXJy
b3dQcmVzc2VkOworICAgICAgICBjYXNlIEJhY2tCdXR0b25FbmRQYXJ0OgorICAgICAgICAgICAg
cmV0dXJuIGtUaGVtZVRvcE91dHNpZGVBcnJvd1ByZXNzZWQ7IC8vIFRoaXMgZG9lcyBub3QgbWFr
ZSBtdWNoIHNlbnNlLiAgRm9yIHNvbWUgcmVhc29uIHRoZSBvdXRzaWRlIGNvbnN0YW50IGlzIHJl
cXVpcmVkLgorICAgICAgICBjYXNlIEZvcndhcmRCdXR0b25TdGFydFBhcnQ6CisgICAgICAgICAg
ICByZXR1cm4ga1RoZW1lVG9wSW5zaWRlQXJyb3dQcmVzc2VkOworICAgICAgICBjYXNlIEZvcndh
cmRCdXR0b25FbmRQYXJ0OgorICAgICAgICAgICAgcmV0dXJuIGtUaGVtZUJvdHRvbU91dHNpZGVB
cnJvd1ByZXNzZWQ7CisgICAgICAgIGNhc2UgVGh1bWJQYXJ0OgorICAgICAgICAgICAgcmV0dXJu
IGtUaGVtZVRodW1iUHJlc3NlZDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwogc3RhdGljIFBsYXRmb3JtU3VwcG9ydDo6VGhlbWVQYWludFN0YXRl
IHNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewogICAg
IGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCkBAIC03MywyNyArNDc2LDEzIEBAIHN0YXRpYyBQ
bGF0Zm9ybVN1cHBvcnQ6OlRoZW1lUGFpbnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0
ZShTY3JvbGxiYXIqIHNjCiAgICAgcmV0dXJuIFBsYXRmb3JtU3VwcG9ydDo6U3RhdGVBY3RpdmU7
CiB9CiAKLXN0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50ZXJQYWludFRyYWNrKFNjcm9sbGJhclBh
aW50ZXIgc2Nyb2xsYmFyUGFpbnRlciwgYm9vbCBlbmFibGVkLCBkb3VibGUgdmFsdWUsIENHRmxv
YXQgcHJvcG9ydGlvbiwgQ0dSZWN0IGZyYW1lUmVjdCkKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotICAg
IFtzY3JvbGxiYXJQYWludGVyIHNldEVuYWJsZWQ6ZW5hYmxlZF07Ci0gICAgW3Njcm9sbGJhclBh
aW50ZXIgc2V0Qm91bmRzU2l6ZTogTlNTaXplRnJvbUNHU2l6ZShmcmFtZVJlY3Quc2l6ZSldOwot
ICAgIFtzY3JvbGxiYXJQYWludGVyIHNldERvdWJsZVZhbHVlOnZhbHVlXTsKLSAgICBbc2Nyb2xs
YmFyUGFpbnRlciBzZXRLbm9iUHJvcG9ydGlvbjpwcm9wb3J0aW9uXTsKLQotICAgIC8vIFRoZSBz
Y3JvbGxiYXIncyBmcmFtZVJlY3QgaW5jbHVkZXMgYSBzaWRlIGluc2V0IGZvciBvdmVybGF5IHNj
cm9sbGVycywgc28gd2UgaGF2ZSB0byB1c2UgdGhlIAotICAgIC8vIHRyYWNrV2lkdGggZm9yIGRy
YXdLbm9iU2xvdEluUmVjdAotICAgIE5TUmVjdCB0cmFja1JlY3Q7Ci0gICAgaWYgKFtzY3JvbGxi
YXJQYWludGVyIGlzSG9yaXpvbnRhbF0pCi0gICAgICAgIHRyYWNrUmVjdCA9IE5TTWFrZVJlY3Qo
MCwgMCwgZnJhbWVSZWN0LnNpemUud2lkdGgsIFtzY3JvbGxiYXJQYWludGVyIHRyYWNrV2lkdGhd
KTsKLSAgICBlbHNlCi0gICAgICAgIHRyYWNrUmVjdCA9IE5TTWFrZVJlY3QoMCwgMCwgW3Njcm9s
bGJhclBhaW50ZXIgdHJhY2tXaWR0aF0sIGZyYW1lUmVjdC5zaXplLmhlaWdodCk7Ci0gICAgW3Nj
cm9sbGJhclBhaW50ZXIgZHJhd0tub2JTbG90SW5SZWN0OnRyYWNrUmVjdCBoaWdobGlnaHQ6Tk9d
OworICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgeworICAgICAgICB3
a1Njcm9sbGJhclBhaW50ZXJTZXRFbmFibGVkKHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFy
KS5nZXQoKSwgc2Nyb2xsYmFyLT5lbmFibGVkKCkpOworICAgIH0KIH0KIAotLy8gT3ZlcnJpZGUg
U2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KCkgdG8gYWRkIHN1cHBvcnQgZm9yIHRoZSBmb2xsb3dp
bmc6Ci0vLyAgICAgLSBkcmF3aW5nIHVzaW5nIFBsYXRmb3JtU3VwcG9ydCBmdW5jdGlvbnMKLS8v
ICAgICAtIGRyYXdpbmcgdGlja21hcmtzCi0vLyAgICAgLSBTa2lhIHNwZWNpZmljIGNoYW5nZXMK
IGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkK
IHsKICAgICAvLyBHZXQgdGhlIHRpY2ttYXJrcyBmb3IgdGhlIGZyYW1ldmlldy4KQEAgLTEyMSwz
MiArNTEwLDMzIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnQoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29uCiAgICAgICAgICAgICAgICAgdmFs
dWUgPSAwOwogICAgICAgICB9CiAKKyAgICAgICAgU2Nyb2xsQW5pbWF0b3JDaHJvbWl1bU1hYyog
c2Nyb2xsQW5pbWF0b3IgPSBzdGF0aWNfY2FzdDxTY3JvbGxBbmltYXRvckNocm9taXVtTWFjKj4o
c2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxBbmltYXRvcigpKTsKICNpZiAhVVNF
KFNLSUEpCi0gICAgICAgIHNldElzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihjb250ZXh0LT5p
c0NBTGF5ZXJDb250ZXh0KCkpOworICAgICAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNEcmF3aW5n
SW50b0xheWVyKGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7CiAjZWxzZQotICAgICAgICBz
ZXRJc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoZmFsc2UpOworICAgICAgICBzY3JvbGxBbmlt
YXRvci0+c2V0SXNEcmF3aW5nSW50b0xheWVyKGZhbHNlKTsKICNlbmRpZgogCiAgICAgICAgIENH
RmxvYXQgb2xkS25vYkFscGhhID0gMDsKICAgICAgICAgQ0dGbG9hdCBvbGRUcmFja0FscGhhID0g
MDsKICAgICAgICAgYm9vbCBoYXNUaWNrbWFya3MgPSB0aWNrbWFya3Muc2l6ZSgpID4gMCAmJiBz
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXI7Ci0gICAgICAgIFNj
cm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciA9IHBhaW50ZXJGb3JTY3JvbGxiYXIoc2Ny
b2xsYmFyKTsKICAgICAgICAgaWYgKGhhc1RpY2ttYXJrcykgewotICAgICAgICAgICAgb2xkS25v
YkFscGhhID0gW3Njcm9sbGJhclBhaW50ZXIga25vYkFscGhhXTsKLSAgICAgICAgICAgIFtzY3Jv
bGxiYXJQYWludGVyIHNldEtub2JBbHBoYToxLjBdOwotICAgICAgICAgICAgb2xkVHJhY2tBbHBo
YSA9IFtzY3JvbGxiYXJQYWludGVyIHRyYWNrQWxwaGFdOwotICAgICAgICAgICAgW3Njcm9sbGJh
clBhaW50ZXIgc2V0VHJhY2tBbHBoYToxLjBdOworICAgICAgICAgIG9sZEtub2JBbHBoYSA9IHdr
U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcikp
OworICAgICAgICAgIHdrU2V0U2Nyb2xsYmFyUGFpbnRlcktub2JBbHBoYShwYWludGVyRm9yU2Ny
b2xsYmFyKHNjcm9sbGJhciksIDEuMCk7CisgICAgICAgICAgb2xkVHJhY2tBbHBoYSA9IHdrU2Ny
b2xsYmFyUGFpbnRlclRyYWNrQWxwaGEocGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpKTsK
KyAgICAgICAgICB3a1NldFNjcm9sbGJhclBhaW50ZXJUcmFja0FscGhhKHBhaW50ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKSwgMS4wKTsKICAgICAgICAgfQogCiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQtPmNs
aXAoZGFtYWdlUmVjdCk7CiAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShzY3JvbGxiYXItPmZy
YW1lUmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkpOwogICAgICAgICBMb2Nh
bEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KGNvbnRleHQpOwotICAgICAgICBz
Y3JvbGxiYXJQYWludGVyUGFpbnRUcmFjayhzY3JvbGxiYXJQYWludGVyLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDxDR0Zsb2F0PihzY3JvbGxiYXItPnZpc2libGVTaXplKCkp
IC0gb3ZlcmhhbmcpIC8gc2Nyb2xsYmFyLT50b3RhbFNpemUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CisgICAgICAgIFdLU2Ny
b2xsYmFyUGFpbnRlclJlZiBzY3JvbGxiYXJQYWludGVyID0gc2Nyb2xsYmFyTWFwKCktPmdldChz
Y3JvbGxiYXIpLmdldCgpOworICAgICAgICB3a1Njcm9sbGJhclBhaW50ZXJQYWludFRyYWNrKHNj
cm9sbGJhclBhaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsYmFyLT5lbmFibGVkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0
PENHRmxvYXQ+KHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgLSBvdmVyaGFuZykgLyBzY3JvbGxi
YXItPnRvdGFsU2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cm9sbGJhci0+ZnJhbWVSZWN0KCkpOwogCiAgICAgICAgIEludFJlY3QgdGlja21hcmtUcmFja1Jl
Y3QoSW50UG9pbnQoKSwgdHJhY2tSZWN0KHNjcm9sbGJhciwgZmFsc2UpLnNpemUoKSk7CiAgICAg
ICAgIGlmICh0aWNrbWFya1RyYWNrUmVjdC53aWR0aCgpIDw9IDEwKSB7CkBAIC0xNjAsMTQgKzU1
MCwxMyBAQCBib29sIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGNvbgogICAgICAgICB9CiAgICAgICAgIHBhaW50
R2l2ZW5UaWNrbWFya3MoY29udGV4dCwgc2Nyb2xsYmFyLCB0aWNrbWFya1RyYWNrUmVjdCwgdGlj
a21hcmtzKTsKIAotICAgICAgICBpZiAoc2Nyb2xsYmFyLT5lbmFibGVkKCkpCi0gICAgICAgICAg
ICBbc2Nyb2xsYmFyUGFpbnRlciBkcmF3S25vYl07CisgICAgICAgIHdrU2Nyb2xsYmFyUGFpbnRl
clBhaW50S25vYihzY3JvbGxiYXJQYWludGVyKTsKIAotICAgICAgICBzZXRJc0N1cnJlbnRseURy
YXdpbmdJbnRvTGF5ZXIoZmFsc2UpOworICAgICAgICBzY3JvbGxBbmltYXRvci0+c2V0SXNEcmF3
aW5nSW50b0xheWVyKGZhbHNlKTsKIAogICAgICAgICBpZiAoaGFzVGlja21hcmtzKSB7Ci0gICAg
ICAgICAgICBbc2Nyb2xsYmFyUGFpbnRlciBzZXRLbm9iQWxwaGE6b2xkS25vYkFscGhhXTsKLSAg
ICAgICAgICAgIFtzY3JvbGxiYXJQYWludGVyIHNldFRyYWNrQWxwaGE6b2xkVHJhY2tBbHBoYV07
CisgICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyS25vYkFscGhhKHNjcm9sbGJhclBhaW50
ZXIsIG9sZEtub2JBbHBoYSk7CisgICAgICAgICAgd2tTZXRTY3JvbGxiYXJQYWludGVyVHJhY2tB
bHBoYShzY3JvbGxiYXJQYWludGVyLCBvbGRUcmFja0FscGhhKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0VtcHR5UHJvdG9jb2xEZWZpbml0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0VtcHR5UHJvdG9jb2xEZWZpbml0aW9ucy5oCmluZGV4IGMxMWIwNWZiNTY4NWU3MTA1ZGE0OWZi
MzBkYzUxYjczYTRiZWMwODguLmRiNWNkYzY2NzJjMWI1NDNhOWUxYTI5MDYxNmM1Y2MwNzUzNjhl
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9FbXB0eVByb3RvY29s
RGVmaW5pdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRW1wdHlQcm90
b2NvbERlZmluaXRpb25zLmgKQEAgLTM0LDcgKzM0LDYgQEAKIEVNUFRZX1BST1RPQ09MKE5TVGFi
bGVWaWV3RGF0YVNvdXJjZSkKIEVNUFRZX1BST1RPQ09MKE5TVGFibGVWaWV3RGVsZWdhdGUpCiBF
TVBUWV9QUk9UT0NPTChOU1dpbmRvd0RlbGVnYXRlKQotRU1QVFlfUFJPVE9DT0woTlNBbmltYXRp
b25EZWxlZ2F0ZSkKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL05TU2Nyb2xsZXJJbXBEZXRhaWxzLmgKaW5kZXggN2IzZDE0Y2ZjODU4Mjc5YWU0OTIwNTli
YmNiOWNiYWE5MGYzOWJmNS4uY2UxMTQ2ZDMwZGQ3OWZjYmE4YzJjMDIxYjM4YzcwZjU3YTU2NDA3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBE
ZXRhaWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL05TU2Nyb2xsZXJJbXBE
ZXRhaWxzLmgKQEAgLTI4LDI4ICsyOCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKIAotLy8g
UHVibGljIEFQSXMgbm90IGF2YWlsYWJsZSBvbiB2ZXJzaW9ucyBvZiBNYWMgb24gd2hpY2ggd2Ug
YnVpbGQKLSNpZiAoZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSB8fCBkZWZpbmVkKEJVSUxE
SU5HX09OX1NOT1dfTEVPUEFSRCkpCi1lbnVtIHsKLSAgICBOU1Njcm9sbGVyU3R5bGVMZWdhY3kg
ICAgICAgPSAwLAotICAgIE5TU2Nyb2xsZXJTdHlsZU92ZXJsYXkgICAgICA9IDEKLX07Ci10eXBl
ZGVmIE5TSW50ZWdlciBOU1Njcm9sbGVyU3R5bGU7Ci0KLWVudW0gewotICAgIE5TU2Nyb2xsZXJL
bm9iU3R5bGVEZWZhdWx0ID0gMCwKLSAgICBOU1Njcm9sbGVyS25vYlN0eWxlRGFyayA9IDEsCi0g
ICAgTlNTY3JvbGxlcktub2JTdHlsZUxpZ2h0ID0gMgotfTsKLXR5cGVkZWYgTlNJbnRlZ2VyIE5T
U2Nyb2xsZXJLbm9iU3R5bGU7Ci0jZW5kaWYKLQotI2lmIChkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSkKLUBpbnRlcmZhY2Ug
TlNTY3JvbGxlcihOU09iamVjdCkKLSsgKE5TU2Nyb2xsZXJTdHlsZSlwcmVmZXJyZWRTY3JvbGxl
clN0eWxlOwotQGVuZAotI2VuZGlmCi0KKyNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiBAaW50
ZXJmYWNlIE5TT2JqZWN0IChTY3JvbGxiYXJQYWludGVyKQogKyAoaWQpc2Nyb2xsZXJJbXBXaXRo
U3R5bGU6KE5TU2Nyb2xsZXJTdHlsZSluZXdTY3JvbGxlclN0eWxlIGNvbnRyb2xTaXplOihOU0Nv
bnRyb2xTaXplKW5ld0NvbnRyb2xTaXplIGhvcml6b250YWw6KEJPT0wpaG9yaXpvbnRhbCByZXBs
YWNpbmdTY3JvbGxlckltcDooaWQpcHJldmlvdXM7CiAtIChDR0Zsb2F0KWtub2JBbHBoYTsKQEAg
LTEwMiwyNCArODEsNiBAQCB0eXBlZGVmIE5TSW50ZWdlciBOU1Njcm9sbGVyS25vYlN0eWxlOwog
LSAodm9pZCliZWdpblNjcm9sbEdlc3R1cmU7CiAtICh2b2lkKWVuZFNjcm9sbEdlc3R1cmU7CiBA
ZW5kCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotYm9v
bCBpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkKLXsKLSNpZiBVU0UoU0NST0xM
QkFSX1BBSU5URVIpCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgotfQotI2VuZGlmCi0KLU5TU2Nyb2xsZXJTdHlsZSByZWNvbW1lbmRlZFNjcm9sbGVy
U3R5bGUoKTsKLQotfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9OU1Njcm9sbGVySW1wRGV0YWlscy5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMGY0NDQwNzIzM2ExYzQ4Zjk2NWIyZDQ2MGVhNDc3MjhkNGY3NzVhMy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvTlNTY3JvbGxlckltcERldGFpbHMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOU1Njcm9sbGVySW1wRGV0YWlscy5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBQTEFURk9STShDSFJPTUlVTSkKLWJvb2wgaXNTY3JvbGxi
YXJPdmVybGF5QVBJQXZhaWxhYmxlKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBhcGlBdmFpbGFibGU7
Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkSW5pdGlhbGl6ZSA9IHRydWU7Ci0gICAgaWYgKHNob3Vs
ZEluaXRpYWxpemUpIHsKLSAgICAgICAgc2hvdWxkSW5pdGlhbGl6ZSA9IGZhbHNlOwotICAgICAg
ICBDbGFzcyBzY3JvbGxlckltcENsYXNzID0gTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVy
SW1wIik7Ci0gICAgICAgIENsYXNzIHNjcm9sbGVySW1wUGFpckNsYXNzID0gTlNDbGFzc0Zyb21T
dHJpbmcoQCJOU1Njcm9sbGVySW1wUGFpciIpOwotICAgICAgICBhcGlBdmFpbGFibGUgPSBbc2Ny
b2xsZXJJbXBDbGFzcyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNjcm9sbGVySW1wV2l0
aFN0eWxlOmNvbnRyb2xTaXplOmhvcml6b250YWw6cmVwbGFjaW5nU2Nyb2xsZXJJbXA6KV0KLSAg
ICAgICAgICAgICAgICAgICAgICAgJiYgW3Njcm9sbGVySW1wUGFpckNsYXNzIGluc3RhbmNlc1Jl
c3BvbmRUb1NlbGVjdG9yOkBzZWxlY3RvcihzY3JvbGxlclN0eWxlKV07Ci0gICAgfQotICAgIHJl
dHVybiBhcGlBdmFpbGFibGU7Ci19Ci0jZW5kaWYKLQotTlNTY3JvbGxlclN0eWxlIHJlY29tbWVu
ZGVkU2Nyb2xsZXJTdHlsZSgpIHsKLSAgICBpZiAoW05TU2Nyb2xsZXIgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3RvcihwcmVmZXJyZWRTY3JvbGxlclN0eWxlKV0pCi0gICAgICAgIHJldHVybiBb
TlNTY3JvbGxlciBwcmVmZXJyZWRTY3JvbGxlclN0eWxlXTsKLSAgICByZXR1cm4gTlNTY3JvbGxl
clN0eWxlTGVnYWN5OwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oCmluZGV4IDljZGMwZDI5MmQzMjZiN2MzYWMxOGE3YTIxZTBmMTM2
MjQ4N2JlNWMuLmI3M2VkYmIzYTYwODNkMzcwYjE3N2MyODFlZTE0YTUxNTA0Njk5MzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCkBAIC00
Niw3ICs0Niw5IEBAIGNsYXNzIFdlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGU7
CiBjbGFzcyBXZWJTY3JvbGxiYXJQYWludGVyRGVsZWdhdGU7CiAjZW5kaWYKIAorI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKIHR5cGVkZWYgaWQgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7
CisjZW5kaWYKIAogI2lmICFFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiBjbGFzcyBTY3JvbGxFbGFz
dGljaXR5Q29udHJvbGxlckNsaWVudCB7IH07CkBAIC04NCwxMSArODYsMTMgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIHNldElzQWN0aXZlKCk7CiAKKyNpZiBVU0UoU0NST0xMQkFSX1BB
SU5URVIpCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxlclN0eWxlKCk7CiAKICAgICBib29sIHNjcm9s
bGJhclBhaW50VGltZXJJc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZvaWQgc3RhcnRTY3JvbGxiYXJQ
YWludFRpbWVyKCk7CiAgICAgdm9pZCBzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigpOworI2VuZGlm
CiAKICAgICB2b2lkIHNldFZpc2libGVTY3JvbGxlclRodW1iUmVjdChjb25zdCBJbnRSZWN0Jik7
CiAKQEAgLTk2LDYgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPiBtX3Njcm9s
bEFuaW1hdGlvbkhlbHBlcjsKICAgICBSZXRhaW5QdHI8V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVy
RGVsZWdhdGU+IG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGU7CiAKKyNpZiBVU0UoU0NS
T0xMQkFSX1BBSU5URVIpCiAgICAgUmV0YWluUHRyPFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
PiBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyOwogICAgIFJldGFpblB0cjxXZWJTY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlPiBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
RGVsZWdhdGU7CiAgICAgUmV0YWluUHRyPFdlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZT4gbV9o
b3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlOwpAQCAtMTAzLDYgKzEwOCw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmlyZWQoVGltZXI8
U2Nyb2xsQW5pbWF0b3JNYWM+Kik7CiAgICAgVGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+IG1faW5p
dGlhbFNjcm9sbGJhclBhaW50VGltZXI7CisjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRBcmVhV2ls
bFBhaW50KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0KaW5kZXggODI4ZDQwZTJjYWI1NDEzODI4ZmU2YTI3OThlYjJmYmViZmU0
NmY1Yi4uMGJjYmJhOGVhYjNlYmM0OGVhOWViYTkwOWU2M2MyYzBhZTVmNjE3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQpAQCAtMzAs
NyArMzAsNiBAQAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAKICNpbmNsdWRlICJC
bG9ja0V4Y2VwdGlvbnMuaCIKLSNpbmNsdWRlICJFbXB0eVByb3RvY29sRGVmaW5pdGlvbnMuaCIK
ICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiTlNTY3JvbGxlckltcERldGFpbHMu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgpAQCAtNDYsMTIgKzQ1LDcgQEAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAotI2lmZGVm
IEJVSUxESU5HX09OX0xFT1BBUkQKLUBpbnRlcmZhY2UgTlNQcm9jZXNzSW5mbyAoU2Nyb2xsQW5p
bWF0b3JNYWNFeHQpCi0tIChOU1RpbWVJbnRlcnZhbClzeXN0ZW1VcHRpbWU7Ci1AZW5kCi0jZW5k
aWYKLQorI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHN0YXRpYyBib29sIHN1cHBvcnRzVUlT
dGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9y
YXJ5IHVudGlsIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IFNjcm9sbGJhclBhaW50ZXIgc3Vw
cG9ydCB0aGlzIHBhcnQgb2YgdGhlIEFQSS4KQEAgLTcyLDYgKzY2LDcgQEAgc3RhdGljIFNjcm9s
bGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9s
bGJhcikKIAogICAgIHJldHVybiBuaWw7CiB9CisjZW5kaWYKIAogQGludGVyZmFjZSBOU09iamVj
dCAoU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGV0YWlscykKIC0gKGlkKWluaXRXaXRoRGVsZWdhdGU6
KGlkKWRlbGVnYXRlOwpAQCAtMTc3LDYgKzE3Miw4IEBAIHN0YXRpYyBOU1NpemUgYWJzKE5TU2l6
ZSBzaXplKQogCiBAZW5kCiAKKyNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisKIEBpbnRlcmZh
Y2UgV2ViU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0CiB7CiAg
ICAgU2Nyb2xsYWJsZUFyZWEqIF9zY3JvbGxhYmxlQXJlYTsKQEAgLTQxMiw3ICs0MDksNiBAQCBl
bnVtIEZlYXR1cmVUb0FuaW1hdGUgewogICAgIHJldHVybiBhUmVjdDsKIH0KIAotI2lmICFQTEFU
Rk9STShDSFJPTUlVTSkKIC0gKENBTGF5ZXIgKilsYXllcgogewogICAgIGlmICghX3Njcm9sbGJh
cikKQEAgLTQyNSw3ICs0MjEsNiBAQCBlbnVtIEZlYXR1cmVUb0FuaW1hdGUgewogICAgIHN0YXRp
YyBDQUxheWVyICpkdW1teUxheWVyID0gW1tDQUxheWVyIGFsbG9jXSBpbml0XTsKICAgICByZXR1
cm4gZHVtbXlMYXllcjsKIH0KLSNlbmRpZgogCiAtIChOU1BvaW50KW1vdXNlTG9jYXRpb25JblNj
cm9sbGVyRm9yU2Nyb2xsZXJJbXA6KGlkKXNjcm9sbGVySW1wCiB7CkBAIC01NDYsNiArNTQxLDgg
QEAgZW51bSBGZWF0dXJlVG9BbmltYXRlIHsKIAogQGVuZAogCisjZW5kaWYgLy8gVVNFKFNDUk9M
TEJBUl9QQUlOVEVSKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NPd25QdHI8U2Nyb2xs
QW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFi
bGVBcmVhKQpAQCAtNTU1LDcgKzU1Miw5IEBAIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IFNj
cm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhCiAKIFNj
cm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWEpCiAgICAgOiBTY3JvbGxBbmltYXRvcihzY3JvbGxhYmxlQXJlYSkKKyNpZiBVU0Uo
U0NST0xMQkFSX1BBSU5URVIpCiAgICAgLCBtX2luaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyKHRo
aXMsICZTY3JvbGxBbmltYXRvck1hYzo6aW5pdGlhbFNjcm9sbGJhclBhaW50VGltZXJGaXJlZCkK
KyNlbmRpZgogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKICAgICAsIG1fc2Nyb2xsRWxhc3Rp
Y2l0eUNvbnRyb2xsZXIodGhpcykKICAgICAsIG1fc25hcFJ1YmJlckJhbmRUaW1lcih0aGlzLCAm
U2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCkKQEAgLTU2NiwyNSAr
NTY1LDI1IEBAIFNjcm9sbEFuaW1hdG9yTWFjOjpTY3JvbGxBbmltYXRvck1hYyhTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEpCiAgICAgbV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0
ZS5hZG9wdE5TKFtbV2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgYWxsb2NdIGluaXRX
aXRoU2Nyb2xsQW5pbWF0b3I6dGhpc10pOwogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmFk
b3B0TlMoW1tOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsQW5pbWF0aW9uSGVscGVyIikgYWxs
b2NdIGluaXRXaXRoRGVsZWdhdGU6bV9zY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS5nZXQo
KV0pOwogCi0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAg
ICAgIG1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5hZG9wdE5TKFtbV2ViU2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxhYmxl
QXJlYTpzY3JvbGxhYmxlQXJlYV0pOwotICAgICAgICBtX3Njcm9sbGJhclBhaW50ZXJDb250cm9s
bGVyID0gW1tbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbGVySW1wUGFpciIpIGFsbG9jXSBp
bml0XSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
LmdldCgpIHNldERlbGVnYXRlOm1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5n
ZXQoKV07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIHNldFNj
cm9sbGVyU3R5bGU6cmVjb21tZW5kZWRTY3JvbGxlclN0eWxlKCldOwotICAgIH0KKyNpZiBVU0Uo
U0NST0xMQkFSX1BBSU5URVIpCisgICAgbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVn
YXRlLmFkb3B0TlMoW1tXZWJTY3JvbGxiYXJQYWludGVyQ29udHJvbGxlckRlbGVnYXRlIGFsbG9j
XSBpbml0V2l0aFNjcm9sbGFibGVBcmVhOnNjcm9sbGFibGVBcmVhXSk7CisgICAgbV9zY3JvbGxi
YXJQYWludGVyQ29udHJvbGxlciA9IFtbW05TQ2xhc3NGcm9tU3RyaW5nKEAiTlNTY3JvbGxlcklt
cFBhaXIiKSBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyLmdldCgpIHNldERlbGVnYXRlOm1fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXJEZWxlZ2F0ZS5nZXQoKV07CisgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0
KCkgc2V0U2Nyb2xsZXJTdHlsZTp3a1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpXTsKKyNlbmRp
ZgogfQogCiBTY3JvbGxBbmltYXRvck1hYzo6flNjcm9sbEFuaW1hdG9yTWFjKCkKIHsKLSAgICBp
ZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgQkVHSU5fQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwotICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxl
ckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVy
Q29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOwotICAgICAgICBbbV9ob3Jpem9udGFs
U2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotICAgICAgICBbbV92
ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKLSAgICAg
ICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07Ci0g
ICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgfQorI2lmIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgW21fc2Ny
b2xsYmFyUGFpbnRlckNvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKSBpbnZhbGlkYXRlXTsKKyAgICBb
bV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXREZWxlZ2F0ZTpuaWxdOworICAg
IFttX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07
CisgICAgW21fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0
ZV07CisgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0
ZV07CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKyNlbmRpZgogfQogCiBib29sIFNj
cm9sbEFuaW1hdG9yTWFjOjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBs
aWVyKQpAQCAtNjk2LDEzICs2OTUsMTMgQEAgdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRp
YXRlU2Nyb2xsVG9Qb2ludEZvclNjcm9sbEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW4KIAogdm9p
ZCBTY3JvbGxBbmltYXRvck1hYzo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKCkKIHsKLSAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgLy8gVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcgaW50byB0aGUgcGFnZSBjYWNoZSwg
YnV0IHRoZSBwYWdlIAotICAgICAgICAvLyBpc24ndCByZWFsbHkgc2Nyb2xsaW5nIGluIHRoYXQg
Y2FzZS4gV2Ugc2hvdWxkIG9ubHkgcGFzcyB0aGUgbWVzc2FnZSBvbiB0byB0aGUKLSAgICAgICAg
Ly8gU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIgd2hlbiB3ZSdyZSByZWFsbHkgc2Nyb2xsaW5n
IG9uIGFuIGFjdGl2ZSBwYWdlLgotICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFj
dGl2ZVBhZ2UoKSkKLSAgICAgICAgICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdl
dCgpIGNvbnRlbnRBcmVhU2Nyb2xsZWRdOwotICAgIH0KKyNpZiBVU0UoU0NST0xMQkFSX1BBSU5U
RVIpCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIHBhZ2UgaXMgZ29pbmcg
aW50byB0aGUgcGFnZSBjYWNoZSwgYnV0IHRoZSBwYWdlIAorICAgIC8vIGlzbid0IHJlYWxseSBz
Y3JvbGxpbmcgaW4gdGhhdCBjYXNlLiBXZSBzaG91bGQgb25seSBwYXNzIHRoZSBtZXNzYWdlIG9u
IHRvIHRoZQorICAgIC8vIFNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyIHdoZW4gd2UncmUgcmVh
bGx5IHNjcm9sbGluZyBvbiBhbiBhY3RpdmUgcGFnZS4KKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEo
KS0+aXNPbkFjdGl2ZVBhZ2UoKSkKKyAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xs
ZXIuZ2V0KCkgY29udGVudEFyZWFTY3JvbGxlZF07CisjZW5kaWYKICAgICBTY3JvbGxBbmltYXRv
cjo6bm90aWZ5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKQEAgLTcxMCwxOTAgKzcwOSwyMTQgQEAg
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y29udGVudEFyZWFXaWxsUGFpbnQoKSBjb25zdAogewog
ICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAg
W21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgY29udGVudEFyZWFXaWxsRHJhd107
CisjaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQorICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIGNvbnRlbnRBcmVhV2lsbERyYXddOworI2VuZGlmCiB9CiAKIHZvaWQgU2Ny
b2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCkgY29uc3QKIHsKICAgICBp
ZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIFttX3Nj
cm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhXTsK
KyNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRy
b2xsZXIuZ2V0KCkgbW91c2VFbnRlcmVkQ29udGVudEFyZWFdOworI2VuZGlmCiB9CiAKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVkQ29udGVudEFyZWEoKSBjb25zdAogewogICAg
IGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgW21f
c2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgbW91c2VFeGl0ZWRDb250ZW50QXJlYV07
CisjaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQorICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIG1vdXNlRXhpdGVkQ29udGVudEFyZWFdOworI2VuZGlmCiB9CiAKIHZvaWQg
U2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCkgY29uc3QKIHsKICAg
ICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAgICAgIFtt
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVh
XTsKKyNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkgbW91c2VNb3ZlZEluQ29udGVudEFyZWFdOworI2VuZGlmCiB9CiAKIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRW50ZXJlZFNjcm9sbGJhcihTY3JvbGxiYXIqIHNj
cm9sbGJhcikgY29uc3QKIHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQ
YWdlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZh
aWxhYmxlKCkpIHsKLSAgICAgICAgaWYgKCFzdXBwb3J0c1VJU3RhdGVUcmFuc2l0aW9uUHJvZ3Jl
c3MoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNjcm9sbGJhclBhaW50ZXIg
cGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKSkKLSAgICAg
ICAgICAgIFtwYWludGVyIG1vdXNlRW50ZXJlZFNjcm9sbGVyXTsKLSAgICB9CisjaWYgVVNFKFND
Uk9MTEJBUl9QQUlOVEVSKQorICAgIGlmICghc3VwcG9ydHNVSVN0YXRlVHJhbnNpdGlvblByb2dy
ZXNzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoU2Nyb2xsYmFyUGFpbnRlciBwYWludGVy
ID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpKQorICAgICAgICBbcGFp
bnRlciBtb3VzZUVudGVyZWRTY3JvbGxlcl07CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzY3Jv
bGxiYXIpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6Om1vdXNlRXhpdGVk
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewogICAgIGlmICghc2Nyb2xs
YWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChp
c1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAgICAgICBpZiAoIXN1cHBvcnRz
VUlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBpZiAoU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0gc2Nyb2xsYmFyUGFpbnRlckZvclNjcm9s
bGJhcihzY3JvbGxiYXIpKQotICAgICAgICAgICAgW3BhaW50ZXIgbW91c2VFeGl0ZWRTY3JvbGxl
cl07Ci0gICAgfQorI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKKyAgICBpZiAoIXN1cHBvcnRz
VUlTdGF0ZVRyYW5zaXRpb25Qcm9ncmVzcygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKFNj
cm9sbGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Ny
b2xsYmFyKSkKKyAgICAgICAgW3BhaW50ZXIgbW91c2VFeGl0ZWRTY3JvbGxlcl07CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5p
bWF0b3JNYWM6OndpbGxTdGFydExpdmVSZXNpemUoKQogewogICAgIGlmICghc2Nyb2xsYWJsZUFy
ZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNv
bnRyb2xsZXIuZ2V0KCkgc3RhcnRMaXZlUmVzaXplXTsKKyNpZiBVU0UoU0NST0xMQkFSX1BBSU5U
RVIpCisgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc3RhcnRMaXZlUmVz
aXplXTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpjb250ZW50c1Jlc2l6
ZWQoKSBjb25zdAogewogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2Uo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFi
bGUoKSkKLSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgY29udGVu
dEFyZWFEaWRSZXNpemVdOworI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKKyAgICBbbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBjb250ZW50QXJlYURpZFJlc2l6ZV07CisjZW5k
aWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6d2lsbEVuZExpdmVSZXNpemUoKQogewog
ICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKS0+aXNPbkFjdGl2ZVBhZ2UoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAg
W21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgZW5kTGl2ZVJlc2l6ZV07CisjaWYg
VVNFKFNDUk9MTEJBUl9QQUlOVEVSKQorICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVy
LmdldCgpIGVuZExpdmVSZXNpemVdOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmNvbnRlbnRBcmVhRGlkU2hvdygpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJl
YSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlci5nZXQoKSB3aW5kb3dPcmRlcmVkSW5dOworI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRF
UikKKyAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSB3aW5kb3dPcmRlcmVk
SW5dOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmNvbnRlbnRBcmVhRGlk
SGlkZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFn
ZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWls
YWJsZSgpKQotICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSB3aW5k
b3dPcmRlcmVkT3V0XTsKKyNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisgICAgW21fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgd2luZG93T3JkZXJlZE91dF07CisjZW5kaWYKIH0K
IAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6ZGlkQmVnaW5TY3JvbGxHZXN0dXJlKCkgY29uc3QK
IHsKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKCktPmlzT25BY3RpdmVQYWdlKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpCi0gICAg
ICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGJlZ2luU2Nyb2xsR2VzdHVy
ZV07CisjaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQorICAgIFttX3Njcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyLmdldCgpIGJlZ2luU2Nyb2xsR2VzdHVyZV07CisjZW5kaWYKIH0KIAogdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6ZGlkRW5kU2Nyb2xsR2VzdHVyZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICBbbV9zY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBlbmRTY3JvbGxHZXN0dXJlXTsKKyNpZiBVU0Uo
U0NST0xMQkFSX1BBSU5URVIpCisgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0
KCkgZW5kU2Nyb2xsR2VzdHVyZV07CisjZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0gICAg
aWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIFNjcm9sbGJh
clBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFy
KTsKLSAgICAgICAgaWYgKCFwYWludGVyKQotICAgICAgICAgICAgcmV0dXJuOworI2lmIFVTRShT
Q1JPTExCQVJfUEFJTlRFUikKKyAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3JvbGxi
YXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgQVNTRVJUKCFtX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5h
ZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aFNjcm9s
bGJhcjpzY3JvbGxiYXJdKTsKKyAgICBBU1NFUlQoIW1fdmVydGljYWxTY3JvbGxiYXJQYWludGVy
RGVsZWdhdGUpOworICAgIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuYWRvcHRO
UyhbW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdpdGhTY3JvbGxiYXI6
c2Nyb2xsYmFyXSk7CiAKLSAgICAgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bV92ZXJ0aWNhbFNj
cm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyLmdldCgpIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6cGFpbnRlcl07Ci0gICAg
ICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkKLSAgICAgICAgICAgIFtw
YWludGVyIHNldEtub2JBbHBoYToxXTsKLSAgICB9CisgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6
bV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKV07CisgICAgW21fc2Nyb2xs
YmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgc2V0VmVydGljYWxTY3JvbGxlckltcDpwYWludGVy
XTsKKyAgICBpZiAoc2Nyb2xsYWJsZUFyZWEoKS0+aW5MaXZlUmVzaXplKCkpCisgICAgICAgIFtw
YWludGVyIHNldEtub2JBbHBoYToxXTsKKworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2Nyb2xs
YmFyKTsKKyNlbmRpZgogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjp3aWxsUmVtb3ZlVmVy
dGljYWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0gICAgaWYgKGlzU2Nyb2xs
YmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIFNjcm9sbGJhclBhaW50ZXIgcGFp
bnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLSAgICAgICAg
aWYgKCFwYWludGVyKQotICAgICAgICAgICAgcmV0dXJuOworI2lmIFVTRShTQ1JPTExCQVJfUEFJ
TlRFUikKKyAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3JvbGxiYXJQYWludGVyRm9y
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQorICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUpOwot
ICAgICAgICBbbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBpbnZhbGlk
YXRlXTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSA9IG51bGxw
dHI7CisgICAgQVNTRVJUKG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUpOworICAg
IFttX3ZlcnRpY2FsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwor
ICAgIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUgPSBudWxscHRyOwogCi0gICAg
ICAgIFtwYWludGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAgICAgIFttX3Njcm9sbGJhclBhaW50
ZXJDb250cm9sbGVyLmdldCgpIHNldFZlcnRpY2FsU2Nyb2xsZXJJbXA6bmlsXTsKLSAgICB9Cisg
ICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6bmlsXTsKKyAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29u
dHJvbGxlci5nZXQoKSBzZXRWZXJ0aWNhbFNjcm9sbGVySW1wOm5pbF07CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OmRpZEFkZEhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0g
ICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIFNjcm9s
bGJhclBhaW50ZXIgcGFpbnRlciA9IHNjcm9sbGJhclBhaW50ZXJGb3JTY3JvbGxiYXIoc2Nyb2xs
YmFyKTsKLSAgICAgICAgaWYgKCFwYWludGVyKQotICAgICAgICAgICAgcmV0dXJuOworI2lmIFVT
RShTQ1JPTExCQVJfUEFJTlRFUikKKyAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3Jv
bGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CisgICAgaWYgKCFwYWludGVyKQor
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgQVNTRVJUKCFtX2hvcml6b250YWxTY3JvbGxiYXJQ
YWludGVyRGVsZWdhdGUpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVs
ZWdhdGUuYWRvcHROUyhbW1dlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZSBhbGxvY10gaW5pdFdp
dGhTY3JvbGxiYXI6c2Nyb2xsYmFyXSk7CisgICAgQVNTRVJUKCFtX2hvcml6b250YWxTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUpOworICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxl
Z2F0ZS5hZG9wdE5TKFtbV2ViU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0
aFNjcm9sbGJhcjpzY3JvbGxiYXJdKTsKIAotICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpt
X2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyRGVsZWdhdGUuZ2V0KCldOwotICAgICAgICBbbV9z
Y3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRIb3Jpem9udGFsU2Nyb2xsZXJJbXA6
cGFpbnRlcl07Ci0gICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSgpLT5pbkxpdmVSZXNpemUoKSkK
LSAgICAgICAgICAgIFtwYWludGVyIHNldEtub2JBbHBoYToxXTsKLSAgICB9CisgICAgW3BhaW50
ZXIgc2V0RGVsZWdhdGU6bV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRlckRlbGVnYXRlLmdldCgp
XTsKKyAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRIb3Jpem9udGFs
U2Nyb2xsZXJJbXA6cGFpbnRlcl07CisgICAgaWYgKHNjcm9sbGFibGVBcmVhKCktPmluTGl2ZVJl
c2l6ZSgpKQorICAgICAgICBbcGFpbnRlciBzZXRLbm9iQWxwaGE6MV07CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShzY3JvbGxiYXIpOworI2VuZGlmCiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JN
YWM6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQog
ewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAgICAgICBT
Y3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3JvbGxiYXJQYWludGVyRm9yU2Nyb2xsYmFyKHNj
cm9sbGJhcik7Ci0gICAgICAgIGlmICghcGFpbnRlcikKLSAgICAgICAgICAgIHJldHVybjsKKyNp
ZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWludGVyID0g
c2Nyb2xsYmFyUGFpbnRlckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIGlmICghcGFpbnRl
cikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEFTU0VSVChtX2hvcml6b250YWxTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUpOwotICAgICAgICBbbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFpbnRl
ckRlbGVnYXRlLmdldCgpIGludmFsaWRhdGVdOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXJQYWludGVyRGVsZWdhdGUgPSBudWxscHRyOworICAgIEFTU0VSVChtX2hvcml6b250YWxTY3Jv
bGxiYXJQYWludGVyRGVsZWdhdGUpOworICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVy
RGVsZWdhdGUuZ2V0KCkgaW52YWxpZGF0ZV07CisgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyUGFp
bnRlckRlbGVnYXRlID0gbnVsbHB0cjsKIAotICAgICAgICBbcGFpbnRlciBzZXREZWxlZ2F0ZTpu
aWxdOwotICAgICAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRIb3Jp
em9udGFsU2Nyb2xsZXJJbXA6bmlsXTsKLSAgICB9CisgICAgW3BhaW50ZXIgc2V0RGVsZWdhdGU6
bmlsXTsKKyAgICBbbV9zY3JvbGxiYXJQYWludGVyQ29udHJvbGxlci5nZXQoKSBzZXRIb3Jpem9u
dGFsU2Nyb2xsZXJJbXA6bmlsXTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7
CisjZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6Y2FuY2VsQW5pbWF0aW9ucygp
CiB7CiAgICAgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VMb2FkID0gZmFsc2U7CiAKLSAgICBpZiAo
aXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGJh
clBhaW50VGltZXJJc0FjdGl2ZSgpKQotICAgICAgICAgICAgc3RvcFNjcm9sbGJhclBhaW50VGlt
ZXIoKTsKLSAgICAgICAgW21faG9yaXpvbnRhbFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQo
KSBjYW5jZWxBbmltYXRpb25zXTsKLSAgICAgICAgW21fdmVydGljYWxTY3JvbGxiYXJQYWludGVy
RGVsZWdhdGUuZ2V0KCkgY2FuY2VsQW5pbWF0aW9uc107Ci0gICAgfQorI2lmIFVTRShTQ1JPTExC
QVJfUEFJTlRFUikKKyAgICBpZiAoc2Nyb2xsYmFyUGFpbnRUaW1lcklzQWN0aXZlKCkpCisgICAg
ICAgIHN0b3BTY3JvbGxiYXJQYWludFRpbWVyKCk7CisgICAgW21faG9yaXpvbnRhbFNjcm9sbGJh
clBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKKyAgICBbbV92ZXJ0aWNh
bFNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZS5nZXQoKSBjYW5jZWxBbmltYXRpb25zXTsKKyNlbmRp
ZgogfQogCiAjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQpAQCAtMTM4MSwxNyArMTQwNCwxNSBA
QCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoVGltZXI8
U2Nyb2xsQW5pbWF0b3JNYWM+KikKIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0SXNBY3Rp
dmUoKQogewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAg
ICAgICBpZiAobmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkpCi0gICAgICAgICAgICB1cGRhdGVT
Y3JvbGxlclN0eWxlKCk7Ci0gICAgfQorI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKKyAgICBp
ZiAobmVlZHNTY3JvbGxlclN0eWxlVXBkYXRlKCkpCisgICAgICAgIHVwZGF0ZVNjcm9sbGVyU3R5
bGUoKTsKKyNlbmRpZgogfQogCisjaWYgVVNFKFNDUk9MTEJBUl9QQUlOVEVSKQogdm9pZCBTY3Jv
bGxBbmltYXRvck1hYzo6dXBkYXRlU2Nyb2xsZXJTdHlsZSgpCiB7Ci0gICAgaWYgKCFpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCFz
Y3JvbGxhYmxlQXJlYSgpLT5pc09uQWN0aXZlUGFnZSgpKSB7CiAgICAgICAgIHNldE5lZWRzU2Ny
b2xsZXJTdHlsZVVwZGF0ZSh0cnVlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ2NSwxMyArMTQ4
NiwxMiBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzdG9wU2Nyb2xsYmFyUGFpbnRUaW1lcigp
CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxiYXJQYWludFRpbWVyRmly
ZWQoVGltZXI8U2Nyb2xsQW5pbWF0b3JNYWM+KikKIHsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVy
bGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAgICAgLy8gVG8gZm9yY2UgdGhlIHNjcm9sbGJhcnMg
dG8gZmxhc2gsIHdlIGhhdmUgdG8gY2FsbCBoaWRlIGZpcnN0LiBPdGhlcndpc2UsIHRoZSBTY3Jv
bGxiYXJQYWludGVyQ29udHJvbGxlcgotICAgICAgICAvLyBtaWdodCB0aGluayB0aGF0IHRoZSBz
Y3JvbGxiYXJzIGFyZSBhbHJlYWR5IHNob3dpbmcgYW5kIGJhaWwgZWFybHkuCi0gICAgICAgIFtt
X3Njcm9sbGJhclBhaW50ZXJDb250cm9sbGVyLmdldCgpIGhpZGVPdmVybGF5U2Nyb2xsZXJzXTsK
LSAgICAgICAgW21fc2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXIuZ2V0KCkgZmxhc2hTY3JvbGxl
cnNdOwotICAgIH0KKyAgICAvLyBUbyBmb3JjZSB0aGUgc2Nyb2xsYmFycyB0byBmbGFzaCwgd2Ug
aGF2ZSB0byBjYWxsIGhpZGUgZmlyc3QuIE90aGVyd2lzZSwgdGhlIFNjcm9sbGJhclBhaW50ZXJD
b250cm9sbGVyCisgICAgLy8gbWlnaHQgdGhpbmsgdGhhdCB0aGUgc2Nyb2xsYmFycyBhcmUgYWxy
ZWFkeSBzaG93aW5nIGFuZCBiYWlsIGVhcmx5LgorICAgIFttX3Njcm9sbGJhclBhaW50ZXJDb250
cm9sbGVyLmdldCgpIGhpZGVPdmVybGF5U2Nyb2xsZXJzXTsKKyAgICBbbV9zY3JvbGxiYXJQYWlu
dGVyQ29udHJvbGxlci5nZXQoKSBmbGFzaFNjcm9sbGVyc107CiB9CisjZW5kaWYKIAogdm9pZCBT
Y3JvbGxBbmltYXRvck1hYzo6c2V0VmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0KGNvbnN0IEludFJl
Y3QmIHNjcm9sbGVyVGh1bWIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oCmluZGV4IDNjNTY5MmM0ZTJiYmM3
YjBiNzQzMjYwOGUxZjRjYWJkNWM3NWQxYjIuLmI2MGI0NjRkODIyYmYwNjg2YjA0NjJlNDNmZjU0
ODE5NzMwY2U4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxFbGFzdGljaXR5Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCi0jaW5jbHVk
ZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Njcm9sbGJhclRoZW1lTWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsYmFyVGhlbWVNYWMuaAppbmRleCBhNzRhNzU5NzdkMWY5NDRkZDQ1ZGUzYWNmY2U4ZDc4ZTZm
OThkYjdiLi40MGNmY2Q4ZGY4ZjZkMzc2ZDU5OWU5MDQ0YWI4YTJjMDMxNTc3MDU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMuaApAQCAtMjgs
NyArMjgsOSBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKIAorI2lm
IFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHR5cGVkZWYgaWQgU2Nyb2xsYmFyUGFpbnRlcjsKKyNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDkgKzQzLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShTY3JvbGxiYXIqKTsKIAotI2lm
ICFQTEFURk9STShDSFJPTUlVTSkKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwg
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSNl
bmRpZgogCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRy
b2xTaXplID0gUmVndWxhclNjcm9sbGJhcik7CiAgICAgCkBAIC01OSwxMSArNTksMTIgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqKTsKIAorI2lmIFVT
RShTQ1JPTExCQVJfUEFJTlRFUikKICAgICB2b2lkIHNldE5ld1BhaW50ZXJGb3JTY3JvbGxiYXIo
U2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFpbnRlcik7CiAgICAgU2Nyb2xsYmFyUGFpbnRlciBwYWlu
dGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciopOwogCiAgICAgc3RhdGljIGJvb2wgaXNDdXJyZW50
bHlEcmF3aW5nSW50b0xheWVyKCk7Ci0gICAgc3RhdGljIHZvaWQgc2V0SXNDdXJyZW50bHlEcmF3
aW5nSW50b0xheWVyKGJvb2wpOworI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJv
b2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKTsKQEAgLTc5LDcgKzgwLDYgQEAgcHJvdGVjdGVkOgog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGREcmFnRG9j
dW1lbnRJbnN0ZWFkT2ZUaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
KTsKLSAgICBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFyUGFydCk7
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
YmFyVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsYmFyVGhl
bWVNYWMubW0KaW5kZXggYzgwNzk0NGU3NTczMjExN2RjOWU5NGE4YjQxNWI2ZGIxODE3ZWMyYy4u
OTU0YmQwYWU4OTY2OGExOWIxZDY2NmU0NjM1YjI1ZGJmNWMyNDRmYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQpAQCAtNDYsNyArNDYs
MTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
I2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHR5cGVkZWYgSGFzaE1hcDxTY3JvbGxiYXIqLCBS
ZXRhaW5QdHI8U2Nyb2xsYmFyUGFpbnRlcj4gPiBTY3JvbGxiYXJQYWludGVyTWFwOworI2Vsc2UK
K3R5cGVkZWYgSGFzaFNldDxTY3JvbGxiYXIqPiBTY3JvbGxiYXJQYWludGVyTWFwOworI2VuZGlm
CiAKIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBzY3JvbGxiYXJNYXAoKQogewpAQCAtNzIs
MTcgKzc2LDE4IEBAIHN0YXRpYyBTY3JvbGxiYXJQYWludGVyTWFwKiBzY3JvbGxiYXJNYXAoKQog
ewogICAgIFVOVVNFRF9QQVJBTSh1bnVzZWROb3RpZmljYXRpb24pOwogCi0gICAgU2Nyb2xsYmFy
VGhlbWUqIHRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgaWYgKHRoZW1lLT5p
c01vY2tUaGVtZSgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBzdGF0aWNfY2FzdDxTY3JvbGxi
YXJUaGVtZU1hYyo+KFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpKS0+cHJlZmVyZW5jZXNDaGFuZ2Vk
KCk7CiAgICAgaWYgKHNjcm9sbGJhck1hcCgpLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBlbmQgPSBzY3JvbGxiYXJNYXAoKS0+
ZW5kKCk7CiAgICAgZm9yIChTY3JvbGxiYXJQYWludGVyTWFwOjppdGVyYXRvciBpdCA9IHNjcm9s
bGJhck1hcCgpLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyNpZiBVU0UoU0NST0xMQkFS
X1BBSU5URVIpCiAgICAgICAgIGl0LT5maXJzdC0+c3R5bGVDaGFuZ2VkKCk7CiAgICAgICAgIGl0
LT5maXJzdC0+aW52YWxpZGF0ZSgpOworI2Vsc2UKKyAgICAgICAgKCppdCktPnN0eWxlQ2hhbmdl
ZCgpOworICAgICAgICAoKml0KS0+aW52YWxpZGF0ZSgpOworI2VuZGlmCiAgICAgfQogfQogCkBA
IC05MCwxMCArOTUsNiBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRlck1hcCogc2Nyb2xsYmFyTWFw
KCkKIHsKICAgICBVTlVTRURfUEFSQU0odW51c2VkTm90aWZpY2F0aW9uKTsKIAotICAgIFNjcm9s
bGJhclRoZW1lKiB0aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAgIGlmICh0aGVt
ZS0+aXNNb2NrVGhlbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc3RhdGljX2Nhc3Q8U2Ny
b2xsYmFyVGhlbWVNYWMqPihTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKSktPnByZWZlcmVuY2VzQ2hh
bmdlZCgpOwogfQogCkBAIC0xMDcsMjIgKzEwOCwyMiBAQCBzdGF0aWMgU2Nyb2xsYmFyUGFpbnRl
ck1hcCogc2Nyb2xsYmFyTWFwKCkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIVBMQVRG
T1JNKENIUk9NSVVNKQogU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVt
ZSgpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTY3JvbGxiYXJUaGVtZU1hYywgdGhlbWUs
ICgpKTsKICAgICByZXR1cm4gJnRoZW1lOwogfQotI2VuZGlmCiAKIC8vIEZJWE1FOiBHZXQgdGhl
c2UgbnVtYmVycyBmcm9tIENvcmVVSS4KIHN0YXRpYyBpbnQgY1JlYWxCdXR0b25MZW5ndGhbXSA9
IHsgMjgsIDIxIH07CiBzdGF0aWMgaW50IGNCdXR0b25IaXRJbnNldFtdID0geyAzLCAyIH07CiAv
LyBjUmVhbEJ1dHRvbkxlbmd0aCAtIGNCdXR0b25JbnNldAogc3RhdGljIGludCBjQnV0dG9uTGVu
Z3RoW10gPSB7IDE0LCAxMCB9OworI2lmICFVU0UoU0NST0xMQkFSX1BBSU5URVIpCiBzdGF0aWMg
aW50IGNTY3JvbGxiYXJUaGlja25lc3NbXSA9IHsgMTUsIDExIH07CiBzdGF0aWMgaW50IGNCdXR0
b25JbnNldFtdID0geyAxNCwgMTEgfTsKIHN0YXRpYyBpbnQgY1RodW1iTWluTGVuZ3RoW10gPSB7
IDI2LCAyMCB9OworI2VuZGlmCiAKIHN0YXRpYyBpbnQgY091dGVyQnV0dG9uTGVuZ3RoW10gPSB7
IDE2LCAxNCB9OyAvLyBUaGUgb3V0ZXIgYnV0dG9uIGluIGEgZG91YmxlIGJ1dHRvbiBwYWlyIGlz
IGEgYml0IGJpZ2dlci4KIHN0YXRpYyBpbnQgY091dGVyQnV0dG9uT3ZlcmxhcCA9IDI7CkBAIC0x
MzEsMTMgKzEzMiwxNyBAQCBzdGF0aWMgZmxvYXQgZ0luaXRpYWxCdXR0b25EZWxheSA9IDAuNWY7
CiBzdGF0aWMgZmxvYXQgZ0F1dG9zY3JvbGxCdXR0b25EZWxheSA9IDAuMDVmOwogc3RhdGljIGJv
b2wgZ0p1bXBPblRyYWNrQ2xpY2sgPSBmYWxzZTsKIAorI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRF
UikKK3N0YXRpYyBTY3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGdCdXR0b25QbGFjZW1lbnQgPSBT
Y3JvbGxiYXJCdXR0b25zTm9uZTsKKyNlbHNlCiBzdGF0aWMgU2Nyb2xsYmFyQnV0dG9uc1BsYWNl
bWVudCBnQnV0dG9uUGxhY2VtZW50ID0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZDsKKyNlbmRp
ZgogCiBzdGF0aWMgdm9pZCB1cGRhdGVBcnJvd1BsYWNlbWVudCgpCiB7Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KKyNpZiBVU0Uo
U0NST0xMQkFSX1BBSU5URVIpCisgICAgcmV0dXJuOworI2VuZGlmCiAgICAgTlNTdHJpbmcgKmJ1
dHRvblBsYWNlbWVudCA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9i
amVjdEZvcktleTpAIkFwcGxlU2Nyb2xsQmFyVmFyaWFudCJdOwogICAgIGlmIChbYnV0dG9uUGxh
Y2VtZW50IGlzRXF1YWxUb1N0cmluZzpAIlNpbmdsZSJdKQogICAgICAgICBnQnV0dG9uUGxhY2Vt
ZW50ID0gU2Nyb2xsYmFyQnV0dG9uc1NpbmdsZTsKQEAgLTE1MywxNSArMTU4LDE1IEBAIHN0YXRp
YyB2b2lkIHVwZGF0ZUFycm93UGxhY2VtZW50KCkKIAogdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6
cmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKSB7Ci0gICAgICAgIGJvb2wgaXNIb3Jpem9udGFs
ID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAg
ICAgIFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciA9IFtOU0NsYXNzRnJvbVN0cmlu
ZyhAIk5TU2Nyb2xsZXJJbXAiKSBzY3JvbGxlckltcFdpdGhTdHlsZTpyZWNvbW1lbmRlZFNjcm9s
bGVyU3R5bGUoKSBjb250cm9sU2l6ZTooTlNDb250cm9sU2l6ZSlzY3JvbGxiYXItPmNvbnRyb2xT
aXplKCkgaG9yaXpvbnRhbDppc0hvcml6b250YWwgcmVwbGFjaW5nU2Nyb2xsZXJJbXA6bmlsXTsK
LSAgICAgICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIsIHNjcm9sbGJhclBhaW50ZXIp
OwotICAgICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2Nyb2xsYmFyKTsKLSAgICAgICAgdXBkYXRl
U2Nyb2xsYmFyT3ZlcmxheVN0eWxlKHNjcm9sbGJhcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
c2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIsIG5pbCk7Ci0gICAgfQorI2lmIFVTRShTQ1JP
TExCQVJfUEFJTlRFUikKKyAgICBib29sIGlzSG9yaXpvbnRhbCA9IHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFNjcm9sbGJhclBhaW50ZXIgc2Ny
b2xsYmFyUGFpbnRlciA9IFtOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKSBzY3Jv
bGxlckltcFdpdGhTdHlsZTp3a1JlY29tbWVuZGVkU2Nyb2xsZXJTdHlsZSgpIGNvbnRyb2xTaXpl
OihOU0NvbnRyb2xTaXplKXNjcm9sbGJhci0+Y29udHJvbFNpemUoKSBob3Jpem9udGFsOmlzSG9y
aXpvbnRhbCByZXBsYWNpbmdTY3JvbGxlckltcDpuaWxdOworICAgIHNjcm9sbGJhck1hcCgpLT5h
ZGQoc2Nyb2xsYmFyLCBzY3JvbGxiYXJQYWludGVyKTsKKyAgICB1cGRhdGVFbmFibGVkU3RhdGUo
c2Nyb2xsYmFyKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJPdmVybGF5U3R5bGUoc2Nyb2xsYmFyKTsK
KyNlbHNlCisgICAgc2Nyb2xsYmFyTWFwKCktPmFkZChzY3JvbGxiYXIpOworI2VuZGlmCiB9CiAK
IHZvaWQgU2Nyb2xsYmFyVGhlbWVNYWM6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCkBAIC0xNjksNiArMTc0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dW5y
ZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikKICAgICBzY3JvbGxiYXJNYXAo
KS0+cmVtb3ZlKHNjcm9sbGJhcik7CiB9CiAKKyNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCiB2
b2lkIFNjcm9sbGJhclRoZW1lTWFjOjpzZXROZXdQYWludGVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJh
ciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYWludGVyIG5ld1BhaW50ZXIpCiB7CiAgICAgc2Nyb2xs
YmFyTWFwKCktPnNldChzY3JvbGxiYXIsIG5ld1BhaW50ZXIpOwpAQCAtMTg4LDE3ICsxOTQsMTMg
QEAgYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6aXNDdXJyZW50bHlEcmF3aW5nSW50b0xheWVyKCkK
ICAgICByZXR1cm4gZ19pc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXI7CiB9CiAKLXZvaWQgU2Ny
b2xsYmFyVGhlbWVNYWM6OnNldElzQ3VycmVudGx5RHJhd2luZ0ludG9MYXllcihib29sIGIpCi17
Ci0gICAgZ19pc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIgPSBiOwotfQorI2VuZGlmCiAKIFNj
cm9sbGJhclRoZW1lTWFjOjpTY3JvbGxiYXJUaGVtZU1hYygpCiB7CiAgICAgc3RhdGljIGJvb2wg
aW5pdGlhbGl6ZWQ7CiAgICAgaWYgKCFpbml0aWFsaXplZCkgewogICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7Ci0gICAgICAgIGdCdXR0b25QbGFjZW1lbnQgPSBpc1Njcm9sbGJhck92ZXJsYXlB
UElBdmFpbGFibGUoKSA/IFNjcm9sbGJhckJ1dHRvbnNOb25lIDogU2Nyb2xsYmFyQnV0dG9uc0Rv
dWJsZUVuZDsKICAgICAgICAgW1dlYlNjcm9sbGJhclByZWZzT2JzZXJ2ZXIgcmVnaXN0ZXJBc09i
c2VydmVyXTsKICAgICAgICAgcHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiAgICAgfQpAQCAtMjIwLDIz
ICsyMjIsMjYgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6cHJlZmVyZW5jZXNDaGFuZ2VkKCkK
IAogaW50IFNjcm9sbGJhclRoZW1lTWFjOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29u
dHJvbFNpemUgY29udHJvbFNpemUpCiB7Ci0gICAgaWYgKGlzU2Nyb2xsYmFyT3ZlcmxheUFQSUF2
YWlsYWJsZSgpKSB7Ci0gICAgICAgIFNjcm9sbGJhclBhaW50ZXIgc2Nyb2xsYmFyUGFpbnRlciA9
IFtOU0NsYXNzRnJvbVN0cmluZyhAIk5TU2Nyb2xsZXJJbXAiKSBzY3JvbGxlckltcFdpdGhTdHls
ZTpyZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTpjb250cm9sU2l6ZSBob3Jp
em9udGFsOk5PIHJlcGxhY2luZ1Njcm9sbGVySW1wOm5pbF07Ci0gICAgICAgIHJldHVybiBbc2Ny
b2xsYmFyUGFpbnRlciB0cmFja0JveFdpZHRoXTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJu
IGNTY3JvbGxiYXJUaGlja25lc3NbY29udHJvbFNpemVdOworI2lmIFVTRShTQ1JPTExCQVJfUEFJ
TlRFUikKKyAgICBTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIgPSBbTlNDbGFzc0Zy
b21TdHJpbmcoQCJOU1Njcm9sbGVySW1wIikgc2Nyb2xsZXJJbXBXaXRoU3R5bGU6d2tSZWNvbW1l
bmRlZFNjcm9sbGVyU3R5bGUoKSBjb250cm9sU2l6ZTpjb250cm9sU2l6ZSBob3Jpem9udGFsOk5P
IHJlcGxhY2luZ1Njcm9sbGVySW1wOm5pbF07CisgICAgcmV0dXJuIFtzY3JvbGxiYXJQYWludGVy
IHRyYWNrQm94V2lkdGhdOworI2Vsc2UKKyAgICByZXR1cm4gY1Njcm9sbGJhclRoaWNrbmVzc1tj
b250cm9sU2l6ZV07CisjZW5kaWYKIH0KIAogYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6dXNlc092
ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QKIHsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJ
QXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiByZWNvbW1lbmRlZFNjcm9sbGVyU3R5bGUoKSA9
PSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5OwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKKyAgICByZXR1cm4gd2tSZWNvbW1lbmRlZFNj
cm9sbGVyU3R5bGUoKSA9PSBOU1Njcm9sbGVyU3R5bGVPdmVybGF5OworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZU1hYzo6dXBkYXRlU2Ny
b2xsYmFyT3ZlcmxheVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogeworI2lmIFVTRShTQ1JP
TExCQVJfUEFJTlRFUikKICAgICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBwYWludGVyRm9y
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CiAgICAgc3dpdGNoIChzY3JvbGxiYXItPnNjcm9sbGFibGVB
cmVhKCktPnNjcm9sbGJhck92ZXJsYXlTdHlsZSgpKSB7CiAgICAgY2FzZSBTY3JvbGxiYXJPdmVy
bGF5U3R5bGVEZWZhdWx0OgpAQCAtMjQ5LDYgKzI1NCw5IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVN
YWM6OnVwZGF0ZVNjcm9sbGJhck92ZXJsYXlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKICAg
ICAgICAgW3BhaW50ZXIgc2V0S25vYlN0eWxlOk5TU2Nyb2xsZXJLbm9iU3R5bGVMaWdodF07CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7
CisjZW5kaWYKIH0KIAogZG91YmxlIFNjcm9sbGJhclRoZW1lTWFjOjppbml0aWFsQXV0b3Njcm9s
bFRpbWVyRGVsYXkoKQpAQCAtMjY4LDcgKzI3Niw3IEBAIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1l
bnQgU2Nyb2xsYmFyVGhlbWVNYWM6OmJ1dHRvbnNQbGFjZW1lbnQoKSBjb25zdAogCiBib29sIFNj
cm9sbGJhclRoZW1lTWFjOjpoYXNCdXR0b25zKFNjcm9sbGJhciogc2Nyb2xsYmFyKQogewotICAg
IHJldHVybiBzY3JvbGxiYXItPmVuYWJsZWQoKSAmJiBidXR0b25zUGxhY2VtZW50KCkgIT0gU2Ny
b2xsYmFyQnV0dG9uc05vbmUKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5lbmFibGVkKCkgJiYgZ0J1
dHRvblBsYWNlbWVudCAhPSBTY3JvbGxiYXJCdXR0b25zTm9uZQogICAgICAgICAgICAgICYmIChz
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcgogICAgICAgICAg
ICAgID8gc2Nyb2xsYmFyLT53aWR0aCgpCiAgICAgICAgICAgICAgOiBzY3JvbGxiYXItPmhlaWdo
dCgpKSA+PSAyICogKGNSZWFsQnV0dG9uTGVuZ3RoW3Njcm9sbGJhci0+Y29udHJvbFNpemUoKV0g
LSBjQnV0dG9uSGl0SW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSk7CkBAIC0yNzcsMTIg
KzI4NSwxMyBAQCBib29sIFNjcm9sbGJhclRoZW1lTWFjOjpoYXNCdXR0b25zKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQogYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6aGFzVGh1bWIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCiB7CiAgICAgaW50IG1pbkxlbmd0aEZvclRodW1iOwotICAgIGlmIChpc1Njcm9s
bGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkgewotICAgICAgICBTY3JvbGxiYXJQYWludGVyIHBh
aW50ZXIgPSBzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJhcikuZ2V0KCk7Ci0gICAgICAgIG1p
bkxlbmd0aEZvclRodW1iID0gW3BhaW50ZXIga25vYk1pbkxlbmd0aF0gKyBbcGFpbnRlciB0cmFj
a092ZXJsYXBFbmRJbnNldF0gKyBbcGFpbnRlciBrbm9iT3ZlcmxhcEVuZEluc2V0XQotICAgICAg
ICAgICAgKyAyICogKFtwYWludGVyIHRyYWNrRW5kSW5zZXRdICsgW3BhaW50ZXIga25vYkVuZElu
c2V0XSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1pbkxlbmd0aEZvclRodW1iID0gMiAqIGNCdXR0
b25JbnNldFtzY3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgY1RodW1iTWluTGVuZ3RoW3Njcm9s
bGJhci0+Y29udHJvbFNpemUoKV0gKyAxOworI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKKyAg
ICBTY3JvbGxiYXJQYWludGVyIHBhaW50ZXIgPSBzY3JvbGxiYXJNYXAoKS0+Z2V0KHNjcm9sbGJh
cikuZ2V0KCk7CisgICAgbWluTGVuZ3RoRm9yVGh1bWIgPSBbcGFpbnRlciBrbm9iTWluTGVuZ3Ro
XSArIFtwYWludGVyIHRyYWNrT3ZlcmxhcEVuZEluc2V0XSArIFtwYWludGVyIGtub2JPdmVybGFw
RW5kSW5zZXRdCisgICAgICAgICsgMiAqIChbcGFpbnRlciB0cmFja0VuZEluc2V0XSArIFtwYWlu
dGVyIGtub2JFbmRJbnNldF0pOworI2Vsc2UKKyAgICBtaW5MZW5ndGhGb3JUaHVtYiA9IDIgKiBj
QnV0dG9uSW5zZXRbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXSArIGNUaHVtYk1pbkxlbmd0aFtz
Y3JvbGxiYXItPmNvbnRyb2xTaXplKCldICsgMTsKKyNlbmRpZgogICAgIHJldHVybiBzY3JvbGxi
YXItPmVuYWJsZWQoKSAmJiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIgPyAKICAgICAgICAgICAgICBzY3JvbGxiYXItPndpZHRoKCkgOiAKICAgICAgICAg
ICAgICBzY3JvbGxiYXItPmhlaWdodCgpKSA+PSBtaW5MZW5ndGhGb3JUaHVtYjsKQEAgLTQxOSwx
MCArNDI4LDExIEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVNYWM6OnRyYWNrUmVjdChTY3JvbGxi
YXIqIHNjcm9sbGJhciwgYm9vbCBwYWludGluZykKIAogaW50IFNjcm9sbGJhclRoZW1lTWFjOjpt
aW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7Ci0gICAgaWYgKGlzU2Ny
b2xsYmFyT3ZlcmxheUFQSUF2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gW3Njcm9sbGJhck1h
cCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBrbm9iTWluTGVuZ3RoXTsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBjVGh1bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsKKyNp
ZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisgICAgcmV0dXJuIFtzY3JvbGxiYXJNYXAoKS0+Z2V0
KHNjcm9sbGJhcikuZ2V0KCkga25vYk1pbkxlbmd0aF07CisjZWxzZQorICAgIHJldHVybiBjVGh1
bWJNaW5MZW5ndGhbc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpXTsKKyNlbmRpZgogfQogCiBib29s
IFNjcm9sbGJhclRoZW1lTWFjOjpzaG91bGRDZW50ZXJPblRodW1iKFNjcm9sbGJhciosIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQpAQCAtNDM5LDcgKzQ0OSw3IEBAIGJvb2wgU2Nyb2xs
YmFyVGhlbWVNYWM6OnNob3VsZERyYWdEb2N1bWVudEluc3RlYWRPZlRodW1iKFNjcm9sbGJhcios
IGNvbnN0IFBsYXRmCiAgICAgcmV0dXJuIGV2ZW50LmFsdEtleSgpOwogfQogCi1pbnQgU2Nyb2xs
YmFyVGhlbWVNYWM6OnNjcm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRlKFNjcm9sbGJhclBhcnQg
cGFydCkKK3N0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoU2Nyb2xsYmFy
UGFydCBwYXJ0KQogewogICAgIHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIEJhY2tCdXR0
b25TdGFydFBhcnQ6CkBAIC00NTksMTAgKzQ2OSwxNCBAQCBpbnQgU2Nyb2xsYmFyVGhlbWVNYWM6
OnNjcm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRlKFNjcm9sbGJhclBhcnQgcGFydCkKIAogdm9p
ZCBTY3JvbGxiYXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQogewotICAgIGlmIChpc1Njcm9sbGJhck92ZXJsYXlBUElBdmFpbGFibGUoKSkKLSAgICAg
ICAgW3Njcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBzZXRFbmFibGVkOnNjcm9s
bGJhci0+ZW5hYmxlZCgpXTsKKyNpZiBVU0UoU0NST0xMQkFSX1BBSU5URVIpCisgICAgW3Njcm9s
bGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSBzZXRFbmFibGVkOnNjcm9sbGJhci0+ZW5h
YmxlZCgpXTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNjcm9sbGJhcik7CisjZW5kaWYKIH0K
IAorI2lmIFVTRShTQ1JPTExCQVJfUEFJTlRFUikKIHN0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50
ZXJQYWludChTY3JvbGxiYXJQYWludGVyIHNjcm9sbGJhclBhaW50ZXIsIGJvb2wgZW5hYmxlZCwg
ZG91YmxlIHZhbHVlLCBDR0Zsb2F0IHByb3BvcnRpb24sIENHUmVjdCBmcmFtZVJlY3QpCiB7CiAg
ICAgW3Njcm9sbGJhclBhaW50ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsKQEAgLTQ4NCw0NiArNDk4
LDQ2IEBAIHN0YXRpYyB2b2lkIHNjcm9sbGJhclBhaW50ZXJQYWludChTY3JvbGxiYXJQYWludGVy
IHNjcm9sbGJhclBhaW50ZXIsIGJvb2wgZW5hYmxlCiAgICAgaWYgKGVuYWJsZWQpCiAgICAgICAg
IFtzY3JvbGxiYXJQYWludGVyIGRyYXdLbm9iXTsKIH0KKyNlbmRpZgogCi0jaWYgIVBMQVRGT1JN
KENIUk9NSVVNKQogYm9vbCBTY3JvbGxiYXJUaGVtZU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCkKIHsKLSAgICBpZiAoaXNTY3JvbGxiYXJPdmVybGF5QVBJQXZhaWxhYmxlKCkpIHsKLSAgICAg
ICAgZmxvYXQgdmFsdWUgPSAwOwotICAgICAgICBmbG9hdCBvdmVyaGFuZyA9IDA7CisjaWYgVVNF
KFNDUk9MTEJBUl9QQUlOVEVSKQorICAgIGZsb2F0IHZhbHVlID0gMDsKKyAgICBmbG9hdCBvdmVy
aGFuZyA9IDA7CiAKLSAgICAgICAgaWYgKHNjcm9sbGJhci0+Y3VycmVudFBvcygpIDwgMCkgewot
ICAgICAgICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgdG9wLgorICAgIGlmIChzY3JvbGxiYXIt
PmN1cnJlbnRQb3MoKSA8IDApIHsKKyAgICAgICAgLy8gU2Nyb2xsZWQgcGFzdCB0aGUgdG9wLgor
ICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAgIG92ZXJoYW5nID0gLXNjcm9sbGJhci0+Y3VycmVu
dFBvcygpOworICAgIH0gZWxzZSBpZiAoc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpICsgc2Nyb2xs
YmFyLT5jdXJyZW50UG9zKCkgPiBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpKSB7CisgICAgICAgIC8v
IFNjcm9sbGVkIHBhc3QgdGhlIGJvdHRvbS4KKyAgICAgICAgdmFsdWUgPSAxOworICAgICAgICBv
dmVyaGFuZyA9IHNjcm9sbGJhci0+Y3VycmVudFBvcygpICsgc2Nyb2xsYmFyLT52aXNpYmxlU2l6
ZSgpIC0gc2Nyb2xsYmFyLT50b3RhbFNpemUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBX
aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgc2Nyb2xsYWJsZSBhcmVhLgorICAgICAgICBpbnQgbWF4
aW11bSA9IHNjcm9sbGJhci0+bWF4aW11bSgpOworICAgICAgICBpZiAobWF4aW11bSA+IDApCisg
ICAgICAgICAgICB2YWx1ZSA9IHNjcm9sbGJhci0+Y3VycmVudFBvcygpIC8gbWF4aW11bTsKKyAg
ICAgICAgZWxzZQogICAgICAgICAgICAgdmFsdWUgPSAwOwotICAgICAgICAgICAgb3Zlcmhhbmcg
PSAtc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsYmFy
LT52aXNpYmxlU2l6ZSgpICsgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgPiBzY3JvbGxiYXItPnRv
dGFsU2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBTY3JvbGxlZCBwYXN0IHRoZSBib3R0b20uCi0g
ICAgICAgICAgICB2YWx1ZSA9IDE7Ci0gICAgICAgICAgICBvdmVyaGFuZyA9IHNjcm9sbGJhci0+
Y3VycmVudFBvcygpICsgc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gc2Nyb2xsYmFyLT50b3Rh
bFNpemUoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdpdGhpbiB0aGUgYm91
bmRzIG9mIHRoZSBzY3JvbGxhYmxlIGFyZWEuCi0gICAgICAgICAgICBpbnQgbWF4aW11bSA9IHNj
cm9sbGJhci0+bWF4aW11bSgpOwotICAgICAgICAgICAgaWYgKG1heGltdW0gPiAwKQotICAgICAg
ICAgICAgICAgIHZhbHVlID0gc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgLyBtYXhpbXVtOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgfQotCi0g
ICAgICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBpc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIo
Z19pc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIsIGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQo
KSk7Ci0gICAgICAgIAotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoKmNvbnRleHQpOwotICAgICAgICBjb250ZXh0LT5jbGlwKGRhbWFnZVJlY3QpOwotICAgICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS54KCksIHNjcm9sbGJh
ci0+ZnJhbWVSZWN0KCkueSgpKTsKLSAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
IGxvY2FsQ29udGV4dChjb250ZXh0KTsKLSAgICAgICAgc2Nyb2xsYmFyUGFpbnRlclBhaW50KHNj
cm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFyKS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsYmFyLT5lbmFibGVkKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGlj
X2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAtIG92ZXJoYW5nKSAvIHNj
cm9sbGJhci0+dG90YWxTaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cm9sbGJhci0+ZnJhbWVSZWN0KCkpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAor
ICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiBpc0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIoZ19p
c0N1cnJlbnRseURyYXdpbmdJbnRvTGF5ZXIsIGNvbnRleHQtPmlzQ0FMYXllckNvbnRleHQoKSk7
CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0
KTsKKyAgICBjb250ZXh0LT5jbGlwKGRhbWFnZVJlY3QpOworICAgIGNvbnRleHQtPnRyYW5zbGF0
ZShzY3JvbGxiYXItPmZyYW1lUmVjdCgpLngoKSwgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS55KCkp
OworICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7
CisgICAgc2Nyb2xsYmFyUGFpbnRlclBhaW50KHNjcm9sbGJhck1hcCgpLT5nZXQoc2Nyb2xsYmFy
KS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXItPmVuYWJsZWQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgp
KSAtIG92ZXJoYW5nKSAvIHNjcm9sbGJhci0+dG90YWxTaXplKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
KyNlbmRpZgorCiAgICAgSElUaGVtZVRyYWNrRHJhd0luZm8gdHJhY2tJbmZvOwogICAgIHRyYWNr
SW5mby52ZXJzaW9uID0gMDsKICAgICB0cmFja0luZm8ua2luZCA9IHNjcm9sbGJhci0+Y29udHJv
bFNpemUoKSA9PSBSZWd1bGFyU2Nyb2xsYmFyID8ga1RoZW1lTWVkaXVtU2Nyb2xsQmFyIDoga1Ro
ZW1lU21hbGxTY3JvbGxCYXI7CkBAIC01ODcsNyArNjAxLDYgQEAgYm9vbCBTY3JvbGxiYXJUaGVt
ZU1hYzo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY28KIAogICAgIHJldHVybiB0cnVlOwogfQotI2VuZGlmCiAKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>