<?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>210978</bug_id>
          
          <creation_ts>2020-04-24 10:40:16 -0700</creation_ts>
          <short_desc>BigInt math runtime shouldn&apos;t convert BigInt32 input operands to a heap cell when doing math</short_desc>
          <delta_ts>2020-04-28 23:57:07 -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>
          
          
          <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>
          <dependson>211165</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</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>1645260</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-24 10:40:16 -0700</bug_when>
    <thetext>We could define an abstract interface and use that in the math runtime instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645517</commentid>
    <comment_count>1</comment_count>
      <attachid>397536</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-24 19:31:53 -0700</bug_when>
    <thetext>Created attachment 397536
WIP

it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645536</commentid>
    <comment_count>2</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-04-24 23:01:17 -0700</bug_when>
    <thetext>The title of this bug seems a bit ambitious in the abstract... 🤔</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646083</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-27 10:28:39 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #2)
&gt; The title of this bug seems a bit ambitious in the abstract... 🤔

How so?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646227</commentid>
    <comment_count>4</comment_count>
      <attachid>397743</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-27 14:45:52 -0700</bug_when>
    <thetext>Created attachment 397743
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646321</commentid>
    <comment_count>5</comment_count>
      <attachid>397771</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-27 17:23:15 -0700</bug_when>
    <thetext>Created attachment 397771
WIP

it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646352</commentid>
    <comment_count>6</comment_count>
      <attachid>397782</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-27 18:54:11 -0700</bug_when>
    <thetext>Created attachment 397782
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646356</commentid>
    <comment_count>7</comment_count>
      <attachid>397785</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-27 19:10:34 -0700</bug_when>
    <thetext>Created attachment 397785
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646357</commentid>
    <comment_count>8</comment_count>
      <attachid>397786</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-27 19:14:57 -0700</bug_when>
    <thetext>Created attachment 397786
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646363</commentid>
    <comment_count>9</comment_count>
      <attachid>397785</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-27 19:52:24 -0700</bug_when>
    <thetext>Comment on attachment 397785
patch

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

r=me

&gt; Source/JavaScriptCore/runtime/Operations.cpp:79
&gt; +    RELEASE_AND_RETURN(scope, arithmeticBinaryOp(globalObject, p1, p2, doubleOp, bigIntOp, bigIntOp, bigIntOp, bigIntOp, &quot;Invalid mix of BigInt and other type in addition.&quot;_s));

See the comment below.

&gt; Source/JavaScriptCore/runtime/Operations.h:531
&gt; +ALWAYS_INLINE JSValue arithmeticBinaryOp(JSGlobalObject* globalObject, JSValue v1, JSValue v2, DoubleOperation&amp;&amp; doubleOp, JSValue (*bigInt32)(JSGlobalObject*, int32_t, int32_t), JSValue (*mixedBigInt1)(JSGlobalObject*, JSBigInt*, int32_t), JSValue (*mixedBigInt2)(JSGlobalObject*, int32_t, JSBigInt*), JSValue (*heapBigInt)(JSGlobalObject*, JSBigInt*, JSBigInt*), const char* errorMessage)

Why not taking auto-parameterized lambda as a parameterized type-ed value and call it for all the BigInt cases?

tempalte&lt;typename DoubleOperation, typename BigIntOperation&gt;
ALWAYS_INLINE JSValue arithmeticBinaryOp(JSGlobalObject* globalObject, JSValue v1, JSValue v2, DoubleOperation&amp;&amp; doubleOp, BigIntOperation&amp;&amp; bigIntOp, const char* errorMessage)

And always call bigIntOp for BigInts.

&gt; Source/JavaScriptCore/runtime/Operations.h:547
&gt; +            RELEASE_AND_RETURN(scope, bigInt32(globalObject, leftNumeric.bigInt32AsInt32(), rightNumeric.bigInt32AsInt32()));

So, then, you can write it as `ELEASE_AND_RETURN(scope, bigIntOp(globalObject, leftNumeric.bigInt32AsInt32(), rightNumeric.bigInt32AsInt32()));`

&gt; Source/JavaScriptCore/runtime/Operations.h:549
&gt; +            RELEASE_AND_RETURN(scope, mixedBigInt2(globalObject, leftNumeric.bigInt32AsInt32(), rightNumeric.asHeapBigInt()));

`RELEASE_AND_RETURN(scope, bigIntOp(globalObject, leftNumeric.bigInt32AsInt32(), rightNumeric.asHeapBigInt()));`

&gt; Source/JavaScriptCore/runtime/Operations.h:552
&gt; +            RELEASE_AND_RETURN(scope, mixedBigInt1(globalObject, leftNumeric.asHeapBigInt(), rightNumeric.bigInt32AsInt32()));

RELEASE_AND_RETURN(scope, bigIntOp(globalObject, leftNumeric.asHeapBigInt(), rightNumeric.bigInt32AsInt32()));

&gt; Source/JavaScriptCore/runtime/Operations.h:554
&gt; +            RELEASE_AND_RETURN(scope, heapBigInt(globalObject, leftNumeric.asHeapBigInt(), rightNumeric.asHeapBigInt()));

RELEASE_AND_RETURN(scope, bigIntOp(globalObject, leftNumeric.asHeapBigInt(), rightNumeric.asHeapBigInt()));

&gt; Source/JavaScriptCore/runtime/Operations.h:559
&gt; +        RELEASE_AND_RETURN(scope, heapBigInt(globalObject, leftNumeric.asHeapBigInt(), rightNumeric.asHeapBigInt()));

RELEASE_AND_RETURN(scope, bigIntOp(globalObject, leftNumeric.asHeapBigInt(), rightNumeric.asHeapBigInt()));

&gt; Source/JavaScriptCore/runtime/Operations.h:575
&gt; +    return arithmeticBinaryOp(globalObject, v1, v2, doubleOp, bigIntOp, bigIntOp, bigIntOp, bigIntOp, &quot;Invalid mix of BigInt and other type in subtraction.&quot;_s);

In that case, we do not need to pass 4 bigIntOp here. You can just call it,

return arithmeticBinaryOp(globalObject, v1, v2, doubleOp, bigIntOp, &quot;Invalid mix of BigInt and other type in subtraction.&quot;_s);

&gt; Source/JavaScriptCore/runtime/Operations.h:588
&gt; +    return arithmeticBinaryOp(globalObject, v1, v2, doubleOp, bigIntOp, bigIntOp, bigIntOp, bigIntOp, &quot;Invalid mix of BigInt and other type in multiplication.&quot;_s);

Ditto.

&gt; Source/JavaScriptCore/runtime/Operations.h:601
&gt; +    return arithmeticBinaryOp(globalObject, v1, v2, doubleOp, bigIntOp, bigIntOp, bigIntOp, bigIntOp, &quot;Invalid mix of BigInt and other type in division.&quot;_s);

Ditto.

&gt; Source/JavaScriptCore/runtime/Operations.h:614
&gt; +    return arithmeticBinaryOp(globalObject, v1, v2, doubleOp, bigIntOp, bigIntOp, bigIntOp, bigIntOp, &quot;Invalid mix of BigInt and other type in remainder.&quot;_s);

Ditto.

&gt; Source/JavaScriptCore/runtime/Operations.h:627
&gt; +    return arithmeticBinaryOp(globalObject, v1, v2, doubleOp, bigIntOp, bigIntOp, bigIntOp, bigIntOp, &quot;Invalid mix of BigInt and other type in exponentiation.&quot;_s);

Ditto.

&gt; Source/JavaScriptCore/runtime/Operations.h:774
&gt; -    Optional&lt;uint32_t&gt; leftUint32 = left.toUInt32AfterToNumeric(globalObject);
&gt; +    auto leftNumeric = left.toBigIntOrInt32(globalObject);
&gt;      RETURN_IF_EXCEPTION(scope, { });
&gt; -    Optional&lt;uint32_t&gt; rightUint32 = right.toUInt32AfterToNumeric(globalObject);
&gt; +    auto rightNumeric = right.toBigIntOrInt32(globalObject);
&gt;      RETURN_IF_EXCEPTION(scope, { });
&gt;  
&gt; -    if (UNLIKELY(!leftUint32 || !rightUint32)) {
&gt; +    if (UNLIKELY(!leftNumeric.isInt32() || !rightNumeric.isInt32())) {
&gt;          throwTypeError(globalObject, scope, &quot;BigInt does not support &gt;&gt;&gt; operator&quot;_s);
&gt;          return { };
&gt;      }
&gt;  
&gt; -    return jsNumber(static_cast&lt;int32_t&gt;(leftUint32.value() &gt;&gt; (rightUint32.value() &amp; 31)));
&gt; +    uint32_t leftUint32 = static_cast&lt;uint32_t&gt;(leftNumeric.asInt32());
&gt; +    uint32_t rightUint32 = static_cast&lt;uint32_t&gt;(rightNumeric.asInt32());
&gt; +
&gt; +    return jsNumber(static_cast&lt;int32_t&gt;(leftUint32 &gt;&gt; (rightUint32 &amp; 31)));

Why is it changed?

&gt; Source/JavaScriptCore/runtime/Operations.h:778
&gt; +ALWAYS_INLINE JSValue bitwiseBinaryOp(JSGlobalObject* globalObject, JSValue v1, JSValue v2, Int32Operation&amp;&amp; int32Op, JSValue (*bigInt32)(JSGlobalObject*, int32_t, int32_t), JSValue (*mixedBigInt1)(JSGlobalObject*, JSBigInt*, int32_t), JSValue (*mixedBigInt2)(JSGlobalObject*, int32_t, JSBigInt*), JSValue (*heapBigInt)(JSGlobalObject*, JSBigInt*, JSBigInt*), const char* errorMessage)

Ditto.

&gt; Source/JavaScriptCore/runtime/Operations.h:824
&gt; +    return bitwiseBinaryOp(globalObject, v1, v2, int32Op, bigIntOp, bigIntOp, bigIntOp, bigIntOp, &quot;Invalid mix of BigInt and other type in bitwise &apos;and&apos; operation.&quot;_s);

Ditto.

&gt; Source/JavaScriptCore/runtime/Operations.h:840
&gt; +    return bitwiseBinaryOp(globalObject, v1, v2, int32Op, bigIntOp, bigIntOp, bigIntOp, bigIntOp, &quot;Invalid mix of BigInt and other type in bitwise &apos;or&apos; operation.&quot;_s);

Ditto.

&gt; Source/JavaScriptCore/runtime/Operations.h:855
&gt; +    return bitwiseBinaryOp(globalObject, v1, v2, int32Op, bigIntOp, bigIntOp, bigIntOp, bigIntOp, &quot;Invalid mix of BigInt and other type in bitwise &apos;xor&apos; operation.&quot;_s);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646364</commentid>
    <comment_count>10</comment_count>
      <attachid>397786</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-27 19:53:06 -0700</bug_when>
    <thetext>Comment on attachment 397786
patch

r=me if EWS is happy :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646366</commentid>
    <comment_count>11</comment_count>
      <attachid>397785</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-27 19:58:26 -0700</bug_when>
    <thetext>Comment on attachment 397785
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/Operations.h:774
&gt;&gt; +    return jsNumber(static_cast&lt;int32_t&gt;(leftUint32 &gt;&gt; (rightUint32 &amp; 31)));
&gt; 
&gt; Why is it changed?

I think this is a bad rebase. Will revert</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646401</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-27 23:25:45 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/260809/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646403</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-27 23:26:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/62490218&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646859</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-28 23:09:38 -0700</bug_when>
    <thetext>Committed r260876: &lt;https://trac.webkit.org/changeset/260876&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646860</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-28 23:14:45 -0700</bug_when>
    <thetext>Committed r260877: &lt;https://trac.webkit.org/changeset/260877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646863</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-04-28 23:21:38 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 211165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646879</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-28 23:57:07 -0700</bug_when>
    <thetext>This shouldn&apos;t have been re-opened.

Build fix in:
https://trac.webkit.org/changeset/260880/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397536</attachid>
            <date>2020-04-24 19:31:53 -0700</date>
            <delta_ts>2020-04-27 14:45:52 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>19916</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHJldmlz
aW9uIDI2MDY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDYgKzIzNyw0MSBAQCB2b2lkIEpTQmlnSW50OjppbnBs
YWNlTXVsdGlwbHlBZGQoRGlnaXQgCiAgICAgaW50ZXJuYWxNdWx0aXBseUFkZCh0aGlzLCBmYWN0
b3IsIHN1bW1hbmQsIGxlbmd0aCgpLCB0aGlzKTsKIH0KIAorY2xhc3MgSGVhcEJpZ0ludEltcGwg
eworcHVibGljOgorICAgIGV4cGxpY2l0IEhlYXBCaWdJbnRJbXBsKEpTQmlnSW50KiBiaWdJbnQp
CisgICAgICAgIDogbV9iaWdJbnQoYmlnSW50KQorICAgIHsgfQorCisgICAgQUxXQVlTX0lOTElO
RSBib29sIGlzWmVybygpIHsgcmV0dXJuIG1fYmlnSW50LT5pc1plcm8oKTsgfQorICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBzaWduKCkgeyByZXR1cm4gbV9iaWdJbnQtPmlzWmVybygpOyB9CisgICAg
QUxXQVlTX0lOTElORSB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2JpZ0ludC0+bGVuZ3Ro
KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIERpZ2l0IGRpZ2l0KHVuc2lnbmVkIGkpIHsgcmV0dXJu
IG1fYmlnSW50LT5kaWdpdChpKTsgfQorCitwcml2YXRlOgorICAgIEpTQmlnSW50KiBtX2JpZ0lu
dDsKK307CisKK2NsYXNzIEludDMyQmlnSW50SW1wbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
SGVhcEJpZ0ludEltcGwoaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzWmVybygpIHsgcmV0dXJuICFtX3Zh
bHVlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNpZ24oKSB7IHJldHVybiBtX3ZhbHVlIDwg
MDsgfQorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gaXNaZXJv
KCkgPyAwIDogbV92YWx1ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgRGlnaXQgZGlnaXQodW5zaWdu
ZWQgaSkKKyAgICB7CisgICAgICAgIEFTU0VSVChsZW5ndGgoKSk7CisgICAgICAgIEFTU0VSVChp
ID09IDApOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
aW50MzJfdCBtX3ZhbHVlOworfTsKKwogSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVI
ZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBiYXNlLCBKU0JpZ0lu
dCogZXhwb25lbnQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpAQCAtMzI2
LDI4ICszNjEsMzkgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVIZWFwKEpTRwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6bXVsdGlwbHlIZWFw
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitK
U0JpZ0ludCogSlNCaWdJbnQ6Om11bHRpcGx5SGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBpZiAoeC0+aXNaZXJvKCkpCisgICAgaWYgKHguaXNaZXJvKCkpCiAgICAgICAgIHJl
dHVybiB4OwotICAgIGlmICh5LT5pc1plcm8oKSkKKyAgICBpZiAoeS5pc1plcm8oKSkKICAgICAg
ICAgcmV0dXJuIHk7CiAKLSAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSB4LT5sZW5ndGgoKSAr
IHktPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHgubGVuZ3RoKCkgKyB5
Lmxlbmd0aCgpOwogICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0
aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgcmVzdWx0LT5pbml0aWFsaXplKEluaXRpYWxpemF0
aW9uVHlwZTo6V2l0aFplcm8pOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHgtPmxl
bmd0aCgpOyBpKyspCi0gICAgICAgIG11bHRpcGx5QWNjdW11bGF0ZSh5LCB4LT5kaWdpdChpKSwg
cmVzdWx0LCBpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgeC5sZW5ndGgoKTsgaSsr
KQorICAgICAgICBtdWx0aXBseUFjY3VtdWxhdGUoeSwgeC5kaWdpdChpKSwgcmVzdWx0LCBpKTsK
IAotICAgIHJlc3VsdC0+c2V0U2lnbih4LT5zaWduKCkgIT0geS0+c2lnbigpKTsKKyAgICByZXN1
bHQtPnNldFNpZ24oeC5zaWduKCkgIT0geS5zaWduKCkpOwogICAgIHJldHVybiByZXN1bHQtPnJp
Z2h0VHJpbSh2bSk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIEpTQmlnSW50OjptdWx0aXBseShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihtdWx0aXBseUhlYXAoZ2xvYmFsT2JqZWN0LCBJ
bnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlIEpTQmlnSW50OjptdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihtdWx0aXBseUhlYXAoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50
MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKIEpTQmlnSW50KiBKU0JpZ0ludDo6ZGl2aWRlSGVh
cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CiB7CiAgICAgLy8gMS4gSWYgeSBpcyAwbiwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4K
QEAgLTQ1Miw2ICs0OTgsMTEgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjppbmNIZWFwKEpTR2xvYmFs
T2JqZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0pTVmFsdWUgSlNCaWdJbnQ6OmluYyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKK3sKKyAgICByZXR1cm4gdHJ5
Q29udmVydFRvQmlnSW50MzIoaW5jSGVhcChnbG9iYWxPYmplY3QsIHgpKTsKK30KKwogSlNCaWdJ
bnQqIEpTQmlnSW50OjpkZWNIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmln
SW50KiB4KQogewogICAgIGlmICh4LT5pc1plcm8oKSkgewpAQCAtODUwLDE1ICs5MDEsMTYgQEAg
dm9pZCBKU0JpZ0ludDo6aW50ZXJuYWxNdWx0aXBseUFkZChKU0JpZwogLy8ge2FjY3VtdWxhdG9y
fSwgc3RhcnRpbmcgYXQge2FjY3VtdWxhdG9ySW5kZXh9IGZvciB0aGUgbGVhc3Qtc2lnbmlmaWNh
bnQKIC8vIGRpZ2l0LgogLy8gQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHthY2N1bXVsYXRvcn0g
aXMgYmlnIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQuCi12b2lkIEpTQmlnSW50OjptdWx0aXBs
eUFjY3VtdWxhdGUoSlNCaWdJbnQqIG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwgSlNC
aWdJbnQqIGFjY3VtdWxhdG9yLCB1bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KQordGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGw+Cit2b2lkIEpTQmlnSW50OjptdWx0aXBseUFjY3VtdWxhdGUo
QmlnSW50SW1wbCBtdWx0aXBsaWNhbmQsIERpZ2l0IG11bHRpcGxpZXIsIEpTQmlnSW50KiBhY2N1
bXVsYXRvciwgdW5zaWduZWQgYWNjdW11bGF0b3JJbmRleCkKIHsKLSAgICBBU1NFUlQoYWNjdW11
bGF0b3ItPmxlbmd0aCgpID4gbXVsdGlwbGljYW5kLT5sZW5ndGgoKSArIGFjY3VtdWxhdG9ySW5k
ZXgpOworICAgIEFTU0VSVChhY2N1bXVsYXRvci0+bGVuZ3RoKCkgPiBtdWx0aXBsaWNhbmQubGVu
Z3RoKCkgKyBhY2N1bXVsYXRvckluZGV4KTsKICAgICBpZiAoIW11bHRpcGxpZXIpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBEaWdpdCBjYXJyeSA9IDA7CiAgICAgRGlnaXQgaGlnaCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG11bHRpcGxpY2FuZC0+bGVuZ3RoKCk7IGkr
KywgYWNjdW11bGF0b3JJbmRleCsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG11
bHRpcGxpY2FuZC5sZW5ndGgoKTsgaSsrLCBhY2N1bXVsYXRvckluZGV4KyspIHsKICAgICAgICAg
RGlnaXQgYWNjID0gYWNjdW11bGF0b3ItPmRpZ2l0KGFjY3VtdWxhdG9ySW5kZXgpOwogICAgICAg
ICBEaWdpdCBuZXdDYXJyeSA9IDA7CiAgICAgICAgIApAQCAtODY3LDcgKzkxOSw3IEBAIHZvaWQg
SlNCaWdJbnQ6Om11bHRpcGx5QWNjdW11bGF0ZShKU0JpZ0kKICAgICAgICAgYWNjID0gZGlnaXRB
ZGQoYWNjLCBjYXJyeSwgbmV3Q2FycnkpOwogICAgICAgICAKICAgICAgICAgLy8gQ29tcHV0ZSB0
aGlzIHJvdW5kJ3MgbXVsdGlwbGljYXRpb24uCi0gICAgICAgIERpZ2l0IG11bHRpcGxpY2FuZERp
Z2l0ID0gbXVsdGlwbGljYW5kLT5kaWdpdChpKTsKKyAgICAgICAgRGlnaXQgbXVsdGlwbGljYW5k
RGlnaXQgPSBtdWx0aXBsaWNhbmQuZGlnaXQoaSk7CiAgICAgICAgIERpZ2l0IGxvdyA9IGRpZ2l0
TXVsKG11bHRpcGxpZXIsIG11bHRpcGxpY2FuZERpZ2l0LCBoaWdoKTsKICAgICAgICAgYWNjID0g
ZGlnaXRBZGQoYWNjLCBsb3csIG5ld0NhcnJ5KTsKICAgICAgICAgCkBAIC0xMDM2LDEzICsxMDg4
LDEzIEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXMKICAgICBBU1NF
UlQoIXgtPmlzWmVybygpKTsKICAgICByZW1haW5kZXIgPSAwOwogICAgIGlmIChkaXZpc29yID09
IDEpIHsKLSAgICAgICAgaWYgKHF1b3RpZW50ICE9IG51bGxwdHIpCisgICAgICAgIGlmIChxdW90
aWVudCkKICAgICAgICAgICAgICpxdW90aWVudCA9IHg7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB4LT5sZW5ndGgoKTsKLSAgICBpZiAocXVvdGllbnQg
IT0gbnVsbHB0cikgeworICAgIGlmIChxdW90aWVudCkgewogICAgICAgICBpZiAoKnF1b3RpZW50
ID09IG51bGxwdHIpCiAgICAgICAgICAgICAqcXVvdGllbnQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAyNjA2ODkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNyArMTQ2
LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYmlnSW50OwogICAgIH0KIAotICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGVxdWFscyhKU0JpZ0ludCosIEpTQmlnSW50
Kik7CiAgICAgYm9vbCBlcXVhbHNUb051bWJlcihKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGVxdWFsc1RvSW50MzIoaW50MzJfdCk7CkBAIC0xNjMsOTUgKzE2MiwxOTEgQEAg
cHVibGljOgogCiAgICAgQ29tcGFyaXNvblJlc3VsdCBzdGF0aWMgY29tcGFyZVRvRG91YmxlKEpT
QmlnSW50KiB4LCBkb3VibGUgeSk7CiAKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVl
IGFzSW50MzJPckhlYXBDZWxsKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmIChzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpID09
IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20odm0sIHZhbHVlKTsKKyAgICB9
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBhc0ludDMyT3JIZWFwQ2VsbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdC0+dm0oKSwgdmFsdWUpOworICAg
IH0KKworcHJpdmF0ZToKICAgICBzdGF0aWMgSlNCaWdJbnQqIGV4cG9uZW50aWF0ZUhlYXAoSlNH
bG9iYWxPYmplY3QqLCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KTsKKyAgICBz
dGF0aWMgSlNCaWdJbnQqIG11bHRpcGx5SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBpbmNIZWFwKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNCaWdJbnQqIHgpOworICAgIHN0YXRpYyBKU0JpZ0ludCogZGVjSGVhcChKU0dsb2Jh
bE9iamVjdCosIEpTQmlnSW50KiB4KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFkZEhlYXAoSlNH
bG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU0Jp
Z0ludCogc3ViSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7
CisgICAgc3RhdGljIEpTQmlnSW50KiBkaXZpZGVIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIHJlbWFpbmRlckhlYXAo
SlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBK
U0JpZ0ludCogdW5hcnlNaW51c0hlYXAoVk0mLCBKU0JpZ0ludCogeCk7CisgICAgc3RhdGljIEpT
QmlnSW50KiBiaXR3aXNlQW5kSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlT3JIZWFwKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNCaWdJbnQqIGJp
dHdpc2VYb3JIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsK
KyAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VOb3RIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNC
aWdJbnQqIHgpOworICAgIHN0YXRpYyBKU0JpZ0ludCogbGVmdFNoaWZ0SGVhcChKU0dsb2JhbE9i
amVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTQmlnSW50KiBz
aWduZWRSaWdodFNoaWZ0SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSk7CisKK3B1YmxpYzoKICAgICBzdGF0aWMgSlNWYWx1ZSBleHBvbmVudGlhdGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIGJhc2UsIEpTQmlnSW50KiBleHBvbmVu
dCkKICAgICB7CiAgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihleHBvbmVudGlh
dGVIZWFwKGdsb2JhbE9iamVjdCwgYmFzZSwgZXhwb25lbnQpKTsKICAgICB9CisgICAgc3RhdGlj
IEpTVmFsdWUgZXhwb25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmln
SW50KiBiYXNlLCBpbnQzMl90IGV4cG9uZW50KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBleHBvbmVu
dGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBiYXNlLCBKU0JpZ0lu
dCogZXhwb25lbnQpOworICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IGJhc2UsIGludDMyX3QgZXhwb25lbnQpOwogCi0g
ICAgc3RhdGljIEpTQmlnSW50KiBtdWx0aXBseUhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0lu
dCogeCwgSlNCaWdJbnQqIHkpOwogICAgIHN0YXRpYyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKICAgICB7CiAg
ICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihtdWx0aXBseUhlYXAoZ2xvYmFsT2Jq
ZWN0LCB4LCB5KSk7CiAgICAgfQorICAgIHN0YXRpYyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRp
YyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50
KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQorICAgIHsKKyAgICAgICAg
aW50NjRfdCByZXN1bHQgPSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih4KSAqIHN0YXRpY19jYXN0PGlu
dDY0X3Q+KHkpOyAKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVj
dCwgcmVzdWx0KTsKKyAgICB9CiAgICAgCi0gICAgc3RhdGljIEpTQmlnSW50KiBpbmNIZWFwKEpT
R2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGluYyhKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKKyAgICBzdGF0aWMgSlNWYWx1
ZSBpbmMoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUg
aW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihpbmNIZWFwKGdsb2JhbE9iamVjdCwgeCkp
OworICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxpbnQ2NF90Pih4KSArIDEpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogZGVj
SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBk
ZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCiAgICAgewogICAg
ICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGVjSGVhcChnbG9iYWxPYmplY3QsIHgp
KTsKICAgICB9CisgICAgc3RhdGljIEpTVmFsdWUgZGVjKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGludDMyX3QgeCkKKyAgICB7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2Vs
bChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpIC0gMSk7CisgICAgfQogCi0g
ICAgc3RhdGljIEpTQmlnSW50KiBhZGRIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgs
IEpTQmlnSW50KiB5KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBhZGQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogICAgIHsKICAgICAgICAgcmV0
dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGFkZEhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAg
ICAgfQorICAgIHN0YXRpYyBKU1ZhbHVlIGFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBhZGQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3Rh
dGljIEpTVmFsdWUgYWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwg
aW50MzJfdCB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90Pih5
KSk7CisgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBzdWJIZWFwKEpTR2xvYmFsT2JqZWN0
KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBzdWIoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogICAg
IHsKICAgICAgICAgcmV0dXJuIHN1YkhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KTsKICAgICB9Cisg
ICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMy
X3QgeSk7CisgICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB5
LCBKU0JpZ0ludCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludDMyX3QgeSwgaW50MzJfdCB4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkg
LSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih5KSk7CisgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50
KiBkaXZpZGVIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsK
ICAgICBzdGF0aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKGRpdmlkZUhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAgICAgfQorICAg
IHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQz
Ml90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCosIGludDMy
X3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKKyAgICB7CisgICAgICAg
IGlmICgheSkgeworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIw
IGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOworICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xv
YmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQ2NF90Pih4KSAvIHN0YXRpY19jYXN0PGludDY0X3Q+
KHkpKTsKKyAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIHJlbWFpbmRlckhlYXAoSlNHbG9i
YWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwogICAgIHN0YXRpYyBKU1ZhbHVl
IHJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCiAgICAgewogICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIocmVt
YWluZGVySGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKICAgICB9CisgICAgc3RhdGljIEpTVmFs
dWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7Cisg
ICAgc3RhdGljIEpTVmFsdWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBK
U0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQorICAgIHsKKyAgICAgICAgaWYg
KCF5KSB7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMg
YW4gaW52YWxpZCBkaXZpc29yIHZhbHVlLiJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpICUgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSkp
OworICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogdW5hcnlNaW51c0hlYXAoVk0mLCBKU0Jp
Z0ludCogeCk7CiAgICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50
KiB4KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHVuYXJ5TWlu
dXNIZWFwKHZtLCB4KSk7CiAgICAgfQorICAgIHN0YXRpYyBKU1ZhbHVlIHVuYXJ5TWludXMoVk0m
IHZtLCBpbnQzMl90IHgpCisgICAgeworICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwo
dm0sIC1zdGF0aWNfY2FzdDxpbnQ2NF90Pih4KSk7CisgICAgfQogCi0gICAgc3RhdGljIEpTQmln
SW50KiBiaXR3aXNlQW5kSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSk7CiAgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiAgICAgewogICAgICAgICByZXR1
cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZUFuZEhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5
KSk7CiAgICAgfQorICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VBbmQoSlNHbG9iYWxPYmplY3Qq
LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlQW5k
KEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpT
VmFsdWUgYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgs
IGludDMyX3QgeSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihn
bG9iYWxPYmplY3QsIHggJiB5KTsKKyAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdp
c2VPckhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwogICAg
IHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VPcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVy
dFRvQmlnSW50MzIoYml0d2lzZU9ySGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGdsb2JhbE9iamVjdCwgeCwgeSk7CisgICAgfQor
ICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VPcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4
LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VPcihKU0dsb2JhbE9iamVj
dCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VP
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihnbG9iYWxPYmplY3QsIHgg
fCB5KTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VYb3JIZWFwKEpTR2xv
YmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKICAgICBzdGF0aWMgSlNWYWx1
ZSBiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSkKICAgICB7CiAgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihi
aXR3aXNlWG9ySGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKICAgICB9CisgICAgc3RhdGljIEpT
VmFsdWUgYml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCog
eCwgSlNCaWdJbnQqIHkpCisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZVhvcihKU0dsb2JhbE9i
amVjdCosIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdp
c2VYb3IoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0
aWMgSlNWYWx1ZSBiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMy
X3QgeCwgaW50MzJfdCB5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0lu
dDMyKGdsb2JhbE9iamVjdCwgeCBeIHkpOworICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCog
Yml0d2lzZU5vdEhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCk7CiAgICAgc3RhdGlj
IEpTVmFsdWUgYml0d2lzZU5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0lu
dCogeCkKICAgICB7CiAgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNl
Tm90SGVhcChnbG9iYWxPYmplY3QsIHgpKTsKICAgICB9CisgICAgc3RhdGljIEpTVmFsdWUgYml0
d2lzZU5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgpCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZ2xvYmFsT2JqZWN0LCB+eCk7Cisg
ICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBsZWZ0U2hpZnRIZWFwKEpTR2xvYmFsT2JqZWN0
KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKICAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hp
ZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGxlZnRTaGlmdEhl
YXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CiAgICAgfQorICAgIHN0YXRpYyBKU1ZhbHVlIGxlZnRT
aGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgbGVmdFNo
aWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KTsK
IAotICAgIHN0YXRpYyBKU0JpZ0ludCogc2lnbmVkUmlnaHRTaGlmdEhlYXAoSlNHbG9iYWxPYmpl
Y3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwogICAgIHN0YXRpYyBKU1ZhbHVlIHNpZ25l
ZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHNp
Z25lZFJpZ2h0U2hpZnRIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOwogICAgIH0KKyAgICBzdGF0
aWMgSlNWYWx1ZSBzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHNpZ25lZFJpZ2h0
U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCog
eSk7CisgICAgc3RhdGljIEpTVmFsdWUgc2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSk7CiAKICAgICBEaWdpdCBkaWdpdCh1
bnNpZ25lZCk7CiAgICAgdm9pZCBzZXREaWdpdCh1bnNpZ25lZCwgRGlnaXQpOyAvLyBVc2Ugb25s
eSB3aGVuIGluaXRpYWxpemluZy4KQEAgLTI3NSwxMSArMzcwLDE0IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgc3RhdGljIHVpbnQ2NF90IGNhbGN1bGF0ZU1heGltdW1DaGFyYWN0ZXJzUmVxdWlyZWQo
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCByYWRpeCwgRGlnaXQgbGFzdERpZ2l0LCBib29sIHNp
Z24pOwogICAgIAotICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0IGFic29sdXRlQ29tcGFyZShK
U0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQg
YWJzb2x1dGVDb21wYXJlKEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogICAgIHN0YXRp
YyB2b2lkIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYsIEpTQmlnSW50KiB4LCBEaWdp
dCBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKTsKICAgICBz
dGF0aWMgdm9pZCBpbnRlcm5hbE11bHRpcGx5QWRkKEpTQmlnSW50KiBzb3VyY2UsIERpZ2l0IGZh
Y3RvciwgRGlnaXQgc3VtbWFuZCwgdW5zaWduZWQsIEpTQmlnSW50KiByZXN1bHQpOwotICAgIHN0
YXRpYyB2b2lkIG11bHRpcGx5QWNjdW11bGF0ZShKU0JpZ0ludCogbXVsdGlwbGljYW5kLCBEaWdp
dCBtdWx0aXBsaWVyLCBKU0JpZ0ludCogYWNjdW11bGF0b3IsIHVuc2lnbmVkIGFjY3VtdWxhdG9y
SW5kZXgpOwotICAgIHN0YXRpYyB2b2lkIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoSlNH
bG9iYWxPYmplY3QqLCBKU0JpZ0ludCogZGl2aWRlbmQsIEpTQmlnSW50KiBkaXZpc29yLCBKU0Jp
Z0ludCoqIHF1b3RpZW50LCBKU0JpZ0ludCoqIHJlbWFpbmRlcik7CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIHZvaWQgbXVsdGlwbHlBY2N1bXVsYXRlKEJp
Z0ludEltcGwgbXVsdGlwbGljYW5kLCBEaWdpdCBtdWx0aXBsaWVyLCBKU0JpZ0ludCogYWNjdW11
bGF0b3IsIHVuc2lnbmVkIGFjY3VtdWxhdG9ySW5kZXgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIHZvaWQgYWJz
b2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIGRp
dmlkZW5kLCBCaWdJbnRJbXBsMiBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBKU0JpZ0lu
dCoqIHJlbWFpbmRlcik7CiAgICAgCiAgICAgZW51bSBjbGFzcyBMZWZ0U2hpZnRNb2RlIHsKICAg
ICAgICAgU2FtZVNpemVSZXN1bHQsCkBAIC0zMDMsMjEgKzQwMSwyNyBAQCBwcml2YXRlOgogICAg
ICAgICBOb3RTeW1tZXRyaWMKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQml0d2lz
ZU9wPgotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVCaXR3aXNlT3AoVk0mLCBKU0JpZ0lu
dCogeCwgSlNCaWdJbnQqIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcsIFN5bW1ldHJpY09wLCBCaXR3
aXNlT3AmJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQml0d2lzZU9wLCB0eXBlbmFtZSBCaWdJ
bnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNv
bHV0ZUJpdHdpc2VPcChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJhRGln
aXRzSGFuZGxpbmcsIFN5bW1ldHJpY09wLCBCaXR3aXNlT3AmJik7CiAKLSAgICBzdGF0aWMgSlNC
aWdJbnQqIGFic29sdXRlQW5kKFZNJiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBz
dGF0aWMgSlNCaWdJbnQqIGFic29sdXRlT3IoVk0mLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
OwotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBbmROb3QoVk0mLCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoVk0mLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFu
ZChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEpTQmln
SW50KiBhYnNvbHV0ZU9yKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAg
ICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kTm90KFZNJiwgQmlnSW50SW1wbDEgeCwgQmln
SW50SW1wbDIgeSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlWG9yKFZNJiwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAKICAgICBlbnVtIGNsYXNzIFNpZ25PcHRpb24g
ewogICAgICAgICBTaWduZWQsCiAgICAgICAgIFVuc2lnbmVkCiAgICAgfTsKIAotICAgIHN0YXRp
YyBKU0JpZ0ludCogYWJzb2x1dGVBZGRPbmUoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwg
U2lnbk9wdGlvbik7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVN1Yk9uZShKU0dsb2Jh
bE9iamVjdCosIEpTQmlnSW50KiB4LCB1bnNpZ25lZCByZXN1bHRMZW5ndGgpOworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVB
ZGRPbmUoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgsIFNpZ25PcHRpb24pOworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1
dGVTdWJPbmUoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgsIHVuc2lnbmVkIHJlc3VsdExl
bmd0aCk7CiAKICAgICAvLyBEaWdpdCBhcml0aG1ldGljIGhlbHBlcnMuCiAgICAgc3RhdGljIERp
Z2l0IGRpZ2l0QWRkKERpZ2l0IGEsIERpZ2l0IGIsIERpZ2l0JiBjYXJyeSk7CkBAIC0zNDYsMTEg
KzQ1MCwxNSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBKU0JpZ0ludCogY29weShWTSYsIEpTQmln
SW50KiB4KTsKIAogICAgIHZvaWQgaW5wbGFjZU11bHRpcGx5QWRkKERpZ2l0IG11bHRpcGxpZXIs
IERpZ2l0IHBhcnQpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBZGQoSlNHbG9iYWxP
YmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbik7Ci0gICAg
c3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVN1YihWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCog
eSwgYm9vbCByZXN1bHRTaWduKTsKLQotICAgIHN0YXRpYyBKU0JpZ0ludCogbGVmdFNoaWZ0QnlB
YnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAg
c3RhdGljIEpTQmlnSW50KiByaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCosIEJp
Z0ludEltcGwgeCwgQmlnSW50SW1wbCB5LCBib29sIHJlc3VsdFNpZ24pOworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVTdWIo
Vk0mLCBCaWdJbnRJbXBsIHgsIEJpZ0ludEltcGwgeSwgYm9vbCByZXN1bHRTaWduKTsKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBKU0JpZ0ludCogbGVm
dFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCwgQmlnSW50SW1w
bCB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMgSlNC
aWdJbnQqIHJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4
LCBCaWdJbnRJbXBsIHkpOwogCiAgICAgc3RhdGljIEpTQmlnSW50KiByaWdodFNoaWZ0QnlNYXhp
bXVtKFZNJiwgYm9vbCBzaWduKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397743</attachid>
            <date>2020-04-27 14:45:52 -0700</date>
            <delta_ts>2020-04-27 17:23:15 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>88679</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjYwNzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3MSwxMiArMjg3MSw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAocHJpbVZh
bHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJp
Z0ludDMyQXNJbnQzMigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCaWdJbnQzMigtdmFsdWUpKTsKLSAgICAgICAg
cHJpbVZhbHVlID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKLSAgICB9CisgICAg
aWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkp
OwogI2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFz
SGVhcEJpZ0ludCgpKSk7CkBAIC0yOTA0LDEzICsyOTAwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25BcgogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChwcmlt
VmFsdWUuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIGludDMyX3QgdmFsdWUgPSBwcmltVmFsdWUu
YmlnSW50MzJBc0ludDMyKCk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBJTlRfTUlOKSB7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IGpzQmlnSW50MzIoLXZhbHVlKTsKLSAgICAgICAgICAgIGFy
aXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIHByaW1WYWx1ZSA9IEpT
QmlnSW50OjpjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
SlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7Cisg
ICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHByaW1W
YWx1ZS5pc0hlYXBCaWdJbnQoKSkgewpAQCAtMjk1MCwxMyArMjk0Miw5IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBp
ZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJp
bVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikg
ewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7Ci0gICAgICAg
ICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICBwcmltVmFs
dWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpOworICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMy
KCkpOworICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KICNlbmRpZgogICAgIGlm
IChwcmltVmFsdWUuaXNIZWFwQmlnSW50KCkpIHsKQEAgLTI5OTUsMTIgKzI5ODMsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKICNpZiBVU0UoQklHSU5UMzIp
CiAgICAgLy8gRklYTUU6IHdoeSBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvZmlsZSB0aGUgYXJndW1l
bnQgYnV0IG5vdCB0aGUgcmVzdWx0PwotICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKSB7
Ci0gICAgICAgIGludDMyX3QgdmFsdWUgPSBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCk7Ci0g
ICAgICAgIGlmICh2YWx1ZSAhPSBJTlRfTUlOKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0JpZ0ludDMyKC12YWx1ZSkpOwotICAgICAgICBwcmltVmFsdWUgPSBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpOwotICAgIH0KKyAgICBpZiAocHJpbVZhbHVlLmlzQmln
SW50MzIoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlN
aW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKSk7CiAjZW5kaWYKICAgICBpZiAo
cHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkocmV2aXNpb24gMjYwNzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ5LDE0ICs1NDksMTAgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25lZ2F0ZSkKIAogI2lmIFVTRShCSUdJTlQzMikKICAg
ICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0g
cHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01J
TikgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7Ci0gICAg
ICAgICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcocmVzdWx0LCB7Ci0gICAgICAgICAgICAgICAg
dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJh
bmQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJpbVZh
bHVlID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlNaW51cyhwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkp
OworICAgICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcocmVzdWx0LCB7CisgICAgICAgICAgICB1
cGRhdGVBcml0aFByb2ZpbGVGb3JVbmFyeUFyaXRoT3AobWV0YWRhdGEsIHJlc3VsdCwgb3BlcmFu
ZCk7CisgICAgICAgIH0pOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCShyZXZpc2lvbiAyNjA3NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
NywyOSArMjM3LDExNCBAQCB2b2lkIEpTQmlnSW50OjppbnBsYWNlTXVsdGlwbHlBZGQoRGlnaXQg
CiAgICAgaW50ZXJuYWxNdWx0aXBseUFkZCh0aGlzLCBmYWN0b3IsIHN1bW1hbmQsIGxlbmd0aCgp
LCB0aGlzKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVIZWFwKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBiYXNlLCBKU0JpZ0ludCogZXhwb25l
bnQpCitjbGFzcyBIZWFwQmlnSW50SW1wbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSGVhcEJp
Z0ludEltcGwoSlNCaWdJbnQqIGJpZ0ludCkKKyAgICAgICAgOiBtX2JpZ0ludChiaWdJbnQpCisg
ICAgeyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNaZXJvKCkgeyByZXR1cm4gbV9iaWdJ
bnQtPmlzWmVybygpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNpZ24oKSB7IHJldHVybiBt
X2JpZ0ludC0+aXNaZXJvKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGxlbmd0aCgp
IHsgcmV0dXJuIG1fYmlnSW50LT5sZW5ndGgoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgRGlnaXQg
ZGlnaXQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaWdJbnQtPmRpZ2l0KGkpOyB9CisgICAgQUxX
QVlTX0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KFZNJikgeyByZXR1cm4gbV9iaWdJbnQ7
IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSW1wbFJlc3VsdDsKKyAgICBKU0JpZ0lu
dCogbV9iaWdJbnQ7Cit9OworCitjbGFzcyBJbnQzMkJpZ0ludEltcGwgeworcHVibGljOgorICAg
IGV4cGxpY2l0IEhlYXBCaWdJbnRJbXBsKGludDMyX3QgdmFsdWUpCisgICAgICAgIDogbV92YWx1
ZSh2YWx1ZSkKKyAgICB7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1plcm8oKSB7IHJl
dHVybiAhbV92YWx1ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaWduKCkgeyByZXR1cm4g
bV92YWx1ZSA8IDA7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0
dXJuIGlzWmVybygpID8gMCA6IG1fdmFsdWU7IH0KKyAgICBBTFdBWVNfSU5MSU5FIERpZ2l0IGRp
Z2l0KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoKCkpOworICAgICAg
ICBBU1NFUlQoaSA9PSAwKTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KFZNJiB2bSkgeyByZXR1cm4gSlNC
aWdJbnQ6OmNyZWF0ZUZyb20odm0sIG1fdmFsdWUpOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIEltcGxSZXN1bHQ7CisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsKKworQUxXQVlTX0lO
TElORSBJbXBsUmVzdWx0OjpJbXBsUmVzdWx0KEhlYXBCaWdJbnRJbXBsJiBoZWFwSW1wbCkKKyAg
ICA6IG1fcGF5bG9hZChoZWFwSW1wbC5tX2JpZ0ludCkKK3sgfQorCitBTFdBWVNfSU5MSU5FIElt
cGxSZXN1bHQ6OkltcGxSZXN1bHQoSlNCaWdJbnQqIGhlYXBCaWdJbnQpCisgICAgOiBtX3BheWxv
YWQoaGVhcEJpZ0ludCkKK3sgfQorCitBTFdBWVNfSU5MSU5FIEltcGxSZXN1bHQ6OkltcGxSZXN1
bHQoSW50MzJCaWdJbnRJbXBsJiBpbnQzMkltcGwpCisgICAgOiBtX3BheWxvYWQoanNCaWdJbnQz
MihpbnQzMkltcGwubV92YWx1ZSkpCit7IH0KKworc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSB0cnlDb252ZXJ0VG9CaWdJbnQzMihKU0JpZ0ludCogYmlnSW50KQoreworI2lmIFVTRShCSUdJ
TlQzMikKKyAgICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CisKKyAgICBpZiAoYmlnSW50LT5sZW5ndGgoKSA8PSAxKSB7CisgICAgICAgIGlmICghYmln
SW50LT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOworICAgICAg
ICBEaWdpdCBkaWdpdCA9IGJpZ0ludC0+ZGlnaXQoMCk7CisgICAgICAgIGlmIChiaWdJbnQtPnNp
Z24oKSkgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBtYXhWYWx1ZSA9
IC1zdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4o
KSk7CisgICAgICAgICAgICBpZiAoZGlnaXQgPD0gbWF4VmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXN0YXRpY19jYXN0PGludDY0
X3Q+KGRpZ2l0KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50NjRfdCBtYXhWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7CisgICAgICAgICAgICBpZiAoZGlnaXQgPD0gbWF4
VmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oZGlnaXQpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGJp
Z0ludDsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihJbXBsUmVzdWx0IGltcGxSZXN1bHQpCit7CisgICAgaWYgKGltcGxSZXN1bHQucGF5bG9h
ZC5pc0JpZ0ludDMyKCkpCisgICAgICAgIHJldHVybiBpbXBsUmVzdWx0LnBheWxvYWQ7CisgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGltcGxSZXN1bHQucGF5bG9hZC5hc0hlYXBCaWdJ
bnQoKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgQmlnSW50SW1wbDI+
CitJbXBsUmVzdWx0IEpTQmlnSW50OjpleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIGJhc2UsIEJpZ0ludEltcGwyIGV4cG9uZW50KQogewog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoZXhwb25lbnQtPnNpZ24oKSkgeworICAgIGlm
IChleHBvbmVudC5zaWduKCkpIHsKICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsICJOZWdhdGl2ZSBleHBvbmVudCBpcyBub3QgYWxsb3dlZCJfcyk7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIC8vIDIuIElmIGJhc2UgaXMgMG4gYW5kIGV4
cG9uZW50IGlzIDBuLCByZXR1cm4gMW4uCi0gICAgaWYgKGV4cG9uZW50LT5pc1plcm8oKSkKKyAg
ICBpZiAoZXhwb25lbnQuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRl
RnJvbSh2bSwgMSk7CiAgICAgCiAgICAgLy8gMy4gUmV0dXJuIGEgQmlnSW50IHJlcHJlc2VudGlu
ZyB0aGUgbWF0aGVtYXRpY2FsIHZhbHVlIG9mIGJhc2UgcmFpc2VkCiAgICAgLy8gICAgdG8gdGhl
IHBvd2VyIGV4cG9uZW50LgotICAgIGlmIChiYXNlLT5pc1plcm8oKSkKKyAgICBpZiAoYmFzZS5p
c1plcm8oKSkKICAgICAgICAgcmV0dXJuIGJhc2U7CiAKLSAgICBpZiAoYmFzZS0+bGVuZ3RoKCkg
PT0gMSAmJiBiYXNlLT5kaWdpdCgwKSA9PSAxKSB7CisgICAgaWYgKGJhc2UubGVuZ3RoKCkgPT0g
MSAmJiBiYXNlLmRpZ2l0KDApID09IDEpIHsKICAgICAgICAgLy8gKC0xKSAqKiBldmVuX251bWJl
ciA9PSAxLgotICAgICAgICBpZiAoYmFzZS0+c2lnbigpICYmICEoZXhwb25lbnQtPmRpZ2l0KDAp
ICYgMSkpCi0gICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnVuYXJ5TWludXNIZWFwKHZtLCBi
YXNlKTsKKyAgICAgICAgaWYgKGJhc2Uuc2lnbigpICYmICEoZXhwb25lbnQuZGlnaXQoMCkgJiAx
KSkKKyAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwodm0sIGJhc2Up
OwogCiAgICAgICAgIC8vICgtMSkgKiogb2RkX251bWJlciA9PSAtMTsgMSAqKiBhbnl0aGluZyA9
PSAxLgogICAgICAgICByZXR1cm4gYmFzZTsKQEAgLTI2OCwxMiArMzUzLDEyIEBAIEpTQmlnSW50
KiBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSGVhcChKU0cKICAgICAvLyBGb3IgYWxsIGJhc2VzID49
IDIsIHZlcnkgbGFyZ2UgZXhwb25lbnRzIHdvdWxkIGxlYWQgdG8gdW5yZXByZXNlbnRhYmxlCiAg
ICAgLy8gcmVzdWx0cy4KICAgICBzdGF0aWNfYXNzZXJ0KG1heExlbmd0aEJpdHMgPCBzdGQ6Om51
bWVyaWNfbGltaXRzPERpZ2l0Pjo6bWF4KCksICJtYXhMZW5ndGhCaXRzIG5lZWRzIHRvIGJlIGxl
c3MgdGhhbiBkaWdpdDo6bWF4KCkiKTsKLSAgICBpZiAoZXhwb25lbnQtPmxlbmd0aCgpID4gMSkg
eworICAgIGlmIChleHBvbmVudC5sZW5ndGgoKSA+IDEpIHsKICAgICAgICAgdGhyb3dSYW5nZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVy
YXRpb24gaXMgdG9vIGJpZyJfcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAot
ICAgIERpZ2l0IGV4cFZhbHVlID0gZXhwb25lbnQtPmRpZ2l0KDApOworICAgIERpZ2l0IGV4cFZh
bHVlID0gZXhwb25lbnQuZGlnaXQoMCk7CiAgICAgaWYgKGV4cFZhbHVlID09IDEpCiAgICAgICAg
IHJldHVybiBiYXNlOwogICAgIGlmIChleHBWYWx1ZSA+PSBtYXhMZW5ndGhCaXRzKSB7CkBAIC0y
ODMsNyArMzY4LDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVIZWFwKEpTRwog
CiAgICAgc3RhdGljX2Fzc2VydChtYXhMZW5ndGhCaXRzIDw9IG1heEludCwgIm1heExlbmd0aEJp
dHMgbmVlZHMgdG8gYmUgPD0gbWF4SW50Iik7CiAgICAgaW50IG4gPSBzdGF0aWNfY2FzdDxpbnQ+
KGV4cFZhbHVlKTsKLSAgICBpZiAoYmFzZS0+bGVuZ3RoKCkgPT0gMSAmJiBiYXNlLT5kaWdpdCgw
KSA9PSAyKSB7CisgICAgaWYgKGJhc2UubGVuZ3RoKCkgPT0gMSAmJiBiYXNlLmRpZ2l0KDApID09
IDIpIHsKICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciAyXm4uCiAgICAgICAgIGludCBuZWVkZWRE
aWdpdHMgPSAxICsgKG4gLyBkaWdpdEJpdHMpOwogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0g
SlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMp
OwpAQCAtMjk0LDE0ICszNzksMTQgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVI
ZWFwKEpTRwogICAgICAgICBEaWdpdCBtc2QgPSBzdGF0aWNfY2FzdDxEaWdpdD4oMSkgPDwgKG4g
JSBkaWdpdEJpdHMpOwogICAgICAgICByZXN1bHQtPnNldERpZ2l0KG5lZWRlZERpZ2l0cyAtIDEs
IG1zZCk7CiAgICAgICAgIC8vIFJlc3VsdCBpcyBuZWdhdGl2ZSBmb3Igb2RkIHBvd2VycyBvZiAt
Mm4uCi0gICAgICAgIGlmIChiYXNlLT5zaWduKCkpIAorICAgICAgICBpZiAoYmFzZS5zaWduKCkp
IAogICAgICAgICAgICAgcmVzdWx0LT5zZXRTaWduKHN0YXRpY19jYXN0PGJvb2w+KG4gJiAxKSk7
CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBKU0JpZ0ludCogcmVzdWx0
ID0gbnVsbHB0cjsKLSAgICBKU0JpZ0ludCogcnVubmluZ1NxdWFyZSA9IGJhc2U7CisgICAgSlNC
aWdJbnQqIHJ1bm5pbmdTcXVhcmUgPSBiYXNlLnRvSGVhcEJpZ0ludCh2bSk7CiAKICAgICAvLyBU
aGlzIGltcGxpY2l0bHkgc2V0cyB0aGUgcmVzdWx0J3Mgc2lnbiBjb3JyZWN0bHkuCiAgICAgaWYg
KG4gJiAxKQpAQCAtMzA5LDE0ICszOTQsMTQgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVu
dGlhdGVIZWFwKEpTRwogCiAgICAgbiA+Pj0gMTsKICAgICBmb3IgKDsgbjsgbiA+Pj0gMSkgewot
ICAgICAgICBKU0JpZ0ludCogbWF5YmVSZXN1bHQgPSBKU0JpZ0ludDo6bXVsdGlwbHlIZWFwKGds
b2JhbE9iamVjdCwgcnVubmluZ1NxdWFyZSwgcnVubmluZ1NxdWFyZSk7CisgICAgICAgIEpTQmln
SW50KiBtYXliZVJlc3VsdCA9IEpTQmlnSW50OjptdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0LCBy
dW5uaW5nU3F1YXJlLCBydW5uaW5nU3F1YXJlKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgIHJ1bm5pbmdTcXVhcmUgPSBtYXliZVJlc3VsdDsK
ICAgICAgICAgaWYgKG4gJiAxKSB7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBydW5uaW5nU3F1YXJlOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgbWF5YmVSZXN1bHQgPSBKU0JpZ0ludDo6bXVsdGlwbHlIZWFwKGdsb2JhbE9i
amVjdCwgcmVzdWx0LCBydW5uaW5nU3F1YXJlKTsKKyAgICAgICAgICAgICAgICBtYXliZVJlc3Vs
dCA9IEpTQmlnSW50OjptdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIHJ1bm5pbmdT
cXVhcmUpLnBheWxvYWQuYXNIZWFwQmlnSW50KCk7CiAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWF5
YmVSZXN1bHQ7CiAgICAgICAgICAgICB9CkBAIC0zMjYsMzUgKzQxMSw3MCBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUhlYXAoSlNHCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
SlNCaWdJbnQqIEpTQmlnSW50OjptdWx0aXBseUhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNWYWx1ZSBKU0JpZ0ludDo6ZXhwb25l
bnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBiYXNlLCBKU0Jp
Z0ludCogZXhwb25lbnQpOworeworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihleHBv
bmVudGlhdGVJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBiYXNlIH0sIEhlYXBC
aWdJbnRJbXBsIHsgZXhwb25lbnQgfSkpOworfQorCitKU1ZhbHVlIEpTQmlnSW50OjpleHBvbmVu
dGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIGJhc2UsIGludDMy
X3QgZXhwb25lbnQpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGV4cG9uZW50
aWF0ZUltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IGJhc2UgfSwgSW50MzJCaWdJ
bnRJbXBsIHsgZXhwb25lbnQgfSkpOworfQorCitKU1ZhbHVlIEpTQmlnSW50OjpleHBvbmVudGlh
dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBiYXNlLCBKU0JpZ0ludCog
ZXhwb25lbnQpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGV4cG9uZW50aWF0
ZUltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyBiYXNlIH0sIEhlYXBCaWdJbnRJ
bXBsIHsgZXhwb25lbnQgfSkpOworfQorCitKU1ZhbHVlIEpTQmlnSW50OjpleHBvbmVudGlhdGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBiYXNlLCBpbnQzMl90IGV4cG9u
ZW50KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihleHBvbmVudGlhdGVJbXBs
KGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgYmFzZSB9LCBJbnQzMkJpZ0ludEltcGwg
eyBleHBvbmVudCB9KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlw
ZW5hbWUgQmlnSW50SW1wbDI+CitJbXBsUmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkK
IHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKHgtPmlzWmVybygpKQorICAgIGlmICh4
LmlzWmVybygpKQogICAgICAgICByZXR1cm4geDsKLSAgICBpZiAoeS0+aXNaZXJvKCkpCisgICAg
aWYgKHkuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiB5OwogCi0gICAgdW5zaWduZWQgcmVzdWx0
TGVuZ3RoID0geC0+bGVuZ3RoKCkgKyB5LT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCByZXN1bHRM
ZW5ndGggPSB4Lmxlbmd0aCgpICsgeS5sZW5ndGgoKTsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0g
SlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgp
OwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIHJlc3VsdC0+
aW5pdGlhbGl6ZShJbml0aWFsaXphdGlvblR5cGU6OldpdGhaZXJvKTsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB4LT5sZW5ndGgoKTsgaSsrKQotICAgICAgICBtdWx0aXBseUFjY3Vt
dWxhdGUoeSwgeC0+ZGlnaXQoaSksIHJlc3VsdCwgaSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHgubGVuZ3RoKCk7IGkrKykKKyAgICAgICAgbXVsdGlwbHlBY2N1bXVsYXRlKHksIHgu
ZGlnaXQoaSksIHJlc3VsdCwgaSk7CiAKLSAgICByZXN1bHQtPnNldFNpZ24oeC0+c2lnbigpICE9
IHktPnNpZ24oKSk7CisgICAgcmVzdWx0LT5zZXRTaWduKHguc2lnbigpICE9IHkuc2lnbigpKTsK
ICAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJ
bnQ6OmRpdmlkZUhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgs
IEpTQmlnSW50KiB5KQorSlNWYWx1ZSBKU0JpZ0ludDo6bXVsdGlwbHkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0
cnlDb252ZXJ0VG9CaWdJbnQzMihtdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7Cit9
CitKU1ZhbHVlIEpTQmlnSW50OjptdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihtdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0sIEhl
YXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjptdWx0aXBseShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihtdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0LCBI
ZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitJbXBsUmVz
dWx0IEpTQmlnSW50OjpkaXZpZGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJp
Z0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgLy8gMS4gSWYgeSBpcyAwbiwgdGhy
b3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYg
KHktPmlzWmVybygpKSB7CisgICAgaWYgKHkuaXNaZXJvKCkpIHsKICAgICAgICAgdGhyb3dSYW5n
ZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1
ZS4iX3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC0zNjMsMTkgKzQ4Mywy
MSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmRpdmlkZUhlYXAoSlNHbG9iYWxPCiAgICAgLy8gMy4g
UmV0dXJuIGEgQmlnSW50IHJlcHJlc2VudGluZyBxdW90aWVudCByb3VuZGVkIHRvd2FyZHMgMCB0
byB0aGUgbmV4dAogICAgIC8vICAgIGludGVncmFsIHZhbHVlLgogICAgIGlmIChhYnNvbHV0ZUNv
bXBhcmUoeCwgeSkgPT0gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4pCi0gICAgICAgIHJldHVy
biBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CiAKICAgICBK
U0JpZ0ludCogcXVvdGllbnQgPSBudWxscHRyOwotICAgIGJvb2wgcmVzdWx0U2lnbiA9IHgtPnNp
Z24oKSAhPSB5LT5zaWduKCk7Ci0gICAgaWYgKHktPmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAg
RGlnaXQgZGl2aXNvciA9IHktPmRpZ2l0KDApOworICAgIGJvb2wgcmVzdWx0U2lnbiA9IHguc2ln
bigpICE9IHkuc2lnbigpOworICAgIGlmICh5Lmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgRGln
aXQgZGl2aXNvciA9IHkuZGlnaXQoMCk7CiAgICAgICAgIGlmIChkaXZpc29yID09IDEpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4LT5zaWduKCkgPyB4IDogSlNCaWdJbnQ6OnVu
YXJ5TWludXNIZWFwKHZtLCB4KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRTaWduID09IHgu
c2lnbigpID8gSW1wbFJlc3VsdCB7IHggfSA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbCh2bSwg
eCk7CiAKICAgICAgICAgRGlnaXQgcmVtYWluZGVyOwotICAgICAgICBhYnNvbHV0ZURpdldpdGhE
aWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsICZxdW90aWVudCwgcmVtYWluZGVyKTsKKyAgICAg
ICAgLy8gT09QUzogTWF5YmUgdGVtcGxhdGl6ZSB0aGlzCisgICAgICAgIGFic29sdXRlRGl2V2l0
aERpZ2l0RGl2aXNvcih2bSwgeC50b0hlYXBCaWdJbnQodm0pLCBkaXZpc29yLCAmcXVvdGllbnQs
IHJlbWFpbmRlcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYWJzb2x1dGVEaXZXaXRoQmlnSW50
RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHksICZxdW90aWVudCwgbnVsbHB0cik7CisgICAgICAg
IC8vIE9PUFM6IE1heWJlIHRlbXBsYXRpemUgdGhpcworICAgICAgICBhYnNvbHV0ZURpdldpdGhC
aWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeC50b0hlYXBCaWdJbnQodm0pLCB5LnRvSGVhcEJp
Z0ludCh2bSksICZxdW90aWVudCwgbnVsbHB0cik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogICAgIH0KIApAQCAtMzgzLDYgKzUwNSwxOSBAQCBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmRpdmlkZUhlYXAoSlNHbG9iYWxPCiAgICAgcmV0dXJuIHF1b3RpZW50LT5y
aWdodFRyaW0odm0pOwogfQogCitKU1ZhbHVlIEpTQmlnSW50OjpkaXZpZGUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVy
biB0cnlDb252ZXJ0VG9CaWdJbnQzMihkaXZpZGVJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0lu
dEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50
OjpkaXZpZGUoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihkaXZpZGVJbXBsKGdsb2JhbE9iamVjdCwgSGVh
cEJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBK
U0JpZ0ludDo6ZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkK
K3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGl2aWRlSW1wbChnbG9iYWxPYmpl
Y3QsIEludDMyQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KKwog
SlNCaWdJbnQqIEpTQmlnSW50Ojpjb3B5KFZNJiB2bSwgSlNCaWdJbnQqIHgpCiB7CiAgICAgQVNT
RVJUKCF4LT5pc1plcm8oKSk7CkBAIC0zOTMsMjMgKzUyOCwzMCBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmNvcHkoVk0mIHZtLCBKU0JpZ0luCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJ
bnQqIEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcChWTSYgdm0sIEpTQmlnSW50KiB4KQordGVtcGxh
dGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CitJbXBsUmVzdWx0IEpTQmlnSW50Ojp1bmFyeU1pbnVz
SW1wbChWTSYgdm0sIEJpZ0ludEltcGwgeCkKIHsKLSAgICBpZiAoeC0+aXNaZXJvKCkpCi0gICAg
ICAgIHJldHVybiB4OworICAgIGlmICh4LmlzWmVybygpKQorICAgICAgICByZXR1cm4ganNCaWdJ
bnQzMigwKTsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjb3B5KHZtLCB4KTsKLSAgICByZXN1
bHQtPnNldFNpZ24oIXgtPnNpZ24oKSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNvcHkodm0s
IHgudG9IZWFwQmlnSW50KHZtKSk7CisgICAgcmVzdWx0LT5zZXRTaWduKCF4LnNpZ24oKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpyZW1haW5kZXJIZWFw
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkK
K0pTVmFsdWUgSlNCaWdJbnQ6OnVuYXJ5TWludXMoVk0mIHZtLCBKU0JpZ0ludCogeCkKK3sKKyAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIodW5hcnlNaW51c0ltcGwodm0sIEhlYXBCaWdJ
bnRJbXBsIHsgeCB9KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlw
ZW5hbWUgQmlnSW50SW1wbDI+CitJbXBsUmVzdWx0IEpTQmlnSW50OjpyZW1haW5kZXJJbXBsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkp
CiB7CiAgICAgLy8gMS4gSWYgeSBpcyAwbiwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4K
ICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogICAgIAotICAgIGlmICh5LT5pc1plcm8oKSkgeworICAgIGlm
ICh5LmlzWmVybygpKSB7CiAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiMCBpcyBhbiBpbnZhbGlkIGRpdmlzb3IgdmFsdWUuIl9zKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQpAQCAtNDIwLDU0ICs1NjIsNzggQEAgSlNCaWdJbnQqIEpTQmlnSW50
OjpyZW1haW5kZXJIZWFwKEpTR2xvYgogICAgICAgICByZXR1cm4geDsKIAogICAgIEpTQmlnSW50
KiByZW1haW5kZXI7Ci0gICAgaWYgKHktPmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgRGlnaXQg
ZGl2aXNvciA9IHktPmRpZ2l0KDApOworICAgIGlmICh5Lmxlbmd0aCgpID09IDEpIHsKKyAgICAg
ICAgRGlnaXQgZGl2aXNvciA9IHkuZGlnaXQoMCk7CiAgICAgICAgIGlmIChkaXZpc29yID09IDEp
Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgICAgICByZXR1cm4g
anNCaWdJbnQzMigwKTsKIAogICAgICAgICBEaWdpdCByZW1haW5kZXJEaWdpdDsKLSAgICAgICAg
YWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKHZtLCB4LCBkaXZpc29yLCBudWxscHRyLCByZW1h
aW5kZXJEaWdpdCk7CisgICAgICAgIC8vIE9PUFM6IE1heWJlIHRlbXBsYXRpemUgdGhpcworICAg
ICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIHgudG9IZWFwQmlnSW50KHZtKSwg
ZGl2aXNvciwgbnVsbHB0ciwgcmVtYWluZGVyRGlnaXQpOwogICAgICAgICBpZiAoIXJlbWFpbmRl
ckRpZ2l0KQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgICAgICAgICAg
cmV0dXJuIGpzQmlnSW50MzIoMCk7CiAKICAgICAgICAgcmVtYWluZGVyID0gY3JlYXRlV2l0aExl
bmd0aFVuY2hlY2tlZCh2bSwgMSk7CiAgICAgICAgIHJlbWFpbmRlci0+c2V0RGlnaXQoMCwgcmVt
YWluZGVyRGlnaXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aEJpZ0lu
dERpdmlzb3IoZ2xvYmFsT2JqZWN0LCB4LCB5LCBudWxscHRyLCAmcmVtYWluZGVyKTsKKyAgICAg
ICAgLy8gT09QUzogTWF5YmUgdGVtcGxhdGl6ZSB0aGlzCisgICAgICAgIGFic29sdXRlRGl2V2l0
aEJpZ0ludERpdmlzb3IoZ2xvYmFsT2JqZWN0LCB4LnRvSGVhcEJpZ0ludCh2bSksIHkudG9IZWFw
QmlnSW50KHZtKSwgbnVsbHB0ciwgJnJlbWFpbmRlcik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIH0KIAotICAgIHJlbWFpbmRlci0+c2V0U2lnbih4
LT5zaWduKCkpOworICAgIHJlbWFpbmRlci0+c2V0U2lnbih4LnNpZ24oKSk7CiAgICAgcmV0dXJu
IHJlbWFpbmRlci0+cmlnaHRUcmltKHZtKTsKIH0KK0pTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
Cit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHJlbWFpbmRlckltcGwoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30K
K0pTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4
LCBpbnQzMl90IHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHJlbWFpbmRl
ckltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBs
IHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpyZW1haW5kZXIoSlNHbG9iYWxPYmplY3Qq
LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihyZW1haW5kZXJJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgeCB9LCBI
ZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmluY0hlYXAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQmlnSW50SW1wbD4KK0ltcGxSZXN1bHQgSlNCaWdJbnQ6OmluY0ltcGwoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4KQogewotICAgIGlmICgheC0+c2lnbigp
KQorICAgIGlmICgheC5zaWduKCkpCiAgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9i
YWxPYmplY3QsIHgsIFNpZ25PcHRpb246OlVuc2lnbmVkKTsKLSAgICBKU0JpZ0ludCogcmVzdWx0
ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4LT5sZW5ndGgoKSk7CisgICAgSlNC
aWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwgeC5sZW5ndGgo
KSk7CiAgICAgaWYgKHJlc3VsdC0+aXNaZXJvKCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgcmVzdWx0LT5zZXRTaWduKHRydWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUpTQmln
SW50KiBKU0JpZ0ludDo6ZGVjSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogeCkKK0pTVmFsdWUgSlNCaWdJbnQ6OmluYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCkKIHsKLSAgICBpZiAoeC0+aXNaZXJvKCkpIHsKLSAgICAgICAgSlNC
aWdJbnQqIHJlc3VsdCA9IGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0LT52bSgpLCAxKTsKLSAgICAg
ICAgcmVzdWx0LT5zZXRTaWduKHRydWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICBpZiAoIXgtPnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViT25lKGdsb2Jh
bE9iamVjdCwgeCwgeC0+bGVuZ3RoKCkpOworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQz
MihpbmNJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0pKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CitJbXBsUmVzdWx0IEpTQmlnSW50OjpkZWNJbXBs
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKK3sKKyAgICBpZiAo
eC5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoLTEpOworICAgIGlmICgheC5z
aWduKCkpCisgICAgICAgIHJldHVybiBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHgu
bGVuZ3RoKCkpOwogICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHgsIFNp
Z25PcHRpb246OlNpZ25lZCk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWRkSGVhcChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCitKU1Zh
bHVlIEpTQmlnSW50OjpkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQq
IHgpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGRlY0ltcGwoZ2xvYmFsT2Jq
ZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIEJpZ0ludEltcGwyPgorSW1wbFJlc3VsdCBKU0JpZ0ludDo6YWRkSW1wbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBib29sIHhTaWduID0geC0+
c2lnbigpOworICAgIGJvb2wgeFNpZ24gPSB4LnNpZ24oKTsKIAogICAgIC8vIHggKyB5ID09IHgg
KyB5CiAgICAgLy8gLXggKyAteSA9PSAtKHggKyB5KQpAQCAtNDgyLDExICs2NDgsMjQgQEAgSlNC
aWdJbnQqIEpTQmlnSW50OjphZGRIZWFwKEpTR2xvYmFsT2JqZQogCiAgICAgcmV0dXJuIGFic29s
dXRlU3ViKHZtLCB5LCB4LCAheFNpZ24pOwogfQorSlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYWRkSW1wbChnbG9iYWxPYmplY3QsIEhlYXBC
aWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0Jp
Z0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQz
Ml90IHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGFkZEltcGwoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9
CitKU1ZhbHVlIEpTQmlnSW50OjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50
MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
YWRkSW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludElt
cGwgeyB5IH0pKTsKK30KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpzdWJIZWFwKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsMSwgQmlnSW50SW1wbDI+CitJbXBsUmVzdWx0IEpTQmlnSW50Ojpz
dWJJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGJvb2wg
eFNpZ24gPSB4LT5zaWduKCk7CisgICAgYm9vbCB4U2lnbiA9IHguc2lnbigpOwogICAgIGlmICh4
U2lnbiAhPSB5LT5zaWduKCkpIHsKICAgICAgICAgLy8geCAtICgteSkgPT0geCArIHkKICAgICAg
ICAgLy8gKC14KSAtIHkgPT0gLSh4ICsgeSkKQEAgLTUwMSw1OSArNjgwLDkwIEBAIEpTQmlnSW50
KiBKU0JpZ0ludDo6c3ViSGVhcChKU0dsb2JhbE9iamUKICAgICByZXR1cm4gYWJzb2x1dGVTdWIo
dm0sIHksIHgsICF4U2lnbik7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lzZUFuZEhl
YXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KQorSlNWYWx1ZSBKU0JpZ0ludDo6c3ViKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50
MzIoc3ViSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50
SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6c3ViKEpTR2xvYmFsT2JqZWN0Kiwg
SlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50
MzIoc3ViSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0lu
dEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OnN1YihKU0dsb2JhbE9iamVjdCos
IGludDMyX3QgeSwgSlNCaWdJbnQqIHgpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0lu
dDMyKHN1YkltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJ
bnRJbXBsIHsgeSB9KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgQmln
SW50SW1wbDI+CitJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIXgtPnNpZ24oKSAmJiAheS0+c2lnbigpKSB7Cisg
ICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwogICAgICAgICByZXR1cm4gYWJzb2x1dGVBbmQodm0sIHgsIHkpOwogICAgIH0KICAgICAKLSAg
ICBpZiAoeC0+c2lnbigpICYmIHktPnNpZ24oKSkgeworICAgIGlmICh4LnNpZ24oKSAmJiB5LnNp
Z24oKSkgewogICAgICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC0+bGVuZ3RoKCks
IHktPmxlbmd0aCgpKSArIDE7CiAgICAgICAgIC8vICgteCkgJiAoLXkpID09IH4oeC0xKSAmIH4o
eS0xKSA9PSB+KCh4LTEpIHwgKHktMSkpCiAgICAgICAgIC8vID09IC0oKCh4LTEpIHwgKHktMSkp
ICsgMSkKICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9i
amVjdCwgeCwgcmVzdWx0TGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAKLSAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xv
YmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgoKSk7CisgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29s
dXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZU9y
KHZtLCByZXN1bHQsIHkxKTsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1
cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIFNpZ25PcHRpb246OlNpZ25l
ZCk7CiAgICAgfQogCi0gICAgQVNTRVJUKHgtPnNpZ24oKSAhPSB5LT5zaWduKCkpOwotICAgIC8v
IEFzc3VtZSB0aGF0IHggaXMgdGhlIHBvc2l0aXZlIEJpZ0ludC4KLSAgICBpZiAoeC0+c2lnbigp
KQotICAgICAgICBzdGQ6OnN3YXAoeCwgeSk7Ci0gICAgCisgICAgQVNTRVJUKHguc2lnbigpICE9
IHkuc2lnbigpKTsKICAgICAvLyB4ICYgKC15KSA9PSB4ICYgfih5LTEpCi0gICAgSlNCaWdJbnQq
IHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgoKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGFic29sdXRl
QW5kTm90KHZtLCB4LCB5MSk7CisgICAgYXV0byBjb21wdXRlUmVzdWx0ID0gWyZdIChhdXRvIHgs
IGF1dG8geSkgeworICAgICAgICBBU1NFUlQoIXguc2lnbigpKTsgCisgICAgICAgIEFTU0VSVCh5
LnNpZ24oKSk7IAorICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxP
YmplY3QsIHksIHkubGVuZ3RoKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlQW5kTm90KHZtLCB4LCB5MSk7Cisg
ICAgfTsKKyAgICBpZiAoeC5zaWduKCkpCisgICAgICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHks
IHgpOworICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHgsIHkpOwogfQogCi1KU0JpZ0ludCogSlNC
aWdJbnQ6OmJpdHdpc2VPckhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KQorSlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZUFuZChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7CisgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VBbmRJbXBsKGdsb2JhbE9iamVjdCwg
SGVhcEJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVl
IEpTQmlnSW50OjpiaXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMy
X3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZUFuZEltcGwo
Z2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9
KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0KiwgaW50
MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
Yml0d2lzZUFuZEltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBC
aWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwg
QmlnSW50SW1wbDI+CitJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlT3JJbXBsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4
KHgtPmxlbmd0aCgpLCB5LT5sZW5ndGgoKSk7CisgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0g
c3RkOjptYXgoeC5sZW5ndGgoKSwgeS5sZW5ndGgoKSk7CiAKLSAgICBpZiAoIXgtPnNpZ24oKSAm
JiAheS0+c2lnbigpKSB7CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKICAgICAg
ICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gYWJzb2x1dGVPcih2bSwgeCwgeSk7
CiAgICAgfQogICAgIAotICAgIGlmICh4LT5zaWduKCkgJiYgeS0+c2lnbigpKSB7CisgICAgaWYg
KHguc2lnbigpICYmIHkuc2lnbigpKSB7CiAgICAgICAgIC8vICgteCkgfCAoLXkpID09IH4oeC0x
KSB8IH4oeS0xKSA9PSB+KCh4LTEpICYgKHktMSkpCiAgICAgICAgIC8vID09IC0oKCh4LTEpICYg
KHktMSkpICsgMSkKICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGds
b2JhbE9iamVjdCwgeCwgcmVzdWx0TGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7Ci0gICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25l
KGdsb2JhbE9iamVjdCwgeSwgeS0+bGVuZ3RoKCkpOworICAgICAgICBKU0JpZ0ludCogeTEgPSBh
YnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgcmVzdWx0ID0gYWJzb2x1
dGVBbmQodm0sIHJlc3VsdCwgeTEpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKQEAgLTU2Miw5MSArNzcyLDE2NiBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmJp
dHdpc2VPckhlYXAoSlNHbG9iCiAgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxP
YmplY3QsIHJlc3VsdCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKICAgICB9CiAgICAgCi0gICAgQVNT
RVJUKHgtPnNpZ24oKSAhPSB5LT5zaWduKCkpOworICAgIEFTU0VSVCh4LnNpZ24oKSAhPSB5LnNp
Z24oKSk7CiAKLSAgICAvLyBBc3N1bWUgdGhhdCB4IGlzIHRoZSBwb3NpdGl2ZSBCaWdJbnQuCi0g
ICAgaWYgKHgtPnNpZ24oKSkKLSAgICAgICAgc3RkOjpzd2FwKHgsIHkpOwotICAgIAogICAgIC8v
IHggfCAoLXkpID09IHggfCB+KHktMSkgPT0gfigoeS0xKSAmfiB4KSA9PSAtKCgoeS0xKSAmfiB4
KSArIDEpCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVj
dCwgeSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKLSAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZE5vdCh2bSwgcmVzdWx0LCB4KTsKKyAgICBh
dXRvIGNvbXB1dGVSZXN1bHQgPSBbJl0gKGF1dG8geCwgYXV0byB5KSB7CisgICAgICAgIEFTU0VS
VCgheC5zaWduKCkpOworICAgICAgICBBU1NFUlQoeS5zaWduKCkpOworCisgICAgICAgIEpTQmln
SW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHJlc3VsdExlbmd0
aCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAg
ICByZXN1bHQgPSBhYnNvbHV0ZUFuZE5vdCh2bSwgcmVzdWx0LCB4KTsKIAotICAgIHNjb3BlLnJl
bGVhc2UoKTsKLSAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCByZXN1bHQs
IFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAg
cmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBTaWduT3B0aW9uOjpT
aWduZWQpOworICAgIH07CisKKyAgICBpZiAoeC5zaWduKCkpCisgICAgICAgIHJldHVybiBjb21w
dXRlUmVzdWx0KHksIHgpOworICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHgsIHkpOworfQorCitK
U1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihnbG9iYWxPYmplY3QsIGJpdHdpc2VPckltcGwoSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhl
YXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNlT3IoSlNH
bG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlD
b252ZXJ0VG9CaWdJbnQzMihnbG9iYWxPYmplY3QsIGJpdHdpc2VPckltcGwoSGVhcEJpZ0ludElt
cGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6
Yml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZ2xvYmFsT2JqZWN0LCBiaXR3aXNlT3JJbXBs
KEludDMyQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlWG9ySGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbDEsIEJpZ0ludEltcGwyPgorSW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF4LT5zaWduKCkgJiYgIXktPnNp
Z24oKSkgeworICAgIGlmICgheC5zaWduKCkgJiYgIXkuc2lnbigpKSB7CiAgICAgICAgIHNjb3Bl
LnJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIGFic29sdXRlWG9yKHZtLCB4LCB5KTsKICAgICB9
CiAgICAgCi0gICAgaWYgKHgtPnNpZ24oKSAmJiB5LT5zaWduKCkpIHsKLSAgICAgICAgaW50IHJl
c3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgtPmxlbmd0aCgpLCB5LT5sZW5ndGgoKSk7CisgICAgaWYg
KHguc2lnbigpICYmIHkuc2lnbigpKSB7CisgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6
Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0aCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vICgteCkg
XiAoLXkpID09IH4oeC0xKSBeIH4oeS0xKSA9PSAoeC0xKSBeICh5LTEpCiAgICAgICAgIEpTQmln
SW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHJlc3VsdExlbmd0
aCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAg
ICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHktPmxlbmd0
aCgpKTsKKyAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0
LCB5LCB5Lmxlbmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAgICAgICByZXR1cm4gYWJzb2x1
dGVYb3Iodm0sIHJlc3VsdCwgeTEpOwogICAgIH0KLSAgICBBU1NFUlQoeC0+c2lnbigpICE9IHkt
PnNpZ24oKSk7CisgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2lnbigpKTsKICAgICBpbnQgcmVz
dWx0TGVuZ3RoID0gc3RkOjptYXgoeC0+bGVuZ3RoKCksIHktPmxlbmd0aCgpKSArIDE7CisKKyAg
ICAvLyB4IF4gKC15KSA9PSB4IF4gfih5LTEpID09IH4oeCBeICh5LTEpKSA9PSAtKCh4IF4gKHkt
MSkpICsgMSkKKyAgICBhdXRvIGNvbXB1dGVSZXN1bHQgPSBbJl0gKGF1dG8geCwgYXV0byB5KSB7
CisgICAgICAgIEFTU0VSVCgheC5zaWduKCkpOworICAgICAgICBBU1NFUlQoeS5zaWduKCkpOwor
ICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5
LCByZXN1bHRMZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKKworICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZVhvcih2bSwgcmVzdWx0LCB4KTsKKyAg
ICAgICAgc2NvcGUucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xv
YmFsT2JqZWN0LCByZXN1bHQsIFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgfTsKICAgICAKICAg
ICAvLyBBc3N1bWUgdGhhdCB4IGlzIHRoZSBwb3NpdGl2ZSBCaWdJbnQuCi0gICAgaWYgKHgtPnNp
Z24oKSkKLSAgICAgICAgc3RkOjpzd2FwKHgsIHkpOwotICAgIAotICAgIC8vIHggXiAoLXkpID09
IHggXiB+KHktMSkgPT0gfih4IF4gKHktMSkpID09IC0oKHggXiAoeS0xKSkgKyAxKQotICAgIEpT
QmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHJlc3VsdExl
bmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgaWYg
KHguc2lnbigpKQorICAgICAgICByZXR1cm4gY29tcHV0ZVJlc3VsdCh5LCB4KTsKKyAgICByZXR1
cm4gY29tcHV0ZVJlc3VsdCh4LCB5KTsKK30KIAotICAgIHJlc3VsdCA9IGFic29sdXRlWG9yKHZt
LCByZXN1bHQsIHgpOwotICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gYWJzb2x1dGVB
ZGRPbmUoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIFNpZ25PcHRpb246OlNpZ25lZCk7CitKU1ZhbHVl
IEpTQmlnSW50OjpiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmln
SW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
Yml0d2lzZVhvckltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJp
Z0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VYb3IoSlNHbG9i
YWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihiaXR3aXNlWG9ySW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBs
IHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmJp
dHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlWG9ySW1wbChnbG9iYWxPYmplY3Qs
IEludDMyQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50OjpsZWZ0U2hpZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsMSwgQmlnSW50SW1wbDI+CitJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hpZnRJbXBsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkp
CiB7Ci0gICAgaWYgKHktPmlzWmVybygpIHx8IHgtPmlzWmVybygpKQorICAgIGlmICh4LmlzWmVy
bygpIHx8IHkuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiB4OwogCi0gICAgaWYgKHktPnNpZ24o
KSkKKyAgICBpZiAoeS5zaWduKCkpCiAgICAgICAgIHJldHVybiByaWdodFNoaWZ0QnlBYnNvbHV0
ZShnbG9iYWxPYmplY3QsIHgsIHkpOwogCiAgICAgcmV0dXJuIGxlZnRTaGlmdEJ5QWJzb2x1dGUo
Z2xvYmFsT2JqZWN0LCB4LCB5KTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpzaWduZWRSaWdo
dFNoaWZ0SGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCitKU1ZhbHVlIEpTQmlnSW50OjpsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlD
b252ZXJ0VG9CaWdJbnQzMihsZWZ0U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50Ojps
ZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIGludDMy
X3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIobGVmdFNoaWZ0SW1wbChn
bG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0p
KTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmxlZnRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0
VG9CaWdJbnQzMihsZWZ0U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsg
eCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6bGVmdFNo
aWZ0U2xvdyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3Qg
eSkKIHsKLSAgICBpZiAoeS0+aXNaZXJvKCkgfHwgeC0+aXNaZXJvKCkpCisgICAgcmV0dXJuIHRy
eUNvbnZlcnRUb0JpZ0ludDMyKGxlZnRTaGlmdEltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0lu
dEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQmlnSW50SW1wbDEsIEJpZ0ludEltcGwyPgorSW1wbFJlc3VsdCBKU0JpZ0ludDo6c2ln
bmVkUmlnaHRTaGlmdEltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1w
bDEgeCwgQmlnSW50SW1wbDIgeSkKK3sKKyAgICBpZiAoeC5pc1plcm8oKSB8fCB5LmlzWmVybygp
KQogICAgICAgICByZXR1cm4geDsKIAotICAgIGlmICh5LT5zaWduKCkpCisgICAgaWYgKHkuc2ln
bigpKQogICAgICAgICByZXR1cm4gbGVmdFNoaWZ0QnlBYnNvbHV0ZShnbG9iYWxPYmplY3QsIHgs
IHkpOwogCiAgICAgcmV0dXJuIHJpZ2h0U2hpZnRCeUFic29sdXRlKGdsb2JhbE9iamVjdCwgeCwg
eSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lzZU5vdEhlYXAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCitKU1ZhbHVlIEpTQmlnSW50OjpzaWduZWRS
aWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoc2lnbmVkUmlnaHRT
aGlmdEltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludElt
cGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAgICBy
ZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoc2lnbmVkUmlnaHRTaGlmdEltcGwoZ2xvYmFsT2Jq
ZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitK
U1ZhbHVlIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRU
b0JpZ0ludDMyKHNpZ25lZFJpZ2h0U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJ
bXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbD4KK0ltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VOb3RJbXBsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKIHsKLSAgICBpZiAoeC0+c2ln
bigpKSB7CisgICAgaWYgKHguc2lnbigpKSB7CiAgICAgICAgIC8vIH4oLXgpID09IH4ofih4LTEp
KSA9PSB4LTEKLSAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwg
eC0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0
LCB4LCB4Lmxlbmd0aCgpKTsKICAgICB9IAogICAgIC8vIH54ID09IC14LTEgPT0gLSh4KzEpCiAg
ICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6U2ln
bmVkKTsKIH0KIAorSlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZU5vdChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmln
SW50MzIoYml0d2lzZU5vdEltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSkp
OworfQorCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICNkZWZpbmUgSEFWRV9UV09fRElHSVQgMQog
dHlwZWRlZiB1aW50NjRfdCBUd29EaWdpdDsKQEAgLTg1MCwxNSArMTEzNSwxNiBAQCB2b2lkIEpT
QmlnSW50OjppbnRlcm5hbE11bHRpcGx5QWRkKEpTQmlnCiAvLyB7YWNjdW11bGF0b3J9LCBzdGFy
dGluZyBhdCB7YWNjdW11bGF0b3JJbmRleH0gZm9yIHRoZSBsZWFzdC1zaWduaWZpY2FudAogLy8g
ZGlnaXQuCiAvLyBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQge2FjY3VtdWxhdG9yfSBpcyBiaWcg
ZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdC4KLXZvaWQgSlNCaWdJbnQ6Om11bHRpcGx5QWNjdW11
bGF0ZShKU0JpZ0ludCogbXVsdGlwbGljYW5kLCBEaWdpdCBtdWx0aXBsaWVyLCBKU0JpZ0ludCog
YWNjdW11bGF0b3IsIHVuc2lnbmVkIGFjY3VtdWxhdG9ySW5kZXgpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbD4KK3ZvaWQgSlNCaWdJbnQ6Om11bHRpcGx5QWNjdW11bGF0ZShCaWdJbnRJ
bXBsIG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwgSlNCaWdJbnQqIGFjY3VtdWxhdG9y
LCB1bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KQogewotICAgIEFTU0VSVChhY2N1bXVsYXRvci0+
bGVuZ3RoKCkgPiBtdWx0aXBsaWNhbmQtPmxlbmd0aCgpICsgYWNjdW11bGF0b3JJbmRleCk7Cisg
ICAgQVNTRVJUKGFjY3VtdWxhdG9yLT5sZW5ndGgoKSA+IG11bHRpcGxpY2FuZC5sZW5ndGgoKSAr
IGFjY3VtdWxhdG9ySW5kZXgpOwogICAgIGlmICghbXVsdGlwbGllcikKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIERpZ2l0IGNhcnJ5ID0gMDsKICAgICBEaWdpdCBoaWdoID0gMDsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbXVsdGlwbGljYW5kLT5sZW5ndGgoKTsgaSsrLCBhY2N1
bXVsYXRvckluZGV4KyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbXVsdGlwbGlj
YW5kLmxlbmd0aCgpOyBpKyssIGFjY3VtdWxhdG9ySW5kZXgrKykgewogICAgICAgICBEaWdpdCBh
Y2MgPSBhY2N1bXVsYXRvci0+ZGlnaXQoYWNjdW11bGF0b3JJbmRleCk7CiAgICAgICAgIERpZ2l0
IG5ld0NhcnJ5ID0gMDsKICAgICAgICAgCkBAIC04NjcsNyArMTE1Myw3IEBAIHZvaWQgSlNCaWdJ
bnQ6Om11bHRpcGx5QWNjdW11bGF0ZShKU0JpZ0kKICAgICAgICAgYWNjID0gZGlnaXRBZGQoYWNj
LCBjYXJyeSwgbmV3Q2FycnkpOwogICAgICAgICAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGlzIHJv
dW5kJ3MgbXVsdGlwbGljYXRpb24uCi0gICAgICAgIERpZ2l0IG11bHRpcGxpY2FuZERpZ2l0ID0g
bXVsdGlwbGljYW5kLT5kaWdpdChpKTsKKyAgICAgICAgRGlnaXQgbXVsdGlwbGljYW5kRGlnaXQg
PSBtdWx0aXBsaWNhbmQuZGlnaXQoaSk7CiAgICAgICAgIERpZ2l0IGxvdyA9IGRpZ2l0TXVsKG11
bHRpcGxpZXIsIG11bHRpcGxpY2FuZERpZ2l0LCBoaWdoKTsKICAgICAgICAgYWNjID0gZGlnaXRB
ZGQoYWNjLCBsb3csIG5ld0NhcnJ5KTsKICAgICAgICAgCkBAIC05MjEsMjMgKzEyMDcsMjQgQEAg
SlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmNvbQogICAgIHJldHVybiBDb21w
YXJpc29uUmVzdWx0OjpFcXVhbDsgCiB9CiAKLWlubGluZSBKU0JpZ0ludDo6Q29tcGFyaXNvblJl
c3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVDb21wYXJlKEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgQmlnSW50SW1wbDI+CitpbmxpbmUgSlNC
aWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlQ29tcGFyZShCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAgIEFTU0VSVCgheC0+bGVuZ3RoKCkgfHwgeC0+
ZGlnaXQoeC0+bGVuZ3RoKCkgLSAxKSk7Ci0gICAgQVNTRVJUKCF5LT5sZW5ndGgoKSB8fCB5LT5k
aWdpdCh5LT5sZW5ndGgoKSAtIDEpKTsKKyAgICBBU1NFUlQoIXgubGVuZ3RoKCkgfHwgeC5pZ2l0
KHgubGVuZ3RoKCkgLSAxKSk7CisgICAgQVNTRVJUKCF5Lmxlbmd0aCgpIHx8IHkuZGlnaXQoeS5s
ZW5ndGgoKSAtIDEpKTsKIAotICAgIGludCBkaWZmID0geC0+bGVuZ3RoKCkgLSB5LT5sZW5ndGgo
KTsKKyAgICBpbnQgZGlmZiA9IHgubGVuZ3RoKCkgLSB5Lmxlbmd0aCgpOwogICAgIGlmIChkaWZm
KQogICAgICAgICByZXR1cm4gZGlmZiA8IDAgPyBDb21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbiA6
IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFuOwogCi0gICAgaW50IGkgPSB4LT5sZW5ndGgo
KSAtIDE7Ci0gICAgd2hpbGUgKGkgPj0gMCAmJiB4LT5kaWdpdChpKSA9PSB5LT5kaWdpdChpKSkK
KyAgICBpbnQgaSA9IHgubGVuZ3RoKCkgLSAxOworICAgIHdoaWxlIChpID49IDAgJiYgeC5kaWdp
dChpKSA9PSB5LmRpZ2l0KGkpKQogICAgICAgICBpLS07CiAKICAgICBpZiAoaSA8IDApCiAgICAg
ICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpFcXVhbDsKIAotICAgIHJldHVybiB4LT5kaWdp
dChpKSA+IHktPmRpZ2l0KGkpID8gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW4gOiBDb21w
YXJpc29uUmVzdWx0OjpMZXNzVGhhbjsKKyAgICByZXR1cm4geC5kaWdpdChpKSA+IHkuZGlnaXQo
aSkgPyBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6Okxl
c3NUaGFuOwogfQogCiBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSwgYm9vbCByZXN1bHRT
aWduKQpAQCAtOTUzLDcgKzEyNDAsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRk
KEpTR2xvYmFsCiAgICAgfQogCiAgICAgaWYgKHktPmlzWmVybygpKQotICAgICAgICByZXR1cm4g
cmVzdWx0U2lnbiA9PSB4LT5zaWduKCkgPyB4IDogdW5hcnlNaW51c0hlYXAodm0sIHgpOworICAg
ICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4LT5zaWduKCkgPyB4IDogdW5hcnlNaW51c0ltcGwo
dm0sIHgpOwogCiAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRo
TGVuZ3RoKGdsb2JhbE9iamVjdCwgeC0+bGVuZ3RoKCkgKyAxKTsKICAgICBpZiAoIXJlc3VsdCkK
QEAgLTk5Myw3ICsxMjgwLDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZVN1YihWTSYg
dm0sIAogICAgIH0KIAogICAgIGlmICh5LT5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dFNpZ24gPT0geC0+c2lnbigpID8geCA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcCh2bSwgeCk7
CisgICAgICAgIHJldHVybiByZXN1bHRTaWduID09IHgtPnNpZ24oKSA/IHggOiBKU0JpZ0ludDo6
dW5hcnlNaW51c0ltcGwodm0sIHgpOwogCiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29t
cGFyaXNvblJlc3VsdDo6RXF1YWwpCiAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlWmVy
byh2bSk7CkBAIC0xMDM2LDEzICsxMzIzLDEzIEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2
V2l0aERpZ2l0RGl2aXMKICAgICBBU1NFUlQoIXgtPmlzWmVybygpKTsKICAgICByZW1haW5kZXIg
PSAwOwogICAgIGlmIChkaXZpc29yID09IDEpIHsKLSAgICAgICAgaWYgKHF1b3RpZW50ICE9IG51
bGxwdHIpCisgICAgICAgIGlmIChxdW90aWVudCkKICAgICAgICAgICAgICpxdW90aWVudCA9IHg7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB4LT5sZW5n
dGgoKTsKLSAgICBpZiAocXVvdGllbnQgIT0gbnVsbHB0cikgeworICAgIGlmIChxdW90aWVudCkg
ewogICAgICAgICBpZiAoKnF1b3RpZW50ID09IG51bGxwdHIpCiAgICAgICAgICAgICAqcXVvdGll
bnQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKIApA
QCAtMTI3MCw4ICsxNTU3LDggQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlm
dEFsdwogLy8gSGVscGVyIGZvciBBYnNvbHV0ZXtBbmQsQW5kTm90LE9yLFhvcn0uCiAvLyBQZXJm
b3JtcyB0aGUgZ2l2ZW4gYmluYXJ5IHtvcH0gb24gZGlnaXQgcGFpcnMgb2Yge3h9IGFuZCB7eX07
IHdoZW4gdGhlCiAvLyBlbmQgb2YgdGhlIHNob3J0ZXIgb2YgdGhlIHR3byBpcyByZWFjaGVkLCB7
ZXh0cmFEaWdpdHN9IGNvbmZpZ3VyZXMgaG93Ci0vLyByZW1haW5pbmcgZGlnaXRzIGluIHRoZSBs
b25nZXIgaW5wdXQgKGlmIHtzeW1tZXRyaWN9ID09IFN5bW1ldHJpYywgaW4KLS8vIHt4fSBvdGhl
cndpc2UpIGFyZSBoYW5kbGVkOiBjb3BpZWQgdG8gdGhlIHJlc3VsdCBvciBpZ25vcmVkLgorLy8g
cmVtYWluaW5nIGRpZ2l0cyBpbiB0aGUgbG9uZ2VyIGlucHV0IGFyZSBoYW5kbGVkOiBjb3BpZWQg
dG8gdGhlIHJlc3VsdAorLy8gb3IgaWdub3JlZC4KIC8vIEV4YW1wbGU6CiAvLyAgICAgICB5OiAg
ICAgICAgICAgICBbIHkyIF1bIHkxIF1bIHkwIF0KIC8vICAgICAgIHg6ICAgICAgIFsgeDMgXVsg
eDIgXVsgeDEgXVsgeDAgXQpAQCAtMTI4MCwzMCArMTU2NywzNCBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmFic29sdXRlTGVmdFNoaWZ0QWx3CiAvLyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAg
ICB8ICAgICB8CiAvLyAgICAgICAgICAgICAgICAgICB2ICAgICB2ICAgICB2ICAgICB2CiAvLyBy
ZXN1bHQ6IFsgIDAgXVsgeDMgXVsgcjIgXVsgcjEgXVsgcjAgXQotdGVtcGxhdGU8dHlwZW5hbWUg
Qml0d2lzZU9wPgotaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3Ao
Vk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0
cmFEaWdpdHMsIFN5bW1ldHJpY09wIHN5bW1ldHJpYywgQml0d2lzZU9wJiYgb3ApCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+
CitpbmxpbmUgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUJpdHdpc2VPcChWTSYgdm0sIEJp
Z0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdp
dHMsIEJpdHdpc2VPcCYmIG9wKQogewotICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4LT5sZW5ndGgo
KTsKLSAgICB1bnNpZ25lZCB5TGVuZ3RoID0geS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgeExl
bmd0aCA9IHgubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgeUxlbmd0aCA9IHkubGVuZ3RoKCk7CiAg
ICAgdW5zaWduZWQgbnVtUGFpcnMgPSB5TGVuZ3RoOworICAgIHVuc2lnbmVkIG1heExlbmd0aCA9
IHhMZW5ndGg7CiAgICAgaWYgKHhMZW5ndGggPCB5TGVuZ3RoKSB7CiAgICAgICAgIG51bVBhaXJz
ID0geExlbmd0aDsKLSAgICAgICAgaWYgKHN5bW1ldHJpYyA9PSBTeW1tZXRyaWNPcDo6U3ltbWV0
cmljKSB7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAoeCwgeSk7Ci0gICAgICAgICAgICBzdGQ6OnN3
YXAoeExlbmd0aCwgeUxlbmd0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgbWF4TGVuZ3RoID0geUxl
bmd0aDsKICAgICB9CiAKICAgICBBU1NFUlQobnVtUGFpcnMgPT0gc3RkOjptaW4oeExlbmd0aCwg
eUxlbmd0aCkpOwotICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IGV4dHJhRGlnaXRzID09IEV4
dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHkgPyB4TGVuZ3RoIDogbnVtUGFpcnM7CisgICAgQVNTRVJU
KG1heExlbmd0aCA9PSBzdGQ6Om1heCh4TGVuZ3RoLCB5TGVuZ3RoKSk7CisgICAgdW5zaWduZWQg
cmVzdWx0TGVuZ3RoID0gZXh0cmFEaWdpdHMgPT0gRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSA/
IG1heExlbmd0aCA6IG51bVBhaXJzOwogICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRo
TGVuZ3RoVW5jaGVja2VkKHZtLCByZXN1bHRMZW5ndGgpOwogICAgIHVuc2lnbmVkIGkgPSAwOwog
ICAgIGZvciAoOyBpIDwgbnVtUGFpcnM7IGkrKykKLSAgICAgICAgcmVzdWx0LT5zZXREaWdpdChp
LCBvcCh4LT5kaWdpdChpKSwgeS0+ZGlnaXQoaSkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXREaWdp
dChpLCBvcCh4LmRpZ2l0KGkpLCB5LmRpZ2l0KGkpKSk7CiAKICAgICBpZiAoZXh0cmFEaWdpdHMg
PT0gRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSkgewotICAgICAgICBmb3IgKDsgaSA8IHhMZW5n
dGg7IGkrKykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC0+ZGlnaXQoaSkpOwor
ICAgICAgICBpZiAoeExlbmd0aCA+IHlMZW5ndGgpIHsKKyAgICAgICAgICAgIGZvciAoOyBpIDwg
eExlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdp
dChpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKDsgaSA8IHlMZW5ndGg7
IGkrKykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHkuZGlnaXQoaSkpOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yICg7IGkgPCByZXN1bHRMZW5ndGg7IGkrKykKQEAg
LTEzMTIsMzYgKzE2MDMsNTAgQEAgaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVC
aXR3aQogICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CiB9CiAKLUpTQmlnSW50KiBK
U0JpZ0ludDo6YWJzb2x1dGVBbmQoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIEJpZ0ludEltcGwyPgorSlNCaWdJbnQqIEpT
QmlnSW50OjphYnNvbHV0ZUFuZChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkp
CiB7CiAgICAgYXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAg
ICAgICAgcmV0dXJuIGEgJiBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9w
KHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBTeW1tZXRyaWNPcDo6U3ltbWV0
cmljLCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4
LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBkaWdpdE9wZXJhdGlvbik7CiB9CiAKLUpT
QmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVPcihWTSYgdm0sIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgQmlnSW50SW1wbDI+CitKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlT3IoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KQogewogICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShEaWdpdCBhLCBEaWdpdCBi
KSB7CiAgICAgICAgIHJldHVybiBhIHwgYjsKICAgICB9OwotICAgIHJldHVybiBhYnNvbHV0ZUJp
dHdpc2VPcCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgU3ltbWV0cmljT3A6
OlN5bW1ldHJpYywgZGlnaXRPcGVyYXRpb24pOworICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VP
cCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOwog
fQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kTm90KFZNJiB2bSwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCBCaWdJbnRJ
bXBsMj4KK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBbmROb3QoVk0mIHZtLCBCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShE
aWdpdCBhLCBEaWdpdCBiKSB7Ci0gICAgICAgIHJldHVybiBhICYgfmI7Ci0gICAgfTsKLSAgICBy
ZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNv
cHksIFN5bW1ldHJpY09wOjpOb3RTeW1tZXRyaWMsIGRpZ2l0T3BlcmF0aW9uKTsKKyAgICAvLyB4
ICYgfnkKKworICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4Lmxlbmd0aCgpOworICAgIHVuc2lnbmVk
IHlMZW5ndGggPSB5Lmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHhMZW5n
dGg7CisKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2
bSwgcmVzdWx0TGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBmb3IgKDsgaSA8IHN0
ZDo6bWluKHhMZW5ndGgsIHlMZW5ndGgpOyBpKyspCisgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQo
aSwgeC5kaWdpdChpKSAmIH55LmRpZ2l0KGkpKTsKKyAgICBmb3IgKDsgaSA8IHJlc3VsdExlbmd0
aDsgKytpKQorICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkpOworCisgICAg
cmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50Ojph
YnNvbHV0ZVhvcihWTSYgdm0sIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsMSwgQmlnSW50SW1wbDI+CitKU0JpZ0ludCogSlNCaWdJbnQ6OmFi
c29sdXRlWG9yKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBh
dXRvIGRpZ2l0T3BlcmF0aW9uID0gW10oRGlnaXQgYSwgRGlnaXQgYikgewogICAgICAgICByZXR1
cm4gYSBeIGI7CiAgICAgfTsKLSAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3Aodm0sIHgsIHks
IEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIFN5bW1ldHJpY09wOjpTeW1tZXRyaWMsIGRpZ2l0
T3BlcmF0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJh
RGlnaXRzSGFuZGxpbmc6OkNvcHksIGRpZ2l0T3BlcmF0aW9uKTsKIH0KICAgICAKIEpTQmlnSW50
KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIFNpZ25PcHRpb24gc2lnbk9wdGlvbikKQEAgLTE0MDEsNyArMTcwNiw4IEBA
IEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUoSlNHbG8KICAgICByZXR1cm4gcmVz
dWx0LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlmdEJ5
QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmln
SW50KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCBCaWdJbnRJbXBsMj4KK0pT
QmlnSW50KiBKU0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CkBAIC0xNDE1LDggKzE3MjEsOCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlm
dEJ5QWJzb2x1dGUoCiAgICAgRGlnaXQgc2hpZnQgPSAqb3B0aW9uYWxTaGlmdDsKICAgICB1bnNp
Z25lZCBkaWdpdFNoaWZ0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNoaWZ0IC8gZGlnaXRCaXRz
KTsKICAgICB1bnNpZ25lZCBiaXRzU2hpZnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2hpZnQg
JSBkaWdpdEJpdHMpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgtPmxlbmd0aCgpOwotICAgIGJv
b2wgZ3JvdyA9IGJpdHNTaGlmdCAmJiAoeC0+ZGlnaXQobGVuZ3RoIC0gMSkgPj4gKGRpZ2l0Qml0
cyAtIGJpdHNTaGlmdCkpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CisgICAg
Ym9vbCBncm93ID0gYml0c1NoaWZ0ICYmICh4LmRpZ2l0KGxlbmd0aCAtIDEpID4+IChkaWdpdEJp
dHMgLSBiaXRzU2hpZnQpKTsKICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gbGVuZ3RoICsgZGlnaXRT
aGlmdCArIGdyb3c7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHRMZW5ndGgp
ID4gbWF4TGVuZ3RoKSB7CiAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3Mp
OwpAQCAtMTQzMSwxNCArMTczNywxNCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlmdEJ5
QWJzb2x1dGUoCiAgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIDB1bCk7CiAKICAgICAg
ICAgZm9yICg7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKTsgaSsrKQot
ICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB4LT5kaWdpdChpIC0gZGlnaXRTaGlmdCkp
OworICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB4LmRpZ2l0KGkgLSBkaWdpdFNoaWZ0
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRGlnaXQgY2FycnkgPSAwOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGlnaXRTaGlmdDsgaSsrKQogICAgICAgICAgICAgcmVzdWx0
LT5zZXREaWdpdChpLCAwdWwpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgRGlnaXQgZCA9IHgtPmRpZ2l0KGkpOworICAgICAg
ICAgICAgRGlnaXQgZCA9IHguZGlnaXQoaSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0
KGkgKyBkaWdpdFNoaWZ0LCAoZCA8PCBiaXRzU2hpZnQpIHwgY2FycnkpOwogICAgICAgICAgICAg
Y2FycnkgPSBkID4+IChkaWdpdEJpdHMgLSBiaXRzU2hpZnQpOwogICAgICAgICB9CkBAIC0xNDQ5
LDE1ICsxNzU1LDE2IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZSgK
ICAgICAgICAgICAgIEFTU0VSVCghY2FycnkpOwogICAgIH0KIAotICAgIHJlc3VsdC0+c2V0U2ln
bih4LT5zaWduKCkpOworICAgIHJlc3VsdC0+c2V0U2lnbih4LnNpZ24oKSk7CiAgICAgcmV0dXJu
IHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNo
aWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJp
Z0ludEltcGwyPgorSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSB4LT5sZW5ndGgoKTsKLSAgICBib29sIHNpZ24gPSB4LT5zaWduKCk7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0geC5sZW5ndGgoKTsKKyAgICBib29sIHNpZ24gPSB4LnNpZ24oKTsKICAgICBhdXRv
IG9wdGlvbmFsU2hpZnQgPSB0b1NoaWZ0QW1vdW50KHkpOwogICAgIGlmICghb3B0aW9uYWxTaGlm
dCkKICAgICAgICAgcmV0dXJuIHJpZ2h0U2hpZnRCeU1heGltdW0odm0sIHNpZ24pOwpAQCAtMTQ3
NiwxMSArMTc4MywxMSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRl
CiAgICAgYm9vbCBtdXN0Um91bmREb3duID0gZmFsc2U7CiAgICAgaWYgKHNpZ24pIHsKICAgICAg
ICAgY29uc3QgRGlnaXQgbWFzayA9IChzdGF0aWNfY2FzdDxEaWdpdD4oMSkgPDwgYml0c1NoaWZ0
KSAtIDE7Ci0gICAgICAgIGlmICh4LT5kaWdpdChkaWdpdGFsU2hpZnQpICYgbWFzaykKKyAgICAg
ICAgaWYgKHguZGlnaXQoZGlnaXRhbFNoaWZ0KSAmIG1hc2spCiAgICAgICAgICAgICBtdXN0Um91
bmREb3duID0gdHJ1ZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGlnaXRhbFNoaWZ0OyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoeC0+
ZGlnaXQoaSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoeC5kaWdpdChpKSkgewogICAgICAgICAg
ICAgICAgICAgICBtdXN0Um91bmREb3duID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTQ5MSw3ICsxNzk4LDcgQEAgSlNCaWdJbnQqIEpT
QmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZQogICAgIC8vIElmIGJpdHNTaGlmdCBpcyBub24t
emVybywgaXQgZnJlZXMgdXAgYml0cywgcHJldmVudGluZyBvdmVyZmxvdy4KICAgICBpZiAobXVz
dFJvdW5kRG93biAmJiAhYml0c1NoaWZ0KSB7CiAgICAgICAgIC8vIE92ZXJmbG93IGNhbm5vdCBo
YXBwZW4gaWYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQgaGFzIHVuc2V0IGJpdHMuCi0gICAg
ICAgIERpZ2l0IG1zZCA9IHgtPmRpZ2l0KGxlbmd0aCAtIDEpOworICAgICAgICBEaWdpdCBtc2Qg
PSB4LmRpZ2l0KGxlbmd0aCAtIDEpOwogICAgICAgICBib29sIHJvdW5kaW5nQ2FuT3ZlcmZsb3cg
PSAhc3RhdGljX2Nhc3Q8RGlnaXQ+KH5tc2QpOwogICAgICAgICBpZiAocm91bmRpbmdDYW5PdmVy
ZmxvdykKICAgICAgICAgICAgIHJlc3VsdExlbmd0aCsrOwpAQCAtMTUwMSwxMiArMTgwOCwxMiBA
QCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlCiAgICAgSlNCaWdJbnQq
IHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihyZXN1bHRMZW5ndGgpKTsKICAgICBpZiAoIWJpdHNTaGlmdCkgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkaWdpdGFsU2hpZnQ7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0RGlnaXQoaSAtIGRpZ2l0YWxTaGlmdCwgeC0+ZGlnaXQoaSkpOworICAgICAg
ICAgICAgcmVzdWx0LT5zZXREaWdpdChpIC0gZGlnaXRhbFNoaWZ0LCB4LmRpZ2l0KGkpKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBEaWdpdCBjYXJyeSA9IHgtPmRpZ2l0KGRpZ2l0YWxTaGlmdCkg
Pj4gYml0c1NoaWZ0OworICAgICAgICBEaWdpdCBjYXJyeSA9IHguZGlnaXQoZGlnaXRhbFNoaWZ0
KSA+PiBiaXRzU2hpZnQ7CiAgICAgICAgIHVuc2lnbmVkIGxhc3QgPSBsZW5ndGggLSBkaWdpdGFs
U2hpZnQgLSAxOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7
Ci0gICAgICAgICAgICBEaWdpdCBkID0geC0+ZGlnaXQoaSArIGRpZ2l0YWxTaGlmdCArIDEpOwor
ICAgICAgICAgICAgRGlnaXQgZCA9IHguZGlnaXQoaSArIGRpZ2l0YWxTaGlmdCArIDEpOwogICAg
ICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCAoZCA8PCAoZGlnaXRCaXRzIC0gYml0c1NoaWZ0
KSkgfCBjYXJyeSk7CiAgICAgICAgICAgICBjYXJyeSA9IGQgPj4gYml0c1NoaWZ0OwogICAgICAg
ICB9CkBAIC0yMTc4LDEyICsyNDg1LDEzIEBAIEpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpT
QmlnSW50Ojpjb20KICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWw7CiB9CiAKLU9w
dGlvbmFsPEpTQmlnSW50OjpEaWdpdD4gSlNCaWdJbnQ6OnRvU2hpZnRBbW91bnQoSlNCaWdJbnQq
IHgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK09wdGlvbmFsPEpTQmlnSW50OjpE
aWdpdD4gSlNCaWdJbnQ6OnRvU2hpZnRBbW91bnQoQmlnSW50SW1wbCB4KQogewotICAgIGlmICh4
LT5sZW5ndGgoKSA+IDEpCisgICAgaWYgKHgubGVuZ3RoKCkgPiAxKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIAotICAgIERpZ2l0IHZhbHVlID0geC0+ZGlnaXQoMCk7CisgICAg
RGlnaXQgdmFsdWUgPSB4LmRpZ2l0KDApOwogICAgIHN0YXRpY19hc3NlcnQobWF4TGVuZ3RoQml0
cyA8IHN0ZDo6bnVtZXJpY19saW1pdHM8RGlnaXQ+OjptYXgoKSwgIm1heExlbmd0aEJpdHMgbmVl
ZHMgdG8gYmUgbGVzcyB0aGFuIGRpZ2l0Iik7CiAgICAgCiAgICAgaWYgKHZhbHVlID4gbWF4TGVu
Z3RoQml0cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAko
cmV2aXNpb24gMjYwNzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJ
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDM4ICsxMjEsMTMgQEAgcHVibGljOgogICAgICAg
ICBMZXNzVGhhbgogICAgIH07CiAKLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHRy
eUNvbnZlcnRUb0JpZ0ludDMyKEpTQmlnSW50KiBiaWdJbnQpCi0gICAgewotI2lmIFVTRShCSUdJ
TlQzMikKLSAgICAgICAgaWYgKFVOTElLRUxZKCFiaWdJbnQpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKLQotICAgICAgICBpZiAoYmlnSW50LT5sZW5ndGgoKSA8PSAxKSB7Ci0gICAg
ICAgICAgICBpZiAoIWJpZ0ludC0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpz
QmlnSW50MzIoMCk7Ci0gICAgICAgICAgICBEaWdpdCBkaWdpdCA9IGJpZ0ludC0+ZGlnaXQoMCk7
Ci0gICAgICAgICAgICBpZiAoYmlnSW50LT5zaWduKCkpIHsKLSAgICAgICAgICAgICAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQ2NF90IG1heFZhbHVlID0gLXN0YXRpY19jYXN0PGludDY0X3Q+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKTsKLSAgICAgICAgICAgICAgICBpZiAo
ZGlnaXQgPD0gbWF4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KC1zdGF0aWNfY2FzdDxpbnQ2NF90PihkaWdpdCkpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50
NjRfdCBtYXhWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptYXgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZhbHVl
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihkaWdpdCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAg
ICByZXR1cm4gYmlnSW50OwotICAgIH0KLQotICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBib29sIGVxdWFscyhKU0JpZ0ludCosIEpTQmlnSW50Kik7CiAgICAgYm9vbCBlcXVhbHNU
b051bWJlcihKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsc1RvSW50
MzIoaW50MzJfdCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGFyaXNvblJlc3VsdCBjb21w
YXJlVG9JbnQzMihpbnQzMl90KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGxlc3NUaGFu
SW50MzIoaW50MzJfdCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBsZXNzVGhhbkVxdWFs
SW50MzIoaW50MzJfdCk7CisgICAgLy8gT09QUzogZGVmaW5lIHRoZSB2YXJpYW50cwogICAgIHN0
YXRpYyBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmUoSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsK
IAogICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlJiBu
dW1iZXIsIEpTVmFsdWUmIHJlc3VsdCkgY29uc3Q7CkBAIC0xNjMsOTQgKzEzOCwyMTUgQEAgcHVi
bGljOgogCiAgICAgQ29tcGFyaXNvblJlc3VsdCBzdGF0aWMgY29tcGFyZVRvRG91YmxlKEpTQmln
SW50KiB4LCBkb3VibGUgeSk7CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGV4cG9uZW50aWF0ZUhl
YXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KTsK
LSAgICBzdGF0aWMgSlNWYWx1ZSBleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNCaWdJbnQqIGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCkKKyAgICBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBKU1ZhbHVlIGFzSW50MzJPckhlYXBDZWxsKFZNJiB2bSwgaW50NjRfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDxp
bnQzMl90Pih2YWx1ZSkpID09IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20o
dm0sIHZhbHVlKTsKKyAgICB9CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBhc0lu
dDMyT3JIZWFwQ2VsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQ2NF90IHZhbHVl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGV4cG9uZW50aWF0
ZUhlYXAoZ2xvYmFsT2JqZWN0LCBiYXNlLCBleHBvbmVudCkpOworICAgICAgICByZXR1cm4gYXNJ
bnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZSk7CiAgICAgfQogCi0gICAg
c3RhdGljIEpTQmlnSW50KiBtdWx0aXBseUhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCog
eCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3ByaXZhdGU6Cisg
ICAgY2xhc3MgSGVhcEJpZ0ludEltcGw7CisgICAgY2xhc3MgSW50MzJCaWdJbnRJbXBsOworICAg
IHN0cnVjdCBJbXBsUmVzdWx0IHsKKyAgICAgICAgSW1wbFJlc3VsdChIZWFwQmlnSW50SW1wbCYp
OworICAgICAgICBJbXBsUmVzdWx0KEpTQmlnSW50Kik7CisgICAgICAgIEltcGxSZXN1bHQoSW50
MzJCaWdJbnRJbXBsJik7CisgICAgICAgIEpTVmFsdWUgcGF5bG9hZDsKKyAgICB9OworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAg
ICBzdGF0aWMgSW1wbFJlc3VsdCBleHBvbmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiwgSlNC
aWdJbnQqIGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVz
dWx0IG11bHRpcGx5SW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGlj
IEltcGxSZXN1bHQgaW5jSW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCk7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBk
ZWNJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4KTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIElt
cGxSZXN1bHQgYWRkSW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBC
aWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBzdWJJbXBsKEpTR2xvYmFsT2JqZWN0
KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVz
dWx0IGRpdmlkZUltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBs
MiB5KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmln
SW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgcmVtYWluZGVySW1wbChKU0dsb2JhbE9i
amVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIEltcGxSZXN1bHQgdW5hcnlNaW51c0ltcGwo
Vk0mLCBCaWdJbnRJbXBsIHgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwx
LCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBiaXR3aXNlQW5k
SW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4K
KyAgICBzdGF0aWMgSW1wbFJlc3VsdCBiaXR3aXNlT3JJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGJp
dHdpc2VYb3JJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIg
eSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMgSW1w
bFJlc3VsdCBiaXR3aXNlTm90SW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCk7CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwy
PgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGxlZnRTaGlmdEltcGwoSlNHbG9iYWxPYmplY3QqLCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQg
c2lnbmVkUmlnaHRTaGlmdEltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJ
bnRJbXBsMiB5KTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4
cG9uZW50KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIGJhc2UsIGludDMyX3QgZXhwb25lbnQpOworICAgIHN0
YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBp
bnQzMl90IGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCk7CisgICAgc3RhdGljIEpTVmFsdWUgZXhw
b25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgYmFzZSwgaW50
MzJfdCBleHBvbmVudCk7CisKKyAgICBzdGF0aWMgSlNWYWx1ZSBtdWx0aXBseShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRp
YyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qg
eCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBK
U1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwg
aW50MzJfdCB5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKG11
bHRpcGx5SGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAgICAgaW50NjRfdCByZXN1bHQg
PSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih4KSAqIHN0YXRpY19jYXN0PGludDY0X3Q+KHkpOyAKKyAg
ICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgcmVzdWx0KTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIEpTQmlnSW50KiBpbmNIZWFwKEpTR2xvYmFsT2JqZWN0Kiwg
SlNCaWdJbnQqIHgpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGluYyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKKyAgICBzdGF0aWMgSlNWYWx1ZSBpbmMoSlNHbG9iYWxP
YmplY3QqLCBKU0JpZ0ludCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgaW5jKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlD
b252ZXJ0VG9CaWdJbnQzMihpbmNIZWFwKGdsb2JhbE9iamVjdCwgeCkpOworICAgICAgICByZXR1
cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQ2NF90Pih4
KSArIDEpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogZGVjSGVhcChKU0dsb2JhbE9i
amVjdCosIEpTQmlnSW50KiB4KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBkZWMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCisgICAgc3RhdGljIEpTVmFsdWUgZGVjKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGRlY0hlYXAoZ2xvYmFsT2JqZWN0
LCB4KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PGludDY0X3Q+KHgpIC0gMSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50
KiBhZGRIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAg
ICBzdGF0aWMgSlNWYWx1ZSBhZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHN0YXRpYyBKU1ZhbHVlIGFkZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBK
U1ZhbHVlIGFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50
MzJfdCB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBhZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYWRkKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGFkZEhlYXAoZ2xvYmFsT2JqZWN0
LCB4LCB5KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PGludDY0X3Q+KHgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSkpOwogICAg
IH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogc3ViSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmln
SW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0aWMg
SlNWYWx1ZSBzdWIoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwor
ICAgIHN0YXRpYyBKU1ZhbHVlIHN1YihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQz
Ml90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHN1YihKU0dsb2JhbE9iamVjdCosIGludDMyX3Qg
eSwgSlNCaWdJbnQqIHgpOworICAgIHN0YXRpYyBKU1ZhbHVlIHN1YihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBpbnQzMl90IHksIGludDMyX3QgeCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBzdWJIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JI
ZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpIC0gc3RhdGljX2Nh
c3Q8aW50NjRfdD4oeSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogZGl2aWRlSGVh
cChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGlj
IEpTVmFsdWUgZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHgsIEpTQmln
SW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5
Q29udmVydFRvQmlnSW50MzIoZGl2aWRlSGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAg
ICAgaWYgKCF5KSB7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwg
IjAgaXMgYW4gaW52YWxpZCBkaXZpc29yIHZhbHVlLiJfcyk7CisgICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpIC8gc3RhdGljX2Nhc3Q8aW50NjRf
dD4oeSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogcmVtYWluZGVySGVhcChKU0ds
b2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFs
dWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1ZSByZW1haW5kZXIoSlNHbG9iYWxPYmplY3Qq
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRl
cihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBK
U1ZhbHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkp
OworICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihyZW1haW5kZXJIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgICAg
ICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
MCBpcyBhbiBpbnZhbGlkIGRpdmlzb3IgdmFsdWUuIl9zKTsKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkgJSBzdGF0aWNfY2FzdDxpbnQ2NF90
Pih5KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiB1bmFyeU1pbnVzSGVhcChWTSYs
IEpTQmlnSW50KiB4KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVzKFZNJiB2bSwgSlNC
aWdJbnQqIHgpCisgICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50
KiB4KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSB1bmFyeU1pbnVzKFZNJiB2bSwgaW50MzJfdCB4KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHVuYXJ5TWludXNIZWFw
KHZtLCB4KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbCh2bSwgLXN0YXRpY19j
YXN0PGludDY0X3Q+KHgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VB
bmRIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKICAgICBz
dGF0aWMgSlNWYWx1ZSBiaXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252ZXJ0
VG9CaWdJbnQzMihiaXR3aXNlQW5kSGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VBbmRJbXBsKGdsb2JhbE9iamVjdCwg
eCwgeSkpOwogICAgIH0KLQotICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZU9ySGVhcChKU0ds
b2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFs
dWUgYml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0
KiwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZUFu
ZChKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBK
U1ZhbHVlIGJpdHdpc2VBbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4
LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
Yml0d2lzZU9ySGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAgICAgcmV0dXJuIHRyeUNv
bnZlcnRUb0JpZ0ludDMyKGdsb2JhbE9iamVjdCwgeCAmIHkpOwogICAgIH0KIAotICAgIHN0YXRp
YyBKU0JpZ0ludCogYml0d2lzZVhvckhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VYb3IoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHN0YXRpYyBK
U1ZhbHVlIGJpdHdpc2VPcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCog
eCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VPcihKU0dsb2JhbE9i
amVjdCosIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdp
c2VPcihKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRp
YyBKU1ZhbHVlIGJpdHdpc2VPcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90
IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQz
MihiaXR3aXNlWG9ySGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAgICAgcmV0dXJuIHRy
eUNvbnZlcnRUb0JpZ0ludDMyKGdsb2JhbE9iamVjdCwgeCB8IHkpOwogICAgIH0KIAotICAgIHN0
YXRpYyBKU0JpZ0ludCogYml0d2lzZU5vdEhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCog
eCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZU5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogeCkKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlWG9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAg
c3RhdGljIEpTVmFsdWUgYml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBp
bnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3Qq
LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlWG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VOb3RIZWFwKGds
b2JhbE9iamVjdCwgeCkpOworICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZ2xv
YmFsT2JqZWN0LCB4IF4geSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBsZWZ0U2hp
ZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBz
dGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VOb3QoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpOworICAgIHN0YXRpYyBKU1Zh
bHVlIGJpdHdpc2VOb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGxlZnRTaGlmdEhlYXAo
Z2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQz
MihnbG9iYWxPYmplY3QsIH54KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hp
ZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGljIEpTVmFsdWUgbGVmdFNo
aWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkp
OworcHJpdmF0ZToKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnRTbG93KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50
MzJfdCB4LCBpbnQzMl90IHkpCisgICAgeworICAgICAgICBpZiAoeSA8IDApIHsKKyAgICAgICAg
ICAgIC8vIFNoaWZ0cyBvbmUgbGVzcyB0aGFuIHJlcXVlc3RlZCwgYnV0IGRvZXNuJ3QgbWF0dGVy
IHNpbmNlIGxocyBpcyBpbnQzMgorICAgICAgICAgICAgcmV0dXJuIHNpZ25lZFJpZ2h0U2hpZnQo
eCwgeSA9PSBJTlQzMl9NSU4gPyBJTlQzMl9NQVggOiAteSk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBEbyBzb21lIGNoZWNrcyB0byBkZXRlY3Qgb3ZlcmZsb3cgb2YgbGVmdC1zaGlmdC4gQnV0
IHRoaXMgaXMgbXVjaCBjaGVhcGVyIGNvbXBhcmVkIHRvIGFsbG9jYXRpbmcgdHdvIEpTQmlnSW50
IGFuZCBwZXJmb3JtIHNoaWZ0IG9wZXJhdGlvbnMgaW4gSlNCaWdJbnQuCisgICAgICAgIGlmICgh
eCkKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOworICAgICAgICBpZiAoeSA8IDMy
KQorICAgICAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oeCkgPDwgeSk7CisgICAgICAgIHJldHVybiBsZWZ0U2hpZnRTbG93
KGdsb2JhbE9iamVjdCk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBzaWduZWRSaWdo
dFNoaWZ0SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CiAg
ICAgc3RhdGljIEpTVmFsdWUgc2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiAgICAgewotICAgICAgICByZXR1cm4g
dHJ5Q29udmVydFRvQmlnSW50MzIoc2lnbmVkUmlnaHRTaGlmdEhlYXAoZ2xvYmFsT2JqZWN0LCB4
LCB5KSk7CisgICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihzaWduZWRSaWdodFNo
aWZ0SW1wbChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICB9CisgICAgc3RhdGljIEpTVmFsdWUg
c2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCog
eCwgaW50MzJfdCB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBzaWduZWRSaWdodFNoaWZ0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0
YXRpYyBKU1ZhbHVlIHNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCisgICAgeworICAgICAgICBpZiAoeSA8IDApIHsKKyAg
ICAgICAgICAgIC8vIFNoaWZ0cyBvbmUgbGVzcyB0aGFuIHJlcXVlc3RlZCwgYnV0IGRvZXNuJ3Qg
bWF0dGVyIHNpbmNlIGxocyBpcyBpbnQzMgorICAgICAgICAgICAgcmV0dXJuIGxlZnRTaGlmdCh4
LCB5ID09IElOVDMyX01JTiA/IElOVDMyX01BWCA6IC15KTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBqc0JpZ0ludDMyKHggPj4gc3RkOjptaW4oeSwgMzEpKTsKICAgICB9CiAKICAgICBE
aWdpdCBkaWdpdCh1bnNpZ25lZCk7CkBAIC0yNzUsMTEgKzM3MSwxNCBAQCBwcml2YXRlOgogICAg
IAogICAgIHN0YXRpYyB1aW50NjRfdCBjYWxjdWxhdGVNYXhpbXVtQ2hhcmFjdGVyc1JlcXVpcmVk
KHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgcmFkaXgsIERpZ2l0IGxhc3REaWdpdCwgYm9vbCBz
aWduKTsKICAgICAKLSAgICBzdGF0aWMgQ29tcGFyaXNvblJlc3VsdCBhYnNvbHV0ZUNvbXBhcmUo
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0
IGFic29sdXRlQ29tcGFyZShCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKICAgICBzdGF0
aWMgdm9pZCBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mLCBKU0JpZ0ludCogeCwgRGln
aXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgRGlnaXQmIHJlbWFpbmRlcik7CiAgICAg
c3RhdGljIHZvaWQgaW50ZXJuYWxNdWx0aXBseUFkZChKU0JpZ0ludCogc291cmNlLCBEaWdpdCBm
YWN0b3IsIERpZ2l0IHN1bW1hbmQsIHVuc2lnbmVkLCBKU0JpZ0ludCogcmVzdWx0KTsKLSAgICBz
dGF0aWMgdm9pZCBtdWx0aXBseUFjY3VtdWxhdGUoSlNCaWdJbnQqIG11bHRpcGxpY2FuZCwgRGln
aXQgbXVsdGlwbGllciwgSlNCaWdJbnQqIGFjY3VtdWxhdG9yLCB1bnNpZ25lZCBhY2N1bXVsYXRv
ckluZGV4KTsKLSAgICBzdGF0aWMgdm9pZCBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKEpT
R2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIGRpdmlkZW5kLCBKU0JpZ0ludCogZGl2aXNvciwgSlNC
aWdJbnQqKiBxdW90aWVudCwgSlNCaWdJbnQqKiByZW1haW5kZXIpOworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyB2b2lkIG11bHRpcGx5QWNjdW11bGF0ZShC
aWdJbnRJbXBsIG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwgSlNCaWdJbnQqIGFjY3Vt
dWxhdG9yLCB1bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyB2b2lkIGFi
c29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSBk
aXZpZGVuZCwgQmlnSW50SW1wbDIgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgSlNCaWdJ
bnQqKiByZW1haW5kZXIpOwogICAgIAogICAgIGVudW0gY2xhc3MgTGVmdFNoaWZ0TW9kZSB7CiAg
ICAgICAgIFNhbWVTaXplUmVzdWx0LApAQCAtMjk4LDI2ICszOTcsMjcgQEAgcHJpdmF0ZToKICAg
ICAgICAgU2tpcAogICAgIH07CiAKLSAgICBlbnVtIGNsYXNzIFN5bW1ldHJpY09wIHsKLSAgICAg
ICAgU3ltbWV0cmljLAotICAgICAgICBOb3RTeW1tZXRyaWMKLSAgICB9OworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMiwgdHlwZW5hbWUgQml0
d2lzZU9wPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVCaXR3aXNlT3AoVk0mLCBCaWdJ
bnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nLCBCaXR3aXNlT3Am
Jik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaXR3aXNlT3A+Ci0gICAgc3RhdGljIEpTQmln
SW50KiBhYnNvbHV0ZUJpdHdpc2VPcChWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSwgRXh0
cmFEaWdpdHNIYW5kbGluZywgU3ltbWV0cmljT3AsIEJpdHdpc2VPcCYmKTsKLQotICAgIHN0YXRp
YyBKU0JpZ0ludCogYWJzb2x1dGVBbmQoVk0mLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwot
ICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVPcihWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZE5vdChWTSYsIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVhvcihWTSYs
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29s
dXRlQW5kKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMg
SlNCaWdJbnQqIGFic29sdXRlT3IoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwy
PgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBbmROb3QoVk0mLCBCaWdJbnRJbXBsMSB4
LCBCaWdJbnRJbXBsMiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5
cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoVk0m
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKIAogICAgIGVudW0gY2xhc3MgU2lnbk9w
dGlvbiB7CiAgICAgICAgIFNpZ25lZCwKICAgICAgICAgVW5zaWduZWQKICAgICB9OwogCi0gICAg
c3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50
KiB4LCBTaWduT3B0aW9uKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlU3ViT25lKEpT
R2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJlc3VsdExlbmd0aCk7CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNv
bHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCwgU2lnbk9wdGlvbik7Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBh
YnNvbHV0ZVN1Yk9uZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCwgdW5zaWduZWQgcmVz
dWx0TGVuZ3RoKTsKIAogICAgIC8vIERpZ2l0IGFyaXRobWV0aWMgaGVscGVycy4KICAgICBzdGF0
aWMgRGlnaXQgZGlnaXRBZGQoRGlnaXQgYSwgRGlnaXQgYiwgRGlnaXQmIGNhcnJ5KTsKQEAgLTM0
NiwxNSArNDQ2LDIwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEpTQmlnSW50KiBjb3B5KFZNJiwg
SlNCaWdJbnQqIHgpOwogCiAgICAgdm9pZCBpbnBsYWNlTXVsdGlwbHlBZGQoRGlnaXQgbXVsdGlw
bGllciwgRGlnaXQgcGFydCk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFkZChKU0ds
b2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSwgYm9vbCByZXN1bHRTaWduKTsK
LSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlU3ViKFZNJiwgSlNCaWdJbnQqIHgsIEpTQmln
SW50KiB5LCBib29sIHJlc3VsdFNpZ24pOwotCi0gICAgc3RhdGljIEpTQmlnSW50KiBsZWZ0U2hp
ZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsK
LSAgICBzdGF0aWMgSlNCaWdJbnQqIHJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0
KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbD4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQWRkKEpTR2xvYmFsT2JqZWN0
KiwgQmlnSW50SW1wbCB4LCBCaWdJbnRJbXBsIHksIGJvb2wgcmVzdWx0U2lnbik7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0
ZVN1YihWTSYsIEJpZ0ludEltcGwgeCwgQmlnSW50SW1wbCB5LCBib29sIHJlc3VsdFNpZ24pOwor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGxlZnRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmpl
Y3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBKU0JpZ0lu
dCogcmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5KTsKIAogICAgIHN0YXRpYyBKU0JpZ0ludCogcmlnaHRTaGlmdEJ5TWF4aW11
bShWTSYsIGJvb2wgc2lnbik7CiAKLSAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRB
bW91bnQoSlNCaWdJbnQqIHgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgor
ICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChCaWdJbnRJbXBsIHgpOwog
CiAgICAgaW5saW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MjYwNzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDIwICs3MSwxMiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBq
c0FkZFNsb3dDYXNlKEpTR2xvCiAgICAgYXV0byBkb3VibGVPcCA9IFtdIChkb3VibGUgbGVmdCwg
ZG91YmxlIHJpZ2h0KSAtPiBkb3VibGUgewogICAgICAgICByZXR1cm4gbGVmdCArIHJpZ2h0Owog
ICAgIH07Ci0gICAgYXV0byBiaWdJbnQzMk9wID0gW10gKGludDMyX3QgbGVmdCwgaW50MzJfdCBy
aWdodCkgLT4gSlNWYWx1ZSB7Ci0jaWYgVVNFKEJJR0lOVDMyKQotICAgICAgICBDaGVja2VkSW50
MzIgcmVzdWx0ID0gbGVmdDsKLSAgICAgICAgcmVzdWx0ICs9IHJpZ2h0OwotICAgICAgICBpZiAo
VU5MSUtFTFkocmVzdWx0Lmhhc092ZXJmbG93ZWQoKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOwotICAgICAgICByZXR1cm4ganNCaWdJbnQzMihyZXN1bHQudW5zYWZlR2V0KCkpOwot
I2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0o
cmlnaHQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCisK
KyAgICBhdXRvIGJpZ0ludE9wID0gW10gKGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAgICAg
ICByZXR1cm4gSlNCaWdJbnQ6OmFkZChsZWZ0LCByaWdodCk7CiAgICAgfTsKLSAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHAxLCBw
MiwgSlNCaWdJbnQ6OmFkZCwgZG91YmxlT3AsIGJpZ0ludDMyT3AsICJJbnZhbGlkIG1peCBvZiBC
aWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gYWRkaXRpb24uIl9zKSk7CisKKyAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHAxLCBwMiwg
ZG91YmxlT3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBC
aWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gYWRkaXRpb24uIl9zKSk7CiB9CiAKIEpTVmFsdWUganNU
eXBlU3RyaW5nRm9yVmFsdWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHYpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAyNjA3NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzNCw5ICs1MzQsOCBAQCBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUganNBZGQoSlNHbG9iYWxPYmplCiAgICAgcmV0dXJuIGpzQWRkTm9uTnVtYmVy
KGdsb2JhbE9iamVjdCwgdjEsIHYyKTsKIH0KIAotLy8gQmlnSW50MzJPcCBleHBlY3RzIGl0cyBv
cGVyYW5kcyB1bmJveGVkLCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0IHVuYm94ZWQgYXMgd2VsbAot
dGVtcGxhdGU8dHlwZW5hbWUgSGVhcEJpZ0ludE9wZXJhdGlvbiwgdHlwZW5hbWUgRG91YmxlT3Bl
cmF0aW9uLCB0eXBlbmFtZSBCaWdJbnQzMk9wPgotQUxXQVlTX0lOTElORSBKU1ZhbHVlIGFyaXRo
bWV0aWNCaW5hcnlPcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBK
U1ZhbHVlIHYyLCBIZWFwQmlnSW50T3BlcmF0aW9uJiYgaGVhcEJpZ0ludE9wLCBEb3VibGVPcGVy
YXRpb24mJiBkb3VibGVPcCwgQmlnSW50MzJPcCYmIGJpZ0ludDMyT3AsIGNvbnN0IGNoYXIqIGVy
cm9yTWVzc2FnZSkKK3RlbXBsYXRlPHR5cGVuYW1lIERvdWJsZU9wZXJhdGlvbj4KK0FMV0FZU19J
TkxJTkUgSlNWYWx1ZSBhcml0aG1ldGljQmluYXJ5T3AoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MiwgRG91YmxlT3BlcmF0aW9uJiYgZG91YmxlT3As
IEpTVmFsdWUgKCpiaWdJbnQzMikoaW50MzJfdCwgaW50MzJfdCksIEpTVmFsdWUgKCptaXhlZEJp
Z0ludDEpKEpTQmlnSW50KiwgaW50MzJfdCksIEpTVmFsdWUgKCptaXhlZEJpZ0ludDIpKGludDMy
X3QsIEpTQmlnSW50KiksIEpTVmFsdWUgKCpoZWFwQmlnSW50KShKU0JpZ0ludCosIEpTQmlnSW50
KiksIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmpl
Y3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAt
NTUxLDI4ICs1NTAsMjAgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGFyaXRobWV0aWNCaW5hcnlP
cAogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChsZWZ0TnVtZXJpYy5pc0JpZ0ludDMyKCkp
IHsKLSAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgICAg
IGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJpZ0ludDMyT3AobGVmdE51bWVyaWMuYmlnSW50MzJBc0lu
dDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIEpTQmlnSW50KiBsZWZ0SGVhcEJpZ0ludCA9IEpT
QmlnSW50OjpjcmVhdGVGcm9tKHZtLCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7Ci0g
ICAgICAgICAgICBKU0JpZ0ludCogcmlnaHRIZWFwQmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZUZy
b20odm0sIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnRPcChnbG9iYWxPYmplY3QsIGxlZnRIZWFw
QmlnSW50LCByaWdodEhlYXBCaWdJbnQpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmlnaHRO
dW1lcmljLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgICAgICBKU0JpZ0ludCogbGVmdEhlYXBC
aWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbGVmdE51bWVyaWMuYmlnSW50MzJBc0lu
dDMyKCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50
T3AoZ2xvYmFsT2JqZWN0LCBsZWZ0SGVhcEJpZ0ludCwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0lu
dCgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkp
CisgICAgICAgICAgICByZXR1cm4gYmlnSW50MzIobGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMy
KCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIGlmIChyaWdodE51
bWVyaWMuaXNIZWFwQmlnSW50KCkpCisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIG1peGVkQmlnSW50MihnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQz
MigpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsKICAgICB9IGVsc2UgaWYgKGxlZnRO
dW1lcmljLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJ
bnQzMigpKSB7Ci0gICAgICAgICAgICBKU0JpZ0ludCogcmlnaHRIZWFwQmlnSW50ID0gSlNCaWdJ
bnQ6OmNyZWF0ZUZyb20odm0sIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnRPcChnbG9iYWxPYmpl
Y3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodEhlYXBCaWdJbnQpKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChyaWdodE51bWVyaWMuaXNIZWFwQmlnSW50KCkpCi0gICAgICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnRPcChnbG9iYWxPYmplY3QsIGxlZnRO
dW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsKKyAg
ICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkpCisgICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIG1peGVkQmlnSW50MShnbG9iYWxPYmplY3QsIGxlZnROdW1lcmlj
LmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAg
ICAgZWxzZSBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQorICAgICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50KGdsb2JhbE9iamVjdCwgbGVmdE51bWVy
aWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOwogICAgIH0K
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGJpZ0ludDMyT3ApOwogICAgIGlmIChsZWZ0TnVtZXJp
Yy5pc0hlYXBCaWdJbnQoKSAmJiByaWdodE51bWVyaWMuaXNIZWFwQmlnSW50KCkpCi0gICAgICAg
IFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludE9wKGdsb2JhbE9iamVjdCwgbGVm
dE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOwor
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0
LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgp
KSk7CiAjZW5kaWYKIAogICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCBlcnJvck1lc3NhZ2UpOwpAQCAtNTgzLDIxICs1NzQsMTIgQEAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGpzU3ViKEpTR2xvYmFsT2JqZQogICAgIGF1dG8gZG91YmxlT3AgPSBbXSAoZG91Ymxl
IGxlZnQsIGRvdWJsZSByaWdodCkgLT4gZG91YmxlIHsKICAgICAgICAgcmV0dXJuIGxlZnQgLSBy
aWdodDsKICAgICB9OwotICAgIGF1dG8gYmlnSW50MzJPcCA9IFtdIChpbnQzMl90IGxlZnQsIGlu
dDMyX3QgcmlnaHQpIC0+IEpTVmFsdWUgewotI2lmIFVTRShCSUdJTlQzMikKLSAgICAgICAgQ2hl
Y2tlZEludDMyIHJlc3VsdCA9IGxlZnQ7Ci0gICAgICAgIHJlc3VsdCAtPSByaWdodDsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKHJlc3VsdC5oYXNPdmVyZmxvd2VkKCkpKQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIocmVzdWx0LnVuc2FmZUdl
dCgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bmRpZgorCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsK
KyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpzdWIobGVmdCwgcmlnaHQpOwogICAgIH07CiAKLSAg
ICByZXR1cm4gYXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBKU0JpZ0lu
dDo6c3ViLCBkb3VibGVPcCwgYmlnSW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQg
b3RoZXIgdHlwZSBpbiBzdWJ0cmFjdGlvbi4iX3MpOworICAgIHJldHVybiBhcml0aG1ldGljQmlu
YXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGRvdWJsZU9wLCBiaWdJbnRPcCwgYmlnSW50T3As
IGJpZ0ludE9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHN1YnRy
YWN0aW9uLiJfcyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc011bChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQpAQCAtNjA1LDIxICs1
ODcsMTIgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzTXVsKEpTR2xvYmFsT2JqZQogICAgIGF1
dG8gZG91YmxlT3AgPSBbXSAoZG91YmxlIGxlZnQsIGRvdWJsZSByaWdodCkgLT4gZG91YmxlIHsK
ICAgICAgICAgcmV0dXJuIGxlZnQgKiByaWdodDsKICAgICB9OwotICAgIGF1dG8gYmlnSW50MzJP
cCA9IFtdIChpbnQzMl90IGxlZnQsIGludDMyX3QgcmlnaHQpIC0+IEpTVmFsdWUgewotI2lmIFVT
RShCSUdJTlQzMikKLSAgICAgICAgQ2hlY2tlZEludDMyIHJlc3VsdCA9IGxlZnQ7Ci0gICAgICAg
IHJlc3VsdCAqPSByaWdodDsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNPdmVyZmxvd2VkKCkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICByZXR1cm4ganNCaWdJbnQzMihy
ZXN1bHQudW5zYWZlR2V0KCkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwot
ICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotI2VuZGlmCisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKGF1dG8gbGVmdCwg
YXV0byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6Om11bChsZWZ0LCByaWdodCk7
CiAgICAgfTsKIAotICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2
MSwgdjIsIEpTQmlnSW50OjptdWx0aXBseSwgZG91YmxlT3AsIGJpZ0ludDMyT3AsICJJbnZhbGlk
IG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gbXVsdGlwbGljYXRpb24uIl9zKTsKKyAg
ICByZXR1cm4gYXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBkb3VibGVP
cCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBh
bmQgb3RoZXIgdHlwZSBpbiBtdWx0aXBsaWNhdGlvbi4iX3MpOwogfQogCiBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUganNEaXYoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwg
SlNWYWx1ZSB2MikKQEAgLTYyNywxOSArNjAwLDEyIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBq
c0RpdihKU0dsb2JhbE9iamUKICAgICBhdXRvIGRvdWJsZU9wID0gW10gKGRvdWJsZSBsZWZ0LCBk
b3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBsZWZ0IC8gcmlnaHQ7CiAg
ICAgfTsKLSAgICBhdXRvIGJpZ0ludDMyT3AgPSBbXSAoaW50MzJfdCBsZWZ0LCBpbnQzMl90IHJp
Z2h0KSAtPiBKU1ZhbHVlIHsKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgICAgIGlmICghcmlnaHQp
Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICByZXR1cm4ganNCaWdJbnQz
MihsZWZ0IC8gcmlnaHQpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAg
ICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI2VuZGlmCisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKGF1dG8gbGVmdCwgYXV0
byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmRpdmlkZShsZWZ0LCByaWdodCk7
CiAgICAgfTsKIAotICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2
MSwgdjIsIEpTQmlnSW50OjpkaXZpZGUsIGRvdWJsZU9wLCBiaWdJbnQzMk9wLCAiSW52YWxpZCBt
aXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGRpdmlzaW9uLiJfcyk7CisgICAgcmV0dXJu
IGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgZG91YmxlT3AsIGJpZ0lu
dE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVy
IHR5cGUgaW4gZGl2aXNpb24uIl9zKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzUmVt
YWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUg
djIpCkBAIC02NDcsMTIgKzYxMywxMiBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNSZW1haW5k
ZXIoSlNHbG9iCiAgICAgYXV0byBkb3VibGVPcCA9IFtdIChkb3VibGUgbGVmdCwgZG91YmxlIHJp
Z2h0KSAtPiBkb3VibGUgewogICAgICAgICByZXR1cm4ganNNb2QobGVmdCwgcmlnaHQpOwogICAg
IH07Ci0gICAgYXV0byBiaWdJbnQzMk9wID0gW10gKGludDMyX3QsIGludDMyX3QpIC0+IEpTVmFs
dWUgewotICAgICAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIG1vcmUgY2xldmVyIGhlcmUuCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKGF1dG8g
bGVmdCwgYXV0byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnJlbWFpbmRlcihs
ZWZ0LCByaWdodCk7CiAgICAgfTsKIAotICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xv
YmFsT2JqZWN0LCB2MSwgdjIsIEpTQmlnSW50OjpyZW1haW5kZXIsIGRvdWJsZU9wLCBiaWdJbnQz
Mk9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHJlbWFpbmRlci4i
X3MpOworICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIs
IGRvdWJsZU9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAiSW52YWxpZCBtaXggb2Yg
QmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHJlbWFpbmRlci4iX3MpOwogfQogCiBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUganNQb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
MSwgSlNWYWx1ZSB2MikKQEAgLTY2MCwxMyArNjI2LDEyIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBqc1BvdyhKU0dsb2JhbE9iamUKICAgICBhdXRvIGRvdWJsZU9wID0gW10gKGRvdWJsZSBsZWZ0
LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBvcGVyYXRpb25NYXRo
UG93KGxlZnQsIHJpZ2h0KTsKICAgICB9OwotICAgIGF1dG8gYmlnSW50MzJPcCA9IFtdIChpbnQz
Ml90LCBpbnQzMl90KSAtPiBKU1ZhbHVlIHsKLSAgICAgICAgLy8gRXhwb25lbnRpYXRpb24gb24g
aW50ZWdlcnMgaXMgYm90aCBzb21ld2hhdCBzbG93IGluIHRoZSBiZXN0IGNhc2UsIGFuZCB2ZXJ5
IGxpa2VseSB0byBvdmVyZmxvdy4KLSAgICAgICAgLy8gU28gZG9uJ3QgYm90aGVyIHRyeWluZyB0
byBhdm9pZCBhIGhlYXAgYWxsb2NhdGlvbiBpbiB0aGF0IGNhc2UuCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKGF1dG8gbGVmdCwgYXV0byByaWdo
dCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZShsZWZ0LCByaWdodCk7
CiAgICAgfTsKIAotICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2
MSwgdjIsIEpTQmlnSW50OjpleHBvbmVudGlhdGUsIGRvdWJsZU9wLCBiaWdJbnQzMk9wLCAiSW52
YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGV4cG9uZW50aWF0aW9uLiJfcyk7
CisgICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgZG91
YmxlT3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJ
bnQgYW5kIG90aGVyIHR5cGUgaW4gZXhwb25lbnRpYXRpb24uIl9zKTsKIH0KIAogQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGpzSW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
dikKQEAgLTY4MSwxMyArNjQ2LDggQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzSW5jKEpTR2xv
YmFsT2JqZQogICAgICAgICByZXR1cm4ganNOdW1iZXIob3BlcmFuZE51bWVyaWMuYXNOdW1iZXIo
KSArIDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIGlmIChvcGVyYW5kTnVtZXJpYy5pc0Jp
Z0ludDMyKCkpIHsKLSAgICAgICAgaW50NjRfdCBuZXdWYWx1ZSA9IHN0YXRpY19jYXN0PGludDY0
X3Q+KG9wZXJhbmROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSArIDE7Ci0gICAgICAgIC8vIEZJ
WE1FOiB0aGUgZm9sbG93aW5nIG5leHQgZmV3IGxpbmVzIG1pZ2h0IGJlbmVmaXQgZnJvbSBiZWlu
ZyBtYWRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24KLSAgICAgICAgaWYgKG5ld1ZhbHVlID4gSU5U
X01BWCkKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbmV3VmFs
dWUpOwotICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihuZXdW
YWx1ZSkpOwotICAgIH0KKyAgICBpZiAob3BlcmFuZE51bWVyaWMuaXNCaWdJbnQzMigpKQorICAg
ICAgICByZXR1cm4gSlNCaWdJbnQ6OmluYyhvcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIo
KSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChvcGVyYW5kTnVtZXJpYy5pc0hlYXBCaWdJbnQoKSk7
CkBAIC03MDcsMTIgKzY2Nyw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0RlYyhKU0dsb2Jh
bE9iamUKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAob3BlcmFuZE51bWVyaWMuaXNCaWdJ
bnQzMigpKSB7Ci0gICAgICAgIGludDY0X3QgbmV3VmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ2NF90
PihvcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkgLSAxOwotICAgICAgICAvLyBGSVhN
RTogdGhlIGZvbGxvd2luZyBuZXh0IGZldyBsaW5lcyBtaWdodCBiZW5lZml0IGZyb20gYmVpbmcg
bWFkZSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uCi0gICAgICAgIGlmIChuZXdWYWx1ZSA8IElOVF9N
SU4pCi0gICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIG5ld1ZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obmV3VmFs
dWUpKTsKLSAgICB9CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6ZGVjKG9wZXJhbmROdW1lcmlj
LmJpZ0ludDMyQXNJbnQzMigpKTsKICNlbmRpZgogCiAgICAgQVNTRVJUKG9wZXJhbmROdW1lcmlj
LmlzSGVhcEJpZ0ludCgpKTsKQEAgLTczMiwxNCArNjg3LDE1IEBAIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBqc0JpdHdpc2VOb3QoSlNHbG8KIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAob3Bl
cmFuZE51bWVyaWMuaXNCaWdJbnQzMigpKQotICAgICAgICByZXR1cm4ganNCaWdJbnQzMih+b3Bl
cmFuZE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6
OmJpdHdpc2VOb3Qob3BlcmFuZE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOwogI2VuZGlmCiAK
ICAgICBBU1NFUlQob3BlcmFuZE51bWVyaWMuaXNIZWFwQmlnSW50KCkpOwogICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmJpdHdpc2VOb3QoZ2xvYmFsT2JqZWN0LCBvcGVy
YW5kTnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOwogfQogCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUg
c2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2
MiwgYm9vbCBpc0xlZnQpCit0ZW1wbGF0ZSA8Ym9vbCBpc0xlZnQ+CitBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgc2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNW
YWx1ZSB2MikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNzU3LDc0ICs3MTMsNTUgQEAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIHNoaWZ0KEpTR2xvYmFsT2JqZQogICAgIH0KIAogI2lmIFVTRShC
SUdJTlQzMikKLSAgICBpZiAobGVmdE51bWVyaWMuaXNCaWdJbnQzMigpICYmIHJpZ2h0TnVtZXJp
Yy5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJfdCBsZWZ0SW50MzIgPSBsZWZ0TnVtZXJp
Yy5iaWdJbnQzMkFzSW50MzIoKTsKLSAgICAgICAgaW50MzJfdCByaWdodEludDMyID0gcmlnaHRO
dW1lcmljLmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICBpZiAocmlnaHRJbnQzMiA8IDApIHsK
LSAgICAgICAgICAgIGlzTGVmdCA9ICFpc0xlZnQ7Ci0gICAgICAgICAgICBpZiAocmlnaHRJbnQz
MiA9PSBJTlQzMl9NSU4pCi0gICAgICAgICAgICAgICAgcmlnaHRJbnQzMiA9IElOVDMyX01BWDsg
Ly8gU2hpZnRzIG9uZSBsZXNzIHRoYW4gcmVxdWVzdGVkLCBidXQgbWFrZXMgbm8gb2JzZXJ2YWJs
ZSBkaWZmZXJlbmNlLgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJpZ2h0SW50
MzIgPSAtcmlnaHRJbnQzMjsKKyAgICBpZiAobGVmdE51bWVyaWMuaXNCaWdJbnQzMigpKSB7Cisg
ICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJbnQzMigpKSB7CisgICAgICAgICAgICBpZiAo
aXNMZWZ0KQorICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6bGVmdFNoaWZ0KGxlZnRO
dW1lcmljLmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkp
OworICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KGxlZnROdW1l
cmljLmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOwog
ICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChyaWdodEludDMyID49IDApOwotCi0gICAgICAgIC8v
IFRoaXMgc3RkOjptaW4gaXMgYSBiaXQgaGFja3ksIGJ1dCByZXF1aXJlZCBiZWNhdXNlIGluIEMr
KyBpdCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgdG8gZG8gYSBzaGlmdCB3aGVyZSB0aGUgcmlnaHQg
b3BlcmFuZCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBiaXQtd2lkdGggb2YgdGhlIGxlZnQg
b3BlcmFuZC4KLSAgICAgICAgaWYgKCFpc0xlZnQpCi0gICAgICAgICAgICByZXR1cm4ganNCaWdJ
bnQzMihsZWZ0SW50MzIgPj4gc3RkOjptaW4ocmlnaHRJbnQzMiwgMzEpKTsKLQotICAgICAgICAv
LyBEbyBzb21lIGNoZWNrcyB0byBkZXRlY3Qgb3ZlcmZsb3cgb2YgbGVmdC1zaGlmdC4gQnV0IHRo
aXMgaXMgbXVjaCBjaGVhcGVyIGNvbXBhcmVkIHRvIGFsbG9jYXRpbmcgdHdvIEpTQmlnSW50IGFu
ZCBwZXJmb3JtIHNoaWZ0IG9wZXJhdGlvbnMgaW4gSlNCaWdJbnQuCi0gICAgICAgIGlmICghbGVm
dEludDMyKQotICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7Ci0gICAgICAgIGlmIChy
aWdodEludDMyIDwgMzIpIHsKLSAgICAgICAgICAgIGludDY0X3QgcmVzdWx0NjQgPSBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihsZWZ0SW50MzIpIDw8IHJpZ2h0SW50MzI7Ci0gICAgICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmVzdWx0NjQpKSA9PSBy
ZXN1bHQ2NCkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxp
bnQzMl90PihyZXN1bHQ2NCkpOworICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0lu
dCgpKSB7CisgICAgICAgICAgICBpZiAoaXNMZWZ0KQorICAgICAgICAgICAgICAgIHJldHVybiBK
U0JpZ0ludDo6bGVmdFNoaWZ0KGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51
bWVyaWMuYXNIZWFwQmlnSW50KCkpOworICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpzaWdu
ZWRSaWdodFNoaWZ0KGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMu
YXNIZWFwQmlnSW50KCkpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChsZWZ0TnVtZXJpYy5p
c0hlYXBCaWdJbnQoKSkgeworICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkg
eworICAgICAgICAgICAgaWYgKGlzTGVmdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNCaWdJ
bnQ6OmxlZnRTaGlmdChsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmJp
Z0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6c2lnbmVkUmln
aHRTaGlmdChsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMy
QXNJbnQzMigpKTsKKyAgICAgICAgfSBlbHNlIGlmIChyaWdodE51bWVyaWMuaXNIZWFwQmlnSW50
KCkpIHsKKyAgICAgICAgICAgIGlmIChpc0xlZnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEpT
QmlnSW50OjpsZWZ0U2hpZnQobGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJp
Yy5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnNpZ25lZFJp
Z2h0U2hpZnQobGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBC
aWdJbnQoKSk7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIGxlZnQg
c2hpZnQgd2UgY2FuIG92ZXJmbG93LiBJIGRlYWwgd2l0aCB0aGlzIGJ5IGFsbG9jYXRpbmcgSGVh
cEJpZ0ludHMuCi0gICAgICAgIC8vIEZJWE1FOiBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byBkbyBz
b21ldGhpbmcgc21hcnRlciwgdHJ5aW5nIHRvIGRvIHRoZSBsZWZ0IHNoaWZ0IGFuZCBkZXRlY3Rp
bmcgc29tZWhvdyBpZiBpdCBvdmVyZmxvd2VkLgotICAgICAgICBKU0JpZ0ludCogbGVmdEhlYXBC
aWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbGVmdEludDMyKTsKLSAgICAgICAgSlNC
aWdJbnQqIHJpZ2h0SGVhcEJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCByaWdodElu
dDMyKTsKLSAgICAgICAgaWYgKGlzTGVmdCkKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnRIZWFwQmlnSW50
LCByaWdodEhlYXBCaWdJbnQpKTsKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBK
U0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCBy
aWdodEhlYXBCaWdJbnQpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICghKGxlZnROdW1lcmlj
LmlzQmlnSW50KCkgJiYgcmlnaHROdW1lcmljLmlzQmlnSW50KCkpKSB7Ci0gICAgICAgIGF1dG8g
ZXJyb3JNZXNzYWdlID0gaXNMZWZ0ID8gIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIg
dHlwZSBpbiBsZWZ0IHNoaWZ0IG9wZXJhdGlvbi4iIDogIkludmFsaWQgbWl4IG9mIEJpZ0ludCBh
bmQgb3RoZXIgdHlwZSBpbiBzaWduZWQgcmlnaHQgc2hpZnQgb3BlcmF0aW9uLiI7Ci0gICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2Up
OwogICAgIH0KLQotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgaGF2ZSBhIGNhc2UgZm9yIGxlZnQg
aXMgSGVhcEJpZ0ludCBhbmQgcmlnaHQgaXMgQmlnSW50MzIsIGl0IHNlZW1zIGZhaXJseSBsaWtl
bHkgdG8gb2NjdXIgZnJlcXVlbnRseS4KLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgSlNCaWdJbnQq
IGxlZnRIZWFwQmlnSW50ID0gbGVmdE51bWVyaWMuaXNCaWdJbnQzMigpID8gSlNCaWdJbnQ6OmNy
ZWF0ZUZyb20odm0sIGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSA6IGxlZnROdW1lcmlj
LmFzSGVhcEJpZ0ludCgpOwotICAgIEpTQmlnSW50KiByaWdodEhlYXBCaWdJbnQgPSByaWdodE51
bWVyaWMuaXNCaWdJbnQzMigpID8gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHJpZ2h0TnVtZXJp
Yy5iaWdJbnQzMkFzSW50MzIoKSkgOiByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCk7CiAjZWxz
ZQotICAgIEpTQmlnSW50KiBsZWZ0SGVhcEJpZ0ludCA9IGxlZnROdW1lcmljLmFzSGVhcEJpZ0lu
dCgpOwotICAgIEpTQmlnSW50KiByaWdodEhlYXBCaWdJbnQgPSByaWdodE51bWVyaWMuYXNIZWFw
QmlnSW50KCk7CisgICAgVU5VU0VEX1BBUkFNKGJpZ0ludDMyT3ApOworICAgIGlmIChsZWZ0TnVt
ZXJpYy5pc0hlYXBCaWdJbnQoKSAmJiByaWdodE51bWVyaWMuaXNIZWFwQmlnSW50KCkpIHsKKyAg
ICAgICAgaWYgKGlzTGVmdCkKKyAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6bGVmdFNoaWZ0
KGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkp
OworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQobGVmdE51bWVyaWMu
YXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSk7CisgICAgfQogI2Vu
ZGlmCiAKLSAgICBpZiAoaXNMZWZ0KQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTQmlnSW50OjpsZWZ0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0SGVhcEJpZ0ludCwgcmlnaHRI
ZWFwQmlnSW50KSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6c2ln
bmVkUmlnaHRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodEhlYXBCaWdJ
bnQpKTsKKyAgICBhdXRvIGVycm9yTWVzc2FnZSA9IGlzTGVmdCA/ICJJbnZhbGlkIG1peCBvZiBC
aWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gbGVmdCBzaGlmdCBvcGVyYXRpb24uIiA6ICJJbnZhbGlk
IG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gc2lnbmVkIHJpZ2h0IHNoaWZ0IG9wZXJh
dGlvbi4iOworICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBl
cnJvck1lc3NhZ2UpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNMU2hpZnQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKIHsKLSAgICBi
b29sIGlzTGVmdCA9IHRydWU7Ci0gICAgcmV0dXJuIHNoaWZ0KGdsb2JhbE9iamVjdCwgdjEsIHYy
LCBpc0xlZnQpOworICAgIGNvbnN0ZXhwciBib29sIGlzTGVmdCA9IHRydWU7CisgICAgcmV0dXJu
IHNoaWZ0PGlzTGVmdD4oZ2xvYmFsT2JqZWN0LCB2MSwgdjIpOwogfQogCiBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUganNSU2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
MSwgSlNWYWx1ZSB2MikKIHsKLSAgICBib29sIGlzTGVmdCA9IGZhbHNlOwotICAgIHJldHVybiBz
aGlmdChnbG9iYWxPYmplY3QsIHYxLCB2MiwgaXNMZWZ0KTsKKyAgICBjb25zdGV4cHIgYm9vbCBp
c0xlZnQgPSBmYWxzZTsKKyAgICByZXR1cm4gc2hpZnQ8aXNMZWZ0PihnbG9iYWxPYmplY3QsIHYx
LCB2Mik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEhlYXBCaWdJbnRPcGVyYXRpb24sIHR5cGVu
YW1lIEludDMyT3BlcmF0aW9uPgotQUxXQVlTX0lOTElORSBKU1ZhbHVlIGJpdHdpc2VCaW5hcnlP
cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBI
ZWFwQmlnSW50T3BlcmF0aW9uJiYgYmlnSW50T3AsIEludDMyT3BlcmF0aW9uJiYgaW50MzJPcCwg
Y29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQordGVtcGxhdGU8dHlwZW5hbWUgSW50MzJPcGVyYXRp
b24+CitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgYml0d2lzZUJpbmFyeU9wKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIsIEludDMyT3BlcmF0aW9uJiYg
aW50MzJPcCwgSlNWYWx1ZSAoKmJpZ0ludDMyKShpbnQzMl90LCBpbnQzMl90KSwgSlNWYWx1ZSAo
Km1peGVkQmlnSW50MSkoSlNCaWdJbnQqLCBpbnQzMl90KSwgSlNWYWx1ZSAoKm1peGVkQmlnSW50
MikoaW50MzJfdCwgSlNCaWdJbnQqKSwgSlNWYWx1ZSAoKmhlYXBCaWdJbnQpKEpTQmlnSW50Kiwg
SlNCaWdJbnQqKSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC04MzgsMjIgKzc3NSwyMSBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgYml0d2lzZUJp
bmFyeU9wKEpTCiAgICAgICAgIHJldHVybiBqc051bWJlcihpbnQzMk9wKGxlZnROdW1lcmljLmFz
SW50MzIoKSwgcmlnaHROdW1lcmljLmFzSW50MzIoKSkpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQot
ICAgIGlmIChsZWZ0TnVtZXJpYy5pc0JpZ0ludDMyKCkgJiYgcmlnaHROdW1lcmljLmlzQmlnSW50
MzIoKSkKLSAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoaW50MzJPcChsZWZ0TnVtZXJpYy5iaWdJ
bnQzMkFzSW50MzIoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSk7Ci0gICAgLy8g
RklYTUU6IGFkZCBmYXN0IHBhdGggZm9yIEJpZ0ludDMyIC8gSGVhcEJpZ0ludCwgYW5kIGZvciBI
ZWFwQmlnSW50IC8gQmlnSW50MzIKLSAgICAvLyBJbiBtYW55IGNhc2VzIHRoZXNlIGNvdWxkIGJl
IG1hZGUgbW9yZSBlZmZpY2llbnQgdGhhbiBoZWFwLWFsbG9jYXRpbmcgdGhlIHNtYWxsIGJpZy1p
bnQgYW5kIGdvaW5nIHRocm91Z2ggdGhlIGdlbmVyaWMgcGF0aC4KLSAgICAvLyBCdXQgaXQgaXMg
cXVpdGUgdHJpY2t5LCBub3QgbGVhc3QgYmVjYXVzZSBIZWFwQmlnSW50IHVzZSBhIHNpZ24gYml0
IHdoZXJlYXMgQmlnSW50MzIgdXNlIDItY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4KLSNlbmRp
ZgotCi0gICAgaWYgKCEobGVmdE51bWVyaWMuaXNCaWdJbnQoKSAmJiByaWdodE51bWVyaWMuaXNC
aWdJbnQoKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCBlcnJvck1lc3NhZ2UpOwotCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIEpTQmlnSW50KiBs
ZWZ0SGVhcEJpZ0ludCA9IGxlZnROdW1lcmljLmlzQmlnSW50MzIoKSA/IEpTQmlnSW50OjpjcmVh
dGVGcm9tKHZtLCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkgOiBsZWZ0TnVtZXJpYy5h
c0hlYXBCaWdJbnQoKTsKLSAgICBKU0JpZ0ludCogcmlnaHRIZWFwQmlnSW50ID0gcmlnaHROdW1l
cmljLmlzQmlnSW50MzIoKSA/IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCByaWdodE51bWVyaWMu
YmlnSW50MzJBc0ludDMyKCkpIDogcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpOworICAgIGlm
IChsZWZ0TnVtZXJpYy5pc0JpZ0ludDMyKCkpIHsKKyAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5p
c0JpZ0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gYmlnSW50MzIobGVmdE51bWVyaWMuYmln
SW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAg
IGlmIChyaWdodE51bWVyaWMuaXNIZWFwQmlnSW50KCkpCisgICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIG1peGVkQmlnSW50MihnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmJp
Z0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsKKyAgICB9IGVs
c2UgaWYgKGxlZnROdW1lcmljLmlzSGVhcEJpZ0ludCgpKSB7CisgICAgICAgIGlmIChyaWdodE51
bWVyaWMuaXNCaWdJbnQzMigpKQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBtaXhlZEJpZ0ludDEoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwg
cmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgIGVsc2UgaWYgKHJpZ2h0
TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgaGVhcEJpZ0ludChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgp
LCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsKKyAgICB9CiAjZWxzZQotICAgIEpTQmln
SW50KiBsZWZ0SGVhcEJpZ0ludCA9IGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpOwotICAgIEpT
QmlnSW50KiByaWdodEhlYXBCaWdJbnQgPSByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGJpZ0ludDMyT3ApOworICAgIGlmIChsZWZ0TnVtZXJpYy5pc0hlYXBC
aWdJbnQoKSAmJiByaWdodE51bWVyaWMuaXNIZWFwQmlnSW50KCkpCisgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFz
SGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsKICNlbmRpZgogCiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBiaWdJbnRPcChnbG9iYWxPYmplY3QsIGxlZnRI
ZWFwQmlnSW50LCByaWdodEhlYXBCaWdJbnQpKTsKQEAgLTg2NSw5ICs4MDEsMTMgQEAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGpzQml0d2lzZUFuZChKU0dsbwogICAgICAgICByZXR1cm4gbGVmdCAm
IHJpZ2h0OwogICAgIH07CiAKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKGF1dG8gbGVmdCwgYXV0
byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VBbmQobGVmdCwgcmln
aHQpOworICAgIH07CisKICAgICAvLyBGSVhNRTogY3VycmVudGx5LCBmb3IgcGFpcnMgb2YgQmln
SW50MzIsIHdlIHVuYm94IHRoZW0sIGRvIHRoZSAiYW5kIiBhbmQgcmUtYm94IHRoZW0uCiAgICAg
Ly8gV2UgY291bGQgZG8gaXQgZGlyZWN0bHkgb24gdGhlIEpTVmFsdWUuCi0gICAgcmV0dXJuIGJp
dHdpc2VCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgSlNCaWdJbnQ6OmJpdHdpc2VBbmQs
IGludDMyT3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gYml0d2lz
ZSAnYW5kJyBvcGVyYXRpb24uIl9zKTsKKyAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGdsb2Jh
bE9iamVjdCwgdjEsIHYyLCBpbnQzMk9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAi
SW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGJpdHdpc2UgJ2FuZCcgb3Bl
cmF0aW9uLiJfcyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0JpdHdpc2VPcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQpAQCAtODc4
LDcgKzgxOCwxMiBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaXR3aXNlT3IoSlNHbG9iCiAK
ICAgICAvLyBGSVhNRTogY3VycmVudGx5LCBmb3IgcGFpcnMgb2YgQmlnSW50MzIsIHdlIHVuYm94
IHRoZW0sIGRvIHRoZSAib3IiIGFuZCByZS1ib3ggdGhlbS4KICAgICAvLyBXZSBjb3VsZCBkbyBp
dCBkaXJlY3RseSBvbiB0aGUgSlNWYWx1ZS4KLSAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGds
b2JhbE9iamVjdCwgdjEsIHYyLCBKU0JpZ0ludDo6Yml0d2lzZU9yLCBpbnQzMk9wLCAiSW52YWxp
ZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGJpdHdpc2UgJ29yJyBvcGVyYXRpb24u
Il9zKTsKKworICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoYXV0byBsZWZ0LCBhdXRvIHJpZ2h0KSB7
CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZU9yKGxlZnQsIHJpZ2h0KTsKKyAgICB9
OworCisgICAgcmV0dXJuIGJpdHdpc2VCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgaW50
MzJPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0lu
dCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICdvcicgb3BlcmF0aW9uLiJfcyk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBqc0JpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAgLTg4OSw3ICs4MzQsMTEgQEAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGpzQml0d2lzZVhvcihKU0dsbwogCiAgICAgLy8gRklYTUU6IGN1cnJl
bnRseSwgZm9yIHBhaXJzIG9mIEJpZ0ludDMyLCB3ZSB1bmJveCB0aGVtLCBkbyB0aGUgInhvciIg
YW5kIHJlLWJveCB0aGVtLgogICAgIC8vIFdlIGNvdWxkIGRvIGl0IGRpcmVjdGx5IG9uIHRoZSBK
U1ZhbHVlLCBhbmQganVzdCByZW1lbWJlciB0byBkbyBhbiBvciB3aXRoIDB4MTIgYXQgdGhlIGVu
ZCB0byByZXN0b3JlIHRoZSB0YWcKLSAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGdsb2JhbE9i
amVjdCwgdjEsIHYyLCBKU0JpZ0ludDo6Yml0d2lzZVhvciwgaW50MzJPcCwgIkludmFsaWQgbWl4
IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICd4b3InIG9wZXJhdGlvbi4iX3Mp
OworICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoYXV0byBsZWZ0LCBhdXRvIHJpZ2h0KSB7CisgICAg
ICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZVhvcihsZWZ0LCByaWdodCk7CisgICAgfTsKKwor
ICAgIHJldHVybiBiaXR3aXNlQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGludDMyT3As
IGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5k
IG90aGVyIHR5cGUgaW4gYml0d2lzZSAneG9yJyBvcGVyYXRpb24uIl9zKTsKIH0KIAogQUxXQVlT
X0lOTElORSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbFdpdGhJbmRleChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0NlbGwqIGJhc2UsIHVpbnQzMl90IGluZGV4KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397771</attachid>
            <date>2020-04-27 17:23:15 -0700</date>
            <delta_ts>2020-04-27 18:54:11 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>104637</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjYwNzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3MSwxMiArMjg3MSw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAocHJpbVZh
bHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJp
Z0ludDMyQXNJbnQzMigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCaWdJbnQzMigtdmFsdWUpKTsKLSAgICAgICAg
cHJpbVZhbHVlID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKLSAgICB9CisgICAg
aWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkp
OwogI2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFz
SGVhcEJpZ0ludCgpKSk7CkBAIC0yOTA0LDEzICsyOTAwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklU
X09QRVJBVElPTiBvcGVyYXRpb25BcgogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChwcmlt
VmFsdWUuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIGludDMyX3QgdmFsdWUgPSBwcmltVmFsdWUu
YmlnSW50MzJBc0ludDMyKCk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBJTlRfTUlOKSB7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IGpzQmlnSW50MzIoLXZhbHVlKTsKLSAgICAgICAgICAgIGFy
aXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIHByaW1WYWx1ZSA9IEpT
QmlnSW50OjpjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
SlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7Cisg
ICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHByaW1W
YWx1ZS5pc0hlYXBCaWdJbnQoKSkgewpAQCAtMjk1MCwxMyArMjk0Miw5IEBAIEVuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXIKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBp
ZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJp
bVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikg
ewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7Ci0gICAgICAg
ICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICBwcmltVmFs
dWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpOworICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMy
KCkpOworICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KICNlbmRpZgogICAgIGlm
IChwcmltVmFsdWUuaXNIZWFwQmlnSW50KCkpIHsKQEAgLTI5OTUsMTIgKzI5ODMsOCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAKICNpZiBVU0UoQklHSU5UMzIp
CiAgICAgLy8gRklYTUU6IHdoeSBkb2VzIHRoaXMgZnVuY3Rpb24gcHJvZmlsZSB0aGUgYXJndW1l
bnQgYnV0IG5vdCB0aGUgcmVzdWx0PwotICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKSB7
Ci0gICAgICAgIGludDMyX3QgdmFsdWUgPSBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCk7Ci0g
ICAgICAgIGlmICh2YWx1ZSAhPSBJTlRfTUlOKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0JpZ0ludDMyKC12YWx1ZSkpOwotICAgICAgICBwcmltVmFsdWUgPSBKU0JpZ0lu
dDo6Y3JlYXRlRnJvbSh2bSwgdmFsdWUpOwotICAgIH0KKyAgICBpZiAocHJpbVZhbHVlLmlzQmln
SW50MzIoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlN
aW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKSk7CiAjZW5kaWYKICAgICBpZiAo
cHJpbVZhbHVlLmlzSGVhcEJpZ0ludCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTQmlnSW50Ojp1bmFyeU1pbnVzKHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkocmV2aXNpb24gMjYwNzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ5LDE0ICs1NDksMTAgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25lZ2F0ZSkKIAogI2lmIFVTRShCSUdJTlQzMikKICAg
ICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0g
cHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01J
TikgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7Ci0gICAg
ICAgICAgICBSRVRVUk5fV0lUSF9QUk9GSUxJTkcocmVzdWx0LCB7Ci0gICAgICAgICAgICAgICAg
dXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJh
bmQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJpbVZh
bHVlID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQz
MigpKTsKKyAgICAgICAgUkVUVVJOX1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgeworICAgICAgICAg
ICAgdXBkYXRlQXJpdGhQcm9maWxlRm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9w
ZXJhbmQpOworICAgICAgICB9KTsKICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAkocmV2aXNpb24gMjYwNzczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzEsMzUgKzIzMSwxMjYgQEAgU3RyaW5nIEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcoVk0mIHZt
LCBKUwogICAgIHJldHVybiB0b1N0cmluZ0dlbmVyaWModm0sIG51bGxwdHIsIGJpZ0ludCwgcmFk
aXgpOwogfQogCitjbGFzcyBIZWFwQmlnSW50SW1wbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
SGVhcEJpZ0ludEltcGwoSlNCaWdJbnQqIGJpZ0ludCkKKyAgICAgICAgOiBtX2JpZ0ludChiaWdJ
bnQpCisgICAgeyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNaZXJvKCkgeyByZXR1cm4g
bV9iaWdJbnQtPmlzWmVybygpOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNpZ24oKSB7IHJl
dHVybiBtX2JpZ0ludC0+c2lnbigpOyB9CisgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBsZW5n
dGgoKSB7IHJldHVybiBtX2JpZ0ludC0+bGVuZ3RoKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpT
QmlnSW50OjpEaWdpdCBkaWdpdCh1bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpZ0ludC0+ZGlnaXQo
aSk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoVk0mKSB7IHJl
dHVybiBtX2JpZ0ludDsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgSlNCaWdJbnQ6
OkltcGxSZXN1bHQ7CisgICAgSlNCaWdJbnQqIG1fYmlnSW50OworfTsKKworY2xhc3MgSW50MzJC
aWdJbnRJbXBsIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbnQzMkJpZ0ludEltcGwoaW50MzJf
dCB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsgfQorCisgICAgQUxXQVlT
X0lOTElORSBib29sIGlzWmVybygpIHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgQUxXQVlTX0lO
TElORSBib29sIHNpZ24oKSB7IHJldHVybiBtX3ZhbHVlIDwgMDsgfQorICAgIEFMV0FZU19JTkxJ
TkUgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gaXNaZXJvKCkgPyAwIDogMTsgfQorICAgIEFM
V0FZU19JTkxJTkUgSlNCaWdJbnQ6OkRpZ2l0IGRpZ2l0KHVuc2lnbmVkIGkpCisgICAgeworICAg
ICAgICBBU1NFUlQobGVuZ3RoKCkpOworICAgICAgICBBU1NFUlQoaSA9PSAwKTsKKyAgICAgICAg
aWYgKHNpZ24oKSkKKyAgICAgICAgICAgIHJldHVybiAtc3RhdGljX2Nhc3Q8aW50NjRfdD4obV92
YWx1ZSk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIEFMV0FZU19JTkxJ
TkUgSlNCaWdJbnQqIHRvSGVhcEJpZ0ludChWTSYgdm0pIHsgcmV0dXJuIEpTQmlnSW50OjpjcmVh
dGVGcm9tKHZtLCBtX3ZhbHVlKTsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgSlNC
aWdJbnQ6OkltcGxSZXN1bHQ7CisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsKKworQUxXQVlTX0lO
TElORSBKU0JpZ0ludDo6SW1wbFJlc3VsdDo6SW1wbFJlc3VsdChIZWFwQmlnSW50SW1wbCYgaGVh
cEltcGwpCisgICAgOiBwYXlsb2FkKGhlYXBJbXBsLm1fYmlnSW50KQoreyB9CisKK0FMV0FZU19J
TkxJTkUgSlNCaWdJbnQ6OkltcGxSZXN1bHQ6OkltcGxSZXN1bHQoSlNCaWdJbnQqIGhlYXBCaWdJ
bnQpCisgICAgOiBwYXlsb2FkKGhlYXBCaWdJbnQpCit7IH0KKworQUxXQVlTX0lOTElORSBKU0Jp
Z0ludDo6SW1wbFJlc3VsdDo6SW1wbFJlc3VsdChJbnQzMkJpZ0ludEltcGwmIGludDMySW1wbCkK
KyAgICA6IHBheWxvYWQoanNCaWdJbnQzMihpbnQzMkltcGwubV92YWx1ZSkpCit7IH0KKworQUxX
QVlTX0lOTElORSBKU0JpZ0ludDo6SW1wbFJlc3VsdDo6SW1wbFJlc3VsdChKU1ZhbHVlIHZhbHVl
KQorICAgIDogcGF5bG9hZCh2YWx1ZSkKK3sgfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIHRyeUNvbnZlcnRUb0JpZ0ludDMyKEpTQmlnSW50KiBiaWdJbnQpCit7CisjaWYgVVNFKEJJ
R0lOVDMyKQorICAgIGlmIChVTkxJS0VMWSghYmlnSW50KSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKKworICAgIGlmIChiaWdJbnQtPmxlbmd0aCgpIDw9IDEpIHsKKyAgICAgICAgaWYgKCFi
aWdJbnQtPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CisgICAg
ICAgIEpTQmlnSW50OjpEaWdpdCBkaWdpdCA9IGJpZ0ludC0+ZGlnaXQoMCk7CisgICAgICAgIGlm
IChiaWdJbnQtPnNpZ24oKSkgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRf
dCBtYXhWYWx1ZSA9IC1zdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dDMyX3Q+OjptaW4oKSk7CisgICAgICAgICAgICBpZiAoZGlnaXQgPD0gbWF4VmFsdWUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXN0YXRp
Y19jYXN0PGludDY0X3Q+KGRpZ2l0KSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
c3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBtYXhWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7CisgICAgICAgICAgICBpZiAo
ZGlnaXQgPD0gbWF4VmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oZGlnaXQpKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisg
ICAgcmV0dXJuIGJpZ0ludDsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlD
b252ZXJ0VG9CaWdJbnQzMihKU0JpZ0ludDo6SW1wbFJlc3VsdCBpbXBsUmVzdWx0KQoreworICAg
IGlmIChpbXBsUmVzdWx0LnBheWxvYWQuaXNCaWdJbnQzMigpKQorICAgICAgICByZXR1cm4gaW1w
bFJlc3VsdC5wYXlsb2FkOworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihpbXBsUmVz
dWx0LnBheWxvYWQuYXNIZWFwQmlnSW50KCkpOworfQorCiAvLyBNdWx0aXBsaWVzIHt0aGlzfSB3
aXRoIHtmYWN0b3J9IGFuZCBhZGRzIHtzdW1tYW5kfSB0byB0aGUgcmVzdWx0Lgogdm9pZCBKU0Jp
Z0ludDo6aW5wbGFjZU11bHRpcGx5QWRkKERpZ2l0IGZhY3RvciwgRGlnaXQgc3VtbWFuZCkKIHsK
LSAgICBpbnRlcm5hbE11bHRpcGx5QWRkKHRoaXMsIGZhY3Rvciwgc3VtbWFuZCwgbGVuZ3RoKCks
IHRoaXMpOworICAgIGludGVybmFsTXVsdGlwbHlBZGQoSGVhcEJpZ0ludEltcGwgeyB0aGlzIH0s
IGZhY3Rvciwgc3VtbWFuZCwgbGVuZ3RoKCksIHRoaXMpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJ
bnQ6OmV4cG9uZW50aWF0ZUhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0lu
dDo6ZXhwb25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJ
bXBsMSBiYXNlLCBCaWdJbnRJbXBsMiBleHBvbmVudCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgaWYgKGV4cG9uZW50LT5zaWduKCkpIHsKKyAgICBpZiAoZXhwb25lbnQuc2lnbigpKSB7
CiAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiTmVnYXRpdmUg
ZXhwb25lbnQgaXMgbm90IGFsbG93ZWQiX3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAKICAgICAvLyAyLiBJZiBiYXNlIGlzIDBuIGFuZCBleHBvbmVudCBpcyAwbiwgcmV0dXJu
IDFuLgotICAgIGlmIChleHBvbmVudC0+aXNaZXJvKCkpCisgICAgaWYgKGV4cG9uZW50LmlzWmVy
bygpKQogICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIDEpOwogICAgIAog
ICAgIC8vIDMuIFJldHVybiBhIEJpZ0ludCByZXByZXNlbnRpbmcgdGhlIG1hdGhlbWF0aWNhbCB2
YWx1ZSBvZiBiYXNlIHJhaXNlZAogICAgIC8vICAgIHRvIHRoZSBwb3dlciBleHBvbmVudC4KLSAg
ICBpZiAoYmFzZS0+aXNaZXJvKCkpCisgICAgaWYgKGJhc2UuaXNaZXJvKCkpCiAgICAgICAgIHJl
dHVybiBiYXNlOwogCi0gICAgaWYgKGJhc2UtPmxlbmd0aCgpID09IDEgJiYgYmFzZS0+ZGlnaXQo
MCkgPT0gMSkgeworICAgIGlmIChiYXNlLmxlbmd0aCgpID09IDEgJiYgYmFzZS5kaWdpdCgwKSA9
PSAxKSB7CiAgICAgICAgIC8vICgtMSkgKiogZXZlbl9udW1iZXIgPT0gMS4KLSAgICAgICAgaWYg
KGJhc2UtPnNpZ24oKSAmJiAhKGV4cG9uZW50LT5kaWdpdCgwKSAmIDEpKQotICAgICAgICAgICAg
cmV0dXJuIEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChi
YXNlLnNpZ24oKSAmJiAhKGV4cG9uZW50LmRpZ2l0KDApICYgMSkpCisgICAgICAgICAgICByZXR1
cm4gSlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBsKHZtLCBiYXNlKTsKIAogICAgICAgICAvLyAoLTEp
ICoqIG9kZF9udW1iZXIgPT0gLTE7IDEgKiogYW55dGhpbmcgPT0gMS4KICAgICAgICAgcmV0dXJu
IGJhc2U7CkBAIC0yNjgsMTIgKzM1OSwxMiBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmV4cG9uZW50
aWF0ZUhlYXAoSlNHCiAgICAgLy8gRm9yIGFsbCBiYXNlcyA+PSAyLCB2ZXJ5IGxhcmdlIGV4cG9u
ZW50cyB3b3VsZCBsZWFkIHRvIHVucmVwcmVzZW50YWJsZQogICAgIC8vIHJlc3VsdHMuCiAgICAg
c3RhdGljX2Fzc2VydChtYXhMZW5ndGhCaXRzIDwgc3RkOjpudW1lcmljX2xpbWl0czxEaWdpdD46
Om1heCgpLCAibWF4TGVuZ3RoQml0cyBuZWVkcyB0byBiZSBsZXNzIHRoYW4gZGlnaXQ6Om1heCgp
Iik7Ci0gICAgaWYgKGV4cG9uZW50LT5sZW5ndGgoKSA+IDEpIHsKKyAgICBpZiAoZXhwb25lbnQu
bGVuZ3RoKCkgPiAxKSB7CiAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3Mp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBEaWdpdCBleHBWYWx1ZSA9
IGV4cG9uZW50LT5kaWdpdCgwKTsKKyAgICBEaWdpdCBleHBWYWx1ZSA9IGV4cG9uZW50LmRpZ2l0
KDApOwogICAgIGlmIChleHBWYWx1ZSA9PSAxKQogICAgICAgICByZXR1cm4gYmFzZTsKICAgICBp
ZiAoZXhwVmFsdWUgPj0gbWF4TGVuZ3RoQml0cykgewpAQCAtMjgzLDcgKzM3NCw3IEBAIEpTQmln
SW50KiBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSGVhcChKU0cKIAogICAgIHN0YXRpY19hc3NlcnQo
bWF4TGVuZ3RoQml0cyA8PSBtYXhJbnQsICJtYXhMZW5ndGhCaXRzIG5lZWRzIHRvIGJlIDw9IG1h
eEludCIpOwogICAgIGludCBuID0gc3RhdGljX2Nhc3Q8aW50PihleHBWYWx1ZSk7Ci0gICAgaWYg
KGJhc2UtPmxlbmd0aCgpID09IDEgJiYgYmFzZS0+ZGlnaXQoMCkgPT0gMikgeworICAgIGlmIChi
YXNlLmxlbmd0aCgpID09IDEgJiYgYmFzZS5kaWdpdCgwKSA9PSAyKSB7CiAgICAgICAgIC8vIEZh
c3QgcGF0aCBmb3IgMl5uLgogICAgICAgICBpbnQgbmVlZGVkRGlnaXRzID0gMSArIChuIC8gZGln
aXRCaXRzKTsKICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVX
aXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgbmVlZGVkRGlnaXRzKTsKQEAgLTI5NCwyOSArMzg1LDI5
IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSGVhcChKU0cKICAgICAgICAgRGln
aXQgbXNkID0gc3RhdGljX2Nhc3Q8RGlnaXQ+KDEpIDw8IChuICUgZGlnaXRCaXRzKTsKICAgICAg
ICAgcmVzdWx0LT5zZXREaWdpdChuZWVkZWREaWdpdHMgLSAxLCBtc2QpOwogICAgICAgICAvLyBS
ZXN1bHQgaXMgbmVnYXRpdmUgZm9yIG9kZCBwb3dlcnMgb2YgLTJuLgotICAgICAgICBpZiAoYmFz
ZS0+c2lnbigpKSAKKyAgICAgICAgaWYgKGJhc2Uuc2lnbigpKSAKICAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U2lnbihzdGF0aWNfY2FzdDxib29sPihuICYgMSkpOwogCiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogCiAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IG51bGxwdHI7Ci0gICAgSlNC
aWdJbnQqIHJ1bm5pbmdTcXVhcmUgPSBiYXNlOworICAgIEpTQmlnSW50KiBydW5uaW5nU3F1YXJl
ID0gYmFzZS50b0hlYXBCaWdJbnQodm0pOwogCiAgICAgLy8gVGhpcyBpbXBsaWNpdGx5IHNldHMg
dGhlIHJlc3VsdCdzIHNpZ24gY29ycmVjdGx5LgogICAgIGlmIChuICYgMSkKLSAgICAgICAgcmVz
dWx0ID0gYmFzZTsKKyAgICAgICAgcmVzdWx0ID0gYmFzZS50b0hlYXBCaWdJbnQodm0pOwogCiAg
ICAgbiA+Pj0gMTsKICAgICBmb3IgKDsgbjsgbiA+Pj0gMSkgewotICAgICAgICBKU0JpZ0ludCog
bWF5YmVSZXN1bHQgPSBKU0JpZ0ludDo6bXVsdGlwbHlIZWFwKGdsb2JhbE9iamVjdCwgcnVubmlu
Z1NxdWFyZSwgcnVubmluZ1NxdWFyZSk7CisgICAgICAgIEpTQmlnSW50KiBtYXliZVJlc3VsdCA9
IEpTQmlnSW50OjptdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJ1
bm5pbmdTcXVhcmUgfSwgSGVhcEJpZ0ludEltcGwgeyBydW5uaW5nU3F1YXJlIH0pLnBheWxvYWQu
YXNIZWFwQmlnSW50KCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogICAgICAgICBydW5uaW5nU3F1YXJlID0gbWF5YmVSZXN1bHQ7CiAgICAgICAgIGlmIChu
ICYgMSkgewogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gcnVubmluZ1NxdWFyZTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1h
eWJlUmVzdWx0ID0gSlNCaWdJbnQ6Om11bHRpcGx5SGVhcChnbG9iYWxPYmplY3QsIHJlc3VsdCwg
cnVubmluZ1NxdWFyZSk7CisgICAgICAgICAgICAgICAgbWF5YmVSZXN1bHQgPSBKU0JpZ0ludDo6
bXVsdGlwbHlJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVh
cEJpZ0ludEltcGwgeyBydW5uaW5nU3F1YXJlIH0pLnBheWxvYWQuYXNIZWFwQmlnSW50KCk7CiAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbWF5YmVSZXN1bHQ7CiAgICAgICAgICAgICB9CkBAIC0zMjYs
MzUgKzQxNyw3MCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUhlYXAoSlNHCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjptdWx0aXBseUhlYXAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQor
SlNWYWx1ZSBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiBiYXNlLCBKU0JpZ0ludCogZXhwb25lbnQpCit7CisgICAgcmV0dXJuIHRy
eUNvbnZlcnRUb0JpZ0ludDMyKGV4cG9uZW50aWF0ZUltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmln
SW50SW1wbCB7IGJhc2UgfSwgSGVhcEJpZ0ludEltcGwgeyBleHBvbmVudCB9KSk7Cit9CisKK0pT
VmFsdWUgSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogYmFzZSwgaW50MzJfdCBleHBvbmVudCkKK3sKKyAgICByZXR1cm4gdHJ5Q29u
dmVydFRvQmlnSW50MzIoZXhwb25lbnRpYXRlSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJ
bXBsIHsgYmFzZSB9LCBJbnQzMkJpZ0ludEltcGwgeyBleHBvbmVudCB9KSk7Cit9CisKK0pTVmFs
dWUgSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBp
bnQzMl90IGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVy
dFRvQmlnSW50MzIoZXhwb25lbnRpYXRlSW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50SW1w
bCB7IGJhc2UgfSwgSGVhcEJpZ0ludEltcGwgeyBleHBvbmVudCB9KSk7Cit9CisKK0pTVmFsdWUg
SlNCaWdJbnQ6OmV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQz
Ml90IGJhc2UsIGludDMyX3QgZXhwb25lbnQpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0Jp
Z0ludDMyKGV4cG9uZW50aWF0ZUltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyBi
YXNlIH0sIEludDMyQmlnSW50SW1wbCB7IGV4cG9uZW50IH0pKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50OjpJbXBs
UmVzdWx0IEpTQmlnSW50OjptdWx0aXBseUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
Ci0gICAgaWYgKHgtPmlzWmVybygpKQorICAgIGlmICh4LmlzWmVybygpKQogICAgICAgICByZXR1
cm4geDsKLSAgICBpZiAoeS0+aXNaZXJvKCkpCisgICAgaWYgKHkuaXNaZXJvKCkpCiAgICAgICAg
IHJldHVybiB5OwogCi0gICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0geC0+bGVuZ3RoKCkgKyB5
LT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSB4Lmxlbmd0aCgpICsgeS5s
ZW5ndGgoKTsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhM
ZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogICAgIHJlc3VsdC0+aW5pdGlhbGl6ZShJbml0aWFsaXphdGlv
blR5cGU6OldpdGhaZXJvKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB4LT5sZW5n
dGgoKTsgaSsrKQotICAgICAgICBtdWx0aXBseUFjY3VtdWxhdGUoeSwgeC0+ZGlnaXQoaSksIHJl
c3VsdCwgaSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHgubGVuZ3RoKCk7IGkrKykK
KyAgICAgICAgbXVsdGlwbHlBY2N1bXVsYXRlKHksIHguZGlnaXQoaSksIHJlc3VsdCwgaSk7CiAK
LSAgICByZXN1bHQtPnNldFNpZ24oeC0+c2lnbigpICE9IHktPnNpZ24oKSk7CisgICAgcmVzdWx0
LT5zZXRTaWduKHguc2lnbigpICE9IHkuc2lnbigpKTsKICAgICByZXR1cm4gcmVzdWx0LT5yaWdo
dFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmRpdmlkZUhlYXAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNWYWx1ZSBK
U0JpZ0ludDo6bXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihtdWx0
aXBseUltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludElt
cGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6Om11bHRpcGx5KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRy
eUNvbnZlcnRUb0JpZ0ludDMyKG11bHRpcGx5SW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50
SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6
Om11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQz
Ml90IHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKG11bHRpcGx5SW1wbChn
bG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0p
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpkaXZpZGVJbXBsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAg
ICAgLy8gMS4gSWYgeSBpcyAwbiwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgaWYgKHktPmlzWmVybygpKSB7CisgICAgaWYgKHkuaXNaZXJv
KCkpIHsKICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlz
IGFuIGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CkBAIC0zNjMsMTkgKzQ4OSwxOSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmRpdmlkZUhl
YXAoSlNHbG9iYWxPCiAgICAgLy8gMy4gUmV0dXJuIGEgQmlnSW50IHJlcHJlc2VudGluZyBxdW90
aWVudCByb3VuZGVkIHRvd2FyZHMgMCB0byB0aGUgbmV4dAogICAgIC8vICAgIGludGVncmFsIHZh
bHVlLgogICAgIGlmIChhYnNvbHV0ZUNvbXBhcmUoeCwgeSkgPT0gQ29tcGFyaXNvblJlc3VsdDo6
TGVzc1RoYW4pCi0gICAgICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgcmV0dXJu
IGpzQmlnSW50MzIoMCk7CiAKICAgICBKU0JpZ0ludCogcXVvdGllbnQgPSBudWxscHRyOwotICAg
IGJvb2wgcmVzdWx0U2lnbiA9IHgtPnNpZ24oKSAhPSB5LT5zaWduKCk7Ci0gICAgaWYgKHktPmxl
bmd0aCgpID09IDEpIHsKLSAgICAgICAgRGlnaXQgZGl2aXNvciA9IHktPmRpZ2l0KDApOworICAg
IGJvb2wgcmVzdWx0U2lnbiA9IHguc2lnbigpICE9IHkuc2lnbigpOworICAgIGlmICh5Lmxlbmd0
aCgpID09IDEpIHsKKyAgICAgICAgRGlnaXQgZGl2aXNvciA9IHkuZGlnaXQoMCk7CiAgICAgICAg
IGlmIChkaXZpc29yID09IDEpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9PSB4LT5z
aWduKCkgPyB4IDogSlNCaWdJbnQ6OnVuYXJ5TWludXNIZWFwKHZtLCB4KTsKKyAgICAgICAgICAg
IHJldHVybiByZXN1bHRTaWduID09IHguc2lnbigpID8gSlNCaWdJbnQ6OkltcGxSZXN1bHQgeyB4
IH0gOiBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwodm0sIHgpOwogCiAgICAgICAgIERpZ2l0IHJl
bWFpbmRlcjsKICAgICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKHZtLCB4LCBkaXZp
c29yLCAmcXVvdGllbnQsIHJlbWFpbmRlcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYWJzb2x1
dGVEaXZXaXRoQmlnSW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHksICZxdW90aWVudCwgbnVs
bHB0cik7CisgICAgICAgIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoZ2xvYmFsT2JqZWN0
LCB4LCB5LnRvSGVhcEJpZ0ludCh2bSksICZxdW90aWVudCwgbnVsbHB0cik7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIH0KIApAQCAtMzgzLDYgKzUw
OSwxOSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmRpdmlkZUhlYXAoSlNHbG9iYWxPCiAgICAgcmV0
dXJuIHF1b3RpZW50LT5yaWdodFRyaW0odm0pOwogfQogCitKU1ZhbHVlIEpTQmlnSW50OjpkaXZp
ZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihkaXZpZGVJbXBsKGdsb2JhbE9i
amVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitK
U1ZhbHVlIEpTQmlnSW50OjpkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
ZGl2aWRlSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0lu
dEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0
cnlDb252ZXJ0VG9CaWdJbnQzMihkaXZpZGVJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJ
bXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorCiBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmNvcHkoVk0mIHZtLCBKU0JpZ0ludCogeCkKIHsKICAgICBBU1NFUlQoIXgtPmlzWmVybygp
KTsKQEAgLTM5MywyMyArNTMyLDMwIEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0s
IEpTQmlnSW4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OnVu
YXJ5TWludXNIZWFwKFZNJiB2bSwgSlNCaWdJbnQqIHgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbD4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbChW
TSYgdm0sIEJpZ0ludEltcGwgeCkKIHsKLSAgICBpZiAoeC0+aXNaZXJvKCkpCi0gICAgICAgIHJl
dHVybiB4OworICAgIGlmICh4LmlzWmVybygpKQorICAgICAgICByZXR1cm4ganNCaWdJbnQzMigw
KTsKIAotICAgIEpTQmlnSW50KiByZXN1bHQgPSBjb3B5KHZtLCB4KTsKLSAgICByZXN1bHQtPnNl
dFNpZ24oIXgtPnNpZ24oKSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNvcHkodm0sIHgudG9I
ZWFwQmlnSW50KHZtKSk7CisgICAgcmVzdWx0LT5zZXRTaWduKCF4LnNpZ24oKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpyZW1haW5kZXJIZWFwKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTVmFs
dWUgSlNCaWdJbnQ6OnVuYXJ5TWludXMoVk0mIHZtLCBKU0JpZ0ludCogeCkKK3sKKyAgICByZXR1
cm4gdHJ5Q29udmVydFRvQmlnSW50MzIodW5hcnlNaW51c0ltcGwodm0sIEhlYXBCaWdJbnRJbXBs
IHsgeCB9KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6cmVtYWluZGVySW1w
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBs
MiB5KQogewogICAgIC8vIDEuIElmIHkgaXMgMG4sIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRp
b24uCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAKLSAgICBpZiAoeS0+aXNaZXJvKCkpIHsKKyAg
ICBpZiAoeS5pc1plcm8oKSkgewogICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgIjAgaXMgYW4gaW52YWxpZCBkaXZpc29yIHZhbHVlLiJfcyk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KQEAgLTQyMCw1OCArNTY2LDgwIEBAIEpTQmlnSW50KiBKU0Jp
Z0ludDo6cmVtYWluZGVySGVhcChKU0dsb2IKICAgICAgICAgcmV0dXJuIHg7CiAKICAgICBKU0Jp
Z0ludCogcmVtYWluZGVyOwotICAgIGlmICh5LT5sZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgIERp
Z2l0IGRpdmlzb3IgPSB5LT5kaWdpdCgwKTsKKyAgICBpZiAoeS5sZW5ndGgoKSA9PSAxKSB7Cisg
ICAgICAgIERpZ2l0IGRpdmlzb3IgPSB5LmRpZ2l0KDApOwogICAgICAgICBpZiAoZGl2aXNvciA9
PSAxKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgICAgICAgICAgcmV0
dXJuIGpzQmlnSW50MzIoMCk7CiAKICAgICAgICAgRGlnaXQgcmVtYWluZGVyRGlnaXQ7CiAgICAg
ICAgIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcih2bSwgeCwgZGl2aXNvciwgbnVsbHB0ciwg
cmVtYWluZGVyRGlnaXQpOwogICAgICAgICBpZiAoIXJlbWFpbmRlckRpZ2l0KQotICAgICAgICAg
ICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIo
MCk7CiAKICAgICAgICAgcmVtYWluZGVyID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwg
MSk7CiAgICAgICAgIHJlbWFpbmRlci0+c2V0RGlnaXQoMCwgcmVtYWluZGVyRGlnaXQpOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoZ2xvYmFsT2Jq
ZWN0LCB4LCB5LCBudWxscHRyLCAmcmVtYWluZGVyKTsKKyAgICAgICAgYWJzb2x1dGVEaXZXaXRo
QmlnSW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHkudG9IZWFwQmlnSW50KHZtKSwgbnVsbHB0
ciwgJnJlbWFpbmRlcik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwogICAgIH0KIAotICAgIHJlbWFpbmRlci0+c2V0U2lnbih4LT5zaWduKCkpOworICAgIHJl
bWFpbmRlci0+c2V0U2lnbih4LnNpZ24oKSk7CiAgICAgcmV0dXJuIHJlbWFpbmRlci0+cmlnaHRU
cmltKHZtKTsKIH0KK0pTVmFsdWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRy
eUNvbnZlcnRUb0JpZ0ludDMyKHJlbWFpbmRlckltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50
SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6
OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50
MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihyZW1haW5kZXJJbXBs
KGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkg
fSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6cmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKHJlbWFpbmRlckltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwg
eyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6
aW5jSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6
OmluY0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4KQogewot
ICAgIGlmICgheC0+c2lnbigpKQorICAgIGlmICgheC5zaWduKCkpCiAgICAgICAgIHJldHVybiBh
YnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHgsIFNpZ25PcHRpb246OlVuc2lnbmVkKTsKLSAg
ICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4LT5s
ZW5ndGgoKSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9i
amVjdCwgeCwgeC5sZW5ndGgoKSk7CiAgICAgaWYgKHJlc3VsdC0+aXNaZXJvKCkpCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgcmVzdWx0LT5zZXRTaWduKHRydWUpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6ZGVjSGVhcChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKK0pTVmFsdWUgSlNCaWdJbnQ6OmluYyhKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKIHsKLSAgICBpZiAoeC0+aXNaZXJv
KCkpIHsKLSAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZUZyb20oZ2xvYmFsT2JqZWN0
LT52bSgpLCAxKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTaWduKHRydWUpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLSAgICBpZiAoIXgtPnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIGFi
c29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwgeC0+bGVuZ3RoKCkpOworICAgIHJldHVybiB0
cnlDb252ZXJ0VG9CaWdJbnQzMihpbmNJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwg
eyB4IH0pKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CitKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZGVjSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBCaWdJbnRJbXBsIHgpCit7CisgICAgaWYgKHguaXNaZXJvKCkpCisgICAgICAgIHJldHVybiBq
c0JpZ0ludDMyKC0xKTsKKyAgICBpZiAoIXguc2lnbigpKQorICAgICAgICByZXR1cm4gYWJzb2x1
dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4Lmxlbmd0aCgpKTsKICAgICByZXR1cm4gYWJzb2x1
dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCB4LCBTaWduT3B0aW9uOjpTaWduZWQpOwogfQogCi1KU0Jp
Z0ludCogSlNCaWdJbnQ6OmFkZEhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNWYWx1ZSBKU0JpZ0ludDo6ZGVjKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0
VG9CaWdJbnQzMihkZWNJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0pKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjphZGRJbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGJvb2wgeFNpZ24gPSB4LT5zaWduKCk7Cisg
ICAgYm9vbCB4U2lnbiA9IHguc2lnbigpOwogCiAgICAgLy8geCArIHkgPT0geCArIHkKICAgICAv
LyAteCArIC15ID09IC0oeCArIHkpCi0gICAgaWYgKHhTaWduID09IHktPnNpZ24oKSkKKyAgICBp
ZiAoeFNpZ24gPT0geS5zaWduKCkpCiAgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZChnbG9iYWxP
YmplY3QsIHgsIHksIHhTaWduKTsKIAogICAgIC8vIHggKyAteSA9PSB4IC0geSA9PSAtKHkgLSB4
KQpAQCAtNDgyLDEyICs2NTAsMjUgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphZGRIZWFwKEpTR2xv
YmFsT2JqZQogCiAgICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB5LCB4LCAheFNpZ24pOwogfQor
SlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmln
SW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
YWRkSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1w
bCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKGFkZEltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwg
SW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjphZGQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICBy
ZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYWRkSW1wbChnbG9iYWxPYmplY3QsIEludDMyQmln
SW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KIAotSlNCaWdJbnQqIEpT
QmlnSW50OjpzdWJIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6c3ViSW1wbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBib29sIHhTaWduID0geC0+
c2lnbigpOwotICAgIGlmICh4U2lnbiAhPSB5LT5zaWduKCkpIHsKKyAgICBib29sIHhTaWduID0g
eC5zaWduKCk7CisgICAgaWYgKHhTaWduICE9IHkuc2lnbigpKSB7CiAgICAgICAgIC8vIHggLSAo
LXkpID09IHggKyB5CiAgICAgICAgIC8vICgteCkgLSB5ID09IC0oeCArIHkpCiAgICAgICAgIHJl
dHVybiBhYnNvbHV0ZUFkZChnbG9iYWxPYmplY3QsIHgsIHksIHhTaWduKTsKQEAgLTUwMSwxNTIg
KzY4MiwyNTggQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpzdWJIZWFwKEpTR2xvYmFsT2JqZQogICAg
IHJldHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwgIXhTaWduKTsKIH0KIAotSlNCaWdJbnQqIEpT
QmlnSW50OjpiaXR3aXNlQW5kSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpCitKU1ZhbHVlIEpTQmlnSW50OjpzdWIoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVy
biB0cnlDb252ZXJ0VG9CaWdJbnQzMihzdWJJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50Ojpz
dWIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSkK
K3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoc3ViSW1wbChnbG9iYWxPYmplY3Qs
IEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFs
dWUgSlNCaWdJbnQ6OnN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgs
IEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihzdWJJbXBs
KGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkg
fSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0lu
dEltcGwyPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICgheC0+c2lnbigpICYmICF5LT5zaWdu
KCkpIHsKKyAgICBpZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkgewogICAgICAgICBzY29wZS5y
ZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBhYnNvbHV0ZUFuZCh2bSwgeCwgeSk7CiAgICAgfQog
ICAgIAotICAgIGlmICh4LT5zaWduKCkgJiYgeS0+c2lnbigpKSB7Ci0gICAgICAgIGludCByZXN1
bHRMZW5ndGggPSBzdGQ6Om1heCh4LT5sZW5ndGgoKSwgeS0+bGVuZ3RoKCkpICsgMTsKKyAgICBp
ZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKKyAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHN0
ZDo6bWF4KHgubGVuZ3RoKCksIHkubGVuZ3RoKCkpICsgMTsKICAgICAgICAgLy8gKC14KSAmICgt
eSkgPT0gfih4LTEpICYgfih5LTEpID09IH4oKHgtMSkgfCAoeS0xKSkKICAgICAgICAgLy8gPT0g
LSgoKHgtMSkgfCAoeS0xKSkgKyAxKQogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1
dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKIAotICAgICAgICBKU0JpZ0ludCogeTEgPSBh
YnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHktPmxlbmd0aCgpKTsKKyAgICAgICAgSlNC
aWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgICAgIHJl
c3VsdCA9IGFic29sdXRlT3Iodm0sIHJlc3VsdCwgeTEpOworICAgICAgICByZXN1bHQgPSBhYnNv
bHV0ZU9yKHZtLCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50SW1wbCB7IHkx
IH0pOwogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZUFk
ZE9uZShnbG9iYWxPYmplY3QsIHJlc3VsdCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICAgICAg
cmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1
bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKICAgICB9CiAKLSAgICBBU1NFUlQoeC0+c2lnbigp
ICE9IHktPnNpZ24oKSk7Ci0gICAgLy8gQXNzdW1lIHRoYXQgeCBpcyB0aGUgcG9zaXRpdmUgQmln
SW50LgotICAgIGlmICh4LT5zaWduKCkpCi0gICAgICAgIHN0ZDo6c3dhcCh4LCB5KTsKLSAgICAK
KyAgICBBU1NFUlQoeC5zaWduKCkgIT0geS5zaWduKCkpOwogICAgIC8vIHggJiAoLXkpID09IHgg
JiB+KHktMSkKLSAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3Qs
IHksIHktPmxlbmd0aCgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKLSAgICByZXR1cm4gYWJzb2x1dGVBbmROb3Qodm0sIHgsIHkxKTsKKyAgICBhdXRvIGNvbXB1
dGVSZXN1bHQgPSBbJl0gKGF1dG8geCwgYXV0byB5KSAtPiBKU0JpZ0ludCogeworICAgICAgICBB
U1NFUlQoIXguc2lnbigpKTsgCisgICAgICAgIEFTU0VSVCh5LnNpZ24oKSk7IAorICAgICAgICBK
U0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAg
cmV0dXJuIGFic29sdXRlQW5kTm90KHZtLCB4LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOworICAg
IH07CisgICAgaWYgKHguc2lnbigpKQorICAgICAgICByZXR1cm4gY29tcHV0ZVJlc3VsdCh5LCB4
KTsKKyAgICByZXR1cm4gY29tcHV0ZVJlc3VsdCh4LCB5KTsKIH0KIAotSlNCaWdJbnQqIEpTQmln
SW50OjpiaXR3aXNlT3JIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSkKK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VBbmQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQoreworICAgIHJl
dHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlQW5kSW1wbChnbG9iYWxPYmplY3QsIEhl
YXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBK
U0JpZ0ludDo6Yml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0lu
dCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3
aXNlQW5kSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0lu
dEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VBbmQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1
cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZUFuZEltcGwoZ2xvYmFsT2JqZWN0LCBJbnQz
MkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZU9ySW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4LT5sZW5ndGgoKSwg
eS0+bGVuZ3RoKCkpOworICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgubGVu
Z3RoKCksIHkubGVuZ3RoKCkpOwogCi0gICAgaWYgKCF4LT5zaWduKCkgJiYgIXktPnNpZ24oKSkg
eworICAgIGlmICgheC5zaWduKCkgJiYgIXkuc2lnbigpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVh
c2UoKTsKICAgICAgICAgcmV0dXJuIGFic29sdXRlT3Iodm0sIHgsIHkpOwogICAgIH0KICAgICAK
LSAgICBpZiAoeC0+c2lnbigpICYmIHktPnNpZ24oKSkgeworICAgIGlmICh4LnNpZ24oKSAmJiB5
LnNpZ24oKSkgewogICAgICAgICAvLyAoLXgpIHwgKC15KSA9PSB+KHgtMSkgfCB+KHktMSkgPT0g
figoeC0xKSAmICh5LTEpKQogICAgICAgICAvLyA9PSAtKCgoeC0xKSAmICh5LTEpKSArIDEpCiAg
ICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgs
IHJlc3VsdExlbmd0aCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwotICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3Qs
IHksIHktPmxlbmd0aCgpKTsKKyAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUo
Z2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7Ci0gICAgICAgIHJlc3VsdCA9IGFic29sdXRlQW5kKHZtLCByZXN1
bHQsIHkxKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmQodm0sIEhlYXBCaWdJbnRJbXBs
IHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAg
ICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBTaWduT3B0
aW9uOjpTaWduZWQpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOwogICAgIH0K
ICAgICAKLSAgICBBU1NFUlQoeC0+c2lnbigpICE9IHktPnNpZ24oKSk7CisgICAgQVNTRVJUKHgu
c2lnbigpICE9IHkuc2lnbigpKTsKIAotICAgIC8vIEFzc3VtZSB0aGF0IHggaXMgdGhlIHBvc2l0
aXZlIEJpZ0ludC4KLSAgICBpZiAoeC0+c2lnbigpKQotICAgICAgICBzdGQ6OnN3YXAoeCwgeSk7
Ci0gICAgCiAgICAgLy8geCB8ICgteSkgPT0geCB8IH4oeS0xKSA9PSB+KCh5LTEpICZ+IHgpID09
IC0oKCh5LTEpICZ+IHgpICsgMSkKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJP
bmUoZ2xvYmFsT2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwotICAgIHJlc3VsdCA9IGFic29sdXRlQW5kTm90KHZtLCByZXN1
bHQsIHgpOworICAgIGF1dG8gY29tcHV0ZVJlc3VsdCA9IFsmXSAoYXV0byB4LCBhdXRvIHkpIC0+
IEpTQmlnSW50KiB7CisgICAgICAgIEFTU0VSVCgheC5zaWduKCkpOworICAgICAgICBBU1NFUlQo
eS5zaWduKCkpOworCisgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShn
bG9iYWxPYmplY3QsIHksIHJlc3VsdExlbmd0aCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZE5vdCh2bSwg
SGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgeCk7CisKKyAgICAgICAgc2NvcGUucmVsZWFzZSgp
OworICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50
SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAgIH07CisKKyAgICBpZiAo
eC5zaWduKCkpCisgICAgICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHksIHgpOworICAgIHJldHVy
biBjb21wdXRlUmVzdWx0KHgsIHkpOworfQogCi0gICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJl
dHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHJlc3VsdCwgU2lnbk9wdGlvbjo6U2ln
bmVkKTsKK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VPcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKGJpdHdpc2VPckltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7
IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdp
c2VPcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5
KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlT3JJbXBsKGdsb2Jh
bE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOwor
fQorSlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0Jp
Z0ludDMyKGJpdHdpc2VPckltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0s
IEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lz
ZVhvckhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmln
SW50KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlWG9ySW1wbChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQog
ewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIXgtPnNpZ24oKSAmJiAheS0+c2lnbigp
KSB7CisgICAgaWYgKCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKICAgICAgICAgc2NvcGUucmVs
ZWFzZSgpOwogICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIHgsIHkpOwogICAgIH0KICAg
ICAKLSAgICBpZiAoeC0+c2lnbigpICYmIHktPnNpZ24oKSkgewotICAgICAgICBpbnQgcmVzdWx0
TGVuZ3RoID0gc3RkOjptYXgoeC0+bGVuZ3RoKCksIHktPmxlbmd0aCgpKTsKKyAgICBpZiAoeC5z
aWduKCkgJiYgeS5zaWduKCkpIHsKKyAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4
KHgubGVuZ3RoKCksIHkubGVuZ3RoKCkpOwogICAgICAgICAKICAgICAgICAgLy8gKC14KSBeICgt
eSkgPT0gfih4LTEpIF4gfih5LTEpID09ICh4LTEpIF4gKHktMSkKICAgICAgICAgSlNCaWdJbnQq
IHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwgcmVzdWx0TGVuZ3RoKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgICAgIEpT
QmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS0+bGVuZ3RoKCkp
OworICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHks
IHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKIAogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBhYnNvbHV0ZVhv
cih2bSwgcmVzdWx0LCB5MSk7CisgICAgICAgIHJldHVybiBhYnNvbHV0ZVhvcih2bSwgSGVhcEJp
Z0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKICAgICB9Ci0gICAg
QVNTRVJUKHgtPnNpZ24oKSAhPSB5LT5zaWduKCkpOwotICAgIGludCByZXN1bHRMZW5ndGggPSBz
dGQ6Om1heCh4LT5sZW5ndGgoKSwgeS0+bGVuZ3RoKCkpICsgMTsKKyAgICBBU1NFUlQoeC5zaWdu
KCkgIT0geS5zaWduKCkpOworICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0
aCgpLCB5Lmxlbmd0aCgpKSArIDE7CisKKyAgICAvLyB4IF4gKC15KSA9PSB4IF4gfih5LTEpID09
IH4oeCBeICh5LTEpKSA9PSAtKCh4IF4gKHktMSkpICsgMSkKKyAgICBhdXRvIGNvbXB1dGVSZXN1
bHQgPSBbJl0gKGF1dG8geCwgYXV0byB5KSAtPiBKU0JpZ0ludCogeworICAgICAgICBBU1NFUlQo
IXguc2lnbigpKTsKKyAgICAgICAgQVNTRVJUKHkuc2lnbigpKTsKKyAgICAgICAgSlNCaWdJbnQq
IHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgcmVzdWx0TGVuZ3RoKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICAgICAg
cmVzdWx0ID0gYWJzb2x1dGVYb3Iodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIHgpOwor
ICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShn
bG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25l
ZCk7CisgICAgfTsKICAgICAKICAgICAvLyBBc3N1bWUgdGhhdCB4IGlzIHRoZSBwb3NpdGl2ZSBC
aWdJbnQuCi0gICAgaWYgKHgtPnNpZ24oKSkKLSAgICAgICAgc3RkOjpzd2FwKHgsIHkpOwotICAg
IAotICAgIC8vIHggXiAoLXkpID09IHggXiB+KHktMSkgPT0gfih4IF4gKHktMSkpID09IC0oKHgg
XiAoeS0xKSkgKyAxKQotICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9i
YWxPYmplY3QsIHksIHJlc3VsdExlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CisgICAgaWYgKHguc2lnbigpKQorICAgICAgICByZXR1cm4gY29tcHV0ZVJl
c3VsdCh5LCB4KTsKKyAgICByZXR1cm4gY29tcHV0ZVJlc3VsdCh4LCB5KTsKK30KIAotICAgIHJl
c3VsdCA9IGFic29sdXRlWG9yKHZtLCByZXN1bHQsIHgpOwotICAgIHNjb3BlLnJlbGVhc2UoKTsK
LSAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIFNpZ25PcHRp
b246OlNpZ25lZCk7CitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4g
dHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZVhvckltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmln
SW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJ
bnQ6OmJpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgs
IGludDMyX3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZVhv
ckltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBs
IHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRy
eUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VYb3JJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJ
bnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOwogfQogCi1KU0JpZ0ludCogSlNC
aWdJbnQ6OmxlZnRTaGlmdEhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBl
bmFtZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hp
ZnRJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHkpCiB7Ci0gICAgaWYgKHktPmlzWmVybygpIHx8IHgtPmlzWmVybygpKQorICAgIGlm
ICh4LmlzWmVybygpIHx8IHkuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiB4OwogCi0gICAgaWYg
KHktPnNpZ24oKSkKKyAgICBpZiAoeS5zaWduKCkpCiAgICAgICAgIHJldHVybiByaWdodFNoaWZ0
QnlBYnNvbHV0ZShnbG9iYWxPYmplY3QsIHgsIHkpOwogCiAgICAgcmV0dXJuIGxlZnRTaGlmdEJ5
QWJzb2x1dGUoZ2xvYmFsT2JqZWN0LCB4LCB5KTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50Ojpz
aWduZWRSaWdodFNoaWZ0SGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0lu
dCogeCwgSlNCaWdJbnQqIHkpCitKU1ZhbHVlIEpTQmlnSW50OjpsZWZ0U2hpZnQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewotICAgIGlm
ICh5LT5pc1plcm8oKSB8fCB4LT5pc1plcm8oKSkKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmln
SW50MzIobGVmdFNoaWZ0SW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBI
ZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6bGVmdFNoaWZ0KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7Cisg
ICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGxlZnRTaGlmdEltcGwoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1Zh
bHVlIEpTQmlnSW50OjpsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50
MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
bGVmdFNoaWZ0SW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50SW1wbCB7IHggfSwgSGVhcEJp
Z0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmxlZnRTaGlmdFNsb3coSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCit7CisgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGxlZnRTaGlmdEltcGwoZ2xvYmFsT2JqZWN0LCBJ
bnQzMkJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJ
bnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnRJbXBsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCit7CisgICAg
aWYgKHguaXNaZXJvKCkgfHwgeS5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHg7CiAKLSAgICBp
ZiAoeS0+c2lnbigpKQorICAgIGlmICh5LnNpZ24oKSkKICAgICAgICAgcmV0dXJuIGxlZnRTaGlm
dEJ5QWJzb2x1dGUoZ2xvYmFsT2JqZWN0LCB4LCB5KTsKIAogICAgIHJldHVybiByaWdodFNoaWZ0
QnlBYnNvbHV0ZShnbG9iYWxPYmplY3QsIHgsIHkpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6
OmJpdHdpc2VOb3RIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
KQorSlNWYWx1ZSBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNv
bnZlcnRUb0JpZ0ludDMyKHNpZ25lZFJpZ2h0U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJp
Z0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmln
SW50OjpzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmln
SW50KiB4LCBpbnQzMl90IHkpCiB7Ci0gICAgaWYgKHgtPnNpZ24oKSkgeworICAgIHJldHVybiB0
cnlDb252ZXJ0VG9CaWdJbnQzMihzaWduZWRSaWdodFNoaWZ0SW1wbChnbG9iYWxPYmplY3QsIEhl
YXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUg
SlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50
MzIoc2lnbmVkUmlnaHRTaGlmdEltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4
IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VOb3RJbXBsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKK3sKKyAgICBpZiAoeC5z
aWduKCkpIHsKICAgICAgICAgLy8gfigteCkgPT0gfih+KHgtMSkpID09IHgtMQotICAgICAgICBy
ZXR1cm4gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4LT5sZW5ndGgoKSk7CisgICAg
ICAgIHJldHVybiBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHgubGVuZ3RoKCkpOwog
ICAgIH0gCiAgICAgLy8gfnggPT0gLXgtMSA9PSAtKHgrMSkKICAgICByZXR1cm4gYWJzb2x1dGVB
ZGRPbmUoZ2xvYmFsT2JqZWN0LCB4LCBTaWduT3B0aW9uOjpTaWduZWQpOwogfQogCitKU1ZhbHVl
IEpTQmlnSW50OjpiaXR3aXNlTm90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmln
SW50KiB4KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlTm90SW1w
bChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7Cit9CisKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogI2RlZmluZSBIQVZFX1RXT19ESUdJVCAxCiB0eXBlZGVmIHVpbnQ2NF90IFR3
b0RpZ2l0OwpAQCAtODExLDE1ICsxMDk4LDE2IEBAIGlubGluZSBKU0JpZ0ludDo6RGlnaXQgSlNC
aWdJbnQ6OmRpZ2l0RGkKIAogLy8gTXVsdGlwbGllcyB7c291cmNlfSB3aXRoIHtmYWN0b3J9IGFu
ZCBhZGRzIHtzdW1tYW5kfSB0byB0aGUgcmVzdWx0LgogLy8ge3Jlc3VsdH0gYW5kIHtzb3VyY2V9
IG1heSBiZSB0aGUgc2FtZSBCaWdJbnQgZm9yIGlucGxhY2UgbW9kaWZpY2F0aW9uLgotdm9pZCBK
U0JpZ0ludDo6aW50ZXJuYWxNdWx0aXBseUFkZChKU0JpZ0ludCogc291cmNlLCBEaWdpdCBmYWN0
b3IsIERpZ2l0IHN1bW1hbmQsIHVuc2lnbmVkIG4sIEpTQmlnSW50KiByZXN1bHQpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK3ZvaWQgSlNCaWdJbnQ6OmludGVybmFsTXVsdGlwbHlB
ZGQoQmlnSW50SW1wbCBzb3VyY2UsIERpZ2l0IGZhY3RvciwgRGlnaXQgc3VtbWFuZCwgdW5zaWdu
ZWQgbiwgSlNCaWdJbnQqIHJlc3VsdCkKIHsKLSAgICBBU1NFUlQoc291cmNlLT5sZW5ndGgoKSA+
PSBuKTsKKyAgICBBU1NFUlQoc291cmNlLmxlbmd0aCgpID49IG4pOwogICAgIEFTU0VSVChyZXN1
bHQtPmxlbmd0aCgpID49IG4pOwogCiAgICAgRGlnaXQgY2FycnkgPSBzdW1tYW5kOwogICAgIERp
Z2l0IGhpZ2ggPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAg
ICAgICAgRGlnaXQgY3VycmVudCA9IHNvdXJjZS0+ZGlnaXQoaSk7CisgICAgICAgIERpZ2l0IGN1
cnJlbnQgPSBzb3VyY2UuZGlnaXQoaSk7CiAgICAgICAgIERpZ2l0IG5ld0NhcnJ5ID0gMDsKIAog
ICAgICAgICAvLyBDb21wdXRlIHRoaXMgcm91bmQncyBtdWx0aXBsaWNhdGlvbi4KQEAgLTg1MCwx
NSArMTEzOCwxNiBAQCB2b2lkIEpTQmlnSW50OjppbnRlcm5hbE11bHRpcGx5QWRkKEpTQmlnCiAv
LyB7YWNjdW11bGF0b3J9LCBzdGFydGluZyBhdCB7YWNjdW11bGF0b3JJbmRleH0gZm9yIHRoZSBs
ZWFzdC1zaWduaWZpY2FudAogLy8gZGlnaXQuCiAvLyBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQg
e2FjY3VtdWxhdG9yfSBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHJlc3VsdC4KLXZvaWQgSlNC
aWdJbnQ6Om11bHRpcGx5QWNjdW11bGF0ZShKU0JpZ0ludCogbXVsdGlwbGljYW5kLCBEaWdpdCBt
dWx0aXBsaWVyLCBKU0JpZ0ludCogYWNjdW11bGF0b3IsIHVuc2lnbmVkIGFjY3VtdWxhdG9ySW5k
ZXgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK3ZvaWQgSlNCaWdJbnQ6Om11bHRp
cGx5QWNjdW11bGF0ZShCaWdJbnRJbXBsIG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwg
SlNCaWdJbnQqIGFjY3VtdWxhdG9yLCB1bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KQogewotICAg
IEFTU0VSVChhY2N1bXVsYXRvci0+bGVuZ3RoKCkgPiBtdWx0aXBsaWNhbmQtPmxlbmd0aCgpICsg
YWNjdW11bGF0b3JJbmRleCk7CisgICAgQVNTRVJUKGFjY3VtdWxhdG9yLT5sZW5ndGgoKSA+IG11
bHRpcGxpY2FuZC5sZW5ndGgoKSArIGFjY3VtdWxhdG9ySW5kZXgpOwogICAgIGlmICghbXVsdGlw
bGllcikKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIERpZ2l0IGNhcnJ5ID0gMDsKICAgICBE
aWdpdCBoaWdoID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbXVsdGlwbGljYW5k
LT5sZW5ndGgoKTsgaSsrLCBhY2N1bXVsYXRvckluZGV4KyspIHsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbXVsdGlwbGljYW5kLmxlbmd0aCgpOyBpKyssIGFjY3VtdWxhdG9ySW5kZXgr
KykgewogICAgICAgICBEaWdpdCBhY2MgPSBhY2N1bXVsYXRvci0+ZGlnaXQoYWNjdW11bGF0b3JJ
bmRleCk7CiAgICAgICAgIERpZ2l0IG5ld0NhcnJ5ID0gMDsKICAgICAgICAgCkBAIC04NjcsNyAr
MTE1Niw3IEBAIHZvaWQgSlNCaWdJbnQ6Om11bHRpcGx5QWNjdW11bGF0ZShKU0JpZ0kKICAgICAg
ICAgYWNjID0gZGlnaXRBZGQoYWNjLCBjYXJyeSwgbmV3Q2FycnkpOwogICAgICAgICAKICAgICAg
ICAgLy8gQ29tcHV0ZSB0aGlzIHJvdW5kJ3MgbXVsdGlwbGljYXRpb24uCi0gICAgICAgIERpZ2l0
IG11bHRpcGxpY2FuZERpZ2l0ID0gbXVsdGlwbGljYW5kLT5kaWdpdChpKTsKKyAgICAgICAgRGln
aXQgbXVsdGlwbGljYW5kRGlnaXQgPSBtdWx0aXBsaWNhbmQuZGlnaXQoaSk7CiAgICAgICAgIERp
Z2l0IGxvdyA9IGRpZ2l0TXVsKG11bHRpcGxpZXIsIG11bHRpcGxpY2FuZERpZ2l0LCBoaWdoKTsK
ICAgICAgICAgYWNjID0gZGlnaXRBZGQoYWNjLCBsb3csIG5ld0NhcnJ5KTsKICAgICAgICAgCkBA
IC05MTIsNyArMTIwMSw3IEBAIEpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpTQmlnSW50Ojpj
b20KICAgICBpZiAoeFNpZ24gIT0geS0+c2lnbigpKQogICAgICAgICByZXR1cm4geFNpZ24gPyBD
b21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFu
OwogCi0gICAgQ29tcGFyaXNvblJlc3VsdCByZXN1bHQgPSBhYnNvbHV0ZUNvbXBhcmUoeCwgeSk7
CisgICAgQ29tcGFyaXNvblJlc3VsdCByZXN1bHQgPSBhYnNvbHV0ZUNvbXBhcmUoSGVhcEJpZ0lu
dEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KTsKICAgICBpZiAocmVzdWx0ID09IENv
bXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFuKQogICAgICAgICByZXR1cm4geFNpZ24gPyBDb21w
YXJpc29uUmVzdWx0OjpMZXNzVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFuOwog
ICAgIGlmIChyZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4pCkBAIC05MjEsNTYg
KzEyMTAsNTggQEAgSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmNvbQogICAg
IHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpFcXVhbDsgCiB9CiAKLWlubGluZSBKU0JpZ0ludDo6
Q29tcGFyaXNvblJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVDb21wYXJlKEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmln
SW50SW1wbDI+CitpbmxpbmUgSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmFi
c29sdXRlQ29tcGFyZShCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAgIEFTU0VS
VCgheC0+bGVuZ3RoKCkgfHwgeC0+ZGlnaXQoeC0+bGVuZ3RoKCkgLSAxKSk7Ci0gICAgQVNTRVJU
KCF5LT5sZW5ndGgoKSB8fCB5LT5kaWdpdCh5LT5sZW5ndGgoKSAtIDEpKTsKKyAgICBBU1NFUlQo
IXgubGVuZ3RoKCkgfHwgeC5kaWdpdCh4Lmxlbmd0aCgpIC0gMSkpOworICAgIEFTU0VSVCgheS5s
ZW5ndGgoKSB8fCB5LmRpZ2l0KHkubGVuZ3RoKCkgLSAxKSk7CiAKLSAgICBpbnQgZGlmZiA9IHgt
Pmxlbmd0aCgpIC0geS0+bGVuZ3RoKCk7CisgICAgaW50IGRpZmYgPSB4Lmxlbmd0aCgpIC0geS5s
ZW5ndGgoKTsKICAgICBpZiAoZGlmZikKICAgICAgICAgcmV0dXJuIGRpZmYgPCAwID8gQ29tcGFy
aXNvblJlc3VsdDo6TGVzc1RoYW4gOiBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbjsKIAot
ICAgIGludCBpID0geC0+bGVuZ3RoKCkgLSAxOwotICAgIHdoaWxlIChpID49IDAgJiYgeC0+ZGln
aXQoaSkgPT0geS0+ZGlnaXQoaSkpCisgICAgaW50IGkgPSB4Lmxlbmd0aCgpIC0gMTsKKyAgICB3
aGlsZSAoaSA+PSAwICYmIHguZGlnaXQoaSkgPT0geS5kaWdpdChpKSkKICAgICAgICAgaS0tOwog
CiAgICAgaWYgKGkgPCAwKQogICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWw7
CiAKLSAgICByZXR1cm4geC0+ZGlnaXQoaSkgPiB5LT5kaWdpdChpKSA/IENvbXBhcmlzb25SZXN1
bHQ6OkdyZWF0ZXJUaGFuIDogQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW47CisgICAgcmV0dXJu
IHguZGlnaXQoaSkgPiB5LmRpZ2l0KGkpID8gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW4g
OiBDb21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbjsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50Ojph
YnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6
YWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwg
QmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKIAotICAgIGlmICh4LT5sZW5ndGgoKSA8IHktPmxlbmd0aCgpKQorICAgIGlm
ICh4Lmxlbmd0aCgpIDwgeS5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkKGds
b2JhbE9iamVjdCwgeSwgeCwgcmVzdWx0U2lnbik7CiAKLSAgICBpZiAoeC0+aXNaZXJvKCkpIHsK
LSAgICAgICAgQVNTRVJUKHktPmlzWmVybygpKTsKKyAgICBpZiAoeC5pc1plcm8oKSkgeworICAg
ICAgICBBU1NFUlQoeS5pc1plcm8oKSk7CiAgICAgICAgIHJldHVybiB4OwogICAgIH0KIAotICAg
IGlmICh5LT5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdFNpZ24gPT0geC0+c2lnbigp
ID8geCA6IHVuYXJ5TWludXNIZWFwKHZtLCB4KTsKKyAgICBpZiAoeS5pc1plcm8oKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdFNpZ24gPT0geC5zaWduKCkgPyB4LnRvSGVhcEJpZ0ludCh2bSkgOiB1
bmFyeU1pbnVzSW1wbCh2bSwgeCkucGF5bG9hZC5hc0hlYXBCaWdJbnQoKTsKIAotICAgIEpTQmln
SW50KiByZXN1bHQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3Qs
IHgtPmxlbmd0aCgpICsgMSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlD
cmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSArIDEpOwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBEaWdpdCBjYXJyeSA9IDA7CiAg
ICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgZm9yICg7IGkgPCB5LT5sZW5ndGgoKTsgaSsrKSB7Cisg
ICAgZm9yICg7IGkgPCB5Lmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgRGlnaXQgbmV3Q2Fycnkg
PSAwOwotICAgICAgICBEaWdpdCBzdW0gPSBkaWdpdEFkZCh4LT5kaWdpdChpKSwgeS0+ZGlnaXQo
aSksIG5ld0NhcnJ5KTsKKyAgICAgICAgRGlnaXQgc3VtID0gZGlnaXRBZGQoeC5kaWdpdChpKSwg
eS5kaWdpdChpKSwgbmV3Q2FycnkpOwogICAgICAgICBzdW0gPSBkaWdpdEFkZChzdW0sIGNhcnJ5
LCBuZXdDYXJyeSk7CiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgc3VtKTsKICAgICAgICAg
Y2FycnkgPSBuZXdDYXJyeTsKICAgICB9CiAKLSAgICBmb3IgKDsgaSA8IHgtPmxlbmd0aCgpOyBp
KyspIHsKKyAgICBmb3IgKDsgaSA8IHgubGVuZ3RoKCk7IGkrKykgewogICAgICAgICBEaWdpdCBu
ZXdDYXJyeSA9IDA7Ci0gICAgICAgIERpZ2l0IHN1bSA9IGRpZ2l0QWRkKHgtPmRpZ2l0KGkpLCBj
YXJyeSwgbmV3Q2FycnkpOworICAgICAgICBEaWdpdCBzdW0gPSBkaWdpdEFkZCh4LmRpZ2l0KGkp
LCBjYXJyeSwgbmV3Q2FycnkpOwogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHN1bSk7CiAg
ICAgICAgIGNhcnJ5ID0gbmV3Q2Fycnk7CiAgICAgfQpAQCAtOTgxLDM4ICsxMjcyLDM5IEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWwKICAgICByZXR1cm4gcmVzdWx0
LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZN
JiB2bSwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5LCBib29sIHJlc3VsdFNpZ24pCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQ6
OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwg
QmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKQogewogICAgIENvbXBhcmlzb25SZXN1bHQg
Y29tcGFyaXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKLSAgICBBU1NFUlQoeC0+
bGVuZ3RoKCkgPj0geS0+bGVuZ3RoKCkpOworICAgIEFTU0VSVCh4Lmxlbmd0aCgpID49IHkubGVu
Z3RoKCkpOwogICAgIEFTU0VSVChjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6
OkdyZWF0ZXJUaGFuIHx8IGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6RXF1
YWwpOwogCi0gICAgaWYgKHgtPmlzWmVybygpKSB7Ci0gICAgICAgIEFTU0VSVCh5LT5pc1plcm8o
KSk7CisgICAgaWYgKHguaXNaZXJvKCkpIHsKKyAgICAgICAgQVNTRVJUKHkuaXNaZXJvKCkpOwog
ICAgICAgICByZXR1cm4geDsKICAgICB9CiAKLSAgICBpZiAoeS0+aXNaZXJvKCkpCi0gICAgICAg
IHJldHVybiByZXN1bHRTaWduID09IHgtPnNpZ24oKSA/IHggOiBKU0JpZ0ludDo6dW5hcnlNaW51
c0hlYXAodm0sIHgpOworICAgIGlmICh5LmlzWmVybygpKQorICAgICAgICByZXR1cm4gcmVzdWx0
U2lnbiA9PSB4LnNpZ24oKSA/IEltcGxSZXN1bHQgeyB4IH0gOiBKU0JpZ0ludDo6dW5hcnlNaW51
c0ltcGwodm0sIHgpOwogCiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJl
c3VsdDo6RXF1YWwpCiAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlWmVybyh2bSk7CiAK
LSAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNr
ZWQodm0sIHgtPmxlbmd0aCgpKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNy
ZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIHgubGVuZ3RoKCkpOwogCiAgICAgRGlnaXQgYm9y
cm93ID0gMDsKICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHktPmxlbmd0aCgp
OyBpKyspIHsKKyAgICBmb3IgKDsgaSA8IHkubGVuZ3RoKCk7IGkrKykgewogICAgICAgICBEaWdp
dCBuZXdCb3Jyb3cgPSAwOwotICAgICAgICBEaWdpdCBkaWZmZXJlbmNlID0gZGlnaXRTdWIoeC0+
ZGlnaXQoaSksIHktPmRpZ2l0KGkpLCBuZXdCb3Jyb3cpOworICAgICAgICBEaWdpdCBkaWZmZXJl
bmNlID0gZGlnaXRTdWIoeC5kaWdpdChpKSwgeS5kaWdpdChpKSwgbmV3Qm9ycm93KTsKICAgICAg
ICAgZGlmZmVyZW5jZSA9IGRpZ2l0U3ViKGRpZmZlcmVuY2UsIGJvcnJvdywgbmV3Qm9ycm93KTsK
ICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBkaWZmZXJlbmNlKTsKICAgICAgICAgYm9ycm93
ID0gbmV3Qm9ycm93OwogICAgIH0KIAotICAgIGZvciAoOyBpIDwgeC0+bGVuZ3RoKCk7IGkrKykg
eworICAgIGZvciAoOyBpIDwgeC5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIERpZ2l0IG5ld0Jv
cnJvdyA9IDA7Ci0gICAgICAgIERpZ2l0IGRpZmZlcmVuY2UgPSBkaWdpdFN1Yih4LT5kaWdpdChp
KSwgYm9ycm93LCBuZXdCb3Jyb3cpOworICAgICAgICBEaWdpdCBkaWZmZXJlbmNlID0gZGlnaXRT
dWIoeC5kaWdpdChpKSwgYm9ycm93LCBuZXdCb3Jyb3cpOwogICAgICAgICByZXN1bHQtPnNldERp
Z2l0KGksIGRpZmZlcmVuY2UpOwogICAgICAgICBib3Jyb3cgPSBuZXdCb3Jyb3c7CiAgICAgfQpA
QCAtMTAyOSwzMCArMTMyMSwzMSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZN
JiB2bSwgCiAvLyBhbGxvY2F0ZWQgZm9yIGl0OyBvdGhlcndpc2UgdGhlIGNhbGxlciBtdXN0IGVu
c3VyZSB0aGF0IGl0IGlzIGJpZyBlbm91Z2guCiAvLyB7cXVvdGllbnR9IGNhbiBiZSB0aGUgc2Ft
ZSBhcyB7eH0gZm9yIGFuIGluLXBsYWNlIGRpdmlzaW9uLiB7cXVvdGllbnR9IGNhbgogLy8gYWxz
byBiZSBudWxscHRyIGlmIHRoZSBjYWxsZXIgaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSByZW1h
aW5kZXIuCi12b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mIHZt
LCBKU0JpZ0ludCogeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgRGlnaXQm
IHJlbWFpbmRlcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgordm9pZCBKU0JpZ0lu
dDo6YWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKFZNJiB2bSwgQmlnSW50SW1wbCB4LCBEaWdp
dCBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKQogewogICAg
IEFTU0VSVChkaXZpc29yKTsKIAotICAgIEFTU0VSVCgheC0+aXNaZXJvKCkpOworICAgIEFTU0VS
VCgheC5pc1plcm8oKSk7CiAgICAgcmVtYWluZGVyID0gMDsKICAgICBpZiAoZGl2aXNvciA9PSAx
KSB7Ci0gICAgICAgIGlmIChxdW90aWVudCAhPSBudWxscHRyKQotICAgICAgICAgICAgKnF1b3Rp
ZW50ID0geDsKKyAgICAgICAgaWYgKHF1b3RpZW50KQorICAgICAgICAgICAgKnF1b3RpZW50ID0g
eC50b0hlYXBCaWdJbnQodm0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0geC0+bGVuZ3RoKCk7Ci0gICAgaWYgKHF1b3RpZW50ICE9IG51bGxwdHIpIHsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSB4Lmxlbmd0aCgpOworICAgIGlmIChxdW90aWVudCkgewog
ICAgICAgICBpZiAoKnF1b3RpZW50ID09IG51bGxwdHIpCiAgICAgICAgICAgICAqcXVvdGllbnQg
PSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKIAogICAg
ICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAg
IERpZ2l0IHEgPSBkaWdpdERpdihyZW1haW5kZXIsIHgtPmRpZ2l0KGkpLCBkaXZpc29yLCByZW1h
aW5kZXIpOworICAgICAgICAgICAgRGlnaXQgcSA9IGRpZ2l0RGl2KHJlbWFpbmRlciwgeC5kaWdp
dChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKICAgICAgICAgICAgICgqcXVvdGllbnQpLT5zZXRE
aWdpdChpLCBxKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaW50IGkg
PSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkKLSAgICAgICAgICAgIGRpZ2l0RGl2KHJlbWFpbmRl
ciwgeC0+ZGlnaXQoaSksIGRpdmlzb3IsIHJlbWFpbmRlcik7CisgICAgICAgICAgICBkaWdpdERp
dihyZW1haW5kZXIsIHguZGlnaXQoaSksIGRpdmlzb3IsIHJlbWFpbmRlcik7CiAgICAgfQogfQog
CkBAIC0xMDYyLDEwICsxMzU1LDExIEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERp
Z2l0RGl2aXMKIC8vIEJvdGgge3F1b3RpZW50fSBhbmQge3JlbWFpbmRlcn0gYXJlIG9wdGlvbmFs
LCBmb3IgY2FsbGVycyB0aGF0IGFyZSBvbmx5CiAvLyBpbnRlcmVzdGVkIGluIG9uZSBvZiB0aGVt
LgogLy8gU2VlIEtudXRoLCBWb2x1bWUgMiwgc2VjdGlvbiA0LjMuMSwgQWxnb3JpdGhtIEQuCi12
b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBkaXZpZGVuZCwgSlNCaWdJbnQqIGRpdmlzb3IsIEpT
QmlnSW50KiogcXVvdGllbnQsIEpTQmlnSW50KiogcmVtYWluZGVyKQordGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGwxPgordm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2
aXNvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSBkaXZpZGVuZCwg
SlNCaWdJbnQqIGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIEpTQmlnSW50KiogcmVtYWlu
ZGVyKQogewogICAgIEFTU0VSVChkaXZpc29yLT5sZW5ndGgoKSA+PSAyKTsKLSAgICBBU1NFUlQo
ZGl2aWRlbmQtPmxlbmd0aCgpID49IGRpdmlzb3ItPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoZGl2
aWRlbmQubGVuZ3RoKCkgPj0gZGl2aXNvci0+bGVuZ3RoKCkpOwogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKQEAgLTEwNzQsNyArMTM2OCw3IEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aEJp
Z0ludERpdmkKICAgICAvLyBNYWludGFpbmluZyB0aGlzIGNvbnNpc3RlbmN5IGlzIHByb2JhYmx5
IG1vcmUgdXNlZnVsIHRoYW4gdHJ5aW5nIHRvCiAgICAgLy8gY29tZSB1cCB3aXRoIG1vcmUgZGVz
Y3JpcHRpdmUgbmFtZXMgZm9yIHRoZW0uCiAgICAgdW5zaWduZWQgbiA9IGRpdmlzb3ItPmxlbmd0
aCgpOwotICAgIHVuc2lnbmVkIG0gPSBkaXZpZGVuZC0+bGVuZ3RoKCkgLSBuOworICAgIHVuc2ln
bmVkIG0gPSBkaXZpZGVuZC5sZW5ndGgoKSAtIG47CiAgICAgCiAgICAgLy8gVGhlIHF1b3RpZW50
IHRvIGJlIGNvbXB1dGVkLgogICAgIEpTQmlnSW50KiBxID0gbnVsbHB0cjsKQEAgLTEwOTUsNyAr
MTM4OSw3IEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aEJpZ0ludERpdmkKICAgICB1
bnNpZ25lZCBzaGlmdCA9IGNseihsYXN0RGlnaXQpOwogCiAgICAgaWYgKHNoaWZ0ID4gMCkgewot
ICAgICAgICBkaXZpc29yID0gYWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KGdsb2JhbE9iamVj
dCwgZGl2aXNvciwgc2hpZnQsIExlZnRTaGlmdE1vZGU6OlNhbWVTaXplUmVzdWx0KTsKKyAgICAg
ICAgZGl2aXNvciA9IGFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weShnbG9iYWxPYmplY3QsIEhl
YXBCaWdJbnRJbXBsIHsgZGl2aXNvciB9LCBzaGlmdCwgTGVmdFNoaWZ0TW9kZTo6U2FtZVNpemVS
ZXN1bHQpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAg
IH0KIApAQCAtMTE0NCw3ICsxNDM4LDcgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRo
QmlnSW50RGl2aQogICAgICAgICAvLyBpdCBmcm9tIHRoZSBkaXZpZGVuZC4gSWYgdGhlcmUgd2Fz
ICJib3Jyb3ciLCB0aGVuIHRoZSBxdW90aWVudCBkaWdpdAogICAgICAgICAvLyB3YXMgb25lIHRv
byBoaWdoLCBzbyB3ZSBtdXN0IGNvcnJlY3QgaXQgYW5kIHVuZG8gb25lIHN1YnRyYWN0aW9uIG9m
CiAgICAgICAgIC8vIHRoZSAoc2hpZnRlZCkgZGl2aXNvci4KLSAgICAgICAgaW50ZXJuYWxNdWx0
aXBseUFkZChkaXZpc29yLCBxaGF0LCAwLCBuLCBxaGF0dik7CisgICAgICAgIGludGVybmFsTXVs
dGlwbHlBZGQoSGVhcEJpZ0ludEltcGwgeyBkaXZpc29yIH0sIHFoYXQsIDAsIG4sIHFoYXR2KTsK
ICAgICAgICAgRGlnaXQgYyA9IHUtPmFic29sdXRlSW5wbGFjZVN1YihxaGF0diwgaik7CiAgICAg
ICAgIGlmIChjKSB7CiAgICAgICAgICAgICBjID0gdS0+YWJzb2x1dGVJbnBsYWNlQWRkKGRpdmlz
b3IsIGopOwpAQCAtMTIzMCwxMiArMTUyNCwxMyBAQCB2b2lkIEpTQmlnSW50OjppbnBsYWNlUmln
aHRTaGlmdCh1bnNpZ25lCiB9CiAKIC8vIEFsd2F5cyBjb3BpZXMgdGhlIGlucHV0LCBldmVuIHdo
ZW4ge3NoaWZ0fSA9PSAwLgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFs
d2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIHVuc2ln
bmVkIHNoaWZ0LCBMZWZ0U2hpZnRNb2RlIG1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbD4KK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgdW5zaWduZWQgc2hpZnQs
IExlZnRTaGlmdE1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoc2hpZnQgPCBkaWdpdEJpdHMpOwot
ICAgIEFTU0VSVCgheC0+aXNaZXJvKCkpOworICAgIEFTU0VSVCgheC5pc1plcm8oKSk7CiAKLSAg
ICB1bnNpZ25lZCBuID0geC0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbiA9IHgubGVuZ3RoKCk7
CiAgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gbW9kZSA9PSBMZWZ0U2hpZnRNb2RlOjpBbHdh
eXNBZGRPbmVEaWdpdCA/IG4gKyAxIDogbjsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3Jl
YXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CiAgICAgaWYgKCFyZXN1
bHQpCkBAIC0xMjQzLDcgKzE1MzgsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlTGVm
dFNoaWZ0QWx3CiAKICAgICBpZiAoIXNoaWZ0KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHgtPmRpZ2l0
KGkpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChpKSk7CiAgICAg
ICAgIGlmIChtb2RlID09IExlZnRTaGlmdE1vZGU6OkFsd2F5c0FkZE9uZURpZ2l0KQogICAgICAg
ICAgICAgcmVzdWx0LT5zZXREaWdpdChuLCAwKTsKIApAQCAtMTI1Miw3ICsxNTQ3LDcgQEAgSlNC
aWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsdwogCiAgICAgRGlnaXQgY2Fycnkg
PSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgRGln
aXQgZCA9IHgtPmRpZ2l0KGkpOworICAgICAgICBEaWdpdCBkID0geC5kaWdpdChpKTsKICAgICAg
ICAgcmVzdWx0LT5zZXREaWdpdChpLCAoZCA8PCBzaGlmdCkgfCBjYXJyeSk7CiAgICAgICAgIGNh
cnJ5ID0gZCA+PiAoZGlnaXRCaXRzIC0gc2hpZnQpOwogICAgIH0KQEAgLTEyNzAsOCArMTU2NSw4
IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHcKIC8vIEhlbHBlciBm
b3IgQWJzb2x1dGV7QW5kLEFuZE5vdCxPcixYb3J9LgogLy8gUGVyZm9ybXMgdGhlIGdpdmVuIGJp
bmFyeSB7b3B9IG9uIGRpZ2l0IHBhaXJzIG9mIHt4fSBhbmQge3l9OyB3aGVuIHRoZQogLy8gZW5k
IG9mIHRoZSBzaG9ydGVyIG9mIHRoZSB0d28gaXMgcmVhY2hlZCwge2V4dHJhRGlnaXRzfSBjb25m
aWd1cmVzIGhvdwotLy8gcmVtYWluaW5nIGRpZ2l0cyBpbiB0aGUgbG9uZ2VyIGlucHV0IChpZiB7
c3ltbWV0cmljfSA9PSBTeW1tZXRyaWMsIGluCi0vLyB7eH0gb3RoZXJ3aXNlKSBhcmUgaGFuZGxl
ZDogY29waWVkIHRvIHRoZSByZXN1bHQgb3IgaWdub3JlZC4KKy8vIHJlbWFpbmluZyBkaWdpdHMg
aW4gdGhlIGxvbmdlciBpbnB1dCBhcmUgaGFuZGxlZDogY29waWVkIHRvIHRoZSByZXN1bHQKKy8v
IG9yIGlnbm9yZWQuCiAvLyBFeGFtcGxlOgogLy8gICAgICAgeTogICAgICAgICAgICAgWyB5MiBd
WyB5MSBdWyB5MCBdCiAvLyAgICAgICB4OiAgICAgICBbIHgzIF1bIHgyIF1bIHgxIF1bIHgwIF0K
QEAgLTEyODAsMzAgKzE1NzUsMzQgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRT
aGlmdEFsdwogLy8gICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgfCAgICAgfAogLy8gICAg
ICAgICAgICAgICAgICAgdiAgICAgdiAgICAgdiAgICAgdgogLy8gcmVzdWx0OiBbICAwIF1bIHgz
IF1bIHIyIF1bIHIxIF1bIHIwIF0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpdHdpc2VPcD4KLWlubGlu
ZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQml0d2lzZU9wKFZNJiB2bSwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nIGV4dHJhRGlnaXRzLCBTeW1tZXRy
aWNPcCBzeW1tZXRyaWMsIEJpdHdpc2VPcCYmIG9wKQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMiwgdHlwZW5hbWUgQml0d2lzZU9wPgoraW5saW5l
IEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoVk0mIHZtLCBCaWdJbnRJbXBs
MSB4LCBCaWdJbnRJbXBsMiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nIGV4dHJhRGlnaXRzLCBCaXR3
aXNlT3AmJiBvcCkKIHsKLSAgICB1bnNpZ25lZCB4TGVuZ3RoID0geC0+bGVuZ3RoKCk7Ci0gICAg
dW5zaWduZWQgeUxlbmd0aCA9IHktPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4
Lmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOwogICAgIHVuc2ln
bmVkIG51bVBhaXJzID0geUxlbmd0aDsKKyAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSB4TGVuZ3Ro
OwogICAgIGlmICh4TGVuZ3RoIDwgeUxlbmd0aCkgewogICAgICAgICBudW1QYWlycyA9IHhMZW5n
dGg7Ci0gICAgICAgIGlmIChzeW1tZXRyaWMgPT0gU3ltbWV0cmljT3A6OlN5bW1ldHJpYykgewot
ICAgICAgICAgICAgc3RkOjpzd2FwKHgsIHkpOwotICAgICAgICAgICAgc3RkOjpzd2FwKHhMZW5n
dGgsIHlMZW5ndGgpOwotICAgICAgICB9CisgICAgICAgIG1heExlbmd0aCA9IHlMZW5ndGg7CiAg
ICAgfQogCiAgICAgQVNTRVJUKG51bVBhaXJzID09IHN0ZDo6bWluKHhMZW5ndGgsIHlMZW5ndGgp
KTsKLSAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBleHRyYURpZ2l0cyA9PSBFeHRyYURpZ2l0
c0hhbmRsaW5nOjpDb3B5ID8geExlbmd0aCA6IG51bVBhaXJzOworICAgIEFTU0VSVChtYXhMZW5n
dGggPT0gc3RkOjptYXgoeExlbmd0aCwgeUxlbmd0aCkpOworICAgIHVuc2lnbmVkIHJlc3VsdExl
bmd0aCA9IGV4dHJhRGlnaXRzID09IEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHkgPyBtYXhMZW5n
dGggOiBudW1QYWlyczsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVu
Y2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3Ig
KDsgaSA8IG51bVBhaXJzOyBpKyspCi0gICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgb3AoeC0+
ZGlnaXQoaSksIHktPmRpZ2l0KGkpKSk7CisgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgb3Ao
eC5kaWdpdChpKSwgeS5kaWdpdChpKSkpOwogCiAgICAgaWYgKGV4dHJhRGlnaXRzID09IEV4dHJh
RGlnaXRzSGFuZGxpbmc6OkNvcHkpIHsKLSAgICAgICAgZm9yICg7IGkgPCB4TGVuZ3RoOyBpKysp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHgtPmRpZ2l0KGkpKTsKKyAgICAgICAg
aWYgKHhMZW5ndGggPiB5TGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKDsgaSA8IHhMZW5ndGg7
IGkrKykKKyAgICAgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICg7IGkgPCB5TGVuZ3RoOyBpKyspCisg
ICAgICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB5LmRpZ2l0KGkpKTsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIGZvciAoOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspCkBAIC0xMzEyLDQ2
ICsxNjExLDYxIEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQml0d2kKICAg
ICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6
OmFic29sdXRlQW5kKFZNJiB2bSwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQordGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50KiBK
U0JpZ0ludDo6YWJzb2x1dGVBbmQoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5
KQogewogICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShEaWdpdCBhLCBEaWdpdCBiKSB7CiAg
ICAgICAgIHJldHVybiBhICYgYjsKICAgICB9OwotICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VP
cCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6U2tpcCwgU3ltbWV0cmljT3A6OlN5bW1l
dHJpYywgZGlnaXRPcGVyYXRpb24pOworICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcCh2bSwg
eCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6U2tpcCwgZGlnaXRPcGVyYXRpb24pOwogfQogCi1K
U0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlT3IoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyPgorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZU9yKFZNJiB2bSwgQmlnSW50SW1wbDEg
eCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBhdXRvIGRpZ2l0T3BlcmF0aW9uID0gW10oRGlnaXQg
YSwgRGlnaXQgYikgewogICAgICAgICByZXR1cm4gYSB8IGI7CiAgICAgfTsKLSAgICByZXR1cm4g
YWJzb2x1dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIFN5
bW1ldHJpY09wOjpTeW1tZXRyaWMsIGRpZ2l0T3BlcmF0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1
dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIGRpZ2l0T3Bl
cmF0aW9uKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFuZE5vdChWTSYgdm0s
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5k
Tm90KFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKLSAgICBhdXRvIGRp
Z2l0T3BlcmF0aW9uID0gW10oRGlnaXQgYSwgRGlnaXQgYikgewotICAgICAgICByZXR1cm4gYSAm
IH5iOwotICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRy
YURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBTeW1tZXRyaWNPcDo6Tm90U3ltbWV0cmljLCBkaWdpdE9w
ZXJhdGlvbik7CisgICAgLy8geCAmIH55CisKKyAgICB1bnNpZ25lZCB4TGVuZ3RoID0geC5sZW5n
dGgoKTsKKyAgICB1bnNpZ25lZCB5TGVuZ3RoID0geS5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBy
ZXN1bHRMZW5ndGggPSB4TGVuZ3RoOworCisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdp
dGhMZW5ndGhVbmNoZWNrZWQodm0sIHJlc3VsdExlbmd0aCk7CisgICAgdW5zaWduZWQgaSA9IDA7
CisgICAgZm9yICg7IGkgPCBzdGQ6Om1pbih4TGVuZ3RoLCB5TGVuZ3RoKTsgaSsrKQorICAgICAg
ICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkgJiB+eS5kaWdpdChpKSk7CisgICAgZm9y
ICg7IGkgPCByZXN1bHRMZW5ndGg7ICsraSkKKyAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB4
LmRpZ2l0KGkpKTsKKworICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CiB9CiAKLUpT
QmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVYb3IoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyPgorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZVhvcihWTSYgdm0sIEJpZ0ludEltcGwx
IHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0
IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEgXiBiOwogICAgIH07Ci0gICAgcmV0dXJu
IGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBT
eW1tZXRyaWNPcDo6U3ltbWV0cmljLCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29s
dXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBkaWdpdE9w
ZXJhdGlvbik7CiB9CiAgICAgCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBTaWduT3B0aW9uIHNpZ25P
cHRpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK0pTQmlnSW50KiBKU0JpZ0lu
dDo6YWJzb2x1dGVBZGRPbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1w
bCB4LCBTaWduT3B0aW9uIHNpZ25PcHRpb24pCiB7Ci0gICAgdW5zaWduZWQgaW5wdXRMZW5ndGgg
PSB4LT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9IHgubGVuZ3RoKCk7CiAg
ICAgLy8gVGhlIGFkZGl0aW9uIHdpbGwgb3ZlcmZsb3cgaW50byBhIG5ldyBkaWdpdCBpZiBhbGwg
ZXhpc3RpbmcgZGlnaXRzIGFyZQogICAgIC8vIGF0IG1heGltdW0uCiAgICAgYm9vbCB3aWxsT3Zl
cmZsb3cgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPERpZ2l0Pjo6bWF4KCkgIT0g
eC0+ZGlnaXQoaSkpIHsKKyAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8RGlnaXQ+Ojpt
YXgoKSAhPSB4LmRpZ2l0KGkpKSB7CiAgICAgICAgICAgICB3aWxsT3ZlcmZsb3cgPSBmYWxzZTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMzY1LDcgKzE2NzksNyBAQCBKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvCiAgICAgRGlnaXQgY2FycnkgPSAx
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7CiAgICAg
ICAgIERpZ2l0IG5ld0NhcnJ5ID0gMDsKLSAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBkaWdp
dEFkZCh4LT5kaWdpdChpKSwgY2FycnksIG5ld0NhcnJ5KSk7CisgICAgICAgIHJlc3VsdC0+c2V0
RGlnaXQoaSwgZGlnaXRBZGQoeC5kaWdpdChpKSwgY2FycnksIG5ld0NhcnJ5KSk7CiAgICAgICAg
IGNhcnJ5ID0gbmV3Q2Fycnk7CiAgICAgfQogICAgIGlmIChyZXN1bHRMZW5ndGggPiBpbnB1dExl
bmd0aCkKQEAgLTEzNzcsMjEgKzE2OTEsMjIgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0
ZUFkZE9uZShKU0dsbwogICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3Qt
PnZtKCkpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCB1bnNpZ25lZCByZXN1bHRMZW5ndGgp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJz
b2x1dGVTdWJPbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1
bnNpZ25lZCByZXN1bHRMZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCF4LT5pc1plcm8oKSk7Ci0gICAg
QVNTRVJUKHJlc3VsdExlbmd0aCA+PSB4LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCF4LmlzWmVy
bygpKTsKKyAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID49IHgubGVuZ3RoKCkpOwogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChn
bG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB4LT5sZW5ndGgoKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIERpZ2l0IGJvcnJvdyA9IDE7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIERpZ2l0IG5l
d0JvcnJvdyA9IDA7Ci0gICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgZGlnaXRTdWIoeC0+ZGln
aXQoaSksIGJvcnJvdywgbmV3Qm9ycm93KSk7CisgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwg
ZGlnaXRTdWIoeC5kaWdpdChpKSwgYm9ycm93LCBuZXdCb3Jyb3cpKTsKICAgICAgICAgYm9ycm93
ID0gbmV3Qm9ycm93OwogICAgIH0KICAgICBBU1NFUlQoIWJvcnJvdyk7CkBAIC0xNDAxLDcgKzE3
MTYsOCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpTR2xvCiAgICAgcmV0
dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0
U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6bGVmdFNoaWZ0QnlB
YnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJ
bnRJbXBsMiB5KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNDE1LDggKzE3MzEsOCBAQCBK
U0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlmdEJ5QWJzb2x1dGUoCiAgICAgRGlnaXQgc2hpZnQg
PSAqb3B0aW9uYWxTaGlmdDsKICAgICB1bnNpZ25lZCBkaWdpdFNoaWZ0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHNoaWZ0IC8gZGlnaXRCaXRzKTsKICAgICB1bnNpZ25lZCBiaXRzU2hpZnQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2hpZnQgJSBkaWdpdEJpdHMpOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHgtPmxlbmd0aCgpOwotICAgIGJvb2wgZ3JvdyA9IGJpdHNTaGlmdCAmJiAoeC0+ZGln
aXQobGVuZ3RoIC0gMSkgPj4gKGRpZ2l0Qml0cyAtIGJpdHNTaGlmdCkpOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHgubGVuZ3RoKCk7CisgICAgYm9vbCBncm93ID0gYml0c1NoaWZ0ICYmICh4LmRp
Z2l0KGxlbmd0aCAtIDEpID4+IChkaWdpdEJpdHMgLSBiaXRzU2hpZnQpKTsKICAgICBpbnQgcmVz
dWx0TGVuZ3RoID0gbGVuZ3RoICsgZGlnaXRTaGlmdCArIGdyb3c7CiAgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihyZXN1bHRMZW5ndGgpID4gbWF4TGVuZ3RoKSB7CiAgICAgICAgIHRocm93
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRo
aXMgb3BlcmF0aW9uIGlzIHRvbyBiaWciX3MpOwpAQCAtMTQzMSwxNCArMTc0NywxNCBAQCBKU0Jp
Z0ludCogSlNCaWdJbnQ6OmxlZnRTaGlmdEJ5QWJzb2x1dGUoCiAgICAgICAgICAgICByZXN1bHQt
PnNldERpZ2l0KGksIDB1bCk7CiAKICAgICAgICAgZm9yICg7IGkgPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmVzdWx0TGVuZ3RoKTsgaSsrKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChp
LCB4LT5kaWdpdChpIC0gZGlnaXRTaGlmdCkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdp
dChpLCB4LmRpZ2l0KGkgLSBkaWdpdFNoaWZ0KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRGln
aXQgY2FycnkgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGlnaXRTaGlm
dDsgaSsrKQogICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCAwdWwpOwogCiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgRGln
aXQgZCA9IHgtPmRpZ2l0KGkpOworICAgICAgICAgICAgRGlnaXQgZCA9IHguZGlnaXQoaSk7CiAg
ICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGkgKyBkaWdpdFNoaWZ0LCAoZCA8PCBiaXRzU2hp
ZnQpIHwgY2FycnkpOwogICAgICAgICAgICAgY2FycnkgPSBkID4+IChkaWdpdEJpdHMgLSBiaXRz
U2hpZnQpOwogICAgICAgICB9CkBAIC0xNDQ5LDE1ICsxNzY1LDE2IEBAIEpTQmlnSW50KiBKU0Jp
Z0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZSgKICAgICAgICAgICAgIEFTU0VSVCghY2FycnkpOwog
ICAgIH0KIAotICAgIHJlc3VsdC0+c2V0U2lnbih4LT5zaWduKCkpOworICAgIHJlc3VsdC0+c2V0
U2lnbih4LnNpZ24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAot
SlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQ6OkltcGxSZXN1
bHQgSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgtPmxlbmd0aCgpOwotICAg
IGJvb2wgc2lnbiA9IHgtPnNpZ24oKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB4Lmxlbmd0aCgp
OworICAgIGJvb2wgc2lnbiA9IHguc2lnbigpOwogICAgIGF1dG8gb3B0aW9uYWxTaGlmdCA9IHRv
U2hpZnRBbW91bnQoeSk7CiAgICAgaWYgKCFvcHRpb25hbFNoaWZ0KQogICAgICAgICByZXR1cm4g
cmlnaHRTaGlmdEJ5TWF4aW11bSh2bSwgc2lnbik7CkBAIC0xNDc2LDExICsxNzkzLDExIEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUKICAgICBib29sIG11c3RSb3Vu
ZERvd24gPSBmYWxzZTsKICAgICBpZiAoc2lnbikgewogICAgICAgICBjb25zdCBEaWdpdCBtYXNr
ID0gKHN0YXRpY19jYXN0PERpZ2l0PigxKSA8PCBiaXRzU2hpZnQpIC0gMTsKLSAgICAgICAgaWYg
KHgtPmRpZ2l0KGRpZ2l0YWxTaGlmdCkgJiBtYXNrKQorICAgICAgICBpZiAoeC5kaWdpdChkaWdp
dGFsU2hpZnQpICYgbWFzaykKICAgICAgICAgICAgIG11c3RSb3VuZERvd24gPSB0cnVlOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaWdpdGFs
U2hpZnQ7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICh4LT5kaWdpdChpKSkgeworICAgICAg
ICAgICAgICAgIGlmICh4LmRpZ2l0KGkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG11c3RSb3Vu
ZERvd24gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CkBAIC0xNDkxLDcgKzE4MDgsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0U2hpZnRC
eUFic29sdXRlCiAgICAgLy8gSWYgYml0c1NoaWZ0IGlzIG5vbi16ZXJvLCBpdCBmcmVlcyB1cCBi
aXRzLCBwcmV2ZW50aW5nIG92ZXJmbG93LgogICAgIGlmIChtdXN0Um91bmREb3duICYmICFiaXRz
U2hpZnQpIHsKICAgICAgICAgLy8gT3ZlcmZsb3cgY2Fubm90IGhhcHBlbiBpZiB0aGUgbW9zdCBz
aWduaWZpY2FudCBkaWdpdCBoYXMgdW5zZXQgYml0cy4KLSAgICAgICAgRGlnaXQgbXNkID0geC0+
ZGlnaXQobGVuZ3RoIC0gMSk7CisgICAgICAgIERpZ2l0IG1zZCA9IHguZGlnaXQobGVuZ3RoIC0g
MSk7CiAgICAgICAgIGJvb2wgcm91bmRpbmdDYW5PdmVyZmxvdyA9ICFzdGF0aWNfY2FzdDxEaWdp
dD4ofm1zZCk7CiAgICAgICAgIGlmIChyb3VuZGluZ0Nhbk92ZXJmbG93KQogICAgICAgICAgICAg
cmVzdWx0TGVuZ3RoKys7CkBAIC0xNTAxLDEyICsxODE4LDEyIEBAIEpTQmlnSW50KiBKU0JpZ0lu
dDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0
aExlbmd0aFVuY2hlY2tlZCh2bSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdExlbmd0aCkp
OwogICAgIGlmICghYml0c1NoaWZ0KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRpZ2l0
YWxTaGlmdDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChp
IC0gZGlnaXRhbFNoaWZ0LCB4LT5kaWdpdChpKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldERp
Z2l0KGkgLSBkaWdpdGFsU2hpZnQsIHguZGlnaXQoaSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IERpZ2l0IGNhcnJ5ID0geC0+ZGlnaXQoZGlnaXRhbFNoaWZ0KSA+PiBiaXRzU2hpZnQ7CisgICAg
ICAgIERpZ2l0IGNhcnJ5ID0geC5kaWdpdChkaWdpdGFsU2hpZnQpID4+IGJpdHNTaGlmdDsKICAg
ICAgICAgdW5zaWduZWQgbGFzdCA9IGxlbmd0aCAtIGRpZ2l0YWxTaGlmdCAtIDE7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsYXN0OyBpKyspIHsKLSAgICAgICAgICAgIERpZ2l0
IGQgPSB4LT5kaWdpdChpICsgZGlnaXRhbFNoaWZ0ICsgMSk7CisgICAgICAgICAgICBEaWdpdCBk
ID0geC5kaWdpdChpICsgZGlnaXRhbFNoaWZ0ICsgMSk7CiAgICAgICAgICAgICByZXN1bHQtPnNl
dERpZ2l0KGksIChkIDw8IChkaWdpdEJpdHMgLSBiaXRzU2hpZnQpKSB8IGNhcnJ5KTsKICAgICAg
ICAgICAgIGNhcnJ5ID0gZCA+PiBiaXRzU2hpZnQ7CiAgICAgICAgIH0KQEAgLTE1MTksMTQgKzE4
MzYsMTQgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZQogICAgICAg
ICAgICAgLy8gU2luY2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgcm91bmRpbmcgZG93biBtZWFu
cyBhZGRpbmcgb25lIHRvCiAgICAgICAgICAgICAvLyBpdHMgYWJzb2x1dGUgdmFsdWUuIFRoaXMg
Y2Fubm90IG92ZXJmbG93LgogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5yaWdodFRyaW0o
dm0pOwotICAgICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVz
dWx0LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAgICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRk
T25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6
U2lnbmVkKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJp
bSh2bSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11bShWTSYg
dm0sIGJvb2wgc2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyaWdodFNoaWZ0
QnlNYXhpbXVtKFZNJiB2bSwgYm9vbCBzaWduKQogewogICAgIGlmIChzaWduKQogICAgICAgICBy
ZXR1cm4gY3JlYXRlRnJvbSh2bSwgLTEpOwpAQCAtMTY4Myw3ICsyMDAwLDcgQEAgU3RyaW5nIEpT
QmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLAogICAgICAgICBKU0JpZ0ludCoqIGRpdmlk
ZW5kID0gJng7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIERpZ2l0IGNodW5rOwotICAgICAg
ICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKHZtLCAqZGl2aWRlbmQsIGNodW5rRGl2
aXNvciwgJnJlc3QsIGNodW5rKTsKKyAgICAgICAgICAgIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2
aXNvcih2bSwgSGVhcEJpZ0ludEltcGwgeyAqZGl2aWRlbmQgfSwgY2h1bmtEaXZpc29yLCAmcmVz
dCwgY2h1bmspOwogICAgICAgICAgICAgZGl2aWRlbmQgPSAmcmVzdDsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaHVua0NoYXJzOyBpKyspIHsKICAgICAgICAgICAgICAg
ICByZXN1bHRTdHJpbmcuYXBwZW5kKHJhZGl4RGlnaXRzW2NodW5rICUgcmFkaXhdKTsKQEAgLTIx
NzgsMTIgKzI0OTUsMTMgQEAgSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmNv
bQogICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpFcXVhbDsKIH0KIAotT3B0aW9uYWw8SlNC
aWdJbnQ6OkRpZ2l0PiBKU0JpZ0ludDo6dG9TaGlmdEFtb3VudChKU0JpZ0ludCogeCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorT3B0aW9uYWw8SlNCaWdJbnQ6OkRpZ2l0PiBKU0Jp
Z0ludDo6dG9TaGlmdEFtb3VudChCaWdJbnRJbXBsIHgpCiB7Ci0gICAgaWYgKHgtPmxlbmd0aCgp
ID4gMSkKKyAgICBpZiAoeC5sZW5ndGgoKSA+IDEpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgCi0gICAgRGlnaXQgdmFsdWUgPSB4LT5kaWdpdCgwKTsKKyAgICBEaWdpdCB2YWx1
ZSA9IHguZGlnaXQoMCk7CiAgICAgc3RhdGljX2Fzc2VydChtYXhMZW5ndGhCaXRzIDwgc3RkOjpu
dW1lcmljX2xpbWl0czxEaWdpdD46Om1heCgpLCAibWF4TGVuZ3RoQml0cyBuZWVkcyB0byBiZSBs
ZXNzIHRoYW4gZGlnaXQiKTsKICAgICAKICAgICBpZiAodmFsdWUgPiBtYXhMZW5ndGhCaXRzKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lvbiAy
NjA3NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw5IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNQ
VS5oIgorI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgor
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNs
dWRlIDx3dGYvQ2FnZWRVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CkBAIC0zNiw2ICszOCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBJbnQz
MkJpZ0ludEltcGw7CitjbGFzcyBIZWFwQmlnSW50SW1wbDsKKwogY2xhc3MgSlNCaWdJbnQgZmlu
YWwgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwpA
QCAtMTIxLDM4ICsxMjYsMTMgQEAgcHVibGljOgogICAgICAgICBMZXNzVGhhbgogICAgIH07CiAK
LSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHRyeUNvbnZlcnRUb0JpZ0ludDMyKEpT
QmlnSW50KiBiaWdJbnQpCi0gICAgewotI2lmIFVTRShCSUdJTlQzMikKLSAgICAgICAgaWYgKFVO
TElLRUxZKCFiaWdJbnQpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLQotICAgICAg
ICBpZiAoYmlnSW50LT5sZW5ndGgoKSA8PSAxKSB7Ci0gICAgICAgICAgICBpZiAoIWJpZ0ludC0+
bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7Ci0gICAgICAg
ICAgICBEaWdpdCBkaWdpdCA9IGJpZ0ludC0+ZGlnaXQoMCk7Ci0gICAgICAgICAgICBpZiAoYmln
SW50LT5zaWduKCkpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90
IG1heFZhbHVlID0gLXN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlnaXQgPD0gbWF4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KC1zdGF0aWNfY2FzdDxpbnQ2NF90PihkaWdpdCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBtYXhWYWx1ZSA9IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihkaWdpdCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICByZXR1cm4gYmlnSW50OwotICAg
IH0KLQotICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGVxdWFscyhKU0Jp
Z0ludCosIEpTQmlnSW50Kik7CiAgICAgYm9vbCBlcXVhbHNUb051bWJlcihKU1ZhbHVlKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsc1RvSW50MzIoaW50MzJfdCk7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJlVG9JbnQzMihpbnQzMl90KTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGxlc3NUaGFuSW50MzIoaW50MzJfdCk7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBsZXNzVGhhbkVxdWFsSW50MzIoaW50MzJfdCk7CisgICAg
Ly8gT09QUzogZGVmaW5lIHRoZSB2YXJpYW50cwogICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0
IGNvbXBhcmUoSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKIAogICAgIGJvb2wgZ2V0UHJpbWl0
aXZlTnVtYmVyKEpTR2xvYmFsT2JqZWN0KiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmIHJlc3Vs
dCkgY29uc3Q7CkBAIC0xNjMsOTQgKzE0MywyMTEgQEAgcHVibGljOgogCiAgICAgQ29tcGFyaXNv
blJlc3VsdCBzdGF0aWMgY29tcGFyZVRvRG91YmxlKEpTQmlnSW50KiB4LCBkb3VibGUgeSk7CiAK
LSAgICBzdGF0aWMgSlNCaWdJbnQqIGV4cG9uZW50aWF0ZUhlYXAoSlNHbG9iYWxPYmplY3QqLCBK
U0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBl
eHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIGJhc2Us
IEpTQmlnSW50KiBleHBvbmVudCkKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGFz
SW50MzJPckhlYXBDZWxsKFZNJiB2bSwgaW50NjRfdCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihleHBvbmVudGlhdGVIZWFwKGdsb2JhbE9iamVjdCwg
YmFzZSwgZXhwb25lbnQpKTsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRp
Y19jYXN0PGludDMyX3Q+KHZhbHVlKSkgPT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm4ganNC
aWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY3Jl
YXRlRnJvbSh2bSwgdmFsdWUpOwogICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1Zh
bHVlIGFzSW50MzJPckhlYXBDZWxsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDY0
X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFs
T2JqZWN0LT52bSgpLCB2YWx1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBIZWFwQmlnSW50SW1wbDsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgSW1wbFJlc3VsdCB7CisgICAg
ICAgIEltcGxSZXN1bHQoSGVhcEJpZ0ludEltcGwmKTsKKyAgICAgICAgSW1wbFJlc3VsdChKU0Jp
Z0ludCopOworICAgICAgICBJbXBsUmVzdWx0KEludDMyQmlnSW50SW1wbCYpOworICAgICAgICBJ
bXBsUmVzdWx0KEpTVmFsdWUpOworICAgICAgICBKU1ZhbHVlIHBheWxvYWQ7CisgICAgfTsKK3By
aXZhdGU6CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJp
Z0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGV4cG9uZW50aWF0ZUltcGwoSlNHbG9i
YWxPYmplY3QqLCBCaWdJbnRJbXBsMSBiYXNlLCBCaWdJbnRJbXBsMiBleHBvbmVudCk7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgor
ICAgIHN0YXRpYyBJbXBsUmVzdWx0IG11bHRpcGx5SW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0lu
dEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGw+CisgICAgc3RhdGljIEltcGxSZXN1bHQgaW5jSW1wbChKU0dsb2JhbE9iamVjdCosIEJp
Z0ludEltcGwgeCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBz
dGF0aWMgSW1wbFJlc3VsdCBkZWNJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4KTsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1w
bDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgYWRkSW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0lu
dEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBzdWJJ
bXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CiAKLSAg
ICBzdGF0aWMgSlNCaWdJbnQqIG11bHRpcGx5SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgbXVsdGlwbHkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3Rh
dGljIEltcGxSZXN1bHQgZGl2aWRlSW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgs
IEJpZ0ludEltcGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCByZW1haW5kZXJJbXBs
KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCB1bmFy
eU1pbnVzSW1wbChWTSYsIEJpZ0ludEltcGwgeCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0
IGJpdHdpc2VBbmRJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJp
Z0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGJpdHdpc2VPckltcGwoSlNHbG9iYWxP
YmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIElt
cGxSZXN1bHQgYml0d2lzZVhvckltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAg
IHN0YXRpYyBJbXBsUmVzdWx0IGJpdHdpc2VOb3RJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50
SW1wbCB4KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgbGVmdFNoaWZ0SW1wbChKU0dsb2Jh
bE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMg
SW1wbFJlc3VsdCBzaWduZWRSaWdodFNoaWZ0SW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTVmFsdWUgZXhw
b25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBiYXNlLCBK
U0JpZ0ludCogZXhwb25lbnQpOworICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgaW50MzJfdCBleHBvbmVu
dCk7CisgICAgc3RhdGljIEpTVmFsdWUgZXhwb25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGludDMyX3QgYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KTsKKyAgICBzdGF0aWMg
SlNWYWx1ZSBleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJf
dCBiYXNlLCBpbnQzMl90IGV4cG9uZW50KTsKKworICAgIHN0YXRpYyBKU1ZhbHVlIG11bHRpcGx5
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7
CisgICAgc3RhdGljIEpTVmFsdWUgbXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgbXVsdGlwbHko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7Cisg
ICAgc3RhdGljIEpTVmFsdWUgbXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRv
QmlnSW50MzIobXVsdGlwbHlIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgICAgICBpbnQ2
NF90IHJlc3VsdCA9IHN0YXRpY19jYXN0PGludDY0X3Q+KHgpICogc3RhdGljX2Nhc3Q8aW50NjRf
dD4oeSk7IAorICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCBy
ZXN1bHQpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGluY0hlYXAoSlNHbG9i
YWxPYmplY3QqLCBKU0JpZ0ludCogeCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgaW5jKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQorICAgIHN0YXRpYyBKU1ZhbHVlIGlu
YyhKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBpbmMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGluY0hlYXAoZ2xvYmFsT2JqZWN0LCB4KSk7Cisg
ICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PGludDY0X3Q+KHgpICsgMSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBkZWNIZWFw
KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGRlYyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKKyAgICBzdGF0aWMgSlNW
YWx1ZSBkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpOworICAg
IHN0YXRpYyBKU1ZhbHVlIGRlYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90
IHgpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGVjSGVhcChn
bG9iYWxPYmplY3QsIHgpKTsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkgLSAxKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIGFkZEhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCisgICAgc3RhdGljIEpTVmFsdWUgYWRkKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Cisg
ICAgc3RhdGljIEpTVmFsdWUgYWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmln
SW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGFkZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBhZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90
IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYWRkSGVhcChn
bG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90
Pih5KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBzdWJIZWFwKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBzdWIo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQor
ICAgIHN0YXRpYyBKU1ZhbHVlIHN1YihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJ
bnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2JqZWN0
KiwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN1YkhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KTsKKyAgICAgICAgcmV0dXJu
IGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkg
LSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih5KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50
KiBkaXZpZGVIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsK
LSAgICBzdGF0aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAg
IHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQz
Ml90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCosIGludDMy
X3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihkaXZpZGVIZWFwKGdsb2JhbE9iamVjdCwgeCwg
eSkpOworICAgICAgICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgICAgICB0aHJvd1Jhbmdl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxpZCBkaXZpc29yIHZhbHVl
LiJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0
X3Q+KHgpIC8gc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBK
U0JpZ0ludCogcmVtYWluZGVySGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1
ZSByZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwor
ICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4
LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVj
dCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihyZW1haW5kZXJIZWFwKGds
b2JhbE9iamVjdCwgeCwgeSkpOworICAgICAgICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAg
ICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxp
ZCBkaXZpc29yIHZhbHVlLiJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PGludDY0X3Q+KHgpICUgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBKU0JpZ0ludCogdW5hcnlNaW51c0hlYXAoVk0mLCBKU0JpZ0ludCogeCk7
Ci0gICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4KQorICAg
IHN0YXRpYyBKU1ZhbHVlIHVuYXJ5TWludXMoVk0mIHZtLCBKU0JpZ0ludCogeCk7CisgICAgc3Rh
dGljIEpTVmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIGludDMyX3QgeCkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMih1bmFyeU1pbnVzSGVhcCh2bSwgeCkpOworICAg
ICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwodm0sIC1zdGF0aWNfY2FzdDxpbnQ2NF90Pih4
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlQW5kSGVhcChKU0dsb2Jh
bE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUg
Yml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1Zh
bHVlIGJpdHdpc2VBbmQoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4
LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZUFuZChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlQW5kSGVhcChnbG9iYWxPYmplY3Qs
IHgsIHkpKTsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwg
eCAmIHkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZU9ySGVhcChKU0ds
b2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFs
dWUgYml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHgs
IEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlT3IoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZU9ySGVhcChnbG9iYWxPYmplY3QsIHgs
IHkpKTsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgeCB8
IHkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZVhvckhlYXAoSlNHbG9i
YWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVl
IGJpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5KQorICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7
CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCosIGludDMyX3Qg
eCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VYb3IoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZVhvckhlYXAoZ2xvYmFsT2JqZWN0
LCB4LCB5KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3Qs
IHggXiB5KTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VOb3RIZWFwKEpT
R2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VO
b3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCisgICAgc3RhdGlj
IEpTVmFsdWUgYml0d2lzZU5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0lu
dCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZU5vdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBpbnQzMl90IHgpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRv
QmlnSW50MzIoYml0d2lzZU5vdEhlYXAoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgICAgIHJldHVy
biBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIH54KTsKICAgICB9CiAKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIGxlZnRTaGlmdEhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGxlZnRTaGlmdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCisgICAgc3RhdGljIEpT
VmFsdWUgbGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0lu
dCogeCwgaW50MzJfdCB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxP
YmplY3QqLCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KTsKK3ByaXZhdGU6CisgICAgc3RhdGljIEpT
VmFsdWUgbGVmdFNoaWZ0U2xvdyhKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgaW50MzJfdCB5
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICByZXR1
cm4gdHJ5Q29udmVydFRvQmlnSW50MzIobGVmdFNoaWZ0SGVhcChnbG9iYWxPYmplY3QsIHgsIHkp
KTsKLSAgICB9CisgICAgICAgIGlmICh5IDwgMCkgeworICAgICAgICAgICAgLy8gU2hpZnRzIG9u
ZSBsZXNzIHRoYW4gcmVxdWVzdGVkLCBidXQgZG9lc24ndCBtYXR0ZXIgc2luY2UgbGhzIGlzIGlu
dDMyCisgICAgICAgICAgICByZXR1cm4gc2lnbmVkUmlnaHRTaGlmdChnbG9iYWxPYmplY3QsIHgs
IHkgPT0gSU5UMzJfTUlOID8gSU5UMzJfTUFYIDogLXkpOworICAgICAgICB9CiAKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIHNpZ25lZFJpZ2h0U2hpZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBzaWduZWRSaWdodFNoaWZ0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihzaWduZWRSaWdodFNo
aWZ0SGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAgICAgLy8gRG8gc29tZSBjaGVja3Mg
dG8gZGV0ZWN0IG92ZXJmbG93IG9mIGxlZnQtc2hpZnQuIEJ1dCB0aGlzIGlzIG11Y2ggY2hlYXBl
ciBjb21wYXJlZCB0byBhbGxvY2F0aW5nIHR3byBKU0JpZ0ludCBhbmQgcGVyZm9ybSBzaGlmdCBv
cGVyYXRpb25zIGluIEpTQmlnSW50LgorICAgICAgICBpZiAoIXgpCisgICAgICAgICAgICByZXR1
cm4ganNCaWdJbnQzMigwKTsKKyAgICAgICAgaWYgKHkgPCAzMikKKyAgICAgICAgICAgIHJldHVy
biBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgp
IDw8IHkpOworICAgICAgICByZXR1cm4gbGVmdFNoaWZ0U2xvdyhnbG9iYWxPYmplY3QsIHgsIHkp
OworICAgIH0KKworICAgIHN0YXRpYyBKU1ZhbHVlIHNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxP
YmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHNp
Z25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSBzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiwgaW50
MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgc2lnbmVkUmlnaHRTaGlm
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKKyAg
ICB7CisgICAgICAgIGlmICh5IDwgMCkgeworICAgICAgICAgICAgLy8gU2hpZnRzIG9uZSBsZXNz
IHRoYW4gcmVxdWVzdGVkLCBidXQgZG9lc24ndCBtYXR0ZXIgc2luY2UgbGhzIGlzIGludDMyCisg
ICAgICAgICAgICByZXR1cm4gbGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgeCwgeSA9PSBJTlQzMl9N
SU4gPyBJTlQzMl9NQVggOiAteSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ganNCaWdJ
bnQzMih4ID4+IHN0ZDo6bWluKHksIDMxKSk7CiAgICAgfQogCiAgICAgRGlnaXQgZGlnaXQodW5z
aWduZWQpOwpAQCAtMjc1LDE4ICszNzIsMjQgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMg
dWludDY0X3QgY2FsY3VsYXRlTWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZCh1bnNpZ25lZCBsZW5n
dGgsIHVuc2lnbmVkIHJhZGl4LCBEaWdpdCBsYXN0RGlnaXQsIGJvb2wgc2lnbik7CiAgICAgCi0g
ICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgYWJzb2x1dGVDb21wYXJlKEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIHZvaWQgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29y
KFZNJiwgSlNCaWdJbnQqIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERp
Z2l0JiByZW1haW5kZXIpOwotICAgIHN0YXRpYyB2b2lkIGludGVybmFsTXVsdGlwbHlBZGQoSlNC
aWdJbnQqIHNvdXJjZSwgRGlnaXQgZmFjdG9yLCBEaWdpdCBzdW1tYW5kLCB1bnNpZ25lZCwgSlNC
aWdJbnQqIHJlc3VsdCk7Ci0gICAgc3RhdGljIHZvaWQgbXVsdGlwbHlBY2N1bXVsYXRlKEpTQmln
SW50KiBtdWx0aXBsaWNhbmQsIERpZ2l0IG11bHRpcGxpZXIsIEpTQmlnSW50KiBhY2N1bXVsYXRv
ciwgdW5zaWduZWQgYWNjdW11bGF0b3JJbmRleCk7Ci0gICAgc3RhdGljIHZvaWQgYWJzb2x1dGVE
aXZXaXRoQmlnSW50RGl2aXNvcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiBkaXZpZGVuZCwg
SlNCaWdJbnQqIGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIEpTQmlnSW50KiogcmVtYWlu
ZGVyKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0lu
dEltcGwyPgorICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0IGFic29sdXRlQ29tcGFyZShCaWdJ
bnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbD4KKyAgICBzdGF0aWMgdm9pZCBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mLCBC
aWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiBy
ZW1haW5kZXIpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRp
YyB2b2lkIGludGVybmFsTXVsdGlwbHlBZGQoQmlnSW50SW1wbCBzb3VyY2UsIERpZ2l0IGZhY3Rv
ciwgRGlnaXQgc3VtbWFuZCwgdW5zaWduZWQsIEpTQmlnSW50KiByZXN1bHQpOworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyB2b2lkIG11bHRpcGx5QWNjdW11
bGF0ZShCaWdJbnRJbXBsIG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwgSlNCaWdJbnQq
IGFjY3VtdWxhdG9yLCB1bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KTsKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbDE+CisgICAgc3RhdGljIHZvaWQgYWJzb2x1dGVEaXZXaXRoQmln
SW50RGl2aXNvcihKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIGRpdmlkZW5kLCBKU0JpZ0lu
dCogZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgSlNCaWdJbnQqKiByZW1haW5kZXIpOwog
ICAgIAogICAgIGVudW0gY2xhc3MgTGVmdFNoaWZ0TW9kZSB7CiAgICAgICAgIFNhbWVTaXplUmVz
dWx0LAogICAgICAgICBBbHdheXNBZGRPbmVEaWdpdAogICAgIH07CiAgICAgCi0gICAgc3RhdGlj
IEpTQmlnSW50KiBhYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqLCBK
U0JpZ0ludCogeCwgdW5zaWduZWQgc2hpZnQsIExlZnRTaGlmdE1vZGUpOworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVMZWZ0
U2hpZnRBbHdheXNDb3B5KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4LCB1bnNpZ25lZCBz
aGlmdCwgTGVmdFNoaWZ0TW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHJvZHVjdEdyZWF0ZXJUaGFu
KERpZ2l0IGZhY3RvcjEsIERpZ2l0IGZhY3RvcjIsIERpZ2l0IGhpZ2gsIERpZ2l0IGxvdyk7CiAK
ICAgICBEaWdpdCBhYnNvbHV0ZUlucGxhY2VBZGQoSlNCaWdJbnQqIHN1bW1hbmQsIHVuc2lnbmVk
IHN0YXJ0SW5kZXgpOwpAQCAtMjk4LDI2ICs0MDEsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgU2tp
cAogICAgIH07CiAKLSAgICBlbnVtIGNsYXNzIFN5bW1ldHJpY09wIHsKLSAgICAgICAgU3ltbWV0
cmljLAotICAgICAgICBOb3RTeW1tZXRyaWMKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgQml0d2lzZU9wPgotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVCaXR3aXNlT3AoVk0m
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcsIFN5bW1ldHJp
Y09wLCBCaXR3aXNlT3AmJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5
cGVuYW1lIEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+CisgICAgc3RhdGljIEpTQmln
SW50KiBhYnNvbHV0ZUJpdHdpc2VPcChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHks
IEV4dHJhRGlnaXRzSGFuZGxpbmcsIEJpdHdpc2VPcCYmKTsKIAotICAgIHN0YXRpYyBKU0JpZ0lu
dCogYWJzb2x1dGVBbmQoVk0mLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRp
YyBKU0JpZ0ludCogYWJzb2x1dGVPcihWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0g
ICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZE5vdChWTSYsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVhvcihWTSYsIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kKFZN
JiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSlNCaWdJbnQq
IGFic29sdXRlT3IoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0
YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBbmROb3QoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJp
Z0ludEltcGwyPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoVk0mLCBCaWdJbnRJ
bXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKIAogICAgIGVudW0gY2xhc3MgU2lnbk9wdGlvbiB7CiAg
ICAgICAgIFNpZ25lZCwKICAgICAgICAgVW5zaWduZWQKICAgICB9OwogCi0gICAgc3RhdGljIEpT
QmlnSW50KiBhYnNvbHV0ZUFkZE9uZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBTaWdu
T3B0aW9uKTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlU3ViT25lKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJlc3VsdExlbmd0aCk7CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFkZE9u
ZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCwgU2lnbk9wdGlvbik7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVN1
Yk9uZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCwgdW5zaWduZWQgcmVzdWx0TGVuZ3Ro
KTsKIAogICAgIC8vIERpZ2l0IGFyaXRobWV0aWMgaGVscGVycy4KICAgICBzdGF0aWMgRGlnaXQg
ZGlnaXRBZGQoRGlnaXQgYSwgRGlnaXQgYiwgRGlnaXQmIGNhcnJ5KTsKQEAgLTM0NiwxNSArNDUw
LDIwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEpTQmlnSW50KiBjb3B5KFZNJiwgSlNCaWdJbnQq
IHgpOwogCiAgICAgdm9pZCBpbnBsYWNlTXVsdGlwbHlBZGQoRGlnaXQgbXVsdGlwbGllciwgRGln
aXQgcGFydCk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVj
dCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSwgYm9vbCByZXN1bHRTaWduKTsKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIGFic29sdXRlU3ViKFZNJiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5LCBi
b29sIHJlc3VsdFNpZ24pOwotCi0gICAgc3RhdGljIEpTQmlnSW50KiBsZWZ0U2hpZnRCeUFic29s
dXRlKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIHJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFic29sdXRlQWRk
KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1
bHRTaWduKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJp
Z0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFic29sdXRlU3ViKFZNJiwgQmlnSW50
SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGlj
IEltcGxSZXN1bHQgbGVmdFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgcmlnaHRTaGlm
dEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5
KTsKIAotICAgIHN0YXRpYyBKU0JpZ0ludCogcmlnaHRTaGlmdEJ5TWF4aW11bShWTSYsIGJvb2wg
c2lnbik7CisgICAgc3RhdGljIEltcGxSZXN1bHQgcmlnaHRTaGlmdEJ5TWF4aW11bShWTSYsIGJv
b2wgc2lnbik7CiAKLSAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91bnQoSlNC
aWdJbnQqIHgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRp
YyBPcHRpb25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChCaWdJbnRJbXBsIHgpOwogCiAgICAgaW5s
aW5lIHN0YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYwNzczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcxLDIwICs3MSwxMiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dD
YXNlKEpTR2xvCiAgICAgYXV0byBkb3VibGVPcCA9IFtdIChkb3VibGUgbGVmdCwgZG91YmxlIHJp
Z2h0KSAtPiBkb3VibGUgewogICAgICAgICByZXR1cm4gbGVmdCArIHJpZ2h0OwogICAgIH07Ci0g
ICAgYXV0byBiaWdJbnQzMk9wID0gW10gKGludDMyX3QgbGVmdCwgaW50MzJfdCByaWdodCkgLT4g
SlNWYWx1ZSB7Ci0jaWYgVVNFKEJJR0lOVDMyKQotICAgICAgICBDaGVja2VkSW50MzIgcmVzdWx0
ID0gbGVmdDsKLSAgICAgICAgcmVzdWx0ICs9IHJpZ2h0OwotICAgICAgICBpZiAoVU5MSUtFTFko
cmVzdWx0Lmhhc092ZXJmbG93ZWQoKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwot
ICAgICAgICByZXR1cm4ganNCaWdJbnQzMihyZXN1bHQudW5zYWZlR2V0KCkpOwotI2Vsc2UKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCisKKyAgICBhdXRv
IGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwg
YXV0byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmFkZChnbG9iYWxPYmplY3Qs
IGxlZnQsIHJpZ2h0KTsKICAgICB9OwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYXJp
dGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgcDEsIHAyLCBKU0JpZ0ludDo6YWRkLCBkb3Vi
bGVPcCwgYmlnSW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBp
biBhZGRpdGlvbi4iX3MpKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYXJpdGht
ZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgcDEsIHAyLCBkb3VibGVPcCwgYmlnSW50T3AsIGJp
Z0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90
aGVyIHR5cGUgaW4gYWRkaXRpb24uIl9zKSk7CiB9CiAKIEpTVmFsdWUganNUeXBlU3RyaW5nRm9y
VmFsdWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lv
biAyNjA3NzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzNCw5ICs1MzQsOCBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
anNBZGQoSlNHbG9iYWxPYmplCiAgICAgcmV0dXJuIGpzQWRkTm9uTnVtYmVyKGdsb2JhbE9iamVj
dCwgdjEsIHYyKTsKIH0KIAotLy8gQmlnSW50MzJPcCBleHBlY3RzIGl0cyBvcGVyYW5kcyB1bmJv
eGVkLCBhbmQgcmV0dXJucyBpdHMgcmVzdWx0IHVuYm94ZWQgYXMgd2VsbAotdGVtcGxhdGU8dHlw
ZW5hbWUgSGVhcEJpZ0ludE9wZXJhdGlvbiwgdHlwZW5hbWUgRG91YmxlT3BlcmF0aW9uLCB0eXBl
bmFtZSBCaWdJbnQzMk9wPgotQUxXQVlTX0lOTElORSBKU1ZhbHVlIGFyaXRobWV0aWNCaW5hcnlP
cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBI
ZWFwQmlnSW50T3BlcmF0aW9uJiYgaGVhcEJpZ0ludE9wLCBEb3VibGVPcGVyYXRpb24mJiBkb3Vi
bGVPcCwgQmlnSW50MzJPcCYmIGJpZ0ludDMyT3AsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkK
K3RlbXBsYXRlPHR5cGVuYW1lIERvdWJsZU9wZXJhdGlvbj4KK0FMV0FZU19JTkxJTkUgSlNWYWx1
ZSBhcml0aG1ldGljQmluYXJ5T3AoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSB2MSwgSlNWYWx1ZSB2MiwgRG91YmxlT3BlcmF0aW9uJiYgZG91YmxlT3AsIEpTVmFsdWUgKCpi
aWdJbnQzMikoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90LCBpbnQzMl90KSwgSlNWYWx1ZSAoKm1p
eGVkQmlnSW50MSkoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCosIGludDMyX3QpLCBKU1ZhbHVl
ICgqbWl4ZWRCaWdJbnQyKShKU0dsb2JhbE9iamVjdCosIGludDMyX3QsIEpTQmlnSW50KiksIEpT
VmFsdWUgKCpoZWFwQmlnSW50KShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiwgSlNCaWdJbnQq
KSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC01
NTEsMjggKzU1MCwyMCBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgYXJpdGhtZXRpY0JpbmFyeU9w
CiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKGxlZnROdW1lcmljLmlzQmlnSW50MzIoKSkg
ewotICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkgewotICAgICAgICAgICAg
aWYgKEpTVmFsdWUgcmVzdWx0ID0gYmlnSW50MzJPcChsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50
MzIoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgSlNCaWdJbnQqIGxlZnRIZWFwQmlnSW50ID0gSlNC
aWdJbnQ6OmNyZWF0ZUZyb20odm0sIGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKLSAg
ICAgICAgICAgIEpTQmlnSW50KiByaWdodEhlYXBCaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJv
bSh2bSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKLSAgICAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludE9wKGdsb2JhbE9iamVjdCwgbGVmdEhlYXBC
aWdJbnQsIHJpZ2h0SGVhcEJpZ0ludCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyaWdodE51
bWVyaWMuaXNIZWFwQmlnSW50KCkpIHsKLSAgICAgICAgICAgIEpTQmlnSW50KiBsZWZ0SGVhcEJp
Z0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50
MzIoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnRP
cChnbG9iYWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50
KCkpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkK
KyAgICAgICAgICAgIHJldHVybiBiaWdJbnQzMihnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmJp
Z0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAg
ICBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQorICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBtaXhlZEJpZ0ludDIoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5i
aWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CiAgICAgfSBl
bHNlIGlmIChsZWZ0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkgewotICAgICAgICBpZiAocmlnaHRO
dW1lcmljLmlzQmlnSW50MzIoKSkgewotICAgICAgICAgICAgSlNCaWdJbnQqIHJpZ2h0SGVhcEJp
Z0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0lu
dDMyKCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50
T3AoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHRIZWFwQmln
SW50KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQot
ICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50T3AoZ2xvYmFs
T2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJp
Z0ludCgpKSk7CisgICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJbnQzMigpKQorICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtaXhlZEJpZ0ludDEoZ2xvYmFsT2JqZWN0
LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQz
MigpKSk7CisgICAgICAgIGVsc2UgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkKKyAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludChnbG9iYWxPYmpl
Y3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50
KCkpKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShiaWdJbnQzMk9wKTsKICAgICBp
ZiAobGVmdE51bWVyaWMuaXNIZWFwQmlnSW50KCkgJiYgcmlnaHROdW1lcmljLmlzSGVhcEJpZ0lu
dCgpKQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnRPcChnbG9i
YWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNIZWFw
QmlnSW50KCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50
KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5h
c0hlYXBCaWdJbnQoKSkpOwogI2VuZGlmCiAKICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKQEAgLTU4MywyMSArNTc0LDEyIEBAIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBqc1N1YihKU0dsb2JhbE9iamUKICAgICBhdXRvIGRvdWJsZU9w
ID0gW10gKGRvdWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJl
dHVybiBsZWZ0IC0gcmlnaHQ7CiAgICAgfTsKLSAgICBhdXRvIGJpZ0ludDMyT3AgPSBbXSAoaW50
MzJfdCBsZWZ0LCBpbnQzMl90IHJpZ2h0KSAtPiBKU1ZhbHVlIHsKLSNpZiBVU0UoQklHSU5UMzIp
Ci0gICAgICAgIENoZWNrZWRJbnQzMiByZXN1bHQgPSBsZWZ0OwotICAgICAgICByZXN1bHQgLT0g
cmlnaHQ7Ci0gICAgICAgIGlmIChVTkxJS0VMWShyZXN1bHQuaGFzT3ZlcmZsb3dlZCgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHJl
c3VsdC51bnNhZmVHZXQoKSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0jZW5kaWYKKworICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgYXV0byBsZWZ0LCBhdXRvIHJpZ2h0KSB7CisgICAgICAgIHJldHVy
biBKU0JpZ0ludDo6c3ViKGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOwogICAgIH07CiAKLSAg
ICByZXR1cm4gYXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBKU0JpZ0lu
dDo6c3ViLCBkb3VibGVPcCwgYmlnSW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQg
b3RoZXIgdHlwZSBpbiBzdWJ0cmFjdGlvbi4iX3MpOworICAgIHJldHVybiBhcml0aG1ldGljQmlu
YXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGRvdWJsZU9wLCBiaWdJbnRPcCwgYmlnSW50T3As
IGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlw
ZSBpbiBzdWJ0cmFjdGlvbi4iX3MpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNNdWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAg
LTYwNSwyMSArNTg3LDEyIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc011bChKU0dsb2JhbE9i
amUKICAgICBhdXRvIGRvdWJsZU9wID0gW10gKGRvdWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQpIC0+
IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBsZWZ0ICogcmlnaHQ7CiAgICAgfTsKLSAgICBhdXRv
IGJpZ0ludDMyT3AgPSBbXSAoaW50MzJfdCBsZWZ0LCBpbnQzMl90IHJpZ2h0KSAtPiBKU1ZhbHVl
IHsKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgICAgIENoZWNrZWRJbnQzMiByZXN1bHQgPSBsZWZ0
OwotICAgICAgICByZXN1bHQgKj0gcmlnaHQ7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzT3ZlcmZs
b3dlZCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIGpz
QmlnSW50MzIocmVzdWx0LnVuc2FmZUdldCgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJB
TShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgorCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsKKyAg
ICAgICAgcmV0dXJuIEpTQmlnSW50OjptdWx0aXBseShnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0
KTsKICAgICB9OwogCi0gICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3Qs
IHYxLCB2MiwgSlNCaWdJbnQ6Om11bHRpcGx5LCBkb3VibGVPcCwgYmlnSW50MzJPcCwgIkludmFs
aWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBtdWx0aXBsaWNhdGlvbi4iX3MpOwor
ICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGRvdWJs
ZU9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4
IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBtdWx0aXBsaWNhdGlvbi4iX3MpOwogfQogCiBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUganNEaXYoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAgLTYyNywxOSArNjAwLDEyIEBAIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBqc0RpdihKU0dsb2JhbE9iamUKICAgICBhdXRvIGRvdWJsZU9wID0gW10gKGRv
dWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBsZWZ0
IC8gcmlnaHQ7CiAgICAgfTsKLSAgICBhdXRvIGJpZ0ludDMyT3AgPSBbXSAoaW50MzJfdCBsZWZ0
LCBpbnQzMl90IHJpZ2h0KSAtPiBKU1ZhbHVlIHsKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgICAg
IGlmICghcmlnaHQpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICByZXR1
cm4ganNCaWdJbnQzMihsZWZ0IC8gcmlnaHQpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFN
KGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAg
ICAgICByZXR1cm4gSlNCaWdJbnQ6OmRpdmlkZShnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsK
ICAgICB9OwogCi0gICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYx
LCB2MiwgSlNCaWdJbnQ6OmRpdmlkZSwgZG91YmxlT3AsIGJpZ0ludDMyT3AsICJJbnZhbGlkIG1p
eCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gZGl2aXNpb24uIl9zKTsKKyAgICByZXR1cm4g
YXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBkb3VibGVPcCwgYmlnSW50
T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQg
YW5kIG90aGVyIHR5cGUgaW4gZGl2aXNpb24uIl9zKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGpzUmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEs
IEpTVmFsdWUgdjIpCkBAIC02NDcsMTIgKzYxMywxMiBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
anNSZW1haW5kZXIoSlNHbG9iCiAgICAgYXV0byBkb3VibGVPcCA9IFtdIChkb3VibGUgbGVmdCwg
ZG91YmxlIHJpZ2h0KSAtPiBkb3VibGUgewogICAgICAgICByZXR1cm4ganNNb2QobGVmdCwgcmln
aHQpOwogICAgIH07Ci0gICAgYXV0byBiaWdJbnQzMk9wID0gW10gKGludDMyX3QsIGludDMyX3Qp
IC0+IEpTVmFsdWUgewotICAgICAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIG1vcmUgY2xldmVy
IGhlcmUuCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0g
W10gKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byByaWdodCkg
eworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OnJlbWFpbmRlcihnbG9iYWxPYmplY3QsIGxlZnQs
IHJpZ2h0KTsKICAgICB9OwogCi0gICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxP
YmplY3QsIHYxLCB2MiwgSlNCaWdJbnQ6OnJlbWFpbmRlciwgZG91YmxlT3AsIGJpZ0ludDMyT3As
ICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gcmVtYWluZGVyLiJfcyk7
CisgICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgZG91
YmxlT3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAiSW52YWxpZCBt
aXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHJlbWFpbmRlci4iX3MpOwogfQogCiBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUganNQb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAgLTY2MCwxMyArNjI2LDEyIEBAIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBqc1BvdyhKU0dsb2JhbE9iamUKICAgICBhdXRvIGRvdWJsZU9wID0gW10gKGRvdWJs
ZSBsZWZ0LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBvcGVyYXRp
b25NYXRoUG93KGxlZnQsIHJpZ2h0KTsKICAgICB9OwotICAgIGF1dG8gYmlnSW50MzJPcCA9IFtd
IChpbnQzMl90LCBpbnQzMl90KSAtPiBKU1ZhbHVlIHsKLSAgICAgICAgLy8gRXhwb25lbnRpYXRp
b24gb24gaW50ZWdlcnMgaXMgYm90aCBzb21ld2hhdCBzbG93IGluIHRoZSBiZXN0IGNhc2UsIGFu
ZCB2ZXJ5IGxpa2VseSB0byBvdmVyZmxvdy4KLSAgICAgICAgLy8gU28gZG9uJ3QgYm90aGVyIHRy
eWluZyB0byBhdm9pZCBhIGhlYXAgYWxsb2NhdGlvbiBpbiB0aGF0IGNhc2UuCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAgICAgICByZXR1cm4g
SlNCaWdJbnQ6OmV4cG9uZW50aWF0ZShnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsKICAgICB9
OwogCi0gICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2Miwg
SlNCaWdJbnQ6OmV4cG9uZW50aWF0ZSwgZG91YmxlT3AsIGJpZ0ludDMyT3AsICJJbnZhbGlkIG1p
eCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gZXhwb25lbnRpYXRpb24uIl9zKTsKKyAgICBy
ZXR1cm4gYXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBkb3VibGVPcCwg
YmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBC
aWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gZXhwb25lbnRpYXRpb24uIl9zKTsKIH0KIAogQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGpzSW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdikKQEAgLTY4MSwxMyArNjQ2LDggQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzSW5jKEpT
R2xvYmFsT2JqZQogICAgICAgICByZXR1cm4ganNOdW1iZXIob3BlcmFuZE51bWVyaWMuYXNOdW1i
ZXIoKSArIDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIGlmIChvcGVyYW5kTnVtZXJpYy5p
c0JpZ0ludDMyKCkpIHsKLSAgICAgICAgaW50NjRfdCBuZXdWYWx1ZSA9IHN0YXRpY19jYXN0PGlu
dDY0X3Q+KG9wZXJhbmROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSArIDE7Ci0gICAgICAgIC8v
IEZJWE1FOiB0aGUgZm9sbG93aW5nIG5leHQgZmV3IGxpbmVzIG1pZ2h0IGJlbmVmaXQgZnJvbSBi
ZWluZyBtYWRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24KLSAgICAgICAgaWYgKG5ld1ZhbHVlID4g
SU5UX01BWCkKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbmV3
VmFsdWUpOwotICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pihu
ZXdWYWx1ZSkpOwotICAgIH0KKyAgICBpZiAob3BlcmFuZE51bWVyaWMuaXNCaWdJbnQzMigpKQor
ICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmluYyhnbG9iYWxPYmplY3QsIG9wZXJhbmROdW1lcmlj
LmJpZ0ludDMyQXNJbnQzMigpKTsKICNlbmRpZgogCiAgICAgQVNTRVJUKG9wZXJhbmROdW1lcmlj
LmlzSGVhcEJpZ0ludCgpKTsKQEAgLTcwNiwxMyArNjY2LDggQEAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGpzRGVjKEpTR2xvYmFsT2JqZQogICAgICAgICByZXR1cm4ganNOdW1iZXIob3BlcmFuZE51
bWVyaWMuYXNOdW1iZXIoKSAtIDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIGlmIChvcGVy
YW5kTnVtZXJpYy5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgaW50NjRfdCBuZXdWYWx1ZSA9IHN0
YXRpY19jYXN0PGludDY0X3Q+KG9wZXJhbmROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSAtIDE7
Ci0gICAgICAgIC8vIEZJWE1FOiB0aGUgZm9sbG93aW5nIG5leHQgZmV3IGxpbmVzIG1pZ2h0IGJl
bmVmaXQgZnJvbSBiZWluZyBtYWRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24KLSAgICAgICAgaWYg
KG5ld1ZhbHVlIDwgSU5UX01JTikKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRl
RnJvbSh2bSwgbmV3VmFsdWUpOwotICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihuZXdWYWx1ZSkpOwotICAgIH0KKyAgICBpZiAob3BlcmFuZE51bWVyaWMuaXNC
aWdJbnQzMigpKQorICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmRlYyhnbG9iYWxPYmplY3QsIG9w
ZXJhbmROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKICNlbmRpZgogCiAgICAgQVNTRVJUKG9w
ZXJhbmROdW1lcmljLmlzSGVhcEJpZ0ludCgpKTsKQEAgLTczMiwxNCArNjg3LDE1IEBAIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBqc0JpdHdpc2VOb3QoSlNHbG8KIAogI2lmIFVTRShCSUdJTlQzMikK
ICAgICBpZiAob3BlcmFuZE51bWVyaWMuaXNCaWdJbnQzMigpKQotICAgICAgICByZXR1cm4ganNC
aWdJbnQzMih+b3BlcmFuZE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICByZXR1
cm4gSlNCaWdJbnQ6OmJpdHdpc2VOb3QoZ2xvYmFsT2JqZWN0LCBvcGVyYW5kTnVtZXJpYy5iaWdJ
bnQzMkFzSW50MzIoKSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChvcGVyYW5kTnVtZXJpYy5pc0hl
YXBCaWdJbnQoKSk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Yml0
d2lzZU5vdChnbG9iYWxPYmplY3QsIG9wZXJhbmROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBzaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBib29sIGlzTGVmdCkKK3RlbXBsYXRlIDxib29s
IGlzTGVmdD4KK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBzaGlmdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQogewogICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CkBAIC03NTcsNzQgKzcxMyw1NSBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgc2hpZnQoSlNHbG9i
YWxPYmplCiAgICAgfQogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIGlmIChsZWZ0TnVtZXJpYy5p
c0JpZ0ludDMyKCkgJiYgcmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQz
Ml90IGxlZnRJbnQzMiA9IGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICBp
bnQzMl90IHJpZ2h0SW50MzIgPSByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCk7Ci0gICAg
ICAgIGlmIChyaWdodEludDMyIDwgMCkgewotICAgICAgICAgICAgaXNMZWZ0ID0gIWlzTGVmdDsK
LSAgICAgICAgICAgIGlmIChyaWdodEludDMyID09IElOVDMyX01JTikKLSAgICAgICAgICAgICAg
ICByaWdodEludDMyID0gSU5UMzJfTUFYOyAvLyBTaGlmdHMgb25lIGxlc3MgdGhhbiByZXF1ZXN0
ZWQsIGJ1dCBtYWtlcyBubyBvYnNlcnZhYmxlIGRpZmZlcmVuY2UuCi0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmlnaHRJbnQzMiA9IC1yaWdodEludDMyOworICAgIGlmIChsZWZ0
TnVtZXJpYy5pc0JpZ0ludDMyKCkpIHsKKyAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0lu
dDMyKCkpIHsKKyAgICAgICAgICAgIGlmIChpc0xlZnQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEpTQmlnSW50OjpsZWZ0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFz
SW50MzIoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgICAgIHJl
dHVybiBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmlj
LmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOwogICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVChyaWdodEludDMyID49IDApOwotCi0gICAgICAgIC8vIFRo
aXMgc3RkOjptaW4gaXMgYSBiaXQgaGFja3ksIGJ1dCByZXF1aXJlZCBiZWNhdXNlIGluIEMrKyBp
dCBpcyB1bmRlZmluZWQgYmVoYXZpb3IgdG8gZG8gYSBzaGlmdCB3aGVyZSB0aGUgcmlnaHQgb3Bl
cmFuZCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBiaXQtd2lkdGggb2YgdGhlIGxlZnQgb3Bl
cmFuZC4KLSAgICAgICAgaWYgKCFpc0xlZnQpCi0gICAgICAgICAgICByZXR1cm4ganNCaWdJbnQz
MihsZWZ0SW50MzIgPj4gc3RkOjptaW4ocmlnaHRJbnQzMiwgMzEpKTsKLQotICAgICAgICAvLyBE
byBzb21lIGNoZWNrcyB0byBkZXRlY3Qgb3ZlcmZsb3cgb2YgbGVmdC1zaGlmdC4gQnV0IHRoaXMg
aXMgbXVjaCBjaGVhcGVyIGNvbXBhcmVkIHRvIGFsbG9jYXRpbmcgdHdvIEpTQmlnSW50IGFuZCBw
ZXJmb3JtIHNoaWZ0IG9wZXJhdGlvbnMgaW4gSlNCaWdJbnQuCi0gICAgICAgIGlmICghbGVmdElu
dDMyKQotICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7Ci0gICAgICAgIGlmIChyaWdo
dEludDMyIDwgMzIpIHsKLSAgICAgICAgICAgIGludDY0X3QgcmVzdWx0NjQgPSBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihsZWZ0SW50MzIpIDw8IHJpZ2h0SW50MzI7Ci0gICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmVzdWx0NjQpKSA9PSByZXN1
bHQ2NCkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihyZXN1bHQ2NCkpOworICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgp
KSB7CisgICAgICAgICAgICBpZiAoaXNMZWZ0KQorICAgICAgICAgICAgICAgIHJldHVybiBKU0Jp
Z0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMy
KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gSlNC
aWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5iaWdJbnQz
MkFzSW50MzIoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSBpZiAobGVmdE51bWVyaWMuaXNIZWFwQmlnSW50KCkpIHsKKyAgICAgICAgaWYgKHJp
Z2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkpIHsKKyAgICAgICAgICAgIGlmIChpc0xlZnQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpsZWZ0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0
TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsK
KyAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChnbG9iYWxPYmpl
Y3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0lu
dDMyKCkpOworICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkg
eworICAgICAgICAgICAgaWYgKGlzTGVmdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNCaWdJ
bnQ6OmxlZnRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCBy
aWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpOworICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50
OjpzaWduZWRSaWdodFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50
KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSk7CiAgICAgICAgIH0KLQotICAgICAgICAv
LyBJbiB0aGUgY2FzZSBvZiBhIGxlZnQgc2hpZnQgd2UgY2FuIG92ZXJmbG93LiBJIGRlYWwgd2l0
aCB0aGlzIGJ5IGFsbG9jYXRpbmcgSGVhcEJpZ0ludHMuCi0gICAgICAgIC8vIEZJWE1FOiBpdCBt
aWdodCBiZSBwb3NzaWJsZSB0byBkbyBzb21ldGhpbmcgc21hcnRlciwgdHJ5aW5nIHRvIGRvIHRo
ZSBsZWZ0IHNoaWZ0IGFuZCBkZXRlY3Rpbmcgc29tZWhvdyBpZiBpdCBvdmVyZmxvd2VkLgotICAg
ICAgICBKU0JpZ0ludCogbGVmdEhlYXBCaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
bGVmdEludDMyKTsKLSAgICAgICAgSlNCaWdJbnQqIHJpZ2h0SGVhcEJpZ0ludCA9IEpTQmlnSW50
OjpjcmVhdGVGcm9tKHZtLCByaWdodEludDMyKTsKLSAgICAgICAgaWYgKGlzTGVmdCkKLSAgICAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9i
YWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodEhlYXBCaWdJbnQpKTsKLSAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChnbG9iYWxP
YmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodEhlYXBCaWdJbnQpKTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGlmICghKGxlZnROdW1lcmljLmlzQmlnSW50KCkgJiYgcmlnaHROdW1lcmljLmlzQmln
SW50KCkpKSB7Ci0gICAgICAgIGF1dG8gZXJyb3JNZXNzYWdlID0gaXNMZWZ0ID8gIkludmFsaWQg
bWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBsZWZ0IHNoaWZ0IG9wZXJhdGlvbi4iIDog
IkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBzaWduZWQgcmlnaHQgc2hp
ZnQgb3BlcmF0aW9uLiI7Ci0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogICAgIH0KLQotICAgIC8vIEZJWE1FOiB3ZSBzaG91
bGQgaGF2ZSBhIGNhc2UgZm9yIGxlZnQgaXMgSGVhcEJpZ0ludCBhbmQgcmlnaHQgaXMgQmlnSW50
MzIsIGl0IHNlZW1zIGZhaXJseSBsaWtlbHkgdG8gb2NjdXIgZnJlcXVlbnRseS4KLSNpZiBVU0Uo
QklHSU5UMzIpCi0gICAgSlNCaWdJbnQqIGxlZnRIZWFwQmlnSW50ID0gbGVmdE51bWVyaWMuaXNC
aWdJbnQzMigpID8gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIGxlZnROdW1lcmljLmJpZ0ludDMy
QXNJbnQzMigpKSA6IGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpOwotICAgIEpTQmlnSW50KiBy
aWdodEhlYXBCaWdJbnQgPSByaWdodE51bWVyaWMuaXNCaWdJbnQzMigpID8gSlNCaWdJbnQ6OmNy
ZWF0ZUZyb20odm0sIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkgOiByaWdodE51bWVy
aWMuYXNIZWFwQmlnSW50KCk7CiAjZWxzZQotICAgIEpTQmlnSW50KiBsZWZ0SGVhcEJpZ0ludCA9
IGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpOwotICAgIEpTQmlnSW50KiByaWdodEhlYXBCaWdJ
bnQgPSByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCk7CisgICAgVU5VU0VEX1BBUkFNKGJpZ0lu
dDMyT3ApOworICAgIGlmIChsZWZ0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSAmJiByaWdodE51bWVy
aWMuaXNIZWFwQmlnSW50KCkpIHsKKyAgICAgICAgaWYgKGlzTGVmdCkKKyAgICAgICAgICAgIHJl
dHVybiBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFw
QmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSk7CisgICAgICAgIHJldHVybiBK
U0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVh
cEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpOworICAgIH0KICNlbmRpZgog
Ci0gICAgaWYgKGlzTGVmdCkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0Jp
Z0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdEhlYXBCaWdJbnQsIHJpZ2h0SGVhcEJp
Z0ludCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OnNpZ25lZFJp
Z2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0SGVhcEJpZ0ludCwgcmlnaHRIZWFwQmlnSW50KSk7
CisgICAgYXV0byBlcnJvck1lc3NhZ2UgPSBpc0xlZnQgPyAiSW52YWxpZCBtaXggb2YgQmlnSW50
IGFuZCBvdGhlciB0eXBlIGluIGxlZnQgc2hpZnQgb3BlcmF0aW9uLiIgOiAiSW52YWxpZCBtaXgg
b2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHNpZ25lZCByaWdodCBzaGlmdCBvcGVyYXRpb24u
IjsKKyAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JN
ZXNzYWdlKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzTFNoaWZ0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7Ci0gICAgYm9vbCBp
c0xlZnQgPSB0cnVlOwotICAgIHJldHVybiBzaGlmdChnbG9iYWxPYmplY3QsIHYxLCB2MiwgaXNM
ZWZ0KTsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0xlZnQgPSB0cnVlOworICAgIHJldHVybiBzaGlm
dDxpc0xlZnQ+KGdsb2JhbE9iamVjdCwgdjEsIHYyKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGpzUlNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpT
VmFsdWUgdjIpCiB7Ci0gICAgYm9vbCBpc0xlZnQgPSBmYWxzZTsKLSAgICByZXR1cm4gc2hpZnQo
Z2xvYmFsT2JqZWN0LCB2MSwgdjIsIGlzTGVmdCk7CisgICAgY29uc3RleHByIGJvb2wgaXNMZWZ0
ID0gZmFsc2U7CisgICAgcmV0dXJuIHNoaWZ0PGlzTGVmdD4oZ2xvYmFsT2JqZWN0LCB2MSwgdjIp
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBIZWFwQmlnSW50T3BlcmF0aW9uLCB0eXBlbmFtZSBJ
bnQzMk9wZXJhdGlvbj4KLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBiaXR3aXNlQmluYXJ5T3AoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MiwgSGVhcEJp
Z0ludE9wZXJhdGlvbiYmIGJpZ0ludE9wLCBJbnQzMk9wZXJhdGlvbiYmIGludDMyT3AsIGNvbnN0
IGNoYXIqIGVycm9yTWVzc2FnZSkKK3RlbXBsYXRlPHR5cGVuYW1lIEludDMyT3BlcmF0aW9uPgor
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGJpdHdpc2VCaW5hcnlPcChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBJbnQzMk9wZXJhdGlvbiYmIGludDMy
T3AsIEpTVmFsdWUgKCpiaWdJbnQzMikoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90LCBpbnQzMl90
KSwgSlNWYWx1ZSAoKm1peGVkQmlnSW50MSkoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCosIGlu
dDMyX3QpLCBKU1ZhbHVlICgqbWl4ZWRCaWdJbnQyKShKU0dsb2JhbE9iamVjdCosIGludDMyX3Qs
IEpTQmlnSW50KiksIEpTVmFsdWUgKCpoZWFwQmlnSW50KShKU0dsb2JhbE9iamVjdCosIEpTQmln
SW50KiwgSlNCaWdJbnQqKSwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC04MzgsMjUgKzc3NSwyNCBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgYml0
d2lzZUJpbmFyeU9wKEpTCiAgICAgICAgIHJldHVybiBqc051bWJlcihpbnQzMk9wKGxlZnROdW1l
cmljLmFzSW50MzIoKSwgcmlnaHROdW1lcmljLmFzSW50MzIoKSkpOwogCiAjaWYgVVNFKEJJR0lO
VDMyKQotICAgIGlmIChsZWZ0TnVtZXJpYy5pc0JpZ0ludDMyKCkgJiYgcmlnaHROdW1lcmljLmlz
QmlnSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoaW50MzJPcChsZWZ0TnVtZXJp
Yy5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSk7Ci0g
ICAgLy8gRklYTUU6IGFkZCBmYXN0IHBhdGggZm9yIEJpZ0ludDMyIC8gSGVhcEJpZ0ludCwgYW5k
IGZvciBIZWFwQmlnSW50IC8gQmlnSW50MzIKLSAgICAvLyBJbiBtYW55IGNhc2VzIHRoZXNlIGNv
dWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgdGhhbiBoZWFwLWFsbG9jYXRpbmcgdGhlIHNtYWxs
IGJpZy1pbnQgYW5kIGdvaW5nIHRocm91Z2ggdGhlIGdlbmVyaWMgcGF0aC4KLSAgICAvLyBCdXQg
aXQgaXMgcXVpdGUgdHJpY2t5LCBub3QgbGVhc3QgYmVjYXVzZSBIZWFwQmlnSW50IHVzZSBhIHNp
Z24gYml0IHdoZXJlYXMgQmlnSW50MzIgdXNlIDItY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4K
LSNlbmRpZgotCi0gICAgaWYgKCEobGVmdE51bWVyaWMuaXNCaWdJbnQoKSAmJiByaWdodE51bWVy
aWMuaXNCaWdJbnQoKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmpl
Y3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIEpTQmln
SW50KiBsZWZ0SGVhcEJpZ0ludCA9IGxlZnROdW1lcmljLmlzQmlnSW50MzIoKSA/IEpTQmlnSW50
OjpjcmVhdGVGcm9tKHZtLCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkgOiBsZWZ0TnVt
ZXJpYy5hc0hlYXBCaWdJbnQoKTsKLSAgICBKU0JpZ0ludCogcmlnaHRIZWFwQmlnSW50ID0gcmln
aHROdW1lcmljLmlzQmlnSW50MzIoKSA/IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCByaWdodE51
bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpIDogcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpOwor
ICAgIGlmIChsZWZ0TnVtZXJpYy5pc0JpZ0ludDMyKCkpIHsKKyAgICAgICAgaWYgKHJpZ2h0TnVt
ZXJpYy5pc0JpZ0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gYmlnSW50MzIoZ2xvYmFsT2Jq
ZWN0LCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMy
QXNJbnQzMigpKTsKKyAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkKKyAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgbWl4ZWRCaWdJbnQyKGdsb2JhbE9i
amVjdCwgbGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBC
aWdJbnQoKSkpOworICAgIH0gZWxzZSBpZiAobGVmdE51bWVyaWMuaXNIZWFwQmlnSW50KCkpIHsK
KyAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkpCisgICAgICAgICAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIG1peGVkQmlnSW50MShnbG9iYWxPYmplY3QsIGxlZnROdW1l
cmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAg
ICAgICAgZWxzZSBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQorICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50KGdsb2JhbE9iamVjdCwgbGVmdE51
bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOworICAg
IH0KICNlbHNlCi0gICAgSlNCaWdJbnQqIGxlZnRIZWFwQmlnSW50ID0gbGVmdE51bWVyaWMuYXNI
ZWFwQmlnSW50KCk7Ci0gICAgSlNCaWdJbnQqIHJpZ2h0SGVhcEJpZ0ludCA9IHJpZ2h0TnVtZXJp
Yy5hc0hlYXBCaWdJbnQoKTsKKyAgICBVTlVTRURfUEFSQU0oYmlnSW50MzJPcCk7CisgICAgaWYg
KGxlZnROdW1lcmljLmlzSGVhcEJpZ0ludCgpICYmIHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQo
KSkKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50KGdsb2JhbE9i
amVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJ
bnQoKSkpOwogI2VuZGlmCiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpZ0ludE9w
KGdsb2JhbE9iamVjdCwgbGVmdEhlYXBCaWdJbnQsIHJpZ2h0SGVhcEJpZ0ludCkpOworICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwog
fQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCkBAIC04NjUsOSArODAxLDEzIEBA
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0JpdHdpc2VBbmQoSlNHbG8KICAgICAgICAgcmV0dXJu
IGxlZnQgJiByaWdodDsKICAgICB9OwogCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsKKyAgICAgICAg
cmV0dXJuIEpTQmlnSW50OjpiaXR3aXNlQW5kKGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOwor
ICAgIH07CisKICAgICAvLyBGSVhNRTogY3VycmVudGx5LCBmb3IgcGFpcnMgb2YgQmlnSW50MzIs
IHdlIHVuYm94IHRoZW0sIGRvIHRoZSAiYW5kIiBhbmQgcmUtYm94IHRoZW0uCiAgICAgLy8gV2Ug
Y291bGQgZG8gaXQgZGlyZWN0bHkgb24gdGhlIEpTVmFsdWUuCi0gICAgcmV0dXJuIGJpdHdpc2VC
aW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgSlNCaWdJbnQ6OmJpdHdpc2VBbmQsIGludDMy
T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gYml0d2lzZSAnYW5k
JyBvcGVyYXRpb24uIl9zKTsKKyAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGdsb2JhbE9iamVj
dCwgdjEsIHYyLCBpbnQzMk9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRP
cCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICdhbmQn
IG9wZXJhdGlvbi4iX3MpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaXR3aXNlT3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAg
LTg3OCw3ICs4MTgsMTIgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQml0d2lzZU9yKEpTR2xv
YgogCiAgICAgLy8gRklYTUU6IGN1cnJlbnRseSwgZm9yIHBhaXJzIG9mIEJpZ0ludDMyLCB3ZSB1
bmJveCB0aGVtLCBkbyB0aGUgIm9yIiBhbmQgcmUtYm94IHRoZW0uCiAgICAgLy8gV2UgY291bGQg
ZG8gaXQgZGlyZWN0bHkgb24gdGhlIEpTVmFsdWUuCi0gICAgcmV0dXJuIGJpdHdpc2VCaW5hcnlP
cChnbG9iYWxPYmplY3QsIHYxLCB2MiwgSlNCaWdJbnQ6OmJpdHdpc2VPciwgaW50MzJPcCwgIklu
dmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICdvcicgb3BlcmF0
aW9uLiJfcyk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJ
bnQ6OmJpdHdpc2VPcihnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsKKyAgICB9OworCisgICAg
cmV0dXJuIGJpdHdpc2VCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgaW50MzJPcCwgYmln
SW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJ
bnQgYW5kIG90aGVyIHR5cGUgaW4gYml0d2lzZSAnb3InIG9wZXJhdGlvbi4iX3MpOwogfQogCiBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCkBAIC04ODksNyArODM0LDExIEBAIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBqc0JpdHdpc2VYb3IoSlNHbG8KIAogICAgIC8vIEZJWE1FOiBjdXJy
ZW50bHksIGZvciBwYWlycyBvZiBCaWdJbnQzMiwgd2UgdW5ib3ggdGhlbSwgZG8gdGhlICJ4b3Ii
IGFuZCByZS1ib3ggdGhlbS4KICAgICAvLyBXZSBjb3VsZCBkbyBpdCBkaXJlY3RseSBvbiB0aGUg
SlNWYWx1ZSwgYW5kIGp1c3QgcmVtZW1iZXIgdG8gZG8gYW4gb3Igd2l0aCAweDEyIGF0IHRoZSBl
bmQgdG8gcmVzdG9yZSB0aGUgdGFnCi0gICAgcmV0dXJuIGJpdHdpc2VCaW5hcnlPcChnbG9iYWxP
YmplY3QsIHYxLCB2MiwgSlNCaWdJbnQ6OmJpdHdpc2VYb3IsIGludDMyT3AsICJJbnZhbGlkIG1p
eCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gYml0d2lzZSAneG9yJyBvcGVyYXRpb24uIl9z
KTsKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdp
c2VYb3IoZ2xvYmFsT2JqZWN0LCBsZWZ0LCByaWdodCk7CisgICAgfTsKKworICAgIHJldHVybiBi
aXR3aXNlQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGludDMyT3AsIGJpZ0ludE9wLCBi
aWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBv
dGhlciB0eXBlIGluIGJpdHdpc2UgJ3hvcicgb3BlcmF0aW9uLiJfcyk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWxXaXRoSW5kZXgoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDZWxsKiBiYXNlLCB1aW50MzJfdCBpbmRleCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397782</attachid>
            <date>2020-04-27 18:54:11 -0700</date>
            <delta_ts>2020-04-27 19:10:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>115571</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYwODA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NCBA
QAorMjAyMC0wNC0yNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBCaWdJbnQgcnVudGltZSBzaG91bGRuJ3QgY29udmVydCBCaWdJbnQzMiB0byBhIGhlYXAgY2Vs
bCB3aGVuIGRvaW5nIG1hdGgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMDk3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGluIHRoZSBydW50aW1lIGZvciBkb2lu
ZyBhbG9tc3QgYWxsIEJpZ0ludCBtYXRoCisgICAgICAgIG9wZXJhdGlvbnMgb24gdGhlIGlucHV0
cyBlaXRoZXIgYmVpbmcgSW50MzIsIEhlYXBCaWdJbnQsIG9yIGEgbWl4aW5nCisgICAgICAgIG9m
IGJvdGguIEJlZm9yZSwgaWYgd2UgZGV0ZWN0ZWQgYSBiaW5hcnkgb3BlcmF0aW9uIG9uIGFuIElu
dDMyIGFuZCBhCisgICAgICAgIEhlYXBCaWdJbnQsIHRoaXMgd291bGQgbGVhZCB1cyB0byBjb252
ZXJ0IHRoZSBJbnQzMiBvcGVyYW5kIGludG8gYSBIZWFwQmlnSW50LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBlc3BlY2lhbGx5IGJhZCBiZWNhdXNlIHdlJ2QgcmVwZWF0IHRoaXMgZm9yIGFs
bCBtYXRoIG9wcy4gRm9yIGV4YW1wbGUsCisgICAgICAgIGlmIHggaXMgYSBCaWdJbnQzMiwgYW5k
IGFsbCByaHMgYXJlIGEgSGVhcEJpZ0ludCwgd2UnZCByZXBlYXRlZGx5IGNvbnZlcnQgeAorICAg
ICAgICB0byBhIEhlYXBCaWdJbnQgZm9yIGVhY2ggb3BlcmF0aW9uOgorICAgICAgICBgYGAKKyAg
ICAgICAgeCArIHkKKyAgICAgICAgeCAqIHkKKyAgICAgICAgeCAtIHkKKyAgICAgICAgeCA+PiB5
CisgICAgICAgIHggPDwgeQorICAgICAgICBldGMKKyAgICAgICAgYGBgCisgICAgICAgIAorICAg
ICAgICBUbyB0ZWFjaCB0aGUgcnVudGltZSBob3cgdG8gb3BlcmF0ZSBib3RoIG92ZXIgYSBCaWdJ
bnQzMiBhbmQgYSBIZWFwQmlnSW50LCBJCisgICAgICAgIHRlbXBsYXRpemVkIHRoZSBydW50aW1l
IG1hdGggb3BlcmF0aW9ucyB0byB3b3JrIGJvdGggb3ZlciBCaWdJbnQzMiBhbmQKKyAgICAgICAg
SGVhcEJpZ0ludCB3cmFwcGVyIGNsYXNzZXMgdGhhdCBleHBvc2UgdGhlIHNhbWUgaW50ZXJmYWNl
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIH4yOCUgc3BlZWR1cCBvbiBtaWNyb2JlbmNo
bWFya3Mvc3Vuc3BpZGVyLXNoYTEtYmlnLWludC5qcworCisgICAgICAgICogaml0L0pJVE9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAg
ICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3Bw
OgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6SGVhcEJpZ0ludEltcGwpOgorICAgICAg
ICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6aXNaZXJvKToKKyAgICAgICAgKEpTQzo6SGVhcEJpZ0lu
dEltcGw6OnNpZ24pOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6bGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6SGVhcEJpZ0ludEltcGw6OmRpZ2l0KToKKyAgICAgICAgKEpTQzo6SGVhcEJp
Z0ludEltcGw6OnRvSGVhcEJpZ0ludCk6CisgICAgICAgIChKU0M6OkludDMyQmlnSW50SW1wbDo6
SW50MzJCaWdJbnRJbXBsKToKKyAgICAgICAgKEpTQzo6SW50MzJCaWdJbnRJbXBsOjppc1plcm8p
OgorICAgICAgICAoSlNDOjpJbnQzMkJpZ0ludEltcGw6OnNpZ24pOgorICAgICAgICAoSlNDOjpJ
bnQzMkJpZ0ludEltcGw6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkludDMyQmlnSW50SW1wbDo6
ZGlnaXQpOgorICAgICAgICAoSlNDOjpJbnQzMkJpZ0ludEltcGw6OnRvSGVhcEJpZ0ludCk6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpJbXBsUmVzdWx0OjpJbXBsUmVzdWx0KToKKyAgICAgICAg
KEpTQzo6dHJ5Q29udmVydFRvQmlnSW50MzIpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6aW5w
bGFjZU11bHRpcGx5QWRkKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUlt
cGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6ZXhwb25lbnRpYXRlKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjptdWx0
aXBseSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmRpdmlkZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp1bmFyeU1pbnVz
SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp1bmFyeU1pbnVzKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OnJlbWFpbmRlckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmVt
YWluZGVyKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmluY0ltcGwpOgorICAgICAgICAoSlND
OjpKU0JpZ0ludDo6aW5jKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmRlY0ltcGwpOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6ZGVjKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFkZElt
cGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWRkKToKKyAgICAgICAgKEpTQzo6SlNCaWdJ
bnQ6OnN1YkltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c3ViKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmJpdHdpc2VBbmRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJp
dHdpc2VBbmQpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZU9ySW1wbCk6CisgICAg
ICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlT3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
Yml0d2lzZVhvckltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZVhvcik6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpsZWZ0U2hpZnRJbXBsKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmxlZnRTaGlmdCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpsZWZ0U2hpZnRTbG93
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnRJbXBsKToKKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQpOgorICAgICAgICAoSlNDOjpKU0Jp
Z0ludDo6Yml0d2lzZU5vdEltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZU5v
dCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjppbnRlcm5hbE11bHRpcGx5QWRkKToKKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5QWNjdW11bGF0ZSk6CisgICAgICAgIChKU0M6OkpT
QmlnSW50OjphYnNvbHV0ZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Y29tcGFy
ZUltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6
OkpTQmlnSW50OjphYnNvbHV0ZUFkZCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0
ZVN1Yik6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlz
b3IpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNv
cik6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkp
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3ApOgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6YWJzb2x1dGVBbmQpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6YWJz
b2x1dGVPcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUFuZE5vdCk6CisgICAg
ICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZVhvcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50
OjphYnNvbHV0ZUFkZE9uZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZVN1Yk9u
ZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKToKKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKToKKyAgICAgICAgKEpTQzo6
SlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeU1heGltdW0pOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6
dG9TdHJpbmdHZW5lcmljKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnRvU2hpZnRBbW91bnQp
OgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSGVhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjptdWx0aXBseUhlYXApOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpKU0JpZ0ludDo6ZGl2aWRlSGVhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmln
SW50Ojp1bmFyeU1pbnVzSGVhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpy
ZW1haW5kZXJIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmluY0hlYXAp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6ZGVjSGVhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjphZGRIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNCaWdJbnQ6OnN1YkhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0
d2lzZUFuZEhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZU9y
SGVhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlWG9ySGVhcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpsZWZ0U2hpZnRIZWFwKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnRIZWFwKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VOb3RIZWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNCaWdJbnQ6OmNvbXBhcmVUb0ludDMyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTQmlnSW50Lmg6CisgICAgICAgICogcnVudGltZS9PcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKEpTQzo6anNBZGRTbG93Q2FzZSk6CisgICAgICAgICogcnVudGltZS9PcGVyYXRp
b25zLmg6CisgICAgICAgIChKU0M6OmNvbXBhcmVCaWdJbnQpOgorICAgICAgICAoSlNDOjpjb21w
YXJlQmlnSW50MzJUb090aGVyUHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6YXJpdGhtZXRpY0Jp
bmFyeU9wKToKKyAgICAgICAgKEpTQzo6anNTdWIpOgorICAgICAgICAoSlNDOjpqc011bCk6Cisg
ICAgICAgIChKU0M6OmpzRGl2KToKKyAgICAgICAgKEpTQzo6anNSZW1haW5kZXIpOgorICAgICAg
ICAoSlNDOjpqc1Bvdyk6CisgICAgICAgIChKU0M6OmpzSW5jKToKKyAgICAgICAgKEpTQzo6anNE
ZWMpOgorICAgICAgICAoSlNDOjpqc0JpdHdpc2VOb3QpOgorICAgICAgICAoSlNDOjpzaGlmdCk6
CisgICAgICAgIChKU0M6OmpzTFNoaWZ0KToKKyAgICAgICAgKEpTQzo6anNSU2hpZnQpOgorICAg
ICAgICAoSlNDOjpiaXR3aXNlQmluYXJ5T3ApOgorICAgICAgICAoSlNDOjpqc0JpdHdpc2VBbmQp
OgorICAgICAgICAoSlNDOjpqc0JpdHdpc2VPcik6CisgICAgICAgIChKU0M6OmpzQml0d2lzZVhv
cik6CisKIDIwMjAtMDQtMjcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbSlNDXSA+Pj4gc2hvdWxkIGNhbGwgVG9OdW1lcmljCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2MDc5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4NzEsMTIgKzI4NzEsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFyCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkp
IHsKLSAgICAgICAgaW50MzJfdCB2YWx1ZSA9IHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKTsK
LSAgICAgICAgaWYgKHZhbHVlICE9IElOVF9NSU4pCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQmlnSW50MzIoLXZhbHVlKSk7Ci0gICAgICAgIHByaW1WYWx1ZSA9IEpTQmln
SW50OjpjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7Ci0gICAgfQorICAgIGlmIChwcmltVmFsdWUuaXNC
aWdJbnQzMigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFy
eU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpKTsKICNlbmRpZgogICAgIGlm
IChwcmltVmFsdWUuaXNIZWFwQmlnSW50KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5hc0hlYXBCaWdJbnQoKSkpOwpA
QCAtMjkwNCwxMyArMjkwMCw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXIKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIo
KSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigp
OwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikgewotICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7Ci0gICAgICAgICAgICBhcml0aFByb2ZpbGUtPm9ic2Vy
dmVSZXN1bHQocmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKLSAgICAgICAgfQotICAgICAgICBwcmltVmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJv
bSh2bSwgdmFsdWUpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFyeU1p
bnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBhcml0aFByb2Zp
bGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwogICAgIH0KICNlbmRpZgogICAgIGlmIChwcmltVmFsdWUuaXNIZWFwQmlnSW50
KCkpIHsKQEAgLTI5NTAsMTMgKzI5NDIsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkFyCiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKHByaW1WYWx1ZS5pc0Jp
Z0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJfdCB2YWx1ZSA9IHByaW1WYWx1ZS5iaWdJbnQzMkFz
SW50MzIoKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IElOVF9NSU4pIHsKLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0ganNCaWdJbnQzMigtdmFsdWUpOwotICAgICAgICAgICAgYXJpdGhQcm9maWxl
LT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbVZhbHVlID0gSlNCaWdJbnQ6OmNy
ZWF0ZUZyb20odm0sIHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6
dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgYXJp
dGhQcm9maWxlLT5vYnNlcnZlUmVzdWx0KHJlc3VsdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVh
cEJpZ0ludCgpKSB7CkBAIC0yOTk1LDEyICsyOTgzLDggQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25BcgogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIC8vIEZJWE1FOiB3
aHkgZG9lcyB0aGlzIGZ1bmN0aW9uIHByb2ZpbGUgdGhlIGFyZ3VtZW50IGJ1dCBub3QgdGhlIHJl
c3VsdD8KLSAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQzMl90
IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICBpZiAodmFsdWUg
IT0gSU5UX01JTikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCaWdJbnQz
MigtdmFsdWUpKTsKLSAgICAgICAgcHJpbVZhbHVlID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0s
IHZhbHVlKTsKLSAgICB9CisgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0ludDMyKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWludXModm0sIHByaW1WYWx1
ZS5iaWdJbnQzMkFzSW50MzIoKSkpOwogI2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBC
aWdJbnQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlN
aW51cyh2bSwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI2
MDc5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OSwxNCArNTQ5LDEwIEBAIFNMT1dfUEFUSF9ERUNMKHNs
b3dfcGF0aF9uZWdhdGUpCiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKHByaW1WYWx1ZS5p
c0JpZ0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJfdCB2YWx1ZSA9IHByaW1WYWx1ZS5iaWdJbnQz
MkFzSW50MzIoKTsKLSAgICAgICAgaWYgKHZhbHVlICE9IElOVF9NSU4pIHsKLSAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0ganNCaWdJbnQzMigtdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX1dJ
VEhfUFJPRklMSU5HKHJlc3VsdCwgewotICAgICAgICAgICAgICAgIHVwZGF0ZUFyaXRoUHJvZmls
ZUZvclVuYXJ5QXJpdGhPcChtZXRhZGF0YSwgcmVzdWx0LCBvcGVyYW5kKTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHByaW1WYWx1ZSA9IEpTQmlnSW50Ojpj
cmVhdGVGcm9tKHZtLCB2YWx1ZSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6
OnVuYXJ5TWludXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIFJF
VFVSTl9XSVRIX1BST0ZJTElORyhyZXN1bHQsIHsKKyAgICAgICAgICAgIHVwZGF0ZUFyaXRoUHJv
ZmlsZUZvclVuYXJ5QXJpdGhPcChtZXRhZGF0YSwgcmVzdWx0LCBvcGVyYW5kKTsKKyAgICAgICAg
fSk7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQmlnSW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JpZ0ludC5jcHAJKHJldmlzaW9uIDI2MDc5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQmlnSW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDM1ICsyMzEsMTI4
IEBAIFN0cmluZyBKU0JpZ0ludDo6dHJ5R2V0U3RyaW5nKFZNJiB2bSwgSlMKICAgICByZXR1cm4g
dG9TdHJpbmdHZW5lcmljKHZtLCBudWxscHRyLCBiaWdJbnQsIHJhZGl4KTsKIH0KIAorY2xhc3Mg
SGVhcEJpZ0ludEltcGwgeworcHVibGljOgorICAgIGV4cGxpY2l0IEhlYXBCaWdJbnRJbXBsKEpT
QmlnSW50KiBiaWdJbnQpCisgICAgICAgIDogbV9iaWdJbnQoYmlnSW50KQorICAgIHsgfQorCisg
ICAgQUxXQVlTX0lOTElORSBib29sIGlzWmVybygpIHsgcmV0dXJuIG1fYmlnSW50LT5pc1plcm8o
KTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaWduKCkgeyByZXR1cm4gbV9iaWdJbnQtPnNp
Z24oKTsgfQorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9i
aWdJbnQtPmxlbmd0aCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBKU0JpZ0ludDo6RGlnaXQgZGln
aXQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9iaWdJbnQtPmRpZ2l0KGkpOyB9CisgICAgQUxXQVlT
X0lOTElORSBKU0JpZ0ludCogdG9IZWFwQmlnSW50KFZNJikgeyByZXR1cm4gbV9iaWdJbnQ7IH0K
KworcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IEpTQmlnSW50OjpJbXBsUmVzdWx0OworICAg
IEpTQmlnSW50KiBtX2JpZ0ludDsKK307CisKK2NsYXNzIEludDMyQmlnSW50SW1wbCB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgSW50MzJCaWdJbnRJbXBsKGludDMyX3QgdmFsdWUpCisgICAgICAg
IDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1pl
cm8oKSB7IHJldHVybiAhbV92YWx1ZTsgfQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBzaWduKCkg
eyByZXR1cm4gbV92YWx1ZSA8IDA7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGxlbmd0
aCgpIHsgcmV0dXJuIGlzWmVybygpID8gMCA6IDE7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTQmln
SW50OjpEaWdpdCBkaWdpdCh1bnNpZ25lZCBpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxlbmd0
aCgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpLCBpID09IDApOworICAgICAgICBpZiAoc2ln
bigpKQorICAgICAgICAgICAgcmV0dXJuIC1zdGF0aWNfY2FzdDxpbnQ2NF90PihtX3ZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU0Jp
Z0ludCogdG9IZWFwQmlnSW50KFZNJiB2bSkgeyByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20o
dm0sIG1fdmFsdWUpOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIHN0cnVjdCBKU0JpZ0ludDo6
SW1wbFJlc3VsdDsKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCitBTFdBWVNfSU5MSU5FIEpT
QmlnSW50OjpJbXBsUmVzdWx0OjpJbXBsUmVzdWx0KEhlYXBCaWdJbnRJbXBsJiBoZWFwSW1wbCkK
KyAgICA6IHBheWxvYWQoaGVhcEltcGwubV9iaWdJbnQpCit7IH0KKworQUxXQVlTX0lOTElORSBK
U0JpZ0ludDo6SW1wbFJlc3VsdDo6SW1wbFJlc3VsdChKU0JpZ0ludCogaGVhcEJpZ0ludCkKKyAg
ICA6IHBheWxvYWQoaGVhcEJpZ0ludCkKK3sgfQorCitBTFdBWVNfSU5MSU5FIEpTQmlnSW50OjpJ
bXBsUmVzdWx0OjpJbXBsUmVzdWx0KEludDMyQmlnSW50SW1wbCYgaW50MzJJbXBsKQorICAgIDog
cGF5bG9hZChqc0JpZ0ludDMyKGludDMySW1wbC5tX3ZhbHVlKSkKK3sgfQorCitBTFdBWVNfSU5M
SU5FIEpTQmlnSW50OjpJbXBsUmVzdWx0OjpJbXBsUmVzdWx0KEpTVmFsdWUgdmFsdWUpCisgICAg
OiBwYXlsb2FkKHZhbHVlKQoreyB9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdHJ5
Q29udmVydFRvQmlnSW50MzIoSlNCaWdJbnQqIGJpZ0ludCkKK3sKKyNpZiBVU0UoQklHSU5UMzIp
CisgICAgaWYgKFVOTElLRUxZKCFiaWdJbnQpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwor
CisgICAgaWYgKGJpZ0ludC0+bGVuZ3RoKCkgPD0gMSkgeworICAgICAgICBpZiAoIWJpZ0ludC0+
bGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKKyAgICAgICAgSlNC
aWdJbnQ6OkRpZ2l0IGRpZ2l0ID0gYmlnSW50LT5kaWdpdCgwKTsKKyAgICAgICAgaWYgKGJpZ0lu
dC0+c2lnbigpKSB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2NF90IG1heFZh
bHVlID0gLXN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1pbigpKTsKKyAgICAgICAgICAgIGlmIChkaWdpdCA8PSBtYXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pigtc3RhdGljX2Nhc3Q8
aW50NjRfdD4oZGlnaXQpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGF0aWMg
Y29uc3RleHByIHVpbnQ2NF90IG1heFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKTsKKyAgICAgICAgICAgIGlmIChkaWdpdCA8
PSBtYXhWYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihkaWdpdCkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1
cm4gYmlnSW50OworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHRyeUNvbnZlcnRU
b0JpZ0ludDMyKEpTQmlnSW50OjpJbXBsUmVzdWx0IGltcGxSZXN1bHQpCit7CisgICAgaWYgKCFp
bXBsUmVzdWx0LnBheWxvYWQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgaWYgKGlt
cGxSZXN1bHQucGF5bG9hZC5pc0JpZ0ludDMyKCkpCisgICAgICAgIHJldHVybiBpbXBsUmVzdWx0
LnBheWxvYWQ7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGltcGxSZXN1bHQucGF5
bG9hZC5hc0hlYXBCaWdJbnQoKSk7Cit9CisKIC8vIE11bHRpcGxpZXMge3RoaXN9IHdpdGgge2Zh
Y3Rvcn0gYW5kIGFkZHMge3N1bW1hbmR9IHRvIHRoZSByZXN1bHQuCiB2b2lkIEpTQmlnSW50Ojpp
bnBsYWNlTXVsdGlwbHlBZGQoRGlnaXQgZmFjdG9yLCBEaWdpdCBzdW1tYW5kKQogewotICAgIGlu
dGVybmFsTXVsdGlwbHlBZGQodGhpcywgZmFjdG9yLCBzdW1tYW5kLCBsZW5ndGgoKSwgdGhpcyk7
CisgICAgaW50ZXJuYWxNdWx0aXBseUFkZChIZWFwQmlnSW50SW1wbCB7IHRoaXMgfSwgZmFjdG9y
LCBzdW1tYW5kLCBsZW5ndGgoKSwgdGhpcyk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6ZXhw
b25lbnRpYXRlSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogYmFz
ZSwgSlNCaWdJbnQqIGV4cG9uZW50KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpleHBv
bmVudGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIGJh
c2UsIEJpZ0ludEltcGwyIGV4cG9uZW50KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBp
ZiAoZXhwb25lbnQtPnNpZ24oKSkgeworICAgIGlmIChleHBvbmVudC5zaWduKCkpIHsKICAgICAg
ICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJOZWdhdGl2ZSBleHBvbmVu
dCBpcyBub3QgYWxsb3dlZCJfcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIC8vIDIuIElmIGJhc2UgaXMgMG4gYW5kIGV4cG9uZW50IGlzIDBuLCByZXR1cm4gMW4uCi0g
ICAgaWYgKGV4cG9uZW50LT5pc1plcm8oKSkKKyAgICBpZiAoZXhwb25lbnQuaXNaZXJvKCkpCiAg
ICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgMSk7CiAgICAgCiAgICAgLy8g
My4gUmV0dXJuIGEgQmlnSW50IHJlcHJlc2VudGluZyB0aGUgbWF0aGVtYXRpY2FsIHZhbHVlIG9m
IGJhc2UgcmFpc2VkCiAgICAgLy8gICAgdG8gdGhlIHBvd2VyIGV4cG9uZW50LgotICAgIGlmIChi
YXNlLT5pc1plcm8oKSkKKyAgICBpZiAoYmFzZS5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIGJh
c2U7CiAKLSAgICBpZiAoYmFzZS0+bGVuZ3RoKCkgPT0gMSAmJiBiYXNlLT5kaWdpdCgwKSA9PSAx
KSB7CisgICAgaWYgKGJhc2UubGVuZ3RoKCkgPT0gMSAmJiBiYXNlLmRpZ2l0KDApID09IDEpIHsK
ICAgICAgICAgLy8gKC0xKSAqKiBldmVuX251bWJlciA9PSAxLgotICAgICAgICBpZiAoYmFzZS0+
c2lnbigpICYmICEoZXhwb25lbnQtPmRpZ2l0KDApICYgMSkpCi0gICAgICAgICAgICByZXR1cm4g
SlNCaWdJbnQ6OnVuYXJ5TWludXNIZWFwKHZtLCBiYXNlKTsKKyAgICAgICAgaWYgKGJhc2Uuc2ln
bigpICYmICEoZXhwb25lbnQuZGlnaXQoMCkgJiAxKSkKKyAgICAgICAgICAgIHJldHVybiBKU0Jp
Z0ludDo6dW5hcnlNaW51c0ltcGwodm0sIGJhc2UpOwogCiAgICAgICAgIC8vICgtMSkgKiogb2Rk
X251bWJlciA9PSAtMTsgMSAqKiBhbnl0aGluZyA9PSAxLgogICAgICAgICByZXR1cm4gYmFzZTsK
QEAgLTI2OCwxMiArMzYxLDEyIEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSGVh
cChKU0cKICAgICAvLyBGb3IgYWxsIGJhc2VzID49IDIsIHZlcnkgbGFyZ2UgZXhwb25lbnRzIHdv
dWxkIGxlYWQgdG8gdW5yZXByZXNlbnRhYmxlCiAgICAgLy8gcmVzdWx0cy4KICAgICBzdGF0aWNf
YXNzZXJ0KG1heExlbmd0aEJpdHMgPCBzdGQ6Om51bWVyaWNfbGltaXRzPERpZ2l0Pjo6bWF4KCks
ICJtYXhMZW5ndGhCaXRzIG5lZWRzIHRvIGJlIGxlc3MgdGhhbiBkaWdpdDo6bWF4KCkiKTsKLSAg
ICBpZiAoZXhwb25lbnQtPmxlbmd0aCgpID4gMSkgeworICAgIGlmIChleHBvbmVudC5sZW5ndGgo
KSA+IDEpIHsKICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJC
aWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRpb24gaXMgdG9vIGJpZyJfcyk7CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIERpZ2l0IGV4cFZhbHVlID0gZXhwb25l
bnQtPmRpZ2l0KDApOworICAgIERpZ2l0IGV4cFZhbHVlID0gZXhwb25lbnQuZGlnaXQoMCk7CiAg
ICAgaWYgKGV4cFZhbHVlID09IDEpCiAgICAgICAgIHJldHVybiBiYXNlOwogICAgIGlmIChleHBW
YWx1ZSA+PSBtYXhMZW5ndGhCaXRzKSB7CkBAIC0yODMsNyArMzc2LDcgQEAgSlNCaWdJbnQqIEpT
QmlnSW50OjpleHBvbmVudGlhdGVIZWFwKEpTRwogCiAgICAgc3RhdGljX2Fzc2VydChtYXhMZW5n
dGhCaXRzIDw9IG1heEludCwgIm1heExlbmd0aEJpdHMgbmVlZHMgdG8gYmUgPD0gbWF4SW50Iik7
CiAgICAgaW50IG4gPSBzdGF0aWNfY2FzdDxpbnQ+KGV4cFZhbHVlKTsKLSAgICBpZiAoYmFzZS0+
bGVuZ3RoKCkgPT0gMSAmJiBiYXNlLT5kaWdpdCgwKSA9PSAyKSB7CisgICAgaWYgKGJhc2UubGVu
Z3RoKCkgPT0gMSAmJiBiYXNlLmRpZ2l0KDApID09IDIpIHsKICAgICAgICAgLy8gRmFzdCBwYXRo
IGZvciAyXm4uCiAgICAgICAgIGludCBuZWVkZWREaWdpdHMgPSAxICsgKG4gLyBkaWdpdEJpdHMp
OwogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5n
dGgoZ2xvYmFsT2JqZWN0LCBuZWVkZWREaWdpdHMpOwpAQCAtMjk0LDI5ICszODcsMjkgQEAgSlNC
aWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVIZWFwKEpTRwogICAgICAgICBEaWdpdCBtc2Qg
PSBzdGF0aWNfY2FzdDxEaWdpdD4oMSkgPDwgKG4gJSBkaWdpdEJpdHMpOwogICAgICAgICByZXN1
bHQtPnNldERpZ2l0KG5lZWRlZERpZ2l0cyAtIDEsIG1zZCk7CiAgICAgICAgIC8vIFJlc3VsdCBp
cyBuZWdhdGl2ZSBmb3Igb2RkIHBvd2VycyBvZiAtMm4uCi0gICAgICAgIGlmIChiYXNlLT5zaWdu
KCkpIAorICAgICAgICBpZiAoYmFzZS5zaWduKCkpIAogICAgICAgICAgICAgcmVzdWx0LT5zZXRT
aWduKHN0YXRpY19jYXN0PGJvb2w+KG4gJiAxKSk7CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gbnVsbHB0cjsKLSAgICBKU0JpZ0ludCog
cnVubmluZ1NxdWFyZSA9IGJhc2U7CisgICAgSlNCaWdJbnQqIHJ1bm5pbmdTcXVhcmUgPSBiYXNl
LnRvSGVhcEJpZ0ludCh2bSk7CiAKICAgICAvLyBUaGlzIGltcGxpY2l0bHkgc2V0cyB0aGUgcmVz
dWx0J3Mgc2lnbiBjb3JyZWN0bHkuCiAgICAgaWYgKG4gJiAxKQotICAgICAgICByZXN1bHQgPSBi
YXNlOworICAgICAgICByZXN1bHQgPSBiYXNlLnRvSGVhcEJpZ0ludCh2bSk7CiAKICAgICBuID4+
PSAxOwogICAgIGZvciAoOyBuOyBuID4+PSAxKSB7Ci0gICAgICAgIEpTQmlnSW50KiBtYXliZVJl
c3VsdCA9IEpTQmlnSW50OjptdWx0aXBseUhlYXAoZ2xvYmFsT2JqZWN0LCBydW5uaW5nU3F1YXJl
LCBydW5uaW5nU3F1YXJlKTsKKyAgICAgICAgSlNCaWdJbnQqIG1heWJlUmVzdWx0ID0gSlNCaWdJ
bnQ6Om11bHRpcGx5SW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcnVubmluZ1Nx
dWFyZSB9LCBIZWFwQmlnSW50SW1wbCB7IHJ1bm5pbmdTcXVhcmUgfSkucGF5bG9hZC5hc0hlYXBC
aWdJbnQoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAg
ICAgICAgIHJ1bm5pbmdTcXVhcmUgPSBtYXliZVJlc3VsdDsKICAgICAgICAgaWYgKG4gJiAxKSB7
CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW5u
aW5nU3F1YXJlOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbWF5YmVSZXN1
bHQgPSBKU0JpZ0ludDo6bXVsdGlwbHlIZWFwKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBydW5uaW5n
U3F1YXJlKTsKKyAgICAgICAgICAgICAgICBtYXliZVJlc3VsdCA9IEpTQmlnSW50OjptdWx0aXBs
eUltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBIZWFwQmlnSW50
SW1wbCB7IHJ1bm5pbmdTcXVhcmUgfSkucGF5bG9hZC5hc0hlYXBCaWdJbnQoKTsKICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtYXliZVJlc3VsdDsKICAgICAgICAgICAgIH0KQEAgLTMyNiwzNSArNDE5
LDcwIEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlSGVhcChKU0cKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6Om11bHRpcGx5SGVhcChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCitKU1ZhbHVl
IEpTQmlnSW50OjpleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVy
dFRvQmlnSW50MzIoZXhwb25lbnRpYXRlSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBs
IHsgYmFzZSB9LCBIZWFwQmlnSW50SW1wbCB7IGV4cG9uZW50IH0pKTsKK30KKworSlNWYWx1ZSBK
U0JpZ0ludDo6ZXhwb25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmln
SW50KiBiYXNlLCBpbnQzMl90IGV4cG9uZW50KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9C
aWdJbnQzMihleHBvbmVudGlhdGVJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBi
YXNlIH0sIEludDMyQmlnSW50SW1wbCB7IGV4cG9uZW50IH0pKTsKK30KKworSlNWYWx1ZSBKU0Jp
Z0ludDo6ZXhwb25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qg
YmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihleHBvbmVudGlhdGVJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgYmFz
ZSB9LCBIZWFwQmlnSW50SW1wbCB7IGV4cG9uZW50IH0pKTsKK30KKworSlNWYWx1ZSBKU0JpZ0lu
dDo6ZXhwb25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgYmFz
ZSwgaW50MzJfdCBleHBvbmVudCkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIo
ZXhwb25lbnRpYXRlSW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50SW1wbCB7IGJhc2UgfSwg
SW50MzJCaWdJbnRJbXBsIHsgZXhwb25lbnQgfSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQg
SlNCaWdJbnQ6Om11bHRpcGx5SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJ
bnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBp
ZiAoeC0+aXNaZXJvKCkpCisgICAgaWYgKHguaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiB4Owot
ICAgIGlmICh5LT5pc1plcm8oKSkKKyAgICBpZiAoeS5pc1plcm8oKSkKICAgICAgICAgcmV0dXJu
IHk7CiAKLSAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSB4LT5sZW5ndGgoKSArIHktPmxlbmd0
aCgpOworICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHgubGVuZ3RoKCkgKyB5Lmxlbmd0aCgp
OwogICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChn
bG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CiAgICAgcmVzdWx0LT5pbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlwZTo6
V2l0aFplcm8pOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHgtPmxlbmd0aCgpOyBp
KyspCi0gICAgICAgIG11bHRpcGx5QWNjdW11bGF0ZSh5LCB4LT5kaWdpdChpKSwgcmVzdWx0LCBp
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgeC5sZW5ndGgoKTsgaSsrKQorICAgICAg
ICBtdWx0aXBseUFjY3VtdWxhdGUoeSwgeC5kaWdpdChpKSwgcmVzdWx0LCBpKTsKIAotICAgIHJl
c3VsdC0+c2V0U2lnbih4LT5zaWduKCkgIT0geS0+c2lnbigpKTsKKyAgICByZXN1bHQtPnNldFNp
Z24oeC5zaWduKCkgIT0geS5zaWduKCkpOwogICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2
bSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6ZGl2aWRlSGVhcChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCitKU1ZhbHVlIEpTQmlnSW50
OjptdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKG11bHRpcGx5SW1w
bChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkg
fSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6bXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVy
dFRvQmlnSW50MzIobXVsdGlwbHlJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsg
eCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6bXVsdGlw
bHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSkK
K3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIobXVsdGlwbHlJbXBsKGdsb2JhbE9i
amVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgor
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmRpdmlkZUltcGwoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICAvLyAx
LiBJZiB5IGlzIDBuLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBpZiAoeS0+aXNaZXJvKCkpIHsKKyAgICBpZiAoeS5pc1plcm8oKSkgewog
ICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52
YWxpZCBkaXZpc29yIHZhbHVlLiJfcyk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
QEAgLTM2MywxOSArNDkxLDE5IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6ZGl2aWRlSGVhcChKU0ds
b2JhbE8KICAgICAvLyAzLiBSZXR1cm4gYSBCaWdJbnQgcmVwcmVzZW50aW5nIHF1b3RpZW50IHJv
dW5kZWQgdG93YXJkcyAwIHRvIHRoZSBuZXh0CiAgICAgLy8gICAgaW50ZWdyYWwgdmFsdWUuCiAg
ICAgaWYgKGFic29sdXRlQ29tcGFyZSh4LCB5KSA9PSBDb21wYXJpc29uUmVzdWx0OjpMZXNzVGhh
bikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVplcm8odm0pOworICAgICAgICByZXR1cm4ganNCaWdJ
bnQzMigwKTsKIAogICAgIEpTQmlnSW50KiBxdW90aWVudCA9IG51bGxwdHI7Ci0gICAgYm9vbCBy
ZXN1bHRTaWduID0geC0+c2lnbigpICE9IHktPnNpZ24oKTsKLSAgICBpZiAoeS0+bGVuZ3RoKCkg
PT0gMSkgewotICAgICAgICBEaWdpdCBkaXZpc29yID0geS0+ZGlnaXQoMCk7CisgICAgYm9vbCBy
ZXN1bHRTaWduID0geC5zaWduKCkgIT0geS5zaWduKCk7CisgICAgaWYgKHkubGVuZ3RoKCkgPT0g
MSkgeworICAgICAgICBEaWdpdCBkaXZpc29yID0geS5kaWdpdCgwKTsKICAgICAgICAgaWYgKGRp
dmlzb3IgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHRTaWduID09IHgtPnNpZ24oKSA/
IHggOiBKU0JpZ0ludDo6dW5hcnlNaW51c0hlYXAodm0sIHgpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdFNpZ24gPT0geC5zaWduKCkgPyBKU0JpZ0ludDo6SW1wbFJlc3VsdCB7IHggfSA6IEpT
QmlnSW50Ojp1bmFyeU1pbnVzSW1wbCh2bSwgeCk7CiAKICAgICAgICAgRGlnaXQgcmVtYWluZGVy
OwogICAgICAgICBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsICZx
dW90aWVudCwgcmVtYWluZGVyKTsKICAgICB9IGVsc2UgewotICAgICAgICBhYnNvbHV0ZURpdldp
dGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeSwgJnF1b3RpZW50LCBudWxscHRyKTsK
KyAgICAgICAgYWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHku
dG9IZWFwQmlnSW50KHZtKSwgJnF1b3RpZW50LCBudWxscHRyKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAgfQogCkBAIC0zODMsMzMgKzUxMSw1NSBA
QCBKU0JpZ0ludCogSlNCaWdJbnQ6OmRpdmlkZUhlYXAoSlNHbG9iYWxPCiAgICAgcmV0dXJuIHF1
b3RpZW50LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmNvcHkoVk0m
IHZtLCBKU0JpZ0ludCogeCkKK0pTVmFsdWUgSlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiB7Ci0gICAgQVNTRVJU
KCF4LT5pc1plcm8oKSk7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGRpdmlkZUlt
cGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5
IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0
VG9CaWdJbnQzMihkaXZpZGVJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0s
IEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7Cisg
ICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGRpdmlkZUltcGwoZ2xvYmFsT2JqZWN0LCBJ
bnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CiAKLSAgICBK
U0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0s
IHgtPmxlbmd0aCgpKTsKLSAgICBzdGQ6OmNvcHkoeC0+ZGF0YVN0b3JhZ2UoKSwgeC0+ZGF0YVN0
b3JhZ2UoKSArIHgtPmxlbmd0aCgpLCByZXN1bHQtPmRhdGFTdG9yYWdlKCkpOwotICAgIHJlc3Vs
dC0+c2V0U2lnbih4LT5zaWduKCkpOwordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CitK
U0JpZ0ludCogSlNCaWdJbnQ6OmNvcHkoVk0mIHZtLCBCaWdJbnRJbXBsIHgpCit7CisgICAgQVNT
RVJUKCF4LmlzWmVybygpKTsKKworICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3Jl
YXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgeC5sZW5ndGgoKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlc3VsdC0+bGVuZ3RoKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LT5zZXRE
aWdpdChpLCB4LmRpZ2l0KGkpKTsKKyAgICByZXN1bHQtPnNldFNpZ24oeC5zaWduKCkpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6dW5hcnlNaW51c0hlYXAo
Vk0mIHZtLCBKU0JpZ0ludCogeCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNC
aWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBsKFZNJiB2bSwgQmlnSW50
SW1wbCB4KQogewotICAgIGlmICh4LT5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHg7CisgICAg
aWYgKHguaXNaZXJvKCkpCisgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOwogCiAgICAgSlNC
aWdJbnQqIHJlc3VsdCA9IGNvcHkodm0sIHgpOwotICAgIHJlc3VsdC0+c2V0U2lnbigheC0+c2ln
bigpKTsKKyAgICByZXN1bHQtPnNldFNpZ24oIXguc2lnbigpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OnJlbWFpbmRlckhlYXAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorSlNWYWx1ZSBKU0JpZ0lu
dDo6dW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4KQoreworICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMih1bmFyeU1pbnVzSW1wbCh2bSwgSGVhcEJpZ0ludEltcGwgeyB4IH0pKTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyZW1haW5kZXJJbXBsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAg
ICAgLy8gMS4gSWYgeSBpcyAwbiwgdGhyb3cgYSBSYW5nZUVycm9yIGV4Y2VwdGlvbi4KICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogICAgIAotICAgIGlmICh5LT5pc1plcm8oKSkgeworICAgIGlmICh5Lmlz
WmVybygpKSB7CiAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
MCBpcyBhbiBpbnZhbGlkIGRpdmlzb3IgdmFsdWUuIl9zKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQpAQCAtNDIwLDU4ICs1NzAsODAgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpyZW1h
aW5kZXJIZWFwKEpTR2xvYgogICAgICAgICByZXR1cm4geDsKIAogICAgIEpTQmlnSW50KiByZW1h
aW5kZXI7Ci0gICAgaWYgKHktPmxlbmd0aCgpID09IDEpIHsKLSAgICAgICAgRGlnaXQgZGl2aXNv
ciA9IHktPmRpZ2l0KDApOworICAgIGlmICh5Lmxlbmd0aCgpID09IDEpIHsKKyAgICAgICAgRGln
aXQgZGl2aXNvciA9IHkuZGlnaXQoMCk7CiAgICAgICAgIGlmIChkaXZpc29yID09IDEpCi0gICAg
ICAgICAgICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgICAgICByZXR1cm4ganNCaWdJ
bnQzMigwKTsKIAogICAgICAgICBEaWdpdCByZW1haW5kZXJEaWdpdDsKICAgICAgICAgYWJzb2x1
dGVEaXZXaXRoRGlnaXREaXZpc29yKHZtLCB4LCBkaXZpc29yLCBudWxscHRyLCByZW1haW5kZXJE
aWdpdCk7CiAgICAgICAgIGlmICghcmVtYWluZGVyRGlnaXQpCi0gICAgICAgICAgICByZXR1cm4g
Y3JlYXRlWmVybyh2bSk7CisgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigwKTsKIAogICAg
ICAgICByZW1haW5kZXIgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCAxKTsKICAgICAg
ICAgcmVtYWluZGVyLT5zZXREaWdpdCgwLCByZW1haW5kZXJEaWdpdCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgYWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihnbG9iYWxPYmplY3QsIHgsIHks
IG51bGxwdHIsICZyZW1haW5kZXIpOworICAgICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZp
c29yKGdsb2JhbE9iamVjdCwgeCwgeS50b0hlYXBCaWdJbnQodm0pLCBudWxscHRyLCAmcmVtYWlu
ZGVyKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAgICAg
fQogCi0gICAgcmVtYWluZGVyLT5zZXRTaWduKHgtPnNpZ24oKSk7CisgICAgcmVtYWluZGVyLT5z
ZXRTaWduKHguc2lnbigpKTsKICAgICByZXR1cm4gcmVtYWluZGVyLT5yaWdodFRyaW0odm0pOwog
fQorSlNWYWx1ZSBKU0JpZ0ludDo6cmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRv
QmlnSW50MzIocmVtYWluZGVySW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9
LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6cmVtYWluZGVy
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7
CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHJlbWFpbmRlckltcGwoZ2xvYmFsT2Jq
ZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitK
U1ZhbHVlIEpTQmlnSW50OjpyZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50
MzIocmVtYWluZGVySW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50SW1wbCB7IHggfSwgSGVh
cEJpZ0ludEltcGwgeyB5IH0pKTsKK30KIAotSlNCaWdJbnQqIEpTQmlnSW50OjppbmNIZWFwKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQordGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGw+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6aW5jSW1wbChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgpCiB7Ci0gICAgaWYgKCF4
LT5zaWduKCkpCisgICAgaWYgKCF4LnNpZ24oKSkKICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRk
T25lKGdsb2JhbE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6VW5zaWduZWQpOwotICAgIEpTQmlnSW50
KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHgtPmxlbmd0aCgpKTsK
KyAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4
Lmxlbmd0aCgpKTsKICAgICBpZiAocmVzdWx0LT5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICByZXN1bHQtPnNldFNpZ24odHJ1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotSlNCaWdJbnQqIEpTQmlnSW50OjpkZWNIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4KQorSlNWYWx1ZSBKU0JpZ0ludDo6aW5jKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQogewotICAgIGlmICh4LT5pc1plcm8oKSkgewotICAg
ICAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlRnJvbShnbG9iYWxPYmplY3QtPnZtKCksIDEp
OwotICAgICAgICByZXN1bHQtPnNldFNpZ24odHJ1ZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotICAgIGlmICgheC0+c2lnbigpKQotICAgICAgICByZXR1cm4gYWJzb2x1dGVTdWJP
bmUoZ2xvYmFsT2JqZWN0LCB4LCB4LT5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRU
b0JpZ0ludDMyKGluY0ltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSkpOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK0pTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpkZWNJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwgeCkKK3sKKyAgICBpZiAoeC5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIo
LTEpOworICAgIGlmICgheC5zaWduKCkpCisgICAgICAgIHJldHVybiBhYnNvbHV0ZVN1Yk9uZShn
bG9iYWxPYmplY3QsIHgsIHgubGVuZ3RoKCkpOwogICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShn
bG9iYWxPYmplY3QsIHgsIFNpZ25PcHRpb246OlNpZ25lZCk7CiB9CiAKLUpTQmlnSW50KiBKU0Jp
Z0ludDo6YWRkSGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpCitKU1ZhbHVlIEpTQmlnSW50OjpkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNCaWdJbnQqIHgpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KGRlY0ltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSkpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJ
bnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFkZEltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgYm9vbCB4U2lnbiA9IHgtPnNpZ24oKTsKKyAgICBib29sIHhT
aWduID0geC5zaWduKCk7CiAKICAgICAvLyB4ICsgeSA9PSB4ICsgeQogICAgIC8vIC14ICsgLXkg
PT0gLSh4ICsgeSkKLSAgICBpZiAoeFNpZ24gPT0geS0+c2lnbigpKQorICAgIGlmICh4U2lnbiA9
PSB5LnNpZ24oKSkKICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkKGdsb2JhbE9iamVjdCwgeCwg
eSwgeFNpZ24pOwogCiAgICAgLy8geCArIC15ID09IHggLSB5ID09IC0oeSAtIHgpCkBAIC00ODIs
MTIgKzY1NCwyNSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFkZEhlYXAoSlNHbG9iYWxPYmplCiAK
ICAgICByZXR1cm4gYWJzb2x1dGVTdWIodm0sIHksIHgsICF4U2lnbik7CiB9CitKU1ZhbHVlIEpT
QmlnSW50OjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihhZGRJbXBsKGds
b2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7
Cit9CitKU1ZhbHVlIEpTQmlnSW50OjphZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50
MzIoYWRkSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0lu
dEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmFkZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlD
b252ZXJ0VG9CaWdJbnQzMihhZGRJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsg
eCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OnN1
YkhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpzdWJJbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGJvb2wgeFNpZ24gPSB4LT5zaWduKCk7Ci0g
ICAgaWYgKHhTaWduICE9IHktPnNpZ24oKSkgeworICAgIGJvb2wgeFNpZ24gPSB4LnNpZ24oKTsK
KyAgICBpZiAoeFNpZ24gIT0geS5zaWduKCkpIHsKICAgICAgICAgLy8geCAtICgteSkgPT0geCAr
IHkKICAgICAgICAgLy8gKC14KSAtIHkgPT0gLSh4ICsgeSkKICAgICAgICAgcmV0dXJuIGFic29s
dXRlQWRkKGdsb2JhbE9iamVjdCwgeCwgeSwgeFNpZ24pOwpAQCAtNTAxLDE1MiArNjg2LDI1OCBA
QCBKU0JpZ0ludCogSlNCaWdJbnQ6OnN1YkhlYXAoSlNHbG9iYWxPYmplCiAgICAgcmV0dXJuIGFi
c29sdXRlU3ViKHZtLCB5LCB4LCAheFNpZ24pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmJp
dHdpc2VBbmRIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSkKK0pTVmFsdWUgSlNCaWdJbnQ6OnN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKHN1YkltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwg
SGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OnN1YihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJl
dHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihzdWJJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0lu
dEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0lu
dDo6c3ViKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQq
IHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHN1YkltcGwoZ2xvYmFsT2Jq
ZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitK
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZUFuZEltcGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF4LT5zaWduKCkgJiYgIXktPnNpZ24oKSkgeworICAg
IGlmICgheC5zaWduKCkgJiYgIXkuc2lnbigpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsK
ICAgICAgICAgcmV0dXJuIGFic29sdXRlQW5kKHZtLCB4LCB5KTsKICAgICB9CiAgICAgCi0gICAg
aWYgKHgtPnNpZ24oKSAmJiB5LT5zaWduKCkpIHsKLSAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9
IHN0ZDo6bWF4KHgtPmxlbmd0aCgpLCB5LT5sZW5ndGgoKSkgKyAxOworICAgIGlmICh4LnNpZ24o
KSAmJiB5LnNpZ24oKSkgeworICAgICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5s
ZW5ndGgoKSwgeS5sZW5ndGgoKSkgKyAxOwogICAgICAgICAvLyAoLXgpICYgKC15KSA9PSB+KHgt
MSkgJiB+KHktMSkgPT0gfigoeC0xKSB8ICh5LTEpKQogICAgICAgICAvLyA9PSAtKCgoeC0xKSB8
ICh5LTEpKSArIDEpCiAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShn
bG9iYWxPYmplY3QsIHgsIHJlc3VsdExlbmd0aCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOwogCi0gICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3Vi
T25lKGdsb2JhbE9iamVjdCwgeSwgeS0+bGVuZ3RoKCkpOworICAgICAgICBKU0JpZ0ludCogeTEg
PSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJz
b2x1dGVPcih2bSwgcmVzdWx0LCB5MSk7CisgICAgICAgIHJlc3VsdCA9IGFic29sdXRlT3Iodm0s
IEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CiAgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2Jh
bE9iamVjdCwgcmVzdWx0LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAgICAgICByZXR1cm4gYWJz
b2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWdu
T3B0aW9uOjpTaWduZWQpOwogICAgIH0KIAotICAgIEFTU0VSVCh4LT5zaWduKCkgIT0geS0+c2ln
bigpKTsKLSAgICAvLyBBc3N1bWUgdGhhdCB4IGlzIHRoZSBwb3NpdGl2ZSBCaWdJbnQuCi0gICAg
aWYgKHgtPnNpZ24oKSkKLSAgICAgICAgc3RkOjpzd2FwKHgsIHkpOwotICAgIAorICAgIEFTU0VS
VCh4LnNpZ24oKSAhPSB5LnNpZ24oKSk7CiAgICAgLy8geCAmICgteSkgPT0geCAmIH4oeS0xKQot
ICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS0+bGVu
Z3RoKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgIHJl
dHVybiBhYnNvbHV0ZUFuZE5vdCh2bSwgeCwgeTEpOworICAgIGF1dG8gY29tcHV0ZVJlc3VsdCA9
IFsmXSAoYXV0byB4LCBhdXRvIHkpIC0+IEpTQmlnSW50KiB7CisgICAgICAgIEFTU0VSVCgheC5z
aWduKCkpOyAKKyAgICAgICAgQVNTRVJUKHkuc2lnbigpKTsgCisgICAgICAgIEpTQmlnSW50KiB5
MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS5sZW5ndGgoKSk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICByZXR1cm4gYWJz
b2x1dGVBbmROb3Qodm0sIHgsIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CisgICAgfTsKKyAgICBp
ZiAoeC5zaWduKCkpCisgICAgICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHksIHgpOworICAgIHJl
dHVybiBjb21wdXRlUmVzdWx0KHgsIHkpOworfQorCitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNl
QW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCog
eSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZUFuZEltcGwoZ2xv
YmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsK
K30KK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VBbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRv
QmlnSW50MzIoYml0d2lzZUFuZEltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHgg
fSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNl
QW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkp
Cit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VBbmRJbXBsKGdsb2Jh
bE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOwog
fQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmJpdHdpc2VPckhlYXAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQordGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpiaXR3aXNlT3JJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJp
Z0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgtPmxlbmd0aCgpLCB5LT5sZW5ndGgo
KSk7CisgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5s
ZW5ndGgoKSk7CiAKLSAgICBpZiAoIXgtPnNpZ24oKSAmJiAheS0+c2lnbigpKSB7CisgICAgaWYg
KCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
ICAgICByZXR1cm4gYWJzb2x1dGVPcih2bSwgeCwgeSk7CiAgICAgfQogICAgIAotICAgIGlmICh4
LT5zaWduKCkgJiYgeS0+c2lnbigpKSB7CisgICAgaWYgKHguc2lnbigpICYmIHkuc2lnbigpKSB7
CiAgICAgICAgIC8vICgteCkgfCAoLXkpID09IH4oeC0xKSB8IH4oeS0xKSA9PSB+KCh4LTEpICYg
KHktMSkpCiAgICAgICAgIC8vID09IC0oKCh4LTEpICYgKHktMSkpICsgMSkKICAgICAgICAgSlNC
aWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwgcmVzdWx0TGVu
Z3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAg
ICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS0+bGVu
Z3RoKCkpOworICAgICAgICBKU0JpZ0ludCogeTEgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmpl
Y3QsIHksIHkubGVuZ3RoKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKLSAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmQodm0sIHJlc3VsdCwgeTEpOwor
ICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZCh2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQg
fSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1
cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIFNpZ25PcHRpb246OlNpZ25l
ZCk7CisgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJ
bnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCk7CiAgICAgfQogICAgIAotICAg
IEFTU0VSVCh4LT5zaWduKCkgIT0geS0+c2lnbigpKTsKKyAgICBBU1NFUlQoeC5zaWduKCkgIT0g
eS5zaWduKCkpOwogCi0gICAgLy8gQXNzdW1lIHRoYXQgeCBpcyB0aGUgcG9zaXRpdmUgQmlnSW50
LgotICAgIGlmICh4LT5zaWduKCkpCi0gICAgICAgIHN0ZDo6c3dhcCh4LCB5KTsKLSAgICAKICAg
ICAvLyB4IHwgKC15KSA9PSB4IHwgfih5LTEpID09IH4oKHktMSkgJn4geCkgPT0gLSgoKHktMSkg
Jn4geCkgKyAxKQotICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxP
YmplY3QsIHksIHJlc3VsdExlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7Ci0gICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3Qodm0sIHJlc3VsdCwgeCk7Cisg
ICAgYXV0byBjb21wdXRlUmVzdWx0ID0gWyZdIChhdXRvIHgsIGF1dG8geSkgLT4gSlNCaWdJbnQq
IHsKKyAgICAgICAgQVNTRVJUKCF4LnNpZ24oKSk7CisgICAgICAgIEFTU0VSVCh5LnNpZ24oKSk7
CisKKyAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVj
dCwgeSwgcmVzdWx0TGVuZ3RoKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bnVsbHB0cik7CisgICAgICAgIHJlc3VsdCA9IGFic29sdXRlQW5kTm90KHZtLCBIZWFwQmlnSW50
SW1wbCB7IHJlc3VsdCB9LCB4KTsKKworICAgICAgICBzY29wZS5yZWxlYXNlKCk7CisgICAgICAg
IHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVz
dWx0IH0sIFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgfTsKIAotICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIFNpZ25P
cHRpb246OlNpZ25lZCk7CisgICAgaWYgKHguc2lnbigpKQorICAgICAgICByZXR1cm4gY29tcHV0
ZVJlc3VsdCh5LCB4KTsKKyAgICByZXR1cm4gY29tcHV0ZVJlc3VsdCh4LCB5KTsKIH0KIAotSlNC
aWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlWG9ySGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNl
T3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlT3JJbXBsKGdsb2Jh
bE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9
CitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmln
SW50MzIoYml0d2lzZU9ySW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJ
bnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VPcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQorewor
ICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlT3JJbXBsKGdsb2JhbE9iamVj
dCwgSW50MzJCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNC
aWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmJpdHdpc2VYb3JJbXBsKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAotICAgIGlmICgheC0+c2lnbigpICYmICF5LT5zaWduKCkpIHsKKyAgICBp
ZiAoIXguc2lnbigpICYmICF5LnNpZ24oKSkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAg
ICAgICAgIHJldHVybiBhYnNvbHV0ZVhvcih2bSwgeCwgeSk7CiAgICAgfQogICAgIAotICAgIGlm
ICh4LT5zaWduKCkgJiYgeS0+c2lnbigpKSB7Ci0gICAgICAgIGludCByZXN1bHRMZW5ndGggPSBz
dGQ6Om1heCh4LT5sZW5ndGgoKSwgeS0+bGVuZ3RoKCkpOworICAgIGlmICh4LnNpZ24oKSAmJiB5
LnNpZ24oKSkgeworICAgICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgo
KSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIAogICAgICAgICAvLyAoLXgpIF4gKC15KSA9PSB+KHgt
MSkgXiB+KHktMSkgPT0gKHgtMSkgXiAoeS0xKQogICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0g
YWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCByZXN1bHRMZW5ndGgpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAgSlNCaWdJbnQqIHkx
ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgoKSk7CisgICAgICAg
IEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS5sZW5ndGgo
KSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAg
ICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgcmV0dXJuIGFic29sdXRlWG9yKHZtLCByZXN1
bHQsIHkxKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlWG9yKHZtLCBIZWFwQmlnSW50SW1wbCB7
IHJlc3VsdCB9LCBIZWFwQmlnSW50SW1wbCB7IHkxIH0pOwogICAgIH0KLSAgICBBU1NFUlQoeC0+
c2lnbigpICE9IHktPnNpZ24oKSk7Ci0gICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgt
Pmxlbmd0aCgpLCB5LT5sZW5ndGgoKSkgKyAxOworICAgIEFTU0VSVCh4LnNpZ24oKSAhPSB5LnNp
Z24oKSk7CisgICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KHgubGVuZ3RoKCksIHkubGVu
Z3RoKCkpICsgMTsKKworICAgIC8vIHggXiAoLXkpID09IHggXiB+KHktMSkgPT0gfih4IF4gKHkt
MSkpID09IC0oKHggXiAoeS0xKSkgKyAxKQorICAgIGF1dG8gY29tcHV0ZVJlc3VsdCA9IFsmXSAo
YXV0byB4LCBhdXRvIHkpIC0+IEpTQmlnSW50KiB7CisgICAgICAgIEFTU0VSVCgheC5zaWduKCkp
OworICAgICAgICBBU1NFUlQoeS5zaWduKCkpOworICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0g
YWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCByZXN1bHRMZW5ndGgpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgICAgICByZXN1bHQgPSBh
YnNvbHV0ZVhvcih2bSwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgeCk7CisgICAgICAgIHNj
b3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVj
dCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICB9
OwogICAgIAogICAgIC8vIEFzc3VtZSB0aGF0IHggaXMgdGhlIHBvc2l0aXZlIEJpZ0ludC4KLSAg
ICBpZiAoeC0+c2lnbigpKQotICAgICAgICBzdGQ6OnN3YXAoeCwgeSk7Ci0gICAgCi0gICAgLy8g
eCBeICgteSkgPT0geCBeIH4oeS0xKSA9PSB+KHggXiAoeS0xKSkgPT0gLSgoeCBeICh5LTEpKSAr
IDEpCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwg
eSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKKyAgICBpZiAoeC5zaWduKCkpCisgICAgICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHksIHgp
OworICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHgsIHkpOworfQogCi0gICAgcmVzdWx0ID0gYWJz
b2x1dGVYb3Iodm0sIHJlc3VsdCwgeCk7Ci0gICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHJldHVy
biBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHJlc3VsdCwgU2lnbk9wdGlvbjo6U2lnbmVk
KTsKK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0
VG9CaWdJbnQzMihiaXR3aXNlWG9ySW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsg
eCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lz
ZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5
KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlWG9ySW1wbChnbG9i
YWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0pKTsK
K30KK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRv
QmlnSW50MzIoYml0d2lzZVhvckltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4
IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6bGVm
dFNoaWZ0SGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0lu
dEltcGwyPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmxlZnRTaGlmdEltcGwoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkK
IHsKLSAgICBpZiAoeS0+aXNaZXJvKCkgfHwgeC0+aXNaZXJvKCkpCisgICAgaWYgKHguaXNaZXJv
KCkgfHwgeS5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHg7CiAKLSAgICBpZiAoeS0+c2lnbigp
KQorICAgIGlmICh5LnNpZ24oKSkKICAgICAgICAgcmV0dXJuIHJpZ2h0U2hpZnRCeUFic29sdXRl
KGdsb2JhbE9iamVjdCwgeCwgeSk7CiAKICAgICByZXR1cm4gbGVmdFNoaWZ0QnlBYnNvbHV0ZShn
bG9iYWxPYmplY3QsIHgsIHkpOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0
U2hpZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKK0pTVmFsdWUgSlNCaWdJbnQ6OmxlZnRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNv
bnZlcnRUb0JpZ0ludDMyKGxlZnRTaGlmdEltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6Omxl
ZnRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50MzJf
dCB5KQogewotICAgIGlmICh5LT5pc1plcm8oKSB8fCB4LT5pc1plcm8oKSkKKyAgICByZXR1cm4g
dHJ5Q29udmVydFRvQmlnSW50MzIobGVmdFNoaWZ0SW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJ
bnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJ
bnQ6OmxlZnRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIEpT
QmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihsZWZ0U2hpZnRJ
bXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7
IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6bGVmdFNoaWZ0U2xvdyhKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5
Q29udmVydFRvQmlnSW50MzIobGVmdFNoaWZ0SW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50
SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJl
c3VsdCBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdEltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKK3sKKyAgICBpZiAoeC5pc1pl
cm8oKSB8fCB5LmlzWmVybygpKQogICAgICAgICByZXR1cm4geDsKIAotICAgIGlmICh5LT5zaWdu
KCkpCisgICAgaWYgKHkuc2lnbigpKQogICAgICAgICByZXR1cm4gbGVmdFNoaWZ0QnlBYnNvbHV0
ZShnbG9iYWxPYmplY3QsIHgsIHkpOwogCiAgICAgcmV0dXJuIHJpZ2h0U2hpZnRCeUFic29sdXRl
KGdsb2JhbE9iamVjdCwgeCwgeSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lzZU5v
dEhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCitKU1ZhbHVl
IEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKLSAgICBpZiAoeC0+c2lnbigpKSB7CisgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHNpZ25lZFJpZ2h0U2hpZnRJbXBsKGdsb2JhbE9i
amVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitK
U1ZhbHVlIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRU
b0JpZ0ludDMyKHNpZ25lZFJpZ2h0U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6
c2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgs
IEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihzaWduZWRS
aWdodFNoaWZ0SW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50SW1wbCB7IHggfSwgSGVhcEJp
Z0ludEltcGwgeyB5IH0pKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CitK
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZU5vdEltcGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4KQoreworICAgIGlmICh4LnNpZ24oKSkgewog
ICAgICAgICAvLyB+KC14KSA9PSB+KH4oeC0xKSkgPT0geC0xCi0gICAgICAgIHJldHVybiBhYnNv
bHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHgtPmxlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJu
IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwgeC5sZW5ndGgoKSk7CiAgICAgfSAKICAg
ICAvLyB+eCA9PSAteC0xID09IC0oeCsxKQogICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9i
YWxPYmplY3QsIHgsIFNpZ25PcHRpb246OlNpZ25lZCk7CiB9CiAKK0pTVmFsdWUgSlNCaWdJbnQ6
OmJpdHdpc2VOb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCit7
CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VOb3RJbXBsKGdsb2JhbE9i
amVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0pKTsKK30KKwogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAjZGVmaW5lIEhBVkVfVFdPX0RJR0lUIDEKIHR5cGVkZWYgdWludDY0X3QgVHdvRGlnaXQ7CkBA
IC04MTEsMTUgKzExMDIsMTYgQEAgaW5saW5lIEpTQmlnSW50OjpEaWdpdCBKU0JpZ0ludDo6ZGln
aXREaQogCiAvLyBNdWx0aXBsaWVzIHtzb3VyY2V9IHdpdGgge2ZhY3Rvcn0gYW5kIGFkZHMge3N1
bW1hbmR9IHRvIHRoZSByZXN1bHQuCiAvLyB7cmVzdWx0fSBhbmQge3NvdXJjZX0gbWF5IGJlIHRo
ZSBzYW1lIEJpZ0ludCBmb3IgaW5wbGFjZSBtb2RpZmljYXRpb24uCi12b2lkIEpTQmlnSW50Ojpp
bnRlcm5hbE11bHRpcGx5QWRkKEpTQmlnSW50KiBzb3VyY2UsIERpZ2l0IGZhY3RvciwgRGlnaXQg
c3VtbWFuZCwgdW5zaWduZWQgbiwgSlNCaWdJbnQqIHJlc3VsdCkKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgordm9pZCBKU0JpZ0ludDo6aW50ZXJuYWxNdWx0aXBseUFkZChCaWdJbnRJ
bXBsIHNvdXJjZSwgRGlnaXQgZmFjdG9yLCBEaWdpdCBzdW1tYW5kLCB1bnNpZ25lZCBuLCBKU0Jp
Z0ludCogcmVzdWx0KQogewotICAgIEFTU0VSVChzb3VyY2UtPmxlbmd0aCgpID49IG4pOworICAg
IEFTU0VSVChzb3VyY2UubGVuZ3RoKCkgPj0gbik7CiAgICAgQVNTRVJUKHJlc3VsdC0+bGVuZ3Ro
KCkgPj0gbik7CiAKICAgICBEaWdpdCBjYXJyeSA9IHN1bW1hbmQ7CiAgICAgRGlnaXQgaGlnaCA9
IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBEaWdp
dCBjdXJyZW50ID0gc291cmNlLT5kaWdpdChpKTsKKyAgICAgICAgRGlnaXQgY3VycmVudCA9IHNv
dXJjZS5kaWdpdChpKTsKICAgICAgICAgRGlnaXQgbmV3Q2FycnkgPSAwOwogCiAgICAgICAgIC8v
IENvbXB1dGUgdGhpcyByb3VuZCdzIG11bHRpcGxpY2F0aW9uLgpAQCAtODUwLDE1ICsxMTQyLDE2
IEBAIHZvaWQgSlNCaWdJbnQ6OmludGVybmFsTXVsdGlwbHlBZGQoSlNCaWcKIC8vIHthY2N1bXVs
YXRvcn0sIHN0YXJ0aW5nIGF0IHthY2N1bXVsYXRvckluZGV4fSBmb3IgdGhlIGxlYXN0LXNpZ25p
ZmljYW50CiAvLyBkaWdpdC4KIC8vIENhbGxlcnMgbXVzdCBlbnN1cmUgdGhhdCB7YWNjdW11bGF0
b3J9IGlzIGJpZyBlbm91Z2ggdG8gaG9sZCB0aGUgcmVzdWx0Lgotdm9pZCBKU0JpZ0ludDo6bXVs
dGlwbHlBY2N1bXVsYXRlKEpTQmlnSW50KiBtdWx0aXBsaWNhbmQsIERpZ2l0IG11bHRpcGxpZXIs
IEpTQmlnSW50KiBhY2N1bXVsYXRvciwgdW5zaWduZWQgYWNjdW11bGF0b3JJbmRleCkKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgordm9pZCBKU0JpZ0ludDo6bXVsdGlwbHlBY2N1bXVs
YXRlKEJpZ0ludEltcGwgbXVsdGlwbGljYW5kLCBEaWdpdCBtdWx0aXBsaWVyLCBKU0JpZ0ludCog
YWNjdW11bGF0b3IsIHVuc2lnbmVkIGFjY3VtdWxhdG9ySW5kZXgpCiB7Ci0gICAgQVNTRVJUKGFj
Y3VtdWxhdG9yLT5sZW5ndGgoKSA+IG11bHRpcGxpY2FuZC0+bGVuZ3RoKCkgKyBhY2N1bXVsYXRv
ckluZGV4KTsKKyAgICBBU1NFUlQoYWNjdW11bGF0b3ItPmxlbmd0aCgpID4gbXVsdGlwbGljYW5k
Lmxlbmd0aCgpICsgYWNjdW11bGF0b3JJbmRleCk7CiAgICAgaWYgKCFtdWx0aXBsaWVyKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgRGlnaXQgY2FycnkgPSAwOwogICAgIERpZ2l0IGhpZ2gg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtdWx0aXBsaWNhbmQtPmxlbmd0aCgp
OyBpKyssIGFjY3VtdWxhdG9ySW5kZXgrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtdWx0aXBsaWNhbmQubGVuZ3RoKCk7IGkrKywgYWNjdW11bGF0b3JJbmRleCsrKSB7CiAgICAg
ICAgIERpZ2l0IGFjYyA9IGFjY3VtdWxhdG9yLT5kaWdpdChhY2N1bXVsYXRvckluZGV4KTsKICAg
ICAgICAgRGlnaXQgbmV3Q2FycnkgPSAwOwogICAgICAgICAKQEAgLTg2Nyw3ICsxMTYwLDcgQEAg
dm9pZCBKU0JpZ0ludDo6bXVsdGlwbHlBY2N1bXVsYXRlKEpTQmlnSQogICAgICAgICBhY2MgPSBk
aWdpdEFkZChhY2MsIGNhcnJ5LCBuZXdDYXJyeSk7CiAgICAgICAgIAogICAgICAgICAvLyBDb21w
dXRlIHRoaXMgcm91bmQncyBtdWx0aXBsaWNhdGlvbi4KLSAgICAgICAgRGlnaXQgbXVsdGlwbGlj
YW5kRGlnaXQgPSBtdWx0aXBsaWNhbmQtPmRpZ2l0KGkpOworICAgICAgICBEaWdpdCBtdWx0aXBs
aWNhbmREaWdpdCA9IG11bHRpcGxpY2FuZC5kaWdpdChpKTsKICAgICAgICAgRGlnaXQgbG93ID0g
ZGlnaXRNdWwobXVsdGlwbGllciwgbXVsdGlwbGljYW5kRGlnaXQsIGhpZ2gpOwogICAgICAgICBh
Y2MgPSBkaWdpdEFkZChhY2MsIGxvdywgbmV3Q2FycnkpOwogICAgICAgICAKQEAgLTkwNSwxMSAr
MTE5OCwzMiBAQCBib29sIEpTQmlnSW50OjplcXVhbHMoSlNCaWdJbnQqIHgsIEpTQmlnCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLUpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpTQmlnSW50Ojpj
b21wYXJlKEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitpbmxpbmUgSlNCaWdJbnQ6OkNvbXBhcmlz
b25SZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlQ29tcGFyZShCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KQogewotICAgIGJvb2wgeFNpZ24gPSB4LT5zaWduKCk7CisgICAgQVNTRVJUKCF4Lmxl
bmd0aCgpIHx8IHguZGlnaXQoeC5sZW5ndGgoKSAtIDEpKTsKKyAgICBBU1NFUlQoIXkubGVuZ3Ro
KCkgfHwgeS5kaWdpdCh5Lmxlbmd0aCgpIC0gMSkpOworCisgICAgaW50IGRpZmYgPSB4Lmxlbmd0
aCgpIC0geS5sZW5ndGgoKTsKKyAgICBpZiAoZGlmZikKKyAgICAgICAgcmV0dXJuIGRpZmYgPCAw
ID8gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4gOiBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVy
VGhhbjsKKworICAgIGludCBpID0geC5sZW5ndGgoKSAtIDE7CisgICAgd2hpbGUgKGkgPj0gMCAm
JiB4LmRpZ2l0KGkpID09IHkuZGlnaXQoaSkpCisgICAgICAgIGktLTsKKworICAgIGlmIChpIDwg
MCkKKyAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOworCisgICAgcmV0dXJu
IHguZGlnaXQoaSkgPiB5LmRpZ2l0KGkpID8gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW4g
OiBDb21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbjsKK30KIAotICAgIGlmICh4U2lnbiAhPSB5LT5z
aWduKCkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyPgorSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmNvbXBhcmVJbXBsKEJp
Z0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCit7CisgICAgYm9vbCB4U2lnbiA9IHguc2lnbigp
OworCisgICAgaWYgKHhTaWduICE9IHkuc2lnbigpKQogICAgICAgICByZXR1cm4geFNpZ24gPyBD
b21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFu
OwogCiAgICAgQ29tcGFyaXNvblJlc3VsdCByZXN1bHQgPSBhYnNvbHV0ZUNvbXBhcmUoeCwgeSk7
CkBAIC05MjEsNTYgKzEyMzUsNTEgQEAgSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJ
bnQ6OmNvbQogICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpFcXVhbDsgCiB9CiAKLWlubGlu
ZSBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVDb21wYXJlKEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpTQmln
SW50Ojpjb21wYXJlKEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKLSAgICBBU1NFUlQoIXgt
Pmxlbmd0aCgpIHx8IHgtPmRpZ2l0KHgtPmxlbmd0aCgpIC0gMSkpOwotICAgIEFTU0VSVCgheS0+
bGVuZ3RoKCkgfHwgeS0+ZGlnaXQoeS0+bGVuZ3RoKCkgLSAxKSk7Ci0KLSAgICBpbnQgZGlmZiA9
IHgtPmxlbmd0aCgpIC0geS0+bGVuZ3RoKCk7Ci0gICAgaWYgKGRpZmYpCi0gICAgICAgIHJldHVy
biBkaWZmIDwgMCA/IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuIDogQ29tcGFyaXNvblJlc3Vs
dDo6R3JlYXRlclRoYW47Ci0KLSAgICBpbnQgaSA9IHgtPmxlbmd0aCgpIC0gMTsKLSAgICB3aGls
ZSAoaSA+PSAwICYmIHgtPmRpZ2l0KGkpID09IHktPmRpZ2l0KGkpKQotICAgICAgICBpLS07Ci0K
LSAgICBpZiAoaSA8IDApCi0gICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpFcXVhbDsK
LQotICAgIHJldHVybiB4LT5kaWdpdChpKSA+IHktPmRpZ2l0KGkpID8gQ29tcGFyaXNvblJlc3Vs
dDo6R3JlYXRlclRoYW4gOiBDb21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbjsKKyAgICByZXR1cm4g
Y29tcGFyZUltcGwoSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KTsK
K30KK0pTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpTQmlnSW50Ojpjb21wYXJlKGludDMyX3Qg
eCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIGNvbXBhcmVJbXBsKEludDMyQmlnSW50SW1w
bCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pOworfQorSlNCaWdJbnQ6OkNvbXBhcmlzb25S
ZXN1bHQgSlNCaWdJbnQ6OmNvbXBhcmUoSlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAgICBy
ZXR1cm4gY29tcGFyZUltcGwoSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7
IHkgfSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5LCBib29sIHJlc3VsdFNp
Z24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwy
PgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlQWRkKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVz
dWx0U2lnbikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKLSAgICBpZiAo
eC0+bGVuZ3RoKCkgPCB5LT5sZW5ndGgoKSkKKyAgICBpZiAoeC5sZW5ndGgoKSA8IHkubGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybiBhYnNvbHV0ZUFkZChnbG9iYWxPYmplY3QsIHksIHgsIHJlc3Vs
dFNpZ24pOwogCi0gICAgaWYgKHgtPmlzWmVybygpKSB7Ci0gICAgICAgIEFTU0VSVCh5LT5pc1pl
cm8oKSk7CisgICAgaWYgKHguaXNaZXJvKCkpIHsKKyAgICAgICAgQVNTRVJUKHkuaXNaZXJvKCkp
OwogICAgICAgICByZXR1cm4geDsKICAgICB9CiAKLSAgICBpZiAoeS0+aXNaZXJvKCkpCi0gICAg
ICAgIHJldHVybiByZXN1bHRTaWduID09IHgtPnNpZ24oKSA/IHggOiB1bmFyeU1pbnVzSGVhcCh2
bSwgeCk7CisgICAgaWYgKHkuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiByZXN1bHRTaWduID09
IHguc2lnbigpID8geCA6IHVuYXJ5TWludXNJbXBsKHZtLCB4KTsKIAotICAgIEpTQmlnSW50KiBy
ZXN1bHQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxPYmplY3QsIHgtPmxl
bmd0aCgpICsgMSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVX
aXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC5sZW5ndGgoKSArIDEpOwogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBEaWdpdCBjYXJyeSA9IDA7CiAgICAgdW5z
aWduZWQgaSA9IDA7Ci0gICAgZm9yICg7IGkgPCB5LT5sZW5ndGgoKTsgaSsrKSB7CisgICAgZm9y
ICg7IGkgPCB5Lmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgRGlnaXQgbmV3Q2FycnkgPSAwOwot
ICAgICAgICBEaWdpdCBzdW0gPSBkaWdpdEFkZCh4LT5kaWdpdChpKSwgeS0+ZGlnaXQoaSksIG5l
d0NhcnJ5KTsKKyAgICAgICAgRGlnaXQgc3VtID0gZGlnaXRBZGQoeC5kaWdpdChpKSwgeS5kaWdp
dChpKSwgbmV3Q2FycnkpOwogICAgICAgICBzdW0gPSBkaWdpdEFkZChzdW0sIGNhcnJ5LCBuZXdD
YXJyeSk7CiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgc3VtKTsKICAgICAgICAgY2Fycnkg
PSBuZXdDYXJyeTsKICAgICB9CiAKLSAgICBmb3IgKDsgaSA8IHgtPmxlbmd0aCgpOyBpKyspIHsK
KyAgICBmb3IgKDsgaSA8IHgubGVuZ3RoKCk7IGkrKykgewogICAgICAgICBEaWdpdCBuZXdDYXJy
eSA9IDA7Ci0gICAgICAgIERpZ2l0IHN1bSA9IGRpZ2l0QWRkKHgtPmRpZ2l0KGkpLCBjYXJyeSwg
bmV3Q2FycnkpOworICAgICAgICBEaWdpdCBzdW0gPSBkaWdpdEFkZCh4LmRpZ2l0KGkpLCBjYXJy
eSwgbmV3Q2FycnkpOwogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHN1bSk7CiAgICAgICAg
IGNhcnJ5ID0gbmV3Q2Fycnk7CiAgICAgfQpAQCAtOTgxLDM4ICsxMjkwLDM5IEBAIEpTQmlnSW50
KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWwKICAgICByZXR1cm4gcmVzdWx0LT5yaWdo
dFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5LCBib29sIHJlc3VsdFNpZ24pCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQ6OkltcGxS
ZXN1bHQgSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50
SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKQogewogICAgIENvbXBhcmlzb25SZXN1bHQgY29tcGFy
aXNvblJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKLSAgICBBU1NFUlQoeC0+bGVuZ3Ro
KCkgPj0geS0+bGVuZ3RoKCkpOworICAgIEFTU0VSVCh4Lmxlbmd0aCgpID49IHkubGVuZ3RoKCkp
OwogICAgIEFTU0VSVChjb21wYXJpc29uUmVzdWx0ID09IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0
ZXJUaGFuIHx8IGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWwpOwog
Ci0gICAgaWYgKHgtPmlzWmVybygpKSB7Ci0gICAgICAgIEFTU0VSVCh5LT5pc1plcm8oKSk7Cisg
ICAgaWYgKHguaXNaZXJvKCkpIHsKKyAgICAgICAgQVNTRVJUKHkuaXNaZXJvKCkpOwogICAgICAg
ICByZXR1cm4geDsKICAgICB9CiAKLSAgICBpZiAoeS0+aXNaZXJvKCkpCi0gICAgICAgIHJldHVy
biByZXN1bHRTaWduID09IHgtPnNpZ24oKSA/IHggOiBKU0JpZ0ludDo6dW5hcnlNaW51c0hlYXAo
dm0sIHgpOworICAgIGlmICh5LmlzWmVybygpKQorICAgICAgICByZXR1cm4gcmVzdWx0U2lnbiA9
PSB4LnNpZ24oKSA/IEltcGxSZXN1bHQgeyB4IH0gOiBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwo
dm0sIHgpOwogCiAgICAgaWYgKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6
RXF1YWwpCiAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlWmVybyh2bSk7CiAKLSAgICBK
U0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0s
IHgtPmxlbmd0aCgpKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OmNyZWF0ZVdp
dGhMZW5ndGhVbmNoZWNrZWQodm0sIHgubGVuZ3RoKCkpOwogCiAgICAgRGlnaXQgYm9ycm93ID0g
MDsKICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHktPmxlbmd0aCgpOyBpKysp
IHsKKyAgICBmb3IgKDsgaSA8IHkubGVuZ3RoKCk7IGkrKykgewogICAgICAgICBEaWdpdCBuZXdC
b3Jyb3cgPSAwOwotICAgICAgICBEaWdpdCBkaWZmZXJlbmNlID0gZGlnaXRTdWIoeC0+ZGlnaXQo
aSksIHktPmRpZ2l0KGkpLCBuZXdCb3Jyb3cpOworICAgICAgICBEaWdpdCBkaWZmZXJlbmNlID0g
ZGlnaXRTdWIoeC5kaWdpdChpKSwgeS5kaWdpdChpKSwgbmV3Qm9ycm93KTsKICAgICAgICAgZGlm
ZmVyZW5jZSA9IGRpZ2l0U3ViKGRpZmZlcmVuY2UsIGJvcnJvdywgbmV3Qm9ycm93KTsKICAgICAg
ICAgcmVzdWx0LT5zZXREaWdpdChpLCBkaWZmZXJlbmNlKTsKICAgICAgICAgYm9ycm93ID0gbmV3
Qm9ycm93OwogICAgIH0KIAotICAgIGZvciAoOyBpIDwgeC0+bGVuZ3RoKCk7IGkrKykgeworICAg
IGZvciAoOyBpIDwgeC5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIERpZ2l0IG5ld0JvcnJvdyA9
IDA7Ci0gICAgICAgIERpZ2l0IGRpZmZlcmVuY2UgPSBkaWdpdFN1Yih4LT5kaWdpdChpKSwgYm9y
cm93LCBuZXdCb3Jyb3cpOworICAgICAgICBEaWdpdCBkaWZmZXJlbmNlID0gZGlnaXRTdWIoeC5k
aWdpdChpKSwgYm9ycm93LCBuZXdCb3Jyb3cpOwogICAgICAgICByZXN1bHQtPnNldERpZ2l0KGks
IGRpZmZlcmVuY2UpOwogICAgICAgICBib3Jyb3cgPSBuZXdCb3Jyb3c7CiAgICAgfQpAQCAtMTAy
OSwzMCArMTMzOSwzMSBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViKFZNJiB2bSwg
CiAvLyBhbGxvY2F0ZWQgZm9yIGl0OyBvdGhlcndpc2UgdGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0
aGF0IGl0IGlzIGJpZyBlbm91Z2guCiAvLyB7cXVvdGllbnR9IGNhbiBiZSB0aGUgc2FtZSBhcyB7
eH0gZm9yIGFuIGluLXBsYWNlIGRpdmlzaW9uLiB7cXVvdGllbnR9IGNhbgogLy8gYWxzbyBiZSBu
dWxscHRyIGlmIHRoZSBjYWxsZXIgaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSByZW1haW5kZXIu
Ci12b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mIHZtLCBKU0Jp
Z0ludCogeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgRGlnaXQmIHJlbWFp
bmRlcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgordm9pZCBKU0JpZ0ludDo6YWJz
b2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKFZNJiB2bSwgQmlnSW50SW1wbCB4LCBEaWdpdCBkaXZp
c29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKQogewogICAgIEFTU0VS
VChkaXZpc29yKTsKIAotICAgIEFTU0VSVCgheC0+aXNaZXJvKCkpOworICAgIEFTU0VSVCgheC5p
c1plcm8oKSk7CiAgICAgcmVtYWluZGVyID0gMDsKICAgICBpZiAoZGl2aXNvciA9PSAxKSB7Ci0g
ICAgICAgIGlmIChxdW90aWVudCAhPSBudWxscHRyKQotICAgICAgICAgICAgKnF1b3RpZW50ID0g
eDsKKyAgICAgICAgaWYgKHF1b3RpZW50KQorICAgICAgICAgICAgKnF1b3RpZW50ID0geC50b0hl
YXBCaWdJbnQodm0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdW5zaWduZWQgbGVu
Z3RoID0geC0+bGVuZ3RoKCk7Ci0gICAgaWYgKHF1b3RpZW50ICE9IG51bGxwdHIpIHsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSB4Lmxlbmd0aCgpOworICAgIGlmIChxdW90aWVudCkgewogICAgICAg
ICBpZiAoKnF1b3RpZW50ID09IG51bGxwdHIpCiAgICAgICAgICAgICAqcXVvdGllbnQgPSBKU0Jp
Z0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgbGVuZ3RoKTsKIAogICAgICAgICBm
b3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIERpZ2l0
IHEgPSBkaWdpdERpdihyZW1haW5kZXIsIHgtPmRpZ2l0KGkpLCBkaXZpc29yLCByZW1haW5kZXIp
OworICAgICAgICAgICAgRGlnaXQgcSA9IGRpZ2l0RGl2KHJlbWFpbmRlciwgeC5kaWdpdChpKSwg
ZGl2aXNvciwgcmVtYWluZGVyKTsKICAgICAgICAgICAgICgqcXVvdGllbnQpLT5zZXREaWdpdChp
LCBxKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoaW50IGkgPSBsZW5n
dGggLSAxOyBpID49IDA7IGktLSkKLSAgICAgICAgICAgIGRpZ2l0RGl2KHJlbWFpbmRlciwgeC0+
ZGlnaXQoaSksIGRpdmlzb3IsIHJlbWFpbmRlcik7CisgICAgICAgICAgICBkaWdpdERpdihyZW1h
aW5kZXIsIHguZGlnaXQoaSksIGRpdmlzb3IsIHJlbWFpbmRlcik7CiAgICAgfQogfQogCkBAIC0x
MDYyLDEwICsxMzczLDExIEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2
aXMKIC8vIEJvdGgge3F1b3RpZW50fSBhbmQge3JlbWFpbmRlcn0gYXJlIG9wdGlvbmFsLCBmb3Ig
Y2FsbGVycyB0aGF0IGFyZSBvbmx5CiAvLyBpbnRlcmVzdGVkIGluIG9uZSBvZiB0aGVtLgogLy8g
U2VlIEtudXRoLCBWb2x1bWUgMiwgc2VjdGlvbiA0LjMuMSwgQWxnb3JpdGhtIEQuCi12b2lkIEpT
QmlnSW50OjphYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQmlnSW50KiBkaXZpZGVuZCwgSlNCaWdJbnQqIGRpdmlzb3IsIEpTQmlnSW50
KiogcXVvdGllbnQsIEpTQmlnSW50KiogcmVtYWluZGVyKQordGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGwxPgordm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSBkaXZpZGVuZCwgSlNCaWdJ
bnQqIGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIEpTQmlnSW50KiogcmVtYWluZGVyKQog
ewogICAgIEFTU0VSVChkaXZpc29yLT5sZW5ndGgoKSA+PSAyKTsKLSAgICBBU1NFUlQoZGl2aWRl
bmQtPmxlbmd0aCgpID49IGRpdmlzb3ItPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoZGl2aWRlbmQu
bGVuZ3RoKCkgPj0gZGl2aXNvci0+bGVuZ3RoKCkpOwogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKQEAg
LTEwNzQsNyArMTM4Niw3IEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aEJpZ0ludERp
dmkKICAgICAvLyBNYWludGFpbmluZyB0aGlzIGNvbnNpc3RlbmN5IGlzIHByb2JhYmx5IG1vcmUg
dXNlZnVsIHRoYW4gdHJ5aW5nIHRvCiAgICAgLy8gY29tZSB1cCB3aXRoIG1vcmUgZGVzY3JpcHRp
dmUgbmFtZXMgZm9yIHRoZW0uCiAgICAgdW5zaWduZWQgbiA9IGRpdmlzb3ItPmxlbmd0aCgpOwot
ICAgIHVuc2lnbmVkIG0gPSBkaXZpZGVuZC0+bGVuZ3RoKCkgLSBuOworICAgIHVuc2lnbmVkIG0g
PSBkaXZpZGVuZC5sZW5ndGgoKSAtIG47CiAgICAgCiAgICAgLy8gVGhlIHF1b3RpZW50IHRvIGJl
IGNvbXB1dGVkLgogICAgIEpTQmlnSW50KiBxID0gbnVsbHB0cjsKQEAgLTEwOTUsNyArMTQwNyw3
IEBAIHZvaWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aEJpZ0ludERpdmkKICAgICB1bnNpZ25l
ZCBzaGlmdCA9IGNseihsYXN0RGlnaXQpOwogCiAgICAgaWYgKHNoaWZ0ID4gMCkgewotICAgICAg
ICBkaXZpc29yID0gYWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KGdsb2JhbE9iamVjdCwgZGl2
aXNvciwgc2hpZnQsIExlZnRTaGlmdE1vZGU6OlNhbWVTaXplUmVzdWx0KTsKKyAgICAgICAgZGl2
aXNvciA9IGFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weShnbG9iYWxPYmplY3QsIEhlYXBCaWdJ
bnRJbXBsIHsgZGl2aXNvciB9LCBzaGlmdCwgTGVmdFNoaWZ0TW9kZTo6U2FtZVNpemVSZXN1bHQp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KIApA
QCAtMTE0NCw3ICsxNDU2LDcgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50
RGl2aQogICAgICAgICAvLyBpdCBmcm9tIHRoZSBkaXZpZGVuZC4gSWYgdGhlcmUgd2FzICJib3Jy
b3ciLCB0aGVuIHRoZSBxdW90aWVudCBkaWdpdAogICAgICAgICAvLyB3YXMgb25lIHRvbyBoaWdo
LCBzbyB3ZSBtdXN0IGNvcnJlY3QgaXQgYW5kIHVuZG8gb25lIHN1YnRyYWN0aW9uIG9mCiAgICAg
ICAgIC8vIHRoZSAoc2hpZnRlZCkgZGl2aXNvci4KLSAgICAgICAgaW50ZXJuYWxNdWx0aXBseUFk
ZChkaXZpc29yLCBxaGF0LCAwLCBuLCBxaGF0dik7CisgICAgICAgIGludGVybmFsTXVsdGlwbHlB
ZGQoSGVhcEJpZ0ludEltcGwgeyBkaXZpc29yIH0sIHFoYXQsIDAsIG4sIHFoYXR2KTsKICAgICAg
ICAgRGlnaXQgYyA9IHUtPmFic29sdXRlSW5wbGFjZVN1YihxaGF0diwgaik7CiAgICAgICAgIGlm
IChjKSB7CiAgICAgICAgICAgICBjID0gdS0+YWJzb2x1dGVJbnBsYWNlQWRkKGRpdmlzb3IsIGop
OwpAQCAtMTIzMCwxMiArMTU0MiwxMyBAQCB2b2lkIEpTQmlnSW50OjppbnBsYWNlUmlnaHRTaGlm
dCh1bnNpZ25lCiB9CiAKIC8vIEFsd2F5cyBjb3BpZXMgdGhlIGlucHV0LCBldmVuIHdoZW4ge3No
aWZ0fSA9PSAwLgotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0Nv
cHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHNo
aWZ0LCBMZWZ0U2hpZnRNb2RlIG1vZGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4K
K0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCwgdW5zaWduZWQgc2hpZnQsIExlZnRT
aGlmdE1vZGUgbW9kZSkKIHsKICAgICBBU1NFUlQoc2hpZnQgPCBkaWdpdEJpdHMpOwotICAgIEFT
U0VSVCgheC0+aXNaZXJvKCkpOworICAgIEFTU0VSVCgheC5pc1plcm8oKSk7CiAKLSAgICB1bnNp
Z25lZCBuID0geC0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbiA9IHgubGVuZ3RoKCk7CiAgICAg
dW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gbW9kZSA9PSBMZWZ0U2hpZnRNb2RlOjpBbHdheXNBZGRP
bmVEaWdpdCA/IG4gKyAxIDogbjsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0
aExlbmd0aChnbG9iYWxPYmplY3QsIHJlc3VsdExlbmd0aCk7CiAgICAgaWYgKCFyZXN1bHQpCkBA
IC0xMjQzLDcgKzE1NTYsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlTGVmdFNoaWZ0
QWx3CiAKICAgICBpZiAoIXNoaWZ0KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBuOyBpKyspCi0gICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHgtPmRpZ2l0KGkpKTsK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChpKSk7CiAgICAgICAgIGlm
IChtb2RlID09IExlZnRTaGlmdE1vZGU6OkFsd2F5c0FkZE9uZURpZ2l0KQogICAgICAgICAgICAg
cmVzdWx0LT5zZXREaWdpdChuLCAwKTsKIApAQCAtMTI1Miw3ICsxNTY1LDcgQEAgSlNCaWdJbnQq
IEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsdwogCiAgICAgRGlnaXQgY2FycnkgPSAwOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgRGlnaXQgZCA9
IHgtPmRpZ2l0KGkpOworICAgICAgICBEaWdpdCBkID0geC5kaWdpdChpKTsKICAgICAgICAgcmVz
dWx0LT5zZXREaWdpdChpLCAoZCA8PCBzaGlmdCkgfCBjYXJyeSk7CiAgICAgICAgIGNhcnJ5ID0g
ZCA+PiAoZGlnaXRCaXRzIC0gc2hpZnQpOwogICAgIH0KQEAgLTEyNzAsOCArMTU4Myw4IEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHcKIC8vIEhlbHBlciBmb3IgQWJz
b2x1dGV7QW5kLEFuZE5vdCxPcixYb3J9LgogLy8gUGVyZm9ybXMgdGhlIGdpdmVuIGJpbmFyeSB7
b3B9IG9uIGRpZ2l0IHBhaXJzIG9mIHt4fSBhbmQge3l9OyB3aGVuIHRoZQogLy8gZW5kIG9mIHRo
ZSBzaG9ydGVyIG9mIHRoZSB0d28gaXMgcmVhY2hlZCwge2V4dHJhRGlnaXRzfSBjb25maWd1cmVz
IGhvdwotLy8gcmVtYWluaW5nIGRpZ2l0cyBpbiB0aGUgbG9uZ2VyIGlucHV0IChpZiB7c3ltbWV0
cmljfSA9PSBTeW1tZXRyaWMsIGluCi0vLyB7eH0gb3RoZXJ3aXNlKSBhcmUgaGFuZGxlZDogY29w
aWVkIHRvIHRoZSByZXN1bHQgb3IgaWdub3JlZC4KKy8vIHJlbWFpbmluZyBkaWdpdHMgaW4gdGhl
IGxvbmdlciBpbnB1dCBhcmUgaGFuZGxlZDogY29waWVkIHRvIHRoZSByZXN1bHQKKy8vIG9yIGln
bm9yZWQuCiAvLyBFeGFtcGxlOgogLy8gICAgICAgeTogICAgICAgICAgICAgWyB5MiBdWyB5MSBd
WyB5MCBdCiAvLyAgICAgICB4OiAgICAgICBbIHgzIF1bIHgyIF1bIHgxIF1bIHgwIF0KQEAgLTEy
ODAsMzAgKzE1OTMsMzQgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFs
dwogLy8gICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgfCAgICAgfAogLy8gICAgICAgICAg
ICAgICAgICAgdiAgICAgdiAgICAgdiAgICAgdgogLy8gcmVzdWx0OiBbICAwIF1bIHgzIF1bIHIy
IF1bIHIxIF1bIHIwIF0KLXRlbXBsYXRlPHR5cGVuYW1lIEJpdHdpc2VPcD4KLWlubGluZSBKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlQml0d2lzZU9wKFZNJiB2bSwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nIGV4dHJhRGlnaXRzLCBTeW1tZXRyaWNPcCBz
eW1tZXRyaWMsIEJpdHdpc2VPcCYmIG9wKQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwx
LCB0eXBlbmFtZSBCaWdJbnRJbXBsMiwgdHlwZW5hbWUgQml0d2lzZU9wPgoraW5saW5lIEpTQmln
SW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nIGV4dHJhRGlnaXRzLCBCaXR3aXNlT3Am
JiBvcCkKIHsKLSAgICB1bnNpZ25lZCB4TGVuZ3RoID0geC0+bGVuZ3RoKCk7Ci0gICAgdW5zaWdu
ZWQgeUxlbmd0aCA9IHktPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4Lmxlbmd0
aCgpOworICAgIHVuc2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIG51
bVBhaXJzID0geUxlbmd0aDsKKyAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSB4TGVuZ3RoOwogICAg
IGlmICh4TGVuZ3RoIDwgeUxlbmd0aCkgewogICAgICAgICBudW1QYWlycyA9IHhMZW5ndGg7Ci0g
ICAgICAgIGlmIChzeW1tZXRyaWMgPT0gU3ltbWV0cmljT3A6OlN5bW1ldHJpYykgewotICAgICAg
ICAgICAgc3RkOjpzd2FwKHgsIHkpOwotICAgICAgICAgICAgc3RkOjpzd2FwKHhMZW5ndGgsIHlM
ZW5ndGgpOwotICAgICAgICB9CisgICAgICAgIG1heExlbmd0aCA9IHlMZW5ndGg7CiAgICAgfQog
CiAgICAgQVNTRVJUKG51bVBhaXJzID09IHN0ZDo6bWluKHhMZW5ndGgsIHlMZW5ndGgpKTsKLSAg
ICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBleHRyYURpZ2l0cyA9PSBFeHRyYURpZ2l0c0hhbmRs
aW5nOjpDb3B5ID8geExlbmd0aCA6IG51bVBhaXJzOworICAgIEFTU0VSVChtYXhMZW5ndGggPT0g
c3RkOjptYXgoeExlbmd0aCwgeUxlbmd0aCkpOworICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9
IGV4dHJhRGlnaXRzID09IEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHkgPyBtYXhMZW5ndGggOiBu
dW1QYWlyczsKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVuY2hlY2tl
ZCh2bSwgcmVzdWx0TGVuZ3RoKTsKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmb3IgKDsgaSA8
IG51bVBhaXJzOyBpKyspCi0gICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgb3AoeC0+ZGlnaXQo
aSksIHktPmRpZ2l0KGkpKSk7CisgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgb3AoeC5kaWdp
dChpKSwgeS5kaWdpdChpKSkpOwogCiAgICAgaWYgKGV4dHJhRGlnaXRzID09IEV4dHJhRGlnaXRz
SGFuZGxpbmc6OkNvcHkpIHsKLSAgICAgICAgZm9yICg7IGkgPCB4TGVuZ3RoOyBpKyspCi0gICAg
ICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHgtPmRpZ2l0KGkpKTsKKyAgICAgICAgaWYgKHhM
ZW5ndGggPiB5TGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKDsgaSA8IHhMZW5ndGg7IGkrKykK
KyAgICAgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgZm9yICg7IGkgPCB5TGVuZ3RoOyBpKyspCisgICAgICAg
ICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB5LmRpZ2l0KGkpKTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIGZvciAoOyBpIDwgcmVzdWx0TGVuZ3RoOyBpKyspCkBAIC0xMzEyLDQ2ICsxNjI5
LDYxIEBAIGlubGluZSBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQml0d2kKICAgICByZXR1
cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29s
dXRlQW5kKFZNJiB2bSwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQordGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50KiBKU0JpZ0lu
dDo6YWJzb2x1dGVBbmQoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewog
ICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShEaWdpdCBhLCBEaWdpdCBiKSB7CiAgICAgICAg
IHJldHVybiBhICYgYjsKICAgICB9OwotICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcCh2bSwg
eCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6U2tpcCwgU3ltbWV0cmljT3A6OlN5bW1ldHJpYywg
ZGlnaXRPcGVyYXRpb24pOworICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VPcCh2bSwgeCwgeSwg
RXh0cmFEaWdpdHNIYW5kbGluZzo6U2tpcCwgZGlnaXRPcGVyYXRpb24pOwogfQogCi1KU0JpZ0lu
dCogSlNCaWdJbnQ6OmFic29sdXRlT3IoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgor
SlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZU9yKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmln
SW50SW1wbDIgeSkKIHsKICAgICBhdXRvIGRpZ2l0T3BlcmF0aW9uID0gW10oRGlnaXQgYSwgRGln
aXQgYikgewogICAgICAgICByZXR1cm4gYSB8IGI7CiAgICAgfTsKLSAgICByZXR1cm4gYWJzb2x1
dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIFN5bW1ldHJp
Y09wOjpTeW1tZXRyaWMsIGRpZ2l0T3BlcmF0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCaXR3
aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIGRpZ2l0T3BlcmF0aW9u
KTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFuZE5vdChWTSYgdm0sIEpTQmln
SW50KiB4LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlw
ZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kTm90KFZN
JiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKLSAgICBhdXRvIGRpZ2l0T3Bl
cmF0aW9uID0gW10oRGlnaXQgYSwgRGlnaXQgYikgewotICAgICAgICByZXR1cm4gYSAmIH5iOwot
ICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0
c0hhbmRsaW5nOjpDb3B5LCBTeW1tZXRyaWNPcDo6Tm90U3ltbWV0cmljLCBkaWdpdE9wZXJhdGlv
bik7CisgICAgLy8geCAmIH55CisKKyAgICB1bnNpZ25lZCB4TGVuZ3RoID0geC5sZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCB5TGVuZ3RoID0geS5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCByZXN1bHRM
ZW5ndGggPSB4TGVuZ3RoOworCisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGNyZWF0ZVdpdGhMZW5n
dGhVbmNoZWNrZWQodm0sIHJlc3VsdExlbmd0aCk7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAg
Zm9yICg7IGkgPCBzdGQ6Om1pbih4TGVuZ3RoLCB5TGVuZ3RoKTsgaSsrKQorICAgICAgICByZXN1
bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkgJiB+eS5kaWdpdChpKSk7CisgICAgZm9yICg7IGkg
PCByZXN1bHRMZW5ndGg7ICsraSkKKyAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB4LmRpZ2l0
KGkpKTsKKworICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CiB9CiAKLUpTQmlnSW50
KiBKU0JpZ0ludDo6YWJzb2x1dGVYb3IoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgor
SlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZVhvcihWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJp
Z0ludEltcGwyIHkpCiB7CiAgICAgYXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERp
Z2l0IGIpIHsKICAgICAgICAgcmV0dXJuIGEgXiBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29s
dXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBTeW1tZXRy
aWNPcDo6U3ltbWV0cmljLCBkaWdpdE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0
d2lzZU9wKHZtLCB4LCB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpDb3B5LCBkaWdpdE9wZXJhdGlv
bik7CiB9CiAgICAgCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBTaWduT3B0aW9uIHNpZ25PcHRpb24p
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJz
b2x1dGVBZGRPbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCBT
aWduT3B0aW9uIHNpZ25PcHRpb24pCiB7Ci0gICAgdW5zaWduZWQgaW5wdXRMZW5ndGggPSB4LT5s
ZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgLy8g
VGhlIGFkZGl0aW9uIHdpbGwgb3ZlcmZsb3cgaW50byBhIG5ldyBkaWdpdCBpZiBhbGwgZXhpc3Rp
bmcgZGlnaXRzIGFyZQogICAgIC8vIGF0IG1heGltdW0uCiAgICAgYm9vbCB3aWxsT3ZlcmZsb3cg
PSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7
Ci0gICAgICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPERpZ2l0Pjo6bWF4KCkgIT0geC0+ZGln
aXQoaSkpIHsKKyAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8RGlnaXQ+OjptYXgoKSAh
PSB4LmRpZ2l0KGkpKSB7CiAgICAgICAgICAgICB3aWxsT3ZlcmZsb3cgPSBmYWxzZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMzY1LDcgKzE2OTcsNyBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpTR2xvCiAgICAgRGlnaXQgY2FycnkgPSAxOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dExlbmd0aDsgaSsrKSB7CiAgICAgICAgIERp
Z2l0IG5ld0NhcnJ5ID0gMDsKLSAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBkaWdpdEFkZCh4
LT5kaWdpdChpKSwgY2FycnksIG5ld0NhcnJ5KSk7CisgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQo
aSwgZGlnaXRBZGQoeC5kaWdpdChpKSwgY2FycnksIG5ld0NhcnJ5KSk7CiAgICAgICAgIGNhcnJ5
ID0gbmV3Q2Fycnk7CiAgICAgfQogICAgIGlmIChyZXN1bHRMZW5ndGggPiBpbnB1dExlbmd0aCkK
QEAgLTEzNzcsMjEgKzE3MDksMjIgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZE9u
ZShKU0dsbwogICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbShnbG9iYWxPYmplY3QtPnZtKCkp
OwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCB1bnNpZ25lZCByZXN1bHRMZW5ndGgpCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVT
dWJPbmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1bnNpZ25l
ZCByZXN1bHRMZW5ndGgpCiB7Ci0gICAgQVNTRVJUKCF4LT5pc1plcm8oKSk7Ci0gICAgQVNTRVJU
KHJlc3VsdExlbmd0aCA+PSB4LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKCF4LmlzWmVybygpKTsK
KyAgICBBU1NFUlQocmVzdWx0TGVuZ3RoID49IHgubGVuZ3RoKCkpOwogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChnbG9iYWxP
YmplY3QsIHJlc3VsdExlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB4LT5sZW5ndGgoKTsKKyAgICB1bnNpZ25l
ZCBsZW5ndGggPSB4Lmxlbmd0aCgpOwogICAgIERpZ2l0IGJvcnJvdyA9IDE7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIERpZ2l0IG5ld0JvcnJv
dyA9IDA7Ci0gICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgZGlnaXRTdWIoeC0+ZGlnaXQoaSks
IGJvcnJvdywgbmV3Qm9ycm93KSk7CisgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgZGlnaXRT
dWIoeC5kaWdpdChpKSwgYm9ycm93LCBuZXdCb3Jyb3cpKTsKICAgICAgICAgYm9ycm93ID0gbmV3
Qm9ycm93OwogICAgIH0KICAgICBBU1NFUlQoIWJvcnJvdyk7CkBAIC0xNDAxLDcgKzE3MzQsOCBA
QCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKEpTR2xvCiAgICAgcmV0dXJuIHJl
c3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0U2hpZnRC
eUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50
SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBs
MiB5KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC0xNDE1LDggKzE3NDksOCBAQCBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmxlZnRTaGlmdEJ5QWJzb2x1dGUoCiAgICAgRGlnaXQgc2hpZnQgPSAqb3B0
aW9uYWxTaGlmdDsKICAgICB1bnNpZ25lZCBkaWdpdFNoaWZ0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHNoaWZ0IC8gZGlnaXRCaXRzKTsKICAgICB1bnNpZ25lZCBiaXRzU2hpZnQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc2hpZnQgJSBkaWdpdEJpdHMpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHgtPmxlbmd0aCgpOwotICAgIGJvb2wgZ3JvdyA9IGJpdHNTaGlmdCAmJiAoeC0+ZGlnaXQobGVu
Z3RoIC0gMSkgPj4gKGRpZ2l0Qml0cyAtIGJpdHNTaGlmdCkpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHgubGVuZ3RoKCk7CisgICAgYm9vbCBncm93ID0gYml0c1NoaWZ0ICYmICh4LmRpZ2l0KGxl
bmd0aCAtIDEpID4+IChkaWdpdEJpdHMgLSBiaXRzU2hpZnQpKTsKICAgICBpbnQgcmVzdWx0TGVu
Z3RoID0gbGVuZ3RoICsgZGlnaXRTaGlmdCArIGdyb3c7CiAgICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihyZXN1bHRMZW5ndGgpID4gbWF4TGVuZ3RoKSB7CiAgICAgICAgIHRocm93UmFuZ2VF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQmlnSW50IGdlbmVyYXRlZCBmcm9tIHRoaXMgb3Bl
cmF0aW9uIGlzIHRvbyBiaWciX3MpOwpAQCAtMTQzMSwxNCArMTc2NSwxNCBAQCBKU0JpZ0ludCog
SlNCaWdJbnQ6OmxlZnRTaGlmdEJ5QWJzb2x1dGUoCiAgICAgICAgICAgICByZXN1bHQtPnNldERp
Z2l0KGksIDB1bCk7CiAKICAgICAgICAgZm9yICg7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
cmVzdWx0TGVuZ3RoKTsgaSsrKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB4LT5k
aWdpdChpIC0gZGlnaXRTaGlmdCkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB4
LmRpZ2l0KGkgLSBkaWdpdFNoaWZ0KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRGlnaXQgY2Fy
cnkgPSAwOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGlnaXRTaGlmdDsgaSsr
KQogICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCAwdWwpOwogCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgRGlnaXQgZCA9
IHgtPmRpZ2l0KGkpOworICAgICAgICAgICAgRGlnaXQgZCA9IHguZGlnaXQoaSk7CiAgICAgICAg
ICAgICByZXN1bHQtPnNldERpZ2l0KGkgKyBkaWdpdFNoaWZ0LCAoZCA8PCBiaXRzU2hpZnQpIHwg
Y2FycnkpOwogICAgICAgICAgICAgY2FycnkgPSBkID4+IChkaWdpdEJpdHMgLSBiaXRzU2hpZnQp
OwogICAgICAgICB9CkBAIC0xNDQ5LDE1ICsxNzgzLDE2IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6
bGVmdFNoaWZ0QnlBYnNvbHV0ZSgKICAgICAgICAgICAgIEFTU0VSVCghY2FycnkpOwogICAgIH0K
IAotICAgIHJlc3VsdC0+c2V0U2lnbih4LT5zaWduKCkpOworICAgIHJlc3VsdC0+c2V0U2lnbih4
LnNpZ24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAotSlNCaWdJ
bnQqIEpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgtPmxlbmd0aCgpOwotICAgIGJvb2wg
c2lnbiA9IHgtPnNpZ24oKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB4Lmxlbmd0aCgpOworICAg
IGJvb2wgc2lnbiA9IHguc2lnbigpOwogICAgIGF1dG8gb3B0aW9uYWxTaGlmdCA9IHRvU2hpZnRB
bW91bnQoeSk7CiAgICAgaWYgKCFvcHRpb25hbFNoaWZ0KQogICAgICAgICByZXR1cm4gcmlnaHRT
aGlmdEJ5TWF4aW11bSh2bSwgc2lnbik7CkBAIC0xNDc2LDExICsxODExLDExIEBAIEpTQmlnSW50
KiBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUKICAgICBib29sIG11c3RSb3VuZERvd24g
PSBmYWxzZTsKICAgICBpZiAoc2lnbikgewogICAgICAgICBjb25zdCBEaWdpdCBtYXNrID0gKHN0
YXRpY19jYXN0PERpZ2l0PigxKSA8PCBiaXRzU2hpZnQpIC0gMTsKLSAgICAgICAgaWYgKHgtPmRp
Z2l0KGRpZ2l0YWxTaGlmdCkgJiBtYXNrKQorICAgICAgICBpZiAoeC5kaWdpdChkaWdpdGFsU2hp
ZnQpICYgbWFzaykKICAgICAgICAgICAgIG11c3RSb3VuZERvd24gPSB0cnVlOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaWdpdGFsU2hpZnQ7
IGkrKykgewotICAgICAgICAgICAgICAgIGlmICh4LT5kaWdpdChpKSkgeworICAgICAgICAgICAg
ICAgIGlmICh4LmRpZ2l0KGkpKSB7CiAgICAgICAgICAgICAgICAgICAgIG11c3RSb3VuZERvd24g
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNDkxLDcgKzE4MjYsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29s
dXRlCiAgICAgLy8gSWYgYml0c1NoaWZ0IGlzIG5vbi16ZXJvLCBpdCBmcmVlcyB1cCBiaXRzLCBw
cmV2ZW50aW5nIG92ZXJmbG93LgogICAgIGlmIChtdXN0Um91bmREb3duICYmICFiaXRzU2hpZnQp
IHsKICAgICAgICAgLy8gT3ZlcmZsb3cgY2Fubm90IGhhcHBlbiBpZiB0aGUgbW9zdCBzaWduaWZp
Y2FudCBkaWdpdCBoYXMgdW5zZXQgYml0cy4KLSAgICAgICAgRGlnaXQgbXNkID0geC0+ZGlnaXQo
bGVuZ3RoIC0gMSk7CisgICAgICAgIERpZ2l0IG1zZCA9IHguZGlnaXQobGVuZ3RoIC0gMSk7CiAg
ICAgICAgIGJvb2wgcm91bmRpbmdDYW5PdmVyZmxvdyA9ICFzdGF0aWNfY2FzdDxEaWdpdD4ofm1z
ZCk7CiAgICAgICAgIGlmIChyb3VuZGluZ0Nhbk92ZXJmbG93KQogICAgICAgICAgICAgcmVzdWx0
TGVuZ3RoKys7CkBAIC0xNTAxLDEyICsxODM2LDEyIEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6cmln
aHRTaGlmdEJ5QWJzb2x1dGUKICAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0
aFVuY2hlY2tlZCh2bSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdExlbmd0aCkpOwogICAg
IGlmICghYml0c1NoaWZ0KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRpZ2l0YWxTaGlm
dDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpIC0gZGln
aXRhbFNoaWZ0LCB4LT5kaWdpdChpKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGkg
LSBkaWdpdGFsU2hpZnQsIHguZGlnaXQoaSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERpZ2l0
IGNhcnJ5ID0geC0+ZGlnaXQoZGlnaXRhbFNoaWZ0KSA+PiBiaXRzU2hpZnQ7CisgICAgICAgIERp
Z2l0IGNhcnJ5ID0geC5kaWdpdChkaWdpdGFsU2hpZnQpID4+IGJpdHNTaGlmdDsKICAgICAgICAg
dW5zaWduZWQgbGFzdCA9IGxlbmd0aCAtIGRpZ2l0YWxTaGlmdCAtIDE7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsYXN0OyBpKyspIHsKLSAgICAgICAgICAgIERpZ2l0IGQgPSB4
LT5kaWdpdChpICsgZGlnaXRhbFNoaWZ0ICsgMSk7CisgICAgICAgICAgICBEaWdpdCBkID0geC5k
aWdpdChpICsgZGlnaXRhbFNoaWZ0ICsgMSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0
KGksIChkIDw8IChkaWdpdEJpdHMgLSBiaXRzU2hpZnQpKSB8IGNhcnJ5KTsKICAgICAgICAgICAg
IGNhcnJ5ID0gZCA+PiBiaXRzU2hpZnQ7CiAgICAgICAgIH0KQEAgLTE1MTksMTQgKzE4NTQsMTQg
QEAgSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZQogICAgICAgICAgICAg
Ly8gU2luY2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSwgcm91bmRpbmcgZG93biBtZWFucyBhZGRp
bmcgb25lIHRvCiAgICAgICAgICAgICAvLyBpdHMgYWJzb2x1dGUgdmFsdWUuIFRoaXMgY2Fubm90
IG92ZXJmbG93LgogICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5yaWdodFRyaW0odm0pOwot
ICAgICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBT
aWduT3B0aW9uOjpTaWduZWQpOworICAgICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGds
b2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVk
KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7
CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11bShWTSYgdm0sIGJv
b2wgc2lnbikKK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpyaWdodFNoaWZ0QnlNYXhp
bXVtKFZNJiB2bSwgYm9vbCBzaWduKQogewogICAgIGlmIChzaWduKQogICAgICAgICByZXR1cm4g
Y3JlYXRlRnJvbSh2bSwgLTEpOwpAQCAtMTY4Myw3ICsyMDE4LDcgQEAgU3RyaW5nIEpTQmlnSW50
Ojp0b1N0cmluZ0dlbmVyaWMoVk0mIHZtLAogICAgICAgICBKU0JpZ0ludCoqIGRpdmlkZW5kID0g
Jng7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIERpZ2l0IGNodW5rOwotICAgICAgICAgICAg
YWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKHZtLCAqZGl2aWRlbmQsIGNodW5rRGl2aXNvciwg
JnJlc3QsIGNodW5rKTsKKyAgICAgICAgICAgIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcih2
bSwgSGVhcEJpZ0ludEltcGwgeyAqZGl2aWRlbmQgfSwgY2h1bmtEaXZpc29yLCAmcmVzdCwgY2h1
bmspOwogICAgICAgICAgICAgZGl2aWRlbmQgPSAmcmVzdDsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjaHVua0NoYXJzOyBpKyspIHsKICAgICAgICAgICAgICAgICByZXN1
bHRTdHJpbmcuYXBwZW5kKHJhZGl4RGlnaXRzW2NodW5rICUgcmFkaXhdKTsKQEAgLTIwMjAsMzYg
KzIzNTUsNiBAQCBib29sIEpTQmlnSW50OjplcXVhbHNUb0ludDMyKGludDMyX3QgdmFsCiAgICAg
cmV0dXJuICh0aGlzLT5sZW5ndGgoKSA9PSAxKSAmJiAodGhpcy0+c2lnbigpID09ICh2YWx1ZSA8
IDApKSAmJiAodGhpcy0+ZGlnaXQoMCkgPT0gc3RhdGljX2Nhc3Q8RGlnaXQ+KHN0ZDo6YWJzKHN0
YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSkpKTsKIH0KIAotSlNCaWdJbnQ6OkNvbXBhcmlzb25S
ZXN1bHQgSlNCaWdJbnQ6OmNvbXBhcmVUb0ludDMyKGludDMyX3QgdmFsdWUpCi17Ci0gICAgYm9v
bCB4U2lnbiA9IHNpZ24oKTsKLSAgICBib29sIHlTaWduID0gdmFsdWUgPCAwOwotCi0gICAgaWYg
KHhTaWduICE9IHlTaWduKQotICAgICAgICByZXR1cm4geFNpZ24gPyBDb21wYXJpc29uUmVzdWx0
OjpMZXNzVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFuOwotICAgIGlmIChpc1pl
cm8oKSkgewotICAgICAgICBBU1NFUlQoIXhTaWduKTsKLSAgICAgICAgQVNTRVJUKCF5U2lnbik7
Ci0gICAgICAgIGlmICh2YWx1ZSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIENvbXBhcmlzb25S
ZXN1bHQ6OkVxdWFsOwotICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW47
Ci0gICAgfQotCi0gICAgaWYgKGxlbmd0aCgpICE9IDEpCi0gICAgICAgIHJldHVybiB4U2lnbiA/
IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuIDogQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRo
YW47Ci0KLSAgICB1aW50NjRfdCB2YWx1ZTY0ID0gMDsKLSAgICBpZiAoeFNpZ24pCi0gICAgICAg
IHZhbHVlNjQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oLXN0YXRpY19jYXN0PGludDY0X3Q+KHZh
bHVlKSk7Ci0gICAgZWxzZQotICAgICAgICB2YWx1ZTY0ID0gdmFsdWU7Ci0gICAgaWYgKGRpZ2l0
KDApID09IHZhbHVlNjQpCi0gICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpFcXVhbDsK
LSAgICBpZiAoZGlnaXQoMCkgPCB2YWx1ZTY0KQotICAgICAgICByZXR1cm4geFNpZ24gPyBDb21w
YXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuOwot
ICAgIHJldHVybiB4U2lnbiA/IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuIDogQ29tcGFyaXNv
blJlc3VsdDo6R3JlYXRlclRoYW47Ci19Ci0KIEpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpT
QmlnSW50Ojpjb21wYXJlVG9Eb3VibGUoSlNCaWdJbnQqIHgsIGRvdWJsZSB5KQogewogICAgIC8v
IFRoaXMgYWxnb3JpdGhtIGV4cGVjdCB0aGF0IHRoZSBkb3VibGUgZm9ybWF0IGlzIElFRUUgNzU0
CkBAIC0yMTc4LDEyICsyNDgzLDEzIEBAIEpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpTQmln
SW50Ojpjb20KICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWw7CiB9CiAKLU9wdGlv
bmFsPEpTQmlnSW50OjpEaWdpdD4gSlNCaWdJbnQ6OnRvU2hpZnRBbW91bnQoSlNCaWdJbnQqIHgp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK09wdGlvbmFsPEpTQmlnSW50OjpEaWdp
dD4gSlNCaWdJbnQ6OnRvU2hpZnRBbW91bnQoQmlnSW50SW1wbCB4KQogewotICAgIGlmICh4LT5s
ZW5ndGgoKSA+IDEpCisgICAgaWYgKHgubGVuZ3RoKCkgPiAxKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIAotICAgIERpZ2l0IHZhbHVlID0geC0+ZGlnaXQoMCk7CisgICAgRGln
aXQgdmFsdWUgPSB4LmRpZ2l0KDApOwogICAgIHN0YXRpY19hc3NlcnQobWF4TGVuZ3RoQml0cyA8
IHN0ZDo6bnVtZXJpY19saW1pdHM8RGlnaXQ+OjptYXgoKSwgIm1heExlbmd0aEJpdHMgbmVlZHMg
dG8gYmUgbGVzcyB0aGFuIGRpZ2l0Iik7CiAgICAgCiAgICAgaWYgKHZhbHVlID4gbWF4TGVuZ3Ro
Qml0cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAkocmV2
aXNpb24gMjYwNzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsOSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJDUFUuaCIKKyNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBl
cnMuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0Lmgi
CiAjaW5jbHVkZSA8d3RmL0NhZ2VkVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgpAQCAtMzYsNiArMzgsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xh
c3MgSW50MzJCaWdJbnRJbXBsOworY2xhc3MgSGVhcEJpZ0ludEltcGw7CisKIGNsYXNzIEpTQmln
SW50IGZpbmFsIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpT
Q2VsbDsKQEAgLTEyMSwzOSArMTI2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgTGVzc1RoYW4KICAg
ICB9OwogCi0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihKU0JpZ0ludCogYmlnSW50KQotICAgIHsKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgICAg
IGlmIChVTkxJS0VMWSghYmlnSW50KSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0K
LSAgICAgICAgaWYgKGJpZ0ludC0+bGVuZ3RoKCkgPD0gMSkgewotICAgICAgICAgICAgaWYgKCFi
aWdJbnQtPmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOwot
ICAgICAgICAgICAgRGlnaXQgZGlnaXQgPSBiaWdJbnQtPmRpZ2l0KDApOwotICAgICAgICAgICAg
aWYgKGJpZ0ludC0+c2lnbigpKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
aW50NjRfdCBtYXhWYWx1ZSA9IC1zdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyX3Q+OjptaW4oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZh
bHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxp
bnQzMl90Pigtc3RhdGljX2Nhc3Q8aW50NjRfdD4oZGlnaXQpKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbWF4VmFsdWUg
PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4
KCkpOwotICAgICAgICAgICAgICAgIGlmIChkaWdpdCA8PSBtYXhWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oZGlnaXQpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgcmV0dXJuIGJpZ0lu
dDsKLSAgICB9Ci0KLSAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBlcXVh
bHMoSlNCaWdJbnQqLCBKU0JpZ0ludCopOwogICAgIGJvb2wgZXF1YWxzVG9OdW1iZXIoSlNWYWx1
ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBlcXVhbHNUb0ludDMyKGludDMyX3QpOwot
ICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBhcmlzb25SZXN1bHQgY29tcGFyZVRvSW50MzIoaW50
MzJfdCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBsZXNzVGhhbkludDMyKGludDMyX3Qp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgbGVzc1RoYW5FcXVhbEludDMyKGludDMyX3Qp
OwogICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmUoSlNCaWdJbnQqIHgsIEpTQmln
SW50KiB5KTsKKyAgICBzdGF0aWMgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJlKGludDMyX3QgeCwg
SlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmUoSlNCaWdJ
bnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgY29tcGFyZShp
bnQzMl90IHgsIGludDMyX3QgeSkKKyAgICB7CisgICAgICAgIGlmICh4ID09IHkpCisgICAgICAg
ICAgICByZXR1cm4gSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOworICAgICAgICBp
ZiAoeCA8IHkpCisgICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQ6
Okxlc3NUaGFuOworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQ6Okdy
ZWF0ZXJUaGFuOworICAgIH0KIAogICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEpTR2xvYmFs
T2JqZWN0KiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmIHJlc3VsdCkgY29uc3Q7CiAgICAgZG91
YmxlIHRvTnVtYmVyKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CkBAIC0xNjMsOTQgKzE0OSwyMTQg
QEAgcHVibGljOgogCiAgICAgQ29tcGFyaXNvblJlc3VsdCBzdGF0aWMgY29tcGFyZVRvRG91Ymxl
KEpTQmlnSW50KiB4LCBkb3VibGUgeSk7CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGV4cG9uZW50
aWF0ZUhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG9u
ZW50KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCkKKyAgICBBTFdB
WVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGFzSW50MzJPckhlYXBDZWxsKFZNJiB2bSwgaW50NjRf
dCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihleHBv
bmVudGlhdGVIZWFwKGdsb2JhbE9iamVjdCwgYmFzZSwgZXhwb25lbnQpKTsKKyAgICAgICAgaWYg
KHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKSkgPT0gdmFs
dWUpCisgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90Pih2
YWx1ZSkpOworICAgICAgICByZXR1cm4gY3JlYXRlRnJvbSh2bSwgdmFsdWUpOworICAgIH0KKyAg
ICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU1ZhbHVlIGFzSW50MzJPckhlYXBDZWxsKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LT52bSgpLCB2YWx1ZSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIEpTQmlnSW50KiBtdWx0aXBseUhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIEhlYXBCaWdJbnRJbXBsOworcHVibGljOgorICAgIHN0cnVj
dCBJbXBsUmVzdWx0IHsKKyAgICAgICAgSW1wbFJlc3VsdChIZWFwQmlnSW50SW1wbCYpOworICAg
ICAgICBJbXBsUmVzdWx0KEpTQmlnSW50Kik7CisgICAgICAgIEltcGxSZXN1bHQoSW50MzJCaWdJ
bnRJbXBsJik7CisgICAgICAgIEltcGxSZXN1bHQoSlNWYWx1ZSk7CisgICAgICAgIEpTVmFsdWUg
cGF5bG9hZDsKKyAgICB9OworcHJpdmF0ZToKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgZXhw
b25lbnRpYXRlSW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIGJhc2UsIEJpZ0ludElt
cGwyIGV4cG9uZW50KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlw
ZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgbXVsdGlwbHlJbXBsKEpT
R2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBpbmNJbXBs
KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGRlY0ltcGwoSlNHbG9iYWxPYmpl
Y3QqLCBCaWdJbnRJbXBsIHgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwx
LCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBhZGRJbXBsKEpT
R2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0
YXRpYyBJbXBsUmVzdWx0IHN1YkltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlw
ZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgZGl2aWRlSW1wbChKU0ds
b2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0
aWMgSW1wbFJlc3VsdCByZW1haW5kZXJJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEg
eCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4K
KyAgICBzdGF0aWMgSW1wbFJlc3VsdCB1bmFyeU1pbnVzSW1wbChWTSYsIEJpZ0ludEltcGwgeCk7
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGJpdHdpc2VBbmRJbXBsKEpTR2xvYmFsT2JqZWN0
KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVz
dWx0IGJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgYml0d2lzZVhvckltcGwoSlNHbG9i
YWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGJpdHdpc2VOb3RJ
bXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4KTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxS
ZXN1bHQgbGVmdFNoaWZ0SW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBzaWduZWRSaWdodFNoaWZ0SW1w
bChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAg
ICBzdGF0aWMgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJlSW1wbChCaWdJbnRJbXBsMSB4LCBCaWdJ
bnRJbXBsMiB5KTsKKworcHVibGljOgorICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4
cG9uZW50KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIGJhc2UsIGludDMyX3QgZXhwb25lbnQpOworICAgIHN0
YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBp
bnQzMl90IGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCk7CisgICAgc3RhdGljIEpTVmFsdWUgZXhw
b25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgYmFzZSwgaW50
MzJfdCBleHBvbmVudCk7CisKKyAgICBzdGF0aWMgSlNWYWx1ZSBtdWx0aXBseShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRp
YyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qg
eCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBK
U1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwg
aW50MzJfdCB5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKG11
bHRpcGx5SGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAgICAgaW50NjRfdCByZXN1bHQg
PSBzdGF0aWNfY2FzdDxpbnQ2NF90Pih4KSAqIHN0YXRpY19jYXN0PGludDY0X3Q+KHkpOyAKKyAg
ICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgcmVzdWx0KTsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIEpTQmlnSW50KiBpbmNIZWFwKEpTR2xvYmFsT2JqZWN0Kiwg
SlNCaWdJbnQqIHgpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGluYyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKKyAgICBzdGF0aWMgSlNWYWx1ZSBpbmMoSlNHbG9iYWxP
YmplY3QqLCBKU0JpZ0ludCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgaW5jKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlD
b252ZXJ0VG9CaWdJbnQzMihpbmNIZWFwKGdsb2JhbE9iamVjdCwgeCkpOworICAgICAgICByZXR1
cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQ2NF90Pih4
KSArIDEpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogZGVjSGVhcChKU0dsb2JhbE9i
amVjdCosIEpTQmlnSW50KiB4KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBkZWMoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCisgICAgc3RhdGljIEpTVmFsdWUgZGVjKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGRlY0hlYXAoZ2xvYmFsT2JqZWN0
LCB4KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PGludDY0X3Q+KHgpIC0gMSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50
KiBhZGRIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAg
ICBzdGF0aWMgSlNWYWx1ZSBhZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHN0YXRpYyBKU1ZhbHVlIGFkZChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBK
U1ZhbHVlIGFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50
MzJfdCB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBhZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYWRkKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGFkZEhlYXAoZ2xvYmFsT2JqZWN0
LCB4LCB5KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PGludDY0X3Q+KHgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSkpOwogICAg
IH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogc3ViSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmln
SW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0aWMg
SlNWYWx1ZSBzdWIoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwor
ICAgIHN0YXRpYyBKU1ZhbHVlIHN1YihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQz
Ml90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHN1YihKU0dsb2JhbE9iamVjdCosIGludDMyX3Qg
eCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHN1YihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBzdWJIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JI
ZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpIC0gc3RhdGljX2Nh
c3Q8aW50NjRfdD4oeSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogZGl2aWRlSGVh
cChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGlj
IEpTVmFsdWUgZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsKKyAg
ICBzdGF0aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHgsIEpTQmln
SW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5
Q29udmVydFRvQmlnSW50MzIoZGl2aWRlSGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAg
ICAgaWYgKCF5KSB7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOworICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXNJ
bnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQ2NF90Pih4KSAvIHN0
YXRpY19jYXN0PGludDY0X3Q+KHkpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIHJl
bWFpbmRlckhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwot
ICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCisgICAgc3RhdGljIEpTVmFsdWUgcmVtYWluZGVy
KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMg
SlNWYWx1ZSByZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSByZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90
IHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSByZW1haW5kZXIoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIocmVtYWluZGVySGVhcChnbG9iYWxPYmplY3Qs
IHgsIHkpKTsKKyAgICAgICAgaWYgKCF5KSB7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICAgICAgdGhyb3dS
YW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlzIGFuIGludmFsaWQgZGl2aXNvciB2
YWx1ZS4iX3MpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxp
bnQ2NF90Pih4KSAlIHN0YXRpY19jYXN0PGludDY0X3Q+KHkpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIHVuYXJ5TWludXNIZWFwKFZNJiwgSlNCaWdJbnQqIHgpOwotICAgIHN0YXRp
YyBKU1ZhbHVlIHVuYXJ5TWludXMoVk0mIHZtLCBKU0JpZ0ludCogeCkKKyAgICBzdGF0aWMgSlNW
YWx1ZSB1bmFyeU1pbnVzKFZNJiB2bSwgSlNCaWdJbnQqIHgpOworICAgIHN0YXRpYyBKU1ZhbHVl
IHVuYXJ5TWludXMoVk0mIHZtLCBpbnQzMl90IHgpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5
Q29udmVydFRvQmlnSW50MzIodW5hcnlNaW51c0hlYXAodm0sIHgpKTsKKyAgICAgICAgcmV0dXJu
IGFzSW50MzJPckhlYXBDZWxsKHZtLCAtc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZUFuZEhlYXAoSlNHbG9iYWxPYmplY3QqLCBK
U0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VBbmQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQor
ICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VBbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNl
QW5kKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGlj
IEpTVmFsdWUgYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgSlNCaWdJbnQq
IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VBbmQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5
Q29udmVydFRvQmlnSW50MzIoYml0d2lzZUFuZEhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7Cisg
ICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHggJiB5KTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VPckhlYXAoSlNHbG9iYWxPYmplY3Qq
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VP
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lz
ZU9yKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGlj
IEpTVmFsdWUgYml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBKU0JpZ0ludCog
eSk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNv
bnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VPckhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAg
ICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHggfCB5KTsKICAgICB9
CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VYb3JIZWFwKEpTR2xvYmFsT2JqZWN0Kiwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlWG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkK
KyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lz
ZVhvcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRp
YyBKU1ZhbHVlIGJpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHgsIEpTQmlnSW50
KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRy
eUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VYb3JIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOwor
ICAgICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCB4IF4geSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlTm90SGVhcChKU0dsb2JhbE9iamVj
dCosIEpTQmlnSW50KiB4KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlTm90KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQorICAgIHN0YXRpYyBKU1ZhbHVlIGJp
dHdpc2VOb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpOworICAg
IHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VOb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50MzJfdCB4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJp
dHdpc2VOb3RIZWFwKGdsb2JhbE9iamVjdCwgeCkpOworICAgICAgICByZXR1cm4gYXNJbnQzMk9y
SGVhcENlbGwoZ2xvYmFsT2JqZWN0LCB+eCk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50
KiBsZWZ0U2hpZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHN0YXRpYyBKU1ZhbHVlIGxlZnRT
aGlmdChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3Rh
dGljIEpTVmFsdWUgbGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMy
X3QgeSk7CisgICAgc3RhdGljIEpTVmFsdWUgbGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiwgaW50
MzJfdCB4LCBKU0JpZ0ludCogeSk7Citwcml2YXRlOgorICAgIHN0YXRpYyBKU1ZhbHVlIGxlZnRT
aGlmdFNsb3coSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHgsIGludDMyX3QgeSk7CitwdWJsaWM6
CisgICAgc3RhdGljIEpTVmFsdWUgbGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKGxlZnRTaGlmdEhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7Ci0gICAgfQor
ICAgICAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgICAgIC8vIFNoaWZ0cyBvbmUgbGVzcyB0aGFu
IHJlcXVlc3RlZCwgYnV0IGRvZXNuJ3QgbWF0dGVyIHNpbmNlIGxocyBpcyBpbnQzMgorICAgICAg
ICAgICAgcmV0dXJuIHNpZ25lZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCB4LCB5ID09IElOVDMy
X01JTiA/IElOVDMyX01BWCA6IC15KTsKKyAgICAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50
KiBzaWduZWRSaWdodFNoaWZ0SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgc2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCi0gICAgewotICAg
ICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoc2lnbmVkUmlnaHRTaGlmdEhlYXAoZ2xv
YmFsT2JqZWN0LCB4LCB5KSk7CisgICAgICAgIC8vIERvIHNvbWUgY2hlY2tzIHRvIGRldGVjdCBv
dmVyZmxvdyBvZiBsZWZ0LXNoaWZ0LiBCdXQgdGhpcyBpcyBtdWNoIGNoZWFwZXIgY29tcGFyZWQg
dG8gYWxsb2NhdGluZyB0d28gSlNCaWdJbnQgYW5kIHBlcmZvcm0gc2hpZnQgb3BlcmF0aW9ucyBp
biBKU0JpZ0ludC4KKyAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50
MzIoMCk7CisgICAgICAgIGlmICh5IDwgMzIpCisgICAgICAgICAgICByZXR1cm4gYXNJbnQzMk9y
SGVhcENlbGwoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxpbnQ2NF90Pih4KSA8PCB5KTsKKyAg
ICAgICAgcmV0dXJuIGxlZnRTaGlmdFNsb3coZ2xvYmFsT2JqZWN0LCB4LCB5KTsKKyAgICB9CisK
KyAgICBzdGF0aWMgSlNWYWx1ZSBzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiwgSlNC
aWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBzaWduZWRSaWdodFNo
aWZ0KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGlj
IEpTVmFsdWUgc2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgSlNC
aWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCisgICAgeworICAgICAg
ICBpZiAoeSA8IDApIHsKKyAgICAgICAgICAgIC8vIFNoaWZ0cyBvbmUgbGVzcyB0aGFuIHJlcXVl
c3RlZCwgYnV0IGRvZXNuJ3QgbWF0dGVyIHNpbmNlIGxocyBpcyBpbnQzMgorICAgICAgICAgICAg
cmV0dXJuIGxlZnRTaGlmdChnbG9iYWxPYmplY3QsIHgsIHkgPT0gSU5UMzJfTUlOID8gSU5UMzJf
TUFYIDogLXkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoeCA+PiBz
dGQ6Om1pbih5LCAzMSkpOwogICAgIH0KIAogICAgIERpZ2l0IGRpZ2l0KHVuc2lnbmVkKTsKQEAg
LTI3NSwxOCArMzgxLDI0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIHVpbnQ2NF90IGNh
bGN1bGF0ZU1heGltdW1DaGFyYWN0ZXJzUmVxdWlyZWQodW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25l
ZCByYWRpeCwgRGlnaXQgbGFzdERpZ2l0LCBib29sIHNpZ24pOwogICAgIAotICAgIHN0YXRpYyBD
b21wYXJpc29uUmVzdWx0IGFic29sdXRlQ29tcGFyZShKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
OwotICAgIHN0YXRpYyB2b2lkIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYsIEpTQmln
SW50KiB4LCBEaWdpdCBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWlu
ZGVyKTsKLSAgICBzdGF0aWMgdm9pZCBpbnRlcm5hbE11bHRpcGx5QWRkKEpTQmlnSW50KiBzb3Vy
Y2UsIERpZ2l0IGZhY3RvciwgRGlnaXQgc3VtbWFuZCwgdW5zaWduZWQsIEpTQmlnSW50KiByZXN1
bHQpOwotICAgIHN0YXRpYyB2b2lkIG11bHRpcGx5QWNjdW11bGF0ZShKU0JpZ0ludCogbXVsdGlw
bGljYW5kLCBEaWdpdCBtdWx0aXBsaWVyLCBKU0JpZ0ludCogYWNjdW11bGF0b3IsIHVuc2lnbmVk
IGFjY3VtdWxhdG9ySW5kZXgpOwotICAgIHN0YXRpYyB2b2lkIGFic29sdXRlRGl2V2l0aEJpZ0lu
dERpdmlzb3IoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogZGl2aWRlbmQsIEpTQmlnSW50KiBk
aXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBKU0JpZ0ludCoqIHJlbWFpbmRlcik7CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAg
ICBzdGF0aWMgQ29tcGFyaXNvblJlc3VsdCBhYnNvbHV0ZUNvbXBhcmUoQmlnSW50SW1wbDEgeCwg
QmlnSW50SW1wbDIgeSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAg
c3RhdGljIHZvaWQgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKFZNJiwgQmlnSW50SW1wbCB4
LCBEaWdpdCBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVyKTsK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMgdm9pZCBpbnRl
cm5hbE11bHRpcGx5QWRkKEJpZ0ludEltcGwgc291cmNlLCBEaWdpdCBmYWN0b3IsIERpZ2l0IHN1
bW1hbmQsIHVuc2lnbmVkLCBKU0JpZ0ludCogcmVzdWx0KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMgdm9pZCBtdWx0aXBseUFjY3VtdWxhdGUoQmlnSW50
SW1wbCBtdWx0aXBsaWNhbmQsIERpZ2l0IG11bHRpcGxpZXIsIEpTQmlnSW50KiBhY2N1bXVsYXRv
ciwgdW5zaWduZWQgYWNjdW11bGF0b3JJbmRleCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGwxPgorICAgIHN0YXRpYyB2b2lkIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3Io
SlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSBkaXZpZGVuZCwgSlNCaWdJbnQqIGRpdmlzb3Is
IEpTQmlnSW50KiogcXVvdGllbnQsIEpTQmlnSW50KiogcmVtYWluZGVyKTsKICAgICAKICAgICBl
bnVtIGNsYXNzIExlZnRTaGlmdE1vZGUgewogICAgICAgICBTYW1lU2l6ZVJlc3VsdCwKICAgICAg
ICAgQWx3YXlzQWRkT25lRGlnaXQKICAgICB9OwogICAgIAotICAgIHN0YXRpYyBKU0JpZ0ludCog
YWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgs
IHVuc2lnbmVkIHNoaWZ0LCBMZWZ0U2hpZnRNb2RlKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbD4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlTGVmdFNoaWZ0QWx3YXlz
Q29weShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwgeCwgdW5zaWduZWQgc2hpZnQsIExlZnRT
aGlmdE1vZGUpOwogICAgIHN0YXRpYyBib29sIHByb2R1Y3RHcmVhdGVyVGhhbihEaWdpdCBmYWN0
b3IxLCBEaWdpdCBmYWN0b3IyLCBEaWdpdCBoaWdoLCBEaWdpdCBsb3cpOwogCiAgICAgRGlnaXQg
YWJzb2x1dGVJbnBsYWNlQWRkKEpTQmlnSW50KiBzdW1tYW5kLCB1bnNpZ25lZCBzdGFydEluZGV4
KTsKQEAgLTI5OCwyNiArNDEwLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIFNraXAKICAgICB9Owog
Ci0gICAgZW51bSBjbGFzcyBTeW1tZXRyaWNPcCB7Ci0gICAgICAgIFN5bW1ldHJpYywKLSAgICAg
ICAgTm90U3ltbWV0cmljCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpdHdpc2VP
cD4KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQml0d2lzZU9wKFZNJiwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5LCBFeHRyYURpZ2l0c0hhbmRsaW5nLCBTeW1tZXRyaWNPcCwgQml0d2lz
ZU9wJiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJ
bnRJbXBsMiwgdHlwZW5hbWUgQml0d2lzZU9wPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1
dGVCaXR3aXNlT3AoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBFeHRyYURpZ2l0
c0hhbmRsaW5nLCBCaXR3aXNlT3AmJik7CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRl
QW5kKFZNJiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNCaWdJbnQq
IGFic29sdXRlT3IoVk0mLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBK
U0JpZ0ludCogYWJzb2x1dGVBbmROb3QoVk0mLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwot
ICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoVk0mLCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmln
SW50SW1wbDI+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZChWTSYsIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZU9y
KFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSlNCaWdJ
bnQqIGFic29sdXRlQW5kTm90KFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7Cisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4K
KyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlWG9yKFZNJiwgQmlnSW50SW1wbDEgeCwgQmln
SW50SW1wbDIgeSk7CiAKICAgICBlbnVtIGNsYXNzIFNpZ25PcHRpb24gewogICAgICAgICBTaWdu
ZWQsCiAgICAgICAgIFVuc2lnbmVkCiAgICAgfTsKIAotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJz
b2x1dGVBZGRPbmUoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgU2lnbk9wdGlvbik7Ci0g
ICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVN1Yk9uZShKU0dsb2JhbE9iamVjdCosIEpTQmln
SW50KiB4LCB1bnNpZ25lZCByZXN1bHRMZW5ndGgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBZGRPbmUoSlNHbG9iYWxP
YmplY3QqLCBCaWdJbnRJbXBsIHgsIFNpZ25PcHRpb24pOworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVTdWJPbmUoSlNHbG9i
YWxPYmplY3QqLCBCaWdJbnRJbXBsIHgsIHVuc2lnbmVkIHJlc3VsdExlbmd0aCk7CiAKICAgICAv
LyBEaWdpdCBhcml0aG1ldGljIGhlbHBlcnMuCiAgICAgc3RhdGljIERpZ2l0IGRpZ2l0QWRkKERp
Z2l0IGEsIERpZ2l0IGIsIERpZ2l0JiBjYXJyeSk7CkBAIC0zNDMsMTggKzQ1NiwyNCBAQCBwcml2
YXRlOgogCiAgICAgc3RhdGljIEpTQmlnSW50KiBhbGxvY2F0ZUZvcihKU0dsb2JhbE9iamVjdCos
IFZNJiwgdW5zaWduZWQgcmFkaXgsIHVuc2lnbmVkIGNoYXJjb3VudCk7CiAKLSAgICBzdGF0aWMg
SlNCaWdJbnQqIGNvcHkoVk0mLCBKU0JpZ0ludCogeCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBjb3B5KFZNJiwgQmlnSW50SW1wbCB4
KTsKIAogICAgIHZvaWQgaW5wbGFjZU11bHRpcGx5QWRkKERpZ2l0IG11bHRpcGxpZXIsIERpZ2l0
IHBhcnQpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3Qq
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbik7Ci0gICAgc3RhdGlj
IEpTQmlnSW50KiBhYnNvbHV0ZVN1YihWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSwgYm9v
bCByZXN1bHRTaWduKTsKLQotICAgIHN0YXRpYyBKU0JpZ0ludCogbGVmdFNoaWZ0QnlBYnNvbHV0
ZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGlj
IEpTQmlnSW50KiByaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBhYnNvbHV0ZUFkZChK
U0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0
U2lnbik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJ
bnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBhYnNvbHV0ZVN1YihWTSYsIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHksIGJvb2wgcmVzdWx0U2lnbik7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJ
bXBsUmVzdWx0IGxlZnRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBs
MSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEs
IHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IHJpZ2h0U2hpZnRC
eUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7
CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIHJpZ2h0U2hpZnRCeU1heGltdW0oVk0mLCBib29sIHNp
Z24pOworICAgIHN0YXRpYyBJbXBsUmVzdWx0IHJpZ2h0U2hpZnRCeU1heGltdW0oVk0mLCBib29s
IHNpZ24pOwogCi0gICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEpTQmln
SW50KiB4KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMg
T3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91bnQoQmlnSW50SW1wbCB4KTsKIAogICAgIGlubGlu
ZSBzdGF0aWMgc2l6ZV90IG9mZnNldE9mRGF0YSgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2MDc5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MSwyMCArNzEsMTIgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUganNBZGRTbG93Q2Fz
ZShKU0dsbwogICAgIGF1dG8gZG91YmxlT3AgPSBbXSAoZG91YmxlIGxlZnQsIGRvdWJsZSByaWdo
dCkgLT4gZG91YmxlIHsKICAgICAgICAgcmV0dXJuIGxlZnQgKyByaWdodDsKICAgICB9OwotICAg
IGF1dG8gYmlnSW50MzJPcCA9IFtdIChpbnQzMl90IGxlZnQsIGludDMyX3QgcmlnaHQpIC0+IEpT
VmFsdWUgewotI2lmIFVTRShCSUdJTlQzMikKLSAgICAgICAgQ2hlY2tlZEludDMyIHJlc3VsdCA9
IGxlZnQ7Ci0gICAgICAgIHJlc3VsdCArPSByaWdodDsKLSAgICAgICAgaWYgKFVOTElLRUxZKHJl
c3VsdC5oYXNPdmVyZmxvd2VkKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIGpzQmlnSW50MzIocmVzdWx0LnVuc2FmZUdldCgpKTsKLSNlbHNlCi0gICAg
ICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgorCisgICAgYXV0byBi
aWdJbnRPcCA9IFtdIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1
dG8gcmlnaHQpIHsKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjphZGQoZ2xvYmFsT2JqZWN0LCBs
ZWZ0LCByaWdodCk7CiAgICAgfTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFyaXRo
bWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHAxLCBwMiwgSlNCaWdJbnQ6OmFkZCwgZG91Ymxl
T3AsIGJpZ0ludDMyT3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4g
YWRkaXRpb24uIl9zKSk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGFyaXRobWV0
aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHAxLCBwMiwgZG91YmxlT3AsIGJpZ0ludE9wLCBiaWdJ
bnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhl
ciB0eXBlIGluIGFkZGl0aW9uLiJfcykpOwogfQogCiBKU1ZhbHVlIGpzVHlwZVN0cmluZ0ZvclZh
bHVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24g
MjYwNzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDQsMjEgKzI0NCwxNCBAQCBBTFdBWVNfSU5MSU5FIEpTQmlnSW50
OjpDb21wYXJpc29uUmVzdWx0CiAgICAgQVNTRVJUKHJpZ2h0LmlzQmlnSW50KCkpOwogI2lmIFVT
RShCSUdJTlQzMikKICAgICBpZiAobGVmdC5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgaWYgKHJp
Z2h0LmlzQmlnSW50MzIoKSkgewotICAgICAgICAgICAgaW50MzJfdCBsZWZ0SW50MzIgPSBsZWZ0
LmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICAgICAgaW50MzJfdCByaWdodEludDMyID0gcmln
aHQuYmlnSW50MzJBc0ludDMyKCk7Ci0gICAgICAgICAgICBpZiAobGVmdEludDMyID09IHJpZ2h0
SW50MzIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0
OjpFcXVhbDsKLSAgICAgICAgICAgIGlmIChsZWZ0SW50MzIgPCByaWdodEludDMyKQotICAgICAg
ICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW47Ci0g
ICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFu
OwotICAgICAgICB9CisgICAgICAgIGlmIChyaWdodC5pc0JpZ0ludDMyKCkpCisgICAgICAgICAg
ICByZXR1cm4gSlNCaWdJbnQ6OmNvbXBhcmUobGVmdC5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHQu
YmlnSW50MzJBc0ludDMyKCkpOwogICAgICAgICBBU1NFUlQocmlnaHQuaXNIZWFwQmlnSW50KCkp
OwotICAgICAgICByZXR1cm4gaW52ZXJ0QmlnSW50Q29tcGFyZVJlc3VsdChyaWdodC5hc0hlYXBC
aWdJbnQoKS0+Y29tcGFyZVRvSW50MzIobGVmdC5iaWdJbnQzMkFzSW50MzIoKSkpOworICAgICAg
ICByZXR1cm4gSlNCaWdJbnQ6OmNvbXBhcmUobGVmdC5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHQu
YXNIZWFwQmlnSW50KCkpOwogICAgIH0KICAgICBpZiAocmlnaHQuaXNCaWdJbnQzMigpKSB7CiAg
ICAgICAgIEFTU0VSVChsZWZ0LmlzSGVhcEJpZ0ludCgpKTsKLSAgICAgICAgcmV0dXJuIGxlZnQu
YXNIZWFwQmlnSW50KCktPmNvbXBhcmVUb0ludDMyKHJpZ2h0LmJpZ0ludDMyQXNJbnQzMigpKTsK
KyAgICAgICAgcmV0dXJuIEpTQmlnSW50Ojpjb21wYXJlKGxlZnQuYXNIZWFwQmlnSW50KCksIHJp
Z2h0LmJpZ0ludDMyQXNJbnQzMigpKTsKICAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gSlNCaWdJ
bnQ6OmNvbXBhcmUobGVmdC5hc0hlYXBCaWdJbnQoKSwgcmlnaHQuYXNIZWFwQmlnSW50KCkpOwpA
QCAtMzE3LDcgKzMxMCw3IEBAIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1
bHQKICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdDo6VW5kZWZp
bmVkOwogCiAgICAgICAgIGlmIChiaWdJbnRWYWx1ZS5pc0hlYXBCaWdJbnQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBpbnZlcnRCaWdJbnRDb21wYXJlUmVzdWx0KGJpZ0ludFZhbHVlLmFzSGVhcEJp
Z0ludCgpLT5jb21wYXJlVG9JbnQzMih2MSkpOworICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50
Ojpjb21wYXJlKHYxLCBiaWdJbnRWYWx1ZS5hc0hlYXBCaWdJbnQoKSk7CiAKICAgICAgICAgQVNT
RVJUKGJpZ0ludFZhbHVlLmlzQmlnSW50MzIoKSk7CiAjaWYgVVNFKEJJR0lOVDMyKQpAQCAtNTM0
LDkgKzUyNyw4IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0FkZChKU0dsb2JhbE9iamUKICAg
ICByZXR1cm4ganNBZGROb25OdW1iZXIoZ2xvYmFsT2JqZWN0LCB2MSwgdjIpOwogfQogCi0vLyBC
aWdJbnQzMk9wIGV4cGVjdHMgaXRzIG9wZXJhbmRzIHVuYm94ZWQsIGFuZCByZXR1cm5zIGl0cyBy
ZXN1bHQgdW5ib3hlZCBhcyB3ZWxsCi10ZW1wbGF0ZTx0eXBlbmFtZSBIZWFwQmlnSW50T3BlcmF0
aW9uLCB0eXBlbmFtZSBEb3VibGVPcGVyYXRpb24sIHR5cGVuYW1lIEJpZ0ludDMyT3A+Ci1BTFdB
WVNfSU5MSU5FIEpTVmFsdWUgYXJpdGhtZXRpY0JpbmFyeU9wKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIsIEhlYXBCaWdJbnRPcGVyYXRpb24mJiBo
ZWFwQmlnSW50T3AsIERvdWJsZU9wZXJhdGlvbiYmIGRvdWJsZU9wLCBCaWdJbnQzMk9wJiYgYmln
SW50MzJPcCwgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQordGVtcGxhdGU8dHlwZW5hbWUgRG91
YmxlT3BlcmF0aW9uPgorQUxXQVlTX0lOTElORSBKU1ZhbHVlIGFyaXRobWV0aWNCaW5hcnlPcChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBEb3Vi
bGVPcGVyYXRpb24mJiBkb3VibGVPcCwgSlNWYWx1ZSAoKmJpZ0ludDMyKShKU0dsb2JhbE9iamVj
dCosIGludDMyX3QsIGludDMyX3QpLCBKU1ZhbHVlICgqbWl4ZWRCaWdJbnQxKShKU0dsb2JhbE9i
amVjdCosIEpTQmlnSW50KiwgaW50MzJfdCksIEpTVmFsdWUgKCptaXhlZEJpZ0ludDIpKEpTR2xv
YmFsT2JqZWN0KiwgaW50MzJfdCwgSlNCaWdJbnQqKSwgSlNWYWx1ZSAoKmhlYXBCaWdJbnQpKEpT
R2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqLCBKU0JpZ0ludCopLCBjb25zdCBjaGFyKiBlcnJvck1l
c3NhZ2UpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTU1MSwyOCArNTQzLDIwIEBAIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBhcml0aG1ldGljQmluYXJ5T3AKIAogI2lmIFVTRShCSUdJTlQzMikK
ICAgICBpZiAobGVmdE51bWVyaWMuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIGlmIChyaWdodE51
bWVyaWMuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBi
aWdJbnQzMk9wKGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYmln
SW50MzJBc0ludDMyKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICBKU0JpZ0ludCogbGVmdEhlYXBCaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
bGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOwotICAgICAgICAgICAgSlNCaWdJbnQqIHJp
Z2h0SGVhcEJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCByaWdodE51bWVyaWMuYmln
SW50MzJBc0ludDMyKCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBo
ZWFwQmlnSW50T3AoZ2xvYmFsT2JqZWN0LCBsZWZ0SGVhcEJpZ0ludCwgcmlnaHRIZWFwQmlnSW50
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkg
ewotICAgICAgICAgICAgSlNCaWdJbnQqIGxlZnRIZWFwQmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0
ZUZyb20odm0sIGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludE9wKGdsb2JhbE9iamVjdCwgbGVmdEhl
YXBCaWdJbnQsIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOwotICAgICAgICB9CisgICAg
ICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJbnQzMigpKQorICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBiaWdJbnQzMihnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmJpZ0lu
dDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAgICAg
aWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgbWl4ZWRCaWdJbnQyKGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYmln
SW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOwogICAgIH0gZWxz
ZSBpZiAobGVmdE51bWVyaWMuaXNIZWFwQmlnSW50KCkpIHsKLSAgICAgICAgaWYgKHJpZ2h0TnVt
ZXJpYy5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgICAgIEpTQmlnSW50KiByaWdodEhlYXBCaWdJ
bnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQz
MigpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludE9w
KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0SGVhcEJpZ0lu
dCkpOwotICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkKLSAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludE9wKGdsb2JhbE9i
amVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJ
bnQoKSkpOworICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkKKyAgICAgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgbWl4ZWRCaWdJbnQxKGdsb2JhbE9iamVjdCwg
bGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIo
KSkpOworICAgICAgICBlbHNlIGlmIChyaWdodE51bWVyaWMuaXNIZWFwQmlnSW50KCkpCisgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0
LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgp
KSk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oYmlnSW50MzJPcCk7CiAgICAgaWYg
KGxlZnROdW1lcmljLmlzSGVhcEJpZ0ludCgpICYmIHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQo
KSkKLSAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50T3AoZ2xvYmFs
T2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJp
Z0ludCgpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludChn
bG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNI
ZWFwQmlnSW50KCkpKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7CkBAIC01ODMsMjEgKzU2NywxMiBAQCBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUganNTdWIoSlNHbG9iYWxPYmplCiAgICAgYXV0byBkb3VibGVPcCA9
IFtdIChkb3VibGUgbGVmdCwgZG91YmxlIHJpZ2h0KSAtPiBkb3VibGUgewogICAgICAgICByZXR1
cm4gbGVmdCAtIHJpZ2h0OwogICAgIH07Ci0gICAgYXV0byBiaWdJbnQzMk9wID0gW10gKGludDMy
X3QgbGVmdCwgaW50MzJfdCByaWdodCkgLT4gSlNWYWx1ZSB7Ci0jaWYgVVNFKEJJR0lOVDMyKQot
ICAgICAgICBDaGVja2VkSW50MzIgcmVzdWx0ID0gbGVmdDsKLSAgICAgICAgcmVzdWx0IC09IHJp
Z2h0OwotICAgICAgICBpZiAoVU5MSUtFTFkocmVzdWx0Lmhhc092ZXJmbG93ZWQoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICByZXR1cm4ganNCaWdJbnQzMihyZXN1
bHQudW5zYWZlR2V0KCkpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAg
ICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI2VuZGlmCisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAgICAgICByZXR1cm4g
SlNCaWdJbnQ6OnN1YihnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsKICAgICB9OwogCi0gICAg
cmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgSlNCaWdJbnQ6
OnN1YiwgZG91YmxlT3AsIGJpZ0ludDMyT3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90
aGVyIHR5cGUgaW4gc3VidHJhY3Rpb24uIl9zKTsKKyAgICByZXR1cm4gYXJpdGhtZXRpY0JpbmFy
eU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBkb3VibGVPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBi
aWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUg
aW4gc3VidHJhY3Rpb24uIl9zKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzTXVsKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCkBAIC02
MDUsMjEgKzU4MCwxMiBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNNdWwoSlNHbG9iYWxPYmpl
CiAgICAgYXV0byBkb3VibGVPcCA9IFtdIChkb3VibGUgbGVmdCwgZG91YmxlIHJpZ2h0KSAtPiBk
b3VibGUgewogICAgICAgICByZXR1cm4gbGVmdCAqIHJpZ2h0OwogICAgIH07Ci0gICAgYXV0byBi
aWdJbnQzMk9wID0gW10gKGludDMyX3QgbGVmdCwgaW50MzJfdCByaWdodCkgLT4gSlNWYWx1ZSB7
Ci0jaWYgVVNFKEJJR0lOVDMyKQotICAgICAgICBDaGVja2VkSW50MzIgcmVzdWx0ID0gbGVmdDsK
LSAgICAgICAgcmVzdWx0ICo9IHJpZ2h0OwotICAgICAgICBpZiAocmVzdWx0Lmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBqc0Jp
Z0ludDMyKHJlc3VsdC51bnNhZmVHZXQoKSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0o
bGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKKworICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYXV0byBsZWZ0LCBhdXRvIHJpZ2h0KSB7CisgICAg
ICAgIHJldHVybiBKU0JpZ0ludDo6bXVsdGlwbHkoZ2xvYmFsT2JqZWN0LCBsZWZ0LCByaWdodCk7
CiAgICAgfTsKIAotICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2
MSwgdjIsIEpTQmlnSW50OjptdWx0aXBseSwgZG91YmxlT3AsIGJpZ0ludDMyT3AsICJJbnZhbGlk
IG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gbXVsdGlwbGljYXRpb24uIl9zKTsKKyAg
ICByZXR1cm4gYXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBkb3VibGVP
cCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBv
ZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gbXVsdGlwbGljYXRpb24uIl9zKTsKIH0KIAogQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGpzRGl2KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
VmFsdWUgdjEsIEpTVmFsdWUgdjIpCkBAIC02MjcsMTkgKzU5MywxMiBAQCBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUganNEaXYoSlNHbG9iYWxPYmplCiAgICAgYXV0byBkb3VibGVPcCA9IFtdIChkb3Vi
bGUgbGVmdCwgZG91YmxlIHJpZ2h0KSAtPiBkb3VibGUgewogICAgICAgICByZXR1cm4gbGVmdCAv
IHJpZ2h0OwogICAgIH07Ci0gICAgYXV0byBiaWdJbnQzMk9wID0gW10gKGludDMyX3QgbGVmdCwg
aW50MzJfdCByaWdodCkgLT4gSlNWYWx1ZSB7Ci0jaWYgVVNFKEJJR0lOVDMyKQotICAgICAgICBp
ZiAoIXJpZ2h0KQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgcmV0dXJu
IGpzQmlnSW50MzIobGVmdCAvIHJpZ2h0KTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShs
ZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgorCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsKKyAgICAg
ICAgcmV0dXJuIEpTQmlnSW50OjpkaXZpZGUoZ2xvYmFsT2JqZWN0LCBsZWZ0LCByaWdodCk7CiAg
ICAgfTsKIAotICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwg
djIsIEpTQmlnSW50OjpkaXZpZGUsIGRvdWJsZU9wLCBiaWdJbnQzMk9wLCAiSW52YWxpZCBtaXgg
b2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGRpdmlzaW9uLiJfcyk7CisgICAgcmV0dXJuIGFy
aXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgZG91YmxlT3AsIGJpZ0ludE9w
LCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFu
ZCBvdGhlciB0eXBlIGluIGRpdmlzaW9uLiJfcyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBqc1JlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBK
U1ZhbHVlIHYyKQpAQCAtNjQ3LDEyICs2MDYsMTIgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpz
UmVtYWluZGVyKEpTR2xvYgogICAgIGF1dG8gZG91YmxlT3AgPSBbXSAoZG91YmxlIGxlZnQsIGRv
dWJsZSByaWdodCkgLT4gZG91YmxlIHsKICAgICAgICAgcmV0dXJuIGpzTW9kKGxlZnQsIHJpZ2h0
KTsKICAgICB9OwotICAgIGF1dG8gYmlnSW50MzJPcCA9IFtdIChpbnQzMl90LCBpbnQzMl90KSAt
PiBKU1ZhbHVlIHsKLSAgICAgICAgLy8gRklYTUU6IGRvIHNvbWV0aGluZyBtb3JlIGNsZXZlciBo
ZXJlLgotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworCisgICAgYXV0byBiaWdJbnRPcCA9IFtd
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsK
KyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpyZW1haW5kZXIoZ2xvYmFsT2JqZWN0LCBsZWZ0LCBy
aWdodCk7CiAgICAgfTsKIAotICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2Jq
ZWN0LCB2MSwgdjIsIEpTQmlnSW50OjpyZW1haW5kZXIsIGRvdWJsZU9wLCBiaWdJbnQzMk9wLCAi
SW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHJlbWFpbmRlci4iX3MpOwor
ICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGRvdWJs
ZU9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4
IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiByZW1haW5kZXIuIl9zKTsKIH0KIAogQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGpzUG93KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdjEsIEpTVmFsdWUgdjIpCkBAIC02NjAsMTMgKzYxOSwxMiBAQCBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUganNQb3coSlNHbG9iYWxPYmplCiAgICAgYXV0byBkb3VibGVPcCA9IFtdIChkb3VibGUg
bGVmdCwgZG91YmxlIHJpZ2h0KSAtPiBkb3VibGUgewogICAgICAgICByZXR1cm4gb3BlcmF0aW9u
TWF0aFBvdyhsZWZ0LCByaWdodCk7CiAgICAgfTsKLSAgICBhdXRvIGJpZ0ludDMyT3AgPSBbXSAo
aW50MzJfdCwgaW50MzJfdCkgLT4gSlNWYWx1ZSB7Ci0gICAgICAgIC8vIEV4cG9uZW50aWF0aW9u
IG9uIGludGVnZXJzIGlzIGJvdGggc29tZXdoYXQgc2xvdyBpbiB0aGUgYmVzdCBjYXNlLCBhbmQg
dmVyeSBsaWtlbHkgdG8gb3ZlcmZsb3cuCi0gICAgICAgIC8vIFNvIGRvbid0IGJvdGhlciB0cnlp
bmcgdG8gYXZvaWQgYSBoZWFwIGFsbG9jYXRpb24gaW4gdGhhdCBjYXNlLgotICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOworCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsKKyAgICAgICAgcmV0dXJuIEpT
QmlnSW50OjpleHBvbmVudGlhdGUoZ2xvYmFsT2JqZWN0LCBsZWZ0LCByaWdodCk7CiAgICAgfTsK
IAotICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIEpT
QmlnSW50OjpleHBvbmVudGlhdGUsIGRvdWJsZU9wLCBiaWdJbnQzMk9wLCAiSW52YWxpZCBtaXgg
b2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGV4cG9uZW50aWF0aW9uLiJfcyk7CisgICAgcmV0
dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgZG91YmxlT3AsIGJp
Z0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAiSW52YWxpZCBtaXggb2YgQmln
SW50IGFuZCBvdGhlciB0eXBlIGluIGV4cG9uZW50aWF0aW9uLiJfcyk7CiB9CiAKIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBqc0luYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IHYpCkBAIC02ODEsMTMgKzYzOSw4IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0luYyhKU0ds
b2JhbE9iamUKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG9wZXJhbmROdW1lcmljLmFzTnVtYmVy
KCkgKyAxKTsKIAogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAob3BlcmFuZE51bWVyaWMuaXNC
aWdJbnQzMigpKSB7Ci0gICAgICAgIGludDY0X3QgbmV3VmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ2
NF90PihvcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkgKyAxOwotICAgICAgICAvLyBG
SVhNRTogdGhlIGZvbGxvd2luZyBuZXh0IGZldyBsaW5lcyBtaWdodCBiZW5lZml0IGZyb20gYmVp
bmcgbWFkZSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uCi0gICAgICAgIGlmIChuZXdWYWx1ZSA+IElO
VF9NQVgpCi0gICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIG5ld1Zh
bHVlKTsKLSAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obmV3
VmFsdWUpKTsKLSAgICB9CisgICAgaWYgKG9wZXJhbmROdW1lcmljLmlzQmlnSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIEpTQmlnSW50OjppbmMoZ2xvYmFsT2JqZWN0LCBvcGVyYW5kTnVtZXJpYy5i
aWdJbnQzMkFzSW50MzIoKSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChvcGVyYW5kTnVtZXJpYy5p
c0hlYXBCaWdJbnQoKSk7CkBAIC03MDYsMTMgKzY1OSw4IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBqc0RlYyhKU0dsb2JhbE9iamUKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKG9wZXJhbmROdW1l
cmljLmFzTnVtYmVyKCkgLSAxKTsKIAogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAob3BlcmFu
ZE51bWVyaWMuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIGludDY0X3QgbmV3VmFsdWUgPSBzdGF0
aWNfY2FzdDxpbnQ2NF90PihvcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkgLSAxOwot
ICAgICAgICAvLyBGSVhNRTogdGhlIGZvbGxvd2luZyBuZXh0IGZldyBsaW5lcyBtaWdodCBiZW5l
Zml0IGZyb20gYmVpbmcgbWFkZSBpbnRvIGEgaGVscGVyIGZ1bmN0aW9uCi0gICAgICAgIGlmIChu
ZXdWYWx1ZSA8IElOVF9NSU4pCi0gICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNyZWF0ZUZy
b20odm0sIG5ld1ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4obmV3VmFsdWUpKTsKLSAgICB9CisgICAgaWYgKG9wZXJhbmROdW1lcmljLmlzQmln
SW50MzIoKSkKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpkZWMoZ2xvYmFsT2JqZWN0LCBvcGVy
YW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChvcGVy
YW5kTnVtZXJpYy5pc0hlYXBCaWdJbnQoKSk7CkBAIC03MzIsMTQgKzY4MCwxNSBAQCBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUganNCaXR3aXNlTm90KEpTR2xvCiAKICNpZiBVU0UoQklHSU5UMzIpCiAg
ICAgaWYgKG9wZXJhbmROdW1lcmljLmlzQmlnSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIGpzQmln
SW50MzIofm9wZXJhbmROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJu
IEpTQmlnSW50OjpiaXR3aXNlTm90KGdsb2JhbE9iamVjdCwgb3BlcmFuZE51bWVyaWMuYmlnSW50
MzJBc0ludDMyKCkpOwogI2VuZGlmCiAKICAgICBBU1NFUlQob3BlcmFuZE51bWVyaWMuaXNIZWFw
QmlnSW50KCkpOwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmJpdHdp
c2VOb3QoZ2xvYmFsT2JqZWN0LCBvcGVyYW5kTnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIEpTVmFsdWUgc2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MiwgYm9vbCBpc0xlZnQpCit0ZW1wbGF0ZSA8Ym9vbCBp
c0xlZnQ+CitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgc2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtNzU3LDc0ICs3MDYsNTUgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHNoaWZ0KEpTR2xvYmFs
T2JqZQogICAgIH0KIAogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAobGVmdE51bWVyaWMuaXNC
aWdJbnQzMigpICYmIHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJf
dCBsZWZ0SW50MzIgPSBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKTsKLSAgICAgICAgaW50
MzJfdCByaWdodEludDMyID0gcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAg
ICBpZiAocmlnaHRJbnQzMiA8IDApIHsKLSAgICAgICAgICAgIGlzTGVmdCA9ICFpc0xlZnQ7Ci0g
ICAgICAgICAgICBpZiAocmlnaHRJbnQzMiA9PSBJTlQzMl9NSU4pCi0gICAgICAgICAgICAgICAg
cmlnaHRJbnQzMiA9IElOVDMyX01BWDsgLy8gU2hpZnRzIG9uZSBsZXNzIHRoYW4gcmVxdWVzdGVk
LCBidXQgbWFrZXMgbm8gb2JzZXJ2YWJsZSBkaWZmZXJlbmNlLgotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHJpZ2h0SW50MzIgPSAtcmlnaHRJbnQzMjsKKyAgICBpZiAobGVmdE51
bWVyaWMuaXNCaWdJbnQzMigpKSB7CisgICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJbnQz
MigpKSB7CisgICAgICAgICAgICBpZiAoaXNMZWZ0KQorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnRO
dW1lcmljLmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkp
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OnNpZ25l
ZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwg
cmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSk7CiAgICAgICAgIH0KLSAgICAgICAgQVNT
RVJUKHJpZ2h0SW50MzIgPj0gMCk7Ci0KLSAgICAgICAgLy8gVGhpcyBzdGQ6Om1pbiBpcyBhIGJp
dCBoYWNreSwgYnV0IHJlcXVpcmVkIGJlY2F1c2UgaW4gQysrIGl0IGlzIHVuZGVmaW5lZCBiZWhh
dmlvciB0byBkbyBhIHNoaWZ0IHdoZXJlIHRoZSByaWdodCBvcGVyYW5kIGlzIGdyZWF0ZXIgb3Ig
ZXF1YWwgdG8gdGhlIGJpdC13aWR0aCBvZiB0aGUgbGVmdCBvcGVyYW5kLgotICAgICAgICBpZiAo
IWlzTGVmdCkKLSAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKGxlZnRJbnQzMiA+PiBzdGQ6
Om1pbihyaWdodEludDMyLCAzMSkpOwotCi0gICAgICAgIC8vIERvIHNvbWUgY2hlY2tzIHRvIGRl
dGVjdCBvdmVyZmxvdyBvZiBsZWZ0LXNoaWZ0LiBCdXQgdGhpcyBpcyBtdWNoIGNoZWFwZXIgY29t
cGFyZWQgdG8gYWxsb2NhdGluZyB0d28gSlNCaWdJbnQgYW5kIHBlcmZvcm0gc2hpZnQgb3BlcmF0
aW9ucyBpbiBKU0JpZ0ludC4KLSAgICAgICAgaWYgKCFsZWZ0SW50MzIpCi0gICAgICAgICAgICBy
ZXR1cm4ganNCaWdJbnQzMigwKTsKLSAgICAgICAgaWYgKHJpZ2h0SW50MzIgPCAzMikgewotICAg
ICAgICAgICAgaW50NjRfdCByZXN1bHQ2NCA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGxlZnRJbnQz
MikgPDwgcmlnaHRJbnQzMjsKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ2NF90Pihz
dGF0aWNfY2FzdDxpbnQzMl90PihyZXN1bHQ2NCkpID09IHJlc3VsdDY0KQotICAgICAgICAgICAg
ICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KHJlc3VsdDY0KSk7Cisg
ICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNIZWFwQmlnSW50KCkpIHsKKyAgICAgICAgICAgIGlm
IChpc0xlZnQpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0Jp
Z0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMy
KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOworICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChnbG9iYWxPYmplY3Qs
IGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50
KCkpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobGVmdE51bWVyaWMuaXNIZWFwQmlnSW50
KCkpIHsKKyAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkpIHsKKyAgICAgICAg
ICAgIGlmIChpc0xlZnQpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmln
SW50KCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkpOworICAgICAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChnbG9iYWxP
YmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYmlnSW50MzJB
c0ludDMyKCkpKTsKKyAgICAgICAgfSBlbHNlIGlmIChyaWdodE51bWVyaWMuaXNIZWFwQmlnSW50
KCkpIHsKKyAgICAgICAgICAgIGlmIChpc0xlZnQpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51
bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOworICAg
ICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6c2lnbmVkUmlnaHRT
aGlmdChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVy
aWMuYXNIZWFwQmlnSW50KCkpKTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIEluIHRoZSBjYXNl
IG9mIGEgbGVmdCBzaGlmdCB3ZSBjYW4gb3ZlcmZsb3cuIEkgZGVhbCB3aXRoIHRoaXMgYnkgYWxs
b2NhdGluZyBIZWFwQmlnSW50cy4KLSAgICAgICAgLy8gRklYTUU6IGl0IG1pZ2h0IGJlIHBvc3Np
YmxlIHRvIGRvIHNvbWV0aGluZyBzbWFydGVyLCB0cnlpbmcgdG8gZG8gdGhlIGxlZnQgc2hpZnQg
YW5kIGRldGVjdGluZyBzb21laG93IGlmIGl0IG92ZXJmbG93ZWQuCi0gICAgICAgIEpTQmlnSW50
KiBsZWZ0SGVhcEJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBsZWZ0SW50MzIpOwot
ICAgICAgICBKU0JpZ0ludCogcmlnaHRIZWFwQmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20o
dm0sIHJpZ2h0SW50MzIpOwotICAgICAgICBpZiAoaXNMZWZ0KQotICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVm
dEhlYXBCaWdJbnQsIHJpZ2h0SGVhcEJpZ0ludCkpOwotICAgICAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdEhl
YXBCaWdJbnQsIHJpZ2h0SGVhcEJpZ0ludCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKCEo
bGVmdE51bWVyaWMuaXNCaWdJbnQoKSAmJiByaWdodE51bWVyaWMuaXNCaWdJbnQoKSkpIHsKLSAg
ICAgICAgYXV0byBlcnJvck1lc3NhZ2UgPSBpc0xlZnQgPyAiSW52YWxpZCBtaXggb2YgQmlnSW50
IGFuZCBvdGhlciB0eXBlIGluIGxlZnQgc2hpZnQgb3BlcmF0aW9uLiIgOiAiSW52YWxpZCBtaXgg
b2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHNpZ25lZCByaWdodCBzaGlmdCBvcGVyYXRpb24u
IjsKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGVy
cm9yTWVzc2FnZSk7CiAgICAgfQotCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZlIGEgY2Fz
ZSBmb3IgbGVmdCBpcyBIZWFwQmlnSW50IGFuZCByaWdodCBpcyBCaWdJbnQzMiwgaXQgc2VlbXMg
ZmFpcmx5IGxpa2VseSB0byBvY2N1ciBmcmVxdWVudGx5LgotI2lmIFVTRShCSUdJTlQzMikKLSAg
ICBKU0JpZ0ludCogbGVmdEhlYXBCaWdJbnQgPSBsZWZ0TnVtZXJpYy5pc0JpZ0ludDMyKCkgPyBK
U0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpIDog
bGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCk7Ci0gICAgSlNCaWdJbnQqIHJpZ2h0SGVhcEJpZ0lu
dCA9IHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkgPyBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
cmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSA6IHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJ
bnQoKTsKICNlbHNlCi0gICAgSlNCaWdJbnQqIGxlZnRIZWFwQmlnSW50ID0gbGVmdE51bWVyaWMu
YXNIZWFwQmlnSW50KCk7Ci0gICAgSlNCaWdJbnQqIHJpZ2h0SGVhcEJpZ0ludCA9IHJpZ2h0TnVt
ZXJpYy5hc0hlYXBCaWdJbnQoKTsKKyAgICBVTlVTRURfUEFSQU0oYmlnSW50MzJPcCk7CisgICAg
aWYgKGxlZnROdW1lcmljLmlzSGVhcEJpZ0ludCgpICYmIHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJ
bnQoKSkgeworICAgICAgICBpZiAoaXNMZWZ0KQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMu
YXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOworICAgICAgICBS
RUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KGdsb2Jh
bE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBC
aWdJbnQoKSkpOworICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGlzTGVmdCkKLSAgICAgICAgUkVM
RUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwg
bGVmdEhlYXBCaWdJbnQsIHJpZ2h0SGVhcEJpZ0ludCkpOwotICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0SGVh
cEJpZ0ludCwgcmlnaHRIZWFwQmlnSW50KSk7CisgICAgYXV0byBlcnJvck1lc3NhZ2UgPSBpc0xl
ZnQgPyAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGxlZnQgc2hpZnQg
b3BlcmF0aW9uLiIgOiAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHNp
Z25lZCByaWdodCBzaGlmdCBvcGVyYXRpb24uIjsKKyAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAogQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGpzTFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEs
IEpTVmFsdWUgdjIpCiB7Ci0gICAgYm9vbCBpc0xlZnQgPSB0cnVlOwotICAgIHJldHVybiBzaGlm
dChnbG9iYWxPYmplY3QsIHYxLCB2MiwgaXNMZWZ0KTsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0xl
ZnQgPSB0cnVlOworICAgIHJldHVybiBzaGlmdDxpc0xlZnQ+KGdsb2JhbE9iamVjdCwgdjEsIHYy
KTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzUlNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7Ci0gICAgYm9vbCBpc0xlZnQg
PSBmYWxzZTsKLSAgICByZXR1cm4gc2hpZnQoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGlzTGVmdCk7
CisgICAgY29uc3RleHByIGJvb2wgaXNMZWZ0ID0gZmFsc2U7CisgICAgcmV0dXJuIHNoaWZ0PGlz
TGVmdD4oZ2xvYmFsT2JqZWN0LCB2MSwgdjIpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBIZWFw
QmlnSW50T3BlcmF0aW9uLCB0eXBlbmFtZSBJbnQzMk9wZXJhdGlvbj4KLUFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBiaXR3aXNlQmluYXJ5T3AoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2MSwgSlNWYWx1ZSB2MiwgSGVhcEJpZ0ludE9wZXJhdGlvbiYmIGJpZ0ludE9wLCBJbnQz
Mk9wZXJhdGlvbiYmIGludDMyT3AsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3RlbXBsYXRl
PHR5cGVuYW1lIEludDMyT3BlcmF0aW9uPgorQUxXQVlTX0lOTElORSBKU1ZhbHVlIGJpdHdpc2VC
aW5hcnlPcChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVl
IHYyLCBJbnQzMk9wZXJhdGlvbiYmIGludDMyT3AsIEpTVmFsdWUgKCpiaWdJbnQzMikoSlNHbG9i
YWxPYmplY3QqLCBpbnQzMl90LCBpbnQzMl90KSwgSlNWYWx1ZSAoKm1peGVkQmlnSW50MSkoSlNH
bG9iYWxPYmplY3QqLCBKU0JpZ0ludCosIGludDMyX3QpLCBKU1ZhbHVlICgqbWl4ZWRCaWdJbnQy
KShKU0dsb2JhbE9iamVjdCosIGludDMyX3QsIEpTQmlnSW50KiksIEpTVmFsdWUgKCpoZWFwQmln
SW50KShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiwgSlNCaWdJbnQqKSwgY29uc3QgY2hhciog
ZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC04MzgsMjUgKzc2OCwyNCBA
QCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgYml0d2lzZUJpbmFyeU9wKEpTCiAgICAgICAgIHJldHVy
biBqc051bWJlcihpbnQzMk9wKGxlZnROdW1lcmljLmFzSW50MzIoKSwgcmlnaHROdW1lcmljLmFz
SW50MzIoKSkpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIGlmIChsZWZ0TnVtZXJpYy5pc0Jp
Z0ludDMyKCkgJiYgcmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIGpz
QmlnSW50MzIoaW50MzJPcChsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1l
cmljLmJpZ0ludDMyQXNJbnQzMigpKSk7Ci0gICAgLy8gRklYTUU6IGFkZCBmYXN0IHBhdGggZm9y
IEJpZ0ludDMyIC8gSGVhcEJpZ0ludCwgYW5kIGZvciBIZWFwQmlnSW50IC8gQmlnSW50MzIKLSAg
ICAvLyBJbiBtYW55IGNhc2VzIHRoZXNlIGNvdWxkIGJlIG1hZGUgbW9yZSBlZmZpY2llbnQgdGhh
biBoZWFwLWFsbG9jYXRpbmcgdGhlIHNtYWxsIGJpZy1pbnQgYW5kIGdvaW5nIHRocm91Z2ggdGhl
IGdlbmVyaWMgcGF0aC4KLSAgICAvLyBCdXQgaXQgaXMgcXVpdGUgdHJpY2t5LCBub3QgbGVhc3Qg
YmVjYXVzZSBIZWFwQmlnSW50IHVzZSBhIHNpZ24gYml0IHdoZXJlYXMgQmlnSW50MzIgdXNlIDIt
Y29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4KLSNlbmRpZgotCi0gICAgaWYgKCEobGVmdE51bWVy
aWMuaXNCaWdJbnQoKSAmJiByaWdodE51bWVyaWMuaXNCaWdJbnQoKSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotCi0j
aWYgVVNFKEJJR0lOVDMyKQotICAgIEpTQmlnSW50KiBsZWZ0SGVhcEJpZ0ludCA9IGxlZnROdW1l
cmljLmlzQmlnSW50MzIoKSA/IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBsZWZ0TnVtZXJpYy5i
aWdJbnQzMkFzSW50MzIoKSkgOiBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKTsKLSAgICBKU0Jp
Z0ludCogcmlnaHRIZWFwQmlnSW50ID0gcmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSA/IEpTQmln
SW50OjpjcmVhdGVGcm9tKHZtLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpIDogcmln
aHROdW1lcmljLmFzSGVhcEJpZ0ludCgpOworICAgIGlmIChsZWZ0TnVtZXJpYy5pc0JpZ0ludDMy
KCkpIHsKKyAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkpCisgICAgICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpZ0ludDMyKGdsb2JhbE9iamVjdCwgbGVmdE51
bWVyaWMuYmlnSW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkp
OworICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQorICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtaXhlZEJpZ0ludDIoZ2xvYmFsT2JqZWN0LCBsZWZ0
TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7
CisgICAgfSBlbHNlIGlmIChsZWZ0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkgeworICAgICAgICBp
ZiAocmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgbWl4ZWRCaWdJbnQxKGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFw
QmlnSW50KCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkpOworICAgICAgICBlbHNl
IGlmIChyaWdodE51bWVyaWMuaXNIZWFwQmlnSW50KCkpCisgICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hl
YXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CisgICAgfQogI2Vsc2UK
LSAgICBKU0JpZ0ludCogbGVmdEhlYXBCaWdJbnQgPSBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQo
KTsKLSAgICBKU0JpZ0ludCogcmlnaHRIZWFwQmlnSW50ID0gcmlnaHROdW1lcmljLmFzSGVhcEJp
Z0ludCgpOworICAgIFVOVVNFRF9QQVJBTShiaWdJbnQzMk9wKTsKKyAgICBpZiAobGVmdE51bWVy
aWMuaXNIZWFwQmlnSW50KCkgJiYgcmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQorICAgICAg
ICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0LCBsZWZ0
TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CiAj
ZW5kaWYKIAotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYmlnSW50T3AoZ2xvYmFsT2Jq
ZWN0LCBsZWZ0SGVhcEJpZ0ludCwgcmlnaHRIZWFwQmlnSW50KSk7CisgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7CiB9CiAKIEFMV0FZ
U19JTkxJTkUgSlNWYWx1ZSBqc0JpdHdpc2VBbmQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAgLTg2NSw5ICs3OTQsMTMgQEAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGpzQml0d2lzZUFuZChKU0dsbwogICAgICAgICByZXR1cm4gbGVmdCAmIHJp
Z2h0OwogICAgIH07CiAKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNC
aWdJbnQ6OmJpdHdpc2VBbmQoZ2xvYmFsT2JqZWN0LCBsZWZ0LCByaWdodCk7CisgICAgfTsKKwog
ICAgIC8vIEZJWE1FOiBjdXJyZW50bHksIGZvciBwYWlycyBvZiBCaWdJbnQzMiwgd2UgdW5ib3gg
dGhlbSwgZG8gdGhlICJhbmQiIGFuZCByZS1ib3ggdGhlbS4KICAgICAvLyBXZSBjb3VsZCBkbyBp
dCBkaXJlY3RseSBvbiB0aGUgSlNWYWx1ZS4KLSAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGds
b2JhbE9iamVjdCwgdjEsIHYyLCBKU0JpZ0ludDo6Yml0d2lzZUFuZCwgaW50MzJPcCwgIkludmFs
aWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICdhbmQnIG9wZXJhdGlv
bi4iX3MpOworICAgIHJldHVybiBiaXR3aXNlQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIs
IGludDMyT3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAiSW52YWxp
ZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGJpdHdpc2UgJ2FuZCcgb3BlcmF0aW9u
LiJfcyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0JpdHdpc2VPcihKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQpAQCAtODc4LDcgKzgx
MSwxMiBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaXR3aXNlT3IoSlNHbG9iCiAKICAgICAv
LyBGSVhNRTogY3VycmVudGx5LCBmb3IgcGFpcnMgb2YgQmlnSW50MzIsIHdlIHVuYm94IHRoZW0s
IGRvIHRoZSAib3IiIGFuZCByZS1ib3ggdGhlbS4KICAgICAvLyBXZSBjb3VsZCBkbyBpdCBkaXJl
Y3RseSBvbiB0aGUgSlNWYWx1ZS4KLSAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGdsb2JhbE9i
amVjdCwgdjEsIHYyLCBKU0JpZ0ludDo6Yml0d2lzZU9yLCBpbnQzMk9wLCAiSW52YWxpZCBtaXgg
b2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGJpdHdpc2UgJ29yJyBvcGVyYXRpb24uIl9zKTsK
KworICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
YXV0byBsZWZ0LCBhdXRvIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lz
ZU9yKGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOworICAgIH07CisKKyAgICByZXR1cm4gYml0
d2lzZUJpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBpbnQzMk9wLCBiaWdJbnRPcCwgYmln
SW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3Ro
ZXIgdHlwZSBpbiBiaXR3aXNlICdvcicgb3BlcmF0aW9uLiJfcyk7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBqc0JpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAgLTg4OSw3ICs4MjcsMTEgQEAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGpzQml0d2lzZVhvcihKU0dsbwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnRseSwgZm9y
IHBhaXJzIG9mIEJpZ0ludDMyLCB3ZSB1bmJveCB0aGVtLCBkbyB0aGUgInhvciIgYW5kIHJlLWJv
eCB0aGVtLgogICAgIC8vIFdlIGNvdWxkIGRvIGl0IGRpcmVjdGx5IG9uIHRoZSBKU1ZhbHVlLCBh
bmQganVzdCByZW1lbWJlciB0byBkbyBhbiBvciB3aXRoIDB4MTIgYXQgdGhlIGVuZCB0byByZXN0
b3JlIHRoZSB0YWcKLSAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEs
IHYyLCBKU0JpZ0ludDo6Yml0d2lzZVhvciwgaW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0lu
dCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICd4b3InIG9wZXJhdGlvbi4iX3MpOworICAgIGF1
dG8gYmlnSW50T3AgPSBbXSAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYXV0byBsZWZ0
LCBhdXRvIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZVhvcihnbG9i
YWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsKKyAgICB9OworCisgICAgcmV0dXJuIGJpdHdpc2VCaW5h
cnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgaW50MzJPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBi
aWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUg
aW4gYml0d2lzZSAneG9yJyBvcGVyYXRpb24uIl9zKTsKIH0KIAogQUxXQVlTX0lOTElORSBFbmNv
ZGVkSlNWYWx1ZSBnZXRCeVZhbFdpdGhJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0NlbGwqIGJhc2UsIHVpbnQzMl90IGluZGV4KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397785</attachid>
            <date>2020-04-27 19:10:34 -0700</date>
            <delta_ts>2020-04-27 19:14:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>116797</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYwODA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NyBA
QAorMjAyMC0wNC0yNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbSlNDXSA+Pj4gc2hvdWxkIGNhbGwgVG9OdW1lcmljCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTEwNjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzYyNDc4OTc3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGluIHRoZSBydW50aW1lIGZvciBkb2luZyBhbG9t
c3QgYWxsIEJpZ0ludCBtYXRoCisgICAgICAgIG9wZXJhdGlvbnMgb24gdGhlIGlucHV0cyBlaXRo
ZXIgYmVpbmcgSW50MzIsIEhlYXBCaWdJbnQsIG9yIGEgbWl4aW5nCisgICAgICAgIG9mIGJvdGgu
IEJlZm9yZSwgaWYgd2UgZGV0ZWN0ZWQgYSBiaW5hcnkgb3BlcmF0aW9uIG9uIGFuIEludDMyIGFu
ZCBhCisgICAgICAgIEhlYXBCaWdJbnQsIHRoaXMgd291bGQgbGVhZCB1cyB0byBjb252ZXJ0IHRo
ZSBJbnQzMiBvcGVyYW5kIGludG8gYSBIZWFwQmlnSW50LgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBlc3BlY2lhbGx5IGJhZCBiZWNhdXNlIHdlJ2QgcmVwZWF0IHRoaXMgZm9yIGFsbCBtYXRo
IG9wcy4gRm9yIGV4YW1wbGUsCisgICAgICAgIGlmIHggaXMgYSBCaWdJbnQzMiwgYW5kIGFsbCBy
aHMgYXJlIGEgSGVhcEJpZ0ludCwgd2UnZCByZXBlYXRlZGx5IGNvbnZlcnQgeAorICAgICAgICB0
byBhIEhlYXBCaWdJbnQgZm9yIGVhY2ggb3BlcmF0aW9uOgorICAgICAgICBgYGAKKyAgICAgICAg
eCArIHkKKyAgICAgICAgeCAqIHkKKyAgICAgICAgeCAtIHkKKyAgICAgICAgeCA+PiB5CisgICAg
ICAgIHggPDwgeQorICAgICAgICBldGMKKyAgICAgICAgYGBgCisgICAgICAgIAorICAgICAgICBU
byB0ZWFjaCB0aGUgcnVudGltZSBob3cgdG8gb3BlcmF0ZSBib3RoIG92ZXIgYSBCaWdJbnQzMiBh
bmQgYSBIZWFwQmlnSW50LCBJCisgICAgICAgIHRlbXBsYXRpemVkIHRoZSBydW50aW1lIG1hdGgg
b3BlcmF0aW9ucyB0byB3b3JrIGJvdGggb3ZlciBCaWdJbnQzMiBhbmQKKyAgICAgICAgSGVhcEJp
Z0ludCB3cmFwcGVyIGNsYXNzZXMgdGhhdCBleHBvc2UgdGhlIHNhbWUgaW50ZXJmYWNlLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBpcyBhIH4yOCUgc3BlZWR1cCBvbiBtaWNyb2JlbmNobWFya3Mv
c3Vuc3BpZGVyLXNoYTEtYmlnLWludC5qcworCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpT
Qzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6SGVhcEJpZ0ludEltcGwpOgorICAgICAgICAoSlND
OjpIZWFwQmlnSW50SW1wbDo6aXNaZXJvKToKKyAgICAgICAgKEpTQzo6SGVhcEJpZ0ludEltcGw6
OnNpZ24pOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6bGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SGVhcEJpZ0ludEltcGw6OmRpZ2l0KToKKyAgICAgICAgKEpTQzo6SGVhcEJpZ0ludElt
cGw6OnRvSGVhcEJpZ0ludCk6CisgICAgICAgIChKU0M6OkludDMyQmlnSW50SW1wbDo6SW50MzJC
aWdJbnRJbXBsKToKKyAgICAgICAgKEpTQzo6SW50MzJCaWdJbnRJbXBsOjppc1plcm8pOgorICAg
ICAgICAoSlNDOjpJbnQzMkJpZ0ludEltcGw6OnNpZ24pOgorICAgICAgICAoSlNDOjpJbnQzMkJp
Z0ludEltcGw6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkludDMyQmlnSW50SW1wbDo6ZGlnaXQp
OgorICAgICAgICAoSlNDOjpJbnQzMkJpZ0ludEltcGw6OnRvSGVhcEJpZ0ludCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpJbXBsUmVzdWx0OjpJbXBsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
dHJ5Q29udmVydFRvQmlnSW50MzIpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6aW5wbGFjZU11
bHRpcGx5QWRkKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUltcGwpOgor
ICAgICAgICAoSlNDOjpKU0JpZ0ludDo6ZXhwb25lbnRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjptdWx0aXBseSk6
CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmRpdmlkZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpjb3B5KToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OnVuYXJ5TWludXMpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmVtYWluZGVySW1wbCk6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpyZW1haW5kZXIpOgorICAgICAgICAoSlNDOjpKU0JpZ0lu
dDo6aW5jSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjppbmMpOgorICAgICAgICAoSlND
OjpKU0JpZ0ludDo6ZGVjSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpkZWMpOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6YWRkSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojph
ZGQpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c3ViSW1wbCk6CisgICAgICAgIChKU0M6OkpT
QmlnSW50OjpzdWIpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZUFuZEltcGwpOgor
ICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZUFuZCk6CisgICAgICAgIChKU0M6OkpTQmln
SW50OjpiaXR3aXNlT3JJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VPcik6
CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlWG9ySW1wbCk6CisgICAgICAgIChKU0M6
OkpTQmlnSW50OjpiaXR3aXNlWG9yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmxlZnRTaGlm
dEltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6bGVmdFNoaWZ0KToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmxlZnRTaGlmdFNsb3cpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2ln
bmVkUmlnaHRTaGlmdEltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2lnbmVkUmlnaHRT
aGlmdCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlTm90SW1wbCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpiaXR3aXNlTm90KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Omlu
dGVybmFsTXVsdGlwbHlBZGQpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6bXVsdGlwbHlBY2N1
bXVsYXRlKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQ29tcGFyZSk6CisgICAg
ICAgIChKU0M6OkpTQmlnSW50Ojpjb21wYXJlSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50
Ojpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQWRkKToKKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlU3ViKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojph
YnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFi
c29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNv
bHV0ZUJpdHdpc2VPcCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUFuZCk6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZU9yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJ
bnQ6OmFic29sdXRlQW5kTm90KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlWG9y
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Omxl
ZnRTaGlmdEJ5QWJzb2x1dGUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5
QWJzb2x1dGUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11bSk6
CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMpOgorICAgICAgICAoSlND
OjpKU0JpZ0ludDo6dG9TaGlmdEFtb3VudCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBv
bmVudGlhdGVIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5
SGVhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpkaXZpZGVIZWFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnVuYXJ5TWludXNIZWFwKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJlbWFpbmRlckhlYXApOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU0JpZ0ludDo6aW5jSGVhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmln
SW50OjpkZWNIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFkZEhlYXAp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c3ViSGVhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlQW5kSGVhcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpiaXR3aXNlT3JIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNCaWdJbnQ6OmJpdHdpc2VYb3JIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJ
bnQ6OmxlZnRTaGlmdEhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2ln
bmVkUmlnaHRTaGlmdEhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0
d2lzZU5vdEhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Y29tcGFyZVRv
SW50MzIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuaDoKKyAgICAgICAg
KiBydW50aW1lL09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpqc0FkZFNsb3dDYXNlKToK
KyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Y29tcGFyZUJp
Z0ludCk6CisgICAgICAgIChKU0M6OmNvbXBhcmVCaWdJbnQzMlRvT3RoZXJQcmltaXRpdmUpOgor
ICAgICAgICAoSlNDOjphcml0aG1ldGljQmluYXJ5T3ApOgorICAgICAgICAoSlNDOjpqc1N1Yik6
CisgICAgICAgIChKU0M6OmpzTXVsKToKKyAgICAgICAgKEpTQzo6anNEaXYpOgorICAgICAgICAo
SlNDOjpqc1JlbWFpbmRlcik6CisgICAgICAgIChKU0M6OmpzUG93KToKKyAgICAgICAgKEpTQzo6
anNJbmMpOgorICAgICAgICAoSlNDOjpqc0RlYyk6CisgICAgICAgIChKU0M6OmpzQml0d2lzZU5v
dCk6CisgICAgICAgIChKU0M6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6anNMU2hpZnQpOgorICAg
ICAgICAoSlNDOjpqc1JTaGlmdCk6CisgICAgICAgIChKU0M6OmpzVVJTaGlmdCk6CisgICAgICAg
IChKU0M6OmJpdHdpc2VCaW5hcnlPcCk6CisgICAgICAgIChKU0M6OmpzQml0d2lzZUFuZCk6Cisg
ICAgICAgIChKU0M6OmpzQml0d2lzZU9yKToKKyAgICAgICAgKEpTQzo6anNCaXR3aXNlWG9yKToK
KwogMjAyMC0wNC0yNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtKU0NdID4+PiBzaG91bGQgY2FsbCBUb051bWVyaWMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYwODA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjg3MSwxMiArMjg3MSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXIKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
IAogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewot
ICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwotICAg
ICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCaWdJbnQzMigtdmFsdWUpKTsKLSAgICAgICAgcHJpbVZhbHVlID0gSlNCaWdJbnQ6
OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKLSAgICB9CisgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0lu
dDMyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWlu
dXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpOwogI2VuZGlmCiAgICAgaWYgKHBy
aW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgpKSk7CkBAIC0y
OTA0LDEzICsyOTAwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cgogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKSB7
Ci0gICAgICAgIGludDMyX3QgdmFsdWUgPSBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCk7Ci0g
ICAgICAgIGlmICh2YWx1ZSAhPSBJTlRfTUlOKSB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IGpzQmlnSW50MzIoLXZhbHVlKTsKLSAgICAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJl
c3VsdChyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwotICAgICAgICB9Ci0gICAgICAgIHByaW1WYWx1ZSA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZt
LCB2YWx1ZSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMo
dm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIGFyaXRoUHJvZmlsZS0+
b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkg
ewpAQCAtMjk1MCwxMyArMjk0Miw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXIKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50
MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQz
MigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikgewotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7Ci0gICAgICAgICAgICBhcml0aFByb2ZpbGUtPm9i
c2VydmVSZXN1bHQocmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICBwcmltVmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRl
RnJvbSh2bSwgdmFsdWUpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFy
eU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBhcml0aFBy
b2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogICAgIH0KICNlbmRpZgogICAgIGlmIChwcmltVmFsdWUuaXNIZWFwQmln
SW50KCkpIHsKQEAgLTI5OTUsMTIgKzI5ODMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyCiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgLy8gRklYTUU6IHdoeSBk
b2VzIHRoaXMgZnVuY3Rpb24gcHJvZmlsZSB0aGUgYXJndW1lbnQgYnV0IG5vdCB0aGUgcmVzdWx0
PwotICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIGludDMyX3QgdmFs
dWUgPSBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBJ
TlRfTUlOKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0JpZ0ludDMyKC12
YWx1ZSkpOwotICAgICAgICBwcmltVmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFs
dWUpOwotICAgIH0KKyAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmJp
Z0ludDMyQXNJbnQzMigpKSk7CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0lu
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVz
KHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjYwODA2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQ5LDE0ICs1NDksMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25lZ2F0ZSkKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlzQmln
SW50MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJ
bnQzMigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikgewotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5fV0lUSF9Q
Uk9GSUxJTkcocmVzdWx0LCB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlRm9y
VW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJpbVZhbHVlID0gSlNCaWdJbnQ6OmNyZWF0
ZUZyb20odm0sIHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6dW5h
cnlNaW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJO
X1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgeworICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxl
Rm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOworICAgICAgICB9KTsK
ICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmNwcAkocmV2aXNpb24gMjYwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsMzUgKzIzMSwxMjggQEAg
U3RyaW5nIEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcoVk0mIHZtLCBKUwogICAgIHJldHVybiB0b1N0
cmluZ0dlbmVyaWModm0sIG51bGxwdHIsIGJpZ0ludCwgcmFkaXgpOwogfQogCitjbGFzcyBIZWFw
QmlnSW50SW1wbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSGVhcEJpZ0ludEltcGwoSlNCaWdJ
bnQqIGJpZ0ludCkKKyAgICAgICAgOiBtX2JpZ0ludChiaWdJbnQpCisgICAgeyB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNaZXJvKCkgeyByZXR1cm4gbV9iaWdJbnQtPmlzWmVybygpOyB9
CisgICAgQUxXQVlTX0lOTElORSBib29sIHNpZ24oKSB7IHJldHVybiBtX2JpZ0ludC0+c2lnbigp
OyB9CisgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2JpZ0lu
dC0+bGVuZ3RoKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50OjpEaWdpdCBkaWdpdCh1
bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpZ0ludC0+ZGlnaXQoaSk7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoVk0mKSB7IHJldHVybiBtX2JpZ0ludDsgfQorCitw
cml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgSlNCaWdJbnQ6OkltcGxSZXN1bHQ7CisgICAgSlNC
aWdJbnQqIG1fYmlnSW50OworfTsKKworY2xhc3MgSW50MzJCaWdJbnRJbXBsIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBJbnQzMkJpZ0ludEltcGwoaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgIHsgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzWmVybygp
IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNpZ24oKSB7IHJl
dHVybiBtX3ZhbHVlIDwgMDsgfQorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgbGVuZ3RoKCkg
eyByZXR1cm4gaXNaZXJvKCkgPyAwIDogMTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6
OkRpZ2l0IGRpZ2l0KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoKCkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKGksIGkgPT0gMCk7CisgICAgICAgIGlmIChzaWduKCkp
CisgICAgICAgICAgICByZXR1cm4gLXN0YXRpY19jYXN0PGludDY0X3Q+KG1fdmFsdWUpOworICAg
ICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50
KiB0b0hlYXBCaWdJbnQoVk0mIHZtKSB7IHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
bV92YWx1ZSk7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IEpTQmlnSW50OjpJbXBs
UmVzdWx0OworICAgIGludDMyX3QgbV92YWx1ZTsKK307CisKK0FMV0FZU19JTkxJTkUgSlNCaWdJ
bnQ6OkltcGxSZXN1bHQ6OkltcGxSZXN1bHQoSGVhcEJpZ0ludEltcGwmIGhlYXBJbXBsKQorICAg
IDogcGF5bG9hZChoZWFwSW1wbC5tX2JpZ0ludCkKK3sgfQorCitBTFdBWVNfSU5MSU5FIEpTQmln
SW50OjpJbXBsUmVzdWx0OjpJbXBsUmVzdWx0KEpTQmlnSW50KiBoZWFwQmlnSW50KQorICAgIDog
cGF5bG9hZChoZWFwQmlnSW50KQoreyB9CisKK0FMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxS
ZXN1bHQ6OkltcGxSZXN1bHQoSW50MzJCaWdJbnRJbXBsJiBpbnQzMkltcGwpCisgICAgOiBwYXls
b2FkKGpzQmlnSW50MzIoaW50MzJJbXBsLm1fdmFsdWUpKQoreyB9CisKK0FMV0FZU19JTkxJTkUg
SlNCaWdJbnQ6OkltcGxSZXN1bHQ6OkltcGxSZXN1bHQoSlNWYWx1ZSB2YWx1ZSkKKyAgICA6IHBh
eWxvYWQodmFsdWUpCit7IH0KKworc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252
ZXJ0VG9CaWdJbnQzMihKU0JpZ0ludCogYmlnSW50KQoreworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisKKyAg
ICBpZiAoYmlnSW50LT5sZW5ndGgoKSA8PSAxKSB7CisgICAgICAgIGlmICghYmlnSW50LT5sZW5n
dGgoKSkKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOworICAgICAgICBKU0JpZ0lu
dDo6RGlnaXQgZGlnaXQgPSBiaWdJbnQtPmRpZ2l0KDApOworICAgICAgICBpZiAoYmlnSW50LT5z
aWduKCkpIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbWF4VmFsdWUg
PSAtc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpOworICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KC1zdGF0aWNfY2FzdDxpbnQ2
NF90PihkaWdpdCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludDY0X3QgbWF4VmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1h
eFZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGRpZ2l0KSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBi
aWdJbnQ7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdHJ5Q29udmVydFRvQmln
SW50MzIoSlNCaWdJbnQ6OkltcGxSZXN1bHQgaW1wbFJlc3VsdCkKK3sKKyAgICBpZiAoIWltcGxS
ZXN1bHQucGF5bG9hZCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBpZiAoaW1wbFJl
c3VsdC5wYXlsb2FkLmlzQmlnSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGltcGxSZXN1bHQucGF5
bG9hZDsKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoaW1wbFJlc3VsdC5wYXlsb2Fk
LmFzSGVhcEJpZ0ludCgpKTsKK30KKwogLy8gTXVsdGlwbGllcyB7dGhpc30gd2l0aCB7ZmFjdG9y
fSBhbmQgYWRkcyB7c3VtbWFuZH0gdG8gdGhlIHJlc3VsdC4KIHZvaWQgSlNCaWdJbnQ6OmlucGxh
Y2VNdWx0aXBseUFkZChEaWdpdCBmYWN0b3IsIERpZ2l0IHN1bW1hbmQpCiB7Ci0gICAgaW50ZXJu
YWxNdWx0aXBseUFkZCh0aGlzLCBmYWN0b3IsIHN1bW1hbmQsIGxlbmd0aCgpLCB0aGlzKTsKKyAg
ICBpbnRlcm5hbE11bHRpcGx5QWRkKEhlYXBCaWdJbnRJbXBsIHsgdGhpcyB9LCBmYWN0b3IsIHN1
bW1hbmQsIGxlbmd0aCgpLCB0aGlzKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVu
dGlhdGVIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBiYXNlLCBK
U0JpZ0ludCogZXhwb25lbnQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVu
YW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmV4cG9uZW50
aWF0ZUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgYmFzZSwg
QmlnSW50SW1wbDIgZXhwb25lbnQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChl
eHBvbmVudC0+c2lnbigpKSB7CisgICAgaWYgKGV4cG9uZW50LnNpZ24oKSkgewogICAgICAgICB0
aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIk5lZ2F0aXZlIGV4cG9uZW50IGlz
IG5vdCBhbGxvd2VkIl9zKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAg
Ly8gMi4gSWYgYmFzZSBpcyAwbiBhbmQgZXhwb25lbnQgaXMgMG4sIHJldHVybiAxbi4KLSAgICBp
ZiAoZXhwb25lbnQtPmlzWmVybygpKQorICAgIGlmIChleHBvbmVudC5pc1plcm8oKSkKICAgICAg
ICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCAxKTsKICAgICAKICAgICAvLyAzLiBS
ZXR1cm4gYSBCaWdJbnQgcmVwcmVzZW50aW5nIHRoZSBtYXRoZW1hdGljYWwgdmFsdWUgb2YgYmFz
ZSByYWlzZWQKICAgICAvLyAgICB0byB0aGUgcG93ZXIgZXhwb25lbnQuCi0gICAgaWYgKGJhc2Ut
PmlzWmVybygpKQorICAgIGlmIChiYXNlLmlzWmVybygpKQogICAgICAgICByZXR1cm4gYmFzZTsK
IAotICAgIGlmIChiYXNlLT5sZW5ndGgoKSA9PSAxICYmIGJhc2UtPmRpZ2l0KDApID09IDEpIHsK
KyAgICBpZiAoYmFzZS5sZW5ndGgoKSA9PSAxICYmIGJhc2UuZGlnaXQoMCkgPT0gMSkgewogICAg
ICAgICAvLyAoLTEpICoqIGV2ZW5fbnVtYmVyID09IDEuCi0gICAgICAgIGlmIChiYXNlLT5zaWdu
KCkgJiYgIShleHBvbmVudC0+ZGlnaXQoMCkgJiAxKSkKLSAgICAgICAgICAgIHJldHVybiBKU0Jp
Z0ludDo6dW5hcnlNaW51c0hlYXAodm0sIGJhc2UpOworICAgICAgICBpZiAoYmFzZS5zaWduKCkg
JiYgIShleHBvbmVudC5kaWdpdCgwKSAmIDEpKQorICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50
Ojp1bmFyeU1pbnVzSW1wbCh2bSwgYmFzZSk7CiAKICAgICAgICAgLy8gKC0xKSAqKiBvZGRfbnVt
YmVyID09IC0xOyAxICoqIGFueXRoaW5nID09IDEuCiAgICAgICAgIHJldHVybiBiYXNlOwpAQCAt
MjY4LDEyICszNjEsMTIgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVIZWFwKEpT
RwogICAgIC8vIEZvciBhbGwgYmFzZXMgPj0gMiwgdmVyeSBsYXJnZSBleHBvbmVudHMgd291bGQg
bGVhZCB0byB1bnJlcHJlc2VudGFibGUKICAgICAvLyByZXN1bHRzLgogICAgIHN0YXRpY19hc3Nl
cnQobWF4TGVuZ3RoQml0cyA8IHN0ZDo6bnVtZXJpY19saW1pdHM8RGlnaXQ+OjptYXgoKSwgIm1h
eExlbmd0aEJpdHMgbmVlZHMgdG8gYmUgbGVzcyB0aGFuIGRpZ2l0OjptYXgoKSIpOwotICAgIGlm
IChleHBvbmVudC0+bGVuZ3RoKCkgPiAxKSB7CisgICAgaWYgKGV4cG9uZW50Lmxlbmd0aCgpID4g
MSkgewogICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkJpZ0lu
dCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgRGlnaXQgZXhwVmFsdWUgPSBleHBvbmVudC0+
ZGlnaXQoMCk7CisgICAgRGlnaXQgZXhwVmFsdWUgPSBleHBvbmVudC5kaWdpdCgwKTsKICAgICBp
ZiAoZXhwVmFsdWUgPT0gMSkKICAgICAgICAgcmV0dXJuIGJhc2U7CiAgICAgaWYgKGV4cFZhbHVl
ID49IG1heExlbmd0aEJpdHMpIHsKQEAgLTI4Myw3ICszNzYsNyBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmV4cG9uZW50aWF0ZUhlYXAoSlNHCiAKICAgICBzdGF0aWNfYXNzZXJ0KG1heExlbmd0aEJp
dHMgPD0gbWF4SW50LCAibWF4TGVuZ3RoQml0cyBuZWVkcyB0byBiZSA8PSBtYXhJbnQiKTsKICAg
ICBpbnQgbiA9IHN0YXRpY19jYXN0PGludD4oZXhwVmFsdWUpOwotICAgIGlmIChiYXNlLT5sZW5n
dGgoKSA9PSAxICYmIGJhc2UtPmRpZ2l0KDApID09IDIpIHsKKyAgICBpZiAoYmFzZS5sZW5ndGgo
KSA9PSAxICYmIGJhc2UuZGlnaXQoMCkgPT0gMikgewogICAgICAgICAvLyBGYXN0IHBhdGggZm9y
IDJebi4KICAgICAgICAgaW50IG5lZWRlZERpZ2l0cyA9IDEgKyAobiAvIGRpZ2l0Qml0cyk7CiAg
ICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChn
bG9iYWxPYmplY3QsIG5lZWRlZERpZ2l0cyk7CkBAIC0yOTQsMjkgKzM4NywyOSBAQCBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUhlYXAoSlNHCiAgICAgICAgIERpZ2l0IG1zZCA9IHN0
YXRpY19jYXN0PERpZ2l0PigxKSA8PCAobiAlIGRpZ2l0Qml0cyk7CiAgICAgICAgIHJlc3VsdC0+
c2V0RGlnaXQobmVlZGVkRGlnaXRzIC0gMSwgbXNkKTsKICAgICAgICAgLy8gUmVzdWx0IGlzIG5l
Z2F0aXZlIGZvciBvZGQgcG93ZXJzIG9mIC0ybi4KLSAgICAgICAgaWYgKGJhc2UtPnNpZ24oKSkg
CisgICAgICAgIGlmIChiYXNlLnNpZ24oKSkgCiAgICAgICAgICAgICByZXN1bHQtPnNldFNpZ24o
c3RhdGljX2Nhc3Q8Ym9vbD4obiAmIDEpKTsKIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAogICAgIEpTQmlnSW50KiByZXN1bHQgPSBudWxscHRyOwotICAgIEpTQmlnSW50KiBydW5u
aW5nU3F1YXJlID0gYmFzZTsKKyAgICBKU0JpZ0ludCogcnVubmluZ1NxdWFyZSA9IGJhc2UudG9I
ZWFwQmlnSW50KHZtKTsKIAogICAgIC8vIFRoaXMgaW1wbGljaXRseSBzZXRzIHRoZSByZXN1bHQn
cyBzaWduIGNvcnJlY3RseS4KICAgICBpZiAobiAmIDEpCi0gICAgICAgIHJlc3VsdCA9IGJhc2U7
CisgICAgICAgIHJlc3VsdCA9IGJhc2UudG9IZWFwQmlnSW50KHZtKTsKIAogICAgIG4gPj49IDE7
CiAgICAgZm9yICg7IG47IG4gPj49IDEpIHsKLSAgICAgICAgSlNCaWdJbnQqIG1heWJlUmVzdWx0
ID0gSlNCaWdJbnQ6Om11bHRpcGx5SGVhcChnbG9iYWxPYmplY3QsIHJ1bm5pbmdTcXVhcmUsIHJ1
bm5pbmdTcXVhcmUpOworICAgICAgICBKU0JpZ0ludCogbWF5YmVSZXN1bHQgPSBKU0JpZ0ludDo6
bXVsdGlwbHlJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBydW5uaW5nU3F1YXJl
IH0sIEhlYXBCaWdJbnRJbXBsIHsgcnVubmluZ1NxdWFyZSB9KS5wYXlsb2FkLmFzSGVhcEJpZ0lu
dCgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgcnVubmluZ1NxdWFyZSA9IG1heWJlUmVzdWx0OwogICAgICAgICBpZiAobiAmIDEpIHsKICAg
ICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bm5pbmdT
cXVhcmU7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtYXliZVJlc3VsdCA9
IEpTQmlnSW50OjptdWx0aXBseUhlYXAoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIHJ1bm5pbmdTcXVh
cmUpOworICAgICAgICAgICAgICAgIG1heWJlUmVzdWx0ID0gSlNCaWdJbnQ6Om11bHRpcGx5SW1w
bChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBs
IHsgcnVubmluZ1NxdWFyZSB9KS5wYXlsb2FkLmFzSGVhcEJpZ0ludCgpOwogICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1heWJlUmVzdWx0OwogICAgICAgICAgICAgfQpAQCAtMzI2LDM1ICs0MTksNzAg
QEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVIZWFwKEpTRwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6bXVsdGlwbHlIZWFwKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTVmFsdWUgSlNC
aWdJbnQ6OmV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0lu
dCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9C
aWdJbnQzMihleHBvbmVudGlhdGVJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBi
YXNlIH0sIEhlYXBCaWdJbnRJbXBsIHsgZXhwb25lbnQgfSkpOworfQorCitKU1ZhbHVlIEpTQmln
SW50OjpleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQq
IGJhc2UsIGludDMyX3QgZXhwb25lbnQpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0lu
dDMyKGV4cG9uZW50aWF0ZUltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IGJhc2Ug
fSwgSW50MzJCaWdJbnRJbXBsIHsgZXhwb25lbnQgfSkpOworfQorCitKU1ZhbHVlIEpTQmlnSW50
OjpleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBiYXNl
LCBKU0JpZ0ludCogZXhwb25lbnQpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KGV4cG9uZW50aWF0ZUltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyBiYXNlIH0s
IEhlYXBCaWdJbnRJbXBsIHsgZXhwb25lbnQgfSkpOworfQorCitKU1ZhbHVlIEpTQmlnSW50Ojpl
eHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBiYXNlLCBp
bnQzMl90IGV4cG9uZW50KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihleHBv
bmVudGlhdGVJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgYmFzZSB9LCBJbnQz
MkJpZ0ludEltcGwgeyBleHBvbmVudCB9KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6bXVsdGlwbHlJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICh4
LT5pc1plcm8oKSkKKyAgICBpZiAoeC5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHg7Ci0gICAg
aWYgKHktPmlzWmVybygpKQorICAgIGlmICh5LmlzWmVybygpKQogICAgICAgICByZXR1cm4geTsK
IAotICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHgtPmxlbmd0aCgpICsgeS0+bGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0geC5sZW5ndGgoKSArIHkubGVuZ3RoKCk7CiAg
ICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2Jh
bE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRo
WmVybyk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgeC0+bGVuZ3RoKCk7IGkrKykK
LSAgICAgICAgbXVsdGlwbHlBY2N1bXVsYXRlKHksIHgtPmRpZ2l0KGkpLCByZXN1bHQsIGkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB4Lmxlbmd0aCgpOyBpKyspCisgICAgICAgIG11
bHRpcGx5QWNjdW11bGF0ZSh5LCB4LmRpZ2l0KGkpLCByZXN1bHQsIGkpOwogCi0gICAgcmVzdWx0
LT5zZXRTaWduKHgtPnNpZ24oKSAhPSB5LT5zaWduKCkpOworICAgIHJlc3VsdC0+c2V0U2lnbih4
LnNpZ24oKSAhPSB5LnNpZ24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsK
IH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpkaXZpZGVIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTVmFsdWUgSlNCaWdJbnQ6Om11
bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIobXVsdGlwbHlJbXBsKGds
b2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7
Cit9CitKU1ZhbHVlIEpTQmlnSW50OjptdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9C
aWdJbnQzMihtdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0s
IEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjptdWx0aXBseShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQorewor
ICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihtdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZGl2aWRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIC8vIDEuIElm
IHkgaXMgMG4sIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIGlmICh5LT5pc1plcm8oKSkgeworICAgIGlmICh5LmlzWmVybygpKSB7CiAgICAg
ICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiMCBpcyBhbiBpbnZhbGlk
IGRpdmlzb3IgdmFsdWUuIl9zKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAt
MzYzLDE5ICs0OTEsMTkgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpkaXZpZGVIZWFwKEpTR2xvYmFs
TwogICAgIC8vIDMuIFJldHVybiBhIEJpZ0ludCByZXByZXNlbnRpbmcgcXVvdGllbnQgcm91bmRl
ZCB0b3dhcmRzIDAgdG8gdGhlIG5leHQKICAgICAvLyAgICBpbnRlZ3JhbCB2YWx1ZS4KICAgICBp
ZiAoYWJzb2x1dGVDb21wYXJlKHgsIHkpID09IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuKQot
ICAgICAgICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgIHJldHVybiBqc0JpZ0ludDMy
KDApOwogCiAgICAgSlNCaWdJbnQqIHF1b3RpZW50ID0gbnVsbHB0cjsKLSAgICBib29sIHJlc3Vs
dFNpZ24gPSB4LT5zaWduKCkgIT0geS0+c2lnbigpOwotICAgIGlmICh5LT5sZW5ndGgoKSA9PSAx
KSB7Ci0gICAgICAgIERpZ2l0IGRpdmlzb3IgPSB5LT5kaWdpdCgwKTsKKyAgICBib29sIHJlc3Vs
dFNpZ24gPSB4LnNpZ24oKSAhPSB5LnNpZ24oKTsKKyAgICBpZiAoeS5sZW5ndGgoKSA9PSAxKSB7
CisgICAgICAgIERpZ2l0IGRpdmlzb3IgPSB5LmRpZ2l0KDApOwogICAgICAgICBpZiAoZGl2aXNv
ciA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFNpZ24gPT0geC0+c2lnbigpID8geCA6
IEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcCh2bSwgeCk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0U2lnbiA9PSB4LnNpZ24oKSA/IEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9IDogSlNCaWdJ
bnQ6OnVuYXJ5TWludXNJbXBsKHZtLCB4KTsKIAogICAgICAgICBEaWdpdCByZW1haW5kZXI7CiAg
ICAgICAgIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcih2bSwgeCwgZGl2aXNvciwgJnF1b3Rp
ZW50LCByZW1haW5kZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aEJp
Z0ludERpdmlzb3IoZ2xvYmFsT2JqZWN0LCB4LCB5LCAmcXVvdGllbnQsIG51bGxwdHIpOworICAg
ICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50b0hl
YXBCaWdJbnQodm0pLCAmcXVvdGllbnQsIG51bGxwdHIpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAKQEAgLTM4MywzMyArNTExLDU1IEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6ZGl2aWRlSGVhcChKU0dsb2JhbE8KICAgICByZXR1cm4gcXVvdGll
bnQtPnJpZ2h0VHJpbSh2bSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0s
IEpTQmlnSW50KiB4KQorSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKLSAgICBBU1NFUlQoIXgt
PmlzWmVybygpKTsKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGl2aWRlSW1wbChn
bG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkp
OworfQorSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0Jp
Z0ludDMyKGRpdmlkZUltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50
MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpkaXZpZGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICBy
ZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGl2aWRlSW1wbChnbG9iYWxPYmplY3QsIEludDMy
QmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KIAotICAgIEpTQmln
SW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgeC0+
bGVuZ3RoKCkpOwotICAgIHN0ZDo6Y29weSh4LT5kYXRhU3RvcmFnZSgpLCB4LT5kYXRhU3RvcmFn
ZSgpICsgeC0+bGVuZ3RoKCksIHJlc3VsdC0+ZGF0YVN0b3JhZ2UoKSk7Ci0gICAgcmVzdWx0LT5z
ZXRTaWduKHgtPnNpZ24oKSk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK0pTQmln
SW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0sIEJpZ0ludEltcGwgeCkKK3sKKyAgICBBU1NFUlQo
IXguaXNaZXJvKCkpOworCisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50OjpjcmVhdGVX
aXRoTGVuZ3RoVW5jaGVja2VkKHZtLCB4Lmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVzdWx0LT5sZW5ndGgoKTsgKytpKQorICAgICAgICByZXN1bHQtPnNldERpZ2l0
KGksIHguZGlnaXQoaSkpOworICAgIHJlc3VsdC0+c2V0U2lnbih4LnNpZ24oKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcChWTSYg
dm0sIEpTQmlnSW50KiB4KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CitKU0JpZ0lu
dDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoVk0mIHZtLCBCaWdJbnRJbXBs
IHgpCiB7Ci0gICAgaWYgKHgtPmlzWmVybygpKQotICAgICAgICByZXR1cm4geDsKKyAgICBpZiAo
eC5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CiAKICAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY29weSh2bSwgeCk7Ci0gICAgcmVzdWx0LT5zZXRTaWduKCF4LT5zaWduKCkp
OworICAgIHJlc3VsdC0+c2V0U2lnbigheC5zaWduKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6cmVtYWluZGVySGVhcChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCitKU1ZhbHVlIEpTQmlnSW50Ojp1
bmFyeU1pbnVzKFZNJiB2bSwgSlNCaWdJbnQqIHgpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRU
b0JpZ0ludDMyKHVuYXJ5TWludXNJbXBsKHZtLCBIZWFwQmlnSW50SW1wbCB7IHggfSkpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgor
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJlbWFpbmRlckltcGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICAv
LyAxLiBJZiB5IGlzIDBuLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgCi0gICAgaWYgKHktPmlzWmVybygpKSB7CisgICAgaWYgKHkuaXNaZXJv
KCkpIHsKICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlz
IGFuIGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CkBAIC00MjAsNTggKzU3MCw4MCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJlbWFpbmRl
ckhlYXAoSlNHbG9iCiAgICAgICAgIHJldHVybiB4OwogCiAgICAgSlNCaWdJbnQqIHJlbWFpbmRl
cjsKLSAgICBpZiAoeS0+bGVuZ3RoKCkgPT0gMSkgewotICAgICAgICBEaWdpdCBkaXZpc29yID0g
eS0+ZGlnaXQoMCk7CisgICAgaWYgKHkubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICBEaWdpdCBk
aXZpc29yID0geS5kaWdpdCgwKTsKICAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkKLSAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMy
KDApOwogCiAgICAgICAgIERpZ2l0IHJlbWFpbmRlckRpZ2l0OwogICAgICAgICBhYnNvbHV0ZURp
dldpdGhEaWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRpZ2l0
KTsKICAgICAgICAgaWYgKCFyZW1haW5kZXJEaWdpdCkKLSAgICAgICAgICAgIHJldHVybiBjcmVh
dGVaZXJvKHZtKTsKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOwogCiAgICAgICAg
IHJlbWFpbmRlciA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDEpOwogICAgICAgICBy
ZW1haW5kZXItPnNldERpZ2l0KDAsIHJlbWFpbmRlckRpZ2l0KTsKICAgICB9IGVsc2UgewotICAg
ICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeSwgbnVs
bHB0ciwgJnJlbWFpbmRlcik7CisgICAgICAgIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3Io
Z2xvYmFsT2JqZWN0LCB4LCB5LnRvSGVhcEJpZ0ludCh2bSksIG51bGxwdHIsICZyZW1haW5kZXIp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAK
LSAgICByZW1haW5kZXItPnNldFNpZ24oeC0+c2lnbigpKTsKKyAgICByZW1haW5kZXItPnNldFNp
Z24oeC5zaWduKCkpOwogICAgIHJldHVybiByZW1haW5kZXItPnJpZ2h0VHJpbSh2bSk7CiB9CitK
U1ZhbHVlIEpTQmlnSW50OjpyZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihyZW1haW5kZXJJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhl
YXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpyZW1haW5kZXIoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIocmVtYWluZGVySW1wbChnbG9iYWxPYmplY3Qs
IEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFs
dWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQz
Ml90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihy
ZW1haW5kZXJJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmln
SW50SW1wbCB7IHkgfSkpOworfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmluY0hlYXAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbD4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjppbmNJbXBsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKIHsKLSAgICBpZiAoIXgtPnNp
Z24oKSkKKyAgICBpZiAoIXguc2lnbigpKQogICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUo
Z2xvYmFsT2JqZWN0LCB4LCBTaWduT3B0aW9uOjpVbnNpZ25lZCk7Ci0gICAgSlNCaWdJbnQqIHJl
c3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwgeC0+bGVuZ3RoKCkpOworICAg
IEpTQmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHgubGVu
Z3RoKCkpOwogICAgIGlmIChyZXN1bHQtPmlzWmVybygpKQogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIHJlc3VsdC0+c2V0U2lnbih0cnVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1K
U0JpZ0ludCogSlNCaWdJbnQ6OmRlY0hlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgpCitKU1ZhbHVlIEpTQmlnSW50OjppbmMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNCaWdJbnQqIHgpCiB7Ci0gICAgaWYgKHgtPmlzWmVybygpKSB7Ci0gICAgICAg
IEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVGcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwgMSk7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0U2lnbih0cnVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0gICAgaWYgKCF4LT5zaWduKCkpCi0gICAgICAgIHJldHVybiBhYnNvbHV0ZVN1Yk9uZShn
bG9iYWxPYmplY3QsIHgsIHgtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmln
SW50MzIoaW5jSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmRlY0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4
KQoreworICAgIGlmICh4LmlzWmVybygpKQorICAgICAgICByZXR1cm4ganNCaWdJbnQzMigtMSk7
CisgICAgaWYgKCF4LnNpZ24oKSkKKyAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViT25lKGdsb2Jh
bE9iamVjdCwgeCwgeC5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2Jh
bE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50
OjphZGRIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKK0pTVmFsdWUgSlNCaWdJbnQ6OmRlYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGVj
SW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWRkSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBib29sIHhTaWduID0geC0+c2lnbigpOworICAgIGJvb2wgeFNpZ24g
PSB4LnNpZ24oKTsKIAogICAgIC8vIHggKyB5ID09IHggKyB5CiAgICAgLy8gLXggKyAteSA9PSAt
KHggKyB5KQotICAgIGlmICh4U2lnbiA9PSB5LT5zaWduKCkpCisgICAgaWYgKHhTaWduID09IHku
c2lnbigpKQogICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGQoZ2xvYmFsT2JqZWN0LCB4LCB5LCB4
U2lnbik7CiAKICAgICAvLyB4ICsgLXkgPT0geCAtIHkgPT0gLSh5IC0geCkKQEAgLTQ4MiwxMiAr
NjU0LDI1IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWRkSGVhcChKU0dsb2JhbE9iamUKIAogICAg
IHJldHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwgIXhTaWduKTsKIH0KK0pTVmFsdWUgSlNCaWdJ
bnQ6OmFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGFkZEltcGwoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30K
K0pTVmFsdWUgSlNCaWdJbnQ6OmFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihh
ZGRJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1w
bCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKGFkZEltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0s
IEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6c3ViSGVh
cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgor
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnN1YkltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYm9vbCB4U2lnbiA9IHgtPnNpZ24oKTsKLSAgICBp
ZiAoeFNpZ24gIT0geS0+c2lnbigpKSB7CisgICAgYm9vbCB4U2lnbiA9IHguc2lnbigpOworICAg
IGlmICh4U2lnbiAhPSB5LnNpZ24oKSkgewogICAgICAgICAvLyB4IC0gKC15KSA9PSB4ICsgeQog
ICAgICAgICAvLyAoLXgpIC0geSA9PSAtKHggKyB5KQogICAgICAgICByZXR1cm4gYWJzb2x1dGVB
ZGQoZ2xvYmFsT2JqZWN0LCB4LCB5LCB4U2lnbik7CkBAIC01MDEsMTUyICs2ODYsMjU4IEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6c3ViSGVhcChKU0dsb2JhbE9iamUKICAgICByZXR1cm4gYWJzb2x1
dGVTdWIodm0sIHksIHgsICF4U2lnbik7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lz
ZUFuZEhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmln
SW50KiB5KQorSlNWYWx1ZSBKU0JpZ0ludDo6c3ViKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRv
QmlnSW50MzIoc3ViSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFw
QmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6c3ViKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7CisgICAgcmV0dXJu
IHRyeUNvbnZlcnRUb0JpZ0ludDMyKHN1YkltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50Ojpz
dWIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkK
K3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoc3ViSW1wbChnbG9iYWxPYmplY3Qs
IEludDMyQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK0pTQmln
SW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBpZiAoIXgtPnNpZ24oKSAmJiAheS0+c2lnbigpKSB7CisgICAgaWYg
KCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
ICAgICByZXR1cm4gYWJzb2x1dGVBbmQodm0sIHgsIHkpOwogICAgIH0KICAgICAKLSAgICBpZiAo
eC0+c2lnbigpICYmIHktPnNpZ24oKSkgewotICAgICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3Rk
OjptYXgoeC0+bGVuZ3RoKCksIHktPmxlbmd0aCgpKSArIDE7CisgICAgaWYgKHguc2lnbigpICYm
IHkuc2lnbigpKSB7CisgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0
aCgpLCB5Lmxlbmd0aCgpKSArIDE7CiAgICAgICAgIC8vICgteCkgJiAoLXkpID09IH4oeC0xKSAm
IH4oeS0xKSA9PSB+KCh4LTEpIHwgKHktMSkpCiAgICAgICAgIC8vID09IC0oKCh4LTEpIHwgKHkt
MSkpICsgMSkKICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2Jh
bE9iamVjdCwgeCwgcmVzdWx0TGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKLSAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUo
Z2xvYmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgoKSk7CisgICAgICAgIEpTQmlnSW50KiB5MSA9IGFi
c29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICByZXN1bHQgPSBhYnNvbHV0
ZU9yKHZtLCByZXN1bHQsIHkxKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVPcih2bSwgSGVh
cEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2Jq
ZWN0LCByZXN1bHQsIFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgICAgIHJldHVybiBhYnNvbHV0
ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRp
b246OlNpZ25lZCk7CiAgICAgfQogCi0gICAgQVNTRVJUKHgtPnNpZ24oKSAhPSB5LT5zaWduKCkp
OwotICAgIC8vIEFzc3VtZSB0aGF0IHggaXMgdGhlIHBvc2l0aXZlIEJpZ0ludC4KLSAgICBpZiAo
eC0+c2lnbigpKQotICAgICAgICBzdGQ6OnN3YXAoeCwgeSk7Ci0gICAgCisgICAgQVNTRVJUKHgu
c2lnbigpICE9IHkuc2lnbigpKTsKICAgICAvLyB4ICYgKC15KSA9PSB4ICYgfih5LTEpCi0gICAg
SlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgo
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgcmV0dXJu
IGFic29sdXRlQW5kTm90KHZtLCB4LCB5MSk7CisgICAgYXV0byBjb21wdXRlUmVzdWx0ID0gWyZd
IChhdXRvIHgsIGF1dG8geSkgLT4gSlNCaWdJbnQqIHsKKyAgICAgICAgQVNTRVJUKCF4LnNpZ24o
KSk7IAorICAgICAgICBBU1NFUlQoeS5zaWduKCkpOyAKKyAgICAgICAgSlNCaWdJbnQqIHkxID0g
YWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBhYnNvbHV0
ZUFuZE5vdCh2bSwgeCwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICB9OworICAgIGlmICh4
LnNpZ24oKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVSZXN1bHQoeSwgeCk7CisgICAgcmV0dXJu
IGNvbXB1dGVSZXN1bHQoeCwgeSk7Cit9CisKK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VBbmQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQor
eworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlQW5kSW1wbChnbG9iYWxP
YmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQor
SlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihiaXR3aXNlQW5kSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJ
bnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VBbmQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sK
KyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZUFuZEltcGwoZ2xvYmFsT2Jq
ZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7CiB9CiAK
LUpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lzZU9ySGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50
SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgdW5z
aWduZWQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC0+bGVuZ3RoKCksIHktPmxlbmd0aCgpKTsK
KyAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0
aCgpKTsKIAotICAgIGlmICgheC0+c2lnbigpICYmICF5LT5zaWduKCkpIHsKKyAgICBpZiAoIXgu
c2lnbigpICYmICF5LnNpZ24oKSkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAg
IHJldHVybiBhYnNvbHV0ZU9yKHZtLCB4LCB5KTsKICAgICB9CiAgICAgCi0gICAgaWYgKHgtPnNp
Z24oKSAmJiB5LT5zaWduKCkpIHsKKyAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAg
ICAgICAgLy8gKC14KSB8ICgteSkgPT0gfih4LTEpIHwgfih5LTEpID09IH4oKHgtMSkgJiAoeS0x
KSkKICAgICAgICAgLy8gPT0gLSgoKHgtMSkgJiAoeS0xKSkgKyAxKQogICAgICAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCByZXN1bHRMZW5ndGgp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAg
SlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgo
KSk7CisgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwg
eSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZCh2bSwgcmVzdWx0LCB5MSk7CisgICAg
ICAgIHJlc3VsdCA9IGFic29sdXRlQW5kKHZtLCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBI
ZWFwQmlnSW50SW1wbCB7IHkxIH0pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKIAogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBh
YnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHJlc3VsdCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsK
KyAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKICAgICB9CiAgICAgCi0gICAgQVNT
RVJUKHgtPnNpZ24oKSAhPSB5LT5zaWduKCkpOworICAgIEFTU0VSVCh4LnNpZ24oKSAhPSB5LnNp
Z24oKSk7CiAKLSAgICAvLyBBc3N1bWUgdGhhdCB4IGlzIHRoZSBwb3NpdGl2ZSBCaWdJbnQuCi0g
ICAgaWYgKHgtPnNpZ24oKSkKLSAgICAgICAgc3RkOjpzd2FwKHgsIHkpOwotICAgIAogICAgIC8v
IHggfCAoLXkpID09IHggfCB+KHktMSkgPT0gfigoeS0xKSAmfiB4KSA9PSAtKCgoeS0xKSAmfiB4
KSArIDEpCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVj
dCwgeSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKLSAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZE5vdCh2bSwgcmVzdWx0LCB4KTsKKyAgICBh
dXRvIGNvbXB1dGVSZXN1bHQgPSBbJl0gKGF1dG8geCwgYXV0byB5KSAtPiBKU0JpZ0ludCogewor
ICAgICAgICBBU1NFUlQoIXguc2lnbigpKTsKKyAgICAgICAgQVNTRVJUKHkuc2lnbigpKTsKKwor
ICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5
LCByZXN1bHRMZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3Qodm0sIEhlYXBCaWdJbnRJbXBs
IHsgcmVzdWx0IH0sIHgpOworCisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0
dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQg
fSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICB9OwogCi0gICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHJlc3VsdCwgU2lnbk9wdGlv
bjo6U2lnbmVkKTsKKyAgICBpZiAoeC5zaWduKCkpCisgICAgICAgIHJldHVybiBjb21wdXRlUmVz
dWx0KHksIHgpOworICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHgsIHkpOwogfQogCi1KU0JpZ0lu
dCogSlNCaWdJbnQ6OmJpdHdpc2VYb3JIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VPcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7
CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VPckltcGwoZ2xvYmFsT2Jq
ZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pT
VmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VPcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQz
MihiaXR3aXNlT3JJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMy
QmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZU9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7CisgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VPckltcGwoZ2xvYmFsT2JqZWN0LCBJ
bnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0lu
dDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCi0gICAgaWYgKCF4LT5zaWduKCkgJiYgIXktPnNpZ24oKSkgeworICAgIGlmICgh
eC5zaWduKCkgJiYgIXkuc2lnbigpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAg
ICAgcmV0dXJuIGFic29sdXRlWG9yKHZtLCB4LCB5KTsKICAgICB9CiAgICAgCi0gICAgaWYgKHgt
PnNpZ24oKSAmJiB5LT5zaWduKCkpIHsKLSAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6
bWF4KHgtPmxlbmd0aCgpLCB5LT5sZW5ndGgoKSk7CisgICAgaWYgKHguc2lnbigpICYmIHkuc2ln
bigpKSB7CisgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5
Lmxlbmd0aCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vICgteCkgXiAoLXkpID09IH4oeC0xKSBe
IH4oeS0xKSA9PSAoeC0xKSBeICh5LTEpCiAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNv
bHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHJlc3VsdExlbmd0aCk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICBKU0JpZ0ludCogeTEgPSBh
YnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHktPmxlbmd0aCgpKTsKKyAgICAgICAgSlNC
aWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIHJlc3VsdCwg
eTEpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVz
dWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CiAgICAgfQotICAgIEFTU0VSVCh4LT5zaWdu
KCkgIT0geS0+c2lnbigpKTsKLSAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC0+bGVu
Z3RoKCksIHktPmxlbmd0aCgpKSArIDE7CisgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2lnbigp
KTsKKyAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5sZW5ndGgo
KSkgKyAxOworCisgICAgLy8geCBeICgteSkgPT0geCBeIH4oeS0xKSA9PSB+KHggXiAoeS0xKSkg
PT0gLSgoeCBeICh5LTEpKSArIDEpCisgICAgYXV0byBjb21wdXRlUmVzdWx0ID0gWyZdIChhdXRv
IHgsIGF1dG8geSkgLT4gSlNCaWdJbnQqIHsKKyAgICAgICAgQVNTRVJUKCF4LnNpZ24oKSk7Cisg
ICAgICAgIEFTU0VSVCh5LnNpZ24oKSk7CisgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNv
bHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHJlc3VsdExlbmd0aCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgICAgIHJlc3VsdCA9IGFic29s
dXRlWG9yKHZtLCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBI
ZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAgIH07CiAg
ICAgCiAgICAgLy8gQXNzdW1lIHRoYXQgeCBpcyB0aGUgcG9zaXRpdmUgQmlnSW50LgotICAgIGlm
ICh4LT5zaWduKCkpCi0gICAgICAgIHN0ZDo6c3dhcCh4LCB5KTsKLSAgICAKLSAgICAvLyB4IF4g
KC15KSA9PSB4IF4gfih5LTEpID09IH4oeCBeICh5LTEpKSA9PSAtKCh4IF4gKHktMSkpICsgMSkK
LSAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCBy
ZXN1bHRMZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
ICAgIGlmICh4LnNpZ24oKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVSZXN1bHQoeSwgeCk7Cisg
ICAgcmV0dXJuIGNvbXB1dGVSZXN1bHQoeCwgeSk7Cit9CiAKLSAgICByZXN1bHQgPSBhYnNvbHV0
ZVhvcih2bSwgcmVzdWx0LCB4KTsKLSAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFi
c29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBTaWduT3B0aW9uOjpTaWduZWQpOwor
SlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0Jp
Z0ludDMyKGJpdHdpc2VYb3JJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0s
IEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNlWG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7
CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VYb3JJbXBsKGdsb2JhbE9i
amVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQor
SlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihiaXR3aXNlWG9ySW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50SW1wbCB7IHggfSwg
SGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0U2hp
ZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1w
bDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6bGVmdFNoaWZ0SW1wbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewot
ICAgIGlmICh5LT5pc1plcm8oKSB8fCB4LT5pc1plcm8oKSkKKyAgICBpZiAoeC5pc1plcm8oKSB8
fCB5LmlzWmVybygpKQogICAgICAgICByZXR1cm4geDsKIAotICAgIGlmICh5LT5zaWduKCkpCisg
ICAgaWYgKHkuc2lnbigpKQogICAgICAgICByZXR1cm4gcmlnaHRTaGlmdEJ5QWJzb2x1dGUoZ2xv
YmFsT2JqZWN0LCB4LCB5KTsKIAogICAgIHJldHVybiBsZWZ0U2hpZnRCeUFic29sdXRlKGdsb2Jh
bE9iamVjdCwgeCwgeSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlm
dEhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQorSlNWYWx1ZSBKU0JpZ0ludDo6bGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVy
dFRvQmlnSW50MzIobGVmdFNoaWZ0SW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsg
eCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6bGVmdFNo
aWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkp
CiB7Ci0gICAgaWYgKHktPmlzWmVybygpIHx8IHgtPmlzWmVybygpKQorICAgIHJldHVybiB0cnlD
b252ZXJ0VG9CaWdJbnQzMihsZWZ0U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6
bGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJ
bnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGxlZnRTaGlmdEltcGwo
Z2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9
KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpsZWZ0U2hpZnRTbG93KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihsZWZ0U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBs
IHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQoreworICAgIGlmICh4LmlzWmVybygp
IHx8IHkuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiB4OwogCi0gICAgaWYgKHktPnNpZ24oKSkK
KyAgICBpZiAoeS5zaWduKCkpCiAgICAgICAgIHJldHVybiBsZWZ0U2hpZnRCeUFic29sdXRlKGds
b2JhbE9iamVjdCwgeCwgeSk7CiAKICAgICByZXR1cm4gcmlnaHRTaGlmdEJ5QWJzb2x1dGUoZ2xv
YmFsT2JqZWN0LCB4LCB5KTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlTm90SGVh
cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKK0pTVmFsdWUgSlNC
aWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewotICAgIGlmICh4LT5zaWduKCkpIHsKKyAgICByZXR1
cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoc2lnbmVkUmlnaHRTaGlmdEltcGwoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFs
dWUgSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmln
SW50MzIoc2lnbmVkUmlnaHRTaGlmdEltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7
IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpzaWdu
ZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNC
aWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHNpZ25lZFJpZ2h0
U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50
SW1wbCB7IHkgfSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK0pTQmln
SW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlTm90SW1wbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgpCit7CisgICAgaWYgKHguc2lnbigpKSB7CiAgICAg
ICAgIC8vIH4oLXgpID09IH4ofih4LTEpKSA9PSB4LTEKLSAgICAgICAgcmV0dXJuIGFic29sdXRl
U3ViT25lKGdsb2JhbE9iamVjdCwgeCwgeC0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gYWJz
b2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4Lmxlbmd0aCgpKTsKICAgICB9IAogICAgIC8v
IH54ID09IC14LTEgPT0gLSh4KzEpCiAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9i
amVjdCwgeCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKIH0KIAorSlNWYWx1ZSBKU0JpZ0ludDo6Yml0
d2lzZU5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKK3sKKyAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZU5vdEltcGwoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHggfSkpOworfQorCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICNk
ZWZpbmUgSEFWRV9UV09fRElHSVQgMQogdHlwZWRlZiB1aW50NjRfdCBUd29EaWdpdDsKQEAgLTgx
MSwxNSArMTEwMiwxNiBAQCBpbmxpbmUgSlNCaWdJbnQ6OkRpZ2l0IEpTQmlnSW50OjpkaWdpdERp
CiAKIC8vIE11bHRpcGxpZXMge3NvdXJjZX0gd2l0aCB7ZmFjdG9yfSBhbmQgYWRkcyB7c3VtbWFu
ZH0gdG8gdGhlIHJlc3VsdC4KIC8vIHtyZXN1bHR9IGFuZCB7c291cmNlfSBtYXkgYmUgdGhlIHNh
bWUgQmlnSW50IGZvciBpbnBsYWNlIG1vZGlmaWNhdGlvbi4KLXZvaWQgSlNCaWdJbnQ6OmludGVy
bmFsTXVsdGlwbHlBZGQoSlNCaWdJbnQqIHNvdXJjZSwgRGlnaXQgZmFjdG9yLCBEaWdpdCBzdW1t
YW5kLCB1bnNpZ25lZCBuLCBKU0JpZ0ludCogcmVzdWx0KQordGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGw+Cit2b2lkIEpTQmlnSW50OjppbnRlcm5hbE11bHRpcGx5QWRkKEJpZ0ludEltcGwg
c291cmNlLCBEaWdpdCBmYWN0b3IsIERpZ2l0IHN1bW1hbmQsIHVuc2lnbmVkIG4sIEpTQmlnSW50
KiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHNvdXJjZS0+bGVuZ3RoKCkgPj0gbik7CisgICAgQVNT
RVJUKHNvdXJjZS5sZW5ndGgoKSA+PSBuKTsKICAgICBBU1NFUlQocmVzdWx0LT5sZW5ndGgoKSA+
PSBuKTsKIAogICAgIERpZ2l0IGNhcnJ5ID0gc3VtbWFuZDsKICAgICBEaWdpdCBoaWdoID0gMDsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIERpZ2l0IGN1
cnJlbnQgPSBzb3VyY2UtPmRpZ2l0KGkpOworICAgICAgICBEaWdpdCBjdXJyZW50ID0gc291cmNl
LmRpZ2l0KGkpOwogICAgICAgICBEaWdpdCBuZXdDYXJyeSA9IDA7CiAKICAgICAgICAgLy8gQ29t
cHV0ZSB0aGlzIHJvdW5kJ3MgbXVsdGlwbGljYXRpb24uCkBAIC04NTAsMTUgKzExNDIsMTYgQEAg
dm9pZCBKU0JpZ0ludDo6aW50ZXJuYWxNdWx0aXBseUFkZChKU0JpZwogLy8ge2FjY3VtdWxhdG9y
fSwgc3RhcnRpbmcgYXQge2FjY3VtdWxhdG9ySW5kZXh9IGZvciB0aGUgbGVhc3Qtc2lnbmlmaWNh
bnQKIC8vIGRpZ2l0LgogLy8gQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHthY2N1bXVsYXRvcn0g
aXMgYmlnIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQuCi12b2lkIEpTQmlnSW50OjptdWx0aXBs
eUFjY3VtdWxhdGUoSlNCaWdJbnQqIG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwgSlNC
aWdJbnQqIGFjY3VtdWxhdG9yLCB1bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KQordGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGw+Cit2b2lkIEpTQmlnSW50OjptdWx0aXBseUFjY3VtdWxhdGUo
QmlnSW50SW1wbCBtdWx0aXBsaWNhbmQsIERpZ2l0IG11bHRpcGxpZXIsIEpTQmlnSW50KiBhY2N1
bXVsYXRvciwgdW5zaWduZWQgYWNjdW11bGF0b3JJbmRleCkKIHsKLSAgICBBU1NFUlQoYWNjdW11
bGF0b3ItPmxlbmd0aCgpID4gbXVsdGlwbGljYW5kLT5sZW5ndGgoKSArIGFjY3VtdWxhdG9ySW5k
ZXgpOworICAgIEFTU0VSVChhY2N1bXVsYXRvci0+bGVuZ3RoKCkgPiBtdWx0aXBsaWNhbmQubGVu
Z3RoKCkgKyBhY2N1bXVsYXRvckluZGV4KTsKICAgICBpZiAoIW11bHRpcGxpZXIpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBEaWdpdCBjYXJyeSA9IDA7CiAgICAgRGlnaXQgaGlnaCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG11bHRpcGxpY2FuZC0+bGVuZ3RoKCk7IGkr
KywgYWNjdW11bGF0b3JJbmRleCsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG11
bHRpcGxpY2FuZC5sZW5ndGgoKTsgaSsrLCBhY2N1bXVsYXRvckluZGV4KyspIHsKICAgICAgICAg
RGlnaXQgYWNjID0gYWNjdW11bGF0b3ItPmRpZ2l0KGFjY3VtdWxhdG9ySW5kZXgpOwogICAgICAg
ICBEaWdpdCBuZXdDYXJyeSA9IDA7CiAgICAgICAgIApAQCAtODY3LDcgKzExNjAsNyBAQCB2b2lk
IEpTQmlnSW50OjptdWx0aXBseUFjY3VtdWxhdGUoSlNCaWdJCiAgICAgICAgIGFjYyA9IGRpZ2l0
QWRkKGFjYywgY2FycnksIG5ld0NhcnJ5KTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbXB1dGUg
dGhpcyByb3VuZCdzIG11bHRpcGxpY2F0aW9uLgotICAgICAgICBEaWdpdCBtdWx0aXBsaWNhbmRE
aWdpdCA9IG11bHRpcGxpY2FuZC0+ZGlnaXQoaSk7CisgICAgICAgIERpZ2l0IG11bHRpcGxpY2Fu
ZERpZ2l0ID0gbXVsdGlwbGljYW5kLmRpZ2l0KGkpOwogICAgICAgICBEaWdpdCBsb3cgPSBkaWdp
dE11bChtdWx0aXBsaWVyLCBtdWx0aXBsaWNhbmREaWdpdCwgaGlnaCk7CiAgICAgICAgIGFjYyA9
IGRpZ2l0QWRkKGFjYywgbG93LCBuZXdDYXJyeSk7CiAgICAgICAgIApAQCAtOTA1LDExICsxMTk4
LDMyIEBAIGJvb2wgSlNCaWdJbnQ6OmVxdWFscyhKU0JpZ0ludCogeCwgSlNCaWcKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmNvbXBh
cmUoSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK2lubGluZSBKU0JpZ0ludDo6Q29tcGFyaXNvblJl
c3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVDb21wYXJlKEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpCiB7Ci0gICAgYm9vbCB4U2lnbiA9IHgtPnNpZ24oKTsKKyAgICBBU1NFUlQoIXgubGVuZ3Ro
KCkgfHwgeC5kaWdpdCh4Lmxlbmd0aCgpIC0gMSkpOworICAgIEFTU0VSVCgheS5sZW5ndGgoKSB8
fCB5LmRpZ2l0KHkubGVuZ3RoKCkgLSAxKSk7CisKKyAgICBpbnQgZGlmZiA9IHgubGVuZ3RoKCkg
LSB5Lmxlbmd0aCgpOworICAgIGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlmZiA8IDAgPyBD
b21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFu
OworCisgICAgaW50IGkgPSB4Lmxlbmd0aCgpIC0gMTsKKyAgICB3aGlsZSAoaSA+PSAwICYmIHgu
ZGlnaXQoaSkgPT0geS5kaWdpdChpKSkKKyAgICAgICAgaS0tOworCisgICAgaWYgKGkgPCAwKQor
ICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWw7CisKKyAgICByZXR1cm4geC5k
aWdpdChpKSA+IHkuZGlnaXQoaSkgPyBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiA6IENv
bXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuOworfQogCi0gICAgaWYgKHhTaWduICE9IHktPnNpZ24o
KSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+
CitKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdCBKU0JpZ0ludDo6Y29tcGFyZUltcGwoQmlnSW50
SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKK3sKKyAgICBib29sIHhTaWduID0geC5zaWduKCk7CisK
KyAgICBpZiAoeFNpZ24gIT0geS5zaWduKCkpCiAgICAgICAgIHJldHVybiB4U2lnbiA/IENvbXBh
cmlzb25SZXN1bHQ6Okxlc3NUaGFuIDogQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW47CiAK
ICAgICBDb21wYXJpc29uUmVzdWx0IHJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKQEAg
LTkyMSw1NiArMTIzNSw1MSBAQCBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdCBKU0JpZ0ludDo6
Y29tCiAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOyAKIH0KIAotaW5saW5lIEpT
QmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZUNvbXBhcmUoSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6
OmNvbXBhcmUoSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewotICAgIEFTU0VSVCgheC0+bGVu
Z3RoKCkgfHwgeC0+ZGlnaXQoeC0+bGVuZ3RoKCkgLSAxKSk7Ci0gICAgQVNTRVJUKCF5LT5sZW5n
dGgoKSB8fCB5LT5kaWdpdCh5LT5sZW5ndGgoKSAtIDEpKTsKLQotICAgIGludCBkaWZmID0geC0+
bGVuZ3RoKCkgLSB5LT5sZW5ndGgoKTsKLSAgICBpZiAoZGlmZikKLSAgICAgICAgcmV0dXJuIGRp
ZmYgPCAwID8gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4gOiBDb21wYXJpc29uUmVzdWx0OjpH
cmVhdGVyVGhhbjsKLQotICAgIGludCBpID0geC0+bGVuZ3RoKCkgLSAxOwotICAgIHdoaWxlIChp
ID49IDAgJiYgeC0+ZGlnaXQoaSkgPT0geS0+ZGlnaXQoaSkpCi0gICAgICAgIGktLTsKLQotICAg
IGlmIChpIDwgMCkKLSAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOwotCi0g
ICAgcmV0dXJuIHgtPmRpZ2l0KGkpID4geS0+ZGlnaXQoaSkgPyBDb21wYXJpc29uUmVzdWx0OjpH
cmVhdGVyVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuOworICAgIHJldHVybiBjb21w
YXJlSW1wbChIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pOworfQor
SlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmNvbXBhcmUoaW50MzJfdCB4LCBK
U0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gY29tcGFyZUltcGwoSW50MzJCaWdJbnRJbXBsIHsg
eCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSk7Cit9CitKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3Vs
dCBKU0JpZ0ludDo6Y29tcGFyZShKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVy
biBjb21wYXJlSW1wbChIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9
KTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbikK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitK
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRT
aWduKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAotICAgIGlmICh4LT5s
ZW5ndGgoKSA8IHktPmxlbmd0aCgpKQorICAgIGlmICh4Lmxlbmd0aCgpIDwgeS5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkKGdsb2JhbE9iamVjdCwgeSwgeCwgcmVzdWx0U2ln
bik7CiAKLSAgICBpZiAoeC0+aXNaZXJvKCkpIHsKLSAgICAgICAgQVNTRVJUKHktPmlzWmVybygp
KTsKKyAgICBpZiAoeC5pc1plcm8oKSkgeworICAgICAgICBBU1NFUlQoeS5pc1plcm8oKSk7CiAg
ICAgICAgIHJldHVybiB4OwogICAgIH0KIAotICAgIGlmICh5LT5pc1plcm8oKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdFNpZ24gPT0geC0+c2lnbigpID8geCA6IHVuYXJ5TWludXNIZWFwKHZtLCB4
KTsKKyAgICBpZiAoeS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdFNpZ24gPT0geC5z
aWduKCkgPyB4IDogdW5hcnlNaW51c0ltcGwodm0sIHgpOwogCi0gICAgSlNCaWdJbnQqIHJlc3Vs
dCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC0+bGVuZ3Ro
KCkgKyAxKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhM
ZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpICsgMSk7CiAgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIERpZ2l0IGNhcnJ5ID0gMDsKICAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHktPmxlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKDsg
aSA8IHkubGVuZ3RoKCk7IGkrKykgewogICAgICAgICBEaWdpdCBuZXdDYXJyeSA9IDA7Ci0gICAg
ICAgIERpZ2l0IHN1bSA9IGRpZ2l0QWRkKHgtPmRpZ2l0KGkpLCB5LT5kaWdpdChpKSwgbmV3Q2Fy
cnkpOworICAgICAgICBEaWdpdCBzdW0gPSBkaWdpdEFkZCh4LmRpZ2l0KGkpLCB5LmRpZ2l0KGkp
LCBuZXdDYXJyeSk7CiAgICAgICAgIHN1bSA9IGRpZ2l0QWRkKHN1bSwgY2FycnksIG5ld0NhcnJ5
KTsKICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBzdW0pOwogICAgICAgICBjYXJyeSA9IG5l
d0NhcnJ5OwogICAgIH0KIAotICAgIGZvciAoOyBpIDwgeC0+bGVuZ3RoKCk7IGkrKykgeworICAg
IGZvciAoOyBpIDwgeC5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIERpZ2l0IG5ld0NhcnJ5ID0g
MDsKLSAgICAgICAgRGlnaXQgc3VtID0gZGlnaXRBZGQoeC0+ZGlnaXQoaSksIGNhcnJ5LCBuZXdD
YXJyeSk7CisgICAgICAgIERpZ2l0IHN1bSA9IGRpZ2l0QWRkKHguZGlnaXQoaSksIGNhcnJ5LCBu
ZXdDYXJyeSk7CiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgc3VtKTsKICAgICAgICAgY2Fy
cnkgPSBuZXdDYXJyeTsKICAgICB9CkBAIC05ODEsMzggKzEyOTAsMzkgQEAgSlNCaWdJbnQqIEpT
QmlnSW50OjphYnNvbHV0ZUFkZChKU0dsb2JhbAogICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJp
bSh2bSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbikKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBs
MiB5LCBib29sIHJlc3VsdFNpZ24pCiB7CiAgICAgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJpc29u
UmVzdWx0ID0gYWJzb2x1dGVDb21wYXJlKHgsIHkpOwotICAgIEFTU0VSVCh4LT5sZW5ndGgoKSA+
PSB5LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKHgubGVuZ3RoKCkgPj0geS5sZW5ndGgoKSk7CiAg
ICAgQVNTRVJUKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRo
YW4gfHwgY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVhbCk7CiAKLSAg
ICBpZiAoeC0+aXNaZXJvKCkpIHsKLSAgICAgICAgQVNTRVJUKHktPmlzWmVybygpKTsKKyAgICBp
ZiAoeC5pc1plcm8oKSkgeworICAgICAgICBBU1NFUlQoeS5pc1plcm8oKSk7CiAgICAgICAgIHJl
dHVybiB4OwogICAgIH0KIAotICAgIGlmICh5LT5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdFNpZ24gPT0geC0+c2lnbigpID8geCA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcCh2bSwg
eCk7CisgICAgaWYgKHkuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiByZXN1bHRTaWduID09IHgu
c2lnbigpID8gSW1wbFJlc3VsdCB7IHggfSA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbCh2bSwg
eCk7CiAKICAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVh
bCkKICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVaZXJvKHZtKTsKIAotICAgIEpTQmln
SW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgeC0+
bGVuZ3RoKCkpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExl
bmd0aFVuY2hlY2tlZCh2bSwgeC5sZW5ndGgoKSk7CiAKICAgICBEaWdpdCBib3Jyb3cgPSAwOwog
ICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIGZvciAoOyBpIDwgeS0+bGVuZ3RoKCk7IGkrKykgewor
ICAgIGZvciAoOyBpIDwgeS5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIERpZ2l0IG5ld0JvcnJv
dyA9IDA7Ci0gICAgICAgIERpZ2l0IGRpZmZlcmVuY2UgPSBkaWdpdFN1Yih4LT5kaWdpdChpKSwg
eS0+ZGlnaXQoaSksIG5ld0JvcnJvdyk7CisgICAgICAgIERpZ2l0IGRpZmZlcmVuY2UgPSBkaWdp
dFN1Yih4LmRpZ2l0KGkpLCB5LmRpZ2l0KGkpLCBuZXdCb3Jyb3cpOwogICAgICAgICBkaWZmZXJl
bmNlID0gZGlnaXRTdWIoZGlmZmVyZW5jZSwgYm9ycm93LCBuZXdCb3Jyb3cpOwogICAgICAgICBy
ZXN1bHQtPnNldERpZ2l0KGksIGRpZmZlcmVuY2UpOwogICAgICAgICBib3Jyb3cgPSBuZXdCb3Jy
b3c7CiAgICAgfQogCi0gICAgZm9yICg7IGkgPCB4LT5sZW5ndGgoKTsgaSsrKSB7CisgICAgZm9y
ICg7IGkgPCB4Lmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgRGlnaXQgbmV3Qm9ycm93ID0gMDsK
LSAgICAgICAgRGlnaXQgZGlmZmVyZW5jZSA9IGRpZ2l0U3ViKHgtPmRpZ2l0KGkpLCBib3Jyb3cs
IG5ld0JvcnJvdyk7CisgICAgICAgIERpZ2l0IGRpZmZlcmVuY2UgPSBkaWdpdFN1Yih4LmRpZ2l0
KGkpLCBib3Jyb3csIG5ld0JvcnJvdyk7CiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgZGlm
ZmVyZW5jZSk7CiAgICAgICAgIGJvcnJvdyA9IG5ld0JvcnJvdzsKICAgICB9CkBAIC0xMDI5LDMw
ICsxMzM5LDMxIEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCAKIC8v
IGFsbG9jYXRlZCBmb3IgaXQ7IG90aGVyd2lzZSB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQg
aXQgaXMgYmlnIGVub3VnaC4KIC8vIHtxdW90aWVudH0gY2FuIGJlIHRoZSBzYW1lIGFzIHt4fSBm
b3IgYW4gaW4tcGxhY2UgZGl2aXNpb24uIHtxdW90aWVudH0gY2FuCiAvLyBhbHNvIGJlIG51bGxw
dHIgaWYgdGhlIGNhbGxlciBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHJlbWFpbmRlci4KLXZv
aWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYgdm0sIEpTQmlnSW50
KiB4LCBEaWdpdCBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVy
KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Cit2b2lkIEpTQmlnSW50OjphYnNvbHV0
ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3Is
IEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCiB7CiAgICAgQVNTRVJUKGRp
dmlzb3IpOwogCi0gICAgQVNTRVJUKCF4LT5pc1plcm8oKSk7CisgICAgQVNTRVJUKCF4LmlzWmVy
bygpKTsKICAgICByZW1haW5kZXIgPSAwOwogICAgIGlmIChkaXZpc29yID09IDEpIHsKLSAgICAg
ICAgaWYgKHF1b3RpZW50ICE9IG51bGxwdHIpCi0gICAgICAgICAgICAqcXVvdGllbnQgPSB4Owor
ICAgICAgICBpZiAocXVvdGllbnQpCisgICAgICAgICAgICAqcXVvdGllbnQgPSB4LnRvSGVhcEJp
Z0ludCh2bSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSB4LT5sZW5ndGgoKTsKLSAgICBpZiAocXVvdGllbnQgIT0gbnVsbHB0cikgeworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CisgICAgaWYgKHF1b3RpZW50KSB7CiAgICAgICAgIGlm
ICgqcXVvdGllbnQgPT0gbnVsbHB0cikKICAgICAgICAgICAgICpxdW90aWVudCA9IEpTQmlnSW50
OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBsZW5ndGgpOwogCiAgICAgICAgIGZvciAo
aW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgRGlnaXQgcSA9
IGRpZ2l0RGl2KHJlbWFpbmRlciwgeC0+ZGlnaXQoaSksIGRpdmlzb3IsIHJlbWFpbmRlcik7Cisg
ICAgICAgICAgICBEaWdpdCBxID0gZGlnaXREaXYocmVtYWluZGVyLCB4LmRpZ2l0KGkpLCBkaXZp
c29yLCByZW1haW5kZXIpOwogICAgICAgICAgICAgKCpxdW90aWVudCktPnNldERpZ2l0KGksIHEp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAt
IDE7IGkgPj0gMDsgaS0tKQotICAgICAgICAgICAgZGlnaXREaXYocmVtYWluZGVyLCB4LT5kaWdp
dChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKKyAgICAgICAgICAgIGRpZ2l0RGl2KHJlbWFpbmRl
ciwgeC5kaWdpdChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKICAgICB9CiB9CiAKQEAgLTEwNjIs
MTAgKzEzNzMsMTEgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpcwog
Ly8gQm90aCB7cXVvdGllbnR9IGFuZCB7cmVtYWluZGVyfSBhcmUgb3B0aW9uYWwsIGZvciBjYWxs
ZXJzIHRoYXQgYXJlIG9ubHkKIC8vIGludGVyZXN0ZWQgaW4gb25lIG9mIHRoZW0uCiAvLyBTZWUg
S251dGgsIFZvbHVtZSAyLCBzZWN0aW9uIDQuMy4xLCBBbGdvcml0aG0gRC4KLXZvaWQgSlNCaWdJ
bnQ6OmFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNCaWdJbnQqIGRpdmlkZW5kLCBKU0JpZ0ludCogZGl2aXNvciwgSlNCaWdJbnQqKiBx
dW90aWVudCwgSlNCaWdJbnQqKiByZW1haW5kZXIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbDE+Cit2b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIGRpdmlkZW5kLCBKU0JpZ0ludCog
ZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgSlNCaWdJbnQqKiByZW1haW5kZXIpCiB7CiAg
ICAgQVNTRVJUKGRpdmlzb3ItPmxlbmd0aCgpID49IDIpOwotICAgIEFTU0VSVChkaXZpZGVuZC0+
bGVuZ3RoKCkgPj0gZGl2aXNvci0+bGVuZ3RoKCkpOworICAgIEFTU0VSVChkaXZpZGVuZC5sZW5n
dGgoKSA+PSBkaXZpc29yLT5sZW5ndGgoKSk7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMTA3
NCw3ICsxMzg2LDcgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aQog
ICAgIC8vIE1haW50YWluaW5nIHRoaXMgY29uc2lzdGVuY3kgaXMgcHJvYmFibHkgbW9yZSB1c2Vm
dWwgdGhhbiB0cnlpbmcgdG8KICAgICAvLyBjb21lIHVwIHdpdGggbW9yZSBkZXNjcmlwdGl2ZSBu
YW1lcyBmb3IgdGhlbS4KICAgICB1bnNpZ25lZCBuID0gZGl2aXNvci0+bGVuZ3RoKCk7Ci0gICAg
dW5zaWduZWQgbSA9IGRpdmlkZW5kLT5sZW5ndGgoKSAtIG47CisgICAgdW5zaWduZWQgbSA9IGRp
dmlkZW5kLmxlbmd0aCgpIC0gbjsKICAgICAKICAgICAvLyBUaGUgcXVvdGllbnQgdG8gYmUgY29t
cHV0ZWQuCiAgICAgSlNCaWdJbnQqIHEgPSBudWxscHRyOwpAQCAtMTA5NSw3ICsxNDA3LDcgQEAg
dm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aQogICAgIHVuc2lnbmVkIHNo
aWZ0ID0gY2x6KGxhc3REaWdpdCk7CiAKICAgICBpZiAoc2hpZnQgPiAwKSB7Ci0gICAgICAgIGRp
dmlzb3IgPSBhYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoZ2xvYmFsT2JqZWN0LCBkaXZpc29y
LCBzaGlmdCwgTGVmdFNoaWZ0TW9kZTo6U2FtZVNpemVSZXN1bHQpOworICAgICAgICBkaXZpc29y
ID0gYWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyBkaXZpc29yIH0sIHNoaWZ0LCBMZWZ0U2hpZnRNb2RlOjpTYW1lU2l6ZVJlc3VsdCk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogCkBAIC0x
MTQ0LDcgKzE0NTYsNyBAQCB2b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhCaWdJbnREaXZp
CiAgICAgICAgIC8vIGl0IGZyb20gdGhlIGRpdmlkZW5kLiBJZiB0aGVyZSB3YXMgImJvcnJvdyIs
IHRoZW4gdGhlIHF1b3RpZW50IGRpZ2l0CiAgICAgICAgIC8vIHdhcyBvbmUgdG9vIGhpZ2gsIHNv
IHdlIG11c3QgY29ycmVjdCBpdCBhbmQgdW5kbyBvbmUgc3VidHJhY3Rpb24gb2YKICAgICAgICAg
Ly8gdGhlIChzaGlmdGVkKSBkaXZpc29yLgotICAgICAgICBpbnRlcm5hbE11bHRpcGx5QWRkKGRp
dmlzb3IsIHFoYXQsIDAsIG4sIHFoYXR2KTsKKyAgICAgICAgaW50ZXJuYWxNdWx0aXBseUFkZChI
ZWFwQmlnSW50SW1wbCB7IGRpdmlzb3IgfSwgcWhhdCwgMCwgbiwgcWhhdHYpOwogICAgICAgICBE
aWdpdCBjID0gdS0+YWJzb2x1dGVJbnBsYWNlU3ViKHFoYXR2LCBqKTsKICAgICAgICAgaWYgKGMp
IHsKICAgICAgICAgICAgIGMgPSB1LT5hYnNvbHV0ZUlucGxhY2VBZGQoZGl2aXNvciwgaik7CkBA
IC0xMjMwLDEyICsxNTQyLDEzIEBAIHZvaWQgSlNCaWdJbnQ6OmlucGxhY2VSaWdodFNoaWZ0KHVu
c2lnbmUKIH0KIAogLy8gQWx3YXlzIGNvcGllcyB0aGUgaW5wdXQsIGV2ZW4gd2hlbiB7c2hpZnR9
ID09IDAuCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgdW5zaWduZWQgc2hpZnQs
IExlZnRTaGlmdE1vZGUgbW9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNC
aWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1bnNpZ25lZCBzaGlmdCwgTGVmdFNoaWZ0
TW9kZSBtb2RlKQogewogICAgIEFTU0VSVChzaGlmdCA8IGRpZ2l0Qml0cyk7Ci0gICAgQVNTRVJU
KCF4LT5pc1plcm8oKSk7CisgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKIAotICAgIHVuc2lnbmVk
IG4gPSB4LT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBuID0geC5sZW5ndGgoKTsKICAgICB1bnNp
Z25lZCByZXN1bHRMZW5ndGggPSBtb2RlID09IExlZnRTaGlmdE1vZGU6OkFsd2F5c0FkZE9uZURp
Z2l0ID8gbiArIDEgOiBuOwogICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVu
Z3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKICAgICBpZiAoIXJlc3VsdCkKQEAgLTEy
NDMsNyArMTU1Niw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHcK
IAogICAgIGlmICghc2hpZnQpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47
IGkrKykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC0+ZGlnaXQoaSkpOworICAg
ICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB4LmRpZ2l0KGkpKTsKICAgICAgICAgaWYgKG1v
ZGUgPT0gTGVmdFNoaWZ0TW9kZTo6QWx3YXlzQWRkT25lRGlnaXQpCiAgICAgICAgICAgICByZXN1
bHQtPnNldERpZ2l0KG4sIDApOwogCkBAIC0xMjUyLDcgKzE1NjUsNyBAQCBKU0JpZ0ludCogSlNC
aWdJbnQ6OmFic29sdXRlTGVmdFNoaWZ0QWx3CiAKICAgICBEaWdpdCBjYXJyeSA9IDA7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBEaWdpdCBkID0geC0+
ZGlnaXQoaSk7CisgICAgICAgIERpZ2l0IGQgPSB4LmRpZ2l0KGkpOwogICAgICAgICByZXN1bHQt
PnNldERpZ2l0KGksIChkIDw8IHNoaWZ0KSB8IGNhcnJ5KTsKICAgICAgICAgY2FycnkgPSBkID4+
IChkaWdpdEJpdHMgLSBzaGlmdCk7CiAgICAgfQpAQCAtMTI3MCw4ICsxNTgzLDggQEAgSlNCaWdJ
bnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsdwogLy8gSGVscGVyIGZvciBBYnNvbHV0
ZXtBbmQsQW5kTm90LE9yLFhvcn0uCiAvLyBQZXJmb3JtcyB0aGUgZ2l2ZW4gYmluYXJ5IHtvcH0g
b24gZGlnaXQgcGFpcnMgb2Yge3h9IGFuZCB7eX07IHdoZW4gdGhlCiAvLyBlbmQgb2YgdGhlIHNo
b3J0ZXIgb2YgdGhlIHR3byBpcyByZWFjaGVkLCB7ZXh0cmFEaWdpdHN9IGNvbmZpZ3VyZXMgaG93
Ci0vLyByZW1haW5pbmcgZGlnaXRzIGluIHRoZSBsb25nZXIgaW5wdXQgKGlmIHtzeW1tZXRyaWN9
ID09IFN5bW1ldHJpYywgaW4KLS8vIHt4fSBvdGhlcndpc2UpIGFyZSBoYW5kbGVkOiBjb3BpZWQg
dG8gdGhlIHJlc3VsdCBvciBpZ25vcmVkLgorLy8gcmVtYWluaW5nIGRpZ2l0cyBpbiB0aGUgbG9u
Z2VyIGlucHV0IGFyZSBoYW5kbGVkOiBjb3BpZWQgdG8gdGhlIHJlc3VsdAorLy8gb3IgaWdub3Jl
ZC4KIC8vIEV4YW1wbGU6CiAvLyAgICAgICB5OiAgICAgICAgICAgICBbIHkyIF1bIHkxIF1bIHkw
IF0KIC8vICAgICAgIHg6ICAgICAgIFsgeDMgXVsgeDIgXVsgeDEgXVsgeDAgXQpAQCAtMTI4MCwz
MCArMTU5MywzNCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlTGVmdFNoaWZ0QWx3CiAv
LyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICB8ICAgICB8CiAvLyAgICAgICAgICAgICAg
ICAgICB2ICAgICB2ICAgICB2ICAgICB2CiAvLyByZXN1bHQ6IFsgIDAgXVsgeDMgXVsgcjIgXVsg
cjEgXVsgcjAgXQotdGVtcGxhdGU8dHlwZW5hbWUgQml0d2lzZU9wPgotaW5saW5lIEpTQmlnSW50
KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMsIFN5bW1ldHJpY09wIHN5bW1l
dHJpYywgQml0d2lzZU9wJiYgb3ApCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5
cGVuYW1lIEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+CitpbmxpbmUgSlNCaWdJbnQq
IEpTQmlnSW50OjphYnNvbHV0ZUJpdHdpc2VPcChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMsIEJpdHdpc2VPcCYmIG9w
KQogewotICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4LT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCB5
TGVuZ3RoID0geS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgeExlbmd0aCA9IHgubGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgeUxlbmd0aCA9IHkubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgbnVtUGFp
cnMgPSB5TGVuZ3RoOworICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IHhMZW5ndGg7CiAgICAgaWYg
KHhMZW5ndGggPCB5TGVuZ3RoKSB7CiAgICAgICAgIG51bVBhaXJzID0geExlbmd0aDsKLSAgICAg
ICAgaWYgKHN5bW1ldHJpYyA9PSBTeW1tZXRyaWNPcDo6U3ltbWV0cmljKSB7Ci0gICAgICAgICAg
ICBzdGQ6OnN3YXAoeCwgeSk7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAoeExlbmd0aCwgeUxlbmd0
aCk7Ci0gICAgICAgIH0KKyAgICAgICAgbWF4TGVuZ3RoID0geUxlbmd0aDsKICAgICB9CiAKICAg
ICBBU1NFUlQobnVtUGFpcnMgPT0gc3RkOjptaW4oeExlbmd0aCwgeUxlbmd0aCkpOwotICAgIHVu
c2lnbmVkIHJlc3VsdExlbmd0aCA9IGV4dHJhRGlnaXRzID09IEV4dHJhRGlnaXRzSGFuZGxpbmc6
OkNvcHkgPyB4TGVuZ3RoIDogbnVtUGFpcnM7CisgICAgQVNTRVJUKG1heExlbmd0aCA9PSBzdGQ6
Om1heCh4TGVuZ3RoLCB5TGVuZ3RoKSk7CisgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gZXh0
cmFEaWdpdHMgPT0gRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSA/IG1heExlbmd0aCA6IG51bVBh
aXJzOwogICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZt
LCByZXN1bHRMZW5ndGgpOwogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoOyBpIDwgbnVt
UGFpcnM7IGkrKykKLSAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBvcCh4LT5kaWdpdChpKSwg
eS0+ZGlnaXQoaSkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBvcCh4LmRpZ2l0KGkp
LCB5LmRpZ2l0KGkpKSk7CiAKICAgICBpZiAoZXh0cmFEaWdpdHMgPT0gRXh0cmFEaWdpdHNIYW5k
bGluZzo6Q29weSkgewotICAgICAgICBmb3IgKDsgaSA8IHhMZW5ndGg7IGkrKykKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC0+ZGlnaXQoaSkpOworICAgICAgICBpZiAoeExlbmd0
aCA+IHlMZW5ndGgpIHsKKyAgICAgICAgICAgIGZvciAoOyBpIDwgeExlbmd0aDsgaSsrKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChpKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBmb3IgKDsgaSA8IHlMZW5ndGg7IGkrKykKKyAgICAgICAgICAg
ICAgICByZXN1bHQtPnNldERpZ2l0KGksIHkuZGlnaXQoaSkpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgZm9yICg7IGkgPCByZXN1bHRMZW5ndGg7IGkrKykKQEAgLTEzMTIsNDYgKzE2MjksNjEg
QEAgaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aQogICAgIHJldHVybiBy
ZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVB
bmQoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQqIEpTQmlnSW50Ojph
YnNvbHV0ZUFuZChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAg
YXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0
dXJuIGEgJiBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5
LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBTeW1tZXRyaWNPcDo6U3ltbWV0cmljLCBkaWdp
dE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRy
YURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBkaWdpdE9wZXJhdGlvbik7CiB9CiAKLUpTQmlnSW50KiBK
U0JpZ0ludDo6YWJzb2x1dGVPcihWTSYgdm0sIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlT3IoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KQogewogICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShEaWdpdCBhLCBEaWdpdCBi
KSB7CiAgICAgICAgIHJldHVybiBhIHwgYjsKICAgICB9OwotICAgIHJldHVybiBhYnNvbHV0ZUJp
dHdpc2VPcCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgU3ltbWV0cmljT3A6
OlN5bW1ldHJpYywgZGlnaXRPcGVyYXRpb24pOworICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VP
cCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOwog
fQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kTm90KFZNJiB2bSwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBbmROb3QoVk0mIHZt
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAgIGF1dG8gZGlnaXRPcGVyYXRp
b24gPSBbXShEaWdpdCBhLCBEaWdpdCBiKSB7Ci0gICAgICAgIHJldHVybiBhICYgfmI7Ci0gICAg
fTsKLSAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFu
ZGxpbmc6OkNvcHksIFN5bW1ldHJpY09wOjpOb3RTeW1tZXRyaWMsIGRpZ2l0T3BlcmF0aW9uKTsK
KyAgICAvLyB4ICYgfnkKKworICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4Lmxlbmd0aCgpOworICAg
IHVuc2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0
aCA9IHhMZW5ndGg7CisKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVu
Y2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBmb3Ig
KDsgaSA8IHN0ZDo6bWluKHhMZW5ndGgsIHlMZW5ndGgpOyBpKyspCisgICAgICAgIHJlc3VsdC0+
c2V0RGlnaXQoaSwgeC5kaWdpdChpKSAmIH55LmRpZ2l0KGkpKTsKKyAgICBmb3IgKDsgaSA8IHJl
c3VsdExlbmd0aDsgKytpKQorICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkp
OworCisgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpT
QmlnSW50OjphYnNvbHV0ZVhvcihWTSYgdm0sIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlWG9yKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50
SW1wbDIgeSkKIHsKICAgICBhdXRvIGRpZ2l0T3BlcmF0aW9uID0gW10oRGlnaXQgYSwgRGlnaXQg
YikgewogICAgICAgICByZXR1cm4gYSBeIGI7CiAgICAgfTsKLSAgICByZXR1cm4gYWJzb2x1dGVC
aXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIFN5bW1ldHJpY09w
OjpTeW1tZXRyaWMsIGRpZ2l0T3BlcmF0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNl
T3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIGRpZ2l0T3BlcmF0aW9uKTsK
IH0KICAgICAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIFNpZ25PcHRpb24gc2lnbk9wdGlvbikKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0
ZUFkZE9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIFNpZ25P
cHRpb24gc2lnbk9wdGlvbikKIHsKLSAgICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9IHgtPmxlbmd0
aCgpOworICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoID0geC5sZW5ndGgoKTsKICAgICAvLyBUaGUg
YWRkaXRpb24gd2lsbCBvdmVyZmxvdyBpbnRvIGEgbmV3IGRpZ2l0IGlmIGFsbCBleGlzdGluZyBk
aWdpdHMgYXJlCiAgICAgLy8gYXQgbWF4aW11bS4KICAgICBib29sIHdpbGxPdmVyZmxvdyA9IHRy
dWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8RGlnaXQ+OjptYXgoKSAhPSB4LT5kaWdpdChp
KSkgeworICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxEaWdpdD46Om1heCgpICE9IHgu
ZGlnaXQoaSkpIHsKICAgICAgICAgICAgIHdpbGxPdmVyZmxvdyA9IGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEzNjUsNyArMTY5Nyw3IEBAIEpTQmlnSW50KiBKU0Jp
Z0ludDo6YWJzb2x1dGVBZGRPbmUoSlNHbG8KICAgICBEaWdpdCBjYXJyeSA9IDE7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKICAgICAgICAgRGlnaXQg
bmV3Q2FycnkgPSAwOwotICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIGRpZ2l0QWRkKHgtPmRp
Z2l0KGkpLCBjYXJyeSwgbmV3Q2FycnkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBk
aWdpdEFkZCh4LmRpZ2l0KGkpLCBjYXJyeSwgbmV3Q2FycnkpKTsKICAgICAgICAgY2FycnkgPSBu
ZXdDYXJyeTsKICAgICB9CiAgICAgaWYgKHJlc3VsdExlbmd0aCA+IGlucHV0TGVuZ3RoKQpAQCAt
MTM3NywyMSArMTcwOSwyMiBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpT
R2xvCiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdC0+dm0oKSk7CiB9
CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJlc3VsdExlbmd0aCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZVN1Yk9u
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIHVuc2lnbmVkIHJl
c3VsdExlbmd0aCkKIHsKLSAgICBBU1NFUlQoIXgtPmlzWmVybygpKTsKLSAgICBBU1NFUlQocmVz
dWx0TGVuZ3RoID49IHgtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXguaXNaZXJvKCkpOworICAg
IEFTU0VSVChyZXN1bHRMZW5ndGggPj0geC5sZW5ndGgoKSk7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVj
dCwgcmVzdWx0TGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgRGlnaXQgYm9ycm93ID0gMTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgRGlnaXQgbmV3Qm9ycm93ID0g
MDsKLSAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBkaWdpdFN1Yih4LT5kaWdpdChpKSwgYm9y
cm93LCBuZXdCb3Jyb3cpKTsKKyAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBkaWdpdFN1Yih4
LmRpZ2l0KGkpLCBib3Jyb3csIG5ld0JvcnJvdykpOwogICAgICAgICBib3Jyb3cgPSBuZXdCb3Jy
b3c7CiAgICAgfQogICAgIEFTU0VSVCghYm9ycm93KTsKQEAgLTE0MDEsNyArMTczNCw4IEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUoSlNHbG8KICAgICByZXR1cm4gcmVzdWx0
LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlmdEJ5QWJz
b2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0MTUsOCArMTc0OSw4IEBAIEpTQmlnSW50KiBK
U0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZSgKICAgICBEaWdpdCBzaGlmdCA9ICpvcHRpb25h
bFNoaWZ0OwogICAgIHVuc2lnbmVkIGRpZ2l0U2hpZnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c2hpZnQgLyBkaWdpdEJpdHMpOwogICAgIHVuc2lnbmVkIGJpdHNTaGlmdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzaGlmdCAlIGRpZ2l0Qml0cyk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0geC0+
bGVuZ3RoKCk7Ci0gICAgYm9vbCBncm93ID0gYml0c1NoaWZ0ICYmICh4LT5kaWdpdChsZW5ndGgg
LSAxKSA+PiAoZGlnaXRCaXRzIC0gYml0c1NoaWZ0KSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0g
eC5sZW5ndGgoKTsKKyAgICBib29sIGdyb3cgPSBiaXRzU2hpZnQgJiYgKHguZGlnaXQobGVuZ3Ro
IC0gMSkgPj4gKGRpZ2l0Qml0cyAtIGJpdHNTaGlmdCkpOwogICAgIGludCByZXN1bHRMZW5ndGgg
PSBsZW5ndGggKyBkaWdpdFNoaWZ0ICsgZ3JvdzsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHJlc3VsdExlbmd0aCkgPiBtYXhMZW5ndGgpIHsKICAgICAgICAgdGhyb3dSYW5nZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRp
b24gaXMgdG9vIGJpZyJfcyk7CkBAIC0xNDMxLDE0ICsxNzY1LDE0IEBAIEpTQmlnSW50KiBKU0Jp
Z0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZSgKICAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQo
aSwgMHVsKTsKIAogICAgICAgICBmb3IgKDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1
bHRMZW5ndGgpOyBpKyspCi0gICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHgtPmRpZ2l0
KGkgLSBkaWdpdFNoaWZ0KSk7CisgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGln
aXQoaSAtIGRpZ2l0U2hpZnQpKTsKICAgICB9IGVsc2UgewogICAgICAgICBEaWdpdCBjYXJyeSA9
IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaWdpdFNoaWZ0OyBpKyspCiAg
ICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIDB1bCk7CiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBEaWdpdCBkID0geC0+
ZGlnaXQoaSk7CisgICAgICAgICAgICBEaWdpdCBkID0geC5kaWdpdChpKTsKICAgICAgICAgICAg
IHJlc3VsdC0+c2V0RGlnaXQoaSArIGRpZ2l0U2hpZnQsIChkIDw8IGJpdHNTaGlmdCkgfCBjYXJy
eSk7CiAgICAgICAgICAgICBjYXJyeSA9IGQgPj4gKGRpZ2l0Qml0cyAtIGJpdHNTaGlmdCk7CiAg
ICAgICAgIH0KQEAgLTE0NDksMTUgKzE3ODMsMTYgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0
U2hpZnRCeUFic29sdXRlKAogICAgICAgICAgICAgQVNTRVJUKCFjYXJyeSk7CiAgICAgfQogCi0g
ICAgcmVzdWx0LT5zZXRTaWduKHgtPnNpZ24oKSk7CisgICAgcmVzdWx0LT5zZXRTaWduKHguc2ln
bigpKTsKICAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCog
SlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0lu
dDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0geC0+bGVuZ3RoKCk7Ci0gICAgYm9vbCBzaWdu
ID0geC0+c2lnbigpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CisgICAgYm9v
bCBzaWduID0geC5zaWduKCk7CiAgICAgYXV0byBvcHRpb25hbFNoaWZ0ID0gdG9TaGlmdEFtb3Vu
dCh5KTsKICAgICBpZiAoIW9wdGlvbmFsU2hpZnQpCiAgICAgICAgIHJldHVybiByaWdodFNoaWZ0
QnlNYXhpbXVtKHZtLCBzaWduKTsKQEAgLTE0NzYsMTEgKzE4MTEsMTEgQEAgSlNCaWdJbnQqIEpT
QmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZQogICAgIGJvb2wgbXVzdFJvdW5kRG93biA9IGZh
bHNlOwogICAgIGlmIChzaWduKSB7CiAgICAgICAgIGNvbnN0IERpZ2l0IG1hc2sgPSAoc3RhdGlj
X2Nhc3Q8RGlnaXQ+KDEpIDw8IGJpdHNTaGlmdCkgLSAxOwotICAgICAgICBpZiAoeC0+ZGlnaXQo
ZGlnaXRhbFNoaWZ0KSAmIG1hc2spCisgICAgICAgIGlmICh4LmRpZ2l0KGRpZ2l0YWxTaGlmdCkg
JiBtYXNrKQogICAgICAgICAgICAgbXVzdFJvdW5kRG93biA9IHRydWU7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRpZ2l0YWxTaGlmdDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHgtPmRpZ2l0KGkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHguZGlnaXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAgbXVzdFJvdW5kRG93biA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTE0
OTEsNyArMTgyNiw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUK
ICAgICAvLyBJZiBiaXRzU2hpZnQgaXMgbm9uLXplcm8sIGl0IGZyZWVzIHVwIGJpdHMsIHByZXZl
bnRpbmcgb3ZlcmZsb3cuCiAgICAgaWYgKG11c3RSb3VuZERvd24gJiYgIWJpdHNTaGlmdCkgewog
ICAgICAgICAvLyBPdmVyZmxvdyBjYW5ub3QgaGFwcGVuIGlmIHRoZSBtb3N0IHNpZ25pZmljYW50
IGRpZ2l0IGhhcyB1bnNldCBiaXRzLgotICAgICAgICBEaWdpdCBtc2QgPSB4LT5kaWdpdChsZW5n
dGggLSAxKTsKKyAgICAgICAgRGlnaXQgbXNkID0geC5kaWdpdChsZW5ndGggLSAxKTsKICAgICAg
ICAgYm9vbCByb3VuZGluZ0Nhbk92ZXJmbG93ID0gIXN0YXRpY19jYXN0PERpZ2l0Pih+bXNkKTsK
ICAgICAgICAgaWYgKHJvdW5kaW5nQ2FuT3ZlcmZsb3cpCiAgICAgICAgICAgICByZXN1bHRMZW5n
dGgrKzsKQEAgLTE1MDEsMTIgKzE4MzYsMTIgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNo
aWZ0QnlBYnNvbHV0ZQogICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5j
aGVja2VkKHZtLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSk7CiAgICAgaWYg
KCFiaXRzU2hpZnQpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGlnaXRhbFNoaWZ0OyBp
IDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGkgLSBkaWdpdGFs
U2hpZnQsIHgtPmRpZ2l0KGkpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSAtIGRp
Z2l0YWxTaGlmdCwgeC5kaWdpdChpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgRGlnaXQgY2Fy
cnkgPSB4LT5kaWdpdChkaWdpdGFsU2hpZnQpID4+IGJpdHNTaGlmdDsKKyAgICAgICAgRGlnaXQg
Y2FycnkgPSB4LmRpZ2l0KGRpZ2l0YWxTaGlmdCkgPj4gYml0c1NoaWZ0OwogICAgICAgICB1bnNp
Z25lZCBsYXN0ID0gbGVuZ3RoIC0gZGlnaXRhbFNoaWZ0IC0gMTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxhc3Q7IGkrKykgewotICAgICAgICAgICAgRGlnaXQgZCA9IHgtPmRp
Z2l0KGkgKyBkaWdpdGFsU2hpZnQgKyAxKTsKKyAgICAgICAgICAgIERpZ2l0IGQgPSB4LmRpZ2l0
KGkgKyBkaWdpdGFsU2hpZnQgKyAxKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwg
KGQgPDwgKGRpZ2l0Qml0cyAtIGJpdHNTaGlmdCkpIHwgY2FycnkpOwogICAgICAgICAgICAgY2Fy
cnkgPSBkID4+IGJpdHNTaGlmdDsKICAgICAgICAgfQpAQCAtMTUxOSwxNCArMTg1NCwxNCBAQCBK
U0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlCiAgICAgICAgICAgICAvLyBT
aW5jZSB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCByb3VuZGluZyBkb3duIG1lYW5zIGFkZGluZyBv
bmUgdG8KICAgICAgICAgICAgIC8vIGl0cyBhYnNvbHV0ZSB2YWx1ZS4gVGhpcyBjYW5ub3Qgb3Zl
cmZsb3cuCiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7Ci0gICAg
ICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIFNpZ25P
cHRpb246OlNpZ25lZCk7CisgICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0K
IAotSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNoaWZ0QnlNYXhpbXVtKFZNJiB2bSwgYm9vbCBz
aWduKQorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeU1heGltdW0o
Vk0mIHZtLCBib29sIHNpZ24pCiB7CiAgICAgaWYgKHNpZ24pCiAgICAgICAgIHJldHVybiBjcmVh
dGVGcm9tKHZtLCAtMSk7CkBAIC0xNjgzLDcgKzIwMTgsNyBAQCBTdHJpbmcgSlNCaWdJbnQ6OnRv
U3RyaW5nR2VuZXJpYyhWTSYgdm0sCiAgICAgICAgIEpTQmlnSW50KiogZGl2aWRlbmQgPSAmeDsK
ICAgICAgICAgZG8gewogICAgICAgICAgICAgRGlnaXQgY2h1bms7Ci0gICAgICAgICAgICBhYnNv
bHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sICpkaXZpZGVuZCwgY2h1bmtEaXZpc29yLCAmcmVz
dCwgY2h1bmspOworICAgICAgICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKHZtLCBI
ZWFwQmlnSW50SW1wbCB7ICpkaXZpZGVuZCB9LCBjaHVua0Rpdmlzb3IsICZyZXN0LCBjaHVuayk7
CiAgICAgICAgICAgICBkaXZpZGVuZCA9ICZyZXN0OwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNodW5rQ2hhcnM7IGkrKykgewogICAgICAgICAgICAgICAgIHJlc3VsdFN0
cmluZy5hcHBlbmQocmFkaXhEaWdpdHNbY2h1bmsgJSByYWRpeF0pOwpAQCAtMjAyMCwzNiArMjM1
NSw2IEBAIGJvb2wgSlNCaWdJbnQ6OmVxdWFsc1RvSW50MzIoaW50MzJfdCB2YWwKICAgICByZXR1
cm4gKHRoaXMtPmxlbmd0aCgpID09IDEpICYmICh0aGlzLT5zaWduKCkgPT0gKHZhbHVlIDwgMCkp
ICYmICh0aGlzLT5kaWdpdCgwKSA9PSBzdGF0aWNfY2FzdDxEaWdpdD4oc3RkOjphYnMoc3RhdGlj
X2Nhc3Q8aW50NjRfdD4odmFsdWUpKSkpOwogfQogCi1KU0JpZ0ludDo6Q29tcGFyaXNvblJlc3Vs
dCBKU0JpZ0ludDo6Y29tcGFyZVRvSW50MzIoaW50MzJfdCB2YWx1ZSkKLXsKLSAgICBib29sIHhT
aWduID0gc2lnbigpOwotICAgIGJvb2wgeVNpZ24gPSB2YWx1ZSA8IDA7Ci0KLSAgICBpZiAoeFNp
Z24gIT0geVNpZ24pCi0gICAgICAgIHJldHVybiB4U2lnbiA/IENvbXBhcmlzb25SZXN1bHQ6Okxl
c3NUaGFuIDogQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW47Ci0gICAgaWYgKGlzWmVybygp
KSB7Ci0gICAgICAgIEFTU0VSVCgheFNpZ24pOwotICAgICAgICBBU1NFUlQoIXlTaWduKTsKLSAg
ICAgICAgaWYgKHZhbHVlID09IDApCi0gICAgICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3Vs
dDo6RXF1YWw7Ci0gICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbjsKLSAg
ICB9Ci0KLSAgICBpZiAobGVuZ3RoKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIHhTaWduID8gQ29t
cGFyaXNvblJlc3VsdDo6TGVzc1RoYW4gOiBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbjsK
LQotICAgIHVpbnQ2NF90IHZhbHVlNjQgPSAwOwotICAgIGlmICh4U2lnbikKLSAgICAgICAgdmFs
dWU2NCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUp
KTsKLSAgICBlbHNlCi0gICAgICAgIHZhbHVlNjQgPSB2YWx1ZTsKLSAgICBpZiAoZGlnaXQoMCkg
PT0gdmFsdWU2NCkKLSAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOwotICAg
IGlmIChkaWdpdCgwKSA8IHZhbHVlNjQpCi0gICAgICAgIHJldHVybiB4U2lnbiA/IENvbXBhcmlz
b25SZXN1bHQ6OkdyZWF0ZXJUaGFuIDogQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW47Ci0gICAg
cmV0dXJuIHhTaWduID8gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4gOiBDb21wYXJpc29uUmVz
dWx0OjpHcmVhdGVyVGhhbjsKLX0KLQogSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJ
bnQ6OmNvbXBhcmVUb0RvdWJsZShKU0JpZ0ludCogeCwgZG91YmxlIHkpCiB7CiAgICAgLy8gVGhp
cyBhbGdvcml0aG0gZXhwZWN0IHRoYXQgdGhlIGRvdWJsZSBmb3JtYXQgaXMgSUVFRSA3NTQKQEAg
LTIxNzgsMTIgKzI0ODMsMTMgQEAgSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6
OmNvbQogICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpFcXVhbDsKIH0KIAotT3B0aW9uYWw8
SlNCaWdJbnQ6OkRpZ2l0PiBKU0JpZ0ludDo6dG9TaGlmdEFtb3VudChKU0JpZ0ludCogeCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorT3B0aW9uYWw8SlNCaWdJbnQ6OkRpZ2l0PiBK
U0JpZ0ludDo6dG9TaGlmdEFtb3VudChCaWdJbnRJbXBsIHgpCiB7Ci0gICAgaWYgKHgtPmxlbmd0
aCgpID4gMSkKKyAgICBpZiAoeC5sZW5ndGgoKSA+IDEpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgCi0gICAgRGlnaXQgdmFsdWUgPSB4LT5kaWdpdCgwKTsKKyAgICBEaWdpdCB2
YWx1ZSA9IHguZGlnaXQoMCk7CiAgICAgc3RhdGljX2Fzc2VydChtYXhMZW5ndGhCaXRzIDwgc3Rk
OjpudW1lcmljX2xpbWl0czxEaWdpdD46Om1heCgpLCAibWF4TGVuZ3RoQml0cyBuZWVkcyB0byBi
ZSBsZXNzIHRoYW4gZGlnaXQiKTsKICAgICAKICAgICBpZiAodmFsdWUgPiBtYXhMZW5ndGhCaXRz
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lv
biAyNjA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw5IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkNQVS5oIgorI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5o
IgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNp
bmNsdWRlIDx3dGYvQ2FnZWRVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CkBAIC0zNiw2ICszOCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBJ
bnQzMkJpZ0ludEltcGw7CitjbGFzcyBIZWFwQmlnSW50SW1wbDsKKwogY2xhc3MgSlNCaWdJbnQg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxs
OwpAQCAtMTIxLDM5ICsxMjYsMjAgQEAgcHVibGljOgogICAgICAgICBMZXNzVGhhbgogICAgIH07
CiAKLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KEpTQmlnSW50KiBiaWdJbnQpCi0gICAgewotI2lmIFVTRShCSUdJTlQzMikKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFiaWdJbnQpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLQotICAg
ICAgICBpZiAoYmlnSW50LT5sZW5ndGgoKSA8PSAxKSB7Ci0gICAgICAgICAgICBpZiAoIWJpZ0lu
dC0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7Ci0gICAg
ICAgICAgICBEaWdpdCBkaWdpdCA9IGJpZ0ludC0+ZGlnaXQoMCk7Ci0gICAgICAgICAgICBpZiAo
YmlnSW50LT5zaWduKCkpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2
NF90IG1heFZhbHVlID0gLXN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlnaXQgPD0gbWF4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KC1zdGF0aWNfY2FzdDxpbnQ2NF90PihkaWdpdCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBtYXhWYWx1ZSA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZhbHVlKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihkaWdpdCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICByZXR1cm4gYmlnSW50Owot
ICAgIH0KLQotICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGVxdWFscyhK
U0JpZ0ludCosIEpTQmlnSW50Kik7CiAgICAgYm9vbCBlcXVhbHNUb051bWJlcihKU1ZhbHVlKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsc1RvSW50MzIoaW50MzJfdCk7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJlVG9JbnQzMihpbnQzMl90
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGxlc3NUaGFuSW50MzIoaW50MzJfdCk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBsZXNzVGhhbkVxdWFsSW50MzIoaW50MzJfdCk7CiAg
ICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgY29tcGFyZShKU0JpZ0ludCogeCwgSlNCaWdJbnQq
IHkpOworICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmUoaW50MzJfdCB4LCBKU0Jp
Z0ludCogeSk7CisgICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgY29tcGFyZShKU0JpZ0ludCog
eCwgaW50MzJfdCB5KTsKKyAgICBzdGF0aWMgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJlKGludDMy
X3QgeCwgaW50MzJfdCB5KQorICAgIHsKKyAgICAgICAgaWYgKHggPT0geSkKKyAgICAgICAgICAg
IHJldHVybiBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdDo6RXF1YWw7CisgICAgICAgIGlmICh4
IDwgeSkKKyAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdDo6TGVz
c1RoYW47CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdDo6R3JlYXRl
clRoYW47CisgICAgfQogCiAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoSlNHbG9iYWxPYmpl
Y3QqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBkb3VibGUg
dG9OdW1iZXIoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKQEAgLTE2Myw5NCArMTQ5LDIxNCBAQCBw
dWJsaWM6CiAKICAgICBDb21wYXJpc29uUmVzdWx0IHN0YXRpYyBjb21wYXJlVG9Eb3VibGUoSlNC
aWdJbnQqIHgsIGRvdWJsZSB5KTsKIAotICAgIHN0YXRpYyBKU0JpZ0ludCogZXhwb25lbnRpYXRl
SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiBiYXNlLCBKU0JpZ0ludCogZXhwb25lbnQp
OwotICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KQorICAgIEFMV0FZU19J
TkxJTkUgc3RhdGljIEpTVmFsdWUgYXNJbnQzMk9ySGVhcENlbGwoVk0mIHZtLCBpbnQ2NF90IHZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGV4cG9uZW50
aWF0ZUhlYXAoZ2xvYmFsT2JqZWN0LCBiYXNlLCBleHBvbmVudCkpOworICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSA9PSB2YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVl
KSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7CisgICAgfQorICAgIEFM
V0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUgYXNJbnQzMk9ySGVhcENlbGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
c0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QtPnZtKCksIHZhbHVlKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgSlNCaWdJbnQqIG11bHRpcGx5SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgbXVsdGlwbHkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgSGVhcEJpZ0ludEltcGw7CitwdWJsaWM6CisgICAgc3RydWN0IElt
cGxSZXN1bHQgeworICAgICAgICBJbXBsUmVzdWx0KEhlYXBCaWdJbnRJbXBsJik7CisgICAgICAg
IEltcGxSZXN1bHQoSlNCaWdJbnQqKTsKKyAgICAgICAgSW1wbFJlc3VsdChJbnQzMkJpZ0ludElt
cGwmKTsKKyAgICAgICAgSW1wbFJlc3VsdChKU1ZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSBwYXls
b2FkOworICAgIH07Citwcml2YXRlOgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBleHBvbmVu
dGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgYmFzZSwgQmlnSW50SW1wbDIg
ZXhwb25lbnQpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBtdWx0aXBseUltcGwoSlNHbG9i
YWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGluY0ltcGwoSlNH
bG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGw+CisgICAgc3RhdGljIEltcGxSZXN1bHQgZGVjSW1wbChKU0dsb2JhbE9iamVjdCos
IEJpZ0ludEltcGwgeCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5
cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFkZEltcGwoSlNHbG9i
YWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGlj
IEltcGxSZXN1bHQgc3ViSW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBkaXZpZGVJbXBsKEpTR2xvYmFs
T2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJ
bXBsUmVzdWx0IHJlbWFpbmRlckltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAg
IHN0YXRpYyBJbXBsUmVzdWx0IHVuYXJ5TWludXNJbXBsKFZNJiwgQmlnSW50SW1wbCB4KTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+
CisgICAgc3RhdGljIEltcGxSZXN1bHQgYml0d2lzZUFuZEltcGwoSlNHbG9iYWxPYmplY3QqLCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQg
Yml0d2lzZU9ySW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJ
bnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBiaXR3aXNlWG9ySW1wbChKU0dsb2JhbE9i
amVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIEltcGxSZXN1bHQgYml0d2lzZU5vdEltcGwo
SlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3Vs
dCBsZWZ0U2hpZnRJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJp
Z0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IHNpZ25lZFJpZ2h0U2hpZnRJbXBsKEpT
R2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0
YXRpYyBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmVJbXBsKEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTVmFsdWUgZXhwb25lbnRpYXRlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBiYXNlLCBKU0JpZ0ludCogZXhwb25l
bnQpOworICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgaW50MzJfdCBleHBvbmVudCk7CisgICAgc3RhdGlj
IEpTVmFsdWUgZXhwb25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMy
X3QgYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBleHBvbmVu
dGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBiYXNlLCBpbnQzMl90
IGV4cG9uZW50KTsKKworICAgIHN0YXRpYyBKU1ZhbHVlIG11bHRpcGx5KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpT
VmFsdWUgbXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBK
U0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgbXVsdGlwbHkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGljIEpTVmFs
dWUgbXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQz
Ml90IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIobXVsdGlw
bHlIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgICAgICBpbnQ2NF90IHJlc3VsdCA9IHN0
YXRpY19jYXN0PGludDY0X3Q+KHgpICogc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSk7IAorICAgICAg
ICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCByZXN1bHQpOwogICAgIH0K
ICAgICAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGluY0hlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0Jp
Z0ludCogeCk7Ci0gICAgc3RhdGljIEpTVmFsdWUgaW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQmlnSW50KiB4KQorICAgIHN0YXRpYyBKU1ZhbHVlIGluYyhKU0dsb2JhbE9iamVj
dCosIEpTQmlnSW50KiB4KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBpbmMoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgaW50MzJfdCB4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKGluY0hlYXAoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgICAgIHJldHVybiBh
c0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpICsg
MSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBkZWNIZWFwKEpTR2xvYmFsT2JqZWN0
KiwgSlNCaWdJbnQqIHgpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGRlYyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKKyAgICBzdGF0aWMgSlNWYWx1ZSBkZWMoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpOworICAgIHN0YXRpYyBKU1ZhbHVl
IGRlYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgpCiAgICAgewotICAg
ICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGVjSGVhcChnbG9iYWxPYmplY3QsIHgp
KTsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oeCkgLSAxKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFk
ZEhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0
YXRpYyBKU1ZhbHVlIGFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCog
eCwgSlNCaWdJbnQqIHkpCisgICAgc3RhdGljIEpTVmFsdWUgYWRkKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFs
dWUgYWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90
IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBhZGQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAg
ICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYWRkSGVhcChnbG9iYWxPYmplY3QsIHgs
IHkpKTsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oeCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90Pih5KSk7CiAgICAgfQog
Ci0gICAgc3RhdGljIEpTQmlnSW50KiBzdWJIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBzdWIoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHN0YXRpYyBKU1Zh
bHVlIHN1YihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAg
c3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMyX3Qg
eSk7CisgICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBK
U0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgc3ViKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHN1
YkhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KTsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBD
ZWxsKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkgLSBzdGF0aWNfY2FzdDxp
bnQ2NF90Pih5KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBkaXZpZGVIZWFwKEpT
R2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNW
YWx1ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5KQorICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVl
IGRpdmlkZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0
YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgSlNCaWdJbnQq
IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihkaXZpZGVIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgICAgICBp
ZiAoIXkpIHsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGds
b2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxpZCBkaXZpc29yIHZhbHVlLiJfcyk7CisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhc0ludDMy
T3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpIC8gc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oeSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogcmVtYWlu
ZGVySGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAg
c3RhdGljIEpTVmFsdWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1ZSByZW1haW5kZXIoSlNH
bG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1Zh
bHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOwor
ICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwg
SlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihyZW1haW5kZXJIZWFwKGdsb2JhbE9iamVjdCwgeCwg
eSkpOworICAgICAgICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgICAgICB0aHJvd1Jhbmdl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxpZCBkaXZpc29yIHZhbHVl
LiJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0
X3Q+KHgpICUgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBK
U0JpZ0ludCogdW5hcnlNaW51c0hlYXAoVk0mLCBKU0JpZ0ludCogeCk7Ci0gICAgc3RhdGljIEpT
VmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4KQorICAgIHN0YXRpYyBKU1ZhbHVl
IHVuYXJ5TWludXMoVk0mIHZtLCBKU0JpZ0ludCogeCk7CisgICAgc3RhdGljIEpTVmFsdWUgdW5h
cnlNaW51cyhWTSYgdm0sIGludDMyX3QgeCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMih1bmFyeU1pbnVzSGVhcCh2bSwgeCkpOworICAgICAgICByZXR1cm4gYXNJ
bnQzMk9ySGVhcENlbGwodm0sIC1zdGF0aWNfY2FzdDxpbnQ2NF90Pih4KSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlQW5kSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmln
SW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZUFuZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCisgICAg
c3RhdGljIEpTVmFsdWUgYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VBbmQo
SlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBiaXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7
CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihiaXR3aXNlQW5kSGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAg
ICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgeCAmIHkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZU9ySGVhcChKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZU9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAg
ICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlT3Io
SlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KTsK
KyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVy
dFRvQmlnSW50MzIoYml0d2lzZU9ySGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKKyAgICAgICAg
cmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgeCB8IHkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBKU0JpZ0ludCogYml0d2lzZVhvckhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VYb3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAg
IHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlWG9y
KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGljIEpT
VmFsdWUgYml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkp
OworICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgaW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29u
dmVydFRvQmlnSW50MzIoYml0d2lzZVhvckhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAg
ICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHggXiB5KTsKICAgICB9
CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VOb3RIZWFwKEpTR2xvYmFsT2JqZWN0Kiwg
SlNCaWdJbnQqIHgpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VOb3QoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lz
ZU5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCk7CisgICAgc3Rh
dGljIEpTVmFsdWUgYml0d2lzZU5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQz
Ml90IHgpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lz
ZU5vdEhlYXAoZ2xvYmFsT2JqZWN0LCB4KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFw
Q2VsbChnbG9iYWxPYmplY3QsIH54KTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGxl
ZnRTaGlmdEhlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwot
ICAgIHN0YXRpYyBKU1ZhbHVlIGxlZnRTaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCisgICAgc3RhdGljIEpTVmFsdWUgbGVmdFNoaWZ0
KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMg
SlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90
IHgsIEpTQmlnSW50KiB5KTsKK3ByaXZhdGU6CisgICAgc3RhdGljIEpTVmFsdWUgbGVmdFNoaWZ0
U2xvdyhKU0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgaW50MzJfdCB5KTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50MzJfdCB4LCBpbnQzMl90IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRv
QmlnSW50MzIobGVmdFNoaWZ0SGVhcChnbG9iYWxPYmplY3QsIHgsIHkpKTsKLSAgICB9CisgICAg
ICAgIGlmICh5IDwgMCkgeworICAgICAgICAgICAgLy8gU2hpZnRzIG9uZSBsZXNzIHRoYW4gcmVx
dWVzdGVkLCBidXQgZG9lc24ndCBtYXR0ZXIgc2luY2UgbGhzIGlzIGludDMyCisgICAgICAgICAg
ICByZXR1cm4gc2lnbmVkUmlnaHRTaGlmdChnbG9iYWxPYmplY3QsIHgsIHkgPT0gSU5UMzJfTUlO
ID8gSU5UMzJfTUFYIDogLXkpOworICAgICAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIHNp
Z25lZFJpZ2h0U2hpZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihzaWduZWRSaWdodFNoaWZ0SGVhcChnbG9iYWxP
YmplY3QsIHgsIHkpKTsKKyAgICAgICAgLy8gRG8gc29tZSBjaGVja3MgdG8gZGV0ZWN0IG92ZXJm
bG93IG9mIGxlZnQtc2hpZnQuIEJ1dCB0aGlzIGlzIG11Y2ggY2hlYXBlciBjb21wYXJlZCB0byBh
bGxvY2F0aW5nIHR3byBKU0JpZ0ludCBhbmQgcGVyZm9ybSBzaGlmdCBvcGVyYXRpb25zIGluIEpT
QmlnSW50LgorICAgICAgICBpZiAoIXgpCisgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMigw
KTsKKyAgICAgICAgaWYgKHkgPCAzMikKKyAgICAgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFw
Q2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpIDw8IHkpOworICAgICAg
ICByZXR1cm4gbGVmdFNoaWZ0U2xvdyhnbG9iYWxPYmplY3QsIHgsIHkpOworICAgIH0KKworICAg
IHN0YXRpYyBKU1ZhbHVlIHNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0lu
dCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHNpZ25lZFJpZ2h0U2hpZnQo
SlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KTsKKyAgICBzdGF0aWMgSlNW
YWx1ZSBzaWduZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBKU0JpZ0lu
dCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgc2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKKyAgICB7CisgICAgICAgIGlm
ICh5IDwgMCkgeworICAgICAgICAgICAgLy8gU2hpZnRzIG9uZSBsZXNzIHRoYW4gcmVxdWVzdGVk
LCBidXQgZG9lc24ndCBtYXR0ZXIgc2luY2UgbGhzIGlzIGludDMyCisgICAgICAgICAgICByZXR1
cm4gbGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgeCwgeSA9PSBJTlQzMl9NSU4gPyBJTlQzMl9NQVgg
OiAteSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4ganNCaWdJbnQzMih4ID4+IHN0ZDo6
bWluKHksIDMxKSk7CiAgICAgfQogCiAgICAgRGlnaXQgZGlnaXQodW5zaWduZWQpOwpAQCAtMjc1
LDE4ICszODEsMjQgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgdWludDY0X3QgY2FsY3Vs
YXRlTWF4aW11bUNoYXJhY3RlcnNSZXF1aXJlZCh1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHJh
ZGl4LCBEaWdpdCBsYXN0RGlnaXQsIGJvb2wgc2lnbik7CiAgICAgCi0gICAgc3RhdGljIENvbXBh
cmlzb25SZXN1bHQgYWJzb2x1dGVDb21wYXJlKEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0g
ICAgc3RhdGljIHZvaWQgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKFZNJiwgSlNCaWdJbnQq
IHgsIERpZ2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIp
OwotICAgIHN0YXRpYyB2b2lkIGludGVybmFsTXVsdGlwbHlBZGQoSlNCaWdJbnQqIHNvdXJjZSwg
RGlnaXQgZmFjdG9yLCBEaWdpdCBzdW1tYW5kLCB1bnNpZ25lZCwgSlNCaWdJbnQqIHJlc3VsdCk7
Ci0gICAgc3RhdGljIHZvaWQgbXVsdGlwbHlBY2N1bXVsYXRlKEpTQmlnSW50KiBtdWx0aXBsaWNh
bmQsIERpZ2l0IG11bHRpcGxpZXIsIEpTQmlnSW50KiBhY2N1bXVsYXRvciwgdW5zaWduZWQgYWNj
dW11bGF0b3JJbmRleCk7Ci0gICAgc3RhdGljIHZvaWQgYWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2
aXNvcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiBkaXZpZGVuZCwgSlNCaWdJbnQqIGRpdmlz
b3IsIEpTQmlnSW50KiogcXVvdGllbnQsIEpTQmlnSW50KiogcmVtYWluZGVyKTsKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0
YXRpYyBDb21wYXJpc29uUmVzdWx0IGFic29sdXRlQ29tcGFyZShCaWdJbnRJbXBsMSB4LCBCaWdJ
bnRJbXBsMiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0
aWMgdm9pZCBhYnNvbHV0ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mLCBCaWdJbnRJbXBsIHgsIERp
Z2l0IGRpdmlzb3IsIEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpOworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyB2b2lkIGludGVybmFs
TXVsdGlwbHlBZGQoQmlnSW50SW1wbCBzb3VyY2UsIERpZ2l0IGZhY3RvciwgRGlnaXQgc3VtbWFu
ZCwgdW5zaWduZWQsIEpTQmlnSW50KiByZXN1bHQpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsPgorICAgIHN0YXRpYyB2b2lkIG11bHRpcGx5QWNjdW11bGF0ZShCaWdJbnRJbXBs
IG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwgSlNCaWdJbnQqIGFjY3VtdWxhdG9yLCB1
bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbDE+CisgICAgc3RhdGljIHZvaWQgYWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aXNvcihKU0ds
b2JhbE9iamVjdCosIEJpZ0ludEltcGwxIGRpdmlkZW5kLCBKU0JpZ0ludCogZGl2aXNvciwgSlNC
aWdJbnQqKiBxdW90aWVudCwgSlNCaWdJbnQqKiByZW1haW5kZXIpOwogICAgIAogICAgIGVudW0g
Y2xhc3MgTGVmdFNoaWZ0TW9kZSB7CiAgICAgICAgIFNhbWVTaXplUmVzdWx0LAogICAgICAgICBB
bHdheXNBZGRPbmVEaWdpdAogICAgIH07CiAgICAgCi0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNv
bHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgdW5z
aWduZWQgc2hpZnQsIExlZnRTaGlmdE1vZGUpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5
KEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4LCB1bnNpZ25lZCBzaGlmdCwgTGVmdFNoaWZ0
TW9kZSk7CiAgICAgc3RhdGljIGJvb2wgcHJvZHVjdEdyZWF0ZXJUaGFuKERpZ2l0IGZhY3RvcjEs
IERpZ2l0IGZhY3RvcjIsIERpZ2l0IGhpZ2gsIERpZ2l0IGxvdyk7CiAKICAgICBEaWdpdCBhYnNv
bHV0ZUlucGxhY2VBZGQoSlNCaWdJbnQqIHN1bW1hbmQsIHVuc2lnbmVkIHN0YXJ0SW5kZXgpOwpA
QCAtMjk4LDI2ICs0MTAsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgU2tpcAogICAgIH07CiAKLSAg
ICBlbnVtIGNsYXNzIFN5bW1ldHJpY09wIHsKLSAgICAgICAgU3ltbWV0cmljLAotICAgICAgICBO
b3RTeW1tZXRyaWMKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQml0d2lzZU9wPgot
ICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVCaXR3aXNlT3AoVk0mLCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcsIFN5bW1ldHJpY09wLCBCaXR3aXNlT3Am
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUJp
dHdpc2VPcChWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHksIEV4dHJhRGlnaXRzSGFu
ZGxpbmcsIEJpdHdpc2VPcCYmKTsKIAotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBbmQo
Vk0mLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJz
b2x1dGVPcihWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTQmln
SW50KiBhYnNvbHV0ZUFuZE5vdChWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAg
c3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVhvcihWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCog
eSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJ
bXBsMj4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kKFZNJiwgQmlnSW50SW1wbDEg
eCwgQmlnSW50SW1wbDIgeSk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0
eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlT3IoVk0m
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBKU0JpZ0ludCog
YWJzb2x1dGVBbmROb3QoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAg
IHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVYb3IoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KTsKIAogICAgIGVudW0gY2xhc3MgU2lnbk9wdGlvbiB7CiAgICAgICAgIFNpZ25lZCwK
ICAgICAgICAgVW5zaWduZWQKICAgICB9OwogCi0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0
ZUFkZE9uZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBTaWduT3B0aW9uKTsKLSAgICBz
dGF0aWMgSlNCaWdJbnQqIGFic29sdXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQq
IHgsIHVuc2lnbmVkIHJlc3VsdExlbmd0aCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0lu
dEltcGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFkZE9uZShKU0dsb2JhbE9iamVj
dCosIEJpZ0ludEltcGwgeCwgU2lnbk9wdGlvbik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVN1Yk9uZShKU0dsb2JhbE9i
amVjdCosIEJpZ0ludEltcGwgeCwgdW5zaWduZWQgcmVzdWx0TGVuZ3RoKTsKIAogICAgIC8vIERp
Z2l0IGFyaXRobWV0aWMgaGVscGVycy4KICAgICBzdGF0aWMgRGlnaXQgZGlnaXRBZGQoRGlnaXQg
YSwgRGlnaXQgYiwgRGlnaXQmIGNhcnJ5KTsKQEAgLTM0MywxOCArNDU2LDI0IEBAIHByaXZhdGU6
CiAKICAgICBzdGF0aWMgSlNCaWdJbnQqIGFsbG9jYXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgVk0m
LCB1bnNpZ25lZCByYWRpeCwgdW5zaWduZWQgY2hhcmNvdW50KTsKIAotICAgIHN0YXRpYyBKU0Jp
Z0ludCogY29weShWTSYsIEpTQmlnSW50KiB4KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbD4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGNvcHkoVk0mLCBCaWdJbnRJbXBsIHgpOwog
CiAgICAgdm9pZCBpbnBsYWNlTXVsdGlwbHlBZGQoRGlnaXQgbXVsdGlwbGllciwgRGlnaXQgcGFy
dCk7Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4LCBKU0JpZ0ludCogeSwgYm9vbCByZXN1bHRTaWduKTsKLSAgICBzdGF0aWMgSlNC
aWdJbnQqIGFic29sdXRlU3ViKFZNJiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5LCBib29sIHJl
c3VsdFNpZ24pOwotCi0gICAgc3RhdGljIEpTQmlnSW50KiBsZWZ0U2hpZnRCeUFic29sdXRlKEpT
R2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNC
aWdJbnQqIHJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgs
IEpTQmlnSW50KiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVu
YW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFic29sdXRlQWRkKEpTR2xv
YmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWdu
KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludElt
cGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFic29sdXRlU3ViKFZNJiwgQmlnSW50SW1wbDEg
eCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRTaWduKTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxS
ZXN1bHQgbGVmdFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgs
IEJpZ0ludEltcGwyIHkpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlw
ZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgcmlnaHRTaGlmdEJ5QWJz
b2x1dGUoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKIAot
ICAgIHN0YXRpYyBKU0JpZ0ludCogcmlnaHRTaGlmdEJ5TWF4aW11bShWTSYsIGJvb2wgc2lnbik7
CisgICAgc3RhdGljIEltcGxSZXN1bHQgcmlnaHRTaGlmdEJ5TWF4aW11bShWTSYsIGJvb2wgc2ln
bik7CiAKLSAgICBzdGF0aWMgT3B0aW9uYWw8RGlnaXQ+IHRvU2hpZnRBbW91bnQoSlNCaWdJbnQq
IHgpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBPcHRp
b25hbDxEaWdpdD4gdG9TaGlmdEFtb3VudChCaWdJbnRJbXBsIHgpOwogCiAgICAgaW5saW5lIHN0
YXRpYyBzaXplX3Qgb2Zmc2V0T2ZEYXRhKCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYwODA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxLDIwICs3MSwxMiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dDYXNlKEpT
R2xvCiAgICAgYXV0byBkb3VibGVPcCA9IFtdIChkb3VibGUgbGVmdCwgZG91YmxlIHJpZ2h0KSAt
PiBkb3VibGUgewogICAgICAgICByZXR1cm4gbGVmdCArIHJpZ2h0OwogICAgIH07Ci0gICAgYXV0
byBiaWdJbnQzMk9wID0gW10gKGludDMyX3QgbGVmdCwgaW50MzJfdCByaWdodCkgLT4gSlNWYWx1
ZSB7Ci0jaWYgVVNFKEJJR0lOVDMyKQotICAgICAgICBDaGVja2VkSW50MzIgcmVzdWx0ID0gbGVm
dDsKLSAgICAgICAgcmVzdWx0ICs9IHJpZ2h0OwotICAgICAgICBpZiAoVU5MSUtFTFkocmVzdWx0
Lmhhc092ZXJmbG93ZWQoKSkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAg
ICByZXR1cm4ganNCaWdJbnQzMihyZXN1bHQudW5zYWZlR2V0KCkpOwotI2Vsc2UKLSAgICAgICAg
VU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCisKKyAgICBhdXRvIGJpZ0lu
dE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byBy
aWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmFkZChnbG9iYWxPYmplY3QsIGxlZnQs
IHJpZ2h0KTsKICAgICB9OwotICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYXJpdGhtZXRp
Y0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgcDEsIHAyLCBKU0JpZ0ludDo6YWRkLCBkb3VibGVPcCwg
YmlnSW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBhZGRp
dGlvbi4iX3MpKTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYXJpdGhtZXRpY0Jp
bmFyeU9wKGdsb2JhbE9iamVjdCwgcDEsIHAyLCBkb3VibGVPcCwgYmlnSW50T3AsIGJpZ0ludE9w
LCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5
cGUgaW4gYWRkaXRpb24uIl9zKSk7CiB9CiAKIEpTVmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNjA4
MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0NCwyMSArMjQ0LDE0IEBAIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkNv
bXBhcmlzb25SZXN1bHQKICAgICBBU1NFUlQocmlnaHQuaXNCaWdJbnQoKSk7CiAjaWYgVVNFKEJJ
R0lOVDMyKQogICAgIGlmIChsZWZ0LmlzQmlnSW50MzIoKSkgewotICAgICAgICBpZiAocmlnaHQu
aXNCaWdJbnQzMigpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGxlZnRJbnQzMiA9IGxlZnQuYmln
SW50MzJBc0ludDMyKCk7Ci0gICAgICAgICAgICBpbnQzMl90IHJpZ2h0SW50MzIgPSByaWdodC5i
aWdJbnQzMkFzSW50MzIoKTsKLSAgICAgICAgICAgIGlmIChsZWZ0SW50MzIgPT0gcmlnaHRJbnQz
MikKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQ6OkVx
dWFsOwotICAgICAgICAgICAgaWYgKGxlZnRJbnQzMiA8IHJpZ2h0SW50MzIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbjsKLSAgICAg
ICAgICAgIHJldHVybiBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW47Ci0g
ICAgICAgIH0KKyAgICAgICAgaWYgKHJpZ2h0LmlzQmlnSW50MzIoKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU0JpZ0ludDo6Y29tcGFyZShsZWZ0LmJpZ0ludDMyQXNJbnQzMigpLCByaWdodC5iaWdJ
bnQzMkFzSW50MzIoKSk7CiAgICAgICAgIEFTU0VSVChyaWdodC5pc0hlYXBCaWdJbnQoKSk7Ci0g
ICAgICAgIHJldHVybiBpbnZlcnRCaWdJbnRDb21wYXJlUmVzdWx0KHJpZ2h0LmFzSGVhcEJpZ0lu
dCgpLT5jb21wYXJlVG9JbnQzMihsZWZ0LmJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgIHJl
dHVybiBKU0JpZ0ludDo6Y29tcGFyZShsZWZ0LmJpZ0ludDMyQXNJbnQzMigpLCByaWdodC5hc0hl
YXBCaWdJbnQoKSk7CiAgICAgfQogICAgIGlmIChyaWdodC5pc0JpZ0ludDMyKCkpIHsKICAgICAg
ICAgQVNTRVJUKGxlZnQuaXNIZWFwQmlnSW50KCkpOwotICAgICAgICByZXR1cm4gbGVmdC5hc0hl
YXBCaWdJbnQoKS0+Y29tcGFyZVRvSW50MzIocmlnaHQuYmlnSW50MzJBc0ludDMyKCkpOworICAg
ICAgICByZXR1cm4gSlNCaWdJbnQ6OmNvbXBhcmUobGVmdC5hc0hlYXBCaWdJbnQoKSwgcmlnaHQu
YmlnSW50MzJBc0ludDMyKCkpOwogICAgIH0KICNlbmRpZgogICAgIHJldHVybiBKU0JpZ0ludDo6
Y29tcGFyZShsZWZ0LmFzSGVhcEJpZ0ludCgpLCByaWdodC5hc0hlYXBCaWdJbnQoKSk7CkBAIC0z
MTcsNyArMzEwLDcgQEAgQUxXQVlTX0lOTElORSBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdAog
ICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0OjpVbmRlZmluZWQ7
CiAKICAgICAgICAgaWYgKGJpZ0ludFZhbHVlLmlzSGVhcEJpZ0ludCgpKQotICAgICAgICAgICAg
cmV0dXJuIGludmVydEJpZ0ludENvbXBhcmVSZXN1bHQoYmlnSW50VmFsdWUuYXNIZWFwQmlnSW50
KCktPmNvbXBhcmVUb0ludDMyKHYxKSk7CisgICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmNv
bXBhcmUodjEsIGJpZ0ludFZhbHVlLmFzSGVhcEJpZ0ludCgpKTsKIAogICAgICAgICBBU1NFUlQo
YmlnSW50VmFsdWUuaXNCaWdJbnQzMigpKTsKICNpZiBVU0UoQklHSU5UMzIpCkBAIC01MzQsOSAr
NTI3LDggQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQWRkKEpTR2xvYmFsT2JqZQogICAgIHJl
dHVybiBqc0FkZE5vbk51bWJlcihnbG9iYWxPYmplY3QsIHYxLCB2Mik7CiB9CiAKLS8vIEJpZ0lu
dDMyT3AgZXhwZWN0cyBpdHMgb3BlcmFuZHMgdW5ib3hlZCwgYW5kIHJldHVybnMgaXRzIHJlc3Vs
dCB1bmJveGVkIGFzIHdlbGwKLXRlbXBsYXRlPHR5cGVuYW1lIEhlYXBCaWdJbnRPcGVyYXRpb24s
IHR5cGVuYW1lIERvdWJsZU9wZXJhdGlvbiwgdHlwZW5hbWUgQmlnSW50MzJPcD4KLUFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBhcml0aG1ldGljQmluYXJ5T3AoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MiwgSGVhcEJpZ0ludE9wZXJhdGlvbiYmIGhlYXBC
aWdJbnRPcCwgRG91YmxlT3BlcmF0aW9uJiYgZG91YmxlT3AsIEJpZ0ludDMyT3AmJiBiaWdJbnQz
Mk9wLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCit0ZW1wbGF0ZTx0eXBlbmFtZSBEb3VibGVP
cGVyYXRpb24+CitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgYXJpdGhtZXRpY0JpbmFyeU9wKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIsIERvdWJsZU9w
ZXJhdGlvbiYmIGRvdWJsZU9wLCBKU1ZhbHVlICgqYmlnSW50MzIpKEpTR2xvYmFsT2JqZWN0Kiwg
aW50MzJfdCwgaW50MzJfdCksIEpTVmFsdWUgKCptaXhlZEJpZ0ludDEpKEpTR2xvYmFsT2JqZWN0
KiwgSlNCaWdJbnQqLCBpbnQzMl90KSwgSlNWYWx1ZSAoKm1peGVkQmlnSW50MikoSlNHbG9iYWxP
YmplY3QqLCBpbnQzMl90LCBKU0JpZ0ludCopLCBKU1ZhbHVlICgqaGVhcEJpZ0ludCkoSlNHbG9i
YWxPYmplY3QqLCBKU0JpZ0ludCosIEpTQmlnSW50KiksIGNvbnN0IGNoYXIqIGVycm9yTWVzc2Fn
ZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNTUxLDI4ICs1NDMsMjAgQEAgQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGFyaXRobWV0aWNCaW5hcnlPcAogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAg
IGlmIChsZWZ0TnVtZXJpYy5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgaWYgKHJpZ2h0TnVtZXJp
Yy5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGJpZ0lu
dDMyT3AobGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQz
MkFzSW50MzIoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAg
IEpTQmlnSW50KiBsZWZ0SGVhcEJpZ0ludCA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBsZWZ0
TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7Ci0gICAgICAgICAgICBKU0JpZ0ludCogcmlnaHRI
ZWFwQmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHJpZ2h0TnVtZXJpYy5iaWdJbnQz
MkFzSW50MzIoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBC
aWdJbnRPcChnbG9iYWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodEhlYXBCaWdJbnQpKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKSB7Ci0g
ICAgICAgICAgICBKU0JpZ0ludCogbGVmdEhlYXBCaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJv
bSh2bSwgbGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOwotICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50T3AoZ2xvYmFsT2JqZWN0LCBsZWZ0SGVhcEJp
Z0ludCwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkpCisgICAgICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIGJpZ0ludDMyKGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYmlnSW50MzJB
c0ludDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkpOworICAgICAgICBpZiAo
cmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBtaXhlZEJpZ0ludDIoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5iaWdJbnQz
MkFzSW50MzIoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CiAgICAgfSBlbHNlIGlm
IChsZWZ0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkgewotICAgICAgICBpZiAocmlnaHROdW1lcmlj
LmlzQmlnSW50MzIoKSkgewotICAgICAgICAgICAgSlNCaWdJbnQqIHJpZ2h0SGVhcEJpZ0ludCA9
IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkp
OwotICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50T3AoZ2xv
YmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHRIZWFwQmlnSW50KSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQotICAgICAg
ICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50T3AoZ2xvYmFsT2JqZWN0
LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgp
KSk7CisgICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJbnQzMigpKQorICAgICAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtaXhlZEJpZ0ludDEoZ2xvYmFsT2JqZWN0LCBsZWZ0
TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSk7
CisgICAgICAgIGVsc2UgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkKKyAgICAgICAg
ICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludChnbG9iYWxPYmplY3QsIGxl
ZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsK
ICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShiaWdJbnQzMk9wKTsKICAgICBpZiAobGVm
dE51bWVyaWMuaXNIZWFwQmlnSW50KCkgJiYgcmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQot
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnRPcChnbG9iYWxPYmpl
Y3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50
KCkpKTsKKyAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50KGdsb2Jh
bE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBC
aWdJbnQoKSkpOwogI2VuZGlmCiAKICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKQEAgLTU4MywyMSArNTY3LDEyIEBAIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBqc1N1YihKU0dsb2JhbE9iamUKICAgICBhdXRvIGRvdWJsZU9wID0gW10g
KGRvdWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBs
ZWZ0IC0gcmlnaHQ7CiAgICAgfTsKLSAgICBhdXRvIGJpZ0ludDMyT3AgPSBbXSAoaW50MzJfdCBs
ZWZ0LCBpbnQzMl90IHJpZ2h0KSAtPiBKU1ZhbHVlIHsKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAg
ICAgIENoZWNrZWRJbnQzMiByZXN1bHQgPSBsZWZ0OwotICAgICAgICByZXN1bHQgLT0gcmlnaHQ7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShyZXN1bHQuaGFzT3ZlcmZsb3dlZCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHJlc3VsdC51
bnNhZmVHZXQoKSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYKKworICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgYXV0byBsZWZ0LCBhdXRvIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBKU0Jp
Z0ludDo6c3ViKGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOwogICAgIH07CiAKLSAgICByZXR1
cm4gYXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBKU0JpZ0ludDo6c3Vi
LCBkb3VibGVPcCwgYmlnSW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIg
dHlwZSBpbiBzdWJ0cmFjdGlvbi4iX3MpOworICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3Ao
Z2xvYmFsT2JqZWN0LCB2MSwgdjIsIGRvdWJsZU9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0lu
dE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBz
dWJ0cmFjdGlvbi4iX3MpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNNdWwoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAgLTYwNSwy
MSArNTgwLDEyIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc011bChKU0dsb2JhbE9iamUKICAg
ICBhdXRvIGRvdWJsZU9wID0gW10gKGRvdWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJs
ZSB7CiAgICAgICAgIHJldHVybiBsZWZ0ICogcmlnaHQ7CiAgICAgfTsKLSAgICBhdXRvIGJpZ0lu
dDMyT3AgPSBbXSAoaW50MzJfdCBsZWZ0LCBpbnQzMl90IHJpZ2h0KSAtPiBKU1ZhbHVlIHsKLSNp
ZiBVU0UoQklHSU5UMzIpCi0gICAgICAgIENoZWNrZWRJbnQzMiByZXN1bHQgPSBsZWZ0OwotICAg
ICAgICByZXN1bHQgKj0gcmlnaHQ7Ci0gICAgICAgIGlmIChyZXN1bHQuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIGpzQmlnSW50
MzIocmVzdWx0LnVuc2FmZUdldCgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSNlbmRpZgorCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsKKyAgICAgICAg
cmV0dXJuIEpTQmlnSW50OjptdWx0aXBseShnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsKICAg
ICB9OwogCi0gICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2
MiwgSlNCaWdJbnQ6Om11bHRpcGx5LCBkb3VibGVPcCwgYmlnSW50MzJPcCwgIkludmFsaWQgbWl4
IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBtdWx0aXBsaWNhdGlvbi4iX3MpOworICAgIHJl
dHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGRvdWJsZU9wLCBi
aWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4IG9mIEJp
Z0ludCBhbmQgb3RoZXIgdHlwZSBpbiBtdWx0aXBsaWNhdGlvbi4iX3MpOwogfQogCiBBTFdBWVNf
SU5MSU5FIEpTVmFsdWUganNEaXYoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSB2MSwgSlNWYWx1ZSB2MikKQEAgLTYyNywxOSArNTkzLDEyIEBAIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBqc0RpdihKU0dsb2JhbE9iamUKICAgICBhdXRvIGRvdWJsZU9wID0gW10gKGRvdWJsZSBs
ZWZ0LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBsZWZ0IC8gcmln
aHQ7CiAgICAgfTsKLSAgICBhdXRvIGJpZ0ludDMyT3AgPSBbXSAoaW50MzJfdCBsZWZ0LCBpbnQz
Ml90IHJpZ2h0KSAtPiBKU1ZhbHVlIHsKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgICAgIGlmICgh
cmlnaHQpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICByZXR1cm4ganNC
aWdJbnQzMihsZWZ0IC8gcmlnaHQpOwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQp
OwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotI2VuZGlmCisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAgICAgICBy
ZXR1cm4gSlNCaWdJbnQ6OmRpdmlkZShnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsKICAgICB9
OwogCi0gICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2Miwg
SlNCaWdJbnQ6OmRpdmlkZSwgZG91YmxlT3AsIGJpZ0ludDMyT3AsICJJbnZhbGlkIG1peCBvZiBC
aWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gZGl2aXNpb24uIl9zKTsKKyAgICByZXR1cm4gYXJpdGht
ZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBkb3VibGVPcCwgYmlnSW50T3AsIGJp
Z0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90
aGVyIHR5cGUgaW4gZGl2aXNpb24uIl9zKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpz
UmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFs
dWUgdjIpCkBAIC02NDcsMTIgKzYwNiwxMiBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNSZW1h
aW5kZXIoSlNHbG9iCiAgICAgYXV0byBkb3VibGVPcCA9IFtdIChkb3VibGUgbGVmdCwgZG91Ymxl
IHJpZ2h0KSAtPiBkb3VibGUgewogICAgICAgICByZXR1cm4ganNNb2QobGVmdCwgcmlnaHQpOwog
ICAgIH07Ci0gICAgYXV0byBiaWdJbnQzMk9wID0gW10gKGludDMyX3QsIGludDMyX3QpIC0+IEpT
VmFsdWUgewotICAgICAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIG1vcmUgY2xldmVyIGhlcmUu
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAg
ICAgICByZXR1cm4gSlNCaWdJbnQ6OnJlbWFpbmRlcihnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0
KTsKICAgICB9OwogCi0gICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3Qs
IHYxLCB2MiwgSlNCaWdJbnQ6OnJlbWFpbmRlciwgZG91YmxlT3AsIGJpZ0ludDMyT3AsICJJbnZh
bGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gcmVtYWluZGVyLiJfcyk7CisgICAg
cmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgZG91YmxlT3As
IGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAiSW52YWxpZCBtaXggb2Yg
QmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHJlbWFpbmRlci4iX3MpOwogfQogCiBBTFdBWVNfSU5M
SU5FIEpTVmFsdWUganNQb3coSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2
MSwgSlNWYWx1ZSB2MikKQEAgLTY2MCwxMyArNjE5LDEyIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBqc1BvdyhKU0dsb2JhbE9iamUKICAgICBhdXRvIGRvdWJsZU9wID0gW10gKGRvdWJsZSBsZWZ0
LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBvcGVyYXRpb25NYXRo
UG93KGxlZnQsIHJpZ2h0KTsKICAgICB9OwotICAgIGF1dG8gYmlnSW50MzJPcCA9IFtdIChpbnQz
Ml90LCBpbnQzMl90KSAtPiBKU1ZhbHVlIHsKLSAgICAgICAgLy8gRXhwb25lbnRpYXRpb24gb24g
aW50ZWdlcnMgaXMgYm90aCBzb21ld2hhdCBzbG93IGluIHRoZSBiZXN0IGNhc2UsIGFuZCB2ZXJ5
IGxpa2VseSB0byBvdmVyZmxvdy4KLSAgICAgICAgLy8gU28gZG9uJ3QgYm90aGVyIHRyeWluZyB0
byBhdm9pZCBhIGhlYXAgYWxsb2NhdGlvbiBpbiB0aGF0IGNhc2UuCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisKKyAgICBhdXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJ
bnQ6OmV4cG9uZW50aWF0ZShnbG9iYWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsKICAgICB9OwogCi0g
ICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgSlNCaWdJ
bnQ6OmV4cG9uZW50aWF0ZSwgZG91YmxlT3AsIGJpZ0ludDMyT3AsICJJbnZhbGlkIG1peCBvZiBC
aWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gZXhwb25lbnRpYXRpb24uIl9zKTsKKyAgICByZXR1cm4g
YXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBkb3VibGVPcCwgYmlnSW50
T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQg
YW5kIG90aGVyIHR5cGUgaW4gZXhwb25lbnRpYXRpb24uIl9zKTsKIH0KIAogQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGpzSW5jKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdikK
QEAgLTY4MSwxMyArNjM5LDggQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzSW5jKEpTR2xvYmFs
T2JqZQogICAgICAgICByZXR1cm4ganNOdW1iZXIob3BlcmFuZE51bWVyaWMuYXNOdW1iZXIoKSAr
IDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIGlmIChvcGVyYW5kTnVtZXJpYy5pc0JpZ0lu
dDMyKCkpIHsKLSAgICAgICAgaW50NjRfdCBuZXdWYWx1ZSA9IHN0YXRpY19jYXN0PGludDY0X3Q+
KG9wZXJhbmROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSArIDE7Ci0gICAgICAgIC8vIEZJWE1F
OiB0aGUgZm9sbG93aW5nIG5leHQgZmV3IGxpbmVzIG1pZ2h0IGJlbmVmaXQgZnJvbSBiZWluZyBt
YWRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24KLSAgICAgICAgaWYgKG5ld1ZhbHVlID4gSU5UX01B
WCkKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbmV3VmFsdWUp
OwotICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihuZXdWYWx1
ZSkpOwotICAgIH0KKyAgICBpZiAob3BlcmFuZE51bWVyaWMuaXNCaWdJbnQzMigpKQorICAgICAg
ICByZXR1cm4gSlNCaWdJbnQ6OmluYyhnbG9iYWxPYmplY3QsIG9wZXJhbmROdW1lcmljLmJpZ0lu
dDMyQXNJbnQzMigpKTsKICNlbmRpZgogCiAgICAgQVNTRVJUKG9wZXJhbmROdW1lcmljLmlzSGVh
cEJpZ0ludCgpKTsKQEAgLTcwNiwxMyArNjU5LDggQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpz
RGVjKEpTR2xvYmFsT2JqZQogICAgICAgICByZXR1cm4ganNOdW1iZXIob3BlcmFuZE51bWVyaWMu
YXNOdW1iZXIoKSAtIDEpOwogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIGlmIChvcGVyYW5kTnVt
ZXJpYy5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgaW50NjRfdCBuZXdWYWx1ZSA9IHN0YXRpY19j
YXN0PGludDY0X3Q+KG9wZXJhbmROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSAtIDE7Ci0gICAg
ICAgIC8vIEZJWE1FOiB0aGUgZm9sbG93aW5nIG5leHQgZmV3IGxpbmVzIG1pZ2h0IGJlbmVmaXQg
ZnJvbSBiZWluZyBtYWRlIGludG8gYSBoZWxwZXIgZnVuY3Rpb24KLSAgICAgICAgaWYgKG5ld1Zh
bHVlIDwgSU5UX01JTikKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2
bSwgbmV3VmFsdWUpOwotICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihuZXdWYWx1ZSkpOwotICAgIH0KKyAgICBpZiAob3BlcmFuZE51bWVyaWMuaXNCaWdJbnQz
MigpKQorICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmRlYyhnbG9iYWxPYmplY3QsIG9wZXJhbmRO
dW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKICNlbmRpZgogCiAgICAgQVNTRVJUKG9wZXJhbmRO
dW1lcmljLmlzSGVhcEJpZ0ludCgpKTsKQEAgLTczMiwxNCArNjgwLDE1IEBAIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBqc0JpdHdpc2VOb3QoSlNHbG8KIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBp
ZiAob3BlcmFuZE51bWVyaWMuaXNCaWdJbnQzMigpKQotICAgICAgICByZXR1cm4ganNCaWdJbnQz
Mih+b3BlcmFuZE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICByZXR1cm4gSlNC
aWdJbnQ6OmJpdHdpc2VOb3QoZ2xvYmFsT2JqZWN0LCBvcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFz
SW50MzIoKSk7CiAjZW5kaWYKIAogICAgIEFTU0VSVChvcGVyYW5kTnVtZXJpYy5pc0hlYXBCaWdJ
bnQoKSk7CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6Yml0d2lzZU5v
dChnbG9iYWxPYmplY3QsIG9wZXJhbmROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CiB9CiAKLUFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBzaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBib29sIGlzTGVmdCkKK3RlbXBsYXRlIDxib29sIGlzTGVm
dD4KK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBzaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03
NTcsNzAgKzcwNiw1MSBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgc2hpZnQoSlNHbG9iYWxPYmpl
CiAgICAgfQogCiAjaWYgVVNFKEJJR0lOVDMyKQotICAgIGlmIChsZWZ0TnVtZXJpYy5pc0JpZ0lu
dDMyKCkgJiYgcmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IGxl
ZnRJbnQzMiA9IGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICBpbnQzMl90
IHJpZ2h0SW50MzIgPSByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCk7Ci0gICAgICAgIGlm
IChyaWdodEludDMyIDwgMCkgewotICAgICAgICAgICAgaXNMZWZ0ID0gIWlzTGVmdDsKLSAgICAg
ICAgICAgIGlmIChyaWdodEludDMyID09IElOVDMyX01JTikKLSAgICAgICAgICAgICAgICByaWdo
dEludDMyID0gSU5UMzJfTUFYOyAvLyBTaGlmdHMgb25lIGxlc3MgdGhhbiByZXF1ZXN0ZWQsIGJ1
dCBtYWtlcyBubyBvYnNlcnZhYmxlIGRpZmZlcmVuY2UuCi0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgcmlnaHRJbnQzMiA9IC1yaWdodEludDMyOworICAgIGlmIChsZWZ0TnVtZXJp
Yy5pc0JpZ0ludDMyKCkpIHsKKyAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkp
IHsKKyAgICAgICAgICAgIGlmIChpc0xlZnQpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BTkRf
UkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51bWVy
aWMuYmlnSW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6c2lnbmVkUmln
aHRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpLCByaWdo
dE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpKTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQo
cmlnaHRJbnQzMiA+PSAwKTsKLQotICAgICAgICAvLyBUaGlzIHN0ZDo6bWluIGlzIGEgYml0IGhh
Y2t5LCBidXQgcmVxdWlyZWQgYmVjYXVzZSBpbiBDKysgaXQgaXMgdW5kZWZpbmVkIGJlaGF2aW9y
IHRvIGRvIGEgc2hpZnQgd2hlcmUgdGhlIHJpZ2h0IG9wZXJhbmQgaXMgZ3JlYXRlciBvciBlcXVh
bCB0byB0aGUgYml0LXdpZHRoIG9mIHRoZSBsZWZ0IG9wZXJhbmQuCi0gICAgICAgIGlmICghaXNM
ZWZ0KQotICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIobGVmdEludDMyID4+IHN0ZDo6bWlu
KHJpZ2h0SW50MzIsIDMxKSk7Ci0KLSAgICAgICAgLy8gRG8gc29tZSBjaGVja3MgdG8gZGV0ZWN0
IG92ZXJmbG93IG9mIGxlZnQtc2hpZnQuIEJ1dCB0aGlzIGlzIG11Y2ggY2hlYXBlciBjb21wYXJl
ZCB0byBhbGxvY2F0aW5nIHR3byBKU0JpZ0ludCBhbmQgcGVyZm9ybSBzaGlmdCBvcGVyYXRpb25z
IGluIEpTQmlnSW50LgotICAgICAgICBpZiAoIWxlZnRJbnQzMikKLSAgICAgICAgICAgIHJldHVy
biBqc0JpZ0ludDMyKDApOwotICAgICAgICBpZiAocmlnaHRJbnQzMiA8IDMyKSB7Ci0gICAgICAg
ICAgICBpbnQ2NF90IHJlc3VsdDY0ID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4obGVmdEludDMyKSA8
PCByaWdodEludDMyOwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRp
Y19jYXN0PGludDMyX3Q+KHJlc3VsdDY0KSkgPT0gcmVzdWx0NjQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGpzQmlnSW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmVzdWx0NjQpKTsKKyAgICAg
ICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkgeworICAgICAgICAgICAgaWYgKGlz
TGVmdCkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50
OjpsZWZ0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwg
cmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVm
dE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkp
OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChsZWZ0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkg
eworICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkgeworICAgICAgICAgICAg
aWYgKGlzTGVmdCkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpT
QmlnSW50OjpsZWZ0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQo
KSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgICAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KGdsb2JhbE9iamVj
dCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50
MzIoKSkpOworICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkg
eworICAgICAgICAgICAgaWYgKGlzTGVmdCkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTQmlnSW50OjpsZWZ0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJp
Yy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0
KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5h
c0hlYXBCaWdJbnQoKSkpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2Yg
YSBsZWZ0IHNoaWZ0IHdlIGNhbiBvdmVyZmxvdy4gSSBkZWFsIHdpdGggdGhpcyBieSBhbGxvY2F0
aW5nIEhlYXBCaWdJbnRzLgotICAgICAgICAvLyBGSVhNRTogaXQgbWlnaHQgYmUgcG9zc2libGUg
dG8gZG8gc29tZXRoaW5nIHNtYXJ0ZXIsIHRyeWluZyB0byBkbyB0aGUgbGVmdCBzaGlmdCBhbmQg
ZGV0ZWN0aW5nIHNvbWVob3cgaWYgaXQgb3ZlcmZsb3dlZC4KLSAgICAgICAgSlNCaWdJbnQqIGxl
ZnRIZWFwQmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIGxlZnRJbnQzMik7Ci0gICAg
ICAgIEpTQmlnSW50KiByaWdodEhlYXBCaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
cmlnaHRJbnQzMik7Ci0gICAgICAgIGlmIChpc0xlZnQpCi0gICAgICAgICAgICBSRUxFQVNFX0FO
RF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpsZWZ0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0SGVh
cEJpZ0ludCwgcmlnaHRIZWFwQmlnSW50KSk7Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0SGVhcEJp
Z0ludCwgcmlnaHRIZWFwQmlnSW50KSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoVU5MSUtF
TFkoIShsZWZ0TnVtZXJpYy5pc0JpZ0ludCgpICYmIHJpZ2h0TnVtZXJpYy5pc0JpZ0ludCgpKSkp
IHsKLSAgICAgICAgYXV0byBlcnJvck1lc3NhZ2UgPSBpc0xlZnQgPyAiSW52YWxpZCBtaXggb2Yg
QmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGxlZnQgc2hpZnQgb3BlcmF0aW9uLiIgOiAiSW52YWxp
ZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHNpZ25lZCByaWdodCBzaGlmdCBvcGVy
YXRpb24uIjsKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsIGVycm9yTWVzc2FnZSk7CiAgICAgfQotCi0gICAgLy8gRklYTUU6IHdlIHNob3VsZCBoYXZl
IGEgY2FzZSBmb3IgbGVmdCBpcyBIZWFwQmlnSW50IGFuZCByaWdodCBpcyBCaWdJbnQzMiwgaXQg
c2VlbXMgZmFpcmx5IGxpa2VseSB0byBvY2N1ciBmcmVxdWVudGx5LgotI2lmIFVTRShCSUdJTlQz
MikKLSAgICBKU0JpZ0ludCogbGVmdEhlYXBCaWdJbnQgPSBsZWZ0TnVtZXJpYy5pc0JpZ0ludDMy
KCkgPyBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMy
KCkpIDogbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCk7Ci0gICAgSlNCaWdJbnQqIHJpZ2h0SGVh
cEJpZ0ludCA9IHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkgPyBKU0JpZ0ludDo6Y3JlYXRlRnJv
bSh2bSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSA6IHJpZ2h0TnVtZXJpYy5hc0hl
YXBCaWdJbnQoKTsKICNlbHNlCi0gICAgSlNCaWdJbnQqIGxlZnRIZWFwQmlnSW50ID0gbGVmdE51
bWVyaWMuYXNIZWFwQmlnSW50KCk7Ci0gICAgSlNCaWdJbnQqIHJpZ2h0SGVhcEJpZ0ludCA9IHJp
Z2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKTsKKyAgICBVTlVTRURfUEFSQU0oYmlnSW50MzJPcCk7
CisgICAgaWYgKGxlZnROdW1lcmljLmlzSGVhcEJpZ0ludCgpICYmIHJpZ2h0TnVtZXJpYy5pc0hl
YXBCaWdJbnQoKSkgeworICAgICAgICBpZiAoaXNMZWZ0KQorICAgICAgICAgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51
bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOworICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0
KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5h
c0hlYXBCaWdJbnQoKSkpOworICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGlzTGVmdCkKLSAgICAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6bGVmdFNoaWZ0KGdsb2JhbE9i
amVjdCwgbGVmdEhlYXBCaWdJbnQsIHJpZ2h0SGVhcEJpZ0ludCkpOwotICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBs
ZWZ0SGVhcEJpZ0ludCwgcmlnaHRIZWFwQmlnSW50KSk7CisgICAgYXV0byBlcnJvck1lc3NhZ2Ug
PSBpc0xlZnQgPyAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGxlZnQg
c2hpZnQgb3BlcmF0aW9uLiIgOiAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBl
IGluIHNpZ25lZCByaWdodCBzaGlmdCBvcGVyYXRpb24uIjsKKyAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAogQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGpzTFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdjEsIEpTVmFsdWUgdjIpCiB7Ci0gICAgYm9vbCBpc0xlZnQgPSB0cnVlOwotICAgIHJldHVy
biBzaGlmdChnbG9iYWxPYmplY3QsIHYxLCB2MiwgaXNMZWZ0KTsKKyAgICBjb25zdGV4cHIgYm9v
bCBpc0xlZnQgPSB0cnVlOworICAgIHJldHVybiBzaGlmdDxpc0xlZnQ+KGdsb2JhbE9iamVjdCwg
djEsIHYyKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzUlNoaWZ0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7Ci0gICAgYm9vbCBp
c0xlZnQgPSBmYWxzZTsKLSAgICByZXR1cm4gc2hpZnQoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGlz
TGVmdCk7CisgICAgY29uc3RleHByIGJvb2wgaXNMZWZ0ID0gZmFsc2U7CisgICAgcmV0dXJuIHNo
aWZ0PGlzTGVmdD4oZ2xvYmFsT2JqZWN0LCB2MSwgdjIpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUganNVUlNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbGVm
dCwgSlNWYWx1ZSByaWdodCkKQEAgLTgyOCwyMSArNzU4LDI0IEBAIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBqc1VSU2hpZnQoSlNHbG9iYWwKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgT3B0aW9u
YWw8dWludDMyX3Q+IGxlZnRVaW50MzIgPSBsZWZ0LnRvVUludDMyQWZ0ZXJUb051bWVyaWMoZ2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIGxlZnROdW1lcmljID0gbGVmdC50b0JpZ0ludE9ySW50MzIo
Z2xvYmFsT2JqZWN0KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAg
IE9wdGlvbmFsPHVpbnQzMl90PiByaWdodFVpbnQzMiA9IHJpZ2h0LnRvVUludDMyQWZ0ZXJUb051
bWVyaWMoZ2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIHJpZ2h0TnVtZXJpYyA9IHJpZ2h0LnRvQmln
SW50T3JJbnQzMihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CiAKLSAgICBpZiAoVU5MSUtFTFkoIWxlZnRVaW50MzIgfHwgIXJpZ2h0VWludDMyKSkg
eworICAgIGlmIChVTkxJS0VMWSghbGVmdE51bWVyaWMuaXNJbnQzMigpIHx8ICFyaWdodE51bWVy
aWMuaXNJbnQzMigpKSkgewogICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlLCAiQmlnSW50IGRvZXMgbm90IHN1cHBvcnQgPj4+IG9wZXJhdG9yIl9zKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4obGVmdFVpbnQzMi52YWx1ZSgpID4+IChyaWdodFVpbnQzMi52YWx1ZSgpICYgMzEpKSk7
CisgICAgdWludDMyX3QgbGVmdFVpbnQzMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihsZWZ0TnVt
ZXJpYy5hc0ludDMyKCkpOworICAgIHVpbnQzMl90IHJpZ2h0VWludDMyID0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHJpZ2h0TnVtZXJpYy5hc0ludDMyKCkpOworCisgICAgcmV0dXJuIGpzTnVtYmVy
KHN0YXRpY19jYXN0PGludDMyX3Q+KGxlZnRVaW50MzIgPj4gKHJpZ2h0VWludDMyICYgMzEpKSk7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEhlYXBCaWdJbnRPcGVyYXRpb24sIHR5cGVuYW1lIElu
dDMyT3BlcmF0aW9uPgotQUxXQVlTX0lOTElORSBKU1ZhbHVlIGJpdHdpc2VCaW5hcnlPcChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBIZWFwQmln
SW50T3BlcmF0aW9uJiYgYmlnSW50T3AsIEludDMyT3BlcmF0aW9uJiYgaW50MzJPcCwgY29uc3Qg
Y2hhciogZXJyb3JNZXNzYWdlKQordGVtcGxhdGU8dHlwZW5hbWUgSW50MzJPcGVyYXRpb24+CitB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgYml0d2lzZUJpbmFyeU9wKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIsIEludDMyT3BlcmF0aW9uJiYgaW50MzJP
cCwgSlNWYWx1ZSAoKmJpZ0ludDMyKShKU0dsb2JhbE9iamVjdCosIGludDMyX3QsIGludDMyX3Qp
LCBKU1ZhbHVlICgqbWl4ZWRCaWdJbnQxKShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiwgaW50
MzJfdCksIEpTVmFsdWUgKCptaXhlZEJpZ0ludDIpKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCwg
SlNCaWdJbnQqKSwgSlNWYWx1ZSAoKmhlYXBCaWdJbnQpKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJ
bnQqLCBKU0JpZ0ludCopLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTg1NiwyNSArNzg5LDI0IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBiaXR3
aXNlQmluYXJ5T3AoSlMKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGludDMyT3AobGVmdE51bWVy
aWMuYXNJbnQzMigpLCByaWdodE51bWVyaWMuYXNJbnQzMigpKSk7CiAKICNpZiBVU0UoQklHSU5U
MzIpCi0gICAgaWYgKGxlZnROdW1lcmljLmlzQmlnSW50MzIoKSAmJiByaWdodE51bWVyaWMuaXNC
aWdJbnQzMigpKQotICAgICAgICByZXR1cm4ganNCaWdJbnQzMihpbnQzMk9wKGxlZnROdW1lcmlj
LmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpKTsKLSAg
ICAvLyBGSVhNRTogYWRkIGZhc3QgcGF0aCBmb3IgQmlnSW50MzIgLyBIZWFwQmlnSW50LCBhbmQg
Zm9yIEhlYXBCaWdJbnQgLyBCaWdJbnQzMgotICAgIC8vIEluIG1hbnkgY2FzZXMgdGhlc2UgY291
bGQgYmUgbWFkZSBtb3JlIGVmZmljaWVudCB0aGFuIGhlYXAtYWxsb2NhdGluZyB0aGUgc21hbGwg
YmlnLWludCBhbmQgZ29pbmcgdGhyb3VnaCB0aGUgZ2VuZXJpYyBwYXRoLgotICAgIC8vIEJ1dCBp
dCBpcyBxdWl0ZSB0cmlja3ksIG5vdCBsZWFzdCBiZWNhdXNlIEhlYXBCaWdJbnQgdXNlIGEgc2ln
biBiaXQgd2hlcmVhcyBCaWdJbnQzMiB1c2UgMi1jb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLgot
I2VuZGlmCi0KLSAgICBpZiAoIShsZWZ0TnVtZXJpYy5pc0JpZ0ludCgpICYmIHJpZ2h0TnVtZXJp
Yy5pc0JpZ0ludCgpKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Ci0KLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgSlNCaWdJ
bnQqIGxlZnRIZWFwQmlnSW50ID0gbGVmdE51bWVyaWMuaXNCaWdJbnQzMigpID8gSlNCaWdJbnQ6
OmNyZWF0ZUZyb20odm0sIGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSA6IGxlZnROdW1l
cmljLmFzSGVhcEJpZ0ludCgpOwotICAgIEpTQmlnSW50KiByaWdodEhlYXBCaWdJbnQgPSByaWdo
dE51bWVyaWMuaXNCaWdJbnQzMigpID8gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHJpZ2h0TnVt
ZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkgOiByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCk7Cisg
ICAgaWYgKGxlZnROdW1lcmljLmlzQmlnSW50MzIoKSkgeworICAgICAgICBpZiAocmlnaHROdW1l
cmljLmlzQmlnSW50MzIoKSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
YmlnSW50MzIoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwgcmln
aHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgIGlmIChyaWdodE51bWVyaWMu
aXNIZWFwQmlnSW50KCkpCisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG1p
eGVkQmlnSW50MihnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpLCBy
aWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsKKyAgICB9IGVsc2UgaWYgKGxlZnROdW1lcmlj
LmlzSGVhcEJpZ0ludCgpKSB7CisgICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJbnQzMigp
KQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBtaXhlZEJpZ0ludDEoZ2xv
YmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmJpZ0lu
dDMyQXNJbnQzMigpKSk7CisgICAgICAgIGVsc2UgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJ
bnQoKSkKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludChn
bG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNI
ZWFwQmlnSW50KCkpKTsKKyAgICB9CiAjZWxzZQotICAgIEpTQmlnSW50KiBsZWZ0SGVhcEJpZ0lu
dCA9IGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpOwotICAgIEpTQmlnSW50KiByaWdodEhlYXBC
aWdJbnQgPSByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCk7CisgICAgVU5VU0VEX1BBUkFNKGJp
Z0ludDMyT3ApOworICAgIGlmIChsZWZ0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSAmJiByaWdodE51
bWVyaWMuaXNIZWFwQmlnSW50KCkpCisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
aGVhcEJpZ0ludChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdo
dE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsKICNlbmRpZgogCi0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBiaWdJbnRPcChnbG9iYWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodEhl
YXBCaWdJbnQpKTsKKyAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29w
ZSwgZXJyb3JNZXNzYWdlKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQml0d2lzZUFu
ZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQpA
QCAtODgzLDkgKzgxNSwxMyBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaXR3aXNlQW5kKEpT
R2xvCiAgICAgICAgIHJldHVybiBsZWZ0ICYgcmlnaHQ7CiAgICAgfTsKIAorICAgIGF1dG8gYmln
SW50T3AgPSBbXSAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYXV0byBsZWZ0LCBhdXRv
IHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZUFuZChnbG9iYWxPYmpl
Y3QsIGxlZnQsIHJpZ2h0KTsKKyAgICB9OworCiAgICAgLy8gRklYTUU6IGN1cnJlbnRseSwgZm9y
IHBhaXJzIG9mIEJpZ0ludDMyLCB3ZSB1bmJveCB0aGVtLCBkbyB0aGUgImFuZCIgYW5kIHJlLWJv
eCB0aGVtLgogICAgIC8vIFdlIGNvdWxkIGRvIGl0IGRpcmVjdGx5IG9uIHRoZSBKU1ZhbHVlLgot
ICAgIHJldHVybiBiaXR3aXNlQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIEpTQmlnSW50
OjpiaXR3aXNlQW5kLCBpbnQzMk9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0
eXBlIGluIGJpdHdpc2UgJ2FuZCcgb3BlcmF0aW9uLiJfcyk7CisgICAgcmV0dXJuIGJpdHdpc2VC
aW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgaW50MzJPcCwgYmlnSW50T3AsIGJpZ0ludE9w
LCBiaWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5
cGUgaW4gYml0d2lzZSAnYW5kJyBvcGVyYXRpb24uIl9zKTsKIH0KIAogQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGpzQml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
djEsIEpTVmFsdWUgdjIpCkBAIC04OTYsNyArODMyLDEyIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBqc0JpdHdpc2VPcihKU0dsb2IKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50bHksIGZvciBwYWly
cyBvZiBCaWdJbnQzMiwgd2UgdW5ib3ggdGhlbSwgZG8gdGhlICJvciIgYW5kIHJlLWJveCB0aGVt
LgogICAgIC8vIFdlIGNvdWxkIGRvIGl0IGRpcmVjdGx5IG9uIHRoZSBKU1ZhbHVlLgotICAgIHJl
dHVybiBiaXR3aXNlQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIEpTQmlnSW50OjpiaXR3
aXNlT3IsIGludDMyT3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4g
Yml0d2lzZSAnb3InIG9wZXJhdGlvbi4iX3MpOworCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsKKyAg
ICAgICAgcmV0dXJuIEpTQmlnSW50OjpiaXR3aXNlT3IoZ2xvYmFsT2JqZWN0LCBsZWZ0LCByaWdo
dCk7CisgICAgfTsKKworICAgIHJldHVybiBiaXR3aXNlQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2
MSwgdjIsIGludDMyT3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAi
SW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGJpdHdpc2UgJ29yJyBvcGVy
YXRpb24uIl9zKTsKIH0KIAogQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQml0d2lzZVhvcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQpAQCAtOTA3
LDcgKzg0OCwxMSBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaXR3aXNlWG9yKEpTR2xvCiAK
ICAgICAvLyBGSVhNRTogY3VycmVudGx5LCBmb3IgcGFpcnMgb2YgQmlnSW50MzIsIHdlIHVuYm94
IHRoZW0sIGRvIHRoZSAieG9yIiBhbmQgcmUtYm94IHRoZW0uCiAgICAgLy8gV2UgY291bGQgZG8g
aXQgZGlyZWN0bHkgb24gdGhlIEpTVmFsdWUsIGFuZCBqdXN0IHJlbWVtYmVyIHRvIGRvIGFuIG9y
IHdpdGggMHgxMiBhdCB0aGUgZW5kIHRvIHJlc3RvcmUgdGhlIHRhZwotICAgIHJldHVybiBiaXR3
aXNlQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIEpTQmlnSW50OjpiaXR3aXNlWG9yLCBp
bnQzMk9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGJpdHdpc2Ug
J3hvcicgb3BlcmF0aW9uLiJfcyk7CisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsKKyAgICAgICAgcmV0
dXJuIEpTQmlnSW50OjpiaXR3aXNlWG9yKGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOworICAg
IH07CisKKyAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBp
bnQzMk9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQg
bWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICd4b3InIG9wZXJhdGlvbi4i
X3MpOwogfQogCiBBTFdBWVNfSU5MSU5FIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsV2l0aEluZGV4
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5k
ZXgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397786</attachid>
            <date>2020-04-27 19:14:57 -0700</date>
            <delta_ts>2020-04-27 19:53:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>116589</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYwODA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NyBA
QAorMjAyMC0wNC0yNyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBbSlNDXSA+Pj4gc2hvdWxkIGNhbGwgVG9OdW1lcmljCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTEwNjUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzYyNDc4OTc3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGluIHRoZSBydW50aW1lIGZvciBkb2luZyBhbG9t
c3QgYWxsIEJpZ0ludCBtYXRoCisgICAgICAgIG9wZXJhdGlvbnMgb24gdGhlIGlucHV0cyBlaXRo
ZXIgYmVpbmcgSW50MzIsIEhlYXBCaWdJbnQsIG9yIGEgbWl4aW5nCisgICAgICAgIG9mIGJvdGgu
IEJlZm9yZSwgaWYgd2UgZGV0ZWN0ZWQgYSBiaW5hcnkgb3BlcmF0aW9uIG9uIGFuIEludDMyIGFu
ZCBhCisgICAgICAgIEhlYXBCaWdJbnQsIHRoaXMgd291bGQgbGVhZCB1cyB0byBjb252ZXJ0IHRo
ZSBJbnQzMiBvcGVyYW5kIGludG8gYSBIZWFwQmlnSW50LgorICAgICAgICAKKyAgICAgICAgVGhp
cyBpcyBlc3BlY2lhbGx5IGJhZCBiZWNhdXNlIHdlJ2QgcmVwZWF0IHRoaXMgZm9yIGFsbCBtYXRo
IG9wcy4gRm9yIGV4YW1wbGUsCisgICAgICAgIGlmIHggaXMgYSBCaWdJbnQzMiwgYW5kIGFsbCBy
aHMgYXJlIGEgSGVhcEJpZ0ludCwgd2UnZCByZXBlYXRlZGx5IGNvbnZlcnQgeAorICAgICAgICB0
byBhIEhlYXBCaWdJbnQgZm9yIGVhY2ggb3BlcmF0aW9uOgorICAgICAgICBgYGAKKyAgICAgICAg
eCArIHkKKyAgICAgICAgeCAqIHkKKyAgICAgICAgeCAtIHkKKyAgICAgICAgeCA+PiB5CisgICAg
ICAgIHggPDwgeQorICAgICAgICBldGMKKyAgICAgICAgYGBgCisgICAgICAgIAorICAgICAgICBU
byB0ZWFjaCB0aGUgcnVudGltZSBob3cgdG8gb3BlcmF0ZSBib3RoIG92ZXIgYSBCaWdJbnQzMiBh
bmQgYSBIZWFwQmlnSW50LCBJCisgICAgICAgIHRlbXBsYXRpemVkIHRoZSBydW50aW1lIG1hdGgg
b3BlcmF0aW9ucyB0byB3b3JrIGJvdGggb3ZlciBCaWdJbnQzMiBhbmQKKyAgICAgICAgSGVhcEJp
Z0ludCB3cmFwcGVyIGNsYXNzZXMgdGhhdCBleHBvc2UgdGhlIHNhbWUgaW50ZXJmYWNlLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyBpcyBhIH4yOCUgc3BlZWR1cCBvbiBtaWNyb2JlbmNobWFya3Mv
c3Vuc3BpZGVyLXNoYTEtYmlnLWludC5qcworCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpT
Qzo6U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuY3BwOgorICAg
ICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6SGVhcEJpZ0ludEltcGwpOgorICAgICAgICAoSlND
OjpIZWFwQmlnSW50SW1wbDo6aXNaZXJvKToKKyAgICAgICAgKEpTQzo6SGVhcEJpZ0ludEltcGw6
OnNpZ24pOgorICAgICAgICAoSlNDOjpIZWFwQmlnSW50SW1wbDo6bGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SGVhcEJpZ0ludEltcGw6OmRpZ2l0KToKKyAgICAgICAgKEpTQzo6SGVhcEJpZ0ludElt
cGw6OnRvSGVhcEJpZ0ludCk6CisgICAgICAgIChKU0M6OkludDMyQmlnSW50SW1wbDo6SW50MzJC
aWdJbnRJbXBsKToKKyAgICAgICAgKEpTQzo6SW50MzJCaWdJbnRJbXBsOjppc1plcm8pOgorICAg
ICAgICAoSlNDOjpJbnQzMkJpZ0ludEltcGw6OnNpZ24pOgorICAgICAgICAoSlNDOjpJbnQzMkJp
Z0ludEltcGw6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkludDMyQmlnSW50SW1wbDo6ZGlnaXQp
OgorICAgICAgICAoSlNDOjpJbnQzMkJpZ0ludEltcGw6OnRvSGVhcEJpZ0ludCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpJbXBsUmVzdWx0OjpJbXBsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
dHJ5Q29udmVydFRvQmlnSW50MzIpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6aW5wbGFjZU11
bHRpcGx5QWRkKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUltcGwpOgor
ICAgICAgICAoSlNDOjpKU0JpZ0ludDo6ZXhwb25lbnRpYXRlKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6Om11bHRpcGx5SW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjptdWx0aXBseSk6
CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpkaXZpZGVJbXBsKToKKyAgICAgICAgKEpTQzo6SlNC
aWdJbnQ6OmRpdmlkZSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojpjb3B5KToKKyAgICAgICAg
KEpTQzo6SlNCaWdJbnQ6OnVuYXJ5TWludXNJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OnVuYXJ5TWludXMpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmVtYWluZGVySW1wbCk6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpyZW1haW5kZXIpOgorICAgICAgICAoSlNDOjpKU0JpZ0lu
dDo6aW5jSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjppbmMpOgorICAgICAgICAoSlND
OjpKU0JpZ0ludDo6ZGVjSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpkZWMpOgorICAg
ICAgICAoSlNDOjpKU0JpZ0ludDo6YWRkSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojph
ZGQpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c3ViSW1wbCk6CisgICAgICAgIChKU0M6OkpT
QmlnSW50OjpzdWIpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZUFuZEltcGwpOgor
ICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0d2lzZUFuZCk6CisgICAgICAgIChKU0M6OkpTQmln
SW50OjpiaXR3aXNlT3JJbXBsKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmJpdHdpc2VPcik6
CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlWG9ySW1wbCk6CisgICAgICAgIChKU0M6
OkpTQmlnSW50OjpiaXR3aXNlWG9yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmxlZnRTaGlm
dEltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6bGVmdFNoaWZ0KToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmxlZnRTaGlmdFNsb3cpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2ln
bmVkUmlnaHRTaGlmdEltcGwpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2lnbmVkUmlnaHRT
aGlmdCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlTm90SW1wbCk6CisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpiaXR3aXNlTm90KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Omlu
dGVybmFsTXVsdGlwbHlBZGQpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6bXVsdGlwbHlBY2N1
bXVsYXRlKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQ29tcGFyZSk6CisgICAg
ICAgIChKU0M6OkpTQmlnSW50Ojpjb21wYXJlSW1wbCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50
Ojpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQWRkKToKKyAgICAg
ICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlU3ViKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6
OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcik6CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojph
YnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFi
c29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weSk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNv
bHV0ZUJpdHdpc2VPcCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZUFuZCk6Cisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjphYnNvbHV0ZU9yKToKKyAgICAgICAgKEpTQzo6SlNCaWdJ
bnQ6OmFic29sdXRlQW5kTm90KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlWG9y
KToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKToKKyAgICAgICAgKEpT
Qzo6SlNCaWdJbnQ6OmFic29sdXRlU3ViT25lKToKKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Omxl
ZnRTaGlmdEJ5QWJzb2x1dGUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5
QWJzb2x1dGUpOgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5TWF4aW11bSk6
CisgICAgICAgIChKU0M6OkpTQmlnSW50Ojp0b1N0cmluZ0dlbmVyaWMpOgorICAgICAgICAoSlND
OjpKU0JpZ0ludDo6dG9TaGlmdEFtb3VudCk6CisgICAgICAgIChKU0M6OkpTQmlnSW50OjpleHBv
bmVudGlhdGVIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6Om11bHRpcGx5
SGVhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmlnSW50OjpkaXZpZGVIZWFwKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnVuYXJ5TWludXNIZWFwKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OnJlbWFpbmRlckhlYXApOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU0JpZ0ludDo6aW5jSGVhcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQmln
SW50OjpkZWNIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJbnQ6OmFkZEhlYXAp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c3ViSGVhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTQmlnSW50OjpiaXR3aXNlQW5kSGVhcCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTQmlnSW50OjpiaXR3aXNlT3JIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNCaWdJbnQ6OmJpdHdpc2VYb3JIZWFwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNCaWdJ
bnQ6OmxlZnRTaGlmdEhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6c2ln
bmVkUmlnaHRTaGlmdEhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Yml0
d2lzZU5vdEhlYXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0JpZ0ludDo6Y29tcGFyZVRv
SW50MzIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNCaWdJbnQuaDoKKyAgICAgICAg
KiBydW50aW1lL09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpqc0FkZFNsb3dDYXNlKToK
KyAgICAgICAgKiBydW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Y29tcGFyZUJp
Z0ludCk6CisgICAgICAgIChKU0M6OmNvbXBhcmVCaWdJbnQzMlRvT3RoZXJQcmltaXRpdmUpOgor
ICAgICAgICAoSlNDOjphcml0aG1ldGljQmluYXJ5T3ApOgorICAgICAgICAoSlNDOjpqc1N1Yik6
CisgICAgICAgIChKU0M6OmpzTXVsKToKKyAgICAgICAgKEpTQzo6anNEaXYpOgorICAgICAgICAo
SlNDOjpqc1JlbWFpbmRlcik6CisgICAgICAgIChKU0M6OmpzUG93KToKKyAgICAgICAgKEpTQzo6
anNJbmMpOgorICAgICAgICAoSlNDOjpqc0RlYyk6CisgICAgICAgIChKU0M6OmpzQml0d2lzZU5v
dCk6CisgICAgICAgIChKU0M6OnNoaWZ0KToKKyAgICAgICAgKEpTQzo6anNMU2hpZnQpOgorICAg
ICAgICAoSlNDOjpqc1JTaGlmdCk6CisgICAgICAgIChKU0M6OmpzVVJTaGlmdCk6CisgICAgICAg
IChKU0M6OmJpdHdpc2VCaW5hcnlPcCk6CisgICAgICAgIChKU0M6OmpzQml0d2lzZUFuZCk6Cisg
ICAgICAgIChKU0M6OmpzQml0d2lzZU9yKToKKyAgICAgICAgKEpTQzo6anNCaXR3aXNlWG9yKToK
KwogMjAyMC0wNC0yNyAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtKU0NdID4+PiBzaG91bGQgY2FsbCBUb051bWVyaWMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYwODA2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjg3MSwxMiArMjg3MSw4IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQXIKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
IAogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkgewot
ICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpOwotICAg
ICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCaWdJbnQzMigtdmFsdWUpKTsKLSAgICAgICAgcHJpbVZhbHVlID0gSlNCaWdJbnQ6
OmNyZWF0ZUZyb20odm0sIHZhbHVlKTsKLSAgICB9CisgICAgaWYgKHByaW1WYWx1ZS5pc0JpZ0lu
dDMyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNCaWdJbnQ6OnVuYXJ5TWlu
dXModm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSkpOwogI2VuZGlmCiAgICAgaWYgKHBy
aW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmFzSGVhcEJpZ0ludCgpKSk7CkBAIC0y
OTA0LDEzICsyOTAwLDkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25B
cgogCiAjaWYgVVNFKEJJR0lOVDMyKQogICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKSB7
Ci0gICAgICAgIGludDMyX3QgdmFsdWUgPSBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCk7Ci0g
ICAgICAgIGlmICh2YWx1ZSAhPSBJTlRfTUlOKSB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IGpzQmlnSW50MzIoLXZhbHVlKTsKLSAgICAgICAgICAgIGFyaXRoUHJvZmlsZS0+b2JzZXJ2ZVJl
c3VsdChyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwotICAgICAgICB9Ci0gICAgICAgIHByaW1WYWx1ZSA9IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZt
LCB2YWx1ZSk7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNCaWdJbnQ6OnVuYXJ5TWludXMo
dm0sIHByaW1WYWx1ZS5iaWdJbnQzMkFzSW50MzIoKSk7CisgICAgICAgIGFyaXRoUHJvZmlsZS0+
b2JzZXJ2ZVJlc3VsdChyZXN1bHQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKHByaW1WYWx1ZS5pc0hlYXBCaWdJbnQoKSkg
ewpAQCAtMjk1MCwxMyArMjk0Miw5IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uQXIKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50
MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQz
MigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikgewotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7Ci0gICAgICAgICAgICBhcml0aFByb2ZpbGUtPm9i
c2VydmVSZXN1bHQocmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICBwcmltVmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRl
RnJvbSh2bSwgdmFsdWUpOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTQmlnSW50Ojp1bmFy
eU1pbnVzKHZtLCBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCkpOworICAgICAgICBhcml0aFBy
b2ZpbGUtPm9ic2VydmVSZXN1bHQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogICAgIH0KICNlbmRpZgogICAgIGlmIChwcmltVmFsdWUuaXNIZWFwQmln
SW50KCkpIHsKQEAgLTI5OTUsMTIgKzI5ODMsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkFyCiAKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgLy8gRklYTUU6IHdoeSBk
b2VzIHRoaXMgZnVuY3Rpb24gcHJvZmlsZSB0aGUgYXJndW1lbnQgYnV0IG5vdCB0aGUgcmVzdWx0
PwotICAgIGlmIChwcmltVmFsdWUuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgIGludDMyX3QgdmFs
dWUgPSBwcmltVmFsdWUuYmlnSW50MzJBc0ludDMyKCk7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBJ
TlRfTUlOKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0JpZ0ludDMyKC12
YWx1ZSkpOwotICAgICAgICBwcmltVmFsdWUgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgdmFs
dWUpOwotICAgIH0KKyAgICBpZiAocHJpbVZhbHVlLmlzQmlnSW50MzIoKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0JpZ0ludDo6dW5hcnlNaW51cyh2bSwgcHJpbVZhbHVlLmJp
Z0ludDMyQXNJbnQzMigpKSk7CiAjZW5kaWYKICAgICBpZiAocHJpbVZhbHVlLmlzSGVhcEJpZ0lu
dCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTQmlnSW50Ojp1bmFyeU1pbnVz
KHZtLCBwcmltVmFsdWUuYXNIZWFwQmlnSW50KCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjYwODA2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQ5LDE0ICs1NDksMTAgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25lZ2F0ZSkKIAogI2lmIFVTRShCSUdJTlQzMikKICAgICBpZiAocHJpbVZhbHVlLmlzQmln
SW50MzIoKSkgewotICAgICAgICBpbnQzMl90IHZhbHVlID0gcHJpbVZhbHVlLmJpZ0ludDMyQXNJ
bnQzMigpOwotICAgICAgICBpZiAodmFsdWUgIT0gSU5UX01JTikgewotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBqc0JpZ0ludDMyKC12YWx1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5fV0lUSF9Q
Uk9GSUxJTkcocmVzdWx0LCB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxlRm9y
VW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJpbVZhbHVlID0gSlNCaWdJbnQ6OmNyZWF0
ZUZyb20odm0sIHZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU0JpZ0ludDo6dW5h
cnlNaW51cyh2bSwgcHJpbVZhbHVlLmJpZ0ludDMyQXNJbnQzMigpKTsKKyAgICAgICAgUkVUVVJO
X1dJVEhfUFJPRklMSU5HKHJlc3VsdCwgeworICAgICAgICAgICAgdXBkYXRlQXJpdGhQcm9maWxl
Rm9yVW5hcnlBcml0aE9wKG1ldGFkYXRhLCByZXN1bHQsIG9wZXJhbmQpOworICAgICAgICB9KTsK
ICAgICB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNC
aWdJbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QmlnSW50LmNwcAkocmV2aXNpb24gMjYwODA2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNCaWdJbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsMzUgKzIzMSwxMjggQEAg
U3RyaW5nIEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcoVk0mIHZtLCBKUwogICAgIHJldHVybiB0b1N0
cmluZ0dlbmVyaWModm0sIG51bGxwdHIsIGJpZ0ludCwgcmFkaXgpOwogfQogCitjbGFzcyBIZWFw
QmlnSW50SW1wbCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSGVhcEJpZ0ludEltcGwoSlNCaWdJ
bnQqIGJpZ0ludCkKKyAgICAgICAgOiBtX2JpZ0ludChiaWdJbnQpCisgICAgeyB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNaZXJvKCkgeyByZXR1cm4gbV9iaWdJbnQtPmlzWmVybygpOyB9
CisgICAgQUxXQVlTX0lOTElORSBib29sIHNpZ24oKSB7IHJldHVybiBtX2JpZ0ludC0+c2lnbigp
OyB9CisgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2JpZ0lu
dC0+bGVuZ3RoKCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50OjpEaWdpdCBkaWdpdCh1
bnNpZ25lZCBpKSB7IHJldHVybiBtX2JpZ0ludC0+ZGlnaXQoaSk7IH0KKyAgICBBTFdBWVNfSU5M
SU5FIEpTQmlnSW50KiB0b0hlYXBCaWdJbnQoVk0mKSB7IHJldHVybiBtX2JpZ0ludDsgfQorCitw
cml2YXRlOgorICAgIGZyaWVuZCBzdHJ1Y3QgSlNCaWdJbnQ6OkltcGxSZXN1bHQ7CisgICAgSlNC
aWdJbnQqIG1fYmlnSW50OworfTsKKworY2xhc3MgSW50MzJCaWdJbnRJbXBsIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBJbnQzMkJpZ0ludEltcGwoaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgIHsgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGlzWmVybygp
IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIHNpZ24oKSB7IHJl
dHVybiBtX3ZhbHVlIDwgMDsgfQorICAgIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgbGVuZ3RoKCkg
eyByZXR1cm4gaXNaZXJvKCkgPyAwIDogMTsgfQorICAgIEFMV0FZU19JTkxJTkUgSlNCaWdJbnQ6
OkRpZ2l0IGRpZ2l0KHVuc2lnbmVkIGkpCisgICAgeworICAgICAgICBBU1NFUlQobGVuZ3RoKCkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKGksIGkgPT0gMCk7CisgICAgICAgIGlmIChzaWduKCkp
CisgICAgICAgICAgICByZXR1cm4gLXN0YXRpY19jYXN0PGludDY0X3Q+KG1fdmFsdWUpOworICAg
ICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTQmlnSW50
KiB0b0hlYXBCaWdJbnQoVk0mIHZtKSB7IHJldHVybiBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
bV92YWx1ZSk7IH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgc3RydWN0IEpTQmlnSW50OjpJbXBs
UmVzdWx0OworICAgIGludDMyX3QgbV92YWx1ZTsKK307CisKK0FMV0FZU19JTkxJTkUgSlNCaWdJ
bnQ6OkltcGxSZXN1bHQ6OkltcGxSZXN1bHQoSGVhcEJpZ0ludEltcGwmIGhlYXBJbXBsKQorICAg
IDogcGF5bG9hZChoZWFwSW1wbC5tX2JpZ0ludCkKK3sgfQorCitBTFdBWVNfSU5MSU5FIEpTQmln
SW50OjpJbXBsUmVzdWx0OjpJbXBsUmVzdWx0KEpTQmlnSW50KiBoZWFwQmlnSW50KQorICAgIDog
cGF5bG9hZChoZWFwQmlnSW50KQoreyB9CisKK0FMV0FZU19JTkxJTkUgSlNCaWdJbnQ6OkltcGxS
ZXN1bHQ6OkltcGxSZXN1bHQoSW50MzJCaWdJbnRJbXBsJiBpbnQzMkltcGwpCisgICAgOiBwYXls
b2FkKGpzQmlnSW50MzIoaW50MzJJbXBsLm1fdmFsdWUpKQoreyB9CisKK0FMV0FZU19JTkxJTkUg
SlNCaWdJbnQ6OkltcGxSZXN1bHQ6OkltcGxSZXN1bHQoSlNWYWx1ZSB2YWx1ZSkKKyAgICA6IHBh
eWxvYWQodmFsdWUpCit7IH0KKworc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSB0cnlDb252
ZXJ0VG9CaWdJbnQzMihKU0JpZ0ludCogYmlnSW50KQoreworI2lmIFVTRShCSUdJTlQzMikKKyAg
ICBpZiAoVU5MSUtFTFkoIWJpZ0ludCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisKKyAg
ICBpZiAoYmlnSW50LT5sZW5ndGgoKSA8PSAxKSB7CisgICAgICAgIGlmICghYmlnSW50LT5sZW5n
dGgoKSkKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOworICAgICAgICBKU0JpZ0lu
dDo6RGlnaXQgZGlnaXQgPSBiaWdJbnQtPmRpZ2l0KDApOworICAgICAgICBpZiAoYmlnSW50LT5z
aWduKCkpIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDY0X3QgbWF4VmFsdWUg
PSAtc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWlu
KCkpOworICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KC1zdGF0aWNfY2FzdDxpbnQ2
NF90PihkaWdpdCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludDY0X3QgbWF4VmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpOworICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1h
eFZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGRpZ2l0KSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBi
aWdJbnQ7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgdHJ5Q29udmVydFRvQmln
SW50MzIoSlNCaWdJbnQ6OkltcGxSZXN1bHQgaW1wbFJlc3VsdCkKK3sKKyAgICBpZiAoIWltcGxS
ZXN1bHQucGF5bG9hZCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBpZiAoaW1wbFJl
c3VsdC5wYXlsb2FkLmlzQmlnSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGltcGxSZXN1bHQucGF5
bG9hZDsKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoaW1wbFJlc3VsdC5wYXlsb2Fk
LmFzSGVhcEJpZ0ludCgpKTsKK30KKwogLy8gTXVsdGlwbGllcyB7dGhpc30gd2l0aCB7ZmFjdG9y
fSBhbmQgYWRkcyB7c3VtbWFuZH0gdG8gdGhlIHJlc3VsdC4KIHZvaWQgSlNCaWdJbnQ6OmlucGxh
Y2VNdWx0aXBseUFkZChEaWdpdCBmYWN0b3IsIERpZ2l0IHN1bW1hbmQpCiB7Ci0gICAgaW50ZXJu
YWxNdWx0aXBseUFkZCh0aGlzLCBmYWN0b3IsIHN1bW1hbmQsIGxlbmd0aCgpLCB0aGlzKTsKKyAg
ICBpbnRlcm5hbE11bHRpcGx5QWRkKEhlYXBCaWdJbnRJbXBsIHsgdGhpcyB9LCBmYWN0b3IsIHN1
bW1hbmQsIGxlbmd0aCgpLCB0aGlzKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVu
dGlhdGVIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiBiYXNlLCBK
U0JpZ0ludCogZXhwb25lbnQpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVu
YW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OmV4cG9uZW50
aWF0ZUltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgYmFzZSwg
QmlnSW50SW1wbDIgZXhwb25lbnQpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmIChl
eHBvbmVudC0+c2lnbigpKSB7CisgICAgaWYgKGV4cG9uZW50LnNpZ24oKSkgewogICAgICAgICB0
aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIk5lZ2F0aXZlIGV4cG9uZW50IGlz
IG5vdCBhbGxvd2VkIl9zKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAg
Ly8gMi4gSWYgYmFzZSBpcyAwbiBhbmQgZXhwb25lbnQgaXMgMG4sIHJldHVybiAxbi4KLSAgICBp
ZiAoZXhwb25lbnQtPmlzWmVybygpKQorICAgIGlmIChleHBvbmVudC5pc1plcm8oKSkKICAgICAg
ICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCAxKTsKICAgICAKICAgICAvLyAzLiBS
ZXR1cm4gYSBCaWdJbnQgcmVwcmVzZW50aW5nIHRoZSBtYXRoZW1hdGljYWwgdmFsdWUgb2YgYmFz
ZSByYWlzZWQKICAgICAvLyAgICB0byB0aGUgcG93ZXIgZXhwb25lbnQuCi0gICAgaWYgKGJhc2Ut
PmlzWmVybygpKQorICAgIGlmIChiYXNlLmlzWmVybygpKQogICAgICAgICByZXR1cm4gYmFzZTsK
IAotICAgIGlmIChiYXNlLT5sZW5ndGgoKSA9PSAxICYmIGJhc2UtPmRpZ2l0KDApID09IDEpIHsK
KyAgICBpZiAoYmFzZS5sZW5ndGgoKSA9PSAxICYmIGJhc2UuZGlnaXQoMCkgPT0gMSkgewogICAg
ICAgICAvLyAoLTEpICoqIGV2ZW5fbnVtYmVyID09IDEuCi0gICAgICAgIGlmIChiYXNlLT5zaWdu
KCkgJiYgIShleHBvbmVudC0+ZGlnaXQoMCkgJiAxKSkKLSAgICAgICAgICAgIHJldHVybiBKU0Jp
Z0ludDo6dW5hcnlNaW51c0hlYXAodm0sIGJhc2UpOworICAgICAgICBpZiAoYmFzZS5zaWduKCkg
JiYgIShleHBvbmVudC5kaWdpdCgwKSAmIDEpKQorICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50
Ojp1bmFyeU1pbnVzSW1wbCh2bSwgYmFzZSk7CiAKICAgICAgICAgLy8gKC0xKSAqKiBvZGRfbnVt
YmVyID09IC0xOyAxICoqIGFueXRoaW5nID09IDEuCiAgICAgICAgIHJldHVybiBiYXNlOwpAQCAt
MjY4LDEyICszNjEsMTIgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVIZWFwKEpT
RwogICAgIC8vIEZvciBhbGwgYmFzZXMgPj0gMiwgdmVyeSBsYXJnZSBleHBvbmVudHMgd291bGQg
bGVhZCB0byB1bnJlcHJlc2VudGFibGUKICAgICAvLyByZXN1bHRzLgogICAgIHN0YXRpY19hc3Nl
cnQobWF4TGVuZ3RoQml0cyA8IHN0ZDo6bnVtZXJpY19saW1pdHM8RGlnaXQ+OjptYXgoKSwgIm1h
eExlbmd0aEJpdHMgbmVlZHMgdG8gYmUgbGVzcyB0aGFuIGRpZ2l0OjptYXgoKSIpOwotICAgIGlm
IChleHBvbmVudC0+bGVuZ3RoKCkgPiAxKSB7CisgICAgaWYgKGV4cG9uZW50Lmxlbmd0aCgpID4g
MSkgewogICAgICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkJpZ0lu
dCBnZW5lcmF0ZWQgZnJvbSB0aGlzIG9wZXJhdGlvbiBpcyB0b28gYmlnIl9zKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgRGlnaXQgZXhwVmFsdWUgPSBleHBvbmVudC0+
ZGlnaXQoMCk7CisgICAgRGlnaXQgZXhwVmFsdWUgPSBleHBvbmVudC5kaWdpdCgwKTsKICAgICBp
ZiAoZXhwVmFsdWUgPT0gMSkKICAgICAgICAgcmV0dXJuIGJhc2U7CiAgICAgaWYgKGV4cFZhbHVl
ID49IG1heExlbmd0aEJpdHMpIHsKQEAgLTI4Myw3ICszNzYsNyBAQCBKU0JpZ0ludCogSlNCaWdJ
bnQ6OmV4cG9uZW50aWF0ZUhlYXAoSlNHCiAKICAgICBzdGF0aWNfYXNzZXJ0KG1heExlbmd0aEJp
dHMgPD0gbWF4SW50LCAibWF4TGVuZ3RoQml0cyBuZWVkcyB0byBiZSA8PSBtYXhJbnQiKTsKICAg
ICBpbnQgbiA9IHN0YXRpY19jYXN0PGludD4oZXhwVmFsdWUpOwotICAgIGlmIChiYXNlLT5sZW5n
dGgoKSA9PSAxICYmIGJhc2UtPmRpZ2l0KDApID09IDIpIHsKKyAgICBpZiAoYmFzZS5sZW5ndGgo
KSA9PSAxICYmIGJhc2UuZGlnaXQoMCkgPT0gMikgewogICAgICAgICAvLyBGYXN0IHBhdGggZm9y
IDJebi4KICAgICAgICAgaW50IG5lZWRlZERpZ2l0cyA9IDEgKyAobiAvIGRpZ2l0Qml0cyk7CiAg
ICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChn
bG9iYWxPYmplY3QsIG5lZWRlZERpZ2l0cyk7CkBAIC0yOTQsMjkgKzM4NywyOSBAQCBKU0JpZ0lu
dCogSlNCaWdJbnQ6OmV4cG9uZW50aWF0ZUhlYXAoSlNHCiAgICAgICAgIERpZ2l0IG1zZCA9IHN0
YXRpY19jYXN0PERpZ2l0PigxKSA8PCAobiAlIGRpZ2l0Qml0cyk7CiAgICAgICAgIHJlc3VsdC0+
c2V0RGlnaXQobmVlZGVkRGlnaXRzIC0gMSwgbXNkKTsKICAgICAgICAgLy8gUmVzdWx0IGlzIG5l
Z2F0aXZlIGZvciBvZGQgcG93ZXJzIG9mIC0ybi4KLSAgICAgICAgaWYgKGJhc2UtPnNpZ24oKSkg
CisgICAgICAgIGlmIChiYXNlLnNpZ24oKSkgCiAgICAgICAgICAgICByZXN1bHQtPnNldFNpZ24o
c3RhdGljX2Nhc3Q8Ym9vbD4obiAmIDEpKTsKIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAogICAgIEpTQmlnSW50KiByZXN1bHQgPSBudWxscHRyOwotICAgIEpTQmlnSW50KiBydW5u
aW5nU3F1YXJlID0gYmFzZTsKKyAgICBKU0JpZ0ludCogcnVubmluZ1NxdWFyZSA9IGJhc2UudG9I
ZWFwQmlnSW50KHZtKTsKIAogICAgIC8vIFRoaXMgaW1wbGljaXRseSBzZXRzIHRoZSByZXN1bHQn
cyBzaWduIGNvcnJlY3RseS4KICAgICBpZiAobiAmIDEpCi0gICAgICAgIHJlc3VsdCA9IGJhc2U7
CisgICAgICAgIHJlc3VsdCA9IGJhc2UudG9IZWFwQmlnSW50KHZtKTsKIAogICAgIG4gPj49IDE7
CiAgICAgZm9yICg7IG47IG4gPj49IDEpIHsKLSAgICAgICAgSlNCaWdJbnQqIG1heWJlUmVzdWx0
ID0gSlNCaWdJbnQ6Om11bHRpcGx5SGVhcChnbG9iYWxPYmplY3QsIHJ1bm5pbmdTcXVhcmUsIHJ1
bm5pbmdTcXVhcmUpOworICAgICAgICBKU0JpZ0ludCogbWF5YmVSZXN1bHQgPSBKU0JpZ0ludDo6
bXVsdGlwbHlJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBydW5uaW5nU3F1YXJl
IH0sIEhlYXBCaWdJbnRJbXBsIHsgcnVubmluZ1NxdWFyZSB9KS5wYXlsb2FkLmFzSGVhcEJpZ0lu
dCgpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICAg
ICAgcnVubmluZ1NxdWFyZSA9IG1heWJlUmVzdWx0OwogICAgICAgICBpZiAobiAmIDEpIHsKICAg
ICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bm5pbmdT
cXVhcmU7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtYXliZVJlc3VsdCA9
IEpTQmlnSW50OjptdWx0aXBseUhlYXAoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIHJ1bm5pbmdTcXVh
cmUpOworICAgICAgICAgICAgICAgIG1heWJlUmVzdWx0ID0gSlNCaWdJbnQ6Om11bHRpcGx5SW1w
bChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIEhlYXBCaWdJbnRJbXBs
IHsgcnVubmluZ1NxdWFyZSB9KS5wYXlsb2FkLmFzSGVhcEJpZ0ludCgpOwogICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1heWJlUmVzdWx0OwogICAgICAgICAgICAgfQpAQCAtMzI2LDM1ICs0MTksNzAg
QEAgSlNCaWdJbnQqIEpTQmlnSW50OjpleHBvbmVudGlhdGVIZWFwKEpTRwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6bXVsdGlwbHlIZWFwKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTVmFsdWUgSlNC
aWdJbnQ6OmV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0lu
dCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9C
aWdJbnQzMihleHBvbmVudGlhdGVJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyBi
YXNlIH0sIEhlYXBCaWdJbnRJbXBsIHsgZXhwb25lbnQgfSkpOworfQorCitKU1ZhbHVlIEpTQmln
SW50OjpleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQq
IGJhc2UsIGludDMyX3QgZXhwb25lbnQpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0lu
dDMyKGV4cG9uZW50aWF0ZUltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IGJhc2Ug
fSwgSW50MzJCaWdJbnRJbXBsIHsgZXhwb25lbnQgfSkpOworfQorCitKU1ZhbHVlIEpTQmlnSW50
OjpleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBiYXNl
LCBKU0JpZ0ludCogZXhwb25lbnQpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KGV4cG9uZW50aWF0ZUltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyBiYXNlIH0s
IEhlYXBCaWdJbnRJbXBsIHsgZXhwb25lbnQgfSkpOworfQorCitKU1ZhbHVlIEpTQmlnSW50Ojpl
eHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCBiYXNlLCBp
bnQzMl90IGV4cG9uZW50KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihleHBv
bmVudGlhdGVJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgYmFzZSB9LCBJbnQz
MkJpZ0ludEltcGwgeyBleHBvbmVudCB9KSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJ
bnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0Jp
Z0ludDo6bXVsdGlwbHlJbXBsKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludElt
cGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICh4
LT5pc1plcm8oKSkKKyAgICBpZiAoeC5pc1plcm8oKSkKICAgICAgICAgcmV0dXJuIHg7Ci0gICAg
aWYgKHktPmlzWmVybygpKQorICAgIGlmICh5LmlzWmVybygpKQogICAgICAgICByZXR1cm4geTsK
IAotICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IHgtPmxlbmd0aCgpICsgeS0+bGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0geC5sZW5ndGgoKSArIHkubGVuZ3RoKCk7CiAg
ICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2Jh
bE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBu
dWxscHRyKTsKICAgICByZXN1bHQtPmluaXRpYWxpemUoSW5pdGlhbGl6YXRpb25UeXBlOjpXaXRo
WmVybyk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgeC0+bGVuZ3RoKCk7IGkrKykK
LSAgICAgICAgbXVsdGlwbHlBY2N1bXVsYXRlKHksIHgtPmRpZ2l0KGkpLCByZXN1bHQsIGkpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB4Lmxlbmd0aCgpOyBpKyspCisgICAgICAgIG11
bHRpcGx5QWNjdW11bGF0ZSh5LCB4LmRpZ2l0KGkpLCByZXN1bHQsIGkpOwogCi0gICAgcmVzdWx0
LT5zZXRTaWduKHgtPnNpZ24oKSAhPSB5LT5zaWduKCkpOworICAgIHJlc3VsdC0+c2V0U2lnbih4
LnNpZ24oKSAhPSB5LnNpZ24oKSk7CiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsK
IH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpkaXZpZGVIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTVmFsdWUgSlNCaWdJbnQ6Om11
bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIobXVsdGlwbHlJbXBsKGds
b2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7
Cit9CitKU1ZhbHVlIEpTQmlnSW50OjptdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9C
aWdJbnQzMihtdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0s
IEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjptdWx0aXBseShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQorewor
ICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihtdWx0aXBseUltcGwoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0Jp
Z0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6ZGl2aWRlSW1wbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIC8vIDEuIElm
IHkgaXMgMG4sIHRocm93IGEgUmFuZ2VFcnJvciBleGNlcHRpb24uCiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIGlmICh5LT5pc1plcm8oKSkgeworICAgIGlmICh5LmlzWmVybygpKSB7CiAgICAg
ICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiMCBpcyBhbiBpbnZhbGlk
IGRpdmlzb3IgdmFsdWUuIl9zKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAt
MzYzLDE5ICs0OTEsMTkgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpkaXZpZGVIZWFwKEpTR2xvYmFs
TwogICAgIC8vIDMuIFJldHVybiBhIEJpZ0ludCByZXByZXNlbnRpbmcgcXVvdGllbnQgcm91bmRl
ZCB0b3dhcmRzIDAgdG8gdGhlIG5leHQKICAgICAvLyAgICBpbnRlZ3JhbCB2YWx1ZS4KICAgICBp
ZiAoYWJzb2x1dGVDb21wYXJlKHgsIHkpID09IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuKQot
ICAgICAgICByZXR1cm4gY3JlYXRlWmVybyh2bSk7CisgICAgICAgIHJldHVybiBqc0JpZ0ludDMy
KDApOwogCiAgICAgSlNCaWdJbnQqIHF1b3RpZW50ID0gbnVsbHB0cjsKLSAgICBib29sIHJlc3Vs
dFNpZ24gPSB4LT5zaWduKCkgIT0geS0+c2lnbigpOwotICAgIGlmICh5LT5sZW5ndGgoKSA9PSAx
KSB7Ci0gICAgICAgIERpZ2l0IGRpdmlzb3IgPSB5LT5kaWdpdCgwKTsKKyAgICBib29sIHJlc3Vs
dFNpZ24gPSB4LnNpZ24oKSAhPSB5LnNpZ24oKTsKKyAgICBpZiAoeS5sZW5ndGgoKSA9PSAxKSB7
CisgICAgICAgIERpZ2l0IGRpdmlzb3IgPSB5LmRpZ2l0KDApOwogICAgICAgICBpZiAoZGl2aXNv
ciA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFNpZ24gPT0geC0+c2lnbigpID8geCA6
IEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcCh2bSwgeCk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0U2lnbiA9PSB4LnNpZ24oKSA/IEpTQmlnSW50OjpJbXBsUmVzdWx0IHsgeCB9IDogSlNCaWdJ
bnQ6OnVuYXJ5TWludXNJbXBsKHZtLCB4KTsKIAogICAgICAgICBEaWdpdCByZW1haW5kZXI7CiAg
ICAgICAgIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcih2bSwgeCwgZGl2aXNvciwgJnF1b3Rp
ZW50LCByZW1haW5kZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGFic29sdXRlRGl2V2l0aEJp
Z0ludERpdmlzb3IoZ2xvYmFsT2JqZWN0LCB4LCB5LCAmcXVvdGllbnQsIG51bGxwdHIpOworICAg
ICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeS50b0hl
YXBCaWdJbnQodm0pLCAmcXVvdGllbnQsIG51bGxwdHIpOwogICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAKQEAgLTM4MywzMyArNTExLDU1IEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6ZGl2aWRlSGVhcChKU0dsb2JhbE8KICAgICByZXR1cm4gcXVvdGll
bnQtPnJpZ2h0VHJpbSh2bSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0s
IEpTQmlnSW50KiB4KQorSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKIHsKLSAgICBBU1NFUlQoIXgt
PmlzWmVybygpKTsKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGl2aWRlSW1wbChn
bG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkp
OworfQorSlNWYWx1ZSBKU0JpZ0ludDo6ZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0Jp
Z0ludDMyKGRpdmlkZUltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50
MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpkaXZpZGUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICBy
ZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGl2aWRlSW1wbChnbG9iYWxPYmplY3QsIEludDMy
QmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KIAotICAgIEpTQmln
SW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgeC0+
bGVuZ3RoKCkpOwotICAgIHN0ZDo6Y29weSh4LT5kYXRhU3RvcmFnZSgpLCB4LT5kYXRhU3RvcmFn
ZSgpICsgeC0+bGVuZ3RoKCksIHJlc3VsdC0+ZGF0YVN0b3JhZ2UoKSk7Ci0gICAgcmVzdWx0LT5z
ZXRTaWduKHgtPnNpZ24oKSk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK0pTQmln
SW50KiBKU0JpZ0ludDo6Y29weShWTSYgdm0sIEJpZ0ludEltcGwgeCkKK3sKKyAgICBBU1NFUlQo
IXguaXNaZXJvKCkpOworCisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50OjpjcmVhdGVX
aXRoTGVuZ3RoVW5jaGVja2VkKHZtLCB4Lmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVzdWx0LT5sZW5ndGgoKTsgKytpKQorICAgICAgICByZXN1bHQtPnNldERpZ2l0
KGksIHguZGlnaXQoaSkpOworICAgIHJlc3VsdC0+c2V0U2lnbih4LnNpZ24oKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcChWTSYg
dm0sIEpTQmlnSW50KiB4KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CitKU0JpZ0lu
dDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6dW5hcnlNaW51c0ltcGwoVk0mIHZtLCBCaWdJbnRJbXBs
IHgpCiB7Ci0gICAgaWYgKHgtPmlzWmVybygpKQotICAgICAgICByZXR1cm4geDsKKyAgICBpZiAo
eC5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7CiAKICAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gY29weSh2bSwgeCk7Ci0gICAgcmVzdWx0LT5zZXRTaWduKCF4LT5zaWduKCkp
OworICAgIHJlc3VsdC0+c2V0U2lnbigheC5zaWduKCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6cmVtYWluZGVySGVhcChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCitKU1ZhbHVlIEpTQmlnSW50Ojp1
bmFyeU1pbnVzKFZNJiB2bSwgSlNCaWdJbnQqIHgpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRU
b0JpZ0ludDMyKHVuYXJ5TWludXNJbXBsKHZtLCBIZWFwQmlnSW50SW1wbCB7IHggfSkpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgor
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJlbWFpbmRlckltcGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICAv
LyAxLiBJZiB5IGlzIDBuLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAgICAgCi0gICAgaWYgKHktPmlzWmVybygpKSB7CisgICAgaWYgKHkuaXNaZXJv
KCkpIHsKICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICIwIGlz
IGFuIGludmFsaWQgZGl2aXNvciB2YWx1ZS4iX3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CkBAIC00MjAsNTggKzU3MCw4MCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OnJlbWFpbmRl
ckhlYXAoSlNHbG9iCiAgICAgICAgIHJldHVybiB4OwogCiAgICAgSlNCaWdJbnQqIHJlbWFpbmRl
cjsKLSAgICBpZiAoeS0+bGVuZ3RoKCkgPT0gMSkgewotICAgICAgICBEaWdpdCBkaXZpc29yID0g
eS0+ZGlnaXQoMCk7CisgICAgaWYgKHkubGVuZ3RoKCkgPT0gMSkgeworICAgICAgICBEaWdpdCBk
aXZpc29yID0geS5kaWdpdCgwKTsKICAgICAgICAgaWYgKGRpdmlzb3IgPT0gMSkKLSAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVaZXJvKHZtKTsKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMy
KDApOwogCiAgICAgICAgIERpZ2l0IHJlbWFpbmRlckRpZ2l0OwogICAgICAgICBhYnNvbHV0ZURp
dldpdGhEaWdpdERpdmlzb3Iodm0sIHgsIGRpdmlzb3IsIG51bGxwdHIsIHJlbWFpbmRlckRpZ2l0
KTsKICAgICAgICAgaWYgKCFyZW1haW5kZXJEaWdpdCkKLSAgICAgICAgICAgIHJldHVybiBjcmVh
dGVaZXJvKHZtKTsKKyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKDApOwogCiAgICAgICAg
IHJlbWFpbmRlciA9IGNyZWF0ZVdpdGhMZW5ndGhVbmNoZWNrZWQodm0sIDEpOwogICAgICAgICBy
ZW1haW5kZXItPnNldERpZ2l0KDAsIHJlbWFpbmRlckRpZ2l0KTsKICAgICB9IGVsc2UgewotICAg
ICAgICBhYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKGdsb2JhbE9iamVjdCwgeCwgeSwgbnVs
bHB0ciwgJnJlbWFpbmRlcik7CisgICAgICAgIGFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3Io
Z2xvYmFsT2JqZWN0LCB4LCB5LnRvSGVhcEJpZ0ludCh2bSksIG51bGxwdHIsICZyZW1haW5kZXIp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKICAgICB9CiAK
LSAgICByZW1haW5kZXItPnNldFNpZ24oeC0+c2lnbigpKTsKKyAgICByZW1haW5kZXItPnNldFNp
Z24oeC5zaWduKCkpOwogICAgIHJldHVybiByZW1haW5kZXItPnJpZ2h0VHJpbSh2bSk7CiB9CitK
U1ZhbHVlIEpTQmlnSW50OjpyZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihyZW1haW5kZXJJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEhl
YXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpyZW1haW5kZXIoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIocmVtYWluZGVySW1wbChnbG9iYWxPYmplY3Qs
IEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFs
dWUgSlNCaWdJbnQ6OnJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQz
Ml90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihy
ZW1haW5kZXJJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmln
SW50SW1wbCB7IHkgfSkpOworfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmluY0hlYXAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbD4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjppbmNJbXBsKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwgeCkKIHsKLSAgICBpZiAoIXgtPnNp
Z24oKSkKKyAgICBpZiAoIXguc2lnbigpKQogICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUo
Z2xvYmFsT2JqZWN0LCB4LCBTaWduT3B0aW9uOjpVbnNpZ25lZCk7Ci0gICAgSlNCaWdJbnQqIHJl
c3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeCwgeC0+bGVuZ3RoKCkpOworICAg
IEpTQmlnSW50KiByZXN1bHQgPSBhYnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHgubGVu
Z3RoKCkpOwogICAgIGlmIChyZXN1bHQtPmlzWmVybygpKQogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIHJlc3VsdC0+c2V0U2lnbih0cnVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1K
U0JpZ0ludCogSlNCaWdJbnQ6OmRlY0hlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgpCitKU1ZhbHVlIEpTQmlnSW50OjppbmMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNCaWdJbnQqIHgpCiB7Ci0gICAgaWYgKHgtPmlzWmVybygpKSB7Ci0gICAgICAg
IEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVGcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwgMSk7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0U2lnbih0cnVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0gICAgaWYgKCF4LT5zaWduKCkpCi0gICAgICAgIHJldHVybiBhYnNvbHV0ZVN1Yk9uZShn
bG9iYWxPYmplY3QsIHgsIHgtPmxlbmd0aCgpKTsKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmln
SW50MzIoaW5jSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmRlY0ltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4
KQoreworICAgIGlmICh4LmlzWmVybygpKQorICAgICAgICByZXR1cm4ganNCaWdJbnQzMigtMSk7
CisgICAgaWYgKCF4LnNpZ24oKSkKKyAgICAgICAgcmV0dXJuIGFic29sdXRlU3ViT25lKGdsb2Jh
bE9iamVjdCwgeCwgeC5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2Jh
bE9iamVjdCwgeCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50
OjphZGRIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSkKK0pTVmFsdWUgSlNCaWdJbnQ6OmRlYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0JpZ0ludCogeCkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoZGVj
SW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9KSk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6
SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWRkSW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBib29sIHhTaWduID0geC0+c2lnbigpOworICAgIGJvb2wgeFNpZ24g
PSB4LnNpZ24oKTsKIAogICAgIC8vIHggKyB5ID09IHggKyB5CiAgICAgLy8gLXggKyAteSA9PSAt
KHggKyB5KQotICAgIGlmICh4U2lnbiA9PSB5LT5zaWduKCkpCisgICAgaWYgKHhTaWduID09IHku
c2lnbigpKQogICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGQoZ2xvYmFsT2JqZWN0LCB4LCB5LCB4
U2lnbik7CiAKICAgICAvLyB4ICsgLXkgPT0geCAtIHkgPT0gLSh5IC0geCkKQEAgLTQ4MiwxMiAr
NjU0LDI1IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWRkSGVhcChKU0dsb2JhbE9iamUKIAogICAg
IHJldHVybiBhYnNvbHV0ZVN1Yih2bSwgeSwgeCwgIXhTaWduKTsKIH0KK0pTVmFsdWUgSlNCaWdJ
bnQ6OmFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGFkZEltcGwoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30K
K0pTVmFsdWUgSlNCaWdJbnQ6OmFkZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Jp
Z0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihh
ZGRJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1w
bCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6YWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZl
cnRUb0JpZ0ludDMyKGFkZEltcGwoZ2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0s
IEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6c3ViSGVh
cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkp
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgor
SlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnN1YkltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYm9vbCB4U2lnbiA9IHgtPnNpZ24oKTsKLSAgICBp
ZiAoeFNpZ24gIT0geS0+c2lnbigpKSB7CisgICAgYm9vbCB4U2lnbiA9IHguc2lnbigpOworICAg
IGlmICh4U2lnbiAhPSB5LnNpZ24oKSkgewogICAgICAgICAvLyB4IC0gKC15KSA9PSB4ICsgeQog
ICAgICAgICAvLyAoLXgpIC0geSA9PSAtKHggKyB5KQogICAgICAgICByZXR1cm4gYWJzb2x1dGVB
ZGQoZ2xvYmFsT2JqZWN0LCB4LCB5LCB4U2lnbik7CkBAIC01MDEsMTUyICs2ODYsMjU4IEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6c3ViSGVhcChKU0dsb2JhbE9iamUKICAgICByZXR1cm4gYWJzb2x1
dGVTdWIodm0sIHksIHgsICF4U2lnbik7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lz
ZUFuZEhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmln
SW50KiB5KQorSlNWYWx1ZSBKU0JpZ0ludDo6c3ViKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRv
QmlnSW50MzIoc3ViSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFw
QmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6c3ViKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7CisgICAgcmV0dXJu
IHRyeUNvbnZlcnRUb0JpZ0ludDMyKHN1YkltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1w
bCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50Ojpz
dWIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkK
K3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoc3ViSW1wbChnbG9iYWxPYmplY3Qs
IEludDMyQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK0pTQmln
SW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlQW5kSW1wbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBpZiAoIXgtPnNpZ24oKSAmJiAheS0+c2lnbigpKSB7CisgICAgaWYg
KCF4LnNpZ24oKSAmJiAheS5zaWduKCkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwogICAg
ICAgICByZXR1cm4gYWJzb2x1dGVBbmQodm0sIHgsIHkpOwogICAgIH0KICAgICAKLSAgICBpZiAo
eC0+c2lnbigpICYmIHktPnNpZ24oKSkgewotICAgICAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3Rk
OjptYXgoeC0+bGVuZ3RoKCksIHktPmxlbmd0aCgpKSArIDE7CisgICAgaWYgKHguc2lnbigpICYm
IHkuc2lnbigpKSB7CisgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0
aCgpLCB5Lmxlbmd0aCgpKSArIDE7CiAgICAgICAgIC8vICgteCkgJiAoLXkpID09IH4oeC0xKSAm
IH4oeS0xKSA9PSB+KCh4LTEpIHwgKHktMSkpCiAgICAgICAgIC8vID09IC0oKCh4LTEpIHwgKHkt
MSkpICsgMSkKICAgICAgICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2Jh
bE9iamVjdCwgeCwgcmVzdWx0TGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAKLSAgICAgICAgSlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUo
Z2xvYmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgoKSk7CisgICAgICAgIEpTQmlnSW50KiB5MSA9IGFi
c29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwgeSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICByZXN1bHQgPSBhYnNvbHV0
ZU9yKHZtLCByZXN1bHQsIHkxKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVPcih2bSwgSGVh
cEJpZ0ludEltcGwgeyByZXN1bHQgfSwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2Jq
ZWN0LCByZXN1bHQsIFNpZ25PcHRpb246OlNpZ25lZCk7CisgICAgICAgIHJldHVybiBhYnNvbHV0
ZUFkZE9uZShnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgcmVzdWx0IH0sIFNpZ25PcHRp
b246OlNpZ25lZCk7CiAgICAgfQogCi0gICAgQVNTRVJUKHgtPnNpZ24oKSAhPSB5LT5zaWduKCkp
OwotICAgIC8vIEFzc3VtZSB0aGF0IHggaXMgdGhlIHBvc2l0aXZlIEJpZ0ludC4KLSAgICBpZiAo
eC0+c2lnbigpKQotICAgICAgICBzdGQ6OnN3YXAoeCwgeSk7Ci0gICAgCisgICAgQVNTRVJUKHgu
c2lnbigpICE9IHkuc2lnbigpKTsKICAgICAvLyB4ICYgKC15KSA9PSB4ICYgfih5LTEpCi0gICAg
SlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgo
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0gICAgcmV0dXJu
IGFic29sdXRlQW5kTm90KHZtLCB4LCB5MSk7CisgICAgYXV0byBjb21wdXRlUmVzdWx0ID0gWyZd
IChhdXRvIHgsIGF1dG8geSkgLT4gSlNCaWdJbnQqIHsKKyAgICAgICAgQVNTRVJUKCF4LnNpZ24o
KSk7IAorICAgICAgICBBU1NFUlQoeS5zaWduKCkpOyAKKyAgICAgICAgSlNCaWdJbnQqIHkxID0g
YWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBhYnNvbHV0
ZUFuZE5vdCh2bSwgeCwgSGVhcEJpZ0ludEltcGwgeyB5MSB9KTsKKyAgICB9OworICAgIGlmICh4
LnNpZ24oKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVSZXN1bHQoeSwgeCk7CisgICAgcmV0dXJu
IGNvbXB1dGVSZXN1bHQoeCwgeSk7Cit9CisKK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VBbmQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQor
eworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihiaXR3aXNlQW5kSW1wbChnbG9iYWxP
YmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQor
SlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihiaXR3aXNlQW5kSW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsgeCB9LCBJ
bnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VBbmQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSkKK3sK
KyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZUFuZEltcGwoZ2xvYmFsT2Jq
ZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7CiB9CiAK
LUpTQmlnSW50KiBKU0JpZ0ludDo6Yml0d2lzZU9ySGVhcChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmln
SW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNC
aWdJbnQ6OmJpdHdpc2VPckltcGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmlnSW50
SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgdW5z
aWduZWQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC0+bGVuZ3RoKCksIHktPmxlbmd0aCgpKTsK
KyAgICB1bnNpZ25lZCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5Lmxlbmd0
aCgpKTsKIAotICAgIGlmICgheC0+c2lnbigpICYmICF5LT5zaWduKCkpIHsKKyAgICBpZiAoIXgu
c2lnbigpICYmICF5LnNpZ24oKSkgewogICAgICAgICBzY29wZS5yZWxlYXNlKCk7CiAgICAgICAg
IHJldHVybiBhYnNvbHV0ZU9yKHZtLCB4LCB5KTsKICAgICB9CiAgICAgCi0gICAgaWYgKHgtPnNp
Z24oKSAmJiB5LT5zaWduKCkpIHsKKyAgICBpZiAoeC5zaWduKCkgJiYgeS5zaWduKCkpIHsKICAg
ICAgICAgLy8gKC14KSB8ICgteSkgPT0gfih4LTEpIHwgfih5LTEpID09IH4oKHgtMSkgJiAoeS0x
KSkKICAgICAgICAgLy8gPT0gLSgoKHgtMSkgJiAoeS0xKSkgKyAxKQogICAgICAgICBKU0JpZ0lu
dCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCByZXN1bHRMZW5ndGgp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLSAgICAgICAg
SlNCaWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5LT5sZW5ndGgo
KSk7CisgICAgICAgIEpTQmlnSW50KiB5MSA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVjdCwg
eSwgeS5sZW5ndGgoKSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwotICAgICAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZCh2bSwgcmVzdWx0LCB5MSk7CisgICAg
ICAgIHJlc3VsdCA9IGFic29sdXRlQW5kKHZtLCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBI
ZWFwQmlnSW50SW1wbCB7IHkxIH0pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKIAogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIHJldHVybiBh
YnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHJlc3VsdCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsK
KyAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyByZXN1bHQgfSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKICAgICB9CiAgICAgCi0gICAgQVNT
RVJUKHgtPnNpZ24oKSAhPSB5LT5zaWduKCkpOworICAgIEFTU0VSVCh4LnNpZ24oKSAhPSB5LnNp
Z24oKSk7CiAKLSAgICAvLyBBc3N1bWUgdGhhdCB4IGlzIHRoZSBwb3NpdGl2ZSBCaWdJbnQuCi0g
ICAgaWYgKHgtPnNpZ24oKSkKLSAgICAgICAgc3RkOjpzd2FwKHgsIHkpOwotICAgIAogICAgIC8v
IHggfCAoLXkpID09IHggfCB+KHktMSkgPT0gfigoeS0xKSAmfiB4KSA9PSAtKCgoeS0xKSAmfiB4
KSArIDEpCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IGFic29sdXRlU3ViT25lKGdsb2JhbE9iamVj
dCwgeSwgcmVzdWx0TGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKLSAgICByZXN1bHQgPSBhYnNvbHV0ZUFuZE5vdCh2bSwgcmVzdWx0LCB4KTsKKyAgICBh
dXRvIGNvbXB1dGVSZXN1bHQgPSBbJl0gKGF1dG8geCwgYXV0byB5KSAtPiBKU0JpZ0ludCogewor
ICAgICAgICBBU1NFUlQoIXguc2lnbigpKTsKKyAgICAgICAgQVNTRVJUKHkuc2lnbigpKTsKKwor
ICAgICAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5
LCByZXN1bHRMZW5ndGgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxs
cHRyKTsKKyAgICAgICAgcmVzdWx0ID0gYWJzb2x1dGVBbmROb3Qodm0sIEhlYXBCaWdJbnRJbXBs
IHsgcmVzdWx0IH0sIHgpOworCisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0
dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyByZXN1bHQg
fSwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKKyAgICB9OwogCi0gICAgc2NvcGUucmVsZWFzZSgpOwot
ICAgIHJldHVybiBhYnNvbHV0ZUFkZE9uZShnbG9iYWxPYmplY3QsIHJlc3VsdCwgU2lnbk9wdGlv
bjo6U2lnbmVkKTsKKyAgICBpZiAoeC5zaWduKCkpCisgICAgICAgIHJldHVybiBjb21wdXRlUmVz
dWx0KHksIHgpOworICAgIHJldHVybiBjb21wdXRlUmVzdWx0KHgsIHkpOwogfQogCi1KU0JpZ0lu
dCogSlNCaWdJbnQ6OmJpdHdpc2VYb3JIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTVmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VPcihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7
CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VPckltcGwoZ2xvYmFsT2Jq
ZWN0LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pT
VmFsdWUgSlNCaWdJbnQ6OmJpdHdpc2VPcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQz
MihiaXR3aXNlT3JJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMy
QmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZU9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpCit7CisgICAg
cmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VPckltcGwoZ2xvYmFsT2JqZWN0LCBJ
bnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0lu
dDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6Yml0d2lzZVhvckltcGwoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCi0gICAgaWYgKCF4LT5zaWduKCkgJiYgIXktPnNpZ24oKSkgeworICAgIGlmICgh
eC5zaWduKCkgJiYgIXkuc2lnbigpKSB7CiAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICAg
ICAgcmV0dXJuIGFic29sdXRlWG9yKHZtLCB4LCB5KTsKICAgICB9CiAgICAgCi0gICAgaWYgKHgt
PnNpZ24oKSAmJiB5LT5zaWduKCkpIHsKLSAgICAgICAgaW50IHJlc3VsdExlbmd0aCA9IHN0ZDo6
bWF4KHgtPmxlbmd0aCgpLCB5LT5sZW5ndGgoKSk7CisgICAgaWYgKHguc2lnbigpICYmIHkuc2ln
bigpKSB7CisgICAgICAgIGludCByZXN1bHRMZW5ndGggPSBzdGQ6Om1heCh4Lmxlbmd0aCgpLCB5
Lmxlbmd0aCgpKTsKICAgICAgICAgCiAgICAgICAgIC8vICgteCkgXiAoLXkpID09IH4oeC0xKSBe
IH4oeS0xKSA9PSAoeC0xKSBeICh5LTEpCiAgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNv
bHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHgsIHJlc3VsdExlbmd0aCk7CiAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotICAgICAgICBKU0JpZ0ludCogeTEgPSBh
YnNvbHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHktPmxlbmd0aCgpKTsKKyAgICAgICAgSlNC
aWdJbnQqIHkxID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCB5Lmxlbmd0aCgpKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CiAKICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIHJlc3VsdCwg
eTEpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVYb3Iodm0sIEhlYXBCaWdJbnRJbXBsIHsgcmVz
dWx0IH0sIEhlYXBCaWdJbnRJbXBsIHsgeTEgfSk7CiAgICAgfQotICAgIEFTU0VSVCh4LT5zaWdu
KCkgIT0geS0+c2lnbigpKTsKLSAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC0+bGVu
Z3RoKCksIHktPmxlbmd0aCgpKSArIDE7CisgICAgQVNTRVJUKHguc2lnbigpICE9IHkuc2lnbigp
KTsKKyAgICBpbnQgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoeC5sZW5ndGgoKSwgeS5sZW5ndGgo
KSkgKyAxOworCisgICAgLy8geCBeICgteSkgPT0geCBeIH4oeS0xKSA9PSB+KHggXiAoeS0xKSkg
PT0gLSgoeCBeICh5LTEpKSArIDEpCisgICAgYXV0byBjb21wdXRlUmVzdWx0ID0gWyZdIChhdXRv
IHgsIGF1dG8geSkgLT4gSlNCaWdJbnQqIHsKKyAgICAgICAgQVNTRVJUKCF4LnNpZ24oKSk7Cisg
ICAgICAgIEFTU0VSVCh5LnNpZ24oKSk7CisgICAgICAgIEpTQmlnSW50KiByZXN1bHQgPSBhYnNv
bHV0ZVN1Yk9uZShnbG9iYWxPYmplY3QsIHksIHJlc3VsdExlbmd0aCk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgICAgIHJlc3VsdCA9IGFic29s
dXRlWG9yKHZtLCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCB4KTsKKyAgICAgICAgc2NvcGUu
cmVsZWFzZSgpOworICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCBI
ZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOworICAgIH07CiAg
ICAgCiAgICAgLy8gQXNzdW1lIHRoYXQgeCBpcyB0aGUgcG9zaXRpdmUgQmlnSW50LgotICAgIGlm
ICh4LT5zaWduKCkpCi0gICAgICAgIHN0ZDo6c3dhcCh4LCB5KTsKLSAgICAKLSAgICAvLyB4IF4g
KC15KSA9PSB4IF4gfih5LTEpID09IH4oeCBeICh5LTEpKSA9PSAtKCh4IF4gKHktMSkpICsgMSkK
LSAgICBKU0JpZ0ludCogcmVzdWx0ID0gYWJzb2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB5LCBy
ZXN1bHRMZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
ICAgIGlmICh4LnNpZ24oKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVSZXN1bHQoeSwgeCk7Cisg
ICAgcmV0dXJuIGNvbXB1dGVSZXN1bHQoeCwgeSk7Cit9CiAKLSAgICByZXN1bHQgPSBhYnNvbHV0
ZVhvcih2bSwgcmVzdWx0LCB4KTsKLSAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIGFi
c29sdXRlQWRkT25lKGdsb2JhbE9iamVjdCwgcmVzdWx0LCBTaWduT3B0aW9uOjpTaWduZWQpOwor
SlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0Jp
Z0ludDMyKGJpdHdpc2VYb3JJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0s
IEhlYXBCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpiaXR3aXNlWG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpCit7
CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VYb3JJbXBsKGdsb2JhbE9i
amVjdCwgSGVhcEJpZ0ludEltcGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQor
SlNWYWx1ZSBKU0JpZ0ludDo6Yml0d2lzZVhvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KQoreworICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJ
bnQzMihiaXR3aXNlWG9ySW1wbChnbG9iYWxPYmplY3QsIEludDMyQmlnSW50SW1wbCB7IHggfSwg
SGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0U2hp
ZnRIZWFwKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0lu
dCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1w
bDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6bGVmdFNoaWZ0SW1wbChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewot
ICAgIGlmICh5LT5pc1plcm8oKSB8fCB4LT5pc1plcm8oKSkKKyAgICBpZiAoeC5pc1plcm8oKSB8
fCB5LmlzWmVybygpKQogICAgICAgICByZXR1cm4geDsKIAotICAgIGlmICh5LT5zaWduKCkpCisg
ICAgaWYgKHkuc2lnbigpKQogICAgICAgICByZXR1cm4gcmlnaHRTaGlmdEJ5QWJzb2x1dGUoZ2xv
YmFsT2JqZWN0LCB4LCB5KTsKIAogICAgIHJldHVybiBsZWZ0U2hpZnRCeUFic29sdXRlKGdsb2Jh
bE9iamVjdCwgeCwgeSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlm
dEhlYXAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQorSlNWYWx1ZSBKU0JpZ0ludDo6bGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVy
dFRvQmlnSW50MzIobGVmdFNoaWZ0SW1wbChnbG9iYWxPYmplY3QsIEhlYXBCaWdJbnRJbXBsIHsg
eCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6bGVmdFNo
aWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBpbnQzMl90IHkp
CiB7Ci0gICAgaWYgKHktPmlzWmVybygpIHx8IHgtPmlzWmVybygpKQorICAgIHJldHVybiB0cnlD
b252ZXJ0VG9CaWdJbnQzMihsZWZ0U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyB4IH0sIEludDMyQmlnSW50SW1wbCB7IHkgfSkpOworfQorSlNWYWx1ZSBKU0JpZ0ludDo6
bGVmdFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNCaWdJ
bnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGxlZnRTaGlmdEltcGwo
Z2xvYmFsT2JqZWN0LCBJbnQzMkJpZ0ludEltcGwgeyB4IH0sIEhlYXBCaWdJbnRJbXBsIHsgeSB9
KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpsZWZ0U2hpZnRTbG93KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQoreworICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihsZWZ0U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBs
IHsgeCB9LCBJbnQzMkJpZ0ludEltcGwgeyB5IH0pKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0
IEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0SW1wbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQoreworICAgIGlmICh4LmlzWmVybygp
IHx8IHkuaXNaZXJvKCkpCiAgICAgICAgIHJldHVybiB4OwogCi0gICAgaWYgKHktPnNpZ24oKSkK
KyAgICBpZiAoeS5zaWduKCkpCiAgICAgICAgIHJldHVybiBsZWZ0U2hpZnRCeUFic29sdXRlKGds
b2JhbE9iamVjdCwgeCwgeSk7CiAKICAgICByZXR1cm4gcmlnaHRTaGlmdEJ5QWJzb2x1dGUoZ2xv
YmFsT2JqZWN0LCB4LCB5KTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjpiaXR3aXNlTm90SGVh
cChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKK0pTVmFsdWUgSlNC
aWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNC
aWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewotICAgIGlmICh4LT5zaWduKCkpIHsKKyAgICByZXR1
cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoc2lnbmVkUmlnaHRTaGlmdEltcGwoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pKTsKK30KK0pTVmFs
dWUgSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSkKK3sKKyAgICByZXR1cm4gdHJ5Q29udmVydFRvQmln
SW50MzIoc2lnbmVkUmlnaHRTaGlmdEltcGwoZ2xvYmFsT2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7
IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9KSk7Cit9CitKU1ZhbHVlIEpTQmlnSW50OjpzaWdu
ZWRSaWdodFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgSlNC
aWdJbnQqIHkpCit7CisgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHNpZ25lZFJpZ2h0
U2hpZnRJbXBsKGdsb2JhbE9iamVjdCwgSW50MzJCaWdJbnRJbXBsIHsgeCB9LCBIZWFwQmlnSW50
SW1wbCB7IHkgfSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KK0pTQmln
SW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpiaXR3aXNlTm90SW1wbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgpCit7CisgICAgaWYgKHguc2lnbigpKSB7CiAgICAg
ICAgIC8vIH4oLXgpID09IH4ofih4LTEpKSA9PSB4LTEKLSAgICAgICAgcmV0dXJuIGFic29sdXRl
U3ViT25lKGdsb2JhbE9iamVjdCwgeCwgeC0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gYWJz
b2x1dGVTdWJPbmUoZ2xvYmFsT2JqZWN0LCB4LCB4Lmxlbmd0aCgpKTsKICAgICB9IAogICAgIC8v
IH54ID09IC14LTEgPT0gLSh4KzEpCiAgICAgcmV0dXJuIGFic29sdXRlQWRkT25lKGdsb2JhbE9i
amVjdCwgeCwgU2lnbk9wdGlvbjo6U2lnbmVkKTsKIH0KIAorSlNWYWx1ZSBKU0JpZ0ludDo6Yml0
d2lzZU5vdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCkKK3sKKyAg
ICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZU5vdEltcGwoZ2xvYmFsT2JqZWN0
LCBIZWFwQmlnSW50SW1wbCB7IHggfSkpOworfQorCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICNk
ZWZpbmUgSEFWRV9UV09fRElHSVQgMQogdHlwZWRlZiB1aW50NjRfdCBUd29EaWdpdDsKQEAgLTgx
MSwxNSArMTEwMiwxNiBAQCBpbmxpbmUgSlNCaWdJbnQ6OkRpZ2l0IEpTQmlnSW50OjpkaWdpdERp
CiAKIC8vIE11bHRpcGxpZXMge3NvdXJjZX0gd2l0aCB7ZmFjdG9yfSBhbmQgYWRkcyB7c3VtbWFu
ZH0gdG8gdGhlIHJlc3VsdC4KIC8vIHtyZXN1bHR9IGFuZCB7c291cmNlfSBtYXkgYmUgdGhlIHNh
bWUgQmlnSW50IGZvciBpbnBsYWNlIG1vZGlmaWNhdGlvbi4KLXZvaWQgSlNCaWdJbnQ6OmludGVy
bmFsTXVsdGlwbHlBZGQoSlNCaWdJbnQqIHNvdXJjZSwgRGlnaXQgZmFjdG9yLCBEaWdpdCBzdW1t
YW5kLCB1bnNpZ25lZCBuLCBKU0JpZ0ludCogcmVzdWx0KQordGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGw+Cit2b2lkIEpTQmlnSW50OjppbnRlcm5hbE11bHRpcGx5QWRkKEJpZ0ludEltcGwg
c291cmNlLCBEaWdpdCBmYWN0b3IsIERpZ2l0IHN1bW1hbmQsIHVuc2lnbmVkIG4sIEpTQmlnSW50
KiByZXN1bHQpCiB7Ci0gICAgQVNTRVJUKHNvdXJjZS0+bGVuZ3RoKCkgPj0gbik7CisgICAgQVNT
RVJUKHNvdXJjZS5sZW5ndGgoKSA+PSBuKTsKICAgICBBU1NFUlQocmVzdWx0LT5sZW5ndGgoKSA+
PSBuKTsKIAogICAgIERpZ2l0IGNhcnJ5ID0gc3VtbWFuZDsKICAgICBEaWdpdCBoaWdoID0gMDsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIERpZ2l0IGN1
cnJlbnQgPSBzb3VyY2UtPmRpZ2l0KGkpOworICAgICAgICBEaWdpdCBjdXJyZW50ID0gc291cmNl
LmRpZ2l0KGkpOwogICAgICAgICBEaWdpdCBuZXdDYXJyeSA9IDA7CiAKICAgICAgICAgLy8gQ29t
cHV0ZSB0aGlzIHJvdW5kJ3MgbXVsdGlwbGljYXRpb24uCkBAIC04NTAsMTUgKzExNDIsMTYgQEAg
dm9pZCBKU0JpZ0ludDo6aW50ZXJuYWxNdWx0aXBseUFkZChKU0JpZwogLy8ge2FjY3VtdWxhdG9y
fSwgc3RhcnRpbmcgYXQge2FjY3VtdWxhdG9ySW5kZXh9IGZvciB0aGUgbGVhc3Qtc2lnbmlmaWNh
bnQKIC8vIGRpZ2l0LgogLy8gQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHthY2N1bXVsYXRvcn0g
aXMgYmlnIGVub3VnaCB0byBob2xkIHRoZSByZXN1bHQuCi12b2lkIEpTQmlnSW50OjptdWx0aXBs
eUFjY3VtdWxhdGUoSlNCaWdJbnQqIG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwgSlNC
aWdJbnQqIGFjY3VtdWxhdG9yLCB1bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KQordGVtcGxhdGUg
PHR5cGVuYW1lIEJpZ0ludEltcGw+Cit2b2lkIEpTQmlnSW50OjptdWx0aXBseUFjY3VtdWxhdGUo
QmlnSW50SW1wbCBtdWx0aXBsaWNhbmQsIERpZ2l0IG11bHRpcGxpZXIsIEpTQmlnSW50KiBhY2N1
bXVsYXRvciwgdW5zaWduZWQgYWNjdW11bGF0b3JJbmRleCkKIHsKLSAgICBBU1NFUlQoYWNjdW11
bGF0b3ItPmxlbmd0aCgpID4gbXVsdGlwbGljYW5kLT5sZW5ndGgoKSArIGFjY3VtdWxhdG9ySW5k
ZXgpOworICAgIEFTU0VSVChhY2N1bXVsYXRvci0+bGVuZ3RoKCkgPiBtdWx0aXBsaWNhbmQubGVu
Z3RoKCkgKyBhY2N1bXVsYXRvckluZGV4KTsKICAgICBpZiAoIW11bHRpcGxpZXIpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBEaWdpdCBjYXJyeSA9IDA7CiAgICAgRGlnaXQgaGlnaCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG11bHRpcGxpY2FuZC0+bGVuZ3RoKCk7IGkr
KywgYWNjdW11bGF0b3JJbmRleCsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG11
bHRpcGxpY2FuZC5sZW5ndGgoKTsgaSsrLCBhY2N1bXVsYXRvckluZGV4KyspIHsKICAgICAgICAg
RGlnaXQgYWNjID0gYWNjdW11bGF0b3ItPmRpZ2l0KGFjY3VtdWxhdG9ySW5kZXgpOwogICAgICAg
ICBEaWdpdCBuZXdDYXJyeSA9IDA7CiAgICAgICAgIApAQCAtODY3LDcgKzExNjAsNyBAQCB2b2lk
IEpTQmlnSW50OjptdWx0aXBseUFjY3VtdWxhdGUoSlNCaWdJCiAgICAgICAgIGFjYyA9IGRpZ2l0
QWRkKGFjYywgY2FycnksIG5ld0NhcnJ5KTsKICAgICAgICAgCiAgICAgICAgIC8vIENvbXB1dGUg
dGhpcyByb3VuZCdzIG11bHRpcGxpY2F0aW9uLgotICAgICAgICBEaWdpdCBtdWx0aXBsaWNhbmRE
aWdpdCA9IG11bHRpcGxpY2FuZC0+ZGlnaXQoaSk7CisgICAgICAgIERpZ2l0IG11bHRpcGxpY2Fu
ZERpZ2l0ID0gbXVsdGlwbGljYW5kLmRpZ2l0KGkpOwogICAgICAgICBEaWdpdCBsb3cgPSBkaWdp
dE11bChtdWx0aXBsaWVyLCBtdWx0aXBsaWNhbmREaWdpdCwgaGlnaCk7CiAgICAgICAgIGFjYyA9
IGRpZ2l0QWRkKGFjYywgbG93LCBuZXdDYXJyeSk7CiAgICAgICAgIApAQCAtOTA1LDExICsxMTk4
LDMyIEBAIGJvb2wgSlNCaWdJbnQ6OmVxdWFscyhKU0JpZ0ludCogeCwgSlNCaWcKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmNvbXBh
cmUoSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KK2lubGluZSBKU0JpZ0ludDo6Q29tcGFyaXNvblJl
c3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVDb21wYXJlKEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpCiB7Ci0gICAgYm9vbCB4U2lnbiA9IHgtPnNpZ24oKTsKKyAgICBBU1NFUlQoIXgubGVuZ3Ro
KCkgfHwgeC5kaWdpdCh4Lmxlbmd0aCgpIC0gMSkpOworICAgIEFTU0VSVCgheS5sZW5ndGgoKSB8
fCB5LmRpZ2l0KHkubGVuZ3RoKCkgLSAxKSk7CisKKyAgICBpbnQgZGlmZiA9IHgubGVuZ3RoKCkg
LSB5Lmxlbmd0aCgpOworICAgIGlmIChkaWZmKQorICAgICAgICByZXR1cm4gZGlmZiA8IDAgPyBD
b21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFu
OworCisgICAgaW50IGkgPSB4Lmxlbmd0aCgpIC0gMTsKKyAgICB3aGlsZSAoaSA+PSAwICYmIHgu
ZGlnaXQoaSkgPT0geS5kaWdpdChpKSkKKyAgICAgICAgaS0tOworCisgICAgaWYgKGkgPCAwKQor
ICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3VsdDo6RXF1YWw7CisKKyAgICByZXR1cm4geC5k
aWdpdChpKSA+IHkuZGlnaXQoaSkgPyBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbiA6IENv
bXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuOworfQogCi0gICAgaWYgKHhTaWduICE9IHktPnNpZ24o
KSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+
CitKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdCBKU0JpZ0ludDo6Y29tcGFyZUltcGwoQmlnSW50
SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKK3sKKyAgICBib29sIHhTaWduID0geC5zaWduKCk7CisK
KyAgICBpZiAoeFNpZ24gIT0geS5zaWduKCkpCiAgICAgICAgIHJldHVybiB4U2lnbiA/IENvbXBh
cmlzb25SZXN1bHQ6Okxlc3NUaGFuIDogQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW47CiAK
ICAgICBDb21wYXJpc29uUmVzdWx0IHJlc3VsdCA9IGFic29sdXRlQ29tcGFyZSh4LCB5KTsKQEAg
LTkyMSw1NiArMTIzNSw1MSBAQCBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdCBKU0JpZ0ludDo6
Y29tCiAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOyAKIH0KIAotaW5saW5lIEpT
QmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZUNvbXBhcmUoSlNCaWdJ
bnQqIHgsIEpTQmlnSW50KiB5KQorSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6
OmNvbXBhcmUoSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewotICAgIEFTU0VSVCgheC0+bGVu
Z3RoKCkgfHwgeC0+ZGlnaXQoeC0+bGVuZ3RoKCkgLSAxKSk7Ci0gICAgQVNTRVJUKCF5LT5sZW5n
dGgoKSB8fCB5LT5kaWdpdCh5LT5sZW5ndGgoKSAtIDEpKTsKLQotICAgIGludCBkaWZmID0geC0+
bGVuZ3RoKCkgLSB5LT5sZW5ndGgoKTsKLSAgICBpZiAoZGlmZikKLSAgICAgICAgcmV0dXJuIGRp
ZmYgPCAwID8gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4gOiBDb21wYXJpc29uUmVzdWx0OjpH
cmVhdGVyVGhhbjsKLQotICAgIGludCBpID0geC0+bGVuZ3RoKCkgLSAxOwotICAgIHdoaWxlIChp
ID49IDAgJiYgeC0+ZGlnaXQoaSkgPT0geS0+ZGlnaXQoaSkpCi0gICAgICAgIGktLTsKLQotICAg
IGlmIChpIDwgMCkKLSAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOwotCi0g
ICAgcmV0dXJuIHgtPmRpZ2l0KGkpID4geS0+ZGlnaXQoaSkgPyBDb21wYXJpc29uUmVzdWx0OjpH
cmVhdGVyVGhhbiA6IENvbXBhcmlzb25SZXN1bHQ6Okxlc3NUaGFuOworICAgIHJldHVybiBjb21w
YXJlSW1wbChIZWFwQmlnSW50SW1wbCB7IHggfSwgSGVhcEJpZ0ludEltcGwgeyB5IH0pOworfQor
SlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6OmNvbXBhcmUoaW50MzJfdCB4LCBK
U0JpZ0ludCogeSkKK3sKKyAgICByZXR1cm4gY29tcGFyZUltcGwoSW50MzJCaWdJbnRJbXBsIHsg
eCB9LCBIZWFwQmlnSW50SW1wbCB7IHkgfSk7Cit9CitKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3Vs
dCBKU0JpZ0ludDo6Y29tcGFyZShKU0JpZ0ludCogeCwgaW50MzJfdCB5KQoreworICAgIHJldHVy
biBjb21wYXJlSW1wbChIZWFwQmlnSW50SW1wbCB7IHggfSwgSW50MzJCaWdJbnRJbXBsIHsgeSB9
KTsKIH0KIAotSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbikK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitK
U0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSwgYm9vbCByZXN1bHRT
aWduKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAotICAgIGlmICh4LT5s
ZW5ndGgoKSA8IHktPmxlbmd0aCgpKQorICAgIGlmICh4Lmxlbmd0aCgpIDwgeS5sZW5ndGgoKSkK
ICAgICAgICAgcmV0dXJuIGFic29sdXRlQWRkKGdsb2JhbE9iamVjdCwgeSwgeCwgcmVzdWx0U2ln
bik7CiAKLSAgICBpZiAoeC0+aXNaZXJvKCkpIHsKLSAgICAgICAgQVNTRVJUKHktPmlzWmVybygp
KTsKKyAgICBpZiAoeC5pc1plcm8oKSkgeworICAgICAgICBBU1NFUlQoeS5pc1plcm8oKSk7CiAg
ICAgICAgIHJldHVybiB4OwogICAgIH0KIAotICAgIGlmICh5LT5pc1plcm8oKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdFNpZ24gPT0geC0+c2lnbigpID8geCA6IHVuYXJ5TWludXNIZWFwKHZtLCB4
KTsKKyAgICBpZiAoeS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdFNpZ24gPT0geC5z
aWduKCkgPyB4IDogdW5hcnlNaW51c0ltcGwodm0sIHgpOwogCi0gICAgSlNCaWdJbnQqIHJlc3Vs
dCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVjdCwgeC0+bGVuZ3Ro
KCkgKyAxKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhM
ZW5ndGgoZ2xvYmFsT2JqZWN0LCB4Lmxlbmd0aCgpICsgMSk7CiAgICAgaWYgKCFyZXN1bHQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIERpZ2l0IGNhcnJ5ID0gMDsKICAgICB1bnNpZ25l
ZCBpID0gMDsKLSAgICBmb3IgKDsgaSA8IHktPmxlbmd0aCgpOyBpKyspIHsKKyAgICBmb3IgKDsg
aSA8IHkubGVuZ3RoKCk7IGkrKykgewogICAgICAgICBEaWdpdCBuZXdDYXJyeSA9IDA7Ci0gICAg
ICAgIERpZ2l0IHN1bSA9IGRpZ2l0QWRkKHgtPmRpZ2l0KGkpLCB5LT5kaWdpdChpKSwgbmV3Q2Fy
cnkpOworICAgICAgICBEaWdpdCBzdW0gPSBkaWdpdEFkZCh4LmRpZ2l0KGkpLCB5LmRpZ2l0KGkp
LCBuZXdDYXJyeSk7CiAgICAgICAgIHN1bSA9IGRpZ2l0QWRkKHN1bSwgY2FycnksIG5ld0NhcnJ5
KTsKICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBzdW0pOwogICAgICAgICBjYXJyeSA9IG5l
d0NhcnJ5OwogICAgIH0KIAotICAgIGZvciAoOyBpIDwgeC0+bGVuZ3RoKCk7IGkrKykgeworICAg
IGZvciAoOyBpIDwgeC5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIERpZ2l0IG5ld0NhcnJ5ID0g
MDsKLSAgICAgICAgRGlnaXQgc3VtID0gZGlnaXRBZGQoeC0+ZGlnaXQoaSksIGNhcnJ5LCBuZXdD
YXJyeSk7CisgICAgICAgIERpZ2l0IHN1bSA9IGRpZ2l0QWRkKHguZGlnaXQoaSksIGNhcnJ5LCBu
ZXdDYXJyeSk7CiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgc3VtKTsKICAgICAgICAgY2Fy
cnkgPSBuZXdDYXJyeTsKICAgICB9CkBAIC05ODEsMzggKzEyOTAsMzkgQEAgSlNCaWdJbnQqIEpT
QmlnSW50OjphYnNvbHV0ZUFkZChKU0dsb2JhbAogICAgIHJldHVybiByZXN1bHQtPnJpZ2h0VHJp
bSh2bSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbikKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3Vs
dCBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBs
MiB5LCBib29sIHJlc3VsdFNpZ24pCiB7CiAgICAgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJpc29u
UmVzdWx0ID0gYWJzb2x1dGVDb21wYXJlKHgsIHkpOwotICAgIEFTU0VSVCh4LT5sZW5ndGgoKSA+
PSB5LT5sZW5ndGgoKSk7CisgICAgQVNTRVJUKHgubGVuZ3RoKCkgPj0geS5sZW5ndGgoKSk7CiAg
ICAgQVNTRVJUKGNvbXBhcmlzb25SZXN1bHQgPT0gQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRo
YW4gfHwgY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVhbCk7CiAKLSAg
ICBpZiAoeC0+aXNaZXJvKCkpIHsKLSAgICAgICAgQVNTRVJUKHktPmlzWmVybygpKTsKKyAgICBp
ZiAoeC5pc1plcm8oKSkgeworICAgICAgICBBU1NFUlQoeS5pc1plcm8oKSk7CiAgICAgICAgIHJl
dHVybiB4OwogICAgIH0KIAotICAgIGlmICh5LT5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdFNpZ24gPT0geC0+c2lnbigpID8geCA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSGVhcCh2bSwg
eCk7CisgICAgaWYgKHkuaXNaZXJvKCkpCisgICAgICAgIHJldHVybiByZXN1bHRTaWduID09IHgu
c2lnbigpID8gSW1wbFJlc3VsdCB7IHggfSA6IEpTQmlnSW50Ojp1bmFyeU1pbnVzSW1wbCh2bSwg
eCk7CiAKICAgICBpZiAoY29tcGFyaXNvblJlc3VsdCA9PSBDb21wYXJpc29uUmVzdWx0OjpFcXVh
bCkKICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVhdGVaZXJvKHZtKTsKIAotICAgIEpTQmln
SW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExlbmd0aFVuY2hlY2tlZCh2bSwgeC0+
bGVuZ3RoKCkpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSBKU0JpZ0ludDo6Y3JlYXRlV2l0aExl
bmd0aFVuY2hlY2tlZCh2bSwgeC5sZW5ndGgoKSk7CiAKICAgICBEaWdpdCBib3Jyb3cgPSAwOwog
ICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIGZvciAoOyBpIDwgeS0+bGVuZ3RoKCk7IGkrKykgewor
ICAgIGZvciAoOyBpIDwgeS5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIERpZ2l0IG5ld0JvcnJv
dyA9IDA7Ci0gICAgICAgIERpZ2l0IGRpZmZlcmVuY2UgPSBkaWdpdFN1Yih4LT5kaWdpdChpKSwg
eS0+ZGlnaXQoaSksIG5ld0JvcnJvdyk7CisgICAgICAgIERpZ2l0IGRpZmZlcmVuY2UgPSBkaWdp
dFN1Yih4LmRpZ2l0KGkpLCB5LmRpZ2l0KGkpLCBuZXdCb3Jyb3cpOwogICAgICAgICBkaWZmZXJl
bmNlID0gZGlnaXRTdWIoZGlmZmVyZW5jZSwgYm9ycm93LCBuZXdCb3Jyb3cpOwogICAgICAgICBy
ZXN1bHQtPnNldERpZ2l0KGksIGRpZmZlcmVuY2UpOwogICAgICAgICBib3Jyb3cgPSBuZXdCb3Jy
b3c7CiAgICAgfQogCi0gICAgZm9yICg7IGkgPCB4LT5sZW5ndGgoKTsgaSsrKSB7CisgICAgZm9y
ICg7IGkgPCB4Lmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgRGlnaXQgbmV3Qm9ycm93ID0gMDsK
LSAgICAgICAgRGlnaXQgZGlmZmVyZW5jZSA9IGRpZ2l0U3ViKHgtPmRpZ2l0KGkpLCBib3Jyb3cs
IG5ld0JvcnJvdyk7CisgICAgICAgIERpZ2l0IGRpZmZlcmVuY2UgPSBkaWdpdFN1Yih4LmRpZ2l0
KGkpLCBib3Jyb3csIG5ld0JvcnJvdyk7CiAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgZGlm
ZmVyZW5jZSk7CiAgICAgICAgIGJvcnJvdyA9IG5ld0JvcnJvdzsKICAgICB9CkBAIC0xMDI5LDMw
ICsxMzM5LDMxIEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWIoVk0mIHZtLCAKIC8v
IGFsbG9jYXRlZCBmb3IgaXQ7IG90aGVyd2lzZSB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQg
aXQgaXMgYmlnIGVub3VnaC4KIC8vIHtxdW90aWVudH0gY2FuIGJlIHRoZSBzYW1lIGFzIHt4fSBm
b3IgYW4gaW4tcGxhY2UgZGl2aXNpb24uIHtxdW90aWVudH0gY2FuCiAvLyBhbHNvIGJlIG51bGxw
dHIgaWYgdGhlIGNhbGxlciBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHJlbWFpbmRlci4KLXZv
aWQgSlNCaWdJbnQ6OmFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihWTSYgdm0sIEpTQmlnSW50
KiB4LCBEaWdpdCBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBEaWdpdCYgcmVtYWluZGVy
KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+Cit2b2lkIEpTQmlnSW50OjphYnNvbHV0
ZURpdldpdGhEaWdpdERpdmlzb3IoVk0mIHZtLCBCaWdJbnRJbXBsIHgsIERpZ2l0IGRpdmlzb3Is
IEpTQmlnSW50KiogcXVvdGllbnQsIERpZ2l0JiByZW1haW5kZXIpCiB7CiAgICAgQVNTRVJUKGRp
dmlzb3IpOwogCi0gICAgQVNTRVJUKCF4LT5pc1plcm8oKSk7CisgICAgQVNTRVJUKCF4LmlzWmVy
bygpKTsKICAgICByZW1haW5kZXIgPSAwOwogICAgIGlmIChkaXZpc29yID09IDEpIHsKLSAgICAg
ICAgaWYgKHF1b3RpZW50ICE9IG51bGxwdHIpCi0gICAgICAgICAgICAqcXVvdGllbnQgPSB4Owor
ICAgICAgICBpZiAocXVvdGllbnQpCisgICAgICAgICAgICAqcXVvdGllbnQgPSB4LnRvSGVhcEJp
Z0ludCh2bSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSB4LT5sZW5ndGgoKTsKLSAgICBpZiAocXVvdGllbnQgIT0gbnVsbHB0cikgeworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CisgICAgaWYgKHF1b3RpZW50KSB7CiAgICAgICAgIGlm
ICgqcXVvdGllbnQgPT0gbnVsbHB0cikKICAgICAgICAgICAgICpxdW90aWVudCA9IEpTQmlnSW50
OjpjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBsZW5ndGgpOwogCiAgICAgICAgIGZvciAo
aW50IGkgPSBsZW5ndGggLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgRGlnaXQgcSA9
IGRpZ2l0RGl2KHJlbWFpbmRlciwgeC0+ZGlnaXQoaSksIGRpdmlzb3IsIHJlbWFpbmRlcik7Cisg
ICAgICAgICAgICBEaWdpdCBxID0gZGlnaXREaXYocmVtYWluZGVyLCB4LmRpZ2l0KGkpLCBkaXZp
c29yLCByZW1haW5kZXIpOwogICAgICAgICAgICAgKCpxdW90aWVudCktPnNldERpZ2l0KGksIHEp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGxlbmd0aCAt
IDE7IGkgPj0gMDsgaS0tKQotICAgICAgICAgICAgZGlnaXREaXYocmVtYWluZGVyLCB4LT5kaWdp
dChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKKyAgICAgICAgICAgIGRpZ2l0RGl2KHJlbWFpbmRl
ciwgeC5kaWdpdChpKSwgZGl2aXNvciwgcmVtYWluZGVyKTsKICAgICB9CiB9CiAKQEAgLTEwNjIs
MTAgKzEzNzMsMTEgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpcwog
Ly8gQm90aCB7cXVvdGllbnR9IGFuZCB7cmVtYWluZGVyfSBhcmUgb3B0aW9uYWwsIGZvciBjYWxs
ZXJzIHRoYXQgYXJlIG9ubHkKIC8vIGludGVyZXN0ZWQgaW4gb25lIG9mIHRoZW0uCiAvLyBTZWUg
S251dGgsIFZvbHVtZSAyLCBzZWN0aW9uIDQuMy4xLCBBbGdvcml0aG0gRC4KLXZvaWQgSlNCaWdJ
bnQ6OmFic29sdXRlRGl2V2l0aEJpZ0ludERpdmlzb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNCaWdJbnQqIGRpdmlkZW5kLCBKU0JpZ0ludCogZGl2aXNvciwgSlNCaWdJbnQqKiBx
dW90aWVudCwgSlNCaWdJbnQqKiByZW1haW5kZXIpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50
SW1wbDE+Cit2b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhCaWdJbnREaXZpc29yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIGRpdmlkZW5kLCBKU0JpZ0ludCog
ZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgSlNCaWdJbnQqKiByZW1haW5kZXIpCiB7CiAg
ICAgQVNTRVJUKGRpdmlzb3ItPmxlbmd0aCgpID49IDIpOwotICAgIEFTU0VSVChkaXZpZGVuZC0+
bGVuZ3RoKCkgPj0gZGl2aXNvci0+bGVuZ3RoKCkpOworICAgIEFTU0VSVChkaXZpZGVuZC5sZW5n
dGgoKSA+PSBkaXZpc29yLT5sZW5ndGgoKSk7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIApAQCAtMTA3
NCw3ICsxMzg2LDcgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aQog
ICAgIC8vIE1haW50YWluaW5nIHRoaXMgY29uc2lzdGVuY3kgaXMgcHJvYmFibHkgbW9yZSB1c2Vm
dWwgdGhhbiB0cnlpbmcgdG8KICAgICAvLyBjb21lIHVwIHdpdGggbW9yZSBkZXNjcmlwdGl2ZSBu
YW1lcyBmb3IgdGhlbS4KICAgICB1bnNpZ25lZCBuID0gZGl2aXNvci0+bGVuZ3RoKCk7Ci0gICAg
dW5zaWduZWQgbSA9IGRpdmlkZW5kLT5sZW5ndGgoKSAtIG47CisgICAgdW5zaWduZWQgbSA9IGRp
dmlkZW5kLmxlbmd0aCgpIC0gbjsKICAgICAKICAgICAvLyBUaGUgcXVvdGllbnQgdG8gYmUgY29t
cHV0ZWQuCiAgICAgSlNCaWdJbnQqIHEgPSBudWxscHRyOwpAQCAtMTA5NSw3ICsxNDA3LDcgQEAg
dm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2aQogICAgIHVuc2lnbmVkIHNo
aWZ0ID0gY2x6KGxhc3REaWdpdCk7CiAKICAgICBpZiAoc2hpZnQgPiAwKSB7Ci0gICAgICAgIGRp
dmlzb3IgPSBhYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoZ2xvYmFsT2JqZWN0LCBkaXZpc29y
LCBzaGlmdCwgTGVmdFNoaWZ0TW9kZTo6U2FtZVNpemVSZXN1bHQpOworICAgICAgICBkaXZpc29y
ID0gYWJzb2x1dGVMZWZ0U2hpZnRBbHdheXNDb3B5KGdsb2JhbE9iamVjdCwgSGVhcEJpZ0ludElt
cGwgeyBkaXZpc29yIH0sIHNoaWZ0LCBMZWZ0U2hpZnRNb2RlOjpTYW1lU2l6ZVJlc3VsdCk7CiAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgfQogCkBAIC0x
MTQ0LDcgKzE0NTYsNyBAQCB2b2lkIEpTQmlnSW50OjphYnNvbHV0ZURpdldpdGhCaWdJbnREaXZp
CiAgICAgICAgIC8vIGl0IGZyb20gdGhlIGRpdmlkZW5kLiBJZiB0aGVyZSB3YXMgImJvcnJvdyIs
IHRoZW4gdGhlIHF1b3RpZW50IGRpZ2l0CiAgICAgICAgIC8vIHdhcyBvbmUgdG9vIGhpZ2gsIHNv
IHdlIG11c3QgY29ycmVjdCBpdCBhbmQgdW5kbyBvbmUgc3VidHJhY3Rpb24gb2YKICAgICAgICAg
Ly8gdGhlIChzaGlmdGVkKSBkaXZpc29yLgotICAgICAgICBpbnRlcm5hbE11bHRpcGx5QWRkKGRp
dmlzb3IsIHFoYXQsIDAsIG4sIHFoYXR2KTsKKyAgICAgICAgaW50ZXJuYWxNdWx0aXBseUFkZChI
ZWFwQmlnSW50SW1wbCB7IGRpdmlzb3IgfSwgcWhhdCwgMCwgbiwgcWhhdHYpOwogICAgICAgICBE
aWdpdCBjID0gdS0+YWJzb2x1dGVJbnBsYWNlU3ViKHFoYXR2LCBqKTsKICAgICAgICAgaWYgKGMp
IHsKICAgICAgICAgICAgIGMgPSB1LT5hYnNvbHV0ZUlucGxhY2VBZGQoZGl2aXNvciwgaik7CkBA
IC0xMjMwLDEyICsxNTQyLDEzIEBAIHZvaWQgSlNCaWdJbnQ6OmlucGxhY2VSaWdodFNoaWZ0KHVu
c2lnbmUKIH0KIAogLy8gQWx3YXlzIGNvcGllcyB0aGUgaW5wdXQsIGV2ZW4gd2hlbiB7c2hpZnR9
ID09IDAuCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgdW5zaWduZWQgc2hpZnQs
IExlZnRTaGlmdE1vZGUgbW9kZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNC
aWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQmlnSW50SW1wbCB4LCB1bnNpZ25lZCBzaGlmdCwgTGVmdFNoaWZ0
TW9kZSBtb2RlKQogewogICAgIEFTU0VSVChzaGlmdCA8IGRpZ2l0Qml0cyk7Ci0gICAgQVNTRVJU
KCF4LT5pc1plcm8oKSk7CisgICAgQVNTRVJUKCF4LmlzWmVybygpKTsKIAotICAgIHVuc2lnbmVk
IG4gPSB4LT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBuID0geC5sZW5ndGgoKTsKICAgICB1bnNp
Z25lZCByZXN1bHRMZW5ndGggPSBtb2RlID09IExlZnRTaGlmdE1vZGU6OkFsd2F5c0FkZE9uZURp
Z2l0ID8gbiArIDEgOiBuOwogICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVu
Z3RoKGdsb2JhbE9iamVjdCwgcmVzdWx0TGVuZ3RoKTsKICAgICBpZiAoIXJlc3VsdCkKQEAgLTEy
NDMsNyArMTU1Niw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVMZWZ0U2hpZnRBbHcK
IAogICAgIGlmICghc2hpZnQpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47
IGkrKykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC0+ZGlnaXQoaSkpOworICAg
ICAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCB4LmRpZ2l0KGkpKTsKICAgICAgICAgaWYgKG1v
ZGUgPT0gTGVmdFNoaWZ0TW9kZTo6QWx3YXlzQWRkT25lRGlnaXQpCiAgICAgICAgICAgICByZXN1
bHQtPnNldERpZ2l0KG4sIDApOwogCkBAIC0xMjUyLDcgKzE1NjUsNyBAQCBKU0JpZ0ludCogSlNC
aWdJbnQ6OmFic29sdXRlTGVmdFNoaWZ0QWx3CiAKICAgICBEaWdpdCBjYXJyeSA9IDA7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBEaWdpdCBkID0geC0+
ZGlnaXQoaSk7CisgICAgICAgIERpZ2l0IGQgPSB4LmRpZ2l0KGkpOwogICAgICAgICByZXN1bHQt
PnNldERpZ2l0KGksIChkIDw8IHNoaWZ0KSB8IGNhcnJ5KTsKICAgICAgICAgY2FycnkgPSBkID4+
IChkaWdpdEJpdHMgLSBzaGlmdCk7CiAgICAgfQpAQCAtMTI3MCw4ICsxNTgzLDggQEAgSlNCaWdJ
bnQqIEpTQmlnSW50OjphYnNvbHV0ZUxlZnRTaGlmdEFsdwogLy8gSGVscGVyIGZvciBBYnNvbHV0
ZXtBbmQsQW5kTm90LE9yLFhvcn0uCiAvLyBQZXJmb3JtcyB0aGUgZ2l2ZW4gYmluYXJ5IHtvcH0g
b24gZGlnaXQgcGFpcnMgb2Yge3h9IGFuZCB7eX07IHdoZW4gdGhlCiAvLyBlbmQgb2YgdGhlIHNo
b3J0ZXIgb2YgdGhlIHR3byBpcyByZWFjaGVkLCB7ZXh0cmFEaWdpdHN9IGNvbmZpZ3VyZXMgaG93
Ci0vLyByZW1haW5pbmcgZGlnaXRzIGluIHRoZSBsb25nZXIgaW5wdXQgKGlmIHtzeW1tZXRyaWN9
ID09IFN5bW1ldHJpYywgaW4KLS8vIHt4fSBvdGhlcndpc2UpIGFyZSBoYW5kbGVkOiBjb3BpZWQg
dG8gdGhlIHJlc3VsdCBvciBpZ25vcmVkLgorLy8gcmVtYWluaW5nIGRpZ2l0cyBpbiB0aGUgbG9u
Z2VyIGlucHV0IGFyZSBoYW5kbGVkOiBjb3BpZWQgdG8gdGhlIHJlc3VsdAorLy8gb3IgaWdub3Jl
ZC4KIC8vIEV4YW1wbGU6CiAvLyAgICAgICB5OiAgICAgICAgICAgICBbIHkyIF1bIHkxIF1bIHkw
IF0KIC8vICAgICAgIHg6ICAgICAgIFsgeDMgXVsgeDIgXVsgeDEgXVsgeDAgXQpAQCAtMTI4MCwz
MCArMTU5MywzNCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlTGVmdFNoaWZ0QWx3CiAv
LyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICB8ICAgICB8CiAvLyAgICAgICAgICAgICAg
ICAgICB2ICAgICB2ICAgICB2ICAgICB2CiAvLyByZXN1bHQ6IFsgIDAgXVsgeDMgXVsgcjIgXVsg
cjEgXVsgcjAgXQotdGVtcGxhdGU8dHlwZW5hbWUgQml0d2lzZU9wPgotaW5saW5lIEpTQmlnSW50
KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aXNlT3AoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMsIFN5bW1ldHJpY09wIHN5bW1l
dHJpYywgQml0d2lzZU9wJiYgb3ApCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5
cGVuYW1lIEJpZ0ludEltcGwyLCB0eXBlbmFtZSBCaXR3aXNlT3A+CitpbmxpbmUgSlNCaWdJbnQq
IEpTQmlnSW50OjphYnNvbHV0ZUJpdHdpc2VPcChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHksIEV4dHJhRGlnaXRzSGFuZGxpbmcgZXh0cmFEaWdpdHMsIEJpdHdpc2VPcCYmIG9w
KQogewotICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4LT5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCB5
TGVuZ3RoID0geS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgeExlbmd0aCA9IHgubGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgeUxlbmd0aCA9IHkubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgbnVtUGFp
cnMgPSB5TGVuZ3RoOworICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IHhMZW5ndGg7CiAgICAgaWYg
KHhMZW5ndGggPCB5TGVuZ3RoKSB7CiAgICAgICAgIG51bVBhaXJzID0geExlbmd0aDsKLSAgICAg
ICAgaWYgKHN5bW1ldHJpYyA9PSBTeW1tZXRyaWNPcDo6U3ltbWV0cmljKSB7Ci0gICAgICAgICAg
ICBzdGQ6OnN3YXAoeCwgeSk7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAoeExlbmd0aCwgeUxlbmd0
aCk7Ci0gICAgICAgIH0KKyAgICAgICAgbWF4TGVuZ3RoID0geUxlbmd0aDsKICAgICB9CiAKICAg
ICBBU1NFUlQobnVtUGFpcnMgPT0gc3RkOjptaW4oeExlbmd0aCwgeUxlbmd0aCkpOwotICAgIHVu
c2lnbmVkIHJlc3VsdExlbmd0aCA9IGV4dHJhRGlnaXRzID09IEV4dHJhRGlnaXRzSGFuZGxpbmc6
OkNvcHkgPyB4TGVuZ3RoIDogbnVtUGFpcnM7CisgICAgQVNTRVJUKG1heExlbmd0aCA9PSBzdGQ6
Om1heCh4TGVuZ3RoLCB5TGVuZ3RoKSk7CisgICAgdW5zaWduZWQgcmVzdWx0TGVuZ3RoID0gZXh0
cmFEaWdpdHMgPT0gRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSA/IG1heExlbmd0aCA6IG51bVBh
aXJzOwogICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZt
LCByZXN1bHRMZW5ndGgpOwogICAgIHVuc2lnbmVkIGkgPSAwOwogICAgIGZvciAoOyBpIDwgbnVt
UGFpcnM7IGkrKykKLSAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBvcCh4LT5kaWdpdChpKSwg
eS0+ZGlnaXQoaSkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBvcCh4LmRpZ2l0KGkp
LCB5LmRpZ2l0KGkpKSk7CiAKICAgICBpZiAoZXh0cmFEaWdpdHMgPT0gRXh0cmFEaWdpdHNIYW5k
bGluZzo6Q29weSkgewotICAgICAgICBmb3IgKDsgaSA8IHhMZW5ndGg7IGkrKykKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC0+ZGlnaXQoaSkpOworICAgICAgICBpZiAoeExlbmd0
aCA+IHlMZW5ndGgpIHsKKyAgICAgICAgICAgIGZvciAoOyBpIDwgeExlbmd0aDsgaSsrKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwgeC5kaWdpdChpKSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBmb3IgKDsgaSA8IHlMZW5ndGg7IGkrKykKKyAgICAgICAgICAg
ICAgICByZXN1bHQtPnNldERpZ2l0KGksIHkuZGlnaXQoaSkpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgZm9yICg7IGkgPCByZXN1bHRMZW5ndGg7IGkrKykKQEAgLTEzMTIsNDYgKzE2MjksNjEg
QEAgaW5saW5lIEpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVCaXR3aQogICAgIHJldHVybiBy
ZXN1bHQtPnJpZ2h0VHJpbSh2bSk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVB
bmQoVk0mIHZtLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorSlNCaWdJbnQqIEpTQmlnSW50Ojph
YnNvbHV0ZUFuZChWTSYgdm0sIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpCiB7CiAgICAg
YXV0byBkaWdpdE9wZXJhdGlvbiA9IFtdKERpZ2l0IGEsIERpZ2l0IGIpIHsKICAgICAgICAgcmV0
dXJuIGEgJiBiOwogICAgIH07Ci0gICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5
LCBFeHRyYURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBTeW1tZXRyaWNPcDo6U3ltbWV0cmljLCBkaWdp
dE9wZXJhdGlvbik7CisgICAgcmV0dXJuIGFic29sdXRlQml0d2lzZU9wKHZtLCB4LCB5LCBFeHRy
YURpZ2l0c0hhbmRsaW5nOjpTa2lwLCBkaWdpdE9wZXJhdGlvbik7CiB9CiAKLUpTQmlnSW50KiBK
U0JpZ0ludDo6YWJzb2x1dGVPcihWTSYgdm0sIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlT3IoVk0mIHZtLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJ
bXBsMiB5KQogewogICAgIGF1dG8gZGlnaXRPcGVyYXRpb24gPSBbXShEaWdpdCBhLCBEaWdpdCBi
KSB7CiAgICAgICAgIHJldHVybiBhIHwgYjsKICAgICB9OwotICAgIHJldHVybiBhYnNvbHV0ZUJp
dHdpc2VPcCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgU3ltbWV0cmljT3A6
OlN5bW1ldHJpYywgZGlnaXRPcGVyYXRpb24pOworICAgIHJldHVybiBhYnNvbHV0ZUJpdHdpc2VP
cCh2bSwgeCwgeSwgRXh0cmFEaWdpdHNIYW5kbGluZzo6Q29weSwgZGlnaXRPcGVyYXRpb24pOwog
fQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQW5kTm90KFZNJiB2bSwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KK0pTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBbmROb3QoVk0mIHZt
LCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KQogewotICAgIGF1dG8gZGlnaXRPcGVyYXRp
b24gPSBbXShEaWdpdCBhLCBEaWdpdCBiKSB7Ci0gICAgICAgIHJldHVybiBhICYgfmI7Ci0gICAg
fTsKLSAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFu
ZGxpbmc6OkNvcHksIFN5bW1ldHJpY09wOjpOb3RTeW1tZXRyaWMsIGRpZ2l0T3BlcmF0aW9uKTsK
KyAgICAvLyB4ICYgfnkKKworICAgIHVuc2lnbmVkIHhMZW5ndGggPSB4Lmxlbmd0aCgpOworICAg
IHVuc2lnbmVkIHlMZW5ndGggPSB5Lmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0
aCA9IHhMZW5ndGg7CisKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gY3JlYXRlV2l0aExlbmd0aFVu
Y2hlY2tlZCh2bSwgcmVzdWx0TGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBmb3Ig
KDsgaSA8IHN0ZDo6bWluKHhMZW5ndGgsIHlMZW5ndGgpOyBpKyspCisgICAgICAgIHJlc3VsdC0+
c2V0RGlnaXQoaSwgeC5kaWdpdChpKSAmIH55LmRpZ2l0KGkpKTsKKyAgICBmb3IgKDsgaSA8IHJl
c3VsdExlbmd0aDsgKytpKQorICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGlnaXQoaSkp
OworCisgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0KIAotSlNCaWdJbnQqIEpT
QmlnSW50OjphYnNvbHV0ZVhvcihWTSYgdm0sIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0Jp
Z0ludCogSlNCaWdJbnQ6OmFic29sdXRlWG9yKFZNJiB2bSwgQmlnSW50SW1wbDEgeCwgQmlnSW50
SW1wbDIgeSkKIHsKICAgICBhdXRvIGRpZ2l0T3BlcmF0aW9uID0gW10oRGlnaXQgYSwgRGlnaXQg
YikgewogICAgICAgICByZXR1cm4gYSBeIGI7CiAgICAgfTsKLSAgICByZXR1cm4gYWJzb2x1dGVC
aXR3aXNlT3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIFN5bW1ldHJpY09w
OjpTeW1tZXRyaWMsIGRpZ2l0T3BlcmF0aW9uKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCaXR3aXNl
T3Aodm0sIHgsIHksIEV4dHJhRGlnaXRzSGFuZGxpbmc6OkNvcHksIGRpZ2l0T3BlcmF0aW9uKTsK
IH0KICAgICAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGRPbmUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIFNpZ25PcHRpb24gc2lnbk9wdGlvbikKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0
ZUFkZE9uZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIFNpZ25P
cHRpb24gc2lnbk9wdGlvbikKIHsKLSAgICB1bnNpZ25lZCBpbnB1dExlbmd0aCA9IHgtPmxlbmd0
aCgpOworICAgIHVuc2lnbmVkIGlucHV0TGVuZ3RoID0geC5sZW5ndGgoKTsKICAgICAvLyBUaGUg
YWRkaXRpb24gd2lsbCBvdmVyZmxvdyBpbnRvIGEgbmV3IGRpZ2l0IGlmIGFsbCBleGlzdGluZyBk
aWdpdHMgYXJlCiAgICAgLy8gYXQgbWF4aW11bS4KICAgICBib29sIHdpbGxPdmVyZmxvdyA9IHRy
dWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8RGlnaXQ+OjptYXgoKSAhPSB4LT5kaWdpdChp
KSkgeworICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxEaWdpdD46Om1heCgpICE9IHgu
ZGlnaXQoaSkpIHsKICAgICAgICAgICAgIHdpbGxPdmVyZmxvdyA9IGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEzNjUsNyArMTY5Nyw3IEBAIEpTQmlnSW50KiBKU0Jp
Z0ludDo6YWJzb2x1dGVBZGRPbmUoSlNHbG8KICAgICBEaWdpdCBjYXJyeSA9IDE7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKICAgICAgICAgRGlnaXQg
bmV3Q2FycnkgPSAwOwotICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIGRpZ2l0QWRkKHgtPmRp
Z2l0KGkpLCBjYXJyeSwgbmV3Q2FycnkpKTsKKyAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBk
aWdpdEFkZCh4LmRpZ2l0KGkpLCBjYXJyeSwgbmV3Q2FycnkpKTsKICAgICAgICAgY2FycnkgPSBu
ZXdDYXJyeTsKICAgICB9CiAgICAgaWYgKHJlc3VsdExlbmd0aCA+IGlucHV0TGVuZ3RoKQpAQCAt
MTM3NywyMSArMTcwOSwyMiBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlQWRkT25lKEpT
R2xvCiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKGdsb2JhbE9iamVjdC0+dm0oKSk7CiB9
CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJlc3VsdExlbmd0aCkKK3RlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZVN1Yk9u
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBCaWdJbnRJbXBsIHgsIHVuc2lnbmVkIHJl
c3VsdExlbmd0aCkKIHsKLSAgICBBU1NFUlQoIXgtPmlzWmVybygpKTsKLSAgICBBU1NFUlQocmVz
dWx0TGVuZ3RoID49IHgtPmxlbmd0aCgpKTsKKyAgICBBU1NFUlQoIXguaXNaZXJvKCkpOworICAg
IEFTU0VSVChyZXN1bHRMZW5ndGggPj0geC5sZW5ndGgoKSk7CiAgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
IAogICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGdsb2JhbE9iamVj
dCwgcmVzdWx0TGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRy
KTsKIAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgtPmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHgubGVuZ3RoKCk7CiAgICAgRGlnaXQgYm9ycm93ID0gMTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgRGlnaXQgbmV3Qm9ycm93ID0g
MDsKLSAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBkaWdpdFN1Yih4LT5kaWdpdChpKSwgYm9y
cm93LCBuZXdCb3Jyb3cpKTsKKyAgICAgICAgcmVzdWx0LT5zZXREaWdpdChpLCBkaWdpdFN1Yih4
LmRpZ2l0KGkpLCBib3Jyb3csIG5ld0JvcnJvdykpOwogICAgICAgICBib3Jyb3cgPSBuZXdCb3Jy
b3c7CiAgICAgfQogICAgIEFTU0VSVCghYm9ycm93KTsKQEAgLTE0MDEsNyArMTczNCw4IEBAIEpT
QmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVTdWJPbmUoSlNHbG8KICAgICByZXR1cm4gcmVzdWx0
LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJbnQ6OmxlZnRTaGlmdEJ5QWJz
b2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQordGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KK0pTQmlnSW50OjpJbXBsUmVzdWx0IEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkp
CiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE0MTUsOCArMTc0OSw4IEBAIEpTQmlnSW50KiBK
U0JpZ0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZSgKICAgICBEaWdpdCBzaGlmdCA9ICpvcHRpb25h
bFNoaWZ0OwogICAgIHVuc2lnbmVkIGRpZ2l0U2hpZnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c2hpZnQgLyBkaWdpdEJpdHMpOwogICAgIHVuc2lnbmVkIGJpdHNTaGlmdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzaGlmdCAlIGRpZ2l0Qml0cyk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0geC0+
bGVuZ3RoKCk7Ci0gICAgYm9vbCBncm93ID0gYml0c1NoaWZ0ICYmICh4LT5kaWdpdChsZW5ndGgg
LSAxKSA+PiAoZGlnaXRCaXRzIC0gYml0c1NoaWZ0KSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0g
eC5sZW5ndGgoKTsKKyAgICBib29sIGdyb3cgPSBiaXRzU2hpZnQgJiYgKHguZGlnaXQobGVuZ3Ro
IC0gMSkgPj4gKGRpZ2l0Qml0cyAtIGJpdHNTaGlmdCkpOwogICAgIGludCByZXN1bHRMZW5ndGgg
PSBsZW5ndGggKyBkaWdpdFNoaWZ0ICsgZ3JvdzsKICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHJlc3VsdExlbmd0aCkgPiBtYXhMZW5ndGgpIHsKICAgICAgICAgdGhyb3dSYW5nZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsICJCaWdJbnQgZ2VuZXJhdGVkIGZyb20gdGhpcyBvcGVyYXRp
b24gaXMgdG9vIGJpZyJfcyk7CkBAIC0xNDMxLDE0ICsxNzY1LDE0IEBAIEpTQmlnSW50KiBKU0Jp
Z0ludDo6bGVmdFNoaWZ0QnlBYnNvbHV0ZSgKICAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQo
aSwgMHVsKTsKIAogICAgICAgICBmb3IgKDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1
bHRMZW5ndGgpOyBpKyspCi0gICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHgtPmRpZ2l0
KGkgLSBkaWdpdFNoaWZ0KSk7CisgICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIHguZGln
aXQoaSAtIGRpZ2l0U2hpZnQpKTsKICAgICB9IGVsc2UgewogICAgICAgICBEaWdpdCBjYXJyeSA9
IDA7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaWdpdFNoaWZ0OyBpKyspCiAg
ICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGksIDB1bCk7CiAKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBEaWdpdCBkID0geC0+
ZGlnaXQoaSk7CisgICAgICAgICAgICBEaWdpdCBkID0geC5kaWdpdChpKTsKICAgICAgICAgICAg
IHJlc3VsdC0+c2V0RGlnaXQoaSArIGRpZ2l0U2hpZnQsIChkIDw8IGJpdHNTaGlmdCkgfCBjYXJy
eSk7CiAgICAgICAgICAgICBjYXJyeSA9IGQgPj4gKGRpZ2l0Qml0cyAtIGJpdHNTaGlmdCk7CiAg
ICAgICAgIH0KQEAgLTE0NDksMTUgKzE3ODMsMTYgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0
U2hpZnRCeUFic29sdXRlKAogICAgICAgICAgICAgQVNTRVJUKCFjYXJyeSk7CiAgICAgfQogCi0g
ICAgcmVzdWx0LT5zZXRTaWduKHgtPnNpZ24oKSk7CisgICAgcmVzdWx0LT5zZXRTaWduKHguc2ln
bigpKTsKICAgICByZXR1cm4gcmVzdWx0LT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCog
SlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJ
bXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CitKU0JpZ0ludDo6SW1wbFJlc3VsdCBKU0JpZ0lu
dDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQmln
SW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0geC0+bGVuZ3RoKCk7Ci0gICAgYm9vbCBzaWdu
ID0geC0+c2lnbigpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgubGVuZ3RoKCk7CisgICAgYm9v
bCBzaWduID0geC5zaWduKCk7CiAgICAgYXV0byBvcHRpb25hbFNoaWZ0ID0gdG9TaGlmdEFtb3Vu
dCh5KTsKICAgICBpZiAoIW9wdGlvbmFsU2hpZnQpCiAgICAgICAgIHJldHVybiByaWdodFNoaWZ0
QnlNYXhpbXVtKHZtLCBzaWduKTsKQEAgLTE0NzYsMTEgKzE4MTEsMTEgQEAgSlNCaWdJbnQqIEpT
QmlnSW50OjpyaWdodFNoaWZ0QnlBYnNvbHV0ZQogICAgIGJvb2wgbXVzdFJvdW5kRG93biA9IGZh
bHNlOwogICAgIGlmIChzaWduKSB7CiAgICAgICAgIGNvbnN0IERpZ2l0IG1hc2sgPSAoc3RhdGlj
X2Nhc3Q8RGlnaXQ+KDEpIDw8IGJpdHNTaGlmdCkgLSAxOwotICAgICAgICBpZiAoeC0+ZGlnaXQo
ZGlnaXRhbFNoaWZ0KSAmIG1hc2spCisgICAgICAgIGlmICh4LmRpZ2l0KGRpZ2l0YWxTaGlmdCkg
JiBtYXNrKQogICAgICAgICAgICAgbXVzdFJvdW5kRG93biA9IHRydWU7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRpZ2l0YWxTaGlmdDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHgtPmRpZ2l0KGkpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHguZGlnaXQoaSkpIHsKICAgICAgICAgICAgICAgICAgICAgbXVzdFJvdW5kRG93biA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTE0
OTEsNyArMTgyNiw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6cmlnaHRTaGlmdEJ5QWJzb2x1dGUK
ICAgICAvLyBJZiBiaXRzU2hpZnQgaXMgbm9uLXplcm8sIGl0IGZyZWVzIHVwIGJpdHMsIHByZXZl
bnRpbmcgb3ZlcmZsb3cuCiAgICAgaWYgKG11c3RSb3VuZERvd24gJiYgIWJpdHNTaGlmdCkgewog
ICAgICAgICAvLyBPdmVyZmxvdyBjYW5ub3QgaGFwcGVuIGlmIHRoZSBtb3N0IHNpZ25pZmljYW50
IGRpZ2l0IGhhcyB1bnNldCBiaXRzLgotICAgICAgICBEaWdpdCBtc2QgPSB4LT5kaWdpdChsZW5n
dGggLSAxKTsKKyAgICAgICAgRGlnaXQgbXNkID0geC5kaWdpdChsZW5ndGggLSAxKTsKICAgICAg
ICAgYm9vbCByb3VuZGluZ0Nhbk92ZXJmbG93ID0gIXN0YXRpY19jYXN0PERpZ2l0Pih+bXNkKTsK
ICAgICAgICAgaWYgKHJvdW5kaW5nQ2FuT3ZlcmZsb3cpCiAgICAgICAgICAgICByZXN1bHRMZW5n
dGgrKzsKQEAgLTE1MDEsMTIgKzE4MzYsMTIgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNo
aWZ0QnlBYnNvbHV0ZQogICAgIEpTQmlnSW50KiByZXN1bHQgPSBjcmVhdGVXaXRoTGVuZ3RoVW5j
aGVja2VkKHZtLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0TGVuZ3RoKSk7CiAgICAgaWYg
KCFiaXRzU2hpZnQpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGlnaXRhbFNoaWZ0OyBp
IDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAgICByZXN1bHQtPnNldERpZ2l0KGkgLSBkaWdpdGFs
U2hpZnQsIHgtPmRpZ2l0KGkpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSAtIGRp
Z2l0YWxTaGlmdCwgeC5kaWdpdChpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgRGlnaXQgY2Fy
cnkgPSB4LT5kaWdpdChkaWdpdGFsU2hpZnQpID4+IGJpdHNTaGlmdDsKKyAgICAgICAgRGlnaXQg
Y2FycnkgPSB4LmRpZ2l0KGRpZ2l0YWxTaGlmdCkgPj4gYml0c1NoaWZ0OwogICAgICAgICB1bnNp
Z25lZCBsYXN0ID0gbGVuZ3RoIC0gZGlnaXRhbFNoaWZ0IC0gMTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxhc3Q7IGkrKykgewotICAgICAgICAgICAgRGlnaXQgZCA9IHgtPmRp
Z2l0KGkgKyBkaWdpdGFsU2hpZnQgKyAxKTsKKyAgICAgICAgICAgIERpZ2l0IGQgPSB4LmRpZ2l0
KGkgKyBkaWdpdGFsU2hpZnQgKyAxKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0RGlnaXQoaSwg
KGQgPDwgKGRpZ2l0Qml0cyAtIGJpdHNTaGlmdCkpIHwgY2FycnkpOwogICAgICAgICAgICAgY2Fy
cnkgPSBkID4+IGJpdHNTaGlmdDsKICAgICAgICAgfQpAQCAtMTUxOSwxNCArMTg1NCwxNCBAQCBK
U0JpZ0ludCogSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeUFic29sdXRlCiAgICAgICAgICAgICAvLyBT
aW5jZSB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCByb3VuZGluZyBkb3duIG1lYW5zIGFkZGluZyBv
bmUgdG8KICAgICAgICAgICAgIC8vIGl0cyBhYnNvbHV0ZSB2YWx1ZS4gVGhpcyBjYW5ub3Qgb3Zl
cmZsb3cuCiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPnJpZ2h0VHJpbSh2bSk7Ci0gICAg
ICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFsT2JqZWN0LCByZXN1bHQsIFNpZ25P
cHRpb246OlNpZ25lZCk7CisgICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGRPbmUoZ2xvYmFs
T2JqZWN0LCBIZWFwQmlnSW50SW1wbCB7IHJlc3VsdCB9LCBTaWduT3B0aW9uOjpTaWduZWQpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdC0+cmlnaHRUcmltKHZtKTsKIH0K
IAotSlNCaWdJbnQqIEpTQmlnSW50OjpyaWdodFNoaWZ0QnlNYXhpbXVtKFZNJiB2bSwgYm9vbCBz
aWduKQorSlNCaWdJbnQ6OkltcGxSZXN1bHQgSlNCaWdJbnQ6OnJpZ2h0U2hpZnRCeU1heGltdW0o
Vk0mIHZtLCBib29sIHNpZ24pCiB7CiAgICAgaWYgKHNpZ24pCiAgICAgICAgIHJldHVybiBjcmVh
dGVGcm9tKHZtLCAtMSk7CkBAIC0xNjgzLDcgKzIwMTgsNyBAQCBTdHJpbmcgSlNCaWdJbnQ6OnRv
U3RyaW5nR2VuZXJpYyhWTSYgdm0sCiAgICAgICAgIEpTQmlnSW50KiogZGl2aWRlbmQgPSAmeDsK
ICAgICAgICAgZG8gewogICAgICAgICAgICAgRGlnaXQgY2h1bms7Ci0gICAgICAgICAgICBhYnNv
bHV0ZURpdldpdGhEaWdpdERpdmlzb3Iodm0sICpkaXZpZGVuZCwgY2h1bmtEaXZpc29yLCAmcmVz
dCwgY2h1bmspOworICAgICAgICAgICAgYWJzb2x1dGVEaXZXaXRoRGlnaXREaXZpc29yKHZtLCBI
ZWFwQmlnSW50SW1wbCB7ICpkaXZpZGVuZCB9LCBjaHVua0Rpdmlzb3IsICZyZXN0LCBjaHVuayk7
CiAgICAgICAgICAgICBkaXZpZGVuZCA9ICZyZXN0OwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNodW5rQ2hhcnM7IGkrKykgewogICAgICAgICAgICAgICAgIHJlc3VsdFN0
cmluZy5hcHBlbmQocmFkaXhEaWdpdHNbY2h1bmsgJSByYWRpeF0pOwpAQCAtMjAyMCwzNiArMjM1
NSw2IEBAIGJvb2wgSlNCaWdJbnQ6OmVxdWFsc1RvSW50MzIoaW50MzJfdCB2YWwKICAgICByZXR1
cm4gKHRoaXMtPmxlbmd0aCgpID09IDEpICYmICh0aGlzLT5zaWduKCkgPT0gKHZhbHVlIDwgMCkp
ICYmICh0aGlzLT5kaWdpdCgwKSA9PSBzdGF0aWNfY2FzdDxEaWdpdD4oc3RkOjphYnMoc3RhdGlj
X2Nhc3Q8aW50NjRfdD4odmFsdWUpKSkpOwogfQogCi1KU0JpZ0ludDo6Q29tcGFyaXNvblJlc3Vs
dCBKU0JpZ0ludDo6Y29tcGFyZVRvSW50MzIoaW50MzJfdCB2YWx1ZSkKLXsKLSAgICBib29sIHhT
aWduID0gc2lnbigpOwotICAgIGJvb2wgeVNpZ24gPSB2YWx1ZSA8IDA7Ci0KLSAgICBpZiAoeFNp
Z24gIT0geVNpZ24pCi0gICAgICAgIHJldHVybiB4U2lnbiA/IENvbXBhcmlzb25SZXN1bHQ6Okxl
c3NUaGFuIDogQ29tcGFyaXNvblJlc3VsdDo6R3JlYXRlclRoYW47Ci0gICAgaWYgKGlzWmVybygp
KSB7Ci0gICAgICAgIEFTU0VSVCgheFNpZ24pOwotICAgICAgICBBU1NFUlQoIXlTaWduKTsKLSAg
ICAgICAgaWYgKHZhbHVlID09IDApCi0gICAgICAgICAgICByZXR1cm4gQ29tcGFyaXNvblJlc3Vs
dDo6RXF1YWw7Ci0gICAgICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpMZXNzVGhhbjsKLSAg
ICB9Ci0KLSAgICBpZiAobGVuZ3RoKCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIHhTaWduID8gQ29t
cGFyaXNvblJlc3VsdDo6TGVzc1RoYW4gOiBDb21wYXJpc29uUmVzdWx0OjpHcmVhdGVyVGhhbjsK
LQotICAgIHVpbnQ2NF90IHZhbHVlNjQgPSAwOwotICAgIGlmICh4U2lnbikKLSAgICAgICAgdmFs
dWU2NCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUp
KTsKLSAgICBlbHNlCi0gICAgICAgIHZhbHVlNjQgPSB2YWx1ZTsKLSAgICBpZiAoZGlnaXQoMCkg
PT0gdmFsdWU2NCkKLSAgICAgICAgcmV0dXJuIENvbXBhcmlzb25SZXN1bHQ6OkVxdWFsOwotICAg
IGlmIChkaWdpdCgwKSA8IHZhbHVlNjQpCi0gICAgICAgIHJldHVybiB4U2lnbiA/IENvbXBhcmlz
b25SZXN1bHQ6OkdyZWF0ZXJUaGFuIDogQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW47Ci0gICAg
cmV0dXJuIHhTaWduID8gQ29tcGFyaXNvblJlc3VsdDo6TGVzc1RoYW4gOiBDb21wYXJpc29uUmVz
dWx0OjpHcmVhdGVyVGhhbjsKLX0KLQogSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJ
bnQ6OmNvbXBhcmVUb0RvdWJsZShKU0JpZ0ludCogeCwgZG91YmxlIHkpCiB7CiAgICAgLy8gVGhp
cyBhbGdvcml0aG0gZXhwZWN0IHRoYXQgdGhlIGRvdWJsZSBmb3JtYXQgaXMgSUVFRSA3NTQKQEAg
LTIxNzgsMTIgKzI0ODMsMTMgQEAgSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1bHQgSlNCaWdJbnQ6
OmNvbQogICAgIHJldHVybiBDb21wYXJpc29uUmVzdWx0OjpFcXVhbDsKIH0KIAotT3B0aW9uYWw8
SlNCaWdJbnQ6OkRpZ2l0PiBKU0JpZ0ludDo6dG9TaGlmdEFtb3VudChKU0JpZ0ludCogeCkKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorT3B0aW9uYWw8SlNCaWdJbnQ6OkRpZ2l0PiBK
U0JpZ0ludDo6dG9TaGlmdEFtb3VudChCaWdJbnRJbXBsIHgpCiB7Ci0gICAgaWYgKHgtPmxlbmd0
aCgpID4gMSkKKyAgICBpZiAoeC5sZW5ndGgoKSA+IDEpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgCi0gICAgRGlnaXQgdmFsdWUgPSB4LT5kaWdpdCgwKTsKKyAgICBEaWdpdCB2
YWx1ZSA9IHguZGlnaXQoMCk7CiAgICAgc3RhdGljX2Fzc2VydChtYXhMZW5ndGhCaXRzIDwgc3Rk
OjpudW1lcmljX2xpbWl0czxEaWdpdD46Om1heCgpLCAibWF4TGVuZ3RoQml0cyBuZWVkcyB0byBi
ZSBsZXNzIHRoYW4gZGlnaXQiKTsKICAgICAKICAgICBpZiAodmFsdWUgPiBtYXhMZW5ndGhCaXRz
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCaWdJbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCShyZXZpc2lv
biAyNjA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JpZ0ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw5IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IkNQVS5oIgorI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5o
IgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNp
bmNsdWRlIDx3dGYvQ2FnZWRVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CkBAIC0zNiw2ICszOCw5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBJ
bnQzMkJpZ0ludEltcGw7CitjbGFzcyBIZWFwQmlnSW50SW1wbDsKKwogY2xhc3MgSlNCaWdJbnQg
ZmluYWwgOiBwdWJsaWMgSlNDZWxsIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxs
OwpAQCAtMTIxLDM5ICsxMjYsMjAgQEAgcHVibGljOgogICAgICAgICBMZXNzVGhhbgogICAgIH07
CiAKLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KEpTQmlnSW50KiBiaWdJbnQpCi0gICAgewotI2lmIFVTRShCSUdJTlQzMikKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFiaWdJbnQpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLQotICAg
ICAgICBpZiAoYmlnSW50LT5sZW5ndGgoKSA8PSAxKSB7Ci0gICAgICAgICAgICBpZiAoIWJpZ0lu
dC0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7Ci0gICAg
ICAgICAgICBEaWdpdCBkaWdpdCA9IGJpZ0ludC0+ZGlnaXQoMCk7Ci0gICAgICAgICAgICBpZiAo
YmlnSW50LT5zaWduKCkpIHsKLSAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ2
NF90IG1heFZhbHVlID0gLXN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MzJfdD46Om1pbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoZGlnaXQgPD0gbWF4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KC1zdGF0aWNfY2FzdDxpbnQ2NF90PihkaWdpdCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50NjRfdCBtYXhWYWx1ZSA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGRpZ2l0IDw9IG1heFZhbHVlKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihkaWdpdCkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICByZXR1cm4gYmlnSW50Owot
ICAgIH0KLQotICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIGVxdWFscyhK
U0JpZ0ludCosIEpTQmlnSW50Kik7CiAgICAgYm9vbCBlcXVhbHNUb051bWJlcihKU1ZhbHVlKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGVxdWFsc1RvSW50MzIoaW50MzJfdCk7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJlVG9JbnQzMihpbnQzMl90
KTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGxlc3NUaGFuSW50MzIoaW50MzJfdCk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBsZXNzVGhhbkVxdWFsSW50MzIoaW50MzJfdCk7CiAg
ICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgY29tcGFyZShKU0JpZ0ludCogeCwgSlNCaWdJbnQq
IHkpOworICAgIHN0YXRpYyBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmUoaW50MzJfdCB4LCBKU0Jp
Z0ludCogeSk7CisgICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgY29tcGFyZShKU0JpZ0ludCog
eCwgaW50MzJfdCB5KTsKKyAgICBzdGF0aWMgQ29tcGFyaXNvblJlc3VsdCBjb21wYXJlKGludDMy
X3QgeCwgaW50MzJfdCB5KQorICAgIHsKKyAgICAgICAgaWYgKHggPT0geSkKKyAgICAgICAgICAg
IHJldHVybiBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdDo6RXF1YWw7CisgICAgICAgIGlmICh4
IDwgeSkKKyAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdDo6TGVz
c1RoYW47CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdDo6R3JlYXRl
clRoYW47CisgICAgfQogCiAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoSlNHbG9iYWxPYmpl
Y3QqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdWx0KSBjb25zdDsKICAgICBkb3VibGUg
dG9OdW1iZXIoSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKQEAgLTE2Myw5NCArMTQ5LDIxNCBAQCBw
dWJsaWM6CiAKICAgICBDb21wYXJpc29uUmVzdWx0IHN0YXRpYyBjb21wYXJlVG9Eb3VibGUoSlNC
aWdJbnQqIHgsIGRvdWJsZSB5KTsKIAotICAgIHN0YXRpYyBKU0JpZ0ludCogZXhwb25lbnRpYXRl
SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiBiYXNlLCBKU0JpZ0ludCogZXhwb25lbnQp
OwotICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0JpZ0ludCogYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KQorICAgIEFMV0FZU19J
TkxJTkUgc3RhdGljIEpTVmFsdWUgYXNJbnQzMk9ySGVhcENlbGwoVk0mIHZtLCBpbnQ2NF90IHZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGV4cG9uZW50
aWF0ZUhlYXAoZ2xvYmFsT2JqZWN0LCBiYXNlLCBleHBvbmVudCkpOworICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSA9PSB2YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVl
KSk7CisgICAgICAgIHJldHVybiBjcmVhdGVGcm9tKHZtLCB2YWx1ZSk7CisgICAgfQorICAgIEFM
V0FZU19JTkxJTkUgc3RhdGljIEpTVmFsdWUgYXNJbnQzMk9ySGVhcENlbGwoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
c0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QtPnZtKCksIHZhbHVlKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgSlNCaWdJbnQqIG11bHRpcGx5SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgbXVsdGlwbHkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgSGVhcEJpZ0ludEltcGw7CitwdWJsaWM6CisgICAgc3RydWN0IElt
cGxSZXN1bHQgeworICAgICAgICBJbXBsUmVzdWx0KEhlYXBCaWdJbnRJbXBsJik7CisgICAgICAg
IEltcGxSZXN1bHQoSlNCaWdJbnQqKTsKKyAgICAgICAgSW1wbFJlc3VsdChJbnQzMkJpZ0ludElt
cGwmKTsKKyAgICAgICAgSW1wbFJlc3VsdChKU1ZhbHVlKTsKKyAgICAgICAgSlNWYWx1ZSBwYXls
b2FkOworICAgIH07Citwcml2YXRlOgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBleHBvbmVu
dGlhdGVJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgYmFzZSwgQmlnSW50SW1wbDIg
ZXhwb25lbnQpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBtdWx0aXBseUltcGwoSlNHbG9i
YWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGluY0ltcGwoSlNH
bG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJp
Z0ludEltcGw+CisgICAgc3RhdGljIEltcGxSZXN1bHQgZGVjSW1wbChKU0dsb2JhbE9iamVjdCos
IEJpZ0ludEltcGwgeCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5
cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IGFkZEltcGwoSlNHbG9i
YWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGlj
IEltcGxSZXN1bHQgc3ViSW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0lu
dEltcGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFt
ZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBkaXZpZGVJbXBsKEpTR2xvYmFs
T2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBJ
bXBsUmVzdWx0IHJlbWFpbmRlckltcGwoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBC
aWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAg
IHN0YXRpYyBJbXBsUmVzdWx0IHVuYXJ5TWludXNJbXBsKFZNJiwgQmlnSW50SW1wbCB4KTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+
CisgICAgc3RhdGljIEltcGxSZXN1bHQgYml0d2lzZUFuZEltcGwoSlNHbG9iYWxPYmplY3QqLCBC
aWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQg
Yml0d2lzZU9ySW1wbChKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwy
IHkpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJ
bnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBiaXR3aXNlWG9ySW1wbChKU0dsb2JhbE9i
amVjdCosIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIEltcGxSZXN1bHQgYml0d2lzZU5vdEltcGwo
SlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJlc3Vs
dCBsZWZ0U2hpZnRJbXBsKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJp
Z0ludEltcGwyPgorICAgIHN0YXRpYyBJbXBsUmVzdWx0IHNpZ25lZFJpZ2h0U2hpZnRJbXBsKEpT
R2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0
YXRpYyBDb21wYXJpc29uUmVzdWx0IGNvbXBhcmVJbXBsKEJpZ0ludEltcGwxIHgsIEJpZ0ludElt
cGwyIHkpOworCitwdWJsaWM6CisgICAgc3RhdGljIEpTVmFsdWUgZXhwb25lbnRpYXRlKEpTR2xv
YmFsT2JqZWN0KiwgSlNCaWdJbnQqIGJhc2UsIEpTQmlnSW50KiBleHBvbmVudCk7CisgICAgc3Rh
dGljIEpTVmFsdWUgZXhwb25lbnRpYXRlKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIGJhc2Us
IGludDMyX3QgZXhwb25lbnQpOworICAgIHN0YXRpYyBKU1ZhbHVlIGV4cG9uZW50aWF0ZShKU0ds
b2JhbE9iamVjdCosIGludDMyX3QgYmFzZSwgSlNCaWdJbnQqIGV4cG9uZW50KTsKKyAgICBzdGF0
aWMgSlNWYWx1ZSBleHBvbmVudGlhdGUoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IGJhc2UsIGlu
dDMyX3QgZXhwb25lbnQpOworCisgICAgc3RhdGljIEpTVmFsdWUgbXVsdGlwbHkoSlNHbG9iYWxP
YmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIG11
bHRpcGx5KEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3Rh
dGljIEpTVmFsdWUgbXVsdGlwbHkoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgaW50MzJf
dCB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBtdWx0aXBseShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlD
b252ZXJ0VG9CaWdJbnQzMihtdWx0aXBseUhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAg
ICAgIGludDY0X3QgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oeCkgKiBzdGF0aWNfY2Fz
dDxpbnQ2NF90Pih5KTsgCisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxP
YmplY3QsIHJlc3VsdCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKU0JpZ0ludCogaW5jSGVh
cChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBpbmMo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgpCisgICAgc3RhdGljIEpT
VmFsdWUgaW5jKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOworICAgIHN0YXRpYyBKU1Zh
bHVlIGluYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgpCiAgICAgewot
ICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoaW5jSGVhcChnbG9iYWxPYmplY3Qs
IHgpKTsKKyAgICAgICAgcmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8aW50NjRfdD4oeCkgKyAxKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQq
IGRlY0hlYXAoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCk7Ci0gICAgc3RhdGljIEpTVmFs
dWUgZGVjKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4KQorICAgIHN0
YXRpYyBKU1ZhbHVlIGRlYyhKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4KTsKKyAgICBzdGF0
aWMgSlNWYWx1ZSBkZWMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKGRlY0hlYXAoZ2xvYmFs
T2JqZWN0LCB4KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpIC0gMSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpT
QmlnSW50KiBhZGRIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBhZGQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQorICAgIHN0YXRpYyBKU1ZhbHVlIGFkZChKU0dsb2Jh
bE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUg
YWRkKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGlj
IEpTVmFsdWUgYWRkKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7Cisg
ICAgc3RhdGljIEpTVmFsdWUgYWRkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMy
X3QgeCwgaW50MzJfdCB5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0lu
dDMyKGFkZEhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAgICAgIHJldHVybiBhc0ludDMy
T3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0X3Q+KHgpICsgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oeSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU0JpZ0ludCogc3ViSGVh
cChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGlj
IEpTVmFsdWUgc3ViKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1ZSBzdWIoSlNHbG9iYWxPYmplY3QqLCBKU0Jp
Z0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHN1YihKU0dsb2JhbE9i
amVjdCosIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHN1YihK
U0dsb2JhbE9iamVjdCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1Zh
bHVlIHN1YihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3Qg
eSkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdWJIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSk7Cisg
ICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PGludDY0X3Q+KHgpIC0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSkpOwogICAgIH0KIAotICAgIHN0
YXRpYyBKU0JpZ0ludCogZGl2aWRlSGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgZGl2aWRlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1
ZSBkaXZpZGUoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAg
IHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQz
Ml90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9iamVjdCosIGludDMy
X3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGRpdmlkZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihkaXZpZGVIZWFwKGdsb2JhbE9iamVjdCwgeCwg
eSkpOworICAgICAgICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAgICAgICB0aHJvd1Jhbmdl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxpZCBkaXZpc29yIHZhbHVl
LiJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PGludDY0
X3Q+KHgpIC8gc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSkpOwogICAgIH0KIAotICAgIHN0YXRpYyBK
U0JpZ0ludCogcmVtYWluZGVySGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgcmVtYWluZGVyKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNWYWx1
ZSByZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwor
ICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4
LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRlcihKU0dsb2JhbE9iamVj
dCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHJlbWFpbmRl
cihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihyZW1haW5kZXJIZWFwKGds
b2JhbE9iamVjdCwgeCwgeSkpOworICAgICAgICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgICAg
ICAgICB0aHJvd1JhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIjAgaXMgYW4gaW52YWxp
ZCBkaXZpc29yIHZhbHVlLiJfcyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PGludDY0X3Q+KHgpICUgc3RhdGljX2Nhc3Q8aW50NjRfdD4oeSkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBKU0JpZ0ludCogdW5hcnlNaW51c0hlYXAoVk0mLCBKU0JpZ0ludCogeCk7
Ci0gICAgc3RhdGljIEpTVmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIEpTQmlnSW50KiB4KQorICAg
IHN0YXRpYyBKU1ZhbHVlIHVuYXJ5TWludXMoVk0mIHZtLCBKU0JpZ0ludCogeCk7CisgICAgc3Rh
dGljIEpTVmFsdWUgdW5hcnlNaW51cyhWTSYgdm0sIGludDMyX3QgeCkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMih1bmFyeU1pbnVzSGVhcCh2bSwgeCkpOworICAg
ICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwodm0sIC1zdGF0aWNfY2FzdDxpbnQ2NF90Pih4
KSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlQW5kSGVhcChKU0dsb2Jh
bE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUg
Yml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0JpZ0ludCogeCwgSlNC
aWdJbnQqIHkpCisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZUFuZChKU0dsb2JhbE9iamVjdCos
IEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZUFu
ZChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBK
U1ZhbHVlIGJpdHdpc2VBbmQoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90IHgsIEpTQmlnSW50KiB5
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNv
bnZlcnRUb0JpZ0ludDMyKGJpdHdpc2VBbmRIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAg
ICAgICByZXR1cm4gYXNJbnQzMk9ySGVhcENlbGwoZ2xvYmFsT2JqZWN0LCB4ICYgeSk7CiAgICAg
fQogCi0gICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlT3JIZWFwKEpTR2xvYmFsT2JqZWN0Kiwg
SlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlT3Io
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQor
ICAgIHN0YXRpYyBKU1ZhbHVlIGJpdHdpc2VPcihKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4
LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZU9yKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNCaWdJbnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lz
ZU9yKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGlj
IEpTVmFsdWUgYml0d2lzZU9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3Qg
eCwgaW50MzJfdCB5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMy
KGJpdHdpc2VPckhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAgICAgIHJldHVybiBhc0lu
dDMyT3JIZWFwQ2VsbChnbG9iYWxPYmplY3QsIHggfCB5KTsKICAgICB9CiAKLSAgICBzdGF0aWMg
SlNCaWdJbnQqIGJpdHdpc2VYb3JIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpT
QmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0aWMgSlNW
YWx1ZSBiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJ
bnQqIHgsIGludDMyX3QgeSk7CisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZVhvcihKU0dsb2Jh
bE9iamVjdCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGJp
dHdpc2VYb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50MzJfdCB4LCBpbnQzMl90
IHkpCiAgICAgewotICAgICAgICByZXR1cm4gdHJ5Q29udmVydFRvQmlnSW50MzIoYml0d2lzZVhv
ckhlYXAoZ2xvYmFsT2JqZWN0LCB4LCB5KSk7CisgICAgICAgIHJldHVybiBhc0ludDMyT3JIZWFw
Q2VsbChnbG9iYWxPYmplY3QsIHggXiB5KTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQq
IGJpdHdpc2VOb3RIZWFwKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgpOwotICAgIHN0YXRp
YyBKU1ZhbHVlIGJpdHdpc2VOb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJ
bnQqIHgpCisgICAgc3RhdGljIEpTVmFsdWUgYml0d2lzZU5vdChKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBiaXR3aXNlTm90KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0cnlDb252
ZXJ0VG9CaWdJbnQzMihiaXR3aXNlTm90SGVhcChnbG9iYWxPYmplY3QsIHgpKTsKKyAgICAgICAg
cmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgfngpOwogICAgIH0KIAotICAg
IHN0YXRpYyBKU0JpZ0ludCogbGVmdFNoaWZ0SGVhcChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgbGVmdFNoaWZ0KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKKyAgICBzdGF0
aWMgSlNWYWx1ZSBsZWZ0U2hpZnQoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJ
bnQqIHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGxlZnRTaGlmdChKU0dsb2JhbE9iamVjdCosIEpT
QmlnSW50KiB4LCBpbnQzMl90IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIGxlZnRTaGlmdChKU0ds
b2JhbE9iamVjdCosIGludDMyX3QgeCwgSlNCaWdJbnQqIHkpOworcHJpdmF0ZToKKyAgICBzdGF0
aWMgSlNWYWx1ZSBsZWZ0U2hpZnRTbG93KEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCB4LCBpbnQz
Ml90IHkpOworcHVibGljOgorICAgIHN0YXRpYyBKU1ZhbHVlIGxlZnRTaGlmdChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IHgsIGludDMyX3QgeSkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0cnlDb252ZXJ0VG9CaWdJbnQzMihsZWZ0U2hpZnRIZWFwKGdsb2JhbE9iamVjdCwg
eCwgeSkpOwotICAgIH0KKyAgICAgICAgaWYgKHkgPCAwKSB7CisgICAgICAgICAgICAvLyBTaGlm
dHMgb25lIGxlc3MgdGhhbiByZXF1ZXN0ZWQsIGJ1dCBkb2Vzbid0IG1hdHRlciBzaW5jZSBsaHMg
aXMgaW50MzIKKyAgICAgICAgICAgIHJldHVybiBzaWduZWRSaWdodFNoaWZ0KGdsb2JhbE9iamVj
dCwgeCwgeSA9PSBJTlQzMl9NSU4gPyBJTlQzMl9NQVggOiAteSk7CisgICAgICAgIH0KIAotICAg
IHN0YXRpYyBKU0JpZ0ludCogc2lnbmVkUmlnaHRTaGlmdEhlYXAoSlNHbG9iYWxPYmplY3QqLCBK
U0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwotICAgIHN0YXRpYyBKU1ZhbHVlIHNpZ25lZFJpZ2h0
U2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUNvbnZlcnRUb0JpZ0ludDMyKHNpZ25lZFJp
Z2h0U2hpZnRIZWFwKGdsb2JhbE9iamVjdCwgeCwgeSkpOworICAgICAgICAvLyBEbyBzb21lIGNo
ZWNrcyB0byBkZXRlY3Qgb3ZlcmZsb3cgb2YgbGVmdC1zaGlmdC4gQnV0IHRoaXMgaXMgbXVjaCBj
aGVhcGVyIGNvbXBhcmVkIHRvIGFsbG9jYXRpbmcgdHdvIEpTQmlnSW50IGFuZCBwZXJmb3JtIHNo
aWZ0IG9wZXJhdGlvbnMgaW4gSlNCaWdJbnQuCisgICAgICAgIGlmICgheCkKKyAgICAgICAgICAg
IHJldHVybiBqc0JpZ0ludDMyKDApOworICAgICAgICBpZiAoeSA8IDMyKQorICAgICAgICAgICAg
cmV0dXJuIGFzSW50MzJPckhlYXBDZWxsKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8aW50NjRf
dD4oeCkgPDwgeSk7CisgICAgICAgIHJldHVybiBsZWZ0U2hpZnRTbG93KGdsb2JhbE9iamVjdCwg
eCwgeSk7CisgICAgfQorCisgICAgc3RhdGljIEpTVmFsdWUgc2lnbmVkUmlnaHRTaGlmdChKU0ds
b2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CisgICAgc3RhdGljIEpTVmFs
dWUgc2lnbmVkUmlnaHRTaGlmdChKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiB4LCBpbnQzMl90
IHkpOworICAgIHN0YXRpYyBKU1ZhbHVlIHNpZ25lZFJpZ2h0U2hpZnQoSlNHbG9iYWxPYmplY3Qq
LCBpbnQzMl90IHgsIEpTQmlnSW50KiB5KTsKKyAgICBzdGF0aWMgSlNWYWx1ZSBzaWduZWRSaWdo
dFNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgeCwgaW50MzJfdCB5
KQorICAgIHsKKyAgICAgICAgaWYgKHkgPCAwKSB7CisgICAgICAgICAgICAvLyBTaGlmdHMgb25l
IGxlc3MgdGhhbiByZXF1ZXN0ZWQsIGJ1dCBkb2Vzbid0IG1hdHRlciBzaW5jZSBsaHMgaXMgaW50
MzIKKyAgICAgICAgICAgIHJldHVybiBsZWZ0U2hpZnQoZ2xvYmFsT2JqZWN0LCB4LCB5ID09IElO
VDMyX01JTiA/IElOVDMyX01BWCA6IC15KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBq
c0JpZ0ludDMyKHggPj4gc3RkOjptaW4oeSwgMzEpKTsKICAgICB9CiAKICAgICBEaWdpdCBkaWdp
dCh1bnNpZ25lZCk7CkBAIC0yNzUsMTggKzM4MSwyNCBAQCBwcml2YXRlOgogICAgIAogICAgIHN0
YXRpYyB1aW50NjRfdCBjYWxjdWxhdGVNYXhpbXVtQ2hhcmFjdGVyc1JlcXVpcmVkKHVuc2lnbmVk
IGxlbmd0aCwgdW5zaWduZWQgcmFkaXgsIERpZ2l0IGxhc3REaWdpdCwgYm9vbCBzaWduKTsKICAg
ICAKLSAgICBzdGF0aWMgQ29tcGFyaXNvblJlc3VsdCBhYnNvbHV0ZUNvbXBhcmUoSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgdm9pZCBhYnNvbHV0ZURpdldpdGhEaWdpdERp
dmlzb3IoVk0mLCBKU0JpZ0ludCogeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVu
dCwgRGlnaXQmIHJlbWFpbmRlcik7Ci0gICAgc3RhdGljIHZvaWQgaW50ZXJuYWxNdWx0aXBseUFk
ZChKU0JpZ0ludCogc291cmNlLCBEaWdpdCBmYWN0b3IsIERpZ2l0IHN1bW1hbmQsIHVuc2lnbmVk
LCBKU0JpZ0ludCogcmVzdWx0KTsKLSAgICBzdGF0aWMgdm9pZCBtdWx0aXBseUFjY3VtdWxhdGUo
SlNCaWdJbnQqIG11bHRpcGxpY2FuZCwgRGlnaXQgbXVsdGlwbGllciwgSlNCaWdJbnQqIGFjY3Vt
dWxhdG9yLCB1bnNpZ25lZCBhY2N1bXVsYXRvckluZGV4KTsKLSAgICBzdGF0aWMgdm9pZCBhYnNv
bHV0ZURpdldpdGhCaWdJbnREaXZpc29yKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIGRpdmlk
ZW5kLCBKU0JpZ0ludCogZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgSlNCaWdJbnQqKiBy
ZW1haW5kZXIpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUg
QmlnSW50SW1wbDI+CisgICAgc3RhdGljIENvbXBhcmlzb25SZXN1bHQgYWJzb2x1dGVDb21wYXJl
KEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBC
aWdJbnRJbXBsPgorICAgIHN0YXRpYyB2b2lkIGFic29sdXRlRGl2V2l0aERpZ2l0RGl2aXNvcihW
TSYsIEJpZ0ludEltcGwgeCwgRGlnaXQgZGl2aXNvciwgSlNCaWdJbnQqKiBxdW90aWVudCwgRGln
aXQmIHJlbWFpbmRlcik7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAg
c3RhdGljIHZvaWQgaW50ZXJuYWxNdWx0aXBseUFkZChCaWdJbnRJbXBsIHNvdXJjZSwgRGlnaXQg
ZmFjdG9yLCBEaWdpdCBzdW1tYW5kLCB1bnNpZ25lZCwgSlNCaWdJbnQqIHJlc3VsdCk7CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIHZvaWQgbXVsdGlwbHlB
Y2N1bXVsYXRlKEJpZ0ludEltcGwgbXVsdGlwbGljYW5kLCBEaWdpdCBtdWx0aXBsaWVyLCBKU0Jp
Z0ludCogYWNjdW11bGF0b3IsIHVuc2lnbmVkIGFjY3VtdWxhdG9ySW5kZXgpOworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMT4KKyAgICBzdGF0aWMgdm9pZCBhYnNvbHV0ZURpdldp
dGhCaWdJbnREaXZpc29yKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbDEgZGl2aWRlbmQsIEpT
QmlnSW50KiBkaXZpc29yLCBKU0JpZ0ludCoqIHF1b3RpZW50LCBKU0JpZ0ludCoqIHJlbWFpbmRl
cik7CiAgICAgCiAgICAgZW51bSBjbGFzcyBMZWZ0U2hpZnRNb2RlIHsKICAgICAgICAgU2FtZVNp
emVSZXN1bHQsCiAgICAgICAgIEFsd2F5c0FkZE9uZURpZ2l0CiAgICAgfTsKICAgICAKLSAgICBz
dGF0aWMgSlNCaWdJbnQqIGFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weShKU0dsb2JhbE9iamVj
dCosIEpTQmlnSW50KiB4LCB1bnNpZ25lZCBzaGlmdCwgTGVmdFNoaWZ0TW9kZSk7CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGw+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0
ZUxlZnRTaGlmdEFsd2F5c0NvcHkoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsIHgsIHVuc2ln
bmVkIHNoaWZ0LCBMZWZ0U2hpZnRNb2RlKTsKICAgICBzdGF0aWMgYm9vbCBwcm9kdWN0R3JlYXRl
clRoYW4oRGlnaXQgZmFjdG9yMSwgRGlnaXQgZmFjdG9yMiwgRGlnaXQgaGlnaCwgRGlnaXQgbG93
KTsKIAogICAgIERpZ2l0IGFic29sdXRlSW5wbGFjZUFkZChKU0JpZ0ludCogc3VtbWFuZCwgdW5z
aWduZWQgc3RhcnRJbmRleCk7CkBAIC0yOTgsMjYgKzQxMCwyNyBAQCBwcml2YXRlOgogICAgICAg
ICBTa2lwCiAgICAgfTsKIAotICAgIGVudW0gY2xhc3MgU3ltbWV0cmljT3AgewotICAgICAgICBT
eW1tZXRyaWMsCi0gICAgICAgIE5vdFN5bW1ldHJpYwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCaXR3aXNlT3A+Ci0gICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUJpdHdpc2VP
cChWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSwgRXh0cmFEaWdpdHNIYW5kbGluZywgU3lt
bWV0cmljT3AsIEJpdHdpc2VPcCYmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDIsIHR5cGVuYW1lIEJpdHdpc2VPcD4KKyAgICBzdGF0aWMg
SlNCaWdJbnQqIGFic29sdXRlQml0d2lzZU9wKFZNJiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1w
bDIgeSwgRXh0cmFEaWdpdHNIYW5kbGluZywgQml0d2lzZU9wJiYpOwogCi0gICAgc3RhdGljIEpT
QmlnSW50KiBhYnNvbHV0ZUFuZChWTSYsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7Ci0gICAg
c3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZU9yKFZNJiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5
KTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQW5kTm90KFZNJiwgSlNCaWdJbnQqIHgs
IEpTQmlnSW50KiB5KTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlWG9yKFZNJiwgSlNC
aWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1w
bDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVB
bmQoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5KTsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQmlnSW50SW1wbDEsIHR5cGVuYW1lIEJpZ0ludEltcGwyPgorICAgIHN0YXRpYyBKU0Jp
Z0ludCogYWJzb2x1dGVPcihWTSYsIEJpZ0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+Cisg
ICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZUFuZE5vdChWTSYsIEJpZ0ludEltcGwxIHgsIEJp
Z0ludEltcGwyIHkpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsMSwgdHlwZW5h
bWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVhvcihWTSYsIEJp
Z0ludEltcGwxIHgsIEJpZ0ludEltcGwyIHkpOwogCiAgICAgZW51bSBjbGFzcyBTaWduT3B0aW9u
IHsKICAgICAgICAgU2lnbmVkLAogICAgICAgICBVbnNpZ25lZAogICAgIH07CiAKLSAgICBzdGF0
aWMgSlNCaWdJbnQqIGFic29sdXRlQWRkT25lKEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgs
IFNpZ25PcHRpb24pOwotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVTdWJPbmUoSlNHbG9i
YWxPYmplY3QqLCBKU0JpZ0ludCogeCwgdW5zaWduZWQgcmVzdWx0TGVuZ3RoKTsKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRl
QWRkT25lKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4LCBTaWduT3B0aW9uKTsKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQmlnSW50SW1wbD4KKyAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29s
dXRlU3ViT25lKEpTR2xvYmFsT2JqZWN0KiwgQmlnSW50SW1wbCB4LCB1bnNpZ25lZCByZXN1bHRM
ZW5ndGgpOwogCiAgICAgLy8gRGlnaXQgYXJpdGhtZXRpYyBoZWxwZXJzLgogICAgIHN0YXRpYyBE
aWdpdCBkaWdpdEFkZChEaWdpdCBhLCBEaWdpdCBiLCBEaWdpdCYgY2FycnkpOwpAQCAtMzQzLDE4
ICs0NTYsMjQgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBKU0JpZ0ludCogYWxsb2NhdGVGb3Io
SlNHbG9iYWxPYmplY3QqLCBWTSYsIHVuc2lnbmVkIHJhZGl4LCB1bnNpZ25lZCBjaGFyY291bnQp
OwogCi0gICAgc3RhdGljIEpTQmlnSW50KiBjb3B5KFZNJiwgSlNCaWdJbnQqIHgpOworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBsPgorICAgIHN0YXRpYyBKU0JpZ0ludCogY29weShW
TSYsIEJpZ0ludEltcGwgeCk7CiAKICAgICB2b2lkIGlucGxhY2VNdWx0aXBseUFkZChEaWdpdCBt
dWx0aXBsaWVyLCBEaWdpdCBwYXJ0KTsKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFic29sdXRlQWRk
KEpTR2xvYmFsT2JqZWN0KiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5LCBib29sIHJlc3VsdFNp
Z24pOwotICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVTdWIoVk0mLCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbik7Ci0KLSAgICBzdGF0aWMgSlNCaWdJbnQqIGxl
ZnRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQq
IHkpOwotICAgIHN0YXRpYyBKU0JpZ0ludCogcmlnaHRTaGlmdEJ5QWJzb2x1dGUoSlNHbG9iYWxP
YmplY3QqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBCaWdJbnRJbXBsMSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1
bHQgYWJzb2x1dGVBZGQoSlNHbG9iYWxPYmplY3QqLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBs
MiB5LCBib29sIHJlc3VsdFNpZ24pOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCaWdJbnRJbXBs
MSwgdHlwZW5hbWUgQmlnSW50SW1wbDI+CisgICAgc3RhdGljIEltcGxSZXN1bHQgYWJzb2x1dGVT
dWIoVk0mLCBCaWdJbnRJbXBsMSB4LCBCaWdJbnRJbXBsMiB5LCBib29sIHJlc3VsdFNpZ24pOwor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBs
Mj4KKyAgICBzdGF0aWMgSW1wbFJlc3VsdCBsZWZ0U2hpZnRCeUFic29sdXRlKEpTR2xvYmFsT2Jq
ZWN0KiwgQmlnSW50SW1wbDEgeCwgQmlnSW50SW1wbDIgeSk7CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEJpZ0ludEltcGwxLCB0eXBlbmFtZSBCaWdJbnRJbXBsMj4KKyAgICBzdGF0aWMgSW1wbFJl
c3VsdCByaWdodFNoaWZ0QnlBYnNvbHV0ZShKU0dsb2JhbE9iamVjdCosIEJpZ0ludEltcGwxIHgs
IEJpZ0ludEltcGwyIHkpOwogCi0gICAgc3RhdGljIEpTQmlnSW50KiByaWdodFNoaWZ0QnlNYXhp
bXVtKFZNJiwgYm9vbCBzaWduKTsKKyAgICBzdGF0aWMgSW1wbFJlc3VsdCByaWdodFNoaWZ0QnlN
YXhpbXVtKFZNJiwgYm9vbCBzaWduKTsKIAotICAgIHN0YXRpYyBPcHRpb25hbDxEaWdpdD4gdG9T
aGlmdEFtb3VudChKU0JpZ0ludCogeCk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEJpZ0ludElt
cGw+CisgICAgc3RhdGljIE9wdGlvbmFsPERpZ2l0PiB0b1NoaWZ0QW1vdW50KEJpZ0ludEltcGwg
eCk7CiAKICAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBvZmZzZXRPZkRhdGEoKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAyNjA4MDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsMjAgKzcxLDEyIEBAIE5FVkVSX0lOTElORSBKU1Zh
bHVlIGpzQWRkU2xvd0Nhc2UoSlNHbG8KICAgICBhdXRvIGRvdWJsZU9wID0gW10gKGRvdWJsZSBs
ZWZ0LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBsZWZ0ICsgcmln
aHQ7CiAgICAgfTsKLSAgICBhdXRvIGJpZ0ludDMyT3AgPSBbXSAoaW50MzJfdCBsZWZ0LCBpbnQz
Ml90IHJpZ2h0KSAtPiBKU1ZhbHVlIHsKLSNpZiBVU0UoQklHSU5UMzIpCi0gICAgICAgIENoZWNr
ZWRJbnQzMiByZXN1bHQgPSBsZWZ0OwotICAgICAgICByZXN1bHQgKz0gcmlnaHQ7Ci0gICAgICAg
IGlmIChVTkxJS0VMWShyZXN1bHQuaGFzT3ZlcmZsb3dlZCgpKSkKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHJlc3VsdC51bnNhZmVHZXQo
KSk7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShyaWdodCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5k
aWYKKworICAgIGF1dG8gYmlnSW50T3AgPSBbXSAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgYXV0byBsZWZ0LCBhdXRvIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6YWRk
KGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOwogICAgIH07Ci0gICAgUkVMRUFTRV9BTkRfUkVU
VVJOKHNjb3BlLCBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCBwMSwgcDIsIEpTQmln
SW50OjphZGQsIGRvdWJsZU9wLCBiaWdJbnQzMk9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFu
ZCBvdGhlciB0eXBlIGluIGFkZGl0aW9uLiJfcykpOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCBwMSwgcDIsIGRvdWJsZU9w
LCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4IG9m
IEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBhZGRpdGlvbi4iX3MpKTsKIH0KIAogSlNWYWx1ZSBq
c1R5cGVTdHJpbmdGb3JWYWx1ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgdikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRp
b25zLmgJKHJldmlzaW9uIDI2MDgwNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDIxICsyNDQsMTQgQEAgQUxXQVlT
X0lOTElORSBKU0JpZ0ludDo6Q29tcGFyaXNvblJlc3VsdAogICAgIEFTU0VSVChyaWdodC5pc0Jp
Z0ludCgpKTsKICNpZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKGxlZnQuaXNCaWdJbnQzMigpKSB7
Ci0gICAgICAgIGlmIChyaWdodC5pc0JpZ0ludDMyKCkpIHsKLSAgICAgICAgICAgIGludDMyX3Qg
bGVmdEludDMyID0gbGVmdC5iaWdJbnQzMkFzSW50MzIoKTsKLSAgICAgICAgICAgIGludDMyX3Qg
cmlnaHRJbnQzMiA9IHJpZ2h0LmJpZ0ludDMyQXNJbnQzMigpOwotICAgICAgICAgICAgaWYgKGxl
ZnRJbnQzMiA9PSByaWdodEludDMyKQotICAgICAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6
Q29tcGFyaXNvblJlc3VsdDo6RXF1YWw7Ci0gICAgICAgICAgICBpZiAobGVmdEludDMyIDwgcmln
aHRJbnQzMikKLSAgICAgICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OkNvbXBhcmlzb25SZXN1
bHQ6Okxlc3NUaGFuOwotICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpDb21wYXJpc29uUmVz
dWx0OjpHcmVhdGVyVGhhbjsKLSAgICAgICAgfQorICAgICAgICBpZiAocmlnaHQuaXNCaWdJbnQz
MigpKQorICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50Ojpjb21wYXJlKGxlZnQuYmlnSW50MzJB
c0ludDMyKCksIHJpZ2h0LmJpZ0ludDMyQXNJbnQzMigpKTsKICAgICAgICAgQVNTRVJUKHJpZ2h0
LmlzSGVhcEJpZ0ludCgpKTsKLSAgICAgICAgcmV0dXJuIGludmVydEJpZ0ludENvbXBhcmVSZXN1
bHQocmlnaHQuYXNIZWFwQmlnSW50KCktPmNvbXBhcmVUb0ludDMyKGxlZnQuYmlnSW50MzJBc0lu
dDMyKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50Ojpjb21wYXJlKGxlZnQuYmlnSW50MzJB
c0ludDMyKCksIHJpZ2h0LmFzSGVhcEJpZ0ludCgpKTsKICAgICB9CiAgICAgaWYgKHJpZ2h0Lmlz
QmlnSW50MzIoKSkgewogICAgICAgICBBU1NFUlQobGVmdC5pc0hlYXBCaWdJbnQoKSk7Ci0gICAg
ICAgIHJldHVybiBsZWZ0LmFzSGVhcEJpZ0ludCgpLT5jb21wYXJlVG9JbnQzMihyaWdodC5iaWdJ
bnQzMkFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Y29tcGFyZShsZWZ0LmFz
SGVhcEJpZ0ludCgpLCByaWdodC5iaWdJbnQzMkFzSW50MzIoKSk7CiAgICAgfQogI2VuZGlmCiAg
ICAgcmV0dXJuIEpTQmlnSW50Ojpjb21wYXJlKGxlZnQuYXNIZWFwQmlnSW50KCksIHJpZ2h0LmFz
SGVhcEJpZ0ludCgpKTsKQEAgLTMxNyw3ICszMTAsNyBAQCBBTFdBWVNfSU5MSU5FIEpTQmlnSW50
OjpDb21wYXJpc29uUmVzdWx0CiAgICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OkNvbXBhcmlz
b25SZXN1bHQ6OlVuZGVmaW5lZDsKIAogICAgICAgICBpZiAoYmlnSW50VmFsdWUuaXNIZWFwQmln
SW50KCkpCi0gICAgICAgICAgICByZXR1cm4gaW52ZXJ0QmlnSW50Q29tcGFyZVJlc3VsdChiaWdJ
bnRWYWx1ZS5hc0hlYXBCaWdJbnQoKS0+Y29tcGFyZVRvSW50MzIodjEpKTsKKyAgICAgICAgICAg
IHJldHVybiBKU0JpZ0ludDo6Y29tcGFyZSh2MSwgYmlnSW50VmFsdWUuYXNIZWFwQmlnSW50KCkp
OwogCiAgICAgICAgIEFTU0VSVChiaWdJbnRWYWx1ZS5pc0JpZ0ludDMyKCkpOwogI2lmIFVTRShC
SUdJTlQzMikKQEAgLTUzNCw5ICs1MjcsOCBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNBZGQo
SlNHbG9iYWxPYmplCiAgICAgcmV0dXJuIGpzQWRkTm9uTnVtYmVyKGdsb2JhbE9iamVjdCwgdjEs
IHYyKTsKIH0KIAotLy8gQmlnSW50MzJPcCBleHBlY3RzIGl0cyBvcGVyYW5kcyB1bmJveGVkLCBh
bmQgcmV0dXJucyBpdHMgcmVzdWx0IHVuYm94ZWQgYXMgd2VsbAotdGVtcGxhdGU8dHlwZW5hbWUg
SGVhcEJpZ0ludE9wZXJhdGlvbiwgdHlwZW5hbWUgRG91YmxlT3BlcmF0aW9uLCB0eXBlbmFtZSBC
aWdJbnQzMk9wPgotQUxXQVlTX0lOTElORSBKU1ZhbHVlIGFyaXRobWV0aWNCaW5hcnlPcChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyLCBIZWFwQmln
SW50T3BlcmF0aW9uJiYgaGVhcEJpZ0ludE9wLCBEb3VibGVPcGVyYXRpb24mJiBkb3VibGVPcCwg
QmlnSW50MzJPcCYmIGJpZ0ludDMyT3AsIGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIERvdWJsZU9wZXJhdGlvbj4KK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBhcml0
aG1ldGljQmluYXJ5T3AoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwg
SlNWYWx1ZSB2MiwgRG91YmxlT3BlcmF0aW9uJiYgZG91YmxlT3AsIEpTVmFsdWUgKCpiaWdJbnQz
MikoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90LCBpbnQzMl90KSwgSlNWYWx1ZSAoKm1peGVkQmln
SW50MSkoSlNHbG9iYWxPYmplY3QqLCBKU0JpZ0ludCosIGludDMyX3QpLCBKU1ZhbHVlICgqbWl4
ZWRCaWdJbnQyKShKU0dsb2JhbE9iamVjdCosIGludDMyX3QsIEpTQmlnSW50KiksIEpTVmFsdWUg
KCpoZWFwQmlnSW50KShKU0dsb2JhbE9iamVjdCosIEpTQmlnSW50KiwgSlNCaWdJbnQqKSwgY29u
c3QgY2hhciogZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC01NTEsMjgg
KzU0MywyMCBAQCBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgYXJpdGhtZXRpY0JpbmFyeU9wCiAKICNp
ZiBVU0UoQklHSU5UMzIpCiAgICAgaWYgKGxlZnROdW1lcmljLmlzQmlnSW50MzIoKSkgewotICAg
ICAgICBpZiAocmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkgewotICAgICAgICAgICAgaWYgKEpT
VmFsdWUgcmVzdWx0ID0gYmlnSW50MzJPcChsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwg
cmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgSlNCaWdJbnQqIGxlZnRIZWFwQmlnSW50ID0gSlNCaWdJbnQ6
OmNyZWF0ZUZyb20odm0sIGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKLSAgICAgICAg
ICAgIEpTQmlnSW50KiByaWdodEhlYXBCaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwg
cmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgaGVhcEJpZ0ludE9wKGdsb2JhbE9iamVjdCwgbGVmdEhlYXBCaWdJbnQs
IHJpZ2h0SGVhcEJpZ0ludCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyaWdodE51bWVyaWMu
aXNIZWFwQmlnSW50KCkpIHsKLSAgICAgICAgICAgIEpTQmlnSW50KiBsZWZ0SGVhcEJpZ0ludCA9
IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBCaWdJbnRPcChnbG9i
YWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsK
LSAgICAgICAgfQorICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSkKKyAgICAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgYmlnSW50MzIoZ2xvYmFsT2JqZWN0LCBs
ZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQz
MigpKSk7CisgICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNIZWFwQmlnSW50KCkpCisgICAgICAg
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG1peGVkQmlnSW50MihnbG9iYWxPYmplY3Qs
IGxlZnROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50
KCkpKTsKICAgICB9IGVsc2UgaWYgKGxlZnROdW1lcmljLmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAg
ICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJbnQzMigpKSB7Ci0gICAgICAgICAgICBKU0JpZ0lu
dCogcmlnaHRIZWFwQmlnSW50ID0gSlNCaWdJbnQ6OmNyZWF0ZUZyb20odm0sIHJpZ2h0TnVtZXJp
Yy5iaWdJbnQzMkFzSW50MzIoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGhlYXBCaWdJbnRPcChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgp
LCByaWdodEhlYXBCaWdJbnQpKTsKLSAgICAgICAgfSBlbHNlIGlmIChyaWdodE51bWVyaWMuaXNI
ZWFwQmlnSW50KCkpCi0gICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGhlYXBC
aWdJbnRPcChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51
bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsKKyAgICAgICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0JpZ0lu
dDMyKCkpCisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIG1peGVkQmlnSW50
MShnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMu
YmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAgICAgZWxzZSBpZiAocmlnaHROdW1lcmljLmlzSGVh
cEJpZ0ludCgpKQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmln
SW50KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJp
Yy5hc0hlYXBCaWdJbnQoKSkpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGJpZ0lu
dDMyT3ApOwogICAgIGlmIChsZWZ0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSAmJiByaWdodE51bWVy
aWMuaXNIZWFwQmlnSW50KCkpCi0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgaGVh
cEJpZ0ludE9wKGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCksIHJpZ2h0
TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOworICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIGhlYXBCaWdJbnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwg
cmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CiAjZW5kaWYKIAogICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwpAQCAtNTgzLDIx
ICs1NjcsMTIgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzU3ViKEpTR2xvYmFsT2JqZQogICAg
IGF1dG8gZG91YmxlT3AgPSBbXSAoZG91YmxlIGxlZnQsIGRvdWJsZSByaWdodCkgLT4gZG91Ymxl
IHsKICAgICAgICAgcmV0dXJuIGxlZnQgLSByaWdodDsKICAgICB9OwotICAgIGF1dG8gYmlnSW50
MzJPcCA9IFtdIChpbnQzMl90IGxlZnQsIGludDMyX3QgcmlnaHQpIC0+IEpTVmFsdWUgewotI2lm
IFVTRShCSUdJTlQzMikKLSAgICAgICAgQ2hlY2tlZEludDMyIHJlc3VsdCA9IGxlZnQ7Ci0gICAg
ICAgIHJlc3VsdCAtPSByaWdodDsKLSAgICAgICAgaWYgKFVOTElLRUxZKHJlc3VsdC5oYXNPdmVy
Zmxvd2VkKCkpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgcmV0dXJu
IGpzQmlnSW50MzIocmVzdWx0LnVuc2FmZUdldCgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9Q
QVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgorCisgICAgYXV0byBiaWdJbnRPcCA9IFtd
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsK
KyAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpzdWIoZ2xvYmFsT2JqZWN0LCBsZWZ0LCByaWdodCk7
CiAgICAgfTsKIAotICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2
MSwgdjIsIEpTQmlnSW50OjpzdWIsIGRvdWJsZU9wLCBiaWdJbnQzMk9wLCAiSW52YWxpZCBtaXgg
b2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIHN1YnRyYWN0aW9uLiJfcyk7CisgICAgcmV0dXJu
IGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgZG91YmxlT3AsIGJpZ0lu
dE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50
IGFuZCBvdGhlciB0eXBlIGluIHN1YnRyYWN0aW9uLiJfcyk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBqc011bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBK
U1ZhbHVlIHYyKQpAQCAtNjA1LDIxICs1ODAsMTIgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpz
TXVsKEpTR2xvYmFsT2JqZQogICAgIGF1dG8gZG91YmxlT3AgPSBbXSAoZG91YmxlIGxlZnQsIGRv
dWJsZSByaWdodCkgLT4gZG91YmxlIHsKICAgICAgICAgcmV0dXJuIGxlZnQgKiByaWdodDsKICAg
ICB9OwotICAgIGF1dG8gYmlnSW50MzJPcCA9IFtdIChpbnQzMl90IGxlZnQsIGludDMyX3Qgcmln
aHQpIC0+IEpTVmFsdWUgewotI2lmIFVTRShCSUdJTlQzMikKLSAgICAgICAgQ2hlY2tlZEludDMy
IHJlc3VsdCA9IGxlZnQ7Ci0gICAgICAgIHJlc3VsdCAqPSByaWdodDsKLSAgICAgICAgaWYgKHJl
c3VsdC5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4ganNCaWdJbnQzMihyZXN1bHQudW5zYWZlR2V0KCkpOwotI2Vsc2UKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCisKKyAgICBhdXRvIGJp
Z0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0
byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6Om11bHRpcGx5KGdsb2JhbE9iamVj
dCwgbGVmdCwgcmlnaHQpOwogICAgIH07CiAKLSAgICByZXR1cm4gYXJpdGhtZXRpY0JpbmFyeU9w
KGdsb2JhbE9iamVjdCwgdjEsIHYyLCBKU0JpZ0ludDo6bXVsdGlwbHksIGRvdWJsZU9wLCBiaWdJ
bnQzMk9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIG11bHRpcGxp
Y2F0aW9uLiJfcyk7CisgICAgcmV0dXJuIGFyaXRobWV0aWNCaW5hcnlPcChnbG9iYWxPYmplY3Qs
IHYxLCB2MiwgZG91YmxlT3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9w
LCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIG11bHRpcGxpY2F0aW9u
LiJfcyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc0RpdihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQpAQCAtNjI3LDE5ICs1OTMsMTIg
QEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzRGl2KEpTR2xvYmFsT2JqZQogICAgIGF1dG8gZG91
YmxlT3AgPSBbXSAoZG91YmxlIGxlZnQsIGRvdWJsZSByaWdodCkgLT4gZG91YmxlIHsKICAgICAg
ICAgcmV0dXJuIGxlZnQgLyByaWdodDsKICAgICB9OwotICAgIGF1dG8gYmlnSW50MzJPcCA9IFtd
IChpbnQzMl90IGxlZnQsIGludDMyX3QgcmlnaHQpIC0+IEpTVmFsdWUgewotI2lmIFVTRShCSUdJ
TlQzMikKLSAgICAgICAgaWYgKCFyaWdodCkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBqc0JpZ0ludDMyKGxlZnQgLyByaWdodCk7Ci0jZWxzZQotICAgICAg
ICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKKworICAgIGF1dG8gYmln
SW50T3AgPSBbXSAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYXV0byBsZWZ0LCBhdXRv
IHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6ZGl2aWRlKGdsb2JhbE9iamVjdCwg
bGVmdCwgcmlnaHQpOwogICAgIH07CiAKLSAgICByZXR1cm4gYXJpdGhtZXRpY0JpbmFyeU9wKGds
b2JhbE9iamVjdCwgdjEsIHYyLCBKU0JpZ0ludDo6ZGl2aWRlLCBkb3VibGVPcCwgYmlnSW50MzJP
cCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBkaXZpc2lvbi4iX3Mp
OworICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwgdjIsIGRv
dWJsZU9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQg
bWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBkaXZpc2lvbi4iX3MpOwogfQogCiBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUganNSZW1haW5kZXIoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAgLTY0NywxMiArNjA2LDEyIEBAIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBqc1JlbWFpbmRlcihKU0dsb2IKICAgICBhdXRvIGRvdWJsZU9wID0gW10g
KGRvdWJsZSBsZWZ0LCBkb3VibGUgcmlnaHQpIC0+IGRvdWJsZSB7CiAgICAgICAgIHJldHVybiBq
c01vZChsZWZ0LCByaWdodCk7CiAgICAgfTsKLSAgICBhdXRvIGJpZ0ludDMyT3AgPSBbXSAoaW50
MzJfdCwgaW50MzJfdCkgLT4gSlNWYWx1ZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBkbyBzb21ldGhp
bmcgbW9yZSBjbGV2ZXIgaGVyZS4KLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKworICAgIGF1
dG8gYmlnSW50T3AgPSBbXSAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYXV0byBsZWZ0
LCBhdXRvIHJpZ2h0KSB7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6cmVtYWluZGVyKGdsb2Jh
bE9iamVjdCwgbGVmdCwgcmlnaHQpOwogICAgIH07CiAKLSAgICByZXR1cm4gYXJpdGhtZXRpY0Jp
bmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBKU0JpZ0ludDo6cmVtYWluZGVyLCBkb3VibGVP
cCwgYmlnSW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBy
ZW1haW5kZXIuIl9zKTsKKyAgICByZXR1cm4gYXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9iamVj
dCwgdjEsIHYyLCBkb3VibGVPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50
T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gcmVtYWluZGVyLiJf
cyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1BvdyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQpAQCAtNjYwLDEzICs2MTksMTIgQEAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzUG93KEpTR2xvYmFsT2JqZQogICAgIGF1dG8gZG91Ymxl
T3AgPSBbXSAoZG91YmxlIGxlZnQsIGRvdWJsZSByaWdodCkgLT4gZG91YmxlIHsKICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbk1hdGhQb3cobGVmdCwgcmlnaHQpOwogICAgIH07Ci0gICAgYXV0byBi
aWdJbnQzMk9wID0gW10gKGludDMyX3QsIGludDMyX3QpIC0+IEpTVmFsdWUgewotICAgICAgICAv
LyBFeHBvbmVudGlhdGlvbiBvbiBpbnRlZ2VycyBpcyBib3RoIHNvbWV3aGF0IHNsb3cgaW4gdGhl
IGJlc3QgY2FzZSwgYW5kIHZlcnkgbGlrZWx5IHRvIG92ZXJmbG93LgotICAgICAgICAvLyBTbyBk
b24ndCBib3RoZXIgdHJ5aW5nIHRvIGF2b2lkIGEgaGVhcCBhbGxvY2F0aW9uIGluIHRoYXQgY2Fz
ZS4KLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKworICAgIGF1dG8gYmlnSW50T3AgPSBbXSAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYXV0byBsZWZ0LCBhdXRvIHJpZ2h0KSB7Cisg
ICAgICAgIHJldHVybiBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlKGdsb2JhbE9iamVjdCwgbGVmdCwg
cmlnaHQpOwogICAgIH07CiAKLSAgICByZXR1cm4gYXJpdGhtZXRpY0JpbmFyeU9wKGdsb2JhbE9i
amVjdCwgdjEsIHYyLCBKU0JpZ0ludDo6ZXhwb25lbnRpYXRlLCBkb3VibGVPcCwgYmlnSW50MzJP
cCwgIkludmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBleHBvbmVudGlhdGlv
bi4iX3MpOworICAgIHJldHVybiBhcml0aG1ldGljQmluYXJ5T3AoZ2xvYmFsT2JqZWN0LCB2MSwg
djIsIGRvdWJsZU9wLCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIklu
dmFsaWQgbWl4IG9mIEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBleHBvbmVudGlhdGlvbi4iX3Mp
OwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNJbmMoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSB2KQpAQCAtNjgxLDEzICs2MzksOCBAQCBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUganNJbmMoSlNHbG9iYWxPYmplCiAgICAgICAgIHJldHVybiBqc051bWJlcihvcGVyYW5k
TnVtZXJpYy5hc051bWJlcigpICsgMSk7CiAKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgaWYgKG9w
ZXJhbmROdW1lcmljLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQ2NF90IG5ld1ZhbHVlID0g
c3RhdGljX2Nhc3Q8aW50NjRfdD4ob3BlcmFuZE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpICsg
MTsKLSAgICAgICAgLy8gRklYTUU6IHRoZSBmb2xsb3dpbmcgbmV4dCBmZXcgbGluZXMgbWlnaHQg
YmVuZWZpdCBmcm9tIGJlaW5nIG1hZGUgaW50byBhIGhlbHBlciBmdW5jdGlvbgotICAgICAgICBp
ZiAobmV3VmFsdWUgPiBJTlRfTUFYKQotICAgICAgICAgICAgcmV0dXJuIEpTQmlnSW50OjpjcmVh
dGVGcm9tKHZtLCBuZXdWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBqc0JpZ0ludDMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KG5ld1ZhbHVlKSk7Ci0gICAgfQorICAgIGlmIChvcGVyYW5kTnVtZXJpYy5p
c0JpZ0ludDMyKCkpCisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6aW5jKGdsb2JhbE9iamVjdCwg
b3BlcmFuZE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOwogI2VuZGlmCiAKICAgICBBU1NFUlQo
b3BlcmFuZE51bWVyaWMuaXNIZWFwQmlnSW50KCkpOwpAQCAtNzA2LDEzICs2NTksOCBAQCBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUganNEZWMoSlNHbG9iYWxPYmplCiAgICAgICAgIHJldHVybiBqc051
bWJlcihvcGVyYW5kTnVtZXJpYy5hc051bWJlcigpIC0gMSk7CiAKICNpZiBVU0UoQklHSU5UMzIp
Ci0gICAgaWYgKG9wZXJhbmROdW1lcmljLmlzQmlnSW50MzIoKSkgewotICAgICAgICBpbnQ2NF90
IG5ld1ZhbHVlID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4ob3BlcmFuZE51bWVyaWMuYmlnSW50MzJB
c0ludDMyKCkpIC0gMTsKLSAgICAgICAgLy8gRklYTUU6IHRoZSBmb2xsb3dpbmcgbmV4dCBmZXcg
bGluZXMgbWlnaHQgYmVuZWZpdCBmcm9tIGJlaW5nIG1hZGUgaW50byBhIGhlbHBlciBmdW5jdGlv
bgotICAgICAgICBpZiAobmV3VmFsdWUgPCBJTlRfTUlOKQotICAgICAgICAgICAgcmV0dXJuIEpT
QmlnSW50OjpjcmVhdGVGcm9tKHZtLCBuZXdWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBqc0JpZ0lu
dDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG5ld1ZhbHVlKSk7Ci0gICAgfQorICAgIGlmIChvcGVy
YW5kTnVtZXJpYy5pc0JpZ0ludDMyKCkpCisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6ZGVjKGds
b2JhbE9iamVjdCwgb3BlcmFuZE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpOwogI2VuZGlmCiAK
ICAgICBBU1NFUlQob3BlcmFuZE51bWVyaWMuaXNIZWFwQmlnSW50KCkpOwpAQCAtNzMyLDE0ICs2
ODAsMTUgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQml0d2lzZU5vdChKU0dsbwogCiAjaWYg
VVNFKEJJR0lOVDMyKQogICAgIGlmIChvcGVyYW5kTnVtZXJpYy5pc0JpZ0ludDMyKCkpCi0gICAg
ICAgIHJldHVybiBqc0JpZ0ludDMyKH5vcGVyYW5kTnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSk7
CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6Yml0d2lzZU5vdChnbG9iYWxPYmplY3QsIG9wZXJh
bmROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKTsKICNlbmRpZgogCiAgICAgQVNTRVJUKG9wZXJh
bmROdW1lcmljLmlzSGVhcEJpZ0ludCgpKTsKICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTQmlnSW50OjpiaXR3aXNlTm90KGdsb2JhbE9iamVjdCwgb3BlcmFuZE51bWVyaWMuYXNIZWFw
QmlnSW50KCkpKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIHNoaWZ0KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIsIGJvb2wgaXNMZWZ0KQor
dGVtcGxhdGUgPGJvb2wgaXNMZWZ0PgorQUxXQVlTX0lOTElORSBKU1ZhbHVlIHNoaWZ0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKQEAgLTc1Nyw3MCArNzA2LDUxIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBzaGlmdChKU0dsb2JhbE9iamUKICAgICB9CiAKICNpZiBVU0UoQklHSU5UMzIpCi0gICAgaWYg
KGxlZnROdW1lcmljLmlzQmlnSW50MzIoKSAmJiByaWdodE51bWVyaWMuaXNCaWdJbnQzMigpKSB7
Ci0gICAgICAgIGludDMyX3QgbGVmdEludDMyID0gbGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMy
KCk7Ci0gICAgICAgIGludDMyX3QgcmlnaHRJbnQzMiA9IHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFz
SW50MzIoKTsKLSAgICAgICAgaWYgKHJpZ2h0SW50MzIgPCAwKSB7Ci0gICAgICAgICAgICBpc0xl
ZnQgPSAhaXNMZWZ0OwotICAgICAgICAgICAgaWYgKHJpZ2h0SW50MzIgPT0gSU5UMzJfTUlOKQot
ICAgICAgICAgICAgICAgIHJpZ2h0SW50MzIgPSBJTlQzMl9NQVg7IC8vIFNoaWZ0cyBvbmUgbGVz
cyB0aGFuIHJlcXVlc3RlZCwgYnV0IG1ha2VzIG5vIG9ic2VydmFibGUgZGlmZmVyZW5jZS4KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByaWdodEludDMyID0gLXJpZ2h0SW50MzI7
CisgICAgaWYgKGxlZnROdW1lcmljLmlzQmlnSW50MzIoKSkgeworICAgICAgICBpZiAocmlnaHRO
dW1lcmljLmlzQmlnSW50MzIoKSkgeworICAgICAgICAgICAgaWYgKGlzTGVmdCkKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpsZWZ0U2hpZnQoZ2xv
YmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1lcmljLmJp
Z0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUs
IEpTQmlnSW50OjpzaWduZWRSaWdodFNoaWZ0KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYmln
SW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkpOwogICAgICAg
ICB9Ci0gICAgICAgIEFTU0VSVChyaWdodEludDMyID49IDApOwotCi0gICAgICAgIC8vIFRoaXMg
c3RkOjptaW4gaXMgYSBiaXQgaGFja3ksIGJ1dCByZXF1aXJlZCBiZWNhdXNlIGluIEMrKyBpdCBp
cyB1bmRlZmluZWQgYmVoYXZpb3IgdG8gZG8gYSBzaGlmdCB3aGVyZSB0aGUgcmlnaHQgb3BlcmFu
ZCBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHRoZSBiaXQtd2lkdGggb2YgdGhlIGxlZnQgb3BlcmFu
ZC4KLSAgICAgICAgaWYgKCFpc0xlZnQpCi0gICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihs
ZWZ0SW50MzIgPj4gc3RkOjptaW4ocmlnaHRJbnQzMiwgMzEpKTsKLQotICAgICAgICAvLyBEbyBz
b21lIGNoZWNrcyB0byBkZXRlY3Qgb3ZlcmZsb3cgb2YgbGVmdC1zaGlmdC4gQnV0IHRoaXMgaXMg
bXVjaCBjaGVhcGVyIGNvbXBhcmVkIHRvIGFsbG9jYXRpbmcgdHdvIEpTQmlnSW50IGFuZCBwZXJm
b3JtIHNoaWZ0IG9wZXJhdGlvbnMgaW4gSlNCaWdJbnQuCi0gICAgICAgIGlmICghbGVmdEludDMy
KQotICAgICAgICAgICAgcmV0dXJuIGpzQmlnSW50MzIoMCk7Ci0gICAgICAgIGlmIChyaWdodElu
dDMyIDwgMzIpIHsKLSAgICAgICAgICAgIGludDY0X3QgcmVzdWx0NjQgPSBzdGF0aWNfY2FzdDxp
bnQ2NF90PihsZWZ0SW50MzIpIDw8IHJpZ2h0SW50MzI7Ci0gICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4ocmVzdWx0NjQpKSA9PSByZXN1bHQ2
NCkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNCaWdJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90
PihyZXN1bHQ2NCkpOworICAgICAgICBpZiAocmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKSB7
CisgICAgICAgICAgICBpZiAoaXNMZWZ0KQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JF
VFVSTihzY29wZSwgSlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnROdW1lcmlj
LmJpZ0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYXNIZWFwQmlnSW50KCkpKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OnNpZ25lZFJpZ2h0U2hp
ZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5iaWdJbnQzMkFzSW50MzIoKSwgcmlnaHROdW1l
cmljLmFzSGVhcEJpZ0ludCgpKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGxlZnROdW1l
cmljLmlzSGVhcEJpZ0ludCgpKSB7CisgICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJbnQz
MigpKSB7CisgICAgICAgICAgICBpZiAoaXNMZWZ0KQorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9iYWxPYmplY3QsIGxlZnRO
dW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpKTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OnNpZ25lZFJp
Z2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHRO
dW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSk7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHROdW1l
cmljLmlzSGVhcEJpZ0ludCgpKSB7CisgICAgICAgICAgICBpZiAoaXNMZWZ0KQorICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmxlZnRTaGlmdChnbG9i
YWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgpLCByaWdodE51bWVyaWMuYXNIZWFw
QmlnSW50KCkpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJ
bnQ6OnNpZ25lZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJ
bnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CiAgICAgICAgIH0KLQotICAgICAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBhIGxlZnQgc2hpZnQgd2UgY2FuIG92ZXJmbG93LiBJIGRlYWwg
d2l0aCB0aGlzIGJ5IGFsbG9jYXRpbmcgSGVhcEJpZ0ludHMuCi0gICAgICAgIC8vIEZJWE1FOiBp
dCBtaWdodCBiZSBwb3NzaWJsZSB0byBkbyBzb21ldGhpbmcgc21hcnRlciwgdHJ5aW5nIHRvIGRv
IHRoZSBsZWZ0IHNoaWZ0IGFuZCBkZXRlY3Rpbmcgc29tZWhvdyBpZiBpdCBvdmVyZmxvd2VkLgot
ICAgICAgICBKU0JpZ0ludCogbGVmdEhlYXBCaWdJbnQgPSBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2
bSwgbGVmdEludDMyKTsKLSAgICAgICAgSlNCaWdJbnQqIHJpZ2h0SGVhcEJpZ0ludCA9IEpTQmln
SW50OjpjcmVhdGVGcm9tKHZtLCByaWdodEludDMyKTsKLSAgICAgICAgaWYgKGlzTGVmdCkKLSAg
ICAgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJbnQ6OmxlZnRTaGlmdChn
bG9iYWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodEhlYXBCaWdJbnQpKTsKLSAgICAgICAg
UkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6c2lnbmVkUmlnaHRTaGlmdChnbG9i
YWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodEhlYXBCaWdJbnQpKTsKLSAgICB9Ci0jZW5k
aWYKLQotICAgIGlmIChVTkxJS0VMWSghKGxlZnROdW1lcmljLmlzQmlnSW50KCkgJiYgcmlnaHRO
dW1lcmljLmlzQmlnSW50KCkpKSkgewotICAgICAgICBhdXRvIGVycm9yTWVzc2FnZSA9IGlzTGVm
dCA/ICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gbGVmdCBzaGlmdCBv
cGVyYXRpb24uIiA6ICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gc2ln
bmVkIHJpZ2h0IHNoaWZ0IG9wZXJhdGlvbi4iOwotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKICAgICB9Ci0KLSAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIGhhdmUgYSBjYXNlIGZvciBsZWZ0IGlzIEhlYXBCaWdJbnQgYW5kIHJp
Z2h0IGlzIEJpZ0ludDMyLCBpdCBzZWVtcyBmYWlybHkgbGlrZWx5IHRvIG9jY3VyIGZyZXF1ZW50
bHkuCi0jaWYgVVNFKEJJR0lOVDMyKQotICAgIEpTQmlnSW50KiBsZWZ0SGVhcEJpZ0ludCA9IGxl
ZnROdW1lcmljLmlzQmlnSW50MzIoKSA/IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCBsZWZ0TnVt
ZXJpYy5iaWdJbnQzMkFzSW50MzIoKSkgOiBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKTsKLSAg
ICBKU0JpZ0ludCogcmlnaHRIZWFwQmlnSW50ID0gcmlnaHROdW1lcmljLmlzQmlnSW50MzIoKSA/
IEpTQmlnSW50OjpjcmVhdGVGcm9tKHZtLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkp
IDogcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpOwogI2Vsc2UKLSAgICBKU0JpZ0ludCogbGVm
dEhlYXBCaWdJbnQgPSBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKTsKLSAgICBKU0JpZ0ludCog
cmlnaHRIZWFwQmlnSW50ID0gcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpOworICAgIFVOVVNF
RF9QQVJBTShiaWdJbnQzMk9wKTsKKyAgICBpZiAobGVmdE51bWVyaWMuaXNIZWFwQmlnSW50KCkg
JiYgcmlnaHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKSB7CisgICAgICAgIGlmIChpc0xlZnQpCisg
ICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50OjpsZWZ0U2hpZnQo
Z2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSwgcmlnaHROdW1lcmljLmFz
SGVhcEJpZ0ludCgpKSk7CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNCaWdJ
bnQ6OnNpZ25lZFJpZ2h0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0TnVtZXJpYy5hc0hlYXBCaWdJ
bnQoKSwgcmlnaHROdW1lcmljLmFzSGVhcEJpZ0ludCgpKSk7CisgICAgfQogI2VuZGlmCiAKLSAg
ICBpZiAoaXNMZWZ0KQotICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTQmlnSW50
OjpsZWZ0U2hpZnQoZ2xvYmFsT2JqZWN0LCBsZWZ0SGVhcEJpZ0ludCwgcmlnaHRIZWFwQmlnSW50
KSk7Ci0gICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU0JpZ0ludDo6c2lnbmVkUmlnaHRT
aGlmdChnbG9iYWxPYmplY3QsIGxlZnRIZWFwQmlnSW50LCByaWdodEhlYXBCaWdJbnQpKTsKKyAg
ICBhdXRvIGVycm9yTWVzc2FnZSA9IGlzTGVmdCA/ICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5k
IG90aGVyIHR5cGUgaW4gbGVmdCBzaGlmdCBvcGVyYXRpb24uIiA6ICJJbnZhbGlkIG1peCBvZiBC
aWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gc2lnbmVkIHJpZ2h0IHNoaWZ0IG9wZXJhdGlvbi4iOwor
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3Nh
Z2UpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNMU2hpZnQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKIHsKLSAgICBib29sIGlzTGVm
dCA9IHRydWU7Ci0gICAgcmV0dXJuIHNoaWZ0KGdsb2JhbE9iamVjdCwgdjEsIHYyLCBpc0xlZnQp
OworICAgIGNvbnN0ZXhwciBib29sIGlzTGVmdCA9IHRydWU7CisgICAgcmV0dXJuIHNoaWZ0PGlz
TGVmdD4oZ2xvYmFsT2JqZWN0LCB2MSwgdjIpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
anNSU2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1
ZSB2MikKIHsKLSAgICBib29sIGlzTGVmdCA9IGZhbHNlOwotICAgIHJldHVybiBzaGlmdChnbG9i
YWxPYmplY3QsIHYxLCB2MiwgaXNMZWZ0KTsKKyAgICBjb25zdGV4cHIgYm9vbCBpc0xlZnQgPSBm
YWxzZTsKKyAgICByZXR1cm4gc2hpZnQ8aXNMZWZ0PihnbG9iYWxPYmplY3QsIHYxLCB2Mik7CiB9
CiAKIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc1VSU2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBsZWZ0LCBKU1ZhbHVlIHJpZ2h0KQpAQCAtODI4LDIxICs3NTgsMjQg
QEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzVVJTaGlmdChKU0dsb2JhbAogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBPcHRpb25hbDx1aW50MzJfdD4gbGVmdFVpbnQzMiA9IGxlZnQudG9VSW50
MzJBZnRlclRvTnVtZXJpYyhnbG9iYWxPYmplY3QpOworICAgIGF1dG8gbGVmdE51bWVyaWMgPSBs
ZWZ0LnRvQmlnSW50T3JJbnQzMihnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0gICAgT3B0aW9uYWw8dWludDMyX3Q+IHJpZ2h0VWludDMyID0gcmln
aHQudG9VSW50MzJBZnRlclRvTnVtZXJpYyhnbG9iYWxPYmplY3QpOworICAgIGF1dG8gcmlnaHRO
dW1lcmljID0gcmlnaHQudG9CaWdJbnRPckludDMyKGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIGlmIChVTkxJS0VMWSghbGVmdFVpbnQz
MiB8fCAhcmlnaHRVaW50MzIpKSB7CisgICAgaWYgKFVOTElLRUxZKCFsZWZ0TnVtZXJpYy5pc0lu
dDMyKCkgfHwgIXJpZ2h0TnVtZXJpYy5pc0ludDMyKCkpKSB7CiAgICAgICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJCaWdJbnQgZG9lcyBub3Qgc3VwcG9ydCA+Pj4gb3Bl
cmF0b3IiX3MpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIHJldHVybiBqc051
bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihsZWZ0VWludDMyLnZhbHVlKCkgPj4gKHJpZ2h0VWlu
dDMyLnZhbHVlKCkgJiAzMSkpKTsKKyAgICB1aW50MzJfdCBsZWZ0VWludDMyID0gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGxlZnROdW1lcmljLmFzSW50MzIoKSk7CisgICAgdWludDMyX3QgcmlnaHRV
aW50MzIgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocmlnaHROdW1lcmljLmFzSW50MzIoKSk7CisK
KyAgICByZXR1cm4ganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obGVmdFVpbnQzMiA+PiAo
cmlnaHRVaW50MzIgJiAzMSkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSGVhcEJpZ0ludE9w
ZXJhdGlvbiwgdHlwZW5hbWUgSW50MzJPcGVyYXRpb24+Ci1BTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Yml0d2lzZUJpbmFyeU9wKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEs
IEpTVmFsdWUgdjIsIEhlYXBCaWdJbnRPcGVyYXRpb24mJiBiaWdJbnRPcCwgSW50MzJPcGVyYXRp
b24mJiBpbnQzMk9wLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnQzMk9wZXJhdGlvbj4KK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBiaXR3aXNlQmluYXJ5T3Ao
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MiwgSW50
MzJPcGVyYXRpb24mJiBpbnQzMk9wLCBKU1ZhbHVlICgqYmlnSW50MzIpKEpTR2xvYmFsT2JqZWN0
KiwgaW50MzJfdCwgaW50MzJfdCksIEpTVmFsdWUgKCptaXhlZEJpZ0ludDEpKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNCaWdJbnQqLCBpbnQzMl90KSwgSlNWYWx1ZSAoKm1peGVkQmlnSW50MikoSlNHbG9i
YWxPYmplY3QqLCBpbnQzMl90LCBKU0JpZ0ludCopLCBKU1ZhbHVlICgqaGVhcEJpZ0ludCkoSlNH
bG9iYWxPYmplY3QqLCBKU0JpZ0ludCosIEpTQmlnSW50KiksIGNvbnN0IGNoYXIqIGVycm9yTWVz
c2FnZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtODU2LDI1ICs3ODksMjQgQEAgQUxXQVlT
X0lOTElORSBKU1ZhbHVlIGJpdHdpc2VCaW5hcnlPcChKUwogICAgICAgICByZXR1cm4ganNOdW1i
ZXIoaW50MzJPcChsZWZ0TnVtZXJpYy5hc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5hc0ludDMyKCkp
KTsKIAogI2lmIFVTRShCSUdJTlQzMikKLSAgICBpZiAobGVmdE51bWVyaWMuaXNCaWdJbnQzMigp
ICYmIHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkpCi0gICAgICAgIHJldHVybiBqc0JpZ0ludDMy
KGludDMyT3AobGVmdE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5iaWdJ
bnQzMkFzSW50MzIoKSkpOwotICAgIC8vIEZJWE1FOiBhZGQgZmFzdCBwYXRoIGZvciBCaWdJbnQz
MiAvIEhlYXBCaWdJbnQsIGFuZCBmb3IgSGVhcEJpZ0ludCAvIEJpZ0ludDMyCi0gICAgLy8gSW4g
bWFueSBjYXNlcyB0aGVzZSBjb3VsZCBiZSBtYWRlIG1vcmUgZWZmaWNpZW50IHRoYW4gaGVhcC1h
bGxvY2F0aW5nIHRoZSBzbWFsbCBiaWctaW50IGFuZCBnb2luZyB0aHJvdWdoIHRoZSBnZW5lcmlj
IHBhdGguCi0gICAgLy8gQnV0IGl0IGlzIHF1aXRlIHRyaWNreSwgbm90IGxlYXN0IGJlY2F1c2Ug
SGVhcEJpZ0ludCB1c2UgYSBzaWduIGJpdCB3aGVyZWFzIEJpZ0ludDMyIHVzZSAyLWNvbXBsZW1l
bnQgcmVwcmVzZW50YXRpb24uCi0jZW5kaWYKLQotICAgIGlmICghKGxlZnROdW1lcmljLmlzQmln
SW50KCkgJiYgcmlnaHROdW1lcmljLmlzQmlnSW50KCkpKQotICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLQotI2lmIFVTRShC
SUdJTlQzMikKLSAgICBKU0JpZ0ludCogbGVmdEhlYXBCaWdJbnQgPSBsZWZ0TnVtZXJpYy5pc0Jp
Z0ludDMyKCkgPyBKU0JpZ0ludDo6Y3JlYXRlRnJvbSh2bSwgbGVmdE51bWVyaWMuYmlnSW50MzJB
c0ludDMyKCkpIDogbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCk7Ci0gICAgSlNCaWdJbnQqIHJp
Z2h0SGVhcEJpZ0ludCA9IHJpZ2h0TnVtZXJpYy5pc0JpZ0ludDMyKCkgPyBKU0JpZ0ludDo6Y3Jl
YXRlRnJvbSh2bSwgcmlnaHROdW1lcmljLmJpZ0ludDMyQXNJbnQzMigpKSA6IHJpZ2h0TnVtZXJp
Yy5hc0hlYXBCaWdJbnQoKTsKKyAgICBpZiAobGVmdE51bWVyaWMuaXNCaWdJbnQzMigpKSB7Cisg
ICAgICAgIGlmIChyaWdodE51bWVyaWMuaXNCaWdJbnQzMigpKQorICAgICAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBiaWdJbnQzMihnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmJp
Z0ludDMyQXNJbnQzMigpLCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAg
ICAgaWYgKHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkKKyAgICAgICAgICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgbWl4ZWRCaWdJbnQyKGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMu
YmlnSW50MzJBc0ludDMyKCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOworICAgIH0g
ZWxzZSBpZiAobGVmdE51bWVyaWMuaXNIZWFwQmlnSW50KCkpIHsKKyAgICAgICAgaWYgKHJpZ2h0
TnVtZXJpYy5pc0JpZ0ludDMyKCkpCisgICAgICAgICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2Nv
cGUsIG1peGVkQmlnSW50MShnbG9iYWxPYmplY3QsIGxlZnROdW1lcmljLmFzSGVhcEJpZ0ludCgp
LCByaWdodE51bWVyaWMuYmlnSW50MzJBc0ludDMyKCkpKTsKKyAgICAgICAgZWxzZSBpZiAocmln
aHROdW1lcmljLmlzSGVhcEJpZ0ludCgpKQorICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBoZWFwQmlnSW50KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50
KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOworICAgIH0KICNlbHNlCi0gICAgSlNC
aWdJbnQqIGxlZnRIZWFwQmlnSW50ID0gbGVmdE51bWVyaWMuYXNIZWFwQmlnSW50KCk7Ci0gICAg
SlNCaWdJbnQqIHJpZ2h0SGVhcEJpZ0ludCA9IHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKTsK
KyAgICBVTlVTRURfUEFSQU0oYmlnSW50MzJPcCk7CisgICAgaWYgKGxlZnROdW1lcmljLmlzSGVh
cEJpZ0ludCgpICYmIHJpZ2h0TnVtZXJpYy5pc0hlYXBCaWdJbnQoKSkKKyAgICAgICAgUkVMRUFT
RV9BTkRfUkVUVVJOKHNjb3BlLCBoZWFwQmlnSW50KGdsb2JhbE9iamVjdCwgbGVmdE51bWVyaWMu
YXNIZWFwQmlnSW50KCksIHJpZ2h0TnVtZXJpYy5hc0hlYXBCaWdJbnQoKSkpOwogI2VuZGlmCiAK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGJpZ0ludE9wKGdsb2JhbE9iamVjdCwgbGVm
dEhlYXBCaWdJbnQsIHJpZ2h0SGVhcEJpZ0ludCkpOworICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihnbG9iYWxPYmplY3QsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwogfQogCiBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUganNCaXR3aXNlQW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdjEsIEpTVmFsdWUgdjIpCkBAIC04ODMsOSArODE1LDEzIEBAIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBqc0JpdHdpc2VBbmQoSlNHbG8KICAgICAgICAgcmV0dXJuIGxlZnQgJiByaWdodDsKICAg
ICB9OwogCisgICAgYXV0byBiaWdJbnRPcCA9IFtdIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBhdXRvIGxlZnQsIGF1dG8gcmlnaHQpIHsKKyAgICAgICAgcmV0dXJuIEpTQmlnSW50Ojpi
aXR3aXNlQW5kKGdsb2JhbE9iamVjdCwgbGVmdCwgcmlnaHQpOworICAgIH07CisKICAgICAvLyBG
SVhNRTogY3VycmVudGx5LCBmb3IgcGFpcnMgb2YgQmlnSW50MzIsIHdlIHVuYm94IHRoZW0sIGRv
IHRoZSAiYW5kIiBhbmQgcmUtYm94IHRoZW0uCiAgICAgLy8gV2UgY291bGQgZG8gaXQgZGlyZWN0
bHkgb24gdGhlIEpTVmFsdWUuCi0gICAgcmV0dXJuIGJpdHdpc2VCaW5hcnlPcChnbG9iYWxPYmpl
Y3QsIHYxLCB2MiwgSlNCaWdJbnQ6OmJpdHdpc2VBbmQsIGludDMyT3AsICJJbnZhbGlkIG1peCBv
ZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUgaW4gYml0d2lzZSAnYW5kJyBvcGVyYXRpb24uIl9zKTsK
KyAgICByZXR1cm4gYml0d2lzZUJpbmFyeU9wKGdsb2JhbE9iamVjdCwgdjEsIHYyLCBpbnQzMk9w
LCBiaWdJbnRPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgIkludmFsaWQgbWl4IG9m
IEJpZ0ludCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICdhbmQnIG9wZXJhdGlvbi4iX3MpOwog
fQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNCaXR3aXNlT3IoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKQEAgLTg5Niw3ICs4MzIsMTIgQEAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQml0d2lzZU9yKEpTR2xvYgogCiAgICAgLy8gRklYTUU6
IGN1cnJlbnRseSwgZm9yIHBhaXJzIG9mIEJpZ0ludDMyLCB3ZSB1bmJveCB0aGVtLCBkbyB0aGUg
Im9yIiBhbmQgcmUtYm94IHRoZW0uCiAgICAgLy8gV2UgY291bGQgZG8gaXQgZGlyZWN0bHkgb24g
dGhlIEpTVmFsdWUuCi0gICAgcmV0dXJuIGJpdHdpc2VCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYx
LCB2MiwgSlNCaWdJbnQ6OmJpdHdpc2VPciwgaW50MzJPcCwgIkludmFsaWQgbWl4IG9mIEJpZ0lu
dCBhbmQgb3RoZXIgdHlwZSBpbiBiaXR3aXNlICdvcicgb3BlcmF0aW9uLiJfcyk7CisKKyAgICBh
dXRvIGJpZ0ludE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVm
dCwgYXV0byByaWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VPcihnbG9i
YWxPYmplY3QsIGxlZnQsIHJpZ2h0KTsKKyAgICB9OworCisgICAgcmV0dXJuIGJpdHdpc2VCaW5h
cnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgaW50MzJPcCwgYmlnSW50T3AsIGJpZ0ludE9wLCBi
aWdJbnRPcCwgYmlnSW50T3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90aGVyIHR5cGUg
aW4gYml0d2lzZSAnb3InIG9wZXJhdGlvbi4iX3MpOwogfQogCiBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUganNCaXR3aXNlWG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdjEs
IEpTVmFsdWUgdjIpCkBAIC05MDcsNyArODQ4LDExIEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBq
c0JpdHdpc2VYb3IoSlNHbG8KIAogICAgIC8vIEZJWE1FOiBjdXJyZW50bHksIGZvciBwYWlycyBv
ZiBCaWdJbnQzMiwgd2UgdW5ib3ggdGhlbSwgZG8gdGhlICJ4b3IiIGFuZCByZS1ib3ggdGhlbS4K
ICAgICAvLyBXZSBjb3VsZCBkbyBpdCBkaXJlY3RseSBvbiB0aGUgSlNWYWx1ZSwgYW5kIGp1c3Qg
cmVtZW1iZXIgdG8gZG8gYW4gb3Igd2l0aCAweDEyIGF0IHRoZSBlbmQgdG8gcmVzdG9yZSB0aGUg
dGFnCi0gICAgcmV0dXJuIGJpdHdpc2VCaW5hcnlPcChnbG9iYWxPYmplY3QsIHYxLCB2MiwgSlNC
aWdJbnQ6OmJpdHdpc2VYb3IsIGludDMyT3AsICJJbnZhbGlkIG1peCBvZiBCaWdJbnQgYW5kIG90
aGVyIHR5cGUgaW4gYml0d2lzZSAneG9yJyBvcGVyYXRpb24uIl9zKTsKKyAgICBhdXRvIGJpZ0lu
dE9wID0gW10gKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGF1dG8gbGVmdCwgYXV0byBy
aWdodCkgeworICAgICAgICByZXR1cm4gSlNCaWdJbnQ6OmJpdHdpc2VYb3IoZ2xvYmFsT2JqZWN0
LCBsZWZ0LCByaWdodCk7CisgICAgfTsKKworICAgIHJldHVybiBiaXR3aXNlQmluYXJ5T3AoZ2xv
YmFsT2JqZWN0LCB2MSwgdjIsIGludDMyT3AsIGJpZ0ludE9wLCBiaWdJbnRPcCwgYmlnSW50T3As
IGJpZ0ludE9wLCAiSW52YWxpZCBtaXggb2YgQmlnSW50IGFuZCBvdGhlciB0eXBlIGluIGJpdHdp
c2UgJ3hvcicgb3BlcmF0aW9uLiJfcyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFs
dWUgZ2V0QnlWYWxXaXRoSW5kZXgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxs
KiBiYXNlLCB1aW50MzJfdCBpbmRleCkK
</data>
<flag name="review"
          id="413160"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>