<?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>165163</bug_id>
          
          <creation_ts>2016-11-29 14:55:31 -0800</creation_ts>
          <short_desc>We should have a Wasm callee</short_desc>
          <delta_ts>2016-12-04 13:24:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>163351</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1254492</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-29 14:55:31 -0800</bug_when>
    <thetext>And we should be able to patch stores of the callee into the entrypoint of a wasm function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254567</commentid>
    <comment_count>1</comment_count>
      <attachid>295673</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-29 16:47:55 -0800</bug_when>
    <thetext>Created attachment 295673
WIP

It probably doesn&apos;t compile yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254632</commentid>
    <comment_count>2</comment_count>
      <attachid>295691</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-29 18:42:22 -0800</bug_when>
    <thetext>Created attachment 295691
WIP

it compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254633</commentid>
    <comment_count>3</comment_count>
      <attachid>295691</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-29 18:45:27 -0800</bug_when>
    <thetext>Comment on attachment 295691
WIP

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

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:202
&gt; +    // FIXME: how do we make sure this is the first thing to execute?

Remove this.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:205
&gt; +    getCalleePatchpoint-&gt;effects = Effects::none();

Remove this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255513</commentid>
    <comment_count>4</comment_count>
      <attachid>295904</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-01 15:18:06 -0800</bug_when>
    <thetext>Created attachment 295904
RFC WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255528</commentid>
    <comment_count>5</comment_count>
      <attachid>295904</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-01 15:48:48 -0800</bug_when>
    <thetext>Comment on attachment 295904
RFC WIP

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

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:236
&gt; +    Value* offsetOfCodeBlock = m_currentBlock-&gt;appendNew&lt;Const64Value&gt;(m_proc, Origin(), CallFrameSlot::codeBlock * sizeof(Register));
&gt; +    m_currentBlock-&gt;appendNew&lt;MemoryValue&gt;(m_proc, Store, Origin(),
&gt; +        m_currentBlock-&gt;appendNew&lt;Const64Value&gt;(m_proc, Origin(), 0),
&gt; +        m_currentBlock-&gt;appendNew&lt;Value&gt;(m_proc, Add, Origin(), framePointer, offsetOfCodeBlock));

We probably shouldn&apos;t do this, but it will mean I need to audit the stack walking behavior to make sure it doesn&apos;t take a non-null codeblock to mean that the CodeBlock is a valid value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255530</commentid>
    <comment_count>6</comment_count>
      <attachid>295904</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-01 15:50:03 -0800</bug_when>
    <thetext>Comment on attachment 295904
RFC WIP

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

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:68
&gt; +    AuxiliaryBarrier&lt;JSWebAssemblyCallee**&gt; m_callees;

We could probably allocate a variable sized cell and just have this buffer be at the end of this cell&apos;s fields similar to lexical environments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255531</commentid>
    <comment_count>7</comment_count>
      <attachid>295904</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-01 15:51:49 -0800</bug_when>
    <thetext>Comment on attachment 295904
RFC WIP

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

&gt; Source/JavaScriptCore/wasm/WasmPlan.h:40
&gt; +class MarkedArgumentBuffer;

This should be deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255535</commentid>
    <comment_count>8</comment_count>
      <attachid>295904</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-01 15:56:56 -0800</bug_when>
    <thetext>Comment on attachment 295904
RFC WIP

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

&gt; Source/JavaScriptCore/jsc.cpp:2540
&gt; +    return JSValue::decode(vmEntryToWasm(callee-&gt;jsEntryPoint(), vm, &amp;protoCallFrame));

FYI I&apos;m renaming this to jsToWasmEntryPoint to be clearer.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:58
&gt; +        return m_callees.get()[calleeIndex];

.at() wouldn&apos;t remove the need for the assert.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:68
&gt; +    AuxiliaryBarrier&lt;JSWebAssemblyCallee**&gt; m_callees;

Can&apos;t this be a Vector&lt;WriteBarrier&gt; ? Seems like the code would be simpler that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255539</commentid>
    <comment_count>9</comment_count>
      <attachid>295904</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-01 16:05:12 -0800</bug_when>
    <thetext>Comment on attachment 295904
RFC WIP

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:68
&gt;&gt;&gt; +    AuxiliaryBarrier&lt;JSWebAssemblyCallee**&gt; m_callees;
&gt;&gt; 
&gt;&gt; We could probably allocate a variable sized cell and just have this buffer be at the end of this cell&apos;s fields similar to lexical environments
&gt; 
&gt; Can&apos;t this be a Vector&lt;WriteBarrier&gt; ? Seems like the code would be simpler that way.

I&apos;m just going to make it inline at the end of this object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255605</commentid>
    <comment_count>10</comment_count>
      <attachid>295924</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-01 20:08:14 -0800</bug_when>
    <thetext>Created attachment 295924
WIP

I think this might be done, I just want to read it over and write a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255606</commentid>
    <comment_count>11</comment_count>
      <attachid>295925</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-01 20:12:44 -0800</bug_when>
    <thetext>Created attachment 295925
WIP

fixed a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255831</commentid>
    <comment_count>12</comment_count>
      <attachid>295985</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-02 12:55:46 -0800</bug_when>
    <thetext>Created attachment 295985
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255868</commentid>
    <comment_count>13</comment_count>
      <attachid>295985</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-02 13:57:34 -0800</bug_when>
    <thetext>Comment on attachment 295985
patch

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

Looks good.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:81
&gt; +    unsigned m_calleeCount;

So there&apos;s usually no maker at the end here? It&apos;s valid C to put JSWebAssemblyCallee m_callee[];</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255947</commentid>
    <comment_count>14</comment_count>
      <attachid>295985</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-02 16:09:42 -0800</bug_when>
    <thetext>Comment on attachment 295985
patch

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

r=me with some comments.

&gt; Source/JavaScriptCore/jsc.cpp:-2588
&gt; -        if (!plan.compiledFunction(i))
&gt; -            dataLogLn(&quot;failed to compile function at index&quot;, i);

Why&apos;d you delete this?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:213
&gt; +    PatchpointValue* getCalleePatchpoint = m_currentBlock-&gt;appendNew&lt;B3::PatchpointValue&gt;(m_proc, Int64, Origin());

I think this should all be done in some function in WasmCallingConvention.h. My hope was to make it easier to manage all the various calling convention stuff if it&apos;s all there.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:229
&gt; +    m_currentBlock-&gt;appendNew&lt;MemoryValue&gt;(m_proc, Store, Origin(),

You can make sure other potentially trapping memory ops are not move over this with: m_currentBlock-&gt;appendNew&lt;MemoryValue&gt;(m_proc, traps(Store), Origin(), ...

I guess I forgot to add that to the wasm memory opcodes. I&apos;ll make a patch for that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256193</commentid>
    <comment_count>15</comment_count>
      <attachid>295985</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-04 12:24:14 -0800</bug_when>
    <thetext>Comment on attachment 295985
patch

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

&gt;&gt; Source/JavaScriptCore/jsc.cpp:-2588
&gt;&gt; -            dataLogLn(&quot;failed to compile function at index&quot;, i);
&gt; 
&gt; Why&apos;d you delete this?

I thought it was redundant with
```
if (plan.failed()) CRASH();
```
and
```
if (plan.compiledFunctionCount() != functionCount) CRASH();
```

Is it not?

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:213
&gt;&gt; +    PatchpointValue* getCalleePatchpoint = m_currentBlock-&gt;appendNew&lt;B3::PatchpointValue&gt;(m_proc, Int64, Origin());
&gt; 
&gt; I think this should all be done in some function in WasmCallingConvention.h. My hope was to make it easier to manage all the various calling convention stuff if it&apos;s all there.

Ok, will do.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:229
&gt;&gt; +    m_currentBlock-&gt;appendNew&lt;MemoryValue&gt;(m_proc, Store, Origin(),
&gt; 
&gt; You can make sure other potentially trapping memory ops are not move over this with: m_currentBlock-&gt;appendNew&lt;MemoryValue&gt;(m_proc, traps(Store), Origin(), ...
&gt; 
&gt; I guess I forgot to add that to the wasm memory opcodes. I&apos;ll make a patch for that now.

Actually, after reading though some B3 code, it would be invalid for this to happen. All trapping memory accesses claim to read the entire heap, so it would be invalid for this store to not execute before those.

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyModule.h:81
&gt;&gt; +    unsigned m_calleeCount;
&gt; 
&gt; So there&apos;s usually no maker at the end here? It&apos;s valid C to put JSWebAssemblyCallee m_callee[];

We don&apos;t usually do this with the various cells that are implemented this way. I&apos;m not sure why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256195</commentid>
    <comment_count>16</comment_count>
      <attachid>295985</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-04 12:57:51 -0800</bug_when>
    <thetext>Comment on attachment 295985
patch

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

&gt;&gt;&gt; Source/JavaScriptCore/jsc.cpp:-2588
&gt;&gt;&gt; -            dataLogLn(&quot;failed to compile function at index&quot;, i);
&gt;&gt; 
&gt;&gt; Why&apos;d you delete this?
&gt; 
&gt; I thought it was redundant with
&gt; ```
&gt; if (plan.failed()) CRASH();
&gt; ```
&gt; and
&gt; ```
&gt; if (plan.compiledFunctionCount() != functionCount) CRASH();
&gt; ```
&gt; 
&gt; Is it not?

Ah I missed the plan.failed(). Yeah, this probably doesn&apos;t do anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256200</commentid>
    <comment_count>17</comment_count>
      <attachid>296100</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-04 13:22:47 -0800</bug_when>
    <thetext>Created attachment 296100
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1256201</commentid>
    <comment_count>18</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-04 13:24:41 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/209312</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295673</attachid>
            <date>2016-11-29 16:47:55 -0800</date>
            <delta_ts>2016-11-29 18:42:22 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>13742</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAJKHJldmlzaW9uIDIwOTA5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBACiAj
aW5jbHVkZSAiSlNXZWFrTWFwLmgiCiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNs
dWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxhenlDbGFzc1N0cnVjdHVyZUlubGluZXMu
aCIKICNpbmNsdWRlICJMYXp5UHJvcGVydHlJbmxpbmVzLmgiCkBAIC04OTUsNiArODk2LDggQEAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogCiAgICAgICAgIEZPUl9F
QUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUoQ1JFQVRFX1dFQkFTU0VNQkxZX0NPTlNU
UlVDVE9SKQogCisgICAgICAgIG1fd2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUuc2V0KHZtLCB0
aGlzLCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGpzTnVs
bCgpKSk7CisKICN1bmRlZiBDUkVBVEVfV0VCQVNTRU1CTFlfQ09OU1RSVUNUT1IKICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpAQCAtMTI1Myw2ICsxMjU2LDcgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV93ZWJBc3NlbWJseVN0
cnVjdHVyZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlD
YWxsZWVTdHJ1Y3R1cmUpOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZ
UEUoVklTSVRfU0lNUExFX1RZUEUpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJ
KHJldmlzaW9uIDIwOTA5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw2ICszNDIsOCBAQCBwdWJsaWM6CiAg
ICAgCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IG1fd2ViQXNzZW1ibHlTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV93
ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5Q2Fs
bGVlU3RydWN0dXJlKCkgeyByZXR1cm4gbV93ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5nZXQo
KTsgfQogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUoREVGSU5FX1NU
T1JBR0VfRk9SX1NJTVBMRV9UWVBFKQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjA5MDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Np
b24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBW
ZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5saW5rZWRDYWxscyk7CisgICAgQjNJUkdlbmVyYXRvcihN
ZW1vcnkqLCBQcm9jZWR1cmUmLCBGdW5jdGlvbkNvbXBpbGF0aW9uKik7CiAKICAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7CiAgICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMTg5
LDE2ICsxODksNDIgQEAgcHJpdmF0ZToKICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW1R5cGU6Okxh
c3RWYWx1ZVR5cGVdOwogfTsKIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1vcnkq
IG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZENhbGw+JiB1bmxp
bmtlZENhbGxzKQorQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1vcnkqIG1lbW9yeSwg
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEZ1bmN0aW9uQ29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKQog
ICAgIDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKLSAgICAsIG1f
dW5saW5rZWRDYWxscyh1bmxpbmtlZENhbGxzKQorICAgICwgbV91bmxpbmtlZENhbGxzKGNvbXBp
bGF0aW9uLT51bmxpbmtlZENhbGxzKQogewogICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFk
ZEJsb2NrKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgVHlwZTo6TGFzdFZhbHVl
VHlwZTsgKytpKQogICAgICAgICBtX3plcm9WYWx1ZXNbaV0gPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kSW50Q29uc3RhbnQobV9wcm9jLCBPcmlnaW4oKSwgdG9CM1R5cGUoc3RhdGljX2Nhc3Q8VHlw
ZT4oaSArIDEpKSwgMCk7CiAKKyAgICAvLyBGSVhNRTogaG93IGRvIHdlIG1ha2Ugc3VyZSB0aGlz
IGlzIHRoZSBmaXJzdCB0aGluZyB0byBleGVjdXRlPworICAgIFBhdGNocG9pbnRWYWx1ZSogZ2V0
Q2FsbGVlUGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIGdldENhbGxlZVBhdGNocG9p
bnQtPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOworICAgIGdldENh
bGxlZVBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgZ2V0Q2FsbGVl
UGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdCA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIERhdGFMYWJlbFB0
ciBtb3ZlTG9jYXRpb24gPSBqaXQubW92ZVdpdGhQYXRjaChUcnVzdGVkSW1tUHRyKG51bGxwdHIp
LCByZXN1bHQpOworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9j
YXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKworICAgIFZhbHVlKiBmcmFtZVBvaW50ZXIgPSBibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4ocHJvYywgQjM6OkZyYW1lUG9pbnRlciwgT3JpZ2luKCkpOworCisg
ICAgVmFsdWUqIG9mZnNldE9mQ2FsbGVlID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIp
KTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBTdG9y
ZSwgT3JpZ2luKCksCisgICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQsCisgICAgICAgIGJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGZyYW1lUG9pbnRlciwgb2Zm
c2V0T2ZDYWxsZWUpKTsKKworICAgIFZhbHVlKiBvZmZzZXRPZkNvZGVCbG9jayA9IGJsb2NrLT5h
cHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgQ2FsbEZyYW1lU2xvdDo6Y29k
ZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMCk7CisgICAg
ICAgIGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGZyYW1lUG9p
bnRlciwgb2Zmc2V0T2ZDb2RlQmxvY2spKTsKKworCiAgICAgaWYgKG1fbWVtb3J5KSB7CiAgICAg
ICAgIG1fbWVtb3J5QmFzZUdQUiA9IG1fbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5iYXNlTWVt
b3J5UG9pbnRlcjsKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7
CkBAIC03MjIsNyArNzQ4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+
IHBhcgogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxGdW5jdGlvbkNvbXBpbGF0
aW9uPigpOwogCiAgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsKLSAgICBCM0lSR2VuZXJhdG9yIGNv
bnRleHQobWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC0+dW5saW5rZWRDYWxscyk7CisgICAgQjNJ
UkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCkpOwogICAg
IEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBmdW5jdGlvbnMpOwogICAgIGlmICghcGFy
c2VyLnBhcnNlKCkpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyMDkwOTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NSw2ICsxNjUsNyBAQCBzdHJ1Y3QgVW5saW5rZWRDYWxsIHsKIAogc3RydWN0IEZ1
bmN0aW9uQ29tcGlsYXRpb24gewogICAgIFZlY3RvcjxVbmxpbmtlZENhbGw+IHVubGlua2VkQ2Fs
bHM7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjb2RlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxCMzo6Q29tcGlsYXRpb24+IGpzRW50cnlQb2ludDsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCShyZXZpc2lvbiAyMDkwOTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0
aW9uLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdl
bmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUg
Ildhc21NZW1vcnkuaCIKQEAgLTExMCw2ICsxMTEsMTcgQEAgdm9pZCBQbGFuOjpydW4oKQogICAg
IG1fZmFpbGVkID0gZmFsc2U7CiB9CiAKK3ZvaWQgUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGNhbGxlZXMp
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29tcGlsZWRGdW5jdGlvbnMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVM
b2NhdGlvbiA9IG1fY29tcGlsZWRGdW5jdGlvbnNbaV0uY2FsbGVlTW92ZUxvY2F0aW9uOworICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpj
cmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIFdURk1vdmUobV9jb21waWxl
ZEZ1bmN0aW9uc1tpXSkpOworICAgICAgICBjYWxsZWVzLmFwcGVuZChjYWxsZWUpOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihjYWxsZWVNb3ZlTG9jYXRpb24sIGNh
bGxlZSk7CisgICAgfQorfQorCiBQbGFuOjp+UGxhbigpIHsgfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCShyZXZp
c2lvbiAyMDkwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMywxMyBAQAogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBXYXNtIHsKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbE9iamVj
dDsKK2NsYXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOworICAgIAorbmFtZXNwYWNlIFdhc20gewor
CiBjbGFzcyBNZW1vcnk7CiAKIGNsYXNzIFBsYW4gewpAQCAtNDMsNiArNDksNyBAQCBwdWJsaWM6
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcnVuKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQ2FsbGVl
cyhKU0dsb2JhbE9iamVjdCosIE1hcmtlZEFyZ3VtZW50QnVmZmVyJik7CiAKICAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQogICAg
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlD
YWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
CituYW1lc3BhY2UgSlNDIHsKKworSlNXZWJBc3NlbWJseUNhbGxlZTo6SlNXZWJBc3NlbWJseUNh
bGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgLy8gV2UgcGFz
cyBpbiB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgdGhlIHNjb3BlIGp1c3QgdG8gaGF2ZSBhIHZhbGlk
IHNjb3BlIGZvciB0aGF0IGZpZWxkLgorICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QtPndlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlKCkpCit7IH0KKwordm9pZCBKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdhc206OkZ1bmN0aW9uQ29t
cGlsYXRpb24mJiBjb21waWxhdGlvbikKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisKKyAgICBtX2NvZGUgPSBXVEZNb3ZlKGNvbXBpbGF0aW9uLmNvZGUpOworICAgIG1fanNFbnRy
eVBvaW50ID0gV1RGTW92ZShjb21waWxhdGlvbi5qc0VudHJ5UG9pbnQpOworfQorCit2b2lkIEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEpTV2ViQXNz
ZW1ibHlDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNl
bGwpOworICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1ibHlDYWxsZWU6On5KU1dlYkFzc2VtYmx5
Q2FsbGVlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlDYWxsZWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlND
YWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlIDogcHVibGljIEpTQ2FsbGVlIHsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNhbGxl
ZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2FzbTo6RnVu
Y3Rpb25Db21waWxhdGlvbiYmIGNvbXBpbGF0aW9uKQorICAgIHsKKyAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogY2FsbGVlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3Nl
bWJseUNhbGxlZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlDYWxsZWUodm0sIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIGNhbGxlZS0+ZmluaXNoQ3JlYXRpb24odm0sIFdURk1vdmUoY29tcGlsYXRp
b24pKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisg
ICAgdm9pZCBpbml0aWFsaXplQ29tcGlsYXRpb25JbmZvKFdhc206OkZ1bmN0aW9uQ29tcGlsYXRp
b24mJik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2FzbTo6
RnVuY3Rpb25Db21waWxhdGlvbiYmKTsKKworcHJpdmF0ZToKKyAgICBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29t
cGlsYXRpb24+IG1fY29kZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBt
X2pzRW50cnlQb2ludDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIwOTA5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw5IEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICBpZiAocGxhbi5mYWls
ZWQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0
ZSwgc2NvcGUsIGNyZWF0ZVdlYkFzc2VtYmx5Q29tcGlsZUVycm9yKHN0YXRlLCBwbGFuLmVycm9y
TWVzc2FnZSgpKSkpOwogCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgY2FsbGVlczsKKyAgICBw
bGFuLgorCiAgICAgLy8gT24gc3VjY2VzcywgYSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlIG9iamVj
dCBpcyByZXR1cm5lZCB3aXRoIFtbTW9kdWxlXV0gc2V0IHRvIHRoZSB2YWxpZGF0ZWQgQXN0Lm1v
ZHVsZS4KICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJj
bGFzc1N0cnVjdHVyZShzdGF0ZSwgc3RhdGUtPm5ld1RhcmdldCgpLCBhc0ludGVybmFsRnVuY3Rp
b24oc3RhdGUtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCktPldlYkFzc2VtYmx5TW9kdWxlU3Ry
dWN0dXJlKCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295691</attachid>
            <date>2016-11-29 18:42:22 -0800</date>
            <delta_ts>2016-12-01 15:18:06 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>37377</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDkwOTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogI2lu
Y2x1ZGUgIkpTUHJveHkuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAi
TExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgpAQCAtMjUxMiw3ICsyNTEzLDcgQEAgc3RhdGljIEpTVmFsdWUgYm94KEV4
ZWNTdGF0ZSogZXhlYywgVk0mIAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGNh
bGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBjb25zdCBCMzo6Q29tcGlsYXRpb24mIGNvZGUsIFZlY3Rv
cjxKU1ZhbHVlPiYgYm94ZWRBcmdzKQorc3RhdGljIEpTVmFsdWUgY2FsbFdhc21GdW5jdGlvbihW
TSogdm0sIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSwgVmVjdG9yPEpTVmFsdWU+JiBib3hl
ZEFyZ3MpCiB7CiAgICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50OwogICAgIGludCBhcmdDb3VudCA9
IDE7CkBAIC0yNTI1LDkgKzI1MjYsOSBAQCBzdGF0aWMgSlNWYWx1ZSBjYWxsV2FzbUZ1bmN0aW9u
KFZNKiB2bSwgCiAgICAgfQogCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7Ci0g
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBudWxscHRyLCBmaXJzdEFyZ3VtZW50LCBh
cmdDb3VudCwgcmVtYWluaW5nQXJncyk7CisgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRy
LCBjYWxsZWUsIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKIAotICAg
IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvV2FzbShjb2RlLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpLCB2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmRlY29kZSh2bUVudHJ5VG9XYXNtKGNhbGxlZS0+anNFbnRyeVBvaW50KCksIHZtLCAmcHJvdG9D
YWxsRnJhbWUpKTsKIH0KIAogLy8gdGVzdFdhc21Nb2R1bGUoSlNBcnJheUJ1ZmZlclZpZXcgc291
cmNlLCBudW1iZXIgZnVuY3Rpb25Db3VudCwgLi4uW1tXYXNtVmFsdWUsIFtXYXNtVmFsdWVdXV0p
IHdoZXJlIHRoZSBpdGggY29weSBvZiBbW3Jlc3VsdCwgW2FyZ3NdXV0gaXMgYSBsaXN0CkBAIC0y
NTU2LDkgKzI1NTcsMTkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
YwogICAgIGlmIChwbGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpICE9IGZ1bmN0aW9uQ291bnQp
CiAgICAgICAgIENSQVNIKCk7CiAKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBjYWxsZWVzOwor
ICAgIHsKKyAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICB1bnNpZ25l
ZCBjYWxsZWVDb3VudCA9IHBsYW4uY29tcGlsZWRGdW5jdGlvbkNvdW50KCk7CisgICAgICAgIEpT
V2ViQXNzZW1ibHlDYWxsZWUqKiBsb2NhbEJ1ZmZlciA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1i
bHlDYWxsZWUqKj4odm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBzaXplb2Yo
SlNXZWJBc3NlbWJseUNhbGxlZSopICogY2FsbGVlQ291bnQpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobG9jYWxCdWZmZXIpOworICAgICAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgbG9jYWxCdWZmZXIpOworCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjYWxsZWVDb3VudDsgaSsrKQorICAgICAgICAgICAgY2FsbGVlcy5h
cHBlbmQobG9jYWxCdWZmZXJbaV0pOworICAgIH0KKwogICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBmdW5jdGlvbkNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKCFwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oaSkpCi0gICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBjb21waWxlIGZ1bmN0
aW9uIGF0IGluZGV4IiwgaSk7CiAKICAgICAgICAgSlNBcnJheSogdGVzdENhc2VzID0ganNDYXN0
PEpTQXJyYXkqPihleGVjLT5hcmd1bWVudChpICsgMikpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IHRlc3RJbmRleCA9IDA7IHRlc3RJbmRleCA8IHRlc3RDYXNlcy0+bGVuZ3RoKCk7ICsrdGVzdElu
ZGV4KSB7CkBAIC0yNTcwLDcgKzI1ODEsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsgYXJn
SW5kZXggPCBhcmd1bWVudHMtPmxlbmd0aCgpOyArK2FyZ0luZGV4KQogICAgICAgICAgICAgICAg
IGJveGVkQXJncy5hcHBlbmQoYm94KGV4ZWMsIHZtLCBhcmd1bWVudHMtPmdldEluZGV4UXVpY2ts
eShhcmdJbmRleCkpKTsKIAotICAgICAgICAgICAgSlNWYWx1ZSBjYWxsUmVzdWx0ID0gY2FsbFdh
c21GdW5jdGlvbigmdm0sICpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oaSktPmpzRW50cnlQb2ludCwg
Ym94ZWRBcmdzKTsKKyAgICAgICAgICAgIEpTVmFsdWUgY2FsbFJlc3VsdCA9IGNhbGxXYXNtRnVu
Y3Rpb24oJnZtLCBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNhbGxlZXMuYXQoaSkpLCBi
b3hlZEFyZ3MpOwogICAgICAgICAgICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJveChleGVjLCB2bSwg
cmVzdWx0KTsKICAgICAgICAgICAgIGlmIChjYWxsUmVzdWx0ICE9IGV4cGVjdGVkKSB7CiAgICAg
ICAgICAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sIHRvQ1N0cmluZygiIChjYWxsUmVzdWx0ID09ICIsIFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjYWxsUmVzdWx0KSksICIsIGV4cGVjdGVkID09ICIs
IFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihleHBlY3RlZCkpLCAiKSIpLmRhdGEoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5MDkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOTcsNiArMTE5Nyw3IEBACiAJCTE0RjcyNTY2MTRF
RTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjcyNTY0MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFr
SGFuZGxlT3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNEY5NzQ0NzEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RWaXNpdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEY5NzQ0NjEzOEM4
NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUEyOEQ0QTgxNzdCNzFDODAwMDdGQTNDIC8qIEpT
U3RyaW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEyOEQ0QTcxNzdCNzFDODAwMDdGQTNDIC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTFBODgy
NkIxNjUzQzRDRDFBNjQyOTgzQiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEI0N0YyMzQzNjZDNEI3
MkFDODUyQTdFIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAgKi87IH07CiAJCTFBQ0Y3
Mzc3MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNw
cCAqLzsgfTsKIAkJMjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE0
MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi87IH07CiAJCTI2MDBCNUE3
MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpT
U3RyaW5nSm9pbmVyLmggKi87IH07CkBAIC0xMzk3LDYgKzEzOTgsNyBAQAogCQk3MEVDQTYwOTFB
RkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8q
IFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MkFBRjdDRDFEMEQzMUIzMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbi5jcHAgKi87IH07CiAJCTcyQUFGN0NFMUQwRDMxQjMwMDVFNjBCRSAvKiBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkFBRjdDQzFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbi5oICovOyB9OworCQk3ODI3NEQ4RTRDNEQ0RkNEOUExREM2RTYgLyog
VGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCREI0QjVFMDk5Q0Q0QzFCQjNDMUNGMDUgLyogVGVtcGxhdGVSZWdpc3Ry
eUtleS5jcHAgKi87IH07CiAJCTc5MDVCQjY4MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nl
c3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkw
NUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgKi87IH07CiAJCTc5MDVC
QjY5MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJ
bmxpbmVBY2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OTE2MERCRDFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkxNjBEQkIxQzhFM0VD
ODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCAqLzsgfTsKQEAgLTE0MjksNiArMTQzMSw4IEBA
CiAJCTc5RDVDRDVBMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU4MUMxMTA2
QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmNwcCAqLzsgfTsKIAkJNzlENUNENUIxQzEx
MDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1w
bGluZ1Byb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REZDQkRB
MUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzlFNDIzRTIxREVFNjUzMjAwNzhE
MzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFNDIzRTAxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwICovOyB9OworCQk3OUU0MjNFMzFERUU2NTMyMDA3OEQzNTUgLyogSlNX
ZWJBc3NlbWJseUNhbGxlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVF
MEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRDFCNEFGQjg1MDAw
Mzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5RUUwQzAwMUI0QUZC
ODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFy
aWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc5RjhGQzFFMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJ
bnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTU0NCw2ICsxNTQ4LDcgQEAKIAkJOTMzMDQwMDQwRTZB
NzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3Ry
aW5ncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzMzA0MDJDMEU2QTc2NDAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDNGRTgwRTZBNzJCNTAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgKi87IH07CiAJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1
MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzQ1QTg3MTJEODM4QzQwMDMwMkJFMyAvKiBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyLmNwcCAqLzsgfTsKKwkJOTVENDI2MUFGNEM4NENFMkFDQkFDOTgxIC8q
IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDhGQzJGMzdBQjc2NDgzQTk5NjY2ODhGIC8qIFRlbXBsYXRlUmVn
aXN0cnlLZXlUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk2MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjAwOTdBNTBFQkFCQjU4
MDA3QTcyOTcgLyogTGFiZWxTY29wZS5oICovOyB9OwogCQk5Njg4Q0IxNTBFRDEyQjRFMDAxRDY0
OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5Njg4Q0IxMzBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTY4
OENCMTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlGIC8q
IFg4NkFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0yMzI5LDkgKzIzMzQsNiBAQAogCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFRDk0RjJDMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFRjA0MDUxMUFBRTY2MkQwMEJE
MjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVB
bmRTd2FwVGVzdC5jcHAgKi87IH07CiAJCUZFRkQ2RkM2MUQ1RTc5OTIwMDhGMkYwQiAvKiBKU1N0
cmluZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZFRkQ2RkM1MUQ1RTc5NzAwMDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQTg4MjZCMTY1M0M0
Q0QxQTY0Mjk4M0IgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhCNDdGMjM0MzY2QzRCNzJBQzg1MkE3
RSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwICovOyB9OwotCQk3ODI3NEQ4RTRDNEQ0
RkNEOUExREM2RTYgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCREI0QjVFMDk5Q0Q0QzFCQjNDMUNGMDUgLyog
VGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgKi87IH07Ci0JCTk1RDQyNjFBRjRDODRDRTJBQ0JBQzk4
MSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4RkMyRjM3QUI3NjQ4M0E5OTY2Njg4RiAvKiBUZW1wbGF0
ZVJlZ2lzdHJ5S2V5VGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC0yNDg0LDYgKzI0ODYsNyBAQAogCiAv
KiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAkJMDAwQkVBRjBERjYwNDQ4MUFG
NkFCNjhDIC8qIE1vZHVsZVNjb3BlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNb2R1bGVTY29wZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDhG
QzJGMzdBQjc2NDgzQTk5NjY2ODhGIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwMTIzMzAxOTQ0RUExQjAwODQzQTBDIC8q
IERGR1ZhbHVlU3RyZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHVmFsdWVTdHJlbmd0aC5jcHA7IHBhdGggPSBkZmcvREZHVmFsdWVTdHJlbmd0aC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDEyMzMxMTk0NEVBMUIwMDg0M0EwQyAv
KiBERkdWYWx1ZVN0cmVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1ZhbHVlU3RyZW5ndGguaDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVN0cmVuZ3RoLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDMzMkJGMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5n
SklUVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeGl0aW5n
SklUVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODQ3LDYgKzM4NTAs
OCBAQAogCQk3OUQ1Q0Q1ODFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ1Byb2ZpbGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlENUNENTkxQzExMDZBOTAwQ0VDQTA3
IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2FtcGxpbmdQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OURGQ0JE
QTFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIYXNPd25Qcm9wZXJ0eUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTc5RTQyM0UwMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5
Q2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5RTQyM0UxMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dl
YkFzc2VtYmx5Q2FsbGVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2Vi
QXNzZW1ibHlDYWxsZWUuaDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkQxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlh
YmxlRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmFyaWFibGVFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
RUUwQkZFMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlRW52aXJvbm1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlGOEZDMUMxQjlGRUQwRjAwQ0E2NkFCIC8qIERGR01heGlt
YWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0zOTc0LDYgKzM5NzksNyBAQAogCQk4NkY3NUVGRDE1MUMwNjJGMDA3QzlCQTMgLyogUmVn
RXhwTWF0Y2hlc0FycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZ0V4cE1hdGNoZXNBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
RkE5RThGMTQyQkJCMkQwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNCb3VuZEZ1bmN0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZGQTlFOTAxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRG
dW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0JvdW5kRnVuY3Rp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOEI0N0YyMzQzNjZDNEI3MkFDODUy
QTdFIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4QjlGNkQ1NTFENTkxMkZBMDAxQzczOUYgLyogSXRlcmF0aW9u
S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRpb25LaW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMjEzRTNCMTIzQTQwQzIwMEQ0MjJGMyAv
KiBNZW1vcnlTdGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1lbW9yeVN0YXRpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MDIxM0UzQzEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NTQ1LDYgKzQ1NTEsNyBAQAogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBC
OUE2NEQgLyogQXJnTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdM
aXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4
Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSnVtcFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTEw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKdW1wVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkRCNEI1
RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMDMyODFFMTk4MTk3OUQwMDg4QjQ5OSAvKiBDdXN0
b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1l
ID0gQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmM7IHBhdGggPSBBUEkvdGVzdHMvQ3VzdG9t
R2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
MDMyODFGMTk4MTk3OUQwMDg4QjQ5OSAvKiBDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NU
ZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMEJBOTJDMTZCQjFDMTUwMEIzQUVBMiAvKiBT
dHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00ODIyLDkgKzQ4MjksNiBAQAogCQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IENvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBU
ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTIxQUFFQzRFRDAw
QkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5k
U3dhcFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGRDZGQzUxRDVFNzk3
MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
OEI0N0YyMzQzNjZDNEI3MkFDODUyQTdFIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5
VGFibGUuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRl
UmVnaXN0cnlLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVGVt
cGxhdGVSZWdpc3RyeUtleS5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhGQzJGMzdBQjc2NDgzQTk5NjY2ODhGIC8qIFRl
bXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXlU
YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVu
Y2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9u
ICovCkBAIC03NTUwLDYgKzc1NTQsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQUQyRkNDMjYx
REI4MzhDNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCAqLywKIAkJCQlBRDJG
Q0MyNzFEQjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLywKKwkJCQk3
OUU0MjNFMDFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi8sCisJ
CQkJNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLywK
IAkJCQlBRDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJv
ci5jcHAgKi8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlD
b21waWxlRXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBODFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJB
c3NlbWJseUluc3RhbmNlLmNwcCAqLywKQEAgLTc4NDIsNiArNzg0OCw3IEBACiAJCQkJNjUxNEYy
MTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3OUU0MjNFMzFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJl
Y292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyog
Q2FsbERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjRCMjdBMUE3OTU3QjIwMDZFNEU2NiAv
KiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDEyMSw2ICsxMDEyOCw3IEBACiAJCQkJ
QkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAwNDJFQzJDIC8qIExleGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5RTQyM0UyMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dl
YkFzc2VtYmx5Q2FsbGVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzU3MTU5MTRBMjAw
MDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZC
NDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
QTFBMDk1MUQ4Q0IzNDEwMDRDMkVCOCAvKiBEZWJ1Z2dlclBhcnNlRGF0YS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHJldmlzaW9uIDIwOTA5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3
IEBACiAjaW5jbHVkZSAiSlNXZWFrTWFwLmgiCiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIK
ICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxhenlDbGFzc1N0cnVjdHVyZUlu
bGluZXMuaCIKICNpbmNsdWRlICJMYXp5UHJvcGVydHlJbmxpbmVzLmgiCkBAIC04OTUsNiArODk2
LDggQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogCiAgICAgICAg
IEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUoQ1JFQVRFX1dFQkFTU0VNQkxZ
X0NPTlNUUlVDVE9SKQogCisgICAgICAgIG1fd2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUuc2V0
KHZtLCB0aGlzLCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMs
IGpzTnVsbCgpKSk7CisKICN1bmRlZiBDUkVBVEVfV0VCQVNTRU1CTFlfQ09OU1RSVUNUT1IKICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpAQCAtMTI1Myw2ICsxMjU2LDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbAogICAgIAogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV93ZWJBc3Nl
bWJseVN0cnVjdHVyZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fd2ViQXNz
ZW1ibHlDYWxsZWVTdHJ1Y3R1cmUpOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVD
VE9SX1RZUEUoVklTSVRfU0lNUExFX1RZUEUpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgJKHJldmlzaW9uIDIwOTA5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw2ICszNDIsOCBAQCBwdWJs
aWM6CiAgICAgCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fd2ViQXNzZW1ibHlTdHJ1Y3R1cmU7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV93ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIHdlYkFzc2Vt
Ymx5Q2FsbGVlU3RydWN0dXJlKCkgeyByZXR1cm4gbV93ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVy
ZS5nZXQoKTsgfQogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUoREVG
SU5FX1NUT1JBR0VfRk9SX1NJTVBMRV9UWVBFKQogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA5MDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcg
QEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4
cHJlc3Npb24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1
cmUmLCBWZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5saW5rZWRDYWxscyk7CisgICAgQjNJUkdlbmVy
YXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBGdW5jdGlvbkNvbXBpbGF0aW9uKik7CiAKICAgICBi
b29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7
CiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpA
QCAtMTg5LDE2ICsxODksNDIgQEAgcHJpdmF0ZToKICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW1R5
cGU6Okxhc3RWYWx1ZVR5cGVdOwogfTsKIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihN
ZW1vcnkqIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZENhbGw+
JiB1bmxpbmtlZENhbGxzKQorQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1vcnkqIG1l
bW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEZ1bmN0aW9uQ29tcGlsYXRpb24qIGNvbXBpbGF0
aW9uKQogICAgIDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKLSAg
ICAsIG1fdW5saW5rZWRDYWxscyh1bmxpbmtlZENhbGxzKQorICAgICwgbV91bmxpbmtlZENhbGxz
KGNvbXBpbGF0aW9uLT51bmxpbmtlZENhbGxzKQogewogICAgIG1fY3VycmVudEJsb2NrID0gbV9w
cm9jLmFkZEJsb2NrKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgVHlwZTo6TGFz
dFZhbHVlVHlwZTsgKytpKQogICAgICAgICBtX3plcm9WYWx1ZXNbaV0gPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBPcmlnaW4oKSwgdG9CM1R5cGUoc3RhdGljX2Nh
c3Q8VHlwZT4oaSArIDEpKSwgMCk7CiAKKyAgICAvLyBGSVhNRTogaG93IGRvIHdlIG1ha2Ugc3Vy
ZSB0aGlzIGlzIHRoZSBmaXJzdCB0aGluZyB0byBleGVjdXRlPworICAgIFBhdGNocG9pbnRWYWx1
ZSogZ2V0Q2FsbGVlUGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBh
dGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIGdldENhbGxlZVBh
dGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOworICAg
IGdldENhbGxlZVBhdGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgZ2V0
Q2FsbGVlUGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdCA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpEYXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2go
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdCk7CisgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtb3ZlTG9jYXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOwor
CisgICAgVmFsdWUqIGZyYW1lUG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigpKTsKKworICAgIFZhbHVl
KiBvZmZzZXRPZkNhbGxlZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzaXplb2YoUmVnaXN0
ZXIpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IFN0b3JlLCBPcmlnaW4oKSwKKyAgICAgICAgZ2V0Q2FsbGVlUGF0Y2hwb2ludCwKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIE9yaWdpbigpLCBm
cmFtZVBvaW50ZXIsIG9mZnNldE9mQ2FsbGVlKSk7CisKKyAgICBWYWx1ZSogb2Zmc2V0T2ZDb2Rl
QmxvY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBP
cmlnaW4oKSwgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSk7Cisg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwg
T3JpZ2luKCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVl
PihtX3Byb2MsIE9yaWdpbigpLCAwKSwKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBBZGQsIE9yaWdpbigpLCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ29k
ZUJsb2NrKSk7CisKKwogICAgIGlmIChtX21lbW9yeSkgewogICAgICAgICBtX21lbW9yeUJhc2VH
UFIgPSBtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJzKCkuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAg
ICAgIG1fcHJvYy5waW5SZWdpc3RlcihtX21lbW9yeUJhc2VHUFIpOwpAQCAtNzIyLDcgKzc0OCw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiBwYXIKICAgICBhdXRvIHJl
c3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8RnVuY3Rpb25Db21waWxhdGlvbj4oKTsKIAogICAgIFBy
b2NlZHVyZSBwcm9jZWR1cmU7Ci0gICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJv
Y2VkdXJlLCByZXN1bHQtPnVubGlua2VkQ2FsbHMpOworICAgIEIzSVJHZW5lcmF0b3IgY29udGV4
dChtZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpKTsKICAgICBGdW5jdGlvblBhcnNlcjxC
M0lSR2VuZXJhdG9yPiBwYXJzZXIoY29udGV4dCwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5n
dGgsIHNpZ25hdHVyZSwgZnVuY3Rpb25zKTsKICAgICBpZiAoIXBhcnNlci5wYXJzZSgpKQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjA5MDkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1
LDcgQEAgc3RydWN0IFVubGlua2VkQ2FsbCB7CiAKIHN0cnVjdCBGdW5jdGlvbkNvbXBpbGF0aW9u
IHsKICAgICBWZWN0b3I8VW5saW5rZWRDYWxsPiB1bmxpbmtlZENhbGxzOworICAgIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0ciBjYWxsZWVNb3ZlTG9jYXRpb247CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEIzOjpDb21waWxhdGlvbj4gY29kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0
aW9uPiBqc0VudHJ5UG9pbnQ7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuLmNwcAkocmV2aXNpb24gMjA5MDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIK
QEAgLTExMCw2ICsxMTMsMTggQEAgdm9pZCBQbGFuOjpydW4oKQogICAgIG1fZmFpbGVkID0gZmFs
c2U7CiB9CiAKK3ZvaWQgUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNXZWJBc3NlbWJseUNhbGxlZSoqIGNhbGxlZXMpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY29tcGlsZWRGdW5jdGlvbnMuc2l6ZSgpOyBpKyspIHsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBjb21waWxhdGlvbiA9
IG1fY29tcGlsZWRGdW5jdGlvbnNbaV07CisgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0
ciBjYWxsZWVNb3ZlTG9jYXRpb24gPSBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uOwor
ICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVl
OjpjcmVhdGUoZ2xvYmFsT2JqZWN0LT52bSgpLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoY29tcGls
YXRpb24pKTsKKyAgICAgICAgY2FsbGVlc1tpXSA9IGNhbGxlZTsKKworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoY2FsbGVlTW92ZUxvY2F0aW9uLCBjYWxsZWUpOworICAg
IH0KK30KKwogUGxhbjo6flBsYW4oKSB7IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAkocmV2aXNpb24gMjA5MDky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsMTQgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
V2FzbSB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBK
U1dlYkFzc2VtYmx5Q2FsbGVlOworY2xhc3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CisgICAgCitu
YW1lc3BhY2UgV2FzbSB7CisKIGNsYXNzIE1lbW9yeTsKIAogY2xhc3MgUGxhbiB7CkBAIC00Myw2
ICs1MCw3IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+UGxhbigpOwogCiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW4oKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0KiwgSlNXZWJBc3NlbWJseUNhbGxlZSoq
IGJ1ZmZlcik7CiAKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBmYWlsZWQoKSBjb25zdCB7
IHJldHVybiBtX2ZhaWxlZDsgfQogICAgIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxs
ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDYWxsZWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgorCisj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJ
bmZvIEpTV2ViQXNzZW1ibHlDYWxsZWU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q2FsbGVlIiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q2FsbGVl
KSB9OworCitKU1dlYkFzc2VtYmx5Q2FsbGVlOjpKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAvLyBXZSBwYXNzIGluIHRoZSBnbG9i
YWwgb2JqZWN0IGZvciB0aGUgc2NvcGUganVzdCB0byBoYXZlIGEgdmFsaWQgc2NvcGUgZm9yIHRo
YXQgZmllbGQuCisgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2Vi
QXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUoKSkKK3sgfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDYWxs
ZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgc3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9u
Q29tcGlsYXRpb24+JiYgY29tcGlsYXRpb24pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOworCisgICAgbV9jb2RlID0gV1RGTW92ZShjb21waWxhdGlvbi0+Y29kZSk7CisgICAgbV9q
c0VudHJ5UG9pbnQgPSBXVEZNb3ZlKGNvbXBpbGF0aW9uLT5qc0VudHJ5UG9pbnQpOworfQorCit2
b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEpT
V2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxl
ZSo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1ibHlDYWxsZWU6On5KU1dlYkFz
c2VtYmx5Q2FsbGVlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVk
ZSAiSlNDYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlIDogcHVibGljIEpTQ2FsbGVlIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJs
eUNhbGxlZSogY3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc3Rk
Ojp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+JiYgY29tcGlsYXRpb24pCisg
ICAgeworICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q2FsbGVlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJs
eUNhbGxlZSh2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgY2FsbGVlLT5maW5pc2hDcmVhdGlv
bih2bSwgV1RGTW92ZShjb21waWxhdGlvbikpOworICAgICAgICByZXR1cm4gY2FsbGVlOworICAg
IH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICB7CisgICAg
ICAgIEFTU0VSVChnbG9iYWxPYmplY3QpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworICAgIHN0
YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICB2b2lkKiBqc0VudHJ5UG9pbnQoKSB7IHJldHVybiBt
X2pzRW50cnlQb2ludC0+Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IH0KKworCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpG
dW5jdGlvbkNvbXBpbGF0aW9uPiYmKTsKKworcHJpdmF0ZToKKyAgICBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29t
cGlsYXRpb24+IG1fY29kZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBt
X2pzRW50cnlQb2ludDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHJldmlzaW9uIDIwOTA5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxNSArMjksMTggQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5o
IgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNXZWJBc3Nl
bWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1v
ZHVsZUluZm9ybWF0aW9uLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYgY29tcGlsZWRGdW5jdGlv
bnMpCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1vZHVsZTo6c19pbmZvID0geyAiV2Vi
QXNzZW1ibHkuTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U1dlYkFzc2VtYmx5TW9kdWxlKSB9OworCitKU1dlYkFzc2VtYmx5TW9kdWxlKiBKU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlx
dWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24sIHVuc2ln
bmVkIGNhbGxlZUNvdW50LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiogY2FsbGVlcykKIHsKLSAgICBh
dXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlN
b2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUsIG1vZHVs
ZUluZm9ybWF0aW9uLCBjb21waWxlZEZ1bmN0aW9ucyk7CisgICAgYXV0byogaW5zdGFuY2UgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFwKSkg
SlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlvbiwgY2Fs
bGVlQ291bnQsIGNhbGxlZXMpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAg
ICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDcsMTAgKzUwLDExIEBAIFN0cnVjdHVyZSogSlNX
ZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3QKICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2ViQXNzZW1i
bHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdh
c206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24sIFdhc206OkNvbXBpbGVk
RnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucykKK0pTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2Vi
QXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVf
cHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24sIHVuc2lnbmVk
IGNhbGxlZUNvdW50LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiogY2FsbGVlcykKICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKICAgICAsIG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShtb2R1bGVJ
bmZvcm1hdGlvbikpCi0gICAgLCBtX2NvbXBpbGVkRnVuY3Rpb25zKFdURk1vdmUoY29tcGlsZWRG
dW5jdGlvbnMpKQorICAgICwgbV9jYWxsZWVzKHZtLCB0aGlzLCBjYWxsZWVzKQorICAgICwgbV9j
YWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKIH0KIApAQCAtNzEsOSArNzUsMTMgQEAgdm9pZCBK
U1dlYkFzc2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKAogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKIAogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7Ci19CiAKLWNvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5
TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CisgICAgdmlzaXRv
ci5tYXJrQXV4aWxpYXJ5KHRoaXNPYmplY3QtPm1fY2FsbGVlcy5nZXQoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1fY2FsbGVlQ291bnQ7IGkrKykgeworICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiYgY2FsbGVlID0gdGhpc09iamVjdC0+bV9jYWxsZWVz
LmdldCgpW2ldOworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUG9pbnRlcigmY2Fs
bGVlKTsKKyAgICB9Cit9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZp
c2lvbiAyMDkwOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5TW9kdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxMyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZTsKKwogY2xhc3MgSlNXZWJBc3Nl
bWJseU1vZHVsZSA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAg
dHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbj4mLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYpOworICAgIHN0
YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVu
aXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiwgdW5zaWduZWQgY2FsbGVlQ291bnQs
IEpTV2ViQXNzZW1ibHlDYWxsZWUqKiBjYWxsZWVzKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVD
TEFSRV9JTkZPOwpAQCAtNDgsMTMgKzUwLDE0IEBAIHB1YmxpYzoKICAgICB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1bmlxdWVf
cHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYsIFdhc206OkNvbXBpbGVkRnVuY3Rpb25zJik7
CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mLCB1bnNpZ25lZCBjYWxsZWVDb3VudCwgSlNXZWJB
c3NlbWJseUNhbGxlZSoqIGNhbGxlZXMpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsK
ICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwotICAg
IFdhc206OkNvbXBpbGVkRnVuY3Rpb25zIG1fY29tcGlsZWRGdW5jdGlvbnM7CisgICAgQXV4aWxp
YXJ5QmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlKio+IG1fY2FsbGVlczsKKyAgICB1bnNpZ25l
ZCBtX2NhbGxlZUNvdW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA5MDkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDExICs3NCwxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjb25zCiAgICAgaWYgKHBsYW4uZmFpbGVkKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVXZWJBc3NlbWJseUNv
bXBpbGVFcnJvcihzdGF0ZSwgcGxhbi5lcnJvck1lc3NhZ2UoKSkpKTsKIAorICAgIHVuc2lnbmVk
IGNhbGxlZUNvdW50ID0gcGxhbi5jb21waWxlZEZ1bmN0aW9uQ291bnQoKTsKKyAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiogY2FsbGVlcyA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUq
Kj4odm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBzaXplb2YoSlNXZWJBc3Nl
bWJseUNhbGxlZSopICogY2FsbGVlQ291bnQpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVz
KTsgLy8gRklYTUU6IHRocm93IG9vbSBoZXJlLgorICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMo
c3RhdGUtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKSwgY2FsbGVlcyk7CisKICAgICAvLyBPbiBz
dWNjZXNzLCBhIG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUgb2JqZWN0IGlzIHJldHVybmVkIHdpdGgg
W1tNb2R1bGVdXSBzZXQgdG8gdGhlIHZhbGlkYXRlZCBBc3QubW9kdWxlLgogICAgIGF1dG8qIHN0
cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKHN0YXRl
LCBzdGF0ZS0+bmV3VGFyZ2V0KCksIGFzSW50ZXJuYWxGdW5jdGlvbihzdGF0ZS0+Y2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKS0+V2ViQXNzZW1ibHlNb2R1bGVTdHJ1Y3R1cmUoKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
LCBwbGFuLmdldE1vZHVsZUluZm9ybWF0aW9uKCksIHBsYW4uZ2V0Q29tcGlsZWRGdW5jdGlvbnMo
KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUsIHBsYW4uZ2V0TW9kdWxlSW5mb3JtYXRpb24oKSwgY2FsbGVlQ291
bnQsIGNhbGxlZXMpKTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295904</attachid>
            <date>2016-12-01 15:18:06 -0800</date>
            <delta_ts>2016-12-01 20:08:14 -0800</delta_ts>
            <desc>RFC WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>59229</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDkxOTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogI2lu
Y2x1ZGUgIkpTUHJveHkuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAi
TExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgpAQCAtMjUyMSw3ICsyNTIyLDcgQEAgc3RhdGljIEpTVmFsdWUgYm94KEV4
ZWNTdGF0ZSogZXhlYywgVk0mIAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGNh
bGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBjb25zdCBCMzo6Q29tcGlsYXRpb24mIGNvZGUsIFZlY3Rv
cjxKU1ZhbHVlPiYgYm94ZWRBcmdzKQorc3RhdGljIEpTVmFsdWUgY2FsbFdhc21GdW5jdGlvbihW
TSogdm0sIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSwgVmVjdG9yPEpTVmFsdWU+JiBib3hl
ZEFyZ3MpCiB7CiAgICAgSlNWYWx1ZSBmaXJzdEFyZ3VtZW50OwogICAgIGludCBhcmdDb3VudCA9
IDE7CkBAIC0yNTM0LDkgKzI1MzUsOSBAQCBzdGF0aWMgSlNWYWx1ZSBjYWxsV2FzbUZ1bmN0aW9u
KFZNKiB2bSwgCiAgICAgfQogCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7Ci0g
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBudWxscHRyLCBmaXJzdEFyZ3VtZW50LCBh
cmdDb3VudCwgcmVtYWluaW5nQXJncyk7CisgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRy
LCBjYWxsZWUsIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKIAotICAg
IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvV2FzbShjb2RlLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpLCB2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmRlY29kZSh2bUVudHJ5VG9XYXNtKGNhbGxlZS0+anNFbnRyeVBvaW50KCksIHZtLCAmcHJvdG9D
YWxsRnJhbWUpKTsKIH0KIAogLy8gdGVzdFdhc21Nb2R1bGUoSlNBcnJheUJ1ZmZlclZpZXcgc291
cmNlLCBudW1iZXIgZnVuY3Rpb25Db3VudCwgLi4uW1tXYXNtVmFsdWUsIFtXYXNtVmFsdWVdXV0p
IHdoZXJlIHRoZSBpdGggY29weSBvZiBbW3Jlc3VsdCwgW2FyZ3NdXV0gaXMgYSBsaXN0CkBAIC0y
NTY1LDkgKzI1NjYsMTkgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
YwogICAgIGlmIChwbGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpICE9IGZ1bmN0aW9uQ291bnQp
CiAgICAgICAgIENSQVNIKCk7CiAKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBjYWxsZWVzOwor
ICAgIHsKKyAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAgICB1bnNpZ25l
ZCBjYWxsZWVDb3VudCA9IHBsYW4uY29tcGlsZWRGdW5jdGlvbkNvdW50KCk7CisgICAgICAgIEpT
V2ViQXNzZW1ibHlDYWxsZWUqKiBsb2NhbEJ1ZmZlciA9IHN0YXRpY19jYXN0PEpTV2ViQXNzZW1i
bHlDYWxsZWUqKj4odm0uaGVhcC50cnlBbGxvY2F0ZUF1eGlsaWFyeShudWxscHRyLCBzaXplb2Yo
SlNXZWJBc3NlbWJseUNhbGxlZSopICogY2FsbGVlQ291bnQpKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobG9jYWxCdWZmZXIpOworICAgICAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSwgbG9jYWxCdWZmZXIpOworCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjYWxsZWVDb3VudDsgaSsrKQorICAgICAgICAgICAgY2FsbGVlcy5h
cHBlbmQobG9jYWxCdWZmZXJbaV0pOworICAgIH0KKwogICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBmdW5jdGlvbkNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKCFwbGFuLmNvbXBpbGVkRnVu
Y3Rpb24oaSkpCi0gICAgICAgICAgICBkYXRhTG9nTG4oImZhaWxlZCB0byBjb21waWxlIGZ1bmN0
aW9uIGF0IGluZGV4IiwgaSk7CiAKICAgICAgICAgSlNBcnJheSogdGVzdENhc2VzID0ganNDYXN0
PEpTQXJyYXkqPihleGVjLT5hcmd1bWVudChpICsgMikpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IHRlc3RJbmRleCA9IDA7IHRlc3RJbmRleCA8IHRlc3RDYXNlcy0+bGVuZ3RoKCk7ICsrdGVzdElu
ZGV4KSB7CkBAIC0yNTc5LDcgKzI1OTAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ0luZGV4ID0gMDsgYXJn
SW5kZXggPCBhcmd1bWVudHMtPmxlbmd0aCgpOyArK2FyZ0luZGV4KQogICAgICAgICAgICAgICAg
IGJveGVkQXJncy5hcHBlbmQoYm94KGV4ZWMsIHZtLCBhcmd1bWVudHMtPmdldEluZGV4UXVpY2ts
eShhcmdJbmRleCkpKTsKIAotICAgICAgICAgICAgSlNWYWx1ZSBjYWxsUmVzdWx0ID0gY2FsbFdh
c21GdW5jdGlvbigmdm0sICpwbGFuLmNvbXBpbGVkRnVuY3Rpb24oaSktPmpzRW50cnlQb2ludCwg
Ym94ZWRBcmdzKTsKKyAgICAgICAgICAgIEpTVmFsdWUgY2FsbFJlc3VsdCA9IGNhbGxXYXNtRnVu
Y3Rpb24oJnZtLCBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNhbGxlZXMuYXQoaSkpLCBi
b3hlZEFyZ3MpOwogICAgICAgICAgICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJveChleGVjLCB2bSwg
cmVzdWx0KTsKICAgICAgICAgICAgIGlmIChjYWxsUmVzdWx0ICE9IGV4cGVjdGVkKSB7CiAgICAg
ICAgICAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sIHRvQ1N0cmluZygiIChjYWxsUmVzdWx0ID09ICIsIFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihjYWxsUmVzdWx0KSksICIsIGV4cGVjdGVkID09ICIs
IFJhd1BvaW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihleHBlY3RlZCkpLCAiKSIpLmRhdGEoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5MTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOTcsNiArMTE5Nyw3IEBACiAJCTE0RjcyNTY2MTRF
RTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjcyNTY0MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFr
SGFuZGxlT3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNEY5NzQ0NzEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RWaXNpdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEY5NzQ0NjEzOEM4
NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUEyOEQ0QTgxNzdCNzFDODAwMDdGQTNDIC8qIEpT
U3RyaW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUEyOEQ0QTcxNzdCNzFDODAwMDdGQTNDIC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTFBODgy
NkIxNjUzQzRDRDFBNjQyOTgzQiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEI0N0YyMzQzNjZDNEI3
MkFDODUyQTdFIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAgKi87IH07CiAJCTFBQ0Y3
Mzc3MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQ0Y3Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNw
cCAqLzsgfTsKIAkJMjYwMEI1QTYxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE0
MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAgKi87IH07CiAJCTI2MDBCNUE3
MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpT
U3RyaW5nSm9pbmVyLmggKi87IH07CkBAIC0xMzk3LDYgKzEzOTgsNyBAQAogCQk3MEVDQTYwOTFB
RkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8q
IFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MkFBRjdDRDFEMEQzMUIzMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0
ZXJGdW5jdGlvbi5jcHAgKi87IH07CiAJCTcyQUFGN0NFMUQwRDMxQjMwMDVFNjBCRSAvKiBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkFBRjdDQzFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0
ZXJTZXR0ZXJGdW5jdGlvbi5oICovOyB9OworCQk3ODI3NEQ4RTRDNEQ0RkNEOUExREM2RTYgLyog
VGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCREI0QjVFMDk5Q0Q0QzFCQjNDMUNGMDUgLyogVGVtcGxhdGVSZWdpc3Ry
eUtleS5jcHAgKi87IH07CiAJCTc5MDVCQjY4MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nl
c3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkw
NUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgKi87IH07CiAJCTc5MDVC
QjY5MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJ
bmxpbmVBY2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3OTE2MERCRDFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkxNjBEQkIxQzhFM0VD
ODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCAqLzsgfTsKQEAgLTE0MjksNiArMTQzMSw4IEBA
CiAJCTc5RDVDRDVBMUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU4MUMxMTA2
QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmNwcCAqLzsgfTsKIAkJNzlENUNENUIxQzEx
MDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1w
bGluZ1Byb2ZpbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzlERkNCREIxRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REZDQkRB
MUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzlFNDIzRTIxREVFNjUzMjAwNzhE
MzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFNDIzRTAxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwICovOyB9OworCQk3OUU0MjNFMzFERUU2NTMyMDA3OEQzNTUgLyogSlNX
ZWJBc3NlbWJseUNhbGxlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVF
MEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRDFCNEFGQjg1MDAw
Mzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTc5RUUwQzAwMUI0QUZC
ODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFy
aWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc5RjhGQzFFMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJ
bnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTU0NCw2ICsxNTQ4LDcgQEAKIAkJOTMzMDQwMDQwRTZB
NzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDNGRUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3Ry
aW5ncy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzMzA0MDJDMEU2QTc2NDAwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDNGRTgwRTZBNzJCNTAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgKi87IH07CiAJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1
MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzQ1QTg3MTJEODM4QzQwMDMwMkJFMyAvKiBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyLmNwcCAqLzsgfTsKKwkJOTVENDI2MUFGNEM4NENFMkFDQkFDOTgxIC8q
IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDhGQzJGMzdBQjc2NDgzQTk5NjY2ODhGIC8qIFRlbXBsYXRlUmVn
aXN0cnlLZXlUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTk2MDA5N0E2MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NjAwOTdBNTBFQkFCQjU4
MDA3QTcyOTcgLyogTGFiZWxTY29wZS5oICovOyB9OwogCQk5Njg4Q0IxNTBFRDEyQjRFMDAxRDY0
OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5Njg4Q0IxMzBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTY4
OENCMTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlGIC8q
IFg4NkFzc2VtYmxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0yMDAzLDggKzIwMDgsNiBAQAogCQlBRDQ5MzdDNDFEREJFNjE0MDA3N0M4MDcg
LyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEFENDkzN0MyMUREQkU2MEEwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVs
ZVJlY29yZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUFENDkzN0M3MURERDBBQUUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdD
NTFERENEQ0YwMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwICovOyB9Owog
CQlBRDQ5MzdDODFEREQwQUFFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkzN0M2MURE
Q0RDRjAwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oICovOyB9OwotCQlBRDQ5
MzdEMTFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3Q0QxREREMjdE
OTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmNwcCAqLzsgfTsKLQkJQUQ0OTM3
RDIxREREMjdERTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDRTFEREQyN0Q5MDA3
N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCAqLzsgfTsKIAkJQUQ0OTM3RDMxRERE
MjdERTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3QzkxREREMjczNDAwNzdDODA3IC8q
IFdlYkFzc2VtYmx5RnVuY3Rpb24uY3BwICovOyB9OwogCQlBRDQ5MzdENDFEREQyN0RFMDA3N0M4
MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5
RnVuY3Rpb24uaCAqLzsgfTsKIAkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01h
cElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzMzcsOSArMjM0MCw2
IEBACiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3
N0E0IC8qIFdhdGNoZG9nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRkVGMDQwNTExQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYw
NDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJ
RkVGRDZGQzYxRDVFNzk5MjAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYy
RjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTFBODgyNkIxNjUzQzRDRDFBNjQyOTgzQiAvKiBUZW1wbGF0ZVJl
Z2lzdHJ5S2V5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOEI0N0YyMzQzNjZDNEI3MkFDODUyQTdFIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlU
YWJsZS5jcHAgKi87IH07Ci0JCTc4Mjc0RDhFNEM0RDRGQ0Q5QTFEQzZFNiAvKiBUZW1wbGF0ZVJl
Z2lzdHJ5S2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJEQjRCNUUwOTlDRDRDMUJCM0MxQ0YwNSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCAq
LzsgfTsKLQkJOTVENDI2MUFGNEM4NENFMkFDQkFDOTgxIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlU
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhG
QzJGMzdBQjc2NDgzQTk5NjY2ODhGIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVp
bGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rp
b24gKi8KQEAgLTI0OTIsNiArMjQ5Miw3IEBACiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ug
c2VjdGlvbiAqLwogCQkwMDBCRUFGMERGNjA0NDgxQUY2QUI2OEMgLyogTW9kdWxlU2NvcGVEYXRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZVNjb3BlRGF0YS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwOEZDMkYzN0FCNzY0ODNBOTk2NjY4OEYgLyog
VGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjAxMjMzMDE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYWx1ZVN0cmVuZ3RoLmNwcDsg
cGF0aCA9IGRmZy9ERkdWYWx1ZVN0cmVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwMTIzMzExOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGguaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVTdHJlbmd0aC5oOyBwYXRoID0g
ZGZnL0RGR1ZhbHVlU3RyZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYw
MzMyQkYxOEFERkFFMTAwNUY5NzlBIC8qIEV4aXRpbmdKSVRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4aXRpbmdKSVRUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NTUsNiArMzg1Niw4IEBACiAJCTc5RDVDRDU4MUMxMTA2QTkw
MENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNhbXBsaW5nUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OUQ1Q0Q1OTFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ1Byb2ZpbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNP
d25Qcm9wZXJ0eUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc093
blByb3BlcnR5Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlFNDIzRTAx
REVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZS5jcHA7IHBhdGggPSBq
cy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzlFNDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZS5oOyBwYXRoID0g
anMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8q
IFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUY4
RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5z
ZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM5ODIsNiArMzk4NSw3IEBACiAJ
CTg2Rjc1RUZEMTUxQzA2MkYwMDdDOUJBMyAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8q
IEpTQm91bmRGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0JvdW5kRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkZB
OUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQm91bmRGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk4QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxhdGVSZWdpc3RyeUtl
eVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBsYXRl
UmVnaXN0cnlLZXlUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThCOUY2
RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVyYXRpb25LaW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvbktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5U3RhdGlzdGljcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMjEzRTNDMTIzQTQwQzIwMEQ0MjJGMyAv
KiBNZW1vcnlTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1l
bW9yeVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NzUsOCAr
NDQ3OSw2IEBACiAJCUFENDkzN0M2MUREQ0RDRjAwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0OTM3QzkxREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3
IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV2ViQXNzZW1ibHlGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlGdW5jdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDQ5MzdDRDFEREQyN0Q5MDA3N0M4MDcg
LyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwOyBwYXRoID0ganMvV2ViQXNz
ZW1ibHlGdW5jdGlvbkNlbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDQ5
MzdDRTFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaDsgcGF0
aCA9IGpzL1dlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ01hcElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1
ZVJvb3RTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUND
REMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC00NTYxLDYgKzQ1NjMsNyBAQAogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2
NEQgLyogQXJnTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdMaXN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0
OCAvKiBKdW1wVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SnVtcFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTEwRUVC
MkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKdW1wVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkRCNEI1RTA5
OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMDMyODFFMTk4MTk3OUQwMDg4QjQ5OSAvKiBDdXN0b21H
bG9iYWxPYmplY3RDbGFzc1Rlc3QuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0g
Q3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmM7IHBhdGggPSBBUEkvdGVzdHMvQ3VzdG9tR2xv
YmFsT2JqZWN0Q2xhc3NUZXN0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMDMy
ODFGMTk4MTk3OUQwMDg4QjQ5OSAvKiBDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0
Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMEJBOTJDMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1
Y3R1cmVSYXJlRGF0YUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00ODM4LDkgKzQ4NDEsNiBAQAogCQlGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFy
ZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENv
bXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQy
OEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dh
cFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAw
OEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEI0
N0YyMzQzNjZDNEI3MkFDODUyQTdFIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFi
bGUuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlUmVn
aXN0cnlLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVGVtcGxh
dGVSZWdpc3RyeUtleS5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhGQzJGMzdBQjc2NDgzQTk5NjY2ODhGIC8qIFRlbXBs
YXRlUmVnaXN0cnlLZXlUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ug
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICov
CkBAIC03NTY2LDE0ICs3NTY2LDE0IEBACiAJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBq
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQUQ0OTM3
Q0QxREREMjdEOTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmNwcCAqLywKLQkJ
CQlBRDQ5MzdDRTFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCAq
LywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rp
b24uaCAqLywKIAkJCQlBRDQ5MzdDNTFERENEQ0YwMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwICovLAogCQkJCUFENDkzN0M2MUREQ0RDRjAwMDc3QzgwNyAvKiBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5oICovLAogCQkJCUFEMkZDQzI2MURCODM4QzQwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2
IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggKi8sCisJCQkJNzlFNDIzRTAxREVFNjUzMjAwNzhE
MzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwICovLAorCQkJCTc5RTQyM0UxMURFRTY1MzIw
MDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmggKi8sCiAJCQkJQUQyRkNCQTYxREI1OERB
NDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwICovLAogCQkJCUFEMkZD
QkE3MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggKi8sCiAJ
CQkJQUQyRkNCQTgxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAg
Ki8sCkBAIC03ODY2LDYgKzc4NjYsNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAv
KiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNG
QSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlFNDIzRTMxREVF
NjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFk
ZXJzICovLApAQCAtODAwNiw3ICs4MDA3LDYgQEAKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNE
QjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzUyOUE0QzFDNDU3Qjc1MDAw
QjQ5QzYgLyogQVBJVXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlBRDQ5MzdEMjFE
REQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGls
YXRpb25LZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAv
KiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMTMx
LDcgKzEwMTMxLDYgQEAKIAkJCQkxNDgyQjc0RTBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJpbmdS
ZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QUFCMzgwQjY2QTk0NDAwRTU1RjE2IC8qIEpT
U3RyaW5nUmVmQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0
RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQUQ0OTM3
RDExREREMjdERTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTcwRUNBNjA1MUFGREJFQTIwMDQ0OTczOSAvKiBKU1RlbXBsYXRlUmVnaXN0
cnlLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk2MzAz
OTFENDE5MkM2MDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTEwMTUyLDYgKzEwMTUxLDcgQEAKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NzlFNDIzRTIxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVBMUEwOTUxRDhDQjM0MTAwNEMyRUI4IC8q
IERlYnVnZ2VyUGFyc2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA5
MTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDcgQEAKICNpbmNsdWRlICJKU1dlYWtNYXAu
aCIKICNpbmNsdWRlICJKU1dlYWtTZXQuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgi
CiAjaW5jbHVkZSAiTGF6eUNsYXNzU3RydWN0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIkxhenlQ
cm9wZXJ0eUlubGluZXMuaCIKQEAgLTg5Nyw2ICs4OTgsOCBAQCBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbih2bSwgdm0ucHJvcGVyCiAKICAgICAgICAgRk9SX0VBQ0hfV0VCQVNTRU1CTFlfQ09O
U1RSVUNUT1JfVFlQRShDUkVBVEVfV0VCQVNTRU1CTFlfQ09OU1RSVUNUT1IpCiAKKyAgICAgICAg
bV93ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTV2ViQXNzZW1ibHlD
YWxsZWU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkpKTsKKwogI3VuZGVmIENS
RUFURV9XRUJBU1NFTUJMWV9DT05TVFJVQ1RPUgogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCkBAIC0xMjU3LDYgKzEyNjAsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fd2ViQXNz
ZW1ibHlTdHJ1Y3R1cmUpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV93ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJlKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV93ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZSk7CiAgICAgRk9SX0VB
Q0hfV0VCQVNTRU1CTFlfQ09OU1RSVUNUT1JfVFlQRShWSVNJVF9TSU1QTEVfVFlQRSkKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjA5MTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQxLDYgKzM0MSw4IEBAIHB1YmxpYzoKICAgICBGT1JfRUFDSF9TSU1QTEVfQlVJTFRJTl9U
WVBFKERFRklORV9TVE9SQUdFX0ZPUl9TSU1QTEVfVFlQRSkKICAgICAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseUNhbGxl
ZVN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlKCkg
eyByZXR1cm4gbV93ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5nZXQoKTsgfQogICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlTdHJ1Y3R1cmU7CiAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZTsKICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmU7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMDkxOTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2MCw3ICsyNjAsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvbkNvZGVC
bG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKICAgICB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMs
IFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7Ci0gICAgd2ViQXNzZW1ibHlGdW5jdGlvbkNlbGxTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJB
c3NlbWJseUZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogI2VuZGlmCiAgICAgaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
cmV2aXNpb24gMjA5MTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAko
d29ya2luZyBjb3B5KQpAQCAtMzEwLDcgKzMxMCw2IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVy
ZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbFN0cnVjdHVy
ZTsKICNlbmRpZgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG1vZHVsZVByb2dyYW1FeGVjdXRhYmxl
U3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0cnVjdHVyZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgJKHJldmlzaW9uIDIw
OTE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5Q29t
cGlsZUVycm9yQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUNvbXBpbGVF
cnJvclByb3RvdHlwZS5oIgogI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLSNp
bmNsdWRlICJqcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5oIgogI2luY2x1ZGUgImpzL1dlYkFz
c2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5SW5z
dGFuY2VQcm90b3R5cGUuaCIKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0cnVj
dG9yLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMDkxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjks
NyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5
RXhwcmVzc2lvbiA9IG51bGxwdHI7CiAKLSAgICBCM0lSR2VuZXJhdG9yKE1lbW9yeSosIFByb2Nl
ZHVyZSYsIFZlY3RvcjxVbmxpbmtlZENhbGw+JiB1bmxpbmtlZENhbGxzKTsKKyAgICBCM0lSR2Vu
ZXJhdG9yKE1lbW9yeSosIFByb2NlZHVyZSYsIEZ1bmN0aW9uQ29tcGlsYXRpb24qKTsKIAogICAg
IGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZEFyZ3VtZW50cyhjb25zdCBWZWN0b3I8VHlwZT4m
KTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRMb2NhbChUeXBlLCB1aW50MzJfdCk7
CkBAIC0xODksMTAgKzE4OSwxMCBAQCBwcml2YXRlOgogICAgIFZhbHVlKiBtX3plcm9WYWx1ZXNb
bnVtVHlwZXNdOwogfTsKIAotQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1vcnkqIG1l
bW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFZlY3RvcjxVbmxpbmtlZENhbGw+JiB1bmxpbmtl
ZENhbGxzKQorQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihNZW1vcnkqIG1lbW9yeSwgUHJv
Y2VkdXJlJiBwcm9jZWR1cmUsIEZ1bmN0aW9uQ29tcGlsYXRpb24qIGNvbXBpbGF0aW9uKQogICAg
IDogbV9tZW1vcnkobWVtb3J5KQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKLSAgICAsIG1fdW5s
aW5rZWRDYWxscyh1bmxpbmtlZENhbGxzKQorICAgICwgbV91bmxpbmtlZENhbGxzKGNvbXBpbGF0
aW9uLT51bmxpbmtlZENhbGxzKQogewogICAgIG1fY3VycmVudEJsb2NrID0gbV9wcm9jLmFkZEJs
b2NrKCk7CiAKQEAgLTIxMCw2ICsyMTAsMzIgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRv
cihNZW1vcnkqIG1lbQogICAgICAgICB9CiAgICAgfQogCisgICAgLy8gRklYTUU6IGhvdyBkbyB3
ZSBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgZmlyc3QgdGhpbmcgdG8gZXhlY3V0ZT8KKyAgICBQYXRj
aHBvaW50VmFsdWUqIGdldENhbGxlZVBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpKTsKKyAgICBn
ZXRDYWxsZWVQYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OlNvbWVSZWdp
c3RlcjsKKyAgICBnZXRDYWxsZWVQYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OworICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1vdmVMb2NhdGlvbiA9IGppdC5tb3Zl
V2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHQp
OworICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YobW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKworICAgIFZhbHVlKiBmcmFtZVBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBPcmlnaW4oKSk7CisK
KyAgICBWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6
ZW9mKFJlZ2lzdGVyKSk7CisgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBTdG9yZSwgT3JpZ2luKCksCisgICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQs
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBP
cmlnaW4oKSwgZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNhbGxlZSkpOworCisgICAgVmFsdWUqIG9m
ZnNldE9mQ29kZUJsb2NrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KG1fcHJvYywgT3JpZ2luKCksIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdp
c3RlcikpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENv
bnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMCksCisgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBPcmlnaW4oKSwgZnJhbWVQb2ludGVyLCBv
ZmZzZXRPZkNvZGVCbG9jaykpOworCisKICAgICBpZiAobV9tZW1vcnkpIHsKICAgICAgICAgbV9t
ZW1vcnlCYXNlR1BSID0gbV9tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1vcnlQb2lu
dGVyOwogICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV9tZW1vcnlCYXNlR1BSKTsKQEAgLTc0
MSw3ICs3NjcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rpb25Db21waWxhdGlvbj4gcGFyCiAg
ICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bmN0aW9uQ29tcGlsYXRpb24+KCk7
CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCht
ZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LT51bmxpbmtlZENhbGxzKTsKKyAgICBCM0lSR2VuZXJh
dG9yIGNvbnRleHQobWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC5nZXQoKSk7CiAgICAgRnVuY3Rp
b25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQsIGZ1
bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9ucyk7CiAgICAgaWYgKCFwYXJzZXIucGFy
c2UoKSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIwOTE5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTM1LDYgKzEzNSw3IEBAIHN0cnVjdCBVbmxpbmtlZENhbGwgewogCiBzdHJ1Y3QgRnVuY3Rpb25D
b21waWxhdGlvbiB7CiAgICAgVmVjdG9yPFVubGlua2VkQ2FsbD4gdW5saW5rZWRDYWxsczsKKyAg
ICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIz
OjpDb21waWxhdGlvbj4ganNFbnRyeVBvaW50OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJldmlzaW9uIDIwOTE5MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBA
QAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUIzSVJHZW5lcmF0
b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKICNpbmNsdWRlICJXYXNt
TWVtb3J5LmgiCkBAIC0xMTAsNiArMTEzLDE5IEBAIHZvaWQgUGxhbjo6cnVuKCkKICAgICBtX2Zh
aWxlZCA9IGZhbHNlOwogfQogCit2b2lkIFBsYW46OmluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTV2ViQXNzZW1ibHlDYWxsZWUqKiBjYWxsZWVzKQorewor
ICAgIEFTU0VSVCghZmFpbGVkKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Nv
bXBpbGVkRnVuY3Rpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxG
dW5jdGlvbkNvbXBpbGF0aW9uPiYgY29tcGlsYXRpb24gPSBtX2NvbXBpbGVkRnVuY3Rpb25zW2ld
OworICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9uID0g
Y29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICAgICAgSlNXZWJBc3NlbWJseUNh
bGxlZSogY2FsbGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlKGdsb2JhbE9iamVjdC0+
dm0oKSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGNvbXBpbGF0aW9uKSk7CisgICAgICAgIGNhbGxl
ZXNbaV0gPSBjYWxsZWU7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVy
KGNhbGxlZU1vdmVMb2NhdGlvbiwgY2FsbGVlKTsKKyAgICB9Cit9CisKIFBsYW46On5QbGFuKCkg
eyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21QbGFuLmgJKHJldmlzaW9uIDIwOTE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21QbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDE0IEBACiAj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20geworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZTsKK2Ns
YXNzIE1hcmtlZEFyZ3VtZW50QnVmZmVyOworICAgIAorbmFtZXNwYWNlIFdhc20geworCiBjbGFz
cyBNZW1vcnk7CiAKIGNsYXNzIFBsYW4gewpAQCAtNDMsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgflBsYW4oKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cnVuKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQ2FsbGVlcyhKU0ds
b2JhbE9iamVjdCosIEpTV2ViQXNzZW1ibHlDYWxsZWUqKiBidWZmZXIpOwogCiAgICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KICAg
ICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q2FsbGVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5Q2FsbGVl
OjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNhbGxlZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNhbGxlZSkgfTsKKworSlNXZWJBc3NlbWJseUNh
bGxlZTo6SlNXZWJBc3NlbWJseUNhbGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgLy8gV2UgcGFzcyBpbiB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgdGhlIHNjb3Bl
IGp1c3QgdG8gaGF2ZSBhIHZhbGlkIHNjb3BlIGZvciB0aGF0IGZpZWxkLgorICAgIDogQmFzZSh2
bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJl
KCkpCit7IH0KKwordm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPiYmIGNvbXBpbGF0
aW9uKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgIG1fY29kZSA9IFdU
Rk1vdmUoY29tcGlsYXRpb24tPmNvZGUpOworICAgIG1fanNFbnRyeVBvaW50ID0gV1RGTW92ZShj
b21waWxhdGlvbi0+anNFbnRyeVBvaW50KTsKK30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVl
OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjZWxsKTsKKyAgICB0aGlzT2Jq
ZWN0LT5KU1dlYkFzc2VtYmx5Q2FsbGVlOjp+SlNXZWJBc3NlbWJseUNhbGxlZSgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2Fs
bGVlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUNhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTQ2FsbGVlLmgiCisjaW5jbHVk
ZSAiV2FzbUZvcm1hdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJs
eUNhbGxlZSA6IHB1YmxpYyBKU0NhbGxlZSB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NhbGxl
ZSBCYXNlOworCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpGdW5j
dGlvbkNvbXBpbGF0aW9uPiYmIGNvbXBpbGF0aW9uKQorICAgIHsKKyAgICAgICAgSlNXZWJBc3Nl
bWJseUNhbGxlZSogY2FsbGVlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3Nl
bWJseUNhbGxlZT4odm0uaGVhcCkpIEpTV2ViQXNzZW1ibHlDYWxsZWUodm0sIGdsb2JhbE9iamVj
dCk7CisgICAgICAgIGNhbGxlZS0+ZmluaXNoQ3JlYXRpb24odm0sIFdURk1vdmUoY29tcGlsYXRp
b24pKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgeworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisg
ICAgdm9pZCoganNFbnRyeVBvaW50KCkgeyByZXR1cm4gbV9qc0VudHJ5UG9pbnQtPmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPiYmKTsKKyAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IG1fY29kZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QjM6OkNvbXBpbGF0aW9uPiBtX2pzRW50cnlQb2ludDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHJldmlz
aW9uIDIwOTE5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxNSArMjksMTkgQEAKICNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1
bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0aW9uLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9u
cyYgY29tcGlsZWRGdW5jdGlvbnMsIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSkKK2Nv
bnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJs
eS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpT
V2ViQXNzZW1ibHlNb2R1bGUpIH07CisKK0pTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1i
bHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1
ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiBtb2R1bGVJbmZvcm1hdGlvbiwKKyAgICBT
eW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUsIHVuc2lnbmVkIGNhbGxlZUNvdW50LCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiogY2FsbGVlcykKIHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXApKSBKU1dl
YkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLCBjb21waWxl
ZEZ1bmN0aW9ucyk7CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFwKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2
bSwgc3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlvbiwgY2FsbGVlQ291bnQsIGNhbGxlZXMpOwog
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgZXhwb3J0U3ltYm9sVGFibGUpOwogICAg
IHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTQ3LDEwICs1MSwxMSBAQCBTdHJ1Y3R1cmUqIEpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0CiAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5
TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNt
OjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0aW9uLCBXYXNtOjpDb21waWxlZEZ1
bmN0aW9ucyYgY29tcGlsZWRGdW5jdGlvbnMpCitKU1dlYkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFz
c2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0aW9uLCB1bnNpZ25lZCBj
YWxsZWVDb3VudCwgSlNXZWJBc3NlbWJseUNhbGxlZSoqIGNhbGxlZXMpCiAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCiAgICAgLCBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUobW9kdWxlSW5m
b3JtYXRpb24pKQotICAgICwgbV9jb21waWxlZEZ1bmN0aW9ucyhXVEZNb3ZlKGNvbXBpbGVkRnVu
Y3Rpb25zKSkKKyAgICAsIG1fY2FsbGVlcyh2bSwgdGhpcywgY2FsbGVlcykKKyAgICAsIG1fY2Fs
bGVlQ291bnQoY2FsbGVlQ291bnQpCiB7CiB9CiAKQEAgLTczLDEwICs3OCwxMyBAQCB2b2lkIEpT
V2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oCiAKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX2V4cG9ydFN5bWJvbFRhYmxlKTsKKyAgICB2aXNpdG9yLm1hcmtBdXhpbGlhcnkodGhpc09i
amVjdC0+bV9jYWxsZWVzLmdldCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGhp
c09iamVjdC0+bV9jYWxsZWVDb3VudDsgaSsrKSB7CisgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqJiBjYWxsZWUgPSB0aGlzT2JqZWN0LT5tX2NhbGxlZXMuZ2V0KClbaV07CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKCZjYWxsZWUpOworICAgIH0KIH0KIAotY29u
c3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5
Lk1vZHVsZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3Nl
bWJseU1vZHVsZSkgfTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZpc2lvbiAyMDkxOTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDI5ICszMyw0MCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20g
eworc3RydWN0IFNpZ25hdHVyZTsKK307CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBj
bGFzcyBTeW1ib2xUYWJsZTsKIAogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZSA6IHB1YmxpYyBK
U0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJs
ZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShW
TSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4m
LCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYsIFN5bWJvbFRhYmxlKik7CisgICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mLCBTeW1ib2xUYWJsZSogZXhwb3J0cywgdW5zaWdu
ZWQgY2FsbGVlQ291bnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqKiBjYWxsZWVzKTsKICAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFs
dWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3Jt
YXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gKm1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCk7IH0KLSAgICBjb25zdCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYgY29tcGls
ZWRGdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBpbGVkRnVuY3Rpb25zOyB9CiAgICAg
U3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leHBvcnRT
eW1ib2xUYWJsZS5nZXQoKTsgfQogCisgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlKHVu
c2lnbmVkIGNhbGxlZUluZGV4KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVl
SW5kZXggPCBtX2NhbGxlZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlcy5nZXQoKVtj
YWxsZWVJbmRleF07CisgICAgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgSlNXZWJBc3NlbWJseU1vZHVs
ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlv
bj4mLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUo
Vk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+
JiwgdW5zaWduZWQgY2FsbGVlQ291bnQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqKiBjYWxsZWVzKTsK
ICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3ltYm9sVGFibGUqKTsKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206
Ok1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwotICAgIFdhc206OkNvbXBp
bGVkRnVuY3Rpb25zIG1fY29tcGlsZWRGdW5jdGlvbnM7CisgICAgQXV4aWxpYXJ5QmFycmllcjxK
U1dlYkFzc2VtYmx5Q2FsbGVlKio+IG1fY2FsbGVlczsKKyAgICB1bnNpZ25lZCBtX2NhbGxlZUNv
dW50OwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9leHBvcnRTeW1ib2xUYWJsZTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDkxOTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTIgKzMyLDEyIEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
RnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dl
YkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCiAj
aW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgogI2lu
Y2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5RnVuY3Rpb25DZWxsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00NywxMiArNDcsMTIg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogewogICAgIGF1dG8m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8V2Vi
QXNzZW1ibHlGdW5jdGlvbio+KHN0YXRlLT5jYWxsZWUoKSk7Ci0gICAgaWYgKCFjYWxsZWUpCisg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJB
c3NlbWJseUZ1bmN0aW9uKj4oc3RhdGUtPmNhbGxlZSgpKTsKKyAgICBpZiAoIXdhc21GdW5jdGlv
bikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd0V4Y2VwdGlvbihzdGF0ZSwg
c2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihzdGF0ZSwgImV4cGVjdGVkIGEgV2ViQXNzZW1ibHkgZnVu
Y3Rpb24iLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoc3RhdGUt
PmNhbGxlZSgpKSkpKTsKLSAgICBjb25zdCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mIGNh
bGxhYmxlID0gY2FsbGVlLT53ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCgpLT5mdW5jdGlvbigpOwot
ICAgIGNvbnN0IEIzOjpDb21waWxhdGlvbioganNFbnRyeVBvaW50ID0gY2FsbGFibGUuanNFbnRy
eVBvaW50OwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gY2FsbGFibGUu
c2lnbmF0dXJlOworICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21DYWxsZWUgPSB3YXNtRnVu
Y3Rpb24tPndlYkFzc2VtYmx5Q2FsbGVlKCk7CisgICAgdm9pZCoganNFbnRyeVBvaW50ID0gd2Fz
bUNhbGxlZS0+anNFbnRyeVBvaW50KCk7CisgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWdu
YXR1cmUgPSB3YXNtRnVuY3Rpb24tPnNpZ25hdHVyZSgpOwogCiAgICAgLy8gRklYTUUgaXMgdGhp
cyB0aGUgcmlnaHQgYmVoYXZpb3I/IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjQ4NzYKICAgICBpZiAoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSAhPSBzaWduYXR1cmUt
PmFyZ3VtZW50cy5zaXplKCkpCkBAIC05Myw5ICs5Myw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICB9CiAKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKLSAgICBwcm90b0NhbGxGcmFtZS5pbml0KG51bGxwdHIsIGNhbGxlZSwgZmlyc3RB
cmd1bWVudCwgYXJnQ291bnQsIHJlbWFpbmluZ0FyZ3MpOworICAgIHByb3RvQ2FsbEZyYW1lLmlu
aXQobnVsbHB0ciwgd2FzbUNhbGxlZSwgZmlyc3RBcmd1bWVudCwgYXJnQ291bnQsIHJlbWFpbmlu
Z0FyZ3MpOwogICAgIAotICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dh
c20oanNFbnRyeVBvaW50LT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgJnZtLCAmcHJvdG9D
YWxsRnJhbWUpOworICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20o
anNFbnRyeVBvaW50LCAmdm0sICZwcm90b0NhbGxGcmFtZSk7CiAgICAgLy8gRklYTUUgaXMgdGhp
cyBjb3JyZWN0PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODc2
CiAgICAgc3dpdGNoIChzaWduYXR1cmUtPnJldHVyblR5cGUpIHsKICAgICBjYXNlIFdhc206OlZv
aWQ6CkBAIC0xMTYsMTMgKzExNiwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsCiAgICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CiB9CiAKLVdlYkFzc2VtYmx5
RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJB
c3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYg
Y2FsbGFibGUpCitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNX
ZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlLCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKIHsK
ICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNh
bGxXZWJBc3NlbWJseUZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29u
c3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKiBm
dW5jdGlvbkNlbGwgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbDo6Y3JlYXRlKHZtLCBXVEZNb3Zl
KGNhbGxhYmxlKSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPndl
YkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+
KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSk7Ci0gICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgs
IG5hbWUsIGluc3RhbmNlLCBmdW5jdGlvbkNlbGwpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVh
dGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwgY2FsbGVlLCBzaWdu
YXR1cmUpOwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIApAQCAtMTQzLDE1ICsxNDIsMTYgQEAg
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX2luc3RhbmNlKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9mdW5jdGlv
bkNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dhc21DYWxsZWUpOwog
fQogCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXZWJBc3NlbWJseUZ1bmN0aW9uQ2Vs
bCogZnVuY3Rpb25DZWxsKQordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlLCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkK
IHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1l
KTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgbV9pbnN0YW5jZS5zZXQodm0s
IHRoaXMsIGluc3RhbmNlKTsKLSAgICBtX2Z1bmN0aW9uQ2VsbC5zZXQodm0sIHRoaXMsIGZ1bmN0
aW9uQ2VsbCk7CisgICAgbV93YXNtQ2FsbGVlLnNldCh2bSwgdGhpcywgd2FzbUNhbGxlZSk7Cisg
ICAgbV9zaWduYXR1cmUgPSBzaWduYXR1cmU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uaAkocmV2aXNpb24gMjA5MTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBXZWJBc3Nl
bWJseUZ1bmN0aW9uQ2VsbDsKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBjbGFzcyBXZWJB
c3NlbWJseUluc3RhbmNlOwogCiBuYW1lc3BhY2UgQjMgewpAQCAtNDQsMjIgKzQ0LDYgQEAgbmFt
ZXNwYWNlIFdhc20gewogc3RydWN0IFNpZ25hdHVyZTsKIH0KIAotY2xhc3MgQ2FsbGFibGVXZWJB
c3NlbWJseUZ1bmN0aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWxsYWJsZVdlYkFz
c2VtYmx5RnVuY3Rpb24pOwotICAgIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbigpID0gZGVs
ZXRlOwotCi1wdWJsaWM6Ci0gICAgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uKENhbGxhYmxl
V2ViQXNzZW1ibHlGdW5jdGlvbiYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBjb25zdCBCMzo6Q29tcGls
YXRpb24qIGpzRW50cnlQb2ludDsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVy
ZTsKLSAgICBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24oY29uc3QgQjM6OkNvbXBpbGF0aW9u
KiBqc0VudHJ5UG9pbnQsIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKQotICAgICAg
ICA6IGpzRW50cnlQb2ludChqc0VudHJ5UG9pbnQpCi0gICAgICAgICwgc2lnbmF0dXJlKHNpZ25h
dHVyZSkKLSAgICB7Ci0gICAgfQotfTsKLQogY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbiA6IHB1
YmxpYyBKU0Z1bmN0aW9uIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsK
QEAgLTY4LDIxICs1MiwyOCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwog
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgaW50LCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqLCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mJik7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFs
T2JqZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSos
IEpTV2ViQXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmUqKTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwog
Ci0gICAgY29uc3QgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIHdlYkFzc2VtYmx5RnVuY3Rpb25D
ZWxsKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkNlbGwuZ2V0KCk7IH0KKyAgICBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiB3ZWJBc3NlbWJseUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUNh
bGxlZS5nZXQoKTsgfQorICAgIGNvbnN0IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2Uo
KSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9CisgICAgY29uc3QgV2FzbTo6U2ln
bmF0dXJlKiBzaWduYXR1cmUoKQorICAgIHsgCisgICAgICAgIEFTU0VSVChtX3NpZ25hdHVyZSk7
CisgICAgICAgIHJldHVybiBtX3NpZ25hdHVyZTsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIGludCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2ViQXNzZW1ibHlGdW5j
dGlvbkNlbGwqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJs
ZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlKik7CiAKIHByaXZh
dGU6CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3Rh
bmNlOwotICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbD4gbV9mdW5jdGlv
bkNlbGw7CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fd2FzbUNhbGxl
ZTsKKyAgICBXYXNtOjpTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1
bmN0aW9uQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwCShyZXZpc2lvbiAyMDkxOTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHAJKG5v
bmV4aXN0ZW50KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5RnVuY3Rpb25DZWxsLmgiCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25zdCBDbGFzc0luZm8gV2Vi
QXNzZW1ibHlGdW5jdGlvbkNlbGw6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5RnVuY3Rpb25DZWxs
IiwgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUZ1bmN0
aW9uQ2VsbCkgfTsKLQotV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIFdlYkFzc2VtYmx5RnVuY3Rp
b25DZWxsOjpjcmVhdGUoVk0mIHZtLCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mJiBjYWxs
YWJsZSkKLXsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCogbmF0aXZlRnVuY3Rpb24gPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbD4odm0uaGVh
cCkpIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKHZtLCBXVEZNb3ZlKGNhbGxhYmxlKSk7Ci0gICAg
bmF0aXZlRnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICByZXR1cm4gbmF0aXZlRnVu
Y3Rpb247Ci19Ci0KLVdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsOjpXZWJBc3NlbWJseUZ1bmN0aW9u
Q2VsbChWTSYgdm0sIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmIGNhbGxhYmxlKQotICAg
IDogQmFzZSh2bSwgdm0ud2ViQXNzZW1ibHlGdW5jdGlvbkNlbGxTdHJ1Y3R1cmUuZ2V0KCkpCi0g
ICAgLCBtX2Z1bmN0aW9uKFdURk1vdmUoY2FsbGFibGUpKQotewotfQotCi12b2lkIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25DZWxsOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBXZWJBc3NlbWJs
eUZ1bmN0aW9uQ2VsbCogbmF0aXZlRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1
bmN0aW9uQ2VsbCo+KGNlbGwpOwotICAgIG5hdGl2ZUZ1bmN0aW9uLT5XZWJBc3NlbWJseUZ1bmN0
aW9uQ2VsbDo6fldlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKCk7Ci19Ci0KLVN0cnVjdHVyZSogV2Vi
QXNzZW1ibHlGdW5jdGlvbkNlbGw6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb25DZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaAkocmV2aXNpb24gMjA5MTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKLQotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24u
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsIDog
cHVibGljIEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFn
cyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7Ci0KLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIGNy
ZWF0ZShWTSYsIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmKTsKLSAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0K
LSAgICBjb25zdCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mIGZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvbjsgfQotCi1wcml2YXRlOgotICAgIFdlYkFzc2VtYmx5RnVuY3Rp
b25DZWxsKFZNJiwgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYpOwotCi0gICAgQ2FsbGFi
bGVXZWJBc3NlbWJseUZ1bmN0aW9uIG1fZnVuY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDkxOTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODcsNyArODcsMjAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogICAgICAgICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgZXhw
LmZpZWxkLmltcGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwogICAg
IH0KIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUsIHBsYW4uZ2V0TW9kdWxlSW5mb3JtYXRpb24oKSwgcGxhbi5nZXRD
b21waWxlZEZ1bmN0aW9ucygpLCBleHBvcnRTeW1ib2xUYWJsZSkpOworICAgIEpTV2ViQXNzZW1i
bHlNb2R1bGUqIHJlc3VsdDsKKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgYW55IGNh
bGxlZXMgdG8gYmUgc3dlcHQgaGVyZSBhbmQgd2UncmUgbm90IHBvaW50aW5nIHRvIHRoZW0KKyAg
ICAgICAgLy8gYW55d2hlcmUgdGhhdCB3b3VsZCBiZSBtYXJrZWQgdW50aWwgd2UncmUgZG9uZSBj
cmVhdGluZyB0aGUgbW9kdWxlLgorICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7IAor
CisgICAgICAgIHVuc2lnbmVkIGNhbGxlZUNvdW50ID0gcGxhbi5jb21waWxlZEZ1bmN0aW9uQ291
bnQoKTsKKyAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSoqIGNhbGxlZXMgPSBzdGF0aWNfY2Fz
dDxKU1dlYkFzc2VtYmx5Q2FsbGVlKio+KHZtLmhlYXAudHJ5QWxsb2NhdGVBdXhpbGlhcnkobnVs
bHB0ciwgc2l6ZW9mKEpTV2ViQXNzZW1ibHlDYWxsZWUqKSAqIGNhbGxlZUNvdW50KSk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZXMpOyAvLyBGSVhNRTogdGhyb3cgb29tIGhlcmUuCisg
ICAgICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoc3RhdGUtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKSwgY2FsbGVlcyk7CisKKyAgICAgICAgcmVzdWx0ID0gSlNXZWJBc3NlbWJseU1vZHVsZTo6
Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIHBsYW4uZ2V0TW9kdWxlSW5mb3JtYXRpb24oKSwgZXhwb3J0
U3ltYm9sVGFibGUsIGNhbGxlZUNvdW50LCBjYWxsZWVzKTsKKyAgICB9CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA5MTkzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDYsNyArMTA2LDYgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVj
UwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24g
PSBpbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0gICAgY29uc3QgV2Fz
bTo6Q29tcGlsZWRGdW5jdGlvbnMmIGNvbXBpbGVkRnVuY3Rpb25zID0gaW5zdGFuY2UtPm1vZHVs
ZSgpLT5jb21waWxlZEZ1bmN0aW9ucygpOwogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xU
YWJsZSA9IGluc3RhbmNlLT5tb2R1bGUoKS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKIAogICAgIC8v
IEZJWE1FIHdpcmUgdXAgdGhlIGltcG9ydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjUxMTgKQEAgLTEyNCwxMCArMTIzLDkgQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJl
IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAg
ICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8gZnVuY3MuCiAgICAgICAgICAgICAvLyAg
ICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICBjb25zdCBXYXNtOjpGdW5jdGlvbkNvbXBp
bGF0aW9uKiBjb21waWxlZEZ1bmN0aW9uID0gY29tcGlsZWRGdW5jdGlvbnMuYXQoZXhwLmZ1bmN0
aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgY29uc3QgQjM6OkNvbXBpbGF0aW9uKiBqc0Vu
dHJ5UG9pbnQgPSBjb21waWxlZEZ1bmN0aW9uLT5qc0VudHJ5UG9pbnQuZ2V0KCk7Ci0gICAgICAg
ICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVsZUluZm9ybWF0aW9u
LmZ1bmN0aW9ucy5hdChleHAuZnVuY3Rpb25JbmRleCkuc2lnbmF0dXJlOwotICAgICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCBleHAuZmll
bGQuc3RyaW5nKCksIGluc3RhbmNlLCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24oanNFbnRy
eVBvaW50LCBzaWduYXR1cmUpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdh
c21DYWxsZWUgPSBpbnN0YW5jZS0+bW9kdWxlKCktPmNhbGxlZShleHAuZnVuY3Rpb25JbmRleCk7
CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVsZUluZm9ybWF0
aW9uLmZ1bmN0aW9ucy5hdChleHAuZnVuY3Rpb25JbmRleCkuc2lnbmF0dXJlOworICAgICAgICAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCBleHAu
ZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCB3YXNtQ2FsbGVlLCBzaWduYXR1cmUpOwogICAgICAg
ICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295924</attachid>
            <date>2016-12-01 20:08:14 -0800</date>
            <delta_ts>2016-12-01 20:12:44 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>60883</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogI2lu
Y2x1ZGUgIkpTUHJveHkuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAi
TExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgpAQCAtMjUzOSw3ICsyNTQwLDcgQEAgc3RhdGljIEpTVmFsdWUgYm94KEV4
ZWNTdGF0ZSogZXhlYywgVk0mIAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGNh
bGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBjb25zdCBCMzo6Q29tcGlsYXRpb24mIGNvZGUsIFZlY3Rv
cjxKU1ZhbHVlPiYgYm94ZWRBcmdzKQorc3RhdGljIEpTVmFsdWUgY2FsbFdhc21GdW5jdGlvbihW
TSogdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21DYWxsZWUsIFZlY3RvcjxKU1ZhbHVlPiYgYm94ZWRBcmdzKQogewogICAgIEpTVmFsdWUg
Zmlyc3RBcmd1bWVudDsKICAgICBpbnQgYXJnQ291bnQgPSAxOwpAQCAtMjU1Miw5ICsyNTUzLDkg
QEAgc3RhdGljIEpTVmFsdWUgY2FsbFdhc21GdW5jdGlvbihWTSogdm0sIAogICAgIH0KIAogICAg
IFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwotICAgIHByb3RvQ2FsbEZyYW1lLmluaXQo
bnVsbHB0ciwgbnVsbHB0ciwgZmlyc3RBcmd1bWVudCwgYXJnQ291bnQsIHJlbWFpbmluZ0FyZ3Mp
OworICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0ciwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCktPmpzQ2FsbGVlKCksIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdz
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvV2FzbShjb2RlLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCB2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9XYXNtKHdhc21DYWxsZWUtPmpzRW50cnlQb2ludCgp
LCB2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CiB9CiAKIC8vIHRlc3RXYXNtTW9kdWxlKEpTQXJyYXlC
dWZmZXJWaWV3IHNvdXJjZSwgbnVtYmVyIGZ1bmN0aW9uQ291bnQsIC4uLltbV2FzbVZhbHVlLCBb
V2FzbVZhbHVlXV1dKSB3aGVyZSB0aGUgaXRoIGNvcHkgb2YgW1tyZXN1bHQsIFthcmdzXV1dIGlz
IGEgbGlzdApAQCAtMjU4Myw5ICsyNTg0LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmMKICAgICBpZiAocGxhbi5jb21waWxlZEZ1bmN0aW9uQ291bnQoKSAhPSBm
dW5jdGlvbkNvdW50KQogICAgICAgICBDUkFTSCgpOwogCisgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgY2FsbGVlczsKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IFVJTlRfTUFY
OworICAgICAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwKKyAgICAgICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGNhbGxlZSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxs
ZWVJbmRleCB8fCAoY2FsbGVlSW5kZXggLSAxID09IGxhc3RJbmRleCkpOworICAgICAgICAgICAg
ICAgIGNhbGxlZXMuYXBwZW5kKGNhbGxlZSk7CisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0g
Y2FsbGVlSW5kZXg7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKICAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7Ci0gICAgICAgIGlmICghcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKGkpKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gY29tcGls
ZSBmdW5jdGlvbiBhdCBpbmRleCIsIGkpOwogCiAgICAgICAgIEpTQXJyYXkqIHRlc3RDYXNlcyA9
IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+YXJndW1lbnQoaSArIDIpKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCB0ZXN0SW5kZXggPSAwOyB0ZXN0SW5kZXggPCB0ZXN0Q2FzZXMtPmxlbmd0aCgpOyAr
K3Rlc3RJbmRleCkgewpAQCAtMjU5Nyw3ICsyNjA3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuYwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9
IDA7IGFyZ0luZGV4IDwgYXJndW1lbnRzLT5sZW5ndGgoKTsgKythcmdJbmRleCkKICAgICAgICAg
ICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGJveChleGVjLCB2bSwgYXJndW1lbnRzLT5nZXRJbmRl
eFF1aWNrbHkoYXJnSW5kZXgpKSk7CiAKLSAgICAgICAgICAgIEpTVmFsdWUgY2FsbFJlc3VsdCA9
IGNhbGxXYXNtRnVuY3Rpb24oJnZtLCAqcGxhbi5jb21waWxlZEZ1bmN0aW9uKGkpLT5qc0VudHJ5
UG9pbnQsIGJveGVkQXJncyk7CisgICAgICAgICAgICBKU1ZhbHVlIGNhbGxSZXN1bHQgPSBjYWxs
V2FzbUZ1bmN0aW9uKCZ2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseUNhbGxlZSo+KGNhbGxlZXMuYXQoaSkpLCBib3hlZEFyZ3MpOwogICAgICAgICAg
ICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJveChleGVjLCB2bSwgcmVzdWx0KTsKICAgICAgICAgICAg
IGlmIChjYWxsUmVzdWx0ICE9IGV4cGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygi
QXJndW1lbnRzOiAiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE5OSw2ICsxMTk5LDcgQEAK
IAkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRGNzI1NjQxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9v
dFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTI4RDRBODE3N0I3MUM4
MDAwN0ZBM0MgLyogSlNTdHJpbmdSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTI4RDRBNzE3N0I3MUM4MDAwN0ZBM0MgLyogSlNTdHJp
bmdSZWZQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMUE4ODI2QjE2NTNDNENEMUE2NDI5ODNCIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlU
YWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcCAq
LzsgfTsKIAkJMUFDRjczNzcxNzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFDRjczNzYxNzFDQTZGQjAwQzlC
QjFFIC8qIFdlYWsuY3BwICovOyB9OwogCQkyNjAwQjVBNjE1MkJBQUE3MDA5MUVFNUYgLyogSlNT
dHJpbmdKb2luZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLzsg
fTsKIAkJMjYwMEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNTE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLzsgfTsKQEAgLTEzOTksNiArMTQwMCw3IEBA
CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwNDFBRkRC
RUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyQUFGN0NEMUQwRDMxQjMwMDVFNjBCRSAv
KiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUFGN0NCMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJNzJBQUY3Q0UxRDBEMzFCMzAw
NUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUFGN0NDMUQwRDMxOEIwMDVFNjBCRSAv
KiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggKi87IH07CisJCTc4Mjc0RDhFNEM0RDRG
Q0Q5QTFEQzZFNiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJEQjRCNUUwOTlDRDRDMUJCM0MxQ0YwNSAvKiBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCAqLzsgfTsKIAkJNzkwNUJCNjgxRDEyMDUwRTAwMTlGRTU3
IC8qIElubGluZUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAq
LzsgfTsKIAkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJCNjcxRDEyMDUw
RTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTc5MTYwREJEMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJl
dm9rZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OTE2MERCQjFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwICovOyB9OwpAQCAtMTQz
MSw2ICsxNDMzLDggQEAKIAkJNzlENUNENUExQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJv
ZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlENUNENTgxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwICovOyB9Owog
CQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTkxQzExMDZBOTAw
Q0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3du
UHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUU0MjNF
MjFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMDFERUU2NTMyMDA3OEQz
NTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi87IH07CisJCTc5RTQyM0UzMURFRTY1MzIw
MDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJB
c3NlbWJseUNhbGxlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUw
QkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCAqLzsgfTsKIAkJ
NzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZFMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUUxQjlGRUQwRjAwQ0E2NkFCIC8qIERG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CkBAIC0xNTQ2LDYgKzE1NTAsNyBAQAog
CQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwM0ZFQTBFNkE3MkMwMDA3ODZF
NkEgLyogU21hbGxTdHJpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwM0ZF
ODBFNkE3MkI1MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmNwcCAqLzsgfTsKIAkJOTMzNUYyNEQx
MkU2NzY1QjAwMkI1NTUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNDVBODcxMkQ4MzhDNDAwMzAy
QkUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwICovOyB9OworCQk5NUQ0MjYxQUY0Qzg0
Q0UyQUNCQUM5ODEgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZDMkYzN0FCNzY0ODNBOTk2NjY4OEYg
LyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTYwMDk3QTYwRUJBQkI1ODAwN0E3Mjk3IC8qIExhYmVs
U2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2
MDA5N0E1MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggKi87IH07CiAJCTk2ODhDQjE1
MEVEMTJCNEUwMDFENjQ5RiAvKiBBc3NlbWJsZXJCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2ODhDQjEzMEVEMTJCNEUwMDFENjQ5RiAvKiBB
c3NlbWJsZXJCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5Njg4Q0IxNjBFRDEyQjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Njg4Q0IxNDBFRDEy
QjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwMDUsOCArMjAxMCw2IEBACiAJCUFENDkzN0M0MURE
QkU2MTQwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3QzIxRERCRTYwQTAwNzdDODA3IC8q
IEFic3RyYWN0TW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQUQ0OTM3QzcxREREMEFBRTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFENDkzN0M1MUREQ0RDRjAwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAgKi87IH07CiAJCUFENDkzN0M4MURERDBBQUUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUQ0OTM3QzYxRERDRENGMDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgg
Ki87IH07Ci0JCUFENDkzN0QxMURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9u
Q2VsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
RDQ5MzdDRDFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwICov
OyB9OwotCQlBRDQ5MzdEMjFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNl
bGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkz
N0NFMURERDI3RDkwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5oICovOyB9Owog
CQlBRDQ5MzdEMzFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDOTFEREQy
NzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgKi87IH07CiAJCUFENDkzN0Q0
MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDQTFEREQyNzM0MDA3N0M4MDcg
LyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovOyB9OwogCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3
N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjMzOCw5ICsyMzQxLDYgQEAKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYy
QzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3Qu
Y3BwICovOyB9OwogCQlGRUZENkZDNjFENUU3OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZENkZD
NTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUE4ODI2QjE2NTNDNENEMUE2NDI5ODNC
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxh
dGVSZWdpc3RyeUtleVRhYmxlLmNwcCAqLzsgfTsKLQkJNzgyNzREOEU0QzRENEZDRDlBMURDNkU2
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlUmVn
aXN0cnlLZXkuY3BwICovOyB9OwotCQk5NUQ0MjYxQUY0Qzg0Q0UyQUNCQUM5ODEgLyogVGVtcGxh
dGVSZWdpc3RyeUtleVRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwOEZDMkYzN0FCNzY0ODNBOTk2NjY4OEYgLyogVGVtcGxhdGVSZWdpc3RyeUtl
eVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJ
dGVtUHJveHkgc2VjdGlvbiAqLwpAQCAtMjQ5Myw2ICsyNDkzLDcgQEAKIAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTAwMEJFQUYwREY2MDQ0ODFBRjZBQjY4QyAvKiBN
b2R1bGVTY29wZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxl
U2NvcGVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4RkMyRjM3QUI3NjQ4
M0E5OTY2Njg4RiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMDEyMzMwMTk0NEVBMUIwMDg0M0EwQyAvKiBERkdWYWx1ZVN0
cmVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbHVl
U3RyZW5ndGguY3BwOyBwYXRoID0gZGZnL0RGR1ZhbHVlU3RyZW5ndGguY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjAxMjMzMTE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVT
dHJlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWx1ZVN0cmVu
Z3RoLmg7IHBhdGggPSBkZmcvREZHVmFsdWVTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjAzMzJCRjE4QURGQUUxMDA1Rjk3OUEgLyogRXhpdGluZ0pJVFR5cGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhpdGluZ0pJVFR5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg1Nyw2ICszODU4LDggQEAKIAkJNzlE
NUNENTgxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdQcm9maWxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGlu
Z1Byb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nUHJv
ZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlERkNCREExRDg4QzU5NjAw
NTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGFzT3duUHJvcGVydHlDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3OUU0MjNFMDFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVl
LmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNh
bGxlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q2Fs
bGVlLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5RUUwQkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlRW52
aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRTFCNEFG
Qjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNl
cnRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk4NCw2
ICszOTg3LDcgQEAKIAkJODZGNzVFRkQxNTFDMDYyRjAwN0M5QkEzIC8qIFJlZ0V4cE1hdGNoZXNB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWdFeHBNYXRj
aGVzQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkZBOUU4RjE0MkJC
QjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQm91bmRGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCb3VuZEZ1bmN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThCNDdGMjM0MzY2QzRCNzJBQzg1MkE3RSAvKiBUZW1w
bGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOEI5RjZENTUxRDU5MTJGQTAwMUM3MzlGIC8qIEl0ZXJhdGlvbktpbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0aW9uS2luZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MDIxM0UzQjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3Rh
dGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZW1vcnlT
dGF0aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0MxMjNB
NDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVtb3J5U3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNDQ3Nyw4ICs0NDgxLDYgQEAKIAkJQUQ0OTM3QzYxRERDRENGMDAwNzdDODA3IC8qIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQ5MzdDOTFEREQyNzM0MDA3
N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQ5MzdDQTFE
REQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uLmg7IHBhdGggPSBqcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFENDkzN0NEMURE
RDI3RDkwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHA7IHBh
dGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUFENDkzN0NFMURERDI3RDkwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9u
Q2VsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0
aW9uQ2VsbC5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01h
cElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0dDTWFwSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERCMUY2MjE4RDc3REI3MDA5
QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OUY4OTM3
MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1NjMsNiArNDU2NSw3IEBACiAJCUJDRjYwNTEy
MEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFyZ0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTAw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKdW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCREI0QjVFMDk5Q0Q0QzFCQjNDMUNGMDUgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwMzI4MUUxOTgxOTc5RDAwODhC
NDk5IC8qIEN1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5jICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmM7IG5hbWUgPSBDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYzsgcGF0aCA9IEFQSS90
ZXN0cy9DdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzIwMzI4MUYxOTgxOTc5RDAwODhCNDk5IC8qIEN1c3RvbUdsb2JhbE9iamVjdENs
YXNzVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21HbG9iYWxP
YmplY3RDbGFzc1Rlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9DdXN0b21HbG9iYWxPYmplY3RDbGFz
c1Rlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwQkE5MkMxNkJCMUMxNTAw
QjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ4NDAsOSArNDg0Myw2IEBACiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJE
MjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21w
YXJlQW5kU3dhcFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1
MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3Rz
L0NvbXBhcmVBbmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUZE
NkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxhdGVSZWdpc3RyeUtl
eVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRlbXBsYXRl
UmVnaXN0cnlLZXlUYWJsZS5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCREI0QjVFMDk5Q0Q0QzFCQjNDMUNGMDUg
LyogVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlL
ZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwOEZDMkYzN0FCNzY0ODNBOTk2
NjY4OEYgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oOyBwYXRoID0gVGVtcGxhdGVS
ZWdpc3RyeUtleVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KQEAgLTc1NjksMTQgKzc1NjksMTQgQEAKIAkJQUQyRkNCOEExREI1ODQw
MDAwQjNFNzM2IC8qIGpzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQlBRDQ5MzdDRDFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNl
bGwuY3BwICovLAotCQkJCUFENDkzN0NFMURERDI3RDkwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1
bmN0aW9uQ2VsbC5oICovLAogCQkJCUFENDkzN0M5MURERDI3MzQwMDc3QzgwNyAvKiBXZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcCAqLywKIAkJCQlBRDQ5MzdDQTFEREQyNzM0MDA3N0M4MDcgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oICovLAogCQkJCUFENDkzN0M1MUREQ0RDRjAwMDc3QzgwNyAvKiBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgKi8sCiAJCQkJQUQ0OTM3QzYxRERDRENGMDAwNzdD
ODA3IC8qIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmggKi8sCiAJCQkJQUQyRkNDMjYxREI4MzhD
NDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCAqLywKIAkJCQlBRDJGQ0MyNzFE
QjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLywKKwkJCQk3OUU0MjNF
MDFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi8sCisJCQkJNzlF
NDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLywKIAkJCQlB
RDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAg
Ki8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBODFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcCAqLywKQEAgLTc4NjksNiArNzg2OSw3IEBACiAJCQkJNjUxNEYyMTkxOEIz
RTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTEx
ODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3OUU0MjNFMzFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjRCMjdBMUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxs
RWRnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDA5LDcgKzgwMTAsNiBAQAogCQkJCTBGN0IyOTRE
MTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNTI5
QTRDMUM0NTdCNzUwMDBCNDlDNiAvKiBBUElVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
QTBBMzIxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuaCBpbiBIZWFkZXJzICovLAot
CQkJCUFENDkzN0QyMURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MjVDQjAxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBh
dGhDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzhCMDE4MTdDRkU3NTUwMEIxNDRE
MyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDRDMTExQzNF
MkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAxMzUsNyArMTAxMzUsNiBAQAogCQkJCTE0ODJCNzRFMEE0MzAzMjgwMDUxN0NG
QyAvKiBKU1N0cmluZ1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZBQUIzODBCNjZBOTQ0
MDBFNTVGMTYgLyogSlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQw
QzE1N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBRDQ5MzdEMTFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNl
bGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQ0E2MDUxQUZEQkVBMjAwNDQ5NzM5IC8qIEpT
VGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZGQTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOTYzMDM5MUQ0MTkyQzYwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMTAxNTYsNiArMTAxNTUsNyBAQAogCQkJCUJDRkQ4QzkyMEVF
QjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2
NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0OEYyMUIwMTA3RUM1NDEwMDQyRUMyQyAvKiBMZXhlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OUU0MjNFMjFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNh
bGxlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyog
TGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFG
MDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUExQTA5NTFEOENC
MzQxMDA0QzJFQjggLyogRGVidWdnZXJQYXJzZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsx
ODMsNyBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbW92ZSA0LCB0MwogCiAuY29w
eUhlYWRlckxvb3A6CisgICAgIyBDb3B5IHRoZSBDb2RlQmxvY2svQ2FsbGVlL0FyZ3VtZW50Q291
bnQvfHRoaXN8IGZyb20gcHJvdG9DYWxsRnJhbWUgaW50byB0aGUgY2FsbGVlIGZyYW1lLgogICAg
IHN1YmkgMSwgdDMKICAgICBsb2FkcSBbcHJvdG9DYWxsRnJhbWUsIHQzLCA4XSwgZXh0cmFUZW1w
UmVnCiAgICAgc3RvcmVxIGV4dHJhVGVtcFJlZywgQ29kZUJsb2NrW3NwLCB0MywgOF0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBACiAjaW5jbHVk
ZSAiSlNXZWFrTWFwLmgiCiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJK
U1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCIKICNp
bmNsdWRlICJMYXp5UHJvcGVydHlJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsNyBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgZnVuY3Rpb25FeGVjdXRhYmxl
U3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIHdlYkFz
c2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHdlYkFzc2VtYmx5
Q2FsbGVlU3RydWN0dXJlLnNldCgqdGhpcywgSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2VuZGlmCiAgICAgbW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHJlZ0V4cFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpA
QCAtMjYwLDcgKzI2MSw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICAgICBmdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhp
cywgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKLSAgICB3ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMsIFdl
YkFzc2VtYmx5RnVuY3Rpb25DZWxsOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAjZW5kaWYKICAgICBoYXNoTWFwQnVja2V0U2V0U3RydWN0dXJlLnNldCgqdGhpcywgSGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBoYXNoTWFwQnVja2V0TWFwU3RydWN0dXJlLnNldCgqdGhpcywg
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNyArMzEwLDcgQEAgcHVibGljOgogICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNzZW1ibHlFeGVjdXRhYmxlU3RydWN0
dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsU3RydWN0
dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlOwog
I2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcmVnRXhwU3RydWN0dXJlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaAkocmV2aXNpb24gMjA5MjI5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAj
aW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgogI2luY2x1ZGUgImpzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlNZW1vcnku
aCIKQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJv
ckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAianMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCIKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNlUHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Np
b24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBW
ZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5saW5rZWRDYWxscyk7CisgICAgQjNJUkdlbmVyYXRvcihN
ZW1vcnkqLCBQcm9jZWR1cmUmLCBGdW5jdGlvbkNvbXBpbGF0aW9uKik7CiAKICAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7CiAgICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMTg5
LDEwICsxODksMTAgQEAgcHJpdmF0ZToKICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW251bVR5cGVz
XTsKIH07CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnksIFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBWZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5saW5rZWRDYWxscykK
K0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnksIFByb2NlZHVyZSYg
cHJvY2VkdXJlLCBGdW5jdGlvbkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbikKICAgICA6IG1fbWVt
b3J5KG1lbW9yeSkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCi0gICAgLCBtX3VubGlua2VkQ2Fs
bHModW5saW5rZWRDYWxscykKKyAgICAsIG1fdW5saW5rZWRDYWxscyhjb21waWxhdGlvbi0+dW5s
aW5rZWRDYWxscykKIHsKICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwog
CkBAIC0yMTAsNiArMjEwLDQ0IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5
KiBtZW0KICAgICAgICAgfQogICAgIH0KIAorICAgIFBhdGNocG9pbnRWYWx1ZSogZ2V0Q2FsbGVl
UGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnJl
c3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOworICAgIGdldENhbGxlZVBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgZ2V0Q2FsbGVlUGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdCA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpE
YXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAg
Y29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
b3ZlTG9jYXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgVmFsdWUq
IGZyYW1lUG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigpKTsKKyAgICAvLyBGSVhNRTogaG93IGRvIHdl
IG1ha2Ugc3VyZSB0aGlzIHN0b3JlIGV4ZWN1dGVzIGJlZm9yZSBhbnkgb3RoZXIgc3RvcmVzIHRo
YXQKKyAgICAvLyBtaWdodCB0cmFwLiBJJ20gYXNzdW1pbmcgQjMgZ3VhcmFudGVlcyB0aGlzLCBi
dXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4KKyAgICBWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgT3JpZ2luKCksCisgICAg
ICAgIGdldENhbGxlZVBhdGNocG9pbnQsCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBPcmlnaW4oKSwgZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNh
bGxlZSkpOworCisgICAgVmFsdWUqIG9mZnNldE9mQ29kZUJsb2NrID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMCks
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBP
cmlnaW4oKSwgZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNvZGVCbG9jaykpOworCisKKyAgICAvKgor
ICAgIFBhdGNocG9pbnRWYWx1ZSogcHBwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6
UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBPcmlnaW4oKSk7CisgICAgcHBwLT5zZXRH
ZW5lcmF0b3IoCisgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgKSB7CisgICAgICAgICAgICBqaXQucHJvYmUoWz1dIChNYWNyb0Fz
c2VtYmxlcjo6UHJvYmVDb250ZXh0KiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgRXhlY1N0
YXRlKiBleGVjID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4oY29udGV4dC0+Z3ByKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKSk7IAorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSW5zaWRl
IHdhc20gZnVuY3Rpb24sIGNhbGxlZTogIiwgUmF3UG9pbnRlcihleGVjLT5jYWxsZWUoKSkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICAqLworCisKICAgICBpZiAobV9t
ZW1vcnkpIHsKICAgICAgICAgbV9tZW1vcnlCYXNlR1BSID0gbV9tZW1vcnktPnBpbm5lZFJlZ2lz
dGVycygpLmJhc2VNZW1vcnlQb2ludGVyOwogICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV9t
ZW1vcnlCYXNlR1BSKTsKQEAgLTc0MSw3ICs3NzksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Db21waWxhdGlvbj4gcGFyCiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1
bmN0aW9uQ29tcGlsYXRpb24+KCk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotICAgIEIz
SVJHZW5lcmF0b3IgY29udGV4dChtZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LT51bmxpbmtlZENh
bGxzKTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQobWVtb3J5LCBwcm9jZWR1cmUsIHJlc3Vs
dC5nZXQoKSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRl
eHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9ucyk7
CiAgICAgaWYgKCFwYXJzZXIucGFyc2UoKSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJl
dmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSw3IEBAIHN0cnVjdCBVbmxpbmtlZENhbGwg
ewogCiBzdHJ1Y3QgRnVuY3Rpb25Db21waWxhdGlvbiB7CiAgICAgVmVjdG9yPFVubGlua2VkQ2Fs
bD4gdW5saW5rZWRDYWxsczsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgY2FsbGVlTW92
ZUxvY2F0aW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvZGU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4ganNFbnRyeVBvaW50OwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJldmlzaW9uIDIwOTIy
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksOSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1
ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5j
bHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCkBAIC0xMTAsNiArMTEzLDIxIEBAIHZvaWQg
UGxhbjo6cnVuKCkKICAgICBtX2ZhaWxlZCA9IGZhbHNlOwogfQogCit2b2lkIFBsYW46OmluaXRp
YWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHN0ZDo6ZnVuY3Rpb248
dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJseUNhbGxlZSopPiBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlQoIWZhaWxlZCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxl
ZEZ1bmN0aW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Db21waWxhdGlvbj4mIGNvbXBpbGF0aW9uID0gbV9jb21waWxlZEZ1bmN0aW9uc1tpXTsKKyAg
ICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbiA9IGNvbXBp
bGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IGNhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCks
IFdURk1vdmUoY29tcGlsYXRpb24pKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoY2FsbGVlTW92ZUxvY2F0aW9uLCBjYWxsZWUpOworCisgICAgICAgIGRhdGFMb2dM
bigiTWFkZSBjYWxsZWU6ICIsIFJhd1BvaW50ZXIoY2FsbGVlKSk7CisgICAgICAgIGNhbGxiYWNr
KGksIGNhbGxlZSk7CisgICAgfQorfQorCiBQbGFuOjp+UGxhbigpIHsgfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5o
CShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMywxMyBAQAogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2Jh
bE9iamVjdDsKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CisKK25hbWVzcGFjZSBXYXNtIHsK
KwogY2xhc3MgTWVtb3J5OwogCiBjbGFzcyBQbGFuIHsKQEAgLTQ0LDYgKzUwLDggQEAgcHVibGlj
OgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW4oKTsKIAorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQodW5zaWduZWQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOworCiAgICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KICAg
ICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0CiAgICAgewpAQCAtNzEsMTEgKzc5
LDYgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwogICAgICAg
ICByZXR1cm4gbV9jb21waWxlZEZ1bmN0aW9ucy5hdChpKS5nZXQoKTsKICAgICB9Ci0gICAgQ29t
cGlsZWRGdW5jdGlvbnMmIGdldENvbXBpbGVkRnVuY3Rpb25zKCkKLSAgICB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvbXBpbGVkRnVuY3Rp
b25zOwotICAgIH0KIAogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3Jt
YXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDYWxsZWUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNhbGxlZSIsIG51bGxw
dHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNhbGxlZSkgfTsKKworSlNX
ZWJBc3NlbWJseUNhbGxlZTo6SlNXZWJBc3NlbWJseUNhbGxlZShWTSYgdm0pCisgICAgOiBCYXNl
KHZtLCB2bS53ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5nZXQoKSkKK3sgfQorCit2b2lkIEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgc3RkOjp1bmlxdWVfcHRy
PFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+JiYgY29tcGlsYXRpb24pCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgbV9jb2RlID0gV1RGTW92ZShjb21waWxhdGlvbi0+
Y29kZSk7CisgICAgbV9qc0VudHJ5UG9pbnQgPSBXVEZNb3ZlKGNvbXBpbGF0aW9uLT5qc0VudHJ5
UG9pbnQpOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQoreworICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseUNhbGxlZSo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1ibHlD
YWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiSlNDYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlIDogcHVibGljIEpT
Q2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVj
dHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNhbGxlZSogY3JlYXRl
KFZNJiB2bSwgc3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+JiYgY29t
cGlsYXRpb24pCisgICAgeworICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q2FsbGVlPih2bS5oZWFwKSkg
SlNXZWJBc3NlbWJseUNhbGxlZSh2bSk7CisgICAgICAgIGNhbGxlZS0+ZmluaXNoQ3JlYXRpb24o
dm0sIFdURk1vdmUoY29tcGlsYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZTsKKyAgICB9
CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgeworICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHZv
aWQqIGpzRW50cnlQb2ludCgpIHsgcmV0dXJuIG1fanNFbnRyeVBvaW50LT5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4mJik7CisgICAgSlNX
ZWJBc3NlbWJseUNhbGxlZShWTSYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxh
dGlvbj4gbV9jb2RlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IG1fanNF
bnRyeVBvaW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDE1ICsyOSwxOSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5
TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxl
SW5mb3JtYXRpb24sIFdhc206OkNvbXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucywg
U3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKQorY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1vZHVsZSIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseU1vZHVsZSkgfTsK
KworSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0aW9uLAorICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1i
b2xUYWJsZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiB7Ci0gICAgYXV0byogaW5zdGFuY2UgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFwKSkg
SlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlvbiwgY29t
cGlsZWRGdW5jdGlvbnMpOworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2Fs
bGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBtb2R1bGVJbmZv
cm1hdGlvbiwgY2FsbGVlQ291bnQpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwg
ZXhwb3J0U3ltYm9sVGFibGUpOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTQ3LDExICs1
MSwxMiBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0CiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9y
bWF0aW9uLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYgY29tcGlsZWRGdW5jdGlvbnMpCitKU1dl
YkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVs
ZUluZm9ybWF0aW9uLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKICAgICAsIG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlv
bikpCi0gICAgLCBtX2NvbXBpbGVkRnVuY3Rpb25zKFdURk1vdmUoY29tcGlsZWRGdW5jdGlvbnMp
KQorICAgICwgbV9jYWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKKyAgICBtZW1zZXQoY2FsbGVl
cygpLCAwLCBtX2NhbGxlZUNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5
Q2FsbGVlPikpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKQpAQCAtNzMsMTAgKzc4LDEy
IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigKIAogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fZXhwb3J0U3ltYm9sVGFibGUpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2NhbGxlZUNvdW50OyBpKyspIHsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWUgPSAmdGhpc09iamVjdC0+Y2FsbGVl
cygpW2ldOworICAgICAgICB2aXNpdG9yLmFwcGVuZChjYWxsZWUpOworICAgIH0KIH0KIAotY29u
c3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5
Lk1vZHVsZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3Nl
bWJseU1vZHVsZSkgfTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDMwICszMyw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20g
eworc3RydWN0IFNpZ25hdHVyZTsKK307CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBj
bGFzcyBTeW1ib2xUYWJsZTsKIAogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZSA6IHB1YmxpYyBK
U0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJs
ZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShW
TSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4m
LCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYsIFN5bWJvbFRhYmxlKik7CisgICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mLCBTeW1ib2xUYWJsZSogZXhwb3J0cywgdW5zaWdu
ZWQgY2FsbGVlQ291bnQpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKICAg
ICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25z
dCB7IHJldHVybiAqbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQotICAgIGNvbnN0IFdhc206
OkNvbXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29tcGlsZWRGdW5jdGlvbnM7IH0KICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUo
KSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9CiAKKyAgICBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUodW5zaWduZWQgY2FsbGVlSW5kZXgpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOworICAgICAg
ICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOworICAgIH0KKwog
cHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6
OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiwgV2FzbTo6Q29tcGlsZWRGdW5j
dGlvbnMmKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYsIHVuc2lnbmVkIGNhbGxlZUNvdW50
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3ltYm9sVGFibGUqKTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwogcHJpdmF0ZToKKyAgICBzdGF0aWMgc2l6ZV90IG9m
ZnNldE9mQ2FsbGVlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2Yo
SlNXZWJBc3NlbWJseU1vZHVsZSkpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUodW5zaWduZWQgbnVtQ2FsbGVlcykKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZz
ZXRPZkNhbGxlZXMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4p
ICogbnVtQ2FsbGVlczsKKyAgICB9CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247Ci0gICAgV2FzbTo6Q29tcGlsZWRGdW5j
dGlvbnMgbV9jb21waWxlZEZ1bmN0aW9uczsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+
IG1fZXhwb3J0U3ltYm9sVGFibGU7CisgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwOTIyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTIgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgor
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIlByb3RvQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5j
bHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTQ1LDE0ICs0NSwxMiBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlGdW5jdGlvbjo6c19p
CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogY2FsbGVlID0ganNEeW5hbWljQ2Fz
dDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7Ci0gICAgaWYgKCFjYWxs
ZWUpCisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2Fz
dDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CisgICAgaWYgKCF3YXNt
RnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiZXhwZWN0ZWQgYSBXZWJBc3NlbWJs
eSBmdW5jdGlvbiIsIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShl
eGVjLT5qc0NhbGxlZSgpKSkpKTsKLSAgICBjb25zdCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rp
b24mIGNhbGxhYmxlID0gY2FsbGVlLT53ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCgpLT5mdW5jdGlv
bigpOwotICAgIGNvbnN0IEIzOjpDb21waWxhdGlvbioganNFbnRyeVBvaW50ID0gY2FsbGFibGUu
anNFbnRyeVBvaW50OwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gY2Fs
bGFibGUuc2lnbmF0dXJlOworICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0g
d2FzbUZ1bmN0aW9uLT5zaWduYXR1cmUoKTsKIAogICAgIC8vIEZJWE1FIGlzIHRoaXMgdGhlIHJp
Z2h0IGJlaGF2aW9yPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
ODc2CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSBzaWduYXR1cmUtPmFyZ3VtZW50
cy5zaXplKCkpCkBAIC05Myw5ICs5MSwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsCiAgICAgfQogCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7
Ci0gICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBjYWxsZWUsIGZpcnN0QXJndW1lbnQs
IGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNt
Q2FsbGVlID0gd2FzbUZ1bmN0aW9uLT53ZWJBc3NlbWJseUNhbGxlZSgpOworICAgIC8vIE5vdGU6
IHdlIHNwZWNpZmljYWxseSB1c2UgdGhlIFdlYkFzc2VibHlGdW5jdGlvbiBhcyB0aGUgY2FsbGVl
IHRvIGJlZ2luIHdpdGggaW4gdGhlIFByb3RvQ2FsbEZyYW1lLgorICAgIC8vIFRoZSByZWFzb24g
Zm9yIHRoaXMgaXMgdGhhdCBjYWxsaW5nIGludG8gdGhlIGxsaW50IG1heSBzdGFjayBvdmVyZmxv
dywgYW5kIHRoZSBzdGFjayBvdmVyZmxvdworICAgIC8vIGhhbmRsZXIgbWlnaHQgcmVhZCB0aGUg
Z2xvYmFsIG9iamVjdCBmcm9tIHRoZSBjYWxsZWUuIHRoZSBXYXNtIENhbGxlZSBkb2Vzbid0IGhh
dmUgYSBnbG9iYWwgb2JqZWN0LAorICAgIC8vIGJ1dCB0aGUgcHJvdG8gY2FsbCBmcmFtZSBkb2Vz
LgorICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0ciwgd2FzbUZ1bmN0aW9uLCBmaXJzdEFy
Z3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJncyk7CiAgICAgCi0gICAgRW5jb2RlZEpTVmFs
dWUgcmF3UmVzdWx0ID0gdm1FbnRyeVRvV2FzbShqc0VudHJ5UG9pbnQtPmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpLCAmdm0sICZwcm90b0NhbGxGcmFtZSk7CisgICAgRW5jb2RlZEpTVmFsdWUg
cmF3UmVzdWx0ID0gdm1FbnRyeVRvV2FzbSh3YXNtQ2FsbGVlLT5qc0VudHJ5UG9pbnQoKSwgJnZt
LCAmcHJvdG9DYWxsRnJhbWUpOwogICAgIC8vIEZJWE1FIGlzIHRoaXMgY29ycmVjdD8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDg3NgogICAgIHN3aXRjaCAoc2ln
bmF0dXJlLT5yZXR1cm5UeXBlKSB7CiAgICAgY2FzZSBXYXNtOjpWb2lkOgpAQCAtMTE2LDEzICsx
MTksMTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIHJl
dHVybiBFbmNvZGVkSlNWYWx1ZSgpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UsIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmIGNhbGxhYmxlKQorV2ViQXNz
ZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5h
bWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IGNhbGxlZSwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCiB7CiAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRy
LCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCogZnVuY3Rpb25DZWxsID0gV2Vi
QXNzZW1ibHlGdW5jdGlvbkNlbGw6OmNyZWF0ZSh2bSwgV1RGTW92ZShjYWxsYWJsZSkpOwogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9u
U3RydWN0dXJlKCk7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNz
ZW1ibHlGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgIGZ1bmN0aW9u
LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwg
ZnVuY3Rpb25DZWxsKTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFi
bGUsIGxlbmd0aCwgbmFtZSwgaW5zdGFuY2UsIGNhbGxlZSwgc2lnbmF0dXJlKTsKICAgICByZXR1
cm4gZnVuY3Rpb247CiB9CiAKQEAgLTE0MywxNSArMTQ1LDE2IEBAIHZvaWQgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbnN0YW5jZSk7Ci0g
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZnVuY3Rpb25DZWxsKTsKKyAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV93YXNtQ2FsbGVlKTsKIH0KIAotdm9pZCBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSwgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIGZ1bmN0aW9uQ2VsbCkK
K3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVF
eGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxlZSog
d2FzbUNhbGxlZSwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CiAgICAgQVNTRVJUKGlu
aGVyaXRzKGluZm8oKSkpOwogICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBpbnN0YW5jZSk7
Ci0gICAgbV9mdW5jdGlvbkNlbGwuc2V0KHZtLCB0aGlzLCBmdW5jdGlvbkNlbGwpOworICAgIG1f
d2FzbUNhbGxlZS5zZXQodm0sIHRoaXMsIHdhc21DYWxsZWUpOworICAgIG1fc2lnbmF0dXJlID0g
c2lnbmF0dXJlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9u
IDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw7
CitjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOwogY2xhc3MgV2ViQXNzZW1ibHlJbnN0YW5jZTsK
IAogbmFtZXNwYWNlIEIzIHsKQEAgLTQ0LDIyICs0NCw2IEBAIG5hbWVzcGFjZSBXYXNtIHsKIHN0
cnVjdCBTaWduYXR1cmU7CiB9CiAKLWNsYXNzIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uKTsK
LSAgICBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24oKSA9IGRlbGV0ZTsKLQotcHVibGljOgot
ICAgIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbihDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rp
b24mJikgPSBkZWZhdWx0OwotCi0gICAgY29uc3QgQjM6OkNvbXBpbGF0aW9uKiBqc0VudHJ5UG9p
bnQ7Ci0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmU7Ci0gICAgQ2FsbGFibGVX
ZWJBc3NlbWJseUZ1bmN0aW9uKGNvbnN0IEIzOjpDb21waWxhdGlvbioganNFbnRyeVBvaW50LCBj
b25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKLSAgICAgICAgOiBqc0VudHJ5UG9pbnQo
anNFbnRyeVBvaW50KQotICAgICAgICAsIHNpZ25hdHVyZShzaWduYXR1cmUpCi0gICAgewotICAg
IH0KLX07Ci0KIGNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb24gOiBwdWJsaWMgSlNGdW5jdGlvbiB7
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Z1bmN0aW9uIEJhc2U7CkBAIC02OCwyMSArNTIsMjgg
QEAgcHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIGludCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgQ2FsbGFi
bGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVk
LCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiwgV2FzbTo6U2lnbmF0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAotICAgIGNvbnN0IFdlYkFz
c2VtYmx5RnVuY3Rpb25DZWxsKiB3ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCgpIGNvbnN0IHsgcmV0
dXJuIG1fZnVuY3Rpb25DZWxsLmdldCgpOyB9CisgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Vi
QXNzZW1ibHlDYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX3dhc21DYWxsZWUuZ2V0KCk7IH0KKyAg
ICBjb25zdCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0YW5jZS5nZXQoKTsgfQorICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJl
KCkKKyAgICB7IAorICAgICAgICBBU1NFUlQobV9zaWduYXR1cmUpOworICAgICAgICByZXR1cm4g
bV9zaWduYXR1cmU7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKik7CisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5n
dGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJBc3Nl
bWJseUNhbGxlZSosIFdhc206OlNpZ25hdHVyZSopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCiAgICAgV3Jp
dGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKLSAgICBXcml0ZUJh
cnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw+IG1fZnVuY3Rpb25DZWxsOworICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21DYWxsZWU7CisgICAgV2FzbTo6U2ln
bmF0dXJlKiBtX3NpZ25hdHVyZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb25DZWxsLmNwcAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwCShub25leGlzdGVudCkKQEAgLTEs
NjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5o
IgotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RnVuY3Rpb25D
ZWxsOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCIsIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwpIH07Ci0KLVdl
YkFzc2VtYmx5RnVuY3Rpb25DZWxsKiBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbDo6Y3JlYXRlKFZN
JiB2bSwgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYgY2FsbGFibGUpCi17Ci0gICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbkNlbGwqIG5hdGl2ZUZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1
bmN0aW9uQ2VsbCh2bSwgV1RGTW92ZShjYWxsYWJsZSkpOwotICAgIG5hdGl2ZUZ1bmN0aW9uLT5m
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uOwotfQotCi1XZWJB
c3NlbWJseUZ1bmN0aW9uQ2VsbDo6V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwoVk0mIHZtLCBDYWxs
YWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mJiBjYWxsYWJsZSkKLSAgICA6IEJhc2Uodm0sIHZtLndl
YkFzc2VtYmx5RnVuY3Rpb25DZWxsU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9mdW5jdGlvbihX
VEZNb3ZlKGNhbGxhYmxlKSkKLXsKLX0KLQotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbDo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIG5h
dGl2ZUZ1bmN0aW9uID0gc3RhdGljX2Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqPihjZWxs
KTsKLSAgICBuYXRpdmVGdW5jdGlvbi0+V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw6On5XZWJBc3Nl
bWJseUZ1bmN0aW9uQ2VsbCgpOwotfQotCi1TdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5RnVuY3Rpb25D
ZWxsOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2Vs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb25DZWxsLmgJKHJldmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJK
U0NlbGwuaCIKLSNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCA6IHB1YmxpYyBKU0NlbGwgewot
cHVibGljOgotICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOwotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwot
Ci0gICAgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKiBjcmVhdGUoVk0mLCBDYWxsYWJs
ZVdlYkFzc2VtYmx5RnVuY3Rpb24mJik7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9i
amVjdCosIEpTVmFsdWUpOwotCi0gICAgREVDTEFSRV9JTkZPOwotCi0gICAgY29uc3QgQ2FsbGFi
bGVXZWJBc3NlbWJseUZ1bmN0aW9uJiBmdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rp
b247IH0KLQotcHJpdmF0ZToKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbChWTSYsIENhbGxh
YmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmKTsKLQotICAgIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5j
dGlvbiBtX2Z1bmN0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlNb2R1bGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTVHlwZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlNb2R1bGUuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgpAQCAtNTMsNyArNTQs
NyBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlNb2R1bGVDb25zdHJ1CiAKIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlNb2R1bGUo
RXhlY1N0YXRlKiBzdGF0ZSkKIHsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLT52bSgpOworICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKICAgICBKU1ZhbHVlIHZhbCA9IHN0YXRlLT5hcmd1bWVudCgwKTsKIApAQCAtODcsNyAr
ODgsMTMgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgICAg
ICBleHBvcnRTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgZXhwLmZpZWxkLmlt
cGwoKSwgU3ltYm9sVGFibGVFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSkpOwogICAgIH0KIAotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKHZtLCBz
dHJ1Y3R1cmUsIHBsYW4uZ2V0TW9kdWxlSW5mb3JtYXRpb24oKSwgcGxhbi5nZXRDb21waWxlZEZ1
bmN0aW9ucygpLCBleHBvcnRTeW1ib2xUYWJsZSkpOworICAgIHVuc2lnbmVkIGNhbGxlZUNvdW50
ID0gcGxhbi5jb21waWxlZEZ1bmN0aW9uQ291bnQoKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxl
KiByZXN1bHQgPSBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0cnVjdHVyZSwgcGxh
bi5nZXRNb2R1bGVJbmZvcm1hdGlvbigpLCBleHBvcnRTeW1ib2xUYWJsZSwgY2FsbGVlQ291bnQp
OworICAgIHBsYW4uaW5pdGlhbGl6ZUNhbGxlZXMoc3RhdGUtPmpzQ2FsbGVlKCktPmdsb2JhbE9i
amVjdCgpLCAKKyAgICAgICAgWyZdICh1bnNpZ25lZCBjYWxsZWVJbmRleCwgSlNXZWJBc3NlbWJs
eUNhbGxlZSogY2FsbGVlKSB7CisgICAgICAgICAgICByZXN1bHQtPmNhbGxlZXMoKVtjYWxsZWVJ
bmRleF0uc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgICAgIH0pOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgY2FsbEpTV2ViQXNzZW1ibHlNb2R1bGUoRXhlY1N0YXRlKiBzdGF0ZSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA2LDcgKzEwNiw2IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhl
Y1MKICAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSBzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwogCiAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9u
ID0gaW5zdGFuY2UtPm1vZHVsZSgpLT5tb2R1bGVJbmZvcm1hdGlvbigpOwotICAgIGNvbnN0IFdh
c206OkNvbXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucyA9IGluc3RhbmNlLT5tb2R1
bGUoKS0+Y29tcGlsZWRGdW5jdGlvbnMoKTsKICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9s
VGFibGUgPSBpbnN0YW5jZS0+bW9kdWxlKCktPmV4cG9ydFN5bWJvbFRhYmxlKCk7CiAKICAgICAv
LyBGSVhNRSB3aXJlIHVwIHRoZSBpbXBvcnRzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1MTE4CkBAIC0xMjQsMTAgKzEyMyw5IEBAIHZvaWQgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBi
ZSBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLgogICAg
ICAgICAgICAgLy8gICAgIGIuIEFwcGVuZCBmdW5jIHRvIGZ1bmNzLgogICAgICAgICAgICAgLy8g
ICAgIGMuIFJldHVybiBmdW5jLgotICAgICAgICAgICAgY29uc3QgV2FzbTo6RnVuY3Rpb25Db21w
aWxhdGlvbiogY29tcGlsZWRGdW5jdGlvbiA9IGNvbXBpbGVkRnVuY3Rpb25zLmF0KGV4cC5mdW5j
dGlvbkluZGV4KS5nZXQoKTsKLSAgICAgICAgICAgIGNvbnN0IEIzOjpDb21waWxhdGlvbioganNF
bnRyeVBvaW50ID0gY29tcGlsZWRGdW5jdGlvbi0+anNFbnRyeVBvaW50LmdldCgpOwotICAgICAg
ICAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtb2R1bGVJbmZvcm1hdGlv
bi5mdW5jdGlvbnMuYXQoZXhwLmZ1bmN0aW9uSW5kZXgpLnNpZ25hdHVyZTsKLSAgICAgICAgICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgZXhwLmZp
ZWxkLnN0cmluZygpLCBpbnN0YW5jZSwgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uKGpzRW50
cnlQb2ludCwgc2lnbmF0dXJlKSk7CisgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3
YXNtQ2FsbGVlID0gaW5zdGFuY2UtPm1vZHVsZSgpLT5jYWxsZWUoZXhwLmZ1bmN0aW9uSW5kZXgp
OworICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtb2R1bGVJbmZvcm1h
dGlvbi5mdW5jdGlvbnMuYXQoZXhwLmZ1bmN0aW9uSW5kZXgpLnNpZ25hdHVyZTsKKyAgICAgICAg
ICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgZXhw
LmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwgd2FzbUNhbGxlZSwgc2lnbmF0dXJlKTsKICAgICAg
ICAgICAgIGV4cG9ydGVkVmFsdWUgPSBmdW5jdGlvbjsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295925</attachid>
            <date>2016-12-01 20:12:44 -0800</date>
            <delta_ts>2016-12-02 12:55:46 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>60894</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogI2lu
Y2x1ZGUgIkpTUHJveHkuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTVHlw
ZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAi
TExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgpAQCAtMjUzOSw3ICsyNTQwLDcgQEAgc3RhdGljIEpTVmFsdWUgYm94KEV4
ZWNTdGF0ZSogZXhlYywgVk0mIAogICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih2YWx1ZS5hc051bWJlcigpKSk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlIGNh
bGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBjb25zdCBCMzo6Q29tcGlsYXRpb24mIGNvZGUsIFZlY3Rv
cjxKU1ZhbHVlPiYgYm94ZWRBcmdzKQorc3RhdGljIEpTVmFsdWUgY2FsbFdhc21GdW5jdGlvbihW
TSogdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IHdhc21DYWxsZWUsIFZlY3RvcjxKU1ZhbHVlPiYgYm94ZWRBcmdzKQogewogICAgIEpTVmFsdWUg
Zmlyc3RBcmd1bWVudDsKICAgICBpbnQgYXJnQ291bnQgPSAxOwpAQCAtMjU1Miw5ICsyNTUzLDkg
QEAgc3RhdGljIEpTVmFsdWUgY2FsbFdhc21GdW5jdGlvbihWTSogdm0sIAogICAgIH0KIAogICAg
IFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwotICAgIHByb3RvQ2FsbEZyYW1lLmluaXQo
bnVsbHB0ciwgbnVsbHB0ciwgZmlyc3RBcmd1bWVudCwgYXJnQ291bnQsIHJlbWFpbmluZ0FyZ3Mp
OworICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0ciwgZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCktPmpzQ2FsbGVlKCksIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdz
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvV2FzbShjb2RlLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpLCB2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZSh2bUVudHJ5VG9XYXNtKHdhc21DYWxsZWUtPmpzRW50cnlQb2ludCgp
LCB2bSwgJnByb3RvQ2FsbEZyYW1lKSk7CiB9CiAKIC8vIHRlc3RXYXNtTW9kdWxlKEpTQXJyYXlC
dWZmZXJWaWV3IHNvdXJjZSwgbnVtYmVyIGZ1bmN0aW9uQ291bnQsIC4uLltbV2FzbVZhbHVlLCBb
V2FzbVZhbHVlXV1dKSB3aGVyZSB0aGUgaXRoIGNvcHkgb2YgW1tyZXN1bHQsIFthcmdzXV1dIGlz
IGEgbGlzdApAQCAtMjU4Myw5ICsyNTg0LDE4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmMKICAgICBpZiAocGxhbi5jb21waWxlZEZ1bmN0aW9uQ291bnQoKSAhPSBm
dW5jdGlvbkNvdW50KQogICAgICAgICBDUkFTSCgpOwogCisgICAgTWFya2VkQXJndW1lbnRCdWZm
ZXIgY2FsbGVlczsKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IFVJTlRfTUFY
OworICAgICAgICBwbGFuLmluaXRpYWxpemVDYWxsZWVzKGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwKKyAgICAgICAgICAgIFsmXSAodW5zaWduZWQgY2FsbGVlSW5kZXgsIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIGNhbGxlZSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFjYWxs
ZWVJbmRleCB8fCAoY2FsbGVlSW5kZXggLSAxID09IGxhc3RJbmRleCkpOworICAgICAgICAgICAg
ICAgIGNhbGxlZXMuYXBwZW5kKGNhbGxlZSk7CisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0g
Y2FsbGVlSW5kZXg7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKICAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7Ci0gICAgICAgIGlmICghcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKGkpKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gY29tcGls
ZSBmdW5jdGlvbiBhdCBpbmRleCIsIGkpOwogCiAgICAgICAgIEpTQXJyYXkqIHRlc3RDYXNlcyA9
IGpzQ2FzdDxKU0FycmF5Kj4oZXhlYy0+YXJndW1lbnQoaSArIDIpKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCB0ZXN0SW5kZXggPSAwOyB0ZXN0SW5kZXggPCB0ZXN0Q2FzZXMtPmxlbmd0aCgpOyAr
K3Rlc3RJbmRleCkgewpAQCAtMjU5Nyw3ICsyNjA3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuYwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmdJbmRleCA9
IDA7IGFyZ0luZGV4IDwgYXJndW1lbnRzLT5sZW5ndGgoKTsgKythcmdJbmRleCkKICAgICAgICAg
ICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGJveChleGVjLCB2bSwgYXJndW1lbnRzLT5nZXRJbmRl
eFF1aWNrbHkoYXJnSW5kZXgpKSk7CiAKLSAgICAgICAgICAgIEpTVmFsdWUgY2FsbFJlc3VsdCA9
IGNhbGxXYXNtRnVuY3Rpb24oJnZtLCAqcGxhbi5jb21waWxlZEZ1bmN0aW9uKGkpLT5qc0VudHJ5
UG9pbnQsIGJveGVkQXJncyk7CisgICAgICAgICAgICBKU1ZhbHVlIGNhbGxSZXN1bHQgPSBjYWxs
V2FzbUZ1bmN0aW9uKCZ2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseUNhbGxlZSo+KGNhbGxlZXMuYXQoaSkpLCBib3hlZEFyZ3MpOwogICAgICAgICAg
ICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJveChleGVjLCB2bSwgcmVzdWx0KTsKICAgICAgICAgICAg
IGlmIChjYWxsUmVzdWx0ICE9IGV4cGVjdGVkKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygi
QXJndW1lbnRzOiAiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE5OSw2ICsxMTk5LDcgQEAK
IAkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRGNzI1NjQxNEVFMjY1RTAw
QjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0Rjk3NDQ3MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9v
dFZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTI4RDRBODE3N0I3MUM4
MDAwN0ZBM0MgLyogSlNTdHJpbmdSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTI4RDRBNzE3N0I3MUM4MDAwN0ZBM0MgLyogSlNTdHJp
bmdSZWZQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMUE4ODI2QjE2NTNDNENEMUE2NDI5ODNCIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlU
YWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcCAq
LzsgfTsKIAkJMUFDRjczNzcxNzFDQTZGQjAwQzlCQjFFIC8qIFdlYWsuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFDRjczNzYxNzFDQTZGQjAwQzlC
QjFFIC8qIFdlYWsuY3BwICovOyB9OwogCQkyNjAwQjVBNjE1MkJBQUE3MDA5MUVFNUYgLyogSlNT
dHJpbmdKb2luZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLzsg
fTsKIAkJMjYwMEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjAwQjVBNTE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCAqLzsgfTsKQEAgLTEzOTksNiArMTQwMCw3IEBA
CiAJCTcwRUNBNjA5MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEVDQTYwNDFBRkRC
RUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyQUFGN0NEMUQwRDMxQjMwMDVFNjBCRSAv
KiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUFGN0NCMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcCAqLzsgfTsKIAkJNzJBQUY3Q0UxRDBEMzFCMzAw
NUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUFGN0NDMUQwRDMxOEIwMDVFNjBCRSAv
KiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggKi87IH07CisJCTc4Mjc0RDhFNEM0RDRG
Q0Q5QTFEQzZFNiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJEQjRCNUUwOTlDRDRDMUJCM0MxQ0YwNSAvKiBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCAqLzsgfTsKIAkJNzkwNUJCNjgxRDEyMDUwRTAwMTlGRTU3
IC8qIElubGluZUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAq
LzsgfTsKIAkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJCNjcxRDEyMDUw
RTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTc5MTYwREJEMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJl
dm9rZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OTE2MERCQjFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwICovOyB9OwpAQCAtMTQz
MSw2ICsxNDMzLDggQEAKIAkJNzlENUNENUExQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJv
ZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlENUNENTgxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwICovOyB9Owog
CQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTkxQzExMDZBOTAw
Q0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3du
UHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUU0MjNF
MjFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMDFERUU2NTMyMDA3OEQz
NTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi87IH07CisJCTc5RTQyM0UzMURFRTY1MzIw
MDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJB
c3NlbWJseUNhbGxlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUw
QkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCAqLzsgfTsKIAkJ
NzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZFMUI0QUZCODUw
MDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUUxQjlGRUQwRjAwQ0E2NkFCIC8qIERG
R01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhp
bWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CkBAIC0xNTQ2LDYgKzE1NTAsNyBAQAog
CQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwM0ZFQTBFNkE3MkMwMDA3ODZF
NkEgLyogU21hbGxTdHJpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJOTMzMDQwMkMwRTZBNzY0MDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwM0ZF
ODBFNkE3MkI1MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmNwcCAqLzsgfTsKIAkJOTMzNUYyNEQx
MkU2NzY1QjAwMkI1NTUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzNDVBODcxMkQ4MzhDNDAwMzAy
QkUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwICovOyB9OworCQk5NUQ0MjYxQUY0Qzg0
Q0UyQUNCQUM5ODEgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZDMkYzN0FCNzY0ODNBOTk2NjY4OEYg
LyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTYwMDk3QTYwRUJBQkI1ODAwN0E3Mjk3IC8qIExhYmVs
U2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2
MDA5N0E1MEVCQUJCNTgwMDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggKi87IH07CiAJCTk2ODhDQjE1
MEVEMTJCNEUwMDFENjQ5RiAvKiBBc3NlbWJsZXJCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk2ODhDQjEzMEVEMTJCNEUwMDFENjQ5RiAvKiBB
c3NlbWJsZXJCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk5Njg4Q0IxNjBFRDEyQjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Njg4Q0IxNDBFRDEy
QjRFMDAxRDY0OUYgLyogWDg2QXNzZW1ibGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIwMDUsOCArMjAxMCw2IEBACiAJCUFENDkzN0M0MURE
QkU2MTQwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3QzIxRERCRTYwQTAwNzdDODA3IC8q
IEFic3RyYWN0TW9kdWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQUQ0OTM3QzcxREREMEFBRTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFENDkzN0M1MUREQ0RDRjAwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAgKi87IH07CiAJCUFENDkzN0M4MURERDBBQUUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUQ0OTM3QzYxRERDRENGMDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmgg
Ki87IH07Ci0JCUFENDkzN0QxMURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9u
Q2VsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
RDQ5MzdDRDFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwICov
OyB9OwotCQlBRDQ5MzdEMjFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNl
bGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkz
N0NFMURERDI3RDkwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5oICovOyB9Owog
CQlBRDQ5MzdEMzFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDOTFEREQy
NzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgKi87IH07CiAJCUFENDkzN0Q0
MURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDQTFEREQyNzM0MDA3N0M4MDcg
LyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovOyB9OwogCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3
N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjMzOCw5ICsyMzQxLDYgQEAKIAkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYy
QzE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFRjA0MDUwMUFBRTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3Qu
Y3BwICovOyB9OwogCQlGRUZENkZDNjFENUU3OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZENkZD
NTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUE4ODI2QjE2NTNDNENEMUE2NDI5ODNC
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxh
dGVSZWdpc3RyeUtleVRhYmxlLmNwcCAqLzsgfTsKLQkJNzgyNzREOEU0QzRENEZDRDlBMURDNkU2
IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlUmVn
aXN0cnlLZXkuY3BwICovOyB9OwotCQk5NUQ0MjYxQUY0Qzg0Q0UyQUNCQUM5ODEgLyogVGVtcGxh
dGVSZWdpc3RyeUtleVRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwOEZDMkYzN0FCNzY0ODNBOTk2NjY4OEYgLyogVGVtcGxhdGVSZWdpc3RyeUtl
eVRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJ
dGVtUHJveHkgc2VjdGlvbiAqLwpAQCAtMjQ5Myw2ICsyNDkzLDcgQEAKIAogLyogQmVnaW4gUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAJCTAwMEJFQUYwREY2MDQ0ODFBRjZBQjY4QyAvKiBN
b2R1bGVTY29wZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxl
U2NvcGVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4RkMyRjM3QUI3NjQ4
M0E5OTY2Njg4RiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMDEyMzMwMTk0NEVBMUIwMDg0M0EwQyAvKiBERkdWYWx1ZVN0
cmVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbHVl
U3RyZW5ndGguY3BwOyBwYXRoID0gZGZnL0RGR1ZhbHVlU3RyZW5ndGguY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjAxMjMzMTE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVT
dHJlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWx1ZVN0cmVu
Z3RoLmg7IHBhdGggPSBkZmcvREZHVmFsdWVTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjAzMzJCRjE4QURGQUUxMDA1Rjk3OUEgLyogRXhpdGluZ0pJVFR5cGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhpdGluZ0pJVFR5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg1Nyw2ICszODU4LDggQEAKIAkJNzlE
NUNENTgxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdQcm9maWxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGlu
Z1Byb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nUHJv
ZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlERkNCREExRDg4QzU5NjAw
NTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSGFzT3duUHJvcGVydHlDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3OUU0MjNFMDFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVl
LmNwcDsgcGF0aCA9IGpzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNh
bGxlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5Q2Fs
bGVlLmg7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5RUUwQkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25t
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlRW52
aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRTFCNEFG
Qjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNl
cnRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdN
YXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk4NCw2
ICszOTg3LDcgQEAKIAkJODZGNzVFRkQxNTFDMDYyRjAwN0M5QkEzIC8qIFJlZ0V4cE1hdGNoZXNB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWdFeHBNYXRj
aGVzQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkZBOUU4RjE0MkJC
QjJEMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQm91bmRGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2RkE5RTkwMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCb3VuZEZ1bmN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThCNDdGMjM0MzY2QzRCNzJBQzg1MkE3RSAvKiBUZW1w
bGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOEI5RjZENTUxRDU5MTJGQTAwMUM3MzlGIC8qIEl0ZXJhdGlvbktpbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0aW9uS2luZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MDIxM0UzQjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3Rh
dGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZW1vcnlT
dGF0aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0MxMjNB
NDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVtb3J5U3RhdGlzdGljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNDQ3Nyw4ICs0NDgxLDYgQEAKIAkJQUQ0OTM3QzYxRERDRENGMDAwNzdDODA3IC8qIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQ5MzdDOTFEREQyNzM0MDA3
N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRDQ5MzdDQTFE
REQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uLmg7IHBhdGggPSBqcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFENDkzN0NEMURE
RDI3RDkwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHA7IHBh
dGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUFENDkzN0NFMURERDI3RDkwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9u
Q2VsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0
aW9uQ2VsbC5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ4NkE5M0QxQUE0RDg3QzAwMkZFNzdGIC8qIFdlYWtHQ01h
cElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0dDTWFwSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBRERCMUY2MjE4RDc3REI3MDA5
QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPcGFxdWVSb290U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1OUY4OTM3
MTg5MUFEMzMwMEQ1Q0NEQyAvKiBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1NjMsNiArNDU2NSw3IEBACiAJCUJDRjYwNTEy
MEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFyZ0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTAw
RUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKdW1wVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0ZEOEM5MTBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEp1bXBUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCREI0QjVFMDk5Q0Q0QzFCQjNDMUNGMDUgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwMzI4MUUxOTgxOTc5RDAwODhC
NDk5IC8qIEN1c3RvbUdsb2JhbE9iamVjdENsYXNzVGVzdC5jICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmM7IG5hbWUgPSBDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYzsgcGF0aCA9IEFQSS90
ZXN0cy9DdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzIwMzI4MUYxOTgxOTc5RDAwODhCNDk5IC8qIEN1c3RvbUdsb2JhbE9iamVjdENs
YXNzVGVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21HbG9iYWxP
YmplY3RDbGFzc1Rlc3QuaDsgcGF0aCA9IEFQSS90ZXN0cy9DdXN0b21HbG9iYWxPYmplY3RDbGFz
c1Rlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwQkE5MkMxNkJCMUMxNTAw
QjNBRUEyIC8qIFN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ4NDAsOSArNDg0Myw2IEBACiAJCUZFRjA0MDUwMUFBRTY2MkQwMEJE
MjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9Db21w
YXJlQW5kU3dhcFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYwNDA1
MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rlc3Rz
L0NvbXBhcmVBbmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUZE
NkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk4QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxhdGVSZWdpc3RyeUtl
eVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRlbXBsYXRl
UmVnaXN0cnlLZXlUYWJsZS5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCREI0QjVFMDk5Q0Q0QzFCQjNDMUNGMDUg
LyogVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlL
ZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwOEZDMkYzN0FCNzY0ODNBOTk2
NjY4OEYgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oOyBwYXRoID0gVGVtcGxhdGVS
ZWdpc3RyeUtleVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJY
RmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KQEAgLTc1NjksMTQgKzc1NjksMTQgQEAKIAkJQUQyRkNCOEExREI1ODQw
MDAwQjNFNzM2IC8qIGpzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQlBRDQ5MzdDRDFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNl
bGwuY3BwICovLAotCQkJCUFENDkzN0NFMURERDI3RDkwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1
bmN0aW9uQ2VsbC5oICovLAogCQkJCUFENDkzN0M5MURERDI3MzQwMDc3QzgwNyAvKiBXZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcCAqLywKIAkJCQlBRDQ5MzdDQTFEREQyNzM0MDA3N0M4MDcgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oICovLAogCQkJCUFENDkzN0M1MUREQ0RDRjAwMDc3QzgwNyAvKiBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgKi8sCiAJCQkJQUQ0OTM3QzYxRERDRENGMDAwNzdD
ODA3IC8qIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmggKi8sCiAJCQkJQUQyRkNDMjYxREI4MzhD
NDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmNwcCAqLywKIAkJCQlBRDJGQ0MyNzFE
QjgzOEM0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlQcm90b3R5cGUuaCAqLywKKwkJCQk3OUU0MjNF
MDFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi8sCisJCQkJNzlF
NDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLywKIAkJCQlB
RDJGQ0JBNjFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5jcHAg
Ki8sCiAJCQkJQUQyRkNCQTcxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxl
RXJyb3IuaCAqLywKIAkJCQlBRDJGQ0JBODFEQjU4REE0MDBCM0U3MzYgLyogSlNXZWJBc3NlbWJs
eUluc3RhbmNlLmNwcCAqLywKQEAgLTc4NjksNiArNzg2OSw3IEBACiAJCQkJNjUxNEYyMTkxOEIz
RTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTEx
ODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3OUU0MjNFMzFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFRDBFMTZGNUNEMDBCMzQ0NjAgLyogQ2FsbERh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjRCMjdBMUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxs
RWRnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDA5LDcgKzgwMTAsNiBAQAogCQkJCTBGN0IyOTRE
MTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNTI5
QTRDMUM0NTdCNzUwMDBCNDlDNiAvKiBBUElVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
QTBBMzIxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuaCBpbiBIZWFkZXJzICovLAot
CQkJCUFENDkzN0QyMURERDI3REUwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MjVDQjAxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBh
dGhDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzhCMDE4MTdDRkU3NTUwMEIxNDRE
MyAvKiBERkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDRDMTExQzNF
MkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTAxMzUsNyArMTAxMzUsNiBAQAogCQkJCTE0ODJCNzRFMEE0MzAzMjgwMDUxN0NG
QyAvKiBKU1N0cmluZ1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZBQUIzODBCNjZBOTQ0
MDBFNTVGMTYgLyogSlNTdHJpbmdSZWZDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQw
QzE1N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBRDQ5MzdEMTFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNl
bGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQ0E2MDUxQUZEQkVBMjAwNDQ5NzM5IC8qIEpT
VGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZGQTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOTYzMDM5MUQ0MTkyQzYwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMTAxNTYsNiArMTAxNTUsNyBAQAogCQkJCUJDRkQ4QzkyMEVF
QjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2
NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0OEYyMUIwMTA3RUM1NDEwMDQyRUMyQyAvKiBMZXhlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OUU0MjNFMjFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNh
bGxlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyog
TGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFG
MDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUExQTA5NTFEOENC
MzQxMDA0QzJFQjggLyogRGVidWdnZXJQYXJzZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsx
ODMsNyBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCiAgICAgbW92ZSA0LCB0MwogCiAuY29w
eUhlYWRlckxvb3A6CisgICAgIyBDb3B5IHRoZSBDb2RlQmxvY2svQ2FsbGVlL0FyZ3VtZW50Q291
bnQvfHRoaXN8IGZyb20gcHJvdG9DYWxsRnJhbWUgaW50byB0aGUgY2FsbGVlIGZyYW1lLgogICAg
IHN1YmkgMSwgdDMKICAgICBsb2FkcSBbcHJvdG9DYWxsRnJhbWUsIHQzLCA4XSwgZXh0cmFUZW1w
UmVnCiAgICAgc3RvcmVxIGV4dHJhVGVtcFJlZywgQ29kZUJsb2NrW3NwLCB0MywgOF0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw3IEBACiAjaW5jbHVk
ZSAiSlNXZWFrTWFwLmgiCiAjaW5jbHVkZSAiSlNXZWFrU2V0LmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseS5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJK
U1dpdGhTY29wZS5oIgogI2luY2x1ZGUgIkxhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCIKICNp
bmNsdWRlICJMYXp5UHJvcGVydHlJbmxpbmVzLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsNyBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgZnVuY3Rpb25FeGVjdXRhYmxl
U3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25FeGVjdXRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIHdlYkFz
c2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2VtYmx5RXhlY3V0YWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHdlYkFzc2VtYmx5
Q2FsbGVlU3RydWN0dXJlLnNldCgqdGhpcywgSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2VuZGlmCiAgICAgbW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHJlZ0V4cFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIFJlZ0V4cDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpA
QCAtMjYwLDcgKzI2MSw2IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICAgICBmdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhp
cywgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKLSAgICB3ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMsIFdl
YkFzc2VtYmx5RnVuY3Rpb25DZWxsOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAjZW5kaWYKICAgICBoYXNoTWFwQnVja2V0U2V0U3RydWN0dXJlLnNldCgqdGhpcywgSGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBoYXNoTWFwQnVja2V0TWFwU3RydWN0dXJlLnNldCgqdGhpcywg
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNyArMzEwLDcgQEAgcHVibGljOgogICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNzZW1ibHlFeGVjdXRhYmxlU3RydWN0
dXJlOwotICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsU3RydWN0
dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q2FsbGVlU3RydWN0dXJlOwog
I2VuZGlmCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gbW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGVTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcmVnRXhwU3RydWN0dXJlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaAkocmV2aXNpb24gMjA5MjI5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vSlNXZWJBc3NlbWJseS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAj
aW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUNvbXBpbGVFcnJvci5oIgogI2luY2x1ZGUgImpzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlNZW1vcnku
aCIKQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJv
ckNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAianMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90
b3R5cGUuaCIKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgiCi0jaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCIKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUlu
c3RhbmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJqcy9XZWJBc3NlbWJseUluc3RhbmNlUHJv
dG90eXBlLmgiCiAjaW5jbHVkZSAianMvV2ViQXNzZW1ibHlNZW1vcnlDb25zdHJ1Y3Rvci5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNzaW9uVHlwZSBlbXB0eUV4cHJlc3Np
b24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRvcihNZW1vcnkqLCBQcm9jZWR1cmUmLCBW
ZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5saW5rZWRDYWxscyk7CisgICAgQjNJUkdlbmVyYXRvcihN
ZW1vcnkqLCBQcm9jZWR1cmUmLCBGdW5jdGlvbkNvbXBpbGF0aW9uKik7CiAKICAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7CiAgICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkTG9jYWwoVHlwZSwgdWludDMyX3QpOwpAQCAtMTg5
LDEwICsxODksMTAgQEAgcHJpdmF0ZToKICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW251bVR5cGVz
XTsKIH07CiAKLUIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnksIFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBWZWN0b3I8VW5saW5rZWRDYWxsPiYgdW5saW5rZWRDYWxscykK
K0IzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW1vcnksIFByb2NlZHVyZSYg
cHJvY2VkdXJlLCBGdW5jdGlvbkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbikKICAgICA6IG1fbWVt
b3J5KG1lbW9yeSkKICAgICAsIG1fcHJvYyhwcm9jZWR1cmUpCi0gICAgLCBtX3VubGlua2VkQ2Fs
bHModW5saW5rZWRDYWxscykKKyAgICAsIG1fdW5saW5rZWRDYWxscyhjb21waWxhdGlvbi0+dW5s
aW5rZWRDYWxscykKIHsKICAgICBtX2N1cnJlbnRCbG9jayA9IG1fcHJvYy5hZGRCbG9jaygpOwog
CkBAIC0yMTAsNiArMjEwLDQ0IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5
KiBtZW0KICAgICAgICAgfQogICAgIH0KIAorICAgIFBhdGNocG9pbnRWYWx1ZSogZ2V0Q2FsbGVl
UGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1
ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnJl
c3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOworICAgIGdldENhbGxlZVBh
dGNocG9pbnQtPmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgZ2V0Q2FsbGVlUGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdCA9IHBhcmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpE
YXRhTGFiZWxQdHIgbW92ZUxvY2F0aW9uID0gaml0Lm1vdmVXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdCk7CisgICAgICAgICAgICBqaXQuYWRk
TGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAg
Y29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZiht
b3ZlTG9jYXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgVmFsdWUq
IGZyYW1lUG9pbnRlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpGcmFtZVBvaW50ZXIsIE9yaWdpbigpKTsKKyAgICAvLyBGSVhNRTogaG93IGRvIHdl
IG1ha2Ugc3VyZSB0aGlzIHN0b3JlIGV4ZWN1dGVzIGJlZm9yZSBhbnkgb3RoZXIgc3RvcmVzIHRo
YXQKKyAgICAvLyBtaWdodCB0cmFwLiBJJ20gYXNzdW1pbmcgQjMgZ3VhcmFudGVlcyB0aGlzLCBi
dXQgSSBuZWVkIHRvIG1ha2Ugc3VyZS4KKyAgICBWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgT3JpZ2luKCksCisgICAg
ICAgIGdldENhbGxlZVBhdGNocG9pbnQsCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBPcmlnaW4oKSwgZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNh
bGxlZSkpOworCisgICAgVmFsdWUqIG9mZnNldE9mQ29kZUJsb2NrID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCksIENhbGxGcmFtZVNsb3Q6
OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikpOworICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgMCks
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBP
cmlnaW4oKSwgZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNvZGVCbG9jaykpOworCisKKyAgICAvKgor
ICAgIFBhdGNocG9pbnRWYWx1ZSogcHBwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6
UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBPcmlnaW4oKSk7CisgICAgcHBwLT5zZXRH
ZW5lcmF0b3IoCisgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFw
R2VuZXJhdGlvblBhcmFtcyYgKSB7CisgICAgICAgICAgICBqaXQucHJvYmUoWz1dIChNYWNyb0Fz
c2VtYmxlcjo6UHJvYmVDb250ZXh0KiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgRXhlY1N0
YXRlKiBleGVjID0gc3RhdGljX2Nhc3Q8RXhlY1N0YXRlKj4oY29udGV4dC0+Z3ByKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKSk7IAorICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiSW5zaWRl
IHdhc20gZnVuY3Rpb24sIGNhbGxlZTogIiwgUmF3UG9pbnRlcihleGVjLT5jYWxsZWUoKSkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICAqLworCisKICAgICBpZiAobV9t
ZW1vcnkpIHsKICAgICAgICAgbV9tZW1vcnlCYXNlR1BSID0gbV9tZW1vcnktPnBpbm5lZFJlZ2lz
dGVycygpLmJhc2VNZW1vcnlQb2ludGVyOwogICAgICAgICBtX3Byb2MucGluUmVnaXN0ZXIobV9t
ZW1vcnlCYXNlR1BSKTsKQEAgLTc0MSw3ICs3NzksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Db21waWxhdGlvbj4gcGFyCiAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1
bmN0aW9uQ29tcGlsYXRpb24+KCk7CiAKICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlOwotICAgIEIz
SVJHZW5lcmF0b3IgY29udGV4dChtZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LT51bmxpbmtlZENh
bGxzKTsKKyAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQobWVtb3J5LCBwcm9jZWR1cmUsIHJlc3Vs
dC5nZXQoKSk7CiAgICAgRnVuY3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRl
eHQsIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9ucyk7
CiAgICAgaWYgKCFwYXJzZXIucGFyc2UoKSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJl
dmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSw3IEBAIHN0cnVjdCBVbmxpbmtlZENhbGwg
ewogCiBzdHJ1Y3QgRnVuY3Rpb25Db21waWxhdGlvbiB7CiAgICAgVmVjdG9yPFVubGlua2VkQ2Fs
bD4gdW5saW5rZWRDYWxsczsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgY2FsbGVlTW92
ZUxvY2F0aW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvZGU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4ganNFbnRyeVBvaW50OwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJldmlzaW9uIDIwOTIy
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNiArMjksOSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1
ZGUgIkIzQ29tcGlsYXRpb24uaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5j
bHVkZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCkBAIC0xMTAsNiArMTEzLDIxIEBAIHZvaWQg
UGxhbjo6cnVuKCkKICAgICBtX2ZhaWxlZCA9IGZhbHNlOwogfQogCit2b2lkIFBsYW46OmluaXRp
YWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHN0ZDo6ZnVuY3Rpb248
dm9pZCh1bnNpZ25lZCwgSlNXZWJBc3NlbWJseUNhbGxlZSopPiBjYWxsYmFjaykKK3sKKyAgICBB
U1NFUlQoIWZhaWxlZCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21waWxl
ZEZ1bmN0aW9ucy5zaXplKCk7IGkrKykgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RnVuY3Rp
b25Db21waWxhdGlvbj4mIGNvbXBpbGF0aW9uID0gbV9jb21waWxlZEZ1bmN0aW9uc1tpXTsKKyAg
ICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbiA9IGNvbXBp
bGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb247CisgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IGNhbGxlZSA9IEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZShnbG9iYWxPYmplY3QtPnZtKCks
IFdURk1vdmUoY29tcGlsYXRpb24pKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIoY2FsbGVlTW92ZUxvY2F0aW9uLCBjYWxsZWUpOworCisgICAgICAgIGRhdGFMb2dM
bigiTWFkZSBjYWxsZWU6ICIsIFJhd1BvaW50ZXIoY2FsbGVlKSk7CisgICAgICAgIGNhbGxiYWNr
KGksIGNhbGxlZSk7CisgICAgfQorfQorCiBQbGFuOjp+UGxhbigpIHsgfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5o
CShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMywxMyBAQAogI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2Jh
bE9iamVjdDsKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CisKK25hbWVzcGFjZSBXYXNtIHsK
KwogY2xhc3MgTWVtb3J5OwogCiBjbGFzcyBQbGFuIHsKQEAgLTQ0LDYgKzUwLDggQEAgcHVibGlj
OgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW4oKTsKIAorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgaW5pdGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQodW5zaWduZWQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4pOworCiAgICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gZmFpbGVkKCkgY29uc3QgeyByZXR1cm4gbV9mYWlsZWQ7IH0KICAg
ICBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSgpIGNvbnN0CiAgICAgewpAQCAtNzEsMTEgKzc5
LDYgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZmFpbGVkKCkpOwogICAgICAg
ICByZXR1cm4gbV9jb21waWxlZEZ1bmN0aW9ucy5hdChpKS5nZXQoKTsKICAgICB9Ci0gICAgQ29t
cGlsZWRGdW5jdGlvbnMmIGdldENvbXBpbGVkRnVuY3Rpb25zKCkKLSAgICB7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvbXBpbGVkRnVuY3Rp
b25zOwotICAgIH0KIAogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3Jt
YXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlDYWxsZWUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBK
U1dlYkFzc2VtYmx5Q2FsbGVlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUNhbGxlZSIsIG51bGxw
dHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseUNhbGxlZSkgfTsKKworSlNX
ZWJBc3NlbWJseUNhbGxlZTo6SlNXZWJBc3NlbWJseUNhbGxlZShWTSYgdm0pCisgICAgOiBCYXNl
KHZtLCB2bS53ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5nZXQoKSkKK3sgfQorCit2b2lkIEpT
V2ViQXNzZW1ibHlDYWxsZWU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgc3RkOjp1bmlxdWVfcHRy
PFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+JiYgY29tcGlsYXRpb24pCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgbV9jb2RlID0gV1RGTW92ZShjb21waWxhdGlvbi0+
Y29kZSk7CisgICAgbV9qc0VudHJ5UG9pbnQgPSBXVEZNb3ZlKGNvbXBpbGF0aW9uLT5qc0VudHJ5
UG9pbnQpOworfQorCit2b2lkIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQoreworICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNX
ZWJBc3NlbWJseUNhbGxlZSo+KGNlbGwpOworICAgIHRoaXNPYmplY3QtPkpTV2ViQXNzZW1ibHlD
YWxsZWU6On5KU1dlYkFzc2VtYmx5Q2FsbGVlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQorCisjaW5jbHVkZSAiSlNDYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlIDogcHVibGljIEpT
Q2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVj
dHVyZUlzSW1tb3J0YWw7CisKKyAgICBzdGF0aWMgSlNXZWJBc3NlbWJseUNhbGxlZSogY3JlYXRl
KFZNJiB2bSwgc3RkOjp1bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+JiYgY29t
cGlsYXRpb24pCisgICAgeworICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5Q2FsbGVlPih2bS5oZWFwKSkg
SlNXZWJBc3NlbWJseUNhbGxlZSh2bSk7CisgICAgICAgIGNhbGxlZS0+ZmluaXNoQ3JlYXRpb24o
dm0sIFdURk1vdmUoY29tcGlsYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlZTsKKyAgICB9
CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkgCisgICAgeworICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVj
dGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKworICAgIHZv
aWQqIGpzRW50cnlQb2ludCgpIHsgcmV0dXJuIG1fanNFbnRyeVBvaW50LT5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsgfQorCitwcml2YXRlOgorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4mJik7CisgICAgSlNX
ZWJBc3NlbWJseUNhbGxlZShWTSYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxh
dGlvbj4gbV9jb2RlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IG1fanNF
bnRyeVBvaW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDE1ICsyOSwxOSBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAj
aW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU1dlYkFzc2VtYmx5
TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxl
SW5mb3JtYXRpb24sIFdhc206OkNvbXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucywg
U3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKQorY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Lk1vZHVsZSIsICZCYXNlOjpzX2lu
Zm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3NlbWJseU1vZHVsZSkgfTsK
KworSlNXZWJBc3NlbWJseU1vZHVsZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZv
cm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0aW9uLAorICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1i
b2xUYWJsZSwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiB7Ci0gICAgYXV0byogaW5zdGFuY2UgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5TW9kdWxlPih2bS5oZWFwKSkg
SlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBtb2R1bGVJbmZvcm1hdGlvbiwgY29t
cGlsZWRGdW5jdGlvbnMpOworICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUoY2Fs
bGVlQ291bnQpKSkgSlNXZWJBc3NlbWJseU1vZHVsZSh2bSwgc3RydWN0dXJlLCBtb2R1bGVJbmZv
cm1hdGlvbiwgY2FsbGVlQ291bnQpOwogICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwg
ZXhwb3J0U3ltYm9sVGFibGUpOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KQEAgLTQ3LDExICs1
MSwxMiBAQCBTdHJ1Y3R1cmUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZVN0CiAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogfQogCi1KU1dlYkFzc2Vt
Ymx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9y
bWF0aW9uLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYgY29tcGlsZWRGdW5jdGlvbnMpCitKU1dl
YkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVs
ZUluZm9ybWF0aW9uLCB1bnNpZ25lZCBjYWxsZWVDb3VudCkKICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKICAgICAsIG1fbW9kdWxlSW5mb3JtYXRpb24oV1RGTW92ZShtb2R1bGVJbmZvcm1hdGlv
bikpCi0gICAgLCBtX2NvbXBpbGVkRnVuY3Rpb25zKFdURk1vdmUoY29tcGlsZWRGdW5jdGlvbnMp
KQorICAgICwgbV9jYWxsZWVDb3VudChjYWxsZWVDb3VudCkKIHsKKyAgICBtZW1zZXQoY2FsbGVl
cygpLCAwLCBtX2NhbGxlZUNvdW50ICogc2l6ZW9mKFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5
Q2FsbGVlPikpOwogfQogCiB2b2lkIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKQpAQCAtNzMsMTAgKzc4LDEy
IEBAIHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbigKIAogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fZXhwb3J0U3ltYm9sVGFibGUpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0aGlzT2JqZWN0LT5tX2NhbGxlZUNvdW50OyBpKyspIHsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWUgPSAmdGhpc09iamVjdC0+Y2FsbGVl
cygpW2ldOworICAgICAgICB2aXNpdG9yLmFwcGVuZChjYWxsZWUpOworICAgIH0KIH0KIAotY29u
c3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlNb2R1bGU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5
Lk1vZHVsZSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNXZWJBc3Nl
bWJseU1vZHVsZSkgfTsKLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5TW9kdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDMwICszMyw1NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIFdhc20g
eworc3RydWN0IFNpZ25hdHVyZTsKK307CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBj
bGFzcyBTeW1ib2xUYWJsZTsKIAogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZSA6IHB1YmxpYyBK
U0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJs
ZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShW
TSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4m
LCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYsIFN5bWJvbFRhYmxlKik7CisgICAgc3RhdGljIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mLCBTeW1ib2xUYWJsZSogZXhwb3J0cywgdW5zaWdu
ZWQgY2FsbGVlQ291bnQpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87CiAKICAg
ICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24oKSBjb25z
dCB7IHJldHVybiAqbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQotICAgIGNvbnN0IFdhc206
OkNvbXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29tcGlsZWRGdW5jdGlvbnM7IH0KICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUo
KSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9CiAKKyAgICBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUodW5zaWduZWQgY2FsbGVlSW5kZXgpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOworICAgICAg
ICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICBXcml0
ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qPihi
aXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOworICAgIH0KKwog
cHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6
OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiwgV2FzbTo6Q29tcGlsZWRGdW5j
dGlvbnMmKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYsIHVuc2lnbmVkIGNhbGxlZUNvdW50
KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3ltYm9sVGFibGUqKTsKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwogcHJpdmF0ZToKKyAgICBzdGF0aWMgc2l6ZV90IG9m
ZnNldE9mQ2FsbGVlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihzaXplb2Yo
SlNXZWJBc3NlbWJseU1vZHVsZSkpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUodW5zaWduZWQgbnVtQ2FsbGVlcykKKyAgICB7CisgICAgICAgIHJldHVybiBvZmZz
ZXRPZkNhbGxlZXMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4p
ICogbnVtQ2FsbGVlczsKKyAgICB9CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxl
SW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247Ci0gICAgV2FzbTo6Q29tcGlsZWRGdW5j
dGlvbnMgbV9jb21waWxlZEZ1bmN0aW9uczsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+
IG1fZXhwb3J0U3ltYm9sVGFibGU7CisgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwOTIyOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTIgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgor
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5
SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIlByb3RvQ2Fs
bEZyYW1lLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCi0jaW5j
bHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTQ1LDE0ICs0NSwxMiBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlGdW5jdGlvbjo6c19p
CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3NlbWJseUZ1
bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogY2FsbGVlID0ganNEeW5hbWljQ2Fz
dDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7Ci0gICAgaWYgKCFjYWxs
ZWUpCisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2Fz
dDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CisgICAgaWYgKCF3YXNt
RnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24o
ZXhlYywgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiZXhwZWN0ZWQgYSBXZWJBc3NlbWJs
eSBmdW5jdGlvbiIsIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZShl
eGVjLT5qc0NhbGxlZSgpKSkpKTsKLSAgICBjb25zdCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rp
b24mIGNhbGxhYmxlID0gY2FsbGVlLT53ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCgpLT5mdW5jdGlv
bigpOwotICAgIGNvbnN0IEIzOjpDb21waWxhdGlvbioganNFbnRyeVBvaW50ID0gY2FsbGFibGUu
anNFbnRyeVBvaW50OwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gY2Fs
bGFibGUuc2lnbmF0dXJlOworICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0g
d2FzbUZ1bmN0aW9uLT5zaWduYXR1cmUoKTsKIAogICAgIC8vIEZJWE1FIGlzIHRoaXMgdGhlIHJp
Z2h0IGJlaGF2aW9yPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0
ODc2CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSBzaWduYXR1cmUtPmFyZ3VtZW50
cy5zaXplKCkpCkBAIC05Myw5ICs5MSwxNCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsCiAgICAgfQogCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7
Ci0gICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBjYWxsZWUsIGZpcnN0QXJndW1lbnQs
IGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB3YXNt
Q2FsbGVlID0gd2FzbUZ1bmN0aW9uLT53ZWJBc3NlbWJseUNhbGxlZSgpOworICAgIC8vIE5vdGU6
IHdlIHNwZWNpZmljYWxseSB1c2UgdGhlIFdlYkFzc2VibHlGdW5jdGlvbiBhcyB0aGUgY2FsbGVl
IHRvIGJlZ2luIHdpdGggaW4gdGhlIFByb3RvQ2FsbEZyYW1lLgorICAgIC8vIFRoZSByZWFzb24g
Zm9yIHRoaXMgaXMgdGhhdCBjYWxsaW5nIGludG8gdGhlIGxsaW50IG1heSBzdGFjayBvdmVyZmxv
dywgYW5kIHRoZSBzdGFjayBvdmVyZmxvdworICAgIC8vIGhhbmRsZXIgbWlnaHQgcmVhZCB0aGUg
Z2xvYmFsIG9iamVjdCBmcm9tIHRoZSBjYWxsZWUuIFRoZSBKU1dlYkFzc2VtYmx5Q2FsbGVlIGRv
ZXNuJ3QgaGF2ZSBhCisgICAgLy8gZ2xvYmFsIG9iamVjdCwgYnV0IHRoZSBXZWJBc3NlbWJseUZ1
bmN0aW9uIGRvZXMuCisgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCB3YXNtRnVuY3Rp
b24sIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKICAgICAKLSAgICBF
bmNvZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKGpzRW50cnlQb2ludC0+Y29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksICZ2bSwgJnByb3RvQ2FsbEZyYW1lKTsKKyAgICBFbmNv
ZGVkSlNWYWx1ZSByYXdSZXN1bHQgPSB2bUVudHJ5VG9XYXNtKHdhc21DYWxsZWUtPmpzRW50cnlQ
b2ludCgpLCAmdm0sICZwcm90b0NhbGxGcmFtZSk7CiAgICAgLy8gRklYTUUgaXMgdGhpcyBjb3Jy
ZWN0PyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODc2CiAgICAg
c3dpdGNoIChzaWduYXR1cmUtPnJldHVyblR5cGUpIHsKICAgICBjYXNlIFdhc206OlZvaWQ6CkBA
IC0xMTYsMTMgKzExOSwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
YWxsCiAgICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rp
b24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSwgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYgY2FsbGFi
bGUpCitXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0
IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3Nl
bWJseUNhbGxlZSogY2FsbGVlLCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKIHsKICAgICBO
YXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJB
c3NlbWJseUZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0
b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKiBmdW5jdGlv
bkNlbGwgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbDo6Y3JlYXRlKHZtLCBXVEZNb3ZlKGNhbGxh
YmxlKSk7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPndlYkFzc2Vt
Ymx5RnVuY3Rpb25TdHJ1Y3R1cmUoKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
biA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhl
YXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0g
ICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUs
IGluc3RhbmNlLCBmdW5jdGlvbkNlbGwpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2
bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwgY2FsbGVlLCBzaWduYXR1cmUp
OwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KIApAQCAtMTQzLDE1ICsxNDUsMTYgQEAgdm9pZCBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2lu
c3RhbmNlKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9mdW5jdGlvbkNlbGwp
OworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dhc21DYWxsZWUpOwogfQogCi12
b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCogZnVu
Y3Rpb25DZWxsKQordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtQ2FsbGVlLCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKICAg
ICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgbV9pbnN0YW5jZS5zZXQodm0sIHRoaXMs
IGluc3RhbmNlKTsKLSAgICBtX2Z1bmN0aW9uQ2VsbC5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uQ2Vs
bCk7CisgICAgbV93YXNtQ2FsbGVlLnNldCh2bSwgdGhpcywgd2FzbUNhbGxlZSk7CisgICAgbV9z
aWduYXR1cmUgPSBzaWduYXR1cmU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
aAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBXZWJBc3NlbWJseUZ1
bmN0aW9uQ2VsbDsKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBjbGFzcyBXZWJBc3NlbWJs
eUluc3RhbmNlOwogCiBuYW1lc3BhY2UgQjMgewpAQCAtNDQsMjIgKzQ0LDYgQEAgbmFtZXNwYWNl
IFdhc20gewogc3RydWN0IFNpZ25hdHVyZTsKIH0KIAotY2xhc3MgQ2FsbGFibGVXZWJBc3NlbWJs
eUZ1bmN0aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWxsYWJsZVdlYkFzc2VtYmx5
RnVuY3Rpb24pOwotICAgIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbigpID0gZGVsZXRlOwot
Ci1wdWJsaWM6Ci0gICAgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uKENhbGxhYmxlV2ViQXNz
ZW1ibHlGdW5jdGlvbiYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBjb25zdCBCMzo6Q29tcGlsYXRpb24q
IGpzRW50cnlQb2ludDsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZTsKLSAg
ICBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24oY29uc3QgQjM6OkNvbXBpbGF0aW9uKiBqc0Vu
dHJ5UG9pbnQsIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKQotICAgICAgICA6IGpz
RW50cnlQb2ludChqc0VudHJ5UG9pbnQpCi0gICAgICAgICwgc2lnbmF0dXJlKHNpZ25hdHVyZSkK
LSAgICB7Ci0gICAgfQotfTsKLQogY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbiA6IHB1YmxpYyBK
U0Z1bmN0aW9uIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKQEAgLTY4
LDIxICs1MiwyOCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgaW50LCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqLCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mJik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEpTV2Vi
QXNzZW1ibHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAg
Y29uc3QgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIHdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKCkg
Y29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkNlbGwuZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiB3ZWJBc3NlbWJseUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUNhbGxlZS5n
ZXQoKTsgfQorICAgIGNvbnN0IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UoKSBjb25z
dCB7IHJldHVybiBtX2luc3RhbmNlLmdldCgpOyB9CisgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJl
KiBzaWduYXR1cmUoKQorICAgIHsgCisgICAgICAgIEFTU0VSVChtX3NpZ25hdHVyZSk7CisgICAg
ICAgIHJldHVybiBtX3NpZ25hdHVyZTsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIGludCBsZW5ndGgsIGNvbnN0IFN0
cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2ViQXNzZW1ibHlGdW5jdGlvbkNl
bGwqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlKik7CiAKIHByaXZhdGU6CiAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7
CiAKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwot
ICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbD4gbV9mdW5jdGlvbkNlbGw7
CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fd2FzbUNhbGxlZTsKKyAg
ICBXYXNtOjpTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
Q2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVu
Y3Rpb25DZWxsLmgiCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25zdCBDbGFzc0luZm8gV2ViQXNzZW1i
bHlGdW5jdGlvbkNlbGw6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5RnVuY3Rpb25DZWxsIiwgbnVs
bHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUZ1bmN0aW9uQ2Vs
bCkgfTsKLQotV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxs
OjpjcmVhdGUoVk0mIHZtLCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mJiBjYWxsYWJsZSkK
LXsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCogbmF0aXZlRnVuY3Rpb24gPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbD4odm0uaGVhcCkpIFdl
YkFzc2VtYmx5RnVuY3Rpb25DZWxsKHZtLCBXVEZNb3ZlKGNhbGxhYmxlKSk7Ci0gICAgbmF0aXZl
RnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICByZXR1cm4gbmF0aXZlRnVuY3Rpb247
Ci19Ci0KLVdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsOjpXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbChW
TSYgdm0sIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmIGNhbGxhYmxlKQotICAgIDogQmFz
ZSh2bSwgdm0ud2ViQXNzZW1ibHlGdW5jdGlvbkNlbGxTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBt
X2Z1bmN0aW9uKFdURk1vdmUoY2FsbGFibGUpKQotewotfQotCi12b2lkIFdlYkFzc2VtYmx5RnVu
Y3Rpb25DZWxsOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uQ2VsbCogbmF0aXZlRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9u
Q2VsbCo+KGNlbGwpOwotICAgIG5hdGl2ZUZ1bmN0aW9uLT5XZWJBc3NlbWJseUZ1bmN0aW9uQ2Vs
bDo6fldlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKCk7Ci19Ci0KLVN0cnVjdHVyZSogV2ViQXNzZW1i
bHlGdW5jdGlvbkNlbGw6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJB
U1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
RnVuY3Rpb25DZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaAkobm9uZXhp
c3RlbnQpCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQot
I2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsIDogcHVibGlj
IEpTQ2VsbCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0
cnVjdHVyZUlzSW1tb3J0YWw7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IHRydWU7Ci0KLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIGNyZWF0ZShW
TSYsIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmKTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBj
b25zdCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mIGZ1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9mdW5jdGlvbjsgfQotCi1wcml2YXRlOgotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxs
KFZNJiwgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYpOwotCi0gICAgQ2FsbGFibGVXZWJB
c3NlbWJseUZ1bmN0aW9uIG1fZnVuY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlDYWxsZWUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCiAjaW5j
bHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCkBA
IC01Myw3ICs1NCw3IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnUK
IAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3Nl
bWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIGF1dG8mIHZtID0gc3RhdGUtPnZt
KCk7CisgICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIEpTVmFsdWUgdmFsID0gc3RhdGUtPmFyZ3VtZW50KDApOwog
CkBAIC04Nyw3ICs4OCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBj
b25zCiAgICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBl
eHAuZmllbGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TW9kdWxlOjpj
cmVhdGUodm0sIHN0cnVjdHVyZSwgcGxhbi5nZXRNb2R1bGVJbmZvcm1hdGlvbigpLCBwbGFuLmdl
dENvbXBpbGVkRnVuY3Rpb25zKCksIGV4cG9ydFN5bWJvbFRhYmxlKSk7CisgICAgdW5zaWduZWQg
Y2FsbGVlQ291bnQgPSBwbGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpOworICAgIEpTV2ViQXNz
ZW1ibHlNb2R1bGUqIHJlc3VsdCA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3Ry
dWN0dXJlLCBwbGFuLmdldE1vZHVsZUluZm9ybWF0aW9uKCksIGV4cG9ydFN5bWJvbFRhYmxlLCBj
YWxsZWVDb3VudCk7CisgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhzdGF0ZS0+anNDYWxsZWUo
KS0+Z2xvYmFsT2JqZWN0KCksIAorICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBK
U1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpIHsKKyAgICAgICAgICAgIHJlc3VsdC0+Y2FsbGVl
cygpW2NhbGxlZUluZGV4XS5zZXQodm0sIHJlc3VsdCwgY2FsbGVlKTsKKyAgICAgICAgfSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0
YXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDYgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6bGluayhFeGVjUwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCk7CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxl
SW5mb3JtYXRpb24gPSBpbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0g
ICAgY29uc3QgV2FzbTo6Q29tcGlsZWRGdW5jdGlvbnMmIGNvbXBpbGVkRnVuY3Rpb25zID0gaW5z
dGFuY2UtPm1vZHVsZSgpLT5jb21waWxlZEZ1bmN0aW9ucygpOwogICAgIFN5bWJvbFRhYmxlKiBl
eHBvcnRTeW1ib2xUYWJsZSA9IGluc3RhbmNlLT5tb2R1bGUoKS0+ZXhwb3J0U3ltYm9sVGFibGUo
KTsKIAogICAgIC8vIEZJWE1FIHdpcmUgdXAgdGhlIGltcG9ydHMuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUxMTgKQEAgLTEyNCwxMCArMTIzLDkgQEAgdm9pZCBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAgLy8gICAgIGEu
IExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRlZCBm
cm9tIGMuCiAgICAgICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8gZnVuY3MuCiAgICAg
ICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICBjb25zdCBXYXNtOjpG
dW5jdGlvbkNvbXBpbGF0aW9uKiBjb21waWxlZEZ1bmN0aW9uID0gY29tcGlsZWRGdW5jdGlvbnMu
YXQoZXhwLmZ1bmN0aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgY29uc3QgQjM6OkNvbXBp
bGF0aW9uKiBqc0VudHJ5UG9pbnQgPSBjb21waWxlZEZ1bmN0aW9uLT5qc0VudHJ5UG9pbnQuZ2V0
KCk7Ci0gICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVs
ZUluZm9ybWF0aW9uLmZ1bmN0aW9ucy5hdChleHAuZnVuY3Rpb25JbmRleCkuc2lnbmF0dXJlOwot
ICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6
ZSgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVu
Y3Rpb24oanNFbnRyeVBvaW50LCBzaWduYXR1cmUpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIHdhc21DYWxsZWUgPSBpbnN0YW5jZS0+bW9kdWxlKCktPmNhbGxlZShleHAuZnVu
Y3Rpb25JbmRleCk7CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1v
ZHVsZUluZm9ybWF0aW9uLmZ1bmN0aW9ucy5hdChleHAuZnVuY3Rpb25JbmRleCkuc2lnbmF0dXJl
OworICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMu
c2l6ZSgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCB3YXNtQ2FsbGVlLCBzaWduYXR1
cmUpOwogICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295985</attachid>
            <date>2016-12-02 12:55:46 -0800</date>
            <delta_ts>2016-12-04 13:22:47 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>65049</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5MjU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDczIEBA
CisyMDE2LTEyLTAyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlIHNob3VsZCBoYXZlIGEgV2FzbSBjYWxsZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBKU1dlYkFzc2VtYmx5Q2FsbGVl
IGFuZCBzdG9yZXMgaXQgaW50byB0aGUKKyAgICAgICAgY2FsbGVlIHNsb3QgaW4gdGhlIGNhbGwg
ZnJhbWUgYXMgcGFydCBvZiB0aGUgcHJvbG9ndWUgb2YgYQorICAgICAgICB3YXNtIGZ1bmN0aW9u
LiBUaGlzIGlzIHRoZSBmaXJzdCBzdGVwIGluIGltcGxlbWVudGluZworICAgICAgICB1bndpbmRp
bmcgZnJvbS90aHJvdWdoIHdhc20gZnJhbWVzLiBXZSB3aWxsIHVzZSB0aGUgY2FsbGVlCisgICAg
ICAgIHRvIGlkZW50aWZ5IHRoYXQgYSBtYWNoaW5lIGZyYW1lIGJlbG9uZ3MgdG8gd2FzbSBjb2Rl
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAo
Y2FsbFdhc21GdW5jdGlvbik6CisgICAgICAgIChmdW5jdGlvblRlc3RXYXNtTW9kdWxlRnVuY3Rp
b25zKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAg
ICAgKiB3YXNtL0pTV2ViQXNzZW1ibHkuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2Fz
bS9XYXNtRm9ybWF0Lmg6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OlBsYW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNtL1dhc21Q
bGFuLmg6CisgICAgICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBpbGVkRnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpXYXNtOjpQbGFuOjpnZXRDb21waWxlZEZ1bmN0aW9ucyk6IERlbGV0ZWQuCisg
ICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlDYWxsZWU6OkpTV2ViQXNzZW1ibHlDYWxsZWUpOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlDYWxsZWU6OmRlc3Ryb3kpOgorICAgICAgICAqIHdhc20vanMvSlNX
ZWJBc3NlbWJseUNhbGxlZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNh
bGxlZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRl
U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6anNFbnRyeVBv
aW50KToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwOgorICAgICAg
ICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNX
ZWJBc3NlbWJseU1vZHVsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogd2FzbS9qcy9KU1dl
YkFzc2VtYmx5TW9kdWxlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om1v
ZHVsZUluZm9ybWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y2Fs
bGVlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y2FsbGVlcyk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om9mZnNldE9mQ2FsbGVlcyk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y29tcGlsZWRGdW5jdGlvbnMpOiBEZWxldGVkLgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNh
bGxXZWJBc3NlbWJseUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6d2ViQXNzZW1ibHlDYWxsZWUpOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUZ1bmN0aW9uOjppbnN0YW5jZSk6CisgICAgICAgIChKU0M6OldlYkFzc2Vt
Ymx5RnVuY3Rpb246OnNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6OkNhbGxhYmxlV2ViQXNzZW1i
bHlGdW5jdGlvbjo6Q2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6d2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwpOiBE
ZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorCiAyMDE2LTEyLTAyICBKRiBCYXN0aWVuICA8
amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJBc3NlbWJseTogcmV2ZXJ0IHBhdGNo
IGNhdXNpbmcgb2RkIGJyZWFrYWdlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkwNSw2ICs5MDUsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfU09VUkNFUwogICAgIHdhc20vV2FzbVBsYW4uY3BwCiAgICAgd2FzbS9XYXNtVmFsaWRhdGUu
Y3BwCiAKKyAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCiAgICAgd2FzbS9qcy9K
U1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmNwcAogICAgIHdhc20vanMvSlNXZWJBc3NlbWJseU1lbW9yeS5jcHAKQEAgLTkxNCw3
ICs5MTUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHdhc20vanMvV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5jcHAKLSAgICB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmNwcAogICAgIHdhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMvV2ViQXNz
ZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5TWVtb3J5
Q29uc3RydWN0b3IuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMjA5MjI5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDYgKzUzLDcgQEAKICNpbmNsdWRlICJKU1Byb3h5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIK
ICNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxl
ZS5oIgogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAj
aW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKQEAgLTI1MzksNyArMjU0MCw3IEBAIHN0YXRp
YyBKU1ZhbHVlIGJveChFeGVjU3RhdGUqIGV4ZWMsIFZNJiAKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZGVjb2RlKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOwogfQogCi1z
dGF0aWMgSlNWYWx1ZSBjYWxsV2FzbUZ1bmN0aW9uKFZNKiB2bSwgY29uc3QgQjM6OkNvbXBpbGF0
aW9uJiBjb2RlLCBWZWN0b3I8SlNWYWx1ZT4mIGJveGVkQXJncykKK3N0YXRpYyBKU1ZhbHVlIGNh
bGxXYXNtRnVuY3Rpb24oVk0qIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiB3YXNtQ2FsbGVlLCBWZWN0b3I8SlNWYWx1ZT4mIGJveGVkQXJncykK
IHsKICAgICBKU1ZhbHVlIGZpcnN0QXJndW1lbnQ7CiAgICAgaW50IGFyZ0NvdW50ID0gMTsKQEAg
LTI1NTIsOSArMjU1Myw5IEBAIHN0YXRpYyBKU1ZhbHVlIGNhbGxXYXNtRnVuY3Rpb24oVk0qIHZt
LCAKICAgICB9CiAKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKLSAgICBwcm90
b0NhbGxGcmFtZS5pbml0KG51bGxwdHIsIG51bGxwdHIsIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50
LCByZW1haW5pbmdBcmdzKTsKKyAgICBwcm90b0NhbGxGcmFtZS5pbml0KG51bGxwdHIsIGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpLT5qc0NhbGxlZSgpLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3Vu
dCwgcmVtYWluaW5nQXJncyk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlU
b1dhc20oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdm0sICZwcm90b0NhbGxGcmFt
ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvV2FzbSh3YXNtQ2FsbGVl
LT5qc0VudHJ5UG9pbnQoKSwgdm0sICZwcm90b0NhbGxGcmFtZSkpOwogfQogCiAvLyB0ZXN0V2Fz
bU1vZHVsZShKU0FycmF5QnVmZmVyVmlldyBzb3VyY2UsIG51bWJlciBmdW5jdGlvbkNvdW50LCAu
Li5bW1dhc21WYWx1ZSwgW1dhc21WYWx1ZV1dXSkgd2hlcmUgdGhlIGl0aCBjb3B5IG9mIFtbcmVz
dWx0LCBbYXJnc11dXSBpcyBhIGxpc3QKQEAgLTI1ODMsOSArMjU4NCwxOCBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jCiAgICAgaWYgKHBsYW4uY29tcGlsZWRGdW5j
dGlvbkNvdW50KCkgIT0gZnVuY3Rpb25Db3VudCkKICAgICAgICAgQ1JBU0goKTsKIAorICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxlZXM7CisgICAgeworICAgICAgICB1bnNpZ25lZCBsYXN0
SW5kZXggPSBVSU5UX01BWDsKKyAgICAgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCksCisgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUlu
ZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUpIHsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghY2FsbGVlSW5kZXggfHwgKGNhbGxlZUluZGV4IC0gMSA9PSBsYXN0SW5kZXgp
KTsKKyAgICAgICAgICAgICAgICBjYWxsZWVzLmFwcGVuZChjYWxsZWUpOworICAgICAgICAgICAg
ICAgIGxhc3RJbmRleCA9IGNhbGxlZUluZGV4OworICAgICAgICAgICAgfSk7CisgICAgfQorCiAg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGZ1bmN0aW9uQ291bnQ7ICsraSkgewotICAgICAg
ICBpZiAoIXBsYW4uY29tcGlsZWRGdW5jdGlvbihpKSkKLSAgICAgICAgICAgIGRhdGFMb2dMbigi
ZmFpbGVkIHRvIGNvbXBpbGUgZnVuY3Rpb24gYXQgaW5kZXgiLCBpKTsKIAogICAgICAgICBKU0Fy
cmF5KiB0ZXN0Q2FzZXMgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPmFyZ3VtZW50KGkgKyAyKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgdGVzdENh
c2VzLT5sZW5ndGgoKTsgKyt0ZXN0SW5kZXgpIHsKQEAgLTI1OTcsNyArMjYwNyw3IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYXJnSW5kZXggPSAwOyBhcmdJbmRleCA8IGFyZ3VtZW50cy0+bGVuZ3RoKCk7ICsrYXJn
SW5kZXgpCiAgICAgICAgICAgICAgICAgYm94ZWRBcmdzLmFwcGVuZChib3goZXhlYywgdm0sIGFy
Z3VtZW50cy0+Z2V0SW5kZXhRdWlja2x5KGFyZ0luZGV4KSkpOwogCi0gICAgICAgICAgICBKU1Zh
bHVlIGNhbGxSZXN1bHQgPSBjYWxsV2FzbUZ1bmN0aW9uKCZ2bSwgKnBsYW4uY29tcGlsZWRGdW5j
dGlvbihpKS0+anNFbnRyeVBvaW50LCBib3hlZEFyZ3MpOworICAgICAgICAgICAgSlNWYWx1ZSBj
YWxsUmVzdWx0ID0gY2FsbFdhc21GdW5jdGlvbigmdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSwganNDYXN0PEpTV2ViQXNzZW1ibHlDYWxsZWUqPihjYWxsZWVzLmF0KGkpKSwgYm94ZWRB
cmdzKTsKICAgICAgICAgICAgIEpTVmFsdWUgZXhwZWN0ZWQgPSBib3goZXhlYywgdm0sIHJlc3Vs
dCk7CiAgICAgICAgICAgICBpZiAoY2FsbFJlc3VsdCAhPSBleHBlY3RlZCkgewogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkFyZ3VtZW50czogIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEx
OTksNiArMTE5OSw3IEBACiAJCTE0RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxl
T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
RjcyNTY0MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEY5NzQ0NzEzOEM4NTNFMDBE
QTFDNjcgLyogSGVhcFJvb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNEY5NzQ0NjEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RWaXNp
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MUEyOEQ0QTgxNzdCNzFDODAwMDdGQTNDIC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEyOEQ0QTcxNzdCNzFDODAw
MDdGQTNDIC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTFBODgyNkIxNjUzQzRDRDFBNjQyOTgzQiAvKiBUZW1w
bGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOEI0N0YyMzQzNjZDNEI3MkFDODUyQTdFIC8qIFRlbXBsYXRlUmVnaXN0
cnlLZXlUYWJsZS5jcHAgKi87IH07CiAJCTFBQ0Y3Mzc3MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFr
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQ0Y3
Mzc2MTcxQ0E2RkIwMEM5QkIxRSAvKiBXZWFrLmNwcCAqLzsgfTsKIAkJMjYwMEI1QTYxNTJCQUFB
NzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmlu
Z0pvaW5lci5jcHAgKi87IH07CiAJCTI2MDBCNUE3MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmlu
Z0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi87IH07CkBAIC0x
Mzk5LDYgKzE0MDAsNyBAQAogCQk3MEVDQTYwOTFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVS
ZWdpc3RyeUtleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzBFQ0E2MDQxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MkFBRjdDRDFE
MEQzMUIzMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBRjdDQjFEMEQzMThC
MDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgKi87IH07CiAJCTcy
QUFGN0NFMUQwRDMxQjMwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFBRjdDQzFE
MEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oICovOyB9Owor
CQk3ODI3NEQ4RTRDNEQ0RkNEOUExREM2RTYgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCREI0QjVFMDk5Q0Q0
QzFCQjNDMUNGMDUgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgKi87IH07CiAJCTc5MDVCQjY4
MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8qIElu
bGluZUFjY2Vzcy5jcHAgKi87IH07CiAJCTc5MDVCQjY5MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxp
bmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTE2MERCRDFDOEUzRUM4MDA4
QzA4NUEgLyogUHJveHlSZXZva2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzkxNjBEQkIxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNw
cCAqLzsgfTsKQEAgLTE0MzEsNiArMTQzMyw4IEBACiAJCTc5RDVDRDVBMUMxMTA2QTkwMENFQ0Ew
NyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5RDVDRDU4MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2Zp
bGVyLmNwcCAqLzsgfTsKIAkJNzlENUNENUIxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJv
ZmlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlERkNCREIxRDg4QzU5NjAw
NTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Q
cm9wZXJ0eUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzlFNDIzRTIxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFNDIz
RTAxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwICovOyB9OworCQk3
OUU0MjNFMzFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlFNDIzRTExREVFNjUzMjAw
NzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFy
aWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVu
dC5jcHAgKi87IH07CiAJCTc5RUUwQzAwMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmly
b25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUVFMEJGRTFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5RjhGQzFFMUI5RkVE
MEYwMENBNjZBQiAvKiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUY4RkMxQzFCOUZFRDBGMDBD
QTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTU0
Niw2ICsxNTUwLDcgQEAKIAkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5n
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDNG
RUEwRTZBNzJDMDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzMzA0MDJDMEU2QTc2NDAwMDc4NkU2QSAv
KiBTbWFsbFN0cmluZ3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTMzMDNGRTgwRTZBNzJCNTAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5jcHAgKi87
IH07CiAJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2Vy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzQ1
QTg3MTJEODM4QzQwMDMwMkJFMyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCAqLzsgfTsK
KwkJOTVENDI2MUFGNEM4NENFMkFDQkFDOTgxIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhGQzJGMzdB
Qjc2NDgzQTk5NjY2ODhGIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTk2MDA5N0E2MEVCQUJCNTgw
MDdBNzI5NyAvKiBMYWJlbFNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NjAwOTdBNTBFQkFCQjU4MDA3QTcyOTcgLyogTGFiZWxTY29wZS5oICov
OyB9OwogCQk5Njg4Q0IxNTBFRDEyQjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5Njg4Q0IxMzBFRDEy
QjRFMDAxRDY0OUYgLyogQXNzZW1ibGVyQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTY4OENCMTYwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4
NkFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTY4OENCMTQwRUQxMkI0RTAwMUQ2NDlGIC8qIFg4NkFzc2VtYmxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMDA1LDggKzIwMTAsNiBA
QAogCQlBRDQ5MzdDNDFEREJFNjE0MDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNvcmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkzN0MyMURE
QkU2MEEwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENDkzN0M3MURERDBBQUUwMDc3Qzgw
NyAvKiBXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDNTFERENEQ0YwMDA3N0M4MDcgLyogV2ViQXNz
ZW1ibHlNb2R1bGVSZWNvcmQuY3BwICovOyB9OwogCQlBRDQ5MzdDODFEREQwQUFFMDA3N0M4MDcg
LyogV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkzN0M2MUREQ0RDRjAwMDc3QzgwNyAvKiBXZWJBc3NlbWJs
eU1vZHVsZVJlY29yZC5oICovOyB9OwotCQlBRDQ5MzdEMTFEREQyN0RFMDA3N0M4MDcgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQUQ0OTM3Q0QxREREMjdEOTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVu
Y3Rpb25DZWxsLmNwcCAqLzsgfTsKLQkJQUQ0OTM3RDIxREREMjdERTAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb25DZWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBRDQ5MzdDRTFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlv
bkNlbGwuaCAqLzsgfTsKIAkJQUQ0OTM3RDMxREREMjdERTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5
RnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUQ0OTM3QzkxREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uY3BwICov
OyB9OwogCQlBRDQ5MzdENDFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3Q0Ex
REREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAqLzsgfTsKIAkJQUQ4NkE5
M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAv
KiBXZWFrR0NNYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTIzMzgsOSArMjM0MSw2IEBACiAJCUZFRDk0RjJGMTcxRTNFMjMwMEJF
NzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVEOTRGMkMxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkVGMDQwNTExQUFFNjYy
RDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUYwNDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29t
cGFyZUFuZFN3YXBUZXN0LmNwcCAqLzsgfTsKIAkJRkVGRDZGQzYxRDVFNzk5MjAwOEYyRjBCIC8q
IEpTU3RyaW5nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBODgyNkIx
NjUzQzRDRDFBNjQyOTgzQiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEI0N0YyMzQzNjZDNEI3MkFD
ODUyQTdFIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAgKi87IH07Ci0JCTc4Mjc0RDhF
NEM0RDRGQ0Q5QTFEQzZFNiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJEQjRCNUUwOTlDRDRDMUJCM0MxQ0Yw
NSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCAqLzsgfTsKLQkJOTVENDI2MUFGNEM4NENFMkFD
QkFDOTgxIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhGQzJGMzdBQjc2NDgzQTk5NjY2ODhGIC8qIFRl
bXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KQEAgLTI0OTMsNiArMjQ5Myw3IEBA
CiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCQkwMDBCRUFGMERGNjA0
NDgxQUY2QUI2OEMgLyogTW9kdWxlU2NvcGVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1vZHVsZVNjb3BlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwOEZDMkYzN0FCNzY0ODNBOTk2NjY4OEYgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjAxMjMzMDE5NDRFQTFCMDA4NDNB
MEMgLyogREZHVmFsdWVTdHJlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdWYWx1ZVN0cmVuZ3RoLmNwcDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVN0cmVuZ3Ro
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwMTIzMzExOTQ0RUExQjAwODQz
QTBDIC8qIERGR1ZhbHVlU3RyZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHVmFsdWVTdHJlbmd0aC5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlU3RyZW5ndGguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwMzMyQkYxOEFERkFFMTAwNUY5NzlBIC8qIEV4
aXRpbmdKSVRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4
aXRpbmdKSVRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NTcsNiAr
Mzg1OCw4IEBACiAJCTc5RDVDRDU4MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nUHJvZmls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUQ1Q0Q1OTFDMTEwNkE5MDBD
RUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTYW1wbGluZ1Byb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc093blByb3BlcnR5Q2FjaGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlFNDIzRTAxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNX
ZWJBc3NlbWJseUNhbGxlZS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1IC8q
IEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SlNXZWJBc3NlbWJseUNhbGxlZS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyog
VmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWYXJpYWJsZUVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZH
TWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTM5ODQsNiArMzk4Nyw3IEBACiAJCTg2Rjc1RUZEMTUxQzA2MkYwMDdDOUJBMyAv
KiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVnRXhwTWF0Y2hlc0FycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODZGQTlFOEYxNDJCQkIyRDAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0JvdW5kRnVuY3Rpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkZBOUU5MDE0MkJCQjJFMDAxNzczQjcgLyogSlNC
b3VuZEZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQm91bmRG
dW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4QjQ3RjIzNDM2NkM0Qjcy
QUM4NTJBN0UgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThCOUY2RDU1MUQ1OTEyRkEwMDFDNzM5RiAvKiBJdGVy
YXRpb25LaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdGlvbktp
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0IxMjNBNDBDMjAwRDQy
MkYzIC8qIE1lbW9yeVN0YXRpc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWVtb3J5U3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTkwMjEzRTNDMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lbW9yeVN0YXRpc3RpY3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NzcsOCArNDQ4MSw2IEBACiAJCUFENDkzN0M2MUREQ0RD
RjAwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oOyBwYXRoID0ganMvV2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0
OTM3QzkxREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA7IHBh
dGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbi5oOyBw
YXRoID0ganMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlBRDQ5MzdDRDFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5j
dGlvbkNlbGwuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDQ5MzdDRTFEREQyN0Q5MDA3N0M4MDcgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbkNlbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5RnVuY3Rpb25D
ZWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEODZBOTNEMUFBNEQ4N0MwMDJG
RTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtHQ01hcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQURE
QjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZEluc3RydWN0
aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTYzLDYgKzQ1NjUs
NyBAQAogCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBcmdMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRkQ4QzkwMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnVtcFRhYmxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRDhDOTEwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKdW1wVGFibGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkRCNEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRl
UmVnaXN0cnlLZXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVt
cGxhdGVSZWdpc3RyeUtleS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMDMy
ODFFMTk4MTk3OUQwMDg4QjQ5OSAvKiBDdXN0b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuYyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0
LmM7IHBhdGggPSBBUEkvdGVzdHMvQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0LmM7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMDMyODFGMTk4MTk3OUQwMDg4QjQ5OSAvKiBDdXN0
b21HbG9iYWxPYmplY3RDbGFzc1Rlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQ3VzdG9tR2xvYmFsT2JqZWN0Q2xhc3NUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ3VzdG9t
R2xvYmFsT2JqZWN0Q2xhc3NUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
MEJBOTJDMTZCQjFDMTUwMEIzQUVBMiAvKiBTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODQwLDkgKzQ4NDMsNiBAQAogCQlGRUYw
NDA1MDFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5jcHA7IHBhdGgg
PSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRkVGMDQwNTIxQUFFQzRFRDAwQkQyOEIwIC8qIENvbXBhcmVBbmRTd2FwVGVzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDb21wYXJlQW5kU3dhcFRlc3QuaDsg
cGF0aCA9IEFQSS90ZXN0cy9Db21wYXJlQW5kU3dhcFRlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkVGRDZGQzUxRDVFNzk3MDAwOEYyRjBCIC8qIEpTU3RyaW5nSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0cmluZ0lubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEI0N0YyMzQzNjZDNEI3MkFDODUyQTdFIC8qIFRl
bXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkRCNEI1RTA5
OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVGVtcGxhdGVSZWdpc3RyeUtleS5jcHA7IHBhdGggPSBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDhG
QzJGMzdBQjc2NDgzQTk5NjY2ODhGIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaDsg
cGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhG
cmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC03NTY5LDE0ICs3NTY5LDE0IEBACiAJ
CUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBqcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQUQ0OTM3Q0QxREREMjdEOTAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb25DZWxsLmNwcCAqLywKLQkJCQlBRDQ5MzdDRTFEREQyN0Q5MDA3N0M4MDcg
LyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3
N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjcz
NDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAqLywKIAkJCQlBRDQ5MzdDNTFERENE
Q0YwMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwICovLAogCQkJCUFENDkz
N0M2MUREQ0RDRjAwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5oICovLAogCQkJ
CUFEMkZDQzI2MURCODM4QzQwMEIzRTczNiAvKiBXZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgKi8s
CiAJCQkJQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmgg
Ki8sCisJCQkJNzlFNDIzRTAxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUu
Y3BwICovLAorCQkJCTc5RTQyM0UxMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2Fs
bGVlLmggKi8sCiAJCQkJQUQyRkNCQTYxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlD
b21waWxlRXJyb3IuY3BwICovLAogCQkJCUFEMkZDQkE3MURCNThEQTQwMEIzRTczNiAvKiBKU1dl
YkFzc2VtYmx5Q29tcGlsZUVycm9yLmggKi8sCiAJCQkJQUQyRkNCQTgxREI1OERBNDAwQjNFNzM2
IC8qIEpTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAgKi8sCkBAIC03ODY5LDYgKzc4NjksNyBAQAog
CQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzlFNDIzRTMxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1i
bHlDYWxsZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAv
KiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAw
QjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3QTFBNzk1N0Iy
MDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtODAwOSw3ICs4MDEwLDYg
QEAKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MzUyOUE0QzFDNDU3Qjc1MDAwQjQ5QzYgLyogQVBJVXRpbHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlBRDQ5MzdEMjFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbkNlbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzI1Q0IwMUM1MDZEM0IwMEFE
OTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAx
ODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAvKiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMTM1LDcgKzEwMTM1LDYgQEAKIAkJCQkxNDgyQjc0
RTBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJpbmdSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ2QUFCMzgwQjY2QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5nUmVmQ0YuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQUQ0OTM3RDExREREMjdERTAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb25DZWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUNBNjA1MUFGREJF
QTIwMDQ0OTczOSAvKiBKU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk2MzAzOTFENDE5MkM2MDA1NjA5RDkgLyogQWxsb2Nh
dG9yQXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMTU2LDYgKzEwMTU1LDcgQEAK
IAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyog
TGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzlFNDIzRTIxREVFNjUzMjAwNzhEMzU1IC8q
IEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkx
NEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVB
NkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTVBMUEwOTUxRDhDQjM0MTAwNEMyRUI4IC8qIERlYnVnZ2VyUGFyc2VEYXRhLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC0xODMsNiArMTgzLDcgQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIG1v
dmUgNCwgdDMKIAogLmNvcHlIZWFkZXJMb29wOgorICAgICMgQ29weSB0aGUgQ29kZUJsb2NrL0Nh
bGxlZS9Bcmd1bWVudENvdW50L3x0aGlzfCBmcm9tIHByb3RvQ2FsbEZyYW1lIGludG8gdGhlIGNh
bGxlZSBmcmFtZS4KICAgICBzdWJpIDEsIHQzCiAgICAgbG9hZHEgW3Byb3RvQ2FsbEZyYW1lLCB0
MywgOF0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3JlcSBleHRyYVRlbXBSZWcsIENvZGVCbG9ja1tz
cCwgdDMsIDhdCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsx
MTcsNyBAQAogI2luY2x1ZGUgIkpTV2Vha01hcC5oIgogI2luY2x1ZGUgIkpTV2Vha1NldC5oIgog
I2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVl
LmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKICNpbmNsdWRlICJMYXp5Q2xhc3NTdHJ1Y3R1
cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGF6eVByb3BlcnR5SW5saW5lcy5oIgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNiAr
MjMwLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGZ1
bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKICAgICB3ZWJBc3NlbWJseUV4ZWN1dGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJB
c3NlbWJseUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
KyAgICB3ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlD
YWxsZWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNlbmRpZgogICAg
IG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgTW9kdWxlUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBy
ZWdFeHBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBSZWdFeHA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKQEAgLTI2MCw3ICsyNjEsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0
cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgd2ViQXNzZW1ibHlGdW5jdGlvbkNlbGxTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogI2VuZGlmCiAgICAgaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgaGFzaE1hcEJ1Y2tldE1hcFN0cnVj
dHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDcgKzMxMCw3IEBAIHB1Ymxp
YzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5
RXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUZ1
bmN0aW9uQ2VsbFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNh
bGxlZVN0cnVjdHVyZTsKICNlbmRpZgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IG1vZHVsZVByb2dy
YW1FeGVjdXRhYmxlU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0cnVj
dHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgJ
KHJldmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNz
ZW1ibHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAianMvSlNXZWJBc3Nl
bWJseUNhbGxlZS5oIgogI2luY2x1ZGUgImpzL0pTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIK
ICNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJqcy9KU1dl
YkFzc2VtYmx5TWVtb3J5LmgiCkBAIC0zNyw3ICszOCw2IEBACiAjaW5jbHVkZSAianMvV2ViQXNz
ZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAianMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmgiCiAjaW5jbHVkZSAi
anMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAianMvV2ViQXNz
ZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5TWVtb3J5
Q29uc3RydWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5
LDcgKzEyOSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5
cGUgZW1wdHlFeHByZXNzaW9uID0gbnVsbHB0cjsKIAotICAgIEIzSVJHZW5lcmF0b3IoTWVtb3J5
KiwgUHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2VkQ2FsbD4mIHVubGlua2VkQ2FsbHMpOworICAg
IEIzSVJHZW5lcmF0b3IoTWVtb3J5KiwgUHJvY2VkdXJlJiwgRnVuY3Rpb25Db21waWxhdGlvbiop
OwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFZlY3Rv
cjxUeXBlPiYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVp
bnQzMl90KTsKQEAgLTE4OSwxMCArMTg5LDEwIEBAIHByaXZhdGU6CiAgICAgVmFsdWUqIG1femVy
b1ZhbHVlc1tudW1UeXBlc107CiB9OwogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1l
bW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgVmVjdG9yPFVubGlua2VkQ2FsbD4m
IHVubGlua2VkQ2FsbHMpCitCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1lbW9yeSogbWVt
b3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgRnVuY3Rpb25Db21waWxhdGlvbiogY29tcGlsYXRp
b24pCiAgICAgOiBtX21lbW9yeShtZW1vcnkpCiAgICAgLCBtX3Byb2MocHJvY2VkdXJlKQotICAg
ICwgbV91bmxpbmtlZENhbGxzKHVubGlua2VkQ2FsbHMpCisgICAgLCBtX3VubGlua2VkQ2FsbHMo
Y29tcGlsYXRpb24tPnVubGlua2VkQ2FsbHMpCiB7CiAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3By
b2MuYWRkQmxvY2soKTsKIApAQCAtMjEwLDYgKzIxMCwzNiBAQCBCM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKE1lbW9yeSogbWVtCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBQYXRjaHBvaW50
VmFsdWUqIGdldENhbGxlZVBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIz
OjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpKTsKKyAgICBnZXRDYWxs
ZWVQYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjsK
KyAgICBnZXRDYWxsZWVQYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAg
IGdldENhbGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RGF0YUxhYmVsUHRyIG1vdmVMb2NhdGlvbiA9IGppdC5tb3ZlV2l0aFBh
dGNoKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHQpOworICAg
ICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3ZlTG9jYXRpb24gPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2YobW92ZUxvY2F0aW9uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKworICAgIFZhbHVlKiBmcmFtZVBvaW50ZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBPcmlnaW4oKSk7CisgICAgLy8g
RklYTUU6IGhvdyBkbyB3ZSBtYWtlIHN1cmUgdGhpcyBzdG9yZSBleGVjdXRlcyBiZWZvcmUgYW55
IG90aGVyIHN0b3JlcyB0aGF0CisgICAgLy8gbWlnaHQgdHJhcC4gSSdtIGFzc3VtaW5nIEIzIGd1
YXJhbnRlZXMgdGhpcywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUuCisgICAgVmFsdWUqIG9mZnNl
dE9mQ2FsbGVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHNpemVvZihSZWdpc3RlcikpOwor
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUs
IE9yaWdpbigpLAorICAgICAgICBnZXRDYWxsZWVQYXRjaHBvaW50LAorICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgT3JpZ2luKCksIGZyYW1lUG9p
bnRlciwgb2Zmc2V0T2ZDYWxsZWUpKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2
ZSB0byBzdG9yZSB6ZXJvIGludG8gdGhlIENvZGVCbG9jayogc3BvdCBpbiB0aGUgY2FsbCBmcmFt
ZSwKKyAgICAvLyBidXQgdGhlcmUgYXJlIHBsYWNlcyB0aGF0IGludGVycHJldCBub24tbnVsbCBD
b2RlQmxvY2sgc2xvdCB0byBtZWFuIGEgdmFsaWQgQ29kZUJsb2NrLgorICAgIC8vIFdoZW4gZG9p
bmcgdW53aW5kaW5nLCB3ZSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBlbnRpcmUgcnVudGlt
ZSBpcyBPSyB3aXRoIGEgbm9uLW51bGwKKyAgICAvLyBDb2RlQmxvY2sgbm90IGltcGx5aW5nIHRo
YXQgdGhlIENvZGVCbG9jayBpcyB2YWxpZC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgVmFsdWUqIG9mZnNldE9mQ29kZUJsb2NrID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
IENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayAqIHNpemVvZihSZWdpc3RlcikpOworICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUsIE9yaWdpbigp
LAorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4obV9wcm9j
LCBPcmlnaW4oKSwgMCksCisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQWRkLCBPcmlnaW4oKSwgZnJhbWVQb2ludGVyLCBvZmZzZXRPZkNvZGVCbG9jaykp
OworCiAgICAgaWYgKG1fbWVtb3J5KSB7CiAgICAgICAgIG1fbWVtb3J5QmFzZUdQUiA9IG1fbWVt
b3J5LT5waW5uZWRSZWdpc3RlcnMoKS5iYXNlTWVtb3J5UG9pbnRlcjsKICAgICAgICAgbV9wcm9j
LnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7CkBAIC03NDEsNyArNzcxLDcgQEAgc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcgogICAgIGF1dG8gcmVzdWx0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxGdW5jdGlvbkNvbXBpbGF0aW9uPigpOwogCiAgICAgUHJvY2VkdXJlIHBy
b2NlZHVyZTsKLSAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQobWVtb3J5LCBwcm9jZWR1cmUsIHJl
c3VsdC0+dW5saW5rZWRDYWxscyk7CisgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwg
cHJvY2VkdXJlLCByZXN1bHQuZ2V0KCkpOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0
b3I+IHBhcnNlcihjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0
dXJlLCBmdW5jdGlvbnMpOwogICAgIGlmICghcGFyc2VyLnBhcnNlKCkpCiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsNyBAQCBzdHJ1
Y3QgVW5saW5rZWRDYWxsIHsKIAogc3RydWN0IEZ1bmN0aW9uQ29tcGlsYXRpb24gewogICAgIFZl
Y3RvcjxVbmxpbmtlZENhbGw+IHVubGlua2VkQ2FsbHM7CisgICAgQ29kZUxvY2F0aW9uRGF0YUxh
YmVsUHRyIGNhbGxlZU1vdmVMb2NhdGlvbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBp
bGF0aW9uPiBjb2RlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGpzRW50
cnlQb2ludDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3Bw
CShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxh
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAKICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJs
eUNhbGxlZS5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgpAQCAtMTEwLDYg
KzExMywyMyBAQCB2b2lkIFBsYW46OnJ1bigpCiAgICAgbV9mYWlsZWQgPSBmYWxzZTsKIH0KIAor
dm9pZCBQbGFuOjppbml0aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQodW5zaWduZWQsIEpTV2ViQXNzZW1ibHlDYWxsZWUqKT4gY2Fs
bGJhY2spCit7CisgICAgQVNTRVJUKCFmYWlsZWQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fY29tcGlsZWRGdW5jdGlvbnMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPEZ1bmN0aW9uQ29tcGlsYXRpb24+JiBjb21waWxhdGlvbiA9IG1fY29tcGlsZWRG
dW5jdGlvbnNbaV07CisgICAgICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBjYWxsZWVNb3Zl
TG9jYXRpb24gPSBjb21waWxhdGlvbi0+Y2FsbGVlTW92ZUxvY2F0aW9uOworICAgICAgICBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUgPSBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpjcmVhdGUoZ2xv
YmFsT2JqZWN0LT52bSgpLCBXVEZNb3ZlKGNvbXBpbGF0aW9uKSk7CisKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKGNhbGxlZU1vdmVMb2NhdGlvbiwgY2FsbGVlKTsKKwor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2dMbigiTWFkZSBXYXNtIGNh
bGxlZTogIiwgUmF3UG9pbnRlcihjYWxsZWUpKTsKKworICAgICAgICBjYWxsYmFjayhpLCBjYWxs
ZWUpOworICAgIH0KK30KKwogUGxhbjo6flBsYW4oKSB7IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAkocmV2aXNp
b24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsMTMgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgV2FzbSB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxPYmplY3Q7
CitjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOworCituYW1lc3BhY2UgV2FzbSB7CisKIGNsYXNz
IE1lbW9yeTsKIAogY2xhc3MgUGxhbiB7CkBAIC00NCw2ICs1MCw4IEBAIHB1YmxpYzoKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuKCk7CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGluaXRpYWxpemVDYWxsZWVzKEpTR2xvYmFsT2JqZWN0Kiwgc3RkOjpmdW5jdGlvbjx2b2lk
KHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKik+KTsKKwogICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmFpbGVkOyB9CiAgICAgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UoKSBjb25zdAogICAgIHsKQEAgLTcxLDExICs3OSw2IEBAIHB1
YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZhaWxlZCgpKTsKICAgICAgICAgcmV0dXJu
IG1fY29tcGlsZWRGdW5jdGlvbnMuYXQoaSkuZ2V0KCk7CiAgICAgfQotICAgIENvbXBpbGVkRnVu
Y3Rpb25zJiBnZXRDb21waWxlZEZ1bmN0aW9ucygpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZmFpbGVkKCkpOwotICAgICAgICByZXR1cm4gbV9jb21waWxlZEZ1bmN0aW9uczsKLSAg
ICB9CiAKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBt
X21vZHVsZUluZm9ybWF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5Q2FsbGVlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3Nl
bWJseUNhbGxlZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlDYWxsZWUiLCBudWxscHRyLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlDYWxsZWUpIH07CisKK0pTV2ViQXNzZW1i
bHlDYWxsZWU6OkpTV2ViQXNzZW1ibHlDYWxsZWUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0u
d2ViQXNzZW1ibHlDYWxsZWVTdHJ1Y3R1cmUuZ2V0KCkpCit7IH0KKwordm9pZCBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpG
dW5jdGlvbkNvbXBpbGF0aW9uPiYmIGNvbXBpbGF0aW9uKQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKworICAgIG1fY29kZSA9IFdURk1vdmUoY29tcGlsYXRpb24tPmNvZGUpOwor
ICAgIG1fanNFbnRyeVBvaW50ID0gV1RGTW92ZShjb21waWxhdGlvbi0+anNFbnRyeVBvaW50KTsK
K30KKwordm9pZCBKU1dlYkFzc2VtYmx5Q2FsbGVlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTV2ViQXNzZW1i
bHlDYWxsZWUqPihjZWxsKTsKKyAgICB0aGlzT2JqZWN0LT5KU1dlYkFzc2VtYmx5Q2FsbGVlOjp+
SlNXZWJBc3NlbWJseUNhbGxlZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKwor
I2luY2x1ZGUgIkpTQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgSlNXZWJBc3NlbWJseUNhbGxlZSA6IHB1YmxpYyBKU0NlbGwgewor
cHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOworCisgICAgc3RhdGljIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNyZWF0ZShWTSYgdm0s
IHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPiYmIGNvbXBpbGF0aW9u
KQorICAgIHsKKyAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogY2FsbGVlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseUNhbGxlZT4odm0uaGVhcCkpIEpTV2ViQXNz
ZW1ibHlDYWxsZWUodm0pOworICAgICAgICBjYWxsZWUtPmZpbmlzaENyZWF0aW9uKHZtLCBXVEZN
b3ZlKGNvbXBpbGF0aW9uKSk7CisgICAgICAgIHJldHVybiBjYWxsZWU7CisgICAgfQorCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpIAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
Q2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICB2b2lkKiBqc0Vu
dHJ5UG9pbnQoKSB7IHJldHVybiBtX2pzRW50cnlQb2ludC0+Y29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgc3RkOjp1
bmlxdWVfcHRyPFdhc206OkZ1bmN0aW9uQ29tcGlsYXRpb24+JiYpOworICAgIEpTV2ViQXNzZW1i
bHlDYWxsZWUoVk0mKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IG1f
Y29kZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBtX2pzRW50cnlQb2lu
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5jcHAJKHJldmlzaW9uIDIwOTIyOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSwxNSArMjksMTkgQEAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxlZS5oIgogI2luY2x1ZGUg
Ildhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNXZWJBc3NlbWJseU1vZHVsZSog
SlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mIG1vZHVsZUluZm9ybWF0
aW9uLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYgY29tcGlsZWRGdW5jdGlvbnMsIFN5bWJvbFRh
YmxlKiBleHBvcnRTeW1ib2xUYWJsZSkKK2NvbnN0IENsYXNzSW5mbyBKU1dlYkFzc2VtYmx5TW9k
dWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1bGUpIH07CisKK0pTV2Vi
QXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+
JiBtb2R1bGVJbmZvcm1hdGlvbiwKKyAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9sVGFibGUs
IHVuc2lnbmVkIGNhbGxlZUNvdW50KQogewotICAgIGF1dG8qIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNXZWJBc3NlbWJseU1vZHVsZT4odm0uaGVhcCkpIEpTV2ViQXNz
ZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRpb24sIGNvbXBpbGVkRnVu
Y3Rpb25zKTsKKyAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXAsIGFsbG9jYXRpb25TaXplKGNhbGxlZUNvdW50
KSkpIEpTV2ViQXNzZW1ibHlNb2R1bGUodm0sIHN0cnVjdHVyZSwgbW9kdWxlSW5mb3JtYXRpb24s
IGNhbGxlZUNvdW50KTsKICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIGV4cG9ydFN5
bWJvbFRhYmxlKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC00NywxMSArNTEsMTIgQEAg
U3RydWN0dXJlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGVTdAogICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVj
dFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKIH0KIAotSlNXZWJBc3NlbWJseU1vZHVs
ZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6
OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiBtb2R1bGVJbmZvcm1hdGlvbiwg
V2FzbTo6Q29tcGlsZWRGdW5jdGlvbnMmIGNvbXBpbGVkRnVuY3Rpb25zKQorSlNXZWJBc3NlbWJs
eU1vZHVsZTo6SlNXZWJBc3NlbWJseU1vZHVsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiBtb2R1bGVJbmZvcm1h
dGlvbiwgdW5zaWduZWQgY2FsbGVlQ291bnQpCiAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAg
ICAgLCBtX21vZHVsZUluZm9ybWF0aW9uKFdURk1vdmUobW9kdWxlSW5mb3JtYXRpb24pKQotICAg
ICwgbV9jb21waWxlZEZ1bmN0aW9ucyhXVEZNb3ZlKGNvbXBpbGVkRnVuY3Rpb25zKSkKKyAgICAs
IG1fY2FsbGVlQ291bnQoY2FsbGVlQ291bnQpCiB7CisgICAgbWVtc2V0KGNhbGxlZXMoKSwgMCwg
bV9jYWxsZWVDb3VudCAqIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4p
KTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TW9kdWxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xUYWJsZSkKQEAgLTczLDEwICs3OCwxMiBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlNb2R1bGU6OnZpc2l0Q2hpbGRyZW4oCiAKICAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2V4cG9ydFN5bWJvbFRhYmxlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dGhpc09iamVjdC0+bV9jYWxsZWVDb3VudDsgaSsrKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q2FsbGVlPiogY2FsbGVlID0gJnRoaXNPYmplY3QtPmNhbGxlZXMoKVtpXTsK
KyAgICAgICAgdmlzaXRvci5hcHBlbmQoY2FsbGVlKTsKKyAgICB9CiB9CiAKLWNvbnN0IENsYXNz
SW5mbyBKU1dlYkFzc2VtYmx5TW9kdWxlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseS5Nb2R1bGUi
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTV2ViQXNzZW1ibHlNb2R1
bGUpIH07Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1v
ZHVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlNb2R1bGUuaAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywz
MCArMzMsNTIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxs
ZWU7CiBjbGFzcyBTeW1ib2xUYWJsZTsKIAogY2xhc3MgSlNXZWJBc3NlbWJseU1vZHVsZSA6IHB1
YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0Rlc3Ry
dWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNy
ZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5pcXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1h
dGlvbj4mLCBXYXNtOjpDb21waWxlZEZ1bmN0aW9ucyYsIFN5bWJvbFRhYmxlKik7CisgICAgc3Rh
dGljIEpTV2ViQXNzZW1ibHlNb2R1bGUqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5p
cXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mLCBTeW1ib2xUYWJsZSogZXhwb3J0cywg
dW5zaWduZWQgY2FsbGVlQ291bnQpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBERUNMQVJFX0lORk87
CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24o
KSBjb25zdCB7IHJldHVybiAqbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKTsgfQotICAgIGNvbnN0
IFdhc206OkNvbXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fY29tcGlsZWRGdW5jdGlvbnM7IH0KICAgICBTeW1ib2xUYWJsZSogZXhwb3J0U3ltYm9s
VGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4cG9ydFN5bWJvbFRhYmxlLmdldCgpOyB9CiAKKyAg
ICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjYWxsZWUodW5zaWduZWQgY2FsbGVlSW5kZXgpCisgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVJbmRleCA8IG1fY2FsbGVlQ291bnQpOwor
ICAgICAgICByZXR1cm4gY2FsbGVlcygpW2NhbGxlZUluZGV4XS5nZXQoKTsKKyAgICB9CisKKyAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4qIGNhbGxlZXMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxl
ZT4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb2Zmc2V0T2ZDYWxsZWVzKCkpOworICAg
IH0KKwogcHJvdGVjdGVkOgotICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mLCBTdHJ1Y3R1cmUq
LCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiwgV2FzbTo6Q29tcGls
ZWRGdW5jdGlvbnMmKTsKKyAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwg
c3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYsIHVuc2lnbmVkIGNhbGxl
ZUNvdW50KTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgU3ltYm9sVGFibGUqKTsKICAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwogcHJpdmF0ZToKKyAgICBzdGF0aWMgc2l6
ZV90IG9mZnNldE9mQ2FsbGVlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyb3VuZFVw
VG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNhbGxlZT4pPihz
aXplb2YoSlNXZWJBc3NlbWJseU1vZHVsZSkpOworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3Qg
YWxsb2NhdGlvblNpemUodW5zaWduZWQgbnVtQ2FsbGVlcykKKyAgICB7CisgICAgICAgIHJldHVy
biBvZmZzZXRPZkNhbGxlZXMoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUNh
bGxlZT4pICogbnVtQ2FsbGVlczsKKyAgICB9CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6
TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRpb247Ci0gICAgV2FzbTo6Q29tcGls
ZWRGdW5jdGlvbnMgbV9jb21waWxlZEZ1bmN0aW9uczsKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9s
VGFibGU+IG1fZXhwb3J0U3ltYm9sVGFibGU7CisgICAgdW5zaWduZWQgbV9jYWxsZWVDb3VudDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIwOTIy
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTIgQEAKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbklubGluZXMuaCIKICNpbmNsdWRlICJKU09iamVj
dC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIlBy
b3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0Lmgi
Ci0jaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTQ1LDE0ICs0NSwxMiBAQCBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlGdW5jdGlv
bjo6c19pCiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxXZWJBc3Nl
bWJseUZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogY2FsbGVlID0ganNEeW5h
bWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7Ci0gICAgaWYg
KCFjYWxsZWUpCisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2FzbUZ1bmN0aW9uID0ganNEeW5h
bWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CisgICAgaWYg
KCF3YXNtRnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNl
cHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiZXhwZWN0ZWQgYSBXZWJB
c3NlbWJseSBmdW5jdGlvbiIsIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JW
YWx1ZShleGVjLT5qc0NhbGxlZSgpKSkpKTsKLSAgICBjb25zdCBDYWxsYWJsZVdlYkFzc2VtYmx5
RnVuY3Rpb24mIGNhbGxhYmxlID0gY2FsbGVlLT53ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCgpLT5m
dW5jdGlvbigpOwotICAgIGNvbnN0IEIzOjpDb21waWxhdGlvbioganNFbnRyeVBvaW50ID0gY2Fs
bGFibGUuanNFbnRyeVBvaW50OwotICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJl
ID0gY2FsbGFibGUuc2lnbmF0dXJlOworICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0
dXJlID0gd2FzbUZ1bmN0aW9uLT5zaWduYXR1cmUoKTsKIAogICAgIC8vIEZJWE1FIGlzIHRoaXMg
dGhlIHJpZ2h0IGJlaGF2aW9yPyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0ODc2CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSBzaWduYXR1cmUtPmFy
Z3VtZW50cy5zaXplKCkpCkBAIC05MiwxMCArOTAsMTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY2FsbAogICAgICAgICBhcmdDb3VudCA9IGJveGVkQXJncy5zaXplKCk7
CiAgICAgfQogCisgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNhbGx5IHVzZSB0aGUgV2ViQXNzZWJs
eUZ1bmN0aW9uIGFzIHRoZSBjYWxsZWUgdG8gYmVnaW4gd2l0aCBpbiB0aGUgUHJvdG9DYWxsRnJh
bWUuCisgICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IGNhbGxpbmcgaW50byB0aGUg
bGxpbnQgbWF5IHN0YWNrIG92ZXJmbG93LCBhbmQgdGhlIHN0YWNrIG92ZXJmbG93CisgICAgLy8g
aGFuZGxlciBtaWdodCByZWFkIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20gdGhlIGNhbGxlZS4gVGhl
IEpTV2ViQXNzZW1ibHlDYWxsZWUgZG9lc24ndCBoYXZlIGEKKyAgICAvLyBnbG9iYWwgb2JqZWN0
LCBidXQgdGhlIFdlYkFzc2VtYmx5RnVuY3Rpb24gZG9lcy4KICAgICBQcm90b0NhbGxGcmFtZSBw
cm90b0NhbGxGcmFtZTsKLSAgICBwcm90b0NhbGxGcmFtZS5pbml0KG51bGxwdHIsIGNhbGxlZSwg
Zmlyc3RBcmd1bWVudCwgYXJnQ291bnQsIHJlbWFpbmluZ0FyZ3MpOworICAgIHByb3RvQ2FsbEZy
YW1lLmluaXQobnVsbHB0ciwgd2FzbUZ1bmN0aW9uLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwg
cmVtYWluaW5nQXJncyk7CiAgICAgCi0gICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1F
bnRyeVRvV2FzbShqc0VudHJ5UG9pbnQtPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCAmdm0s
ICZwcm90b0NhbGxGcmFtZSk7CisgICAgRW5jb2RlZEpTVmFsdWUgcmF3UmVzdWx0ID0gdm1FbnRy
eVRvV2FzbSh3YXNtRnVuY3Rpb24tPndlYkFzc2VtYmx5Q2FsbGVlKCktPmpzRW50cnlQb2ludCgp
LCAmdm0sICZwcm90b0NhbGxGcmFtZSk7CiAgICAgLy8gRklYTUUgaXMgdGhpcyBjb3JyZWN0PyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODc2CiAgICAgc3dpdGNo
IChzaWduYXR1cmUtPnJldHVyblR5cGUpIHsKICAgICBjYXNlIFdhc206OlZvaWQ6CkBAIC0xMTYs
MTMgKzExOCwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAg
ICAgcmV0dXJuIEVuY29kZWRKU1ZhbHVlKCk7CiB9CiAKLVdlYkFzc2VtYmx5RnVuY3Rpb24qIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSwgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYgY2FsbGFibGUpCitX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNh
bGxlZSogY2FsbGVlLCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKIHsKICAgICBOYXRpdmVF
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJs
eUZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51
bGxwdHIsIG5hbWUpOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKiBmdW5jdGlvbkNlbGwg
PSBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbDo6Y3JlYXRlKHZtLCBXVEZNb3ZlKGNhbGxhYmxlKSk7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5RnVu
Y3Rpb25TdHJ1Y3R1cmUoKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBX
ZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAgZnVu
Y3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUsIGluc3Rh
bmNlLCBmdW5jdGlvbkNlbGwpOworICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhl
Y3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwgY2FsbGVlLCBzaWduYXR1cmUpOwogICAg
IHJldHVybiBmdW5jdGlvbjsKIH0KIApAQCAtMTQzLDE1ICsxNDQsMTYgQEAgdm9pZCBXZWJBc3Nl
bWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2luc3RhbmNl
KTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9mdW5jdGlvbkNlbGwpOworICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3dhc21DYWxsZWUpOwogfQogCi12b2lkIFdl
YkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlLCBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCogZnVuY3Rpb25D
ZWxsKQordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5h
dGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKiB3YXNtQ2FsbGVlLCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKICAgICBBU1NF
UlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgbV9pbnN0YW5jZS5zZXQodm0sIHRoaXMsIGluc3Rh
bmNlKTsKLSAgICBtX2Z1bmN0aW9uQ2VsbC5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uQ2VsbCk7Cisg
ICAgbV93YXNtQ2FsbGVlLnNldCh2bSwgdGhpcywgd2FzbUNhbGxlZSk7CisgICAgbV9zaWduYXR1
cmUgPSBzaWduYXR1cmU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2
aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2Ug
SlNDIHsKIAogY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBXZWJBc3NlbWJseUZ1bmN0aW9u
Q2VsbDsKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWU7CiBjbGFzcyBXZWJBc3NlbWJseUluc3Rh
bmNlOwogCiBuYW1lc3BhY2UgQjMgewpAQCAtNDQsMjIgKzQ0LDYgQEAgbmFtZXNwYWNlIFdhc20g
ewogc3RydWN0IFNpZ25hdHVyZTsKIH0KIAotY2xhc3MgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0
aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rp
b24pOwotICAgIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbigpID0gZGVsZXRlOwotCi1wdWJs
aWM6Ci0gICAgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uKENhbGxhYmxlV2ViQXNzZW1ibHlG
dW5jdGlvbiYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBjb25zdCBCMzo6Q29tcGlsYXRpb24qIGpzRW50
cnlQb2ludDsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZTsKLSAgICBDYWxs
YWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24oY29uc3QgQjM6OkNvbXBpbGF0aW9uKiBqc0VudHJ5UG9p
bnQsIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKQotICAgICAgICA6IGpzRW50cnlQ
b2ludChqc0VudHJ5UG9pbnQpCi0gICAgICAgICwgc2lnbmF0dXJlKHNpZ25hdHVyZSkKLSAgICB7
Ci0gICAgfQotfTsKLQogY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbiA6IHB1YmxpYyBKU0Z1bmN0
aW9uIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsKQEAgLTY4LDIxICs1
MiwyOCBAQCBwdWJsaWM6CiAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgaW50LCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBD
YWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIEpTV2ViQXNzZW1i
bHlDYWxsZWUqLCBXYXNtOjpTaWduYXR1cmUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVh
dGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgY29uc3Qg
V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIHdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9mdW5jdGlvbkNlbGwuZ2V0KCk7IH0KKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3ZWJBc3NlbWJseUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUNhbGxlZS5nZXQoKTsg
fQorICAgIGNvbnN0IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX2luc3RhbmNlLmdldCgpOyB9CisgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWdu
YXR1cmUoKQorICAgIHsgCisgICAgICAgIEFTU0VSVChtX3NpZ25hdHVyZSk7CisgICAgICAgIHJl
dHVybiBtX3NpZ25hdHVyZTsKKyAgICB9CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVk
IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dl
YkFzc2VtYmx5Q2FsbGVlKiwgV2FzbTo6U2lnbmF0dXJlKik7CiAKIHByaXZhdGU6CiAgICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKik7CiAKICAg
ICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseUluc3RhbmNlPiBtX2luc3RhbmNlOwotICAgIFdy
aXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbD4gbV9mdW5jdGlvbkNlbGw7CisgICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+IG1fd2FzbUNhbGxlZTsKKyAgICBXYXNt
OjpTaWduYXR1cmUqIG1fc2lnbmF0dXJlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbkNlbGwuY3BwCShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHAJKG5vbmV4aXN0ZW50KQpA
QCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb25D
ZWxsLmgiCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlGdW5j
dGlvbkNlbGw6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5RnVuY3Rpb25DZWxsIiwgbnVsbHB0ciwg
bnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCkgfTsK
LQotV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsOjpjcmVh
dGUoVk0mIHZtLCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mJiBjYWxsYWJsZSkKLXsKLSAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCogbmF0aXZlRnVuY3Rpb24gPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbD4odm0uaGVhcCkpIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25DZWxsKHZtLCBXVEZNb3ZlKGNhbGxhYmxlKSk7Ci0gICAgbmF0aXZlRnVuY3Rp
b24tPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICByZXR1cm4gbmF0aXZlRnVuY3Rpb247Ci19Ci0K
LVdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsOjpXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbChWTSYgdm0s
IENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmIGNhbGxhYmxlKQotICAgIDogQmFzZSh2bSwg
dm0ud2ViQXNzZW1ibHlGdW5jdGlvbkNlbGxTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX2Z1bmN0
aW9uKFdURk1vdmUoY2FsbGFibGUpKQotewotfQotCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25D
ZWxsOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQ2Vs
bCogbmF0aXZlRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCo+
KGNlbGwpOwotICAgIG5hdGl2ZUZ1bmN0aW9uLT5XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbDo6fldl
YkFzc2VtYmx5RnVuY3Rpb25DZWxsKCk7Ci19Ci0KLVN0cnVjdHVyZSogV2ViQXNzZW1ibHlGdW5j
dGlvbkNlbGw6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25DZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlGdW5jdGlvbkNlbGwuaAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1
ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsIDogcHVibGljIEpTQ2Vs
bCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVy
ZUlzSW1tb3J0YWw7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7Ci0KLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIGNyZWF0ZShWTSYsIENh
bGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmKTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBjb25zdCBD
YWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24mIGZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9m
dW5jdGlvbjsgfQotCi1wcml2YXRlOgotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKFZNJiwg
Q2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYpOwotCi0gICAgQ2FsbGFibGVXZWJBc3NlbWJs
eUZ1bmN0aW9uIG1fZnVuY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyMDkyMjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxs
ZWUuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCiAjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCkBAIC01Myw3
ICs1NCw3IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnUKIAogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1v
ZHVsZShFeGVjU3RhdGUqIHN0YXRlKQogewotICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7Cisg
ICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogICAgIEpTVmFsdWUgdmFsID0gc3RhdGUtPmFyZ3VtZW50KDApOwogCkBAIC04
Nyw3ICs4OCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAg
ICAgICAgIGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBleHAuZmll
bGQuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUo
dm0sIHN0cnVjdHVyZSwgcGxhbi5nZXRNb2R1bGVJbmZvcm1hdGlvbigpLCBwbGFuLmdldENvbXBp
bGVkRnVuY3Rpb25zKCksIGV4cG9ydFN5bWJvbFRhYmxlKSk7CisgICAgdW5zaWduZWQgY2FsbGVl
Q291bnQgPSBwbGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpOworICAgIEpTV2ViQXNzZW1ibHlN
b2R1bGUqIHJlc3VsdCA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
LCBwbGFuLmdldE1vZHVsZUluZm9ybWF0aW9uKCksIGV4cG9ydFN5bWJvbFRhYmxlLCBjYWxsZWVD
b3VudCk7CisgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhzdGF0ZS0+anNDYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCksIAorICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFz
c2VtYmx5Q2FsbGVlKiBjYWxsZWUpIHsKKyAgICAgICAgICAgIHJlc3VsdC0+Y2FsbGVlcygpW2Nh
bGxlZUluZGV4XS5zZXQodm0sIHJlc3VsdCwgY2FsbGVlKTsKKyAgICAgICAgfSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA5MjI5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDYsNyArMTA2LDYgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGlu
ayhFeGVjUwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCk7CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3Jt
YXRpb24gPSBpbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0gICAgY29u
c3QgV2FzbTo6Q29tcGlsZWRGdW5jdGlvbnMmIGNvbXBpbGVkRnVuY3Rpb25zID0gaW5zdGFuY2Ut
Pm1vZHVsZSgpLT5jb21waWxlZEZ1bmN0aW9ucygpOwogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRT
eW1ib2xUYWJsZSA9IGluc3RhbmNlLT5tb2R1bGUoKS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKIAog
ICAgIC8vIEZJWE1FIHdpcmUgdXAgdGhlIGltcG9ydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjUxMTgKQEAgLTEyNCwxMCArMTIzLDkgQEAgdm9pZCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAgLy8gICAgIGEuIExldCBm
dW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMu
CiAgICAgICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8gZnVuY3MuCiAgICAgICAgICAg
ICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICBjb25zdCBXYXNtOjpGdW5jdGlv
bkNvbXBpbGF0aW9uKiBjb21waWxlZEZ1bmN0aW9uID0gY29tcGlsZWRGdW5jdGlvbnMuYXQoZXhw
LmZ1bmN0aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgY29uc3QgQjM6OkNvbXBpbGF0aW9u
KiBqc0VudHJ5UG9pbnQgPSBjb21waWxlZEZ1bmN0aW9uLT5qc0VudHJ5UG9pbnQuZ2V0KCk7Ci0g
ICAgICAgICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVsZUluZm9y
bWF0aW9uLmZ1bmN0aW9ucy5hdChleHAuZnVuY3Rpb25JbmRleCkuc2lnbmF0dXJlOwotICAgICAg
ICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCBl
eHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24o
anNFbnRyeVBvaW50LCBzaWduYXR1cmUpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxs
ZWUqIHdhc21DYWxsZWUgPSBpbnN0YW5jZS0+bW9kdWxlKCktPmNhbGxlZShleHAuZnVuY3Rpb25J
bmRleCk7CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVsZUlu
Zm9ybWF0aW9uLmZ1bmN0aW9ucy5hdChleHAuZnVuY3Rpb25JbmRleCkuc2lnbmF0dXJlOworICAg
ICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgp
LCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCB3YXNtQ2FsbGVlLCBzaWduYXR1cmUpOwog
ICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0K
</data>
<flag name="review"
          id="318507"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>296100</attachid>
            <date>2016-12-04 13:22:47 -0800</date>
            <delta_ts>2016-12-04 13:22:47 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>56208</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5MzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBA
CisyMDE2LTEyLTA0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlIHNob3VsZCBoYXZlIGEgV2FzbSBjYWxsZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTE2MworCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRo
IE1pbGxlci4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgSlNXZWJBc3NlbWJseUNhbGxlZSBh
bmQgc3RvcmVzIGl0IGludG8gdGhlCisgICAgICAgIGNhbGxlZSBzbG90IGluIHRoZSBjYWxsIGZy
YW1lIGFzIHBhcnQgb2YgdGhlIHByb2xvZ3VlIG9mIGEKKyAgICAgICAgd2FzbSBmdW5jdGlvbi4g
VGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBpbXBsZW1lbnRpbmcKKyAgICAgICAgdW53aW5kaW5n
IGZyb20vdGhyb3VnaCB3YXNtIGZyYW1lcy4gV2Ugd2lsbCB1c2UgdGhlIGNhbGxlZQorICAgICAg
ICB0byBpZGVudGlmeSB0aGF0IGEgbWFjaGluZSBmcmFtZSBiZWxvbmdzIHRvIHdhc20gY29kZS4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKGNh
bGxXYXNtRnVuY3Rpb24pOgorICAgICAgICAoZnVuY3Rpb25UZXN0V2FzbU1vZHVsZUZ1bmN0aW9u
cyk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoK
KyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAg
ICogd2FzbS9KU1dlYkFzc2VtYmx5Lmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20v
V2FzbUNhbGxpbmdDb252ZW50aW9uLmg6CisgICAgICAgIChKU0M6Oldhc206OkNhbGxpbmdDb252
ZW50aW9uOjpzZXR1cEZyYW1lSW5Qcm9sb2d1ZSk6CisgICAgICAgICogd2FzbS9XYXNtRm9ybWF0
Lmg6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlBs
YW46OmluaXRpYWxpemVDYWxsZWVzKToKKyAgICAgICAgKiB3YXNtL1dhc21QbGFuLmg6CisgICAg
ICAgIChKU0M6Oldhc206OlBsYW46OmNvbXBpbGVkRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpQbGFuOjpnZXRDb21waWxlZEZ1bmN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlDYWxsZWU6OkpTV2ViQXNzZW1ibHlDYWxsZWUpOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5Q2FsbGVlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlDYWxsZWU6OmRlc3Ryb3kpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUNh
bGxlZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRl
KToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUNhbGxlZTo6anNFbnRyeVBvaW50KToKKyAgICAg
ICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5TW9k
dWxlOjpKU1dlYkFzc2VtYmx5TW9kdWxlKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1v
ZHVsZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9k
dWxlLmg6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlNb2R1bGU6Om1vZHVsZUluZm9ybWF0
aW9uKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y2FsbGVlKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseU1vZHVsZTo6Y2FsbGVlcyk6CisgICAgICAgIChKU0M6OkpT
V2ViQXNzZW1ibHlNb2R1bGU6Om9mZnNldE9mQ2FsbGVlcyk6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlNb2R1bGU6OmFsbG9jYXRpb25TaXplKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1vZHVsZTo6Y29tcGlsZWRGdW5jdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmNhbGxXZWJBc3NlbWJs
eUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbik6CisgICAg
ICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1i
bHlGdW5jdGlvbjo6d2ViQXNzZW1ibHlDYWxsZWUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uOjppbnN0YW5jZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246
OnNpZ25hdHVyZSk6CisgICAgICAgIChKU0M6OkNhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbjo6
Q2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Vi
QXNzZW1ibHlGdW5jdGlvbjo6d2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwpOiBEZWxldGVkLgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwOgorICAgICAgICAoSlND
OjpXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw6OldlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw6OmRlc3Ryb3kpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3Ry
dWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25D
ZWxsLmg6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25DZWxsOjpmdW5jdGlvbik6
IERlbGV0ZWQuCisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZUNvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZSk6CisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6
OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKToKKwogMjAxNi0xMi0wNCAgTWF0dCBCYWtl
ciAgPG1hdHRiYWtlckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQXNzZXJ0
aW9uIEZhaWx1cmVzIGJyZWFrcG9pbnQgc2hvdWxkIHJlc3BlY3QgZ2xvYmFsIEJyZWFrcG9pbnRz
IGVuYWJsZWQgc2V0dGluZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMjA5MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNiArOTA1LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKICAgICB3YXNtL1dhc21QbGFuLmNwcAogICAgIHdhc20vV2FzbVZhbGlkYXRlLmNwcAog
CisgICAgd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcAogICAgIHdhc20vanMvSlNXZWJB
c3NlbWJseUNvbXBpbGVFcnJvci5jcHAKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5jcHAKICAgICB3YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCkBAIC05MTQsNyArOTE1
LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5
Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBp
bGVFcnJvclByb3RvdHlwZS5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3Bw
Ci0gICAgd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5jcHAKICAgICB3YXNtL2pzL1dl
YkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5
SW5zdGFuY2VQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseU1lbW9yeUNvbnN0
cnVjdG9yLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIwOTMxMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1
Myw3IEBACiAjaW5jbHVkZSAiSlNQcm94eS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5j
bHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIK
ICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1
ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCkBAIC0yNTY2LDcgKzI1NjcsNyBAQCBzdGF0aWMgSlNW
YWx1ZSBib3goRXhlY1N0YXRlKiBleGVjLCBWTSYgCiAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29k
ZShiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHJlc3VsdCkpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSBj
YWxsV2FzbUZ1bmN0aW9uKFZNKiB2bSwgY29uc3QgQjM6OkNvbXBpbGF0aW9uJiBjb2RlLCBWZWN0
b3I8SlNWYWx1ZT4mIGJveGVkQXJncykKK3N0YXRpYyBKU1ZhbHVlIGNhbGxXYXNtRnVuY3Rpb24o
Vk0qIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiB3YXNtQ2FsbGVlLCBWZWN0b3I8SlNWYWx1ZT4mIGJveGVkQXJncykKIHsKICAgICBKU1ZhbHVl
IGZpcnN0QXJndW1lbnQ7CiAgICAgaW50IGFyZ0NvdW50ID0gMTsKQEAgLTI1NzksOSArMjU4MCw5
IEBAIHN0YXRpYyBKU1ZhbHVlIGNhbGxXYXNtRnVuY3Rpb24oVk0qIHZtLCAKICAgICB9CiAKICAg
ICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKLSAgICBwcm90b0NhbGxGcmFtZS5pbml0
KG51bGxwdHIsIG51bGxwdHIsIGZpcnN0QXJndW1lbnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdz
KTsKKyAgICBwcm90b0NhbGxGcmFtZS5pbml0KG51bGxwdHIsIGdsb2JhbE9iamVjdC0+Z2xvYmFs
RXhlYygpLT5qc0NhbGxlZSgpLCBmaXJzdEFyZ3VtZW50LCBhcmdDb3VudCwgcmVtYWluaW5nQXJn
cyk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHZtRW50cnlUb1dhc20oY29kZS5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdm0sICZwcm90b0NhbGxGcmFtZSkpOworICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUodm1FbnRyeVRvV2FzbSh3YXNtQ2FsbGVlLT5qc0VudHJ5UG9pbnQo
KSwgdm0sICZwcm90b0NhbGxGcmFtZSkpOwogfQogCiAvLyB0ZXN0V2FzbU1vZHVsZShKU0FycmF5
QnVmZmVyVmlldyBzb3VyY2UsIG51bWJlciBmdW5jdGlvbkNvdW50LCAuLi5bW1dhc21WYWx1ZSwg
W1dhc21WYWx1ZV1dXSkgd2hlcmUgdGhlIGl0aCBjb3B5IG9mIFtbcmVzdWx0LCBbYXJnc11dXSBp
cyBhIGxpc3QKQEAgLTI2MTAsMTAgKzI2MTEsMTggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuYwogICAgIGlmIChwbGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpICE9
IGZ1bmN0aW9uQ291bnQpCiAgICAgICAgIENSQVNIKCk7CiAKLSAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgZnVuY3Rpb25Db3VudDsgKytpKSB7Ci0gICAgICAgIGlmICghcGxhbi5jb21waWxl
ZEZ1bmN0aW9uKGkpKQotICAgICAgICAgICAgZGF0YUxvZ0xuKCJmYWlsZWQgdG8gY29tcGlsZSBm
dW5jdGlvbiBhdCBpbmRleCIsIGkpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGNhbGxlZXM7
CisgICAgeworICAgICAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSBVSU5UX01BWDsKKyAgICAgICAg
cGxhbi5pbml0aWFsaXplQ2FsbGVlcyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksCisgICAg
ICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBj
YWxsZWUpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghY2FsbGVlSW5kZXggfHwg
KGNhbGxlZUluZGV4IC0gMSA9PSBsYXN0SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBjYWxsZWVz
LmFwcGVuZChjYWxsZWUpOworICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGNhbGxlZUluZGV4
OworICAgICAgICAgICAgfSk7CisgICAgfQogCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8
IGZ1bmN0aW9uQ291bnQ7ICsraSkgewogICAgICAgICBKU0FycmF5KiB0ZXN0Q2FzZXMgPSBqc0Nh
c3Q8SlNBcnJheSo+KGV4ZWMtPmFyZ3VtZW50KGkgKyAyKSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgdGVzdENhc2VzLT5sZW5ndGgoKTsgKyt0ZXN0
SW5kZXgpIHsKICAgICAgICAgICAgIEpTQXJyYXkqIHRlc3QgPSBqc0Nhc3Q8SlNBcnJheSo+KHRl
c3RDYXNlcy0+Z2V0SW5kZXhRdWlja2x5KHRlc3RJbmRleCkpOwpAQCAtMjYyNCw3ICsyNjMzLDcg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJndW1lbnRzLT5sZW5ndGgo
KTsgKythcmdJbmRleCkKICAgICAgICAgICAgICAgICBib3hlZEFyZ3MuYXBwZW5kKGJveChleGVj
LCB2bSwgYXJndW1lbnRzLT5nZXRJbmRleFF1aWNrbHkoYXJnSW5kZXgpKSk7CiAKLSAgICAgICAg
ICAgIEpTVmFsdWUgY2FsbFJlc3VsdCA9IGNhbGxXYXNtRnVuY3Rpb24oJnZtLCAqcGxhbi5jb21w
aWxlZEZ1bmN0aW9uKGkpLT5qc0VudHJ5UG9pbnQsIGJveGVkQXJncyk7CisgICAgICAgICAgICBK
U1ZhbHVlIGNhbGxSZXN1bHQgPSBjYWxsV2FzbUZ1bmN0aW9uKCZ2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBqc0Nhc3Q8SlNXZWJBc3NlbWJseUNhbGxlZSo+KGNhbGxlZXMuYXQoaSkp
LCBib3hlZEFyZ3MpOwogICAgICAgICAgICAgSlNWYWx1ZSBleHBlY3RlZCA9IGJveChleGVjLCB2
bSwgcmVzdWx0KTsKICAgICAgICAgICAgIGlmIChjYWxsUmVzdWx0ICE9IGV4cGVjdGVkKSB7CiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiQXJndW1lbnRzOiAiKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDkzMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMTQzMyw2ICsxNDMzLDggQEAKIAkJNzlENUNENUExQzExMDZBOTAwQ0VDQTA3IC8qIFNh
bXBsaW5nUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzlENUNENTgxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3Bw
ICovOyB9OwogCQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTkx
QzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMg
LyogSGFzT3duUHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5
Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3OUU0MjNFMjFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMDFERUU2
NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi87IH07CisJCTc5RTQyM0Uz
MURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUg
LyogSlNXZWJBc3NlbWJseUNhbGxlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVu
dmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5RUUwQkZEMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCAq
LzsgfTsKIAkJNzlFRTBDMDAxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RUUwQkZF
MUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlGOEZDMUUxQjlGRUQwRjAwQ0E2
NkFCIC8qIERGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjhGQzFDMUI5RkVEMEYwMENBNjZBQiAv
KiBERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CkBAIC0yMDA4LDggKzIw
MTAsNiBAQAogCQlBRDQ5MzdDNDFEREJFNjE0MDA3N0M4MDcgLyogQWJzdHJhY3RNb2R1bGVSZWNv
cmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkz
N0MyMUREQkU2MEEwMDc3QzgwNyAvKiBBYnN0cmFjdE1vZHVsZVJlY29yZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUFENDkzN0M3MURERDBBQUUw
MDc3QzgwNyAvKiBXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDNTFERENEQ0YwMDA3N0M4MDcgLyog
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwICovOyB9OwogCQlBRDQ5MzdDODFEREQwQUFFMDA3
N0M4MDcgLyogV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFENDkzN0M2MUREQ0RDRjAwMDc3QzgwNyAvKiBXZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5oICovOyB9OwotCQlBRDQ5MzdEMTFEREQyN0RFMDA3N0M4MDcg
LyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0OTM3Q0QxREREMjdEOTAwNzdDODA3IC8qIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25DZWxsLmNwcCAqLzsgfTsKLQkJQUQ0OTM3RDIxREREMjdERTAwNzdDODA3IC8q
IFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBRDQ5MzdDRTFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlG
dW5jdGlvbkNlbGwuaCAqLzsgfTsKIAkJQUQ0OTM3RDMxREREMjdERTAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQUQ0OTM3QzkxREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwICovOyB9OwogCQlBRDQ5MzdENDFEREQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQ0
OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAqLzsgfTsKIAkJ
QUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEODZBOTNEMUFBNEQ4N0MwMDJG
RTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM4NTgsNiArMzg1OCw4IEBACiAJCTc5RDVDRDU4MUMxMTA2
QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nUHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OUQ1Q0Q1OTFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGluZ1Byb2ZpbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBI
YXNPd25Qcm9wZXJ0eUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhh
c093blByb3BlcnR5Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlFNDIz
RTAxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZS5jcHA7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZS5oOyBwYXRo
ID0ganMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3OUVFMEJGRDFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUVudmlyb25tZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFRTBCRkUxQjRBRkI4NTAwMDM4NUM5
IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmFyaWFibGVFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
OUY4RkMxQzFCOUZFRDBGMDBDQTY2QUIgLyogREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWF4aW1hbEZsdXNo
SW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0NzksOCArNDQ4MSw2IEBA
CiAJCUFENDkzN0M2MUREQ0RDRjAwMDc3QzgwNyAvKiBXZWJBc3NlbWJseU1vZHVsZVJlY29yZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUQ0OTM3QzkxREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVu
Y3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oOyBwYXRoID0ganMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlBRDQ5MzdDRDFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNz
ZW1ibHlGdW5jdGlvbkNlbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlGdW5j
dGlvbkNlbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBRDQ5MzdDRTFEREQy
N0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5RnVuY3Rpb25DZWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFE
ODZBOTNEMUFBNEQ4N0MwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtHQ01hcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlUm9vdFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTlGODkzNzE4OTFBRDMzMDBENUNDREMgLyogVW5s
aW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC03NTY5LDE0ICs3NTY5LDE0IEBACiAJCUFEMkZDQjhBMURCNTg0MDAwMEIzRTczNiAvKiBq
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQUQ0OTM3
Q0QxREREMjdEOTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmNwcCAqLywKLQkJ
CQlBRDQ5MzdDRTFEREQyN0Q5MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCAq
LywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rp
b24uaCAqLywKIAkJCQlBRDQ5MzdDNTFERENEQ0YwMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwICovLAogCQkJCUFENDkzN0M2MUREQ0RDRjAwMDc3QzgwNyAvKiBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZC5oICovLAogCQkJCUFEMkZDQzI2MURCODM4QzQwMEIzRTczNiAvKiBX
ZWJBc3NlbWJseVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQUQyRkNDMjcxREI4MzhDNDAwQjNFNzM2
IC8qIFdlYkFzc2VtYmx5UHJvdG90eXBlLmggKi8sCisJCQkJNzlFNDIzRTAxREVFNjUzMjAwNzhE
MzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwICovLAorCQkJCTc5RTQyM0UxMURFRTY1MzIw
MDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmggKi8sCiAJCQkJQUQyRkNCQTYxREI1OERB
NDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlDb21waWxlRXJyb3IuY3BwICovLAogCQkJCUFEMkZD
QkE3MURCNThEQTQwMEIzRTczNiAvKiBKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmggKi8sCiAJ
CQkJQUQyRkNCQTgxREI1OERBNDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAg
Ki8sCkBAIC03ODY5LDYgKzc4NjksNyBAQAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAv
KiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNG
QSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlFNDIzRTMxREVF
NjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTY1QjgzOTJFMUJBQ0FEMzYwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEMzRUQwRTE2RjVDRDAwQjM0NDYwIC8qIENhbGxEYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFk
ZXJzICovLApAQCAtODAwOSw3ICs4MDEwLDYgQEAKIAkJCQkwRjdCMjk0RDE0QzNDRDRDMDA3QzNE
QjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzUyOUE0QzFDNDU3Qjc1MDAw
QjQ5QzYgLyogQVBJVXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlBRDQ5MzdEMjFE
REQyN0RFMDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNzI1Q0IwMUM1MDZEM0IwMEFEOTQzQSAvKiBCM0ZvbGRQYXRoQ29uc3RhbnRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGls
YXRpb25LZXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQ0QzExMUMzRTJDNzQwMDZDRDk4NCAv
KiBGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMTM1
LDcgKzEwMTM1LDYgQEAKIAkJCQkxNDgyQjc0RTBBNDMwMzI4MDA1MTdDRkMgLyogSlNTdHJpbmdS
ZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QUFCMzgwQjY2QTk0NDAwRTU1RjE2IC8qIEpT
U3RyaW5nUmVmQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0
RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQUQ0OTM3
RDExREREMjdERTAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTcwRUNBNjA1MUFGREJFQTIwMDQ0OTczOSAvKiBKU1RlbXBsYXRlUmVnaXN0
cnlLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RkExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk2MzAz
OTFENDE5MkM2MDA1NjA5RDkgLyogQWxsb2NhdG9yQXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTEwMTU2LDYgKzEwMTU1LDcgQEAKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NzlFNDIzRTIxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVBMUEwOTUxRDhDQjM0MTAwNEMyRUI4IC8q
IERlYnVnZ2VyUGFyc2VEYXRhLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJl
dmlzaW9uIDIwOTMxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDcgQEAgbWFjcm8g
ZG9WTUVudHJ5KG1ha2VDYWxsKQogICAgIG1vdmUgNCwgdDMKIAogLmNvcHlIZWFkZXJMb29wOgor
ICAgICMgQ29weSB0aGUgQ29kZUJsb2NrL0NhbGxlZS9Bcmd1bWVudENvdW50L3x0aGlzfCBmcm9t
IHByb3RvQ2FsbEZyYW1lIGludG8gdGhlIGNhbGxlZSBmcmFtZS4KICAgICBzdWJpIDEsIHQzCiAg
ICAgbG9hZHEgW3Byb3RvQ2FsbEZyYW1lLCB0MywgOF0sIGV4dHJhVGVtcFJlZwogICAgIHN0b3Jl
cSBleHRyYVRlbXBSZWcsIENvZGVCbG9ja1tzcCwgdDMsIDhdCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDkz
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsNyBAQAogI2luY2x1ZGUgIkpTV2Vha01hcC5o
IgogI2luY2x1ZGUgIkpTV2Vha1NldC5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHkuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIK
ICNpbmNsdWRlICJMYXp5Q2xhc3NTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTGF6eVBy
b3BlcnR5SW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMjA5MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNiArMjMwLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIGZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB3ZWJBc3NlbWJseUV4ZWN1dGFi
bGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICB3ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEpTV2ViQXNzZW1ibHlDYWxsZWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICNlbmRpZgogICAgIG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3RydWN0
dXJlLnNldCgqdGhpcywgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICByZWdFeHBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBSZWdF
eHA6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKQEAgLTI2MCw3ICsyNjEs
NiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgZnVuY3Rp
b25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
ICAgICB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2VtYmx5
Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Ci0gICAgd2Vi
QXNzZW1ibHlGdW5jdGlvbkNlbGxTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseUZ1bmN0
aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2VuZGlmCiAg
ICAgaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXk+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA5
MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzEwLDcgKzMxMCw3IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5j
dGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5RXhlY3V0YWJsZVN0cnVjdHVyZTsKLSAgICBTdHJv
bmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbFN0cnVjdHVyZTsKKyAgICBTdHJv
bmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNhbGxlZVN0cnVjdHVyZTsKICNlbmRpZgogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IG1vZHVsZVByb2dyYW1FeGVjdXRhYmxlU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IHJlZ0V4cFN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9KU1dlYkFzc2VtYmx5LmgJKHJldmlzaW9uIDIwOTMxMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL0pTV2ViQXNzZW1ibHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCisjaW5jbHVkZSAianMvSlNXZWJBc3NlbWJseUNhbGxlZS5oIgogI2luY2x1ZGUgImpzL0pT
V2ViQXNzZW1ibHlDb21waWxlRXJyb3IuaCIKICNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5SW5z
dGFuY2UuaCIKICNpbmNsdWRlICJqcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmgiCkBAIC0zNyw3ICsz
OCw2IEBACiAjaW5jbHVkZSAianMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmgiCiAjaW5j
bHVkZSAianMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgotI2luY2x1ZGUgImpzL1dlYkFzc2VtYmx5
RnVuY3Rpb25DZWxsLmgiCiAjaW5jbHVkZSAianMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAianMvV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5oIgogI2lu
Y2x1ZGUgImpzL1dlYkFzc2VtYmx5TWVtb3J5Q29uc3RydWN0b3IuaCIKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9u
IDIwOTMxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBjb25zdGV4cHIgRXhwcmVzc2lvblR5cGUgZW1wdHlFeHByZXNzaW9uID0gbnVsbHB0cjsK
IAotICAgIEIzSVJHZW5lcmF0b3IoTWVtb3J5KiwgUHJvY2VkdXJlJiwgVmVjdG9yPFVubGlua2Vk
Q2FsbD4mIHVubGlua2VkQ2FsbHMpOworICAgIEIzSVJHZW5lcmF0b3IoTWVtb3J5KiwgUHJvY2Vk
dXJlJiwgRnVuY3Rpb25Db21waWxhdGlvbiopOwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRV
Uk4gYWRkQXJndW1lbnRzKGNvbnN0IFZlY3RvcjxUeXBlPiYpOwogICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsKQEAgLTE4OSwxMCArMTg5LDEwIEBA
IHByaXZhdGU6CiAgICAgVmFsdWUqIG1femVyb1ZhbHVlc1tudW1UeXBlc107CiB9OwogCi1CM0lS
R2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgVmVjdG9yPFVubGlua2VkQ2FsbD4mIHVubGlua2VkQ2FsbHMpCitCM0lSR2VuZXJhdG9y
OjpCM0lSR2VuZXJhdG9yKE1lbW9yeSogbWVtb3J5LCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgRnVu
Y3Rpb25Db21waWxhdGlvbiogY29tcGlsYXRpb24pCiAgICAgOiBtX21lbW9yeShtZW1vcnkpCiAg
ICAgLCBtX3Byb2MocHJvY2VkdXJlKQotICAgICwgbV91bmxpbmtlZENhbGxzKHVubGlua2VkQ2Fs
bHMpCisgICAgLCBtX3VubGlua2VkQ2FsbHMoY29tcGlsYXRpb24tPnVubGlua2VkQ2FsbHMpCiB7
CiAgICAgbV9jdXJyZW50QmxvY2sgPSBtX3Byb2MuYWRkQmxvY2soKTsKIApAQCAtMjI0LDYgKzIy
NCw4IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoTWVtb3J5KiBtZW0KICAgICAgICAg
ICAgIGppdC5icmVha3BvaW50KCk7CiAgICAgICAgIH0pOwogICAgIH0KKworICAgIHdhc21DYWxs
aW5nQ29udmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKGNvbXBpbGF0aW9uLCBtX3Byb2Ms
IE9yaWdpbigpLCBtX2N1cnJlbnRCbG9jayk7CiB9CiAKIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjp6
ZXJvRm9yVHlwZShUeXBlIHR5cGUpCkBAIC03NDEsNyArNzQzLDcgQEAgc3RkOjp1bmlxdWVfcHRy
PEZ1bmN0aW9uQ29tcGlsYXRpb24+IHBhcgogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxGdW5jdGlvbkNvbXBpbGF0aW9uPigpOwogCiAgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsK
LSAgICBCM0lSR2VuZXJhdG9yIGNvbnRleHQobWVtb3J5LCBwcm9jZWR1cmUsIHJlc3VsdC0+dW5s
aW5rZWRDYWxscyk7CisgICAgQjNJUkdlbmVyYXRvciBjb250ZXh0KG1lbW9yeSwgcHJvY2VkdXJl
LCByZXN1bHQuZ2V0KCkpOwogICAgIEZ1bmN0aW9uUGFyc2VyPEIzSVJHZW5lcmF0b3I+IHBhcnNl
cihjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBmdW5j
dGlvbnMpOwogICAgIGlmICghcGFyc2VyLnBhcnNlKCkpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGluZ0NvbnZlbnRpb24uaAkocmV2aXNpb24gMjA5MzExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxpbmdDb252ZW50aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgzLDYgKzgzLDQwIEBAIHByaXZhdGU6CiAgICAgfQogCiBwdWJsaWM6CisgICAgdm9pZCBz
ZXR1cEZyYW1lSW5Qcm9sb2d1ZShGdW5jdGlvbkNvbXBpbGF0aW9uKiBjb21waWxhdGlvbiwgQjM6
OlByb2NlZHVyZSYgcHJvYywgQjM6Ok9yaWdpbiBvcmlnaW4sIEIzOjpCYXNpY0Jsb2NrKiBibG9j
aykgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlICogc2l6ZW9mKFJlZ2lzdGVyKSA8IGhlYWRlclNpemUsICJXZSByZWx5IG9uIHRoaXMgaGVy
ZSBmb3Igbm93LiIpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KENhbGxGcmFtZVNsb3Q6OmNvZGVC
bG9jayAqIHNpemVvZihSZWdpc3RlcikgPCBoZWFkZXJTaXplLCAiV2UgcmVseSBvbiB0aGlzIGhl
cmUgZm9yIG5vdy4iKTsKKworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBnZXRDYWxsZWVQ
YXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBC
Mzo6SW50NjQsIG9yaWdpbik7CisgICAgICAgIGdldENhbGxlZVBhdGNocG9pbnQtPnJlc3VsdENv
bnN0cmFpbnQgPSBCMzo6VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjsKKyAgICAgICAgZ2V0Q2FsbGVl
UGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEIzOjpFZmZlY3RzOjpub25lKCk7CisgICAgICAgIGdldENh
bGxlZVBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewor
ICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBtb3ZlTG9jYXRpb24gPSBqaXQu
bW92ZVdpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGF0aW9uLT5jYWxsZWVNb3Zl
TG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobW92ZUxvY2F0aW9uKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIEIzOjpWYWx1ZSogZnJhbWVQ
b2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50
ZXIsIG9yaWdpbik7CisgICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDYWxsZWUgPSBibG9jay0+
YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6
Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKKyAgICAgICAgICAgIGdldENh
bGxlZVBhdGNocG9pbnQsCisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
cHJvYywgQjM6OkFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZnNldE9mQ2FsbGVlKSk7CisK
KyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIHN0b3JlIHplcm8gaW50byB0
aGUgQ29kZUJsb2NrKiBzcG90IGluIHRoZSBjYWxsIGZyYW1lLAorICAgICAgICAvLyBidXQgdGhl
cmUgYXJlIHBsYWNlcyB0aGF0IGludGVycHJldCBub24tbnVsbCBDb2RlQmxvY2sgc2xvdCB0byBt
ZWFuIGEgdmFsaWQgQ29kZUJsb2NrLgorICAgICAgICAvLyBXaGVuIGRvaW5nIHVud2luZGluZywg
d2UnbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgZW50aXJlIHJ1bnRpbWUgaXMgT0sgd2l0aCBh
IG5vbi1udWxsCisgICAgICAgIC8vIENvZGVCbG9jayBub3QgaW1wbHlpbmcgdGhhdCB0aGUgQ29k
ZUJsb2NrIGlzIHZhbGlkLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1MzIxCisgICAgICAgIEIzOjpWYWx1ZSogb2Zmc2V0T2ZDb2RlQmxvY2sg
PSBibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZy
YW1lU2xvdDo6Y29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgICAgIGJsb2NrLT5h
cHBlbmROZXc8QjM6Ok1lbW9yeVZhbHVlPihwcm9jLCBCMzo6U3RvcmUsIG9yaWdpbiwKKyAgICAg
ICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCAw
KSwKKyAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6QWRk
LCBvcmlnaW4sIGZyYW1lUG9pbnRlciwgb2Zmc2V0T2ZDb2RlQmxvY2spKTsKKyAgICB9CisKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgIHZvaWQgbG9hZEFyZ3VtZW50cyhjb25z
dCBWZWN0b3I8VHlwZT4mIGFyZ3VtZW50VHlwZXMsIEIzOjpQcm9jZWR1cmUmIHByb2MsIEIzOjpC
YXNpY0Jsb2NrKiBibG9jaywgQjM6Ok9yaWdpbiBvcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3Jt
YXQuaAkocmV2aXNpb24gMjA5MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNiArMTM1LDcgQEAgc3RydWN0IFVubGlu
a2VkQ2FsbCB7CiAKIHN0cnVjdCBGdW5jdGlvbkNvbXBpbGF0aW9uIHsKICAgICBWZWN0b3I8VW5s
aW5rZWRDYWxsPiB1bmxpbmtlZENhbGxzOworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBj
YWxsZWVNb3ZlTG9jYXRpb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4g
Y29kZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBqc0VudHJ5UG9pbnQ7
CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAkocmV2aXNp
b24gMjA5MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
CiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUu
aCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5n
Q29udmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKQEAgLTExMCw2ICsxMTMsMjMg
QEAgdm9pZCBQbGFuOjpydW4oKQogICAgIG1fZmFpbGVkID0gZmFsc2U7CiB9CiAKK3ZvaWQgUGxh
bjo6aW5pdGlhbGl6ZUNhbGxlZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc3RkOjpm
dW5jdGlvbjx2b2lkKHVuc2lnbmVkLCBKU1dlYkFzc2VtYmx5Q2FsbGVlKik+IGNhbGxiYWNrKQor
eworICAgIEFTU0VSVCghZmFpbGVkKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2NvbXBpbGVkRnVuY3Rpb25zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxGdW5jdGlvbkNvbXBpbGF0aW9uPiYgY29tcGlsYXRpb24gPSBtX2NvbXBpbGVkRnVuY3Rpb25z
W2ldOworICAgICAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgY2FsbGVlTW92ZUxvY2F0aW9u
ID0gY29tcGlsYXRpb24tPmNhbGxlZU1vdmVMb2NhdGlvbjsKKyAgICAgICAgSlNXZWJBc3NlbWJs
eUNhbGxlZSogY2FsbGVlID0gSlNXZWJBc3NlbWJseUNhbGxlZTo6Y3JlYXRlKGdsb2JhbE9iamVj
dC0+dm0oKSwgV1RGTW92ZShjb21waWxhdGlvbikpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoUG9pbnRlcihjYWxsZWVNb3ZlTG9jYXRpb24sIGNhbGxlZSk7CisKKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nTG4oIk1hZGUgV2FzbSBjYWxsZWU6ICIs
IFJhd1BvaW50ZXIoY2FsbGVlKSk7CisKKyAgICAgICAgY2FsbGJhY2soaSwgY2FsbGVlKTsKKyAg
ICB9Cit9CisKIFBsYW46On5QbGFuKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNt
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHJldmlzaW9uIDIwOTMx
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDEzIEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IFdhc20geworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3Mg
SlNXZWJBc3NlbWJseUNhbGxlZTsKKworbmFtZXNwYWNlIFdhc20geworCiBjbGFzcyBNZW1vcnk7
CiAKIGNsYXNzIFBsYW4gewpAQCAtNDQsNiArNTAsOCBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIHJ1bigpOwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0
aWFsaXplQ2FsbGVlcyhKU0dsb2JhbE9iamVjdCosIHN0ZDo6ZnVuY3Rpb248dm9pZCh1bnNpZ25l
ZCwgSlNXZWJBc3NlbWJseUNhbGxlZSopPik7CisKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBmYWlsZWQoKSBjb25zdCB7IHJldHVybiBtX2ZhaWxlZDsgfQogICAgIGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlKCkgY29uc3QKICAgICB7CkBAIC03MSwxMSArNzksNiBAQCBwdWJsaWM6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFmYWlsZWQoKSk7CiAgICAgICAgIHJldHVybiBtX2NvbXBp
bGVkRnVuY3Rpb25zLmF0KGkpLmdldCgpOwogICAgIH0KLSAgICBDb21waWxlZEZ1bmN0aW9ucyYg
Z2V0Q29tcGlsZWRGdW5jdGlvbnMoKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZh
aWxlZCgpKTsKLSAgICAgICAgcmV0dXJuIG1fY29tcGlsZWRGdW5jdGlvbnM7Ci0gICAgfQogCiBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJ
bmZvcm1hdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlDYWxsZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNhbGxl
ZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEpTV2ViQXNzZW1ibHlDYWxs
ZWU6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5Q2FsbGVlIiwgbnVsbHB0ciwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5Q2FsbGVlKSB9OworCitKU1dlYkFzc2VtYmx5Q2FsbGVl
OjpKU1dlYkFzc2VtYmx5Q2FsbGVlKFZNJiB2bSkKKyAgICA6IEJhc2Uodm0sIHZtLndlYkFzc2Vt
Ymx5Q2FsbGVlU3RydWN0dXJlLmdldCgpKQoreyB9CisKK3ZvaWQgSlNXZWJBc3NlbWJseUNhbGxl
ZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25D
b21waWxhdGlvbj4mJiBjb21waWxhdGlvbikKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CisKKyAgICBtX2NvZGUgPSBXVEZNb3ZlKGNvbXBpbGF0aW9uLT5jb2RlKTsKKyAgICBtX2pz
RW50cnlQb2ludCA9IFdURk1vdmUoY29tcGlsYXRpb24tPmpzRW50cnlQb2ludCk7Cit9CisKK3Zv
aWQgSlNXZWJBc3NlbWJseUNhbGxlZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSlNX
ZWJBc3NlbWJseUNhbGxlZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1dlYkFzc2VtYmx5Q2FsbGVl
Kj4oY2VsbCk7CisgICAgdGhpc09iamVjdC0+SlNXZWJBc3NlbWJseUNhbGxlZTo6fkpTV2ViQXNz
ZW1ibHlDYWxsZWUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5Q2FsbGVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlDYWxsZWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRl
ICJKU0NhbGxlZS5oIgorI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEpTV2ViQXNzZW1ibHlDYWxsZWUgOiBwdWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
KworICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBjcmVhdGUoVk0mIHZtLCBzdGQ6OnVu
aXF1ZV9wdHI8V2FzbTo6RnVuY3Rpb25Db21waWxhdGlvbj4mJiBjb21waWxhdGlvbikKKyAgICB7
CisgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNhbGxlZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlDYWxsZWU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5Q2Fs
bGVlKHZtKTsKKyAgICAgICAgY2FsbGVlLT5maW5pc2hDcmVhdGlvbih2bSwgV1RGTW92ZShjb21w
aWxhdGlvbikpOworICAgICAgICByZXR1cm4gY2FsbGVlOworICAgIH0KKworICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKSAKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBl
LCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRf
SU5GTzsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgdm9pZCoganNFbnRyeVBvaW50
KCkgeyByZXR1cm4gbV9qc0VudHJ5UG9pbnQtPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIHN0ZDo6dW5pcXVlX3B0
cjxXYXNtOjpGdW5jdGlvbkNvbXBpbGF0aW9uPiYmKTsKKyAgICBKU1dlYkFzc2VtYmx5Q2FsbGVl
KFZNJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBtX2NvZGU7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4gbV9qc0VudHJ5UG9pbnQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlNb2R1bGUuY3BwCShyZXZpc2lvbiAyMDkzMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTUg
KzI5LDE5IEBACiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtRm9y
bWF0LmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGUqIEpTV2ViQXNz
ZW1ibHlNb2R1bGU6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzdGQ6OnVu
aXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiBtb2R1bGVJbmZvcm1hdGlvbiwgV2Fz
bTo6Q29tcGlsZWRGdW5jdGlvbnMmIGNvbXBpbGVkRnVuY3Rpb25zLCBTeW1ib2xUYWJsZSogZXhw
b3J0U3ltYm9sVGFibGUpCitjb25zdCBDbGFzc0luZm8gSlNXZWJBc3NlbWJseU1vZHVsZTo6c19p
bmZvID0geyAiV2ViQXNzZW1ibHkuTW9kdWxlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TW9kdWxlKSB9OworCitKU1dlYkFzc2VtYmx5
TW9kdWxlKiBKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxl
SW5mb3JtYXRpb24sCisgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlLCB1bnNpZ25l
ZCBjYWxsZWVDb3VudCkKIHsKLSAgICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEpTV2ViQXNzZW1ibHlNb2R1bGU+KHZtLmhlYXApKSBKU1dlYkFzc2VtYmx5TW9k
dWxlKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLCBjb21waWxlZEZ1bmN0aW9ucyk7
CisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFz
c2VtYmx5TW9kdWxlPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYWxsZWVDb3VudCkpKSBKU1dl
YkFzc2VtYmx5TW9kdWxlKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZUluZm9ybWF0aW9uLCBjYWxsZWVD
b3VudCk7CiAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBleHBvcnRTeW1ib2xUYWJs
ZSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtNDcsMTEgKzUxLDEyIEBAIFN0cnVjdHVy
ZSogSlNXZWJBc3NlbWJseU1vZHVsZTo6Y3JlYXRlU3QKICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiB9CiAKLUpTV2ViQXNzZW1ibHlNb2R1bGU6OkpTV2Vi
QXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1bmlxdWVf
cHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24sIFdhc206OkNv
bXBpbGVkRnVuY3Rpb25zJiBjb21waWxlZEZ1bmN0aW9ucykKK0pTV2ViQXNzZW1ibHlNb2R1bGU6
OkpTV2ViQXNzZW1ibHlNb2R1bGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYgbW9kdWxlSW5mb3JtYXRpb24sIHVu
c2lnbmVkIGNhbGxlZUNvdW50KQogICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQogICAgICwgbV9t
b2R1bGVJbmZvcm1hdGlvbihXVEZNb3ZlKG1vZHVsZUluZm9ybWF0aW9uKSkKLSAgICAsIG1fY29t
cGlsZWRGdW5jdGlvbnMoV1RGTW92ZShjb21waWxlZEZ1bmN0aW9ucykpCisgICAgLCBtX2NhbGxl
ZUNvdW50KGNhbGxlZUNvdW50KQogeworICAgIG1lbXNldChjYWxsZWVzKCksIDAsIG1fY2FsbGVl
Q291bnQgKiBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSk7CiB9CiAK
IHZvaWQgSlNXZWJBc3NlbWJseU1vZHVsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTeW1ib2xU
YWJsZSogZXhwb3J0U3ltYm9sVGFibGUpCkBAIC03MywxMCArNzgsMTIgQEAgdm9pZCBKU1dlYkFz
c2VtYmx5TW9kdWxlOjp2aXNpdENoaWxkcmVuKAogCiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9l
eHBvcnRTeW1ib2xUYWJsZSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmpl
Y3QtPm1fY2FsbGVlQ291bnQ7IGkrKykgeworICAgICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3Nl
bWJseUNhbGxlZT4qIGNhbGxlZSA9ICZ0aGlzT2JqZWN0LT5jYWxsZWVzKClbaV07CisgICAgICAg
IHZpc2l0b3IuYXBwZW5kKGNhbGxlZSk7CisgICAgfQogfQogCi1jb25zdCBDbGFzc0luZm8gSlNX
ZWJBc3NlbWJseU1vZHVsZTo6c19pbmZvID0geyAiV2ViQXNzZW1ibHkuTW9kdWxlIiwgJkJhc2U6
OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1dlYkFzc2VtYmx5TW9kdWxlKSB9Owot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
TW9kdWxlLmgJKHJldmlzaW9uIDIwOTMxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzAgKzMzLDUy
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOwogY2xh
c3MgU3ltYm9sVGFibGU7CiAKIGNsYXNzIEpTV2ViQXNzZW1ibHlNb2R1bGUgOiBwdWJsaWMgSlNE
ZXN0cnVjdGlibGVPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVP
YmplY3QgQmFzZTsKIAotICAgIHN0YXRpYyBKU1dlYkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0m
LCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+Jiwg
V2FzbTo6Q29tcGlsZWRGdW5jdGlvbnMmLCBTeW1ib2xUYWJsZSopOworICAgIHN0YXRpYyBKU1dl
YkFzc2VtYmx5TW9kdWxlKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqLCBzdGQ6OnVuaXF1ZV9wdHI8
V2FzbTo6TW9kdWxlSW5mb3JtYXRpb24+JiwgU3ltYm9sVGFibGUqIGV4cG9ydHMsIHVuc2lnbmVk
IGNhbGxlZUNvdW50KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCiAgICAgREVDTEFSRV9JTkZPOwogCiAgICAg
Y29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUluZm9ybWF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gKm1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCk7IH0KLSAgICBjb25zdCBXYXNtOjpD
b21waWxlZEZ1bmN0aW9ucyYgY29tcGlsZWRGdW5jdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Nv
bXBpbGVkRnVuY3Rpb25zOyB9CiAgICAgU3ltYm9sVGFibGUqIGV4cG9ydFN5bWJvbFRhYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9leHBvcnRTeW1ib2xUYWJsZS5nZXQoKTsgfQogCisgICAgSlNXZWJB
c3NlbWJseUNhbGxlZSogY2FsbGVlKHVuc2lnbmVkIGNhbGxlZUluZGV4KQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVlSW5kZXggPCBtX2NhbGxlZUNvdW50KTsKKyAgICAgICAg
cmV0dXJuIGNhbGxlZXMoKVtjYWxsZWVJbmRleF0uZ2V0KCk7CisgICAgfQorCisgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KiBjYWxsZWVzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+Kj4oYml0
d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG9mZnNldE9mQ2FsbGVlcygpKTsKKyAgICB9CisKIHBy
b3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKFZNJiwgU3RydWN0dXJlKiwgc3RkOjp1
bmlxdWVfcHRyPFdhc206Ok1vZHVsZUluZm9ybWF0aW9uPiYsIFdhc206OkNvbXBpbGVkRnVuY3Rp
b25zJik7CisgICAgSlNXZWJBc3NlbWJseU1vZHVsZShWTSYsIFN0cnVjdHVyZSosIHN0ZDo6dW5p
cXVlX3B0cjxXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbj4mLCB1bnNpZ25lZCBjYWxsZWVDb3VudCk7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN5bWJvbFRhYmxlKik7CiAgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisKIHByaXZhdGU6CisgICAgc3RhdGljIHNpemVfdCBvZmZz
ZXRPZkNhbGxlZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KT4oc2l6ZW9mKEpT
V2ViQXNzZW1ibHlNb2R1bGUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRp
b25TaXplKHVuc2lnbmVkIG51bUNhbGxlZXMpCisgICAgeworICAgICAgICByZXR1cm4gb2Zmc2V0
T2ZDYWxsZWVzKCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDYWxsZWU+KSAq
IG51bUNhbGxlZXM7CisgICAgfQorCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdhc206Ok1vZHVsZUlu
Zm9ybWF0aW9uPiBtX21vZHVsZUluZm9ybWF0aW9uOwotICAgIFdhc206OkNvbXBpbGVkRnVuY3Rp
b25zIG1fY29tcGlsZWRGdW5jdGlvbnM7CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJvbFRhYmxlPiBt
X2V4cG9ydFN5bWJvbFRhYmxlOworICAgIHVuc2lnbmVkIG1fY2FsbGVlQ291bnQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMDkzMTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsMTIgKzMyLDEyIEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJKU1dlYkFzc2VtYmx5Q2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUlu
c3RhbmNlLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRlICJQcm90b0NhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgotI2luY2x1
ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb25DZWxsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00
NSwxNCArNDUsMTIgQEAgY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RnVuY3Rpb246OnNfaQog
CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byYgdm0gPSBleGVjLT52bSgpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8
V2ViQXNzZW1ibHlGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpOwotICAgIGlmICghY2FsbGVl
KQorICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8
V2ViQXNzZW1ibHlGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpOworICAgIGlmICghd2FzbUZ1
bmN0aW9uKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4
ZWMsIHNjb3BlLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgImV4cGVjdGVkIGEgV2ViQXNzZW1ibHkg
ZnVuY3Rpb24iLCBkZWZhdWx0U291cmNlQXBwZW5kZXIsIHJ1bnRpbWVUeXBlRm9yVmFsdWUoZXhl
Yy0+anNDYWxsZWUoKSkpKSk7Ci0gICAgY29uc3QgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9u
JiBjYWxsYWJsZSA9IGNhbGxlZS0+d2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwoKS0+ZnVuY3Rpb24o
KTsKLSAgICBjb25zdCBCMzo6Q29tcGlsYXRpb24qIGpzRW50cnlQb2ludCA9IGNhbGxhYmxlLmpz
RW50cnlQb2ludDsKLSAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IGNhbGxh
YmxlLnNpZ25hdHVyZTsKKyAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IHdh
c21GdW5jdGlvbi0+c2lnbmF0dXJlKCk7CiAKICAgICAvLyBGSVhNRSBpcyB0aGlzIHRoZSByaWdo
dCBiZWhhdmlvcj8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDg3
NgogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gc2lnbmF0dXJlLT5hcmd1bWVudHMu
c2l6ZSgpKQpAQCAtOTIsMTAgKzkwLDE0IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGwKICAgICAgICAgYXJnQ291bnQgPSBib3hlZEFyZ3Muc2l6ZSgpOwogICAgIH0K
IAorICAgIC8vIE5vdGU6IHdlIHNwZWNpZmljYWxseSB1c2UgdGhlIFdlYkFzc2VibHlGdW5jdGlv
biBhcyB0aGUgY2FsbGVlIHRvIGJlZ2luIHdpdGggaW4gdGhlIFByb3RvQ2FsbEZyYW1lLgorICAg
IC8vIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBjYWxsaW5nIGludG8gdGhlIGxsaW50IG1h
eSBzdGFjayBvdmVyZmxvdywgYW5kIHRoZSBzdGFjayBvdmVyZmxvdworICAgIC8vIGhhbmRsZXIg
bWlnaHQgcmVhZCB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHRoZSBjYWxsZWUuIFRoZSBKU1dlYkFz
c2VtYmx5Q2FsbGVlIGRvZXNuJ3QgaGF2ZSBhCisgICAgLy8gZ2xvYmFsIG9iamVjdCwgYnV0IHRo
ZSBXZWJBc3NlbWJseUZ1bmN0aW9uIGRvZXMuCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxs
RnJhbWU7Ci0gICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBjYWxsZWUsIGZpcnN0QXJn
dW1lbnQsIGFyZ0NvdW50LCByZW1haW5pbmdBcmdzKTsKKyAgICBwcm90b0NhbGxGcmFtZS5pbml0
KG51bGxwdHIsIHdhc21GdW5jdGlvbiwgZmlyc3RBcmd1bWVudCwgYXJnQ291bnQsIHJlbWFpbmlu
Z0FyZ3MpOwogICAgIAotICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dh
c20oanNFbnRyeVBvaW50LT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgJnZtLCAmcHJvdG9D
YWxsRnJhbWUpOworICAgIEVuY29kZWRKU1ZhbHVlIHJhd1Jlc3VsdCA9IHZtRW50cnlUb1dhc20o
d2FzbUZ1bmN0aW9uLT53ZWJBc3NlbWJseUNhbGxlZSgpLT5qc0VudHJ5UG9pbnQoKSwgJnZtLCAm
cHJvdG9DYWxsRnJhbWUpOwogICAgIC8vIEZJWE1FIGlzIHRoaXMgY29ycmVjdD8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDg3NgogICAgIHN3aXRjaCAoc2lnbmF0
dXJlLT5yZXR1cm5UeXBlKSB7CiAgICAgY2FzZSBXYXNtOjpWb2lkOgpAQCAtMTE2LDEzICsxMTgs
MTIgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIHJldHVy
biBFbmNvZGVkSlNWYWx1ZSgpOwogfQogCi1XZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBp
bnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5z
dGFuY2UsIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmIGNhbGxhYmxlKQorV2ViQXNzZW1i
bHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGNh
bGxlZSwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlv
biwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBu
YW1lKTsKLSAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCogZnVuY3Rpb25DZWxsID0gV2ViQXNz
ZW1ibHlGdW5jdGlvbkNlbGw6OmNyZWF0ZSh2bSwgV1RGTW92ZShjYWxsYWJsZSkpOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseUZ1bmN0aW9uU3Ry
dWN0dXJlKCk7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1i
bHlGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgIGZ1bmN0aW9uLT5m
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSwgZnVu
Y3Rpb25DZWxsKTsKKyAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUs
IGxlbmd0aCwgbmFtZSwgaW5zdGFuY2UsIGNhbGxlZSwgc2lnbmF0dXJlKTsKICAgICByZXR1cm4g
ZnVuY3Rpb247CiB9CiAKQEAgLTE0MywxNSArMTQ0LDE2IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pbnN0YW5jZSk7Ci0gICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fZnVuY3Rpb25DZWxsKTsKKyAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV93YXNtQ2FsbGVlKTsKIH0KIAotdm9pZCBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSwgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIGZ1bmN0aW9uQ2VsbCkKK3Zv
aWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVj
dXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgSlNXZWJBc3NlbWJseUNhbGxlZSogd2Fz
bUNhbGxlZSwgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUpCiB7CiAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwogICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBpbnN0YW5jZSk7Ci0g
ICAgbV9mdW5jdGlvbkNlbGwuc2V0KHZtLCB0aGlzLCBmdW5jdGlvbkNlbGwpOworICAgIG1fd2Fz
bUNhbGxlZS5zZXQodm0sIHRoaXMsIHdhc21DYWxsZWUpOworICAgIG1fc2lnbmF0dXJlID0gc2ln
bmF0dXJlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIw
OTMxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw7Citj
bGFzcyBKU1dlYkFzc2VtYmx5Q2FsbGVlOwogY2xhc3MgV2ViQXNzZW1ibHlJbnN0YW5jZTsKIAog
bmFtZXNwYWNlIEIzIHsKQEAgLTQ0LDIyICs0NCw2IEBAIG5hbWVzcGFjZSBXYXNtIHsKIHN0cnVj
dCBTaWduYXR1cmU7CiB9CiAKLWNsYXNzIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0aW9uKTsKLSAg
ICBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24oKSA9IGRlbGV0ZTsKLQotcHVibGljOgotICAg
IENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbihDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24m
JikgPSBkZWZhdWx0OwotCi0gICAgY29uc3QgQjM6OkNvbXBpbGF0aW9uKiBqc0VudHJ5UG9pbnQ7
Ci0gICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmU7Ci0gICAgQ2FsbGFibGVXZWJB
c3NlbWJseUZ1bmN0aW9uKGNvbnN0IEIzOjpDb21waWxhdGlvbioganNFbnRyeVBvaW50LCBjb25z
dCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSkKLSAgICAgICAgOiBqc0VudHJ5UG9pbnQoanNF
bnRyeVBvaW50KQotICAgICAgICAsIHNpZ25hdHVyZShzaWduYXR1cmUpCi0gICAgewotICAgIH0K
LX07Ci0KIGNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb24gOiBwdWJsaWMgSlNGdW5jdGlvbiB7CiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU0Z1bmN0aW9uIEJhc2U7CkBAIC02OCwyMSArNTIsMjggQEAg
cHVibGljOgogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIGludCwgY29uc3QgU3RyaW5nJiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgQ2FsbGFibGVX
ZWJBc3NlbWJseUZ1bmN0aW9uJiYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBj
b25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBKU1dlYkFzc2VtYmx5Q2FsbGVl
KiwgV2FzbTo6U2lnbmF0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAotICAgIGNvbnN0IFdlYkFzc2Vt
Ymx5RnVuY3Rpb25DZWxsKiB3ZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnVuY3Rpb25DZWxsLmdldCgpOyB9CisgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2ViQXNz
ZW1ibHlDYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX3dhc21DYWxsZWUuZ2V0KCk7IH0KKyAgICBj
b25zdCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9p
bnN0YW5jZS5nZXQoKTsgfQorICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlKCkK
KyAgICB7IAorICAgICAgICBBU1NFUlQobV9zaWduYXR1cmUpOworICAgICAgICByZXR1cm4gbV9z
aWduYXR1cmU7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpT
V2ViQXNzZW1ibHlJbnN0YW5jZSosIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKik7CisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgs
IGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgSlNXZWJBc3NlbWJs
eUNhbGxlZSosIFdhc206OlNpZ25hdHVyZSopOwogCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5
RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwogCiAgICAgV3JpdGVC
YXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKLSAgICBXcml0ZUJhcnJp
ZXI8V2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw+IG1fZnVuY3Rpb25DZWxsOworICAgIFdyaXRlQmFy
cmllcjxKU1dlYkFzc2VtYmx5Q2FsbGVlPiBtX3dhc21DYWxsZWU7CisgICAgV2FzbTo6U2lnbmF0
dXJlKiBtX3NpZ25hdHVyZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25DZWxsLmNwcAkocmV2aXNpb24gMjA5MzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwuaCIK
LQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUZ1bmN0aW9uQ2Vs
bDo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwiLCBudWxscHRyLCBudWxscHRy
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKSB9OwotCi1XZWJB
c3NlbWJseUZ1bmN0aW9uQ2VsbCogV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw6OmNyZWF0ZShWTSYg
dm0sIENhbGxhYmxlV2ViQXNzZW1ibHlGdW5jdGlvbiYmIGNhbGxhYmxlKQotewotICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb25DZWxsKiBuYXRpdmVGdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlGdW5j
dGlvbkNlbGwodm0sIFdURk1vdmUoY2FsbGFibGUpKTsKLSAgICBuYXRpdmVGdW5jdGlvbi0+Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgIHJldHVybiBuYXRpdmVGdW5jdGlvbjsKLX0KLQotV2ViQXNz
ZW1ibHlGdW5jdGlvbkNlbGw6OldlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKFZNJiB2bSwgQ2FsbGFi
bGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYgY2FsbGFibGUpCi0gICAgOiBCYXNlKHZtLCB2bS53ZWJB
c3NlbWJseUZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fZnVuY3Rpb24oV1RG
TW92ZShjYWxsYWJsZSkpCi17Ci19Ci0KLXZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGw6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKiBuYXRp
dmVGdW5jdGlvbiA9IHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKj4oY2VsbCk7
Ci0gICAgbmF0aXZlRnVuY3Rpb24tPldlYkFzc2VtYmx5RnVuY3Rpb25DZWxsOjp+V2ViQXNzZW1i
bHlGdW5jdGlvbkNlbGwoKTsKLX0KLQotU3RydWN0dXJlKiBXZWJBc3NlbWJseUZ1bmN0aW9uQ2Vs
bDo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0gICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uQ2VsbC5oCShyZXZpc2lvbiAyMDkzMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2luY2x1ZGUgIkpT
Q2VsbC5oIgotI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsIDogcHVibGljIEpTQ2VsbCB7Ci1w
dWJsaWM6Ci0gICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1t
b3J0YWw7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0K
LSAgICBzdGF0aWMgV2ViQXNzZW1ibHlGdW5jdGlvbkNlbGwqIGNyZWF0ZShWTSYsIENhbGxhYmxl
V2ViQXNzZW1ibHlGdW5jdGlvbiYmKTsKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7Ci0KLSAgICBERUNMQVJFX0lORk87Ci0KLSAgICBjb25zdCBDYWxsYWJs
ZVdlYkFzc2VtYmx5RnVuY3Rpb24mIGZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlv
bjsgfQotCi1wcml2YXRlOgotICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25DZWxsKFZNJiwgQ2FsbGFi
bGVXZWJBc3NlbWJseUZ1bmN0aW9uJiYpOwotCi0gICAgQ2FsbGFibGVXZWJBc3NlbWJseUZ1bmN0
aW9uIG1fZnVuY3Rpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlQ29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiAyMDkzMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eU1vZHVsZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNUeXBlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDYWxsZWUuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yLmgiCiAjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCkBAIC01Myw3ICs1NCw3
IEBAIGNvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseU1vZHVsZUNvbnN0cnUKIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseU1vZHVsZShF
eGVjU3RhdGUqIHN0YXRlKQogewotICAgIGF1dG8mIHZtID0gc3RhdGUtPnZtKCk7CisgICAgVk0m
IHZtID0gc3RhdGUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwogICAgIEpTVmFsdWUgdmFsID0gc3RhdGUtPmFyZ3VtZW50KDApOwogCkBAIC04Nyw3ICs4
OCwxMyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAgICAg
IGV4cG9ydFN5bWJvbFRhYmxlLT5zZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBleHAuZmllbGQuaW1w
bCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChvZmZzZXQpKSk7CiAgICAgfQogCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5TW9kdWxlOjpjcmVhdGUodm0sIHN0
cnVjdHVyZSwgcGxhbi5nZXRNb2R1bGVJbmZvcm1hdGlvbigpLCBwbGFuLmdldENvbXBpbGVkRnVu
Y3Rpb25zKCksIGV4cG9ydFN5bWJvbFRhYmxlKSk7CisgICAgdW5zaWduZWQgY2FsbGVlQ291bnQg
PSBwbGFuLmNvbXBpbGVkRnVuY3Rpb25Db3VudCgpOworICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUq
IHJlc3VsdCA9IEpTV2ViQXNzZW1ibHlNb2R1bGU6OmNyZWF0ZSh2bSwgc3RydWN0dXJlLCBwbGFu
LmdldE1vZHVsZUluZm9ybWF0aW9uKCksIGV4cG9ydFN5bWJvbFRhYmxlLCBjYWxsZWVDb3VudCk7
CisgICAgcGxhbi5pbml0aWFsaXplQ2FsbGVlcyhzdGF0ZS0+anNDYWxsZWUoKS0+Z2xvYmFsT2Jq
ZWN0KCksIAorICAgICAgICBbJl0gKHVuc2lnbmVkIGNhbGxlZUluZGV4LCBKU1dlYkFzc2VtYmx5
Q2FsbGVlKiBjYWxsZWUpIHsKKyAgICAgICAgICAgIHJlc3VsdC0+Y2FsbGVlcygpW2NhbGxlZUlu
ZGV4XS5zZXQodm0sIHJlc3VsdCwgY2FsbGVlKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsSlNXZWJBc3NlbWJseU1vZHVsZShFeGVjU3RhdGUqIHN0YXRlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA5MzExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDYsNyArMTA2LDYgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVj
UwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CiAKICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24g
PSBpbnN0YW5jZS0+bW9kdWxlKCktPm1vZHVsZUluZm9ybWF0aW9uKCk7Ci0gICAgY29uc3QgV2Fz
bTo6Q29tcGlsZWRGdW5jdGlvbnMmIGNvbXBpbGVkRnVuY3Rpb25zID0gaW5zdGFuY2UtPm1vZHVs
ZSgpLT5jb21waWxlZEZ1bmN0aW9ucygpOwogICAgIFN5bWJvbFRhYmxlKiBleHBvcnRTeW1ib2xU
YWJsZSA9IGluc3RhbmNlLT5tb2R1bGUoKS0+ZXhwb3J0U3ltYm9sVGFibGUoKTsKIAogICAgIC8v
IEZJWE1FIHdpcmUgdXAgdGhlIGltcG9ydHMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjUxMTgKQEAgLTEyNCwxMCArMTIzLDkgQEAgdm9pZCBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6bGluayhFeGVjUwogICAgICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJl
IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAg
ICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1bmMgdG8gZnVuY3MuCiAgICAgICAgICAgICAvLyAg
ICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAgICAgICBjb25zdCBXYXNtOjpGdW5jdGlvbkNvbXBp
bGF0aW9uKiBjb21waWxlZEZ1bmN0aW9uID0gY29tcGlsZWRGdW5jdGlvbnMuYXQoZXhwLmZ1bmN0
aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgY29uc3QgQjM6OkNvbXBpbGF0aW9uKiBqc0Vu
dHJ5UG9pbnQgPSBjb21waWxlZEZ1bmN0aW9uLT5qc0VudHJ5UG9pbnQuZ2V0KCk7Ci0gICAgICAg
ICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVsZUluZm9ybWF0aW9u
LmZ1bmN0aW9ucy5hdChleHAuZnVuY3Rpb25JbmRleCkuc2lnbmF0dXJlOwotICAgICAgICAgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCBleHAuZmll
bGQuc3RyaW5nKCksIGluc3RhbmNlLCBDYWxsYWJsZVdlYkFzc2VtYmx5RnVuY3Rpb24oanNFbnRy
eVBvaW50LCBzaWduYXR1cmUpKTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdh
c21DYWxsZWUgPSBpbnN0YW5jZS0+bW9kdWxlKCktPmNhbGxlZShleHAuZnVuY3Rpb25JbmRleCk7
CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVsZUluZm9ybWF0
aW9uLmZ1bmN0aW9ucy5hdChleHAuZnVuY3Rpb25JbmRleCkuc2lnbmF0dXJlOworICAgICAgICAg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpLCBleHAu
ZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCB3YXNtQ2FsbGVlLCBzaWduYXR1cmUpOwogICAgICAg
ICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>