<?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>29469</bug_id>
          
          <creation_ts>2009-09-18 08:28:09 -0700</creation_ts>
          <short_desc>[Qt] Remove support for Qt v4.3 or older versions</short_desc>
          <delta_ts>2009-11-19 06:32:00 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tor Arne Vestbø">vestbo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>jturcotte</cc>
    
    <cc>laszlo.gombos</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>148178</commentid>
    <comment_count>0</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-09-18 08:28:09 -0700</bug_when>
    <thetext>This bug report originated from issue QTBUG-3121
&lt;http://bugreports.qt.nokia.com/browse/QTBUG-3121&gt;

--- Description ---

Support for 4.3 should be removed. We should only support for the two stable releases, 4.4 and 4.5 (upcoming).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164147</commentid>
    <comment_count>1</comment_count>
      <attachid>43342</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2009-11-16 21:02:38 -0800</bug_when>
    <thetext>Created attachment 43342
remove support for Qt 4.3 or earlier version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164207</commentid>
    <comment_count>2</comment_count>
      <attachid>43342</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-11-17 05:40:37 -0800</bug_when>
    <thetext>Comment on attachment 43342
remove support for Qt 4.3 or earlier version

Great patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164319</commentid>
    <comment_count>3</comment_count>
      <attachid>43342</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-17 12:58:01 -0800</bug_when>
    <thetext>Comment on attachment 43342
remove support for Qt 4.3 or earlier version

Rejecting patch 43342 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;]&quot; exit_code: 1
Running build-dumprendertree
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 11628 test cases.
fast/workers/worker-terminate.html -&gt; crashed

Exiting early after 1 failures. 8414 tests run.
253.07s total testing time

8413 test cases (99%) succeeded
1 test case (&lt;1%) crashed
3 test cases (&lt;1%) had stderr output</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164324</commentid>
    <comment_count>4</comment_count>
      <attachid>43342</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-17 13:05:28 -0800</bug_when>
    <thetext>Comment on attachment 43342
remove support for Qt 4.3 or earlier version

Sigh.  Bug 31461.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164734</commentid>
    <comment_count>5</comment_count>
      <attachid>43342</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-18 14:52:09 -0800</bug_when>
    <thetext>Comment on attachment 43342
remove support for Qt 4.3 or earlier version

Rejecting patch 43342 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Kenneth Rohde Christiansen&apos;, &apos;--force&apos;]&quot; exit_code: 1
Last 500 characters of output:
n.cpp
Hunk #1 FAILED at 40.
Hunk #2 succeeded at 274 (offset 62 lines).
Hunk #3 succeeded at 374 (offset 62 lines).
Hunk #4 succeeded at 567 (offset 62 lines).
1 out of 4 hunks FAILED -- saving rejects to file WebKit/qt/QtLauncher/main.cpp.rej
patching file WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
patching file WebKitTools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro
patching file WebKitTools/DumpRenderTree/qt/ImageDiff.pro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164739</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-18 15:00:19 -0800</bug_when>
    <thetext>It looks like the patch bit-rotted while they commit-queue was down.  Sorry. :(  The commit-queue is back, so if you post an updated patch it will be landed immediately after review this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164740</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-18 15:00:45 -0800</bug_when>
    <thetext>Actually I think Laszlo is a committer, so he can update and land his own patch. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164962</commentid>
    <comment_count>8</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2009-11-19 06:32:00 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/51174.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43342</attachid>
            <date>2009-11-16 21:02:38 -0800</date>
            <delta_ts>2009-11-19 06:31:21 -0800</delta_ts>
            <desc>remove support for Qt 4.3 or earlier version</desc>
            <filename>29469.patch</filename>
            <type>text/plain</type>
            <size>122364</size>
            <attacher name="Laszlo Gombos">laszlo.gombos</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxMDYyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMTEtMTYgIExhc3psbyBH
b21ib3MgIDxsYXN6bG8uMS5nb21ib3NAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gUmVtb3ZlIHN1cHBvcnQgZm9yIFF0IHY0
LjMgb3Igb2xkZXIgdmVyc2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI5NDY5CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcm86CisgICAg
ICAgICoganNjLnBybzoKKyAgICAgICAgKiB3dGYvdW5pY29kZS9xdDQvVW5pY29kZVF0NC5oOgor
CiAyMDA5LTExLTE2ICBKb2VyZyBCb3JuZW1hbm4gIDxqb2VyZy5ib3JuZW1hbm5AdHJvbGx0ZWNo
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHJldmlzaW9uIDUxMDYyKQorKysgSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC02MCw5ICs2MCw1IEBAIGluY2x1
ZGUoSmF2YVNjcmlwdENvcmUucHJpKQogCiBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IGdlbmVyYXRl
ZF9maWxlcwogCi1sZXNzVGhhbihRVF9NSU5PUl9WRVJTSU9OLCA0KSB7Ci0gICAgREVGSU5FUyAr
PSBRVF9CRUdJTl9OQU1FU1BBQ0U9IiIgUVRfRU5EX05BTUVTUEFDRT0iIgotfQotCiAqLWcrKyo6
UU1BS0VfQ1hYRkxBR1NfUkVMRUFTRSAtPSAtTzIKICotZysrKjpRTUFLRV9DWFhGTEFHU19SRUxF
QVNFICs9IC1PMwpJbmRleDogSmF2YVNjcmlwdENvcmUvanNjLnBybwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9qc2MucHJvCShyZXZpc2lvbiA1MTA2MikKKysrIEphdmFTY3JpcHRDb3Jl
L2pzYy5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMyw2IEBAIENPTkZJRyhkZWJ1Zywg
ZGVidWd8cmVsZWFzZSkgewogT0JKRUNUU19ESVJfV1RSID0gJCRPQkpFQ1RTX0RJUiQke1FNQUtF
X0RJUl9TRVB9CiBpbmNsdWRlKCQkUFdEL0phdmFTY3JpcHRDb3JlLnByaSkKIAotbGVzc1RoYW4o
UVRfTUlOT1JfVkVSU0lPTiwgNCkgewotICAgIERFRklORVMgKz0gUVRfQkVHSU5fTkFNRVNQQUNF
PSIiIFFUX0VORF9OQU1FU1BBQ0U9IiIKLX0KLQogKi1nKysqOlFNQUtFX0NYWEZMQUdTX1JFTEVB
U0UgLT0gLU8yCiAqLWcrKyo6UU1BS0VfQ1hYRkxBR1NfUkVMRUFTRSArPSAtTzMKIApJbmRleDog
SmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvcXQ0L1VuaWNvZGVRdDQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9xdDQvVW5pY29kZVF0NC5oCShyZXZpc2lvbiA1
MTA2MikKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL3F0NC9Vbmljb2RlUXQ0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgPHN0ZGludC5oPgogCi0j
aWYgUVRfVkVSU0lPTiA+PSAweDA0MDMwMAogUVRfQkVHSU5fTkFNRVNQQUNFCiBuYW1lc3BhY2Ug
UVVuaWNvZGVUYWJsZXMgewogICAgIHN0cnVjdCBQcm9wZXJ0aWVzIHsKQEAgLTU1LDcgKzU0LDYg
QEAgbmFtZXNwYWNlIFFVbmljb2RlVGFibGVzIHsKICAgICBRX0NPUkVfRVhQT1JUIGNvbnN0IFBy
b3BlcnRpZXMgKiBRVF9GQVNUQ0FMTCBwcm9wZXJ0aWVzKHVzaG9ydCB1Y3MyKTsKIH0KIFFUX0VO
RF9OQU1FU1BBQ0UKLSNlbmRpZgogCiAvLyB1Z2x5IGhhY2sgdG8gbWFrZSBVQ2hhciBjb21wYXRp
YmxlIHdpdGggSlNDaGFyIGluIEFQSS9KU1N0cmluZ1JlZi5oCiAjaWYgZGVmaW5lZChRX09TX1dJ
TikgfHwgQ09NUElMRVIoV0lOU0NXKQpAQCAtMTg2LDggKzE4NCw2IEBAIGVudW0gQ2hhckNhdGVn
b3J5IHsKIH07CiAKIAotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDAzMDAKLQogLy8gRklYTUU6IGhh
bmRsZSBzdXJyb2dhdGVzIGNvcnJlY3RseSBpbiBhbGwgbWV0aG9kcwogCiBpbmxpbmUgVUNoYXIz
MiB0b0xvd2VyKFVDaGFyMzIgY2gpCkBAIC00MDYsMTM4ICs0MDIsNiBAQCBpbmxpbmUgQ2hhckNh
dGVnb3J5IGNhdGVnb3J5KFVDaGFyMzIgYykKICAgICByZXR1cm4gKENoYXJDYXRlZ29yeSkgVV9N
QVNLKFFDaGFyOjpjYXRlZ29yeShjKSk7CiB9CiAKLSNlbHNlCi0KLWlubGluZSBVQ2hhcjMyIHRv
TG93ZXIoVUNoYXIzMiBjaCkKLXsKLSAgICBpZiAoY2ggPiAweGZmZmYpCi0gICAgICAgIHJldHVy
biBjaDsKLSAgICByZXR1cm4gUUNoYXIoKHVuc2lnbmVkIHNob3J0KWNoKS50b0xvd2VyKCkudW5p
Y29kZSgpOwotfQotCi1pbmxpbmUgaW50IHRvTG93ZXIoVUNoYXIqIHJlc3VsdCwgaW50IHJlc3Vs
dExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgIGJvb2wqIGVycm9yKQot
ewotICAqZXJyb3IgPSBmYWxzZTsKLSAgaWYgKHJlc3VsdExlbmd0aCA8IHNyY0xlbmd0aCkgewot
ICAgICplcnJvciA9IHRydWU7Ci0gICAgcmV0dXJuIHNyY0xlbmd0aDsKLSAgfQotICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNyY0xlbmd0aDsgKytpKQotICAgIHJlc3VsdFtpXSA9IFFDaGFyKHNyY1tp
XSkudG9Mb3dlcigpLnVuaWNvZGUoKTsKLSAgcmV0dXJuIHNyY0xlbmd0aDsKLX0KLQotaW5saW5l
IFVDaGFyMzIgdG9VcHBlcihVQ2hhcjMyIGNoKQotewotICAgIGlmIChjaCA+IDB4ZmZmZikKLSAg
ICAgICAgcmV0dXJuIGNoOwotICAgIHJldHVybiBRQ2hhcigodW5zaWduZWQgc2hvcnQpY2gpLnRv
VXBwZXIoKS51bmljb2RlKCk7Ci19Ci0KLWlubGluZSBpbnQgdG9VcHBlcihVQ2hhciogcmVzdWx0
LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCAgYm9v
bCogZXJyb3IpCi17Ci0gICAgKmVycm9yID0gZmFsc2U7Ci0gICAgaWYgKHJlc3VsdExlbmd0aCA8
IHNyY0xlbmd0aCkgewotICAgICAgICAqZXJyb3IgPSB0cnVlOwotICAgICAgICByZXR1cm4gc3Jj
TGVuZ3RoOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNyY0xlbmd0aDsgKytpKQot
ICAgICAgICByZXN1bHRbaV0gPSBRQ2hhcihzcmNbaV0pLnRvVXBwZXIoKS51bmljb2RlKCk7Ci0g
ICAgcmV0dXJuIHNyY0xlbmd0aDsKLX0KLQotaW5saW5lIGludCB0b1RpdGxlQ2FzZShVQ2hhcjMy
IGMpCi17Ci0gICAgaWYgKGMgPiAweGZmZmYpCi0gICAgICAgIHJldHVybiBjOwotICAgIHJldHVy
biBRQ2hhcigodW5zaWduZWQgc2hvcnQpYykudG9VcHBlcigpLnVuaWNvZGUoKTsKLX0KLQotaW5s
aW5lIFVDaGFyMzIgZm9sZENhc2UoVUNoYXIzMiBjKQotewotICAgIGlmIChjID4gMHhmZmZmKQot
ICAgICAgICByZXR1cm4gYzsKLSAgICByZXR1cm4gUUNoYXIoKHVuc2lnbmVkIHNob3J0KWMpLnRv
TG93ZXIoKS51bmljb2RlKCk7Ci19Ci0KLWlubGluZSBpbnQgZm9sZENhc2UoVUNoYXIqIHJlc3Vs
dCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNyY0xlbmd0aCwgIGJv
b2wqIGVycm9yKQotewotICAgIHJldHVybiB0b0xvd2VyKHJlc3VsdCwgcmVzdWx0TGVuZ3RoLCBz
cmMsIHNyY0xlbmd0aCwgZXJyb3IpOwotfQotCi1pbmxpbmUgYm9vbCBpc1ByaW50YWJsZUNoYXIo
VUNoYXIzMiBjKQotewotICAgIHJldHVybiAoYyAmIDB4ZmZmZjAwMDApID09IDAgJiYgUUNoYXIo
KHVuc2lnbmVkIHNob3J0KWMpLmlzUHJpbnQoKTsKLX0KLQotaW5saW5lIGJvb2wgaXNBcmFiaWND
aGFyKFVDaGFyMzIgYykKLXsKLSAgICByZXR1cm4gYyA+PSAweDA2MDAgJiYgYyA8PSAweDA2RkY7
Ci19Ci0KLWlubGluZSBib29sIGlzU2VwYXJhdG9yU3BhY2UoVUNoYXIzMiBjKQotewotICAgIHJl
dHVybiAoYyAmIDB4ZmZmZjAwMDApID09IDAgJiYgUUNoYXIoKHVuc2lnbmVkIHNob3J0KWMpLmNh
dGVnb3J5KCkgPT0gUUNoYXI6OlNlcGFyYXRvcl9TcGFjZTsKLX0KLQotaW5saW5lIGJvb2wgaXNQ
dW5jdChVQ2hhcjMyIGMpCi17Ci0gICAgcmV0dXJuIChjICYgMHhmZmZmMDAwMCkgPT0gMCAmJiBR
Q2hhcigodW5zaWduZWQgc2hvcnQpYykuaXNQdW5jdCgpOwotfQotCi1pbmxpbmUgYm9vbCBpc0xv
d2VyKFVDaGFyMzIgYykKLXsKLSAgICByZXR1cm4gKGMgJiAweGZmZmYwMDAwKSA9PSAwICYmIFFD
aGFyKCh1bnNpZ25lZCBzaG9ydCljKS5jYXRlZ29yeSgpID09IFFDaGFyOjpMZXR0ZXJfTG93ZXJj
YXNlOwotfQotCi1pbmxpbmUgVUNoYXIzMiBtaXJyb3JlZENoYXIoVUNoYXIzMiBjKQotewotICAg
IGlmIChjID4gMHhmZmZmKQotICAgICAgICByZXR1cm4gYzsKLSAgICByZXR1cm4gUUNoYXIoYyku
bWlycm9yZWRDaGFyKCkudW5pY29kZSgpOwotfQotCi1pbmxpbmUgdWludDhfdCBjb21iaW5pbmdD
bGFzcyhVQ2hhcjMyIGMpCi17Ci0gICAgaWYgKGMgPiAweGZmZmYpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBRQ2hhcigodW5zaWduZWQgc2hvcnQpYykuY29tYmluaW5nQ2xhc3MoKTsK
LX0KLQotaW5saW5lIERlY29tcG9zaXRpb25UeXBlIGRlY29tcG9zaXRpb25UeXBlKFVDaGFyMzIg
YykKLXsKLSAgICBpZiAoYyA+IDB4ZmZmZikKLSAgICAgICAgcmV0dXJuIERlY29tcG9zaXRpb25O
b25lOwotICAgIHJldHVybiAoRGVjb21wb3NpdGlvblR5cGUpUUNoYXIoYykuZGVjb21wb3NpdGlv
blRhZygpOwotfQotCi1pbmxpbmUgaW50IHVtZW1jYXNlY21wKGNvbnN0IFVDaGFyKiBhLCBjb25z
dCBVQ2hhciogYiwgaW50IGxlbikKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytp
KSB7Ci0gICAgICAgIFFDaGFyIGMxID0gUUNoYXIoYVtpXSkudG9Mb3dlcigpOwotICAgICAgICBR
Q2hhciBjMiA9IFFDaGFyKGJbaV0pLnRvTG93ZXIoKTsKLSAgICAgICAgaWYgKGMxICE9IGMyKQot
ICAgICAgICByZXR1cm4gYzEudW5pY29kZSgpIC0gYzIudW5pY29kZSgpOwotICAgIH0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotaW5saW5lIERpcmVjdGlvbiBkaXJlY3Rpb24oVUNoYXIzMiBjKQotewot
ICAgIGlmIChjID4gMHhmZmZmKQotICAgICAgICByZXR1cm4gTGVmdFRvUmlnaHQ7Ci0gICAgcmV0
dXJuIChEaXJlY3Rpb24pUUNoYXIoYykuZGlyZWN0aW9uKCk7Ci19Ci0KLWlubGluZSBDaGFyQ2F0
ZWdvcnkgY2F0ZWdvcnkoVUNoYXIzMiBjKQotewotICAgIGlmIChjID4gMHhmZmZmKQotICAgICAg
ICByZXR1cm4gTm9DYXRlZ29yeTsKLSAgICByZXR1cm4gKENoYXJDYXRlZ29yeSkgVV9NQVNLKFFD
aGFyKGMpLmNhdGVnb3J5KCkpOwotfQotCi0jZW5kaWYKLQogfSB9CiAKICNlbmRpZiAvLyBXVEZf
VU5JQ09ERV9RVDRfSApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxMDYyKQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAwOS0xMS0xNiAgTGFzemxvIEdvbWJvcyAg
PGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1F0XSBSZW1vdmUgc3VwcG9ydCBmb3IgUXQgdjQuMyBvciBv
bGRlciB2ZXJzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mjk0NjkKKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhlcmUgaXMgbm8gY2hhbmdl
IGlmIGNvbXBpbGVkIHdpdGggCisgICAgICAgIFF0IHY0LjQgb3IgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXJRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFbnRpdHlSZXNvbHZlcjo6cmVzb2x2ZVVuZGVjbGFyZWRFbnRp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpYTUxUb2tlbml6ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjp+WE1MVG9rZW5pemVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTFRva2VuaXplcjo6ZG9Xcml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpYTUxUb2tl
bml6ZXI6OnN0YXJ0RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MVG9rZW5pemVyOjpw
YXJzZUR0ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQ0My5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmg6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9xdC9RTmV0d29ya1JlcGx5SGFuZGxlci5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNl
bCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hy
b25vdXNseSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6c2V0RGVmZXJzTG9h
ZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3QuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0LmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
bGlwYm9hcmRRdDo6Y2xlYXJEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVKYXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvb2tpZXNFbmFibGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9QbGF0Zm9ybUtleWJv
YXJkRXZlbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXlJZGVudGlmaWVyRm9yUXRLZXlD
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvcXQvVGV4dEJvdW5kYXJpZXMuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL3RleHQvcXQvVGV4dEJyZWFrSXRlcmF0b3JRdC5jcHA6CisgICAgICAgICogcGx1Z2lu
cy9xdC9QbHVnaW5EYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRGF0YTo6aW5p
dFBsdWdpbnMpOgorCiAyMDA5LTExLTE2ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCBhIHR5cG8gaW4gcHJldmlvdXMgY29tbWl0LgpJbmRleDogV2Vi
Q29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZp
c2lvbiA1MTA2MikKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDYgQEAgR0VORVJBVEVEX1NPVVJDRVNfRElSX1NMQVNIID0gJCRHRU5FUkFURQogCiB1
bml4IHsKICAgICBRTUFLRV9QS0dDT05GSUdfUkVRVUlSRVMgPSBRdENvcmUgUXRHdWkgUXROZXR3
b3JrCi0gICAgbGVzc1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNCk6IFFNQUtFX1BLR0NPTkZJR19S
RVFVSVJFUyArPSBRdFhtbAogfQogCiB1bml4OiFtYWM6Ki1nKysqOlFNQUtFX0NYWEZMQUdTICs9
IC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIApAQCAtMjUzLDcgKzI1Miw2IEBA
IElOQ0xVREVQQVRIID0gXAogICAgICQkSU5DTFVERVBBVEgKIAogUVQgKz0gbmV0d29yawotbGVz
c1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNCk6IFFUICs9IHhtbAogCiBRTUFLRV9FWFRSQV9UQVJH
RVRTICs9IGdlbmVyYXRlZF9maWxlcwogCkBAIC0yMzUwLDcgKzIzNDgsNiBAQCBTT1VSQ0VTICs9
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZvbnRRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdDQz
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRmxvYXRSZWN0UXQuY3BwIFwKQEAgLTI0NTMsMjAgKzI0NTAsNiBAQCBT
T1VSQ0VTICs9IFwKICAgICB9CiAgICAgd2luY2UqOiBMSUJTICs9IC1sbW10aW1lcgogCi0gICAg
IyBGaWxlcyBiZWxvbmdpbmcgdG8gdGhlIFF0IDQuMyBidWlsZAotICAgIGxlc3NUaGFuKFFUX01J
Tk9SX1ZFUlNJT04sIDQpIHsKLSAgICAgICAgSEVBREVSUyArPSBcCi0gICAgICAgICAgICAkJFBX
RC8uLi9XZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmggXAotICAgICAgICAgICAg
JCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZV9wLmggXAotICAgICAg
ICAgICAgJCRQV0QvLi4vV2ViS2l0L3F0L0FwaS9xY29va2llamFyLmgKLQotICAgICAgICBTT1VS
Q0VTICs9IFwKLSAgICAgICAgICAgIC4uL1dlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZh
Y2UuY3BwIFwKLSAgICAgICAgICAgIC4uL1dlYktpdC9xdC9BcGkvcWNvb2tpZWphci5jcHAKLQot
ICAgICAgICBERUZJTkVTICs9IFFUX0JFR0lOX05BTUVTUEFDRT0iIiBRVF9FTkRfTkFNRVNQQUNF
PSIiCi0gICAgIH0KLQogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9B
UEk9MSkgewogCiAgICAgU09VUkNFUyArPSBwbHVnaW5zL25wYXBpLmNwcApJbmRleDogV2ViQ29y
ZS9kb20vWE1MVG9rZW5pemVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRv
a2VuaXplclF0LmNwcAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6
ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQw
MAogY2xhc3MgRW50aXR5UmVzb2x2ZXIgOiBwdWJsaWMgUVhtbFN0cmVhbUVudGl0eVJlc29sdmVy
IHsKICAgICB2aXJ0dWFsIFFTdHJpbmcgcmVzb2x2ZVVuZGVjbGFyZWRFbnRpdHkoY29uc3QgUVN0
cmluZyAmbmFtZSk7CiB9OwpAQCAtNzYsNyArNzUsNiBAQCBRU3RyaW5nIEVudGl0eVJlc29sdmVy
OjpyZXNvbHZlVW5kZWNsYXJlCiAgICAgVUNoYXIgYyA9IGRlY29kZU5hbWVkRW50aXR5KG5hbWUu
dG9VdGY4KCkuY29uc3REYXRhKCkpOwogICAgIHJldHVybiBRU3RyaW5nKGMpOwogfQotI2VuZGlm
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEwMyw5ICsxMDEs
NyBAQCBYTUxUb2tlbml6ZXI6OlhNTFRva2VuaXplcihEb2N1bWVudCogX2RvCiAgICAgLCBtX3Nj
cmlwdFN0YXJ0TGluZSgwKQogICAgICwgbV9wYXJzaW5nRnJhZ21lbnQoZmFsc2UpCiB7Ci0jaWYg
UVRfVkVSU0lPTiA+PSAweDA0MDQwMAogICAgIG1fc3RyZWFtLnNldEVudGl0eVJlc29sdmVyKG5l
dyBFbnRpdHlSZXNvbHZlcik7Ci0jZW5kaWYKIH0KIAogWE1MVG9rZW5pemVyOjpYTUxUb2tlbml6
ZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQpCkBA
IC0xNDksMTkgKzE0NSw2IEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKERvY3VtZW50RnJh
Z20KICAgICBpZiAoZWxlbVN0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
I2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1TdGFjay5sYXN0KCk7ICFlbGVtU3RhY2suaXNFbXB0eSgpOyBlbGVtU3RhY2sucmVtb3ZlTGFz
dCgpKSB7Ci0gICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJzID0gZWxlbWVudC0+YXR0cmli
dXRlcygpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cnMtPmxl
bmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRycy0+
YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXR0ci0+bG9jYWxOYW1lKCkg
PT0gInhtbG5zIikKLSAgICAgICAgICAgICAgICAgICAgbV9kZWZhdWx0TmFtZXNwYWNlVVJJID0g
YXR0ci0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyLT5wcmVmaXgoKSA9
PSAieG1sbnMiKQotICAgICAgICAgICAgICAgICAgICBtX3ByZWZpeFRvTmFtZXNwYWNlTWFwLnNl
dChhdHRyLT5sb2NhbE5hbWUoKSwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0jZWxzZQogICAgIFFYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbnMg
bmFtZXNwYWNlczsKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtU3RhY2subGFzdCgp
OyAhZWxlbVN0YWNrLmlzRW1wdHkoKTsgZWxlbVN0YWNrLnJlbW92ZUxhc3QoKSkgewogICAgICAg
ICBpZiAoTmFtZWROb2RlTWFwKiBhdHRycyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKSkgewpAQCAt
MTc2LDcgKzE1OSw2IEBAIFhNTFRva2VuaXplcjo6WE1MVG9rZW5pemVyKERvY3VtZW50RnJhZ20K
ICAgICB9CiAgICAgbV9zdHJlYW0uYWRkRXh0cmFOYW1lc3BhY2VEZWNsYXJhdGlvbnMobmFtZXNw
YWNlcyk7CiAgICAgbV9zdHJlYW0uc2V0RW50aXR5UmVzb2x2ZXIobmV3IEVudGl0eVJlc29sdmVy
KTsKLSNlbmRpZgogCiAgICAgLy8gSWYgdGhlIHBhcmVudCBlbGVtZW50IGlzIG5vdCBpbiBkb2N1
bWVudCB0cmVlLCB0aGVyZSBtYXkgYmUgbm8geG1sbnMgYXR0cmlidXRlOyBqdXN0IGRlZmF1bHQg
dG8gdGhlIHBhcmVudCdzIG5hbWVzcGFjZS4KICAgICBpZiAobV9kZWZhdWx0TmFtZXNwYWNlVVJJ
LmlzTnVsbCgpICYmICFwYXJlbnRFbGVtZW50LT5pbkRvY3VtZW50KCkpCkBAIC0xOTAsOSArMTcy
LDcgQEAgWE1MVG9rZW5pemVyOjp+WE1MVG9rZW5pemVyKCkKICAgICAgICAgbV9kb2MtPmRlcmVm
KCk7CiAgICAgaWYgKG1fcGVuZGluZ1NjcmlwdCkKICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5y
ZW1vdmVDbGllbnQodGhpcyk7Ci0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogICAgIGRlbGV0
ZSBtX3N0cmVhbS5lbnRpdHlSZXNvbHZlcigpOwotI2VuZGlmCiB9CiAKIHZvaWQgWE1MVG9rZW5p
emVyOjpkb1dyaXRlKGNvbnN0IFN0cmluZyYgcGFyc2VTdHJpbmcpCkBAIC0yMDcsMjcgKzE4Nyw2
IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpkb1dyaXRlKGNvbnN0IFN0cmluZyYKIAogICAgIFFTdHJp
bmcgZGF0YShwYXJzZVN0cmluZyk7CiAgICAgaWYgKCFkYXRhLmlzRW1wdHkoKSkgewotI2lmIFFU
X1ZFUlNJT04gPCAweDA0MDQwMAotICAgICAgICBpZiAoIW1fc2F3Rmlyc3RFbGVtZW50KSB7Ci0g
ICAgICAgICAgICBpbnQgaWR4ID0gZGF0YS5pbmRleE9mKFFMYXRpbjFTdHJpbmcoIjw/eG1sIikp
OwotICAgICAgICAgICAgaWYgKGlkeCAhPSAtMSkgewotICAgICAgICAgICAgICAgIGludCBzdGFy
dCA9IGlkeCArIDU7Ci0gICAgICAgICAgICAgICAgaW50IGVuZCA9IGRhdGEuaW5kZXhPZihRTGF0
aW4xU3RyaW5nKCI/PiIpLCBzdGFydCk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBjb250ZW50
ID0gZGF0YS5taWQoc3RhcnQsIGVuZC1zdGFydCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBvayA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gYXR0cnMgPSBw
YXJzZUF0dHJpYnV0ZXMoY29udGVudCwgb2spOwotICAgICAgICAgICAgICAgIFN0cmluZyB2ZXJz
aW9uID0gYXR0cnMuZ2V0KCJ2ZXJzaW9uIik7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGVuY29k
aW5nID0gYXR0cnMuZ2V0KCJlbmNvZGluZyIpOwotICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgICAgICAgICAgICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCF2ZXJzaW9uLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jLT5zZXRYTUxWZXJzaW9uKHZlcnNpb24sIGVjKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX2RvYy0+c2V0WE1MRW5jb2RpbmcoZW5jb2RpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIG1fc3RyZWFtLmFkZERhdGEo
ZGF0YSk7CiAgICAgICAgIHBhcnNlKCk7CiAgICAgfQpAQCAtNDg1LDE0ICs0NDQsMTIgQEAgdm9p
ZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RG9jdW1lbnQoKQogICAgIGlmICghbV9wYXJzaW5nRnJhZ21l
bnQpIHsKICAgICAgICAgbV9kb2MtPnNldFhNTFN0YW5kYWxvbmUobV9zdHJlYW0uaXNTdGFuZGFs
b25lRG9jdW1lbnQoKSwgZWMpOwogCi0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogICAgICAg
ICBRU3RyaW5nUmVmIHZlcnNpb24gPSBtX3N0cmVhbS5kb2N1bWVudFZlcnNpb24oKTsKICAgICAg
ICAgaWYgKCF2ZXJzaW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZG9jLT5zZXRYTUxWZXJz
aW9uKHZlcnNpb24sIGVjKTsKICAgICAgICAgUVN0cmluZ1JlZiBlbmNvZGluZyA9IG1fc3RyZWFt
LmRvY3VtZW50RW5jb2RpbmcoKTsKICAgICAgICAgaWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBtX2RvYy0+c2V0WE1MRW5jb2RpbmcoZW5jb2RpbmcpOwotI2VuZGlmCiAgICAg
fQogfQogCkBAIC03MDIsODMgKzY1OSwxMSBAQCBib29sIFhNTFRva2VuaXplcjo6aGFzRXJyb3Io
KSBjb25zdAogICAgIHJldHVybiBtX3N0cmVhbS5oYXNFcnJvcigpOwogfQogCi0jaWYgUVRfVkVS
U0lPTiA8IDB4MDQwNDAwCi1zdGF0aWMgUVN0cmluZyBwYXJzZUlkKGNvbnN0IFFTdHJpbmcgJmR0
ZCwgaW50ICpwb3MsIGJvb2wgKm9rKQotewotICAgICpvayA9IHRydWU7Ci0gICAgaW50IHN0YXJ0
ID0gKnBvcyArIDE7Ci0gICAgaW50IGVuZCA9IHN0YXJ0OwotICAgIGlmIChkdGQuYXQoKnBvcykg
PT0gUUxhdGluMUNoYXIoJ1wnJykpCi0gICAgICAgIHdoaWxlIChzdGFydCA8IGR0ZC5sZW5ndGgo
KSAmJiBkdGQuYXQoZW5kKSAhPSBRTGF0aW4xQ2hhcignXCcnKSkKLSAgICAgICAgICAgICsrZW5k
OwotICAgIGVsc2UgaWYgKGR0ZC5hdCgqcG9zKSA9PSBRTGF0aW4xQ2hhcignXCInKSkKLSAgICAg
ICAgd2hpbGUgKHN0YXJ0IDwgZHRkLmxlbmd0aCgpICYmIGR0ZC5hdChlbmQpICE9IFFMYXRpbjFD
aGFyKCdcIicpKQotICAgICAgICAgICAgKytlbmQ7Ci0gICAgZWxzZSB7Ci0gICAgICAgICpvayA9
IGZhbHNlOwotICAgICAgICByZXR1cm4gUVN0cmluZygpOwotICAgIH0KLSAgICAqcG9zID0gZW5k
ICsgMTsKLSAgICByZXR1cm4gZHRkLm1pZChzdGFydCwgZW5kIC0gc3RhcnQpOwotfQotI2VuZGlm
Ci0KIHZvaWQgWE1MVG9rZW5pemVyOjpwYXJzZUR0ZCgpCiB7Ci0jaWYgUVRfVkVSU0lPTiA+PSAw
eDA0MDQwMAogICAgIFFTdHJpbmdSZWYgbmFtZSA9IG1fc3RyZWFtLmR0ZE5hbWUoKTsKICAgICBR
U3RyaW5nUmVmIHB1YmxpY0lkID0gbV9zdHJlYW0uZHRkUHVibGljSWQoKTsKICAgICBRU3RyaW5n
UmVmIHN5c3RlbUlkID0gbV9zdHJlYW0uZHRkU3lzdGVtSWQoKTsKLSNlbHNlCi0gICAgUVN0cmlu
ZyBkdGQgPSBtX3N0cmVhbS50ZXh0KCkudG9TdHJpbmcoKTsKLQotICAgIGludCBzdGFydCA9IGR0
ZC5pbmRleE9mKCI8IURPQ1RZUEUgIikgKyAxMDsKLSAgICB3aGlsZSAoc3RhcnQgPCBkdGQubGVu
Z3RoKCkgJiYgZHRkLmF0KHN0YXJ0KS5pc1NwYWNlKCkpCi0gICAgICAgICsrc3RhcnQ7Ci0gICAg
aW50IGVuZCA9IHN0YXJ0OwotICAgIHdoaWxlIChzdGFydCA8IGR0ZC5sZW5ndGgoKSAmJiAhZHRk
LmF0KGVuZCkuaXNTcGFjZSgpKQotICAgICAgICArK2VuZDsKLSAgICBRU3RyaW5nIG5hbWUgPSBk
dGQubWlkKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0KLSAgICBzdGFydCA9IGVuZDsKLSAgICB3aGls
ZSAoc3RhcnQgPCBkdGQubGVuZ3RoKCkgJiYgZHRkLmF0KHN0YXJ0KS5pc1NwYWNlKCkpCi0gICAg
ICAgICsrc3RhcnQ7Ci0gICAgZW5kID0gc3RhcnQ7Ci0gICAgd2hpbGUgKHN0YXJ0IDwgZHRkLmxl
bmd0aCgpICYmICFkdGQuYXQoZW5kKS5pc1NwYWNlKCkpCi0gICAgICAgICsrZW5kOwotICAgIFFT
dHJpbmcgaWQgPSBkdGQubWlkKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gICAgc3RhcnQgPSBlbmQ7
Ci0gICAgd2hpbGUgKHN0YXJ0IDwgZHRkLmxlbmd0aCgpICYmIGR0ZC5hdChzdGFydCkuaXNTcGFj
ZSgpKQotICAgICAgICArK3N0YXJ0OwotICAgIFFTdHJpbmcgcHVibGljSWQ7Ci0gICAgUVN0cmlu
ZyBzeXN0ZW1JZDsKLSAgICBpZiAoaWQgPT0gUUxhdGluMVN0cmluZygiUFVCTElDIikpIHsKLSAg
ICAgICAgYm9vbCBvazsKLSAgICAgICAgcHVibGljSWQgPSBwYXJzZUlkKGR0ZCwgJnN0YXJ0LCAm
b2spOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwg
IkludmFsaWQgRE9DVFlQRSIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChzdGFydCA8IGR0ZC5sZW5n
dGgoKSAmJiBkdGQuYXQoc3RhcnQpLmlzU3BhY2UoKSkKLSAgICAgICAgICAgICsrc3RhcnQ7Ci0g
ICAgICAgIHN5c3RlbUlkID0gcGFyc2VJZChkdGQsICZzdGFydCwgJm9rKTsKLSAgICAgICAgaWYg
KCFvaykgewotICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUi
LCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoaWQgPT0gUUxhdGluMVN0cmluZygiU1lTVEVNIikpIHsK
LSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgc3lzdGVtSWQgPSBwYXJzZUlkKGR0ZCwgJnN0YXJ0
LCAmb2spOwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRh
bCwgIkludmFsaWQgRE9DVFlQRSIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpZCA9PSBRTGF0aW4x
U3RyaW5nKCJbIikgfHwgaWQgPT0gUUxhdGluMVN0cmluZygiPiIpKSB7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERPQ1RZUEUiLCBsaW5lTnVtYmVy
KCksIGNvbHVtbk51bWJlcigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZiAgICAK
IAogICAgIC8vcURlYnVnKCkgPDwgZHRkIDw8IG5hbWUgPDwgcHVibGljSWQgPDwgc3lzdGVtSWQ7
CiAgICAgaWYgKChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9XM0MvL0RURCBYSFRNTCAx
LjAgVHJhbnNpdGlvbmFsLy9FTiIpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQ0My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQ0My5jcHAJKHJldmlzaW9uIDUxMDYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250UXQ0My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzU0ICswLDAgQEAKLS8q
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICAgIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5j
bHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgot
I2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSA8UVRleHRMYXlvdXQ+Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8
UUZvbnRNZXRyaWNzPgotI2luY2x1ZGUgPFFGb250SW5mbz4KLSNpbmNsdWRlIDxxYWxnb3JpdGht
cy5oPgotI2luY2x1ZGUgPHFkZWJ1Zy5oPgotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpZiBR
VF9WRVJTSU9OIDwgMHgwNDA0MDAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgVGV4
dFJ1bkNvbXBvbmVudCB7Ci0gICAgVGV4dFJ1bkNvbXBvbmVudCgpIDogZm9udCgwKSB7fQotICAg
IFRleHRSdW5Db21wb25lbnQoY29uc3QgVUNoYXIgKnN0YXJ0LCBpbnQgbGVuZ3RoLCBib29sIHJ0
bCwgY29uc3QgUUZvbnQgKmZvbnQsIGludCBvZmZzZXQsIGJvb2wgc2MgPSBmYWxzZSk7Ci0gICAg
VGV4dFJ1bkNvbXBvbmVudChpbnQgc3BhY2VzLCBib29sIHJ0bCwgY29uc3QgUUZvbnQgKmZvbnQs
IGludCBvZmZzZXQpOwotCi0gICAgaW5saW5lIGJvb2wgaXNTcGFjZSgpIGNvbnN0IHsgcmV0dXJu
IHNwYWNlcyAhPSAwOyB9Ci0KLSAgICBRU3RyaW5nIHN0cmluZzsKLSAgICBjb25zdCBRRm9udCAq
Zm9udDsKLSAgICBpbnQgd2lkdGg7Ci0gICAgaW50IG9mZnNldDsKLSAgICBpbnQgc3BhY2VzOwot
fTsKLQotVGV4dFJ1bkNvbXBvbmVudDo6VGV4dFJ1bkNvbXBvbmVudChjb25zdCBVQ2hhciAqc3Rh
cnQsIGludCBsZW5ndGgsIGJvb2wgcnRsLCBjb25zdCBRRm9udCAqZiwgaW50IG8sIGJvb2wgc2Mp
Ci0gICAgOiBzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KHN0YXJ0KSwgbGVu
Z3RoKQotICAgICwgZm9udChmKQotICAgICwgb2Zmc2V0KG8pCi0gICAgLCBzcGFjZXMoMCkKLXsK
LSAgICBpZiAoc2MpCi0gICAgICAgIHN0cmluZyA9IHN0cmluZy50b1VwcGVyKCk7Ci0gICAgc3Ry
aW5nLnByZXBlbmQocnRsID8gUUNoYXIoMHgyMDJlKSA6IFFDaGFyKDB4MjAyZCkpOwotICAgIHdp
ZHRoID0gUUZvbnRNZXRyaWNzKCpmb250KS53aWR0aChzdHJpbmcpOwotfQotCi1UZXh0UnVuQ29t
cG9uZW50OjpUZXh0UnVuQ29tcG9uZW50KGludCBzLCBib29sIHJ0bCwgY29uc3QgUUZvbnQgKmYs
IGludCBvKQotICAgIDogc3RyaW5nKHMsIFFMYXRpbjFDaGFyKCcgJykpCi0gICAgLCBmb250KGYp
Ci0gICAgLCBvZmZzZXQobykKLSAgICAsIHNwYWNlcyhzKQotewotICAgIHN0cmluZy5wcmVwZW5k
KHJ0bCA/IFFDaGFyKDB4MjAyZSkgOiBRQ2hhcigweDIwMmQpKTsKLSAgICB3aWR0aCA9IHNwYWNl
cyAqIFFGb250TWV0cmljcygqZm9udCkud2lkdGgoUUxhdGluMUNoYXIoJyAnKSk7Ci19Ci0KLQot
c3RhdGljIGludCBnZW5lcmF0ZUNvbXBvbmVudHMoVmVjdG9yPFRleHRSdW5Db21wb25lbnQsIDEw
MjQ+KiBjb21wb25lbnRzLCBjb25zdCBGb250ICZmb250LCBjb25zdCBUZXh0UnVuICZydW4pCi17
Ci0vLyAgICAgcURlYnVnKCkgPDwgImdlbmVyYXRlQ29tcG9uZW50cyIgPDwgUVN0cmluZygoY29u
c3QgUUNoYXIgKilydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOwotICAgIGludCBsZXR0
ZXJTcGFjaW5nID0gZm9udC5sZXR0ZXJTcGFjaW5nKCk7Ci0gICAgaW50IHdvcmRTcGFjaW5nID0g
Zm9udC53b3JkU3BhY2luZygpOwotICAgIGJvb2wgc21hbGxDYXBzID0gZm9udC5mb250RGVzY3Jp
cHRpb24oKS5zbWFsbENhcHMoKTsKLSAgICBpbnQgcGFkZGluZyA9IHJ1bi5wYWRkaW5nKCk7Ci0g
ICAgaW50IG51bVNwYWNlcyA9IDA7Ci0gICAgaWYgKHBhZGRpbmcpIHsKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBydW4ubGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICAgIGlmIChGb250Ojp0
cmVhdEFzU3BhY2UocnVuW2ldKSkKLSAgICAgICAgICAgICAgICArK251bVNwYWNlczsKLSAgICB9
Ci0KLSAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICBjb25zdCBRRm9udCAqZiA9ICZmb250LmZvbnQo
KTsKLSAgICBpZiAobGV0dGVyU3BhY2luZyB8fCBzbWFsbENhcHMpIHsKLSAgICAgICAgLy8gbmVl
ZCB0byBkcmF3IGV2ZXJ5IGxldHRlciBvbiBpdCdzIG93bgotICAgICAgICBpbnQgc3RhcnQgPSAw
OwotICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKHJ1blswXSkpIHsKLSAgICAgICAgICAg
IGludCBhZGQgPSAwOwotICAgICAgICAgICAgaWYgKG51bVNwYWNlcykgewotICAgICAgICAgICAg
ICAgIGFkZCA9IHBhZGRpbmcvbnVtU3BhY2VzOwotICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0g
YWRkOwotICAgICAgICAgICAgICAgIC0tbnVtU3BhY2VzOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY29tcG9uZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQoMSwgcnVuLnJ0bCgpLCAm
Zm9udC5mb250KCksIG9mZnNldCkpOwotICAgICAgICAgICAgb2Zmc2V0ICs9IGFkZCArIGxldHRl
clNwYWNpbmcgKyBjb21wb25lbnRzLT5sYXN0KCkud2lkdGg7Ci0gICAgICAgICAgICBzdGFydCA9
IDE7Ci0vLyAgICAgICAgIHFEZWJ1ZygpIDw8ICJzcGFjZSBhdCAwIiA8PCBvZmZzZXQ7Ci0gICAg
ICAgIH0gZWxzZSBpZiAoc21hbGxDYXBzKQotICAgICAgICAgICAgZiA9IChRQ2hhcjo6Y2F0ZWdv
cnkocnVuWzBdKSA9PSBRQ2hhcjo6TGV0dGVyX0xvd2VyY2FzZSA/ICZmb250LnNjRm9udCgpIDog
JmZvbnQuZm9udCgpKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHJ1bi5sZW5ndGgo
KTsgKytpKSB7Ci0gICAgICAgICAgICB1aW50IGNoID0gcnVuW2ldOwotICAgICAgICAgICAgaWYg
KFFDaGFyKGNoKS5pc0hpZ2hTdXJyb2dhdGUoKSAmJiBRQ2hhcihydW5baS0xXSkuaXNMb3dTdXJy
b2dhdGUoKSkKLSAgICAgICAgICAgICAgICBjaCA9IFFDaGFyOjpzdXJyb2dhdGVUb1VjczQoY2gs
IHJ1bltpLTFdKTsKLSAgICAgICAgICAgIGlmIChRQ2hhcihjaCkuaXNMb3dTdXJyb2dhdGUoKSB8
fCBRQ2hhcjo6Y2F0ZWdvcnkoY2gpID09IFFDaGFyOjpNYXJrX05vblNwYWNpbmcpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoRm9udDo6dHJlYXRBc1NwYWNlKHJ1
bltpXSkpIHsKLSAgICAgICAgICAgICAgICBpbnQgYWRkID0gMDsKLS8vICAgICAgICAgICAgICAg
ICBxRGVidWcoKSA8PCAiICAgIHRyZWF0QXNTcGFjZToiIDw8IGkgPDwgc3RhcnQ7Ci0gICAgICAg
ICAgICAgICAgaWYgKGkgLSBzdGFydCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcG9u
ZW50cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQocnVuLmNoYXJhY3RlcnMoKSArIHN0YXJ0LCBp
IC0gc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJ1bi5ydGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZiwgb2Zmc2V0LCBmID09ICZmb250LnNjRm9udCgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLT5sYXN0KCkud2lkdGggKyBs
ZXR0ZXJTcGFjaW5nOwotLy8gICAgICAgICAgICAgICAgICAgICBxRGVidWcoKSA8PCAiICAgYXBw
ZW5kaW5nKDEpICIgPDwgY29tcG9uZW50cy0+bGFzdCgpLnN0cmluZyA8PCBjb21wb25lbnRzLT5s
YXN0KCkud2lkdGg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChudW1T
cGFjZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRkID0gcGFkZGluZy9udW1TcGFjZXM7Ci0g
ICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgLT0gYWRkOwotICAgICAgICAgICAgICAgICAgICAt
LW51bVNwYWNlczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29tcG9uZW50
cy0+YXBwZW5kKFRleHRSdW5Db21wb25lbnQoMSwgcnVuLnJ0bCgpLCAmZm9udC5mb250KCksIG9m
ZnNldCkpOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSB3b3JkU3BhY2luZyArIGFkZCArIGNv
bXBvbmVudHMtPmxhc3QoKS53aWR0aCArIGxldHRlclNwYWNpbmc7Ci0gICAgICAgICAgICAgICAg
c3RhcnQgPSBpICsgMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWxldHRlclNwYWNpbmcpIHsKLS8vICAgICAgICAgICAgICAgICBxRGVidWcoKSA8
PCBpIDw8IGNoYXIocnVuW2ldKSA8PCAoUUNoYXI6OmNhdGVnb3J5KGNoKSA9PSBRQ2hhcjo6TGV0
dGVyX0xvd2VyY2FzZSkgPDwKLS8vICAgICAgICAgICAgICAgICAgICAgUUZvbnRJbmZvKCpmKS5w
b2ludFNpemVGKCk7Ci0gICAgICAgICAgICAgICAgaWYgKFFDaGFyOjpjYXRlZ29yeShjaCkgPT0g
UUNoYXI6OkxldHRlcl9Mb3dlcmNhc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGYgPT0g
JmZvbnQuc2NGb250KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoZiA9PSAmZm9udC5m
b250KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSAtIHN0YXJ0ID4gMCkgewotICAg
ICAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KHJ1bi5jaGFy
YWN0ZXJzKCkgKyBzdGFydCwgaSAtIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5ydGwoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLCBvZmZzZXQsIGYgPT0gJmZvbnQuc2NG
b250KCkpKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLndp
ZHRoICsgbGV0dGVyU3BhY2luZzsKLS8vICAgICAgICAgICAgICAgICBxRGVidWcoKSA8PCAiICAg
YXBwZW5kaW5nKDIpICIgPDwgY29tcG9uZW50cy0+bGFzdCgpLnN0cmluZyA8PCBjb21wb25lbnRz
LT5sYXN0KCkud2lkdGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc21hbGxDYXBz
KQotICAgICAgICAgICAgICAgIGYgPSAoUUNoYXI6OmNhdGVnb3J5KGNoKSA9PSBRQ2hhcjo6TGV0
dGVyX0xvd2VyY2FzZSA/ICZmb250LnNjRm9udCgpIDogJmZvbnQuZm9udCgpKTsKLSAgICAgICAg
ICAgIHN0YXJ0ID0gaTsKLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmxlbmd0aCgpIC0gc3Rh
cnQgPiAwKSB7Ci0gICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4dFJ1bkNvbXBvbmVu
dChydW4uY2hhcmFjdGVycygpICsgc3RhcnQsIHJ1bi5sZW5ndGgoKSAtIHN0YXJ0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuLnJ0bCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiwgb2Zmc2V0LCBm
ID09ICZmb250LnNjRm9udCgpKSk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+
bGFzdCgpLndpZHRoOwotLy8gICAgICAgICAgICAgcURlYnVnKCkgPDwgIiAgIGFwcGVuZGluZygz
KSAiIDw8IGNvbXBvbmVudHMtPmxhc3QoKS5zdHJpbmcgPDwgY29tcG9uZW50cy0+bGFzdCgpLndp
ZHRoOwotICAgICAgICB9Ci0gICAgICAgIG9mZnNldCArPSBsZXR0ZXJTcGFjaW5nOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGludCBzdGFydCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgcnVuLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzU3Bh
Y2UocnVuW2ldKSkgewotICAgICAgICAgICAgICAgIGlmIChpIC0gc3RhcnQgPiAwKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KHJ1bi5j
aGFyYWN0ZXJzKCkgKyBzdGFydCwgaSAtIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW4ucnRsKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsIG9mZnNldCkpOwot
ICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLndpZHRoOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnQgYWRkID0gMDsKLSAgICAgICAg
ICAgICAgICBpZiAobnVtU3BhY2VzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZCA9IHBhZGRp
bmcvbnVtU3BhY2VzOwotICAgICAgICAgICAgICAgICAgICBwYWRkaW5nIC09IGFkZDsKLSAgICAg
ICAgICAgICAgICAgICAgLS1udW1TcGFjZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGNvbXBvbmVudHMtPmFwcGVuZChUZXh0UnVuQ29tcG9uZW50KDEsIHJ1bi5ydGwoKSwg
JmZvbnQuZm9udCgpLCBvZmZzZXQpKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gYWRkICsg
Y29tcG9uZW50cy0+bGFzdCgpLndpZHRoOwotICAgICAgICAgICAgICAgIGlmIChpKQotICAgICAg
ICAgICAgICAgICAgICBvZmZzZXQgKz0gd29yZFNwYWNpbmc7Ci0gICAgICAgICAgICAgICAgc3Rh
cnQgPSBpICsgMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocnVuLmxl
bmd0aCgpIC0gc3RhcnQgPiAwKSB7Ci0gICAgICAgICAgICBjb21wb25lbnRzLT5hcHBlbmQoVGV4
dFJ1bkNvbXBvbmVudChydW4uY2hhcmFjdGVycygpICsgc3RhcnQsIHJ1bi5sZW5ndGgoKSAtIHN0
YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVu
LnJ0bCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ziwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy0+bGFzdCgpLndp
ZHRoOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBvZmZzZXQ7Ci19Ci0KLXZvaWQgRm9u
dDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewot
ICAgIGlmICh0byA8IDApCi0gICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwotCi0gICAgUVBhaW50
ZXIgKnAgPSBjdHgtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIENvbG9yIGNvbG9yID0gY3R4LT5m
aWxsQ29sb3IoKTsKLSAgICBwLT5zZXRQZW4oUUNvbG9yKGNvbG9yKSk7Ci0KLSAgICBWZWN0b3I8
VGV4dFJ1bkNvbXBvbmVudCwgMTAyND4gY29tcG9uZW50czsKLSAgICBpbnQgdyA9IGdlbmVyYXRl
Q29tcG9uZW50cygmY29tcG9uZW50cywgKnRoaXMsIHJ1bik7Ci0KLSAgICBpZiAoZnJvbSA+IDAg
fHwgdG8gPCBydW4ubGVuZ3RoKCkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGNsaXAgPSBzZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQocnVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEludFBvaW50KHFSb3VuZChwb2ludC54KCkpLCBxUm91bmQocG9pbnQu
eSgpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUZv
bnRNZXRyaWNzKGZvbnQoKSkuaGVpZ2h0KCksIGZyb20sIHRvKTsKLSAgICAgICAgUVJlY3RGIHJl
Y3QoY2xpcC54KCksIGNsaXAueSgpIC0gYXNjZW50KCksIGNsaXAud2lkdGgoKSwgY2xpcC5oZWln
aHQoKSk7Ci0gICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgcC0+c2V0Q2xpcFJlY3QocmVjdC50
b1JlY3QoKSk7Ci0gICAgfQotCi0gICAgaWYgKHJ1bi5ydGwoKSkgewotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICgh
Y29tcG9uZW50cy5hdChpKS5pc1NwYWNlKCkpIHsKLSAgICAgICAgICAgICAgICBwLT5zZXRGb250
KCpjb21wb25lbnRzLmF0KGkpLmZvbnQpOwotICAgICAgICAgICAgICAgIFFQb2ludEYgcHQocG9p
bnQueCgpICsgdyAtIGNvbXBvbmVudHMuYXQoaSkub2Zmc2V0IC0gY29tcG9uZW50cy5hdChpKS53
aWR0aCwgcG9pbnQueSgpKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChwdCwgY29tcG9u
ZW50cy5hdChpKS5zdHJpbmcpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAoIWNvbXBvbmVudHMuYXQoaSkuaXNTcGFjZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgcC0+c2V0Rm9udCgqY29tcG9uZW50cy5hdChpKS5mb250KTsKLSAgICAgICAgICAg
ICAgICBRUG9pbnRGIHB0KHBvaW50LngoKSArIGNvbXBvbmVudHMuYXQoaSkub2Zmc2V0LCBwb2lu
dC55KCkpOwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHB0LCBjb21wb25lbnRzLmF0KGkp
LnN0cmluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGZyb20g
PiAwIHx8IHRvIDwgcnVuLmxlbmd0aCgpKQotICAgICAgICBwLT5yZXN0b3JlKCk7Ci19Ci0KLWZs
b2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4pIGNv
bnN0Ci17Ci0gICAgVmVjdG9yPFRleHRSdW5Db21wb25lbnQsIDEwMjQ+IGNvbXBvbmVudHM7Ci0g
ICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0aGlzLCBydW4pOwot
Ci0gICAgcmV0dXJuIHc7Ci19Ci0KLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0
aWFsR2x5cGhzKSBjb25zdAotewotICAgIFZlY3RvcjxUZXh0UnVuQ29tcG9uZW50LCAxMDI0PiBj
b21wb25lbnRzOwotICAgIGludCB3ID0gZ2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAq
dGhpcywgcnVuKTsKLQotICAgIGludCBvZmZzZXQgPSAwOwotICAgIGlmIChydW4ucnRsKCkpIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBpbnQgeGUgPSB3IC0gY29tcG9uZW50cy5hdChpKS5vZmZzZXQ7Ci0gICAgICAg
ICAgICBpbnQgeHMgPSB4ZSAtIGNvbXBvbmVudHMuYXQoaSkud2lkdGg7Ci0gICAgICAgICAgICBp
ZiAocG9zaXRpb24gPj0geHMpIHsKLSAgICAgICAgICAgICAgICBRVGV4dExheW91dCBsYXlvdXQo
Y29tcG9uZW50cy5hdChpKS5zdHJpbmcsICpjb21wb25lbnRzLmF0KGkpLmZvbnQpOwotICAgICAg
ICAgICAgICAgIGxheW91dC5iZWdpbkxheW91dCgpOwotICAgICAgICAgICAgICAgIFFUZXh0TGlu
ZSBsID0gbGF5b3V0LmNyZWF0ZUxpbmUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWwuaXNWYWxp
ZCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OwotCi0gICAgICAgICAgICAg
ICAgbC5zZXRMaW5lV2lkdGgoSU5UX01BWCAvIDI1Nik7Ci0gICAgICAgICAgICAgICAgbGF5b3V0
LmVuZExheW91dCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIC0geHMgPj0gbC53
aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OwotICAgICAgICAgICAg
ICAgIGludCBjdXJzb3IgPSBsLnhUb0N1cnNvcihwb3NpdGlvbiAtIHhzKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY3Vyc29yID4gMSkKLSAgICAgICAgICAgICAgICAgICAgLS1jdXJzb3I7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG9mZnNldCArIGN1cnNvcjsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIG9mZnNldCArPSBjb21wb25lbnRzLmF0KGkpLnN0cmluZy5sZW5ndGgo
KSAtIDE7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvbXBvbmVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCB4cyA9IGNvbXBv
bmVudHMuYXQoaSkub2Zmc2V0OwotICAgICAgICAgICAgaW50IHhlID0geHMgKyBjb21wb25lbnRz
LmF0KGkpLndpZHRoOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDw9IHhlKSB7Ci0gICAgICAg
ICAgICAgICAgUVRleHRMYXlvdXQgbGF5b3V0KGNvbXBvbmVudHMuYXQoaSkuc3RyaW5nLCAqY29t
cG9uZW50cy5hdChpKS5mb250KTsKLSAgICAgICAgICAgICAgICBsYXlvdXQuYmVnaW5MYXlvdXQo
KTsKLSAgICAgICAgICAgICAgICBRVGV4dExpbmUgbCA9IGxheW91dC5jcmVhdGVMaW5lKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFsLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG9mZnNldDsKLQotICAgICAgICAgICAgICAgIGwuc2V0TGluZVdpZHRoKElOVF9NQVggLyAy
NTYpOwotICAgICAgICAgICAgICAgIGxheW91dC5lbmRMYXlvdXQoKTsKLQotICAgICAgICAgICAg
ICAgIGlmIChwb3NpdGlvbiAtIHhzID49IGwud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG9mZnNldCArIGNvbXBvbmVudHMuYXQoaSkuc3RyaW5nLmxlbmd0aCgpIC0gMTsKLSAg
ICAgICAgICAgICAgICBpbnQgY3Vyc29yID0gbC54VG9DdXJzb3IocG9zaXRpb24gLSB4cyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGN1cnNvciA+IDEpCi0gICAgICAgICAgICAgICAgICAgIC0tY3Vy
c29yOwotICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyBjdXJzb3I7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gY29tcG9uZW50cy5hdChpKS5zdHJp
bmcubGVuZ3RoKCkgLSAxOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBydW4ubGVuZ3Ro
KCk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBjdXJzb3JUb1goY29uc3QgVmVjdG9yPFRleHRSdW5Db21w
b25lbnQsIDEwMjQ+JiBjb21wb25lbnRzLCBpbnQgd2lkdGgsIGJvb2wgcnRsLCBpbnQgY3Vyc29y
KQotewotICAgIGludCBzdGFydCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25l
bnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChzdGFydCArIGNvbXBvbmVudHMuYXQoaSku
c3RyaW5nLmxlbmd0aCgpIC0gMSA8IGN1cnNvcikgewotICAgICAgICAgICAgc3RhcnQgKz0gY29t
cG9uZW50cy5hdChpKS5zdHJpbmcubGVuZ3RoKCkgLSAxOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHhzID0gY29tcG9uZW50cy5hdChpKS5vZmZzZXQ7Ci0g
ICAgICAgIGlmIChydGwpCi0gICAgICAgICAgICB4cyA9IHdpZHRoIC0geHMgLSBjb21wb25lbnRz
LmF0KGkpLndpZHRoOwotICAgICAgICBRVGV4dExheW91dCBsYXlvdXQoY29tcG9uZW50cy5hdChp
KS5zdHJpbmcsICpjb21wb25lbnRzLmF0KGkpLmZvbnQpOwotICAgICAgICBsYXlvdXQuYmVnaW5M
YXlvdXQoKTsKLSAgICAgICAgUVRleHRMaW5lIGwgPSBsYXlvdXQuY3JlYXRlTGluZSgpOwotICAg
ICAgICBpZiAoIWwuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAg
bC5zZXRMaW5lV2lkdGgoSU5UX01BWCAvIDI1Nik7Ci0gICAgICAgIGxheW91dC5lbmRMYXlvdXQo
KTsKLQotICAgICAgICByZXR1cm4geHMgKyBsLmN1cnNvclRvWChjdXJzb3IgLSBzdGFydCArIDEp
OwotICAgIH0KLSAgICByZXR1cm4gd2lkdGg7Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBJbnRQb2ludCYg
cHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGgsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPFRleHRSdW5Db21wb25lbnQsIDEwMjQ+IGNv
bXBvbmVudHM7Ci0gICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBvbmVudHMoJmNvbXBvbmVudHMsICp0
aGlzLCBydW4pOwotCi0gICAgaWYgKGZyb20gPT0gMCAmJiB0byA9PSBydW4ubGVuZ3RoKCkpCi0g
ICAgICAgIHJldHVybiBGbG9hdFJlY3QocHQueCgpLCBwdC55KCksIHcsIGgpOwotCi0gICAgZmxv
YXQgeDEgPSBjdXJzb3JUb1goY29tcG9uZW50cywgdywgcnVuLnJ0bCgpLCBmcm9tKTsKLSAgICBm
bG9hdCB4MiA9IGN1cnNvclRvWChjb21wb25lbnRzLCB3LCBydW4ucnRsKCksIHRvKTsKLSAgICBp
ZiAoeDIgPCB4MSkKLSAgICAgICAgcVN3YXAoeDEsIHgyKTsKLQotICAgIHJldHVybiBGbG9hdFJl
Y3QocHQueCgpICsgeDEsIHB0LnkoKSwgeDIgLSB4MSwgaCk7Ci19Ci0KLWludCBGb250OjpsaW5l
R2FwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUUZvbnRNZXRyaWNzKG1fZm9udCkubGVhZGluZygp
OwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9G
b250UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFF0LmNwcAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAKIAogI2luY2x1ZGUg
PGxpbWl0cy5oPgogCi0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBzdGF0aWMgY29uc3QgUVN0cmluZyBxc3RyaW5nKGNvbnN0IFRleHRSdW4mIHJ1bikK
QEAgLTIyOSw1ICsyMjgsMyBAQCBRRm9udCBGb250Ojpmb250KCkgY29uc3QKIAogfQogCi0jZW5k
aWYKLQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCShyZXZp
c2lvbiA1MTA2MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDkgKzQ0LDcgQEAKICNpbmNsdWRlIDxRUGFpbnRlcj4KICNp
bmNsdWRlIDxRSW1hZ2U+CiAjaW5jbHVkZSA8UUltYWdlUmVhZGVyPgotI2lmIFFUX1ZFUlNJT04g
Pj0gMHgwNDAzMDAKICNpbmNsdWRlIDxRVHJhbnNmb3JtPgotI2VuZGlmCiAKICNpbmNsdWRlIDxR
RGVidWc+CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
SGFuZGxlSW50ZXJuYWwuaAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsMTEg
KzIwMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAj
ZW5kaWYKICNpZiBQTEFURk9STShRVCkKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICAg
ICAgUVdlYk5ldHdvcmtKb2IqIG1fam9iOwotI2Vsc2UKICAgICAgICAgUU5ldHdvcmtSZXBseUhh
bmRsZXIqIG1fam9iOwotI2VuZGlmCiAgICAgICAgIFFXZWJGcmFtZSogbV9mcmFtZTsKICNlbmRp
ZgogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9xdC9RTmV0d29y
a1JlcGx5SGFuZGxlci5jcHAJKHJldmlzaW9uIDUxMDYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEs
OCArMjEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlFOZXR3b3JrUmVwbHlI
YW5kbGVyLmgiCiAKLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCi0KICNpbmNsdWRlICJIVFRQ
UGFyc2Vycy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgpAQCAtNDY2LDUgKzQ2NCwzIEBAIHZvaWQgUU5ldHdvcmtSZXBseUhhbmRs
ZXI6OnNlbmRRdWV1ZWRJdGUKIH0KIAogI2luY2x1ZGUgIm1vY19RTmV0d29ya1JlcGx5SGFuZGxl
ci5jcHAiCi0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3
b3JrUmVwbHlIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgJKHJldmlzaW9uIDUxMDYyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDggKzIxLDYgQEAKIAogI2luY2x1ZGUgPFFPYmplY3Q+CiAKLSNpZiBRVF9WRVJTSU9O
ID49IDB4MDQwNDAwCi0KICNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+CiAjaW5jbHVkZSA8UU5l
dHdvcmtBY2Nlc3NNYW5hZ2VyPgogCkBAIC0xMTMsNiArMTExLDQgQEAgcHJpdmF0ZToKIAogfQog
Ci0jZW5kaWYKLQogI2VuZGlmIC8vIFFORVRXT1JLUkVQTFlIQU5ETEVSX0gKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZUhhbmRsZVF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VIYW5kbGVRdC5jcHAJKHJldmlz
aW9uIDUxMDYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlSGFuZGxl
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMyArNDgsOSBAQAogI2VuZGlmCiAjaW5jbHVk
ZSA8UUNvcmVBcHBsaWNhdGlvbj4KICNpbmNsdWRlIDxRVXJsPgotI2lmIFFUX1ZFUlNJT04gPj0g
MHgwNDA0MDAKICNpbmNsdWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CiAjaW5jbHVkZSA8UU5l
dHdvcmtSZXF1ZXN0PgogI2luY2x1ZGUgPFFOZXR3b3JrUmVwbHk+Ci0jZWxzZQotI2luY2x1ZGUg
InF3ZWJuZXR3b3JraW50ZXJmYWNlX3AuaCIKLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTE0MSwyMyArMTM3LDE1IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1l
KiBmcmFtZSkKICAgICB9CiAKICAgICBnZXRJbnRlcm5hbCgpLT5tX2ZyYW1lID0gc3RhdGljX2Nh
c3Q8RnJhbWVMb2FkZXJDbGllbnRRdCo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpLT53ZWJG
cmFtZSgpOwotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAgIHJldHVybiBRV2ViTmV0d29y
a01hbmFnZXI6OnNlbGYoKS0+YWRkKHRoaXMsIGdldEludGVybmFsKCktPm1fZnJhbWUtPnBhZ2Uo
KS0+ZC0+bmV0d29ya0ludGVyZmFjZSk7Ci0jZWxzZQogICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwgKmQgPSBnZXRJbnRlcm5hbCgpOwogICAgIGQtPm1fam9iID0gbmV3IFFOZXR3b3JrUmVwbHlI
YW5kbGVyKHRoaXMsIFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpMb2FkTW9kZShkLT5tX2RlZmVyc0xv
YWRpbmcpKTsKICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgogfQogCiB2b2lkIFJlc291cmNlSGFu
ZGxlOjpjYW5jZWwoKQogewotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotICAgIFFXZWJOZXR3
b3JrTWFuYWdlcjo6c2VsZigpLT5jYW5jZWwodGhpcyk7Ci0jZWxzZQogICAgIGlmIChkLT5tX2pv
YikKICAgICAgICAgZC0+bV9qb2ItPmFib3J0KCk7Ci0jZW5kaWYKIH0KIAogYm9vbCBSZXNvdXJj
ZUhhbmRsZTo6bG9hZHNCbG9ja2VkKCkKQEAgLTIwNSwxMyArMTkzLDYgQEAgdm9pZCBSZXNvdXJj
ZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hybwogICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ciBzeW5jTG9hZGVyOwogICAgIFJlc291cmNlSGFuZGxlIGhhbmRsZShyZXF1ZXN0LCAmc3luY0xv
YWRlciwgdHJ1ZSwgZmFsc2UsIHRydWUpOwogCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0g
ICAgaWYgKCFRV2ViTmV0d29ya01hbmFnZXI6OnNlbGYoKS0+YWRkKCZoYW5kbGUsIFFXZWJOZXR3
b3JrSW50ZXJmYWNlOjpkZWZhdWx0SW50ZXJmYWNlKCksIFFXZWJOZXR3b3JrTWFuYWdlcjo6U3lu
Y2hyb25vdXNKb2IpKSB7Ci0gICAgICAgIC8vIEZJWE1FIENyZWF0ZSBhIHNhbmUgUmVzb3VyY2VF
cnJvcgotICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoU3RyaW5nKCksIC0xLCBTdHJpbmco
KSwgU3RyaW5nKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vsc2UKICAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsICpkID0gaGFuZGxlLmdldEludGVybmFsKCk7CiAgICAgaWYgKCEoZC0+
bV91c2VyLmlzRW1wdHkoKSB8fCBkLT5tX3Bhc3MuaXNFbXB0eSgpKSkgewogICAgICAgICAvLyBJ
ZiBjcmVkZW50aWFscyB3ZXJlIHNwZWNpZmllZCBmb3IgdGhpcyByZXF1ZXN0LCBhZGQgdGhlbSB0
byB0aGUgdXJsLApAQCAtMjIzLDcgKzIwNCw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm8KICAgICB9CiAgICAgZC0+bV9mcmFtZSA9IHN0YXRpY19jYXN0PEZyYW1l
TG9hZGVyQ2xpZW50UXQqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKS0+d2ViRnJhbWUoKTsK
ICAgICBkLT5tX2pvYiA9IG5ldyBRTmV0d29ya1JlcGx5SGFuZGxlcigmaGFuZGxlLCBRTmV0d29y
a1JlcGx5SGFuZGxlcjo6TG9hZE5vcm1hbCk7Ci0jZW5kaWYKIAogICAgIHN5bmNMb2FkZXIud2Fp
dEZvckNvbXBsZXRpb24oKTsKICAgICBlcnJvciA9IHN5bmNMb2FkZXIucmVzb3VyY2VFcnJvcigp
OwpAQCAtMjM2LDEwICsyMTYsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpzZXREZWZlcnNMb2Fk
aW5nKGJvCiB7CiAgICAgZC0+bV9kZWZlcnNMb2FkaW5nID0gZGVmZXJzOwogCi0jaWYgUVRfVkVS
U0lPTiA+PSAweDA0MDQwMAogICAgIGlmIChkLT5tX2pvYikKICAgICAgICAgZC0+bV9qb2ItPnNl
dExvYWRNb2RlKFFOZXR3b3JrUmVwbHlIYW5kbGVyOjpMb2FkTW9kZShkZWZlcnMpKTsKLSNlbmRp
ZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvcXQvUmVzb3VyY2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdC5oCShyZXZpc2lvbiA1MTA2MikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9xdC9SZXNvdXJjZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksOSArNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsKICAgICAgICAg
fQogCi0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogICAgICAgICBRTmV0d29ya1JlcXVlc3Qg
dG9OZXR3b3JrUmVxdWVzdChRT2JqZWN0KiBvcmlnaW5hdGluZ09iamVjdCkgY29uc3Q7Ci0jZW5k
aWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVJlcXVlc3RC
YXNlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3F0L1Jlc291cmNlUmVxdWVzdFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvcXQvUmVzb3VyY2VS
ZXF1ZXN0UXQuY3BwCShyZXZpc2lvbiA1MTA2MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9xdC9SZXNvdXJjZVJlcXVlc3RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYg
QEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKIAogI2luY2x1ZGUgPHFnbG9iYWwuaD4K
LSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAKICNpbmNsdWRlIDxRTmV0d29ya1JlcXVlc3Q+
CiAjaW5jbHVkZSA8UVVybD4KQEAgLTcwLDQgKzY5LDMgQEAgUU5ldHdvcmtSZXF1ZXN0IFJlc291
cmNlUmVxdWVzdDo6dG9OZXR3bwogCiB9CiAKLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9xdC9DbGlwYm9hcmRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
bGlwYm9hcmRRdC5jcHAJKHJldmlzaW9uIDUxMDYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
bGlwYm9hcmRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDIxICs5NSw3IEBAIHZvaWQgQ2xp
cGJvYXJkUXQ6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKG1fd3JpdGFibGVEYXRhKSB7Ci0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogICAgICAg
ICBtX3dyaXRhYmxlRGF0YS0+cmVtb3ZlRm9ybWF0KHR5cGUpOwotI2Vsc2UKLSAgICAgICAgY29u
c3QgUVN0cmluZyB0b0NsZWFyVHlwZSA9IHR5cGU7Ci0gICAgICAgIFFNYXA8UVN0cmluZywgUUJ5
dGVBcnJheT4gZm9ybWF0czsKLSAgICAgICAgZm9yZWFjaCAoUVN0cmluZyBmb3JtYXQsIG1fd3Jp
dGFibGVEYXRhLT5mb3JtYXRzKCkpIHsKLSAgICAgICAgICAgIGlmIChmb3JtYXQgIT0gdG9DbGVh
clR5cGUpCi0gICAgICAgICAgICAgICAgZm9ybWF0c1tmb3JtYXRdID0gbV93cml0YWJsZURhdGEt
PmRhdGEoZm9ybWF0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1fd3JpdGFibGVEYXRhLT5jbGVh
cigpOwotICAgICAgICBRTWFwPFFTdHJpbmcsIFFCeXRlQXJyYXk+Ojpjb25zdF9pdGVyYXRvciBp
dCwgZW5kID0gZm9ybWF0cy5jb25zdEVuZCgpOwotICAgICAgICBmb3IgKGl0ID0gZm9ybWF0cy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0
RGF0YShpdC5rZXkoKSwgaXQudmFsdWUoKSk7Ci0jZW5kaWYKICAgICAgICAgaWYgKG1fd3JpdGFi
bGVEYXRhLT5mb3JtYXRzKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoaXNGb3JEcmFn
Z2luZygpKQogICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3dyaXRhYmxlRGF0YTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCShyZXZpc2lvbiA1MTA2MikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxOSArMzMs
MTQgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAot
I2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKICNpbmNsdWRlICJxd2VicGFnZS5oIgogI2luY2x1
ZGUgInF3ZWJmcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50UXQuaCIKICNpbmNs
dWRlIDxRTmV0d29ya0FjY2Vzc01hbmFnZXI+CiAjaW5jbHVkZSA8UU5ldHdvcmtDb29raWU+Ci0j
ZWxzZQotI2luY2x1ZGUgPHFjb29raWVqYXIuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiBzdGF0aWMgUU5ldHdvcmtDb29raWVK
YXIgKmNvb2tpZUphcihjb25zdCBEb2N1bWVudCAqZG9jdW1lbnQpCiB7CiAgICAgaWYgKCFkb2N1
bWVudCkKQEAgLTYyLDEzICs1NywxMSBAQCBzdGF0aWMgUU5ldHdvcmtDb29raWVKYXIgKmNvb2tp
ZUphcihjb25zCiAgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9IG1hbmFnZXItPmNvb2tpZUph
cigpOwogICAgIHJldHVybiBqYXI7CiB9Ci0jZW5kaWYKIAogdm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewog
ICAgIFFVcmwgdSh1cmwpOwogICAgIFFVcmwgcChkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSk7Ci0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogICAgIFFOZXR3b3JrQ29va2llSmFy
KiBqYXIgPSBjb29raWVKYXIoZG9jdW1lbnQpOwogICAgIGlmICghamFyKQogICAgICAgICByZXR1
cm47CkBAIC04NCwxNSArNzcsMTEgQEAgdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVu
dCwgY29ucwogICAgIH0KICNlbmRpZgogICAgIGphci0+c2V0Q29va2llc0Zyb21VcmwoY29va2ll
cywgdSk7Ci0jZWxzZQotICAgIFFDb29raWVKYXI6OmNvb2tpZUphcigpLT5zZXRDb29raWVzKHUs
IHAsIChRU3RyaW5nKXZhbHVlKTsKLSNlbmRpZgogfQogCiBTdHJpbmcgY29va2llcyhjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBRVXJsIHUodXJsKTsK
LSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAgICAgUU5ldHdvcmtDb29raWVKYXIqIGphciA9
IGNvb2tpZUphcihkb2N1bWVudCk7CiAgICAgaWYgKCFqYXIpCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKQEAgLTExMiwyMyArMTAxLDEyIEBAIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0Q29va2llcy5qb2luKFFMYXRp
bjFTdHJpbmcoIjsgIikpOwotI2Vsc2UKLSAgICBRU3RyaW5nIGNvb2tpZXMgPSBRQ29va2llSmFy
Ojpjb29raWVKYXIoKS0+Y29va2llcyh1KTsKLSAgICBpbnQgaWR4ID0gY29va2llcy5pbmRleE9m
KFFMYXRpbjFDaGFyKCc7JykpOwotICAgIGlmIChpZHggPiAwKQotICAgICAgICBjb29raWVzID0g
Y29va2llcy5sZWZ0KGlkeCk7Ci0gICAgcmV0dXJuIGNvb2tpZXM7Ci0jZW5kaWYKIH0KIAogYm9v
bCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0jaWYgUVRfVkVS
U0lPTiA+PSAweDA0MDQwMAogICAgIFFOZXR3b3JrQ29va2llSmFyKiBqYXIgPSBjb29raWVKYXIo
ZG9jdW1lbnQpOwogICAgIHJldHVybiAoamFyICE9IDApOwotI2Vsc2UKLSAgICByZXR1cm4gUUNv
b2tpZUphcjo6Y29va2llSmFyKCktPmlzRW5hYmxlZCgpOwotI2VuZGlmCiB9CiAKIGJvb2wgZ2V0
UmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBWZWN0b3I8Q29va2llPiYg
cmF3Q29va2llcykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1LZXlib2FyZEV2
ZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1LZXli
b2FyZEV2ZW50UXQuY3BwCShyZXZpc2lvbiA1MTA2MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQv
UGxhdGZvcm1LZXlib2FyZEV2ZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxMCArNTIs
OCBAQCBzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JRdEtleUNvZGUoCiAgICAgICAgIGNh
c2UgUXQ6OktleV9SZXR1cm46CiAgICAgICAgIGNhc2UgUXQ6OktleV9FbnRlcjoKICAgICAgICAg
ICAgIHJldHVybiAiRW50ZXIiOwotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDAyMDAKICAgICAgICAg
Y2FzZSBRdDo6S2V5X0V4ZWN1dGU6CiAgICAgICAgICAgICByZXR1cm4gIkV4ZWN1dGUiOwotI2Vu
ZGlmCiAgICAgICAgIGNhc2UgUXQ6OktleV9GMToKICAgICAgICAgICAgIHJldHVybiAiRjEiOwog
ICAgICAgICBjYXNlIFF0OjpLZXlfRjI6CkBAIC0yOTAsMTAgKzI4OCw4IEBAIHN0YXRpYyBpbnQg
d2luZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnMKICAgICAgICAgICAgIHJldHVybiBWS19TRUxF
Q1Q7IC8vICgyOSkgU0VMRUNUIGtleQogICAgICAgICBjYXNlIFF0OjpLZXlfUHJpbnQ6CiAgICAg
ICAgICAgICByZXR1cm4gVktfUFJJTlQ7IC8vICgyQSkgUFJJTlQga2V5Ci0jaWYgUVRfVkVSU0lP
TiA+PSAweDA0MDIwMAogICAgICAgICBjYXNlIFF0OjpLZXlfRXhlY3V0ZToKICAgICAgICAgICAg
IHJldHVybiBWS19FWEVDVVRFOy8vICgyQikgRVhFQ1VURSBrZXkKLSNlbmRpZgogICAgICAgICAg
ICAgLy9kdW5ubyBvbiB0aGlzCiAgICAgICAgICAgICAvL2Nhc2UgUXQ6OktleV9QcmludFNjcmVl
bjoKICAgICAgICAgICAgIC8vICAgICAgcmV0dXJuIFZLX1NOQVBTSE9UOyAvLyAoMkMpIFBSSU5U
IFNDUkVFTiBrZXkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9xdC9UZXh0Qm91bmRhcmll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3F0L1RleHRCb3VuZGFy
aWVzLmNwcAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3RleHQvcXQvVGV4
dEJvdW5kYXJpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVk
ZSA8UURlYnVnPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLSNpZiBRVF9WRVJTSU9OID49IDB4MDQw
NDAwCiAjaW5jbHVkZSA8cXRleHRib3VuZGFyeWZpbmRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC03Niw0OCArNzUsMyBAQCB2b2lkIGZpbmRXb3JkQm91bmRhcnkoVUNoYXIgY29uc3Qq
IGJ1ZmZlCiAKIH0KIAotI2Vsc2UKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW50IGZpbmROZXh0
V29yZEZyb21JbmRleChVQ2hhciBjb25zdCogYnVmZmVyLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24s
IGJvb2wgZm9yd2FyZCkKLXsKLSAgICBRU3RyaW5nIHN0cihyZWludGVycHJldF9jYXN0PFFDaGFy
IGNvbnN0Kj4oYnVmZmVyKSwgbGVuKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIGZpbmRXb3JkQm91bmRhcnkoVUNoYXIgY29uc3QqIGJ1ZmZlciwgaW50
IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0LCBpbnQqIGVuZCkKLXsKLSAgICBRU3RyaW5n
IHN0cihyZWludGVycHJldF9jYXN0PFFDaGFyIGNvbnN0Kj4oYnVmZmVyKSwgbGVuKTsKLQotICAg
IGlmIChwb3NpdGlvbiA+IHN0ci5sZW5ndGgoKSkgewotICAgICAgICAqc3RhcnQgPSAwOwotICAg
ICAgICAqZW5kID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBjdXJyZW50
UG9zaXRpb24gPSBwb3NpdGlvbiAtIDE7Ci0gICAgUVN0cmluZyBmb3VuZFdvcmQ7Ci0gICAgd2hp
bGUgKGN1cnJlbnRQb3NpdGlvbiA+PSAwICYmCi0gICAgICAgICAgIHN0cltjdXJyZW50UG9zaXRp
b25dLmlzTGV0dGVyKCkpIHsKLSAgICAgICAgZm91bmRXb3JkLnByZXBlbmQoc3RyW2N1cnJlbnRQ
b3NpdGlvbl0pOwotICAgICAgICAtLWN1cnJlbnRQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICAvLyBj
dXJyZW50UG9zaXRpb24gPT0gMCBtZWFucyB0aGUgZmlyc3QgY2hhciBpcyBub3QgbGV0dGVyCi0g
ICAgLy8gY3VycmVudFBvc2l0aW9uID09IC0xIG1lYW5zIHdlIHJlYWNoZWQgdGhlIGJlZ2lubmlu
ZwotICAgIGludCBzdGFydFBvcyA9IChjdXJyZW50UG9zaXRpb24gPCAwKSA/IDAgOiArK2N1cnJl
bnRQb3NpdGlvbjsKLSAgICBjdXJyZW50UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAoc3Ry
W2N1cnJlbnRQb3NpdGlvbl0uaXNMZXR0ZXIoKSkgewotICAgICAgICAgICAgd2hpbGUgKHN0cltj
dXJyZW50UG9zaXRpb25dLmlzTGV0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICBmb3VuZFdvcmQu
YXBwZW5kKHN0cltjdXJyZW50UG9zaXRpb25dKTsKLSAgICAgICAgICAgICAgICArK2N1cnJlbnRQ
b3NpdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICB9Ci0KLSAgICAqc3RhcnQgPSBzdGFydFBvczsK
LSAgICAqZW5kID0gY3VycmVudFBvc2l0aW9uOwotfQotCi19Ci0jZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9xdC9UZXh0QnJlYWtJdGVyYXRvclF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvcXQvVGV4dEJyZWFrSXRlcmF0b3JRdC5jcHAJKHJldmlz
aW9uIDUxMDYyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3F0L1RleHRCcmVha0l0ZXJhdG9y
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKIAotI2lmIFFUX1ZFUlNJT04gPj0g
MHgwNDA0MDAKICNpbmNsdWRlIDxRdENvcmUvcXRleHRib3VuZGFyeWZpbmRlci5oPgogI2luY2x1
ZGUgPHFkZWJ1Zy5oPgogCkBAIC0xMzAsMTgzICsxMjksMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgfQogCiB9Ci0jZWxzZQotI2luY2x1ZGUgPHF0ZXh0bGF5b3V0Lmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFRleHRCcmVha0l0ZXJhdG9yIHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHZpcnR1YWwgaW50IGZpcnN0KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGludCBu
ZXh0KCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGludCBwcmV2aW91cygpID0gMDsKLSAgICAgICAg
aW5saW5lIGludCBmb2xsb3dpbmcoaW50IHBvcykKLSAgICAgICAgewotICAgICAgICAgICAgY3Vy
cmVudFBvcyA9IHBvczsKLSAgICAgICAgICAgIHJldHVybiBuZXh0KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaW5saW5lIGludCBwcmVjZWRpbmcoaW50IHBvcykKLSAgICAgICAgewotICAgICAgICAg
ICAgY3VycmVudFBvcyA9IHBvczsKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91cygpOwotICAg
ICAgICB9Ci0gICAgICAgIGludCBjdXJyZW50UG9zOwotICAgICAgICBjb25zdCBVQ2hhciAqc3Ry
aW5nOwotICAgICAgICBpbnQgbGVuZ3RoOwotICAgIH07Ci0KLSAgICBjbGFzcyBXb3JkQnJlYWtJ
dGVyYXRvclF0IDogcHVibGljIFRleHRCcmVha0l0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHZpcnR1YWwgaW50IGZpcnN0KCk7Ci0gICAgICAgIHZpcnR1YWwgaW50IG5leHQoKTsKLSAg
ICAgICAgdmlydHVhbCBpbnQgcHJldmlvdXMoKTsKLSAgICB9OwotCi0gICAgY2xhc3MgQ2hhckJy
ZWFrSXRlcmF0b3JRdCA6IHB1YmxpYyBUZXh0QnJlYWtJdGVyYXRvciB7Ci0gICAgcHVibGljOgot
ICAgICAgICB2aXJ0dWFsIGludCBmaXJzdCgpOwotICAgICAgICB2aXJ0dWFsIGludCBuZXh0KCk7
Ci0gICAgICAgIHZpcnR1YWwgaW50IHByZXZpb3VzKCk7Ci0gICAgICAgIFFUZXh0TGF5b3V0IGxh
eW91dDsKLSAgICB9OwotCi0gICAgaW50IFdvcmRCcmVha0l0ZXJhdG9yUXQ6OmZpcnN0KCkKLSAg
ICB7Ci0gICAgICAgIGN1cnJlbnRQb3MgPSAwOwotICAgICAgICByZXR1cm4gY3VycmVudFBvczsK
LSAgICB9Ci0KLSAgICBpbnQgV29yZEJyZWFrSXRlcmF0b3JRdDo6bmV4dCgpCi0gICAgewotICAg
ICAgICBpZiAoY3VycmVudFBvcyA+PSBsZW5ndGgpIHsKLSAgICAgICAgICAgIGN1cnJlbnRQb3Mg
PSAtMTsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50UG9zOwotICAgICAgICB9Ci0gICAgICAg
IGJvb2wgaGF2ZVNwYWNlID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50UG9zIDwgbGVu
Z3RoKSB7Ci0gICAgICAgICAgICBpZiAoaGF2ZVNwYWNlICYmICFRQ2hhcihzdHJpbmdbY3VycmVu
dFBvc10pLmlzU3BhY2UoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlm
IChRQ2hhcihzdHJpbmdbY3VycmVudFBvc10pLmlzU3BhY2UoKSkKLSAgICAgICAgICAgICAgICBo
YXZlU3BhY2UgPSB0cnVlOwotICAgICAgICAgICAgKytjdXJyZW50UG9zOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBjdXJyZW50UG9zOwotICAgIH0KLQotICAgIGludCBXb3JkQnJlYWtJdGVy
YXRvclF0OjpwcmV2aW91cygpCi0gICAgewotICAgICAgICBpZiAoY3VycmVudFBvcyA8PSAwKSB7
Ci0gICAgICAgICAgICBjdXJyZW50UG9zID0gLTE7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVu
dFBvczsKLSAgICAgICAgfQotICAgICAgICBib29sIGhhdmVTcGFjZSA9IGZhbHNlOwotICAgICAg
ICB3aGlsZSAoY3VycmVudFBvcyA+IDApIHsKLSAgICAgICAgICAgIGlmIChoYXZlU3BhY2UgJiYg
IVFDaGFyKHN0cmluZ1tjdXJyZW50UG9zXSkuaXNTcGFjZSgpKQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgaWYgKFFDaGFyKHN0cmluZ1tjdXJyZW50UG9zXSkuaXNTcGFjZSgp
KQotICAgICAgICAgICAgICAgIGhhdmVTcGFjZSA9IHRydWU7Ci0gICAgICAgICAgICAtLWN1cnJl
bnRQb3M7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3M7Ci0gICAgfQotCi0g
ICAgaW50IENoYXJCcmVha0l0ZXJhdG9yUXQ6OmZpcnN0KCkKLSAgICB7Ci0gICAgICAgIGN1cnJl
bnRQb3MgPSAwOwotICAgICAgICByZXR1cm4gY3VycmVudFBvczsKLSAgICB9Ci0KLSAgICBpbnQg
Q2hhckJyZWFrSXRlcmF0b3JRdDo6bmV4dCgpCi0gICAgewotICAgICAgICBpZiAoY3VycmVudFBv
cyA+PSBsZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGN1cnJlbnRQb3Mg
PSBsYXlvdXQubmV4dEN1cnNvclBvc2l0aW9uKGN1cnJlbnRQb3MpOwotICAgICAgICByZXR1cm4g
Y3VycmVudFBvczsKLSAgICB9Ci0KLSAgICBpbnQgQ2hhckJyZWFrSXRlcmF0b3JRdDo6cHJldmlv
dXMoKQotICAgIHsKLSAgICAgICAgaWYgKGN1cnJlbnRQb3MgPD0gMCkKLSAgICAgICAgICAgIHJl
dHVybiAtMTsKLSAgICAgICAgY3VycmVudFBvcyA9IGxheW91dC5wcmV2aW91c0N1cnNvclBvc2l0
aW9uKGN1cnJlbnRQb3MpOwotICAgICAgICByZXR1cm4gY3VycmVudFBvczsKLSAgICB9Ci0KLQot
VGV4dEJyZWFrSXRlcmF0b3IqIHdvcmRCcmVha0l0ZXJhdG9yKGNvbnN0IFVDaGFyKiBzdHJpbmcs
IGludCBsZW5ndGgpCi17Ci0gICAgc3RhdGljIFdvcmRCcmVha0l0ZXJhdG9yUXQgKml0ZXJhdG9y
ID0gMDsKLSAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICBpdGVyYXRvciA9IG5ldyBXb3JkQnJl
YWtJdGVyYXRvclF0OwotCi0gICAgaXRlcmF0b3ItPnN0cmluZyA9IHN0cmluZzsKLSAgICBpdGVy
YXRvci0+bGVuZ3RoID0gbGVuZ3RoOwotICAgIGl0ZXJhdG9yLT5jdXJyZW50UG9zID0gMDsKLQot
ICAgIHJldHVybiBpdGVyYXRvcjsKLX0KLQotVGV4dEJyZWFrSXRlcmF0b3IqIGNoYXJhY3RlckJy
ZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKLXsKLSAgICBzdGF0
aWMgQ2hhckJyZWFrSXRlcmF0b3JRdCAqaXRlcmF0b3IgPSAwOwotICAgIGlmICghaXRlcmF0b3Ip
Ci0gICAgICAgIGl0ZXJhdG9yID0gbmV3IENoYXJCcmVha0l0ZXJhdG9yUXQ7Ci0KLSAgICBpdGVy
YXRvci0+c3RyaW5nID0gc3RyaW5nOwotICAgIGl0ZXJhdG9yLT5sZW5ndGggPSBsZW5ndGg7Ci0g
ICAgaXRlcmF0b3ItPmN1cnJlbnRQb3MgPSAwOwotICAgIGl0ZXJhdG9yLT5sYXlvdXQuc2V0VGV4
dChRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihzdHJpbmcpLCBsZW5ndGgp
KTsKLQotICAgIHJldHVybiBpdGVyYXRvcjsKLX0KLQotVGV4dEJyZWFrSXRlcmF0b3IqIGN1cnNv
ck1vdmVtZW50SXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCkKLXsKLSAg
ICByZXR1cm4gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzdHJpbmcsIGxlbmd0aCk7Ci19Ci0KLVRl
eHRCcmVha0l0ZXJhdG9yKiBsaW5lQnJlYWtJdGVyYXRvcihjb25zdCBVQ2hhciosIGludCkKLXsK
LSAgICAvLyBub3QgeWV0IGltcGxlbWVudGVkCi0gICAgcmV0dXJuIDA7Ci19Ci0KLVRleHRCcmVh
a0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqLCBpbnQpCi17Ci0g
ICAgLy8gbm90IHlldCBpbXBsZW1lbnRlZAotICAgIHJldHVybiAwOwotfQotCi1pbnQgdGV4dEJy
ZWFrRmlyc3QoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQotewotICAgIHJldHVybiBiaS0+Zmlyc3Qo
KTsKLX0KLQotaW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqIGJpKQotewotICAg
IHJldHVybiBiaS0+bmV4dCgpOwotfQotCi1pbnQgdGV4dEJyZWFrUHJlY2VkaW5nKFRleHRCcmVh
a0l0ZXJhdG9yKiBiaSwgaW50IHBvcykKLXsKLSAgICByZXR1cm4gYmktPnByZWNlZGluZyhwb3Mp
OwotfQotCi1pbnQgdGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVha0l0ZXJhdG9yKiBiaSwgaW50
IHBvcykKLXsKLSAgICByZXR1cm4gYmktPmZvbGxvd2luZyhwb3MpOwotfQotCi1pbnQgdGV4dEJy
ZWFrQ3VycmVudChUZXh0QnJlYWtJdGVyYXRvciogYmkpCi17Ci0gICAgcmV0dXJuIGJpLT5jdXJy
ZW50UG9zOwotfQotCi1ib29sIGlzVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiwgaW50KQot
ewotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbHVn
aW5zL3F0L1BsdWdpbkRhdGFRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpbkRhdGFRdC5jcHAJKHJldmlzaW9uIDUxMDYyKQorKysgV2ViQ29yZS9wbHVnaW5zL3F0
L1BsdWdpbkRhdGFRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE4ICsyNCwxNSBAQAogI2lu
Y2x1ZGUgIlBsdWdpbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgogCi0j
aWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgPHF3ZWJwYWdlLmg+CiAjaW5jbHVkZSA8cXdlYnBs
dWdpbmZhY3RvcnkuaD4KLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgUGx1
Z2luRGF0YTo6aW5pdFBsdWdpbnMoKQogewotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKICAg
ICBRV2ViUGFnZSogd2ViUGFnZSA9IHN0YXRpY19jYXN0PENocm9tZUNsaWVudFF0Kj4obV9wYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCkpLT5tX3dlYlBhZ2U7CiAgICAgUVdlYlBsdWdpbkZhY3Rvcnkq
IGZhY3RvcnkgPSB3ZWJQYWdlLT5wbHVnaW5GYWN0b3J5KCk7CiAgICAgaWYgKGZhY3RvcnkpIHsK
QEAgLTYyLDcgKzU5LDYgQEAgdm9pZCBQbHVnaW5EYXRhOjppbml0UGx1Z2lucygpCiAgICAgICAg
ICAgICBtX3BsdWdpbnMuYXBwZW5kKGluZm8pOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAK
ICAgICBQbHVnaW5EYXRhYmFzZSAqZGIgPSBQbHVnaW5EYXRhYmFzZTo6aW5zdGFsbGVkUGx1Z2lu
cygpOwogICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5QYWNrYWdlKj4gJnBsdWdpbnMgPSBkYi0+cGx1
Z2lucygpOwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTA2MikKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw0NCBAQAorMjAwOS0xMS0xNiAgTGFzemxvIEdvbWJvcyAg
PGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1F0XSBSZW1vdmUgc3VwcG9ydCBmb3IgUXQgdjQuMyBvciBv
bGRlciB2ZXJzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mjk0NjkKKworICAgICAgICAqIEFwaS9xY29va2llamFyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBBcGkvcWNvb2tpZWphci5oOiBSZW1vdmVkLgorICAgICAgICAqIEFwaS9xZ3JhcGhp
Y3N3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFHcmFwaGljc1dlYlZpZXc6OmV2ZW50KToKKyAgICAg
ICAgKiBBcGkvcXdlYmZyYW1lLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZTo6bG9hZCk6CisgICAg
ICAgICogQXBpL3F3ZWJmcmFtZS5oOgorICAgICAgICAqIEFwaS9xd2Via2l0Z2xvYmFsLmg6Cisg
ICAgICAgICogQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBBcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBcGkvcXdl
Ym5ldHdvcmtpbnRlcmZhY2VfcC5oOiBSZW1vdmVkLgorICAgICAgICAqIEFwaS9xd2VicGFnZS5j
cHA6CisgICAgICAgIChRV2ViUGFnZVByaXZhdGU6OlFXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAg
IChRV2ViUGFnZVByaXZhdGU6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KToKKyAgICAgICAgKFFX
ZWJQYWdlOjphY2NlcHROYXZpZ2F0aW9uUmVxdWVzdCk6CisgICAgICAgIChRV2ViUGFnZTo6YWN0
aW9uKToKKyAgICAgICAgKFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwpOgorICAgICAgICAqIEFw
aS9xd2VicGFnZS5oOgorICAgICAgICAqIEFwaS9xd2VicGFnZV9wLmg6CisgICAgICAgICogQXBp
L3F3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFXZWJWaWV3Ojpsb2FkKToKKyAgICAgICAgKFFXZWJW
aWV3OjpldmVudCk6CisgICAgICAgICogQXBpL3F3ZWJ2aWV3Lmg6CisgICAgICAgICogUXRMYXVu
Y2hlci9tYWluLmNwcDoKKyAgICAgICAgKE1haW5XaW5kb3c6OnByaW50KToKKyAgICAgICAgKE1h
aW5XaW5kb3c6OnNldHVwVUkpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFF0Ojpkb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRRdDo6
c3RhcnREb3dubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFF0Ojpj
cmVhdGVQbHVnaW4pOgorCiAyMDA5LTExLTE2ICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNt
YW5uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlz
dGlhbnNlbi4KSW5kZXg6IFdlYktpdC9xdC9BcGkvcWNvb2tpZWphci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3F0L0FwaS9xY29va2llamFyLmNwcAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJL
aXQvcXQvQXBpL3Fjb29raWVqYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwNyArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNlcyBJ
bmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInFjb29raWVqYXIuaCIKLSNp
bmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgotdWludCBxSGFzaChjb25zdCBRVXJsJik7Ci0jaW5j
bHVkZSA8UUhhc2g+Ci0jaW5jbHVkZSA8UVBvaW50ZXI+Ci0KLWNsYXNzIFFDb29raWVKYXJQcml2
YXRlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFFDb29raWVKYXJQcml2YXRlKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgZW5hYmxlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBl
bmFibGVkOwotICAgICAgICBRSGFzaDxRVXJsLCBRU3RyaW5nPiBqYXI7Ci19OwotCi0KLXVpbnQg
cUhhc2goY29uc3QgUVVybCYgdXJsKQotewotICAgIHJldHVybiBxSGFzaCh1cmwudG9TdHJpbmco
KSk7Ci19Ci0KLQotUUNvb2tpZUphcjo6UUNvb2tpZUphcigpCi06IFFPYmplY3QoKSwgZChuZXcg
UUNvb2tpZUphclByaXZhdGUpCi17Ci19Ci0KLQotUUNvb2tpZUphcjo6flFDb29raWVKYXIoKQot
ewotICAgIGRlbGV0ZSBkOwotfQotCi0KLXZvaWQgUUNvb2tpZUphcjo6c2V0Q29va2llcyhjb25z
dCBRVXJsJiB1cmwsIGNvbnN0IFFVcmwmIHBvbGljeVVybCwgY29uc3QgUVN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgUV9VTlVTRUQocG9saWN5VXJsKQotICAgIGQtPmphci5pbnNlcnQodXJsLCB2YWx1
ZSk7Ci19Ci0KLQotUVN0cmluZyBRQ29va2llSmFyOjpjb29raWVzKGNvbnN0IFFVcmwmIHVybCkK
LXsKLSAgICByZXR1cm4gZC0+amFyLnZhbHVlKHVybCk7Ci19Ci0KLQotYm9vbCBRQ29va2llSmFy
Ojppc0VuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBkLT5lbmFibGVkOwotfQotCi0KLXZv
aWQgUUNvb2tpZUphcjo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgZC0+ZW5hYmxl
ZCA9IGVuYWJsZWQ7Ci19Ci0KLQotc3RhdGljIFFQb2ludGVyPFFDb29raWVKYXI+IGdKYXI7Ci1z
dGF0aWMgYm9vbCBnUm91dGluZUFkZGVkID0gZmFsc2U7Ci0KLXN0YXRpYyB2b2lkIGdDbGVhbnVw
SmFyKCkKLXsKLSAgICBkZWxldGUgZ0phcjsKLX0KLQotCi12b2lkIFFDb29raWVKYXI6OnNldENv
b2tpZUphcihRQ29va2llSmFyKiBqYXIpCi17Ci0gICAgaWYgKCFnUm91dGluZUFkZGVkKSB7Ci0g
ICAgICAgIHFBZGRQb3N0Um91dGluZShnQ2xlYW51cEphcik7Ci0gICAgICAgIGdSb3V0aW5lQWRk
ZWQgPSB0cnVlOwotICAgIH0KLSAgICBkZWxldGUgZ0phcjsKLSAgICBnSmFyID0gamFyOwotfQot
Ci0KLVFDb29raWVKYXIqIFFDb29raWVKYXI6OmNvb2tpZUphcigpCi17Ci0gICAgaWYgKCFnSmFy
KQotICAgICAgICBzZXRDb29raWVKYXIobmV3IFFDb29raWVKYXIpOwotCi0gICAgcmV0dXJuIGdK
YXI7Ci19CkluZGV4OiBXZWJLaXQvcXQvQXBpL3Fjb29raWVqYXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvQXBpL3Fjb29raWVqYXIuaAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJLaXQvcXQv
QXBpL3Fjb29raWVqYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NCArMCwwIEBACi0vKgotICAg
IENvcHlyaWdodCAoQykgMjAwNyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNlcyBJbmMuCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2lmbmRlZiBRQ09PS0lFSkFSX0gKLSNkZWZpbmUgUUNPT0tJRUpBUl9ICi0KLSNpbmNsdWRlIDxR
dENvcmUvcW9iamVjdC5oPgotI2luY2x1ZGUgPFF0Q29yZS9xdXJsLmg+Ci0jaW5jbHVkZSAicXdl
YmtpdGdsb2JhbC5oIgotCi1jbGFzcyBRQ29va2llSmFyUHJpdmF0ZTsKLQotY2xhc3MgUVdFQktJ
VF9FWFBPUlQgUUNvb2tpZUphciA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotCi0g
ICAgUV9QUk9QRVJUWShib29sIGVuYWJsZWQgUkVBRCBpc0VuYWJsZWQgV1JJVEUgc2V0RW5hYmxl
ZCkKLXB1YmxpYzoKLSAgICBRQ29va2llSmFyKCk7Ci0gICAgflFDb29raWVKYXIoKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBzZXRDb29raWVzKGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUVVybCYgcG9s
aWN5VXJsLCBjb25zdCBRU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdmlydHVhbCBRU3RyaW5nIGNvb2tp
ZXMoY29uc3QgUVVybCYgdXJsKTsKLQotICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBzZXRDb29raWVKYXIoUUNvb2tpZUphciogamFyKTsKLSAgICBzdGF0aWMg
UUNvb2tpZUphciogY29va2llSmFyKCk7Ci0KLXB1YmxpYyBzbG90czoKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0RW5hYmxlZChib29sIGVuYWJsZWQpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBRQ29va2llSmFyUHJpdmF0ZTsKLSAgICBRQ29va2llSmFyUHJpdmF0ZSogZDsKLX07Ci0KLQot
I2VuZGlmCkluZGV4OiBXZWJLaXQvcXQvQXBpL3FncmFwaGljc3dlYnZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9xdC9BcGkvcWdyYXBoaWNzd2Vidmlldy5jcHAJKHJldmlzaW9uIDUxMDYy
KQorKysgV2ViS2l0L3F0L0FwaS9xZ3JhcGhpY3N3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzY3LDcgKzM2Nyw2IEBAIGJvb2wgUUdyYXBoaWNzV2ViVmlldzo6ZXZlbnQoUUV2ZW50KiBl
dmUKICNlbmRpZiAvLyBRVF9OT19DT05URVhUTUVOVQogICAgICAgICB7CiAjaWZuZGVmIFFUX05P
X0NVUlNPUgotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKICAgICAgICAgICAgIGlmIChldmVu
dC0+dHlwZSgpID09IFFFdmVudDo6Q3Vyc29yQ2hhbmdlKSB7CiAgICAgICAgICAgICAgICAgLy8g
QW4gdW5zZXRDdXJzb3Igd2lsbCBzZXQgdGhlIGN1cnNvciB0byBRdDo6QXJyb3dDdXJzb3IuCiAg
ICAgICAgICAgICAgICAgLy8gVGh1cyB0aGlzIGN1cnNvciBjaGFuZ2UgbWlnaHQgYmUgYSBRV2lk
Z2V0Ojp1bnNldEN1cnNvcigpCkBAIC0zODEsNyArMzgwLDYgQEAgYm9vbCBRR3JhcGhpY3NXZWJW
aWV3OjpldmVudChRRXZlbnQqIGV2ZQogICAgICAgICAgICAgICAgICAgICBkLT5yZXNldEN1cnNv
cigpOwogICAgICAgICAgICAgfQogI2VuZGlmCi0jZW5kaWYKICAgICAgICAgfQogICAgIH0KICAg
ICByZXR1cm4gUUdyYXBoaWNzV2lkZ2V0OjpldmVudChldmVudCk7CkluZGV4OiBXZWJLaXQvcXQv
QXBpL3F3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUu
Y3BwCShyZXZpc2lvbiA1MTA2MikKKysrIFdlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsMTQgKzc3LDcgQEAKICNpbmNsdWRlIDxxcGFpbnRlci5oPgogI2lu
Y2x1ZGUgPHFwcmludGVyLmg+CiAjaW5jbHVkZSA8cXJlZ2lvbi5oPgotCi0jaWYgUVRfVkVSU0lP
TiA8IDB4MDQwNDAwCi0jaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2UuaCIKLSNlbmRpZgot
Ci0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogI2luY2x1ZGUgPHFuZXR3b3JrcmVxdWVzdC5o
PgotI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC02NzUsNTEgKzY2OCw5
IEBAIFFXZWJQYWdlICpRV2ViRnJhbWU6OnBhZ2UoKSBjb25zdAogKi8KIHZvaWQgUVdlYkZyYW1l
Ojpsb2FkKGNvbnN0IFFVcmwgJnVybCkKIHsKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAg
ICBsb2FkKFFXZWJOZXR3b3JrUmVxdWVzdChlbnN1cmVBYnNvbHV0ZVVybCh1cmwpKSk7Ci0jZWxz
ZQogICAgIGxvYWQoUU5ldHdvcmtSZXF1ZXN0KGVuc3VyZUFic29sdXRlVXJsKHVybCkpKTsKLSNl
bmRpZgogfQogCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0vKiEKLSAgTG9hZHMgYSBuZXR3
b3JrIHJlcXVlc3QsIFxhIHJlcSwgaW50byB0aGlzIGZyYW1lLgotCi0gIFxub3RlIFRoZSB2aWV3
IHJlbWFpbnMgdGhlIHNhbWUgdW50aWwgZW5vdWdoIGRhdGEgaGFzIGFycml2ZWQgdG8gZGlzcGxh
eSB0aGUgbmV3IHVybC4KLSovCi12b2lkIFFXZWJGcmFtZTo6bG9hZChjb25zdCBRV2ViTmV0d29y
a1JlcXVlc3QgJnJlcSkKLXsKLSAgICBpZiAoZC0+cGFyZW50RnJhbWUoKSkKLSAgICAgICAgZC0+
cGFnZS0+ZC0+aW5zaWRlT3BlbkNhbGwgPSB0cnVlOwotCi0gICAgUVVybCB1cmwgPSBlbnN1cmVB
YnNvbHV0ZVVybChyZXEudXJsKCkpOwotICAgIFFIdHRwUmVxdWVzdEhlYWRlciBodHRwSGVhZGVy
ID0gcmVxLmh0dHBIZWFkZXIoKTsKLSAgICBRQnl0ZUFycmF5IHBvc3REYXRhID0gcmVxLnBvc3RE
YXRhKCk7Ci0KLSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmwpOwotCi0g
ICAgUVN0cmluZyBtZXRob2QgPSBodHRwSGVhZGVyLm1ldGhvZCgpOwotICAgIGlmICghbWV0aG9k
LmlzRW1wdHkoKSkKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKG1ldGhvZCk7Ci0KLSAg
ICBRTGlzdDxRUGFpcjxRU3RyaW5nLCBRU3RyaW5nPiA+IHZhbHVlcyA9IGh0dHBIZWFkZXIudmFs
dWVzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgUVBhaXI8UVN0cmluZywgUVN0cmluZz4gJnZhbCA9IHZhbHVlcy5hdChpKTsK
LSAgICAgICAgcmVxdWVzdC5hZGRIVFRQSGVhZGVyRmllbGQodmFsLmZpcnN0LCB2YWwuc2Vjb25k
KTsKLSAgICB9Ci0KLSAgICBpZiAoIXBvc3REYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmVxdWVz
dC5zZXRIVFRQQm9keShXZWJDb3JlOjpGb3JtRGF0YTo6Y3JlYXRlKHBvc3REYXRhLmNvbnN0RGF0
YSgpLCBwb3N0RGF0YS5zaXplKCkpKTsKLQotICAgIGQtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZChy
ZXF1ZXN0LCBmYWxzZSk7Ci0KLSAgICBpZiAoZC0+cGFyZW50RnJhbWUoKSkKLSAgICAgICAgZC0+
cGFnZS0+ZC0+aW5zaWRlT3BlbkNhbGwgPSBmYWxzZTsKLX0KLQotI2Vsc2UKLQogLyohCiAgIExv
YWRzIGEgbmV0d29yayByZXF1ZXN0LCBcYSByZXEsIGludG8gdGhpcyBmcmFtZSwgdXNpbmcgdGhl
IG1ldGhvZCBzcGVjaWZpZWQgaW4gXGEKICAgb3BlcmF0aW9uLgpAQCAtNzc4LDcgKzcyOSw2IEBA
IHZvaWQgUVdlYkZyYW1lOjpsb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWUKICAgICBpZiAoZC0+cGFy
ZW50RnJhbWUoKSkKICAgICAgICAgZC0+cGFnZS0+ZC0+aW5zaWRlT3BlbkNhbGwgPSBmYWxzZTsK
IH0KLSNlbmRpZgogCiAvKiEKICAgU2V0cyB0aGUgY29udGVudCBvZiB0aGlzIGZyYW1lIHRvIFxh
IGh0bWwuIFxhIGJhc2VVcmwgaXMgb3B0aW9uYWwgYW5kIHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2
ZQpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvQXBpL3F3ZWJmcmFtZS5oCShyZXZpc2lvbiA1MTA2MikKKysrIFdlYktpdC9xdC9BcGkvcXdl
YmZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDcgQEAKICNpbmNsdWRlIDxRdENv
cmUvcXZhcmlhbnQuaD4KICNpbmNsdWRlIDxRdEd1aS9xaWNvbi5oPgogI2luY2x1ZGUgPFF0U2Ny
aXB0L3FzY3JpcHRlbmdpbmUuaD4KLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAjaW5jbHVk
ZSA8UXROZXR3b3JrL3FuZXR3b3JrYWNjZXNzbWFuYWdlci5oPgotI2VuZGlmCiAjaW5jbHVkZSAi
cXdlYmtpdGdsb2JhbC5oIgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKQEAgLTEyMywxMyArMTIxLDkg
QEAgcHVibGljOgogICAgIFFXZWJQYWdlICpwYWdlKCkgY29uc3Q7CiAKICAgICB2b2lkIGxvYWQo
Y29uc3QgUVVybCAmdXJsKTsKLSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSAgICB2b2lkIGxv
YWQoY29uc3QgUVdlYk5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0KTsKLSNlbHNlCiAgICAgdm9pZCBs
b2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwKICAgICAgICAgICAgICAgUU5ldHdv
cmtBY2Nlc3NNYW5hZ2VyOjpPcGVyYXRpb24gb3BlcmF0aW9uID0gUU5ldHdvcmtBY2Nlc3NNYW5h
Z2VyOjpHZXRPcGVyYXRpb24sCiAgICAgICAgICAgICAgIGNvbnN0IFFCeXRlQXJyYXkgJmJvZHkg
PSBRQnl0ZUFycmF5KCkpOwotI2VuZGlmCiAgICAgdm9pZCBzZXRIdG1sKGNvbnN0IFFTdHJpbmcg
Jmh0bWwsIGNvbnN0IFFVcmwgJmJhc2VVcmwgPSBRVXJsKCkpOwogICAgIHZvaWQgc2V0Q29udGVu
dChjb25zdCBRQnl0ZUFycmF5ICZkYXRhLCBjb25zdCBRU3RyaW5nICZtaW1lVHlwZSA9IFFTdHJp
bmcoKSwgY29uc3QgUVVybCAmYmFzZVVybCA9IFFVcmwoKSk7CiAKSW5kZXg6IFdlYktpdC9xdC9B
cGkvcXdlYmtpdGdsb2JhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYmtpdGds
b2JhbC5oCShyZXZpc2lvbiA1MTA2MikKKysrIFdlYktpdC9xdC9BcGkvcXdlYmtpdGdsb2JhbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxNSArNDAsNCBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0j
aWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwCi0gICAgI2lmbmRlZiBRVF9CRUdJTl9OQU1FU1BBQ0UK
LSAgICAjZGVmaW5lIFFUX0JFR0lOX05BTUVTUEFDRQotICAgICNlbmRpZgotCi0gICAgI2lmbmRl
ZiBRVF9FTkRfTkFNRVNQQUNFCi0gICAgI2RlZmluZSBRVF9FTkRfTkFNRVNQQUNFCi0gICAgI2Vu
ZGlmCi0jZW5kaWYKLQotCiAjZW5kaWYgLy8gUVdFQktJVEdMT0JBTF9ICkluZGV4OiBXZWJLaXQv
cXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQv
QXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJLaXQv
cXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzE1
ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA2IEVucmljbyBSb3MgPGVucmljby5y
b3NAbTMxZW5naW5lZXJpbmcuaXQ+Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICAgIENvcHlyaWdodCAoQykgMjAw
NyBTdGFpa29zIENvbXB1dGluZyBTZXJ2aWNlcyBJbmMuICA8aW5mb0BzdGFpa29zLm5ldD4KLQot
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8cWdsb2JhbC5oPgotI2lmIFFUX1ZFUlNJ
T04gPCAweDA0MDQwMAotI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgotI2luY2x1ZGUgInF3ZWJuZXR3
b3JraW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2VfcC5oIgotI2lu
Y2x1ZGUgInF3ZWJwYWdlLmgiCi0jaW5jbHVkZSAicWNvb2tpZWphci5oIgotI2luY2x1ZGUgPHFk
ZWJ1Zy5oPgotI2luY2x1ZGUgPHFmaWxlLmg+Ci0jaW5jbHVkZSA8cW5ldHdvcmtwcm94eS5oPgot
I2luY2x1ZGUgPHF1cmwuaD4KLSNpbmNsdWRlIDxRQXV0aGVudGljYXRvcj4KLSNpbmNsdWRlIDxR
Q29yZUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFTc2xFcnJvcj4KLQotI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKLSNpbmNsdWRl
ICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotCi0jaWYgMAotI2RlZmluZSBERUJVRyBxRGVidWcK
LSNlbHNlCi0jZGVmaW5lIERFQlVHIGlmICgxKSB7fSBlbHNlIHFEZWJ1ZwotI2VuZGlmCi0KLXN0
YXRpYyBRV2ViTmV0d29ya0ludGVyZmFjZSAqc19kZWZhdWx0X2ludGVyZmFjZSA9IDA7Ci1zdGF0
aWMgUVdlYk5ldHdvcmtNYW5hZ2VyICpzX21hbmFnZXIgPSAwOwotCi11c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKLQotdWludCBxSGFzaChjb25zdCBIb3N0SW5mbyAmaW5mbykKLXsKLSAgICByZXR1
cm4gcUhhc2goaW5mby5ob3N0KSArIGluZm8ucG9ydDsKLX0KLQotc3RhdGljIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBIb3N0SW5mbyAmaTEsIGNvbnN0IEhvc3RJbmZvICZpMikKLXsKLSAgICByZXR1
cm4gaTEucG9ydCA9PSBpMi5wb3J0ICYmIGkxLmhvc3QgPT0gaTIuaG9zdDsKLX0KLQotZW51bSBQ
YXJzZXJTdGF0ZSB7Ci0gICAgU3RhdGVfQmVnaW4sCi0gICAgU3RhdGVfRmlyc3RDaGFyLAotICAg
IFN0YXRlX1NlY29uZENoYXIKLX07Ci0KLS8qCi0gKiBEZWNvZGUgVVJMcyB3aXRob3V0IGRvaW5n
IGFueSBjaGFyc2V0IGNvbnZlcnNpb24uCi0gKgotICogTW9zdCBzaW1wbGUgYXBwcm9hY2ggdG8g
ZG8gaXQgd2l0aG91dCBhbnkgbG9va2FoZWFkLgotICovCi1zdGF0aWMgUUJ5dGVBcnJheSBkZWNv
ZGVQZXJjZW50RW5jb2RpbmcoY29uc3QgUUJ5dGVBcnJheSYgaW5wdXQpCi17Ci0gICAgaW50IGFj
dHVhbExlbmd0aCA9IDA7Ci0gICAgUUJ5dGVBcnJheSB0bXBWYWw7Ci0gICAgUUJ5dGVBcnJheSBv
dXRwdXQ7Ci0gICAgUGFyc2VyU3RhdGUgc3RhdGUgPSBTdGF0ZV9CZWdpbjsKLQotICAgIG91dHB1
dC5yZXNpemUoaW5wdXQubGVuZ3RoKCkpOwotICAgIHRtcFZhbC5yZXNpemUoMik7Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGlmIChzdGF0
ZSA9PSBTdGF0ZV9CZWdpbikgewotICAgICAgICAgICAgaWYgKGlucHV0LmF0KGkpID09ICclJykK
LSAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlX0ZpcnN0Q2hhcjsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBvdXRwdXRbYWN0dWFsTGVuZ3RoKytdID0gaW5wdXRbaV07Ci0g
ICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gU3RhdGVfRmlyc3RDaGFyKSB7Ci0gICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlX1NlY29uZENoYXI7Ci0gICAgICAgICAgICB0bXBWYWxbMF0gPSBpbnB1
dFtpXTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBTdGF0ZV9TZWNvbmRDaGFyKSB7Ci0g
ICAgICAgICAgICBzdGF0ZSA9IFN0YXRlX0JlZ2luOwotICAgICAgICAgICAgdG1wVmFsWzFdID0g
aW5wdXRbaV07Ci0gICAgICAgICAgICBvdXRwdXRbYWN0dWFsTGVuZ3RoKytdID0gdG1wVmFsLnRv
U2hvcnQoMCwgMTYpOwotICAgICAgICB9Ci0KLSAgICBvdXRwdXQucmVzaXplKGFjdHVhbExlbmd0
aCk7Ci0gICAgcmV0dXJuIG91dHB1dDsKLX0KLQotdm9pZCBRV2ViTmV0d29ya1JlcXVlc3RQcml2
YXRlOjppbml0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCAmcmVzb3VyY2VSZXF1ZXN0
KQotewotICAgIEtVUkwgdXJsID0gcmVzb3VyY2VSZXF1ZXN0LnVybCgpOwotICAgIFFVcmwgcXVy
bCA9IFFTdHJpbmcodXJsLnN0cmluZygpKTsKLSAgICBpbml0KHJlc291cmNlUmVxdWVzdC5odHRw
TWV0aG9kKCksIHF1cmwsICZyZXNvdXJjZVJlcXVlc3QpOwotfQotCi12b2lkIFFXZWJOZXR3b3Jr
UmVxdWVzdFByaXZhdGU6OmluaXQoY29uc3QgUVN0cmluZyYgbWV0aG9kLCBjb25zdCBRVXJsJiB1
cmwsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCogcmVzb3VyY2VSZXF1ZXN0KQotewot
ICAgIGh0dHBIZWFkZXIgPSBRSHR0cFJlcXVlc3RIZWFkZXIobWV0aG9kLCB1cmwudG9TdHJpbmco
UVVybDo6UmVtb3ZlU2NoZW1lfFFVcmw6OlJlbW92ZUF1dGhvcml0eSkpOwotICAgIGh0dHBIZWFk
ZXIuc2V0VmFsdWUoUUxhdGluMVN0cmluZygiQ29ubmVjdGlvbiIpLCBRTGF0aW4xU3RyaW5nKCJL
ZWVwLUFsaXZlIikpOwotICAgIHNldFVSTCh1cmwpOwotCi0gICAgaWYgKHJlc291cmNlUmVxdWVz
dCkgewotICAgICAgICBodHRwSGVhZGVyLnNldFZhbHVlKFFMYXRpbjFTdHJpbmcoIlVzZXItQWdl
bnQiKSwgcmVzb3VyY2VSZXF1ZXN0LT5odHRwVXNlckFnZW50KCkpOwotICAgICAgICBjb25zdCBR
U3RyaW5nIHNjaGVtZSA9IHVybC5zY2hlbWUoKS50b0xvd2VyKCk7Ci0gICAgICAgIGlmIChzY2hl
bWUgPT0gUUxhdGluMVN0cmluZygiaHR0cCIpIHx8IHNjaGVtZSA9PSBRTGF0aW4xU3RyaW5nKCJo
dHRwcyIpKSB7Ci0gICAgICAgICAgICBRU3RyaW5nIGNvb2tpZXMgPSBRQ29va2llSmFyOjpjb29r
aWVKYXIoKS0+Y29va2llcyhyZXNvdXJjZVJlcXVlc3QtPnVybCgpKTsKLSAgICAgICAgICAgIGlm
ICghY29va2llcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgaHR0cEhlYWRlci5zZXRWYWx1
ZShRTGF0aW4xU3RyaW5nKCJDb29raWUiKSwgY29va2llcyk7Ci0gICAgICAgIH0KLQotCi0gICAg
ICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGxvYWRlckhlYWRlcnMgPSByZXNvdXJjZVJlcXVlc3Qt
Pmh0dHBIZWFkZXJGaWVsZHMoKTsKLSAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbG9hZGVySGVhZGVycy5lbmQoKTsKLSAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxvYWRlckhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAgICAgaHR0cEhlYWRlci5zZXRWYWx1ZShpdC0+Zmlyc3QsIGl0LT5zZWNv
bmQpOwotCi0gICAgICAgIC8vIGhhbmRsZSBhbmQgcGVyZm9ybSBhICdQT1NUJyByZXF1ZXN0Ci0g
ICAgICAgIGlmIChtZXRob2QgPT0gIlBPU1QiKSB7Ci0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
ZGF0YTsKLSAgICAgICAgICAgIHJlc291cmNlUmVxdWVzdC0+aHR0cEJvZHkoKS0+ZmxhdHRlbihk
YXRhKTsKLSAgICAgICAgICAgIHBvc3REYXRhID0gUUJ5dGVBcnJheShkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOwotICAgICAgICAgICAgaHR0cEhlYWRlci5zZXRWYWx1ZShRTGF0aW4xU3RyaW5n
KCJjb250ZW50LWxlbmd0aCIpLCBRU3RyaW5nOjpudW1iZXIocG9zdERhdGEuc2l6ZSgpKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUVdlYk5ldHdvcmtSZXF1ZXN0UHJpdmF0ZTo6c2V0
VVJMKGNvbnN0IFFVcmwmIHUpCi17Ci0gICAgdXJsID0gdTsKLSAgICBpbnQgcG9ydCA9IHVybC5w
b3J0KCk7Ci0gICAgY29uc3QgUVN0cmluZyBzY2hlbWUgPSB1LnNjaGVtZSgpOwotICAgIGlmIChw
b3J0ID4gMCAmJiAocG9ydCAhPSA4MCB8fCBzY2hlbWUgIT0gImh0dHAiKSAmJiAocG9ydCAhPSA0
NDMgfHwgc2NoZW1lICE9ICJodHRwcyIpKQotICAgICAgICBodHRwSGVhZGVyLnNldFZhbHVlKFFM
YXRpbjFTdHJpbmcoIkhvc3QiKSwgdXJsLmhvc3QoKSArIFFMYXRpbjFDaGFyKCc6JykgKyBRU3Ry
aW5nOjpudW1iZXIocG9ydCkpOwotICAgIGVsc2UKLSAgICAgICAgaHR0cEhlYWRlci5zZXRWYWx1
ZShRTGF0aW4xU3RyaW5nKCJIb3N0IiksIHVybC5ob3N0KCkpOwotfQotCi0vKiEKLSAgXGNsYXNz
IFFXZWJOZXR3b3JrUmVxdWVzdAotICBcaW50ZXJuYWwKLQotICBUaGUgUVdlYk5ldHdvcmtSZXF1
ZXN0IGNsYXNzIHJlcHJlc2VudHMgYSByZXF1ZXN0IGZvciBkYXRhIGZyb20gdGhlIG5ldHdvcmsg
d2l0aCBhbGwgdGhlCi0gIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHJldHJpZXZh
bC4gVGhpcyBpbmNsdWRlcyB0aGUgdXJsLCBleHRyYSBIVFRQIGhlYWRlciBmaWVsZHMKLSAgYXMg
d2VsbCBhcyBkYXRhIGZvciBhIEhUVFAgUE9TVCByZXF1ZXN0LgotKi8KLQotUVdlYk5ldHdvcmtS
ZXF1ZXN0OjpRV2ViTmV0d29ya1JlcXVlc3QoKQotICAgIDogZChuZXcgUVdlYk5ldHdvcmtSZXF1
ZXN0UHJpdmF0ZSkKLXsKLX0KLQotUVdlYk5ldHdvcmtSZXF1ZXN0OjpRV2ViTmV0d29ya1JlcXVl
c3QoY29uc3QgUVVybCYgdXJsLCBNZXRob2QgbWV0aG9kLCBjb25zdCBRQnl0ZUFycmF5JiBwb3N0
RGF0YSkKLSAgICA6IGQobmV3IFFXZWJOZXR3b3JrUmVxdWVzdFByaXZhdGUpCi17Ci0gICAgZC0+
aW5pdChtZXRob2QgPT0gR2V0ID8gIkdFVCIgOiAiUE9TVCIsIHVybCk7Ci0gICAgZC0+cG9zdERh
dGEgPSBwb3N0RGF0YTsKLX0KLQotUVdlYk5ldHdvcmtSZXF1ZXN0OjpRV2ViTmV0d29ya1JlcXVl
c3QoY29uc3QgUVdlYk5ldHdvcmtSZXF1ZXN0ICZvdGhlcikKLSAgICA6IGQobmV3IFFXZWJOZXR3
b3JrUmVxdWVzdFByaXZhdGUoKm90aGVyLmQpKQotewotfQotCi1RV2ViTmV0d29ya1JlcXVlc3Qg
JlFXZWJOZXR3b3JrUmVxdWVzdDo6b3BlcmF0b3I9KGNvbnN0IFFXZWJOZXR3b3JrUmVxdWVzdCYg
b3RoZXIpCi17Ci0gICAgKmQgPSAqb3RoZXIuZDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLS8q
IQotICBcaW50ZXJuYWwKLSovCi1RV2ViTmV0d29ya1JlcXVlc3Q6OlFXZWJOZXR3b3JrUmVxdWVz
dChjb25zdCBRV2ViTmV0d29ya1JlcXVlc3RQcml2YXRlJiBwcml2KQotICAgIDogZChuZXcgUVdl
Yk5ldHdvcmtSZXF1ZXN0UHJpdmF0ZShwcml2KSkKLXsKLX0KLQotLyohCi0gIFxpbnRlcm5hbAot
Ki8KLVFXZWJOZXR3b3JrUmVxdWVzdDo6UVdlYk5ldHdvcmtSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLSAgICA6IGQobmV3IFFXZWJOZXR3b3JrUmVxdWVz
dFByaXZhdGUpCi17Ci0gICAgZC0+aW5pdChyZXF1ZXN0KTsKLX0KLQotUVdlYk5ldHdvcmtSZXF1
ZXN0Ojp+UVdlYk5ldHdvcmtSZXF1ZXN0KCkKLXsKLSAgICBkZWxldGUgZDsKLX0KLQotLyohCi0g
IFxpbnRlcm5hbAotICBUaGUgcmVxdWVzdGVkIFVSTAotKi8KLVFVcmwgUVdlYk5ldHdvcmtSZXF1
ZXN0Ojp1cmwoKSBjb25zdAotewotICAgIHJldHVybiBkLT51cmw7Ci19Ci0KLS8qIQotICAgXGlu
dGVybmFsCi0gICBTZXRzIHRoZSBVUkwgdG8gcmVxdWVzdC4KLQotICAgTm90ZSB0aGF0IHNldHRp
bmcgdGhlIFVSTCBhbHNvIHNldHMgdGhlICJIb3N0IiBmaWVsZCBpbiB0aGUgSFRUUCBoZWFkZXIu
Ci0qLwotdm9pZCBRV2ViTmV0d29ya1JlcXVlc3Q6OnNldFVybChjb25zdCBRVXJsJiB1cmwpCi17
Ci0gICAgZC0+c2V0VVJMKHVybCk7Ci19Ci0KLS8qIQotICAgXGludGVybmFsCi0gICBUaGUgaHR0
cCByZXF1ZXN0IGhlYWRlciBpbmZvcm1hdGlvbi4KLSovCi1RSHR0cFJlcXVlc3RIZWFkZXIgUVdl
Yk5ldHdvcmtSZXF1ZXN0OjpodHRwSGVhZGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZC0+aHR0
cEhlYWRlcjsKLX0KLQotdm9pZCBRV2ViTmV0d29ya1JlcXVlc3Q6OnNldEh0dHBIZWFkZXIoY29u
c3QgUUh0dHBSZXF1ZXN0SGVhZGVyJiBoZWFkZXIpIGNvbnN0Ci17Ci0gICAgZC0+aHR0cEhlYWRl
ciA9IGhlYWRlcjsKLX0KLQotUVN0cmluZyBRV2ViTmV0d29ya1JlcXVlc3Q6Omh0dHBIZWFkZXJG
aWVsZChjb25zdCBRU3RyaW5nJiBrZXkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPmh0dHBIZWFk
ZXIudmFsdWUoa2V5KTsKLX0KLQotdm9pZCBRV2ViTmV0d29ya1JlcXVlc3Q6OnNldEh0dHBIZWFk
ZXJGaWVsZChjb25zdCBRU3RyaW5nJiBrZXksIGNvbnN0IFFTdHJpbmcmIHZhbHVlKQotewotICAg
IGQtPmh0dHBIZWFkZXIuc2V0VmFsdWUoa2V5LCB2YWx1ZSk7Ci19Ci0KLS8qIQotICAgIFxpbnRl
cm5hbAotICAgIFBvc3QgZGF0YSBzZW50IHdpdGggSFRUUCBQT1NUIHJlcXVlc3RzLgotKi8KLVFC
eXRlQXJyYXkgUVdlYk5ldHdvcmtSZXF1ZXN0Ojpwb3N0RGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGQtPnBvc3REYXRhOwotfQotCi12b2lkIFFXZWJOZXR3b3JrUmVxdWVzdDo6c2V0UG9zdERh
dGEoY29uc3QgUUJ5dGVBcnJheSYgZGF0YSkKLXsKLSAgICBkLT5wb3N0RGF0YSA9IGRhdGE7Ci19
Ci0KLS8qIQotICBcY2xhc3MgUVdlYk5ldHdvcmtKb2IKLSAgXGludGVybmFsCi0KLSAgVGhlIFFX
ZWJOZXR3b3JrSm9iIGNsYXNzIHJlcHJlc2VudHMgYSBuZXR3b3JrIGpvYiwgdGhhdCBuZWVkcyB0
byBiZQotICBwcm9jZXNzZWQgYnkgdGhlIFFXZWJOZXR3b3JrSW50ZXJmYWNlLgotCi0gIFRoaXMg
Y2xhc3MgaXMgb25seSByZXF1aXJlZCB3aGVuIGltcGxlbWVudGluZyBhIG5ldyBuZXR3b3JrIGxh
eWVyIChvcgotICBzdXBwb3J0IGZvciBhIHNwZWNpYWwgcHJvdG9jb2wpIHVzaW5nIFFXZWJOZXR3
b3JrSW50ZXJmYWNlLgotCi0gIFFXZWJOZXR3b3JrSm9iIG9iamVjdHMgYXJlIGNyZWF0ZWQgYW5k
IG93bmVkIGJ5IHRoZSBRdFdlYktpdCBsaWJyYXJ5LgotICBNb3N0IG9mIGl0J3MgcHJvcGVydGll
cyBhcmUgcmVhZC1vbmx5LgotCi0gIFRoZSBqb2IgaXMgcmVmZXJlbmNlIGNvdW50ZWQuIFRoaXMg
Y2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGpvYiBkb2Vzbid0Ci0gIGdldCBkZWxldGVk
IHdoaWxlIGl0J3Mgc3RpbGwgc3RvcmVkIGluIHNvbWUgZGF0YSBzdHJ1Y3R1cmUuCi0qLwotCi0v
KiEKLSAgXGludGVybmFsCi0qLwotUVdlYk5ldHdvcmtKb2I6OlFXZWJOZXR3b3JrSm9iKCkKLSAg
ICA6IGQobmV3IFFXZWJOZXR3b3JrSm9iUHJpdmF0ZSkKLXsKLX0KLQotLyohCi0gIFxpbnRlcm5h
bAotKi8KLVFXZWJOZXR3b3JrSm9iOjp+UVdlYk5ldHdvcmtKb2IoKQotewotICAgIGRlbGV0ZSBk
OwotICAgIGQgPSAwOwotfQotCi0vKiEKLSAgXGludGVybmFsCi0gIFRoZSByZXF1ZXN0ZWQgVVJM
Ci0qLwotUVVybCBRV2ViTmV0d29ya0pvYjo6dXJsKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZC0+
cmVxdWVzdC51cmw7Ci19Ci0KLS8qIQotICBcaW50ZXJuYWwKLSAgUG9zdCBkYXRhIGFzc29jaWF0
ZWQgd2l0aCB0aGUgam9iCi0qLwotUUJ5dGVBcnJheSBRV2ViTmV0d29ya0pvYjo6cG9zdERhdGEo
KSBjb25zdAotewotICAgIHJldHVybiBkLT5yZXF1ZXN0LnBvc3REYXRhOwotfQotCi0vKiEKLSAg
XGludGVybmFsCi0gIFRoZSBIVFRQIHJlcXVlc3QgaGVhZGVyIHRoYXQgc2hvdWxkIGJlIHVzZWQg
dG8gZG93bmxvYWQgdGhlIGpvYi4KLSovCi1RSHR0cFJlcXVlc3RIZWFkZXIgUVdlYk5ldHdvcmtK
b2I6Omh0dHBIZWFkZXIoKSBjb25zdAotewotICAgIHJldHVybiBkLT5yZXF1ZXN0Lmh0dHBIZWFk
ZXI7Ci19Ci0KLS8qIQotICBcaW50ZXJuYWwKLSAgVGhlIGNvbXBsZXRlIG5ldHdvcmsgcmVxdWVz
dCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRvd25sb2FkIHRoZSBqb2IuCi0qLwotUVdlYk5ldHdv
cmtSZXF1ZXN0IFFXZWJOZXR3b3JrSm9iOjpyZXF1ZXN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
UVdlYk5ldHdvcmtSZXF1ZXN0KGQtPnJlcXVlc3QpOwotfQotCi0vKiEKLSAgXGludGVybmFsCi0g
IFRoZSBIVFRQIHJlc3BvbnNlIGhlYWRlciByZWNlaXZlZCBmcm9tIHRoZSBuZXR3b3JrLgotKi8K
LVFIdHRwUmVzcG9uc2VIZWFkZXIgUVdlYk5ldHdvcmtKb2I6OnJlc3BvbnNlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZC0+cmVzcG9uc2U7Ci19Ci0KLS8qIQotICBcaW50ZXJuYWwKLSAgVGhlIGxh
c3QgZXJyb3Igb2YgdGhlIEpvYi4KLSovCi1RU3RyaW5nIFFXZWJOZXR3b3JrSm9iOjplcnJvclN0
cmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPmVycm9yU3RyaW5nOwotfQotCi0vKiEKLSAg
XGludGVybmFsCi0gIFNldHMgdGhlIEhUVFAgcmVwb25zZSBoZWFkZXIuIFRoZSByZXNwb25zZSBo
ZWFkZXIgaGFzIHRvIGJlIGNhbGxlZCBiZWZvcmUKLSAgZW1pdHRpbmcgUVdlYk5ldHdvcmtJbnRl
cmZhY2U6OnN0YXJ0ZWQuCi0qLwotdm9pZCBRV2ViTmV0d29ya0pvYjo6c2V0UmVzcG9uc2UoY29u
c3QgUUh0dHBSZXNwb25zZUhlYWRlciYgcmVzcG9uc2UpCi17Ci0gICAgZC0+cmVzcG9uc2UgPSBy
ZXNwb25zZTsKLX0KLQotdm9pZCBRV2ViTmV0d29ya0pvYjo6c2V0RXJyb3JTdHJpbmcoY29uc3Qg
UVN0cmluZyYgZXJyb3JTdHJpbmcpCi17Ci0gICAgZC0+ZXJyb3JTdHJpbmcgPSBlcnJvclN0cmlu
ZzsKLX0KLQotLyohCi0gIFxpbnRlcm5hbAotICByZXR1cm5zIHRydWUgaWYgdGhlIGpvYiBoYXMg
YmVlbiBjYW5jZWxsZWQgYnkgdGhlIFdlYktpdCBmcmFtZXdvcmsKLSovCi1ib29sIFFXZWJOZXR3
b3JrSm9iOjpjYW5jZWxsZWQoKSBjb25zdAotewotICAgIHJldHVybiAhZC0+cmVzb3VyY2VIYW5k
bGU7Ci19Ci0KLS8qIQotICBcaW50ZXJuYWwKLSAgcmVmZXJlbmNlIHRoZSBqb2IuCi0qLwotdm9p
ZCBRV2ViTmV0d29ya0pvYjo6cmVmKCkKLXsKLSAgICArK2QtPnJlZjsKLX0KLQotLyohCi0gIFxp
bnRlcm5hbAotICBkZXJlZmVuY2UgdGhlIGpvYi4KLQotICBJZiB0aGUgcmVmZXJlbmNlIGNvdW50
IGRyb3BzIHRvIDAgdGhpcyBtZXRob2QgYWxzbyBkZWxldGVzIHRoZSBqb2IuCi0KLSAgUmV0dXJu
cyBmYWxzZSBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGhhcyBkcm9wcGVkIHRvIDAuCi0qLwotYm9v
bCBRV2ViTmV0d29ya0pvYjo6ZGVyZWYoKQotewotICAgIGlmICghLS1kLT5yZWYpIHsKLSAgICAg
ICAgZGVsZXRlIHRoaXM7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLS8qIQotICAgXGludGVybmFsCi0gICBSZXR1cm5zIHRoZSBuZXR3b3JrIGlu
dGVyZmFjZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGpvYi4KLSovCi1RV2ViTmV0d29y
a0ludGVyZmFjZSAqUVdlYk5ldHdvcmtKb2I6Om5ldHdvcmtJbnRlcmZhY2UoKSBjb25zdAotewot
ICAgIHJldHVybiBkLT5pbnRlcmZhY2U7Ci19Ci0KLS8qIQotICAgXGludGVybmFsCi0gICBSZXR1
cm5zIHRoZSBuZXR3b3JrIGludGVyZmFjZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGpv
Yi4KLSovCi1RV2ViRnJhbWUgKlFXZWJOZXR3b3JrSm9iOjpmcmFtZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFkLT5yZXNvdXJjZUhhbmRsZSkgewotICAgICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
ICpyaGkgPSBkLT5yZXNvdXJjZUhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICAgICAgaWYgKHJo
aSkKLSAgICAgICAgICAgIHJldHVybiByaGktPm1fZnJhbWU7Ci0gICAgfQotICAgIHJldHVybiAw
OwotfQotCi1RV2ViTmV0d29ya0pvYjo6Sm9iU3RhdHVzIFFXZWJOZXR3b3JrSm9iOjpzdGF0dXMo
KSBjb25zdAotewotICAgIHJldHVybiBkLT5qb2JTdGF0dXM7Ci19Ci0KLXZvaWQgUVdlYk5ldHdv
cmtKb2I6OnNldFN0YXR1cyhjb25zdCBKb2JTdGF0dXMmIHN0YXR1cykKLXsKLSAgICBkLT5qb2JT
dGF0dXMgPSBzdGF0dXM7Ci19Ci0KLS8qIQotICBcY2xhc3MgUVdlYk5ldHdvcmtNYW5hZ2VyCi0g
IFxpbnRlcm5hbAotKi8KLVFXZWJOZXR3b3JrTWFuYWdlcjo6UVdlYk5ldHdvcmtNYW5hZ2VyKCkK
LSAgICA6IFFPYmplY3QoMCkKLSAgICAsIG1fc2NoZWR1bGVkV29yayhmYWxzZSkKLXsKLSAgICBj
b25uZWN0KHRoaXMsIFNJR05BTChzY2hlZHVsZVdvcmsoKSksIFNMT1QoZG9Xb3JrKCkpLCBRdDo6
UXVldWVkQ29ubmVjdGlvbik7Ci19Ci0KLVFXZWJOZXR3b3JrTWFuYWdlciAqUVdlYk5ldHdvcmtN
YW5hZ2VyOjpzZWxmKCkKLXsKLSAgICAvLyBlbnN1cmUgZXZlcnl0aGluZydzIGNvbnN0cnVjdGVk
IGFuZCBjb25uZWN0ZWQKLSAgICBRV2ViTmV0d29ya0ludGVyZmFjZTo6ZGVmYXVsdEludGVyZmFj
ZSgpOwotCi0gICAgcmV0dXJuIHNfbWFuYWdlcjsKLX0KLQotYm9vbCBRV2ViTmV0d29ya01hbmFn
ZXI6OmFkZChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBRV2ViTmV0d29ya0ludGVyZmFjZSogaW50
ZXJmYWNlLCBKb2JNb2RlIGpvYk1vZGUpCi17Ci0gICAgaWYgKCFpbnRlcmZhY2UpCi0gICAgICAg
IGludGVyZmFjZSA9IHNfZGVmYXVsdF9pbnRlcmZhY2U7Ci0KLSAgICBBU1NFUlQoaW50ZXJmYWNl
KTsKLQotICAgIFFXZWJOZXR3b3JrSm9iICpqb2IgPSBuZXcgUVdlYk5ldHdvcmtKb2IoKTsKLSAg
ICBoYW5kbGUtPmdldEludGVybmFsKCktPm1fam9iID0gam9iOwotICAgIGpvYi0+ZC0+cmVzb3Vy
Y2VIYW5kbGUgPSBoYW5kbGU7Ci0gICAgam9iLT5kLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7Ci0K
LSAgICBqb2ItPmQtPnJlcXVlc3QuaW5pdChoYW5kbGUtPnJlcXVlc3QoKSk7Ci0KLSAgICBjb25z
dCBRU3RyaW5nIG1ldGhvZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKS0+bV9yZXF1ZXN0Lmh0dHBN
ZXRob2QoKTsKLSAgICBpZiAobWV0aG9kICE9ICJQT1NUIiAmJiBtZXRob2QgIT0gIkdFVCIgJiYg
bWV0aG9kICE9ICJIRUFEIikgewotICAgICAgICBxV2FybmluZygiUkVRVUVTVDogWyVzXVxuIiwg
cVByaW50YWJsZShqb2ItPmQtPnJlcXVlc3QuaHR0cEhlYWRlci50b1N0cmluZygpKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBERUJVRygpIDw8ICJRV2ViTmV0d29ya01h
bmFnZXI6OmFkZDoiIDw8ICBqb2ItPmQtPnJlcXVlc3QuaHR0cEhlYWRlci50b1N0cmluZygpOwot
Ci0gICAgaWYgKGpvYk1vZGUgPT0gU3luY2hyb25vdXNKb2IpIHsKLSAgICAgICAgUV9BU1NFUlQo
IW1fc3luY2hyb25vdXNKb2JzLmNvbnRhaW5zKGpvYikpOwotICAgICAgICBtX3N5bmNocm9ub3Vz
Sm9ic1tqb2JdID0gMTsKLSAgICB9Ci0KLSAgICBpbnRlcmZhY2UtPmFkZEpvYihqb2IpOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUVdlYk5ldHdvcmtNYW5hZ2VyOjpjYW5jZWwoUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSkKLXsKLSAgICBRV2ViTmV0d29ya0pvYiAqam9iID0gaGFuZGxl
LT5nZXRJbnRlcm5hbCgpLT5tX2pvYjsKLSAgICBpZiAoIWpvYikKLSAgICAgICAgcmV0dXJuOwot
ICAgIERFQlVHKCkgPDwgIlFXZWJOZXR3b3JrTWFuYWdlcjo6Y2FuY2VsOiIgPDwgIGpvYi0+ZC0+
cmVxdWVzdC5odHRwSGVhZGVyLnRvU3RyaW5nKCk7Ci0gICAgam9iLT5kLT5yZXNvdXJjZUhhbmRs
ZSA9IDA7Ci0gICAgam9iLT5kLT5pbnRlcmZhY2UtPmNhbmNlbEpvYihqb2IpOwotICAgIGhhbmRs
ZS0+Z2V0SW50ZXJuYWwoKS0+bV9qb2IgPSAwOwotfQotCi0vKiEKLSAgXGludGVybmFsCi0qLwot
dm9pZCBRV2ViTmV0d29ya01hbmFnZXI6OnN0YXJ0ZWQoUVdlYk5ldHdvcmtKb2IqIGpvYikKLXsK
LSAgICBRX0FTU0VSVChqb2ItPmQpOwotICAgIFFfQVNTRVJUKGpvYi0+c3RhdHVzKCkgPT0gUVdl
Yk5ldHdvcmtKb2I6OkpvYkNyZWF0ZWQgfHwKLSAgICAgICAgICAgICBqb2ItPnN0YXR1cygpID09
IFFXZWJOZXR3b3JrSm9iOjpKb2JSZWNyZWF0ZWQpOwotCi0gICAgam9iLT5zZXRTdGF0dXMoUVdl
Yk5ldHdvcmtKb2I6OkpvYlN0YXJ0ZWQpOwotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGll
bnQgPSAwOwotCi0gICAgaWYgKCFqb2ItPmQtPnJlc291cmNlSGFuZGxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBjbGllbnQgPSBqb2ItPmQtPnJlc291cmNlSGFuZGxlLT5jbGllbnQoKTsKLSAg
ICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgREVCVUcoKSA8PCAiUmVzb3Vy
Y2VIYW5kbGVNYW5hZ2VyOjpyZWNlaXZlZFJlc3BvbnNlOiI7Ci0gICAgREVCVUcoKSA8PCBqb2It
PmQtPnJlc3BvbnNlLnRvU3RyaW5nKCk7Ci0KLSAgICBRU3RyaW5nTGlzdCBjb29raWVzID0gam9i
LT5kLT5yZXNwb25zZS5hbGxWYWx1ZXMoIlNldC1Db29raWUiKTsKLSAgICBLVVJMIHVybChqb2It
PnVybCgpKTsKLQotICAgIGZvcmVhY2ggKFFTdHJpbmcgYywgY29va2llcykKLSAgICAgICAgUUNv
b2tpZUphcjo6Y29va2llSmFyKCktPnNldENvb2tpZXModXJsLCB1cmwsIGMpOwotCi0gICAgUVN0
cmluZyBjb250ZW50VHlwZSA9IGpvYi0+ZC0+cmVzcG9uc2UudmFsdWUoIkNvbnRlbnQtVHlwZSIp
OwotICAgIFFTdHJpbmcgZW5jb2Rpbmc7Ci0gICAgaW50IGlkeCA9IGNvbnRlbnRUeXBlLmluZGV4
T2YoUUxhdGluMUNoYXIoJzsnKSk7Ci0gICAgaWYgKGlkeCA+IDApIHsKLSAgICAgICAgUVN0cmlu
ZyByZW1haW5kZXIgPSBjb250ZW50VHlwZS5taWQoaWR4ICsgMSkudG9Mb3dlcigpOwotICAgICAg
ICBjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmxlZnQoaWR4KS50cmltbWVkKCk7Ci0KLSAgICAg
ICAgaWR4ID0gcmVtYWluZGVyLmluZGV4T2YoImNoYXJzZXQiKTsKLSAgICAgICAgaWYgKGlkeCA+
PSAwKSB7Ci0gICAgICAgICAgICBpZHggPSByZW1haW5kZXIuaW5kZXhPZihRTGF0aW4xQ2hhcign
PScpLCBpZHgpOwotICAgICAgICAgICAgaWYgKGlkeCA+PSAwKQotICAgICAgICAgICAgICAgIGVu
Y29kaW5nID0gcmVtYWluZGVyLm1pZChpZHggKyAxKS50cmltbWVkKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBsZXQncyB0
cnkgdG8gZ3Vlc3MgZnJvbSB0aGUgZXh0ZW5zaW9uCi0gICAgICAgIFFTdHJpbmcgZXh0ZW5zaW9u
ID0gam9iLT5kLT5yZXF1ZXN0LnVybC5wYXRoKCk7Ci0gICAgICAgIGludCBpbmRleCA9IGV4dGVu
c2lvbi5sYXN0SW5kZXhPZihRTGF0aW4xQ2hhcignLicpKTsKLSAgICAgICAgaWYgKGluZGV4ID4g
MCkgewotICAgICAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uLm1pZChpbmRleCArIDEpOwot
ICAgICAgICAgICAgY29udGVudFR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZv
ckV4dGVuc2lvbihleHRlbnNpb24pOwotICAgICAgICB9Ci0gICAgfQotLy8gICAgIHFEZWJ1Zygp
IDw8ICJDb250ZW50LVR5cGU9IiA8PCBjb250ZW50VHlwZTsKLS8vICAgICBxRGVidWcoKSA8PCAi
RW5jb2Rpbmc9IiA8PCBlbmNvZGluZzsKLQotCi0gICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZSh1cmwsIGNvbnRlbnRUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBG
SVhNRSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKCkgLyogRklYTUUgKi8pOwotCi0gICAgaW50
IHN0YXR1c0NvZGUgPSBqb2ItPmQtPnJlc3BvbnNlLnN0YXR1c0NvZGUoKTsKLSAgICBpZiAoam9i
LT51cmwoKS5zY2hlbWUoKSAhPSBRTGF0aW4xU3RyaW5nKCJmaWxlIikpCi0gICAgICAgIHJlc3Bv
bnNlLnNldEhUVFBTdGF0dXNDb2RlKHN0YXR1c0NvZGUpOwotICAgIGVsc2UgaWYgKHN0YXR1c0Nv
ZGUgPT0gNDA0KQotICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZShzdGF0dXNDb2Rl
KTsKLQotICAgIC8qIEZpbGwgaW4gdGhlIG90aGVyIGZpZWxkcyAqLwotCi0gICAgaWYgKHN0YXR1
c0NvZGUgPj0gMzAwICYmIHN0YXR1c0NvZGUgPCA0MDApIHsKLSAgICAgICAgLy8gd2UncmUgb24g
YSByZWRpcmVjdCBwYWdlISBpZiB0aGUgJ0xvY2F0aW9uOicgZmllbGQgaXMgdmFsaWQsIHdlIHJl
ZGlyZWN0Ci0gICAgICAgIFFTdHJpbmcgbG9jYXRpb24gPSBqb2ItPmQtPnJlc3BvbnNlLnZhbHVl
KCJsb2NhdGlvbiIpOwotICAgICAgICBERUJVRygpIDw8ICJSZWRpcmVjdGlvbiI7Ci0gICAgICAg
IGlmICghbG9jYXRpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBRVXJsIG5ld1VybCA9IGpv
Yi0+ZC0+cmVxdWVzdC51cmwucmVzb2x2ZWQobG9jYXRpb24pOwotICAgICAgICAgICAgaWYgKGpv
Yi0+ZC0+cmVzb3VyY2VIYW5kbGUpIHsKLSAgICAgICAgICAgICAgICBSZXNvdXJjZVJlcXVlc3Qg
bmV3UmVxdWVzdCA9IGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUtPnJlcXVlc3QoKTsKLSAgICAgICAg
ICAgICAgICBuZXdSZXF1ZXN0LnNldFVSTChLVVJMKG5ld1VybCkpOwotICAgICAgICAgICAgICAg
IGlmIChjbGllbnQpCi0gICAgICAgICAgICAgICAgICAgIGNsaWVudC0+d2lsbFNlbmRSZXF1ZXN0
KGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUsIG5ld1JlcXVlc3QsIHJlc3BvbnNlKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgUVN0cmluZyBtZXRob2Q7Ci0gICAgICAgICAgICBpZiAoc3Rh
dHVzQ29kZSA9PSAzMDIgfHwgc3RhdHVzQ29kZSA9PSAzMDMpIHsKLSAgICAgICAgICAgICAgICAv
LyB0aGlzIGlzIHN0YW5kYXJkLWNvcnJlY3QgZm9yIDMwMyBhbmQgcHJhY3RpY2FsbHktY29ycmVj
dCAobm8gc3RhbmRhcmQtY29ycmVjdCkgZm9yIDMwMgotICAgICAgICAgICAgICAgIC8vIGFsc28s
IGl0J3MgcmVxdWlyZWQgZm9yIFlhaG9vJ3MgbG9naW4gcHJvY2VzcyBmb3IgZmxpY2tyLmNvbSB3
aGljaCByZXNwb25kcyB0byBhIFBPU1QKLSAgICAgICAgICAgICAgICAvLyB3aXRoIGEgMzAyIHdo
aWNoIG11c3QgYmUgR0VUJ2VkCi0gICAgICAgICAgICAgICAgbWV0aG9kID0gIkdFVCI7Ci0gICAg
ICAgICAgICAgICAgam9iLT5kLT5yZXF1ZXN0Lmh0dHBIZWFkZXIuc2V0Q29udGVudExlbmd0aCgw
KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1ldGhvZCA9IGpvYi0+ZC0+
cmVxdWVzdC5odHRwSGVhZGVyLm1ldGhvZCgpOwotCi0gICAgICAgICAgICBqb2ItPmQtPnJlcXVl
c3QuaHR0cEhlYWRlci5zZXRSZXF1ZXN0KG1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3VXJsLnRvU3RyaW5nKFFVcmw6OlJlbW92ZVNj
aGVtZXxRVXJsOjpSZW1vdmVBdXRob3JpdHkpKTsKLSAgICAgICAgICAgIGpvYi0+ZC0+cmVxdWVz
dC5zZXRVUkwobmV3VXJsKTsKLSAgICAgICAgICAgIGpvYi0+ZC0+cmVkaXJlY3RlZCA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY2xpZW50
KQotICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShqb2ItPmQtPnJlc291cmNlSGFu
ZGxlLCByZXNwb25zZSk7Ci0KLX0KLQotdm9pZCBRV2ViTmV0d29ya01hbmFnZXI6OmRhdGEoUVdl
Yk5ldHdvcmtKb2IqIGpvYiwgY29uc3QgUUJ5dGVBcnJheSYgZGF0YSkKLXsKLSAgICBRX0FTU0VS
VChqb2ItPnN0YXR1cygpID09IFFXZWJOZXR3b3JrSm9iOjpKb2JTdGFydGVkIHx8Ci0gICAgICAg
ICAgICAgam9iLT5zdGF0dXMoKSA9PSBRV2ViTmV0d29ya0pvYjo6Sm9iUmVjZWl2aW5nRGF0YSk7
Ci0KLSAgICBqb2ItPnNldFN0YXR1cyhRV2ViTmV0d29ya0pvYjo6Sm9iUmVjZWl2aW5nRGF0YSk7
Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IDA7Ci0KLSAgICBpZiAoIWpvYi0+
ZC0+cmVzb3VyY2VIYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsaWVudCA9IGpvYi0+
ZC0+cmVzb3VyY2VIYW5kbGUtPmNsaWVudCgpOwotICAgIGlmICghY2xpZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoam9iLT5kLT5yZWRpcmVjdGVkKQotICAgICAgICByZXR1cm47IC8v
IGRvbid0IGVtaXQgdGhlICJEb2N1bWVudCBoYXMgbW92ZWQgaGVyZSIgdHlwZSBvZiBIVE1MCi0K
LSAgICBERUJVRygpIDw8ICJyZWNlaXZlZERhdGEiIDw8IGpvYi0+ZC0+cmVxdWVzdC51cmwucGF0
aCgpOwotICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoam9iLT5kLT5yZXNvdXJjZUhhbmRsZSwg
ZGF0YS5jb25zdERhdGEoKSwgZGF0YS5sZW5ndGgoKSwgZGF0YS5sZW5ndGgoKSAvKkZpeE1lKi8p
OwotfQotCi12b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZmluaXNoZWQoUVdlYk5ldHdvcmtKb2Iq
IGpvYiwgaW50IGVycm9yQ29kZSkKLXsKLSAgICBRX0FTU0VSVChlcnJvckNvZGUgPT0gMSB8fAot
ICAgICAgICAgICAgIGpvYi0+c3RhdHVzKCkgPT0gUVdlYk5ldHdvcmtKb2I6OkpvYlN0YXJ0ZWQg
fHwKLSAgICAgICAgICAgICBqb2ItPnN0YXR1cygpID09IFFXZWJOZXR3b3JrSm9iOjpKb2JSZWNl
aXZpbmdEYXRhKTsKLQotICAgIGlmIChtX3N5bmNocm9ub3VzSm9icy5jb250YWlucyhqb2IpKQot
ICAgICAgICBtX3N5bmNocm9ub3VzSm9icy5yZW1vdmUoam9iKTsKLQotICAgIGpvYi0+c2V0U3Rh
dHVzKFFXZWJOZXR3b3JrSm9iOjpKb2JGaW5pc2hlZCk7Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGll
bnQqIGNsaWVudCA9IDA7Ci0gICAgaWYgKGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUpIHsKLSAgICAg
ICAgY2xpZW50ID0gam9iLT5kLT5yZXNvdXJjZUhhbmRsZS0+Y2xpZW50KCk7Ci0gICAgICAgIGlm
ICghY2xpZW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGpv
Yi0+ZGVyZWYoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIERFQlVHKCkgPDwgInJl
Y2VpdmVkRmluaXNoZWQiIDw8IGVycm9yQ29kZSA8PCBqb2ItPnVybCgpOwotCi0gICAgaWYgKGpv
Yi0+ZC0+cmVkaXJlY3RlZCkgewotICAgICAgICBqb2ItPmQtPnJlZGlyZWN0ZWQgPSBmYWxzZTsK
LSAgICAgICAgam9iLT5zZXRTdGF0dXMoUVdlYk5ldHdvcmtKb2I6OkpvYlJlY3JlYXRlZCk7Ci0g
ICAgICAgIGpvYi0+ZC0+aW50ZXJmYWNlLT5hZGRKb2Ioam9iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChqb2ItPmQtPnJlc291cmNlSGFuZGxlKQotICAgICAgICBqb2ItPmQt
PnJlc291cmNlSGFuZGxlLT5nZXRJbnRlcm5hbCgpLT5tX2pvYiA9IDA7Ci0KLSAgICBpZiAoY2xp
ZW50KSB7Ci0gICAgICAgIGlmIChlcnJvckNvZGUpIHsKLSAgICAgICAgICAgIC8vRklYTUU6IGVy
cm9yIHNldHRpbmcgZXJyb3Igd2FzIHJlbW92ZWQgZnJvbSBSZXNvdXJjZUhhbmRsZQotICAgICAg
ICAgICAgY2xpZW50LT5kaWRGYWlsKGpvYi0+ZC0+cmVzb3VyY2VIYW5kbGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVzb3VyY2VFcnJvcihqb2ItPmQtPnJlcXVlc3QudXJsLmhvc3Qo
KSwgam9iLT5kLT5yZXNwb25zZS5zdGF0dXNDb2RlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqb2ItPmQtPnJlcXVlc3QudXJsLnRvU3RyaW5nKCksIGpvYi0+
ZC0+ZXJyb3JTdHJpbmcpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoam9iLT5kLT5yZXNvdXJjZUhhbmRsZSk7Ci0gICAgfQotCi0gICAgREVC
VUcoKSA8PCAicmVjZWl2ZWRGaW5pc2hlZCBkb25lIiA8PCBqb2ItPmQtPnJlcXVlc3QudXJsOwot
Ci0gICAgam9iLT5kZXJlZigpOwotfQotCi12b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6YWRkSHR0
cEpvYihRV2ViTmV0d29ya0pvYiogam9iKQotewotICAgIEhvc3RJbmZvIGhvc3RJbmZvKGpvYi0+
dXJsKCkpOwotICAgIFdlYkNvcmVIdHRwICpodHRwQ29ubmVjdGlvbiA9IG1faG9zdE1hcHBpbmcu
dmFsdWUoaG9zdEluZm8pOwotICAgIGlmICghaHR0cENvbm5lY3Rpb24pIHsKLSAgICAgICAgLy8g
IyMjIyBmaXggY3VzdG9tIHBvcnRzCi0gICAgICAgIERFQlVHKCkgPDwgIiAgIG5ldyBjb25uZWN0
aW9uIHRvIiA8PCBob3N0SW5mby5ob3N0IDw8IGhvc3RJbmZvLnBvcnQ7Ci0gICAgICAgIGh0dHBD
b25uZWN0aW9uID0gbmV3IFdlYkNvcmVIdHRwKHRoaXMsIGhvc3RJbmZvKTsKLSAgICAgICAgUU9i
amVjdDo6Y29ubmVjdChodHRwQ29ubmVjdGlvbiwgU0lHTkFMKGNvbm5lY3Rpb25DbG9zZWQoY29u
c3QgV2ViQ29yZTo6SG9zdEluZm8mKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywg
U0xPVChodHRwQ29ubmVjdGlvbkNsb3NlZChjb25zdCBXZWJDb3JlOjpIb3N0SW5mbyYpKSk7Ci0K
LSAgICAgICAgbV9ob3N0TWFwcGluZ1tob3N0SW5mb10gPSBodHRwQ29ubmVjdGlvbjsKLSAgICB9
Ci0gICAgaHR0cENvbm5lY3Rpb24tPnJlcXVlc3Qoam9iKTsKLX0KLQotdm9pZCBRV2ViTmV0d29y
a01hbmFnZXI6OmNhbmNlbEh0dHBKb2IoUVdlYk5ldHdvcmtKb2IqIGpvYikKLXsKLSAgICBXZWJD
b3JlSHR0cCAqaHR0cENvbm5lY3Rpb24gPSBtX2hvc3RNYXBwaW5nLnZhbHVlKGpvYi0+dXJsKCkp
OwotICAgIGlmIChodHRwQ29ubmVjdGlvbikKLSAgICAgICAgaHR0cENvbm5lY3Rpb24tPmNhbmNl
bChqb2IpOwotfQotCi12b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6aHR0cENvbm5lY3Rpb25DbG9z
ZWQoY29uc3QgV2ViQ29yZTo6SG9zdEluZm8mIGluZm8pCi17Ci0gICAgV2ViQ29yZUh0dHAgKmNv
bm5lY3Rpb24gPSBtX2hvc3RNYXBwaW5nLnRha2UoaW5mbyk7Ci0gICAgY29ubmVjdGlvbi0+ZGVs
ZXRlTGF0ZXIoKTsKLX0KLQotdm9pZCBRV2ViTmV0d29ya0ludGVyZmFjZVByaXZhdGU6OnNlbmRG
aWxlRGF0YShRV2ViTmV0d29ya0pvYiogam9iLCBpbnQgc3RhdHVzQ29kZSwgY29uc3QgUUJ5dGVB
cnJheSYgZGF0YSkKLXsKLSAgICBpbnQgZXJyb3IgPSBzdGF0dXNDb2RlID49IDQwMCA/IDEgOiAw
OwotICAgIGlmICgham9iLT5jYW5jZWxsZWQoKSkgewotICAgICAgICBRSHR0cFJlc3BvbnNlSGVh
ZGVyIHJlc3BvbnNlOwotICAgICAgICByZXNwb25zZS5zZXRTdGF0dXNMaW5lKHN0YXR1c0NvZGUp
OwotICAgICAgICByZXNwb25zZS5zZXRDb250ZW50TGVuZ3RoKGRhdGEubGVuZ3RoKCkpOwotICAg
ICAgICBqb2ItPnNldFJlc3BvbnNlKHJlc3BvbnNlKTsKLSAgICAgICAgcS0+c3RhcnRlZChqb2Ip
OwotICAgICAgICBpZiAoIWRhdGEuaXNFbXB0eSgpKQotICAgICAgICAgICAgcS0+ZGF0YShqb2Is
IGRhdGEpOwotICAgIH0KLSAgICBxLT5maW5pc2hlZChqb2IsIGVycm9yKTsKLX0KLQotdm9pZCBR
V2ViTmV0d29ya0ludGVyZmFjZVByaXZhdGU6OnBhcnNlRGF0YVVybChRV2ViTmV0d29ya0pvYiog
am9iKQotewotICAgIFFCeXRlQXJyYXkgZGF0YSA9IGpvYi0+dXJsKCkudG9TdHJpbmcoKS50b0xh
dGluMSgpOwotICAgIC8vcURlYnVnKCkgPDwgImhhbmRsaW5nIGRhdGEgdXJsOiIgPDwgZGF0YTsK
LQotICAgIEFTU0VSVChkYXRhLnN0YXJ0c1dpdGgoImRhdGE6IikpOwotCi0gICAgLy8gSGVyZSdz
IHRoZSBzeW50YXggb2YgZGF0YSBVUkxzOgotICAgIC8vIGRhdGF1cmwgICAgOj0gImRhdGE6IiBb
IG1lZGlhdHlwZSBdIFsgIjtiYXNlNjQiIF0gIiwiIGRhdGEKLSAgICAvLyBtZWRpYXR5cGUgIDo9
IFsgdHlwZSAiLyIgc3VidHlwZSBdICooICI7IiBwYXJhbWV0ZXIgKQotICAgIC8vIGRhdGEgICAg
ICAgOj0gKnVybGNoYXIKLSAgICAvLyBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSAiPSIgdmFsdWUK
LSAgICBRQnl0ZUFycmF5IGhlYWRlcjsKLSAgICBib29sIGJhc2U2NCA9IGZhbHNlOwotCi0gICAg
aW50IGluZGV4ID0gZGF0YS5pbmRleE9mKCcsJyk7Ci0gICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0g
ICAgICAgIGhlYWRlciA9IGRhdGEubWlkKDUsIGluZGV4IC0gNSkudG9Mb3dlcigpOwotICAgICAg
ICAvL3FEZWJ1ZygpIDw8ICJoZWFkZXI9IiA8PCBoZWFkZXI7Ci0gICAgICAgIGRhdGEgPSBkYXRh
Lm1pZChpbmRleCsxKTsKLSAgICAgICAgLy9xRGVidWcoKSA8PCAiZGF0YT0iIDw8IGRhdGE7Ci0K
LSAgICAgICAgaWYgKGhlYWRlci5lbmRzV2l0aCgiO2Jhc2U2NCIpKSB7Ci0gICAgICAgICAgICAv
L3FEZWJ1ZygpIDw8ICJiYXNlNjQiOwotICAgICAgICAgICAgYmFzZTY0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGhlYWRlciA9IGhlYWRlci5sZWZ0KGhlYWRlci5sZW5ndGgoKSAtIDcpOwotICAgICAg
ICAgICAgLy9xRGVidWcoKSA8PCAibWltZT0iIDw8IGhlYWRlcjsKLSAgICAgICAgfQotICAgIH0g
ZWxzZQotICAgICAgICBkYXRhID0gUUJ5dGVBcnJheSgpOwotCi0gICAgaWYgKGJhc2U2NCkKLSAg
ICAgICAgZGF0YSA9IFFCeXRlQXJyYXk6OmZyb21CYXNlNjQoZGF0YSk7Ci0gICAgZWxzZQotICAg
ICAgICBkYXRhID0gZGVjb2RlUGVyY2VudEVuY29kaW5nKGRhdGEpOwotCi0gICAgaWYgKGhlYWRl
ci5pc0VtcHR5KCkpCi0gICAgICAgIGhlYWRlciA9ICJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVND
SUkiOwotICAgIGludCBzdGF0dXNDb2RlID0gMjAwOwotICAgIFFIdHRwUmVzcG9uc2VIZWFkZXIg
cmVzcG9uc2U7Ci0gICAgcmVzcG9uc2Uuc2V0Q29udGVudFR5cGUoaGVhZGVyKTsKLSAgICByZXNw
b25zZS5zZXRDb250ZW50TGVuZ3RoKGRhdGEuc2l6ZSgpKTsKLSAgICBqb2ItPnNldFJlc3BvbnNl
KHJlc3BvbnNlKTsKLQotICAgIGludCBlcnJvciA9IHN0YXR1c0NvZGUgPj0gNDAwID8gMSA6IDA7
Ci0gICAgcS0+c3RhcnRlZChqb2IpOwotICAgIGlmICghZGF0YS5pc0VtcHR5KCkpCi0gICAgICAg
IHEtPmRhdGEoam9iLCBkYXRhKTsKLSAgICBxLT5maW5pc2hlZChqb2IsIGVycm9yKTsKLX0KLQot
dm9pZCBRV2ViTmV0d29ya01hbmFnZXI6OnF1ZXVlU3RhcnQoUVdlYk5ldHdvcmtKb2IqIGpvYikK
LXsKLSAgICBRX0FTU0VSVChqb2ItPmQpOwotCi0gICAgUU11dGV4TG9ja2VyIGxvY2tlcigmbV9x
dWV1ZU11dGV4KTsKLSAgICBqb2ItPnJlZigpOwotICAgIG1fcGVuZGluZ1dvcmsuYXBwZW5kKG5l
dyBKb2JXb3JrKGpvYikpOwotICAgIGRvU2NoZWR1bGVXb3JrKCk7Ci19Ci0KLXZvaWQgUVdlYk5l
dHdvcmtNYW5hZ2VyOjpxdWV1ZURhdGEoUVdlYk5ldHdvcmtKb2IqIGpvYiwgY29uc3QgUUJ5dGVB
cnJheSYgZGF0YSkKLXsKLSAgICBBU1NFUlQoam9iLT5kKTsKLQotICAgIFFNdXRleExvY2tlciBs
b2NrZXIoJm1fcXVldWVNdXRleCk7Ci0gICAgam9iLT5yZWYoKTsKLSAgICBtX3BlbmRpbmdXb3Jr
LmFwcGVuZChuZXcgSm9iV29yayhqb2IsIGRhdGEpKTsKLSAgICBkb1NjaGVkdWxlV29yaygpOwot
fQotCi12b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6cXVldWVGaW5pc2hlZChRV2ViTmV0d29ya0pv
Yiogam9iLCBpbnQgZXJyb3JDb2RlKQotewotICAgIFFfQVNTRVJUKGpvYi0+ZCk7Ci0KLSAgICBR
TXV0ZXhMb2NrZXIgbG9ja2VyKCZtX3F1ZXVlTXV0ZXgpOwotICAgIGpvYi0+cmVmKCk7Ci0gICAg
bV9wZW5kaW5nV29yay5hcHBlbmQobmV3IEpvYldvcmsoam9iLCBlcnJvckNvZGUpKTsKLSAgICBk
b1NjaGVkdWxlV29yaygpOwotfQotCi12b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZG9TY2hlZHVs
ZVdvcmsoKQotewotICAgIGlmICghbV9zY2hlZHVsZWRXb3JrKSB7Ci0gICAgICAgIG1fc2NoZWR1
bGVkV29yayA9IHRydWU7Ci0gICAgICAgIGVtaXQgc2NoZWR1bGVXb3JrKCk7Ci0gICAgfQotfQot
Ci0KLS8qCi0gKiBXZSB3aWxsIHdvcmsgb24gYSBjb3B5IG9mIG1fcGVuZGluZ1dvcmsuIFdoaWxl
IGRpc3BhdGNoaW5nIG1fcGVuZGluZ1dvcmsKLSAqIG5ldyB3b3JrIHdpbGwgYmUgYWRkZWQgdGhh
dCB3aWxsIGJlIGhhbmRsZWQgYXQgYSBsYXRlciBkb1dvcmsgY2FsbC4gZG9Xb3JrCi0gKiB3aWxs
IGJlIGNhbGxlZCB3ZSBzZXQgbV9zY2hlZHVsZWRXb3JrIHRvIGZhbHNlIGVhcmx5IGluIHRoaXMg
bWV0aG9kLgotICovCi12b2lkIFFXZWJOZXR3b3JrTWFuYWdlcjo6ZG9Xb3JrKCkKLXsKLSAgICBt
X3F1ZXVlTXV0ZXgubG9jaygpOwotICAgIG1fc2NoZWR1bGVkV29yayA9IGZhbHNlOwotICAgIGJv
b2wgaGFzU3luY0pvYnMgPSBtX3N5bmNocm9ub3VzSm9icy5zaXplKCk7Ci0gICAgY29uc3QgUUhh
c2g8UVdlYk5ldHdvcmtKb2IqLCBpbnQ+IHN5bmNKb2JzID0gbV9zeW5jaHJvbm91c0pvYnM7Ci0g
ICAgbV9xdWV1ZU11dGV4LnVubG9jaygpOwotCi0gICAgZm9yZWFjaCAoSm9iV29yayogd29yaywg
bV9wZW5kaW5nV29yaykgewotICAgICAgICBpZiAoaGFzU3luY0pvYnMgJiYgIXN5bmNKb2JzLmNv
bnRhaW5zKHdvcmstPmpvYikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo
d29yay0+d29ya1R5cGUgPT0gSm9iV29yazo6Sm9iU3RhcnRlZCkKLSAgICAgICAgICAgIHN0YXJ0
ZWQod29yay0+am9iKTsKLSAgICAgICAgZWxzZSBpZiAod29yay0+d29ya1R5cGUgPT0gSm9iV29y
azo6Sm9iRGF0YSkgewotICAgICAgICAgICAgLy8gVGhpcyBqb2Igd2FzIG5vdCB5ZXQgc3RhcnRl
ZAotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4od29yay0+am9iLT5zdGF0dXMoKSkg
PCBRV2ViTmV0d29ya0pvYjo6Sm9iU3RhcnRlZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgZGF0YSh3b3JrLT5qb2IsIHdvcmstPmRhdGEpOwotICAgICAgICB9IGVs
c2UgaWYgKHdvcmstPndvcmtUeXBlID09IEpvYldvcms6OkpvYkZpbmlzaGVkKSB7Ci0gICAgICAg
ICAgICAvLyBUaGlzIGpvYiB3YXMgbm90IHlldCBzdGFydGVkLi4uIHdlIGhhdmUgbm8gaWRlYSBp
ZiBkYXRhIGNvbWVzIGJ5Li4uCi0gICAgICAgICAgICAvLyBhbmQgaXQgd29uJ3Qgc3RhcnQgaW4g
Y2FzZSBvZiBlcnJvcnMKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KHdvcmstPmpv
Yi0+c3RhdHVzKCkpIDwgUVdlYk5ldHdvcmtKb2I6OkpvYlN0YXJ0ZWQgJiYgd29yay0+ZXJyb3JD
b2RlICE9IDEpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGZpbmlz
aGVkKHdvcmstPmpvYiwgd29yay0+ZXJyb3JDb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1f
cXVldWVNdXRleC5sb2NrKCk7Ci0gICAgICAgIG1fcGVuZGluZ1dvcmsucmVtb3ZlQWxsKHdvcmsp
OwotICAgICAgICBtX3F1ZXVlTXV0ZXgudW5sb2NrKCk7Ci0KLSAgICAgICAgd29yay0+am9iLT5k
ZXJlZigpOwotICAgICAgICBkZWxldGUgd29yazsKLSAgICB9Ci0KLSAgICBtX3F1ZXVlTXV0ZXgu
bG9jaygpOwotICAgIGlmIChoYXNTeW5jSm9icyAmJiAhbV9zeW5jaHJvbm91c0pvYnMuc2l6ZSgp
KQotICAgICAgICBkb1NjaGVkdWxlV29yaygpOwotICAgIG1fcXVldWVNdXRleC51bmxvY2soKTsK
LX0KLQotLyohCi0gIFxjbGFzcyBRV2ViTmV0d29ya0ludGVyZmFjZQotICBcaW50ZXJuYWwKLQot
ICBUaGUgUVdlYk5ldHdvcmtJbnRlcmZhY2UgY2xhc3MgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24g
bGF5ZXIgZm9yCi0gIFdlYktpdCdzIG5ldHdvcmsgaW50ZXJmYWNlLiAgSXQgYWxsb3dzIHRvIGNv
bXBsZXRlbHkgcmVwbGFjZSBvcgotICBleHRlbmQgdGhlIGJ1aWx0aW4gbmV0d29yayBsYXllci4K
LQotICBRV2ViTmV0d29ya0ludGVyZmFjZSBjb250YWlucyB0d28gdmlydHVhbCBtZXRob2RzLCBh
ZGRKb2IgYW5kCi0gIGNhbmNlbEpvYiB0aGF0IGhhdmUgdG8gYmUgcmVpbXBsZW1lbnRlZCB3aGVu
IGltcGxlbWVudGluZyB5b3VyIG93bgotICBuZXR3b3JraW5nIGxheWVyLgotCi0gIFFXZWJOZXR3
b3JrSW50ZXJmYWNlIGNhbiBieSBkZWZhdWx0IGhhbmRsZSB0aGUgaHR0cCwgaHR0cHMsIGZpbGUg
YW5kCi0gIGRhdGEgVVJJIHByb3RvY29scy4KLQotKi8KLQotc3RhdGljIGJvb2wgZ1JvdXRpbmVB
ZGRlZCA9IGZhbHNlOwotCi1zdGF0aWMgdm9pZCBnQ2xlYW51cEludGVyZmFjZSgpCi17Ci0gICAg
ZGVsZXRlIHNfZGVmYXVsdF9pbnRlcmZhY2U7Ci0gICAgc19kZWZhdWx0X2ludGVyZmFjZSA9IDA7
Ci19Ci0KLS8qIQotICBcaW50ZXJuYWwKLSAgU2V0cyBhIG5ldyBkZWZhdWx0IGludGVyZmFjZSB0
aGF0IHdpbGwgYmUgdXNlZCBieSBhbGwgb2YgV2ViS2l0Ci0gIGZvciBkb3dubG9hZGluZyBkYXRh
IGZyb20gdGhlIGludGVybmV0LgotKi8KLXZvaWQgUVdlYk5ldHdvcmtJbnRlcmZhY2U6OnNldERl
ZmF1bHRJbnRlcmZhY2UoUVdlYk5ldHdvcmtJbnRlcmZhY2UqIGRlZmF1bHRJbnRlcmZhY2UpCi17
Ci0gICAgaWYgKHNfZGVmYXVsdF9pbnRlcmZhY2UgPT0gZGVmYXVsdEludGVyZmFjZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChzX2RlZmF1bHRfaW50ZXJmYWNlKQotICAgICAgICBkZWxldGUg
c19kZWZhdWx0X2ludGVyZmFjZTsKLSAgICBzX2RlZmF1bHRfaW50ZXJmYWNlID0gZGVmYXVsdElu
dGVyZmFjZTsKLSAgICBpZiAoIWdSb3V0aW5lQWRkZWQpIHsKLSAgICAgICAgcUFkZFBvc3RSb3V0
aW5lKGdDbGVhbnVwSW50ZXJmYWNlKTsKLSAgICAgICAgZ1JvdXRpbmVBZGRlZCA9IHRydWU7Ci0g
ICAgfQotfQotCi0vKiEKLSAgXGludGVybmFsCi0gIFJldHVybnMgdGhlIGRlZmF1bHQgaW50ZXJm
YWNlIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IFdlYktpdC4gSWYgbm8KLSAgZGVmYXVsdCBpbnRlcmZh
Y2UgaGFzIGJlZW4gc2V0LCBRdFdlYmtpdCB3aWxsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZgotICBR
V2ViTmV0d29ya0ludGVyZmFjZSB0byBkbyB0aGUgd29yay4KLSovCi1RV2ViTmV0d29ya0ludGVy
ZmFjZSAqUVdlYk5ldHdvcmtJbnRlcmZhY2U6OmRlZmF1bHRJbnRlcmZhY2UoKQotewotICAgIGlm
ICghc19kZWZhdWx0X2ludGVyZmFjZSkKLSAgICAgICAgc2V0RGVmYXVsdEludGVyZmFjZShuZXcg
UVdlYk5ldHdvcmtJbnRlcmZhY2UpOwotCi0gICAgcmV0dXJuIHNfZGVmYXVsdF9pbnRlcmZhY2U7
Ci19Ci0KLQotLyohCi0gIFxpbnRlcm5hbAotICBDb25zdHJ1Y3RzIGEgUVdlYk5ldHdvcmtJbnRl
cmZhY2Ugb2JqZWN0LgotKi8KLVFXZWJOZXR3b3JrSW50ZXJmYWNlOjpRV2ViTmV0d29ya0ludGVy
ZmFjZShRT2JqZWN0KiBwYXJlbnQpCi0gICAgOiBRT2JqZWN0KHBhcmVudCkKLXsKLSAgICBkID0g
bmV3IFFXZWJOZXR3b3JrSW50ZXJmYWNlUHJpdmF0ZTsKLSAgICBkLT5xID0gdGhpczsKLQotICAg
IGlmICghc19tYW5hZ2VyKQotICAgICAgICBzX21hbmFnZXIgPSBuZXcgUVdlYk5ldHdvcmtNYW5h
Z2VyOwotfQotCi0vKiEKLSAgXGludGVybmFsCi0gIERlc3RydWN0cyB0aGUgUVdlYk5ldHdvcmtJ
bnRlcmZhY2Ugb2JqZWN0LgotKi8KLVFXZWJOZXR3b3JrSW50ZXJmYWNlOjp+UVdlYk5ldHdvcmtJ
bnRlcmZhY2UoKQotewotICAgIGRlbGV0ZSBkOwotfQotCi0vKiEKLSAgXGludGVybmFsCi0gIFRo
aXMgdmlydHVhbCBtZXRob2QgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgUXRXZWJraXQgbmVlZHMgdG8g
YWRkIGEKLSAgbmV3IGpvYiB0byBkb3dubG9hZC4KLQotICBUaGUgUVdlYk5ldHdvcmtJbnRlcmZh
Y2Ugc2hvdWxkIHByb2Nlc3MgdGhpcyBqb2IsIGJ5IGZpcnN0IGVtaXR0aW5nCi0gIHRoZSBzdGFy
dGVkIHNpZ25hbCwgdGhlbiBlbWl0dGluZyBkYXRhIHJlcGVhdGVkbHkgYXMgbmV3IGRhdGEgZm9y
Ci0gIHRoZSBKb2IgaXMgYXZhaWxhYmxlLCBhbmQgZmluYWxseSBlbmRpbmcgdGhlIGpvYiB3aXRo
IGVtaXR0aW5nIGEKLSAgZmluaXNoZWQgc2lnbmFsLgotCi0gIEFmdGVyIHRoZSBmaW5pc2hlZCBz
aWduYWwgaGFzIGJlZW4gZW1pdHRlZCwgdGhlIFFXZWJOZXR3b3JrSW50ZXJmYWNlCi0gIGlzIG5v
dCBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgam9iIGFueW1vcmUuCi0qLwotdm9pZCBRV2ViTmV0d29y
a0ludGVyZmFjZTo6YWRkSm9iKFFXZWJOZXR3b3JrSm9iKiBqb2IpCi17Ci0gICAgUVN0cmluZyBw
cm90b2NvbCA9IGpvYi0+dXJsKCkuc2NoZW1lKCk7Ci0gICAgaWYgKHByb3RvY29sID09IFFMYXRp
bjFTdHJpbmcoImh0dHAiKSB8fCBwcm90b2NvbCA9PSBRTGF0aW4xU3RyaW5nKCJodHRwcyIpKSB7
Ci0gICAgICAgIFFXZWJOZXR3b3JrTWFuYWdlcjo6c2VsZigpLT5hZGRIdHRwSm9iKGpvYik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyAiZmlsZSIsICJkYXRhIiBhbmQgYWxsIHVu
aGFuZGxlZCBzdHVmZiBnbyB0aHJvdWdoIGhlcmUKLSAgICAvL0RFQlVHKCkgPDwgImZpbGVSZXF1
ZXN0IjsKLSAgICBERUJVRygpIDw8ICJGaWxlTG9hZGVyOjpyZXF1ZXN0IiA8PCBqb2ItPnVybCgp
OwotCi0gICAgaWYgKGpvYi0+Y2FuY2VsbGVkKCkpIHsKLSAgICAgICAgZC0+c2VuZEZpbGVEYXRh
KGpvYiwgNDAwLCBRQnl0ZUFycmF5KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UVVybCB1cmwgPSBqb2ItPnVybCgpOwotICAgIGlmIChwcm90b2NvbCA9PSBRTGF0aW4xU3RyaW5n
KCJkYXRhIikpIHsKLSAgICAgICAgZC0+cGFyc2VEYXRhVXJsKGpvYik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpbnQgc3RhdHVzQ29kZSA9IDIwMDsKLSAgICBRQnl0ZUFycmF5IGRh
dGE7Ci0gICAgUVN0cmluZyBwYXRoID0gdXJsLnBhdGgoKTsKLSAgICBpZiAocHJvdG9jb2wgPT0g
UUxhdGluMVN0cmluZygicXJjIikpIHsKLSAgICAgICAgcHJvdG9jb2wgPSAiZmlsZSI7Ci0gICAg
ICAgIHBhdGgucHJlcGVuZChRTGF0aW4xQ2hhcignOicpKTsKLSAgICB9Ci0KLSAgICBpZiAoIShw
cm90b2NvbC5pc0VtcHR5KCkgfHwgcHJvdG9jb2wgPT0gUUxhdGluMVN0cmluZygiZmlsZSIpKSkg
ewotICAgICAgICBzdGF0dXNDb2RlID0gNDA0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIHdl
IHNpbXBseSBpZ25vcmUgcG9zdCBkYXRhIGhlcmUuCi0gICAgICAgIFFGaWxlIGYocGF0aCk7Ci0g
ICAgICAgIERFQlVHKCkgPDwgIm9wZW5pbmciIDw8IFFTdHJpbmcodXJsLnBhdGgoKSk7Ci0KLSAg
ICAgICAgaWYgKGYub3BlbihRSU9EZXZpY2U6OlJlYWRPbmx5KSkgewotICAgICAgICAgICAgUUh0
dHBSZXNwb25zZUhlYWRlciByZXNwb25zZTsKLSAgICAgICAgICAgIHJlc3BvbnNlLnNldFN0YXR1
c0xpbmUoMjAwKTsKLSAgICAgICAgICAgIGpvYi0+c2V0UmVzcG9uc2UocmVzcG9uc2UpOwotICAg
ICAgICAgICAgZGF0YSA9IGYucmVhZEFsbCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHN0YXR1c0NvZGUgPSA0MDQ7Ci0gICAgfQotCi0gICAgaWYgKHN0YXR1c0NvZGUgPT0gNDA0KSB7
Ci0gICAgICAgIFFIdHRwUmVzcG9uc2VIZWFkZXIgcmVzcG9uc2U7Ci0gICAgICAgIHJlc3BvbnNl
LnNldFN0YXR1c0xpbmUoNDA0KTsKLSAgICAgICAgam9iLT5zZXRSZXNwb25zZShyZXNwb25zZSk7
Ci0gICAgfQotCi0gICAgZC0+c2VuZEZpbGVEYXRhKGpvYiwgc3RhdHVzQ29kZSwgZGF0YSk7Ci19
Ci0KLS8qIQotICBcaW50ZXJuYWwKLSAgVGhpcyB2aXJ0dWFsIG1ldGhvZCBnZXRzIGNhbGxlZCB3
aGVuZXZlciBRdFdlYmtpdCBuZWVkcyB0byBjYW5jZWwgYQotICBuZXcgam9iLgotCi0gIFRoZSBR
V2ViTmV0d29ya0ludGVyZmFjZSBhY2tub3dsZWRnZSB0aGUgY2FuY2VsaW5nIG9mIHRoZSBqb2Is
IGJ5Ci0gIGVtaXR0aW5nIHRoZSBmaW5pc2hlZCBzaWduYWwgd2l0aCBhbiBlcnJvciBjb2RlIG9m
IDEuIEFmdGVyIGVtaXR0aW5nCi0gIHRoZSBmaW5pc2hlZCBzaWduYWwsIHRoZSBpbnRlcmZhY2Ug
c2hvdWxkIG5vdCBhY2Nlc3MgdGhlIGpvYgotICBhbnltb3JlLgotKi8KLXZvaWQgUVdlYk5ldHdv
cmtJbnRlcmZhY2U6OmNhbmNlbEpvYihRV2ViTmV0d29ya0pvYiogam9iKQotewotICAgIFFTdHJp
bmcgcHJvdG9jb2wgPSBqb2ItPnVybCgpLnNjaGVtZSgpOwotICAgIGlmIChwcm90b2NvbCA9PSBR
TGF0aW4xU3RyaW5nKCJodHRwIikgfHwgcHJvdG9jb2wgPT0gUUxhdGluMVN0cmluZygiaHR0cHMi
KSkKLSAgICAgICAgUVdlYk5ldHdvcmtNYW5hZ2VyOjpzZWxmKCktPmNhbmNlbEh0dHBKb2Ioam9i
KTsKLX0KLQotLyohCi0gIFxpbnRlcm5hbAotKi8KLXZvaWQgUVdlYk5ldHdvcmtJbnRlcmZhY2U6
OnN0YXJ0ZWQoUVdlYk5ldHdvcmtKb2IqIGpvYikKLXsKLSAgICBRX0FTU0VSVChzX21hbmFnZXIp
OwotICAgIHNfbWFuYWdlci0+cXVldWVTdGFydChqb2IpOwotfQotCi0vKiEKLSAgXGludGVybmFs
Ci0qLwotdm9pZCBRV2ViTmV0d29ya0ludGVyZmFjZTo6ZGF0YShRV2ViTmV0d29ya0pvYiogam9i
LCBjb25zdCBRQnl0ZUFycmF5JiBkYXRhKQotewotICAgIFFfQVNTRVJUKHNfbWFuYWdlcik7Ci0g
ICAgc19tYW5hZ2VyLT5xdWV1ZURhdGEoam9iLCBkYXRhKTsKLX0KLQotLyohCi0gIFxpbnRlcm5h
bAotKi8KLXZvaWQgUVdlYk5ldHdvcmtJbnRlcmZhY2U6OmZpbmlzaGVkKFFXZWJOZXR3b3JrSm9i
KiBqb2IsIGludCBlcnJvckNvZGUpCi17Ci0gICAgUV9BU1NFUlQoc19tYW5hZ2VyKTsKLSAgICBz
X21hbmFnZXItPnF1ZXVlRmluaXNoZWQoam9iLCBlcnJvckNvZGUpOwotfQotCi0vKiEKLSAgXGZu
IHZvaWQgUVdlYk5ldHdvcmtJbnRlcmZhY2U6OnNzbEVycm9ycyhRV2ViRnJhbWUgKmZyYW1lLCBj
b25zdCBRVXJsJiB1cmwsIGNvbnN0IFFMaXN0PFFTc2xFcnJvcj4mIGVycm9ycywgYm9vbCAqY29u
dGludWVBbnl3YXkpOwotICBcaW50ZXJuYWwKLQotICAgU2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBh
biBTU0wgZXJyb3Igb2NjdXJzLgotKi8KLQotLyohCi0gIFxmbiB2b2lkIFFXZWJOZXR3b3JrSW50
ZXJmYWNlOjphdXRoZW50aWNhdGUoUVdlYkZyYW1lICpmcmFtZSwgY29uc3QgUVVybCYgdXJsLCBj
b25zdCBRU3RyaW5nJiBob3N0bmFtZSwgcXVpbnQxNiBwb3J0LCBRQXV0aGVudGljYXRvciAqYXV0
aCk7Ci0gIFxpbnRlcm5hbAotCi0gIFNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gbmV0d29yayBhdXRo
ZW50aWNhdGlvbiBpcyByZXF1aXJlZC4KLSovCi0KLS8qIQotICBcZm4gdm9pZCBRV2ViTmV0d29y
a0ludGVyZmFjZTo6YXV0aGVudGljYXRlUHJveHkoUVdlYkZyYW1lICpmcmFtZSwgY29uc3QgUVVy
bCYgdXJsLCBjb25zdCBRTmV0d29ya1Byb3h5JiBwcm94eSwgUUF1dGhlbnRpY2F0b3IgKmF1dGgp
OwotICBcaW50ZXJuYWwKLQotICBTaWduYWwgaXMgZW1pdHRlZCB3aGVuIHByb3h5IGF1dGhlbnRp
Y2F0aW9uIGlzIHJlcXVpcmVkLgotKi8KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLVdlYkNvcmVI
dHRwOjpXZWJDb3JlSHR0cChRT2JqZWN0KiBwYXJlbnQsIGNvbnN0IEhvc3RJbmZvJiBoaSkKLSAg
ICA6IFFPYmplY3QocGFyZW50KQotICAgICwgaW5mbyhoaSkKLSAgICAsIG1faW5DYW5jZWwoZmFs
c2UpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgICAgY29ubmVj
dGlvbltpXS5odHRwID0gbmV3IFFIdHRwKGluZm8uaG9zdCwgKGhpLnByb3RvY29sID09IFFMYXRp
bjFTdHJpbmcoImh0dHBzIikpID8gUUh0dHA6OkNvbm5lY3Rpb25Nb2RlSHR0cHMgOiBRSHR0cDo6
Q29ubmVjdGlvbk1vZGVIdHRwLCBpbmZvLnBvcnQpOwotICAgICAgICBjb25uZWN0KGNvbm5lY3Rp
b25baV0uaHR0cCwgU0lHTkFMKHJlc3BvbnNlSGVhZGVyUmVjZWl2ZWQoY29uc3QgUUh0dHBSZXNw
b25zZUhlYWRlciYpKSwKLSAgICAgICAgICAgICAgICB0aGlzLCBTTE9UKG9uUmVzcG9uc2VIZWFk
ZXJSZWNlaXZlZChjb25zdCBRSHR0cFJlc3BvbnNlSGVhZGVyJikpKTsKLSAgICAgICAgY29ubmVj
dChjb25uZWN0aW9uW2ldLmh0dHAsIFNJR05BTChyZWFkeVJlYWQoY29uc3QgUUh0dHBSZXNwb25z
ZUhlYWRlciYpKSwKLSAgICAgICAgICAgICAgICB0aGlzLCBTTE9UKG9uUmVhZHlSZWFkKCkpKTsK
LSAgICAgICAgY29ubmVjdChjb25uZWN0aW9uW2ldLmh0dHAsIFNJR05BTChyZXF1ZXN0RmluaXNo
ZWQoaW50LCBib29sKSksCi0gICAgICAgICAgICAgICAgdGhpcywgU0xPVChvblJlcXVlc3RGaW5p
c2hlZChpbnQsIGJvb2wpKSk7Ci0gICAgICAgIGNvbm5lY3QoY29ubmVjdGlvbltpXS5odHRwLCBT
SUdOQUwoZG9uZShib29sKSksCi0gICAgICAgICAgICAgICAgdGhpcywgU0xPVChvbkRvbmUoYm9v
bCkpKTsKLSAgICAgICAgY29ubmVjdChjb25uZWN0aW9uW2ldLmh0dHAsIFNJR05BTChzdGF0ZUNo
YW5nZWQoaW50KSksCi0gICAgICAgICAgICAgICAgdGhpcywgU0xPVChvblN0YXRlQ2hhbmdlZChp
bnQpKSk7Ci0gICAgICAgIGNvbm5lY3QoY29ubmVjdGlvbltpXS5odHRwLCBTSUdOQUwoYXV0aGVu
dGljYXRpb25SZXF1aXJlZChjb25zdCBRU3RyaW5nJiwgcXVpbnQxNiwgUUF1dGhlbnRpY2F0b3Iq
KSksCi0gICAgICAgICAgICAgICAgdGhpcywgU0xPVChvbkF1dGhlbnRpY2F0aW9uUmVxdWlyZWQo
Y29uc3QgUVN0cmluZyYsIHF1aW50MTYsIFFBdXRoZW50aWNhdG9yKikpKTsKLSAgICAgICAgY29u
bmVjdChjb25uZWN0aW9uW2ldLmh0dHAsIFNJR05BTChwcm94eUF1dGhlbnRpY2F0aW9uUmVxdWly
ZWQoY29uc3QgUU5ldHdvcmtQcm94eSYsIFFBdXRoZW50aWNhdG9yKikpLAotICAgICAgICAgICAg
ICAgIHRoaXMsIFNMT1Qob25Qcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoY29uc3QgUU5ldHdv
cmtQcm94eSYsIFFBdXRoZW50aWNhdG9yKikpKTsKLSAgICAgICAgY29ubmVjdChjb25uZWN0aW9u
W2ldLmh0dHAsIFNJR05BTChzc2xFcnJvcnMoY29uc3QgUUxpc3Q8UVNzbEVycm9yPiYpKSwKLSAg
ICAgICAgICAgICAgICB0aGlzLCBTTE9UKG9uU3NsRXJyb3JzKGNvbnN0IFFMaXN0PFFTc2xFcnJv
cj4mKSkpOwotICAgIH0KLX0KLQotV2ViQ29yZUh0dHA6On5XZWJDb3JlSHR0cCgpCi17Ci0gICAg
Y29ubmVjdGlvblswXS5odHRwLT5kZWxldGVMYXRlcigpOwotICAgIGNvbm5lY3Rpb25bMV0uaHR0
cC0+ZGVsZXRlTGF0ZXIoKTsKLX0KLQotdm9pZCBXZWJDb3JlSHR0cDo6cmVxdWVzdChRV2ViTmV0
d29ya0pvYiogam9iKQotewotICAgIG1fcGVuZGluZ1JlcXVlc3RzLmFwcGVuZChqb2IpOwotICAg
IHNjaGVkdWxlTmV4dFJlcXVlc3QoKTsKLX0KLQotdm9pZCBXZWJDb3JlSHR0cDo6c2NoZWR1bGVO
ZXh0UmVxdWVzdCgpCi17Ci0gICAgaW50IGMgPSAwOwotICAgIGZvciAoOyBjIDwgMjsgKytjKSB7
Ci0gICAgICAgIGlmICghY29ubmVjdGlvbltjXS5jdXJyZW50KQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGlmIChjID49IDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFXZWJOZXR3
b3JrSm9iICpqb2IgPSAwOwotICAgIHdoaWxlICgham9iICYmICFtX3BlbmRpbmdSZXF1ZXN0cy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgam9iID0gbV9wZW5kaW5nUmVxdWVzdHMudGFrZUZpcnN0KCk7
Ci0gICAgICAgIGlmIChqb2ItPmNhbmNlbGxlZCgpKSB7Ci0gICAgICAgICAgICBqb2ItPm5ldHdv
cmtJbnRlcmZhY2UoKS0+ZmluaXNoZWQoam9iLCAxKTsKLSAgICAgICAgICAgIGpvYiA9IDA7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFqb2IpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFI
dHRwKiBodHRwID0gY29ubmVjdGlvbltjXS5odHRwOwotCi0gICAgY29ubmVjdGlvbltjXS5jdXJy
ZW50ID0gam9iOwotICAgIGNvbm5lY3Rpb25bY10uaWQgPSAtMTsKLSNpZm5kZWYgUVRfTk9fTkVU
V09SS1BST1hZCi0gICAgaW50IHByb3h5SWQgPSBodHRwLT5zZXRQcm94eShqb2ItPmZyYW1lKCkt
PnBhZ2UoKS0+bmV0d29ya1Byb3h5KCkpOwotI2VuZGlmCi0KLSAgICBRQnl0ZUFycmF5IHBvc3RE
YXRhID0gam9iLT5wb3N0RGF0YSgpOwotICAgIGlmICghcG9zdERhdGEuaXNFbXB0eSgpKQotICAg
ICAgICBjb25uZWN0aW9uW2NdLmlkID0gaHR0cC0+cmVxdWVzdChqb2ItPmh0dHBIZWFkZXIoKSwg
cG9zdERhdGEpOwotICAgIGVsc2UKLSAgICAgICAgY29ubmVjdGlvbltjXS5pZCA9IGh0dHAtPnJl
cXVlc3Qoam9iLT5odHRwSGVhZGVyKCkpOwotCi0gICAgREVCVUcoKSA8PCAiV2ViQ29yZUh0dHA6
OnNjaGVkdWxlTmV4dFJlcXVlc3Q6IHVzaW5nIGNvbm5lY3Rpb24iIDw8IGM7Ci0gICAgREVCVUco
KSA8PCBqb2ItPmh0dHBIZWFkZXIoKS50b1N0cmluZygpOwotLy8gICAgIERFQlVHKCkgPDwgam9i
LT5yZXF1ZXN0LnRvU3RyaW5nKCk7Ci19Ci0KLWludCBXZWJDb3JlSHR0cDo6Z2V0Q29ubmVjdGlv
bigpCi17Ci0gICAgUU9iamVjdCogbyA9IHNlbmRlcigpOwotICAgIGludCBjOwotICAgIGlmIChv
ID09IGNvbm5lY3Rpb25bMF0uaHR0cCkgewotICAgICAgICBjID0gMDsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBRX0FTU0VSVChvID09IGNvbm5lY3Rpb25bMV0uaHR0cCk7Ci0gICAgICAgIGMgPSAx
OwotICAgIH0KLSAgICBRX0FTU0VSVChjb25uZWN0aW9uW2NdLmN1cnJlbnQpOwotICAgIHJldHVy
biBjOwotfQotCi12b2lkIFdlYkNvcmVIdHRwOjpvblJlc3BvbnNlSGVhZGVyUmVjZWl2ZWQoY29u
c3QgUUh0dHBSZXNwb25zZUhlYWRlciYgcmVzcCkKLXsKLSAgICBRSHR0cCogaHR0cCA9IHFvYmpl
Y3RfY2FzdDxRSHR0cCo+KHNlbmRlcigpKTsKLSAgICBpZiAoIWh0dHAtPmN1cnJlbnRJZCgpKSB7
Ci0gICAgICAgIHFEZWJ1ZygpIDw8ICJFUlJPUiEgIEludmFsaWQgam9iIGlkLiAgV2h5PyI7IC8v
IGZveG5ld3MuY29tIHRyaWdnZXJzIHRoaXMKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
bnQgYyA9IGdldENvbm5lY3Rpb24oKTsKLSAgICBRV2ViTmV0d29ya0pvYiogam9iID0gY29ubmVj
dGlvbltjXS5jdXJyZW50OwotICAgIERFQlVHKCkgPDwgIldlYkNvcmVIdHRwOjpzbG90UmVzcG9u
c2VIZWFkZXJSZWNlaXZlZCBjb25uZWN0aW9uPSIgPDwgYzsKLSAgICBERUJVRygpIDw8IHJlc3Au
dG9TdHJpbmcoKTsKLQotICAgIGpvYi0+c2V0UmVzcG9uc2UocmVzcCk7Ci0KLSAgICBqb2ItPm5l
dHdvcmtJbnRlcmZhY2UoKS0+c3RhcnRlZChqb2IpOwotfQotCi12b2lkIFdlYkNvcmVIdHRwOjpv
blJlYWR5UmVhZCgpCi17Ci0gICAgUUh0dHAqIGh0dHAgPSBxb2JqZWN0X2Nhc3Q8UUh0dHAqPihz
ZW5kZXIoKSk7Ci0gICAgaWYgKCFodHRwLT5jdXJyZW50SWQoKSkgewotICAgICAgICBxRGVidWco
KSA8PCAiRVJST1IhICBJbnZhbGlkIGpvYiBpZC4gIFdoeT8iOyAvLyBmb3huZXdzLmNvbSB0cmln
Z2VycyB0aGlzCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IGMgPSBnZXRDb25uZWN0
aW9uKCk7Ci0gICAgUVdlYk5ldHdvcmtKb2IqIGpvYiA9IGNvbm5lY3Rpb25bY10uY3VycmVudDsK
LSAgICBRX0FTU0VSVChodHRwID09IGNvbm5lY3Rpb25bY10uaHR0cCk7Ci0gICAgLy9ERUJVRygp
IDw8ICJXZWJDb3JlSHR0cDo6c2xvdFJlYWR5UmVhZCBjb25uZWN0aW9uPSIgPDwgYzsKLQotICAg
IFFCeXRlQXJyYXkgZGF0YTsKLSAgICBkYXRhLnJlc2l6ZShodHRwLT5ieXRlc0F2YWlsYWJsZSgp
KTsKLSAgICBodHRwLT5yZWFkKGRhdGEuZGF0YSgpLCBkYXRhLmxlbmd0aCgpKTsKLSAgICBqb2It
Pm5ldHdvcmtJbnRlcmZhY2UoKS0+ZGF0YShqb2IsIGRhdGEpOwotfQotCi12b2lkIFdlYkNvcmVI
dHRwOjpvblJlcXVlc3RGaW5pc2hlZChpbnQgaWQsIGJvb2wgZXJyb3IpCi17Ci0gICAgaW50IGMg
PSBnZXRDb25uZWN0aW9uKCk7Ci0gICAgaWYgKGNvbm5lY3Rpb25bY10uaWQgIT0gaWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFFXZWJOZXR3b3JrSm9iKiBqb2IgPSBjb25uZWN0aW9uW2NdLmN1
cnJlbnQ7Ci0gICAgaWYgKCFqb2IpIHsKLSAgICAgICAgc2NoZWR1bGVOZXh0UmVxdWVzdCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUUh0dHAqIGh0dHAgPSBjb25uZWN0aW9uW2Nd
Lmh0dHA7Ci0gICAgREVCVUcoKSA8PCAiV2ViQ29yZUh0dHA6OnNsb3RGaW5pc2hlZCBjb25uZWN0
aW9uPSIgPDwgYyA8PCBlcnJvciA8PCBqb2I7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIERF
QlVHKCkgPDwgIiAgIGVycm9yOiAiIDw8IGh0dHAtPmVycm9yU3RyaW5nKCk7Ci0gICAgICAgIGpv
Yi0+c2V0RXJyb3JTdHJpbmcoaHR0cC0+ZXJyb3JTdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgaWYg
KCFlcnJvciAmJiBodHRwLT5ieXRlc0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgIFFCeXRlQXJyYXkg
ZGF0YTsKLSAgICAgICAgZGF0YS5yZXNpemUoaHR0cC0+Ynl0ZXNBdmFpbGFibGUoKSk7Ci0gICAg
ICAgIGh0dHAtPnJlYWQoZGF0YS5kYXRhKCksIGRhdGEubGVuZ3RoKCkpOwotICAgICAgICBqb2It
Pm5ldHdvcmtJbnRlcmZhY2UoKS0+ZGF0YShqb2IsIGRhdGEpOwotICAgIH0KLQotICAgIGpvYi0+
bmV0d29ya0ludGVyZmFjZSgpLT5maW5pc2hlZChqb2IsIGVycm9yID8gMSA6IDApOwotICAgIGNv
bm5lY3Rpb25bY10uY3VycmVudCA9IDA7Ci0gICAgY29ubmVjdGlvbltjXS5pZCA9IC0xOwotICAg
IHNjaGVkdWxlTmV4dFJlcXVlc3QoKTsKLX0KLQotdm9pZCBXZWJDb3JlSHR0cDo6b25Eb25lKGJv
b2wgZXJyb3IpCi17Ci0gICAgREVCVUcoKSA8PCAiV2ViQ29yZUh0dHA6Om9uRG9uZSIgPDwgZXJy
b3I7Ci19Ci0KLXZvaWQgV2ViQ29yZUh0dHA6Om9uU3RhdGVDaGFuZ2VkKGludCBzdGF0ZSkKLXsK
LSAgICBERUJVRygpIDw8ICJTdGF0ZSBjaGFuZ2VkIHRvIiA8PCBzdGF0ZSA8PCAiYW5kIGNvbm5l
Y3Rpb25zIGFyZSIgPDwgY29ubmVjdGlvblswXS5jdXJyZW50IDw8IGNvbm5lY3Rpb25bMV0uY3Vy
cmVudDsKLSAgICBpZiAoc3RhdGUgPT0gUUh0dHA6OkNsb3NpbmcgfHwgc3RhdGUgPT0gUUh0dHA6
OlVuY29ubmVjdGVkKSB7Ci0gICAgICAgIGlmICghbV9pbkNhbmNlbCAmJiBtX3BlbmRpbmdSZXF1
ZXN0cy5pc0VtcHR5KCkKLSAgICAgICAgICAgICYmICFjb25uZWN0aW9uWzBdLmN1cnJlbnQgJiYg
IWNvbm5lY3Rpb25bMV0uY3VycmVudCkKLSAgICAgICAgICAgIGVtaXQgY29ubmVjdGlvbkNsb3Nl
ZChpbmZvKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViQ29yZUh0dHA6OmNhbmNlbChRV2ViTmV0d29y
a0pvYiogcmVxdWVzdCkKLXsKLSAgICBib29sIGRvRW1pdCA9IHRydWU7Ci0gICAgbV9pbkNhbmNl
bCA9IHRydWU7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgICAgaWYg
KHJlcXVlc3QgPT0gY29ubmVjdGlvbltpXS5jdXJyZW50KSB7Ci0gICAgICAgICAgICBjb25uZWN0
aW9uW2ldLmh0dHAtPmFib3J0KCk7Ci0gICAgICAgICAgICBkb0VtaXQgPSBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAoIW1fcGVuZGluZ1JlcXVlc3RzLnJlbW92ZUFsbChyZXF1ZXN0
KSkKLSAgICAgICAgZG9FbWl0ID0gZmFsc2U7Ci0gICAgbV9pbkNhbmNlbCA9IGZhbHNlOwotCi0g
ICAgaWYgKGRvRW1pdCkKLSAgICAgICAgcmVxdWVzdC0+bmV0d29ya0ludGVyZmFjZSgpLT5maW5p
c2hlZChyZXF1ZXN0LCAxKTsKLQotICAgIGlmIChtX3BlbmRpbmdSZXF1ZXN0cy5pc0VtcHR5KCkK
LSAgICAgICAgJiYgIWNvbm5lY3Rpb25bMF0uY3VycmVudCAmJiAhY29ubmVjdGlvblsxXS5jdXJy
ZW50KQotICAgICAgICBlbWl0IGNvbm5lY3Rpb25DbG9zZWQoaW5mbyk7Ci19Ci0KLXZvaWQgV2Vi
Q29yZUh0dHA6Om9uU3NsRXJyb3JzKGNvbnN0IFFMaXN0PFFTc2xFcnJvcj4mIGVycm9ycykKLXsK
LSAgICBpbnQgYyA9IGdldENvbm5lY3Rpb24oKTsKLSAgICBRV2ViTmV0d29ya0pvYiAqam9iID0g
Y29ubmVjdGlvbltjXS5jdXJyZW50OwotICAgIGlmIChqb2IpIHsKLSAgICAgICAgYm9vbCBjb250
aW51ZUFueXdheSA9IGZhbHNlOwotICAgICAgICBlbWl0IGpvYi0+bmV0d29ya0ludGVyZmFjZSgp
LT5zc2xFcnJvcnMoam9iLT5mcmFtZSgpLCBqb2ItPnVybCgpLCBlcnJvcnMsICZjb250aW51ZUFu
eXdheSk7Ci0jaWZuZGVmIFFUX05PX09QRU5TU0wKLSAgICAgICAgaWYgKGNvbnRpbnVlQW55d2F5
KQotICAgICAgICAgICAgY29ubmVjdGlvbltjXS5odHRwLT5pZ25vcmVTc2xFcnJvcnMoKTsKLSNl
bmRpZgotICAgIH0KLX0KLQotdm9pZCBXZWJDb3JlSHR0cDo6b25BdXRoZW50aWNhdGlvblJlcXVp
cmVkKGNvbnN0IFFTdHJpbmcmIGhvc3RuYW1lLCBxdWludDE2IHBvcnQsIFFBdXRoZW50aWNhdG9y
KiBhdXRoKQotewotICAgIGludCBjID0gZ2V0Q29ubmVjdGlvbigpOwotICAgIFFXZWJOZXR3b3Jr
Sm9iICpqb2IgPSBjb25uZWN0aW9uW2NdLmN1cnJlbnQ7Ci0gICAgaWYgKGpvYikgewotICAgICAg
ICBlbWl0IGpvYi0+bmV0d29ya0ludGVyZmFjZSgpLT5hdXRoZW50aWNhdGUoam9iLT5mcmFtZSgp
LCBqb2ItPnVybCgpLCBob3N0bmFtZSwgcG9ydCwgYXV0aCk7Ci0gICAgICAgIGlmIChhdXRoLT5p
c051bGwoKSkKLSAgICAgICAgICAgIGNvbm5lY3Rpb25bY10uaHR0cC0+YWJvcnQoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgV2ViQ29yZUh0dHA6Om9uUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkKGNv
bnN0IFFOZXR3b3JrUHJveHkmIHByb3h5LCBRQXV0aGVudGljYXRvciogYXV0aCkKLXsKLSAgICBp
bnQgYyA9IGdldENvbm5lY3Rpb24oKTsKLSAgICBRV2ViTmV0d29ya0pvYiAqam9iID0gY29ubmVj
dGlvbltjXS5jdXJyZW50OwotICAgIGlmIChqb2IpIHsKLSAgICAgICAgZW1pdCBqb2ItPm5ldHdv
cmtJbnRlcmZhY2UoKS0+YXV0aGVudGljYXRlUHJveHkoam9iLT5mcmFtZSgpLCBqb2ItPnVybCgp
LCBwcm94eSwgYXV0aCk7Ci0gICAgICAgIGlmIChhdXRoLT5pc051bGwoKSkKLSAgICAgICAgICAg
IGNvbm5lY3Rpb25bY10uaHR0cC0+YWJvcnQoKTsKLSAgICB9Ci19Ci0KLUhvc3RJbmZvOjpIb3N0
SW5mbyhjb25zdCBRVXJsJiB1cmwpCi0gICAgOiBwcm90b2NvbCh1cmwuc2NoZW1lKCkpCi0gICAg
LCBob3N0KHVybC5ob3N0KCkpCi0gICAgLCBwb3J0KHVybC5wb3J0KCkpCi17Ci0gICAgaWYgKHBv
cnQgPCAwKSB7Ci0gICAgICAgIGlmIChwcm90b2NvbCA9PSBRTGF0aW4xU3RyaW5nKCJodHRwIikp
Ci0gICAgICAgICAgICBwb3J0ID0gODA7Ci0gICAgICAgIGVsc2UgaWYgKHByb3RvY29sID09IFFM
YXRpbjFTdHJpbmcoImh0dHBzIikpCi0gICAgICAgICAgICBwb3J0ID0gNDQzOwotICAgIH0KLX0K
LQotI2VuZGlmCkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJuZXR3b3JraW50ZXJmYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVyZmFjZS5oCShyZXZpc2lv
biA1MTA2MikKKysrIFdlYktpdC9xdC9BcGkvcXdlYm5ldHdvcmtpbnRlcmZhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxNjEgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDggTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBR
V0VCTkVUV09SS0lOVEVSRkFDRV9ICi0jZGVmaW5lIFFXRUJORVRXT1JLSU5URVJGQUNFX0gKLQot
I2luY2x1ZGUgPFF0Q29yZS9xb2JqZWN0Lmg+Ci0jaW5jbHVkZSA8UXRDb3JlL3F1cmwuaD4KLSNp
bmNsdWRlIDxRdE5ldHdvcmsvcWh0dHAuaD4KLSNpbmNsdWRlIDxRdENvcmUvcWJ5dGVhcnJheS5o
PgotCi0jaW5jbHVkZSAicXdlYmtpdGdsb2JhbC5oIgotCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQw
NDAwCi0KLWNsYXNzIFFBdXRoZW50aWNhdG9yOwotY2xhc3MgUU5ldHdvcmtQcm94eTsKLWNsYXNz
IFFTc2xFcnJvcjsKLWNsYXNzIFFXZWJGcmFtZTsKLWNsYXNzIFFXZWJOZXR3b3JrSm9iUHJpdmF0
ZTsKLWNsYXNzIFFXZWJOZXR3b3JrSW50ZXJmYWNlOwotY2xhc3MgUVdlYk9iamVjdFBsdWdpbkNv
bm5lY3RvcjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIFdlYkNvcmVIdHRwOwot
ICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdDsKLSAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudFF0
OwotfQotCi1zdHJ1Y3QgUVdlYk5ldHdvcmtSZXF1ZXN0UHJpdmF0ZTsKLWNsYXNzIFFXRUJLSVRf
RVhQT1JUIFFXZWJOZXR3b3JrUmVxdWVzdCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBNZXRob2Qgewot
ICAgICAgICBHZXQsCi0gICAgICAgIFBvc3QKLSAgICAgICAgLy9IZWFkCi0gICAgfTsKLQotICAg
IFFXZWJOZXR3b3JrUmVxdWVzdCgpOwotICAgIGV4cGxpY2l0IFFXZWJOZXR3b3JrUmVxdWVzdChj
b25zdCBRVXJsICZ1cmwsIE1ldGhvZCBtZXRob2QgPSBHZXQsIGNvbnN0IFFCeXRlQXJyYXkgJnBv
c3REYXRhID0gUUJ5dGVBcnJheSgpKTsKLSAgICBRV2ViTmV0d29ya1JlcXVlc3QoY29uc3QgUVdl
Yk5ldHdvcmtSZXF1ZXN0ICZvdGhlcik7Ci0KLSAgICBRV2ViTmV0d29ya1JlcXVlc3QgJm9wZXJh
dG9yPShjb25zdCBRV2ViTmV0d29ya1JlcXVlc3QgJm90aGVyKTsKLSAgICB+UVdlYk5ldHdvcmtS
ZXF1ZXN0KCk7Ci0KLSAgICBRVXJsIHVybCgpIGNvbnN0OwotICAgIHZvaWQgc2V0VXJsKGNvbnN0
IFFVcmwgJnVybCk7Ci0KLSAgICBRSHR0cFJlcXVlc3RIZWFkZXIgaHR0cEhlYWRlcigpIGNvbnN0
OwotICAgIHZvaWQgc2V0SHR0cEhlYWRlcihjb25zdCBRSHR0cFJlcXVlc3RIZWFkZXIgJmhlYWRl
cikgY29uc3Q7Ci0KLSAgICBRU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChjb25zdCBRU3RyaW5nICZr
ZXkpIGNvbnN0OwotICAgIHZvaWQgc2V0SHR0cEhlYWRlckZpZWxkKGNvbnN0IFFTdHJpbmcgJmtl
eSwgY29uc3QgUVN0cmluZyAmdmFsdWUpOwotCi0gICAgUUJ5dGVBcnJheSBwb3N0RGF0YSgpIGNv
bnN0OwotICAgIHZvaWQgc2V0UG9zdERhdGEoY29uc3QgUUJ5dGVBcnJheSAmZGF0YSk7Ci0KLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgUVdlYk5ldHdvcmtSZXF1ZXN0KGNvbnN0IFFXZWJOZXR3b3Jr
UmVxdWVzdFByaXZhdGUgJnByaXYpOwotICAgIGV4cGxpY2l0IFFXZWJOZXR3b3JrUmVxdWVzdChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgJnJlcXVlc3QpOwotICAgIGZyaWVuZCBjbGFz
cyBRV2ViTmV0d29ya0pvYjsKLSAgICBmcmllbmQgY2xhc3MgV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRRdDsKLQotICAgIFFXZWJOZXR3b3JrUmVxdWVzdFByaXZhdGUgKmQ7Ci0gICAgZnJpZW5k
IGNsYXNzIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3I7Ci19OwotCi1jbGFzcyBRV0VCS0lUX0VY
UE9SVCBRV2ViTmV0d29ya0pvYiB7Ci1wdWJsaWM6Ci0KLSAgICBRVXJsIHVybCgpIGNvbnN0Owot
ICAgIFFCeXRlQXJyYXkgcG9zdERhdGEoKSBjb25zdDsKLSAgICBRSHR0cFJlcXVlc3RIZWFkZXIg
aHR0cEhlYWRlcigpIGNvbnN0OwotICAgIFFXZWJOZXR3b3JrUmVxdWVzdCByZXF1ZXN0KCkgY29u
c3Q7Ci0gICAgUVN0cmluZyBlcnJvclN0cmluZygpIGNvbnN0OwotCi0gICAgUUh0dHBSZXNwb25z
ZUhlYWRlciByZXNwb25zZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0UmVzcG9uc2UoY29uc3QgUUh0
dHBSZXNwb25zZUhlYWRlciAmcmVzcG9uc2UpOwotICAgIHZvaWQgc2V0RXJyb3JTdHJpbmcoY29u
c3QgUVN0cmluZyYpOwotCi0gICAgYm9vbCBjYW5jZWxsZWQoKSBjb25zdDsKLQotICAgIHZvaWQg
cmVmKCk7Ci0gICAgYm9vbCBkZXJlZigpOwotCi0gICAgUVdlYk5ldHdvcmtJbnRlcmZhY2UgKm5l
dHdvcmtJbnRlcmZhY2UoKSBjb25zdDsKLQotICAgIFFXZWJGcmFtZSAqZnJhbWUoKSBjb25zdDsK
LQotcHJvdGVjdGVkOgotICAgIGVudW0gSm9iU3RhdHVzIHsKLSAgICAgICAgSm9iQ3JlYXRlZCwK
LSAgICAgICAgSm9iUmVjcmVhdGVkLAotICAgICAgICBKb2JTdGFydGVkLAotICAgICAgICBKb2JS
ZWNlaXZpbmdEYXRhLAotICAgICAgICBKb2JGaW5pc2hlZAotICAgIH07Ci0KLSAgICBKb2JTdGF0
dXMgc3RhdHVzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTdGF0dXMoY29uc3QgSm9iU3RhdHVzJik7
Ci0KLXByaXZhdGU6Ci0gICAgUVdlYk5ldHdvcmtKb2IoKTsKLSAgICB+UVdlYk5ldHdvcmtKb2Io
KTsKLQotICAgIGZyaWVuZCBjbGFzcyBRV2ViTmV0d29ya01hbmFnZXI7Ci0gICAgZnJpZW5kIGNs
YXNzIFFXZWJPYmplY3RQbHVnaW5Db25uZWN0b3I7Ci0gICAgZnJpZW5kIGNsYXNzIFFXZWJOZXR3
b3JrSm9iUHJpdmF0ZTsKLQotICAgIFFXZWJOZXR3b3JrSm9iUHJpdmF0ZSAqZDsKLX07Ci0KLWNs
YXNzIFFXZWJOZXR3b3JrSW50ZXJmYWNlUHJpdmF0ZTsKLQotY2xhc3MgUVdFQktJVF9FWFBPUlQg
UVdlYk5ldHdvcmtJbnRlcmZhY2UgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1
YmxpYzoKLSAgICBRV2ViTmV0d29ya0ludGVyZmFjZShRT2JqZWN0ICpwYXJlbnQgPSAwKTsKLSAg
ICB+UVdlYk5ldHdvcmtJbnRlcmZhY2UoKTsKLQotICAgIHN0YXRpYyB2b2lkIHNldERlZmF1bHRJ
bnRlcmZhY2UoUVdlYk5ldHdvcmtJbnRlcmZhY2UgKmRlZmF1bHRJbnRlcmZhY2UpOwotICAgIHN0
YXRpYyBRV2ViTmV0d29ya0ludGVyZmFjZSAqZGVmYXVsdEludGVyZmFjZSgpOwotCi0gICAgdmly
dHVhbCB2b2lkIGFkZEpvYihRV2ViTmV0d29ya0pvYiAqam9iKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2FuY2VsSm9iKFFXZWJOZXR3b3JrSm9iICpqb2IpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBz
dGFydGVkKFFXZWJOZXR3b3JrSm9iKik7Ci0gICAgdm9pZCBkYXRhKFFXZWJOZXR3b3JrSm9iKiwg
Y29uc3QgUUJ5dGVBcnJheSAmZGF0YSk7Ci0gICAgdm9pZCBmaW5pc2hlZChRV2ViTmV0d29ya0pv
YiosIGludCBlcnJvckNvZGUpOwotCi1zaWduYWxzOgotICAgIHZvaWQgc3NsRXJyb3JzKFFXZWJG
cmFtZSAqZnJhbWUsIGNvbnN0IFFVcmwmIHVybCwgY29uc3QgUUxpc3Q8UVNzbEVycm9yPiYgZXJy
b3JzLCBib29sICpjb250aW51ZUFueXdheSk7Ci0gICAgdm9pZCBhdXRoZW50aWNhdGUoUVdlYkZy
YW1lICpmcmFtZSwgY29uc3QgUVVybCYgdXJsLCBjb25zdCBRU3RyaW5nJiBob3N0bmFtZSwgcXVp
bnQxNiBwb3J0LCBRQXV0aGVudGljYXRvciAqYXV0aCk7Ci0gICAgdm9pZCBhdXRoZW50aWNhdGVQ
cm94eShRV2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRVXJsJiB1cmwsIGNvbnN0IFFOZXR3b3JrUHJv
eHkmIHByb3h5LCBRQXV0aGVudGljYXRvciAqYXV0aCk7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIFFXZWJOZXR3b3JrSW50ZXJmYWNlUHJpdmF0ZTsKLSAgICBmcmllbmQgY2xhc3MgV2Vi
Q29yZTo6V2ViQ29yZUh0dHA7Ci0gICAgUVdlYk5ldHdvcmtJbnRlcmZhY2VQcml2YXRlICpkOwot
fTsKLQotI2VuZGlmCi0KLSNlbmRpZgpJbmRleDogV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2lu
dGVyZmFjZV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2ludGVy
ZmFjZV9wLmgJKHJldmlzaW9uIDUxMDYyKQorKysgV2ViS2l0L3F0L0FwaS9xd2VibmV0d29ya2lu
dGVyZmFjZV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSovCi0KLSNpZm5kZWYgUVdFQk5FVFdPUktJTlRFUkZBQ0VfUF9ICi0jZGVmaW5lIFFXRUJO
RVRXT1JLSU5URVJGQUNFX1BfSAotCi0jaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2UuaCIK
LSNpZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAKLSNpbmNsdWRlIDxxdGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8cW11dGV4Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgSG9zdEluZm87
Ci0gICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotfTsKLXVpbnQgcUhhc2goY29uc3QgV2ViQ29y
ZTo6SG9zdEluZm8gJmluZm8pOwotI2luY2x1ZGUgPHFoYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICBjbGFzcyBSZXNvdXJjZUhhbmRsZTsKLX0KLQotc3RydWN0IFFXZWJOZXR3b3Jr
UmVxdWVzdFByaXZhdGUgewotICAgIFFVcmwgdXJsOwotICAgIFFIdHRwUmVxdWVzdEhlYWRlciBo
dHRwSGVhZGVyOwotICAgIFFCeXRlQXJyYXkgcG9zdERhdGE7Ci0KLSAgICB2b2lkIGluaXQoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0ICZyZXNvdXJjZVJlcXVlc3QpOwotICAgIHZvaWQg
aW5pdChjb25zdCBRU3RyaW5nICZtZXRob2QsIGNvbnN0IFFVcmwgJnVybCwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0ICpyZXNvdXJjZVJlcXVlc3QgPSAwKTsKLSAgICB2b2lkIHNldFVS
TChjb25zdCBRVXJsICZ1KTsKLX07Ci0KLWNsYXNzIFFXZWJOZXR3b3JrSm9iUHJpdmF0ZSB7Ci1w
dWJsaWM6Ci0gICAgUVdlYk5ldHdvcmtKb2JQcml2YXRlKCkKLSAgICAgICAgOiByZWYoMSkKLSAg
ICAgICAgLCByZXNvdXJjZUhhbmRsZSgwKQotICAgICAgICAsIHJlZGlyZWN0ZWQoZmFsc2UpCi0g
ICAgICAgICwgaW50ZXJmYWNlKDApCi0gICAgICAgICwgam9iU3RhdHVzKFFXZWJOZXR3b3JrSm9i
OjpKb2JDcmVhdGVkKQotICAgICAgICB7fQotICAgIGludCByZWY7Ci0KLSAgICBRV2ViTmV0d29y
a1JlcXVlc3RQcml2YXRlIHJlcXVlc3Q7Ci0gICAgUUh0dHBSZXNwb25zZUhlYWRlciByZXNwb25z
ZTsKLQotICAgIFdlYkNvcmU6OlJlc291cmNlSGFuZGxlICpyZXNvdXJjZUhhbmRsZTsKLSAgICBi
b29sIHJlZGlyZWN0ZWQ7Ci0KLSAgICBRV2ViTmV0d29ya0ludGVyZmFjZSAqaW50ZXJmYWNlOwot
ICAgIFFXZWJOZXR3b3JrSm9iOjpKb2JTdGF0dXMgam9iU3RhdHVzOwotICAgIFFTdHJpbmcgZXJy
b3JTdHJpbmc7Ci19OwotCi1jbGFzcyBRV2ViTmV0d29ya01hbmFnZXIgOiBwdWJsaWMgUU9iamVj
dCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBlbnVtIEpvYk1vZGUgewotICAgICAgICBB
c3luY2hyb25vdXNKb2IsCi0gICAgICAgIFN5bmNocm9ub3VzSm9iCi0gICAgfTsKLQotICAgIHN0
YXRpYyBRV2ViTmV0d29ya01hbmFnZXIgKnNlbGYoKTsKLQotICAgIGJvb2wgYWRkKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlICpyZXNvdXJjZUhhbmRsZSwgUVdlYk5ldHdvcmtJbnRlcmZhY2UgKmlu
dGVyZmFjZSwgSm9iTW9kZSA9IEFzeW5jaHJvbm91c0pvYik7Ci0gICAgdm9pZCBjYW5jZWwoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGUgKnJlc291cmNlSGFuZGxlKTsKLQotICAgIHZvaWQgYWRkSHR0
cEpvYihRV2ViTmV0d29ya0pvYiAqam9iKTsKLSAgICB2b2lkIGNhbmNlbEh0dHBKb2IoUVdlYk5l
dHdvcmtKb2IgKmpvYik7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHF1ZXVlU3RhcnQoUVdlYk5l
dHdvcmtKb2IqKTsKLSAgICB2b2lkIHF1ZXVlRGF0YShRV2ViTmV0d29ya0pvYiosIGNvbnN0IFFC
eXRlQXJyYXkmKTsKLSAgICB2b2lkIHF1ZXVlRmluaXNoZWQoUVdlYk5ldHdvcmtKb2IqLCBpbnQg
ZXJyb3JDb2RlKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHN0YXJ0ZWQoUVdlYk5ldHdvcmtKb2Ig
Kik7Ci0gICAgdm9pZCBkYXRhKFFXZWJOZXR3b3JrSm9iICosIGNvbnN0IFFCeXRlQXJyYXkgJmRh
dGEpOwotICAgIHZvaWQgZmluaXNoZWQoUVdlYk5ldHdvcmtKb2IgKiwgaW50IGVycm9yQ29kZSk7
Ci0gICAgdm9pZCBkb1NjaGVkdWxlV29yaygpOwotCi1zaWduYWxzOgotICAgIHZvaWQgZmlsZVJl
cXVlc3QoUVdlYk5ldHdvcmtKb2IqKTsKLSAgICB2b2lkIHNjaGVkdWxlV29yaygpOwotCi1wcml2
YXRlIHNsb3RzOgotICAgIHZvaWQgaHR0cENvbm5lY3Rpb25DbG9zZWQoY29uc3QgV2ViQ29yZTo6
SG9zdEluZm8gJik7Ci0gICAgdm9pZCBkb1dvcmsoKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgUVdlYk5ldHdvcmtJbnRlcmZhY2U7Ci0gICAgUVdlYk5ldHdvcmtNYW5hZ2VyKCk7Ci0g
ICAgUUhhc2g8V2ViQ29yZTo6SG9zdEluZm8sIFdlYkNvcmU6OldlYkNvcmVIdHRwICo+IG1faG9z
dE1hcHBpbmc7Ci0KLSAgICBzdHJ1Y3QgSm9iV29yayB7Ci0gICAgICAgIGVudW0gV29ya1R5cGUg
ewotICAgICAgICAgICAgSm9iU3RhcnRlZCwKLSAgICAgICAgICAgIEpvYkRhdGEsCi0gICAgICAg
ICAgICBKb2JGaW5pc2hlZAotICAgICAgICB9OwotCi0gICAgICAgIGV4cGxpY2l0IEpvYldvcmso
UVdlYk5ldHdvcmtKb2IqIF9qb2IpCi0gICAgICAgICAgICA6IHdvcmtUeXBlKEpvYlN0YXJ0ZWQp
Ci0gICAgICAgICAgICAsIGVycm9yQ29kZSgtMSkKLSAgICAgICAgICAgICwgam9iKF9qb2IpCi0g
ICAgICAgIHt9Ci0KLSAgICAgICAgZXhwbGljaXQgSm9iV29yayhRV2ViTmV0d29ya0pvYiogX2pv
YiwgaW50IF9lcnJvckNvZGUpCi0gICAgICAgICAgICA6IHdvcmtUeXBlKEpvYkZpbmlzaGVkKQot
ICAgICAgICAgICAgLCBlcnJvckNvZGUoX2Vycm9yQ29kZSkKLSAgICAgICAgICAgICwgam9iKF9q
b2IpCi0gICAgICAgIHt9Ci0KLSAgICAgICAgZXhwbGljaXQgSm9iV29yayhRV2ViTmV0d29ya0pv
YiogX2pvYiwgY29uc3QgUUJ5dGVBcnJheSYgX2RhdGEpCi0gICAgICAgICAgICA6IHdvcmtUeXBl
KEpvYkRhdGEpCi0gICAgICAgICAgICAsIGVycm9yQ29kZSgtMSkKLSAgICAgICAgICAgICwgam9i
KF9qb2IpCi0gICAgICAgICAgICAsIGRhdGEoX2RhdGEpCi0gICAgICAgIHt9Ci0KLSAgICAgICAg
Y29uc3QgV29ya1R5cGUgd29ya1R5cGU7Ci0gICAgICAgIGludCBlcnJvckNvZGU7Ci0gICAgICAg
IFFCeXRlQXJyYXkgZGF0YTsKLSAgICAgICAgUVdlYk5ldHdvcmtKb2IqIGpvYjsKLSAgICB9Owot
Ci0gICAgUU11dGV4IG1fcXVldWVNdXRleDsKLSAgICBib29sIG1fc2NoZWR1bGVkV29yazsKLSAg
ICBRTGlzdDxKb2JXb3JrKj4gbV9wZW5kaW5nV29yazsKLSAgICBRSGFzaDxRV2ViTmV0d29ya0pv
YiosIGludD4gbV9zeW5jaHJvbm91c0pvYnM7Ci19OwotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotICAgIGNsYXNzIE5ldHdvcmtMb2FkZXI7Ci0KLSAgICBzdHJ1Y3QgSG9zdEluZm8gewotICAg
ICAgICBIb3N0SW5mbygpIHt9Ci0gICAgICAgIEhvc3RJbmZvKGNvbnN0IFFVcmwmIHVybCk7Ci0g
ICAgICAgIFFTdHJpbmcgcHJvdG9jb2w7Ci0gICAgICAgIFFTdHJpbmcgaG9zdDsKLSAgICAgICAg
aW50IHBvcnQ7Ci0gICAgfTsKLQotICAgIGNsYXNzIFdlYkNvcmVIdHRwIDogcHVibGljIFFPYmpl
Y3QgewotICAgICAgICBRX09CSkVDVAotICAgIHB1YmxpYzoKLSAgICAgICAgV2ViQ29yZUh0dHAo
UU9iamVjdCogcGFyZW50LCBjb25zdCBIb3N0SW5mbyYpOwotICAgICAgICB+V2ViQ29yZUh0dHAo
KTsKLQotICAgICAgICB2b2lkIHJlcXVlc3QoUVdlYk5ldHdvcmtKb2IqIHJlc291cmNlKTsKLSAg
ICAgICAgdm9pZCBjYW5jZWwoUVdlYk5ldHdvcmtKb2IqKTsKLQotICAgIHNpZ25hbHM6Ci0gICAg
ICAgIHZvaWQgY29ubmVjdGlvbkNsb3NlZChjb25zdCBXZWJDb3JlOjpIb3N0SW5mbyYpOwotCi0g
ICAgcHJpdmF0ZSBzbG90czoKLSAgICAgICAgdm9pZCBvblJlc3BvbnNlSGVhZGVyUmVjZWl2ZWQo
Y29uc3QgUUh0dHBSZXNwb25zZUhlYWRlciYgcmVzcCk7Ci0gICAgICAgIHZvaWQgb25SZWFkeVJl
YWQoKTsKLSAgICAgICAgdm9pZCBvblJlcXVlc3RGaW5pc2hlZChpbnQsIGJvb2wpOwotICAgICAg
ICB2b2lkIG9uRG9uZShib29sKTsKLSAgICAgICAgdm9pZCBvblN0YXRlQ2hhbmdlZChpbnQpOwot
ICAgICAgICB2b2lkIG9uU3NsRXJyb3JzKGNvbnN0IFFMaXN0PFFTc2xFcnJvcj4mKTsKLSAgICAg
ICAgdm9pZCBvbkF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoY29uc3QgUVN0cmluZyYgaG9zdG5hbWUs
IHF1aW50MTYgcG9ydCwgUUF1dGhlbnRpY2F0b3IqKTsKLSAgICAgICAgdm9pZCBvblByb3h5QXV0
aGVudGljYXRpb25SZXF1aXJlZChjb25zdCBRTmV0d29ya1Byb3h5JiBwcm94eSwgUUF1dGhlbnRp
Y2F0b3IqKTsKLQotICAgICAgICB2b2lkIHNjaGVkdWxlTmV4dFJlcXVlc3QoKTsKLQotICAgICAg
ICBpbnQgZ2V0Q29ubmVjdGlvbigpOwotCi0gICAgcHVibGljOgotICAgICAgICBIb3N0SW5mbyBp
bmZvOwotICAgIHByaXZhdGU6Ci0gICAgICAgIFFMaXN0PFFXZWJOZXR3b3JrSm9iKj4gbV9wZW5k
aW5nUmVxdWVzdHM7Ci0gICAgICAgIHN0cnVjdCBIdHRwQ29ubmVjdGlvbiB7Ci0gICAgICAgICAg
ICBIdHRwQ29ubmVjdGlvbigpIDogaHR0cCgwKSwgY3VycmVudCgwKSwgaWQoLTEpIHt9Ci0gICAg
ICAgICAgICBRSHR0cCogaHR0cDsKLSAgICAgICAgICAgIFFXZWJOZXR3b3JrSm9iKiBjdXJyZW50
OwotICAgICAgICAgICAgaW50IGlkOyAvLyB0aGUgUUh0dHAgaWQKLSAgICAgICAgfTsKLSAgICAg
ICAgSHR0cENvbm5lY3Rpb24gY29ubmVjdGlvblsyXTsKLSAgICAgICAgYm9vbCBtX2luQ2FuY2Vs
OwotICAgIH07Ci0KLX0KLQotY2xhc3MgUVdlYk5ldHdvcmtJbnRlcmZhY2VQcml2YXRlIHsKLXB1
YmxpYzoKLSAgICB2b2lkIHNlbmRGaWxlRGF0YShRV2ViTmV0d29ya0pvYiogam9iLCBpbnQgc3Rh
dHVzQ29kZSwgY29uc3QgUUJ5dGVBcnJheSYgZGF0YSk7Ci0gICAgdm9pZCBwYXJzZURhdGFVcmwo
UVdlYk5ldHdvcmtKb2IqIGpvYik7Ci0KLSAgICBRV2ViTmV0d29ya0ludGVyZmFjZSogcTsKLX07
Ci0KLSNlbmRpZgotCi0jZW5kaWYKSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA1MTA2MikK
KysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTIg
KzEwMiw4IEBACiAjaW5jbHVkZSA8UVN0eWxlPgogI2luY2x1ZGUgPFFTeXNJbmZvPgogI2luY2x1
ZGUgPFFUZXh0Q2hhckZvcm1hdD4KLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAjaW5jbHVk
ZSA8UU5ldHdvcmtBY2Nlc3NNYW5hZ2VyPgogI2luY2x1ZGUgPFFOZXR3b3JrUmVxdWVzdD4KLSNl
bHNlCi0jaW5jbHVkZSAicXdlYm5ldHdvcmtpbnRlcmZhY2UuaCIKLSNlbmRpZgogI2lmIGRlZmlu
ZWQoUV9XU19YMTEpCiAjaW5jbHVkZSA8UVgxMUluZm8+CiAjZW5kaWYKQEAgLTM4OCwxMSArMzg0
LDcgQEAgUVdlYlBhZ2VQcml2YXRlOjpRV2ViUGFnZVByaXZhdGUoUVdlYlBhZwogICAgIHVuZG9T
dGFjayA9IDA7CiAjZW5kaWYKICAgICBtYWluRnJhbWUgPSAwOwotI2lmIFFUX1ZFUlNJT04gPCAw
eDA0MDQwMAotICAgIG5ldHdvcmtJbnRlcmZhY2UgPSAwOwotI2Vsc2UKICAgICBuZXR3b3JrTWFu
YWdlciA9IDA7Ci0jZW5kaWYKICAgICBwbHVnaW5GYWN0b3J5ID0gMDsKICAgICBpbnNpZGVPcGVu
Q2FsbCA9IGZhbHNlOwogICAgIGZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQgPSBmYWxzZTsKQEAg
LTQyMSwxNSArNDEzLDYgQEAgUVdlYlBhZ2VQcml2YXRlOjp+UVdlYlBhZ2VQcml2YXRlKCkKICAg
ICBkZWxldGUgcGFnZTsKIH0KIAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMAotYm9vbCBRV2Vi
UGFnZVByaXZhdGU6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUsIGNv
bnN0IFFXZWJOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUVdlYlBhZ2U6Ok5hdmlnYXRpb25UeXBl
IHR5cGUpCi17Ci0gICAgaWYgKGluc2lkZU9wZW5DYWxsCi0gICAgICAgICYmIGZyYW1lID09IG1h
aW5GcmFtZSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIHEtPmFjY2VwdE5hdmln
YXRpb25SZXF1ZXN0KGZyYW1lLCByZXF1ZXN0LCB0eXBlKTsKLX0KLSNlbHNlCiBib29sIFFXZWJQ
YWdlUHJpdmF0ZTo6YWNjZXB0TmF2aWdhdGlvblJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSwgY29u
c3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0LCBRV2ViUGFnZTo6TmF2aWdhdGlvblR5cGUgdHlw
ZSkKIHsKICAgICBpZiAoaW5zaWRlT3BlbkNhbGwKQEAgLTQzNyw3ICs0MjAsNiBAQCBib29sIFFX
ZWJQYWdlUHJpdmF0ZTo6YWNjZXB0TmF2aWdhdGlvblJlCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIHJldHVybiBxLT5hY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChmcmFtZSwgcmVxdWVzdCwgdHlw
ZSk7CiB9Ci0jZW5kaWYKIAogdm9pZCBRV2ViUGFnZVByaXZhdGU6OmNyZWF0ZU1haW5GcmFtZSgp
CiB7CkBAIC0yMTIyLDExICsyMTA0LDcgQEAgdm9pZCBRV2ViUGFnZTo6c2V0UHJlZmVycmVkQ29u
dGVudHNTaXplKAogCiAgICAgXHNhIGNyZWF0ZVdpbmRvdygpCiAqLwotI2lmIFFUX1ZFUlNJT04g
Pj0gMHgwNDA0MDAKIGJvb2wgUVdlYlBhZ2U6OmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJG
cmFtZSAqZnJhbWUsIGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUVdlYlBhZ2U6Ok5h
dmlnYXRpb25UeXBlIHR5cGUpCi0jZWxzZQotYm9vbCBRV2ViUGFnZTo6YWNjZXB0TmF2aWdhdGlv
blJlcXVlc3QoUVdlYkZyYW1lICpmcmFtZSwgY29uc3QgUVdlYk5ldHdvcmtSZXF1ZXN0ICZyZXF1
ZXN0LCBRV2ViUGFnZTo6TmF2aWdhdGlvblR5cGUgdHlwZSkKLSNlbmRpZgogewogICAgIFFfVU5V
U0VEKGZyYW1lKQogICAgIGlmICh0eXBlID09IE5hdmlnYXRpb25UeXBlTGlua0NsaWNrZWQpIHsK
QEAgLTIyMTQsMjcgKzIxOTIsMTkgQEAgUUFjdGlvbiAqUVdlYlBhZ2U6OmFjdGlvbihXZWJBY3Rp
b24gYWN0aQogCiAgICAgICAgIGNhc2UgQmFjazoKICAgICAgICAgICAgIHRleHQgPSBjb250ZXh0
TWVudUl0ZW1UYWdHb0JhY2soKTsKLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAgICAgICAg
ICAgICBpY29uID0gc3R5bGUtPnN0YW5kYXJkSWNvbihRU3R5bGU6OlNQX0Fycm93QmFjayk7Ci0j
ZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZvcndhcmQ6CiAgICAgICAg
ICAgICB0ZXh0ID0gY29udGV4dE1lbnVJdGVtVGFnR29Gb3J3YXJkKCk7Ci0jaWYgUVRfVkVSU0lP
TiA+PSAweDA0MDQwMAogICAgICAgICAgICAgaWNvbiA9IHN0eWxlLT5zdGFuZGFyZEljb24oUVN0
eWxlOjpTUF9BcnJvd0ZvcndhcmQpOwotI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBTdG9wOgogICAgICAgICAgICAgdGV4dCA9IGNvbnRleHRNZW51SXRlbVRhZ1N0b3Ao
KTsKLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwCiAgICAgICAgICAgICBpY29uID0gc3R5bGUt
PnN0YW5kYXJkSWNvbihRU3R5bGU6OlNQX0Jyb3dzZXJTdG9wKTsKLSNlbmRpZgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVsb2FkOgogICAgICAgICAgICAgdGV4dCA9IGNvbnRl
eHRNZW51SXRlbVRhZ1JlbG9hZCgpOwotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKICAgICAg
ICAgICAgIGljb24gPSBzdHlsZS0+c3RhbmRhcmRJY29uKFFTdHlsZTo6U1BfQnJvd3NlclJlbG9h
ZCk7Ci0jZW5kaWYKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ3V0OgpAQCAt
Mjk2NCwzNSArMjkzNCw2IEBAIFFTdHJpbmcgUVdlYlBhZ2U6OmNob29zZUZpbGUoUVdlYkZyYW1l
ICoKICNlbmRpZgogfQogCi0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwICYmICFkZWZpbmVkIHFk
b2MKLQotdm9pZCBRV2ViUGFnZTo6c2V0TmV0d29ya0ludGVyZmFjZShRV2ViTmV0d29ya0ludGVy
ZmFjZSAqaW50ZXJmYWNlKQotewotICAgIGQtPm5ldHdvcmtJbnRlcmZhY2UgPSBpbnRlcmZhY2U7
Ci19Ci0KLVFXZWJOZXR3b3JrSW50ZXJmYWNlICpRV2ViUGFnZTo6bmV0d29ya0ludGVyZmFjZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKGQtPm5ldHdvcmtJbnRlcmZhY2UpCi0gICAgICAgIHJldHVybiBk
LT5uZXR3b3JrSW50ZXJmYWNlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFFXZWJOZXR3b3Jr
SW50ZXJmYWNlOjpkZWZhdWx0SW50ZXJmYWNlKCk7Ci19Ci0KLSNpZm5kZWYgUVRfTk9fTkVUV09S
S1BST1hZCi12b2lkIFFXZWJQYWdlOjpzZXROZXR3b3JrUHJveHkoY29uc3QgUU5ldHdvcmtQcm94
eSYgcHJveHkpCi17Ci0gICAgZC0+bmV0d29ya1Byb3h5ID0gcHJveHk7Ci19Ci0KLVFOZXR3b3Jr
UHJveHkgUVdlYlBhZ2U6Om5ldHdvcmtQcm94eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGQtPm5l
dHdvcmtQcm94eTsKLX0KLSNlbmRpZgotCi0jZWxzZQotCiAvKiEKICAgICBTZXRzIHRoZSBRTmV0
d29ya0FjY2Vzc01hbmFnZXIgXGEgbWFuYWdlciByZXNwb25zaWJsZSBmb3Igc2VydmluZyBuZXR3
b3JrIHJlcXVlc3RzIGZvciB0aGlzCiAgICAgUVdlYlBhZ2UuCkBAIC0zMDI2LDggKzI5NjcsNiBA
QCBRTmV0d29ya0FjY2Vzc01hbmFnZXIgKlFXZWJQYWdlOjpuZXR3b3JrCiAgICAgcmV0dXJuIGQt
Pm5ldHdvcmtNYW5hZ2VyOwogfQogCi0jZW5kaWYKLQogLyohCiAgICAgU2V0cyB0aGUgUVdlYlBs
dWdpbkZhY3RvcnkgXGEgZmFjdG9yeSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgcGx1Z2lucyBl
bWJlZGRlZCBpbnRvIHRoaXMKICAgICBRV2ViUGFnZS4KQEAgLTMyMzYsMTEgKzMxNzUsOSBAQCBR
U3RyaW5nIFFXZWJQYWdlOjp1c2VyQWdlbnRGb3JVcmwoY29uc3QgCiAgICAgUVN0cmluZyBhcHBO
YW1lID0gUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25OYW1lKCk7CiAgICAgaWYgKCFhcHBO
YW1lLmlzRW1wdHkoKSkgewogICAgICAgICB1YS5hcHBlbmQoYXBwTmFtZSk7Ci0jaWYgUVRfVkVS
U0lPTiA+PSAweDA0MDQwMAogICAgICAgICBRU3RyaW5nIGFwcFZlciA9IFFDb3JlQXBwbGljYXRp
b246OmFwcGxpY2F0aW9uVmVyc2lvbigpOwogICAgICAgICBpZiAoIWFwcFZlci5pc0VtcHR5KCkp
CiAgICAgICAgICAgICB1YS5hcHBlbmQoUUxhdGluMUNoYXIoJy8nKSArIGFwcFZlcik7Ci0jZW5k
aWYKICAgICB9IGVsc2UgewogICAgICAgICAvLyBRdCB2ZXJzaW9uCiAgICAgICAgIHVhLmFwcGVu
ZChRTGF0aW4xU3RyaW5nKCJRdC8iKSk7CkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5oCShyZXZpc2lvbiA1MTA2MikK
KysrIFdlYktpdC9xdC9BcGkvcXdlYnBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDIwICsy
MDgsOCBAQCBwdWJsaWM6CiAgICAgUVVuZG9TdGFjayAqdW5kb1N0YWNrKCkgY29uc3Q7CiAjZW5k
aWYKIAotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQwMCAmJiAhZGVmaW5lZChxZG9jKQotICAgIHZv
aWQgc2V0TmV0d29ya0ludGVyZmFjZShRV2ViTmV0d29ya0ludGVyZmFjZSAqaW50ZXJmYWNlKTsK
LSAgICBRV2ViTmV0d29ya0ludGVyZmFjZSAqbmV0d29ya0ludGVyZmFjZSgpIGNvbnN0OwotCi0g
ICAgLy8gIyMjIyB3aHkgaXMgdGhpcyBpbiB0aGUgcGFnZSBpdHNlbGY/Ci0jaWZuZGVmIFFUX05P
X05FVFdPUktQUk9YWQotICAgIHZvaWQgc2V0TmV0d29ya1Byb3h5KGNvbnN0IFFOZXR3b3JrUHJv
eHkmIHByb3h5KTsKLSAgICBRTmV0d29ya1Byb3h5IG5ldHdvcmtQcm94eSgpIGNvbnN0OwotI2Vu
ZGlmCi0KLSNlbHNlCiAgICAgdm9pZCBzZXROZXR3b3JrQWNjZXNzTWFuYWdlcihRTmV0d29ya0Fj
Y2Vzc01hbmFnZXIgKm1hbmFnZXIpOwogICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlciAqbmV0d29y
a0FjY2Vzc01hbmFnZXIoKSBjb25zdDsKLSNlbmRpZgogCiAgICAgdm9pZCBzZXRQbHVnaW5GYWN0
b3J5KFFXZWJQbHVnaW5GYWN0b3J5ICpmYWN0b3J5KTsKICAgICBRV2ViUGx1Z2luRmFjdG9yeSAq
cGx1Z2luRmFjdG9yeSgpIGNvbnN0OwpAQCAtMzM0LDEwICszMjIsOCBAQCBRX1NJR05BTFM6CiAg
ICAgdm9pZCBzdGF0dXNCYXJWaXNpYmlsaXR5Q2hhbmdlUmVxdWVzdGVkKGJvb2wgdmlzaWJsZSk7
CiAgICAgdm9pZCBtZW51QmFyVmlzaWJpbGl0eUNoYW5nZVJlcXVlc3RlZChib29sIHZpc2libGUp
OwogCi0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogICAgIHZvaWQgdW5zdXBwb3J0ZWRDb250
ZW50KFFOZXR3b3JrUmVwbHkgKnJlcGx5KTsKICAgICB2b2lkIGRvd25sb2FkUmVxdWVzdGVkKGNv
bnN0IFFOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCk7Ci0jZW5kaWYKIAogICAgIHZvaWQgbWljcm9G
b2N1c0NoYW5nZWQoKTsKICAgICB2b2lkIGNvbnRlbnRzQ2hhbmdlZCgpOwpAQCAtMzUwLDExICsz
MzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBRV2ViUGFnZSAqY3JlYXRlV2luZG93KFdl
YldpbmRvd1R5cGUgdHlwZSk7CiAgICAgdmlydHVhbCBRT2JqZWN0ICpjcmVhdGVQbHVnaW4oY29u
c3QgUVN0cmluZyAmY2xhc3NpZCwgY29uc3QgUVVybCAmdXJsLCBjb25zdCBRU3RyaW5nTGlzdCAm
cGFyYW1OYW1lcywgY29uc3QgUVN0cmluZ0xpc3QgJnBhcmFtVmFsdWVzKTsKIAotI2lmIFFUX1ZF
UlNJT04gPj0gMHgwNDA0MDAKICAgICB2aXJ0dWFsIGJvb2wgYWNjZXB0TmF2aWdhdGlvblJlcXVl
c3QoUVdlYkZyYW1lICpmcmFtZSwgY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0LCBOYXZp
Z2F0aW9uVHlwZSB0eXBlKTsKLSNlbHNlCi0gICAgdmlydHVhbCBib29sIGFjY2VwdE5hdmlnYXRp
b25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUsIGNvbnN0IFFXZWJOZXR3b3JrUmVxdWVzdCAmcmVx
dWVzdCwgTmF2aWdhdGlvblR5cGUgdHlwZSk7Ci0jZW5kaWYKICAgICB2aXJ0dWFsIFFTdHJpbmcg
Y2hvb3NlRmlsZShRV2ViRnJhbWUgKm9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcmIG9s
ZEZpbGUpOwogICAgIHZpcnR1YWwgdm9pZCBqYXZhU2NyaXB0QWxlcnQoUVdlYkZyYW1lICpvcmln
aW5hdGluZ0ZyYW1lLCBjb25zdCBRU3RyaW5nJiBtc2cpOwogICAgIHZpcnR1YWwgYm9vbCBqYXZh
U2NyaXB0Q29uZmlybShRV2ViRnJhbWUgKm9yaWdpbmF0aW5nRnJhbWUsIGNvbnN0IFFTdHJpbmcm
IG1zZyk7CkluZGV4OiBXZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvQXBpL3F3ZWJwYWdlX3AuaAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlX3AuaAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDE4ICsxNTEsOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGNsaWNrQ2F1c2VkRm9jdXM7CiAKLSNpZiBRVF9WRVJTSU9OIDwgMHgw
NDA0MDAKLSAgICBib29sIGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KFFXZWJGcmFtZSAqZnJhbWUs
IGNvbnN0IFFXZWJOZXR3b3JrUmVxdWVzdCAmcmVxdWVzdCwgUVdlYlBhZ2U6Ok5hdmlnYXRpb25U
eXBlIHR5cGUpOwotCi0gICAgUVdlYk5ldHdvcmtJbnRlcmZhY2UgKm5ldHdvcmtJbnRlcmZhY2U7
Ci0jaWZuZGVmIFFUX05PX05FVFdPUktQUk9YWQotICAgIFFOZXR3b3JrUHJveHkgbmV0d29ya1By
b3h5OwotI2VuZGlmCi0KLSNlbHNlCiAgICAgYm9vbCBhY2NlcHROYXZpZ2F0aW9uUmVxdWVzdChR
V2ViRnJhbWUgKmZyYW1lLCBjb25zdCBRTmV0d29ya1JlcXVlc3QgJnJlcXVlc3QsIFFXZWJQYWdl
OjpOYXZpZ2F0aW9uVHlwZSB0eXBlKTsKICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXIgKm5ldHdv
cmtNYW5hZ2VyOwotI2VuZGlmCiAKICAgICBib29sIGZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQ7
CiAgICAgUVdlYlBhZ2U6OkxpbmtEZWxlZ2F0aW9uUG9saWN5IGxpbmtQb2xpY3k7CkluZGV4OiBX
ZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQXBpL3F3
ZWJ2aWV3LmNwcAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDE5ICsyNzAsMTEgQEAgdm9pZCBRV2ViVmlldzo6bG9h
ZChjb25zdCBRVXJsICZ1cmwpCiAgICAgXHNhIHVybCgpLCB1cmxDaGFuZ2VkKCkKICovCiAKLSNp
ZiBRVF9WRVJTSU9OIDwgMHgwNDA0MDAgJiYgIWRlZmluZWQocWRvYykKLXZvaWQgUVdlYlZpZXc6
OmxvYWQoY29uc3QgUVdlYk5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0KQotI2Vsc2UKIHZvaWQgUVdl
YlZpZXc6OmxvYWQoY29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0LAogICAgICAgICAgICAg
ICAgICAgICBRTmV0d29ya0FjY2Vzc01hbmFnZXI6Ok9wZXJhdGlvbiBvcGVyYXRpb24sCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFFCeXRlQXJyYXkgJmJvZHkpCi0jZW5kaWYKIHsKLSAgICBw
YWdlKCktPm1haW5GcmFtZSgpLT5sb2FkKHJlcXVlc3QKLSNpZiBRVF9WRVJTSU9OID49IDB4MDQw
NDAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIG9wZXJhdGlvbiwgYm9keQotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgcGFnZSgpLT5tYWluRnJh
bWUoKS0+bG9hZChyZXF1ZXN0LCBvcGVyYXRpb24sIGJvZHkpOwogfQogCiAvKiEKQEAgLTYzNiw3
ICs2MjgsNiBAQCBib29sIFFXZWJWaWV3OjpldmVudChRRXZlbnQgKmUpCiAgICAgICAgIGlmIChl
LT50eXBlKCkgPT0gUUV2ZW50OjpTaG9ydGN1dE92ZXJyaWRlKSB7CiAgICAgICAgICAgICBkLT5w
YWdlLT5ldmVudChlKTsKICNpZm5kZWYgUVRfTk9fQ1VSU09SCi0jaWYgUVRfVkVSU0lPTiA+PSAw
eDA0MDQwMAogICAgICAgICB9IGVsc2UgaWYgKGUtPnR5cGUoKSA9PSBRRXZlbnQ6OkN1cnNvckNo
YW5nZSkgewogICAgICAgICAgICAgLy8gQW4gdW5zZXRDdXJzb3Igd2lsbCBzZXQgdGhlIGN1cnNv
ciB0byBRdDo6QXJyb3dDdXJzb3IuCiAgICAgICAgICAgICAvLyBUaHVzIHRoaXMgY3Vyc29yIGNo
YW5nZSBtaWdodCBiZSBhIFFXaWRnZXQ6OnVuc2V0Q3Vyc29yKCkKQEAgLTY0OSw3ICs2NDAsNiBA
QCBib29sIFFXZWJWaWV3OjpldmVudChRRXZlbnQgKmUpCiAgICAgICAgICAgICBpZiAoY3Vyc29y
KCkuc2hhcGUoKSA9PSBRdDo6QXJyb3dDdXJzb3IpCiAgICAgICAgICAgICAgICAgZC0+cGFnZS0+
ZC0+Y2xpZW50LT5yZXNldEN1cnNvcigpOwogI2VuZGlmCi0jZW5kaWYKICAgICAgICAgfSBlbHNl
IGlmIChlLT50eXBlKCkgPT0gUUV2ZW50OjpMZWF2ZSkKICAgICAgICAgICAgIGQtPnBhZ2UtPmV2
ZW50KGUpOwogICAgIH0KSW5kZXg6IFdlYktpdC9xdC9BcGkvcXdlYnZpZXcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvQXBpL3F3ZWJ2aWV3LmgJKHJldmlzaW9uIDUxMDYyKQorKysgV2ViS2l0
L3F0L0FwaS9xd2Vidmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw3IEBACiAjaW5j
bHVkZSA8UXRHdWkvcWljb24uaD4KICNpbmNsdWRlIDxRdEd1aS9xcGFpbnRlci5oPgogI2luY2x1
ZGUgPFF0Q29yZS9xdXJsLmg+Ci0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogI2luY2x1ZGUg
PFF0TmV0d29yay9xbmV0d29ya2FjY2Vzc21hbmFnZXIuaD4KLSNlbmRpZgogCiBRVF9CRUdJTl9O
QU1FU1BBQ0UKIGNsYXNzIFFOZXR3b3JrUmVxdWVzdDsKQEAgLTY2LDEzICs2NCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFBhZ2UoUVdlYlBhZ2UqIHBhZ2UpOwogCiAgICAgdm9pZCBsb2FkKGNv
bnN0IFFVcmwmIHVybCk7Ci0jaWYgUVRfVkVSU0lPTiA8IDB4MDQwNDAwICYmICFkZWZpbmVkKHFk
b2MpCi0gICAgdm9pZCBsb2FkKGNvbnN0IFFXZWJOZXR3b3JrUmVxdWVzdCYgcmVxdWVzdCk7Ci0j
ZWxzZQogICAgIHZvaWQgbG9hZChjb25zdCBRTmV0d29ya1JlcXVlc3QmIHJlcXVlc3QsCiAgICAg
ICAgICAgICAgIFFOZXR3b3JrQWNjZXNzTWFuYWdlcjo6T3BlcmF0aW9uIG9wZXJhdGlvbiA9IFFO
ZXR3b3JrQWNjZXNzTWFuYWdlcjo6R2V0T3BlcmF0aW9uLAogICAgICAgICAgICAgICBjb25zdCBR
Qnl0ZUFycmF5ICZib2R5ID0gUUJ5dGVBcnJheSgpKTsKLSNlbmRpZgogICAgIHZvaWQgc2V0SHRt
bChjb25zdCBRU3RyaW5nJiBodG1sLCBjb25zdCBRVXJsJiBiYXNlVXJsID0gUVVybCgpKTsKICAg
ICB2b2lkIHNldENvbnRlbnQoY29uc3QgUUJ5dGVBcnJheSYgZGF0YSwgY29uc3QgUVN0cmluZyYg
bWltZVR5cGUgPSBRU3RyaW5nKCksIGNvbnN0IFFVcmwmIGJhc2VVcmwgPSBRVXJsKCkpOwogCklu
ZGV4OiBXZWJLaXQvcXQvUXRMYXVuY2hlci9tYWluLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvUXRMYXVuY2hlci9tYWluLmNwcAkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJLaXQvcXQvUXRM
YXVuY2hlci9tYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1
ZGUgPFF0R3VpPgogI2luY2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDxRdE5ldHdvcmsvUU5ldHdv
cmtQcm94eT4KLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAwICYmICFkZWZpbmVkKFFUX05PX1BS
SU5URVIpCisjaWYgIWRlZmluZWQoUVRfTk9fUFJJTlRFUikKICNpbmNsdWRlIDxRUHJpbnRQcmV2
aWV3RGlhbG9nPgogI2VuZGlmCiAKQEAgLTIxMiw3ICsyMTIsNyBAQCBwcm90ZWN0ZWQgc2xvdHM6
CiAgICAgfQogCiAgICAgdm9pZCBwcmludCgpIHsKLSNpZiBRVF9WRVJTSU9OID49IDB4MDQwNDAw
ICYmICFkZWZpbmVkKFFUX05PX1BSSU5URVIpCisjaWYgIWRlZmluZWQoUVRfTk9fUFJJTlRFUikK
ICAgICAgICAgUVByaW50UHJldmlld0RpYWxvZyBkbGcodGhpcyk7CiAgICAgICAgIGNvbm5lY3Qo
JmRsZywgU0lHTkFMKHBhaW50UmVxdWVzdGVkKFFQcmludGVyICopKSwKICAgICAgICAgICAgICAg
ICB2aWV3LCBTTE9UKHByaW50KFFQcmludGVyICopKSk7CkBAIC0zMTIsOSArMzEyLDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICBRTWVudSAqZmlsZU1lbnUgPSBtZW51QmFyKCktPmFkZE1lbnUoIiZG
aWxlIik7CiAgICAgICAgIFFBY3Rpb24gKm5ld1dpbmRvdyA9IGZpbGVNZW51LT5hZGRBY3Rpb24o
Ik5ldyBXaW5kb3ciLCB0aGlzLCBTTE9UKG5ld1dpbmRvdygpKSk7Ci0jaWYgUVRfVkVSU0lPTiA+
PSAweDA0MDQwMAogICAgICAgICBmaWxlTWVudS0+YWRkQWN0aW9uKHRyKCJQcmludCIpLCB0aGlz
LCBTTE9UKHByaW50KCkpLCBRS2V5U2VxdWVuY2U6OlByaW50KTsKLSNlbmRpZgogICAgICAgICBR
QWN0aW9uKiBzY3JlZW5zaG90ID0gZmlsZU1lbnUtPmFkZEFjdGlvbigiU2NyZWVuc2hvdCIsIHRo
aXMsIFNMT1Qoc2NyZWVuc2hvdCgpKSk7CiAgICAgICAgIGZpbGVNZW51LT5hZGRBY3Rpb24oIkNs
b3NlIiwgdGhpcywgU0xPVChjbG9zZSgpKSk7CiAKQEAgLTUwNyw5ICs1MDUsNyBAQCBpbnQgbWFp
bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgUVdlYlNldHRpbmdzOjpzZXRNYXhpbXVtUGFn
ZXNJbkNhY2hlKDQpOwogCiAgICAgYXBwLnNldEFwcGxpY2F0aW9uTmFtZSgiUXRMYXVuY2hlciIp
OwotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKICAgICBhcHAuc2V0QXBwbGljYXRpb25WZXJz
aW9uKCIwLjEiKTsKLSNlbmRpZgogCiAgICAgUVdlYlNldHRpbmdzOjpzZXRPYmplY3RDYWNoZUNh
cGFjaXRpZXMoKDE2KjEwMjQqMTAyNCkgLyA4LCAoMTYqMTAyNCoxMDI0KSAvIDgsIDE2KjEwMjQq
MTAyNCk7CiAKSW5kZXg6IFdlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRRdC5jcHAJKHJldmlzaW9uIDUxMDYyKQorKysgV2ViS2l0L3F0L1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjks
MTAgQEAKIAogI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UURlYnVnPgot
I2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKICNpbmNsdWRlIDxRR3JhcGhpY3NTY2VuZT4KICNp
bmNsdWRlIDxRR3JhcGhpY3NXaWRnZXQ+CiAjaW5jbHVkZSA8UU5ldHdvcmtSZXF1ZXN0PgogI2lu
Y2x1ZGUgPFFOZXR3b3JrUmVwbHk+Ci0jZWxzZQotI2luY2x1ZGUgInF3ZWJuZXR3b3JraW50ZXJm
YWNlX3AuaCIKLSNlbmRpZgogI2luY2x1ZGUgInF3ZWJoaXN0b3J5X3AuaCIKIAogc3RhdGljIGJv
b2wgZHVtcEZyYW1lTG9hZGVyQ2FsbGJhY2tzID0gZmFsc2U7CkBAIC03ODEsNyArNzc3LDYgQEAg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyPgogCiB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50UXQ6OmRvd25sb2FkKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKQogewotI2lmIFFUX1ZFUlNJ
T04gPj0gMHgwNDA0MDAKICAgICBpZiAoIW1fd2ViRnJhbWUpCiAgICAgICAgIHJldHVybjsKIApA
QCAtNzk0LDcgKzc4OSw2IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6ZG93bmxvYWQoV2Vi
Q28KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVwbHktPmFib3J0KCk7CiAgICAgfQotI2Vu
ZGlmCiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRRdDo6YXNzaWduSWRlbnRpZmllclRvSW5p
dGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBXZWJDb3JlOjpEb2N1bWVudExv
YWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTk0Nywx
MSArOTQxLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZQogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0Fj
dGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBXZWJDb3JlOjpOYXZpZ2F0
aW9uQWN0aW9uJiBhY3Rpb24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGb3JtU3RhdGU+LCBjb25zdCBXZWJDb3JlOjpTdHJpbmcm
KQogewogICAgIFFfQVNTRVJUKG1fd2ViRnJhbWUpOwotI2lmIFFUX1ZFUlNJT04gPCAweDA0MDQw
MAotICAgIFFXZWJOZXR3b3JrUmVxdWVzdCByKHJlcXVlc3QpOwotI2Vsc2UKICAgICBRTmV0d29y
a1JlcXVlc3QgcihyZXF1ZXN0LnRvTmV0d29ya1JlcXVlc3QobV93ZWJGcmFtZSkpOwotI2VuZGlm
CiAgICAgUVdlYlBhZ2UqIHBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7CiAKICAgICBpZiAoIXBh
Z2UtPmQtPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KDAsIHIsIFFXZWJQYWdlOjpOYXZpZ2F0aW9u
VHlwZShhY3Rpb24udHlwZSgpKSkpIHsKQEAgLTk3MiwxMSArOTYyLDcgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudFF0OjpkaXNwYXRjaERlY2lkZQogdm9pZCBGcmFtZUxvYWRlckNsaWVudFF0Ojpk
aXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlv
biBmdW5jdGlvbiwgY29uc3QgV2ViQ29yZTo6TmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
Rm9ybVN0YXRlPikKIHsKICAgICBRX0FTU0VSVChtX3dlYkZyYW1lKTsKLSNpZiBRVF9WRVJTSU9O
IDwgMHgwNDA0MDAKLSAgICBRV2ViTmV0d29ya1JlcXVlc3QgcihyZXF1ZXN0KTsKLSNlbHNlCiAg
ICAgUU5ldHdvcmtSZXF1ZXN0IHIocmVxdWVzdC50b05ldHdvcmtSZXF1ZXN0KG1fd2ViRnJhbWUp
KTsKLSNlbmRpZgogICAgIFFXZWJQYWdlKnBhZ2UgPSBtX3dlYkZyYW1lLT5wYWdlKCk7CiAKICAg
ICBpZiAoIXBhZ2UtPmQtPmFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0KG1fd2ViRnJhbWUsIHIsIFFX
ZWJQYWdlOjpOYXZpZ2F0aW9uVHlwZShhY3Rpb24udHlwZSgpKSkpIHsKQEAgLTEwMDEsMTIgKzk4
NywxMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmRpc3BhdGNoVW5hYmxlCiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRRdDo6c3RhcnREb3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0jaWYgUVRfVkVSU0lPTiA+PSAweDA0MDQwMAogICAgIGlm
ICghbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZW1pdCBtX3dlYkZyYW1lLT5w
YWdlKCktPmRvd25sb2FkUmVxdWVzdGVkKHJlcXVlc3QudG9OZXR3b3JrUmVxdWVzdChtX3dlYkZy
YW1lKSk7Ci0jZW5kaWYKIH0KIAogUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnRR
dDo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LApAQCAtMTIyNiwxMyArMTIxMCwxMSBAQCBQ
YXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRRdDo6CiAjZW5kaWYgLy8gUVRfTk9f
U1RZTEVfU1RZTEVTSEVFVAogICAgIH0KIAotI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDA0MDAKICAg
ICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgICAgIFFXZWJQbHVnaW5GYWN0b3J5KiBmYWN0
b3J5ID0gbV93ZWJGcmFtZS0+cGFnZSgpLT5wbHVnaW5GYWN0b3J5KCk7CiAgICAgICAgICAgICBp
ZiAoZmFjdG9yeSkKICAgICAgICAgICAgICAgICBvYmplY3QgPSBmYWN0b3J5LT5jcmVhdGUobWlt
ZVR5cGUsIHF1cmwsIHBhcmFtcywgdmFsdWVzKTsKICAgICAgICAgfQotI2VuZGlmCiAKICAgICAg
ICAgaWYgKG9iamVjdCkgewogICAgICAgICAgICAgUVdpZGdldCogd2lkZ2V0ID0gcW9iamVjdF9j
YXN0PFFXaWRnZXQqPihvYmplY3QpOwpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJL
aXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0x
MS0xNiAgTGFzemxvIEdvbWJvcyAgPGxhc3psby4xLmdvbWJvc0Bub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBSZW1vdmUgc3Vw
cG9ydCBmb3IgUXQgdjQuMyBvciBvbGRlciB2ZXJzaW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk0NjkKKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybzoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9J
bWFnZURpZmYucHJvOgorCiAyMDA5LTExLTE2ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0aCBEYWtpbi4KSW5kZXg6IFdlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8JKHJldmlz
aW9uIDUxMDYyKQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw0IEBAIHVuaXg6IW1hYyB7CiAgICAg
UU1BS0VfUlBBVEhESVIgPSAkJE9VVFBVVF9ESVIvbGliICQkUU1BS0VfUlBBVEhESVIKIH0KIAot
bGVzc1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNCkgewotICAgIERFRklORVMgKz0gUVRfQkVHSU5f
TkFNRVNQQUNFPSIiIFFUX0VORF9OQU1FU1BBQ0U9IiIKLX0KLQogREVGSU5FUys9VVNFX1NZU1RF
TV9NQUxMT0MKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0ltYWdlRGlmZi5w
cm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvSW1hZ2VEaWZm
LnBybwkocmV2aXNpb24gNTEwNjIpCisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9J
bWFnZURpZmYucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMywzIEBAIHVuaXg6IW1hYyB7
CiAgICAgUU1BS0VfUlBBVEhESVIgPSAkJE9VVFBVVF9ESVIvbGliICQkUU1BS0VfUlBBVEhESVIK
IH0KIAotbGVzc1RoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNCkgewotICAgIERFRklORVMgKz0gUVRf
QkVHSU5fTkFNRVNQQUNFPSIiIFFUX0VORF9OQU1FU1BBQ0U9IiIKLX0K
</data>

          </attachment>
      

    </bug>

</bugzilla>