<?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>177907</bug_id>
          
          <creation_ts>2017-10-04 17:37:18 -0700</creation_ts>
          <short_desc>The prototype cache should be aware of the Executable it generates a Structure for</short_desc>
          <delta_ts>2017-10-10 00:59:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>177987</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</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>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1356753</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-04 17:37:18 -0700</bug_when>
    <thetext>Keith found a bug. Basically, we null out the JSObject*&apos;s prototype pointer in the prototype map for poly proto today. This may cause one Executable to end up with a Structure* meant for the create_this of a separate Executable. This mean&apos;s it&apos;ll have the wrong InlineWatchpointSet&amp;, causing it to potentially pessimize another executable&apos;s allocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357175</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-05 12:43:48 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #0)
&gt; Keith found a bug. Basically, we null out the JSObject*&apos;s prototype pointer
&gt; in the prototype map for poly proto today. This may cause one Executable to
&gt; end up with a Structure* meant for the create_this of a separate Executable.
&gt; This mean&apos;s it&apos;ll have the wrong InlineWatchpointSet&amp;, causing it to
&gt; potentially pessimize another executable&apos;s allocation.

My analysis is slightly wrong here. An executable will write over another executable&apos;s poly proto watchpoint if the prototypes happen to be the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357176</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-05 12:45:17 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #1)
&gt; (In reply to Saam Barati from comment #0)
&gt; &gt; Keith found a bug. Basically, we null out the JSObject*&apos;s prototype pointer
&gt; &gt; in the prototype map for poly proto today. This may cause one Executable to
&gt; &gt; end up with a Structure* meant for the create_this of a separate Executable.
&gt; &gt; This mean&apos;s it&apos;ll have the wrong InlineWatchpointSet&amp;, causing it to
&gt; &gt; potentially pessimize another executable&apos;s allocation.
&gt; 
&gt; My analysis is slightly wrong here. An executable will write over another
&gt; executable&apos;s poly proto watchpoint if the prototypes happen to be the same.
And the other inputs also have to be the same to the prototype structure cache.

So something like this I think:

let p = {};

function foo() {
    class C {
        constructor() { this.x = 20; }
    };
    C.prototype = p;
}

function bar() {
    class C {
        constructor() { this.x = 20; }
    };
    C.prototype = p;
}

foo();
bar();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357302</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-05 15:57:43 -0700</bug_when>
    <thetext>*** Bug 177952 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357402</commentid>
    <comment_count>4</comment_count>
      <attachid>322967</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-05 19:20:07 -0700</bug_when>
    <thetext>Created attachment 322967
WIP

Waiting on experimental results for:
https://bugs.webkit.org/show_bug.cgi?id=177987</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357944</commentid>
    <comment_count>5</comment_count>
      <attachid>322967</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-07 12:21:38 -0700</bug_when>
    <thetext>Comment on attachment 322967
WIP

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

&gt; Source/JavaScriptCore/heap/Heap.cpp:1414
&gt; +    vm()-&gt;prototypeMap.removeDeadEntries();

I don&apos;t think it&apos;s necessary.

&gt; Source/JavaScriptCore/runtime/PrototypeMap.cpp:40
&gt; +    PrototypeMapKey key { makePolyProtoStructure ? nullptr : prototype, inlineCapacity, classInfo, globalObject, executable };

Why can&apos;t you just make the first field be a prototype-or-executable field?

&gt; Source/JavaScriptCore/runtime/PrototypeMap.cpp:104
&gt; +bool PrototypeMapKey::isDead()
&gt; +{
&gt; +    return (m_prototype &amp;&amp; !Heap::isMarked(m_prototype))
&gt; +        || (m_globalObject &amp;&amp; !Heap::isMarked(m_globalObject))
&gt; +        || (m_executable &amp;&amp; !Heap::isMarked(m_executable));
&gt; +}
&gt; +
&gt; +void PrototypeMap::removeDeadEntries()
&gt; +{
&gt; +    m_prototypes.removeIf([&amp;] (JSObject* object) {
&gt; +        return !Heap::isMarked(object);
&gt; +    });
&gt; +
&gt; +    m_structures.removeIf([&amp;] (auto&amp; entry) {
&gt; +        Structure* structure = entry.value;
&gt; +        return !Heap::isMarked(structure) || entry.key.isDead();
&gt; +    });

I was wrong about us needing this.  The lifetime of the structure takes care of everything for us, since the key is a bunch of raw pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357989</commentid>
    <comment_count>6</comment_count>
      <attachid>322967</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-07 18:08:24 -0700</bug_when>
    <thetext>Comment on attachment 322967
WIP

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

&gt;&gt; Source/JavaScriptCore/runtime/PrototypeMap.cpp:104
&gt;&gt; +    });
&gt; 
&gt; I was wrong about us needing this.  The lifetime of the structure takes care of everything for us, since the key is a bunch of raw pointers.

We don’t need it in ToT, however, I think we need it with this patch. The Structure won’t keep the Executable alive</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358338</commentid>
    <comment_count>7</comment_count>
      <attachid>322967</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-09 12:30:57 -0700</bug_when>
    <thetext>Comment on attachment 322967
WIP

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

&gt;&gt; Source/JavaScriptCore/runtime/PrototypeMap.cpp:40
&gt;&gt; +    PrototypeMapKey key { makePolyProtoStructure ? nullptr : prototype, inlineCapacity, classInfo, globalObject, executable };
&gt; 
&gt; Why can&apos;t you just make the first field be a prototype-or-executable field?

Yeah we can do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358369</commentid>
    <comment_count>8</comment_count>
      <attachid>323201</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-09 13:08:47 -0700</bug_when>
    <thetext>Created attachment 323201
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358375</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-09 13:11:35 -0700</bug_when>
    <thetext>Attachment 323201 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/StructureCache.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/VM.h:51:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358376</commentid>
    <comment_count>10</comment_count>
      <attachid>323205</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-09 13:12:51 -0700</bug_when>
    <thetext>Created attachment 323205
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358379</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-09 13:14:23 -0700</bug_when>
    <thetext>Attachment 323205 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/StructureCache.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/VM.h:51:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358451</commentid>
    <comment_count>12</comment_count>
      <attachid>323229</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-09 15:04:40 -0700</bug_when>
    <thetext>Created attachment 323229
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358471</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-09 15:52:43 -0700</bug_when>
    <thetext>Attachment 323229 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/StructureCache.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/VM.h:51:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358500</commentid>
    <comment_count>14</comment_count>
      <attachid>322967</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-09 16:39:10 -0700</bug_when>
    <thetext>Comment on attachment 322967
WIP

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/PrototypeMap.cpp:40
&gt;&gt;&gt; +    PrototypeMapKey key { makePolyProtoStructure ? nullptr : prototype, inlineCapacity, classInfo, globalObject, executable };
&gt;&gt; 
&gt;&gt; Why can&apos;t you just make the first field be a prototype-or-executable field?
&gt; 
&gt; Yeah we can do this.

No, we actually can&apos;t do this. This is the whole point of the patch. We must ensure that we get different structures before determining that we go poly proto. The chains of structures generating from the create_this belonging to the bytecode of an Executable must have different poly proto watchpoints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358585</commentid>
    <comment_count>15</comment_count>
      <attachid>323268</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-09 19:04:01 -0700</bug_when>
    <thetext>Created attachment 323268
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358586</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-09 19:05:02 -0700</bug_when>
    <thetext>Attachment 323268 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/StructureCache.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/VM.h:51:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358587</commentid>
    <comment_count>17</comment_count>
      <attachid>323268</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-09 19:07:04 -0700</bug_when>
    <thetext>Comment on attachment 323268
patch

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

&gt; Source/JavaScriptCore/runtime/StructureCache.h:44
&gt; -    explicit PrototypeMap(VM&amp; vm)
&gt; +    StructureCache(VM&amp; vm)

I&apos;ll add bad explicit here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358653</commentid>
    <comment_count>18</comment_count>
      <attachid>323283</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-09 23:14:39 -0700</bug_when>
    <thetext>Created attachment 323283
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358654</commentid>
    <comment_count>19</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-09 23:16:05 -0700</bug_when>
    <thetext>Attachment 323283 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/StructureCache.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358664</commentid>
    <comment_count>20</comment_count>
      <attachid>323283</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-10 00:58:31 -0700</bug_when>
    <thetext>Comment on attachment 323283
patch for landing

Clearing flags on attachment: 323283

Committed r223125: &lt;http://trac.webkit.org/changeset/223125&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358665</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-10 00:58:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358667</commentid>
    <comment_count>22</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-10 00:59:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/34905866&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322967</attachid>
            <date>2017-10-05 19:20:07 -0700</date>
            <delta_ts>2017-10-09 13:08:47 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>13869</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAkocmV2aXNpb24gMjIyOTM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsMjEgKzUwLDIwIEBAIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
OmluaXRpYWxpemUKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3Nzc5MgogCiAgICAgICAgIGV4ZWN1dGFibGUgPSBjb25zdHJ1Y3Rvci0+anNFeGVj
dXRhYmxlKCk7CisKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhlY3V0YWJs
ZS0+Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRmluYWxPYmplY3RUeXBlKTsKKyAg
ICAgICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fc3RydWN0dXJl
LnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX2lubGluZUNhcGFjaXR5
ID0gc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKICAgICAgICAgaXNQb2x5UHJvdG8gPSBmYWxzZTsKICAgICAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlUG9seVByb3RvKCkpCiAgICAgICAgICAgICBpc1BvbHlQcm90byA9IHRydWU7CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGlzUG9seVByb3RvID0gZXhlY3V0YWJsZS0+ZW5zdXJl
UG9seVByb3RvV2F0Y2hwb2ludCgpLmhhc0JlZW5JbnZhbGlkYXRlZCgpICYmIGV4ZWN1dGFibGUt
PnNpbmdsZXRvbkZ1bmN0aW9uKCktPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwotCi0gICAgICAgIGlm
IChpc1BvbHlQcm90bykgewotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0g
ZXhlY3V0YWJsZS0+Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IEZpbmFsT2Jq
ZWN0VHlwZSk7Ci0gICAgICAgICAgICAgICAgbV9hbGxvY2F0b3IgPSBudWxscHRyOwotICAgICAg
ICAgICAgICAgIG1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAg
ICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9
CiAKICAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDA7CkBAIC0xMTAsNyArMTA5LDcgQEAg
dm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZQogICAgICAgICAgICAgaW5s
aW5lQ2FwYWNpdHkgPSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpOwogICAgIH0K
IAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0ucHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0
U3RydWN0dXJlRm9yUHJvdG90eXBlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBh
Y2l0eSwgaXNQb2x5UHJvdG8pOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0ucHJvdG90
eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBpbmxpbmVDYXBhY2l0eSwgaXNQb2x5UHJvdG8sIGV4ZWN1dGFibGUpOwogCiAgICAg
aWYgKGlzUG9seVByb3RvKSB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90
bygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAkocmV2aXNpb24gMjIyOTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1MCw4IEBAIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGkKICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90
b3R5cGUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0cnVjdG9yKS0+cHJvdG90eXBlRm9yQ29u
c3RydWN0aW9uKHZtLCBleGVjKTsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBz
dHJ1Y3R1cmUtPnBvbHlQcm90b09mZnNldCgpLCBwcm90b3R5cGUpOwogICAgICAgICAgICAgdm0u
cHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZShwcm90b3R5cGUpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHJlc3VsdC0+aW5kZXhpbmdUeXBlKCkpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHJl
c3VsdC0+aW5kZXhpbmdUeXBlKCkpLCAiV2UgcmVseSBvbiBKU0ZpbmFsT2JqZWN0IG5vdCBzdGFy
dGluZyBvdXQgd2l0aCBhbiBpbmRleGluZyB0eXBlIG90aGVyd2lzZSB3ZSB3b3VsZCBwb3RlbnRp
YWxseSBuZWVkIHRvIGNvbnZlcnQgdG8gc2xvdyBwdXQgc3RvcmFnZSIpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAJKHJldmlzaW9uIDIyMjkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEwLDYgKzE0MTAsOCBAQCBORVZFUl9JTkxJ
TkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgICAgIAogICAgIGlmICh2bSgpLT50
eXBlUHJvZmlsZXIoKSkKICAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyKCktPmludmFsaWRhdGVU
eXBlU2V0Q2FjaGUoKTsKKworICAgIHZtKCktPnByb3RvdHlwZU1hcC5yZW1vdmVEZWFkRW50cmll
cygpOwogICAgICAgICAKICAgICByZWFwV2Vha0hhbmRsZXMoKTsKICAgICBwcnVuZVN0YWxlRW50
cmllc0Zyb21XZWFrR0NNYXBzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIyMjkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1MCw2ICsyNTAsOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3Ro
aXMpCiAgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gY29uc3RydWN0b3ItPnByb3Rv
dHlwZUZvckNvbnN0cnVjdGlvbih2bSwgZXhlYyk7CiAgICAgICAgICAgICByZXN1bHQtPnB1dERp
cmVjdCh2bSwgc3RydWN0dXJlLT5wb2x5UHJvdG9PZmZzZXQoKSwgcHJvdG90eXBlKTsKICAgICAg
ICAgICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUocHJvdG90eXBlKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhyZXN1bHQtPmluZGV4aW5n
VHlwZSgpKSk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFoYXNJbmRleGVkUHJv
cGVydGllcyhyZXN1bHQtPmluZGV4aW5nVHlwZSgpKSwgIldlIHJlbHkgb24gSlNGaW5hbE9iamVj
dCBub3Qgc3RhcnRpbmcgb3V0IHdpdGggYW4gaW5kZXhpbmcgdHlwZSBvdGhlcndpc2Ugd2Ugd291
bGQgcG90ZW50aWFsbHkgbmVlZCB0byBjb252ZXJ0IHRvIHNsb3cgcHV0IHN0b3JhZ2UiKTsKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9u
YWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLW9yZGluYXJ5Y3JlYXRlZnJvbWNvbnN0cnVjdG9yCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAJ
KHJldmlzaW9uIDIyMjkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Rv
dHlwZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxMSBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotaW5saW5lIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbXB0eVN0
cnVjdHVyZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBl
LCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBt
YWtlUG9seVByb3RvU3RydWN0dXJlKQoraW5saW5lIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpj
cmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBh
Y2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoISFwcm90b3R5cGUpOyAvLyBXZSB1c2Ug
bnVsbHB0ciBpbnNpZGUgdGhlIEhhc2hNYXAgZm9yIHByb3RvdHlwZSB0byBtZWFuIHBvbHkgcHJv
dG8sIHNvIHVzZXIncyBvZiB0aGlzIEFQSSBtdXN0IHByb3ZpZGUgbm9uLW51bGwgcHJvdG90eXBl
cy4KIAotICAgIGF1dG8ga2V5ID0gc3RkOjptYWtlX3R1cGxlKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1
cmUgPyBudWxscHRyIDogcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSwgY2xhc3NJbmZvLCBnbG9i
YWxPYmplY3QpOworICAgIFByb3RvdHlwZU1hcEtleSBrZXkgeyBtYWtlUG9seVByb3RvU3RydWN0
dXJlID8gbnVsbHB0ciA6IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGNsYXNzSW5mbywgZ2xv
YmFsT2JqZWN0LCBleGVjdXRhYmxlIH07CiAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0g
bV9zdHJ1Y3R1cmVzLmdldChrZXkpKSB7CiAgICAgICAgIGlmIChtYWtlUG9seVByb3RvU3RydWN0
dXJlKSB7CiAgICAgICAgICAgICBhZGRQcm90b3R5cGUocHJvdG90eXBlKTsKQEAgLTU5LDcgKzU5
LDcgQEAgaW5saW5lIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbQogICAgICAgICBz
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSgKICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBpbmxpbmVD
YXBhY2l0eSk7CiAgICAgfQotICAgIG1fc3RydWN0dXJlcy5zZXQoa2V5LCBXZWFrPFN0cnVjdHVy
ZT4oc3RydWN0dXJlKSk7CisgICAgbV9zdHJ1Y3R1cmVzLnNldChrZXksIHN0cnVjdHVyZSk7CiAK
ICAgICByZXR1cm4gc3RydWN0dXJlOwogfQpAQCAtNzEsMTggKzcxLDM3IEBAIFN0cnVjdHVyZSog
UHJvdG90eXBlTWFwOjplbXB0eVN0cnVjdHVyZUYKICAgICBpZiAocHJvdG90eXBlLT5hbnlPYmpl
Y3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgJiYgaGFzSW5kZXhlZFByb3Bl
cnRpZXMoaW5kZXhpbmdUeXBlKSkKICAgICAgICAgaW5kZXhpbmdUeXBlID0gKGluZGV4aW5nVHlw
ZSAmIH5JbmRleGluZ1NoYXBlTWFzaykgfCBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGU7CiAKLSAg
ICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGJh
c2VTdHJ1Y3R1cmUtPnR5cGVJbmZvKCksIGJhc2VTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpbmRl
eGluZ1R5cGUsIDAsIGZhbHNlKTsKKyAgICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIGJhc2VTdHJ1Y3R1cmUtPnR5cGVJbmZvKCksIGJhc2VTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpbmRleGluZ1R5cGUsIDAsIGZhbHNlLCBudWxscHRyKTsKIH0K
IAotU3RydWN0dXJlKiBQcm90b3R5cGVNYXA6OmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90
eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpCitTdHJ1
Y3R1cmUqIFByb3RvdHlwZU1hcDo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSwgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNGaW5hbE9iamVjdDo6dHlwZUluZm8oKSwgSlNGaW5h
bE9iamVjdDo6aW5mbygpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxp
bmVDYXBhY2l0eSwgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIGNyZWF0ZUVt
cHR5U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0ZpbmFsT2JqZWN0Ojp0eXBl
SW5mbygpLCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmRl
eGluZ1R5cGUsIGlubGluZUNhcGFjaXR5LCBtYWtlUG9seVByb3RvU3RydWN0dXJlLCBleGVjdXRh
YmxlKTsKIH0KIAogdm9pZCBQcm90b3R5cGVNYXA6OmNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVG
b3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVj
dCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShz
dGQ6Om1ha2VfdHVwbGUob2JqZWN0LCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5m
bygpLCBnbG9iYWxPYmplY3QpKTsKLSAgICBtX3N0cnVjdHVyZXMucmVtb3ZlKHN0ZDo6bWFrZV90
dXBsZShudWxscHRyLCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBnbG9i
YWxPYmplY3QpKTsKKyAgICAvLyBPT1BTOiB3aGF0IHRvIGRvIGhlcmU/CisgICAgbV9zdHJ1Y3R1
cmVzLnJlbW92ZShQcm90b3R5cGVNYXBLZXkgeyBvYmplY3QsIGlubGluZUNhcGFjaXR5LCBKU0Zp
bmFsT2JqZWN0OjppbmZvKCksIGdsb2JhbE9iamVjdCwgbnVsbHB0ciB9KTsKK30KKworYm9vbCBQ
cm90b3R5cGVNYXBLZXk6OmlzRGVhZCgpCit7CisgICAgcmV0dXJuIChtX3Byb3RvdHlwZSAmJiAh
SGVhcDo6aXNNYXJrZWQobV9wcm90b3R5cGUpKQorICAgICAgICB8fCAobV9nbG9iYWxPYmplY3Qg
JiYgIUhlYXA6OmlzTWFya2VkKG1fZ2xvYmFsT2JqZWN0KSkKKyAgICAgICAgfHwgKG1fZXhlY3V0
YWJsZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9leGVjdXRhYmxlKSk7Cit9CisKK3ZvaWQgUHJvdG90
eXBlTWFwOjpyZW1vdmVEZWFkRW50cmllcygpCit7CisgICAgbV9wcm90b3R5cGVzLnJlbW92ZUlm
KFsmXSAoSlNPYmplY3QqIG9iamVjdCkgeworICAgICAgICByZXR1cm4gIUhlYXA6OmlzTWFya2Vk
KG9iamVjdCk7CisgICAgfSk7CisKKyAgICBtX3N0cnVjdHVyZXMucmVtb3ZlSWYoWyZdIChhdXRv
JiBlbnRyeSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGVudHJ5LnZhbHVlOwor
ICAgICAgICByZXR1cm4gIUhlYXA6OmlzTWFya2VkKHN0cnVjdHVyZSkgfHwgZW50cnkua2V5Lmlz
RGVhZCgpOworICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5oCShyZXZpc2lvbiAyMjI5Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMjcgKzM3LDk5IEBAIGNsYXNzIEpTT2JqZWN0OwogY2xhc3MgU3RydWN0
dXJlOwogY2xhc3MgVk07CiAKK3N0cnVjdCBQcm90b3R5cGVNYXBLZXkgeworICAgIFByb3RvdHlw
ZU1hcEtleShKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKKyAgICAgICAgOiBtX3Byb3RvdHlwZShwcm90
b3R5cGUpCisgICAgICAgICwgbV9pbmxpbmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkKKyAgICAg
ICAgLCBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCisgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xv
YmFsT2JqZWN0KQorICAgICAgICAsIG1fZXhlY3V0YWJsZShleGVjdXRhYmxlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFpc0RlbGV0ZWRWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKCFpc0VtcHR5
VmFsdWUoKSk7CisgICAgfQorCisgICAgZW51bSBEZWxldGVkVmFsdWVUYWcgeyBEZWxldGVkVmFs
dWUgfTsKKyAgICBQcm90b3R5cGVNYXBLZXkoRGVsZXRlZFZhbHVlVGFnKSAKKyAgICAgICAgOiBt
X2NsYXNzSW5mbyhiaXR3aXNlX2Nhc3Q8Y29uc3QgQ2xhc3NJbmZvKj4oc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PigxKSkpCisgICAgeyB9CisgICAgZW51bSBFbXB0eVZhbHVlVGFnIHsgRW1wdHlWYWx1
ZSB9OworICAgIFByb3RvdHlwZU1hcEtleShFbXB0eVZhbHVlVGFnKQorICAgICAgICA6IG1fY2xh
c3NJbmZvKGJpdHdpc2VfY2FzdDxjb25zdCBDbGFzc0luZm8qPihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KDMpKSkKKyAgICB7IH0KKworICAgIGJvb2wgaXNEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2NsYXNzSW5mbykgPT0gMTsgfQorICAgIGJv
b2wgaXNFbXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
bV9jbGFzc0luZm8pID09IDM7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQcm90b3R5
cGVNYXBLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvdG90eXBl
ID09IG90aGVyLm1fcHJvdG90eXBlCisgICAgICAgICAgICAmJiBtX2lubGluZUNhcGFjaXR5ID09
IG90aGVyLm1faW5saW5lQ2FwYWNpdHkKKyAgICAgICAgICAgICYmIG1fY2xhc3NJbmZvID09IG90
aGVyLm1fY2xhc3NJbmZvCisgICAgICAgICAgICAmJiBtX2dsb2JhbE9iamVjdCA9PSBvdGhlci5t
X2dsb2JhbE9iamVjdAorICAgICAgICAgICAgJiYgbV9leGVjdXRhYmxlID09IG90aGVyLm1fZXhl
Y3V0YWJsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBEZWZhdWx0SGFzaDxKU09iamVjdCo+OjpIYXNoOjpoYXNoKG1fcHJvdG90eXBl
KQorICAgICAgICAgICAgXiBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2g6Omhhc2gobV9pbmxp
bmVDYXBhY2l0eSkKKyAgICAgICAgICAgIF4gRGVmYXVsdEhhc2g8Y29uc3QgQ2xhc3NJbmZvKj46
Okhhc2g6Omhhc2gobV9jbGFzc0luZm8pCisgICAgICAgICAgICBeIERlZmF1bHRIYXNoPEpTR2xv
YmFsT2JqZWN0Kj46Okhhc2g6Omhhc2gobV9nbG9iYWxPYmplY3QpCisgICAgICAgICAgICBeIERl
ZmF1bHRIYXNoPEZ1bmN0aW9uRXhlY3V0YWJsZSo+OjpIYXNoOjpoYXNoKG1fZXhlY3V0YWJsZSk7
CisgICAgfQorCisgICAgYm9vbCBpc0RlYWQoKTsKKworICAgIHN0cnVjdCBIYXNoZXIgeworICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBQcm90b3R5cGVNYXBLZXkmIGtleSkgeyBy
ZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBQcm90
b3R5cGVNYXBLZXkmIGEsIGNvbnN0IFByb3RvdHlwZU1hcEtleSYgYikgeyByZXR1cm4gYSA9PSBi
OyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gZmFsc2U7CisgICAgfTsKKworcHJpdmF0ZToKKworICAgIEpTT2JqZWN0KiBtX3Byb3Rv
dHlwZTsKKyAgICB1bnNpZ25lZCBtX2lubGluZUNhcGFjaXR5OworICAgIGNvbnN0IENsYXNzSW5m
byogbV9jbGFzc0luZm87CisgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OworICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogbV9leGVjdXRhYmxlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7CisKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UHJvdG90eXBl
TWFwS2V5PiB7CisgICAgdXNpbmcgSGFzaCA9IEpTQzo6UHJvdG90eXBlTWFwS2V5OjpIYXNoZXI7
Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlByb3RvdHlwZU1hcEtleT4g
OiBDdXN0b21IYXNoVHJhaXRzPEpTQzo6UHJvdG90eXBlTWFwS2V5PiB7IH07CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKKwogLy8gVHJhY2tzIHRoZSBjYW5vbmljYWwg
c3RydWN0dXJlIGFuIG9iamVjdCBzaG91bGQgYmUgYWxsb2NhdGVkIHdpdGggd2hlbiBpbmhlcml0
aW5nIGZyb20gYSBnaXZlbiBwcm90b3R5cGUuCiBjbGFzcyBQcm90b3R5cGVNYXAgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IFByb3RvdHlwZU1hcChWTSYgdm0pCi0gICAgICAgIDogbV9wcm90b3R5
cGVzKHZtKQotICAgICAgICAsIG1fc3RydWN0dXJlcyh2bSkKLSAgICB7Ci0gICAgfQorICAgIGV4
cGxpY2l0IFByb3RvdHlwZU1hcChWTSYpCisgICAgeyB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBTdHJ1Y3R1cmUqIGVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVBy
b3RvU3RydWN0dXJlID0gZmFsc2UpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSog
ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCosIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUg
PSBmYWxzZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiA9IG51bGxwdHIpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFN0cnVjdHVyZSogZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVj
dHVyZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBj
bGVhckVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgSlNP
YmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgQUxXQVlTX0lOTElORSB2b2lk
IGFkZFByb3RvdHlwZShKU09iamVjdCopOwogICAgIEFMV0FZU19JTkxJTkUgVHJpU3RhdGUgaXNQ
cm90b3R5cGUoSlNPYmplY3QqKSBjb25zdDsgLy8gUmV0dXJucyBhIGNvbnNlcnZhdGl2ZSBlc3Rp
bWF0ZS4KIAorICAgIHZvaWQgcmVtb3ZlRGVhZEVudHJpZXMoKTsKKwogcHJpdmF0ZToKLSAgICBT
dHJ1Y3R1cmUqIGNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
IHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5
cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUp
OworICAgIFN0cnVjdHVyZSogY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIElu
ZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0
cnVjdHVyZSwgRnVuY3Rpb25FeGVjdXRhYmxlKik7CiAKLSAgICBXZWFrR0NNYXA8SlNPYmplY3Qq
LCBKU09iamVjdD4gbV9wcm90b3R5cGVzOwotICAgIC8vIEZJWE1FOiBtYWtlIHRoZSBrZXkgYSBz
dHJ1Y3QuCi0gICAgdXNpbmcgU3RydWN0dXJlTWFwID0gV2Vha0dDTWFwPHN0ZDo6dHVwbGU8SlNP
YmplY3QqLCB1bnNpZ25lZCwgY29uc3QgQ2xhc3NJbmZvKiwgSlNHbG9iYWxPYmplY3QqPiwgU3Ry
dWN0dXJlPjsKKyAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gbV9wcm90b3R5cGVzOworICAgIHVzaW5n
IFN0cnVjdHVyZU1hcCA9IEhhc2hNYXA8UHJvdG90eXBlTWFwS2V5LCBTdHJ1Y3R1cmUqLCBEZWZh
dWx0SGFzaDxQcm90b3R5cGVNYXBLZXk+OjpIYXNoLCBIYXNoVHJhaXRzPFByb3RvdHlwZU1hcEtl
eT4+OwogICAgIFN0cnVjdHVyZU1hcCBtX3N0cnVjdHVyZXM7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXBJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwSW5saW5lcy5oCShy
ZXZpc2lvbiAyMjI5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5
cGVNYXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDExICs0NCw3IEBAIEFMV0FZU19J
TkxJTkUgVHJpU3RhdGUgUHJvdG90eXBlTWFwOjppc1AKIAogQUxXQVlTX0lOTElORSB2b2lkIFBy
b3RvdHlwZU1hcDo6YWRkUHJvdG90eXBlKEpTT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3Byb3RvdHlwZXMuYWRkKG9iamVjdCwgV2VhazxKU09iamVjdD4oKSk7Ci0g
ICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gV2VhazxKU09iamVjdD4ob2JqZWN0KTsKLSAgICBlbHNlCi0gICAgICAgIEFTU0VS
VChhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpID09IG9iamVjdCk7CisgICAgbV9wcm90
b3R5cGVzLmFkZChvYmplY3QpOwogCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIG1ha2Vz
IHRoZSBzb21ld2hhdCBvZGQgZGVjaXNpb24gdG8gbm90IGNoZWNrIGlmIHRoaXMKICAgICAvLyBv
YmplY3QgY3VycmVudGx5IGhhcyBpbmRleGVkIGFjY2Vzc29ycy4gV2UgY291bGQgZG8gdGhhdCBj
aGVjayBoZXJlLCBhbmQgaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323201</attachid>
            <date>2017-10-09 13:08:47 -0700</date>
            <delta_ts>2017-10-09 13:12:51 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>45869</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODU4LDcg
Kzg1OCw2IEBAIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCiBydW50aW1lL1Byb3Bl
cnR5RGVzY3JpcHRvci5jcHAKIHJ1bnRpbWUvUHJvcGVydHlTbG90LmNwcAogcnVudGltZS9Qcm9w
ZXJ0eVRhYmxlLmNwcAotcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCiBydW50aW1lL1Byb3h5Q29u
c3RydWN0b3IuY3BwCiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcAogcnVudGltZS9Qcm94eVJldm9r
ZS5jcHAKQEAgLTg5MSw2ICs4OTAsNyBAQCBydW50aW1lL1N0cmluZ09iamVjdC5jcHAKIHJ1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAogcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2VyLmNw
cAogcnVudGltZS9TdHJ1Y3R1cmUuY3BwCitydW50aW1lL1N0cnVjdHVyZUNhY2hlLmNwcAogcnVu
dGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKIHJ1bnRpbWUvU3RydWN0dXJlSURUYWJsZS5jcHAKIHJ1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczOSw3
ICs3MzksNiBAQAogCQkxNDczNDFENDFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFi
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzM0
MUQzMURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NzM0MUQ2MURDMDJFQjkwMEFB
MjlCQSAvKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3MzQxRDUxREMwMkVCOTAwQUEyOUJBIC8qIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQ3MzQxRDgxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0aW9uRXhlY3V0
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
MzQxRDcxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NzRDMzNCMTZBQTJEOTUw
MDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDc4
Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxlVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBI
YW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGlt
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMw
RTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3Qjg0NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1
dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMDY2LDYgKzEwNjUsNyBAQAogCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQg
LyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5
SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3
QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4MEMxNkQxRTNB
OTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODBDMTZCMUUzQTk0MEUwMEI3MTYx
NSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk4Njk0M0IxRjhDMEFDQzAwOTIzMkFFIC8qIFN0
cnVjdHVyZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLzsgfTsK
IAkJNzk4OTM3NzkxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3MzAwRjhE
NEZCIC8qIEpTRml4ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMDM5LDggKzMw
MzksNiBAQAogCQkxNEQyRjNEODEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2VkU3BhY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFy
a2VkU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkU3BhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1
IC8qIENMb29wU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0xvb3BT
dGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNEQ4NDRBMjE2QUEyQzcwMDBB
NjVBRjAgLyogUHJvdG90eXBlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByb3RvdHlwZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0
RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90eXBlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9IEFQSS90ZXN0
cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBODE4RTBEOTlG
RDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREQTgxOEYwRDk5RkQyMDAwQjBBNEZCIC8qIEpTTGV4aWNhbEVudmlyb25t
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTGV4aWNhbEVu
dmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MTEsNiArMzUw
OSw4IEBACiAJCTc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTgwQzE2QTFF
M0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNw
cDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVn
aXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBwYXRoID0gZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4Njk0MzkxRjhDMEFDNzAwOTIz
MkFFIC8qIFN0cnVjdHVyZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZUNh
Y2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4Njk0M0ExRjhDMEFDODAw
OTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUNhY2hl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRG
QiAvKiBKU0ZpeGVkQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNGaXhlZEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3
NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0ZpeGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0Iz
UENUb09yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjYwMSw4ICs2
NjAxLDYgQEAKIAkJCQlBRDFDRjA2ODE2RENBQjJEMDBCOTcxMjMgLyogUHJvcGVydHlUYWJsZS5j
cHAgKi8sCiAJCQkJNjVDMDJGQkIwNjM3NDYyQTAwM0U3RUU2IC8qIFByb3RlY3QuaCAqLywKIAkJ
CQkwRjc0QjkzQTFGODk2MTQ1MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggKi8sCi0JCQkJMTRE
ODQ0QTIxNkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5jcHAgKi8sCi0JCQkJMTREODQ0
QTMxNkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5oICovLAogCQkJCTc5QjAwQ0I4MUM2
QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQk3OUIwMENCOTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oICovLAogCQkJCTc5QjAwQ0JBMUM2
QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5jcHAgKi8sCkBAIC02Njc4LDYgKzY2NzYsOCBA
QAogCQkJCTkzMzQ1QTg4MTJEODM4QzQwMDMwMkJFMyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2Vy
LmggKi8sCiAJCQkJQkNERTNBQjAwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi8s
CiAJCQkJQkNERTNBQjEwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oICovLAorCQkJCTc5
ODY5NDM5MUY4QzBBQzcwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5jcHAgKi8sCisJCQkJNzk4
Njk0M0ExRjhDMEFDODAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggKi8sCiAJCQkJN0U0RUU3
MEUwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCAqLywKIAkJCQk3RTRFRTcw
ODBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQkyQUFBQTMxMDE4
QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggKi8sCkBAIC04OTM2LDcgKzg5MzYs
NiBAQAogCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc0QjkzQjFGODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBl
S2V5LmggaW4gSGVhZGVycyAqLywKLQkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJv
dG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzRFMDM1NjFFNTNCRURFMDAyMTNGNjQg
LyogUHJveHlhYmxlQWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlCMDBDQkQxQzZB
QjA3RTAwODhDNjVEIC8qIFByb3h5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5
QjAwQ0JGMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBA
IC04OTQ5LDYgKzg5NDgsNyBAQAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0
UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3
NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk4Njk0M0IxRjhD
MEFDQzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzM2
MzdBNjFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk2QjczMjMxQkRBMDhFRjAwMzMxQjg0IC8qIFJlZmxlY3RPYmplY3QubHV0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9u
IDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBp
bmxpbmUgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhCiAgICAgaWYgKHByb3RvdHlw
ZSA9PSBiYXNlU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAgICAgc3RydWN0dXJl
ID0gYmFzZVN0cnVjdHVyZTsKICAgICBlbHNlCi0gICAgICAgIHN0cnVjdHVyZSA9IHZtLnByb3Rv
dHlwZU1hcC5lbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlKTsKKyAgICAgICAgc3RydWN0dXJlID0g
dm0uc3RydWN0dXJlQ2FjaGUuZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVj
dHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZVN0cnVjdHVyZSk7CiAKICAgICAvLyBF
bnN1cmUgdGhhdCBpZiBhbm90aGVyIHRocmVhZCBzZWVzIHRoZSBzdHJ1Y3R1cmUsIGl0IHdpbGwg
c2VlIGl0IHByb3Blcmx5IGNyZWF0ZWQuCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlLmNwcAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMjIgKzQ5LDIwIEBAIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Omlu
aXRpYWxpemUKICAgICAgICAgLy8gfHRoaXN8IHZhbHVlczoKICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzc5MgogCisgICAgICAgIGlmIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGV4ZWN1dGFibGUtPmNhY2hlZFBvbHlQcm90b1N0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlw
ZSgpID09IEZpbmFsT2JqZWN0VHlwZSk7CisgICAgICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxw
dHI7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOwor
ICAgICAgICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGV4ZWN1dGFibGUg
PSBjb25zdHJ1Y3Rvci0+anNFeGVjdXRhYmxlKCk7CiAgICAgICAgIGlzUG9seVByb3RvID0gZmFs
c2U7CiAgICAgICAgIGlmIChPcHRpb25zOjpmb3JjZVBvbHlQcm90bygpKQogICAgICAgICAgICAg
aXNQb2x5UHJvdG8gPSB0cnVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpc1BvbHlQcm90
byA9IGV4ZWN1dGFibGUtPmVuc3VyZVBvbHlQcm90b1dhdGNocG9pbnQoKS5oYXNCZWVuSW52YWxp
ZGF0ZWQoKSAmJiBleGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5oYXNCZWVuSW52YWxp
ZGF0ZWQoKTsKLQotICAgICAgICBpZiAoaXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGV4ZWN1dGFibGUtPmNhY2hlZFBvbHlQcm90b1N0cnVjdHVy
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGUpOwotICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CiAgICAgfQogCiAgICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAw
OwpAQCAtMTEwLDcgKzEwOCw3IEBAIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6OmluaXRp
YWxpemUKICAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5s
aW5lQ2FwYWNpdHkoKTsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLnBy
b3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGlzUG9seVByb3RvKTsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHZtLnN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJv
dG90eXBlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSwgaXNQb2x5UHJv
dG8sIGV4ZWN1dGFibGUpOwogCiAgICAgaWYgKGlzUG9seVByb3RvKSB7CiAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUw
LDYgKzI1MCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGkKICAg
ICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0
cnVjdG9yKS0+cHJvdG90eXBlRm9yQ29uc3RydWN0aW9uKHZtLCBleGVjKTsKICAgICAgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBzdHJ1Y3R1cmUtPnBvbHlQcm90b09mZnNldCgpLCBwcm90
b3R5cGUpOwogICAgICAgICAgICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQcm90b3R5cGUoKTsKKyAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHJlc3Vs
dC0+aW5kZXhpbmdUeXBlKCkpLCAiV2UgcmVseSBvbiBKU0ZpbmFsT2JqZWN0IG5vdCBzdGFydGlu
ZyBvdXQgd2l0aCBhbiBpbmRleGluZyB0eXBlIG90aGVyd2lzZSB3ZSB3b3VsZCBwb3RlbnRpYWxs
eSBuZWVkIHRvIGNvbnZlcnQgdG8gc2xvdyBwdXQgc3RvcmFnZSIpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEzLDYgKzE0MTMsOCBAQCBORVZFUl9JTkxJTkUg
Ym9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvCiAgICAgICAgIAogICAgIGlmICh2bSgpLT50eXBl
UHJvZmlsZXIoKSkKICAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyKCktPmludmFsaWRhdGVUeXBl
U2V0Q2FjaGUoKTsKKworICAgIHZtKCktPnN0cnVjdHVyZUNhY2hlLnJlbW92ZURlYWRFbnRyaWVz
KCk7CiAgICAgICAgIAogICAgIHJlYXBXZWFrSGFuZGxlcygpOwogICAgIHBydW5lU3RhbGVFbnRy
aWVzRnJvbVdlYWtHQ01hcHMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUwLDYgKzI1MCw3IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhp
cykKICAgICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBjb25zdHJ1Y3Rvci0+cHJvdG90
eXBlRm9yQ29uc3RydWN0aW9uKHZtLCBleGVjKTsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBzdHJ1Y3R1cmUtPnBvbHlQcm90b09mZnNldCgpLCBwcm90b3R5cGUpOwogICAgICAg
ICAgICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQcm90b3R5cGUoKTsKKyAgICAgICAgICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHJlc3VsdC0+aW5kZXhpbmdUeXBl
KCkpLCAiV2UgcmVseSBvbiBKU0ZpbmFsT2JqZWN0IG5vdCBzdGFydGluZyBvdXQgd2l0aCBhbiBp
bmRleGluZyB0eXBlIG90aGVyd2lzZSB3ZSB3b3VsZCBwb3RlbnRpYWxseSBuZWVkIHRvIGNvbnZl
cnQgdG8gc2xvdyBwdXQgc3RvcmFnZSIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtb3Jk
aW5hcnljcmVhdGVmcm9tY29uc3RydWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMjMwNTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2wKICAgICAgICAgaWYgKEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFt
aWNDYXN0PEpTT2JqZWN0Kj4odm0sIHByb3RvdHlwZVZhbHVlKSkgewogICAgICAgICAgICAgLy8g
VGhpcyBvbmx5IGhhcHBlbnMgaWYgc29tZW9uZSBSZWZsZWN0LmNvbnN0cnVjdHMgb3VyIGJ1aWx0
aW4gY29uc3RydWN0b3Igd2l0aCBhbm90aGVyIGJ1aWx0aW4gY29uc3RydWN0b3IgYXMgdGhlIG5l
dy50YXJnZXQuCiAgICAgICAgICAgICAvLyBUaHVzLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBj
b3N0IG9mIGxvb2tpbmcgdXAgdGhlIHN0cnVjdHVyZSBmcm9tIG91ciBoYXNoIHRhYmxlIGV2ZXJ5
IHRpbWUuCi0gICAgICAgICAgICByZXR1cm4gdm0ucHJvdG90eXBlTWFwLmVtcHR5U3RydWN0dXJl
Rm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBiYXNlQ2xhc3MpOworICAgICAgICAgICAgcmV0dXJuIHZtLnN0cnVjdHVyZUNhY2hlLmVt
cHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUobGV4aWNhbEdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBiYXNlQ2xhc3MpOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3
LDcgQEAgc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IHZhbHVlUHJvcGVydAogCiBTdHJ1Y3R1
cmUqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBTdHJ1Y3R1cmUqIGl0ZXJhdG9yUmVzdWx0U3Ry
dWN0dXJlID0gdm0ucHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBl
KCZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSwgSlNGaW5hbE9i
amVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpOworICAgIFN0cnVjdHVyZSogaXRlcmF0b3JS
ZXN1bHRTdHJ1Y3R1cmUgPSB2bS5zdHJ1Y3R1cmVDYWNoZS5lbXB0eU9iamVjdFN0cnVjdHVyZUZv
clByb3RvdHlwZSgmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCks
IEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQ7CiAgICAgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3Bl
cnR5TmFtZXMtPmRvbmUsIDAsIG9mZnNldCk7CiAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09
IGRvbmVQcm9wZXJ0eU9mZnNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBpbmxpbmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9u
U3RydWN0CiAgICAgLy8gY3VycmVudGx5LiBXaG9ldmVyIHdvcmtzIG9uIGNhY2hpbmcgc3RydWN0
dXJlIGNoYW5nZXMgZm9yIHByb3RvdHlwZSB0cmFuc2lzdGlvbnMgc2hvdWxkIGNvbnNpZGVyIHRo
aXMgcHJvYmxlbSBhcyB3ZWxsLgogICAgIC8vIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MjczOAogICAgIGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBw
cm90b3R5cGUuZ2V0T2JqZWN0KCktPmdsb2JhbE9iamVjdCgpID09IGdsb2JhbE9iamVjdCkgewot
ICAgICAgICByZXN1bHQgPSB2bS5wcm90b3R5cGVNYXAuZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5
cGVGcm9tQmFzZVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZS5nZXRPYmplY3QoKSwg
cmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ID0gdm0uc3RydWN0dXJlQ2FjaGUuZW1wdHlTdHJ1Y3R1
cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZS5n
ZXRPYmplY3QoKSwgcmVzdWx0KTsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04ocmVzdWx0LT5nbG9iYWxPYmplY3QoKSA9PSBnbG9iYWxPYmplY3QpOwogICAgIH0gZWxz
ZQogICAgICAgICByZXN1bHQgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIHJlc3VsdC0+dHlwZUluZm8oKSwgcmVzdWx0LT5jbGFzc0luZm8oKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw3ICs0NTQsNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIo
dm0sIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMCwgbWFrZVN0cmluZygic2V0
ICIsIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90by5zdHJpbmcoKSksIGdsb2JhbEZ1
bmNQcm90b1NldHRlcikpOwogICAgIG1fb2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3ROb25JbmRl
eEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNj
ZXNzb3IsIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpE
b250RW51bSk7CiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS0+c3RydWN0dXJlKCktPnNldFByb3Rv
dHlwZVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSk7Ci0gICAg
bV9vYmplY3RTdHJ1Y3R1cmVGb3JPYmplY3RDb25zdHJ1Y3Rvci5zZXQodm0sIHRoaXMsIHZtLnBy
b3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZSh0aGlzLCBtX29iamVj
dFByb3RvdHlwZS5nZXQoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkp
KTsKKyAgICBtX29iamVjdFN0cnVjdHVyZUZvck9iamVjdENvbnN0cnVjdG9yLnNldCh2bSwgdGhp
cywgdm0uc3RydWN0dXJlQ2FjaGUuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUodGhp
cywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVD
YXBhY2l0eSgpKSk7CiAgICAgbV9vYmplY3RQcm90b1ZhbHVlT2ZGdW5jdGlvbi5zZXQodm0sIHRo
aXMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0UHJvdG90eXBlKCktPmdldERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZikpKTsKICAgICAKICAgICBKU0Z1bmN0aW9uKiB0aHJv
d2VyID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVu
Y1Rocm93VHlwZUVycm9yQXJndW1lbnRzQ2FsbGVlQW5kQ2FsbGVyKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJveHkuY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNyArNTEsNiBAQCB2b2lkIEpTUHJveHk6OnNldFRhcmdldChWTSYgdm0sIEpTR2xvYmFs
CiAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlzLCBnbG9iYWxPYmplY3QpOwogICAgIHNldFByb3Rv
dHlwZURpcmVjdCh2bSwgZ2xvYmFsT2JqZWN0LT5nZXRQcm90b3R5cGVEaXJlY3QoKSk7CiAKLSAg
ICBQcm90b3R5cGVNYXAmIHByb3RvdHlwZU1hcCA9IHZtLnByb3RvdHlwZU1hcDsKICAgICBpZiAo
IW1heUJlUHJvdG90eXBlKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjIsOCArNjEsOSBAQCB2
b2lkIEpTUHJveHk6OnNldFRhcmdldChWTSYgdm0sIEpTR2xvYmFsCiAgICAgLy8gVGhpcyBpcyBz
bG93IGJ1dCBjb25zdGFudCB0aW1lLiBXZSB0aGluayBpdCdzIHZlcnkgcmFyZSBmb3IgYSBwcm94
eQogICAgIC8vIHRvIGJlIGEgcHJvdG90eXBlLCBhbmQgcmVhc29uYWJseSByYXJlIHRvIHJldGFy
Z2V0IGEgcHJveHksCiAgICAgLy8gc28gc2xvdyBjb25zdGFudCB0aW1lIGlzIE9LLgorICAgIFN0
cnVjdHVyZUNhY2hlJiBzdHJ1Y3R1cmVDYWNoZSA9IHZtLnN0cnVjdHVyZUNhY2hlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCk7
ICsraSkKLSAgICAgICAgcHJvdG90eXBlTWFwLmNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQ
cm90b3R5cGUocHJldmlvdXNHbG9iYWxPYmplY3QsIHRoaXMsIGkpOworICAgICAgICBzdHJ1Y3R1
cmVDYWNoZS5jbGVhckVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKHByZXZpb3VzR2xv
YmFsT2JqZWN0LCB0aGlzLCBpKTsKIH0KIAogU3RyaW5nIEpTUHJveHk6OmNsYXNzTmFtZShjb25z
dCBKU09iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T2JqZWN0Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MCw4ICs3MCw4IEBAIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3Qo
RXgKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
OwotICAgIFByb3RvdHlwZU1hcCYgcHJvdG90eXBlTWFwID0gZ2xvYmFsT2JqZWN0LT52bSgpLnBy
b3RvdHlwZU1hcDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHByb3RvdHlwZU1hcC5lbXB0
eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgaW5s
aW5lQ2FwYWNpdHkpOworICAgIFN0cnVjdHVyZUNhY2hlJiBzdHJ1Y3R1cmVDYWNoZSA9IGdsb2Jh
bE9iamVjdC0+dm0oKS5zdHJ1Y3R1cmVDYWNoZTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3RvdHlwZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZUtleS5oCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVLZXkuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsOCArMzMsOCBAQCBjbGFzcyBQcm90b3R5cGVLZXkgewogcHVibGljOgogICAgIFByb3Rv
dHlwZUtleSgpIHsgfQogICAgIAotICAgIFByb3RvdHlwZUtleShKU09iamVjdCogcHJvdG90eXBl
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgICAgIDogbV9wcm90b3R5cGUocHJvdG90
eXBlKQorICAgIFByb3RvdHlwZUtleShKU0NlbGwqIHByb3RvdHlwZU9yRXhlY3V0YWJsZSwgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHksIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgICAgICA6IG1fcHJvdG90eXBlT3JFeGVjdXRhYmxl
KHByb3RvdHlwZU9yRXhlY3V0YWJsZSkKICAgICAgICAgLCBtX2lubGluZUNhcGFjaXR5KGlubGlu
ZUNhcGFjaXR5KQogICAgICAgICAsIG1fY2xhc3NJbmZvKGNsYXNzSW5mbykKICAgICAgICAgLCBt
X2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCkBAIC00NiwxNCArNDYsMTQgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAgICAgCi0gICAgSlNPYmplY3QqIHByb3RvdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvdG90eXBlOyB9CisgICAgSlNDZWxsKiBwcm90b3R5cGVPckV4ZWN1dGFibGUoKSBj
b25zdCB7IHJldHVybiBtX3Byb3RvdHlwZU9yRXhlY3V0YWJsZTsgfQogICAgIHVuc2lnbmVkIGlu
bGluZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVDYXBhY2l0eTsgfQogICAgIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc0luZm87IH0K
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxPYmplY3Q7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUHJvdG90eXBlS2V5
JiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb3RvdHlwZSA9PSBvdGhl
ci5tX3Byb3RvdHlwZQorICAgICAgICByZXR1cm4gbV9wcm90b3R5cGVPckV4ZWN1dGFibGUgPT0g
b3RoZXIubV9wcm90b3R5cGVPckV4ZWN1dGFibGUKICAgICAgICAgICAgICYmIG1faW5saW5lQ2Fw
YWNpdHkgPT0gb3RoZXIubV9pbmxpbmVDYXBhY2l0eQogICAgICAgICAgICAgJiYgbV9jbGFzc0lu
Zm8gPT0gb3RoZXIubV9jbGFzc0luZm8KICAgICAgICAgICAgICYmIG1fZ2xvYmFsT2JqZWN0ID09
IG90aGVyLm1fZ2xvYmFsT2JqZWN0OwpAQCAtNjUsMTMgKzY1LDE1IEBAIHB1YmxpYzoKICAgICAK
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6Oklu
dEhhc2g8dWludHB0cl90Pjo6aGFzaChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3Byb3RvdHlw
ZSkgXiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2NsYXNzSW5mbykgXiBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihtX2dsb2JhbE9iamVjdCkpICsgbV9pbmxpbmVDYXBhY2l0eTsKKyAgICAgICAg
cmV0dXJuIFdURjo6SW50SGFzaDx1aW50cHRyX3Q+OjpoYXNoKGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KG1fcHJvdG90eXBlT3JFeGVjdXRhYmxlKSBeIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1f
Y2xhc3NJbmZvKSBeIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fZ2xvYmFsT2JqZWN0KSkgKyBt
X2lubGluZUNhcGFjaXR5OwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgLy8gV0FSTklORzog
V2UgcmVxdWlyZSBhbGwgb2YgdGhlc2UgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgemVyby4gT3RoZXJ3
aXNlLCB5b3UnbGwgbmVlZCB0byBhZGQKICAgICAvLyAic3RhdGljIGNvbnN0IGJvb2wgZW1wdHlW
YWx1ZUlzWmVybyA9IGZhbHNlOyIgdG8gdGhlIEhhc2hUcmFpdHMgYXQgdGhlIGJvdHRvbSBvZiB0
aGlzIGZpbGUuCi0gICAgSlNPYmplY3QqIG1fcHJvdG90eXBlIHsgbnVsbHB0ciB9OworCisgICAg
Ly8gVGhpcyBpcyBhIEpTT2JqZWN0KiBwcm90b3R5cGUgd2hlbiBkb2luZyBtb25vIHByb3RvLiBJ
dCdzIGEgRnVuY3Rpb25FeGVjdXRhYmxlKiB3aGVuIGRvaW5nIHBvbHkgcHJvdG8uCisgICAgSlND
ZWxsKiBtX3Byb3RvdHlwZU9yRXhlY3V0YWJsZSB7IG51bGxwdHIgfTsgCiAgICAgdW5zaWduZWQg
bV9pbmxpbmVDYXBhY2l0eSB7IDAgfTsKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZv
IHsgbnVsbHB0ciB9OwogICAgIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51bGxw
dHIgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBl
TWFwLmNwcAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvdG90eXBlTWFwLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiUHJvdG90eXBlTWFwLmgiCi0KLSNpbmNsdWRlICJJbmRleGlu
Z1R5cGUuaCIKLSNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWlubGluZSBTdHJ1Y3R1cmUqIFByb3RvdHlwZU1h
cDo6Y3JlYXRlRW1wdHlTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5l
Q2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSkKLXsKLSAgICBSRUxFQVNFX0FT
U0VSVCghIXByb3RvdHlwZSk7IC8vIFdlIHVzZSBudWxscHRyIGluc2lkZSB0aGUgSGFzaE1hcCBm
b3IgcHJvdG90eXBlIHRvIG1lYW4gcG9seSBwcm90bywgc28gdXNlcidzIG9mIHRoaXMgQVBJIG11
c3QgcHJvdmlkZSBub24tbnVsbCBwcm90b3R5cGVzLgotCi0gICAgYXV0byBrZXkgPSBQcm90b3R5
cGVLZXkobWFrZVBvbHlQcm90b1N0cnVjdHVyZSA/IG51bGxwdHIgOiBwcm90b3R5cGUsIGlubGlu
ZUNhcGFjaXR5LCBjbGFzc0luZm8sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbV9zdHJ1Y3R1cmVzLmdldChrZXkpKSB7Ci0gICAgICAgIGlmIChtYWtlUG9s
eVByb3RvU3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3Rv
dHlwZSgpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJv
dG8oKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0
dXJlLT5oYXNNb25vUHJvdG8oKSk7Ci0gICAgICAgIEFTU0VSVChwcm90b3R5cGUtPm1heUJlUHJv
dG90eXBlKCkpOwotICAgICAgICByZXR1cm4gc3RydWN0dXJlOwotICAgIH0KLQotICAgIHByb3Rv
dHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7Ci0KLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7Ci0gICAgaWYgKG1ha2VQb2x5UHJvdG9T
dHJ1Y3R1cmUpIHsKLSAgICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpjcmVhdGUoCi0gICAg
ICAgICAgICBTdHJ1Y3R1cmU6OlBvbHlQcm90bywgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCB0eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSgKLSAgICAg
ICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywg
aW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7Ci0gICAgfQotICAgIG1fc3RydWN0dXJlcy5z
ZXQoa2V5LCBXZWFrPFN0cnVjdHVyZT4oc3RydWN0dXJlKSk7Ci0KLSAgICByZXR1cm4gc3RydWN0
dXJlOwotfQotCi1TdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6ZW1wdHlTdHJ1Y3R1cmVGb3JQcm90
b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09i
amVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpCi17Ci0gICAgLy8gV2Ug
Y3VycmVudGx5IGRvIG5vdCBoYXZlIGlubGluZSBjYXBhY2l0eSBzdGF0aWMgYW5hbHlzaXMgZm9y
IHN1YmNsYXNzZXMgYW5kIGFsbCBpbnRlcm5hbCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnMgaGF2ZSBh
IGRlZmF1bHQgaW5saW5lIGNhcGFjaXR5IG9mIDAuCi0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5n
VHlwZSA9IGJhc2VTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpOwotICAgIGlmIChwcm90b3R5cGUt
PmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSAmJiBoYXNJbmRl
eGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUpKQotICAgICAgICBpbmRleGluZ1R5cGUgPSAoaW5k
ZXhpbmdUeXBlICYgfkluZGV4aW5nU2hhcGVNYXNrKSB8IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFw
ZTsKLQotICAgIHJldHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgYmFzZVN0cnVjdHVyZS0+dHlwZUluZm8oKSwgYmFzZVN0cnVjdHVyZS0+Y2xhc3NJbmZv
KCksIGluZGV4aW5nVHlwZSwgMCwgZmFsc2UpOwotfQotCi1TdHJ1Y3R1cmUqIFByb3RvdHlwZU1h
cDo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJv
b2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTRmluYWxPYmplY3Q6OnR5cGVJbmZvKCks
IEpTRmluYWxPYmplY3Q6OmluZm8oKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdEluZGV4aW5nVHlw
ZSwgaW5saW5lQ2FwYWNpdHksIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpOwotfQotCi12b2lkIFBy
b3RvdHlwZU1hcDo6Y2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBpbmxpbmVD
YXBhY2l0eSkKLXsKLSAgICBtX3N0cnVjdHVyZXMucmVtb3ZlKFByb3RvdHlwZUtleShvYmplY3Qs
IGlubGluZUNhcGFjaXR5LCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIGdsb2JhbE9iamVjdCkpOwot
ICAgIG1fc3RydWN0dXJlcy5yZW1vdmUoUHJvdG90eXBlS2V5KG51bGxwdHIsIGlubGluZUNhcGFj
aXR5LCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIGdsb2JhbE9iamVjdCkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlw
ZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Rv
dHlwZU1hcC5oCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm90b3R5cGVNYXAuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgotI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIK
LSNpbmNsdWRlICJQcm90b3R5cGVLZXkuaCIKLSNpbmNsdWRlICJXZWFrR0NNYXAuaCIKLSNpbmNs
dWRlIDx3dGYvVHJpU3RhdGUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTR2xvYmFs
T2JqZWN0OwotY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTdHJ1Y3R1cmU7Ci1jbGFzcyBWTTsKLQot
Ly8gVHJhY2tzIHRoZSBjYW5vbmljYWwgc3RydWN0dXJlIGFuIG9iamVjdCBzaG91bGQgYmUgYWxs
b2NhdGVkIHdpdGggd2hlbiBpbmhlcml0aW5nIGZyb20gYSBnaXZlbiBwcm90b3R5cGUuCi1jbGFz
cyBQcm90b3R5cGVNYXAgewotcHVibGljOgotICAgIGV4cGxpY2l0IFByb3RvdHlwZU1hcChWTSYg
dm0pCi0gICAgICAgIDogbV9zdHJ1Y3R1cmVzKHZtKQotICAgIHsKLSAgICB9Ci0KLSAgICBKU19F
WFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBl
KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9v
bCBtYWtlUG9seVByb3RvU3RydWN0dXJlID0gZmFsc2UpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IFN0cnVjdHVyZSogZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShK
U0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgU3RydWN0dXJlKik7Ci0gICAgdm9pZCBjbGVhckVt
cHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSk7Ci0KLXByaXZhdGU6Ci0gICAgU3RydWN0dXJlKiBj
cmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBwcm90b3R5cGUs
IGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlKTsKLQotICAgIHVz
aW5nIFN0cnVjdHVyZU1hcCA9IFdlYWtHQ01hcDxQcm90b3R5cGVLZXksIFN0cnVjdHVyZT47Ci0g
ICAgU3RydWN0dXJlTWFwIG1fc3RydWN0dXJlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hl
LmNwcAkocmV2aXNpb24gMjIzMDU1KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm90b3R5cGVNYXAuY3BwOjIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3RvdHlwZU1hcC5oIgorCisjaW5jbHVkZSAiSW5k
ZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgU3RydWN0dXJlKiBQcm90b3R5
cGVNYXA6OmNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlu
bGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoISFwcm90b3R5cGUpOyAvLyBXZSB1c2UgbnVsbHB0ciBpbnNpZGUgdGhlIEhhc2hN
YXAgZm9yIHByb3RvdHlwZSB0byBtZWFuIHBvbHkgcHJvdG8sIHNvIHVzZXIncyBvZiB0aGlzIEFQ
SSBtdXN0IHByb3ZpZGUgbm9uLW51bGwgcHJvdG90eXBlcy4KKworICAgIGF1dG8ga2V5ID0gUHJv
dG90eXBlS2V5KG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUgPyBudWxscHRyIDogcHJvdG90eXBlLCBp
bmxpbmVDYXBhY2l0eSwgY2xhc3NJbmZvLCBnbG9iYWxPYmplY3QpOworICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1fc3RydWN0dXJlcy5nZXQoa2V5KSkgeworICAgICAgICBpZiAobWFr
ZVBvbHlQcm90b1N0cnVjdHVyZSkgeworICAgICAgICAgICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQ
cm90b3R5cGUoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZS0+aGFzUG9s
eVByb3RvKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0
cnVjdHVyZS0+aGFzTW9ub1Byb3RvKCkpOworICAgICAgICBBU1NFUlQocHJvdG90eXBlLT5tYXlC
ZVByb3RvdHlwZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICB9CisKKyAgICBw
cm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOworCisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOworICAgIGlmIChtYWtlUG9seVBy
b3RvU3RydWN0dXJlKSB7CisgICAgICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6Y3JlYXRlKAor
ICAgICAgICAgICAgU3RydWN0dXJlOjpQb2x5UHJvdG8sIHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpjcmVhdGUoCisg
ICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0lu
Zm8sIGluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIH0KKyAgICBtX3N0cnVjdHVy
ZXMuc2V0KGtleSwgV2VhazxTdHJ1Y3R1cmU+KHN0cnVjdHVyZSkpOworCisgICAgcmV0dXJuIHN0
cnVjdHVyZTsKK30KKworU3RydWN0dXJlKiBQcm90b3R5cGVNYXA6OmVtcHR5U3RydWN0dXJlRm9y
UHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIHByb3RvdHlwZSwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlKQoreworICAgIC8v
IFdlIGN1cnJlbnRseSBkbyBub3QgaGF2ZSBpbmxpbmUgY2FwYWNpdHkgc3RhdGljIGFuYWx5c2lz
IGZvciBzdWJjbGFzc2VzIGFuZCBhbGwgaW50ZXJuYWwgZnVuY3Rpb24gY29uc3RydWN0b3JzIGhh
dmUgYSBkZWZhdWx0IGlubGluZSBjYXBhY2l0eSBvZiAwLgorICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBiYXNlU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKKyAgICBpZiAocHJvdG90
eXBlLT5hbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgJiYgaGFz
SW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKSkKKyAgICAgICAgaW5kZXhpbmdUeXBlID0g
KGluZGV4aW5nVHlwZSAmIH5JbmRleGluZ1NoYXBlTWFzaykgfCBTbG93UHV0QXJyYXlTdG9yYWdl
U2hhcGU7CisKKyAgICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIGJhc2VTdHJ1Y3R1cmUtPnR5cGVJbmZvKCksIGJhc2VTdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLCBpbmRleGluZ1R5cGUsIDAsIGZhbHNlKTsKK30KKworU3RydWN0dXJlKiBQcm90b3R5
cGVNYXA6OmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5
U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0ZpbmFsT2JqZWN0Ojp0eXBlSW5m
bygpLCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmRleGlu
Z1R5cGUsIGlubGluZUNhcGFjaXR5LCBtYWtlUG9seVByb3RvU3RydWN0dXJlKTsKK30KKwordm9p
ZCBQcm90b3R5cGVNYXA6OmNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHkpCit7CisgICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShQcm90b3R5cGVLZXkob2Jq
ZWN0LCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBnbG9iYWxPYmplY3Qp
KTsKKyAgICBtX3N0cnVjdHVyZXMucmVtb3ZlKFByb3RvdHlwZUtleShudWxscHRyLCBpbmxpbmVD
YXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBnbG9iYWxPYmplY3QpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUHJvdG90
eXBlTWFwLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKIAogI2luY2x1ZGUgIkluZGV4
aW5nVHlwZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBAIC0zMiwxMSArMzIsMTEg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBTdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6
Y3JlYXRlRW1wdHlTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2Fw
YWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSkKK2lubGluZSBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZUNhY2hlOjpjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8sIGNv
bnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlLCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlLCBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFwcm90b3R5
cGUpOyAvLyBXZSB1c2UgbnVsbHB0ciBpbnNpZGUgdGhlIEhhc2hNYXAgZm9yIHByb3RvdHlwZSB0
byBtZWFuIHBvbHkgcHJvdG8sIHNvIHVzZXIncyBvZiB0aGlzIEFQSSBtdXN0IHByb3ZpZGUgbm9u
LW51bGwgcHJvdG90eXBlcy4KKyAgICBSRUxFQVNFX0FTU0VSVCghIXByb3RvdHlwZSk7CiAKLSAg
ICBhdXRvIGtleSA9IFByb3RvdHlwZUtleShtYWtlUG9seVByb3RvU3RydWN0dXJlID8gbnVsbHB0
ciA6IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGNsYXNzSW5mbywgZ2xvYmFsT2JqZWN0KTsK
KyAgICBQcm90b3R5cGVLZXkga2V5IHsgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSA/IHN0YXRpY19j
YXN0PEpTQ2VsbCo+KGV4ZWN1dGFibGUpIDogc3RhdGljX2Nhc3Q8SlNDZWxsKj4ocHJvdG90eXBl
KSwgaW5saW5lQ2FwYWNpdHksIGNsYXNzSW5mbywgZ2xvYmFsT2JqZWN0IH07CiAgICAgaWYgKFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdHJ1Y3R1cmVzLmdldChrZXkpKSB7CiAgICAgICAgIGlm
IChtYWtlUG9seVByb3RvU3RydWN0dXJlKSB7CiAgICAgICAgICAgICBwcm90b3R5cGUtPmRpZEJl
Y29tZVByb3RvdHlwZSgpOwpAQCAtNTgsMzAgKzU4LDQxIEBAIGlubGluZSBTdHJ1Y3R1cmUqIFBy
b3RvdHlwZU1hcDo6Y3JlYXRlRW0KICAgICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpjcmVh
dGUoCiAgICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBj
bGFzc0luZm8sIGluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwogICAgIH0KLSAgICBtX3N0
cnVjdHVyZXMuc2V0KGtleSwgV2VhazxTdHJ1Y3R1cmU+KHN0cnVjdHVyZSkpOworICAgIG1fc3Ry
dWN0dXJlcy5zZXQoa2V5LCBzdHJ1Y3R1cmUpOwogCiAgICAgcmV0dXJuIHN0cnVjdHVyZTsKIH0K
IAotU3RydWN0dXJlKiBQcm90b3R5cGVNYXA6OmVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJv
bUJhc2VTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHBy
b3RvdHlwZSwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmVD
YWNoZTo6ZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJh
c2VTdHJ1Y3R1cmUpCiB7CiAgICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBoYXZlIGlubGluZSBj
YXBhY2l0eSBzdGF0aWMgYW5hbHlzaXMgZm9yIHN1YmNsYXNzZXMgYW5kIGFsbCBpbnRlcm5hbCBm
dW5jdGlvbiBjb25zdHJ1Y3RvcnMgaGF2ZSBhIGRlZmF1bHQgaW5saW5lIGNhcGFjaXR5IG9mIDAu
CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGJhc2VTdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpOwogICAgIGlmIChwcm90b3R5cGUtPmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSAmJiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUpKQog
ICAgICAgICBpbmRleGluZ1R5cGUgPSAoaW5kZXhpbmdUeXBlICYgfkluZGV4aW5nU2hhcGVNYXNr
KSB8IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZTsKIAotICAgIHJldHVybiBjcmVhdGVFbXB0eVN0
cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZVN0cnVjdHVyZS0+dHlwZUluZm8o
KSwgYmFzZVN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGluZGV4aW5nVHlwZSwgMCwgZmFsc2UpOwor
ICAgIHJldHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
YmFzZVN0cnVjdHVyZS0+dHlwZUluZm8oKSwgYmFzZVN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlu
ZGV4aW5nVHlwZSwgMCwgZmFsc2UsIG51bGxwdHIpOwogfQogCi1TdHJ1Y3R1cmUqIFByb3RvdHlw
ZU1hcDo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHks
IGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlQ2FjaGU6
OmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29s
IG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkK
IHsKLSAgICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTRmluYWxPYmplY3Q6OnR5cGVJbmZvKCksIEpTRmluYWxPYmplY3Q6OmluZm8oKSwgSlNG
aW5hbE9iamVjdDo6ZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHksIG1ha2VQb2x5
UHJvdG9TdHJ1Y3R1cmUpOworICAgIHJldHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNGaW5hbE9iamVjdDo6dHlwZUluZm8oKSwgSlNGaW5hbE9iamVj
dDo6aW5mbygpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBh
Y2l0eSwgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSwgZXhlY3V0YWJsZSk7CiB9CiAKLXZvaWQgUHJv
dG90eXBlTWFwOjpjbGVhckVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIGlubGluZUNh
cGFjaXR5KQordm9pZCBTdHJ1Y3R1cmVDYWNoZTo6Y2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZv
clByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKIHsKLSAgICBtX3N0cnVjdHVyZXMucmVtb3ZlKFBy
b3RvdHlwZUtleShvYmplY3QsIGlubGluZUNhcGFjaXR5LCBKU0ZpbmFsT2JqZWN0OjppbmZvKCks
IGdsb2JhbE9iamVjdCkpOwotICAgIG1fc3RydWN0dXJlcy5yZW1vdmUoUHJvdG90eXBlS2V5KG51
bGxwdHIsIGlubGluZUNhcGFjaXR5LCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIGdsb2JhbE9iamVj
dCkpOworICAgIG1fc3RydWN0dXJlcy5yZW1vdmUoUHJvdG90eXBlS2V5IHsgb2JqZWN0LCBpbmxp
bmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBnbG9iYWxPYmplY3QgfSk7Cit9CisK
K3ZvaWQgU3RydWN0dXJlQ2FjaGU6OnJlbW92ZURlYWRFbnRyaWVzKCkKK3sKKyAgICBtX3N0cnVj
dHVyZXMucmVtb3ZlSWYoWyZdIChhdXRvJiBlbnRyeSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHN0cnVj
dHVyZSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY29uc3QgUHJvdG90eXBl
S2V5JiBrZXkgPSBlbnRyeS5rZXk7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoSGVhcDo6
aXNNYXJrZWQoa2V5Lmdsb2JhbE9iamVjdCgpKSwgIldlIHJlbHkgb24gdGhlIHN0cnVjdHVyZSBr
ZWVwaW5nIGFsaXZlIHRoZSBnbG9iYWwgb2JqZWN0LiIpOworICAgICAgICByZXR1cm4gIUhlYXA6
OmlzTWFya2VkKGtleS5wcm90b3R5cGVPckV4ZWN1dGFibGUoKSk7CisgICAgfSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVDYWNoZS5oCShyZXZpc2lvbiAyMjMwNTUpCShmcm9tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5oOjIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAi
SlNUeXBlSW5mby5oIgorI2luY2x1ZGUgIlByb3RvdHlwZUtleS5oIgorI2luY2x1ZGUgIldlYWtH
Q01hcC5oIgorI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFzcyBKU09iamVjdDsKK2NsYXNzIFN0cnVjdHVyZTsK
K2NsYXNzIFZNOworCisvLyBUcmFja3MgdGhlIGNhbm9uaWNhbCBzdHJ1Y3R1cmUgYW4gb2JqZWN0
IHNob3VsZCBiZSBhbGxvY2F0ZWQgd2l0aCB3aGVuIGluaGVyaXRpbmcgZnJvbSBhIGdpdmVuIHBy
b3RvdHlwZS4KK2NsYXNzIFByb3RvdHlwZU1hcCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUHJv
dG90eXBlTWFwKFZNJiB2bSkKKyAgICAgICAgOiBtX3N0cnVjdHVyZXModm0pCisgICAgeworICAg
IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSogZW1wdHlPYmplY3RTdHJ1Y3R1
cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGlubGlu
ZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUgPSBmYWxzZSk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBlbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21C
YXNlU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAg
ICB2b2lkIGNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KTsKKworcHJpdmF0ZToKKyAg
ICBTdHJ1Y3R1cmUqIGNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmpl
Y3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGlu
Z1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1
cmUpOworCisgICAgdXNpbmcgU3RydWN0dXJlTWFwID0gV2Vha0dDTWFwPFByb3RvdHlwZUtleSwg
U3RydWN0dXJlPjsKKyAgICBTdHJ1Y3R1cmVNYXAgbV9zdHJ1Y3R1cmVzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZUNhY2hlLmgJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYg
QEAKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAj
aW5jbHVkZSAiUHJvdG90eXBlS2V5LmgiCi0jaW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVk
ZSA8d3RmL1RyaVN0YXRlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzksMjEgKzM4LDIwIEBA
IGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFZNOwogCiAvLyBUcmFja3MgdGhlIGNhbm9uaWNhbCBz
dHJ1Y3R1cmUgYW4gb2JqZWN0IHNob3VsZCBiZSBhbGxvY2F0ZWQgd2l0aCB3aGVuIGluaGVyaXRp
bmcgZnJvbSBhIGdpdmVuIHByb3RvdHlwZS4KLWNsYXNzIFByb3RvdHlwZU1hcCB7CitjbGFzcyBT
dHJ1Y3R1cmVDYWNoZSB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUHJvdG90eXBlTWFwKFZNJiB2
bSkKLSAgICAgICAgOiBtX3N0cnVjdHVyZXModm0pCi0gICAgewotICAgIH0KKyAgICBTdHJ1Y3R1
cmVDYWNoZSgpID0gZGVmYXVsdDsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSog
ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCosIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUg
PSBmYWxzZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBlbXB0eU9iamVjdFN0
cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSA9IGZhbHNlLCBGdW5j
dGlvbkV4ZWN1dGFibGUqID0gbnVsbHB0cik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0
dXJlKiBlbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGNsZWFyRW1wdHlPYmpl
Y3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2ln
bmVkIGlubGluZUNhcGFjaXR5KTsKKyAgICAKKyAgICB2b2lkIHJlbW92ZURlYWRFbnRyaWVzKCk7
CiAKIHByaXZhdGU6Ci0gICAgU3RydWN0dXJlKiBjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xh
c3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtl
UG9seVByb3RvU3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUVtcHR5U3RydWN0dXJl
KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBj
b25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBi
b29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSopOwogCi0gICAg
dXNpbmcgU3RydWN0dXJlTWFwID0gV2Vha0dDTWFwPFByb3RvdHlwZUtleSwgU3RydWN0dXJlPjsK
KyAgICB1c2luZyBTdHJ1Y3R1cmVNYXAgPSBIYXNoTWFwPFByb3RvdHlwZUtleSwgU3RydWN0dXJl
Kj47CiAgICAgU3RydWN0dXJlTWFwIG1fc3RydWN0dXJlczsKIH07CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw2
IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIGN1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uTWFwKCp0aGlzKQogICAgICwgc3RyaW5nQ2FjaGUoKnRoaXMp
CiAgICAgLCBzeW1ib2xJbXBsVG9TeW1ib2xNYXAoKnRoaXMpCi0gICAgLCBwcm90b3R5cGVNYXAo
KnRoaXMpCiAgICAgLCBpbnRlcnByZXRlcigwKQogICAgICwgZW50cnlTY29wZSgwKQogICAgICwg
bV9yZWdFeHBDYWNoZShuZXcgUmVnRXhwQ2FjaGUodGhpcykpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJNaWNyb3Rhc2suaCIKICNpbmNs
dWRlICJOdW1lcmljU3RyaW5ncy5oIgotI2luY2x1ZGUgIlByb3RvdHlwZU1hcC5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZUNhY2hlLmgiCiAjaW5jbHVkZSAiU21hbGxTdHJpbmdzLmgiCiAjaW5jbHVk
ZSAiU3Ryb25nLmgiCiAjaW5jbHVkZSAiU3Vic3BhY2UuaCIKQEAgLTU2LDYgKzU2LDcgQEAKICNp
bmNsdWRlICJWTUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSAiVk1UcmFwcy5oIgogI2luY2x1ZGUg
IldhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJXZWFrR0NNYXAuaCIKICNpbmNsdWRlIDx3dGYvQnVt
cFBvaW50ZXJBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4K
ICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KQEAgLTQ2NCw3ICs0NjUsNyBAQCBwdWJsaWM6CiAg
ICAgU291cmNlUHJvdmlkZXJDYWNoZSogYWRkU291cmNlUHJvdmlkZXJDYWNoZShTb3VyY2VQcm92
aWRlciopOwogICAgIHZvaWQgY2xlYXJTb3VyY2VQcm92aWRlckNhY2hlcygpOwogCi0gICAgUHJv
dG90eXBlTWFwIHByb3RvdHlwZU1hcDsKKyAgICBTdHJ1Y3R1cmVDYWNoZSBzdHJ1Y3R1cmVDYWNo
ZTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8U291cmNlUHJvdmlkZXI+LCBSZWZQdHI8
U291cmNlUHJvdmlkZXJDYWNoZT4+IFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA7CiAgICAgU291cmNl
UHJvdmlkZXJDYWNoZU1hcCBzb3VyY2VQcm92aWRlckNhY2hlTWFwOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323205</attachid>
            <date>2017-10-09 13:12:51 -0700</date>
            <delta_ts>2017-10-09 15:04:40 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>45844</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODU4LDcg
Kzg1OCw2IEBAIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCiBydW50aW1lL1Byb3Bl
cnR5RGVzY3JpcHRvci5jcHAKIHJ1bnRpbWUvUHJvcGVydHlTbG90LmNwcAogcnVudGltZS9Qcm9w
ZXJ0eVRhYmxlLmNwcAotcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCiBydW50aW1lL1Byb3h5Q29u
c3RydWN0b3IuY3BwCiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcAogcnVudGltZS9Qcm94eVJldm9r
ZS5jcHAKQEAgLTg5MSw2ICs4OTAsNyBAQCBydW50aW1lL1N0cmluZ09iamVjdC5jcHAKIHJ1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAogcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2VyLmNw
cAogcnVudGltZS9TdHJ1Y3R1cmUuY3BwCitydW50aW1lL1N0cnVjdHVyZUNhY2hlLmNwcAogcnVu
dGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKIHJ1bnRpbWUvU3RydWN0dXJlSURUYWJsZS5jcHAKIHJ1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczOSw3
ICs3MzksNiBAQAogCQkxNDczNDFENDFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFi
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzM0
MUQzMURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NzM0MUQ2MURDMDJFQjkwMEFB
MjlCQSAvKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3MzQxRDUxREMwMkVCOTAwQUEyOUJBIC8qIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQ3MzQxRDgxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0aW9uRXhlY3V0
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
MzQxRDcxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NzRDMzNCMTZBQTJEOTUw
MDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDc4
Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxlVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBI
YW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGlt
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMw
RTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3Qjg0NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1
dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMDY2LDYgKzEwNjUsNyBAQAogCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQg
LyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5
SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3
QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4MEMxNkQxRTNB
OTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODBDMTZCMUUzQTk0MEUwMEI3MTYx
NSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk4Njk0M0IxRjhDMEFDQzAwOTIzMkFFIC8qIFN0
cnVjdHVyZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLzsgfTsK
IAkJNzk4OTM3NzkxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk4OTM3NzcxRENBQjU3MzAwRjhE
NEZCIC8qIEpTRml4ZWRBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMDM5LDggKzMw
MzksNiBAQAogCQkxNEQyRjNEODEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFya2VkU3BhY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEgLyogTWFy
a2VkU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkU3BhY2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRENzkyNjQwREFBMDNGQjAwMUE5RjA1
IC8qIENMb29wU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0xvb3BT
dGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNEQ4NDRBMjE2QUEyQzcwMDBB
NjVBRjAgLyogUHJvdG90eXBlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByb3RvdHlwZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0
RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHJvdG90eXBlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBuYW1lID0gdGVzdGFwaS5qczsgcGF0aCA9IEFQSS90ZXN0
cy90ZXN0YXBpLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBODE4RTBEOTlG
RDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREQTgxOEYwRDk5RkQyMDAwQjBBNEZCIC8qIEpTTGV4aWNhbEVudmlyb25t
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTGV4aWNhbEVu
dmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MTEsNiArMzUw
OSw4IEBACiAJCTc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGlj
YWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTgwQzE2QTFF
M0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNw
cDsgcGF0aCA9IGRmZy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVn
aXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBwYXRoID0gZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4Njk0MzkxRjhDMEFDNzAwOTIz
MkFFIC8qIFN0cnVjdHVyZUNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cnVjdHVyZUNh
Y2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk4Njk0M0ExRjhDMEFDODAw
OTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUNhY2hl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODkzNzc2MURDQUI1NzMwMEY4RDRG
QiAvKiBKU0ZpeGVkQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNGaXhlZEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3
NzcxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0ZpeGVkQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0Iz
UENUb09yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjYwMSw4ICs2
NjAxLDYgQEAKIAkJCQlBRDFDRjA2ODE2RENBQjJEMDBCOTcxMjMgLyogUHJvcGVydHlUYWJsZS5j
cHAgKi8sCiAJCQkJNjVDMDJGQkIwNjM3NDYyQTAwM0U3RUU2IC8qIFByb3RlY3QuaCAqLywKIAkJ
CQkwRjc0QjkzQTFGODk2MTQ1MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggKi8sCi0JCQkJMTRE
ODQ0QTIxNkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5jcHAgKi8sCi0JCQkJMTREODQ0
QTMxNkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5oICovLAogCQkJCTc5QjAwQ0I4MUM2
QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQk3OUIwMENCOTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oICovLAogCQkJCTc5QjAwQ0JBMUM2
QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5jcHAgKi8sCkBAIC02Njc4LDYgKzY2NzYsOCBA
QAogCQkJCTkzMzQ1QTg4MTJEODM4QzQwMDMwMkJFMyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2Vy
LmggKi8sCiAJCQkJQkNERTNBQjAwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgKi8s
CiAJCQkJQkNERTNBQjEwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oICovLAorCQkJCTc5
ODY5NDM5MUY4QzBBQzcwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5jcHAgKi8sCisJCQkJNzk4
Njk0M0ExRjhDMEFDODAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggKi8sCiAJCQkJN0U0RUU3
MEUwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCAqLywKIAkJCQk3RTRFRTcw
ODBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCAqLywKIAkJCQkyQUFBQTMxMDE4
QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggKi8sCkBAIC04OTM2LDcgKzg5MzYs
NiBAQAogCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc0QjkzQjFGODk2MTQ4MDBCOTM1RDMgLyogUHJvdG90eXBl
S2V5LmggaW4gSGVhZGVycyAqLywKLQkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJv
dG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzRFMDM1NjFFNTNCRURFMDAyMTNGNjQg
LyogUHJveHlhYmxlQWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlCMDBDQkQxQzZB
QjA3RTAwODhDNjVEIC8qIFByb3h5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5
QjAwQ0JGMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBA
IC04OTQ5LDYgKzg5NDgsNyBAQAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0
UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3
NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk4Njk0M0IxRjhD
MEFDQzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzM2
MzdBNjFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk2QjczMjMxQkRBMDhFRjAwMzMxQjg0IC8qIFJlZmxlY3RPYmplY3QubHV0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkE3QThFQzE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggaW4gSGVhZGVy
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9u
IDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRlcm5hbEZ1bmN0
aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBp
bmxpbmUgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhCiAgICAgaWYgKHByb3RvdHlw
ZSA9PSBiYXNlU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSkKICAgICAgICAgc3RydWN0dXJl
ID0gYmFzZVN0cnVjdHVyZTsKICAgICBlbHNlCi0gICAgICAgIHN0cnVjdHVyZSA9IHZtLnByb3Rv
dHlwZU1hcC5lbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlKTsKKyAgICAgICAgc3RydWN0dXJlID0g
dm0uc3RydWN0dXJlQ2FjaGUuZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVj
dHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZVN0cnVjdHVyZSk7CiAKICAgICAvLyBF
bnN1cmUgdGhhdCBpZiBhbm90aGVyIHRocmVhZCBzZWVzIHRoZSBzdHJ1Y3R1cmUsIGl0IHdpbGwg
c2VlIGl0IHByb3Blcmx5IGNyZWF0ZWQuCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlLmNwcAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsMjEgKzUwLDIwIEBAIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Omlu
aXRpYWxpemUKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3Nzc5MgogCiAgICAgICAgIGV4ZWN1dGFibGUgPSBjb25zdHJ1Y3Rvci0+anNFeGVjdXRh
YmxlKCk7CisKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhlY3V0YWJsZS0+
Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRmluYWxPYmplY3RUeXBlKTsKKyAgICAg
ICAgICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLnNl
dCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX2lubGluZUNhcGFjaXR5ID0g
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKICAgICAgICAgaXNQb2x5UHJvdG8gPSBmYWxzZTsKICAgICAgICAgaWYgKE9wdGlvbnM6
OmZvcmNlUG9seVByb3RvKCkpCiAgICAgICAgICAgICBpc1BvbHlQcm90byA9IHRydWU7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGlzUG9seVByb3RvID0gZXhlY3V0YWJsZS0+ZW5zdXJlUG9s
eVByb3RvV2F0Y2hwb2ludCgpLmhhc0JlZW5JbnZhbGlkYXRlZCgpICYmIGV4ZWN1dGFibGUtPnNp
bmdsZXRvbkZ1bmN0aW9uKCktPmhhc0JlZW5JbnZhbGlkYXRlZCgpOwotCi0gICAgICAgIGlmIChp
c1BvbHlQcm90bykgewotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZXhl
Y3V0YWJsZS0+Y2FjaGVkUG9seVByb3RvU3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IEZpbmFsT2JqZWN0
VHlwZSk7Ci0gICAgICAgICAgICAgICAgbV9hbGxvY2F0b3IgPSBudWxscHRyOwotICAgICAgICAg
ICAgICAgIG1fc3RydWN0dXJlLnNldCh2bSwgb3duZXIsIHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9CiAK
ICAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDA7CkBAIC0xMTAsNyArMTA5LDcgQEAgdm9p
ZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZQogICAgICAgICAgICAgaW5saW5l
Q2FwYWNpdHkgPSBKU0ZpbmFsT2JqZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpOwogICAgIH0KIAot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0ucHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3Ry
dWN0dXJlRm9yUHJvdG90eXBlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0
eSwgaXNQb2x5UHJvdG8pOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdm0uc3RydWN0dXJl
Q2FjaGUuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIGlubGluZUNhcGFjaXR5LCBpc1BvbHlQcm90bywgZXhlY3V0YWJsZSk7CiAKICAgICBp
ZiAoaXNQb2x5UHJvdG8pIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aGFzUG9seVByb3Rv
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDcgQEAgSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaQogICAgICAgICAgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLT5wcm90b3R5cGVGb3JDb25z
dHJ1Y3Rpb24odm0sIGV4ZWMpOwogICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHN0
cnVjdHVyZS0+cG9seVByb3RvT2Zmc2V0KCksIHByb3RvdHlwZSk7CiAgICAgICAgICAgICBwcm90
b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVT
U0FHRSghaGFzSW5kZXhlZFByb3BlcnRpZXMocmVzdWx0LT5pbmRleGluZ1R5cGUoKSksICJXZSBy
ZWx5IG9uIEpTRmluYWxPYmplY3Qgbm90IHN0YXJ0aW5nIG91dCB3aXRoIGFuIGluZGV4aW5nIHR5
cGUgb3RoZXJ3aXNlIHdlIHdvdWxkIHBvdGVudGlhbGx5IG5lZWQgdG8gY29udmVydCB0byBzbG93
IHB1dCBzdG9yYWdlIik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMjIzMDU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MTMsNiArMTQxMyw4IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdD
Q28KICAgICAgICAgCiAgICAgaWYgKHZtKCktPnR5cGVQcm9maWxlcigpKQogICAgICAgICB2bSgp
LT50eXBlUHJvZmlsZXIoKS0+aW52YWxpZGF0ZVR5cGVTZXRDYWNoZSgpOworCisgICAgdm0oKS0+
c3RydWN0dXJlQ2FjaGUucmVtb3ZlRGVhZEVudHJpZXMoKTsKICAgICAgICAgCiAgICAgcmVhcFdl
YWtIYW5kbGVzKCk7CiAgICAgcHJ1bmVTdGFsZUVudHJpZXNGcm9tV2Vha0dDTWFwcygpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDcgQEAgU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aGlzKQogICAgICAgICAgICAgSlNPYmplY3Qq
IHByb3RvdHlwZSA9IGNvbnN0cnVjdG9yLT5wcm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24odm0sIGV4
ZWMpOwogICAgICAgICAgICAgcmVzdWx0LT5wdXREaXJlY3Qodm0sIHN0cnVjdHVyZS0+cG9seVBy
b3RvT2Zmc2V0KCksIHByb3RvdHlwZSk7CiAgICAgICAgICAgICBwcm90b3R5cGUtPmRpZEJlY29t
ZVByb3RvdHlwZSgpOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghaGFzSW5kZXhl
ZFByb3BlcnRpZXMocmVzdWx0LT5pbmRleGluZ1R5cGUoKSksICJXZSByZWx5IG9uIEpTRmluYWxP
YmplY3Qgbm90IHN0YXJ0aW5nIG91dCB3aXRoIGFuIGluZGV4aW5nIHR5cGUgb3RoZXJ3aXNlIHdl
IHdvdWxkIHBvdGVudGlhbGx5IG5lZWQgdG8gY29udmVydCB0byBzbG93IHB1dCBzdG9yYWdlIik7
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5h
dGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy1vcmRpbmFyeWNyZWF0ZWZyb21jb25zdHJ1Y3Rv
cgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIz
LDcgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbAogICAgICAgICBp
ZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgcHJv
dG90eXBlVmFsdWUpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIG9ubHkgaGFwcGVucyBpZiBzb21l
b25lIFJlZmxlY3QuY29uc3RydWN0cyBvdXIgYnVpbHRpbiBjb25zdHJ1Y3RvciB3aXRoIGFub3Ro
ZXIgYnVpbHRpbiBjb25zdHJ1Y3RvciBhcyB0aGUgbmV3LnRhcmdldC4KICAgICAgICAgICAgIC8v
IFRodXMsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGNvc3Qgb2YgbG9va2luZyB1cCB0aGUgc3Ry
dWN0dXJlIGZyb20gb3VyIGhhc2ggdGFibGUgZXZlcnkgdGltZS4KLSAgICAgICAgICAgIHJldHVy
biB2bS5wcm90b3R5cGVNYXAuZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVj
dHVyZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGJhc2VDbGFzcyk7CisgICAgICAg
ICAgICByZXR1cm4gdm0uc3RydWN0dXJlQ2FjaGUuZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVG
cm9tQmFzZVN0cnVjdHVyZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGJhc2VDbGFz
cyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyMzA1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgY29uc3QgUHJvcGVy
dHlPZmZzZXQgdmFsdWVQcm9wZXJ0CiAKIFN0cnVjdHVyZSogY3JlYXRlSXRlcmF0b3JSZXN1bHRP
YmplY3RTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewot
ICAgIFN0cnVjdHVyZSogaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSB2bS5wcm90b3R5cGVNYXAu
ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0Lm9iamVjdFByb3RvdHlwZSgpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNp
dHkoKSk7CisgICAgU3RydWN0dXJlKiBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IHZtLnN0cnVj
dHVyZUNhY2hlLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKCZnbG9iYWxPYmplY3Qs
IGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5cGUoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElu
bGluZUNhcGFjaXR5KCkpOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBpdGVyYXRv
clJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBp
dGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+ZG9uZSwgMCwgb2Zmc2V0
KTsKICAgICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPT0gZG9uZVByb3BlcnR5T2Zmc2V0KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9u
LmNwcAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIGlu
bGluZSBTdHJ1Y3R1cmUqIGdldEJvdW5kRnVuY3Rpb25TdHJ1Y3QKICAgICAvLyBjdXJyZW50bHku
IFdob2V2ZXIgd29ya3Mgb24gY2FjaGluZyBzdHJ1Y3R1cmUgY2hhbmdlcyBmb3IgcHJvdG90eXBl
IHRyYW5zaXN0aW9ucyBzaG91bGQgY29uc2lkZXIgdGhpcyBwcm9ibGVtIGFzIHdlbGwuCiAgICAg
Ly8gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzM4CiAg
ICAgaWYgKHByb3RvdHlwZS5pc09iamVjdCgpICYmIHByb3RvdHlwZS5nZXRPYmplY3QoKS0+Z2xv
YmFsT2JqZWN0KCkgPT0gZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIHJlc3VsdCA9IHZtLnByb3Rv
dHlwZU1hcC5lbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLmdldE9iamVjdCgpLCByZXN1bHQpOworICAgICAgICByZXN1bHQg
PSB2bS5zdHJ1Y3R1cmVDYWNoZS5lbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3Ry
dWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLmdldE9iamVjdCgpLCByZXN1bHQpOwogICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihyZXN1bHQtPmdsb2JhbE9iamVj
dCgpID09IGdsb2JhbE9iamVjdCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlc3VsdCA9IFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgcmVzdWx0LT50eXBlSW5m
bygpLCByZXN1bHQtPmNsYXNzSW5mbygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZt
KQogICAgIHByb3RvQWNjZXNzb3ItPnNldFNldHRlcih2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCB0aGlzLCAwLCBtYWtlU3RyaW5nKCJzZXQgIiwgdm0ucHJvcGVydHlOYW1lcy0+dW5k
ZXJzY29yZVByb3RvLnN0cmluZygpKSwgZ2xvYmFsRnVuY1Byb3RvU2V0dGVyKSk7CiAgICAgbV9v
YmplY3RQcm90b3R5cGUtPnB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5
TmFtZXMtPnVuZGVyc2NvcmVQcm90bywgcHJvdG9BY2Nlc3NvciwgUHJvcGVydHlBdHRyaWJ1dGU6
OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9u
UHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24odm0s
IG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsKLSAgICBtX29iamVjdFN0cnVjdHVyZUZvck9iamVj
dENvbnN0cnVjdG9yLnNldCh2bSwgdGhpcywgdm0ucHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3Ry
dWN0dXJlRm9yUHJvdG90eXBlKHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpLCBKU0ZpbmFs
T2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSkpOworICAgIG1fb2JqZWN0U3RydWN0dXJl
Rm9yT2JqZWN0Q29uc3RydWN0b3Iuc2V0KHZtLCB0aGlzLCB2bS5zdHJ1Y3R1cmVDYWNoZS5lbXB0
eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZSh0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQo
KSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpKTsKICAgICBtX29iamVj
dFByb3RvVmFsdWVPZkZ1bmN0aW9uLnNldCh2bSwgdGhpcywganNDYXN0PEpTRnVuY3Rpb24qPihv
YmplY3RQcm90b3R5cGUoKS0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9m
KSkpOwogICAgIAogICAgIEpTRnVuY3Rpb24qIHRocm93ZXIgPSBKU0Z1bmN0aW9uOjpjcmVhdGUo
dm0sIHRoaXMsIDAsIFN0cmluZygpLCBnbG9iYWxGdW5jVGhyb3dUeXBlRXJyb3JBcmd1bWVudHND
YWxsZWVBbmRDYWxsZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm94eS5jcHAJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHZvaWQgSlNQ
cm94eTo6c2V0VGFyZ2V0KFZNJiB2bSwgSlNHbG9iYWwKICAgICBtX3RhcmdldC5zZXQodm0sIHRo
aXMsIGdsb2JhbE9iamVjdCk7CiAgICAgc2V0UHJvdG90eXBlRGlyZWN0KHZtLCBnbG9iYWxPYmpl
Y3QtPmdldFByb3RvdHlwZURpcmVjdCgpKTsKIAotICAgIFByb3RvdHlwZU1hcCYgcHJvdG90eXBl
TWFwID0gdm0ucHJvdG90eXBlTWFwOwogICAgIGlmICghbWF5QmVQcm90b3R5cGUoKSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC02Miw4ICs2MSw5IEBAIHZvaWQgSlNQcm94eTo6c2V0VGFyZ2V0KFZN
JiB2bSwgSlNHbG9iYWwKICAgICAvLyBUaGlzIGlzIHNsb3cgYnV0IGNvbnN0YW50IHRpbWUuIFdl
IHRoaW5rIGl0J3MgdmVyeSByYXJlIGZvciBhIHByb3h5CiAgICAgLy8gdG8gYmUgYSBwcm90b3R5
cGUsIGFuZCByZWFzb25hYmx5IHJhcmUgdG8gcmV0YXJnZXQgYSBwcm94eSwKICAgICAvLyBzbyBz
bG93IGNvbnN0YW50IHRpbWUgaXMgT0suCisgICAgU3RydWN0dXJlQ2FjaGUmIHN0cnVjdHVyZUNh
Y2hlID0gdm0uc3RydWN0dXJlQ2FjaGU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPD0gSlNG
aW5hbE9iamVjdDo6bWF4SW5saW5lQ2FwYWNpdHkoKTsgKytpKQotICAgICAgICBwcm90b3R5cGVN
YXAuY2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShwcmV2aW91c0dsb2JhbE9i
amVjdCwgdGhpcywgaSk7CisgICAgICAgIHN0cnVjdHVyZUNhY2hlLmNsZWFyRW1wdHlPYmplY3RT
dHJ1Y3R1cmVGb3JQcm90b3R5cGUocHJldmlvdXNHbG9iYWxPYmplY3QsIHRoaXMsIGkpOwogfQog
CiBTdHJpbmcgSlNQcm94eTo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdENvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDggQEAgaW5saW5l
IEpTT2JqZWN0KiBjb25zdHJ1Y3RFbXB0eU9iamVjdChFeAogaW5saW5lIEpTT2JqZWN0KiBjb25z
dHJ1Y3RFbXB0eU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5KQogewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgUHJvdG90eXBlTWFwJiBwcm90
b3R5cGVNYXAgPSBnbG9iYWxPYmplY3QtPnZtKCkucHJvdG90eXBlTWFwOwotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gcHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90
eXBlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSk7CisgICAgU3RydWN0
dXJlQ2FjaGUmIHN0cnVjdHVyZUNhY2hlID0gZ2xvYmFsT2JqZWN0LT52bSgpLnN0cnVjdHVyZUNh
Y2hlOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlQ2FjaGUuZW1wdHlPYmpl
Y3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGlubGluZUNh
cGFjaXR5KTsKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJl
KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlS2V5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBl
S2V5LmgJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3RvdHlwZUtleS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBAIGNsYXNzIFBy
b3RvdHlwZUtleSB7CiBwdWJsaWM6CiAgICAgUHJvdG90eXBlS2V5KCkgeyB9CiAgICAgCi0gICAg
UHJvdG90eXBlS2V5KEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKLSAgICAgICAgOiBtX3Byb3RvdHlwZShwcm90b3R5cGUpCisgICAgUHJvdG90eXBlS2V5KEpT
Q2VsbCogcHJvdG90eXBlT3JFeGVjdXRhYmxlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisg
ICAgICAgIDogbV9wcm90b3R5cGVPckV4ZWN1dGFibGUocHJvdG90eXBlT3JFeGVjdXRhYmxlKQog
ICAgICAgICAsIG1faW5saW5lQ2FwYWNpdHkoaW5saW5lQ2FwYWNpdHkpCiAgICAgICAgICwgbV9j
bGFzc0luZm8oY2xhc3NJbmZvKQogICAgICAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dCkKQEAgLTQ2LDE0ICs0NiwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBK
U09iamVjdCogcHJvdG90eXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGU7IH0KKyAgICBK
U0NlbGwqIHByb3RvdHlwZU9yRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBl
T3JFeGVjdXRhYmxlOyB9CiAgICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJl
dHVybiBtX2lubGluZUNhcGFjaXR5OyB9CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdCB7IHJldHVybiBtX2NsYXNzSW5mbzsgfQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQogICAgIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBQcm90b3R5cGVLZXkmIG90aGVyKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fcHJvdG90eXBlID09IG90aGVyLm1fcHJvdG90eXBlCisgICAgICAgIHJl
dHVybiBtX3Byb3RvdHlwZU9yRXhlY3V0YWJsZSA9PSBvdGhlci5tX3Byb3RvdHlwZU9yRXhlY3V0
YWJsZQogICAgICAgICAgICAgJiYgbV9pbmxpbmVDYXBhY2l0eSA9PSBvdGhlci5tX2lubGluZUNh
cGFjaXR5CiAgICAgICAgICAgICAmJiBtX2NsYXNzSW5mbyA9PSBvdGhlci5tX2NsYXNzSW5mbwog
ICAgICAgICAgICAgJiYgbV9nbG9iYWxPYmplY3QgPT0gb3RoZXIubV9nbG9iYWxPYmplY3Q7CkBA
IC02NSwxMyArNjUsMTUgQEAgcHVibGljOgogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1aW50cHRyX3Q+OjpoYXNoKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcHJvdG90eXBlKSBeIGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KG1fY2xhc3NJbmZvKSBeIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fZ2xvYmFsT2JqZWN0
KSkgKyBtX2lubGluZUNhcGFjaXR5OworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPHVpbnRw
dHJfdD46Omhhc2goYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9wcm90b3R5cGVPckV4ZWN1dGFi
bGUpIF4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9jbGFzc0luZm8pIF4gYml0d2lzZV9jYXN0
PHVpbnRwdHJfdD4obV9nbG9iYWxPYmplY3QpKSArIG1faW5saW5lQ2FwYWNpdHk7CiAgICAgfQog
ICAgIAogcHJpdmF0ZToKICAgICAvLyBXQVJOSU5HOiBXZSByZXF1aXJlIGFsbCBvZiB0aGVzZSBk
ZWZhdWx0IHZhbHVlcyB0byBiZSB6ZXJvLiBPdGhlcndpc2UsIHlvdSdsbCBuZWVkIHRvIGFkZAog
ICAgIC8vICJzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7IiB0byB0
aGUgSGFzaFRyYWl0cyBhdCB0aGUgYm90dG9tIG9mIHRoaXMgZmlsZS4KLSAgICBKU09iamVjdCog
bV9wcm90b3R5cGUgeyBudWxscHRyIH07CisKKyAgICAvLyBUaGlzIGlzIGEgSlNPYmplY3QqIHBy
b3RvdHlwZSB3aGVuIGRvaW5nIG1vbm8gcHJvdG8uIEl0J3MgYSBGdW5jdGlvbkV4ZWN1dGFibGUq
IHdoZW4gZG9pbmcgcG9seSBwcm90by4KKyAgICBKU0NlbGwqIG1fcHJvdG90eXBlT3JFeGVjdXRh
YmxlIHsgbnVsbHB0ciB9OyAKICAgICB1bnNpZ25lZCBtX2lubGluZUNhcGFjaXR5IHsgMCB9Owog
ICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CiAgICAgSlNHbG9i
YWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCShyZXZpc2lvbiAyMjMwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCShub25l
eGlzdGVudCkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcm90
b3R5cGVNYXAuaCIKLQotI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgotI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotaW5saW5lIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbXB0eVN0cnVjdHVyZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBU
eXBlSW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVBy
b3RvU3RydWN0dXJlKQotewotICAgIFJFTEVBU0VfQVNTRVJUKCEhcHJvdG90eXBlKTsgLy8gV2Ug
dXNlIG51bGxwdHIgaW5zaWRlIHRoZSBIYXNoTWFwIGZvciBwcm90b3R5cGUgdG8gbWVhbiBwb2x5
IHByb3RvLCBzbyB1c2VyJ3Mgb2YgdGhpcyBBUEkgbXVzdCBwcm92aWRlIG5vbi1udWxsIHByb3Rv
dHlwZXMuCi0KLSAgICBhdXRvIGtleSA9IFByb3RvdHlwZUtleShtYWtlUG9seVByb3RvU3RydWN0
dXJlID8gbnVsbHB0ciA6IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGNsYXNzSW5mbywgZ2xv
YmFsT2JqZWN0KTsKLSAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZXMu
Z2V0KGtleSkpIHsKLSAgICAgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpIHsKLSAgICAg
ICAgICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmhhc01vbm9Qcm90bygpKTsKLSAg
ICAgICAgQVNTRVJUKHByb3RvdHlwZS0+bWF5QmVQcm90b3R5cGUoKSk7Ci0gICAgICAgIHJldHVy
biBzdHJ1Y3R1cmU7Ci0gICAgfQotCi0gICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQcm90b3R5cGUo
KTsKLQotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZTsKLSAgICBpZiAobWFrZVBvbHlQcm90b1N0cnVjdHVyZSkgewotICAgICAgICBzdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSgKLSAgICAgICAgICAgIFN0cnVjdHVyZTo6UG9seVBy
b3RvLCB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGlu
ZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6Y3JlYXRlKAotICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFj
aXR5KTsKLSAgICB9Ci0gICAgbV9zdHJ1Y3R1cmVzLnNldChrZXksIFdlYWs8U3RydWN0dXJlPihz
dHJ1Y3R1cmUpKTsKLQotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KLVN0cnVjdHVyZSogUHJv
dG90eXBlTWFwOjplbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVy
ZSogYmFzZVN0cnVjdHVyZSkKLXsKLSAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IGhhdmUgaW5s
aW5lIGNhcGFjaXR5IHN0YXRpYyBhbmFseXNpcyBmb3Igc3ViY2xhc3NlcyBhbmQgYWxsIGludGVy
bmFsIGZ1bmN0aW9uIGNvbnN0cnVjdG9ycyBoYXZlIGEgZGVmYXVsdCBpbmxpbmUgY2FwYWNpdHkg
b2YgMC4KLSAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYmFzZVN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCk7Ci0gICAgaWYgKHByb3RvdHlwZS0+YW55T2JqZWN0SW5DaGFpbk1heUludGVy
Y2VwdEluZGV4ZWRBY2Nlc3NlcygpICYmIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlw
ZSkpCi0gICAgICAgIGluZGV4aW5nVHlwZSA9IChpbmRleGluZ1R5cGUgJiB+SW5kZXhpbmdTaGFw
ZU1hc2spIHwgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUVt
cHR5U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlLT50eXBl
SW5mbygpLCBiYXNlU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaW5kZXhpbmdUeXBlLCAwLCBmYWxz
ZSk7Ci19Ci0KLVN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjplbXB0eU9iamVjdFN0cnVjdHVyZUZv
clByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90
eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJl
KQotewotICAgIHJldHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNGaW5hbE9iamVjdDo6dHlwZUluZm8oKSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBK
U0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSwgbWFrZVBv
bHlQcm90b1N0cnVjdHVyZSk7Ci19Ci0KLXZvaWQgUHJvdG90eXBlTWFwOjpjbGVhckVtcHR5T2Jq
ZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQotewotICAgIG1fc3RydWN0
dXJlcy5yZW1vdmUoUHJvdG90eXBlS2V5KG9iamVjdCwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxP
YmplY3Q6OmluZm8oKSwgZ2xvYmFsT2JqZWN0KSk7Ci0gICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShQ
cm90b3R5cGVLZXkobnVsbHB0ciwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxPYmplY3Q6OmluZm8o
KSwgZ2xvYmFsT2JqZWN0KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmgJKHJldmlzaW9uIDIyMzA1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5oCShub25l
eGlzdGVudCkKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW5kZXhpbmdU
eXBlLmgiCi0jaW5jbHVkZSAiSlNUeXBlSW5mby5oIgotI2luY2x1ZGUgIlByb3RvdHlwZUtleS5o
IgotI2luY2x1ZGUgIldlYWtHQ01hcC5oIgotI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU09iamVjdDsK
LWNsYXNzIFN0cnVjdHVyZTsKLWNsYXNzIFZNOwotCi0vLyBUcmFja3MgdGhlIGNhbm9uaWNhbCBz
dHJ1Y3R1cmUgYW4gb2JqZWN0IHNob3VsZCBiZSBhbGxvY2F0ZWQgd2l0aCB3aGVuIGluaGVyaXRp
bmcgZnJvbSBhIGdpdmVuIHByb3RvdHlwZS4KLWNsYXNzIFByb3RvdHlwZU1hcCB7Ci1wdWJsaWM6
Ci0gICAgZXhwbGljaXQgUHJvdG90eXBlTWFwKFZNJiB2bSkKLSAgICAgICAgOiBtX3N0cnVjdHVy
ZXModm0pCi0gICAgewotICAgIH0KLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSog
ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCosIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUg
PSBmYWxzZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBlbXB0eVN0cnVjdHVy
ZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
LCBTdHJ1Y3R1cmUqKTsKLSAgICB2b2lkIGNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90
b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
KTsKLQotcHJpdmF0ZToKLSAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBD
bGFzc0luZm8qLCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1h
a2VQb2x5UHJvdG9TdHJ1Y3R1cmUpOwotCi0gICAgdXNpbmcgU3RydWN0dXJlTWFwID0gV2Vha0dD
TWFwPFByb3RvdHlwZUtleSwgU3RydWN0dXJlPjsKLSAgICBTdHJ1Y3R1cmVNYXAgbV9zdHJ1Y3R1
cmVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjMwNTUpCShm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHA6MjIzMDU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UHJvdG90eXBlTWFwLmgiCisKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2lubGluZSBTdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6Y3JlYXRlRW1wdHlTdHJ1Y3R1
cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29u
c3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBv
bHlQcm90b1N0cnVjdHVyZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghIXByb3RvdHlwZSk7IC8v
IFdlIHVzZSBudWxscHRyIGluc2lkZSB0aGUgSGFzaE1hcCBmb3IgcHJvdG90eXBlIHRvIG1lYW4g
cG9seSBwcm90bywgc28gdXNlcidzIG9mIHRoaXMgQVBJIG11c3QgcHJvdmlkZSBub24tbnVsbCBw
cm90b3R5cGVzLgorCisgICAgYXV0byBrZXkgPSBQcm90b3R5cGVLZXkobWFrZVBvbHlQcm90b1N0
cnVjdHVyZSA/IG51bGxwdHIgOiBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5LCBjbGFzc0luZm8s
IGdsb2JhbE9iamVjdCk7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdHJ1Y3R1
cmVzLmdldChrZXkpKSB7CisgICAgICAgIGlmIChtYWtlUG9seVByb3RvU3RydWN0dXJlKSB7Cisg
ICAgICAgICAgICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5oYXNNb25vUHJvdG8oKSk7
CisgICAgICAgIEFTU0VSVChwcm90b3R5cGUtPm1heUJlUHJvdG90eXBlKCkpOworICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlOworICAgIH0KKworICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90
eXBlKCk7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmU7CisgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpIHsKKyAgICAgICAg
c3RydWN0dXJlID0gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgICAgICBTdHJ1Y3R1cmU6OlBv
bHlQcm90bywgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZv
LCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgICAgIHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBpbmxpbmVD
YXBhY2l0eSk7CisgICAgfQorICAgIG1fc3RydWN0dXJlcy5zZXQoa2V5LCBXZWFrPFN0cnVjdHVy
ZT4oc3RydWN0dXJlKSk7CisKKyAgICByZXR1cm4gc3RydWN0dXJlOworfQorCitTdHJ1Y3R1cmUq
IFByb3RvdHlwZU1hcDo6ZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVy
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1
Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpCit7CisgICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBoYXZl
IGlubGluZSBjYXBhY2l0eSBzdGF0aWMgYW5hbHlzaXMgZm9yIHN1YmNsYXNzZXMgYW5kIGFsbCBp
bnRlcm5hbCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnMgaGF2ZSBhIGRlZmF1bHQgaW5saW5lIGNhcGFj
aXR5IG9mIDAuCisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGJhc2VTdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpOworICAgIGlmIChwcm90b3R5cGUtPmFueU9iamVjdEluQ2hhaW5NYXlJ
bnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSAmJiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGlu
Z1R5cGUpKQorICAgICAgICBpbmRleGluZ1R5cGUgPSAoaW5kZXhpbmdUeXBlICYgfkluZGV4aW5n
U2hhcGVNYXNrKSB8IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZTsKKworICAgIHJldHVybiBjcmVh
dGVFbXB0eVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZVN0cnVjdHVyZS0+
dHlwZUluZm8oKSwgYmFzZVN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGluZGV4aW5nVHlwZSwgMCwg
ZmFsc2UpOworfQorCitTdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6ZW1wdHlPYmplY3RTdHJ1Y3R1
cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHBy
b3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVj
dHVyZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTRmluYWxPYmplY3Q6OnR5cGVJbmZvKCksIEpTRmluYWxPYmplY3Q6OmluZm8o
KSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHksIG1h
a2VQb2x5UHJvdG9TdHJ1Y3R1cmUpOworfQorCit2b2lkIFByb3RvdHlwZU1hcDo6Y2xlYXJFbXB0
eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogb2JqZWN0LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKK3sKKyAgICBtX3N0
cnVjdHVyZXMucmVtb3ZlKFByb3RvdHlwZUtleShvYmplY3QsIGlubGluZUNhcGFjaXR5LCBKU0Zp
bmFsT2JqZWN0OjppbmZvKCksIGdsb2JhbE9iamVjdCkpOworICAgIG1fc3RydWN0dXJlcy5yZW1v
dmUoUHJvdG90eXBlS2V5KG51bGxwdHIsIGlubGluZUNhcGFjaXR5LCBKU0ZpbmFsT2JqZWN0Ojpp
bmZvKCksIGdsb2JhbE9iamVjdCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5jcHAJKHJl
dmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcm90b3R5cGVNYXAuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmVDYWNoZS5oIgogCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKQEAgLTMyLDExICszMiwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
aW5saW5lIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBl
SW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3Rv
U3RydWN0dXJlKQoraW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlQ2FjaGU6OmNyZWF0ZUVtcHR5
U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5
cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8s
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29s
IG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVCghIXByb3RvdHlwZSk7IC8vIFdlIHVzZSBudWxscHRyIGlu
c2lkZSB0aGUgSGFzaE1hcCBmb3IgcHJvdG90eXBlIHRvIG1lYW4gcG9seSBwcm90bywgc28gdXNl
cidzIG9mIHRoaXMgQVBJIG11c3QgcHJvdmlkZSBub24tbnVsbCBwcm90b3R5cGVzLgorICAgIFJF
TEVBU0VfQVNTRVJUKCEhcHJvdG90eXBlKTsKIAotICAgIGF1dG8ga2V5ID0gUHJvdG90eXBlS2V5
KG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUgPyBudWxscHRyIDogcHJvdG90eXBlLCBpbmxpbmVDYXBh
Y2l0eSwgY2xhc3NJbmZvLCBnbG9iYWxPYmplY3QpOworICAgIFByb3RvdHlwZUtleSBrZXkgeyBt
YWtlUG9seVByb3RvU3RydWN0dXJlID8gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oZXhlY3V0YWJsZSkg
OiBzdGF0aWNfY2FzdDxKU0NlbGwqPihwcm90b3R5cGUpLCBpbmxpbmVDYXBhY2l0eSwgY2xhc3NJ
bmZvLCBnbG9iYWxPYmplY3QgfTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0
cnVjdHVyZXMuZ2V0KGtleSkpIHsKICAgICAgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUp
IHsKICAgICAgICAgICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7CkBAIC01OCwz
MCArNTgsNDEgQEAgaW5saW5lIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbQogICAg
ICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSgKICAgICAgICAgICAgIHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBp
bmxpbmVDYXBhY2l0eSk7CiAgICAgfQotICAgIG1fc3RydWN0dXJlcy5zZXQoa2V5LCBXZWFrPFN0
cnVjdHVyZT4oc3RydWN0dXJlKSk7CisgICAgbV9zdHJ1Y3R1cmVzLnNldChrZXksIHN0cnVjdHVy
ZSk7CiAKICAgICByZXR1cm4gc3RydWN0dXJlOwogfQogCi1TdHJ1Y3R1cmUqIFByb3RvdHlwZU1h
cDo6ZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2VT
dHJ1Y3R1cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZUNhY2hlOjplbXB0eVN0cnVjdHVyZUZvclBy
b3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSkKIHsKICAgICAvLyBX
ZSBjdXJyZW50bHkgZG8gbm90IGhhdmUgaW5saW5lIGNhcGFjaXR5IHN0YXRpYyBhbmFseXNpcyBm
b3Igc3ViY2xhc3NlcyBhbmQgYWxsIGludGVybmFsIGZ1bmN0aW9uIGNvbnN0cnVjdG9ycyBoYXZl
IGEgZGVmYXVsdCBpbmxpbmUgY2FwYWNpdHkgb2YgMC4KICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gYmFzZVN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CiAgICAgaWYgKHByb3RvdHlw
ZS0+YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpICYmIGhhc0lu
ZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSkpCiAgICAgICAgIGluZGV4aW5nVHlwZSA9IChp
bmRleGluZ1R5cGUgJiB+SW5kZXhpbmdTaGFwZU1hc2spIHwgU2xvd1B1dEFycmF5U3RvcmFnZVNo
YXBlOwogCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBiYXNlU3RydWN0dXJlLT50eXBlSW5mbygpLCBiYXNlU3RydWN0dXJlLT5jbGFzc0lu
Zm8oKSwgaW5kZXhpbmdUeXBlLCAwLCBmYWxzZSk7CisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5U3Ry
dWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlLT50eXBlSW5mbygp
LCBiYXNlU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaW5kZXhpbmdUeXBlLCAwLCBmYWxzZSwgbnVs
bHB0cik7CiB9CiAKLVN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjplbXB0eU9iamVjdFN0cnVjdHVy
ZUZvclByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJv
dG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0
dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmVDYWNoZTo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQ
cm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlw
ZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSwg
RnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0
eVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNGaW5hbE9iamVjdDo6dHlwZUlu
Zm8oKSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5kZXhp
bmdUeXBlLCBpbmxpbmVDYXBhY2l0eSwgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSk7CisgICAgcmV0
dXJuIGNyZWF0ZUVtcHR5U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0ZpbmFs
T2JqZWN0Ojp0eXBlSW5mbygpLCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIEpTRmluYWxPYmplY3Q6
OmRlZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5LCBtYWtlUG9seVByb3RvU3RydWN0
dXJlLCBleGVjdXRhYmxlKTsKIH0KIAotdm9pZCBQcm90b3R5cGVNYXA6OmNsZWFyRW1wdHlPYmpl
Y3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIG9iamVjdCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCit2b2lkIFN0cnVjdHVyZUNh
Y2hlOjpjbGVhckVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmplY3QsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5
KQogewotICAgIG1fc3RydWN0dXJlcy5yZW1vdmUoUHJvdG90eXBlS2V5KG9iamVjdCwgaW5saW5l
Q2FwYWNpdHksIEpTRmluYWxPYmplY3Q6OmluZm8oKSwgZ2xvYmFsT2JqZWN0KSk7Ci0gICAgbV9z
dHJ1Y3R1cmVzLnJlbW92ZShQcm90b3R5cGVLZXkobnVsbHB0ciwgaW5saW5lQ2FwYWNpdHksIEpT
RmluYWxPYmplY3Q6OmluZm8oKSwgZ2xvYmFsT2JqZWN0KSk7CisgICAgbV9zdHJ1Y3R1cmVzLnJl
bW92ZShQcm90b3R5cGVLZXkgeyBvYmplY3QsIGlubGluZUNhcGFjaXR5LCBKU0ZpbmFsT2JqZWN0
OjppbmZvKCksIGdsb2JhbE9iamVjdCB9KTsKK30KKwordm9pZCBTdHJ1Y3R1cmVDYWNoZTo6cmVt
b3ZlRGVhZEVudHJpZXMoKQoreworICAgIG1fc3RydWN0dXJlcy5yZW1vdmVJZihbJl0gKGF1dG8m
IGVudHJ5KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZW50cnkudmFsdWU7Cisg
ICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQoc3RydWN0dXJlKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBjb25zdCBQcm90b3R5cGVLZXkmIGtleSA9IGVudHJ5LmtleTsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShIZWFwOjppc01hcmtlZChrZXkuZ2xvYmFsT2JqZWN0
KCkpLCAiV2UgcmVseSBvbiB0aGUgc3RydWN0dXJlIGtlZXBpbmcgYWxpdmUgdGhlIGdsb2JhbCBv
YmplY3QuIik7CisgICAgICAgIHJldHVybiAhSGVhcDo6aXNNYXJrZWQoa2V5LnByb3RvdHlwZU9y
RXhlY3V0YWJsZSgpKTsKKyAgICB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgJKHJldmlz
aW9uIDIyMzA1NSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBl
TWFwLmg6MjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCisjaW5jbHVkZSAi
UHJvdG90eXBlS2V5LmgiCisjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCisjaW5jbHVkZSA8d3RmL1Ry
aVN0YXRlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2Ns
YXNzIEpTT2JqZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgVk07CisKKy8vIFRyYWNrcyB0
aGUgY2Fub25pY2FsIHN0cnVjdHVyZSBhbiBvYmplY3Qgc2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRo
IHdoZW4gaW5oZXJpdGluZyBmcm9tIGEgZ2l2ZW4gcHJvdG90eXBlLgorY2xhc3MgUHJvdG90eXBl
TWFwIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBQcm90b3R5cGVNYXAoVk0mIHZtKQorICAgICAg
ICA6IG1fc3RydWN0dXJlcyh2bSkKKyAgICB7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgU3RydWN0dXJlKiBlbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQ
cm90b1N0cnVjdHVyZSA9IGZhbHNlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUq
IGVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoSlNHbG9iYWxPYmpl
Y3QqLCBKU09iamVjdCosIFN0cnVjdHVyZSopOworICAgIHZvaWQgY2xlYXJFbXB0eU9iamVjdFN0
cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHkpOworCitwcml2YXRlOgorICAgIFN0cnVjdHVyZSogY3JlYXRlRW1wdHlT
dHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBl
SW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2Fw
YWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSk7CisKKyAgICB1c2luZyBTdHJ1Y3R1
cmVNYXAgPSBXZWFrR0NNYXA8UHJvdG90eXBlS2V5LCBTdHJ1Y3R1cmU+OworICAgIFN0cnVjdHVy
ZU1hcCBtX3N0cnVjdHVyZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuaAkocmV2aXNpb24g
MjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkluZGV4aW5nVHlw
ZS5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJQcm90b3R5cGVLZXkuaCIK
LSNpbmNsdWRlICJXZWFrR0NNYXAuaCIKICNpbmNsdWRlIDx3dGYvVHJpU3RhdGUuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7CkBAIC0zOSwyMSArMzgsMjAgQEAgY2xhc3MgU3RydWN0dXJlOwogY2xhc3Mg
Vk07CiAKIC8vIFRyYWNrcyB0aGUgY2Fub25pY2FsIHN0cnVjdHVyZSBhbiBvYmplY3Qgc2hvdWxk
IGJlIGFsbG9jYXRlZCB3aXRoIHdoZW4gaW5oZXJpdGluZyBmcm9tIGEgZ2l2ZW4gcHJvdG90eXBl
LgotY2xhc3MgUHJvdG90eXBlTWFwIHsKK2NsYXNzIFN0cnVjdHVyZUNhY2hlIHsKIHB1YmxpYzoK
LSAgICBleHBsaWNpdCBQcm90b3R5cGVNYXAoVk0mIHZtKQotICAgICAgICA6IG1fc3RydWN0dXJl
cyh2bSkKLSAgICB7Ci0gICAgfQorICAgIFN0cnVjdHVyZUNhY2hlKCkgPSBkZWZhdWx0OwogCi0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBlbXB0eU9iamVjdFN0cnVjdHVyZUZvclBy
b3RvdHlwZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5saW5lQ2FwYWNp
dHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSA9IGZhbHNlKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtl
UG9seVByb3RvU3RydWN0dXJlID0gZmFsc2UsIEZ1bmN0aW9uRXhlY3V0YWJsZSogPSBudWxscHRy
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5U3RydWN0dXJlRm9yUHJv
dG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFN0cnVj
dHVyZSopOwogICAgIHZvaWQgY2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShK
U0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpOworICAg
IAorICAgIHZvaWQgcmVtb3ZlRGVhZEVudHJpZXMoKTsKIAogcHJpdmF0ZToKLSAgICBTdHJ1Y3R1
cmUqIGNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHByb3Rv
dHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUsIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpOworICAg
IFN0cnVjdHVyZSogY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVj
dCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5n
VHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVy
ZSwgRnVuY3Rpb25FeGVjdXRhYmxlKik7CiAKLSAgICB1c2luZyBTdHJ1Y3R1cmVNYXAgPSBXZWFr
R0NNYXA8UHJvdG90eXBlS2V5LCBTdHJ1Y3R1cmU+OworICAgIHVzaW5nIFN0cnVjdHVyZU1hcCA9
IEhhc2hNYXA8UHJvdG90eXBlS2V5LCBTdHJ1Y3R1cmUqPjsKICAgICBTdHJ1Y3R1cmVNYXAgbV9z
dHJ1Y3R1cmVzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDYgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgY3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb25NYXAo
KnRoaXMpCiAgICAgLCBzdHJpbmdDYWNoZSgqdGhpcykKICAgICAsIHN5bWJvbEltcGxUb1N5bWJv
bE1hcCgqdGhpcykKLSAgICAsIHByb3RvdHlwZU1hcCgqdGhpcykKICAgICAsIGludGVycHJldGVy
KDApCiAgICAgLCBlbnRyeVNjb3BlKDApCiAgICAgLCBtX3JlZ0V4cENhY2hlKG5ldyBSZWdFeHBD
YWNoZSh0aGlzKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24g
MjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5o
IgogI2luY2x1ZGUgIk1pY3JvdGFzay5oIgogI2luY2x1ZGUgIk51bWVyaWNTdHJpbmdzLmgiCi0j
aW5jbHVkZSAiUHJvdG90eXBlTWFwLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlQ2FjaGUuaCIKICNp
bmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJT
dWJzcGFjZS5oIgpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIK
ICNpbmNsdWRlICJWTVRyYXBzLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUg
IldlYWtHQ01hcC5oIgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5o
PgpAQCAtNDY0LDcgKzQ2NSw3IEBAIHB1YmxpYzoKICAgICBTb3VyY2VQcm92aWRlckNhY2hlKiBh
ZGRTb3VyY2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVyKik7CiAgICAgdm9pZCBjbGVhclNv
dXJjZVByb3ZpZGVyQ2FjaGVzKCk7CiAKLSAgICBQcm90b3R5cGVNYXAgcHJvdG90eXBlTWFwOwor
ICAgIFN0cnVjdHVyZUNhY2hlIHN0cnVjdHVyZUNhY2hlOwogCiAgICAgdHlwZWRlZiBIYXNoTWFw
PFJlZlB0cjxTb3VyY2VQcm92aWRlcj4sIFJlZlB0cjxTb3VyY2VQcm92aWRlckNhY2hlPj4gU291
cmNlUHJvdmlkZXJDYWNoZU1hcDsKICAgICBTb3VyY2VQcm92aWRlckNhY2hlTWFwIHNvdXJjZVBy
b3ZpZGVyQ2FjaGVNYXA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323229</attachid>
            <date>2017-10-09 15:04:40 -0700</date>
            <delta_ts>2017-10-09 19:04:01 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>45885</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODU4LDcg
Kzg1OCw2IEBAIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCiBydW50aW1lL1Byb3Bl
cnR5RGVzY3JpcHRvci5jcHAKIHJ1bnRpbWUvUHJvcGVydHlTbG90LmNwcAogcnVudGltZS9Qcm9w
ZXJ0eVRhYmxlLmNwcAotcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCiBydW50aW1lL1Byb3h5Q29u
c3RydWN0b3IuY3BwCiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcAogcnVudGltZS9Qcm94eVJldm9r
ZS5jcHAKQEAgLTg5MSw2ICs4OTAsNyBAQCBydW50aW1lL1N0cmluZ09iamVjdC5jcHAKIHJ1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAogcnVudGltZS9TdHJpbmdSZWN1cnNpb25DaGVja2VyLmNw
cAogcnVudGltZS9TdHJ1Y3R1cmUuY3BwCitydW50aW1lL1N0cnVjdHVyZUNhY2hlLmNwcAogcnVu
dGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKIHJ1bnRpbWUvU3RydWN0dXJlSURUYWJsZS5jcHAKIHJ1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczOSw3
ICs3MzksNiBAQAogCQkxNDczNDFENDFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3JhbUV4ZWN1dGFi
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzM0
MUQzMURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NzM0MUQ2MURDMDJFQjkwMEFB
MjlCQSAvKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3MzQxRDUxREMwMkVCOTAwQUEyOUJBIC8qIE1vZHVs
ZVByb2dyYW1FeGVjdXRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQ3MzQxRDgxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0aW9uRXhlY3V0
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
MzQxRDcxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NzRDMzNCMTZBQTJEOTUw
MDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDc4
Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxlVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBI
YW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGlt
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3
QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ3Qjg0NjMw
RTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3Qjg0NjIwRTZERTZCMTAwNDc3NUE0IC8qIFB1
dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMDY2LDYgKzEwNjUsNyBAQAogCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQg
LyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5
SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3
QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4MEMxNkQxRTNB
OTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODBDMTZCMUUzQTk0MEUwMEI3MTYx
NSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk4Njk0M0IxRjhDMEFDQzAwOTIzMkFFIC8qIFN0
cnVjdHVyZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTg5Mzc3OTFEQ0FC
NTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFy
cmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
Nzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5NjAwMkIw
NTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1w
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMDkw
N0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMwMzksOCArMzAzOSw2IEBACiAJCTE0RDJG
M0Q4MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNYXJrZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xvb3BTdGFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0RDg0NEEyMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5
cGVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJvdG90eXBl
TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTREODQ0QTMxNkFBMkM3MDAw
QTY1QUYwIC8qIFByb3RvdHlwZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQcm90b3R5cGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTREODU3NzQw
QTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFz
Y3JpcHQ7IG5hbWUgPSB0ZXN0YXBpLmpzOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGkuanM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REE4MThFMEQ5OUZEMjAwMEIwQTRGQiAvKiBK
U0xleGljYWxFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0xleGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERB
ODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUxMSw2ICszNTA5LDggQEAKIAkJNzk3RTA3
QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODBDMTZBMUUzQTk0MEUwMEI3MTYxNSAv
KiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwOyBwYXRoID0gZGZnL0RG
R1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWdpc3RlcmVkU3RydWN0dXJl
U2V0Lmg7IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3OTg2OTQzOTFGOEMwQUM3MDA5MjMyQUUgLyogU3RydWN0dXJl
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0
dXJlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzYxRENBQjU3MzAwRjhENEZCIC8qIEpTRml4ZWRBcnJh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpeGVkQXJyYXku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0
RkIgLyogSlNGaXhlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
Rml4ZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTlFRjdDMzFDNTZF
RDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzUENUb09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1RvT3JpZ2luTWFwLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NjAxLDggKzY2MDEsNiBAQAogCQkJCUFE
MUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQcm9wZXJ0eVRhYmxlLmNwcCAqLywKIAkJCQk2NUMw
MkZCQjA2Mzc0NjJBMDAzRTdFRTYgLyogUHJvdGVjdC5oICovLAogCQkJCTBGNzRCOTNBMUY4OTYx
NDUwMEI5MzVEMyAvKiBQcm90b3R5cGVLZXkuaCAqLywKLQkJCQkxNEQ4NDRBMjE2QUEyQzcwMDBB
NjVBRjAgLyogUHJvdG90eXBlTWFwLmNwcCAqLywKLQkJCQkxNEQ4NDRBMzE2QUEyQzcwMDBBNjVB
RjAgLyogUHJvdG90eXBlTWFwLmggKi8sCiAJCQkJNzlCMDBDQjgxQzZBQjA3RTAwODhDNjVEIC8q
IFByb3h5Q29uc3RydWN0b3IuY3BwICovLAogCQkJCTc5QjAwQ0I5MUM2QUIwN0UwMDg4QzY1RCAv
KiBQcm94eUNvbnN0cnVjdG9yLmggKi8sCiAJCQkJNzlCMDBDQkExQzZBQjA3RTAwODhDNjVEIC8q
IFByb3h5T2JqZWN0LmNwcCAqLywKQEAgLTY2NzgsNiArNjY3Niw4IEBACiAJCQkJOTMzNDVBODgx
MkQ4MzhDNDAwMzAyQkUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaCAqLywKIAkJCQlCQ0RF
M0FCMDBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCAqLywKIAkJCQlCQ0RFM0FCMTBF
NkM4MkNGMDAxNDUzQTcgLyogU3RydWN0dXJlLmggKi8sCisJCQkJNzk4Njk0MzkxRjhDMEFDNzAw
OTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmNwcCAqLywKKwkJCQk3OTg2OTQzQTFGOEMwQUM4MDA5
MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLywKIAkJCQk3RTRFRTcwRTBFQkI3QTVCMDA1OTM0
QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCTdFNEVFNzA4MEVCQjc5NjMwMDU5MzRB
QSAvKiBTdHJ1Y3R1cmVDaGFpbi5oICovLAogCQkJCTJBQUFBMzEwMThCRDQ5RDEwMDM5NENDOCAv
KiBTdHJ1Y3R1cmVJREJsb2IuaCAqLywKQEAgLTg5MzYsNyArODkzNiw2IEBACiAJCQkJMEZCN0Yz
OUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNzRCOTNCMUY4OTYxNDgwMEI5MzVEMyAvKiBQcm90b3R5cGVLZXkuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUzNEUwMzU2MUU1M0JFREUwMDIxM0Y2NCAvKiBQcm94eWFibGVBY2Nl
c3NDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUIwMENCRDFDNkFCMDdFMDA4OEM2NUQgLyog
UHJveHlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlCMDBDQkYxQzZBQjA3RTAw
ODhDNjVEIC8qIFByb3h5T2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTg5NDksNiArODk0OCw3
IEBACiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0
ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTg2OTQzQjFGOEMwQUNDMDA5MjMyQUUgLyog
U3RydWN0dXJlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMzYzN0E2MUI2MzIyMDIwMEVF
MDg0MCAvKiBSZWZsZWN0T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyMzFCREEw
OEVGMDAzMzFCODQgLyogUmVmbGVjdE9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnRl
cm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjIzMDU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJv
ZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGlubGluZSBTdHJ1Y3R1cmUq
IEludGVybmFsRnVuY3Rpb25BbGxvY2EKICAgICBpZiAocHJvdG90eXBlID09IGJhc2VTdHJ1Y3R1
cmUtPnN0b3JlZFByb3RvdHlwZSgpKQogICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNlU3RydWN0dXJl
OwogICAgIGVsc2UKLSAgICAgICAgc3RydWN0dXJlID0gdm0ucHJvdG90eXBlTWFwLmVtcHR5U3Ry
dWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIGJhc2VTdHJ1Y3R1cmUpOworICAgICAgICBzdHJ1Y3R1cmUgPSB2bS5zdHJ1Y3R1cmVDYWNo
ZS5lbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlKTsKIAogICAgIC8vIEVuc3VyZSB0aGF0IGlmIGFu
b3RoZXIgdGhyZWFkIHNlZXMgdGhlIHN0cnVjdHVyZSwgaXQgd2lsbCBzZWUgaXQgcHJvcGVybHkg
Y3JlYXRlZC4KICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUuY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwyMSAr
NTAsMjAgQEAgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZQogICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NzkyCiAKICAg
ICAgICAgZXhlY3V0YWJsZSA9IGNvbnN0cnVjdG9yLT5qc0V4ZWN1dGFibGUoKTsKKworICAgICAg
ICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjdXRhYmxlLT5jYWNoZWRQb2x5UHJvdG9T
dHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT50eXBl
SW5mbygpLnR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGUpOworICAgICAgICAgICAgbV9hbGxvY2F0
b3IgPSBudWxscHRyOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBp
c1BvbHlQcm90byA9IGZhbHNlOwogICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VQb2x5UHJvdG8o
KSkKICAgICAgICAgICAgIGlzUG9seVByb3RvID0gdHJ1ZTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgaXNQb2x5UHJvdG8gPSBleGVjdXRhYmxlLT5lbnN1cmVQb2x5UHJvdG9XYXRjaHBvaW50
KCkuaGFzQmVlbkludmFsaWRhdGVkKCkgJiYgZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24o
KS0+aGFzQmVlbkludmFsaWRhdGVkKCk7Ci0KLSAgICAgICAgaWYgKGlzUG9seVByb3RvKSB7Ci0g
ICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjdXRhYmxlLT5jYWNoZWRQ
b2x5UHJvdG9TdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0
cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRmluYWxPYmplY3RUeXBlKTsKLSAgICAgICAg
ICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBtX2lubGluZUNh
cGFjaXR5ID0gc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KIAogICAgIHVuc2lnbmVkIGlu
bGluZUNhcGFjaXR5ID0gMDsKQEAgLTExMCw3ICsxMDksNyBAQCB2b2lkIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlOjppbml0aWFsaXplCiAgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IEpTRmlu
YWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCk7CiAgICAgfQogCi0gICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB2bS5wcm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5
cGUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5LCBpc1BvbHlQcm90byk7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5zdHJ1Y3R1cmVDYWNoZS5lbXB0eU9iamVj
dFN0cnVjdHVyZUZvclByb3RvdHlwZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgaW5saW5lQ2Fw
YWNpdHksIGlzUG9seVByb3RvLCBleGVjdXRhYmxlKTsKIAogICAgIGlmIChpc1BvbHlQcm90bykg
ewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyMzA1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MCw2ICsyNTAsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlVGhpCiAgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNDYXN0PEpT
RnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPnByb3RvdHlwZUZvckNvbnN0cnVjdGlvbih2bSwgZXhl
Yyk7CiAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgc3RydWN0dXJlLT5wb2x5UHJv
dG9PZmZzZXQoKSwgcHJvdG90eXBlKTsKICAgICAgICAgICAgIHByb3RvdHlwZS0+ZGlkQmVjb21l
UHJvdG90eXBlKCk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFoYXNJbmRleGVk
UHJvcGVydGllcyhyZXN1bHQtPmluZGV4aW5nVHlwZSgpKSwgIldlIHJlbHkgb24gSlNGaW5hbE9i
amVjdCBub3Qgc3RhcnRpbmcgb3V0IHdpdGggYW4gaW5kZXhpbmcgdHlwZSBvdGhlcndpc2Ugd2Ug
d291bGQgcG90ZW50aWFsbHkgbmVlZCB0byBjb252ZXJ0IHRvIHNsb3cgcHV0IHN0b3JhZ2UiKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxMyw2ICsxNDEzLDgg
QEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0NDbwogICAgICAgICAKICAg
ICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkpCiAgICAgICAgIHZtKCktPnR5cGVQcm9maWxlcigp
LT5pbnZhbGlkYXRlVHlwZVNldENhY2hlKCk7CisKKyAgICB2bSgpLT5zdHJ1Y3R1cmVDYWNoZS5y
ZW1vdmVEZWFkRW50cmllcygpOwogICAgICAgICAKICAgICByZWFwV2Vha0hhbmRsZXMoKTsKICAg
ICBwcnVuZVN0YWxlRW50cmllc0Zyb21XZWFrR0NNYXBzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIy
MzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw2ICsyNTAsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfY3JlYXRlX3RoaXMpCiAgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0gY29u
c3RydWN0b3ItPnByb3RvdHlwZUZvckNvbnN0cnVjdGlvbih2bSwgZXhlYyk7CiAgICAgICAgICAg
ICByZXN1bHQtPnB1dERpcmVjdCh2bSwgc3RydWN0dXJlLT5wb2x5UHJvdG9PZmZzZXQoKSwgcHJv
dG90eXBlKTsKICAgICAgICAgICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7Cisg
ICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFoYXNJbmRleGVkUHJvcGVydGllcyhyZXN1
bHQtPmluZGV4aW5nVHlwZSgpKSwgIldlIHJlbHkgb24gSlNGaW5hbE9iamVjdCBub3Qgc3RhcnRp
bmcgb3V0IHdpdGggYW4gaW5kZXhpbmcgdHlwZSBvdGhlcndpc2Ugd2Ugd291bGQgcG90ZW50aWFs
bHkgbmVlZCB0byBjb252ZXJ0IHRvIHNsb3cgcHV0IHN0b3JhZ2UiKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEt
MjYyLzYuMC8jc2VjLW9yZGluYXJ5Y3JlYXRlZnJvbWNvbnN0cnVjdG9yCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBTdHJ1Y3R1cmUq
IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsCiAgICAgICAgIGlmIChKU09iamVjdCogcHJv
dG90eXBlID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBwcm90b3R5cGVWYWx1ZSkpIHsK
ICAgICAgICAgICAgIC8vIFRoaXMgb25seSBoYXBwZW5zIGlmIHNvbWVvbmUgUmVmbGVjdC5jb25z
dHJ1Y3RzIG91ciBidWlsdGluIGNvbnN0cnVjdG9yIHdpdGggYW5vdGhlciBidWlsdGluIGNvbnN0
cnVjdG9yIGFzIHRoZSBuZXcudGFyZ2V0LgogICAgICAgICAgICAgLy8gVGh1cywgd2UgZG9uJ3Qg
Y2FyZSBhYm91dCB0aGUgY29zdCBvZiBsb29raW5nIHVwIHRoZSBzdHJ1Y3R1cmUgZnJvbSBvdXIg
aGFzaCB0YWJsZSBldmVyeSB0aW1lLgotICAgICAgICAgICAgcmV0dXJuIHZtLnByb3RvdHlwZU1h
cC5lbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKGxleGljYWxHbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZUNsYXNzKTsKKyAgICAgICAgICAgIHJldHVybiB2bS5z
dHJ1Y3R1cmVDYWNoZS5lbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJl
KGxleGljYWxHbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZUNsYXNzKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9y
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHN0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCB2YWx1ZVBy
b3BlcnQKIAogU3RydWN0dXJlKiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdFN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgU3RydWN0dXJlKiBp
dGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IHZtLnByb3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVj
dHVyZUZvclByb3RvdHlwZSgmZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qub2JqZWN0UHJvdG90
eXBlKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKTsKKyAgICBTdHJ1
Y3R1cmUqIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gdm0uc3RydWN0dXJlQ2FjaGUuZW1wdHlP
YmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9i
amVjdFByb3RvdHlwZSgpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSk7
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJl
ID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3Ry
dWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kb25lLCAwLCBvZmZzZXQpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKG9mZnNldCA9PSBkb25lUHJvcGVydHlPZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAy
MjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgaW5saW5lIFN0cnVjdHVyZSog
Z2V0Qm91bmRGdW5jdGlvblN0cnVjdAogICAgIC8vIGN1cnJlbnRseS4gV2hvZXZlciB3b3JrcyBv
biBjYWNoaW5nIHN0cnVjdHVyZSBjaGFuZ2VzIGZvciBwcm90b3R5cGUgdHJhbnNpc3Rpb25zIHNo
b3VsZCBjb25zaWRlciB0aGlzIHByb2JsZW0gYXMgd2VsbC4KICAgICAvLyBTZWU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI3MzgKICAgICBpZiAocHJvdG90eXBl
LmlzT2JqZWN0KCkgJiYgcHJvdG90eXBlLmdldE9iamVjdCgpLT5nbG9iYWxPYmplY3QoKSA9PSBn
bG9iYWxPYmplY3QpIHsKLSAgICAgICAgcmVzdWx0ID0gdm0ucHJvdG90eXBlTWFwLmVtcHR5U3Ry
dWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUuZ2V0T2JqZWN0KCksIHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9IHZtLnN0cnVjdHVyZUNh
Y2hlLmVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUuZ2V0T2JqZWN0KCksIHJlc3VsdCk7CiAgICAgICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHJlc3VsdC0+Z2xvYmFsT2JqZWN0KCkgPT0gZ2xvYmFsT2Jq
ZWN0KTsKICAgICB9IGVsc2UKICAgICAgICAgcmVzdWx0ID0gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCByZXN1bHQtPnR5cGVJbmZvKCksIHJlc3VsdC0+Y2xh
c3NJbmZvKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsNyAr
NDU0LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6aW5pdChWTSYgdm0pCiAgICAgcHJvdG9BY2Nl
c3Nvci0+c2V0U2V0dGVyKHZtLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDAs
IG1ha2VTdHJpbmcoInNldCAiLCB2bS5wcm9wZXJ0eU5hbWVzLT51bmRlcnNjb3JlUHJvdG8uc3Ry
aW5nKCkpLCBnbG9iYWxGdW5jUHJvdG9TZXR0ZXIpKTsKICAgICBtX29iamVjdFByb3RvdHlwZS0+
cHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcih2bSwgdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29y
ZVByb3RvLCBwcm90b0FjY2Vzc29yLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IgfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pOwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUtPnN0cnVj
dHVyZSgpLT5zZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbih2bSwgbV9vYmplY3RQcm90b3R5
cGUuZ2V0KCkpOwotICAgIG1fb2JqZWN0U3RydWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3Iuc2V0
KHZtLCB0aGlzLCB2bS5wcm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5
cGUodGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJ
bmxpbmVDYXBhY2l0eSgpKSk7CisgICAgbV9vYmplY3RTdHJ1Y3R1cmVGb3JPYmplY3RDb25zdHJ1
Y3Rvci5zZXQodm0sIHRoaXMsIHZtLnN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0U3RydWN0dXJl
Rm9yUHJvdG90eXBlKHRoaXMsIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpLCBKU0ZpbmFsT2JqZWN0
OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSkpOwogICAgIG1fb2JqZWN0UHJvdG9WYWx1ZU9mRnVu
Y3Rpb24uc2V0KHZtLCB0aGlzLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KG9iamVjdFByb3RvdHlwZSgp
LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YpKSk7CiAgICAgCiAgICAg
SlNGdW5jdGlvbiogdGhyb3dlciA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMCwgU3Ry
aW5nKCksIGdsb2JhbEZ1bmNUaHJvd1R5cGVFcnJvckFyZ3VtZW50c0NhbGxlZUFuZENhbGxlcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3h5LmNwcAkocmV2aXNp
b24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgdm9pZCBKU1Byb3h5OjpzZXRUYXJnZXQo
Vk0mIHZtLCBKU0dsb2JhbAogICAgIG1fdGFyZ2V0LnNldCh2bSwgdGhpcywgZ2xvYmFsT2JqZWN0
KTsKICAgICBzZXRQcm90b3R5cGVEaXJlY3Qodm0sIGdsb2JhbE9iamVjdC0+Z2V0UHJvdG90eXBl
RGlyZWN0KCkpOwogCi0gICAgUHJvdG90eXBlTWFwJiBwcm90b3R5cGVNYXAgPSB2bS5wcm90b3R5
cGVNYXA7CiAgICAgaWYgKCFtYXlCZVByb3RvdHlwZSgpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTYyLDggKzYxLDkgQEAgdm9pZCBKU1Byb3h5OjpzZXRUYXJnZXQoVk0mIHZtLCBKU0dsb2JhbAog
ICAgIC8vIFRoaXMgaXMgc2xvdyBidXQgY29uc3RhbnQgdGltZS4gV2UgdGhpbmsgaXQncyB2ZXJ5
IHJhcmUgZm9yIGEgcHJveHkKICAgICAvLyB0byBiZSBhIHByb3RvdHlwZSwgYW5kIHJlYXNvbmFi
bHkgcmFyZSB0byByZXRhcmdldCBhIHByb3h5LAogICAgIC8vIHNvIHNsb3cgY29uc3RhbnQgdGlt
ZSBpcyBPSy4KKyAgICBTdHJ1Y3R1cmVDYWNoZSYgc3RydWN0dXJlQ2FjaGUgPSB2bS5zdHJ1Y3R1
cmVDYWNoZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8PSBKU0ZpbmFsT2JqZWN0OjptYXhJ
bmxpbmVDYXBhY2l0eSgpOyArK2kpCi0gICAgICAgIHByb3RvdHlwZU1hcC5jbGVhckVtcHR5T2Jq
ZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKHByZXZpb3VzR2xvYmFsT2JqZWN0LCB0aGlzLCBpKTsK
KyAgICAgICAgc3RydWN0dXJlQ2FjaGUuY2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3Rv
dHlwZShwcmV2aW91c0dsb2JhbE9iamVjdCwgdGhpcywgaSk7CiB9CiAKIFN0cmluZyBKU1Byb3h5
OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAkocmV2aXNpb24gMjIz
MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsOCBAQCBpbmxpbmUgSlNPYmplY3QqIGNvbnN0
cnVjdEVtcHR5T2JqZWN0KEV4CiBpbmxpbmUgSlNPYmplY3QqIGNvbnN0cnVjdEVtcHR5T2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2Fw
YWNpdHkpCiB7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKLSAgICBQcm90b3R5cGVNYXAmIHByb3RvdHlwZU1hcCA9IGdsb2Jh
bE9iamVjdC0+dm0oKS5wcm90b3R5cGVNYXA7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBw
cm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICBTdHJ1Y3R1cmVDYWNoZSYgc3RydWN0
dXJlQ2FjaGUgPSBnbG9iYWxPYmplY3QtPnZtKCkuc3RydWN0dXJlQ2FjaGU7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVDYWNoZS5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclBy
b3RvdHlwZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOwogICAgIHJl
dHVybiBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVLZXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVLZXkuaAkocmV2aXNpb24g
MjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlS2V5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAgY2xhc3MgUHJvdG90eXBlS2V5IHsKIHB1
YmxpYzoKICAgICBQcm90b3R5cGVLZXkoKSB7IH0KICAgICAKLSAgICBQcm90b3R5cGVLZXkoSlNP
YmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgICAgICA6IG1f
cHJvdG90eXBlKHByb3RvdHlwZSkKKyAgICBQcm90b3R5cGVLZXkoSlNDZWxsKiBwcm90b3R5cGVP
ckV4ZWN1dGFibGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiBtX3Byb3Rv
dHlwZU9yRXhlY3V0YWJsZShwcm90b3R5cGVPckV4ZWN1dGFibGUpCiAgICAgICAgICwgbV9pbmxp
bmVDYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkKICAgICAgICAgLCBtX2NsYXNzSW5mbyhjbGFzc0lu
Zm8pCiAgICAgICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQpAQCAtNDYsMTQgKzQ2
LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIEpTT2JqZWN0KiBwcm90b3R5
cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvdHlwZTsgfQorICAgIEpTQ2VsbCogcHJvdG90eXBl
T3JFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b3R5cGVPckV4ZWN1dGFibGU7IH0K
ICAgICB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lQ2Fw
YWNpdHk7IH0KICAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJu
IG1fY2xhc3NJbmZvOyB9CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFByb3RvdHlwZUtleSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9w
cm90b3R5cGUgPT0gb3RoZXIubV9wcm90b3R5cGUKKyAgICAgICAgcmV0dXJuIG1fcHJvdG90eXBl
T3JFeGVjdXRhYmxlID09IG90aGVyLm1fcHJvdG90eXBlT3JFeGVjdXRhYmxlCiAgICAgICAgICAg
ICAmJiBtX2lubGluZUNhcGFjaXR5ID09IG90aGVyLm1faW5saW5lQ2FwYWNpdHkKICAgICAgICAg
ICAgICYmIG1fY2xhc3NJbmZvID09IG90aGVyLm1fY2xhc3NJbmZvCiAgICAgICAgICAgICAmJiBt
X2dsb2JhbE9iamVjdCA9PSBvdGhlci5tX2dsb2JhbE9iamVjdDsKQEAgLTY1LDEzICs2NSwxNSBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjpJbnRIYXNoPHVpbnRwdHJfdD46Omhhc2goYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4obV9wcm90b3R5cGUpIF4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9jbGFzc0luZm8p
IF4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9nbG9iYWxPYmplY3QpKSArIG1faW5saW5lQ2Fw
YWNpdHk7CisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8dWludHB0cl90Pjo6aGFzaChiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihtX3Byb3RvdHlwZU9yRXhlY3V0YWJsZSkgXiBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihtX2NsYXNzSW5mbykgXiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2ds
b2JhbE9iamVjdCkpICsgbV9pbmxpbmVDYXBhY2l0eTsKICAgICB9CiAgICAgCiBwcml2YXRlOgog
ICAgIC8vIFdBUk5JTkc6IFdlIHJlcXVpcmUgYWxsIG9mIHRoZXNlIGRlZmF1bHQgdmFsdWVzIHRv
IGJlIHplcm8uIE90aGVyd2lzZSwgeW91J2xsIG5lZWQgdG8gYWRkCiAgICAgLy8gInN0YXRpYyBj
b25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsiIHRvIHRoZSBIYXNoVHJhaXRzIGF0
IHRoZSBib3R0b20gb2YgdGhpcyBmaWxlLgotICAgIEpTT2JqZWN0KiBtX3Byb3RvdHlwZSB7IG51
bGxwdHIgfTsKKworICAgIC8vIFRoaXMgaXMgYSBKU09iamVjdCogcHJvdG90eXBlIHdoZW4gZG9p
bmcgbW9ubyBwcm90by4gSXQncyBhIEZ1bmN0aW9uRXhlY3V0YWJsZSogd2hlbiBkb2luZyBwb2x5
IHByb3RvLgorICAgIEpTQ2VsbCogbV9wcm90b3R5cGVPckV4ZWN1dGFibGUgeyBudWxscHRyIH07
IAogICAgIHVuc2lnbmVkIG1faW5saW5lQ2FwYWNpdHkgeyAwIH07CiAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBtX2NsYXNzSW5mbyB7IG51bGxwdHIgfTsKICAgICBKU0dsb2JhbE9iamVjdCogbV9nbG9i
YWxPYmplY3QgeyBudWxscHRyIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm90b3R5cGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3RvdHlwZU1hcC5jcHAJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw4
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlByb3RvdHlwZU1hcC5oIgotCi0j
aW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCi0jaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKLSNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgU3RydWN0
dXJlKiBQcm90b3R5cGVNYXA6OmNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5m
bywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUs
IHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpCi17
Ci0gICAgUkVMRUFTRV9BU1NFUlQoISFwcm90b3R5cGUpOyAvLyBXZSB1c2UgbnVsbHB0ciBpbnNp
ZGUgdGhlIEhhc2hNYXAgZm9yIHByb3RvdHlwZSB0byBtZWFuIHBvbHkgcHJvdG8sIHNvIHVzZXIn
cyBvZiB0aGlzIEFQSSBtdXN0IHByb3ZpZGUgbm9uLW51bGwgcHJvdG90eXBlcy4KLQotICAgIGF1
dG8ga2V5ID0gUHJvdG90eXBlS2V5KG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUgPyBudWxscHRyIDog
cHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSwgY2xhc3NJbmZvLCBnbG9iYWxPYmplY3QpOwotICAg
IGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RydWN0dXJlcy5nZXQoa2V5KSkgewotICAg
ICAgICBpZiAobWFrZVBvbHlQcm90b1N0cnVjdHVyZSkgewotICAgICAgICAgICAgcHJvdG90eXBl
LT5kaWRCZWNvbWVQcm90b3R5cGUoKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVj
dHVyZS0+aGFzUG9seVByb3RvKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN0cnVjdHVyZS0+aGFzTW9ub1Byb3RvKCkpOwotICAgICAgICBBU1NFUlQocHJv
dG90eXBlLT5tYXlCZVByb3RvdHlwZSgpKTsKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAg
ICB9Ci0KLSAgICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOwotCi0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwotICAgIGlm
IChtYWtlUG9seVByb3RvU3RydWN0dXJlKSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6Y3JlYXRlKAotICAgICAgICAgICAgU3RydWN0dXJlOjpQb2x5UHJvdG8sIHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBpbmxp
bmVDYXBhY2l0eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJl
OjpjcmVhdGUoCi0gICAgICAgICAgICB2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJ
bmZvLCBjbGFzc0luZm8sIGluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHkpOwotICAgIH0KLSAg
ICBtX3N0cnVjdHVyZXMuc2V0KGtleSwgV2VhazxTdHJ1Y3R1cmU+KHN0cnVjdHVyZSkpOwotCi0g
ICAgcmV0dXJuIHN0cnVjdHVyZTsKLX0KLQotU3RydWN0dXJlKiBQcm90b3R5cGVNYXA6OmVtcHR5
U3RydWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJl
KQotewotICAgIC8vIFdlIGN1cnJlbnRseSBkbyBub3QgaGF2ZSBpbmxpbmUgY2FwYWNpdHkgc3Rh
dGljIGFuYWx5c2lzIGZvciBzdWJjbGFzc2VzIGFuZCBhbGwgaW50ZXJuYWwgZnVuY3Rpb24gY29u
c3RydWN0b3JzIGhhdmUgYSBkZWZhdWx0IGlubGluZSBjYXBhY2l0eSBvZiAwLgotICAgIEluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBiYXNlU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKLSAg
ICBpZiAocHJvdG90eXBlLT5hbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vz
c2VzKCkgJiYgaGFzSW5kZXhlZFByb3BlcnRpZXMoaW5kZXhpbmdUeXBlKSkKLSAgICAgICAgaW5k
ZXhpbmdUeXBlID0gKGluZGV4aW5nVHlwZSAmIH5JbmRleGluZ1NoYXBlTWFzaykgfCBTbG93UHV0
QXJyYXlTdG9yYWdlU2hhcGU7Ci0KLSAgICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIGJhc2VTdHJ1Y3R1cmUtPnR5cGVJbmZvKCksIGJhc2VTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpbmRleGluZ1R5cGUsIDAsIGZhbHNlKTsKLX0KLQotU3RydWN0
dXJlKiBQcm90b3R5cGVNYXA6OmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVkIGlu
bGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpCi17Ci0gICAgcmV0dXJu
IGNyZWF0ZUVtcHR5U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0ZpbmFsT2Jq
ZWN0Ojp0eXBlSW5mbygpLCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIEpTRmluYWxPYmplY3Q6OmRl
ZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5LCBtYWtlUG9seVByb3RvU3RydWN0dXJl
KTsKLX0KLQotdm9pZCBQcm90b3R5cGVNYXA6OmNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQ
cm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCi17Ci0gICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShQcm90
b3R5cGVLZXkob2JqZWN0LCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBn
bG9iYWxPYmplY3QpKTsKLSAgICBtX3N0cnVjdHVyZXMucmVtb3ZlKFByb3RvdHlwZUtleShudWxs
cHRyLCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBnbG9iYWxPYmplY3Qp
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm90b3R5cGVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm90b3R5cGVNYXAuaAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKLSNpbmNsdWRl
ICJKU1R5cGVJbmZvLmgiCi0jaW5jbHVkZSAiUHJvdG90eXBlS2V5LmgiCi0jaW5jbHVkZSAiV2Vh
a0dDTWFwLmgiCi0jaW5jbHVkZSA8d3RmL1RyaVN0YXRlLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBKU0dsb2JhbE9iamVjdDsKLWNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU3RydWN0dXJl
OwotY2xhc3MgVk07Ci0KLS8vIFRyYWNrcyB0aGUgY2Fub25pY2FsIHN0cnVjdHVyZSBhbiBvYmpl
Y3Qgc2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIHdoZW4gaW5oZXJpdGluZyBmcm9tIGEgZ2l2ZW4g
cHJvdG90eXBlLgotY2xhc3MgUHJvdG90eXBlTWFwIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBQ
cm90b3R5cGVNYXAoVk0mIHZtKQotICAgICAgICA6IG1fc3RydWN0dXJlcyh2bSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBlbXB0eU9iamVjdFN0cnVj
dHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5s
aW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSA9IGZhbHNlKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJv
bUJhc2VTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFN0cnVjdHVyZSopOwot
ICAgIHZvaWQgY2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpOwotCi1wcml2YXRlOgot
ICAgIFN0cnVjdHVyZSogY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09i
amVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4
aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVj
dHVyZSk7Ci0KLSAgICB1c2luZyBTdHJ1Y3R1cmVNYXAgPSBXZWFrR0NNYXA8UHJvdG90eXBlS2V5
LCBTdHJ1Y3R1cmU+OwotICAgIFN0cnVjdHVyZU1hcCBtX3N0cnVjdHVyZXM7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVDYWNoZS5jcHAJKHJldmlzaW9uIDIyMzA1NSkJKGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcDoyMjMwNTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm90b3R5cGVNYXAuaCIK
KworI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFN0
cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlw
ZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJl
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKCEhcHJvdG90eXBlKTsgLy8gV2UgdXNlIG51bGxwdHIg
aW5zaWRlIHRoZSBIYXNoTWFwIGZvciBwcm90b3R5cGUgdG8gbWVhbiBwb2x5IHByb3RvLCBzbyB1
c2VyJ3Mgb2YgdGhpcyBBUEkgbXVzdCBwcm92aWRlIG5vbi1udWxsIHByb3RvdHlwZXMuCisKKyAg
ICBhdXRvIGtleSA9IFByb3RvdHlwZUtleShtYWtlUG9seVByb3RvU3RydWN0dXJlID8gbnVsbHB0
ciA6IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGNsYXNzSW5mbywgZ2xvYmFsT2JqZWN0KTsK
KyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZXMuZ2V0KGtleSkpIHsK
KyAgICAgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIHByb3Rv
dHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmhhc01vbm9Qcm90bygpKTsKKyAgICAgICAgQVNTRVJU
KHByb3RvdHlwZS0+bWF5QmVQcm90b3R5cGUoKSk7CisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7
CisgICAgfQorCisgICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQcm90b3R5cGUoKTsKKworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAg
ICBpZiAobWFrZVBvbHlQcm90b1N0cnVjdHVyZSkgeworICAgICAgICBzdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgICAgIFN0cnVjdHVyZTo6UG9seVByb3RvLCB2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4aW5nVHlwZSwg
aW5saW5lQ2FwYWNpdHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6Y3JlYXRlKAorICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0
eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICB9
CisgICAgbV9zdHJ1Y3R1cmVzLnNldChrZXksIFdlYWs8U3RydWN0dXJlPihzdHJ1Y3R1cmUpKTsK
KworICAgIHJldHVybiBzdHJ1Y3R1cmU7Cit9CisKK1N0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpl
bXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZVN0cnVj
dHVyZSkKK3sKKyAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IGhhdmUgaW5saW5lIGNhcGFjaXR5
IHN0YXRpYyBhbmFseXNpcyBmb3Igc3ViY2xhc3NlcyBhbmQgYWxsIGludGVybmFsIGZ1bmN0aW9u
IGNvbnN0cnVjdG9ycyBoYXZlIGEgZGVmYXVsdCBpbmxpbmUgY2FwYWNpdHkgb2YgMC4KKyAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYmFzZVN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7
CisgICAgaWYgKHByb3RvdHlwZS0+YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpICYmIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSkpCisgICAgICAg
IGluZGV4aW5nVHlwZSA9IChpbmRleGluZ1R5cGUgJiB+SW5kZXhpbmdTaGFwZU1hc2spIHwgU2xv
d1B1dEFycmF5U3RvcmFnZVNoYXBlOworCisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5U3RydWN0dXJl
KGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlLT50eXBlSW5mbygpLCBiYXNl
U3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaW5kZXhpbmdUeXBlLCAwLCBmYWxzZSk7Cit9CisKK1N0
cnVjdHVyZSogUHJvdG90eXBlTWFwOjplbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlKQoreworICAgIHJl
dHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNGaW5h
bE9iamVjdDo6dHlwZUluZm8oKSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBKU0ZpbmFsT2JqZWN0
OjpkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSwgbWFrZVBvbHlQcm90b1N0cnVj
dHVyZSk7Cit9CisKK3ZvaWQgUHJvdG90eXBlTWFwOjpjbGVhckVtcHR5T2JqZWN0U3RydWN0dXJl
Rm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBvYmpl
Y3QsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQoreworICAgIG1fc3RydWN0dXJlcy5yZW1vdmUo
UHJvdG90eXBlS2V5KG9iamVjdCwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxPYmplY3Q6OmluZm8o
KSwgZ2xvYmFsT2JqZWN0KSk7CisgICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShQcm90b3R5cGVLZXko
bnVsbHB0ciwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxPYmplY3Q6OmluZm8oKSwgZ2xvYmFsT2Jq
ZWN0KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmNwcAkocmV2aXNpb24gMjIzMDU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIlByb3RvdHlwZU1hcC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUNhY2hlLmgiCiAK
ICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgpA
QCAtMzIsMTEgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUgU3RydWN0dXJl
KiBQcm90b3R5cGVNYXA6OmNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpCitpbmxp
bmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVDYWNoZTo6Y3JlYXRlRW1wdHlTdHJ1Y3R1cmUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUlu
Zm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0
cnVjdHVyZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlKQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKCEhcHJvdG90eXBlKTsgLy8gV2UgdXNlIG51bGxwdHIgaW5zaWRlIHRoZSBIYXNoTWFw
IGZvciBwcm90b3R5cGUgdG8gbWVhbiBwb2x5IHByb3RvLCBzbyB1c2VyJ3Mgb2YgdGhpcyBBUEkg
bXVzdCBwcm92aWRlIG5vbi1udWxsIHByb3RvdHlwZXMuCisgICAgUkVMRUFTRV9BU1NFUlQoISFw
cm90b3R5cGUpOwogCi0gICAgYXV0byBrZXkgPSBQcm90b3R5cGVLZXkobWFrZVBvbHlQcm90b1N0
cnVjdHVyZSA/IG51bGxwdHIgOiBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5LCBjbGFzc0luZm8s
IGdsb2JhbE9iamVjdCk7CisgICAgUHJvdG90eXBlS2V5IGtleSB7IG1ha2VQb2x5UHJvdG9TdHJ1
Y3R1cmUgPyBzdGF0aWNfY2FzdDxKU0NlbGwqPihleGVjdXRhYmxlKSA6IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KHByb3RvdHlwZSksIGlubGluZUNhcGFjaXR5LCBjbGFzc0luZm8sIGdsb2JhbE9iamVj
dCB9OwogICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RydWN0dXJlcy5nZXQoa2V5
KSkgewogICAgICAgICBpZiAobWFrZVBvbHlQcm90b1N0cnVjdHVyZSkgewogICAgICAgICAgICAg
cHJvdG90eXBlLT5kaWRCZWNvbWVQcm90b3R5cGUoKTsKQEAgLTU4LDMwICs1OCw0MSBAQCBpbmxp
bmUgU3RydWN0dXJlKiBQcm90b3R5cGVNYXA6OmNyZWF0ZUVtCiAgICAgICAgIHN0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6Y3JlYXRlKAogICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsK
ICAgICB9Ci0gICAgbV9zdHJ1Y3R1cmVzLnNldChrZXksIFdlYWs8U3RydWN0dXJlPihzdHJ1Y3R1
cmUpKTsKKyAgICBtX3N0cnVjdHVyZXMuc2V0KGtleSwgc3RydWN0dXJlKTsKIAogICAgIHJldHVy
biBzdHJ1Y3R1cmU7CiB9CiAKLVN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjplbXB0eVN0cnVjdHVy
ZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSkKK1N0cnVj
dHVyZSogU3RydWN0dXJlQ2FjaGU6OmVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VT
dHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlw
ZSwgU3RydWN0dXJlKiBiYXNlU3RydWN0dXJlKQogewogICAgIC8vIFdlIGN1cnJlbnRseSBkbyBu
b3QgaGF2ZSBpbmxpbmUgY2FwYWNpdHkgc3RhdGljIGFuYWx5c2lzIGZvciBzdWJjbGFzc2VzIGFu
ZCBhbGwgaW50ZXJuYWwgZnVuY3Rpb24gY29uc3RydWN0b3JzIGhhdmUgYSBkZWZhdWx0IGlubGlu
ZSBjYXBhY2l0eSBvZiAwLgogICAgIEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBiYXNlU3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKTsKICAgICBpZiAocHJvdG90eXBlLT5hbnlPYmplY3RJbkNo
YWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgJiYgaGFzSW5kZXhlZFByb3BlcnRpZXMo
aW5kZXhpbmdUeXBlKSkKICAgICAgICAgaW5kZXhpbmdUeXBlID0gKGluZGV4aW5nVHlwZSAmIH5J
bmRleGluZ1NoYXBlTWFzaykgfCBTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGU7CiAKLSAgICByZXR1
cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGJhc2VTdHJ1
Y3R1cmUtPnR5cGVJbmZvKCksIGJhc2VTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpbmRleGluZ1R5
cGUsIDAsIGZhbHNlKTsKKyAgICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIGJhc2VTdHJ1Y3R1cmUtPnR5cGVJbmZvKCksIGJhc2VTdHJ1Y3R1cmUt
PmNsYXNzSW5mbygpLCBpbmRleGluZ1R5cGUsIDAsIGZhbHNlLCBudWxscHRyKTsKIH0KIAotU3Ry
dWN0dXJlKiBQcm90b3R5cGVNYXA6OmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIHVuc2lnbmVk
IGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpCitTdHJ1Y3R1cmUq
IFN0cnVjdHVyZUNhY2hlOjplbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlLCBGdW5jdGlvbkV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5U3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBKU0ZpbmFsT2JqZWN0Ojp0eXBlSW5mbygpLCBKU0ZpbmFsT2Jq
ZWN0OjppbmZvKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmRleGluZ1R5cGUsIGlubGluZUNh
cGFjaXR5LCBtYWtlUG9seVByb3RvU3RydWN0dXJlKTsKKyAgICByZXR1cm4gY3JlYXRlRW1wdHlT
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTRmluYWxPYmplY3Q6OnR5cGVJbmZv
KCksIEpTRmluYWxPYmplY3Q6OmluZm8oKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdEluZGV4aW5n
VHlwZSwgaW5saW5lQ2FwYWNpdHksIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUsIGV4ZWN1dGFibGUp
OwogfQogCi12b2lkIFByb3RvdHlwZU1hcDo6Y2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZvclBy
b3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogb2JqZWN0LCB1
bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKK3ZvaWQgU3RydWN0dXJlQ2FjaGU6OmNsZWFyRW1wdHlP
YmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpCiB7Ci0gICAgbV9zdHJ1
Y3R1cmVzLnJlbW92ZShQcm90b3R5cGVLZXkob2JqZWN0LCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5h
bE9iamVjdDo6aW5mbygpLCBnbG9iYWxPYmplY3QpKTsKLSAgICBtX3N0cnVjdHVyZXMucmVtb3Zl
KFByb3RvdHlwZUtleShudWxscHRyLCBpbmxpbmVDYXBhY2l0eSwgSlNGaW5hbE9iamVjdDo6aW5m
bygpLCBnbG9iYWxPYmplY3QpKTsKKyAgICBtX3N0cnVjdHVyZXMucmVtb3ZlKFByb3RvdHlwZUtl
eSB7IG9iamVjdCwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxPYmplY3Q6OmluZm8oKSwgZ2xvYmFs
T2JqZWN0IH0pOworfQorCit2b2lkIFN0cnVjdHVyZUNhY2hlOjpyZW1vdmVEZWFkRW50cmllcygp
Cit7CisgICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZUlmKFsmXSAoYXV0byYgZW50cnkpIHsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgaWYgKCFIZWFw
Ojppc01hcmtlZChzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGNvbnN0IFByb3RvdHlwZUtleSYga2V5ID0gZW50cnkua2V5OworICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKEhlYXA6OmlzTWFya2VkKGtleS5nbG9iYWxPYmplY3QoKSksICJXZSByZWx5IG9u
IHRoZSBzdHJ1Y3R1cmUga2VlcGluZyBhbGl2ZSB0aGUgZ2xvYmFsIG9iamVjdC4iKTsKKyAgICAg
ICAgcmV0dXJuICFIZWFwOjppc01hcmtlZChrZXkucHJvdG90eXBlT3JFeGVjdXRhYmxlKCkpOwor
ICAgIH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuaAkocmV2aXNpb24gMjIzMDU1KQkoZnJv
bSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuaDoyMjMwNTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkluZGV4aW5nVHlw
ZS5oIgorI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKKyNpbmNsdWRlICJQcm90b3R5cGVLZXkuaCIK
KyNpbmNsdWRlICJXZWFrR0NNYXAuaCIKKyNpbmNsdWRlIDx3dGYvVHJpU3RhdGUuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgSlNPYmplY3Q7Citj
bGFzcyBTdHJ1Y3R1cmU7CitjbGFzcyBWTTsKKworLy8gVHJhY2tzIHRoZSBjYW5vbmljYWwgc3Ry
dWN0dXJlIGFuIG9iamVjdCBzaG91bGQgYmUgYWxsb2NhdGVkIHdpdGggd2hlbiBpbmhlcml0aW5n
IGZyb20gYSBnaXZlbiBwcm90b3R5cGUuCitjbGFzcyBQcm90b3R5cGVNYXAgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IFByb3RvdHlwZU1hcChWTSYgdm0pCisgICAgICAgIDogbV9zdHJ1Y3R1cmVz
KHZtKQorICAgIHsKKyAgICB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGVt
cHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3Qq
LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlID0g
ZmFsc2UpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSogZW1wdHlTdHJ1Y3R1cmVG
b3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kiwg
U3RydWN0dXJlKik7CisgICAgdm9pZCBjbGVhckVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90
eXBlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSk7
CisKK3ByaXZhdGU6CisgICAgU3RydWN0dXJlKiBjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xh
c3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtl
UG9seVByb3RvU3RydWN0dXJlKTsKKworICAgIHVzaW5nIFN0cnVjdHVyZU1hcCA9IFdlYWtHQ01h
cDxQcm90b3R5cGVLZXksIFN0cnVjdHVyZT47CisgICAgU3RydWN0dXJlTWFwIG1fc3RydWN0dXJl
czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5oCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAi
SlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIlByb3RvdHlwZUtleS5oIgotI2luY2x1ZGUgIldlYWtH
Q01hcC5oIgogI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAg
LTM5LDIxICszOCwyMCBAQCBjbGFzcyBTdHJ1Y3R1cmU7CiBjbGFzcyBWTTsKIAogLy8gVHJhY2tz
IHRoZSBjYW5vbmljYWwgc3RydWN0dXJlIGFuIG9iamVjdCBzaG91bGQgYmUgYWxsb2NhdGVkIHdp
dGggd2hlbiBpbmhlcml0aW5nIGZyb20gYSBnaXZlbiBwcm90b3R5cGUuCi1jbGFzcyBQcm90b3R5
cGVNYXAgeworY2xhc3MgU3RydWN0dXJlQ2FjaGUgewogcHVibGljOgotICAgIGV4cGxpY2l0IFBy
b3RvdHlwZU1hcChWTSYgdm0pCi0gICAgICAgIDogbV9zdHJ1Y3R1cmVzKHZtKQotICAgIHsKLSAg
ICB9CisgICAgU3RydWN0dXJlQ2FjaGUoKSA9IGRlZmF1bHQ7CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBTdHJ1Y3R1cmUqIGVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9s
eVByb3RvU3RydWN0dXJlID0gZmFsc2UpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVy
ZSogZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU09i
amVjdCosIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1
cmUgPSBmYWxzZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiA9IG51bGxwdHIpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIFN0cnVjdHVyZSogZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0
cnVjdHVyZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgU3RydWN0dXJlKik7CiAgICAgdm9p
ZCBjbGVhckVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSk7CisgICAgCisgICAgdm9pZCByZW1v
dmVEZWFkRW50cmllcygpOwogCiBwcml2YXRlOgotICAgIFN0cnVjdHVyZSogY3JlYXRlRW1wdHlT
dHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBl
SW5mbyYsIGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2Fw
YWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSk7CisgICAgU3RydWN0dXJlKiBjcmVh
dGVFbXB0eVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNv
bnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBp
bmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlLCBGdW5jdGlvbkV4ZWN1
dGFibGUqKTsKIAotICAgIHVzaW5nIFN0cnVjdHVyZU1hcCA9IFdlYWtHQ01hcDxQcm90b3R5cGVL
ZXksIFN0cnVjdHVyZT47CisgICAgdXNpbmcgU3RydWN0dXJlTWFwID0gSGFzaE1hcDxQcm90b3R5
cGVLZXksIFN0cnVjdHVyZSo+OwogICAgIFN0cnVjdHVyZU1hcCBtX3N0cnVjdHVyZXM7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMjMwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5NCw3ICsxOTQsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgLCBjdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbk1hcCgqdGhpcykKICAgICAsIHN0
cmluZ0NhY2hlKCp0aGlzKQogICAgICwgc3ltYm9sSW1wbFRvU3ltYm9sTWFwKCp0aGlzKQotICAg
ICwgcHJvdG90eXBlTWFwKCp0aGlzKQogICAgICwgaW50ZXJwcmV0ZXIoMCkKICAgICAsIGVudHJ5
U2NvcGUoMCkKICAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiTWlj
cm90YXNrLmgiCiAjaW5jbHVkZSAiTnVtZXJpY1N0cmluZ3MuaCIKLSNpbmNsdWRlICJQcm90b3R5
cGVNYXAuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogI2luY2x1ZGUgIlNtYWxsU3Ry
aW5ncy5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCkBAIC01
Niw2ICs1Niw3IEBACiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUgIlZNVHJh
cHMuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAj
aW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CkBAIC00NjQsNyArNDY1
LDcgQEAgcHVibGljOgogICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGUqIGFkZFNvdXJjZVByb3ZpZGVy
Q2FjaGUoU291cmNlUHJvdmlkZXIqKTsKICAgICB2b2lkIGNsZWFyU291cmNlUHJvdmlkZXJDYWNo
ZXMoKTsKIAotICAgIFByb3RvdHlwZU1hcCBwcm90b3R5cGVNYXA7CisgICAgU3RydWN0dXJlQ2Fj
aGUgc3RydWN0dXJlQ2FjaGU7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFNvdXJjZVBy
b3ZpZGVyPiwgUmVmUHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGU+PiBTb3VyY2VQcm92aWRlckNhY2hl
TWFwOwogICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAgc291cmNlUHJvdmlkZXJDYWNoZU1hcDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323268</attachid>
            <date>2017-10-09 19:04:01 -0700</date>
            <delta_ts>2017-10-09 23:14:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>49944</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjMxMTMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE3LTEwLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSBwcm90b3R5cGUgY2FjaGUgc2hvdWxkIGJlIGF3YXJlIG9mIHRo
ZSBFeGVjdXRhYmxlIGl0IGdlbmVyYXRlcyBhIFN0cnVjdHVyZSBmb3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkwNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2RvbnQt
Y29uZnVzZS1zdHJ1Y3R1cmVzLWZyb20tZGlmZmVyZW50LWV4ZWN1dGFibGUtYXMtcG9seS1wcm90
by5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vLkMpOgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKGJhci5DKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChhY2Nl
c3MpOgorICAgICAgICAobWFrZUxvbmdDaGFpbik6CisgICAgICAgIChhY2Nlc3NZKToKKwogMjAx
Ny0wOS0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEVuYWJs
ZSBnaWdhY2FnZSBvbiBpT1MKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RvbnQtY29u
ZnVzZS1zdHJ1Y3R1cmVzLWZyb20tZGlmZmVyZW50LWV4ZWN1dGFibGUtYXMtcG9seS1wcm90by5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kb250LWNvbmZ1c2Utc3Ry
dWN0dXJlcy1mcm9tLWRpZmZlcmVudC1leGVjdXRhYmxlLWFzLXBvbHktcHJvdG8uanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZG9udC1jb25mdXNlLXN0cnVjdHVy
ZXMtZnJvbS1kaWZmZXJlbnQtZXhlY3V0YWJsZS1hcy1wb2x5LXByb3RvLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjQgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gYXNzZXJ0KGIs
IG0pIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkOiIgKyBtKTsK
K30KK25vSW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIGZvbyhwKSB7CisgICAgZnVuY3Rpb24g
QygpIHsKKyAgICAgICAgdGhpcy55ID0gNDI7CisgICAgfQorICAgIEMucHJvdG90eXBlID0gcDsK
KyAgICBsZXQgcmVzdWx0ID0gbmV3IEM7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rp
b24gYmFyKHApIHsKKyAgICBmdW5jdGlvbiBDKCkgeworICAgICAgICB0aGlzLnkgPSA0MjsKKyAg
ICB9CisgICAgQy5wcm90b3R5cGUgPSBwOworICAgIGxldCByZXN1bHQgPSBuZXcgQzsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiBhY2Nlc3MoaXRlbSkgeworICAgIHJldHVybiBp
dGVtLng7Cit9CisKK2Z1bmN0aW9uIG1ha2VMb25nQ2hhaW4oeCkgeworICAgIGxldCBpdGVtID0g
e3g6NDJ9OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeDsgKytpKSB7CisgICAgICAgIGl0ZW0g
PSB7X19wcm90b19fOml0ZW19CisgICAgfQorICAgIHJldHVybiBpdGVtOworfQorCisKK2xldCBw
MSA9IG1ha2VMb25nQ2hhaW4oMTApOworbGV0IGEgPSBmb28ocDEpOworbGV0IGIgPSBiYXIocDEp
OworYi5fX3Byb3RvX18gPSBtYWtlTG9uZ0NoYWluKDEwKTsKK2Z1bmN0aW9uIGFjY2Vzc1koeCkg
eyByZXR1cm4geC55OyB9CithY2Nlc3NZKGEpOworYWNjZXNzWShiKTsKK2FjY2Vzc1koYSk7Cith
Y2Nlc3NZKGIpOworCitsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7CisgICAgbGV0IGEgPSBmb28ocDEpOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChhLnggPT09IDQyKTsKKyAgICB9Cisg
ICAgbGV0IHByb3RvID0ge3g6NDJ9OworICAgIGxldCBiID0gYmFyKHByb3RvKTsKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChiLnggPT09IDQyKTsK
KyAgICB9Cit9CisKK2lmIChmYWxzZSkKKyAgICBwcmludChEYXRlLm5vdygpIC0gc3RhcnQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjMwNzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAK
KzIwMTctMTAtMDkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIHByb3RvdHlwZSBjYWNoZSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIEV4ZWN1dGFibGUgaXQg
Z2VuZXJhdGVzIGEgU3RydWN0dXJlIGZvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc3OTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW5hbWVzIFByb3RvdHlwZU1hcCB0byBTdHJ1
Y3R1cmVDYWNoZSBiZWNhdXNlCisgICAgICAgIGl0IGlzIG5vIGxvbmdlciBhIG1hcCBvZiB0aGUg
cHJvdG90eXBlcyBpbiB0aGUgVk0uIEl0J3MKKyAgICAgICAgb25seSB1c2VkIHRvIGNhY2hlIFN0
cnVjdHVyZXMgZHVyaW5nIG9iamVjdCBjb25zdHJ1Y3Rpb24uCisgICAgICAgIAorICAgICAgICBU
aGUgbWFpbiBjaGFuZ2Ugb2YgdGhpcyBwYXRjaCBpcyB0byBndWFyYW50ZWUgdGhhdCBTdHJ1Y3R1
cmVzIGdlbmVyYXRlZAorICAgICAgICBieSB0aGUgY3JlYXRlX3RoaXMgb3JpZ2luYXRpbmcgZnJv
bSBkaWZmZXJlbnQgdHdvIGRpZmZlcmVudCBFeGVjdXRhYmxlJ3MKKyAgICAgICAgYnl0ZWNvZGUg
d29uJ3QgaGFzaC1jb25zIHRvIHRoZSBzYW1lIHRoaW5nLiBQcmV2aW91c2x5LCB3ZSBjb3VsZCBo
YXNoLWNvbnMKKyAgICAgICAgdGhlbSBpbiB0aGUgY2FzZSBvZiBwb2x5LXByb3RvLiBUaGlzIGNv
dWxkIGxlYWQgdG8gYW4gZXhlY3V0YWJsZSB0aGlua2luZworICAgICAgICBpdCBzaG91bGQgYmVj
b21lIHBvbHkgcHJvdG8gZXZlbiB0aG91Z2ggaXQgc2hvdWxkbid0LgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2Zp
bGUuaDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlOjpj
cmVhdGVBbGxvY2F0aW9uU3RydWN0dXJlRnJvbUJhc2UpOgorICAgICAgICAqIGJ5dGVjb2RlL09i
amVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6T2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU6OmluaXRpYWxpemVQcm9maWxlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9u
LmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1
Y3R1cmVTbG93KToKKyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0U3RydWN0dXJlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmdldEJvdW5k
RnVuY3Rpb25TdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Byb3h5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm94eTo6c2V0VGFyZ2V0KToKKyAgICAg
ICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OmNvbnN0cnVj
dEVtcHR5T2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3RvdHlwZUtleS5oOgorICAgICAg
ICAoSlNDOjpQcm90b3R5cGVLZXk6OlByb3RvdHlwZUtleSk6CisgICAgICAgIChKU0M6OlByb3Rv
dHlwZUtleTo6ZXhlY3V0YWJsZSBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtleTo6
b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtleTo6aGFzaCBjb25z
dCk6CisgICAgICAgICogcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHJ1bnRpbWUvUHJvdG90eXBlTWFwLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmVDYWNoZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3RvdHlwZU1hcC5jcHAuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNhY2hlOjpjcmVh
dGVFbXB0eVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNhY2hlOjplbXB0eVN0
cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlQ2FjaGU6OmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlQ2FjaGU6OmNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5
cGUpOgorICAgICAgICAoSlNDOjpQcm90b3R5cGVNYXA6OmNyZWF0ZUVtcHR5U3RydWN0dXJlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvdG90eXBlTWFwOjplbXB0eVN0cnVjdHVyZUZvclBy
b3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UHJvdG90
eXBlTWFwOjplbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlByb3RvdHlwZU1hcDo6Y2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3Rv
dHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuaC4KKyAg
ICAgICAgKEpTQzo6UHJvdG90eXBlTWFwOjpQcm90b3R5cGVNYXApOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uaDoKKwogMjAxNy0xMC0wOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyMzAxNSBhbmQg
cjIyMzAyNS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIyMzA1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODU4LDcgKzg1OCw2IEBAIHJ1bnRpbWUvUHJvbWlzZURlZmVycmVkVGltZXIuY3BwCiBydW50
aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAKIHJ1bnRpbWUvUHJvcGVydHlTbG90LmNwcAogcnVu
dGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAotcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCiBydW50aW1l
L1Byb3h5Q29uc3RydWN0b3IuY3BwCiBydW50aW1lL1Byb3h5T2JqZWN0LmNwcAogcnVudGltZS9Q
cm94eVJldm9rZS5jcHAKQEAgLTg5MSw2ICs4OTAsNyBAQCBydW50aW1lL1N0cmluZ09iamVjdC5j
cHAKIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAogcnVudGltZS9TdHJpbmdSZWN1cnNpb25D
aGVja2VyLmNwcAogcnVudGltZS9TdHJ1Y3R1cmUuY3BwCitydW50aW1lL1N0cnVjdHVyZUNhY2hl
LmNwcAogcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAKIHJ1bnRpbWUvU3RydWN0dXJlSURUYWJs
ZS5jcHAKIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTczOSw3ICs3MzksNiBAQAogCQkxNDczNDFENDFEQzAyRTZEMDBBQTI5QkEgLyogUHJvZ3Jh
bUV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0NzM0MUQzMURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NzM0MUQ2MURD
MDJFQjkwMEFBMjlCQSAvKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3MzQxRDUxREMwMkVCOTAwQUEyOUJB
IC8qIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ3MzQxRDgxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0
aW9uRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ3MzQxRDcxREMwMkY5OTAwQUEyOUJBIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NzRDMzNC
MTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90
b3R5cGVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDc4Mjk3QjEzNzlFOEE4MDBBN0MyQTMgLyogSGFuZGxlVHlwZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NkZBNUE4MTM3OEY2QjAwMDM2
MjdBMyAvKiBIYW5kbGVUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNp
dGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ3QjgzQUEwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1p
emVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3Qjg0NjIwRTZERTZCMTAwNDc3
NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMDY2LDYgKzEwNjUsNyBAQAogCQk3OTZGQjQzQTFERkY4QzNG
MDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dl
YkFzc2VtYmx5SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk4
MEMxNkQxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODBDMTZCMUUzQTk0
MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk4Njk0M0IxRjhDMEFDQzAwOTIz
MkFFIC8qIFN0cnVjdHVyZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTg5
Mzc3OTFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTg5Mzc3NzFEQ0FCNTczMDBGOEQ0RkIgLyog
SlNGaXhlZEFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzk5RUY3QzQxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2
RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBI
YXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzlBMDkwN0UxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMwMzksOCArMzAzOSw2IEBA
CiAJCTE0RDJGM0Q4MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXJrZWRTcGFjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFj
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRTcGFjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xv
b3BTdGFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDTG9vcFN0YWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0RDg0NEEyMTZBQTJDNzAwMEE2NUFGMCAv
KiBQcm90b3R5cGVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJvdG90eXBlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTREODQ0QTMx
NkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm90b3R5cGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTREODU3NzQwQTQ2OTZDODAwMzIxNDZDIC8qIHRlc3RhcGkuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IG5hbWUgPSB0ZXN0YXBpLmpzOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3Rh
cGkuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REE4MThFMEQ5OUZEMjAwMEIw
QTRGQiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0xleGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNMZXhpY2FsRW52aXJvbm1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUxMSw2ICszNTA5LDggQEAK
IAkJNzk3RTA3QTgxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmly
b25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODBDMTZBMUUzQTk0MEUw
MEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwOyBwYXRo
ID0gZGZnL0RGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OTgwQzE2QjFFM0E5NDBFMDBCNzE2MTUgLyogREZHUmVnaXN0ZXJlZFN0cnVj
dHVyZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZWdpc3RlcmVk
U3RydWN0dXJlU2V0Lmg7IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTg2OTQzOTFGOEMwQUM3MDA5MjMyQUUgLyog
U3RydWN0dXJlQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTg2OTQzQTFGOEMwQUM4MDA5MjMyQUUg
LyogU3RydWN0dXJlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlQ2FjaGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk4OTM3NzYxRENBQjU3MzAwRjhENEZCIC8qIEpT
Rml4ZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Zp
eGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTg5Mzc3NzFEQ0FC
NTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTRml4ZWRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTlF
RjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1hcC5oOyBwYXRoID0gYjMvQjNQQ1RvT3Jp
Z2luTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NjAxLDggKzY2MDEsNiBA
QAogCQkJCUFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQcm9wZXJ0eVRhYmxlLmNwcCAqLywK
IAkJCQk2NUMwMkZCQjA2Mzc0NjJBMDAzRTdFRTYgLyogUHJvdGVjdC5oICovLAogCQkJCTBGNzRC
OTNBMUY4OTYxNDUwMEI5MzVEMyAvKiBQcm90b3R5cGVLZXkuaCAqLywKLQkJCQkxNEQ4NDRBMjE2
QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90eXBlTWFwLmNwcCAqLywKLQkJCQkxNEQ4NDRBMzE2QUEy
QzcwMDBBNjVBRjAgLyogUHJvdG90eXBlTWFwLmggKi8sCiAJCQkJNzlCMDBDQjgxQzZBQjA3RTAw
ODhDNjVEIC8qIFByb3h5Q29uc3RydWN0b3IuY3BwICovLAogCQkJCTc5QjAwQ0I5MUM2QUIwN0Uw
MDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9yLmggKi8sCiAJCQkJNzlCMDBDQkExQzZBQjA3RTAw
ODhDNjVEIC8qIFByb3h5T2JqZWN0LmNwcCAqLywKQEAgLTY2NzgsNiArNjY3Niw4IEBACiAJCQkJ
OTMzNDVBODgxMkQ4MzhDNDAwMzAyQkUzIC8qIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuaCAqLywK
IAkJCQlCQ0RFM0FCMDBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCAqLywKIAkJCQlC
Q0RFM0FCMTBFNkM4MkNGMDAxNDUzQTcgLyogU3RydWN0dXJlLmggKi8sCisJCQkJNzk4Njk0Mzkx
RjhDMEFDNzAwOTIzMkFFIC8qIFN0cnVjdHVyZUNhY2hlLmNwcCAqLywKKwkJCQk3OTg2OTQzQTFG
OEMwQUM4MDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCAqLywKIAkJCQk3RTRFRTcwRTBFQkI3
QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwICovLAogCQkJCTdFNEVFNzA4MEVCQjc5
NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oICovLAogCQkJCTJBQUFBMzEwMThCRDQ5RDEw
MDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCAqLywKQEAgLTg5MzYsNyArODkzNiw2IEBACiAJ
CQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNzRCOTNCMUY4OTYxNDgwMEI5MzVEMyAvKiBQcm90b3R5cGVLZXkuaCBp
biBIZWFkZXJzICovLAotCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzNEUwMzU2MUU1M0JFREUwMDIxM0Y2NCAvKiBQcm94
eWFibGVBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUIwMENCRDFDNkFCMDdFMDA4
OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlCMDBDQkYx
QzZBQjA3RTAwODhDNjVEIC8qIFByb3h5T2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTg5NDks
NiArODk0OCw3IEBACiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0
eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjYwQUMyMTY3NDBGODMwMDAyOTc3OSAvKiBS
ZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTg2OTQzQjFGOEMwQUNDMDA5
MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMzYzN0E2MUI2
MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZC
NzMyMzFCREEwOEVGMDAzMzFCODQgLyogUmVmbGVjdE9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQTdBOEVDMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxv
Y2F0aW9uUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2ZpbGUuaAkocmV2aXNpb24gMjIzMDU1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxv
Y2F0aW9uUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGlubGluZSBT
dHJ1Y3R1cmUqIEludGVybmFsRnVuY3Rpb25BbGxvY2EKICAgICBpZiAocHJvdG90eXBlID09IGJh
c2VTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKQogICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNl
U3RydWN0dXJlOwogICAgIGVsc2UKLSAgICAgICAgc3RydWN0dXJlID0gdm0ucHJvdG90eXBlTWFw
LmVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIGJhc2VTdHJ1Y3R1cmUpOworICAgICAgICBzdHJ1Y3R1cmUgPSB2bS5zdHJ1
Y3R1cmVDYWNoZS5lbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlKTsKIAogICAgIC8vIEVuc3VyZSB0
aGF0IGlmIGFub3RoZXIgdGhyZWFkIHNlZXMgdGhlIHN0cnVjdHVyZSwgaXQgd2lsbCBzZWUgaXQg
cHJvcGVybHkgY3JlYXRlZC4KICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUuY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MCwyMSArNTAsMjAgQEAgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6
ZQogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3
NzkyCiAKICAgICAgICAgZXhlY3V0YWJsZSA9IGNvbnN0cnVjdG9yLT5qc0V4ZWN1dGFibGUoKTsK
KworICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjdXRhYmxlLT5jYWNoZWRQ
b2x5UHJvdG9TdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0
dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGUpOworICAgICAgICAgICAg
bV9hbGxvY2F0b3IgPSBudWxscHRyOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuc2V0KHZtLCBv
d25lciwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwog
ICAgICAgICBpc1BvbHlQcm90byA9IGZhbHNlOwogICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VQ
b2x5UHJvdG8oKSkKICAgICAgICAgICAgIGlzUG9seVByb3RvID0gdHJ1ZTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgaXNQb2x5UHJvdG8gPSBleGVjdXRhYmxlLT5lbnN1cmVQb2x5UHJvdG9X
YXRjaHBvaW50KCkuaGFzQmVlbkludmFsaWRhdGVkKCkgJiYgZXhlY3V0YWJsZS0+c2luZ2xldG9u
RnVuY3Rpb24oKS0+aGFzQmVlbkludmFsaWRhdGVkKCk7Ci0KLSAgICAgICAgaWYgKGlzUG9seVBy
b3RvKSB7Ci0gICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBleGVjdXRhYmxl
LT5jYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUoKSkgewotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gRmluYWxPYmplY3RUeXBlKTsK
LSAgICAgICAgICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAg
bV9zdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBt
X2lubGluZUNhcGFjaXR5ID0gc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KIAogICAgIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5ID0gMDsKQEAgLTExMCw3ICsxMDksNyBAQCB2b2lkIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjppbml0aWFsaXplCiAgICAgICAgICAgICBpbmxpbmVDYXBhY2l0
eSA9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCk7CiAgICAgfQogCi0gICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5wcm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVG
b3JQcm90b3R5cGUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5LCBpc1Bv
bHlQcm90byk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2bS5zdHJ1Y3R1cmVDYWNoZS5l
bXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
aW5saW5lQ2FwYWNpdHksIGlzUG9seVByb3RvLCBleGVjdXRhYmxlKTsKIAogICAgIGlmIChpc1Bv
bHlQcm90bykgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw2ICsyNTAsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uQ3JlYXRlVGhpCiAgICAgICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0g
anNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciktPnByb3RvdHlwZUZvckNvbnN0cnVjdGlv
bih2bSwgZXhlYyk7CiAgICAgICAgICAgICByZXN1bHQtPnB1dERpcmVjdCh2bSwgc3RydWN0dXJl
LT5wb2x5UHJvdG9PZmZzZXQoKSwgcHJvdG90eXBlKTsKICAgICAgICAgICAgIHByb3RvdHlwZS0+
ZGlkQmVjb21lUHJvdG90eXBlKCk7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFo
YXNJbmRleGVkUHJvcGVydGllcyhyZXN1bHQtPmluZGV4aW5nVHlwZSgpKSwgIldlIHJlbHkgb24g
SlNGaW5hbE9iamVjdCBub3Qgc3RhcnRpbmcgb3V0IHdpdGggYW4gaW5kZXhpbmcgdHlwZSBvdGhl
cndpc2Ugd2Ugd291bGQgcG90ZW50aWFsbHkgbmVlZCB0byBjb252ZXJ0IHRvIHNsb3cgcHV0IHN0
b3JhZ2UiKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1MCw3IEBAIFNMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcykKICAgICAgICAgICAgIEpTT2JqZWN0KiBw
cm90b3R5cGUgPSBjb25zdHJ1Y3Rvci0+cHJvdG90eXBlRm9yQ29uc3RydWN0aW9uKHZtLCBleGVj
KTsKICAgICAgICAgICAgIHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBzdHJ1Y3R1cmUtPnBvbHlQcm90
b09mZnNldCgpLCBwcm90b3R5cGUpOwogICAgICAgICAgICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQ
cm90b3R5cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWhhc0luZGV4ZWRQ
cm9wZXJ0aWVzKHJlc3VsdC0+aW5kZXhpbmdUeXBlKCkpLCAiV2UgcmVseSBvbiBKU0ZpbmFsT2Jq
ZWN0IG5vdCBzdGFydGluZyBvdXQgd2l0aCBhbiBpbmRleGluZyB0eXBlIG90aGVyd2lzZSB3ZSB3
b3VsZCBwb3RlbnRpYWxseSBuZWVkIHRvIGNvbnZlcnQgdG8gc2xvdyBwdXQgc3RvcmFnZSIpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRp
b25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtb3JkaW5hcnljcmVhdGVmcm9tY29uc3RydWN0b3IK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3
IEBAIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2wKICAgICAgICAgaWYg
KEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIHByb3Rv
dHlwZVZhbHVlKSkgewogICAgICAgICAgICAgLy8gVGhpcyBvbmx5IGhhcHBlbnMgaWYgc29tZW9u
ZSBSZWZsZWN0LmNvbnN0cnVjdHMgb3VyIGJ1aWx0aW4gY29uc3RydWN0b3Igd2l0aCBhbm90aGVy
IGJ1aWx0aW4gY29uc3RydWN0b3IgYXMgdGhlIG5ldy50YXJnZXQuCiAgICAgICAgICAgICAvLyBU
aHVzLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSBjb3N0IG9mIGxvb2tpbmcgdXAgdGhlIHN0cnVj
dHVyZSBmcm9tIG91ciBoYXNoIHRhYmxlIGV2ZXJ5IHRpbWUuCi0gICAgICAgICAgICByZXR1cm4g
dm0ucHJvdG90eXBlTWFwLmVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1
cmUobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlQ2xhc3MpOworICAgICAgICAg
ICAgcmV0dXJuIHZtLnN0cnVjdHVyZUNhY2hlLmVtcHR5U3RydWN0dXJlRm9yUHJvdG90eXBlRnJv
bUJhc2VTdHJ1Y3R1cmUobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlQ2xhc3Mp
OwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjMwNTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIGNvbnN0IFByb3BlcnR5
T2Zmc2V0IHZhbHVlUHJvcGVydAogCiBTdHJ1Y3R1cmUqIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2Jq
ZWN0U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAg
ICBTdHJ1Y3R1cmUqIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gdm0ucHJvdG90eXBlTWFwLmVt
cHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKCZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC5vYmplY3RQcm90b3R5cGUoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5
KCkpOworICAgIFN0cnVjdHVyZSogaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSB2bS5zdHJ1Y3R1
cmVDYWNoZS5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZSgmZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3Qub2JqZWN0UHJvdG90eXBlKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxp
bmVDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgaXRlcmF0b3JS
ZXN1bHRTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgaXRl
cmF0b3JSZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPmRvbmUsIDAsIG9mZnNldCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID09IGRvbmVQcm9wZXJ0eU9mZnNldCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0JvdW5kRnVuY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQm91bmRGdW5jdGlvbi5j
cHAJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Qm91bmRGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsNyBAQCBpbmxp
bmUgU3RydWN0dXJlKiBnZXRCb3VuZEZ1bmN0aW9uU3RydWN0CiAgICAgLy8gY3VycmVudGx5LiBX
aG9ldmVyIHdvcmtzIG9uIGNhY2hpbmcgc3RydWN0dXJlIGNoYW5nZXMgZm9yIHByb3RvdHlwZSB0
cmFuc2lzdGlvbnMgc2hvdWxkIGNvbnNpZGVyIHRoaXMgcHJvYmxlbSBhcyB3ZWxsLgogICAgIC8v
IFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjczOAogICAg
IGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBwcm90b3R5cGUuZ2V0T2JqZWN0KCktPmdsb2Jh
bE9iamVjdCgpID09IGdsb2JhbE9iamVjdCkgewotICAgICAgICByZXN1bHQgPSB2bS5wcm90b3R5
cGVNYXAuZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShnbG9iYWxP
YmplY3QsIHByb3RvdHlwZS5nZXRPYmplY3QoKSwgcmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ID0g
dm0uc3RydWN0dXJlQ2FjaGUuZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVj
dHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZS5nZXRPYmplY3QoKSwgcmVzdWx0KTsKICAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocmVzdWx0LT5nbG9iYWxPYmplY3Qo
KSA9PSBnbG9iYWxPYmplY3QpOwogICAgIH0gZWxzZQogICAgICAgICByZXN1bHQgPSBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHJlc3VsdC0+dHlwZUluZm8o
KSwgcmVzdWx0LT5jbGFzc0luZm8oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1NCw3ICs0NTQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkK
ICAgICBwcm90b0FjY2Vzc29yLT5zZXRTZXR0ZXIodm0sIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0
ZSh2bSwgdGhpcywgMCwgbWFrZVN0cmluZygic2V0ICIsIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVy
c2NvcmVQcm90by5zdHJpbmcoKSksIGdsb2JhbEZ1bmNQcm90b1NldHRlcikpOwogICAgIG1fb2Jq
ZWN0UHJvdG90eXBlLT5wdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT51bmRlcnNjb3JlUHJvdG8sIHByb3RvQWNjZXNzb3IsIFByb3BlcnR5QXR0cmlidXRlOjpB
Y2Nlc3NvciB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSk7CiAgICAgbV9mdW5jdGlvblBy
b3RvdHlwZS0+c3RydWN0dXJlKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBt
X29iamVjdFByb3RvdHlwZS5nZXQoKSk7Ci0gICAgbV9vYmplY3RTdHJ1Y3R1cmVGb3JPYmplY3RD
b25zdHJ1Y3Rvci5zZXQodm0sIHRoaXMsIHZtLnByb3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVj
dHVyZUZvclByb3RvdHlwZSh0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSwgSlNGaW5hbE9i
amVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpKTsKKyAgICBtX29iamVjdFN0cnVjdHVyZUZv
ck9iamVjdENvbnN0cnVjdG9yLnNldCh2bSwgdGhpcywgdm0uc3RydWN0dXJlQ2FjaGUuZW1wdHlP
YmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUodGhpcywgbV9vYmplY3RQcm90b3R5cGUuZ2V0KCks
IEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKSk7CiAgICAgbV9vYmplY3RQ
cm90b1ZhbHVlT2ZGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2Jq
ZWN0UHJvdG90eXBlKCktPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWVPZikp
KTsKICAgICAKICAgICBKU0Z1bmN0aW9uKiB0aHJvd2VyID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZt
LCB0aGlzLCAwLCBTdHJpbmcoKSwgZ2xvYmFsRnVuY1Rocm93VHlwZUVycm9yQXJndW1lbnRzQ2Fs
bGVlQW5kQ2FsbGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
eHkuY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQCB2b2lkIEpTUHJv
eHk6OnNldFRhcmdldChWTSYgdm0sIEpTR2xvYmFsCiAgICAgbV90YXJnZXQuc2V0KHZtLCB0aGlz
LCBnbG9iYWxPYmplY3QpOwogICAgIHNldFByb3RvdHlwZURpcmVjdCh2bSwgZ2xvYmFsT2JqZWN0
LT5nZXRQcm90b3R5cGVEaXJlY3QoKSk7CiAKLSAgICBQcm90b3R5cGVNYXAmIHByb3RvdHlwZU1h
cCA9IHZtLnByb3RvdHlwZU1hcDsKICAgICBpZiAoIW1heUJlUHJvdG90eXBlKCkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNjIsOCArNjEsOSBAQCB2b2lkIEpTUHJveHk6OnNldFRhcmdldChWTSYg
dm0sIEpTR2xvYmFsCiAgICAgLy8gVGhpcyBpcyBzbG93IGJ1dCBjb25zdGFudCB0aW1lLiBXZSB0
aGluayBpdCdzIHZlcnkgcmFyZSBmb3IgYSBwcm94eQogICAgIC8vIHRvIGJlIGEgcHJvdG90eXBl
LCBhbmQgcmVhc29uYWJseSByYXJlIHRvIHJldGFyZ2V0IGEgcHJveHksCiAgICAgLy8gc28gc2xv
dyBjb25zdGFudCB0aW1lIGlzIE9LLgorICAgIFN0cnVjdHVyZUNhY2hlJiBzdHJ1Y3R1cmVDYWNo
ZSA9IHZtLnN0cnVjdHVyZUNhY2hlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDw9IEpTRmlu
YWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCk7ICsraSkKLSAgICAgICAgcHJvdG90eXBlTWFw
LmNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUocHJldmlvdXNHbG9iYWxPYmpl
Y3QsIHRoaXMsIGkpOworICAgICAgICBzdHJ1Y3R1cmVDYWNoZS5jbGVhckVtcHR5T2JqZWN0U3Ry
dWN0dXJlRm9yUHJvdG90eXBlKHByZXZpb3VzR2xvYmFsT2JqZWN0LCB0aGlzLCBpKTsKIH0KIAog
U3RyaW5nIEpTUHJveHk6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCogb2JqZWN0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5o
CShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIGlubGluZSBK
U09iamVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXgKIGlubGluZSBKU09iamVjdCogY29uc3Ry
dWN0RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFByb3RvdHlwZU1hcCYgcHJvdG90
eXBlTWFwID0gZ2xvYmFsT2JqZWN0LT52bSgpLnByb3RvdHlwZU1hcDsKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHByb3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlw
ZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIFN0cnVjdHVy
ZUNhY2hlJiBzdHJ1Y3R1cmVDYWNoZSA9IGdsb2JhbE9iamVjdC0+dm0oKS5zdHJ1Y3R1cmVDYWNo
ZTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0
U3RydWN0dXJlRm9yUHJvdG90eXBlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBh
Y2l0eSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZUtleS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZUtl
eS5oCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm90b3R5cGVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOSBAQCBjbGFzcyBQcm90
b3R5cGVLZXkgewogcHVibGljOgogICAgIFByb3RvdHlwZUtleSgpIHsgfQogICAgIAotICAgIFBy
b3RvdHlwZUtleShKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgUHJvdG90eXBlS2V5KEpTT2JqZWN0KiBwcm90b3R5cGUsIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICA6IG1fcHJv
dG90eXBlKHByb3RvdHlwZSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkKICAg
ICAgICAgLCBtX2lubGluZUNhcGFjaXR5KGlubGluZUNhcGFjaXR5KQogICAgICAgICAsIG1fY2xh
c3NJbmZvKGNsYXNzSW5mbykKICAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3Qp
CkBAIC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgSlNPYmplY3QqIHBy
b3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CisgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRhYmxlOyB9CiAgICAg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUNhcGFjaXR5
OyB9CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiBtX2Ns
YXNzSW5mbzsgfQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJl
dHVybiBtX2dsb2JhbE9iamVjdDsgfQpAQCAtNTQsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFByb3RvdHlwZUtleSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gbV9wcm90b3R5cGUgPT0gb3RoZXIubV9wcm90b3R5cGUKKyAgICAgICAgICAg
ICYmIG1fZXhlY3V0YWJsZSA9PSBvdGhlci5tX2V4ZWN1dGFibGUKICAgICAgICAgICAgICYmIG1f
aW5saW5lQ2FwYWNpdHkgPT0gb3RoZXIubV9pbmxpbmVDYXBhY2l0eQogICAgICAgICAgICAgJiYg
bV9jbGFzc0luZm8gPT0gb3RoZXIubV9jbGFzc0luZm8KICAgICAgICAgICAgICYmIG1fZ2xvYmFs
T2JqZWN0ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0OwpAQCAtNjUsMTMgKzY4LDE0IEBAIHB1Ymxp
YzoKICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBXVEY6OkludEhhc2g8dWludHB0cl90Pjo6aGFzaChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Piht
X3Byb3RvdHlwZSkgXiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2NsYXNzSW5mbykgXiBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihtX2dsb2JhbE9iamVjdCkpICsgbV9pbmxpbmVDYXBhY2l0eTsK
KyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1aW50cHRyX3Q+OjpoYXNoKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG1fcHJvdG90eXBlKSBeIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fZXhl
Y3V0YWJsZSkgXiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2NsYXNzSW5mbykgXiBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihtX2dsb2JhbE9iamVjdCkpICsgbV9pbmxpbmVDYXBhY2l0eTsKICAg
ICB9CiAgICAgCiBwcml2YXRlOgogICAgIC8vIFdBUk5JTkc6IFdlIHJlcXVpcmUgYWxsIG9mIHRo
ZXNlIGRlZmF1bHQgdmFsdWVzIHRvIGJlIHplcm8uIE90aGVyd2lzZSwgeW91J2xsIG5lZWQgdG8g
YWRkCiAgICAgLy8gInN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsi
IHRvIHRoZSBIYXNoVHJhaXRzIGF0IHRoZSBib3R0b20gb2YgdGhpcyBmaWxlLgotICAgIEpTT2Jq
ZWN0KiBtX3Byb3RvdHlwZSB7IG51bGxwdHIgfTsKKyAgICBKU09iamVjdCogbV9wcm90b3R5cGUg
eyBudWxscHRyIH07IAorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbV9leGVjdXRhYmxlIHsgbnVs
bHB0ciB9OyAKICAgICB1bnNpZ25lZCBtX2lubGluZUNhcGFjaXR5IHsgMCB9OwogICAgIGNvbnN0
IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CiAgICAgSlNHbG9iYWxPYmplY3Qq
IG1fZ2xvYmFsT2JqZWN0IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCShyZXZpc2lvbiAyMjMwNTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCShub25leGlzdGVudCkK
QEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcm90b3R5cGVNYXAu
aCIKLQotI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
LmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5l
IFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYg
dHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0
dXJlKQotewotICAgIFJFTEVBU0VfQVNTRVJUKCEhcHJvdG90eXBlKTsgLy8gV2UgdXNlIG51bGxw
dHIgaW5zaWRlIHRoZSBIYXNoTWFwIGZvciBwcm90b3R5cGUgdG8gbWVhbiBwb2x5IHByb3RvLCBz
byB1c2VyJ3Mgb2YgdGhpcyBBUEkgbXVzdCBwcm92aWRlIG5vbi1udWxsIHByb3RvdHlwZXMuCi0K
LSAgICBhdXRvIGtleSA9IFByb3RvdHlwZUtleShtYWtlUG9seVByb3RvU3RydWN0dXJlID8gbnVs
bHB0ciA6IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGNsYXNzSW5mbywgZ2xvYmFsT2JqZWN0
KTsKLSAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZXMuZ2V0KGtleSkp
IHsKLSAgICAgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHBy
b3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmhhc01vbm9Qcm90bygpKTsKLSAgICAgICAgQVNT
RVJUKHByb3RvdHlwZS0+bWF5QmVQcm90b3R5cGUoKSk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1
cmU7Ci0gICAgfQotCi0gICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQcm90b3R5cGUoKTsKLQotICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsK
LSAgICBpZiAobWFrZVBvbHlQcm90b1N0cnVjdHVyZSkgewotICAgICAgICBzdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6OmNyZWF0ZSgKLSAgICAgICAgICAgIFN0cnVjdHVyZTo6UG9seVByb3RvLCB2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4aW5nVHlw
ZSwgaW5saW5lQ2FwYWNpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6Y3JlYXRlKAotICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCB0eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKLSAg
ICB9Ci0gICAgbV9zdHJ1Y3R1cmVzLnNldChrZXksIFdlYWs8U3RydWN0dXJlPihzdHJ1Y3R1cmUp
KTsKLQotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KLVN0cnVjdHVyZSogUHJvdG90eXBlTWFw
OjplbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZVN0
cnVjdHVyZSkKLXsKLSAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IGhhdmUgaW5saW5lIGNhcGFj
aXR5IHN0YXRpYyBhbmFseXNpcyBmb3Igc3ViY2xhc3NlcyBhbmQgYWxsIGludGVybmFsIGZ1bmN0
aW9uIGNvbnN0cnVjdG9ycyBoYXZlIGEgZGVmYXVsdCBpbmxpbmUgY2FwYWNpdHkgb2YgMC4KLSAg
ICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYmFzZVN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCk7Ci0gICAgaWYgKHByb3RvdHlwZS0+YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3NlcygpICYmIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSkpCi0gICAg
ICAgIGluZGV4aW5nVHlwZSA9IChpbmRleGluZ1R5cGUgJiB+SW5kZXhpbmdTaGFwZU1hc2spIHwg
U2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5U3RydWN0
dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlLT50eXBlSW5mbygpLCBi
YXNlU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaW5kZXhpbmdUeXBlLCAwLCBmYWxzZSk7Ci19Ci0K
LVN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjplbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlw
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlKQotewotICAg
IHJldHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNG
aW5hbE9iamVjdDo6dHlwZUluZm8oKSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBKU0ZpbmFsT2Jq
ZWN0OjpkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSwgbWFrZVBvbHlQcm90b1N0
cnVjdHVyZSk7Ci19Ci0KLXZvaWQgUHJvdG90eXBlTWFwOjpjbGVhckVtcHR5T2JqZWN0U3RydWN0
dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBv
YmplY3QsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQotewotICAgIG1fc3RydWN0dXJlcy5yZW1v
dmUoUHJvdG90eXBlS2V5KG9iamVjdCwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxPYmplY3Q6Omlu
Zm8oKSwgZ2xvYmFsT2JqZWN0KSk7Ci0gICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShQcm90b3R5cGVL
ZXkobnVsbHB0ciwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxPYmplY3Q6OmluZm8oKSwgZ2xvYmFs
T2JqZWN0KSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmgJKHJldmlzaW9uIDIyMzA1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5oCShub25leGlzdGVudCkK
QEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCi0j
aW5jbHVkZSAiSlNUeXBlSW5mby5oIgotI2luY2x1ZGUgIlByb3RvdHlwZUtleS5oIgotI2luY2x1
ZGUgIldlYWtHQ01hcC5oIgotI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU09iamVjdDsKLWNsYXNzIFN0
cnVjdHVyZTsKLWNsYXNzIFZNOwotCi0vLyBUcmFja3MgdGhlIGNhbm9uaWNhbCBzdHJ1Y3R1cmUg
YW4gb2JqZWN0IHNob3VsZCBiZSBhbGxvY2F0ZWQgd2l0aCB3aGVuIGluaGVyaXRpbmcgZnJvbSBh
IGdpdmVuIHByb3RvdHlwZS4KLWNsYXNzIFByb3RvdHlwZU1hcCB7Ci1wdWJsaWM6Ci0gICAgZXhw
bGljaXQgUHJvdG90eXBlTWFwKFZNJiB2bSkKLSAgICAgICAgOiBtX3N0cnVjdHVyZXModm0pCi0g
ICAgewotICAgIH0KLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSogZW1wdHlPYmpl
Y3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2ln
bmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUgPSBmYWxzZSk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBlbXB0eVN0cnVjdHVyZUZvclByb3Rv
dHlwZUZyb21CYXNlU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBTdHJ1Y3R1
cmUqKTsKLSAgICB2b2lkIGNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNH
bG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KTsKLQotcHJp
dmF0ZToKLSAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0
KiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBDbGFzc0luZm8q
LCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJv
dG9TdHJ1Y3R1cmUpOwotCi0gICAgdXNpbmcgU3RydWN0dXJlTWFwID0gV2Vha0dDTWFwPFByb3Rv
dHlwZUtleSwgU3RydWN0dXJlPjsKLSAgICBTdHJ1Y3R1cmVNYXAgbV9zdHJ1Y3R1cmVzOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjMwNTUpCShmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHA6MjIzMDU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJvdG90eXBl
TWFwLmgiCisKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2lu
bGluZSBTdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6Y3JlYXRlRW1wdHlTdHJ1Y3R1cmUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUlu
Zm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0
cnVjdHVyZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghIXByb3RvdHlwZSk7IC8vIFdlIHVzZSBu
dWxscHRyIGluc2lkZSB0aGUgSGFzaE1hcCBmb3IgcHJvdG90eXBlIHRvIG1lYW4gcG9seSBwcm90
bywgc28gdXNlcidzIG9mIHRoaXMgQVBJIG11c3QgcHJvdmlkZSBub24tbnVsbCBwcm90b3R5cGVz
LgorCisgICAgYXV0byBrZXkgPSBQcm90b3R5cGVLZXkobWFrZVBvbHlQcm90b1N0cnVjdHVyZSA/
IG51bGxwdHIgOiBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5LCBjbGFzc0luZm8sIGdsb2JhbE9i
amVjdCk7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdHJ1Y3R1cmVzLmdldChr
ZXkpKSB7CisgICAgICAgIGlmIChtYWtlUG9seVByb3RvU3RydWN0dXJlKSB7CisgICAgICAgICAg
ICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5oYXNNb25vUHJvdG8oKSk7CisgICAgICAg
IEFTU0VSVChwcm90b3R5cGUtPm1heUJlUHJvdG90eXBlKCkpOworICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlOworICAgIH0KKworICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7CisK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmU7CisgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpIHsKKyAgICAgICAgc3RydWN0dXJl
ID0gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgICAgICBTdHJ1Y3R1cmU6OlBvbHlQcm90bywg
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGlu
Z1R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7
CisgICAgfQorICAgIG1fc3RydWN0dXJlcy5zZXQoa2V5LCBXZWFrPFN0cnVjdHVyZT4oc3RydWN0
dXJlKSk7CisKKyAgICByZXR1cm4gc3RydWN0dXJlOworfQorCitTdHJ1Y3R1cmUqIFByb3RvdHlw
ZU1hcDo6ZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJh
c2VTdHJ1Y3R1cmUpCit7CisgICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBoYXZlIGlubGluZSBj
YXBhY2l0eSBzdGF0aWMgYW5hbHlzaXMgZm9yIHN1YmNsYXNzZXMgYW5kIGFsbCBpbnRlcm5hbCBm
dW5jdGlvbiBjb25zdHJ1Y3RvcnMgaGF2ZSBhIGRlZmF1bHQgaW5saW5lIGNhcGFjaXR5IG9mIDAu
CisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGJhc2VTdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpOworICAgIGlmIChwcm90b3R5cGUtPmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNlcHRJ
bmRleGVkQWNjZXNzZXMoKSAmJiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGluZ1R5cGUpKQor
ICAgICAgICBpbmRleGluZ1R5cGUgPSAoaW5kZXhpbmdUeXBlICYgfkluZGV4aW5nU2hhcGVNYXNr
KSB8IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZTsKKworICAgIHJldHVybiBjcmVhdGVFbXB0eVN0
cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZVN0cnVjdHVyZS0+dHlwZUluZm8o
KSwgYmFzZVN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGluZGV4aW5nVHlwZSwgMCwgZmFsc2UpOwor
fQorCitTdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90
b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSkKK3sK
KyAgICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IEpTRmluYWxPYmplY3Q6OnR5cGVJbmZvKCksIEpTRmluYWxPYmplY3Q6OmluZm8oKSwgSlNGaW5h
bE9iamVjdDo6ZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHksIG1ha2VQb2x5UHJv
dG9TdHJ1Y3R1cmUpOworfQorCit2b2lkIFByb3RvdHlwZU1hcDo6Y2xlYXJFbXB0eU9iamVjdFN0
cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogb2JqZWN0LCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSkKK3sKKyAgICBtX3N0cnVjdHVyZXMu
cmVtb3ZlKFByb3RvdHlwZUtleShvYmplY3QsIGlubGluZUNhcGFjaXR5LCBKU0ZpbmFsT2JqZWN0
OjppbmZvKCksIGdsb2JhbE9iamVjdCkpOworICAgIG1fc3RydWN0dXJlcy5yZW1vdmUoUHJvdG90
eXBlS2V5KG51bGxwdHIsIGlubGluZUNhcGFjaXR5LCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIGds
b2JhbE9iamVjdCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5jcHAJKHJldmlzaW9uIDIy
MzA1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJQcm90b3R5cGVNYXAuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNo
ZS5oIgogCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKQEAgLTMyLDExICszMiwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotaW5saW5lIFN0
cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlw
ZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJl
KQoraW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlQ2FjaGU6OmNyZWF0ZUVtcHR5U3RydWN0dXJl
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0
IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5
UHJvdG9TdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVCghIXByb3RvdHlwZSk7IC8vIFdlIHVzZSBudWxscHRyIGluc2lkZSB0aGUg
SGFzaE1hcCBmb3IgcHJvdG90eXBlIHRvIG1lYW4gcG9seSBwcm90bywgc28gdXNlcidzIG9mIHRo
aXMgQVBJIG11c3QgcHJvdmlkZSBub24tbnVsbCBwcm90b3R5cGVzLgogCi0gICAgYXV0byBrZXkg
PSBQcm90b3R5cGVLZXkobWFrZVBvbHlQcm90b1N0cnVjdHVyZSA/IG51bGxwdHIgOiBwcm90b3R5
cGUsIGlubGluZUNhcGFjaXR5LCBjbGFzc0luZm8sIGdsb2JhbE9iamVjdCk7CisgICAgUHJvdG90
eXBlS2V5IGtleSB7IG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUgPyBudWxscHRyIDogcHJvdG90eXBl
LCBleGVjdXRhYmxlLCBpbmxpbmVDYXBhY2l0eSwgY2xhc3NJbmZvLCBnbG9iYWxPYmplY3QgfTsK
ICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZXMuZ2V0KGtleSkpIHsK
ICAgICAgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgIHByb3Rv
dHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7CkBAIC01OCwzMCArNTgsMjkgQEAgaW5saW5lIFN0
cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbQogICAgICAgICBzdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmNyZWF0ZSgKICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
dHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSk7CiAgICAg
fQotICAgIG1fc3RydWN0dXJlcy5zZXQoa2V5LCBXZWFrPFN0cnVjdHVyZT4oc3RydWN0dXJlKSk7
CisgICAgbV9zdHJ1Y3R1cmVzLnNldChrZXksIHN0cnVjdHVyZSk7CiAKICAgICByZXR1cm4gc3Ry
dWN0dXJlOwogfQogCi1TdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6ZW1wdHlTdHJ1Y3R1cmVGb3JQ
cm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpCitTdHJ1Y3R1cmUq
IFN0cnVjdHVyZUNhY2hlOjplbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0
dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0
cnVjdHVyZSogYmFzZVN0cnVjdHVyZSkKIHsKICAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IGhh
dmUgaW5saW5lIGNhcGFjaXR5IHN0YXRpYyBhbmFseXNpcyBmb3Igc3ViY2xhc3NlcyBhbmQgYWxs
IGludGVybmFsIGZ1bmN0aW9uIGNvbnN0cnVjdG9ycyBoYXZlIGEgZGVmYXVsdCBpbmxpbmUgY2Fw
YWNpdHkgb2YgMC4KICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYmFzZVN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCk7CiAgICAgaWYgKHByb3RvdHlwZS0+YW55T2JqZWN0SW5DaGFpbk1h
eUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpICYmIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4
aW5nVHlwZSkpCiAgICAgICAgIGluZGV4aW5nVHlwZSA9IChpbmRleGluZ1R5cGUgJiB+SW5kZXhp
bmdTaGFwZU1hc2spIHwgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlOwogCi0gICAgcmV0dXJuIGNy
ZWF0ZUVtcHR5U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJl
LT50eXBlSW5mbygpLCBiYXNlU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaW5kZXhpbmdUeXBlLCAw
LCBmYWxzZSk7CisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5U3RydWN0dXJlKGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBiYXNlU3RydWN0dXJlLT50eXBlSW5mbygpLCBiYXNlU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaW5kZXhpbmdUeXBlLCAwLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAKLVN0cnVjdHVy
ZSogUHJvdG90eXBlTWFwOjplbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxp
bmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1
Y3R1cmVDYWNoZTo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2Fw
YWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgSlNGaW5hbE9iamVjdDo6dHlwZUluZm8oKSwgSlNGaW5hbE9iamVjdDo6
aW5mbygpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0
eSwgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5U3RydWN0
dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0ZpbmFsT2JqZWN0Ojp0eXBlSW5mbygpLCBK
U0ZpbmFsT2JqZWN0OjppbmZvKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmRleGluZ1R5cGUs
IGlubGluZUNhcGFjaXR5LCBtYWtlUG9seVByb3RvU3RydWN0dXJlLCBleGVjdXRhYmxlKTsKIH0K
IAotdm9pZCBQcm90b3R5cGVNYXA6OmNsZWFyRW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5
cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIG9iamVjdCwgdW5zaWdu
ZWQgaW5saW5lQ2FwYWNpdHkpCit2b2lkIFN0cnVjdHVyZUNhY2hlOjpjbGVhckVtcHR5T2JqZWN0
U3RydWN0dXJlRm9yUHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2Jq
ZWN0KiBvYmplY3QsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5KQogewotICAgIG1fc3RydWN0dXJl
cy5yZW1vdmUoUHJvdG90eXBlS2V5KG9iamVjdCwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxPYmpl
Y3Q6OmluZm8oKSwgZ2xvYmFsT2JqZWN0KSk7Ci0gICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShQcm90
b3R5cGVLZXkobnVsbHB0ciwgaW5saW5lQ2FwYWNpdHksIEpTRmluYWxPYmplY3Q6OmluZm8oKSwg
Z2xvYmFsT2JqZWN0KSk7CisgICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZShQcm90b3R5cGVLZXkgeyBv
YmplY3QsIG51bGxwdHIsIGlubGluZUNhcGFjaXR5LCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIGds
b2JhbE9iamVjdCB9KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgJKHJldmlzaW9uIDIyMzA1
NSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmg6MjIz
MDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbmRl
eGluZ1R5cGUuaCIKKyNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCisjaW5jbHVkZSAiUHJvdG90eXBl
S2V5LmgiCisjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCisjaW5jbHVkZSA8d3RmL1RyaVN0YXRlLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIEpTT2Jq
ZWN0OworY2xhc3MgU3RydWN0dXJlOworY2xhc3MgVk07CisKKy8vIFRyYWNrcyB0aGUgY2Fub25p
Y2FsIHN0cnVjdHVyZSBhbiBvYmplY3Qgc2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIHdoZW4gaW5o
ZXJpdGluZyBmcm9tIGEgZ2l2ZW4gcHJvdG90eXBlLgorY2xhc3MgUHJvdG90eXBlTWFwIHsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBQcm90b3R5cGVNYXAoVk0mIHZtKQorICAgICAgICA6IG1fc3Ry
dWN0dXJlcyh2bSkKKyAgICB7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0
dXJlKiBlbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIEpT
T2JqZWN0KiwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVj
dHVyZSA9IGZhbHNlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5U3Ry
dWN0dXJlRm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09i
amVjdCosIFN0cnVjdHVyZSopOworICAgIHZvaWQgY2xlYXJFbXB0eU9iamVjdFN0cnVjdHVyZUZv
clByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW5saW5lQ2Fw
YWNpdHkpOworCitwcml2YXRlOgorICAgIFN0cnVjdHVyZSogY3JlYXRlRW1wdHlTdHJ1Y3R1cmUo
SlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYsIGNv
bnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJv
b2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSk7CisKKyAgICB1c2luZyBTdHJ1Y3R1cmVNYXAgPSBX
ZWFrR0NNYXA8UHJvdG90eXBlS2V5LCBTdHJ1Y3R1cmU+OworICAgIFN0cnVjdHVyZU1hcCBtX3N0
cnVjdHVyZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuaAkocmV2aXNpb24gMjIzMDU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMTkgKzM5LDE4IEBAIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFZNOwog
CiAvLyBUcmFja3MgdGhlIGNhbm9uaWNhbCBzdHJ1Y3R1cmUgYW4gb2JqZWN0IHNob3VsZCBiZSBh
bGxvY2F0ZWQgd2l0aCB3aGVuIGluaGVyaXRpbmcgZnJvbSBhIGdpdmVuIHByb3RvdHlwZS4KLWNs
YXNzIFByb3RvdHlwZU1hcCB7CitjbGFzcyBTdHJ1Y3R1cmVDYWNoZSB7CiBwdWJsaWM6Ci0gICAg
ZXhwbGljaXQgUHJvdG90eXBlTWFwKFZNJiB2bSkKKyAgICBTdHJ1Y3R1cmVDYWNoZShWTSYgdm0p
CiAgICAgICAgIDogbV9zdHJ1Y3R1cmVzKHZtKQotICAgIHsKLSAgICB9CisgICAgeyB9CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJv
dG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0
eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlID0gZmFsc2UpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFN0cnVjdHVyZSogZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQ
b2x5UHJvdG9TdHJ1Y3R1cmUgPSBmYWxzZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiA9IG51bGxwdHIp
OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSogZW1wdHlTdHJ1Y3R1cmVGb3JQcm90
b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgU3RydWN0
dXJlKik7CiAgICAgdm9pZCBjbGVhckVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKEpT
R2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSk7Ci0KKyAg
ICAKIHByaXZhdGU6Ci0gICAgU3RydWN0dXJlKiBjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwgY29uc3QgQ2xh
c3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtl
UG9seVByb3RvU3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUVtcHR5U3RydWN0dXJl
KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBj
b25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBi
b29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSopOwogCiAgICAg
dXNpbmcgU3RydWN0dXJlTWFwID0gV2Vha0dDTWFwPFByb3RvdHlwZUtleSwgU3RydWN0dXJlPjsK
ICAgICBTdHJ1Y3R1cmVNYXAgbV9zdHJ1Y3R1cmVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjIzMDU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcgQEAgVk06OlZN
KFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgY3VzdG9tR2V0dGVyU2V0
dGVyRnVuY3Rpb25NYXAoKnRoaXMpCiAgICAgLCBzdHJpbmdDYWNoZSgqdGhpcykKICAgICAsIHN5
bWJvbEltcGxUb1N5bWJvbE1hcCgqdGhpcykKLSAgICAsIHByb3RvdHlwZU1hcCgqdGhpcykKKyAg
ICAsIHN0cnVjdHVyZUNhY2hlKCp0aGlzKQogICAgICwgaW50ZXJwcmV0ZXIoMCkKICAgICAsIGVu
dHJ5U2NvcGUoMCkKICAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4cENhY2hlKHRoaXMpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjMwNTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAi
TWljcm90YXNrLmgiCiAjaW5jbHVkZSAiTnVtZXJpY1N0cmluZ3MuaCIKLSNpbmNsdWRlICJQcm90
b3R5cGVNYXAuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogI2luY2x1ZGUgIlNtYWxs
U3RyaW5ncy5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlN1YnNwYWNlLmgiCkBA
IC00NjQsNyArNDY0LDcgQEAgcHVibGljOgogICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGUqIGFkZFNv
dXJjZVByb3ZpZGVyQ2FjaGUoU291cmNlUHJvdmlkZXIqKTsKICAgICB2b2lkIGNsZWFyU291cmNl
UHJvdmlkZXJDYWNoZXMoKTsKIAotICAgIFByb3RvdHlwZU1hcCBwcm90b3R5cGVNYXA7CisgICAg
U3RydWN0dXJlQ2FjaGUgc3RydWN0dXJlQ2FjaGU7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiwgUmVmUHRyPFNvdXJjZVByb3ZpZGVyQ2FjaGU+PiBTb3VyY2VQ
cm92aWRlckNhY2hlTWFwOwogICAgIFNvdXJjZVByb3ZpZGVyQ2FjaGVNYXAgc291cmNlUHJvdmlk
ZXJDYWNoZU1hcDsK
</data>
<flag name="review"
          id="343043"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323283</attachid>
            <date>2017-10-09 23:14:39 -0700</date>
            <delta_ts>2017-10-10 00:58:31 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>47968</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjMxMjQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE3LTEwLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSBwcm90b3R5cGUgY2FjaGUgc2hvdWxkIGJlIGF3YXJlIG9mIHRo
ZSBFeGVjdXRhYmxlIGl0IGdlbmVyYXRlcyBhIFN0cnVjdHVyZSBmb3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzkwNworCisgICAgICAgIFJldmll
d2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2RvbnQtY29u
ZnVzZS1zdHJ1Y3R1cmVzLWZyb20tZGlmZmVyZW50LWV4ZWN1dGFibGUtYXMtcG9seS1wcm90by5q
czogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoZm9vLkMpOgorICAgICAgICAo
Zm9vKToKKyAgICAgICAgKGJhci5DKToKKyAgICAgICAgKGJhcik6CisgICAgICAgIChhY2Nlc3Mp
OgorICAgICAgICAobWFrZUxvbmdDaGFpbik6CisgICAgICAgIChhY2Nlc3NZKToKKwogMjAxNy0x
MC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBg
YXN5bmNgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHVzZWQgYXMgYW4gaW1wb3J0ZWQgYmluZGluZyBu
YW1lCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kb250LWNvbmZ1c2Utc3RydWN0dXJl
cy1mcm9tLWRpZmZlcmVudC1leGVjdXRhYmxlLWFzLXBvbHktcHJvdG8uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZG9udC1jb25mdXNlLXN0cnVjdHVyZXMtZnJvbS1k
aWZmZXJlbnQtZXhlY3V0YWJsZS1hcy1wb2x5LXByb3RvLmpzCShub25leGlzdGVudCkKKysrIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2RvbnQtY29uZnVzZS1zdHJ1Y3R1cmVzLWZyb20tZGlmZmVy
ZW50LWV4ZWN1dGFibGUtYXMtcG9seS1wcm90by5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY0IEBACisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGFzc2VydChiLCBtKSB7CisgICAgaWYg
KCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZDoiICsgbSk7Cit9Citub0lubGluZShh
c3NlcnQpOworCitmdW5jdGlvbiBmb28ocCkgeworICAgIGZ1bmN0aW9uIEMoKSB7CisgICAgICAg
IHRoaXMueSA9IDQyOworICAgIH0KKyAgICBDLnByb3RvdHlwZSA9IHA7CisgICAgbGV0IHJlc3Vs
dCA9IG5ldyBDOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGJhcihwKSB7Cisg
ICAgZnVuY3Rpb24gQygpIHsKKyAgICAgICAgdGhpcy55ID0gNDI7CisgICAgfQorICAgIEMucHJv
dG90eXBlID0gcDsKKyAgICBsZXQgcmVzdWx0ID0gbmV3IEM7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworZnVuY3Rpb24gYWNjZXNzKGl0ZW0pIHsKKyAgICByZXR1cm4gaXRlbS54OworfQorCitm
dW5jdGlvbiBtYWtlTG9uZ0NoYWluKHgpIHsKKyAgICBsZXQgaXRlbSA9IHt4OjQyfTsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IHg7ICsraSkgeworICAgICAgICBpdGVtID0ge19fcHJvdG9fXzpp
dGVtfQorICAgIH0KKyAgICByZXR1cm4gaXRlbTsKK30KKworCitsZXQgcDEgPSBtYWtlTG9uZ0No
YWluKDEwKTsKK2xldCBhID0gZm9vKHAxKTsKK2xldCBiID0gYmFyKHAxKTsKK2IuX19wcm90b19f
ID0gbWFrZUxvbmdDaGFpbigxMCk7CitmdW5jdGlvbiBhY2Nlc3NZKHgpIHsgcmV0dXJuIHgueTsg
fQorYWNjZXNzWShhKTsKK2FjY2Vzc1koYik7CithY2Nlc3NZKGEpOworYWNjZXNzWShiKTsKKwor
bGV0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgIGxldCBhID0gZm9vKHAxKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7ICsr
aSkgeworICAgICAgICBhc3NlcnQoYS54ID09PSA0Mik7CisgICAgfQorICAgIGxldCBwcm90byA9
IHt4OjQyfTsKKyAgICBsZXQgYiA9IGJhcihwcm90byk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDA7ICsraSkgeworICAgICAgICBhc3NlcnQoYi54ID09PSA0Mik7CisgICAgfQorfQorCitp
ZiAoZmFsc2UpCisgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIzMTI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE3LTEwLTA5ICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBwcm90b3R5cGUg
Y2FjaGUgc2hvdWxkIGJlIGF3YXJlIG9mIHRoZSBFeGVjdXRhYmxlIGl0IGdlbmVyYXRlcyBhIFN0
cnVjdHVyZSBmb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NzkwNworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggcmVuYW1lcyBQcm90b3R5cGVNYXAgdG8gU3RydWN0dXJlQ2FjaGUgYmVjYXVz
ZQorICAgICAgICBpdCBpcyBubyBsb25nZXIgYSBtYXAgb2YgdGhlIHByb3RvdHlwZXMgaW4gdGhl
IFZNLiBJdCdzCisgICAgICAgIG9ubHkgdXNlZCB0byBjYWNoZSBTdHJ1Y3R1cmVzIGR1cmluZyBv
YmplY3QgY29uc3RydWN0aW9uLgorICAgICAgICAKKyAgICAgICAgVGhlIG1haW4gY2hhbmdlIG9m
IHRoaXMgcGF0Y2ggaXMgdG8gZ3VhcmFudGVlIHRoYXQgU3RydWN0dXJlcyBnZW5lcmF0ZWQKKyAg
ICAgICAgYnkgdGhlIGNyZWF0ZV90aGlzIG9yaWdpbmF0aW5nIGZyb20gZGlmZmVyZW50IHR3byBk
aWZmZXJlbnQgRXhlY3V0YWJsZXMnCisgICAgICAgIGJ5dGVjb2RlIHdvbid0IGhhc2gtY29ucyB0
byB0aGUgc2FtZSB0aGluZy4gUHJldmlvdXNseSwgd2UgY291bGQgaGFzaC1jb25zCisgICAgICAg
IHRoZW0gZGVwZW5kaW5nIG9uIHRoZSBKU09iamVjdCogcHJvdG90eXBlIHBvaW50ZXIuIFRoaXMg
d291bGQgY2F1c2UgdGhlIGxhc3QKKyAgICAgICAgdGhpbmcgdGhhdCBoYXNoLWNvbnNlZCB0byBv
dmVyd3JpdGUgdGhlIFN0cnVjdHVyZSdzIHBvbHkgcHJvdG8gd2F0Y2hwb2ludC4gVGhpcworICAg
ICAgICBoYXBwZW5lZCBiZWNhdXNlIHdoZW4gd2UgaW5pdGlhbGl6ZSBhIEpTRnVuY3Rpb24ncyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSwKKyAgICAgICAgd2Ugc2V0IHRoZSByZXN1bHRpbmcgU3Ry
dWN0dXJlJ3MgcG9seSBwcm90byB3YXRjaHBvaW50LiBUaGlzIGNvdWxkIGNhdXNlIGEgU3RydWN0
dXJlCisgICAgICAgIGdlbmVyYXRpbmcgZnJvbSBzb21lIEV4ZWN1dGFibGUgZTEgdG8gZW5kIHVw
IHdpdGggdGhlIHBvbHkgcHJvdG8gd2F0Y2hwb2ludAorICAgICAgICBmb3IgYW5vdGhlciBFeGVj
dXRhYmxlIGUyIHNpbXBseSBiZWNhdXNlIEpTRnVuY3Rpb25zIGJhY2tlZCBieSBlMSBhbmQgZTIK
KyAgICAgICAgc2hhcmVkIHRoZSBzYW1lIHByb3RvdHlwZS4gVGhlbiwgYmFzZWQgb24gcHJvZmls
aW5nIGluZm9ybWF0aW9uLCB3ZSBtYXkgZmlyZSB0aGUKKyAgICAgICAgd3JvbmcgRXhlY3V0YWJs
ZSdzIHBvbHkgcHJvdG8gd2F0Y2hwb2ludC4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGJ1ZyBieQor
ICAgICAgICBndWFyYW50ZWVpbmcgdGhhdCBTdHJ1Y3R1cmVzIGdlbmVyYXRpbmcgZnJvbSBjcmVh
dGVfdGhpcyBmb3IgZGlmZmVyZW50CisgICAgICAgIEV4ZWN1dGFibGVzIGFyZSB1bmlxdWUgZXZl
biBpZiB0aGV5IHNoYXJlIHRoZSBzYW1lIHByb3RvdHlwZSBieSBhZGRpbmcKKyAgICAgICAgdGhl
IEZ1bmN0aW9uRXhlY3V0YWJsZSogYXMgYW5vdGhlciBmaWVsZCBpbiBQcm90b3R5cGVLZXkuCisK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25B
bGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGU6OmNyZWF0ZUFsbG9jYXRpb25TdHJ1Y3R1cmVGcm9tQmFzZSk6CisgICAgICAg
ICogYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0lu
dGVybmFsRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZVNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1
Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6Z2V0Qm91bmRGdW5jdGlvblN0cnVjdHVyZSk6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAg
ICAgICAgKiBydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg6CisgICAgICAgIChKU0M6OmNvbnN0
cnVjdEVtcHR5T2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3RvdHlwZUtleS5oOgorICAg
ICAgICAoSlNDOjpQcm90b3R5cGVLZXk6OlByb3RvdHlwZUtleSk6CisgICAgICAgIChKU0M6OlBy
b3RvdHlwZUtleTo6ZXhlY3V0YWJsZSBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtl
eTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3RvdHlwZUtleTo6aGFzaCBj
b25zdCk6CisgICAgICAgICogcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHJ1bnRpbWUvUHJvdG90eXBlTWFwLmg6IFJlbW92ZWQuCisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmVDYWNoZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3RvdHlwZU1hcC5jcHAuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNhY2hlOjpj
cmVhdGVFbXB0eVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNhY2hlOjplbXB0
eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlQ2FjaGU6OmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKToKKyAgICAg
ICAgKEpTQzo6UHJvdG90eXBlTWFwOjpjcmVhdGVFbXB0eVN0cnVjdHVyZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlByb3RvdHlwZU1hcDo6ZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9t
QmFzZVN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb3RvdHlwZU1hcDo6ZW1w
dHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlQ2FjaGUuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvdG90eXBlTWFwLmguCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNhY2hlOjpTdHJ1
Y3R1cmVDYWNoZSk6CisgICAgICAgIChKU0M6OlByb3RvdHlwZU1hcDo6UHJvdG90eXBlTWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZN
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTctMTAtMDkgIFl1c3VrZSBTdXp1a2kg
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgYGFzeW5jYCBzaG91bGQgYmUgYWJs
ZSB0byBiZSB1c2VkIGFzIGFuIGltcG9ydGVkIGJpbmRpbmcgbmFtZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjIzMTI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NTgsNyArODU4LDYgQEAgcnVudGlt
ZS9Qcm9taXNlRGVmZXJyZWRUaW1lci5jcHAKIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNw
cAogcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwCiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCi1y
dW50aW1lL1Byb3RvdHlwZU1hcC5jcHAKIHJ1bnRpbWUvUHJveHlDb25zdHJ1Y3Rvci5jcHAKIHJ1
bnRpbWUvUHJveHlPYmplY3QuY3BwCiBydW50aW1lL1Byb3h5UmV2b2tlLmNwcApAQCAtODkxLDYg
Kzg5MCw3IEBAIHJ1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAogcnVudGltZS9TdHJpbmdQcm90b3R5
cGUuY3BwCiBydW50aW1lL1N0cmluZ1JlY3Vyc2lvbkNoZWNrZXIuY3BwCiBydW50aW1lL1N0cnVj
dHVyZS5jcHAKK3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCiBydW50aW1lL1N0cnVjdHVyZUNo
YWluLmNwcAogcnVudGltZS9TdHJ1Y3R1cmVJRFRhYmxlLmNwcAogcnVudGltZS9TdHJ1Y3R1cmVS
YXJlRGF0YS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MjMxMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzM5LDcgKzczOSw2IEBACiAJCTE0
NzM0MUQ0MURDMDJFNkQwMEFBMjlCQSAvKiBQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3MzQxRDMxREMwMkU2RDAwQUEy
OUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ3MzQxRDYxREMwMkVCOTAwQUEyOUJBIC8qIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDczNDFENTFEQzAyRUI5MDBBQTI5QkEgLyogTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDczNDFEODFEQzAyRjk5MDBBQTI5QkEgLyogRnVuY3Rpb25FeGVjdXRhYmxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDczNDFENzFEQzAyRjk5MDBB
QTI5QkEgLyogRnVuY3Rpb25FeGVjdXRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3Rv
dHlwZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTREODQ0QTMxNkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0NzgyOTdCMTM3OUU4QTgwMEE3
QzJBMyAvKiBIYW5kbGVUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ2RkE1QTgxMzc4RjZCMDAwMzYyN0EzIC8qIEhhbmRsZVR5cGVzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ3QjgzQUMw
RTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDdCODNBQTBFNkRCOEM5MDA0
Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQg
LyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDdCODQ2MjBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwNjcs
NiArMTA2Niw3IEBACiAJCTc5NkZCNDNBMURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5
SGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Nzk2RkI0MzkxREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk3RTA3QUExQjhG
Q0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBODFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTgwQzE2RDFFM0E5NDBFMDBCNzE2MTUgLyog
REZHUmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzk4MEMxNkIxRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVy
ZWRTdHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3OTg2OTQzQjFGOEMwQUNDMDA5MjMyQUUgLyogU3RydWN0dXJlQ2FjaGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5ODY5NDNBMUY4
QzBBQzgwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5ODkzNzc5MURDQUI1NzMwMEY4RDRGQiAvKiBK
U0ZpeGVkQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJyYXkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTlFRjdDNDFDNTZFRDk2
MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3Jp
Z2luTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMzA0MCw4ICszMDQwLDYgQEAKIAkJMTREMkYzRDgxMzlGNEJFMjAwNDkx
MDMxIC8qIE1hcmtlZFNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IE1hcmtlZFNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTREMkYz
RDkxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hcmtlZFNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0RDc5MjY0MERBQTAzRkIwMDFBOUYwNSAvKiBDTG9vcFN0YWNrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENMb29wU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTREODQ0QTIxNkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm90b3R5cGVNYXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxNEQ4NDRBMzE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90
eXBlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3RvdHlwZU1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMg
LyogdGVzdGFwaS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IHRl
c3RhcGkuanM7IHBhdGggPSBBUEkvdGVzdHMvdGVzdGFwaS5qczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREQTgxOEUwRDk5RkQyMDAwQjBBNEZCIC8qIEpTTGV4aWNhbEVudmlyb25t
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTGV4aWNhbEVudmlyb25t
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REE4MThGMEQ5OUZEMjAwMEIw
QTRGQiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0xleGljYWxFbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zNTE1LDYgKzM1MTMsOCBAQAogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzk4MEMxNkExRTNBOTQwRTAwQjcxNjE1IC8qIERGR1JlZ2lzdGVyZWRT
dHJ1Y3R1cmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
UmVnaXN0ZXJlZFN0cnVjdHVyZVNldC5jcHA7IHBhdGggPSBkZmcvREZHUmVnaXN0ZXJlZFN0cnVj
dHVyZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5ODBDMTZCMUUzQTk0
MEUwMEI3MTYxNSAvKiBERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1JlZ2lzdGVyZWRTdHJ1Y3R1cmVTZXQuaDsgcGF0aCA9IGRm
Zy9ERkdSZWdpc3RlcmVkU3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTc5ODY5NDM5MUY4QzBBQzcwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTdHJ1Y3R1cmVDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTc5ODY5NDNBMUY4QzBBQzgwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdHJ1Y3R1cmVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3OTg5Mzc3NjFEQ0FCNTczMDBGOEQ0RkIgLyogSlNGaXhlZEFycmF5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRml4ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc5ODkzNzc3MURDQUI1NzMwMEY4RDRGQiAvKiBKU0ZpeGVkQXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGaXhlZEFycmF5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBC
M1BDVG9PcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQQ1Rv
T3JpZ2luTWFwLmg7IHBhdGggPSBiMy9CM1BDVG9PcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTY2MDUsOCArNjYwNSw2IEBACiAJCQkJQUQxQ0YwNjgxNkRDQUIyRDAw
Qjk3MTIzIC8qIFByb3BlcnR5VGFibGUuY3BwICovLAogCQkJCTY1QzAyRkJCMDYzNzQ2MkEwMDNF
N0VFNiAvKiBQcm90ZWN0LmggKi8sCiAJCQkJMEY3NEI5M0ExRjg5NjE0NTAwQjkzNUQzIC8qIFBy
b3RvdHlwZUtleS5oICovLAotCQkJCTE0RDg0NEEyMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5
cGVNYXAuY3BwICovLAotCQkJCTE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVN
YXAuaCAqLywKIAkJCQk3OUIwMENCODFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlDb25zdHJ1Y3Rv
ci5jcHAgKi8sCiAJCQkJNzlCMDBDQjkxQzZBQjA3RTAwODhDNjVEIC8qIFByb3h5Q29uc3RydWN0
b3IuaCAqLywKIAkJCQk3OUIwMENCQTFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3Bw
ICovLApAQCAtNjY4Miw2ICs2NjgwLDggQEAKIAkJCQk5MzM0NUE4ODEyRDgzOEM0MDAzMDJCRTMg
LyogU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oICovLAogCQkJCUJDREUzQUIwMEU2QzgyQ0YwMDE0
NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwICovLAogCQkJCUJDREUzQUIxMEU2QzgyQ0YwMDE0NTNBNyAv
KiBTdHJ1Y3R1cmUuaCAqLywKKwkJCQk3OTg2OTQzOTFGOEMwQUM3MDA5MjMyQUUgLyogU3RydWN0
dXJlQ2FjaGUuY3BwICovLAorCQkJCTc5ODY5NDNBMUY4QzBBQzgwMDkyMzJBRSAvKiBTdHJ1Y3R1
cmVDYWNoZS5oICovLAogCQkJCTdFNEVFNzBFMEVCQjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVD
aGFpbi5jcHAgKi8sCiAJCQkJN0U0RUU3MDgwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNo
YWluLmggKi8sCiAJCQkJMkFBQUEzMTAxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxv
Yi5oICovLApAQCAtODk0Myw3ICs4OTQzLDYgQEAKIAkJCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3
QjIgLyogUHJvcGVydHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NjBFMTZG
NUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NEI5M0IxRjg5
NjE0ODAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ3NEMz
M0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTM0RTAzNTYxRTUzQkVERTAwMjEzRjY0IC8qIFByb3h5YWJsZUFjY2Vzc0Nhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5QjAwQ0JEMUM2QUIwN0UwMDg4QzY1RCAvKiBQcm94eUNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OUIwMENCRjFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlP
YmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtODk1Niw2ICs4OTU1LDcgQEAKIAkJCQkwRjlGQzhD
NTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0
NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTc5ODY5NDNCMUY4QzBBQ0MwMDkyMzJBRSAvKiBTdHJ1Y3R1cmVDYWNoZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzNjM3QTYxQjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzIzMUJEQTA4RUYwMDMzMUI4NCAvKiBS
ZWZsZWN0T2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBN0E4RUMxOEI0MTNDODAw
NTIzNzFEIC8qIFJlZy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0ludGVybmFsRnVuY3Rpb25BbGxv
Y2F0aW9uUHJvZmlsZS5oCShyZXZpc2lvbiAyMjMxMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW50ZXJuYWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDcgKzU0LDcgQEAgaW5saW5lIFN0cnVjdHVyZSogSW50ZXJuYWxGdW5jdGlv
bkFsbG9jYQogICAgIGlmIChwcm90b3R5cGUgPT0gYmFzZVN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCkpCiAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VTdHJ1Y3R1cmU7CiAgICAgZWxzZQotICAg
ICAgICBzdHJ1Y3R1cmUgPSB2bS5wcm90b3R5cGVNYXAuZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5
cGVGcm9tQmFzZVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZVN0cnVjdHVy
ZSk7CisgICAgICAgIHN0cnVjdHVyZSA9IHZtLnN0cnVjdHVyZUNhY2hlLmVtcHR5U3RydWN0dXJl
Rm9yUHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIGJh
c2VTdHJ1Y3R1cmUpOwogCiAgICAgLy8gRW5zdXJlIHRoYXQgaWYgYW5vdGhlciB0aHJlYWQgc2Vl
cyB0aGUgc3RydWN0dXJlLCBpdCB3aWxsIHNlZSBpdCBwcm9wZXJseSBjcmVhdGVkLgogICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5jcHAJKHJldmlzaW9u
IDIyMzEyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDIxICs1MCwyMCBAQCB2b2lkIE9i
amVjdEFsbG9jYXRpb25Qcm9maWxlOjppbml0aWFsaXplCiAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc3OTIKIAogICAgICAgICBleGVjdXRhYmxl
ID0gY29uc3RydWN0b3ItPmpzRXhlY3V0YWJsZSgpOworCisgICAgICAgIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGV4ZWN1dGFibGUtPmNhY2hlZFBvbHlQcm90b1N0cnVjdHVyZSgpKSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09
IEZpbmFsT2JqZWN0VHlwZSk7CisgICAgICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7Cisg
ICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIG93bmVyLCBzdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgbV9pbmxpbmVDYXBhY2l0eSA9IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGlzUG9seVByb3RvID0gZmFs
c2U7CiAgICAgICAgIGlmIChPcHRpb25zOjpmb3JjZVBvbHlQcm90bygpKQogICAgICAgICAgICAg
aXNQb2x5UHJvdG8gPSB0cnVlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBpc1BvbHlQcm90
byA9IGV4ZWN1dGFibGUtPmVuc3VyZVBvbHlQcm90b1dhdGNocG9pbnQoKS5oYXNCZWVuSW52YWxp
ZGF0ZWQoKSAmJiBleGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5oYXNCZWVuSW52YWxp
ZGF0ZWQoKTsKLQotICAgICAgICBpZiAoaXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGV4ZWN1dGFibGUtPmNhY2hlZFBvbHlQcm90b1N0cnVjdHVy
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSA9PSBGaW5hbE9iamVjdFR5cGUpOwotICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZS5zZXQodm0sIG93bmVy
LCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIG1faW5saW5lQ2FwYWNpdHkgPSBzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CiAgICAgfQogCiAgICAgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkgPSAw
OwpAQCAtMTEwLDcgKzEwOSw3IEBAIHZvaWQgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6OmluaXRp
YWxpemUKICAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gSlNGaW5hbE9iamVjdDo6bWF4SW5s
aW5lQ2FwYWNpdHkoKTsKICAgICB9CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZtLnBy
b3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGlzUG9seVByb3RvKTsKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHZtLnN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJv
dG90eXBlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0eSwgaXNQb2x5UHJv
dG8sIGV4ZWN1dGFibGUpOwogCiAgICAgaWYgKGlzUG9seVByb3RvKSB7CiAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjIzMTI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUw
LDYgKzI1MCw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGkKICAg
ICAgICAgICAgIEpTT2JqZWN0KiBwcm90b3R5cGUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0
cnVjdG9yKS0+cHJvdG90eXBlRm9yQ29uc3RydWN0aW9uKHZtLCBleGVjKTsKICAgICAgICAgICAg
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBzdHJ1Y3R1cmUtPnBvbHlQcm90b09mZnNldCgpLCBwcm90
b3R5cGUpOwogICAgICAgICAgICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQcm90b3R5cGUoKTsKKyAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKHJlc3Vs
dC0+aW5kZXhpbmdUeXBlKCkpLCAiV2UgcmVseSBvbiBKU0ZpbmFsT2JqZWN0IG5vdCBzdGFydGlu
ZyBvdXQgd2l0aCBhbiBpbmRleGluZyB0eXBlIG90aGVyd2lzZSB3ZSB3b3VsZCBwb3RlbnRpYWxs
eSBuZWVkIHRvIGNvbnZlcnQgdG8gc2xvdyBwdXQgc3RvcmFnZSIpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMjMxMjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0
ZV90aGlzKQogICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGNvbnN0cnVjdG9yLT5w
cm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24odm0sIGV4ZWMpOwogICAgICAgICAgICAgcmVzdWx0LT5w
dXREaXJlY3Qodm0sIHN0cnVjdHVyZS0+cG9seVByb3RvT2Zmc2V0KCksIHByb3RvdHlwZSk7CiAg
ICAgICAgICAgICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOworICAgICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghaGFzSW5kZXhlZFByb3BlcnRpZXMocmVzdWx0LT5pbmRleGlu
Z1R5cGUoKSksICJXZSByZWx5IG9uIEpTRmluYWxPYmplY3Qgbm90IHN0YXJ0aW5nIG91dCB3aXRo
IGFuIGluZGV4aW5nIHR5cGUgb3RoZXJ3aXNlIHdlIHdvdWxkIHBvdGVudGlhbGx5IG5lZWQgdG8g
Y29udmVydCB0byBzbG93IHB1dCBzdG9yYWdlIik7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3Nl
Yy1vcmRpbmFyeWNyZWF0ZWZyb21jb25zdHJ1Y3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIyMzEy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgU3RydWN0dXJlKiBJbnRlcm5hbEZ1
bmN0aW9uOjpjcmVhdGVTdWJjbAogICAgICAgICBpZiAoSlNPYmplY3QqIHByb3RvdHlwZSA9IGpz
RHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgcHJvdG90eXBlVmFsdWUpKSB7CiAgICAgICAgICAg
ICAvLyBUaGlzIG9ubHkgaGFwcGVucyBpZiBzb21lb25lIFJlZmxlY3QuY29uc3RydWN0cyBvdXIg
YnVpbHRpbiBjb25zdHJ1Y3RvciB3aXRoIGFub3RoZXIgYnVpbHRpbiBjb25zdHJ1Y3RvciBhcyB0
aGUgbmV3LnRhcmdldC4KICAgICAgICAgICAgIC8vIFRodXMsIHdlIGRvbid0IGNhcmUgYWJvdXQg
dGhlIGNvc3Qgb2YgbG9va2luZyB1cCB0aGUgc3RydWN0dXJlIGZyb20gb3VyIGhhc2ggdGFibGUg
ZXZlcnkgdGltZS4KLSAgICAgICAgICAgIHJldHVybiB2bS5wcm90b3R5cGVNYXAuZW1wdHlTdHJ1
Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIGJhc2VDbGFzcyk7CisgICAgICAgICAgICByZXR1cm4gdm0uc3RydWN0dXJlQ2Fj
aGUuZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShsZXhpY2FsR2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIGJhc2VDbGFzcyk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9y
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIyMzEyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3
ICsxMzcsNyBAQCBzdGF0aWMgY29uc3QgUHJvcGVydHlPZmZzZXQgdmFsdWVQcm9wZXJ0CiAKIFN0
cnVjdHVyZSogY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3RTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewotICAgIFN0cnVjdHVyZSogaXRlcmF0b3JSZXN1
bHRTdHJ1Y3R1cmUgPSB2bS5wcm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90
b3R5cGUoJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0Lm9iamVjdFByb3RvdHlwZSgpLCBKU0Zp
bmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSk7CisgICAgU3RydWN0dXJlKiBpdGVy
YXRvclJlc3VsdFN0cnVjdHVyZSA9IHZtLnN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0U3RydWN0
dXJlRm9yUHJvdG90eXBlKCZnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC5vYmplY3RQcm90b3R5
cGUoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpOwogICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKICAgICBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0u
cHJvcGVydHlOYW1lcy0+ZG9uZSwgMCwgb2Zmc2V0KTsKICAgICBSRUxFQVNFX0FTU0VSVChvZmZz
ZXQgPT0gZG9uZVByb3BlcnR5T2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQm91bmRGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjIzMTI0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNCb3VuZEZ1bmN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIGlubGluZSBTdHJ1Y3R1cmUqIGdldEJvdW5kRnVu
Y3Rpb25TdHJ1Y3QKICAgICAvLyBjdXJyZW50bHkuIFdob2V2ZXIgd29ya3Mgb24gY2FjaGluZyBz
dHJ1Y3R1cmUgY2hhbmdlcyBmb3IgcHJvdG90eXBlIHRyYW5zaXN0aW9ucyBzaG91bGQgY29uc2lk
ZXIgdGhpcyBwcm9ibGVtIGFzIHdlbGwuCiAgICAgLy8gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNzM4CiAgICAgaWYgKHByb3RvdHlwZS5pc09iamVjdCgp
ICYmIHByb3RvdHlwZS5nZXRPYmplY3QoKS0+Z2xvYmFsT2JqZWN0KCkgPT0gZ2xvYmFsT2JqZWN0
KSB7Ci0gICAgICAgIHJlc3VsdCA9IHZtLnByb3RvdHlwZU1hcC5lbXB0eVN0cnVjdHVyZUZvclBy
b3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLmdldE9iamVj
dCgpLCByZXN1bHQpOworICAgICAgICByZXN1bHQgPSB2bS5zdHJ1Y3R1cmVDYWNoZS5lbXB0eVN0
cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLmdldE9iamVjdCgpLCByZXN1bHQpOwogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihyZXN1bHQtPmdsb2JhbE9iamVjdCgpID09IGdsb2JhbE9iamVjdCk7CiAgICAg
fSBlbHNlCiAgICAgICAgIHJlc3VsdCA9IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgcmVzdWx0LT50eXBlSW5mbygpLCByZXN1bHQtPmNsYXNzSW5mbygpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAJKHJldmlzaW9uIDIyMzEyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZv
aWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAgIHByb3RvQWNjZXNzb3ItPnNldFNl
dHRlcih2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAwLCBtYWtlU3RyaW5n
KCJzZXQgIiwgdm0ucHJvcGVydHlOYW1lcy0+dW5kZXJzY29yZVByb3RvLnN0cmluZygpKSwgZ2xv
YmFsRnVuY1Byb3RvU2V0dGVyKSk7CiAgICAgbV9vYmplY3RQcm90b3R5cGUtPnB1dERpcmVjdE5v
bkluZGV4QWNjZXNzb3Iodm0sIHZtLnByb3BlcnR5TmFtZXMtPnVuZGVyc2NvcmVQcm90bywgcHJv
dG9BY2Nlc3NvciwgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtKTsKICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLT5zdHJ1Y3R1cmUoKS0+c2V0
UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24odm0sIG1fb2JqZWN0UHJvdG90eXBlLmdldCgpKTsK
LSAgICBtX29iamVjdFN0cnVjdHVyZUZvck9iamVjdENvbnN0cnVjdG9yLnNldCh2bSwgdGhpcywg
dm0ucHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKHRoaXMsIG1f
b2JqZWN0UHJvdG90eXBlLmdldCgpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNp
dHkoKSkpOworICAgIG1fb2JqZWN0U3RydWN0dXJlRm9yT2JqZWN0Q29uc3RydWN0b3Iuc2V0KHZt
LCB0aGlzLCB2bS5zdHJ1Y3R1cmVDYWNoZS5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlw
ZSh0aGlzLCBtX29iamVjdFByb3RvdHlwZS5nZXQoKSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdElu
bGluZUNhcGFjaXR5KCkpKTsKICAgICBtX29iamVjdFByb3RvVmFsdWVPZkZ1bmN0aW9uLnNldCh2
bSwgdGhpcywganNDYXN0PEpTRnVuY3Rpb24qPihvYmplY3RQcm90b3R5cGUoKS0+Z2V0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mKSkpOwogICAgIAogICAgIEpTRnVuY3Rpb24q
IHRocm93ZXIgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDAsIFN0cmluZygpLCBnbG9i
YWxGdW5jVGhyb3dUeXBlRXJyb3JBcmd1bWVudHNDYWxsZWVBbmRDYWxsZXIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiAyMjMxMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIGlubGluZSBKU09i
amVjdCogY29uc3RydWN0RW1wdHlPYmplY3QoRXgKIGlubGluZSBKU09iamVjdCogY29uc3RydWN0
RW1wdHlPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSkKIHsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFByb3RvdHlwZU1hcCYgcHJvdG90eXBl
TWFwID0gZ2xvYmFsT2JqZWN0LT52bSgpLnByb3RvdHlwZU1hcDsKLSAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHByb3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHkpOworICAgIFN0cnVjdHVyZUNh
Y2hlJiBzdHJ1Y3R1cmVDYWNoZSA9IGdsb2JhbE9iamVjdC0+dm0oKS5zdHJ1Y3R1cmVDYWNoZTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUNhY2hlLmVtcHR5T2JqZWN0U3Ry
dWN0dXJlRm9yUHJvdG90eXBlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBpbmxpbmVDYXBhY2l0
eSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZUtleS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZUtleS5o
CShyZXZpc2lvbiAyMjMxMjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90
b3R5cGVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOSBAQCBjbGFzcyBQcm90b3R5
cGVLZXkgewogcHVibGljOgogICAgIFByb3RvdHlwZUtleSgpIHsgfQogICAgIAotICAgIFByb3Rv
dHlwZUtleShKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisg
ICAgUHJvdG90eXBlS2V5KEpTT2JqZWN0KiBwcm90b3R5cGUsIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGNvbnN0IENsYXNzSW5mbyogY2xh
c3NJbmZvLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgICAgICA6IG1fcHJvdG90
eXBlKHByb3RvdHlwZSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkKICAgICAg
ICAgLCBtX2lubGluZUNhcGFjaXR5KGlubGluZUNhcGFjaXR5KQogICAgICAgICAsIG1fY2xhc3NJ
bmZvKGNsYXNzSW5mbykKICAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCkBA
IC00Nyw2ICs0OCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgSlNPYmplY3QqIHByb3Rv
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG90eXBlOyB9CisgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRhYmxlOyB9CiAgICAgdW5z
aWduZWQgaW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUNhcGFjaXR5OyB9
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiBtX2NsYXNz
SW5mbzsgfQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbE9iamVjdDsgfQpAQCAtNTQsNiArNTYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFByb3RvdHlwZUtleSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9wcm90b3R5cGUgPT0gb3RoZXIubV9wcm90b3R5cGUKKyAgICAgICAgICAgICYm
IG1fZXhlY3V0YWJsZSA9PSBvdGhlci5tX2V4ZWN1dGFibGUKICAgICAgICAgICAgICYmIG1faW5s
aW5lQ2FwYWNpdHkgPT0gb3RoZXIubV9pbmxpbmVDYXBhY2l0eQogICAgICAgICAgICAgJiYgbV9j
bGFzc0luZm8gPT0gb3RoZXIubV9jbGFzc0luZm8KICAgICAgICAgICAgICYmIG1fZ2xvYmFsT2Jq
ZWN0ID09IG90aGVyLm1fZ2xvYmFsT2JqZWN0OwpAQCAtNjUsMTMgKzY4LDE0IEBAIHB1YmxpYzoK
ICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBX
VEY6OkludEhhc2g8dWludHB0cl90Pjo6aGFzaChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3By
b3RvdHlwZSkgXiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2NsYXNzSW5mbykgXiBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihtX2dsb2JhbE9iamVjdCkpICsgbV9pbmxpbmVDYXBhY2l0eTsKKyAg
ICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDx1aW50cHRyX3Q+OjpoYXNoKGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KG1fcHJvdG90eXBlKSBeIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fZXhlY3V0
YWJsZSkgXiBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2NsYXNzSW5mbykgXiBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihtX2dsb2JhbE9iamVjdCkpICsgbV9pbmxpbmVDYXBhY2l0eTsKICAgICB9
CiAgICAgCiBwcml2YXRlOgogICAgIC8vIFdBUk5JTkc6IFdlIHJlcXVpcmUgYWxsIG9mIHRoZXNl
IGRlZmF1bHQgdmFsdWVzIHRvIGJlIHplcm8uIE90aGVyd2lzZSwgeW91J2xsIG5lZWQgdG8gYWRk
CiAgICAgLy8gInN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsiIHRv
IHRoZSBIYXNoVHJhaXRzIGF0IHRoZSBib3R0b20gb2YgdGhpcyBmaWxlLgotICAgIEpTT2JqZWN0
KiBtX3Byb3RvdHlwZSB7IG51bGxwdHIgfTsKKyAgICBKU09iamVjdCogbV9wcm90b3R5cGUgeyBu
dWxscHRyIH07IAorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbV9leGVjdXRhYmxlIHsgbnVsbHB0
ciB9OyAKICAgICB1bnNpZ25lZCBtX2lubGluZUNhcGFjaXR5IHsgMCB9OwogICAgIGNvbnN0IENs
YXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CiAgICAgSlNHbG9iYWxPYmplY3QqIG1f
Z2xvYmFsT2JqZWN0IHsgbnVsbHB0ciB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvdG90eXBlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCShyZXZpc2lvbiAyMjMxMjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwCShub25leGlzdGVudCkKQEAg
LTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcm90b3R5cGVNYXAuaCIK
LQotI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5oIgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIFN0
cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYgdHlw
ZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJl
KQotewotICAgIFJFTEVBU0VfQVNTRVJUKCEhcHJvdG90eXBlKTsgLy8gV2UgdXNlIG51bGxwdHIg
aW5zaWRlIHRoZSBIYXNoTWFwIGZvciBwcm90b3R5cGUgdG8gbWVhbiBwb2x5IHByb3RvLCBzbyB1
c2VyJ3Mgb2YgdGhpcyBBUEkgbXVzdCBwcm92aWRlIG5vbi1udWxsIHByb3RvdHlwZXMuCi0KLSAg
ICBhdXRvIGtleSA9IFByb3RvdHlwZUtleShtYWtlUG9seVByb3RvU3RydWN0dXJlID8gbnVsbHB0
ciA6IHByb3RvdHlwZSwgaW5saW5lQ2FwYWNpdHksIGNsYXNzSW5mbywgZ2xvYmFsT2JqZWN0KTsK
LSAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZXMuZ2V0KGtleSkpIHsK
LSAgICAgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHByb3Rv
dHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dHJ1Y3R1cmUtPmhhc1BvbHlQcm90bygpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUtPmhhc01vbm9Qcm90bygpKTsKLSAgICAgICAgQVNTRVJU
KHByb3RvdHlwZS0+bWF5QmVQcm90b3R5cGUoKSk7Ci0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7
Ci0gICAgfQotCi0gICAgcHJvdG90eXBlLT5kaWRCZWNvbWVQcm90b3R5cGUoKTsKLQotICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKLSAg
ICBpZiAobWFrZVBvbHlQcm90b1N0cnVjdHVyZSkgewotICAgICAgICBzdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmNyZWF0ZSgKLSAgICAgICAgICAgIFN0cnVjdHVyZTo6UG9seVByb3RvLCB2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIHR5cGVJbmZvLCBjbGFzc0luZm8sIGluZGV4aW5nVHlwZSwg
aW5saW5lQ2FwYWNpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6Y3JlYXRlKAotICAgICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0
eXBlSW5mbywgY2xhc3NJbmZvLCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKLSAgICB9
Ci0gICAgbV9zdHJ1Y3R1cmVzLnNldChrZXksIFdlYWs8U3RydWN0dXJlPihzdHJ1Y3R1cmUpKTsK
LQotICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci19Ci0KLVN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpl
bXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21CYXNlU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUsIFN0cnVjdHVyZSogYmFzZVN0cnVj
dHVyZSkKLXsKLSAgICAvLyBXZSBjdXJyZW50bHkgZG8gbm90IGhhdmUgaW5saW5lIGNhcGFjaXR5
IHN0YXRpYyBhbmFseXNpcyBmb3Igc3ViY2xhc3NlcyBhbmQgYWxsIGludGVybmFsIGZ1bmN0aW9u
IGNvbnN0cnVjdG9ycyBoYXZlIGEgZGVmYXVsdCBpbmxpbmUgY2FwYWNpdHkgb2YgMC4KLSAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYmFzZVN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7
Ci0gICAgaWYgKHByb3RvdHlwZS0+YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpICYmIGhhc0luZGV4ZWRQcm9wZXJ0aWVzKGluZGV4aW5nVHlwZSkpCi0gICAgICAg
IGluZGV4aW5nVHlwZSA9IChpbmRleGluZ1R5cGUgJiB+SW5kZXhpbmdTaGFwZU1hc2spIHwgU2xv
d1B1dEFycmF5U3RvcmFnZVNoYXBlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUVtcHR5U3RydWN0dXJl
KGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlLT50eXBlSW5mbygpLCBiYXNl
U3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaW5kZXhpbmdUeXBlLCAwLCBmYWxzZSk7Ci19Ci0KLVN0
cnVjdHVyZSogUHJvdG90eXBlTWFwOjplbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNpZ25l
ZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlKQotewotICAgIHJl
dHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNGaW5h
bE9iamVjdDo6dHlwZUluZm8oKSwgSlNGaW5hbE9iamVjdDo6aW5mbygpLCBKU0ZpbmFsT2JqZWN0
OjpkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0eSwgbWFrZVBvbHlQcm90b1N0cnVj
dHVyZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmgJKHJldmlzaW9uIDIyMzEyNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5oCShub25leGlzdGVudCkKQEAg
LTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCi0jaW5j
bHVkZSAiSlNUeXBlSW5mby5oIgotI2luY2x1ZGUgIlByb3RvdHlwZUtleS5oIgotI2luY2x1ZGUg
IldlYWtHQ01hcC5oIgotI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgSlNHbG9iYWxPYmplY3Q7Ci1jbGFzcyBKU09iamVjdDsKLWNsYXNzIFN0cnVj
dHVyZTsKLWNsYXNzIFZNOwotCi0vLyBUcmFja3MgdGhlIGNhbm9uaWNhbCBzdHJ1Y3R1cmUgYW4g
b2JqZWN0IHNob3VsZCBiZSBhbGxvY2F0ZWQgd2l0aCB3aGVuIGluaGVyaXRpbmcgZnJvbSBhIGdp
dmVuIHByb3RvdHlwZS4KLWNsYXNzIFByb3RvdHlwZU1hcCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGlj
aXQgUHJvdG90eXBlTWFwKFZNJiB2bSkKLSAgICAgICAgOiBtX3N0cnVjdHVyZXModm0pCi0gICAg
ewotICAgIH0KLQotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSogZW1wdHlPYmplY3RT
dHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVk
IGlubGluZUNhcGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUgPSBmYWxzZSk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBlbXB0eVN0cnVjdHVyZUZvclByb3RvdHlw
ZUZyb21CYXNlU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUq
KTsKLQotcHJpdmF0ZToKLSAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUVtcHR5U3RydWN0dXJlKEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlwZUluZm8mLCBjb25zdCBD
bGFzc0luZm8qLCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1h
a2VQb2x5UHJvdG9TdHJ1Y3R1cmUpOwotCi0gICAgdXNpbmcgU3RydWN0dXJlTWFwID0gV2Vha0dD
TWFwPFByb3RvdHlwZUtleSwgU3RydWN0dXJlPjsKLSAgICBTdHJ1Y3R1cmVNYXAgbV9zdHJ1Y3R1
cmVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjMxMjQpCShm
cm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHA6MjIzMTI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UHJvdG90eXBlTWFwLmgiCisKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2lubGluZSBTdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6Y3JlYXRlRW1wdHlTdHJ1Y3R1
cmUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29u
c3QgVHlwZUluZm8mIHR5cGVJbmZvLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbywgSW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBv
bHlQcm90b1N0cnVjdHVyZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghIXByb3RvdHlwZSk7IC8v
IFdlIHVzZSBudWxscHRyIGluc2lkZSB0aGUgSGFzaE1hcCBmb3IgcHJvdG90eXBlIHRvIG1lYW4g
cG9seSBwcm90bywgc28gdXNlcidzIG9mIHRoaXMgQVBJIG11c3QgcHJvdmlkZSBub24tbnVsbCBw
cm90b3R5cGVzLgorCisgICAgYXV0byBrZXkgPSBQcm90b3R5cGVLZXkobWFrZVBvbHlQcm90b1N0
cnVjdHVyZSA/IG51bGxwdHIgOiBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5LCBjbGFzc0luZm8s
IGdsb2JhbE9iamVjdCk7CisgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdHJ1Y3R1
cmVzLmdldChrZXkpKSB7CisgICAgICAgIGlmIChtYWtlUG9seVByb3RvU3RydWN0dXJlKSB7Cisg
ICAgICAgICAgICBwcm90b3R5cGUtPmRpZEJlY29tZVByb3RvdHlwZSgpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5oYXNQb2x5UHJvdG8oKSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5oYXNNb25vUHJvdG8oKSk7
CisgICAgICAgIEFTU0VSVChwcm90b3R5cGUtPm1heUJlUHJvdG90eXBlKCkpOworICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlOworICAgIH0KKworICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90
eXBlKCk7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmU7CisgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpIHsKKyAgICAgICAg
c3RydWN0dXJlID0gU3RydWN0dXJlOjpjcmVhdGUoCisgICAgICAgICAgICBTdHJ1Y3R1cmU6OlBv
bHlQcm90bywgdm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCB0eXBlSW5mbywgY2xhc3NJbmZv
LCBpbmRleGluZ1R5cGUsIGlubGluZUNhcGFjaXR5KTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSgKKyAgICAgICAgICAgIHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBpbmxpbmVD
YXBhY2l0eSk7CisgICAgfQorICAgIG1fc3RydWN0dXJlcy5zZXQoa2V5LCBXZWFrPFN0cnVjdHVy
ZT4oc3RydWN0dXJlKSk7CisKKyAgICByZXR1cm4gc3RydWN0dXJlOworfQorCitTdHJ1Y3R1cmUq
IFByb3RvdHlwZU1hcDo6ZW1wdHlTdHJ1Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVy
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1
Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpCit7CisgICAgLy8gV2UgY3VycmVudGx5IGRvIG5vdCBoYXZl
IGlubGluZSBjYXBhY2l0eSBzdGF0aWMgYW5hbHlzaXMgZm9yIHN1YmNsYXNzZXMgYW5kIGFsbCBp
bnRlcm5hbCBmdW5jdGlvbiBjb25zdHJ1Y3RvcnMgaGF2ZSBhIGRlZmF1bHQgaW5saW5lIGNhcGFj
aXR5IG9mIDAuCisgICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGJhc2VTdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpOworICAgIGlmIChwcm90b3R5cGUtPmFueU9iamVjdEluQ2hhaW5NYXlJ
bnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSAmJiBoYXNJbmRleGVkUHJvcGVydGllcyhpbmRleGlu
Z1R5cGUpKQorICAgICAgICBpbmRleGluZ1R5cGUgPSAoaW5kZXhpbmdUeXBlICYgfkluZGV4aW5n
U2hhcGVNYXNrKSB8IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZTsKKworICAgIHJldHVybiBjcmVh
dGVFbXB0eVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgYmFzZVN0cnVjdHVyZS0+
dHlwZUluZm8oKSwgYmFzZVN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGluZGV4aW5nVHlwZSwgMCwg
ZmFsc2UpOworfQorCitTdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6ZW1wdHlPYmplY3RTdHJ1Y3R1
cmVGb3JQcm90b3R5cGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHBy
b3RvdHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVj
dHVyZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRW1wdHlTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIEpTRmluYWxPYmplY3Q6OnR5cGVJbmZvKCksIEpTRmluYWxPYmplY3Q6OmluZm8o
KSwgSlNGaW5hbE9iamVjdDo6ZGVmYXVsdEluZGV4aW5nVHlwZSwgaW5saW5lQ2FwYWNpdHksIG1h
a2VQb2x5UHJvdG9TdHJ1Y3R1cmUpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5jcHAJKHJl
dmlzaW9uIDIyMzEyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQcm90b3R5cGVNYXAuaCIKKyNpbmNsdWRlICJTdHJ1
Y3R1cmVDYWNoZS5oIgogCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKQEAgLTMyLDExICszMiwxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAot
aW5saW5lIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbXB0eVN0cnVjdHVyZShKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBl
SW5mbyYgdHlwZUluZm8sIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3Rv
U3RydWN0dXJlKQoraW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlQ2FjaGU6OmNyZWF0ZUVtcHR5
U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5
cGUsIGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbywgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8s
IEluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29s
IG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVCghIXByb3RvdHlwZSk7IC8vIFdlIHVzZSBudWxscHRyIGlu
c2lkZSB0aGUgSGFzaE1hcCBmb3IgcHJvdG90eXBlIHRvIG1lYW4gcG9seSBwcm90bywgc28gdXNl
cidzIG9mIHRoaXMgQVBJIG11c3QgcHJvdmlkZSBub24tbnVsbCBwcm90b3R5cGVzLgogCi0gICAg
YXV0byBrZXkgPSBQcm90b3R5cGVLZXkobWFrZVBvbHlQcm90b1N0cnVjdHVyZSA/IG51bGxwdHIg
OiBwcm90b3R5cGUsIGlubGluZUNhcGFjaXR5LCBjbGFzc0luZm8sIGdsb2JhbE9iamVjdCk7Cisg
ICAgUHJvdG90eXBlS2V5IGtleSB7IG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUgPyBudWxscHRyIDog
cHJvdG90eXBlLCBleGVjdXRhYmxlLCBpbmxpbmVDYXBhY2l0eSwgY2xhc3NJbmZvLCBnbG9iYWxP
YmplY3QgfTsKICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0cnVjdHVyZXMuZ2V0
KGtleSkpIHsKICAgICAgICAgaWYgKG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUpIHsKICAgICAgICAg
ICAgIHByb3RvdHlwZS0+ZGlkQmVjb21lUHJvdG90eXBlKCk7CkBAIC01OCwyNCArNTgsMjQgQEAg
aW5saW5lIFN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjpjcmVhdGVFbQogICAgICAgICBzdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OmNyZWF0ZSgKICAgICAgICAgICAgIHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgdHlwZUluZm8sIGNsYXNzSW5mbywgaW5kZXhpbmdUeXBlLCBpbmxpbmVDYXBhY2l0
eSk7CiAgICAgfQotICAgIG1fc3RydWN0dXJlcy5zZXQoa2V5LCBXZWFrPFN0cnVjdHVyZT4oc3Ry
dWN0dXJlKSk7CisgICAgbV9zdHJ1Y3R1cmVzLnNldChrZXksIHN0cnVjdHVyZSk7CiAKICAgICBy
ZXR1cm4gc3RydWN0dXJlOwogfQogCi1TdHJ1Y3R1cmUqIFByb3RvdHlwZU1hcDo6ZW1wdHlTdHJ1
Y3R1cmVGb3JQcm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCBTdHJ1Y3R1cmUqIGJhc2VTdHJ1Y3R1cmUpCitT
dHJ1Y3R1cmUqIFN0cnVjdHVyZUNhY2hlOjplbXB0eVN0cnVjdHVyZUZvclByb3RvdHlwZUZyb21C
YXNlU3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBwcm90
b3R5cGUsIFN0cnVjdHVyZSogYmFzZVN0cnVjdHVyZSkKIHsKICAgICAvLyBXZSBjdXJyZW50bHkg
ZG8gbm90IGhhdmUgaW5saW5lIGNhcGFjaXR5IHN0YXRpYyBhbmFseXNpcyBmb3Igc3ViY2xhc3Nl
cyBhbmQgYWxsIGludGVybmFsIGZ1bmN0aW9uIGNvbnN0cnVjdG9ycyBoYXZlIGEgZGVmYXVsdCBp
bmxpbmUgY2FwYWNpdHkgb2YgMC4KICAgICBJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYmFz
ZVN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCk7CiAgICAgaWYgKHByb3RvdHlwZS0+YW55T2JqZWN0
SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpICYmIGhhc0luZGV4ZWRQcm9wZXJ0
aWVzKGluZGV4aW5nVHlwZSkpCiAgICAgICAgIGluZGV4aW5nVHlwZSA9IChpbmRleGluZ1R5cGUg
JiB+SW5kZXhpbmdTaGFwZU1hc2spIHwgU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlOwogCi0gICAg
cmV0dXJuIGNyZWF0ZUVtcHR5U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBiYXNl
U3RydWN0dXJlLT50eXBlSW5mbygpLCBiYXNlU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaW5kZXhp
bmdUeXBlLCAwLCBmYWxzZSk7CisgICAgcmV0dXJuIGNyZWF0ZUVtcHR5U3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBiYXNlU3RydWN0dXJlLT50eXBlSW5mbygpLCBiYXNlU3RydWN0
dXJlLT5jbGFzc0luZm8oKSwgaW5kZXhpbmdUeXBlLCAwLCBmYWxzZSwgbnVsbHB0cik7CiB9CiAK
LVN0cnVjdHVyZSogUHJvdG90eXBlTWFwOjplbXB0eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlw
ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlLCB1bnNp
Z25lZCBpbmxpbmVDYXBhY2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlKQorU3RydWN0
dXJlKiBTdHJ1Y3R1cmVDYWNoZTo6ZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQg
aW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSwgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlKQogewotICAgIHJldHVybiBjcmVhdGVFbXB0eVN0cnVjdHVyZShn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNGaW5hbE9iamVjdDo6dHlwZUluZm8oKSwgSlNGaW5h
bE9iamVjdDo6aW5mbygpLCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5kZXhpbmdUeXBlLCBpbmxp
bmVDYXBhY2l0eSwgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSk7CisgICAgcmV0dXJuIGNyZWF0ZUVt
cHR5U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0ZpbmFsT2JqZWN0Ojp0eXBl
SW5mbygpLCBKU0ZpbmFsT2JqZWN0OjppbmZvKCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmRl
eGluZ1R5cGUsIGlubGluZUNhcGFjaXR5LCBtYWtlUG9seVByb3RvU3RydWN0dXJlLCBleGVjdXRh
YmxlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgJKHJldmlzaW9uIDIyMzEyNCkJKGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvdG90eXBlTWFwLmg6MjIzMTI0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbmRleGluZ1R5cGUu
aCIKKyNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCisjaW5jbHVkZSAiUHJvdG90eXBlS2V5LmgiCisj
aW5jbHVkZSAiV2Vha0dDTWFwLmgiCisjaW5jbHVkZSA8d3RmL1RyaVN0YXRlLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbE9iamVjdDsKK2NsYXNzIEpTT2JqZWN0OworY2xh
c3MgU3RydWN0dXJlOworY2xhc3MgVk07CisKKy8vIFRyYWNrcyB0aGUgY2Fub25pY2FsIHN0cnVj
dHVyZSBhbiBvYmplY3Qgc2hvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIHdoZW4gaW5oZXJpdGluZyBm
cm9tIGEgZ2l2ZW4gcHJvdG90eXBlLgorY2xhc3MgUHJvdG90eXBlTWFwIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBQcm90b3R5cGVNYXAoVk0mIHZtKQorICAgICAgICA6IG1fc3RydWN0dXJlcyh2
bSkKKyAgICB7CisgICAgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RydWN0dXJlKiBlbXB0
eU9iamVjdFN0cnVjdHVyZUZvclByb3RvdHlwZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0Kiwg
dW5zaWduZWQgaW5saW5lQ2FwYWNpdHksIGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSA9IGZh
bHNlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5U3RydWN0dXJlRm9y
UHJvdG90eXBlRnJvbUJhc2VTdHJ1Y3R1cmUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFN0
cnVjdHVyZSopOworCitwcml2YXRlOgorICAgIFN0cnVjdHVyZSogY3JlYXRlRW1wdHlTdHJ1Y3R1
cmUoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogcHJvdG90eXBlLCBjb25zdCBUeXBlSW5mbyYs
IGNvbnN0IENsYXNzSW5mbyosIEluZGV4aW5nVHlwZSwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHks
IGJvb2wgbWFrZVBvbHlQcm90b1N0cnVjdHVyZSk7CisKKyAgICB1c2luZyBTdHJ1Y3R1cmVNYXAg
PSBXZWFrR0NNYXA8UHJvdG90eXBlS2V5LCBTdHJ1Y3R1cmU+OworICAgIFN0cnVjdHVyZU1hcCBt
X3N0cnVjdHVyZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuaAkocmV2aXNpb24gMjIzMTI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlQ2FjaGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzksMTggKzM5LDE4IEBAIGNsYXNzIFN0cnVjdHVyZTsKIGNsYXNzIFZN
OwogCiAvLyBUcmFja3MgdGhlIGNhbm9uaWNhbCBzdHJ1Y3R1cmUgYW4gb2JqZWN0IHNob3VsZCBi
ZSBhbGxvY2F0ZWQgd2l0aCB3aGVuIGluaGVyaXRpbmcgZnJvbSBhIGdpdmVuIHByb3RvdHlwZS4K
LWNsYXNzIFByb3RvdHlwZU1hcCB7CitjbGFzcyBTdHJ1Y3R1cmVDYWNoZSB7CiBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgUHJvdG90eXBlTWFwKFZNJiB2bSkKKyAgICBleHBsaWNpdCBTdHJ1Y3R1cmVD
YWNoZShWTSYgdm0pCiAgICAgICAgIDogbV9zdHJ1Y3R1cmVzKHZtKQogICAgIHsKICAgICB9CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJ1Y3R1cmUqIGVtcHR5T2JqZWN0U3RydWN0dXJlRm9y
UHJvdG90eXBlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbmxpbmVDYXBh
Y2l0eSwgYm9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlID0gZmFsc2UpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIFN0cnVjdHVyZSogZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUoSlNH
bG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGlubGluZUNhcGFjaXR5LCBib29sIG1h
a2VQb2x5UHJvdG9TdHJ1Y3R1cmUgPSBmYWxzZSwgRnVuY3Rpb25FeGVjdXRhYmxlKiA9IG51bGxw
dHIpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cnVjdHVyZSogZW1wdHlTdHJ1Y3R1cmVGb3JQ
cm90b3R5cGVGcm9tQmFzZVN0cnVjdHVyZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgU3Ry
dWN0dXJlKik7CiAKIHByaXZhdGU6Ci0gICAgU3RydWN0dXJlKiBjcmVhdGVFbXB0eVN0cnVjdHVy
ZShKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBwcm90b3R5cGUsIGNvbnN0IFR5cGVJbmZvJiwg
Y29uc3QgQ2xhc3NJbmZvKiwgSW5kZXhpbmdUeXBlLCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSwg
Ym9vbCBtYWtlUG9seVByb3RvU3RydWN0dXJlKTsKKyAgICBTdHJ1Y3R1cmUqIGNyZWF0ZUVtcHR5
U3RydWN0dXJlKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHByb3RvdHlwZSwgY29uc3QgVHlw
ZUluZm8mLCBjb25zdCBDbGFzc0luZm8qLCBJbmRleGluZ1R5cGUsIHVuc2lnbmVkIGlubGluZUNh
cGFjaXR5LCBib29sIG1ha2VQb2x5UHJvdG9TdHJ1Y3R1cmUsIEZ1bmN0aW9uRXhlY3V0YWJsZSop
OwogCiAgICAgdXNpbmcgU3RydWN0dXJlTWFwID0gV2Vha0dDTWFwPFByb3RvdHlwZUtleSwgU3Ry
dWN0dXJlPjsKICAgICBTdHJ1Y3R1cmVNYXAgbV9zdHJ1Y3R1cmVzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjIzMTI0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcg
QEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgY3VzdG9t
R2V0dGVyU2V0dGVyRnVuY3Rpb25NYXAoKnRoaXMpCiAgICAgLCBzdHJpbmdDYWNoZSgqdGhpcykK
ICAgICAsIHN5bWJvbEltcGxUb1N5bWJvbE1hcCgqdGhpcykKLSAgICAsIHByb3RvdHlwZU1hcCgq
dGhpcykKKyAgICAsIHN0cnVjdHVyZUNhY2hlKCp0aGlzKQogICAgICwgaW50ZXJwcmV0ZXIoMCkK
ICAgICAsIGVudHJ5U2NvcGUoMCkKICAgICAsIG1fcmVnRXhwQ2FjaGUobmV3IFJlZ0V4cENhY2hl
KHRoaXMpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMjMx
MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw5ICs0OCw5IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAj
aW5jbHVkZSAiTWljcm90YXNrLmgiCiAjaW5jbHVkZSAiTnVtZXJpY1N0cmluZ3MuaCIKLSNpbmNs
dWRlICJQcm90b3R5cGVNYXAuaCIKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRl
ICJTdHJvbmcuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVDYWNoZS5oIgogI2luY2x1ZGUgIlN1YnNw
YWNlLmgiCiAjaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgiCiAjaW5jbHVkZSAi
Vk1FbnRyeVJlY29yZC5oIgpAQCAtNDY0LDcgKzQ2NCw3IEBAIHB1YmxpYzoKICAgICBTb3VyY2VQ
cm92aWRlckNhY2hlKiBhZGRTb3VyY2VQcm92aWRlckNhY2hlKFNvdXJjZVByb3ZpZGVyKik7CiAg
ICAgdm9pZCBjbGVhclNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CiAKLSAgICBQcm90b3R5cGVNYXAg
cHJvdG90eXBlTWFwOworICAgIFN0cnVjdHVyZUNhY2hlIHN0cnVjdHVyZUNhY2hlOwogCiAgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxTb3VyY2VQcm92aWRlcj4sIFJlZlB0cjxTb3VyY2VQcm92
aWRlckNhY2hlPj4gU291cmNlUHJvdmlkZXJDYWNoZU1hcDsKICAgICBTb3VyY2VQcm92aWRlckNh
Y2hlTWFwIHNvdXJjZVByb3ZpZGVyQ2FjaGVNYXA7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>