<?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>233714</bug_id>
          
          <creation_ts>2021-12-01 11:07:24 -0800</creation_ts>
          <short_desc>Add an InstallCoordination webpushd backend</short_desc>
          <delta_ts>2022-02-18 11:02:44 -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>WebKit Misc.</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1819320</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-01 11:07:24 -0800</bug_when>
    <thetext>Add an InstallCoordination webpushd backend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819405</commentid>
    <comment_count>1</comment_count>
      <attachid>445613</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-01 14:00:25 -0800</bug_when>
    <thetext>Created attachment 445613
EWS v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819411</commentid>
    <comment_count>2</comment_count>
      <attachid>445613</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-12-01 14:13:15 -0800</bug_when>
    <thetext>Comment on attachment 445613
EWS v1

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

&gt; Source/WebKit/webpushd/AppBundleRequest.mm:56
&gt; +#if PLATFORM(IOS)

Please give yourself an ENABLE for all of these

&gt; Source/WebKit/webpushd/ICAppBundle.mm:190
&gt; +    LSApplicationRecord *appRecord = [[LSApplicationRecord alloc] initWithBundleIdentifier:(NSString *)getBundleIdentifier() allowPlaceholder:YES error:&amp;error];

This leaks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819460</commentid>
    <comment_count>3</comment_count>
      <attachid>445631</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-01 16:15:05 -0800</bug_when>
    <thetext>Created attachment 445631
EWS v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819488</commentid>
    <comment_count>4</comment_count>
      <attachid>445639</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-01 17:05:01 -0800</bug_when>
    <thetext>Created attachment 445639
EWS v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819517</commentid>
    <comment_count>5</comment_count>
      <attachid>445648</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-01 17:51:15 -0800</bug_when>
    <thetext>Created attachment 445648
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819518</commentid>
    <comment_count>6</comment_count>
      <attachid>445649</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-01 18:02:06 -0800</bug_when>
    <thetext>Created attachment 445649
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819543</commentid>
    <comment_count>7</comment_count>
      <attachid>445661</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-01 20:11:34 -0800</bug_when>
    <thetext>Created attachment 445661
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819552</commentid>
    <comment_count>8</comment_count>
      <attachid>445666</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-01 20:43:18 -0800</bug_when>
    <thetext>Created attachment 445666
Patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819811</commentid>
    <comment_count>9</comment_count>
      <attachid>445666</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-12-02 11:37:00 -0800</bug_when>
    <thetext>Comment on attachment 445666
Patch v4

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

&gt; Source/WebKit/webpushd/ICAppBundle.mm:137
&gt; +    appDigest-&gt;addBytes(utf8Identifier.data(), utf8Identifier.length());

Do we want to add a salt?

&gt; Source/WebKit/webpushd/ICAppBundle.mm:295
&gt; +    dataPromise.get().percentComplete = 1.0;

Should this be 100?

&gt; Source/WebKit/webpushd/ICAppBundle.mm:313
&gt; +void ICAppBundle::bundleCreationFailed(NSError *error)

Why error parameter?

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:333
&gt; +#if PLATFORM(IOS)

ENABLE(INSTALL_COORDINATION_BUNDLES)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819823</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-02 12:21:38 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #9)
&gt; Comment on attachment 445666 [details]
&gt; Patch v4
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=445666&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/webpushd/ICAppBundle.mm:137
&gt; &gt; +    appDigest-&gt;addBytes(utf8Identifier.data(), utf8Identifier.length());
&gt; 
&gt; Do we want to add a salt?

Salt discussion happening out of band, can be added later if needed.

&gt; 
&gt; &gt; Source/WebKit/webpushd/ICAppBundle.mm:295
&gt; &gt; +    dataPromise.get().percentComplete = 1.0;
&gt; 
&gt; Should this be 100?

Misnamed SPI - It&apos;s actually 0.0 to 1.0 despite the &quot;percent&quot; name

&gt; 
&gt; &gt; Source/WebKit/webpushd/ICAppBundle.mm:313
&gt; &gt; +void ICAppBundle::bundleCreationFailed(NSError *error)
&gt; 
&gt; Why error parameter?

TBD

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/WebPushDaemon.mm:333
&gt; &gt; +#if PLATFORM(IOS)
&gt; 
&gt; ENABLE(INSTALL_COORDINATION_BUNDLES)

Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819824</commentid>
    <comment_count>11</comment_count>
      <attachid>445759</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-12-02 12:21:52 -0800</bug_when>
    <thetext>Created attachment 445759
PFL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1819867</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-02 14:23:38 -0800</bug_when>
    <thetext>ChangeLog entry in Source/WebCore/PAL/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1821643</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-08 11:08:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/86220489&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843246</commentid>
    <comment_count>14</comment_count>
      <attachid>452470</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2022-02-17 19:33:04 -0800</bug_when>
    <thetext>Created attachment 452470
Revived for EWS + landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843248</commentid>
    <comment_count>15</comment_count>
      <attachid>452471</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2022-02-17 19:34:35 -0800</bug_when>
    <thetext>Created attachment 452471
Revived for EWS + landing v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843516</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-18 11:02:39 -0800</bug_when>
    <thetext>Committed r290146 (247485@main): &lt;https://commits.webkit.org/247485@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 452471.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445613</attachid>
            <date>2021-12-01 14:00:25 -0800</date>
            <delta_ts>2021-12-01 16:15:05 -0800</delta_ts>
            <desc>EWS v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>42884</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5o
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKaW5kZXggMDZj
MThjMzBlYjEwLi4xMzg0ODRiMzA5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5
cHRvL0NyeXB0b0RpZ2VzdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBQQUwgewogCkBAIC00Nyw2ICs0OCw3IEBAIHB1Ymxp
YzoKIAogICAgIFBBTF9FWFBPUlQgdm9pZCBhZGRCeXRlcyhjb25zdCB2b2lkKiBpbnB1dCwgc2l6
ZV90IGxlbmd0aCk7CiAgICAgUEFMX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gY29tcHV0ZUhhc2go
KTsKKyAgICBQQUxfRVhQT1JUIFN0cmluZyB0b0hleFN0cmluZygpOwogCiBwcml2YXRlOgogICAg
IENyeXB0b0RpZ2VzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlw
dG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRv
LmNwcAppbmRleCAxY2U1Nzk3ZmVmNjIuLmRjZjBhMzQ0ZThlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNy
eXB0by5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRv
L0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAKQEAgLTE4Miw0ICsxODIsMTkgQEAgVmVjdG9y
PHVpbnQ4X3Q+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKK1N0cmluZyBDcnlwdG9EaWdlc3Q6OnRvSGV4U3RyaW5nKCkKK3sKKyAgICBhdXRvIGhh
c2ggPSBjb21wdXRlSGFzaCgpOworCisgICAgY2hhciogc3RhcnQgPSAwOworICAgIHVuc2lnbmVk
IGhhc2hMZW5ndGggPSBoYXNoLnNpemUoKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6
Om5ld1VuaW5pdGlhbGl6ZWQoaGFzaExlbmd0aCAqIDIsIHN0YXJ0KTsKKyAgICBjaGFyKiBidWZm
ZXIgPSBzdGFydDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2hMZW5ndGg7ICsraSkg
eworICAgICAgICBzbnByaW50ZihidWZmZXIsIDMsICIlMDJYIiwgaGFzaC5hdChpKSk7CisgICAg
ICAgIGJ1ZmZlciArPSAyOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZXN1
bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAppbmRleCA3NmU0NWFmMzRlZDAuLmRjNDRjNmE3
OTZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVT
eXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lz
dGVtLmNwcApAQCAtMTI5LDE4ICsxMjksNyBAQCBTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Y29t
cHV0ZUhhc2hGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogICAgIGF1dG8gY3J5
cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6
QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBhdXRvIHV0ZjhGaWxlTmFtZSA9IGZpbGVOYW1lLnV0
ZjgoKTsKICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVzKHV0ZjhGaWxlTmFtZS5kYXRhKCksIHV0
ZjhGaWxlTmFtZS5sZW5ndGgoKSk7Ci0gICAgYXV0byBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNv
bXB1dGVIYXNoKCk7Ci0gICAgCi0gICAgLy8gQ29udmVydCBkaWdlc3QgdG8gaGV4LgotICAgIGNo
YXIqIHN0YXJ0ID0gMDsKLSAgICB1bnNpZ25lZCBkaWdlc3RMZW5ndGggPSBkaWdlc3Quc2l6ZSgp
OwotICAgIENTdHJpbmcgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChkaWdlc3RM
ZW5ndGggKiAyLCBzdGFydCk7Ci0gICAgY2hhciogYnVmZmVyID0gc3RhcnQ7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBkaWdlc3RMZW5ndGg7ICsraSkgewotICAgICAgICBzbnByaW50Zihi
dWZmZXIsIDMsICIlMDJYIiwgZGlnZXN0LmF0KGkpKTsKLSAgICAgICAgYnVmZmVyICs9IDI7Ci0g
ICAgfQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJlc3VsdCk7CisgICAgcmV0dXJuIGNy
eXB0b0RpZ2VzdC0+dG9IZXhTdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZp
ZyBiL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvd2VicHVzaGQueGNjb25maWcKaW5kZXgg
MzA1ZjIwYjIxMGNhLi41NDJjY2ZiZmU5MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ29u
ZmlndXJhdGlvbnMvd2VicHVzaGQueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1
cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZpZwpAQCAtMjUsNyArMjUsMTMgQEAKIAogUFJPRFVDVF9O
QU1FID0gd2VicHVzaGQ7CiAKLU9USEVSX0xERkxBR1MgPSAtbCBXVEYgLWZyYW1ld29yayBGb3Vu
ZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb247CitXS19DT1JFX1NFUlZJQ0VTX0xERkxB
R1MgPSAkKFdLX0NPUkVfU0VSVklDRVNfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKK1dL
X0NPUkVfU0VSVklDRVNfTERGTEFHU19tYWNvc3ggPSAtZnJhbWV3b3JrIENvcmVTZXJ2aWNlczsK
KworV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHUyA9ICQoV0tfTU9CSUxFX0NPUkVfU0VS
VklDRVNfTERGTEFHU18kKFdLX0NPQ09BX1RPVUNIKSk7CitXS19NT0JJTEVfQ09SRV9TRVJWSUNF
U19MREZMQUdTX2NvY29hdG91Y2ggPSAtZnJhbWV3b3JrIE1vYmlsZUNvcmVTZXJ2aWNlczsKKwor
T1RIRVJfTERGTEFHUyA9IC1sIFdURiAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBD
b3JlRm91bmRhdGlvbiAtZnJhbWV3b3JrIEluc3RhbGxDb29yZGluYXRpb24gLWZvcmNlX2xvYWQg
JChCVUlMVF9QUk9EVUNUU19ESVIpL2xpYlBBTC5hICQoV0tfQ09SRV9TRVJWSUNFU19MREZMQUdT
KSAkKFdLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1MpOwogTElCUkFSWV9TRUFSQ0hfUEFU
SFMgPSAkKEJVSUxUX1BST0RVQ1RTX0RJUik7CiAKIFdLX1BST0NFU1NFRF9YQ0VOVF9GSUxFPSQo
VEVNUF9GSUxFX0RJUikvJChGVUxMX1BST0RVQ1RfTkFNRSkuZW50aXRsZW1lbnRzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYjY0MWMx
MjA3MjkuLjI5NmQ1OGM4YTg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDIyLDYgKzEwMjIsMTAgQEAKIAkJNTE3QTUzMTAxRjQ3
QTg2MjAwRENEQzBBIC8qIFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdBNTMwRDFGNDdBODQzMDBE
Q0RDMEEgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTE3QjVG
MkUyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QjVG
MkQyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlv
bi5oICovOyB9OwogCQk1MTdCNUYyRjI3NTczODJCMDAyREMyMkQgLyogV2ViUHVzaERhZW1vbkNv
bm5lY3Rpb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTdCNUYyRDI3NTczODJBMDAyREMyMkQgLyogV2ViUHVzaERhZW1vbkNv
bm5lY3Rpb25Db25maWd1cmF0aW9uLmggKi87IH07CisJCTUxN0I1RjM3Mjc1N0RBODgwMDJEQzIy
RCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTE3QjVGMzMyNzU3REE4NzAwMkRDMjJEIC8qIExhdW5jaFNlcnZpY2Vz
U1BJLmggKi87IH07CisJCTUxN0I1RjM4Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0I1RjM0
Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLzsgfTsKKwkJNTE3QjVGMzkyNzU3
REE4ODAwMkRDMjJEIC8qIEluc3RhbGxDb29yZGluYXRpb25TUEkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0I1RjM1Mjc1N0RBODgwMDJEQzIyRCAv
KiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggKi87IH07CisJCTUxN0I1RjNBMjc1N0RBODgwMDJE
QzIyRCAvKiBJQ0FwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE3QjVGMzYyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLmggKi87
IH07CiAJCTUxN0NGMEUzMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE3Q0YwRTExNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxN0NGMEUzMTYzQTQ4NkMwMEMy
OTUwRiAvKiBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUxMTYz
QTQ4NkMwMEMyOTUwRiAvKiBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLzsgfTsKIAkJNTE3Q0YwRTQxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTdDRjBFMjE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKQEAgLTQzNzcsNiArNDM4MSwxMCBAQAogCQk1MTdB
NTMwRDFGNDdBODQzMDBEQ0RDMEEgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViU1dDbGllbnRDb25uZWN0aW9uTWVz
c2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViU1dDbGllbnRDb25uZWN0
aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTE3
QTUzMEUxRjQ3QTg0MzAwRENEQzBBIC8qIFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VSZWNl
aXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTV0NsaWVu
dENvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9XZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MTdCNUYyRDI3NTczODJBMDAyREMyMkQgLyog
V2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTdCNUYzMzI3NTdEQTg3MDAyREMyMkQgLyog
TGF1bmNoU2VydmljZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF1
bmNoU2VydmljZXNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QjVGMzQy
NzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gSUNBcHBCdW5kbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxN0I1RjM1Mjc1N0RBODgwMDJEQzIyRCAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJ
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3RhbGxDb29yZGluYXRpb25T
UEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QjVGMzYyNzU3REE4ODAwMkRD
MjJEIC8qIElDQXBwQnVuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElD
QXBwQnVuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0NGMEUxMTYzQTQ4
NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTE3Q0YwRTExNjNBNDg2QzAwQzI5NTBGIC8qIENh
Y2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL0NhY2hlU3Rv
cmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MTdDRjBFMjE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRT
b3VyY2VzL1dlYktpdDIvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTk4OTQsNiArOTkwMiwxMCBAQAogCQkJ
CTUxNjBFOTU0Mjc0Qjg4NzEwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0LmggKi8sCiAJCQkJ
NTE2MEU5NTMyNzRCODg3MTAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gKi8sCiAJCQkJ
NUNCQjZENEQyNzFGNjdDQzAwRkQxQTVEIC8qIGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQucGxp
c3QgKi8sCisJCQkJNTE3QjVGMzYyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLmggKi8s
CisJCQkJNTE3QjVGMzQyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLm1tICovLAorCQkJ
CTUxN0I1RjM1Mjc1N0RBODgwMDJEQzIyRCAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggKi8s
CisJCQkJNTE3QjVGMzMyNzU3REE4NzAwMkRDMjJEIC8qIExhdW5jaFNlcnZpY2VzU1BJLmggKi8s
CiAJCQkJNTFGN0JCNzUyNzQ0OThCQjAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5n
LmggKi8sCiAJCQkJNTFGN0JCNzQyNzQ0OThCQTAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JU
ZXN0aW5nLm1tICovLAogCQkJCTUxNjBFOTVDMjc0QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVu
ZGxlUmVnaXN0cnkuaCAqLywKQEAgLTEyNDQ5LDEzICsxMjQ2MSwxNiBAQAogCQkJaXNhID0gUEJY
SGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJ
ZmlsZXMgPSAoCisJCQkJNTE3QjVGM0EyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTYwRTk1NjI3NEI4ODcyMDA1NjczODggLyogQXBwQnVuZGxl
UmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxNTc5RkMyNzE3QUY1MDAwRUQ1MjgwIC8q
IERhZW1vblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGN0JCNzcyNzQ0OThCQjAw
QzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTYwRTk1RTI3NEMyQTAzMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTYwRTk1OTI3NEMwRDg5MDA1NjczODggLyogUHVzaEFwcEJ1bmRsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGN0JCN0IyNzQ0QzUwNzAwQzQ1QTcyIC8qIFB1c2hDbGll
bnRDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdCNUYzNzI3NTdEQTg4MDAyREMy
MkQgLyogTGF1bmNoU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0I1RjJGMjc1
NzM4MkIwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBp
biBIZWFkZXJzICovLAorCQkJCTUxN0I1RjM5Mjc1N0RBODgwMDJEQzIyRCAvKiBJbnN0YWxsQ29v
cmRpbmF0aW9uU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJDRDY5RjI3MjMzOTNBMDBGN0Y4
RUMgLyogV2ViUHVzaERhZW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xNDk5Myw2ICsxNTAwOCw3IEBACiAJ
CQlmaWxlcyA9ICgKIAkJCQk1MTYwRTk1NTI3NEI4ODcyMDA1NjczODggLyogQXBwQnVuZGxlUmVx
dWVzdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3QTAxMjcxN0I3RkIwMEVENTI4MCAvKiBB
cmd1bWVudENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdCNUYzODI3NTdEQTg4MDAy
REMyMkQgLyogSUNBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUY3QkI3RDI3NDU2
NDA0MDBDNDVBNzIgLyogQ29kZVNpZ25pbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzE1NzlG
RjI3MTdCNkQyMDBFRDUyODAgLyogRGFlbW9uRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QzE1NzlGRTI3MTdCNkMxMDBFRDUyODAgLyogRGFlbW9uRW5jb2Rlci5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVz
dC5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5tbQppbmRleCBk
MDQ3ZTFkNjJhNzMuLjBlMmM0ZWJhMzU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9BcHBCdW5kbGVSZXF1ZXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBw
QnVuZGxlUmVxdWVzdC5tbQpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAj
aW1wb3J0ICJBcHBCdW5kbGVSZXF1ZXN0LmgiCiAKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgiCiAj
aW1wb3J0ICJNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oIgogI2ltcG9ydCAiV2ViUHVzaERhZW1v
bi5oIgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5cGVzLmg+CkBAIC01MSw4ICs1
MiwxMyBAQCB2b2lkIEFwcEJ1bmRsZVJlcXVlc3Q6OnN0YXJ0KCkKIAogICAgIGlmIChtX2Nvbm5l
Y3Rpb24tPnVzZU1vY2tCdW5kbGVzRm9yVGVzdGluZygpKQogICAgICAgICBtX2FwcEJ1bmRsZSA9
IE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nOjpjcmVhdGUobV9vcmlnaW5TdHJpbmcsIG1fY29ubmVj
dGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCAqdGhpcyk7Ci0gICAgZWxzZQor
ICAgIGVsc2UgeworI2lmIFBMQVRGT1JNKElPUykKKyAgICAgICAgbV9hcHBCdW5kbGUgPSBJQ0Fw
cEJ1bmRsZTo6Y3JlYXRlKCptX2Nvbm5lY3Rpb24sIG1fb3JpZ2luU3RyaW5nLCAqdGhpcyk7Cisj
ZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAg
fQogCiAgICAgc3RhcnRJbnRlcm5hbCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRs
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmJiZjFjMzg3MWMy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5o
CkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW1w
b3J0ICJJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmgiCisjaW1wb3J0ICJQdXNoQXBwQnVuZGxlLmgi
CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvV2Vha1B0ci5oPgorI2lt
cG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK0BjbGFzcyBOU0Vycm9yOworQGNsYXNzIFdl
YkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyOworCituYW1lc3BhY2UgV2ViUHVzaEQgewor
CitjbGFzcyBDbGllbnRDb25uZWN0aW9uOworCitjbGFzcyBJQ0FwcEJ1bmRsZSA6IHB1YmxpYyBQ
dXNoQXBwQnVuZGxlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8SUNBcHBCdW5kbGU+IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElDQXBwQnVu
ZGxlPiBjcmVhdGUoQ2xpZW50Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBv
cmlnaW5TdHJpbmcsIFB1c2hBcHBCdW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IElDQXBwQnVuZGxlKGNvbm5lY3Rpb24sIG9yaWdpblN0cmlu
ZywgY2xpZW50KSk7CisgICAgfQorCisgICAgdm9pZCBidW5kbGVDcmVhdGlvblN1Y2NlZWRlZCgp
OworICAgIHZvaWQgYnVuZGxlQ3JlYXRpb25GYWlsZWQoTlNFcnJvciAqKTsKKworICAgIHN0YXRp
YyB2b2lkIGdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhDbGllbnRDb25uZWN0aW9uJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYpPiYmKTsKKworcHJpdmF0
ZToKKyAgICBJQ0FwcEJ1bmRsZShDbGllbnRDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBvcmln
aW5TdHJpbmcsIFB1c2hBcHBCdW5kbGVDbGllbnQmKTsKKworICAgIGNvbnN0IFN0cmluZyYgZ2V0
QnVuZGxlSWRlbnRpZmllcigpOworCisgICAgdm9pZCBjaGVja0ZvckV4aXN0aW5nQnVuZGxlKCkg
ZmluYWw7CisgICAgdm9pZCBkZWxldGVFeGlzdGluZ0J1bmRsZSgpIGZpbmFsOworICAgIHZvaWQg
Y3JlYXRlQnVuZGxlKCkgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisKKyAgICB2b2lk
IGRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKE5TRXJyb3IgKik7CisKKyAgICBSZXRh
aW5QdHI8SVhSZXN0b3JpbmdEZW1vdGVkQXBwSW5zdGFsbENvb3JkaW5hdG9yPiBtX2FwcEluc3Rh
bGxDb29yZGluYXRvcjsKKyAgICBSZXRhaW5QdHI8V2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2Jz
ZXJ2ZXI+IG1fYXBwSW5zdGFsbE9ic2VydmVyOworCisgICAgU3RyaW5nIG1fb3JpZ2luU3RyaW5n
OworICAgIFJlZlB0cjxDbGllbnRDb25uZWN0aW9uPiBtX2NsaWVudENvbm5lY3Rpb247CisKKyAg
ICBTdHJpbmcgbV9idW5kbGVJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViUHVz
aEQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvSUNBcHBCdW5kbGUubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lDQXBwQnVu
ZGxlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjVjN2I5MjY5
ZjQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRs
ZS5tbQpAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiSUNBcHBCdW5kbGUuaCIKKworI2ltcG9ydCAiQXBwQnVuZGxlUmVxdWVzdC5oIgor
I2ltcG9ydCAiTGF1bmNoU2VydmljZXNTUEkuaCIKKyNpbXBvcnQgIlB1c2hDbGllbnRDb25uZWN0
aW9uLmgiCisjaW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29y
ZS9Db25zb2xlVHlwZXMuaD4KKyNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+Cisj
aW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisK
K05TU3RyaW5nICpwdXNoQnVuZGxlQXBwTWFuYWdlbWVudERvbWFpbiA9IEAiY29tLmFwcGxlLldl
YktpdC5QdXNoQnVuZGxlcyI7CisKK0BpbnRlcmZhY2UgV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9y
T2JzZXJ2ZXIgOiBOU09iamVjdCA8SVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcj4KKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aElDQXBwQnVuZGxlOihXZWJQdXNoRDo6SUNBcHBCdW5kbGUm
KWljQXBwQnVuZGxlOworQHByb3BlcnR5IFdlYWtQdHI8V2ViUHVzaEQ6OklDQXBwQnVuZGxlPiBi
dW5kbGU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JP
YnNlcnZlcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJQ0FwcEJ1bmRsZTooV2ViUHVzaEQ6
OklDQXBwQnVuZGxlJilpY0FwcEJ1bmRsZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5p
dF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2J1bmRsZSA9IGljQXBwQnVuZGxlOwor
CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1
Y2Nlc3NmdWxseToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9y
IGZvckFwcGxpY2F0aW9uUmVjb3JkOihudWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopYXBw
UmVjb3JkCit7CisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW3NlbGYsIHByb3RlY3RlZFNlbGYgPSBS
ZXRhaW5QdHI8aWQ+KHNlbGYpXSB7CisgICAgICAgIGlmIChfYnVuZGxlKQorICAgICAgICAgICAg
X2J1bmRsZS0+YnVuZGxlQ3JlYXRpb25TdWNjZWVkZWQoKTsKKyAgICB9KTsKK30KKworLSAodm9p
ZCljb29yZGluYXRvcjoobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5h
dG9yIGNhbmNlbGVkV2l0aFJlYXNvbjoobm9ubnVsbCBOU0Vycm9yICopY2FuY2VsUmVhc29uIGNs
aWVudDooSVhDbGllbnRJZGVudGlmaWVyKWNsaWVudAoreworICAgIGNhbGxPbk1haW5SdW5Mb29w
KFtzZWxmLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPGlkPihzZWxmKSwgcHJvdGVjdGVkQ2Fu
Y2VsUmVhc29uID0gUmV0YWluUHRyPE5TRXJyb3I+KGNhbmNlbFJlYXNvbildIHsKKyAgICAgICAg
aWYgKF9idW5kbGUpCisgICAgICAgICAgICBfYnVuZGxlLT5idW5kbGVDcmVhdGlvbkZhaWxlZChw
cm90ZWN0ZWRDYW5jZWxSZWFzb24uZ2V0KCkpOworICAgIH0pOworfQorCitAZW5kCisKK3VzaW5n
IFBBTDo6Q3J5cHRvRGlnZXN0OworCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitzdGF0aWMgdm9p
ZCBicm9hZGNhc3REZWJ1Z01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIERh
ZW1vbjo6c2luZ2xldG9uKCkuYnJvYWRjYXN0RGVidWdNZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVs
OjpJbmZvLCBtYWtlU3RyaW5nKCJJQ0FwcEJ1bmRsZTogIiwgbWVzc2FnZSkpOworfQorCitJQ0Fw
cEJ1bmRsZTo6SUNBcHBCdW5kbGUoQ2xpZW50Q29ubmVjdGlvbiYgY2xpZW50Q29ubmVjdGlvbiwg
Y29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIFB1c2hBcHBCdW5kbGVDbGllbnQmIGNsaWVudCkK
KyAgICA6IFB1c2hBcHBCdW5kbGUoY2xpZW50KQorICAgICwgbV9vcmlnaW5TdHJpbmcob3JpZ2lu
U3RyaW5nKQorICAgICwgbV9jbGllbnRDb25uZWN0aW9uKCZjbGllbnRDb25uZWN0aW9uKQorewor
fQorCitzdGF0aWMgU3RyaW5nIGVuY29kZU9yaWdpblN0cmluZ0ZvckJ1bmRsZUlkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyBCdW5kbGUgaWRlbnRpZmllcnMgaGF2ZSBl
eGFjdGx5IDY0IHZhbGlkIGNoYXJhY3RlcnMuCisgICAgLy8gYS16LCBBLVosIDAtOSwgJy0nLCBh
bmQgJy4nCisgICAgLy8gQmFzZTY0IFVSTCBlbmNvZGluZyB1c2VzICctJyBhbmQgJ18nIGZvciB0
aGUgZmluYWwgMiBjaGFyYWN0ZXJzCisgICAgLy8gRm9yIG91ciBidW5kbGUgaWRlbnRpZmllciwg
d2UnbGwgQmFzZTY0IFVSTCBlbmNvZGUgdGhlbiByZXBsYWNlICdfJyB3aXRoICcuJworICAgIC8v
IFdlIGFsc28gZ2V0IHJpZCBvZiB0aGUgdHlwaWNhbCAnPScgcGFkZGluZyBmb3IgYmFzZTY0IGVu
Y29kaW5nLgorCisgICAgYXV0byBiYXNlNjQgPSBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihpbnB1
dC51dGY4KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzZTY0LnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChiYXNlNjRbaV0gPT0gJ18nKQorICAgICAgICAgICAgYmFzZTY0W2ld
ID0gJy4nOworICAgIH0KKworICAgIHNpemVfdCBudW1iZXJFcXVhbFNpZ25zID0gMDsKKyAgICBp
ZiAoYmFzZTY0LnNpemUoKSA+PSAxICYmIGJhc2U2NC5sYXN0KCkgPT0gJz0nKQorICAgICAgICAr
K251bWJlckVxdWFsU2lnbnM7CisgICAgaWYgKGJhc2U2NC5zaXplKCkgPj0gMiAmJiBiYXNlNjRb
YmFzZTY0LnNpemUoKSAtIDJdID09ICc9JykKKyAgICAgICAgKytudW1iZXJFcXVhbFNpZ25zOwor
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZTY0LmRhdGEoKSwgYmFzZTY0LnNpemUo
KSAtIG51bWJlckVxdWFsU2lnbnMpOworfQorCitzdGF0aWMgU3RyaW5nIG9yaWdpblN0cmluZ0Zy
b21FbmNvZGVkQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIGF1
dG8gdXRmOCA9IGlucHV0LnV0ZjgoKTsKKyAgICBhdXRvIGJ1ZmZlciA9IHV0ZjgubXV0YWJsZURh
dGEoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHV0ZjgubGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICBpZiAoYnVmZmVyW2ldID09ICcuJykKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICdf
JzsKKyAgICB9CisKKyAgICBhdXRvIGRlY29kZWQgPSBiYXNlNjRVUkxEZWNvZGUoYnVmZmVyLCB1
dGY4Lmxlbmd0aCgpKTsKKyAgICBpZiAoIWRlY29kZWQpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkZWNvZGVkLT5kYXRhKCksIGRlY29kZWQtPnNp
emUoKSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgYnVuZGxlUHJlZml4Rm9ySG9zdEFwcElkZW50aWZp
ZXIoY29uc3QgU3RyaW5nJiBob3N0QXBwSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGFwcERpZ2Vz
dCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNI
QV8yNTYpOworICAgIGF1dG8gdXRmOElkZW50aWZpZXIgPSBob3N0QXBwSWRlbnRpZmllci51dGY4
KCk7CisgICAgYXBwRGlnZXN0LT5hZGRCeXRlcyh1dGY4SWRlbnRpZmllci5kYXRhKCksIHV0ZjhJ
ZGVudGlmaWVyLmxlbmd0aCgpKTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb20uYXBwbGUu
V2ViS2l0LlB1c2hCdW5kbGUuIiwgYXBwRGlnZXN0LT50b0hleFN0cmluZygpLCAiLiIpOworfQor
CitzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWVGb3JPcmlnaW5TdHJpbmdBbmRIb3N0QXBwSWRlbnRp
Zmllcihjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgY29uc3QgU3RyaW5nJiBob3N0QXBwSWRl
bnRpZmllcikKK3sKKyAgICAvLyBGSVhNRTogT25jZSB3ZSBjYW4gc3RvcmUgdGhlIG9yaWdpbiBz
dHJpbmcgd2l0aGluIHRoZSBhcHAgYnVuZGxlLCBoYXNoIHRoZSBvcmlnaW4gc3RyaW5nIGFzIHdl
bGwuCisgICAgLy8gRm9yIG5vdyB3ZSBiYXNlNjQgZW5jb2RlIGl0IHRvIG1ha2UgYSB2YWxpZCBi
dW5kbGUgaWRlbnRpZmllciB0aGF0IGNhcnJpZXMgdGhlIGluZm9ybWF0aW9uLgorICAgIHJldHVy
biBtYWtlU3RyaW5nKGJ1bmRsZVByZWZpeEZvckhvc3RBcHBJZGVudGlmaWVyKGhvc3RBcHBJZGVu
dGlmaWVyKSwgZW5jb2RlT3JpZ2luU3RyaW5nRm9yQnVuZGxlSWRlbnRpZmllcihvcmlnaW5TdHJp
bmcpKTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25z
KENsaWVudENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgVmVjdG9yPFN0cmluZz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBWZWN0b3I8
U3RyaW5nPiByZXN1bHRzOworCisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBidW5kbGVJZGVudGlm
aWVyUHJlZml4ID0gKE5TU3RyaW5nICopYnVuZGxlUHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIo
Y29ubmVjdGlvbi5ob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCkpOworCisgICAgTFNFbnVt
ZXJhdG9yPExTQXBwbGljYXRpb25SZWNvcmQgKj4gKmVudW1lcmF0b3IgPSBbTFNBcHBsaWNhdGlv
blJlY29yZCBlbnVtZXJhdG9yV2l0aE9wdGlvbnM6TFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0
aW9uc0VudW1lcmF0ZVBsYWNlaG9sZGVyc107CisgICAgZm9yIChMU0FwcGxpY2F0aW9uUmVjb3Jk
ICpyZWNvcmQgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XTsgcmVjb3JkOyByZWNvcmQgPSBbZW51
bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAgICBpZiAoIVtyZWNvcmQubWFuYWdlbWVudERv
bWFpbiBpc0VxdWFsVG9TdHJpbmc6cHVzaEJ1bmRsZUFwcE1hbmFnZW1lbnREb21haW5dKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFbcmVjb3JkLmJ1bmRsZUlkZW50aWZp
ZXIgaGFzUHJlZml4OmJ1bmRsZUlkZW50aWZpZXJQcmVmaXguZ2V0KCldKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2Ugc3RvcmUgdGhlIG9yaWdp
biBzdHJpbmcgaW4gdGhlIGJ1bmRsZSBpZGVudGlmaWVyIGJhc2U2NCBlbmNvZGVkCisgICAgICAg
IC8vIE9uY2Ugd2Ugc3RvcmUgaXQgaW4gdGhlIGJ1bmRsZSBpdHNlbGYsIHdlJ2xsIGhhc2ggdGhl
IG9yaWdpbiBzdHJpbmcgaW4gdGhlIGJ1bmRsZSBpZGVudGlmaWVyIGFuZCBleHRyYWN0IGl0IGZy
b20gdGhlIGJ1bmRsZQorCisgICAgICAgIE5TQXJyYXkgKmNvbXBvbmVudHMgPSBbcmVjb3JkLmJ1
bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOmJ1bmRsZUlkZW50aWZp
ZXJQcmVmaXguZ2V0KCldOworICAgICAgICBBU1NFUlQoY29tcG9uZW50cy5jb3VudCA+PSAyKTsK
KworICAgICAgICBhdXRvIG9yaWdpblN0cmluZyA9IG9yaWdpblN0cmluZ0Zyb21FbmNvZGVkQnVu
ZGxlSWRlbnRpZmllcihjb21wb25lbnRzWzFdKTsKKyAgICAgICAgaWYgKG9yaWdpblN0cmluZy5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZXN1bHRzLmFwcGVu
ZChvcmlnaW5TdHJpbmcpOworICAgIH0KKyAgICAKKyAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1
bHRzKTsKK30KKworY29uc3QgU3RyaW5nJiBJQ0FwcEJ1bmRsZTo6Z2V0QnVuZGxlSWRlbnRpZmll
cigpCit7CisgICAgaWYgKG1fYnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkgJiYgbV9jbGllbnRD
b25uZWN0aW9uKQorICAgICAgICBtX2J1bmRsZUlkZW50aWZpZXIgPSBidW5kbGVOYW1lRm9yT3Jp
Z2luU3RyaW5nQW5kSG9zdEFwcElkZW50aWZpZXIobV9vcmlnaW5TdHJpbmcsIG1fY2xpZW50Q29u
bmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpKTsKKworICAgIHJldHVybiBt
X2J1bmRsZUlkZW50aWZpZXI7Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OmNoZWNrRm9yRXhpc3Rp
bmdCdW5kbGUoKQoreworICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIExTQXBwbGljYXRp
b25SZWNvcmQgKmFwcFJlY29yZCA9IFtbTFNBcHBsaWNhdGlvblJlY29yZCBhbGxvY10gaW5pdFdp
dGhCdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWdldEJ1bmRsZUlkZW50aWZpZXIoKSBhbGxv
d1BsYWNlaG9sZGVyOllFUyBlcnJvcjomZXJyb3JdOworCisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+ZGlkQ2hlY2tGb3JFeGlzdGluZ0J1bmRsZSgqdGhpcywgYXBwUmVjb3Jk
ID8gUHVzaEFwcEJ1bmRsZUV4aXN0czo6WWVzIDogUHVzaEFwcEJ1bmRsZUV4aXN0czo6Tm8pOwor
fQorCit2b2lkIElDQXBwQnVuZGxlOjpkZWxldGVFeGlzdGluZ0J1bmRsZSgpCit7CisgICAgW0lY
QXBwSW5zdGFsbENvb3JkaW5hdG9yIHVuaW5zdGFsbEFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcg
KilnZXRCdW5kbGVJZGVudGlmaWVyKCkgcmVxdWVzdFVzZXJDb25maXJtYXRpb246Tk8gY29tcGxl
dGlvbjpbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dIChOU0Vycm9yICplcnJv
cikgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJl
ZiB7ICp0aGlzIH0sIGVycm9yID0gUmV0YWluUHRyPE5TRXJyb3I+KGVycm9yKV0geworICAgICAg
ICAgICAgZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVXaXRoRXJyb3IoZXJyb3IuZ2V0KCkpOworICAg
ICAgICB9KTsKKyAgICB9XTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6ZGlkRGVsZXRlRXhpc3Rp
bmdCdW5kbGVXaXRoRXJyb3IoTlNFcnJvciAqZXJyb3IpCit7CisgICAgaWYgKGVycm9yKQorICAg
ICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRXJyb3IgZGVsZXRpbmcgZXhp
c3RpbmcgYnVuZGxlOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsKKworICAgIGlm
IChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0
aEVycm9yKCp0aGlzLCBlcnJvcik7Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OnN0b3AoKQorewor
ICAgIG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yLmdldCgpLm9ic2VydmVyID0gbmlsOworICAgIG1f
YXBwSW5zdGFsbENvb3JkaW5hdG9yID0gbmlsOworICAgIG1fYXBwSW5zdGFsbE9ic2VydmVyID0g
bmlsOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpjcmVhdGVCdW5kbGUoKQoreworICAgIFJldGFp
blB0cjxOU1N0cmluZz4gYnVuZGxlSWRlbnRpZmllciA9IChOU1N0cmluZyAqKWdldEJ1bmRsZUlk
ZW50aWZpZXIoKTsKKworICAgIC8vIENhbmNlbCBhbnkgcHJldmlvdXMgaW5zdGFsbCBjb29yZGlu
YXRvciB0aGF0IG1pZ2h0J3ZlIGJlZW4gbGVmdCBoYW5naW5nIGluIGEgcGFydGlhbGx5IGZpbmlz
aGVkIHN0YXRlCisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgW0lYQXBwSW5zdGFsbENv
b3JkaW5hdG9yIGNhbmNlbENvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOmJ1bmRsZUlkZW50
aWZpZXIuZ2V0KCkgd2l0aFJlYXNvbjpbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJXS0Vycm9y
RG9tYWluIiBjb2RlOjEgdXNlckluZm86bmlsXSBjbGllbnQ6SVhDbGllbnRJZGVudGlmaWVyQXBw
bGllZEZvciBlcnJvcjomZXJyb3JdOworCisgICAgQk9PTCBjcmVhdGVkID0gTk87CisgICAgZXJy
b3IgPSBuaWw7CisgICAgbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3IgPSBbSVhSZXN0b3JpbmdEZW1v
dGVkQXBwSW5zdGFsbENvb3JkaW5hdG9yIGNvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOmJ1
bmRsZUlkZW50aWZpZXIuZ2V0KCkgd2l0aENsaWVudElEOklYQ2xpZW50SWRlbnRpZmllckFwcGxp
ZWRGb3IgY3JlYXRlSWZOb3RFeGlzdGluZzpZRVMgY3JlYXRlZDomY3JlYXRlZCBlcnJvcjomZXJy
b3JdOworCisgICAgaWYgKCFtX2FwcEluc3RhbGxDb29yZGluYXRvciB8fCBlcnJvcikgeworICAg
ICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiVW5hYmxlIHRvIGNyZWF0ZSBp
bnN0YWxsIGNvb3JkaW5hdGlvciBmb3IgYXBwIGJ1bmRsZSBpZGVudGlmaWVyICIsIFN0cmluZyhi
dW5kbGVJZGVudGlmaWVyLmdldCgpKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChl
cnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWNyZWF0ZWQpIHsKKyAg
ICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkV4aXN0aW5nIGluc3RhbGwg
Y29vcmRpbmF0aW9yIGZvciBhcHAgYnVuZGxlIGlkZW50aWZpZXIgIiwgU3RyaW5nKGJ1bmRsZUlk
ZW50aWZpZXIuZ2V0KCkpLCAiIHdhcyBmb3VuZC4gVGhpcyBpcyB1bmV4cGVjdGVkLiIpKTsKKyAg
ICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9hcHBJbnN0YWxsT2JzZXJ2ZXIgPSBhZG9wdE5TKFtbV2ViQXBwSW5zdGFsbENv
b3JkaW5hdG9yT2JzZXJ2ZXIgYWxsb2NdIGluaXRXaXRoSUNBcHBCdW5kbGU6KnRoaXNdKTsKKyAg
ICBtX2FwcEluc3RhbGxDb29yZGluYXRvci5nZXQoKS5vYnNlcnZlciA9IG1fYXBwSW5zdGFsbE9i
c2VydmVyLmdldCgpOworCisgICAgUmV0YWluUHRyPElYUGxhY2Vob2xkZXI+IHBsYWNlaG9sZGVy
ID0gYWRvcHROUyhbW0lYUGxhY2Vob2xkZXIgYWxsb2NdIGluaXRBcHBQbGFjZWhvbGRlcldpdGhC
dW5kbGVOYW1lOihOU1N0cmluZyAqKW1fb3JpZ2luU3RyaW5nIGJ1bmRsZUlEOmJ1bmRsZUlkZW50
aWZpZXIuZ2V0KCkgaW5zdGFsbFR5cGU6TFNJbnN0YWxsVHlwZUludGVudGlvbmFsRG93bmdyYWRl
IGNsaWVudDpJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yXSk7CisKKyAgICBSZXRhaW5QdHI8
SVhQbGFjZWhvbGRlckF0dHJpYnV0ZXM+IHBsYWNlaG9sZGVyQXR0cmlidXRlcyA9IGFkb3B0TlMo
W0lYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzIG5ld10pOworICAgIHBsYWNlaG9sZGVyQXR0cmlidXRl
cy5nZXQoKS5sYXVuY2hQcm9oaWJpdGVkID0gWUVTOworCisgICAgW3BsYWNlaG9sZGVyIHNldFBs
YWNlaG9sZGVyQXR0cmlidXRlczpwbGFjZWhvbGRlckF0dHJpYnV0ZXMuZ2V0KCkgZXJyb3I6JmVy
cm9yXTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1h
a2VTdHJpbmcoIlVuYWJsZSB0byBzZXQgcGxhY2Vob2xkZXIgYXR0cmlidXRlcyBmb3IgYnVuZGxl
ICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtl
cnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TRGljdGlvbmFyeSAqZW50aXRsZW1l
bnRzRGljdGlvbmFyeSA9IEB7CisgICAgICAgIEAiY29tLmFwcGxlLnByaXZhdGUudXNlcm5vdGlm
aWNhdGlvbnMuYnVuZGxlLWlkZW50aWZpZXJzIjogYnVuZGxlSWRlbnRpZmllci5nZXQoKSwKKyAg
ICAgICAgQCJjb20uYXBwbGUucHJpdmF0ZS51c2Vybm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb24t
c2ltdWxhdG9yIjogQFlFUywKKyAgICAgICAgQCJjb20uYXBwbGUuZGV2ZWxvcGVyLmFwcC1tYW5h
Z2VtZW50LWRvbWFpbiI6IHB1c2hCdW5kbGVBcHBNYW5hZ2VtZW50RG9tYWluCisgICAgfTsKKyAg
ICBSZXRhaW5QdHI8SVhQcm9taXNlZEluTWVtb3J5RGljdGlvbmFyeT4gZW50aXRsZW1lbnRzUHJv
bWlzZSA9IGFkb3B0TlMoW1tJWFByb21pc2VkSW5NZW1vcnlEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
V2l0aE5hbWU6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFbnRpdGxlbWVudHMgUHJvbWlz
ZSBmb3IgJUAiLCBidW5kbGVJZGVudGlmaWVyLmdldCgpXSBjbGllbnQ6SVhDbGllbnRJZGVudGlm
aWVyQXBwbGllZEZvciBkaWN0aW9uYXJ5OmVudGl0bGVtZW50c0RpY3Rpb25hcnldKTsKKworICAg
IGlmICghZW50aXRsZW1lbnRzUHJvbWlzZSkgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3Nh
Z2UobWFrZVN0cmluZygiVW5hYmxlIHRvIGNyZWF0ZSBwbGFjZWhvbGRlciBlbnRpdGxlbWVudHMg
cHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSkpOwor
ICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBlcnJvciA9IG5pbDsKKyAgICBpZiAoIVtwbGFjZWhvbGRlciBzZXRFbnRpdGxl
bWVudHNQcm9taXNlOmVudGl0bGVtZW50c1Byb21pc2UuZ2V0KCkgZXJyb3I6JmVycm9yXSB8fCBl
cnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVk
IHRvIHNldCBwbGFjZWhvbGRlciBlbnRpdGxlbWVudHMgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0
cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBk
ZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEJPT0wgcmVzdWx0ID0gW3BsYWNlaG9sZGVyIHNl
dENvbmZpZ3VyYXRpb25Db21wbGV0ZVdpdGhFcnJvcjomZXJyb3JdOworICAgIGlmICghcmVzdWx0
IHx8IGVycm9yKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJG
YWlsZWQgdG8gc2V0IHBsYWNlaG9sZGVyIGVudGl0bGVtZW50cyBwcm9taXNlIGNvbXBsZXRlIGZv
ciBidW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBT
dHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWls
ZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fYXBwSW5zdGFsbENv
b3JkaW5hdG9yIHNldFBsYWNlaG9sZGVyUHJvbWlzZTpwbGFjZWhvbGRlci5nZXQoKSBlcnJvcjom
ZXJyb3JdOworICAgIGlmIChlcnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2Uo
bWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCBwbGFjZWhvbGRlciBwcm9taXNlIGZvciBidW5kbGUg
IiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vy
cm9yIGRlc2NyaXB0aW9uXSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmV0YWluUHRyPElYUHJvbWlzZWRPdXRP
ZkJhbmRUcmFuc2Zlcj4gZGF0YVByb21pc2UgPSBhZG9wdE5TKFtbSVhQcm9taXNlZE91dE9mQmFu
ZFRyYW5zZmVyIGFsbG9jXSBpbml0V2l0aE5hbWU6QCJFbXB0eSB1c2VyIGRhdGEgcHJvbWlzZSIg
Y2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZGlza1NwYWNlTmVlZGVkOjBdKTsK
KyAgICBkYXRhUHJvbWlzZS5nZXQoKS5wZXJjZW50Q29tcGxldGUgPSAxLjA7CisgICAgZGF0YVBy
b21pc2UuZ2V0KCkuY29tcGxldGUgPSBZRVM7CisKKyAgICBbbV9hcHBJbnN0YWxsQ29vcmRpbmF0
b3Igc2V0VXNlckRhdGFQcm9taXNlOmRhdGFQcm9taXNlLmdldCgpIGVycm9yOiZlcnJvcl07Cisg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5n
KCJGYWlsZWQgdG8gc2V0IHVzZXIgZGF0YSBwcm9taXNlIGZvciBidW5kbGUgIiwgU3RyaW5nKGJ1
bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0
aW9uXSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorfQorCit2b2lkIElDQXBwQnVuZGxlOjpidW5kbGVDcmVhdGlvblN1Y2Nl
ZWRlZCgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ3JlYXRl
QXBwQnVuZGxlKCp0aGlzLCBQdXNoQXBwQnVuZGxlQ3JlYXRpb25SZXN1bHQ6OlN1Y2Nlc3MpOwor
Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OmJ1bmRsZUNyZWF0aW9uRmFpbGVkKE5TRXJyb3IgKmVy
cm9yKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENyZWF0ZUFw
cEJ1bmRsZSgqdGhpcywgUHVzaEFwcEJ1bmRsZUNyZWF0aW9uUmVzdWx0OjpGYWlsdXJlKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSW5zdGFsbENvb3JkaW5hdGlvblNQSS5o
IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMDZkNzBmODFmNDAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0luc3RhbGxDb29yZGluYXRpb25TUEku
aApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisjaWYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworI2ltcG9ydCA8SW5zdGFsbENvb3JkaW5hdGlvbi9J
WEFwcEluc3RhbGxDb29yZGluYXRvci5oPgorI2ltcG9ydCA8SW5zdGFsbENvb3JkaW5hdGlvbi9J
bnN0YWxsQ29vcmRpbmF0aW9uLmg+CisKKyNlbHNlCisKKyNpbmNsdWRlICJMYXVuY2hTZXJ2aWNl
c1NQSS5oIgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCit0eXBlZGVmIGVudW0gOiBOU1VJ
bnRlZ2VyIHsKK30gSVhDb29yZGluYXRvclByb2dyZXNzUGhhc2U7CisKK3R5cGVkZWYgZW51bSA6
IE5TVUludGVnZXIgeworICAgIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yUGxhY2Vob2xkZXJQcm9t
aXNlID0gMSwKK30gSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JQcm9taXNlSWRlbnRpZmllcjsKKwor
dHlwZWRlZiBlbnVtIDogTlNVSW50ZWdlciB7CisgICAgSVhDbGllbnRJZGVudGlmaWVyQXBwbGll
ZEZvciA9IDE5LAorfSBJWENsaWVudElkZW50aWZpZXI7CisKK0BjbGFzcyBMU0FwcGxpY2F0aW9u
UmVjb3JkOworQGNsYXNzIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yOworQGNsYXNzIElYUGxhY2Vo
b2xkZXI7CitAY2xhc3MgSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyOworCitAcHJvdG9jb2wg
SVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0g
KHZvaWQpY29vcmRpbmF0b3JEaWRSZWdpc3RlckZvck9ic2VydmF0aW9uOihub25udWxsIElYQXBw
SW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7CistICh2b2lkKWNvb3JkaW5hdG9yU2hv
dWxkUHJpb3JpdGl6ZToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5h
dG9yOworLSAodm9pZCljb29yZGluYXRvclNob3VsZFJlc3VtZToobm9ubnVsbCBJWEFwcEluc3Rh
bGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29yZGluYXRvclNob3VsZFBh
dXNlOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7CistICh2
b2lkKWNvb3JkaW5hdG9yOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRp
bmF0b3IgZGlkVXBkYXRlUHJvZ3Jlc3M6KGRvdWJsZSlwZXJjZW50Q29tcGxldGUgZm9yUGhhc2U6
KElYQ29vcmRpbmF0b3JQcm9ncmVzc1BoYXNlKXBoYXNlIG92ZXJhbGxQcm9ncmVzczooZG91Ymxl
KW92ZXJhbGxQcm9ncmVzczsKKy0gKHZvaWQpY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3Nm
dWxseToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFw
cGxpY2F0aW9uUmVjb3JkOihudWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopYXBwUmVjb3Jk
OworLSAodm9pZCljb29yZGluYXRvckRpZEluc3RhbGxQbGFjZWhvbGRlcjoobm9ubnVsbCBJWEFw
cEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFwcGxpY2F0aW9uUmVjb3JkOihu
dWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopcGxhY2Vob2xkZXJSZWNvcmQ7CistICh2b2lk
KWNvb3JkaW5hdG9yOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0
b3IgY2FuY2VsZWRXaXRoUmVhc29uOihub25udWxsIE5TRXJyb3IgKiljYW5jZWxSZWFzb24gY2xp
ZW50OihJWENsaWVudElkZW50aWZpZXIpY2xpZW50OworQGVuZAorCit0eXBlZGVmIHZvaWQgKF5J
WEFwcEluc3RhbGxDb29yZGluYXRvckVycm9yQ29tcGxldGlvbikoTlNFcnJvciAqIF9OdWxsYWJs
ZSBlcnJvcik7CisKK0BpbnRlcmZhY2UgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IKKysgKHZvaWQp
dW5pbnN0YWxsQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlEIHJlcXVlc3RVc2Vy
Q29uZmlybWF0aW9uOihCT09MKXJlcXVlc3RVc2VyQ29uZmlybWF0aW9uIGNvbXBsZXRpb246KElY
QXBwSW5zdGFsbENvb3JkaW5hdG9yRXJyb3JDb21wbGV0aW9uKWNvbXBsZXRpb247CisrIChCT09M
KWNhbmNlbENvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlE
IHdpdGhSZWFzb246KE5TRXJyb3IgKiljYW5jZWxSZWFzb24gY2xpZW50OihJWENsaWVudElkZW50
aWZpZXIpY2xpZW50IGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKKysgKGluc3RhbmNldHlw
ZSljb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcgKilidW5kbGVJRCB3aXRo
Q2xpZW50SUQ6KElYQ2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBjcmVhdGVJZk5vdEV4aXN0aW5n
OihCT09MKWNyZWF0ZSBjcmVhdGVkOihCT09MICopb3V0X2NyZWF0ZWQgZXJyb3I6KE5TRXJyb3Ig
Kiopb3V0X2Vycm9yOworQHByb3BlcnR5IChub25hdG9taWMsIG51bGxhYmxlLCB3ZWFrKSBpZDxJ
WEFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyPiBvYnNlcnZlcjsKKy0gKEJPT0wpc2V0UGxh
Y2Vob2xkZXJQcm9taXNlOihJWFBsYWNlaG9sZGVyICopcGxhY2Vob2xkZXJQcm9taXNlIGVycm9y
OihOU0Vycm9yICoqKW91dF9lcnJvcjsKKy0gKEJPT0wpc2V0VXNlckRhdGFQcm9taXNlOihJWFBy
b21pc2VkT3V0T2ZCYW5kVHJhbnNmZXIgKil1c2VyRGF0YSBlcnJvcjooTlNFcnJvciAqKilvdXRf
ZXJyb3I7CitAZW5kCisKK0BpbnRlcmZhY2UgSVhSZXN0b3JpbmdEZW1vdGVkQXBwSW5zdGFsbENv
b3JkaW5hdG9yIDogSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IKK0BlbmQKKworQGludGVyZmFjZSBJ
WE93bmVkRGF0YVByb21pc2UgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIElYUHJvbWlz
ZWRJbk1lbW9yeURpY3Rpb25hcnkgOiBJWE93bmVkRGF0YVByb21pc2UKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmll
cilpZGVudGl0eSBkaWN0aW9uYXJ5OihOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OworQGVuZAor
CitAaW50ZXJmYWNlIElYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzIDogTlNPYmplY3QKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBCT09MIGxhdW5jaFByb2hpYml0ZWQ7CitAZW5kCisKK0BpbnRlcmZhY2Ug
SVhQbGFjZWhvbGRlciA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdEFwcFBsYWNlaG9s
ZGVyV2l0aEJ1bmRsZU5hbWU6KE5TU3RyaW5nICopbmFtZSBidW5kbGVJRDooTlNTdHJpbmcgKili
dW5kbGVJRCBpbnN0YWxsVHlwZTooTFNJbnN0YWxsVHlwZSlpbnN0YWxsVHlwZSBjbGllbnQ6KElY
Q2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworLSAo
Qk9PTClzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZXM6KG5vbm51bGwgSVhQbGFjZWhvbGRlckF0dHJp
YnV0ZXMgKilhdHRyaWJ1dGVzIGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKKy0gKEJPT0wp
c2V0RW50aXRsZW1lbnRzUHJvbWlzZToobm9ubnVsbCBJWE93bmVkRGF0YVByb21pc2UgKillbnRp
dGxlbWVudHMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgX051bGxhYmxlICogX051
bGxhYmxlKW91dF9lcnJvcjsKKy0gKEJPT0wpc2V0Q29uZmlndXJhdGlvbkNvbXBsZXRlV2l0aEVy
cm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKK0BlbmQKKworQGludGVyZmFjZSBJWE9wYXF1ZURh
dGFQcm9taXNlIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBJWFByb21pc2VkT3V0T2ZC
YW5kVHJhbnNmZXIgOiBJWE9wYXF1ZURhdGFQcm9taXNlCitAcHJvcGVydHkgKG5vbmF0b21pYykg
Qk9PTCBjb21wbGV0ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBkb3VibGUgcGVyY2VudENvbXBs
ZXRlOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGNsaWVu
dDooSVhDbGllbnRJZGVudGlmaWVyKWlkZW50aXR5IGRpc2tTcGFjZU5lZWRlZDoodWludDY0X3Qp
dG90YWxCeXRlczsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaCBiL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjhlZWUxMDhkZGEwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaApAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RL
KQorCisvLyBUaGlzIHNwYWNlIGludGVudGlvbmFsbHkgbGVmdCBibGFuaworCisjZWxzZQorCitO
U19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCit0eXBlZGVmIE5TX0VOVU0oTlNVSW50ZWdlciwgTFNJ
bnN0YWxsVHlwZSkgeworICAgIExTSW5zdGFsbFR5cGVJbnRlbnRpb25hbERvd25ncmFkZSA9IDgK
K307CisKK0BpbnRlcmZhY2UgTFNSZWNvcmQgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNl
IExTQnVuZGxlUmVjb3JkIDogTFNSZWNvcmQKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIG51bGxhYmxl
KSBOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllcjsKK0BlbmQKKworQGludGVyZmFjZSBMU0FwcGxp
Y2F0aW9uUmVjb3JkIDogTFNCdW5kbGVSZWNvcmQKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wg
cGxhY2Vob2xkZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1N0cmluZyAqbWFuYWdlbWVudERv
bWFpbjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQnVuZGxlSWRlbnRpZmllcjooTlNTdHJp
bmcgKilidW5kbGVJZGVudGlmaWVyIGFsbG93UGxhY2Vob2xkZXI6KEJPT0wpYWxsb3dQbGFjZWhv
bGRlciBlcnJvcjooTlNFcnJvciAqKilvdXRFcnJvcjsKK0BlbmQKKworQGludGVyZmFjZSBMU0Vu
dW1lcmF0b3I8X19jb3ZhcmlhbnQgT2JqZWN0VHlwZT4gOiBOU0VudW1lcmF0b3I8T2JqZWN0VHlw
ZT4KK0BlbmQKKwordHlwZWRlZiBOU19PUFRJT05TKHVpbnQ2NF90LCBMU0FwcGxpY2F0aW9uRW51
bWVyYXRpb25PcHRpb25zKSB7CisgICAgTFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9uc0Vu
dW1lcmF0ZVBsYWNlaG9sZGVycyA9ICgxIDw8IDYpCit9OworCitAaW50ZXJmYWNlIExTQXBwbGlj
YXRpb25SZWNvcmQgKEVudW1lcmF0aW9uKQorKyAoTFNFbnVtZXJhdG9yPExTQXBwbGljYXRpb25S
ZWNvcmQgKj4gKillbnVtZXJhdG9yV2l0aE9wdGlvbnM6KExTQXBwbGljYXRpb25FbnVtZXJhdGlv
bk9wdGlvbnMpb3B0aW9uczsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRp
ZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oIGIvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmgKaW5kZXggOGE2ZDU3Y2M2ZjViLi5lOTg1
ZTMyMTAxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRs
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogQGNsYXNzIE5TRXJyb3I7
CiAKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVB
cHBCdW5kbGUoUHVzaEFwcEJ1bmRsZSYsIFB1c2hBcHBCdW5kbGVDcmVhdGlvblJlc3VsdCkgPSAw
OwogfTsKIAotY2xhc3MgUHVzaEFwcEJ1bmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFB1c2hBcHBC
dW5kbGU+IHsKK2NsYXNzIFB1c2hBcHBCdW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8UHVzaEFwcEJ1bmRsZT4gewogcHVibGljOgogICAgIHZpcnR1YWwgflB1c2hBcHBCdW5kbGUo
KTsKICAgICB2b2lkIGRldGFjaEZyb21DbGllbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2Vi
UHVzaERhZW1vbi5tbQppbmRleCAzYjc4ZjI5MGMyN2UuLjgxNTg5OGNlMTlmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCAiRGFlbW9uRW5jb2Rlci5oIgogI2ltcG9ydCAiRGFlbW9uVXRpbGl0aWVzLmgiCiAjaW1wb3J0
ICJIYW5kbGVNZXNzYWdlLmgiCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgogI2ltcG9ydCAiTW9j
a0FwcEJ1bmRsZVJlZ2lzdHJ5LmgiCiAKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5o
PgpAQCAtMjcwLDggKzI3MSwxMSBAQCB2b2lkIERhZW1vbjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5k
Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMoQ2xpZW50Q29ubmVjdGlvbiogY29ubgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHBsYXRmb3JtLXNw
ZWNpZmljIGltcGxlbWVudGF0aW9ucyBmb3IgcmVhbCB3b3JsZCBidW5kbGVzIG9uY2UgaW1wbGVt
ZW50ZWQuCi0gICAgcmVwbHlTZW5kZXIoeyB9KTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgSUNB
cHBCdW5kbGU6OmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucygqY29ubmVjdGlvbiwgV1RGTW92
ZShyZXBseVNlbmRlcikpOworI2Vsc2UKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCiB9CiAKIHZvaWQgRGFlbW9uOjpkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVn
aXN0cmF0aW9uKENsaWVudENvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgb3Jp
Z2luU3RyaW5nLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIHJlcGx5
U2VuZGVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XZWJQdXNoRGFlbW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IGQ4NzEyYjA0MDUxNi4uOWM0MTlkMDU5NTk5IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVt
b24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNo
RGFlbW9uLm1tCkBAIC0xNTcsNiArMTU3LDM5IEBAIHN0YXRpYyB2b2lkIGNsZWFuVXBUZXN0V2Vi
UHVzaEQoTlNVUkwgKnRlbXBEaXIpCiAgICAgRVhQRUNUX05VTEwoZXJyb3IpOwogfQogCitzdGF0
aWMgdm9pZCBkZWxldGVBbGxSZWdpc3RyYXRpb25zRm9yRGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFT
dG9yZSAqZGF0YVN0b3JlKQoreworICAgIF9fYmxvY2sgYm9vbCBvcmlnaW5PcGVyYXRpb25Eb25l
ID0gZmFsc2U7CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAq
Pj4gb3JpZ2luU2V0OworICAgIFtkYXRhU3RvcmUgX2dldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlm
aWNhdGlvblBlcm1pc3Npb25zOl4oTlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPiAqb3JpZ2lucykg
eworICAgICAgICBvcmlnaW5TZXQgPSBvcmlnaW5zOworICAgICAgICBvcmlnaW5PcGVyYXRpb25E
b25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJm9yaWdp
bk9wZXJhdGlvbkRvbmUpOworCisgICAgaWYgKCFbb3JpZ2luU2V0IGNvdW50XSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgX19ibG9jayBzaXplX3QgZGVsZXRlZE9yaWdpbnMgPSAwOworICAgIG9y
aWdpbk9wZXJhdGlvbkRvbmUgPSBmYWxzZTsKKyAgICBmb3IgKFdLU2VjdXJpdHlPcmlnaW4gKm9y
aWdpbiBpbiBvcmlnaW5TZXQuZ2V0KCkpIHsKKyAgICAgICAgW2RhdGFTdG9yZSBfZGVsZXRlUHVz
aEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbjpvcmlnaW4gY29tcGxldGlvbkhhbmRsZXI6XihO
U0Vycm9yICplcnJvcikgeworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKCEhZXJyb3IpOworICAg
ICAgICAgICAgaWYgKCsrZGVsZXRlZE9yaWdpbnMgPT0gW29yaWdpblNldCBjb3VudF0pCisgICAg
ICAgICAgICAgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRydWU7CisgICAgICAgIH1dOworICAg
IH0KKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOwor
CisgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAgIFtkYXRhU3RvcmUgX2dldE9y
aWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOl4oTlNTZXQ8V0tTZWN1cml0
eU9yaWdpbiAqPiAqb3JpZ2lucykgeworICAgICAgICBFWFBFQ1RfRVEoW29yaWdpbnMgY291bnRd
LCAwdSk7CisgICAgICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgIH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmb3JpZ2luT3BlcmF0aW9uRG9uZSk7CisKK30KKwog
Ly8gRklYTUU6IFJlLWVuYWJsZSB0aGlzIHRlc3QgZm9yIE1vbnRlcmV5KyBvbmNlIHdlYmtpdC5v
cmcvMjMyODU3IGlzIHJlc29sdmVkLgogI2lmIFBMQVRGT1JNKE1BQykgJiYgKF9fTUFDX09TX1hf
VkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMTAwMDAgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMjAwMDApCiBURVNUKFdlYlB1c2hELCBESVNBQkxFRF9CYXNpY0NvbW11bmlj
YXRpb24pCkBAIC0zMzAsNiArMzYzLDY1IEBAIFRFU1QoV2ViUHVzaEQsIFBlcm1pc3Npb25NYW5h
Z2VtZW50KQogICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVjdG9yeSk7CiB9CiAKKyNp
ZiBQTEFURk9STShJT1MpCitURVNUKFdlYlB1c2hELCBJbnN0YWxsQ29vcmRpbmF0aW9uQnVuZGxl
cykKK3sKKyAgICBOU1VSTCAqdGVtcERpcmVjdG9yeSA9IHNldFVwVGVzdFdlYlB1c2hEKCk7CisK
KyAgICBhdXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdl
dCgpLndlYlB1c2hNYWNoU2VydmljZU5hbWUgPSBAIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVt
b24uc2VydmljZSI7CisgICAgYXV0byBkYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0
YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKKworICAgIGRlbGV0ZUFsbFJlZ2lzdHJhdGlvbnNGb3JEYXRhU3RvcmUoZGF0
YVN0b3JlLmdldCgpKTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlID0gZGF0YVN0b3JlLmdldCgpOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByZWZlcmVuY2VzIF9zZXROb3RpZmljYXRpb25zRW5hYmxlZDpZRVNdOworICAgIGZv
ciAoX1dLRXhwZXJpbWVudGFsRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQcmVmZXJlbmNlcyBfZXhw
ZXJpbWVudGFsRmVhdHVyZXNdKSB7CisgICAgICAgIGlmIChbZmVhdHVyZS5rZXkgaXNFcXVhbFRv
U3RyaW5nOkAiQnVpbHRJbk5vdGlmaWNhdGlvbnNFbmFibGVkIl0pCisgICAgICAgICAgICBbW2Nv
bmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JGZWF0dXJlOmZlYXR1
cmVdOworICAgIH0KKworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0VVJMU2NoZW1l
SGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJ0ZXN0aW5nIl07CisKKyAgICBbaGFu
ZGxlciBzZXRTdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyOl4oV0tXZWJWaWV3ICosIGlkPFdLVVJM
U2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05T
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6
QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmls
XSk7CisgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZS5nZXQoKV07Cisg
ICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczptYWluQnl0
ZXMgbGVuZ3RoOnN0cmxlbihtYWluQnl0ZXMpXV07CisgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07
CisgICAgfV07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIHVpRGVsZWdhdGUgPSBhZG9wdE5T
KFtbTm90aWZpY2F0aW9uUGVybWlzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dl
YlZpZXcgc2V0VUlEZWxlZ2F0ZTp1aURlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJ0ZXN0aW5nOi8vbWFpbi9pbmRleC5odG1sIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmFsZXJ0UmVjZWl2ZWQpOworCisgICAgYWxlcnRSZWNlaXZlZCA9IGZhbHNlOwor
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0aW5nOi8vc2Vjb25kYXJ5L2luZGV4Lmh0bWwiXV1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmYWxlcnRSZWNlaXZlZCk7CisKKyAgICBzdGF0
aWMgYm9vbCBvcmlnaW5PcGVyYXRpb25Eb25lID0gZmFsc2U7CisgICAgc3RhdGljIFJldGFpblB0
cjxOU1NldDxXS1NlY3VyaXR5T3JpZ2luICo+PiBvcmlnaW5zOworICAgIFtkYXRhU3RvcmUgX2dl
dE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOl4oTlNTZXQ8V0tTZWN1
cml0eU9yaWdpbiAqPiAqcmF3T3JpZ2lucykgeworICAgICAgICBFWFBFQ1RfRVEoW3Jhd09yaWdp
bnMgY291bnRdLCAydSk7CisgICAgICAgIG9yaWdpbnMgPSByYXdPcmlnaW5zOworICAgICAgICBv
cmlnaW5PcGVyYXRpb25Eb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCisgICAgZm9yIChXS1NlY3VyaXR5T3Jp
Z2luICpvcmlnaW4gaW4gb3JpZ2lucy5nZXQoKSkgeworICAgICAgICBFWFBFQ1RfVFJVRShbb3Jp
Z2luLnByb3RvY29sIGlzRXF1YWxUb1N0cmluZzpAInRlc3RpbmciXSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKFtvcmlnaW4uaG9zdCBpc0VxdWFsVG9TdHJpbmc6QCJtYWluIl0gfHwgW29yaWdpbi5o
b3N0IGlzRXF1YWxUb1N0cmluZzpAInNlY29uZGFyeSJdKTsKKyAgICB9CisKKyAgICBkZWxldGVB
bGxSZWdpc3RyYXRpb25zRm9yRGF0YVN0b3JlKGRhdGFTdG9yZS5nZXQoKSk7CisgICAgY2xlYW5V
cFRlc3RXZWJQdXNoRCh0ZW1wRGlyZWN0b3J5KTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oSU9TKQo=
</data>
<flag name="commit-queue"
          id="470846"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445631</attachid>
            <date>2021-12-01 16:15:05 -0800</date>
            <delta_ts>2021-12-01 17:05:01 -0800</delta_ts>
            <desc>EWS v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>43155</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5o
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKaW5kZXggMDZj
MThjMzBlYjEwLi4xMzg0ODRiMzA5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5
cHRvL0NyeXB0b0RpZ2VzdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBQQUwgewogCkBAIC00Nyw2ICs0OCw3IEBAIHB1Ymxp
YzoKIAogICAgIFBBTF9FWFBPUlQgdm9pZCBhZGRCeXRlcyhjb25zdCB2b2lkKiBpbnB1dCwgc2l6
ZV90IGxlbmd0aCk7CiAgICAgUEFMX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gY29tcHV0ZUhhc2go
KTsKKyAgICBQQUxfRVhQT1JUIFN0cmluZyB0b0hleFN0cmluZygpOwogCiBwcml2YXRlOgogICAg
IENyeXB0b0RpZ2VzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlw
dG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRv
LmNwcAppbmRleCAxY2U1Nzk3ZmVmNjIuLmRjZjBhMzQ0ZThlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNy
eXB0by5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRv
L0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAKQEAgLTE4Miw0ICsxODIsMTkgQEAgVmVjdG9y
PHVpbnQ4X3Q+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKK1N0cmluZyBDcnlwdG9EaWdlc3Q6OnRvSGV4U3RyaW5nKCkKK3sKKyAgICBhdXRvIGhh
c2ggPSBjb21wdXRlSGFzaCgpOworCisgICAgY2hhciogc3RhcnQgPSAwOworICAgIHVuc2lnbmVk
IGhhc2hMZW5ndGggPSBoYXNoLnNpemUoKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6
Om5ld1VuaW5pdGlhbGl6ZWQoaGFzaExlbmd0aCAqIDIsIHN0YXJ0KTsKKyAgICBjaGFyKiBidWZm
ZXIgPSBzdGFydDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2hMZW5ndGg7ICsraSkg
eworICAgICAgICBzbnByaW50ZihidWZmZXIsIDMsICIlMDJYIiwgaGFzaC5hdChpKSk7CisgICAg
ICAgIGJ1ZmZlciArPSAyOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZXN1
bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcAppbmRleCA3NmU0NWFmMzRlZDAuLmRjNDRjNmE3
OTZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVT
eXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lz
dGVtLmNwcApAQCAtMTI5LDE4ICsxMjksNyBAQCBTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Y29t
cHV0ZUhhc2hGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogICAgIGF1dG8gY3J5
cHRvRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6
QWxnb3JpdGhtOjpTSEFfMjU2KTsKICAgICBhdXRvIHV0ZjhGaWxlTmFtZSA9IGZpbGVOYW1lLnV0
ZjgoKTsKICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVzKHV0ZjhGaWxlTmFtZS5kYXRhKCksIHV0
ZjhGaWxlTmFtZS5sZW5ndGgoKSk7Ci0gICAgYXV0byBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNv
bXB1dGVIYXNoKCk7Ci0gICAgCi0gICAgLy8gQ29udmVydCBkaWdlc3QgdG8gaGV4LgotICAgIGNo
YXIqIHN0YXJ0ID0gMDsKLSAgICB1bnNpZ25lZCBkaWdlc3RMZW5ndGggPSBkaWdlc3Quc2l6ZSgp
OwotICAgIENTdHJpbmcgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChkaWdlc3RM
ZW5ndGggKiAyLCBzdGFydCk7Ci0gICAgY2hhciogYnVmZmVyID0gc3RhcnQ7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBkaWdlc3RMZW5ndGg7ICsraSkgewotICAgICAgICBzbnByaW50Zihi
dWZmZXIsIDMsICIlMDJYIiwgZGlnZXN0LmF0KGkpKTsKLSAgICAgICAgYnVmZmVyICs9IDI7Ci0g
ICAgfQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJlc3VsdCk7CisgICAgcmV0dXJuIGNy
eXB0b0RpZ2VzdC0+dG9IZXhTdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZp
ZyBiL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvd2VicHVzaGQueGNjb25maWcKaW5kZXgg
MzA1ZjIwYjIxMGNhLi5kY2M5MDc1ZmUwNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ29u
ZmlndXJhdGlvbnMvd2VicHVzaGQueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1
cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZpZwpAQCAtMjUsNyArMjUsMTkgQEAKIAogUFJPRFVDVF9O
QU1FID0gd2VicHVzaGQ7CiAKLU9USEVSX0xERkxBR1MgPSAtbCBXVEYgLWZyYW1ld29yayBGb3Vu
ZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb247CitFWENMVURFRF9TT1VSQ0VfRklMRV9O
QU1FU1tzZGs9YXBwbGV0dipdID0gKjsKK0VYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTW3Nkaz13
YXRjaCpdID0gKjsKKworV0tfQ09SRV9TRVJWSUNFU19MREZMQUdTID0gJChXS19DT1JFX1NFUlZJ
Q0VTX0xERkxBR1NfJChXS19QTEFURk9STV9OQU1FKSk7CitXS19DT1JFX1NFUlZJQ0VTX0xERkxB
R1NfbWFjb3N4ID0gLWZyYW1ld29yayBDb3JlU2VydmljZXM7CisKK1dLX01PQklMRV9DT1JFX1NF
UlZJQ0VTX0xERkxBR1MgPSAkKFdLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfJChXS19Q
TEFURk9STV9OQU1FKSk7CitXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTX2NvY29hdG91
Y2ggPSAtZnJhbWV3b3JrIE1vYmlsZUNvcmVTZXJ2aWNlczsKKworV0tfSU5TVEFMTF9DT09SRElO
QVRJT05fTERGTEFHUyA9ICQoV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHU18kKFdLX1BM
QVRGT1JNX05BTUUpKTsKK1dLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1NfY29jb2F0b3Vj
aCA9IC1mcmFtZXdvcmsgSW5zdGFsbENvb3JkaW5hdGlvbjsKKworT1RIRVJfTERGTEFHUyA9IC1s
IFdURiAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiAtZm9y
Y2VfbG9hZCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvbGliUEFMLmEgJChXS19DT1JFX1NFUlZJQ0VT
X0xERkxBR1MpICQoV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHUykgJChXS19JTlNUQUxM
X0NPT1JESU5BVElPTl9MREZMQUdTKTsKIExJQlJBUllfU0VBUkNIX1BBVEhTID0gJChCVUlMVF9Q
Uk9EVUNUU19ESVIpOwogCiBXS19QUk9DRVNTRURfWENFTlRfRklMRT0kKFRFTVBfRklMRV9ESVIp
LyQoRlVMTF9QUk9EVUNUX05BTUUpLmVudGl0bGVtZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWI2NDFjMTIwNzI5Li4yOTZkNThj
OGE4N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTAyMiw2ICsxMDIyLDEwIEBACiAJCTUxN0E1MzEwMUY0N0E4NjIwMERDREMwQSAv
KiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QTUzMEQxRjQ3QTg0MzAwRENEQzBBIC8qIFdlYlNX
Q2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07CiAJCTUxN0I1RjJFMjc1NzM4MkEwMDJE
QzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0I1RjJEMjc1NzM4MkEwMDJE
QzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCAqLzsgfTsKIAkJ
NTE3QjVGMkYyNzU3MzgyQjAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmln
dXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE3QjVGMkQyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmln
dXJhdGlvbi5oICovOyB9OworCQk1MTdCNUYzNzI3NTdEQTg4MDAyREMyMkQgLyogTGF1bmNoU2Vy
dmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxN0I1RjMzMjc1N0RBODcwMDJEQzIyRCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICovOyB9Owor
CQk1MTdCNUYzODI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYzNDI3NTdEQTg4MDAyREMy
MkQgLyogSUNBcHBCdW5kbGUubW0gKi87IH07CisJCTUxN0I1RjM5Mjc1N0RBODgwMDJEQzIyRCAv
KiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYzNTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3Jk
aW5hdGlvblNQSS5oICovOyB9OworCQk1MTdCNUYzQTI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBC
dW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
N0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oICovOyB9OwogCQk1MTdDRjBF
MzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
N0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEYgLyogQ2FjaGVT
dG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdDRjBFMTE2M0E0ODZDMDBDMjk1MEYg
LyogQ2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07
CiAJCTUxN0NGMEU0MTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE3Q0YwRTIxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3Nh
Z2VzLmggKi87IH07CkBAIC00Mzc3LDYgKzQzODEsMTAgQEAKIAkJNTE3QTUzMEQxRjQ3QTg0MzAw
RENEQzBBIC8qIFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmg7IHBhdGgg
PSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmg7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUxN0E1MzBFMUY0N0E4NDMw
MERDREMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU1dDbGllbnRDb25uZWN0aW9uTWVz
c2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViU1dDbGll
bnRDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJNTE3QjVGMkQyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25D
b25uZWN0aW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE3QjVGMzMyNzU3REE4NzAwMkRDMjJEIC8qIExhdW5jaFNlcnZpY2Vz
U1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhdW5jaFNlcnZpY2VzU1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjM0Mjc1N0RBODgwMDJEQzIy
RCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IElDQXBwQnVuZGxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTdCNUYz
NTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1
bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJQ0FwcEJ1bmRsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdDRjBFMTE2M0E0ODZDMDBDMjk1MEUgLyog
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VS
ZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CiAJCTUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRiAvKiBDYWNoZVN0b3JhZ2VFbmdp
bmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIu
Y3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9DYWNoZVN0b3JhZ2VFbmdpbmVDb25u
ZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJNTE3Q0YwRTIxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CkBAIC05ODk0LDYgKzk5MDIsMTAgQEAKIAkJCQk1MTYwRTk1NDI3NEI4
ODcxMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5oICovLAogCQkJCTUxNjBFOTUzMjc0Qjg4
NzEwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lm1tICovLAogCQkJCTVDQkI2RDREMjcxRjY3
Q0MwMEZEMUE1RCAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnBsaXN0ICovLAorCQkJCTUx
N0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oICovLAorCQkJCTUxN0I1RjM0
Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLywKKwkJCQk1MTdCNUYzNTI3NTdE
QTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovLAorCQkJCTUxN0I1RjMz
Mjc1N0RBODcwMDJEQzIyRCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICovLAogCQkJCTUxRjdCQjc1
Mjc0NDk4QkIwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oICovLAogCQkJCTUx
RjdCQjc0Mjc0NDk4QkEwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5tbSAqLywK
IAkJCQk1MTYwRTk1QzI3NEMyQTAzMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5Lmgg
Ki8sCkBAIC0xMjQ0OSwxMyArMTI0NjEsMTYgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CTUxN0I1RjNBMjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE2MEU5NTYyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTVDMTU3OUZDMjcxN0FGNTAwMEVENTI4MCAvKiBEYWVtb25VdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjdCQjc3Mjc0NDk4QkIwMEM0NUE3MiAvKiBNb2Nr
QXBwQnVuZGxlRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MEU5NUUyNzRDMkEw
MzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE2MEU5NTkyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5kbGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxRjdCQjdCMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTE3QjVGMzcyNzU3REE4ODAwMkRDMjJEIC8qIExhdW5jaFNl
cnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUYyRjI3NTczODJCMDAyREMyMkQg
LyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MTdCNUYzOTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyQ0Q2OUYyNzIzMzkzQTAwRjdGOEVDIC8qIFdlYlB1c2hE
YWVtb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwpAQCAtMTQ5OTMsNiArMTUwMDgsNyBAQAogCQkJZmlsZXMgPSAoCiAJ
CQkJNTE2MEU5NTUyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gaW4gU291
cmNlcyAqLywKIAkJCQk1QzE1N0EwMTI3MTdCN0ZCMDBFRDUyODAgLyogQXJndW1lbnRDb2RlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QjVGMzgyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBw
QnVuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGN0JCN0QyNzQ1NjQwNDAwQzQ1QTcyIC8q
IENvZGVTaWduaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkYyNzE3QjZEMjAwRUQ1
MjgwIC8qIERhZW1vbkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkUyNzE3
QjZDMTAwRUQ1MjgwIC8qIERhZW1vbkVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0gYi9Tb3VyY2Uv
V2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0KaW5kZXggZDA0N2UxZDYyYTczLi4w
ZTJjNGViYTM1NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwQnVuZGxl
UmVxdWVzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3Qu
bW0KQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQXBwQnVu
ZGxlUmVxdWVzdC5oIgogCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgogI2ltcG9ydCAiTW9ja0Fw
cEJ1bmRsZUZvclRlc3RpbmcuaCIKICNpbXBvcnQgIldlYlB1c2hEYWVtb24uaCIKICNpbXBvcnQg
PEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPgpAQCAtNTEsOCArNTIsMTMgQEAgdm9pZCBB
cHBCdW5kbGVSZXF1ZXN0OjpzdGFydCgpCiAKICAgICBpZiAobV9jb25uZWN0aW9uLT51c2VNb2Nr
QnVuZGxlc0ZvclRlc3RpbmcoKSkKICAgICAgICAgbV9hcHBCdW5kbGUgPSBNb2NrQXBwQnVuZGxl
Rm9yVGVzdGluZzo6Y3JlYXRlKG1fb3JpZ2luU3RyaW5nLCBtX2Nvbm5lY3Rpb24tPmhvc3RBcHBD
b2RlU2lnbmluZ0lkZW50aWZpZXIoKSwgKnRoaXMpOwotICAgIGVsc2UKKyAgICBlbHNlIHsKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgICAgIG1fYXBwQnVuZGxlID0gSUNBcHBCdW5kbGU6OmNyZWF0
ZSgqbV9jb25uZWN0aW9uLCBtX29yaWdpblN0cmluZywgKnRoaXMpOworI2Vsc2UKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAgIH0KIAogICAgIHN0YXJ0
SW50ZXJuYWwoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBC
dW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBCdW5kbGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJiYmYxYzM4NzFjMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBCdW5kbGUuaApAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKworI2ltcG9ydCAiSW5zdGFsbENv
b3JkaW5hdGlvblNQSS5oIgorI2ltcG9ydCAiUHVzaEFwcEJ1bmRsZS5oIgorI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1dlYWtQdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCitAY2xhc3MgTlNFcnJvcjsKK0BjbGFzcyBXZWJBcHBJbnN0YWxsQ29v
cmRpbmF0b3JPYnNlcnZlcjsKKworbmFtZXNwYWNlIFdlYlB1c2hEIHsKKworY2xhc3MgQ2xpZW50
Q29ubmVjdGlvbjsKKworY2xhc3MgSUNBcHBCdW5kbGUgOiBwdWJsaWMgUHVzaEFwcEJ1bmRsZSwg
cHVibGljIENhbk1ha2VXZWFrUHRyPElDQXBwQnVuZGxlPiB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJQ0FwcEJ1bmRsZT4gY3JlYXRlKENs
aWVudENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBQ
dXNoQXBwQnVuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBJQ0FwcEJ1bmRsZShjb25uZWN0aW9uLCBvcmlnaW5TdHJpbmcsIGNsaWVudCkpOwor
ICAgIH0KKworICAgIHZvaWQgYnVuZGxlQ3JlYXRpb25TdWNjZWVkZWQoKTsKKyAgICB2b2lkIGJ1
bmRsZUNyZWF0aW9uRmFpbGVkKE5TRXJyb3IgKik7CisKKyAgICBzdGF0aWMgdm9pZCBnZXRPcmln
aW5zV2l0aFJlZ2lzdHJhdGlvbnMoQ2xpZW50Q29ubmVjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mKT4mJik7CisKK3ByaXZhdGU6CisgICAgSUNBcHBC
dW5kbGUoQ2xpZW50Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBQdXNo
QXBwQnVuZGxlQ2xpZW50Jik7CisKKyAgICBjb25zdCBTdHJpbmcmIGdldEJ1bmRsZUlkZW50aWZp
ZXIoKTsKKworICAgIHZvaWQgY2hlY2tGb3JFeGlzdGluZ0J1bmRsZSgpIGZpbmFsOworICAgIHZv
aWQgZGVsZXRlRXhpc3RpbmdCdW5kbGUoKSBmaW5hbDsKKyAgICB2b2lkIGNyZWF0ZUJ1bmRsZSgp
IGZpbmFsOworICAgIHZvaWQgc3RvcCgpIGZpbmFsOworCisgICAgdm9pZCBkaWREZWxldGVFeGlz
dGluZ0J1bmRsZVdpdGhFcnJvcihOU0Vycm9yICopOworCisgICAgUmV0YWluUHRyPElYUmVzdG9y
aW5nRGVtb3RlZEFwcEluc3RhbGxDb29yZGluYXRvcj4gbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3I7
CisgICAgUmV0YWluUHRyPFdlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyPiBtX2FwcElu
c3RhbGxPYnNlcnZlcjsKKworICAgIFN0cmluZyBtX29yaWdpblN0cmluZzsKKyAgICBSZWZQdHI8
Q2xpZW50Q29ubmVjdGlvbj4gbV9jbGllbnRDb25uZWN0aW9uOworCisgICAgU3RyaW5nIG1fYnVu
ZGxlSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYlB1c2hECisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lDQXBw
QnVuZGxlLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5tbQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI1YzdiOTI2OWY0MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBCdW5kbGUubW0KQEAgLTAsMCAr
MSwzMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIklDQXBw
QnVuZGxlLmgiCisKKyNpbXBvcnQgIkFwcEJ1bmRsZVJlcXVlc3QuaCIKKyNpbXBvcnQgIkxhdW5j
aFNlcnZpY2VzU1BJLmgiCisjaW1wb3J0ICJQdXNoQ2xpZW50Q29ubmVjdGlvbi5oIgorI2ltcG9y
dCAiV2ViUHVzaERhZW1vbi5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5cGVz
Lmg+CisjaW1wb3J0IDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgorI2ltcG9ydCA8d3RmL01h
aW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2ltcG9ydCA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgorCisjaWYgUExBVEZPUk0oSU9TKQorCitOU1N0cmluZyAqcHVz
aEJ1bmRsZUFwcE1hbmFnZW1lbnREb21haW4gPSBAImNvbS5hcHBsZS5XZWJLaXQuUHVzaEJ1bmRs
ZXMiOworCitAaW50ZXJmYWNlIFdlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyIDogTlNP
YmplY3QgPElYQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXI+CistIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhJQ0FwcEJ1bmRsZTooV2ViUHVzaEQ6OklDQXBwQnVuZGxlJilpY0FwcEJ1bmRsZTsK
K0Bwcm9wZXJ0eSBXZWFrUHRyPFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZT4gYnVuZGxlOworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIKKworLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSUNBcHBCdW5kbGU6KFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZSYp
aWNBcHBCdW5kbGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIF9idW5kbGUgPSBpY0FwcEJ1bmRsZTsKKworICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKWNvb3JkaW5hdG9yRGlkQ29tcGxldGVTdWNjZXNzZnVsbHk6KG5v
bm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBmb3JBcHBsaWNhdGlv
blJlY29yZDoobnVsbGFibGUgTFNBcHBsaWNhdGlvblJlY29yZCAqKWFwcFJlY29yZAoreworICAg
IGNhbGxPbk1haW5SdW5Mb29wKFtzZWxmLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPGlkPihz
ZWxmKV0geworICAgICAgICBpZiAoX2J1bmRsZSkKKyAgICAgICAgICAgIF9idW5kbGUtPmJ1bmRs
ZUNyZWF0aW9uU3VjY2VlZGVkKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpY29vcmRpbmF0b3I6
KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBjYW5jZWxlZFdp
dGhSZWFzb246KG5vbm51bGwgTlNFcnJvciAqKWNhbmNlbFJlYXNvbiBjbGllbnQ6KElYQ2xpZW50
SWRlbnRpZmllciljbGllbnQKK3sKKyAgICBjYWxsT25NYWluUnVuTG9vcChbc2VsZiwgcHJvdGVj
dGVkU2VsZiA9IFJldGFpblB0cjxpZD4oc2VsZiksIHByb3RlY3RlZENhbmNlbFJlYXNvbiA9IFJl
dGFpblB0cjxOU0Vycm9yPihjYW5jZWxSZWFzb24pXSB7CisgICAgICAgIGlmIChfYnVuZGxlKQor
ICAgICAgICAgICAgX2J1bmRsZS0+YnVuZGxlQ3JlYXRpb25GYWlsZWQocHJvdGVjdGVkQ2FuY2Vs
UmVhc29uLmdldCgpKTsKKyAgICB9KTsKK30KKworQGVuZAorCit1c2luZyBQQUw6OkNyeXB0b0Rp
Z2VzdDsKKworbmFtZXNwYWNlIFdlYlB1c2hEIHsKKworc3RhdGljIHZvaWQgYnJvYWRjYXN0RGVi
dWdNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBEYWVtb246OnNpbmdsZXRv
bigpLmJyb2FkY2FzdERlYnVnTWVzc2FnZShKU0M6Ok1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0
cmluZygiSUNBcHBCdW5kbGU6ICIsIG1lc3NhZ2UpKTsKK30KKworSUNBcHBCdW5kbGU6OklDQXBw
QnVuZGxlKENsaWVudENvbm5lY3Rpb24mIGNsaWVudENvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYg
b3JpZ2luU3RyaW5nLCBQdXNoQXBwQnVuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgOiBQdXNoQXBw
QnVuZGxlKGNsaWVudCkKKyAgICAsIG1fb3JpZ2luU3RyaW5nKG9yaWdpblN0cmluZykKKyAgICAs
IG1fY2xpZW50Q29ubmVjdGlvbigmY2xpZW50Q29ubmVjdGlvbikKK3sKK30KKworc3RhdGljIFN0
cmluZyBlbmNvZGVPcmlnaW5TdHJpbmdGb3JCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYg
aW5wdXQpCit7CisgICAgLy8gQnVuZGxlIGlkZW50aWZpZXJzIGhhdmUgZXhhY3RseSA2NCB2YWxp
ZCBjaGFyYWN0ZXJzLgorICAgIC8vIGEteiwgQS1aLCAwLTksICctJywgYW5kICcuJworICAgIC8v
IEJhc2U2NCBVUkwgZW5jb2RpbmcgdXNlcyAnLScgYW5kICdfJyBmb3IgdGhlIGZpbmFsIDIgY2hh
cmFjdGVycworICAgIC8vIEZvciBvdXIgYnVuZGxlIGlkZW50aWZpZXIsIHdlJ2xsIEJhc2U2NCBV
UkwgZW5jb2RlIHRoZW4gcmVwbGFjZSAnXycgd2l0aCAnLicKKyAgICAvLyBXZSBhbHNvIGdldCBy
aWQgb2YgdGhlIHR5cGljYWwgJz0nIHBhZGRpbmcgZm9yIGJhc2U2NCBlbmNvZGluZy4KKworICAg
IGF1dG8gYmFzZTY0ID0gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoaW5wdXQudXRmOCgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJhc2U2NC5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAoYmFzZTY0W2ldID09ICdfJykKKyAgICAgICAgICAgIGJhc2U2NFtpXSA9ICcuJzsKKyAgICB9
CisKKyAgICBzaXplX3QgbnVtYmVyRXF1YWxTaWducyA9IDA7CisgICAgaWYgKGJhc2U2NC5zaXpl
KCkgPj0gMSAmJiBiYXNlNjQubGFzdCgpID09ICc9JykKKyAgICAgICAgKytudW1iZXJFcXVhbFNp
Z25zOworICAgIGlmIChiYXNlNjQuc2l6ZSgpID49IDIgJiYgYmFzZTY0W2Jhc2U2NC5zaXplKCkg
LSAyXSA9PSAnPScpCisgICAgICAgICsrbnVtYmVyRXF1YWxTaWduczsKKworICAgIHJldHVybiBT
dHJpbmc6OmZyb21VVEY4KGJhc2U2NC5kYXRhKCksIGJhc2U2NC5zaXplKCkgLSBudW1iZXJFcXVh
bFNpZ25zKTsKK30KKworc3RhdGljIFN0cmluZyBvcmlnaW5TdHJpbmdGcm9tRW5jb2RlZEJ1bmRs
ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICBhdXRvIHV0ZjggPSBpbnB1
dC51dGY4KCk7CisgICAgYXV0byBidWZmZXIgPSB1dGY4Lm11dGFibGVEYXRhKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB1dGY4Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJ1
ZmZlcltpXSA9PSAnLicpCisgICAgICAgICAgICBidWZmZXJbaV0gPSAnXyc7CisgICAgfQorCisg
ICAgYXV0byBkZWNvZGVkID0gYmFzZTY0VVJMRGVjb2RlKGJ1ZmZlciwgdXRmOC5sZW5ndGgoKSk7
CisgICAgaWYgKCFkZWNvZGVkKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0
cmluZzo6ZnJvbVVURjgoZGVjb2RlZC0+ZGF0YSgpLCBkZWNvZGVkLT5zaXplKCkpOworfQorCitz
dGF0aWMgU3RyaW5nIGJ1bmRsZVByZWZpeEZvckhvc3RBcHBJZGVudGlmaWVyKGNvbnN0IFN0cmlu
ZyYgaG9zdEFwcElkZW50aWZpZXIpCit7CisgICAgYXV0byBhcHBEaWdlc3QgPSBQQUw6OkNyeXB0
b0RpZ2VzdDo6Y3JlYXRlKENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKKyAgICBh
dXRvIHV0ZjhJZGVudGlmaWVyID0gaG9zdEFwcElkZW50aWZpZXIudXRmOCgpOworICAgIGFwcERp
Z2VzdC0+YWRkQnl0ZXModXRmOElkZW50aWZpZXIuZGF0YSgpLCB1dGY4SWRlbnRpZmllci5sZW5n
dGgoKSk7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygiY29tLmFwcGxlLldlYktpdC5QdXNoQnVu
ZGxlLiIsIGFwcERpZ2VzdC0+dG9IZXhTdHJpbmcoKSwgIi4iKTsKK30KKworc3RhdGljIFN0cmlu
ZyBidW5kbGVOYW1lRm9yT3JpZ2luU3RyaW5nQW5kSG9zdEFwcElkZW50aWZpZXIoY29uc3QgU3Ry
aW5nJiBvcmlnaW5TdHJpbmcsIGNvbnN0IFN0cmluZyYgaG9zdEFwcElkZW50aWZpZXIpCit7Cisg
ICAgLy8gRklYTUU6IE9uY2Ugd2UgY2FuIHN0b3JlIHRoZSBvcmlnaW4gc3RyaW5nIHdpdGhpbiB0
aGUgYXBwIGJ1bmRsZSwgaGFzaCB0aGUgb3JpZ2luIHN0cmluZyBhcyB3ZWxsLgorICAgIC8vIEZv
ciBub3cgd2UgYmFzZTY0IGVuY29kZSBpdCB0byBtYWtlIGEgdmFsaWQgYnVuZGxlIGlkZW50aWZp
ZXIgdGhhdCBjYXJyaWVzIHRoZSBpbmZvcm1hdGlvbi4KKyAgICByZXR1cm4gbWFrZVN0cmluZyhi
dW5kbGVQcmVmaXhGb3JIb3N0QXBwSWRlbnRpZmllcihob3N0QXBwSWRlbnRpZmllciksIGVuY29k
ZU9yaWdpblN0cmluZ0ZvckJ1bmRsZUlkZW50aWZpZXIob3JpZ2luU3RyaW5nKSk7Cit9CisKK3Zv
aWQgSUNBcHBCdW5kbGU6OmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhDbGllbnRDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJp
bmc+Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0
czsKKworICAgIFJldGFpblB0cjxOU1N0cmluZz4gYnVuZGxlSWRlbnRpZmllclByZWZpeCA9IChO
U1N0cmluZyAqKWJ1bmRsZVByZWZpeEZvckhvc3RBcHBJZGVudGlmaWVyKGNvbm5lY3Rpb24uaG9z
dEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpKTsKKworICAgIExTRW51bWVyYXRvcjxMU0FwcGxp
Y2F0aW9uUmVjb3JkICo+ICplbnVtZXJhdG9yID0gW0xTQXBwbGljYXRpb25SZWNvcmQgZW51bWVy
YXRvcldpdGhPcHRpb25zOkxTQXBwbGljYXRpb25FbnVtZXJhdGlvbk9wdGlvbnNFbnVtZXJhdGVQ
bGFjZWhvbGRlcnNdOworICAgIGZvciAoTFNBcHBsaWNhdGlvblJlY29yZCAqcmVjb3JkID0gW2Vu
dW1lcmF0b3IgbmV4dE9iamVjdF07IHJlY29yZDsgcmVjb3JkID0gW2VudW1lcmF0b3IgbmV4dE9i
amVjdF0pIHsKKyAgICAgICAgaWYgKCFbcmVjb3JkLm1hbmFnZW1lbnREb21haW4gaXNFcXVhbFRv
U3RyaW5nOnB1c2hCdW5kbGVBcHBNYW5hZ2VtZW50RG9tYWluXSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmICghW3JlY29yZC5idW5kbGVJZGVudGlmaWVyIGhhc1ByZWZpeDpi
dW5kbGVJZGVudGlmaWVyUHJlZml4LmdldCgpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIHN0b3JlIHRoZSBvcmlnaW4gc3RyaW5nIGluIHRo
ZSBidW5kbGUgaWRlbnRpZmllciBiYXNlNjQgZW5jb2RlZAorICAgICAgICAvLyBPbmNlIHdlIHN0
b3JlIGl0IGluIHRoZSBidW5kbGUgaXRzZWxmLCB3ZSdsbCBoYXNoIHRoZSBvcmlnaW4gc3RyaW5n
IGluIHRoZSBidW5kbGUgaWRlbnRpZmllciBhbmQgZXh0cmFjdCBpdCBmcm9tIHRoZSBidW5kbGUK
KworICAgICAgICBOU0FycmF5ICpjb21wb25lbnRzID0gW3JlY29yZC5idW5kbGVJZGVudGlmaWVy
IGNvbXBvbmVudHNTZXBhcmF0ZWRCeVN0cmluZzpidW5kbGVJZGVudGlmaWVyUHJlZml4LmdldCgp
XTsKKyAgICAgICAgQVNTRVJUKGNvbXBvbmVudHMuY291bnQgPj0gMik7CisKKyAgICAgICAgYXV0
byBvcmlnaW5TdHJpbmcgPSBvcmlnaW5TdHJpbmdGcm9tRW5jb2RlZEJ1bmRsZUlkZW50aWZpZXIo
Y29tcG9uZW50c1sxXSk7CisgICAgICAgIGlmIChvcmlnaW5TdHJpbmcuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQob3JpZ2luU3RyaW5n
KTsKKyAgICB9CisgICAgCisgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0cyk7Cit9CisKK2Nv
bnN0IFN0cmluZyYgSUNBcHBCdW5kbGU6OmdldEJ1bmRsZUlkZW50aWZpZXIoKQoreworICAgIGlm
IChtX2J1bmRsZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIG1fY2xpZW50Q29ubmVjdGlvbikKKyAg
ICAgICAgbV9idW5kbGVJZGVudGlmaWVyID0gYnVuZGxlTmFtZUZvck9yaWdpblN0cmluZ0FuZEhv
c3RBcHBJZGVudGlmaWVyKG1fb3JpZ2luU3RyaW5nLCBtX2NsaWVudENvbm5lY3Rpb24tPmhvc3RB
cHBDb2RlU2lnbmluZ0lkZW50aWZpZXIoKSk7CisKKyAgICByZXR1cm4gbV9idW5kbGVJZGVudGlm
aWVyOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpjaGVja0ZvckV4aXN0aW5nQnVuZGxlKCkKK3sK
KyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBMU0FwcGxpY2F0aW9uUmVjb3JkICphcHBS
ZWNvcmQgPSBbW0xTQXBwbGljYXRpb25SZWNvcmQgYWxsb2NdIGluaXRXaXRoQnVuZGxlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCkgYWxsb3dQbGFjZWhvbGRlcjpZ
RVMgZXJyb3I6JmVycm9yXTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PmRpZENoZWNrRm9yRXhpc3RpbmdCdW5kbGUoKnRoaXMsIGFwcFJlY29yZCA/IFB1c2hBcHBCdW5k
bGVFeGlzdHM6OlllcyA6IFB1c2hBcHBCdW5kbGVFeGlzdHM6Ok5vKTsKK30KKwordm9pZCBJQ0Fw
cEJ1bmRsZTo6ZGVsZXRlRXhpc3RpbmdCdW5kbGUoKQoreworICAgIFtJWEFwcEluc3RhbGxDb29y
ZGluYXRvciB1bmluc3RhbGxBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopZ2V0QnVuZGxlSWRl
bnRpZmllcigpIHJlcXVlc3RVc2VyQ29uZmlybWF0aW9uOk5PIGNvbXBsZXRpb246W3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSAoTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAg
Y2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBl
cnJvciA9IFJldGFpblB0cjxOU0Vycm9yPihlcnJvcildIHsKKyAgICAgICAgICAgIGRpZERlbGV0
ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKGVycm9yLmdldCgpKTsKKyAgICAgICAgfSk7CisgICAg
fV07Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVy
cm9yKE5TRXJyb3IgKmVycm9yKQoreworICAgIGlmIChlcnJvcikKKyAgICAgICAgYnJvYWRjYXN0
RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkVycm9yIGRlbGV0aW5nIGV4aXN0aW5nIGJ1bmRsZTog
IiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisKKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIG1fY2xpZW50LT5kaWREZWxldGVFeGlzdGluZ0J1bmRsZVdpdGhFcnJvcigqdGhpcywg
ZXJyb3IpOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpzdG9wKCkKK3sKKyAgICBtX2FwcEluc3Rh
bGxDb29yZGluYXRvci5nZXQoKS5vYnNlcnZlciA9IG5pbDsKKyAgICBtX2FwcEluc3RhbGxDb29y
ZGluYXRvciA9IG5pbDsKKyAgICBtX2FwcEluc3RhbGxPYnNlcnZlciA9IG5pbDsKK30KKwordm9p
ZCBJQ0FwcEJ1bmRsZTo6Y3JlYXRlQnVuZGxlKCkKK3sKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+
IGJ1bmRsZUlkZW50aWZpZXIgPSAoTlNTdHJpbmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCk7CisK
KyAgICAvLyBDYW5jZWwgYW55IHByZXZpb3VzIGluc3RhbGwgY29vcmRpbmF0b3IgdGhhdCBtaWdo
dCd2ZSBiZWVuIGxlZnQgaGFuZ2luZyBpbiBhIHBhcnRpYWxseSBmaW5pc2hlZCBzdGF0ZQorICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIFtJWEFwcEluc3RhbGxDb29yZGluYXRvciBjYW5j
ZWxDb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgpIHdp
dGhSZWFzb246W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiV0tFcnJvckRvbWFpbiIgY29kZTox
IHVzZXJJbmZvOm5pbF0gY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZXJyb3I6
JmVycm9yXTsKKworICAgIEJPT0wgY3JlYXRlZCA9IE5POworICAgIGVycm9yID0gbmlsOworICAg
IG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yID0gW0lYUmVzdG9yaW5nRGVtb3RlZEFwcEluc3RhbGxD
b29yZGluYXRvciBjb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDpidW5kbGVJZGVudGlmaWVy
LmdldCgpIHdpdGhDbGllbnRJRDpJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yIGNyZWF0ZUlm
Tm90RXhpc3Rpbmc6WUVTIGNyZWF0ZWQ6JmNyZWF0ZWQgZXJyb3I6JmVycm9yXTsKKworICAgIGlm
ICghbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3IgfHwgZXJyb3IpIHsKKyAgICAgICAgYnJvYWRjYXN0
RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIlVuYWJsZSB0byBjcmVhdGUgaW5zdGFsbCBjb29yZGlu
YXRpb3IgZm9yIGFwcCBidW5kbGUgaWRlbnRpZmllciAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmll
ci5nZXQoKSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjcmVhdGVkKSB7CisgICAgICAgIGJyb2FkY2Fz
dERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJFeGlzdGluZyBpbnN0YWxsIGNvb3JkaW5hdGlvciBm
b3IgYXBwIGJ1bmRsZSBpZGVudGlmaWVyICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgp
KSwgIiB3YXMgZm91bmQuIFRoaXMgaXMgdW5leHBlY3RlZC4iKSk7CisgICAgICAgIGJ1bmRsZUNy
ZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYXBw
SW5zdGFsbE9ic2VydmVyID0gYWRvcHROUyhbW1dlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2Vy
dmVyIGFsbG9jXSBpbml0V2l0aElDQXBwQnVuZGxlOip0aGlzXSk7CisgICAgbV9hcHBJbnN0YWxs
Q29vcmRpbmF0b3IuZ2V0KCkub2JzZXJ2ZXIgPSBtX2FwcEluc3RhbGxPYnNlcnZlci5nZXQoKTsK
KworICAgIFJldGFpblB0cjxJWFBsYWNlaG9sZGVyPiBwbGFjZWhvbGRlciA9IGFkb3B0TlMoW1tJ
WFBsYWNlaG9sZGVyIGFsbG9jXSBpbml0QXBwUGxhY2Vob2xkZXJXaXRoQnVuZGxlTmFtZTooTlNT
dHJpbmcgKiltX29yaWdpblN0cmluZyBidW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgpIGlu
c3RhbGxUeXBlOkxTSW5zdGFsbFR5cGVJbnRlbnRpb25hbERvd25ncmFkZSBjbGllbnQ6SVhDbGll
bnRJZGVudGlmaWVyQXBwbGllZEZvcl0pOworCisgICAgUmV0YWluUHRyPElYUGxhY2Vob2xkZXJB
dHRyaWJ1dGVzPiBwbGFjZWhvbGRlckF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtJWFBsYWNlaG9sZGVy
QXR0cmlidXRlcyBuZXddKTsKKyAgICBwbGFjZWhvbGRlckF0dHJpYnV0ZXMuZ2V0KCkubGF1bmNo
UHJvaGliaXRlZCA9IFlFUzsKKworICAgIFtwbGFjZWhvbGRlciBzZXRQbGFjZWhvbGRlckF0dHJp
YnV0ZXM6cGxhY2Vob2xkZXJBdHRyaWJ1dGVzLmdldCgpIGVycm9yOiZlcnJvcl07CisgICAgaWYg
KGVycm9yKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJVbmFi
bGUgdG8gc2V0IHBsYWNlaG9sZGVyIGF0dHJpYnV0ZXMgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVu
ZGxlSWRlbnRpZmllci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRp
b25dKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBOU0RpY3Rpb25hcnkgKmVudGl0bGVtZW50c0RpY3Rpb25hcnkg
PSBAeworICAgICAgICBAImNvbS5hcHBsZS5wcml2YXRlLnVzZXJub3RpZmljYXRpb25zLmJ1bmRs
ZS1pZGVudGlmaWVycyI6IGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCksCisgICAgICAgIEAiY29tLmFw
cGxlLnByaXZhdGUudXNlcm5vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9uLXNpbXVsYXRvciI6IEBZ
RVMsCisgICAgICAgIEAiY29tLmFwcGxlLmRldmVsb3Blci5hcHAtbWFuYWdlbWVudC1kb21haW4i
OiBwdXNoQnVuZGxlQXBwTWFuYWdlbWVudERvbWFpbgorICAgIH07CisgICAgUmV0YWluUHRyPElY
UHJvbWlzZWRJbk1lbW9yeURpY3Rpb25hcnk+IGVudGl0bGVtZW50c1Byb21pc2UgPSBhZG9wdE5T
KFtbSVhQcm9taXNlZEluTWVtb3J5RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhOYW1lOltOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRW50aXRsZW1lbnRzIFByb21pc2UgZm9yICVAIiwgYnVu
ZGxlSWRlbnRpZmllci5nZXQoKV0gY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3Ig
ZGljdGlvbmFyeTplbnRpdGxlbWVudHNEaWN0aW9uYXJ5XSk7CisKKyAgICBpZiAoIWVudGl0bGVt
ZW50c1Byb21pc2UpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmco
IlVuYWJsZSB0byBjcmVhdGUgcGxhY2Vob2xkZXIgZW50aXRsZW1lbnRzIHByb21pc2UgZm9yIGJ1
bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQoKSkpKTsKKyAgICAgICAgYnVuZGxl
Q3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXJy
b3IgPSBuaWw7CisgICAgaWYgKCFbcGxhY2Vob2xkZXIgc2V0RW50aXRsZW1lbnRzUHJvbWlzZTpl
bnRpdGxlbWVudHNQcm9taXNlLmdldCgpIGVycm9yOiZlcnJvcl0gfHwgZXJyb3IpIHsKKyAgICAg
ICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBzZXQgcGxhY2Vo
b2xkZXIgZW50aXRsZW1lbnRzIHByb21pc2UgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRl
bnRpZmllci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRpb25dKSkp
OworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBCT09MIHJlc3VsdCA9IFtwbGFjZWhvbGRlciBzZXRDb25maWd1cmF0aW9u
Q29tcGxldGVXaXRoRXJyb3I6JmVycm9yXTsKKyAgICBpZiAoIXJlc3VsdCB8fCBlcnJvcikgewor
ICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCBw
bGFjZWhvbGRlciBlbnRpdGxlbWVudHMgcHJvbWlzZSBjb21wbGV0ZSBmb3IgYnVuZGxlICIsIFN0
cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBk
ZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX2FwcEluc3RhbGxDb29yZGluYXRvciBzZXRQ
bGFjZWhvbGRlclByb21pc2U6cGxhY2Vob2xkZXIuZ2V0KCkgZXJyb3I6JmVycm9yXTsKKyAgICBp
ZiAoZXJyb3IpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkZh
aWxlZCB0byBzZXQgcGxhY2Vob2xkZXIgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5k
bGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlv
bl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFJldGFpblB0cjxJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXI+
IGRhdGFQcm9taXNlID0gYWRvcHROUyhbW0lYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciBhbGxv
Y10gaW5pdFdpdGhOYW1lOkAiRW1wdHkgdXNlciBkYXRhIHByb21pc2UiIGNsaWVudDpJWENsaWVu
dElkZW50aWZpZXJBcHBsaWVkRm9yIGRpc2tTcGFjZU5lZWRlZDowXSk7CisgICAgZGF0YVByb21p
c2UuZ2V0KCkucGVyY2VudENvbXBsZXRlID0gMS4wOworICAgIGRhdGFQcm9taXNlLmdldCgpLmNv
bXBsZXRlID0gWUVTOworCisgICAgW21fYXBwSW5zdGFsbENvb3JkaW5hdG9yIHNldFVzZXJEYXRh
UHJvbWlzZTpkYXRhUHJvbWlzZS5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgIGlmIChlcnJvcikg
eworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNl
dCB1c2VyIGRhdGEgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVy
LmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAg
ICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6YnVuZGxlQ3JlYXRpb25TdWNjZWVkZWQoKQoreworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENyZWF0ZUFwcEJ1bmRsZSgqdGhp
cywgUHVzaEFwcEJ1bmRsZUNyZWF0aW9uUmVzdWx0OjpTdWNjZXNzKTsKKworfQorCit2b2lkIElD
QXBwQnVuZGxlOjpidW5kbGVDcmVhdGlvbkZhaWxlZChOU0Vycm9yICplcnJvcikKK3sKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDcmVhdGVBcHBCdW5kbGUoKnRoaXMs
IFB1c2hBcHBCdW5kbGVDcmVhdGlvblJlc3VsdDo6RmFpbHVyZSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYlB1c2hECisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL0luc3RhbGxDb29yZGluYXRpb25TUEkuaCBiL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uZjA2ZDcwZjgxZjQwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9JbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmgKQEAgLTAsMCArMSwx
MTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorI2lmIFVTRShBUFBMRV9JTlRF
Uk5BTF9TREspCisKKyNpbXBvcnQgPEluc3RhbGxDb29yZGluYXRpb24vSVhBcHBJbnN0YWxsQ29v
cmRpbmF0b3IuaD4KKyNpbXBvcnQgPEluc3RhbGxDb29yZGluYXRpb24vSW5zdGFsbENvb3JkaW5h
dGlvbi5oPgorCisjZWxzZQorCisjaW5jbHVkZSAiTGF1bmNoU2VydmljZXNTUEkuaCIKKworTlNf
QVNTVU1FX05PTk5VTExfQkVHSU4KKwordHlwZWRlZiBlbnVtIDogTlNVSW50ZWdlciB7Cit9IElY
Q29vcmRpbmF0b3JQcm9ncmVzc1BoYXNlOworCit0eXBlZGVmIGVudW0gOiBOU1VJbnRlZ2VyIHsK
KyAgICBJWEFwcEluc3RhbGxDb29yZGluYXRvclBsYWNlaG9sZGVyUHJvbWlzZSA9IDEsCit9IElY
QXBwSW5zdGFsbENvb3JkaW5hdG9yUHJvbWlzZUlkZW50aWZpZXI7CisKK3R5cGVkZWYgZW51bSA6
IE5TVUludGVnZXIgeworICAgIElYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgPSAxOSwKK30g
SVhDbGllbnRJZGVudGlmaWVyOworCitAY2xhc3MgTFNBcHBsaWNhdGlvblJlY29yZDsKK0BjbGFz
cyBJWEFwcEluc3RhbGxDb29yZGluYXRvcjsKK0BjbGFzcyBJWFBsYWNlaG9sZGVyOworQGNsYXNz
IElYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlcjsKKworQHByb3RvY29sIElYQXBwSW5zdGFsbENv
b3JkaW5hdG9yT2JzZXJ2ZXIgPE5TT2JqZWN0PgorQG9wdGlvbmFsCistICh2b2lkKWNvb3JkaW5h
dG9yRGlkUmVnaXN0ZXJGb3JPYnNlcnZhdGlvbjoobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGlu
YXRvciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29yZGluYXRvclNob3VsZFByaW9yaXRpemU6
KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvcjsKKy0gKHZvaWQp
Y29vcmRpbmF0b3JTaG91bGRSZXN1bWU6KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3Ig
Kiljb29yZGluYXRvcjsKKy0gKHZvaWQpY29vcmRpbmF0b3JTaG91bGRQYXVzZToobm9ubnVsbCBJ
WEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29yZGluYXRv
cjoobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGRpZFVwZGF0
ZVByb2dyZXNzOihkb3VibGUpcGVyY2VudENvbXBsZXRlIGZvclBoYXNlOihJWENvb3JkaW5hdG9y
UHJvZ3Jlc3NQaGFzZSlwaGFzZSBvdmVyYWxsUHJvZ3Jlc3M6KGRvdWJsZSlvdmVyYWxsUHJvZ3Jl
c3M7CistICh2b2lkKWNvb3JkaW5hdG9yRGlkQ29tcGxldGVTdWNjZXNzZnVsbHk6KG5vbm51bGwg
SVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBmb3JBcHBsaWNhdGlvblJlY29y
ZDoobnVsbGFibGUgTFNBcHBsaWNhdGlvblJlY29yZCAqKWFwcFJlY29yZDsKKy0gKHZvaWQpY29v
cmRpbmF0b3JEaWRJbnN0YWxsUGxhY2Vob2xkZXI6KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRp
bmF0b3IgKiljb29yZGluYXRvciBmb3JBcHBsaWNhdGlvblJlY29yZDoobnVsbGFibGUgTFNBcHBs
aWNhdGlvblJlY29yZCAqKXBsYWNlaG9sZGVyUmVjb3JkOworLSAodm9pZCljb29yZGluYXRvcjoo
bm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGNhbmNlbGVkV2l0
aFJlYXNvbjoobm9ubnVsbCBOU0Vycm9yICopY2FuY2VsUmVhc29uIGNsaWVudDooSVhDbGllbnRJ
ZGVudGlmaWVyKWNsaWVudDsKK0BlbmQKKwordHlwZWRlZiB2b2lkICheSVhBcHBJbnN0YWxsQ29v
cmRpbmF0b3JFcnJvckNvbXBsZXRpb24pKE5TRXJyb3IgKiBfTnVsbGFibGUgZXJyb3IpOworCitA
aW50ZXJmYWNlIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yCisrICh2b2lkKXVuaW5zdGFsbEFwcFdp
dGhCdW5kbGVJRDooTlNTdHJpbmcgKilidW5kbGVJRCByZXF1ZXN0VXNlckNvbmZpcm1hdGlvbjoo
Qk9PTClyZXF1ZXN0VXNlckNvbmZpcm1hdGlvbiBjb21wbGV0aW9uOihJWEFwcEluc3RhbGxDb29y
ZGluYXRvckVycm9yQ29tcGxldGlvbiljb21wbGV0aW9uOworKyAoQk9PTCljYW5jZWxDb29yZGlu
YXRvckZvckFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcgKilidW5kbGVJRCB3aXRoUmVhc29uOihO
U0Vycm9yICopY2FuY2VsUmVhc29uIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWNsaWVudCBl
cnJvcjooTlNFcnJvciAqKilvdXRfZXJyb3I7CisrIChpbnN0YW5jZXR5cGUpY29vcmRpbmF0b3JG
b3JBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopYnVuZGxlSUQgd2l0aENsaWVudElEOihJWENs
aWVudElkZW50aWZpZXIpaWRlbnRpdHkgY3JlYXRlSWZOb3RFeGlzdGluZzooQk9PTCljcmVhdGUg
Y3JlYXRlZDooQk9PTCAqKW91dF9jcmVhdGVkIGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsK
K0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBudWxsYWJsZSwgd2VhaykgaWQ8SVhBcHBJbnN0YWxsQ29v
cmRpbmF0b3JPYnNlcnZlcj4gb2JzZXJ2ZXI7CistIChCT09MKXNldFBsYWNlaG9sZGVyUHJvbWlz
ZTooSVhQbGFjZWhvbGRlciAqKXBsYWNlaG9sZGVyUHJvbWlzZSBlcnJvcjooTlNFcnJvciAqKilv
dXRfZXJyb3I7CistIChCT09MKXNldFVzZXJEYXRhUHJvbWlzZTooSVhQcm9taXNlZE91dE9mQmFu
ZFRyYW5zZmVyICopdXNlckRhdGEgZXJyb3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworQGVuZAor
CitAaW50ZXJmYWNlIElYUmVzdG9yaW5nRGVtb3RlZEFwcEluc3RhbGxDb29yZGluYXRvciA6IElY
QXBwSW5zdGFsbENvb3JkaW5hdG9yCitAZW5kCisKK0BpbnRlcmZhY2UgSVhPd25lZERhdGFQcm9t
aXNlIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBJWFByb21pc2VkSW5NZW1vcnlEaWN0
aW9uYXJ5IDogSVhPd25lZERhdGFQcm9taXNlCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1l
OihOU1N0cmluZyAqKW5hbWUgY2xpZW50OihJWENsaWVudElkZW50aWZpZXIpaWRlbnRpdHkgZGlj
dGlvbmFyeTooTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeTsKK0BlbmQKKworQGludGVyZmFjZSBJ
WFBsYWNlaG9sZGVyQXR0cmlidXRlcyA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21pYykg
Qk9PTCBsYXVuY2hQcm9oaWJpdGVkOworQGVuZAorCitAaW50ZXJmYWNlIElYUGxhY2Vob2xkZXIg
OiBOU09iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRBcHBQbGFjZWhvbGRlcldpdGhCdW5kbGVO
YW1lOihOU1N0cmluZyAqKW5hbWUgYnVuZGxlSUQ6KE5TU3RyaW5nICopYnVuZGxlSUQgaW5zdGFs
bFR5cGU6KExTSW5zdGFsbFR5cGUpaW5zdGFsbFR5cGUgY2xpZW50OihJWENsaWVudElkZW50aWZp
ZXIpaWRlbnRpdHkgTlNfREVTSUdOQVRFRF9JTklUSUFMSVpFUjsKKy0gKEJPT0wpc2V0UGxhY2Vo
b2xkZXJBdHRyaWJ1dGVzOihub25udWxsIElYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzICopYXR0cmli
dXRlcyBlcnJvcjooTlNFcnJvciAqKilvdXRfZXJyb3I7CistIChCT09MKXNldEVudGl0bGVtZW50
c1Byb21pc2U6KG5vbm51bGwgSVhPd25lZERhdGFQcm9taXNlICopZW50aXRsZW1lbnRzIGVycm9y
OihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nIF9OdWxsYWJsZSAqIF9OdWxsYWJsZSlvdXRfZXJy
b3I7CistIChCT09MKXNldENvbmZpZ3VyYXRpb25Db21wbGV0ZVdpdGhFcnJvcjooTlNFcnJvciAq
KilvdXRfZXJyb3I7CitAZW5kCisKK0BpbnRlcmZhY2UgSVhPcGFxdWVEYXRhUHJvbWlzZSA6IE5T
T2JqZWN0CitAZW5kCisKK0BpbnRlcmZhY2UgSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyIDog
SVhPcGFxdWVEYXRhUHJvbWlzZQorQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgY29tcGxldGU7
CitAcHJvcGVydHkgKG5vbmF0b21pYykgZG91YmxlIHBlcmNlbnRDb21wbGV0ZTsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBjbGllbnQ6KElYQ2xpZW50SWRl
bnRpZmllcilpZGVudGl0eSBkaXNrU3BhY2VOZWVkZWQ6KHVpbnQ2NF90KXRvdGFsQnl0ZXM7CitA
ZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORAorCisjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVS
TkFMX1NESykKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL0xhdW5jaFNlcnZpY2VzU1BJLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hk
L0xhdW5jaFNlcnZpY2VzU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwLi44ZWVlMTA4ZGRhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL0xhdW5jaFNlcnZpY2VzU1BJLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBQTEFURk9STShJT1MpCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworLy8gVGhpcyBz
cGFjZSBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsKKworI2Vsc2UKKworTlNfQVNTVU1FX05PTk5V
TExfQkVHSU4KKwordHlwZWRlZiBOU19FTlVNKE5TVUludGVnZXIsIExTSW5zdGFsbFR5cGUpIHsK
KyAgICBMU0luc3RhbGxUeXBlSW50ZW50aW9uYWxEb3duZ3JhZGUgPSA4Cit9OworCitAaW50ZXJm
YWNlIExTUmVjb3JkIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBMU0J1bmRsZVJlY29y
ZCA6IExTUmVjb3JkCitAcHJvcGVydHkgKHJlYWRvbmx5LCBudWxsYWJsZSkgTlNTdHJpbmcgKmJ1
bmRsZUlkZW50aWZpZXI7CitAZW5kCisKK0BpbnRlcmZhY2UgTFNBcHBsaWNhdGlvblJlY29yZCA6
IExTQnVuZGxlUmVjb3JkCitAcHJvcGVydHkgKHJlYWRvbmx5KSBCT09MIHBsYWNlaG9sZGVyOwor
QHByb3BlcnR5IChyZWFkb25seSkgTlNTdHJpbmcgKm1hbmFnZW1lbnREb21haW47CisKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEJ1bmRsZUlkZW50aWZpZXI6KE5TU3RyaW5nICopYnVuZGxlSWRl
bnRpZmllciBhbGxvd1BsYWNlaG9sZGVyOihCT09MKWFsbG93UGxhY2Vob2xkZXIgZXJyb3I6KE5T
RXJyb3IgKiopb3V0RXJyb3I7CitAZW5kCisKK0BpbnRlcmZhY2UgTFNFbnVtZXJhdG9yPF9fY292
YXJpYW50IE9iamVjdFR5cGU+IDogTlNFbnVtZXJhdG9yPE9iamVjdFR5cGU+CitAZW5kCisKK3R5
cGVkZWYgTlNfT1BUSU9OUyh1aW50NjRfdCwgTFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9u
cykgeworICAgIExTQXBwbGljYXRpb25FbnVtZXJhdGlvbk9wdGlvbnNFbnVtZXJhdGVQbGFjZWhv
bGRlcnMgPSAoMSA8PCA2KQorfTsKKworQGludGVyZmFjZSBMU0FwcGxpY2F0aW9uUmVjb3JkIChF
bnVtZXJhdGlvbikKKysgKExTRW51bWVyYXRvcjxMU0FwcGxpY2F0aW9uUmVjb3JkICo+ICopZW51
bWVyYXRvcldpdGhPcHRpb25zOihMU0FwcGxpY2F0aW9uRW51bWVyYXRpb25PcHRpb25zKW9wdGlv
bnM7CitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORAorCisjZW5kaWYgLy8gVVNFKEFQUExF
X0lOVEVSTkFMX1NESykKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvUHVzaEFwcEJ1bmRsZS5oCmluZGV4IDhhNmQ1N2NjNmY1Yi4uZTk4NWUzMjEwMTU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaApAQCAtMjUsNyArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIEBjbGFzcyBOU0Vycm9yOwogCkBAIC01Miw3ICs1
Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlQXBwQnVuZGxlKFB1c2hB
cHBCdW5kbGUmLCBQdXNoQXBwQnVuZGxlQ3JlYXRpb25SZXN1bHQpID0gMDsKIH07CiAKLWNsYXNz
IFB1c2hBcHBCdW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxQdXNoQXBwQnVuZGxlPiB7CitjbGFz
cyBQdXNoQXBwQnVuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFB1c2hBcHBCdW5k
bGU+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5QdXNoQXBwQnVuZGxlKCk7CiAgICAgdm9pZCBk
ZXRhY2hGcm9tQ2xpZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dl
YlB1c2hEYWVtb24ubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0K
aW5kZXggM2I3OGYyOTBjMjdlLi44MTU4OThjZTE5ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hk
L1dlYlB1c2hEYWVtb24ubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIkRhZW1vbkVuY29k
ZXIuaCIKICNpbXBvcnQgIkRhZW1vblV0aWxpdGllcy5oIgogI2ltcG9ydCAiSGFuZGxlTWVzc2Fn
ZS5oIgorI2ltcG9ydCAiSUNBcHBCdW5kbGUuaCIKICNpbXBvcnQgIk1vY2tBcHBCdW5kbGVSZWdp
c3RyeS5oIgogCiAjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KQEAgLTI3MCw4ICsy
NzEsMTEgQEAgdm9pZCBEYWVtb246OmdldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBl
cm1pc3Npb25zKENsaWVudENvbm5lY3Rpb24qIGNvbm4KICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbmVlZCBwbGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1l
bnRhdGlvbnMgZm9yIHJlYWwgd29ybGQgYnVuZGxlcyBvbmNlIGltcGxlbWVudGVkLgotICAgIHJl
cGx5U2VuZGVyKHsgfSk7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIElDQXBwQnVuZGxlOjpnZXRP
cmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMoKmNvbm5lY3Rpb24sIFdURk1vdmUocmVwbHlTZW5kZXIp
KTsKKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgogfQog
CiB2b2lkIERhZW1vbjo6ZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihDbGll
bnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiByZXBseVNlbmRlcikKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1v
bi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1v
bi5tbQppbmRleCBkODcxMmIwNDA1MTYuLjljNDE5ZDA1OTU5OSAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQpAQCAt
MTU3LDYgKzE1NywzOSBAQCBzdGF0aWMgdm9pZCBjbGVhblVwVGVzdFdlYlB1c2hEKE5TVVJMICp0
ZW1wRGlyKQogICAgIEVYUEVDVF9OVUxMKGVycm9yKTsKIH0KIAorc3RhdGljIHZvaWQgZGVsZXRl
QWxsUmVnaXN0cmF0aW9uc0ZvckRhdGFTdG9yZShXS1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9y
ZSkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAg
IF9fYmxvY2sgUmV0YWluUHRyPE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4+IG9yaWdpblNldDsK
KyAgICBbZGF0YVN0b3JlIF9nZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNz
aW9uczpeKE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4gKm9yaWdpbnMpIHsKKyAgICAgICAgb3Jp
Z2luU2V0ID0gb3JpZ2luczsKKyAgICAgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRydWU7Cisg
ICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZvcmlnaW5PcGVyYXRpb25Eb25l
KTsKKworICAgIGlmICghW29yaWdpblNldCBjb3VudF0pCisgICAgICAgIHJldHVybjsKKworICAg
IF9fYmxvY2sgc2l6ZV90IGRlbGV0ZWRPcmlnaW5zID0gMDsKKyAgICBvcmlnaW5PcGVyYXRpb25E
b25lID0gZmFsc2U7CisgICAgZm9yIChXS1NlY3VyaXR5T3JpZ2luICpvcmlnaW4gaW4gb3JpZ2lu
U2V0LmdldCgpKSB7CisgICAgICAgIFtkYXRhU3RvcmUgX2RlbGV0ZVB1c2hBbmROb3RpZmljYXRp
b25SZWdpc3RyYXRpb246b3JpZ2luIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3Ip
IHsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSghIWVycm9yKTsKKyAgICAgICAgICAgIGlmICgr
K2RlbGV0ZWRPcmlnaW5zID09IFtvcmlnaW5TZXQgY291bnRdKQorICAgICAgICAgICAgICAgIG9y
aWdpbk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgICAgICB9XTsKKyAgICB9CisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZvcmlnaW5PcGVyYXRpb25Eb25lKTsKKworICAgIG9yaWdpbk9w
ZXJhdGlvbkRvbmUgPSBmYWxzZTsKKyAgICBbZGF0YVN0b3JlIF9nZXRPcmlnaW5zV2l0aFB1c2hB
bmROb3RpZmljYXRpb25QZXJtaXNzaW9uczpeKE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4gKm9y
aWdpbnMpIHsKKyAgICAgICAgRVhQRUNUX0VRKFtvcmlnaW5zIGNvdW50XSwgMHUpOworICAgICAg
ICBvcmlnaW5PcGVyYXRpb25Eb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCit9CisKIC8vIEZJWE1FOiBSZS1l
bmFibGUgdGhpcyB0ZXN0IGZvciBNb250ZXJleSsgb25jZSB3ZWJraXQub3JnLzIzMjg1NyBpcyBy
ZXNvbHZlZC4KICNpZiBQTEFURk9STShNQUMpICYmIChfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEIDwgMTEwMDAwIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTIw
MDAwKQogVEVTVChXZWJQdXNoRCwgRElTQUJMRURfQmFzaWNDb21tdW5pY2F0aW9uKQpAQCAtMzMw
LDYgKzM2Myw2NSBAQCBURVNUKFdlYlB1c2hELCBQZXJtaXNzaW9uTWFuYWdlbWVudCkKICAgICBj
bGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3RvcnkpOwogfQogCisjaWYgUExBVEZPUk0oSU9T
KQorVEVTVChXZWJQdXNoRCwgSW5zdGFsbENvb3JkaW5hdGlvbkJ1bmRsZXMpCit7CisgICAgTlNV
UkwgKnRlbXBEaXJlY3RvcnkgPSBzZXRVcFRlc3RXZWJQdXNoRCgpOworCisgICAgYXV0byBkYXRh
U3RvcmVDb25maWd1cmF0aW9uID0gYWRvcHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb24gbmV3XSk7CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoTWFj
aFNlcnZpY2VOYW1lID0gQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiOwor
ICAgIGF1dG8gZGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10g
X2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CisK
KyAgICBkZWxldGVBbGxSZWdpc3RyYXRpb25zRm9yRGF0YVN0b3JlKGRhdGFTdG9yZS5nZXQoKSk7
CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFT
dG9yZSA9IGRhdGFTdG9yZS5nZXQoKTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcmVmZXJl
bmNlcyBfc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQ6WUVTXTsKKyAgICBmb3IgKF9XS0V4cGVyaW1l
bnRhbEZlYXR1cmUgKmZlYXR1cmUgaW4gW1dLUHJlZmVyZW5jZXMgX2V4cGVyaW1lbnRhbEZlYXR1
cmVzXSkgeworICAgICAgICBpZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIkJ1aWx0
SW5Ob3RpZmljYXRpb25zRW5hYmxlZCJdKQorICAgICAgICAgICAgW1tjb25maWd1cmF0aW9uIHBy
ZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICB9CisK
KyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgYWxsb2Nd
IGluaXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIu
Z2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdGluZyJdOworCisgICAgW2hhbmRsZXIgc2V0U3RhcnRV
UkxTY2hlbWVUYXNrSGFuZGxlcjpeKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRh
c2spIHsKKyAgICAgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU1VSTFJlc3BvbnNlIGFs
bG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBl
eHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0pOworICAgICAgICBb
dGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCldOworICAgICAgICBbdGFzayBk
aWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6bWFpbkJ5dGVzIGxlbmd0aDpzdHJs
ZW4obWFpbkJ5dGVzKV1dOworICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgIH1dOworCisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uLmdldCgpXSk7CisgICAgYXV0byB1aURlbGVnYXRlID0gYWRvcHROUyhbW05vdGlmaWNhdGlv
blBlcm1pc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldFVJRGVs
ZWdhdGU6dWlEZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNV
UkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdGluZzov
L21haW4vaW5kZXguaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZhbGVy
dFJlY2VpdmVkKTsKKworICAgIGFsZXJ0UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAidGVzdGluZzovL3NlY29uZGFyeS9pbmRleC5odG1sIl1dXTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmFsZXJ0UmVjZWl2ZWQpOworCisgICAgc3RhdGljIGJvb2wgb3JpZ2lu
T3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNTZXQ8V0tTZWN1
cml0eU9yaWdpbiAqPj4gb3JpZ2luczsKKyAgICBbZGF0YVN0b3JlIF9nZXRPcmlnaW5zV2l0aFB1
c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9uczpeKE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4g
KnJhd09yaWdpbnMpIHsKKyAgICAgICAgRVhQRUNUX0VRKFtyYXdPcmlnaW5zIGNvdW50XSwgMnUp
OworICAgICAgICBvcmlnaW5zID0gcmF3T3JpZ2luczsKKyAgICAgICAgb3JpZ2luT3BlcmF0aW9u
RG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZvcmln
aW5PcGVyYXRpb25Eb25lKTsKKworICAgIGZvciAoV0tTZWN1cml0eU9yaWdpbiAqb3JpZ2luIGlu
IG9yaWdpbnMuZ2V0KCkpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoW29yaWdpbi5wcm90b2NvbCBp
c0VxdWFsVG9TdHJpbmc6QCJ0ZXN0aW5nIl0pOworICAgICAgICBFWFBFQ1RfVFJVRShbb3JpZ2lu
Lmhvc3QgaXNFcXVhbFRvU3RyaW5nOkAibWFpbiJdIHx8IFtvcmlnaW4uaG9zdCBpc0VxdWFsVG9T
dHJpbmc6QCJzZWNvbmRhcnkiXSk7CisgICAgfQorCisgICAgZGVsZXRlQWxsUmVnaXN0cmF0aW9u
c0ZvckRhdGFTdG9yZShkYXRhU3RvcmUuZ2V0KCkpOworICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQo
dGVtcERpcmVjdG9yeSk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorCiB9IC8vIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KElPUykK
</data>
<flag name="commit-queue"
          id="470865"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445639</attachid>
            <date>2021-12-01 17:05:01 -0800</date>
            <delta_ts>2021-12-01 17:56:22 -0800</delta_ts>
            <desc>EWS v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>44161</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaCBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaAppbmRleCBhZTkyYmVlOTg2MDQuLjgwZmM4
MDMzMTRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaApAQCAtMTQzLDYgKzE0
MywxMCBAQAogI2RlZmluZSBFTkFCTEVfQlVJTFRfSU5fTk9USUZJQ0FUSU9OUyAxCiAjZW5kaWYK
IAorI2lmICFkZWZpbmVkKEVOQUJMRV9JTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKSAmJiBQ
TEFURk9STShJT1MpCisjZGVmaW5lIEVOQUJMRV9JTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVT
IDEKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORykKICNk
ZWZpbmUgRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORyAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oIGIvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKaW5kZXggMDZjMThjMzBlYjEwLi4xMzg0
ODRiMzA5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0
b0RpZ2VzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2Vz
dC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBQQUwgewogCkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIFBBTF9F
WFBPUlQgdm9pZCBhZGRCeXRlcyhjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCk7CiAg
ICAgUEFMX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gY29tcHV0ZUhhc2goKTsKKyAgICBQQUxfRVhQ
T1JUIFN0cmluZyB0b0hleFN0cmluZygpOwogCiBwcml2YXRlOgogICAgIENyeXB0b0RpZ2VzdCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRv
L0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2Ny
eXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcAppbmRleCAxY2U1
Nzk3ZmVmNjIuLmRjZjBhMzQ0ZThlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3Bh
bC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENv
bW1vbkNyeXB0by5jcHAKQEAgLTE4Miw0ICsxODIsMTkgQEAgVmVjdG9yPHVpbnQ4X3Q+IENyeXB0
b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1N0cmluZyBD
cnlwdG9EaWdlc3Q6OnRvSGV4U3RyaW5nKCkKK3sKKyAgICBhdXRvIGhhc2ggPSBjb21wdXRlSGFz
aCgpOworCisgICAgY2hhciogc3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGhhc2hMZW5ndGggPSBo
YXNoLnNpemUoKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6
ZWQoaGFzaExlbmd0aCAqIDIsIHN0YXJ0KTsKKyAgICBjaGFyKiBidWZmZXIgPSBzdGFydDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2hMZW5ndGg7ICsraSkgeworICAgICAgICBzbnBy
aW50ZihidWZmZXIsIDMsICIlMDJYIiwgaGFzaC5hdChpKSk7CisgICAgICAgIGJ1ZmZlciArPSAy
OworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVG
aWxlU3lzdGVtLmNwcAppbmRleCA3NmU0NWFmMzRlZDAuLmRjNDRjNmE3OTZmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcApAQCAtMTI5
LDE4ICsxMjksNyBAQCBTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Y29tcHV0ZUhhc2hGb3JGaWxl
TmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogICAgIGF1dG8gY3J5cHRvRGlnZXN0ID0gUEFM
OjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFf
MjU2KTsKICAgICBhdXRvIHV0ZjhGaWxlTmFtZSA9IGZpbGVOYW1lLnV0ZjgoKTsKICAgICBjcnlw
dG9EaWdlc3QtPmFkZEJ5dGVzKHV0ZjhGaWxlTmFtZS5kYXRhKCksIHV0ZjhGaWxlTmFtZS5sZW5n
dGgoKSk7Ci0gICAgYXV0byBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNoKCk7Ci0g
ICAgCi0gICAgLy8gQ29udmVydCBkaWdlc3QgdG8gaGV4LgotICAgIGNoYXIqIHN0YXJ0ID0gMDsK
LSAgICB1bnNpZ25lZCBkaWdlc3RMZW5ndGggPSBkaWdlc3Quc2l6ZSgpOwotICAgIENTdHJpbmcg
cmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChkaWdlc3RMZW5ndGggKiAyLCBzdGFy
dCk7Ci0gICAgY2hhciogYnVmZmVyID0gc3RhcnQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBkaWdlc3RMZW5ndGg7ICsraSkgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIDMsICIlMDJY
IiwgZGlnZXN0LmF0KGkpKTsKLSAgICAgICAgYnVmZmVyICs9IDI7Ci0gICAgfQotICAgIHJldHVy
biBTdHJpbmc6OmZyb21VVEY4KHJlc3VsdCk7CisgICAgcmV0dXJuIGNyeXB0b0RpZ2VzdC0+dG9I
ZXhTdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZpZyBiL1NvdXJjZS9XZWJL
aXQvQ29uZmlndXJhdGlvbnMvd2VicHVzaGQueGNjb25maWcKaW5kZXggMzA1ZjIwYjIxMGNhLi5k
M2YxZWZhODc3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvd2Vi
cHVzaGQueGNjb25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy93ZWJwdXNo
ZC54Y2NvbmZpZwpAQCAtMjUsNyArMjUsMjUgQEAKIAogUFJPRFVDVF9OQU1FID0gd2VicHVzaGQ7
CiAKLU9USEVSX0xERkxBR1MgPSAtbCBXVEYgLWZyYW1ld29yayBGb3VuZGF0aW9uIC1mcmFtZXdv
cmsgQ29yZUZvdW5kYXRpb247CitFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU1tzZGs9YXBwbGV0
dipdID0gKjsKK0VYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTW3Nkaz13YXRjaCpdID0gKjsKKwor
V0tfQ09SRV9TRVJWSUNFU19MREZMQUdTID0gJChXS19DT1JFX1NFUlZJQ0VTX0xERkxBR1NfJChX
S19QTEFURk9STV9OQU1FKSk7CitXS19DT1JFX1NFUlZJQ0VTX0xERkxBR1NfbWFjb3N4ID0gLWZy
YW1ld29yayBDb3JlU2VydmljZXM7CisKK1dLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1Mg
PSAkKFdLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfJChXS19QTEFURk9STV9OQU1FKSk7
CitXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTX2lwaG9uZW9zID0gLWZyYW1ld29yayBN
b2JpbGVDb3JlU2VydmljZXM7CitXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTX2lwaG9u
ZXNpbXVsYXRvciA9ICQoV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHU19pcGhvbmVvcyk7
CisKK1dLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1MgPSAkKFdLX0lOU1RBTExfQ09PUkRJ
TkFUSU9OX0xERkxBR1NfJChXS19QTEFURk9STV9OQU1FKSk7CitXS19JTlNUQUxMX0NPT1JESU5B
VElPTl9MREZMQUdTX2lwaG9uZW9zID0gLWZyYW1ld29yayBJbnN0YWxsQ29vcmRpbmF0aW9uOwor
V0tfSU5TVEFMTF9DT09SRElOQVRJT05fTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAkKFdLX0lO
U1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1NfaXBob25lb3MpCisKK1dLX1NIQTI1Nl9MREZMQUdT
ID0gJChXS19TSEEyNTZfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKK1dLX1NIQTI1Nl9M
REZMQUdTX2lwaG9uZW9zID0gLWZvcmNlX2xvYWQgJChCVUlMVF9QUk9EVUNUU19ESVIpL2xpYlBB
TC5hCitXS19TSEEyNTZfTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAkKFdLX1NIQTI1Nl9MREZM
QUdTX2lwaG9uZW9zKQorCitPVEhFUl9MREZMQUdTID0gLWwgV1RGIC1mcmFtZXdvcmsgRm91bmRh
dGlvbiAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uICQoV0tfU0hBMjU2X0xERkxBR1MpICQoV0tf
Q09SRV9TRVJWSUNFU19MREZMQUdTKSAkKFdLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1Mp
ICQoV0tfSU5TVEFMTF9DT09SRElOQVRJT05fTERGTEFHUyk7CiBMSUJSQVJZX1NFQVJDSF9QQVRI
UyA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKTsKIAogV0tfUFJPQ0VTU0VEX1hDRU5UX0ZJTEU9JChU
RU1QX0ZJTEVfRElSKS8kKEZVTExfUFJPRFVDVF9OQU1FKS5lbnRpdGxlbWVudHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGViNjQxYzEy
MDcyOS4uMjk2ZDU4YzhhODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMjIsNiArMTAyMiwxMCBAQAogCQk1MTdBNTMxMDFGNDdB
ODYyMDBEQ0RDMEEgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0E1MzBEMUY0N0E4NDMwMERD
REMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OwogCQk1MTdCNUYy
RTI3NTczODJBMDAyREMyMkQgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYy
RDI3NTczODJBMDAyREMyMkQgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9u
LmggKi87IH07CiAJCTUxN0I1RjJGMjc1NzM4MkIwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29u
bmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxN0I1RjJEMjc1NzM4MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29u
bmVjdGlvbkNvbmZpZ3VyYXRpb24uaCAqLzsgfTsKKwkJNTE3QjVGMzcyNzU3REE4ODAwMkRDMjJE
IC8qIExhdW5jaFNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTdCNUYzMzI3NTdEQTg3MDAyREMyMkQgLyogTGF1bmNoU2VydmljZXNT
UEkuaCAqLzsgfTsKKwkJNTE3QjVGMzgyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QjVGMzQy
NzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLm1tICovOyB9OworCQk1MTdCNUYzOTI3NTdE
QTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QjVGMzUyNzU3REE4ODAwMkRDMjJEIC8q
IEluc3RhbGxDb29yZGluYXRpb25TUEkuaCAqLzsgfTsKKwkJNTE3QjVGM0EyNzU3REE4ODAwMkRD
MjJEIC8qIElDQXBwQnVuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTdCNUYzNjI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUuaCAqLzsg
fTsKIAkJNTE3Q0YwRTMxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTdDRjBFMTE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTE3Q0YwRTMxNjNBNDg2QzAwQzI5
NTBGIC8qIENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3Q0YwRTExNjNB
NDg2QzAwQzI5NTBGIC8qIENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2
ZXIuY3BwICovOyB9OwogCQk1MTdDRjBFNDE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OwpAQCAtNDM3Nyw2ICs0MzgxLDEwIEBACiAJCTUxN0E1
MzBEMUY0N0E4NDMwMERDREMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNz
YWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJTV0NsaWVudENvbm5lY3Rp
b25NZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MTdB
NTMwRTFGNDdBODQzMDBEQ0RDMEEgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlNXQ2xpZW50
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJL
aXQyL1dlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUxN0I1RjJEMjc1NzM4MkEwMDJEQzIyRCAvKiBX
ZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjMzMjc1N0RBODcwMDJEQzIyRCAvKiBM
YXVuY2hTZXJ2aWNlc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXVu
Y2hTZXJ2aWNlc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTdCNUYzNDI3
NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBJQ0FwcEJ1bmRsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTE3QjVGMzUyNzU3REE4ODAwMkRDMjJEIC8qIEluc3RhbGxDb29yZGluYXRpb25TUEku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zdGFsbENvb3JkaW5hdGlvblNQ
SS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTdCNUYzNjI3NTdEQTg4MDAyREMy
MkQgLyogSUNBcHBCdW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNB
cHBCdW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3Q0YwRTExNjNBNDg2
QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MTdDRjBFMTE2M0E0ODZDMDBDMjk1MEYgLyogQ2Fj
aGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uTWVz
c2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvQ2FjaGVTdG9y
YWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtOTg5NCw2ICs5OTAyLDEwIEBACiAJCQkJ
NTE2MEU5NTQyNzRCODg3MTAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QuaCAqLywKIAkJCQk1
MTYwRTk1MzI3NEI4ODcxMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5tbSAqLywKIAkJCQk1
Q0JCNkQ0RDI3MUY2N0NDMDBGRDFBNUQgLyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5wbGlz
dCAqLywKKwkJCQk1MTdCNUYzNjI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUuaCAqLywK
KwkJCQk1MTdCNUYzNDI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gKi8sCisJCQkJ
NTE3QjVGMzUyNzU3REE4ODAwMkRDMjJEIC8qIEluc3RhbGxDb29yZGluYXRpb25TUEkuaCAqLywK
KwkJCQk1MTdCNUYzMzI3NTdEQTg3MDAyREMyMkQgLyogTGF1bmNoU2VydmljZXNTUEkuaCAqLywK
IAkJCQk1MUY3QkI3NTI3NDQ5OEJCMDBDNDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3Rpbmcu
aCAqLywKIAkJCQk1MUY3QkI3NDI3NDQ5OEJBMDBDNDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRl
c3RpbmcubW0gKi8sCiAJCQkJNTE2MEU5NUMyNzRDMkEwMzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5k
bGVSZWdpc3RyeS5oICovLApAQCAtMTI0NDksMTMgKzEyNDYxLDE2IEBACiAJCQlpc2EgPSBQQlhI
ZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKKwkJCQk1MTdCNUYzQTI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNjBFOTU2Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVS
ZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1QzE1NzlGQzI3MTdBRjUwMDBFRDUyODAgLyog
RGFlbW9uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUY3QkI3NzI3NDQ5OEJCMDBD
NDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
NjBFOTVFMjc0QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxNjBFOTU5Mjc0QzBEODkwMDU2NzM4OCAvKiBQdXNoQXBwQnVuZGxlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MUY3QkI3QjI3NDRDNTA3MDBDNDVBNzIgLyogUHVzaENsaWVu
dENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0I1RjM3Mjc1N0RBODgwMDJEQzIy
RCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGMkYyNzU3
MzgyQjAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTE3QjVGMzkyNzU3REE4ODAwMkRDMjJEIC8qIEluc3RhbGxDb29y
ZGluYXRpb25TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkNENjlGMjcyMzM5M0EwMEY3RjhF
QyAvKiBXZWJQdXNoRGFlbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTE0OTkzLDYgKzE1MDA4LDcgQEAKIAkJ
CWZpbGVzID0gKAogCQkJCTUxNjBFOTU1Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1
ZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTdBMDEyNzE3QjdGQjAwRUQ1MjgwIC8qIEFy
Z3VtZW50Q29kZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxN0I1RjM4Mjc1N0RBODgwMDJE
QzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRjdCQjdEMjc0NTY0
MDQwMEM0NUE3MiAvKiBDb2RlU2lnbmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3OUZG
MjcxN0I2RDIwMEVENTI4MCAvKiBEYWVtb25EZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTVDMTU3OUZFMjcxN0I2QzEwMEVENTI4MCAvKiBEYWVtb25FbmNvZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBCdW5kbGVSZXF1ZXN0
Lm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBCdW5kbGVSZXF1ZXN0Lm1tCmluZGV4IGQw
NDdlMWQ2MmE3My4uNjA5N2Q3OThlYzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBC
dW5kbGVSZXF1ZXN0Lm1tCkBAIC0yNiw2ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgIkFwcEJ1bmRsZVJlcXVlc3QuaCIKIAorI2ltcG9ydCAiSUNBcHBCdW5kbGUuaCIKICNp
bXBvcnQgIk1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJQdXNoRGFlbW9u
LmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4KQEAgLTUxLDggKzUy
LDEzIEBAIHZvaWQgQXBwQnVuZGxlUmVxdWVzdDo6c3RhcnQoKQogCiAgICAgaWYgKG1fY29ubmVj
dGlvbi0+dXNlTW9ja0J1bmRsZXNGb3JUZXN0aW5nKCkpCiAgICAgICAgIG1fYXBwQnVuZGxlID0g
TW9ja0FwcEJ1bmRsZUZvclRlc3Rpbmc6OmNyZWF0ZShtX29yaWdpblN0cmluZywgbV9jb25uZWN0
aW9uLT5ob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCksICp0aGlzKTsKLSAgICBlbHNlCisg
ICAgZWxzZSB7CisjaWYgRU5BQkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMpCisgICAg
ICAgIG1fYXBwQnVuZGxlID0gSUNBcHBCdW5kbGU6OmNyZWF0ZSgqbV9jb25uZWN0aW9uLCBtX29y
aWdpblN0cmluZywgKnRoaXMpOworI2Vsc2UKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgorICAgIH0KIAogICAgIHN0YXJ0SW50ZXJuYWwoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBCdW5kbGUuaCBiL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvSUNBcHBCdW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjk2NmUwYzAxODc5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvSUNBcHBCdW5kbGUuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
IEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQorCisjaW1wb3J0ICJJbnN0YWxs
Q29vcmRpbmF0aW9uU1BJLmgiCisjaW1wb3J0ICJQdXNoQXBwQnVuZGxlLmgiCisjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvV2Vha1B0ci5oPgorI2ltcG9ydCA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK0BjbGFzcyBOU0Vycm9yOworQGNsYXNzIFdlYkFwcEluc3RhbGxD
b29yZGluYXRvck9ic2VydmVyOworCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitjbGFzcyBDbGll
bnRDb25uZWN0aW9uOworCitjbGFzcyBJQ0FwcEJ1bmRsZSA6IHB1YmxpYyBQdXNoQXBwQnVuZGxl
LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8SUNBcHBCdW5kbGU+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElDQXBwQnVuZGxlPiBjcmVhdGUo
Q2xpZW50Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcs
IFB1c2hBcHBCdW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IElDQXBwQnVuZGxlKGNvbm5lY3Rpb24sIG9yaWdpblN0cmluZywgY2xpZW50KSk7
CisgICAgfQorCisgICAgdm9pZCBidW5kbGVDcmVhdGlvblN1Y2NlZWRlZCgpOworICAgIHZvaWQg
YnVuZGxlQ3JlYXRpb25GYWlsZWQoTlNFcnJvciAqKTsKKworICAgIHN0YXRpYyB2b2lkIGdldE9y
aWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhDbGllbnRDb25uZWN0aW9uJiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYpPiYmKTsKKworcHJpdmF0ZToKKyAgICBJQ0Fw
cEJ1bmRsZShDbGllbnRDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIFB1
c2hBcHBCdW5kbGVDbGllbnQmKTsKKworICAgIGNvbnN0IFN0cmluZyYgZ2V0QnVuZGxlSWRlbnRp
ZmllcigpOworCisgICAgdm9pZCBjaGVja0ZvckV4aXN0aW5nQnVuZGxlKCkgZmluYWw7CisgICAg
dm9pZCBkZWxldGVFeGlzdGluZ0J1bmRsZSgpIGZpbmFsOworICAgIHZvaWQgY3JlYXRlQnVuZGxl
KCkgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisKKyAgICB2b2lkIGRpZERlbGV0ZUV4
aXN0aW5nQnVuZGxlV2l0aEVycm9yKE5TRXJyb3IgKik7CisKKyAgICBSZXRhaW5QdHI8SVhSZXN0
b3JpbmdEZW1vdGVkQXBwSW5zdGFsbENvb3JkaW5hdG9yPiBtX2FwcEluc3RhbGxDb29yZGluYXRv
cjsKKyAgICBSZXRhaW5QdHI8V2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXI+IG1fYXBw
SW5zdGFsbE9ic2VydmVyOworCisgICAgU3RyaW5nIG1fb3JpZ2luU3RyaW5nOworICAgIFJlZlB0
cjxDbGllbnRDb25uZWN0aW9uPiBtX2NsaWVudENvbm5lY3Rpb247CisKKyAgICBTdHJpbmcgbV9i
dW5kbGVJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvSUNBcHBCdW5kbGUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li4wNDU1YjJjNGM0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hk
L0lDQXBwQnVuZGxlLm1tCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgorCisjaWYgRU5BQkxFKElOU1RBTExf
Q09PUkRJTkFUSU9OX0JVTkRMRVMpCisKKyNpbXBvcnQgIkFwcEJ1bmRsZVJlcXVlc3QuaCIKKyNp
bXBvcnQgIkxhdW5jaFNlcnZpY2VzU1BJLmgiCisjaW1wb3J0ICJQdXNoQ2xpZW50Q29ubmVjdGlv
bi5oIgorI2ltcG9ydCAiV2ViUHVzaERhZW1vbi5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
Q29uc29sZVR5cGVzLmg+CisjaW1wb3J0IDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgorI2lt
cG9ydCA8d3RmL01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2lt
cG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCitOU1N0cmluZyAqcHVzaEJ1bmRsZUFw
cE1hbmFnZW1lbnREb21haW4gPSBAImNvbS5hcHBsZS5XZWJLaXQuUHVzaEJ1bmRsZXMiOworCitA
aW50ZXJmYWNlIFdlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyIDogTlNPYmplY3QgPElY
QXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXI+CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJ
Q0FwcEJ1bmRsZTooV2ViUHVzaEQ6OklDQXBwQnVuZGxlJilpY0FwcEJ1bmRsZTsKK0Bwcm9wZXJ0
eSBXZWFrUHRyPFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZT4gYnVuZGxlOworQGVuZAorCitAaW1wbGVt
ZW50YXRpb24gV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIKKworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoSUNBcHBCdW5kbGU6KFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZSYpaWNBcHBCdW5k
bGUKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKworICAgIF9idW5kbGUgPSBpY0FwcEJ1bmRsZTsKKworICAgIHJldHVybiBzZWxmOworfQor
CistICh2b2lkKWNvb3JkaW5hdG9yRGlkQ29tcGxldGVTdWNjZXNzZnVsbHk6KG5vbm51bGwgSVhB
cHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBmb3JBcHBsaWNhdGlvblJlY29yZDoo
bnVsbGFibGUgTFNBcHBsaWNhdGlvblJlY29yZCAqKWFwcFJlY29yZAoreworICAgIGNhbGxPbk1h
aW5SdW5Mb29wKFtzZWxmLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPGlkPihzZWxmKV0gewor
ICAgICAgICBpZiAoX2J1bmRsZSkKKyAgICAgICAgICAgIF9idW5kbGUtPmJ1bmRsZUNyZWF0aW9u
U3VjY2VlZGVkKCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpY29vcmRpbmF0b3I6KG5vbm51bGwg
SVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBjYW5jZWxlZFdpdGhSZWFzb246
KG5vbm51bGwgTlNFcnJvciAqKWNhbmNlbFJlYXNvbiBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmll
ciljbGllbnQKK3sKKyAgICBjYWxsT25NYWluUnVuTG9vcChbc2VsZiwgcHJvdGVjdGVkU2VsZiA9
IFJldGFpblB0cjxpZD4oc2VsZiksIHByb3RlY3RlZENhbmNlbFJlYXNvbiA9IFJldGFpblB0cjxO
U0Vycm9yPihjYW5jZWxSZWFzb24pXSB7CisgICAgICAgIGlmIChfYnVuZGxlKQorICAgICAgICAg
ICAgX2J1bmRsZS0+YnVuZGxlQ3JlYXRpb25GYWlsZWQocHJvdGVjdGVkQ2FuY2VsUmVhc29uLmdl
dCgpKTsKKyAgICB9KTsKK30KKworQGVuZAorCit1c2luZyBQQUw6OkNyeXB0b0RpZ2VzdDsKKwor
bmFtZXNwYWNlIFdlYlB1c2hEIHsKKworc3RhdGljIHZvaWQgYnJvYWRjYXN0RGVidWdNZXNzYWdl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBEYWVtb246OnNpbmdsZXRvbigpLmJyb2Fk
Y2FzdERlYnVnTWVzc2FnZShKU0M6Ok1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiSUNB
cHBCdW5kbGU6ICIsIG1lc3NhZ2UpKTsKK30KKworSUNBcHBCdW5kbGU6OklDQXBwQnVuZGxlKENs
aWVudENvbm5lY3Rpb24mIGNsaWVudENvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luU3Ry
aW5nLCBQdXNoQXBwQnVuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgOiBQdXNoQXBwQnVuZGxlKGNs
aWVudCkKKyAgICAsIG1fb3JpZ2luU3RyaW5nKG9yaWdpblN0cmluZykKKyAgICAsIG1fY2xpZW50
Q29ubmVjdGlvbigmY2xpZW50Q29ubmVjdGlvbikKK3sKK30KKworc3RhdGljIFN0cmluZyBlbmNv
ZGVPcmlnaW5TdHJpbmdGb3JCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaW5wdXQpCit7
CisgICAgLy8gQnVuZGxlIGlkZW50aWZpZXJzIGhhdmUgZXhhY3RseSA2NCB2YWxpZCBjaGFyYWN0
ZXJzLgorICAgIC8vIGEteiwgQS1aLCAwLTksICctJywgYW5kICcuJworICAgIC8vIEJhc2U2NCBV
UkwgZW5jb2RpbmcgdXNlcyAnLScgYW5kICdfJyBmb3IgdGhlIGZpbmFsIDIgY2hhcmFjdGVycwor
ICAgIC8vIEZvciBvdXIgYnVuZGxlIGlkZW50aWZpZXIsIHdlJ2xsIEJhc2U2NCBVUkwgZW5jb2Rl
IHRoZW4gcmVwbGFjZSAnXycgd2l0aCAnLicKKyAgICAvLyBXZSBhbHNvIGdldCByaWQgb2YgdGhl
IHR5cGljYWwgJz0nIHBhZGRpbmcgZm9yIGJhc2U2NCBlbmNvZGluZy4KKworICAgIGF1dG8gYmFz
ZTY0ID0gYmFzZTY0VVJMRW5jb2RlVG9WZWN0b3IoaW5wdXQudXRmOCgpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJhc2U2NC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmFzZTY0
W2ldID09ICdfJykKKyAgICAgICAgICAgIGJhc2U2NFtpXSA9ICcuJzsKKyAgICB9CisKKyAgICBz
aXplX3QgbnVtYmVyRXF1YWxTaWducyA9IDA7CisgICAgaWYgKGJhc2U2NC5zaXplKCkgPj0gMSAm
JiBiYXNlNjQubGFzdCgpID09ICc9JykKKyAgICAgICAgKytudW1iZXJFcXVhbFNpZ25zOworICAg
IGlmIChiYXNlNjQuc2l6ZSgpID49IDIgJiYgYmFzZTY0W2Jhc2U2NC5zaXplKCkgLSAyXSA9PSAn
PScpCisgICAgICAgICsrbnVtYmVyRXF1YWxTaWduczsKKworICAgIHJldHVybiBTdHJpbmc6OmZy
b21VVEY4KGJhc2U2NC5kYXRhKCksIGJhc2U2NC5zaXplKCkgLSBudW1iZXJFcXVhbFNpZ25zKTsK
K30KKworc3RhdGljIFN0cmluZyBvcmlnaW5TdHJpbmdGcm9tRW5jb2RlZEJ1bmRsZUlkZW50aWZp
ZXIoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICBhdXRvIHV0ZjggPSBpbnB1dC51dGY4KCk7
CisgICAgYXV0byBidWZmZXIgPSB1dGY4Lm11dGFibGVEYXRhKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB1dGY4Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJ1ZmZlcltpXSA9
PSAnLicpCisgICAgICAgICAgICBidWZmZXJbaV0gPSAnXyc7CisgICAgfQorCisgICAgYXV0byBk
ZWNvZGVkID0gYmFzZTY0VVJMRGVjb2RlKGJ1ZmZlciwgdXRmOC5sZW5ndGgoKSk7CisgICAgaWYg
KCFkZWNvZGVkKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJv
bVVURjgoZGVjb2RlZC0+ZGF0YSgpLCBkZWNvZGVkLT5zaXplKCkpOworfQorCitzdGF0aWMgU3Ry
aW5nIGJ1bmRsZVByZWZpeEZvckhvc3RBcHBJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaG9zdEFw
cElkZW50aWZpZXIpCit7CisgICAgYXV0byBhcHBEaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6
Y3JlYXRlKENyeXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKKyAgICBhdXRvIHV0ZjhJ
ZGVudGlmaWVyID0gaG9zdEFwcElkZW50aWZpZXIudXRmOCgpOworICAgIGFwcERpZ2VzdC0+YWRk
Qnl0ZXModXRmOElkZW50aWZpZXIuZGF0YSgpLCB1dGY4SWRlbnRpZmllci5sZW5ndGgoKSk7CisK
KyAgICByZXR1cm4gbWFrZVN0cmluZygiY29tLmFwcGxlLldlYktpdC5QdXNoQnVuZGxlLiIsIGFw
cERpZ2VzdC0+dG9IZXhTdHJpbmcoKSwgIi4iKTsKK30KKworc3RhdGljIFN0cmluZyBidW5kbGVO
YW1lRm9yT3JpZ2luU3RyaW5nQW5kSG9zdEFwcElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBvcmln
aW5TdHJpbmcsIGNvbnN0IFN0cmluZyYgaG9zdEFwcElkZW50aWZpZXIpCit7CisgICAgLy8gRklY
TUU6IE9uY2Ugd2UgY2FuIHN0b3JlIHRoZSBvcmlnaW4gc3RyaW5nIHdpdGhpbiB0aGUgYXBwIGJ1
bmRsZSwgaGFzaCB0aGUgb3JpZ2luIHN0cmluZyBhcyB3ZWxsLgorICAgIC8vIEZvciBub3cgd2Ug
YmFzZTY0IGVuY29kZSBpdCB0byBtYWtlIGEgdmFsaWQgYnVuZGxlIGlkZW50aWZpZXIgdGhhdCBj
YXJyaWVzIHRoZSBpbmZvcm1hdGlvbi4KKyAgICByZXR1cm4gbWFrZVN0cmluZyhidW5kbGVQcmVm
aXhGb3JIb3N0QXBwSWRlbnRpZmllcihob3N0QXBwSWRlbnRpZmllciksIGVuY29kZU9yaWdpblN0
cmluZ0ZvckJ1bmRsZUlkZW50aWZpZXIob3JpZ2luU3RyaW5nKSk7Cit9CisKK3ZvaWQgSUNBcHBC
dW5kbGU6OmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhDbGllbnRDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsKKworICAg
IFJldGFpblB0cjxOU1N0cmluZz4gYnVuZGxlSWRlbnRpZmllclByZWZpeCA9IChOU1N0cmluZyAq
KWJ1bmRsZVByZWZpeEZvckhvc3RBcHBJZGVudGlmaWVyKGNvbm5lY3Rpb24uaG9zdEFwcENvZGVT
aWduaW5nSWRlbnRpZmllcigpKTsKKworICAgIExTRW51bWVyYXRvcjxMU0FwcGxpY2F0aW9uUmVj
b3JkICo+ICplbnVtZXJhdG9yID0gW0xTQXBwbGljYXRpb25SZWNvcmQgZW51bWVyYXRvcldpdGhP
cHRpb25zOkxTQXBwbGljYXRpb25FbnVtZXJhdGlvbk9wdGlvbnNFbnVtZXJhdGVQbGFjZWhvbGRl
cnNdOworICAgIGZvciAoTFNBcHBsaWNhdGlvblJlY29yZCAqcmVjb3JkID0gW2VudW1lcmF0b3Ig
bmV4dE9iamVjdF07IHJlY29yZDsgcmVjb3JkID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pIHsK
KyAgICAgICAgaWYgKCFbcmVjb3JkLm1hbmFnZW1lbnREb21haW4gaXNFcXVhbFRvU3RyaW5nOnB1
c2hCdW5kbGVBcHBNYW5hZ2VtZW50RG9tYWluXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGlmICghW3JlY29yZC5idW5kbGVJZGVudGlmaWVyIGhhc1ByZWZpeDpidW5kbGVJZGVu
dGlmaWVyUHJlZml4LmdldCgpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlIHN0b3JlIHRoZSBvcmlnaW4gc3RyaW5nIGluIHRoZSBidW5kbGUg
aWRlbnRpZmllciBiYXNlNjQgZW5jb2RlZAorICAgICAgICAvLyBPbmNlIHdlIHN0b3JlIGl0IGlu
IHRoZSBidW5kbGUgaXRzZWxmLCB3ZSdsbCBoYXNoIHRoZSBvcmlnaW4gc3RyaW5nIGluIHRoZSBi
dW5kbGUgaWRlbnRpZmllciBhbmQgZXh0cmFjdCBpdCBmcm9tIHRoZSBidW5kbGUKKworICAgICAg
ICBOU0FycmF5ICpjb21wb25lbnRzID0gW3JlY29yZC5idW5kbGVJZGVudGlmaWVyIGNvbXBvbmVu
dHNTZXBhcmF0ZWRCeVN0cmluZzpidW5kbGVJZGVudGlmaWVyUHJlZml4LmdldCgpXTsKKyAgICAg
ICAgQVNTRVJUKGNvbXBvbmVudHMuY291bnQgPj0gMik7CisKKyAgICAgICAgYXV0byBvcmlnaW5T
dHJpbmcgPSBvcmlnaW5TdHJpbmdGcm9tRW5jb2RlZEJ1bmRsZUlkZW50aWZpZXIoY29tcG9uZW50
c1sxXSk7CisgICAgICAgIGlmIChvcmlnaW5TdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQob3JpZ2luU3RyaW5nKTsKKyAgICB9
CisgICAgCisgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0cyk7Cit9CisKK2NvbnN0IFN0cmlu
ZyYgSUNBcHBCdW5kbGU6OmdldEJ1bmRsZUlkZW50aWZpZXIoKQoreworICAgIGlmIChtX2J1bmRs
ZUlkZW50aWZpZXIuaXNFbXB0eSgpICYmIG1fY2xpZW50Q29ubmVjdGlvbikKKyAgICAgICAgbV9i
dW5kbGVJZGVudGlmaWVyID0gYnVuZGxlTmFtZUZvck9yaWdpblN0cmluZ0FuZEhvc3RBcHBJZGVu
dGlmaWVyKG1fb3JpZ2luU3RyaW5nLCBtX2NsaWVudENvbm5lY3Rpb24tPmhvc3RBcHBDb2RlU2ln
bmluZ0lkZW50aWZpZXIoKSk7CisKKyAgICByZXR1cm4gbV9idW5kbGVJZGVudGlmaWVyOworfQor
Cit2b2lkIElDQXBwQnVuZGxlOjpjaGVja0ZvckV4aXN0aW5nQnVuZGxlKCkKK3sKKyAgICBOU0Vy
cm9yICplcnJvciA9IG5pbDsKKyAgICBMU0FwcGxpY2F0aW9uUmVjb3JkICphcHBSZWNvcmQgPSBb
W0xTQXBwbGljYXRpb25SZWNvcmQgYWxsb2NdIGluaXRXaXRoQnVuZGxlSWRlbnRpZmllcjooTlNT
dHJpbmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCkgYWxsb3dQbGFjZWhvbGRlcjpZRVMgZXJyb3I6
JmVycm9yXTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENoZWNr
Rm9yRXhpc3RpbmdCdW5kbGUoKnRoaXMsIGFwcFJlY29yZCA/IFB1c2hBcHBCdW5kbGVFeGlzdHM6
OlllcyA6IFB1c2hBcHBCdW5kbGVFeGlzdHM6Ok5vKTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6
ZGVsZXRlRXhpc3RpbmdCdW5kbGUoKQoreworICAgIFtJWEFwcEluc3RhbGxDb29yZGluYXRvciB1
bmluc3RhbGxBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopZ2V0QnVuZGxlSWRlbnRpZmllcigp
IHJlcXVlc3RVc2VyQ29uZmlybWF0aW9uOk5PIGNvbXBsZXRpb246W3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBSZWYgeyAqdGhpcyB9XSAoTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgY2FsbE9uTWFp
blJ1bkxvb3AoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBlcnJvciA9IFJl
dGFpblB0cjxOU0Vycm9yPihlcnJvcildIHsKKyAgICAgICAgICAgIGRpZERlbGV0ZUV4aXN0aW5n
QnVuZGxlV2l0aEVycm9yKGVycm9yLmdldCgpKTsKKyAgICAgICAgfSk7CisgICAgfV07Cit9CisK
K3ZvaWQgSUNBcHBCdW5kbGU6OmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKE5TRXJy
b3IgKmVycm9yKQoreworICAgIGlmIChlcnJvcikKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNz
YWdlKG1ha2VTdHJpbmcoIkVycm9yIGRlbGV0aW5nIGV4aXN0aW5nIGJ1bmRsZTogIiwgU3RyaW5n
KFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1f
Y2xpZW50LT5kaWREZWxldGVFeGlzdGluZ0J1bmRsZVdpdGhFcnJvcigqdGhpcywgZXJyb3IpOwor
fQorCit2b2lkIElDQXBwQnVuZGxlOjpzdG9wKCkKK3sKKyAgICBtX2FwcEluc3RhbGxDb29yZGlu
YXRvci5nZXQoKS5vYnNlcnZlciA9IG5pbDsKKyAgICBtX2FwcEluc3RhbGxDb29yZGluYXRvciA9
IG5pbDsKKyAgICBtX2FwcEluc3RhbGxPYnNlcnZlciA9IG5pbDsKK30KKwordm9pZCBJQ0FwcEJ1
bmRsZTo6Y3JlYXRlQnVuZGxlKCkKK3sKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGJ1bmRsZUlk
ZW50aWZpZXIgPSAoTlNTdHJpbmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCk7CisKKyAgICAvLyBD
YW5jZWwgYW55IHByZXZpb3VzIGluc3RhbGwgY29vcmRpbmF0b3IgdGhhdCBtaWdodCd2ZSBiZWVu
IGxlZnQgaGFuZ2luZyBpbiBhIHBhcnRpYWxseSBmaW5pc2hlZCBzdGF0ZQorICAgIE5TRXJyb3Ig
KmVycm9yID0gbmlsOworICAgIFtJWEFwcEluc3RhbGxDb29yZGluYXRvciBjYW5jZWxDb29yZGlu
YXRvckZvckFwcFdpdGhCdW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgpIHdpdGhSZWFzb246
W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiV0tFcnJvckRvbWFpbiIgY29kZToxIHVzZXJJbmZv
Om5pbF0gY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZXJyb3I6JmVycm9yXTsK
KworICAgIEJPT0wgY3JlYXRlZCA9IE5POworICAgIGVycm9yID0gbmlsOworICAgIG1fYXBwSW5z
dGFsbENvb3JkaW5hdG9yID0gW0lYUmVzdG9yaW5nRGVtb3RlZEFwcEluc3RhbGxDb29yZGluYXRv
ciBjb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgpIHdp
dGhDbGllbnRJRDpJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yIGNyZWF0ZUlmTm90RXhpc3Rp
bmc6WUVTIGNyZWF0ZWQ6JmNyZWF0ZWQgZXJyb3I6JmVycm9yXTsKKworICAgIGlmICghbV9hcHBJ
bnN0YWxsQ29vcmRpbmF0b3IgfHwgZXJyb3IpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNz
YWdlKG1ha2VTdHJpbmcoIlVuYWJsZSB0byBjcmVhdGUgaW5zdGFsbCBjb29yZGluYXRpb3IgZm9y
IGFwcCBidW5kbGUgaWRlbnRpZmllciAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQoKSkp
KTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFjcmVhdGVkKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVz
c2FnZShtYWtlU3RyaW5nKCJFeGlzdGluZyBpbnN0YWxsIGNvb3JkaW5hdGlvciBmb3IgYXBwIGJ1
bmRsZSBpZGVudGlmaWVyICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiB3YXMg
Zm91bmQuIFRoaXMgaXMgdW5leHBlY3RlZC4iKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFp
bGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYXBwSW5zdGFsbE9i
c2VydmVyID0gYWRvcHROUyhbW1dlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyIGFsbG9j
XSBpbml0V2l0aElDQXBwQnVuZGxlOip0aGlzXSk7CisgICAgbV9hcHBJbnN0YWxsQ29vcmRpbmF0
b3IuZ2V0KCkub2JzZXJ2ZXIgPSBtX2FwcEluc3RhbGxPYnNlcnZlci5nZXQoKTsKKworICAgIFJl
dGFpblB0cjxJWFBsYWNlaG9sZGVyPiBwbGFjZWhvbGRlciA9IGFkb3B0TlMoW1tJWFBsYWNlaG9s
ZGVyIGFsbG9jXSBpbml0QXBwUGxhY2Vob2xkZXJXaXRoQnVuZGxlTmFtZTooTlNTdHJpbmcgKilt
X29yaWdpblN0cmluZyBidW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgpIGluc3RhbGxUeXBl
OkxTSW5zdGFsbFR5cGVJbnRlbnRpb25hbERvd25ncmFkZSBjbGllbnQ6SVhDbGllbnRJZGVudGlm
aWVyQXBwbGllZEZvcl0pOworCisgICAgUmV0YWluUHRyPElYUGxhY2Vob2xkZXJBdHRyaWJ1dGVz
PiBwbGFjZWhvbGRlckF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtJWFBsYWNlaG9sZGVyQXR0cmlidXRl
cyBuZXddKTsKKyAgICBwbGFjZWhvbGRlckF0dHJpYnV0ZXMuZ2V0KCkubGF1bmNoUHJvaGliaXRl
ZCA9IFlFUzsKKworICAgIFtwbGFjZWhvbGRlciBzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZXM6cGxh
Y2Vob2xkZXJBdHRyaWJ1dGVzLmdldCgpIGVycm9yOiZlcnJvcl07CisgICAgaWYgKGVycm9yKSB7
CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJVbmFibGUgdG8gc2V0
IHBsYWNlaG9sZGVyIGF0dHJpYnV0ZXMgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRlbnRp
Zmllci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRpb25dKSkpOwor
ICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBOU0RpY3Rpb25hcnkgKmVudGl0bGVtZW50c0RpY3Rpb25hcnkgPSBAeworICAg
ICAgICBAImNvbS5hcHBsZS5wcml2YXRlLnVzZXJub3RpZmljYXRpb25zLmJ1bmRsZS1pZGVudGlm
aWVycyI6IGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCksCisgICAgICAgIEAiY29tLmFwcGxlLnByaXZh
dGUudXNlcm5vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9uLXNpbXVsYXRvciI6IEBZRVMsCisgICAg
ICAgIEAiY29tLmFwcGxlLmRldmVsb3Blci5hcHAtbWFuYWdlbWVudC1kb21haW4iOiBwdXNoQnVu
ZGxlQXBwTWFuYWdlbWVudERvbWFpbgorICAgIH07CisgICAgUmV0YWluUHRyPElYUHJvbWlzZWRJ
bk1lbW9yeURpY3Rpb25hcnk+IGVudGl0bGVtZW50c1Byb21pc2UgPSBhZG9wdE5TKFtbSVhQcm9t
aXNlZEluTWVtb3J5RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhOYW1lOltOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiRW50aXRsZW1lbnRzIFByb21pc2UgZm9yICVAIiwgYnVuZGxlSWRlbnRp
Zmllci5nZXQoKV0gY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZGljdGlvbmFy
eTplbnRpdGxlbWVudHNEaWN0aW9uYXJ5XSk7CisKKyAgICBpZiAoIWVudGl0bGVtZW50c1Byb21p
c2UpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIlVuYWJsZSB0
byBjcmVhdGUgcGxhY2Vob2xkZXIgZW50aXRsZW1lbnRzIHByb21pc2UgZm9yIGJ1bmRsZSAiLCBT
dHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQoKSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25G
YWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXJyb3IgPSBuaWw7
CisgICAgaWYgKCFbcGxhY2Vob2xkZXIgc2V0RW50aXRsZW1lbnRzUHJvbWlzZTplbnRpdGxlbWVu
dHNQcm9taXNlLmdldCgpIGVycm9yOiZlcnJvcl0gfHwgZXJyb3IpIHsKKyAgICAgICAgYnJvYWRj
YXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBzZXQgcGxhY2Vob2xkZXIgZW50
aXRsZW1lbnRzIHByb21pc2UgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmllci5n
ZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRpb25dKSkpOworICAgICAg
ICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBCT09MIHJlc3VsdCA9IFtwbGFjZWhvbGRlciBzZXRDb25maWd1cmF0aW9uQ29tcGxldGVX
aXRoRXJyb3I6JmVycm9yXTsKKyAgICBpZiAoIXJlc3VsdCB8fCBlcnJvcikgeworICAgICAgICBi
cm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCBwbGFjZWhvbGRl
ciBlbnRpdGxlbWVudHMgcHJvbWlzZSBjb21wbGV0ZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5k
bGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlv
bl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFttX2FwcEluc3RhbGxDb29yZGluYXRvciBzZXRQbGFjZWhvbGRl
clByb21pc2U6cGxhY2Vob2xkZXIuZ2V0KCkgZXJyb3I6JmVycm9yXTsKKyAgICBpZiAoZXJyb3Ip
IHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBz
ZXQgcGxhY2Vob2xkZXIgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlm
aWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7Cisg
ICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJldGFpblB0cjxJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXI+IGRhdGFQcm9t
aXNlID0gYWRvcHROUyhbW0lYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciBhbGxvY10gaW5pdFdp
dGhOYW1lOkAiRW1wdHkgdXNlciBkYXRhIHByb21pc2UiIGNsaWVudDpJWENsaWVudElkZW50aWZp
ZXJBcHBsaWVkRm9yIGRpc2tTcGFjZU5lZWRlZDowXSk7CisgICAgZGF0YVByb21pc2UuZ2V0KCku
cGVyY2VudENvbXBsZXRlID0gMS4wOworICAgIGRhdGFQcm9taXNlLmdldCgpLmNvbXBsZXRlID0g
WUVTOworCisgICAgW21fYXBwSW5zdGFsbENvb3JkaW5hdG9yIHNldFVzZXJEYXRhUHJvbWlzZTpk
YXRhUHJvbWlzZS5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgIGlmIChlcnJvcikgeworICAgICAg
ICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCB1c2VyIGRh
dGEgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwg
IiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRs
ZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9p
ZCBJQ0FwcEJ1bmRsZTo6YnVuZGxlQ3JlYXRpb25TdWNjZWVkZWQoKQoreworICAgIGlmIChtX2Ns
aWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENyZWF0ZUFwcEJ1bmRsZSgqdGhpcywgUHVzaEFw
cEJ1bmRsZUNyZWF0aW9uUmVzdWx0OjpTdWNjZXNzKTsKKworfQorCit2b2lkIElDQXBwQnVuZGxl
OjpidW5kbGVDcmVhdGlvbkZhaWxlZChOU0Vycm9yICplcnJvcikKK3sKKyAgICBpZiAobV9jbGll
bnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDcmVhdGVBcHBCdW5kbGUoKnRoaXMsIFB1c2hBcHBC
dW5kbGVDcmVhdGlvblJlc3VsdDo6RmFpbHVyZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYlB1
c2hECisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSW5zdGFsbENvb3JkaW5hdGlvblNQSS5o
IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMDZkNzBmODFmNDAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0luc3RhbGxDb29yZGluYXRpb25TUEku
aApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisjaWYg
VVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworI2ltcG9ydCA8SW5zdGFsbENvb3JkaW5hdGlvbi9J
WEFwcEluc3RhbGxDb29yZGluYXRvci5oPgorI2ltcG9ydCA8SW5zdGFsbENvb3JkaW5hdGlvbi9J
bnN0YWxsQ29vcmRpbmF0aW9uLmg+CisKKyNlbHNlCisKKyNpbmNsdWRlICJMYXVuY2hTZXJ2aWNl
c1NQSS5oIgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCit0eXBlZGVmIGVudW0gOiBOU1VJ
bnRlZ2VyIHsKK30gSVhDb29yZGluYXRvclByb2dyZXNzUGhhc2U7CisKK3R5cGVkZWYgZW51bSA6
IE5TVUludGVnZXIgeworICAgIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yUGxhY2Vob2xkZXJQcm9t
aXNlID0gMSwKK30gSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JQcm9taXNlSWRlbnRpZmllcjsKKwor
dHlwZWRlZiBlbnVtIDogTlNVSW50ZWdlciB7CisgICAgSVhDbGllbnRJZGVudGlmaWVyQXBwbGll
ZEZvciA9IDE5LAorfSBJWENsaWVudElkZW50aWZpZXI7CisKK0BjbGFzcyBMU0FwcGxpY2F0aW9u
UmVjb3JkOworQGNsYXNzIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yOworQGNsYXNzIElYUGxhY2Vo
b2xkZXI7CitAY2xhc3MgSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyOworCitAcHJvdG9jb2wg
SVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0g
KHZvaWQpY29vcmRpbmF0b3JEaWRSZWdpc3RlckZvck9ic2VydmF0aW9uOihub25udWxsIElYQXBw
SW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7CistICh2b2lkKWNvb3JkaW5hdG9yU2hv
dWxkUHJpb3JpdGl6ZToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5h
dG9yOworLSAodm9pZCljb29yZGluYXRvclNob3VsZFJlc3VtZToobm9ubnVsbCBJWEFwcEluc3Rh
bGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29yZGluYXRvclNob3VsZFBh
dXNlOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7CistICh2
b2lkKWNvb3JkaW5hdG9yOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRp
bmF0b3IgZGlkVXBkYXRlUHJvZ3Jlc3M6KGRvdWJsZSlwZXJjZW50Q29tcGxldGUgZm9yUGhhc2U6
KElYQ29vcmRpbmF0b3JQcm9ncmVzc1BoYXNlKXBoYXNlIG92ZXJhbGxQcm9ncmVzczooZG91Ymxl
KW92ZXJhbGxQcm9ncmVzczsKKy0gKHZvaWQpY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3Nm
dWxseToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFw
cGxpY2F0aW9uUmVjb3JkOihudWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopYXBwUmVjb3Jk
OworLSAodm9pZCljb29yZGluYXRvckRpZEluc3RhbGxQbGFjZWhvbGRlcjoobm9ubnVsbCBJWEFw
cEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFwcGxpY2F0aW9uUmVjb3JkOihu
dWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopcGxhY2Vob2xkZXJSZWNvcmQ7CistICh2b2lk
KWNvb3JkaW5hdG9yOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0
b3IgY2FuY2VsZWRXaXRoUmVhc29uOihub25udWxsIE5TRXJyb3IgKiljYW5jZWxSZWFzb24gY2xp
ZW50OihJWENsaWVudElkZW50aWZpZXIpY2xpZW50OworQGVuZAorCit0eXBlZGVmIHZvaWQgKF5J
WEFwcEluc3RhbGxDb29yZGluYXRvckVycm9yQ29tcGxldGlvbikoTlNFcnJvciAqIF9OdWxsYWJs
ZSBlcnJvcik7CisKK0BpbnRlcmZhY2UgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IKKysgKHZvaWQp
dW5pbnN0YWxsQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlEIHJlcXVlc3RVc2Vy
Q29uZmlybWF0aW9uOihCT09MKXJlcXVlc3RVc2VyQ29uZmlybWF0aW9uIGNvbXBsZXRpb246KElY
QXBwSW5zdGFsbENvb3JkaW5hdG9yRXJyb3JDb21wbGV0aW9uKWNvbXBsZXRpb247CisrIChCT09M
KWNhbmNlbENvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlE
IHdpdGhSZWFzb246KE5TRXJyb3IgKiljYW5jZWxSZWFzb24gY2xpZW50OihJWENsaWVudElkZW50
aWZpZXIpY2xpZW50IGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKKysgKGluc3RhbmNldHlw
ZSljb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcgKilidW5kbGVJRCB3aXRo
Q2xpZW50SUQ6KElYQ2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBjcmVhdGVJZk5vdEV4aXN0aW5n
OihCT09MKWNyZWF0ZSBjcmVhdGVkOihCT09MICopb3V0X2NyZWF0ZWQgZXJyb3I6KE5TRXJyb3Ig
Kiopb3V0X2Vycm9yOworQHByb3BlcnR5IChub25hdG9taWMsIG51bGxhYmxlLCB3ZWFrKSBpZDxJ
WEFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyPiBvYnNlcnZlcjsKKy0gKEJPT0wpc2V0UGxh
Y2Vob2xkZXJQcm9taXNlOihJWFBsYWNlaG9sZGVyICopcGxhY2Vob2xkZXJQcm9taXNlIGVycm9y
OihOU0Vycm9yICoqKW91dF9lcnJvcjsKKy0gKEJPT0wpc2V0VXNlckRhdGFQcm9taXNlOihJWFBy
b21pc2VkT3V0T2ZCYW5kVHJhbnNmZXIgKil1c2VyRGF0YSBlcnJvcjooTlNFcnJvciAqKilvdXRf
ZXJyb3I7CitAZW5kCisKK0BpbnRlcmZhY2UgSVhSZXN0b3JpbmdEZW1vdGVkQXBwSW5zdGFsbENv
b3JkaW5hdG9yIDogSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IKK0BlbmQKKworQGludGVyZmFjZSBJ
WE93bmVkRGF0YVByb21pc2UgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIElYUHJvbWlz
ZWRJbk1lbW9yeURpY3Rpb25hcnkgOiBJWE93bmVkRGF0YVByb21pc2UKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmll
cilpZGVudGl0eSBkaWN0aW9uYXJ5OihOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OworQGVuZAor
CitAaW50ZXJmYWNlIElYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzIDogTlNPYmplY3QKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBCT09MIGxhdW5jaFByb2hpYml0ZWQ7CitAZW5kCisKK0BpbnRlcmZhY2Ug
SVhQbGFjZWhvbGRlciA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdEFwcFBsYWNlaG9s
ZGVyV2l0aEJ1bmRsZU5hbWU6KE5TU3RyaW5nICopbmFtZSBidW5kbGVJRDooTlNTdHJpbmcgKili
dW5kbGVJRCBpbnN0YWxsVHlwZTooTFNJbnN0YWxsVHlwZSlpbnN0YWxsVHlwZSBjbGllbnQ6KElY
Q2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworLSAo
Qk9PTClzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZXM6KG5vbm51bGwgSVhQbGFjZWhvbGRlckF0dHJp
YnV0ZXMgKilhdHRyaWJ1dGVzIGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKKy0gKEJPT0wp
c2V0RW50aXRsZW1lbnRzUHJvbWlzZToobm9ubnVsbCBJWE93bmVkRGF0YVByb21pc2UgKillbnRp
dGxlbWVudHMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgX051bGxhYmxlICogX051
bGxhYmxlKW91dF9lcnJvcjsKKy0gKEJPT0wpc2V0Q29uZmlndXJhdGlvbkNvbXBsZXRlV2l0aEVy
cm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKK0BlbmQKKworQGludGVyZmFjZSBJWE9wYXF1ZURh
dGFQcm9taXNlIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBJWFByb21pc2VkT3V0T2ZC
YW5kVHJhbnNmZXIgOiBJWE9wYXF1ZURhdGFQcm9taXNlCitAcHJvcGVydHkgKG5vbmF0b21pYykg
Qk9PTCBjb21wbGV0ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBkb3VibGUgcGVyY2VudENvbXBs
ZXRlOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGNsaWVu
dDooSVhDbGllbnRJZGVudGlmaWVyKWlkZW50aXR5IGRpc2tTcGFjZU5lZWRlZDoodWludDY0X3Qp
dG90YWxCeXRlczsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBV
U0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaCBiL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjhlZWUxMDhkZGEwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaApAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RL
KQorCisvLyBUaGlzIHNwYWNlIGludGVudGlvbmFsbHkgbGVmdCBibGFuaworCisjZWxzZQorCitO
U19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCit0eXBlZGVmIE5TX0VOVU0oTlNVSW50ZWdlciwgTFNJ
bnN0YWxsVHlwZSkgeworICAgIExTSW5zdGFsbFR5cGVJbnRlbnRpb25hbERvd25ncmFkZSA9IDgK
K307CisKK0BpbnRlcmZhY2UgTFNSZWNvcmQgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNl
IExTQnVuZGxlUmVjb3JkIDogTFNSZWNvcmQKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIG51bGxhYmxl
KSBOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllcjsKK0BlbmQKKworQGludGVyZmFjZSBMU0FwcGxp
Y2F0aW9uUmVjb3JkIDogTFNCdW5kbGVSZWNvcmQKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wg
cGxhY2Vob2xkZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1N0cmluZyAqbWFuYWdlbWVudERv
bWFpbjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQnVuZGxlSWRlbnRpZmllcjooTlNTdHJp
bmcgKilidW5kbGVJZGVudGlmaWVyIGFsbG93UGxhY2Vob2xkZXI6KEJPT0wpYWxsb3dQbGFjZWhv
bGRlciBlcnJvcjooTlNFcnJvciAqKilvdXRFcnJvcjsKK0BlbmQKKworQGludGVyZmFjZSBMU0Vu
dW1lcmF0b3I8X19jb3ZhcmlhbnQgT2JqZWN0VHlwZT4gOiBOU0VudW1lcmF0b3I8T2JqZWN0VHlw
ZT4KK0BlbmQKKwordHlwZWRlZiBOU19PUFRJT05TKHVpbnQ2NF90LCBMU0FwcGxpY2F0aW9uRW51
bWVyYXRpb25PcHRpb25zKSB7CisgICAgTFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9uc0Vu
dW1lcmF0ZVBsYWNlaG9sZGVycyA9ICgxIDw8IDYpCit9OworCitAaW50ZXJmYWNlIExTQXBwbGlj
YXRpb25SZWNvcmQgKEVudW1lcmF0aW9uKQorKyAoTFNFbnVtZXJhdG9yPExTQXBwbGljYXRpb25S
ZWNvcmQgKj4gKillbnVtZXJhdG9yV2l0aE9wdGlvbnM6KExTQXBwbGljYXRpb25FbnVtZXJhdGlv
bk9wdGlvbnMpb3B0aW9uczsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRp
ZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oIGIvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmgKaW5kZXggOGE2ZDU3Y2M2ZjViLi5lOTg1
ZTMyMTAxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRs
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogQGNsYXNzIE5TRXJyb3I7
CiAKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVB
cHBCdW5kbGUoUHVzaEFwcEJ1bmRsZSYsIFB1c2hBcHBCdW5kbGVDcmVhdGlvblJlc3VsdCkgPSAw
OwogfTsKIAotY2xhc3MgUHVzaEFwcEJ1bmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFB1c2hBcHBC
dW5kbGU+IHsKK2NsYXNzIFB1c2hBcHBCdW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8UHVzaEFwcEJ1bmRsZT4gewogcHVibGljOgogICAgIHZpcnR1YWwgflB1c2hBcHBCdW5kbGUo
KTsKICAgICB2b2lkIGRldGFjaEZyb21DbGllbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2Vi
UHVzaERhZW1vbi5tbQppbmRleCAzYjc4ZjI5MGMyN2UuLjAyZGJjZDc4ZDUyYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9y
dCAiRGFlbW9uRW5jb2Rlci5oIgogI2ltcG9ydCAiRGFlbW9uVXRpbGl0aWVzLmgiCiAjaW1wb3J0
ICJIYW5kbGVNZXNzYWdlLmgiCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgogI2ltcG9ydCAiTW9j
a0FwcEJ1bmRsZVJlZ2lzdHJ5LmgiCiAKICNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5o
PgpAQCAtMjcwLDggKzI3MSwxMSBAQCB2b2lkIERhZW1vbjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5k
Tm90aWZpY2F0aW9uUGVybWlzc2lvbnMoQ2xpZW50Q29ubmVjdGlvbiogY29ubgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHBsYXRmb3JtLXNw
ZWNpZmljIGltcGxlbWVudGF0aW9ucyBmb3IgcmVhbCB3b3JsZCBidW5kbGVzIG9uY2UgaW1wbGVt
ZW50ZWQuCi0gICAgcmVwbHlTZW5kZXIoeyB9KTsKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElO
QVRJT05fQlVORExFUykKKyAgICBJQ0FwcEJ1bmRsZTo6Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRp
b25zKCpjb25uZWN0aW9uLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisjZWxzZQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKIH0KIAogdm9pZCBEYWVtb246OmRlbGV0
ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oQ2xpZW50Q29ubmVjdGlvbiogY29ubmVj
dGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgU3RyaW5nJik+JiYgcmVwbHlTZW5kZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggZDg3MTJiMDQw
NTE2Li45YzQxOWQwNTk1OTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0KQEAgLTE1Nyw2ICsxNTcsMzkgQEAgc3Rh
dGljIHZvaWQgY2xlYW5VcFRlc3RXZWJQdXNoRChOU1VSTCAqdGVtcERpcikKICAgICBFWFBFQ1Rf
TlVMTChlcnJvcik7CiB9CiAKK3N0YXRpYyB2b2lkIGRlbGV0ZUFsbFJlZ2lzdHJhdGlvbnNGb3JE
YXRhU3RvcmUoV0tXZWJzaXRlRGF0YVN0b3JlICpkYXRhU3RvcmUpCit7CisgICAgX19ibG9jayBi
b29sIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSBmYWxzZTsKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxO
U1NldDxXS1NlY3VyaXR5T3JpZ2luICo+PiBvcmlnaW5TZXQ7CisgICAgW2RhdGFTdG9yZSBfZ2V0
T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lvbnM6XihOU1NldDxXS1NlY3Vy
aXR5T3JpZ2luICo+ICpvcmlnaW5zKSB7CisgICAgICAgIG9yaWdpblNldCA9IG9yaWdpbnM7Cisg
ICAgICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmb3JpZ2luT3BlcmF0aW9uRG9uZSk7CisKKyAgICBpZiAoIVtvcmln
aW5TZXQgY291bnRdKQorICAgICAgICByZXR1cm47CisKKyAgICBfX2Jsb2NrIHNpemVfdCBkZWxl
dGVkT3JpZ2lucyA9IDA7CisgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAgIGZv
ciAoV0tTZWN1cml0eU9yaWdpbiAqb3JpZ2luIGluIG9yaWdpblNldC5nZXQoKSkgeworICAgICAg
ICBbZGF0YVN0b3JlIF9kZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uOm9yaWdp
biBjb21wbGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBFWFBF
Q1RfRkFMU0UoISFlcnJvcik7CisgICAgICAgICAgICBpZiAoKytkZWxldGVkT3JpZ2lucyA9PSBb
b3JpZ2luU2V0IGNvdW50XSkKKyAgICAgICAgICAgICAgICBvcmlnaW5PcGVyYXRpb25Eb25lID0g
dHJ1ZTsKKyAgICAgICAgfV07CisgICAgfQorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
b3JpZ2luT3BlcmF0aW9uRG9uZSk7CisKKyAgICBvcmlnaW5PcGVyYXRpb25Eb25lID0gZmFsc2U7
CisgICAgW2RhdGFTdG9yZSBfZ2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlz
c2lvbnM6XihOU1NldDxXS1NlY3VyaXR5T3JpZ2luICo+ICpvcmlnaW5zKSB7CisgICAgICAgIEVY
UEVDVF9FUShbb3JpZ2lucyBjb3VudF0sIDB1KTsKKyAgICAgICAgb3JpZ2luT3BlcmF0aW9uRG9u
ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZvcmlnaW5P
cGVyYXRpb25Eb25lKTsKKworfQorCiAvLyBGSVhNRTogUmUtZW5hYmxlIHRoaXMgdGVzdCBmb3Ig
TW9udGVyZXkrIG9uY2Ugd2Via2l0Lm9yZy8yMzI4NTcgaXMgcmVzb2x2ZWQuCiAjaWYgUExBVEZP
Uk0oTUFDKSAmJiAoX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDExMDAwMCB8fCBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEyMDAwMCkKIFRFU1QoV2ViUHVzaEQs
IERJU0FCTEVEX0Jhc2ljQ29tbXVuaWNhdGlvbikKQEAgLTMzMCw2ICszNjMsNjUgQEAgVEVTVChX
ZWJQdXNoRCwgUGVybWlzc2lvbk1hbmFnZW1lbnQpCiAgICAgY2xlYW5VcFRlc3RXZWJQdXNoRCh0
ZW1wRGlyZWN0b3J5KTsKIH0KIAorI2lmIFBMQVRGT1JNKElPUykKK1RFU1QoV2ViUHVzaEQsIElu
c3RhbGxDb29yZGluYXRpb25CdW5kbGVzKQoreworICAgIE5TVVJMICp0ZW1wRGlyZWN0b3J5ID0g
c2V0VXBUZXN0V2ViUHVzaEQoKTsKKworICAgIGF1dG8gZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10pOworICAgIGRh
dGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaE1hY2hTZXJ2aWNlTmFtZSA9IEAib3Jn
LndlYmtpdC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIjsKKyAgICBhdXRvIGRhdGFTdG9yZSA9
IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRp
b246ZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOworCisgICAgZGVsZXRlQWxsUmVnaXN0
cmF0aW9uc0ZvckRhdGFTdG9yZShkYXRhU3RvcmUuZ2V0KCkpOworCisgICAgYXV0byBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
KyAgICBjb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBkYXRhU3RvcmUuZ2V0
KCk7CisgICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlv
bnNFbmFibGVkOllFU107CisgICAgZm9yIChfV0tFeHBlcmltZW50YWxGZWF0dXJlICpmZWF0dXJl
IGluIFtXS1ByZWZlcmVuY2VzIF9leHBlcmltZW50YWxGZWF0dXJlc10pIHsKKyAgICAgICAgaWYg
KFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJCdWlsdEluTm90aWZpY2F0aW9uc0VuYWJs
ZWQiXSkKKyAgICAgICAgICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJs
ZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAgfQorCisgICAgYXV0byBoYW5kbGVyID0g
YWRvcHROUyhbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZp
Z3VyYXRpb24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpA
InRlc3RpbmciXTsKKworICAgIFtoYW5kbGVyIHNldFN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXI6
XihXS1dlYlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIGF1dG8g
cmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFz
ay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
OjAgdGV4dEVuY29kaW5nTmFtZTpuaWxdKTsKKyAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3Bv
bnNlOnJlc3BvbnNlLmdldCgpXTsKKyAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0
YSBkYXRhV2l0aEJ5dGVzOm1haW5CeXRlcyBsZW5ndGg6c3RybGVuKG1haW5CeXRlcyldXTsKKyAg
ICAgICAgW3Rhc2sgZGlkRmluaXNoXTsKKyAgICB9XTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1
dG8gdWlEZWxlZ2F0ZSA9IGFkb3B0TlMoW1tOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOnVpRGVsZWdhdGUuZ2V0
KCldOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0
aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Rpbmc6Ly9tYWluL2luZGV4Lmh0bWwiXV1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmYWxlcnRSZWNlaXZlZCk7CisKKyAgICBh
bGVydFJlY2VpdmVkID0gZmFsc2U7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Rpbmc6Ly9zZWNv
bmRhcnkvaW5kZXguaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZhbGVy
dFJlY2VpdmVkKTsKKworICAgIHN0YXRpYyBib29sIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgUmV0YWluUHRyPE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4+IG9yaWdp
bnM7CisgICAgW2RhdGFTdG9yZSBfZ2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVy
bWlzc2lvbnM6XihOU1NldDxXS1NlY3VyaXR5T3JpZ2luICo+ICpyYXdPcmlnaW5zKSB7CisgICAg
ICAgIEVYUEVDVF9FUShbcmF3T3JpZ2lucyBjb3VudF0sIDJ1KTsKKyAgICAgICAgb3JpZ2lucyA9
IHJhd09yaWdpbnM7CisgICAgICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmb3JpZ2luT3BlcmF0aW9uRG9uZSk7CisK
KyAgICBmb3IgKFdLU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiBpbiBvcmlnaW5zLmdldCgpKSB7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKFtvcmlnaW4ucHJvdG9jb2wgaXNFcXVhbFRvU3RyaW5nOkAidGVz
dGluZyJdKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW29yaWdpbi5ob3N0IGlzRXF1YWxUb1N0cmlu
ZzpAIm1haW4iXSB8fCBbb3JpZ2luLmhvc3QgaXNFcXVhbFRvU3RyaW5nOkAic2Vjb25kYXJ5Il0p
OworICAgIH0KKworICAgIGRlbGV0ZUFsbFJlZ2lzdHJhdGlvbnNGb3JEYXRhU3RvcmUoZGF0YVN0
b3JlLmdldCgpKTsKKyAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3RvcnkpOworfQor
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQog
CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCg==
</data>
<flag name="commit-queue"
          id="470878"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445648</attachid>
            <date>2021-12-01 17:51:15 -0800</date>
            <delta_ts>2021-12-01 18:02:06 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>48983</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzExZmJlMDhmMDczLi4yZjE1Yzk0Yjc1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlQ29j
b2EuaDoKKwogMjAyMS0xMi0wMSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIGEgcnVudGltZSBmbGFnIHRvIGVuYWJsZSBDU1MgVHJhbnNmb3Jt
cyBMZXZlbCAyIHNwZWMgY29tcGxpYW50IGJlaGF2aW9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZUNvY29hLmgKaW5kZXggYWU5MmJlZTk4NjA0Li44MGZjODAzMzE0ZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUVuYWJsZUNvY29hLmgKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICNkZWZpbmUgRU5BQkxF
X0JVSUxUX0lOX05PVElGSUNBVElPTlMgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVf
SU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykgJiYgUExBVEZPUk0oSU9TKQorI2RlZmluZSBF
TkFCTEVfSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUyAxCisjZW5kaWYKKwogI2lmICFkZWZp
bmVkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpCiAjZGVmaW5lIEVOQUJMRV9DQUNIRV9QQVJU
SVRJT05JTkcgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUzNGMxY2I1NGY5Li42Y2VmNmZkMzlh
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0xMi0wMSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFuIEluc3RhbGxDb29yZGluYXRp
b24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZSB0aGlzICJ0b0hleFN0cmluZyIgaW1wbGVtZW50YXRpb24gdG8gQ3J5
cHRvRGlnZXN0IGl0c2VsZi4KKworICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmNvbXB1dGVIYXNo
Rm9yRmlsZU5hbWUpOgorCiAyMDIxLTEyLTAxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXVzZSBuYXZpZ2F0aW9uIHByZWxvYWQgaWYgc2VydmljZSB3b3Jr
ZXIgaXMgZmV0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbmF2aWdhdGlvbiByZXF1ZXN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFM
L0NoYW5nZUxvZwppbmRleCBhYTQ0NzQ4YzU2NmMuLjhkZDFjNmEwNDViZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1
c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMzcxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEV4cG9zZSAidG9IZXhTdHJpbmciIHNvIHdlIGNhbiBTSEEyNTYgYW4gYXJiaXRyYXJ5IHN0
cmluZyB0byBhIGhleCByZXByZXNlbnRhdGlvbi4KKworICAgICAgICAqIHBhbC9jcnlwdG8vQ3J5
cHRvRGlnZXN0Lmg6CisgICAgICAgICogcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGln
ZXN0Q29tbW9uQ3J5cHRvLmNwcDoKKyAgICAgICAgKFBBTDo6Q3J5cHRvRGlnZXN0Ojp0b0hleFN0
cmluZyk6CisKIDIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhlc2l6ZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKaW5kZXggMDZjMThjMzBlYjEw
Li4xMzg0ODRiMzA5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRv
L0NyeXB0b0RpZ2VzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0
b0RpZ2VzdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBQQUwgewogCkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKIAogICAg
IFBBTF9FWFBPUlQgdm9pZCBhZGRCeXRlcyhjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IGxlbmd0
aCk7CiAgICAgUEFMX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gY29tcHV0ZUhhc2goKTsKKyAgICBQ
QUxfRVhQT1JUIFN0cmluZyB0b0hleFN0cmluZygpOwogCiBwcml2YXRlOgogICAgIENyeXB0b0Rp
Z2VzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9u
Y3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcAppbmRl
eCAxY2U1Nzk3ZmVmNjIuLmRjZjBhMzQ0ZThlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0Rp
Z2VzdENvbW1vbkNyeXB0by5jcHAKQEAgLTE4Miw0ICsxODIsMTkgQEAgVmVjdG9yPHVpbnQ4X3Q+
IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1N0
cmluZyBDcnlwdG9EaWdlc3Q6OnRvSGV4U3RyaW5nKCkKK3sKKyAgICBhdXRvIGhhc2ggPSBjb21w
dXRlSGFzaCgpOworCisgICAgY2hhciogc3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGhhc2hMZW5n
dGggPSBoYXNoLnNpemUoKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5p
dGlhbGl6ZWQoaGFzaExlbmd0aCAqIDIsIHN0YXJ0KTsKKyAgICBjaGFyKiBidWZmZXIgPSBzdGFy
dDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2hMZW5ndGg7ICsraSkgeworICAgICAg
ICBzbnByaW50ZihidWZmZXIsIDMsICIlMDJYIiwgaGFzaC5hdChpKSk7CisgICAgICAgIGJ1ZmZl
ciArPSAyOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmNwcAppbmRleCA3NmU0NWFmMzRlZDAuLmRjNDRjNmE3OTZmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcApA
QCAtMTI5LDE4ICsxMjksNyBAQCBTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Y29tcHV0ZUhhc2hG
b3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogICAgIGF1dG8gY3J5cHRvRGlnZXN0
ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGht
OjpTSEFfMjU2KTsKICAgICBhdXRvIHV0ZjhGaWxlTmFtZSA9IGZpbGVOYW1lLnV0ZjgoKTsKICAg
ICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVzKHV0ZjhGaWxlTmFtZS5kYXRhKCksIHV0ZjhGaWxlTmFt
ZS5sZW5ndGgoKSk7Ci0gICAgYXV0byBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNo
KCk7Ci0gICAgCi0gICAgLy8gQ29udmVydCBkaWdlc3QgdG8gaGV4LgotICAgIGNoYXIqIHN0YXJ0
ID0gMDsKLSAgICB1bnNpZ25lZCBkaWdlc3RMZW5ndGggPSBkaWdlc3Quc2l6ZSgpOwotICAgIENT
dHJpbmcgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChkaWdlc3RMZW5ndGggKiAy
LCBzdGFydCk7Ci0gICAgY2hhciogYnVmZmVyID0gc3RhcnQ7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBkaWdlc3RMZW5ndGg7ICsraSkgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIDMs
ICIlMDJYIiwgZGlnZXN0LmF0KGkpKTsKLSAgICAgICAgYnVmZmVyICs9IDI7Ci0gICAgfQotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJlc3VsdCk7CisgICAgcmV0dXJuIGNyeXB0b0RpZ2Vz
dC0+dG9IZXhTdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCAzNTlmZGRjYzNiYzguLjE0Y2E1MmJjYzAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAor
MjAyMS0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIGFuIEluc3RhbGxDb29yZGluYXRpb24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBBUEkgdGVzdHMu
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGxldHMgdGhlIGlPUyBidWlsZCBjcmVhdGUg
YSBwbGFjZWhvbGRlciBhcHAgYnVuZGxlIHRvIHJlcHJlc2VudCBhIHJlZ2lzdHJhdGlvbiB1c2lu
ZyBJbnN0YWxsQ29vcmRpbmF0aW9uLgorICAgICAgICAKKyAgICAgICAgKiBDb25maWd1cmF0aW9u
cy93ZWJwdXNoZC54Y2NvbmZpZzoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgCisgICAgICAgICogd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5t
bToKKyAgICAgICAgKFdlYlB1c2hEOjpBcHBCdW5kbGVSZXF1ZXN0OjpzdGFydCk6IFVzZSB0aGUg
SUNBcHBCdW5kbGUgaW1wbGVtZW50YXRpb24gd2hlbiBhcHByb3ByaWF0ZS4KKyAgICAgICAgCisg
ICAgICAgICogd2VicHVzaGQvSUNBcHBCdW5kbGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmguCisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5k
bGU6OmNyZWF0ZSk6CisgICAgICAgIAorICAgICAgICAqIHdlYnB1c2hkL0lDQXBwQnVuZGxlLm1t
OiBBZGRlZC4KKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgaW5p
dFdpdGhJQ0FwcEJ1bmRsZTpdKToKKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9y
T2JzZXJ2ZXIgY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3NmdWxseTpmb3JBcHBsaWNhdGlv
blJlY29yZDpdKToKKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIg
Y29vcmRpbmF0b3I6Y2FuY2VsZWRXaXRoUmVhc29uOmNsaWVudDpdKToKKyAgICAgICAgKFdlYlB1
c2hEOjpicm9hZGNhc3REZWJ1Z01lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVu
ZGxlOjpJQ0FwcEJ1bmRsZSk6CisgICAgICAgIChXZWJQdXNoRDo6ZW5jb2RlT3JpZ2luU3RyaW5n
Rm9yQnVuZGxlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6b3JpZ2luU3RyaW5nRnJv
bUVuY29kZWRCdW5kbGVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpidW5kbGVQcmVm
aXhGb3JIb3N0QXBwSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6YnVuZGxlTmFtZUZv
ck9yaWdpblN0cmluZ0FuZEhvc3RBcHBJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpJ
Q0FwcEJ1bmRsZTo6Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKToKKyAgICAgICAgKFdlYlB1
c2hEOjpJQ0FwcEJ1bmRsZTo6Z2V0QnVuZGxlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNo
RDo6SUNBcHBCdW5kbGU6OmNoZWNrRm9yRXhpc3RpbmdCdW5kbGUpOgorICAgICAgICAoV2ViUHVz
aEQ6OklDQXBwQnVuZGxlOjpkZWxldGVFeGlzdGluZ0J1bmRsZSk6CisgICAgICAgIChXZWJQdXNo
RDo6SUNBcHBCdW5kbGU6OmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZTo6c3RvcCk6CisgICAgICAgIChXZWJQdXNoRDo6SUNB
cHBCdW5kbGU6OmNyZWF0ZUJ1bmRsZSk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6
OmJ1bmRsZUNyZWF0aW9uU3VjY2VlZGVkKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRs
ZTo6YnVuZGxlQ3JlYXRpb25GYWlsZWQpOgorICAgICAgICAKKyAgICAgICAgKiB3ZWJwdXNoZC9J
bnN0YWxsQ29vcmRpbmF0aW9uU1BJLmg6IEFkZGVkLgorICAgICAgICAqIHdlYnB1c2hkL0xhdW5j
aFNlcnZpY2VzU1BJLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFw
cEJ1bmRsZS5oLgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaDoKKyAgICAgICAg
CisgICAgICAgICogd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKFdlYlB1c2hE
OjpEYWVtb246OmdldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKTog
VXNlIHRoZSBJQ0FwcEJ1bmRsZSBpbXBsZW1lbnRhdGlvbiB3aGVuIGFwcHJvcHJpYXRlLgorCiAy
MDIxLTEyLTAxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXVzZSBuYXZpZ2F0aW9uIHByZWxvYWQgaWYgc2VydmljZSB3b3JrZXIgaXMgZmV0Y2hpbmcgdGhl
IGNvcnJlc3BvbmRpbmcgbmF2aWdhdGlvbiByZXF1ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NvbmZpZ3VyYXRpb25zL3dlYnB1c2hkLnhjY29uZmlnIGIvU291cmNlL1dlYktpdC9Db25m
aWd1cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZpZwppbmRleCAzMDVmMjBiMjEwY2EuLmQzZjFlZmE4
NzdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy93ZWJwdXNoZC54
Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL3dlYnB1c2hkLnhjY29u
ZmlnCkBAIC0yNSw3ICsyNSwyNSBAQAogCiBQUk9EVUNUX05BTUUgPSB3ZWJwdXNoZDsKIAotT1RI
RVJfTERGTEFHUyA9IC1sIFdURiAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBDb3Jl
Rm91bmRhdGlvbjsKK0VYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTW3Nkaz1hcHBsZXR2Kl0gPSAq
OworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNbc2RrPXdhdGNoKl0gPSAqOworCitXS19DT1JF
X1NFUlZJQ0VTX0xERkxBR1MgPSAkKFdLX0NPUkVfU0VSVklDRVNfTERGTEFHU18kKFdLX1BMQVRG
T1JNX05BTUUpKTsKK1dLX0NPUkVfU0VSVklDRVNfTERGTEFHU19tYWNvc3ggPSAtZnJhbWV3b3Jr
IENvcmVTZXJ2aWNlczsKKworV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHUyA9ICQoV0tf
TU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKK1dLX01P
QklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfaXBob25lb3MgPSAtZnJhbWV3b3JrIE1vYmlsZUNv
cmVTZXJ2aWNlczsKK1dLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfaXBob25lc2ltdWxh
dG9yID0gJChXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTX2lwaG9uZW9zKTsKKworV0tf
SU5TVEFMTF9DT09SRElOQVRJT05fTERGTEFHUyA9ICQoV0tfSU5TVEFMTF9DT09SRElOQVRJT05f
TERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKK1dLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xE
RkxBR1NfaXBob25lb3MgPSAtZnJhbWV3b3JrIEluc3RhbGxDb29yZGluYXRpb247CitXS19JTlNU
QUxMX0NPT1JESU5BVElPTl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoV0tfSU5TVEFMTF9D
T09SRElOQVRJT05fTERGTEFHU19pcGhvbmVvcykKKworV0tfU0hBMjU2X0xERkxBR1MgPSAkKFdL
X1NIQTI1Nl9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpOworV0tfU0hBMjU2X0xERkxBR1Nf
aXBob25lb3MgPSAtZm9yY2VfbG9hZCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvbGliUEFMLmEKK1dL
X1NIQTI1Nl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoV0tfU0hBMjU2X0xERkxBR1NfaXBo
b25lb3MpCisKK09USEVSX0xERkxBR1MgPSAtbCBXVEYgLWZyYW1ld29yayBGb3VuZGF0aW9uIC1m
cmFtZXdvcmsgQ29yZUZvdW5kYXRpb24gJChXS19TSEEyNTZfTERGTEFHUykgJChXS19DT1JFX1NF
UlZJQ0VTX0xERkxBR1MpICQoV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHUykgJChXS19J
TlNUQUxMX0NPT1JESU5BVElPTl9MREZMQUdTKTsKIExJQlJBUllfU0VBUkNIX1BBVEhTID0gJChC
VUlMVF9QUk9EVUNUU19ESVIpOwogCiBXS19QUk9DRVNTRURfWENFTlRfRklMRT0kKFRFTVBfRklM
RV9ESVIpLyQoRlVMTF9QUk9EVUNUX05BTUUpLmVudGl0bGVtZW50cwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWI2NDFjMTIwNzI5Li4y
OTZkNThjOGE4N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTAyMiw2ICsxMDIyLDEwIEBACiAJCTUxN0E1MzEwMUY0N0E4NjIwMERD
REMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QTUzMEQxRjQ3QTg0MzAwRENEQzBBIC8q
IFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07CiAJCTUxN0I1RjJFMjc1NzM4
MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0I1RjJEMjc1NzM4
MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCAqLzsg
fTsKIAkJNTE3QjVGMkYyNzU3MzgyQjAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9u
Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3QjVGMkQyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9u
Q29uZmlndXJhdGlvbi5oICovOyB9OworCQk1MTdCNUYzNzI3NTdEQTg4MDAyREMyMkQgLyogTGF1
bmNoU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxN0I1RjMzMjc1N0RBODcwMDJEQzIyRCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICov
OyB9OworCQk1MTdCNUYzODI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYzNDI3NTdEQTg4
MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gKi87IH07CisJCTUxN0I1RjM5Mjc1N0RBODgwMDJE
QzIyRCAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYzNTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFs
bENvb3JkaW5hdGlvblNQSS5oICovOyB9OworCQk1MTdCNUYzQTI3NTdEQTg4MDAyREMyMkQgLyog
SUNBcHBCdW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oICovOyB9OwogCQk1
MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEYgLyog
Q2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdDRjBFMTE2M0E0ODZDMDBD
Mjk1MEYgLyogQ2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki87IH07CiAJCTUxN0NGMEU0MTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3Q0YwRTIxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VzLmggKi87IH07CkBAIC00Mzc3LDYgKzQzODEsMTAgQEAKIAkJNTE3QTUzMEQxRjQ3
QTg0MzAwRENEQzBBIC8qIFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmg7
IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3Nh
Z2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUxN0E1MzBFMUY0
N0E4NDMwMERDREMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU1dDbGllbnRDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
U1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKIAkJNTE3QjVGMkQyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hE
YWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QjVGMzMyNzU3REE4NzAwMkRDMjJEIC8qIExhdW5jaFNl
cnZpY2VzU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhdW5jaFNlcnZp
Y2VzU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjM0Mjc1N0RBODgw
MDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IElDQXBwQnVuZGxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MTdCNUYzNTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJ
Q0FwcEJ1bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJQ0FwcEJ1bmRs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdDRjBFMTE2M0E0ODZDMDBDMjk1
MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRiAvKiBDYWNoZVN0b3Jh
Z2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9DYWNoZVN0b3JhZ2VFbmdp
bmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJNTE3Q0YwRTIxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC05ODk0LDYgKzk5MDIsMTAgQEAKIAkJCQk1MTYwRTk1
NDI3NEI4ODcxMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5oICovLAogCQkJCTUxNjBFOTUz
Mjc0Qjg4NzEwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lm1tICovLAogCQkJCTVDQkI2RDRE
MjcxRjY3Q0MwMEZEMUE1RCAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnBsaXN0ICovLAor
CQkJCTUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oICovLAorCQkJCTUx
N0I1RjM0Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLywKKwkJCQk1MTdCNUYz
NTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovLAorCQkJCTUx
N0I1RjMzMjc1N0RBODcwMDJEQzIyRCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICovLAogCQkJCTUx
RjdCQjc1Mjc0NDk4QkIwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oICovLAog
CQkJCTUxRjdCQjc0Mjc0NDk4QkEwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5t
bSAqLywKIAkJCQk1MTYwRTk1QzI3NEMyQTAzMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lz
dHJ5LmggKi8sCkBAIC0xMjQ0OSwxMyArMTI0NjEsMTYgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0g
KAorCQkJCTUxN0I1RjNBMjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE2MEU5NTYyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTU3OUZDMjcxN0FGNTAwMEVENTI4MCAvKiBEYWVtb25V
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjdCQjc3Mjc0NDk4QkIwMEM0NUE3MiAv
KiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MEU5NUUy
NzRDMkEwMzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE2MEU5NTkyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxRjdCQjdCMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE3QjVGMzcyNzU3REE4ODAwMkRDMjJEIC8qIExh
dW5jaFNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUYyRjI3NTczODJCMDAy
REMyMkQgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MTdCNUYzOTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlv
blNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyQ0Q2OUYyNzIzMzkzQTAwRjdGOEVDIC8qIFdl
YlB1c2hEYWVtb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMTQ5OTMsNiArMTUwMDgsNyBAQAogCQkJZmlsZXMg
PSAoCiAJCQkJNTE2MEU5NTUyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1QzE1N0EwMTI3MTdCN0ZCMDBFRDUyODAgLyogQXJndW1lbnRD
b2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QjVGMzgyNzU3REE4ODAwMkRDMjJEIC8q
IElDQXBwQnVuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGN0JCN0QyNzQ1NjQwNDAwQzQ1
QTcyIC8qIENvZGVTaWduaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkYyNzE3QjZE
MjAwRUQ1MjgwIC8qIERhZW1vbkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5
RkUyNzE3QjZDMTAwRUQ1MjgwIC8qIERhZW1vbkVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0gYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0KaW5kZXggZDA0N2UxZDYy
YTczLi42MDk3ZDc5OGVjMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBw
QnVuZGxlUmVxdWVzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJl
cXVlc3QubW0KQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAi
QXBwQnVuZGxlUmVxdWVzdC5oIgogCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgogI2ltcG9ydCAi
TW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcuaCIKICNpbXBvcnQgIldlYlB1c2hEYWVtb24uaCIKICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPgpAQCAtNTEsOCArNTIsMTMgQEAg
dm9pZCBBcHBCdW5kbGVSZXF1ZXN0OjpzdGFydCgpCiAKICAgICBpZiAobV9jb25uZWN0aW9uLT51
c2VNb2NrQnVuZGxlc0ZvclRlc3RpbmcoKSkKICAgICAgICAgbV9hcHBCdW5kbGUgPSBNb2NrQXBw
QnVuZGxlRm9yVGVzdGluZzo6Y3JlYXRlKG1fb3JpZ2luU3RyaW5nLCBtX2Nvbm5lY3Rpb24tPmhv
c3RBcHBDb2RlU2lnbmluZ0lkZW50aWZpZXIoKSwgKnRoaXMpOwotICAgIGVsc2UKKyAgICBlbHNl
IHsKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykKKyAgICAgICAgbV9h
cHBCdW5kbGUgPSBJQ0FwcEJ1bmRsZTo6Y3JlYXRlKCptX2Nvbm5lY3Rpb24sIG1fb3JpZ2luU3Ry
aW5nLCAqdGhpcyk7CisjZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCisgICAgfQogCiAgICAgc3RhcnRJbnRlcm5hbCgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5oIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9JQ0FwcEJ1bmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uOTY2ZTBjMDE4Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9JQ0FwcEJ1bmRsZS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxF
KElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMpCisKKyNpbXBvcnQgIkluc3RhbGxDb29yZGlu
YXRpb25TUEkuaCIKKyNpbXBvcnQgIlB1c2hBcHBCdW5kbGUuaCIKKyNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworQGNsYXNzIE5TRXJyb3I7CitAY2xhc3MgV2ViQXBwSW5zdGFsbENvb3JkaW5h
dG9yT2JzZXJ2ZXI7CisKK25hbWVzcGFjZSBXZWJQdXNoRCB7CisKK2NsYXNzIENsaWVudENvbm5l
Y3Rpb247CisKK2NsYXNzIElDQXBwQnVuZGxlIDogcHVibGljIFB1c2hBcHBCdW5kbGUsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxJQ0FwcEJ1bmRsZT4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SUNBcHBCdW5kbGU+IGNyZWF0ZShDbGllbnRD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgUHVzaEFw
cEJ1bmRsZUNsaWVudCYgY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSUNBcHBCdW5kbGUoY29ubmVjdGlvbiwgb3JpZ2luU3RyaW5nLCBjbGllbnQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGJ1bmRsZUNyZWF0aW9uU3VjY2VlZGVkKCk7CisgICAgdm9pZCBidW5kbGVD
cmVhdGlvbkZhaWxlZChOU0Vycm9yICopOworCisgICAgc3RhdGljIHZvaWQgZ2V0T3JpZ2luc1dp
dGhSZWdpc3RyYXRpb25zKENsaWVudENvbm5lY3Rpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik+JiYpOworCitwcml2YXRlOgorICAgIElDQXBwQnVuZGxl
KENsaWVudENvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgUHVzaEFwcEJ1
bmRsZUNsaWVudCYpOworCisgICAgY29uc3QgU3RyaW5nJiBnZXRCdW5kbGVJZGVudGlmaWVyKCk7
CisKKyAgICB2b2lkIGNoZWNrRm9yRXhpc3RpbmdCdW5kbGUoKSBmaW5hbDsKKyAgICB2b2lkIGRl
bGV0ZUV4aXN0aW5nQnVuZGxlKCkgZmluYWw7CisgICAgdm9pZCBjcmVhdGVCdW5kbGUoKSBmaW5h
bDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKworICAgIHZvaWQgZGlkRGVsZXRlRXhpc3RpbmdC
dW5kbGVXaXRoRXJyb3IoTlNFcnJvciAqKTsKKworICAgIFJldGFpblB0cjxJWFJlc3RvcmluZ0Rl
bW90ZWRBcHBJbnN0YWxsQ29vcmRpbmF0b3I+IG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yOworICAg
IFJldGFpblB0cjxXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcj4gbV9hcHBJbnN0YWxs
T2JzZXJ2ZXI7CisKKyAgICBTdHJpbmcgbV9vcmlnaW5TdHJpbmc7CisgICAgUmVmUHRyPENsaWVu
dENvbm5lY3Rpb24+IG1fY2xpZW50Q29ubmVjdGlvbjsKKworICAgIFN0cmluZyBtX2J1bmRsZUlk
ZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJQdXNoRAorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL0lDQXBwQnVuZGxlLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0Fw
cEJ1bmRsZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA0NTVi
MmM0YzRhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBC
dW5kbGUubW0KQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgiCisKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElO
QVRJT05fQlVORExFUykKKworI2ltcG9ydCAiQXBwQnVuZGxlUmVxdWVzdC5oIgorI2ltcG9ydCAi
TGF1bmNoU2VydmljZXNTUEkuaCIKKyNpbXBvcnQgIlB1c2hDbGllbnRDb25uZWN0aW9uLmgiCisj
aW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Db25zb2xl
VHlwZXMuaD4KKyNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CisjaW1wb3J0IDx3
dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK05TU3RyaW5nICpwdXNoQnVuZGxlQXBwTWFuYWdl
bWVudERvbWFpbiA9IEAiY29tLmFwcGxlLldlYktpdC5QdXNoQnVuZGxlcyI7CisKK0BpbnRlcmZh
Y2UgV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgOiBOU09iamVjdCA8SVhBcHBJbnN0
YWxsQ29vcmRpbmF0b3JPYnNlcnZlcj4KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aElDQXBwQnVu
ZGxlOihXZWJQdXNoRDo6SUNBcHBCdW5kbGUmKWljQXBwQnVuZGxlOworQHByb3BlcnR5IFdlYWtQ
dHI8V2ViUHVzaEQ6OklDQXBwQnVuZGxlPiBidW5kbGU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcgorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhJQ0FwcEJ1bmRsZTooV2ViUHVzaEQ6OklDQXBwQnVuZGxlJilpY0FwcEJ1bmRsZQorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgX2J1bmRsZSA9IGljQXBwQnVuZGxlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3NmdWxseToobm9ubnVsbCBJWEFwcEluc3Rh
bGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFwcGxpY2F0aW9uUmVjb3JkOihudWxsYWJs
ZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopYXBwUmVjb3JkCit7CisgICAgY2FsbE9uTWFpblJ1bkxv
b3AoW3NlbGYsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8aWQ+KHNlbGYpXSB7CisgICAgICAg
IGlmIChfYnVuZGxlKQorICAgICAgICAgICAgX2J1bmRsZS0+YnVuZGxlQ3JlYXRpb25TdWNjZWVk
ZWQoKTsKKyAgICB9KTsKK30KKworLSAodm9pZCljb29yZGluYXRvcjoobm9ubnVsbCBJWEFwcElu
c3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGNhbmNlbGVkV2l0aFJlYXNvbjoobm9ubnVs
bCBOU0Vycm9yICopY2FuY2VsUmVhc29uIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWNsaWVu
dAoreworICAgIGNhbGxPbk1haW5SdW5Mb29wKFtzZWxmLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWlu
UHRyPGlkPihzZWxmKSwgcHJvdGVjdGVkQ2FuY2VsUmVhc29uID0gUmV0YWluUHRyPE5TRXJyb3I+
KGNhbmNlbFJlYXNvbildIHsKKyAgICAgICAgaWYgKF9idW5kbGUpCisgICAgICAgICAgICBfYnVu
ZGxlLT5idW5kbGVDcmVhdGlvbkZhaWxlZChwcm90ZWN0ZWRDYW5jZWxSZWFzb24uZ2V0KCkpOwor
ICAgIH0pOworfQorCitAZW5kCisKK3VzaW5nIFBBTDo6Q3J5cHRvRGlnZXN0OworCituYW1lc3Bh
Y2UgV2ViUHVzaEQgeworCitzdGF0aWMgdm9pZCBicm9hZGNhc3REZWJ1Z01lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIERhZW1vbjo6c2luZ2xldG9uKCkuYnJvYWRjYXN0RGVi
dWdNZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJJQ0FwcEJ1bmRs
ZTogIiwgbWVzc2FnZSkpOworfQorCitJQ0FwcEJ1bmRsZTo6SUNBcHBCdW5kbGUoQ2xpZW50Q29u
bmVjdGlvbiYgY2xpZW50Q29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIFB1
c2hBcHBCdW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICA6IFB1c2hBcHBCdW5kbGUoY2xpZW50KQor
ICAgICwgbV9vcmlnaW5TdHJpbmcob3JpZ2luU3RyaW5nKQorICAgICwgbV9jbGllbnRDb25uZWN0
aW9uKCZjbGllbnRDb25uZWN0aW9uKQoreworfQorCitzdGF0aWMgU3RyaW5nIGVuY29kZU9yaWdp
blN0cmluZ0ZvckJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAv
LyBCdW5kbGUgaWRlbnRpZmllcnMgaGF2ZSBleGFjdGx5IDY0IHZhbGlkIGNoYXJhY3RlcnMuCisg
ICAgLy8gYS16LCBBLVosIDAtOSwgJy0nLCBhbmQgJy4nCisgICAgLy8gQmFzZTY0IFVSTCBlbmNv
ZGluZyB1c2VzICctJyBhbmQgJ18nIGZvciB0aGUgZmluYWwgMiBjaGFyYWN0ZXJzCisgICAgLy8g
Rm9yIG91ciBidW5kbGUgaWRlbnRpZmllciwgd2UnbGwgQmFzZTY0IFVSTCBlbmNvZGUgdGhlbiBy
ZXBsYWNlICdfJyB3aXRoICcuJworICAgIC8vIFdlIGFsc28gZ2V0IHJpZCBvZiB0aGUgdHlwaWNh
bCAnPScgcGFkZGluZyBmb3IgYmFzZTY0IGVuY29kaW5nLgorCisgICAgYXV0byBiYXNlNjQgPSBi
YXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihpbnB1dC51dGY4KCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmFzZTY0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChiYXNlNjRbaV0gPT0g
J18nKQorICAgICAgICAgICAgYmFzZTY0W2ldID0gJy4nOworICAgIH0KKworICAgIHNpemVfdCBu
dW1iZXJFcXVhbFNpZ25zID0gMDsKKyAgICBpZiAoYmFzZTY0LnNpemUoKSA+PSAxICYmIGJhc2U2
NC5sYXN0KCkgPT0gJz0nKQorICAgICAgICArK251bWJlckVxdWFsU2lnbnM7CisgICAgaWYgKGJh
c2U2NC5zaXplKCkgPj0gMiAmJiBiYXNlNjRbYmFzZTY0LnNpemUoKSAtIDJdID09ICc9JykKKyAg
ICAgICAgKytudW1iZXJFcXVhbFNpZ25zOworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
YmFzZTY0LmRhdGEoKSwgYmFzZTY0LnNpemUoKSAtIG51bWJlckVxdWFsU2lnbnMpOworfQorCitz
dGF0aWMgU3RyaW5nIG9yaWdpblN0cmluZ0Zyb21FbmNvZGVkQnVuZGxlSWRlbnRpZmllcihjb25z
dCBTdHJpbmcmIGlucHV0KQoreworICAgIGF1dG8gdXRmOCA9IGlucHV0LnV0ZjgoKTsKKyAgICBh
dXRvIGJ1ZmZlciA9IHV0ZjgubXV0YWJsZURhdGEoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHV0ZjgubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoYnVmZmVyW2ldID09ICcuJykK
KyAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICdfJzsKKyAgICB9CisKKyAgICBhdXRvIGRlY29kZWQg
PSBiYXNlNjRVUkxEZWNvZGUoYnVmZmVyLCB1dGY4Lmxlbmd0aCgpKTsKKyAgICBpZiAoIWRlY29k
ZWQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChk
ZWNvZGVkLT5kYXRhKCksIGRlY29kZWQtPnNpemUoKSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgYnVu
ZGxlUHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBob3N0QXBwSWRlbnRp
ZmllcikKK3sKKyAgICBhdXRvIGFwcERpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUo
Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOworICAgIGF1dG8gdXRmOElkZW50aWZp
ZXIgPSBob3N0QXBwSWRlbnRpZmllci51dGY4KCk7CisgICAgYXBwRGlnZXN0LT5hZGRCeXRlcyh1
dGY4SWRlbnRpZmllci5kYXRhKCksIHV0ZjhJZGVudGlmaWVyLmxlbmd0aCgpKTsKKworICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJjb20uYXBwbGUuV2ViS2l0LlB1c2hCdW5kbGUuIiwgYXBwRGlnZXN0
LT50b0hleFN0cmluZygpLCAiLiIpOworfQorCitzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWVGb3JP
cmlnaW5TdHJpbmdBbmRIb3N0QXBwSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIG9yaWdpblN0cmlu
ZywgY29uc3QgU3RyaW5nJiBob3N0QXBwSWRlbnRpZmllcikKK3sKKyAgICAvLyBGSVhNRTogT25j
ZSB3ZSBjYW4gc3RvcmUgdGhlIG9yaWdpbiBzdHJpbmcgd2l0aGluIHRoZSBhcHAgYnVuZGxlLCBo
YXNoIHRoZSBvcmlnaW4gc3RyaW5nIGFzIHdlbGwuCisgICAgLy8gRm9yIG5vdyB3ZSBiYXNlNjQg
ZW5jb2RlIGl0IHRvIG1ha2UgYSB2YWxpZCBidW5kbGUgaWRlbnRpZmllciB0aGF0IGNhcnJpZXMg
dGhlIGluZm9ybWF0aW9uLgorICAgIHJldHVybiBtYWtlU3RyaW5nKGJ1bmRsZVByZWZpeEZvckhv
c3RBcHBJZGVudGlmaWVyKGhvc3RBcHBJZGVudGlmaWVyKSwgZW5jb2RlT3JpZ2luU3RyaW5nRm9y
QnVuZGxlSWRlbnRpZmllcihvcmlnaW5TdHJpbmcpKTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6
Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKENsaWVudENvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOworCisgICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBidW5kbGVJZGVudGlmaWVyUHJlZml4ID0gKE5TU3RyaW5nICopYnVuZGxl
UHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIoY29ubmVjdGlvbi5ob3N0QXBwQ29kZVNpZ25pbmdJ
ZGVudGlmaWVyKCkpOworCisgICAgTFNFbnVtZXJhdG9yPExTQXBwbGljYXRpb25SZWNvcmQgKj4g
KmVudW1lcmF0b3IgPSBbTFNBcHBsaWNhdGlvblJlY29yZCBlbnVtZXJhdG9yV2l0aE9wdGlvbnM6
TFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9uc0VudW1lcmF0ZVBsYWNlaG9sZGVyc107Cisg
ICAgZm9yIChMU0FwcGxpY2F0aW9uUmVjb3JkICpyZWNvcmQgPSBbZW51bWVyYXRvciBuZXh0T2Jq
ZWN0XTsgcmVjb3JkOyByZWNvcmQgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAg
ICBpZiAoIVtyZWNvcmQubWFuYWdlbWVudERvbWFpbiBpc0VxdWFsVG9TdHJpbmc6cHVzaEJ1bmRs
ZUFwcE1hbmFnZW1lbnREb21haW5dKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCFbcmVjb3JkLmJ1bmRsZUlkZW50aWZpZXIgaGFzUHJlZml4OmJ1bmRsZUlkZW50aWZpZXJQ
cmVmaXguZ2V0KCldKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRklYTUU6
IEZvciBub3cgd2Ugc3RvcmUgdGhlIG9yaWdpbiBzdHJpbmcgaW4gdGhlIGJ1bmRsZSBpZGVudGlm
aWVyIGJhc2U2NCBlbmNvZGVkCisgICAgICAgIC8vIE9uY2Ugd2Ugc3RvcmUgaXQgaW4gdGhlIGJ1
bmRsZSBpdHNlbGYsIHdlJ2xsIGhhc2ggdGhlIG9yaWdpbiBzdHJpbmcgaW4gdGhlIGJ1bmRsZSBp
ZGVudGlmaWVyIGFuZCBleHRyYWN0IGl0IGZyb20gdGhlIGJ1bmRsZQorCisgICAgICAgIE5TQXJy
YXkgKmNvbXBvbmVudHMgPSBbcmVjb3JkLmJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFy
YXRlZEJ5U3RyaW5nOmJ1bmRsZUlkZW50aWZpZXJQcmVmaXguZ2V0KCldOworICAgICAgICBBU1NF
UlQoY29tcG9uZW50cy5jb3VudCA+PSAyKTsKKworICAgICAgICBhdXRvIG9yaWdpblN0cmluZyA9
IG9yaWdpblN0cmluZ0Zyb21FbmNvZGVkQnVuZGxlSWRlbnRpZmllcihjb21wb25lbnRzWzFdKTsK
KyAgICAgICAgaWYgKG9yaWdpblN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICByZXN1bHRzLmFwcGVuZChvcmlnaW5TdHJpbmcpOworICAgIH0KKyAgICAK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHRzKTsKK30KKworY29uc3QgU3RyaW5nJiBJQ0Fw
cEJ1bmRsZTo6Z2V0QnVuZGxlSWRlbnRpZmllcigpCit7CisgICAgaWYgKG1fYnVuZGxlSWRlbnRp
Zmllci5pc0VtcHR5KCkgJiYgbV9jbGllbnRDb25uZWN0aW9uKQorICAgICAgICBtX2J1bmRsZUlk
ZW50aWZpZXIgPSBidW5kbGVOYW1lRm9yT3JpZ2luU3RyaW5nQW5kSG9zdEFwcElkZW50aWZpZXIo
bV9vcmlnaW5TdHJpbmcsIG1fY2xpZW50Q29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRl
bnRpZmllcigpKTsKKworICAgIHJldHVybiBtX2J1bmRsZUlkZW50aWZpZXI7Cit9CisKK3ZvaWQg
SUNBcHBCdW5kbGU6OmNoZWNrRm9yRXhpc3RpbmdCdW5kbGUoKQoreworICAgIE5TRXJyb3IgKmVy
cm9yID0gbmlsOworICAgIExTQXBwbGljYXRpb25SZWNvcmQgKmFwcFJlY29yZCA9IFtbTFNBcHBs
aWNhdGlvblJlY29yZCBhbGxvY10gaW5pdFdpdGhCdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAq
KWdldEJ1bmRsZUlkZW50aWZpZXIoKSBhbGxvd1BsYWNlaG9sZGVyOllFUyBlcnJvcjomZXJyb3Jd
OworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2hlY2tGb3JFeGlz
dGluZ0J1bmRsZSgqdGhpcywgYXBwUmVjb3JkID8gUHVzaEFwcEJ1bmRsZUV4aXN0czo6WWVzIDog
UHVzaEFwcEJ1bmRsZUV4aXN0czo6Tm8pOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpkZWxldGVF
eGlzdGluZ0J1bmRsZSgpCit7CisgICAgW0lYQXBwSW5zdGFsbENvb3JkaW5hdG9yIHVuaW5zdGFs
bEFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCkgcmVxdWVz
dFVzZXJDb25maXJtYXRpb246Tk8gY29tcGxldGlvbjpbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJl
ZiB7ICp0aGlzIH1dIChOU0Vycm9yICplcnJvcikgeworICAgICAgICBjYWxsT25NYWluUnVuTG9v
cChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGVycm9yID0gUmV0YWluUHRy
PE5TRXJyb3I+KGVycm9yKV0geworICAgICAgICAgICAgZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVX
aXRoRXJyb3IoZXJyb3IuZ2V0KCkpOworICAgICAgICB9KTsKKyAgICB9XTsKK30KKwordm9pZCBJ
Q0FwcEJ1bmRsZTo6ZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVXaXRoRXJyb3IoTlNFcnJvciAqZXJy
b3IpCit7CisgICAgaWYgKGVycm9yKQorICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFr
ZVN0cmluZygiRXJyb3IgZGVsZXRpbmcgZXhpc3RpbmcgYnVuZGxlOiAiLCBTdHJpbmcoW2Vycm9y
IGRlc2NyaXB0aW9uXSkpKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKCp0aGlzLCBlcnJvcik7Cit9CisKK3Zv
aWQgSUNBcHBCdW5kbGU6OnN0b3AoKQoreworICAgIG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yLmdl
dCgpLm9ic2VydmVyID0gbmlsOworICAgIG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yID0gbmlsOwor
ICAgIG1fYXBwSW5zdGFsbE9ic2VydmVyID0gbmlsOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpj
cmVhdGVCdW5kbGUoKQoreworICAgIFJldGFpblB0cjxOU1N0cmluZz4gYnVuZGxlSWRlbnRpZmll
ciA9IChOU1N0cmluZyAqKWdldEJ1bmRsZUlkZW50aWZpZXIoKTsKKworICAgIC8vIENhbmNlbCBh
bnkgcHJldmlvdXMgaW5zdGFsbCBjb29yZGluYXRvciB0aGF0IG1pZ2h0J3ZlIGJlZW4gbGVmdCBo
YW5naW5nIGluIGEgcGFydGlhbGx5IGZpbmlzaGVkIHN0YXRlCisgICAgTlNFcnJvciAqZXJyb3Ig
PSBuaWw7CisgICAgW0lYQXBwSW5zdGFsbENvb3JkaW5hdG9yIGNhbmNlbENvb3JkaW5hdG9yRm9y
QXBwV2l0aEJ1bmRsZUlEOmJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkgd2l0aFJlYXNvbjpbTlNFcnJv
ciBlcnJvcldpdGhEb21haW46QCJXS0Vycm9yRG9tYWluIiBjb2RlOjEgdXNlckluZm86bmlsXSBj
bGllbnQ6SVhDbGllbnRJZGVudGlmaWVyQXBwbGllZEZvciBlcnJvcjomZXJyb3JdOworCisgICAg
Qk9PTCBjcmVhdGVkID0gTk87CisgICAgZXJyb3IgPSBuaWw7CisgICAgbV9hcHBJbnN0YWxsQ29v
cmRpbmF0b3IgPSBbSVhSZXN0b3JpbmdEZW1vdGVkQXBwSW5zdGFsbENvb3JkaW5hdG9yIGNvb3Jk
aW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOmJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkgd2l0aENsaWVu
dElEOklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgY3JlYXRlSWZOb3RFeGlzdGluZzpZRVMg
Y3JlYXRlZDomY3JlYXRlZCBlcnJvcjomZXJyb3JdOworCisgICAgaWYgKCFtX2FwcEluc3RhbGxD
b29yZGluYXRvciB8fCBlcnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFr
ZVN0cmluZygiVW5hYmxlIHRvIGNyZWF0ZSBpbnN0YWxsIGNvb3JkaW5hdGlvciBmb3IgYXBwIGJ1
bmRsZSBpZGVudGlmaWVyICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSkpOworICAg
ICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIWNyZWF0ZWQpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1h
a2VTdHJpbmcoIkV4aXN0aW5nIGluc3RhbGwgY29vcmRpbmF0aW9yIGZvciBhcHAgYnVuZGxlIGlk
ZW50aWZpZXIgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIHdhcyBmb3VuZC4g
VGhpcyBpcyB1bmV4cGVjdGVkLiIpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJy
b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9hcHBJbnN0YWxsT2JzZXJ2ZXIg
PSBhZG9wdE5TKFtbV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgYWxsb2NdIGluaXRX
aXRoSUNBcHBCdW5kbGU6KnRoaXNdKTsKKyAgICBtX2FwcEluc3RhbGxDb29yZGluYXRvci5nZXQo
KS5vYnNlcnZlciA9IG1fYXBwSW5zdGFsbE9ic2VydmVyLmdldCgpOworCisgICAgUmV0YWluUHRy
PElYUGxhY2Vob2xkZXI+IHBsYWNlaG9sZGVyID0gYWRvcHROUyhbW0lYUGxhY2Vob2xkZXIgYWxs
b2NdIGluaXRBcHBQbGFjZWhvbGRlcldpdGhCdW5kbGVOYW1lOihOU1N0cmluZyAqKW1fb3JpZ2lu
U3RyaW5nIGJ1bmRsZUlEOmJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkgaW5zdGFsbFR5cGU6TFNJbnN0
YWxsVHlwZUludGVudGlvbmFsRG93bmdyYWRlIGNsaWVudDpJWENsaWVudElkZW50aWZpZXJBcHBs
aWVkRm9yXSk7CisKKyAgICBSZXRhaW5QdHI8SVhQbGFjZWhvbGRlckF0dHJpYnV0ZXM+IHBsYWNl
aG9sZGVyQXR0cmlidXRlcyA9IGFkb3B0TlMoW0lYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzIG5ld10p
OworICAgIHBsYWNlaG9sZGVyQXR0cmlidXRlcy5nZXQoKS5sYXVuY2hQcm9oaWJpdGVkID0gWUVT
OworCisgICAgW3BsYWNlaG9sZGVyIHNldFBsYWNlaG9sZGVyQXR0cmlidXRlczpwbGFjZWhvbGRl
ckF0dHJpYnV0ZXMuZ2V0KCkgZXJyb3I6JmVycm9yXTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAg
ICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIlVuYWJsZSB0byBzZXQgcGxhY2Vo
b2xkZXIgYXR0cmlidXRlcyBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdl
dCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAg
IGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIE5TRGljdGlvbmFyeSAqZW50aXRsZW1lbnRzRGljdGlvbmFyeSA9IEB7CisgICAgICAgIEAi
Y29tLmFwcGxlLnByaXZhdGUudXNlcm5vdGlmaWNhdGlvbnMuYnVuZGxlLWlkZW50aWZpZXJzIjog
YnVuZGxlSWRlbnRpZmllci5nZXQoKSwKKyAgICAgICAgQCJjb20uYXBwbGUucHJpdmF0ZS51c2Vy
bm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb24tc2ltdWxhdG9yIjogQFlFUywKKyAgICAgICAgQCJj
b20uYXBwbGUuZGV2ZWxvcGVyLmFwcC1tYW5hZ2VtZW50LWRvbWFpbiI6IHB1c2hCdW5kbGVBcHBN
YW5hZ2VtZW50RG9tYWluCisgICAgfTsKKyAgICBSZXRhaW5QdHI8SVhQcm9taXNlZEluTWVtb3J5
RGljdGlvbmFyeT4gZW50aXRsZW1lbnRzUHJvbWlzZSA9IGFkb3B0TlMoW1tJWFByb21pc2VkSW5N
ZW1vcnlEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE5hbWU6W05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJFbnRpdGxlbWVudHMgUHJvbWlzZSBmb3IgJUAiLCBidW5kbGVJZGVudGlmaWVyLmdl
dCgpXSBjbGllbnQ6SVhDbGllbnRJZGVudGlmaWVyQXBwbGllZEZvciBkaWN0aW9uYXJ5OmVudGl0
bGVtZW50c0RpY3Rpb25hcnldKTsKKworICAgIGlmICghZW50aXRsZW1lbnRzUHJvbWlzZSkgewor
ICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiVW5hYmxlIHRvIGNyZWF0
ZSBwbGFjZWhvbGRlciBlbnRpdGxlbWVudHMgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhi
dW5kbGVJZGVudGlmaWVyLmdldCgpKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChl
cnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlcnJvciA9IG5pbDsKKyAgICBp
ZiAoIVtwbGFjZWhvbGRlciBzZXRFbnRpdGxlbWVudHNQcm9taXNlOmVudGl0bGVtZW50c1Byb21p
c2UuZ2V0KCkgZXJyb3I6JmVycm9yXSB8fCBlcnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1
Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCBwbGFjZWhvbGRlciBlbnRpdGxlbWVu
dHMgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwg
IiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRs
ZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEJP
T0wgcmVzdWx0ID0gW3BsYWNlaG9sZGVyIHNldENvbmZpZ3VyYXRpb25Db21wbGV0ZVdpdGhFcnJv
cjomZXJyb3JdOworICAgIGlmICghcmVzdWx0IHx8IGVycm9yKSB7CisgICAgICAgIGJyb2FkY2Fz
dERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJGYWlsZWQgdG8gc2V0IHBsYWNlaG9sZGVyIGVudGl0
bGVtZW50cyBwcm9taXNlIGNvbXBsZXRlIGZvciBidW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlkZW50
aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsK
KyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgW21fYXBwSW5zdGFsbENvb3JkaW5hdG9yIHNldFBsYWNlaG9sZGVyUHJvbWlz
ZTpwbGFjZWhvbGRlci5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgIGlmIChlcnJvcikgeworICAg
ICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCBwbGFj
ZWhvbGRlciBwcm9taXNlIGZvciBidW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0
KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsKKyAgICAgICAg
YnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgUmV0YWluUHRyPElYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2Zlcj4gZGF0YVByb21pc2UgPSBh
ZG9wdE5TKFtbSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyIGFsbG9jXSBpbml0V2l0aE5hbWU6
QCJFbXB0eSB1c2VyIGRhdGEgcHJvbWlzZSIgY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxp
ZWRGb3IgZGlza1NwYWNlTmVlZGVkOjBdKTsKKyAgICBkYXRhUHJvbWlzZS5nZXQoKS5wZXJjZW50
Q29tcGxldGUgPSAxLjA7CisgICAgZGF0YVByb21pc2UuZ2V0KCkuY29tcGxldGUgPSBZRVM7CisK
KyAgICBbbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3Igc2V0VXNlckRhdGFQcm9taXNlOmRhdGFQcm9t
aXNlLmdldCgpIGVycm9yOiZlcnJvcl07CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGJyb2Fk
Y2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJGYWlsZWQgdG8gc2V0IHVzZXIgZGF0YSBwcm9t
aXNlIGZvciBidW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIEVycm9y
OiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRp
b25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIElDQXBw
QnVuZGxlOjpidW5kbGVDcmVhdGlvblN1Y2NlZWRlZCgpCit7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlkQ3JlYXRlQXBwQnVuZGxlKCp0aGlzLCBQdXNoQXBwQnVuZGxl
Q3JlYXRpb25SZXN1bHQ6OlN1Y2Nlc3MpOworCit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OmJ1bmRs
ZUNyZWF0aW9uRmFpbGVkKE5TRXJyb3IgKmVycm9yKQoreworICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgbV9jbGllbnQtPmRpZENyZWF0ZUFwcEJ1bmRsZSgqdGhpcywgUHVzaEFwcEJ1bmRsZUNy
ZWF0aW9uUmVzdWx0OjpGYWlsdXJlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggYi9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL0luc3RhbGxDb29yZGluYXRpb25TUEkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYwNmQ3MGY4MWY0MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oCkBAIC0w
LDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKyNpZiBVU0UoQVBQ
TEVfSU5URVJOQUxfU0RLKQorCisjaW1wb3J0IDxJbnN0YWxsQ29vcmRpbmF0aW9uL0lYQXBwSW5z
dGFsbENvb3JkaW5hdG9yLmg+CisjaW1wb3J0IDxJbnN0YWxsQ29vcmRpbmF0aW9uL0luc3RhbGxD
b29yZGluYXRpb24uaD4KKworI2Vsc2UKKworI2luY2x1ZGUgIkxhdW5jaFNlcnZpY2VzU1BJLmgi
CisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK3R5cGVkZWYgZW51bSA6IE5TVUludGVnZXIg
eworfSBJWENvb3JkaW5hdG9yUHJvZ3Jlc3NQaGFzZTsKKwordHlwZWRlZiBlbnVtIDogTlNVSW50
ZWdlciB7CisgICAgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JQbGFjZWhvbGRlclByb21pc2UgPSAx
LAorfSBJWEFwcEluc3RhbGxDb29yZGluYXRvclByb21pc2VJZGVudGlmaWVyOworCit0eXBlZGVm
IGVudW0gOiBOU1VJbnRlZ2VyIHsKKyAgICBJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yID0g
MTksCit9IElYQ2xpZW50SWRlbnRpZmllcjsKKworQGNsYXNzIExTQXBwbGljYXRpb25SZWNvcmQ7
CitAY2xhc3MgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3I7CitAY2xhc3MgSVhQbGFjZWhvbGRlcjsK
K0BjbGFzcyBJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXI7CisKK0Bwcm90b2NvbCBJWEFwcElu
c3RhbGxDb29yZGluYXRvck9ic2VydmVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZClj
b29yZGluYXRvckRpZFJlZ2lzdGVyRm9yT2JzZXJ2YXRpb246KG5vbm51bGwgSVhBcHBJbnN0YWxs
Q29vcmRpbmF0b3IgKiljb29yZGluYXRvcjsKKy0gKHZvaWQpY29vcmRpbmF0b3JTaG91bGRQcmlv
cml0aXplOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7Cist
ICh2b2lkKWNvb3JkaW5hdG9yU2hvdWxkUmVzdW1lOihub25udWxsIElYQXBwSW5zdGFsbENvb3Jk
aW5hdG9yICopY29vcmRpbmF0b3I7CistICh2b2lkKWNvb3JkaW5hdG9yU2hvdWxkUGF1c2U6KG5v
bm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvcjsKKy0gKHZvaWQpY29v
cmRpbmF0b3I6KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBk
aWRVcGRhdGVQcm9ncmVzczooZG91YmxlKXBlcmNlbnRDb21wbGV0ZSBmb3JQaGFzZTooSVhDb29y
ZGluYXRvclByb2dyZXNzUGhhc2UpcGhhc2Ugb3ZlcmFsbFByb2dyZXNzOihkb3VibGUpb3ZlcmFs
bFByb2dyZXNzOworLSAodm9pZCljb29yZGluYXRvckRpZENvbXBsZXRlU3VjY2Vzc2Z1bGx5Oihu
b25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgZm9yQXBwbGljYXRp
b25SZWNvcmQ6KG51bGxhYmxlIExTQXBwbGljYXRpb25SZWNvcmQgKilhcHBSZWNvcmQ7CistICh2
b2lkKWNvb3JkaW5hdG9yRGlkSW5zdGFsbFBsYWNlaG9sZGVyOihub25udWxsIElYQXBwSW5zdGFs
bENvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgZm9yQXBwbGljYXRpb25SZWNvcmQ6KG51bGxhYmxl
IExTQXBwbGljYXRpb25SZWNvcmQgKilwbGFjZWhvbGRlclJlY29yZDsKKy0gKHZvaWQpY29vcmRp
bmF0b3I6KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBjYW5j
ZWxlZFdpdGhSZWFzb246KG5vbm51bGwgTlNFcnJvciAqKWNhbmNlbFJlYXNvbiBjbGllbnQ6KElY
Q2xpZW50SWRlbnRpZmllciljbGllbnQ7CitAZW5kCisKK3R5cGVkZWYgdm9pZCAoXklYQXBwSW5z
dGFsbENvb3JkaW5hdG9yRXJyb3JDb21wbGV0aW9uKShOU0Vycm9yICogX051bGxhYmxlIGVycm9y
KTsKKworQGludGVyZmFjZSBJWEFwcEluc3RhbGxDb29yZGluYXRvcgorKyAodm9pZCl1bmluc3Rh
bGxBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopYnVuZGxlSUQgcmVxdWVzdFVzZXJDb25maXJt
YXRpb246KEJPT0wpcmVxdWVzdFVzZXJDb25maXJtYXRpb24gY29tcGxldGlvbjooSVhBcHBJbnN0
YWxsQ29vcmRpbmF0b3JFcnJvckNvbXBsZXRpb24pY29tcGxldGlvbjsKKysgKEJPT0wpY2FuY2Vs
Q29vcmRpbmF0b3JGb3JBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopYnVuZGxlSUQgd2l0aFJl
YXNvbjooTlNFcnJvciAqKWNhbmNlbFJlYXNvbiBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmllcilj
bGllbnQgZXJyb3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworKyAoaW5zdGFuY2V0eXBlKWNvb3Jk
aW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlEIHdpdGhDbGllbnRJ
RDooSVhDbGllbnRJZGVudGlmaWVyKWlkZW50aXR5IGNyZWF0ZUlmTm90RXhpc3Rpbmc6KEJPT0wp
Y3JlYXRlIGNyZWF0ZWQ6KEJPT0wgKilvdXRfY3JlYXRlZCBlcnJvcjooTlNFcnJvciAqKilvdXRf
ZXJyb3I7CitAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIHdlYWspIGlkPElYQXBwSW5z
dGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXI+IG9ic2VydmVyOworLSAoQk9PTClzZXRQbGFjZWhvbGRl
clByb21pc2U6KElYUGxhY2Vob2xkZXIgKilwbGFjZWhvbGRlclByb21pc2UgZXJyb3I6KE5TRXJy
b3IgKiopb3V0X2Vycm9yOworLSAoQk9PTClzZXRVc2VyRGF0YVByb21pc2U6KElYUHJvbWlzZWRP
dXRPZkJhbmRUcmFuc2ZlciAqKXVzZXJEYXRhIGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsK
K0BlbmQKKworQGludGVyZmFjZSBJWFJlc3RvcmluZ0RlbW90ZWRBcHBJbnN0YWxsQ29vcmRpbmF0
b3IgOiBJWEFwcEluc3RhbGxDb29yZGluYXRvcgorQGVuZAorCitAaW50ZXJmYWNlIElYT3duZWRE
YXRhUHJvbWlzZSA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRlcmZhY2UgSVhQcm9taXNlZEluTWVt
b3J5RGljdGlvbmFyeSA6IElYT3duZWREYXRhUHJvbWlzZQorLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWlkZW50
aXR5IGRpY3Rpb25hcnk6KE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7CitAZW5kCisKK0BpbnRl
cmZhY2UgSVhQbGFjZWhvbGRlckF0dHJpYnV0ZXMgOiBOU09iamVjdAorQHByb3BlcnR5IChub25h
dG9taWMpIEJPT0wgbGF1bmNoUHJvaGliaXRlZDsKK0BlbmQKKworQGludGVyZmFjZSBJWFBsYWNl
aG9sZGVyIDogTlNPYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0QXBwUGxhY2Vob2xkZXJXaXRo
QnVuZGxlTmFtZTooTlNTdHJpbmcgKiluYW1lIGJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlE
IGluc3RhbGxUeXBlOihMU0luc3RhbGxUeXBlKWluc3RhbGxUeXBlIGNsaWVudDooSVhDbGllbnRJ
ZGVudGlmaWVyKWlkZW50aXR5IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7CistIChCT09MKXNl
dFBsYWNlaG9sZGVyQXR0cmlidXRlczoobm9ubnVsbCBJWFBsYWNlaG9sZGVyQXR0cmlidXRlcyAq
KWF0dHJpYnV0ZXMgZXJyb3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworLSAoQk9PTClzZXRFbnRp
dGxlbWVudHNQcm9taXNlOihub25udWxsIElYT3duZWREYXRhUHJvbWlzZSAqKWVudGl0bGVtZW50
cyBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyBfTnVsbGFibGUgKiBfTnVsbGFibGUp
b3V0X2Vycm9yOworLSAoQk9PTClzZXRDb25maWd1cmF0aW9uQ29tcGxldGVXaXRoRXJyb3I6KE5T
RXJyb3IgKiopb3V0X2Vycm9yOworQGVuZAorCitAaW50ZXJmYWNlIElYT3BhcXVlRGF0YVByb21p
c2UgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIElYUHJvbWlzZWRPdXRPZkJhbmRUcmFu
c2ZlciA6IElYT3BhcXVlRGF0YVByb21pc2UKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGNv
bXBsZXRlOworQHByb3BlcnR5IChub25hdG9taWMpIGRvdWJsZSBwZXJjZW50Q29tcGxldGU7Cist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgY2xpZW50OihJWENs
aWVudElkZW50aWZpZXIpaWRlbnRpdHkgZGlza1NwYWNlTmVlZGVkOih1aW50NjRfdCl0b3RhbEJ5
dGVzOworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9MYXVuY2hTZXJ2aWNlc1NQSS5oIGIvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9MYXVuY2hTZXJ2aWNlc1NQSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uOGVlZTEwOGRkYTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9MYXVuY2hTZXJ2aWNlc1NQSS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWYgUExBVEZPUk0oSU9TKQorI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKy8v
IFRoaXMgc3BhY2UgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rCisKKyNlbHNlCisKK05TX0FTU1VN
RV9OT05OVUxMX0JFR0lOCisKK3R5cGVkZWYgTlNfRU5VTShOU1VJbnRlZ2VyLCBMU0luc3RhbGxU
eXBlKSB7CisgICAgTFNJbnN0YWxsVHlwZUludGVudGlvbmFsRG93bmdyYWRlID0gOAorfTsKKwor
QGludGVyZmFjZSBMU1JlY29yZCA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRlcmZhY2UgTFNCdW5k
bGVSZWNvcmQgOiBMU1JlY29yZAorQHByb3BlcnR5IChyZWFkb25seSwgbnVsbGFibGUpIE5TU3Ry
aW5nICpidW5kbGVJZGVudGlmaWVyOworQGVuZAorCitAaW50ZXJmYWNlIExTQXBwbGljYXRpb25S
ZWNvcmQgOiBMU0J1bmRsZVJlY29yZAorQHByb3BlcnR5IChyZWFkb25seSkgQk9PTCBwbGFjZWhv
bGRlcjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIE5TU3RyaW5nICptYW5hZ2VtZW50RG9tYWluOwor
CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhCdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWJ1
bmRsZUlkZW50aWZpZXIgYWxsb3dQbGFjZWhvbGRlcjooQk9PTClhbGxvd1BsYWNlaG9sZGVyIGVy
cm9yOihOU0Vycm9yICoqKW91dEVycm9yOworQGVuZAorCitAaW50ZXJmYWNlIExTRW51bWVyYXRv
cjxfX2NvdmFyaWFudCBPYmplY3RUeXBlPiA6IE5TRW51bWVyYXRvcjxPYmplY3RUeXBlPgorQGVu
ZAorCit0eXBlZGVmIE5TX09QVElPTlModWludDY0X3QsIExTQXBwbGljYXRpb25FbnVtZXJhdGlv
bk9wdGlvbnMpIHsKKyAgICBMU0FwcGxpY2F0aW9uRW51bWVyYXRpb25PcHRpb25zRW51bWVyYXRl
UGxhY2Vob2xkZXJzID0gKDEgPDwgNikKK307CisKK0BpbnRlcmZhY2UgTFNBcHBsaWNhdGlvblJl
Y29yZCAoRW51bWVyYXRpb24pCisrIChMU0VudW1lcmF0b3I8TFNBcHBsaWNhdGlvblJlY29yZCAq
PiAqKWVudW1lcmF0b3JXaXRoT3B0aW9uczooTFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9u
cylvcHRpb25zOworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIFVT
RShBUFBMRV9JTlRFUk5BTF9TREspCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmggYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaAppbmRleCA4YTZkNTdjYzZmNWIuLmU5ODVlMzIxMDE1
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmgKKysr
IGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmgKQEAgLTI1LDcgKzI1LDcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBAY2xhc3MgTlNFcnJvcjsKIApAQCAt
NTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUFwcEJ1bmRs
ZShQdXNoQXBwQnVuZGxlJiwgUHVzaEFwcEJ1bmRsZUNyZWF0aW9uUmVzdWx0KSA9IDA7CiB9Owog
Ci1jbGFzcyBQdXNoQXBwQnVuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8UHVzaEFwcEJ1bmRsZT4g
eworY2xhc3MgUHVzaEFwcEJ1bmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQdXNo
QXBwQnVuZGxlPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+UHVzaEFwcEJ1bmRsZSgpOwogICAg
IHZvaWQgZGV0YWNoRnJvbUNsaWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9XZWJQdXNoRGFlbW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFl
bW9uLm1tCmluZGV4IDNiNzhmMjkwYzI3ZS4uMDJkYmNkNzhkNTJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJEYWVt
b25FbmNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25VdGlsaXRpZXMuaCIKICNpbXBvcnQgIkhhbmRs
ZU1lc3NhZ2UuaCIKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgiCiAjaW1wb3J0ICJNb2NrQXBwQnVu
ZGxlUmVnaXN0cnkuaCIKIAogI2ltcG9ydCA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CkBAIC0y
NzAsOCArMjcxLDExIEBAIHZvaWQgRGFlbW9uOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmlj
YXRpb25QZXJtaXNzaW9ucyhDbGllbnRDb25uZWN0aW9uKiBjb25uCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG5lZWQgcGxhdGZvcm0tc3BlY2lmaWMg
aW1wbGVtZW50YXRpb25zIGZvciByZWFsIHdvcmxkIGJ1bmRsZXMgb25jZSBpbXBsZW1lbnRlZC4K
LSAgICByZXBseVNlbmRlcih7IH0pOworI2lmIEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9C
VU5ETEVTKQorICAgIElDQXBwQnVuZGxlOjpnZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMoKmNv
bm5lY3Rpb24sIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyNlbHNlCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgogfQogCiB2b2lkIERhZW1vbjo6ZGVsZXRlUHVzaEFu
ZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBj
b25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBT
dHJpbmcmKT4mJiByZXBseVNlbmRlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBiNDA2NWJkODU1YWYuLmU3ZDRlYWEzNzBlNSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBA
CisyMDIxLTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGQgYW4gSW5zdGFsbENvb3JkaW5hdGlvbiB3ZWJwdXNoZCBiYWNrZW5kCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM3MTQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToKKwogMjAyMS0xMi0wMSAgQnJhZHkgRWlk
c29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIFdLV2Vic2l0ZURhdGFTdG9y
ZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgTW9jayBhcHAgYnVuZGxlIHRlc3Rpbmcu
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1
c2hEYWVtb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1
c2hEYWVtb24ubW0KaW5kZXggZDg3MTJiMDQwNTE2Li4xNjEyYWU0ODAxNzQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24u
bW0KQEAgLTMzMCw2ICszMzAsOTggQEAgVEVTVChXZWJQdXNoRCwgUGVybWlzc2lvbk1hbmFnZW1l
bnQpCiAgICAgY2xlYW5VcFRlc3RXZWJQdXNoRCh0ZW1wRGlyZWN0b3J5KTsKIH0KIAorI2lmIFBM
QVRGT1JNKElPUykKK3N0YXRpYyB2b2lkIGRlbGV0ZUFsbFJlZ2lzdHJhdGlvbnNGb3JEYXRhU3Rv
cmUoV0tXZWJzaXRlRGF0YVN0b3JlICpkYXRhU3RvcmUpCit7CisgICAgX19ibG9jayBib29sIG9y
aWdpbk9wZXJhdGlvbkRvbmUgPSBmYWxzZTsKKyAgICBfX2Jsb2NrIFJldGFpblB0cjxOU1NldDxX
S1NlY3VyaXR5T3JpZ2luICo+PiBvcmlnaW5TZXQ7CisgICAgW2RhdGFTdG9yZSBfZ2V0T3JpZ2lu
c1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lvbnM6XihOU1NldDxXS1NlY3VyaXR5T3Jp
Z2luICo+ICpvcmlnaW5zKSB7CisgICAgICAgIG9yaWdpblNldCA9IG9yaWdpbnM7CisgICAgICAg
IG9yaWdpbk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmb3JpZ2luT3BlcmF0aW9uRG9uZSk7CisKKyAgICBpZiAoIVtvcmlnaW5TZXQg
Y291bnRdKQorICAgICAgICByZXR1cm47CisKKyAgICBfX2Jsb2NrIHNpemVfdCBkZWxldGVkT3Jp
Z2lucyA9IDA7CisgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAgIGZvciAoV0tT
ZWN1cml0eU9yaWdpbiAqb3JpZ2luIGluIG9yaWdpblNldC5nZXQoKSkgeworICAgICAgICBbZGF0
YVN0b3JlIF9kZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uOm9yaWdpbiBjb21w
bGV0aW9uSGFuZGxlcjpeKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBFWFBFQ1RfRkFM
U0UoISFlcnJvcik7CisgICAgICAgICAgICBpZiAoKytkZWxldGVkT3JpZ2lucyA9PSBbb3JpZ2lu
U2V0IGNvdW50XSkKKyAgICAgICAgICAgICAgICBvcmlnaW5PcGVyYXRpb25Eb25lID0gdHJ1ZTsK
KyAgICAgICAgfV07CisgICAgfQorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmb3JpZ2lu
T3BlcmF0aW9uRG9uZSk7CisKKyAgICBvcmlnaW5PcGVyYXRpb25Eb25lID0gZmFsc2U7CisgICAg
W2RhdGFTdG9yZSBfZ2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lvbnM6
XihOU1NldDxXS1NlY3VyaXR5T3JpZ2luICo+ICpvcmlnaW5zKSB7CisgICAgICAgIEVYUEVDVF9F
UShbb3JpZ2lucyBjb3VudF0sIDB1KTsKKyAgICAgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRy
dWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZvcmlnaW5PcGVyYXRp
b25Eb25lKTsKKworfQorCitURVNUKFdlYlB1c2hELCBJbnN0YWxsQ29vcmRpbmF0aW9uQnVuZGxl
cykKK3sKKyAgICBOU1VSTCAqdGVtcERpcmVjdG9yeSA9IHNldFVwVGVzdFdlYlB1c2hEKCk7CisK
KyAgICBhdXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtfV0tXZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbiBuZXddKTsKKyAgICBkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdl
dCgpLndlYlB1c2hNYWNoU2VydmljZU5hbWUgPSBAIm9yZy53ZWJraXQud2VicHVzaHRlc3RkYWVt
b24uc2VydmljZSI7CisgICAgYXV0byBkYXRhU3RvcmUgPSBhZG9wdE5TKFtbV0tXZWJzaXRlRGF0
YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOmRhdGFTdG9yZUNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKKworICAgIGRlbGV0ZUFsbFJlZ2lzdHJhdGlvbnNGb3JEYXRhU3RvcmUoZGF0
YVN0b3JlLmdldCgpKTsKKworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJhdGlvbi5nZXQo
KS53ZWJzaXRlRGF0YVN0b3JlID0gZGF0YVN0b3JlLmdldCgpOworICAgIFtjb25maWd1cmF0aW9u
LmdldCgpLnByZWZlcmVuY2VzIF9zZXROb3RpZmljYXRpb25zRW5hYmxlZDpZRVNdOworICAgIGZv
ciAoX1dLRXhwZXJpbWVudGFsRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQcmVmZXJlbmNlcyBfZXhw
ZXJpbWVudGFsRmVhdHVyZXNdKSB7CisgICAgICAgIGlmIChbZmVhdHVyZS5rZXkgaXNFcXVhbFRv
U3RyaW5nOkAiQnVpbHRJbk5vdGlmaWNhdGlvbnNFbmFibGVkIl0pCisgICAgICAgICAgICBbW2Nv
bmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBmb3JGZWF0dXJlOmZlYXR1
cmVdOworICAgIH0KKworICAgIGF1dG8gaGFuZGxlciA9IGFkb3B0TlMoW1tUZXN0VVJMU2NoZW1l
SGFuZGxlciBhbGxvY10gaW5pdF0pOworICAgIFtjb25maWd1cmF0aW9uIHNldFVSTFNjaGVtZUhh
bmRsZXI6aGFuZGxlci5nZXQoKSBmb3JVUkxTY2hlbWU6QCJ0ZXN0aW5nIl07CisKKyAgICBbaGFu
ZGxlciBzZXRTdGFydFVSTFNjaGVtZVRhc2tIYW5kbGVyOl4oV0tXZWJWaWV3ICosIGlkPFdLVVJM
U2NoZW1lVGFzaz4gdGFzaykgeworICAgICAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05T
VVJMUmVzcG9uc2UgYWxsb2NdIGluaXRXaXRoVVJMOnRhc2sucmVxdWVzdC5VUkwgTUlNRVR5cGU6
QCJ0ZXh0L2h0bWwiIGV4cGVjdGVkQ29udGVudExlbmd0aDowIHRleHRFbmNvZGluZ05hbWU6bmls
XSk7CisgICAgICAgIFt0YXNrIGRpZFJlY2VpdmVSZXNwb25zZTpyZXNwb25zZS5nZXQoKV07Cisg
ICAgICAgIFt0YXNrIGRpZFJlY2VpdmVEYXRhOltOU0RhdGEgZGF0YVdpdGhCeXRlczptYWluQnl0
ZXMgbGVuZ3RoOnN0cmxlbihtYWluQnl0ZXMpXV07CisgICAgICAgIFt0YXNrIGRpZEZpbmlzaF07
CisgICAgfV07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBhdXRvIHVpRGVsZWdhdGUgPSBhZG9wdE5T
KFtbTm90aWZpY2F0aW9uUGVybWlzc2lvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dl
YlZpZXcgc2V0VUlEZWxlZ2F0ZTp1aURlbGVnYXRlLmdldCgpXTsKKworICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJ0ZXN0aW5nOi8vbWFpbi9pbmRleC5odG1sIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmFsZXJ0UmVjZWl2ZWQpOworCisgICAgYWxlcnRSZWNlaXZlZCA9IGZhbHNlOwor
ICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJ0ZXN0aW5nOi8vc2Vjb25kYXJ5L2luZGV4Lmh0bWwiXV1dOwor
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmYWxlcnRSZWNlaXZlZCk7CisKKyAgICBzdGF0
aWMgYm9vbCBvcmlnaW5PcGVyYXRpb25Eb25lID0gZmFsc2U7CisgICAgc3RhdGljIFJldGFpblB0
cjxOU1NldDxXS1NlY3VyaXR5T3JpZ2luICo+PiBvcmlnaW5zOworICAgIFtkYXRhU3RvcmUgX2dl
dE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOl4oTlNTZXQ8V0tTZWN1
cml0eU9yaWdpbiAqPiAqcmF3T3JpZ2lucykgeworICAgICAgICBFWFBFQ1RfRVEoW3Jhd09yaWdp
bnMgY291bnRdLCAydSk7CisgICAgICAgIG9yaWdpbnMgPSByYXdPcmlnaW5zOworICAgICAgICBv
cmlnaW5PcGVyYXRpb25Eb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCisgICAgZm9yIChXS1NlY3VyaXR5T3Jp
Z2luICpvcmlnaW4gaW4gb3JpZ2lucy5nZXQoKSkgeworICAgICAgICBFWFBFQ1RfVFJVRShbb3Jp
Z2luLnByb3RvY29sIGlzRXF1YWxUb1N0cmluZzpAInRlc3RpbmciXSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKFtvcmlnaW4uaG9zdCBpc0VxdWFsVG9TdHJpbmc6QCJtYWluIl0gfHwgW29yaWdpbi5o
b3N0IGlzRXF1YWxUb1N0cmluZzpAInNlY29uZGFyeSJdKTsKKyAgICB9CisKKyAgICBkZWxldGVB
bGxSZWdpc3RyYXRpb25zRm9yRGF0YVN0b3JlKGRhdGFTdG9yZS5nZXQoKSk7CisgICAgY2xlYW5V
cFRlc3RXZWJQdXNoRCh0ZW1wRGlyZWN0b3J5KTsKK30KKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oSU9TKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445649</attachid>
            <date>2021-12-01 18:02:06 -0800</date>
            <delta_ts>2021-12-01 20:11:34 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>49002</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzExZmJlMDhmMDczLi4yZjE1Yzk0Yjc1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlQ29j
b2EuaDoKKwogMjAyMS0xMi0wMSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIGEgcnVudGltZSBmbGFnIHRvIGVuYWJsZSBDU1MgVHJhbnNmb3Jt
cyBMZXZlbCAyIHNwZWMgY29tcGxpYW50IGJlaGF2aW9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZUNvY29hLmgKaW5kZXggYWU5MmJlZTk4NjA0Li44MGZjODAzMzE0ZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUVuYWJsZUNvY29hLmgKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICNkZWZpbmUgRU5BQkxF
X0JVSUxUX0lOX05PVElGSUNBVElPTlMgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVf
SU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykgJiYgUExBVEZPUk0oSU9TKQorI2RlZmluZSBF
TkFCTEVfSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUyAxCisjZW5kaWYKKwogI2lmICFkZWZp
bmVkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpCiAjZGVmaW5lIEVOQUJMRV9DQUNIRV9QQVJU
SVRJT05JTkcgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUzNGMxY2I1NGY5Li42Y2VmNmZkMzlh
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0xMi0wMSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFuIEluc3RhbGxDb29yZGluYXRp
b24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZSB0aGlzICJ0b0hleFN0cmluZyIgaW1wbGVtZW50YXRpb24gdG8gQ3J5
cHRvRGlnZXN0IGl0c2VsZi4KKworICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmNvbXB1dGVIYXNo
Rm9yRmlsZU5hbWUpOgorCiAyMDIxLTEyLTAxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXVzZSBuYXZpZ2F0aW9uIHByZWxvYWQgaWYgc2VydmljZSB3b3Jr
ZXIgaXMgZmV0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbmF2aWdhdGlvbiByZXF1ZXN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFM
L0NoYW5nZUxvZwppbmRleCBhYTQ0NzQ4YzU2NmMuLjhkZDFjNmEwNDViZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1
c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMzcxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEV4cG9zZSAidG9IZXhTdHJpbmciIHNvIHdlIGNhbiBTSEEyNTYgYW4gYXJiaXRyYXJ5IHN0
cmluZyB0byBhIGhleCByZXByZXNlbnRhdGlvbi4KKworICAgICAgICAqIHBhbC9jcnlwdG8vQ3J5
cHRvRGlnZXN0Lmg6CisgICAgICAgICogcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGln
ZXN0Q29tbW9uQ3J5cHRvLmNwcDoKKyAgICAgICAgKFBBTDo6Q3J5cHRvRGlnZXN0Ojp0b0hleFN0
cmluZyk6CisKIDIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhlc2l6ZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKaW5kZXggMDZjMThjMzBlYjEw
Li4xMzg0ODRiMzA5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRv
L0NyeXB0b0RpZ2VzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0
b0RpZ2VzdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBQQUwgewogCkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKIAogICAg
IFBBTF9FWFBPUlQgdm9pZCBhZGRCeXRlcyhjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IGxlbmd0
aCk7CiAgICAgUEFMX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gY29tcHV0ZUhhc2goKTsKKyAgICBQ
QUxfRVhQT1JUIFN0cmluZyB0b0hleFN0cmluZygpOwogCiBwcml2YXRlOgogICAgIENyeXB0b0Rp
Z2VzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9u
Y3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcAppbmRl
eCAxY2U1Nzk3ZmVmNjIuLmRjZjBhMzQ0ZThlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0Rp
Z2VzdENvbW1vbkNyeXB0by5jcHAKQEAgLTE4Miw0ICsxODIsMTkgQEAgVmVjdG9yPHVpbnQ4X3Q+
IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1N0
cmluZyBDcnlwdG9EaWdlc3Q6OnRvSGV4U3RyaW5nKCkKK3sKKyAgICBhdXRvIGhhc2ggPSBjb21w
dXRlSGFzaCgpOworCisgICAgY2hhciogc3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGhhc2hMZW5n
dGggPSBoYXNoLnNpemUoKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5p
dGlhbGl6ZWQoaGFzaExlbmd0aCAqIDIsIHN0YXJ0KTsKKyAgICBjaGFyKiBidWZmZXIgPSBzdGFy
dDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2hMZW5ndGg7ICsraSkgeworICAgICAg
ICBzbnByaW50ZihidWZmZXIsIDMsICIlMDJYIiwgaGFzaC5hdChpKSk7CisgICAgICAgIGJ1ZmZl
ciArPSAyOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmNwcAppbmRleCA3NmU0NWFmMzRlZDAuLmRjNDRjNmE3OTZmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcApA
QCAtMTI5LDE4ICsxMjksNyBAQCBTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Y29tcHV0ZUhhc2hG
b3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogICAgIGF1dG8gY3J5cHRvRGlnZXN0
ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGht
OjpTSEFfMjU2KTsKICAgICBhdXRvIHV0ZjhGaWxlTmFtZSA9IGZpbGVOYW1lLnV0ZjgoKTsKICAg
ICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVzKHV0ZjhGaWxlTmFtZS5kYXRhKCksIHV0ZjhGaWxlTmFt
ZS5sZW5ndGgoKSk7Ci0gICAgYXV0byBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNo
KCk7Ci0gICAgCi0gICAgLy8gQ29udmVydCBkaWdlc3QgdG8gaGV4LgotICAgIGNoYXIqIHN0YXJ0
ID0gMDsKLSAgICB1bnNpZ25lZCBkaWdlc3RMZW5ndGggPSBkaWdlc3Quc2l6ZSgpOwotICAgIENT
dHJpbmcgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChkaWdlc3RMZW5ndGggKiAy
LCBzdGFydCk7Ci0gICAgY2hhciogYnVmZmVyID0gc3RhcnQ7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBkaWdlc3RMZW5ndGg7ICsraSkgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIDMs
ICIlMDJYIiwgZGlnZXN0LmF0KGkpKTsKLSAgICAgICAgYnVmZmVyICs9IDI7Ci0gICAgfQotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJlc3VsdCk7CisgICAgcmV0dXJuIGNyeXB0b0RpZ2Vz
dC0+dG9IZXhTdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCAzNTlmZGRjYzNiYzguLjE0Y2E1MmJjYzAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAor
MjAyMS0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIGFuIEluc3RhbGxDb29yZGluYXRpb24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBBUEkgdGVzdHMu
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGxldHMgdGhlIGlPUyBidWlsZCBjcmVhdGUg
YSBwbGFjZWhvbGRlciBhcHAgYnVuZGxlIHRvIHJlcHJlc2VudCBhIHJlZ2lzdHJhdGlvbiB1c2lu
ZyBJbnN0YWxsQ29vcmRpbmF0aW9uLgorICAgICAgICAKKyAgICAgICAgKiBDb25maWd1cmF0aW9u
cy93ZWJwdXNoZC54Y2NvbmZpZzoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgCisgICAgICAgICogd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5t
bToKKyAgICAgICAgKFdlYlB1c2hEOjpBcHBCdW5kbGVSZXF1ZXN0OjpzdGFydCk6IFVzZSB0aGUg
SUNBcHBCdW5kbGUgaW1wbGVtZW50YXRpb24gd2hlbiBhcHByb3ByaWF0ZS4KKyAgICAgICAgCisg
ICAgICAgICogd2VicHVzaGQvSUNBcHBCdW5kbGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmguCisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5k
bGU6OmNyZWF0ZSk6CisgICAgICAgIAorICAgICAgICAqIHdlYnB1c2hkL0lDQXBwQnVuZGxlLm1t
OiBBZGRlZC4KKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgaW5p
dFdpdGhJQ0FwcEJ1bmRsZTpdKToKKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9y
T2JzZXJ2ZXIgY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3NmdWxseTpmb3JBcHBsaWNhdGlv
blJlY29yZDpdKToKKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIg
Y29vcmRpbmF0b3I6Y2FuY2VsZWRXaXRoUmVhc29uOmNsaWVudDpdKToKKyAgICAgICAgKFdlYlB1
c2hEOjpicm9hZGNhc3REZWJ1Z01lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVu
ZGxlOjpJQ0FwcEJ1bmRsZSk6CisgICAgICAgIChXZWJQdXNoRDo6ZW5jb2RlT3JpZ2luU3RyaW5n
Rm9yQnVuZGxlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6b3JpZ2luU3RyaW5nRnJv
bUVuY29kZWRCdW5kbGVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpidW5kbGVQcmVm
aXhGb3JIb3N0QXBwSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6YnVuZGxlTmFtZUZv
ck9yaWdpblN0cmluZ0FuZEhvc3RBcHBJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpJ
Q0FwcEJ1bmRsZTo6Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKToKKyAgICAgICAgKFdlYlB1
c2hEOjpJQ0FwcEJ1bmRsZTo6Z2V0QnVuZGxlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNo
RDo6SUNBcHBCdW5kbGU6OmNoZWNrRm9yRXhpc3RpbmdCdW5kbGUpOgorICAgICAgICAoV2ViUHVz
aEQ6OklDQXBwQnVuZGxlOjpkZWxldGVFeGlzdGluZ0J1bmRsZSk6CisgICAgICAgIChXZWJQdXNo
RDo6SUNBcHBCdW5kbGU6OmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZTo6c3RvcCk6CisgICAgICAgIChXZWJQdXNoRDo6SUNB
cHBCdW5kbGU6OmNyZWF0ZUJ1bmRsZSk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6
OmJ1bmRsZUNyZWF0aW9uU3VjY2VlZGVkKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRs
ZTo6YnVuZGxlQ3JlYXRpb25GYWlsZWQpOgorICAgICAgICAKKyAgICAgICAgKiB3ZWJwdXNoZC9J
bnN0YWxsQ29vcmRpbmF0aW9uU1BJLmg6IEFkZGVkLgorICAgICAgICAqIHdlYnB1c2hkL0xhdW5j
aFNlcnZpY2VzU1BJLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFw
cEJ1bmRsZS5oLgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaDoKKyAgICAgICAg
CisgICAgICAgICogd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKFdlYlB1c2hE
OjpEYWVtb246OmdldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKTog
VXNlIHRoZSBJQ0FwcEJ1bmRsZSBpbXBsZW1lbnRhdGlvbiB3aGVuIGFwcHJvcHJpYXRlLgorCiAy
MDIxLTEyLTAxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXVzZSBuYXZpZ2F0aW9uIHByZWxvYWQgaWYgc2VydmljZSB3b3JrZXIgaXMgZmV0Y2hpbmcgdGhl
IGNvcnJlc3BvbmRpbmcgbmF2aWdhdGlvbiByZXF1ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NvbmZpZ3VyYXRpb25zL3dlYnB1c2hkLnhjY29uZmlnIGIvU291cmNlL1dlYktpdC9Db25m
aWd1cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZpZwppbmRleCAzMDVmMjBiMjEwY2EuLmQzZjFlZmE4
NzdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy93ZWJwdXNoZC54
Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL3dlYnB1c2hkLnhjY29u
ZmlnCkBAIC0yNSw3ICsyNSwyNSBAQAogCiBQUk9EVUNUX05BTUUgPSB3ZWJwdXNoZDsKIAotT1RI
RVJfTERGTEFHUyA9IC1sIFdURiAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBDb3Jl
Rm91bmRhdGlvbjsKK0VYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTW3Nkaz1hcHBsZXR2Kl0gPSAq
OworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNbc2RrPXdhdGNoKl0gPSAqOworCitXS19DT1JF
X1NFUlZJQ0VTX0xERkxBR1MgPSAkKFdLX0NPUkVfU0VSVklDRVNfTERGTEFHU18kKFdLX1BMQVRG
T1JNX05BTUUpKTsKK1dLX0NPUkVfU0VSVklDRVNfTERGTEFHU19tYWNvc3ggPSAtZnJhbWV3b3Jr
IENvcmVTZXJ2aWNlczsKKworV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHUyA9ICQoV0tf
TU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKK1dLX01P
QklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfaXBob25lb3MgPSAtZnJhbWV3b3JrIE1vYmlsZUNv
cmVTZXJ2aWNlczsKK1dLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfaXBob25lc2ltdWxh
dG9yID0gJChXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTX2lwaG9uZW9zKTsKKworV0tf
SU5TVEFMTF9DT09SRElOQVRJT05fTERGTEFHUyA9ICQoV0tfSU5TVEFMTF9DT09SRElOQVRJT05f
TERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKK1dLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xE
RkxBR1NfaXBob25lb3MgPSAtZnJhbWV3b3JrIEluc3RhbGxDb29yZGluYXRpb247CitXS19JTlNU
QUxMX0NPT1JESU5BVElPTl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoV0tfSU5TVEFMTF9D
T09SRElOQVRJT05fTERGTEFHU19pcGhvbmVvcykKKworV0tfU0hBMjU2X0xERkxBR1MgPSAkKFdL
X1NIQTI1Nl9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpOworV0tfU0hBMjU2X0xERkxBR1Nf
aXBob25lb3MgPSAtZm9yY2VfbG9hZCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvbGliUEFMLmEKK1dL
X1NIQTI1Nl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoV0tfU0hBMjU2X0xERkxBR1NfaXBo
b25lb3MpCisKK09USEVSX0xERkxBR1MgPSAtbCBXVEYgLWZyYW1ld29yayBGb3VuZGF0aW9uIC1m
cmFtZXdvcmsgQ29yZUZvdW5kYXRpb24gJChXS19TSEEyNTZfTERGTEFHUykgJChXS19DT1JFX1NF
UlZJQ0VTX0xERkxBR1MpICQoV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHUykgJChXS19J
TlNUQUxMX0NPT1JESU5BVElPTl9MREZMQUdTKTsKIExJQlJBUllfU0VBUkNIX1BBVEhTID0gJChC
VUlMVF9QUk9EVUNUU19ESVIpOwogCiBXS19QUk9DRVNTRURfWENFTlRfRklMRT0kKFRFTVBfRklM
RV9ESVIpLyQoRlVMTF9QUk9EVUNUX05BTUUpLmVudGl0bGVtZW50cwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWI2NDFjMTIwNzI5Li4y
OTZkNThjOGE4N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTAyMiw2ICsxMDIyLDEwIEBACiAJCTUxN0E1MzEwMUY0N0E4NjIwMERD
REMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QTUzMEQxRjQ3QTg0MzAwRENEQzBBIC8q
IFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07CiAJCTUxN0I1RjJFMjc1NzM4
MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0I1RjJEMjc1NzM4
MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCAqLzsg
fTsKIAkJNTE3QjVGMkYyNzU3MzgyQjAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9u
Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3QjVGMkQyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9u
Q29uZmlndXJhdGlvbi5oICovOyB9OworCQk1MTdCNUYzNzI3NTdEQTg4MDAyREMyMkQgLyogTGF1
bmNoU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxN0I1RjMzMjc1N0RBODcwMDJEQzIyRCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICov
OyB9OworCQk1MTdCNUYzODI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYzNDI3NTdEQTg4
MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gKi87IH07CisJCTUxN0I1RjM5Mjc1N0RBODgwMDJE
QzIyRCAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYzNTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFs
bENvb3JkaW5hdGlvblNQSS5oICovOyB9OworCQk1MTdCNUYzQTI3NTdEQTg4MDAyREMyMkQgLyog
SUNBcHBCdW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oICovOyB9OwogCQk1
MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEYgLyog
Q2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdDRjBFMTE2M0E0ODZDMDBD
Mjk1MEYgLyogQ2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki87IH07CiAJCTUxN0NGMEU0MTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3Q0YwRTIxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VzLmggKi87IH07CkBAIC00Mzc3LDYgKzQzODEsMTAgQEAKIAkJNTE3QTUzMEQxRjQ3
QTg0MzAwRENEQzBBIC8qIFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmg7
IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3Nh
Z2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUxN0E1MzBFMUY0
N0E4NDMwMERDREMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU1dDbGllbnRDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
U1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKIAkJNTE3QjVGMkQyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hE
YWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QjVGMzMyNzU3REE4NzAwMkRDMjJEIC8qIExhdW5jaFNl
cnZpY2VzU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhdW5jaFNlcnZp
Y2VzU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjM0Mjc1N0RBODgw
MDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IElDQXBwQnVuZGxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MTdCNUYzNTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJ
Q0FwcEJ1bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJQ0FwcEJ1bmRs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdDRjBFMTE2M0E0ODZDMDBDMjk1
MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRiAvKiBDYWNoZVN0b3Jh
Z2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9DYWNoZVN0b3JhZ2VFbmdp
bmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJNTE3Q0YwRTIxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC05ODk0LDYgKzk5MDIsMTAgQEAKIAkJCQk1MTYwRTk1
NDI3NEI4ODcxMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5oICovLAogCQkJCTUxNjBFOTUz
Mjc0Qjg4NzEwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lm1tICovLAogCQkJCTVDQkI2RDRE
MjcxRjY3Q0MwMEZEMUE1RCAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnBsaXN0ICovLAor
CQkJCTUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oICovLAorCQkJCTUx
N0I1RjM0Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLywKKwkJCQk1MTdCNUYz
NTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovLAorCQkJCTUx
N0I1RjMzMjc1N0RBODcwMDJEQzIyRCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICovLAogCQkJCTUx
RjdCQjc1Mjc0NDk4QkIwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oICovLAog
CQkJCTUxRjdCQjc0Mjc0NDk4QkEwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5t
bSAqLywKIAkJCQk1MTYwRTk1QzI3NEMyQTAzMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lz
dHJ5LmggKi8sCkBAIC0xMjQ0OSwxMyArMTI0NjEsMTYgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0g
KAorCQkJCTUxN0I1RjNBMjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE2MEU5NTYyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTU3OUZDMjcxN0FGNTAwMEVENTI4MCAvKiBEYWVtb25V
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjdCQjc3Mjc0NDk4QkIwMEM0NUE3MiAv
KiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MEU5NUUy
NzRDMkEwMzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE2MEU5NTkyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxRjdCQjdCMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE3QjVGMzcyNzU3REE4ODAwMkRDMjJEIC8qIExh
dW5jaFNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUYyRjI3NTczODJCMDAy
REMyMkQgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MTdCNUYzOTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlv
blNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyQ0Q2OUYyNzIzMzkzQTAwRjdGOEVDIC8qIFdl
YlB1c2hEYWVtb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMTQ5OTMsNiArMTUwMDgsNyBAQAogCQkJZmlsZXMg
PSAoCiAJCQkJNTE2MEU5NTUyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1QzE1N0EwMTI3MTdCN0ZCMDBFRDUyODAgLyogQXJndW1lbnRD
b2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QjVGMzgyNzU3REE4ODAwMkRDMjJEIC8q
IElDQXBwQnVuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGN0JCN0QyNzQ1NjQwNDAwQzQ1
QTcyIC8qIENvZGVTaWduaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkYyNzE3QjZE
MjAwRUQ1MjgwIC8qIERhZW1vbkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5
RkUyNzE3QjZDMTAwRUQ1MjgwIC8qIERhZW1vbkVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0gYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0KaW5kZXggZDA0N2UxZDYy
YTczLi42MDk3ZDc5OGVjMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBw
QnVuZGxlUmVxdWVzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJl
cXVlc3QubW0KQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAi
QXBwQnVuZGxlUmVxdWVzdC5oIgogCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgogI2ltcG9ydCAi
TW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcuaCIKICNpbXBvcnQgIldlYlB1c2hEYWVtb24uaCIKICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPgpAQCAtNTEsOCArNTIsMTMgQEAg
dm9pZCBBcHBCdW5kbGVSZXF1ZXN0OjpzdGFydCgpCiAKICAgICBpZiAobV9jb25uZWN0aW9uLT51
c2VNb2NrQnVuZGxlc0ZvclRlc3RpbmcoKSkKICAgICAgICAgbV9hcHBCdW5kbGUgPSBNb2NrQXBw
QnVuZGxlRm9yVGVzdGluZzo6Y3JlYXRlKG1fb3JpZ2luU3RyaW5nLCBtX2Nvbm5lY3Rpb24tPmhv
c3RBcHBDb2RlU2lnbmluZ0lkZW50aWZpZXIoKSwgKnRoaXMpOwotICAgIGVsc2UKKyAgICBlbHNl
IHsKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykKKyAgICAgICAgbV9h
cHBCdW5kbGUgPSBJQ0FwcEJ1bmRsZTo6Y3JlYXRlKCptX2Nvbm5lY3Rpb24sIG1fb3JpZ2luU3Ry
aW5nLCAqdGhpcyk7CisjZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCisgICAgfQogCiAgICAgc3RhcnRJbnRlcm5hbCgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5oIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9JQ0FwcEJ1bmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uOTY2ZTBjMDE4Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9JQ0FwcEJ1bmRsZS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxF
KElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMpCisKKyNpbXBvcnQgIkluc3RhbGxDb29yZGlu
YXRpb25TUEkuaCIKKyNpbXBvcnQgIlB1c2hBcHBCdW5kbGUuaCIKKyNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworQGNsYXNzIE5TRXJyb3I7CitAY2xhc3MgV2ViQXBwSW5zdGFsbENvb3JkaW5h
dG9yT2JzZXJ2ZXI7CisKK25hbWVzcGFjZSBXZWJQdXNoRCB7CisKK2NsYXNzIENsaWVudENvbm5l
Y3Rpb247CisKK2NsYXNzIElDQXBwQnVuZGxlIDogcHVibGljIFB1c2hBcHBCdW5kbGUsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxJQ0FwcEJ1bmRsZT4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SUNBcHBCdW5kbGU+IGNyZWF0ZShDbGllbnRD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgUHVzaEFw
cEJ1bmRsZUNsaWVudCYgY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSUNBcHBCdW5kbGUoY29ubmVjdGlvbiwgb3JpZ2luU3RyaW5nLCBjbGllbnQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGJ1bmRsZUNyZWF0aW9uU3VjY2VlZGVkKCk7CisgICAgdm9pZCBidW5kbGVD
cmVhdGlvbkZhaWxlZChOU0Vycm9yICopOworCisgICAgc3RhdGljIHZvaWQgZ2V0T3JpZ2luc1dp
dGhSZWdpc3RyYXRpb25zKENsaWVudENvbm5lY3Rpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik+JiYpOworCitwcml2YXRlOgorICAgIElDQXBwQnVuZGxl
KENsaWVudENvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgUHVzaEFwcEJ1
bmRsZUNsaWVudCYpOworCisgICAgY29uc3QgU3RyaW5nJiBnZXRCdW5kbGVJZGVudGlmaWVyKCk7
CisKKyAgICB2b2lkIGNoZWNrRm9yRXhpc3RpbmdCdW5kbGUoKSBmaW5hbDsKKyAgICB2b2lkIGRl
bGV0ZUV4aXN0aW5nQnVuZGxlKCkgZmluYWw7CisgICAgdm9pZCBjcmVhdGVCdW5kbGUoKSBmaW5h
bDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKworICAgIHZvaWQgZGlkRGVsZXRlRXhpc3RpbmdC
dW5kbGVXaXRoRXJyb3IoTlNFcnJvciAqKTsKKworICAgIFJldGFpblB0cjxJWFJlc3RvcmluZ0Rl
bW90ZWRBcHBJbnN0YWxsQ29vcmRpbmF0b3I+IG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yOworICAg
IFJldGFpblB0cjxXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcj4gbV9hcHBJbnN0YWxs
T2JzZXJ2ZXI7CisKKyAgICBTdHJpbmcgbV9vcmlnaW5TdHJpbmc7CisgICAgUmVmUHRyPENsaWVu
dENvbm5lY3Rpb24+IG1fY2xpZW50Q29ubmVjdGlvbjsKKworICAgIFN0cmluZyBtX2J1bmRsZUlk
ZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJQdXNoRAorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL0lDQXBwQnVuZGxlLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0Fw
cEJ1bmRsZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU5N2Q2
NDM1MDkxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBC
dW5kbGUubW0KQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgiCisKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElO
QVRJT05fQlVORExFUykKKworI2ltcG9ydCAiQXBwQnVuZGxlUmVxdWVzdC5oIgorI2ltcG9ydCAi
TGF1bmNoU2VydmljZXNTUEkuaCIKKyNpbXBvcnQgIlB1c2hDbGllbnRDb25uZWN0aW9uLmgiCisj
aW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Db25zb2xl
VHlwZXMuaD4KKyNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CisjaW1wb3J0IDx3
dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK05TU3RyaW5nICpwdXNoQnVuZGxlQXBwTWFuYWdl
bWVudERvbWFpbiA9IEAiY29tLmFwcGxlLldlYktpdC5QdXNoQnVuZGxlcyI7CisKK0BpbnRlcmZh
Y2UgV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgOiBOU09iamVjdCA8SVhBcHBJbnN0
YWxsQ29vcmRpbmF0b3JPYnNlcnZlcj4KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aElDQXBwQnVu
ZGxlOihXZWJQdXNoRDo6SUNBcHBCdW5kbGUmKWljQXBwQnVuZGxlOworQHByb3BlcnR5IFdlYWtQ
dHI8V2ViUHVzaEQ6OklDQXBwQnVuZGxlPiBidW5kbGU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcgorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhJQ0FwcEJ1bmRsZTooV2ViUHVzaEQ6OklDQXBwQnVuZGxlJilpY0FwcEJ1bmRsZQorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgX2J1bmRsZSA9IGljQXBwQnVuZGxlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3NmdWxseToobm9ubnVsbCBJWEFwcEluc3Rh
bGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFwcGxpY2F0aW9uUmVjb3JkOihudWxsYWJs
ZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopYXBwUmVjb3JkCit7CisgICAgY2FsbE9uTWFpblJ1bkxv
b3AoW3NlbGYsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8aWQ+KHNlbGYpXSB7CisgICAgICAg
IGlmIChfYnVuZGxlKQorICAgICAgICAgICAgX2J1bmRsZS0+YnVuZGxlQ3JlYXRpb25TdWNjZWVk
ZWQoKTsKKyAgICB9KTsKK30KKworLSAodm9pZCljb29yZGluYXRvcjoobm9ubnVsbCBJWEFwcElu
c3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGNhbmNlbGVkV2l0aFJlYXNvbjoobm9ubnVs
bCBOU0Vycm9yICopY2FuY2VsUmVhc29uIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWNsaWVu
dAoreworICAgIGNhbGxPbk1haW5SdW5Mb29wKFtzZWxmLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWlu
UHRyPGlkPihzZWxmKSwgcHJvdGVjdGVkQ2FuY2VsUmVhc29uID0gUmV0YWluUHRyPE5TRXJyb3I+
KGNhbmNlbFJlYXNvbildIHsKKyAgICAgICAgaWYgKF9idW5kbGUpCisgICAgICAgICAgICBfYnVu
ZGxlLT5idW5kbGVDcmVhdGlvbkZhaWxlZChwcm90ZWN0ZWRDYW5jZWxSZWFzb24uZ2V0KCkpOwor
ICAgIH0pOworfQorCitAZW5kCisKK3VzaW5nIFBBTDo6Q3J5cHRvRGlnZXN0OworCituYW1lc3Bh
Y2UgV2ViUHVzaEQgeworCitzdGF0aWMgdm9pZCBicm9hZGNhc3REZWJ1Z01lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIERhZW1vbjo6c2luZ2xldG9uKCkuYnJvYWRjYXN0RGVi
dWdNZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJJQ0FwcEJ1bmRs
ZTogIiwgbWVzc2FnZSkpOworfQorCitJQ0FwcEJ1bmRsZTo6SUNBcHBCdW5kbGUoQ2xpZW50Q29u
bmVjdGlvbiYgY2xpZW50Q29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIFB1
c2hBcHBCdW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICA6IFB1c2hBcHBCdW5kbGUoY2xpZW50KQor
ICAgICwgbV9vcmlnaW5TdHJpbmcob3JpZ2luU3RyaW5nKQorICAgICwgbV9jbGllbnRDb25uZWN0
aW9uKCZjbGllbnRDb25uZWN0aW9uKQoreworfQorCitzdGF0aWMgU3RyaW5nIGVuY29kZU9yaWdp
blN0cmluZ0ZvckJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAv
LyBCdW5kbGUgaWRlbnRpZmllcnMgaGF2ZSBleGFjdGx5IDY0IHZhbGlkIGNoYXJhY3RlcnMuCisg
ICAgLy8gYS16LCBBLVosIDAtOSwgJy0nLCBhbmQgJy4nCisgICAgLy8gQmFzZTY0IFVSTCBlbmNv
ZGluZyB1c2VzICctJyBhbmQgJ18nIGZvciB0aGUgZmluYWwgMiBjaGFyYWN0ZXJzCisgICAgLy8g
Rm9yIG91ciBidW5kbGUgaWRlbnRpZmllciwgd2UnbGwgQmFzZTY0IFVSTCBlbmNvZGUgdGhlbiBy
ZXBsYWNlICdfJyB3aXRoICcuJworICAgIC8vIFdlIGFsc28gZ2V0IHJpZCBvZiB0aGUgdHlwaWNh
bCAnPScgcGFkZGluZyBmb3IgYmFzZTY0IGVuY29kaW5nLgorCisgICAgYXV0byBiYXNlNjQgPSBi
YXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihpbnB1dC51dGY4KCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmFzZTY0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChiYXNlNjRbaV0gPT0g
J18nKQorICAgICAgICAgICAgYmFzZTY0W2ldID0gJy4nOworICAgIH0KKworICAgIHNpemVfdCBu
dW1iZXJFcXVhbFNpZ25zID0gMDsKKyAgICBpZiAoYmFzZTY0LnNpemUoKSA+PSAxICYmIGJhc2U2
NC5sYXN0KCkgPT0gJz0nKQorICAgICAgICArK251bWJlckVxdWFsU2lnbnM7CisgICAgaWYgKGJh
c2U2NC5zaXplKCkgPj0gMiAmJiBiYXNlNjRbYmFzZTY0LnNpemUoKSAtIDJdID09ICc9JykKKyAg
ICAgICAgKytudW1iZXJFcXVhbFNpZ25zOworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
YmFzZTY0LmRhdGEoKSwgYmFzZTY0LnNpemUoKSAtIG51bWJlckVxdWFsU2lnbnMpOworfQorCitz
dGF0aWMgU3RyaW5nIG9yaWdpblN0cmluZ0Zyb21FbmNvZGVkQnVuZGxlSWRlbnRpZmllcihjb25z
dCBTdHJpbmcmIGlucHV0KQoreworICAgIGF1dG8gdXRmOCA9IGlucHV0LnV0ZjgoKTsKKyAgICBh
dXRvIGJ1ZmZlciA9IHV0ZjgubXV0YWJsZURhdGEoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHV0ZjgubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoYnVmZmVyW2ldID09ICcuJykK
KyAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICdfJzsKKyAgICB9CisKKyAgICBhdXRvIGRlY29kZWQg
PSBiYXNlNjRVUkxEZWNvZGUoYnVmZmVyLCB1dGY4Lmxlbmd0aCgpKTsKKyAgICBpZiAoIWRlY29k
ZWQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChk
ZWNvZGVkLT5kYXRhKCksIGRlY29kZWQtPnNpemUoKSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgYnVu
ZGxlUHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBob3N0QXBwSWRlbnRp
ZmllcikKK3sKKyAgICBhdXRvIGFwcERpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUo
Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOworICAgIGF1dG8gdXRmOElkZW50aWZp
ZXIgPSBob3N0QXBwSWRlbnRpZmllci51dGY4KCk7CisgICAgYXBwRGlnZXN0LT5hZGRCeXRlcyh1
dGY4SWRlbnRpZmllci5kYXRhKCksIHV0ZjhJZGVudGlmaWVyLmxlbmd0aCgpKTsKKworICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJjb20uYXBwbGUuV2ViS2l0LlB1c2hCdW5kbGUuIiwgYXBwRGlnZXN0
LT50b0hleFN0cmluZygpLCAiLiIpOworfQorCitzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWVGb3JP
cmlnaW5TdHJpbmdBbmRIb3N0QXBwSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIG9yaWdpblN0cmlu
ZywgY29uc3QgU3RyaW5nJiBob3N0QXBwSWRlbnRpZmllcikKK3sKKyAgICAvLyBGSVhNRTogT25j
ZSB3ZSBjYW4gc3RvcmUgdGhlIG9yaWdpbiBzdHJpbmcgd2l0aGluIHRoZSBhcHAgYnVuZGxlLCBo
YXNoIHRoZSBvcmlnaW4gc3RyaW5nIGFzIHdlbGwuCisgICAgLy8gRm9yIG5vdyB3ZSBiYXNlNjQg
ZW5jb2RlIGl0IHRvIG1ha2UgYSB2YWxpZCBidW5kbGUgaWRlbnRpZmllciB0aGF0IGNhcnJpZXMg
dGhlIGluZm9ybWF0aW9uLgorICAgIHJldHVybiBtYWtlU3RyaW5nKGJ1bmRsZVByZWZpeEZvckhv
c3RBcHBJZGVudGlmaWVyKGhvc3RBcHBJZGVudGlmaWVyKSwgZW5jb2RlT3JpZ2luU3RyaW5nRm9y
QnVuZGxlSWRlbnRpZmllcihvcmlnaW5TdHJpbmcpKTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6
Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKENsaWVudENvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOworCisgICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBidW5kbGVJZGVudGlmaWVyUHJlZml4ID0gKE5TU3RyaW5nICopYnVuZGxl
UHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIoY29ubmVjdGlvbi5ob3N0QXBwQ29kZVNpZ25pbmdJ
ZGVudGlmaWVyKCkpOworCisgICAgTFNFbnVtZXJhdG9yPExTQXBwbGljYXRpb25SZWNvcmQgKj4g
KmVudW1lcmF0b3IgPSBbTFNBcHBsaWNhdGlvblJlY29yZCBlbnVtZXJhdG9yV2l0aE9wdGlvbnM6
TFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9uc0VudW1lcmF0ZVBsYWNlaG9sZGVyc107Cisg
ICAgZm9yIChMU0FwcGxpY2F0aW9uUmVjb3JkICpyZWNvcmQgPSBbZW51bWVyYXRvciBuZXh0T2Jq
ZWN0XTsgcmVjb3JkOyByZWNvcmQgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAg
ICBpZiAoIVtyZWNvcmQubWFuYWdlbWVudERvbWFpbiBpc0VxdWFsVG9TdHJpbmc6cHVzaEJ1bmRs
ZUFwcE1hbmFnZW1lbnREb21haW5dKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCFbcmVjb3JkLmJ1bmRsZUlkZW50aWZpZXIgaGFzUHJlZml4OmJ1bmRsZUlkZW50aWZpZXJQ
cmVmaXguZ2V0KCldKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRklYTUU6
IEZvciBub3cgd2Ugc3RvcmUgdGhlIG9yaWdpbiBzdHJpbmcgaW4gdGhlIGJ1bmRsZSBpZGVudGlm
aWVyIGJhc2U2NCBlbmNvZGVkCisgICAgICAgIC8vIE9uY2Ugd2Ugc3RvcmUgaXQgaW4gdGhlIGJ1
bmRsZSBpdHNlbGYsIHdlJ2xsIGhhc2ggdGhlIG9yaWdpbiBzdHJpbmcgaW4gdGhlIGJ1bmRsZSBp
ZGVudGlmaWVyIGFuZCBleHRyYWN0IGl0IGZyb20gdGhlIGJ1bmRsZQorCisgICAgICAgIE5TQXJy
YXkgKmNvbXBvbmVudHMgPSBbcmVjb3JkLmJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFy
YXRlZEJ5U3RyaW5nOmJ1bmRsZUlkZW50aWZpZXJQcmVmaXguZ2V0KCldOworICAgICAgICBBU1NF
UlQoY29tcG9uZW50cy5jb3VudCA+PSAyKTsKKworICAgICAgICBhdXRvIG9yaWdpblN0cmluZyA9
IG9yaWdpblN0cmluZ0Zyb21FbmNvZGVkQnVuZGxlSWRlbnRpZmllcihjb21wb25lbnRzWzFdKTsK
KyAgICAgICAgaWYgKG9yaWdpblN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICByZXN1bHRzLmFwcGVuZChvcmlnaW5TdHJpbmcpOworICAgIH0KKyAgICAK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHRzKTsKK30KKworY29uc3QgU3RyaW5nJiBJQ0Fw
cEJ1bmRsZTo6Z2V0QnVuZGxlSWRlbnRpZmllcigpCit7CisgICAgaWYgKG1fYnVuZGxlSWRlbnRp
Zmllci5pc0VtcHR5KCkgJiYgbV9jbGllbnRDb25uZWN0aW9uKQorICAgICAgICBtX2J1bmRsZUlk
ZW50aWZpZXIgPSBidW5kbGVOYW1lRm9yT3JpZ2luU3RyaW5nQW5kSG9zdEFwcElkZW50aWZpZXIo
bV9vcmlnaW5TdHJpbmcsIG1fY2xpZW50Q29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRl
bnRpZmllcigpKTsKKworICAgIHJldHVybiBtX2J1bmRsZUlkZW50aWZpZXI7Cit9CisKK3ZvaWQg
SUNBcHBCdW5kbGU6OmNoZWNrRm9yRXhpc3RpbmdCdW5kbGUoKQoreworICAgIE5TRXJyb3IgKmVy
cm9yID0gbmlsOworICAgIFJldGFpblB0cjxMU0FwcGxpY2F0aW9uUmVjb3JkPiBhcHBSZWNvcmQg
PSBhZG9wdE5TKFtbTFNBcHBsaWNhdGlvblJlY29yZCBhbGxvY10gaW5pdFdpdGhCdW5kbGVJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWdldEJ1bmRsZUlkZW50aWZpZXIoKSBhbGxvd1BsYWNlaG9sZGVy
OllFUyBlcnJvcjomZXJyb3JdKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGll
bnQtPmRpZENoZWNrRm9yRXhpc3RpbmdCdW5kbGUoKnRoaXMsIGFwcFJlY29yZCA/IFB1c2hBcHBC
dW5kbGVFeGlzdHM6OlllcyA6IFB1c2hBcHBCdW5kbGVFeGlzdHM6Ok5vKTsKK30KKwordm9pZCBJ
Q0FwcEJ1bmRsZTo6ZGVsZXRlRXhpc3RpbmdCdW5kbGUoKQoreworICAgIFtJWEFwcEluc3RhbGxD
b29yZGluYXRvciB1bmluc3RhbGxBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopZ2V0QnVuZGxl
SWRlbnRpZmllcigpIHJlcXVlc3RVc2VyQ29uZmlybWF0aW9uOk5PIGNvbXBsZXRpb246W3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSAoTlNFcnJvciAqZXJyb3IpIHsKKyAgICAg
ICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
LCBlcnJvciA9IFJldGFpblB0cjxOU0Vycm9yPihlcnJvcildIHsKKyAgICAgICAgICAgIGRpZERl
bGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKGVycm9yLmdldCgpKTsKKyAgICAgICAgfSk7Cisg
ICAgfV07Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0
aEVycm9yKE5TRXJyb3IgKmVycm9yKQoreworICAgIGlmIChlcnJvcikKKyAgICAgICAgYnJvYWRj
YXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkVycm9yIGRlbGV0aW5nIGV4aXN0aW5nIGJ1bmRs
ZTogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5kaWREZWxldGVFeGlzdGluZ0J1bmRsZVdpdGhFcnJvcigqdGhp
cywgZXJyb3IpOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpzdG9wKCkKK3sKKyAgICBtX2FwcElu
c3RhbGxDb29yZGluYXRvci5nZXQoKS5vYnNlcnZlciA9IG5pbDsKKyAgICBtX2FwcEluc3RhbGxD
b29yZGluYXRvciA9IG5pbDsKKyAgICBtX2FwcEluc3RhbGxPYnNlcnZlciA9IG5pbDsKK30KKwor
dm9pZCBJQ0FwcEJ1bmRsZTo6Y3JlYXRlQnVuZGxlKCkKK3sKKyAgICBSZXRhaW5QdHI8TlNTdHJp
bmc+IGJ1bmRsZUlkZW50aWZpZXIgPSAoTlNTdHJpbmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCk7
CisKKyAgICAvLyBDYW5jZWwgYW55IHByZXZpb3VzIGluc3RhbGwgY29vcmRpbmF0b3IgdGhhdCBt
aWdodCd2ZSBiZWVuIGxlZnQgaGFuZ2luZyBpbiBhIHBhcnRpYWxseSBmaW5pc2hlZCBzdGF0ZQor
ICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIFtJWEFwcEluc3RhbGxDb29yZGluYXRvciBj
YW5jZWxDb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgp
IHdpdGhSZWFzb246W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiV0tFcnJvckRvbWFpbiIgY29k
ZToxIHVzZXJJbmZvOm5pbF0gY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZXJy
b3I6JmVycm9yXTsKKworICAgIEJPT0wgY3JlYXRlZCA9IE5POworICAgIGVycm9yID0gbmlsOwor
ICAgIG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yID0gW0lYUmVzdG9yaW5nRGVtb3RlZEFwcEluc3Rh
bGxDb29yZGluYXRvciBjb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDpidW5kbGVJZGVudGlm
aWVyLmdldCgpIHdpdGhDbGllbnRJRDpJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yIGNyZWF0
ZUlmTm90RXhpc3Rpbmc6WUVTIGNyZWF0ZWQ6JmNyZWF0ZWQgZXJyb3I6JmVycm9yXTsKKworICAg
IGlmICghbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3IgfHwgZXJyb3IpIHsKKyAgICAgICAgYnJvYWRj
YXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIlVuYWJsZSB0byBjcmVhdGUgaW5zdGFsbCBjb29y
ZGluYXRpb3IgZm9yIGFwcCBidW5kbGUgaWRlbnRpZmllciAiLCBTdHJpbmcoYnVuZGxlSWRlbnRp
Zmllci5nZXQoKSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjcmVhdGVkKSB7CisgICAgICAgIGJyb2Fk
Y2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJFeGlzdGluZyBpbnN0YWxsIGNvb3JkaW5hdGlv
ciBmb3IgYXBwIGJ1bmRsZSBpZGVudGlmaWVyICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdl
dCgpKSwgIiB3YXMgZm91bmQuIFRoaXMgaXMgdW5leHBlY3RlZC4iKSk7CisgICAgICAgIGJ1bmRs
ZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
YXBwSW5zdGFsbE9ic2VydmVyID0gYWRvcHROUyhbW1dlYkFwcEluc3RhbGxDb29yZGluYXRvck9i
c2VydmVyIGFsbG9jXSBpbml0V2l0aElDQXBwQnVuZGxlOip0aGlzXSk7CisgICAgbV9hcHBJbnN0
YWxsQ29vcmRpbmF0b3IuZ2V0KCkub2JzZXJ2ZXIgPSBtX2FwcEluc3RhbGxPYnNlcnZlci5nZXQo
KTsKKworICAgIFJldGFpblB0cjxJWFBsYWNlaG9sZGVyPiBwbGFjZWhvbGRlciA9IGFkb3B0TlMo
W1tJWFBsYWNlaG9sZGVyIGFsbG9jXSBpbml0QXBwUGxhY2Vob2xkZXJXaXRoQnVuZGxlTmFtZToo
TlNTdHJpbmcgKiltX29yaWdpblN0cmluZyBidW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgp
IGluc3RhbGxUeXBlOkxTSW5zdGFsbFR5cGVJbnRlbnRpb25hbERvd25ncmFkZSBjbGllbnQ6SVhD
bGllbnRJZGVudGlmaWVyQXBwbGllZEZvcl0pOworCisgICAgUmV0YWluUHRyPElYUGxhY2Vob2xk
ZXJBdHRyaWJ1dGVzPiBwbGFjZWhvbGRlckF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtJWFBsYWNlaG9s
ZGVyQXR0cmlidXRlcyBuZXddKTsKKyAgICBwbGFjZWhvbGRlckF0dHJpYnV0ZXMuZ2V0KCkubGF1
bmNoUHJvaGliaXRlZCA9IFlFUzsKKworICAgIFtwbGFjZWhvbGRlciBzZXRQbGFjZWhvbGRlckF0
dHJpYnV0ZXM6cGxhY2Vob2xkZXJBdHRyaWJ1dGVzLmdldCgpIGVycm9yOiZlcnJvcl07CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJV
bmFibGUgdG8gc2V0IHBsYWNlaG9sZGVyIGF0dHJpYnV0ZXMgZm9yIGJ1bmRsZSAiLCBTdHJpbmco
YnVuZGxlSWRlbnRpZmllci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3Jp
cHRpb25dKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBOU0RpY3Rpb25hcnkgKmVudGl0bGVtZW50c0RpY3Rpb25h
cnkgPSBAeworICAgICAgICBAImNvbS5hcHBsZS5wcml2YXRlLnVzZXJub3RpZmljYXRpb25zLmJ1
bmRsZS1pZGVudGlmaWVycyI6IGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCksCisgICAgICAgIEAiY29t
LmFwcGxlLnByaXZhdGUudXNlcm5vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9uLXNpbXVsYXRvciI6
IEBZRVMsCisgICAgICAgIEAiY29tLmFwcGxlLmRldmVsb3Blci5hcHAtbWFuYWdlbWVudC1kb21h
aW4iOiBwdXNoQnVuZGxlQXBwTWFuYWdlbWVudERvbWFpbgorICAgIH07CisgICAgUmV0YWluUHRy
PElYUHJvbWlzZWRJbk1lbW9yeURpY3Rpb25hcnk+IGVudGl0bGVtZW50c1Byb21pc2UgPSBhZG9w
dE5TKFtbSVhQcm9taXNlZEluTWVtb3J5RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhOYW1lOltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRW50aXRsZW1lbnRzIFByb21pc2UgZm9yICVAIiwg
YnVuZGxlSWRlbnRpZmllci5nZXQoKV0gY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRG
b3IgZGljdGlvbmFyeTplbnRpdGxlbWVudHNEaWN0aW9uYXJ5XSk7CisKKyAgICBpZiAoIWVudGl0
bGVtZW50c1Byb21pc2UpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJp
bmcoIlVuYWJsZSB0byBjcmVhdGUgcGxhY2Vob2xkZXIgZW50aXRsZW1lbnRzIHByb21pc2UgZm9y
IGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQoKSkpKTsKKyAgICAgICAgYnVu
ZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZXJyb3IgPSBuaWw7CisgICAgaWYgKCFbcGxhY2Vob2xkZXIgc2V0RW50aXRsZW1lbnRzUHJvbWlz
ZTplbnRpdGxlbWVudHNQcm9taXNlLmdldCgpIGVycm9yOiZlcnJvcl0gfHwgZXJyb3IpIHsKKyAg
ICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBzZXQgcGxh
Y2Vob2xkZXIgZW50aXRsZW1lbnRzIHByb21pc2UgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxl
SWRlbnRpZmllci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRpb25d
KSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBCT09MIHJlc3VsdCA9IFtwbGFjZWhvbGRlciBzZXRDb25maWd1cmF0
aW9uQ29tcGxldGVXaXRoRXJyb3I6JmVycm9yXTsKKyAgICBpZiAoIXJlc3VsdCB8fCBlcnJvcikg
eworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNl
dCBwbGFjZWhvbGRlciBlbnRpdGxlbWVudHMgcHJvbWlzZSBjb21wbGV0ZSBmb3IgYnVuZGxlICIs
IFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJv
ciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX2FwcEluc3RhbGxDb29yZGluYXRvciBz
ZXRQbGFjZWhvbGRlclByb21pc2U6cGxhY2Vob2xkZXIuZ2V0KCkgZXJyb3I6JmVycm9yXTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmco
IkZhaWxlZCB0byBzZXQgcGxhY2Vob2xkZXIgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhi
dW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlw
dGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJldGFpblB0cjxJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNm
ZXI+IGRhdGFQcm9taXNlID0gYWRvcHROUyhbW0lYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciBh
bGxvY10gaW5pdFdpdGhOYW1lOkAiRW1wdHkgdXNlciBkYXRhIHByb21pc2UiIGNsaWVudDpJWENs
aWVudElkZW50aWZpZXJBcHBsaWVkRm9yIGRpc2tTcGFjZU5lZWRlZDowXSk7CisgICAgZGF0YVBy
b21pc2UuZ2V0KCkucGVyY2VudENvbXBsZXRlID0gMS4wOworICAgIGRhdGFQcm9taXNlLmdldCgp
LmNvbXBsZXRlID0gWUVTOworCisgICAgW21fYXBwSW5zdGFsbENvb3JkaW5hdG9yIHNldFVzZXJE
YXRhUHJvbWlzZTpkYXRhUHJvbWlzZS5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRv
IHNldCB1c2VyIGRhdGEgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlm
aWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7Cisg
ICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6YnVuZGxlQ3JlYXRpb25TdWNjZWVkZWQoKQorewor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENyZWF0ZUFwcEJ1bmRsZSgq
dGhpcywgUHVzaEFwcEJ1bmRsZUNyZWF0aW9uUmVzdWx0OjpTdWNjZXNzKTsKKworfQorCit2b2lk
IElDQXBwQnVuZGxlOjpidW5kbGVDcmVhdGlvbkZhaWxlZChOU0Vycm9yICplcnJvcikKK3sKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDcmVhdGVBcHBCdW5kbGUoKnRo
aXMsIFB1c2hBcHBCdW5kbGVDcmVhdGlvblJlc3VsdDo6RmFpbHVyZSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYlB1c2hECisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05f
QlVORExFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSW5zdGFsbENvb3Jk
aW5hdGlvblNQSS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JbnN0YWxsQ29vcmRpbmF0aW9u
U1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMDZkNzBmODFm
NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0luc3RhbGxDb29y
ZGluYXRpb25TUEkuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9S
TShJT1MpCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworI2ltcG9ydCA8SW5zdGFsbENv
b3JkaW5hdGlvbi9JWEFwcEluc3RhbGxDb29yZGluYXRvci5oPgorI2ltcG9ydCA8SW5zdGFsbENv
b3JkaW5hdGlvbi9JbnN0YWxsQ29vcmRpbmF0aW9uLmg+CisKKyNlbHNlCisKKyNpbmNsdWRlICJM
YXVuY2hTZXJ2aWNlc1NQSS5oIgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCit0eXBlZGVm
IGVudW0gOiBOU1VJbnRlZ2VyIHsKK30gSVhDb29yZGluYXRvclByb2dyZXNzUGhhc2U7CisKK3R5
cGVkZWYgZW51bSA6IE5TVUludGVnZXIgeworICAgIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yUGxh
Y2Vob2xkZXJQcm9taXNlID0gMSwKK30gSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JQcm9taXNlSWRl
bnRpZmllcjsKKwordHlwZWRlZiBlbnVtIDogTlNVSW50ZWdlciB7CisgICAgSVhDbGllbnRJZGVu
dGlmaWVyQXBwbGllZEZvciA9IDE5LAorfSBJWENsaWVudElkZW50aWZpZXI7CisKK0BjbGFzcyBM
U0FwcGxpY2F0aW9uUmVjb3JkOworQGNsYXNzIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yOworQGNs
YXNzIElYUGxhY2Vob2xkZXI7CitAY2xhc3MgSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyOwor
CitAcHJvdG9jb2wgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlciA8TlNPYmplY3Q+CitA
b3B0aW9uYWwKKy0gKHZvaWQpY29vcmRpbmF0b3JEaWRSZWdpc3RlckZvck9ic2VydmF0aW9uOihu
b25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7CistICh2b2lkKWNv
b3JkaW5hdG9yU2hvdWxkUHJpb3JpdGl6ZToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRv
ciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29yZGluYXRvclNob3VsZFJlc3VtZToobm9ubnVs
bCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29yZGlu
YXRvclNob3VsZFBhdXNlOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRp
bmF0b3I7CistICh2b2lkKWNvb3JkaW5hdG9yOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5h
dG9yICopY29vcmRpbmF0b3IgZGlkVXBkYXRlUHJvZ3Jlc3M6KGRvdWJsZSlwZXJjZW50Q29tcGxl
dGUgZm9yUGhhc2U6KElYQ29vcmRpbmF0b3JQcm9ncmVzc1BoYXNlKXBoYXNlIG92ZXJhbGxQcm9n
cmVzczooZG91YmxlKW92ZXJhbGxQcm9ncmVzczsKKy0gKHZvaWQpY29vcmRpbmF0b3JEaWRDb21w
bGV0ZVN1Y2Nlc3NmdWxseToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3Jk
aW5hdG9yIGZvckFwcGxpY2F0aW9uUmVjb3JkOihudWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3Jk
ICopYXBwUmVjb3JkOworLSAodm9pZCljb29yZGluYXRvckRpZEluc3RhbGxQbGFjZWhvbGRlcjoo
bm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFwcGxpY2F0
aW9uUmVjb3JkOihudWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopcGxhY2Vob2xkZXJSZWNv
cmQ7CistICh2b2lkKWNvb3JkaW5hdG9yOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9y
ICopY29vcmRpbmF0b3IgY2FuY2VsZWRXaXRoUmVhc29uOihub25udWxsIE5TRXJyb3IgKiljYW5j
ZWxSZWFzb24gY2xpZW50OihJWENsaWVudElkZW50aWZpZXIpY2xpZW50OworQGVuZAorCit0eXBl
ZGVmIHZvaWQgKF5JWEFwcEluc3RhbGxDb29yZGluYXRvckVycm9yQ29tcGxldGlvbikoTlNFcnJv
ciAqIF9OdWxsYWJsZSBlcnJvcik7CisKK0BpbnRlcmZhY2UgSVhBcHBJbnN0YWxsQ29vcmRpbmF0
b3IKKysgKHZvaWQpdW5pbnN0YWxsQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlE
IHJlcXVlc3RVc2VyQ29uZmlybWF0aW9uOihCT09MKXJlcXVlc3RVc2VyQ29uZmlybWF0aW9uIGNv
bXBsZXRpb246KElYQXBwSW5zdGFsbENvb3JkaW5hdG9yRXJyb3JDb21wbGV0aW9uKWNvbXBsZXRp
b247CisrIChCT09MKWNhbmNlbENvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmlu
ZyAqKWJ1bmRsZUlEIHdpdGhSZWFzb246KE5TRXJyb3IgKiljYW5jZWxSZWFzb24gY2xpZW50OihJ
WENsaWVudElkZW50aWZpZXIpY2xpZW50IGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKKysg
KGluc3RhbmNldHlwZSljb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcgKili
dW5kbGVJRCB3aXRoQ2xpZW50SUQ6KElYQ2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBjcmVhdGVJ
Zk5vdEV4aXN0aW5nOihCT09MKWNyZWF0ZSBjcmVhdGVkOihCT09MICopb3V0X2NyZWF0ZWQgZXJy
b3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworQHByb3BlcnR5IChub25hdG9taWMsIG51bGxhYmxl
LCB3ZWFrKSBpZDxJWEFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyPiBvYnNlcnZlcjsKKy0g
KEJPT0wpc2V0UGxhY2Vob2xkZXJQcm9taXNlOihJWFBsYWNlaG9sZGVyICopcGxhY2Vob2xkZXJQ
cm9taXNlIGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKKy0gKEJPT0wpc2V0VXNlckRhdGFQ
cm9taXNlOihJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXIgKil1c2VyRGF0YSBlcnJvcjooTlNF
cnJvciAqKilvdXRfZXJyb3I7CitAZW5kCisKK0BpbnRlcmZhY2UgSVhSZXN0b3JpbmdEZW1vdGVk
QXBwSW5zdGFsbENvb3JkaW5hdG9yIDogSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IKK0BlbmQKKwor
QGludGVyZmFjZSBJWE93bmVkRGF0YVByb21pc2UgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJm
YWNlIElYUHJvbWlzZWRJbk1lbW9yeURpY3Rpb25hcnkgOiBJWE93bmVkRGF0YVByb21pc2UKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBjbGllbnQ6KElYQ2xp
ZW50SWRlbnRpZmllcilpZGVudGl0eSBkaWN0aW9uYXJ5OihOU0RpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5OworQGVuZAorCitAaW50ZXJmYWNlIElYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzIDogTlNPYmpl
Y3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGxhdW5jaFByb2hpYml0ZWQ7CitAZW5kCisK
K0BpbnRlcmZhY2UgSVhQbGFjZWhvbGRlciA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5p
dEFwcFBsYWNlaG9sZGVyV2l0aEJ1bmRsZU5hbWU6KE5TU3RyaW5nICopbmFtZSBidW5kbGVJRDoo
TlNTdHJpbmcgKilidW5kbGVJRCBpbnN0YWxsVHlwZTooTFNJbnN0YWxsVHlwZSlpbnN0YWxsVHlw
ZSBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBOU19ERVNJR05BVEVEX0lOSVRJ
QUxJWkVSOworLSAoQk9PTClzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZXM6KG5vbm51bGwgSVhQbGFj
ZWhvbGRlckF0dHJpYnV0ZXMgKilhdHRyaWJ1dGVzIGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJv
cjsKKy0gKEJPT0wpc2V0RW50aXRsZW1lbnRzUHJvbWlzZToobm9ubnVsbCBJWE93bmVkRGF0YVBy
b21pc2UgKillbnRpdGxlbWVudHMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgX051
bGxhYmxlICogX051bGxhYmxlKW91dF9lcnJvcjsKKy0gKEJPT0wpc2V0Q29uZmlndXJhdGlvbkNv
bXBsZXRlV2l0aEVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKK0BlbmQKKworQGludGVyZmFj
ZSBJWE9wYXF1ZURhdGFQcm9taXNlIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBJWFBy
b21pc2VkT3V0T2ZCYW5kVHJhbnNmZXIgOiBJWE9wYXF1ZURhdGFQcm9taXNlCitAcHJvcGVydHkg
KG5vbmF0b21pYykgQk9PTCBjb21wbGV0ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBkb3VibGUg
cGVyY2VudENvbXBsZXRlOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcg
KiluYW1lIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWlkZW50aXR5IGRpc2tTcGFjZU5lZWRl
ZDoodWludDY0X3QpdG90YWxCeXRlczsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisK
KyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEku
aCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhlZWUxMDhkZGEwYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaApAQCAtMCww
ICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKyNpZiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQorCisvLyBUaGlzIHNwYWNlIGludGVudGlvbmFsbHkgbGVmdCBibGFuawor
CisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCit0eXBlZGVmIE5TX0VOVU0oTlNV
SW50ZWdlciwgTFNJbnN0YWxsVHlwZSkgeworICAgIExTSW5zdGFsbFR5cGVJbnRlbnRpb25hbERv
d25ncmFkZSA9IDgKK307CisKK0BpbnRlcmZhY2UgTFNSZWNvcmQgOiBOU09iamVjdAorQGVuZAor
CitAaW50ZXJmYWNlIExTQnVuZGxlUmVjb3JkIDogTFNSZWNvcmQKK0Bwcm9wZXJ0eSAocmVhZG9u
bHksIG51bGxhYmxlKSBOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllcjsKK0BlbmQKKworQGludGVy
ZmFjZSBMU0FwcGxpY2F0aW9uUmVjb3JkIDogTFNCdW5kbGVSZWNvcmQKK0Bwcm9wZXJ0eSAocmVh
ZG9ubHkpIEJPT0wgcGxhY2Vob2xkZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1N0cmluZyAq
bWFuYWdlbWVudERvbWFpbjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQnVuZGxlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilidW5kbGVJZGVudGlmaWVyIGFsbG93UGxhY2Vob2xkZXI6KEJPT0wp
YWxsb3dQbGFjZWhvbGRlciBlcnJvcjooTlNFcnJvciAqKilvdXRFcnJvcjsKK0BlbmQKKworQGlu
dGVyZmFjZSBMU0VudW1lcmF0b3I8X19jb3ZhcmlhbnQgT2JqZWN0VHlwZT4gOiBOU0VudW1lcmF0
b3I8T2JqZWN0VHlwZT4KK0BlbmQKKwordHlwZWRlZiBOU19PUFRJT05TKHVpbnQ2NF90LCBMU0Fw
cGxpY2F0aW9uRW51bWVyYXRpb25PcHRpb25zKSB7CisgICAgTFNBcHBsaWNhdGlvbkVudW1lcmF0
aW9uT3B0aW9uc0VudW1lcmF0ZVBsYWNlaG9sZGVycyA9ICgxIDw8IDYpCit9OworCitAaW50ZXJm
YWNlIExTQXBwbGljYXRpb25SZWNvcmQgKEVudW1lcmF0aW9uKQorKyAoTFNFbnVtZXJhdG9yPExT
QXBwbGljYXRpb25SZWNvcmQgKj4gKillbnVtZXJhdG9yV2l0aE9wdGlvbnM6KExTQXBwbGljYXRp
b25FbnVtZXJhdGlvbk9wdGlvbnMpb3B0aW9uczsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExf
RU5ECisKKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRs
ZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmgKaW5kZXggOGE2ZDU3
Y2M2ZjViLi5lOTg1ZTMyMTAxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
UHVzaEFwcEJ1bmRsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRs
ZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogQGNs
YXNzIE5TRXJyb3I7CiAKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDcmVhdGVBcHBCdW5kbGUoUHVzaEFwcEJ1bmRsZSYsIFB1c2hBcHBCdW5kbGVDcmVhdGlv
blJlc3VsdCkgPSAwOwogfTsKIAotY2xhc3MgUHVzaEFwcEJ1bmRsZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFB1c2hBcHBCdW5kbGU+IHsKK2NsYXNzIFB1c2hBcHBCdW5kbGUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8UHVzaEFwcEJ1bmRsZT4gewogcHVibGljOgogICAgIHZpcnR1YWwgflB1
c2hBcHBCdW5kbGUoKTsKICAgICB2b2lkIGRldGFjaEZyb21DbGllbnQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbSBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQppbmRleCAzYjc4ZjI5MGMyN2UuLjAyZGJjZDc4ZDUy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtMzEsNiArMzEs
NyBAQAogI2ltcG9ydCAiRGFlbW9uRW5jb2Rlci5oIgogI2ltcG9ydCAiRGFlbW9uVXRpbGl0aWVz
LmgiCiAjaW1wb3J0ICJIYW5kbGVNZXNzYWdlLmgiCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgog
I2ltcG9ydCAiTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5LmgiCiAKICNpbXBvcnQgPHd0Zi9Db21wbGV0
aW9uSGFuZGxlci5oPgpAQCAtMjcwLDggKzI3MSwxMSBAQCB2b2lkIERhZW1vbjo6Z2V0T3JpZ2lu
c1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoQ2xpZW50Q29ubmVjdGlvbiogY29u
bgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVk
IHBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBmb3IgcmVhbCB3b3JsZCBidW5kbGVz
IG9uY2UgaW1wbGVtZW50ZWQuCi0gICAgcmVwbHlTZW5kZXIoeyB9KTsKKyNpZiBFTkFCTEUoSU5T
VEFMTF9DT09SRElOQVRJT05fQlVORExFUykKKyAgICBJQ0FwcEJ1bmRsZTo6Z2V0T3JpZ2luc1dp
dGhSZWdpc3RyYXRpb25zKCpjb25uZWN0aW9uLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisjZWxz
ZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKIH0KIAogdm9pZCBE
YWVtb246OmRlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oQ2xpZW50Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgcmVwbHlTZW5kZXIpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjQwNjViZDg1NWFmLi5lN2Q0
ZWFhMzcwZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFuIEluc3RhbGxDb29yZGluYXRpb24gd2VicHVzaGQg
YmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMzNzE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW06CisKIDIw
MjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBXS1dlYnNpdGVEYXRhU3RvcmUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIE1vY2sg
YXBwIGJ1bmRsZSB0ZXN0aW5nLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IGQ4NzEyYjA0MDUxNi4uMTYxMmFl
NDgwMTc0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dlYlB1c2hEYWVtb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJQdXNoRGFlbW9uLm1tCkBAIC0zMzAsNiArMzMwLDk4IEBAIFRFU1QoV2ViUHVzaEQs
IFBlcm1pc3Npb25NYW5hZ2VtZW50KQogICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVj
dG9yeSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgdm9pZCBkZWxldGVBbGxSZWdp
c3RyYXRpb25zRm9yRGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3JlKQorewor
ICAgIF9fYmxvY2sgYm9vbCBvcmlnaW5PcGVyYXRpb25Eb25lID0gZmFsc2U7CisgICAgX19ibG9j
ayBSZXRhaW5QdHI8TlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPj4gb3JpZ2luU2V0OworICAgIFtk
YXRhU3RvcmUgX2dldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOl4o
TlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPiAqb3JpZ2lucykgeworICAgICAgICBvcmlnaW5TZXQg
PSBvcmlnaW5zOworICAgICAgICBvcmlnaW5PcGVyYXRpb25Eb25lID0gdHJ1ZTsKKyAgICB9XTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCisg
ICAgaWYgKCFbb3JpZ2luU2V0IGNvdW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX19ibG9j
ayBzaXplX3QgZGVsZXRlZE9yaWdpbnMgPSAwOworICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSBm
YWxzZTsKKyAgICBmb3IgKFdLU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiBpbiBvcmlnaW5TZXQuZ2V0
KCkpIHsKKyAgICAgICAgW2RhdGFTdG9yZSBfZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lz
dHJhdGlvbjpvcmlnaW4gY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAg
ICAgICAgICAgRVhQRUNUX0ZBTFNFKCEhZXJyb3IpOworICAgICAgICAgICAgaWYgKCsrZGVsZXRl
ZE9yaWdpbnMgPT0gW29yaWdpblNldCBjb3VudF0pCisgICAgICAgICAgICAgICAgb3JpZ2luT3Bl
cmF0aW9uRG9uZSA9IHRydWU7CisgICAgICAgIH1dOworICAgIH0KKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCisgICAgb3JpZ2luT3BlcmF0aW9u
RG9uZSA9IGZhbHNlOworICAgIFtkYXRhU3RvcmUgX2dldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlm
aWNhdGlvblBlcm1pc3Npb25zOl4oTlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPiAqb3JpZ2lucykg
eworICAgICAgICBFWFBFQ1RfRVEoW29yaWdpbnMgY291bnRdLCAwdSk7CisgICAgICAgIG9yaWdp
bk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmb3JpZ2luT3BlcmF0aW9uRG9uZSk7CisKK30KKworVEVTVChXZWJQdXNoRCwgSW5zdGFs
bENvb3JkaW5hdGlvbkJ1bmRsZXMpCit7CisgICAgTlNVUkwgKnRlbXBEaXJlY3RvcnkgPSBzZXRV
cFRlc3RXZWJQdXNoRCgpOworCisgICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRv
cHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgZGF0YVN0
b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoTWFjaFNlcnZpY2VOYW1lID0gQCJvcmcud2Vi
a2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiOworICAgIGF1dG8gZGF0YVN0b3JlID0gYWRv
cHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpk
YXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBkZWxldGVBbGxSZWdpc3RyYXRp
b25zRm9yRGF0YVN0b3JlKGRhdGFTdG9yZS5nZXQoKSk7CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAg
IGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IGRhdGFTdG9yZS5nZXQoKTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcmVmZXJlbmNlcyBfc2V0Tm90aWZpY2F0aW9uc0Vu
YWJsZWQ6WUVTXTsKKyAgICBmb3IgKF9XS0V4cGVyaW1lbnRhbEZlYXR1cmUgKmZlYXR1cmUgaW4g
W1dLUHJlZmVyZW5jZXMgX2V4cGVyaW1lbnRhbEZlYXR1cmVzXSkgeworICAgICAgICBpZiAoW2Zl
YXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIkJ1aWx0SW5Ob3RpZmljYXRpb25zRW5hYmxlZCJd
KQorICAgICAgICAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZ
RVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICB9CisKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9w
dE5TKFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJh
dGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVz
dGluZyJdOworCisgICAgW2hhbmRsZXIgc2V0U3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlcjpeKFdL
V2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgYXV0byByZXNw
b25zZSA9IGFkb3B0TlMoW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJl
cXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0
ZXh0RW5jb2RpbmdOYW1lOm5pbF0pOworICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6
cmVzcG9uc2UuZ2V0KCldOworICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRh
dGFXaXRoQnl0ZXM6bWFpbkJ5dGVzIGxlbmd0aDpzdHJsZW4obWFpbkJ5dGVzKV1dOworICAgICAg
ICBbdGFzayBkaWRGaW5pc2hdOworICAgIH1dOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgYXV0byB1
aURlbGVnYXRlID0gYWRvcHROUyhbW05vdGlmaWNhdGlvblBlcm1pc3Npb25EZWxlZ2F0ZSBhbGxv
Y10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdhdGU6dWlEZWxlZ2F0ZS5nZXQoKV07
CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdGluZzovL21haW4vaW5kZXguaHRtbCJdXV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZhbGVydFJlY2VpdmVkKTsKKworICAgIGFsZXJ0
UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdGluZzovL3NlY29uZGFy
eS9pbmRleC5odG1sIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmFsZXJ0UmVj
ZWl2ZWQpOworCisgICAgc3RhdGljIGJvb2wgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPj4gb3JpZ2luczsK
KyAgICBbZGF0YVN0b3JlIF9nZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNz
aW9uczpeKE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4gKnJhd09yaWdpbnMpIHsKKyAgICAgICAg
RVhQRUNUX0VRKFtyYXdPcmlnaW5zIGNvdW50XSwgMnUpOworICAgICAgICBvcmlnaW5zID0gcmF3
T3JpZ2luczsKKyAgICAgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZvcmlnaW5PcGVyYXRpb25Eb25lKTsKKworICAg
IGZvciAoV0tTZWN1cml0eU9yaWdpbiAqb3JpZ2luIGluIG9yaWdpbnMuZ2V0KCkpIHsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoW29yaWdpbi5wcm90b2NvbCBpc0VxdWFsVG9TdHJpbmc6QCJ0ZXN0aW5n
Il0pOworICAgICAgICBFWFBFQ1RfVFJVRShbb3JpZ2luLmhvc3QgaXNFcXVhbFRvU3RyaW5nOkAi
bWFpbiJdIHx8IFtvcmlnaW4uaG9zdCBpc0VxdWFsVG9TdHJpbmc6QCJzZWNvbmRhcnkiXSk7Cisg
ICAgfQorCisgICAgZGVsZXRlQWxsUmVnaXN0cmF0aW9uc0ZvckRhdGFTdG9yZShkYXRhU3RvcmUu
Z2V0KCkpOworICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVjdG9yeSk7Cit9CisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNl
bmRpZiAvLyBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykK
</data>
<flag name="commit-queue"
          id="470883"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445661</attachid>
            <date>2021-12-01 20:11:34 -0800</date>
            <delta_ts>2021-12-01 21:01:32 -0800</delta_ts>
            <desc>Patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>50527</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzExZmJlMDhmMDczLi4yZjE1Yzk0Yjc1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlQ29j
b2EuaDoKKwogMjAyMS0xMi0wMSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIGEgcnVudGltZSBmbGFnIHRvIGVuYWJsZSBDU1MgVHJhbnNmb3Jt
cyBMZXZlbCAyIHNwZWMgY29tcGxpYW50IGJlaGF2aW9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZUNvY29hLmgKaW5kZXggYWU5MmJlZTk4NjA0Li44MGZjODAzMzE0ZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUVuYWJsZUNvY29hLmgKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICNkZWZpbmUgRU5BQkxF
X0JVSUxUX0lOX05PVElGSUNBVElPTlMgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVf
SU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykgJiYgUExBVEZPUk0oSU9TKQorI2RlZmluZSBF
TkFCTEVfSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUyAxCisjZW5kaWYKKwogI2lmICFkZWZp
bmVkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpCiAjZGVmaW5lIEVOQUJMRV9DQUNIRV9QQVJU
SVRJT05JTkcgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmUzNGMxY2I1NGY5Li42Y2VmNmZkMzlh
MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0xMi0wMSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFuIEluc3RhbGxDb29yZGluYXRp
b24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZSB0aGlzICJ0b0hleFN0cmluZyIgaW1wbGVtZW50YXRpb24gdG8gQ3J5
cHRvRGlnZXN0IGl0c2VsZi4KKworICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lz
dGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZpbGVTeXN0ZW06OmNvbXB1dGVIYXNo
Rm9yRmlsZU5hbWUpOgorCiAyMDIxLTEyLTAxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXVzZSBuYXZpZ2F0aW9uIHByZWxvYWQgaWYgc2VydmljZSB3b3Jr
ZXIgaXMgZmV0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbmF2aWdhdGlvbiByZXF1ZXN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvUEFM
L0NoYW5nZUxvZwppbmRleCBhYTQ0NzQ4YzU2NmMuLjhkZDFjNmEwNDViZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1
c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzMzcxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEV4cG9zZSAidG9IZXhTdHJpbmciIHNvIHdlIGNhbiBTSEEyNTYgYW4gYXJiaXRyYXJ5IHN0
cmluZyB0byBhIGhleCByZXByZXNlbnRhdGlvbi4KKworICAgICAgICAqIHBhbC9jcnlwdG8vQ3J5
cHRvRGlnZXN0Lmg6CisgICAgICAgICogcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGln
ZXN0Q29tbW9uQ3J5cHRvLmNwcDoKKyAgICAgICAgKFBBTDo6Q3J5cHRvRGlnZXN0Ojp0b0hleFN0
cmluZyk6CisKIDIwMjEtMTEtMzAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZlbnQgc3ludGhlc2l6ZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oIGIvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKaW5kZXggMDZjMThjMzBlYjEw
Li4xMzg0ODRiMzA5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRv
L0NyeXB0b0RpZ2VzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0
b0RpZ2VzdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBQQUwgewogCkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKIAogICAg
IFBBTF9FWFBPUlQgdm9pZCBhZGRCeXRlcyhjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IGxlbmd0
aCk7CiAgICAgUEFMX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gY29tcHV0ZUhhc2goKTsKKyAgICBQ
QUxfRVhQT1JUIFN0cmluZyB0b0hleFN0cmluZygpOwogCiBwcml2YXRlOgogICAgIENyeXB0b0Rp
Z2VzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9u
Y3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwv
cGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcAppbmRl
eCAxY2U1Nzk3ZmVmNjIuLmRjZjBhMzQ0ZThlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0Rp
Z2VzdENvbW1vbkNyeXB0by5jcHAKQEAgLTE4Miw0ICsxODIsMTkgQEAgVmVjdG9yPHVpbnQ4X3Q+
IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1N0
cmluZyBDcnlwdG9EaWdlc3Q6OnRvSGV4U3RyaW5nKCkKK3sKKyAgICBhdXRvIGhhc2ggPSBjb21w
dXRlSGFzaCgpOworCisgICAgY2hhciogc3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGhhc2hMZW5n
dGggPSBoYXNoLnNpemUoKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5p
dGlhbGl6ZWQoaGFzaExlbmd0aCAqIDIsIHN0YXJ0KTsKKyAgICBjaGFyKiBidWZmZXIgPSBzdGFy
dDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2hMZW5ndGg7ICsraSkgeworICAgICAg
ICBzbnByaW50ZihidWZmZXIsIDMsICIlMDJYIiwgaGFzaC5hdChpKSk7CisgICAgICAgIGJ1ZmZl
ciArPSAyOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVGaWxlU3lzdGVtLmNwcAppbmRleCA3NmU0NWFmMzRlZDAuLmRjNDRjNmE3OTZmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZUZpbGVTeXN0ZW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcApA
QCAtMTI5LDE4ICsxMjksNyBAQCBTdHJpbmcgU1FMaXRlRmlsZVN5c3RlbTo6Y29tcHV0ZUhhc2hG
b3JGaWxlTmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lKQogICAgIGF1dG8gY3J5cHRvRGlnZXN0
ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShQQUw6OkNyeXB0b0RpZ2VzdDo6QWxnb3JpdGht
OjpTSEFfMjU2KTsKICAgICBhdXRvIHV0ZjhGaWxlTmFtZSA9IGZpbGVOYW1lLnV0ZjgoKTsKICAg
ICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVzKHV0ZjhGaWxlTmFtZS5kYXRhKCksIHV0ZjhGaWxlTmFt
ZS5sZW5ndGgoKSk7Ci0gICAgYXV0byBkaWdlc3QgPSBjcnlwdG9EaWdlc3QtPmNvbXB1dGVIYXNo
KCk7Ci0gICAgCi0gICAgLy8gQ29udmVydCBkaWdlc3QgdG8gaGV4LgotICAgIGNoYXIqIHN0YXJ0
ID0gMDsKLSAgICB1bnNpZ25lZCBkaWdlc3RMZW5ndGggPSBkaWdlc3Quc2l6ZSgpOwotICAgIENT
dHJpbmcgcmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChkaWdlc3RMZW5ndGggKiAy
LCBzdGFydCk7Ci0gICAgY2hhciogYnVmZmVyID0gc3RhcnQ7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBkaWdlc3RMZW5ndGg7ICsraSkgewotICAgICAgICBzbnByaW50ZihidWZmZXIsIDMs
ICIlMDJYIiwgZGlnZXN0LmF0KGkpKTsKLSAgICAgICAgYnVmZmVyICs9IDI7Ci0gICAgfQotICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJlc3VsdCk7CisgICAgcmV0dXJuIGNyeXB0b0RpZ2Vz
dC0+dG9IZXhTdHJpbmcoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCAzNTlmZGRjYzNiYzguLjE0Y2E1MmJjYzAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAor
MjAyMS0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIGFuIEluc3RhbGxDb29yZGluYXRpb24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBBUEkgdGVzdHMu
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGxldHMgdGhlIGlPUyBidWlsZCBjcmVhdGUg
YSBwbGFjZWhvbGRlciBhcHAgYnVuZGxlIHRvIHJlcHJlc2VudCBhIHJlZ2lzdHJhdGlvbiB1c2lu
ZyBJbnN0YWxsQ29vcmRpbmF0aW9uLgorICAgICAgICAKKyAgICAgICAgKiBDb25maWd1cmF0aW9u
cy93ZWJwdXNoZC54Y2NvbmZpZzoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgCisgICAgICAgICogd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5t
bToKKyAgICAgICAgKFdlYlB1c2hEOjpBcHBCdW5kbGVSZXF1ZXN0OjpzdGFydCk6IFVzZSB0aGUg
SUNBcHBCdW5kbGUgaW1wbGVtZW50YXRpb24gd2hlbiBhcHByb3ByaWF0ZS4KKyAgICAgICAgCisg
ICAgICAgICogd2VicHVzaGQvSUNBcHBCdW5kbGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmguCisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5k
bGU6OmNyZWF0ZSk6CisgICAgICAgIAorICAgICAgICAqIHdlYnB1c2hkL0lDQXBwQnVuZGxlLm1t
OiBBZGRlZC4KKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgaW5p
dFdpdGhJQ0FwcEJ1bmRsZTpdKToKKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9y
T2JzZXJ2ZXIgY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3NmdWxseTpmb3JBcHBsaWNhdGlv
blJlY29yZDpdKToKKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIg
Y29vcmRpbmF0b3I6Y2FuY2VsZWRXaXRoUmVhc29uOmNsaWVudDpdKToKKyAgICAgICAgKFdlYlB1
c2hEOjpicm9hZGNhc3REZWJ1Z01lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVu
ZGxlOjpJQ0FwcEJ1bmRsZSk6CisgICAgICAgIChXZWJQdXNoRDo6ZW5jb2RlT3JpZ2luU3RyaW5n
Rm9yQnVuZGxlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6b3JpZ2luU3RyaW5nRnJv
bUVuY29kZWRCdW5kbGVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpidW5kbGVQcmVm
aXhGb3JIb3N0QXBwSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6YnVuZGxlTmFtZUZv
ck9yaWdpblN0cmluZ0FuZEhvc3RBcHBJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpJ
Q0FwcEJ1bmRsZTo6Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKToKKyAgICAgICAgKFdlYlB1
c2hEOjpJQ0FwcEJ1bmRsZTo6Z2V0QnVuZGxlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNo
RDo6SUNBcHBCdW5kbGU6OmNoZWNrRm9yRXhpc3RpbmdCdW5kbGUpOgorICAgICAgICAoV2ViUHVz
aEQ6OklDQXBwQnVuZGxlOjpkZWxldGVFeGlzdGluZ0J1bmRsZSk6CisgICAgICAgIChXZWJQdXNo
RDo6SUNBcHBCdW5kbGU6OmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKToKKyAgICAg
ICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZTo6c3RvcCk6CisgICAgICAgIChXZWJQdXNoRDo6SUNB
cHBCdW5kbGU6OmNyZWF0ZUJ1bmRsZSk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6
OmJ1bmRsZUNyZWF0aW9uU3VjY2VlZGVkKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRs
ZTo6YnVuZGxlQ3JlYXRpb25GYWlsZWQpOgorICAgICAgICAKKyAgICAgICAgKiB3ZWJwdXNoZC9J
bnN0YWxsQ29vcmRpbmF0aW9uU1BJLmg6IEFkZGVkLgorICAgICAgICAqIHdlYnB1c2hkL0xhdW5j
aFNlcnZpY2VzU1BJLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFw
cEJ1bmRsZS5oLgorICAgICAgICAqIHdlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaDoKKyAgICAgICAg
CisgICAgICAgICogd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKFdlYlB1c2hE
OjpEYWVtb246OmdldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKTog
VXNlIHRoZSBJQ0FwcEJ1bmRsZSBpbXBsZW1lbnRhdGlvbiB3aGVuIGFwcHJvcHJpYXRlLgorCiAy
MDIxLTEyLTAxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXVzZSBuYXZpZ2F0aW9uIHByZWxvYWQgaWYgc2VydmljZSB3b3JrZXIgaXMgZmV0Y2hpbmcgdGhl
IGNvcnJlc3BvbmRpbmcgbmF2aWdhdGlvbiByZXF1ZXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NvbmZpZ3VyYXRpb25zL3dlYnB1c2hkLnhjY29uZmlnIGIvU291cmNlL1dlYktpdC9Db25m
aWd1cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZpZwppbmRleCAzMDVmMjBiMjEwY2EuLmQzZjFlZmE4
NzdiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy93ZWJwdXNoZC54
Y2NvbmZpZworKysgYi9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL3dlYnB1c2hkLnhjY29u
ZmlnCkBAIC0yNSw3ICsyNSwyNSBAQAogCiBQUk9EVUNUX05BTUUgPSB3ZWJwdXNoZDsKIAotT1RI
RVJfTERGTEFHUyA9IC1sIFdURiAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBDb3Jl
Rm91bmRhdGlvbjsKK0VYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTW3Nkaz1hcHBsZXR2Kl0gPSAq
OworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNbc2RrPXdhdGNoKl0gPSAqOworCitXS19DT1JF
X1NFUlZJQ0VTX0xERkxBR1MgPSAkKFdLX0NPUkVfU0VSVklDRVNfTERGTEFHU18kKFdLX1BMQVRG
T1JNX05BTUUpKTsKK1dLX0NPUkVfU0VSVklDRVNfTERGTEFHU19tYWNvc3ggPSAtZnJhbWV3b3Jr
IENvcmVTZXJ2aWNlczsKKworV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHUyA9ICQoV0tf
TU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKK1dLX01P
QklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfaXBob25lb3MgPSAtZnJhbWV3b3JrIE1vYmlsZUNv
cmVTZXJ2aWNlczsKK1dLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfaXBob25lc2ltdWxh
dG9yID0gJChXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTX2lwaG9uZW9zKTsKKworV0tf
SU5TVEFMTF9DT09SRElOQVRJT05fTERGTEFHUyA9ICQoV0tfSU5TVEFMTF9DT09SRElOQVRJT05f
TERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKK1dLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xE
RkxBR1NfaXBob25lb3MgPSAtZnJhbWV3b3JrIEluc3RhbGxDb29yZGluYXRpb247CitXS19JTlNU
QUxMX0NPT1JESU5BVElPTl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoV0tfSU5TVEFMTF9D
T09SRElOQVRJT05fTERGTEFHU19pcGhvbmVvcykKKworV0tfU0hBMjU2X0xERkxBR1MgPSAkKFdL
X1NIQTI1Nl9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpOworV0tfU0hBMjU2X0xERkxBR1Nf
aXBob25lb3MgPSAtZm9yY2VfbG9hZCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvbGliUEFMLmEKK1dL
X1NIQTI1Nl9MREZMQUdTX2lwaG9uZXNpbXVsYXRvciA9ICQoV0tfU0hBMjU2X0xERkxBR1NfaXBo
b25lb3MpCisKK09USEVSX0xERkxBR1MgPSAtbCBXVEYgLWZyYW1ld29yayBGb3VuZGF0aW9uIC1m
cmFtZXdvcmsgQ29yZUZvdW5kYXRpb24gJChXS19TSEEyNTZfTERGTEFHUykgJChXS19DT1JFX1NF
UlZJQ0VTX0xERkxBR1MpICQoV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHUykgJChXS19J
TlNUQUxMX0NPT1JESU5BVElPTl9MREZMQUdTKTsKIExJQlJBUllfU0VBUkNIX1BBVEhTID0gJChC
VUlMVF9QUk9EVUNUU19ESVIpOwogCiBXS19QUk9DRVNTRURfWENFTlRfRklMRT0kKFRFTVBfRklM
RV9ESVIpLyQoRlVMTF9QUk9EVUNUX05BTUUpLmVudGl0bGVtZW50cwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWI2NDFjMTIwNzI5Li4y
OTZkNThjOGE4N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTAyMiw2ICsxMDIyLDEwIEBACiAJCTUxN0E1MzEwMUY0N0E4NjIwMERD
REMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QTUzMEQxRjQ3QTg0MzAwRENEQzBBIC8q
IFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07CiAJCTUxN0I1RjJFMjc1NzM4
MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0I1RjJEMjc1NzM4
MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCAqLzsg
fTsKIAkJNTE3QjVGMkYyNzU3MzgyQjAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9u
Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3QjVGMkQyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9u
Q29uZmlndXJhdGlvbi5oICovOyB9OworCQk1MTdCNUYzNzI3NTdEQTg4MDAyREMyMkQgLyogTGF1
bmNoU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxN0I1RjMzMjc1N0RBODcwMDJEQzIyRCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICov
OyB9OworCQk1MTdCNUYzODI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYzNDI3NTdEQTg4
MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gKi87IH07CisJCTUxN0I1RjM5Mjc1N0RBODgwMDJE
QzIyRCAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYzNTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFs
bENvb3JkaW5hdGlvblNQSS5oICovOyB9OworCQk1MTdCNUYzQTI3NTdEQTg4MDAyREMyMkQgLyog
SUNBcHBCdW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oICovOyB9OwogCQk1
MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1MTdDRjBFMzE2M0E0ODZDMDBDMjk1MEYgLyog
Q2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdDRjBFMTE2M0E0ODZDMDBD
Mjk1MEYgLyogQ2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki87IH07CiAJCTUxN0NGMEU0MTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3Q0YwRTIxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VzLmggKi87IH07CkBAIC00Mzc3LDYgKzQzODEsMTAgQEAKIAkJNTE3QTUzMEQxRjQ3
QTg0MzAwRENEQzBBIC8qIFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmg7
IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3Nh
Z2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTUxN0E1MzBFMUY0
N0E4NDMwMERDREMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU1dDbGllbnRDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
U1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKIAkJNTE3QjVGMkQyNzU3MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hE
YWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QjVGMzMyNzU3REE4NzAwMkRDMjJEIC8qIExhdW5jaFNl
cnZpY2VzU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhdW5jaFNlcnZp
Y2VzU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjM0Mjc1N0RBODgw
MDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IElDQXBwQnVuZGxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MTdCNUYzNTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJ
Q0FwcEJ1bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJQ0FwcEJ1bmRs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdDRjBFMTE2M0E0ODZDMDBDMjk1
MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUwRiAvKiBDYWNoZVN0b3Jh
Z2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9DYWNoZVN0b3JhZ2VFbmdp
bmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJNTE3Q0YwRTIxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC05ODk0LDYgKzk5MDIsMTAgQEAKIAkJCQk1MTYwRTk1
NDI3NEI4ODcxMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5oICovLAogCQkJCTUxNjBFOTUz
Mjc0Qjg4NzEwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lm1tICovLAogCQkJCTVDQkI2RDRE
MjcxRjY3Q0MwMEZEMUE1RCAvKiBjb20uYXBwbGUud2Via2l0LndlYnB1c2hkLnBsaXN0ICovLAor
CQkJCTUxN0I1RjM2Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oICovLAorCQkJCTUx
N0I1RjM0Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLywKKwkJCQk1MTdCNUYz
NTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovLAorCQkJCTUx
N0I1RjMzMjc1N0RBODcwMDJEQzIyRCAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICovLAogCQkJCTUx
RjdCQjc1Mjc0NDk4QkIwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oICovLAog
CQkJCTUxRjdCQjc0Mjc0NDk4QkEwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5t
bSAqLywKIAkJCQk1MTYwRTk1QzI3NEMyQTAzMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lz
dHJ5LmggKi8sCkBAIC0xMjQ0OSwxMyArMTI0NjEsMTYgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0g
KAorCQkJCTUxN0I1RjNBMjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE2MEU5NTYyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTVDMTU3OUZDMjcxN0FGNTAwMEVENTI4MCAvKiBEYWVtb25V
dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRjdCQjc3Mjc0NDk4QkIwMEM0NUE3MiAv
KiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MEU5NUUy
NzRDMkEwMzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE2MEU5NTkyNzRDMEQ4OTAwNTY3Mzg4IC8qIFB1c2hBcHBCdW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxRjdCQjdCMjc0NEM1MDcwMEM0NUE3MiAvKiBQdXNoQ2xpZW50Q29ubmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE3QjVGMzcyNzU3REE4ODAwMkRDMjJEIC8qIExh
dW5jaFNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTdCNUYyRjI3NTczODJCMDAy
REMyMkQgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1MTdCNUYzOTI3NTdEQTg4MDAyREMyMkQgLyogSW5zdGFsbENvb3JkaW5hdGlv
blNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyQ0Q2OUYyNzIzMzkzQTAwRjdGOEVDIC8qIFdl
YlB1c2hEYWVtb24uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtMTQ5OTMsNiArMTUwMDgsNyBAQAogCQkJZmlsZXMg
PSAoCiAJCQkJNTE2MEU5NTUyNzRCODg3MjAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1QzE1N0EwMTI3MTdCN0ZCMDBFRDUyODAgLyogQXJndW1lbnRD
b2RlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTE3QjVGMzgyNzU3REE4ODAwMkRDMjJEIC8q
IElDQXBwQnVuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGN0JCN0QyNzQ1NjQwNDAwQzQ1
QTcyIC8qIENvZGVTaWduaW5nLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5RkYyNzE3QjZE
MjAwRUQ1MjgwIC8qIERhZW1vbkRlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMxNTc5
RkUyNzE3QjZDMTAwRUQ1MjgwIC8qIERhZW1vbkVuY29kZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0gYi9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0KaW5kZXggZDA0N2UxZDYy
YTczLi42MDk3ZDc5OGVjMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBw
QnVuZGxlUmVxdWVzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJl
cXVlc3QubW0KQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAi
QXBwQnVuZGxlUmVxdWVzdC5oIgogCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgogI2ltcG9ydCAi
TW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcuaCIKICNpbXBvcnQgIldlYlB1c2hEYWVtb24uaCIKICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPgpAQCAtNTEsOCArNTIsMTMgQEAg
dm9pZCBBcHBCdW5kbGVSZXF1ZXN0OjpzdGFydCgpCiAKICAgICBpZiAobV9jb25uZWN0aW9uLT51
c2VNb2NrQnVuZGxlc0ZvclRlc3RpbmcoKSkKICAgICAgICAgbV9hcHBCdW5kbGUgPSBNb2NrQXBw
QnVuZGxlRm9yVGVzdGluZzo6Y3JlYXRlKG1fb3JpZ2luU3RyaW5nLCBtX2Nvbm5lY3Rpb24tPmhv
c3RBcHBDb2RlU2lnbmluZ0lkZW50aWZpZXIoKSwgKnRoaXMpOwotICAgIGVsc2UKKyAgICBlbHNl
IHsKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykKKyAgICAgICAgbV9h
cHBCdW5kbGUgPSBJQ0FwcEJ1bmRsZTo6Y3JlYXRlKCptX2Nvbm5lY3Rpb24sIG1fb3JpZ2luU3Ry
aW5nLCAqdGhpcyk7CisjZWxzZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCisgICAgfQogCiAgICAgc3RhcnRJbnRlcm5hbCgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5oIGIvU291cmNlL1dlYktpdC93ZWJw
dXNoZC9JQ0FwcEJ1bmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uOTY2ZTBjMDE4Nzk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9JQ0FwcEJ1bmRsZS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxF
KElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMpCisKKyNpbXBvcnQgIkluc3RhbGxDb29yZGlu
YXRpb25TUEkuaCIKKyNpbXBvcnQgIlB1c2hBcHBCdW5kbGUuaCIKKyNpbXBvcnQgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworQGNsYXNzIE5TRXJyb3I7CitAY2xhc3MgV2ViQXBwSW5zdGFsbENvb3JkaW5h
dG9yT2JzZXJ2ZXI7CisKK25hbWVzcGFjZSBXZWJQdXNoRCB7CisKK2NsYXNzIENsaWVudENvbm5l
Y3Rpb247CisKK2NsYXNzIElDQXBwQnVuZGxlIDogcHVibGljIFB1c2hBcHBCdW5kbGUsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxJQ0FwcEJ1bmRsZT4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8SUNBcHBCdW5kbGU+IGNyZWF0ZShDbGllbnRD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgUHVzaEFw
cEJ1bmRsZUNsaWVudCYgY2xpZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSUNBcHBCdW5kbGUoY29ubmVjdGlvbiwgb3JpZ2luU3RyaW5nLCBjbGllbnQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGJ1bmRsZUNyZWF0aW9uU3VjY2VlZGVkKCk7CisgICAgdm9pZCBidW5kbGVD
cmVhdGlvbkZhaWxlZChOU0Vycm9yICopOworCisgICAgc3RhdGljIHZvaWQgZ2V0T3JpZ2luc1dp
dGhSZWdpc3RyYXRpb25zKENsaWVudENvbm5lY3Rpb24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik+JiYpOworCitwcml2YXRlOgorICAgIElDQXBwQnVuZGxl
KENsaWVudENvbm5lY3Rpb24mLCBjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgUHVzaEFwcEJ1
bmRsZUNsaWVudCYpOworCisgICAgY29uc3QgU3RyaW5nJiBnZXRCdW5kbGVJZGVudGlmaWVyKCk7
CisKKyAgICB2b2lkIGNoZWNrRm9yRXhpc3RpbmdCdW5kbGUoKSBmaW5hbDsKKyAgICB2b2lkIGRl
bGV0ZUV4aXN0aW5nQnVuZGxlKCkgZmluYWw7CisgICAgdm9pZCBjcmVhdGVCdW5kbGUoKSBmaW5h
bDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKworICAgIHZvaWQgZGlkRGVsZXRlRXhpc3RpbmdC
dW5kbGVXaXRoRXJyb3IoTlNFcnJvciAqKTsKKworICAgIFJldGFpblB0cjxJWFJlc3RvcmluZ0Rl
bW90ZWRBcHBJbnN0YWxsQ29vcmRpbmF0b3I+IG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yOworICAg
IFJldGFpblB0cjxXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcj4gbV9hcHBJbnN0YWxs
T2JzZXJ2ZXI7CisKKyAgICBTdHJpbmcgbV9vcmlnaW5TdHJpbmc7CisgICAgUmVmUHRyPENsaWVu
dENvbm5lY3Rpb24+IG1fY2xpZW50Q29ubmVjdGlvbjsKKworICAgIFN0cmluZyBtX2J1bmRsZUlk
ZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJQdXNoRAorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL0lDQXBwQnVuZGxlLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0Fw
cEJ1bmRsZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU5N2Q2
NDM1MDkxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBC
dW5kbGUubW0KQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcu
aCIKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgiCisKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElO
QVRJT05fQlVORExFUykKKworI2ltcG9ydCAiQXBwQnVuZGxlUmVxdWVzdC5oIgorI2ltcG9ydCAi
TGF1bmNoU2VydmljZXNTUEkuaCIKKyNpbXBvcnQgIlB1c2hDbGllbnRDb25uZWN0aW9uLmgiCisj
aW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9Db25zb2xl
VHlwZXMuaD4KKyNpbXBvcnQgPHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg+CisjaW1wb3J0IDx3
dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK05TU3RyaW5nICpwdXNoQnVuZGxlQXBwTWFuYWdl
bWVudERvbWFpbiA9IEAiY29tLmFwcGxlLldlYktpdC5QdXNoQnVuZGxlcyI7CisKK0BpbnRlcmZh
Y2UgV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgOiBOU09iamVjdCA8SVhBcHBJbnN0
YWxsQ29vcmRpbmF0b3JPYnNlcnZlcj4KKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aElDQXBwQnVu
ZGxlOihXZWJQdXNoRDo6SUNBcHBCdW5kbGUmKWljQXBwQnVuZGxlOworQHByb3BlcnR5IFdlYWtQ
dHI8V2ViUHVzaEQ6OklDQXBwQnVuZGxlPiBidW5kbGU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcgorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhJQ0FwcEJ1bmRsZTooV2ViUHVzaEQ6OklDQXBwQnVuZGxlJilpY0FwcEJ1bmRsZQorewor
ICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgX2J1bmRsZSA9IGljQXBwQnVuZGxlOworCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3NmdWxseToobm9ubnVsbCBJWEFwcEluc3Rh
bGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFwcGxpY2F0aW9uUmVjb3JkOihudWxsYWJs
ZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopYXBwUmVjb3JkCit7CisgICAgY2FsbE9uTWFpblJ1bkxv
b3AoW3NlbGYsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8aWQ+KHNlbGYpXSB7CisgICAgICAg
IGlmIChfYnVuZGxlKQorICAgICAgICAgICAgX2J1bmRsZS0+YnVuZGxlQ3JlYXRpb25TdWNjZWVk
ZWQoKTsKKyAgICB9KTsKK30KKworLSAodm9pZCljb29yZGluYXRvcjoobm9ubnVsbCBJWEFwcElu
c3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGNhbmNlbGVkV2l0aFJlYXNvbjoobm9ubnVs
bCBOU0Vycm9yICopY2FuY2VsUmVhc29uIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWNsaWVu
dAoreworICAgIGNhbGxPbk1haW5SdW5Mb29wKFtzZWxmLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWlu
UHRyPGlkPihzZWxmKSwgcHJvdGVjdGVkQ2FuY2VsUmVhc29uID0gUmV0YWluUHRyPE5TRXJyb3I+
KGNhbmNlbFJlYXNvbildIHsKKyAgICAgICAgaWYgKF9idW5kbGUpCisgICAgICAgICAgICBfYnVu
ZGxlLT5idW5kbGVDcmVhdGlvbkZhaWxlZChwcm90ZWN0ZWRDYW5jZWxSZWFzb24uZ2V0KCkpOwor
ICAgIH0pOworfQorCitAZW5kCisKK3VzaW5nIFBBTDo6Q3J5cHRvRGlnZXN0OworCituYW1lc3Bh
Y2UgV2ViUHVzaEQgeworCitzdGF0aWMgdm9pZCBicm9hZGNhc3REZWJ1Z01lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIERhZW1vbjo6c2luZ2xldG9uKCkuYnJvYWRjYXN0RGVi
dWdNZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJJQ0FwcEJ1bmRs
ZTogIiwgbWVzc2FnZSkpOworfQorCitJQ0FwcEJ1bmRsZTo6SUNBcHBCdW5kbGUoQ2xpZW50Q29u
bmVjdGlvbiYgY2xpZW50Q29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIFB1
c2hBcHBCdW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICA6IFB1c2hBcHBCdW5kbGUoY2xpZW50KQor
ICAgICwgbV9vcmlnaW5TdHJpbmcob3JpZ2luU3RyaW5nKQorICAgICwgbV9jbGllbnRDb25uZWN0
aW9uKCZjbGllbnRDb25uZWN0aW9uKQoreworfQorCitzdGF0aWMgU3RyaW5nIGVuY29kZU9yaWdp
blN0cmluZ0ZvckJ1bmRsZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAv
LyBCdW5kbGUgaWRlbnRpZmllcnMgaGF2ZSBleGFjdGx5IDY0IHZhbGlkIGNoYXJhY3RlcnMuCisg
ICAgLy8gYS16LCBBLVosIDAtOSwgJy0nLCBhbmQgJy4nCisgICAgLy8gQmFzZTY0IFVSTCBlbmNv
ZGluZyB1c2VzICctJyBhbmQgJ18nIGZvciB0aGUgZmluYWwgMiBjaGFyYWN0ZXJzCisgICAgLy8g
Rm9yIG91ciBidW5kbGUgaWRlbnRpZmllciwgd2UnbGwgQmFzZTY0IFVSTCBlbmNvZGUgdGhlbiBy
ZXBsYWNlICdfJyB3aXRoICcuJworICAgIC8vIFdlIGFsc28gZ2V0IHJpZCBvZiB0aGUgdHlwaWNh
bCAnPScgcGFkZGluZyBmb3IgYmFzZTY0IGVuY29kaW5nLgorCisgICAgYXV0byBiYXNlNjQgPSBi
YXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihpbnB1dC51dGY4KCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmFzZTY0LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChiYXNlNjRbaV0gPT0g
J18nKQorICAgICAgICAgICAgYmFzZTY0W2ldID0gJy4nOworICAgIH0KKworICAgIHNpemVfdCBu
dW1iZXJFcXVhbFNpZ25zID0gMDsKKyAgICBpZiAoYmFzZTY0LnNpemUoKSA+PSAxICYmIGJhc2U2
NC5sYXN0KCkgPT0gJz0nKQorICAgICAgICArK251bWJlckVxdWFsU2lnbnM7CisgICAgaWYgKGJh
c2U2NC5zaXplKCkgPj0gMiAmJiBiYXNlNjRbYmFzZTY0LnNpemUoKSAtIDJdID09ICc9JykKKyAg
ICAgICAgKytudW1iZXJFcXVhbFNpZ25zOworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgo
YmFzZTY0LmRhdGEoKSwgYmFzZTY0LnNpemUoKSAtIG51bWJlckVxdWFsU2lnbnMpOworfQorCitz
dGF0aWMgU3RyaW5nIG9yaWdpblN0cmluZ0Zyb21FbmNvZGVkQnVuZGxlSWRlbnRpZmllcihjb25z
dCBTdHJpbmcmIGlucHV0KQoreworICAgIGF1dG8gdXRmOCA9IGlucHV0LnV0ZjgoKTsKKyAgICBh
dXRvIGJ1ZmZlciA9IHV0ZjgubXV0YWJsZURhdGEoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHV0ZjgubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoYnVmZmVyW2ldID09ICcuJykK
KyAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICdfJzsKKyAgICB9CisKKyAgICBhdXRvIGRlY29kZWQg
PSBiYXNlNjRVUkxEZWNvZGUoYnVmZmVyLCB1dGY4Lmxlbmd0aCgpKTsKKyAgICBpZiAoIWRlY29k
ZWQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChk
ZWNvZGVkLT5kYXRhKCksIGRlY29kZWQtPnNpemUoKSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgYnVu
ZGxlUHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBob3N0QXBwSWRlbnRp
ZmllcikKK3sKKyAgICBhdXRvIGFwcERpZ2VzdCA9IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUo
Q3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8yNTYpOworICAgIGF1dG8gdXRmOElkZW50aWZp
ZXIgPSBob3N0QXBwSWRlbnRpZmllci51dGY4KCk7CisgICAgYXBwRGlnZXN0LT5hZGRCeXRlcyh1
dGY4SWRlbnRpZmllci5kYXRhKCksIHV0ZjhJZGVudGlmaWVyLmxlbmd0aCgpKTsKKworICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJjb20uYXBwbGUuV2ViS2l0LlB1c2hCdW5kbGUuIiwgYXBwRGlnZXN0
LT50b0hleFN0cmluZygpLCAiLiIpOworfQorCitzdGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWVGb3JP
cmlnaW5TdHJpbmdBbmRIb3N0QXBwSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIG9yaWdpblN0cmlu
ZywgY29uc3QgU3RyaW5nJiBob3N0QXBwSWRlbnRpZmllcikKK3sKKyAgICAvLyBGSVhNRTogT25j
ZSB3ZSBjYW4gc3RvcmUgdGhlIG9yaWdpbiBzdHJpbmcgd2l0aGluIHRoZSBhcHAgYnVuZGxlLCBo
YXNoIHRoZSBvcmlnaW4gc3RyaW5nIGFzIHdlbGwuCisgICAgLy8gRm9yIG5vdyB3ZSBiYXNlNjQg
ZW5jb2RlIGl0IHRvIG1ha2UgYSB2YWxpZCBidW5kbGUgaWRlbnRpZmllciB0aGF0IGNhcnJpZXMg
dGhlIGluZm9ybWF0aW9uLgorICAgIHJldHVybiBtYWtlU3RyaW5nKGJ1bmRsZVByZWZpeEZvckhv
c3RBcHBJZGVudGlmaWVyKGhvc3RBcHBJZGVudGlmaWVyKSwgZW5jb2RlT3JpZ2luU3RyaW5nRm9y
QnVuZGxlSWRlbnRpZmllcihvcmlnaW5TdHJpbmcpKTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6
Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKENsaWVudENvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHRzOworCisgICAgUmV0YWlu
UHRyPE5TU3RyaW5nPiBidW5kbGVJZGVudGlmaWVyUHJlZml4ID0gKE5TU3RyaW5nICopYnVuZGxl
UHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIoY29ubmVjdGlvbi5ob3N0QXBwQ29kZVNpZ25pbmdJ
ZGVudGlmaWVyKCkpOworCisgICAgTFNFbnVtZXJhdG9yPExTQXBwbGljYXRpb25SZWNvcmQgKj4g
KmVudW1lcmF0b3IgPSBbTFNBcHBsaWNhdGlvblJlY29yZCBlbnVtZXJhdG9yV2l0aE9wdGlvbnM6
TFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9uc0VudW1lcmF0ZVBsYWNlaG9sZGVyc107Cisg
ICAgZm9yIChMU0FwcGxpY2F0aW9uUmVjb3JkICpyZWNvcmQgPSBbZW51bWVyYXRvciBuZXh0T2Jq
ZWN0XTsgcmVjb3JkOyByZWNvcmQgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgeworICAgICAg
ICBpZiAoIVtyZWNvcmQubWFuYWdlbWVudERvbWFpbiBpc0VxdWFsVG9TdHJpbmc6cHVzaEJ1bmRs
ZUFwcE1hbmFnZW1lbnREb21haW5dKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCFbcmVjb3JkLmJ1bmRsZUlkZW50aWZpZXIgaGFzUHJlZml4OmJ1bmRsZUlkZW50aWZpZXJQ
cmVmaXguZ2V0KCldKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRklYTUU6
IEZvciBub3cgd2Ugc3RvcmUgdGhlIG9yaWdpbiBzdHJpbmcgaW4gdGhlIGJ1bmRsZSBpZGVudGlm
aWVyIGJhc2U2NCBlbmNvZGVkCisgICAgICAgIC8vIE9uY2Ugd2Ugc3RvcmUgaXQgaW4gdGhlIGJ1
bmRsZSBpdHNlbGYsIHdlJ2xsIGhhc2ggdGhlIG9yaWdpbiBzdHJpbmcgaW4gdGhlIGJ1bmRsZSBp
ZGVudGlmaWVyIGFuZCBleHRyYWN0IGl0IGZyb20gdGhlIGJ1bmRsZQorCisgICAgICAgIE5TQXJy
YXkgKmNvbXBvbmVudHMgPSBbcmVjb3JkLmJ1bmRsZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFy
YXRlZEJ5U3RyaW5nOmJ1bmRsZUlkZW50aWZpZXJQcmVmaXguZ2V0KCldOworICAgICAgICBBU1NF
UlQoY29tcG9uZW50cy5jb3VudCA+PSAyKTsKKworICAgICAgICBhdXRvIG9yaWdpblN0cmluZyA9
IG9yaWdpblN0cmluZ0Zyb21FbmNvZGVkQnVuZGxlSWRlbnRpZmllcihjb21wb25lbnRzWzFdKTsK
KyAgICAgICAgaWYgKG9yaWdpblN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICByZXN1bHRzLmFwcGVuZChvcmlnaW5TdHJpbmcpOworICAgIH0KKyAgICAK
KyAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHRzKTsKK30KKworY29uc3QgU3RyaW5nJiBJQ0Fw
cEJ1bmRsZTo6Z2V0QnVuZGxlSWRlbnRpZmllcigpCit7CisgICAgaWYgKG1fYnVuZGxlSWRlbnRp
Zmllci5pc0VtcHR5KCkgJiYgbV9jbGllbnRDb25uZWN0aW9uKQorICAgICAgICBtX2J1bmRsZUlk
ZW50aWZpZXIgPSBidW5kbGVOYW1lRm9yT3JpZ2luU3RyaW5nQW5kSG9zdEFwcElkZW50aWZpZXIo
bV9vcmlnaW5TdHJpbmcsIG1fY2xpZW50Q29ubmVjdGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRl
bnRpZmllcigpKTsKKworICAgIHJldHVybiBtX2J1bmRsZUlkZW50aWZpZXI7Cit9CisKK3ZvaWQg
SUNBcHBCdW5kbGU6OmNoZWNrRm9yRXhpc3RpbmdCdW5kbGUoKQoreworICAgIE5TRXJyb3IgKmVy
cm9yID0gbmlsOworICAgIFJldGFpblB0cjxMU0FwcGxpY2F0aW9uUmVjb3JkPiBhcHBSZWNvcmQg
PSBhZG9wdE5TKFtbTFNBcHBsaWNhdGlvblJlY29yZCBhbGxvY10gaW5pdFdpdGhCdW5kbGVJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWdldEJ1bmRsZUlkZW50aWZpZXIoKSBhbGxvd1BsYWNlaG9sZGVy
OllFUyBlcnJvcjomZXJyb3JdKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGll
bnQtPmRpZENoZWNrRm9yRXhpc3RpbmdCdW5kbGUoKnRoaXMsIGFwcFJlY29yZCA/IFB1c2hBcHBC
dW5kbGVFeGlzdHM6OlllcyA6IFB1c2hBcHBCdW5kbGVFeGlzdHM6Ok5vKTsKK30KKwordm9pZCBJ
Q0FwcEJ1bmRsZTo6ZGVsZXRlRXhpc3RpbmdCdW5kbGUoKQoreworICAgIFtJWEFwcEluc3RhbGxD
b29yZGluYXRvciB1bmluc3RhbGxBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopZ2V0QnVuZGxl
SWRlbnRpZmllcigpIHJlcXVlc3RVc2VyQ29uZmlybWF0aW9uOk5PIGNvbXBsZXRpb246W3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9XSAoTlNFcnJvciAqZXJyb3IpIHsKKyAgICAg
ICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
LCBlcnJvciA9IFJldGFpblB0cjxOU0Vycm9yPihlcnJvcildIHsKKyAgICAgICAgICAgIGRpZERl
bGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKGVycm9yLmdldCgpKTsKKyAgICAgICAgfSk7Cisg
ICAgfV07Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0
aEVycm9yKE5TRXJyb3IgKmVycm9yKQoreworICAgIGlmIChlcnJvcikKKyAgICAgICAgYnJvYWRj
YXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkVycm9yIGRlbGV0aW5nIGV4aXN0aW5nIGJ1bmRs
ZTogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5kaWREZWxldGVFeGlzdGluZ0J1bmRsZVdpdGhFcnJvcigqdGhp
cywgZXJyb3IpOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpzdG9wKCkKK3sKKyAgICBtX2FwcElu
c3RhbGxDb29yZGluYXRvci5nZXQoKS5vYnNlcnZlciA9IG5pbDsKKyAgICBtX2FwcEluc3RhbGxD
b29yZGluYXRvciA9IG5pbDsKKyAgICBtX2FwcEluc3RhbGxPYnNlcnZlciA9IG5pbDsKK30KKwor
dm9pZCBJQ0FwcEJ1bmRsZTo6Y3JlYXRlQnVuZGxlKCkKK3sKKyAgICBSZXRhaW5QdHI8TlNTdHJp
bmc+IGJ1bmRsZUlkZW50aWZpZXIgPSAoTlNTdHJpbmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCk7
CisKKyAgICAvLyBDYW5jZWwgYW55IHByZXZpb3VzIGluc3RhbGwgY29vcmRpbmF0b3IgdGhhdCBt
aWdodCd2ZSBiZWVuIGxlZnQgaGFuZ2luZyBpbiBhIHBhcnRpYWxseSBmaW5pc2hlZCBzdGF0ZQor
ICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIFtJWEFwcEluc3RhbGxDb29yZGluYXRvciBj
YW5jZWxDb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgp
IHdpdGhSZWFzb246W05TRXJyb3IgZXJyb3JXaXRoRG9tYWluOkAiV0tFcnJvckRvbWFpbiIgY29k
ZToxIHVzZXJJbmZvOm5pbF0gY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZXJy
b3I6JmVycm9yXTsKKworICAgIEJPT0wgY3JlYXRlZCA9IE5POworICAgIGVycm9yID0gbmlsOwor
ICAgIG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yID0gW0lYUmVzdG9yaW5nRGVtb3RlZEFwcEluc3Rh
bGxDb29yZGluYXRvciBjb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDpidW5kbGVJZGVudGlm
aWVyLmdldCgpIHdpdGhDbGllbnRJRDpJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yIGNyZWF0
ZUlmTm90RXhpc3Rpbmc6WUVTIGNyZWF0ZWQ6JmNyZWF0ZWQgZXJyb3I6JmVycm9yXTsKKworICAg
IGlmICghbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3IgfHwgZXJyb3IpIHsKKyAgICAgICAgYnJvYWRj
YXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIlVuYWJsZSB0byBjcmVhdGUgaW5zdGFsbCBjb29y
ZGluYXRpb3IgZm9yIGFwcCBidW5kbGUgaWRlbnRpZmllciAiLCBTdHJpbmcoYnVuZGxlSWRlbnRp
Zmllci5nZXQoKSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjcmVhdGVkKSB7CisgICAgICAgIGJyb2Fk
Y2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJFeGlzdGluZyBpbnN0YWxsIGNvb3JkaW5hdGlv
ciBmb3IgYXBwIGJ1bmRsZSBpZGVudGlmaWVyICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdl
dCgpKSwgIiB3YXMgZm91bmQuIFRoaXMgaXMgdW5leHBlY3RlZC4iKSk7CisgICAgICAgIGJ1bmRs
ZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
YXBwSW5zdGFsbE9ic2VydmVyID0gYWRvcHROUyhbW1dlYkFwcEluc3RhbGxDb29yZGluYXRvck9i
c2VydmVyIGFsbG9jXSBpbml0V2l0aElDQXBwQnVuZGxlOip0aGlzXSk7CisgICAgbV9hcHBJbnN0
YWxsQ29vcmRpbmF0b3IuZ2V0KCkub2JzZXJ2ZXIgPSBtX2FwcEluc3RhbGxPYnNlcnZlci5nZXQo
KTsKKworICAgIFJldGFpblB0cjxJWFBsYWNlaG9sZGVyPiBwbGFjZWhvbGRlciA9IGFkb3B0TlMo
W1tJWFBsYWNlaG9sZGVyIGFsbG9jXSBpbml0QXBwUGxhY2Vob2xkZXJXaXRoQnVuZGxlTmFtZToo
TlNTdHJpbmcgKiltX29yaWdpblN0cmluZyBidW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgp
IGluc3RhbGxUeXBlOkxTSW5zdGFsbFR5cGVJbnRlbnRpb25hbERvd25ncmFkZSBjbGllbnQ6SVhD
bGllbnRJZGVudGlmaWVyQXBwbGllZEZvcl0pOworCisgICAgUmV0YWluUHRyPElYUGxhY2Vob2xk
ZXJBdHRyaWJ1dGVzPiBwbGFjZWhvbGRlckF0dHJpYnV0ZXMgPSBhZG9wdE5TKFtJWFBsYWNlaG9s
ZGVyQXR0cmlidXRlcyBuZXddKTsKKyAgICBwbGFjZWhvbGRlckF0dHJpYnV0ZXMuZ2V0KCkubGF1
bmNoUHJvaGliaXRlZCA9IFlFUzsKKworICAgIFtwbGFjZWhvbGRlciBzZXRQbGFjZWhvbGRlckF0
dHJpYnV0ZXM6cGxhY2Vob2xkZXJBdHRyaWJ1dGVzLmdldCgpIGVycm9yOiZlcnJvcl07CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJV
bmFibGUgdG8gc2V0IHBsYWNlaG9sZGVyIGF0dHJpYnV0ZXMgZm9yIGJ1bmRsZSAiLCBTdHJpbmco
YnVuZGxlSWRlbnRpZmllci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3Jp
cHRpb25dKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBOU0RpY3Rpb25hcnkgKmVudGl0bGVtZW50c0RpY3Rpb25h
cnkgPSBAeworICAgICAgICBAImNvbS5hcHBsZS5wcml2YXRlLnVzZXJub3RpZmljYXRpb25zLmJ1
bmRsZS1pZGVudGlmaWVycyI6IGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCksCisgICAgICAgIEAiY29t
LmFwcGxlLnByaXZhdGUudXNlcm5vdGlmaWNhdGlvbnMubm90aWZpY2F0aW9uLXNpbXVsYXRvciI6
IEBZRVMsCisgICAgICAgIEAiY29tLmFwcGxlLmRldmVsb3Blci5hcHAtbWFuYWdlbWVudC1kb21h
aW4iOiBwdXNoQnVuZGxlQXBwTWFuYWdlbWVudERvbWFpbgorICAgIH07CisgICAgUmV0YWluUHRy
PElYUHJvbWlzZWRJbk1lbW9yeURpY3Rpb25hcnk+IGVudGl0bGVtZW50c1Byb21pc2UgPSBhZG9w
dE5TKFtbSVhQcm9taXNlZEluTWVtb3J5RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhOYW1lOltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRW50aXRsZW1lbnRzIFByb21pc2UgZm9yICVAIiwg
YnVuZGxlSWRlbnRpZmllci5nZXQoKV0gY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRG
b3IgZGljdGlvbmFyeTplbnRpdGxlbWVudHNEaWN0aW9uYXJ5XSk7CisKKyAgICBpZiAoIWVudGl0
bGVtZW50c1Byb21pc2UpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJp
bmcoIlVuYWJsZSB0byBjcmVhdGUgcGxhY2Vob2xkZXIgZW50aXRsZW1lbnRzIHByb21pc2UgZm9y
IGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQoKSkpKTsKKyAgICAgICAgYnVu
ZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
ZXJyb3IgPSBuaWw7CisgICAgaWYgKCFbcGxhY2Vob2xkZXIgc2V0RW50aXRsZW1lbnRzUHJvbWlz
ZTplbnRpdGxlbWVudHNQcm9taXNlLmdldCgpIGVycm9yOiZlcnJvcl0gfHwgZXJyb3IpIHsKKyAg
ICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBzZXQgcGxh
Y2Vob2xkZXIgZW50aXRsZW1lbnRzIHByb21pc2UgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxl
SWRlbnRpZmllci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRpb25d
KSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBCT09MIHJlc3VsdCA9IFtwbGFjZWhvbGRlciBzZXRDb25maWd1cmF0
aW9uQ29tcGxldGVXaXRoRXJyb3I6JmVycm9yXTsKKyAgICBpZiAoIXJlc3VsdCB8fCBlcnJvcikg
eworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNl
dCBwbGFjZWhvbGRlciBlbnRpdGxlbWVudHMgcHJvbWlzZSBjb21wbGV0ZSBmb3IgYnVuZGxlICIs
IFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJv
ciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFttX2FwcEluc3RhbGxDb29yZGluYXRvciBz
ZXRQbGFjZWhvbGRlclByb21pc2U6cGxhY2Vob2xkZXIuZ2V0KCkgZXJyb3I6JmVycm9yXTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmco
IkZhaWxlZCB0byBzZXQgcGxhY2Vob2xkZXIgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhi
dW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlw
dGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJldGFpblB0cjxJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNm
ZXI+IGRhdGFQcm9taXNlID0gYWRvcHROUyhbW0lYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciBh
bGxvY10gaW5pdFdpdGhOYW1lOkAiRW1wdHkgdXNlciBkYXRhIHByb21pc2UiIGNsaWVudDpJWENs
aWVudElkZW50aWZpZXJBcHBsaWVkRm9yIGRpc2tTcGFjZU5lZWRlZDowXSk7CisgICAgZGF0YVBy
b21pc2UuZ2V0KCkucGVyY2VudENvbXBsZXRlID0gMS4wOworICAgIGRhdGFQcm9taXNlLmdldCgp
LmNvbXBsZXRlID0gWUVTOworCisgICAgW21fYXBwSW5zdGFsbENvb3JkaW5hdG9yIHNldFVzZXJE
YXRhUHJvbWlzZTpkYXRhUHJvbWlzZS5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRv
IHNldCB1c2VyIGRhdGEgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlm
aWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7Cisg
ICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6YnVuZGxlQ3JlYXRpb25TdWNjZWVkZWQoKQorewor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENyZWF0ZUFwcEJ1bmRsZSgq
dGhpcywgUHVzaEFwcEJ1bmRsZUNyZWF0aW9uUmVzdWx0OjpTdWNjZXNzKTsKKworfQorCit2b2lk
IElDQXBwQnVuZGxlOjpidW5kbGVDcmVhdGlvbkZhaWxlZChOU0Vycm9yICplcnJvcikKK3sKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDcmVhdGVBcHBCdW5kbGUoKnRo
aXMsIFB1c2hBcHBCdW5kbGVDcmVhdGlvblJlc3VsdDo6RmFpbHVyZSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYlB1c2hECisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05f
QlVORExFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSW5zdGFsbENvb3Jk
aW5hdGlvblNQSS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JbnN0YWxsQ29vcmRpbmF0aW9u
U1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMDZkNzBmODFm
NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0luc3RhbGxDb29y
ZGluYXRpb25TUEkuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9S
TShJT1MpCisjaWYgVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKworI2ltcG9ydCA8SW5zdGFsbENv
b3JkaW5hdGlvbi9JWEFwcEluc3RhbGxDb29yZGluYXRvci5oPgorI2ltcG9ydCA8SW5zdGFsbENv
b3JkaW5hdGlvbi9JbnN0YWxsQ29vcmRpbmF0aW9uLmg+CisKKyNlbHNlCisKKyNpbmNsdWRlICJM
YXVuY2hTZXJ2aWNlc1NQSS5oIgorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCit0eXBlZGVm
IGVudW0gOiBOU1VJbnRlZ2VyIHsKK30gSVhDb29yZGluYXRvclByb2dyZXNzUGhhc2U7CisKK3R5
cGVkZWYgZW51bSA6IE5TVUludGVnZXIgeworICAgIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yUGxh
Y2Vob2xkZXJQcm9taXNlID0gMSwKK30gSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JQcm9taXNlSWRl
bnRpZmllcjsKKwordHlwZWRlZiBlbnVtIDogTlNVSW50ZWdlciB7CisgICAgSVhDbGllbnRJZGVu
dGlmaWVyQXBwbGllZEZvciA9IDE5LAorfSBJWENsaWVudElkZW50aWZpZXI7CisKK0BjbGFzcyBM
U0FwcGxpY2F0aW9uUmVjb3JkOworQGNsYXNzIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yOworQGNs
YXNzIElYUGxhY2Vob2xkZXI7CitAY2xhc3MgSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyOwor
CitAcHJvdG9jb2wgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlciA8TlNPYmplY3Q+CitA
b3B0aW9uYWwKKy0gKHZvaWQpY29vcmRpbmF0b3JEaWRSZWdpc3RlckZvck9ic2VydmF0aW9uOihu
b25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7CistICh2b2lkKWNv
b3JkaW5hdG9yU2hvdWxkUHJpb3JpdGl6ZToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRv
ciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29yZGluYXRvclNob3VsZFJlc3VtZToobm9ubnVs
bCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29yZGlu
YXRvclNob3VsZFBhdXNlOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRp
bmF0b3I7CistICh2b2lkKWNvb3JkaW5hdG9yOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5h
dG9yICopY29vcmRpbmF0b3IgZGlkVXBkYXRlUHJvZ3Jlc3M6KGRvdWJsZSlwZXJjZW50Q29tcGxl
dGUgZm9yUGhhc2U6KElYQ29vcmRpbmF0b3JQcm9ncmVzc1BoYXNlKXBoYXNlIG92ZXJhbGxQcm9n
cmVzczooZG91YmxlKW92ZXJhbGxQcm9ncmVzczsKKy0gKHZvaWQpY29vcmRpbmF0b3JEaWRDb21w
bGV0ZVN1Y2Nlc3NmdWxseToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3Jk
aW5hdG9yIGZvckFwcGxpY2F0aW9uUmVjb3JkOihudWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3Jk
ICopYXBwUmVjb3JkOworLSAodm9pZCljb29yZGluYXRvckRpZEluc3RhbGxQbGFjZWhvbGRlcjoo
bm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFwcGxpY2F0
aW9uUmVjb3JkOihudWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopcGxhY2Vob2xkZXJSZWNv
cmQ7CistICh2b2lkKWNvb3JkaW5hdG9yOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9y
ICopY29vcmRpbmF0b3IgY2FuY2VsZWRXaXRoUmVhc29uOihub25udWxsIE5TRXJyb3IgKiljYW5j
ZWxSZWFzb24gY2xpZW50OihJWENsaWVudElkZW50aWZpZXIpY2xpZW50OworQGVuZAorCit0eXBl
ZGVmIHZvaWQgKF5JWEFwcEluc3RhbGxDb29yZGluYXRvckVycm9yQ29tcGxldGlvbikoTlNFcnJv
ciAqIF9OdWxsYWJsZSBlcnJvcik7CisKK0BpbnRlcmZhY2UgSVhBcHBJbnN0YWxsQ29vcmRpbmF0
b3IKKysgKHZvaWQpdW5pbnN0YWxsQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlE
IHJlcXVlc3RVc2VyQ29uZmlybWF0aW9uOihCT09MKXJlcXVlc3RVc2VyQ29uZmlybWF0aW9uIGNv
bXBsZXRpb246KElYQXBwSW5zdGFsbENvb3JkaW5hdG9yRXJyb3JDb21wbGV0aW9uKWNvbXBsZXRp
b247CisrIChCT09MKWNhbmNlbENvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmlu
ZyAqKWJ1bmRsZUlEIHdpdGhSZWFzb246KE5TRXJyb3IgKiljYW5jZWxSZWFzb24gY2xpZW50OihJ
WENsaWVudElkZW50aWZpZXIpY2xpZW50IGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKKysg
KGluc3RhbmNldHlwZSljb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcgKili
dW5kbGVJRCB3aXRoQ2xpZW50SUQ6KElYQ2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBjcmVhdGVJ
Zk5vdEV4aXN0aW5nOihCT09MKWNyZWF0ZSBjcmVhdGVkOihCT09MICopb3V0X2NyZWF0ZWQgZXJy
b3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworQHByb3BlcnR5IChub25hdG9taWMsIG51bGxhYmxl
LCB3ZWFrKSBpZDxJWEFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyPiBvYnNlcnZlcjsKKy0g
KEJPT0wpc2V0UGxhY2Vob2xkZXJQcm9taXNlOihJWFBsYWNlaG9sZGVyICopcGxhY2Vob2xkZXJQ
cm9taXNlIGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKKy0gKEJPT0wpc2V0VXNlckRhdGFQ
cm9taXNlOihJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXIgKil1c2VyRGF0YSBlcnJvcjooTlNF
cnJvciAqKilvdXRfZXJyb3I7CitAZW5kCisKK0BpbnRlcmZhY2UgSVhSZXN0b3JpbmdEZW1vdGVk
QXBwSW5zdGFsbENvb3JkaW5hdG9yIDogSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IKK0BlbmQKKwor
QGludGVyZmFjZSBJWE93bmVkRGF0YVByb21pc2UgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJm
YWNlIElYUHJvbWlzZWRJbk1lbW9yeURpY3Rpb25hcnkgOiBJWE93bmVkRGF0YVByb21pc2UKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICopbmFtZSBjbGllbnQ6KElYQ2xp
ZW50SWRlbnRpZmllcilpZGVudGl0eSBkaWN0aW9uYXJ5OihOU0RpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5OworQGVuZAorCitAaW50ZXJmYWNlIElYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzIDogTlNPYmpl
Y3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGxhdW5jaFByb2hpYml0ZWQ7CitAZW5kCisK
K0BpbnRlcmZhY2UgSVhQbGFjZWhvbGRlciA6IE5TT2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5p
dEFwcFBsYWNlaG9sZGVyV2l0aEJ1bmRsZU5hbWU6KE5TU3RyaW5nICopbmFtZSBidW5kbGVJRDoo
TlNTdHJpbmcgKilidW5kbGVJRCBpbnN0YWxsVHlwZTooTFNJbnN0YWxsVHlwZSlpbnN0YWxsVHlw
ZSBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBOU19ERVNJR05BVEVEX0lOSVRJ
QUxJWkVSOworLSAoQk9PTClzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZXM6KG5vbm51bGwgSVhQbGFj
ZWhvbGRlckF0dHJpYnV0ZXMgKilhdHRyaWJ1dGVzIGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJv
cjsKKy0gKEJPT0wpc2V0RW50aXRsZW1lbnRzUHJvbWlzZToobm9ubnVsbCBJWE93bmVkRGF0YVBy
b21pc2UgKillbnRpdGxlbWVudHMgZXJyb3I6KE5TRXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgX051
bGxhYmxlICogX051bGxhYmxlKW91dF9lcnJvcjsKKy0gKEJPT0wpc2V0Q29uZmlndXJhdGlvbkNv
bXBsZXRlV2l0aEVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKK0BlbmQKKworQGludGVyZmFj
ZSBJWE9wYXF1ZURhdGFQcm9taXNlIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFjZSBJWFBy
b21pc2VkT3V0T2ZCYW5kVHJhbnNmZXIgOiBJWE9wYXF1ZURhdGFQcm9taXNlCitAcHJvcGVydHkg
KG5vbmF0b21pYykgQk9PTCBjb21wbGV0ZTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBkb3VibGUg
cGVyY2VudENvbXBsZXRlOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcg
KiluYW1lIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWlkZW50aXR5IGRpc2tTcGFjZU5lZWRl
ZDoodWludDY0X3QpdG90YWxCeXRlczsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisK
KyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEku
aCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhlZWUxMDhkZGEwYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaApAQCAtMCww
ICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKyNpZiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQorCisvLyBUaGlzIHNwYWNlIGludGVudGlvbmFsbHkgbGVmdCBibGFuawor
CisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgorCit0eXBlZGVmIE5TX0VOVU0oTlNV
SW50ZWdlciwgTFNJbnN0YWxsVHlwZSkgeworICAgIExTSW5zdGFsbFR5cGVJbnRlbnRpb25hbERv
d25ncmFkZSA9IDgKK307CisKK0BpbnRlcmZhY2UgTFNSZWNvcmQgOiBOU09iamVjdAorQGVuZAor
CitAaW50ZXJmYWNlIExTQnVuZGxlUmVjb3JkIDogTFNSZWNvcmQKK0Bwcm9wZXJ0eSAocmVhZG9u
bHksIG51bGxhYmxlKSBOU1N0cmluZyAqYnVuZGxlSWRlbnRpZmllcjsKK0BlbmQKKworQGludGVy
ZmFjZSBMU0FwcGxpY2F0aW9uUmVjb3JkIDogTFNCdW5kbGVSZWNvcmQKK0Bwcm9wZXJ0eSAocmVh
ZG9ubHkpIEJPT0wgcGxhY2Vob2xkZXI7CitAcHJvcGVydHkgKHJlYWRvbmx5KSBOU1N0cmluZyAq
bWFuYWdlbWVudERvbWFpbjsKKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQnVuZGxlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilidW5kbGVJZGVudGlmaWVyIGFsbG93UGxhY2Vob2xkZXI6KEJPT0wp
YWxsb3dQbGFjZWhvbGRlciBlcnJvcjooTlNFcnJvciAqKilvdXRFcnJvcjsKK0BlbmQKKworQGlu
dGVyZmFjZSBMU0VudW1lcmF0b3I8X19jb3ZhcmlhbnQgT2JqZWN0VHlwZT4gOiBOU0VudW1lcmF0
b3I8T2JqZWN0VHlwZT4KK0BlbmQKKwordHlwZWRlZiBOU19PUFRJT05TKHVpbnQ2NF90LCBMU0Fw
cGxpY2F0aW9uRW51bWVyYXRpb25PcHRpb25zKSB7CisgICAgTFNBcHBsaWNhdGlvbkVudW1lcmF0
aW9uT3B0aW9uc0VudW1lcmF0ZVBsYWNlaG9sZGVycyA9ICgxIDw8IDYpCit9OworCitAaW50ZXJm
YWNlIExTQXBwbGljYXRpb25SZWNvcmQgKEVudW1lcmF0aW9uKQorKyAoTFNFbnVtZXJhdG9yPExT
QXBwbGljYXRpb25SZWNvcmQgKj4gKillbnVtZXJhdG9yV2l0aE9wdGlvbnM6KExTQXBwbGljYXRp
b25FbnVtZXJhdGlvbk9wdGlvbnMpb3B0aW9uczsKK0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExf
RU5ECisKKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRs
ZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmgKaW5kZXggOGE2ZDU3
Y2M2ZjViLi5lOTg1ZTMyMTAxNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
UHVzaEFwcEJ1bmRsZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRs
ZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogQGNs
YXNzIE5TRXJyb3I7CiAKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDcmVhdGVBcHBCdW5kbGUoUHVzaEFwcEJ1bmRsZSYsIFB1c2hBcHBCdW5kbGVDcmVhdGlv
blJlc3VsdCkgPSAwOwogfTsKIAotY2xhc3MgUHVzaEFwcEJ1bmRsZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFB1c2hBcHBCdW5kbGU+IHsKK2NsYXNzIFB1c2hBcHBCdW5kbGUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8UHVzaEFwcEJ1bmRsZT4gewogcHVibGljOgogICAgIHZpcnR1YWwgflB1
c2hBcHBCdW5kbGUoKTsKICAgICB2b2lkIGRldGFjaEZyb21DbGllbnQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbSBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQppbmRleCAzYjc4ZjI5MGMyN2UuLjAyZGJjZDc4ZDUy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQpAQCAtMzEsNiArMzEs
NyBAQAogI2ltcG9ydCAiRGFlbW9uRW5jb2Rlci5oIgogI2ltcG9ydCAiRGFlbW9uVXRpbGl0aWVz
LmgiCiAjaW1wb3J0ICJIYW5kbGVNZXNzYWdlLmgiCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgog
I2ltcG9ydCAiTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5LmgiCiAKICNpbXBvcnQgPHd0Zi9Db21wbGV0
aW9uSGFuZGxlci5oPgpAQCAtMjcwLDggKzI3MSwxMSBAQCB2b2lkIERhZW1vbjo6Z2V0T3JpZ2lu
c1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoQ2xpZW50Q29ubmVjdGlvbiogY29u
bgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVk
IHBsYXRmb3JtLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBmb3IgcmVhbCB3b3JsZCBidW5kbGVz
IG9uY2UgaW1wbGVtZW50ZWQuCi0gICAgcmVwbHlTZW5kZXIoeyB9KTsKKyNpZiBFTkFCTEUoSU5T
VEFMTF9DT09SRElOQVRJT05fQlVORExFUykKKyAgICBJQ0FwcEJ1bmRsZTo6Z2V0T3JpZ2luc1dp
dGhSZWdpc3RyYXRpb25zKCpjb25uZWN0aW9uLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisjZWxz
ZQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKIH0KIAogdm9pZCBE
YWVtb246OmRlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb24oQ2xpZW50Q29ubmVj
dGlvbiogY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgcmVwbHlTZW5kZXIpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjQwNjViZDg1NWFmLi5lN2Q0
ZWFhMzcwZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMS0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFuIEluc3RhbGxDb29yZGluYXRpb24gd2VicHVzaGQg
YmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjMzNzE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW06CisKIDIw
MjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBXS1dlYnNpdGVEYXRhU3RvcmUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIE1vY2sg
YXBwIGJ1bmRsZSB0ZXN0aW5nLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IGQ4NzEyYjA0MDUxNi4uMTYxMmFl
NDgwMTc0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1dlYlB1c2hEYWVtb24ubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJQdXNoRGFlbW9uLm1tCkBAIC0zMzAsNiArMzMwLDk4IEBAIFRFU1QoV2ViUHVzaEQs
IFBlcm1pc3Npb25NYW5hZ2VtZW50KQogICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVj
dG9yeSk7CiB9CiAKKyNpZiBQTEFURk9STShJT1MpCitzdGF0aWMgdm9pZCBkZWxldGVBbGxSZWdp
c3RyYXRpb25zRm9yRGF0YVN0b3JlKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3JlKQorewor
ICAgIF9fYmxvY2sgYm9vbCBvcmlnaW5PcGVyYXRpb25Eb25lID0gZmFsc2U7CisgICAgX19ibG9j
ayBSZXRhaW5QdHI8TlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPj4gb3JpZ2luU2V0OworICAgIFtk
YXRhU3RvcmUgX2dldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOl4o
TlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPiAqb3JpZ2lucykgeworICAgICAgICBvcmlnaW5TZXQg
PSBvcmlnaW5zOworICAgICAgICBvcmlnaW5PcGVyYXRpb25Eb25lID0gdHJ1ZTsKKyAgICB9XTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCisg
ICAgaWYgKCFbb3JpZ2luU2V0IGNvdW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX19ibG9j
ayBzaXplX3QgZGVsZXRlZE9yaWdpbnMgPSAwOworICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSBm
YWxzZTsKKyAgICBmb3IgKFdLU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiBpbiBvcmlnaW5TZXQuZ2V0
KCkpIHsKKyAgICAgICAgW2RhdGFTdG9yZSBfZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lz
dHJhdGlvbjpvcmlnaW4gY29tcGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAg
ICAgICAgICAgRVhQRUNUX0ZBTFNFKCEhZXJyb3IpOworICAgICAgICAgICAgaWYgKCsrZGVsZXRl
ZE9yaWdpbnMgPT0gW29yaWdpblNldCBjb3VudF0pCisgICAgICAgICAgICAgICAgb3JpZ2luT3Bl
cmF0aW9uRG9uZSA9IHRydWU7CisgICAgICAgIH1dOworICAgIH0KKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCisgICAgb3JpZ2luT3BlcmF0aW9u
RG9uZSA9IGZhbHNlOworICAgIFtkYXRhU3RvcmUgX2dldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlm
aWNhdGlvblBlcm1pc3Npb25zOl4oTlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPiAqb3JpZ2lucykg
eworICAgICAgICBFWFBFQ1RfRVEoW29yaWdpbnMgY291bnRdLCAwdSk7CisgICAgICAgIG9yaWdp
bk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmb3JpZ2luT3BlcmF0aW9uRG9uZSk7CisKK30KKworVEVTVChXZWJQdXNoRCwgSW5zdGFs
bENvb3JkaW5hdGlvbkJ1bmRsZXMpCit7CisgICAgTlNVUkwgKnRlbXBEaXJlY3RvcnkgPSBzZXRV
cFRlc3RXZWJQdXNoRCgpOworCisgICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRv
cHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgZGF0YVN0
b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNoTWFjaFNlcnZpY2VOYW1lID0gQCJvcmcud2Vi
a2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2UiOworICAgIGF1dG8gZGF0YVN0b3JlID0gYWRv
cHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpk
YXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBkZWxldGVBbGxSZWdpc3RyYXRp
b25zRm9yRGF0YVN0b3JlKGRhdGFTdG9yZS5nZXQoKSk7CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAg
IGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IGRhdGFTdG9yZS5nZXQoKTsK
KyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcmVmZXJlbmNlcyBfc2V0Tm90aWZpY2F0aW9uc0Vu
YWJsZWQ6WUVTXTsKKyAgICBmb3IgKF9XS0V4cGVyaW1lbnRhbEZlYXR1cmUgKmZlYXR1cmUgaW4g
W1dLUHJlZmVyZW5jZXMgX2V4cGVyaW1lbnRhbEZlYXR1cmVzXSkgeworICAgICAgICBpZiAoW2Zl
YXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIkJ1aWx0SW5Ob3RpZmljYXRpb25zRW5hYmxlZCJd
KQorICAgICAgICAgICAgW1tjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZ
RVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICB9CisKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9w
dE5TKFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJh
dGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVz
dGluZyJdOworCisgICAgW2hhbmRsZXIgc2V0U3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlcjpeKFdL
V2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgYXV0byByZXNw
b25zZSA9IGFkb3B0TlMoW1tOU1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJl
cXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0
ZXh0RW5jb2RpbmdOYW1lOm5pbF0pOworICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6
cmVzcG9uc2UuZ2V0KCldOworICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRh
dGFXaXRoQnl0ZXM6bWFpbkJ5dGVzIGxlbmd0aDpzdHJsZW4obWFpbkJ5dGVzKV1dOworICAgICAg
ICBbdGFzayBkaWRGaW5pc2hdOworICAgIH1dOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHRO
UyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgYXV0byB1
aURlbGVnYXRlID0gYWRvcHROUyhbW05vdGlmaWNhdGlvblBlcm1pc3Npb25EZWxlZ2F0ZSBhbGxv
Y10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdhdGU6dWlEZWxlZ2F0ZS5nZXQoKV07
CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJM
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdGluZzovL21haW4vaW5kZXguaHRtbCJdXV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZhbGVydFJlY2VpdmVkKTsKKworICAgIGFsZXJ0
UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0
IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdGluZzovL3NlY29uZGFy
eS9pbmRleC5odG1sIl1dXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmFsZXJ0UmVj
ZWl2ZWQpOworCisgICAgc3RhdGljIGJvb2wgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPj4gb3JpZ2luczsK
KyAgICBbZGF0YVN0b3JlIF9nZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNz
aW9uczpeKE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4gKnJhd09yaWdpbnMpIHsKKyAgICAgICAg
RVhQRUNUX0VRKFtyYXdPcmlnaW5zIGNvdW50XSwgMnUpOworICAgICAgICBvcmlnaW5zID0gcmF3
T3JpZ2luczsKKyAgICAgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZvcmlnaW5PcGVyYXRpb25Eb25lKTsKKworICAg
IGZvciAoV0tTZWN1cml0eU9yaWdpbiAqb3JpZ2luIGluIG9yaWdpbnMuZ2V0KCkpIHsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoW29yaWdpbi5wcm90b2NvbCBpc0VxdWFsVG9TdHJpbmc6QCJ0ZXN0aW5n
Il0pOworICAgICAgICBFWFBFQ1RfVFJVRShbb3JpZ2luLmhvc3QgaXNFcXVhbFRvU3RyaW5nOkAi
bWFpbiJdIHx8IFtvcmlnaW4uaG9zdCBpc0VxdWFsVG9TdHJpbmc6QCJzZWNvbmRhcnkiXSk7Cisg
ICAgfQorCisgICAgZGVsZXRlQWxsUmVnaXN0cmF0aW9uc0ZvckRhdGFTdG9yZShkYXRhU3RvcmUu
Z2V0KCkpOworICAgIGNsZWFuVXBUZXN0V2ViUHVzaEQodGVtcERpcmVjdG9yeSk7Cit9CisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNl
bmRpZiAvLyBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1dlYktp
dExpYnJhcmllcy9DaGFuZ2VMb2cgYi9XZWJLaXRMaWJyYXJpZXMvQ2hhbmdlTG9nCmluZGV4IDBi
ZjZlNGNlM2Y2OC4uZmIzN2UzMjg3MTk1IDEwMDY0NAotLS0gYS9XZWJLaXRMaWJyYXJpZXMvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdExpYnJhcmllcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMS0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIGFuIEluc3RhbGxDb29yZGluYXRpb24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRQcml2YXRlRnJhbWV3
b3JrU3R1YnMvaU9TLzE1L0luc3RhbGxDb29yZGluYXRpb24uZnJhbWV3b3JrL0luc3RhbGxDb29y
ZGluYXRpb24udGJkOiBBZGRlZC4KKwogMjAyMS0xMS0xNCAgQnJhZHkgRWlkc29uICA8YmVpZHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgR2V0IGRhZW1vbiBBUEkgcmVhZHkgdG8gd29yayBpbiB0
aGUgaU9TIHNpbXVsYXRvciAoc3RhcnRpbmcgd2l0aCBXZWJQdXNoRCkKZGlmZiAtLWdpdCBhL1dl
YktpdExpYnJhcmllcy9XZWJLaXRQcml2YXRlRnJhbWV3b3JrU3R1YnMvaU9TLzE1L0luc3RhbGxD
b29yZGluYXRpb24uZnJhbWV3b3JrL0luc3RhbGxDb29yZGluYXRpb24udGJkIGIvV2ViS2l0TGli
cmFyaWVzL1dlYktpdFByaXZhdGVGcmFtZXdvcmtTdHVicy9pT1MvMTUvSW5zdGFsbENvb3JkaW5h
dGlvbi5mcmFtZXdvcmsvSW5zdGFsbENvb3JkaW5hdGlvbi50YmQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNmJiMGU4M2Q0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRMaWJyYXJpZXMvV2ViS2l0UHJpdmF0ZUZyYW1ld29ya1N0dWJzL2lPUy8xNS9JbnN0YWxs
Q29vcmRpbmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRpbmF0aW9uLnRiZApAQCAtMCwwICsx
LDggQEAKKy0tLSAhdGFwaS10YmQtdjMKK2FyY2hzOiAgICAgICAgICAgWyB4ODZfNjQsIGFybTY0
LCBhcm02NGUgXQoraW5zdGFsbC1uYW1lOiAgICAnL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFt
ZXdvcmtzL0luc3RhbGxDb29yZGluYXRpb24uZnJhbWV3b3JrL0luc3RhbGxDb29yZGluYXRpb24n
CitwbGF0Zm9ybTogaW9zCitleHBvcnRzOgorICAtIGFyY2hzOiAgICAgICAgICAgWyB4ODZfNjQs
IGFybTY0LCBhcm02NGUgXQorICAgIG9iamMtY2xhc3NlczogICAgWyBJWEFwcEluc3RhbGxDb29y
ZGluYXRvciwgSVhPcGFxdWVEYXRhUHJvbWlzZSwgSVhPd25lZERhdGFQcm9taXNlLCBJWFBsYWNl
aG9sZGVyLCBJWFBsYWNlaG9sZGVyQXR0cmlidXRlcywgSVhQcm9taXNlZEluTWVtb3J5RGljdGlv
bmFyeSwgSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyLCBJWFJlc3RvcmluZ0RlbW90ZWRBcHBJ
bnN0YWxsQ29vcmRpbmF0b3IgXQorLi4uCg==
</data>
<flag name="commit-queue"
          id="470894"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445666</attachid>
            <date>2021-12-01 20:43:18 -0800</date>
            <delta_ts>2021-12-02 12:21:52 -0800</delta_ts>
            <desc>Patch v4</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>48758</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzExZmJlMDhmMDczLi4yZjE1Yzk0Yjc1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlQ29j
b2EuaDoKKwogMjAyMS0xMi0wMSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgQWRkIGEgcnVudGltZSBmbGFnIHRvIGVuYWJsZSBDU1MgVHJhbnNmb3Jt
cyBMZXZlbCAyIHNwZWMgY29tcGxpYW50IGJlaGF2aW9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybUVuYWJsZUNvY29hLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJs
ZUNvY29hLmgKaW5kZXggYWU5MmJlZTk4NjA0Li44MGZjODAzMzE0ZmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUVuYWJsZUNvY29hLmgKQEAgLTE0Myw2ICsxNDMsMTAgQEAKICNkZWZpbmUgRU5BQkxF
X0JVSUxUX0lOX05PVElGSUNBVElPTlMgMQogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChFTkFCTEVf
SU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykgJiYgUExBVEZPUk0oSU9TKQorI2RlZmluZSBF
TkFCTEVfSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUyAxCisjZW5kaWYKKwogI2lmICFkZWZp
bmVkKEVOQUJMRV9DQUNIRV9QQVJUSVRJT05JTkcpCiAjZGVmaW5lIEVOQUJMRV9DQUNIRV9QQVJU
SVRJT05JTkcgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwppbmRleCBhYTQ0NzQ4YzU2NmMuLjhk
ZDFjNmEwNDViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjEtMTIt
MDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhbiBJ
bnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSAidG9IZXhTdHJpbmciIHNvIHdlIGNh
biBTSEEyNTYgYW4gYXJiaXRyYXJ5IHN0cmluZyB0byBhIGhleCByZXByZXNlbnRhdGlvbi4KKwor
ICAgICAgICAqIHBhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg6CisgICAgICAgICogcGFsL2NyeXB0
by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcDoKKyAgICAgICAgKFBB
TDo6Q3J5cHRvRGlnZXN0Ojp0b0hleFN0cmluZyk6CisKIDIwMjEtMTEtMzAgIFRpbSBIb3J0b24g
IDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgbW9tZW50dW0gZXZl
bnQgc3ludGhlc2l6ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRv
L0NyeXB0b0RpZ2VzdC5oIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGln
ZXN0LmgKaW5kZXggMDZjMThjMzBlYjEwLi4xMzg0ODRiMzA5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBQQUwgewogCkBAIC00Nyw2
ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIFBBTF9FWFBPUlQgdm9pZCBhZGRCeXRlcyhjb25zdCB2
b2lkKiBpbnB1dCwgc2l6ZV90IGxlbmd0aCk7CiAgICAgUEFMX0VYUE9SVCBWZWN0b3I8dWludDhf
dD4gY29tcHV0ZUhhc2goKTsKKyAgICBQQUxfRVhQT1JUIFN0cmluZyB0b0hleFN0cmluZygpOwog
CiBwcml2YXRlOgogICAgIENyeXB0b0RpZ2VzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGln
ZXN0Q29tbW9uQ3J5cHRvLmNwcAppbmRleCAxY2U1Nzk3ZmVmNjIuLmRjZjBhMzQ0ZThlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0
b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlw
dG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAKQEAgLTE4Miw0ICsx
ODIsMTkgQEAgVmVjdG9yPHVpbnQ4X3Q+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK1N0cmluZyBDcnlwdG9EaWdlc3Q6OnRvSGV4U3RyaW5nKCkK
K3sKKyAgICBhdXRvIGhhc2ggPSBjb21wdXRlSGFzaCgpOworCisgICAgY2hhciogc3RhcnQgPSAw
OworICAgIHVuc2lnbmVkIGhhc2hMZW5ndGggPSBoYXNoLnNpemUoKTsKKyAgICBDU3RyaW5nIHJl
c3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoaGFzaExlbmd0aCAqIDIsIHN0YXJ0KTsK
KyAgICBjaGFyKiBidWZmZXIgPSBzdGFydDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhh
c2hMZW5ndGg7ICsraSkgeworICAgICAgICBzbnByaW50ZihidWZmZXIsIDMsICIlMDJYIiwgaGFz
aC5hdChpKSk7CisgICAgICAgIGJ1ZmZlciArPSAyOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChyZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
MzU5ZmRkY2MzYmM4Li4xNGNhNTJiY2MwMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIw
MjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvdmVyZWQgYnkgQVBJIHRlc3RzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBsZXRzIHRoZSBpT1MgYnVpbGQgY3JlYXRlIGEg
cGxhY2Vob2xkZXIgYXBwIGJ1bmRsZSB0byByZXByZXNlbnQgYSByZWdpc3RyYXRpb24gdXNpbmcg
SW5zdGFsbENvb3JkaW5hdGlvbi4KKyAgICAgICAgCisgICAgICAgICogQ29uZmlndXJhdGlvbnMv
d2VicHVzaGQueGNjb25maWc6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIAorICAgICAgICAqIHdlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW06
CisgICAgICAgIChXZWJQdXNoRDo6QXBwQnVuZGxlUmVxdWVzdDo6c3RhcnQpOiBVc2UgdGhlIElD
QXBwQnVuZGxlIGltcGxlbWVudGF0aW9uIHdoZW4gYXBwcm9wcmlhdGUuCisgICAgICAgIAorICAg
ICAgICAqIHdlYnB1c2hkL0lDQXBwQnVuZGxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
d2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oLgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVuZGxl
OjpjcmVhdGUpOgorICAgICAgICAKKyAgICAgICAgKiB3ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5tbTog
QWRkZWQuCisgICAgICAgICgtW1dlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyIGluaXRX
aXRoSUNBcHBCdW5kbGU6XSk6CisgICAgICAgICgtW1dlYkFwcEluc3RhbGxDb29yZGluYXRvck9i
c2VydmVyIGNvb3JkaW5hdG9yRGlkQ29tcGxldGVTdWNjZXNzZnVsbHk6Zm9yQXBwbGljYXRpb25S
ZWNvcmQ6XSk6CisgICAgICAgICgtW1dlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyIGNv
b3JkaW5hdG9yOmNhbmNlbGVkV2l0aFJlYXNvbjpjbGllbnQ6XSk6CisgICAgICAgIChXZWJQdXNo
RDo6YnJvYWRjYXN0RGVidWdNZXNzYWdlKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRs
ZTo6SUNBcHBCdW5kbGUpOgorICAgICAgICAoV2ViUHVzaEQ6OmVuY29kZU9yaWdpblN0cmluZ0Zv
ckJ1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViUHVzaEQ6Om9yaWdpblN0cmluZ0Zyb21F
bmNvZGVkQnVuZGxlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6YnVuZGxlUHJlZml4
Rm9ySG9zdEFwcElkZW50aWZpZXIpOgorICAgICAgICAoV2ViUHVzaEQ6OmJ1bmRsZU5hbWVGb3JP
cmlnaW5TdHJpbmdBbmRIb3N0QXBwSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6SUNB
cHBCdW5kbGU6OmdldE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyk6CisgICAgICAgIChXZWJQdXNo
RDo6SUNBcHBCdW5kbGU6OmdldEJ1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViUHVzaEQ6
OklDQXBwQnVuZGxlOjpjaGVja0ZvckV4aXN0aW5nQnVuZGxlKToKKyAgICAgICAgKFdlYlB1c2hE
OjpJQ0FwcEJ1bmRsZTo6ZGVsZXRlRXhpc3RpbmdCdW5kbGUpOgorICAgICAgICAoV2ViUHVzaEQ6
OklDQXBwQnVuZGxlOjpkaWREZWxldGVFeGlzdGluZ0J1bmRsZVdpdGhFcnJvcik6CisgICAgICAg
IChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6OnN0b3ApOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBw
QnVuZGxlOjpjcmVhdGVCdW5kbGUpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVuZGxlOjpi
dW5kbGVDcmVhdGlvblN1Y2NlZWRlZCk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6
OmJ1bmRsZUNyZWF0aW9uRmFpbGVkKToKKyAgICAgICAgCisgICAgICAgICogd2VicHVzaGQvSW5z
dGFsbENvb3JkaW5hdGlvblNQSS5oOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJwdXNoZC9MYXVuY2hT
ZXJ2aWNlc1NQSS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hBcHBC
dW5kbGUuaC4KKyAgICAgICAgKiB3ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmg6CisgICAgICAgIAor
ICAgICAgICAqIHdlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW06CisgICAgICAgIChXZWJQdXNoRDo6
RGFlbW9uOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9ucyk6IFVz
ZSB0aGUgSUNBcHBCdW5kbGUgaW1wbGVtZW50YXRpb24gd2hlbiBhcHByb3ByaWF0ZS4KKwogMjAy
MS0xMi0wMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV1
c2UgbmF2aWdhdGlvbiBwcmVsb2FkIGlmIHNlcnZpY2Ugd29ya2VyIGlzIGZldGNoaW5nIHRoZSBj
b3JyZXNwb25kaW5nIG5hdmlnYXRpb24gcmVxdWVzdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Db25maWd1cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQvQ29uZmln
dXJhdGlvbnMvd2VicHVzaGQueGNjb25maWcKaW5kZXggMzA1ZjIwYjIxMGNhLi5kM2YxZWZhODc3
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvd2VicHVzaGQueGNj
b25maWcKKysrIGIvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy93ZWJwdXNoZC54Y2NvbmZp
ZwpAQCAtMjUsNyArMjUsMjUgQEAKIAogUFJPRFVDVF9OQU1FID0gd2VicHVzaGQ7CiAKLU9USEVS
X0xERkxBR1MgPSAtbCBXVEYgLWZyYW1ld29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUZv
dW5kYXRpb247CitFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU1tzZGs9YXBwbGV0dipdID0gKjsK
K0VYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTW3Nkaz13YXRjaCpdID0gKjsKKworV0tfQ09SRV9T
RVJWSUNFU19MREZMQUdTID0gJChXS19DT1JFX1NFUlZJQ0VTX0xERkxBR1NfJChXS19QTEFURk9S
TV9OQU1FKSk7CitXS19DT1JFX1NFUlZJQ0VTX0xERkxBR1NfbWFjb3N4ID0gLWZyYW1ld29yayBD
b3JlU2VydmljZXM7CisKK1dLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1MgPSAkKFdLX01P
QklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfJChXS19QTEFURk9STV9OQU1FKSk7CitXS19NT0JJ
TEVfQ09SRV9TRVJWSUNFU19MREZMQUdTX2lwaG9uZW9zID0gLWZyYW1ld29yayBNb2JpbGVDb3Jl
U2VydmljZXM7CitXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTX2lwaG9uZXNpbXVsYXRv
ciA9ICQoV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHU19pcGhvbmVvcyk7CisKK1dLX0lO
U1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1MgPSAkKFdLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xE
RkxBR1NfJChXS19QTEFURk9STV9OQU1FKSk7CitXS19JTlNUQUxMX0NPT1JESU5BVElPTl9MREZM
QUdTX2lwaG9uZW9zID0gLWZyYW1ld29yayBJbnN0YWxsQ29vcmRpbmF0aW9uOworV0tfSU5TVEFM
TF9DT09SRElOQVRJT05fTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAkKFdLX0lOU1RBTExfQ09P
UkRJTkFUSU9OX0xERkxBR1NfaXBob25lb3MpCisKK1dLX1NIQTI1Nl9MREZMQUdTID0gJChXS19T
SEEyNTZfTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUpKTsKK1dLX1NIQTI1Nl9MREZMQUdTX2lw
aG9uZW9zID0gLWZvcmNlX2xvYWQgJChCVUlMVF9QUk9EVUNUU19ESVIpL2xpYlBBTC5hCitXS19T
SEEyNTZfTERGTEFHU19pcGhvbmVzaW11bGF0b3IgPSAkKFdLX1NIQTI1Nl9MREZMQUdTX2lwaG9u
ZW9zKQorCitPVEhFUl9MREZMQUdTID0gLWwgV1RGIC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJh
bWV3b3JrIENvcmVGb3VuZGF0aW9uICQoV0tfU0hBMjU2X0xERkxBR1MpICQoV0tfQ09SRV9TRVJW
SUNFU19MREZMQUdTKSAkKFdLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1MpICQoV0tfSU5T
VEFMTF9DT09SRElOQVRJT05fTERGTEFHUyk7CiBMSUJSQVJZX1NFQVJDSF9QQVRIUyA9ICQoQlVJ
TFRfUFJPRFVDVFNfRElSKTsKIAogV0tfUFJPQ0VTU0VEX1hDRU5UX0ZJTEU9JChURU1QX0ZJTEVf
RElSKS8kKEZVTExfUFJPRFVDVF9OQU1FKS5lbnRpdGxlbWVudHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGViNjQxYzEyMDcyOS4uMjk2
ZDU4YzhhODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTEwMjIsNiArMTAyMiwxMCBAQAogCQk1MTdBNTMxMDFGNDdBODYyMDBEQ0RD
MEEgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0E1MzBEMUY0N0E4NDMwMERDREMwQSAvKiBX
ZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oICovOyB9OwogCQk1MTdCNUYyRTI3NTczODJB
MDAyREMyMkQgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdCNUYyRDI3NTczODJB
MDAyREMyMkQgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggKi87IH07
CiAJCTUxN0I1RjJGMjc1NzM4MkIwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNv
bmZpZ3VyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0I1RjJEMjc1NzM4MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNv
bmZpZ3VyYXRpb24uaCAqLzsgfTsKKwkJNTE3QjVGMzcyNzU3REE4ODAwMkRDMjJEIC8qIExhdW5j
aFNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTdCNUYzMzI3NTdEQTg3MDAyREMyMkQgLyogTGF1bmNoU2VydmljZXNTUEkuaCAqLzsg
fTsKKwkJNTE3QjVGMzgyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QjVGMzQyNzU3REE4ODAw
MkRDMjJEIC8qIElDQXBwQnVuZGxlLm1tICovOyB9OworCQk1MTdCNUYzOTI3NTdEQTg4MDAyREMy
MkQgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QjVGMzUyNzU3REE4ODAwMkRDMjJEIC8qIEluc3RhbGxD
b29yZGluYXRpb25TUEkuaCAqLzsgfTsKKwkJNTE3QjVGM0EyNzU3REE4ODAwMkRDMjJEIC8qIElD
QXBwQnVuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTdCNUYzNjI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUuaCAqLzsgfTsKIAkJNTE3
Q0YwRTMxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTdDRjBFMTE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVz
c2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTE3Q0YwRTMxNjNBNDg2QzAwQzI5NTBGIC8qIENh
Y2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3Q0YwRTExNjNBNDg2QzAwQzI5
NTBGIC8qIENhY2hlU3RvcmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICov
OyB9OwogCQk1MTdDRjBFNDE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlcy5oICovOyB9OwpAQCAtNDM3Nyw2ICs0MzgxLDEwIEBACiAJCTUxN0E1MzBEMUY0N0E4
NDMwMERDREMwQSAvKiBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlcy5oOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdl
cy5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MTdBNTMwRTFGNDdB
ODQzMDBEQ0RDMEEgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlNXQ2xpZW50Q29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYlNX
Q2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTUxN0I1RjJEMjc1NzM4MkEwMDJEQzIyRCAvKiBXZWJQdXNoRGFl
bW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUHVzaERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxN0I1RjMzMjc1N0RBODcwMDJEQzIyRCAvKiBMYXVuY2hTZXJ2
aWNlc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXVuY2hTZXJ2aWNl
c1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTdCNUYzNDI3NTdEQTg4MDAy
REMyMkQgLyogSUNBcHBCdW5kbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBJQ0FwcEJ1bmRsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3
QjVGMzUyNzU3REE4ODAwMkRDMjJEIC8qIEluc3RhbGxDb29yZGluYXRpb25TUEkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTdCNUYzNjI3NTdEQTg4MDAyREMyMkQgLyogSUNB
cHBCdW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSUNBcHBCdW5kbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3Q0YwRTExNjNBNDg2QzAwQzI5NTBF
IC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNz
YWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQk1MTdDRjBFMTE2M0E0ODZDMDBDMjk1MEYgLyogQ2FjaGVTdG9yYWdl
RW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2Vp
dmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvQ2FjaGVTdG9yYWdlRW5naW5l
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CiAJCTUxN0NGMEUyMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtOTg5NCw2ICs5OTAyLDEwIEBACiAJCQkJNTE2MEU5NTQy
NzRCODg3MTAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QuaCAqLywKIAkJCQk1MTYwRTk1MzI3
NEI4ODcxMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5tbSAqLywKIAkJCQk1Q0JCNkQ0RDI3
MUY2N0NDMDBGRDFBNUQgLyogY29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5wbGlzdCAqLywKKwkJ
CQk1MTdCNUYzNjI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUuaCAqLywKKwkJCQk1MTdC
NUYzNDI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUubW0gKi8sCisJCQkJNTE3QjVGMzUy
NzU3REE4ODAwMkRDMjJEIC8qIEluc3RhbGxDb29yZGluYXRpb25TUEkuaCAqLywKKwkJCQk1MTdC
NUYzMzI3NTdEQTg3MDAyREMyMkQgLyogTGF1bmNoU2VydmljZXNTUEkuaCAqLywKIAkJCQk1MUY3
QkI3NTI3NDQ5OEJCMDBDNDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcuaCAqLywKIAkJ
CQk1MUY3QkI3NDI3NDQ5OEJBMDBDNDVBNzIgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcubW0g
Ki8sCiAJCQkJNTE2MEU5NUMyNzRDMkEwMzAwNTY3Mzg4IC8qIE1vY2tBcHBCdW5kbGVSZWdpc3Ry
eS5oICovLApAQCAtMTI0NDksMTMgKzEyNDYxLDE2IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
KwkJCQk1MTdCNUYzQTI3NTdEQTg4MDAyREMyMkQgLyogSUNBcHBCdW5kbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNjBFOTU2Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1QzE1NzlGQzI3MTdBRjUwMDBFRDUyODAgLyogRGFlbW9uVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUY3QkI3NzI3NDQ5OEJCMDBDNDVBNzIgLyog
TW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNjBFOTVFMjc0
QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxNjBFOTU5Mjc0QzBEODkwMDU2NzM4OCAvKiBQdXNoQXBwQnVuZGxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MUY3QkI3QjI3NDRDNTA3MDBDNDVBNzIgLyogUHVzaENsaWVudENvbm5lY3Rp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUxN0I1RjM3Mjc1N0RBODgwMDJEQzIyRCAvKiBMYXVu
Y2hTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3QjVGMkYyNzU3MzgyQjAwMkRD
MjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTE3QjVGMzkyNzU3REE4ODAwMkRDMjJEIC8qIEluc3RhbGxDb29yZGluYXRpb25T
UEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkNENjlGMjcyMzM5M0EwMEY3RjhFQyAvKiBXZWJQ
dXNoRGFlbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTE0OTkzLDYgKzE1MDA4LDcgQEAKIAkJCWZpbGVzID0g
KAogCQkJCTUxNjBFOTU1Mjc0Qjg4NzIwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0Lm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUMxNTdBMDEyNzE3QjdGQjAwRUQ1MjgwIC8qIEFyZ3VtZW50Q29k
ZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxN0I1RjM4Mjc1N0RBODgwMDJEQzIyRCAvKiBJ
Q0FwcEJ1bmRsZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRjdCQjdEMjc0NTY0MDQwMEM0NUE3
MiAvKiBDb2RlU2lnbmluZy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3OUZGMjcxN0I2RDIw
MEVENTI4MCAvKiBEYWVtb25EZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3OUZF
MjcxN0I2QzEwMEVENTI4MCAvKiBEYWVtb25FbmNvZGVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBCdW5kbGVSZXF1ZXN0Lm1tIGIvU291
cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBCdW5kbGVSZXF1ZXN0Lm1tCmluZGV4IGQwNDdlMWQ2MmE3
My4uNjA5N2Q3OThlYzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1
bmRsZVJlcXVlc3QubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBCdW5kbGVSZXF1
ZXN0Lm1tCkBAIC0yNiw2ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkFw
cEJ1bmRsZVJlcXVlc3QuaCIKIAorI2ltcG9ydCAiSUNBcHBCdW5kbGUuaCIKICNpbXBvcnQgIk1v
Y2tBcHBCdW5kbGVGb3JUZXN0aW5nLmgiCiAjaW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCiAjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4KQEAgLTUxLDggKzUyLDEzIEBAIHZv
aWQgQXBwQnVuZGxlUmVxdWVzdDo6c3RhcnQoKQogCiAgICAgaWYgKG1fY29ubmVjdGlvbi0+dXNl
TW9ja0J1bmRsZXNGb3JUZXN0aW5nKCkpCiAgICAgICAgIG1fYXBwQnVuZGxlID0gTW9ja0FwcEJ1
bmRsZUZvclRlc3Rpbmc6OmNyZWF0ZShtX29yaWdpblN0cmluZywgbV9jb25uZWN0aW9uLT5ob3N0
QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCksICp0aGlzKTsKLSAgICBlbHNlCisgICAgZWxzZSB7
CisjaWYgRU5BQkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMpCisgICAgICAgIG1fYXBw
QnVuZGxlID0gSUNBcHBCdW5kbGU6OmNyZWF0ZSgqbV9jb25uZWN0aW9uLCBtX29yaWdpblN0cmlu
ZywgKnRoaXMpOworI2Vsc2UKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgorICAgIH0KIAogICAgIHN0YXJ0SW50ZXJuYWwoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBCdW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVz
aGQvSUNBcHBCdW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
Ljk2NmUwYzAxODc5OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
SUNBcHBCdW5kbGUuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShJ
TlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQorCisjaW1wb3J0ICJJbnN0YWxsQ29vcmRpbmF0
aW9uU1BJLmgiCisjaW1wb3J0ICJQdXNoQXBwQnVuZGxlLmgiCisjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CisjaW1wb3J0IDx3dGYvV2Vha1B0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK0BjbGFzcyBOU0Vycm9yOworQGNsYXNzIFdlYkFwcEluc3RhbGxDb29yZGluYXRv
ck9ic2VydmVyOworCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitjbGFzcyBDbGllbnRDb25uZWN0
aW9uOworCitjbGFzcyBJQ0FwcEJ1bmRsZSA6IHB1YmxpYyBQdXNoQXBwQnVuZGxlLCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8SUNBcHBCdW5kbGU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPElDQXBwQnVuZGxlPiBjcmVhdGUoQ2xpZW50Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIFB1c2hBcHBC
dW5kbGVDbGllbnQmIGNsaWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IElDQXBwQnVuZGxlKGNvbm5lY3Rpb24sIG9yaWdpblN0cmluZywgY2xpZW50KSk7CisgICAgfQor
CisgICAgdm9pZCBidW5kbGVDcmVhdGlvblN1Y2NlZWRlZCgpOworICAgIHZvaWQgYnVuZGxlQ3Jl
YXRpb25GYWlsZWQoTlNFcnJvciAqKTsKKworICAgIHN0YXRpYyB2b2lkIGdldE9yaWdpbnNXaXRo
UmVnaXN0cmF0aW9ucyhDbGllbnRDb25uZWN0aW9uJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBWZWN0b3I8U3RyaW5nPiYpPiYmKTsKKworcHJpdmF0ZToKKyAgICBJQ0FwcEJ1bmRsZShD
bGllbnRDb25uZWN0aW9uJiwgY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIFB1c2hBcHBCdW5k
bGVDbGllbnQmKTsKKworICAgIGNvbnN0IFN0cmluZyYgZ2V0QnVuZGxlSWRlbnRpZmllcigpOwor
CisgICAgdm9pZCBjaGVja0ZvckV4aXN0aW5nQnVuZGxlKCkgZmluYWw7CisgICAgdm9pZCBkZWxl
dGVFeGlzdGluZ0J1bmRsZSgpIGZpbmFsOworICAgIHZvaWQgY3JlYXRlQnVuZGxlKCkgZmluYWw7
CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisKKyAgICB2b2lkIGRpZERlbGV0ZUV4aXN0aW5nQnVu
ZGxlV2l0aEVycm9yKE5TRXJyb3IgKik7CisKKyAgICBSZXRhaW5QdHI8SVhSZXN0b3JpbmdEZW1v
dGVkQXBwSW5zdGFsbENvb3JkaW5hdG9yPiBtX2FwcEluc3RhbGxDb29yZGluYXRvcjsKKyAgICBS
ZXRhaW5QdHI8V2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXI+IG1fYXBwSW5zdGFsbE9i
c2VydmVyOworCisgICAgU3RyaW5nIG1fb3JpZ2luU3RyaW5nOworICAgIFJlZlB0cjxDbGllbnRD
b25uZWN0aW9uPiBtX2NsaWVudENvbm5lY3Rpb247CisKKyAgICBTdHJpbmcgbV9idW5kbGVJZGVu
dGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBC
dW5kbGUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41OTdkNjQz
NTA5MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lDQXBwQnVu
ZGxlLm1tCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgi
CisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgorCisjaWYgRU5BQkxFKElOU1RBTExfQ09PUkRJTkFU
SU9OX0JVTkRMRVMpCisKKyNpbXBvcnQgIkFwcEJ1bmRsZVJlcXVlc3QuaCIKKyNpbXBvcnQgIkxh
dW5jaFNlcnZpY2VzU1BJLmgiCisjaW1wb3J0ICJQdXNoQ2xpZW50Q29ubmVjdGlvbi5oIgorI2lt
cG9ydCAiV2ViUHVzaERhZW1vbi5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5
cGVzLmg+CisjaW1wb3J0IDxwYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oPgorI2ltcG9ydCA8d3Rm
L01haW5UaHJlYWQuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCitOU1N0cmluZyAqcHVzaEJ1bmRsZUFwcE1hbmFnZW1l
bnREb21haW4gPSBAImNvbS5hcHBsZS5XZWJLaXQuUHVzaEJ1bmRsZXMiOworCitAaW50ZXJmYWNl
IFdlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyIDogTlNPYmplY3QgPElYQXBwSW5zdGFs
bENvb3JkaW5hdG9yT2JzZXJ2ZXI+CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJQ0FwcEJ1bmRs
ZTooV2ViUHVzaEQ6OklDQXBwQnVuZGxlJilpY0FwcEJ1bmRsZTsKK0Bwcm9wZXJ0eSBXZWFrUHRy
PFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZT4gYnVuZGxlOworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIKKworLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoSUNBcHBCdW5kbGU6KFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZSYpaWNBcHBCdW5kbGUKK3sKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAg
IF9idW5kbGUgPSBpY0FwcEJ1bmRsZTsKKworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lk
KWNvb3JkaW5hdG9yRGlkQ29tcGxldGVTdWNjZXNzZnVsbHk6KG5vbm51bGwgSVhBcHBJbnN0YWxs
Q29vcmRpbmF0b3IgKiljb29yZGluYXRvciBmb3JBcHBsaWNhdGlvblJlY29yZDoobnVsbGFibGUg
TFNBcHBsaWNhdGlvblJlY29yZCAqKWFwcFJlY29yZAoreworICAgIGNhbGxPbk1haW5SdW5Mb29w
KFtzZWxmLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPGlkPihzZWxmKV0geworICAgICAgICBp
ZiAoX2J1bmRsZSkKKyAgICAgICAgICAgIF9idW5kbGUtPmJ1bmRsZUNyZWF0aW9uU3VjY2VlZGVk
KCk7CisgICAgfSk7Cit9CisKKy0gKHZvaWQpY29vcmRpbmF0b3I6KG5vbm51bGwgSVhBcHBJbnN0
YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBjYW5jZWxlZFdpdGhSZWFzb246KG5vbm51bGwg
TlNFcnJvciAqKWNhbmNlbFJlYXNvbiBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmllciljbGllbnQK
K3sKKyAgICBjYWxsT25NYWluUnVuTG9vcChbc2VsZiwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0
cjxpZD4oc2VsZiksIHByb3RlY3RlZENhbmNlbFJlYXNvbiA9IFJldGFpblB0cjxOU0Vycm9yPihj
YW5jZWxSZWFzb24pXSB7CisgICAgICAgIGlmIChfYnVuZGxlKQorICAgICAgICAgICAgX2J1bmRs
ZS0+YnVuZGxlQ3JlYXRpb25GYWlsZWQocHJvdGVjdGVkQ2FuY2VsUmVhc29uLmdldCgpKTsKKyAg
ICB9KTsKK30KKworQGVuZAorCit1c2luZyBQQUw6OkNyeXB0b0RpZ2VzdDsKKworbmFtZXNwYWNl
IFdlYlB1c2hEIHsKKworc3RhdGljIHZvaWQgYnJvYWRjYXN0RGVidWdNZXNzYWdlKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKK3sKKyAgICBEYWVtb246OnNpbmdsZXRvbigpLmJyb2FkY2FzdERlYnVn
TWVzc2FnZShKU0M6Ok1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiSUNBcHBCdW5kbGU6
ICIsIG1lc3NhZ2UpKTsKK30KKworSUNBcHBCdW5kbGU6OklDQXBwQnVuZGxlKENsaWVudENvbm5l
Y3Rpb24mIGNsaWVudENvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBQdXNo
QXBwQnVuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgOiBQdXNoQXBwQnVuZGxlKGNsaWVudCkKKyAg
ICAsIG1fb3JpZ2luU3RyaW5nKG9yaWdpblN0cmluZykKKyAgICAsIG1fY2xpZW50Q29ubmVjdGlv
bigmY2xpZW50Q29ubmVjdGlvbikKK3sKK30KKworc3RhdGljIFN0cmluZyBlbmNvZGVPcmlnaW5T
dHJpbmdGb3JCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaW5wdXQpCit7CisgICAgLy8g
QnVuZGxlIGlkZW50aWZpZXJzIGhhdmUgZXhhY3RseSA2NCB2YWxpZCBjaGFyYWN0ZXJzLgorICAg
IC8vIGEteiwgQS1aLCAwLTksICctJywgYW5kICcuJworICAgIC8vIEJhc2U2NCBVUkwgZW5jb2Rp
bmcgdXNlcyAnLScgYW5kICdfJyBmb3IgdGhlIGZpbmFsIDIgY2hhcmFjdGVycworICAgIC8vIEZv
ciBvdXIgYnVuZGxlIGlkZW50aWZpZXIsIHdlJ2xsIEJhc2U2NCBVUkwgZW5jb2RlIHRoZW4gcmVw
bGFjZSAnXycgd2l0aCAnLicKKyAgICAvLyBXZSBhbHNvIGdldCByaWQgb2YgdGhlIHR5cGljYWwg
Jz0nIHBhZGRpbmcgZm9yIGJhc2U2NCBlbmNvZGluZy4KKworICAgIGF1dG8gYmFzZTY0ID0gYmFz
ZTY0VVJMRW5jb2RlVG9WZWN0b3IoaW5wdXQudXRmOCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGJhc2U2NC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmFzZTY0W2ldID09ICdf
JykKKyAgICAgICAgICAgIGJhc2U2NFtpXSA9ICcuJzsKKyAgICB9CisKKyAgICBzaXplX3QgbnVt
YmVyRXF1YWxTaWducyA9IDA7CisgICAgaWYgKGJhc2U2NC5zaXplKCkgPj0gMSAmJiBiYXNlNjQu
bGFzdCgpID09ICc9JykKKyAgICAgICAgKytudW1iZXJFcXVhbFNpZ25zOworICAgIGlmIChiYXNl
NjQuc2l6ZSgpID49IDIgJiYgYmFzZTY0W2Jhc2U2NC5zaXplKCkgLSAyXSA9PSAnPScpCisgICAg
ICAgICsrbnVtYmVyRXF1YWxTaWduczsKKworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGJh
c2U2NC5kYXRhKCksIGJhc2U2NC5zaXplKCkgLSBudW1iZXJFcXVhbFNpZ25zKTsKK30KKworc3Rh
dGljIFN0cmluZyBvcmlnaW5TdHJpbmdGcm9tRW5jb2RlZEJ1bmRsZUlkZW50aWZpZXIoY29uc3Qg
U3RyaW5nJiBpbnB1dCkKK3sKKyAgICBhdXRvIHV0ZjggPSBpbnB1dC51dGY4KCk7CisgICAgYXV0
byBidWZmZXIgPSB1dGY4Lm11dGFibGVEYXRhKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB1dGY4Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJ1ZmZlcltpXSA9PSAnLicpCisg
ICAgICAgICAgICBidWZmZXJbaV0gPSAnXyc7CisgICAgfQorCisgICAgYXV0byBkZWNvZGVkID0g
YmFzZTY0VVJMRGVjb2RlKGJ1ZmZlciwgdXRmOC5sZW5ndGgoKSk7CisgICAgaWYgKCFkZWNvZGVk
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZGVj
b2RlZC0+ZGF0YSgpLCBkZWNvZGVkLT5zaXplKCkpOworfQorCitzdGF0aWMgU3RyaW5nIGJ1bmRs
ZVByZWZpeEZvckhvc3RBcHBJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaG9zdEFwcElkZW50aWZp
ZXIpCit7CisgICAgYXV0byBhcHBEaWdlc3QgPSBQQUw6OkNyeXB0b0RpZ2VzdDo6Y3JlYXRlKENy
eXB0b0RpZ2VzdDo6QWxnb3JpdGhtOjpTSEFfMjU2KTsKKyAgICBhdXRvIHV0ZjhJZGVudGlmaWVy
ID0gaG9zdEFwcElkZW50aWZpZXIudXRmOCgpOworICAgIGFwcERpZ2VzdC0+YWRkQnl0ZXModXRm
OElkZW50aWZpZXIuZGF0YSgpLCB1dGY4SWRlbnRpZmllci5sZW5ndGgoKSk7CisKKyAgICByZXR1
cm4gbWFrZVN0cmluZygiY29tLmFwcGxlLldlYktpdC5QdXNoQnVuZGxlLiIsIGFwcERpZ2VzdC0+
dG9IZXhTdHJpbmcoKSwgIi4iKTsKK30KKworc3RhdGljIFN0cmluZyBidW5kbGVOYW1lRm9yT3Jp
Z2luU3RyaW5nQW5kSG9zdEFwcElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcs
IGNvbnN0IFN0cmluZyYgaG9zdEFwcElkZW50aWZpZXIpCit7CisgICAgLy8gRklYTUU6IE9uY2Ug
d2UgY2FuIHN0b3JlIHRoZSBvcmlnaW4gc3RyaW5nIHdpdGhpbiB0aGUgYXBwIGJ1bmRsZSwgaGFz
aCB0aGUgb3JpZ2luIHN0cmluZyBhcyB3ZWxsLgorICAgIC8vIEZvciBub3cgd2UgYmFzZTY0IGVu
Y29kZSBpdCB0byBtYWtlIGEgdmFsaWQgYnVuZGxlIGlkZW50aWZpZXIgdGhhdCBjYXJyaWVzIHRo
ZSBpbmZvcm1hdGlvbi4KKyAgICByZXR1cm4gbWFrZVN0cmluZyhidW5kbGVQcmVmaXhGb3JIb3N0
QXBwSWRlbnRpZmllcihob3N0QXBwSWRlbnRpZmllciksIGVuY29kZU9yaWdpblN0cmluZ0ZvckJ1
bmRsZUlkZW50aWZpZXIob3JpZ2luU3RyaW5nKSk7Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6Omdl
dE9yaWdpbnNXaXRoUmVnaXN0cmF0aW9ucyhDbGllbnRDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsKKworICAgIFJldGFpblB0
cjxOU1N0cmluZz4gYnVuZGxlSWRlbnRpZmllclByZWZpeCA9IChOU1N0cmluZyAqKWJ1bmRsZVBy
ZWZpeEZvckhvc3RBcHBJZGVudGlmaWVyKGNvbm5lY3Rpb24uaG9zdEFwcENvZGVTaWduaW5nSWRl
bnRpZmllcigpKTsKKworICAgIExTRW51bWVyYXRvcjxMU0FwcGxpY2F0aW9uUmVjb3JkICo+ICpl
bnVtZXJhdG9yID0gW0xTQXBwbGljYXRpb25SZWNvcmQgZW51bWVyYXRvcldpdGhPcHRpb25zOkxT
QXBwbGljYXRpb25FbnVtZXJhdGlvbk9wdGlvbnNFbnVtZXJhdGVQbGFjZWhvbGRlcnNdOworICAg
IGZvciAoTFNBcHBsaWNhdGlvblJlY29yZCAqcmVjb3JkID0gW2VudW1lcmF0b3IgbmV4dE9iamVj
dF07IHJlY29yZDsgcmVjb3JkID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pIHsKKyAgICAgICAg
aWYgKCFbcmVjb3JkLm1hbmFnZW1lbnREb21haW4gaXNFcXVhbFRvU3RyaW5nOnB1c2hCdW5kbGVB
cHBNYW5hZ2VtZW50RG9tYWluXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlm
ICghW3JlY29yZC5idW5kbGVJZGVudGlmaWVyIGhhc1ByZWZpeDpidW5kbGVJZGVudGlmaWVyUHJl
Zml4LmdldCgpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEZJWE1FOiBG
b3Igbm93IHdlIHN0b3JlIHRoZSBvcmlnaW4gc3RyaW5nIGluIHRoZSBidW5kbGUgaWRlbnRpZmll
ciBiYXNlNjQgZW5jb2RlZAorICAgICAgICAvLyBPbmNlIHdlIHN0b3JlIGl0IGluIHRoZSBidW5k
bGUgaXRzZWxmLCB3ZSdsbCBoYXNoIHRoZSBvcmlnaW4gc3RyaW5nIGluIHRoZSBidW5kbGUgaWRl
bnRpZmllciBhbmQgZXh0cmFjdCBpdCBmcm9tIHRoZSBidW5kbGUKKworICAgICAgICBOU0FycmF5
ICpjb21wb25lbnRzID0gW3JlY29yZC5idW5kbGVJZGVudGlmaWVyIGNvbXBvbmVudHNTZXBhcmF0
ZWRCeVN0cmluZzpidW5kbGVJZGVudGlmaWVyUHJlZml4LmdldCgpXTsKKyAgICAgICAgQVNTRVJU
KGNvbXBvbmVudHMuY291bnQgPj0gMik7CisKKyAgICAgICAgYXV0byBvcmlnaW5TdHJpbmcgPSBv
cmlnaW5TdHJpbmdGcm9tRW5jb2RlZEJ1bmRsZUlkZW50aWZpZXIoY29tcG9uZW50c1sxXSk7Cisg
ICAgICAgIGlmIChvcmlnaW5TdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQob3JpZ2luU3RyaW5nKTsKKyAgICB9CisgICAgCisg
ICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0cyk7Cit9CisKK2NvbnN0IFN0cmluZyYgSUNBcHBC
dW5kbGU6OmdldEJ1bmRsZUlkZW50aWZpZXIoKQoreworICAgIGlmIChtX2J1bmRsZUlkZW50aWZp
ZXIuaXNFbXB0eSgpICYmIG1fY2xpZW50Q29ubmVjdGlvbikKKyAgICAgICAgbV9idW5kbGVJZGVu
dGlmaWVyID0gYnVuZGxlTmFtZUZvck9yaWdpblN0cmluZ0FuZEhvc3RBcHBJZGVudGlmaWVyKG1f
b3JpZ2luU3RyaW5nLCBtX2NsaWVudENvbm5lY3Rpb24tPmhvc3RBcHBDb2RlU2lnbmluZ0lkZW50
aWZpZXIoKSk7CisKKyAgICByZXR1cm4gbV9idW5kbGVJZGVudGlmaWVyOworfQorCit2b2lkIElD
QXBwQnVuZGxlOjpjaGVja0ZvckV4aXN0aW5nQnVuZGxlKCkKK3sKKyAgICBOU0Vycm9yICplcnJv
ciA9IG5pbDsKKyAgICBSZXRhaW5QdHI8TFNBcHBsaWNhdGlvblJlY29yZD4gYXBwUmVjb3JkID0g
YWRvcHROUyhbW0xTQXBwbGljYXRpb25SZWNvcmQgYWxsb2NdIGluaXRXaXRoQnVuZGxlSWRlbnRp
ZmllcjooTlNTdHJpbmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCkgYWxsb3dQbGFjZWhvbGRlcjpZ
RVMgZXJyb3I6JmVycm9yXSk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50
LT5kaWRDaGVja0ZvckV4aXN0aW5nQnVuZGxlKCp0aGlzLCBhcHBSZWNvcmQgPyBQdXNoQXBwQnVu
ZGxlRXhpc3RzOjpZZXMgOiBQdXNoQXBwQnVuZGxlRXhpc3RzOjpObyk7Cit9CisKK3ZvaWQgSUNB
cHBCdW5kbGU6OmRlbGV0ZUV4aXN0aW5nQnVuZGxlKCkKK3sKKyAgICBbSVhBcHBJbnN0YWxsQ29v
cmRpbmF0b3IgdW5pbnN0YWxsQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWdldEJ1bmRsZUlk
ZW50aWZpZXIoKSByZXF1ZXN0VXNlckNvbmZpcm1hdGlvbjpOTyBjb21wbGV0aW9uOlt0aGlzLCBw
cm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfV0gKE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAg
IGNhbGxPbk1haW5SdW5Mb29wKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwg
ZXJyb3IgPSBSZXRhaW5QdHI8TlNFcnJvcj4oZXJyb3IpXSB7CisgICAgICAgICAgICBkaWREZWxl
dGVFeGlzdGluZ0J1bmRsZVdpdGhFcnJvcihlcnJvci5nZXQoKSk7CisgICAgICAgIH0pOworICAg
IH1dOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpkaWREZWxldGVFeGlzdGluZ0J1bmRsZVdpdGhF
cnJvcihOU0Vycm9yICplcnJvcikKK3sKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIGJyb2FkY2Fz
dERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJFcnJvciBkZWxldGluZyBleGlzdGluZyBidW5kbGU6
ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRpb25dKSkpOworCisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVXaXRoRXJyb3IoKnRoaXMs
IGVycm9yKTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6c3RvcCgpCit7CisgICAgbV9hcHBJbnN0
YWxsQ29vcmRpbmF0b3IuZ2V0KCkub2JzZXJ2ZXIgPSBuaWw7CisgICAgbV9hcHBJbnN0YWxsQ29v
cmRpbmF0b3IgPSBuaWw7CisgICAgbV9hcHBJbnN0YWxsT2JzZXJ2ZXIgPSBuaWw7Cit9CisKK3Zv
aWQgSUNBcHBCdW5kbGU6OmNyZWF0ZUJ1bmRsZSgpCit7CisgICAgUmV0YWluUHRyPE5TU3RyaW5n
PiBidW5kbGVJZGVudGlmaWVyID0gKE5TU3RyaW5nICopZ2V0QnVuZGxlSWRlbnRpZmllcigpOwor
CisgICAgLy8gQ2FuY2VsIGFueSBwcmV2aW91cyBpbnN0YWxsIGNvb3JkaW5hdG9yIHRoYXQgbWln
aHQndmUgYmVlbiBsZWZ0IGhhbmdpbmcgaW4gYSBwYXJ0aWFsbHkgZmluaXNoZWQgc3RhdGUKKyAg
ICBOU0Vycm9yICplcnJvciA9IG5pbDsKKyAgICBbSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgY2Fu
Y2VsQ29vcmRpbmF0b3JGb3JBcHBXaXRoQnVuZGxlSUQ6YnVuZGxlSWRlbnRpZmllci5nZXQoKSB3
aXRoUmVhc29uOltOU0Vycm9yIGVycm9yV2l0aERvbWFpbjpAIldLRXJyb3JEb21haW4iIGNvZGU6
MSB1c2VySW5mbzpuaWxdIGNsaWVudDpJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yIGVycm9y
OiZlcnJvcl07CisKKyAgICBCT09MIGNyZWF0ZWQgPSBOTzsKKyAgICBlcnJvciA9IG5pbDsKKyAg
ICBtX2FwcEluc3RhbGxDb29yZGluYXRvciA9IFtJWFJlc3RvcmluZ0RlbW90ZWRBcHBJbnN0YWxs
Q29vcmRpbmF0b3IgY29vcmRpbmF0b3JGb3JBcHBXaXRoQnVuZGxlSUQ6YnVuZGxlSWRlbnRpZmll
ci5nZXQoKSB3aXRoQ2xpZW50SUQ6SVhDbGllbnRJZGVudGlmaWVyQXBwbGllZEZvciBjcmVhdGVJ
Zk5vdEV4aXN0aW5nOllFUyBjcmVhdGVkOiZjcmVhdGVkIGVycm9yOiZlcnJvcl07CisKKyAgICBp
ZiAoIW1fYXBwSW5zdGFsbENvb3JkaW5hdG9yIHx8IGVycm9yKSB7CisgICAgICAgIGJyb2FkY2Fz
dERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJVbmFibGUgdG8gY3JlYXRlIGluc3RhbGwgY29vcmRp
bmF0aW9yIGZvciBhcHAgYnVuZGxlIGlkZW50aWZpZXIgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZp
ZXIuZ2V0KCkpKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghY3JlYXRlZCkgeworICAgICAgICBicm9hZGNh
c3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRXhpc3RpbmcgaW5zdGFsbCBjb29yZGluYXRpb3Ig
Zm9yIGFwcCBidW5kbGUgaWRlbnRpZmllciAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQo
KSksICIgd2FzIGZvdW5kLiBUaGlzIGlzIHVuZXhwZWN0ZWQuIikpOworICAgICAgICBidW5kbGVD
cmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Fw
cEluc3RhbGxPYnNlcnZlciA9IGFkb3B0TlMoW1tXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNl
cnZlciBhbGxvY10gaW5pdFdpdGhJQ0FwcEJ1bmRsZToqdGhpc10pOworICAgIG1fYXBwSW5zdGFs
bENvb3JkaW5hdG9yLmdldCgpLm9ic2VydmVyID0gbV9hcHBJbnN0YWxsT2JzZXJ2ZXIuZ2V0KCk7
CisKKyAgICBSZXRhaW5QdHI8SVhQbGFjZWhvbGRlcj4gcGxhY2Vob2xkZXIgPSBhZG9wdE5TKFtb
SVhQbGFjZWhvbGRlciBhbGxvY10gaW5pdEFwcFBsYWNlaG9sZGVyV2l0aEJ1bmRsZU5hbWU6KE5T
U3RyaW5nICopbV9vcmlnaW5TdHJpbmcgYnVuZGxlSUQ6YnVuZGxlSWRlbnRpZmllci5nZXQoKSBp
bnN0YWxsVHlwZTpMU0luc3RhbGxUeXBlSW50ZW50aW9uYWxEb3duZ3JhZGUgY2xpZW50OklYQ2xp
ZW50SWRlbnRpZmllckFwcGxpZWRGb3JdKTsKKworICAgIFJldGFpblB0cjxJWFBsYWNlaG9sZGVy
QXR0cmlidXRlcz4gcGxhY2Vob2xkZXJBdHRyaWJ1dGVzID0gYWRvcHROUyhbSVhQbGFjZWhvbGRl
ckF0dHJpYnV0ZXMgbmV3XSk7CisgICAgcGxhY2Vob2xkZXJBdHRyaWJ1dGVzLmdldCgpLmxhdW5j
aFByb2hpYml0ZWQgPSBZRVM7CisKKyAgICBbcGxhY2Vob2xkZXIgc2V0UGxhY2Vob2xkZXJBdHRy
aWJ1dGVzOnBsYWNlaG9sZGVyQXR0cmlidXRlcy5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgIGlm
IChlcnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiVW5h
YmxlIHRvIHNldCBwbGFjZWhvbGRlciBhdHRyaWJ1dGVzIGZvciBidW5kbGUgIiwgU3RyaW5nKGJ1
bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0
aW9uXSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgTlNEaWN0aW9uYXJ5ICplbnRpdGxlbWVudHNEaWN0aW9uYXJ5
ID0gQHsKKyAgICAgICAgQCJjb20uYXBwbGUucHJpdmF0ZS51c2Vybm90aWZpY2F0aW9ucy5idW5k
bGUtaWRlbnRpZmllcnMiOiBidW5kbGVJZGVudGlmaWVyLmdldCgpLAorICAgICAgICBAImNvbS5h
cHBsZS5wcml2YXRlLnVzZXJub3RpZmljYXRpb25zLm5vdGlmaWNhdGlvbi1zaW11bGF0b3IiOiBA
WUVTLAorICAgICAgICBAImNvbS5hcHBsZS5kZXZlbG9wZXIuYXBwLW1hbmFnZW1lbnQtZG9tYWlu
IjogcHVzaEJ1bmRsZUFwcE1hbmFnZW1lbnREb21haW4KKyAgICB9OworICAgIFJldGFpblB0cjxJ
WFByb21pc2VkSW5NZW1vcnlEaWN0aW9uYXJ5PiBlbnRpdGxlbWVudHNQcm9taXNlID0gYWRvcHRO
UyhbW0lYUHJvbWlzZWRJbk1lbW9yeURpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoTmFtZTpbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkVudGl0bGVtZW50cyBQcm9taXNlIGZvciAlQCIsIGJ1
bmRsZUlkZW50aWZpZXIuZ2V0KCldIGNsaWVudDpJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9y
IGRpY3Rpb25hcnk6ZW50aXRsZW1lbnRzRGljdGlvbmFyeV0pOworCisgICAgaWYgKCFlbnRpdGxl
bWVudHNQcm9taXNlKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5n
KCJVbmFibGUgdG8gY3JlYXRlIHBsYWNlaG9sZGVyIGVudGl0bGVtZW50cyBwcm9taXNlIGZvciBi
dW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpKSk7CisgICAgICAgIGJ1bmRs
ZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVy
cm9yID0gbmlsOworICAgIGlmICghW3BsYWNlaG9sZGVyIHNldEVudGl0bGVtZW50c1Byb21pc2U6
ZW50aXRsZW1lbnRzUHJvbWlzZS5nZXQoKSBlcnJvcjomZXJyb3JdIHx8IGVycm9yKSB7CisgICAg
ICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJGYWlsZWQgdG8gc2V0IHBsYWNl
aG9sZGVyIGVudGl0bGVtZW50cyBwcm9taXNlIGZvciBidW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlk
ZW50aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkp
KTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQk9PTCByZXN1bHQgPSBbcGxhY2Vob2xkZXIgc2V0Q29uZmlndXJhdGlv
bkNvbXBsZXRlV2l0aEVycm9yOiZlcnJvcl07CisgICAgaWYgKCFyZXN1bHQgfHwgZXJyb3IpIHsK
KyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBzZXQg
cGxhY2Vob2xkZXIgZW50aXRsZW1lbnRzIHByb21pc2UgY29tcGxldGUgZm9yIGJ1bmRsZSAiLCBT
dHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3Ig
ZGVzY3JpcHRpb25dKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3Igc2V0
UGxhY2Vob2xkZXJQcm9taXNlOnBsYWNlaG9sZGVyLmdldCgpIGVycm9yOiZlcnJvcl07CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJG
YWlsZWQgdG8gc2V0IHBsYWNlaG9sZGVyIHByb21pc2UgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVu
ZGxlSWRlbnRpZmllci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRp
b25dKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSZXRhaW5QdHI8SVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVy
PiBkYXRhUHJvbWlzZSA9IGFkb3B0TlMoW1tJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXIgYWxs
b2NdIGluaXRXaXRoTmFtZTpAIkVtcHR5IHVzZXIgZGF0YSBwcm9taXNlIiBjbGllbnQ6SVhDbGll
bnRJZGVudGlmaWVyQXBwbGllZEZvciBkaXNrU3BhY2VOZWVkZWQ6MF0pOworICAgIGRhdGFQcm9t
aXNlLmdldCgpLnBlcmNlbnRDb21wbGV0ZSA9IDEuMDsKKyAgICBkYXRhUHJvbWlzZS5nZXQoKS5j
b21wbGV0ZSA9IFlFUzsKKworICAgIFttX2FwcEluc3RhbGxDb29yZGluYXRvciBzZXRVc2VyRGF0
YVByb21pc2U6ZGF0YVByb21pc2UuZ2V0KCkgZXJyb3I6JmVycm9yXTsKKyAgICBpZiAoZXJyb3Ip
IHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBz
ZXQgdXNlciBkYXRhIHByb21pc2UgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmll
ci5nZXQoKSksICIgRXJyb3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRpb25dKSkpOworICAg
ICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OmJ1bmRsZUNyZWF0aW9uU3VjY2VlZGVkKCkKK3sKKyAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWRDcmVhdGVBcHBCdW5kbGUoKnRo
aXMsIFB1c2hBcHBCdW5kbGVDcmVhdGlvblJlc3VsdDo6U3VjY2Vzcyk7CisKK30KKwordm9pZCBJ
Q0FwcEJ1bmRsZTo6YnVuZGxlQ3JlYXRpb25GYWlsZWQoTlNFcnJvciAqZXJyb3IpCit7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ3JlYXRlQXBwQnVuZGxlKCp0aGlz
LCBQdXNoQXBwQnVuZGxlQ3JlYXRpb25SZXN1bHQ6OkZhaWx1cmUpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJQdXNoRAorCisjZW5kaWYgLy8gRU5BQkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JV
TkRMRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0luc3RhbGxDb29yZGlu
YXRpb25TUEkuaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSW5zdGFsbENvb3JkaW5hdGlvblNQ
SS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjA2ZDcwZjgxZjQw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JbnN0YWxsQ29vcmRp
bmF0aW9uU1BJLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0o
SU9TKQorI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKyNpbXBvcnQgPEluc3RhbGxDb29y
ZGluYXRpb24vSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IuaD4KKyNpbXBvcnQgPEluc3RhbGxDb29y
ZGluYXRpb24vSW5zdGFsbENvb3JkaW5hdGlvbi5oPgorCisjZWxzZQorCisjaW5jbHVkZSAiTGF1
bmNoU2VydmljZXNTUEkuaCIKKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKwordHlwZWRlZiBl
bnVtIDogTlNVSW50ZWdlciB7Cit9IElYQ29vcmRpbmF0b3JQcm9ncmVzc1BoYXNlOworCit0eXBl
ZGVmIGVudW0gOiBOU1VJbnRlZ2VyIHsKKyAgICBJWEFwcEluc3RhbGxDb29yZGluYXRvclBsYWNl
aG9sZGVyUHJvbWlzZSA9IDEsCit9IElYQXBwSW5zdGFsbENvb3JkaW5hdG9yUHJvbWlzZUlkZW50
aWZpZXI7CisKK3R5cGVkZWYgZW51bSA6IE5TVUludGVnZXIgeworICAgIElYQ2xpZW50SWRlbnRp
ZmllckFwcGxpZWRGb3IgPSAxOSwKK30gSVhDbGllbnRJZGVudGlmaWVyOworCitAY2xhc3MgTFNB
cHBsaWNhdGlvblJlY29yZDsKK0BjbGFzcyBJWEFwcEluc3RhbGxDb29yZGluYXRvcjsKK0BjbGFz
cyBJWFBsYWNlaG9sZGVyOworQGNsYXNzIElYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlcjsKKwor
QHByb3RvY29sIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgPE5TT2JqZWN0PgorQG9w
dGlvbmFsCistICh2b2lkKWNvb3JkaW5hdG9yRGlkUmVnaXN0ZXJGb3JPYnNlcnZhdGlvbjoobm9u
bnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29y
ZGluYXRvclNob3VsZFByaW9yaXRpemU6KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3Ig
Kiljb29yZGluYXRvcjsKKy0gKHZvaWQpY29vcmRpbmF0b3JTaG91bGRSZXN1bWU6KG5vbm51bGwg
SVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvcjsKKy0gKHZvaWQpY29vcmRpbmF0
b3JTaG91bGRQYXVzZToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5h
dG9yOworLSAodm9pZCljb29yZGluYXRvcjoobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRv
ciAqKWNvb3JkaW5hdG9yIGRpZFVwZGF0ZVByb2dyZXNzOihkb3VibGUpcGVyY2VudENvbXBsZXRl
IGZvclBoYXNlOihJWENvb3JkaW5hdG9yUHJvZ3Jlc3NQaGFzZSlwaGFzZSBvdmVyYWxsUHJvZ3Jl
c3M6KGRvdWJsZSlvdmVyYWxsUHJvZ3Jlc3M7CistICh2b2lkKWNvb3JkaW5hdG9yRGlkQ29tcGxl
dGVTdWNjZXNzZnVsbHk6KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGlu
YXRvciBmb3JBcHBsaWNhdGlvblJlY29yZDoobnVsbGFibGUgTFNBcHBsaWNhdGlvblJlY29yZCAq
KWFwcFJlY29yZDsKKy0gKHZvaWQpY29vcmRpbmF0b3JEaWRJbnN0YWxsUGxhY2Vob2xkZXI6KG5v
bm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBmb3JBcHBsaWNhdGlv
blJlY29yZDoobnVsbGFibGUgTFNBcHBsaWNhdGlvblJlY29yZCAqKXBsYWNlaG9sZGVyUmVjb3Jk
OworLSAodm9pZCljb29yZGluYXRvcjoobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAq
KWNvb3JkaW5hdG9yIGNhbmNlbGVkV2l0aFJlYXNvbjoobm9ubnVsbCBOU0Vycm9yICopY2FuY2Vs
UmVhc29uIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWNsaWVudDsKK0BlbmQKKwordHlwZWRl
ZiB2b2lkICheSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JFcnJvckNvbXBsZXRpb24pKE5TRXJyb3Ig
KiBfTnVsbGFibGUgZXJyb3IpOworCitAaW50ZXJmYWNlIElYQXBwSW5zdGFsbENvb3JkaW5hdG9y
CisrICh2b2lkKXVuaW5zdGFsbEFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcgKilidW5kbGVJRCBy
ZXF1ZXN0VXNlckNvbmZpcm1hdGlvbjooQk9PTClyZXF1ZXN0VXNlckNvbmZpcm1hdGlvbiBjb21w
bGV0aW9uOihJWEFwcEluc3RhbGxDb29yZGluYXRvckVycm9yQ29tcGxldGlvbiljb21wbGV0aW9u
OworKyAoQk9PTCljYW5jZWxDb29yZGluYXRvckZvckFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcg
KilidW5kbGVJRCB3aXRoUmVhc29uOihOU0Vycm9yICopY2FuY2VsUmVhc29uIGNsaWVudDooSVhD
bGllbnRJZGVudGlmaWVyKWNsaWVudCBlcnJvcjooTlNFcnJvciAqKilvdXRfZXJyb3I7CisrIChp
bnN0YW5jZXR5cGUpY29vcmRpbmF0b3JGb3JBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopYnVu
ZGxlSUQgd2l0aENsaWVudElEOihJWENsaWVudElkZW50aWZpZXIpaWRlbnRpdHkgY3JlYXRlSWZO
b3RFeGlzdGluZzooQk9PTCljcmVhdGUgY3JlYXRlZDooQk9PTCAqKW91dF9jcmVhdGVkIGVycm9y
OihOU0Vycm9yICoqKW91dF9lcnJvcjsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBudWxsYWJsZSwg
d2VhaykgaWQ8SVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcj4gb2JzZXJ2ZXI7CistIChC
T09MKXNldFBsYWNlaG9sZGVyUHJvbWlzZTooSVhQbGFjZWhvbGRlciAqKXBsYWNlaG9sZGVyUHJv
bWlzZSBlcnJvcjooTlNFcnJvciAqKilvdXRfZXJyb3I7CistIChCT09MKXNldFVzZXJEYXRhUHJv
bWlzZTooSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyICopdXNlckRhdGEgZXJyb3I6KE5TRXJy
b3IgKiopb3V0X2Vycm9yOworQGVuZAorCitAaW50ZXJmYWNlIElYUmVzdG9yaW5nRGVtb3RlZEFw
cEluc3RhbGxDb29yZGluYXRvciA6IElYQXBwSW5zdGFsbENvb3JkaW5hdG9yCitAZW5kCisKK0Bp
bnRlcmZhY2UgSVhPd25lZERhdGFQcm9taXNlIDogTlNPYmplY3QKK0BlbmQKKworQGludGVyZmFj
ZSBJWFByb21pc2VkSW5NZW1vcnlEaWN0aW9uYXJ5IDogSVhPd25lZERhdGFQcm9taXNlCistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgY2xpZW50OihJWENsaWVu
dElkZW50aWZpZXIpaWRlbnRpdHkgZGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFy
eTsKK0BlbmQKKworQGludGVyZmFjZSBJWFBsYWNlaG9sZGVyQXR0cmlidXRlcyA6IE5TT2JqZWN0
CitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBsYXVuY2hQcm9oaWJpdGVkOworQGVuZAorCitA
aW50ZXJmYWNlIElYUGxhY2Vob2xkZXIgOiBOU09iamVjdAorLSAoaW5zdGFuY2V0eXBlKWluaXRB
cHBQbGFjZWhvbGRlcldpdGhCdW5kbGVOYW1lOihOU1N0cmluZyAqKW5hbWUgYnVuZGxlSUQ6KE5T
U3RyaW5nICopYnVuZGxlSUQgaW5zdGFsbFR5cGU6KExTSW5zdGFsbFR5cGUpaW5zdGFsbFR5cGUg
Y2xpZW50OihJWENsaWVudElkZW50aWZpZXIpaWRlbnRpdHkgTlNfREVTSUdOQVRFRF9JTklUSUFM
SVpFUjsKKy0gKEJPT0wpc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGVzOihub25udWxsIElYUGxhY2Vo
b2xkZXJBdHRyaWJ1dGVzICopYXR0cmlidXRlcyBlcnJvcjooTlNFcnJvciAqKilvdXRfZXJyb3I7
CistIChCT09MKXNldEVudGl0bGVtZW50c1Byb21pc2U6KG5vbm51bGwgSVhPd25lZERhdGFQcm9t
aXNlICopZW50aXRsZW1lbnRzIGVycm9yOihOU0Vycm9yICogX19hdXRvcmVsZWFzaW5nIF9OdWxs
YWJsZSAqIF9OdWxsYWJsZSlvdXRfZXJyb3I7CistIChCT09MKXNldENvbmZpZ3VyYXRpb25Db21w
bGV0ZVdpdGhFcnJvcjooTlNFcnJvciAqKilvdXRfZXJyb3I7CitAZW5kCisKK0BpbnRlcmZhY2Ug
SVhPcGFxdWVEYXRhUHJvbWlzZSA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRlcmZhY2UgSVhQcm9t
aXNlZE91dE9mQmFuZFRyYW5zZmVyIDogSVhPcGFxdWVEYXRhUHJvbWlzZQorQHByb3BlcnR5IChu
b25hdG9taWMpIEJPT0wgY29tcGxldGU7CitAcHJvcGVydHkgKG5vbmF0b21pYykgZG91YmxlIHBl
cmNlbnRDb21wbGV0ZTsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5TU3RyaW5nICop
bmFtZSBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBkaXNrU3BhY2VOZWVkZWQ6
KHVpbnQ2NF90KXRvdGFsQnl0ZXM7CitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VORAorCisj
ZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNlbmRpZiAvLyBQTEFURk9STShJT1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0xhdW5jaFNlcnZpY2VzU1BJLmgg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0xhdW5jaFNlcnZpY2VzU1BJLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZWVlMTA4ZGRhMGIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0xhdW5jaFNlcnZpY2VzU1BJLmgKQEAgLTAsMCAr
MSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisjaWYgVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKKworLy8gVGhpcyBzcGFjZSBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsKKwor
I2Vsc2UKKworTlNfQVNTVU1FX05PTk5VTExfQkVHSU4KKwordHlwZWRlZiBOU19FTlVNKE5TVUlu
dGVnZXIsIExTSW5zdGFsbFR5cGUpIHsKKyAgICBMU0luc3RhbGxUeXBlSW50ZW50aW9uYWxEb3du
Z3JhZGUgPSA4Cit9OworCitAaW50ZXJmYWNlIExTUmVjb3JkIDogTlNPYmplY3QKK0BlbmQKKwor
QGludGVyZmFjZSBMU0J1bmRsZVJlY29yZCA6IExTUmVjb3JkCitAcHJvcGVydHkgKHJlYWRvbmx5
LCBudWxsYWJsZSkgTlNTdHJpbmcgKmJ1bmRsZUlkZW50aWZpZXI7CitAZW5kCisKK0BpbnRlcmZh
Y2UgTFNBcHBsaWNhdGlvblJlY29yZCA6IExTQnVuZGxlUmVjb3JkCitAcHJvcGVydHkgKHJlYWRv
bmx5KSBCT09MIHBsYWNlaG9sZGVyOworQHByb3BlcnR5IChyZWFkb25seSkgTlNTdHJpbmcgKm1h
bmFnZW1lbnREb21haW47CisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEJ1bmRsZUlkZW50aWZp
ZXI6KE5TU3RyaW5nICopYnVuZGxlSWRlbnRpZmllciBhbGxvd1BsYWNlaG9sZGVyOihCT09MKWFs
bG93UGxhY2Vob2xkZXIgZXJyb3I6KE5TRXJyb3IgKiopb3V0RXJyb3I7CitAZW5kCisKK0BpbnRl
cmZhY2UgTFNFbnVtZXJhdG9yPF9fY292YXJpYW50IE9iamVjdFR5cGU+IDogTlNFbnVtZXJhdG9y
PE9iamVjdFR5cGU+CitAZW5kCisKK3R5cGVkZWYgTlNfT1BUSU9OUyh1aW50NjRfdCwgTFNBcHBs
aWNhdGlvbkVudW1lcmF0aW9uT3B0aW9ucykgeworICAgIExTQXBwbGljYXRpb25FbnVtZXJhdGlv
bk9wdGlvbnNFbnVtZXJhdGVQbGFjZWhvbGRlcnMgPSAoMSA8PCA2KQorfTsKKworQGludGVyZmFj
ZSBMU0FwcGxpY2F0aW9uUmVjb3JkIChFbnVtZXJhdGlvbikKKysgKExTRW51bWVyYXRvcjxMU0Fw
cGxpY2F0aW9uUmVjb3JkICo+ICopZW51bWVyYXRvcldpdGhPcHRpb25zOihMU0FwcGxpY2F0aW9u
RW51bWVyYXRpb25PcHRpb25zKW9wdGlvbnM7CitAZW5kCisKK05TX0FTU1VNRV9OT05OVUxMX0VO
RAorCisjZW5kaWYgLy8gVVNFKEFQUExFX0lOVEVSTkFMX1NESykKKyNlbmRpZiAvLyBQTEFURk9S
TShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hBcHBCdW5kbGUu
aCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oCmluZGV4IDhhNmQ1N2Nj
NmY1Yi4uZTk4NWUzMjEwMTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hBcHBCdW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hBcHBCdW5kbGUu
aApAQCAtMjUsNyArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAKIEBjbGFz
cyBOU0Vycm9yOwogCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ3JlYXRlQXBwQnVuZGxlKFB1c2hBcHBCdW5kbGUmLCBQdXNoQXBwQnVuZGxlQ3JlYXRpb25S
ZXN1bHQpID0gMDsKIH07CiAKLWNsYXNzIFB1c2hBcHBCdW5kbGUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxQdXNoQXBwQnVuZGxlPiB7CitjbGFzcyBQdXNoQXBwQnVuZGxlIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFB1c2hBcHBCdW5kbGU+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5QdXNo
QXBwQnVuZGxlKCk7CiAgICAgdm9pZCBkZXRhY2hGcm9tQ2xpZW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0gYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KaW5kZXggM2I3OGYyOTBjMjdlLi4wMmRiY2Q3OGQ1MmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KQEAgLTMxLDYgKzMxLDcg
QEAKICNpbXBvcnQgIkRhZW1vbkVuY29kZXIuaCIKICNpbXBvcnQgIkRhZW1vblV0aWxpdGllcy5o
IgogI2ltcG9ydCAiSGFuZGxlTWVzc2FnZS5oIgorI2ltcG9ydCAiSUNBcHBCdW5kbGUuaCIKICNp
bXBvcnQgIk1vY2tBcHBCdW5kbGVSZWdpc3RyeS5oIgogCiAjaW1wb3J0IDx3dGYvQ29tcGxldGlv
bkhhbmRsZXIuaD4KQEAgLTI3MCw4ICsyNzEsMTEgQEAgdm9pZCBEYWVtb246OmdldE9yaWdpbnNX
aXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKENsaWVudENvbm5lY3Rpb24qIGNvbm4K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbmVlZCBw
bGF0Zm9ybS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlYWwgd29ybGQgYnVuZGxlcyBv
bmNlIGltcGxlbWVudGVkLgotICAgIHJlcGx5U2VuZGVyKHsgfSk7CisjaWYgRU5BQkxFKElOU1RB
TExfQ09PUkRJTkFUSU9OX0JVTkRMRVMpCisgICAgSUNBcHBCdW5kbGU6OmdldE9yaWdpbnNXaXRo
UmVnaXN0cmF0aW9ucygqY29ubmVjdGlvbiwgV1RGTW92ZShyZXBseVNlbmRlcikpOworI2Vsc2UK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCiB9CiAKIHZvaWQgRGFl
bW9uOjpkZWxldGVQdXNoQW5kTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKENsaWVudENvbm5lY3Rp
b24qIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIHJlcGx5U2VuZGVyKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI0MDY1YmQ4NTVhZi4uZTdkNGVh
YTM3MGU1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgorCisgICAgICAgIEFkZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJh
Y2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MzcxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tOgorCiAyMDIx
LTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
V0tXZWJzaXRlRGF0YVN0b3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBNb2NrIGFw
cCBidW5kbGUgdGVzdGluZy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQppbmRleCBkODcxMmIwNDA1MTYuLjE2MTJhZTQ4
MDE3NCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9X
ZWJQdXNoRGFlbW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV2ViUHVzaERhZW1vbi5tbQpAQCAtMzMwLDYgKzMzMCw5OCBAQCBURVNUKFdlYlB1c2hELCBQ
ZXJtaXNzaW9uTWFuYWdlbWVudCkKICAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3Rv
cnkpOwogfQogCisjaWYgUExBVEZPUk0oSU9TKQorc3RhdGljIHZvaWQgZGVsZXRlQWxsUmVnaXN0
cmF0aW9uc0ZvckRhdGFTdG9yZShXS1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKK3sKKyAg
ICBfX2Jsb2NrIGJvb2wgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAgIF9fYmxvY2sg
UmV0YWluUHRyPE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4+IG9yaWdpblNldDsKKyAgICBbZGF0
YVN0b3JlIF9nZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9uczpeKE5T
U2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4gKm9yaWdpbnMpIHsKKyAgICAgICAgb3JpZ2luU2V0ID0g
b3JpZ2luczsKKyAgICAgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRydWU7CisgICAgfV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZvcmlnaW5PcGVyYXRpb25Eb25lKTsKKworICAg
IGlmICghW29yaWdpblNldCBjb3VudF0pCisgICAgICAgIHJldHVybjsKKworICAgIF9fYmxvY2sg
c2l6ZV90IGRlbGV0ZWRPcmlnaW5zID0gMDsKKyAgICBvcmlnaW5PcGVyYXRpb25Eb25lID0gZmFs
c2U7CisgICAgZm9yIChXS1NlY3VyaXR5T3JpZ2luICpvcmlnaW4gaW4gb3JpZ2luU2V0LmdldCgp
KSB7CisgICAgICAgIFtkYXRhU3RvcmUgX2RlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3Ry
YXRpb246b3JpZ2luIGNvbXBsZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3IpIHsKKyAgICAg
ICAgICAgIEVYUEVDVF9GQUxTRSghIWVycm9yKTsKKyAgICAgICAgICAgIGlmICgrK2RlbGV0ZWRP
cmlnaW5zID09IFtvcmlnaW5TZXQgY291bnRdKQorICAgICAgICAgICAgICAgIG9yaWdpbk9wZXJh
dGlvbkRvbmUgPSB0cnVlOworICAgICAgICB9XTsKKyAgICB9CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZvcmlnaW5PcGVyYXRpb25Eb25lKTsKKworICAgIG9yaWdpbk9wZXJhdGlvbkRv
bmUgPSBmYWxzZTsKKyAgICBbZGF0YVN0b3JlIF9nZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmlj
YXRpb25QZXJtaXNzaW9uczpeKE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4gKm9yaWdpbnMpIHsK
KyAgICAgICAgRVhQRUNUX0VRKFtvcmlnaW5zIGNvdW50XSwgMHUpOworICAgICAgICBvcmlnaW5P
cGVyYXRpb25Eb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpy
dW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCit9CisKK1RFU1QoV2ViUHVzaEQsIEluc3RhbGxD
b29yZGluYXRpb25CdW5kbGVzKQoreworICAgIE5TVVJMICp0ZW1wRGlyZWN0b3J5ID0gc2V0VXBU
ZXN0V2ViUHVzaEQoKTsKKworICAgIGF1dG8gZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uIG5ld10pOworICAgIGRhdGFTdG9y
ZUNvbmZpZ3VyYXRpb24uZ2V0KCkud2ViUHVzaE1hY2hTZXJ2aWNlTmFtZSA9IEAib3JnLndlYmtp
dC53ZWJwdXNodGVzdGRhZW1vbi5zZXJ2aWNlIjsKKyAgICBhdXRvIGRhdGFTdG9yZSA9IGFkb3B0
TlMoW1tXS1dlYnNpdGVEYXRhU3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pOworCisgICAgZGVsZXRlQWxsUmVnaXN0cmF0aW9u
c0ZvckRhdGFTdG9yZShkYXRhU3RvcmUuZ2V0KCkpOworCisgICAgYXV0byBjb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBj
b25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgPSBkYXRhU3RvcmUuZ2V0KCk7Cisg
ICAgW2NvbmZpZ3VyYXRpb24uZ2V0KCkucHJlZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFi
bGVkOllFU107CisgICAgZm9yIChfV0tFeHBlcmltZW50YWxGZWF0dXJlICpmZWF0dXJlIGluIFtX
S1ByZWZlcmVuY2VzIF9leHBlcmltZW50YWxGZWF0dXJlc10pIHsKKyAgICAgICAgaWYgKFtmZWF0
dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJCdWlsdEluTm90aWZpY2F0aW9uc0VuYWJsZWQiXSkK
KyAgICAgICAgICAgIFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVT
IGZvckZlYXR1cmU6ZmVhdHVyZV07CisgICAgfQorCisgICAgYXV0byBoYW5kbGVyID0gYWRvcHRO
UyhbW1Rlc3RVUkxTY2hlbWVIYW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRp
b24gc2V0VVJMU2NoZW1lSGFuZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAInRlc3Rp
bmciXTsKKworICAgIFtoYW5kbGVyIHNldFN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXI6XihXS1dl
YlZpZXcgKiwgaWQ8V0tVUkxTY2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIGF1dG8gcmVzcG9u
c2UgPSBhZG9wdE5TKFtbTlNVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1
ZXN0LlVSTCBNSU1FVHlwZTpAInRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4
dEVuY29kaW5nTmFtZTpuaWxdKTsKKyAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJl
c3BvbnNlLmdldCgpXTsKKyAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRh
V2l0aEJ5dGVzOm1haW5CeXRlcyBsZW5ndGg6c3RybGVuKG1haW5CeXRlcyldXTsKKyAgICAgICAg
W3Rhc2sgZGlkRmluaXNoXTsKKyAgICB9XTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgODAw
LCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1dG8gdWlE
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVsZWdhdGUgYWxsb2Nd
IGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXRVSURlbGVnYXRlOnVpRGVsZWdhdGUuZ2V0KCldOwor
CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Rpbmc6Ly9tYWluL2luZGV4Lmh0bWwiXV1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmYWxlcnRSZWNlaXZlZCk7CisKKyAgICBhbGVydFJl
Y2VpdmVkID0gZmFsc2U7CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCBy
ZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAInRlc3Rpbmc6Ly9zZWNvbmRhcnkv
aW5kZXguaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZhbGVydFJlY2Vp
dmVkKTsKKworICAgIHN0YXRpYyBib29sIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgUmV0YWluUHRyPE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4+IG9yaWdpbnM7Cisg
ICAgW2RhdGFTdG9yZSBfZ2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lv
bnM6XihOU1NldDxXS1NlY3VyaXR5T3JpZ2luICo+ICpyYXdPcmlnaW5zKSB7CisgICAgICAgIEVY
UEVDVF9FUShbcmF3T3JpZ2lucyBjb3VudF0sIDJ1KTsKKyAgICAgICAgb3JpZ2lucyA9IHJhd09y
aWdpbnM7CisgICAgICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgIH1dOworICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmb3JpZ2luT3BlcmF0aW9uRG9uZSk7CisKKyAgICBm
b3IgKFdLU2VjdXJpdHlPcmlnaW4gKm9yaWdpbiBpbiBvcmlnaW5zLmdldCgpKSB7CisgICAgICAg
IEVYUEVDVF9UUlVFKFtvcmlnaW4ucHJvdG9jb2wgaXNFcXVhbFRvU3RyaW5nOkAidGVzdGluZyJd
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW29yaWdpbi5ob3N0IGlzRXF1YWxUb1N0cmluZzpAIm1h
aW4iXSB8fCBbb3JpZ2luLmhvc3QgaXNFcXVhbFRvU3RyaW5nOkAic2Vjb25kYXJ5Il0pOworICAg
IH0KKworICAgIGRlbGV0ZUFsbFJlZ2lzdHJhdGlvbnNGb3JEYXRhU3RvcmUoZGF0YVN0b3JlLmdl
dCgpKTsKKyAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBEaXJlY3RvcnkpOworfQorI2VuZGlm
IC8vIFBMQVRGT1JNKElPUykKKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCiAjZW5k
aWYgLy8gUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9XZWJLaXRM
aWJyYXJpZXMvQ2hhbmdlTG9nIGIvV2ViS2l0TGlicmFyaWVzL0NoYW5nZUxvZwppbmRleCAwYmY2
ZTRjZTNmNjguLmZiMzdlMzI4NzE5NSAxMDA2NDQKLS0tIGEvV2ViS2l0TGlicmFyaWVzL0NoYW5n
ZUxvZworKysgYi9XZWJLaXRMaWJyYXJpZXMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0UHJpdmF0ZUZyYW1ld29y
a1N0dWJzL2lPUy8xNS9JbnN0YWxsQ29vcmRpbmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRp
bmF0aW9uLnRiZDogQWRkZWQuCisKIDIwMjEtMTEtMTQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIEdldCBkYWVtb24gQVBJIHJlYWR5IHRvIHdvcmsgaW4gdGhl
IGlPUyBzaW11bGF0b3IgKHN0YXJ0aW5nIHdpdGggV2ViUHVzaEQpCmRpZmYgLS1naXQgYS9XZWJL
aXRMaWJyYXJpZXMvV2ViS2l0UHJpdmF0ZUZyYW1ld29ya1N0dWJzL2lPUy8xNS9JbnN0YWxsQ29v
cmRpbmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRpbmF0aW9uLnRiZCBiL1dlYktpdExpYnJh
cmllcy9XZWJLaXRQcml2YXRlRnJhbWV3b3JrU3R1YnMvaU9TLzE1L0luc3RhbGxDb29yZGluYXRp
b24uZnJhbWV3b3JrL0luc3RhbGxDb29yZGluYXRpb24udGJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uMzZiYjBlODNkNDg4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0TGlicmFyaWVzL1dlYktpdFByaXZhdGVGcmFtZXdvcmtTdHVicy9pT1MvMTUvSW5zdGFsbENv
b3JkaW5hdGlvbi5mcmFtZXdvcmsvSW5zdGFsbENvb3JkaW5hdGlvbi50YmQKQEAgLTAsMCArMSw4
IEBACistLS0gIXRhcGktdGJkLXYzCithcmNoczogICAgICAgICAgIFsgeDg2XzY0LCBhcm02NCwg
YXJtNjRlIF0KK2luc3RhbGwtbmFtZTogICAgJy9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3
b3Jrcy9JbnN0YWxsQ29vcmRpbmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRpbmF0aW9uJwor
cGxhdGZvcm06IGlvcworZXhwb3J0czoKKyAgLSBhcmNoczogICAgICAgICAgIFsgeDg2XzY0LCBh
cm02NCwgYXJtNjRlIF0KKyAgICBvYmpjLWNsYXNzZXM6ICAgIFsgSVhBcHBJbnN0YWxsQ29vcmRp
bmF0b3IsIElYT3BhcXVlRGF0YVByb21pc2UsIElYT3duZWREYXRhUHJvbWlzZSwgSVhQbGFjZWhv
bGRlciwgSVhQbGFjZWhvbGRlckF0dHJpYnV0ZXMsIElYUHJvbWlzZWRJbk1lbW9yeURpY3Rpb25h
cnksIElYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciwgSVhSZXN0b3JpbmdEZW1vdGVkQXBwSW5z
dGFsbENvb3JkaW5hdG9yIF0KKy4uLgo=
</data>
<flag name="review"
          id="470893"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445759</attachid>
            <date>2021-12-02 12:21:52 -0800</date>
            <delta_ts>2022-02-17 19:33:04 -0800</delta_ts>
            <desc>PFL</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>48812</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzExZmJlMDhmMDczLi40MTIyMTQxZWI4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjEtMTItMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1FbmFibGVD
b2NvYS5oOgorCiAyMDIxLTEyLTAxICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBBZGQgYSBydW50aW1lIGZsYWcgdG8gZW5hYmxlIENTUyBUcmFuc2Zv
cm1zIExldmVsIDIgc3BlYyBjb21wbGlhbnQgYmVoYXZpb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtRW5hYmxlQ29jb2EuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5h
YmxlQ29jb2EuaAppbmRleCBhZTkyYmVlOTg2MDQuLjgwZmM4MDMzMTRmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtRW5hYmxlQ29jb2EuaApAQCAtMTQzLDYgKzE0MywxMCBAQAogI2RlZmluZSBFTkFC
TEVfQlVJTFRfSU5fTk9USUZJQ0FUSU9OUyAxCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKEVOQUJM
RV9JTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKSAmJiBQTEFURk9STShJT1MpCisjZGVmaW5l
IEVOQUJMRV9JTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTIDEKKyNlbmRpZgorCiAjaWYgIWRl
ZmluZWQoRU5BQkxFX0NBQ0hFX1BBUlRJVElPTklORykKICNkZWZpbmUgRU5BQkxFX0NBQ0hFX1BB
UlRJVElPTklORyAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCmluZGV4IGFhNDQ3NDhjNTY2Yy4u
OGRkMWM2YTA0NWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0x
Mi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFu
IEluc3RhbGxDb29yZGluYXRpb24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXhwb3NlICJ0b0hleFN0cmluZyIgc28gd2Ug
Y2FuIFNIQTI1NiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGEgaGV4IHJlcHJlc2VudGF0aW9uLgor
CisgICAgICAgICogcGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaDoKKyAgICAgICAgKiBwYWwvY3J5
cHRvL2NvbW1vbmNyeXB0by9DcnlwdG9EaWdlc3RDb21tb25DcnlwdG8uY3BwOgorICAgICAgICAo
UEFMOjpDcnlwdG9EaWdlc3Q6OnRvSGV4U3RyaW5nKToKKwogMjAyMS0xMS0zMCAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBtb21lbnR1bSBl
dmVudCBzeW50aGVzaXplcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlw
dG8vQ3J5cHRvRGlnZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9DcnlwdG9E
aWdlc3QuaAppbmRleCAwNmMxOGMzMGViMTAuLjEzODQ4NGIzMDk3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFBBTCB7CiAKQEAgLTQ3
LDYgKzQ4LDcgQEAgcHVibGljOgogCiAgICAgUEFMX0VYUE9SVCB2b2lkIGFkZEJ5dGVzKGNvbnN0
IHZvaWQqIGlucHV0LCBzaXplX3QgbGVuZ3RoKTsKICAgICBQQUxfRVhQT1JUIFZlY3Rvcjx1aW50
OF90PiBjb21wdXRlSGFzaCgpOworICAgIFBBTF9FWFBPUlQgU3RyaW5nIHRvSGV4U3RyaW5nKCk7
CiAKIHByaXZhdGU6CiAgICAgQ3J5cHRvRGlnZXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2NvbW1vbmNyeXB0by9DcnlwdG9E
aWdlc3RDb21tb25DcnlwdG8uY3BwCmluZGV4IDFjZTU3OTdmZWY2Mi4uZGNmMGEzNDRlOGU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5
cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2Ny
eXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcApAQCAtMTgyLDQg
KzE4MiwxOSBAQCBWZWN0b3I8dWludDhfdD4gQ3J5cHRvRGlnZXN0Ojpjb21wdXRlSGFzaCgpCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorU3RyaW5nIENyeXB0b0RpZ2VzdDo6dG9IZXhTdHJpbmco
KQoreworICAgIGF1dG8gaGFzaCA9IGNvbXB1dGVIYXNoKCk7CisKKyAgICBjaGFyKiBzdGFydCA9
IDA7CisgICAgdW5zaWduZWQgaGFzaExlbmd0aCA9IGhhc2guc2l6ZSgpOworICAgIENTdHJpbmcg
cmVzdWx0ID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChoYXNoTGVuZ3RoICogMiwgc3RhcnQp
OworICAgIGNoYXIqIGJ1ZmZlciA9IHN0YXJ0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aGFzaExlbmd0aDsgKytpKSB7CisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgMywgIiUwMlgiLCBo
YXNoLmF0KGkpKTsKKyAgICAgICAgYnVmZmVyICs9IDI7CisgICAgfQorICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KHJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCAzNTlmZGRjYzNiYzguLjA4M2JhY2NlMDFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAor
MjAyMS0xMi0wMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIGFuIEluc3RhbGxDb29yZGluYXRpb24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0
cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggbGV0cyB0aGUgaU9TIGJ1aWxkIGNyZWF0
ZSBhIHBsYWNlaG9sZGVyIGFwcCBidW5kbGUgdG8gcmVwcmVzZW50IGEgcmVnaXN0cmF0aW9uIHVz
aW5nIEluc3RhbGxDb29yZGluYXRpb24uCisgICAgICAgIAorICAgICAgICAqIENvbmZpZ3VyYXRp
b25zL3dlYnB1c2hkLnhjY29uZmlnOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAKKyAgICAgICAgKiB3ZWJwdXNoZC9BcHBCdW5kbGVSZXF1ZXN0
Lm1tOgorICAgICAgICAoV2ViUHVzaEQ6OkFwcEJ1bmRsZVJlcXVlc3Q6OnN0YXJ0KTogVXNlIHRo
ZSBJQ0FwcEJ1bmRsZSBpbXBsZW1lbnRhdGlvbiB3aGVuIGFwcHJvcHJpYXRlLgorICAgICAgICAK
KyAgICAgICAgKiB3ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0L3dlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaC4KKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1
bmRsZTo6Y3JlYXRlKToKKyAgICAgICAgCisgICAgICAgICogd2VicHVzaGQvSUNBcHBCdW5kbGUu
bW06IEFkZGVkLgorICAgICAgICAoLVtXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlciBp
bml0V2l0aElDQXBwQnVuZGxlOl0pOgorICAgICAgICAoLVtXZWJBcHBJbnN0YWxsQ29vcmRpbmF0
b3JPYnNlcnZlciBjb29yZGluYXRvckRpZENvbXBsZXRlU3VjY2Vzc2Z1bGx5OmZvckFwcGxpY2F0
aW9uUmVjb3JkOl0pOgorICAgICAgICAoLVtXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZl
ciBjb29yZGluYXRvcjpjYW5jZWxlZFdpdGhSZWFzb246Y2xpZW50Ol0pOgorICAgICAgICAoV2Vi
UHVzaEQ6OmJyb2FkY2FzdERlYnVnTWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBC
dW5kbGU6OklDQXBwQnVuZGxlKToKKyAgICAgICAgKFdlYlB1c2hEOjplbmNvZGVPcmlnaW5TdHJp
bmdGb3JCdW5kbGVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpvcmlnaW5TdHJpbmdG
cm9tRW5jb2RlZEJ1bmRsZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViUHVzaEQ6OmJ1bmRsZVBy
ZWZpeEZvckhvc3RBcHBJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpidW5kbGVOYW1l
Rm9yT3JpZ2luU3RyaW5nQW5kSG9zdEFwcElkZW50aWZpZXIpOgorICAgICAgICAoV2ViUHVzaEQ6
OklDQXBwQnVuZGxlOjpnZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMpOgorICAgICAgICAoV2Vi
UHVzaEQ6OklDQXBwQnVuZGxlOjpnZXRCdW5kbGVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1
c2hEOjpJQ0FwcEJ1bmRsZTo6Y2hlY2tGb3JFeGlzdGluZ0J1bmRsZSk6CisgICAgICAgIChXZWJQ
dXNoRDo6SUNBcHBCdW5kbGU6OmRlbGV0ZUV4aXN0aW5nQnVuZGxlKToKKyAgICAgICAgKFdlYlB1
c2hEOjpJQ0FwcEJ1bmRsZTo6ZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVXaXRoRXJyb3IpOgorICAg
ICAgICAoV2ViUHVzaEQ6OklDQXBwQnVuZGxlOjpzdG9wKToKKyAgICAgICAgKFdlYlB1c2hEOjpJ
Q0FwcEJ1bmRsZTo6Y3JlYXRlQnVuZGxlKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRs
ZTo6YnVuZGxlQ3JlYXRpb25TdWNjZWVkZWQpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVu
ZGxlOjpidW5kbGVDcmVhdGlvbkZhaWxlZCk6CisgICAgICAgIAorICAgICAgICAqIHdlYnB1c2hk
L0luc3RhbGxDb29yZGluYXRpb25TUEkuaDogQWRkZWQuCisgICAgICAgICogd2VicHVzaGQvTGF1
bmNoU2VydmljZXNTUEkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNo
QXBwQnVuZGxlLmguCisgICAgICAgICogd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oOgorICAgICAg
ICAKKyAgICAgICAgKiB3ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVz
aEQ6OkRhZW1vbjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lvbnMp
OiBVc2UgdGhlIElDQXBwQnVuZGxlIGltcGxlbWVudGF0aW9uIHdoZW4gYXBwcm9wcmlhdGUuCisK
IDIwMjEtMTItMDEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJldXNlIG5hdmlnYXRpb24gcHJlbG9hZCBpZiBzZXJ2aWNlIHdvcmtlciBpcyBmZXRjaGluZyB0
aGUgY29ycmVzcG9uZGluZyBuYXZpZ2F0aW9uIHJlcXVlc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ29uZmlndXJhdGlvbnMvd2VicHVzaGQueGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0L0Nv
bmZpZ3VyYXRpb25zL3dlYnB1c2hkLnhjY29uZmlnCmluZGV4IDMwNWYyMGIyMTBjYS4uZDNmMWVm
YTg3N2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL3dlYnB1c2hk
LnhjY29uZmlnCisrKyBiL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMvd2VicHVzaGQueGNj
b25maWcKQEAgLTI1LDcgKzI1LDI1IEBACiAKIFBST0RVQ1RfTkFNRSA9IHdlYnB1c2hkOwogCi1P
VEhFUl9MREZMQUdTID0gLWwgV1RGIC1mcmFtZXdvcmsgRm91bmRhdGlvbiAtZnJhbWV3b3JrIENv
cmVGb3VuZGF0aW9uOworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNbc2RrPWFwcGxldHYqXSA9
ICo7CitFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU1tzZGs9d2F0Y2gqXSA9ICo7CisKK1dLX0NP
UkVfU0VSVklDRVNfTERGTEFHUyA9ICQoV0tfQ09SRV9TRVJWSUNFU19MREZMQUdTXyQoV0tfUExB
VEZPUk1fTkFNRSkpOworV0tfQ09SRV9TRVJWSUNFU19MREZMQUdTX21hY29zeCA9IC1mcmFtZXdv
cmsgQ29yZVNlcnZpY2VzOworCitXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTID0gJChX
S19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpOworV0tf
TU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHU19pcGhvbmVvcyA9IC1mcmFtZXdvcmsgTW9iaWxl
Q29yZVNlcnZpY2VzOworV0tfTU9CSUxFX0NPUkVfU0VSVklDRVNfTERGTEFHU19pcGhvbmVzaW11
bGF0b3IgPSAkKFdLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1NfaXBob25lb3MpOworCitX
S19JTlNUQUxMX0NPT1JESU5BVElPTl9MREZMQUdTID0gJChXS19JTlNUQUxMX0NPT1JESU5BVElP
Tl9MREZMQUdTXyQoV0tfUExBVEZPUk1fTkFNRSkpOworV0tfSU5TVEFMTF9DT09SRElOQVRJT05f
TERGTEFHU19pcGhvbmVvcyA9IC1mcmFtZXdvcmsgSW5zdGFsbENvb3JkaW5hdGlvbjsKK1dLX0lO
U1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1NfaXBob25lc2ltdWxhdG9yID0gJChXS19JTlNUQUxM
X0NPT1JESU5BVElPTl9MREZMQUdTX2lwaG9uZW9zKQorCitXS19TSEEyNTZfTERGTEFHUyA9ICQo
V0tfU0hBMjU2X0xERkxBR1NfJChXS19QTEFURk9STV9OQU1FKSk7CitXS19TSEEyNTZfTERGTEFH
U19pcGhvbmVvcyA9IC1mb3JjZV9sb2FkICQoQlVJTFRfUFJPRFVDVFNfRElSKS9saWJQQUwuYQor
V0tfU0hBMjU2X0xERkxBR1NfaXBob25lc2ltdWxhdG9yID0gJChXS19TSEEyNTZfTERGTEFHU19p
cGhvbmVvcykKKworT1RIRVJfTERGTEFHUyA9IC1sIFdURiAtZnJhbWV3b3JrIEZvdW5kYXRpb24g
LWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiAkKFdLX1NIQTI1Nl9MREZMQUdTKSAkKFdLX0NPUkVf
U0VSVklDRVNfTERGTEFHUykgJChXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTKSAkKFdL
X0lOU1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1MpOwogTElCUkFSWV9TRUFSQ0hfUEFUSFMgPSAk
KEJVSUxUX1BST0RVQ1RTX0RJUik7CiAKIFdLX1BST0NFU1NFRF9YQ0VOVF9GSUxFPSQoVEVNUF9G
SUxFX0RJUikvJChGVUxMX1BST0RVQ1RfTkFNRSkuZW50aXRsZW1lbnRzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYjY0MWMxMjA3Mjku
LjI5NmQ1OGM4YTg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xMDIyLDYgKzEwMjIsMTAgQEAKIAkJNTE3QTUzMTAxRjQ3QTg2MjAw
RENEQzBBIC8qIFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdBNTMwRDFGNDdBODQzMDBEQ0RDMEEg
LyogV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTE3QjVGMkUyNzU3
MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QjVGMkQyNzU3
MzgyQTAwMkRDMjJEIC8qIFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oICov
OyB9OwogCQk1MTdCNUYyRjI3NTczODJCMDAyREMyMkQgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rp
b25Db25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTdCNUYyRDI3NTczODJBMDAyREMyMkQgLyogV2ViUHVzaERhZW1vbkNvbm5lY3Rp
b25Db25maWd1cmF0aW9uLmggKi87IH07CisJCTUxN0I1RjM3Mjc1N0RBODgwMDJEQzIyRCAvKiBM
YXVuY2hTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE3QjVGMzMyNzU3REE4NzAwMkRDMjJEIC8qIExhdW5jaFNlcnZpY2VzU1BJLmgg
Ki87IH07CisJCTUxN0I1RjM4Mjc1N0RBODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0I1RjM0Mjc1N0RB
ODgwMDJEQzIyRCAvKiBJQ0FwcEJ1bmRsZS5tbSAqLzsgfTsKKwkJNTE3QjVGMzkyNzU3REE4ODAw
MkRDMjJEIC8qIEluc3RhbGxDb29yZGluYXRpb25TUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0I1RjM1Mjc1N0RBODgwMDJEQzIyRCAvKiBJbnN0
YWxsQ29vcmRpbmF0aW9uU1BJLmggKi87IH07CisJCTUxN0I1RjNBMjc1N0RBODgwMDJEQzIyRCAv
KiBJQ0FwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3QjVGMzYyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLmggKi87IH07CiAJ
CTUxN0NGMEUzMTYzQTQ4NkMwMEMyOTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNz
YWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3Q0YwRTExNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxN0NGMEUzMTYzQTQ4NkMwMEMyOTUwRiAv
KiBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0NGMEUxMTYzQTQ4NkMw
MEMyOTUwRiAvKiBDYWNoZVN0b3JhZ2VFbmdpbmVDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNw
cCAqLzsgfTsKIAkJNTE3Q0YwRTQxNjNBNDg2QzAwQzI5NTBFIC8qIE5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTdDRjBFMjE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZXMuaCAqLzsgfTsKQEAgLTQzNzcsNiArNDM4MSwxMCBAQAogCQk1MTdBNTMwRDFG
NDdBODQzMDBEQ0RDMEEgLyogV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViU1dDbGllbnRDb25uZWN0aW9uTWVzc2FnZXMu
aDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViU1dDbGllbnRDb25uZWN0aW9uTWVz
c2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTE3QTUzMEUx
RjQ3QTg0MzAwRENEQzBBIC8qIFdlYlNXQ2xpZW50Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJTV0NsaWVudENvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9X
ZWJTV0NsaWVudENvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MTdCNUYyRDI3NTczODJBMDAyREMyMkQgLyogV2ViUHVz
aERhZW1vbkNvbm5lY3Rpb25Db25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlB1c2hEYWVtb25Db25uZWN0aW9uQ29uZmlndXJhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MTdCNUYzMzI3NTdEQTg3MDAyREMyMkQgLyogTGF1bmNo
U2VydmljZXNTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF1bmNoU2Vy
dmljZXNTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QjVGMzQyNzU3REE4
ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gSUNBcHBCdW5kbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxN0I1RjM1Mjc1N0RBODgwMDJEQzIyRCAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3RhbGxDb29yZGluYXRpb25TUEkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE3QjVGMzYyNzU3REE4ODAwMkRDMjJEIC8q
IElDQXBwQnVuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElDQXBwQnVu
ZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0NGMEUxMTYzQTQ4NkMwMEMy
OTUwRSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKIAkJNTE3Q0YwRTExNjNBNDg2QzAwQzI5NTBGIC8qIENhY2hlU3Rv
cmFnZUVuZ2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQ2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbk1lc3NhZ2VS
ZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL0NhY2hlU3RvcmFnZUVu
Z2luZUNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQk1MTdDRjBFMjE2M0E0ODZDMDBDMjk1MEUgLyogTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTk4OTQsNiArOTkwMiwxMCBAQAogCQkJCTUxNjBF
OTU0Mjc0Qjg4NzEwMDU2NzM4OCAvKiBBcHBCdW5kbGVSZXF1ZXN0LmggKi8sCiAJCQkJNTE2MEU5
NTMyNzRCODg3MTAwNTY3Mzg4IC8qIEFwcEJ1bmRsZVJlcXVlc3QubW0gKi8sCiAJCQkJNUNCQjZE
NEQyNzFGNjdDQzAwRkQxQTVEIC8qIGNvbS5hcHBsZS53ZWJraXQud2VicHVzaGQucGxpc3QgKi8s
CisJCQkJNTE3QjVGMzYyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLmggKi8sCisJCQkJ
NTE3QjVGMzQyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLm1tICovLAorCQkJCTUxN0I1
RjM1Mjc1N0RBODgwMDJEQzIyRCAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggKi8sCisJCQkJ
NTE3QjVGMzMyNzU3REE4NzAwMkRDMjJEIC8qIExhdW5jaFNlcnZpY2VzU1BJLmggKi8sCiAJCQkJ
NTFGN0JCNzUyNzQ0OThCQjAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLmggKi8s
CiAJCQkJNTFGN0JCNzQyNzQ0OThCQTAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5n
Lm1tICovLAogCQkJCTUxNjBFOTVDMjc0QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVn
aXN0cnkuaCAqLywKQEAgLTEyNDQ5LDEzICsxMjQ2MSwxNiBAQAogCQkJaXNhID0gUEJYSGVhZGVy
c0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMg
PSAoCisJCQkJNTE3QjVGM0EyNzU3REE4ODAwMkRDMjJEIC8qIElDQXBwQnVuZGxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTYwRTk1NjI3NEI4ODcyMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVz
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUMxNTc5RkMyNzE3QUY1MDAwRUQ1MjgwIC8qIERhZW1v
blV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFGN0JCNzcyNzQ0OThCQjAwQzQ1QTcy
IC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTYwRTk1
RTI3NEMyQTAzMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTYwRTk1OTI3NEMwRDg5MDA1NjczODggLyogUHVzaEFwcEJ1bmRsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTFGN0JCN0IyNzQ0QzUwNzAwQzQ1QTcyIC8qIFB1c2hDbGllbnRDb25u
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTdCNUYzNzI3NTdEQTg4MDAyREMyMkQgLyog
TGF1bmNoU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0I1RjJGMjc1NzM4MkIw
MDJEQzIyRCAvKiBXZWJQdXNoRGFlbW9uQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxN0I1RjM5Mjc1N0RBODgwMDJEQzIyRCAvKiBJbnN0YWxsQ29vcmRpbmF0
aW9uU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJDRDY5RjI3MjMzOTNBMDBGN0Y4RUMgLyog
V2ViUHVzaERhZW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0xNDk5Myw2ICsxNTAwOCw3IEBACiAJCQlmaWxl
cyA9ICgKIAkJCQk1MTYwRTk1NTI3NEI4ODcyMDA1NjczODggLyogQXBwQnVuZGxlUmVxdWVzdC5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTVDMTU3QTAxMjcxN0I3RkIwMEVENTI4MCAvKiBBcmd1bWVu
dENvZGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTdCNUYzODI3NTdEQTg4MDAyREMyMkQg
LyogSUNBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUY3QkI3RDI3NDU2NDA0MDBD
NDVBNzIgLyogQ29kZVNpZ25pbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk1QzE1NzlGRjI3MTdC
NkQyMDBFRDUyODAgLyogRGFlbW9uRGVjb2Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzE1
NzlGRTI3MTdCNkMxMDBFRDUyODAgLyogRGFlbW9uRW5jb2Rlci5jcHAgaW4gU291cmNlcyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5tbSBi
L1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5tbQppbmRleCBkMDQ3ZTFk
NjJhNzMuLjYwOTdkNzk4ZWMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9B
cHBCdW5kbGVSZXF1ZXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwQnVuZGxl
UmVxdWVzdC5tbQpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0
ICJBcHBCdW5kbGVSZXF1ZXN0LmgiCiAKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgiCiAjaW1wb3J0
ICJNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oIgogI2ltcG9ydCAiV2ViUHVzaERhZW1vbi5oIgog
I2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQ29uc29sZVR5cGVzLmg+CkBAIC01MSw4ICs1MiwxMyBA
QCB2b2lkIEFwcEJ1bmRsZVJlcXVlc3Q6OnN0YXJ0KCkKIAogICAgIGlmIChtX2Nvbm5lY3Rpb24t
PnVzZU1vY2tCdW5kbGVzRm9yVGVzdGluZygpKQogICAgICAgICBtX2FwcEJ1bmRsZSA9IE1vY2tB
cHBCdW5kbGVGb3JUZXN0aW5nOjpjcmVhdGUobV9vcmlnaW5TdHJpbmcsIG1fY29ubmVjdGlvbi0+
aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpLCAqdGhpcyk7Ci0gICAgZWxzZQorICAgIGVs
c2UgeworI2lmIEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQorICAgICAgICBt
X2FwcEJ1bmRsZSA9IElDQXBwQnVuZGxlOjpjcmVhdGUoKm1fY29ubmVjdGlvbiwgbV9vcmlnaW5T
dHJpbmcsICp0aGlzKTsKKyNlbHNlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisjZW5kaWYKKyAgICB9CiAKICAgICBzdGFydEludGVybmFsKCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lDQXBwQnVuZGxlLmggYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL0lDQXBwQnVuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwLi45NjZlMGMwMTg3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1
c2hkL0lDQXBwQnVuZGxlLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykKKworI2ltcG9ydCAiSW5zdGFsbENvb3Jk
aW5hdGlvblNQSS5oIgorI2ltcG9ydCAiUHVzaEFwcEJ1bmRsZS5oIgorI2ltcG9ydCA8d3RmL1Jl
dGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1dlYWtQdHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCitAY2xhc3MgTlNFcnJvcjsKK0BjbGFzcyBXZWJBcHBJbnN0YWxsQ29vcmRp
bmF0b3JPYnNlcnZlcjsKKworbmFtZXNwYWNlIFdlYlB1c2hEIHsKKworY2xhc3MgQ2xpZW50Q29u
bmVjdGlvbjsKKworY2xhc3MgSUNBcHBCdW5kbGUgOiBwdWJsaWMgUHVzaEFwcEJ1bmRsZSwgcHVi
bGljIENhbk1ha2VXZWFrUHRyPElDQXBwQnVuZGxlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxJQ0FwcEJ1bmRsZT4gY3JlYXRlKENsaWVu
dENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBQdXNo
QXBwQnVuZGxlQ2xpZW50JiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBJQ0FwcEJ1bmRsZShjb25uZWN0aW9uLCBvcmlnaW5TdHJpbmcsIGNsaWVudCkpOworICAg
IH0KKworICAgIHZvaWQgYnVuZGxlQ3JlYXRpb25TdWNjZWVkZWQoKTsKKyAgICB2b2lkIGJ1bmRs
ZUNyZWF0aW9uRmFpbGVkKE5TRXJyb3IgKik7CisKKyAgICBzdGF0aWMgdm9pZCBnZXRPcmlnaW5z
V2l0aFJlZ2lzdHJhdGlvbnMoQ2xpZW50Q29ubmVjdGlvbiYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgVmVjdG9yPFN0cmluZz4mKT4mJik7CisKK3ByaXZhdGU6CisgICAgSUNBcHBCdW5k
bGUoQ2xpZW50Q29ubmVjdGlvbiYsIGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBQdXNoQXBw
QnVuZGxlQ2xpZW50Jik7CisKKyAgICBjb25zdCBTdHJpbmcmIGdldEJ1bmRsZUlkZW50aWZpZXIo
KTsKKworICAgIHZvaWQgY2hlY2tGb3JFeGlzdGluZ0J1bmRsZSgpIGZpbmFsOworICAgIHZvaWQg
ZGVsZXRlRXhpc3RpbmdCdW5kbGUoKSBmaW5hbDsKKyAgICB2b2lkIGNyZWF0ZUJ1bmRsZSgpIGZp
bmFsOworICAgIHZvaWQgc3RvcCgpIGZpbmFsOworCisgICAgdm9pZCBkaWREZWxldGVFeGlzdGlu
Z0J1bmRsZVdpdGhFcnJvcihOU0Vycm9yICopOworCisgICAgUmV0YWluUHRyPElYUmVzdG9yaW5n
RGVtb3RlZEFwcEluc3RhbGxDb29yZGluYXRvcj4gbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3I7Cisg
ICAgUmV0YWluUHRyPFdlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyPiBtX2FwcEluc3Rh
bGxPYnNlcnZlcjsKKworICAgIFN0cmluZyBtX29yaWdpblN0cmluZzsKKyAgICBSZWZQdHI8Q2xp
ZW50Q29ubmVjdGlvbj4gbV9jbGllbnRDb25uZWN0aW9uOworCisgICAgU3RyaW5nIG1fYnVuZGxl
SWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYlB1c2hECisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvSUNBcHBCdW5kbGUubW0gYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lD
QXBwQnVuZGxlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTk3
ZDY0MzUwOTFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0Fw
cEJ1bmRsZS5tbQpAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiSUNBcHBCdW5kbGUuaCIKKworI2lmIEVOQUJMRShJTlNUQUxMX0NPT1JE
SU5BVElPTl9CVU5ETEVTKQorCisjaW1wb3J0ICJBcHBCdW5kbGVSZXF1ZXN0LmgiCisjaW1wb3J0
ICJMYXVuY2hTZXJ2aWNlc1NQSS5oIgorI2ltcG9ydCAiUHVzaENsaWVudENvbm5lY3Rpb24uaCIK
KyNpbXBvcnQgIldlYlB1c2hEYWVtb24uaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0NvbnNv
bGVUeXBlcy5oPgorI2ltcG9ydCA8cGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaD4KKyNpbXBvcnQg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbXBvcnQg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworTlNTdHJpbmcgKnB1c2hCdW5kbGVBcHBNYW5h
Z2VtZW50RG9tYWluID0gQCJjb20uYXBwbGUuV2ViS2l0LlB1c2hCdW5kbGVzIjsKKworQGludGVy
ZmFjZSBXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlciA6IE5TT2JqZWN0IDxJWEFwcElu
c3RhbGxDb29yZGluYXRvck9ic2VydmVyPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoSUNBcHBC
dW5kbGU6KFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZSYpaWNBcHBCdW5kbGU7CitAcHJvcGVydHkgV2Vh
a1B0cjxXZWJQdXNoRDo6SUNBcHBCdW5kbGU+IGJ1bmRsZTsKK0BlbmQKKworQGltcGxlbWVudGF0
aW9uIFdlYkFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyCisKKy0gKGluc3RhbmNldHlwZSlp
bml0V2l0aElDQXBwQnVuZGxlOihXZWJQdXNoRDo6SUNBcHBCdW5kbGUmKWljQXBwQnVuZGxlCit7
CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisK
KyAgICBfYnVuZGxlID0gaWNBcHBCdW5kbGU7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAo
dm9pZCljb29yZGluYXRvckRpZENvbXBsZXRlU3VjY2Vzc2Z1bGx5Oihub25udWxsIElYQXBwSW5z
dGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgZm9yQXBwbGljYXRpb25SZWNvcmQ6KG51bGxh
YmxlIExTQXBwbGljYXRpb25SZWNvcmQgKilhcHBSZWNvcmQKK3sKKyAgICBjYWxsT25NYWluUnVu
TG9vcChbc2VsZiwgcHJvdGVjdGVkU2VsZiA9IFJldGFpblB0cjxpZD4oc2VsZildIHsKKyAgICAg
ICAgaWYgKF9idW5kbGUpCisgICAgICAgICAgICBfYnVuZGxlLT5idW5kbGVDcmVhdGlvblN1Y2Nl
ZWRlZCgpOworICAgIH0pOworfQorCistICh2b2lkKWNvb3JkaW5hdG9yOihub25udWxsIElYQXBw
SW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgY2FuY2VsZWRXaXRoUmVhc29uOihub25u
dWxsIE5TRXJyb3IgKiljYW5jZWxSZWFzb24gY2xpZW50OihJWENsaWVudElkZW50aWZpZXIpY2xp
ZW50Cit7CisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW3NlbGYsIHByb3RlY3RlZFNlbGYgPSBSZXRh
aW5QdHI8aWQ+KHNlbGYpLCBwcm90ZWN0ZWRDYW5jZWxSZWFzb24gPSBSZXRhaW5QdHI8TlNFcnJv
cj4oY2FuY2VsUmVhc29uKV0geworICAgICAgICBpZiAoX2J1bmRsZSkKKyAgICAgICAgICAgIF9i
dW5kbGUtPmJ1bmRsZUNyZWF0aW9uRmFpbGVkKHByb3RlY3RlZENhbmNlbFJlYXNvbi5nZXQoKSk7
CisgICAgfSk7Cit9CisKK0BlbmQKKwordXNpbmcgUEFMOjpDcnlwdG9EaWdlc3Q7CisKK25hbWVz
cGFjZSBXZWJQdXNoRCB7CisKK3N0YXRpYyB2b2lkIGJyb2FkY2FzdERlYnVnTWVzc2FnZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgRGFlbW9uOjpzaW5nbGV0b24oKS5icm9hZGNhc3RE
ZWJ1Z01lc3NhZ2UoSlNDOjpNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIklDQXBwQnVu
ZGxlOiAiLCBtZXNzYWdlKSk7Cit9CisKK0lDQXBwQnVuZGxlOjpJQ0FwcEJ1bmRsZShDbGllbnRD
b25uZWN0aW9uJiBjbGllbnRDb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywg
UHVzaEFwcEJ1bmRsZUNsaWVudCYgY2xpZW50KQorICAgIDogUHVzaEFwcEJ1bmRsZShjbGllbnQp
CisgICAgLCBtX29yaWdpblN0cmluZyhvcmlnaW5TdHJpbmcpCisgICAgLCBtX2NsaWVudENvbm5l
Y3Rpb24oJmNsaWVudENvbm5lY3Rpb24pCit7Cit9CisKK3N0YXRpYyBTdHJpbmcgZW5jb2RlT3Jp
Z2luU3RyaW5nRm9yQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAg
IC8vIEJ1bmRsZSBpZGVudGlmaWVycyBoYXZlIGV4YWN0bHkgNjQgdmFsaWQgY2hhcmFjdGVycy4K
KyAgICAvLyBhLXosIEEtWiwgMC05LCAnLScsIGFuZCAnLicKKyAgICAvLyBCYXNlNjQgVVJMIGVu
Y29kaW5nIHVzZXMgJy0nIGFuZCAnXycgZm9yIHRoZSBmaW5hbCAyIGNoYXJhY3RlcnMKKyAgICAv
LyBGb3Igb3VyIGJ1bmRsZSBpZGVudGlmaWVyLCB3ZSdsbCBCYXNlNjQgVVJMIGVuY29kZSB0aGVu
IHJlcGxhY2UgJ18nIHdpdGggJy4nCisgICAgLy8gV2UgYWxzbyBnZXQgcmlkIG9mIHRoZSB0eXBp
Y2FsICc9JyBwYWRkaW5nIGZvciBiYXNlNjQgZW5jb2RpbmcuCisKKyAgICBhdXRvIGJhc2U2NCA9
IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGlucHV0LnV0ZjgoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBiYXNlNjQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJhc2U2NFtpXSA9
PSAnXycpCisgICAgICAgICAgICBiYXNlNjRbaV0gPSAnLic7CisgICAgfQorCisgICAgc2l6ZV90
IG51bWJlckVxdWFsU2lnbnMgPSAwOworICAgIGlmIChiYXNlNjQuc2l6ZSgpID49IDEgJiYgYmFz
ZTY0Lmxhc3QoKSA9PSAnPScpCisgICAgICAgICsrbnVtYmVyRXF1YWxTaWduczsKKyAgICBpZiAo
YmFzZTY0LnNpemUoKSA+PSAyICYmIGJhc2U2NFtiYXNlNjQuc2l6ZSgpIC0gMl0gPT0gJz0nKQor
ICAgICAgICArK251bWJlckVxdWFsU2lnbnM7CisKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRG
OChiYXNlNjQuZGF0YSgpLCBiYXNlNjQuc2l6ZSgpIC0gbnVtYmVyRXF1YWxTaWducyk7Cit9CisK
K3N0YXRpYyBTdHJpbmcgb3JpZ2luU3RyaW5nRnJvbUVuY29kZWRCdW5kbGVJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgaW5wdXQpCit7CisgICAgYXV0byB1dGY4ID0gaW5wdXQudXRmOCgpOworICAg
IGF1dG8gYnVmZmVyID0gdXRmOC5tdXRhYmxlRGF0YSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdXRmOC5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmIChidWZmZXJbaV0gPT0gJy4n
KQorICAgICAgICAgICAgYnVmZmVyW2ldID0gJ18nOworICAgIH0KKworICAgIGF1dG8gZGVjb2Rl
ZCA9IGJhc2U2NFVSTERlY29kZShidWZmZXIsIHV0ZjgubGVuZ3RoKCkpOworICAgIGlmICghZGVj
b2RlZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KGRlY29kZWQtPmRhdGEoKSwgZGVjb2RlZC0+c2l6ZSgpKTsKK30KKworc3RhdGljIFN0cmluZyBi
dW5kbGVQcmVmaXhGb3JIb3N0QXBwSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGhvc3RBcHBJZGVu
dGlmaWVyKQoreworICAgIGF1dG8gYXBwRGlnZXN0ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0
ZShDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hBXzI1Nik7CisgICAgYXV0byB1dGY4SWRlbnRp
ZmllciA9IGhvc3RBcHBJZGVudGlmaWVyLnV0ZjgoKTsKKyAgICBhcHBEaWdlc3QtPmFkZEJ5dGVz
KHV0ZjhJZGVudGlmaWVyLmRhdGEoKSwgdXRmOElkZW50aWZpZXIubGVuZ3RoKCkpOworCisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoImNvbS5hcHBsZS5XZWJLaXQuUHVzaEJ1bmRsZS4iLCBhcHBEaWdl
c3QtPnRvSGV4U3RyaW5nKCksICIuIik7Cit9CisKK3N0YXRpYyBTdHJpbmcgYnVuZGxlTmFtZUZv
ck9yaWdpblN0cmluZ0FuZEhvc3RBcHBJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGhvc3RBcHBJZGVudGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBP
bmNlIHdlIGNhbiBzdG9yZSB0aGUgb3JpZ2luIHN0cmluZyB3aXRoaW4gdGhlIGFwcCBidW5kbGUs
IGhhc2ggdGhlIG9yaWdpbiBzdHJpbmcgYXMgd2VsbC4KKyAgICAvLyBGb3Igbm93IHdlIGJhc2U2
NCBlbmNvZGUgaXQgdG8gbWFrZSBhIHZhbGlkIGJ1bmRsZSBpZGVudGlmaWVyIHRoYXQgY2Fycmll
cyB0aGUgaW5mb3JtYXRpb24uCisgICAgcmV0dXJuIG1ha2VTdHJpbmcoYnVuZGxlUHJlZml4Rm9y
SG9zdEFwcElkZW50aWZpZXIoaG9zdEFwcElkZW50aWZpZXIpLCBlbmNvZGVPcmlnaW5TdHJpbmdG
b3JCdW5kbGVJZGVudGlmaWVyKG9yaWdpblN0cmluZykpOworfQorCit2b2lkIElDQXBwQnVuZGxl
OjpnZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMoQ2xpZW50Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWN0b3I8U3RyaW5nPiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdHM7CisKKyAgICBSZXRh
aW5QdHI8TlNTdHJpbmc+IGJ1bmRsZUlkZW50aWZpZXJQcmVmaXggPSAoTlNTdHJpbmcgKilidW5k
bGVQcmVmaXhGb3JIb3N0QXBwSWRlbnRpZmllcihjb25uZWN0aW9uLmhvc3RBcHBDb2RlU2lnbmlu
Z0lkZW50aWZpZXIoKSk7CisKKyAgICBMU0VudW1lcmF0b3I8TFNBcHBsaWNhdGlvblJlY29yZCAq
PiAqZW51bWVyYXRvciA9IFtMU0FwcGxpY2F0aW9uUmVjb3JkIGVudW1lcmF0b3JXaXRoT3B0aW9u
czpMU0FwcGxpY2F0aW9uRW51bWVyYXRpb25PcHRpb25zRW51bWVyYXRlUGxhY2Vob2xkZXJzXTsK
KyAgICBmb3IgKExTQXBwbGljYXRpb25SZWNvcmQgKnJlY29yZCA9IFtlbnVtZXJhdG9yIG5leHRP
YmplY3RdOyByZWNvcmQ7IHJlY29yZCA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSB7CisgICAg
ICAgIGlmICghW3JlY29yZC5tYW5hZ2VtZW50RG9tYWluIGlzRXF1YWxUb1N0cmluZzpwdXNoQnVu
ZGxlQXBwTWFuYWdlbWVudERvbWFpbl0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAoIVtyZWNvcmQuYnVuZGxlSWRlbnRpZmllciBoYXNQcmVmaXg6YnVuZGxlSWRlbnRpZmll
clByZWZpeC5nZXQoKV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBGSVhN
RTogRm9yIG5vdyB3ZSBzdG9yZSB0aGUgb3JpZ2luIHN0cmluZyBpbiB0aGUgYnVuZGxlIGlkZW50
aWZpZXIgYmFzZTY0IGVuY29kZWQKKyAgICAgICAgLy8gT25jZSB3ZSBzdG9yZSBpdCBpbiB0aGUg
YnVuZGxlIGl0c2VsZiwgd2UnbGwgaGFzaCB0aGUgb3JpZ2luIHN0cmluZyBpbiB0aGUgYnVuZGxl
IGlkZW50aWZpZXIgYW5kIGV4dHJhY3QgaXQgZnJvbSB0aGUgYnVuZGxlCisKKyAgICAgICAgTlNB
cnJheSAqY29tcG9uZW50cyA9IFtyZWNvcmQuYnVuZGxlSWRlbnRpZmllciBjb21wb25lbnRzU2Vw
YXJhdGVkQnlTdHJpbmc6YnVuZGxlSWRlbnRpZmllclByZWZpeC5nZXQoKV07CisgICAgICAgIEFT
U0VSVChjb21wb25lbnRzLmNvdW50ID49IDIpOworCisgICAgICAgIGF1dG8gb3JpZ2luU3RyaW5n
ID0gb3JpZ2luU3RyaW5nRnJvbUVuY29kZWRCdW5kbGVJZGVudGlmaWVyKGNvbXBvbmVudHNbMV0p
OworICAgICAgICBpZiAob3JpZ2luU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG9yaWdpblN0cmluZyk7CisgICAgfQorICAg
IAorICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3VsdHMpOworfQorCitjb25zdCBTdHJpbmcmIElD
QXBwQnVuZGxlOjpnZXRCdW5kbGVJZGVudGlmaWVyKCkKK3sKKyAgICBpZiAobV9idW5kbGVJZGVu
dGlmaWVyLmlzRW1wdHkoKSAmJiBtX2NsaWVudENvbm5lY3Rpb24pCisgICAgICAgIG1fYnVuZGxl
SWRlbnRpZmllciA9IGJ1bmRsZU5hbWVGb3JPcmlnaW5TdHJpbmdBbmRIb3N0QXBwSWRlbnRpZmll
cihtX29yaWdpblN0cmluZywgbV9jbGllbnRDb25uZWN0aW9uLT5ob3N0QXBwQ29kZVNpZ25pbmdJ
ZGVudGlmaWVyKCkpOworCisgICAgcmV0dXJuIG1fYnVuZGxlSWRlbnRpZmllcjsKK30KKwordm9p
ZCBJQ0FwcEJ1bmRsZTo6Y2hlY2tGb3JFeGlzdGluZ0J1bmRsZSgpCit7CisgICAgTlNFcnJvciAq
ZXJyb3IgPSBuaWw7CisgICAgUmV0YWluUHRyPExTQXBwbGljYXRpb25SZWNvcmQ+IGFwcFJlY29y
ZCA9IGFkb3B0TlMoW1tMU0FwcGxpY2F0aW9uUmVjb3JkIGFsbG9jXSBpbml0V2l0aEJ1bmRsZUlk
ZW50aWZpZXI6KE5TU3RyaW5nICopZ2V0QnVuZGxlSWRlbnRpZmllcigpIGFsbG93UGxhY2Vob2xk
ZXI6WUVTIGVycm9yOiZlcnJvcl0pOworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+ZGlkQ2hlY2tGb3JFeGlzdGluZ0J1bmRsZSgqdGhpcywgYXBwUmVjb3JkID8gUHVzaEFw
cEJ1bmRsZUV4aXN0czo6WWVzIDogUHVzaEFwcEJ1bmRsZUV4aXN0czo6Tm8pOworfQorCit2b2lk
IElDQXBwQnVuZGxlOjpkZWxldGVFeGlzdGluZ0J1bmRsZSgpCit7CisgICAgW0lYQXBwSW5zdGFs
bENvb3JkaW5hdG9yIHVuaW5zdGFsbEFwcFdpdGhCdW5kbGVJRDooTlNTdHJpbmcgKilnZXRCdW5k
bGVJZGVudGlmaWVyKCkgcmVxdWVzdFVzZXJDb25maXJtYXRpb246Tk8gY29tcGxldGlvbjpbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dIChOU0Vycm9yICplcnJvcikgeworICAg
ICAgICBjYWxsT25NYWluUnVuTG9vcChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlz
IH0sIGVycm9yID0gUmV0YWluUHRyPE5TRXJyb3I+KGVycm9yKV0geworICAgICAgICAgICAgZGlk
RGVsZXRlRXhpc3RpbmdCdW5kbGVXaXRoRXJyb3IoZXJyb3IuZ2V0KCkpOworICAgICAgICB9KTsK
KyAgICB9XTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6ZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVX
aXRoRXJyb3IoTlNFcnJvciAqZXJyb3IpCit7CisgICAgaWYgKGVycm9yKQorICAgICAgICBicm9h
ZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRXJyb3IgZGVsZXRpbmcgZXhpc3RpbmcgYnVu
ZGxlOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsKKworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKCp0
aGlzLCBlcnJvcik7Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OnN0b3AoKQoreworICAgIG1fYXBw
SW5zdGFsbENvb3JkaW5hdG9yLmdldCgpLm9ic2VydmVyID0gbmlsOworICAgIG1fYXBwSW5zdGFs
bENvb3JkaW5hdG9yID0gbmlsOworICAgIG1fYXBwSW5zdGFsbE9ic2VydmVyID0gbmlsOworfQor
Cit2b2lkIElDQXBwQnVuZGxlOjpjcmVhdGVCdW5kbGUoKQoreworICAgIFJldGFpblB0cjxOU1N0
cmluZz4gYnVuZGxlSWRlbnRpZmllciA9IChOU1N0cmluZyAqKWdldEJ1bmRsZUlkZW50aWZpZXIo
KTsKKworICAgIC8vIENhbmNlbCBhbnkgcHJldmlvdXMgaW5zdGFsbCBjb29yZGluYXRvciB0aGF0
IG1pZ2h0J3ZlIGJlZW4gbGVmdCBoYW5naW5nIGluIGEgcGFydGlhbGx5IGZpbmlzaGVkIHN0YXRl
CisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgW0lYQXBwSW5zdGFsbENvb3JkaW5hdG9y
IGNhbmNlbENvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOmJ1bmRsZUlkZW50aWZpZXIuZ2V0
KCkgd2l0aFJlYXNvbjpbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJXS0Vycm9yRG9tYWluIiBj
b2RlOjEgdXNlckluZm86bmlsXSBjbGllbnQ6SVhDbGllbnRJZGVudGlmaWVyQXBwbGllZEZvciBl
cnJvcjomZXJyb3JdOworCisgICAgQk9PTCBjcmVhdGVkID0gTk87CisgICAgZXJyb3IgPSBuaWw7
CisgICAgbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3IgPSBbSVhSZXN0b3JpbmdEZW1vdGVkQXBwSW5z
dGFsbENvb3JkaW5hdG9yIGNvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOmJ1bmRsZUlkZW50
aWZpZXIuZ2V0KCkgd2l0aENsaWVudElEOklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgY3Jl
YXRlSWZOb3RFeGlzdGluZzpZRVMgY3JlYXRlZDomY3JlYXRlZCBlcnJvcjomZXJyb3JdOworCisg
ICAgaWYgKCFtX2FwcEluc3RhbGxDb29yZGluYXRvciB8fCBlcnJvcikgeworICAgICAgICBicm9h
ZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiVW5hYmxlIHRvIGNyZWF0ZSBpbnN0YWxsIGNv
b3JkaW5hdGlvciBmb3IgYXBwIGJ1bmRsZSBpZGVudGlmaWVyICIsIFN0cmluZyhidW5kbGVJZGVu
dGlmaWVyLmdldCgpKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWNyZWF0ZWQpIHsKKyAgICAgICAgYnJv
YWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkV4aXN0aW5nIGluc3RhbGwgY29vcmRpbmF0
aW9yIGZvciBhcHAgYnVuZGxlIGlkZW50aWZpZXIgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIu
Z2V0KCkpLCAiIHdhcyBmb3VuZC4gVGhpcyBpcyB1bmV4cGVjdGVkLiIpKTsKKyAgICAgICAgYnVu
ZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9hcHBJbnN0YWxsT2JzZXJ2ZXIgPSBhZG9wdE5TKFtbV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9y
T2JzZXJ2ZXIgYWxsb2NdIGluaXRXaXRoSUNBcHBCdW5kbGU6KnRoaXNdKTsKKyAgICBtX2FwcElu
c3RhbGxDb29yZGluYXRvci5nZXQoKS5vYnNlcnZlciA9IG1fYXBwSW5zdGFsbE9ic2VydmVyLmdl
dCgpOworCisgICAgUmV0YWluUHRyPElYUGxhY2Vob2xkZXI+IHBsYWNlaG9sZGVyID0gYWRvcHRO
UyhbW0lYUGxhY2Vob2xkZXIgYWxsb2NdIGluaXRBcHBQbGFjZWhvbGRlcldpdGhCdW5kbGVOYW1l
OihOU1N0cmluZyAqKW1fb3JpZ2luU3RyaW5nIGJ1bmRsZUlEOmJ1bmRsZUlkZW50aWZpZXIuZ2V0
KCkgaW5zdGFsbFR5cGU6TFNJbnN0YWxsVHlwZUludGVudGlvbmFsRG93bmdyYWRlIGNsaWVudDpJ
WENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yXSk7CisKKyAgICBSZXRhaW5QdHI8SVhQbGFjZWhv
bGRlckF0dHJpYnV0ZXM+IHBsYWNlaG9sZGVyQXR0cmlidXRlcyA9IGFkb3B0TlMoW0lYUGxhY2Vo
b2xkZXJBdHRyaWJ1dGVzIG5ld10pOworICAgIHBsYWNlaG9sZGVyQXR0cmlidXRlcy5nZXQoKS5s
YXVuY2hQcm9oaWJpdGVkID0gWUVTOworCisgICAgW3BsYWNlaG9sZGVyIHNldFBsYWNlaG9sZGVy
QXR0cmlidXRlczpwbGFjZWhvbGRlckF0dHJpYnV0ZXMuZ2V0KCkgZXJyb3I6JmVycm9yXTsKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmco
IlVuYWJsZSB0byBzZXQgcGxhY2Vob2xkZXIgYXR0cmlidXRlcyBmb3IgYnVuZGxlICIsIFN0cmlu
ZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNj
cmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIE5TRGljdGlvbmFyeSAqZW50aXRsZW1lbnRzRGljdGlv
bmFyeSA9IEB7CisgICAgICAgIEAiY29tLmFwcGxlLnByaXZhdGUudXNlcm5vdGlmaWNhdGlvbnMu
YnVuZGxlLWlkZW50aWZpZXJzIjogYnVuZGxlSWRlbnRpZmllci5nZXQoKSwKKyAgICAgICAgQCJj
b20uYXBwbGUucHJpdmF0ZS51c2Vybm90aWZpY2F0aW9ucy5ub3RpZmljYXRpb24tc2ltdWxhdG9y
IjogQFlFUywKKyAgICAgICAgQCJjb20uYXBwbGUuZGV2ZWxvcGVyLmFwcC1tYW5hZ2VtZW50LWRv
bWFpbiI6IHB1c2hCdW5kbGVBcHBNYW5hZ2VtZW50RG9tYWluCisgICAgfTsKKyAgICBSZXRhaW5Q
dHI8SVhQcm9taXNlZEluTWVtb3J5RGljdGlvbmFyeT4gZW50aXRsZW1lbnRzUHJvbWlzZSA9IGFk
b3B0TlMoW1tJWFByb21pc2VkSW5NZW1vcnlEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE5hbWU6
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFbnRpdGxlbWVudHMgUHJvbWlzZSBmb3IgJUAi
LCBidW5kbGVJZGVudGlmaWVyLmdldCgpXSBjbGllbnQ6SVhDbGllbnRJZGVudGlmaWVyQXBwbGll
ZEZvciBkaWN0aW9uYXJ5OmVudGl0bGVtZW50c0RpY3Rpb25hcnldKTsKKworICAgIGlmICghZW50
aXRsZW1lbnRzUHJvbWlzZSkgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0
cmluZygiVW5hYmxlIHRvIGNyZWF0ZSBwbGFjZWhvbGRlciBlbnRpdGxlbWVudHMgcHJvbWlzZSBm
b3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSkpOworICAgICAgICBi
dW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBlcnJvciA9IG5pbDsKKyAgICBpZiAoIVtwbGFjZWhvbGRlciBzZXRFbnRpdGxlbWVudHNQcm9t
aXNlOmVudGl0bGVtZW50c1Byb21pc2UuZ2V0KCkgZXJyb3I6JmVycm9yXSB8fCBlcnJvcikgewor
ICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCBw
bGFjZWhvbGRlciBlbnRpdGxlbWVudHMgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5k
bGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlv
bl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEJPT0wgcmVzdWx0ID0gW3BsYWNlaG9sZGVyIHNldENvbmZpZ3Vy
YXRpb25Db21wbGV0ZVdpdGhFcnJvcjomZXJyb3JdOworICAgIGlmICghcmVzdWx0IHx8IGVycm9y
KSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJGYWlsZWQgdG8g
c2V0IHBsYWNlaG9sZGVyIGVudGl0bGVtZW50cyBwcm9taXNlIGNvbXBsZXRlIGZvciBidW5kbGUg
IiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vy
cm9yIGRlc2NyaXB0aW9uXSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3Ip
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW21fYXBwSW5zdGFsbENvb3JkaW5hdG9y
IHNldFBsYWNlaG9sZGVyUHJvbWlzZTpwbGFjZWhvbGRlci5nZXQoKSBlcnJvcjomZXJyb3JdOwor
ICAgIGlmIChlcnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmlu
ZygiRmFpbGVkIHRvIHNldCBwbGFjZWhvbGRlciBwcm9taXNlIGZvciBidW5kbGUgIiwgU3RyaW5n
KGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2Ny
aXB0aW9uXSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgUmV0YWluUHRyPElYUHJvbWlzZWRPdXRPZkJhbmRUcmFu
c2Zlcj4gZGF0YVByb21pc2UgPSBhZG9wdE5TKFtbSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVy
IGFsbG9jXSBpbml0V2l0aE5hbWU6QCJFbXB0eSB1c2VyIGRhdGEgcHJvbWlzZSIgY2xpZW50OklY
Q2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZGlza1NwYWNlTmVlZGVkOjBdKTsKKyAgICBkYXRh
UHJvbWlzZS5nZXQoKS5wZXJjZW50Q29tcGxldGUgPSAxLjA7CisgICAgZGF0YVByb21pc2UuZ2V0
KCkuY29tcGxldGUgPSBZRVM7CisKKyAgICBbbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3Igc2V0VXNl
ckRhdGFQcm9taXNlOmRhdGFQcm9taXNlLmdldCgpIGVycm9yOiZlcnJvcl07CisgICAgaWYgKGVy
cm9yKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJGYWlsZWQg
dG8gc2V0IHVzZXIgZGF0YSBwcm9taXNlIGZvciBidW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlkZW50
aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsK
KyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCit2b2lkIElDQXBwQnVuZGxlOjpidW5kbGVDcmVhdGlvblN1Y2NlZWRlZCgpCit7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ3JlYXRlQXBwQnVuZGxl
KCp0aGlzLCBQdXNoQXBwQnVuZGxlQ3JlYXRpb25SZXN1bHQ6OlN1Y2Nlc3MpOworCit9CisKK3Zv
aWQgSUNBcHBCdW5kbGU6OmJ1bmRsZUNyZWF0aW9uRmFpbGVkKE5TRXJyb3IgKmVycm9yKQorewor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENyZWF0ZUFwcEJ1bmRsZSgq
dGhpcywgUHVzaEFwcEJ1bmRsZUNyZWF0aW9uUmVzdWx0OjpGYWlsdXJlKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViUHVzaEQKKworI2VuZGlmIC8vIEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElP
Tl9CVU5ETEVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JbnN0YWxsQ29v
cmRpbmF0aW9uU1BJLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0luc3RhbGxDb29yZGluYXRp
b25TUEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmYwNmQ3MGY4
MWY0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSW5zdGFsbENv
b3JkaW5hdGlvblNQSS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRG
T1JNKElPUykKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCisjaW1wb3J0IDxJbnN0YWxs
Q29vcmRpbmF0aW9uL0lYQXBwSW5zdGFsbENvb3JkaW5hdG9yLmg+CisjaW1wb3J0IDxJbnN0YWxs
Q29vcmRpbmF0aW9uL0luc3RhbGxDb29yZGluYXRpb24uaD4KKworI2Vsc2UKKworI2luY2x1ZGUg
IkxhdW5jaFNlcnZpY2VzU1BJLmgiCisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK3R5cGVk
ZWYgZW51bSA6IE5TVUludGVnZXIgeworfSBJWENvb3JkaW5hdG9yUHJvZ3Jlc3NQaGFzZTsKKwor
dHlwZWRlZiBlbnVtIDogTlNVSW50ZWdlciB7CisgICAgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JQ
bGFjZWhvbGRlclByb21pc2UgPSAxLAorfSBJWEFwcEluc3RhbGxDb29yZGluYXRvclByb21pc2VJ
ZGVudGlmaWVyOworCit0eXBlZGVmIGVudW0gOiBOU1VJbnRlZ2VyIHsKKyAgICBJWENsaWVudElk
ZW50aWZpZXJBcHBsaWVkRm9yID0gMTksCit9IElYQ2xpZW50SWRlbnRpZmllcjsKKworQGNsYXNz
IExTQXBwbGljYXRpb25SZWNvcmQ7CitAY2xhc3MgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3I7CitA
Y2xhc3MgSVhQbGFjZWhvbGRlcjsKK0BjbGFzcyBJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXI7
CisKK0Bwcm90b2NvbCBJWEFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyIDxOU09iamVjdD4K
K0BvcHRpb25hbAorLSAodm9pZCljb29yZGluYXRvckRpZFJlZ2lzdGVyRm9yT2JzZXJ2YXRpb246
KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvcjsKKy0gKHZvaWQp
Y29vcmRpbmF0b3JTaG91bGRQcmlvcml0aXplOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5h
dG9yICopY29vcmRpbmF0b3I7CistICh2b2lkKWNvb3JkaW5hdG9yU2hvdWxkUmVzdW1lOihub25u
dWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7CistICh2b2lkKWNvb3Jk
aW5hdG9yU2hvdWxkUGF1c2U6KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29y
ZGluYXRvcjsKKy0gKHZvaWQpY29vcmRpbmF0b3I6KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRp
bmF0b3IgKiljb29yZGluYXRvciBkaWRVcGRhdGVQcm9ncmVzczooZG91YmxlKXBlcmNlbnRDb21w
bGV0ZSBmb3JQaGFzZTooSVhDb29yZGluYXRvclByb2dyZXNzUGhhc2UpcGhhc2Ugb3ZlcmFsbFBy
b2dyZXNzOihkb3VibGUpb3ZlcmFsbFByb2dyZXNzOworLSAodm9pZCljb29yZGluYXRvckRpZENv
bXBsZXRlU3VjY2Vzc2Z1bGx5Oihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29v
cmRpbmF0b3IgZm9yQXBwbGljYXRpb25SZWNvcmQ6KG51bGxhYmxlIExTQXBwbGljYXRpb25SZWNv
cmQgKilhcHBSZWNvcmQ7CistICh2b2lkKWNvb3JkaW5hdG9yRGlkSW5zdGFsbFBsYWNlaG9sZGVy
Oihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgZm9yQXBwbGlj
YXRpb25SZWNvcmQ6KG51bGxhYmxlIExTQXBwbGljYXRpb25SZWNvcmQgKilwbGFjZWhvbGRlclJl
Y29yZDsKKy0gKHZvaWQpY29vcmRpbmF0b3I6KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0
b3IgKiljb29yZGluYXRvciBjYW5jZWxlZFdpdGhSZWFzb246KG5vbm51bGwgTlNFcnJvciAqKWNh
bmNlbFJlYXNvbiBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmllciljbGllbnQ7CitAZW5kCisKK3R5
cGVkZWYgdm9pZCAoXklYQXBwSW5zdGFsbENvb3JkaW5hdG9yRXJyb3JDb21wbGV0aW9uKShOU0Vy
cm9yICogX051bGxhYmxlIGVycm9yKTsKKworQGludGVyZmFjZSBJWEFwcEluc3RhbGxDb29yZGlu
YXRvcgorKyAodm9pZCl1bmluc3RhbGxBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopYnVuZGxl
SUQgcmVxdWVzdFVzZXJDb25maXJtYXRpb246KEJPT0wpcmVxdWVzdFVzZXJDb25maXJtYXRpb24g
Y29tcGxldGlvbjooSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JFcnJvckNvbXBsZXRpb24pY29tcGxl
dGlvbjsKKysgKEJPT0wpY2FuY2VsQ29vcmRpbmF0b3JGb3JBcHBXaXRoQnVuZGxlSUQ6KE5TU3Ry
aW5nICopYnVuZGxlSUQgd2l0aFJlYXNvbjooTlNFcnJvciAqKWNhbmNlbFJlYXNvbiBjbGllbnQ6
KElYQ2xpZW50SWRlbnRpZmllciljbGllbnQgZXJyb3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOwor
KyAoaW5zdGFuY2V0eXBlKWNvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAq
KWJ1bmRsZUlEIHdpdGhDbGllbnRJRDooSVhDbGllbnRJZGVudGlmaWVyKWlkZW50aXR5IGNyZWF0
ZUlmTm90RXhpc3Rpbmc6KEJPT0wpY3JlYXRlIGNyZWF0ZWQ6KEJPT0wgKilvdXRfY3JlYXRlZCBl
cnJvcjooTlNFcnJvciAqKilvdXRfZXJyb3I7CitAcHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFi
bGUsIHdlYWspIGlkPElYQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXI+IG9ic2VydmVyOwor
LSAoQk9PTClzZXRQbGFjZWhvbGRlclByb21pc2U6KElYUGxhY2Vob2xkZXIgKilwbGFjZWhvbGRl
clByb21pc2UgZXJyb3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworLSAoQk9PTClzZXRVc2VyRGF0
YVByb21pc2U6KElYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciAqKXVzZXJEYXRhIGVycm9yOihO
U0Vycm9yICoqKW91dF9lcnJvcjsKK0BlbmQKKworQGludGVyZmFjZSBJWFJlc3RvcmluZ0RlbW90
ZWRBcHBJbnN0YWxsQ29vcmRpbmF0b3IgOiBJWEFwcEluc3RhbGxDb29yZGluYXRvcgorQGVuZAor
CitAaW50ZXJmYWNlIElYT3duZWREYXRhUHJvbWlzZSA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRl
cmZhY2UgSVhQcm9taXNlZEluTWVtb3J5RGljdGlvbmFyeSA6IElYT3duZWREYXRhUHJvbWlzZQor
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGNsaWVudDooSVhD
bGllbnRJZGVudGlmaWVyKWlkZW50aXR5IGRpY3Rpb25hcnk6KE5TRGljdGlvbmFyeSAqKWRpY3Rp
b25hcnk7CitAZW5kCisKK0BpbnRlcmZhY2UgSVhQbGFjZWhvbGRlckF0dHJpYnV0ZXMgOiBOU09i
amVjdAorQHByb3BlcnR5IChub25hdG9taWMpIEJPT0wgbGF1bmNoUHJvaGliaXRlZDsKK0BlbmQK
KworQGludGVyZmFjZSBJWFBsYWNlaG9sZGVyIDogTlNPYmplY3QKKy0gKGluc3RhbmNldHlwZSlp
bml0QXBwUGxhY2Vob2xkZXJXaXRoQnVuZGxlTmFtZTooTlNTdHJpbmcgKiluYW1lIGJ1bmRsZUlE
OihOU1N0cmluZyAqKWJ1bmRsZUlEIGluc3RhbGxUeXBlOihMU0luc3RhbGxUeXBlKWluc3RhbGxU
eXBlIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWlkZW50aXR5IE5TX0RFU0lHTkFURURfSU5J
VElBTElaRVI7CistIChCT09MKXNldFBsYWNlaG9sZGVyQXR0cmlidXRlczoobm9ubnVsbCBJWFBs
YWNlaG9sZGVyQXR0cmlidXRlcyAqKWF0dHJpYnV0ZXMgZXJyb3I6KE5TRXJyb3IgKiopb3V0X2Vy
cm9yOworLSAoQk9PTClzZXRFbnRpdGxlbWVudHNQcm9taXNlOihub25udWxsIElYT3duZWREYXRh
UHJvbWlzZSAqKWVudGl0bGVtZW50cyBlcnJvcjooTlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyBf
TnVsbGFibGUgKiBfTnVsbGFibGUpb3V0X2Vycm9yOworLSAoQk9PTClzZXRDb25maWd1cmF0aW9u
Q29tcGxldGVXaXRoRXJyb3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworQGVuZAorCitAaW50ZXJm
YWNlIElYT3BhcXVlRGF0YVByb21pc2UgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIElY
UHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciA6IElYT3BhcXVlRGF0YVByb21pc2UKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljKSBCT09MIGNvbXBsZXRlOworQHByb3BlcnR5IChub25hdG9taWMpIGRvdWJs
ZSBwZXJjZW50Q29tcGxldGU7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmlu
ZyAqKW5hbWUgY2xpZW50OihJWENsaWVudElkZW50aWZpZXIpaWRlbnRpdHkgZGlza1NwYWNlTmVl
ZGVkOih1aW50NjRfdCl0b3RhbEJ5dGVzOworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQK
KworI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9MYXVuY2hTZXJ2aWNlc1NQ
SS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9MYXVuY2hTZXJ2aWNlc1NQSS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGVlZTEwOGRkYTBiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9MYXVuY2hTZXJ2aWNlc1NQSS5oCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgUExBVEZPUk0oSU9TKQorI2lmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCisKKy8vIFRoaXMgc3BhY2UgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5r
CisKKyNlbHNlCisKK05TX0FTU1VNRV9OT05OVUxMX0JFR0lOCisKK3R5cGVkZWYgTlNfRU5VTShO
U1VJbnRlZ2VyLCBMU0luc3RhbGxUeXBlKSB7CisgICAgTFNJbnN0YWxsVHlwZUludGVudGlvbmFs
RG93bmdyYWRlID0gOAorfTsKKworQGludGVyZmFjZSBMU1JlY29yZCA6IE5TT2JqZWN0CitAZW5k
CisKK0BpbnRlcmZhY2UgTFNCdW5kbGVSZWNvcmQgOiBMU1JlY29yZAorQHByb3BlcnR5IChyZWFk
b25seSwgbnVsbGFibGUpIE5TU3RyaW5nICpidW5kbGVJZGVudGlmaWVyOworQGVuZAorCitAaW50
ZXJmYWNlIExTQXBwbGljYXRpb25SZWNvcmQgOiBMU0J1bmRsZVJlY29yZAorQHByb3BlcnR5IChy
ZWFkb25seSkgQk9PTCBwbGFjZWhvbGRlcjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIE5TU3RyaW5n
ICptYW5hZ2VtZW50RG9tYWluOworCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhCdW5kbGVJZGVu
dGlmaWVyOihOU1N0cmluZyAqKWJ1bmRsZUlkZW50aWZpZXIgYWxsb3dQbGFjZWhvbGRlcjooQk9P
TClhbGxvd1BsYWNlaG9sZGVyIGVycm9yOihOU0Vycm9yICoqKW91dEVycm9yOworQGVuZAorCitA
aW50ZXJmYWNlIExTRW51bWVyYXRvcjxfX2NvdmFyaWFudCBPYmplY3RUeXBlPiA6IE5TRW51bWVy
YXRvcjxPYmplY3RUeXBlPgorQGVuZAorCit0eXBlZGVmIE5TX09QVElPTlModWludDY0X3QsIExT
QXBwbGljYXRpb25FbnVtZXJhdGlvbk9wdGlvbnMpIHsKKyAgICBMU0FwcGxpY2F0aW9uRW51bWVy
YXRpb25PcHRpb25zRW51bWVyYXRlUGxhY2Vob2xkZXJzID0gKDEgPDwgNikKK307CisKK0BpbnRl
cmZhY2UgTFNBcHBsaWNhdGlvblJlY29yZCAoRW51bWVyYXRpb24pCisrIChMU0VudW1lcmF0b3I8
TFNBcHBsaWNhdGlvblJlY29yZCAqPiAqKWVudW1lcmF0b3JXaXRoT3B0aW9uczooTFNBcHBsaWNh
dGlvbkVudW1lcmF0aW9uT3B0aW9ucylvcHRpb25zOworQGVuZAorCitOU19BU1NVTUVfTk9OTlVM
TF9FTkQKKworI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisjZW5kaWYgLy8gUExB
VEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVu
ZGxlLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaAppbmRleCA4YTZk
NTdjYzZmNWIuLmU5ODVlMzIxMDE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9QdXNoQXBwQnVuZGxlLmgKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVu
ZGxlLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBA
Y2xhc3MgTlNFcnJvcjsKIApAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZUFwcEJ1bmRsZShQdXNoQXBwQnVuZGxlJiwgUHVzaEFwcEJ1bmRsZUNyZWF0
aW9uUmVzdWx0KSA9IDA7CiB9OwogCi1jbGFzcyBQdXNoQXBwQnVuZGxlIDogcHVibGljIFJlZkNv
dW50ZWQ8UHVzaEFwcEJ1bmRsZT4geworY2xhc3MgUHVzaEFwcEJ1bmRsZSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxQdXNoQXBwQnVuZGxlPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
UHVzaEFwcEJ1bmRsZSgpOwogICAgIHZvaWQgZGV0YWNoRnJvbUNsaWVudCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tIGIvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCmluZGV4IDNiNzhmMjkwYzI3ZS4uMDJkYmNkNzhk
NTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0K
KysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW1wb3J0ICJEYWVtb25FbmNvZGVyLmgiCiAjaW1wb3J0ICJEYWVtb25VdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIkhhbmRsZU1lc3NhZ2UuaCIKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgi
CiAjaW1wb3J0ICJNb2NrQXBwQnVuZGxlUmVnaXN0cnkuaCIKIAogI2ltcG9ydCA8d3RmL0NvbXBs
ZXRpb25IYW5kbGVyLmg+CkBAIC0yNzAsOCArMjcxLDExIEBAIHZvaWQgRGFlbW9uOjpnZXRPcmln
aW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9ucyhDbGllbnRDb25uZWN0aW9uKiBj
b25uCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG5l
ZWQgcGxhdGZvcm0tc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGZvciByZWFsIHdvcmxkIGJ1bmRs
ZXMgb25jZSBpbXBsZW1lbnRlZC4KLSAgICByZXBseVNlbmRlcih7IH0pOworI2lmIEVOQUJMRShJ
TlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQorICAgIElDQXBwQnVuZGxlOjpnZXRPcmlnaW5z
V2l0aFJlZ2lzdHJhdGlvbnMoKmNvbm5lY3Rpb24sIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyNl
bHNlCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgogfQogCiB2b2lk
IERhZW1vbjo6ZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihDbGllbnRDb25u
ZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiByZXBseVNlbmRlcikKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiNDA2NWJkODU1YWYuLjJi
ODYxNzNlZjU5OSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYW4gSW5zdGFsbENvb3JkaW5hdGlvbiB3ZWJwdXNo
ZCBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzM3MTQKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tOgor
CiAyMDIxLTEyLTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgV0tXZWJzaXRlRGF0YVN0b3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSBN
b2NrIGFwcCBidW5kbGUgdGVzdGluZy4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQppbmRleCBkODcxMmIwNDA1MTYuLmE4
OWM2NzRiMjFkYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbQpAQCAtMzMwLDYgKzMzMCw5OCBAQCBURVNUKFdlYlB1
c2hELCBQZXJtaXNzaW9uTWFuYWdlbWVudCkKICAgICBjbGVhblVwVGVzdFdlYlB1c2hEKHRlbXBE
aXJlY3RvcnkpOwogfQogCisjaWYgRU5BQkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMp
CitzdGF0aWMgdm9pZCBkZWxldGVBbGxSZWdpc3RyYXRpb25zRm9yRGF0YVN0b3JlKFdLV2Vic2l0
ZURhdGFTdG9yZSAqZGF0YVN0b3JlKQoreworICAgIF9fYmxvY2sgYm9vbCBvcmlnaW5PcGVyYXRp
b25Eb25lID0gZmFsc2U7CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNTZXQ8V0tTZWN1cml0eU9y
aWdpbiAqPj4gb3JpZ2luU2V0OworICAgIFtkYXRhU3RvcmUgX2dldE9yaWdpbnNXaXRoUHVzaEFu
ZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOl4oTlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPiAqb3Jp
Z2lucykgeworICAgICAgICBvcmlnaW5TZXQgPSBvcmlnaW5zOworICAgICAgICBvcmlnaW5PcGVy
YXRpb25Eb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
Jm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCisgICAgaWYgKCFbb3JpZ2luU2V0IGNvdW50XSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgX19ibG9jayBzaXplX3QgZGVsZXRlZE9yaWdpbnMgPSAwOwor
ICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSBmYWxzZTsKKyAgICBmb3IgKFdLU2VjdXJpdHlPcmln
aW4gKm9yaWdpbiBpbiBvcmlnaW5TZXQuZ2V0KCkpIHsKKyAgICAgICAgW2RhdGFTdG9yZSBfZGVs
ZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbjpvcmlnaW4gY29tcGxldGlvbkhhbmRs
ZXI6XihOU0Vycm9yICplcnJvcikgeworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKCEhZXJyb3Ip
OworICAgICAgICAgICAgaWYgKCsrZGVsZXRlZE9yaWdpbnMgPT0gW29yaWdpblNldCBjb3VudF0p
CisgICAgICAgICAgICAgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRydWU7CisgICAgICAgIH1d
OworICAgIH0KKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRv
bmUpOworCisgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAgIFtkYXRhU3RvcmUg
X2dldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOl4oTlNTZXQ8V0tT
ZWN1cml0eU9yaWdpbiAqPiAqb3JpZ2lucykgeworICAgICAgICBFWFBFQ1RfRVEoW29yaWdpbnMg
Y291bnRdLCAwdSk7CisgICAgICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmb3JpZ2luT3BlcmF0aW9uRG9uZSk7CisK
K30KKworVEVTVChXZWJQdXNoRCwgSW5zdGFsbENvb3JkaW5hdGlvbkJ1bmRsZXMpCit7CisgICAg
TlNVUkwgKnRlbXBEaXJlY3RvcnkgPSBzZXRVcFRlc3RXZWJQdXNoRCgpOworCisgICAgYXV0byBk
YXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRvcHROUyhbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb24gbmV3XSk7CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKS53ZWJQdXNo
TWFjaFNlcnZpY2VOYW1lID0gQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFlbW9uLnNlcnZpY2Ui
OworICAgIGF1dG8gZGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBhbGxv
Y10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpXSk7
CisKKyAgICBkZWxldGVBbGxSZWdpc3RyYXRpb25zRm9yRGF0YVN0b3JlKGRhdGFTdG9yZS5nZXQo
KSk7CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyYXRpb24uZ2V0KCkud2Vic2l0ZURh
dGFTdG9yZSA9IGRhdGFTdG9yZS5nZXQoKTsKKyAgICBbY29uZmlndXJhdGlvbi5nZXQoKS5wcmVm
ZXJlbmNlcyBfc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQ6WUVTXTsKKyAgICBmb3IgKF9XS0V4cGVy
aW1lbnRhbEZlYXR1cmUgKmZlYXR1cmUgaW4gW1dLUHJlZmVyZW5jZXMgX2V4cGVyaW1lbnRhbEZl
YXR1cmVzXSkgeworICAgICAgICBpZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxUb1N0cmluZzpAIkJ1
aWx0SW5Ob3RpZmljYXRpb25zRW5hYmxlZCJdKQorICAgICAgICAgICAgW1tjb25maWd1cmF0aW9u
IHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0dXJlXTsKKyAgICB9
CisKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdFVSTFNjaGVtZUhhbmRsZXIgYWxs
b2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVIYW5kbGVyOmhhbmRs
ZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdGluZyJdOworCisgICAgW2hhbmRsZXIgc2V0U3Rh
cnRVUkxTY2hlbWVUYXNrSGFuZGxlcjpeKFdLV2ViVmlldyAqLCBpZDxXS1VSTFNjaGVtZVRhc2s+
IHRhc2spIHsKKyAgICAgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU1VSTFJlc3BvbnNl
IGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBlOkAidGV4dC9odG1s
IiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5pbF0pOworICAgICAg
ICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCldOworICAgICAgICBbdGFz
ayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6bWFpbkJ5dGVzIGxlbmd0aDpz
dHJsZW4obWFpbkJ5dGVzKV1dOworICAgICAgICBbdGFzayBkaWRGaW5pc2hdOworICAgIH1dOwor
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1
cmF0aW9uLmdldCgpXSk7CisgICAgYXV0byB1aURlbGVnYXRlID0gYWRvcHROUyhbW05vdGlmaWNh
dGlvblBlcm1pc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldFVJ
RGVsZWdhdGU6dWlEZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpb
TlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdGlu
ZzovL21haW4vaW5kZXguaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZh
bGVydFJlY2VpdmVkKTsKKworICAgIGFsZXJ0UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAidGVzdGluZzovL3NlY29uZGFyeS9pbmRleC5odG1sIl1dXTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmFsZXJ0UmVjZWl2ZWQpOworCisgICAgc3RhdGljIGJvb2wgb3Jp
Z2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNTZXQ8V0tT
ZWN1cml0eU9yaWdpbiAqPj4gb3JpZ2luczsKKyAgICBbZGF0YVN0b3JlIF9nZXRPcmlnaW5zV2l0
aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9uczpeKE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4g
Kj4gKnJhd09yaWdpbnMpIHsKKyAgICAgICAgRVhQRUNUX0VRKFtyYXdPcmlnaW5zIGNvdW50XSwg
MnUpOworICAgICAgICBvcmlnaW5zID0gcmF3T3JpZ2luczsKKyAgICAgICAgb3JpZ2luT3BlcmF0
aW9uRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZv
cmlnaW5PcGVyYXRpb25Eb25lKTsKKworICAgIGZvciAoV0tTZWN1cml0eU9yaWdpbiAqb3JpZ2lu
IGluIG9yaWdpbnMuZ2V0KCkpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoW29yaWdpbi5wcm90b2Nv
bCBpc0VxdWFsVG9TdHJpbmc6QCJ0ZXN0aW5nIl0pOworICAgICAgICBFWFBFQ1RfVFJVRShbb3Jp
Z2luLmhvc3QgaXNFcXVhbFRvU3RyaW5nOkAibWFpbiJdIHx8IFtvcmlnaW4uaG9zdCBpc0VxdWFs
VG9TdHJpbmc6QCJzZWNvbmRhcnkiXSk7CisgICAgfQorCisgICAgZGVsZXRlQWxsUmVnaXN0cmF0
aW9uc0ZvckRhdGFTdG9yZShkYXRhU3RvcmUuZ2V0KCkpOworICAgIGNsZWFuVXBUZXN0V2ViUHVz
aEQodGVtcERpcmVjdG9yeSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElOU1RBTExfQ09PUkRJTkFU
SU9OX0JVTkRMRVMpCisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8v
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvV2ViS2l0TGlicmFy
aWVzL0NoYW5nZUxvZyBiL1dlYktpdExpYnJhcmllcy9DaGFuZ2VMb2cKaW5kZXggMGJmNmU0Y2Uz
ZjY4Li42MWQxNzYzNTc2ZDcgMTAwNjQ0Ci0tLSBhL1dlYktpdExpYnJhcmllcy9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0TGlicmFyaWVzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTEy
LTAxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYW4g
SW5zdGFsbENvb3JkaW5hdGlvbiB3ZWJwdXNoZCBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM3MTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICogV2ViS2l0UHJpdmF0ZUZyYW1ld29ya1N0
dWJzL2lPUy8xNS9JbnN0YWxsQ29vcmRpbmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRpbmF0
aW9uLnRiZDogQWRkZWQuCisKIDIwMjEtMTEtMTQgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIEdldCBkYWVtb24gQVBJIHJlYWR5IHRvIHdvcmsgaW4gdGhlIGlP
UyBzaW11bGF0b3IgKHN0YXJ0aW5nIHdpdGggV2ViUHVzaEQpCmRpZmYgLS1naXQgYS9XZWJLaXRM
aWJyYXJpZXMvV2ViS2l0UHJpdmF0ZUZyYW1ld29ya1N0dWJzL2lPUy8xNS9JbnN0YWxsQ29vcmRp
bmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRpbmF0aW9uLnRiZCBiL1dlYktpdExpYnJhcmll
cy9XZWJLaXRQcml2YXRlRnJhbWV3b3JrU3R1YnMvaU9TLzE1L0luc3RhbGxDb29yZGluYXRpb24u
ZnJhbWV3b3JrL0luc3RhbGxDb29yZGluYXRpb24udGJkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uMzZiYjBlODNkNDg4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
TGlicmFyaWVzL1dlYktpdFByaXZhdGVGcmFtZXdvcmtTdHVicy9pT1MvMTUvSW5zdGFsbENvb3Jk
aW5hdGlvbi5mcmFtZXdvcmsvSW5zdGFsbENvb3JkaW5hdGlvbi50YmQKQEAgLTAsMCArMSw4IEBA
CistLS0gIXRhcGktdGJkLXYzCithcmNoczogICAgICAgICAgIFsgeDg2XzY0LCBhcm02NCwgYXJt
NjRlIF0KK2luc3RhbGwtbmFtZTogICAgJy9TeXN0ZW0vTGlicmFyeS9Qcml2YXRlRnJhbWV3b3Jr
cy9JbnN0YWxsQ29vcmRpbmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRpbmF0aW9uJworcGxh
dGZvcm06IGlvcworZXhwb3J0czoKKyAgLSBhcmNoczogICAgICAgICAgIFsgeDg2XzY0LCBhcm02
NCwgYXJtNjRlIF0KKyAgICBvYmpjLWNsYXNzZXM6ICAgIFsgSVhBcHBJbnN0YWxsQ29vcmRpbmF0
b3IsIElYT3BhcXVlRGF0YVByb21pc2UsIElYT3duZWREYXRhUHJvbWlzZSwgSVhQbGFjZWhvbGRl
ciwgSVhQbGFjZWhvbGRlckF0dHJpYnV0ZXMsIElYUHJvbWlzZWRJbk1lbW9yeURpY3Rpb25hcnks
IElYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciwgSVhSZXN0b3JpbmdEZW1vdGVkQXBwSW5zdGFs
bENvb3JkaW5hdG9yIF0KKy4uLgo=
</data>
<flag name="commit-queue"
          id="471019"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452470</attachid>
            <date>2022-02-17 19:33:04 -0800</date>
            <delta_ts>2022-02-17 19:34:35 -0800</delta_ts>
            <desc>Revived for EWS + landing</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>53035</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZjYwNjk4OWJjZGE2Li5mM2U3YjMyNWI4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjItMDItMTcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1FbmFibGVD
b2NvYS5oOgorCiAyMDIyLTAyLTE1ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dHU0xdIEltcGxlbWVudCBlbm91Z2ggb2YgdGhlIGxleGVyIGZvciB0
aGUgc2ltcGxlc3Qgc2hhZGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1F
bmFibGVDb2NvYS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCmluZGV4
IDc2MGJjNzBmZWU2Ny4uNTQzZjkyMzM0NzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUVuYWJsZUNvY29hLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVD
b2NvYS5oCkBAIC0xNDMsNiArMTQzLDEwIEBACiAjZGVmaW5lIEVOQUJMRV9CVUlMVF9JTl9OT1RJ
RklDQVRJT05TIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxFX0lOU1RBTExfQ09PUkRJ
TkFUSU9OX0JVTkRMRVMpICYmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUgRU5BQkxFX0lOU1RBTExf
Q09PUkRJTkFUSU9OX0JVTkRMRVMgMQorI2VuZGlmCisKICNpZiAhZGVmaW5lZChFTkFCTEVfQ0FD
SEVfUEFSVElUSU9OSU5HKQogI2RlZmluZSBFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HIDEKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggMTdmMzliM2U4OWVmLi41OGZmYjRhZGYyYTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAyLTE3ICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYW4gSW5zdGFsbENvb3JkaW5h
dGlvbiB3ZWJwdXNoZCBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzM3MTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFeHBvc2UgInRvSGV4U3RyaW5nIiBzbyB3ZSBjYW4gU0hBMjU2IGFuIGFy
Yml0cmFyeSBzdHJpbmcgdG8gYSBoZXggcmVwcmVzZW50YXRpb24uCisKKyAgICAgICAgKiBwYWwv
Y3J5cHRvL0NyeXB0b0RpZ2VzdC5oOgorICAgICAgICAqIHBhbC9jcnlwdG8vY29tbW9uY3J5cHRv
L0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHA6CisgICAgICAgIChQQUw6OkNyeXB0b0RpZ2Vz
dDo6dG9IZXhTdHJpbmcpOgorCiAyMDIyLTAyLTE1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IGludGVybmFsIEJpZyBTdXIgYnVpbGQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5o
IGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKaW5kZXggMDZj
MThjMzBlYjEwLi4xMzg0ODRiMzA5N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvY3J5cHRvL0NyeXB0b0RpZ2VzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvY3J5
cHRvL0NyeXB0b0RpZ2VzdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBQQUwgewogCkBAIC00Nyw2ICs0OCw3IEBAIHB1Ymxp
YzoKIAogICAgIFBBTF9FWFBPUlQgdm9pZCBhZGRCeXRlcyhjb25zdCB2b2lkKiBpbnB1dCwgc2l6
ZV90IGxlbmd0aCk7CiAgICAgUEFMX0VYUE9SVCBWZWN0b3I8dWludDhfdD4gY29tcHV0ZUhhc2go
KTsKKyAgICBQQUxfRVhQT1JUIFN0cmluZyB0b0hleFN0cmluZygpOwogCiBwcml2YXRlOgogICAg
IENyeXB0b0RpZ2VzdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlw
dG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9QQUwvcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRv
LmNwcAppbmRleCAxY2U1Nzk3ZmVmNjIuLmRjZjBhMzQ0ZThlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRvL0NyeXB0b0RpZ2VzdENvbW1vbkNy
eXB0by5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vY29tbW9uY3J5cHRv
L0NyeXB0b0RpZ2VzdENvbW1vbkNyeXB0by5jcHAKQEAgLTE4Miw0ICsxODIsMTkgQEAgVmVjdG9y
PHVpbnQ4X3Q+IENyeXB0b0RpZ2VzdDo6Y29tcHV0ZUhhc2goKQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKK1N0cmluZyBDcnlwdG9EaWdlc3Q6OnRvSGV4U3RyaW5nKCkKK3sKKyAgICBhdXRvIGhh
c2ggPSBjb21wdXRlSGFzaCgpOworCisgICAgY2hhciogc3RhcnQgPSAwOworICAgIHVuc2lnbmVk
IGhhc2hMZW5ndGggPSBoYXNoLnNpemUoKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6
Om5ld1VuaW5pdGlhbGl6ZWQoaGFzaExlbmd0aCAqIDIsIHN0YXJ0KTsKKyAgICBjaGFyKiBidWZm
ZXIgPSBzdGFydDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhc2hMZW5ndGg7ICsraSkg
eworICAgICAgICBzbnByaW50ZihidWZmZXIsIDMsICIlMDJYIiwgaGFzaC5hdChpKSk7CisgICAg
ICAgIGJ1ZmZlciArPSAyOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChyZXN1
bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBQQUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMzNkMDA4ZGMzZTgxLi5j
YjU5OTI3MDMyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMjItMDItMTcgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhbiBJbnN0YWxsQ29v
cmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hy
aXN0ZW5zZW4uCisKKyAgICAgICAgQ292ZXJlZCBieSBBUEkgdGVzdHMuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHBhdGNoIGxldHMgdGhlIGlPUyBidWlsZCBjcmVhdGUgYSBwbGFjZWhvbGRlciBh
cHAgYnVuZGxlIHRvIHJlcHJlc2VudCBhIHJlZ2lzdHJhdGlvbiB1c2luZyBJbnN0YWxsQ29vcmRp
bmF0aW9uLgorICAgICAgICAKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy93ZWJwdXNoZC54Y2Nv
bmZpZzoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgCisgICAgICAgICogd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5tbToKKyAgICAgICAgKFdl
YlB1c2hEOjpBcHBCdW5kbGVSZXF1ZXN0OjpzdGFydCk6IFVzZSB0aGUgSUNBcHBCdW5kbGUgaW1w
bGVtZW50YXRpb24gd2hlbiBhcHByb3ByaWF0ZS4KKyAgICAgICAgCisgICAgICAgICogd2VicHVz
aGQvSUNBcHBCdW5kbGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNo
QXBwQnVuZGxlLmguCisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6OmNyZWF0ZSk6Cisg
ICAgICAgIAorICAgICAgICAqIHdlYnB1c2hkL0lDQXBwQnVuZGxlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgaW5pdFdpdGhJQ0FwcEJ1bmRs
ZTpdKToKKyAgICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgY29vcmRp
bmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3NmdWxseTpmb3JBcHBsaWNhdGlvblJlY29yZDpdKToKKyAg
ICAgICAgKC1bV2ViQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgY29vcmRpbmF0b3I6Y2Fu
Y2VsZWRXaXRoUmVhc29uOmNsaWVudDpdKToKKyAgICAgICAgKFdlYlB1c2hEOjpicm9hZGNhc3RE
ZWJ1Z01lc3NhZ2UpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVuZGxlOjpJQ0FwcEJ1bmRs
ZSk6CisgICAgICAgIChXZWJQdXNoRDo6ZW5jb2RlT3JpZ2luU3RyaW5nRm9yQnVuZGxlSWRlbnRp
Zmllcik6CisgICAgICAgIChXZWJQdXNoRDo6b3JpZ2luU3RyaW5nRnJvbUVuY29kZWRCdW5kbGVJ
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpidW5kbGVQcmVmaXhGb3JIb3N0QXBwSWRl
bnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6YnVuZGxlTmFtZUZvck9yaWdpblN0cmluZ0Fu
ZEhvc3RBcHBJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZTo6Z2V0
T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRs
ZTo6Z2V0QnVuZGxlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6
OmNoZWNrRm9yRXhpc3RpbmdCdW5kbGUpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVuZGxl
OjpkZWxldGVFeGlzdGluZ0J1bmRsZSk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6
OmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKToKKyAgICAgICAgKFdlYlB1c2hEOjpJ
Q0FwcEJ1bmRsZTo6c3RvcCk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6OmNyZWF0
ZUJ1bmRsZSk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6OmJ1bmRsZUNyZWF0aW9u
U3VjY2VlZGVkKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZTo6YnVuZGxlQ3JlYXRp
b25GYWlsZWQpOgorICAgICAgICAKKyAgICAgICAgKiB3ZWJwdXNoZC9JbnN0YWxsQ29vcmRpbmF0
aW9uU1BJLmg6IEFkZGVkLgorICAgICAgICAqIHdlYnB1c2hkL0xhdW5jaFNlcnZpY2VzU1BJLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oLgorICAg
ICAgICAqIHdlYnB1c2hkL1B1c2hBcHBCdW5kbGUuaDoKKyAgICAgICAgCisgICAgICAgICogd2Vi
cHVzaGQvV2ViUHVzaERhZW1vbi5tbToKKyAgICAgICAgKFdlYlB1c2hEOjpEYWVtb246OmdldE9y
aWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zKTogVXNlIHRoZSBJQ0FwcEJ1
bmRsZSBpbXBsZW1lbnRhdGlvbiB3aGVuIGFwcHJvcHJpYXRlLgorCiAyMDIyLTAyLTE1ICBQaGls
aXAgQ2hpbWVudG8gIDxwY2hpbWVudG9AaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXhlcyBmb3Ig
YnVpbGQtd2Via2l0IC0tbWluaW1hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Db25maWd1
cmF0aW9ucy9XZWJLaXQueGNjb25maWcgYi9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL1dl
YktpdC54Y2NvbmZpZwppbmRleCBlMjRkMTlkODIzZGEuLjIyMWY0YTQ4ZjBmNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNjb25maWcKKysrIGIvU291
cmNlL1dlYktpdC9Db25maWd1cmF0aW9ucy9XZWJLaXQueGNjb25maWcKQEAgLTE1Miw3ICsxNTIs
MTEgQEAgV0tfTElCTkVUV09SS0VYVEVOU0lPTl9MREZMQUdTX21hY2NhdGFseXN0ID0gLWxuZXR3
b3JrZXh0ZW5zaW9uOwogV0tfTElCTkVUV09SS0VYVEVOU0lPTl9MREZMQUdTX21hY29zeCA9IC13
ZWFrX2xpYnJhcnkgL3Vzci9saWIvbGlibmV0d29ya2V4dGVuc2lvbi5keWxpYjsKIFdLX0xJQk5F
VFdPUktFWFRFTlNJT05fTERGTEFHU190dm9zID0gOwogCi1GUkFNRVdPUktfQU5EX0xJQlJBUllf
TERGTEFHUyA9IC1sb2JqYyAtZnJhbWV3b3JrIENGTmV0d29yayAtZnJhbWV3b3JrIENvcmVBdWRp
byAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIC1mcmFtZXdvcmsgQ29yZUdyYXBoaWNzIC1mcmFt
ZXdvcmsgQ29yZVRleHQgLWZyYW1ld29yayBGb3VuZGF0aW9uIC1mcmFtZXdvcmsgSW1hZ2VJTyAt
ZnJhbWV3b3JrIElPS2l0IC1mcmFtZXdvcmsgSU9TdXJmYWNlIC1mcmFtZXdvcmsgV2ViS2l0TGVn
YWN5IC1sbmV0d29yayAtZnJhbWV3b3JrIE1ldGFsICQoV0tfQUNDRVNTSUJJTElUWV9MREZMQUdT
KSAkKFdLX0FQUEtJVF9MREZMQUdTKSAkKFdLX0JBQ0tCT0FSRF9TRVJWSUNFU19MREZMQUdTKSAk
KFdLX1JVTk5JTkdCT0FSRF9TRVJWSUNFU19MREZMQUdTKSAkKFdLX0FVVEhLSVRfTERGTEFHUykg
JChXS19DQVJCT05fTERGTEFHUykgJChXS19DT05UQUNUU19MREZMQUdTKSAkKFdLX0NPUkVfUFJF
RElDVElPTl9MREZMQUdTKSAkKFdLX0NPUkVfU0VSVklDRVNfTERGTEFHUykgJChXS19HUkFQSElD
U19TRVJWSUNFU19MREZMQUdTKSAkKFdLX0xJQk5FVFdPUktFWFRFTlNJT05fTERGTEFHUykgJChX
S19MSUJTQU5EQk9YX0xERkxBR1MpICQoV0tfTElCV0VCUlRDX0xERkxBR1MpICQoV0tfTU9CSUxF
X0NPUkVfU0VSVklDRVNfTERGTEFHUykgJChXS19NT0JJTEVfR0VTVEFMVF9MREZMQUdTKSAkKFdL
X1BERktJVF9MREZMQUdTKSAkKFdLX1BST1RPVFlQRV9UT09MU19MREZMQUdTKSAkKFdLX1NBRkVf
QlJPV1NJTkdfTERGTEFHUykgJChXS19TRUNVUklUWV9JTlRFUkZBQ0VfTERGTEFHUykgJChXS19V
SUtJVF9MREZMQUdTKSAkKFdLX1VOSUZPUk1fVFlQRV9JREVOVElGSUVSU19MREZMQUdTKSAkKFdL
X1VSTF9GT1JNQVRUSU5HX0xERkxBR1MpICQoV0tfV0VCSU5TUEVDVE9SVUlfTERGTEFHUykgJChX
S19DT09SRElOQVRPUl9MREZMQUdTKTsKK1dLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1Mg
PSAkKFdLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1NfJChXS19QTEFURk9STV9OQU1FKSk7
CitXS19JTlNUQUxMX0NPT1JESU5BVElPTl9MREZMQUdTX2lwaG9uZW9zID0gLWZyYW1ld29yayBJ
bnN0YWxsQ29vcmRpbmF0aW9uOworV0tfSU5TVEFMTF9DT09SRElOQVRJT05fTERGTEFHU19pcGhv
bmVzaW11bGF0b3IgPSAkKFdLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1NfaXBob25lb3Mp
CisKK0ZSQU1FV09SS19BTkRfTElCUkFSWV9MREZMQUdTID0gLWxvYmpjIC1mcmFtZXdvcmsgQ0ZO
ZXR3b3JrIC1mcmFtZXdvcmsgQ29yZUF1ZGlvIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24gLWZy
YW1ld29yayBDb3JlR3JhcGhpY3MgLWZyYW1ld29yayBDb3JlVGV4dCAtZnJhbWV3b3JrIEZvdW5k
YXRpb24gLWZyYW1ld29yayBJbWFnZUlPIC1mcmFtZXdvcmsgSU9LaXQgLWZyYW1ld29yayBJT1N1
cmZhY2UgLWZyYW1ld29yayBXZWJLaXRMZWdhY3kgLWxuZXR3b3JrIC1mcmFtZXdvcmsgTWV0YWwg
JChXS19BQ0NFU1NJQklMSVRZX0xERkxBR1MpICQoV0tfQVBQS0lUX0xERkxBR1MpICQoV0tfQkFD
S0JPQVJEX1NFUlZJQ0VTX0xERkxBR1MpICQoV0tfUlVOTklOR0JPQVJEX1NFUlZJQ0VTX0xERkxB
R1MpICQoV0tfQVVUSEtJVF9MREZMQUdTKSAkKFdLX0NBUkJPTl9MREZMQUdTKSAkKFdLX0NPTlRB
Q1RTX0xERkxBR1MpICQoV0tfQ09SRV9QUkVESUNUSU9OX0xERkxBR1MpICQoV0tfQ09SRV9TRVJW
SUNFU19MREZMQUdTKSAkKFdLX0dSQVBISUNTX1NFUlZJQ0VTX0xERkxBR1MpICQoV0tfTElCTkVU
V09SS0VYVEVOU0lPTl9MREZMQUdTKSAkKFdLX0xJQlNBTkRCT1hfTERGTEFHUykgJChXS19MSUJX
RUJSVENfTERGTEFHUykgJChXS19NT0JJTEVfQ09SRV9TRVJWSUNFU19MREZMQUdTKSAkKFdLX01P
QklMRV9HRVNUQUxUX0xERkxBR1MpICQoV0tfUERGS0lUX0xERkxBR1MpICQoV0tfUFJPVE9UWVBF
X1RPT0xTX0xERkxBR1MpICQoV0tfU0FGRV9CUk9XU0lOR19MREZMQUdTKSAkKFdLX1NFQ1VSSVRZ
X0lOVEVSRkFDRV9MREZMQUdTKSAkKFdLX1VJS0lUX0xERkxBR1MpICQoV0tfVU5JRk9STV9UWVBF
X0lERU5USUZJRVJTX0xERkxBR1MpICQoV0tfVVJMX0ZPUk1BVFRJTkdfTERGTEFHUykgJChXS19X
RUJJTlNQRUNUT1JVSV9MREZMQUdTKSAkKFdLX0NPT1JESU5BVE9SX0xERkxBR1MpICQoV0tfSU5T
VEFMTF9DT09SRElOQVRJT05fTERGTEFHUyk7CiAKIC8vIFByZXZlbnQgQysrIHN0YW5kYXJkIGxp
YnJhcnkgYmFzaWNfc3RyaW5nc3RyZWFtLCBvcGVyYXRvciBuZXcsIGRlbGV0ZSBhbmQgdGhlaXIg
cmVsYXRlZCBleGNlcHRpb24gdHlwZXMgZnJvbSBiZWluZyBleHBvcnRlZCBhcyB3ZWFrIHN5bWJv
bHMuCiBVTkVYUE9SVEVEX1NZTUJPTF9MREZMQUdTID0gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAt
V2wsX19aVElTdDliYWRfYWxsb2MgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVElTdDll
eGNlcHRpb24gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVFNTdDliYWRfYWxsb2MgLVds
LC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVFNTdDlleGNlcHRpb24gLVdsLC11bmV4cG9ydGVk
X3N5bWJvbCAtV2wsX19aZGxQdlNfIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWm53bVB2
IC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWm53bSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9s
IC1XbCxfX1pUVk5TdDNfXzExN2JhZF9mdW5jdGlvbl9jYWxsRSAtV2wsLXVuZXhwb3J0ZWRfc3lt
Ym9sIC1XbCxfX1pUQ05TdDNfXzExOGJhc2ljX3N0cmluZ3N0cmVhbUljTlNfMTFjaGFyX3RyYWl0
c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFMF9OU18xM2Jhc2ljX2lzdHJlYW1JY1MyX0VFIC1XbCwt
dW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNO
U18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUwX05TXzE0YmFzaWNfaW9zdHJl
YW1JY1MyX0VFIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWlRDTlN0M19fMTE4YmFzaWNf
c3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUxNl9O
U18xM2Jhc2ljX29zdHJlYW1JY1MyX0VFIC1XbCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWlRU
TlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxv
Y2F0b3JJY0VFRUUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVFZOU3QzX18xMTViYXNp
Y19zdHJpbmdidWZJY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRSAtV2ws
LXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUVk5TdDNfXzExOGJhc2ljX3N0cmluZ3N0cmVhbUlj
TlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFIC1XbCwtdW5leHBvcnRlZF9z
eW1ib2wgLVdsLF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJh
aXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUU4X05TXzEzYmFzaWNfb3N0cmVhbUljUzJfRUU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0
d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAppbmRleCA0ODZj
YjViM2RmNjcuLmYwMGEyMTkzYWEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9Ob3RpZmljYXRpb25zL05ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlm
aWNhdGlvbk1hbmFnZXIuY3BwCkBAIC03MCw2ICs3MCw3IEBAIHZvaWQgTmV0d29ya05vdGlmaWNh
dGlvbk1hbmFnZXI6Om1heWJlU2VuZENvbm5lY3Rpb25Db25maWd1cmF0aW9uKCkgY29uc3QKIAog
dm9pZCBOZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlcjo6cmVxdWVzdFN5c3RlbU5vdGlmaWNhdGlv
blBlcm1pc3Npb24oY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgTE9HKFB1c2gsICJOZXR3
b3JrIHByb2Nlc3MgcGFzc2luZyBwZXJtaXNzaW9uIHJlcXVlc3QgdG8gd2VicHVzaGQiKTsKICAg
ICBzZW5kTWVzc2FnZVdpdGhSZXBseTxXZWJQdXNoRDo6TWVzc2FnZVR5cGU6OlJlcXVlc3RTeXN0
ZW1Ob3RpZmljYXRpb25QZXJtaXNzaW9uPihXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgb3Jp
Z2luU3RyaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvVUlEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdh
dGUubW0KaW5kZXggODQ5ZDgxMTM0ZmY4Li43NjU5YjFjOWZmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHZvaWQg
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0KFdlYktpdDo6CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxl
ckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+
ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CisKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
cmVzdWx0KTsKICAgICB9KS5nZXQoKV07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxZWM4YjJiODVjZTEuLjljODhlZGY4ODVkNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMDU5LDYgKzEwNTksMTIgQEAKIAkJNTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxREQ5RjI2MTYzNjdEQTIwMDE1NzhF
OSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi87
IH07CiAJCTUxREQ5RjI5MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUREOUYyNzE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oICovOyB9OwogCQk1MUUzNTFDQjE4MEYyQ0NDMDBFNTNCRTkgLyog
SURCVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUUzNTFDOTE4MEYyQ0NDMDBFNTNCRTkgLyogSURCVXRpbGl0aWVzLmggKi87IH07CisJ
CTUxRTkwNDk1MjdCQ0IzQzkwMDkyOUU3RSAvKiBJQ0FwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFOTA0OTMyN0JDQjNDNjAwOTI5RTdF
IC8qIElDQXBwQnVuZGxlLmggKi87IH07CisJCTUxRTkwNDk3MjdCQ0IzRDkwMDkyOUU3RSAvKiBJ
Q0FwcEJ1bmRsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxRTkwNDk0MjdCQ0IzQzgwMDkyOUU3RSAvKiBJQ0FwcEJ1bmRsZS5tbSAqLzsgfTsKKwkJ
NTFFOTA0OUEyN0JDQjlENDAwOTI5RTdFIC8qIExhdW5jaFNlcnZpY2VzU1BJLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUU5MDQ5ODI3QkNCOUQxMDA5
MjlFN0UgLyogTGF1bmNoU2VydmljZXNTUEkuaCAqLzsgfTsKKwkJNTFFOTA0OUIyN0JDQjlENDAw
OTI5RTdFIC8qIExhdW5jaFNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUU5MDQ5ODI3QkNCOUQxMDA5MjlFN0UgLyogTGF1bmNoU2Vy
dmljZXNTUEkuaCAqLzsgfTsKKwkJNTFFOTA0OUMyN0JDQjlENDAwOTI5RTdFIC8qIEluc3RhbGxD
b29yZGluYXRpb25TUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRTkwNDk5MjdCQ0I5RDMwMDkyOUU3RSAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJ
LmggKi87IH07CisJCTUxRTkwNDlEMjdCQ0I5RDQwMDkyOUU3RSAvKiBJbnN0YWxsQ29vcmRpbmF0
aW9uU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUU5MDQ5OTI3QkNCOUQzMDA5MjlFN0UgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovOyB9
OwogCQk1MUVGQzFDRjE1MjRFNjI1MDBDOUE5MzggLyogV0tCdW5kbGVET01XaW5kb3dFeHRlbnNp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkEy
RDU0MTUyMTExODYwMEMxQkEwQiAvKiBXS0J1bmRsZURPTVdpbmRvd0V4dGVuc2lvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxRjA2MEUwMTY1
NDMxN0YwMEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwNjBERTE2NTQzMTc1MDBGMzI4
MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlcy5oICovOyB9OwogCQk1MUYwNjBFMTE2NTQz
MTg1MDBGMzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMDYwREQxNjU0MzE3
NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsK
QEAgLTQ1OTMsNiArNDU5OSwxMCBAQAogCQk1MUUzNTFDOTE4MEYyQ0NDMDBFNTNCRTkgLyogSURC
VXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlV0aWxpdGll
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUzOTkwNTFENkY1NEM1MDA5Qzg4
MzEgLyogVUlHYW1lcGFkUHJvdmlkZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFVJR2FtZXBhZFByb3ZpZGVyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxRThCNjhEMUU3MTI4NzMwMDFCNzEzMiAvKiBXZWJVUkxTY2hlbWVU
YXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlVSTFNjaGVt
ZVRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUU5MDQ5MzI3QkNCM0M2
MDA5MjlFN0UgLyogSUNBcHBCdW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSUNBcHBCdW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFFOTA0OTQy
N0JDQjNDODAwOTI5RTdFIC8qIElDQXBwQnVuZGxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gSUNBcHBCdW5kbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxRTkwNDk4MjdCQ0I5RDEwMDkyOUU3RSAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXVuY2hTZXJ2aWNlc1NQSS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUU5MDQ5OTI3QkNCOUQzMDA5MjlFN0UgLyogSW5z
dGFsbENvb3JkaW5hdGlvblNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bnN0YWxsQ29vcmRpbmF0aW9uU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
RTk0OTk2MUQ3NjFDQzcwMEVDOUVCOSAvKiBVSUdhbWVwYWRQcm92aWRlcklPUy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFVJR2FtZXBhZFByb3ZpZGVySU9TLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUYwNjBERDE2NTQzMTc1MDBGMzI4MUIg
LyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNv
dXJjZXMvV2ViS2l0L1dlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTFGMDYwREQxNjU0MzE3NTAwRjMyODFD
IC8qIExpYldlYlJUQ05ldHdvcmtNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gTGliV2ViUlRDTmV0d29ya01lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVkU291
cmNlcy9XZWJLaXQvTGliV2ViUlRDTmV0d29ya01lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRy
ZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC0xMDIwNiw2ICsxMDIxNiwxMCBAQAogCQkJ
CUVCQThEM0FDMjdBNUUzM0UwMENCNzkwMCAvKiBBcHBsZVB1c2hTZXJ2aWNlQ29ubmVjdGlvbi5t
bSAqLywKIAkJCQlFQjBEMzEyRTI3NUFFMTMzMDA4NjNEOEYgLyogY29tLmFwcGxlLndlYmtpdC53
ZWJwdXNoZC5pb3MucGxpc3QgKi8sCiAJCQkJRUIwRDMxMkQyNzVBRTEzMzAwODYzRDhGIC8qIGNv
bS5hcHBsZS53ZWJraXQud2VicHVzaGQubWFjLnBsaXN0ICovLAorCQkJCTUxRTkwNDkzMjdCQ0Iz
QzYwMDkyOUU3RSAvKiBJQ0FwcEJ1bmRsZS5oICovLAorCQkJCTUxRTkwNDk0MjdCQ0IzQzgwMDky
OUU3RSAvKiBJQ0FwcEJ1bmRsZS5tbSAqLywKKwkJCQk1MUU5MDQ5OTI3QkNCOUQzMDA5MjlFN0Ug
LyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oICovLAorCQkJCTUxRTkwNDk4MjdCQ0I5RDEwMDky
OUU3RSAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICovLAogCQkJCTUxRjdCQjc1Mjc0NDk4QkIwMEM0
NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5oICovLAogCQkJCTUxRjdCQjc0Mjc0NDk4
QkEwMEM0NUE3MiAvKiBNb2NrQXBwQnVuZGxlRm9yVGVzdGluZy5tbSAqLywKIAkJCQk1MTYwRTk1
QzI3NEMyQTAzMDA1NjczODggLyogTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5LmggKi8sCkBAIC0xMjgw
OCw2ICsxMjgyMiw5IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk1MUU5MDQ5QjI3QkNC
OUQ0MDA5MjlFN0UgLyogTGF1bmNoU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
RTkwNDk1MjdCQ0IzQzkwMDkyOUU3RSAvKiBJQ0FwcEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTFFOTA0OUQyN0JDQjlENDAwOTI5RTdFIC8qIEluc3RhbGxDb29yZGluYXRpb25TUEkuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMTMzNDIsNiArMTMzNTksNyBAQAogCQkJCTM3NTRENTQ1MUIzQTI5
RkQwMDNBNEM3RiAvKiBOU0ludm9jYXRpb25TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxREQ3
MkFCMjY4MjE2NzMwMEE5MEM3MSAvKiBOV1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QUNB
MTMxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTFFOTA0OUEyN0JDQjlENDAwOTI5RTdFIC8qIExhdW5jaFNlcnZpY2VzU1BJLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzA4NURDQTI2RTI5Nzc1MDAwRUM2QTcgLyogT3JpZ2luU3RvcmFnZU1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0RUI0QUZEMjY5Q0Q3RjMwMEQyOTdBRSAvKiBP
U1N0YXRlU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEg
LyogUGFnZUJhbm5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzU1NCw2ICsxMzU3Miw3IEBACiAJ
CQkJMUFGMDVEODcxNDY4ODM0ODAwOEIxRTgxIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0ODU3MEEzMjY0NEJFQzUwMEMwNUY3MSAv
KiBUaW1lb3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRjgzMzY4NjFGQTEzOURGMDBDNkUwODAg
LyogVG91Y2hCYXJNZW51RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFFOTA0OUMyN0JDQjlE
NDAwOTI5RTdFIC8qIEluc3RhbGxDb29yZGluYXRpb25TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQ2QkVCNkUzMjJGQkIyMUEwMDI2OTg2NyAvKiBUcmFuc2llbnRMb2NhbFN0b3JhZ2VOYW1lc3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RUIyRTNBMjFFMTk4M0UwMEI4OUNERiAvKiBVMmZB
dXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUZFNDM2NjE4QjZDMDgxMDA5QzdB
NDggLyogVUlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNTY0MCw2ICsxNTY1OSw3IEBA
CiAJCQkJMDdFMTlFRkIyM0Q0MDFGMTAwOTRGRkI0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90
ZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxREYyOUU2NDI1N0YzN0Ez
MDAzQzI4QUYgLyogTWVkaWFTb3VyY2VQcml2YXRlUmVtb3RlTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTlCNDc5MDkxMjUzMTU2MzIwMEVDMTFBQiAvKiBNZXNzYWdlQXJn
dW1lbnREZXNjcmlwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFFOTA0OTcyN0JDQjNE
OTAwOTI5RTdFIC8qIElDQXBwQnVuZGxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3QjVGODQy
NzVFOTdCNjAwMkRDMjJEIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE3QjVGODYyNzVFOTdCNjAwMkRDMjJEIC8qIE1vY2tBcHBCdW5kbGVSZWdpc3Ry
eS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUVCQThEM0I2MjdBNUUzM0YwMENCNzkwMCAvKiBNb2Nr
UHVzaFNlcnZpY2VDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0gYi9Tb3VyY2UvV2ViS2l0L3dl
YnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0KaW5kZXggM2NkM2RiMDdmNmY3Li4wYzUzZDM1NjA0
ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0FwcEJ1bmRsZVJlcXVlc3QubW0KQEAgLTI2
LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiQXBwQnVuZGxlUmVxdWVz
dC5oIgogCisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgogI2ltcG9ydCAiTW9ja0FwcEJ1bmRsZUZv
clRlc3RpbmcuaCIKICNpbXBvcnQgIldlYlB1c2hEYWVtb24uaCIKICNpbXBvcnQgPEphdmFTY3Jp
cHRDb3JlL0NvbnNvbGVUeXBlcy5oPgpAQCAtNTQsOCArNTUsMTIgQEAgdm9pZCBBcHBCdW5kbGVS
ZXF1ZXN0OjpzdGFydCgpCiAgICAgaWYgKG1fY29ubmVjdGlvbi0+dXNlTW9ja0J1bmRsZXNGb3JU
ZXN0aW5nKCkpCiAgICAgICAgIG1fYXBwQnVuZGxlID0gTW9ja0FwcEJ1bmRsZUZvclRlc3Rpbmc6
OmNyZWF0ZShtX29yaWdpblN0cmluZywgbV9jb25uZWN0aW9uLT5ob3N0QXBwQ29kZVNpZ25pbmdJ
ZGVudGlmaWVyKCksICp0aGlzKTsKICAgICBlbHNlIHsKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09S
RElOQVRJT05fQlVORExFUykKKyAgICAgICAgbV9hcHBCdW5kbGUgPSBJQ0FwcEJ1bmRsZTo6Y3Jl
YXRlKCptX2Nvbm5lY3Rpb24sIG1fb3JpZ2luU3RyaW5nLCAqdGhpcyk7CisjZWxzZQogICAgICAg
ICBtX2Nvbm5lY3Rpb24tPmJyb2FkY2FzdERlYnVnTWVzc2FnZSgiQ2xpZW50IGlzIHRyeWluZyB0
byBpbml0aWF0ZSBhcHAgYnVuZGxlIHJlcXVlc3Qgd2l0aG91dCBoYXZpbmcgY29uZmlndXJlZCBt
b2NrIGFwcCBidW5kbGVzIGZvciB0ZXN0aW5nLiBBYm91dCB0byBjcmFzaC4uLiIpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCiAgICAgfQogCiAgICAgc3Rh
cnRJbnRlcm5hbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1
bmRsZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNGU1YmQ2NmJhN2I4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5oCkBAIC0wLDAgKzEsNzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRMRVMp
CisKKyNpbXBvcnQgIkluc3RhbGxDb29yZGluYXRpb25TUEkuaCIKKyNpbXBvcnQgIlB1c2hBcHBC
dW5kbGUuaCIKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRy
Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworQGNsYXNzIE5TRXJyb3I7CitA
Y2xhc3MgX1dLQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXI7CisKK25hbWVzcGFjZSBXZWJQ
dXNoRCB7CisKK2NsYXNzIENsaWVudENvbm5lY3Rpb247CisKK2NsYXNzIElDQXBwQnVuZGxlIDog
cHVibGljIFB1c2hBcHBCdW5kbGUsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJQ0FwcEJ1bmRsZT4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
SUNBcHBCdW5kbGU+IGNyZWF0ZShDbGllbnRDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBjb25zdCBT
dHJpbmcmIG9yaWdpblN0cmluZywgUHVzaEFwcEJ1bmRsZUNsaWVudCYgY2xpZW50KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSUNBcHBCdW5kbGUoY29ubmVjdGlvbiwgb3Jp
Z2luU3RyaW5nLCBjbGllbnQpKTsKKyAgICB9CisKKyAgICB2b2lkIGJ1bmRsZUNyZWF0aW9uU3Vj
Y2VlZGVkKCk7CisgICAgdm9pZCBidW5kbGVDcmVhdGlvbkZhaWxlZChOU0Vycm9yICopOworCisg
ICAgc3RhdGljIHZvaWQgZ2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKENsaWVudENvbm5lY3Rp
b24mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik+JiYpOwor
Citwcml2YXRlOgorICAgIElDQXBwQnVuZGxlKENsaWVudENvbm5lY3Rpb24mLCBjb25zdCBTdHJp
bmcmIG9yaWdpblN0cmluZywgUHVzaEFwcEJ1bmRsZUNsaWVudCYpOworCisgICAgY29uc3QgU3Ry
aW5nJiBnZXRCdW5kbGVJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGNoZWNrRm9yRXhpc3RpbmdC
dW5kbGUoKSBmaW5hbDsKKyAgICB2b2lkIGRlbGV0ZUV4aXN0aW5nQnVuZGxlKCkgZmluYWw7Cisg
ICAgdm9pZCBjcmVhdGVCdW5kbGUoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKwor
ICAgIHZvaWQgZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVXaXRoRXJyb3IoTlNFcnJvciAqKTsKKwor
ICAgIFJldGFpblB0cjxJWFJlc3RvcmluZ0RlbW90ZWRBcHBJbnN0YWxsQ29vcmRpbmF0b3I+IG1f
YXBwSW5zdGFsbENvb3JkaW5hdG9yOworICAgIFJldGFpblB0cjxfV0tBcHBJbnN0YWxsQ29vcmRp
bmF0b3JPYnNlcnZlcj4gbV9hcHBJbnN0YWxsT2JzZXJ2ZXI7CisKKyAgICBTdHJpbmcgbV9vcmln
aW5TdHJpbmc7CisgICAgUmVmUHRyPENsaWVudENvbm5lY3Rpb24+IG1fY2xpZW50Q29ubmVjdGlv
bjsKKworICAgIFN0cmluZyBtX2J1bmRsZUlkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJQdXNoRAorCisjZW5kaWYgLy8gRU5BQkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JVTkRM
RVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lDQXBwQnVuZGxlLm1tIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAuLmU1MjVmNDdmYWM1NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBCdW5kbGUubW0KQEAgLTAsMCArMSwzMjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgiCisK
KyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykKKworI2ltcG9ydCAiQXBw
QnVuZGxlUmVxdWVzdC5oIgorI2ltcG9ydCAiTGF1bmNoU2VydmljZXNTUEkuaCIKKyNpbXBvcnQg
IlB1c2hDbGllbnRDb25uZWN0aW9uLmgiCisjaW1wb3J0ICJXZWJQdXNoRGFlbW9uLmgiCisjaW1w
b3J0IDxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4KKyNpbXBvcnQgPHBhbC9jcnlwdG8v
Q3J5cHRvRGlnZXN0Lmg+CisjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvQmFzZTY0Lmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK05T
U3RyaW5nICpwdXNoQnVuZGxlQXBwTWFuYWdlbWVudERvbWFpbiA9IEAiY29tLmFwcGxlLldlYktp
dC5QdXNoQnVuZGxlcyI7CisKK0BpbnRlcmZhY2UgX1dLQXBwSW5zdGFsbENvb3JkaW5hdG9yT2Jz
ZXJ2ZXIgOiBOU09iamVjdCA8SVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcj4KKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aElDQXBwQnVuZGxlOihXZWJQdXNoRDo6SUNBcHBCdW5kbGUmKWlj
QXBwQnVuZGxlOworQHByb3BlcnR5IFdlYWtQdHI8V2ViUHVzaEQ6OklDQXBwQnVuZGxlPiBidW5k
bGU7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBfV0tBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNl
cnZlcgorCistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhJQ0FwcEJ1bmRsZTooV2ViUHVzaEQ6OklD
QXBwQnVuZGxlJilpY0FwcEJ1bmRsZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0p
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgX2J1bmRsZSA9IGljQXBwQnVuZGxlOworCisg
ICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nl
c3NmdWxseToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZv
ckFwcGxpY2F0aW9uUmVjb3JkOihudWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopYXBwUmVj
b3JkCit7CisgICAgY2FsbE9uTWFpblJ1bkxvb3AoW3NlbGYsIHByb3RlY3RlZFNlbGYgPSBSZXRh
aW5QdHI8aWQ+KHNlbGYpXSB7CisgICAgICAgIGlmIChfYnVuZGxlKQorICAgICAgICAgICAgX2J1
bmRsZS0+YnVuZGxlQ3JlYXRpb25TdWNjZWVkZWQoKTsKKyAgICB9KTsKK30KKworLSAodm9pZClj
b29yZGluYXRvcjoobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9y
IGNhbmNlbGVkV2l0aFJlYXNvbjoobm9ubnVsbCBOU0Vycm9yICopY2FuY2VsUmVhc29uIGNsaWVu
dDooSVhDbGllbnRJZGVudGlmaWVyKWNsaWVudAoreworICAgIGNhbGxPbk1haW5SdW5Mb29wKFtz
ZWxmLCBwcm90ZWN0ZWRTZWxmID0gUmV0YWluUHRyPGlkPihzZWxmKSwgcHJvdGVjdGVkQ2FuY2Vs
UmVhc29uID0gUmV0YWluUHRyPE5TRXJyb3I+KGNhbmNlbFJlYXNvbildIHsKKyAgICAgICAgaWYg
KF9idW5kbGUpCisgICAgICAgICAgICBfYnVuZGxlLT5idW5kbGVDcmVhdGlvbkZhaWxlZChwcm90
ZWN0ZWRDYW5jZWxSZWFzb24uZ2V0KCkpOworICAgIH0pOworfQorCitAZW5kCisKK3VzaW5nIFBB
TDo6Q3J5cHRvRGlnZXN0OworCituYW1lc3BhY2UgV2ViUHVzaEQgeworCitzdGF0aWMgdm9pZCBi
cm9hZGNhc3REZWJ1Z01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIERhZW1v
bjo6c2luZ2xldG9uKCkuYnJvYWRjYXN0RGVidWdNZXNzYWdlKEpTQzo6TWVzc2FnZUxldmVsOjpJ
bmZvLCBtYWtlU3RyaW5nKCJJQ0FwcEJ1bmRsZTogIiwgbWVzc2FnZSkpOworfQorCitJQ0FwcEJ1
bmRsZTo6SUNBcHBCdW5kbGUoQ2xpZW50Q29ubmVjdGlvbiYgY2xpZW50Q29ubmVjdGlvbiwgY29u
c3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcsIFB1c2hBcHBCdW5kbGVDbGllbnQmIGNsaWVudCkKKyAg
ICA6IFB1c2hBcHBCdW5kbGUoY2xpZW50KQorICAgICwgbV9vcmlnaW5TdHJpbmcob3JpZ2luU3Ry
aW5nKQorICAgICwgbV9jbGllbnRDb25uZWN0aW9uKCZjbGllbnRDb25uZWN0aW9uKQoreworfQor
CitzdGF0aWMgU3RyaW5nIGVuY29kZU9yaWdpblN0cmluZ0ZvckJ1bmRsZUlkZW50aWZpZXIoY29u
c3QgU3RyaW5nJiBpbnB1dCkKK3sKKyAgICAvLyBCdW5kbGUgaWRlbnRpZmllcnMgaGF2ZSBleGFj
dGx5IDY0IHZhbGlkIGNoYXJhY3RlcnMuCisgICAgLy8gYS16LCBBLVosIDAtOSwgJy0nLCBhbmQg
Jy4nCisgICAgLy8gQmFzZTY0IFVSTCBlbmNvZGluZyB1c2VzICctJyBhbmQgJ18nIGZvciB0aGUg
ZmluYWwgMiBjaGFyYWN0ZXJzCisgICAgLy8gRm9yIG91ciBidW5kbGUgaWRlbnRpZmllciwgd2Un
bGwgQmFzZTY0IFVSTCBlbmNvZGUgdGhlbiByZXBsYWNlICdfJyB3aXRoICcuJworICAgIC8vIFdl
IGFsc28gZ2V0IHJpZCBvZiB0aGUgdHlwaWNhbCAnPScgcGFkZGluZyBmb3IgYmFzZTY0IGVuY29k
aW5nLgorCisgICAgYXV0byBiYXNlNjQgPSBiYXNlNjRVUkxFbmNvZGVUb1ZlY3RvcihpbnB1dC51
dGY4KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzZTY0LnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChiYXNlNjRbaV0gPT0gJ18nKQorICAgICAgICAgICAgYmFzZTY0W2ldID0g
Jy4nOworICAgIH0KKworICAgIHNpemVfdCBudW1iZXJFcXVhbFNpZ25zID0gMDsKKyAgICBpZiAo
YmFzZTY0LnNpemUoKSA+PSAxICYmIGJhc2U2NC5sYXN0KCkgPT0gJz0nKQorICAgICAgICArK251
bWJlckVxdWFsU2lnbnM7CisgICAgaWYgKGJhc2U2NC5zaXplKCkgPj0gMiAmJiBiYXNlNjRbYmFz
ZTY0LnNpemUoKSAtIDJdID09ICc9JykKKyAgICAgICAgKytudW1iZXJFcXVhbFNpZ25zOworCisg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZTY0LmRhdGEoKSwgYmFzZTY0LnNpemUoKSAt
IG51bWJlckVxdWFsU2lnbnMpOworfQorCitzdGF0aWMgU3RyaW5nIG9yaWdpblN0cmluZ0Zyb21F
bmNvZGVkQnVuZGxlSWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIGF1dG8g
dXRmOCA9IGlucHV0LnV0ZjgoKTsKKyAgICBhdXRvIGJ1ZmZlciA9IHV0ZjgubXV0YWJsZURhdGEo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHV0ZjgubGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICBpZiAoYnVmZmVyW2ldID09ICcuJykKKyAgICAgICAgICAgIGJ1ZmZlcltpXSA9ICdfJzsK
KyAgICB9CisKKyAgICBhdXRvIGRlY29kZWQgPSBiYXNlNjRVUkxEZWNvZGUoYnVmZmVyLCB1dGY4
Lmxlbmd0aCgpKTsKKyAgICBpZiAoIWRlY29kZWQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkZWNvZGVkLT5kYXRhKCksIGRlY29kZWQtPnNpemUo
KSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgYnVuZGxlUHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIo
Y29uc3QgU3RyaW5nJiBob3N0QXBwSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGFwcERpZ2VzdCA9
IFBBTDo6Q3J5cHRvRGlnZXN0OjpjcmVhdGUoQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG06OlNIQV8y
NTYpOworICAgIGF1dG8gdXRmOElkZW50aWZpZXIgPSBob3N0QXBwSWRlbnRpZmllci51dGY4KCk7
CisgICAgYXBwRGlnZXN0LT5hZGRCeXRlcyh1dGY4SWRlbnRpZmllci5kYXRhKCksIHV0ZjhJZGVu
dGlmaWVyLmxlbmd0aCgpKTsKKworICAgIHJldHVybiBtYWtlU3RyaW5nKCJjb20uYXBwbGUuV2Vi
S2l0LlB1c2hCdW5kbGUuIiwgYXBwRGlnZXN0LT50b0hleFN0cmluZygpLCAiLiIpOworfQorCitz
dGF0aWMgU3RyaW5nIGJ1bmRsZU5hbWVGb3JPcmlnaW5TdHJpbmdBbmRIb3N0QXBwSWRlbnRpZmll
cihjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgY29uc3QgU3RyaW5nJiBob3N0QXBwSWRlbnRp
ZmllcikKK3sKKyAgICAvLyBGSVhNRTogT25jZSB3ZSBjYW4gc3RvcmUgdGhlIG9yaWdpbiBzdHJp
bmcgd2l0aGluIHRoZSBhcHAgYnVuZGxlLCBoYXNoIHRoZSBvcmlnaW4gc3RyaW5nIGFzIHdlbGwu
CisgICAgLy8gRm9yIG5vdyB3ZSBiYXNlNjQgZW5jb2RlIGl0IHRvIG1ha2UgYSB2YWxpZCBidW5k
bGUgaWRlbnRpZmllciB0aGF0IGNhcnJpZXMgdGhlIGluZm9ybWF0aW9uLgorICAgIHJldHVybiBt
YWtlU3RyaW5nKGJ1bmRsZVByZWZpeEZvckhvc3RBcHBJZGVudGlmaWVyKGhvc3RBcHBJZGVudGlm
aWVyKSwgZW5jb2RlT3JpZ2luU3RyaW5nRm9yQnVuZGxlSWRlbnRpZmllcihvcmlnaW5TdHJpbmcp
KTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKENs
aWVudENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
VmVjdG9yPFN0cmluZz4mKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBWZWN0b3I8U3Ry
aW5nPiByZXN1bHRzOworCisgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBidW5kbGVJZGVudGlmaWVy
UHJlZml4ID0gKE5TU3RyaW5nICopYnVuZGxlUHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIoY29u
bmVjdGlvbi5ob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCkpOworCisgICAgTFNFbnVtZXJh
dG9yPExTQXBwbGljYXRpb25SZWNvcmQgKj4gKmVudW1lcmF0b3IgPSBbTFNBcHBsaWNhdGlvblJl
Y29yZCBlbnVtZXJhdG9yV2l0aE9wdGlvbnM6TFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9u
c0VudW1lcmF0ZVBsYWNlaG9sZGVyc107CisgICAgZm9yIChMU0FwcGxpY2F0aW9uUmVjb3JkICpy
ZWNvcmQgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XTsgcmVjb3JkOyByZWNvcmQgPSBbZW51bWVy
YXRvciBuZXh0T2JqZWN0XSkgeworICAgICAgICBpZiAoIVtyZWNvcmQubWFuYWdlbWVudERvbWFp
biBpc0VxdWFsVG9TdHJpbmc6cHVzaEJ1bmRsZUFwcE1hbmFnZW1lbnREb21haW5dKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFbcmVjb3JkLmJ1bmRsZUlkZW50aWZpZXIg
aGFzUHJlZml4OmJ1bmRsZUlkZW50aWZpZXJQcmVmaXguZ2V0KCldKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2Ugc3RvcmUgdGhlIG9yaWdpbiBz
dHJpbmcgaW4gdGhlIGJ1bmRsZSBpZGVudGlmaWVyIGJhc2U2NCBlbmNvZGVkCisgICAgICAgIC8v
IE9uY2Ugd2Ugc3RvcmUgaXQgaW4gdGhlIGJ1bmRsZSBpdHNlbGYsIHdlJ2xsIGhhc2ggdGhlIG9y
aWdpbiBzdHJpbmcgaW4gdGhlIGJ1bmRsZSBpZGVudGlmaWVyIGFuZCBleHRyYWN0IGl0IGZyb20g
dGhlIGJ1bmRsZQorCisgICAgICAgIE5TQXJyYXkgKmNvbXBvbmVudHMgPSBbcmVjb3JkLmJ1bmRs
ZUlkZW50aWZpZXIgY29tcG9uZW50c1NlcGFyYXRlZEJ5U3RyaW5nOmJ1bmRsZUlkZW50aWZpZXJQ
cmVmaXguZ2V0KCldOworICAgICAgICBBU1NFUlQoY29tcG9uZW50cy5jb3VudCA+PSAyKTsKKwor
ICAgICAgICBhdXRvIG9yaWdpblN0cmluZyA9IG9yaWdpblN0cmluZ0Zyb21FbmNvZGVkQnVuZGxl
SWRlbnRpZmllcihjb21wb25lbnRzWzFdKTsKKyAgICAgICAgaWYgKG9yaWdpblN0cmluZy5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZXN1bHRzLmFwcGVuZChv
cmlnaW5TdHJpbmcpOworICAgIH0KKyAgICAKKyAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHRz
KTsKK30KKworY29uc3QgU3RyaW5nJiBJQ0FwcEJ1bmRsZTo6Z2V0QnVuZGxlSWRlbnRpZmllcigp
Cit7CisgICAgaWYgKG1fYnVuZGxlSWRlbnRpZmllci5pc0VtcHR5KCkgJiYgbV9jbGllbnRDb25u
ZWN0aW9uKQorICAgICAgICBtX2J1bmRsZUlkZW50aWZpZXIgPSBidW5kbGVOYW1lRm9yT3JpZ2lu
U3RyaW5nQW5kSG9zdEFwcElkZW50aWZpZXIobV9vcmlnaW5TdHJpbmcsIG1fY2xpZW50Q29ubmVj
dGlvbi0+aG9zdEFwcENvZGVTaWduaW5nSWRlbnRpZmllcigpKTsKKworICAgIHJldHVybiBtX2J1
bmRsZUlkZW50aWZpZXI7Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OmNoZWNrRm9yRXhpc3RpbmdC
dW5kbGUoKQoreworICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIFJldGFpblB0cjxMU0Fw
cGxpY2F0aW9uUmVjb3JkPiBhcHBSZWNvcmQgPSBhZG9wdE5TKFtbTFNBcHBsaWNhdGlvblJlY29y
ZCBhbGxvY10gaW5pdFdpdGhCdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWdldEJ1bmRsZUlk
ZW50aWZpZXIoKSBhbGxvd1BsYWNlaG9sZGVyOllFUyBlcnJvcjomZXJyb3JdKTsKKworICAgIGlm
IChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZENoZWNrRm9yRXhpc3RpbmdCdW5kbGUo
KnRoaXMsIGFwcFJlY29yZCA/IFB1c2hBcHBCdW5kbGVFeGlzdHM6OlllcyA6IFB1c2hBcHBCdW5k
bGVFeGlzdHM6Ok5vKTsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6ZGVsZXRlRXhpc3RpbmdCdW5k
bGUoKQoreworICAgIFtJWEFwcEluc3RhbGxDb29yZGluYXRvciB1bmluc3RhbGxBcHBXaXRoQnVu
ZGxlSUQ6KE5TU3RyaW5nICopZ2V0QnVuZGxlSWRlbnRpZmllcigpIHJlcXVlc3RVc2VyQ29uZmly
bWF0aW9uOk5PIGNvbXBsZXRpb246W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9
XSAoTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgY2FsbE9uTWFpblJ1bkxvb3AoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBlcnJvciA9IFJldGFpblB0cjxOU0Vycm9yPihl
cnJvcildIHsKKyAgICAgICAgICAgIGRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKGVy
cm9yLmdldCgpKTsKKyAgICAgICAgfSk7CisgICAgfV07Cit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6
OmRpZERlbGV0ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKE5TRXJyb3IgKmVycm9yKQoreworICAg
IGlmIChlcnJvcikKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkVy
cm9yIGRlbGV0aW5nIGV4aXN0aW5nIGJ1bmRsZTogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlv
bl0pKSk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5kaWREZWxldGVF
eGlzdGluZ0J1bmRsZVdpdGhFcnJvcigqdGhpcywgZXJyb3IpOworfQorCit2b2lkIElDQXBwQnVu
ZGxlOjpzdG9wKCkKK3sKKyAgICBtX2FwcEluc3RhbGxDb29yZGluYXRvci5nZXQoKS5vYnNlcnZl
ciA9IG5pbDsKKyAgICBtX2FwcEluc3RhbGxDb29yZGluYXRvciA9IG5pbDsKKyAgICBtX2FwcElu
c3RhbGxPYnNlcnZlciA9IG5pbDsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6Y3JlYXRlQnVuZGxl
KCkKK3sKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGJ1bmRsZUlkZW50aWZpZXIgPSAoTlNTdHJp
bmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCk7CisKKyAgICAvLyBDYW5jZWwgYW55IHByZXZpb3Vz
IGluc3RhbGwgY29vcmRpbmF0b3IgdGhhdCBtaWdodCd2ZSBiZWVuIGxlZnQgaGFuZ2luZyBpbiBh
IHBhcnRpYWxseSBmaW5pc2hlZCBzdGF0ZQorICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAg
IFtJWEFwcEluc3RhbGxDb29yZGluYXRvciBjYW5jZWxDb29yZGluYXRvckZvckFwcFdpdGhCdW5k
bGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgpIHdpdGhSZWFzb246W05TRXJyb3IgZXJyb3JXaXRo
RG9tYWluOkAiV0tFcnJvckRvbWFpbiIgY29kZToxIHVzZXJJbmZvOm5pbF0gY2xpZW50OklYQ2xp
ZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZXJyb3I6JmVycm9yXTsKKworICAgIEJPT0wgY3JlYXRl
ZCA9IE5POworICAgIGVycm9yID0gbmlsOworICAgIG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yID0g
W0lYUmVzdG9yaW5nRGVtb3RlZEFwcEluc3RhbGxDb29yZGluYXRvciBjb29yZGluYXRvckZvckFw
cFdpdGhCdW5kbGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgpIHdpdGhDbGllbnRJRDpJWENsaWVu
dElkZW50aWZpZXJBcHBsaWVkRm9yIGNyZWF0ZUlmTm90RXhpc3Rpbmc6WUVTIGNyZWF0ZWQ6JmNy
ZWF0ZWQgZXJyb3I6JmVycm9yXTsKKworICAgIGlmICghbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3Ig
fHwgZXJyb3IpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIlVu
YWJsZSB0byBjcmVhdGUgaW5zdGFsbCBjb29yZGluYXRpb3IgZm9yIGFwcCBidW5kbGUgaWRlbnRp
ZmllciAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQoKSkpKTsKKyAgICAgICAgYnVuZGxl
Q3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFjcmVhdGVkKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJF
eGlzdGluZyBpbnN0YWxsIGNvb3JkaW5hdGlvciBmb3IgYXBwIGJ1bmRsZSBpZGVudGlmaWVyICIs
IFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiB3YXMgZm91bmQuIFRoaXMgaXMgdW5l
eHBlY3RlZC4iKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYXBwSW5zdGFsbE9ic2VydmVyID0gYWRvcHROUyhb
W19XS0FwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyIGFsbG9jXSBpbml0V2l0aElDQXBwQnVu
ZGxlOip0aGlzXSk7CisgICAgbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3IuZ2V0KCkub2JzZXJ2ZXIg
PSBtX2FwcEluc3RhbGxPYnNlcnZlci5nZXQoKTsKKworICAgIFJldGFpblB0cjxJWFBsYWNlaG9s
ZGVyPiBwbGFjZWhvbGRlciA9IGFkb3B0TlMoW1tJWFBsYWNlaG9sZGVyIGFsbG9jXSBpbml0QXBw
UGxhY2Vob2xkZXJXaXRoQnVuZGxlTmFtZTooTlNTdHJpbmcgKiltX29yaWdpblN0cmluZyBidW5k
bGVJRDpidW5kbGVJZGVudGlmaWVyLmdldCgpIGluc3RhbGxUeXBlOkxTSW5zdGFsbFR5cGVJbnRl
bnRpb25hbERvd25ncmFkZSBjbGllbnQ6SVhDbGllbnRJZGVudGlmaWVyQXBwbGllZEZvcl0pOwor
CisgICAgUmV0YWluUHRyPElYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzPiBwbGFjZWhvbGRlckF0dHJp
YnV0ZXMgPSBhZG9wdE5TKFtJWFBsYWNlaG9sZGVyQXR0cmlidXRlcyBuZXddKTsKKyAgICBwbGFj
ZWhvbGRlckF0dHJpYnV0ZXMuZ2V0KCkubGF1bmNoUHJvaGliaXRlZCA9IFlFUzsKKworICAgIFtw
bGFjZWhvbGRlciBzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZXM6cGxhY2Vob2xkZXJBdHRyaWJ1dGVz
LmdldCgpIGVycm9yOiZlcnJvcl07CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGJyb2FkY2Fz
dERlYnVnTWVzc2FnZShtYWtlU3RyaW5nKCJVbmFibGUgdG8gc2V0IHBsYWNlaG9sZGVyIGF0dHJp
YnV0ZXMgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQoKSksICIgRXJy
b3I6ICIsIFN0cmluZyhbZXJyb3IgZGVzY3JpcHRpb25dKSkpOworICAgICAgICBidW5kbGVDcmVh
dGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU0RpY3Rp
b25hcnkgKmVudGl0bGVtZW50c0RpY3Rpb25hcnkgPSBAeworICAgICAgICBAImNvbS5hcHBsZS5w
cml2YXRlLnVzZXJub3RpZmljYXRpb25zLmJ1bmRsZS1pZGVudGlmaWVycyI6IGJ1bmRsZUlkZW50
aWZpZXIuZ2V0KCksCisgICAgICAgIEAiY29tLmFwcGxlLnByaXZhdGUudXNlcm5vdGlmaWNhdGlv
bnMubm90aWZpY2F0aW9uLXNpbXVsYXRvciI6IEBZRVMsCisgICAgICAgIEAiY29tLmFwcGxlLmRl
dmVsb3Blci5hcHAtbWFuYWdlbWVudC1kb21haW4iOiBwdXNoQnVuZGxlQXBwTWFuYWdlbWVudERv
bWFpbgorICAgIH07CisgICAgUmV0YWluUHRyPElYUHJvbWlzZWRJbk1lbW9yeURpY3Rpb25hcnk+
IGVudGl0bGVtZW50c1Byb21pc2UgPSBhZG9wdE5TKFtbSVhQcm9taXNlZEluTWVtb3J5RGljdGlv
bmFyeSBhbGxvY10gaW5pdFdpdGhOYW1lOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRW50
aXRsZW1lbnRzIFByb21pc2UgZm9yICVAIiwgYnVuZGxlSWRlbnRpZmllci5nZXQoKV0gY2xpZW50
OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZGljdGlvbmFyeTplbnRpdGxlbWVudHNEaWN0
aW9uYXJ5XSk7CisKKyAgICBpZiAoIWVudGl0bGVtZW50c1Byb21pc2UpIHsKKyAgICAgICAgYnJv
YWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIlVuYWJsZSB0byBjcmVhdGUgcGxhY2Vob2xk
ZXIgZW50aXRsZW1lbnRzIHByb21pc2UgZm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRlbnRp
Zmllci5nZXQoKSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZXJyb3IgPSBuaWw7CisgICAgaWYgKCFbcGxhY2Vo
b2xkZXIgc2V0RW50aXRsZW1lbnRzUHJvbWlzZTplbnRpdGxlbWVudHNQcm9taXNlLmdldCgpIGVy
cm9yOiZlcnJvcl0gfHwgZXJyb3IpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1h
a2VTdHJpbmcoIkZhaWxlZCB0byBzZXQgcGxhY2Vob2xkZXIgZW50aXRsZW1lbnRzIHByb21pc2Ug
Zm9yIGJ1bmRsZSAiLCBTdHJpbmcoYnVuZGxlSWRlbnRpZmllci5nZXQoKSksICIgRXJyb3I6ICIs
IFN0cmluZyhbZXJyb3IgZGVzY3JpcHRpb25dKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZh
aWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBCT09MIHJlc3VsdCA9
IFtwbGFjZWhvbGRlciBzZXRDb25maWd1cmF0aW9uQ29tcGxldGVXaXRoRXJyb3I6JmVycm9yXTsK
KyAgICBpZiAoIXJlc3VsdCB8fCBlcnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3Nh
Z2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCBwbGFjZWhvbGRlciBlbnRpdGxlbWVudHMgcHJv
bWlzZSBjb21wbGV0ZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgp
KSwgIiBFcnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1
bmRsZUNyZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFttX2FwcEluc3RhbGxDb29yZGluYXRvciBzZXRQbGFjZWhvbGRlclByb21pc2U6cGxhY2Vob2xk
ZXIuZ2V0KCkgZXJyb3I6JmVycm9yXTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgYnJvYWRj
YXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIkZhaWxlZCB0byBzZXQgcGxhY2Vob2xkZXIgcHJv
bWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJv
cjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0
aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJldGFpblB0
cjxJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXI+IGRhdGFQcm9taXNlID0gYWRvcHROUyhbW0lY
UHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciBhbGxvY10gaW5pdFdpdGhOYW1lOkAiRW1wdHkgdXNl
ciBkYXRhIHByb21pc2UiIGNsaWVudDpJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yIGRpc2tT
cGFjZU5lZWRlZDowXSk7CisgICAgZGF0YVByb21pc2UuZ2V0KCkucGVyY2VudENvbXBsZXRlID0g
MS4wOworICAgIGRhdGFQcm9taXNlLmdldCgpLmNvbXBsZXRlID0gWUVTOworCisgICAgW21fYXBw
SW5zdGFsbENvb3JkaW5hdG9yIHNldFVzZXJEYXRhUHJvbWlzZTpkYXRhUHJvbWlzZS5nZXQoKSBl
cnJvcjomZXJyb3JdOworICAgIGlmIChlcnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01l
c3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCB1c2VyIGRhdGEgcHJvbWlzZSBmb3IgYnVu
ZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjogIiwgU3RyaW5n
KFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKGVy
cm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6YnVu
ZGxlQ3JlYXRpb25TdWNjZWVkZWQoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9j
bGllbnQtPmRpZENyZWF0ZUFwcEJ1bmRsZSgqdGhpcywgUHVzaEFwcEJ1bmRsZUNyZWF0aW9uUmVz
dWx0OjpTdWNjZXNzKTsKKworfQorCit2b2lkIElDQXBwQnVuZGxlOjpidW5kbGVDcmVhdGlvbkZh
aWxlZChOU0Vycm9yICplcnJvcikKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xp
ZW50LT5kaWRDcmVhdGVBcHBCdW5kbGUoKnRoaXMsIFB1c2hBcHBCdW5kbGVDcmVhdGlvblJlc3Vs
dDo6RmFpbHVyZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYlB1c2hECisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oIGIvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9JbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi42YWZjODZkMjFlNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L3dlYnB1c2hkL0luc3RhbGxDb29yZGluYXRpb25TUEkuaApAQCAtMCwwICsxLDExMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZiBQTEFURk9STShJT1MpCisjaWYgVVNFKEFQUExFX0lOVEVSTkFM
X1NESykKKworI2ltcG9ydCA8SW5zdGFsbENvb3JkaW5hdGlvbi9JWEFwcEluc3RhbGxDb29yZGlu
YXRvci5oPgorI2ltcG9ydCA8SW5zdGFsbENvb3JkaW5hdGlvbi9JbnN0YWxsQ29vcmRpbmF0aW9u
Lmg+CisKKyNlbHNlCisKKyNpbmNsdWRlICJMYXVuY2hTZXJ2aWNlc1NQSS5oIgorCitOU19BU1NV
TUVfTk9OTlVMTF9CRUdJTgorCit0eXBlZGVmIGVudW0gOiBOU1VJbnRlZ2VyIHsKK30gSVhDb29y
ZGluYXRvclByb2dyZXNzUGhhc2U7CisKK3R5cGVkZWYgZW51bSA6IE5TVUludGVnZXIgeworICAg
IElYQXBwSW5zdGFsbENvb3JkaW5hdG9yUGxhY2Vob2xkZXJQcm9taXNlID0gMSwKK30gSVhBcHBJ
bnN0YWxsQ29vcmRpbmF0b3JQcm9taXNlSWRlbnRpZmllcjsKKwordHlwZWRlZiBlbnVtIDogTlNV
SW50ZWdlciB7CisgICAgSVhDbGllbnRJZGVudGlmaWVyQXBwbGllZEZvciA9IDE5LAorfSBJWENs
aWVudElkZW50aWZpZXI7CisKK0BjbGFzcyBMU0FwcGxpY2F0aW9uUmVjb3JkOworQGNsYXNzIElY
QXBwSW5zdGFsbENvb3JkaW5hdG9yOworQGNsYXNzIElYUGxhY2Vob2xkZXI7CitAY2xhc3MgSVhQ
cm9taXNlZE91dE9mQmFuZFRyYW5zZmVyOworCitAcHJvdG9jb2wgSVhBcHBJbnN0YWxsQ29vcmRp
bmF0b3JPYnNlcnZlciA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpY29vcmRpbmF0b3JE
aWRSZWdpc3RlckZvck9ic2VydmF0aW9uOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9y
ICopY29vcmRpbmF0b3I7CistICh2b2lkKWNvb3JkaW5hdG9yU2hvdWxkUHJpb3JpdGl6ZToobm9u
bnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yOworLSAodm9pZCljb29y
ZGluYXRvclNob3VsZFJlc3VtZToobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRvciAqKWNv
b3JkaW5hdG9yOworLSAodm9pZCljb29yZGluYXRvclNob3VsZFBhdXNlOihub25udWxsIElYQXBw
SW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7CistICh2b2lkKWNvb3JkaW5hdG9yOihu
b25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgZGlkVXBkYXRlUHJv
Z3Jlc3M6KGRvdWJsZSlwZXJjZW50Q29tcGxldGUgZm9yUGhhc2U6KElYQ29vcmRpbmF0b3JQcm9n
cmVzc1BoYXNlKXBoYXNlIG92ZXJhbGxQcm9ncmVzczooZG91YmxlKW92ZXJhbGxQcm9ncmVzczsK
Ky0gKHZvaWQpY29vcmRpbmF0b3JEaWRDb21wbGV0ZVN1Y2Nlc3NmdWxseToobm9ubnVsbCBJWEFw
cEluc3RhbGxDb29yZGluYXRvciAqKWNvb3JkaW5hdG9yIGZvckFwcGxpY2F0aW9uUmVjb3JkOihu
dWxsYWJsZSBMU0FwcGxpY2F0aW9uUmVjb3JkICopYXBwUmVjb3JkOworLSAodm9pZCljb29yZGlu
YXRvckRpZEluc3RhbGxQbGFjZWhvbGRlcjoobm9ubnVsbCBJWEFwcEluc3RhbGxDb29yZGluYXRv
ciAqKWNvb3JkaW5hdG9yIGZvckFwcGxpY2F0aW9uUmVjb3JkOihudWxsYWJsZSBMU0FwcGxpY2F0
aW9uUmVjb3JkICopcGxhY2Vob2xkZXJSZWNvcmQ7CistICh2b2lkKWNvb3JkaW5hdG9yOihub25u
dWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgY2FuY2VsZWRXaXRoUmVh
c29uOihub25udWxsIE5TRXJyb3IgKiljYW5jZWxSZWFzb24gY2xpZW50OihJWENsaWVudElkZW50
aWZpZXIpY2xpZW50OworQGVuZAorCit0eXBlZGVmIHZvaWQgKF5JWEFwcEluc3RhbGxDb29yZGlu
YXRvckVycm9yQ29tcGxldGlvbikoTlNFcnJvciAqIF9OdWxsYWJsZSBlcnJvcik7CisKK0BpbnRl
cmZhY2UgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IKKysgKHZvaWQpdW5pbnN0YWxsQXBwV2l0aEJ1
bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlEIHJlcXVlc3RVc2VyQ29uZmlybWF0aW9uOihCT09M
KXJlcXVlc3RVc2VyQ29uZmlybWF0aW9uIGNvbXBsZXRpb246KElYQXBwSW5zdGFsbENvb3JkaW5h
dG9yRXJyb3JDb21wbGV0aW9uKWNvbXBsZXRpb247CisrIChCT09MKWNhbmNlbENvb3JkaW5hdG9y
Rm9yQXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlEIHdpdGhSZWFzb246KE5TRXJy
b3IgKiljYW5jZWxSZWFzb24gY2xpZW50OihJWENsaWVudElkZW50aWZpZXIpY2xpZW50IGVycm9y
OihOU0Vycm9yICoqKW91dF9lcnJvcjsKKysgKGluc3RhbmNldHlwZSljb29yZGluYXRvckZvckFw
cFdpdGhCdW5kbGVJRDooTlNTdHJpbmcgKilidW5kbGVJRCB3aXRoQ2xpZW50SUQ6KElYQ2xpZW50
SWRlbnRpZmllcilpZGVudGl0eSBjcmVhdGVJZk5vdEV4aXN0aW5nOihCT09MKWNyZWF0ZSBjcmVh
dGVkOihCT09MICopb3V0X2NyZWF0ZWQgZXJyb3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworQHBy
b3BlcnR5IChub25hdG9taWMsIG51bGxhYmxlLCB3ZWFrKSBpZDxJWEFwcEluc3RhbGxDb29yZGlu
YXRvck9ic2VydmVyPiBvYnNlcnZlcjsKKy0gKEJPT0wpc2V0UGxhY2Vob2xkZXJQcm9taXNlOihJ
WFBsYWNlaG9sZGVyICopcGxhY2Vob2xkZXJQcm9taXNlIGVycm9yOihOU0Vycm9yICoqKW91dF9l
cnJvcjsKKy0gKEJPT0wpc2V0VXNlckRhdGFQcm9taXNlOihJWFByb21pc2VkT3V0T2ZCYW5kVHJh
bnNmZXIgKil1c2VyRGF0YSBlcnJvcjooTlNFcnJvciAqKilvdXRfZXJyb3I7CitAZW5kCisKK0Bp
bnRlcmZhY2UgSVhSZXN0b3JpbmdEZW1vdGVkQXBwSW5zdGFsbENvb3JkaW5hdG9yIDogSVhBcHBJ
bnN0YWxsQ29vcmRpbmF0b3IKK0BlbmQKKworQGludGVyZmFjZSBJWE93bmVkRGF0YVByb21pc2Ug
OiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIElYUHJvbWlzZWRJbk1lbW9yeURpY3Rpb25h
cnkgOiBJWE93bmVkRGF0YVByb21pc2UKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aE5hbWU6KE5T
U3RyaW5nICopbmFtZSBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmllcilpZGVudGl0eSBkaWN0aW9u
YXJ5OihOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5OworQGVuZAorCitAaW50ZXJmYWNlIElYUGxh
Y2Vob2xkZXJBdHRyaWJ1dGVzIDogTlNPYmplY3QKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09M
IGxhdW5jaFByb2hpYml0ZWQ7CitAZW5kCisKK0BpbnRlcmZhY2UgSVhQbGFjZWhvbGRlciA6IE5T
T2JqZWN0CistIChpbnN0YW5jZXR5cGUpaW5pdEFwcFBsYWNlaG9sZGVyV2l0aEJ1bmRsZU5hbWU6
KE5TU3RyaW5nICopbmFtZSBidW5kbGVJRDooTlNTdHJpbmcgKilidW5kbGVJRCBpbnN0YWxsVHlw
ZTooTFNJbnN0YWxsVHlwZSlpbnN0YWxsVHlwZSBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmllcilp
ZGVudGl0eSBOU19ERVNJR05BVEVEX0lOSVRJQUxJWkVSOworLSAoQk9PTClzZXRQbGFjZWhvbGRl
ckF0dHJpYnV0ZXM6KG5vbm51bGwgSVhQbGFjZWhvbGRlckF0dHJpYnV0ZXMgKilhdHRyaWJ1dGVz
IGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKKy0gKEJPT0wpc2V0RW50aXRsZW1lbnRzUHJv
bWlzZToobm9ubnVsbCBJWE93bmVkRGF0YVByb21pc2UgKillbnRpdGxlbWVudHMgZXJyb3I6KE5T
RXJyb3IgKiBfX2F1dG9yZWxlYXNpbmcgX051bGxhYmxlICogX051bGxhYmxlKW91dF9lcnJvcjsK
Ky0gKEJPT0wpc2V0Q29uZmlndXJhdGlvbkNvbXBsZXRlV2l0aEVycm9yOihOU0Vycm9yICoqKW91
dF9lcnJvcjsKK0BlbmQKKworQGludGVyZmFjZSBJWE9wYXF1ZURhdGFQcm9taXNlIDogTlNPYmpl
Y3QKK0BlbmQKKworQGludGVyZmFjZSBJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXIgOiBJWE9w
YXF1ZURhdGFQcm9taXNlCitAcHJvcGVydHkgKG5vbmF0b21pYykgQk9PTCBjb21wbGV0ZTsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljKSBkb3VibGUgcGVyY2VudENvbXBsZXRlOworLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoTmFtZTooTlNTdHJpbmcgKiluYW1lIGNsaWVudDooSVhDbGllbnRJZGVudGlm
aWVyKWlkZW50aXR5IGRpc2tTcGFjZU5lZWRlZDoodWludDY0X3QpdG90YWxCeXRlczsKK0BlbmQK
KworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEkuaCBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvTGF1
bmNoU2VydmljZXNTUEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjA0ZTczOGE0YTc5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQv
TGF1bmNoU2VydmljZXNTUEkuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIFBM
QVRGT1JNKElPUykKKyNpZiBVU0UoQVBQTEVfSU5URVJOQUxfU0RLKQorCisvLyBUaGlzIHNwYWNl
IGludGVudGlvbmFsbHkgbGVmdCBibGFuaworCisjZWxzZQorCitOU19BU1NVTUVfTk9OTlVMTF9C
RUdJTgorCit0eXBlZGVmIE5TX0VOVU0oTlNVSW50ZWdlciwgTFNJbnN0YWxsVHlwZSkgeworICAg
IExTSW5zdGFsbFR5cGVJbnRlbnRpb25hbERvd25ncmFkZSA9IDgKK307CisKK0BpbnRlcmZhY2Ug
TFNSZWNvcmQgOiBOU09iamVjdAorQGVuZAorCitAaW50ZXJmYWNlIExTQnVuZGxlUmVjb3JkIDog
TFNSZWNvcmQKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIG51bGxhYmxlKSBOU1N0cmluZyAqYnVuZGxl
SWRlbnRpZmllcjsKK0BlbmQKKworQGludGVyZmFjZSBMU0FwcGxpY2F0aW9uUmVjb3JkIDogTFNC
dW5kbGVSZWNvcmQKK0Bwcm9wZXJ0eSAocmVhZG9ubHkpIEJPT0wgcGxhY2Vob2xkZXI7CitAcHJv
cGVydHkgKHJlYWRvbmx5KSBOU1N0cmluZyAqbWFuYWdlbWVudERvbWFpbjsKKworLSAoaW5zdGFu
Y2V0eXBlKWluaXRXaXRoQnVuZGxlSWRlbnRpZmllcjooTlNTdHJpbmcgKilidW5kbGVJZGVudGlm
aWVyIGFsbG93UGxhY2Vob2xkZXI6KEJPT0wpYWxsb3dQbGFjZWhvbGRlciBlcnJvcjooTlNFcnJv
ciAqKilvdXRFcnJvcjsKK0BlbmQKKworQGludGVyZmFjZSBMU0VudW1lcmF0b3I8X19jb3Zhcmlh
bnQgT2JqZWN0VHlwZT4gOiBOU0VudW1lcmF0b3I8T2JqZWN0VHlwZT4KK0BlbmQKKwordHlwZWRl
ZiBOU19PUFRJT05TKHVpbnQ2NF90LCBMU0FwcGxpY2F0aW9uRW51bWVyYXRpb25PcHRpb25zKSB7
CisgICAgTFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9uc0VudW1lcmF0ZVBsYWNlaG9sZGVy
cyA9ICgxIDw8IDYpCit9OworCitAaW50ZXJmYWNlIExTQXBwbGljYXRpb25SZWNvcmQgKEVudW1l
cmF0aW9uKQorKyAoTFNFbnVtZXJhdG9yPExTQXBwbGljYXRpb25SZWNvcmQgKj4gKillbnVtZXJh
dG9yV2l0aE9wdGlvbnM6KExTQXBwbGljYXRpb25FbnVtZXJhdGlvbk9wdGlvbnMpb3B0aW9uczsK
K0BlbmQKKworTlNfQVNTVU1FX05PTk5VTExfRU5ECisKKyNlbmRpZiAvLyBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQorI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9Q
dXNoQXBwQnVuZGxlLmgKaW5kZXggOGE2ZDU3Y2M2ZjViLi5lOTg1ZTMyMTAxNTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogQGNsYXNzIE5TRXJyb3I7CiAKQEAgLTUyLDcgKzUyLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVBcHBCdW5kbGUoUHVzaEFwcEJ1
bmRsZSYsIFB1c2hBcHBCdW5kbGVDcmVhdGlvblJlc3VsdCkgPSAwOwogfTsKIAotY2xhc3MgUHVz
aEFwcEJ1bmRsZSA6IHB1YmxpYyBSZWZDb3VudGVkPFB1c2hBcHBCdW5kbGU+IHsKK2NsYXNzIFB1
c2hBcHBCdW5kbGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UHVzaEFwcEJ1bmRsZT4g
ewogcHVibGljOgogICAgIHZpcnR1YWwgflB1c2hBcHBCdW5kbGUoKTsKICAgICB2b2lkIGRldGFj
aEZyb21DbGllbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVz
aERhZW1vbi5tbSBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2ViUHVzaERhZW1vbi5tbQppbmRl
eCBhZGQ2ZTNkOGFkZmUuLjFkYTA2ODAxMDQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvV2Vi
UHVzaERhZW1vbi5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiRGFlbW9uRW5jb2Rlci5o
IgogI2ltcG9ydCAiRGFlbW9uVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJIYW5kbGVNZXNzYWdlLmgi
CisjaW1wb3J0ICJJQ0FwcEJ1bmRsZS5oIgogI2ltcG9ydCAiTW9ja0FwcEJ1bmRsZVJlZ2lzdHJ5
LmgiCiAKICNpbXBvcnQgPFdlYkNvcmUvUHVzaFBlcm1pc3Npb25TdGF0ZS5oPgpAQCAtNDQxLDgg
KzQ0MiwxMSBAQCB2b2lkIERhZW1vbjo6Z2V0T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9u
UGVybWlzc2lvbnMoQ2xpZW50Q29ubmVjdGlvbiogY29ubgogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHBsYXRmb3JtLXNwZWNpZmljIGltcGxl
bWVudGF0aW9ucyBmb3IgcmVhbCB3b3JsZCBidW5kbGVzIG9uY2UgaW1wbGVtZW50ZWQuCi0gICAg
cmVwbHlTZW5kZXIoeyB9KTsKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExF
UykKKyAgICBJQ0FwcEJ1bmRsZTo6Z2V0T3JpZ2luc1dpdGhSZWdpc3RyYXRpb25zKCpjb25uZWN0
aW9uLCBXVEZNb3ZlKHJlcGx5U2VuZGVyKSk7CisjZWxzZQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKIH0KIAogdm9pZCBEYWVtb246OmRlbGV0ZVB1c2hBbmROb3Rp
ZmljYXRpb25SZWdpc3RyYXRpb24oQ2xpZW50Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgY29uc3Qg
U3RyaW5nJiBvcmlnaW5TdHJpbmcsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5n
Jik+JiYgcmVwbHlTZW5kZXIpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggNGE1OTA5NzdiMjNhLi5jNGRiMWZiYzZiYjAgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAy
Mi0wMi0xNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IGFuIEluc3RhbGxDb29yZGluYXRpb24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5tbToKKwogMjAyMi0wMi0xNSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBIZWFwVHlwZSBhbiBlbnVtIGNsYXNz
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQ
dXNoRGFlbW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQ
dXNoRGFlbW9uLm1tCmluZGV4IGI3YjM0YjZjYWE1NC4uZWNmOTFjZGJjNTMzIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVtb24ubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9u
Lm1tCkBAIC03MDcsNiArNzA3LDEwMCBAQCBURVNUX0YoV2ViUHVzaERUZXN0LCBVbnN1YnNjcmli
ZVRlc3QpCiAgICAgQVNTRVJUX1RSVUUoW29iaiBpc0VxdWFsOmV4cGVjdGVkXSk7CiB9CiAKKyNp
ZiBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExFUykKKyNpZiBVU0UoQVBQTEVfSU5U
RVJOQUxfU0RLKQorc3RhdGljIHZvaWQgZGVsZXRlQWxsUmVnaXN0cmF0aW9uc0ZvckRhdGFTdG9y
ZShXS1dlYnNpdGVEYXRhU3RvcmUgKmRhdGFTdG9yZSkKK3sKKyAgICBfX2Jsb2NrIGJvb2wgb3Jp
Z2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAgIF9fYmxvY2sgUmV0YWluUHRyPE5TU2V0PFdL
U2VjdXJpdHlPcmlnaW4gKj4+IG9yaWdpblNldDsKKyAgICBbZGF0YVN0b3JlIF9nZXRPcmlnaW5z
V2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9uczpeKE5TU2V0PFdLU2VjdXJpdHlPcmln
aW4gKj4gKm9yaWdpbnMpIHsKKyAgICAgICAgb3JpZ2luU2V0ID0gb3JpZ2luczsKKyAgICAgICAg
b3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZvcmlnaW5PcGVyYXRpb25Eb25lKTsKKworICAgIGlmICghW29yaWdpblNldCBj
b3VudF0pCisgICAgICAgIHJldHVybjsKKworICAgIF9fYmxvY2sgc2l6ZV90IGRlbGV0ZWRPcmln
aW5zID0gMDsKKyAgICBvcmlnaW5PcGVyYXRpb25Eb25lID0gZmFsc2U7CisgICAgZm9yIChXS1Nl
Y3VyaXR5T3JpZ2luICpvcmlnaW4gaW4gb3JpZ2luU2V0LmdldCgpKSB7CisgICAgICAgIFtkYXRh
U3RvcmUgX2RlbGV0ZVB1c2hBbmROb3RpZmljYXRpb25SZWdpc3RyYXRpb246b3JpZ2luIGNvbXBs
ZXRpb25IYW5kbGVyOl4oTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxT
RSghIWVycm9yKTsKKyAgICAgICAgICAgIGlmICgrK2RlbGV0ZWRPcmlnaW5zID09IFtvcmlnaW5T
ZXQgY291bnRdKQorICAgICAgICAgICAgICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSB0cnVlOwor
ICAgICAgICB9XTsKKyAgICB9CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZvcmlnaW5P
cGVyYXRpb25Eb25lKTsKKworICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSBmYWxzZTsKKyAgICBb
ZGF0YVN0b3JlIF9nZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9uczpe
KE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4gKm9yaWdpbnMpIHsKKyAgICAgICAgRVhQRUNUX0VR
KFtvcmlnaW5zIGNvdW50XSwgMHUpOworICAgICAgICBvcmlnaW5PcGVyYXRpb25Eb25lID0gdHJ1
ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJm9yaWdpbk9wZXJhdGlv
bkRvbmUpOworCit9CisKK1RFU1QoV2ViUHVzaEQsIEluc3RhbGxDb29yZGluYXRpb25CdW5kbGVz
KQoreworICAgIE5TVVJMICp0ZW1wRGlyZWN0b3J5ID0gc2V0VXBUZXN0V2ViUHVzaEQoKTsKKwor
ICAgIGF1dG8gZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW19XS1dlYnNpdGVEYXRh
U3RvcmVDb25maWd1cmF0aW9uIG5ld10pOworICAgIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0
KCkud2ViUHVzaE1hY2hTZXJ2aWNlTmFtZSA9IEAib3JnLndlYmtpdC53ZWJwdXNodGVzdGRhZW1v
bi5zZXJ2aWNlIjsKKyAgICBhdXRvIGRhdGFTdG9yZSA9IGFkb3B0TlMoW1tXS1dlYnNpdGVEYXRh
U3RvcmUgYWxsb2NdIF9pbml0V2l0aENvbmZpZ3VyYXRpb246ZGF0YVN0b3JlQ29uZmlndXJhdGlv
bi5nZXQoKV0pOworCisgICAgZGVsZXRlQWxsUmVnaXN0cmF0aW9uc0ZvckRhdGFTdG9yZShkYXRh
U3RvcmUuZ2V0KCkpOworCisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmF0aW9uLmdldCgp
LndlYnNpdGVEYXRhU3RvcmUgPSBkYXRhU3RvcmUuZ2V0KCk7CisgICAgW2NvbmZpZ3VyYXRpb24u
Z2V0KCkucHJlZmVyZW5jZXMgX3NldE5vdGlmaWNhdGlvbnNFbmFibGVkOllFU107CisgICAgZm9y
IChfV0tFeHBlcmltZW50YWxGZWF0dXJlICpmZWF0dXJlIGluIFtXS1ByZWZlcmVuY2VzIF9leHBl
cmltZW50YWxGZWF0dXJlc10pIHsKKyAgICAgICAgaWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9T
dHJpbmc6QCJCdWlsdEluTm90aWZpY2F0aW9uc0VuYWJsZWQiXSkKKyAgICAgICAgICAgIFtbY29u
ZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZvckZlYXR1cmU6ZmVhdHVy
ZV07CisgICAgfQorCisgICAgYXV0byBoYW5kbGVyID0gYWRvcHROUyhbW1Rlc3RVUkxTY2hlbWVI
YW5kbGVyIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gc2V0VVJMU2NoZW1lSGFu
ZGxlcjpoYW5kbGVyLmdldCgpIGZvclVSTFNjaGVtZTpAInRlc3RpbmciXTsKKworICAgIFtoYW5k
bGVyIHNldFN0YXJ0VVJMU2NoZW1lVGFza0hhbmRsZXI6XihXS1dlYlZpZXcgKiwgaWQ8V0tVUkxT
Y2hlbWVUYXNrPiB0YXNrKSB7CisgICAgICAgIGF1dG8gcmVzcG9uc2UgPSBhZG9wdE5TKFtbTlNV
UkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGFzay5yZXF1ZXN0LlVSTCBNSU1FVHlwZTpA
InRleHQvaHRtbCIgZXhwZWN0ZWRDb250ZW50TGVuZ3RoOjAgdGV4dEVuY29kaW5nTmFtZTpuaWxd
KTsKKyAgICAgICAgW3Rhc2sgZGlkUmVjZWl2ZVJlc3BvbnNlOnJlc3BvbnNlLmdldCgpXTsKKyAg
ICAgICAgW3Rhc2sgZGlkUmVjZWl2ZURhdGE6W05TRGF0YSBkYXRhV2l0aEJ5dGVzOm1haW5CeXRl
cyBsZW5ndGg6c3RybGVuKG1haW5CeXRlcyldXTsKKyAgICAgICAgW3Rhc2sgZGlkRmluaXNoXTsK
KyAgICB9XTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRp
b246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIGF1dG8gdWlEZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2Vi
VmlldyBzZXRVSURlbGVnYXRlOnVpRGVsZWdhdGUuZ2V0KCldOworCisgICAgW3dlYlZpZXcgbG9h
ZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAInRlc3Rpbmc6Ly9tYWluL2luZGV4Lmh0bWwiXV1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmYWxlcnRSZWNlaXZlZCk7CisKKyAgICBhbGVydFJlY2VpdmVkID0gZmFsc2U7Cisg
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAInRlc3Rpbmc6Ly9zZWNvbmRhcnkvaW5kZXguaHRtbCJdXV07Cisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZhbGVydFJlY2VpdmVkKTsKKworICAgIHN0YXRp
YyBib29sIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSBmYWxzZTsKKyAgICBzdGF0aWMgUmV0YWluUHRy
PE5TU2V0PFdLU2VjdXJpdHlPcmlnaW4gKj4+IG9yaWdpbnM7CisgICAgW2RhdGFTdG9yZSBfZ2V0
T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lvbnM6XihOU1NldDxXS1NlY3Vy
aXR5T3JpZ2luICo+ICpyYXdPcmlnaW5zKSB7CisgICAgICAgIEVYUEVDVF9FUShbcmF3T3JpZ2lu
cyBjb3VudF0sIDJ1KTsKKyAgICAgICAgb3JpZ2lucyA9IHJhd09yaWdpbnM7CisgICAgICAgIG9y
aWdpbk9wZXJhdGlvbkRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmb3JpZ2luT3BlcmF0aW9uRG9uZSk7CisKKyAgICBmb3IgKFdLU2VjdXJpdHlPcmln
aW4gKm9yaWdpbiBpbiBvcmlnaW5zLmdldCgpKSB7CisgICAgICAgIEVYUEVDVF9UUlVFKFtvcmln
aW4ucHJvdG9jb2wgaXNFcXVhbFRvU3RyaW5nOkAidGVzdGluZyJdKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoW29yaWdpbi5ob3N0IGlzRXF1YWxUb1N0cmluZzpAIm1haW4iXSB8fCBbb3JpZ2luLmhv
c3QgaXNFcXVhbFRvU3RyaW5nOkAic2Vjb25kYXJ5Il0pOworICAgIH0KKworICAgIGRlbGV0ZUFs
bFJlZ2lzdHJhdGlvbnNGb3JEYXRhU3RvcmUoZGF0YVN0b3JlLmdldCgpKTsKKyAgICBjbGVhblVw
VGVzdFdlYlB1c2hEKHRlbXBEaXJlY3RvcnkpOworfQorI2VuZGlmIC8vICNpZiBVU0UoQVBQTEVf
SU5URVJOQUxfU0RLKQorI2VuZGlmIC8vIEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5E
TEVTKQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZiAvLyBQTEFURk9S
TShNQUMpIHx8IFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1dlYktpdExpYnJhcmllcy9DaGFu
Z2VMb2cgYi9XZWJLaXRMaWJyYXJpZXMvQ2hhbmdlTG9nCmluZGV4IDhkMTZhY2JmNTFhMi4uNWUz
NzRkZmU4NDQ2IDEwMDY0NAotLS0gYS9XZWJLaXRMaWJyYXJpZXMvQ2hhbmdlTG9nCisrKyBiL1dl
YktpdExpYnJhcmllcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMi0wMi0xNyAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFuIEluc3RhbGxD
b29yZGluYXRpb24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBD
aHJpc3RlbnNlbi4KKworICAgICAgICAqIFdlYktpdFByaXZhdGVGcmFtZXdvcmtTdHVicy9pT1Mv
MTUvSW5zdGFsbENvb3JkaW5hdGlvbi5mcmFtZXdvcmsvSW5zdGFsbENvb3JkaW5hdGlvbi50YmQ6
IEFkZGVkLgorCiAyMDIyLTAyLTAzICBSb2JlcnQgSmVubmVyICA8SmVubmVyQGFwcGxlLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI4ODkwMi4KZGlmZiAtLWdpdCBhL1dl
YktpdExpYnJhcmllcy9XZWJLaXRQcml2YXRlRnJhbWV3b3JrU3R1YnMvaU9TLzE1L0luc3RhbGxD
b29yZGluYXRpb24uZnJhbWV3b3JrL0luc3RhbGxDb29yZGluYXRpb24udGJkIGIvV2ViS2l0TGli
cmFyaWVzL1dlYktpdFByaXZhdGVGcmFtZXdvcmtTdHVicy9pT1MvMTUvSW5zdGFsbENvb3JkaW5h
dGlvbi5mcmFtZXdvcmsvSW5zdGFsbENvb3JkaW5hdGlvbi50YmQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNmJiMGU4M2Q0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRMaWJyYXJpZXMvV2ViS2l0UHJpdmF0ZUZyYW1ld29ya1N0dWJzL2lPUy8xNS9JbnN0YWxs
Q29vcmRpbmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRpbmF0aW9uLnRiZApAQCAtMCwwICsx
LDggQEAKKy0tLSAhdGFwaS10YmQtdjMKK2FyY2hzOiAgICAgICAgICAgWyB4ODZfNjQsIGFybTY0
LCBhcm02NGUgXQoraW5zdGFsbC1uYW1lOiAgICAnL1N5c3RlbS9MaWJyYXJ5L1ByaXZhdGVGcmFt
ZXdvcmtzL0luc3RhbGxDb29yZGluYXRpb24uZnJhbWV3b3JrL0luc3RhbGxDb29yZGluYXRpb24n
CitwbGF0Zm9ybTogaW9zCitleHBvcnRzOgorICAtIGFyY2hzOiAgICAgICAgICAgWyB4ODZfNjQs
IGFybTY0LCBhcm02NGUgXQorICAgIG9iamMtY2xhc3NlczogICAgWyBJWEFwcEluc3RhbGxDb29y
ZGluYXRvciwgSVhPcGFxdWVEYXRhUHJvbWlzZSwgSVhPd25lZERhdGFQcm9taXNlLCBJWFBsYWNl
aG9sZGVyLCBJWFBsYWNlaG9sZGVyQXR0cmlidXRlcywgSVhQcm9taXNlZEluTWVtb3J5RGljdGlv
bmFyeSwgSVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyLCBJWFJlc3RvcmluZ0RlbW90ZWRBcHBJ
bnN0YWxsQ29vcmRpbmF0b3IgXQorLi4uCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452471</attachid>
            <date>2022-02-17 19:34:35 -0800</date>
            <delta_ts>2022-02-18 11:02:42 -0800</delta_ts>
            <desc>Revived for EWS + landing v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>53037</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggZjYwNjk4OWJjZGE2Li5mM2U3YjMyNWI4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MjItMDItMTcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFk
ZCBhbiBJbnN0YWxsQ29vcmRpbmF0aW9uIHdlYnB1c2hkIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzcxNAorCisgICAgICAgIFJldmll
d2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm1FbmFibGVD
b2NvYS5oOgorCiAyMDIyLTAyLTE1ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dHU0xdIEltcGxlbWVudCBlbm91Z2ggb2YgdGhlIGxleGVyIGZvciB0
aGUgc2ltcGxlc3Qgc2hhZGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1F
bmFibGVDb2NvYS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVDb2NvYS5oCmluZGV4
IDc2MGJjNzBmZWU2Ny4uNTQzZjkyMzM0NzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybUVuYWJsZUNvY29hLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGVD
b2NvYS5oCkBAIC0xNDMsNiArMTQzLDEwIEBACiAjZGVmaW5lIEVOQUJMRV9CVUlMVF9JTl9OT1RJ
RklDQVRJT05TIDEKICNlbmRpZgogCisjaWYgIWRlZmluZWQoRU5BQkxFX0lOU1RBTExfQ09PUkRJ
TkFUSU9OX0JVTkRMRVMpICYmIFBMQVRGT1JNKElPUykKKyNkZWZpbmUgRU5BQkxFX0lOU1RBTExf
Q09PUkRJTkFUSU9OX0JVTkRMRVMgMQorI2VuZGlmCisKICNpZiAhZGVmaW5lZChFTkFCTEVfQ0FD
SEVfUEFSVElUSU9OSU5HKQogI2RlZmluZSBFTkFCTEVfQ0FDSEVfUEFSVElUSU9OSU5HIDEKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggMTdmMzliM2U4OWVmLi5lMmMzMzgyOWYwYjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvUEFML0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIyLTAyLTE3ICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYW4gSW5zdGFsbENvb3JkaW5h
dGlvbiB3ZWJwdXNoZCBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzM3MTQKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVu
c2VuLgorCisgICAgICAgIEV4cG9zZSAidG9IZXhTdHJpbmciIHNvIHdlIGNhbiBTSEEyNTYgYW4g
YXJiaXRyYXJ5IHN0cmluZyB0byBhIGhleCByZXByZXNlbnRhdGlvbi4KKworICAgICAgICAqIHBh
bC9jcnlwdG8vQ3J5cHRvRGlnZXN0Lmg6CisgICAgICAgICogcGFsL2NyeXB0by9jb21tb25jcnlw
dG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcDoKKyAgICAgICAgKFBBTDo6Q3J5cHRvRGln
ZXN0Ojp0b0hleFN0cmluZyk6CisKIDIwMjItMDItMTUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggaW50ZXJuYWwgQmlnIFN1ciBidWls
ZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9DcnlwdG9EaWdlc3QuaAppbmRleCAw
NmMxOGMzMGViMTAuLjEzODQ4NGIzMDk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9jcnlwdG8vQ3J5cHRvRGlnZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFML3BhbC9j
cnlwdG8vQ3J5cHRvRGlnZXN0LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFBBTCB7CiAKQEAgLTQ3LDYgKzQ4LDcgQEAgcHVi
bGljOgogCiAgICAgUEFMX0VYUE9SVCB2b2lkIGFkZEJ5dGVzKGNvbnN0IHZvaWQqIGlucHV0LCBz
aXplX3QgbGVuZ3RoKTsKICAgICBQQUxfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiBjb21wdXRlSGFz
aCgpOworICAgIFBBTF9FWFBPUlQgU3RyaW5nIHRvSGV4U3RyaW5nKCk7CiAKIHByaXZhdGU6CiAg
ICAgQ3J5cHRvRGlnZXN0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2Ny
eXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL1BBTC9wYWwvY3J5cHRvL2NvbW1vbmNyeXB0by9DcnlwdG9EaWdlc3RDb21tb25Dcnlw
dG8uY3BwCmluZGV4IDFjZTU3OTdmZWY2Mi4uZGNmMGEzNDRlOGU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9jb21tb25jcnlwdG8vQ3J5cHRvRGlnZXN0Q29tbW9u
Q3J5cHRvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL2NyeXB0by9jb21tb25jcnlw
dG8vQ3J5cHRvRGlnZXN0Q29tbW9uQ3J5cHRvLmNwcApAQCAtMTgyLDQgKzE4MiwxOSBAQCBWZWN0
b3I8dWludDhfdD4gQ3J5cHRvRGlnZXN0Ojpjb21wdXRlSGFzaCgpCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAorU3RyaW5nIENyeXB0b0RpZ2VzdDo6dG9IZXhTdHJpbmcoKQoreworICAgIGF1dG8g
aGFzaCA9IGNvbXB1dGVIYXNoKCk7CisKKyAgICBjaGFyKiBzdGFydCA9IDA7CisgICAgdW5zaWdu
ZWQgaGFzaExlbmd0aCA9IGhhc2guc2l6ZSgpOworICAgIENTdHJpbmcgcmVzdWx0ID0gQ1N0cmlu
Zzo6bmV3VW5pbml0aWFsaXplZChoYXNoTGVuZ3RoICogMiwgc3RhcnQpOworICAgIGNoYXIqIGJ1
ZmZlciA9IHN0YXJ0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGFzaExlbmd0aDsgKytp
KSB7CisgICAgICAgIHNucHJpbnRmKGJ1ZmZlciwgMywgIiUwMlgiLCBoYXNoLmF0KGkpKTsKKyAg
ICAgICAgYnVmZmVyICs9IDI7CisgICAgfQorICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHJl
c3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFBBTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzM2QwMDhkYzNlODEu
LmNiNTk5MjcwMzIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAyMi0wMi0xNyAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFuIEluc3RhbGxD
b29yZGluYXRpb24gd2VicHVzaGQgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzNzE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBD
aHJpc3RlbnNlbi4KKworICAgICAgICBDb3ZlcmVkIGJ5IEFQSSB0ZXN0cy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgcGF0Y2ggbGV0cyB0aGUgaU9TIGJ1aWxkIGNyZWF0ZSBhIHBsYWNlaG9sZGVy
IGFwcCBidW5kbGUgdG8gcmVwcmVzZW50IGEgcmVnaXN0cmF0aW9uIHVzaW5nIEluc3RhbGxDb29y
ZGluYXRpb24uCisgICAgICAgIAorICAgICAgICAqIENvbmZpZ3VyYXRpb25zL3dlYnB1c2hkLnhj
Y29uZmlnOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAKKyAgICAgICAgKiB3ZWJwdXNoZC9BcHBCdW5kbGVSZXF1ZXN0Lm1tOgorICAgICAgICAo
V2ViUHVzaEQ6OkFwcEJ1bmRsZVJlcXVlc3Q6OnN0YXJ0KTogVXNlIHRoZSBJQ0FwcEJ1bmRsZSBp
bXBsZW1lbnRhdGlvbiB3aGVuIGFwcHJvcHJpYXRlLgorICAgICAgICAKKyAgICAgICAgKiB3ZWJw
dXNoZC9JQ0FwcEJ1bmRsZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L3dlYnB1c2hkL1B1
c2hBcHBCdW5kbGUuaC4KKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZTo6Y3JlYXRlKToK
KyAgICAgICAgCisgICAgICAgICogd2VicHVzaGQvSUNBcHBCdW5kbGUubW06IEFkZGVkLgorICAg
ICAgICAoLVtXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlciBpbml0V2l0aElDQXBwQnVu
ZGxlOl0pOgorICAgICAgICAoLVtXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlciBjb29y
ZGluYXRvckRpZENvbXBsZXRlU3VjY2Vzc2Z1bGx5OmZvckFwcGxpY2F0aW9uUmVjb3JkOl0pOgor
ICAgICAgICAoLVtXZWJBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlciBjb29yZGluYXRvcjpj
YW5jZWxlZFdpdGhSZWFzb246Y2xpZW50Ol0pOgorICAgICAgICAoV2ViUHVzaEQ6OmJyb2FkY2Fz
dERlYnVnTWVzc2FnZSk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5kbGU6OklDQXBwQnVu
ZGxlKToKKyAgICAgICAgKFdlYlB1c2hEOjplbmNvZGVPcmlnaW5TdHJpbmdGb3JCdW5kbGVJZGVu
dGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpvcmlnaW5TdHJpbmdGcm9tRW5jb2RlZEJ1bmRs
ZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViUHVzaEQ6OmJ1bmRsZVByZWZpeEZvckhvc3RBcHBJ
ZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpidW5kbGVOYW1lRm9yT3JpZ2luU3RyaW5n
QW5kSG9zdEFwcElkZW50aWZpZXIpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVuZGxlOjpn
ZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVu
ZGxlOjpnZXRCdW5kbGVJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRs
ZTo6Y2hlY2tGb3JFeGlzdGluZ0J1bmRsZSk6CisgICAgICAgIChXZWJQdXNoRDo6SUNBcHBCdW5k
bGU6OmRlbGV0ZUV4aXN0aW5nQnVuZGxlKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRs
ZTo6ZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViUHVzaEQ6
OklDQXBwQnVuZGxlOjpzdG9wKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZTo6Y3Jl
YXRlQnVuZGxlKToKKyAgICAgICAgKFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZTo6YnVuZGxlQ3JlYXRp
b25TdWNjZWVkZWQpOgorICAgICAgICAoV2ViUHVzaEQ6OklDQXBwQnVuZGxlOjpidW5kbGVDcmVh
dGlvbkZhaWxlZCk6CisgICAgICAgIAorICAgICAgICAqIHdlYnB1c2hkL0luc3RhbGxDb29yZGlu
YXRpb25TUEkuaDogQWRkZWQuCisgICAgICAgICogd2VicHVzaGQvTGF1bmNoU2VydmljZXNTUEku
aDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmguCisg
ICAgICAgICogd2VicHVzaGQvUHVzaEFwcEJ1bmRsZS5oOgorICAgICAgICAKKyAgICAgICAgKiB3
ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tOgorICAgICAgICAoV2ViUHVzaEQ6OkRhZW1vbjo6Z2V0
T3JpZ2luc1dpdGhQdXNoQW5kTm90aWZpY2F0aW9uUGVybWlzc2lvbnMpOiBVc2UgdGhlIElDQXBw
QnVuZGxlIGltcGxlbWVudGF0aW9uIHdoZW4gYXBwcm9wcmlhdGUuCisKIDIwMjItMDItMTUgIFBo
aWxpcCBDaGltZW50byAgPHBjaGltZW50b0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEZpeGVzIGZv
ciBidWlsZC13ZWJraXQgLS1taW5pbWFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NvbmZp
Z3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXQvQ29uZmlndXJhdGlvbnMv
V2ViS2l0LnhjY29uZmlnCmluZGV4IGUyNGQxOWQ4MjNkYS4uMjIxZjRhNDhmMGY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZworKysgYi9T
b3VyY2UvV2ViS2l0L0NvbmZpZ3VyYXRpb25zL1dlYktpdC54Y2NvbmZpZwpAQCAtMTUyLDcgKzE1
MiwxMSBAQCBXS19MSUJORVRXT1JLRVhURU5TSU9OX0xERkxBR1NfbWFjY2F0YWx5c3QgPSAtbG5l
dHdvcmtleHRlbnNpb247CiBXS19MSUJORVRXT1JLRVhURU5TSU9OX0xERkxBR1NfbWFjb3N4ID0g
LXdlYWtfbGlicmFyeSAvdXNyL2xpYi9saWJuZXR3b3JrZXh0ZW5zaW9uLmR5bGliOwogV0tfTElC
TkVUV09SS0VYVEVOU0lPTl9MREZMQUdTX3R2b3MgPSA7CiAKLUZSQU1FV09SS19BTkRfTElCUkFS
WV9MREZMQUdTID0gLWxvYmpjIC1mcmFtZXdvcmsgQ0ZOZXR3b3JrIC1mcmFtZXdvcmsgQ29yZUF1
ZGlvIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24gLWZyYW1ld29yayBDb3JlR3JhcGhpY3MgLWZy
YW1ld29yayBDb3JlVGV4dCAtZnJhbWV3b3JrIEZvdW5kYXRpb24gLWZyYW1ld29yayBJbWFnZUlP
IC1mcmFtZXdvcmsgSU9LaXQgLWZyYW1ld29yayBJT1N1cmZhY2UgLWZyYW1ld29yayBXZWJLaXRM
ZWdhY3kgLWxuZXR3b3JrIC1mcmFtZXdvcmsgTWV0YWwgJChXS19BQ0NFU1NJQklMSVRZX0xERkxB
R1MpICQoV0tfQVBQS0lUX0xERkxBR1MpICQoV0tfQkFDS0JPQVJEX1NFUlZJQ0VTX0xERkxBR1Mp
ICQoV0tfUlVOTklOR0JPQVJEX1NFUlZJQ0VTX0xERkxBR1MpICQoV0tfQVVUSEtJVF9MREZMQUdT
KSAkKFdLX0NBUkJPTl9MREZMQUdTKSAkKFdLX0NPTlRBQ1RTX0xERkxBR1MpICQoV0tfQ09SRV9Q
UkVESUNUSU9OX0xERkxBR1MpICQoV0tfQ09SRV9TRVJWSUNFU19MREZMQUdTKSAkKFdLX0dSQVBI
SUNTX1NFUlZJQ0VTX0xERkxBR1MpICQoV0tfTElCTkVUV09SS0VYVEVOU0lPTl9MREZMQUdTKSAk
KFdLX0xJQlNBTkRCT1hfTERGTEFHUykgJChXS19MSUJXRUJSVENfTERGTEFHUykgJChXS19NT0JJ
TEVfQ09SRV9TRVJWSUNFU19MREZMQUdTKSAkKFdLX01PQklMRV9HRVNUQUxUX0xERkxBR1MpICQo
V0tfUERGS0lUX0xERkxBR1MpICQoV0tfUFJPVE9UWVBFX1RPT0xTX0xERkxBR1MpICQoV0tfU0FG
RV9CUk9XU0lOR19MREZMQUdTKSAkKFdLX1NFQ1VSSVRZX0lOVEVSRkFDRV9MREZMQUdTKSAkKFdL
X1VJS0lUX0xERkxBR1MpICQoV0tfVU5JRk9STV9UWVBFX0lERU5USUZJRVJTX0xERkxBR1MpICQo
V0tfVVJMX0ZPUk1BVFRJTkdfTERGTEFHUykgJChXS19XRUJJTlNQRUNUT1JVSV9MREZMQUdTKSAk
KFdLX0NPT1JESU5BVE9SX0xERkxBR1MpOworV0tfSU5TVEFMTF9DT09SRElOQVRJT05fTERGTEFH
UyA9ICQoV0tfSU5TVEFMTF9DT09SRElOQVRJT05fTERGTEFHU18kKFdLX1BMQVRGT1JNX05BTUUp
KTsKK1dLX0lOU1RBTExfQ09PUkRJTkFUSU9OX0xERkxBR1NfaXBob25lb3MgPSAtZnJhbWV3b3Jr
IEluc3RhbGxDb29yZGluYXRpb247CitXS19JTlNUQUxMX0NPT1JESU5BVElPTl9MREZMQUdTX2lw
aG9uZXNpbXVsYXRvciA9ICQoV0tfSU5TVEFMTF9DT09SRElOQVRJT05fTERGTEFHU19pcGhvbmVv
cykKKworRlJBTUVXT1JLX0FORF9MSUJSQVJZX0xERkxBR1MgPSAtbG9iamMgLWZyYW1ld29yayBD
Rk5ldHdvcmsgLWZyYW1ld29yayBDb3JlQXVkaW8gLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiAt
ZnJhbWV3b3JrIENvcmVHcmFwaGljcyAtZnJhbWV3b3JrIENvcmVUZXh0IC1mcmFtZXdvcmsgRm91
bmRhdGlvbiAtZnJhbWV3b3JrIEltYWdlSU8gLWZyYW1ld29yayBJT0tpdCAtZnJhbWV3b3JrIElP
U3VyZmFjZSAtZnJhbWV3b3JrIFdlYktpdExlZ2FjeSAtbG5ldHdvcmsgLWZyYW1ld29yayBNZXRh
bCAkKFdLX0FDQ0VTU0lCSUxJVFlfTERGTEFHUykgJChXS19BUFBLSVRfTERGTEFHUykgJChXS19C
QUNLQk9BUkRfU0VSVklDRVNfTERGTEFHUykgJChXS19SVU5OSU5HQk9BUkRfU0VSVklDRVNfTERG
TEFHUykgJChXS19BVVRIS0lUX0xERkxBR1MpICQoV0tfQ0FSQk9OX0xERkxBR1MpICQoV0tfQ09O
VEFDVFNfTERGTEFHUykgJChXS19DT1JFX1BSRURJQ1RJT05fTERGTEFHUykgJChXS19DT1JFX1NF
UlZJQ0VTX0xERkxBR1MpICQoV0tfR1JBUEhJQ1NfU0VSVklDRVNfTERGTEFHUykgJChXS19MSUJO
RVRXT1JLRVhURU5TSU9OX0xERkxBR1MpICQoV0tfTElCU0FOREJPWF9MREZMQUdTKSAkKFdLX0xJ
QldFQlJUQ19MREZMQUdTKSAkKFdLX01PQklMRV9DT1JFX1NFUlZJQ0VTX0xERkxBR1MpICQoV0tf
TU9CSUxFX0dFU1RBTFRfTERGTEFHUykgJChXS19QREZLSVRfTERGTEFHUykgJChXS19QUk9UT1RZ
UEVfVE9PTFNfTERGTEFHUykgJChXS19TQUZFX0JST1dTSU5HX0xERkxBR1MpICQoV0tfU0VDVVJJ
VFlfSU5URVJGQUNFX0xERkxBR1MpICQoV0tfVUlLSVRfTERGTEFHUykgJChXS19VTklGT1JNX1RZ
UEVfSURFTlRJRklFUlNfTERGTEFHUykgJChXS19VUkxfRk9STUFUVElOR19MREZMQUdTKSAkKFdL
X1dFQklOU1BFQ1RPUlVJX0xERkxBR1MpICQoV0tfQ09PUkRJTkFUT1JfTERGTEFHUykgJChXS19J
TlNUQUxMX0NPT1JESU5BVElPTl9MREZMQUdTKTsKIAogLy8gUHJldmVudCBDKysgc3RhbmRhcmQg
bGlicmFyeSBiYXNpY19zdHJpbmdzdHJlYW0sIG9wZXJhdG9yIG5ldywgZGVsZXRlIGFuZCB0aGVp
ciByZWxhdGVkIGV4Y2VwdGlvbiB0eXBlcyBmcm9tIGJlaW5nIGV4cG9ydGVkIGFzIHdlYWsgc3lt
Ym9scy4KIFVORVhQT1JURURfU1lNQk9MX0xERkxBR1MgPSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9s
IC1XbCxfX1pUSVN0OWJhZF9hbGxvYyAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUSVN0
OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUU1N0OWJhZF9hbGxvYyAt
V2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUU1N0OWV4Y2VwdGlvbiAtV2wsLXVuZXhwb3J0
ZWRfc3ltYm9sIC1XbCxfX1pkbFB2U18gLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19abndt
UHYgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19abndtIC1XbCwtdW5leHBvcnRlZF9zeW1i
b2wgLVdsLF9fWlRWTlN0M19fMTE3YmFkX2Z1bmN0aW9uX2NhbGxFIC1XbCwtdW5leHBvcnRlZF9z
eW1ib2wgLVdsLF9fWlRDTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFtSWNOU18xMWNoYXJfdHJh
aXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUwX05TXzEzYmFzaWNfaXN0cmVhbUljUzJfRUUgLVds
LC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVENOU3QzX18xMThiYXNpY19zdHJpbmdzdHJlYW1J
Y05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRTBfTlNfMTRiYXNpY19pb3N0
cmVhbUljUzJfRUUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19aVENOU3QzX18xMThiYXNp
Y19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRTE2
X05TXzEzYmFzaWNfb3N0cmVhbUljUzJfRUUgLVdsLC11bmV4cG9ydGVkX3N5bWJvbCAtV2wsX19a
VFROU3QzX18xMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90cmFpdHNJY0VFTlNfOWFs
bG9jYXRvckljRUVFRSAtV2wsLXVuZXhwb3J0ZWRfc3ltYm9sIC1XbCxfX1pUVk5TdDNfXzExNWJh
c2ljX3N0cmluZ2J1ZkljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFIC1X
bCwtdW5leHBvcnRlZF9zeW1ib2wgLVdsLF9fWlRWTlN0M19fMTE4YmFzaWNfc3RyaW5nc3RyZWFt
SWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TXzlhbGxvY2F0b3JJY0VFRUUgLVdsLC11bmV4cG9ydGVk
X3N5bWJvbCAtV2wsX19aVENOU3QzX18xMThiYXNpY19zdHJpbmdzdHJlYW1JY05TXzExY2hhcl90
cmFpdHNJY0VFTlNfOWFsbG9jYXRvckljRUVFRThfTlNfMTNiYXNpY19vc3RyZWFtSWNTMl9FRTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9O
ZXR3b3JrTm90aWZpY2F0aW9uTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCmluZGV4IDQ4
NmNiNWIzZGY2Ny4uZjAwYTIxOTNhYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05vdGlmaWNhdGlvbnMvTmV0d29ya05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTm90aWZpY2F0aW9ucy9OZXR3b3JrTm90
aWZpY2F0aW9uTWFuYWdlci5jcHAKQEAgLTcwLDYgKzcwLDcgQEAgdm9pZCBOZXR3b3JrTm90aWZp
Y2F0aW9uTWFuYWdlcjo6bWF5YmVTZW5kQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24oKSBjb25zdAog
CiB2b2lkIE5ldHdvcmtOb3RpZmljYXRpb25NYW5hZ2VyOjpyZXF1ZXN0U3lzdGVtTm90aWZpY2F0
aW9uUGVybWlzc2lvbihjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAgICBMT0coUHVzaCwgIk5l
dHdvcmsgcHJvY2VzcyBwYXNzaW5nIHBlcm1pc3Npb24gcmVxdWVzdCB0byB3ZWJwdXNoZCIpOwog
ICAgIHNlbmRNZXNzYWdlV2l0aFJlcGx5PFdlYlB1c2hEOjpNZXNzYWdlVHlwZTo6UmVxdWVzdFN5
c3RlbU5vdGlmaWNhdGlvblBlcm1pc3Npb24+KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBv
cmlnaW5TdHJpbmcpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9VSURlbGVnYXRlLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5tbQppbmRleCA4NDlkODExMzRmZjguLjc2NTliMWM5ZmYwZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCkBAIC02NjcsNiArNjY3LDcgQEAgdm9p
ZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3QoV2ViS2l0OjoKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5k
bGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2Vy
LT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKKwogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihyZXN1bHQpOwogICAgIH0pLmdldCgpXTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDFlYzhiMmI4NWNlMS4uOWM4OGVkZjg4NWQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTEwNTksNiArMTA1OSwxMiBAQAogCQk1MUREOUYyODE2MzY3REEyMDAxNTc4RTkgLyogTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFERDlGMjYxNjM2N0RBMjAwMTU3
OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJNTFERDlGMjkxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxREQ5RjI3MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VzLmggKi87IH07CiAJCTUxRTM1MUNCMTgwRjJDQ0MwMEU1M0JFOSAv
KiBJREJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRTM1MUM5MTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuaCAqLzsgfTsK
KwkJNTFFOTA0OTUyN0JDQjNDOTAwOTI5RTdFIC8qIElDQXBwQnVuZGxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUU5MDQ5MzI3QkNCM0M2MDA5MjlF
N0UgLyogSUNBcHBCdW5kbGUuaCAqLzsgfTsKKwkJNTFFOTA0OTcyN0JDQjNEOTAwOTI5RTdFIC8q
IElDQXBwQnVuZGxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFFOTA0OTQyN0JDQjNDODAwOTI5RTdFIC8qIElDQXBwQnVuZGxlLm1tICovOyB9Owor
CQk1MUU5MDQ5QTI3QkNCOUQ0MDA5MjlFN0UgLyogTGF1bmNoU2VydmljZXNTUEkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTkwNDk4MjdCQ0I5RDEw
MDkyOUU3RSAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oICovOyB9OworCQk1MUU5MDQ5QjI3QkNCOUQ0
MDA5MjlFN0UgLyogTGF1bmNoU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTkwNDk4MjdCQ0I5RDEwMDkyOUU3RSAvKiBMYXVuY2hT
ZXJ2aWNlc1NQSS5oICovOyB9OworCQk1MUU5MDQ5QzI3QkNCOUQ0MDA5MjlFN0UgLyogSW5zdGFs
bENvb3JkaW5hdGlvblNQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFFOTA0OTkyN0JDQjlEMzAwOTI5RTdFIC8qIEluc3RhbGxDb29yZGluYXRpb25T
UEkuaCAqLzsgfTsKKwkJNTFFOTA0OUQyN0JDQjlENDAwOTI5RTdFIC8qIEluc3RhbGxDb29yZGlu
YXRpb25TUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRTkwNDk5MjdCQ0I5RDMwMDkyOUU3RSAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggKi87
IH07CiAJCTUxRUZDMUNGMTUyNEU2MjUwMEM5QTkzOCAvKiBXS0J1bmRsZURPTVdpbmRvd0V4dGVu
c2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFG
QTJENTQxNTIxMTE4NjAwQzFCQTBCIC8qIFdLQnVuZGxlRE9NV2luZG93RXh0ZW5zaW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFGMDYwRTAx
NjU0MzE3RjAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjA2MERFMTY1NDMxNzUwMEYz
MjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VzLmggKi87IH07CiAJCTUxRjA2MEUxMTY1
NDMxODUwMEYzMjgxQiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwNjBERDE2NTQz
MTc1MDBGMzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9
OwpAQCAtNDU5Myw2ICs0NTk5LDEwIEBACiAJCTUxRTM1MUM5MTgwRjJDQ0MwMEU1M0JFOSAvKiBJ
REJVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVXRpbGl0
aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTM5OTA1MUQ2RjU0QzUwMDlD
ODgzMSAvKiBVSUdhbWVwYWRQcm92aWRlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gVUlHYW1lcGFkUHJvdmlkZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFFOEI2OEQxRTcxMjg3MzAwMUI3MTMyIC8qIFdlYlVSTFNjaGVt
ZVRhc2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVVJMU2No
ZW1lVGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRTkwNDkzMjdCQ0Iz
QzYwMDkyOUU3RSAvKiBJQ0FwcEJ1bmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJQ0FwcEJ1bmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUU5MDQ5
NDI3QkNCM0M4MDA5MjlFN0UgLyogSUNBcHBCdW5kbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBJQ0FwcEJ1bmRsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTFFOTA0OTgyN0JDQjlEMTAwOTI5RTdFIC8qIExhdW5jaFNlcnZpY2VzU1BJLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhdW5jaFNlcnZpY2VzU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRTkwNDk5MjdCQ0I5RDMwMDkyOUU3RSAvKiBJ
bnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc3RhbGxDb29yZGluYXRpb25TUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFFOTQ5OTYxRDc2MUNDNzAwRUM5RUI5IC8qIFVJR2FtZXBhZFByb3ZpZGVySU9TLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVUlHYW1lcGFkUHJvdmlkZXJJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjA2MEREMTY1NDMxNzUwMEYzMjgx
QiAvKiBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBXZWJSZXNvdXJjZUxvYWRlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVk
U291cmNlcy9XZWJLaXQvV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1MUYwNjBERDE2NTQzMTc1MDBGMzI4
MUMgLyogTGliV2ViUlRDTmV0d29ya01lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBMaWJXZWJSVENOZXR3b3JrTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRT
b3VyY2VzL1dlYktpdC9MaWJXZWJSVENOZXR3b3JrTWVzc2FnZVJlY2VpdmVyLmNwcDsgc291cmNl
VHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTEwMjA2LDYgKzEwMjE2LDEwIEBACiAJ
CQkJRUJBOEQzQUMyN0E1RTMzRTAwQ0I3OTAwIC8qIEFwcGxlUHVzaFNlcnZpY2VDb25uZWN0aW9u
Lm1tICovLAogCQkJCUVCMEQzMTJFMjc1QUUxMzMwMDg2M0Q4RiAvKiBjb20uYXBwbGUud2Via2l0
LndlYnB1c2hkLmlvcy5wbGlzdCAqLywKIAkJCQlFQjBEMzEyRDI3NUFFMTMzMDA4NjNEOEYgLyog
Y29tLmFwcGxlLndlYmtpdC53ZWJwdXNoZC5tYWMucGxpc3QgKi8sCisJCQkJNTFFOTA0OTMyN0JD
QjNDNjAwOTI5RTdFIC8qIElDQXBwQnVuZGxlLmggKi8sCisJCQkJNTFFOTA0OTQyN0JDQjNDODAw
OTI5RTdFIC8qIElDQXBwQnVuZGxlLm1tICovLAorCQkJCTUxRTkwNDk5MjdCQ0I5RDMwMDkyOUU3
RSAvKiBJbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggKi8sCisJCQkJNTFFOTA0OTgyN0JDQjlEMTAw
OTI5RTdFIC8qIExhdW5jaFNlcnZpY2VzU1BJLmggKi8sCiAJCQkJNTFGN0JCNzUyNzQ0OThCQjAw
QzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLmggKi8sCiAJCQkJNTFGN0JCNzQyNzQ0
OThCQTAwQzQ1QTcyIC8qIE1vY2tBcHBCdW5kbGVGb3JUZXN0aW5nLm1tICovLAogCQkJCTUxNjBF
OTVDMjc0QzJBMDMwMDU2NzM4OCAvKiBNb2NrQXBwQnVuZGxlUmVnaXN0cnkuaCAqLywKQEAgLTEy
ODA4LDYgKzEyODIyLDkgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTUxRTkwNDlCMjdC
Q0I5RDQwMDkyOUU3RSAvKiBMYXVuY2hTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTFFOTA0OTUyN0JDQjNDOTAwOTI5RTdFIC8qIElDQXBwQnVuZGxlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MUU5MDQ5RDI3QkNCOUQ0MDA5MjlFN0UgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0xMzM0Miw2ICsxMzM1OSw3IEBACiAJCQkJMzc1NEQ1NDUxQjNB
MjlGRDAwM0E0QzdGIC8qIE5TSW52b2NhdGlvblNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFE
RDcyQUIyNjgyMTY3MzAwQTkwQzcxIC8qIE5XU1BJLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhB
Q0ExMzE2NjcwRDg5MDA0QzE5NDEgLyogT2JqQ09iamVjdEdyYXBoLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MUU5MDQ5QTI3QkNCOUQ0MDA5MjlFN0UgLyogTGF1bmNoU2VydmljZXNTUEkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzMDg1RENBMjZFMjk3NzUwMDBFQzZBNyAvKiBPcmlnaW5TdG9yYWdl
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjRFQjRBRkQyNjlDRDdGMzAwRDI5N0FFIC8q
IE9TU3RhdGVTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRjQ3RkZCMTcyNzVDNTcwMDhBQ0I5
MSAvKiBQYWdlQmFubmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEzNTU0LDYgKzEzNTcyLDcgQEAK
IAkJCQkxQUYwNUQ4NzE0Njg4MzQ4MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWFQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ4NTcwQTMyNjQ0QkVDNTAwQzA1Rjcx
IC8qIFRpbWVvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJGODMzNjg2MUZBMTM5REYwMEM2RTA4
MCAvKiBUb3VjaEJhck1lbnVEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUU5MDQ5QzI3QkNC
OUQ0MDA5MjlFN0UgLyogSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDZCRUI2RTMyMkZCQjIxQTAwMjY5ODY3IC8qIFRyYW5zaWVudExvY2FsU3RvcmFnZU5hbWVz
cGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdFQjJFM0EyMUUxOTgzRTAwQjg5Q0RGIC8qIFUy
ZkF1dGhlbnRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkU0MzY2MThCNkMwODEwMDlD
N0E0OCAvKiBVSURlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTE1NjQwLDYgKzE1NjU5LDcg
QEAKIAkJCQkwN0UxOUVGQjIzRDQwMUYxMDA5NEZGQjQgLyogTWVkaWFQbGF5ZXJQcml2YXRlUmVt
b3RlTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFERjI5RTY0MjU3RjM3
QTMwMDNDMjhBRiAvKiBNZWRpYVNvdXJjZVByaXZhdGVSZW1vdGVNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOUI0NzkwOTEyNTMxNTYzMjAwRUMxMUFCIC8qIE1lc3NhZ2VB
cmd1bWVudERlc2NyaXB0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUU5MDQ5NzI3QkNC
M0Q5MDA5MjlFN0UgLyogSUNBcHBCdW5kbGUubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MTdCNUY4
NDI3NUU5N0I2MDAyREMyMkQgLyogTW9ja0FwcEJ1bmRsZUZvclRlc3RpbmcubW0gaW4gU291cmNl
cyAqLywKIAkJCQk1MTdCNUY4NjI3NUU5N0I2MDAyREMyMkQgLyogTW9ja0FwcEJ1bmRsZVJlZ2lz
dHJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRUJBOEQzQjYyN0E1RTMzRjAwQ0I3OTAwIC8qIE1v
Y2tQdXNoU2VydmljZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5tbSBiL1NvdXJjZS9XZWJLaXQv
d2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5tbQppbmRleCAzY2QzZGIwN2Y2ZjcuLjBjNTNkMzU2
MDRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9BcHBCdW5kbGVSZXF1ZXN0
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvQXBwQnVuZGxlUmVxdWVzdC5tbQpAQCAt
MjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJBcHBCdW5kbGVSZXF1
ZXN0LmgiCiAKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgiCiAjaW1wb3J0ICJNb2NrQXBwQnVuZGxl
Rm9yVGVzdGluZy5oIgogI2ltcG9ydCAiV2ViUHVzaERhZW1vbi5oIgogI2ltcG9ydCA8SmF2YVNj
cmlwdENvcmUvQ29uc29sZVR5cGVzLmg+CkBAIC01NCw4ICs1NSwxMiBAQCB2b2lkIEFwcEJ1bmRs
ZVJlcXVlc3Q6OnN0YXJ0KCkKICAgICBpZiAobV9jb25uZWN0aW9uLT51c2VNb2NrQnVuZGxlc0Zv
clRlc3RpbmcoKSkKICAgICAgICAgbV9hcHBCdW5kbGUgPSBNb2NrQXBwQnVuZGxlRm9yVGVzdGlu
Zzo6Y3JlYXRlKG1fb3JpZ2luU3RyaW5nLCBtX2Nvbm5lY3Rpb24tPmhvc3RBcHBDb2RlU2lnbmlu
Z0lkZW50aWZpZXIoKSwgKnRoaXMpOwogICAgIGVsc2UgeworI2lmIEVOQUJMRShJTlNUQUxMX0NP
T1JESU5BVElPTl9CVU5ETEVTKQorICAgICAgICBtX2FwcEJ1bmRsZSA9IElDQXBwQnVuZGxlOjpj
cmVhdGUoKm1fY29ubmVjdGlvbiwgbV9vcmlnaW5TdHJpbmcsICp0aGlzKTsKKyNlbHNlCiAgICAg
ICAgIG1fY29ubmVjdGlvbi0+YnJvYWRjYXN0RGVidWdNZXNzYWdlKCJDbGllbnQgaXMgdHJ5aW5n
IHRvIGluaXRpYXRlIGFwcCBidW5kbGUgcmVxdWVzdCB3aXRob3V0IGhhdmluZyBjb25maWd1cmVk
IG1vY2sgYXBwIGJ1bmRsZXMgZm9yIHRlc3RpbmcuIEFib3V0IHRvIGNyYXNoLi4uIik7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKICAgICB9CiAKICAgICBz
dGFydEludGVybmFsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lDQXBw
QnVuZGxlLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lDQXBwQnVuZGxlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ZTViZDY2YmE3YjgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lDQXBwQnVuZGxlLmgKQEAgLTAsMCArMSw3
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVORExF
UykKKworI2ltcG9ydCAiSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oIgorI2ltcG9ydCAiUHVzaEFw
cEJ1bmRsZS5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1dlYWtQ
dHIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitAY2xhc3MgTlNFcnJvcjsK
K0BjbGFzcyBfV0tBcHBJbnN0YWxsQ29vcmRpbmF0b3JPYnNlcnZlcjsKKworbmFtZXNwYWNlIFdl
YlB1c2hEIHsKKworY2xhc3MgQ2xpZW50Q29ubmVjdGlvbjsKKworY2xhc3MgSUNBcHBCdW5kbGUg
OiBwdWJsaWMgUHVzaEFwcEJ1bmRsZSwgcHVibGljIENhbk1ha2VXZWFrUHRyPElDQXBwQnVuZGxl
PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxJQ0FwcEJ1bmRsZT4gY3JlYXRlKENsaWVudENvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0
IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBQdXNoQXBwQnVuZGxlQ2xpZW50JiBjbGllbnQpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJQ0FwcEJ1bmRsZShjb25uZWN0aW9uLCBv
cmlnaW5TdHJpbmcsIGNsaWVudCkpOworICAgIH0KKworICAgIHZvaWQgYnVuZGxlQ3JlYXRpb25T
dWNjZWVkZWQoKTsKKyAgICB2b2lkIGJ1bmRsZUNyZWF0aW9uRmFpbGVkKE5TRXJyb3IgKik7CisK
KyAgICBzdGF0aWMgdm9pZCBnZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMoQ2xpZW50Q29ubmVj
dGlvbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mKT4mJik7
CisKK3ByaXZhdGU6CisgICAgSUNBcHBCdW5kbGUoQ2xpZW50Q29ubmVjdGlvbiYsIGNvbnN0IFN0
cmluZyYgb3JpZ2luU3RyaW5nLCBQdXNoQXBwQnVuZGxlQ2xpZW50Jik7CisKKyAgICBjb25zdCBT
dHJpbmcmIGdldEJ1bmRsZUlkZW50aWZpZXIoKTsKKworICAgIHZvaWQgY2hlY2tGb3JFeGlzdGlu
Z0J1bmRsZSgpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlRXhpc3RpbmdCdW5kbGUoKSBmaW5hbDsK
KyAgICB2b2lkIGNyZWF0ZUJ1bmRsZSgpIGZpbmFsOworICAgIHZvaWQgc3RvcCgpIGZpbmFsOwor
CisgICAgdm9pZCBkaWREZWxldGVFeGlzdGluZ0J1bmRsZVdpdGhFcnJvcihOU0Vycm9yICopOwor
CisgICAgUmV0YWluUHRyPElYUmVzdG9yaW5nRGVtb3RlZEFwcEluc3RhbGxDb29yZGluYXRvcj4g
bV9hcHBJbnN0YWxsQ29vcmRpbmF0b3I7CisgICAgUmV0YWluUHRyPF9XS0FwcEluc3RhbGxDb29y
ZGluYXRvck9ic2VydmVyPiBtX2FwcEluc3RhbGxPYnNlcnZlcjsKKworICAgIFN0cmluZyBtX29y
aWdpblN0cmluZzsKKyAgICBSZWZQdHI8Q2xpZW50Q29ubmVjdGlvbj4gbV9jbGllbnRDb25uZWN0
aW9uOworCisgICAgU3RyaW5nIG1fYnVuZGxlSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYlB1c2hECisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TVEFMTF9DT09SRElOQVRJT05fQlVO
RExFUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2VicHVzaGQvSUNBcHBCdW5kbGUubW0g
Yi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hkL0lDQXBwQnVuZGxlLm1tCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTUyNWY0N2ZhYzU3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC93ZWJwdXNoZC9JQ0FwcEJ1bmRsZS5tbQpAQCAtMCwwICsxLDMyMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiSUNBcHBCdW5kbGUuaCIK
KworI2lmIEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQorCisjaW1wb3J0ICJB
cHBCdW5kbGVSZXF1ZXN0LmgiCisjaW1wb3J0ICJMYXVuY2hTZXJ2aWNlc1NQSS5oIgorI2ltcG9y
dCAiUHVzaENsaWVudENvbm5lY3Rpb24uaCIKKyNpbXBvcnQgIldlYlB1c2hEYWVtb24uaCIKKyNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPgorI2ltcG9ydCA8cGFsL2NyeXB0
by9DcnlwdG9EaWdlc3QuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW1wb3J0IDx3
dGYvdGV4dC9CYXNlNjQuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwor
TlNTdHJpbmcgKnB1c2hCdW5kbGVBcHBNYW5hZ2VtZW50RG9tYWluID0gQCJjb20uYXBwbGUuV2Vi
S2l0LlB1c2hCdW5kbGVzIjsKKworQGludGVyZmFjZSBfV0tBcHBJbnN0YWxsQ29vcmRpbmF0b3JP
YnNlcnZlciA6IE5TT2JqZWN0IDxJWEFwcEluc3RhbGxDb29yZGluYXRvck9ic2VydmVyPgorLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoSUNBcHBCdW5kbGU6KFdlYlB1c2hEOjpJQ0FwcEJ1bmRsZSYp
aWNBcHBCdW5kbGU7CitAcHJvcGVydHkgV2Vha1B0cjxXZWJQdXNoRDo6SUNBcHBCdW5kbGU+IGJ1
bmRsZTsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIF9XS0FwcEluc3RhbGxDb29yZGluYXRvck9i
c2VydmVyCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aElDQXBwQnVuZGxlOihXZWJQdXNoRDo6
SUNBcHBCdW5kbGUmKWljQXBwQnVuZGxlCit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0
XSkpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBfYnVuZGxlID0gaWNBcHBCdW5kbGU7CisK
KyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZCljb29yZGluYXRvckRpZENvbXBsZXRlU3Vj
Y2Vzc2Z1bGx5Oihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3Ig
Zm9yQXBwbGljYXRpb25SZWNvcmQ6KG51bGxhYmxlIExTQXBwbGljYXRpb25SZWNvcmQgKilhcHBS
ZWNvcmQKK3sKKyAgICBjYWxsT25NYWluUnVuTG9vcChbc2VsZiwgcHJvdGVjdGVkU2VsZiA9IFJl
dGFpblB0cjxpZD4oc2VsZildIHsKKyAgICAgICAgaWYgKF9idW5kbGUpCisgICAgICAgICAgICBf
YnVuZGxlLT5idW5kbGVDcmVhdGlvblN1Y2NlZWRlZCgpOworICAgIH0pOworfQorCistICh2b2lk
KWNvb3JkaW5hdG9yOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0
b3IgY2FuY2VsZWRXaXRoUmVhc29uOihub25udWxsIE5TRXJyb3IgKiljYW5jZWxSZWFzb24gY2xp
ZW50OihJWENsaWVudElkZW50aWZpZXIpY2xpZW50Cit7CisgICAgY2FsbE9uTWFpblJ1bkxvb3Ao
W3NlbGYsIHByb3RlY3RlZFNlbGYgPSBSZXRhaW5QdHI8aWQ+KHNlbGYpLCBwcm90ZWN0ZWRDYW5j
ZWxSZWFzb24gPSBSZXRhaW5QdHI8TlNFcnJvcj4oY2FuY2VsUmVhc29uKV0geworICAgICAgICBp
ZiAoX2J1bmRsZSkKKyAgICAgICAgICAgIF9idW5kbGUtPmJ1bmRsZUNyZWF0aW9uRmFpbGVkKHBy
b3RlY3RlZENhbmNlbFJlYXNvbi5nZXQoKSk7CisgICAgfSk7Cit9CisKK0BlbmQKKwordXNpbmcg
UEFMOjpDcnlwdG9EaWdlc3Q7CisKK25hbWVzcGFjZSBXZWJQdXNoRCB7CisKK3N0YXRpYyB2b2lk
IGJyb2FkY2FzdERlYnVnTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgRGFl
bW9uOjpzaW5nbGV0b24oKS5icm9hZGNhc3REZWJ1Z01lc3NhZ2UoSlNDOjpNZXNzYWdlTGV2ZWw6
OkluZm8sIG1ha2VTdHJpbmcoIklDQXBwQnVuZGxlOiAiLCBtZXNzYWdlKSk7Cit9CisKK0lDQXBw
QnVuZGxlOjpJQ0FwcEJ1bmRsZShDbGllbnRDb25uZWN0aW9uJiBjbGllbnRDb25uZWN0aW9uLCBj
b25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgUHVzaEFwcEJ1bmRsZUNsaWVudCYgY2xpZW50KQor
ICAgIDogUHVzaEFwcEJ1bmRsZShjbGllbnQpCisgICAgLCBtX29yaWdpblN0cmluZyhvcmlnaW5T
dHJpbmcpCisgICAgLCBtX2NsaWVudENvbm5lY3Rpb24oJmNsaWVudENvbm5lY3Rpb24pCit7Cit9
CisKK3N0YXRpYyBTdHJpbmcgZW5jb2RlT3JpZ2luU3RyaW5nRm9yQnVuZGxlSWRlbnRpZmllcihj
b25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIC8vIEJ1bmRsZSBpZGVudGlmaWVycyBoYXZlIGV4
YWN0bHkgNjQgdmFsaWQgY2hhcmFjdGVycy4KKyAgICAvLyBhLXosIEEtWiwgMC05LCAnLScsIGFu
ZCAnLicKKyAgICAvLyBCYXNlNjQgVVJMIGVuY29kaW5nIHVzZXMgJy0nIGFuZCAnXycgZm9yIHRo
ZSBmaW5hbCAyIGNoYXJhY3RlcnMKKyAgICAvLyBGb3Igb3VyIGJ1bmRsZSBpZGVudGlmaWVyLCB3
ZSdsbCBCYXNlNjQgVVJMIGVuY29kZSB0aGVuIHJlcGxhY2UgJ18nIHdpdGggJy4nCisgICAgLy8g
V2UgYWxzbyBnZXQgcmlkIG9mIHRoZSB0eXBpY2FsICc9JyBwYWRkaW5nIGZvciBiYXNlNjQgZW5j
b2RpbmcuCisKKyAgICBhdXRvIGJhc2U2NCA9IGJhc2U2NFVSTEVuY29kZVRvVmVjdG9yKGlucHV0
LnV0ZjgoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiYXNlNjQuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKGJhc2U2NFtpXSA9PSAnXycpCisgICAgICAgICAgICBiYXNlNjRbaV0g
PSAnLic7CisgICAgfQorCisgICAgc2l6ZV90IG51bWJlckVxdWFsU2lnbnMgPSAwOworICAgIGlm
IChiYXNlNjQuc2l6ZSgpID49IDEgJiYgYmFzZTY0Lmxhc3QoKSA9PSAnPScpCisgICAgICAgICsr
bnVtYmVyRXF1YWxTaWduczsKKyAgICBpZiAoYmFzZTY0LnNpemUoKSA+PSAyICYmIGJhc2U2NFti
YXNlNjQuc2l6ZSgpIC0gMl0gPT0gJz0nKQorICAgICAgICArK251bWJlckVxdWFsU2lnbnM7CisK
KyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChiYXNlNjQuZGF0YSgpLCBiYXNlNjQuc2l6ZSgp
IC0gbnVtYmVyRXF1YWxTaWducyk7Cit9CisKK3N0YXRpYyBTdHJpbmcgb3JpZ2luU3RyaW5nRnJv
bUVuY29kZWRCdW5kbGVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgaW5wdXQpCit7CisgICAgYXV0
byB1dGY4ID0gaW5wdXQudXRmOCgpOworICAgIGF1dG8gYnVmZmVyID0gdXRmOC5tdXRhYmxlRGF0
YSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXRmOC5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChidWZmZXJbaV0gPT0gJy4nKQorICAgICAgICAgICAgYnVmZmVyW2ldID0gJ18n
OworICAgIH0KKworICAgIGF1dG8gZGVjb2RlZCA9IGJhc2U2NFVSTERlY29kZShidWZmZXIsIHV0
ZjgubGVuZ3RoKCkpOworICAgIGlmICghZGVjb2RlZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRlY29kZWQtPmRhdGEoKSwgZGVjb2RlZC0+c2l6
ZSgpKTsKK30KKworc3RhdGljIFN0cmluZyBidW5kbGVQcmVmaXhGb3JIb3N0QXBwSWRlbnRpZmll
cihjb25zdCBTdHJpbmcmIGhvc3RBcHBJZGVudGlmaWVyKQoreworICAgIGF1dG8gYXBwRGlnZXN0
ID0gUEFMOjpDcnlwdG9EaWdlc3Q6OmNyZWF0ZShDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobTo6U0hB
XzI1Nik7CisgICAgYXV0byB1dGY4SWRlbnRpZmllciA9IGhvc3RBcHBJZGVudGlmaWVyLnV0Zjgo
KTsKKyAgICBhcHBEaWdlc3QtPmFkZEJ5dGVzKHV0ZjhJZGVudGlmaWVyLmRhdGEoKSwgdXRmOElk
ZW50aWZpZXIubGVuZ3RoKCkpOworCisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImNvbS5hcHBsZS5X
ZWJLaXQuUHVzaEJ1bmRsZS4iLCBhcHBEaWdlc3QtPnRvSGV4U3RyaW5nKCksICIuIik7Cit9CisK
K3N0YXRpYyBTdHJpbmcgYnVuZGxlTmFtZUZvck9yaWdpblN0cmluZ0FuZEhvc3RBcHBJZGVudGlm
aWVyKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhvc3RBcHBJZGVu
dGlmaWVyKQoreworICAgIC8vIEZJWE1FOiBPbmNlIHdlIGNhbiBzdG9yZSB0aGUgb3JpZ2luIHN0
cmluZyB3aXRoaW4gdGhlIGFwcCBidW5kbGUsIGhhc2ggdGhlIG9yaWdpbiBzdHJpbmcgYXMgd2Vs
bC4KKyAgICAvLyBGb3Igbm93IHdlIGJhc2U2NCBlbmNvZGUgaXQgdG8gbWFrZSBhIHZhbGlkIGJ1
bmRsZSBpZGVudGlmaWVyIHRoYXQgY2FycmllcyB0aGUgaW5mb3JtYXRpb24uCisgICAgcmV0dXJu
IG1ha2VTdHJpbmcoYnVuZGxlUHJlZml4Rm9ySG9zdEFwcElkZW50aWZpZXIoaG9zdEFwcElkZW50
aWZpZXIpLCBlbmNvZGVPcmlnaW5TdHJpbmdGb3JCdW5kbGVJZGVudGlmaWVyKG9yaWdpblN0cmlu
ZykpOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpnZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMo
Q2xpZW50Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBWZWN0b3I8U3RyaW5nPiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IHJlc3VsdHM7CisKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGJ1bmRsZUlkZW50aWZp
ZXJQcmVmaXggPSAoTlNTdHJpbmcgKilidW5kbGVQcmVmaXhGb3JIb3N0QXBwSWRlbnRpZmllcihj
b25uZWN0aW9uLmhvc3RBcHBDb2RlU2lnbmluZ0lkZW50aWZpZXIoKSk7CisKKyAgICBMU0VudW1l
cmF0b3I8TFNBcHBsaWNhdGlvblJlY29yZCAqPiAqZW51bWVyYXRvciA9IFtMU0FwcGxpY2F0aW9u
UmVjb3JkIGVudW1lcmF0b3JXaXRoT3B0aW9uczpMU0FwcGxpY2F0aW9uRW51bWVyYXRpb25PcHRp
b25zRW51bWVyYXRlUGxhY2Vob2xkZXJzXTsKKyAgICBmb3IgKExTQXBwbGljYXRpb25SZWNvcmQg
KnJlY29yZCA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdOyByZWNvcmQ7IHJlY29yZCA9IFtlbnVt
ZXJhdG9yIG5leHRPYmplY3RdKSB7CisgICAgICAgIGlmICghW3JlY29yZC5tYW5hZ2VtZW50RG9t
YWluIGlzRXF1YWxUb1N0cmluZzpwdXNoQnVuZGxlQXBwTWFuYWdlbWVudERvbWFpbl0pCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIVtyZWNvcmQuYnVuZGxlSWRlbnRpZmll
ciBoYXNQcmVmaXg6YnVuZGxlSWRlbnRpZmllclByZWZpeC5nZXQoKV0pCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBzdG9yZSB0aGUgb3JpZ2lu
IHN0cmluZyBpbiB0aGUgYnVuZGxlIGlkZW50aWZpZXIgYmFzZTY0IGVuY29kZWQKKyAgICAgICAg
Ly8gT25jZSB3ZSBzdG9yZSBpdCBpbiB0aGUgYnVuZGxlIGl0c2VsZiwgd2UnbGwgaGFzaCB0aGUg
b3JpZ2luIHN0cmluZyBpbiB0aGUgYnVuZGxlIGlkZW50aWZpZXIgYW5kIGV4dHJhY3QgaXQgZnJv
bSB0aGUgYnVuZGxlCisKKyAgICAgICAgTlNBcnJheSAqY29tcG9uZW50cyA9IFtyZWNvcmQuYnVu
ZGxlSWRlbnRpZmllciBjb21wb25lbnRzU2VwYXJhdGVkQnlTdHJpbmc6YnVuZGxlSWRlbnRpZmll
clByZWZpeC5nZXQoKV07CisgICAgICAgIEFTU0VSVChjb21wb25lbnRzLmNvdW50ID49IDIpOwor
CisgICAgICAgIGF1dG8gb3JpZ2luU3RyaW5nID0gb3JpZ2luU3RyaW5nRnJvbUVuY29kZWRCdW5k
bGVJZGVudGlmaWVyKGNvbXBvbmVudHNbMV0pOworICAgICAgICBpZiAob3JpZ2luU3RyaW5nLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJlc3VsdHMuYXBwZW5k
KG9yaWdpblN0cmluZyk7CisgICAgfQorICAgIAorICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3Vs
dHMpOworfQorCitjb25zdCBTdHJpbmcmIElDQXBwQnVuZGxlOjpnZXRCdW5kbGVJZGVudGlmaWVy
KCkKK3sKKyAgICBpZiAobV9idW5kbGVJZGVudGlmaWVyLmlzRW1wdHkoKSAmJiBtX2NsaWVudENv
bm5lY3Rpb24pCisgICAgICAgIG1fYnVuZGxlSWRlbnRpZmllciA9IGJ1bmRsZU5hbWVGb3JPcmln
aW5TdHJpbmdBbmRIb3N0QXBwSWRlbnRpZmllcihtX29yaWdpblN0cmluZywgbV9jbGllbnRDb25u
ZWN0aW9uLT5ob3N0QXBwQ29kZVNpZ25pbmdJZGVudGlmaWVyKCkpOworCisgICAgcmV0dXJuIG1f
YnVuZGxlSWRlbnRpZmllcjsKK30KKwordm9pZCBJQ0FwcEJ1bmRsZTo6Y2hlY2tGb3JFeGlzdGlu
Z0J1bmRsZSgpCit7CisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisgICAgUmV0YWluUHRyPExT
QXBwbGljYXRpb25SZWNvcmQ+IGFwcFJlY29yZCA9IGFkb3B0TlMoW1tMU0FwcGxpY2F0aW9uUmVj
b3JkIGFsbG9jXSBpbml0V2l0aEJ1bmRsZUlkZW50aWZpZXI6KE5TU3RyaW5nICopZ2V0QnVuZGxl
SWRlbnRpZmllcigpIGFsbG93UGxhY2Vob2xkZXI6WUVTIGVycm9yOiZlcnJvcl0pOworCisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGlkQ2hlY2tGb3JFeGlzdGluZ0J1bmRs
ZSgqdGhpcywgYXBwUmVjb3JkID8gUHVzaEFwcEJ1bmRsZUV4aXN0czo6WWVzIDogUHVzaEFwcEJ1
bmRsZUV4aXN0czo6Tm8pOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpkZWxldGVFeGlzdGluZ0J1
bmRsZSgpCit7CisgICAgW0lYQXBwSW5zdGFsbENvb3JkaW5hdG9yIHVuaW5zdGFsbEFwcFdpdGhC
dW5kbGVJRDooTlNTdHJpbmcgKilnZXRCdW5kbGVJZGVudGlmaWVyKCkgcmVxdWVzdFVzZXJDb25m
aXJtYXRpb246Tk8gY29tcGxldGlvbjpbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlz
IH1dIChOU0Vycm9yICplcnJvcikgeworICAgICAgICBjYWxsT25NYWluUnVuTG9vcChbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGVycm9yID0gUmV0YWluUHRyPE5TRXJyb3I+
KGVycm9yKV0geworICAgICAgICAgICAgZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVXaXRoRXJyb3Io
ZXJyb3IuZ2V0KCkpOworICAgICAgICB9KTsKKyAgICB9XTsKK30KKwordm9pZCBJQ0FwcEJ1bmRs
ZTo6ZGlkRGVsZXRlRXhpc3RpbmdCdW5kbGVXaXRoRXJyb3IoTlNFcnJvciAqZXJyb3IpCit7Cisg
ICAgaWYgKGVycm9yKQorICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygi
RXJyb3IgZGVsZXRpbmcgZXhpc3RpbmcgYnVuZGxlOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0
aW9uXSkpKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZERlbGV0
ZUV4aXN0aW5nQnVuZGxlV2l0aEVycm9yKCp0aGlzLCBlcnJvcik7Cit9CisKK3ZvaWQgSUNBcHBC
dW5kbGU6OnN0b3AoKQoreworICAgIG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yLmdldCgpLm9ic2Vy
dmVyID0gbmlsOworICAgIG1fYXBwSW5zdGFsbENvb3JkaW5hdG9yID0gbmlsOworICAgIG1fYXBw
SW5zdGFsbE9ic2VydmVyID0gbmlsOworfQorCit2b2lkIElDQXBwQnVuZGxlOjpjcmVhdGVCdW5k
bGUoKQoreworICAgIFJldGFpblB0cjxOU1N0cmluZz4gYnVuZGxlSWRlbnRpZmllciA9IChOU1N0
cmluZyAqKWdldEJ1bmRsZUlkZW50aWZpZXIoKTsKKworICAgIC8vIENhbmNlbCBhbnkgcHJldmlv
dXMgaW5zdGFsbCBjb29yZGluYXRvciB0aGF0IG1pZ2h0J3ZlIGJlZW4gbGVmdCBoYW5naW5nIGlu
IGEgcGFydGlhbGx5IGZpbmlzaGVkIHN0YXRlCisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7Cisg
ICAgW0lYQXBwSW5zdGFsbENvb3JkaW5hdG9yIGNhbmNlbENvb3JkaW5hdG9yRm9yQXBwV2l0aEJ1
bmRsZUlEOmJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkgd2l0aFJlYXNvbjpbTlNFcnJvciBlcnJvcldp
dGhEb21haW46QCJXS0Vycm9yRG9tYWluIiBjb2RlOjEgdXNlckluZm86bmlsXSBjbGllbnQ6SVhD
bGllbnRJZGVudGlmaWVyQXBwbGllZEZvciBlcnJvcjomZXJyb3JdOworCisgICAgQk9PTCBjcmVh
dGVkID0gTk87CisgICAgZXJyb3IgPSBuaWw7CisgICAgbV9hcHBJbnN0YWxsQ29vcmRpbmF0b3Ig
PSBbSVhSZXN0b3JpbmdEZW1vdGVkQXBwSW5zdGFsbENvb3JkaW5hdG9yIGNvb3JkaW5hdG9yRm9y
QXBwV2l0aEJ1bmRsZUlEOmJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkgd2l0aENsaWVudElEOklYQ2xp
ZW50SWRlbnRpZmllckFwcGxpZWRGb3IgY3JlYXRlSWZOb3RFeGlzdGluZzpZRVMgY3JlYXRlZDom
Y3JlYXRlZCBlcnJvcjomZXJyb3JdOworCisgICAgaWYgKCFtX2FwcEluc3RhbGxDb29yZGluYXRv
ciB8fCBlcnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygi
VW5hYmxlIHRvIGNyZWF0ZSBpbnN0YWxsIGNvb3JkaW5hdGlvciBmb3IgYXBwIGJ1bmRsZSBpZGVu
dGlmaWVyICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSkpOworICAgICAgICBidW5k
bGVDcmVhdGlvbkZhaWxlZChlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIWNyZWF0ZWQpIHsKKyAgICAgICAgYnJvYWRjYXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmco
IkV4aXN0aW5nIGluc3RhbGwgY29vcmRpbmF0aW9yIGZvciBhcHAgYnVuZGxlIGlkZW50aWZpZXIg
IiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIHdhcyBmb3VuZC4gVGhpcyBpcyB1
bmV4cGVjdGVkLiIpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9hcHBJbnN0YWxsT2JzZXJ2ZXIgPSBhZG9wdE5T
KFtbX1dLQXBwSW5zdGFsbENvb3JkaW5hdG9yT2JzZXJ2ZXIgYWxsb2NdIGluaXRXaXRoSUNBcHBC
dW5kbGU6KnRoaXNdKTsKKyAgICBtX2FwcEluc3RhbGxDb29yZGluYXRvci5nZXQoKS5vYnNlcnZl
ciA9IG1fYXBwSW5zdGFsbE9ic2VydmVyLmdldCgpOworCisgICAgUmV0YWluUHRyPElYUGxhY2Vo
b2xkZXI+IHBsYWNlaG9sZGVyID0gYWRvcHROUyhbW0lYUGxhY2Vob2xkZXIgYWxsb2NdIGluaXRB
cHBQbGFjZWhvbGRlcldpdGhCdW5kbGVOYW1lOihOU1N0cmluZyAqKW1fb3JpZ2luU3RyaW5nIGJ1
bmRsZUlEOmJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkgaW5zdGFsbFR5cGU6TFNJbnN0YWxsVHlwZUlu
dGVudGlvbmFsRG93bmdyYWRlIGNsaWVudDpJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yXSk7
CisKKyAgICBSZXRhaW5QdHI8SVhQbGFjZWhvbGRlckF0dHJpYnV0ZXM+IHBsYWNlaG9sZGVyQXR0
cmlidXRlcyA9IGFkb3B0TlMoW0lYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzIG5ld10pOworICAgIHBs
YWNlaG9sZGVyQXR0cmlidXRlcy5nZXQoKS5sYXVuY2hQcm9oaWJpdGVkID0gWUVTOworCisgICAg
W3BsYWNlaG9sZGVyIHNldFBsYWNlaG9sZGVyQXR0cmlidXRlczpwbGFjZWhvbGRlckF0dHJpYnV0
ZXMuZ2V0KCkgZXJyb3I6JmVycm9yXTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgYnJvYWRj
YXN0RGVidWdNZXNzYWdlKG1ha2VTdHJpbmcoIlVuYWJsZSB0byBzZXQgcGxhY2Vob2xkZXIgYXR0
cmlidXRlcyBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBF
cnJvcjogIiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNy
ZWF0aW9uRmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TRGlj
dGlvbmFyeSAqZW50aXRsZW1lbnRzRGljdGlvbmFyeSA9IEB7CisgICAgICAgIEAiY29tLmFwcGxl
LnByaXZhdGUudXNlcm5vdGlmaWNhdGlvbnMuYnVuZGxlLWlkZW50aWZpZXJzIjogYnVuZGxlSWRl
bnRpZmllci5nZXQoKSwKKyAgICAgICAgQCJjb20uYXBwbGUucHJpdmF0ZS51c2Vybm90aWZpY2F0
aW9ucy5ub3RpZmljYXRpb24tc2ltdWxhdG9yIjogQFlFUywKKyAgICAgICAgQCJjb20uYXBwbGUu
ZGV2ZWxvcGVyLmFwcC1tYW5hZ2VtZW50LWRvbWFpbiI6IHB1c2hCdW5kbGVBcHBNYW5hZ2VtZW50
RG9tYWluCisgICAgfTsKKyAgICBSZXRhaW5QdHI8SVhQcm9taXNlZEluTWVtb3J5RGljdGlvbmFy
eT4gZW50aXRsZW1lbnRzUHJvbWlzZSA9IGFkb3B0TlMoW1tJWFByb21pc2VkSW5NZW1vcnlEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE5hbWU6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJF
bnRpdGxlbWVudHMgUHJvbWlzZSBmb3IgJUAiLCBidW5kbGVJZGVudGlmaWVyLmdldCgpXSBjbGll
bnQ6SVhDbGllbnRJZGVudGlmaWVyQXBwbGllZEZvciBkaWN0aW9uYXJ5OmVudGl0bGVtZW50c0Rp
Y3Rpb25hcnldKTsKKworICAgIGlmICghZW50aXRsZW1lbnRzUHJvbWlzZSkgeworICAgICAgICBi
cm9hZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiVW5hYmxlIHRvIGNyZWF0ZSBwbGFjZWhv
bGRlciBlbnRpdGxlbWVudHMgcHJvbWlzZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVu
dGlmaWVyLmdldCgpKSkpOworICAgICAgICBidW5kbGVDcmVhdGlvbkZhaWxlZChlcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlcnJvciA9IG5pbDsKKyAgICBpZiAoIVtwbGFj
ZWhvbGRlciBzZXRFbnRpdGxlbWVudHNQcm9taXNlOmVudGl0bGVtZW50c1Byb21pc2UuZ2V0KCkg
ZXJyb3I6JmVycm9yXSB8fCBlcnJvcikgeworICAgICAgICBicm9hZGNhc3REZWJ1Z01lc3NhZ2Uo
bWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCBwbGFjZWhvbGRlciBlbnRpdGxlbWVudHMgcHJvbWlz
ZSBmb3IgYnVuZGxlICIsIFN0cmluZyhidW5kbGVJZGVudGlmaWVyLmdldCgpKSwgIiBFcnJvcjog
IiwgU3RyaW5nKFtlcnJvciBkZXNjcmlwdGlvbl0pKSk7CisgICAgICAgIGJ1bmRsZUNyZWF0aW9u
RmFpbGVkKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEJPT0wgcmVzdWx0
ID0gW3BsYWNlaG9sZGVyIHNldENvbmZpZ3VyYXRpb25Db21wbGV0ZVdpdGhFcnJvcjomZXJyb3Jd
OworICAgIGlmICghcmVzdWx0IHx8IGVycm9yKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVnTWVz
c2FnZShtYWtlU3RyaW5nKCJGYWlsZWQgdG8gc2V0IHBsYWNlaG9sZGVyIGVudGl0bGVtZW50cyBw
cm9taXNlIGNvbXBsZXRlIGZvciBidW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0
KCkpLCAiIEVycm9yOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsKKyAgICAgICAg
YnVuZGxlQ3JlYXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgW21fYXBwSW5zdGFsbENvb3JkaW5hdG9yIHNldFBsYWNlaG9sZGVyUHJvbWlzZTpwbGFjZWhv
bGRlci5nZXQoKSBlcnJvcjomZXJyb3JdOworICAgIGlmIChlcnJvcikgeworICAgICAgICBicm9h
ZGNhc3REZWJ1Z01lc3NhZ2UobWFrZVN0cmluZygiRmFpbGVkIHRvIHNldCBwbGFjZWhvbGRlciBw
cm9taXNlIGZvciBidW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIEVy
cm9yOiAiLCBTdHJpbmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsKKyAgICAgICAgYnVuZGxlQ3Jl
YXRpb25GYWlsZWQoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmV0YWlu
UHRyPElYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2Zlcj4gZGF0YVByb21pc2UgPSBhZG9wdE5TKFtb
SVhQcm9taXNlZE91dE9mQmFuZFRyYW5zZmVyIGFsbG9jXSBpbml0V2l0aE5hbWU6QCJFbXB0eSB1
c2VyIGRhdGEgcHJvbWlzZSIgY2xpZW50OklYQ2xpZW50SWRlbnRpZmllckFwcGxpZWRGb3IgZGlz
a1NwYWNlTmVlZGVkOjBdKTsKKyAgICBkYXRhUHJvbWlzZS5nZXQoKS5wZXJjZW50Q29tcGxldGUg
PSAxLjA7CisgICAgZGF0YVByb21pc2UuZ2V0KCkuY29tcGxldGUgPSBZRVM7CisKKyAgICBbbV9h
cHBJbnN0YWxsQ29vcmRpbmF0b3Igc2V0VXNlckRhdGFQcm9taXNlOmRhdGFQcm9taXNlLmdldCgp
IGVycm9yOiZlcnJvcl07CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGJyb2FkY2FzdERlYnVn
TWVzc2FnZShtYWtlU3RyaW5nKCJGYWlsZWQgdG8gc2V0IHVzZXIgZGF0YSBwcm9taXNlIGZvciBi
dW5kbGUgIiwgU3RyaW5nKGJ1bmRsZUlkZW50aWZpZXIuZ2V0KCkpLCAiIEVycm9yOiAiLCBTdHJp
bmcoW2Vycm9yIGRlc2NyaXB0aW9uXSkpKTsKKyAgICAgICAgYnVuZGxlQ3JlYXRpb25GYWlsZWQo
ZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIElDQXBwQnVuZGxlOjpi
dW5kbGVDcmVhdGlvblN1Y2NlZWRlZCgpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+ZGlkQ3JlYXRlQXBwQnVuZGxlKCp0aGlzLCBQdXNoQXBwQnVuZGxlQ3JlYXRpb25S
ZXN1bHQ6OlN1Y2Nlc3MpOworCit9CisKK3ZvaWQgSUNBcHBCdW5kbGU6OmJ1bmRsZUNyZWF0aW9u
RmFpbGVkKE5TRXJyb3IgKmVycm9yKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9j
bGllbnQtPmRpZENyZWF0ZUFwcEJ1bmRsZSgqdGhpcywgUHVzaEFwcEJ1bmRsZUNyZWF0aW9uUmVz
dWx0OjpGYWlsdXJlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViUHVzaEQKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9JbnN0YWxsQ29vcmRpbmF0aW9uU1BJLmggYi9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL0luc3RhbGxDb29yZGluYXRpb25TUEkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjZhZmM4NmQyMWU2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvd2VicHVzaGQvSW5zdGFsbENvb3JkaW5hdGlvblNQSS5oCkBAIC0wLDAgKzEsMTEw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIFBMQVRGT1JNKElPUykKKyNpZiBVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQorCisjaW1wb3J0IDxJbnN0YWxsQ29vcmRpbmF0aW9uL0lYQXBwSW5zdGFsbENvb3Jk
aW5hdG9yLmg+CisjaW1wb3J0IDxJbnN0YWxsQ29vcmRpbmF0aW9uL0luc3RhbGxDb29yZGluYXRp
b24uaD4KKworI2Vsc2UKKworI2luY2x1ZGUgIkxhdW5jaFNlcnZpY2VzU1BJLmgiCisKK05TX0FT
U1VNRV9OT05OVUxMX0JFR0lOCisKK3R5cGVkZWYgZW51bSA6IE5TVUludGVnZXIgeworfSBJWENv
b3JkaW5hdG9yUHJvZ3Jlc3NQaGFzZTsKKwordHlwZWRlZiBlbnVtIDogTlNVSW50ZWdlciB7Cisg
ICAgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3JQbGFjZWhvbGRlclByb21pc2UgPSAxLAorfSBJWEFw
cEluc3RhbGxDb29yZGluYXRvclByb21pc2VJZGVudGlmaWVyOworCit0eXBlZGVmIGVudW0gOiBO
U1VJbnRlZ2VyIHsKKyAgICBJWENsaWVudElkZW50aWZpZXJBcHBsaWVkRm9yID0gMTksCit9IElY
Q2xpZW50SWRlbnRpZmllcjsKKworQGNsYXNzIExTQXBwbGljYXRpb25SZWNvcmQ7CitAY2xhc3Mg
SVhBcHBJbnN0YWxsQ29vcmRpbmF0b3I7CitAY2xhc3MgSVhQbGFjZWhvbGRlcjsKK0BjbGFzcyBJ
WFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXI7CisKK0Bwcm90b2NvbCBJWEFwcEluc3RhbGxDb29y
ZGluYXRvck9ic2VydmVyIDxOU09iamVjdD4KK0BvcHRpb25hbAorLSAodm9pZCljb29yZGluYXRv
ckRpZFJlZ2lzdGVyRm9yT2JzZXJ2YXRpb246KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0
b3IgKiljb29yZGluYXRvcjsKKy0gKHZvaWQpY29vcmRpbmF0b3JTaG91bGRQcmlvcml0aXplOihu
b25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3I7CistICh2b2lkKWNv
b3JkaW5hdG9yU2hvdWxkUmVzdW1lOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5hdG9yICop
Y29vcmRpbmF0b3I7CistICh2b2lkKWNvb3JkaW5hdG9yU2hvdWxkUGF1c2U6KG5vbm51bGwgSVhB
cHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvcjsKKy0gKHZvaWQpY29vcmRpbmF0b3I6
KG5vbm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBkaWRVcGRhdGVQ
cm9ncmVzczooZG91YmxlKXBlcmNlbnRDb21wbGV0ZSBmb3JQaGFzZTooSVhDb29yZGluYXRvclBy
b2dyZXNzUGhhc2UpcGhhc2Ugb3ZlcmFsbFByb2dyZXNzOihkb3VibGUpb3ZlcmFsbFByb2dyZXNz
OworLSAodm9pZCljb29yZGluYXRvckRpZENvbXBsZXRlU3VjY2Vzc2Z1bGx5Oihub25udWxsIElY
QXBwSW5zdGFsbENvb3JkaW5hdG9yICopY29vcmRpbmF0b3IgZm9yQXBwbGljYXRpb25SZWNvcmQ6
KG51bGxhYmxlIExTQXBwbGljYXRpb25SZWNvcmQgKilhcHBSZWNvcmQ7CistICh2b2lkKWNvb3Jk
aW5hdG9yRGlkSW5zdGFsbFBsYWNlaG9sZGVyOihub25udWxsIElYQXBwSW5zdGFsbENvb3JkaW5h
dG9yICopY29vcmRpbmF0b3IgZm9yQXBwbGljYXRpb25SZWNvcmQ6KG51bGxhYmxlIExTQXBwbGlj
YXRpb25SZWNvcmQgKilwbGFjZWhvbGRlclJlY29yZDsKKy0gKHZvaWQpY29vcmRpbmF0b3I6KG5v
bm51bGwgSVhBcHBJbnN0YWxsQ29vcmRpbmF0b3IgKiljb29yZGluYXRvciBjYW5jZWxlZFdpdGhS
ZWFzb246KG5vbm51bGwgTlNFcnJvciAqKWNhbmNlbFJlYXNvbiBjbGllbnQ6KElYQ2xpZW50SWRl
bnRpZmllciljbGllbnQ7CitAZW5kCisKK3R5cGVkZWYgdm9pZCAoXklYQXBwSW5zdGFsbENvb3Jk
aW5hdG9yRXJyb3JDb21wbGV0aW9uKShOU0Vycm9yICogX051bGxhYmxlIGVycm9yKTsKKworQGlu
dGVyZmFjZSBJWEFwcEluc3RhbGxDb29yZGluYXRvcgorKyAodm9pZCl1bmluc3RhbGxBcHBXaXRo
QnVuZGxlSUQ6KE5TU3RyaW5nICopYnVuZGxlSUQgcmVxdWVzdFVzZXJDb25maXJtYXRpb246KEJP
T0wpcmVxdWVzdFVzZXJDb25maXJtYXRpb24gY29tcGxldGlvbjooSVhBcHBJbnN0YWxsQ29vcmRp
bmF0b3JFcnJvckNvbXBsZXRpb24pY29tcGxldGlvbjsKKysgKEJPT0wpY2FuY2VsQ29vcmRpbmF0
b3JGb3JBcHBXaXRoQnVuZGxlSUQ6KE5TU3RyaW5nICopYnVuZGxlSUQgd2l0aFJlYXNvbjooTlNF
cnJvciAqKWNhbmNlbFJlYXNvbiBjbGllbnQ6KElYQ2xpZW50SWRlbnRpZmllciljbGllbnQgZXJy
b3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworKyAoaW5zdGFuY2V0eXBlKWNvb3JkaW5hdG9yRm9y
QXBwV2l0aEJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlEIHdpdGhDbGllbnRJRDooSVhDbGll
bnRJZGVudGlmaWVyKWlkZW50aXR5IGNyZWF0ZUlmTm90RXhpc3Rpbmc6KEJPT0wpY3JlYXRlIGNy
ZWF0ZWQ6KEJPT0wgKilvdXRfY3JlYXRlZCBlcnJvcjooTlNFcnJvciAqKilvdXRfZXJyb3I7CitA
cHJvcGVydHkgKG5vbmF0b21pYywgbnVsbGFibGUsIHdlYWspIGlkPElYQXBwSW5zdGFsbENvb3Jk
aW5hdG9yT2JzZXJ2ZXI+IG9ic2VydmVyOworLSAoQk9PTClzZXRQbGFjZWhvbGRlclByb21pc2U6
KElYUGxhY2Vob2xkZXIgKilwbGFjZWhvbGRlclByb21pc2UgZXJyb3I6KE5TRXJyb3IgKiopb3V0
X2Vycm9yOworLSAoQk9PTClzZXRVc2VyRGF0YVByb21pc2U6KElYUHJvbWlzZWRPdXRPZkJhbmRU
cmFuc2ZlciAqKXVzZXJEYXRhIGVycm9yOihOU0Vycm9yICoqKW91dF9lcnJvcjsKK0BlbmQKKwor
QGludGVyZmFjZSBJWFJlc3RvcmluZ0RlbW90ZWRBcHBJbnN0YWxsQ29vcmRpbmF0b3IgOiBJWEFw
cEluc3RhbGxDb29yZGluYXRvcgorQGVuZAorCitAaW50ZXJmYWNlIElYT3duZWREYXRhUHJvbWlz
ZSA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRlcmZhY2UgSVhQcm9taXNlZEluTWVtb3J5RGljdGlv
bmFyeSA6IElYT3duZWREYXRhUHJvbWlzZQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoTmFtZToo
TlNTdHJpbmcgKiluYW1lIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVyKWlkZW50aXR5IGRpY3Rp
b25hcnk6KE5TRGljdGlvbmFyeSAqKWRpY3Rpb25hcnk7CitAZW5kCisKK0BpbnRlcmZhY2UgSVhQ
bGFjZWhvbGRlckF0dHJpYnV0ZXMgOiBOU09iamVjdAorQHByb3BlcnR5IChub25hdG9taWMpIEJP
T0wgbGF1bmNoUHJvaGliaXRlZDsKK0BlbmQKKworQGludGVyZmFjZSBJWFBsYWNlaG9sZGVyIDog
TlNPYmplY3QKKy0gKGluc3RhbmNldHlwZSlpbml0QXBwUGxhY2Vob2xkZXJXaXRoQnVuZGxlTmFt
ZTooTlNTdHJpbmcgKiluYW1lIGJ1bmRsZUlEOihOU1N0cmluZyAqKWJ1bmRsZUlEIGluc3RhbGxU
eXBlOihMU0luc3RhbGxUeXBlKWluc3RhbGxUeXBlIGNsaWVudDooSVhDbGllbnRJZGVudGlmaWVy
KWlkZW50aXR5IE5TX0RFU0lHTkFURURfSU5JVElBTElaRVI7CistIChCT09MKXNldFBsYWNlaG9s
ZGVyQXR0cmlidXRlczoobm9ubnVsbCBJWFBsYWNlaG9sZGVyQXR0cmlidXRlcyAqKWF0dHJpYnV0
ZXMgZXJyb3I6KE5TRXJyb3IgKiopb3V0X2Vycm9yOworLSAoQk9PTClzZXRFbnRpdGxlbWVudHNQ
cm9taXNlOihub25udWxsIElYT3duZWREYXRhUHJvbWlzZSAqKWVudGl0bGVtZW50cyBlcnJvcjoo
TlNFcnJvciAqIF9fYXV0b3JlbGVhc2luZyBfTnVsbGFibGUgKiBfTnVsbGFibGUpb3V0X2Vycm9y
OworLSAoQk9PTClzZXRDb25maWd1cmF0aW9uQ29tcGxldGVXaXRoRXJyb3I6KE5TRXJyb3IgKiop
b3V0X2Vycm9yOworQGVuZAorCitAaW50ZXJmYWNlIElYT3BhcXVlRGF0YVByb21pc2UgOiBOU09i
amVjdAorQGVuZAorCitAaW50ZXJmYWNlIElYUHJvbWlzZWRPdXRPZkJhbmRUcmFuc2ZlciA6IElY
T3BhcXVlRGF0YVByb21pc2UKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIGNvbXBsZXRlOwor
QHByb3BlcnR5IChub25hdG9taWMpIGRvdWJsZSBwZXJjZW50Q29tcGxldGU7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhOYW1lOihOU1N0cmluZyAqKW5hbWUgY2xpZW50OihJWENsaWVudElkZW50
aWZpZXIpaWRlbnRpdHkgZGlza1NwYWNlTmVlZGVkOih1aW50NjRfdCl0b3RhbEJ5dGVzOworQGVu
ZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93ZWJwdXNoZC9MYXVuY2hTZXJ2aWNlc1NQSS5oIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9M
YXVuY2hTZXJ2aWNlc1NQSS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uMDRlNzM4YTRhNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNo
ZC9MYXVuY2hTZXJ2aWNlc1NQSS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYg
UExBVEZPUk0oSU9TKQorI2lmIFVTRShBUFBMRV9JTlRFUk5BTF9TREspCisKKy8vIFRoaXMgc3Bh
Y2UgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rCisKKyNlbHNlCisKK05TX0FTU1VNRV9OT05OVUxM
X0JFR0lOCisKK3R5cGVkZWYgTlNfRU5VTShOU1VJbnRlZ2VyLCBMU0luc3RhbGxUeXBlKSB7Cisg
ICAgTFNJbnN0YWxsVHlwZUludGVudGlvbmFsRG93bmdyYWRlID0gOAorfTsKKworQGludGVyZmFj
ZSBMU1JlY29yZCA6IE5TT2JqZWN0CitAZW5kCisKK0BpbnRlcmZhY2UgTFNCdW5kbGVSZWNvcmQg
OiBMU1JlY29yZAorQHByb3BlcnR5IChyZWFkb25seSwgbnVsbGFibGUpIE5TU3RyaW5nICpidW5k
bGVJZGVudGlmaWVyOworQGVuZAorCitAaW50ZXJmYWNlIExTQXBwbGljYXRpb25SZWNvcmQgOiBM
U0J1bmRsZVJlY29yZAorQHByb3BlcnR5IChyZWFkb25seSkgQk9PTCBwbGFjZWhvbGRlcjsKK0Bw
cm9wZXJ0eSAocmVhZG9ubHkpIE5TU3RyaW5nICptYW5hZ2VtZW50RG9tYWluOworCistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhCdW5kbGVJZGVudGlmaWVyOihOU1N0cmluZyAqKWJ1bmRsZUlkZW50
aWZpZXIgYWxsb3dQbGFjZWhvbGRlcjooQk9PTClhbGxvd1BsYWNlaG9sZGVyIGVycm9yOihOU0Vy
cm9yICoqKW91dEVycm9yOworQGVuZAorCitAaW50ZXJmYWNlIExTRW51bWVyYXRvcjxfX2NvdmFy
aWFudCBPYmplY3RUeXBlPiA6IE5TRW51bWVyYXRvcjxPYmplY3RUeXBlPgorQGVuZAorCit0eXBl
ZGVmIE5TX09QVElPTlModWludDY0X3QsIExTQXBwbGljYXRpb25FbnVtZXJhdGlvbk9wdGlvbnMp
IHsKKyAgICBMU0FwcGxpY2F0aW9uRW51bWVyYXRpb25PcHRpb25zRW51bWVyYXRlUGxhY2Vob2xk
ZXJzID0gKDEgPDwgNikKK307CisKK0BpbnRlcmZhY2UgTFNBcHBsaWNhdGlvblJlY29yZCAoRW51
bWVyYXRpb24pCisrIChMU0VudW1lcmF0b3I8TFNBcHBsaWNhdGlvblJlY29yZCAqPiAqKWVudW1l
cmF0b3JXaXRoT3B0aW9uczooTFNBcHBsaWNhdGlvbkVudW1lcmF0aW9uT3B0aW9ucylvcHRpb25z
OworQGVuZAorCitOU19BU1NVTUVfTk9OTlVMTF9FTkQKKworI2VuZGlmIC8vIFVTRShBUFBMRV9J
TlRFUk5BTF9TREspCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmggYi9Tb3VyY2UvV2ViS2l0L3dlYnB1c2hk
L1B1c2hBcHBCdW5kbGUuaAppbmRleCA4YTZkNTdjYzZmNWIuLmU5ODVlMzIxMDE1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmgKKysrIGIvU291cmNl
L1dlYktpdC93ZWJwdXNoZC9QdXNoQXBwQnVuZGxlLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBAY2xhc3MgTlNFcnJvcjsKIApAQCAtNTIsNyArNTIs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZUFwcEJ1bmRsZShQdXNoQXBw
QnVuZGxlJiwgUHVzaEFwcEJ1bmRsZUNyZWF0aW9uUmVzdWx0KSA9IDA7CiB9OwogCi1jbGFzcyBQ
dXNoQXBwQnVuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8UHVzaEFwcEJ1bmRsZT4geworY2xhc3Mg
UHVzaEFwcEJ1bmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQdXNoQXBwQnVuZGxl
PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+UHVzaEFwcEJ1bmRsZSgpOwogICAgIHZvaWQgZGV0
YWNoRnJvbUNsaWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQ
dXNoRGFlbW9uLm1tIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9XZWJQdXNoRGFlbW9uLm1tCmlu
ZGV4IGFkZDZlM2Q4YWRmZS4uMWRhMDY4MDEwNDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3dlYnB1c2hkL1dlYlB1c2hEYWVtb24ubW0KKysrIGIvU291cmNlL1dlYktpdC93ZWJwdXNoZC9X
ZWJQdXNoRGFlbW9uLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJEYWVtb25FbmNvZGVy
LmgiCiAjaW1wb3J0ICJEYWVtb25VdGlsaXRpZXMuaCIKICNpbXBvcnQgIkhhbmRsZU1lc3NhZ2Uu
aCIKKyNpbXBvcnQgIklDQXBwQnVuZGxlLmgiCiAjaW1wb3J0ICJNb2NrQXBwQnVuZGxlUmVnaXN0
cnkuaCIKIAogI2ltcG9ydCA8V2ViQ29yZS9QdXNoUGVybWlzc2lvblN0YXRlLmg+CkBAIC00NDEs
OCArNDQyLDExIEBAIHZvaWQgRGFlbW9uOjpnZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRp
b25QZXJtaXNzaW9ucyhDbGllbnRDb25uZWN0aW9uKiBjb25uCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG5lZWQgcGxhdGZvcm0tc3BlY2lmaWMgaW1w
bGVtZW50YXRpb25zIGZvciByZWFsIHdvcmxkIGJ1bmRsZXMgb25jZSBpbXBsZW1lbnRlZC4KLSAg
ICByZXBseVNlbmRlcih7IH0pOworI2lmIEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5E
TEVTKQorICAgIElDQXBwQnVuZGxlOjpnZXRPcmlnaW5zV2l0aFJlZ2lzdHJhdGlvbnMoKmNvbm5l
Y3Rpb24sIFdURk1vdmUocmVwbHlTZW5kZXIpKTsKKyNlbHNlCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyNlbmRpZgogfQogCiB2b2lkIERhZW1vbjo6ZGVsZXRlUHVzaEFuZE5v
dGlmaWNhdGlvblJlZ2lzdHJhdGlvbihDbGllbnRDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25z
dCBTdHJpbmcmIG9yaWdpblN0cmluZywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJp
bmcmKT4mJiByZXBseVNlbmRlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCA0YTU5MDk3N2IyM2EuLmM0ZGIxZmJjNmJiMCAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDIyLTAyLTE3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYW4gSW5zdGFsbENvb3JkaW5hdGlvbiB3ZWJwdXNoZCBiYWNrZW5kCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM3MTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9XZWJQdXNoRGFlbW9uLm1tOgorCiAyMDIyLTAyLTE1ICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEhlYXBUeXBlIGFuIGVudW0gY2xh
c3MuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dl
YlB1c2hEYWVtb24ubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dl
YlB1c2hEYWVtb24ubW0KaW5kZXggYjdiMzRiNmNhYTU0Li5lY2Y5MWNkYmM1MzMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV2ViUHVzaERhZW1vbi5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dlYlB1c2hEYWVt
b24ubW0KQEAgLTcwNyw2ICs3MDcsMTAwIEBAIFRFU1RfRihXZWJQdXNoRFRlc3QsIFVuc3Vic2Ny
aWJlVGVzdCkKICAgICBBU1NFUlRfVFJVRShbb2JqIGlzRXF1YWw6ZXhwZWN0ZWRdKTsKIH0KIAor
I2lmIEVOQUJMRShJTlNUQUxMX0NPT1JESU5BVElPTl9CVU5ETEVTKQorI2lmIFVTRShBUFBMRV9J
TlRFUk5BTF9TREspCitzdGF0aWMgdm9pZCBkZWxldGVBbGxSZWdpc3RyYXRpb25zRm9yRGF0YVN0
b3JlKFdLV2Vic2l0ZURhdGFTdG9yZSAqZGF0YVN0b3JlKQoreworICAgIF9fYmxvY2sgYm9vbCBv
cmlnaW5PcGVyYXRpb25Eb25lID0gZmFsc2U7CisgICAgX19ibG9jayBSZXRhaW5QdHI8TlNTZXQ8
V0tTZWN1cml0eU9yaWdpbiAqPj4gb3JpZ2luU2V0OworICAgIFtkYXRhU3RvcmUgX2dldE9yaWdp
bnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25zOl4oTlNTZXQ8V0tTZWN1cml0eU9y
aWdpbiAqPiAqb3JpZ2lucykgeworICAgICAgICBvcmlnaW5TZXQgPSBvcmlnaW5zOworICAgICAg
ICBvcmlnaW5PcGVyYXRpb25Eb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJm9yaWdpbk9wZXJhdGlvbkRvbmUpOworCisgICAgaWYgKCFbb3JpZ2luU2V0
IGNvdW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX19ibG9jayBzaXplX3QgZGVsZXRlZE9y
aWdpbnMgPSAwOworICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSBmYWxzZTsKKyAgICBmb3IgKFdL
U2VjdXJpdHlPcmlnaW4gKm9yaWdpbiBpbiBvcmlnaW5TZXQuZ2V0KCkpIHsKKyAgICAgICAgW2Rh
dGFTdG9yZSBfZGVsZXRlUHVzaEFuZE5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbjpvcmlnaW4gY29t
cGxldGlvbkhhbmRsZXI6XihOU0Vycm9yICplcnJvcikgeworICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKCEhZXJyb3IpOworICAgICAgICAgICAgaWYgKCsrZGVsZXRlZE9yaWdpbnMgPT0gW29yaWdp
blNldCBjb3VudF0pCisgICAgICAgICAgICAgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRydWU7
CisgICAgICAgIH1dOworICAgIH0KKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJm9yaWdp
bk9wZXJhdGlvbkRvbmUpOworCisgICAgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAg
IFtkYXRhU3RvcmUgX2dldE9yaWdpbnNXaXRoUHVzaEFuZE5vdGlmaWNhdGlvblBlcm1pc3Npb25z
Ol4oTlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPiAqb3JpZ2lucykgeworICAgICAgICBFWFBFQ1Rf
RVEoW29yaWdpbnMgY291bnRdLCAwdSk7CisgICAgICAgIG9yaWdpbk9wZXJhdGlvbkRvbmUgPSB0
cnVlOworICAgIH1dOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmb3JpZ2luT3BlcmF0
aW9uRG9uZSk7CisKK30KKworVEVTVChXZWJQdXNoRCwgSW5zdGFsbENvb3JkaW5hdGlvbkJ1bmRs
ZXMpCit7CisgICAgTlNVUkwgKnRlbXBEaXJlY3RvcnkgPSBzZXRVcFRlc3RXZWJQdXNoRCgpOwor
CisgICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRvcHROUyhbX1dLV2Vic2l0ZURh
dGFTdG9yZUNvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5n
ZXQoKS53ZWJQdXNoTWFjaFNlcnZpY2VOYW1lID0gQCJvcmcud2Via2l0LndlYnB1c2h0ZXN0ZGFl
bW9uLnNlcnZpY2UiOworICAgIGF1dG8gZGF0YVN0b3JlID0gYWRvcHROUyhbW1dLV2Vic2l0ZURh
dGFTdG9yZSBhbGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpkYXRhU3RvcmVDb25maWd1cmF0
aW9uLmdldCgpXSk7CisKKyAgICBkZWxldGVBbGxSZWdpc3RyYXRpb25zRm9yRGF0YVN0b3JlKGRh
dGFTdG9yZS5nZXQoKSk7CisKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyYXRpb24uZ2V0
KCkud2Vic2l0ZURhdGFTdG9yZSA9IGRhdGFTdG9yZS5nZXQoKTsKKyAgICBbY29uZmlndXJhdGlv
bi5nZXQoKS5wcmVmZXJlbmNlcyBfc2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQ6WUVTXTsKKyAgICBm
b3IgKF9XS0V4cGVyaW1lbnRhbEZlYXR1cmUgKmZlYXR1cmUgaW4gW1dLUHJlZmVyZW5jZXMgX2V4
cGVyaW1lbnRhbEZlYXR1cmVzXSkgeworICAgICAgICBpZiAoW2ZlYXR1cmUua2V5IGlzRXF1YWxU
b1N0cmluZzpAIkJ1aWx0SW5Ob3RpZmljYXRpb25zRW5hYmxlZCJdKQorICAgICAgICAgICAgW1tj
b25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSBfc2V0RW5hYmxlZDpZRVMgZm9yRmVhdHVyZTpmZWF0
dXJlXTsKKyAgICB9CisKKyAgICBhdXRvIGhhbmRsZXIgPSBhZG9wdE5TKFtbVGVzdFVSTFNjaGVt
ZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBbY29uZmlndXJhdGlvbiBzZXRVUkxTY2hlbWVI
YW5kbGVyOmhhbmRsZXIuZ2V0KCkgZm9yVVJMU2NoZW1lOkAidGVzdGluZyJdOworCisgICAgW2hh
bmRsZXIgc2V0U3RhcnRVUkxTY2hlbWVUYXNrSGFuZGxlcjpeKFdLV2ViVmlldyAqLCBpZDxXS1VS
TFNjaGVtZVRhc2s+IHRhc2spIHsKKyAgICAgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tO
U1VSTFJlc3BvbnNlIGFsbG9jXSBpbml0V2l0aFVSTDp0YXNrLnJlcXVlc3QuVVJMIE1JTUVUeXBl
OkAidGV4dC9odG1sIiBleHBlY3RlZENvbnRlbnRMZW5ndGg6MCB0ZXh0RW5jb2RpbmdOYW1lOm5p
bF0pOworICAgICAgICBbdGFzayBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCldOwor
ICAgICAgICBbdGFzayBkaWRSZWNlaXZlRGF0YTpbTlNEYXRhIGRhdGFXaXRoQnl0ZXM6bWFpbkJ5
dGVzIGxlbmd0aDpzdHJsZW4obWFpbkJ5dGVzKV1dOworICAgICAgICBbdGFzayBkaWRGaW5pc2hd
OworICAgIH1dOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgYXV0byB1aURlbGVnYXRlID0gYWRvcHRO
UyhbW05vdGlmaWNhdGlvblBlcm1pc3Npb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3
ZWJWaWV3IHNldFVJRGVsZWdhdGU6dWlEZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAidGVzdGluZzovL21haW4vaW5kZXguaHRtbCJdXV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZhbGVydFJlY2VpdmVkKTsKKworICAgIGFsZXJ0UmVjZWl2ZWQgPSBmYWxzZTsK
KyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAidGVzdGluZzovL3NlY29uZGFyeS9pbmRleC5odG1sIl1dXTsK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmFsZXJ0UmVjZWl2ZWQpOworCisgICAgc3Rh
dGljIGJvb2wgb3JpZ2luT3BlcmF0aW9uRG9uZSA9IGZhbHNlOworICAgIHN0YXRpYyBSZXRhaW5Q
dHI8TlNTZXQ8V0tTZWN1cml0eU9yaWdpbiAqPj4gb3JpZ2luczsKKyAgICBbZGF0YVN0b3JlIF9n
ZXRPcmlnaW5zV2l0aFB1c2hBbmROb3RpZmljYXRpb25QZXJtaXNzaW9uczpeKE5TU2V0PFdLU2Vj
dXJpdHlPcmlnaW4gKj4gKnJhd09yaWdpbnMpIHsKKyAgICAgICAgRVhQRUNUX0VRKFtyYXdPcmln
aW5zIGNvdW50XSwgMnUpOworICAgICAgICBvcmlnaW5zID0gcmF3T3JpZ2luczsKKyAgICAgICAg
b3JpZ2luT3BlcmF0aW9uRG9uZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZvcmlnaW5PcGVyYXRpb25Eb25lKTsKKworICAgIGZvciAoV0tTZWN1cml0eU9y
aWdpbiAqb3JpZ2luIGluIG9yaWdpbnMuZ2V0KCkpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoW29y
aWdpbi5wcm90b2NvbCBpc0VxdWFsVG9TdHJpbmc6QCJ0ZXN0aW5nIl0pOworICAgICAgICBFWFBF
Q1RfVFJVRShbb3JpZ2luLmhvc3QgaXNFcXVhbFRvU3RyaW5nOkAibWFpbiJdIHx8IFtvcmlnaW4u
aG9zdCBpc0VxdWFsVG9TdHJpbmc6QCJzZWNvbmRhcnkiXSk7CisgICAgfQorCisgICAgZGVsZXRl
QWxsUmVnaXN0cmF0aW9uc0ZvckRhdGFTdG9yZShkYXRhU3RvcmUuZ2V0KCkpOworICAgIGNsZWFu
VXBUZXN0V2ViUHVzaEQodGVtcERpcmVjdG9yeSk7Cit9CisjZW5kaWYgLy8gI2lmIFVTRShBUFBM
RV9JTlRFUk5BTF9TREspCisjZW5kaWYgLy8gRU5BQkxFKElOU1RBTExfQ09PUkRJTkFUSU9OX0JV
TkRMRVMpCisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKIAogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykgfHwgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvV2ViS2l0TGlicmFyaWVzL0No
YW5nZUxvZyBiL1dlYktpdExpYnJhcmllcy9DaGFuZ2VMb2cKaW5kZXggOGQxNmFjYmY1MWEyLi41
ZTM3NGRmZTg0NDYgMTAwNjQ0Ci0tLSBhL1dlYktpdExpYnJhcmllcy9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0TGlicmFyaWVzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIyLTAyLTE3ICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYW4gSW5zdGFs
bENvb3JkaW5hdGlvbiB3ZWJwdXNoZCBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzM3MTQKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4
IENocmlzdGVuc2VuLgorCisgICAgICAgICogV2ViS2l0UHJpdmF0ZUZyYW1ld29ya1N0dWJzL2lP
Uy8xNS9JbnN0YWxsQ29vcmRpbmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRpbmF0aW9uLnRi
ZDogQWRkZWQuCisKIDIwMjItMDItMDMgIFJvYmVydCBKZW5uZXIgIDxKZW5uZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg4OTAyLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0TGlicmFyaWVzL1dlYktpdFByaXZhdGVGcmFtZXdvcmtTdHVicy9pT1MvMTUvSW5zdGFs
bENvb3JkaW5hdGlvbi5mcmFtZXdvcmsvSW5zdGFsbENvb3JkaW5hdGlvbi50YmQgYi9XZWJLaXRM
aWJyYXJpZXMvV2ViS2l0UHJpdmF0ZUZyYW1ld29ya1N0dWJzL2lPUy8xNS9JbnN0YWxsQ29vcmRp
bmF0aW9uLmZyYW1ld29yay9JbnN0YWxsQ29vcmRpbmF0aW9uLnRiZApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM2YmIwZTgzZDQ4OAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdExpYnJhcmllcy9XZWJLaXRQcml2YXRlRnJhbWV3b3JrU3R1YnMvaU9TLzE1L0luc3Rh
bGxDb29yZGluYXRpb24uZnJhbWV3b3JrL0luc3RhbGxDb29yZGluYXRpb24udGJkCkBAIC0wLDAg
KzEsOCBAQAorLS0tICF0YXBpLXRiZC12MworYXJjaHM6ICAgICAgICAgICBbIHg4Nl82NCwgYXJt
NjQsIGFybTY0ZSBdCitpbnN0YWxsLW5hbWU6ICAgICcvU3lzdGVtL0xpYnJhcnkvUHJpdmF0ZUZy
YW1ld29ya3MvSW5zdGFsbENvb3JkaW5hdGlvbi5mcmFtZXdvcmsvSW5zdGFsbENvb3JkaW5hdGlv
bicKK3BsYXRmb3JtOiBpb3MKK2V4cG9ydHM6CisgIC0gYXJjaHM6ICAgICAgICAgICBbIHg4Nl82
NCwgYXJtNjQsIGFybTY0ZSBdCisgICAgb2JqYy1jbGFzc2VzOiAgICBbIElYQXBwSW5zdGFsbENv
b3JkaW5hdG9yLCBJWE9wYXF1ZURhdGFQcm9taXNlLCBJWE93bmVkRGF0YVByb21pc2UsIElYUGxh
Y2Vob2xkZXIsIElYUGxhY2Vob2xkZXJBdHRyaWJ1dGVzLCBJWFByb21pc2VkSW5NZW1vcnlEaWN0
aW9uYXJ5LCBJWFByb21pc2VkT3V0T2ZCYW5kVHJhbnNmZXIsIElYUmVzdG9yaW5nRGVtb3RlZEFw
cEluc3RhbGxDb29yZGluYXRvciBdCisuLi4K
</data>

          </attachment>
      

    </bug>

</bugzilla>