<?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>211205</bug_id>
          
          <creation_ts>2020-04-29 13:58:02 -0700</creation_ts>
          <short_desc>We can&apos;t cast toLength result to unsigned</short_desc>
          <delta_ts>2020-09-04 00:45:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=211298</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=211313</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=211279</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216121</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ross.kirsling</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>1647149</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-29 13:58:02 -0700</bug_when>
    <thetext>This is UB in C++, and does different things depending on what architecture you&apos;re on.

For example, on x86, this will give us a length of zero, which violates the spec:

double x = static_cast&lt;double&gt;(UINT_MAX) + 1;
unsigned length = x;

On arm64, this will give us UINT_MAX, which is also wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647217</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-29 17:20:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/62625562&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647253</commentid>
    <comment_count>2</comment_count>
      <attachid>398023</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-29 19:40:40 -0700</bug_when>
    <thetext>Created attachment 398023
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647265</commentid>
    <comment_count>3</comment_count>
      <attachid>398027</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-29 20:05:08 -0700</bug_when>
    <thetext>Created attachment 398027
WIP

This is pretty annoying, but I think I&apos;m close to done.

This is also making us more spec compliant. We&apos;ll also need to start throwing errors when producing length &gt; maxSafeInteger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647589</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-30 15:23:50 -0700</bug_when>
    <thetext>*** Bug 163417 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647652</commentid>
    <comment_count>5</comment_count>
      <attachid>398122</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-30 16:38:22 -0700</bug_when>
    <thetext>Created attachment 398122
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647656</commentid>
    <comment_count>6</comment_count>
      <attachid>398122</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-30 16:47:18 -0700</bug_when>
    <thetext>Comment on attachment 398122
patch

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

r=me. Please ensure that performance is neutral.

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:930
&gt; +        if (LIKELY(length + n &lt;= std::numeric_limits&lt;uint32_t&gt;::max()))

Since maximum-array-index is not UINT32_MAX (MAX_ARRAY_INDEX is UINT32_MAX - 1), should we check `length + n &lt;= MAX_ARRAY_INDEX` instead?

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:1963
&gt; +    if (LIKELY(propertyName &lt;= std::numeric_limits&lt;unsigned&gt;::max()))

Ditto.

&gt; Source/JavaScriptCore/runtime/JSObject.h:214
&gt; +        if (LIKELY(propertyName &lt;= std::numeric_limits&lt;uint32_t&gt;::max()))

Ditto.

&gt; Source/JavaScriptCore/runtime/JSObject.h:262
&gt; +        if (LIKELY(propertyName &lt;= std::numeric_limits&lt;uint32_t&gt;::max()))

Ditto.

&gt; Source/JavaScriptCore/runtime/JSObject.h:312
&gt; +        if (LIKELY(i &lt;= std::numeric_limits&lt;uint32_t&gt;::max()))

Ditto.

&gt; Source/JavaScriptCore/runtime/JSObject.h:380
&gt; +        if (LIKELY(i &lt;= std::numeric_limits&lt;uint32_t&gt;::max()))

Ditto.

&gt; Source/JavaScriptCore/runtime/JSObjectInlines.h:154
&gt; +    if (LIKELY(propertyName &lt;= std::numeric_limits&lt;uint32_t&gt;::max()))

Ditto.

&gt; Source/JavaScriptCore/runtime/JSObjectInlines.h:558
&gt; +    if (LIKELY(propertyName &lt;= std::numeric_limits&lt;uint32_t&gt;::max()))

Ditto.

&gt; Source/JavaScriptCore/runtime/JSObjectInlines.h:566
&gt; +    if (LIKELY(propertyName &lt;= std::numeric_limits&lt;uint32_t&gt;::max()))

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647657</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-30 16:51:14 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; Created attachment 398122 [details]
&gt; patch

I wonder if `i &gt; MAX_ARRAY_INDEX` check in JSObject::deletePropertyByIndex() is useful , considering `unsigned i`?

Would you please unskip test/built-ins/Array/* files in JSTests/test/config.yaml? They should be passing (and fast) with the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647658</commentid>
    <comment_count>8</comment_count>
      <attachid>398122</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-30 16:55:42 -0700</bug_when>
    <thetext>Comment on attachment 398122
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:930
&gt;&gt; +        if (LIKELY(length + n &lt;= std::numeric_limits&lt;uint32_t&gt;::max()))
&gt; 
&gt; Since maximum-array-index is not UINT32_MAX (MAX_ARRAY_INDEX is UINT32_MAX - 1), should we check `length + n &lt;= MAX_ARRAY_INDEX` instead?

Yeah I think you’re right. Maybe I should add an isIndex() specialized on uint64_t parameter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647664</commentid>
    <comment_count>9</comment_count>
      <attachid>398122</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-04-30 17:09:19 -0700</bug_when>
    <thetext>Comment on attachment 398122
patch

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

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        toLength, according to the spec, returns an 53-bit integer. In our

/an/a/

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        - Casting to unsigned from double is undefined behavior when the integer

/integer/integer is/

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +        This patch addresses each bad use the undefined behavior, and by doing so,

/bad use the/bad use of the/

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:385
&gt; +        if (count + length &gt; std::numeric_limits&lt;uint32_t&gt;::max()) {

Do we have a guarantee that count + length can never overflow?  I think in practice, this will never be, but can you add a debug ASSERT here just in case?  Either that or use CheckedInt32 and be sure.

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:926
&gt; +    if (UNLIKELY(length + argCount &gt; static_cast&lt;uint64_t&gt;(maxSafeInteger())))

Do we need an overflow check for length + argCount here?  Or do we have a guarantee that both length and argCount are less than UINT_MAX?  If so, can you add debug ASSERT on those?

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:1257
&gt; +        if (UNLIKELY(length + nrArgs &gt; static_cast&lt;uint64_t&gt;(maxSafeInteger())))

Ditto: overflow check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647668</commentid>
    <comment_count>10</comment_count>
      <attachid>398122</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-30 17:19:56 -0700</bug_when>
    <thetext>Comment on attachment 398122
patch

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

If we want to support all edge cases of the spec, we should vet all OOM throws.

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:1112
&gt; +            throwOutOfMemoryError(globalObject, scope);

We should throw a RangeError here.

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:482
&gt; +                throwOutOfMemoryError(globalObject, scope);

If there are indexed getters between 0 and `length`, we should invoke them.

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:657
&gt; +                    throwOutOfMemoryError(m_globalObject, scope);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647720</commentid>
    <comment_count>11</comment_count>
      <attachid>398122</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-30 19:41:57 -0700</bug_when>
    <thetext>Comment on attachment 398122
patch

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

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:385
&gt;&gt; +        if (count + length &gt; std::numeric_limits&lt;uint32_t&gt;::max()) {
&gt; 
&gt; Do we have a guarantee that count + length can never overflow?  I think in practice, this will never be, but can you add a debug ASSERT here just in case?  Either that or use CheckedInt32 and be sure.

That&apos;s correct. Because these are expected to be 53-bit integers. I can assert in the prologue of this function.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:926
&gt;&gt; +    if (UNLIKELY(length + argCount &gt; static_cast&lt;uint64_t&gt;(maxSafeInteger())))
&gt; 
&gt; Do we need an overflow check for length + argCount here?  Or do we have a guarantee that both length and argCount are less than UINT_MAX?  If so, can you add debug ASSERT on those?

same reason. This is a 53-bit int since it came from toLength.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:1112
&gt;&gt; +            throwOutOfMemoryError(globalObject, scope);
&gt; 
&gt; We should throw a RangeError here.

Why? The spec essentially allows for engines to throw OOM whenever it feels like it. Why is RangeError better?

&gt;&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:482
&gt;&gt; +                throwOutOfMemoryError(globalObject, scope);
&gt; 
&gt; If there are indexed getters between 0 and `length`, we should invoke them.

Same comment. My understand is spec allows us to OOM whenever we feel like it. This feels like a reasonable thing to do here.

&gt;&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:657
&gt;&gt; +                    throwOutOfMemoryError(m_globalObject, scope);
&gt; 
&gt; Ditto.

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647726</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-30 19:47:04 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #7)
&gt; (In reply to Saam Barati from comment #5)
&gt; &gt; Created attachment 398122 [details]
&gt; &gt; patch
&gt; 
&gt; I wonder if `i &gt; MAX_ARRAY_INDEX` check in JSObject::deletePropertyByIndex()
&gt; is useful , considering `unsigned i`?
&gt; 
&gt; Would you please unskip test/built-ins/Array/* files in
&gt; JSTests/test/config.yaml? They should be passing (and fast) with the patch.

What tests do you mean here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647776</commentid>
    <comment_count>13</comment_count>
      <attachid>398164</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-30 23:30:49 -0700</bug_when>
    <thetext>Created attachment 398164
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647777</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-30 23:42:39 -0700</bug_when>
    <thetext>A quick smoke test shows this is neutral on JS2 on the cli</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647778</commentid>
    <comment_count>15</comment_count>
      <attachid>398165</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-04-30 23:46:47 -0700</bug_when>
    <thetext>Created attachment 398165
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647797</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-01 01:45:24 -0700</bug_when>
    <thetext>Committed r260990: &lt;https://trac.webkit.org/changeset/260990&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 398165.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647939</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-05-01 11:27:32 -0700</bug_when>
    <thetext>watchOS build fixes in:
https://trac.webkit.org/changeset/261005/webkit
https://trac.webkit.org/changeset/261006/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684029</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-08-30 13:29:11 -0700</bug_when>
    <thetext>*** Bug 164456 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1684031</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-08-30 13:35:15 -0700</bug_when>
    <thetext>*** Bug 177326 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398023</attachid>
            <date>2020-04-29 19:40:40 -0700</date>
            <delta_ts>2020-04-29 20:05:08 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>30330</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDcgKzgyOCw3IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDAp
IHsKLSAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgaW5kZXgs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgb2JqZWN0LT5w
dXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4
KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIApAQCAtODQ0LDcgKzg0NCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW8KICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAg
ICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgaW5kZXgsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJ
bmRleElubGluZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCkBAIC04NjIsNyArODYyLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dERvdWJsZUJ5VgogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5j
b2RlQXNEb3VibGUsIHZhbHVlKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAg
ICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpbmRleCwganNWYWx1ZSwg
dHJ1ZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIGpzVmFsdWUsIHRydWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIApAQCAtODgwLDcgKzg4MCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXREb3VibGVCeVYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsK
LSAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgaW5kZXgsIGpz
VmFsdWUsIGZhbHNlKTsKKyAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4KSwganNWYWx1ZSwgZmFsc2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtODk4LDcgKzg5OCw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAKICAgICBpZiAoaW5kZXggPj0g
MCkgewotICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgs
IGpzVmFsdWUsIDAsIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cpOworICAgICAgICBvYmplY3Qt
PnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4
KSwganNWYWx1ZSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTkxNSw3ICs5MTUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0RG91YmxlQnlWCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpF
bmNvZGVBc0RvdWJsZSwgdmFsdWUpOwogCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAg
b2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCBqc1ZhbHVlKTsKKyAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVp
bnQzMl90PihpbmRleCksIGpzVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MDAzLDcgKzEwMDMsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4
KGdsb2JhbE9iamVjdCwgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCAwLCBQ
dXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRl
eChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBpZiAoaW5kZXggPj0g
MCkgewotICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJl
Y3RJbmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZv
aWQgQXJyYXlQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiAKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0UHJvcGVydHkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgaW5kZXgp
CitzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QsIHVpbnQ2NF90IGluZGV4KQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0xNzksMTIgKzE3OSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIHB1dExlbmd0aChKU0dsCiAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKIH0KIAotc3RhdGljIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXRMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0m
IHZtLCBKU09iamVjdCogb2JqLCB1bnNpZ25lZCB2YWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0TGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNP
YmplY3QqIG9iaiwgdWludDY0X3QgdmFsdWUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHJvd0V4Y2VwdGlv
biA9IHRydWU7CiAgICAgaWYgKGlzSlNBcnJheShvYmopKSB7Ci0gICAgICAgIGpzQ2FzdDxKU0Fy
cmF5Kj4ob2JqKS0+c2V0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdmFsdWUsIHRocm93RXhjZXB0aW9u
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSA9
PSB2YWx1ZSk7CisgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+c2V0TGVuZ3RoKGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSwgdGhyb3dFeGNlcHRpb24pOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KICAgICBz
Y29wZS5yZWxlYXNlKCk7CkBAIC0yOTEsNyArMjkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSkpKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdW5kZWZp
bmVkVmFsdWUgPSAwKQorc3RhdGljIGlubGluZSB1aW50NjRfdCBhcmd1bWVudENsYW1wZWRJbmRl
eEZyb21TdGFydE9yRW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgdW5kZWZpbmVkVmFsdWUgPSAwKQogewogICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gdW5kZWZpbmVkVmFsdWU7
CkBAIC0yOTksOSArMzAwLDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBhcmd1bWVudENsYW1w
ZWRJbgogICAgIGRvdWJsZSBpbmRleERvdWJsZSA9IHZhbHVlLnRvSW50ZWdlcihnbG9iYWxPYmpl
Y3QpOwogICAgIGlmIChpbmRleERvdWJsZSA8IDApIHsKICAgICAgICAgaW5kZXhEb3VibGUgKz0g
bGVuZ3RoOwotICAgICAgICByZXR1cm4gaW5kZXhEb3VibGUgPCAwID8gMCA6IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbmRleERvdWJsZSk7CisgICAgICAgIHJldHVybiBpbmRleERvdWJsZSA8IDAg
PyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4RG91YmxlKTsKICAgICB9Ci0gICAgcmV0
dXJuIGluZGV4RG91YmxlID4gbGVuZ3RoID8gbGVuZ3RoIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGluZGV4RG91YmxlKTsKKyAgICByZXR1cm4gaW5kZXhEb3VibGUgPiBsZW5ndGggPyBsZW5ndGgg
OiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXhEb3VibGUpOwogfQogCiAvLyBUaGUgc2hpZnQv
dW5zaGlmdCBmdW5jdGlvbiBpbXBsZW1lbnQgdGhlIHNoaWZ0L3Vuc2hpZnQgYmVoYXZpb3VyIHJl
cXVpcmVkCkBAIC0zMjAsMzMgKzMyMSwzNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGFyZ3Vt
ZW50Q2xhbXBlZEluCiAvLyBtdXN0IGJlIGludHJvZHVjaW5nIG5ldyB2YWx1ZXMuCiAKIHRlbXBs
YXRlPEpTQXJyYXk6OlNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgotdm9pZCBzaGlmdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQg
aGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNp
Z25lZCBsZW5ndGgpCit2b2lkIHNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiB0aGlzT2JqLCB1aW50NjRfdCBoZWFkZXIsIHVpbnQ2NF90IGN1cnJlbnRDb3VudCwg
dWludDY0X3QgcmVzdWx0Q291bnQsIHVpbnQ2NF90IGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudENvdW50ID4gcmVzdWx0Q291bnQpOwot
ICAgIHVuc2lnbmVkIGNvdW50ID0gY3VycmVudENvdW50IC0gcmVzdWx0Q291bnQ7CisgICAgdWlu
dDY0X3QgY291bnQgPSBjdXJyZW50Q291bnQgLSByZXN1bHRDb3VudDsKIAogICAgIFJFTEVBU0Vf
QVNTRVJUKGhlYWRlciA8PSBsZW5ndGgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRDb3Vu
dCA8PSAobGVuZ3RoIC0gaGVhZGVyKSk7CiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7
CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAgICAgaWYg
KGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnNoaWZ0Q291bnQ8c2hpZnRDb3Vu
dE1vZGU+KGdsb2JhbE9iamVjdCwgaGVhZGVyLCBjb3VudCkpCisgICAgICAgIHVpbnQzMl90IGhl
YWRlcjMyID0gaGVhZGVyOworICAgICAgICBSRUxFQVNFX0FTU0VSVChoZWFkZXIzMiA9PSBoZWFk
ZXIpOworICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0aCAmJiBhcnJheS0+c2hp
ZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZ2xvYmFsT2JqZWN0LCBoZWFkZXIzMiwgY291bnQpKQog
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBoZWFkZXIgPSBoZWFkZXIzMjsKICAgICB9CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGsgPSBoZWFkZXI7IGsgPCBsZW5ndGggLSBjdXJyZW50Q291bnQ7
ICsraykgewotICAgICAgICB1bnNpZ25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudDsKLSAgICAg
ICAgdW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQ7CisgICAgZm9yICh1aW50NjRfdCBrID0g
aGVhZGVyOyBrIDwgbGVuZ3RoIC0gY3VycmVudENvdW50OyArK2spIHsKKyAgICAgICAgdWludDY0
X3QgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CisgICAgICAgIHVpbnQ2NF90IHRvID0gayArIHJl
c3VsdENvdW50OwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqLCBmcm9tKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRC
eUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgdG8sIHZhbHVlLCB0cnVlKTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIHRvKTsKKyAgICAgICAgICAg
IGJvb2wgc3VjY2VzcyA9IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgdG8p
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAg
ICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBAIC0zNTQs
OCArMzU4LDggQEAgdm9pZCBzaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgayA9IGxlbmd0
aDsgayA+IGxlbmd0aCAtIGNvdW50OyAtLWspIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhp
c09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZ2xv
YmFsT2JqZWN0LCBrIC0gMSk7CisgICAgZm9yICh1aW50NjRfdCBrID0gbGVuZ3RoOyBrID4gbGVu
Z3RoIC0gY291bnQ7IC0taykgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5kZWxl
dGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGsgLSAxKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFibGVUb0RlbGV0ZVByb3Bl
cnR5RXJyb3IpOwpAQCAtNjg1LDggKzY4OSwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAKICAgICBKU09iamVjdCogdGhpc09iamVjdCA9IHRoaXNWYWx1ZS50
b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9i
amVjdCwgdGhpc09iamVjdCk7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIGlmIChsZW5ndGggPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIHsKKyAgICAgICAgdGhyb3dPdXRP
Zk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm4gZW5jb2Rl
ZEpTVmFsdWUoKTsKKyAgICB9CiAKICAgICBTdHJpbmdSZWN1cnNpb25DaGVja2VyIGNoZWNrZXIo
Z2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSB8fCBjaGVja2VyLmVhcmx5UmV0dXJuVmFsdWUoKSk7CkBAIC04NjYsNyArODc0
LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEVYQ0VQ
VElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAgaWYgKFVO
TElLRUxZKCF0aGlzT2JqKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsKKyAgICB1
aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odG9MZW5ndGgoZ2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAKICAgICBpZiAobGVuZ3RoID09IDApIHsKQEAgLTg3NSwxNyArODgzLDIzIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICBKU1ZhbHVlIHJl
c3VsdCA9IHRoaXNPYmotPmdldChnbG9iYWxPYmplY3QsIGxlbmd0aCAtIDEpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIGJvb2wgc3VjY2Vz
cyA9IHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNP
YmosIGdsb2JhbE9iamVjdCwgbGVuZ3RoIC0gMSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFibGVUb0RlbGV0
ZVByb3BlcnR5RXJyb3IpOwotICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICB9
Ci0gICAgc2NvcGUucmVsZWFzZSgpOwotICAgIHB1dExlbmd0aChnbG9iYWxPYmplY3QsIHZtLCB0
aGlzT2JqLCBqc051bWJlcihsZW5ndGggLSAxKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOworICAgIGF1dG8gcGVyZm9ybVBvcCA9IFsmXSAoYXV0byBpbmRleCwgSlNWYWx1
ZSBpbmRleFZhbHVlKSB7CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGds
b2JhbE9iamVjdCwgaW5kZXgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+ZGVsZXRl
UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nl
c3MpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBV
bmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRK
U1ZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUucmVsZWFzZSgpOworICAgICAgICBw
dXRMZW5ndGgoZ2xvYmFsT2JqZWN0LCB2bSwgdGhpc09iaiwgaW5kZXhWYWx1ZSk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICB9OworCisgICAgaWYgKExJS0VM
WShsZW5ndGggPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkKKyAgICAg
ICAgcmV0dXJuIHBlcmZvcm1Qb3Aoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCAtIDEpLCBq
c051bWJlcihzdGF0aWNfY2FzdDx1aW50MzJfdD4obGVuZ3RoIC0gMSkpKTsKKyAgICByZXR1cm4g
cGVyZm9ybVBvcChJZGVudGlmaWVyOjpmcm9tKHZtLCBzdGF0aWNfY2FzdDxkb3VibGU+KGxlbmd0
aCAtIDEpKSwganNOdW1iZXIobGVuZ3RoIC0gMSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GdW5jUHVzaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkwNSwxOCArOTE5LDE2IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2Nv
cGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikp
CiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9
IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7CisgICAgdWludDY0X3QgbGVuZ3RoID0g
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaikpOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAg
Zm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyBuKysp
IHsKICAgICAgICAgLy8gQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3c7IHdoZXJlIHNhZmUgd2Ug
Y2FuIGRvIGEgZmFzdCBwdXQgYnkgaW5kZXguCi0gICAgICAgIGlmIChsZW5ndGggKyBuID49IGxl
bmd0aCkKLSAgICAgICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0
aGlzT2JqLCBnbG9iYWxPYmplY3QsIGxlbmd0aCArIG4sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJn
dW1lbnQobiksIHRydWUpOworICAgICAgICBpZiAobGVuZ3RoICsgbiA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJs
ZSh2bSktPnB1dEJ5SW5kZXgodGhpc09iaiwgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4obGVuZ3RoICsgbiksIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQobiksIHRydWUp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXNP
YmopOwotICAgICAgICAgICAgYXV0byBzdHJpbmcgPSBKU1ZhbHVlKHN0YXRpY19jYXN0PGludDY0
X3Q+KGxlbmd0aCkgKyBzdGF0aWNfY2FzdDxpbnQ2NF90PihuKSkudG9XVEZTdHJpbmcoZ2xvYmFs
T2JqZWN0KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKHZtLCBzdHJpbmcpOworICAgICAgICAgICAgSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUgPSBJZGVudGlmaWVyOjpmcm9tKHZtLCBzdGF0aWNfY2FzdDxkb3VibGU+KGxlbmd0
aCArIG4pKTsKICAgICAgICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0KHRoaXNP
YmosIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KG4pLCBzbG90KTsKICAgICAgICAgfQogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTkzOCw3ICs5NTAsNyBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0
KSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAKLSAgICB1bnNpZ25lZCBsZW5n
dGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOworICAgIHVpbnQ2NF90IGxl
bmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgp
KTsKIAogICAgIHRoaXNPYmplY3QtPmVuc3VyZVdyaXRhYmxlKHZtKTsKQEAgLTk4MCw5ICs5OTIs
OSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgfQogICAg
IH0KIAotICAgIHVuc2lnbmVkIG1pZGRsZSA9IGxlbmd0aCAvIDI7Ci0gICAgZm9yICh1bnNpZ25l
ZCBsb3dlciA9IDA7IGxvd2VyIDwgbWlkZGxlOyBsb3dlcisrKSB7Ci0gICAgICAgIHVuc2lnbmVk
IHVwcGVyID0gbGVuZ3RoIC0gbG93ZXIgLSAxOworICAgIHVpbnQ2NF90IG1pZGRsZSA9IGxlbmd0
aCAvIDI7CisgICAgZm9yICh1aW50NjRfdCBsb3dlciA9IDA7IGxvd2VyIDwgbWlkZGxlOyBsb3dl
cisrKSB7CisgICAgICAgIHVpbnQ2NF90IHVwcGVyID0gbGVuZ3RoIC0gbG93ZXIgLSAxOwogICAg
ICAgICBib29sIGxvd2VyRXhpc3RzID0gdGhpc09iamVjdC0+aGFzUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBsb3dlcik7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgICAgICBKU1ZhbHVlIGxvd2VyVmFsdWU7CkBAIC0xMDAzLDcgKzEwMTUs
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgbG93ZXIsIHVwcGVy
VmFsdWUsIHRydWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5j
b2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nl
c3MgPSB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0
aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIGxvd2VyKTsKKyAgICAgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IHRoaXNPYmplY3QtPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgbG93ZXIpOwogICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKSB7CiAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVy
cm9yKTsKQEAgLTEwMTUsNyArMTAyNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xv
YmFsT2JqZWN0LCB1cHBlciwgbG93ZXJWYWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgdXBwZXIpOwor
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iamVjdC0+ZGVsZXRlUHJvcGVydHkoZ2xv
YmFsT2JqZWN0LCB1cHBlcik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2Vzcykp
IHsKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBV
bmFibGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpOwpAQCAtMTAzNCw3ICsxMDQ2LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEVYQ0VQVElPTl9BU1NFUlQo
ISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlz
T2JqKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsKKyAgICB1aW50NjRfdCBsZW5n
dGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2Jq
KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAK
ICAgICBpZiAobGVuZ3RoID09IDApIHsKQEAgLTEwNjEsMTIgKzEwNzMsMTIgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFz
Y29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2Jq
KSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChn
bG9iYWxPYmplY3QsIHRoaXNPYmopOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHRvTGVuZ3RoKGds
b2JhbE9iamVjdCwgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKIAotICAgIHVuc2lnbmVkIGJlZ2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRP
ckVuZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGxlbmd0aCk7CisgICAg
dWludDY0X3QgYmVnaW4gPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgbGVuZ3RoKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHVuc2lnbmVkIGVuZCA9IGFyZ3VtZW50Q2xhbXBl
ZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEp
LCBsZW5ndGgsIGxlbmd0aCk7CisgICAgdWludDY0X3QgZW5kID0gYXJndW1lbnRDbGFtcGVkSW5k
ZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMSksIGxl
bmd0aCwgbGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAg
IGlmIChlbmQgPCBiZWdpbikKICAgICAgICAgZW5kID0gYmVnaW47CkBAIC0xMDk2LDggKzExMDgs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgLy8gdGhh
dCBjYW4gR0MgKGUuZy4gYWxsb2NhdGluZyB0aGUgcmVzdWx0IGFycmF5KS4KICAgICB0aGlzT2Jq
LT51c2UoKTsKIAotICAgIHVuc2lnbmVkIG4gPSAwOwotICAgIGZvciAodW5zaWduZWQgayA9IGJl
Z2luOyBrIDwgZW5kOyBrKyssIG4rKykgeworICAgIHVpbnQ2NF90IG4gPSAwOworICAgIGZvciAo
dWludDY0X3QgayA9IGJlZ2luOyBrIDwgZW5kOyBrKyssIG4rKykgewogICAgICAgICBKU1ZhbHVl
IHYgPSBnZXRQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHRoaXNPYmosIGspOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICBpZiAodikgewpAQCAtMTEyMSw3
ICsxMTMzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
IEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAg
aWYgKFVOTElLRUxZKCF0aGlzT2JqKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsK
KyAgICB1aW50NjRfdCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopOwog
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAg
aWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSkgewpAQCAtMTE0NSwxMCArMTE1NywxMCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBhY3R1YWxT
dGFydCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApLCBsZW5ndGgpOworICAgIHVpbnQ2NF90IGFjdHVhbFN0YXJ0
ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCksIGxlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICB1bnNpZ25lZCBhY3R1YWxEZWxldGVDb3VudCA9
IGxlbmd0aCAtIGFjdHVhbFN0YXJ0OworICAgIHVpbnQ2NF90IGFjdHVhbERlbGV0ZUNvdW50ID0g
bGVuZ3RoIC0gYWN0dWFsU3RhcnQ7CiAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgp
ID4gMSkgewogICAgICAgICBkb3VibGUgZGVsZXRlQ291bnQgPSBjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTExNTcsNyArMTE2OSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgZWxzZSBp
ZiAoZGVsZXRlQ291bnQgPiBsZW5ndGggLSBhY3R1YWxTdGFydCkKICAgICAgICAgICAgIGFjdHVh
bERlbGV0ZUNvdW50ID0gbGVuZ3RoIC0gYWN0dWFsU3RhcnQ7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlbGV0ZUNv
dW50KTsKKyAgICAgICAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGRlbGV0ZUNvdW50KTsKICAgICB9CiAKICAgICBzdGQ6OnBhaXI8U3BlY2llc0NvbnN0cnVj
dFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2llc0NvbnN0cnVjdEFycmF5
KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgYWN0dWFsRGVsZXRlQ291bnQpOwpAQCAtMTE3NSwxMyAr
MTE4NywxNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
ICAgIGlmIChzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkNy
ZWF0ZWRPYmplY3QpCiAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWVzUmVzdWx0LnNlY29uZDsK
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGUo
dm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIGFjdHVhbERlbGV0ZUNvdW50KTsKKyAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShhY3R1YWxEZWxldGVDb3VudCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRK
U1ZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgPSBKU0FycmF5Ojp0
cnlDcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVE
dXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIHN0YXRpY19jYXN0PHVpbnQzMl90
PihhY3R1YWxEZWxldGVDb3VudCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQp
KSB7CiAgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBhY3R1
YWxEZWxldGVDb3VudDsgKytrKSB7CisgICAgICAgIGZvciAodWludDY0X3QgayA9IDA7IGsgPCBh
Y3R1YWxEZWxldGVDb3VudDsgKytrKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9w
ZXJ0eShnbG9iYWxPYmplY3QsIHRoaXNPYmosIGsgKyBhY3R1YWxTdGFydCk7CiAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWSghdikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsMTMg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20o
Vk0mLCB1bnNpZ25lZCB5KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmll
ciBmcm9tKFZNJiwgaW50IHkpOwogICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0mLCBkb3Vi
bGUgeSk7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYgdm0sIHVpbnQ2NF90IHkpCisg
ICAgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHkpID09IHkpCisgICAgICAg
ICAgICByZXR1cm4gZnJvbSh2bSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHkpKTsKKyAgICAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+KHkpKSA9PSB5
KTsKKyAgICAgICAgcmV0dXJuIGZyb20odm0sIHN0YXRpY19jYXN0PGRvdWJsZT4oeSkpOworICAg
IH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7
IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3Bw
CShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDExICszODcsMTEgQEAgVmVjdG9yPFN0
cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChKUwogICAgIEpTVmFsdWUgbGVuZ3RoUHJvcGVy
dHkgPSBsb2NhbGVzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxTdHJpbmc+KCkp
OwogCi0gICAgZG91YmxlIGxlbmd0aCA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGdsb2JhbE9i
amVjdCk7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxlbmd0
aFByb3BlcnR5LnRvTGVuZ3RoKGdsb2JhbE9iamVjdCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIFZlY3RvcjxTdHJpbmc+KCkpOwogCiAgICAgSGFzaFNldDxTdHJpbmc+IHNlZW5T
ZXQ7Ci0gICAgZm9yIChkb3VibGUgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgeworICAgIGZvciAo
dWludDY0X3QgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgewogICAgICAgICBib29sIGtQcmVzZW50
ID0gbG9jYWxlc09iamVjdC0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBrKTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI2MDkx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk1OCw2ICsxOTU4LDEzIEBAIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5
KEpTR2xvYmFsT2JqZWMKICAgICByZXR1cm4gaGFzUHJvcGVydHlHZW5lcmljKGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6SGFzUHJv
cGVydHkpOwogfQogCitib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgaWYgKExJ
S0VMWShwcm9wZXJ0eU5hbWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KSkKKyAgICAgICAgcmV0dXJuIGhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiBoYXNQcm9wZXJ0eShnbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb20oZ2xvYmFsT2JqZWN0LT52bSgpLCBzdGF0aWNfY2FzdDxk
b3VibGU+KHByb3BlcnR5TmFtZSkpKTsKK30KKwogYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHlH
ZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlIGludGVybmFsTWV0aG9kVHlw
ZSkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBpbnRlcm5hbE1ldGhvZFR5
cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZp
c2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTAgKzE1OSwxMiBAQCBwdWJsaWM6CiAKICAgICBKU1Zh
bHVlIGdldChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgSlNWYWx1
ZSBnZXQoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAg
IEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgcHJvcGVydHlOYW1lKSBjb25z
dDsKIAogICAgIHRlbXBsYXRlPGJvb2wgY2hlY2tOdWxsU3RydWN0dXJlID0gZmFsc2U+CiAgICAg
Ym9vbCBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIGdldFByb3BlcnR5
U2xvdChKU0dsb2JhbE9iamVjdCosIHVpbnQ2NF90IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24+IHR5cGVu
YW1lIHN0ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2wsIFByb3BlcnR5
U2xvdCYpPjo6dHlwZSBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4gdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJh
Y2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIGdldFByb3BlcnR5
U2xvdChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiwgQ2FsbGJh
Y2tXaGVuTm9FeGNlcHRpb24pIGNvbnN0OwogCkBAIC0yMDYsNiArMjA4LDE1IEBAIHB1YmxpYzoK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRo
aXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOwogICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwdXRCeUluZGV4SW5saW5lKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdykKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1l
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gcHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90
Pihwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworCisgICAgICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KHRoaXMsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJuIHB1dElubGlu
ZUZvckpTT2JqZWN0KHRoaXMsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShnZXRWTShn
bG9iYWxPYmplY3QpLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAgfQogICAgICAg
ICAKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0aG9kczoKICAg
ICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKQEAgLTI0Niw2ICsy
NTcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2Jq
ZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBQdXREaXJlY3RJbmRleExpa2VQdXREaXJlY3Qp
OwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwdXREaXJlY3RJbmRleChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2RlKQorICAgIHsK
KyAgICAgICAgaWYgKExJS0VMWShwcm9wZXJ0eU5hbWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpKSkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJbmRleChnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgYXR0
cmlidXRlcywgbW9kZSk7CisgICAgICAgIHJldHVybiBwdXREaXJlY3QoZ2V0Vk0oZ2xvYmFsT2Jq
ZWN0KSwgSWRlbnRpZmllcjo6ZnJvbShnZXRWTShnbG9iYWxPYmplY3QpLCBwcm9wZXJ0eU5hbWUp
LCB2YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgfQorCiAgICAgLy8gQSBnZW5lcmFsbHkgbm9uLXRo
cm93aW5nIHZlcnNpb24gb2YgcHV0RGlyZWN0IGFuZCBwdXREaXJlY3RJbmRleC4KICAgICAvLyBI
b3dldmVyLCBpdCdzIG9ubHkgZ3VhcmFudGVlZCB0byBub3QgdGhyb3cgYmFzZWQgb24gd2hhdCB0
aGUgcmVjZWl2ZXIgaXMuCiAgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNlaXZlciBpcyBh
IFByb3h5T2JqZWN0LCB0aGlzIGlzIG5vdCBndWFyYW50ZWVkLCBzaW5jZQpAQCAtMzQ4LDYgKzM2
NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAg
ICB9CisKKyAgICBKU1ZhbHVlIHRyeUdldEluZGV4UXVpY2tseSh1aW50NjRfdCBpKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxk
b3VibGU+KGkpKSA9PSBpKTsKKyAgICAgICAgaWYgKExJS0VMWShpIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ5R2V0SW5kZXhR
dWlja2x5KHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CisgICAgfQogICAgICAgICAKICAgICBKU1ZhbHVlIGdldERpcmVjdEluZGV4KEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpCiAgICAgewpAQCAtNjEyLDYgKzYzOCw3
IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoSlNH
bG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUp
IGNvbnN0OworICAgIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCBw
cm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzUHJvcGVydHlHZW5lcmljKEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZSkg
Y29uc3Q7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eUdlbmVyaWMoSlNHbG9iYWxPYmplY3QqLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlKSBjb25z
dDsKICAgICBib29sIGhhc093blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
LCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKQEAgLTYyMCw2ICs2NDcsOSBAQCBwdWJsaWM6CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBK
U0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90Jik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUluZGV4KEpTQ2Vs
bCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAgICBib29sIGRl
bGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAgICBib29sIGRl
bGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QgcHJvcGVydHlOYW1lKTsKKyAg
ICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgcHJvcGVydHlO
YW1lKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1
ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSk7CiAgICAgSlNWYWx1ZSBvcmRpbmFyeVRvUHJpbWl0aXZlKEpTR2xvYmFsT2JqZWN0KiwgUHJl
ZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjYwOTE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0OSw2ICsxNDksMTMgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQ
cm9wZXJ0eQogICAgIH0KIH0KIAorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9w
ZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgaWYgKExJS0VMWShwcm9wZXJ0eU5hbWUg
PD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkKKyAgICAgICAgcmV0dXJu
IGdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9w
ZXJ0eU5hbWUpLCBzbG90KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVj
dCwgSWRlbnRpZmllcjo6ZnJvbShnbG9iYWxPYmplY3QtPnZtKCksIHByb3BlcnR5TmFtZSksIHNs
b3QpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4UHJvcGVy
dHlTbG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBUaGlzIG1ldGhvZCBvbmx5IHN1
cHBvcnRzIG5vbi1pbmRleCBQcm9wZXJ0eU5hbWVzLgpAQCAtNTM1LDQgKzU0MiwzMCBAQCBpbmxp
bmUgQ2FsbERhdGEgZ2V0Q29uc3RydWN0RGF0YShWTSYgdm0sCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgRGVsZXRl
UHJvcGVydHlTbG90IHNsb3Q7CisgICAgcmV0dXJuIHRoaXMtPm1ldGhvZFRhYmxlKGdsb2JhbE9i
amVjdC0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lLCBzbG90KTsKK30KKworaW5saW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQzMl90IHByb3BlcnR5TmFtZSkKK3sKKyAg
ICByZXR1cm4gdGhpcy0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVsZXRlUHJv
cGVydHlCeUluZGV4KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKK30KKworaW5s
aW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAoTElLRUxZKHByb3BlcnR5
TmFtZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKQorICAgICAgICBy
ZXR1cm4gZGVsZXRlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
cHJvcGVydHlOYW1lKSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNf
Y2FzdDxkb3VibGU+KHByb3BlcnR5TmFtZSkpID09IHByb3BlcnR5TmFtZSk7CisgICAgcmV0dXJu
IGRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShnbG9iYWxPYmpl
Y3QtPnZtKCksIHN0YXRpY19jYXN0PGRvdWJsZT4ocHJvcGVydHlOYW1lKSkpOworfQorCitpbmxp
bmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVp
bnQ2NF90IHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFt
ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKQorICAgICAgICByZXR1
cm4gZ2V0KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHByb3BlcnR5TmFtZSkp
OworICAgIHJldHVybiBnZXQoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKGdsb2JhbE9i
amVjdC0+dm0oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihwcm9wZXJ0eU5hbWUpKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNyArMTMwLDcg
QEAgcHVibGljOgogICAgIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1ZUZ1bmMpKEpT
R2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwog
CiAgICAgSlNWYWx1ZSBnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkgY29u
c3Q7Ci0gICAgSlNWYWx1ZSBnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSkgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCosIHVp
bnQ2NF90IHByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgSlNWYWx1ZSBnZXRQdXJlUmVzdWx0KCkg
Y29uc3Q7CiAKICAgICBib29sIGlzQ2FjaGVhYmxlKCkgY29uc3QgeyByZXR1cm4gaXNVbnNldCgp
IHx8IG1fY2FjaGVhYmlsaXR5ID09IENhY2hpbmdBbGxvd2VkOyB9CkBAIC00MjIsNyArNDIyLDcg
QEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Z2V0VgogICAgIHJldHVybiBj
dXN0b21HZXR0ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi1BTFdBWVNfSU5M
SU5FIEpTVmFsdWUgUHJvcGVydHlTbG90OjpnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CitBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgUHJvcGVydHlTbG90OjpnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1
aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgVk0mIHZtID0gZ2V0Vk0oZ2xvYmFs
T2JqZWN0KTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVHlwZVZhbHVlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjYwOTE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTY3LDcgKzI5NjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jCiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKICAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gYXJyYXktPmdldChnbG9iYWxPYmplY3QsIGkp
LnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBsYW5ndWFnZXMuYXBwZW5kKGxhbmd1
YWdlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398027</attachid>
            <date>2020-04-29 20:05:08 -0700</date>
            <delta_ts>2020-04-30 16:38:22 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>33987</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDcgKzgyOCw3IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDAp
IHsKLSAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgaW5kZXgs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKKyAgICAgICAgb2JqZWN0LT5w
dXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4
KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIApAQCAtODQ0LDcgKzg0NCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbEJleW8KICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAg
ICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgaW5kZXgsIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJ
bmRleElubGluZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCkBAIC04NjIsNyArODYyLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dERvdWJsZUJ5VgogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5j
b2RlQXNEb3VibGUsIHZhbHVlKTsKICAgICAKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAg
ICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBpbmRleCwganNWYWx1ZSwg
dHJ1ZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIGpzVmFsdWUsIHRydWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIApAQCAtODgwLDcgKzg4MCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXREb3VibGVCeVYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsK
LSAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgaW5kZXgsIGpz
VmFsdWUsIGZhbHNlKTsKKyAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4KSwganNWYWx1ZSwgZmFsc2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtODk4LDcgKzg5OCw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1Zh
bHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAKICAgICBpZiAoaW5kZXggPj0g
MCkgewotICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgs
IGpzVmFsdWUsIDAsIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cpOworICAgICAgICBvYmplY3Qt
PnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4
KSwganNWYWx1ZSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTkxNSw3ICs5MTUsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0RG91YmxlQnlWCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpF
bmNvZGVBc0RvdWJsZSwgdmFsdWUpOwogCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAg
b2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCBqc1ZhbHVlKTsKKyAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVp
bnQzMl90PihpbmRleCksIGpzVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0x
MDAzLDcgKzEwMDMsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJl
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4
KGdsb2JhbE9iamVjdCwgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCAwLCBQ
dXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRl
eChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKICAgICBpZiAoaW5kZXggPj0g
MCkgewotICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJl
Y3RJbmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZv
aWQgQXJyYXlQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiAKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0UHJvcGVydHkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgaW5kZXgp
CitzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QsIHVpbnQ2NF90IGluZGV4KQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CkBAIC0xNzksMTIgKzE3OSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIHB1dExlbmd0aChKU0dsCiAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKIH0KIAotc3RhdGljIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXRMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0m
IHZtLCBKU09iamVjdCogb2JqLCB1bnNpZ25lZCB2YWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgc2V0TGVuZ3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNP
YmplY3QqIG9iaiwgdWludDY0X3QgdmFsdWUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHJvd0V4Y2VwdGlv
biA9IHRydWU7CiAgICAgaWYgKGlzSlNBcnJheShvYmopKSB7Ci0gICAgICAgIGpzQ2FzdDxKU0Fy
cmF5Kj4ob2JqKS0+c2V0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdmFsdWUsIHRocm93RXhjZXB0aW9u
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSA9
PSB2YWx1ZSk7CisgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+c2V0TGVuZ3RoKGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSwgdGhyb3dFeGNlcHRpb24pOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0KICAgICBz
Y29wZS5yZWxlYXNlKCk7CkBAIC0yOTEsNyArMjkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheVByb3RvRgogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1
ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSkpKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdW5kZWZp
bmVkVmFsdWUgPSAwKQorc3RhdGljIGlubGluZSB1aW50NjRfdCBhcmd1bWVudENsYW1wZWRJbmRl
eEZyb21TdGFydE9yRW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFs
dWUsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgdW5kZWZpbmVkVmFsdWUgPSAwKQogewogICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gdW5kZWZpbmVkVmFsdWU7
CkBAIC0yOTksOSArMzAwLDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBhcmd1bWVudENsYW1w
ZWRJbgogICAgIGRvdWJsZSBpbmRleERvdWJsZSA9IHZhbHVlLnRvSW50ZWdlcihnbG9iYWxPYmpl
Y3QpOwogICAgIGlmIChpbmRleERvdWJsZSA8IDApIHsKICAgICAgICAgaW5kZXhEb3VibGUgKz0g
bGVuZ3RoOwotICAgICAgICByZXR1cm4gaW5kZXhEb3VibGUgPCAwID8gMCA6IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbmRleERvdWJsZSk7CisgICAgICAgIHJldHVybiBpbmRleERvdWJsZSA8IDAg
PyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4RG91YmxlKTsKICAgICB9Ci0gICAgcmV0
dXJuIGluZGV4RG91YmxlID4gbGVuZ3RoID8gbGVuZ3RoIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGluZGV4RG91YmxlKTsKKyAgICByZXR1cm4gaW5kZXhEb3VibGUgPiBsZW5ndGggPyBsZW5ndGgg
OiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXhEb3VibGUpOwogfQogCiAvLyBUaGUgc2hpZnQv
dW5zaGlmdCBmdW5jdGlvbiBpbXBsZW1lbnQgdGhlIHNoaWZ0L3Vuc2hpZnQgYmVoYXZpb3VyIHJl
cXVpcmVkCkBAIC0zMjAsMzMgKzMyMSwzNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGFyZ3Vt
ZW50Q2xhbXBlZEluCiAvLyBtdXN0IGJlIGludHJvZHVjaW5nIG5ldyB2YWx1ZXMuCiAKIHRlbXBs
YXRlPEpTQXJyYXk6OlNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgotdm9pZCBzaGlmdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQg
aGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNp
Z25lZCBsZW5ndGgpCit2b2lkIHNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiB0aGlzT2JqLCB1aW50NjRfdCBoZWFkZXIsIHVpbnQ2NF90IGN1cnJlbnRDb3VudCwg
dWludDY0X3QgcmVzdWx0Q291bnQsIHVpbnQ2NF90IGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudENvdW50ID4gcmVzdWx0Q291bnQpOwot
ICAgIHVuc2lnbmVkIGNvdW50ID0gY3VycmVudENvdW50IC0gcmVzdWx0Q291bnQ7CisgICAgdWlu
dDY0X3QgY291bnQgPSBjdXJyZW50Q291bnQgLSByZXN1bHRDb3VudDsKIAogICAgIFJFTEVBU0Vf
QVNTRVJUKGhlYWRlciA8PSBsZW5ndGgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJlbnRDb3Vu
dCA8PSAobGVuZ3RoIC0gaGVhZGVyKSk7CiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7
CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAgICAgaWYg
KGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnNoaWZ0Q291bnQ8c2hpZnRDb3Vu
dE1vZGU+KGdsb2JhbE9iamVjdCwgaGVhZGVyLCBjb3VudCkpCisgICAgICAgIHVpbnQzMl90IGhl
YWRlcjMyID0gaGVhZGVyOworICAgICAgICBSRUxFQVNFX0FTU0VSVChoZWFkZXIzMiA9PSBoZWFk
ZXIpOworICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0aCAmJiBhcnJheS0+c2hp
ZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZ2xvYmFsT2JqZWN0LCBoZWFkZXIzMiwgY291bnQpKQog
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBoZWFkZXIgPSBoZWFkZXIzMjsKICAgICB9CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGsgPSBoZWFkZXI7IGsgPCBsZW5ndGggLSBjdXJyZW50Q291bnQ7
ICsraykgewotICAgICAgICB1bnNpZ25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudDsKLSAgICAg
ICAgdW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQ7CisgICAgZm9yICh1aW50NjRfdCBrID0g
aGVhZGVyOyBrIDwgbGVuZ3RoIC0gY3VycmVudENvdW50OyArK2spIHsKKyAgICAgICAgdWludDY0
X3QgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CisgICAgICAgIHVpbnQ2NF90IHRvID0gayArIHJl
c3VsdENvdW50OwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqLCBmcm9tKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICB0aGlzT2JqLT5wdXRC
eUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgdG8sIHZhbHVlLCB0cnVlKTsKICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIHRvKTsKKyAgICAgICAgICAg
IGJvb2wgc3VjY2VzcyA9IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgdG8p
OwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAg
ICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBAIC0zNTQs
OCArMzU4LDggQEAgdm9pZCBzaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgayA9IGxlbmd0
aDsgayA+IGxlbmd0aCAtIGNvdW50OyAtLWspIHsKLSAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhp
c09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZ2xv
YmFsT2JqZWN0LCBrIC0gMSk7CisgICAgZm9yICh1aW50NjRfdCBrID0gbGVuZ3RoOyBrID4gbGVu
Z3RoIC0gY291bnQ7IC0taykgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5kZWxl
dGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGsgLSAxKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFibGVUb0RlbGV0ZVByb3Bl
cnR5RXJyb3IpOwpAQCAtMzY1LDE5ICszNjksMTkgQEAgdm9pZCBzaGlmdChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LAogfQogCiB0ZW1wbGF0ZTxKU0FycmF5OjpTaGlmdENvdW50TW9kZSBz
aGlmdENvdW50TW9kZT4KLXZvaWQgdW5zaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50Q291
bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIHVuc2hpZnQo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHRoaXNPYmosIHVpbnQ2NF90
IGhlYWRlciwgdWludDY0X3QgY3VycmVudENvdW50LCB1aW50NjRfdCByZXN1bHRDb3VudCwgdWlu
dDY0X3QgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHRDb3VudCA+IGN1cnJlbnRDb3VudCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSByZXN1
bHRDb3VudCAtIGN1cnJlbnRDb3VudDsKKyAgICB1aW50NjRfdCBjb3VudCA9IHJlc3VsdENvdW50
IC0gY3VycmVudENvdW50OwogCiAgICAgUkVMRUFTRV9BU1NFUlQoaGVhZGVyIDw9IGxlbmd0aCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudENvdW50IDw9IChsZW5ndGggLSBoZWFkZXIpKTsK
IAogICAgIC8vIEd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cuCi0gICAgaWYgKGNvdW50ID4gVUlOVF9N
QVggLSBsZW5ndGgpIHsKKyAgICBpZiAoY291bnQgKyBsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCkpIHsKICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzkyLDE2ICsz
OTYsMTYgQEAgdm9pZCB1bnNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50
OyBrID4gaGVhZGVyOyAtLWspIHsKLSAgICAgICAgdW5zaWduZWQgZnJvbSA9IGsgKyBjdXJyZW50
Q291bnQgLSAxOwotICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7Cisg
ICAgZm9yICh1aW50NjRfdCBrID0gbGVuZ3RoIC0gY3VycmVudENvdW50OyBrID4gaGVhZGVyOyAt
LWspIHsKKyAgICAgICAgdWludDY0X3QgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQgLSAxOworICAg
ICAgICB1aW50NjRfdCB0byA9IGsgKyByZXN1bHRDb3VudCAtIDE7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBnZXRQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHRoaXNPYmosIGZyb20pOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBpZiAodmFsdWUp
IHsKICAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCB0
bywgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRo
aXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGds
b2JhbE9iamVjdCwgdG8pOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+ZGVs
ZXRlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB0byk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNz
KSkgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUs
IFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBAIC02ODUsOCArNjg5LDEyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKIAogICAgIEpTT2JqZWN0KiB0aGlz
T2JqZWN0ID0gdGhpc1ZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKKyAgICB1aW50NjRfdCBsZW5n
dGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2Jq
ZWN0KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CisgICAgaWYgKGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkg
eworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgIH0KIAogICAgIFN0cmluZ1JlY3Vy
c2lvbkNoZWNrZXIgY2hlY2tlcihnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwogICAgIEVYQ0VQ
VElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IGNoZWNrZXIuZWFybHlSZXR1cm5WYWx1
ZSgpKTsKQEAgLTg2Niw3ICs4NzQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0
aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1cm4gZW5j
b2RlZEpTVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmpl
Y3QsIHRoaXNPYmopOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopKTsKICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmIChsZW5ndGggPT0gMCkgewpA
QCAtODc1LDE3ICs4ODMsMjMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IH0KIAotICAgIEpTVmFsdWUgcmVzdWx0ID0gdGhpc09iai0+Z2V0KGdsb2JhbE9iamVjdCwgbGVu
Z3RoIC0gMSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7Ci0gICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQ
cm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZ2xvYmFsT2JqZWN0LCBsZW5ndGggLSAxKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBpZiAoVU5M
SUtFTFkoIXN1Y2Nlc3MpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7Ci0gICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOwotICAgIH0KLSAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgcHV0TGVuZ3Ro
KGdsb2JhbE9iamVjdCwgdm0sIHRoaXNPYmosIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgYXV0byBwZXJmb3JtUG9wID0gWyZd
IChhdXRvIGluZGV4LCBKU1ZhbHVlIGluZGV4VmFsdWUpIHsKKyAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSB0aGlzT2JqLT5nZXQoZ2xvYmFsT2JqZWN0LCBpbmRleCk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgICAgICBib29sIHN1Y2Nl
c3MgPSB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4KTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAg
IGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CisgICAgICAg
ICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICBzY29wZS5y
ZWxlYXNlKCk7CisgICAgICAgIHB1dExlbmd0aChnbG9iYWxPYmplY3QsIHZtLCB0aGlzT2JqLCBp
bmRleFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
IH07CisKKyAgICBpZiAoTElLRUxZKGxlbmd0aCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpKQorICAgICAgICByZXR1cm4gcGVyZm9ybVBvcChzdGF0aWNfY2FzdDx1aW50
MzJfdD4obGVuZ3RoIC0gMSksIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQzMl90PihsZW5ndGgg
LSAxKSkpOworICAgIHJldHVybiBwZXJmb3JtUG9wKElkZW50aWZpZXI6OmZyb20odm0sIHN0YXRp
Y19jYXN0PGRvdWJsZT4obGVuZ3RoIC0gMSkpLCBqc051bWJlcihsZW5ndGggLSAxKSk7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTA1LDE4ICs5
MTksMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEVY
Q0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAgaWYg
KFVOTElLRUxZKCF0aGlzT2JqKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsKKyAg
ICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odG9MZW5ndGgoZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCk7IG4rKykgewogICAgICAgICAvLyBDaGVjayBmb3IgaW50ZWdlciBvdmVy
Zmxvdzsgd2hlcmUgc2FmZSB3ZSBjYW4gZG8gYSBmYXN0IHB1dCBieSBpbmRleC4KLSAgICAgICAg
aWYgKGxlbmd0aCArIG4gPj0gbGVuZ3RoKQotICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFi
bGUodm0pLT5wdXRCeUluZGV4KHRoaXNPYmosIGdsb2JhbE9iamVjdCwgbGVuZ3RoICsgbiwgY2Fs
bEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChuKSwgdHJ1ZSk7CisgICAgICAgIGlmIChsZW5ndGgg
KyBuIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICAgICAgICAg
IHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihsZW5ndGggKyBuKSwgY2FsbEZyYW1lLT51bmNoZWNr
ZWRBcmd1bWVudChuKSwgdHJ1ZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3QodGhpc09iaik7Ci0gICAgICAgICAgICBhdXRvIHN0cmluZyA9IEpTVmFs
dWUoc3RhdGljX2Nhc3Q8aW50NjRfdD4obGVuZ3RoKSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG4p
KS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyIHBy
b3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHN0cmluZyk7CisgICAgICAg
ICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZpZXI6OmZyb20odm0sIHN0YXRp
Y19jYXN0PGRvdWJsZT4obGVuZ3RoICsgbikpOwogICAgICAgICAgICAgdGhpc09iai0+bWV0aG9k
VGFibGUodm0pLT5wdXQodGhpc09iaiwgZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIGNhbGxG
cmFtZS0+dW5jaGVja2VkQXJndW1lbnQobiksIHNsb3QpOwogICAgICAgICB9CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpAQCAtOTM4LDcgKzk1
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAo
VU5MSUtFTFkoIXRoaXNPYmplY3QpKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsK
IAotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iamVj
dCk7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRvTGVuZ3Ro
KGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgdGhpc09iamVjdC0+ZW5zdXJlV3JpdGFibGUo
dm0pOwpAQCAtOTgwLDkgKzk5Miw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICB9CiAgICAgfQogCi0gICAgdW5zaWduZWQgbWlkZGxlID0gbGVuZ3RoIC8g
MjsKLSAgICBmb3IgKHVuc2lnbmVkIGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKysp
IHsKLSAgICAgICAgdW5zaWduZWQgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CisgICAgdWlu
dDY0X3QgbWlkZGxlID0gbGVuZ3RoIC8gMjsKKyAgICBmb3IgKHVpbnQ2NF90IGxvd2VyID0gMDsg
bG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKKyAgICAgICAgdWludDY0X3QgdXBwZXIgPSBsZW5n
dGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wgbG93ZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5o
YXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGxvd2VyKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIEpTVmFsdWUgbG93ZXJWYWx1
ZTsKQEAgLTEwMDMsNyArMTAxNSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFs
T2JqZWN0LCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgbG93ZXIpOworICAg
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iamVjdC0+ZGVsZXRlUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBsb3dlcik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsK
ICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFi
bGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpOwpAQCAtMTAxNSw3ICsxMDI3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdGhpc09iamVjdC0+
cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHVwcGVyLCBsb3dlclZhbHVlLCB0cnVlKTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZ2xv
YmFsT2JqZWN0LCB1cHBlcik7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqZWN0
LT5kZWxldGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHVwcGVyKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFzdWNjZXNzKSkgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBAIC0xMDM0
LDcgKzEwNDYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUo
KTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmop
OworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChn
bG9iYWxPYmplY3QsIHRoaXNPYmopKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmIChsZW5ndGggPT0gMCkgewpAQCAtMTA2MSwxMiAr
MTA3MywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
RVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7CisgICAgdWludDY0X3Qg
bGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgdW5zaWduZWQgYmVnaW4gPSBhcmd1bWVudENs
YW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSwgbGVuZ3RoKTsKKyAgICB1aW50NjRfdCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4
RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBsZW5n
dGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgdW5zaWduZWQg
ZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMSksIGxlbmd0aCwgbGVuZ3RoKTsKKyAgICB1aW50NjRfdCBlbmQg
PSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT5hcmd1bWVudCgxKSwgbGVuZ3RoLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKGVuZCA8IGJlZ2luKQogICAgICAgICBlbmQgPSBiZWdp
bjsKQEAgLTEwOTYsOCArMTEwOCw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICAvLyB0aGF0IGNhbiBHQyAoZS5nLiBhbGxvY2F0aW5nIHRoZSByZXN1bHQg
YXJyYXkpLgogICAgIHRoaXNPYmotPnVzZSgpOwogCi0gICAgdW5zaWduZWQgbiA9IDA7Ci0gICAg
Zm9yICh1bnNpZ25lZCBrID0gYmVnaW47IGsgPCBlbmQ7IGsrKywgbisrKSB7CisgICAgdWludDY0
X3QgbiA9IDA7CisgICAgZm9yICh1aW50NjRfdCBrID0gYmVnaW47IGsgPCBlbmQ7IGsrKywgbisr
KSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdGhpc09i
aiwgayk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAg
IGlmICh2KSB7CkBAIC0xMTIxLDcgKzExMzMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFycmF5UHJvdG9GCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigp
ID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1
cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChnbG9i
YWxPYmplY3QsIHRoaXNPYmopOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2Jh
bE9iamVjdCwgdGhpc09iaik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKSB7CkBA
IC0xMTQ1LDEwICsxMTU3LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAot
ICAgIHVuc2lnbmVkIGFjdHVhbFN0YXJ0ID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRP
ckVuZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGxlbmd0aCk7CisgICAg
dWludDY0X3QgYWN0dWFsU3RhcnQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5k
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgbGVuZ3RoKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAotICAgIHVuc2lnbmVk
IGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuZ3RoIC0gYWN0dWFsU3RhcnQ7CisgICAgdWludDY0X3Qg
YWN0dWFsRGVsZXRlQ291bnQgPSBsZW5ndGggLSBhY3R1YWxTdGFydDsKICAgICBpZiAoY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAgICAgIGRvdWJsZSBkZWxldGVDb3VudCA9
IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnRlZ2VyKGdsb2JhbE9iamVjdCk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpA
QCAtMTE1Nyw4ICsxMTY5LDExIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgZWxzZSBpZiAoZGVsZXRlQ291bnQgPiBsZW5ndGggLSBhY3R1YWxTdGFy
dCkKICAgICAgICAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuZ3RoIC0gYWN0dWFsU3RhcnQ7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGRlbGV0ZUNvdW50KTsKKyAgICAgICAgICAgIGFjdHVhbERlbGV0ZUNvdW50
ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRlbGV0ZUNvdW50KTsKICAgICB9CisgICAgdW5zaWdu
ZWQgaXRlbUNvdW50ID0gc3RkOjptYXg8aW50PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSAt
IDIsIDApOworICAgIGlmIChVTkxJS0VMWShsZW5ndGggLSBhY3R1YWxEZWxldGVDb3VudCArIGl0
ZW1Db3VudCA+IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtYXhTYWZlSW50ZWdlcigpKSkpCisgICAg
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJTcGxpY2Ug
Y2Fubm90IHByb2R1Y2UgYW4gYXJyYXkgb2YgbGVuZ3RoIGxhcmdlciB0aGFuICgyICoqIDUzKSAt
IDEiX3MpOwogCiAgICAgc3RkOjpwYWlyPFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQsIEpTT2JqZWN0
Kj4gc3BlY2llc1Jlc3VsdCA9IHNwZWNpZXNDb25zdHJ1Y3RBcnJheShnbG9iYWxPYmplY3QsIHRo
aXNPYmosIGFjdHVhbERlbGV0ZUNvdW50KTsKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUu
ZXhjZXB0aW9uKCkgPT0gKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVjdFJl
c3VsdDo6RXhjZXB0aW9uKSk7CkBAIC0xMTc1LDEzICsxMTkwLDE3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmly
c3QgPT0gU3BlY2llc0NvbnN0cnVjdFJlc3VsdDo6Q3JlYXRlZE9iamVjdCkKICAgICAgICAgICAg
IHJlc3VsdCA9IHNwZWNpZXNSZXN1bHQuc2Vjb25kOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IEpTQXJyYXk6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0
cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoVW5kZWNpZGVk
KSwgYWN0dWFsRGVsZXRlQ291bnQpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGFjdHVhbERl
bGV0ZUNvdW50ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkgeworICAg
ICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJlc3VsdCA9IEpTQXJyYXk6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRo
VW5kZWNpZGVkKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGFjdHVhbERlbGV0ZUNvdW50KSk7CiAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXJlc3VsdCkpIHsKICAgICAgICAgICAgICAgICB0aHJv
d091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGFjdHVhbERlbGV0ZUNvdW50OyArK2spIHsKKyAg
ICAgICAgZm9yICh1aW50NjRfdCBrID0gMDsgayA8IGFjdHVhbERlbGV0ZUNvdW50OyArK2spIHsK
ICAgICAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdGhpc09i
aiwgayArIGFjdHVhbFN0YXJ0KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCF2KSkKQEAg
LTExOTEsNyArMTIxMCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90
b0YKICAgICAgICAgfQogICAgIH0KIAotICAgIHVuc2lnbmVkIGl0ZW1Db3VudCA9IHN0ZDo6bWF4
PGludD4oY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgLSAyLCAwKTsKICAgICBpZiAoaXRlbUNv
dW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHsKICAgICAgICAgc2hpZnQ8SlNBcnJheTo6U2hpZnRD
b3VudEZvclNwbGljZT4oZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBhY3R1YWxTdGFydCwgYWN0dWFs
RGVsZXRlQ291bnQsIGl0ZW1Db3VudCwgbGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkBAIC0xMjE5LDEzICsxMjM3LDEyIEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBFWENFUFRJT05fQVNT
RVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSgh
dGhpc09iaikpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwotICAgIGRvdWJsZSBk
b3VibGVMZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopOwotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGRvdWJsZUxlbmd0aDsKKyAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4odG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB1bnNpZ25l
ZCBuckFyZ3MgPSBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsKICAgICBpZiAobnJBcmdzKSB7
Ci0gICAgICAgIGlmIChVTkxJS0VMWShkb3VibGVMZW5ndGggKyBzdGF0aWNfY2FzdDxkb3VibGU+
KG5yQXJncykgPiBtYXhTYWZlSW50ZWdlcigpKSkKKyAgICAgICAgaWYgKFVOTElLRUxZKGxlbmd0
aCArIG5yQXJncyA+IHN0YXRpY19jYXN0PHVpbnQ2NF90PihtYXhTYWZlSW50ZWdlcigpKSkpCiAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAi
Q2Fubm90IHNoaWZ0IHRvIG9mZnNldCBncmVhdGVyIHRoYW4gKDIgKiogNTMpIC0gMSJfcyk7CiAg
ICAgICAgIHVuc2hpZnQ8SlNBcnJheTo6U2hpZnRDb3VudEZvclNoaWZ0PihnbG9iYWxPYmplY3Qs
IHRoaXNPYmosIDAsIDAsIG5yQXJncywgbGVuZ3RoKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JZGVudGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSWRlbnRpZmllci5oCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2
ICsxMzEsMTMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlm
aWVyIGZyb20oVk0mLCB1bnNpZ25lZCB5KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
SWRlbnRpZmllciBmcm9tKFZNJiwgaW50IHkpOwogICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb20o
Vk0mLCBkb3VibGUgeSk7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYgdm0sIHVpbnQ2
NF90IHkpCisgICAgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHkpID09IHkp
CisgICAgICAgICAgICByZXR1cm4gZnJvbSh2bSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHkpKTsK
KyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+
KHkpKSA9PSB5KTsKKyAgICAgICAgcmV0dXJuIGZyb20odm0sIHN0YXRpY19jYXN0PGRvdWJsZT4o
eSkpOworICAgIH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcu
aXNOdWxsKCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5p
c0VtcHR5KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuY3BwCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDExICszODcsMTEgQEAg
VmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChKUwogICAgIEpTVmFsdWUgbGVu
Z3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxT
dHJpbmc+KCkpOwogCi0gICAgZG91YmxlIGxlbmd0aCA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3Ro
KGdsb2JhbE9iamVjdCk7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGdsb2JhbE9iamVjdCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxTdHJpbmc+KCkpOwogCiAgICAgSGFzaFNldDxTdHJp
bmc+IHNlZW5TZXQ7Ci0gICAgZm9yIChkb3VibGUgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgewor
ICAgIGZvciAodWludDY0X3QgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgewogICAgICAgICBib29s
IGtQcmVzZW50ID0gbG9jYWxlc09iamVjdC0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBrKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlz
aW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk1OCw2ICsxOTU4LDEzIEBAIGJvb2wgSlNPYmplY3Q6Omhh
c1Byb3BlcnR5KEpTR2xvYmFsT2JqZWMKICAgICByZXR1cm4gaGFzUHJvcGVydHlHZW5lcmljKGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlw
ZTo6SGFzUHJvcGVydHkpOwogfQogCitib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7Cisg
ICAgaWYgKExJS0VMWShwcm9wZXJ0eU5hbWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKSkKKyAgICAgICAgcmV0dXJuIGhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KHByb3BlcnR5TmFtZSkpOworICAgIHJldHVybiBoYXNQcm9wZXJ0
eShnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20oZ2xvYmFsT2JqZWN0LT52bSgpLCBzdGF0
aWNfY2FzdDxkb3VibGU+KHByb3BlcnR5TmFtZSkpKTsKK30KKwogYm9vbCBKU09iamVjdDo6aGFz
UHJvcGVydHlHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlIGludGVybmFs
TWV0aG9kVHlwZSkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBpbnRlcm5h
bE1ldGhvZFR5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTAgKzE1OSwxMiBAQCBwdWJsaWM6CiAK
ICAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAg
ICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNv
bnN0OworICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgcHJvcGVydHlO
YW1lKSBjb25zdDsKIAogICAgIHRlbXBsYXRlPGJvb2wgY2hlY2tOdWxsU3RydWN0dXJlID0gZmFs
c2U+CiAgICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5U2xvdCYpOwogICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICBib29sIGdl
dFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCosIHVpbnQ2NF90IHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRp
b24+IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2ws
IFByb3BlcnR5U2xvdCYpPjo6dHlwZSBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKSBjb25zdDsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4gdHlwZW5hbWUgc3RkOjpyZXN1bHRf
b2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIGdl
dFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
JiwgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24pIGNvbnN0OwogCkBAIC0yMDYsNiArMjA4LDE1IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbWV0aG9kVGFibGUodm0pLT5wdXRC
eUluZGV4KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2hvdWxkVGhy
b3cpOwogICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwdXRCeUluZGV4SW5saW5lKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkocHJv
cGVydHlOYW1lIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpCisgICAg
ICAgICAgICByZXR1cm4gcHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PHVpbnQzMl90Pihwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2hvdWxkVGhyb3cpOworCisgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXMsIHNob3VsZFRocm93KTsKKyAgICAgICAgcmV0dXJu
IHB1dElubGluZUZvckpTT2JqZWN0KHRoaXMsIGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bShnZXRWTShnbG9iYWxPYmplY3QpLCBwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwgc2xvdCk7CisgICAg
fQogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHB1dERpcmVjdCogbWV0
aG9kczoKICAgICAvLyAgLSB0aGUgcHJvdG90eXBlIGNoYWluIGlzIG5vdCBjb25zdWx0ZWQKQEAg
LTI0Niw2ICsyNTcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBQdXREaXJlY3RJbmRleExpa2VQ
dXREaXJlY3QpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBwdXREaXJlY3RJbmRl
eChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSBtb2Rl
KQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShwcm9wZXJ0eU5hbWUgPD0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkKKyAgICAgICAgICAgIHJldHVybiBwdXREaXJlY3RJ
bmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9wZXJ0eU5hbWUpLCB2
YWx1ZSwgYXR0cmlidXRlcywgbW9kZSk7CisgICAgICAgIHJldHVybiBwdXREaXJlY3QoZ2V0Vk0o
Z2xvYmFsT2JqZWN0KSwgSWRlbnRpZmllcjo6ZnJvbShnZXRWTShnbG9iYWxPYmplY3QpLCBwcm9w
ZXJ0eU5hbWUpLCB2YWx1ZSwgYXR0cmlidXRlcyk7CisgICAgfQorCiAgICAgLy8gQSBnZW5lcmFs
bHkgbm9uLXRocm93aW5nIHZlcnNpb24gb2YgcHV0RGlyZWN0IGFuZCBwdXREaXJlY3RJbmRleC4K
ICAgICAvLyBIb3dldmVyLCBpdCdzIG9ubHkgZ3VhcmFudGVlZCB0byBub3QgdGhyb3cgYmFzZWQg
b24gd2hhdCB0aGUgcmVjZWl2ZXIgaXMuCiAgICAgLy8gRm9yIGV4YW1wbGUsIGlmIHRoZSByZWNl
aXZlciBpcyBhIFByb3h5T2JqZWN0LCB0aGlzIGlzIG5vdCBndWFyYW50ZWVkLCBzaW5jZQpAQCAt
MzQ4LDYgKzM2NiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICB9CisKKyAgICBKU1ZhbHVlIHRyeUdldEluZGV4UXVpY2tseSh1aW50NjRfdCBp
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0
aWNfY2FzdDxkb3VibGU+KGkpKSA9PSBpKTsKKyAgICAgICAgaWYgKExJS0VMWShpIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ5
R2V0SW5kZXhRdWlja2x5KHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CisgICAgfQogICAgICAgICAKICAgICBKU1ZhbHVlIGdldERpcmVjdEluZGV4
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpCiAgICAgewpAQCAtNjEy
LDYgKzYzOCw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJv
cGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWUpIGNvbnN0OworICAgIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCB1
aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzUHJvcGVydHlHZW5lcmlj
KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0
aG9kVHlwZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eUdlbmVyaWMoSlNHbG9iYWxPYmpl
Y3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlKSBjb25zdDsKICAgICBib29sIGhhc093blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKQEAgLTYyMCw2ICs2NDcsOSBAQCBwdWJs
aWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eShK
U0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlTbG90
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKKyAg
ICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsKKyAg
ICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QgcHJvcGVydHlO
YW1lKTsKKyAgICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3Qg
cHJvcGVydHlOYW1lKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1ZhbHVlIGRl
ZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSk7CiAgICAgSlNWYWx1ZSBvcmRpbmFyeVRvUHJpbWl0aXZlKEpTR2xvYmFsT2Jq
ZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjYwOTE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0OSw2ICsxNDksMTMgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eQogICAgIH0KIH0KIAorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0
OjpnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3Qg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgaWYgKExJS0VMWShwcm9w
ZXJ0eU5hbWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkKKyAgICAg
ICAgcmV0dXJuIGdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQz
Ml90Pihwcm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlTbG90KGds
b2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShnbG9iYWxPYmplY3QtPnZtKCksIHByb3BlcnR5
TmFtZSksIHNsb3QpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbklu
ZGV4UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBUaGlzIG1ldGhv
ZCBvbmx5IHN1cHBvcnRzIG5vbi1pbmRleCBQcm9wZXJ0eU5hbWVzLgpAQCAtNTM1LDQgKzU0Miwz
MCBAQCBpbmxpbmUgQ2FsbERhdGEgZ2V0Q29uc3RydWN0RGF0YShWTSYgdm0sCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgRGVsZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgcmV0dXJuIHRoaXMtPm1ldGhvZFRhYmxl
KGdsb2JhbE9iamVjdC0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworaW5saW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVBy
b3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQzMl90IHByb3BlcnR5TmFt
ZSkKK3sKKyAgICByZXR1cm4gdGhpcy0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+
ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsK
K30KKworaW5saW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAoTElLRUxZ
KHByb3BlcnR5TmFtZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKQor
ICAgICAgICByZXR1cm4gZGVsZXRlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4ocHJvcGVydHlOYW1lKSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzdGF0aWNfY2FzdDxkb3VibGU+KHByb3BlcnR5TmFtZSkpID09IHByb3BlcnR5TmFtZSk7Cisg
ICAgcmV0dXJuIGRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShn
bG9iYWxPYmplY3QtPnZtKCksIHN0YXRpY19jYXN0PGRvdWJsZT4ocHJvcGVydHlOYW1lKSkpOwor
fQorCitpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBpZiAoTElLRUxZKHBy
b3BlcnR5TmFtZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKQorICAg
ICAgICByZXR1cm4gZ2V0KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHByb3Bl
cnR5TmFtZSkpOworICAgIHJldHVybiBnZXQoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9t
KGdsb2JhbE9iamVjdC0+dm0oKSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihwcm9wZXJ0eU5hbWUpKSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAs
NyArMTMwLDcgQEAgcHVibGljOgogICAgIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpHZXRWYWx1
ZUZ1bmMpKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0
eU5hbWUpOwogCiAgICAgSlNWYWx1ZSBnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5
TmFtZSkgY29uc3Q7Ci0gICAgSlNWYWx1ZSBnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXRWYWx1ZShKU0dsb2JhbE9i
amVjdCosIHVpbnQ2NF90IHByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgSlNWYWx1ZSBnZXRQdXJl
UmVzdWx0KCkgY29uc3Q7CiAKICAgICBib29sIGlzQ2FjaGVhYmxlKCkgY29uc3QgeyByZXR1cm4g
aXNVbnNldCgpIHx8IG1fY2FjaGVhYmlsaXR5ID09IENhY2hpbmdBbGxvd2VkOyB9CkBAIC00MjIs
NyArNDIyLDcgQEAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Z2V0VgogICAg
IHJldHVybiBjdXN0b21HZXR0ZXIoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogfQogCi1B
TFdBWVNfSU5MSU5FIEpTVmFsdWUgUHJvcGVydHlTbG90OjpnZXRWYWx1ZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CitBTFdBWVNfSU5M
SU5FIEpTVmFsdWUgUHJvcGVydHlTbG90OjpnZXRWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgVk0mIHZtID0gZ2V0
Vk0oZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAobV9wcm9wZXJ0eVR5cGUgPT0gVHlwZVZhbHVlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNp
b24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTY3LDcgKzI5NjcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAKICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKICAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gYXJyYXktPmdldChnbG9iYWxP
YmplY3QsIGkpLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICBsYW5ndWFnZXMuYXBw
ZW5kKGxhbmd1YWdlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398122</attachid>
            <date>2020-04-30 16:38:22 -0700</date>
            <delta_ts>2020-04-30 23:30:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>70878</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjA5NzMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI0IEBACisyMDIwLTA0LTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIGNhbid0IGNhc3QgdG9MZW5ndGggcmVzdWx0IHRvIHVuc2lnbmVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTEyMDUK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYyNjI1NTYyPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2FycmF5LWxlbmd0aC1jYW50LWdl
dC1jYXN0ZWQtdG8tdW5zaWduZWQuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAg
ICAgKHRlc3RBcnJheVBvcCk6CisgICAgICAgICh0ZXN0QXJyYXlQdXNoKToKKyAgICAgICAgKHRl
c3RBcnJheVJldmVyc2UpOgorICAgICAgICAodGVzdEFycmF5U3BsaWNlKToKKyAgICAgICAgKHRl
c3RBcnJheVVuc2hpZnQpOgorICAgICAgICAodGVzdEFycmF5TGFzdEluZGV4T2YpOgorICAgICAg
ICAoc2hvdWxkVGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAodGVzdEpTT05TdHJpbmdpZnkuZ2V0
IGxldCk6CisgICAgICAgICh0ZXN0SlNPTlN0cmluZ2lmeSk6CisgICAgICAgICogdGVzdDI2Mi9l
eHBlY3RhdGlvbnMueWFtbDoKKwogMjAyMC0wNC0zMCAgQ2FpbyBMaW1hICA8dGljYWlvbGltYUBn
bWFpbC5jb20+CiAKICAgICAgICAgSW52ZXN0aWdhdGUgc3RyZXNzL3Y4LWJpdGludDMyLWluYy5q
cyBmYWlsdXJlIG9uIG1pcHMKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2FycmF5LWxlbmd0aC1jYW50
LWdldC1jYXN0ZWQtdG8tdW5zaWduZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
YXJyYXktbGVuZ3RoLWNhbnQtZ2V0LWNhc3RlZC10by11bnNpZ25lZC5qcwkobm9uZXhpc3RlbnQp
CisrKyBKU1Rlc3RzL3N0cmVzcy9hcnJheS1sZW5ndGgtY2FudC1nZXQtY2FzdGVkLXRvLXVuc2ln
bmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAyIEBACitmdW5jdGlvbiBhc3NlcnQo
YikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitjb25zdCBi
b3VuZGFyeSA9IDIqKjMyOyAvLyBVSU5UX01BWCArIDEKK2NvbnN0IG1heFNhZmVJbnRlZ2VyID0g
MioqNTMgLSAxOworZnVuY3Rpb24gdGVzdEFycmF5UG9wKCkgeworICAgIGxldCBvYmogPSB7Cisg
ICAgICAgIDA6IDQyLAorICAgICAgICBsZW5ndGg6IGJvdW5kYXJ5IAorICAgIH07CisgICAgQXJy
YXkucHJvdG90eXBlLnBvcC5jYWxsKG9iaik7CisgICAgYXNzZXJ0KG9ialswXSA9PT0gNDIpOwor
ICAgIGFzc2VydChvYmoubGVuZ3RoID09PSBib3VuZGFyeSAtIDEpOworfQordGVzdEFycmF5UG9w
KCk7CisKK2Z1bmN0aW9uIHRlc3RBcnJheVB1c2goKSB7CisgICAgbGV0IG9iaiA9IHsKKyAgICAg
ICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogYm91bmRhcnkKKyAgICB9OworICAgIEFycmF5LnBy
b3RvdHlwZS5wdXNoLmNhbGwob2JqLCAxMCk7CisgICAgYXNzZXJ0KG9ialswXSA9PT0gNDIpOwor
ICAgIGFzc2VydChvYmoubGVuZ3RoID09PSBib3VuZGFyeSArIDEpOworfQordGVzdEFycmF5UHVz
aCgpOworCisvLyBOT1RFOiB0aGlzIHRha2VzIHZlcnkgbG9uZyBzbyB3ZSBkb24ndCBydW4gaXQu
Li4KK2Z1bmN0aW9uIHRlc3RBcnJheVJldmVyc2UoKSB7CisgICAgbGV0IG9iaiA9IHsKKyAgICAg
ICAgMDogNDIsCisgICAgICAgIFtib3VuZGFyeSAtIDFdOiAwLAorICAgICAgICBsZW5ndGg6IGJv
dW5kYXJ5CisgICAgfTsKKyAgICBBcnJheS5wcm90b3R5cGUucmV2ZXJzZS5jYWxsKG9iaik7Cisg
ICAgYXNzZXJ0KG9ialswXSA9PT0gMCk7CisgICAgYXNzZXJ0KG9ialtib3VuZGFyeSAtIDFdID09
PSA0Mik7Cit9CisvL3Rlc3RBcnJheVJldmVyc2UoKTsKKworLy8gTk9URTogdGhpcyB0YWtlcyB2
ZXJ5IGxvbmcgc28gd2UgZG9uJ3QgcnVuIGl0Li4uCitmdW5jdGlvbiB0ZXN0QXJyYXlTaGlmdCgp
IHsKKyAgICBsZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBib3Vu
ZGFyeQorICAgIH07CisgICAgbGV0IGVsZW0gPSBBcnJheS5wcm90b3R5cGUuc2hpZnQuY2FsbChv
YmopOworICAgIGFzc2VydChlbGVtID09PSA0Mik7CisgICAgYXNzZXJ0KG9iai5sZW5ndGggPT09
IGJvdW5kYXJ5IC0gMSk7CisgICAgYXNzZXJ0KG9ialswXSA9PT0gdW5kZWZpbmVkKTsKK30KKy8v
dGVzdEFycmF5U2hpZnQoKTsKKworZnVuY3Rpb24gdGVzdEFycmF5U2xpY2UoKSB7CisgICAgbGV0
IG9iaiA9IHsKKyAgICAgICAgMDogNDIsCisgICAgICAgIDE6IDQzLAorICAgICAgICBsZW5ndGg6
IGJvdW5kYXJ5CisgICAgfTsKKyAgICBsZXQgYXJyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNh
bGwob2JqLCAwLCAyKTsKKyAgICBhc3NlcnQoYXJyWzBdID09PSA0Mik7CisgICAgYXNzZXJ0KGFy
clsxXSA9PT0gNDMpOworICAgIGFzc2VydChhcnIubGVuZ3RoID09PSAyKTsKK30KK3Rlc3RBcnJh
eVNsaWNlKCk7CisKK2Z1bmN0aW9uIHRlc3RBcnJheVNwbGljZSgpIHsKKyAgICBsZXQgb2JqID0g
eworICAgICAgICAwOiA0MiwKKyAgICAgICAgMTogNDMsCisgICAgICAgIGxlbmd0aDogYm91bmRh
cnkKKyAgICB9OworICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChvYmosIGJvdW5kYXJ5
LTEsIDAsIDEsIDIsIDMpOworICAgIGFzc2VydChvYmoubGVuZ3RoID09PSBib3VuZGFyeSArIDMp
OworICAgIGFzc2VydChvYmpbYm91bmRhcnktMV0gPT09IDEpOworICAgIGFzc2VydChvYmpbYm91
bmRhcnldID09PSAyKTsKKyAgICBhc3NlcnQob2JqW2JvdW5kYXJ5KzFdID09PSAzKTsKK30KK3Rl
c3RBcnJheVNwbGljZSgpOworCisvLyBOT1RFOiB0aGlzIHRha2VzIHZlcnkgbG9uZyBzbyB3ZSBk
b24ndCBydW4gaXQuLi4KK2Z1bmN0aW9uIHRlc3RBcnJheVVuc2hpZnQoKSB7CisgICAgbGV0IG9i
aiA9IHsKKyAgICAgICAgMTogNDIsCisgICAgICAgIGxlbmd0aDogYm91bmRhcnkKKyAgICB9Owor
ICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwob2JqLCA0Myk7CisgICAgYXNzZXJ0KG9i
alswXSA9PT0gNDMpOworICAgIGFzc2VydChvYmpbMl0gPT09IDQyKTsKKyAgICBhc3NlcnQob2Jq
Lmxlbmd0aCA9PT0gYm91bmRhcnkgKyAxKTsKK30KKy8vdGVzdEFycmF5VW5zaGlmdCgpOworCitm
dW5jdGlvbiB0ZXN0QXJyYXlJbmRleE9mKCkgeworICAgIGxldCBvYmogPSB7CisgICAgICAgIDMw
OiA0MiwKKyAgICAgICAgbGVuZ3RoOiBib3VuZGFyeQorICAgIH07CisgICAgbGV0IHIgPSBBcnJh
eS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKG9iaiwgNDIpOworICAgIGFzc2VydChyID09PSAzMCk7
Cit9Cit0ZXN0QXJyYXlJbmRleE9mKCk7CisKK2Z1bmN0aW9uIHRlc3RBcnJheUxhc3RJbmRleE9m
KCkgeworICAgIGxldCBvYmogPSB7CisgICAgICAgIFtib3VuZGFyeSAtIDMwXTogNDIsCisgICAg
ICAgIGxlbmd0aDogYm91bmRhcnkKKyAgICB9OworICAgIGxldCByID0gQXJyYXkucHJvdG90eXBl
Lmxhc3RJbmRleE9mLmNhbGwob2JqLCA0Mik7CisgICAgYXNzZXJ0KHIgPT09IGJvdW5kYXJ5IC0g
MzApOworfQordGVzdEFycmF5TGFzdEluZGV4T2YoKTsKKworZnVuY3Rpb24gc2hvdWxkVGhyb3dU
eXBlRXJyb3IoZikgeworICAgIGxldCBvayA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGYo
KTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgb2sgPSBlIGluc3RhbmNlb2YgVHlwZUVycm9y
ICYmIGUubWVzc2FnZS5pbmRleE9mKCJsYXJnZXIgdGhhbiAoMiAqKiA1MykgLSAxIikgPj0gMDsK
KyAgICB9CisgICAgYXNzZXJ0KG9rKTsKK30KKworc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rp
b24oKSB7CisgICAgbGV0IG9iaiA9IHsKKyAgICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDog
bWF4U2FmZUludGVnZXIKKyAgICB9OworICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwob2Jq
LCAxMCk7Cit9KTsKKworc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7CisgICAgbGV0
IG9iaiA9IHsKKyAgICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogbWF4U2FmZUludGVnZXIg
LSAxCisgICAgfTsKKyAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKG9iaiwgMTAsIDIwKTsK
K30pOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHsK
KyAgICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogbWF4U2FmZUludGVnZXIKKyAgICB9Owor
ICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmNhbGwob2JqLCAxMCk7Cit9KTsKK3Nob3VsZFRo
cm93VHlwZUVycm9yKGZ1bmN0aW9uKCkgeworICAgIGxldCBvYmogPSB7CisgICAgICAgIDA6IDQy
LAorICAgICAgICBsZW5ndGg6IG1heFNhZmVJbnRlZ2VyIC0gMQorICAgIH07CisgICAgQXJyYXku
cHJvdG90eXBlLnVuc2hpZnQuY2FsbChvYmosIDEwLCAyMCk7Cit9KTsKK3Nob3VsZFRocm93VHlw
ZUVycm9yKGZ1bmN0aW9uKCkgeworICAgIGxldCBvYmogPSB7CisgICAgICAgIDA6IDQyLAorICAg
ICAgICBsZW5ndGg6IG1heFNhZmVJbnRlZ2VyCisgICAgfTsKKyAgICBBcnJheS5wcm90b3R5cGUu
c3BsaWNlLmNhbGwob2JqLCBvYmoubGVuZ3RoIC0gMTAsIDAsIDEwKTsKK30pOworc2hvdWxkVGhy
b3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHsKKyAgICAgICAgMDogNDIs
CisgICAgICAgIGxlbmd0aDogbWF4U2FmZUludGVnZXIgLSAxCisgICAgfTsKKyAgICBBcnJheS5w
cm90b3R5cGUuc3BsaWNlLmNhbGwob2JqLCBvYmoubGVuZ3RoIC0gMTAsIDAsIDEwLCAyMCk7Cit9
KTsKK3Nob3VsZFRocm93VHlwZUVycm9yKGZ1bmN0aW9uKCkgeworICAgIGxldCBvYmogPSB7Cisg
ICAgICAgIDA6IDQyLAorICAgICAgICBsZW5ndGg6IG1heFNhZmVJbnRlZ2VyIC0gMQorICAgIH07
CisgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKG9iaiwgb2JqLmxlbmd0aCAtIDEwLCAx
LCAxMCwgMjAsIDMwKTsKK30pOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7Cisg
ICAgbGV0IG9iaiA9IHsKKyAgICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogbWF4U2FmZUlu
dGVnZXIKKyAgICB9OworICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChvYmosIG9iai5s
ZW5ndGggLSAxMCwgMSwgMTAsIDIwKTsKK30pOworCitmdW5jdGlvbiB0ZXN0SlNPTlN0cmluZ2lm
eSgpIHsKKyAgICBsZXQgYXJyID0gWzEsMiwzXTsKKyAgICBsZXQgcCA9IG5ldyBQcm94eShhcnIs
IHsKKyAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHsKKyAgICAgICAgICAgIGlm
IChwcm9wID09PSAibGVuZ3RoIikgeworICAgICAgICAgICAgICAgIHJldHVybiBib3VuZGFyeTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHBy
b3AsIHJlY2VpdmVyKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGxldCBvayA9IGZhbHNlOwor
ICAgIHRyeSB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KHApOworICAgIH0gY2F0Y2goZSkgewor
ICAgICAgICBvayA9IGUubWVzc2FnZS5pbmRleE9mKCJPdXQgb2YgbWVtb3J5IikgPj0gMDsKKyAg
ICB9CisgICAgYXNzZXJ0KG9rKTsKK30KK3Rlc3RKU09OU3RyaW5naWZ5KCk7CkluZGV4OiBKU1Rl
c3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy90ZXN0
MjYyL2V4cGVjdGF0aW9ucy55YW1sCShyZXZpc2lvbiAyNjA5MTcpCisrKyBKU1Rlc3RzL3Rlc3Qy
NjIvZXhwZWN0YXRpb25zLnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTY0Miw2MyArNjQyLDkgQEAg
dGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL2NvbmNhdC9hcgogdGVzdC9idWlsdC1pbnMv
QXJyYXkvcHJvdG90eXBlL2NvbmNhdC9pcy1jb25jYXQtc3ByZWFkYWJsZS1nZXQtb3JkZXIuanM6
CiAgIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtpc0NvbmNhdFNwcmVhZGFibGUs
IGNvbnN0cnVjdG9yLCBpc0NvbmNhdFNwcmVhZGFibGVdIGFuZCBbY29uc3RydWN0b3IsIGlzQ29u
Y2F0U3ByZWFkYWJsZV0gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gJwogICBzdHJpY3QgbW9k
ZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW2lzQ29uY2F0U3ByZWFkYWJsZSwgY29uc3RydWN0
b3IsIGlzQ29uY2F0U3ByZWFkYWJsZV0gYW5kIFtjb25zdHJ1Y3RvciwgaXNDb25jYXRTcHJlYWRh
YmxlXSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiAnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9w
cm90b3R5cGUvaW5kZXhPZi9sZW5ndGgtbmVhci1pbnRlZ2VyLWxpbWl0LmpzOgotICBkZWZhdWx0
OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBTYW1lVmFsdWUowqstMcK7LCDCqzkwMDcxOTkyNTQ3
NDA5OTDCuykgdG8gYmUgdHJ1ZScKLSAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVj
dGVkIFNhbWVWYWx1ZSjCqy0xwrssIMKrOTAwNzE5OTI1NDc0MDk5MMK7KSB0byBiZSB0cnVlJwot
dGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3BvcC9TMTUuNC40LjZfQTJfVDIuanM6Ci0g
IGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6ICM0OiB2YXIgb2JqID0ge307IG9iai5sZW5ndGggPSBO
dW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IG9iai5wb3AgPSBBcnJheS5wcm90b3R5cGUucG9wOyBv
YmoucG9wKCk7IG9iai5sZW5ndGggPT09IDkwMDcxOTkyNTQ3NDA5OTAuIEFjdHVhbDogNDI5NDk2
NzI5NCcKLSAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6ICM0OiB2YXIgb2JqID0ge307IG9i
ai5sZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IG9iai5wb3AgPSBBcnJheS5wcm90
b3R5cGUucG9wOyBvYmoucG9wKCk7IG9iai5sZW5ndGggPT09IDkwMDcxOTkyNTQ3NDA5OTAuIEFj
dHVhbDogNDI5NDk2NzI5NCcKLXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9wb3AvUzE1
LjQuNC42X0EzX1QxLmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiAjMTogdmFyIG9iaiA9
IHt9OyBvYmoucG9wID0gQXJyYXkucHJvdG90eXBlLnBvcDsgb2JqWzBdID0gIngiOyBvYmpbNDI5
NDk2NzI5NV0gPSAieSI7IG9iai5sZW5ndGggPSA0Mjk0OTY3Mjk2OyBvYmoucG9wKCkgPT09ICJ5
Ii4gQWN0dWFsOiB1bmRlZmluZWQnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiAjMTog
dmFyIG9iaiA9IHt9OyBvYmoucG9wID0gQXJyYXkucHJvdG90eXBlLnBvcDsgb2JqWzBdID0gIngi
OyBvYmpbNDI5NDk2NzI5NV0gPSAieSI7IG9iai5sZW5ndGggPSA0Mjk0OTY3Mjk2OyBvYmoucG9w
KCkgPT09ICJ5Ii4gQWN0dWFsOiB1bmRlZmluZWQnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90
b3R5cGUvcG9wL2NsYW1wcy10by1pbnRlZ2VyLWxpbWl0LmpzOgotICBkZWZhdWx0OiAnVGVzdDI2
MkVycm9yOiBMZW5ndGggaXMgMioqNTMgLSAxIEV4cGVjdGVkIFNhbWVWYWx1ZSjCqzQyOTQ5Njcy
OTTCuywgwqs5MDA3MTk5MjU0NzQwOTkwwrspIHRvIGJlIHRydWUnCi0gIHN0cmljdCBtb2RlOiAn
VGVzdDI2MkVycm9yOiBMZW5ndGggaXMgMioqNTMgLSAxIEV4cGVjdGVkIFNhbWVWYWx1ZSjCqzQy
OTQ5NjcyOTTCuywgwqs5MDA3MTk5MjU0NzQwOTkwwrspIHRvIGJlIHRydWUnCi10ZXN0L2J1aWx0
LWlucy9BcnJheS9wcm90b3R5cGUvcG9wL2xlbmd0aC1uZWFyLWludGVnZXItbGltaXQuanM6Ci0g
IGRlZmF1bHQ6ICJUZXN0MjYyRXJyb3I6IGFycmF5TGlrZVsnOTAwNzE5OTI1NDc0MDk5MCddIGlz
IHJldHVybmVkIGZyb20gcG9wKCkgRXhwZWN0ZWQgU2FtZVZhbHVlKMKrdW5kZWZpbmVkwrssIMKr
OTAwNzE5OTI1NDc0MDk5MMK7KSB0byBiZSB0cnVlIgotICBzdHJpY3QgbW9kZTogIlRlc3QyNjJF
cnJvcjogYXJyYXlMaWtlWyc5MDA3MTk5MjU0NzQwOTkwJ10gaXMgcmV0dXJuZWQgZnJvbSBwb3Ao
KSBFeHBlY3RlZCBTYW1lVmFsdWUowqt1bmRlZmluZWTCuywgwqs5MDA3MTk5MjU0NzQwOTkwwrsp
IHRvIGJlIHRydWUiCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvcHVzaC9TMTUuNC40
LjdfQTJfVDIuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIGEgVHlwZUVy
cm9yIHRvIGJlIHRocm93biBidXQgbm8gZXhjZXB0aW9uIHdhcyB0aHJvd24gYXQgYWxsJwotICBz
dHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgYSBUeXBlRXJyb3IgdG8gYmUgdGhy
b3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93biBhdCBhbGwnCi10ZXN0L2J1aWx0LWlucy9B
cnJheS9wcm90b3R5cGUvcHVzaC9jbGFtcHMtdG8taW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVs
dDogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUo
wqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotICBzdHJp
Y3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1l
VmFsdWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwot
dGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3B1c2gvdGhyb3dzLWlmLWludGVnZXItbGlt
aXQtZXhjZWVkZWQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IExlbmd0aCBpcyAyKio1
MyAtIDEgRXhwZWN0ZWQgYSBUeXBlRXJyb3IgdG8gYmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24g
d2FzIHRocm93biBhdCBhbGwnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBMZW5ndGgg
aXMgMioqNTMgLSAxIEV4cGVjdGVkIGEgVHlwZUVycm9yIHRvIGJlIHRocm93biBidXQgbm8gZXhj
ZXB0aW9uIHdhcyB0aHJvd24gYXQgYWxsJwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBl
L3JldmVyc2UvbGVuZ3RoLWV4Y2VlZGluZy1pbnRlZ2VyLWxpbWl0LXdpdGgtcHJveHkuanM6Ci0g
IGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtHZXQ6bGVuZ3RoLCBIYXM6MCwgR2V0
OjAsIEhhczo0Mjk0OTY3Mjk0LCBEZWxldGU6MCwgU2V0OjQyOTQ5NjcyOTQsIEdldE93blByb3Bl
cnR5RGVzY3JpcHRvcjo0Mjk0OTY3Mjk0LCBEZWZpbmVQcm9wZXJ0eTo0Mjk0OTY3Mjk0LCBIYXM6
MSwgSGFzOjQyOTQ5NjcyOTMsIERlbGV0ZToxLCBEZWxldGU6NDI5NDk2NzI5MywgSGFzOjIsIEdl
dDoyLCBIYXM6NDI5NDk2NzI5MiwgRGVsZXRlOjIsIFNldDo0Mjk0OTY3MjkyLCBHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3I6NDI5NDk2NzI5MiwgRGVmaW5lUHJvcGVydHk6NDI5NDk2NzI5MiwgSGFz
OjMsIEhhczo0Mjk0OTY3MjkxLCBEZWxldGU6MywgRGVsZXRlOjQyOTQ5NjcyOTEsIEhhczo0LCBH
ZXQ6NF0gYW5kIFtHZXQ6bGVuZ3RoLCBIYXM6MCwgR2V0OjAsIEhhczo5MDA3MTk5MjU0NzQwOTkw
LCBHZXQ6OTAwNzE5OTI1NDc0MDk5MCwgU2V0OjAsIEdldE93blByb3BlcnR5RGVzY3JpcHRvcjow
LCBEZWZpbmVQcm9wZXJ0eTowLCBTZXQ6OTAwNzE5OTI1NDc0MDk5MCwgR2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yOjkwMDcxOTkyNTQ3NDA5OTAsIERlZmluZVByb3BlcnR5OjkwMDcxOTkyNTQ3NDA5
OTAsIEhhczoxLCBIYXM6OTAwNzE5OTI1NDc0MDk4OSwgSGFzOjIsIEdldDoyLCBIYXM6OTAwNzE5
OTI1NDc0MDk4OCwgRGVsZXRlOjIsIFNldDo5MDA3MTk5MjU0NzQwOTg4LCBHZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3I6OTAwNzE5OTI1NDc0MDk4OCwgRGVmaW5lUHJvcGVydHk6OTAwNzE5OTI1NDc0
MDk4OCwgSGFzOjMsIEhhczo5MDA3MTk5MjU0NzQwOTg3LCBHZXQ6OTAwNzE5OTI1NDc0MDk4Nywg
U2V0OjMsIEdldE93blByb3BlcnR5RGVzY3JpcHRvcjozLCBEZWZpbmVQcm9wZXJ0eTozLCBEZWxl
dGU6OTAwNzE5OTI1NDc0MDk4NywgSGFzOjQsIEdldDo0XSB0byBoYXZlIHRoZSBzYW1lIGNvbnRl
bnRzLiAnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbR2V0Omxlbmd0
aCwgSGFzOjAsIEdldDowLCBIYXM6NDI5NDk2NzI5NCwgRGVsZXRlOjAsIFNldDo0Mjk0OTY3Mjk0
LCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6NDI5NDk2NzI5NCwgRGVmaW5lUHJvcGVydHk6NDI5
NDk2NzI5NCwgSGFzOjEsIEhhczo0Mjk0OTY3MjkzLCBEZWxldGU6MSwgRGVsZXRlOjQyOTQ5Njcy
OTMsIEhhczoyLCBHZXQ6MiwgSGFzOjQyOTQ5NjcyOTIsIERlbGV0ZToyLCBTZXQ6NDI5NDk2NzI5
MiwgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOjQyOTQ5NjcyOTIsIERlZmluZVByb3BlcnR5OjQy
OTQ5NjcyOTIsIEhhczozLCBIYXM6NDI5NDk2NzI5MSwgRGVsZXRlOjMsIERlbGV0ZTo0Mjk0OTY3
MjkxLCBIYXM6NCwgR2V0OjRdIGFuZCBbR2V0Omxlbmd0aCwgSGFzOjAsIEdldDowLCBIYXM6OTAw
NzE5OTI1NDc0MDk5MCwgR2V0OjkwMDcxOTkyNTQ3NDA5OTAsIFNldDowLCBHZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3I6MCwgRGVmaW5lUHJvcGVydHk6MCwgU2V0OjkwMDcxOTkyNTQ3NDA5OTAsIEdl
dE93blByb3BlcnR5RGVzY3JpcHRvcjo5MDA3MTk5MjU0NzQwOTkwLCBEZWZpbmVQcm9wZXJ0eTo5
MDA3MTk5MjU0NzQwOTkwLCBIYXM6MSwgSGFzOjkwMDcxOTkyNTQ3NDA5ODksIEhhczoyLCBHZXQ6
MiwgSGFzOjkwMDcxOTkyNTQ3NDA5ODgsIERlbGV0ZToyLCBTZXQ6OTAwNzE5OTI1NDc0MDk4OCwg
R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOjkwMDcxOTkyNTQ3NDA5ODgsIERlZmluZVByb3BlcnR5
OjkwMDcxOTkyNTQ3NDA5ODgsIEhhczozLCBIYXM6OTAwNzE5OTI1NDc0MDk4NywgR2V0OjkwMDcx
OTkyNTQ3NDA5ODcsIFNldDozLCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6MywgRGVmaW5lUHJv
cGVydHk6MywgRGVsZXRlOjkwMDcxOTkyNTQ3NDA5ODcsIEhhczo0LCBHZXQ6NF0gdG8gaGF2ZSB0
aGUgc2FtZSBjb250ZW50cy4gJwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3NsaWNl
L2xlbmd0aC1leGNlZWRpbmctaW50ZWdlci1saW1pdC1wcm94aWVkLWFycmF5LmpzOgotICBkZWZh
dWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQgWzkwMDcxOTkyNTQ3NDA5ODksIDkw
MDcxOTkyNTQ3NDA5OTBdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuIHNsaWNlKDkwMDcxOTky
NTQ3NDA5ODkpJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW10gYW5k
IFs5MDA3MTk5MjU0NzQwOTg5LCA5MDA3MTk5MjU0NzQwOTkwXSB0byBoYXZlIHRoZSBzYW1lIGNv
bnRlbnRzLiBzbGljZSg5MDA3MTk5MjU0NzQwOTg5KScKLXRlc3QvYnVpbHQtaW5zL0FycmF5L3By
b3RvdHlwZS9zbGljZS9sZW5ndGgtZXhjZWVkaW5nLWludGVnZXItbGltaXQuanM6Ci0gIGRlZmF1
bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtdIGFuZCBbOTAwNzE5OTI1NDc0MDk4OSwgOTAw
NzE5OTI1NDc0MDk5MF0gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gc2xpY2UoOTAwNzE5OTI1
NDc0MDk4OSknCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQg
WzkwMDcxOTkyNTQ3NDA5ODksIDkwMDcxOTkyNTQ3NDA5OTBdIHRvIGhhdmUgdGhlIHNhbWUgY29u
dGVudHMuIHNsaWNlKDkwMDcxOTkyNTQ3NDA5ODkpJwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJv
dG90eXBlL3NwbGljZS9TMTUuNC40LjEyX0EzX1QxLmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVy
cm9yOiAjMTogdmFyIG9iaiA9IHt9OyBvYmouc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGlj
ZTsgb2JqWzBdID0gIngiOyBvYmpbNDI5NDk2NzI5NV0gPSAieSI7IG9iai5sZW5ndGggPSA0Mjk0
OTY3Mjk2OyB2YXIgYXJyID0gb2JqLnNwbGljZSg0Mjk0OTY3Mjk1LDEpOyBhcnIubGVuZ3RoID09
PSAxLiBBY3R1YWw6IDAnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiAjMTogdmFyIG9i
aiA9IHt9OyBvYmouc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsgb2JqWzBdID0gIngi
OyBvYmpbNDI5NDk2NzI5NV0gPSAieSI7IG9iai5sZW5ndGggPSA0Mjk0OTY3Mjk2OyB2YXIgYXJy
ID0gb2JqLnNwbGljZSg0Mjk0OTY3Mjk1LDEpOyBhcnIubGVuZ3RoID09PSAxLiBBY3R1YWw6IDAn
Ci10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvc3BsaWNlL2NsYW1wcy1sZW5ndGgtdG8t
aW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIq
KjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0
MDk5McK7KSB0byBiZSB0cnVlJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3Ro
IGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5
OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBl
L3NwbGljZS9jcmVhdGUtc3BlY2llcy1sZW5ndGgtZXhjZWVkaW5nLWludGVnZXItbGltaXQuanM6
Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IGxlbmd0aCBhbmQgZGVsZXRlQ291bnQgd2VyZSBj
b3JyZWN0bHkgY2xhbXBlZCB0byAyXjUzLTEgRXhwZWN0ZWQgU2FtZVZhbHVlKMKrNDI5NDk2NzI5
NcK7LCDCqzkwMDcxOTkyNTQ3NDA5OTHCuykgdG8gYmUgdHJ1ZScKLSAgc3RyaWN0IG1vZGU6ICdU
ZXN0MjYyRXJyb3I6IGxlbmd0aCBhbmQgZGVsZXRlQ291bnQgd2VyZSBjb3JyZWN0bHkgY2xhbXBl
ZCB0byAyXjUzLTEgRXhwZWN0ZWQgU2FtZVZhbHVlKMKrNDI5NDk2NzI5NcK7LCDCqzkwMDcxOTky
NTQ3NDA5OTHCuykgdG8gYmUgdHJ1ZScKLXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9z
cGxpY2UvbGVuZ3RoLWFuZC1kZWxldGVDb3VudC1leGNlZWRpbmctaW50ZWdlci1saW1pdC5qczoK
LSAgZGVmYXVsdDogIlRlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQw
OTg5LCA5MDA3MTk5MjU0NzQwOTkwXSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiBhcnJheUxp
a2VbJzkwMDcxOTkyNTQ3NDA5ODknXSBhbmQgYXJyYXlMaWtlWyc5MDA3MTk5MjU0NzQwOTkwJ10g
YXJlIHJlbW92ZWQiCi0gIHN0cmljdCBtb2RlOiAiVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbXSBh
bmQgWzkwMDcxOTkyNTQ3NDA5ODksIDkwMDcxOTkyNTQ3NDA5OTBdIHRvIGhhdmUgdGhlIHNhbWUg
Y29udGVudHMuIGFycmF5TGlrZVsnOTAwNzE5OTI1NDc0MDk4OSddIGFuZCBhcnJheUxpa2VbJzkw
MDcxOTkyNTQ3NDA5OTAnXSBhcmUgcmVtb3ZlZCIKLXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3Rv
dHlwZS9zcGxpY2UvbGVuZ3RoLWV4Y2VlZGluZy1pbnRlZ2VyLWxpbWl0LXNocmluay1hcnJheS5q
czoKLSAgZGVmYXVsdDogIlRlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0
NzQwOTg3XSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiBhcnJheUxpa2VbJzkwMDcxOTkyNTQ3
NDA5ODcnXSBpcyByZW1vdmVkIgotICBzdHJpY3QgbW9kZTogIlRlc3QyNjJFcnJvcjogRXhwZWN0
ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQwOTg3XSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiBh
cnJheUxpa2VbJzkwMDcxOTkyNTQ3NDA5ODcnXSBpcyByZW1vdmVkIgogdGVzdC9idWlsdC1pbnMv
QXJyYXkvcHJvdG90eXBlL3NwbGljZS9wcm9wZXJ0eS10cmFwcy1vcmRlci13aXRoLXNwZWNpZXMu
anM6CiAgIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtkZWZpbmVQcm9wZXJ0eSwg
ZGVmaW5lUHJvcGVydHksIHNldCwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBkZWZpbmVQcm9w
ZXJ0eV0gYW5kIFtkZWZpbmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydHldIHRvIGhhdmUgdGhlIHNh
bWUgY29udGVudHMuICcKICAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtk
ZWZpbmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydHksIHNldCwgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yLCBkZWZpbmVQcm9wZXJ0eV0gYW5kIFtkZWZpbmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydHld
IHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuICcKLXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3Rv
dHlwZS9zcGxpY2UvdGhyb3dzLWlmLWludGVnZXItbGltaXQtZXhjZWVkZWQuanM6Ci0gIGRlZmF1
bHQ6ICdUZXN0MjYyRXJyb3I6IExlbmd0aCBpcyAyKio1MyAtIDEgRXhwZWN0ZWQgYSBUeXBlRXJy
b3IgYnV0IGdvdCBhIEVycm9yJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3Ro
IGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBhIFR5cGVFcnJvciBidXQgZ290IGEgRXJyb3InCi10ZXN0
L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvdW5zaGlmdC9jbGFtcHMtdG8taW50ZWdlci1saW1p
dC5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBl
Y3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBi
ZSB0cnVlJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0g
MSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7
KSB0byBiZSB0cnVlJwogdGVzdC9idWlsdC1pbnMvQXJyYXlCdWZmZXIvcHJvdG90eXBlL2J5dGVM
ZW5ndGgvZGV0YWNoZWQtYnVmZmVyLmpzOgogICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBl
Y3RlZCBhIFR5cGVFcnJvciB0byBiZSB0aHJvd24gYnV0IG5vIGV4Y2VwdGlvbiB3YXMgdGhyb3du
IGF0IGFsbCcKICAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIGEgVHlwZUVy
cm9yIHRvIGJlIHRocm93biBidXQgbm8gZXhjZXB0aW9uIHdhcyB0aHJvd24gYXQgYWxsJwpAQCAt
MzEwNCwxOCArMzA1MCw2IEBAIHRlc3QvbGFuZ3VhZ2UvZ2xvYmFsLWNvZGUvc2NyaXB0LWRlY2wt
ZnUKIHRlc3QvbGFuZ3VhZ2UvZ2xvYmFsLWNvZGUvc2NyaXB0LWRlY2wtdmFyLWVyci5qczoKICAg
ZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgYSBUeXBlRXJyb3IgdG8gYmUgdGhyb3du
IGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93biBhdCBhbGwnCiAgIHN0cmljdCBtb2RlOiAnVGVz
dDI2MkVycm9yOiBFeHBlY3RlZCBhIFR5cGVFcnJvciB0byBiZSB0aHJvd24gYnV0IG5vIGV4Y2Vw
dGlvbiB3YXMgdGhyb3duIGF0IGFsbCcKLXRlc3QvbGFuZ3VhZ2UvaWRlbnRpZmllcnMvcGFydC11
bmljb2RlLTEzLjAuMC1lc2NhcGVkLmpzOgotICBkZWZhdWx0OiAiU3ludGF4RXJyb3I6IEludmFs
aWQgdW5pY29kZSBlc2NhcGUgaW4gaWRlbnRpZmllcjogJ19cXHUwQjU1JyIKLSAgc3RyaWN0IG1v
ZGU6ICJTeW50YXhFcnJvcjogSW52YWxpZCB1bmljb2RlIGVzY2FwZSBpbiBpZGVudGlmaWVyOiAn
X1xcdTBCNTUnIgotdGVzdC9sYW5ndWFnZS9pZGVudGlmaWVycy9wYXJ0LXVuaWNvZGUtMTMuMC4w
LmpzOgotICBkZWZhdWx0OiAiU3ludGF4RXJyb3I6IEludmFsaWQgY2hhcmFjdGVyICdcXHUwYjU1
JyIKLSAgc3RyaWN0IG1vZGU6ICJTeW50YXhFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJ1xcdTBi
NTUnIgotdGVzdC9sYW5ndWFnZS9pZGVudGlmaWVycy9zdGFydC11bmljb2RlLTEzLjAuMC1lc2Nh
cGVkLmpzOgotICBkZWZhdWx0OiAiU3ludGF4RXJyb3I6IEludmFsaWQgdW5pY29kZSBlc2NhcGUg
aW4gaWRlbnRpZmllcjogJ1xcdTA4QkUnIgotICBzdHJpY3QgbW9kZTogIlN5bnRheEVycm9yOiBJ
bnZhbGlkIHVuaWNvZGUgZXNjYXBlIGluIGlkZW50aWZpZXI6ICdcXHUwOEJFJyIKLXRlc3QvbGFu
Z3VhZ2UvaWRlbnRpZmllcnMvc3RhcnQtdW5pY29kZS0xMy4wLjAuanM6Ci0gIGRlZmF1bHQ6ICJT
eW50YXhFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIgJ1xcdTA4YmUnIgotICBzdHJpY3QgbW9kZTog
IlN5bnRheEVycm9yOiBJbnZhbGlkIGNoYXJhY3RlciAnXFx1MDhiZSciCiB0ZXN0L2xhbmd1YWdl
L2xpdGVyYWxzL3JlZ2V4cC91LWFzdHJhbC1jaGFyLWNsYXNzLWludmVydC5qczoKICAgZGVmYXVs
dDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgU2FtZVZhbHVlKMKr77+9wrssIMKrbnVsbMK7KSB0
byBiZSB0cnVlJwogICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgU2FtZVZh
bHVlKMKr77+9wrssIMKrbnVsbMK7KSB0byBiZSB0cnVlJwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzQgQEAKKzIwMjAtMDQtMzAgIFNhYW0gQmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgV2UgY2FuJ3QgY2FzdCB0b0xlbmd0
aCByZXN1bHQgdG8gdW5zaWduZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxMTIwNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjI2MjU1NjI+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgdG9MZW5ndGgs
IGFjY29yZGluZyB0byB0aGUgc3BlYywgcmV0dXJucyBhbiA1My1iaXQgaW50ZWdlci4gSW4gb3Vy
CisgICAgICAgIGltcGxlbWVudGF0aW9uLCB3ZSByZXR1cm4gYSBkb3VibGUuIEhvd2V2ZXIsIHRo
ZXJlIHdlcmUgbWFueSBjYWxsc2l0ZXMKKyAgICAgICAgdGhhdCBkaWQgc29tZXRoaW5nIGxpa2U6
CisgICAgICAgIGBgYAorICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChvYmopOwor
ICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYmFkIGZvciBhIGZldyByZWFz
b25zOgorICAgICAgICAtIENhc3RpbmcgdG8gdW5zaWduZWQgZnJvbSBkb3VibGUgaXMgdW5kZWZp
bmVkIGJlaGF2aW9yIHdoZW4gdGhlIGludGVnZXIKKyAgICAgICAgZ3JlYXRlciB0aGFuIFVJTlRf
TUFYLiBJbiBwcmFjdGljZSwgdGhpcyBtZWFucyB0aGF0IHdlJ2QgaGF2ZSBkaWZmZXJlbnQKKyAg
ICAgICAgZW5naW5lIGJlaGF2aW9yIGRlcGVuZGluZyBvbiB3aGF0IGFyY2hpdGVjdHVyZSB3ZSdk
IGJlIHJ1bm5pbmcgb24uIEZvcgorICAgICAgICBleGFtcGxlLCBpZiB0aGUgbGVuZ3RoIHdlcmUg
VUlOVF9NQVggKyAxLCBvbiB4ODYsIHdlJ2QgdHJlYXQgdGhlCisgICAgICAgIGxlbmd0aCBhcyB6
ZXJvLiBPbiBhcm02NCwgd2UnZCB0cmVhdCBpdCBhcyBVSU5UX01BWC4gQm90aCBhcmUgd3Jvbmcu
CisgICAgICAgIC0gV2Ugd2VyZW4ndCBzcGVjIGNvbXBsaWFudC4gV2Ugd2VyZSBqdXN0IGlnbm9y
aW5nIHRoYXQgdGhlc2UgbnVtYmVycyBjb3VsZAorICAgICAgICBiZSA1My1iaXQgaW50ZWdlcnMu
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFkZHJlc3NlcyBlYWNoIGJhZCB1c2UgdGhl
IHVuZGVmaW5lZCBiZWhhdmlvciwgYW5kIGJ5IGRvaW5nIHNvLAorICAgICAgICBtYWtlcyB1cyBt
b3JlIHNwZWMgY29tcGxpYW50LgorCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0QnlWYWwp
OgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpn
ZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OnNldExlbmd0aCk6CisgICAgICAgIChKU0M6OmFy
Z3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQpOgorICAgICAgICAoSlNDOjpzaGlmdCk6
CisgICAgICAgIChKU0M6OnVuc2hpZnQpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1Rv
TG9jYWxlU3RyaW5nKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQb3ApOgorICAgICAg
ICAoSlNDOjphcnJheVByb3RvRnVuY1B1c2gpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVu
Y1JldmVyc2UpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NoaWZ0KToKKyAgICAgICAg
KEpTQzo6YXJyYXlQcm90b0Z1bmNTbGljZSk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5j
U3BsaWNlKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNVblNoaWZ0KToKKyAgICAgICAg
KEpTQzo6ZmFzdEluZGV4T2YpOgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0luZGV4T2Yp
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKToKKyAgICAgICAgKiBy
dW50aW1lL0lkZW50aWZpZXIuaDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6ZnJvbSk6Cisg
ICAgICAgICogcnVudGltZS9JbnRsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6Y2Fub25pY2Fs
aXplTG9jYWxlTGlzdCk6CisgICAgICAgICogcnVudGltZS9KU09OT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6U3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKToKKyAgICAgICAgKEpTQzo6U3RyaW5n
aWZpZXI6OkhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6V2Fsa2Vy
Ojp3YWxrKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6Omhhc1Byb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRCeUluZGV4SW5saW5lKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEluZGV4KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNhbkdldEluZGV4UXVpY2tseSBjb25zdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp0cnlH
ZXRJbmRleFF1aWNrbHkgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5U2xvdC5oOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eVNsb3Q6OmdldFZhbHVlIGNvbnN0KToKKyAgICAgICAgKiB0b29scy9KU0Rv
bGxhclZNLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25TZXRVc2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzKToKKwogMjAyMC0wNC0yOSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5j
b20+CiAKICAgICAgICAgQXN5bmNGcm9tU3luY0l0ZXJhdG9yIG1ldGhvZHMgc2hvdWxkIG5vdCBw
YXNzIGFic2VudCB2YWx1ZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI4LDcgKzgyOCw3IEBA
IHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICBKSVRPcGVyYXRp
b25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAg
ICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGds
b2JhbE9iamVjdCwgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsK
KyAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGluZGV4KSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRydWUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtODQ0LDcgKzg0NCw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW8KICAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgCiAgICAgaWYg
KGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9i
amVjdCwgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CisgICAg
ICAgIG9iamVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVp
bnQzMl90PihpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBmYWxzZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC04NjIsNyArODYyLDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dERvdWJsZUJ5VgogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpT
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlKTsKICAgICAKICAgICBpZiAoaW5k
ZXggPj0gMCkgewotICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0
LCBpbmRleCwganNWYWx1ZSwgdHJ1ZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJbmRleElubGlu
ZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIGpzVmFsdWUsIHRy
dWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtODgwLDcgKzg4MCw3IEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVYKICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAgICAgCiAgICAg
aWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2Jh
bE9iamVjdCwgaW5kZXgsIGpzVmFsdWUsIGZhbHNlKTsKKyAgICAgICAgb2JqZWN0LT5wdXRCeUlu
ZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4KSwganNW
YWx1ZSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtODk4LDcgKzg5
OCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3VibGVCeVYKICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZSk7CiAK
ICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KGds
b2JhbE9iamVjdCwgaW5kZXgsIGpzVmFsdWUsIDAsIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cp
OworICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KGluZGV4KSwganNWYWx1ZSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJv
dyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTkxNSw3ICs5MTUsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0g
SlNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpOwogCiAgICAgaWYgKGluZGV4
ID49IDApIHsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGlu
ZGV4LCBqc1ZhbHVlKTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIGpzVmFsdWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMDAzLDcgKzEwMDMsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUHV0QnlWYWxEaXJlCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICBvYmpl
Y3QtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKKyAgICAgICAgb2Jq
ZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
bmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCAwLCBQdXREaXJlY3RJbmRleFNo
b3VsZFRocm93KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTEwMTgsNyArMTAx
OCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmUKICAgICBKSVRP
cGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAK
ICAgICBpZiAoaW5kZXggPj0gMCkgewotICAgICAgICBvYmplY3QtPnB1dERpcmVjdEluZGV4KGds
b2JhbE9iamVjdCwgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKKyAgICAg
ICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihpbmRleCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3OSw3ICsxOTc5LDcg
QEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNWYWx1ZSBnZXRCeVZhbChKUwogICAgICAgICAgICAg
ICAgIGFycmF5UHJvZmlsZS0+c2V0T3V0T2ZCb3VuZHMoKTsKICAgICAgICAgfSBlbHNlIGlmIChi
YXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFz
T2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5HZXRJbmRleFF1
aWNrbHkoaSkpCisgICAgICAgICAgICBpZiAob2JqZWN0LT5jYW5HZXRJbmRleFF1aWNrbHkoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LT5n
ZXRJbmRleFF1aWNrbHkoaSk7CiAKICAgICAgICAgICAgIGJvb2wgc2tpcE1hcmtpbmdPdXRPZkJv
dW5kcyA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcs
NyArMTQ3LDcgQEAgdm9pZCBBcnJheVByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIAogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVuY3Rpb25zIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRQ
cm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0LCB1
bnNpZ25lZCBpbmRleCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0UHJvcGVydHko
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgdWludDY0X3Qg
aW5kZXgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKQEAgLTE3OSwxMiArMTc5LDEzIEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIHZvaWQgcHV0TGVuZ3RoKEpTR2wKICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogfQog
Ci1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHNldExlbmd0aChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBWTSYgdm0sIEpTT2JqZWN0KiBvYmosIHVuc2lnbmVkIHZhbHVlKQorc3RhdGlj
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVk0mIHZtLCBKU09iamVjdCogb2JqLCB1aW50NjRfdCB2YWx1ZSkKIHsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHRocm93RXhjZXB0aW9uID0gdHJ1ZTsKICAgICBpZiAoaXNKU0FycmF5KG9iaikpIHsKLSAgICAg
ICAganNDYXN0PEpTQXJyYXkqPihvYmopLT5zZXRMZW5ndGgoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwg
dGhyb3dFeGNlcHRpb24pOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZh
bHVlKSA9PSB2YWx1ZSk7CisgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+c2V0TGVuZ3Ro
KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHZhbHVlKSwgdGhyb3dFeGNlcHRp
b24pOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgIH0K
ICAgICBzY29wZS5yZWxlYXNlKCk7CkBAIC0yOTEsNyArMjkyLDcgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
SlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEVtcHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRy
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSkpKTsKIH0KIAotc3RhdGljIGlubGluZSB1
bnNpZ25lZCBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQg
dW5kZWZpbmVkVmFsdWUgPSAwKQorc3RhdGljIGlubGluZSB1aW50NjRfdCBhcmd1bWVudENsYW1w
ZWRJbmRleEZyb21TdGFydE9yRW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgdmFsdWUsIHVpbnQ2NF90IGxlbmd0aCwgdWludDY0X3QgdW5kZWZpbmVkVmFsdWUgPSAwKQog
ewogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gdW5kZWZpbmVk
VmFsdWU7CkBAIC0yOTksOSArMzAwLDkgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBhcmd1bWVu
dENsYW1wZWRJbgogICAgIGRvdWJsZSBpbmRleERvdWJsZSA9IHZhbHVlLnRvSW50ZWdlcihnbG9i
YWxPYmplY3QpOwogICAgIGlmIChpbmRleERvdWJsZSA8IDApIHsKICAgICAgICAgaW5kZXhEb3Vi
bGUgKz0gbGVuZ3RoOwotICAgICAgICByZXR1cm4gaW5kZXhEb3VibGUgPCAwID8gMCA6IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihpbmRleERvdWJsZSk7CisgICAgICAgIHJldHVybiBpbmRleERvdWJs
ZSA8IDAgPyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGluZGV4RG91YmxlKTsKICAgICB9Ci0g
ICAgcmV0dXJuIGluZGV4RG91YmxlID4gbGVuZ3RoID8gbGVuZ3RoIDogc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGluZGV4RG91YmxlKTsKKyAgICByZXR1cm4gaW5kZXhEb3VibGUgPiBsZW5ndGggPyBs
ZW5ndGggOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW5kZXhEb3VibGUpOwogfQogCiAvLyBUaGUg
c2hpZnQvdW5zaGlmdCBmdW5jdGlvbiBpbXBsZW1lbnQgdGhlIHNoaWZ0L3Vuc2hpZnQgYmVoYXZp
b3VyIHJlcXVpcmVkCkBAIC0zMjAsMzMgKzMyMSwzNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVk
IGFyZ3VtZW50Q2xhbXBlZEluCiAvLyBtdXN0IGJlIGludHJvZHVjaW5nIG5ldyB2YWx1ZXMuCiAK
IHRlbXBsYXRlPEpTQXJyYXk6OlNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgotdm9pZCBz
aGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iaiwgdW5z
aWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJyZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50
LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIHNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiB0aGlzT2JqLCB1aW50NjRfdCBoZWFkZXIsIHVpbnQ2NF90IGN1cnJlbnRD
b3VudCwgdWludDY0X3QgcmVzdWx0Q291bnQsIHVpbnQ2NF90IGxlbmd0aCkKIHsKICAgICBWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudENvdW50ID4gcmVzdWx0Q291
bnQpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gY3VycmVudENvdW50IC0gcmVzdWx0Q291bnQ7Cisg
ICAgdWludDY0X3QgY291bnQgPSBjdXJyZW50Q291bnQgLSByZXN1bHRDb3VudDsKIAogICAgIFJF
TEVBU0VfQVNTRVJUKGhlYWRlciA8PSBsZW5ndGgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGN1cnJl
bnRDb3VudCA8PSAobGVuZ3RoIC0gaGVhZGVyKSk7CiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNP
YmopKSB7CiAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKLSAgICAg
ICAgaWYgKGFycmF5LT5sZW5ndGgoKSA9PSBsZW5ndGggJiYgYXJyYXktPnNoaWZ0Q291bnQ8c2hp
ZnRDb3VudE1vZGU+KGdsb2JhbE9iamVjdCwgaGVhZGVyLCBjb3VudCkpCisgICAgICAgIHVpbnQz
Ml90IGhlYWRlcjMyID0gaGVhZGVyOworICAgICAgICBSRUxFQVNFX0FTU0VSVChoZWFkZXIzMiA9
PSBoZWFkZXIpOworICAgICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID09IGxlbmd0aCAmJiBhcnJh
eS0+c2hpZnRDb3VudDxzaGlmdENvdW50TW9kZT4oZ2xvYmFsT2JqZWN0LCBoZWFkZXIzMiwgY291
bnQpKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBoZWFkZXIgPSBoZWFkZXIzMjsKICAg
ICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSBoZWFkZXI7IGsgPCBsZW5ndGggLSBjdXJyZW50
Q291bnQ7ICsraykgewotICAgICAgICB1bnNpZ25lZCBmcm9tID0gayArIGN1cnJlbnRDb3VudDsK
LSAgICAgICAgdW5zaWduZWQgdG8gPSBrICsgcmVzdWx0Q291bnQ7CisgICAgZm9yICh1aW50NjRf
dCBrID0gaGVhZGVyOyBrIDwgbGVuZ3RoIC0gY3VycmVudENvdW50OyArK2spIHsKKyAgICAgICAg
dWludDY0X3QgZnJvbSA9IGsgKyBjdXJyZW50Q291bnQ7CisgICAgICAgIHVpbnQ2NF90IHRvID0g
ayArIHJlc3VsdENvdW50OwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0UHJvcGVydHkoZ2xv
YmFsT2JqZWN0LCB0aGlzT2JqLCBmcm9tKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICB0aGlzT2Jq
LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgdG8sIHZhbHVlLCB0cnVlKTsKICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSkt
PmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIHRvKTsKKyAgICAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVj
dCwgdG8pOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICAgICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBA
IC0zNTQsOCArMzU4LDggQEAgdm9pZCBzaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgayA9
IGxlbmd0aDsgayA+IGxlbmd0aCAtIGNvdW50OyAtLWspIHsKLSAgICAgICAgYm9vbCBzdWNjZXNz
ID0gdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09i
aiwgZ2xvYmFsT2JqZWN0LCBrIC0gMSk7CisgICAgZm9yICh1aW50NjRfdCBrID0gbGVuZ3RoOyBr
ID4gbGVuZ3RoIC0gY291bnQ7IC0taykgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2Jq
LT5kZWxldGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGsgLSAxKTsKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFibGVUb0RlbGV0
ZVByb3BlcnR5RXJyb3IpOwpAQCAtMzY1LDI0ICszNjksMjQgQEAgdm9pZCBzaGlmdChKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LAogfQogCiB0ZW1wbGF0ZTxKU0FycmF5OjpTaGlmdENvdW50
TW9kZSBzaGlmdENvdW50TW9kZT4KLXZvaWQgdW5zaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogdGhpc09iaiwgdW5zaWduZWQgaGVhZGVyLCB1bnNpZ25lZCBjdXJy
ZW50Q291bnQsIHVuc2lnbmVkIHJlc3VsdENvdW50LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIHVu
c2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHRoaXNPYmosIHVp
bnQ2NF90IGhlYWRlciwgdWludDY0X3QgY3VycmVudENvdW50LCB1aW50NjRfdCByZXN1bHRDb3Vu
dCwgdWludDY0X3QgbGVuZ3RoKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHRDb3VudCA+IGN1cnJlbnRDb3VudCk7Ci0gICAgdW5zaWduZWQgY291bnQg
PSByZXN1bHRDb3VudCAtIGN1cnJlbnRDb3VudDsKKyAgICB1aW50NjRfdCBjb3VudCA9IHJlc3Vs
dENvdW50IC0gY3VycmVudENvdW50OwogCiAgICAgUkVMRUFTRV9BU1NFUlQoaGVhZGVyIDw9IGxl
bmd0aCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoY3VycmVudENvdW50IDw9IChsZW5ndGggLSBoZWFk
ZXIpKTsKIAotICAgIC8vIEd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cuCi0gICAgaWYgKGNvdW50ID4g
VUlOVF9NQVggLSBsZW5ndGgpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2Jh
bE9iamVjdCwgc2NvcGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGlzSlNB
cnJheSh0aGlzT2JqKSkgeworICAgICAgICAvLyBHdWFyZCBhZ2FpbnN0IG92ZXJmbG93LgorICAg
ICAgICBpZiAoY291bnQgKyBsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIEpTQXJy
YXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgaWYgKGFycmF5LT5sZW5ndGgo
KSA9PSBsZW5ndGgpIHsKICAgICAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGFycmF5LT51bnNoaWZ0
Q291bnQ8c2hpZnRDb3VudE1vZGU+KGdsb2JhbE9iamVjdCwgaGVhZGVyLCBjb3VudCk7CkBAIC0z
OTIsMTYgKzM5NiwxNiBAQCB2b2lkIHVuc2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSBsZW5ndGggLSBjdXJy
ZW50Q291bnQ7IGsgPiBoZWFkZXI7IC0taykgewotICAgICAgICB1bnNpZ25lZCBmcm9tID0gayAr
IGN1cnJlbnRDb3VudCAtIDE7Ci0gICAgICAgIHVuc2lnbmVkIHRvID0gayArIHJlc3VsdENvdW50
IC0gMTsKKyAgICBmb3IgKHVpbnQ2NF90IGsgPSBsZW5ndGggLSBjdXJyZW50Q291bnQ7IGsgPiBo
ZWFkZXI7IC0taykgeworICAgICAgICB1aW50NjRfdCBmcm9tID0gayArIGN1cnJlbnRDb3VudCAt
IDE7CisgICAgICAgIHVpbnQ2NF90IHRvID0gayArIHJlc3VsdENvdW50IC0gMTsKICAgICAgICAg
SlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgZnJvbSk7
CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgIGlm
ICh2YWx1ZSkgewogICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGluZShnbG9iYWxP
YmplY3QsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYm9vbCBzdWNj
ZXNzID0gdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhp
c09iaiwgZ2xvYmFsT2JqZWN0LCB0byk7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlz
T2JqLT5kZWxldGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHRvKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
IXN1Y2Nlc3MpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0
LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKQEAgLTY4NSw4ICs2ODksMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOworICAgIHVpbnQ2
NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3Qs
IHRoaXNPYmplY3QpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQogCiAgICAgU3Ry
aW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCk7CiAg
ICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tlci5lYXJseVJl
dHVyblZhbHVlKCkpOwpAQCAtODY2LDcgKzg3NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9u
KCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCiAgICAgICAgIHJl
dHVybiBlbmNvZGVkSlNWYWx1ZSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGds
b2JhbE9iamVjdCwgdGhpc09iaik7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaikpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKGxlbmd0aCA9
PSAwKSB7CkBAIC04NzUsMTcgKzg4MywyMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqLT5nZXQoZ2xvYmFsT2Jq
ZWN0LCBsZW5ndGggLSAxKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSkt
PmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIGxlbmd0aCAtIDEp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAg
IGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKLSAgICAgICAgcmV0
dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAgfQotICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICBw
dXRMZW5ndGgoZ2xvYmFsT2JqZWN0LCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVuZ3RoIC0gMSkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBhdXRvIHBlcmZvcm1Q
b3AgPSBbJl0gKGF1dG8gaW5kZXgsIEpTVmFsdWUgaW5kZXhWYWx1ZSkgeworICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRoaXNPYmotPmdldChnbG9iYWxPYmplY3QsIGluZGV4KTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgICAgIGJv
b2wgc3VjY2VzcyA9IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgeworICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsK
KyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAg
IHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcHV0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdm0sIHRo
aXNPYmosIGluZGV4VmFsdWUpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgfTsKKworICAgIGlmIChMSUtFTFkobGVuZ3RoIDw9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKSkpCisgICAgICAgIHJldHVybiBwZXJmb3JtUG9wKHN0YXRpY19j
YXN0PHVpbnQzMl90PihsZW5ndGggLSAxKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGxlbmd0aCAtIDEpKSk7CisgICAgcmV0dXJuIHBlcmZvcm1Qb3AoSWRlbnRpZmllcjo6ZnJvbSh2
bSwgbGVuZ3RoIC0gMSksIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1B1c2goSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MDUsMTggKzkxOSwxOSBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgRVhDRVBUSU9OX0FTU0VS
VCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRo
aXNPYmopKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopOworICAgIHVpbnQ2NF90IGxl
bmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNP
YmopKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsK
KyAgICB1bnNpZ25lZCBhcmdDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOworCisg
ICAgaWYgKFVOTElLRUxZKGxlbmd0aCArIGFyZ0NvdW50ID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1heFNhZmVJbnRlZ2VyKCkpKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgInB1c2ggY2Fubm90IHByb2R1Y2UgYW4gYXJyYXkgb2YgbGVuZ3Ro
IGxhcmdlciB0aGFuICgyICoqIDUzKSAtIDEiX3MpOwogCi0gICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsKLSAgICAgICAgLy8gQ2hl
Y2sgZm9yIGludGVnZXIgb3ZlcmZsb3c7IHdoZXJlIHNhZmUgd2UgY2FuIGRvIGEgZmFzdCBwdXQg
YnkgaW5kZXguCi0gICAgICAgIGlmIChsZW5ndGggKyBuID49IGxlbmd0aCkKLSAgICAgICAgICAg
IHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmpl
Y3QsIGxlbmd0aCArIG4sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQobiksIHRydWUpOwor
ICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBhcmdDb3VudDsgbisrKSB7CisgICAgICAgIGlm
IChMSUtFTFkobGVuZ3RoICsgbiA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpKQorICAgICAgICAgICAgdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRo
aXNPYmosIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCArIG4pLCBj
YWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KG4pLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzT2JqKTsKLSAgICAgICAgICAgIGF1
dG8gc3RyaW5nID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGlj
X2Nhc3Q8aW50NjRfdD4obikpLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAgICAg
ICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
c3RyaW5nKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cjo6ZnJvbSh2bSwgbGVuZ3RoICsgbik7CiAgICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJs
ZSh2bSktPnB1dCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgY2FsbEZyYW1l
LT51bmNoZWNrZWRBcmd1bWVudChuKSwgc2xvdCk7CiAgICAgICAgIH0KICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkBAIC05MzgsNyArOTUzLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIGlmIChVTkxJ
S0VMWSghdGhpc09iamVjdCkpCiAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCi0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsK
KyAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4odG9MZW5ndGgoZ2xv
YmFsT2JqZWN0LCB0aGlzT2JqZWN0KSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
ZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB0aGlzT2JqZWN0LT5lbnN1cmVXcml0YWJsZSh2bSk7
CkBAIC05ODAsOSArOTk1LDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVBy
b3RvRgogICAgIH0KICAgICB9CiAKLSAgICB1bnNpZ25lZCBtaWRkbGUgPSBsZW5ndGggLyAyOwot
ICAgIGZvciAodW5zaWduZWQgbG93ZXIgPSAwOyBsb3dlciA8IG1pZGRsZTsgbG93ZXIrKykgewot
ICAgICAgICB1bnNpZ25lZCB1cHBlciA9IGxlbmd0aCAtIGxvd2VyIC0gMTsKKyAgICB1aW50NjRf
dCBtaWRkbGUgPSBsZW5ndGggLyAyOworICAgIGZvciAodWludDY0X3QgbG93ZXIgPSAwOyBsb3dl
ciA8IG1pZGRsZTsgbG93ZXIrKykgeworICAgICAgICB1aW50NjRfdCB1cHBlciA9IGxlbmd0aCAt
IGxvd2VyIC0gMTsKICAgICAgICAgYm9vbCBsb3dlckV4aXN0cyA9IHRoaXNPYmplY3QtPmhhc1By
b3BlcnR5KGdsb2JhbE9iamVjdCwgbG93ZXIpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgSlNWYWx1ZSBsb3dlclZhbHVlOwpA
QCAtOTk5LDExICsxMDE0LDE2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQ
cm90b0YKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKCFsb3dlckV4aXN0cyAmJiAhdXBwZXJF
eGlzdHMpIHsKKyAgICAgICAgICAgIC8vIFNwZWMgc2F5cyB0byBkbyBub3RoaW5nIHdoZW4gbmVp
dGhlciBsb3dlciBub3IgdXBwZXIgZXhpc3QuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCiAgICAgICAgIGlmICh1cHBlckV4aXN0cykgewogICAgICAgICAgICAgdGhpc09iamVj
dC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIGxvd2VyLCB1cHBlclZhbHVlLCB0cnVl
KTsKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09i
amVjdC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwg
Z2xvYmFsT2JqZWN0LCBsb3dlcik7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2Jq
ZWN0LT5kZWxldGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGxvd2VyKTsKICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAg
aWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGdsb2JhbE9iamVjdCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBAIC0x
MDE1LDcgKzEwMzUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
CiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwg
dXBwZXIsIGxvd2VyVmFsdWUsIHRydWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSh2bSktPmRlbGV0ZVByb3Bl
cnR5QnlJbmRleCh0aGlzT2JqZWN0LCBnbG9iYWxPYmplY3QsIHVwcGVyKTsKKyAgICAgICAgICAg
IGJvb2wgc3VjY2VzcyA9IHRoaXNPYmplY3QtPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVjdCwg
dXBwZXIpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXN1Y2Nlc3MpKSB7CiAgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxl
dGVQcm9wZXJ0eUVycm9yKTsKQEAgLTEwMzQsNyArMTA1NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhj
ZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCiAgICAg
ICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVu
Z3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaikpOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKGxl
bmd0aCA9PSAwKSB7CkBAIC0xMDYxLDEyICsxMDgxLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0
aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCiAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0
LCB0aGlzT2JqKTsKKyAgICB1aW50NjRfdCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3Qs
IHRoaXNPYmopOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLSAgICB1
bnNpZ25lZCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFs
T2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBsZW5ndGgpOworICAgIHVpbnQ2NF90IGJl
Z2luID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMCksIGxlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKLSAgICB1bnNpZ25lZCBlbmQgPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21T
dGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSwgbGVuZ3RoLCBs
ZW5ndGgpOworICAgIHVpbnQ2NF90IGVuZCA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0
T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDEpLCBsZW5ndGgsIGxlbmd0
aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoZW5kIDwg
YmVnaW4pCiAgICAgICAgIGVuZCA9IGJlZ2luOwpAQCAtMTA4OCw3ICsxMTA4LDExIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBpZiAoc3BlY2llc1Jlc3Vs
dC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpDcmVhdGVkT2JqZWN0KQogICAgICAg
ICByZXN1bHQgPSBzcGVjaWVzUmVzdWx0LnNlY29uZDsKICAgICBlbHNlIHsKLSAgICAgICAgcmVz
dWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShnbG9iYWxPYmplY3QsIG51bGxwdHIsIGVuZCAtIGJl
Z2luKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGVuZCAtIGJlZ2luID4gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1Zh
bHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlBcnJheShn
bG9iYWxPYmplY3QsIG51bGxwdHIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihlbmQgLSBiZWdpbikp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIH0KIApAQCAt
MTA5Niw4ICsxMTIwLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3Rv
RgogICAgIC8vIHRoYXQgY2FuIEdDIChlLmcuIGFsbG9jYXRpbmcgdGhlIHJlc3VsdCBhcnJheSku
CiAgICAgdGhpc09iai0+dXNlKCk7CiAKLSAgICB1bnNpZ25lZCBuID0gMDsKLSAgICBmb3IgKHVu
c2lnbmVkIGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKKyAgICB1aW50NjRfdCBuID0g
MDsKKyAgICBmb3IgKHVpbnQ2NF90IGsgPSBiZWdpbjsgayA8IGVuZDsgaysrLCBuKyspIHsKICAg
ICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBrKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICAgICAgaWYgKHYp
IHsKQEAgLTExMjEsNyArMTE0NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlQcm90b0YKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0aW9uKCkgPT0gIXRo
aXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCiAgICAgICAgIHJldHVybiBlbmNv
ZGVkSlNWYWx1ZSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVj
dCwgdGhpc09iaik7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaikpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYgKCFjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKSkgewpAQCAtMTE0NSwxMCArMTE2OSwxMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBhY3R1YWxTdGFydCA9IGFyZ3VtZW50Q2xhbXBl
ZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
LCBsZW5ndGgpOworICAgIHVpbnQ2NF90IGFjdHVhbFN0YXJ0ID0gYXJndW1lbnRDbGFtcGVkSW5k
ZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCksIGxl
bmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAKLSAgICB1bnNpZ25lZCBhY3R1YWxEZWxldGVDb3VudCA9IGxlbmd0aCAtIGFjdHVhbFN0YXJ0
OworICAgIHVpbnQ2NF90IGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuZ3RoIC0gYWN0dWFsU3RhcnQ7
CiAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID4gMSkgewogICAgICAgICBkb3Vi
bGUgZGVsZXRlQ291bnQgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50ZWdl
cihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKQEAgLTExNTcsOCArMTE4MSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGVsc2UgaWYgKGRlbGV0ZUNvdW50ID4gbGVu
Z3RoIC0gYWN0dWFsU3RhcnQpCiAgICAgICAgICAgICBhY3R1YWxEZWxldGVDb3VudCA9IGxlbmd0
aCAtIGFjdHVhbFN0YXJ0OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhY3R1YWxEZWxldGVD
b3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWxldGVDb3VudCk7CisgICAgICAgICAgICBh
Y3R1YWxEZWxldGVDb3VudCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihkZWxldGVDb3VudCk7CiAg
ICAgfQorICAgIHVuc2lnbmVkIGl0ZW1Db3VudCA9IHN0ZDo6bWF4PGludD4oY2FsbEZyYW1lLT5h
cmd1bWVudENvdW50KCkgLSAyLCAwKTsKKyAgICBpZiAoVU5MSUtFTFkobGVuZ3RoIC0gYWN0dWFs
RGVsZXRlQ291bnQgKyBpdGVtQ291bnQgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4obWF4U2FmZUlu
dGVnZXIoKSkpKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlLCAiU3BsaWNlIGNhbm5vdCBwcm9kdWNlIGFuIGFycmF5IG9mIGxlbmd0aCBsYXJnZXIg
dGhhbiAoMiAqKiA1MykgLSAxIl9zKTsKIAogICAgIHN0ZDo6cGFpcjxTcGVjaWVzQ29uc3RydWN0
UmVzdWx0LCBKU09iamVjdCo+IHNwZWNpZXNSZXN1bHQgPSBzcGVjaWVzQ29uc3RydWN0QXJyYXko
Z2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBhY3R1YWxEZWxldGVDb3VudCk7CiAgICAgRVhDRVBUSU9O
X0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09IChzcGVjaWVzUmVzdWx0LmZpcnN0ID09IFNw
ZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkV4Y2VwdGlvbikpOwpAQCAtMTE3NSwxMyArMTIwMiwxNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIGlmIChz
cGVjaWVzUmVzdWx0LmZpcnN0ID09IFNwZWNpZXNDb25zdHJ1Y3RSZXN1bHQ6OkNyZWF0ZWRPYmpl
Y3QpCiAgICAgICAgICAgICByZXN1bHQgPSBzcGVjaWVzUmVzdWx0LnNlY29uZDsKICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGUodm0sIGdsb2Jh
bE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFy
cmF5V2l0aFVuZGVjaWRlZCksIGFjdHVhbERlbGV0ZUNvdW50KTsKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShhY3R1YWxEZWxldGVDb3VudCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGUo
dm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxv
Y2F0aW9uKEFycmF5V2l0aFVuZGVjaWRlZCksIHN0YXRpY19jYXN0PHVpbnQzMl90PihhY3R1YWxE
ZWxldGVDb3VudCkpOwogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKSB7CiAgICAg
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBhY3R1YWxEZWxldGVD
b3VudDsgKytrKSB7CisgICAgICAgIGZvciAodWludDY0X3QgayA9IDA7IGsgPCBhY3R1YWxEZWxl
dGVDb3VudDsgKytrKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHYgPSBnZXRQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIHRoaXNPYmosIGsgKyBhY3R1YWxTdGFydCk7CiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChV
TkxJS0VMWSghdikpCkBAIC0xMTkxLDcgKzEyMjIsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIH0KICAgICB9CiAKLSAgICB1bnNpZ25lZCBpdGVt
Q291bnQgPSBzdGQ6Om1heDxpbnQ+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7
CiAgICAgaWYgKGl0ZW1Db3VudCA8IGFjdHVhbERlbGV0ZUNvdW50KSB7CiAgICAgICAgIHNoaWZ0
PEpTQXJyYXk6OlNoaWZ0Q291bnRGb3JTcGxpY2U+KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgYWN0
dWFsU3RhcnQsIGFjdHVhbERlbGV0ZUNvdW50LCBpdGVtQ291bnQsIGxlbmd0aCk7CiAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwpAQCAtMTIxOSwx
NCArMTI0OSwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUo
KTsKLSAgICBkb3VibGUgZG91YmxlTGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlz
T2JqKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBkb3VibGVMZW5ndGg7CisgICAgdWludDY0X3Qg
bGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhp
c09iaikpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogCiAgICAgdW5zaWduZWQgbnJBcmdzID0gY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7CiAg
ICAgaWYgKG5yQXJncykgewotICAgICAgICBpZiAoVU5MSUtFTFkoZG91YmxlTGVuZ3RoICsgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihuckFyZ3MpID4gbWF4U2FmZUludGVnZXIoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IHNo
aWZ0IHRvIG9mZnNldCBncmVhdGVyIHRoYW4gKDIgKiogNTMpIC0gMSJfcyk7CisgICAgICAgIGlm
IChVTkxJS0VMWShsZW5ndGggKyBuckFyZ3MgPiBzdGF0aWNfY2FzdDx1aW50NjRfdD4obWF4U2Fm
ZUludGVnZXIoKSkpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFs
T2JqZWN0LCBzY29wZSwgInVuc2hpZnQgY2Fubm90IHByb2R1Y2UgYW4gYXJyYXkgb2YgbGVuZ3Ro
IGxhcmdlciB0aGFuICgyICoqIDUzKSAtIDEiX3MpOwogICAgICAgICB1bnNoaWZ0PEpTQXJyYXk6
OlNoaWZ0Q291bnRGb3JTaGlmdD4oZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCAwLCAwLCBuckFyZ3Ms
IGxlbmd0aCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1Zh
bHVlKCkpOwogICAgIH0KQEAgLTEyNDIsMTUgKzEyNzEsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiBlbnVtIGNsYXNzIEluZGV4T2ZEaXJlY3Rpb24geyBG
b3J3YXJkLCBCYWNrd2FyZCB9OwogdGVtcGxhdGU8SW5kZXhPZkRpcmVjdGlvbiBkaXJlY3Rpb24+
Ci1BTFdBWVNfSU5MSU5FIEpTVmFsdWUgZmFzdEluZGV4T2YoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgVk0mIHZtLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoLCBKU1ZhbHVl
IHNlYXJjaEVsZW1lbnQsIHVuc2lnbmVkIGluZGV4KQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIGZh
c3RJbmRleE9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNBcnJheSog
YXJyYXksIHVpbnQ2NF90IGxlbmd0aDY0LCBKU1ZhbHVlIHNlYXJjaEVsZW1lbnQsIHVpbnQ2NF90
IGluZGV4NjQpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgYm9vbCBjYW5Eb0Zhc3RQYXRoID0gYXJyYXktPmNhbkRvRmFzdEluZGV4ZWRBY2Nlc3Mo
dm0pCi0gICAgICAgICYmIGFycmF5LT5nZXRBcnJheUxlbmd0aCgpID09IGxlbmd0aDsgLy8gVGhl
IGVmZmVjdHMgaW4gZ2V0dGluZyBgaW5kZXhgIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgbGVuZ3Ro
IG9mIHRoaXMgYXJyYXkuCisgICAgICAgICYmIGFycmF5LT5nZXRBcnJheUxlbmd0aCgpID09IGxl
bmd0aDY0IC8vIFRoZSBlZmZlY3RzIGluIGdldHRpbmcgYGluZGV4YCBjb3VsZCBoYXZlIGNoYW5n
ZWQgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgICAgICAmJiBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oaW5kZXg2NCkgPT0gaW5kZXg2NDsKICAgICBpZiAoIWNhbkRvRmFzdFBhdGgpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKKyAgICB1aW50MzJfdCBsZW5ndGggPSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obGVuZ3RoNjQpOworICAgIHVpbnQzMl90IGluZGV4ID0gc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGluZGV4NjQpOworCiAgICAgc3dpdGNoIChhcnJheS0+aW5kZXhpbmdUeXBlKCkp
IHsKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzogewogICAgICAgICBpZiAoIXNl
YXJjaEVsZW1lbnQuaXNOdW1iZXIoKSkKQEAgLTEzNTEsMTAgKzEzODQsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEVYQ0VQVElPTl9BU1NFUlQoISFz
Y29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVjdCk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlz
T2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xl
bmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgdW5zaWduZWQgaW5k
ZXggPSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLT5hcmd1bWVudCgxKSwgbGVuZ3RoKTsKKyAgICB1aW50NjRfdCBpbmRleCA9IGFyZ3Vt
ZW50Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFy
Z3VtZW50KDEpLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKTsKIApA
QCAtMTM4OSwxMSArMTQyMiwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlz
T2JqZWN0KTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQogICAgICAgICByZXR1cm4g
eyB9OwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCk7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRvTGVu
Z3RoKGdsb2JhbE9iamVjdCwgdGhpc09iamVjdCkpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcigtMSkpOwogCi0gICAgdW5zaWduZWQgaW5kZXggPSBsZW5ndGggLSAxOworICAgIHVp
bnQ2NF90IGluZGV4ID0gbGVuZ3RoIC0gMTsKICAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkgPj0gMikgewogICAgICAgICBKU1ZhbHVlIGZyb21WYWx1ZSA9IGNhbGxGcmFtZS0+dW5j
aGVja2VkQXJndW1lbnQoMSk7CiAgICAgICAgIGRvdWJsZSBmcm9tRG91YmxlID0gZnJvbVZhbHVl
LnRvSW50ZWdlcihnbG9iYWxPYmplY3QpOwpAQCAtMTQwNCw3ICsxNDM3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZnJv
bURvdWJsZSA8IGxlbmd0aCkKLSAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGZyb21Eb3VibGUpOworICAgICAgICAgICAgaW5kZXggPSBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oZnJvbURvdWJsZSk7CiAgICAgfQogCiAgICAgSlNWYWx1ZSBzZWFyY2hFbGVtZW50ID0gY2Fs
bEZyYW1lLT5hcmd1bWVudCgwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JZGVudGlmaWVyLmgJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCwxNCBA
QCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmllciBmcm9t
KFZNJiwgdW5zaWduZWQgeSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZp
ZXIgZnJvbShWTSYsIGludCB5KTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNJiwgZG91
YmxlIHkpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0m
LCBkb3VibGUgeSk7CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZN
JiB2bSwgdWludDY0X3QgeSkKKyAgICB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJf
dD4oeSkgPT0geSkKKyAgICAgICAgICAgIHJldHVybiBmcm9tKHZtLCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4oeSkpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19j
YXN0PGRvdWJsZT4oeSkpID09IHkpOworICAgICAgICByZXR1cm4gZnJvbSh2bSwgc3RhdGljX2Nh
c3Q8ZG91YmxlPih5KSk7CisgICAgfQogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy5pc051bGwoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RyaW5nLmlzRW1wdHkoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50bE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50bE9iamVjdC5jcHAJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsMTEg
KzM4NywxMSBAQCBWZWN0b3I8U3RyaW5nPiBjYW5vbmljYWxpemVMb2NhbGVMaXN0KEpTCiAgICAg
SlNWYWx1ZSBsZW5ndGhQcm9wZXJ0eSA9IGxvY2FsZXNPYmplY3QtPmdldChnbG9iYWxPYmplY3Qs
IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAKLSAgICBkb3VibGUgbGVuZ3RoID0gbGVuZ3RoUHJvcGVy
dHkudG9MZW5ndGgoZ2xvYmFsT2JqZWN0KTsKKyAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4obGVuZ3RoUHJvcGVydHkudG9MZW5ndGgoZ2xvYmFsT2JqZWN0KSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAKICAgICBI
YXNoU2V0PFN0cmluZz4gc2VlblNldDsKLSAgICBmb3IgKGRvdWJsZSBrID0gMDsgayA8IGxlbmd0
aDsgKytrKSB7CisgICAgZm9yICh1aW50NjRfdCBrID0gMDsgayA8IGxlbmd0aDsgKytrKSB7CiAg
ICAgICAgIGJvb2wga1ByZXNlbnQgPSBsb2NhbGVzT2JqZWN0LT5oYXNQcm9wZXJ0eShnbG9iYWxP
YmplY3QsIGspOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBWZWN0b3I8U3Ry
aW5nPigpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9i
amVjdC5jcHAJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsOSArMjM2LDkgQEAgU3Ry
aW5naWZpZXI6OlN0cmluZ2lmaWVyKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgKTsKICAgICAgICAgICAgIGlmIChpc0FycmF5UmVwbGFjZXIp
IHsKICAgICAgICAgICAgICAgICBtX3VzaW5nQXJyYXlSZXBsYWNlciA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCByZXBsYWNl
ck9iamVjdCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVwbGFjZXJPYmplY3QpKTsKICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCApOwotICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgeworICAg
ICAgICAgICAgICAgIGZvciAodWludDY0X3QgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgKytp
bmRleCkgewogICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIG5hbWU7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc0pTQXJyYXkocmVwbGFjZXJPYmplY3QpICYmIHJlcGxhY2VyT2JqZWN0LT5j
YW5HZXRJbmRleFF1aWNrbHkoaW5kZXgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9
IHJlcGxhY2VyT2JqZWN0LT5nZXRJbmRleFF1aWNrbHkoaW5kZXgpOwpAQCAtNDc2LDcgKzQ3Niwx
MyBAQCBib29sIFN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQcm9wCiAgICAgLy8gRmly
c3QgdGltZSB0aHJvdWdoLCBpbml0aWFsaXplLgogICAgIGlmICghbV9pbmRleCkgewogICAgICAg
ICBpZiAobV9pc0FycmF5KSB7Ci0gICAgICAgICAgICBtX3NpemUgPSB0b0xlbmd0aChnbG9iYWxP
YmplY3QsIG1fb2JqZWN0KTsKKyAgICAgICAgICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIG1fb2JqZWN0KSk7CisgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisgICAgICAgICAgICBpZiAo
VU5MSUtFTFkobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkg
eworICAgICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtX3NpemUgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obGVuZ3RoKTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCdbJyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC02NDUsOSArNjUxLDE0IEBAIE5F
VkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKIAogICAgICAgICAgICAgICAg
IEpTT2JqZWN0KiBhcnJheSA9IGFzT2JqZWN0KGluVmFsdWUpOwogICAgICAgICAgICAgICAgIG1h
cmtlZFN0YWNrLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3coYXJyYXkpOwotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKG1fZ2xvYmFsT2JqZWN0LCBhcnJheSk7Cisg
ICAgICAgICAgICAgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRv
TGVuZ3RoKG1fZ2xvYmFsT2JqZWN0LCBhcnJheSkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxl
bmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKG1fZ2xvYmFsT2JqZWN0LCBzY29wZSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAg
ICAgICAgYXJyYXlMZW5ndGhTdGFjay5hcHBlbmQobGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBh
cnJheUxlbmd0aFN0YWNrLmFwcGVuZChzdGF0aWNfY2FzdDx1aW50MzJfdD4obGVuZ3RoKSk7CiAg
ICAgICAgICAgICAgICAgaW5kZXhTdGFjay5hcHBlbmQoMCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBhcnJheVN0YXJ0VmlzaXRNZW1iZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NTgs
NiArMTk1OCwxMyBAQCBib29sIEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShKU0dsb2JhbE9iamVjCiAg
ICAgcmV0dXJuIGhhc1Byb3BlcnR5R2VuZXJpYyhnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5KTsKIH0KIAorYm9v
bCBKU09iamVjdDo6aGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWlu
dDY0X3QgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1l
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpCisgICAgICAgIHJldHVy
biBoYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9wZXJ0
eU5hbWUpKTsKKyAgICByZXR1cm4gaGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVy
Ojpmcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwgcHJvcGVydHlOYW1lKSk7Cit9CisKIGJvb2wgSlNP
YmplY3Q6Omhhc1Byb3BlcnR5R2VuZXJpYyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlw
ZSBpbnRlcm5hbE1ldGhvZFR5cGUpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlTbG90IHNsb3QodGhp
cywgaW50ZXJuYWxNZXRob2RUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDEwICsxNTksMTIgQEAg
cHVibGljOgogCiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUp
IGNvbnN0OwogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCosIHVpbnQ2NF90
IHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZTxib29sIGNoZWNrTnVsbFN0cnVj
dHVyZSA9IGZhbHNlPgogICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIGdldFByb3BlcnR5U2xvdChK
U0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Cisg
ICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxiYWNrV2hl
bk5vRXhjZXB0aW9uPiB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYWxsYmFja1doZW5Ob0V4Y2Vw
dGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5cGUgZ2V0UHJvcGVydHlTbG90KEpTR2xvYmFs
T2JqZWN0KiwgUHJvcGVydHlOYW1lLCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbikgY29uc3Q7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24+IHR5cGVuYW1lIHN0
ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2wsIFByb3BlcnR5U2xvdCYp
Pjo6dHlwZSBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKSBjb25zdDsKIApAQCAtMjA2LDYg
KzIwOCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1ldGhvZFRhYmxl
KHZtKS0+cHV0QnlJbmRleCh0aGlzLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNob3VsZFRocm93KTsKICAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0QnlJbmRl
eElubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCisgICAgeworICAgICAgICBpZiAo
TElLRUxZKHByb3BlcnR5TmFtZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSwgdmFsdWUsIHNob3VsZFRocm93KTsK
KworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBzaG91bGRUaHJvdyk7CisgICAg
ICAgIHJldHVybiBwdXRJbmxpbmVGb3JKU09iamVjdCh0aGlzLCBnbG9iYWxPYmplY3QsIElkZW50
aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNs
b3QpOworICAgIH0KICAgICAgICAgCiAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXRE
aXJlY3QqIG1ldGhvZHM6CiAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29u
c3VsdGVkCkBAIC0yNDYsNiArMjU3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHB1dERp
cmVjdEluZGV4KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgUHV0RGlyZWN0
SW5kZXhMaWtlUHV0RGlyZWN0KTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0
RGlyZWN0SW5kZXgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRl
eE1vZGUgbW9kZSkKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpCisgICAgICAgICAgICByZXR1cm4g
cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVy
dHlOYW1lKSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOworICAgICAgICByZXR1cm4gcHV0RGly
ZWN0KGdldFZNKGdsb2JhbE9iamVjdCksIElkZW50aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2Jq
ZWN0KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIGF0dHJpYnV0ZXMpOworICAgIH0KKwogICAgIC8v
IEEgZ2VuZXJhbGx5IG5vbi10aHJvd2luZyB2ZXJzaW9uIG9mIHB1dERpcmVjdCBhbmQgcHV0RGly
ZWN0SW5kZXguCiAgICAgLy8gSG93ZXZlciwgaXQncyBvbmx5IGd1YXJhbnRlZWQgdG8gbm90IHRo
cm93IGJhc2VkIG9uIHdoYXQgdGhlIHJlY2VpdmVyIGlzLgogICAgIC8vIEZvciBleGFtcGxlLCBp
ZiB0aGUgcmVjZWl2ZXIgaXMgYSBQcm94eU9iamVjdCwgdGhpcyBpcyBub3QgZ3VhcmFudGVlZCwg
c2luY2UKQEAgLTI4OCw2ICszMDYsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQorCisgICAgYm9vbCBjYW5HZXRJbmRleFF1aWNrbHkodWlu
dDY0X3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkoaSA8PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKQorICAgICAgICAgICAgcmV0dXJuIGNhbkdldElu
ZGV4UXVpY2tseShzdGF0aWNfY2FzdDx1aW50MzJfdD4oaSkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQogICAgICAgICAKICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1bnNpZ25l
ZCBpKSBjb25zdAogICAgIHsKQEAgLTM0OCw2ICszNzMsMTQgQEAgcHVibGljOgogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgfQorCisgICAgSlNWYWx1ZSB0cnlHZXRJ
bmRleFF1aWNrbHkodWludDY0X3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihpKSkgPT0gaSk7CisgICAgICAg
IGlmIChMSUtFTFkoaSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKQor
ICAgICAgICAgICAgcmV0dXJuIHRyeUdldEluZGV4UXVpY2tseShzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICAgICAgCiAgICAg
SlNWYWx1ZSBnZXREaXJlY3RJbmRleChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNp
Z25lZCBpKQogICAgIHsKQEAgLTYxMiw2ICs2NDUsNyBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBib29sIGhhc1Byb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1l
KSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc1Byb3BlcnR5KEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBib29sIGhhc1Byb3Bl
cnR5KEpTR2xvYmFsT2JqZWN0KiwgdWludDY0X3QgcHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBi
b29sIGhhc1Byb3BlcnR5R2VuZXJpYyhKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGUpIGNvbnN0OwogICAgIGJvb2wgaGFzUHJvcGVy
dHlHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNPd25Qcm9wZXJ0
eShKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7CkBA
IC02MjAsNiArNjU0LDkgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBi
b29sIGRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSk7CisgICAgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0dsb2JhbE9iamVj
dCosIFByb3BlcnR5TmFtZSk7CisgICAgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0dsb2JhbE9iamVj
dCosIHVpbnQzMl90IHByb3BlcnR5TmFtZSk7CisgICAgYm9vbCBkZWxldGVQcm9wZXJ0eShKU0ds
b2JhbE9iamVjdCosIHVpbnQ2NF90IHByb3BlcnR5TmFtZSk7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpOwogICAgIEpTVmFsdWUgb3JkaW5hcnlU
b1ByaW1pdGl2ZShKU0dsb2JhbE9iamVjdCosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmgJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNiArMTQ5LDEzIEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHkKICAgICB9CiB9CiAKK0FMV0FZ
U19JTkxJTkUgYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQor
eworICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSkpCisgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0eVNsb3QoZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSwgc2xvdCk7CisgICAgcmV0
dXJuIGdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20oZ2xvYmFs
T2JqZWN0LT52bSgpLCBwcm9wZXJ0eU5hbWUpLCBzbG90KTsKK30KKwogQUxXQVlTX0lOTElORSBi
b29sIEpTT2JqZWN0OjpnZXROb25JbmRleFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgLy8gVGhpcyBtZXRob2Qgb25seSBzdXBwb3J0cyBub24taW5kZXggUHJvcGVydHlO
YW1lcy4KQEAgLTUzNSw0ICs1NDIsMzAgQEAgaW5saW5lIENhbGxEYXRhIGdldENvbnN0cnVjdERh
dGEoVk0mIHZtLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2lubGluZSBib29sIEpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQoreworICAgIERlbGV0ZVByb3BlcnR5U2xvdCBzbG90OworICAgIHJl
dHVybiB0aGlzLT5tZXRob2RUYWJsZShnbG9iYWxPYmplY3QtPnZtKCkpLT5kZWxldGVQcm9wZXJ0
eSh0aGlzLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2lubGluZSBi
b29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCB1aW50MzJfdCBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIHRoaXMtPm1ldGhvZFRhYmxl
KGdsb2JhbE9iamVjdC0+dm0oKSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSk7Cit9CisKK2lubGluZSBib29sIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5h
bWUpCit7CisgICAgaWYgKExJS0VMWShwcm9wZXJ0eU5hbWUgPD0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpKSkKKyAgICAgICAgcmV0dXJuIGRlbGV0ZVByb3BlcnR5KGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHByb3BlcnR5TmFtZSkpOworICAgIEFTU0VS
VChzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91YmxlPihwcm9wZXJ0eU5hbWUp
KSA9PSBwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBkZWxldGVQcm9wZXJ0eShnbG9iYWxPYmpl
Y3QsIElkZW50aWZpZXI6OmZyb20oZ2xvYmFsT2JqZWN0LT52bSgpLCBwcm9wZXJ0eU5hbWUpKTsK
K30KKworaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgaWYgKExJS0VMWShw
cm9wZXJ0eU5hbWUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSkKKyAg
ICAgICAgcmV0dXJuIGdldChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9w
ZXJ0eU5hbWUpKTsKKyAgICByZXR1cm4gZ2V0KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bShnbG9iYWxPYmplY3QtPnZtKCksIHByb3BlcnR5TmFtZSkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xv
dC5oCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIEpTVmFs
dWUgZ2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIEpT
VmFsdWUgZ2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNv
bnN0OworICAgIEpTVmFsdWUgZ2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCBwcm9w
ZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTVmFsdWUgZ2V0UHVyZVJlc3VsdCgpIGNvbnN0OwogCiAg
ICAgYm9vbCBpc0NhY2hlYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzVW5zZXQoKSB8fCBtX2NhY2hl
YWJpbGl0eSA9PSBDYWNoaW5nQWxsb3dlZDsgfQpAQCAtNDIyLDcgKzQyMiw3IEBAIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmdldFYKICAgICByZXR1cm4gY3VzdG9tR2V0dGVy
KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVl
IFByb3BlcnR5U2xvdDo6Z2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5z
aWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAorQUxXQVlTX0lOTElORSBKU1ZhbHVlIFByb3BlcnR5
U2xvdDo6Z2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJv
cGVydHlOYW1lKSBjb25zdAogewogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAg
ICAgaWYgKG1fcHJvcGVydHlUeXBlID09IFR5cGVWYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjk2Nyw3ICsyOTY3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
YwogCiAgICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAg
IFN0cmluZyBsYW5ndWFnZSA9IGFycmF5LT5nZXQoZ2xvYmFsT2JqZWN0LCBpKS50b1dURlN0cmlu
ZyhnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChsYW5ndWFnZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wNC0zMCAgU2FhbSBCYXJhdGkg
IDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBXZSBjYW4ndCBjYXN0IHRvTGVuZ3RoIHJl
c3VsdCB0byB1bnNpZ25lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjExMjA1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MjYyNTU2Mj4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMg
KE9PUFMhKS4KKworICAgICAgICAqIGJyaWRnZS9OUF9qc29iamVjdC5jcHA6CisKIDIwMjAtMDQt
MjkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgU2lt
cGxpZnkgY29udGVudHMgY2xpcHBpbmcgbGF5ZXIgZ2VvbWV0cnkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9OUF9qc29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YnJpZGdlL05QX2pzb2JqZWN0LmNwcAkocmV2aXNpb24gMjYwOTE3KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDcgKzMxMSw3
IEBAIGJvb2wgX05QTl9HZXRQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiBvLCAKICAgICAgICAgaWYg
KGktPmlzU3RyaW5nKCkpCiAgICAgICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0KGxleGlj
YWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJGcm9tTlBJZGVudGlmaWVyKGxleGljYWxHbG9iYWxP
YmplY3QsIGktPnN0cmluZygpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9
IG9iai0+aW1wLT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+bnVtYmVyKCkpOworICAgICAg
ICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oaS0+bnVtYmVyKCkpKTsKIAogICAgICAgICBjb252ZXJ0VmFsdWVUb05Q
VmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCByZXN1bHQsIHZhcmlhbnQpOwogICAgICAgICBz
Y29wZS5jbGVhckV4Y2VwdGlvbigpOwpAQCAtMzgzLDcgKzM4Myw3IEBAIGJvb2wgX05QTl9SZW1v
dmVQcm9wZXJ0eShOUFAsIE5QT2JqZWN0KiAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW9iai0+
aW1wLT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5udW1iZXIoKSkpIHsKKyAg
ICAgICAgICAgIGlmICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PHVpbnQzMl90PihpLT5udW1iZXIoKSkpKSB7CiAgICAgICAgICAgICAgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9CkBAIC00MjIsNyArNDIyLDcgQEAgYm9vbCBfTlBOX0hhc1Byb3BlcnR5KE5Q
UCwgTlBPYmplY3QqIG8sIAogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQog
Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9i
YWxPYmplY3QsIGktPm51bWJlcigpKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+
aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGkt
Pm51bWJlcigpKSk7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MDkxNykKKysrIFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MjAtMDQtMzAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgV2Ug
Y2FuJ3QgY2FzdCB0b0xlbmd0aCByZXN1bHQgdG8gdW5zaWduZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTIwNQorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNjI2MjU1NjI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6Omhhc1Byb3BlcnR5KToKKyAgICAgICAgKFdlYktp
dDo6TlBKU09iamVjdDo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0
OjpyZW1vdmVQcm9wZXJ0eSk6CisKIDIwMjAtMDQtMjkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgV0tOYXZpZ2F0aW9uRGVsZWdhdGUg
QVBJIHNob3VsZEFsbG93RGVwcmVjYXRlZFRMUwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTlBKU09iamVjdC5jcHAJKHJldmlz
aW9uIDI2MDkxNykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBl
L05QSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgYm9vbCBO
UEpTT2JqZWN0OjpoYXNQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmIChpZGVudGlmaWVyUmVw
LT5pc1N0cmluZygpKQogICAgICAgICByZXN1bHQgPSBtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAobGV4aWNhbEds
b2JhbE9iamVjdCwgaWRlbnRpZmllclJlcCkpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0g
bV9qc09iamVjdC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJl
cC0+bnVtYmVyKCkpOworICAgICAgICByZXN1bHQgPSBtX2pzT2JqZWN0LT5oYXNQcm9wZXJ0eShs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaWRlbnRpZmllclJlcC0+
bnVtYmVyKCkpKTsKIAogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTE3OSw3ICsxNzksNyBAQCBib29sIE5QSlNPYmplY3Q6OmdldFByb3BlcnR5KE5Q
SWRlbnRpZmllCiAgICAgaWYgKGlkZW50aWZpZXJSZXAtPmlzU3RyaW5nKCkpCiAgICAgICAgIGpz
UmVzdWx0ID0gbV9qc09iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJG
cm9tSWRlbnRpZmllclJlcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlmaWVyUmVwKSk7CiAg
ICAgZWxzZQotICAgICAgICBqc1Jlc3VsdCA9IG1fanNPYmplY3QtPmdldChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBpZGVudGlmaWVyUmVwLT5udW1iZXIoKSk7CisgICAgICAgIGpzUmVzdWx0ID0gbV9q
c09iamVjdC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
ZGVudGlmaWVyUmVwLT5udW1iZXIoKSkpOwogICAgIAogICAgIG1fb2JqZWN0TWFwLT5jb252ZXJ0
SlNWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIGpzUmVzdWx0LCAqcmVzdWx0
KTsKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwpAQCAtMjMxLDcgKzIzMSw3IEBAIGJvb2wg
TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkoTlBJZGVudGkKIAogICAgICAgICBKU0NlbGw6OmRl
bGV0ZVByb3BlcnR5KG1fanNPYmplY3QuZ2V0KCksIGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50
aWZpZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9qc09iamVjdC0+aGFzUHJvcGVy
dHkobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpKSB7CisgICAg
ICAgIGlmICghbV9qc09iamVjdC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGlkZW50aWZpZXJSZXAtPm51bWJlcigpKSkpIHsKICAgICAgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MDkxNykKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDIwLTA0LTMwICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlIGNhbid0IGNhc3QgdG9MZW5n
dGggcmVzdWx0IHRvIHVuc2lnbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTEyMDUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYyNjI1NTYyPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4
cGVjdGF0aW9uczoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMv
MTUuNC40LjE0LTMtMjguanM6CisgICAgICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50ZXN0
KToKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE0
LTMtMjkuanM6CisgICAgICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50ZXN0KToKKyAgICAg
ICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE1LTMtMjUuanM6
CisgICAgICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50ZXN0KToKKyAgICAgICAgKiBpZXRl
c3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE1LTMtMjguanM6CisgICAgICAg
IChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50ZXN0KToKKwogMjAyMC0wNC0yOSAgWmFsYW4gQnVq
dGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFNraXAgZmFzdC90ZXh0L3Rl
eHQtaW5kZW50LWluc2lkZS1mbG9hdC5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9UZXN0RXhwZWN0
YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlz
aW9uIDI2MDkxNykKKysrIExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NTIsMTIgKzE3NTIsMTQgQEAgd2Via2l0Lm9yZy9iLzE3MzUwNiAgaWV0ZXN0Y2Vu
dGVyL0phdmFzYwogd2Via2l0Lm9yZy9iLzE3MzUwNiAgaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQv
MTUuNC40LjE0LTMtNy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTczNTA2ICBpZXRl
c3RjZW50ZXIvSmF2YXNjcmlwdC8xNS40LjQuMTQtMy04Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtp
dC5vcmcvYi8xNzM1MDYgIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjQuNC4xNS0zLTEyLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xNzM1MDYgIGlldGVzdGNlbnRlci9KYXZhc2Ny
aXB0LzE1LjQuNC4xNS0zLTI1Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNzM1MDYg
IGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjQuNC4xNS0zLTcuaHRtbCBbIEZhaWx1cmUgXQog
CiB3ZWJraXQub3JnL2IvMTczNTA2ICBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS40LjQuMTUt
My0xNC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMTczNTA2ICBpZXRlc3RjZW50ZXIvSmF2
YXNjcmlwdC8xNS40LjQuMTUtMy04Lmh0bWwgWyBTa2lwIF0KIAorIyBUaGlzIHRha2VzIHRvbyBs
b25nIHNpbmNlIGl0J3Mgc2VhcmNoaW5nIHRocm91Z2ggYW4gYXJyYXkgd2l0aCB+NCBiaWxsaW9u
IGVsZW1lbnRzLgoraWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuNC40LjE1LTMtMjkuaHRtbCBb
IFNraXAgXQorCiAjIElEQlZlcnNpb25DaGFuZ2VFdmVudCB0ZXN0cyBuZWVkIHRvIGJlIHJld3Jp
dHRlbiB0byB1c2UgZXZlbnQgY29uc3RydWN0b3JzIGluc3RlYWQgb2YgY3JlYXRlRXZlbnQsCiAj
IGFmdGVyIHdlIGltcGxlbWVudCB0aGUgSURCVmVyc2lvbkNoYW5nZUV2ZW50IGNvbnN0cnVjdG9y
Lgogd2Via2l0Lm9yZy9iLzE0NTM5MCBzdG9yYWdlL2luZGV4ZWRkYi9ldmVudHMuaHRtbCBbIEZh
aWx1cmUgXQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENh
c2VzLzE1LjQuNC4xNC0zLTI4LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNl
bnRlci9KYXZhc2NyaXB0L1Rlc3RDYXNlcy8xNS40LjQuMTQtMy0yOC5qcwkocmV2aXNpb24gMjYw
OTE3KQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2VzLzE1
LjQuNC4xNC0zLTI4LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIEVTNUhhcm5l
c3MucmVnaXN0ZXJUZXN0KHsKICAgICAgICAgICAgIGxlbmd0aDogNDI5NDk2NzI5NgogICAgICAg
ICB9OwogCi0gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKG9iaiwg
dGFyZ2V0T2JqKSA9PT0gLTE7CisgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhP
Zi5jYWxsKG9iaiwgdGFyZ2V0T2JqKSA9PT0gMDsKICAgICB9LAogCiAgICAgcHJlY29uZGl0aW9u
OiBmdW5jdGlvbiBwcmVyZXEoKSB7CkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2
YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE0LTMtMjkuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNC0zLTI5Lmpz
CShyZXZpc2lvbiAyNjA5MTcpCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlw
dC9UZXN0Q2FzZXMvMTUuNC40LjE0LTMtMjkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2
LDcgQEAgRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgICAgICB9OwogCiAgICAgICAgIHJl
dHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKG9iaiwgdGFyZ2V0T2JqKSA9PT0gMCAm
JgotICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChvYmosIDQyOTQ5Njcy
OTcpID09PSAtMTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwob2Jq
LCA0Mjk0OTY3Mjk3KSA9PT0gMTsKICAgICB9LAogCiAgICAgcHJlY29uZGl0aW9uOiBmdW5jdGlv
biBwcmVyZXEoKSB7CkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9U
ZXN0Q2FzZXMvMTUuNC40LjE1LTMtMjUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0
ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNS0zLTI1LmpzCShyZXZpc2lv
biAyNjA5MTcpCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2Fz
ZXMvMTUuNC40LjE1LTMtMjUuanMJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgRVM1
SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKIAogICAgICAgICB2YXIgb2JqID0geyAxOiB0cnVlLCAy
OiBmYWxzZSwgbGVuZ3RoOiAtNDI5NDk2NzI5NC41IH07CiAKLSAgICAgICAgcmV0dXJuIEFycmF5
LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKG9iaiwgdHJ1ZSkgPT09IDEgJiYKKyAgICAgICAg
cmV0dXJuIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKG9iaiwgdHJ1ZSkgPT09IC0x
ICYmCiAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChvYmosIGZh
bHNlKSA9PT0gLTE7CiAgICAgfSwKIApJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0ph
dmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNS0zLTI4LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0L1Rlc3RDYXNlcy8xNS40LjQuMTUtMy0yOC5q
cwkocmV2aXNpb24gMjYwOTE3KQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3Jp
cHQvVGVzdENhc2VzLzE1LjQuNC4xNS0zLTI4LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIEVTNUhhcm5lc3MucmVnaXN0ZXJUZXN0KCB7CiAgICAgICAgICAgICBsZW5ndGg6IDQy
OTQ5NjcyOTYKICAgICAgICAgfTsKIAotICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmxh
c3RJbmRleE9mLmNhbGwob2JqLCB0YXJnZXRPYmopID09PSAtMTsgLy92ZXJpZnkgbGVuZ3RoIGlz
IDAgZmluYWxseQorICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNh
bGwob2JqLCB0YXJnZXRPYmopID09PSA0Mjk0OTY3Mjk1OwogICAgIH0sCiAKICAgICBwcmVjb25k
aXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsK
</data>
<flag name="review"
          id="413517"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398164</attachid>
            <date>2020-04-30 23:30:49 -0700</date>
            <delta_ts>2020-04-30 23:46:47 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>73458</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjA5MTcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI0IEBACisyMDIwLTA0LTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIGNhbid0IGNhc3QgdG9MZW5ndGggcmVzdWx0IHRvIHVuc2lnbmVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTEyMDUK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYyNjI1NTYyPgorCisgICAgICAgIFJldmlld2VkIGJ5
IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiBzdHJlc3MvYXJyYXktbGVuZ3RoLWNhbnQtZ2V0
LWNhc3RlZC10by11bnNpZ25lZC5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAg
ICAodGVzdEFycmF5UG9wKToKKyAgICAgICAgKHRlc3RBcnJheVB1c2gpOgorICAgICAgICAodGVz
dEFycmF5UmV2ZXJzZSk6CisgICAgICAgICh0ZXN0QXJyYXlTcGxpY2UpOgorICAgICAgICAodGVz
dEFycmF5VW5zaGlmdCk6CisgICAgICAgICh0ZXN0QXJyYXlMYXN0SW5kZXhPZik6CisgICAgICAg
IChzaG91bGRUaHJvd1R5cGVFcnJvcik6CisgICAgICAgICh0ZXN0SlNPTlN0cmluZ2lmeS5nZXQg
bGV0KToKKyAgICAgICAgKHRlc3RKU09OU3RyaW5naWZ5KToKKyAgICAgICAgKiB0ZXN0MjYyL2V4
cGVjdGF0aW9ucy55YW1sOgorCiAyMDIwLTA0LTI5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2Fs
ZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBBc3luY0Zyb21TeW5jSXRlcmF0b3IgbWV0aG9kcyBz
aG91bGQgbm90IHBhc3MgYWJzZW50IHZhbHVlcwpJbmRleDogSlNUZXN0cy9zdHJlc3MvYXJyYXkt
bGVuZ3RoLWNhbnQtZ2V0LWNhc3RlZC10by11bnNpZ25lZC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9hcnJheS1sZW5ndGgtY2FudC1nZXQtY2FzdGVkLXRvLXVuc2lnbmVkLmpzCShu
b25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2FycmF5LWxlbmd0aC1jYW50LWdldC1jYXN0
ZWQtdG8tdW5zaWduZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDIgQEAKK2Z1bmN0
aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9
CisKK2NvbnN0IGJvdW5kYXJ5ID0gMioqMzI7IC8vIFVJTlRfTUFYICsgMQorY29uc3QgbWF4U2Fm
ZUludGVnZXIgPSAyKio1MyAtIDE7CitmdW5jdGlvbiB0ZXN0QXJyYXlQb3AoKSB7CisgICAgbGV0
IG9iaiA9IHsKKyAgICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogYm91bmRhcnkgCisgICAg
fTsKKyAgICBBcnJheS5wcm90b3R5cGUucG9wLmNhbGwob2JqKTsKKyAgICBhc3NlcnQob2JqWzBd
ID09PSA0Mik7CisgICAgYXNzZXJ0KG9iai5sZW5ndGggPT09IGJvdW5kYXJ5IC0gMSk7Cit9Cit0
ZXN0QXJyYXlQb3AoKTsKKworZnVuY3Rpb24gdGVzdEFycmF5UHVzaCgpIHsKKyAgICBsZXQgb2Jq
ID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBib3VuZGFyeQorICAgIH07Cisg
ICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChvYmosIDEwKTsKKyAgICBhc3NlcnQob2JqWzBd
ID09PSA0Mik7CisgICAgYXNzZXJ0KG9iai5sZW5ndGggPT09IGJvdW5kYXJ5ICsgMSk7Cit9Cit0
ZXN0QXJyYXlQdXNoKCk7CisKKy8vIE5PVEU6IHRoaXMgdGFrZXMgdmVyeSBsb25nIHNvIHdlIGRv
bid0IHJ1biBpdC4uLgorZnVuY3Rpb24gdGVzdEFycmF5UmV2ZXJzZSgpIHsKKyAgICBsZXQgb2Jq
ID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgW2JvdW5kYXJ5IC0gMV06IDAsCisgICAgICAg
IGxlbmd0aDogYm91bmRhcnkKKyAgICB9OworICAgIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNh
bGwob2JqKTsKKyAgICBhc3NlcnQob2JqWzBdID09PSAwKTsKKyAgICBhc3NlcnQob2JqW2JvdW5k
YXJ5IC0gMV0gPT09IDQyKTsKK30KKy8vdGVzdEFycmF5UmV2ZXJzZSgpOworCisvLyBOT1RFOiB0
aGlzIHRha2VzIHZlcnkgbG9uZyBzbyB3ZSBkb24ndCBydW4gaXQuLi4KK2Z1bmN0aW9uIHRlc3RB
cnJheVNoaWZ0KCkgeworICAgIGxldCBvYmogPSB7CisgICAgICAgIDA6IDQyLAorICAgICAgICBs
ZW5ndGg6IGJvdW5kYXJ5CisgICAgfTsKKyAgICBsZXQgZWxlbSA9IEFycmF5LnByb3RvdHlwZS5z
aGlmdC5jYWxsKG9iaik7CisgICAgYXNzZXJ0KGVsZW0gPT09IDQyKTsKKyAgICBhc3NlcnQob2Jq
Lmxlbmd0aCA9PT0gYm91bmRhcnkgLSAxKTsKKyAgICBhc3NlcnQob2JqWzBdID09PSB1bmRlZmlu
ZWQpOworfQorLy90ZXN0QXJyYXlTaGlmdCgpOworCitmdW5jdGlvbiB0ZXN0QXJyYXlTbGljZSgp
IHsKKyAgICBsZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgMTogNDMsCisgICAg
ICAgIGxlbmd0aDogYm91bmRhcnkKKyAgICB9OworICAgIGxldCBhcnIgPSBBcnJheS5wcm90b3R5
cGUuc2xpY2UuY2FsbChvYmosIDAsIDIpOworICAgIGFzc2VydChhcnJbMF0gPT09IDQyKTsKKyAg
ICBhc3NlcnQoYXJyWzFdID09PSA0Myk7CisgICAgYXNzZXJ0KGFyci5sZW5ndGggPT09IDIpOwor
fQordGVzdEFycmF5U2xpY2UoKTsKKworZnVuY3Rpb24gdGVzdEFycmF5U3BsaWNlKCkgeworICAg
IGxldCBvYmogPSB7CisgICAgICAgIDA6IDQyLAorICAgICAgICAxOiA0MywKKyAgICAgICAgbGVu
Z3RoOiBib3VuZGFyeQorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKG9i
aiwgYm91bmRhcnktMSwgMCwgMSwgMiwgMyk7CisgICAgYXNzZXJ0KG9iai5sZW5ndGggPT09IGJv
dW5kYXJ5ICsgMyk7CisgICAgYXNzZXJ0KG9ialtib3VuZGFyeS0xXSA9PT0gMSk7CisgICAgYXNz
ZXJ0KG9ialtib3VuZGFyeV0gPT09IDIpOworICAgIGFzc2VydChvYmpbYm91bmRhcnkrMV0gPT09
IDMpOworfQordGVzdEFycmF5U3BsaWNlKCk7CisKKy8vIE5PVEU6IHRoaXMgdGFrZXMgdmVyeSBs
b25nIHNvIHdlIGRvbid0IHJ1biBpdC4uLgorZnVuY3Rpb24gdGVzdEFycmF5VW5zaGlmdCgpIHsK
KyAgICBsZXQgb2JqID0geworICAgICAgICAxOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBib3VuZGFy
eQorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbChvYmosIDQzKTsKKyAg
ICBhc3NlcnQob2JqWzBdID09PSA0Myk7CisgICAgYXNzZXJ0KG9ialsyXSA9PT0gNDIpOworICAg
IGFzc2VydChvYmoubGVuZ3RoID09PSBib3VuZGFyeSArIDEpOworfQorLy90ZXN0QXJyYXlVbnNo
aWZ0KCk7CisKK2Z1bmN0aW9uIHRlc3RBcnJheUluZGV4T2YoKSB7CisgICAgbGV0IG9iaiA9IHsK
KyAgICAgICAgMzA6IDQyLAorICAgICAgICBsZW5ndGg6IGJvdW5kYXJ5CisgICAgfTsKKyAgICBs
ZXQgciA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwob2JqLCA0Mik7CisgICAgYXNzZXJ0
KHIgPT09IDMwKTsKK30KK3Rlc3RBcnJheUluZGV4T2YoKTsKKworZnVuY3Rpb24gdGVzdEFycmF5
TGFzdEluZGV4T2YoKSB7CisgICAgbGV0IG9iaiA9IHsKKyAgICAgICAgW2JvdW5kYXJ5IC0gMzBd
OiA0MiwKKyAgICAgICAgbGVuZ3RoOiBib3VuZGFyeQorICAgIH07CisgICAgbGV0IHIgPSBBcnJh
eS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChvYmosIDQyKTsKKyAgICBhc3NlcnQociA9PT0g
Ym91bmRhcnkgLSAzMCk7Cit9Cit0ZXN0QXJyYXlMYXN0SW5kZXhPZigpOworCitmdW5jdGlvbiBz
aG91bGRUaHJvd1R5cGVFcnJvcihmKSB7CisgICAgbGV0IG9rID0gZmFsc2U7CisgICAgdHJ5IHsK
KyAgICAgICAgZigpOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBvayA9IGUgaW5zdGFuY2Vv
ZiBUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoImxhcmdlciB0aGFuICgyICoqIDUzKSAt
IDEiKSA+PSAwOworICAgIH0KKyAgICBhc3NlcnQob2spOworfQorCitzaG91bGRUaHJvd1R5cGVF
cnJvcihmdW5jdGlvbigpIHsKKyAgICBsZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAg
ICAgbGVuZ3RoOiBtYXhTYWZlSW50ZWdlcgorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnB1
c2guY2FsbChvYmosIDEwKTsKK30pOworCitzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5jdGlvbigp
IHsKKyAgICBsZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBtYXhT
YWZlSW50ZWdlciAtIDEKKyAgICB9OworICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwob2Jq
LCAxMCwgMjApOworfSk7CitzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5jdGlvbigpIHsKKyAgICBs
ZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBtYXhTYWZlSW50ZWdl
cgorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbChvYmosIDEwKTsKK30p
Oworc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHsKKyAg
ICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogbWF4U2FmZUludGVnZXIgLSAxCisgICAgfTsK
KyAgICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKG9iaiwgMTAsIDIwKTsKK30pOworc2hv
dWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHsKKyAgICAgICAg
MDogNDIsCisgICAgICAgIGxlbmd0aDogbWF4U2FmZUludGVnZXIKKyAgICB9OworICAgIEFycmF5
LnByb3RvdHlwZS5zcGxpY2UuY2FsbChvYmosIG9iai5sZW5ndGggLSAxMCwgMCwgMTApOworfSk7
CitzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5jdGlvbigpIHsKKyAgICBsZXQgb2JqID0geworICAg
ICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBtYXhTYWZlSW50ZWdlciAtIDEKKyAgICB9Owor
ICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChvYmosIG9iai5sZW5ndGggLSAxMCwgMCwg
MTAsIDIwKTsKK30pOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7CisgICAgbGV0
IG9iaiA9IHsKKyAgICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogbWF4U2FmZUludGVnZXIg
LSAxCisgICAgfTsKKyAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwob2JqLCBvYmoubGVu
Z3RoIC0gMTAsIDEsIDEwLCAyMCwgMzApOworfSk7CitzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5j
dGlvbigpIHsKKyAgICBsZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3Ro
OiBtYXhTYWZlSW50ZWdlcgorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxs
KG9iaiwgb2JqLmxlbmd0aCAtIDEwLCAxLCAxMCwgMjApOworfSk7CisKK2Z1bmN0aW9uIHRlc3RK
U09OU3RyaW5naWZ5KCkgeworICAgIGxldCBhcnIgPSBbMSwyLDNdOworICAgIGxldCBwID0gbmV3
IFByb3h5KGFyciwgeworICAgICAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgeworICAg
ICAgICAgICAgaWYgKHByb3AgPT09ICJsZW5ndGgiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJvdW5kYXJ5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0
KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpOworICAgICAgICB9CisgICAgfSk7CisgICAgbGV0IG9r
ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkocCk7CisgICAgfSBj
YXRjaChlKSB7CisgICAgICAgIG9rID0gZS5tZXNzYWdlLmluZGV4T2YoIk91dCBvZiBtZW1vcnki
KSA+PSAwOworICAgIH0KKyAgICBhc3NlcnQob2spOworfQordGVzdEpTT05TdHJpbmdpZnkoKTsK
SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2FycmF5LXJldmVyc2UtcHJveHkuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvYXJyYXktcmV2ZXJzZS1wcm94eS5qcwkocmV2aXNpb24gMjYwOTE3
KQorKysgSlNUZXN0cy9zdHJlc3MvYXJyYXktcmV2ZXJzZS1wcm94eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDYgKzEzMywxMCBAQCB0ZXN0KGZ1bmN0aW9uKCkgewogICAgICAgICB9CiAgICAg
fTsKIAorCisgICAgLy8gV2hlbiBib3RoIHN0YXJ0IGFuZCBlbmQgcHJvcGVydGllcyBkb24ndCBl
eGlzdCwgc3BlYyBzYXlzIG5vdCB0bworICAgIC8vIGNhbGwgdGhlIGRlbGV0ZSBob29rLgorCiAg
ICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CiAgICAgbGV0IHRocmV3
ID0gZmFsc2U7CiAgICAgdHJ5IHsKQEAgLTE0MSw3ICsxNDUsNyBAQCB0ZXN0KGZ1bmN0aW9uKCkg
ewogICAgICAgICB0aHJldyA9IHRydWU7CiAgICAgICAgIGFzc2VydChlID09PSBlcnJvcik7CiAg
ICAgfQotICAgIGFzc2VydCh0aHJldyk7CisgICAgYXNzZXJ0KCF0aHJldyk7CiB9KTsKIAogdGVz
dChmdW5jdGlvbigpIHsKSW5kZXg6IEpTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwJKHJldmlzaW9uIDI2MDkxNykKKysr
IEpTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbAkod29ya2luZyBjb3B5KQpAQCAtODYsMjYgKzg2
LDYgQEAgc2tpcDoKIAogICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4Njc0OQogICAgIC0gdGVzdC9idWlsdC1pbnMvUmVnRXhwL3Byb3BlcnR5LWVzY2FwZXMv
Y2hhcmFjdGVyLWNsYXNzLmpzCi0gICAgCi0gICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg1NDk1Ci0gICAgLSB0ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5
cGUvc2xpY2UvUzE1LjQuNC4xMF9BM19UMS5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJyYXkv
cHJvdG90eXBlL3NsaWNlL1MxNS40LjQuMTBfQTNfVDIuanMKLSAgICAtIHRlc3QvYnVpbHQtaW5z
L0FycmF5L3Byb3RvdHlwZS9zbGljZS9jcmVhdGUtbm9uLWFycmF5LWludmFsaWQtbGVuLmpzCi0g
ICAgLSB0ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvc2xpY2UvY3JlYXRlLXByb3hpZWQt
YXJyYXktaW52YWxpZC1sZW4uanMKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlw
ZS9zcGxpY2UvY3JlYXRlLXNwZWNpZXMtdW5kZWYtaW52YWxpZC1sZW4uanMKLSAgICAtIHRlc3Qv
YnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zcGxpY2UvY3JlYXRlLW5vbi1hcnJheS1pbnZhbGlk
LWxlbi5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3NwbGljZS9jcmVh
dGUtc3BlY2llcy11bmRlZi1pbnZhbGlkLWxlbi5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJy
YXkvcHJvdG90eXBlL3NwbGljZS9sZW5ndGgtbmVhci1pbnRlZ2VyLWxpbWl0LWdyb3ctYXJyYXku
anMKLQotICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTYy
NQotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL2luZGV4T2YvMTUuNC40LjE0
LTMtMjguanMKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9pbmRleE9mLzE1
LjQuNC4xNC0zLTI5LmpzCi0KLSAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQ0NTYKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9sYXN0
SW5kZXhPZi8xNS40LjQuMTUtMy0yOC5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJv
dG90eXBlL3BvcC9TMTUuNC40LjZfQTNfVDIuanMKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0FycmF5
L3Byb3RvdHlwZS9wdXNoL1MxNS40LjQuN19BNF9UMS5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMv
QXJyYXkvcHJvdG90eXBlL3B1c2gvbGVuZ3RoLW5lYXItaW50ZWdlci1saW1pdC5qcwogCiAgICAg
IyBbW093blByb3BlcnR5S2V5c11dIG9yZGVyIHdpdGggbGFyZ2UgaW50ZWdlciBpbmRleCBrZXlz
IHVwIHRvIDIgKiogNTMgLSAxCiAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg2NjkxCkluZGV4OiBKU1Rlc3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSlNUZXN0cy90ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sCShyZXZpc2lv
biAyNjA5MTcpCisrKyBKU1Rlc3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWwJKHdvcmtpbmcg
Y29weSkKQEAgLTY0Miw2MyArNjQyLDkgQEAgdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBl
L2NvbmNhdC9hcgogdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL2NvbmNhdC9pcy1jb25j
YXQtc3ByZWFkYWJsZS1nZXQtb3JkZXIuanM6CiAgIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4
cGVjdGVkIFtpc0NvbmNhdFNwcmVhZGFibGUsIGNvbnN0cnVjdG9yLCBpc0NvbmNhdFNwcmVhZGFi
bGVdIGFuZCBbY29uc3RydWN0b3IsIGlzQ29uY2F0U3ByZWFkYWJsZV0gdG8gaGF2ZSB0aGUgc2Ft
ZSBjb250ZW50cy4gJwogICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW2lz
Q29uY2F0U3ByZWFkYWJsZSwgY29uc3RydWN0b3IsIGlzQ29uY2F0U3ByZWFkYWJsZV0gYW5kIFtj
b25zdHJ1Y3RvciwgaXNDb25jYXRTcHJlYWRhYmxlXSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRz
LiAnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvaW5kZXhPZi9sZW5ndGgtbmVhci1p
bnRlZ2VyLWxpbWl0LmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBTYW1l
VmFsdWUowqstMcK7LCDCqzkwMDcxOTkyNTQ3NDA5OTDCuykgdG8gYmUgdHJ1ZScKLSAgc3RyaWN0
IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFNhbWVWYWx1ZSjCqy0xwrssIMKrOTAwNzE5
OTI1NDc0MDk5MMK7KSB0byBiZSB0cnVlJwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBl
L3BvcC9TMTUuNC40LjZfQTJfVDIuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6ICM0OiB2
YXIgb2JqID0ge307IG9iai5sZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IG9iai5w
b3AgPSBBcnJheS5wcm90b3R5cGUucG9wOyBvYmoucG9wKCk7IG9iai5sZW5ndGggPT09IDkwMDcx
OTkyNTQ3NDA5OTAuIEFjdHVhbDogNDI5NDk2NzI5NCcKLSAgc3RyaWN0IG1vZGU6ICdUZXN0MjYy
RXJyb3I6ICM0OiB2YXIgb2JqID0ge307IG9iai5sZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5G
SU5JVFk7IG9iai5wb3AgPSBBcnJheS5wcm90b3R5cGUucG9wOyBvYmoucG9wKCk7IG9iai5sZW5n
dGggPT09IDkwMDcxOTkyNTQ3NDA5OTAuIEFjdHVhbDogNDI5NDk2NzI5NCcKLXRlc3QvYnVpbHQt
aW5zL0FycmF5L3Byb3RvdHlwZS9wb3AvUzE1LjQuNC42X0EzX1QxLmpzOgotICBkZWZhdWx0OiAn
VGVzdDI2MkVycm9yOiAjMTogdmFyIG9iaiA9IHt9OyBvYmoucG9wID0gQXJyYXkucHJvdG90eXBl
LnBvcDsgb2JqWzBdID0gIngiOyBvYmpbNDI5NDk2NzI5NV0gPSAieSI7IG9iai5sZW5ndGggPSA0
Mjk0OTY3Mjk2OyBvYmoucG9wKCkgPT09ICJ5Ii4gQWN0dWFsOiB1bmRlZmluZWQnCi0gIHN0cmlj
dCBtb2RlOiAnVGVzdDI2MkVycm9yOiAjMTogdmFyIG9iaiA9IHt9OyBvYmoucG9wID0gQXJyYXku
cHJvdG90eXBlLnBvcDsgb2JqWzBdID0gIngiOyBvYmpbNDI5NDk2NzI5NV0gPSAieSI7IG9iai5s
ZW5ndGggPSA0Mjk0OTY3Mjk2OyBvYmoucG9wKCkgPT09ICJ5Ii4gQWN0dWFsOiB1bmRlZmluZWQn
Ci10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvcG9wL2NsYW1wcy10by1pbnRlZ2VyLWxp
bWl0LmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBMZW5ndGggaXMgMioqNTMgLSAxIEV4
cGVjdGVkIFNhbWVWYWx1ZSjCqzQyOTQ5NjcyOTTCuywgwqs5MDA3MTk5MjU0NzQwOTkwwrspIHRv
IGJlIHRydWUnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBMZW5ndGggaXMgMioqNTMg
LSAxIEV4cGVjdGVkIFNhbWVWYWx1ZSjCqzQyOTQ5NjcyOTTCuywgwqs5MDA3MTk5MjU0NzQwOTkw
wrspIHRvIGJlIHRydWUnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvcG9wL2xlbmd0
aC1uZWFyLWludGVnZXItbGltaXQuanM6Ci0gIGRlZmF1bHQ6ICJUZXN0MjYyRXJyb3I6IGFycmF5
TGlrZVsnOTAwNzE5OTI1NDc0MDk5MCddIGlzIHJldHVybmVkIGZyb20gcG9wKCkgRXhwZWN0ZWQg
U2FtZVZhbHVlKMKrdW5kZWZpbmVkwrssIMKrOTAwNzE5OTI1NDc0MDk5MMK7KSB0byBiZSB0cnVl
IgotICBzdHJpY3QgbW9kZTogIlRlc3QyNjJFcnJvcjogYXJyYXlMaWtlWyc5MDA3MTk5MjU0NzQw
OTkwJ10gaXMgcmV0dXJuZWQgZnJvbSBwb3AoKSBFeHBlY3RlZCBTYW1lVmFsdWUowqt1bmRlZmlu
ZWTCuywgwqs5MDA3MTk5MjU0NzQwOTkwwrspIHRvIGJlIHRydWUiCi10ZXN0L2J1aWx0LWlucy9B
cnJheS9wcm90b3R5cGUvcHVzaC9TMTUuNC40LjdfQTJfVDIuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0
MjYyRXJyb3I6IEV4cGVjdGVkIGEgVHlwZUVycm9yIHRvIGJlIHRocm93biBidXQgbm8gZXhjZXB0
aW9uIHdhcyB0aHJvd24gYXQgYWxsJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhw
ZWN0ZWQgYSBUeXBlRXJyb3IgdG8gYmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93
biBhdCBhbGwnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvcHVzaC9jbGFtcHMtdG8t
aW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIq
KjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0
MDk5McK7KSB0byBiZSB0cnVlJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3Ro
IGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5
OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBl
L3B1c2gvdGhyb3dzLWlmLWludGVnZXItbGltaXQtZXhjZWVkZWQuanM6Ci0gIGRlZmF1bHQ6ICdU
ZXN0MjYyRXJyb3I6IExlbmd0aCBpcyAyKio1MyAtIDEgRXhwZWN0ZWQgYSBUeXBlRXJyb3IgdG8g
YmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93biBhdCBhbGwnCi0gIHN0cmljdCBt
b2RlOiAnVGVzdDI2MkVycm9yOiBMZW5ndGggaXMgMioqNTMgLSAxIEV4cGVjdGVkIGEgVHlwZUVy
cm9yIHRvIGJlIHRocm93biBidXQgbm8gZXhjZXB0aW9uIHdhcyB0aHJvd24gYXQgYWxsJwotdGVz
dC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3JldmVyc2UvbGVuZ3RoLWV4Y2VlZGluZy1pbnRl
Z2VyLWxpbWl0LXdpdGgtcHJveHkuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVj
dGVkIFtHZXQ6bGVuZ3RoLCBIYXM6MCwgR2V0OjAsIEhhczo0Mjk0OTY3Mjk0LCBEZWxldGU6MCwg
U2V0OjQyOTQ5NjcyOTQsIEdldE93blByb3BlcnR5RGVzY3JpcHRvcjo0Mjk0OTY3Mjk0LCBEZWZp
bmVQcm9wZXJ0eTo0Mjk0OTY3Mjk0LCBIYXM6MSwgSGFzOjQyOTQ5NjcyOTMsIERlbGV0ZToxLCBE
ZWxldGU6NDI5NDk2NzI5MywgSGFzOjIsIEdldDoyLCBIYXM6NDI5NDk2NzI5MiwgRGVsZXRlOjIs
IFNldDo0Mjk0OTY3MjkyLCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6NDI5NDk2NzI5MiwgRGVm
aW5lUHJvcGVydHk6NDI5NDk2NzI5MiwgSGFzOjMsIEhhczo0Mjk0OTY3MjkxLCBEZWxldGU6Mywg
RGVsZXRlOjQyOTQ5NjcyOTEsIEhhczo0LCBHZXQ6NF0gYW5kIFtHZXQ6bGVuZ3RoLCBIYXM6MCwg
R2V0OjAsIEhhczo5MDA3MTk5MjU0NzQwOTkwLCBHZXQ6OTAwNzE5OTI1NDc0MDk5MCwgU2V0OjAs
IEdldE93blByb3BlcnR5RGVzY3JpcHRvcjowLCBEZWZpbmVQcm9wZXJ0eTowLCBTZXQ6OTAwNzE5
OTI1NDc0MDk5MCwgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOjkwMDcxOTkyNTQ3NDA5OTAsIERl
ZmluZVByb3BlcnR5OjkwMDcxOTkyNTQ3NDA5OTAsIEhhczoxLCBIYXM6OTAwNzE5OTI1NDc0MDk4
OSwgSGFzOjIsIEdldDoyLCBIYXM6OTAwNzE5OTI1NDc0MDk4OCwgRGVsZXRlOjIsIFNldDo5MDA3
MTk5MjU0NzQwOTg4LCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6OTAwNzE5OTI1NDc0MDk4OCwg
RGVmaW5lUHJvcGVydHk6OTAwNzE5OTI1NDc0MDk4OCwgSGFzOjMsIEhhczo5MDA3MTk5MjU0NzQw
OTg3LCBHZXQ6OTAwNzE5OTI1NDc0MDk4NywgU2V0OjMsIEdldE93blByb3BlcnR5RGVzY3JpcHRv
cjozLCBEZWZpbmVQcm9wZXJ0eTozLCBEZWxldGU6OTAwNzE5OTI1NDc0MDk4NywgSGFzOjQsIEdl
dDo0XSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiAnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2
MkVycm9yOiBFeHBlY3RlZCBbR2V0Omxlbmd0aCwgSGFzOjAsIEdldDowLCBIYXM6NDI5NDk2NzI5
NCwgRGVsZXRlOjAsIFNldDo0Mjk0OTY3Mjk0LCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6NDI5
NDk2NzI5NCwgRGVmaW5lUHJvcGVydHk6NDI5NDk2NzI5NCwgSGFzOjEsIEhhczo0Mjk0OTY3Mjkz
LCBEZWxldGU6MSwgRGVsZXRlOjQyOTQ5NjcyOTMsIEhhczoyLCBHZXQ6MiwgSGFzOjQyOTQ5Njcy
OTIsIERlbGV0ZToyLCBTZXQ6NDI5NDk2NzI5MiwgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOjQy
OTQ5NjcyOTIsIERlZmluZVByb3BlcnR5OjQyOTQ5NjcyOTIsIEhhczozLCBIYXM6NDI5NDk2NzI5
MSwgRGVsZXRlOjMsIERlbGV0ZTo0Mjk0OTY3MjkxLCBIYXM6NCwgR2V0OjRdIGFuZCBbR2V0Omxl
bmd0aCwgSGFzOjAsIEdldDowLCBIYXM6OTAwNzE5OTI1NDc0MDk5MCwgR2V0OjkwMDcxOTkyNTQ3
NDA5OTAsIFNldDowLCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6MCwgRGVmaW5lUHJvcGVydHk6
MCwgU2V0OjkwMDcxOTkyNTQ3NDA5OTAsIEdldE93blByb3BlcnR5RGVzY3JpcHRvcjo5MDA3MTk5
MjU0NzQwOTkwLCBEZWZpbmVQcm9wZXJ0eTo5MDA3MTk5MjU0NzQwOTkwLCBIYXM6MSwgSGFzOjkw
MDcxOTkyNTQ3NDA5ODksIEhhczoyLCBHZXQ6MiwgSGFzOjkwMDcxOTkyNTQ3NDA5ODgsIERlbGV0
ZToyLCBTZXQ6OTAwNzE5OTI1NDc0MDk4OCwgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOjkwMDcx
OTkyNTQ3NDA5ODgsIERlZmluZVByb3BlcnR5OjkwMDcxOTkyNTQ3NDA5ODgsIEhhczozLCBIYXM6
OTAwNzE5OTI1NDc0MDk4NywgR2V0OjkwMDcxOTkyNTQ3NDA5ODcsIFNldDozLCBHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3I6MywgRGVmaW5lUHJvcGVydHk6MywgRGVsZXRlOjkwMDcxOTkyNTQ3NDA5
ODcsIEhhczo0LCBHZXQ6NF0gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gJwotdGVzdC9idWls
dC1pbnMvQXJyYXkvcHJvdG90eXBlL3NsaWNlL2xlbmd0aC1leGNlZWRpbmctaW50ZWdlci1saW1p
dC1wcm94aWVkLWFycmF5LmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBb
XSBhbmQgWzkwMDcxOTkyNTQ3NDA5ODksIDkwMDcxOTkyNTQ3NDA5OTBdIHRvIGhhdmUgdGhlIHNh
bWUgY29udGVudHMuIHNsaWNlKDkwMDcxOTkyNTQ3NDA5ODkpJwotICBzdHJpY3QgbW9kZTogJ1Rl
c3QyNjJFcnJvcjogRXhwZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQwOTg5LCA5MDA3MTk5MjU0
NzQwOTkwXSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiBzbGljZSg5MDA3MTk5MjU0NzQwOTg5
KScKLXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zbGljZS9sZW5ndGgtZXhjZWVkaW5n
LWludGVnZXItbGltaXQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtd
IGFuZCBbOTAwNzE5OTI1NDc0MDk4OSwgOTAwNzE5OTI1NDc0MDk5MF0gdG8gaGF2ZSB0aGUgc2Ft
ZSBjb250ZW50cy4gc2xpY2UoOTAwNzE5OTI1NDc0MDk4OSknCi0gIHN0cmljdCBtb2RlOiAnVGVz
dDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQgWzkwMDcxOTkyNTQ3NDA5ODksIDkwMDcxOTkyNTQ3
NDA5OTBdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuIHNsaWNlKDkwMDcxOTkyNTQ3NDA5ODkp
JwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3NwbGljZS9TMTUuNC40LjEyX0EzX1Qx
LmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiAjMTogdmFyIG9iaiA9IHt9OyBvYmouc3Bs
aWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsgb2JqWzBdID0gIngiOyBvYmpbNDI5NDk2NzI5
NV0gPSAieSI7IG9iai5sZW5ndGggPSA0Mjk0OTY3Mjk2OyB2YXIgYXJyID0gb2JqLnNwbGljZSg0
Mjk0OTY3Mjk1LDEpOyBhcnIubGVuZ3RoID09PSAxLiBBY3R1YWw6IDAnCi0gIHN0cmljdCBtb2Rl
OiAnVGVzdDI2MkVycm9yOiAjMTogdmFyIG9iaiA9IHt9OyBvYmouc3BsaWNlID0gQXJyYXkucHJv
dG90eXBlLnNwbGljZTsgb2JqWzBdID0gIngiOyBvYmpbNDI5NDk2NzI5NV0gPSAieSI7IG9iai5s
ZW5ndGggPSA0Mjk0OTY3Mjk2OyB2YXIgYXJyID0gb2JqLnNwbGljZSg0Mjk0OTY3Mjk1LDEpOyBh
cnIubGVuZ3RoID09PSAxLiBBY3R1YWw6IDAnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5
cGUvc3BsaWNlL2NsYW1wcy1sZW5ndGgtdG8taW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVsdDog
J1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0
Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotICBzdHJpY3Qg
bW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFs
dWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotdGVz
dC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3NwbGljZS9jcmVhdGUtc3BlY2llcy1sZW5ndGgt
ZXhjZWVkaW5nLWludGVnZXItbGltaXQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IGxl
bmd0aCBhbmQgZGVsZXRlQ291bnQgd2VyZSBjb3JyZWN0bHkgY2xhbXBlZCB0byAyXjUzLTEgRXhw
ZWN0ZWQgU2FtZVZhbHVlKMKrNDI5NDk2NzI5NcK7LCDCqzkwMDcxOTkyNTQ3NDA5OTHCuykgdG8g
YmUgdHJ1ZScKLSAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IGxlbmd0aCBhbmQgZGVsZXRl
Q291bnQgd2VyZSBjb3JyZWN0bHkgY2xhbXBlZCB0byAyXjUzLTEgRXhwZWN0ZWQgU2FtZVZhbHVl
KMKrNDI5NDk2NzI5NcK7LCDCqzkwMDcxOTkyNTQ3NDA5OTHCuykgdG8gYmUgdHJ1ZScKLXRlc3Qv
YnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zcGxpY2UvbGVuZ3RoLWFuZC1kZWxldGVDb3VudC1l
eGNlZWRpbmctaW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVsdDogIlRlc3QyNjJFcnJvcjogRXhw
ZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQwOTg5LCA5MDA3MTk5MjU0NzQwOTkwXSB0byBoYXZl
IHRoZSBzYW1lIGNvbnRlbnRzLiBhcnJheUxpa2VbJzkwMDcxOTkyNTQ3NDA5ODknXSBhbmQgYXJy
YXlMaWtlWyc5MDA3MTk5MjU0NzQwOTkwJ10gYXJlIHJlbW92ZWQiCi0gIHN0cmljdCBtb2RlOiAi
VGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQgWzkwMDcxOTkyNTQ3NDA5ODksIDkwMDcxOTky
NTQ3NDA5OTBdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuIGFycmF5TGlrZVsnOTAwNzE5OTI1
NDc0MDk4OSddIGFuZCBhcnJheUxpa2VbJzkwMDcxOTkyNTQ3NDA5OTAnXSBhcmUgcmVtb3ZlZCIK
LXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zcGxpY2UvbGVuZ3RoLWV4Y2VlZGluZy1p
bnRlZ2VyLWxpbWl0LXNocmluay1hcnJheS5qczoKLSAgZGVmYXVsdDogIlRlc3QyNjJFcnJvcjog
RXhwZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQwOTg3XSB0byBoYXZlIHRoZSBzYW1lIGNvbnRl
bnRzLiBhcnJheUxpa2VbJzkwMDcxOTkyNTQ3NDA5ODcnXSBpcyByZW1vdmVkIgotICBzdHJpY3Qg
bW9kZTogIlRlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQwOTg3XSB0
byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiBhcnJheUxpa2VbJzkwMDcxOTkyNTQ3NDA5ODcnXSBp
cyByZW1vdmVkIgogdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3NwbGljZS9wcm9wZXJ0
eS10cmFwcy1vcmRlci13aXRoLXNwZWNpZXMuanM6CiAgIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6
IEV4cGVjdGVkIFtkZWZpbmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydHksIHNldCwgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yLCBkZWZpbmVQcm9wZXJ0eV0gYW5kIFtkZWZpbmVQcm9wZXJ0eSwgZGVm
aW5lUHJvcGVydHldIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuICcKICAgc3RyaWN0IG1vZGU6
ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtkZWZpbmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydHks
IHNldCwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBkZWZpbmVQcm9wZXJ0eV0gYW5kIFtkZWZp
bmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydHldIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuICcK
LXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zcGxpY2UvdGhyb3dzLWlmLWludGVnZXIt
bGltaXQtZXhjZWVkZWQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IExlbmd0aCBpcyAy
Kio1MyAtIDEgRXhwZWN0ZWQgYSBUeXBlRXJyb3IgYnV0IGdvdCBhIEVycm9yJwotICBzdHJpY3Qg
bW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBhIFR5cGVF
cnJvciBidXQgZ290IGEgRXJyb3InCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvdW5z
aGlmdC9jbGFtcHMtdG8taW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJv
cjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrss
IMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotICBzdHJpY3QgbW9kZTogJ1Rlc3Qy
NjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3
Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwogdGVzdC9idWlsdC1pbnMv
QXJyYXlCdWZmZXIvcHJvdG90eXBlL2J5dGVMZW5ndGgvZGV0YWNoZWQtYnVmZmVyLmpzOgogICBk
ZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBhIFR5cGVFcnJvciB0byBiZSB0aHJvd24g
YnV0IG5vIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGF0IGFsbCcKICAgc3RyaWN0IG1vZGU6ICdUZXN0
MjYyRXJyb3I6IEV4cGVjdGVkIGEgVHlwZUVycm9yIHRvIGJlIHRocm93biBidXQgbm8gZXhjZXB0
aW9uIHdhcyB0aHJvd24gYXQgYWxsJwpAQCAtMzEwNCwxOCArMzA1MCw2IEBAIHRlc3QvbGFuZ3Vh
Z2UvZ2xvYmFsLWNvZGUvc2NyaXB0LWRlY2wtZnUKIHRlc3QvbGFuZ3VhZ2UvZ2xvYmFsLWNvZGUv
c2NyaXB0LWRlY2wtdmFyLWVyci5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0
ZWQgYSBUeXBlRXJyb3IgdG8gYmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93biBh
dCBhbGwnCiAgIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBhIFR5cGVFcnJv
ciB0byBiZSB0aHJvd24gYnV0IG5vIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGF0IGFsbCcKLXRlc3Qv
bGFuZ3VhZ2UvaWRlbnRpZmllcnMvcGFydC11bmljb2RlLTEzLjAuMC1lc2NhcGVkLmpzOgotICBk
ZWZhdWx0OiAiU3ludGF4RXJyb3I6IEludmFsaWQgdW5pY29kZSBlc2NhcGUgaW4gaWRlbnRpZmll
cjogJ19cXHUwQjU1JyIKLSAgc3RyaWN0IG1vZGU6ICJTeW50YXhFcnJvcjogSW52YWxpZCB1bmlj
b2RlIGVzY2FwZSBpbiBpZGVudGlmaWVyOiAnX1xcdTBCNTUnIgotdGVzdC9sYW5ndWFnZS9pZGVu
dGlmaWVycy9wYXJ0LXVuaWNvZGUtMTMuMC4wLmpzOgotICBkZWZhdWx0OiAiU3ludGF4RXJyb3I6
IEludmFsaWQgY2hhcmFjdGVyICdcXHUwYjU1JyIKLSAgc3RyaWN0IG1vZGU6ICJTeW50YXhFcnJv
cjogSW52YWxpZCBjaGFyYWN0ZXIgJ1xcdTBiNTUnIgotdGVzdC9sYW5ndWFnZS9pZGVudGlmaWVy
cy9zdGFydC11bmljb2RlLTEzLjAuMC1lc2NhcGVkLmpzOgotICBkZWZhdWx0OiAiU3ludGF4RXJy
b3I6IEludmFsaWQgdW5pY29kZSBlc2NhcGUgaW4gaWRlbnRpZmllcjogJ1xcdTA4QkUnIgotICBz
dHJpY3QgbW9kZTogIlN5bnRheEVycm9yOiBJbnZhbGlkIHVuaWNvZGUgZXNjYXBlIGluIGlkZW50
aWZpZXI6ICdcXHUwOEJFJyIKLXRlc3QvbGFuZ3VhZ2UvaWRlbnRpZmllcnMvc3RhcnQtdW5pY29k
ZS0xMy4wLjAuanM6Ci0gIGRlZmF1bHQ6ICJTeW50YXhFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIg
J1xcdTA4YmUnIgotICBzdHJpY3QgbW9kZTogIlN5bnRheEVycm9yOiBJbnZhbGlkIGNoYXJhY3Rl
ciAnXFx1MDhiZSciCiB0ZXN0L2xhbmd1YWdlL2xpdGVyYWxzL3JlZ2V4cC91LWFzdHJhbC1jaGFy
LWNsYXNzLWludmVydC5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgU2Ft
ZVZhbHVlKMKr77+9wrssIMKrbnVsbMK7KSB0byBiZSB0cnVlJwogICBzdHJpY3QgbW9kZTogJ1Rl
c3QyNjJFcnJvcjogRXhwZWN0ZWQgU2FtZVZhbHVlKMKr77+9wrssIMKrbnVsbMK7KSB0byBiZSB0
cnVlJwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjA5MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NzQgQEAKKzIwMjAtMDQtMzAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAg
ICAgICAgV2UgY2FuJ3QgY2FzdCB0b0xlbmd0aCByZXN1bHQgdG8gdW5zaWduZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTIwNQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjI2MjU1NjI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1
enVraS4KKworICAgICAgICB0b0xlbmd0aCwgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLCByZXR1cm5z
IGEgNTMtYml0IGludGVnZXIuIEluIG91cgorICAgICAgICBpbXBsZW1lbnRhdGlvbiwgd2UgcmV0
dXJuIGEgZG91YmxlLiBIb3dldmVyLCB0aGVyZSB3ZXJlIG1hbnkgY2FsbHNpdGVzCisgICAgICAg
IHRoYXQgZGlkIHNvbWV0aGluZyBsaWtlOgorICAgICAgICBgYGAKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdG9MZW5ndGgob2JqKTsKKyAgICAgICAgYGBgCisgICAgICAgIAorICAgICAgICBU
aGlzIGlzIGJhZCBmb3IgYSBmZXcgcmVhc29uczoKKyAgICAgICAgLSBDYXN0aW5nIHRvIHVuc2ln
bmVkIGZyb20gZG91YmxlIGlzIHVuZGVmaW5lZCBiZWhhdmlvciB3aGVuIHRoZSBpbnRlZ2VyCisg
ICAgICAgIGlzIGdyZWF0ZXIgdGhhbiBVSU5UX01BWC4gSW4gcHJhY3RpY2UsIHRoaXMgbWVhbnMg
dGhhdCB3ZSdkIGhhdmUgZGlmZmVyZW50CisgICAgICAgIGVuZ2luZSBiZWhhdmlvciBkZXBlbmRp
bmcgb24gd2hhdCBhcmNoaXRlY3R1cmUgd2UnZCBiZSBydW5uaW5nIG9uLiBGb3IKKyAgICAgICAg
ZXhhbXBsZSwgaWYgdGhlIGxlbmd0aCB3ZXJlIFVJTlRfTUFYICsgMSwgb24geDg2LCB3ZSdkIHRy
ZWF0IHRoZQorICAgICAgICBsZW5ndGggYXMgemVyby4gT24gYXJtNjQsIHdlJ2QgdHJlYXQgaXQg
YXMgVUlOVF9NQVguIEJvdGggYXJlIHdyb25nLgorICAgICAgICAtIFdlIHdlcmVuJ3Qgc3BlYyBj
b21wbGlhbnQuIFdlIHdlcmUganVzdCBpZ25vcmluZyB0aGF0IHRoZXNlIG51bWJlcnMgY291bGQK
KyAgICAgICAgYmUgNTMtYml0IGludGVnZXJzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBhZGRyZXNzZXMgZWFjaCBiYWQgdXNlIG9mIHRoZSB1bmRlZmluZWQgYmVoYXZpb3IsIGFuZCBi
eSBkb2luZyBzbywKKyAgICAgICAgbWFrZXMgdXMgbW9yZSBzcGVjIGNvbXBsaWFudC4KKworICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoSlND
OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjphcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFy
dE9yRW5kKToKKyAgICAgICAgKEpTQzo6c2hpZnQpOgorICAgICAgICAoSlNDOjp1bnNoaWZ0KToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jUG9wKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQdXNo
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNTaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2xpY2Up
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jVW5TaGlmdCk6CisgICAgICAgIChKU0M6OmZhc3RJbmRleE9mKToKKyAgICAg
ICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90
b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmg6CisgICAg
ICAgIChKU0M6OklkZW50aWZpZXI6OmZyb20pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OmNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpTdHJp
bmdpZmllcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6CisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpoYXNQcm9wZXJ0eSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0QnlJbmRleElubGluZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJ
bmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJbmRleFF1aWNrbHkgY29uc3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dHJ5R2V0SW5kZXhRdWlja2x5IGNvbnN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldCBjb25zdCk6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpnZXRWYWx1
ZSBjb25zdCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uU2V0VXNlclByZWZlcnJlZExhbmd1YWdlcyk6CisKIDIwMjAtMDQtMjkgIEFsZXhl
eSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIEFzeW5jRnJvbVN5
bmNJdGVyYXRvciBtZXRob2RzIHNob3VsZCBub3QgcGFzcyBhYnNlbnQgdmFsdWVzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2
MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyOCw3ICs4MjgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvCiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAg
ICAgIG9iamVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIGluZGV4LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJbmRl
eElubGluZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKQEAgLTg0NCw3ICs4NDQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvCiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIG9i
amVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIGluZGV4LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxp
bmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW5kZXgpLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IApAQCAtODYyLDcgKzg2Miw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3Vi
bGVCeVYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91
YmxlLCB2YWx1ZSk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0
LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgaW5kZXgsIGpzVmFsdWUsIHRydWUpOwor
ICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oaW5kZXgpLCBqc1ZhbHVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKQEAgLTg4MCw3ICs4ODAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0RG91YmxlQnlWCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgdmFsdWUpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAg
IG9iamVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIGluZGV4LCBqc1ZhbHVlLCBm
YWxzZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIGpzVmFsdWUsIGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTg5OCw3ICs4OTgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1Zh
bHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpOwogCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCBqc1ZhbHVl
LCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJl
Y3RJbmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIGpzVmFs
dWUsIDAsIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC05MTUsNyArOTE1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERv
dWJsZUJ5VgogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNE
b3VibGUsIHZhbHVlKTsKIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIG9iamVjdC0+
cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCwganNWYWx1ZSk7CisgICAgICAgIG9i
amVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
aW5kZXgpLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAwMyw3ICsx
MDAzLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZQogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAg
aWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxP
YmplY3QsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgMCwgUHV0RGlyZWN0
SW5kZXhTaG91bGRUaHJvdyk7CisgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxEaXJlCiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgo
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW5kZXgpLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2
MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5NzksNyArMTk3OSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpT
VmFsdWUgZ2V0QnlWYWwoSlMKICAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9m
Qm91bmRzKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAg
ICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgICAg
ICAgICAgaWYgKG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpKQorICAgICAgICAgICAgaWYg
KG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpOwogCiAgICAg
ICAgICAgICBib29sIHNraXBNYXJraW5nT3V0T2ZCb3VuZHMgPSBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgQXJyYXlQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEFycmF5IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0UHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgaW5kZXgpCitzdGF0aWMgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGdldFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBvYmplY3QsIHVpbnQ2NF90IGluZGV4KQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0xNzksMTIgKzE3OSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dExl
bmd0aChKU0dsCiAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXRMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBKU09iamVj
dCogb2JqLCB1bnNpZ25lZCB2YWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TGVu
Z3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNPYmplY3QqIG9iaiwg
dWludDY0X3QgdmFsdWUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IHRydWU7CiAg
ICAgaWYgKGlzSlNBcnJheShvYmopKSB7Ci0gICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+
c2V0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdmFsdWUsIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkgPT0gdmFsdWUpOworICAgICAgICBq
c0Nhc3Q8SlNBcnJheSo+KG9iaiktPnNldExlbmd0aChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PHVpbnQzMl90Pih2YWx1ZSksIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFzZSgpOwpAQCAt
MjkxLDcgKzI5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RF
bXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0ciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxl
bmd0aCkpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5k
ZXhGcm9tU3RhcnRPckVuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHVuZGVmaW5lZFZhbHVlID0gMCkKK3N0YXRp
YyBpbmxpbmUgdWludDY0X3QgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCB1aW50NjRfdCBsZW5ndGgs
IHVpbnQ2NF90IHVuZGVmaW5lZFZhbHVlID0gMCkKIHsKICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWQoKSkKICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFZhbHVlOwpAQCAtMjk5LDkgKzMwMCw5IEBA
IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW4KICAgICBkb3VibGUgaW5k
ZXhEb3VibGUgPSB2YWx1ZS50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoaW5kZXhE
b3VibGUgPCAwKSB7CiAgICAgICAgIGluZGV4RG91YmxlICs9IGxlbmd0aDsKLSAgICAgICAgcmV0
dXJuIGluZGV4RG91YmxlIDwgMCA/IDAgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXhEb3Vi
bGUpOworICAgICAgICByZXR1cm4gaW5kZXhEb3VibGUgPCAwID8gMCA6IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihpbmRleERvdWJsZSk7CiAgICAgfQotICAgIHJldHVybiBpbmRleERvdWJsZSA+IGxl
bmd0aCA/IGxlbmd0aCA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleERvdWJsZSk7CisgICAg
cmV0dXJuIGluZGV4RG91YmxlID4gbGVuZ3RoID8gbGVuZ3RoIDogc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGluZGV4RG91YmxlKTsKIH0KIAogLy8gVGhlIHNoaWZ0L3Vuc2hpZnQgZnVuY3Rpb24gaW1w
bGVtZW50IHRoZSBzaGlmdC91bnNoaWZ0IGJlaGF2aW91ciByZXF1aXJlZApAQCAtMzIwLDMzICsz
MjEsMzYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBhcmd1bWVudENsYW1wZWRJbgogLy8gbXVz
dCBiZSBpbnRyb2R1Y2luZyBuZXcgdmFsdWVzLgogCiB0ZW1wbGF0ZTxKU0FycmF5OjpTaGlmdENv
dW50TW9kZSBzaGlmdENvdW50TW9kZT4KLXZvaWQgc2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3Vy
cmVudENvdW50LCB1bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBz
aGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iaiwgdWlu
dDY0X3QgaGVhZGVyLCB1aW50NjRfdCBjdXJyZW50Q291bnQsIHVpbnQ2NF90IHJlc3VsdENvdW50
LCB1aW50NjRfdCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFJFTEVBU0Vf
QVNTRVJUKGN1cnJlbnRDb3VudCA+IHJlc3VsdENvdW50KTsKLSAgICB1bnNpZ25lZCBjb3VudCA9
IGN1cnJlbnRDb3VudCAtIHJlc3VsdENvdW50OworICAgIHVpbnQ2NF90IGNvdW50ID0gY3VycmVu
dENvdW50IC0gcmVzdWx0Q291bnQ7CiAKICAgICBSRUxFQVNFX0FTU0VSVChoZWFkZXIgPD0gbGVu
Z3RoKTsKICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50Q291bnQgPD0gKGxlbmd0aCAtIGhlYWRl
cikpOwogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGFzQXJyYXkodGhpc09iaik7Ci0gICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0g
bGVuZ3RoICYmIGFycmF5LT5zaGlmdENvdW50PHNoaWZ0Q291bnRNb2RlPihnbG9iYWxPYmplY3Qs
IGhlYWRlciwgY291bnQpKQorICAgICAgICB1aW50MzJfdCBoZWFkZXIzMiA9IGhlYWRlcjsKKyAg
ICAgICAgQVNTRVJUKGhlYWRlcjMyID09IGhlYWRlcik7CisgICAgICAgIGlmIChhcnJheS0+bGVu
Z3RoKCkgPT0gbGVuZ3RoICYmIGFycmF5LT5zaGlmdENvdW50PHNoaWZ0Q291bnRNb2RlPihnbG9i
YWxPYmplY3QsIGhlYWRlcjMyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGhlYWRlciA9IGhlYWRlcjMyOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgayA9IGhlYWRl
cjsgayA8IGxlbmd0aCAtIGN1cnJlbnRDb3VudDsgKytrKSB7Ci0gICAgICAgIHVuc2lnbmVkIGZy
b20gPSBrICsgY3VycmVudENvdW50OwotICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRD
b3VudDsKKyAgICBmb3IgKHVpbnQ2NF90IGsgPSBoZWFkZXI7IGsgPCBsZW5ndGggLSBjdXJyZW50
Q291bnQ7ICsraykgeworICAgICAgICB1aW50NjRfdCBmcm9tID0gayArIGN1cnJlbnRDb3VudDsK
KyAgICAgICAgdWludDY0X3QgdG8gPSBrICsgcmVzdWx0Q291bnQ7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBnZXRQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHRoaXNPYmosIGZyb20pOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBpZiAodmFsdWUp
IHsKICAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCB0
bywgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRo
aXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGds
b2JhbE9iamVjdCwgdG8pOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+ZGVs
ZXRlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB0byk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9E
ZWxldGVQcm9wZXJ0eUVycm9yKTsKQEAgLTM1NCw4ICszNTgsOCBAQCB2b2lkIHNoaWZ0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoOyBrID4gbGVuZ3RoIC0gY291bnQ7IC0taykg
ewotICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIGsgLSAxKTsKKyAgICBmb3Ig
KHVpbnQ2NF90IGsgPSBsZW5ndGg7IGsgPiBsZW5ndGggLSBjb3VudDsgLS1rKSB7CisgICAgICAg
IGJvb2wgc3VjY2VzcyA9IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgayAt
IDEpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBAIC0zNjUsMjQgKzM2OSwy
OSBAQCB2b2lkIHNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiB9CiAKIHRlbXBs
YXRlPEpTQXJyYXk6OlNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgotdm9pZCB1bnNoaWZ0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25l
ZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVu
c2lnbmVkIGxlbmd0aCkKK3ZvaWQgdW5zaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogdGhpc09iaiwgdWludDY0X3QgaGVhZGVyLCB1aW50NjRfdCBjdXJyZW50Q291
bnQsIHVpbnQ2NF90IHJlc3VsdENvdW50LCB1aW50NjRfdCBsZW5ndGgpCiB7CisgICAgQVNTRVJU
KGhlYWRlciA8PSBtYXhTYWZlSW50ZWdlcigpKTsKKyAgICBBU1NFUlQoY3VycmVudENvdW50IDw9
IG1heFNhZmVJbnRlZ2VyKCkpOworICAgIEFTU0VSVChyZXN1bHRDb3VudCA8PSBtYXhTYWZlSW50
ZWdlcigpKTsKKyAgICBBU1NFUlQobGVuZ3RoIDw9IG1heFNhZmVJbnRlZ2VyKCkpOworCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdENvdW50ID4gY3VycmVu
dENvdW50KTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IHJlc3VsdENvdW50IC0gY3VycmVudENvdW50
OworICAgIHVpbnQ2NF90IGNvdW50ID0gcmVzdWx0Q291bnQgLSBjdXJyZW50Q291bnQ7CiAKICAg
ICBSRUxFQVNFX0FTU0VSVChoZWFkZXIgPD0gbGVuZ3RoKTsKICAgICBSRUxFQVNFX0FTU0VSVChj
dXJyZW50Q291bnQgPD0gKGxlbmd0aCAtIGhlYWRlcikpOwogCi0gICAgLy8gR3VhcmQgYWdhaW5z
dCBvdmVyZmxvdy4KLSAgICBpZiAoY291bnQgPiBVSU5UX01BWCAtIGxlbmd0aCkgewotICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7CisgICAgICAgIC8v
IFNwZWMgc2F5cyBpZiB3ZSB3b3VsZCBwcm9kdWNlIGFuIGFycmF5IG9mIHRoaXMgc2l6ZSwgd2Ug
bXVzdCB0aHJvdyBhIHJhbmdlIGVycm9yLgorICAgICAgICBpZiAoY291bnQgKyBsZW5ndGggPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpIHsKKyAgICAgICAgICAgIHRocm93
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBMZW5ndGhFeGNlZWRlZFRoZU1heGltdW1B
cnJheUxlbmd0aEVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgaWYgKGFycmF5
LT5sZW5ndGgoKSA9PSBsZW5ndGgpIHsKICAgICAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGFycmF5
LT51bnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGdsb2JhbE9iamVjdCwgaGVhZGVyLCBjb3Vu
dCk7CkBAIC0zOTIsMTYgKzQwMSwxNiBAQCB2b2lkIHVuc2hpZnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSBsZW5n
dGggLSBjdXJyZW50Q291bnQ7IGsgPiBoZWFkZXI7IC0taykgewotICAgICAgICB1bnNpZ25lZCBm
cm9tID0gayArIGN1cnJlbnRDb3VudCAtIDE7Ci0gICAgICAgIHVuc2lnbmVkIHRvID0gayArIHJl
c3VsdENvdW50IC0gMTsKKyAgICBmb3IgKHVpbnQ2NF90IGsgPSBsZW5ndGggLSBjdXJyZW50Q291
bnQ7IGsgPiBoZWFkZXI7IC0taykgeworICAgICAgICB1aW50NjRfdCBmcm9tID0gayArIGN1cnJl
bnRDb3VudCAtIDE7CisgICAgICAgIHVpbnQ2NF90IHRvID0gayArIHJlc3VsdENvdW50IC0gMTsK
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdGhpc09i
aiwgZnJvbSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGlu
ZShnbG9iYWxPYmplY3QsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5
SW5kZXgodGhpc09iaiwgZ2xvYmFsT2JqZWN0LCB0byk7CisgICAgICAgICAgICBib29sIHN1Y2Nl
c3MgPSB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHRvKTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoIXN1Y2Nlc3MpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKQEAgLTY4NSw4
ICs2OTQsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwor
ICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQog
CiAgICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tl
ci5lYXJseVJldHVyblZhbHVlKCkpOwpAQCAtODY2LDcgKzg3OSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUu
ZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCiAg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRv
TGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaikpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYg
KGxlbmd0aCA9PSAwKSB7CkBAIC04NzUsMTcgKzg4OCwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqLT5nZXQo
Z2xvYmFsT2JqZWN0LCBsZW5ndGggLSAxKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RU
YWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIGxl
bmd0aCAtIDEpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKLSAg
ICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAgfQotICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICBwdXRMZW5ndGgoZ2xvYmFsT2JqZWN0LCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVu
Z3RoIC0gMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBhdXRv
IHBlcmZvcm1Qb3AgPSBbJl0gKGF1dG8gaW5kZXgsIEpTVmFsdWUgaW5kZXhWYWx1ZSkgeworICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRoaXNPYmotPmdldChnbG9iYWxPYmplY3QsIGluZGV4KTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVj
dCwgaW5kZXgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgeworICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0
eUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICB9
CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcHV0TGVuZ3RoKGdsb2JhbE9iamVj
dCwgdm0sIHRoaXNPYmosIGluZGV4VmFsdWUpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgfTsKKworICAgIHN0YXRpY19hc3NlcnQoTUFYX0FSUkFZX0lOREVY
ICsgMSA+IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgaWYgKExJS0VMWShsZW5ndGggPD0gTUFYX0FS
UkFZX0lOREVYICsgMSkpCisgICAgICAgIHJldHVybiBwZXJmb3JtUG9wKHN0YXRpY19jYXN0PHVp
bnQzMl90PihsZW5ndGggLSAxKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0
aCAtIDEpKSk7CisgICAgcmV0dXJuIHBlcmZvcm1Qb3AoSWRlbnRpZmllcjo6ZnJvbSh2bSwgbGVu
Z3RoIC0gMSksIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1B1c2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MDUsMTggKzkyNSwxOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNj
b3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmop
KQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopOworICAgIHVpbnQ2NF90IGxlbmd0aCA9
IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICB1
bnNpZ25lZCBhcmdDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwogCi0gICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsK
LSAgICAgICAgLy8gQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3c7IHdoZXJlIHNhZmUgd2UgY2Fu
IGRvIGEgZmFzdCBwdXQgYnkgaW5kZXguCi0gICAgICAgIGlmIChsZW5ndGggKyBuID49IGxlbmd0
aCkKLSAgICAgICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlz
T2JqLCBnbG9iYWxPYmplY3QsIGxlbmd0aCArIG4sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQobiksIHRydWUpOworICAgIGlmIChVTkxJS0VMWShsZW5ndGggKyBhcmdDb3VudCA+IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihtYXhTYWZlSW50ZWdlcigpKSkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJwdXNoIGNhbm5vdCBwcm9kdWNlIGFu
IGFycmF5IG9mIGxlbmd0aCBsYXJnZXIgdGhhbiAoMiAqKiA1MykgLSAxIl9zKTsKKworICAgIGZv
ciAodW5zaWduZWQgbiA9IDA7IG4gPCBhcmdDb3VudDsgbisrKSB7CisgICAgICAgIGlmIChMSUtF
TFkobGVuZ3RoICsgbiA8PSBNQVhfQVJSQVlfSU5ERVgpKQorICAgICAgICAgICAgdGhpc09iai0+
bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXNPYmosIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCArIG4pLCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KG4pLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdCh0aGlzT2JqKTsKLSAgICAgICAgICAgIGF1dG8gc3RyaW5nID0gSlNWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvV1RGU3Ry
aW5nKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgc3RyaW5nKTsKKyAgICAgICAgICAgIElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgbGVuZ3RoICsgbik7CiAg
ICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzT2JqLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChuKSwgc2xv
dCk7CiAgICAgICAgIH0KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CkBAIC05MzgsNyArOTU5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCiAgICAgICAg
IHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5n
dGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKKyAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0
aWNfY2FzdDx1aW50NjRfdD4odG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB0
aGlzT2JqZWN0LT5lbnN1cmVXcml0YWJsZSh2bSk7CkBAIC05ODAsOSArMTAwMSw5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9CiAgICAgfQogCi0gICAg
dW5zaWduZWQgbWlkZGxlID0gbGVuZ3RoIC8gMjsKLSAgICBmb3IgKHVuc2lnbmVkIGxvd2VyID0g
MDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKLSAgICAgICAgdW5zaWduZWQgdXBwZXIgPSBs
ZW5ndGggLSBsb3dlciAtIDE7CisgICAgdWludDY0X3QgbWlkZGxlID0gbGVuZ3RoIC8gMjsKKyAg
ICBmb3IgKHVpbnQ2NF90IGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKKyAg
ICAgICAgdWludDY0X3QgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wg
bG93ZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGxvd2Vy
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgIEpTVmFsdWUgbG93ZXJWYWx1ZTsKQEAgLTk5OSwxMSArMTAyMCwxNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCisgICAg
ICAgIGlmICghbG93ZXJFeGlzdHMgJiYgIXVwcGVyRXhpc3RzKSB7CisgICAgICAgICAgICAvLyBT
cGVjIHNheXMgdG8gZG8gbm90aGluZyB3aGVuIG5laXRoZXIgbG93ZXIgbm9yIHVwcGVyIGV4aXN0
LgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwogICAgICAgICBpZiAodXBwZXJF
eGlzdHMpIHsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFs
T2JqZWN0LCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgbG93ZXIpOworICAg
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iamVjdC0+ZGVsZXRlUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBsb3dlcik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsK
ICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFi
bGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpOwpAQCAtMTAxNSw3ICsxMDQxLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdGhpc09iamVjdC0+
cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHVwcGVyLCBsb3dlclZhbHVlLCB0cnVlKTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZ2xv
YmFsT2JqZWN0LCB1cHBlcik7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqZWN0
LT5kZWxldGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHVwcGVyKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFzdWNjZXNzKSkgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBAIC0xMDM0
LDcgKzEwNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUo
KTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmop
OworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChn
bG9iYWxPYmplY3QsIHRoaXNPYmopKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmIChsZW5ndGggPT0gMCkgewpAQCAtMTA2MSwxMiAr
MTA4NywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
RVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7CisgICAgdWludDY0X3Qg
bGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgdW5zaWduZWQgYmVnaW4gPSBhcmd1bWVudENs
YW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSwgbGVuZ3RoKTsKKyAgICB1aW50NjRfdCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4
RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBsZW5n
dGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgdW5zaWduZWQg
ZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMSksIGxlbmd0aCwgbGVuZ3RoKTsKKyAgICB1aW50NjRfdCBlbmQg
PSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT5hcmd1bWVudCgxKSwgbGVuZ3RoLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKGVuZCA8IGJlZ2luKQogICAgICAgICBlbmQgPSBiZWdp
bjsKQEAgLTEwODgsNyArMTExNCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVj
dFJlc3VsdDo6Q3JlYXRlZE9iamVjdCkKICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5z
ZWNvbmQ7CiAgICAgZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
Z2xvYmFsT2JqZWN0LCBudWxscHRyLCBlbmQgLSBiZWdpbik7CisgICAgICAgIGlmIChVTkxJS0VM
WShlbmQgLSBiZWdpbiA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsK
KyAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBMZW5ndGhF
eGNlZWRlZFRoZU1heGltdW1BcnJheUxlbmd0aEVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBl
bmNvZGVkSlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZW5k
IC0gYmVnaW4pKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICB9CiAKQEAgLTEwOTYsOCArMTEyNiw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAvLyB0aGF0IGNhbiBHQyAoZS5nLiBhbGxvY2F0aW5nIHRoZSByZXN1
bHQgYXJyYXkpLgogICAgIHRoaXNPYmotPnVzZSgpOwogCi0gICAgdW5zaWduZWQgbiA9IDA7Ci0g
ICAgZm9yICh1bnNpZ25lZCBrID0gYmVnaW47IGsgPCBlbmQ7IGsrKywgbisrKSB7CisgICAgdWlu
dDY0X3QgbiA9IDA7CisgICAgZm9yICh1aW50NjRfdCBrID0gYmVnaW47IGsgPCBlbmQ7IGsrKywg
bisrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdGhp
c09iaiwgayk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAg
ICAgIGlmICh2KSB7CkBAIC0xMTIxLDcgKzExNTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlv
bigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChn
bG9iYWxPYmplY3QsIHRoaXNPYmopOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmICghY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkpIHsKQEAgLTExNDUsMTAgKzExNzUsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgYWN0dWFsU3RhcnQgPSBhcmd1
bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSwgbGVuZ3RoKTsKKyAgICB1aW50NjRfdCBhY3R1YWxTdGFydCA9IGFyZ3VtZW50
Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCi0gICAgdW5zaWduZWQgYWN0dWFsRGVsZXRlQ291bnQgPSBsZW5ndGggLSBh
Y3R1YWxTdGFydDsKKyAgICB1aW50NjRfdCBhY3R1YWxEZWxldGVDb3VudCA9IGxlbmd0aCAtIGFj
dHVhbFN0YXJ0OwogICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsKICAg
ICAgICAgZG91YmxlIGRlbGV0ZUNvdW50ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkBAIC0xMTU3LDggKzExODcsMTEgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBlbHNlIGlmIChkZWxldGVD
b3VudCA+IGxlbmd0aCAtIGFjdHVhbFN0YXJ0KQogICAgICAgICAgICAgYWN0dWFsRGVsZXRlQ291
bnQgPSBsZW5ndGggLSBhY3R1YWxTdGFydDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWN0
dWFsRGVsZXRlQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsZXRlQ291bnQpOworICAg
ICAgICAgICAgYWN0dWFsRGVsZXRlQ291bnQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGVsZXRl
Q291bnQpOwogICAgIH0KKyAgICB1bnNpZ25lZCBpdGVtQ291bnQgPSBzdGQ6Om1heDxpbnQ+KGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7CisgICAgaWYgKFVOTElLRUxZKGxlbmd0
aCAtIGFjdHVhbERlbGV0ZUNvdW50ICsgaXRlbUNvdW50ID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1heFNhZmVJbnRlZ2VyKCkpKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIlNwbGljZSBjYW5ub3QgcHJvZHVjZSBhbiBhcnJheSBvZiBsZW5n
dGggbGFyZ2VyIHRoYW4gKDIgKiogNTMpIC0gMSJfcyk7CiAKICAgICBzdGQ6OnBhaXI8U3BlY2ll
c0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2llc0NvbnN0
cnVjdEFycmF5KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgYWN0dWFsRGVsZXRlQ291bnQpOwogICAg
IEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAoc3BlY2llc1Jlc3VsdC5m
aXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pKTsKQEAgLTExNzUsMTMg
KzEyMDgsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
ICAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpD
cmVhdGVkT2JqZWN0KQogICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCBhY3R1YWxEZWxldGVDb3VudCk7CisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoYWN0dWFsRGVsZXRlQ291bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIExlbmd0aEV4Y2VlZGVkVGhlTWF4aW11bUFycmF5TGVuZ3RoRXJy
b3IpOworICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJh
eVdpdGhVbmRlY2lkZWQpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0dWFsRGVsZXRlQ291bnQp
KTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgewogICAgICAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7ICsraykg
eworICAgICAgICBmb3IgKHVpbnQ2NF90IGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7ICsr
aykgewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB0
aGlzT2JqLCBrICsgYWN0dWFsU3RhcnQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYp
KQpAQCAtMTE5MSw3ICsxMjI4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgICAgICB9CiAgICAgfQogCi0gICAgdW5zaWduZWQgaXRlbUNvdW50ID0gc3Rk
OjptYXg8aW50PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwogICAgIGlmIChp
dGVtQ291bnQgPCBhY3R1YWxEZWxldGVDb3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpT
aGlmdENvdW50Rm9yU3BsaWNlPihnbG9iYWxPYmplY3QsIHRoaXNPYmosIGFjdHVhbFN0YXJ0LCBh
Y3R1YWxEZWxldGVDb3VudCwgaXRlbUNvdW50LCBsZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTEyMTksMTQgKzEyNTUsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEVYQ0VQVElP
Tl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAgaWYgKFVOTElL
RUxZKCF0aGlzT2JqKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAgZG91
YmxlIGRvdWJsZUxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gZG91YmxlTGVuZ3RoOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIHVu
c2lnbmVkIG5yQXJncyA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwogICAgIGlmIChuckFy
Z3MpIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKGRvdWJsZUxlbmd0aCArIHN0YXRpY19jYXN0PGRv
dWJsZT4obnJBcmdzKSA+IG1heFNhZmVJbnRlZ2VyKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkNhbm5vdCBzaGlmdCB0byBvZmZz
ZXQgZ3JlYXRlciB0aGFuICgyICoqIDUzKSAtIDEiX3MpOworICAgICAgICBpZiAoVU5MSUtFTFko
bGVuZ3RoICsgbnJBcmdzID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heFNhZmVJbnRlZ2VyKCkp
KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJ1bnNoaWZ0IGNhbm5vdCBwcm9kdWNlIGFuIGFycmF5IG9mIGxlbmd0aCBsYXJnZXIgdGhh
biAoMiAqKiA1MykgLSAxIl9zKTsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50
Rm9yU2hpZnQ+KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICB9CkBAIC0xMjQyLDE1ICsxMjc3LDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKIAogZW51bSBjbGFzcyBJbmRleE9mRGlyZWN0aW9uIHsgRm9yd2FyZCwgQmFj
a3dhcmQgfTsKIHRlbXBsYXRlPEluZGV4T2ZEaXJlY3Rpb24gZGlyZWN0aW9uPgotQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGZhc3RJbmRleE9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZN
JiB2bSwgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBzZWFyY2hFbGVt
ZW50LCB1bnNpZ25lZCBpbmRleCkKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBmYXN0SW5kZXhPZihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTQXJyYXkqIGFycmF5LCB1aW50
NjRfdCBsZW5ndGg2NCwgSlNWYWx1ZSBzZWFyY2hFbGVtZW50LCB1aW50NjRfdCBpbmRleDY0KQog
ewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGJvb2wg
Y2FuRG9GYXN0UGF0aCA9IGFycmF5LT5jYW5Eb0Zhc3RJbmRleGVkQWNjZXNzKHZtKQotICAgICAg
ICAmJiBhcnJheS0+Z2V0QXJyYXlMZW5ndGgoKSA9PSBsZW5ndGg7IC8vIFRoZSBlZmZlY3RzIGlu
IGdldHRpbmcgYGluZGV4YCBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGlzIGFy
cmF5LgorICAgICAgICAmJiBhcnJheS0+Z2V0QXJyYXlMZW5ndGgoKSA9PSBsZW5ndGg2NCAvLyBU
aGUgZWZmZWN0cyBpbiBnZXR0aW5nIGBpbmRleGAgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBsZW5n
dGggb2YgdGhpcyBhcnJheS4KKyAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4
NjQpID09IGluZGV4NjQ7CiAgICAgaWYgKCFjYW5Eb0Zhc3RQYXRoKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGxlbmd0aDY0KTsKKyAgICB1aW50MzJfdCBpbmRleCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
bmRleDY0KTsKKwogICAgIHN3aXRjaCAoYXJyYXktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2Fz
ZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKCFzZWFyY2hFbGVtZW50
LmlzTnVtYmVyKCkpCkBAIC0xMzUxLDEwICsxMzkwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0
aW9uKCkgPT0gIXRoaXNPYmplY3QpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCiAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0KTsKKyAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1
aW50NjRfdD4odG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1l
bnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMSksIGxlbmd0aCk7CisgICAgdWludDY0X3QgaW5kZXggPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSwg
bGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEpTVmFs
dWUgc2VhcmNoRWxlbWVudCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAKQEAgLTEzODksMTEg
KzE0MjgsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
IEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVjdCk7CiAg
ICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOworICAg
IHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QpKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
IHx8ICFsZW5ndGgpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEp
KTsKIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICB1aW50NjRfdCBpbmRl
eCA9IGxlbmd0aCAtIDE7CiAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID49IDIp
IHsKICAgICAgICAgSlNWYWx1ZSBmcm9tVmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpOwogICAgICAgICBkb3VibGUgZnJvbURvdWJsZSA9IGZyb21WYWx1ZS50b0ludGVnZXIo
Z2xvYmFsT2JqZWN0KTsKQEAgLTE0MDQsNyArMTQ0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKC0xKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZyb21Eb3VibGUgPCBs
ZW5ndGgpCi0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tRG91
YmxlKTsKKyAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZyb21Eb3Vi
bGUpOwogICAgIH0KIAogICAgIEpTVmFsdWUgc2VhcmNoRWxlbWVudCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmll
ci5oCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
ZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsMTQgQEAgcHVibGljOgog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYsIHVuc2ln
bmVkIHkpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0m
LCBpbnQgeSk7Ci0gICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYsIGRvdWJsZSB5KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNJiwgZG91YmxlIHkp
OworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYgdm0sIHVpbnQ2
NF90IHkpCisgICAgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHkpID09IHkp
CisgICAgICAgICAgICByZXR1cm4gZnJvbSh2bSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHkpKTsK
KyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+
KHkpKSA9PSB5KTsKKyAgICAgICAgcmV0dXJuIGZyb20odm0sIHN0YXRpY19jYXN0PGRvdWJsZT4o
eSkpOworICAgIH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcu
aXNOdWxsKCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5p
c0VtcHR5KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuY3BwCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDExICszODcsMTEgQEAg
VmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChKUwogICAgIEpTVmFsdWUgbGVu
Z3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxT
dHJpbmc+KCkpOwogCi0gICAgZG91YmxlIGxlbmd0aCA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3Ro
KGdsb2JhbE9iamVjdCk7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGdsb2JhbE9iamVjdCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxTdHJpbmc+KCkpOwogCiAgICAgSGFzaFNldDxTdHJp
bmc+IHNlZW5TZXQ7Ci0gICAgZm9yIChkb3VibGUgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgewor
ICAgIGZvciAodWludDY0X3QgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgewogICAgICAgICBib29s
IGtQcmVzZW50ID0gbG9jYWxlc09iamVjdC0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBrKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShy
ZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBAIFN0cmluZ2lmaWVyOjpT
dHJpbmdpZmllcihKU0dsb2JhbE9iamVjdCoKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsICk7CiAgICAgICAgICAgICBpZiAoaXNBcnJheVJlcGxhY2VyKSB7CiAgICAgICAg
ICAgICAgICAgbV91c2luZ0FycmF5UmVwbGFjZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVwbGFjZXJPYmplY3QpOwor
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0
b0xlbmd0aChnbG9iYWxPYmplY3QsIHJlcGxhY2VyT2JqZWN0KSk7CiAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVpbnQ2NF90IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW1lOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aXNKU0FycmF5KHJlcGxhY2VyT2JqZWN0KSAmJiByZXBsYWNlck9iamVjdC0+Y2FuR2V0SW5kZXhR
dWlja2x5KGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXBsYWNlck9i
amVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKQEAgLTQ3Niw3ICs0NzYsMTMgQEAgYm9vbCBT
dHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgIC8vIEZpcnN0IHRpbWUgdGhy
b3VnaCwgaW5pdGlhbGl6ZS4KICAgICBpZiAoIW1faW5kZXgpIHsKICAgICAgICAgaWYgKG1faXNB
cnJheSkgewotICAgICAgICAgICAgbV9zaXplID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCBtX29i
amVjdCk7CisgICAgICAgICAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCBtX29iamVjdCkpOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxl
bmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9z
aXplID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCk7CiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
WycpOwogICAgICAgICB9IGVsc2UgewpAQCAtNjQ1LDkgKzY1MSwxNCBAQCBORVZFUl9JTkxJTkUg
SlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAKICAgICAgICAgICAgICAgICBKU09iamVjdCog
YXJyYXkgPSBhc09iamVjdChpblZhbHVlKTsKICAgICAgICAgICAgICAgICBtYXJrZWRTdGFjay5h
cHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KGFycmF5KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSB0b0xlbmd0aChtX2dsb2JhbE9iamVjdCwgYXJyYXkpOworICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChtX2ds
b2JhbE9iamVjdCwgYXJyYXkpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihtX2dsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIGFycmF5
TGVuZ3RoU3RhY2suYXBwZW5kKGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYXJyYXlMZW5ndGhT
dGFjay5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCkpOwogICAgICAgICAgICAg
ICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXJy
YXlTdGFydFZpc2l0TWVtYmVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTU4LDYgKzE5NTgsMTQg
QEAgYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHkoSlNHbG9iYWxPYmplYwogICAgIHJldHVybiBo
YXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiB9CiAKK2Jvb2wgSlNPYmplY3Q6
Omhhc1Byb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IHByb3Bl
cnR5TmFtZSkgY29uc3QKK3sKKyAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFtZSA8PSBNQVhfQVJS
QVlfSU5ERVgpKQorICAgICAgICByZXR1cm4gaGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSk7CisgICAgQVNTRVJUKHByb3BlcnR5TmFt
ZSA8PSBtYXhTYWZlSW50ZWdlcigpKTsKKyAgICByZXR1cm4gaGFzUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwgcHJvcGVydHlOYW1lKSk7
Cit9CisKIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5R2VuZXJpYyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZSBpbnRlcm5hbE1ldGhvZFR5cGUpIGNvbnN0CiB7CiAgICAgUHJvcGVy
dHlTbG90IHNsb3QodGhpcywgaW50ZXJuYWxNZXRob2RUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjYwOTE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5
LDEwICsxNTksMTIgQEAgcHVibGljOgogCiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3Qq
LCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0Kiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9i
amVjdCosIHVpbnQ2NF90IHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZTxib29s
IGNoZWNrTnVsbFN0cnVjdHVyZSA9IGZhbHNlPgogICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEpT
R2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIGdl
dFByb3BlcnR5U2xvdChKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CisgICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCB1
aW50NjRfdCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uPiB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYWxs
YmFja1doZW5Ob0V4Y2VwdGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5cGUgZ2V0UHJvcGVy
dHlTbG90KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBDYWxsYmFja1doZW5Ob0V4Y2Vw
dGlvbikgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRp
b24+IHR5cGVuYW1lIHN0ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2ws
IFByb3BlcnR5U2xvdCYpPjo6dHlwZSBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKSBjb25z
dDsKIApAQCAtMjA2LDYgKzIwOCwxNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIG1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNob3VsZFRocm93KTsKICAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgcHV0QnlJbmRleElubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50
NjRfdCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCisgICAg
eworICAgICAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFtZSA8PSBNQVhfQVJSQVlfSU5ERVgpKQor
ICAgICAgICAgICAgcmV0dXJuIHB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSwgdmFsdWUsIHNob3VsZFRocm93KTsKKworICAg
ICAgICBBU1NFUlQocHJvcGVydHlOYW1lIDw9IG1heFNhZmVJbnRlZ2VyKCkpOworICAgICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybiBw
dXRJbmxpbmVGb3JKU09iamVjdCh0aGlzLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20o
Z2V0Vk0oZ2xvYmFsT2JqZWN0KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgIH0K
ICAgICAgICAgCiAgICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhv
ZHM6CiAgICAgLy8gIC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCkBAIC0y
NDYsNiArMjU4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgUHV0RGlyZWN0SW5kZXhMaWtlUHV0
RGlyZWN0KTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0RGlyZWN0SW5kZXgo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkK
KyAgICB7CisgICAgICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IE1BWF9BUlJBWV9JTkRF
WCkpCisgICAgICAgICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUp
OworICAgICAgICByZXR1cm4gcHV0RGlyZWN0KGdldFZNKGdsb2JhbE9iamVjdCksIElkZW50aWZp
ZXI6OmZyb20oZ2V0Vk0oZ2xvYmFsT2JqZWN0KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIGF0dHJp
YnV0ZXMpOworICAgIH0KKwogICAgIC8vIEEgZ2VuZXJhbGx5IG5vbi10aHJvd2luZyB2ZXJzaW9u
IG9mIHB1dERpcmVjdCBhbmQgcHV0RGlyZWN0SW5kZXguCiAgICAgLy8gSG93ZXZlciwgaXQncyBv
bmx5IGd1YXJhbnRlZWQgdG8gbm90IHRocm93IGJhc2VkIG9uIHdoYXQgdGhlIHJlY2VpdmVyIGlz
LgogICAgIC8vIEZvciBleGFtcGxlLCBpZiB0aGUgcmVjZWl2ZXIgaXMgYSBQcm94eU9iamVjdCwg
dGhpcyBpcyBub3QgZ3VhcmFudGVlZCwgc2luY2UKQEAgLTI4OCw2ICszMDcsMTQgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQorCisgICAgYm9v
bCBjYW5HZXRJbmRleFF1aWNrbHkodWludDY0X3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpIDw9IG1heFNhZmVJbnRlZ2VyKCkpOworICAgICAgICBpZiAoTElLRUxZKGkgPD0gTUFY
X0FSUkFZX0lOREVYKSkKKyAgICAgICAgICAgIHJldHVybiBjYW5HZXRJbmRleFF1aWNrbHkoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KGkpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAg
ICAgICAgCiAgICAgSlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkgY29uc3QKICAg
ICB7CkBAIC0zNDgsNiArMzc1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwogICAgIH0KKworICAgIEpTVmFsdWUgdHJ5R2V0SW5kZXhRdWlja2x5KHVp
bnQ2NF90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaSA8PSBtYXhTYWZlSW50ZWdl
cigpKTsKKyAgICAgICAgaWYgKExJS0VMWShpIDw9IE1BWF9BUlJBWV9JTkRFWCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ5R2V0SW5kZXhRdWlja2x5KHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAgICAgICAKICAgICBKU1ZhbHVl
IGdldERpcmVjdEluZGV4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkp
CiAgICAgewpAQCAtNjEyLDYgKzY0Nyw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3Qq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGJvb2wgaGFzUHJvcGVydHkoSlNH
bG9iYWxPYmplY3QqLCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFz
UHJvcGVydHlHZW5lcmljKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eUdlbmVy
aWMoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6
SW50ZXJuYWxNZXRob2RUeXBlKSBjb25zdDsKICAgICBib29sIGhhc093blByb3BlcnR5KEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKQEAgLTYyMCw2
ICs2NTYsOSBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBk
ZWxldGVQcm9wZXJ0eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVs
ZXRlUHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVs
ZXRlUHJvcGVydHlCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lKTsKKyAgICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJv
cGVydHlOYW1lKTsKKyAgICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdWlu
dDMyX3QgcHJvcGVydHlOYW1lKTsKKyAgICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2Jq
ZWN0KiwgdWludDY0X3QgcHJvcGVydHlOYW1lKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CiAgICAgSlNWYWx1ZSBvcmRpbmFyeVRvUHJpbWl0
aXZlKEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAko
cmV2aXNpb24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0OSw2ICsxNDksMTMgQEAgQUxXQVlTX0lO
TElORSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgIH0KIH0KIAorQUxXQVlTX0lOTElO
RSBib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgdWludDY0X3QgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAg
aWYgKExJS0VMWShwcm9wZXJ0eU5hbWUgPD0gTUFYX0FSUkFZX0lOREVYKSkKKyAgICAgICAgcmV0
dXJuIGdldFByb3BlcnR5U2xvdChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihw
cm9wZXJ0eU5hbWUpLCBzbG90KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlTbG90KGdsb2JhbE9i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbShnbG9iYWxPYmplY3QtPnZtKCksIHByb3BlcnR5TmFtZSks
IHNsb3QpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4UHJv
cGVydHlTbG90KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBUaGlzIG1ldGhvZCBvbmx5
IHN1cHBvcnRzIG5vbi1pbmRleCBQcm9wZXJ0eU5hbWVzLgpAQCAtNTM1LDQgKzU0MiwzMSBAQCBp
bmxpbmUgQ2FsbERhdGEgZ2V0Q29uc3RydWN0RGF0YShWTSYgdm0sCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAoraW5saW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgRGVs
ZXRlUHJvcGVydHlTbG90IHNsb3Q7CisgICAgcmV0dXJuIHRoaXMtPm1ldGhvZFRhYmxlKGdsb2Jh
bE9iamVjdC0+dm0oKSktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lLCBzbG90KTsKK30KKworaW5saW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQzMl90IHByb3BlcnR5TmFtZSkKK3sK
KyAgICByZXR1cm4gdGhpcy0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVsZXRl
UHJvcGVydHlCeUluZGV4KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKK30KKwor
aW5saW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVpbnQ2NF90IHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAoTElLRUxZKHByb3Bl
cnR5TmFtZSA8PSBNQVhfQVJSQVlfSU5ERVgpKQorICAgICAgICByZXR1cm4gZGVsZXRlUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSk7Cisg
ICAgQVNTRVJUKHByb3BlcnR5TmFtZSA8PSBtYXhTYWZlSW50ZWdlcigpKTsKKyAgICByZXR1cm4g
ZGVsZXRlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKGdsb2JhbE9iamVj
dC0+dm0oKSwgcHJvcGVydHlOYW1lKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIEpTT2JqZWN0Ojpn
ZXQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJvcGVydHlOYW1lKSBj
b25zdAoreworICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IE1BWF9BUlJBWV9JTkRFWCkp
CisgICAgICAgIHJldHVybiBnZXQoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
cHJvcGVydHlOYW1lKSk7CisgICAgQVNTRVJUKHByb3BlcnR5TmFtZSA8PSBtYXhTYWZlSW50ZWdl
cigpKTsKKyAgICByZXR1cm4gZ2V0KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShnbG9i
YWxPYmplY3QtPnZtKCksIHByb3BlcnR5TmFtZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCShy
ZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIEVuY29kZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShKU0dsb2JhbE9iamVjdCosIEVu
Y29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIEpTVmFsdWUgZ2V0
VmFsdWUoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIEpTVmFsdWUg
Z2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0Owor
ICAgIEpTVmFsdWUgZ2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCBwcm9wZXJ0eU5h
bWUpIGNvbnN0OwogICAgIEpTVmFsdWUgZ2V0UHVyZVJlc3VsdCgpIGNvbnN0OwogCiAgICAgYm9v
bCBpc0NhY2hlYWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzVW5zZXQoKSB8fCBtX2NhY2hlYWJpbGl0
eSA9PSBDYWNoaW5nQWxsb3dlZDsgfQpAQCAtNDIyLDcgKzQyMiw3IEBAIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBQcm9wZXJ0eVNsb3Q6OmdldFYKICAgICByZXR1cm4gY3VzdG9tR2V0dGVyKGdsb2Jh
bE9iamVjdCwgcHJvcGVydHlOYW1lKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIFByb3Bl
cnR5U2xvdDo6Z2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQg
cHJvcGVydHlOYW1lKSBjb25zdAorQUxXQVlTX0lOTElORSBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6
Z2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJvcGVydHlO
YW1lKSBjb25zdAogewogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgaWYg
KG1fcHJvcGVydHlUeXBlID09IFR5cGVWYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk2Nyw3
ICsyOTY3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiAg
ICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5
LT5sZW5ndGgoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFN0cmlu
ZyBsYW5ndWFnZSA9IGFycmF5LT5nZXQoZ2xvYmFsT2JqZWN0LCBpKS50b1dURlN0cmluZyhnbG9i
YWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChsYW5ndWFnZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wNC0zMCAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KKworICAgICAgICBXZSBjYW4ndCBjYXN0IHRvTGVuZ3RoIHJlc3VsdCB0
byB1bnNpZ25lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjExMjA1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MjYyNTU2Mj4KKworICAgICAgICBS
ZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0
LmNwcDoKKwogMjAyMC0wNC0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBTaW1wbGlmeSBjb250ZW50cyBjbGlwcGluZyBsYXllciBnZW9tZXRyeQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiAyNjA5MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTEsNyArMzExLDcgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmplY3Qq
IG8sIAogICAgICAgICBpZiAoaS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IG9i
ai0+aW1wLT5nZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21OUElkZW50aWZp
ZXIobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmVzdWx0ID0gb2JqLT5pbXAtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5u
dW1iZXIoKSk7CisgICAgICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0KGxleGljYWxHbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpLT5udW1iZXIoKSkpOwogCiAgICAgICAg
IGNvbnZlcnRWYWx1ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIHJlc3VsdCwgdmFy
aWFudCk7CiAgICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CkBAIC0zODMsNyArMzgzLDcg
QEAgYm9vbCBfTlBOX1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmICghb2JqLT5pbXAtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGkt
Pm51bWJlcigpKSkgeworICAgICAgICAgICAgaWYgKCFvYmotPmltcC0+aGFzUHJvcGVydHkobGV4
aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGktPm51bWJlcigpKSkpIHsK
ICAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTQyMiw3ICs0MjIsNyBAQCBib29sIF9O
UE5fSGFzUHJvcGVydHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9CiAKLSAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJv
cGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgaS0+bnVtYmVyKCkpOworICAgICAgICBib29sIHJl
c3VsdCA9IG9iai0+aW1wLT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oaS0+bnVtYmVyKCkpKTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNp
b24gMjYwOTE3KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNiBAQAorMjAyMC0wNC0zMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KKworICAgICAgICBXZSBjYW4ndCBjYXN0IHRvTGVuZ3RoIHJlc3VsdCB0byB1bnNpZ25lZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMjA1Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MjYyNTU2Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZ
dXN1a2UgU3V6dWtpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05Q
SlNPYmplY3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJLaXQ6Ok5QSlNPYmplY3Q6OmdldFByb3BlcnR5KToKKyAgICAgICAgKFdl
YktpdDo6TlBKU09iamVjdDo6cmVtb3ZlUHJvcGVydHkpOgorCiAyMDIwLTA0LTI5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIFdLTmF2
aWdhdGlvbkRlbGVnYXRlIEFQSSBzaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFMKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNP
YmplY3QuY3BwCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9OZXRzY2FwZS9OUEpTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcg
KzE1Nyw3IEBAIGJvb2wgTlBKU09iamVjdDo6aGFzUHJvcGVydHkoTlBJZGVudGlmaWUKICAgICBp
ZiAoaWRlbnRpZmllclJlcC0+aXNTdHJpbmcoKSkKICAgICAgICAgcmVzdWx0ID0gbV9qc09iamVj
dC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21JZGVudGlm
aWVyUmVwKGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXApKTsKICAgICBlbHNlCi0g
ICAgICAgIHJlc3VsdCA9IG1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmpl
Y3QsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKTsKKyAgICAgICAgcmVzdWx0ID0gbV9qc09iamVj
dC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGlkZW50aWZpZXJSZXAtPm51bWJlcigpKSk7CiAKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNzksNyArMTc5LDcgQEAgYm9vbCBOUEpTT2JqZWN0
OjpnZXRQcm9wZXJ0eShOUElkZW50aWZpZQogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmlu
ZygpKQogICAgICAgICBqc1Jlc3VsdCA9IG1fanNPYmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBpZGVudGlmaWVyRnJvbUlkZW50aWZpZXJSZXAobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRl
bnRpZmllclJlcCkpOwogICAgIGVsc2UKLSAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5n
ZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOworICAgICAg
ICBqc1Jlc3VsdCA9IG1fanNPYmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpKTsKICAgICAKICAgICBtX29i
amVjdE1hcC0+Y29udmVydEpTVmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBq
c1Jlc3VsdCwgKnJlc3VsdCk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKQEAgLTIzMSw3
ICsyMzEsNyBAQCBib29sIE5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KE5QSWRlbnRpCiAKICAg
ICAgICAgSlNDZWxsOjpkZWxldGVQcm9wZXJ0eShtX2pzT2JqZWN0LmdldCgpLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBpZGVudGlmaWVyKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIW1fanNP
YmplY3QtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXAtPm51
bWJlcigpKSkgeworICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGxleGljYWxH
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpZGVudGlmaWVyUmVwLT5udW1iZXIo
KSkpKSB7CiAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjA5MTcpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAy
MC0wNC0zMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBXZSBj
YW4ndCBjYXN0IHRvTGVuZ3RoIHJlc3VsdCB0byB1bnNpZ25lZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMjA1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82MjYyNTU2Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisg
ICAgICAgICogVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNj
cmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE0LTMtMjguanM6CisgICAgICAgIChFUzVIYXJuZXNzLnJl
Z2lzdGVyVGVzdC50ZXN0KToKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0
Q2FzZXMvMTUuNC40LjE0LTMtMjkuanM6CisgICAgICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVz
dC50ZXN0KToKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUu
NC40LjE1LTMtMjUuanM6CisgICAgICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50ZXN0KToK
KyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE1LTMt
MjguanM6CisgICAgICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50ZXN0KToKKwogMjAyMC0w
NC0yOSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFNr
aXAgZmFzdC90ZXh0L3RleHQtaW5kZW50LWluc2lkZS1mbG9hdC5odG1sCkluZGV4OiBMYXlvdXRU
ZXN0cy9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL1Rlc3RFeHBl
Y3RhdGlvbnMJKHJldmlzaW9uIDI2MDkxNykKKysrIExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlv
bnMJKHdvcmtpbmcgY29weSkKQEAgLTE3NTIsMTIgKzE3NTIsMTQgQEAgd2Via2l0Lm9yZy9iLzE3
MzUwNiAgaWV0ZXN0Y2VudGVyL0phdmFzYwogd2Via2l0Lm9yZy9iLzE3MzUwNiAgaWV0ZXN0Y2Vu
dGVyL0phdmFzY3JpcHQvMTUuNC40LjE0LTMtNy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTczNTA2ICBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS40LjQuMTQtMy04Lmh0bWwgWyBG
YWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNzM1MDYgIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1
LjQuNC4xNS0zLTEyLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xNzM1MDYgIGlldGVz
dGNlbnRlci9KYXZhc2NyaXB0LzE1LjQuNC4xNS0zLTI1Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtp
dC5vcmcvYi8xNzM1MDYgIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjQuNC4xNS0zLTcuaHRt
bCBbIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTczNTA2ICBpZXRlc3RjZW50ZXIvSmF2YXNj
cmlwdC8xNS40LjQuMTUtMy0xNC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMTczNTA2ICBp
ZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS40LjQuMTUtMy04Lmh0bWwgWyBTa2lwIF0KIAorIyBU
aGlzIHRha2VzIHRvbyBsb25nIHNpbmNlIGl0J3Mgc2VhcmNoaW5nIHRocm91Z2ggYW4gYXJyYXkg
d2l0aCB+NCBiaWxsaW9uIGVsZW1lbnRzLgoraWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuNC40
LjE1LTMtMjkuaHRtbCBbIFNraXAgXQorCiAjIElEQlZlcnNpb25DaGFuZ2VFdmVudCB0ZXN0cyBu
ZWVkIHRvIGJlIHJld3JpdHRlbiB0byB1c2UgZXZlbnQgY29uc3RydWN0b3JzIGluc3RlYWQgb2Yg
Y3JlYXRlRXZlbnQsCiAjIGFmdGVyIHdlIGltcGxlbWVudCB0aGUgSURCVmVyc2lvbkNoYW5nZUV2
ZW50IGNvbnN0cnVjdG9yLgogd2Via2l0Lm9yZy9iLzE0NTM5MCBzdG9yYWdlL2luZGV4ZWRkYi9l
dmVudHMuaHRtbCBbIEZhaWx1cmUgXQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0ph
dmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNC0zLTI4LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0L1Rlc3RDYXNlcy8xNS40LjQuMTQtMy0yOC5q
cwkocmV2aXNpb24gMjYwOTE3KQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3Jp
cHQvVGVzdENhc2VzLzE1LjQuNC4xNC0zLTI4LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw3IEBAIEVTNUhhcm5lc3MucmVnaXN0ZXJUZXN0KHsKICAgICAgICAgICAgIGxlbmd0aDogNDI5
NDk2NzI5NgogICAgICAgICB9OwogCi0gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5k
ZXhPZi5jYWxsKG9iaiwgdGFyZ2V0T2JqKSA9PT0gLTE7CisgICAgICAgIHJldHVybiBBcnJheS5w
cm90b3R5cGUuaW5kZXhPZi5jYWxsKG9iaiwgdGFyZ2V0T2JqKSA9PT0gMDsKICAgICB9LAogCiAg
ICAgcHJlY29uZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CkluZGV4OiBMYXlvdXRUZXN0cy9p
ZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE0LTMtMjkuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2VzLzE1
LjQuNC4xNC0zLTI5LmpzCShyZXZpc2lvbiAyNjA5MTcpCisrKyBMYXlvdXRUZXN0cy9pZXRlc3Rj
ZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE0LTMtMjkuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAgRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgICAgICB9
OwogCiAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKG9iaiwgdGFy
Z2V0T2JqKSA9PT0gMCAmJgotICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2Fs
bChvYmosIDQyOTQ5NjcyOTcpID09PSAtMTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5p
bmRleE9mLmNhbGwob2JqLCA0Mjk0OTY3Mjk3KSA9PT0gMTsKICAgICB9LAogCiAgICAgcHJlY29u
ZGl0aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50
ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE1LTMtMjUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNS0z
LTI1LmpzCShyZXZpc2lvbiAyNjA5MTcpCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2
YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE1LTMtMjUuanMJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDcgQEAgRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKIAogICAgICAgICB2YXIgb2Jq
ID0geyAxOiB0cnVlLCAyOiBmYWxzZSwgbGVuZ3RoOiAtNDI5NDk2NzI5NC41IH07CiAKLSAgICAg
ICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKG9iaiwgdHJ1ZSkgPT09
IDEgJiYKKyAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKG9i
aiwgdHJ1ZSkgPT09IC0xICYmCiAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4
T2YuY2FsbChvYmosIGZhbHNlKSA9PT0gLTE7CiAgICAgfSwKIApJbmRleDogTGF5b3V0VGVzdHMv
aWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNS0zLTI4LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0L1Rlc3RDYXNlcy8x
NS40LjQuMTUtMy0yOC5qcwkocmV2aXNpb24gMjYwOTE3KQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0
Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNS0zLTI4LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw3ICszNyw3IEBAIEVTNUhhcm5lc3MucmVnaXN0ZXJUZXN0KCB7CiAgICAgICAg
ICAgICBsZW5ndGg6IDQyOTQ5NjcyOTYKICAgICAgICAgfTsKIAotICAgICAgICByZXR1cm4gQXJy
YXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwob2JqLCB0YXJnZXRPYmopID09PSAtMTsgLy92
ZXJpZnkgbGVuZ3RoIGlzIDAgZmluYWxseQorICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBl
Lmxhc3RJbmRleE9mLmNhbGwob2JqLCB0YXJnZXRPYmopID09PSA0Mjk0OTY3Mjk1OwogICAgIH0s
CiAKICAgICBwcmVjb25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398165</attachid>
            <date>2020-04-30 23:46:47 -0700</date>
            <delta_ts>2020-05-01 01:45:25 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>73674</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjA5MTcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI0IEBACisyMDIwLTA0LTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIGNhbid0IGNhc3QgdG9MZW5ndGggcmVzdWx0IHRvIHVuc2lnbmVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTEyMDUK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYyNjI1NTYyPgorCisgICAgICAgIFJldmlld2VkIGJ5
IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiBzdHJlc3MvYXJyYXktbGVuZ3RoLWNhbnQtZ2V0
LWNhc3RlZC10by11bnNpZ25lZC5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAg
ICAodGVzdEFycmF5UG9wKToKKyAgICAgICAgKHRlc3RBcnJheVB1c2gpOgorICAgICAgICAodGVz
dEFycmF5UmV2ZXJzZSk6CisgICAgICAgICh0ZXN0QXJyYXlTcGxpY2UpOgorICAgICAgICAodGVz
dEFycmF5VW5zaGlmdCk6CisgICAgICAgICh0ZXN0QXJyYXlMYXN0SW5kZXhPZik6CisgICAgICAg
IChzaG91bGRUaHJvd1R5cGVFcnJvcik6CisgICAgICAgICh0ZXN0SlNPTlN0cmluZ2lmeS5nZXQg
bGV0KToKKyAgICAgICAgKHRlc3RKU09OU3RyaW5naWZ5KToKKyAgICAgICAgKiB0ZXN0MjYyL2V4
cGVjdGF0aW9ucy55YW1sOgorCiAyMDIwLTA0LTI5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2Fs
ZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBBc3luY0Zyb21TeW5jSXRlcmF0b3IgbWV0aG9kcyBz
aG91bGQgbm90IHBhc3MgYWJzZW50IHZhbHVlcwpJbmRleDogSlNUZXN0cy9zdHJlc3MvYXJyYXkt
bGVuZ3RoLWNhbnQtZ2V0LWNhc3RlZC10by11bnNpZ25lZC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9hcnJheS1sZW5ndGgtY2FudC1nZXQtY2FzdGVkLXRvLXVuc2lnbmVkLmpzCShu
b25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2FycmF5LWxlbmd0aC1jYW50LWdldC1jYXN0
ZWQtdG8tdW5zaWduZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDIgQEAKK2Z1bmN0
aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9
CisKK2NvbnN0IGJvdW5kYXJ5ID0gMioqMzI7IC8vIFVJTlRfTUFYICsgMQorY29uc3QgbWF4U2Fm
ZUludGVnZXIgPSAyKio1MyAtIDE7CitmdW5jdGlvbiB0ZXN0QXJyYXlQb3AoKSB7CisgICAgbGV0
IG9iaiA9IHsKKyAgICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogYm91bmRhcnkgCisgICAg
fTsKKyAgICBBcnJheS5wcm90b3R5cGUucG9wLmNhbGwob2JqKTsKKyAgICBhc3NlcnQob2JqWzBd
ID09PSA0Mik7CisgICAgYXNzZXJ0KG9iai5sZW5ndGggPT09IGJvdW5kYXJ5IC0gMSk7Cit9Cit0
ZXN0QXJyYXlQb3AoKTsKKworZnVuY3Rpb24gdGVzdEFycmF5UHVzaCgpIHsKKyAgICBsZXQgb2Jq
ID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBib3VuZGFyeQorICAgIH07Cisg
ICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChvYmosIDEwKTsKKyAgICBhc3NlcnQob2JqWzBd
ID09PSA0Mik7CisgICAgYXNzZXJ0KG9iai5sZW5ndGggPT09IGJvdW5kYXJ5ICsgMSk7Cit9Cit0
ZXN0QXJyYXlQdXNoKCk7CisKKy8vIE5PVEU6IHRoaXMgdGFrZXMgdmVyeSBsb25nIHNvIHdlIGRv
bid0IHJ1biBpdC4uLgorZnVuY3Rpb24gdGVzdEFycmF5UmV2ZXJzZSgpIHsKKyAgICBsZXQgb2Jq
ID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgW2JvdW5kYXJ5IC0gMV06IDAsCisgICAgICAg
IGxlbmd0aDogYm91bmRhcnkKKyAgICB9OworICAgIEFycmF5LnByb3RvdHlwZS5yZXZlcnNlLmNh
bGwob2JqKTsKKyAgICBhc3NlcnQob2JqWzBdID09PSAwKTsKKyAgICBhc3NlcnQob2JqW2JvdW5k
YXJ5IC0gMV0gPT09IDQyKTsKK30KKy8vdGVzdEFycmF5UmV2ZXJzZSgpOworCisvLyBOT1RFOiB0
aGlzIHRha2VzIHZlcnkgbG9uZyBzbyB3ZSBkb24ndCBydW4gaXQuLi4KK2Z1bmN0aW9uIHRlc3RB
cnJheVNoaWZ0KCkgeworICAgIGxldCBvYmogPSB7CisgICAgICAgIDA6IDQyLAorICAgICAgICBs
ZW5ndGg6IGJvdW5kYXJ5CisgICAgfTsKKyAgICBsZXQgZWxlbSA9IEFycmF5LnByb3RvdHlwZS5z
aGlmdC5jYWxsKG9iaik7CisgICAgYXNzZXJ0KGVsZW0gPT09IDQyKTsKKyAgICBhc3NlcnQob2Jq
Lmxlbmd0aCA9PT0gYm91bmRhcnkgLSAxKTsKKyAgICBhc3NlcnQob2JqWzBdID09PSB1bmRlZmlu
ZWQpOworfQorLy90ZXN0QXJyYXlTaGlmdCgpOworCitmdW5jdGlvbiB0ZXN0QXJyYXlTbGljZSgp
IHsKKyAgICBsZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgMTogNDMsCisgICAg
ICAgIGxlbmd0aDogYm91bmRhcnkKKyAgICB9OworICAgIGxldCBhcnIgPSBBcnJheS5wcm90b3R5
cGUuc2xpY2UuY2FsbChvYmosIDAsIDIpOworICAgIGFzc2VydChhcnJbMF0gPT09IDQyKTsKKyAg
ICBhc3NlcnQoYXJyWzFdID09PSA0Myk7CisgICAgYXNzZXJ0KGFyci5sZW5ndGggPT09IDIpOwor
fQordGVzdEFycmF5U2xpY2UoKTsKKworZnVuY3Rpb24gdGVzdEFycmF5U3BsaWNlKCkgeworICAg
IGxldCBvYmogPSB7CisgICAgICAgIDA6IDQyLAorICAgICAgICAxOiA0MywKKyAgICAgICAgbGVu
Z3RoOiBib3VuZGFyeQorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKG9i
aiwgYm91bmRhcnktMSwgMCwgMSwgMiwgMyk7CisgICAgYXNzZXJ0KG9iai5sZW5ndGggPT09IGJv
dW5kYXJ5ICsgMyk7CisgICAgYXNzZXJ0KG9ialtib3VuZGFyeS0xXSA9PT0gMSk7CisgICAgYXNz
ZXJ0KG9ialtib3VuZGFyeV0gPT09IDIpOworICAgIGFzc2VydChvYmpbYm91bmRhcnkrMV0gPT09
IDMpOworfQordGVzdEFycmF5U3BsaWNlKCk7CisKKy8vIE5PVEU6IHRoaXMgdGFrZXMgdmVyeSBs
b25nIHNvIHdlIGRvbid0IHJ1biBpdC4uLgorZnVuY3Rpb24gdGVzdEFycmF5VW5zaGlmdCgpIHsK
KyAgICBsZXQgb2JqID0geworICAgICAgICAxOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBib3VuZGFy
eQorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbChvYmosIDQzKTsKKyAg
ICBhc3NlcnQob2JqWzBdID09PSA0Myk7CisgICAgYXNzZXJ0KG9ialsyXSA9PT0gNDIpOworICAg
IGFzc2VydChvYmoubGVuZ3RoID09PSBib3VuZGFyeSArIDEpOworfQorLy90ZXN0QXJyYXlVbnNo
aWZ0KCk7CisKK2Z1bmN0aW9uIHRlc3RBcnJheUluZGV4T2YoKSB7CisgICAgbGV0IG9iaiA9IHsK
KyAgICAgICAgMzA6IDQyLAorICAgICAgICBsZW5ndGg6IGJvdW5kYXJ5CisgICAgfTsKKyAgICBs
ZXQgciA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwob2JqLCA0Mik7CisgICAgYXNzZXJ0
KHIgPT09IDMwKTsKK30KK3Rlc3RBcnJheUluZGV4T2YoKTsKKworZnVuY3Rpb24gdGVzdEFycmF5
TGFzdEluZGV4T2YoKSB7CisgICAgbGV0IG9iaiA9IHsKKyAgICAgICAgW2JvdW5kYXJ5IC0gMzBd
OiA0MiwKKyAgICAgICAgbGVuZ3RoOiBib3VuZGFyeQorICAgIH07CisgICAgbGV0IHIgPSBBcnJh
eS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChvYmosIDQyKTsKKyAgICBhc3NlcnQociA9PT0g
Ym91bmRhcnkgLSAzMCk7Cit9Cit0ZXN0QXJyYXlMYXN0SW5kZXhPZigpOworCitmdW5jdGlvbiBz
aG91bGRUaHJvd1R5cGVFcnJvcihmKSB7CisgICAgbGV0IG9rID0gZmFsc2U7CisgICAgdHJ5IHsK
KyAgICAgICAgZigpOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBvayA9IGUgaW5zdGFuY2Vv
ZiBUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoImxhcmdlciB0aGFuICgyICoqIDUzKSAt
IDEiKSA+PSAwOworICAgIH0KKyAgICBhc3NlcnQob2spOworfQorCitzaG91bGRUaHJvd1R5cGVF
cnJvcihmdW5jdGlvbigpIHsKKyAgICBsZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAg
ICAgbGVuZ3RoOiBtYXhTYWZlSW50ZWdlcgorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnB1
c2guY2FsbChvYmosIDEwKTsKK30pOworCitzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5jdGlvbigp
IHsKKyAgICBsZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBtYXhT
YWZlSW50ZWdlciAtIDEKKyAgICB9OworICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwob2Jq
LCAxMCwgMjApOworfSk7CitzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5jdGlvbigpIHsKKyAgICBs
ZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBtYXhTYWZlSW50ZWdl
cgorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbChvYmosIDEwKTsKK30p
Oworc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHsKKyAg
ICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogbWF4U2FmZUludGVnZXIgLSAxCisgICAgfTsK
KyAgICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKG9iaiwgMTAsIDIwKTsKK30pOworc2hv
dWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7CisgICAgbGV0IG9iaiA9IHsKKyAgICAgICAg
MDogNDIsCisgICAgICAgIGxlbmd0aDogbWF4U2FmZUludGVnZXIKKyAgICB9OworICAgIEFycmF5
LnByb3RvdHlwZS5zcGxpY2UuY2FsbChvYmosIG9iai5sZW5ndGggLSAxMCwgMCwgMTApOworfSk7
CitzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5jdGlvbigpIHsKKyAgICBsZXQgb2JqID0geworICAg
ICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3RoOiBtYXhTYWZlSW50ZWdlciAtIDEKKyAgICB9Owor
ICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChvYmosIG9iai5sZW5ndGggLSAxMCwgMCwg
MTAsIDIwKTsKK30pOworc2hvdWxkVGhyb3dUeXBlRXJyb3IoZnVuY3Rpb24oKSB7CisgICAgbGV0
IG9iaiA9IHsKKyAgICAgICAgMDogNDIsCisgICAgICAgIGxlbmd0aDogbWF4U2FmZUludGVnZXIg
LSAxCisgICAgfTsKKyAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwob2JqLCBvYmoubGVu
Z3RoIC0gMTAsIDEsIDEwLCAyMCwgMzApOworfSk7CitzaG91bGRUaHJvd1R5cGVFcnJvcihmdW5j
dGlvbigpIHsKKyAgICBsZXQgb2JqID0geworICAgICAgICAwOiA0MiwKKyAgICAgICAgbGVuZ3Ro
OiBtYXhTYWZlSW50ZWdlcgorICAgIH07CisgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxs
KG9iaiwgb2JqLmxlbmd0aCAtIDEwLCAxLCAxMCwgMjApOworfSk7CisKK2Z1bmN0aW9uIHRlc3RK
U09OU3RyaW5naWZ5KCkgeworICAgIGxldCBhcnIgPSBbMSwyLDNdOworICAgIGxldCBwID0gbmV3
IFByb3h5KGFyciwgeworICAgICAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgeworICAg
ICAgICAgICAgaWYgKHByb3AgPT09ICJsZW5ndGgiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGJvdW5kYXJ5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0
KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpOworICAgICAgICB9CisgICAgfSk7CisgICAgbGV0IG9r
ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkocCk7CisgICAgfSBj
YXRjaChlKSB7CisgICAgICAgIG9rID0gZS5tZXNzYWdlLmluZGV4T2YoIk91dCBvZiBtZW1vcnki
KSA+PSAwOworICAgIH0KKyAgICBhc3NlcnQob2spOworfQordGVzdEpTT05TdHJpbmdpZnkoKTsK
SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2FycmF5LXJldmVyc2UtcHJveHkuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9zdHJlc3MvYXJyYXktcmV2ZXJzZS1wcm94eS5qcwkocmV2aXNpb24gMjYwOTE3
KQorKysgSlNUZXN0cy9zdHJlc3MvYXJyYXktcmV2ZXJzZS1wcm94eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMTMzLDYgKzEzMywxMCBAQCB0ZXN0KGZ1bmN0aW9uKCkgewogICAgICAgICB9CiAgICAg
fTsKIAorCisgICAgLy8gV2hlbiBib3RoIHN0YXJ0IGFuZCBlbmQgcHJvcGVydGllcyBkb24ndCBl
eGlzdCwgc3BlYyBzYXlzIG5vdCB0bworICAgIC8vIGNhbGwgdGhlIGRlbGV0ZSBob29rLgorCiAg
ICAgbGV0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwgaGFuZGxlcik7CiAgICAgbGV0IHRocmV3
ID0gZmFsc2U7CiAgICAgdHJ5IHsKQEAgLTE0MSw3ICsxNDUsNyBAQCB0ZXN0KGZ1bmN0aW9uKCkg
ewogICAgICAgICB0aHJldyA9IHRydWU7CiAgICAgICAgIGFzc2VydChlID09PSBlcnJvcik7CiAg
ICAgfQotICAgIGFzc2VydCh0aHJldyk7CisgICAgYXNzZXJ0KCF0aHJldyk7CiB9KTsKIAogdGVz
dChmdW5jdGlvbigpIHsKSW5kZXg6IEpTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL3Rlc3QyNjIvY29uZmlnLnlhbWwJKHJldmlzaW9uIDI2MDkxNykKKysr
IEpTVGVzdHMvdGVzdDI2Mi9jb25maWcueWFtbAkod29ya2luZyBjb3B5KQpAQCAtODYsMjYgKzg2
LDYgQEAgc2tpcDoKIAogICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4Njc0OQogICAgIC0gdGVzdC9idWlsdC1pbnMvUmVnRXhwL3Byb3BlcnR5LWVzY2FwZXMv
Y2hhcmFjdGVyLWNsYXNzLmpzCi0gICAgCi0gICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg1NDk1Ci0gICAgLSB0ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5
cGUvc2xpY2UvUzE1LjQuNC4xMF9BM19UMS5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJyYXkv
cHJvdG90eXBlL3NsaWNlL1MxNS40LjQuMTBfQTNfVDIuanMKLSAgICAtIHRlc3QvYnVpbHQtaW5z
L0FycmF5L3Byb3RvdHlwZS9zbGljZS9jcmVhdGUtbm9uLWFycmF5LWludmFsaWQtbGVuLmpzCi0g
ICAgLSB0ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvc2xpY2UvY3JlYXRlLXByb3hpZWQt
YXJyYXktaW52YWxpZC1sZW4uanMKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlw
ZS9zcGxpY2UvY3JlYXRlLXNwZWNpZXMtdW5kZWYtaW52YWxpZC1sZW4uanMKLSAgICAtIHRlc3Qv
YnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zcGxpY2UvY3JlYXRlLW5vbi1hcnJheS1pbnZhbGlk
LWxlbi5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3NwbGljZS9jcmVh
dGUtc3BlY2llcy11bmRlZi1pbnZhbGlkLWxlbi5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJy
YXkvcHJvdG90eXBlL3NwbGljZS9sZW5ndGgtbmVhci1pbnRlZ2VyLWxpbWl0LWdyb3ctYXJyYXku
anMKLQotICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTYy
NQotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL2luZGV4T2YvMTUuNC40LjE0
LTMtMjguanMKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9pbmRleE9mLzE1
LjQuNC4xNC0zLTI5LmpzCi0KLSAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjQ0NTYKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9sYXN0
SW5kZXhPZi8xNS40LjQuMTUtMy0yOC5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJv
dG90eXBlL3BvcC9TMTUuNC40LjZfQTNfVDIuanMKLSAgICAtIHRlc3QvYnVpbHQtaW5zL0FycmF5
L3Byb3RvdHlwZS9wdXNoL1MxNS40LjQuN19BNF9UMS5qcwotICAgIC0gdGVzdC9idWlsdC1pbnMv
QXJyYXkvcHJvdG90eXBlL3B1c2gvbGVuZ3RoLW5lYXItaW50ZWdlci1saW1pdC5qcwogCiAgICAg
IyBbW093blByb3BlcnR5S2V5c11dIG9yZGVyIHdpdGggbGFyZ2UgaW50ZWdlciBpbmRleCBrZXlz
IHVwIHRvIDIgKiogNTMgLSAxCiAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg2NjkxCkluZGV4OiBKU1Rlc3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSlNUZXN0cy90ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sCShyZXZpc2lv
biAyNjA5MTcpCisrKyBKU1Rlc3RzL3Rlc3QyNjIvZXhwZWN0YXRpb25zLnlhbWwJKHdvcmtpbmcg
Y29weSkKQEAgLTY0Miw2MyArNjQyLDkgQEAgdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBl
L2NvbmNhdC9hcgogdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL2NvbmNhdC9pcy1jb25j
YXQtc3ByZWFkYWJsZS1nZXQtb3JkZXIuanM6CiAgIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4
cGVjdGVkIFtpc0NvbmNhdFNwcmVhZGFibGUsIGNvbnN0cnVjdG9yLCBpc0NvbmNhdFNwcmVhZGFi
bGVdIGFuZCBbY29uc3RydWN0b3IsIGlzQ29uY2F0U3ByZWFkYWJsZV0gdG8gaGF2ZSB0aGUgc2Ft
ZSBjb250ZW50cy4gJwogICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW2lz
Q29uY2F0U3ByZWFkYWJsZSwgY29uc3RydWN0b3IsIGlzQ29uY2F0U3ByZWFkYWJsZV0gYW5kIFtj
b25zdHJ1Y3RvciwgaXNDb25jYXRTcHJlYWRhYmxlXSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRz
LiAnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvaW5kZXhPZi9sZW5ndGgtbmVhci1p
bnRlZ2VyLWxpbWl0LmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBTYW1l
VmFsdWUowqstMcK7LCDCqzkwMDcxOTkyNTQ3NDA5OTDCuykgdG8gYmUgdHJ1ZScKLSAgc3RyaWN0
IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFNhbWVWYWx1ZSjCqy0xwrssIMKrOTAwNzE5
OTI1NDc0MDk5MMK7KSB0byBiZSB0cnVlJwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBl
L3BvcC9TMTUuNC40LjZfQTJfVDIuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6ICM0OiB2
YXIgb2JqID0ge307IG9iai5sZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7IG9iai5w
b3AgPSBBcnJheS5wcm90b3R5cGUucG9wOyBvYmoucG9wKCk7IG9iai5sZW5ndGggPT09IDkwMDcx
OTkyNTQ3NDA5OTAuIEFjdHVhbDogNDI5NDk2NzI5NCcKLSAgc3RyaWN0IG1vZGU6ICdUZXN0MjYy
RXJyb3I6ICM0OiB2YXIgb2JqID0ge307IG9iai5sZW5ndGggPSBOdW1iZXIuUE9TSVRJVkVfSU5G
SU5JVFk7IG9iai5wb3AgPSBBcnJheS5wcm90b3R5cGUucG9wOyBvYmoucG9wKCk7IG9iai5sZW5n
dGggPT09IDkwMDcxOTkyNTQ3NDA5OTAuIEFjdHVhbDogNDI5NDk2NzI5NCcKLXRlc3QvYnVpbHQt
aW5zL0FycmF5L3Byb3RvdHlwZS9wb3AvUzE1LjQuNC42X0EzX1QxLmpzOgotICBkZWZhdWx0OiAn
VGVzdDI2MkVycm9yOiAjMTogdmFyIG9iaiA9IHt9OyBvYmoucG9wID0gQXJyYXkucHJvdG90eXBl
LnBvcDsgb2JqWzBdID0gIngiOyBvYmpbNDI5NDk2NzI5NV0gPSAieSI7IG9iai5sZW5ndGggPSA0
Mjk0OTY3Mjk2OyBvYmoucG9wKCkgPT09ICJ5Ii4gQWN0dWFsOiB1bmRlZmluZWQnCi0gIHN0cmlj
dCBtb2RlOiAnVGVzdDI2MkVycm9yOiAjMTogdmFyIG9iaiA9IHt9OyBvYmoucG9wID0gQXJyYXku
cHJvdG90eXBlLnBvcDsgb2JqWzBdID0gIngiOyBvYmpbNDI5NDk2NzI5NV0gPSAieSI7IG9iai5s
ZW5ndGggPSA0Mjk0OTY3Mjk2OyBvYmoucG9wKCkgPT09ICJ5Ii4gQWN0dWFsOiB1bmRlZmluZWQn
Ci10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvcG9wL2NsYW1wcy10by1pbnRlZ2VyLWxp
bWl0LmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBMZW5ndGggaXMgMioqNTMgLSAxIEV4
cGVjdGVkIFNhbWVWYWx1ZSjCqzQyOTQ5NjcyOTTCuywgwqs5MDA3MTk5MjU0NzQwOTkwwrspIHRv
IGJlIHRydWUnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBMZW5ndGggaXMgMioqNTMg
LSAxIEV4cGVjdGVkIFNhbWVWYWx1ZSjCqzQyOTQ5NjcyOTTCuywgwqs5MDA3MTk5MjU0NzQwOTkw
wrspIHRvIGJlIHRydWUnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvcG9wL2xlbmd0
aC1uZWFyLWludGVnZXItbGltaXQuanM6Ci0gIGRlZmF1bHQ6ICJUZXN0MjYyRXJyb3I6IGFycmF5
TGlrZVsnOTAwNzE5OTI1NDc0MDk5MCddIGlzIHJldHVybmVkIGZyb20gcG9wKCkgRXhwZWN0ZWQg
U2FtZVZhbHVlKMKrdW5kZWZpbmVkwrssIMKrOTAwNzE5OTI1NDc0MDk5MMK7KSB0byBiZSB0cnVl
IgotICBzdHJpY3QgbW9kZTogIlRlc3QyNjJFcnJvcjogYXJyYXlMaWtlWyc5MDA3MTk5MjU0NzQw
OTkwJ10gaXMgcmV0dXJuZWQgZnJvbSBwb3AoKSBFeHBlY3RlZCBTYW1lVmFsdWUowqt1bmRlZmlu
ZWTCuywgwqs5MDA3MTk5MjU0NzQwOTkwwrspIHRvIGJlIHRydWUiCi10ZXN0L2J1aWx0LWlucy9B
cnJheS9wcm90b3R5cGUvcHVzaC9TMTUuNC40LjdfQTJfVDIuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0
MjYyRXJyb3I6IEV4cGVjdGVkIGEgVHlwZUVycm9yIHRvIGJlIHRocm93biBidXQgbm8gZXhjZXB0
aW9uIHdhcyB0aHJvd24gYXQgYWxsJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhw
ZWN0ZWQgYSBUeXBlRXJyb3IgdG8gYmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93
biBhdCBhbGwnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvcHVzaC9jbGFtcHMtdG8t
aW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIq
KjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0
MDk5McK7KSB0byBiZSB0cnVlJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3Ro
IGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5
OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBl
L3B1c2gvdGhyb3dzLWlmLWludGVnZXItbGltaXQtZXhjZWVkZWQuanM6Ci0gIGRlZmF1bHQ6ICdU
ZXN0MjYyRXJyb3I6IExlbmd0aCBpcyAyKio1MyAtIDEgRXhwZWN0ZWQgYSBUeXBlRXJyb3IgdG8g
YmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93biBhdCBhbGwnCi0gIHN0cmljdCBt
b2RlOiAnVGVzdDI2MkVycm9yOiBMZW5ndGggaXMgMioqNTMgLSAxIEV4cGVjdGVkIGEgVHlwZUVy
cm9yIHRvIGJlIHRocm93biBidXQgbm8gZXhjZXB0aW9uIHdhcyB0aHJvd24gYXQgYWxsJwotdGVz
dC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3JldmVyc2UvbGVuZ3RoLWV4Y2VlZGluZy1pbnRl
Z2VyLWxpbWl0LXdpdGgtcHJveHkuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVj
dGVkIFtHZXQ6bGVuZ3RoLCBIYXM6MCwgR2V0OjAsIEhhczo0Mjk0OTY3Mjk0LCBEZWxldGU6MCwg
U2V0OjQyOTQ5NjcyOTQsIEdldE93blByb3BlcnR5RGVzY3JpcHRvcjo0Mjk0OTY3Mjk0LCBEZWZp
bmVQcm9wZXJ0eTo0Mjk0OTY3Mjk0LCBIYXM6MSwgSGFzOjQyOTQ5NjcyOTMsIERlbGV0ZToxLCBE
ZWxldGU6NDI5NDk2NzI5MywgSGFzOjIsIEdldDoyLCBIYXM6NDI5NDk2NzI5MiwgRGVsZXRlOjIs
IFNldDo0Mjk0OTY3MjkyLCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6NDI5NDk2NzI5MiwgRGVm
aW5lUHJvcGVydHk6NDI5NDk2NzI5MiwgSGFzOjMsIEhhczo0Mjk0OTY3MjkxLCBEZWxldGU6Mywg
RGVsZXRlOjQyOTQ5NjcyOTEsIEhhczo0LCBHZXQ6NF0gYW5kIFtHZXQ6bGVuZ3RoLCBIYXM6MCwg
R2V0OjAsIEhhczo5MDA3MTk5MjU0NzQwOTkwLCBHZXQ6OTAwNzE5OTI1NDc0MDk5MCwgU2V0OjAs
IEdldE93blByb3BlcnR5RGVzY3JpcHRvcjowLCBEZWZpbmVQcm9wZXJ0eTowLCBTZXQ6OTAwNzE5
OTI1NDc0MDk5MCwgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOjkwMDcxOTkyNTQ3NDA5OTAsIERl
ZmluZVByb3BlcnR5OjkwMDcxOTkyNTQ3NDA5OTAsIEhhczoxLCBIYXM6OTAwNzE5OTI1NDc0MDk4
OSwgSGFzOjIsIEdldDoyLCBIYXM6OTAwNzE5OTI1NDc0MDk4OCwgRGVsZXRlOjIsIFNldDo5MDA3
MTk5MjU0NzQwOTg4LCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6OTAwNzE5OTI1NDc0MDk4OCwg
RGVmaW5lUHJvcGVydHk6OTAwNzE5OTI1NDc0MDk4OCwgSGFzOjMsIEhhczo5MDA3MTk5MjU0NzQw
OTg3LCBHZXQ6OTAwNzE5OTI1NDc0MDk4NywgU2V0OjMsIEdldE93blByb3BlcnR5RGVzY3JpcHRv
cjozLCBEZWZpbmVQcm9wZXJ0eTozLCBEZWxldGU6OTAwNzE5OTI1NDc0MDk4NywgSGFzOjQsIEdl
dDo0XSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiAnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2
MkVycm9yOiBFeHBlY3RlZCBbR2V0Omxlbmd0aCwgSGFzOjAsIEdldDowLCBIYXM6NDI5NDk2NzI5
NCwgRGVsZXRlOjAsIFNldDo0Mjk0OTY3Mjk0LCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6NDI5
NDk2NzI5NCwgRGVmaW5lUHJvcGVydHk6NDI5NDk2NzI5NCwgSGFzOjEsIEhhczo0Mjk0OTY3Mjkz
LCBEZWxldGU6MSwgRGVsZXRlOjQyOTQ5NjcyOTMsIEhhczoyLCBHZXQ6MiwgSGFzOjQyOTQ5Njcy
OTIsIERlbGV0ZToyLCBTZXQ6NDI5NDk2NzI5MiwgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOjQy
OTQ5NjcyOTIsIERlZmluZVByb3BlcnR5OjQyOTQ5NjcyOTIsIEhhczozLCBIYXM6NDI5NDk2NzI5
MSwgRGVsZXRlOjMsIERlbGV0ZTo0Mjk0OTY3MjkxLCBIYXM6NCwgR2V0OjRdIGFuZCBbR2V0Omxl
bmd0aCwgSGFzOjAsIEdldDowLCBIYXM6OTAwNzE5OTI1NDc0MDk5MCwgR2V0OjkwMDcxOTkyNTQ3
NDA5OTAsIFNldDowLCBHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6MCwgRGVmaW5lUHJvcGVydHk6
MCwgU2V0OjkwMDcxOTkyNTQ3NDA5OTAsIEdldE93blByb3BlcnR5RGVzY3JpcHRvcjo5MDA3MTk5
MjU0NzQwOTkwLCBEZWZpbmVQcm9wZXJ0eTo5MDA3MTk5MjU0NzQwOTkwLCBIYXM6MSwgSGFzOjkw
MDcxOTkyNTQ3NDA5ODksIEhhczoyLCBHZXQ6MiwgSGFzOjkwMDcxOTkyNTQ3NDA5ODgsIERlbGV0
ZToyLCBTZXQ6OTAwNzE5OTI1NDc0MDk4OCwgR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOjkwMDcx
OTkyNTQ3NDA5ODgsIERlZmluZVByb3BlcnR5OjkwMDcxOTkyNTQ3NDA5ODgsIEhhczozLCBIYXM6
OTAwNzE5OTI1NDc0MDk4NywgR2V0OjkwMDcxOTkyNTQ3NDA5ODcsIFNldDozLCBHZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3I6MywgRGVmaW5lUHJvcGVydHk6MywgRGVsZXRlOjkwMDcxOTkyNTQ3NDA5
ODcsIEhhczo0LCBHZXQ6NF0gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gJwotdGVzdC9idWls
dC1pbnMvQXJyYXkvcHJvdG90eXBlL3NsaWNlL2xlbmd0aC1leGNlZWRpbmctaW50ZWdlci1saW1p
dC1wcm94aWVkLWFycmF5LmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBb
XSBhbmQgWzkwMDcxOTkyNTQ3NDA5ODksIDkwMDcxOTkyNTQ3NDA5OTBdIHRvIGhhdmUgdGhlIHNh
bWUgY29udGVudHMuIHNsaWNlKDkwMDcxOTkyNTQ3NDA5ODkpJwotICBzdHJpY3QgbW9kZTogJ1Rl
c3QyNjJFcnJvcjogRXhwZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQwOTg5LCA5MDA3MTk5MjU0
NzQwOTkwXSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiBzbGljZSg5MDA3MTk5MjU0NzQwOTg5
KScKLXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zbGljZS9sZW5ndGgtZXhjZWVkaW5n
LWludGVnZXItbGltaXQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtd
IGFuZCBbOTAwNzE5OTI1NDc0MDk4OSwgOTAwNzE5OTI1NDc0MDk5MF0gdG8gaGF2ZSB0aGUgc2Ft
ZSBjb250ZW50cy4gc2xpY2UoOTAwNzE5OTI1NDc0MDk4OSknCi0gIHN0cmljdCBtb2RlOiAnVGVz
dDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQgWzkwMDcxOTkyNTQ3NDA5ODksIDkwMDcxOTkyNTQ3
NDA5OTBdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuIHNsaWNlKDkwMDcxOTkyNTQ3NDA5ODkp
JwotdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3NwbGljZS9TMTUuNC40LjEyX0EzX1Qx
LmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiAjMTogdmFyIG9iaiA9IHt9OyBvYmouc3Bs
aWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsgb2JqWzBdID0gIngiOyBvYmpbNDI5NDk2NzI5
NV0gPSAieSI7IG9iai5sZW5ndGggPSA0Mjk0OTY3Mjk2OyB2YXIgYXJyID0gb2JqLnNwbGljZSg0
Mjk0OTY3Mjk1LDEpOyBhcnIubGVuZ3RoID09PSAxLiBBY3R1YWw6IDAnCi0gIHN0cmljdCBtb2Rl
OiAnVGVzdDI2MkVycm9yOiAjMTogdmFyIG9iaiA9IHt9OyBvYmouc3BsaWNlID0gQXJyYXkucHJv
dG90eXBlLnNwbGljZTsgb2JqWzBdID0gIngiOyBvYmpbNDI5NDk2NzI5NV0gPSAieSI7IG9iai5s
ZW5ndGggPSA0Mjk0OTY3Mjk2OyB2YXIgYXJyID0gb2JqLnNwbGljZSg0Mjk0OTY3Mjk1LDEpOyBh
cnIubGVuZ3RoID09PSAxLiBBY3R1YWw6IDAnCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5
cGUvc3BsaWNlL2NsYW1wcy1sZW5ndGgtdG8taW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVsdDog
J1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0
Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotICBzdHJpY3Qg
bW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFs
dWUowqs0Mjk0OTY3Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotdGVz
dC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3NwbGljZS9jcmVhdGUtc3BlY2llcy1sZW5ndGgt
ZXhjZWVkaW5nLWludGVnZXItbGltaXQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IGxl
bmd0aCBhbmQgZGVsZXRlQ291bnQgd2VyZSBjb3JyZWN0bHkgY2xhbXBlZCB0byAyXjUzLTEgRXhw
ZWN0ZWQgU2FtZVZhbHVlKMKrNDI5NDk2NzI5NcK7LCDCqzkwMDcxOTkyNTQ3NDA5OTHCuykgdG8g
YmUgdHJ1ZScKLSAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IGxlbmd0aCBhbmQgZGVsZXRl
Q291bnQgd2VyZSBjb3JyZWN0bHkgY2xhbXBlZCB0byAyXjUzLTEgRXhwZWN0ZWQgU2FtZVZhbHVl
KMKrNDI5NDk2NzI5NcK7LCDCqzkwMDcxOTkyNTQ3NDA5OTHCuykgdG8gYmUgdHJ1ZScKLXRlc3Qv
YnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zcGxpY2UvbGVuZ3RoLWFuZC1kZWxldGVDb3VudC1l
eGNlZWRpbmctaW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVsdDogIlRlc3QyNjJFcnJvcjogRXhw
ZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQwOTg5LCA5MDA3MTk5MjU0NzQwOTkwXSB0byBoYXZl
IHRoZSBzYW1lIGNvbnRlbnRzLiBhcnJheUxpa2VbJzkwMDcxOTkyNTQ3NDA5ODknXSBhbmQgYXJy
YXlMaWtlWyc5MDA3MTk5MjU0NzQwOTkwJ10gYXJlIHJlbW92ZWQiCi0gIHN0cmljdCBtb2RlOiAi
VGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQgWzkwMDcxOTkyNTQ3NDA5ODksIDkwMDcxOTky
NTQ3NDA5OTBdIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuIGFycmF5TGlrZVsnOTAwNzE5OTI1
NDc0MDk4OSddIGFuZCBhcnJheUxpa2VbJzkwMDcxOTkyNTQ3NDA5OTAnXSBhcmUgcmVtb3ZlZCIK
LXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zcGxpY2UvbGVuZ3RoLWV4Y2VlZGluZy1p
bnRlZ2VyLWxpbWl0LXNocmluay1hcnJheS5qczoKLSAgZGVmYXVsdDogIlRlc3QyNjJFcnJvcjog
RXhwZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQwOTg3XSB0byBoYXZlIHRoZSBzYW1lIGNvbnRl
bnRzLiBhcnJheUxpa2VbJzkwMDcxOTkyNTQ3NDA5ODcnXSBpcyByZW1vdmVkIgotICBzdHJpY3Qg
bW9kZTogIlRlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW10gYW5kIFs5MDA3MTk5MjU0NzQwOTg3XSB0
byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiBhcnJheUxpa2VbJzkwMDcxOTkyNTQ3NDA5ODcnXSBp
cyByZW1vdmVkIgogdGVzdC9idWlsdC1pbnMvQXJyYXkvcHJvdG90eXBlL3NwbGljZS9wcm9wZXJ0
eS10cmFwcy1vcmRlci13aXRoLXNwZWNpZXMuanM6CiAgIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6
IEV4cGVjdGVkIFtkZWZpbmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydHksIHNldCwgZ2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yLCBkZWZpbmVQcm9wZXJ0eV0gYW5kIFtkZWZpbmVQcm9wZXJ0eSwgZGVm
aW5lUHJvcGVydHldIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuICcKICAgc3RyaWN0IG1vZGU6
ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtkZWZpbmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydHks
IHNldCwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLCBkZWZpbmVQcm9wZXJ0eV0gYW5kIFtkZWZp
bmVQcm9wZXJ0eSwgZGVmaW5lUHJvcGVydHldIHRvIGhhdmUgdGhlIHNhbWUgY29udGVudHMuICcK
LXRlc3QvYnVpbHQtaW5zL0FycmF5L3Byb3RvdHlwZS9zcGxpY2UvdGhyb3dzLWlmLWludGVnZXIt
bGltaXQtZXhjZWVkZWQuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IExlbmd0aCBpcyAy
Kio1MyAtIDEgRXhwZWN0ZWQgYSBUeXBlRXJyb3IgYnV0IGdvdCBhIEVycm9yJwotICBzdHJpY3Qg
bW9kZTogJ1Rlc3QyNjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBhIFR5cGVF
cnJvciBidXQgZ290IGEgRXJyb3InCi10ZXN0L2J1aWx0LWlucy9BcnJheS9wcm90b3R5cGUvdW5z
aGlmdC9jbGFtcHMtdG8taW50ZWdlci1saW1pdC5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJv
cjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3Mjk1wrss
IMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwotICBzdHJpY3QgbW9kZTogJ1Rlc3Qy
NjJFcnJvcjogTGVuZ3RoIGlzIDIqKjUzIC0gMSBFeHBlY3RlZCBTYW1lVmFsdWUowqs0Mjk0OTY3
Mjk1wrssIMKrOTAwNzE5OTI1NDc0MDk5McK7KSB0byBiZSB0cnVlJwogdGVzdC9idWlsdC1pbnMv
QXJyYXlCdWZmZXIvcHJvdG90eXBlL2J5dGVMZW5ndGgvZGV0YWNoZWQtYnVmZmVyLmpzOgogICBk
ZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBhIFR5cGVFcnJvciB0byBiZSB0aHJvd24g
YnV0IG5vIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGF0IGFsbCcKICAgc3RyaWN0IG1vZGU6ICdUZXN0
MjYyRXJyb3I6IEV4cGVjdGVkIGEgVHlwZUVycm9yIHRvIGJlIHRocm93biBidXQgbm8gZXhjZXB0
aW9uIHdhcyB0aHJvd24gYXQgYWxsJwpAQCAtMzEwNCwxOCArMzA1MCw2IEBAIHRlc3QvbGFuZ3Vh
Z2UvZ2xvYmFsLWNvZGUvc2NyaXB0LWRlY2wtZnUKIHRlc3QvbGFuZ3VhZ2UvZ2xvYmFsLWNvZGUv
c2NyaXB0LWRlY2wtdmFyLWVyci5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0
ZWQgYSBUeXBlRXJyb3IgdG8gYmUgdGhyb3duIGJ1dCBubyBleGNlcHRpb24gd2FzIHRocm93biBh
dCBhbGwnCiAgIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBhIFR5cGVFcnJv
ciB0byBiZSB0aHJvd24gYnV0IG5vIGV4Y2VwdGlvbiB3YXMgdGhyb3duIGF0IGFsbCcKLXRlc3Qv
bGFuZ3VhZ2UvaWRlbnRpZmllcnMvcGFydC11bmljb2RlLTEzLjAuMC1lc2NhcGVkLmpzOgotICBk
ZWZhdWx0OiAiU3ludGF4RXJyb3I6IEludmFsaWQgdW5pY29kZSBlc2NhcGUgaW4gaWRlbnRpZmll
cjogJ19cXHUwQjU1JyIKLSAgc3RyaWN0IG1vZGU6ICJTeW50YXhFcnJvcjogSW52YWxpZCB1bmlj
b2RlIGVzY2FwZSBpbiBpZGVudGlmaWVyOiAnX1xcdTBCNTUnIgotdGVzdC9sYW5ndWFnZS9pZGVu
dGlmaWVycy9wYXJ0LXVuaWNvZGUtMTMuMC4wLmpzOgotICBkZWZhdWx0OiAiU3ludGF4RXJyb3I6
IEludmFsaWQgY2hhcmFjdGVyICdcXHUwYjU1JyIKLSAgc3RyaWN0IG1vZGU6ICJTeW50YXhFcnJv
cjogSW52YWxpZCBjaGFyYWN0ZXIgJ1xcdTBiNTUnIgotdGVzdC9sYW5ndWFnZS9pZGVudGlmaWVy
cy9zdGFydC11bmljb2RlLTEzLjAuMC1lc2NhcGVkLmpzOgotICBkZWZhdWx0OiAiU3ludGF4RXJy
b3I6IEludmFsaWQgdW5pY29kZSBlc2NhcGUgaW4gaWRlbnRpZmllcjogJ1xcdTA4QkUnIgotICBz
dHJpY3QgbW9kZTogIlN5bnRheEVycm9yOiBJbnZhbGlkIHVuaWNvZGUgZXNjYXBlIGluIGlkZW50
aWZpZXI6ICdcXHUwOEJFJyIKLXRlc3QvbGFuZ3VhZ2UvaWRlbnRpZmllcnMvc3RhcnQtdW5pY29k
ZS0xMy4wLjAuanM6Ci0gIGRlZmF1bHQ6ICJTeW50YXhFcnJvcjogSW52YWxpZCBjaGFyYWN0ZXIg
J1xcdTA4YmUnIgotICBzdHJpY3QgbW9kZTogIlN5bnRheEVycm9yOiBJbnZhbGlkIGNoYXJhY3Rl
ciAnXFx1MDhiZSciCiB0ZXN0L2xhbmd1YWdlL2xpdGVyYWxzL3JlZ2V4cC91LWFzdHJhbC1jaGFy
LWNsYXNzLWludmVydC5qczoKICAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgU2Ft
ZVZhbHVlKMKr77+9wrssIMKrbnVsbMK7KSB0byBiZSB0cnVlJwogICBzdHJpY3QgbW9kZTogJ1Rl
c3QyNjJFcnJvcjogRXhwZWN0ZWQgU2FtZVZhbHVlKMKr77+9wrssIMKrbnVsbMK7KSB0byBiZSB0
cnVlJwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjA5MTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NzQgQEAKKzIwMjAtMDQtMzAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAg
ICAgICAgV2UgY2FuJ3QgY2FzdCB0b0xlbmd0aCByZXN1bHQgdG8gdW5zaWduZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTIwNQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vNjI2MjU1NjI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1
enVraS4KKworICAgICAgICB0b0xlbmd0aCwgYWNjb3JkaW5nIHRvIHRoZSBzcGVjLCByZXR1cm5z
IGEgNTMtYml0IGludGVnZXIuIEluIG91cgorICAgICAgICBpbXBsZW1lbnRhdGlvbiwgd2UgcmV0
dXJuIGEgZG91YmxlLiBIb3dldmVyLCB0aGVyZSB3ZXJlIG1hbnkgY2FsbHNpdGVzCisgICAgICAg
IHRoYXQgZGlkIHNvbWV0aGluZyBsaWtlOgorICAgICAgICBgYGAKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdG9MZW5ndGgob2JqKTsKKyAgICAgICAgYGBgCisgICAgICAgIAorICAgICAgICBU
aGlzIGlzIGJhZCBmb3IgYSBmZXcgcmVhc29uczoKKyAgICAgICAgLSBDYXN0aW5nIHRvIHVuc2ln
bmVkIGZyb20gZG91YmxlIGlzIHVuZGVmaW5lZCBiZWhhdmlvciB3aGVuIHRoZSBpbnRlZ2VyCisg
ICAgICAgIGlzIGdyZWF0ZXIgdGhhbiBVSU5UX01BWC4gSW4gcHJhY3RpY2UsIHRoaXMgbWVhbnMg
dGhhdCB3ZSdkIGhhdmUgZGlmZmVyZW50CisgICAgICAgIGVuZ2luZSBiZWhhdmlvciBkZXBlbmRp
bmcgb24gd2hhdCBhcmNoaXRlY3R1cmUgd2UnZCBiZSBydW5uaW5nIG9uLiBGb3IKKyAgICAgICAg
ZXhhbXBsZSwgaWYgdGhlIGxlbmd0aCB3ZXJlIFVJTlRfTUFYICsgMSwgb24geDg2LCB3ZSdkIHRy
ZWF0IHRoZQorICAgICAgICBsZW5ndGggYXMgemVyby4gT24gYXJtNjQsIHdlJ2QgdHJlYXQgaXQg
YXMgVUlOVF9NQVguIEJvdGggYXJlIHdyb25nLgorICAgICAgICAtIFdlIHdlcmVuJ3Qgc3BlYyBj
b21wbGlhbnQuIFdlIHdlcmUganVzdCBpZ25vcmluZyB0aGF0IHRoZXNlIG51bWJlcnMgY291bGQK
KyAgICAgICAgYmUgNTMtYml0IGludGVnZXJzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBhZGRyZXNzZXMgZWFjaCBiYWQgdXNlIG9mIHRoZSB1bmRlZmluZWQgYmVoYXZpb3IsIGFuZCBi
eSBkb2luZyBzbywKKyAgICAgICAgbWFrZXMgdXMgbW9yZSBzcGVjIGNvbXBsaWFudC4KKworICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6Z2V0UHJvcGVydHkpOgorICAgICAgICAoSlND
OjpzZXRMZW5ndGgpOgorICAgICAgICAoSlNDOjphcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFy
dE9yRW5kKToKKyAgICAgICAgKEpTQzo6c2hpZnQpOgorICAgICAgICAoSlNDOjp1bnNoaWZ0KToK
KyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChK
U0M6OmFycmF5UHJvdG9GdW5jUG9wKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNQdXNo
KToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZXZlcnNlKToKKyAgICAgICAgKEpTQzo6
YXJyYXlQcm90b0Z1bmNTaGlmdCk6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jU2xpY2Up
OgorICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NwbGljZSk6CisgICAgICAgIChKU0M6OmFy
cmF5UHJvdG9GdW5jVW5TaGlmdCk6CisgICAgICAgIChKU0M6OmZhc3RJbmRleE9mKToKKyAgICAg
ICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNJbmRleE9mKToKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90
b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVyLmg6CisgICAg
ICAgIChKU0M6OklkZW50aWZpZXI6OmZyb20pOgorICAgICAgICAqIHJ1bnRpbWUvSW50bE9iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OmNhbm9uaWNhbGl6ZUxvY2FsZUxpc3QpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpTdHJp
bmdpZmllcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpIb2xkZXI6OmFwcGVuZE5leHRQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6CisgICAgICAgICogcnVudGlt
ZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpoYXNQcm9wZXJ0eSBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6cHV0QnlJbmRleElubGluZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJ
bmRleCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjYW5HZXRJbmRleFF1aWNrbHkgY29uc3Qp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dHJ5R2V0SW5kZXhRdWlja2x5IGNvbnN0KToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0UHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3Bl
cnR5KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldCBjb25zdCk6CisgICAgICAgICogcnVu
dGltZS9Qcm9wZXJ0eVNsb3QuaDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlTbG90OjpnZXRWYWx1
ZSBjb25zdCk6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6
OmZ1bmN0aW9uU2V0VXNlclByZWZlcnJlZExhbmd1YWdlcyk6CisKIDIwMjAtMDQtMjkgIEFsZXhl
eSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIEFzeW5jRnJvbVN5
bmNJdGVyYXRvciBtZXRob2RzIHNob3VsZCBub3QgcGFzcyBhYnNlbnQgdmFsdWVzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2
MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyOCw3ICs4MjgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlWYWxCZXlvCiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAg
ICAgIG9iamVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIGluZGV4LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdHJ1ZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJbmRl
eElubGluZShnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKQEAgLTg0NCw3ICs4NDQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxCZXlvCiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIG9i
amVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIGluZGV4LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOworICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxp
bmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW5kZXgpLCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IApAQCAtODYyLDcgKzg2Miw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREb3Vi
bGVCeVYKICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91
YmxlLCB2YWx1ZSk7CiAgICAgCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0
LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdCwgaW5kZXgsIGpzVmFsdWUsIHRydWUpOwor
ICAgICAgICBvYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oaW5kZXgpLCBqc1ZhbHVlLCB0cnVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKQEAgLTg4MCw3ICs4ODAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0RG91YmxlQnlWCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgdmFsdWUpOwogICAgIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAg
IG9iamVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIGluZGV4LCBqc1ZhbHVlLCBm
YWxzZSk7CisgICAgICAgIG9iamVjdC0+cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIGpzVmFsdWUsIGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTg5OCw3ICs4OTgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0RG91YmxlQnlWCiAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gSlNWYWx1ZShKU1Zh
bHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWUpOwogCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCBqc1ZhbHVl
LCAwLCBQdXREaXJlY3RJbmRleFNob3VsZFRocm93KTsKKyAgICAgICAgb2JqZWN0LT5wdXREaXJl
Y3RJbmRleChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90PihpbmRleCksIGpzVmFs
dWUsIDAsIFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC05MTUsNyArOTE1LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dERv
dWJsZUJ5VgogICAgIEpTVmFsdWUganNWYWx1ZSA9IEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNE
b3VibGUsIHZhbHVlKTsKIAogICAgIGlmIChpbmRleCA+PSAwKSB7Ci0gICAgICAgIG9iamVjdC0+
cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBpbmRleCwganNWYWx1ZSk7CisgICAgICAgIG9i
amVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
aW5kZXgpLCBqc1ZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAwMyw3ICsx
MDAzLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZQogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVy
YXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAgICAg
aWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxP
YmplY3QsIGluZGV4LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgMCwgUHV0RGlyZWN0
SW5kZXhTaG91bGRUaHJvdyk7CisgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgoZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW5kZXgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZFZhbHVlKSwgMCwgUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgCkBAIC0xMDE4LDcgKzEwMTgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxEaXJlCiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCiAgICAgaWYgKGluZGV4ID49IDApIHsKLSAg
ICAgICAgb2JqZWN0LT5wdXREaXJlY3RJbmRleChnbG9iYWxPYmplY3QsIGluZGV4LCBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CisgICAgICAgIG9iamVjdC0+cHV0RGlyZWN0SW5kZXgo
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oaW5kZXgpLCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI2
MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5NzksNyArMTk3OSw3IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpT
VmFsdWUgZ2V0QnlWYWwoSlMKICAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPnNldE91dE9m
Qm91bmRzKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAg
ICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgICAg
ICAgICAgaWYgKG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpKQorICAgICAgICAgICAgaWYg
KG9iamVjdC0+Y2FuR2V0SW5kZXhRdWlja2x5KHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkpOwogCiAgICAg
ICAgICAgICBib29sIHNraXBNYXJraW5nT3V0T2ZCb3VuZHMgPSBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgQXJyYXlQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEFycmF5IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0
YXRpYyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0UHJvcGVydHkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgaW5kZXgpCitzdGF0aWMgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGdldFByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBvYmplY3QsIHVpbnQ2NF90IGluZGV4KQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CkBAIC0xNzksMTIgKzE3OSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHB1dExl
bmd0aChKU0dsCiAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsIFJl
YWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKIH0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXRMZW5ndGgoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0mIHZtLCBKU09iamVj
dCogb2JqLCB1bnNpZ25lZCB2YWx1ZSkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TGVu
Z3RoKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZNJiB2bSwgSlNPYmplY3QqIG9iaiwg
dWludDY0X3QgdmFsdWUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IHRydWU7CiAg
ICAgaWYgKGlzSlNBcnJheShvYmopKSB7Ci0gICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqKS0+
c2V0TGVuZ3RoKGdsb2JhbE9iamVjdCwgdmFsdWUsIHRocm93RXhjZXB0aW9uKTsKKyAgICAgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkgPT0gdmFsdWUpOworICAgICAgICBq
c0Nhc3Q8SlNBcnJheSo+KG9iaiktPnNldExlbmd0aChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PHVpbnQzMl90Pih2YWx1ZSksIHRocm93RXhjZXB0aW9uKTsKICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKICAgICB9CiAgICAgc2NvcGUucmVsZWFzZSgpOwpAQCAt
MjkxLDcgKzI5Miw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YK
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RF
bXB0eUFycmF5KGdsb2JhbE9iamVjdCwgbnVsbHB0ciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxl
bmd0aCkpKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW5k
ZXhGcm9tU3RhcnRPckVuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCB1bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHVuZGVmaW5lZFZhbHVlID0gMCkKK3N0YXRp
YyBpbmxpbmUgdWludDY0X3QgYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlLCB1aW50NjRfdCBsZW5ndGgs
IHVpbnQ2NF90IHVuZGVmaW5lZFZhbHVlID0gMCkKIHsKICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWQoKSkKICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFZhbHVlOwpAQCAtMjk5LDkgKzMwMCw5IEBA
IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgYXJndW1lbnRDbGFtcGVkSW4KICAgICBkb3VibGUgaW5k
ZXhEb3VibGUgPSB2YWx1ZS50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoaW5kZXhE
b3VibGUgPCAwKSB7CiAgICAgICAgIGluZGV4RG91YmxlICs9IGxlbmd0aDsKLSAgICAgICAgcmV0
dXJuIGluZGV4RG91YmxlIDwgMCA/IDAgOiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXhEb3Vi
bGUpOworICAgICAgICByZXR1cm4gaW5kZXhEb3VibGUgPCAwID8gMCA6IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihpbmRleERvdWJsZSk7CiAgICAgfQotICAgIHJldHVybiBpbmRleERvdWJsZSA+IGxl
bmd0aCA/IGxlbmd0aCA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleERvdWJsZSk7CisgICAg
cmV0dXJuIGluZGV4RG91YmxlID4gbGVuZ3RoID8gbGVuZ3RoIDogc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGluZGV4RG91YmxlKTsKIH0KIAogLy8gVGhlIHNoaWZ0L3Vuc2hpZnQgZnVuY3Rpb24gaW1w
bGVtZW50IHRoZSBzaGlmdC91bnNoaWZ0IGJlaGF2aW91ciByZXF1aXJlZApAQCAtMzIwLDMzICsz
MjEsMzYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBhcmd1bWVudENsYW1wZWRJbgogLy8gbXVz
dCBiZSBpbnRyb2R1Y2luZyBuZXcgdmFsdWVzLgogCiB0ZW1wbGF0ZTxKU0FycmF5OjpTaGlmdENv
dW50TW9kZSBzaGlmdENvdW50TW9kZT4KLXZvaWQgc2hpZnQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIHRoaXNPYmosIHVuc2lnbmVkIGhlYWRlciwgdW5zaWduZWQgY3Vy
cmVudENvdW50LCB1bnNpZ25lZCByZXN1bHRDb3VudCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBz
aGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iaiwgdWlu
dDY0X3QgaGVhZGVyLCB1aW50NjRfdCBjdXJyZW50Q291bnQsIHVpbnQ2NF90IHJlc3VsdENvdW50
LCB1aW50NjRfdCBsZW5ndGgpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFJFTEVBU0Vf
QVNTRVJUKGN1cnJlbnRDb3VudCA+IHJlc3VsdENvdW50KTsKLSAgICB1bnNpZ25lZCBjb3VudCA9
IGN1cnJlbnRDb3VudCAtIHJlc3VsdENvdW50OworICAgIHVpbnQ2NF90IGNvdW50ID0gY3VycmVu
dENvdW50IC0gcmVzdWx0Q291bnQ7CiAKICAgICBSRUxFQVNFX0FTU0VSVChoZWFkZXIgPD0gbGVu
Z3RoKTsKICAgICBSRUxFQVNFX0FTU0VSVChjdXJyZW50Q291bnQgPD0gKGxlbmd0aCAtIGhlYWRl
cikpOwogCiAgICAgaWYgKGlzSlNBcnJheSh0aGlzT2JqKSkgewogICAgICAgICBKU0FycmF5KiBh
cnJheSA9IGFzQXJyYXkodGhpc09iaik7Ci0gICAgICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPT0g
bGVuZ3RoICYmIGFycmF5LT5zaGlmdENvdW50PHNoaWZ0Q291bnRNb2RlPihnbG9iYWxPYmplY3Qs
IGhlYWRlciwgY291bnQpKQorICAgICAgICB1aW50MzJfdCBoZWFkZXIzMiA9IGhlYWRlcjsKKyAg
ICAgICAgQVNTRVJUKGhlYWRlcjMyID09IGhlYWRlcik7CisgICAgICAgIGlmIChhcnJheS0+bGVu
Z3RoKCkgPT0gbGVuZ3RoICYmIGFycmF5LT5zaGlmdENvdW50PHNoaWZ0Q291bnRNb2RlPihnbG9i
YWxPYmplY3QsIGhlYWRlcjMyLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGhlYWRlciA9IGhlYWRlcjMyOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgayA9IGhlYWRl
cjsgayA8IGxlbmd0aCAtIGN1cnJlbnRDb3VudDsgKytrKSB7Ci0gICAgICAgIHVuc2lnbmVkIGZy
b20gPSBrICsgY3VycmVudENvdW50OwotICAgICAgICB1bnNpZ25lZCB0byA9IGsgKyByZXN1bHRD
b3VudDsKKyAgICBmb3IgKHVpbnQ2NF90IGsgPSBoZWFkZXI7IGsgPCBsZW5ndGggLSBjdXJyZW50
Q291bnQ7ICsraykgeworICAgICAgICB1aW50NjRfdCBmcm9tID0gayArIGN1cnJlbnRDb3VudDsK
KyAgICAgICAgdWludDY0X3QgdG8gPSBrICsgcmVzdWx0Q291bnQ7CiAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBnZXRQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHRoaXNPYmosIGZyb20pOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICBpZiAodmFsdWUp
IHsKICAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCB0
bywgdmFsdWUsIHRydWUpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
dm9pZCgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRo
aXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmosIGds
b2JhbE9iamVjdCwgdG8pOworICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iai0+ZGVs
ZXRlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB0byk7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9E
ZWxldGVQcm9wZXJ0eUVycm9yKTsKQEAgLTM1NCw4ICszNTgsOCBAQCB2b2lkIHNoaWZ0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgZm9yICh1bnNpZ25lZCBrID0gbGVuZ3RoOyBrID4gbGVuZ3RoIC0gY291bnQ7IC0taykg
ewotICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPmRlbGV0
ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIGsgLSAxKTsKKyAgICBmb3Ig
KHVpbnQ2NF90IGsgPSBsZW5ndGg7IGsgPiBsZW5ndGggLSBjb3VudDsgLS1rKSB7CisgICAgICAg
IGJvb2wgc3VjY2VzcyA9IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgayAt
IDEpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBAIC0zNjUsMjQgKzM2OSwy
OSBAQCB2b2lkIHNoaWZ0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiB9CiAKIHRlbXBs
YXRlPEpTQXJyYXk6OlNoaWZ0Q291bnRNb2RlIHNoaWZ0Q291bnRNb2RlPgotdm9pZCB1bnNoaWZ0
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0aGlzT2JqLCB1bnNpZ25l
ZCBoZWFkZXIsIHVuc2lnbmVkIGN1cnJlbnRDb3VudCwgdW5zaWduZWQgcmVzdWx0Q291bnQsIHVu
c2lnbmVkIGxlbmd0aCkKK3ZvaWQgdW5zaGlmdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogdGhpc09iaiwgdWludDY0X3QgaGVhZGVyLCB1aW50NjRfdCBjdXJyZW50Q291
bnQsIHVpbnQ2NF90IHJlc3VsdENvdW50LCB1aW50NjRfdCBsZW5ndGgpCiB7CisgICAgQVNTRVJU
KGhlYWRlciA8PSBtYXhTYWZlSW50ZWdlcigpKTsKKyAgICBBU1NFUlQoY3VycmVudENvdW50IDw9
IG1heFNhZmVJbnRlZ2VyKCkpOworICAgIEFTU0VSVChyZXN1bHRDb3VudCA8PSBtYXhTYWZlSW50
ZWdlcigpKTsKKyAgICBBU1NFUlQobGVuZ3RoIDw9IG1heFNhZmVJbnRlZ2VyKCkpOworCiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKIAogICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdENvdW50ID4gY3VycmVu
dENvdW50KTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IHJlc3VsdENvdW50IC0gY3VycmVudENvdW50
OworICAgIHVpbnQ2NF90IGNvdW50ID0gcmVzdWx0Q291bnQgLSBjdXJyZW50Q291bnQ7CiAKICAg
ICBSRUxFQVNFX0FTU0VSVChoZWFkZXIgPD0gbGVuZ3RoKTsKICAgICBSRUxFQVNFX0FTU0VSVChj
dXJyZW50Q291bnQgPD0gKGxlbmd0aCAtIGhlYWRlcikpOwogCi0gICAgLy8gR3VhcmQgYWdhaW5z
dCBvdmVyZmxvdy4KLSAgICBpZiAoY291bnQgPiBVSU5UX01BWCAtIGxlbmd0aCkgewotICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBpZiAoaXNKU0FycmF5KHRoaXNPYmopKSB7CisgICAgICAgIC8v
IFNwZWMgc2F5cyBpZiB3ZSB3b3VsZCBwcm9kdWNlIGFuIGFycmF5IG9mIHRoaXMgc2l6ZSwgd2Ug
bXVzdCB0aHJvdyBhIHJhbmdlIGVycm9yLgorICAgICAgICBpZiAoY291bnQgKyBsZW5ndGggPiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpIHsKKyAgICAgICAgICAgIHRocm93
UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBMZW5ndGhFeGNlZWRlZFRoZU1heGltdW1B
cnJheUxlbmd0aEVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAg
ICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh0aGlzT2JqKTsKICAgICAgICAgaWYgKGFycmF5
LT5sZW5ndGgoKSA9PSBsZW5ndGgpIHsKICAgICAgICAgICAgIGJvb2wgaGFuZGxlZCA9IGFycmF5
LT51bnNoaWZ0Q291bnQ8c2hpZnRDb3VudE1vZGU+KGdsb2JhbE9iamVjdCwgaGVhZGVyLCBjb3Vu
dCk7CkBAIC0zOTIsMTYgKzQwMSwxNiBAQCB2b2lkIHVuc2hpZnQoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGsgPSBsZW5n
dGggLSBjdXJyZW50Q291bnQ7IGsgPiBoZWFkZXI7IC0taykgewotICAgICAgICB1bnNpZ25lZCBm
cm9tID0gayArIGN1cnJlbnRDb3VudCAtIDE7Ci0gICAgICAgIHVuc2lnbmVkIHRvID0gayArIHJl
c3VsdENvdW50IC0gMTsKKyAgICBmb3IgKHVpbnQ2NF90IGsgPSBsZW5ndGggLSBjdXJyZW50Q291
bnQ7IGsgPiBoZWFkZXI7IC0taykgeworICAgICAgICB1aW50NjRfdCBmcm9tID0gayArIGN1cnJl
bnRDb3VudCAtIDE7CisgICAgICAgIHVpbnQ2NF90IHRvID0gayArIHJlc3VsdENvdW50IC0gMTsK
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdGhpc09i
aiwgZnJvbSk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAg
ICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgICAgdGhpc09iai0+cHV0QnlJbmRleElubGlu
ZShnbG9iYWxPYmplY3QsIHRvLCB2YWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gdGhpc09iai0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5
SW5kZXgodGhpc09iaiwgZ2xvYmFsT2JqZWN0LCB0byk7CisgICAgICAgICAgICBib29sIHN1Y2Nl
c3MgPSB0aGlzT2JqLT5kZWxldGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHRvKTsKICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoIXN1Y2Nlc3MpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKQEAgLTY4NSw4
ICs2OTQsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogCiAg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSB0aGlzVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOwor
ICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9i
YWxPYmplY3QsIHRoaXNPYmplY3QpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKKyAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKSB7CisgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxP
YmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7CisgICAgfQog
CiAgICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBjaGVja2VyKGdsb2JhbE9iamVjdCwgdGhpc09i
amVjdCk7CiAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgY2hlY2tl
ci5lYXJseVJldHVyblZhbHVlKCkpOwpAQCAtODY2LDcgKzg3OSw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUu
ZXhjZXB0aW9uKCkgPT0gIXRoaXNPYmopOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iaikpCiAg
ICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRv
TGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaikpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogCiAgICAgaWYg
KGxlbmd0aCA9PSAwKSB7CkBAIC04NzUsMTcgKzg4OCwyNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgfQogCi0gICAgSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqLT5nZXQo
Z2xvYmFsT2JqZWN0LCBsZW5ndGggLSAxKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqLT5tZXRob2RU
YWJsZSh2bSktPmRlbGV0ZVByb3BlcnR5QnlJbmRleCh0aGlzT2JqLCBnbG9iYWxPYmplY3QsIGxl
bmd0aCAtIDEpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0eUVycm9yKTsKLSAg
ICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAgfQotICAgIHNjb3BlLnJlbGVhc2Uo
KTsKLSAgICBwdXRMZW5ndGgoZ2xvYmFsT2JqZWN0LCB2bSwgdGhpc09iaiwganNOdW1iZXIobGVu
Z3RoIC0gMSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICBhdXRv
IHBlcmZvcm1Qb3AgPSBbJl0gKGF1dG8gaW5kZXgsIEpTVmFsdWUgaW5kZXhWYWx1ZSkgeworICAg
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IHRoaXNPYmotPmdldChnbG9iYWxPYmplY3QsIGluZGV4KTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Cisg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGdsb2JhbE9iamVj
dCwgaW5kZXgpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdWNjZXNzKSkgeworICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgVW5hYmxlVG9EZWxldGVQcm9wZXJ0
eUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICB9
CisgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgcHV0TGVuZ3RoKGdsb2JhbE9iamVj
dCwgdm0sIHRoaXNPYmosIGluZGV4VmFsdWUpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKHJlc3VsdCk7CisgICAgfTsKKworICAgIHN0YXRpY19hc3NlcnQoTUFYX0FSUkFZX0lOREVY
ICsgMSA+IE1BWF9BUlJBWV9JTkRFWCk7CisgICAgaWYgKExJS0VMWShsZW5ndGggPD0gTUFYX0FS
UkFZX0lOREVYICsgMSkpCisgICAgICAgIHJldHVybiBwZXJmb3JtUG9wKHN0YXRpY19jYXN0PHVp
bnQzMl90PihsZW5ndGggLSAxKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0
aCAtIDEpKSk7CisgICAgcmV0dXJuIHBlcmZvcm1Qb3AoSWRlbnRpZmllcjo6ZnJvbSh2bSwgbGVu
Z3RoIC0gMSksIGpzTnVtYmVyKGxlbmd0aCAtIDEpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1B1c2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MDUsMTggKzkyNSwxOSBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNj
b3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmop
KQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGgg
PSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopOworICAgIHVpbnQ2NF90IGxlbmd0aCA9
IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKKyAgICB1
bnNpZ25lZCBhcmdDb3VudCA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwogCi0gICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOyBuKyspIHsK
LSAgICAgICAgLy8gQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3c7IHdoZXJlIHNhZmUgd2UgY2Fu
IGRvIGEgZmFzdCBwdXQgYnkgaW5kZXguCi0gICAgICAgIGlmIChsZW5ndGggKyBuID49IGxlbmd0
aCkKLSAgICAgICAgICAgIHRoaXNPYmotPm1ldGhvZFRhYmxlKHZtKS0+cHV0QnlJbmRleCh0aGlz
T2JqLCBnbG9iYWxPYmplY3QsIGxlbmd0aCArIG4sIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1l
bnQobiksIHRydWUpOworICAgIGlmIChVTkxJS0VMWShsZW5ndGggKyBhcmdDb3VudCA+IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihtYXhTYWZlSW50ZWdlcigpKSkpCisgICAgICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUsICJwdXNoIGNhbm5vdCBwcm9kdWNlIGFu
IGFycmF5IG9mIGxlbmd0aCBsYXJnZXIgdGhhbiAoMiAqKiA1MykgLSAxIl9zKTsKKworICAgIGZv
ciAodW5zaWduZWQgbiA9IDA7IG4gPCBhcmdDb3VudDsgbisrKSB7CisgICAgICAgIGlmIChMSUtF
TFkobGVuZ3RoICsgbiA8PSBNQVhfQVJSQVlfSU5ERVgpKQorICAgICAgICAgICAgdGhpc09iai0+
bWV0aG9kVGFibGUodm0pLT5wdXRCeUluZGV4KHRoaXNPYmosIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCArIG4pLCBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50
KG4pLCB0cnVlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdCh0aGlzT2JqKTsKLSAgICAgICAgICAgIGF1dG8gc3RyaW5nID0gSlNWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ2NF90PihsZW5ndGgpICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikpLnRvV1RGU3Ry
aW5nKGdsb2JhbE9iamVjdCk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1l
ID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgc3RyaW5nKTsKKyAgICAgICAgICAgIElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcjo6ZnJvbSh2bSwgbGVuZ3RoICsgbik7CiAg
ICAgICAgICAgICB0aGlzT2JqLT5tZXRob2RUYWJsZSh2bSktPnB1dCh0aGlzT2JqLCBnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSwgY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChuKSwgc2xv
dCk7CiAgICAgICAgIH0KICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CkBAIC05MzgsNyArOTU5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheVByb3RvRgogICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCiAgICAgICAg
IHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5n
dGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KTsKKyAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0
aWNfY2FzdDx1aW50NjRfdD4odG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSk7CiAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICB0
aGlzT2JqZWN0LT5lbnN1cmVXcml0YWJsZSh2bSk7CkBAIC05ODAsOSArMTAwMSw5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICB9CiAgICAgfQogCi0gICAg
dW5zaWduZWQgbWlkZGxlID0gbGVuZ3RoIC8gMjsKLSAgICBmb3IgKHVuc2lnbmVkIGxvd2VyID0g
MDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKLSAgICAgICAgdW5zaWduZWQgdXBwZXIgPSBs
ZW5ndGggLSBsb3dlciAtIDE7CisgICAgdWludDY0X3QgbWlkZGxlID0gbGVuZ3RoIC8gMjsKKyAg
ICBmb3IgKHVpbnQ2NF90IGxvd2VyID0gMDsgbG93ZXIgPCBtaWRkbGU7IGxvd2VyKyspIHsKKyAg
ICAgICAgdWludDY0X3QgdXBwZXIgPSBsZW5ndGggLSBsb3dlciAtIDE7CiAgICAgICAgIGJvb2wg
bG93ZXJFeGlzdHMgPSB0aGlzT2JqZWN0LT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGxvd2Vy
KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7
CiAgICAgICAgIEpTVmFsdWUgbG93ZXJWYWx1ZTsKQEAgLTk5OSwxMSArMTAyMCwxNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfQogCisgICAg
ICAgIGlmICghbG93ZXJFeGlzdHMgJiYgIXVwcGVyRXhpc3RzKSB7CisgICAgICAgICAgICAvLyBT
cGVjIHNheXMgdG8gZG8gbm90aGluZyB3aGVuIG5laXRoZXIgbG93ZXIgbm9yIHVwcGVyIGV4aXN0
LgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwogICAgICAgICBpZiAodXBwZXJF
eGlzdHMpIHsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFs
T2JqZWN0LCBsb3dlciwgdXBwZXJWYWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKHZtKS0+ZGVs
ZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGdsb2JhbE9iamVjdCwgbG93ZXIpOworICAg
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iamVjdC0+ZGVsZXRlUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBsb3dlcik7CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghc3VjY2VzcykpIHsK
ICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBVbmFi
bGVUb0RlbGV0ZVByb3BlcnR5RXJyb3IpOwpAQCAtMTAxNSw3ICsxMDQxLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICAgICAgdGhpc09iamVjdC0+
cHV0QnlJbmRleElubGluZShnbG9iYWxPYmplY3QsIHVwcGVyLCBsb3dlclZhbHVlLCB0cnVlKTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdGhpc09iamVj
dC0+bWV0aG9kVGFibGUodm0pLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iamVjdCwgZ2xv
YmFsT2JqZWN0LCB1cHBlcik7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0aGlzT2JqZWN0
LT5kZWxldGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHVwcGVyKTsKICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgICAgICAgICAgaWYg
KFVOTElLRUxZKCFzdWNjZXNzKSkgewogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIFVuYWJsZVRvRGVsZXRlUHJvcGVydHlFcnJvcik7CkBAIC0xMDM0
LDcgKzEwNjAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAg
ICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUo
KTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmop
OworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChn
bG9iYWxPYmplY3QsIHRoaXNPYmopKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmIChsZW5ndGggPT0gMCkgewpAQCAtMTA2MSwxMiAr
MTA4NywxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9GCiAgICAg
RVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICF0aGlzT2JqKTsKICAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICByZXR1cm4geyB9OwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7CisgICAgdWludDY0X3Qg
bGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgdW5zaWduZWQgYmVnaW4gPSBhcmd1bWVudENs
YW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSwgbGVuZ3RoKTsKKyAgICB1aW50NjRfdCBiZWdpbiA9IGFyZ3VtZW50Q2xhbXBlZEluZGV4
RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBsZW5n
dGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgdW5zaWduZWQg
ZW5kID0gYXJndW1lbnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZS0+YXJndW1lbnQoMSksIGxlbmd0aCwgbGVuZ3RoKTsKKyAgICB1aW50NjRfdCBlbmQg
PSBhcmd1bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZy
YW1lLT5hcmd1bWVudCgxKSwgbGVuZ3RoLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKGVuZCA8IGJlZ2luKQogICAgICAgICBlbmQgPSBiZWdp
bjsKQEAgLTEwODgsNyArMTExNCwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5UHJvdG9GCiAgICAgaWYgKHNwZWNpZXNSZXN1bHQuZmlyc3QgPT0gU3BlY2llc0NvbnN0cnVj
dFJlc3VsdDo6Q3JlYXRlZE9iamVjdCkKICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5z
ZWNvbmQ7CiAgICAgZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5QXJyYXko
Z2xvYmFsT2JqZWN0LCBudWxscHRyLCBlbmQgLSBiZWdpbik7CisgICAgICAgIGlmIChVTkxJS0VM
WShlbmQgLSBiZWdpbiA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsK
KyAgICAgICAgICAgIHRocm93UmFuZ2VFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlLCBMZW5ndGhF
eGNlZWRlZFRoZU1heGltdW1BcnJheUxlbmd0aEVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiBl
bmNvZGVkSlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZ2xvYmFsT2JqZWN0LCBudWxscHRyLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZW5k
IC0gYmVnaW4pKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAg
ICB9CiAKQEAgLTEwOTYsOCArMTEyNiw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKICAgICAvLyB0aGF0IGNhbiBHQyAoZS5nLiBhbGxvY2F0aW5nIHRoZSByZXN1
bHQgYXJyYXkpLgogICAgIHRoaXNPYmotPnVzZSgpOwogCi0gICAgdW5zaWduZWQgbiA9IDA7Ci0g
ICAgZm9yICh1bnNpZ25lZCBrID0gYmVnaW47IGsgPCBlbmQ7IGsrKywgbisrKSB7CisgICAgdWlu
dDY0X3QgbiA9IDA7CisgICAgZm9yICh1aW50NjRfdCBrID0gYmVnaW47IGsgPCBlbmQ7IGsrKywg
bisrKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9IGdldFByb3BlcnR5KGdsb2JhbE9iamVjdCwgdGhp
c09iaiwgayk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAg
ICAgIGlmICh2KSB7CkBAIC0xMTIxLDcgKzExNTEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5UHJvdG9GCiAgICAgRVhDRVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlv
bigpID09ICF0aGlzT2JqKTsKICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmopKQogICAgICAgICBy
ZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChn
bG9iYWxPYmplY3QsIHRoaXNPYmopOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIGlmICghY2FsbEZy
YW1lLT5hcmd1bWVudENvdW50KCkpIHsKQEAgLTExNDUsMTAgKzExNzUsMTAgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgYWN0dWFsU3RhcnQgPSBhcmd1
bWVudENsYW1wZWRJbmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5h
cmd1bWVudCgwKSwgbGVuZ3RoKTsKKyAgICB1aW50NjRfdCBhY3R1YWxTdGFydCA9IGFyZ3VtZW50
Q2xhbXBlZEluZGV4RnJvbVN0YXJ0T3JFbmQoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApLCBsZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogCi0gICAgdW5zaWduZWQgYWN0dWFsRGVsZXRlQ291bnQgPSBsZW5ndGggLSBh
Y3R1YWxTdGFydDsKKyAgICB1aW50NjRfdCBhY3R1YWxEZWxldGVDb3VudCA9IGxlbmd0aCAtIGFj
dHVhbFN0YXJ0OwogICAgIGlmIChjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsKICAg
ICAgICAgZG91YmxlIGRlbGV0ZUNvdW50ID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludGVnZXIoZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CkBAIC0xMTU3LDggKzExODcsMTEgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgICAgICBlbHNlIGlmIChkZWxldGVD
b3VudCA+IGxlbmd0aCAtIGFjdHVhbFN0YXJ0KQogICAgICAgICAgICAgYWN0dWFsRGVsZXRlQ291
bnQgPSBsZW5ndGggLSBhY3R1YWxTdGFydDsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWN0
dWFsRGVsZXRlQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVsZXRlQ291bnQpOworICAg
ICAgICAgICAgYWN0dWFsRGVsZXRlQ291bnQgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4oZGVsZXRl
Q291bnQpOwogICAgIH0KKyAgICB1bnNpZ25lZCBpdGVtQ291bnQgPSBzdGQ6Om1heDxpbnQ+KGNh
bGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIC0gMiwgMCk7CisgICAgaWYgKFVOTElLRUxZKGxlbmd0
aCAtIGFjdHVhbERlbGV0ZUNvdW50ICsgaXRlbUNvdW50ID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1heFNhZmVJbnRlZ2VyKCkpKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xv
YmFsT2JqZWN0LCBzY29wZSwgIlNwbGljZSBjYW5ub3QgcHJvZHVjZSBhbiBhcnJheSBvZiBsZW5n
dGggbGFyZ2VyIHRoYW4gKDIgKiogNTMpIC0gMSJfcyk7CiAKICAgICBzdGQ6OnBhaXI8U3BlY2ll
c0NvbnN0cnVjdFJlc3VsdCwgSlNPYmplY3QqPiBzcGVjaWVzUmVzdWx0ID0gc3BlY2llc0NvbnN0
cnVjdEFycmF5KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgYWN0dWFsRGVsZXRlQ291bnQpOwogICAg
IEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAoc3BlY2llc1Jlc3VsdC5m
aXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpFeGNlcHRpb24pKTsKQEAgLTExNzUsMTMg
KzEyMDgsMTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
ICAgICBpZiAoc3BlY2llc1Jlc3VsdC5maXJzdCA9PSBTcGVjaWVzQ29uc3RydWN0UmVzdWx0OjpD
cmVhdGVkT2JqZWN0KQogICAgICAgICAgICAgcmVzdWx0ID0gc3BlY2llc1Jlc3VsdC5zZWNvbmQ7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbihBcnJheVdpdGhVbmRlY2lkZWQpLCBhY3R1YWxEZWxldGVDb3VudCk7CisgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoYWN0dWFsRGVsZXRlQ291bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dSYW5nZUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIExlbmd0aEV4Y2VlZGVkVGhlTWF4aW11bUFycmF5TGVuZ3RoRXJy
b3IpOworICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVkSlNWYWx1ZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJh
eVdpdGhVbmRlY2lkZWQpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYWN0dWFsRGVsZXRlQ291bnQp
KTsKICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkgewogICAgICAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZW5jb2RlZEpTVmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7ICsraykg
eworICAgICAgICBmb3IgKHVpbnQ2NF90IGsgPSAwOyBrIDwgYWN0dWFsRGVsZXRlQ291bnQ7ICsr
aykgewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0gZ2V0UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCB0
aGlzT2JqLCBrICsgYWN0dWFsU3RhcnQpOwogICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoIXYp
KQpAQCAtMTE5MSw3ICsxMjI4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eVByb3RvRgogICAgICAgICB9CiAgICAgfQogCi0gICAgdW5zaWduZWQgaXRlbUNvdW50ID0gc3Rk
OjptYXg8aW50PihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSAtIDIsIDApOwogICAgIGlmIChp
dGVtQ291bnQgPCBhY3R1YWxEZWxldGVDb3VudCkgewogICAgICAgICBzaGlmdDxKU0FycmF5OjpT
aGlmdENvdW50Rm9yU3BsaWNlPihnbG9iYWxPYmplY3QsIHRoaXNPYmosIGFjdHVhbFN0YXJ0LCBh
Y3R1YWxEZWxldGVDb3VudCwgaXRlbUNvdW50LCBsZW5ndGgpOwogICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKQEAgLTEyMTksMTQgKzEyNTUsMTMg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAgIEVYQ0VQVElP
Tl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iaik7CiAgICAgaWYgKFVOTElL
RUxZKCF0aGlzT2JqKSkKICAgICAgICAgcmV0dXJuIGVuY29kZWRKU1ZhbHVlKCk7Ci0gICAgZG91
YmxlIGRvdWJsZUxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgdGhpc09iaik7Ci0gICAg
dW5zaWduZWQgbGVuZ3RoID0gZG91YmxlTGVuZ3RoOworICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0
YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmopKTsKICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKIAogICAgIHVu
c2lnbmVkIG5yQXJncyA9IGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpOwogICAgIGlmIChuckFy
Z3MpIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKGRvdWJsZUxlbmd0aCArIHN0YXRpY19jYXN0PGRv
dWJsZT4obnJBcmdzKSA+IG1heFNhZmVJbnRlZ2VyKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIkNhbm5vdCBzaGlmdCB0byBvZmZz
ZXQgZ3JlYXRlciB0aGFuICgyICoqIDUzKSAtIDEiX3MpOworICAgICAgICBpZiAoVU5MSUtFTFko
bGVuZ3RoICsgbnJBcmdzID4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1heFNhZmVJbnRlZ2VyKCkp
KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUsICJ1bnNoaWZ0IGNhbm5vdCBwcm9kdWNlIGFuIGFycmF5IG9mIGxlbmd0aCBsYXJnZXIgdGhh
biAoMiAqKiA1MykgLSAxIl9zKTsKICAgICAgICAgdW5zaGlmdDxKU0FycmF5OjpTaGlmdENvdW50
Rm9yU2hpZnQ+KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgMCwgMCwgbnJBcmdzLCBsZW5ndGgpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICB9CkBAIC0xMjQyLDE1ICsxMjc3LDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlQcm90b0YKIAogZW51bSBjbGFzcyBJbmRleE9mRGlyZWN0aW9uIHsgRm9yd2FyZCwgQmFj
a3dhcmQgfTsKIHRlbXBsYXRlPEluZGV4T2ZEaXJlY3Rpb24gZGlyZWN0aW9uPgotQUxXQVlTX0lO
TElORSBKU1ZhbHVlIGZhc3RJbmRleE9mKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZN
JiB2bSwgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCwgSlNWYWx1ZSBzZWFyY2hFbGVt
ZW50LCB1bnNpZ25lZCBpbmRleCkKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBmYXN0SW5kZXhPZihK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWTSYgdm0sIEpTQXJyYXkqIGFycmF5LCB1aW50
NjRfdCBsZW5ndGg2NCwgSlNWYWx1ZSBzZWFyY2hFbGVtZW50LCB1aW50NjRfdCBpbmRleDY0KQog
ewogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGJvb2wg
Y2FuRG9GYXN0UGF0aCA9IGFycmF5LT5jYW5Eb0Zhc3RJbmRleGVkQWNjZXNzKHZtKQotICAgICAg
ICAmJiBhcnJheS0+Z2V0QXJyYXlMZW5ndGgoKSA9PSBsZW5ndGg7IC8vIFRoZSBlZmZlY3RzIGlu
IGdldHRpbmcgYGluZGV4YCBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIGxlbmd0aCBvZiB0aGlzIGFy
cmF5LgorICAgICAgICAmJiBhcnJheS0+Z2V0QXJyYXlMZW5ndGgoKSA9PSBsZW5ndGg2NCAvLyBU
aGUgZWZmZWN0cyBpbiBnZXR0aW5nIGBpbmRleGAgY291bGQgaGF2ZSBjaGFuZ2VkIHRoZSBsZW5n
dGggb2YgdGhpcyBhcnJheS4KKyAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGluZGV4
NjQpID09IGluZGV4NjQ7CiAgICAgaWYgKCFjYW5Eb0Zhc3RQYXRoKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZSgpOwogCisgICAgdWludDMyX3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGxlbmd0aDY0KTsKKyAgICB1aW50MzJfdCBpbmRleCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihp
bmRleDY0KTsKKwogICAgIHN3aXRjaCAoYXJyYXktPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2Fz
ZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6IHsKICAgICAgICAgaWYgKCFzZWFyY2hFbGVtZW50
LmlzTnVtYmVyKCkpCkBAIC0xMzUxLDEwICsxMzkwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICBFWENFUFRJT05fQVNTRVJUKCEhc2NvcGUuZXhjZXB0
aW9uKCkgPT0gIXRoaXNPYmplY3QpOwogICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCiAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdG9MZW5ndGgoZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0KTsKKyAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1
aW50NjRfdD4odG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0KSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgIHVuc2lnbmVkIGluZGV4ID0gYXJndW1l
bnRDbGFtcGVkSW5kZXhGcm9tU3RhcnRPckVuZChnbG9iYWxPYmplY3QsIGNhbGxGcmFtZS0+YXJn
dW1lbnQoMSksIGxlbmd0aCk7CisgICAgdWludDY0X3QgaW5kZXggPSBhcmd1bWVudENsYW1wZWRJ
bmRleEZyb21TdGFydE9yRW5kKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSwg
bGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgIEpTVmFs
dWUgc2VhcmNoRWxlbWVudCA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCk7CiAKQEAgLTEzODksMTEg
KzE0MjgsMTEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRgogICAg
IEVYQ0VQVElPTl9BU1NFUlQoISFzY29wZS5leGNlcHRpb24oKSA9PSAhdGhpc09iamVjdCk7CiAg
ICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSB0b0xlbmd0aChnbG9iYWxPYmplY3QsIHRoaXNPYmplY3QpOworICAg
IHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChnbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QpKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
IHx8ICFsZW5ndGgpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLTEp
KTsKIAotICAgIHVuc2lnbmVkIGluZGV4ID0gbGVuZ3RoIC0gMTsKKyAgICB1aW50NjRfdCBpbmRl
eCA9IGxlbmd0aCAtIDE7CiAgICAgaWYgKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID49IDIp
IHsKICAgICAgICAgSlNWYWx1ZSBmcm9tVmFsdWUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpOwogICAgICAgICBkb3VibGUgZnJvbURvdWJsZSA9IGZyb21WYWx1ZS50b0ludGVnZXIo
Z2xvYmFsT2JqZWN0KTsKQEAgLTE0MDQsNyArMTQ0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgYXJyYXlQcm90b0YKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKC0xKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZyb21Eb3VibGUgPCBs
ZW5ndGgpCi0gICAgICAgICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tRG91
YmxlKTsKKyAgICAgICAgICAgIGluZGV4ID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGZyb21Eb3Vi
bGUpOwogICAgIH0KIAogICAgIEpTVmFsdWUgc2VhcmNoRWxlbWVudCA9IGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmll
ci5oCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
ZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsMTQgQEAgcHVibGljOgog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYsIHVuc2ln
bmVkIHkpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBJZGVudGlmaWVyIGZyb20oVk0m
LCBpbnQgeSk7Ci0gICAgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYsIGRvdWJsZSB5KTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSWRlbnRpZmllciBmcm9tKFZNJiwgZG91YmxlIHkp
OworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIElkZW50aWZpZXIgZnJvbShWTSYgdm0sIHVpbnQ2
NF90IHkpCisgICAgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHkpID09IHkp
CisgICAgICAgICAgICByZXR1cm4gZnJvbSh2bSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHkpKTsK
KyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+
KHkpKSA9PSB5KTsKKyAgICAgICAgcmV0dXJuIGZyb20odm0sIHN0YXRpY19jYXN0PGRvdWJsZT4o
eSkpOworICAgIH0KIAogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcu
aXNOdWxsKCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5p
c0VtcHR5KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGxP
YmplY3QuY3BwCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDExICszODcsMTEgQEAg
VmVjdG9yPFN0cmluZz4gY2Fub25pY2FsaXplTG9jYWxlTGlzdChKUwogICAgIEpTVmFsdWUgbGVu
Z3RoUHJvcGVydHkgPSBsb2NhbGVzT2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0
eU5hbWVzLT5sZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxT
dHJpbmc+KCkpOwogCi0gICAgZG91YmxlIGxlbmd0aCA9IGxlbmd0aFByb3BlcnR5LnRvTGVuZ3Ro
KGdsb2JhbE9iamVjdCk7CisgICAgdWludDY0X3QgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGxlbmd0aFByb3BlcnR5LnRvTGVuZ3RoKGdsb2JhbE9iamVjdCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFZlY3RvcjxTdHJpbmc+KCkpOwogCiAgICAgSGFzaFNldDxTdHJp
bmc+IHNlZW5TZXQ7Ci0gICAgZm9yIChkb3VibGUgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgewor
ICAgIGZvciAodWludDY0X3QgayA9IDA7IGsgPCBsZW5ndGg7ICsraykgewogICAgICAgICBib29s
IGtQcmVzZW50ID0gbG9jYWxlc09iamVjdC0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBrKTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgVmVjdG9yPFN0cmluZz4oKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShy
ZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDkgKzIzNiw5IEBAIFN0cmluZ2lmaWVyOjpT
dHJpbmdpZmllcihKU0dsb2JhbE9iamVjdCoKICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsICk7CiAgICAgICAgICAgICBpZiAoaXNBcnJheVJlcGxhY2VyKSB7CiAgICAgICAg
ICAgICAgICAgbV91c2luZ0FycmF5UmVwbGFjZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHRvTGVuZ3RoKGdsb2JhbE9iamVjdCwgcmVwbGFjZXJPYmplY3QpOwor
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0
b0xlbmd0aChnbG9iYWxPYmplY3QsIHJlcGxhY2VyT2JqZWN0KSk7CiAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVpbnQ2NF90IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7ICsraW5kZXgpIHsKICAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBuYW1lOwogICAgICAgICAgICAgICAgICAgICBpZiAo
aXNKU0FycmF5KHJlcGxhY2VyT2JqZWN0KSAmJiByZXBsYWNlck9iamVjdC0+Y2FuR2V0SW5kZXhR
dWlja2x5KGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSByZXBsYWNlck9i
amVjdC0+Z2V0SW5kZXhRdWlja2x5KGluZGV4KTsKQEAgLTQ3Niw3ICs0NzYsMTMgQEAgYm9vbCBT
dHJpbmdpZmllcjo6SG9sZGVyOjphcHBlbmROZXh0UHJvcAogICAgIC8vIEZpcnN0IHRpbWUgdGhy
b3VnaCwgaW5pdGlhbGl6ZS4KICAgICBpZiAoIW1faW5kZXgpIHsKICAgICAgICAgaWYgKG1faXNB
cnJheSkgewotICAgICAgICAgICAgbV9zaXplID0gdG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCBtX29i
amVjdCk7CisgICAgICAgICAgICB1aW50NjRfdCBsZW5ndGggPSBzdGF0aWNfY2FzdDx1aW50NjRf
dD4odG9MZW5ndGgoZ2xvYmFsT2JqZWN0LCBtX29iamVjdCkpOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGxl
bmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9z
aXplID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCk7CiAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgn
WycpOwogICAgICAgICB9IGVsc2UgewpAQCAtNjQ1LDkgKzY1MSwxNCBAQCBORVZFUl9JTkxJTkUg
SlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAKICAgICAgICAgICAgICAgICBKU09iamVjdCog
YXJyYXkgPSBhc09iamVjdChpblZhbHVlKTsKICAgICAgICAgICAgICAgICBtYXJrZWRTdGFjay5h
cHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KGFycmF5KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSB0b0xlbmd0aChtX2dsb2JhbE9iamVjdCwgYXJyYXkpOworICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0b0xlbmd0aChtX2ds
b2JhbE9iamVjdCwgYXJyYXkpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShsZW5ndGggPiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihtX2dsb2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIGFycmF5
TGVuZ3RoU3RhY2suYXBwZW5kKGxlbmd0aCk7CisgICAgICAgICAgICAgICAgYXJyYXlMZW5ndGhT
dGFjay5hcHBlbmQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCkpOwogICAgICAgICAgICAg
ICAgIGluZGV4U3RhY2suYXBwZW5kKDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYXJy
YXlTdGFydFZpc2l0TWVtYmVyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjYwOTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTU4LDYgKzE5NTgsMTQg
QEAgYm9vbCBKU09iamVjdDo6aGFzUHJvcGVydHkoSlNHbG9iYWxPYmplYwogICAgIHJldHVybiBo
YXNQcm9wZXJ0eUdlbmVyaWMoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xv
dDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiB9CiAKK2Jvb2wgSlNPYmplY3Q6
Omhhc1Byb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQ2NF90IHByb3Bl
cnR5TmFtZSkgY29uc3QKK3sKKyAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFtZSA8PSBNQVhfQVJS
QVlfSU5ERVgpKQorICAgICAgICByZXR1cm4gaGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSk7CisgICAgQVNTRVJUKHByb3BlcnR5TmFt
ZSA8PSBtYXhTYWZlSW50ZWdlcigpKTsKKyAgICByZXR1cm4gaGFzUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBJZGVudGlmaWVyOjpmcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwgcHJvcGVydHlOYW1lKSk7
Cit9CisKIGJvb2wgSlNPYmplY3Q6Omhhc1Byb3BlcnR5R2VuZXJpYyhKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6Oklu
dGVybmFsTWV0aG9kVHlwZSBpbnRlcm5hbE1ldGhvZFR5cGUpIGNvbnN0CiB7CiAgICAgUHJvcGVy
dHlTbG90IHNsb3QodGhpcywgaW50ZXJuYWxNZXRob2RUeXBlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMjYwOTE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklu
bGluZXMuaCIKICNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAj
aW5jbHVkZSAiT2JqZWN0SW5pdGlhbGl6YXRpb25TY29wZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5
U2xvdC5oIgogI2luY2x1ZGUgIlByb3BlcnR5U3RvcmFnZS5oIgpAQCAtMTU5LDEwICsxNjAsMTIg
QEAgcHVibGljOgogCiAgICAgSlNWYWx1ZSBnZXQoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5h
bWUpIGNvbnN0OwogICAgIEpTVmFsdWUgZ2V0KEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJv
cGVydHlOYW1lKSBjb25zdDsKKyAgICBKU1ZhbHVlIGdldChKU0dsb2JhbE9iamVjdCosIHVpbnQ2
NF90IHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICB0ZW1wbGF0ZTxib29sIGNoZWNrTnVsbFN0
cnVjdHVyZSA9IGZhbHNlPgogICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEpTR2xvYmFsT2JqZWN0
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBib29sIGdldFByb3BlcnR5U2xv
dChKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7
CisgICAgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENhbGxiYWNr
V2hlbk5vRXhjZXB0aW9uPiB0eXBlbmFtZSBzdGQ6OnJlc3VsdF9vZjxDYWxsYmFja1doZW5Ob0V4
Y2VwdGlvbihib29sLCBQcm9wZXJ0eVNsb3QmKT46OnR5cGUgZ2V0UHJvcGVydHlTbG90KEpTR2xv
YmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbikgY29uc3Q7
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2tXaGVuTm9FeGNlcHRpb24+IHR5cGVuYW1l
IHN0ZDo6cmVzdWx0X29mPENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKGJvb2wsIFByb3BlcnR5U2xv
dCYpPjo6dHlwZSBnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUs
IFByb3BlcnR5U2xvdCYsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKSBjb25zdDsKIApAQCAtMjA2
LDYgKzIwOSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1ldGhvZFRh
YmxlKHZtKS0+cHV0QnlJbmRleCh0aGlzLCBnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSwgdmFs
dWUsIHNob3VsZFRocm93KTsKICAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0QnlJ
bmRleElubGluZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50NjRfdCBwcm9wZXJ0
eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCisgICAgeworICAgICAgICBp
ZiAoTElLRUxZKHByb3BlcnR5TmFtZSA8PSBNQVhfQVJSQVlfSU5ERVgpKQorICAgICAgICAgICAg
cmV0dXJuIHB1dEJ5SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4ocHJvcGVydHlOYW1lKSwgdmFsdWUsIHNob3VsZFRocm93KTsKKworICAgICAgICBBU1NFUlQo
cHJvcGVydHlOYW1lIDw9IG1heFNhZmVJbnRlZ2VyKCkpOworICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdCh0aGlzLCBzaG91bGRUaHJvdyk7CisgICAgICAgIHJldHVybiBwdXRJbmxpbmVGb3JK
U09iamVjdCh0aGlzLCBnbG9iYWxPYmplY3QsIElkZW50aWZpZXI6OmZyb20oZ2V0Vk0oZ2xvYmFs
T2JqZWN0KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIHNsb3QpOworICAgIH0KICAgICAgICAgCiAg
ICAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwdXREaXJlY3QqIG1ldGhvZHM6CiAgICAgLy8g
IC0gdGhlIHByb3RvdHlwZSBjaGFpbiBpcyBub3QgY29uc3VsdGVkCkBAIC0yNDYsNiArMjU5LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgUHV0RGlyZWN0SW5kZXhMaWtlUHV0RGlyZWN0KTsKICAg
ICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcHV0RGlyZWN0SW5kZXgoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUgbW9kZSkKKyAgICB7CisgICAg
ICAgIGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IE1BWF9BUlJBWV9JTkRFWCkpCisgICAgICAg
ICAgICByZXR1cm4gcHV0RGlyZWN0SW5kZXgoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50
MzJfdD4ocHJvcGVydHlOYW1lKSwgdmFsdWUsIGF0dHJpYnV0ZXMsIG1vZGUpOworICAgICAgICBy
ZXR1cm4gcHV0RGlyZWN0KGdldFZNKGdsb2JhbE9iamVjdCksIElkZW50aWZpZXI6OmZyb20oZ2V0
Vk0oZ2xvYmFsT2JqZWN0KSwgcHJvcGVydHlOYW1lKSwgdmFsdWUsIGF0dHJpYnV0ZXMpOworICAg
IH0KKwogICAgIC8vIEEgZ2VuZXJhbGx5IG5vbi10aHJvd2luZyB2ZXJzaW9uIG9mIHB1dERpcmVj
dCBhbmQgcHV0RGlyZWN0SW5kZXguCiAgICAgLy8gSG93ZXZlciwgaXQncyBvbmx5IGd1YXJhbnRl
ZWQgdG8gbm90IHRocm93IGJhc2VkIG9uIHdoYXQgdGhlIHJlY2VpdmVyIGlzLgogICAgIC8vIEZv
ciBleGFtcGxlLCBpZiB0aGUgcmVjZWl2ZXIgaXMgYSBQcm94eU9iamVjdCwgdGhpcyBpcyBub3Qg
Z3VhcmFudGVlZCwgc2luY2UKQEAgLTI4OCw2ICszMDgsMTQgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQorCisgICAgYm9vbCBjYW5HZXRJbmRl
eFF1aWNrbHkodWludDY0X3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDw9IG1h
eFNhZmVJbnRlZ2VyKCkpOworICAgICAgICBpZiAoTElLRUxZKGkgPD0gTUFYX0FSUkFZX0lOREVY
KSkKKyAgICAgICAgICAgIHJldHVybiBjYW5HZXRJbmRleFF1aWNrbHkoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGkpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAgICAgCiAgICAg
SlNWYWx1ZSBnZXRJbmRleFF1aWNrbHkodW5zaWduZWQgaSkgY29uc3QKICAgICB7CkBAIC0zNDgs
NiArMzc2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgIH0KKworICAgIEpTVmFsdWUgdHJ5R2V0SW5kZXhRdWlja2x5KHVpbnQ2NF90IGkpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaSA8PSBtYXhTYWZlSW50ZWdlcigpKTsKKyAgICAg
ICAgaWYgKExJS0VMWShpIDw9IE1BWF9BUlJBWV9JTkRFWCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ5R2V0SW5kZXhRdWlja2x5KHN0YXRpY19jYXN0PHVpbnQzMl90PihpKSk7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAgICAgICAKICAgICBKU1ZhbHVlIGdldERpcmVjdElu
ZGV4KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVuc2lnbmVkIGkpCiAgICAgewpAQCAt
NjEyLDYgKzY0OCw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFz
UHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3QqLCB1bnNpZ25lZCBw
cm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGJvb2wgaGFzUHJvcGVydHkoSlNHbG9iYWxPYmplY3Qq
LCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIGJvb2wgaGFzUHJvcGVydHlHZW5l
cmljKEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFs
TWV0aG9kVHlwZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eUdlbmVyaWMoSlNHbG9iYWxP
YmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRo
b2RUeXBlKSBjb25zdDsKICAgICBib29sIGhhc093blByb3BlcnR5KEpTR2xvYmFsT2JqZWN0Kiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKQEAgLTYyMCw2ICs2NTcsOSBAQCBw
dWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eShKU0NlbGwqLCBKU0dsb2JhbE9iamVjdCosIFByb3BlcnR5TmFtZSwgRGVsZXRlUHJvcGVydHlT
bG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHlC
eUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsK
KyAgICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgUHJvcGVydHlOYW1lKTsK
KyAgICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QgcHJvcGVy
dHlOYW1lKTsKKyAgICBib29sIGRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiwgdWludDY0
X3QgcHJvcGVydHlOYW1lKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1ZhbHVl
IGRlZmF1bHRWYWx1ZShjb25zdCBKU09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSk7CiAgICAgSlNWYWx1ZSBvcmRpbmFyeVRvUHJpbWl0aXZlKEpTR2xvYmFs
T2JqZWN0KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMjYw
OTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OSw2ICsxNDksMTMgQEAgQUxXQVlTX0lOTElORSBib29sIEpT
T2JqZWN0OjpnZXRQcm9wZXJ0eQogICAgIH0KIH0KIAorQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjpnZXRQcm9wZXJ0eVNsb3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0
X3QgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgaWYgKExJS0VMWShw
cm9wZXJ0eU5hbWUgPD0gTUFYX0FSUkFZX0lOREVYKSkKKyAgICAgICAgcmV0dXJuIGdldFByb3Bl
cnR5U2xvdChnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihwcm9wZXJ0eU5hbWUp
LCBzbG90KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlTbG90KGdsb2JhbE9iamVjdCwgSWRlbnRp
Zmllcjo6ZnJvbShnbG9iYWxPYmplY3QtPnZtKCksIHByb3BlcnR5TmFtZSksIHNsb3QpOworfQor
CiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmdldE5vbkluZGV4UHJvcGVydHlTbG90KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICAvLyBUaGlzIG1ldGhvZCBvbmx5IHN1cHBvcnRzIG5v
bi1pbmRleCBQcm9wZXJ0eU5hbWVzLgpAQCAtNTM1LDQgKzU0MiwzMSBAQCBpbmxpbmUgQ2FsbERh
dGEgZ2V0Q29uc3RydWN0RGF0YShWTSYgdm0sCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAoraW5s
aW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgRGVsZXRlUHJvcGVydHlT
bG90IHNsb3Q7CisgICAgcmV0dXJuIHRoaXMtPm1ldGhvZFRhYmxlKGdsb2JhbE9iamVjdC0+dm0o
KSktPmRlbGV0ZVByb3BlcnR5KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lLCBzbG90
KTsKK30KKworaW5saW5lIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQzMl90IHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
dGhpcy0+bWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0LT52bSgpKS0+ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KHRoaXMsIGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKTsKK30KKworaW5saW5lIGJvb2wg
SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVp
bnQ2NF90IHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAoTElLRUxZKHByb3BlcnR5TmFtZSA8PSBN
QVhfQVJSQVlfSU5ERVgpKQorICAgICAgICByZXR1cm4gZGVsZXRlUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1lKSk7CisgICAgQVNTRVJUKHBy
b3BlcnR5TmFtZSA8PSBtYXhTYWZlSW50ZWdlcigpKTsKKyAgICByZXR1cm4gZGVsZXRlUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBJZGVudGlmaWVyOjpmcm9tKGdsb2JhbE9iamVjdC0+dm0oKSwgcHJv
cGVydHlOYW1lKSk7Cit9CisKK2lubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXQoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAg
IGlmIChMSUtFTFkocHJvcGVydHlOYW1lIDw9IE1BWF9BUlJBWV9JTkRFWCkpCisgICAgICAgIHJl
dHVybiBnZXQoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlOYW1l
KSk7CisgICAgQVNTRVJUKHByb3BlcnR5TmFtZSA8PSBtYXhTYWZlSW50ZWdlcigpKTsKKyAgICBy
ZXR1cm4gZ2V0KGdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbShnbG9iYWxPYmplY3QtPnZt
KCksIHByb3BlcnR5TmFtZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAyNjA5
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlICgqR2V0VmFsdWVGdW5jKShKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKIAogICAgIEpTVmFsdWUgZ2V0VmFsdWUoSlNHbG9i
YWxPYmplY3QqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwotICAgIEpTVmFsdWUgZ2V0VmFsdWUoSlNH
bG9iYWxPYmplY3QqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIEpTVmFsdWUg
Z2V0VmFsdWUoSlNHbG9iYWxPYmplY3QqLCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0Owog
ICAgIEpTVmFsdWUgZ2V0UHVyZVJlc3VsdCgpIGNvbnN0OwogCiAgICAgYm9vbCBpc0NhY2hlYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIGlzVW5zZXQoKSB8fCBtX2NhY2hlYWJpbGl0eSA9PSBDYWNoaW5n
QWxsb3dlZDsgfQpAQCAtNDIyLDcgKzQyMiw3IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBQcm9w
ZXJ0eVNsb3Q6OmdldFYKICAgICByZXR1cm4gY3VzdG9tR2V0dGVyKGdsb2JhbE9iamVjdCwgcHJv
cGVydHlOYW1lKTsKIH0KIAotQUxXQVlTX0lOTElORSBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Z2V0
VmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdAorQUxXQVlTX0lOTElORSBKU1ZhbHVlIFByb3BlcnR5U2xvdDo6Z2V0VmFsdWUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDY0X3QgcHJvcGVydHlOYW1lKSBjb25zdAog
ewogICAgIFZNJiB2bSA9IGdldFZNKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKG1fcHJvcGVydHlU
eXBlID09IFR5cGVWYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5jcHAJKHJldmlzaW9uIDI2MDkxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk2Nyw3ICsyOTY3LDcgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogCiAgICAgVmVjdG9yPFN0
cmluZz4gbGFuZ3VhZ2VzOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9
IGFycmF5LT5nZXQoZ2xvYmFsT2JqZWN0LCBpKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOwog
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAg
ICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChsYW5ndWFnZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjA5MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxMyBAQAorMjAyMC0wNC0zMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KKworICAgICAgICBXZSBjYW4ndCBjYXN0IHRvTGVuZ3RoIHJlc3VsdCB0byB1bnNpZ25lZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMjA1Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MjYyNTU2Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZ
dXN1a2UgU3V6dWtpLgorCisgICAgICAgICogYnJpZGdlL05QX2pzb2JqZWN0LmNwcDoKKwogMjAy
MC0wNC0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTaW1wbGlmeSBjb250ZW50cyBjbGlwcGluZyBsYXllciBnZW9tZXRyeQpJbmRleDogU291cmNl
L1dlYkNvcmUvYnJpZGdlL05QX2pzb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCShyZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvTlBfanNvYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNyAr
MzExLDcgQEAgYm9vbCBfTlBOX0dldFByb3BlcnR5KE5QUCwgTlBPYmplY3QqIG8sIAogICAgICAg
ICBpZiAoaS0+aXNTdHJpbmcoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IG9iai0+aW1wLT5nZXQo
bGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21OUElkZW50aWZpZXIobGV4aWNhbEds
b2JhbE9iamVjdCwgaS0+c3RyaW5nKCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVz
dWx0ID0gb2JqLT5pbXAtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpLT5udW1iZXIoKSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSBvYmotPmltcC0+Z2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PHVpbnQzMl90PihpLT5udW1iZXIoKSkpOwogCiAgICAgICAgIGNvbnZlcnRWYWx1
ZVRvTlBWYXJpYW50KGxleGljYWxHbG9iYWxPYmplY3QsIHJlc3VsdCwgdmFyaWFudCk7CiAgICAg
ICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CkBAIC0zODMsNyArMzgzLDcgQEAgYm9vbCBfTlBO
X1JlbW92ZVByb3BlcnR5KE5QUCwgTlBPYmplY3QqIAogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgh
b2JqLT5pbXAtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGktPm51bWJlcigpKSkg
eworICAgICAgICAgICAgaWYgKCFvYmotPmltcC0+aGFzUHJvcGVydHkobGV4aWNhbEdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGktPm51bWJlcigpKSkpIHsKICAgICAgICAgICAg
ICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KQEAgLTQyMiw3ICs0MjIsNyBAQCBib29sIF9OUE5fSGFzUHJvcGVy
dHkoTlBQLCBOUE9iamVjdCogbywgCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICB9CiAKLSAgICAgICAgYm9vbCByZXN1bHQgPSBvYmotPmltcC0+aGFzUHJvcGVydHkobGV4aWNh
bEdsb2JhbE9iamVjdCwgaS0+bnVtYmVyKCkpOworICAgICAgICBib29sIHJlc3VsdCA9IG9iai0+
aW1wLT5oYXNQcm9wZXJ0eShsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaS0+bnVtYmVyKCkpKTsKICAgICAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYwOTE3KQor
KysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBA
QAorMjAyMC0wNC0zMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBXZSBjYW4ndCBjYXN0IHRvTGVuZ3RoIHJlc3VsdCB0byB1bnNpZ25lZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMjA1CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS82MjYyNTU2Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtp
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOUEpTT2JqZWN0OjpoYXNQcm9wZXJ0eSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5QSlNPYmplY3Q6OmdldFByb3BlcnR5KToKKyAgICAgICAgKFdlYktpdDo6TlBKU09i
amVjdDo6cmVtb3ZlUHJvcGVydHkpOgorCiAyMDIwLTA0LTI5ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIFdLTmF2aWdhdGlvbkRlbGVn
YXRlIEFQSSBzaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNjA5MTcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OUEpTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIGJv
b2wgTlBKU09iamVjdDo6aGFzUHJvcGVydHkoTlBJZGVudGlmaWUKICAgICBpZiAoaWRlbnRpZmll
clJlcC0+aXNTdHJpbmcoKSkKICAgICAgICAgcmVzdWx0ID0gbV9qc09iamVjdC0+aGFzUHJvcGVy
dHkobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllckZyb21JZGVudGlmaWVyUmVwKGxleGlj
YWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXApKTsKICAgICBlbHNlCi0gICAgICAgIHJlc3Vs
dCA9IG1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZp
ZXJSZXAtPm51bWJlcigpKTsKKyAgICAgICAgcmVzdWx0ID0gbV9qc09iamVjdC0+aGFzUHJvcGVy
dHkobGV4aWNhbEdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGlkZW50aWZpZXJS
ZXAtPm51bWJlcigpKSk7CiAKICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgIHJldHVy
biByZXN1bHQ7CkBAIC0xNzksNyArMTc5LDcgQEAgYm9vbCBOUEpTT2JqZWN0OjpnZXRQcm9wZXJ0
eShOUElkZW50aWZpZQogICAgIGlmIChpZGVudGlmaWVyUmVwLT5pc1N0cmluZygpKQogICAgICAg
ICBqc1Jlc3VsdCA9IG1fanNPYmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBpZGVudGlm
aWVyRnJvbUlkZW50aWZpZXJSZXAobGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllclJlcCkp
OwogICAgIGVsc2UKLSAgICAgICAganNSZXN1bHQgPSBtX2pzT2JqZWN0LT5nZXQobGV4aWNhbEds
b2JhbE9iamVjdCwgaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpOworICAgICAgICBqc1Jlc3VsdCA9
IG1fanNPYmplY3QtPmdldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oaWRlbnRpZmllclJlcC0+bnVtYmVyKCkpKTsKICAgICAKICAgICBtX29iamVjdE1hcC0+Y29u
dmVydEpTVmFsdWVUb05QVmFyaWFudChsZXhpY2FsR2xvYmFsT2JqZWN0LCBqc1Jlc3VsdCwgKnJl
c3VsdCk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKQEAgLTIzMSw3ICsyMzEsNyBAQCBi
b29sIE5QSlNPYmplY3Q6OnJlbW92ZVByb3BlcnR5KE5QSWRlbnRpCiAKICAgICAgICAgSlNDZWxs
OjpkZWxldGVQcm9wZXJ0eShtX2pzT2JqZWN0LmdldCgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBp
ZGVudGlmaWVyKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1By
b3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3QsIGlkZW50aWZpZXJSZXAtPm51bWJlcigpKSkgewor
ICAgICAgICBpZiAoIW1fanNPYmplY3QtPmhhc1Byb3BlcnR5KGxleGljYWxHbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PHVpbnQzMl90PihpZGVudGlmaWVyUmVwLT5udW1iZXIoKSkpKSB7CiAgICAg
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjA5MTcpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAyMC0wNC0zMCAgU2Fh
bSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBXZSBjYW4ndCBjYXN0IHRv
TGVuZ3RoIHJlc3VsdCB0byB1bnNpZ25lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjExMjA1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MjYyNTU2
Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgICogVGVz
dEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2Fz
ZXMvMTUuNC40LjE0LTMtMjguanM6CisgICAgICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50
ZXN0KToKKyAgICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40
LjE0LTMtMjkuanM6CisgICAgICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50ZXN0KToKKyAg
ICAgICAgKiBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE1LTMtMjUu
anM6CisgICAgICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50ZXN0KToKKyAgICAgICAgKiBp
ZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE1LTMtMjguanM6CisgICAg
ICAgIChFUzVIYXJuZXNzLnJlZ2lzdGVyVGVzdC50ZXN0KToKKwogMjAyMC0wNC0yOSAgWmFsYW4g
QnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFNraXAgZmFzdC90ZXh0
L3RleHQtaW5kZW50LWluc2lkZS1mbG9hdC5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9UZXN0RXhw
ZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMJKHJl
dmlzaW9uIDI2MDkxNykKKysrIExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NTIsMTIgKzE3NTIsMTQgQEAgd2Via2l0Lm9yZy9iLzE3MzUwNiAgaWV0ZXN0
Y2VudGVyL0phdmFzYwogd2Via2l0Lm9yZy9iLzE3MzUwNiAgaWV0ZXN0Y2VudGVyL0phdmFzY3Jp
cHQvMTUuNC40LjE0LTMtNy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTczNTA2ICBp
ZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS40LjQuMTQtMy04Lmh0bWwgWyBGYWlsdXJlIF0KIHdl
YmtpdC5vcmcvYi8xNzM1MDYgIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjQuNC4xNS0zLTEy
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xNzM1MDYgIGlldGVzdGNlbnRlci9KYXZh
c2NyaXB0LzE1LjQuNC4xNS0zLTI1Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNzM1
MDYgIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjQuNC4xNS0zLTcuaHRtbCBbIEZhaWx1cmUg
XQogCiB3ZWJraXQub3JnL2IvMTczNTA2ICBpZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS40LjQu
MTUtMy0xNC5odG1sIFsgU2tpcCBdCiB3ZWJraXQub3JnL2IvMTczNTA2ICBpZXRlc3RjZW50ZXIv
SmF2YXNjcmlwdC8xNS40LjQuMTUtMy04Lmh0bWwgWyBTa2lwIF0KIAorIyBUaGlzIHRha2VzIHRv
byBsb25nIHNpbmNlIGl0J3Mgc2VhcmNoaW5nIHRocm91Z2ggYW4gYXJyYXkgd2l0aCB+NCBiaWxs
aW9uIGVsZW1lbnRzLgoraWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuNC40LjE1LTMtMjkuaHRt
bCBbIFNraXAgXQorCiAjIElEQlZlcnNpb25DaGFuZ2VFdmVudCB0ZXN0cyBuZWVkIHRvIGJlIHJl
d3JpdHRlbiB0byB1c2UgZXZlbnQgY29uc3RydWN0b3JzIGluc3RlYWQgb2YgY3JlYXRlRXZlbnQs
CiAjIGFmdGVyIHdlIGltcGxlbWVudCB0aGUgSURCVmVyc2lvbkNoYW5nZUV2ZW50IGNvbnN0cnVj
dG9yLgogd2Via2l0Lm9yZy9iLzE0NTM5MCBzdG9yYWdlL2luZGV4ZWRkYi9ldmVudHMuaHRtbCBb
IEZhaWx1cmUgXQpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVz
dENhc2VzLzE1LjQuNC4xNC0zLTI4LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2lldGVz
dGNlbnRlci9KYXZhc2NyaXB0L1Rlc3RDYXNlcy8xNS40LjQuMTQtMy0yOC5qcwkocmV2aXNpb24g
MjYwOTE3KQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2Vz
LzE1LjQuNC4xNC0zLTI4LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIEVTNUhh
cm5lc3MucmVnaXN0ZXJUZXN0KHsKICAgICAgICAgICAgIGxlbmd0aDogNDI5NDk2NzI5NgogICAg
ICAgICB9OwogCi0gICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKG9i
aiwgdGFyZ2V0T2JqKSA9PT0gLTE7CisgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5k
ZXhPZi5jYWxsKG9iaiwgdGFyZ2V0T2JqKSA9PT0gMDsKICAgICB9LAogCiAgICAgcHJlY29uZGl0
aW9uOiBmdW5jdGlvbiBwcmVyZXEoKSB7CkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIv
SmF2YXNjcmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE0LTMtMjkuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNC0zLTI5
LmpzCShyZXZpc2lvbiAyNjA5MTcpCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNj
cmlwdC9UZXN0Q2FzZXMvMTUuNC40LjE0LTMtMjkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgRVM1SGFybmVzcy5yZWdpc3RlclRlc3QoewogICAgICAgICB9OwogCiAgICAgICAg
IHJldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKG9iaiwgdGFyZ2V0T2JqKSA9PT0g
MCAmJgotICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChvYmosIDQyOTQ5
NjcyOTcpID09PSAtMTsKKyAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwo
b2JqLCA0Mjk0OTY3Mjk3KSA9PT0gMTsKICAgICB9LAogCiAgICAgcHJlY29uZGl0aW9uOiBmdW5j
dGlvbiBwcmVyZXEoKSB7CkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlw
dC9UZXN0Q2FzZXMvMTUuNC40LjE1LTMtMjUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNS0zLTI1LmpzCShyZXZp
c2lvbiAyNjA5MTcpCisrKyBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC9UZXN0
Q2FzZXMvMTUuNC40LjE1LTMtMjUuanMJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAg
RVM1SGFybmVzcy5yZWdpc3RlclRlc3QoIHsKIAogICAgICAgICB2YXIgb2JqID0geyAxOiB0cnVl
LCAyOiBmYWxzZSwgbGVuZ3RoOiAtNDI5NDk2NzI5NC41IH07CiAKLSAgICAgICAgcmV0dXJuIEFy
cmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKG9iaiwgdHJ1ZSkgPT09IDEgJiYKKyAgICAg
ICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKG9iaiwgdHJ1ZSkgPT09
IC0xICYmCiAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChvYmos
IGZhbHNlKSA9PT0gLTE7CiAgICAgfSwKIApJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVy
L0phdmFzY3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNS0zLTI4LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2lldGVzdGNlbnRlci9KYXZhc2NyaXB0L1Rlc3RDYXNlcy8xNS40LjQuMTUtMy0y
OC5qcwkocmV2aXNpb24gMjYwOTE3KQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFz
Y3JpcHQvVGVzdENhc2VzLzE1LjQuNC4xNS0zLTI4LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBAIEVTNUhhcm5lc3MucmVnaXN0ZXJUZXN0KCB7CiAgICAgICAgICAgICBsZW5ndGg6
IDQyOTQ5NjcyOTYKICAgICAgICAgfTsKIAotICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBl
Lmxhc3RJbmRleE9mLmNhbGwob2JqLCB0YXJnZXRPYmopID09PSAtMTsgLy92ZXJpZnkgbGVuZ3Ro
IGlzIDAgZmluYWxseQorICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9m
LmNhbGwob2JqLCB0YXJnZXRPYmopID09PSA0Mjk0OTY3Mjk1OwogICAgIH0sCiAKICAgICBwcmVj
b25kaXRpb246IGZ1bmN0aW9uIHByZXJlcSgpIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>