<?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>210922</bug_id>
          
          <creation_ts>2020-04-23 10:19:34 -0700</creation_ts>
          <short_desc>Return BigInt32 whenever we can</short_desc>
          <delta_ts>2020-04-27 14:56:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=211096</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>jsbell</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1644829</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-23 10:19:34 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645412</commentid>
    <comment_count>1</comment_count>
      <attachid>397514</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-24 14:57:16 -0700</bug_when>
    <thetext>Created attachment 397514
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645442</commentid>
    <comment_count>2</comment_count>
      <attachid>397523</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-24 15:53:40 -0700</bug_when>
    <thetext>Created attachment 397523
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645483</commentid>
    <comment_count>3</comment_count>
      <attachid>397523</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-24 17:04:36 -0700</bug_when>
    <thetext>Comment on attachment 397523
patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:555
&gt; +        } else if (node-&gt;binaryUseKind() == HeapBigIntUse) {

Use `node-&gt;isBinaryUseKind(HeapBigIntUse)`.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:560
&gt; +        } else if (node-&gt;binaryUseKind() == AnyBigIntUse)

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:750
&gt; +        if (node-&gt;binaryUseKind() == HeapBigIntUse) {

Use `node-&gt;isBinaryUseKind(HeapBigIntUse)`.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:755
&gt; +        } else if (node-&gt;binaryUseKind() == AnyBigIntUse || node-&gt;binaryUseKind() == BigInt32Use)

Use `node-&gt;isBinaryUseKind(AnyBigIntUse) || node-&gt;isBinaryUseKind(BigInt32Use)`.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1024
&gt; +        if (node-&gt;binaryUseKind() == HeapBigIntUse) {

Use `node-&gt;isBinaryUseKind(HeapBigIntUse)`.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1029
&gt; +        } else if (node-&gt;binaryUseKind() == AnyBigIntUse || node-&gt;binaryUseKind() == BigInt32Use)

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1040
&gt; +        if (node-&gt;binaryUseKind() == HeapBigIntUse) {

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1045
&gt; +        } else if (node-&gt;binaryUseKind() == AnyBigIntUse || node-&gt;binaryUseKind() == BigInt32Use)

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1109
&gt; +        if (node-&gt;binaryUseKind() == HeapBigIntUse) {

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1114
&gt; +        } else if (node-&gt;binaryUseKind() == AnyBigIntUse || node-&gt;binaryUseKind() == BigInt32Use)

Ditto.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3748
&gt; +    if (node-&gt;binaryUseKind() == HeapBigIntUse) {

`node-&gt;isBinaryUseKind(HeapBigIntUse)` would be better.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests (OOPS!).

Just remove it. This is already covered by existing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645488</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-24 17:36:03 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/260683/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645490</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-24 17:37:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/62351393&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397514</attachid>
            <date>2020-04-24 14:57:16 -0700</date>
            <delta_ts>2020-04-24 15:53:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>69382</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjA2NzEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDMwIEBACisyMDIwLTA0LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldHVybiBCaWdJbnQzMiB3aGVuZXZlciB3ZSBjYW4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDkyMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtz
L3N1bnNwaWRlci1zaGExLWJpZy1pbnQuanM6IEFkZGVkLgorICAgICAgICAoaGV4X3NoYTEpOgor
ICAgICAgICAoYjY0X3NoYTEpOgorICAgICAgICAoc3RyX3NoYTEpOgorICAgICAgICAoaGV4X2ht
YWNfc2hhMSk6CisgICAgICAgIChiNjRfaG1hY19zaGExKToKKyAgICAgICAgKHN0cl9obWFjX3No
YTEpOgorICAgICAgICAoYmlnSW50VG9JbnQzMik6CisgICAgICAgIChzaGExX3ZtX3Rlc3QpOgor
ICAgICAgICAoY29yZV9zaGExKToKKyAgICAgICAgKHNoYTFfZnQpOgorICAgICAgICAoc2hhMV9r
dCk6CisgICAgICAgIChjb3JlX2htYWNfc2hhMSk6CisgICAgICAgIChzYWZlX2FkZCk6CisgICAg
ICAgIChyb2wpOgorICAgICAgICAoc3RyMmJpbmIpOgorICAgICAgICAoYmluYjJoZXgpOgorICAg
ICAgICAoYmluYjJiNjQpOgorICAgICAgICAocnVuKToKKwogMjAyMC0wNC0yNCAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIERGRyBjb21wYXJlIHNo
b3VsZCBzcGVjdWxhdGUgQmlnSW50IHdlbGwKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L3N1bnNwaWRlci1zaGExLWJpZy1pbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2Jl
bmNobWFya3Mvc3Vuc3BpZGVyLXNoYTEtYmlnLWludC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9zdW5zcGlkZXItc2hhMS1iaWctaW50LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9u
IG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0xLCBhcyBkZWZpbmVkCisgKiBpbiBG
SVBTIFBVQiAxODAtMQorICogVmVyc2lvbiAyLjFhIENvcHlyaWdodCBQYXVsIEpvaG5zdG9uIDIw
MDAgLSAyMDAyLgorICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBl
cnQsIFlkbmFyLCBMb3N0aW5ldAorICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNl
CisgKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgZGV0YWlscy4KKyAq
LworCisvKgorICogQ29uZmlndXJhYmxlIHZhcmlhYmxlcy4gWW91IG1heSBuZWVkIHRvIHR3ZWFr
IHRoZXNlIHRvIGJlIGNvbXBhdGlibGUgd2l0aAorICogdGhlIHNlcnZlci1zaWRlLCBidXQgdGhl
IGRlZmF1bHRzIHdvcmsgaW4gbW9zdCBjYXNlcy4KKyAqLwordmFyIGhleGNhc2UgPSAwbjsgIC8q
IGhleCBvdXRwdXQgZm9ybWF0LiAwIC0gbG93ZXJjYXNlOyAxIC0gdXBwZXJjYXNlICAgICAgICAq
LwordmFyIGI2NHBhZCAgPSAiIjsgLyogYmFzZS02NCBwYWQgY2hhcmFjdGVyLiAiPSIgZm9yIHN0
cmljdCBSRkMgY29tcGxpYW5jZSAgICovCit2YXIgY2hyc3ogICA9IDg7ICAvKiBiaXRzIHBlciBp
bnB1dCBjaGFyYWN0ZXIuIDggLSBBU0NJSTsgMTYgLSBVbmljb2RlICAgICAgKi8KKworLyoKKyAq
IFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHlvdSdsbCB1c3VhbGx5IHdhbnQgdG8gY2FsbAorICog
VGhleSB0YWtlIHN0cmluZyBhcmd1bWVudHMgYW5kIHJldHVybiBlaXRoZXIgaGV4IG9yIGJhc2Ut
NjQgZW5jb2RlZCBzdHJpbmdzCisgKi8KK2Z1bmN0aW9uIGhleF9zaGExKHMpe3JldHVybiBiaW5i
MmhleChjb3JlX3NoYTEoc3RyMmJpbmIocykscy5sZW5ndGggKiBjaHJzeikpO30KK2Z1bmN0aW9u
IGI2NF9zaGExKHMpe3JldHVybiBiaW5iMmI2NChjb3JlX3NoYTEoc3RyMmJpbmIocykscy5sZW5n
dGggKiBjaHJzeikpO30KK2Z1bmN0aW9uIHN0cl9zaGExKHMpe3JldHVybiBiaW5iMnN0cihjb3Jl
X3NoYTEoc3RyMmJpbmIocykscy5sZW5ndGggKiBjaHJzeikpO30KK2Z1bmN0aW9uIGhleF9obWFj
X3NoYTEoa2V5LCBkYXRhKXsgcmV0dXJuIGJpbmIyaGV4KGNvcmVfaG1hY19zaGExKGtleSwgZGF0
YSkpO30KK2Z1bmN0aW9uIGI2NF9obWFjX3NoYTEoa2V5LCBkYXRhKXsgcmV0dXJuIGJpbmIyYjY0
KGNvcmVfaG1hY19zaGExKGtleSwgZGF0YSkpO30KK2Z1bmN0aW9uIHN0cl9obWFjX3NoYTEoa2V5
LCBkYXRhKXsgcmV0dXJuIGJpbmIyc3RyKGNvcmVfaG1hY19zaGExKGtleSwgZGF0YSkpO30KKwor
ZnVuY3Rpb24gYmlnSW50VG9JbnQzMihiKSB7CisgICAgcmV0dXJuIHBhcnNlSW50KGIudG9TdHJp
bmcoKSwgMTApOworfQorCisvKgorICogUGVyZm9ybSBhIHNpbXBsZSBzZWxmLXRlc3QgdG8gc2Vl
IGlmIHRoZSBWTSBpcyB3b3JraW5nCisgKi8KK2Z1bmN0aW9uIHNoYTFfdm1fdGVzdCgpCit7Cisg
ICAgcmV0dXJuIGhleF9zaGExKCJhYmMiKSA9PSAiYTk5OTNlMzY0NzA2ODE2YWJhM2UyNTcxNzg1
MGMyNmM5Y2QwZDg5ZCI7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIFNIQS0xIG9mIGFuIGFy
cmF5IG9mIGJpZy1lbmRpYW4gd29yZHMsIGFuZCBhIGJpdCBsZW5ndGgKKyAqLworLy94ID09IHN0
cgorLy9sZW4gPT0gaTMyCitmdW5jdGlvbiBjb3JlX3NoYTEoeCwgbGVuKQoreworICAgIC8qIGFw
cGVuZCBwYWRkaW5nICovCisKKyAgICBpZiAoeFtsZW4gPj4gNV0gPT09IHVuZGVmaW5lZCkKKyAg
ICAgICAgeFtsZW4gPj4gNV0gPSAwbjsKKyAgICBpZiAoeFsoKGxlbiArIDY0ID4+IDkpIDw8IDQp
ICsgMTVdID09PSB1bmRlZmluZWQpCisgICAgICAgIHhbKChsZW4gKyA2NCA+PiA5KSA8PCA0KSAr
IDE1XSA9IDBuOworCisgICAgeFtsZW4gPj4gNV0gfD0gMHg4MG4gPDwgKDI0biAtIEJpZ0ludChs
ZW4pICUgMzJuKTsKKyAgICB4WygobGVuICsgNjQgPj4gOSkgPDwgNCkgKyAxNV0gPSBCaWdJbnQo
bGVuKTsKKworICAgIHZhciB3ID0gQXJyYXkoODApOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
dy5sZW5ndGg7ICsraSkgeworICAgICAgICB3W2ldID0gMG47CisgICAgfQorICAgIHZhciBhID0g
MTczMjU4NDE5M247CisgICAgdmFyIGIgPSAtMjcxNzMzODc5bjsKKyAgICB2YXIgYyA9IC0xNzMy
NTg0MTk0bjsKKyAgICB2YXIgZCA9ICAyNzE3MzM4NzhuOworICAgIHZhciBlID0gLTEwMDk1ODk3
NzZuOworCisgICAgZm9yKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KQorICAgIHsK
KyAgICAgICAgdmFyIG9sZGEgPSBhOworICAgICAgICB2YXIgb2xkYiA9IGI7CisgICAgICAgIHZh
ciBvbGRjID0gYzsKKyAgICAgICAgdmFyIG9sZGQgPSBkOworICAgICAgICB2YXIgb2xkZSA9IGU7
CisKKyAgICAgICAgZm9yKHZhciBqID0gMDsgaiA8IDgwOyBqKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChqIDwgMTYpIHdbal0gPSB4W2kgKyBqXSB8fCAwbjsKKyAgICAgICAgICAgIGVs
c2Ugd1tqXSA9IHJvbCgod1tqLTNdIHx8IDBuKSBeICh3W2otOF0gfHwgMG4pIF4gKHdbai0xNF0g
fHwgMG4pIF4gKHdbai0xNl0gfHwgMG4pLCAxKTsKKyAgICAgICAgICAgIHZhciB0ID0gc2FmZV9h
ZGQoc2FmZV9hZGQocm9sKGEsIDUpLCBzaGExX2Z0KGosIGIsIGMsIGQpKSwKKyAgICAgICAgICAg
ICAgICBzYWZlX2FkZChzYWZlX2FkZChlLCB3W2pdKSwgc2hhMV9rdChCaWdJbnQoaikpKSk7Cisg
ICAgICAgICAgICBlID0gZDsKKyAgICAgICAgICAgIGQgPSBjOworCisgICAgICAgICAgICBjID0g
cm9sKGIsIDMwKTsKKyAgICAgICAgICAgIGIgPSBhOworICAgICAgICAgICAgYSA9IHQ7CisgICAg
ICAgIH0KKworICAgICAgICBhID0gc2FmZV9hZGQoYSwgb2xkYSk7CisgICAgICAgIGIgPSBzYWZl
X2FkZChiLCBvbGRiKTsKKyAgICAgICAgYyA9IHNhZmVfYWRkKGMsIG9sZGMpOworICAgICAgICBk
ID0gc2FmZV9hZGQoZCwgb2xkZCk7CisgICAgICAgIGUgPSBzYWZlX2FkZChlLCBvbGRlKTsKKyAg
ICB9CisgICAgcmV0dXJuIEFycmF5KGEsIGIsIGMsIGQsIGUpOworCit9CisKKy8qCisgKiBQZXJm
b3JtIHRoZSBhcHByb3ByaWF0ZSB0cmlwbGV0IGNvbWJpbmF0aW9uIGZ1bmN0aW9uIGZvciB0aGUg
Y3VycmVudAorICogaXRlcmF0aW9uCisgKi8KK2Z1bmN0aW9uIHNoYTFfZnQodCwgYiwgYywgZCkK
K3sKKyAgICBpZih0IDwgMjApIHJldHVybiAoYiAmIGMpIHwgKCh+YikgJiBkKTsKKyAgICBpZih0
IDwgNDApIHJldHVybiBiIF4gYyBeIGQ7CisgICAgaWYodCA8IDYwKSByZXR1cm4gKGIgJiBjKSB8
IChiICYgZCkgfCAoYyAmIGQpOworICAgIHJldHVybiBiIF4gYyBeIGQ7Cit9CisKKy8qCisgKiBE
ZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGFkZGl0aXZlIGNvbnN0YW50IGZvciB0aGUgY3VycmVu
dCBpdGVyYXRpb24KKyAqLworZnVuY3Rpb24gc2hhMV9rdCh0KQoreworICAgIHJldHVybiAodCA8
IDIwbikgPyAgMTUxODUwMDI0OW4gOiAodCA8IDQwbikgPyAgMTg1OTc3NTM5M24gOgorICAgICAg
ICAodCA8IDYwbikgPyAtMTg5NDAwNzU4OG4gOiAtODk5NDk3NTE0bjsKK30KKworLyoKKyAqIENh
bGN1bGF0ZSB0aGUgSE1BQy1TSEExIG9mIGEga2V5IGFuZCBzb21lIGRhdGEKKyAqLworZnVuY3Rp
b24gY29yZV9obWFjX3NoYTEoa2V5LCBkYXRhKQoreworICAgIHRocm93IG5ldyBFcnJvcigiQmFk
IikKKyAgICB2YXIgYmtleSA9IHN0cjJiaW5iKGtleSk7CisgICAgaWYoYmtleS5sZW5ndGggPiAx
NikgYmtleSA9IGNvcmVfc2hhMShia2V5LCBrZXkubGVuZ3RoICogY2hyc3opOworCisgICAgdmFy
IGlwYWQgPSBBcnJheSgxNiksIG9wYWQgPSBBcnJheSgxNik7CisgICAgZm9yKHZhciBpID0gMDsg
aSA8IDE2OyBpKyspCisgICAgeworICAgICAgICBpcGFkW2ldID0gYmtleVtpXSBeIDB4MzYzNjM2
MzZuOworICAgICAgICBvcGFkW2ldID0gYmtleVtpXSBeIDB4NUM1QzVDNUNuOworICAgIH0KKwor
ICAgIHZhciBoYXNoID0gY29yZV9zaGExKGlwYWQuY29uY2F0KHN0cjJiaW5iKGRhdGEpKSwgNTEy
ICsgZGF0YS5sZW5ndGggKiBjaHJzeik7CisgICAgcmV0dXJuIGNvcmVfc2hhMShvcGFkLmNvbmNh
dChoYXNoKSwgNTEyICsgMTYwKTsKK30KKworLyoKKyAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcg
YXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHkKKyAqIHRvIHdv
cmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuCisgKi8KKy8vIGJpZ2ludHMK
K2Z1bmN0aW9uIHNhZmVfYWRkKHgsIHkpCit7CisgICAgdmFyIGxzdyA9ICh4ICYgMHhGRkZGbikg
KyAoeSAmIDB4RkZGRm4pOworICAgIHZhciBtc3cgPSAoKHggPj4gMTZuKSAmIDB4RkZGRm4pICsg
KCh5ID4+IDE2bikgJiAweEZGRkZuKSArICgobHN3ID4+IDE2bikgJiAweEZGRkZuKTsKKyAgICBs
ZXQgciA9IChtc3cgPDwgMTZuKSB8IChsc3cgJiAweEZGRkZuKTsKKyAgICByZXR1cm4gcjsKK30K
KworLyoKKyAqIEJpdHdpc2Ugcm90YXRlIGEgMzItYml0IG51bWJlciB0byB0aGUgbGVmdC4KKyAq
LworLy8gYmlnaW50cyBhcmd1bWVudHMKK2Z1bmN0aW9uIHJvbChudW0sIGNudCkKK3sKKyAgICBs
ZXQgcmhzID0gKG51bSA+PiAoMzJuIC0gQmlnSW50KGNudCkpKTsKKyAgICBsZXQgbWFzayA9IEJp
Z0ludCgoMSA8PCBjbnQpIC0gMSk7CisgICAgcmhzID0gcmhzICYgbWFzazsKKyAgICBsZXQgcmVz
dWx0ID0gKChudW0gPDwgQmlnSW50KGNudCkpICYgMHhGRkZGRkZGRm4pIHwgcmhzOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIDgtYml0IG9yIDE2LWJpdCBzdHJp
bmcgdG8gYW4gYXJyYXkgb2YgYmlnLWVuZGlhbiB3b3JkcworICogSW4gOC1iaXQgZnVuY3Rpb24s
IGNoYXJhY3RlcnMgPjI1NSBoYXZlIHRoZWlyIGhpLWJ5dGUgc2lsZW50bHkgaWdub3JlZC4KKyAq
LworZnVuY3Rpb24gc3RyMmJpbmIoc3RyKQoreworICAgIHZhciBiaW4gPSBBcnJheSgpOworICAg
IHZhciBtYXNrID0gKCgxIDw8IGNocnN6KSAtIDEpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c3RyLmxlbmd0aCAqIGNocnN6OyBpICs9IGNocnN6KSB7CisgICAgICAgIGlmIChiaW5baT4+NV0g
PT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGJpbltpPj41XSA9IDBuOworICAgICAgICBiaW5b
aT4+NV0gfD0gQmlnSW50KChzdHIuY2hhckNvZGVBdChpIC8gY2hyc3opICYgbWFzaykgPDwgKDMy
IC0gY2hyc3ogLSBpJTMyKSk7CisgICAgfQorICAgIHJldHVybiBiaW47Cit9CisKKy8qCisgKiBD
b252ZXJ0IGFuIGFycmF5IG9mIGJpZy1lbmRpYW4gd29yZHMgdG8gYSBzdHJpbmcKKyAqLworCisv
KgorICogQ29udmVydCBhbiBhcnJheSBvZiBiaWctZW5kaWFuIHdvcmRzIHRvIGEgaGV4IHN0cmlu
Zy4KKyAqLworZnVuY3Rpb24gYmluYjJoZXgoYmluYXJyYXkpCit7CisgICAgdmFyIGhleF90YWIg
PSBoZXhjYXNlID8gIjAxMjM0NTY3ODlBQkNERUYiIDogIjAxMjM0NTY3ODlhYmNkZWYiOworICAg
IHZhciBzdHIgPSAiIjsKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmluYXJyYXkubGVuZ3RoICog
NDsgaSsrKQorICAgIHsKKyAgICAgICAgc3RyICs9IGhleF90YWIuY2hhckF0KGJpZ0ludFRvSW50
MzIoKGJpbmFycmF5W2k+PjJdID4+IEJpZ0ludCgoMyAtIGklNCkqOCs0KSkgJiAweEZuKSkgKwor
ICAgICAgICAgICAgaGV4X3RhYi5jaGFyQXQoYmlnSW50VG9JbnQzMigoYmluYXJyYXlbaT4+Ml0g
Pj4gQmlnSW50KCgzIC0gaSU0KSo4KSkgJiAweEZuKSk7CisgICAgfQorICAgIHJldHVybiBzdHI7
Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIGFycmF5IG9mIGJpZy1lbmRpYW4gd29yZHMgdG8gYSBi
YXNlLTY0IHN0cmluZworICovCitmdW5jdGlvbiBiaW5iMmI2NChiaW5hcnJheSkKK3sKKyAgICB2
YXIgdGFiID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1
dnd4eXowMTIzNDU2Nzg5Ky8iOworICAgIHZhciBzdHIgPSAiIjsKKyAgICBmb3IodmFyIGkgPSAw
OyBpIDwgYmluYXJyYXkubGVuZ3RoICogNDsgaSArPSAzKQorICAgIHsKKyAgICAgICAgdmFyIHRy
aXBsZXQgPSAoKChiaW5hcnJheVtpICAgPj4gMl0gPj4gOCAqICgzIC0gIGkgICAlNCkpICYgMHhG
RikgPDwgMTYpCisgICAgICAgICAgICB8ICgoKGJpbmFycmF5W2krMSA+PiAyXSA+PiA4ICogKDMg
LSAoaSsxKSU0KSkgJiAweEZGKSA8PCA4ICkKKyAgICAgICAgICAgIHwgICgoYmluYXJyYXlbaSsy
ID4+IDJdID4+IDggKiAoMyAtIChpKzIpJTQpKSAmIDB4RkYpOworICAgICAgICBmb3IodmFyIGog
PSAwOyBqIDwgNDsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZihpICogOCArIGogKiA2
ID4gYmluYXJyYXkubGVuZ3RoICogMzIpIHN0ciArPSBiNjRwYWQ7CisgICAgICAgICAgICBlbHNl
IHN0ciArPSB0YWIuY2hhckF0KCh0cmlwbGV0ID4+IDYqKDMtaikpICYgMHgzRik7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHN0cjsKK30KKworCitmdW5jdGlvbiBydW4oKSB7CisgICAg
dmFyIHBsYWluVGV4dCA9CisiVHdvIGhvdXNlaG9sZHMsIGJvdGggYWxpa2UgaW4gZGlnbml0eSxc
blwKK0luIGZhaXIgVmVyb25hLCB3aGVyZSB3ZSBsYXkgb3VyIHNjZW5lLFxuXAorRnJvbSBhbmNp
ZW50IGdydWRnZSBicmVhayB0byBuZXcgbXV0aW55LFxuXAorV2hlcmUgY2l2aWwgYmxvb2QgbWFr
ZXMgY2l2aWwgaGFuZHMgdW5jbGVhbi5cblwKK0Zyb20gZm9ydGggdGhlIGZhdGFsIGxvaW5zIG9m
IHRoZXNlIHR3byBmb2VzXG5cCitBIHBhaXIgb2Ygc3Rhci1jcm9zcydkIGxvdmVycyB0YWtlIHRo
ZWlyIGxpZmU7XG5cCitXaG9sZSBtaXNhZHZlbnR1cmVkIHBpdGVvdXMgb3ZlcnRocm93c1xuXAor
RG8gd2l0aCB0aGVpciBkZWF0aCBidXJ5IHRoZWlyIHBhcmVudHMnIHN0cmlmZS5cblwKK1RoZSBm
ZWFyZnVsIHBhc3NhZ2Ugb2YgdGhlaXIgZGVhdGgtbWFyaydkIGxvdmUsXG5cCitBbmQgdGhlIGNv
bnRpbnVhbmNlIG9mIHRoZWlyIHBhcmVudHMnIHJhZ2UsXG5cCitXaGljaCwgYnV0IHRoZWlyIGNo
aWxkcmVuJ3MgZW5kLCBub3VnaHQgY291bGQgcmVtb3ZlLFxuXAorSXMgbm93IHRoZSB0d28gaG91
cnMnIHRyYWZmaWMgb2Ygb3VyIHN0YWdlO1xuXAorVGhlIHdoaWNoIGlmIHlvdSB3aXRoIHBhdGll
bnQgZWFycyBhdHRlbmQsXG5cCitXaGF0IGhlcmUgc2hhbGwgbWlzcywgb3VyIHRvaWwgc2hhbGwg
c3RyaXZlIHRvIG1lbmQuIjsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDw0OyBpKyspIHsKKyAg
ICAgICAgcGxhaW5UZXh0ICs9IHBsYWluVGV4dDsKKyAgICB9CisKKyAgICB2YXIgc2hhMU91dHB1
dCA9IGhleF9zaGExKHBsYWluVGV4dCk7CisKKyAgICB2YXIgZXhwZWN0ZWQgPSAiMjUyNGQyNjRk
ZWY3NGNjZTI0OThiZjExMmJlZGYwMGU2YzBiNzk2ZCI7CisgICAgaWYgKHNoYTFPdXRwdXQgIT0g
ZXhwZWN0ZWQpCisgICAgICAgIHRocm93ICJFUlJPUjogYmFkIHJlc3VsdDogZXhwZWN0ZWQgIiAr
IGV4cGVjdGVkICsgIiBidXQgZ290ICIgKyBzaGExT3V0cHV0OworfQorCisKK2xldCBzdGFydCA9
IERhdGUubm93KCk7Citmb3IgKGxldCBpID0gMDsgaSA8IDU7ICsraSkKKyAgICBydW4oKTsKKy8v
IHByaW50KCJiZW5jaG1hcmsgdGltZToiLCBEYXRlLm5vdygpIC0gc3RhcnQsICJtcyIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAxIEBACisy
MDIwLTA0LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dHVybiBCaWdJbnQzMiB3aGVuZXZlciB3ZSBjYW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgc28gb3VyIHJ1bnRpbWUg
ZnVuY3Rpb25zIGZvciBiaWcgaW50IG1hdGggb24gaGVhcAorICAgICAgICBiaWcgaW50cyBjb252
ZXJ0cyB0aGUgcmVzdWx0IHRvIGEgYmlnIGludCAzMiB3aGVuIHBvc3NpYmxlLgorICAgICAgICAK
KyAgICAgICAgVGhlIGluc3BpcmF0aW9uIGZvciB0aGlzIHBhdGNoIGNhbWUgZnJvbSBjb252ZXJ0
aW5nIFN1blNwaWRlcidzIHNoYTEgYmVuY2htYXJrIHRvCisgICAgICAgIHVzaW5nIGJpZyBpbnRz
LiBJIGZvdW5kIHRoYXQgdGhhdCBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBiaWcgaW50IDMy
CisgICAgICAgIHdhcyBhIH4zNSUgc2xvd2Rvd24gaGVyZS4gVGhpcyBwYXRjaCBzcGVlZHMgaXQg
dXAgYnkgODYlIGZyb20gVG9ULCBhbmQKKyAgICAgICAgMzYlIGZhc3RlciB0aGFuIGJlZm9yZSBi
aWcgaW50IDMyIHdhcyBpbnRyb2R1Y2VkLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlz
IHNvdW5kIGluIHRoZSBERkcvRlRMLCB3ZSBhcmUgY3VycmVudGx5IHJlcG9ydGluZyB0aGF0IGFs
bAorICAgICAgICBIZWFwQmlnSW50IG1hdGggb3BzIHJldHVybiBTcGVjQmlnSW50LCBpbnN0ZWFk
IG9mIFNwZWNIZWFwQmlnSW50LgorICAgICAgICBIb3dldmVyLCB3ZSB3YW50IHRvIGRvIGJldHRl
ciBpbiBhIGZvbGxvdyB1cC4gV2UgbmVlZCBzb21lIGtpbmQgb2YgcHJvZmlsaW5nCisgICAgICAg
IHN5c3RlbSB3aGVyZSB3ZSBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHNwZWN1bGF0ZSBpZiB0aGUg
cmVzdWx0IGlzIGJpZyBpbnQKKyAgICAgICAgMzIsIGEgaGVhcCBiaWcgaW50LCBvciBib3RoOgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTgyCisK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUJpdE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUJpdHdpc2VPcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZUxTaGlmdE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlQml0UlNoaWZ0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlRGl2KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTW9kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlUG93KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
anNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlQmlnSW50MzIpOgorICAgICAgICAqIHJ1
bnRpbWUvQmlnSW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0b0JpZ0ludCk6Cisg
ICAgICAgIChKU0M6OmNhbGxCaWdJbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAg
ICAgICogcnVudGltZS9KU0JpZ0ludC5jcHA6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBv
bmVudGlhdGVIZWFwKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5SGVhcCk6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpkaXZpZGVIZWFwKToKKyAgICAgICAgKEpTQzo6SlNCaWdJ
bnQ6OnVuYXJ5TWludXNIZWFwKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJlbWFpbmRlckhl
YXApOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6aW5jSGVhcCk6CisgICAgICAgIChKU0M6OkpT
QmlnSW50OjpkZWNIZWFwKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFkZEhlYXApOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6c3ViSGVhcCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpi
aXR3aXNlQW5kSGVhcCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlT3JIZWFwKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VYb3JIZWFwKToKKyAgICAgICAgKEpTQzo6
SlNCaWdJbnQ6OmxlZnRTaGlmdEhlYXApOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2lnbmVk
UmlnaHRTaGlmdEhlYXApOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZU5vdEhlYXAp
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGQpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6YWJzb2x1dGVTdWIpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cGFyc2VJbnQp
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6ZXhwb25lbnRpYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmRpdmlkZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp1bmFyeU1p
bnVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJlbWFpbmRlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjppbmMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU0JpZ0ludDo6ZGVjKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFkZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpzdWIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZUFuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
QmlnSW50OjpiaXR3aXNlT3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0
d2lzZVhvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpsZWZ0U2hpZnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlTm90KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmg6
CisgICAgICAgIChKU0M6OmpzQmlnSW50MzIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1
ZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6SlNWYWx1ZSk6CisgICAgICAgICog
cnVudGltZS9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6anNBZGRTbG93Q2FzZSk6Cisg
ICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3ViKToKKyAg
ICAgICAgKEpTQzo6anNNdWwpOgorICAgICAgICAoSlNDOjpqc0Rpdik6CisgICAgICAgIChKU0M6
OmpzSW5jKToKKyAgICAgICAgKEpTQzo6anNEZWMpOgorICAgICAgICAoSlNDOjpqc0JpdHdpc2VO
b3QpOgorICAgICAgICAoSlNDOjpzaGlmdCk6CisgICAgICAgIChKU0M6OmJpdHdpc2VCaW5hcnlP
cCk6CisKIDIwMjAtMDQtMjIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDb2NvYV0gQnVpbGQgd2l0aCBVQ2hhciBhcyBjaGFyMTZfdCBldmVuIGluIGJ1aWxkcyB0
aGF0IHVzZSBBcHBsZSdzIGludGVybmFsIFNESwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDI2MDU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjkwLDE1ICsyMjkwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25DcmUKICAgICBBU1NFUlQoYmlnSW50VmFsdWUuaXNIZWFwQmlnSW50KCkpOwog
ICAgIEpTQmlnSW50KiBiaWdJbnQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihiaWdJbnRWYWx1ZSk7CiAg
ICAgaWYgKCFiaWdJbnQtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgMCkpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQmlnSW50MzIoMCkpOwogICAgIGlmIChiaWdJbnQtPmxlbmd0aCgpID09IDEp
IHsKICAgICAgICAgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0ID0gYmlnSW50LT5kaWdpdCgwKTsKICAg
ICAgICAgaWYgKGJpZ0ludC0+c2lnbigpKSB7CiAgICAgICAgICAgICBpZiAoZGlnaXQgPD0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxpbnQ2NF90PihJTlQzMl9NSU4pKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SlNC
aWdJbnQzMiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXN0YXRpY19jYXN0PGludDY0X3Q+KGRpZ2l0
KSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQmlnSW50MzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oLXN0YXRpY19jYXN0PGludDY0X3Q+KGRpZ2l0KSkpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChkaWdpdCA8PSBJTlQzMl9NQVgpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6OkpTQmln
SW50MzIsIHN0YXRpY19jYXN0PGludDMyX3Q+KGRpZ2l0KSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihkaWdp
dCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiT3V0IG9mIHJhbmdlIG9mIEJpZ0ludDMyIl9zKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDI2MDU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDkgKzUw
OCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAjZWxzZQog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgotICAgICAg
ICB9IGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBIZWFwQmlnSW50VXNlKQot
ICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0hlYXBCaWdJbnQpOwotICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQW55QmlnSW50VXNlKQorICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBIZWFwQmlnSW50VXNl
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugd2lsbCB3YW50IGFuIGFyaXRobWV0aWMgbW9k
ZSBoZXJlIHRoYXQgYWxsb3dzIHVzIHRvIHNwZWN1bGF0ZSBvciBkaWN0YXRlCisgICAgICAgICAg
ICAvLyB0aGUgZm9ybWF0IG9mIG91ciByZXN1bHQ6CisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTgyCisgICAgICAgICAgICBzZXRUeXBl
Rm9yTm9kZShub2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gQW55QmlnSW50VXNlKQogICAgICAgICAgICAgc2V0VHlwZUZvck5v
ZGUobm9kZSwgU3BlY0JpZ0ludCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY2xvYmJl
cldvcmxkKCk7CkBAIC01NDksOSArNTUyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICNlbHNlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogI2VuZGlmCi0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgp
ID09IEhlYXBCaWdJbnRVc2UpCi0gICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVj
SGVhcEJpZ0ludCk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBB
bnlCaWdJbnRVc2UpCisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgpID09
IEhlYXBCaWdJbnRVc2UpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSB3aWxsIHdhbnQgYW4g
YXJpdGhtZXRpYyBtb2RlIGhlcmUgdGhhdCBhbGxvd3MgdXMgdG8gc3BlY3VsYXRlIG9yIGRpY3Rh
dGUKKyAgICAgICAgICAgIC8vIHRoZSBmb3JtYXQgb2Ygb3VyIHJlc3VsdDoKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA5ODIKKyAgICAg
ICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCaWdJbnQpOworICAgICAgICB9IGVsc2Ug
aWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBBbnlCaWdJbnRVc2UpCiAgICAgICAgICAgICBz
ZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQmlnSW50KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKQEAgLTc0MSw5ICs3NDcsMTIgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiAgICAgY2FzZSBWYWx1ZVN1YjoKICAgICBjYXNl
IFZhbHVlQWRkOiB7Ci0gICAgICAgIGlmIChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gSGVhcEJp
Z0ludFVzZSkKLSAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNIZWFwQmlnSW50
KTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEFueUJpZ0ludFVz
ZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQmlnSW50MzJVc2UpCisgICAgICAgIGlmIChu
b2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gSGVhcEJpZ0ludFVzZSkgeworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHdpbGwgd2FudCBhbiBhcml0aG1ldGljIG1vZGUgaGVyZSB0aGF0IGFsbG93cyB1
cyB0byBzcGVjdWxhdGUgb3IgZGljdGF0ZQorICAgICAgICAgICAgLy8gdGhlIGZvcm1hdCBvZiBv
dXIgcmVzdWx0OgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMDk4MgorICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEFueUJp
Z0ludFVzZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQmlnSW50MzJVc2UpCiAgICAgICAg
ICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQmlnSW50KTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmJpbmFyeVVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlKTsKQEAgLTk4Miw3ICs5OTEsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIHR5cGVPZkRvdWJsZUluY09yRGVjKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSGVhcEJpZ0ludFVzZToKLSAg
ICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNIZWFwQmlnSW50KTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSB3aWxsIHdhbnQgYW4gYXJpdGhtZXRpYyBtb2RlIGhlcmUgdGhhdCBh
bGxvd3MgdXMgdG8gc3BlY3VsYXRlIG9yIGRpY3RhdGUKKyAgICAgICAgICAgIC8vIHRoZSBmb3Jt
YXQgb2Ygb3VyIHJlc3VsdDoKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTA5ODIKKyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUs
IFNwZWNCaWdJbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQW55QmlnSW50
VXNlOgogICAgICAgICBjYXNlIEJpZ0ludDMyVXNlOgpAQCAtMTAwOSw5ICsxMDIxLDEyIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBIZWFw
QmlnSW50VXNlKQotICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0hlYXBCaWdJ
bnQpOwotICAgICAgICBlbHNlIGlmIChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQW55QmlnSW50
VXNlIHx8IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBCaWdJbnQzMlVzZSkKKyAgICAgICAgaWYg
KG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBIZWFwQmlnSW50VXNlKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugd2lsbCB3YW50IGFuIGFyaXRobWV0aWMgbW9kZSBoZXJlIHRoYXQgYWxsb3dz
IHVzIHRvIHNwZWN1bGF0ZSBvciBkaWN0YXRlCisgICAgICAgICAgICAvLyB0aGUgZm9ybWF0IG9m
IG91ciByZXN1bHQ6CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEwOTgyCisgICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVj
QmlnSW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQW55
QmlnSW50VXNlIHx8IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBCaWdJbnQzMlVzZSkKICAgICAg
ICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCaWdJbnQpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwpAQCAtMTAyMiw5ICsxMDM3LDEyIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogICAgIGNhc2UgVmFsdWVNdWw6
IHsKICAgICAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGNvZGUgbm90IHNoYXJlZCB3aXRoIFZh
bHVlU3ViPwotICAgICAgICBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEhlYXBCaWdJbnRV
c2UpCi0gICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSGVhcEJpZ0ludCk7Ci0g
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBBbnlCaWdJbnRVc2UgfHwg
bm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEJpZ0ludDMyVXNlKQorICAgICAgICBpZiAobm9kZS0+
YmluYXJ5VXNlS2luZCgpID09IEhlYXBCaWdJbnRVc2UpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSB3aWxsIHdhbnQgYW4gYXJpdGhtZXRpYyBtb2RlIGhlcmUgdGhhdCBhbGxvd3MgdXMgdG8g
c3BlY3VsYXRlIG9yIGRpY3RhdGUKKyAgICAgICAgICAgIC8vIHRoZSBmb3JtYXQgb2Ygb3VyIHJl
c3VsdDoKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTA5ODIKKyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCaWdJbnQp
OworICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBBbnlCaWdJbnRV
c2UgfHwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEJpZ0ludDMyVXNlKQogICAgICAgICAgICAg
c2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0JpZ0ludCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKCk7CkBAIC0xMDg4LDkgKzExMDYsMTIgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRE
aXZPcChub2RlKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlmIChub2RlLT5iaW5h
cnlVc2VLaW5kKCkgPT0gSGVhcEJpZ0ludFVzZSkKLSAgICAgICAgICAgIHNldFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNIZWFwQmlnSW50KTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNl
S2luZCgpID09IEFueUJpZ0ludFVzZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQmlnSW50
MzJVc2UpCisgICAgICAgIGlmIChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gSGVhcEJpZ0ludFVz
ZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHdpbGwgd2FudCBhbiBhcml0aG1ldGljIG1v
ZGUgaGVyZSB0aGF0IGFsbG93cyB1cyB0byBzcGVjdWxhdGUgb3IgZGljdGF0ZQorICAgICAgICAg
ICAgLy8gdGhlIGZvcm1hdCBvZiBvdXIgcmVzdWx0OgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDk4MgorICAgICAgICAgICAgc2V0VHlw
ZUZvck5vZGUobm9kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+Ymlu
YXJ5VXNlS2luZCgpID09IEFueUJpZ0ludFVzZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0g
QmlnSW50MzJVc2UpCiAgICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQmlnSW50
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjYw
NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIHByaXZhdGU6CiAjaWYgVVNFKEJJR0lOVDMy
KQogICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
QmlnSW50MzIoKSkgewogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKG9wID09IEluYyA/IFZh
bHVlQWRkIDogVmFsdWVTdWIpOwotICAgICAgICAgICAgICAgIG5vZGVDb25zdGFudE9uZSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobV9pbmRleEluQmxvY2ssIFNwZWNCaWdJbnQzMiwgSlND
b25zdGFudCwgbm9kZS0+b3JpZ2luLCBPcEluZm8obV9ncmFwaC5mcmVlemUoSlNWYWx1ZShKU1Zh
bHVlOjpKU0JpZ0ludDMyLCAxKSkpKTsKKyAgICAgICAgICAgICAgICBub2RlQ29uc3RhbnRPbmUg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG1faW5kZXhJbkJsb2NrLCBTcGVjQmlnSW50MzIs
IEpTQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzQmlnSW50
MzIoMSkpKSk7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2Uo
bm9kZUNvbnN0YW50T25lKSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxCaWdJbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8QmlnSW50MzJVc2U+KG5v
ZGUtPmNoaWxkMigpKTsKQEAgLTIyNCw3ICsyMjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiB0aGUgZnJlZXppbmcgZG9lcyBub3QgYXBwZWFyIHVzZWZ1bCAoc2luY2Ug
dGhlIEpTQ2VsbCBpcyBrZXB0IGFsaXZlIGJ5IHZtKSwgYnV0IGl0IHJlZnVzZXMgdG8gY29tcGls
ZSBvdGhlcndpc2UuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdlIG1pZ2h0IG9wdGltaXpl
IGluYy9kZWMgdG8gYSBzcGVjaWFsaXplZCBmdW5jdGlvbiBjYWxsIGluc3RlYWQgaW4gdGhhdCBj
YXNlLgogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKG9wID09IEluYyA/IFZhbHVlQWRkIDog
VmFsdWVTdWIpOwotICAgICAgICAgICAgICAgIG5vZGVDb25zdGFudE9uZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUobV9pbmRleEluQmxvY2ssIFNwZWNCaWdJbnQzMiwgSlNDb25zdGFudCwg
bm9kZS0+b3JpZ2luLCBPcEluZm8obV9ncmFwaC5mcmVlemUoSlNWYWx1ZShKU1ZhbHVlOjpKU0Jp
Z0ludDMyLCAxKSkpKTsKKyAgICAgICAgICAgICAgICBub2RlQ29uc3RhbnRPbmUgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKG1faW5kZXhJbkJsb2NrLCBTcGVjQmlnSW50MzIsIEpTQ29uc3Rh
bnQsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzQmlnSW50MzIoMSkpKSk7
CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2Uobm9kZUNvbnN0
YW50T25lKSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxBbnlCaWdJbnRVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgICAgICBmaXhFZGdlPEFueUJpZ0ludFVzZT4obm9kZS0+Y2hp
bGQyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM4LDcgKzEzMzgsNyBAQCBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZWdleHAtPnRlc3QoZ2xvYmFsT2JqZWN0LCBpbnB1dCkpOwogfQogCi1KU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ViSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN1YkhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CkBAIC0xMzQ3LDEwICsxMzQ3LDEwIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25TdWJIZWFwQmkKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJ
bnQqPihvcDEpOwogICAgIEpTQmlnSW50KiByaWdodE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQq
PihvcDIpOwogICAgIAotICAgIHJldHVybiBKU0JpZ0ludDo6c3ViKGdsb2JhbE9iamVjdCwgbGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Jp
Z0ludDo6c3ViKGdsb2JhbE9iamVjdCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpOwogfQog
Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9wMSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0NlbGwqIG9wMSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAt
MTM1OCwxMCArMTM1OCwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0Tm90
SGVhCiAKICAgICBKU0JpZ0ludCogb3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CiAK
LSAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VOb3QoZ2xvYmFsT2JqZWN0LCBvcGVyYW5kKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50OjpiaXR3aXNlTm90KGdsb2JhbE9i
amVjdCwgb3BlcmFuZCkpOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTXVs
SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9wMSwgSlND
ZWxsKiBvcDIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk11bEhlYXBC
aWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCog
b3AyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CkBAIC0xMzcwLDEwICsxMzcwLDEw
IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NdWxIZWFwQmkKICAgICBKU0JpZ0lu
dCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwogICAgIEpTQmlnSW50KiBy
aWdodE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDIpOwogCi0gICAgcmV0dXJuIEpTQmln
SW50OjptdWx0aXBseShnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6Om11bHRpcGx5KGdsb2JhbE9iamVj
dCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpOwogfQogICAgIAotSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk1vZEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Nb2RIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Q2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpA
QCAtMTM4MiwxMCArMTM4MiwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTW9k
SGVhcEJpCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3Ax
KTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AyKTsK
ICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OnJlbWFpbmRlcihnbG9iYWxPYmplY3QsIGxlZnRP
cGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJ
bnQ6OnJlbWFpbmRlcihnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTsK
IH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpdkhlYXBCaWdJbnQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXZIZWFwQmlnSW50KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMTM5NCwxMCArMTM5NCwxMCBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRGl2SGVhcEJpCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0g
anNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganND
YXN0PEpTQmlnSW50Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmRpdmlkZShn
bG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNCaWdJbnQ6OmRpdmlkZShnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCBy
aWdodE9wZXJhbmQpKTsKIH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvd0hl
YXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2Vs
bCogb3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3dIZWFwQmln
SW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9w
MikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMTQwNiwxMCArMTQwNiwxMCBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG93SGVhcEJpCiAgICAgSlNCaWdJbnQq
IGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmln
aHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNC
aWdJbnQ6OmV4cG9uZW50aWF0ZShnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZShn
bG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTsKIH0KIAotSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdEFuZEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25CaXRBbmRIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwpAQCAtMTQxOCwxMCArMTQxOCwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQml0QW5kSGVhCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpT
QmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmln
SW50Kj4ob3AyKTsKIAotICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZUFuZChnbG9iYWxPYmpl
Y3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNCaWdJbnQ6OmJpdHdpc2VBbmQoZ2xvYmFsT2JqZWN0LCBsZWZ0T3BlcmFuZCwgcmlnaHRP
cGVyYW5kKSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRMU2hpZnRI
ZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0Nl
bGwqIG9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0TFNoaWZ0
SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9wMSwgSlND
ZWxsKiBvcDIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKQEAgLTE0MzAsMTAgKzE0
MzAsMTAgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdExTaGlmdAogICAgIEpT
QmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CiAgICAgSlNCaWdJ
bnQqIHJpZ2h0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMik7CiAKLSAgICByZXR1cm4g
SlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9i
YWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTsKIH0KIAotSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFkZEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BZGRIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OwpAQCAtMTQ0MiwxMCArMTQ0MiwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QWRkSGVhcEJpCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4o
b3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3Ay
KTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmFkZChnbG9iYWxPYmplY3QsIGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6
OmFkZChnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTsKIH0KIAotSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFJTaGlmdEhlYXBCaWdJbnQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRSU2hpZnRIZWFwQmlnSW50KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMTQ1NCwxMCArMTQ1NCwxMCBAQCBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQml0UlNoaWZ0CiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5k
ID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0g
anNDYXN0PEpTQmlnSW50Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OnNpZ25l
ZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KGdsb2Jh
bE9iamVjdCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpOwogfQogCi1KU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQml0T3JIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQml0T3JIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOwpAQCAtMTQ2NiwxMCArMTQ2NiwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQml0T3JIZWFwCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50
Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4o
b3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VPcihnbG9iYWxPYmplY3Qs
IGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNCaWdJbnQ6OmJpdHdpc2VPcihnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQpKTsKIH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFhvckhlYXBCaWdJ
bnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3Ay
KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRYb3JIZWFwQmlnSW50
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMTQ3OCw3ICsxNDc4LDcgQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFhvckhlYQogICAgIEpTQmlnSW50KiBsZWZ0
T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CiAgICAgSlNCaWdJbnQqIHJpZ2h0T3Bl
cmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMik7CiAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmJp
dHdpc2VYb3IoZ2xvYmFsT2JqZWN0LCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50OjpiaXR3aXNlWG9yKGdsb2JhbE9iamVjdCwg
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpOwogfQogCiBzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDE4ICsxODMs
MTggQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAogc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChKU0dsb2JhbE9iamVjdCosIFJlZ0V4cE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZWdFeHBUZXN0R2VuZXJpYyhKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3Ax
LCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN1YkhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBv
cDIpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NdWxIZWFw
QmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5U
RVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTW9kSGVhcEJpZ0ludChKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpdkhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Qb3dIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBv
cDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQml0QW5kSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0Nl
bGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJp
dE5vdEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSkgV1RGX0lOVEVSTkFM
OwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdE9ySGVhcEJpZ0ludChKU0dsb2Jh
bE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdExTaGlmdEhlYXBCaWdJbnQoSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25BZGRIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQml0UlNoaWZ0SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3Ax
LCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkJpdFhvckhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxs
KiBvcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3ViSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9w
MikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25N
dWxIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBX
VEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1vZEhl
YXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGl2SGVhcEJp
Z0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3dIZWFwQmlnSW50
KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdEFuZEhlYXBCaWdJbnQo
SlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludChK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdE9ySGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRMU2hpZnRIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0
KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFkZEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQml0UlNoaWZ0SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRYb3JIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25TYW1lVmFsdWUoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0KFZNKiwgU3RydWN0dXJlKiwgSlNTY29wZSosIFN5
bWJvbFRhYmxlKiwgRW5jb2RlZEpTVmFsdWUpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cyhWTSosIFN0cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0
aCwgdWludDMyX3QgbWluQ2FwYWNpdHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI2MDU4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTc0LDEyICszNTc0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZUJpdE5vdCgKICAgICAgICAgc3BlY3VsYXRlSGVhcEJpZ0ludChjaGlsZDEsIG9wZXJhbmRHUFIp
OwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogCi0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3BlcmFuZEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIG9wZXJhbmRHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3
NDUsNyArMzc0NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUJpdHdpc2UK
ICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIG1peGVkIEJpZ0ludDMyIC8gSGVhcEJpZ0lu
dAogI2VuZGlmCiAKLSAgICBpZiAobGVmdENoaWxkLnVzZUtpbmQoKSA9PSBIZWFwQmlnSW50VXNl
ICYmIHJpZ2h0Q2hpbGQudXNlS2luZCgpID09IEhlYXBCaWdJbnRVc2UpIHsKKyAgICBpZiAobm9k
ZS0+YmluYXJ5VXNlS2luZCgpID09IEhlYXBCaWdJbnRVc2UpIHsKICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgbGVmdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHJpZ2h0KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgR1BSUmVn
IGxlZnRHUFIgPSBsZWZ0LmdwcigpOwpAQCAtMzc1NSwyNSArMzc1NSwyNSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVCaXR3aXNlCiAgICAgICAgIHNwZWN1bGF0ZUhlYXBCaWdJ
bnQocmlnaHRDaGlsZCwgcmlnaHRHUFIpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBy
ZXN1bHQucmVncygpOwogCiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBWYWx1
ZUJpdEFuZDoKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0QW5kSGVhcEJp
Z0ludCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmln
aHRHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXRBbmRIZWFwQmln
SW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmln
aHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFsdWVCaXRYb3I6Ci0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdFhvckhlYXBCaWdJbnQsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0WG9ySGVhcEJpZ0ludCwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVlQml0T3I6Ci0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdE9ySGVhcEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25CaXRPckhlYXBCaWdJbnQsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM5NDYsMTIg
KzM5NDYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTFNoaWZ0TwogICAg
ICAgICBzcGVjdWxhdGVIZWFwQmlnSW50KHJpZ2h0Q2hpbGQsIHJpZ2h0R1BSKTsKIAogICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQo
dGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKIAotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkJpdExTaGlmdEhlYXBCaWdJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25CaXRMU2hpZnRIZWFwQmlnSW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTM5NzQsMTIgKzM5NzQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZh
bHVlQml0UlNoaQogICAgICAgICBzcGVjdWxhdGVIZWFwQmlnSW50KHJpZ2h0Q2hpbGQsIHJpZ2h0
R1BSKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0UlNoaWZ0SGVhcEJpZ0lu
dCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRH
UFIpOworICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0UlNoaWZ0SGVhcEJpZ0ludCwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTQwODIsMTIgKzQwODIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgICAgICBzcGVjdWxhdGVIZWFwQmlnSW50KHJp
Z2h0Q2hpbGQsIHJpZ2h0R1BSKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWRk
SGVhcEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQ
UiwgcmlnaHRHUFIpOworICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWRkSGVhcEJpZ0ludCwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQxODgsMTMgKzQxODgsMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgICAgICBzcGVjdWxhdGVIZWFwQmlnSW50
KHJpZ2h0Q2hpbGQsIHJpZ2h0R1BSKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVz
dWx0LnJlZ3MoKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN1YkhlYXBCaWdJ
bnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0
R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdWJIZWFwQmlnSW50LCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwog
CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTAxOSwxMyArNTAxOSwxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVNdWwoTm9kCiAgICAgICAgIHNwZWN1bGF0ZUhlYXBC
aWdJbnQocmlnaHRDaGlsZCwgcmlnaHRHUFIpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVk
Q2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSByZXN1bHQucmVncygpOwogCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTXVsSGVh
cEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwg
cmlnaHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk11bEhlYXBCaWdJbnQs
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQ
Uik7CiAKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MjI1LDEzICs1MjI1LDEzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZURpdihOb2QKICAgICAgICAgc3BlY3VsYXRl
SGVhcEJpZ0ludChyaWdodENoaWxkLCByaWdodEdQUik7CiAKICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBKU1ZhbHVlUmVnc0Zs
dXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
aXZIZWFwQmlnSW50LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0
R1BSLCByaWdodEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGl2SGVhcEJp
Z0ludCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJp
Z2h0R1BSKTsKIAogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU1MTYsMTMgKzU1MTYsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTW9kKE5vZAogICAgICAgICBzcGVj
dWxhdGVIZWFwQmlnSW50KHJpZ2h0Q2hpbGQsIHJpZ2h0R1BSKTsKIAogICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEpTVmFsdWVS
ZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk1vZEhlYXBCaWdJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Nb2RI
ZWFwQmlnSW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQ
UiwgcmlnaHRHUFIpOwogCiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjA4MywxMyArNjA4
MywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVQb3coTm9kCiAgICAgICAg
IHNwZWN1bGF0ZUhlYXBCaWdJbnQocmlnaHRDaGlsZCwgcmlnaHRHUFIpOwogCiAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUG93SGVhcEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blBvd0hlYXBCaWdJbnQsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBs
ZWZ0R1BSLCByaWdodEdQUik7CiAKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2MDU4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4NzgsNyArMjg3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXIKICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewogICAgICAg
ICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwogICAgICAgICBp
ZiAodmFsdWUgIT0gSU5UX01JTikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCAtdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCaWdJbnQzMigtdmFsdWUpKTsKICAgICAgICAgcHJpbVZhbHVl
ID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKICAgICB9CiAjZW5kaWYKQEAgLTI5
MTAsNyArMjkxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIK
ICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewogICAgICAgICBpbnQzMl90IHZhbHVl
ID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwogICAgICAgICBpZiAodmFsdWUgIT0gSU5U
X01JTikgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlKEpTVmFsdWU6OkpTQmln
SW50MzIsIC12YWx1ZSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGpzQmlnSW50MzIoLXZh
bHVlKTsKICAgICAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CkBA
IC0yOTE4LDcgKzI5MTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFyCiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkgewot
ICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1W
YWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6
OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CiAgICAgICAgIGFyaXRo
UHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQpAQCAtMjk1Niw3ICsyOTU2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQz
MigpKSB7CiAgICAgICAgIGludDMyX3QgdmFsdWUgPSBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMy
KCk7CiAgICAgICAgIGlmICh2YWx1ZSAhPSBJTlRfTUlOKSB7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgLXZhbHVlKTsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0ganNCaWdJbnQzMigtdmFsdWUpOwogICAgICAgICAgICAgYXJpdGhQcm9m
aWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgICAgIH0KQEAgLTI5NjQsNyArMjk2NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICB9CiAjZW5kaWYKICAgICBpZiAo
cHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBK
U0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgpKTsKKyAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFz
SGVhcEJpZ0ludCgpKTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBAIC0z
MDAyLDcgKzMwMDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
CiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpIHsKICAgICAgICAgaW50MzJfdCB2YWx1
ZSA9IHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKTsKICAgICAgICAgaWYgKHZhbHVlICE9IElO
VF9NSU4pCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1
ZTo6SlNCaWdJbnQzMiwgLXZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQmlnSW50MzIoLXZhbHVlKSk7CiAgICAgICAgIHByaW1WYWx1ZSA9IEpTQmlnSW50Ojpj
cmVhdGVGcm9tKHZtLCB2YWx1ZSk7CiAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyNjA1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgSlNWYWx1ZSB0b0JpZ0lu
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgaWYgKGFyZ3VtZW50LmlzQm9vbGVhbigp
KSB7CiAjaWYgVVNFKEJJR0lOVDMyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpK
U0JpZ0ludDMyLCBhcmd1bWVudC5hc0Jvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBqc0JpZ0lu
dDMyKGFyZ3VtZW50LmFzQm9vbGVhbigpKTsKICNlbHNlCiAgICAgICAgIHJldHVybiBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbSh2bSwgYXJndW1lbnQuYXNCb29sZWFuKCkpOwogI2VuZGlmCkBAIC0xMTUs
NyArMTE1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAg
ICAgaWYgKHByaW1pdGl2ZS5pc0ludDMyKCkpIHsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCBwcmlt
aXRpdmUuYXNJbnQzMigpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCaWdJ
bnQzMihwcmltaXRpdmUuYXNJbnQzMigpKSk7CiAjZWxzZQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBwcmltaXRpdmUuYXNJbnQzMigpKSk7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjYwNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDcg
KzU0Nyw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZWdhdGUpCiAgICAgaWYgKHByaW1W
YWx1ZS5pc0JpZ0ludDMyKCkpIHsKICAgICAgICAgaW50MzJfdCB2YWx1ZSA9IHByaW1WYWx1ZS5i
aWdJbnQzMkFzSW50MzIoKTsKICAgICAgICAgaWYgKHZhbHVlICE9IElOVF9NSU4pIHsKLSAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCAtdmFsdWUp
OworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7CiAgICAgICAg
ICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcocmVzdWx0LCB7CiAgICAgICAgICAgICAgICAgdXBk
YXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQp
OwogICAgICAgICAgICAgfSk7CkBAIC01NTcsNyArNTU3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX25lZ2F0ZSkKICNlbmRpZgogCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQo
KSkgewotICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0s
IHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNC
aWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CiAgICAgICAg
IFJFVFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKICAgICAgICAgICAgIHVwZGF0ZUFyaXRo
UHJvZmlsZUZvclVuYXJ5QXJpdGhPcChtZXRhZGF0YSwgcmVzdWx0LCBvcGVyYW5kKTsKICAgICAg
ICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
CShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpTQmlnSW50
OjppbnBsYWNlTXVsdGlwbHlBZGQoRGlnaXQgCiAgICAgaW50ZXJuYWxNdWx0aXBseUFkZCh0aGlz
LCBmYWN0b3IsIHN1bW1hbmQsIGxlbmd0aCgpLCB0aGlzKTsKIH0KIAotSlNCaWdJbnQqIEpTQmln
SW50OjpleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQq
IGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6ZXhwb25lbnRp
YXRlSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgSlNC
aWdJbnQqIGV4cG9uZW50KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yNTksNyArMjU5LDcg
QEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGUoSlNHbG9iYQogICAgIGlmIChiYXNl
LT5sZW5ndGgoKSA9PSAxICYmIGJhc2UtPmRpZ2l0KDApID09IDEpIHsKICAgICAgICAgLy8gKC0x
KSAqKiBldmVuX251bWJlciA9PSAxLgogICAgICAgICBpZiAoYmFzZS0+c2lnbigpICYmICEoZXhw
b25lbnQtPmRpZ2l0KDApICYgMSkpCi0gICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnVuYXJ5
TWludXModm0sIGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50Ojp1bmFyeU1pbnVz
SGVhcCh2bSwgYmFzZSk7CiAKICAgICAgICAgLy8gKC0xKSAqKiBvZGRfbnVtYmVyID09IC0xOyAx
ICoqIGFueXRoaW5nID09IDEuCiAgICAgICAgIHJldHVybiBiYXNlOwpAQCAtMzA5LDE0ICszMDks
MTQgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGUoSlNHbG9iYQogCiAgICAgbiA+
Pj0gMTsKICAgICBmb3IgKDsgbjsgbiA+Pj0gMSkgewotICAgICAgICBKU0JpZ0ludCogbWF5YmVS
ZXN1bHQgPSBKU0JpZ0ludDo6bXVsdGlwbHkoZ2xvYmFsT2JqZWN0LCBydW5uaW5nU3F1YXJlLCBy
dW5uaW5nU3F1YXJlKTsKKyAgICAgICAgSlNCaWdJbnQqIG1heWJlUmVzdWx0ID0gSlNCaWdJbnQ6
Om11bHRpcGx5SGVhcChnbG9iYWxPYmplY3QsIHJ1bm5pbmdTcXVhcmUsIHJ1bm5pbmdTcXVhcmUp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAg
cnVubmluZ1NxdWFyZSA9IG1heWJlUmVzdWx0OwogICAgICAgICBpZiAobiAmIDEpIHsKICAgICAg
ICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bm5pbmdTcXVh
cmU7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtYXliZVJlc3VsdCA9IEpT
QmlnSW50OjptdWx0aXBseShnbG9iYWxPYmplY3QsIHJlc3VsdCwgcnVubmluZ1NxdWFyZSk7Cisg
ICAgICAgICAgICAgICAgbWF5YmVSZXN1bHQgPSBKU0JpZ0ludDo6bXVsdGlwbHlIZWFwKGdsb2Jh
bE9iamVjdCwgcmVzdWx0LCBydW5uaW5nU3F1YXJlKTsKICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBt
YXliZVJlc3VsdDsKICAgICAgICAgICAgIH0KQEAgLTMyNiw3ICszMjYsNyBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6OmV4cG9uZW50aWF0ZShKU0dsb2JhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNCaWdJbnQqIEpTQmlnSW50OjptdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6Om11bHRpcGx5
SGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQq
IHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTM0OCw3ICszNDgsNyBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6Om11bHRpcGx5KEpTR2xvYmFsT2JqCiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRU
cmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpkaXZpZGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpTQmln
SW50OjpkaXZpZGVIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSkKIHsKICAgICAvLyAxLiBJZiB5IGlzIDBuLCB0aHJvdyBhIFJhbmdlRXJy
b3IgZXhjZXB0aW9uLgogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTM3MCw3
ICszNzAsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVjCiAgICAg
aWYgKHktPmxlbmd0aCgpID09IDEpIHsKICAgICAgICAgRGlnaXQgZGl2aXNvciA9IHktPmRpZ2l0
KDApOwogICAgICAgICBpZiAoZGl2aXNvciA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dFNpZ24gPT0geC0+c2lnbigpID8geCA6IHVuYXJ5TWludXModm0sIHgpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdFNpZ24gPT0geC0+c2lnbigpID8geCA6IEpTQmlnSW50Ojp1bmFyeU1pbnVz
SGVhcCh2bSwgeCk7CiAKICAgICAgICAgRGlnaXQgcmVtYWluZGVyOwogICAgICAgICBhYnNvbHV0
ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsICZxdW90aWVudCwgcmVtYWluZGVy
KTsKQEAgLTM5Myw3ICszOTMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNvcHkoVk0mIHZtLCBK
U0JpZ0luCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50Ojp1bmFy
eU1pbnVzKFZNJiB2bSwgSlNCaWdJbnQqIHgpCitKU0JpZ0ludCogSlNCaWdJbnQ6OnVuYXJ5TWlu
dXNIZWFwKFZNJiB2bSwgSlNCaWdJbnQqIHgpCiB7CiAgICAgaWYgKHgtPmlzWmVybygpKQogICAg
ICAgICByZXR1cm4geDsKQEAgLTQwMyw3ICs0MDMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnVu
YXJ5TWludXMoVk0mIHZtLCBKCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpT
QmlnSW50OjpyZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjpyZW1haW5kZXJIZWFwKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKICAg
ICAvLyAxLiBJZiB5IGlzIDBuLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTQ0MSw3ICs0NDEsNyBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iCiAgICAgcmV0dXJuIHJlbWFpbmRlci0+cmln
aHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjppbmMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmluY0hlYXAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCiB7CiAgICAgaWYgKCF4
LT5zaWduKCkpCiAgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHgs
IFNpZ25PcHRpb246OlVuc2lnbmVkKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCBKU0JpZ0ludCogSlNC
aWdJbnQ6OmluYyhKU0dsb2JhbE9iamVjdCogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50OjpkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmRlY0hlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNCaWdJbnQqIHgpCiB7CiAgICAgaWYgKHgtPmlzWmVybygpKSB7CiAgICAgICAg
IEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVGcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwgMSk7CkBA
IC00NjQsNyArNDY0LDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpkZWMoSlNHbG9iYWxPYmplY3Qq
IAogICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHgsIFNpZ25PcHRpb246
OlNpZ25lZCk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTQmlnSW50KiBKU0JpZ0lu
dDo6YWRkSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGJvb2wg
eFNpZ24gPSB4LT5zaWduKCk7CkBAIC00ODMsNyArNDgzLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50
OjphZGQoSlNHbG9iYWxPYmplY3QqIAogICAgIHJldHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwg
IXhTaWduKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpzdWIoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpTQmlnSW50
OjpzdWJIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYm9vbCB4
U2lnbiA9IHgtPnNpZ24oKTsKQEAgLTUwMSw3ICs1MDEsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6
OnN1YihKU0dsb2JhbE9iamVjdCogCiAgICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB5LCB4LCAh
eFNpZ24pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VBbmQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpT
QmlnSW50OjpiaXR3aXNlQW5kSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTUzNiw3ICs1
MzYsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VBbmQoSlNHbG9iYWxPCiAgICAgcmV0
dXJuIGFic29sdXRlQW5kTm90KHZtLCB4LCB5MSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6
Yml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lzZU9ySGVhcChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTU3Nyw3ICs1NzcsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VP
cihKU0dsb2JhbE9iCiAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVz
dWx0LCBTaWduT3B0aW9uOjpTaWduZWQpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdp
c2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlWG9ySGVhcChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTYxNSw3ICs2MTUsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VYb3Io
SlNHbG9iYWxPCiAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVzdWx0
LCBTaWduT3B0aW9uOjpTaWduZWQpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlm
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CitKU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlmdEhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewogICAgIGlmICh5LT5pc1plcm8o
KSB8fCB4LT5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHg7CkBAIC02MjYsNyArNjI2LDcgQEAg
SlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0U2hpZnQoSlNHbG9iYWxPYgogICAgIHJldHVybiBsZWZ0
U2hpZnRCeUFic29sdXRlKGdsb2JhbE9iamVjdCwgeCwgeSk7CiB9CiAKLUpTQmlnSW50KiBKU0Jp
Z0ludDo6c2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hp
ZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSkKIHsKICAgICBpZiAoeS0+aXNaZXJvKCkgfHwgeC0+aXNaZXJvKCkpCiAgICAgICAgIHJl
dHVybiB4OwpAQCAtNjM3LDcgKzYzNyw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6c2lnbmVkUmln
aHRTaGlmdChKU0cKICAgICByZXR1cm4gcmlnaHRTaGlmdEJ5QWJzb2x1dGUoZ2xvYmFsT2JqZWN0
LCB4LCB5KTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlTm90KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQorSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3
aXNlTm90SGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKIHsK
ICAgICBpZiAoeC0+c2lnbigpKSB7CiAgICAgICAgIC8vIH4oLXgpID09IH4ofih4LTEpKSA9PSB4
LTEKQEAgLTk1Myw3ICs5NTMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkKEpT
R2xvYmFsCiAgICAgfQogCiAgICAgaWYgKHktPmlzWmVybygpKQotICAgICAgICByZXR1cm4gcmVz
dWx0U2lnbiA9PSB4LT5zaWduKCkgPyB4IDogdW5hcnlNaW51cyh2bSwgeCk7CisgICAgICAgIHJl
dHVybiByZXN1bHRTaWduID09IHgtPnNpZ24oKSA/IHggOiB1bmFyeU1pbnVzSGVhcCh2bSwgeCk7
CiAKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgo
Z2xvYmFsT2JqZWN0LCB4LT5sZW5ndGgoKSArIDEpOwogICAgIGlmICghcmVzdWx0KQpAQCAtOTkz
LDcgKzk5Myw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCAKICAg
ICB9CiAKICAgICBpZiAoeS0+aXNaZXJvKCkpCi0gICAgICAgIHJldHVybiByZXN1bHRTaWduID09
IHgtPnNpZ24oKSA/IHggOiB1bmFyeU1pbnVzKHZtLCB4KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dFNpZ24gPT0geC0+c2lnbigpID8geCA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcCh2bSwgeCk7
CiAKICAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVhbCkK
ICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVaZXJvKHZtKTsKQEAgLTE4NjAsNyArMTg2
MCw3IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWMKIAogICAgIGlm
IChwID09IGxlbmd0aCkgewogI2lmIFVTRShCSUdJTlQzMikKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgMCk7CisgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDAp
OwogI2Vsc2UKICAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOwogI2VuZGlmCkBAIC0xOTc0
LDcgKzE5NzQsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjCiAK
ICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8aW50
MzJfdD4obWF5YmVSZXN1bHQpKSA9PSBtYXliZVJlc3VsdCkgewogI2lmIFVTRShCSUdJTlQzMikK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwg
c3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKICNl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
c3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNjA1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICB7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAg
ICBpZiAodmFsdWUgPD0gSU5UX01BWCAmJiB2YWx1ZSA+PSBJTlRfTUlOKQotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KHZhbHVlKSk7CiAjZW5kaWYKIAogICAgICAgICBhdXRvIHB0ciA9IEpTQmlnSW50OjpjcmVh
dGVGcm9tKHZtLCB2YWx1ZSk7CkBAIC0xMjAsNiArMTIwLDMyIEBAIHB1YmxpYzoKICAgICAgICAg
R3JlYXRlclRoYW4sCiAgICAgICAgIExlc3NUaGFuCiAgICAgfTsKKworICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgdHJ5Q29udmVydFRvQmlnSW50MzIoSlNCaWdJbnQqIGJpZ0ludCkK
KyAgICB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkp
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworCisgICAgICAgIGlmIChiaWdJbnQtPmxl
bmd0aCgpIDw9IDEpIHsKKyAgICAgICAgICAgIGlmICghYmlnSW50LT5sZW5ndGgoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKKyAgICAgICAgICAgIERpZ2l0IGRpZ2l0
ID0gYmlnSW50LT5kaWdpdCgwKTsKKyAgICAgICAgICAgIGlmIChiaWdJbnQtPnNpZ24oKSkgewor
ICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbWF4VmFsdWUgPSAtc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpOwor
ICAgICAgICAgICAgICAgIGlmIChkaWdpdCA8PSBtYXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXN0YXRpY19jYXN0PGlu
dDY0X3Q+KGRpZ2l0KSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1heFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZGlnaXQgPD0gbWF4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0lu
dDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KGRpZ2l0KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyNlbmRpZgorCisgICAgICAgIHJldHVybiBiaWdJbnQ7CisgICAgfQorCiAgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZXF1YWxzKEpTQmlnSW50KiwgSlNCaWdJbnQq
KTsKICAgICBib29sIGVxdWFsc1RvTnVtYmVyKEpTVmFsdWUpOwpAQCAtMTMyLDI3ICsxNTgsOTcg
QEAgcHVibGljOgogICAgIEpTT2JqZWN0KiB0b09iamVjdChKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogICAgIGlubGluZSBib29sIHRvQm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuICFpc1plcm8oKTsg
fQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqLCBK
U0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KTsKKyAgICBDb21wYXJpc29uUmVzdWx0
IHN0YXRpYyBjb21wYXJlVG9Eb3VibGUoSlNCaWdJbnQqIHgsIGRvdWJsZSB5KTsKKworICAgIHN0
YXRpYyBKU0JpZ0ludCogZXhwb25lbnRpYXRlSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50
KiBiYXNlLCBKU0JpZ0ludCogZXhwb25lbnQpOworICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50
aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJ
bnQqIGV4cG9uZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KGV4cG9uZW50aWF0ZUhlYXAoZ2xvYmFsT2JqZWN0LCBiYXNlLCBleHBvbmVudCkpOworICAgIH0K
IAotICAgIHN0YXRpYyBKU0JpZ0ludCogbXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0lu
dCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogbXVsdGlwbHlIZWFwKEpT
R2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBtdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
bXVsdGlwbHlIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgIH0KICAgICAKLSAgICBDb21w
YXJpc29uUmVzdWx0IHN0YXRpYyBjb21wYXJlVG9Eb3VibGUoSlNCaWdJbnQqIHgsIGRvdWJsZSB5
KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGluY0hlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0lu
dCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgaW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0lu
dDMyKGluY0hlYXAoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgfQogCi0gICAgc3RhdGljIEpTQmln
SW50KiBpbmMoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCk7Ci0gICAgc3RhdGljIEpTQmln
SW50KiBkZWMoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCk7Ci0gICAgc3RhdGljIEpTQmln
SW50KiBhZGQoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAg
IHN0YXRpYyBKU0JpZ0ludCogc3ViKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmln
SW50KiB5KTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGRpdmlkZShKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiByZW1haW5kZXIo
SlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBK
U0JpZ0ludCogdW5hcnlNaW51cyhWTSYsIEpTQmlnSW50KiB4KTsKLQotICAgIHN0YXRpYyBKU0Jp
Z0ludCogYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCog
eSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZVhvcihK
U0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpT
QmlnSW50KiBiaXR3aXNlTm90KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOworICAgIHN0
YXRpYyBKU0JpZ0ludCogZGVjSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4KTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSBkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGVjSGVh
cChnbG9iYWxPYmplY3QsIHgpKTsKKyAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGxlZnRT
aGlmdChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3Rh
dGljIEpTQmlnSW50KiBzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFkZEhlYXAoSlNHbG9iYWxP
YmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGFk
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYWRkSGVhcChnbG9i
YWxPYmplY3QsIHgsIHkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNCaWdJbnQqIHN1YkhlYXAo
SlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBK
U1ZhbHVlIHN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCisgICAgeworICAgICAgICByZXR1cm4gc3ViSGVhcChnbG9iYWxPYmplY3QsIHgs
IHkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0JpZ0ludCogZGl2aWRlSGVhcChKU0dsb2JhbE9i
amVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgZGl2
aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCog
eSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihkaXZpZGVIZWFw
KGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0JpZ0ludCogcmVt
YWluZGVySGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Cisg
ICAgc3RhdGljIEpTVmFsdWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihyZW1haW5kZXJIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgIH0K
KworICAgIHN0YXRpYyBKU0JpZ0ludCogdW5hcnlNaW51c0hlYXAoVk0mLCBKU0JpZ0ludCogeCk7
CisgICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHVuYXJ5TWludXNIZWFwKHZt
LCB4KSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlQW5kSGVhcChKU0ds
b2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFs
dWUgYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
Yml0d2lzZUFuZEhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQmlnSW50KiBiaXR3aXNlT3JIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VPckhlYXAoZ2xvYmFsT2JqZWN0LCB4
LCB5KSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlWG9ySGVhcChKU0ds
b2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFs
dWUgYml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
Yml0d2lzZVhvckhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQmlnSW50KiBiaXR3aXNlTm90SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlTm90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0lu
dDMyKGJpdHdpc2VOb3RIZWFwKGdsb2JhbE9iamVjdCwgeCkpOworICAgIH0KKworICAgIHN0YXRp
YyBKU0JpZ0ludCogbGVmdFNoaWZ0SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgbGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihsZWZ0U2hpZnRIZWFwKGdsb2JhbE9iamVjdCwg
eCwgeSkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0JpZ0ludCogc2lnbmVkUmlnaHRTaGlmdEhl
YXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRp
YyBKU1ZhbHVlIHNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKHNpZ25lZFJpZ2h0U2hpZnRIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOwor
ICAgIH0KIAogICAgIERpZ2l0IGRpZ2l0KHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVu
c2lnbmVkLCBEaWdpdCk7IC8vIFVzZSBvbmx5IHdoZW4gaW5pdGlhbGl6aW5nLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkocmV2aXNpb24gMjYwNTgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAgIGVudW0gSlNGYWxzZVRhZyB7
IEpTRmFsc2UgfTsKICAgICBlbnVtIEpTQ2VsbFRhZyB7IEpTQ2VsbFR5cGUgfTsKICNpZiBVU0Uo
QklHSU5UMzIpCi0gICAgZW51bSBKU0JpZ0ludDMyVGFnIHsgSlNCaWdJbnQzMiB9OworICAgIGVu
dW0gRW5jb2RlQXNCaWdJbnQzMlRhZyB7IEVuY29kZUFzQmlnSW50MzIgfTsKICNlbmRpZgogICAg
IGVudW0gRW5jb2RlQXNEb3VibGVUYWcgeyBFbmNvZGVBc0RvdWJsZSB9OwogCkBAIC0xOTAsNyAr
MTkwLDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUoSlNDZWxsKiBwdHIpOwogICAgIEpTVmFsdWUo
Y29uc3QgSlNDZWxsKiBwdHIpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBKU1ZhbHVlKEpTQmln
SW50MzJUYWcsIGludDMyX3QpOworICAgIEpTVmFsdWUoRW5jb2RlQXNCaWdJbnQzMlRhZywgaW50
MzJfdCk7CiAjZW5kaWYKIAogICAgIC8vIE51bWJlcnMKQEAgLTU3Nyw2ICs1NzcsMTMgQEAgaW5s
aW5lIEpTVmFsdWUganNCb29sZWFuKGJvb2wgYikKICAgICByZXR1cm4gYiA/IEpTVmFsdWUoSlNW
YWx1ZTo6SlNUcnVlKSA6IEpTVmFsdWUoSlNWYWx1ZTo6SlNGYWxzZSk7CiB9CiAKKyNpZiBVU0Uo
QklHSU5UMzIpCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaWdJbnQzMihpbnQzMl90IGludFZh
bHVlKQoreworICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzQmlnSW50MzIsIGlu
dFZhbHVlKTsKK30KKyNlbmRpZgorCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNEb3VibGVOdW1i
ZXIoZG91YmxlIGQpCiB7CiAgICAgQVNTRVJUKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3Vi
bGUsIGQpLmlzTnVtYmVyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MzgsNyArNTM4LDcgQEAgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogSlNWYWx1ZTo6YXNI
ZWFwQgogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKICNpZiBVU0UoQklHSU5UMzIpCi1pbmxp
bmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0JpZ0ludDMyVGFnLCBpbnQzMl90IHZhbHVlKQoraW5saW5l
IEpTVmFsdWU6OkpTVmFsdWUoRW5jb2RlQXNCaWdJbnQzMlRhZywgaW50MzJfdCB2YWx1ZSkKIHsK
ICAgICB1aW50NjRfdCBzaGlmdGVkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSkgPDwgMTY7CiAgICAgQVNTRVJUKCEoc2hpZnRlZFZhbHVl
ICYgTnVtYmVyVGFnKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYwNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAg
TkVWRVJfSU5MSU5FIEpTVmFsdWUganNBZGRTbG93Q2FzZShKU0dsbwogICAgICAgICByZXN1bHQg
Kz0gcmlnaHQ7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZXN1bHQuaGFzT3ZlcmZsb3dlZCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlKEpT
VmFsdWU6OkpTQmlnSW50MzIsIHJlc3VsdC51bnNhZmVHZXQoKSk7CisgICAgICAgIHJldHVybiBq
c0JpZ0ludDMyKHJlc3VsdC51bnNhZmVHZXQoKSk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFS
QU0obGVmdCk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNjA1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzMiw3ICs1MzIsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdWIoSlNHbG9iYWxP
YmplCiAgICAgICAgIHJlc3VsdCAtPSByaWdodDsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlc3Vs
dC5oYXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgcmVzdWx0LnVuc2FmZUdldCgp
KTsKKyAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIocmVzdWx0LnVuc2FmZUdldCgpKTsKICNlbHNl
CiAgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKQEAgLTU1NCw3ICs1NTQsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNNdWwoSlNHbG9i
YWxPYmplCiAgICAgICAgIHJlc3VsdCAqPSByaWdodDsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNP
dmVyZmxvd2VkKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICByZXR1
cm4gSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCByZXN1bHQudW5zYWZlR2V0KCkpOworICAg
ICAgICByZXR1cm4ganNCaWdJbnQzMihyZXN1bHQudW5zYWZlR2V0KCkpOwogI2Vsc2UKICAgICAg
ICAgVU5VU0VEX1BBUkFNKGxlZnQpOwogICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwpAQCAt
NTc0LDcgKzU3NCw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0RpdihKU0dsb2JhbE9iamUK
ICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIGlmICghcmlnaHQpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMy
LCBsZWZ0IC8gcmlnaHQpOworICAgICAgICByZXR1cm4ganNCaWdJbnQzMihsZWZ0IC8gcmlnaHQp
OwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwogICAgICAgICBVTlVTRURfUEFS
QU0ocmlnaHQpOwpAQCAtNjI5LDcgKzYyOSw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0lu
YyhKU0dsb2JhbE9iamUKICAgICAgICAgLy8gRklYTUU6IHRoZSBmb2xsb3dpbmcgbmV4dCBmZXcg
bGluZXMgbWlnaHQgYmVuZWZpdCBmcm9tIGJlaW5nIG1hZGUgaW50byBhIGhlbHBlciBmdW5jdGlv
bgogICAgICAgICBpZiAobmV3VmFsdWUgPiBJTlRfTUFYKQogICAgICAgICAgICAgcmV0dXJuIEpT
QmlnSW50OjpjcmVhdGVGcm9tKHZtLCBuZXdWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
KEpTVmFsdWU6OkpTQmlnSW50MzIsIHN0YXRpY19jYXN0PGludDMyX3Q+KG5ld1ZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG5ld1ZhbHVlKSk7
CiAgICAgfQogI2VuZGlmCiAKQEAgLTY1NCw3ICs2NTQsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUganNEZWMoSlNHbG9iYWxPYmplCiAgICAgICAgIC8vIEZJWE1FOiB0aGUgZm9sbG93aW5nIG5l
eHQgZmV3IGxpbmVzIG1pZ2h0IGJlbmVmaXQgZnJvbSBiZWluZyBtYWRlIGludG8gYSBoZWxwZXIg
ZnVuY3Rpb24KICAgICAgICAgaWYgKG5ld1ZhbHVlIDwgSU5UX01JTikKICAgICAgICAgICAgIHJl
dHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbmV3VmFsdWUpOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCBzdGF0aWNfY2FzdDxpbnQzMl90PihuZXdWYWx1
ZSkpOworICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihuZXdW
YWx1ZSkpOwogICAgIH0KICNlbmRpZgogCkBAIC02NzUsNyArNjc1LDcgQEAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGpzQml0d2lzZU5vdChKU0dsbwogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlm
IChvcGVyYW5kTnVtZXJpYy5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKEpT
VmFsdWU6OkpTQmlnSW50MzIsIH5vcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7Cisg
ICAgICAgIHJldHVybiBqc0JpZ0ludDMyKH5vcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIo
KSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChvcGVyYW5kTnVtZXJpYy5pc0hlYXBCaWdJbnQoKSk7
CkBAIC03MTAsNyArNzEwLDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHNoaWZ0KEpTR2xvYmFs
T2JqZQogCiAgICAgICAgIC8vIFRoaXMgc3RkOjptaW4gaXMgYSBiaXQgaGFja3ksIGJ1dCByZXF1
aXJlZCBiZWNhdXNlIGluIEMrKyBpdCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgdG8gZG8gYSBzaGlm
dCB3aGVyZSB0aGUgcmlnaHQgb3BlcmFuZCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBiaXQt
d2lkdGggb2YgdGhlIGxlZnQgb3BlcmFuZC4KICAgICAgICAgaWYgKCFpc0xlZnQpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCBsZWZ0SW50MzIgPj4gc3Rk
OjptaW4ocmlnaHRJbnQzMiwgMzEpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKGxl
ZnRJbnQzMiA+PiBzdGQ6Om1pbihyaWdodEludDMyLCAzMSkpOwogCiAgICAgICAgIC8vIEluIHRo
ZSBjYXNlIG9mIGEgbGVmdCBzaGlmdCB3ZSBjYW4gb3ZlcmZsb3cuIEkgZGVhbCB3aXRoIHRoaXMg
YnkgYWxsb2NhdGluZyBIZWFwQmlnSW50cy4KICAgICAgICAgLy8gRklYTUU6IGl0IG1pZ2h0IGJl
IHBvc3NpYmxlIHRvIGRvIHNvbWV0aGluZyBzbWFydGVyLCB0cnlpbmcgdG8gZG8gdGhlIGxlZnQg
c2hpZnQgYW5kIGRldGVjdGluZyBzb21laG93IGlmIGl0IG92ZXJmbG93ZWQuCkBAIC03NjksNyAr
NzY5LDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGJpdHdpc2VCaW5hcnlPcChKUwogCiAjaWYg
VVNFKEJJR0lOVDMyKQogICAgIGlmIChsZWZ0TnVtZXJpYy5pc0JpZ0ludDMyKCkgJiYgcmlnaHRO
dW1lcmljLmlzQmlnSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6SlNC
aWdJbnQzMiwgaW50MzJPcChsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1l
cmljLmJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKGludDMy
T3AobGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFz
SW50MzIoKSkpOwogICAgIC8vIEZJWE1FOiBhZGQgZmFzdCBwYXRoIGZvciBCaWdJbnQzMiAvIEhl
YXBCaWdJbnQsIGFuZCBmb3IgSGVhcEJpZ0ludCAvIEJpZ0ludDMyCiAgICAgLy8gSW4gbWFueSBj
YXNlcyB0aGVzZSBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IHRoYW4gaGVhcC1hbGxvY2F0
aW5nIHRoZSBzbWFsbCBiaWctaW50IGFuZCBnb2luZyB0aHJvdWdoIHRoZSBnZW5lcmljIHBhdGgu
CiAgICAgLy8gQnV0IGl0IGlzIHF1aXRlIHRyaWNreSwgbm90IGxlYXN0IGJlY2F1c2UgSGVhcEJp
Z0ludCB1c2UgYSBzaWduIGJpdCB3aGVyZWFzIEJpZ0ludDMyIHVzZSAyLWNvbXBsZW1lbnQgcmVw
cmVzZW50YXRpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397523</attachid>
            <date>2020-04-24 15:53:40 -0700</date>
            <delta_ts>2020-04-24 17:04:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>71410</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjA2NzcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDMwIEBACisyMDIwLTA0LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldHVybiBCaWdJbnQzMiB3aGVuZXZlciB3ZSBjYW4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDkyMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtz
L3N1bnNwaWRlci1zaGExLWJpZy1pbnQuanM6IEFkZGVkLgorICAgICAgICAoaGV4X3NoYTEpOgor
ICAgICAgICAoYjY0X3NoYTEpOgorICAgICAgICAoc3RyX3NoYTEpOgorICAgICAgICAoaGV4X2ht
YWNfc2hhMSk6CisgICAgICAgIChiNjRfaG1hY19zaGExKToKKyAgICAgICAgKHN0cl9obWFjX3No
YTEpOgorICAgICAgICAoYmlnSW50VG9JbnQzMik6CisgICAgICAgIChzaGExX3ZtX3Rlc3QpOgor
ICAgICAgICAoY29yZV9zaGExKToKKyAgICAgICAgKHNoYTFfZnQpOgorICAgICAgICAoc2hhMV9r
dCk6CisgICAgICAgIChjb3JlX2htYWNfc2hhMSk6CisgICAgICAgIChzYWZlX2FkZCk6CisgICAg
ICAgIChyb2wpOgorICAgICAgICAoc3RyMmJpbmIpOgorICAgICAgICAoYmluYjJoZXgpOgorICAg
ICAgICAoYmluYjJiNjQpOgorICAgICAgICAocnVuKToKKwogMjAyMC0wNC0yNCAgWXVzdWtlIFN1
enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIERGRyBjb21wYXJlIHNo
b3VsZCBzcGVjdWxhdGUgQmlnSW50IHdlbGwKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L3N1bnNwaWRlci1zaGExLWJpZy1pbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2Jl
bmNobWFya3Mvc3Vuc3BpZGVyLXNoYTEtYmlnLWludC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9zdW5zcGlkZXItc2hhMS1iaWctaW50LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9u
IG9mIHRoZSBTZWN1cmUgSGFzaCBBbGdvcml0aG0sIFNIQS0xLCBhcyBkZWZpbmVkCisgKiBpbiBG
SVBTIFBVQiAxODAtMQorICogVmVyc2lvbiAyLjFhIENvcHlyaWdodCBQYXVsIEpvaG5zdG9uIDIw
MDAgLSAyMDAyLgorICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBl
cnQsIFlkbmFyLCBMb3N0aW5ldAorICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNl
CisgKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgZGV0YWlscy4KKyAq
LworCisvKgorICogQ29uZmlndXJhYmxlIHZhcmlhYmxlcy4gWW91IG1heSBuZWVkIHRvIHR3ZWFr
IHRoZXNlIHRvIGJlIGNvbXBhdGlibGUgd2l0aAorICogdGhlIHNlcnZlci1zaWRlLCBidXQgdGhl
IGRlZmF1bHRzIHdvcmsgaW4gbW9zdCBjYXNlcy4KKyAqLwordmFyIGhleGNhc2UgPSAwbjsgIC8q
IGhleCBvdXRwdXQgZm9ybWF0LiAwIC0gbG93ZXJjYXNlOyAxIC0gdXBwZXJjYXNlICAgICAgICAq
LwordmFyIGI2NHBhZCAgPSAiIjsgLyogYmFzZS02NCBwYWQgY2hhcmFjdGVyLiAiPSIgZm9yIHN0
cmljdCBSRkMgY29tcGxpYW5jZSAgICovCit2YXIgY2hyc3ogICA9IDg7ICAvKiBiaXRzIHBlciBp
bnB1dCBjaGFyYWN0ZXIuIDggLSBBU0NJSTsgMTYgLSBVbmljb2RlICAgICAgKi8KKworLyoKKyAq
IFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHlvdSdsbCB1c3VhbGx5IHdhbnQgdG8gY2FsbAorICog
VGhleSB0YWtlIHN0cmluZyBhcmd1bWVudHMgYW5kIHJldHVybiBlaXRoZXIgaGV4IG9yIGJhc2Ut
NjQgZW5jb2RlZCBzdHJpbmdzCisgKi8KK2Z1bmN0aW9uIGhleF9zaGExKHMpe3JldHVybiBiaW5i
MmhleChjb3JlX3NoYTEoc3RyMmJpbmIocykscy5sZW5ndGggKiBjaHJzeikpO30KK2Z1bmN0aW9u
IGI2NF9zaGExKHMpe3JldHVybiBiaW5iMmI2NChjb3JlX3NoYTEoc3RyMmJpbmIocykscy5sZW5n
dGggKiBjaHJzeikpO30KK2Z1bmN0aW9uIHN0cl9zaGExKHMpe3JldHVybiBiaW5iMnN0cihjb3Jl
X3NoYTEoc3RyMmJpbmIocykscy5sZW5ndGggKiBjaHJzeikpO30KK2Z1bmN0aW9uIGhleF9obWFj
X3NoYTEoa2V5LCBkYXRhKXsgcmV0dXJuIGJpbmIyaGV4KGNvcmVfaG1hY19zaGExKGtleSwgZGF0
YSkpO30KK2Z1bmN0aW9uIGI2NF9obWFjX3NoYTEoa2V5LCBkYXRhKXsgcmV0dXJuIGJpbmIyYjY0
KGNvcmVfaG1hY19zaGExKGtleSwgZGF0YSkpO30KK2Z1bmN0aW9uIHN0cl9obWFjX3NoYTEoa2V5
LCBkYXRhKXsgcmV0dXJuIGJpbmIyc3RyKGNvcmVfaG1hY19zaGExKGtleSwgZGF0YSkpO30KKwor
ZnVuY3Rpb24gYmlnSW50VG9JbnQzMihiKSB7CisgICAgcmV0dXJuIHBhcnNlSW50KGIudG9TdHJp
bmcoKSwgMTApOworfQorCisvKgorICogUGVyZm9ybSBhIHNpbXBsZSBzZWxmLXRlc3QgdG8gc2Vl
IGlmIHRoZSBWTSBpcyB3b3JraW5nCisgKi8KK2Z1bmN0aW9uIHNoYTFfdm1fdGVzdCgpCit7Cisg
ICAgcmV0dXJuIGhleF9zaGExKCJhYmMiKSA9PSAiYTk5OTNlMzY0NzA2ODE2YWJhM2UyNTcxNzg1
MGMyNmM5Y2QwZDg5ZCI7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIFNIQS0xIG9mIGFuIGFy
cmF5IG9mIGJpZy1lbmRpYW4gd29yZHMsIGFuZCBhIGJpdCBsZW5ndGgKKyAqLworLy94ID09IHN0
cgorLy9sZW4gPT0gaTMyCitmdW5jdGlvbiBjb3JlX3NoYTEoeCwgbGVuKQoreworICAgIC8qIGFw
cGVuZCBwYWRkaW5nICovCisKKyAgICBpZiAoeFtsZW4gPj4gNV0gPT09IHVuZGVmaW5lZCkKKyAg
ICAgICAgeFtsZW4gPj4gNV0gPSAwbjsKKyAgICBpZiAoeFsoKGxlbiArIDY0ID4+IDkpIDw8IDQp
ICsgMTVdID09PSB1bmRlZmluZWQpCisgICAgICAgIHhbKChsZW4gKyA2NCA+PiA5KSA8PCA0KSAr
IDE1XSA9IDBuOworCisgICAgeFtsZW4gPj4gNV0gfD0gMHg4MG4gPDwgKDI0biAtIEJpZ0ludChs
ZW4pICUgMzJuKTsKKyAgICB4WygobGVuICsgNjQgPj4gOSkgPDwgNCkgKyAxNV0gPSBCaWdJbnQo
bGVuKTsKKworICAgIHZhciB3ID0gQXJyYXkoODApOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
dy5sZW5ndGg7ICsraSkgeworICAgICAgICB3W2ldID0gMG47CisgICAgfQorICAgIHZhciBhID0g
MTczMjU4NDE5M247CisgICAgdmFyIGIgPSAtMjcxNzMzODc5bjsKKyAgICB2YXIgYyA9IC0xNzMy
NTg0MTk0bjsKKyAgICB2YXIgZCA9ICAyNzE3MzM4NzhuOworICAgIHZhciBlID0gLTEwMDk1ODk3
NzZuOworCisgICAgZm9yKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KQorICAgIHsK
KyAgICAgICAgdmFyIG9sZGEgPSBhOworICAgICAgICB2YXIgb2xkYiA9IGI7CisgICAgICAgIHZh
ciBvbGRjID0gYzsKKyAgICAgICAgdmFyIG9sZGQgPSBkOworICAgICAgICB2YXIgb2xkZSA9IGU7
CisKKyAgICAgICAgZm9yKHZhciBqID0gMDsgaiA8IDgwOyBqKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChqIDwgMTYpIHdbal0gPSB4W2kgKyBqXSB8fCAwbjsKKyAgICAgICAgICAgIGVs
c2Ugd1tqXSA9IHJvbCgod1tqLTNdIHx8IDBuKSBeICh3W2otOF0gfHwgMG4pIF4gKHdbai0xNF0g
fHwgMG4pIF4gKHdbai0xNl0gfHwgMG4pLCAxKTsKKyAgICAgICAgICAgIHZhciB0ID0gc2FmZV9h
ZGQoc2FmZV9hZGQocm9sKGEsIDUpLCBzaGExX2Z0KGosIGIsIGMsIGQpKSwKKyAgICAgICAgICAg
ICAgICBzYWZlX2FkZChzYWZlX2FkZChlLCB3W2pdKSwgc2hhMV9rdChCaWdJbnQoaikpKSk7Cisg
ICAgICAgICAgICBlID0gZDsKKyAgICAgICAgICAgIGQgPSBjOworCisgICAgICAgICAgICBjID0g
cm9sKGIsIDMwKTsKKyAgICAgICAgICAgIGIgPSBhOworICAgICAgICAgICAgYSA9IHQ7CisgICAg
ICAgIH0KKworICAgICAgICBhID0gc2FmZV9hZGQoYSwgb2xkYSk7CisgICAgICAgIGIgPSBzYWZl
X2FkZChiLCBvbGRiKTsKKyAgICAgICAgYyA9IHNhZmVfYWRkKGMsIG9sZGMpOworICAgICAgICBk
ID0gc2FmZV9hZGQoZCwgb2xkZCk7CisgICAgICAgIGUgPSBzYWZlX2FkZChlLCBvbGRlKTsKKyAg
ICB9CisgICAgcmV0dXJuIEFycmF5KGEsIGIsIGMsIGQsIGUpOworCit9CisKKy8qCisgKiBQZXJm
b3JtIHRoZSBhcHByb3ByaWF0ZSB0cmlwbGV0IGNvbWJpbmF0aW9uIGZ1bmN0aW9uIGZvciB0aGUg
Y3VycmVudAorICogaXRlcmF0aW9uCisgKi8KK2Z1bmN0aW9uIHNoYTFfZnQodCwgYiwgYywgZCkK
K3sKKyAgICBpZih0IDwgMjApIHJldHVybiAoYiAmIGMpIHwgKCh+YikgJiBkKTsKKyAgICBpZih0
IDwgNDApIHJldHVybiBiIF4gYyBeIGQ7CisgICAgaWYodCA8IDYwKSByZXR1cm4gKGIgJiBjKSB8
IChiICYgZCkgfCAoYyAmIGQpOworICAgIHJldHVybiBiIF4gYyBeIGQ7Cit9CisKKy8qCisgKiBE
ZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGFkZGl0aXZlIGNvbnN0YW50IGZvciB0aGUgY3VycmVu
dCBpdGVyYXRpb24KKyAqLworZnVuY3Rpb24gc2hhMV9rdCh0KQoreworICAgIHJldHVybiAodCA8
IDIwbikgPyAgMTUxODUwMDI0OW4gOiAodCA8IDQwbikgPyAgMTg1OTc3NTM5M24gOgorICAgICAg
ICAodCA8IDYwbikgPyAtMTg5NDAwNzU4OG4gOiAtODk5NDk3NTE0bjsKK30KKworLyoKKyAqIENh
bGN1bGF0ZSB0aGUgSE1BQy1TSEExIG9mIGEga2V5IGFuZCBzb21lIGRhdGEKKyAqLworZnVuY3Rp
b24gY29yZV9obWFjX3NoYTEoa2V5LCBkYXRhKQoreworICAgIHRocm93IG5ldyBFcnJvcigiQmFk
IikKKyAgICB2YXIgYmtleSA9IHN0cjJiaW5iKGtleSk7CisgICAgaWYoYmtleS5sZW5ndGggPiAx
NikgYmtleSA9IGNvcmVfc2hhMShia2V5LCBrZXkubGVuZ3RoICogY2hyc3opOworCisgICAgdmFy
IGlwYWQgPSBBcnJheSgxNiksIG9wYWQgPSBBcnJheSgxNik7CisgICAgZm9yKHZhciBpID0gMDsg
aSA8IDE2OyBpKyspCisgICAgeworICAgICAgICBpcGFkW2ldID0gYmtleVtpXSBeIDB4MzYzNjM2
MzZuOworICAgICAgICBvcGFkW2ldID0gYmtleVtpXSBeIDB4NUM1QzVDNUNuOworICAgIH0KKwor
ICAgIHZhciBoYXNoID0gY29yZV9zaGExKGlwYWQuY29uY2F0KHN0cjJiaW5iKGRhdGEpKSwgNTEy
ICsgZGF0YS5sZW5ndGggKiBjaHJzeik7CisgICAgcmV0dXJuIGNvcmVfc2hhMShvcGFkLmNvbmNh
dChoYXNoKSwgNTEyICsgMTYwKTsKK30KKworLyoKKyAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcg
YXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHkKKyAqIHRvIHdv
cmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuCisgKi8KKy8vIGJpZ2ludHMK
K2Z1bmN0aW9uIHNhZmVfYWRkKHgsIHkpCit7CisgICAgdmFyIGxzdyA9ICh4ICYgMHhGRkZGbikg
KyAoeSAmIDB4RkZGRm4pOworICAgIHZhciBtc3cgPSAoKHggPj4gMTZuKSAmIDB4RkZGRm4pICsg
KCh5ID4+IDE2bikgJiAweEZGRkZuKSArICgobHN3ID4+IDE2bikgJiAweEZGRkZuKTsKKyAgICBs
ZXQgciA9IChtc3cgPDwgMTZuKSB8IChsc3cgJiAweEZGRkZuKTsKKyAgICByZXR1cm4gcjsKK30K
KworLyoKKyAqIEJpdHdpc2Ugcm90YXRlIGEgMzItYml0IG51bWJlciB0byB0aGUgbGVmdC4KKyAq
LworLy8gYmlnaW50cyBhcmd1bWVudHMKK2Z1bmN0aW9uIHJvbChudW0sIGNudCkKK3sKKyAgICBs
ZXQgcmhzID0gKG51bSA+PiAoMzJuIC0gQmlnSW50KGNudCkpKTsKKyAgICBsZXQgbWFzayA9IEJp
Z0ludCgoMSA8PCBjbnQpIC0gMSk7CisgICAgcmhzID0gcmhzICYgbWFzazsKKyAgICBsZXQgcmVz
dWx0ID0gKChudW0gPDwgQmlnSW50KGNudCkpICYgMHhGRkZGRkZGRm4pIHwgcmhzOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIDgtYml0IG9yIDE2LWJpdCBzdHJp
bmcgdG8gYW4gYXJyYXkgb2YgYmlnLWVuZGlhbiB3b3JkcworICogSW4gOC1iaXQgZnVuY3Rpb24s
IGNoYXJhY3RlcnMgPjI1NSBoYXZlIHRoZWlyIGhpLWJ5dGUgc2lsZW50bHkgaWdub3JlZC4KKyAq
LworZnVuY3Rpb24gc3RyMmJpbmIoc3RyKQoreworICAgIHZhciBiaW4gPSBBcnJheSgpOworICAg
IHZhciBtYXNrID0gKCgxIDw8IGNocnN6KSAtIDEpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c3RyLmxlbmd0aCAqIGNocnN6OyBpICs9IGNocnN6KSB7CisgICAgICAgIGlmIChiaW5baT4+NV0g
PT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIGJpbltpPj41XSA9IDBuOworICAgICAgICBiaW5b
aT4+NV0gfD0gQmlnSW50KChzdHIuY2hhckNvZGVBdChpIC8gY2hyc3opICYgbWFzaykgPDwgKDMy
IC0gY2hyc3ogLSBpJTMyKSk7CisgICAgfQorICAgIHJldHVybiBiaW47Cit9CisKKy8qCisgKiBD
b252ZXJ0IGFuIGFycmF5IG9mIGJpZy1lbmRpYW4gd29yZHMgdG8gYSBzdHJpbmcKKyAqLworCisv
KgorICogQ29udmVydCBhbiBhcnJheSBvZiBiaWctZW5kaWFuIHdvcmRzIHRvIGEgaGV4IHN0cmlu
Zy4KKyAqLworZnVuY3Rpb24gYmluYjJoZXgoYmluYXJyYXkpCit7CisgICAgdmFyIGhleF90YWIg
PSBoZXhjYXNlID8gIjAxMjM0NTY3ODlBQkNERUYiIDogIjAxMjM0NTY3ODlhYmNkZWYiOworICAg
IHZhciBzdHIgPSAiIjsKKyAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmluYXJyYXkubGVuZ3RoICog
NDsgaSsrKQorICAgIHsKKyAgICAgICAgc3RyICs9IGhleF90YWIuY2hhckF0KGJpZ0ludFRvSW50
MzIoKGJpbmFycmF5W2k+PjJdID4+IEJpZ0ludCgoMyAtIGklNCkqOCs0KSkgJiAweEZuKSkgKwor
ICAgICAgICAgICAgaGV4X3RhYi5jaGFyQXQoYmlnSW50VG9JbnQzMigoYmluYXJyYXlbaT4+Ml0g
Pj4gQmlnSW50KCgzIC0gaSU0KSo4KSkgJiAweEZuKSk7CisgICAgfQorICAgIHJldHVybiBzdHI7
Cit9CisKKy8qCisgKiBDb252ZXJ0IGFuIGFycmF5IG9mIGJpZy1lbmRpYW4gd29yZHMgdG8gYSBi
YXNlLTY0IHN0cmluZworICovCitmdW5jdGlvbiBiaW5iMmI2NChiaW5hcnJheSkKK3sKKyAgICB2
YXIgdGFiID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1
dnd4eXowMTIzNDU2Nzg5Ky8iOworICAgIHZhciBzdHIgPSAiIjsKKyAgICBmb3IodmFyIGkgPSAw
OyBpIDwgYmluYXJyYXkubGVuZ3RoICogNDsgaSArPSAzKQorICAgIHsKKyAgICAgICAgdmFyIHRy
aXBsZXQgPSAoKChiaW5hcnJheVtpICAgPj4gMl0gPj4gOCAqICgzIC0gIGkgICAlNCkpICYgMHhG
RikgPDwgMTYpCisgICAgICAgICAgICB8ICgoKGJpbmFycmF5W2krMSA+PiAyXSA+PiA4ICogKDMg
LSAoaSsxKSU0KSkgJiAweEZGKSA8PCA4ICkKKyAgICAgICAgICAgIHwgICgoYmluYXJyYXlbaSsy
ID4+IDJdID4+IDggKiAoMyAtIChpKzIpJTQpKSAmIDB4RkYpOworICAgICAgICBmb3IodmFyIGog
PSAwOyBqIDwgNDsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZihpICogOCArIGogKiA2
ID4gYmluYXJyYXkubGVuZ3RoICogMzIpIHN0ciArPSBiNjRwYWQ7CisgICAgICAgICAgICBlbHNl
IHN0ciArPSB0YWIuY2hhckF0KCh0cmlwbGV0ID4+IDYqKDMtaikpICYgMHgzRik7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHN0cjsKK30KKworCitmdW5jdGlvbiBydW4oKSB7CisgICAg
dmFyIHBsYWluVGV4dCA9CisiVHdvIGhvdXNlaG9sZHMsIGJvdGggYWxpa2UgaW4gZGlnbml0eSxc
blwKK0luIGZhaXIgVmVyb25hLCB3aGVyZSB3ZSBsYXkgb3VyIHNjZW5lLFxuXAorRnJvbSBhbmNp
ZW50IGdydWRnZSBicmVhayB0byBuZXcgbXV0aW55LFxuXAorV2hlcmUgY2l2aWwgYmxvb2QgbWFr
ZXMgY2l2aWwgaGFuZHMgdW5jbGVhbi5cblwKK0Zyb20gZm9ydGggdGhlIGZhdGFsIGxvaW5zIG9m
IHRoZXNlIHR3byBmb2VzXG5cCitBIHBhaXIgb2Ygc3Rhci1jcm9zcydkIGxvdmVycyB0YWtlIHRo
ZWlyIGxpZmU7XG5cCitXaG9sZSBtaXNhZHZlbnR1cmVkIHBpdGVvdXMgb3ZlcnRocm93c1xuXAor
RG8gd2l0aCB0aGVpciBkZWF0aCBidXJ5IHRoZWlyIHBhcmVudHMnIHN0cmlmZS5cblwKK1RoZSBm
ZWFyZnVsIHBhc3NhZ2Ugb2YgdGhlaXIgZGVhdGgtbWFyaydkIGxvdmUsXG5cCitBbmQgdGhlIGNv
bnRpbnVhbmNlIG9mIHRoZWlyIHBhcmVudHMnIHJhZ2UsXG5cCitXaGljaCwgYnV0IHRoZWlyIGNo
aWxkcmVuJ3MgZW5kLCBub3VnaHQgY291bGQgcmVtb3ZlLFxuXAorSXMgbm93IHRoZSB0d28gaG91
cnMnIHRyYWZmaWMgb2Ygb3VyIHN0YWdlO1xuXAorVGhlIHdoaWNoIGlmIHlvdSB3aXRoIHBhdGll
bnQgZWFycyBhdHRlbmQsXG5cCitXaGF0IGhlcmUgc2hhbGwgbWlzcywgb3VyIHRvaWwgc2hhbGwg
c3RyaXZlIHRvIG1lbmQuIjsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDw0OyBpKyspIHsKKyAg
ICAgICAgcGxhaW5UZXh0ICs9IHBsYWluVGV4dDsKKyAgICB9CisKKyAgICB2YXIgc2hhMU91dHB1
dCA9IGhleF9zaGExKHBsYWluVGV4dCk7CisKKyAgICB2YXIgZXhwZWN0ZWQgPSAiMjUyNGQyNjRk
ZWY3NGNjZTI0OThiZjExMmJlZGYwMGU2YzBiNzk2ZCI7CisgICAgaWYgKHNoYTFPdXRwdXQgIT0g
ZXhwZWN0ZWQpCisgICAgICAgIHRocm93ICJFUlJPUjogYmFkIHJlc3VsdDogZXhwZWN0ZWQgIiAr
IGV4cGVjdGVkICsgIiBidXQgZ290ICIgKyBzaGExT3V0cHV0OworfQorCisKK2xldCBzdGFydCA9
IERhdGUubm93KCk7Citmb3IgKGxldCBpID0gMDsgaSA8IDU7ICsraSkKKyAgICBydW4oKTsKKy8v
IHByaW50KCJiZW5jaG1hcmsgdGltZToiLCBEYXRlLm5vdygpIC0gc3RhcnQsICJtcyIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAxIEBACisy
MDIwLTA0LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dHVybiBCaWdJbnQzMiB3aGVuZXZlciB3ZSBjYW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgc28gb3VyIHJ1bnRpbWUg
ZnVuY3Rpb25zIGZvciBiaWcgaW50IG1hdGggb24gaGVhcAorICAgICAgICBiaWcgaW50cyBjb252
ZXJ0cyB0aGUgcmVzdWx0IHRvIGEgYmlnIGludCAzMiB3aGVuIHBvc3NpYmxlLgorICAgICAgICAK
KyAgICAgICAgVGhlIGluc3BpcmF0aW9uIGZvciB0aGlzIHBhdGNoIGNhbWUgZnJvbSBjb252ZXJ0
aW5nIFN1blNwaWRlcidzIHNoYTEgYmVuY2htYXJrIHRvCisgICAgICAgIHVzaW5nIGJpZyBpbnRz
LiBJIGZvdW5kIHRoYXQgdGhhdCBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBiaWcgaW50IDMy
CisgICAgICAgIHdhcyBhIH4zNSUgc2xvd2Rvd24gaGVyZS4gVGhpcyBwYXRjaCBzcGVlZHMgaXQg
dXAgYnkgODYlIGZyb20gVG9ULCBhbmQKKyAgICAgICAgMzYlIGZhc3RlciB0aGFuIGJlZm9yZSBi
aWcgaW50IDMyIHdhcyBpbnRyb2R1Y2VkLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB0aGlz
IHNvdW5kIGluIHRoZSBERkcvRlRMLCB3ZSBhcmUgY3VycmVudGx5IHJlcG9ydGluZyB0aGF0IGFs
bAorICAgICAgICBIZWFwQmlnSW50IG1hdGggb3BzIHJldHVybiBTcGVjQmlnSW50LCBpbnN0ZWFk
IG9mIFNwZWNIZWFwQmlnSW50LgorICAgICAgICBIb3dldmVyLCB3ZSB3YW50IHRvIGRvIGJldHRl
ciBpbiBhIGZvbGxvdyB1cC4gV2UgbmVlZCBzb21lIGtpbmQgb2YgcHJvZmlsaW5nCisgICAgICAg
IHN5c3RlbSB3aGVyZSB3ZSBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIHNwZWN1bGF0ZSBpZiB0aGUg
cmVzdWx0IGlzIGJpZyBpbnQKKyAgICAgICAgMzIsIGEgaGVhcCBiaWcgaW50LCBvciBib3RoOgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTgyCisK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUJpdE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVWYWx1ZUJpdHdpc2VPcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZUxTaGlmdE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlQml0UlNoaWZ0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVZhbHVlTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlRGl2KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVZhbHVlTW9kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlUG93KToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
anNjLmNwcDoKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlQmlnSW50MzIpOgorICAgICAgICAqIHJ1
bnRpbWUvQmlnSW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjp0b0JpZ0ludCk6Cisg
ICAgICAgIChKU0M6OmNhbGxCaWdJbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAg
ICAgICogcnVudGltZS9KU0JpZ0ludC5jcHA6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBv
bmVudGlhdGVIZWFwKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5SGVhcCk6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpkaXZpZGVIZWFwKToKKyAgICAgICAgKEpTQzo6SlNCaWdJ
bnQ6OnVuYXJ5TWludXNIZWFwKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJlbWFpbmRlckhl
YXApOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6aW5jSGVhcCk6CisgICAgICAgIChKU0M6OkpT
QmlnSW50OjpkZWNIZWFwKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFkZEhlYXApOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6c3ViSGVhcCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpi
aXR3aXNlQW5kSGVhcCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlT3JIZWFwKToK
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VYb3JIZWFwKToKKyAgICAgICAgKEpTQzo6
SlNCaWdJbnQ6OmxlZnRTaGlmdEhlYXApOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2lnbmVk
UmlnaHRTaGlmdEhlYXApOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZU5vdEhlYXAp
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBZGQpOgorICAgICAgICAoSlNDOjpK
U0JpZ0ludDo6YWJzb2x1dGVTdWIpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cGFyc2VJbnQp
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6ZXhwb25lbnRpYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmRpdmlkZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp1bmFyeU1p
bnVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJlbWFpbmRlcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjppbmMpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU0JpZ0ludDo6ZGVjKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFkZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpzdWIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZUFuZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
QmlnSW50OjpiaXR3aXNlT3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0
d2lzZVhvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpsZWZ0U2hpZnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlTm90KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmg6
CisgICAgICAgIChKU0M6OmpzQmlnSW50MzIpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1
ZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6SlNWYWx1ZSk6CisgICAgICAgICog
cnVudGltZS9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6anNBZGRTbG93Q2FzZSk6Cisg
ICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OmpzU3ViKToKKyAg
ICAgICAgKEpTQzo6anNNdWwpOgorICAgICAgICAoSlNDOjpqc0Rpdik6CisgICAgICAgIChKU0M6
OmpzSW5jKToKKyAgICAgICAgKEpTQzo6anNEZWMpOgorICAgICAgICAoSlNDOjpqc0JpdHdpc2VO
b3QpOgorICAgICAgICAoSlNDOjpzaGlmdCk6CisgICAgICAgIChKU0M6OmJpdHdpc2VCaW5hcnlP
cCk6CisKIDIwMjAtMDQtMjIgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDb2NvYV0gQnVpbGQgd2l0aCBVQ2hhciBhcyBjaGFyMTZfdCBldmVuIGluIGJ1aWxkcyB0
aGF0IHVzZSBBcHBsZSdzIGludGVybmFsIFNESwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDI2MDU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjkwLDE1ICsyMjkwLDE1IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25DcmUKICAgICBBU1NFUlQoYmlnSW50VmFsdWUuaXNIZWFwQmlnSW50KCkpOwog
ICAgIEpTQmlnSW50KiBiaWdJbnQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihiaWdJbnRWYWx1ZSk7CiAg
ICAgaWYgKCFiaWdJbnQtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgMCkpOworICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQmlnSW50MzIoMCkpOwogICAgIGlmIChiaWdJbnQtPmxlbmd0aCgpID09IDEp
IHsKICAgICAgICAgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0ID0gYmlnSW50LT5kaWdpdCgwKTsKICAg
ICAgICAgaWYgKGJpZ0ludC0+c2lnbigpKSB7CiAgICAgICAgICAgICBpZiAoZGlnaXQgPD0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KC1zdGF0aWNfY2FzdDxpbnQ2NF90PihJTlQzMl9NSU4pKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1ZTo6SlNC
aWdJbnQzMiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXN0YXRpY19jYXN0PGludDY0X3Q+KGRpZ2l0
KSkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQmlnSW50MzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oLXN0YXRpY19jYXN0PGludDY0X3Q+KGRpZ2l0KSkpKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChkaWdpdCA8PSBJTlQzMl9NQVgpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKEpTVmFsdWU6OkpTQmln
SW50MzIsIHN0YXRpY19jYXN0PGludDMyX3Q+KGRpZ2l0KSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihkaWdp
dCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiT3V0IG9mIHJhbmdlIG9mIEJpZ0ludDMyIl9zKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDI2MDU4MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTA4LDkgKzUw
OCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAjZWxzZQog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgotICAgICAg
ICB9IGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBIZWFwQmlnSW50VXNlKQot
ICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0hlYXBCaWdJbnQpOwotICAgICAg
ICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQW55QmlnSW50VXNlKQorICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBIZWFwQmlnSW50VXNl
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugd2lsbCB3YW50IGFuIGFyaXRobWV0aWMgbW9k
ZSBoZXJlIHRoYXQgYWxsb3dzIHVzIHRvIHNwZWN1bGF0ZSBvciBkaWN0YXRlCisgICAgICAgICAg
ICAvLyB0aGUgZm9ybWF0IG9mIG91ciByZXN1bHQ6CisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTgyCisgICAgICAgICAgICBzZXRUeXBl
Rm9yTm9kZShub2RlLCBTcGVjQmlnSW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gQW55QmlnSW50VXNlKQogICAgICAgICAgICAgc2V0VHlwZUZvck5v
ZGUobm9kZSwgU3BlY0JpZ0ludCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY2xvYmJl
cldvcmxkKCk7CkBAIC01NDksOSArNTUyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICNlbHNlCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogI2VuZGlmCi0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgp
ID09IEhlYXBCaWdJbnRVc2UpCi0gICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVj
SGVhcEJpZ0ludCk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBB
bnlCaWdJbnRVc2UpCisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgpID09
IEhlYXBCaWdJbnRVc2UpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSB3aWxsIHdhbnQgYW4g
YXJpdGhtZXRpYyBtb2RlIGhlcmUgdGhhdCBhbGxvd3MgdXMgdG8gc3BlY3VsYXRlIG9yIGRpY3Rh
dGUKKyAgICAgICAgICAgIC8vIHRoZSBmb3JtYXQgb2Ygb3VyIHJlc3VsdDoKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTA5ODIKKyAgICAg
ICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCaWdJbnQpOworICAgICAgICB9IGVsc2Ug
aWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBBbnlCaWdJbnRVc2UpCiAgICAgICAgICAgICBz
ZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQmlnSW50KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICBjbG9iYmVyV29ybGQoKTsKQEAgLTc0MSw5ICs3NDcsMTIgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiAgICAgY2FzZSBWYWx1ZVN1YjoKICAgICBjYXNl
IFZhbHVlQWRkOiB7Ci0gICAgICAgIGlmIChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gSGVhcEJp
Z0ludFVzZSkKLSAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNIZWFwQmlnSW50
KTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEFueUJpZ0ludFVz
ZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQmlnSW50MzJVc2UpCisgICAgICAgIGlmIChu
b2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gSGVhcEJpZ0ludFVzZSkgeworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHdpbGwgd2FudCBhbiBhcml0aG1ldGljIG1vZGUgaGVyZSB0aGF0IGFsbG93cyB1
cyB0byBzcGVjdWxhdGUgb3IgZGljdGF0ZQorICAgICAgICAgICAgLy8gdGhlIGZvcm1hdCBvZiBv
dXIgcmVzdWx0OgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMDk4MgorICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0Jp
Z0ludCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEFueUJp
Z0ludFVzZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQmlnSW50MzJVc2UpCiAgICAgICAg
ICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQmlnSW50KTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmJpbmFyeVVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlKTsKQEAgLTk4Miw3ICs5OTEsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2Rl
KG5vZGUsIHR5cGVPZkRvdWJsZUluY09yRGVjKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSGVhcEJpZ0ludFVzZToKLSAg
ICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNIZWFwQmlnSW50KTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSB3aWxsIHdhbnQgYW4gYXJpdGhtZXRpYyBtb2RlIGhlcmUgdGhhdCBh
bGxvd3MgdXMgdG8gc3BlY3VsYXRlIG9yIGRpY3RhdGUKKyAgICAgICAgICAgIC8vIHRoZSBmb3Jt
YXQgb2Ygb3VyIHJlc3VsdDoKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTA5ODIKKyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUs
IFNwZWNCaWdJbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQW55QmlnSW50
VXNlOgogICAgICAgICBjYXNlIEJpZ0ludDMyVXNlOgpAQCAtMTAwOSw5ICsxMDIxLDEyIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBIZWFw
QmlnSW50VXNlKQotICAgICAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0hlYXBCaWdJ
bnQpOwotICAgICAgICBlbHNlIGlmIChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQW55QmlnSW50
VXNlIHx8IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBCaWdJbnQzMlVzZSkKKyAgICAgICAgaWYg
KG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBIZWFwQmlnSW50VXNlKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugd2lsbCB3YW50IGFuIGFyaXRobWV0aWMgbW9kZSBoZXJlIHRoYXQgYWxsb3dz
IHVzIHRvIHNwZWN1bGF0ZSBvciBkaWN0YXRlCisgICAgICAgICAgICAvLyB0aGUgZm9ybWF0IG9m
IG91ciByZXN1bHQ6CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEwOTgyCisgICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVj
QmlnSW50KTsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQW55
QmlnSW50VXNlIHx8IG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBCaWdJbnQzMlVzZSkKICAgICAg
ICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCaWdJbnQpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwpAQCAtMTAyMiw5ICsxMDM3LDEyIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIAogICAgIGNhc2UgVmFsdWVNdWw6
IHsKICAgICAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGNvZGUgbm90IHNoYXJlZCB3aXRoIFZh
bHVlU3ViPwotICAgICAgICBpZiAobm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEhlYXBCaWdJbnRV
c2UpCi0gICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjSGVhcEJpZ0ludCk7Ci0g
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBBbnlCaWdJbnRVc2UgfHwg
bm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEJpZ0ludDMyVXNlKQorICAgICAgICBpZiAobm9kZS0+
YmluYXJ5VXNlS2luZCgpID09IEhlYXBCaWdJbnRVc2UpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSB3aWxsIHdhbnQgYW4gYXJpdGhtZXRpYyBtb2RlIGhlcmUgdGhhdCBhbGxvd3MgdXMgdG8g
c3BlY3VsYXRlIG9yIGRpY3RhdGUKKyAgICAgICAgICAgIC8vIHRoZSBmb3JtYXQgb2Ygb3VyIHJl
c3VsdDoKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTA5ODIKKyAgICAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCaWdJbnQp
OworICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSA9PSBBbnlCaWdJbnRV
c2UgfHwgbm9kZS0+YmluYXJ5VXNlS2luZCgpID09IEJpZ0ludDMyVXNlKQogICAgICAgICAgICAg
c2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0JpZ0ludCk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgY2xvYmJlcldvcmxkKCk7CkBAIC0xMDg4LDkgKzExMDYsMTIgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRE
aXZPcChub2RlKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlmIChub2RlLT5iaW5h
cnlVc2VLaW5kKCkgPT0gSGVhcEJpZ0ludFVzZSkKLSAgICAgICAgICAgIHNldFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNIZWFwQmlnSW50KTsKLSAgICAgICAgZWxzZSBpZiAobm9kZS0+YmluYXJ5VXNl
S2luZCgpID09IEFueUJpZ0ludFVzZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gQmlnSW50
MzJVc2UpCisgICAgICAgIGlmIChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gSGVhcEJpZ0ludFVz
ZSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHdpbGwgd2FudCBhbiBhcml0aG1ldGljIG1v
ZGUgaGVyZSB0aGF0IGFsbG93cyB1cyB0byBzcGVjdWxhdGUgb3IgZGljdGF0ZQorICAgICAgICAg
ICAgLy8gdGhlIGZvcm1hdCBvZiBvdXIgcmVzdWx0OgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDk4MgorICAgICAgICAgICAgc2V0VHlw
ZUZvck5vZGUobm9kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+Ymlu
YXJ5VXNlS2luZCgpID09IEFueUJpZ0ludFVzZSB8fCBub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0g
QmlnSW50MzJVc2UpCiAgICAgICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQmlnSW50
KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjYw
NTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIHByaXZhdGU6CiAjaWYgVVNFKEJJR0lOVDMy
KQogICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
QmlnSW50MzIoKSkgewogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKG9wID09IEluYyA/IFZh
bHVlQWRkIDogVmFsdWVTdWIpOwotICAgICAgICAgICAgICAgIG5vZGVDb25zdGFudE9uZSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUobV9pbmRleEluQmxvY2ssIFNwZWNCaWdJbnQzMiwgSlND
b25zdGFudCwgbm9kZS0+b3JpZ2luLCBPcEluZm8obV9ncmFwaC5mcmVlemUoSlNWYWx1ZShKU1Zh
bHVlOjpKU0JpZ0ludDMyLCAxKSkpKTsKKyAgICAgICAgICAgICAgICBub2RlQ29uc3RhbnRPbmUg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG1faW5kZXhJbkJsb2NrLCBTcGVjQmlnSW50MzIs
IEpTQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzQmlnSW50
MzIoMSkpKSk7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2Uo
bm9kZUNvbnN0YW50T25lKSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxCaWdJbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8QmlnSW50MzJVc2U+KG5v
ZGUtPmNoaWxkMigpKTsKQEAgLTIyNCw3ICsyMjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiB0aGUgZnJlZXppbmcgZG9lcyBub3QgYXBwZWFyIHVzZWZ1bCAoc2luY2Ug
dGhlIEpTQ2VsbCBpcyBrZXB0IGFsaXZlIGJ5IHZtKSwgYnV0IGl0IHJlZnVzZXMgdG8gY29tcGls
ZSBvdGhlcndpc2UuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdlIG1pZ2h0IG9wdGltaXpl
IGluYy9kZWMgdG8gYSBzcGVjaWFsaXplZCBmdW5jdGlvbiBjYWxsIGluc3RlYWQgaW4gdGhhdCBj
YXNlLgogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKG9wID09IEluYyA/IFZhbHVlQWRkIDog
VmFsdWVTdWIpOwotICAgICAgICAgICAgICAgIG5vZGVDb25zdGFudE9uZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUobV9pbmRleEluQmxvY2ssIFNwZWNCaWdJbnQzMiwgSlNDb25zdGFudCwg
bm9kZS0+b3JpZ2luLCBPcEluZm8obV9ncmFwaC5mcmVlemUoSlNWYWx1ZShKU1ZhbHVlOjpKU0Jp
Z0ludDMyLCAxKSkpKTsKKyAgICAgICAgICAgICAgICBub2RlQ29uc3RhbnRPbmUgPSBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKG1faW5kZXhJbkJsb2NrLCBTcGVjQmlnSW50MzIsIEpTQ29uc3Rh
bnQsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzQmlnSW50MzIoMSkpKSk7
CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2Uobm9kZUNvbnN0
YW50T25lKSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxBbnlCaWdJbnRVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgICAgICBmaXhFZGdlPEFueUJpZ0ludFVzZT4obm9kZS0+Y2hp
bGQyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM4LDcgKzEzMzgsNyBAQCBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCByZWdleHAtPnRlc3QoZ2xvYmFsT2JqZWN0LCBpbnB1dCkpOwogfQogCi1KU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3ViSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpCitFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN1YkhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CkBAIC0xMzQ3LDEwICsxMzQ3LDEwIEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25TdWJIZWFwQmkKICAgICBKU0JpZ0ludCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJ
bnQqPihvcDEpOwogICAgIEpTQmlnSW50KiByaWdodE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQq
PihvcDIpOwogICAgIAotICAgIHJldHVybiBKU0JpZ0ludDo6c3ViKGdsb2JhbE9iamVjdCwgbGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Jp
Z0ludDo6c3ViKGdsb2JhbE9iamVjdCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpOwogfQog
Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9wMSkKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0NlbGwqIG9wMSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAt
MTM1OCwxMCArMTM1OCwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0Tm90
SGVhCiAKICAgICBKU0JpZ0ludCogb3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CiAK
LSAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VOb3QoZ2xvYmFsT2JqZWN0LCBvcGVyYW5kKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50OjpiaXR3aXNlTm90KGdsb2JhbE9i
amVjdCwgb3BlcmFuZCkpOwogfQogCi1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTXVs
SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9wMSwgSlND
ZWxsKiBvcDIpCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk11bEhlYXBC
aWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCog
b3AyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CkBAIC0xMzcwLDEwICsxMzcwLDEw
IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NdWxIZWFwQmkKICAgICBKU0JpZ0lu
dCogbGVmdE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDEpOwogICAgIEpTQmlnSW50KiBy
aWdodE9wZXJhbmQgPSBqc0Nhc3Q8SlNCaWdJbnQqPihvcDIpOwogCi0gICAgcmV0dXJuIEpTQmln
SW50OjptdWx0aXBseShnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6Om11bHRpcGx5KGdsb2JhbE9iamVj
dCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpOwogfQogICAgIAotSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk1vZEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25Nb2RIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Q2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpA
QCAtMTM4MiwxMCArMTM4MiwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTW9k
SGVhcEJpCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3Ax
KTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AyKTsK
ICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OnJlbWFpbmRlcihnbG9iYWxPYmplY3QsIGxlZnRP
cGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJ
bnQ6OnJlbWFpbmRlcihnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTsK
IH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpdkhlYXBCaWdJbnQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXZIZWFwQmlnSW50KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNM
QVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMTM5NCwxMCArMTM5NCwxMCBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uRGl2SGVhcEJpCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0g
anNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganND
YXN0PEpTQmlnSW50Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmRpdmlkZShn
bG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNCaWdJbnQ6OmRpdmlkZShnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCBy
aWdodE9wZXJhbmQpKTsKIH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvd0hl
YXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2Vs
bCogb3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3dIZWFwQmln
SW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9w
MikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMTQwNiwxMCArMTQwNiwxMCBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUG93SGVhcEJpCiAgICAgSlNCaWdJbnQq
IGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmln
aHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNC
aWdJbnQ6OmV4cG9uZW50aWF0ZShnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZShn
bG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTsKIH0KIAotSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdEFuZEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25CaXRBbmRIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwpAQCAtMTQxOCwxMCArMTQxOCwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQml0QW5kSGVhCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpT
QmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmln
SW50Kj4ob3AyKTsKIAotICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZUFuZChnbG9iYWxPYmpl
Y3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNCaWdJbnQ6OmJpdHdpc2VBbmQoZ2xvYmFsT2JqZWN0LCBsZWZ0T3BlcmFuZCwgcmlnaHRP
cGVyYW5kKSk7CiB9CiAKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRMU2hpZnRI
ZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0Nl
bGwqIG9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0TFNoaWZ0
SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9wMSwgSlND
ZWxsKiBvcDIpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKQEAgLTE0MzAsMTAgKzE0
MzAsMTAgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdExTaGlmdAogICAgIEpT
QmlnSW50KiBsZWZ0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CiAgICAgSlNCaWdJ
bnQqIHJpZ2h0T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMik7CiAKLSAgICByZXR1cm4g
SlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9i
YWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTsKIH0KIAotSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkFkZEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25BZGRIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0p
OwpAQCAtMTQ0MiwxMCArMTQ0MiwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
QWRkSGVhcEJpCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4o
b3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4ob3Ay
KTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmFkZChnbG9iYWxPYmplY3QsIGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6
OmFkZChnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTsKIH0KIAotSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFJTaGlmdEhlYXBCaWdJbnQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKQorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRSU2hpZnRIZWFwQmlnSW50KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBE
RUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMTQ1NCwxMCArMTQ1NCwxMCBAQCBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQml0UlNoaWZ0CiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5k
ID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0g
anNDYXN0PEpTQmlnSW50Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OnNpZ25l
ZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KGdsb2Jh
bE9iamVjdCwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpOwogfQogCi1KU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uQml0T3JIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uQml0T3JIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUo
dm0pOwpAQCAtMTQ2NiwxMCArMTQ2NiwxMCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQml0T3JIZWFwCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50
Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0ganNDYXN0PEpTQmlnSW50Kj4o
b3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VPcihnbG9iYWxPYmplY3Qs
IGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNCaWdJbnQ6OmJpdHdpc2VPcihnbG9iYWxPYmplY3QsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJh
bmQpKTsKIH0KIAotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFhvckhlYXBCaWdJ
bnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3Ay
KQorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRYb3JIZWFwQmlnSW50
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMTQ3OCw3ICsxNDc4LDcgQEAgSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdFhvckhlYQogICAgIEpTQmlnSW50KiBsZWZ0
T3BlcmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMSk7CiAgICAgSlNCaWdJbnQqIHJpZ2h0T3Bl
cmFuZCA9IGpzQ2FzdDxKU0JpZ0ludCo+KG9wMik7CiAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmJp
dHdpc2VYb3IoZ2xvYmFsT2JqZWN0LCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50OjpiaXR3aXNlWG9yKGdsb2JhbE9iamVjdCwg
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpOwogfQogCiBzaXplX3QgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXFDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDE4ICsxODMs
MTggQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAogc2l6ZV90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChKU0dsb2JhbE9iamVjdCosIFJlZ0V4cE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25SZWdFeHBUZXN0R2VuZXJpYyhKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogc2l6ZV90IEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxQ2VsbChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3Ax
LCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN1YkhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBv
cDIpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NdWxIZWFw
QmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5U
RVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTW9kSGVhcEJpZ0ludChKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpdkhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25Qb3dIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBv
cDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQml0QW5kSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0Nl
bGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJp
dE5vdEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSkgV1RGX0lOVEVSTkFM
OwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdE9ySGVhcEJpZ0ludChKU0dsb2Jh
bE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdExTaGlmdEhlYXBCaWdJbnQoSlNHbG9iYWxPYmpl
Y3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsKLUpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25BZGRIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7Ci1KU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQml0UlNoaWZ0SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3Ax
LCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOwotSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkJpdFhvckhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxs
KiBvcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3ViSGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9w
MikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25N
dWxIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBX
VEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1vZEhl
YXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9J
TlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGl2SGVhcEJp
Z0ludChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3dIZWFwQmlnSW50
KEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7
CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdEFuZEhlYXBCaWdJbnQo
SlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludChK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCogb3AxKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkJpdE9ySGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRMU2hpZnRIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0
KiwgSlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFkZEhlYXBCaWdJbnQoSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqIG9wMSwgSlNDZWxsKiBvcDIpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQml0UlNoaWZ0SGVhcEJpZ0ludChKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCogb3AxLCBKU0NlbGwqIG9wMikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25CaXRYb3JIZWFwQmlnSW50KEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiBvcDEsIEpTQ2VsbCogb3AyKSBXVEZfSU5URVJOQUw7CiBzaXplX3QgSklUX09QRVJB
VElPTiBvcGVyYXRpb25TYW1lVmFsdWUoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0KFZNKiwgU3RydWN0dXJlKiwgSlNTY29wZSosIFN5
bWJvbFRhYmxlKiwgRW5jb2RlZEpTVmFsdWUpOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cyhWTSosIFN0cnVjdHVyZSosIHVpbnQzMl90IGxlbmd0
aCwgdWludDMyX3QgbWluQ2FwYWNpdHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDI2MDU4MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNTc0LDEyICszNTc0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1
ZUJpdE5vdCgKICAgICAgICAgc3BlY3VsYXRlSGVhcEJpZ0ludChjaGlsZDEsIG9wZXJhbmRHUFIp
OwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogCi0gICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgb3BlcmFuZEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uQml0Tm90SGVhcEJpZ0ludCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIG9wZXJhbmRHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3
NDUsNyArMzc0NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUJpdHdpc2UK
ICAgICAvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIG1peGVkIEJpZ0ludDMyIC8gSGVhcEJpZ0lu
dAogI2VuZGlmCiAKLSAgICBpZiAobGVmdENoaWxkLnVzZUtpbmQoKSA9PSBIZWFwQmlnSW50VXNl
ICYmIHJpZ2h0Q2hpbGQudXNlS2luZCgpID09IEhlYXBCaWdJbnRVc2UpIHsKKyAgICBpZiAobm9k
ZS0+YmluYXJ5VXNlS2luZCgpID09IEhlYXBCaWdJbnRVc2UpIHsKICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgbGVmdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHJpZ2h0KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgR1BSUmVn
IGxlZnRHUFIgPSBsZWZ0LmdwcigpOwpAQCAtMzc1NSwyNSArMzc1NSwyNSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVCaXR3aXNlCiAgICAgICAgIHNwZWN1bGF0ZUhlYXBCaWdJ
bnQocmlnaHRDaGlsZCwgcmlnaHRHUFIpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBy
ZXN1bHQucmVncygpOwogCiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBWYWx1
ZUJpdEFuZDoKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0QW5kSGVhcEJp
Z0ludCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmln
aHRHUFIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25CaXRBbmRIZWFwQmln
SW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmln
aHRHUFIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFsdWVCaXRYb3I6Ci0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdFhvckhlYXBCaWdJbnQsIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0WG9ySGVhcEJpZ0ludCwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhbHVlQml0T3I6Ci0gICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkJpdE9ySGVhcEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOworICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25CaXRPckhlYXBCaWdJbnQsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQUik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIH0KIAogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM5NDYsMTIg
KzM5NDYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTFNoaWZ0TwogICAg
ICAgICBzcGVjdWxhdGVIZWFwQmlnSW50KHJpZ2h0Q2hpbGQsIHJpZ2h0R1BSKTsKIAogICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQo
dGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
IEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKIAotICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkJpdExTaGlmdEhlYXBCaWdJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25CaXRMU2hpZnRIZWFwQmlnSW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwogICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOwotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTM5NzQsMTIgKzM5NzQsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZh
bHVlQml0UlNoaQogICAgICAgICBzcGVjdWxhdGVIZWFwQmlnSW50KHJpZ2h0Q2hpbGQsIHJpZ2h0
R1BSKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0UlNoaWZ0SGVhcEJpZ0lu
dCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRH
UFIpOworICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQml0UlNoaWZ0SGVhcEJpZ0ludCwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTQwODIsMTIgKzQwODIsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgICAgICBzcGVjdWxhdGVIZWFwQmlnSW50KHJp
Z2h0Q2hpbGQsIHJpZ2h0R1BSKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWRk
SGVhcEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQ
UiwgcmlnaHRHUFIpOworICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQWRkSGVhcEJpZ0ludCwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0R1BSKTsKICAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQxODgsMTMgKzQxODgsMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVZhbHVlU3ViKE5vZAogICAgICAgICBzcGVjdWxhdGVIZWFwQmlnSW50
KHJpZ2h0Q2hpbGQsIHJpZ2h0R1BSKTsKIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVz
dWx0LnJlZ3MoKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN1YkhlYXBCaWdJ
bnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJpZ2h0
R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TdWJIZWFwQmlnSW50LCByZXN1
bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOwog
CiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTAxOSwxMyArNTAxOSwxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVNdWwoTm9kCiAgICAgICAgIHNwZWN1bGF0ZUhlYXBC
aWdJbnQocmlnaHRDaGlsZCwgcmlnaHRHUFIpOwogCiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVk
Q2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSByZXN1bHQucmVncygpOwogCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTXVsSGVh
cEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQUiwg
cmlnaHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk11bEhlYXBCaWdJbnQs
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0R1BSLCByaWdodEdQ
Uik7CiAKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MjI1LDEzICs1MjI1LDEzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZURpdihOb2QKICAgICAgICAgc3BlY3VsYXRl
SGVhcEJpZ0ludChyaWdodENoaWxkLCByaWdodEdQUik7CiAKICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBKU1ZhbHVlUmVnc0Zs
dXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
aXZIZWFwQmlnSW50LCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBsZWZ0
R1BSLCByaWdodEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGl2SGVhcEJp
Z0ludCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGxlZnRHUFIsIHJp
Z2h0R1BSKTsKIAogICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU1MTYsMTMgKzU1MTYsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlTW9kKE5vZAogICAgICAgICBzcGVj
dWxhdGVIZWFwQmlnSW50KHJpZ2h0Q2hpbGQsIHJpZ2h0R1BSKTsKIAogICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwotICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEpTVmFsdWVS
ZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKIAotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk1vZEhlYXBCaWdJbnQsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGxlZnRHUFIsIHJpZ2h0R1BSKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Nb2RI
ZWFwQmlnSW50LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgbGVmdEdQ
UiwgcmlnaHRHUFIpOwogCiAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNjA4MywxMyArNjA4
MywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVQb3coTm9kCiAgICAgICAg
IHNwZWN1bGF0ZUhlYXBCaWdJbnQocmlnaHRDaGlsZCwgcmlnaHRHUFIpOwogCiAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogCi0gICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUG93SGVhcEJpZ0ludCwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgbGVmdEdQUiwgcmlnaHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blBvd0hlYXBCaWdJbnQsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBs
ZWZ0R1BSLCByaWdodEdQUik7CiAKICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2MDU4
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4NzgsNyArMjg3OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQXIKICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewogICAgICAg
ICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwogICAgICAgICBp
ZiAodmFsdWUgIT0gSU5UX01JTikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCAtdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCaWdJbnQzMigtdmFsdWUpKTsKICAgICAgICAgcHJpbVZhbHVl
ID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKICAgICB9CiAjZW5kaWYKQEAgLTI5
MTAsNyArMjkxMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIK
ICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewogICAgICAgICBpbnQzMl90IHZhbHVl
ID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwogICAgICAgICBpZiAodmFsdWUgIT0gSU5U
X01JTikgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBKU1ZhbHVlKEpTVmFsdWU6OkpTQmln
SW50MzIsIC12YWx1ZSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGpzQmlnSW50MzIoLXZh
bHVlKTsKICAgICAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwog
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgICAgICB9CkBA
IC0yOTE4LDcgKzI5MTgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFyCiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkgewot
ICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1W
YWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6
OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CiAgICAgICAgIGFyaXRo
UHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQpAQCAtMjk1Niw3ICsyOTU2LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQz
MigpKSB7CiAgICAgICAgIGludDMyX3QgdmFsdWUgPSBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMy
KCk7CiAgICAgICAgIGlmICh2YWx1ZSAhPSBJTlRfTUlOKSB7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgLXZhbHVlKTsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0ganNCaWdJbnQzMigtdmFsdWUpOwogICAgICAgICAgICAgYXJpdGhQcm9m
aWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgICAgIH0KQEAgLTI5NjQsNyArMjk2NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICB9CiAjZW5kaWYKICAgICBpZiAo
cHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBK
U0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgpKTsKKyAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFz
SGVhcEJpZ0ludCgpKTsKICAgICAgICAgYXJpdGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CkBAIC0z
MDAyLDcgKzMwMDIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFy
CiAgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpIHsKICAgICAgICAgaW50MzJfdCB2YWx1
ZSA9IHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKTsKICAgICAgICAgaWYgKHZhbHVlICE9IElO
VF9NSU4pCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoSlNWYWx1
ZTo6SlNCaWdJbnQzMiwgLXZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQmlnSW50MzIoLXZhbHVlKSk7CiAgICAgICAgIHByaW1WYWx1ZSA9IEpTQmlnSW50Ojpj
cmVhdGVGcm9tKHZtLCB2YWx1ZSk7CiAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQmlnSW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lv
biAyNjA1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CaWdJbnRDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgSlNWYWx1ZSB0b0JpZ0lu
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogCiAgICAgaWYgKGFyZ3VtZW50LmlzQm9vbGVhbigp
KSB7CiAjaWYgVVNFKEJJR0lOVDMyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpK
U0JpZ0ludDMyLCBhcmd1bWVudC5hc0Jvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBqc0JpZ0lu
dDMyKGFyZ3VtZW50LmFzQm9vbGVhbigpKTsKICNlbHNlCiAgICAgICAgIHJldHVybiBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbSh2bSwgYXJndW1lbnQuYXNCb29sZWFuKCkpOwogI2VuZGlmCkBAIC0xMTUs
NyArMTE1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogCiAg
ICAgaWYgKHByaW1pdGl2ZS5pc0ludDMyKCkpIHsKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCBwcmlt
aXRpdmUuYXNJbnQzMigpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCaWdJ
bnQzMihwcmltaXRpdmUuYXNJbnQzMigpKSk7CiAjZWxzZQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBwcmltaXRpdmUuYXNJbnQzMigpKSk7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjYwNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ3LDcg
KzU0Nyw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9uZWdhdGUpCiAgICAgaWYgKHByaW1W
YWx1ZS5pc0JpZ0ludDMyKCkpIHsKICAgICAgICAgaW50MzJfdCB2YWx1ZSA9IHByaW1WYWx1ZS5i
aWdJbnQzMkFzSW50MzIoKTsKICAgICAgICAgaWYgKHZhbHVlICE9IElOVF9NSU4pIHsKLSAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCAtdmFsdWUp
OworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7CiAgICAgICAg
ICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcocmVzdWx0LCB7CiAgICAgICAgICAgICAgICAgdXBk
YXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQp
OwogICAgICAgICAgICAgfSk7CkBAIC01NTcsNyArNTU3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX25lZ2F0ZSkKICNlbmRpZgogCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQo
KSkgewotICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXModm0s
IHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNC
aWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CiAgICAgICAg
IFJFVFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKICAgICAgICAgICAgIHVwZGF0ZUFyaXRo
UHJvZmlsZUZvclVuYXJ5QXJpdGhPcChtZXRhZGF0YSwgcmVzdWx0LCBvcGVyYW5kKTsKICAgICAg
ICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3Bw
CShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Jp
Z0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEpTQmlnSW50
OjppbnBsYWNlTXVsdGlwbHlBZGQoRGlnaXQgCiAgICAgaW50ZXJuYWxNdWx0aXBseUFkZCh0aGlz
LCBmYWN0b3IsIHN1bW1hbmQsIGxlbmd0aCgpLCB0aGlzKTsKIH0KIAotSlNCaWdJbnQqIEpTQmln
SW50OjpleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQq
IGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCkKK0pTQmlnSW50KiBKU0JpZ0ludDo6ZXhwb25lbnRp
YXRlSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgSlNC
aWdJbnQqIGV4cG9uZW50KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0yNTksNyArMjU5LDcg
QEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGUoSlNHbG9iYQogICAgIGlmIChiYXNl
LT5sZW5ndGgoKSA9PSAxICYmIGJhc2UtPmRpZ2l0KDApID09IDEpIHsKICAgICAgICAgLy8gKC0x
KSAqKiBldmVuX251bWJlciA9PSAxLgogICAgICAgICBpZiAoYmFzZS0+c2lnbigpICYmICEoZXhw
b25lbnQtPmRpZ2l0KDApICYgMSkpCi0gICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnVuYXJ5
TWludXModm0sIGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50Ojp1bmFyeU1pbnVz
SGVhcCh2bSwgYmFzZSk7CiAKICAgICAgICAgLy8gKC0xKSAqKiBvZGRfbnVtYmVyID09IC0xOyAx
ICoqIGFueXRoaW5nID09IDEuCiAgICAgICAgIHJldHVybiBiYXNlOwpAQCAtMzA5LDE0ICszMDks
MTQgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGUoSlNHbG9iYQogCiAgICAgbiA+
Pj0gMTsKICAgICBmb3IgKDsgbjsgbiA+Pj0gMSkgewotICAgICAgICBKU0JpZ0ludCogbWF5YmVS
ZXN1bHQgPSBKU0JpZ0ludDo6bXVsdGlwbHkoZ2xvYmFsT2JqZWN0LCBydW5uaW5nU3F1YXJlLCBy
dW5uaW5nU3F1YXJlKTsKKyAgICAgICAgSlNCaWdJbnQqIG1heWJlUmVzdWx0ID0gSlNCaWdJbnQ6
Om11bHRpcGx5SGVhcChnbG9iYWxPYmplY3QsIHJ1bm5pbmdTcXVhcmUsIHJ1bm5pbmdTcXVhcmUp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAg
cnVubmluZ1NxdWFyZSA9IG1heWJlUmVzdWx0OwogICAgICAgICBpZiAobiAmIDEpIHsKICAgICAg
ICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bm5pbmdTcXVh
cmU7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtYXliZVJlc3VsdCA9IEpT
QmlnSW50OjptdWx0aXBseShnbG9iYWxPYmplY3QsIHJlc3VsdCwgcnVubmluZ1NxdWFyZSk7Cisg
ICAgICAgICAgICAgICAgbWF5YmVSZXN1bHQgPSBKU0JpZ0ludDo6bXVsdGlwbHlIZWFwKGdsb2Jh
bE9iamVjdCwgcmVzdWx0LCBydW5uaW5nU3F1YXJlKTsKICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBt
YXliZVJlc3VsdDsKICAgICAgICAgICAgIH0KQEAgLTMyNiw3ICszMjYsNyBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6OmV4cG9uZW50aWF0ZShKU0dsb2JhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNCaWdJbnQqIEpTQmlnSW50OjptdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6Om11bHRpcGx5
SGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQq
IHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTM0OCw3ICszNDgsNyBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6Om11bHRpcGx5KEpTR2xvYmFsT2JqCiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRU
cmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpkaXZpZGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpTQmln
SW50OjpkaXZpZGVIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSkKIHsKICAgICAvLyAxLiBJZiB5IGlzIDBuLCB0aHJvdyBhIFJhbmdlRXJy
b3IgZXhjZXB0aW9uLgogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTM3MCw3
ICszNzAsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVjCiAgICAg
aWYgKHktPmxlbmd0aCgpID09IDEpIHsKICAgICAgICAgRGlnaXQgZGl2aXNvciA9IHktPmRpZ2l0
KDApOwogICAgICAgICBpZiAoZGl2aXNvciA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dFNpZ24gPT0geC0+c2lnbigpID8geCA6IHVuYXJ5TWludXModm0sIHgpOworICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdFNpZ24gPT0geC0+c2lnbigpID8geCA6IEpTQmlnSW50Ojp1bmFyeU1pbnVz
SGVhcCh2bSwgeCk7CiAKICAgICAgICAgRGlnaXQgcmVtYWluZGVyOwogICAgICAgICBhYnNvbHV0
ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsICZxdW90aWVudCwgcmVtYWluZGVy
KTsKQEAgLTM5Myw3ICszOTMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmNvcHkoVk0mIHZtLCBK
U0JpZ0luCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50Ojp1bmFy
eU1pbnVzKFZNJiB2bSwgSlNCaWdJbnQqIHgpCitKU0JpZ0ludCogSlNCaWdJbnQ6OnVuYXJ5TWlu
dXNIZWFwKFZNJiB2bSwgSlNCaWdJbnQqIHgpCiB7CiAgICAgaWYgKHgtPmlzWmVybygpKQogICAg
ICAgICByZXR1cm4geDsKQEAgLTQwMyw3ICs0MDMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnVu
YXJ5TWludXMoVk0mIHZtLCBKCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpT
QmlnSW50OjpyZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjpyZW1haW5kZXJIZWFwKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKICAg
ICAvLyAxLiBJZiB5IGlzIDBuLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgogICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTQ0MSw3ICs0NDEsNyBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iCiAgICAgcmV0dXJuIHJlbWFpbmRlci0+cmln
aHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjppbmMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmluY0hlYXAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCiB7CiAgICAgaWYgKCF4
LT5zaWduKCkpCiAgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHgs
IFNpZ25PcHRpb246OlVuc2lnbmVkKTsKQEAgLTQ1Miw3ICs0NTIsNyBAQCBKU0JpZ0ludCogSlNC
aWdJbnQ6OmluYyhKU0dsb2JhbE9iamVjdCogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50OjpkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgpCitKU0JpZ0ludCogSlNCaWdJbnQ6OmRlY0hlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNCaWdJbnQqIHgpCiB7CiAgICAgaWYgKHgtPmlzWmVybygpKSB7CiAgICAgICAg
IEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVGcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwgMSk7CkBA
IC00NjQsNyArNDY0LDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpkZWMoSlNHbG9iYWxPYmplY3Qq
IAogICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHgsIFNpZ25PcHRpb246
OlNpZ25lZCk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTQmlnSW50KiBKU0JpZ0lu
dDo6YWRkSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGJvb2wg
eFNpZ24gPSB4LT5zaWduKCk7CkBAIC00ODMsNyArNDgzLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50
OjphZGQoSlNHbG9iYWxPYmplY3QqIAogICAgIHJldHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwg
IXhTaWduKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpzdWIoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpTQmlnSW50
OjpzdWJIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYm9vbCB4
U2lnbiA9IHgtPnNpZ24oKTsKQEAgLTUwMSw3ICs1MDEsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6
OnN1YihKU0dsb2JhbE9iamVjdCogCiAgICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB5LCB4LCAh
eFNpZ24pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VBbmQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQqIEpT
QmlnSW50OjpiaXR3aXNlQW5kSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTUzNiw3ICs1
MzYsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VBbmQoSlNHbG9iYWxPCiAgICAgcmV0
dXJuIGFic29sdXRlQW5kTm90KHZtLCB4LCB5MSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6
Yml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKK0pTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lzZU9ySGVhcChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTU3Nyw3ICs1NzcsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VP
cihKU0dsb2JhbE9iCiAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVz
dWx0LCBTaWduT3B0aW9uOjpTaWduZWQpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdp
c2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQorSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlWG9ySGVhcChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKQEAgLTYxNSw3ICs2MTUsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VYb3Io
SlNHbG9iYWxPCiAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVzdWx0
LCBTaWduT3B0aW9uOjpTaWduZWQpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlm
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CitKU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlmdEhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewogICAgIGlmICh5LT5pc1plcm8o
KSB8fCB4LT5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHg7CkBAIC02MjYsNyArNjI2LDcgQEAg
SlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0U2hpZnQoSlNHbG9iYWxPYgogICAgIHJldHVybiBsZWZ0
U2hpZnRCeUFic29sdXRlKGdsb2JhbE9iamVjdCwgeCwgeSk7CiB9CiAKLUpTQmlnSW50KiBKU0Jp
Z0ludDo6c2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpCitKU0JpZ0ludCogSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hp
ZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSkKIHsKICAgICBpZiAoeS0+aXNaZXJvKCkgfHwgeC0+aXNaZXJvKCkpCiAgICAgICAgIHJl
dHVybiB4OwpAQCAtNjM3LDcgKzYzNyw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6c2lnbmVkUmln
aHRTaGlmdChKU0cKICAgICByZXR1cm4gcmlnaHRTaGlmdEJ5QWJzb2x1dGUoZ2xvYmFsT2JqZWN0
LCB4LCB5KTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlTm90KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQorSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3
aXNlTm90SGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKIHsK
ICAgICBpZiAoeC0+c2lnbigpKSB7CiAgICAgICAgIC8vIH4oLXgpID09IH4ofih4LTEpKSA9PSB4
LTEKQEAgLTk1Myw3ICs5NTMsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkKEpT
R2xvYmFsCiAgICAgfQogCiAgICAgaWYgKHktPmlzWmVybygpKQotICAgICAgICByZXR1cm4gcmVz
dWx0U2lnbiA9PSB4LT5zaWduKCkgPyB4IDogdW5hcnlNaW51cyh2bSwgeCk7CisgICAgICAgIHJl
dHVybiByZXN1bHRTaWduID09IHgtPnNpZ24oKSA/IHggOiB1bmFyeU1pbnVzSGVhcCh2bSwgeCk7
CiAKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgo
Z2xvYmFsT2JqZWN0LCB4LT5sZW5ndGgoKSArIDEpOwogICAgIGlmICghcmVzdWx0KQpAQCAtOTkz
LDcgKzk5Myw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCAKICAg
ICB9CiAKICAgICBpZiAoeS0+aXNaZXJvKCkpCi0gICAgICAgIHJldHVybiByZXN1bHRTaWduID09
IHgtPnNpZ24oKSA/IHggOiB1bmFyeU1pbnVzKHZtLCB4KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dFNpZ24gPT0geC0+c2lnbigpID8geCA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcCh2bSwgeCk7
CiAKICAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVhbCkK
ICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVaZXJvKHZtKTsKQEAgLTE4NjAsNyArMTg2
MCw3IEBAIEpTVmFsdWUgSlNCaWdJbnQ6OnBhcnNlSW50KEpTR2xvYmFsT2JqZWMKIAogICAgIGlm
IChwID09IGxlbmd0aCkgewogI2lmIFVTRShCSUdJTlQzMikKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgMCk7CisgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDAp
OwogI2Vsc2UKICAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOwogI2VuZGlmCkBAIC0xOTc0
LDcgKzE5NzQsNyBAQCBKU1ZhbHVlIEpTQmlnSW50OjpwYXJzZUludChKU0dsb2JhbE9iamVjCiAK
ICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8aW50
MzJfdD4obWF5YmVSZXN1bHQpKSA9PSBtYXliZVJlc3VsdCkgewogI2lmIFVTRShCSUdJTlQzMikK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwg
c3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKICNl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
c3RhdGljX2Nhc3Q8aW50MzJfdD4obWF5YmVSZXN1bHQpKTsKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNjA1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw3IEBAIHB1YmxpYzoKICAgICB7CiAjaWYgVVNFKEJJR0lOVDMyKQogICAgICAg
ICBpZiAodmFsdWUgPD0gSU5UX01BWCAmJiB2YWx1ZSA+PSBJTlRfTUlOKQotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KHZhbHVlKSk7CiAjZW5kaWYKIAogICAgICAgICBhdXRvIHB0ciA9IEpTQmlnSW50OjpjcmVh
dGVGcm9tKHZtLCB2YWx1ZSk7CkBAIC0xMjAsNiArMTIwLDMyIEBAIHB1YmxpYzoKICAgICAgICAg
R3JlYXRlclRoYW4sCiAgICAgICAgIExlc3NUaGFuCiAgICAgfTsKKworICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgdHJ5Q29udmVydFRvQmlnSW50MzIoSlNCaWdJbnQqIGJpZ0ludCkK
KyAgICB7CisjaWYgVVNFKEJJR0lOVDMyKQorICAgICAgICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkp
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworCisgICAgICAgIGlmIChiaWdJbnQtPmxl
bmd0aCgpIDw9IDEpIHsKKyAgICAgICAgICAgIGlmICghYmlnSW50LT5sZW5ndGgoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKKyAgICAgICAgICAgIERpZ2l0IGRpZ2l0
ID0gYmlnSW50LT5kaWdpdCgwKTsKKyAgICAgICAgICAgIGlmIChiaWdJbnQtPnNpZ24oKSkgewor
ICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbWF4VmFsdWUgPSAtc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpOwor
ICAgICAgICAgICAgICAgIGlmIChkaWdpdCA8PSBtYXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXN0YXRpY19jYXN0PGlu
dDY0X3Q+KGRpZ2l0KSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1heFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZGlnaXQgPD0gbWF4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0lu
dDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KGRpZ2l0KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyNlbmRpZgorCisgICAgICAgIHJldHVybiBiaWdJbnQ7CisgICAgfQorCiAgICAgCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZXF1YWxzKEpTQmlnSW50KiwgSlNCaWdJbnQq
KTsKICAgICBib29sIGVxdWFsc1RvTnVtYmVyKEpTVmFsdWUpOwpAQCAtMTMyLDI3ICsxNTgsOTcg
QEAgcHVibGljOgogICAgIEpTT2JqZWN0KiB0b09iamVjdChKU0dsb2JhbE9iamVjdCopIGNvbnN0
OwogICAgIGlubGluZSBib29sIHRvQm9vbGVhbigpIGNvbnN0IHsgcmV0dXJuICFpc1plcm8oKTsg
fQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqLCBK
U0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KTsKKyAgICBDb21wYXJpc29uUmVzdWx0
IHN0YXRpYyBjb21wYXJlVG9Eb3VibGUoSlNCaWdJbnQqIHgsIGRvdWJsZSB5KTsKKworICAgIHN0
YXRpYyBKU0JpZ0ludCogZXhwb25lbnRpYXRlSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50
KiBiYXNlLCBKU0JpZ0ludCogZXhwb25lbnQpOworICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50
aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJ
bnQqIGV4cG9uZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KGV4cG9uZW50aWF0ZUhlYXAoZ2xvYmFsT2JqZWN0LCBiYXNlLCBleHBvbmVudCkpOworICAgIH0K
IAotICAgIHN0YXRpYyBKU0JpZ0ludCogbXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0lu
dCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU0JpZ0ludCogbXVsdGlwbHlIZWFwKEpT
R2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBtdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
bXVsdGlwbHlIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgIH0KICAgICAKLSAgICBDb21w
YXJpc29uUmVzdWx0IHN0YXRpYyBjb21wYXJlVG9Eb3VibGUoSlNCaWdJbnQqIHgsIGRvdWJsZSB5
KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGluY0hlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0lu
dCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgaW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0lu
dDMyKGluY0hlYXAoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgfQogCi0gICAgc3RhdGljIEpTQmln
SW50KiBpbmMoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCk7Ci0gICAgc3RhdGljIEpTQmln
SW50KiBkZWMoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCk7Ci0gICAgc3RhdGljIEpTQmln
SW50KiBhZGQoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAg
IHN0YXRpYyBKU0JpZ0ludCogc3ViKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmln
SW50KiB5KTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGRpdmlkZShKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiByZW1haW5kZXIo
SlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBK
U0JpZ0ludCogdW5hcnlNaW51cyhWTSYsIEpTQmlnSW50KiB4KTsKLQotICAgIHN0YXRpYyBKU0Jp
Z0ludCogYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCog
eSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZVhvcihK
U0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpT
QmlnSW50KiBiaXR3aXNlTm90KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOworICAgIHN0
YXRpYyBKU0JpZ0ludCogZGVjSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4KTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSBkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGVjSGVh
cChnbG9iYWxPYmplY3QsIHgpKTsKKyAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGxlZnRT
aGlmdChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3Rh
dGljIEpTQmlnSW50KiBzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFkZEhlYXAoSlNHbG9iYWxP
YmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGFk
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYWRkSGVhcChnbG9i
YWxPYmplY3QsIHgsIHkpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNCaWdJbnQqIHN1YkhlYXAo
SlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBK
U1ZhbHVlIHN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCisgICAgeworICAgICAgICByZXR1cm4gc3ViSGVhcChnbG9iYWxPYmplY3QsIHgs
IHkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0JpZ0ludCogZGl2aWRlSGVhcChKU0dsb2JhbE9i
amVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgZGl2
aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCog
eSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihkaXZpZGVIZWFw
KGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0JpZ0ludCogcmVt
YWluZGVySGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Cisg
ICAgc3RhdGljIEpTVmFsdWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihyZW1haW5kZXJIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgIH0K
KworICAgIHN0YXRpYyBKU0JpZ0ludCogdW5hcnlNaW51c0hlYXAoVk0mLCBKU0JpZ0ludCogeCk7
CisgICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHVuYXJ5TWludXNIZWFwKHZt
LCB4KSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlQW5kSGVhcChKU0ds
b2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFs
dWUgYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
Yml0d2lzZUFuZEhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQmlnSW50KiBiaXR3aXNlT3JIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VPckhlYXAoZ2xvYmFsT2JqZWN0LCB4
LCB5KSk7CisgICAgfQorCisgICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlWG9ySGVhcChKU0ds
b2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFs
dWUgYml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
Yml0d2lzZVhvckhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQmlnSW50KiBiaXR3aXNlTm90SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlTm90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0lu
dDMyKGJpdHdpc2VOb3RIZWFwKGdsb2JhbE9iamVjdCwgeCkpOworICAgIH0KKworICAgIHN0YXRp
YyBKU0JpZ0ludCogbGVmdFNoaWZ0SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgbGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihsZWZ0U2hpZnRIZWFwKGdsb2JhbE9iamVjdCwg
eCwgeSkpOworICAgIH0KKworICAgIHN0YXRpYyBKU0JpZ0ludCogc2lnbmVkUmlnaHRTaGlmdEhl
YXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRp
YyBKU1ZhbHVlIHNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKHNpZ25lZFJpZ2h0U2hpZnRIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOwor
ICAgIH0KIAogICAgIERpZ2l0IGRpZ2l0KHVuc2lnbmVkKTsKICAgICB2b2lkIHNldERpZ2l0KHVu
c2lnbmVkLCBEaWdpdCk7IC8vIFVzZSBvbmx5IHdoZW4gaW5pdGlhbGl6aW5nLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkocmV2aXNpb24gMjYwNTgz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAgIGVudW0gSlNGYWxzZVRhZyB7
IEpTRmFsc2UgfTsKICAgICBlbnVtIEpTQ2VsbFRhZyB7IEpTQ2VsbFR5cGUgfTsKICNpZiBVU0Uo
QklHSU5UMzIpCi0gICAgZW51bSBKU0JpZ0ludDMyVGFnIHsgSlNCaWdJbnQzMiB9OworICAgIGVu
dW0gRW5jb2RlQXNCaWdJbnQzMlRhZyB7IEVuY29kZUFzQmlnSW50MzIgfTsKICNlbmRpZgogICAg
IGVudW0gRW5jb2RlQXNEb3VibGVUYWcgeyBFbmNvZGVBc0RvdWJsZSB9OwogCkBAIC0xOTAsNyAr
MTkwLDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUoSlNDZWxsKiBwdHIpOwogICAgIEpTVmFsdWUo
Y29uc3QgSlNDZWxsKiBwdHIpOwogI2lmIFVTRShCSUdJTlQzMikKLSAgICBKU1ZhbHVlKEpTQmln
SW50MzJUYWcsIGludDMyX3QpOworICAgIEpTVmFsdWUoRW5jb2RlQXNCaWdJbnQzMlRhZywgaW50
MzJfdCk7CiAjZW5kaWYKIAogICAgIC8vIE51bWJlcnMKQEAgLTU3Nyw2ICs1NzcsMTMgQEAgaW5s
aW5lIEpTVmFsdWUganNCb29sZWFuKGJvb2wgYikKICAgICByZXR1cm4gYiA/IEpTVmFsdWUoSlNW
YWx1ZTo6SlNUcnVlKSA6IEpTVmFsdWUoSlNWYWx1ZTo6SlNGYWxzZSk7CiB9CiAKKyNpZiBVU0Uo
QklHSU5UMzIpCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaWdJbnQzMihpbnQzMl90IGludFZh
bHVlKQoreworICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzQmlnSW50MzIsIGlu
dFZhbHVlKTsKK30KKyNlbmRpZgorCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNEb3VibGVOdW1i
ZXIoZG91YmxlIGQpCiB7CiAgICAgQVNTRVJUKEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3Vi
bGUsIGQpLmlzTnVtYmVyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MzgsNyArNTM4LDcgQEAgQUxXQVlTX0lOTElORSBKU0JpZ0ludCogSlNWYWx1ZTo6YXNI
ZWFwQgogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKICNpZiBVU0UoQklHSU5UMzIpCi1pbmxp
bmUgSlNWYWx1ZTo6SlNWYWx1ZShKU0JpZ0ludDMyVGFnLCBpbnQzMl90IHZhbHVlKQoraW5saW5l
IEpTVmFsdWU6OkpTVmFsdWUoRW5jb2RlQXNCaWdJbnQzMlRhZywgaW50MzJfdCB2YWx1ZSkKIHsK
ICAgICB1aW50NjRfdCBzaGlmdGVkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSkgPDwgMTY7CiAgICAgQVNTRVJUKCEoc2hpZnRlZFZhbHVl
ICYgTnVtYmVyVGFnKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYwNTgzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAg
TkVWRVJfSU5MSU5FIEpTVmFsdWUganNBZGRTbG93Q2FzZShKU0dsbwogICAgICAgICByZXN1bHQg
Kz0gcmlnaHQ7CiAgICAgICAgIGlmIChVTkxJS0VMWShyZXN1bHQuaGFzT3ZlcmZsb3dlZCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlKEpT
VmFsdWU6OkpTQmlnSW50MzIsIHJlc3VsdC51bnNhZmVHZXQoKSk7CisgICAgICAgIHJldHVybiBq
c0JpZ0ludDMyKHJlc3VsdC51bnNhZmVHZXQoKSk7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFS
QU0obGVmdCk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNjA1ODMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzMiw3ICs1MzIsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNTdWIoSlNHbG9iYWxP
YmplCiAgICAgICAgIHJlc3VsdCAtPSByaWdodDsKICAgICAgICAgaWYgKFVOTElLRUxZKHJlc3Vs
dC5oYXNPdmVyZmxvd2VkKCkpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6SlNCaWdJbnQzMiwgcmVzdWx0LnVuc2FmZUdldCgp
KTsKKyAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIocmVzdWx0LnVuc2FmZUdldCgpKTsKICNlbHNl
CiAgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKICAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKQEAgLTU1NCw3ICs1NTQsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNNdWwoSlNHbG9i
YWxPYmplCiAgICAgICAgIHJlc3VsdCAqPSByaWdodDsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNP
dmVyZmxvd2VkKCkpCiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICByZXR1
cm4gSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCByZXN1bHQudW5zYWZlR2V0KCkpOworICAg
ICAgICByZXR1cm4ganNCaWdJbnQzMihyZXN1bHQudW5zYWZlR2V0KCkpOwogI2Vsc2UKICAgICAg
ICAgVU5VU0VEX1BBUkFNKGxlZnQpOwogICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwpAQCAt
NTc0LDcgKzU3NCw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0RpdihKU0dsb2JhbE9iamUK
ICNpZiBVU0UoQklHSU5UMzIpCiAgICAgICAgIGlmICghcmlnaHQpCiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMy
LCBsZWZ0IC8gcmlnaHQpOworICAgICAgICByZXR1cm4ganNCaWdJbnQzMihsZWZ0IC8gcmlnaHQp
OwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwogICAgICAgICBVTlVTRURfUEFS
QU0ocmlnaHQpOwpAQCAtNjI5LDcgKzYyOSw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0lu
YyhKU0dsb2JhbE9iamUKICAgICAgICAgLy8gRklYTUU6IHRoZSBmb2xsb3dpbmcgbmV4dCBmZXcg
bGluZXMgbWlnaHQgYmVuZWZpdCBmcm9tIGJlaW5nIG1hZGUgaW50byBhIGhlbHBlciBmdW5jdGlv
bgogICAgICAgICBpZiAobmV3VmFsdWUgPiBJTlRfTUFYKQogICAgICAgICAgICAgcmV0dXJuIEpT
QmlnSW50OjpjcmVhdGVGcm9tKHZtLCBuZXdWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVl
KEpTVmFsdWU6OkpTQmlnSW50MzIsIHN0YXRpY19jYXN0PGludDMyX3Q+KG5ld1ZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG5ld1ZhbHVlKSk7
CiAgICAgfQogI2VuZGlmCiAKQEAgLTY1NCw3ICs2NTQsNyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUganNEZWMoSlNHbG9iYWxPYmplCiAgICAgICAgIC8vIEZJWE1FOiB0aGUgZm9sbG93aW5nIG5l
eHQgZmV3IGxpbmVzIG1pZ2h0IGJlbmVmaXQgZnJvbSBiZWluZyBtYWRlIGludG8gYSBoZWxwZXIg
ZnVuY3Rpb24KICAgICAgICAgaWYgKG5ld1ZhbHVlIDwgSU5UX01JTikKICAgICAgICAgICAgIHJl
dHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbmV3VmFsdWUpOwotICAgICAgICByZXR1cm4g
SlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCBzdGF0aWNfY2FzdDxpbnQzMl90PihuZXdWYWx1
ZSkpOworICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihuZXdW
YWx1ZSkpOwogICAgIH0KICNlbmRpZgogCkBAIC02NzUsNyArNjc1LDcgQEAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGpzQml0d2lzZU5vdChKU0dsbwogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlm
IChvcGVyYW5kTnVtZXJpYy5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKEpT
VmFsdWU6OkpTQmlnSW50MzIsIH5vcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7Cisg
ICAgICAgIHJldHVybiBqc0JpZ0ludDMyKH5vcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIo
KSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChvcGVyYW5kTnVtZXJpYy5pc0hlYXBCaWdJbnQoKSk7
CkBAIC03MTAsNyArNzEwLDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHNoaWZ0KEpTR2xvYmFs
T2JqZQogCiAgICAgICAgIC8vIFRoaXMgc3RkOjptaW4gaXMgYSBiaXQgaGFja3ksIGJ1dCByZXF1
aXJlZCBiZWNhdXNlIGluIEMrKyBpdCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgdG8gZG8gYSBzaGlm
dCB3aGVyZSB0aGUgcmlnaHQgb3BlcmFuZCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBiaXQt
d2lkdGggb2YgdGhlIGxlZnQgb3BlcmFuZC4KICAgICAgICAgaWYgKCFpc0xlZnQpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCBsZWZ0SW50MzIgPj4gc3Rk
OjptaW4ocmlnaHRJbnQzMiwgMzEpKTsKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKGxl
ZnRJbnQzMiA+PiBzdGQ6Om1pbihyaWdodEludDMyLCAzMSkpOwogCiAgICAgICAgIC8vIEluIHRo
ZSBjYXNlIG9mIGEgbGVmdCBzaGlmdCB3ZSBjYW4gb3ZlcmZsb3cuIEkgZGVhbCB3aXRoIHRoaXMg
YnkgYWxsb2NhdGluZyBIZWFwQmlnSW50cy4KICAgICAgICAgLy8gRklYTUU6IGl0IG1pZ2h0IGJl
IHBvc3NpYmxlIHRvIGRvIHNvbWV0aGluZyBzbWFydGVyLCB0cnlpbmcgdG8gZG8gdGhlIGxlZnQg
c2hpZnQgYW5kIGRldGVjdGluZyBzb21laG93IGlmIGl0IG92ZXJmbG93ZWQuCkBAIC03NjksNyAr
NzY5LDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGJpdHdpc2VCaW5hcnlPcChKUwogCiAjaWYg
VVNFKEJJR0lOVDMyKQogICAgIGlmIChsZWZ0TnVtZXJpYy5pc0JpZ0ludDMyKCkgJiYgcmlnaHRO
dW1lcmljLmlzQmlnSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoSlNWYWx1ZTo6SlNC
aWdJbnQzMiwgaW50MzJPcChsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1l
cmljLmJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKGludDMy
T3AobGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFz
SW50MzIoKSkpOwogICAgIC8vIEZJWE1FOiBhZGQgZmFzdCBwYXRoIGZvciBCaWdJbnQzMiAvIEhl
YXBCaWdJbnQsIGFuZCBmb3IgSGVhcEJpZ0ludCAvIEJpZ0ludDMyCiAgICAgLy8gSW4gbWFueSBj
YXNlcyB0aGVzZSBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IHRoYW4gaGVhcC1hbGxvY2F0
aW5nIHRoZSBzbWFsbCBiaWctaW50IGFuZCBnb2luZyB0aHJvdWdoIHRoZSBnZW5lcmljIHBhdGgu
CiAgICAgLy8gQnV0IGl0IGlzIHF1aXRlIHRyaWNreSwgbm90IGxlYXN0IGJlY2F1c2UgSGVhcEJp
Z0ludCB1c2UgYSBzaWduIGJpdCB3aGVyZWFzIEJpZ0ludDMyIHVzZSAyLWNvbXBsZW1lbnQgcmVw
cmVzZW50YXRpb24uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjA1ODMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0w
NC0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXR1cm4g
QmlnSW50MzIgd2hlbmV2ZXIgd2UgY2FuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTA5MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9u
ZURlc2VyaWFsaXplcjo6cmVhZEJpZ0ludCk6CisKIDIwMjAtMDQtMjMgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgaGV1cmlzdGljIGZvciB0
ZXh0IG1hbmlwdWxhdGlvbiB0byB0cmVhdCBzb21lIGxpc3QgaXRlbXMgYXMgcGFyYWdyYXBoIGJv
dW5kYXJpZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjYwNTgzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAwNSw3ICszMDA1LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBpZiAoIWxlbmd0aEluVWlu
dDY0KSB7CiAjaWYgVVNFKEJJR0lOVDMyKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoSlNW
YWx1ZTo6SlNCaWdJbnQzMiwgMCk7CisgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsK
ICNlbHNlCiAgICAgICAgICAgICBKU0JpZ0ludCogYmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZVpl
cm8obV9sZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKTsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIu
YXBwZW5kV2l0aENyYXNoT25PdmVyZmxvdyhiaWdJbnQpOwpAQCAtMzAyMiwxMCArMzAyMiwxMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgICAg
ICBpZiAoc2lnbikgewogICAgICAgICAgICAgICAgIGlmIChkaWdpdDY0IDw9IHN0YXRpY19jYXN0
PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8aW50NjRfdD4oSU5UMzJfTUlOKSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKEpTVmFsdWU6OkpTQmlnSW50MzIsIHN0YXRpY19jYXN0
PGludDMyX3Q+KC1zdGF0aWNfY2FzdDxpbnQ2NF90PihkaWdpdDY0KSkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pigtc3RhdGljX2Nh
c3Q8aW50NjRfdD4oZGlnaXQ2NCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGRpZ2l0NjQgPD0gSU5UMzJfTUFYKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZShKU1ZhbHVlOjpKU0JpZ0ludDMyLCBzdGF0aWNfY2FzdDxpbnQzMl90PihkaWdp
dDY0KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KGRpZ2l0NjQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChk
aWdpdDY0ICE9IDApOwogICAgICAgICAgICAgSlNCaWdJbnQqIGJpZ0ludCA9IEpTQmlnSW50Ojp0
cnlDcmVhdGVXaXRoTGVuZ3RoKG1fbGV4aWNhbEdsb2JhbE9iamVjdCwgMSk7Cg==
</data>
<flag name="review"
          id="412920"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>