<?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>121771</bug_id>
          
          <creation_ts>2013-09-22 18:03:38 -0700</creation_ts>
          <short_desc>Remove RenderObjectChildList</short_desc>
          <delta_ts>2013-09-23 10:42:34 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>121779</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbarton</cc>
    
    <cc>d-r</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pdr</cc>
    
    <cc>rakuco</cc>
    
    <cc>schenney</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>931961</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-22 18:03:38 -0700</bug_when>
    <thetext>Most popular RenderElement subclasses have m_children member (&gt;90% of instances on typical page). Child handling should move to RenderElement. This will remove need for virtual children() calls and simplify the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931966</commentid>
    <comment_count>1</comment_count>
      <attachid>212313</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-22 18:19:12 -0700</bug_when>
    <thetext>Created attachment 212313
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931969</commentid>
    <comment_count>2</comment_count>
      <attachid>212313</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-22 18:23:27 -0700</bug_when>
    <thetext>Comment on attachment 212313
patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:610
&gt; -    toBlock-&gt;children()-&gt;appendChildNode(toBlock, cloneBlock);
&gt; +    insertChildInternal(cloneBlock, nullptr, NotifyChildren);

This looks wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931971</commentid>
    <comment_count>3</comment_count>
      <attachid>212313</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-22 18:27:05 -0700</bug_when>
    <thetext>Comment on attachment 212313
patch

Attachment 212313 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1933079</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931973</commentid>
    <comment_count>4</comment_count>
      <attachid>212313</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-22 18:28:09 -0700</bug_when>
    <thetext>Comment on attachment 212313
patch

Attachment 212313 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1834762</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931974</commentid>
    <comment_count>5</comment_count>
      <attachid>212315</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-22 18:31:19 -0700</bug_when>
    <thetext>Created attachment 212315
another</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931977</commentid>
    <comment_count>6</comment_count>
      <attachid>212315</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-22 18:41:15 -0700</bug_when>
    <thetext>Comment on attachment 212315
another

Attachment 212315 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1873388</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931980</commentid>
    <comment_count>7</comment_count>
      <attachid>212315</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-09-22 18:44:30 -0700</bug_when>
    <thetext>Comment on attachment 212315
another

Attachment 212315 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1979042</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931985</commentid>
    <comment_count>8</comment_count>
      <attachid>212315</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-22 18:57:34 -0700</bug_when>
    <thetext>Comment on attachment 212315
another

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

&gt; Source/WebCore/rendering/RenderObject.h:267
&gt; +    friend RenderElement;

This is the wrong syntax. Should be friend class RenderElement. Also, should go at the top of the class with the other friends. But it&apos;s really annoying that this friendship needs to exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931986</commentid>
    <comment_count>9</comment_count>
      <attachid>212315</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-22 18:58:55 -0700</bug_when>
    <thetext>Comment on attachment 212315
another

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

&gt; Source/WebCore/rendering/RenderElement.h:59
&gt; +    enum NotifyChildrenType { NotifyChildren, DontNotifyChildren };
&gt; +    void insertChildInternal(RenderObject*, RenderObject* beforeChild, NotifyChildrenType);
&gt; +    void removeChildInternal(RenderObject*, NotifyChildrenType);

Why public instead of protected?

&gt; Source/WebCore/rendering/RenderObject.cpp:1668
&gt; +            block-&gt;insertChildInternal(this, 0, RenderElement::NotifyChildren);

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931987</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-22 19:33:21 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Why public instead of protected?

There are several cases where these are called via pointers that are of different type than the class of the current function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>931988</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-22 19:34:51 -0700</bug_when>
    <thetext>https://trac.webkit.org/r156254</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932031</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-22 23:28:09 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 121779</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932037</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-09-22 23:31:41 -0700</bug_when>
    <thetext>This caused assertion failures in two fast/regions tests: &lt;http://build.webkit.org/results/Apple%20MountainLion%20Debug%20WK1%20(Tests)/r156257%20(10332)/fast/regions/region-dynamic-after-before-crash-log.txt&gt;, &lt;http://build.webkit.org/results/Apple%20MountainLion%20Debug%20WK1%20(Tests)/r156257%20(10332)/fast/regions/region-generated-content-before-after-crash-log.txt&gt;.

Antti is not available at at the moment, and there are two more regressions in the tree. Fixing everything is not an option for me, rolling out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932045</commentid>
    <comment_count>14</comment_count>
      <attachid>212315</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-09-22 23:35:26 -0700</bug_when>
    <thetext>Comment on attachment 212315
another

Rolled out in &lt;http://trac.webkit.org/changeset/156262&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932190</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-23 10:42:34 -0700</bug_when>
    <thetext>Re-landed in https://trac.webkit.org/r156278 with an assertion fix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212313</attachid>
            <date>2013-09-22 18:19:12 -0700</date>
            <delta_ts>2013-09-22 18:31:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderelement-children-3.patch</filename>
            <type>text/plain</type>
            <size>80287</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjI1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTA5LTIyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjE3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3N0IFJlbmRlckVsZW1lbnQgc3ViY2xhc3NlcyBoYXZlIG1fY2hpbGRyZW4gbWVtYmVyICg+
OTAlIG9mIGluc3RhbmNlcyBvbiB0eXBpY2FsIHBhZ2UpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBtb3ZlcyBjaGlsZCBoYW5kbGluZyB0byBSZW5kZXJFbGVtZW50LiBUaGlzIGdldHMg
cmlkIG9mIHZpcnR1YWwgY2hpbGRyZW4oKSBjYWxscyBhbmQgc2ltcGxpZmllcyB0aGUgY29kZS4K
KwogMjAxMy0wOS0yMiAgQXJ1bnByYXNhZCBSYWprdW1hciAgPGFyYXJ1bnByYXNhZEBnbWFpbC5j
b20+CiAKICAgICAgICAgSGlkaW5nIGEgZm9jdXNlZCBlbGVtZW50IHNob3VsZCB1bmZvY3VzIGl0
IGFuZCBmaXJlIGEgYmx1ciBldmVudApJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDE1NjI1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yMTcyLDcgKzIxNzIsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5n
L1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKLSAgICByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5j
cHAKICAgICByZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU2
MjUyKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5
KQpAQCAtNDUwNCw4ICs0NTA0LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCBcCi0JU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3RDaGlsZExpc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmggXApJbmRleDog
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTk0LDcgKzExOTQsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBy
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93VGhyZWFkLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgXAot
ICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwIFwKICAgICByZW5kZXJpbmcv
UmVuZGVyUHJvZ3Jlc3MuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyUXVvdGUuY3BwIFwKICAg
ICByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcCBcCkBAIC0yNDYxLDcgKzI0NjAsNiBAQCBIRUFE
RVJTICs9IFwKICAgICByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaCBcCiAgICAgcmVuZGVyaW5n
L1JlbmRlck1ldGVyLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgg
XAotICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuaCBcCiAgICAgcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaCBcCiAgICAg
cmVuZGVyaW5nL1JlbmRlclF1b3RlLmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDI1MiwyMCArMTAyNTIsNiBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwIj4KLSAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dp
bkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnU3VmZml4fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z1N1ZmZpeHx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Jl
bGVhc2V8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh
c2V8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dp
bkNhaXJvfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxl
YXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICA8L0NsQ29tcGls
ZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJQcm9ncmVzcy5j
cHAiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
ICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpAQCAtMjAw
MDUsNyArMTk5OTEsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJl
bmRlck11bHRpQ29sdW1uU2V0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcUmVuZGVyT2JqZWN0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyUHJvZ3Jlc3MuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJRdW90ZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlclJlZ2lvbi5oIiAvPgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTU2MjUyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NzY4LDcgKzQ3NjgsNiBAQAogCQlCQzI5OTM1RDE3
QTFERDU4MDBCQ0U4ODAgLyogQ29sb3JJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyOTkzNUMxN0ExREQ1ODAwQkNFODgwIC8qIENv
bG9ySW5wdXRUeXBlLmNwcCAqLzsgfTsKIAkJQkMyQ0JGNEUxNDBGMUFCRDAwMzg3OUJFIC8qIEpT
V2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDMkNCRjRCMTQwRjFBNjUwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50
LmggKi87IH07CiAJCUJDMkNCRjdCMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MkNCRjdBMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcCAqLzsgfTsK
LQkJQkMyQ0M4REYwRjMyODgxMDAwQTlERjI2IC8qIFJlbmRlck9iamVjdENoaWxkTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyQ0M4REUwRjMy
ODgxMDAwQTlERjI2IC8qIFJlbmRlck9iamVjdENoaWxkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMkVENTU1MEM2QjlCRDMwMDkyMEJG
RiAvKiBKU0VsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkMyRUQ1NTQwQzZCOUJEMzAwOTIwQkZGIC8qIEpTRWxlbWVudEN1c3Rv
bS5jcHAgKi87IH07CiAJCUJDMkVENkJDMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRUQ2
QkIwQzZCRDJGMDAwOTIwQkZGIC8qIEpTQXR0ckN1c3RvbS5jcHAgKi87IH07CiAJCUJDMkVEN0E1
MEM2QzBGMzYwMDkyMEJGRiAvKiBKU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMyRUQ3QTQwQzZDMEYzNjAw
OTIwQkZGIC8qIEpTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CkBAIC00ODg4LDcg
KzQ4ODcsNiBAQAogCQlCQzYwREE1QjBEMkEzMUY3MDBCOTkxOEYgLyogWFBhdGhFeGNlcHRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNjBEQTU5
MEQyQTMxRjcwMEI5OTE4RiAvKiBYUGF0aEV4Y2VwdGlvbi5oICovOyB9OwogCQlCQzYwREI0OTBE
MkEzRDFFMDBCOTkxOEYgLyogSlNYUGF0aEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzYwREI0NzBEMkEzRDFFMDBCOTkxOEYgLyog
SlNYUGF0aEV4Y2VwdGlvbi5jcHAgKi87IH07CiAJCUJDNjBEQjRBMEQyQTNEMUUwMEI5OTE4RiAv
KiBKU1hQYXRoRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzYwREI0ODBEMkEzRDFFMDBCOTkxOEYgLyogSlNYUGF0aEV4Y2VwdGlvbi5o
ICovOyB9OwotCQlCQzYwRUZCNzBGMzNBMEU3MDA4MTJBOTMgLyogUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
NjBFRkI2MEYzM0EwRTcwMDgxMkE5MyAvKiBSZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwICovOyB9
OwogCQlCQzY0NjQwOTExRDdGMzA0MDA2NDU1QjAgLyogRE9NU3RyaW5nTWFwLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNjQ2NDA3MTFEN0YzMDQw
MDY0NTVCMCAvKiBET01TdHJpbmdNYXAuY3BwICovOyB9OwogCQlCQzY0NjQwQTExRDdGMzA0MDA2
NDU1QjAgLyogRE9NU3RyaW5nTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzY0NjQwODExRDdGMzA0MDA2NDU1QjAgLyogRE9NU3RyaW5nTWFwLmgg
Ki87IH07CiAJCUJDNjQ2NDFDMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFw
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzY0NjQx
QTExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5oICovOyB9OwpAQCAtMTE2
MzEsNyArMTE2MjksNiBAQAogCQlCQzI5OTM1QzE3QTFERDU4MDBCQ0U4ODAgLyogQ29sb3JJbnB1
dFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3JJbnB1
dFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJDQkY0QjE0MEYxQTY1
MDAzODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1dlYkdMQ29udGV4dEV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMkNCRjdBMTQwRjFENTgwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0RXZl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzJDQzhERTBGMzI4ODEwMDBB
OURGMjYgLyogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlck9iamVjdENoaWxkTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzJFRDU1NDBDNkI5QkQzMDA5MjBCRkYgLyogSlNFbGVtZW50Q3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRWxlbWVudEN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAv
KiBKU0F0dHJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNBdHRyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyRUQ3QTQw
QzZDMEYzNjAwOTIwQkZGIC8qIEpTSFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE3NjAsNyArMTE3NTcsNiBAQAogCQlC
QzYwREE1QTBEMkEzMUY3MDBCOTkxOEYgLyogWFBhdGhFeGNlcHRpb24uaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFhQYXRoRXhjZXB0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkM2MERCNDcwRDJBM0QxRTAwQjk5MThGIC8qIEpTWFBhdGhFeGNlcHRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYUGF0aEV4Y2VwdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNjBEQjQ4MEQyQTNEMUUwMEI5OTE4RiAv
KiBKU1hQYXRoRXhjZXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
WFBhdGhFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM2MEVGQjYw
RjMzQTBFNzAwODEyQTkzIC8qIFJlbmRlck9iamVjdENoaWxkTGlzdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzY0NjQwNzExRDdGMzA0MDA2NDU1QjAgLyogRE9N
U3RyaW5nTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTVN0
cmluZ01hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNjQ2NDA4MTFEN0Yz
MDQwMDY0NTVCMCAvKiBET01TdHJpbmdNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRE9NU3RyaW5nTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNjQ2
NDFBMTFEN0Y0MTYwMDY0NTVCMCAvKiBEYXRhc2V0RE9NU3RyaW5nTWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFzZXRET01TdHJpbmdNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjMxLDggKzIwNjI3LDYgQEAKIAkJCQlCQzg1RjIzQzE1MTkx
NUUwMDBCQzE3QkUgLyogUmVuZGVyTmFtZWRGbG93VGhyZWFkLmggKi8sCiAJCQkJQkNFQTQ4NDAw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9iamVjdC5jcHAgKi8sCiAJCQkJQkNFQTQ4NDEwOTdE
OTMwMjAwOTRDOUU0IC8qIFJlbmRlck9iamVjdC5oICovLAotCQkJCUJDNjBFRkI2MEYzM0EwRTcw
MDgxMkE5MyAvKiBSZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwICovLAotCQkJCUJDMkNDOERFMEYz
Mjg4MTAwMEE5REYyNiAvKiBSZW5kZXJPYmplY3RDaGlsZExpc3QuaCAqLywKIAkJCQlCQ0ZBOTMw
NzEwMzMzMTkzMDA3QjI1RDEgLyogUmVuZGVyT3ZlcmZsb3cuaCAqLywKIAkJCQlBNDNCRjU5QTEx
NDkyOTI4MDBDNjQzQ0EgLyogUmVuZGVyUHJvZ3Jlc3MuY3BwICovLAogCQkJCUE0M0JGNTlCMTE0
OTI5MjgwMEM2NDNDQSAvKiBSZW5kZXJQcm9ncmVzcy5oICovLApAQCAtMjM3NzYsNyArMjM3NzAs
NiBAQAogCQkJCUJDRTMyQjlDMTUxN0MwQjIwMEY1NDJFQyAvKiBSZW5kZXJNdWx0aUNvbHVtblNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4NUYyM0QxNTE5MTVFMDAwQkMxN0JFIC8qIFJlbmRl
ck5hbWVkRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4ODAwOTdEOTMwMjAw
OTRDOUU0IC8qIFJlbmRlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMyQ0M4REYwRjMy
ODgxMDAwQTlERjI2IC8qIFJlbmRlck9iamVjdENoaWxkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNGQTkzMDgxMDMzMzE5MzAwN0IyNUQxIC8qIFJlbmRlck92ZXJmbG93LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNDNCRjU5RDExNDkyOTI4MDBDNjQzQ0EgLyogUmVuZGVyUHJvZ3Jlc3MuaCBp
biBIZWFkZXJzICovLAogCQkJCTVBNTc0RjI1MTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjk5Niw3ICsyNjk4OSw2IEBACiAJCQkJQkNFMzJCOUUx
NTE3QzIyNzAwRjU0MkVDIC8qIFJlbmRlck11bHRpQ29sdW1uU2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBM0ZGOUMzMTUyNjUzNTkwMDIyODhBMSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4N0YwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRl
ck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCQzYwRUZCNzBGMzNBMEU3MDA4MTJBOTMg
LyogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE0M0JGNTlD
MTE0OTI5MjgwMEM2NDNDQSAvKiBSZW5kZXJQcm9ncmVzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1QTU3NEYyNDEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjVCN0ExNzAxN0MxMEFBODAwRTRBQTBBIC8qIEVsZW1lbnREYXRhLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxh
eW91dC5jcHAJKHJldmlzaW9uIDE1NjI1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9B
dXRvVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHZvaWQg
QXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4odW5zaWcKICAgICBSZW5kZXJUYWJsZUNlbGwq
IGZpeGVkQ29udHJpYnV0b3IgPSAwOwogICAgIFJlbmRlclRhYmxlQ2VsbCogbWF4Q29udHJpYnV0
b3IgPSAwOwogCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbV90YWJsZS0+Y2hpbGRy
ZW4oKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkg
eworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG1fdGFibGUtPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxk
LT5pc1JlbmRlclRhYmxlQ29sKCkpewogICAgICAgICAgICAgLy8gUmVuZGVyVGFibGVDb2xzIGRv
bid0IGhhdmUgdGhlIGNvbmNlcHQgb2YgcHJlZmVycmVkIGxvZ2ljYWwgd2lkdGgsIGJ1dCB3ZSBu
ZWVkIHRvIGNsZWFyIHRoZWlyIGRpcnR5IGJpdHMKICAgICAgICAgICAgIC8vIHNvIHRoYXQgaWYg
d2UgY2FsbCBzZXRQcmVmZXJyZWRXaWR0aHNEaXJ0eSh0cnVlKSBvbiBhIGNvbCBvciBvbmUgb2Yg
aXRzIGRlc2NlbmRhbnRzLCB3ZSdsbCBtYXJrIGl0J3MKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBB
dXRvVGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbih1bnNpZwogICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50LmluQ29sU3BhbiB8fCAhY2VsbCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgICAgICAgICBib29sIGNlbGxIYXNDb250ZW50ID0gY2VsbC0+Y2hpbGRyZW4o
KS0+Zmlyc3RDaGlsZCgpIHx8IGNlbGwtPnN0eWxlKCktPmhhc0JvcmRlcigpIHx8IGNlbGwtPnN0
eWxlKCktPmhhc1BhZGRpbmcoKTsKKyAgICAgICAgICAgICAgICBib29sIGNlbGxIYXNDb250ZW50
ID0gY2VsbC0+Zmlyc3RDaGlsZCgpIHx8IGNlbGwtPnN0eWxlKCktPmhhc0JvcmRlcigpIHx8IGNl
bGwtPnN0eWxlKCktPmhhc1BhZGRpbmcoKTsKICAgICAgICAgICAgICAgICBpZiAoY2VsbEhhc0Nv
bnRlbnQpCiAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkxheW91dC5lbXB0eUNlbGxzT25seSA9
IGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHJldmlzaW9uIDE1NjI1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAogc3RydWN0IFNhbWVTaXplQXNSZW5kZXJCbG9jayA6IHB1YmxpYyBSZW5kZXJC
b3ggewogICAgIHZvaWQqIHBvaW50ZXJzWzJdOwotICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBj
aGlsZHJlbjsKICAgICBSZW5kZXJMaW5lQm94TGlzdCBsaW5lQm94ZXM7CiAgICAgdWludDMyX3Qg
Yml0ZmllbGRzOwogfTsKQEAgLTIxMyw3ICsyMTIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjp3aWxs
QmVEZXN0cm95ZWQoKQogCiAgICAgLy8gTWFrZSBzdXJlIHRvIGRlc3Ryb3kgYW5vbnltb3VzIGNo
aWxkcmVuIGZpcnN0IHdoaWxlIHRoZXkgYXJlIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgcmVzdCBv
ZiB0aGUgdHJlZSwgc28gdGhhdCB0aGV5IHdpbGwKICAgICAvLyBwcm9wZXJseSBkaXJ0eSBsaW5l
IGJveGVzIHRoYXQgdGhleSBhcmUgcmVtb3ZlZCBmcm9tLiBFZmZlY3RzIHRoYXQgZG8gOmJlZm9y
ZS86YWZ0ZXIgb25seSBvbiBob3ZlciBjb3VsZCBjcmFzaCBvdGhlcndpc2UuCi0gICAgY2hpbGRy
ZW4oKS0+ZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKKyAgICBkZXN0cm95TGVmdG92ZXJDaGls
ZHJlbigpOwogCiAgICAgLy8gRGVzdHJveSBvdXIgY29udGludWF0aW9uIGJlZm9yZSBhbnl0aGlu
ZyBvdGhlciB0aGFuIGFub255bW91cyBjaGlsZHJlbi4KICAgICAvLyBUaGUgcmVhc29uIHdlIGRv
bid0IGRlc3Ryb3kgaXQgYmVmb3JlIGFub255bW91cyBjaGlsZHJlbiBpcyB0aGF0IHRoZXkgbWF5
CkBAIC00NjgsNyArNDY3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRUb0Fub255bW91
c0NvbAogICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGJs
b2NrIG9mIHRoZSBjb3JyZWN0IHR5cGUuCiAgICAgICAgIFJlbmRlckJsb2NrKiBuZXdCb3ggPSBu
ZXdDaGlsZEhhc0NvbHVtblNwYW4gPyBjcmVhdGVBbm9ueW1vdXNDb2x1bW5TcGFuQmxvY2soKSA6
IGNyZWF0ZUFub255bW91c0NvbHVtbnNCbG9jaygpOwotICAgICAgICBjaGlsZHJlbigpLT5hcHBl
bmRDaGlsZE5vZGUodGhpcywgbmV3Qm94KTsKKyAgICAgICAgaW5zZXJ0Q2hpbGRJbnRlcm5hbChu
ZXdCb3gsIG51bGxwdHIsIE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgbmV3Qm94LT5hZGRDaGls
ZElnbm9yaW5nQW5vbnltb3VzQ29sdW1uQmxvY2tzKG5ld0NoaWxkLCAwKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTQ5MSw3ICs0OTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGls
ZFRvQW5vbnltb3VzQ29sCiAgICAgCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGFub255bW91cyBib3gg
b2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuCiAgICAgUmVuZGVyQmxvY2sqIG5ld0JveCA9IG5ld0No
aWxkSGFzQ29sdW1uU3BhbiA/IGNyZWF0ZUFub255bW91c0NvbHVtblNwYW5CbG9jaygpIDogY3Jl
YXRlQW5vbnltb3VzQ29sdW1uc0Jsb2NrKCk7Ci0gICAgY2hpbGRyZW4oKS0+aW5zZXJ0Q2hpbGRO
b2RlKHRoaXMsIG5ld0JveCwgbmV3QmVmb3JlQ2hpbGQpOworICAgIGluc2VydENoaWxkSW50ZXJu
YWwobmV3Qm94LCBuZXdCZWZvcmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwogICAgIG5ld0JveC0+
YWRkQ2hpbGRJZ25vcmluZ0Fub255bW91c0NvbHVtbkJsb2NrcyhuZXdDaGlsZCwgMCk7CiAgICAg
cmV0dXJuOwogfQpAQCAtNjA4LDcgKzYwNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNwbGl0Qmxv
Y2tzKFJlbmRlckJsb2MKICAgICB9CiAKICAgICAvLyBOb3cgd2UgYXJlIGF0IHRoZSBjb2x1bW5z
IGJsb2NrIGxldmVsLiBXZSBuZWVkIHRvIHB1dCB0aGUgY2xvbmUgaW50byB0aGUgdG9CbG9jay4K
LSAgICB0b0Jsb2NrLT5jaGlsZHJlbigpLT5hcHBlbmRDaGlsZE5vZGUodG9CbG9jaywgY2xvbmVC
bG9jayk7CisgICAgaW5zZXJ0Q2hpbGRJbnRlcm5hbChjbG9uZUJsb2NrLCBudWxscHRyLCBOb3Rp
ZnlDaGlsZHJlbik7CiAKICAgICAvLyBOb3cgdGFrZSBhbGwgdGhlIGNoaWxkcmVuIGFmdGVyIGN1
cnJDaGlsZCBhbmQgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZnJvbUJsb2NrCiAgICAgLy8gYW5kIHB1
dCB0aGVtIGluIHRoZSB0b0Jsb2NrLgpAQCAtNjQzLDkgKzY0Miw5IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnNwbGl0RmxvdyhSZW5kZXJPYmplY3QKIAogICAgIFJlbmRlck9iamVjdCogYm94Rmlyc3Qg
PSBtYWRlTmV3QmVmb3JlQmxvY2sgPyBibG9jay0+Zmlyc3RDaGlsZCgpIDogcHJlLT5uZXh0U2li
bGluZygpOwogICAgIGlmIChtYWRlTmV3QmVmb3JlQmxvY2spCi0gICAgICAgIGJsb2NrLT5jaGls
ZHJlbigpLT5pbnNlcnRDaGlsZE5vZGUoYmxvY2ssIHByZSwgYm94Rmlyc3QpOwotICAgIGJsb2Nr
LT5jaGlsZHJlbigpLT5pbnNlcnRDaGlsZE5vZGUoYmxvY2ssIG5ld0Jsb2NrQm94LCBib3hGaXJz
dCk7Ci0gICAgYmxvY2stPmNoaWxkcmVuKCktPmluc2VydENoaWxkTm9kZShibG9jaywgcG9zdCwg
Ym94Rmlyc3QpOworICAgICAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChwcmUsIGJveEZp
cnN0LCBOb3RpZnlDaGlsZHJlbik7CisgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwobmV3
QmxvY2tCb3gsIGJveEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7CisgICAgYmxvY2stPmluc2VydENo
aWxkSW50ZXJuYWwocG9zdCwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKICAgICBibG9jay0+
c2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogICAgIAogICAgIGlmIChtYWRlTmV3QmVmb3JlQmxv
Y2spCkBAIC02OTUsMTAgKzY5NCwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjptYWtlQ2hpbGRyZW5B
bm9ueW1vdXNDCiAKICAgICBSZW5kZXJPYmplY3QqIGJveEZpcnN0ID0gYmxvY2stPmZpcnN0Q2hp
bGQoKTsKICAgICBpZiAocHJlKQotICAgICAgICBibG9jay0+Y2hpbGRyZW4oKS0+aW5zZXJ0Q2hp
bGROb2RlKGJsb2NrLCBwcmUsIGJveEZpcnN0KTsKLSAgICBibG9jay0+Y2hpbGRyZW4oKS0+aW5z
ZXJ0Q2hpbGROb2RlKGJsb2NrLCBuZXdCbG9ja0JveCwgYm94Rmlyc3QpOworICAgICAgICBibG9j
ay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChwcmUsIGJveEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7Cisg
ICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwobmV3QmxvY2tCb3gsIGJveEZpcnN0LCBOb3Rp
ZnlDaGlsZHJlbik7CiAgICAgaWYgKHBvc3QpCi0gICAgICAgIGJsb2NrLT5jaGlsZHJlbigpLT5p
bnNlcnRDaGlsZE5vZGUoYmxvY2ssIHBvc3QsIGJveEZpcnN0KTsKKyAgICAgICAgYmxvY2stPmlu
c2VydENoaWxkSW50ZXJuYWwocG9zdCwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKICAgICBi
bG9jay0+c2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogICAgIAogICAgIC8vIFRoZSBwcmUvcG9z
dCBibG9ja3MgYWx3YXlzIGhhdmUgbGF5ZXJzLCBzbyB3ZSBrbm93IHRvIGFsd2F5cyBkbyBhIGZ1
bGwgaW5zZXJ0L3JlbW92ZSAoc28gd2UgcGFzcyB0cnVlIGFzIHRoZSBsYXN0IGFyZ3VtZW50KS4K
QEAgLTEwMDUsNyArMTAwNCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1ha2VDaGlsZHJlbk5vbklu
bGluZSgKICAgICAgICAgY2hpbGQgPSBpbmxpbmVSdW5FbmQtPm5leHRTaWJsaW5nKCk7CiAKICAg
ICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKLSAgICAg
ICAgY2hpbGRyZW4oKS0+aW5zZXJ0Q2hpbGROb2RlKHRoaXMsIGJsb2NrLCBpbmxpbmVSdW5TdGFy
dCk7CisgICAgICAgIGluc2VydENoaWxkSW50ZXJuYWwoYmxvY2ssIGlubGluZVJ1blN0YXJ0LCBO
b3RpZnlDaGlsZHJlbik7CiAgICAgICAgIG1vdmVDaGlsZHJlblRvKGJsb2NrLCBpbmxpbmVSdW5T
dGFydCwgY2hpbGQpOwogICAgIH0KIApAQCAtMTAyNSw4ICsxMDI0LDggQEAgdm9pZCBSZW5kZXJC
bG9jazo6cmVtb3ZlTGVmdG92ZXJBbm9ueW1vdQogICAgIGlmIChjaGlsZC0+Y29udGludWF0aW9u
KCkgfHwgKGNoaWxkLT5maXJzdENoaWxkKCkgJiYgKGNoaWxkLT5pc0Fub255bW91c0NvbHVtblNw
YW5CbG9jaygpIHx8IGNoaWxkLT5pc0Fub255bW91c0NvbHVtbnNCbG9jaygpKSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0QW5DaGlsZCA9IGNoaWxkLT5t
X2NoaWxkcmVuLmZpcnN0Q2hpbGQoKTsKLSAgICBSZW5kZXJPYmplY3QqIGxhc3RBbkNoaWxkID0g
Y2hpbGQtPm1fY2hpbGRyZW4ubGFzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBmaXJzdEFu
Q2hpbGQgPSBjaGlsZC0+Zmlyc3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogbGFzdEFuQ2hp
bGQgPSBjaGlsZC0+bGFzdENoaWxkKCk7CiAgICAgaWYgKGZpcnN0QW5DaGlsZCkgewogICAgICAg
ICBSZW5kZXJPYmplY3QqIG8gPSBmaXJzdEFuQ2hpbGQ7CiAgICAgICAgIHdoaWxlIChvKSB7CkBA
IC0xMDQwLDE1ICsxMDM5LDE1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUxlZnRvdmVyQW5v
bnltb3UKICAgICAgICAgaWYgKGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICAgICAgY2hp
bGQtPm5leHRTaWJsaW5nKCktPnNldFByZXZpb3VzU2libGluZyhsYXN0QW5DaGlsZCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgaWYgKGNoaWxkID09IG1fY2hpbGRyZW4uZmlyc3RDaGlsZCgpKQot
ICAgICAgICAgICAgbV9jaGlsZHJlbi5zZXRGaXJzdENoaWxkKGZpcnN0QW5DaGlsZCk7Ci0gICAg
ICAgIGlmIChjaGlsZCA9PSBtX2NoaWxkcmVuLmxhc3RDaGlsZCgpKQotICAgICAgICAgICAgbV9j
aGlsZHJlbi5zZXRMYXN0Q2hpbGQobGFzdEFuQ2hpbGQpOworICAgICAgICBpZiAoY2hpbGQgPT0g
Zmlyc3RDaGlsZCgpKQorICAgICAgICAgICAgc2V0Rmlyc3RDaGlsZChmaXJzdEFuQ2hpbGQpOwor
ICAgICAgICBpZiAoY2hpbGQgPT0gbGFzdENoaWxkKCkpCisgICAgICAgICAgICBzZXRMYXN0Q2hp
bGQobGFzdEFuQ2hpbGQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChjaGlsZCA9PSBtX2No
aWxkcmVuLmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIG1fY2hpbGRyZW4uc2V0Rmlyc3RDaGls
ZChjaGlsZC0+bmV4dFNpYmxpbmcoKSk7Ci0gICAgICAgIGlmIChjaGlsZCA9PSBtX2NoaWxkcmVu
Lmxhc3RDaGlsZCgpKQotICAgICAgICAgICAgbV9jaGlsZHJlbi5zZXRMYXN0Q2hpbGQoY2hpbGQt
PnByZXZpb3VzU2libGluZygpKTsKKyAgICAgICAgaWYgKGNoaWxkID09IGZpcnN0Q2hpbGQoKSkK
KyAgICAgICAgICAgIHNldEZpcnN0Q2hpbGQoY2hpbGQtPm5leHRTaWJsaW5nKCkpOworICAgICAg
ICBpZiAoY2hpbGQgPT0gbGFzdENoaWxkKCkpCisgICAgICAgICAgICBzZXRMYXN0Q2hpbGQoY2hp
bGQtPnByZXZpb3VzU2libGluZygpKTsKIAogICAgICAgICBpZiAoY2hpbGQtPnByZXZpb3VzU2li
bGluZygpKQogICAgICAgICAgICAgY2hpbGQtPnByZXZpb3VzU2libGluZygpLT5zZXROZXh0U2li
bGluZyhjaGlsZC0+bmV4dFNpYmxpbmcoKSk7CkBAIC0xMDU2LDcgKzEwNTUsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpyZW1vdmVMZWZ0b3ZlckFub255bW91CiAgICAgICAgICAgICBjaGlsZC0+bmV4
dFNpYmxpbmcoKS0+c2V0UHJldmlvdXNTaWJsaW5nKGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7
CiAgICAgfQogCi0gICAgY2hpbGQtPmNoaWxkcmVuKCktPnNldEZpcnN0Q2hpbGQoMCk7CisgICAg
Y2hpbGQtPnNldEZpcnN0Q2hpbGQoMCk7CiAgICAgY2hpbGQtPm1fbmV4dCA9IDA7CiAKICAgICAv
LyBSZW1vdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgZmxvdyB0aHJlYWQgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBsZWZ0b3ZlciBhbm9ueW1vdXMgYmxvY2suCkBAIC0xMDk0LDcgKzEwOTMsNyBA
QCBzdGF0aWMgYm9vbCBjYW5NZXJnZUNvbnRpZ3VvdXNBbm9ueW1vdXNCCiAgICAgICAgICAgICYm
IHByZXYtPmlzQW5vbnltb3VzQ29sdW1uU3BhbkJsb2NrKCkgPT0gbmV4dC0+aXNBbm9ueW1vdXND
b2x1bW5TcGFuQmxvY2soKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1v
dXNCb3hDaGlsZChSZW5kZXJCbG9jayogcGFyZW50LCBSZW5kZXJPYmplY3QqIGNoaWxkKQordm9p
ZCBSZW5kZXJCbG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZChSZW5kZXJCbG9jayogcGFy
ZW50LCBSZW5kZXJCbG9jayogY2hpbGQpCiB7CiAgICAgcGFyZW50LT5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBwYXJlbnQtPnNldENoaWxkcmVuSW5saW5lKGNoaWxk
LT5jaGlsZHJlbklubGluZSgpKTsKQEAgLTExMDIsMTQgKzExMDEsMTQgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y29sbGFwc2VBbm9ueW1vdXNCb3hDaAogCiAgICAgUmVuZGVyRmxvd1RocmVhZCogY2hp
bGRGbG93VGhyZWFkID0gY2hpbGQtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAgICBD
dXJyZW50UmVuZGVyRmxvd1RocmVhZE1haW50YWluZXIgZmxvd1RocmVhZE1haW50YWluZXIoY2hp
bGRGbG93VGhyZWFkKTsKLSAgICAKLSAgICBSZW5kZXJCbG9jayogYW5vbkJsb2NrID0gdG9SZW5k
ZXJCbG9jayhwYXJlbnQtPmNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZShwYXJlbnQsIGNoaWxk
LCBjaGlsZC0+aGFzTGF5ZXIoKSkpOwotICAgIGFub25CbG9jay0+bW92ZUFsbENoaWxkcmVuVG8o
cGFyZW50LCBuZXh0U2libGluZywgY2hpbGQtPmhhc0xheWVyKCkpOworCisgICAgcGFyZW50LT5y
ZW1vdmVDaGlsZEludGVybmFsKGNoaWxkLCBjaGlsZC0+aGFzTGF5ZXIoKSA/IE5vdGlmeUNoaWxk
cmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKKyAgICBjaGlsZC0+bW92ZUFsbENoaWxkcmVuVG8o
cGFyZW50LCBuZXh0U2libGluZywgY2hpbGQtPmhhc0xheWVyKCkpOwogICAgIC8vIERlbGV0ZSB0
aGUgbm93LWVtcHR5IGJsb2NrJ3MgbGluZXMgYW5kIG51a2UgaXQuCi0gICAgYW5vbkJsb2NrLT5k
ZWxldGVMaW5lQm94VHJlZSgpOworICAgIGNoaWxkLT5kZWxldGVMaW5lQm94VHJlZSgpOwogICAg
IGlmIChjaGlsZEZsb3dUaHJlYWQgJiYgY2hpbGRGbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxv
d1RocmVhZCgpKQotICAgICAgICB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChjaGlsZEZsb3dUaHJl
YWQpLT5yZW1vdmVGbG93Q2hpbGRJbmZvKGFub25CbG9jayk7Ci0gICAgYW5vbkJsb2NrLT5kZXN0
cm95KCk7CisgICAgICAgIHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKGNoaWxkRmxvd1RocmVhZCkt
PnJlbW92ZUZsb3dDaGlsZEluZm8oY2hpbGQpOworICAgIGNoaWxkLT5kZXN0cm95KCk7CiB9CiAK
IHZvaWQgUmVuZGVyQmxvY2s6Om1vdmVBbGxDaGlsZHJlbkluY2x1ZGluZ0Zsb2F0c1RvKFJlbmRl
ckJsb2NrKiB0b0Jsb2NrLCBib29sIGZ1bGxSZW1vdmVJbnNlcnQpCkBAIC0xMTg4LDExICsxMTg3
LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAg
ICAgIC8vIENhY2hlIHRoaXMgdmFsdWUgYXMgaXQgbWlnaHQgZ2V0IGNoYW5nZWQgaW4gc2V0U3R5
bGUoKSBjYWxsLgogICAgICAgICAgICAgYm9vbCBpbmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIg
PSBpbmxpbmVDaGlsZHJlbkJsb2NrLT5oYXNMYXllcigpOwogICAgICAgICAgICAgaW5saW5lQ2hp
bGRyZW5CbG9jay0+c2V0U3R5bGUobmV3U3R5bGUpOwotICAgICAgICAgICAgY2hpbGRyZW4oKS0+
cmVtb3ZlQ2hpbGROb2RlKHRoaXMsIGlubGluZUNoaWxkcmVuQmxvY2ssIGlubGluZUNoaWxkcmVu
QmxvY2tIYXNMYXllcik7CisgICAgICAgICAgICByZW1vdmVDaGlsZEludGVybmFsKGlubGluZUNo
aWxkcmVuQmxvY2ssIGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciA/IE5vdGlmeUNoaWxkcmVu
IDogRG9udE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTm93
IGp1c3QgcHV0IHRoZSBpbmxpbmVDaGlsZHJlbkJsb2NrIGluc2lkZSB0aGUgYmxvY2tDaGlsZHJl
bkJsb2NrLgotICAgICAgICAgICAgYmxvY2tDaGlsZHJlbkJsb2NrLT5jaGlsZHJlbigpLT5pbnNl
cnRDaGlsZE5vZGUoYmxvY2tDaGlsZHJlbkJsb2NrLCBpbmxpbmVDaGlsZHJlbkJsb2NrLCBwcmV2
ID09IGlubGluZUNoaWxkcmVuQmxvY2sgPyBibG9ja0NoaWxkcmVuQmxvY2stPmZpcnN0Q2hpbGQo
KSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIgfHwgYmxvY2tDaGlsZHJlbkJs
b2NrLT5oYXNMYXllcigpKTsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQg
PSBwcmV2ID09IGlubGluZUNoaWxkcmVuQmxvY2sgPyBibG9ja0NoaWxkcmVuQmxvY2stPmZpcnN0
Q2hpbGQoKSA6IG51bGxwdHI7CisgICAgICAgICAgICBibG9ja0NoaWxkcmVuQmxvY2stPmluc2Vy
dENoaWxkSW50ZXJuYWwoaW5saW5lQ2hpbGRyZW5CbG9jaywgYmVmb3JlQ2hpbGQsCisgICAgICAg
ICAgICAgICAgKGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciB8fCBibG9ja0NoaWxkcmVuQmxv
Y2stPmhhc0xheWVyKCkpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hpbGRyZW4pOwog
ICAgICAgICAgICAgbmV4dC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGlubGluZUNoaWxkcmVuQmxvY2sgZ290IHJlcGFy
ZW50ZWQgdG8gYmxvY2tDaGlsZHJlbkJsb2NrLCBzbyBpdCBpcyBubyBsb25nZXIgYSBjaGlsZApA
QCAtMTIyMCw3ICsxMjIwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVy
T2JqZQogICAgICAgICAvLyBUaGUgcmVtb3ZhbCBoYXMga25vY2tlZCB1cyBkb3duIHRvIGNvbnRh
aW5pbmcgb25seSBhIHNpbmdsZSBhbm9ueW1vdXMKICAgICAgICAgLy8gYm94LiAgV2UgY2FuIGdv
IGFoZWFkIGFuZCBwdWxsIHRoZSBjb250ZW50IHJpZ2h0IGJhY2sgdXAgaW50byBvdXIKICAgICAg
ICAgLy8gYm94LgotICAgICAgICBjb2xsYXBzZUFub255bW91c0JveENoaWxkKHRoaXMsIGNoaWxk
KTsKKyAgICAgICAgY29sbGFwc2VBbm9ueW1vdXNCb3hDaGlsZCh0aGlzLCB0b1JlbmRlckJsb2Nr
KGNoaWxkKSk7CiAgICAgfSBlbHNlIGlmICgoKHByZXYgJiYgcHJldi0+aXNBbm9ueW1vdXNCbG9j
aygpKSB8fCAobmV4dCAmJiBuZXh0LT5pc0Fub255bW91c0Jsb2NrKCkpKSAmJiBjYW5Db2xsYXBz
ZUFub255bW91c0Jsb2NrQ2hpbGQoKSkgewogICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQg
dGhlIHJlbW92YWwgaGFzIGtub2NrZWQgdXMgZG93biB0byBhIHNpbmdsZSBhbm9ueW1vdXMKICAg
ICAgICAgLy8gYmxvY2sgd2l0aCBwc2V1ZG8tc3R5bGUgZWxlbWVudCBzaWJsaW5ncyAoZS5nLiBm
aXJzdC1sZXR0ZXIpLiBJZiB0aGVzZQpAQCAtNTg0NSw3ICs1ODQ1LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZQogICAgICAgICB9CiAgICAgICAgIC8vIFRvIHBy
ZXZlbnQgcmVtb3ZhbCBvZiBzaW5nbGUgYW5vbnltb3VzIGJsb2NrIGluIFJlbmRlckJsb2NrOjpy
ZW1vdmVDaGlsZCBhbmQgY2F1c2luZwogICAgICAgICAvLyB8bmV4dFNpYmxpbmd8IHRvIGdvIHN0
YWxlLCB3ZSByZW1vdmUgdGhlIG9sZCBmaXJzdCBsZXR0ZXIgdXNpbmcgcmVtb3ZlQ2hpbGROb2Rl
IGZpcnN0LgotICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+Y2hpbGRyZW4oKS0+cmVtb3Zl
Q2hpbGROb2RlKGZpcnN0TGV0dGVyQ29udGFpbmVyLCBmaXJzdExldHRlcik7CisgICAgICAgIGZp
cnN0TGV0dGVyQ29udGFpbmVyLT5yZW1vdmVDaGlsZEludGVybmFsKGZpcnN0TGV0dGVyLCBOb3Rp
ZnlDaGlsZHJlbik7CiAgICAgICAgIGZpcnN0TGV0dGVyLT5kZXN0cm95KCk7CiAgICAgICAgIGZp
cnN0TGV0dGVyID0gbmV3Rmlyc3RMZXR0ZXI7CiAgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVy
LT5hZGRDaGlsZChmaXJzdExldHRlciwgbmV4dFNpYmxpbmcpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDE1NjI1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTIgKzEw
NCw2IEBAIHByb3RlY3RlZDoKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVuZGVyQmxvY2sqIGNyZWF0
ZUFub255bW91cyhEb2N1bWVudCYpOwogCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5maXJzdENoaWxkKCk7IH0KLSAgICBSZW5kZXJPYmpl
Y3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4ubGFzdENoaWxkKCk7IH0K
LQotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNv
bnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0gICAgdmlydHVhbCBS
ZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4g
Jm1fY2hpbGRyZW47IH0KLQogICAgIGJvb2wgYmVpbmdEZXN0cm95ZWQoKSBjb25zdCB7IHJldHVy
biBtX2JlaW5nRGVzdHJveWVkOyB9CiAKICAgICAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBv
dmVycmlkZGVuIGZvciBpbmxpbmUtYmxvY2suCkBAIC0yOTIsNyArMjg2LDcgQEAgcHVibGljOgog
ICAgIFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1vdXNCbG9jayhFRGlzcGxheSBkaXNwbGF5ID0g
QkxPQ0spIGNvbnN0IHsgcmV0dXJuIGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlckFu
ZERpc3BsYXkodGhpcywgZGlzcGxheSk7IH0KICAgICBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnlt
b3VzQ29sdW1uc0Jsb2NrKCkgY29uc3QgeyByZXR1cm4gY3JlYXRlQW5vbnltb3VzQ29sdW1uc1dp
dGhQYXJlbnRSZW5kZXJlcih0aGlzKTsgfQogICAgIFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1v
dXNDb2x1bW5TcGFuQmxvY2soKSBjb25zdCB7IHJldHVybiBjcmVhdGVBbm9ueW1vdXNDb2x1bW5T
cGFuV2l0aFBhcmVudFJlbmRlcmVyKHRoaXMpOyB9Ci0gICAgc3RhdGljIHZvaWQgY29sbGFwc2VB
bm9ueW1vdXNCb3hDaGlsZChSZW5kZXJCbG9jayogcGFyZW50LCBSZW5kZXJPYmplY3QqIGNoaWxk
KTsKKyAgICBzdGF0aWMgdm9pZCBjb2xsYXBzZUFub255bW91c0JveENoaWxkKFJlbmRlckJsb2Nr
KiBwYXJlbnQsIFJlbmRlckJsb2NrKiBjaGlsZCk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckJveCog
Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJl
bnQpIGNvbnN0IE9WRVJSSURFOwogCkBAIC01NzEsNiArNTY1LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1JlbmRlckJsb2NrKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgp
IGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIGlzSW5saW5lKCkgJiYgaXNSZXBsYWNlZCgp
OyB9CisgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgbWFrZUNoaWxkcmVuTm9uSW5saW5lKFJlbmRlck9i
amVjdCogaW5zZXJ0aW9uUG9pbnQgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92
ZXJBbm9ueW1vdXNCbG9jayhSZW5kZXJCbG9jayogY2hpbGQpOwpAQCAtODc4LDcgKzg3Myw2IEBA
IHByb3RlY3RlZDoKICAgICBPd25QdHI8RmxvYXRpbmdPYmplY3RzPiBtX2Zsb2F0aW5nT2JqZWN0
czsKICAgICBPd25QdHI8UmVuZGVyQmxvY2tSYXJlRGF0YT4gbV9yYXJlRGF0YTsKIAotICAgIFJl
bmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIFJlbmRlckxpbmVCb3hMaXN0IG1f
bGluZUJveGVzOyAgIC8vIEFsbCBvZiB0aGUgcm9vdCBsaW5lIGJveGVzIGNyZWF0ZWQgZm9yIHRo
aXMgYmxvY2sgZmxvdy4gIEZvciBleGFtcGxlLCA8ZGl2PkhlbGxvPGJyPndvcmxkLjwvZGl2PiB3
aWxsIGhhdmUgdHdvIHRvdGFsIGxpbmVzIGZvciB0aGUgPGRpdj4uCiAKICAgICBtdXRhYmxlIHNp
Z25lZCBtX2xpbmVIZWlnaHQgOiAyNzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY0NCw3ICs0NjQ0LDcgQEAgUmVuZGVy
T2JqZWN0KiBSZW5kZXJCb3g6OnNwbGl0QW5vbnltb3VzQgogICAgICAgICAgICAgLy8gc28gdGhh
dCB0aGUgdGFibGUgcmVwYWludGluZyBsb2dpYyBrbm93cyB0aGUgc3RydWN0dXJlIGlzIGRpcnR5
LgogICAgICAgICAgICAgLy8gU2VlIGZvciBleGFtcGxlIFJlbmRlclRhYmxlQ2VsbDpjbGlwcGVk
T3ZlcmZsb3dSZWN0Rm9yUmVwYWludC4KICAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFm
dGVyU3BsaXQocGFyZW50Qm94KTsKLSAgICAgICAgICAgIHBhcmVudEJveC0+Y2hpbGRyZW4oKS0+
aW5zZXJ0Q2hpbGROb2RlKHBhcmVudEJveCwgcG9zdEJveCwgYm94VG9TcGxpdC0+bmV4dFNpYmxp
bmcoKSk7CisgICAgICAgICAgICBwYXJlbnRCb3gtPmluc2VydENoaWxkSW50ZXJuYWwocG9zdEJv
eCwgYm94VG9TcGxpdC0+bmV4dFNpYmxpbmcoKSwgTm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICAg
ICAgYm94VG9TcGxpdC0+bW92ZUNoaWxkcmVuVG8ocG9zdEJveCwgYmVmb3JlQ2hpbGQsIDAsIHRy
dWUpOwogCiAgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KGJveFRvU3Bs
aXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgxLDkgKzI3
ODEsMTMgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkVG8oUgogICAgIGlm
IChmdWxsUmVtb3ZlSW5zZXJ0ICYmICh0b0JveE1vZGVsT2JqZWN0LT5pc1JlbmRlckJsb2NrKCkg
fHwgdG9Cb3hNb2RlbE9iamVjdC0+aXNSZW5kZXJJbmxpbmUoKSkpIHsKICAgICAgICAgLy8gVGFr
ZXMgY2FyZSBvZiBhZGRpbmcgdGhlIG5ldyBjaGlsZCBjb3JyZWN0bHkgaWYgdG9CbG9jayBhbmQg
ZnJvbUJsb2NrCiAgICAgICAgIC8vIGhhdmUgZGlmZmVyZW50IGtpbmQgb2YgY2hpbGRyZW4gKGJs
b2NrIHZzIGlubGluZSkuCi0gICAgICAgIHRvQm94TW9kZWxPYmplY3QtPmFkZENoaWxkKGNoaWxk
cmVuKCktPnJlbW92ZUNoaWxkTm9kZSh0aGlzLCBjaGlsZCksIGJlZm9yZUNoaWxkKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgdG9Cb3hNb2RlbE9iamVjdC0+Y2hpbGRyZW4oKS0+aW5zZXJ0Q2hpbGRO
b2RlKHRvQm94TW9kZWxPYmplY3QsIGNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZSh0aGlzLCBj
aGlsZCwgZnVsbFJlbW92ZUluc2VydCksIGJlZm9yZUNoaWxkLCBmdWxsUmVtb3ZlSW5zZXJ0KTsK
KyAgICAgICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbChjaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOworICAg
ICAgICB0b0JveE1vZGVsT2JqZWN0LT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAg
IH0gZWxzZSB7CisgICAgICAgIE5vdGlmeUNoaWxkcmVuVHlwZSBub3RpZnlUeXBlID0gZnVsbFJl
bW92ZUluc2VydCA/IE5vdGlmeUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuOworICAgICAg
ICByZW1vdmVDaGlsZEludGVybmFsKGNoaWxkLCBub3RpZnlUeXBlKTsKKyAgICAgICAgdG9Cb3hN
b2RlbE9iamVjdC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChjaGlsZCwgYmVmb3JlQ2hpbGQsIG5vdGlm
eVR5cGUpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxk
cmVuVG8oUmVuZGVyQm94TW9kZWxPYmplY3QqIHRvQm94TW9kZWxPYmplY3QsIFJlbmRlck9iamVj
dCogc3RhcnRDaGlsZCwgUmVuZGVyT2JqZWN0KiBlbmRDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCwgYm9vbCBmdWxsUmVtb3ZlSW5zZXJ0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2MjUyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwx
MyArMjUsMTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50
LmgiCiAKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEu
aCIKKyNpbmNsdWRlICJSZW5kZXJDb3VudGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRl
ZEZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRl
ICJSZW5kZXJHcmlkLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5k
ZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIK
ICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVn
aW9uLmgiCkBAIC00MiwxMiArNDUsMTUgQEAKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBwb3J0LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyRWxlbWVudDo6UmVuZGVyRWxlbWVudChFbGVtZW50
KiBlbGVtZW50KQogICAgIDogUmVuZGVyT2JqZWN0KGVsZW1lbnQpCisgICAgLCBtX2ZpcnN0Q2hp
bGQobnVsbHB0cikKKyAgICAsIG1fbGFzdENoaWxkKG51bGxwdHIpCiB7CiB9CiAKQEAgLTEzNiw5
ICsxNDIsNiBAQCBSZW5kZXJFbGVtZW50KiBSZW5kZXJFbGVtZW50OjpjcmVhdGVGb3IoCiAKIHZv
aWQgUmVuZGVyRWxlbWVudDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSAgICBBU1NFUlQoY2hpbGRyZW4oKSk7Ci0gICAgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0JiBjaGlsZHJlbiA9ICp0aGlzLT5jaGlsZHJlbigpOwotCiAgICAg
Ym9vbCBuZWVkc1RhYmxlID0gZmFsc2U7CiAKICAgICBpZiAobmV3Q2hpbGQtPmlzUmVuZGVyVGFi
bGVDb2woKSkgewpAQCAtMTU2LDcgKzE1OSw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6YWRkQ2hp
bGQoUmVuZGVyT2JqZWMKIAogICAgIGlmIChuZWVkc1RhYmxlKSB7CiAgICAgICAgIFJlbmRlclRh
YmxlKiB0YWJsZTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0gYmVmb3JlQ2hp
bGQgPyBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBjaGlsZHJlbi5sYXN0Q2hpbGQo
KTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0gYmVmb3JlQ2hpbGQgPyBiZWZv
cmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBtX2xhc3RDaGlsZDsKICAgICAgICAgaWYgKGFm
dGVyQ2hpbGQgJiYgYWZ0ZXJDaGlsZC0+aXNBbm9ueW1vdXMoKSAmJiBhZnRlckNoaWxkLT5pc1Rh
YmxlKCkgJiYgIWFmdGVyQ2hpbGQtPmlzQmVmb3JlQ29udGVudCgpKQogICAgICAgICAgICAgdGFi
bGUgPSB0b1JlbmRlclRhYmxlKGFmdGVyQ2hpbGQpOwogICAgICAgICBlbHNlIHsKQEAgLTE2NSw3
ICsxNjgsNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmFkZENoaWxkKFJlbmRlck9iamVjCiAgICAg
ICAgIH0KICAgICAgICAgdGFibGUtPmFkZENoaWxkKG5ld0NoaWxkKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgY2hpbGRyZW4uaW5zZXJ0Q2hpbGROb2RlKHRoaXMsIG5ld0NoaWxkLCBiZWZvcmVDaGls
ZCk7CisgICAgICAgIGluc2VydENoaWxkSW50ZXJuYWwobmV3Q2hpbGQsIGJlZm9yZUNoaWxkLCBO
b3RpZnlDaGlsZHJlbik7CiAKICAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dCgpICYmIG5ld0NoaWxk
LT5zdHlsZSgpLT50ZXh0VHJhbnNmb3JtKCkgPT0gQ0FQSVRBTElaRSkKICAgICAgICAgdG9SZW5k
ZXJUZXh0KG5ld0NoaWxkKS0+dHJhbnNmb3JtVGV4dCgpOwpAQCAtMTg4LDggKzE5MSwxMzkgQEAg
dm9pZCBSZW5kZXJFbGVtZW50OjphZGRDaGlsZChSZW5kZXJPYmplYwogCiB2b2lkIFJlbmRlckVs
ZW1lbnQ6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCogb2xkQ2hpbGQpCiB7Ci0gICAgQVNTRVJU
KGNoaWxkcmVuKCkpOwotICAgIGNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZSh0aGlzLCBvbGRD
aGlsZCk7CisgICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbChvbGRDaGlsZCwgTm90aWZ5Q2hpbGRyZW4p
OworfQorCit2b2lkIFJlbmRlckVsZW1lbnQ6OmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCkKK3sK
KyAgICB3aGlsZSAoZmlyc3RDaGlsZCgpKSB7CisgICAgICAgIGlmIChmaXJzdENoaWxkKCktPmlz
TGlzdE1hcmtlcigpIHx8IChmaXJzdENoaWxkKCktPnN0eWxlKCktPnN0eWxlVHlwZSgpID09IEZJ
UlNUX0xFVFRFUiAmJiAhZmlyc3RDaGlsZCgpLT5pc1RleHQoKSkpCisgICAgICAgICAgICBmaXJz
dENoaWxkKCktPnJlbW92ZUZyb21QYXJlbnQoKTsgLy8gTGlzdCBtYXJrZXJzIGFyZSBvd25lZCBi
eSB0aGVpciBlbmNsb3NpbmcgbGlzdCBhbmQgc28gZG9uJ3QgZ2V0IGRlc3Ryb3llZCBieSB0aGlz
IGNvbnRhaW5lci4gU2ltaWxhcmx5LCBmaXJzdCBsZXR0ZXJzIGFyZSBkZXN0cm95ZWQgYnkgdGhl
aXIgcmVtYWluaW5nIHRleHQgZnJhZ21lbnQuCisgICAgICAgIGVsc2UgaWYgKGZpcnN0Q2hpbGQo
KS0+aXNSdW5JbigpICYmIGZpcnN0Q2hpbGQoKS0+bm9kZSgpKSB7CisgICAgICAgICAgICBmaXJz
dENoaWxkKCktPm5vZGUoKS0+c2V0UmVuZGVyZXIoMCk7CisgICAgICAgICAgICBmaXJzdENoaWxk
KCktPm5vZGUoKS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgICAgICAgICAgZmlyc3RDaGls
ZCgpLT5kZXN0cm95KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBEZXN0cm95
IGFueSBhbm9ueW1vdXMgY2hpbGRyZW4gcmVtYWluaW5nIGluIHRoZSByZW5kZXIgdHJlZSwgYXMg
d2VsbCBhcyBpbXBsaWNpdCAoc2hhZG93KSBET00gZWxlbWVudHMgbGlrZSB0aG9zZSB1c2VkIGlu
IHRoZSBlbmdpbmUtYmFzZWQgdGV4dCBmaWVsZHMuCisgICAgICAgICAgICBpZiAoZmlyc3RDaGls
ZCgpLT5ub2RlKCkpCisgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5ub2RlKCktPnNldFJl
bmRlcmVyKDApOworICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5kZXN0cm95KCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyRWxlbWVudDo6aW5zZXJ0Q2hpbGRJbnRlcm5hbChS
ZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBOb3RpZnlD
aGlsZHJlblR5cGUgbm90aWZ5Q2hpbGRyZW4pCit7CisgICAgQVNTRVJUKGNhbkhhdmVDaGlsZHJl
bigpKTsKKyAgICBBU1NFUlQoIW5ld0NoaWxkLT5wYXJlbnQoKSk7CisgICAgQVNTRVJUKCFpc1Jl
bmRlckJsb2NrRmxvdygpIHx8ICghbmV3Q2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgJiYgIW5ld0No
aWxkLT5pc1RhYmxlUm93KCkgJiYgIW5ld0NoaWxkLT5pc1RhYmxlQ2VsbCgpKSk7CisKKyAgICB3
aGlsZSAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICYmIGJlZm9yZUNoaWxk
LT5wYXJlbnQoKSAhPSB0aGlzKQorICAgICAgICBiZWZvcmVDaGlsZCA9IGJlZm9yZUNoaWxkLT5w
YXJlbnQoKTsKKworICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGlmIGl0IGRv
ZXMgcHJldmVudCByZW5kZXIgdHJlZSBjb3JydXB0aW9uCisgICAgLy8gd2hlcmUgY2hpbGQtPnBh
cmVudCgpIGVuZHMgdXAgYmVpbmcgb3duZXIgYnV0IGNoaWxkLT5uZXh0U2libGluZygpLT5wYXJl
bnQoKQorICAgIC8vIGlzIG5vdCBvd25lci4KKyAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3Jl
Q2hpbGQtPnBhcmVudCgpICE9IHRoaXMpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBuZXdDaGlsZC0+c2V0UGFyZW50KHRoaXMp
OworCisgICAgaWYgKG1fZmlyc3RDaGlsZCA9PSBiZWZvcmVDaGlsZCkKKyAgICAgICAgbV9maXJz
dENoaWxkID0gbmV3Q2hpbGQ7CisKKyAgICBpZiAoYmVmb3JlQ2hpbGQpIHsKKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiBwcmV2aW91c1NpYmxpbmcgPSBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcpCisgICAgICAgICAgICBwcmV2aW91c1Np
YmxpbmctPnNldE5leHRTaWJsaW5nKG5ld0NoaWxkKTsKKyAgICAgICAgbmV3Q2hpbGQtPnNldFBy
ZXZpb3VzU2libGluZyhwcmV2aW91c1NpYmxpbmcpOworICAgICAgICBuZXdDaGlsZC0+c2V0TmV4
dFNpYmxpbmcoYmVmb3JlQ2hpbGQpOworICAgICAgICBiZWZvcmVDaGlsZC0+c2V0UHJldmlvdXNT
aWJsaW5nKG5ld0NoaWxkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobGFzdENoaWxkKCkp
CisgICAgICAgICAgICBsYXN0Q2hpbGQoKS0+c2V0TmV4dFNpYmxpbmcobmV3Q2hpbGQpOworICAg
ICAgICBuZXdDaGlsZC0+c2V0UHJldmlvdXNTaWJsaW5nKGxhc3RDaGlsZCgpKTsKKyAgICAgICAg
bV9sYXN0Q2hpbGQgPSBuZXdDaGlsZDsKKyAgICB9CisKKyAgICBpZiAoIWRvY3VtZW50QmVpbmdE
ZXN0cm95ZWQoKSkgeworICAgICAgICBpZiAobm90aWZ5Q2hpbGRyZW4gPT0gTm90aWZ5Q2hpbGRy
ZW4pCisgICAgICAgICAgICBuZXdDaGlsZC0+aW5zZXJ0ZWRJbnRvVHJlZSgpOworICAgICAgICBS
ZW5kZXJDb3VudGVyOjpyZW5kZXJlclN1YnRyZWVBdHRhY2hlZChuZXdDaGlsZCk7CisgICAgfQor
CisgICAgbmV3Q2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworICAg
IHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0cnVlKTsKKyAgICBpZiAoIW5vcm1hbENo
aWxkTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlKTsgLy8g
V2UgbWF5IHN1cHBseSB0aGUgc3RhdGljIHBvc2l0aW9uIGZvciBhbiBhYnNvbHV0ZSBwb3NpdGlv
bmVkIGNoaWxkLgorCisgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5h
eE9iamVjdENhY2hlKCkpCisgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQodGhpcyk7Cit9
CisKK3ZvaWQgUmVuZGVyRWxlbWVudDo6cmVtb3ZlQ2hpbGRJbnRlcm5hbChSZW5kZXJPYmplY3Qq
IG9sZENoaWxkLCBOb3RpZnlDaGlsZHJlblR5cGUgbm90aWZ5Q2hpbGRyZW4pCit7CisgICAgQVNT
RVJUKGNhbkhhdmVDaGlsZHJlbigpKTsKKyAgICBBU1NFUlQob2xkQ2hpbGQtPnBhcmVudCgpID09
IHRoaXMpOworCisgICAgaWYgKG9sZENoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpCisgICAgICAgIHRvUmVuZGVyQm94KG9sZENoaWxkKS0+cmVtb3ZlRmxvYXRpbmdPclBv
c2l0aW9uZWRDaGlsZEZyb21CbG9ja0xpc3RzKCk7CisKKyAgICAvLyBTbyB0aGF0IHdlJ2xsIGdl
dCB0aGUgYXBwcm9wcmlhdGUgZGlydHkgYml0IHNldCAoZWl0aGVyIHRoYXQgYSBub3JtYWwgZmxv
dyBjaGlsZCBnb3QgeWFua2VkIG9yCisgICAgLy8gdGhhdCBhIHBvc2l0aW9uZWQgY2hpbGQgZ290
IHlhbmtlZCkuIFdlIGFsc28gcmVwYWludCwgc28gdGhhdCB0aGUgYXJlYSBleHBvc2VkIHdoZW4g
dGhlIGNoaWxkCisgICAgLy8gZGlzYXBwZWFycyBnZXRzIHJlcGFpbnRlZCBwcm9wZXJseS4KKyAg
ICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSAmJiBub3RpZnlDaGlsZHJlbiA9PSBOb3Rp
ZnlDaGlsZHJlbiAmJiBvbGRDaGlsZC0+ZXZlckhhZExheW91dCgpKSB7CisgICAgICAgIG9sZENo
aWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAgLy8gV2Ug
b25seSByZXBhaW50IHxvbGRDaGlsZHwgaWYgd2UgaGF2ZSBhIFJlbmRlckxheWVyIGFzIGl0cyB2
aXN1YWwgb3ZlcmZsb3cgbWF5IG5vdCBiZSB0cmFja2VkIGJ5IGl0cyBwYXJlbnQuCisgICAgICAg
IGlmIChvbGRDaGlsZC0+aXNCb2R5KCkpCisgICAgICAgICAgICB2aWV3KCkucmVwYWludFJvb3RD
b250ZW50cygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvbGRDaGlsZC0+cmVwYWludCgp
OworICAgIH0KKworICAgIC8vIElmIHdlIGhhdmUgYSBsaW5lIGJveCB3cmFwcGVyLCBkZWxldGUg
aXQuCisgICAgaWYgKG9sZENoaWxkLT5pc0JveCgpKQorICAgICAgICB0b1JlbmRlckJveChvbGRD
aGlsZCktPmRlbGV0ZUxpbmVCb3hXcmFwcGVyKCk7CisgICAgZWxzZSBpZiAob2xkQ2hpbGQtPmlz
TGluZUJyZWFrKCkpCisgICAgICAgIHRvUmVuZGVyTGluZUJyZWFrKG9sZENoaWxkKS0+ZGVsZXRl
SW5saW5lQm94V3JhcHBlcigpOworCisgICAgLy8gSWYgb2xkQ2hpbGQgaXMgdGhlIHN0YXJ0IG9y
IGVuZCBvZiB0aGUgc2VsZWN0aW9uLCB0aGVuIGNsZWFyIHRoZSBzZWxlY3Rpb24gdG8KKyAgICAv
LyBhdm9pZCBwcm9ibGVtcyBvZiBpbnZhbGlkIHBvaW50ZXJzLgorICAgIC8vIEZJWE1FOiBUaGUg
RnJhbWVTZWxlY3Rpb24gc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzIHdoZW4gaXQKKyAg
ICAvLyBpcyBub3RpZmllZCBvZiBET00gbXV0YXRpb25zLgorICAgIGlmICghZG9jdW1lbnRCZWlu
Z0Rlc3Ryb3llZCgpICYmIG9sZENoaWxkLT5pc1NlbGVjdGlvbkJvcmRlcigpKQorICAgICAgICB2
aWV3KCkuY2xlYXJTZWxlY3Rpb24oKTsKKworICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3ll
ZCgpICYmIG5vdGlmeUNoaWxkcmVuID09IE5vdGlmeUNoaWxkcmVuKQorICAgICAgICBvbGRDaGls
ZC0+d2lsbEJlUmVtb3ZlZEZyb21UcmVlKCk7CisKKyAgICAvLyBXQVJOSU5HOiBUaGVyZSBzaG91
bGQgYmUgbm8gY29kZSBydW5uaW5nIGJldHdlZW4gd2lsbEJlUmVtb3ZlZEZyb21UcmVlIGFuZCB0
aGUgYWN0dWFsIHJlbW92YWwgYmVsb3cuCisgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQg
cmFjZSBjb25kaXRpb25zIHdoZXJlIHdpbGxCZVJlbW92ZWRGcm9tVHJlZSB3b3VsZCBkaXJ0eSB0
aGUgdHJlZSdzIHN0cnVjdHVyZQorICAgIC8vIGFuZCB0aGUgY29kZSBydW5uaW5nIGhlcmUgd291
bGQgZm9yY2UgYW4gdW50aW1lbHkgcmVidWlsZGluZywgbGVhdmluZyB8b2xkQ2hpbGR8IGRhbmds
aW5nLgorCisgICAgaWYgKG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgb2xk
Q2hpbGQtPnByZXZpb3VzU2libGluZygpLT5zZXROZXh0U2libGluZyhvbGRDaGlsZC0+bmV4dFNp
YmxpbmcoKSk7CisgICAgaWYgKG9sZENoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBvbGRD
aGlsZC0+bmV4dFNpYmxpbmcoKS0+c2V0UHJldmlvdXNTaWJsaW5nKG9sZENoaWxkLT5wcmV2aW91
c1NpYmxpbmcoKSk7CisKKyAgICBpZiAobV9maXJzdENoaWxkID09IG9sZENoaWxkKQorICAgICAg
ICBtX2ZpcnN0Q2hpbGQgPSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAobV9sYXN0
Q2hpbGQgPT0gb2xkQ2hpbGQpCisgICAgICAgIG1fbGFzdENoaWxkID0gb2xkQ2hpbGQtPnByZXZp
b3VzU2libGluZygpOworCisgICAgb2xkQ2hpbGQtPnNldFByZXZpb3VzU2libGluZygwKTsKKyAg
ICBvbGRDaGlsZC0+c2V0TmV4dFNpYmxpbmcoMCk7CisgICAgb2xkQ2hpbGQtPnNldFBhcmVudCgw
KTsKKworICAgIC8vIHJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlIHdhbGtzIHRoZSB3aG9sZSBzdWJ0
cmVlLiBXZSBjYW4gaW1wcm92ZSBwZXJmb3JtYW5jZQorICAgIC8vIGJ5IHNraXBwaW5nIHRoaXMg
c3RlcCB3aGVuIGRlc3Ryb3lpbmcgdGhlIGVudGlyZSB0cmVlLgorICAgIGlmICghZG9jdW1lbnRC
ZWluZ0Rlc3Ryb3llZCgpKQorICAgICAgICBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclJlbW92ZWRG
cm9tVHJlZShvbGRDaGlsZCk7CisKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBkb2N1
bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQorICAgICAgICBjYWNoZS0+Y2hpbGRyZW5D
aGFuZ2VkKHRoaXMpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRMYXllcnMoUmVuZGVyT2JqZWN0KiBv
YmosIFJlbmRlckxheWVyKiBwYXJlbnRMYXllciwgUmVuZGVyRWxlbWVudComIG5ld09iamVjdCwg
UmVuZGVyTGF5ZXIqJiBiZWZvcmVDaGlsZCkKQEAgLTM0Niw1ICs0ODAsMTEgQEAgdm9pZCBSZW5k
ZXJFbGVtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbVRyZQogICAgIFJlbmRlck9iamVjdDo6d2lsbEJl
UmVtb3ZlZEZyb21UcmVlKCk7CiB9CiAKK3ZvaWQgUmVuZGVyRWxlbWVudDo6d2lsbEJlRGVzdHJv
eWVkKCkKK3sKKyAgICBkZXN0cm95TGVmdG92ZXJDaGlsZHJlbigpOworCisgICAgUmVuZGVyT2Jq
ZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKTsKK30KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw5
IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBub25Qc2V1ZG9FbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdG9FbGVtZW50KFJlbmRlck9iamVjdDo6bm9uUHNldWRvTm9kZSgpKTsgfQogICAgIEVsZW1l
bnQqIGdlbmVyYXRpbmdFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KFJlbmRlck9i
amVjdDo6Z2VuZXJhdGluZ05vZGUoKSk7IH0KIAorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBm
aXJzdENoaWxkKCkgY29uc3QgRklOQUwgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CisgICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IEZJTkFMIHsgcmV0dXJuIG1fbGFz
dENoaWxkOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0
KiwgUmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQgPSAwKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihS
ZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgeyBy
ZXR1cm4gYWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsgfQpAQCAtNTEsNiArNTQsMTAg
QEAgcHVibGljOgogICAgIHZvaWQgbW92ZUxheWVycyhSZW5kZXJMYXllciogb2xkUGFyZW50LCBS
ZW5kZXJMYXllciogbmV3UGFyZW50KTsKICAgICBSZW5kZXJMYXllciogZmluZE5leHRMYXllcihS
ZW5kZXJMYXllciogcGFyZW50TGF5ZXIsIFJlbmRlck9iamVjdCogc3RhcnRQb2ludCwgYm9vbCBj
aGVja1BhcmVudCA9IHRydWUpOwogCisgICAgZW51bSBOb3RpZnlDaGlsZHJlblR5cGUgeyBOb3Rp
ZnlDaGlsZHJlbiwgRG9udE5vdGlmeUNoaWxkcmVuIH07CisgICAgdm9pZCBpbnNlcnRDaGlsZElu
dGVybmFsKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIE5vdGlmeUNo
aWxkcmVuVHlwZSk7CisgICAgdm9pZCByZW1vdmVDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCos
IE5vdGlmeUNoaWxkcmVuVHlwZSk7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBSZW5kZXJF
bGVtZW50KEVsZW1lbnQqKTsKIApAQCAtNTksMTQgKzY2LDIyIEBAIHByb3RlY3RlZDoKICAgICBM
YXlvdXRVbml0IHZhbHVlRm9yTGVuZ3RoKGNvbnN0IExlbmd0aCYsIExheW91dFVuaXQgbWF4aW11
bVZhbHVlLCBib29sIHJvdW5kUGVyY2VudGFnZXMgPSBmYWxzZSkgY29uc3Q7CiAgICAgTGF5b3V0
VW5pdCBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoY29uc3QgTGVuZ3RoJiwgTGF5b3V0VW5pdCBtYXhp
bXVtVmFsdWUsIGJvb2wgcm91bmRQZXJjZW50YWdlcyA9IGZhbHNlKSBjb25zdDsKIAorICAgIHZv
aWQgc2V0Rmlyc3RDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkKSB7IG1fZmlyc3RDaGlsZCA9IGNo
aWxkOyB9CisgICAgdm9pZCBzZXRMYXN0Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkgeyBtX2xh
c3RDaGlsZCA9IGNoaWxkOyB9CisgICAgdm9pZCBkZXN0cm95TGVmdG92ZXJDaGlsZHJlbigpOwor
CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21UcmVlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHdpbGxCZURlc3Ryb3llZCgpIE9WRVJSSURFOwogCiBwcml2YXRlOgogICAgIHZvaWQgbm9k
ZSgpIGNvbnN0IFdURl9ERUxFVEVEX0ZVTkNUSU9OOwogICAgIHZvaWQgbm9uUHNldWRvTm9kZSgp
IGNvbnN0IFdURl9ERUxFVEVEX0ZVTkNUSU9OOwogICAgIHZvaWQgZ2VuZXJhdGluZ05vZGUoKSBj
b25zdCBXVEZfREVMRVRFRF9GVU5DVElPTjsKICAgICB2b2lkIGlzVGV4dCgpIGNvbnN0IFdURl9E
RUxFVEVEX0ZVTkNUSU9OOworCisgICAgUmVuZGVyT2JqZWN0KiBtX2ZpcnN0Q2hpbGQ7CisgICAg
UmVuZGVyT2JqZWN0KiBtX2xhc3RDaGlsZDsKIH07CiAKIGlubGluZSBMYXlvdXRVbml0IFJlbmRl
ckVsZW1lbnQ6OnZhbHVlRm9yTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBMYXlvdXRVbml0
IG1heGltdW1WYWx1ZSwgYm9vbCByb3VuZFBlcmNlbnRhZ2VzKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZp
c2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNyArNDk0LDcgQEAgdm9pZCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6bGF5b3V0KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhpcyBj
b2RlIGNvcGllZCBmcm9tIFJlbmRlck1lZGlhOjpsYXlvdXQoKS4KLSAgICBSZW5kZXJPYmplY3Qq
IGNoaWxkID0gbV9jaGlsZHJlbi5maXJzdENoaWxkKCk7CisgICAgUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsKIAogICAgIGlmICghY2hpbGQpCiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5o
CShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsNiBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB2aXJ0dWFsIEN1cnNvckRpcmVjdGl2ZSBnZXRDdXJzb3IoY29uc3QgTGF5b3V0UG9p
bnQmLCBDdXJzb3ImKSBjb25zdCBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJu
ICZtX2NoaWxkcmVuOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxk
cmVuKCkgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KLQogcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERTsKIApAQCAtMTAzLDcgKzEwMCw2
IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0UmVjdCB1bmF2YWlsYWJsZVBsdWdpbkluZGljYXRvckJv
dW5kcyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGNhbkhh
dmVDaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwotICAgIAogICAgIHZpcnR1YWwgYm9v
bCBjYW5IYXZlV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBtX2hh
c0ZhbGxiYWNrQ29udGVudDsgLy8gRklYTUU6IFRoaXMgYmVsb25ncyBvbiBIVE1MT2JqZWN0RWxl
bWVudC4KQEAgLTExNCw3ICsxMTAsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3VuYXZhaWxh
YmxlUGx1Z2luUmVwbGFjZW1lbnRUZXh0OwogICAgIGJvb2wgbV91bmF2YWlsYWJsZVBsdWdpbklu
ZGljYXRvcklzUHJlc3NlZDsKICAgICBib29sIG1fbW91c2VEb3duV2FzSW5VbmF2YWlsYWJsZVBs
dWdpbkluZGljYXRvcjsKLSAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKICAg
ICBTdHJpbmcgbV91bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uOwogfTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmgJKHJldmlzaW9uIDE1NjI1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMiArNjAsNiBAQCBwdWJsaWM6CiAKICAgICBIVE1MRnJhbWVTZXRFbGVtZW50JiBm
cmFtZVNldEVsZW1lbnQoKSBjb25zdDsKIAotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4uZmlyc3RDaGlsZCgpOyB9Ci0gICAgUmVuZGVyT2Jq
ZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuLmxhc3RDaGlsZCgpOyB9
Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotICAgIHZpcnR1YWwgUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIE9WRVJSSURFIHsgcmV0dXJuICZtX2NoaWxkcmVu
OyB9Ci0KICAgICBGcmFtZUVkZ2VJbmZvIGVkZ2VJbmZvKCkgY29uc3Q7CiAKICAgICBib29sIHVz
ZXJSZXNpemUoTW91c2VFdmVudCopOwpAQCAtMTAyLDYgKzk2LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSop
IGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgQ3Vyc29yRGlyZWN0aXZlIGdldEN1cnNvcihj
b25zdCBMYXlvdXRQb2ludCYsIEN1cnNvciYpIGNvbnN0IE9WRVJSSURFOwogCkBAIC0xMjQsOCAr
MTE5LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhaW50Um93Qm9yZGVyKGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIHBhaW50Q29sdW1uQm9yZGVyKGNvbnN0IFBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBt
X2NoaWxkcmVuOwotCiAgICAgR3JpZEF4aXMgbV9yb3dzOwogICAgIEdyaWRBeGlzIG1fY29sczsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlz
aW9uIDE1NjI1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjp3aWxs
QmVEZXN0cm95ZWQoKQogCiAgICAgLy8gTWFrZSBzdXJlIHRvIGRlc3Ryb3kgYW5vbnltb3VzIGNo
aWxkcmVuIGZpcnN0IHdoaWxlIHRoZXkgYXJlIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgcmVzdCBv
ZiB0aGUgdHJlZSwgc28gdGhhdCB0aGV5IHdpbGwKICAgICAvLyBwcm9wZXJseSBkaXJ0eSBsaW5l
IGJveGVzIHRoYXQgdGhleSBhcmUgcmVtb3ZlZCBmcm9tLiAgRWZmZWN0cyB0aGF0IGRvIDpiZWZv
cmUvOmFmdGVyIG9ubHkgb24gaG92ZXIgY291bGQgY3Jhc2ggb3RoZXJ3aXNlLgotICAgIGNoaWxk
cmVuKCktPmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7CisgICAgZGVzdHJveUxlZnRvdmVyQ2hp
bGRyZW4oKTsKIAogICAgIC8vIERlc3Ryb3kgb3VyIGNvbnRpbnVhdGlvbiBiZWZvcmUgYW55dGhp
bmcgb3RoZXIgdGhhbiBhbm9ueW1vdXMgY2hpbGRyZW4uCiAgICAgLy8gVGhlIHJlYXNvbiB3ZSBk
b24ndCBkZXN0cm95IGl0IGJlZm9yZSBhbm9ueW1vdXMgY2hpbGRyZW4gaXMgdGhhdCB0aGV5IG1h
eQpAQCAtMzY2LDcgKzM2Niw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVu
ZGVyQmwKICAgICB3aGlsZSAobykgewogICAgICAgICBSZW5kZXJPYmplY3QqIHRtcCA9IG87CiAg
ICAgICAgIG8gPSB0bXAtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIGNsb25lSW5saW5lLT5hZGRD
aGlsZElnbm9yaW5nQ29udGludWF0aW9uKGNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZSh0aGlz
LCB0bXApLCAwKTsKKyAgICAgICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbCh0bXAsIE5vdGlmeUNoaWxk
cmVuKTsKKyAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24o
dG1wLCAwKTsKICAgICAgICAgdG1wLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKICAgICB9CiAKQEAgLTQwNyw3ICs0MDgsOCBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJ
bmxpbmVzKFJlbmRlckJsCiAgICAgICAgICAgICB3aGlsZSAobykgewogICAgICAgICAgICAgICAg
IFJlbmRlck9iamVjdCogdG1wID0gbzsKICAgICAgICAgICAgICAgICBvID0gdG1wLT5uZXh0U2li
bGluZygpOwotICAgICAgICAgICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9yaW5nQ29u
dGludWF0aW9uKGlubGluZUN1cnItPmNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZShjdXJyLCB0
bXApLCAwKTsKKyAgICAgICAgICAgICAgICBpbmxpbmVDdXJyLT5yZW1vdmVDaGlsZEludGVybmFs
KHRtcCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgICAgIGNsb25lSW5saW5lLT5hZGRD
aGlsZElnbm9yaW5nQ29udGludWF0aW9uKHRtcCwgMCk7CiAgICAgICAgICAgICAgICAgdG1wLT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtNDE5LDcgKzQyMSw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMo
UmVuZGVyQmwKICAgICB9CiAKICAgICAvLyBOb3cgd2UgYXJlIGF0IHRoZSBibG9jayBsZXZlbC4g
V2UgbmVlZCB0byBwdXQgdGhlIGNsb25lIGludG8gdGhlIHRvQmxvY2suCi0gICAgdG9CbG9jay0+
Y2hpbGRyZW4oKS0+YXBwZW5kQ2hpbGROb2RlKHRvQmxvY2ssIGNsb25lSW5saW5lKTsKKyAgICB0
b0Jsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKGNsb25lSW5saW5lLCBudWxscHRyLCBOb3RpZnlD
aGlsZHJlbik7CiAKICAgICAvLyBOb3cgdGFrZSBhbGwgdGhlIGNoaWxkcmVuIGFmdGVyIGN1cnJD
aGlsZCBhbmQgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZnJvbUJsb2NrCiAgICAgLy8gYW5kIHB1dCB0
aGVtIGluIHRoZSB0b0Jsb2NrLgpAQCAtNDI3LDcgKzQyOSw4IEBAIHZvaWQgUmVuZGVySW5saW5l
OjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICB3aGlsZSAobykgewogICAgICAgICBSZW5kZXJP
YmplY3QqIHRtcCA9IG87CiAgICAgICAgIG8gPSB0bXAtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAg
IHRvQmxvY2stPmNoaWxkcmVuKCktPmFwcGVuZENoaWxkTm9kZSh0b0Jsb2NrLCBmcm9tQmxvY2st
PmNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZShmcm9tQmxvY2ssIHRtcCkpOworICAgICAgICBm
cm9tQmxvY2stPnJlbW92ZUNoaWxkSW50ZXJuYWwodG1wLCBOb3RpZnlDaGlsZHJlbik7CisgICAg
ICAgIHRvQmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwodG1wLCBudWxscHRyLCBOb3RpZnlDaGls
ZHJlbik7CiAgICAgfQogfQogCkBAIC00NTcsOSArNDYwLDkgQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OnNwbGl0RmxvdyhSZW5kZXJPYmplYwogCiAgICAgUmVuZGVyT2JqZWN0KiBib3hGaXJzdCA9IG1h
ZGVOZXdCZWZvcmVCbG9jayA/IGJsb2NrLT5maXJzdENoaWxkKCkgOiBwcmUtPm5leHRTaWJsaW5n
KCk7CiAgICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykKLSAgICAgICAgYmxvY2stPmNoaWxkcmVu
KCktPmluc2VydENoaWxkTm9kZShibG9jaywgcHJlLCBib3hGaXJzdCk7Ci0gICAgYmxvY2stPmNo
aWxkcmVuKCktPmluc2VydENoaWxkTm9kZShibG9jaywgbmV3QmxvY2tCb3gsIGJveEZpcnN0KTsK
LSAgICBibG9jay0+Y2hpbGRyZW4oKS0+aW5zZXJ0Q2hpbGROb2RlKGJsb2NrLCBwb3N0LCBib3hG
aXJzdCk7CisgICAgICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKHByZSwgYm94Rmlyc3Qs
IE5vdGlmeUNoaWxkcmVuKTsKKyAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChuZXdCbG9j
a0JveCwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICBibG9jay0+aW5zZXJ0Q2hpbGRJ
bnRlcm5hbChwb3N0LCBib3hGaXJzdCwgTm90aWZ5Q2hpbGRyZW4pOwogICAgIGJsb2NrLT5zZXRD
aGlsZHJlbklubGluZShmYWxzZSk7CiAgICAgCiAgICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykg
ewpAQCAtNDY3LDcgKzQ3MCw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVy
T2JqZWMKICAgICAgICAgd2hpbGUgKG8pIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbm8g
PSBvOwogICAgICAgICAgICAgbyA9IG5vLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgcHJl
LT5jaGlsZHJlbigpLT5hcHBlbmRDaGlsZE5vZGUocHJlLCBibG9jay0+Y2hpbGRyZW4oKS0+cmVt
b3ZlQ2hpbGROb2RlKGJsb2NrLCBubykpOworICAgICAgICAgICAgYmxvY2stPnJlbW92ZUNoaWxk
SW50ZXJuYWwobm8sIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIHByZS0+aW5zZXJ0Q2hp
bGRJbnRlcm5hbChubywgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICAgICAgbm8t
PnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMTI2MSw3ICsxMjY1LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmNoaWxkQmVjYW1lTm9uSW5s
aW5lKAogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250aW51YXRpb24gPSBjb250aW51
YXRpb24oKTsKICAgICBzZXRDb250aW51YXRpb24obmV3Qm94KTsKICAgICBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgY2hpbGRyZW4oKS0+cmVt
b3ZlQ2hpbGROb2RlKHRoaXMsIGNoaWxkKTsKKyAgICByZW1vdmVDaGlsZEludGVybmFsKGNoaWxk
LCBOb3RpZnlDaGlsZHJlbik7CiAgICAgc3BsaXRGbG93KGJlZm9yZUNoaWxkLCBuZXdCb3gsIGNo
aWxkLCBvbGRDb250aW51YXRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDYgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIFJlbmRlcklubGluZSogY3JlYXRlQW5vbnltb3VzKERvY3VtZW50
Jik7CiAKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2No
aWxkcmVuLmZpcnN0Q2hpbGQoKTsgfQotICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29u
c3QgeyByZXR1cm4gbV9jaGlsZHJlbi5sYXN0Q2hpbGQoKTsgfQotCiAgICAgdmlydHVhbCB2b2lk
IGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQgPSAwKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXJnaW5MZWZ0KCkg
Y29uc3QgT1ZFUlJJREUgRklOQUw7CkBAIC05OSwxMiArOTYsMTAgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSkgT1ZFUlJJREU7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBjb25z
dCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUgRklOQUwg
eyByZXR1cm4gJm1fY2hpbGRyZW47IH0KLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlz
dCogY2hpbGRyZW4oKSBPVkVSUklERSBGSU5BTCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotCiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREU7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJJbmxpbmUoKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IE9W
RVJSSURFIEZJTkFMIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIExheW91dFJlY3QgY3VsbGVkSW5s
aW5lVmlzdWFsT3ZlcmZsb3dCb3VuZGluZ0JveCgpIGNvbnN0OwogICAgIElubGluZUJveCogY3Vs
bGVkSW5saW5lRmlyc3RMaW5lQm94KCkgY29uc3Q7CkBAIC0xNzgsNyArMTczLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgbmV4dExp
bmUsIGNvbnN0IENvbG9yKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGludWF0aW9u
QmVmb3JlKFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogCi0gICAgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0IG1fY2hpbGRyZW47CiAgICAgUmVuZGVyTGluZUJveExpc3QgbV9saW5lQm94ZXM7ICAg
Ly8gQWxsIG9mIHRoZSBsaW5lIGJveGVzIGNyZWF0ZWQgZm9yIHRoaXMgaW5saW5lIGZsb3cuICBG
b3IgZXhhbXBsZSwgPGk+SGVsbG88YnI+d29ybGQuPC9pPiB3aWxsIGhhdmUgdHdvIDxpPiBsaW5l
IGJveGVzLgogCiAgICAgYm9vbCBtX2Fsd2F5c0NyZWF0ZUxpbmVCb3hlcyA6IDE7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgdm9p
ZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cgogICAgIH0KIAogICAgIC8vIFJl
bmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkIGNhbGxzIGJhY2sgdG8gZGVzdHJveUxheWVyKCkg
Zm9yIGxheWVyIGRlc3RydWN0aW9uCi0gICAgUmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQo
KTsKKyAgICBSZW5kZXJFbGVtZW50Ojp3aWxsQmVEZXN0cm95ZWQoKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaW5lQnJlYWsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgJKHJldmlzaW9uIDE1NjI1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiAr
NTQsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgbm9kZSgpIGNvbnN0IFdURl9ERUxF
VEVEX0ZVTkNUSU9OOwogCisgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlv
biBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JikgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGlu
dCBjYXJldE1heE9mZnNldCgpIGNvbnN0IE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw2ICs1NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNMaXN0TWFy
a2VyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hp
bGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAkocmV2aXNpb24gMTU2MjUyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNyArNTgsNyBAQCB2b2lkIFJlbmRlck1lZGlhOjpsYXlvdXQoKQogCiAgICAgUmVuZGVy
SW1hZ2U6OmxheW91dCgpOwogCi0gICAgUmVuZGVyQm94KiBjb250cm9sc1JlbmRlcmVyID0gdG9S
ZW5kZXJCb3gobV9jaGlsZHJlbi5maXJzdENoaWxkKCkpOworICAgIFJlbmRlckJveCogY29udHJv
bHNSZW5kZXJlciA9IHRvUmVuZGVyQm94KGZpcnN0Q2hpbGQoKSk7CiAgICAgaWYgKCFjb250cm9s
c1JlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNZWRpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYS5oCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVkaWEuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIgKzQxLDYgQEAgcHVi
bGljOgogCiAgICAgSFRNTE1lZGlhRWxlbWVudCYgbWVkaWFFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdG9IVE1MTWVkaWFFbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAotICAgIFJl
bmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4uZmlyc3RD
aGlsZCgpOyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkcmVuLmxhc3RDaGlsZCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVj
dENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiAmbV9j
aGlsZHJlbjsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigp
IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0KIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKQEAgLTYxLDggKzU1LDYgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRm9yY2VkU3R5bGVSZWNh
bGNQcm9wYWdhdGlvbigpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogfTsKIAogaW5saW5lIFJlbmRl
ck1lZGlhKiB0b1JlbmRlck1lZGlhKFJlbmRlck9iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE1NjI1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYzLDkgKzE2NjMsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6aGFuZGxlRHluYW1pY0Zs
b2F0UG9zCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gQW4gYW5vbnltb3VzIGJsb2Nr
IG11c3QgYmUgbWFkZSB0byB3cmFwIHRoaXMgaW5saW5lLgogICAgICAgICAgICAgUmVuZGVyQmxv
Y2sqIGJsb2NrID0gdG9SZW5kZXJCbG9jayhwYXJlbnQoKSktPmNyZWF0ZUFub255bW91c0Jsb2Nr
KCk7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkbGlzdCA9IHBhcmVu
dCgpLT5jaGlsZHJlbigpOwotICAgICAgICAgICAgY2hpbGRsaXN0LT5pbnNlcnRDaGlsZE5vZGUo
cGFyZW50KCksIGJsb2NrLCB0aGlzKTsKLSAgICAgICAgICAgIGJsb2NrLT5jaGlsZHJlbigpLT5h
cHBlbmRDaGlsZE5vZGUoYmxvY2ssIGNoaWxkbGlzdC0+cmVtb3ZlQ2hpbGROb2RlKHBhcmVudCgp
LCB0aGlzKSk7CisgICAgICAgICAgICBwYXJlbnQoKS0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChibG9j
aywgdGhpcywgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgcGFy
ZW50KCktPnJlbW92ZUNoaWxkSW50ZXJuYWwodGhpcywgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hp
bGRyZW4pOworICAgICAgICAgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwodGhpcywgMCwg
UmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MjQxMCwxMSArMjQxMCw2IEBAIGlubGluZSB2b2lkIFJlbmRlck9iamVjdDo6Y2xlYXJMYXlvdXRS
b28KIAogdm9pZCBSZW5kZXJPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpCiB7Ci0gICAgLy8gRGVz
dHJveSBhbnkgbGVmdG92ZXIgYW5vbnltb3VzIGNoaWxkcmVuLgotICAgIFJlbmRlck9iamVjdENo
aWxkTGlzdCogY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwotICAgIGlmIChjaGlsZHJlbikK
LSAgICAgICAgY2hpbGRyZW4tPmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7Ci0KICAgICAvLyBJ
ZiB0aGlzIHJlbmRlcmVyIGlzIGJlaW5nIGF1dG9zY3JvbGxlZCwgc3RvcCB0aGUgYXV0b3Njcm9s
bCB0aW1lcgogICAgIAogICAgIC8vIEZJWE1FOiBSZW5kZXJPYmplY3Q6OmRlc3Ryb3kgc2hvdWxk
IG5vdCBnZXQgY2FsbGVkIHdpdGggYSByZW5kZXJlciB3aG9zZSBkb2N1bWVudApAQCAtMjUyMCwx
MSArMjUxNSw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tUmVuZGVyRmxvd1QKIAog
dm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKFJl
bmRlckZsb3dUaHJlYWQqIHJlbmRlckZsb3dUaHJlYWQpCiB7Ci0gICAgaWYgKGNvbnN0IFJlbmRl
ck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpKSB7Ci0gICAgICAg
IGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGNoaWxkcmVuLT5maXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgY2hpbGQtPnJlbW92
ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJzaXZlKHJlbmRlckZsb3dUaHJlYWQpOwotICAgIH0K
LSAgICAKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBjaGlsZC0+cmVtb3ZlRnJv
bVJlbmRlckZsb3dUaHJlYWRSZWN1cnNpdmUocmVuZGVyRmxvd1RocmVhZCk7CisKICAgICBSZW5k
ZXJGbG93VGhyZWFkKiBsb2NhbEZsb3dUaHJlYWQgPSByZW5kZXJGbG93VGhyZWFkOwogICAgIGlm
IChmbG93VGhyZWFkU3RhdGUoKSA9PSBJbnNpZGVJbkZsb3dUaHJlYWQpCiAgICAgICAgIGxvY2Fs
Rmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsgLy8gV2UgaGF2ZSB0byBh
c2suIFdlIGNhbid0IGp1c3QgYXNzdW1lIHdlIGFyZSBpbiB0aGUgc2FtZSBmbG93IHRocmVhZC4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE1
NjI1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1
ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJTY3JvbGxCZWhhdmlvci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgpAQCAt
MTQ4LDcgKzE0Nyw2IEBAIGNsYXNzIFJlbmRlck9iamVjdCA6IHB1YmxpYyBDYWNoZWRJbWFnZUMK
ICAgICBmcmllbmQgY2xhc3MgUmVuZGVyQmxvY2s7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJs
b2NrRmxvdzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXI7Ci0gICAgZnJpZW5kIGNsYXNz
IFJlbmRlck9iamVjdENoaWxkTGlzdDsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0
cyBzaG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0
aGVuIGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBj
b25zdHJ1Y3Rvci4KQEAgLTE2NiwyNSArMTY0LDkgQEAgcHVibGljOgogICAgIFJlbmRlck9iamVj
dCogbmV4dFNpYmxpbmcoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KIAogICAgIC8vIEZJWE1F
OiBUaGVzZSBzaG91bGQgYmUgcmVuYW1lZCBzbG93Rmlyc3RDaGlsZCwgc2xvd0xhc3RDaGlsZCwg
ZXRjLgotICAgIC8vIHRvIGRpc2NvdXJhZ2UgdGhlaXIgdXNlLiBUaGUgdmlydHVhbCBjYWxsIHRv
IGNoaWxkcmVuIGluc2lkZSB0aGVzZQotICAgIC8vIGNhbiBiZSBzbG93IGZvciBob3QgY29kZSBw
YXRocy4KLSAgICAvLyBEZXJpdmVkIGNsYXNzZXMgbGlrZSBSZW5kZXJCbG9jayBvdmVycmlkZSB0
aGVzZSBub24tdmlydHVhbAotICAgIC8vIGZ1bmN0aW9ucyB0byBtYWtlIHRoZW0gZmFzdCB3aGVu
IHdlIGFscmVhZHkgaGF2ZSBhIG1vcmUgc3BlY2lmaWMgcG9pbnRlciB0eXBlLgotICAgIFJlbmRl
ck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoY29uc3QgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCkpCi0gICAgICAg
ICAgICByZXR1cm4gY2hpbGRyZW4tPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmIChjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRy
ZW4oKSkKLSAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbi0+bGFzdENoaWxkKCk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBj
aGlsZHJlbigpIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENo
aWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgLy8gdG8gZGlzY291
cmFnZSB0aGVpciB1c2UuCisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGxhc3RD
aGlsZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIFJlbmRlck9iamVjdCogbmV4
dEluUHJlT3JkZXIoKSBjb25zdDsKICAgICBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyKGNv
bnN0IFJlbmRlck9iamVjdCogc3RheVdpdGhpbikgY29uc3Q7CkBAIC0yNzAsNyArMjUyLDcgQEAg
cHVibGljOgogICAgIAogICAgIC8vIFJlbmRlck9iamVjdCB0cmVlIG1hbmlwdWxhdGlvbgogICAg
IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIHZpcnR1YWwg
Ym9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CisgICAg
dmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNy
ZWF0ZXNBbm9ueW1vdXNXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTI4MSw2ICsyNjMsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRQcmV2aW91c1NpYmxpbmcoUmVuZGVyT2JqZWN0KiBw
cmV2aW91cykgeyBtX3ByZXZpb3VzID0gcHJldmlvdXM7IH0KICAgICB2b2lkIHNldE5leHRTaWJs
aW5nKFJlbmRlck9iamVjdCogbmV4dCkgeyBtX25leHQgPSBuZXh0OyB9CiAgICAgdm9pZCBzZXRQ
YXJlbnQoUmVuZGVyRWxlbWVudCopOworCisgICAgZnJpZW5kIFJlbmRlckVsZW1lbnQ7CiAgICAg
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBwcml2YXRlOgogI2lm
bmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RD
aGlsZExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3RDaGlsZExpc3QuY3BwCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSwxNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3RDaGlsZExpc3QuaCIKLQotI2luY2x1ZGUg
IkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJSZW5kZXJDb3VudGVyLmgiCi0jaW5jbHVkZSAi
UmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjpkZXN0cm95TGVmdG92ZXJDaGls
ZHJlbigpCi17Ci0gICAgd2hpbGUgKGZpcnN0Q2hpbGQoKSkgewotICAgICAgICBpZiAoZmlyc3RD
aGlsZCgpLT5pc0xpc3RNYXJrZXIoKSB8fCAoZmlyc3RDaGlsZCgpLT5zdHlsZSgpLT5zdHlsZVR5
cGUoKSA9PSBGSVJTVF9MRVRURVIgJiYgIWZpcnN0Q2hpbGQoKS0+aXNUZXh0KCkpKQotICAgICAg
ICAgICAgZmlyc3RDaGlsZCgpLT5yZW1vdmVGcm9tUGFyZW50KCk7IC8vIExpc3QgbWFya2VycyBh
cmUgb3duZWQgYnkgdGhlaXIgZW5jbG9zaW5nIGxpc3QgYW5kIHNvIGRvbid0IGdldCBkZXN0cm95
ZWQgYnkgdGhpcyBjb250YWluZXIuIFNpbWlsYXJseSwgZmlyc3QgbGV0dGVycyBhcmUgZGVzdHJv
eWVkIGJ5IHRoZWlyIHJlbWFpbmluZyB0ZXh0IGZyYWdtZW50LgotICAgICAgICBlbHNlIGlmIChm
aXJzdENoaWxkKCktPmlzUnVuSW4oKSAmJiBmaXJzdENoaWxkKCktPm5vZGUoKSkgewotICAgICAg
ICAgICAgZmlyc3RDaGlsZCgpLT5ub2RlKCktPnNldFJlbmRlcmVyKDApOwotICAgICAgICAgICAg
Zmlyc3RDaGlsZCgpLT5ub2RlKCktPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAgICAgICAg
IGZpcnN0Q2hpbGQoKS0+ZGVzdHJveSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gRGVzdHJveSBhbnkgYW5vbnltb3VzIGNoaWxkcmVuIHJlbWFpbmluZyBpbiB0aGUgcmVuZGVy
IHRyZWUsIGFzIHdlbGwgYXMgaW1wbGljaXQgKHNoYWRvdykgRE9NIGVsZW1lbnRzIGxpa2UgdGhv
c2UgdXNlZCBpbiB0aGUgZW5naW5lLWJhc2VkIHRleHQgZmllbGRzLgotICAgICAgICAgICAgaWYg
KGZpcnN0Q2hpbGQoKS0+bm9kZSgpKQotICAgICAgICAgICAgICAgIGZpcnN0Q2hpbGQoKS0+bm9k
ZSgpLT5zZXRSZW5kZXJlcigwKTsKLSAgICAgICAgICAgIGZpcnN0Q2hpbGQoKS0+ZGVzdHJveSgp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1SZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdENoaWxk
TGlzdDo6cmVtb3ZlQ2hpbGROb2RlKFJlbmRlckVsZW1lbnQqIG93bmVyLCBSZW5kZXJPYmplY3Qq
IG9sZENoaWxkLCBib29sIG5vdGlmeVJlbmRlcmVyKQotewotICAgIEFTU0VSVChvbGRDaGlsZC0+
cGFyZW50KCkgPT0gb3duZXIpOwotCi0gICAgaWYgKG9sZENoaWxkLT5pc0Zsb2F0aW5nT3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgIHRvUmVuZGVyQm94KG9sZENoaWxkKS0+cmVtb3Zl
RmxvYXRpbmdPclBvc2l0aW9uZWRDaGlsZEZyb21CbG9ja0xpc3RzKCk7Ci0KLSAgICAvLyBTbyB0
aGF0IHdlJ2xsIGdldCB0aGUgYXBwcm9wcmlhdGUgZGlydHkgYml0IHNldCAoZWl0aGVyIHRoYXQg
YSBub3JtYWwgZmxvdyBjaGlsZCBnb3QgeWFua2VkIG9yCi0gICAgLy8gdGhhdCBhIHBvc2l0aW9u
ZWQgY2hpbGQgZ290IHlhbmtlZCkuIFdlIGFsc28gcmVwYWludCwgc28gdGhhdCB0aGUgYXJlYSBl
eHBvc2VkIHdoZW4gdGhlIGNoaWxkCi0gICAgLy8gZGlzYXBwZWFycyBnZXRzIHJlcGFpbnRlZCBw
cm9wZXJseS4KLSAgICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgbm90
aWZ5UmVuZGVyZXIgJiYgb2xkQ2hpbGQtPmV2ZXJIYWRMYXlvdXQoKSkgewotICAgICAgICBvbGRD
aGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgIC8vIFdl
IG9ubHkgcmVwYWludCB8b2xkQ2hpbGR8IGlmIHdlIGhhdmUgYSBSZW5kZXJMYXllciBhcyBpdHMg
dmlzdWFsIG92ZXJmbG93IG1heSBub3QgYmUgdHJhY2tlZCBieSBpdHMgcGFyZW50LgotICAgICAg
ICBpZiAob2xkQ2hpbGQtPmlzQm9keSgpKQotICAgICAgICAgICAgb3duZXItPnZpZXcoKS5yZXBh
aW50Um9vdENvbnRlbnRzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9sZENoaWxkLT5y
ZXBhaW50KCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGxpbmUgYm94IHdyYXBwZXIs
IGRlbGV0ZSBpdC4KLSAgICBpZiAob2xkQ2hpbGQtPmlzQm94KCkpCi0gICAgICAgIHRvUmVuZGVy
Qm94KG9sZENoaWxkKS0+ZGVsZXRlTGluZUJveFdyYXBwZXIoKTsKLSAgICBlbHNlIGlmIChvbGRD
aGlsZC0+aXNMaW5lQnJlYWsoKSkKLSAgICAgICAgdG9SZW5kZXJMaW5lQnJlYWsob2xkQ2hpbGQp
LT5kZWxldGVJbmxpbmVCb3hXcmFwcGVyKCk7Ci0KLSAgICAvLyBJZiBvbGRDaGlsZCBpcyB0aGUg
c3RhcnQgb3IgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIHRoZW4gY2xlYXIgdGhlIHNlbGVjdGlvbiB0
bwotICAgIC8vIGF2b2lkIHByb2JsZW1zIG9mIGludmFsaWQgcG9pbnRlcnMuCi0gICAgLy8gRklY
TUU6IFRoZSBGcmFtZVNlbGVjdGlvbiBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yIHRoaXMgd2hl
biBpdAotICAgIC8vIGlzIG5vdGlmaWVkIG9mIERPTSBtdXRhdGlvbnMuCi0gICAgaWYgKCFvd25l
ci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpICYmIG9sZENoaWxkLT5pc1NlbGVjdGlvbkJvcmRl
cigpKQotICAgICAgICBvd25lci0+dmlldygpLmNsZWFyU2VsZWN0aW9uKCk7Ci0KLSAgICBpZiAo
IW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgbm90aWZ5UmVuZGVyZXIpCi0gICAg
ICAgIG9sZENoaWxkLT53aWxsQmVSZW1vdmVkRnJvbVRyZWUoKTsKLQotICAgIC8vIFdBUk5JTkc6
IFRoZXJlIHNob3VsZCBiZSBubyBjb2RlIHJ1bm5pbmcgYmV0d2VlbiB3aWxsQmVSZW1vdmVkRnJv
bVRyZWUgYW5kIHRoZSBhY3R1YWwgcmVtb3ZhbCBiZWxvdy4KLSAgICAvLyBUaGlzIGlzIG5lZWRl
ZCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlcmUgd2lsbEJlUmVtb3ZlZEZyb21UcmVlIHdv
dWxkIGRpcnR5IHRoZSB0cmVlJ3Mgc3RydWN0dXJlCi0gICAgLy8gYW5kIHRoZSBjb2RlIHJ1bm5p
bmcgaGVyZSB3b3VsZCBmb3JjZSBhbiB1bnRpbWVseSByZWJ1aWxkaW5nLCBsZWF2aW5nIHxvbGRD
aGlsZHwgZGFuZ2xpbmcuCi0KLSAgICBpZiAob2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygpKQot
ICAgICAgICBvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCktPnNldE5leHRTaWJsaW5nKG9sZENo
aWxkLT5uZXh0U2libGluZygpKTsKLSAgICBpZiAob2xkQ2hpbGQtPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIG9sZENoaWxkLT5uZXh0U2libGluZygpLT5zZXRQcmV2aW91c1NpYmxpbmcob2xkQ2hp
bGQtPnByZXZpb3VzU2libGluZygpKTsKLQotICAgIGlmIChmaXJzdENoaWxkKCkgPT0gb2xkQ2hp
bGQpCi0gICAgICAgIHNldEZpcnN0Q2hpbGQob2xkQ2hpbGQtPm5leHRTaWJsaW5nKCkpOwotICAg
IGlmIChsYXN0Q2hpbGQoKSA9PSBvbGRDaGlsZCkKLSAgICAgICAgc2V0TGFzdENoaWxkKG9sZENo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7Ci0KLSAgICBvbGRDaGlsZC0+c2V0UHJldmlvdXNTaWJs
aW5nKDApOwotICAgIG9sZENoaWxkLT5zZXROZXh0U2libGluZygwKTsKLSAgICBvbGRDaGlsZC0+
c2V0UGFyZW50KDApOwotCi0gICAgLy8gcmVuZGVyZXJSZW1vdmVkRnJvbVRyZWUgd2Fsa3MgdGhl
IHdob2xlIHN1YnRyZWUuIFdlIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlCi0gICAgLy8gYnkgc2tp
cHBpbmcgdGhpcyBzdGVwIHdoZW4gZGVzdHJveWluZyB0aGUgZW50aXJlIHRyZWUuCi0gICAgaWYg
KCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAgICBSZW5kZXJDb3VudGVy
OjpyZW5kZXJlclJlbW92ZWRGcm9tVHJlZShvbGRDaGlsZCk7Ci0KLSAgICBpZiAoQVhPYmplY3RD
YWNoZSogY2FjaGUgPSBvd25lci0+ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkK
LSAgICAgICAgY2FjaGUtPmNoaWxkcmVuQ2hhbmdlZChvd25lcik7Ci0KLSAgICByZXR1cm4gb2xk
Q2hpbGQ7Ci19Ci0KLXZvaWQgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0OjppbnNlcnRDaGlsZE5vZGUo
UmVuZGVyRWxlbWVudCogb3duZXIsIFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQsIGJvb2wgbm90aWZ5UmVuZGVyZXIpCi17Ci0gICAgQVNTRVJUKCFuZXdD
aGlsZC0+cGFyZW50KCkpOwotICAgIEFTU0VSVCghb3duZXItPmlzUmVuZGVyQmxvY2tGbG93KCkg
fHwgKCFuZXdDaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSAmJiAhbmV3Q2hpbGQtPmlzVGFibGVSb3co
KSAmJiAhbmV3Q2hpbGQtPmlzVGFibGVDZWxsKCkpKTsKLQotICAgIHdoaWxlIChiZWZvcmVDaGls
ZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IG93
bmVyKQotICAgICAgICBiZWZvcmVDaGlsZCA9IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKLQotICAg
IC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMgcHJldmVudCByZW5k
ZXIgdHJlZSBjb3JydXB0aW9uCi0gICAgLy8gd2hlcmUgY2hpbGQtPnBhcmVudCgpIGVuZHMgdXAg
YmVpbmcgb3duZXIgYnV0IGNoaWxkLT5uZXh0U2libGluZygpLT5wYXJlbnQoKQotICAgIC8vIGlz
IG5vdCBvd25lci4KLSAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgp
ICE9IG93bmVyKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbmV3Q2hpbGQtPnNldFBhcmVudChvd25lcik7Ci0KLSAgICBpZiAo
Zmlyc3RDaGlsZCgpID09IGJlZm9yZUNoaWxkKQotICAgICAgICBzZXRGaXJzdENoaWxkKG5ld0No
aWxkKTsKLQotICAgIGlmIChiZWZvcmVDaGlsZCkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHBy
ZXZpb3VzU2libGluZyA9IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAg
aWYgKHByZXZpb3VzU2libGluZykKLSAgICAgICAgICAgIHByZXZpb3VzU2libGluZy0+c2V0TmV4
dFNpYmxpbmcobmV3Q2hpbGQpOwotICAgICAgICBuZXdDaGlsZC0+c2V0UHJldmlvdXNTaWJsaW5n
KHByZXZpb3VzU2libGluZyk7Ci0gICAgICAgIG5ld0NoaWxkLT5zZXROZXh0U2libGluZyhiZWZv
cmVDaGlsZCk7Ci0gICAgICAgIGJlZm9yZUNoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcobmV3Q2hp
bGQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChsYXN0Q2hpbGQoKSkKLSAgICAgICAgICAg
IGxhc3RDaGlsZCgpLT5zZXROZXh0U2libGluZyhuZXdDaGlsZCk7Ci0gICAgICAgIG5ld0NoaWxk
LT5zZXRQcmV2aW91c1NpYmxpbmcobGFzdENoaWxkKCkpOwotICAgICAgICBzZXRMYXN0Q2hpbGQo
bmV3Q2hpbGQpOwotICAgIH0KLQotICAgIGlmICghb3duZXItPmRvY3VtZW50QmVpbmdEZXN0cm95
ZWQoKSAmJiBub3RpZnlSZW5kZXJlcikKLSAgICAgICAgbmV3Q2hpbGQtPmluc2VydGVkSW50b1Ry
ZWUoKTsKLQotICAgIGlmICghb3duZXItPmRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgewotICAg
ICAgICBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN1YnRyZWVBdHRhY2hlZChuZXdDaGlsZCk7Ci0g
ICAgfQotCi0gICAgbmV3Q2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OwotICAgIG93bmVyLT5zZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkodHJ1ZSk7Ci0gICAg
aWYgKCFvd25lci0+bm9ybWFsQ2hpbGROZWVkc0xheW91dCgpKQotICAgICAgICBvd25lci0+c2V0
Q2hpbGROZWVkc0xheW91dCh0cnVlKTsgLy8gV2UgbWF5IHN1cHBseSB0aGUgc3RhdGljIHBvc2l0
aW9uIGZvciBhbiBhYnNvbHV0ZSBwb3NpdGlvbmVkIGNoaWxkLgotCi0gICAgaWYgKEFYT2JqZWN0
Q2FjaGUqIGNhY2hlID0gb3duZXItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKQotICAgICAg
ICBjYWNoZS0+Y2hpbGRyZW5DaGFuZ2VkKG93bmVyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RD
aGlsZExpc3QuaAkocmV2aXNpb24gMTU2MjUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdENoaWxkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJPYmplY3RDaGlsZExpc3RfaAotI2RlZmluZSBSZW5k
ZXJPYmplY3RDaGlsZExpc3RfaAotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyT2JqZWN0
OwotCi1jbGFzcyBSZW5kZXJPYmplY3RDaGlsZExpc3QgewotcHVibGljOgotICAgIFJlbmRlck9i
amVjdENoaWxkTGlzdCgpCi0gICAgICAgIDogbV9maXJzdENoaWxkKDApCi0gICAgICAgICwgbV9s
YXN0Q2hpbGQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxk
KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0
Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQotCi0gICAgLy8gRklYTUU6IFRl
bXBvcmFyeSB3aGlsZSBSZW5kZXJCb3ggc3RpbGwgZXhpc3RzLiBFdmVudHVhbGx5IHRoaXMgd2ls
bCBqdXN0IGhhcHBlbiBkdXJpbmcgaW5zZXJ0L2FwcGVuZC9yZW1vdmUgbWV0aG9kcyBvbiB0aGUg
Y2hpbGQgbGlzdCwgYW5kIG5vYm9keQotICAgIC8vIHdpbGwgbmVlZCB0byBtYW5pcHVsYXRlIGZp
cnN0Q2hpbGQgb3IgbGFzdENoaWxkIGRpcmVjdGx5LgotICAgIHZvaWQgc2V0Rmlyc3RDaGlsZChS
ZW5kZXJPYmplY3QqIGNoaWxkKSB7IG1fZmlyc3RDaGlsZCA9IGNoaWxkOyB9Ci0gICAgdm9pZCBz
ZXRMYXN0Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkgeyBtX2xhc3RDaGlsZCA9IGNoaWxkOyB9
Ci0KLSAgICB2b2lkIGRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7Ci0KLSAgICBSZW5kZXJPYmpl
Y3QqIHJlbW92ZUNoaWxkTm9kZShSZW5kZXJFbGVtZW50KiBvd25lciwgUmVuZGVyT2JqZWN0Kiwg
Ym9vbCBub3RpZnlSZW5kZXJlciA9IHRydWUpOwotICAgIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJl
bmRlckVsZW1lbnQqIG93bmVyLCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkLCBib29sIG5vdGlmeVJlbmRlcmVyID0gdHJ1ZSk7Ci0gICAgdm9pZCBhcHBl
bmRDaGlsZE5vZGUoUmVuZGVyRWxlbWVudCogb3duZXIsIFJlbmRlck9iamVjdCogbmV3Q2hpbGQs
IGJvb2wgbm90aWZ5UmVuZGVyZXIgPSB0cnVlKQotICAgIHsKLSAgICAgICAgaW5zZXJ0Q2hpbGRO
b2RlKG93bmVyLCBuZXdDaGlsZCwgMCwgbm90aWZ5UmVuZGVyZXIpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBSZW5kZXJPYmplY3QqIG1fZmlyc3RDaGlsZDsKLSAgICBSZW5kZXJPYmplY3QqIG1f
bGFzdENoaWxkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5oCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyQm94KiBlbWJlZGRlZENvbnRlbnRCb3goKSBjb25zdCB7
IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gIlJlbmRlclJlcGxhY2VkIjsgfQogCi0gICAgdmlydHVhbCBib29s
IGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKSBPVkVSUklE
RSBGSU5BTDsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZXBsYWNlZChQYWludEluZm8mLCBjb25z
dCBMYXlvdXRQb2ludCYpIHsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxpY2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGljYS5oCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGljYS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw5IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgUmVuZGVyUmVwbGljYSgpOwogCi0gICAgdmlydHVhbCBib29sIGlzUmVw
bGljYSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZXBsaWNhKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hp
bGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIE9WRVJSSURFOwogCiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAJKHJldmlzaW9u
IDE1NjI1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBSZW5kZXJSdWJ5QmFzZTo6bW92
ZUlubGluZUNoaWxkcmVuKAogICAgICAgICAgICAgdG9CbG9jayA9IHRvUmVuZGVyQmxvY2sobGFz
dENoaWxkKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB0b0Jsb2NrID0gdG9CYXNlLT5j
cmVhdGVBbm9ueW1vdXNCbG9jaygpOwotICAgICAgICAgICAgdG9CYXNlLT5jaGlsZHJlbigpLT5h
cHBlbmRDaGlsZE5vZGUodG9CYXNlLCB0b0Jsb2NrKTsKKyAgICAgICAgICAgIHRvQmFzZS0+aW5z
ZXJ0Q2hpbGRJbnRlcm5hbCh0b0Jsb2NrLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgLy8gTW92ZSBvdXIgaW5saW5lIGNoaWxkcmVuIGludG8gdGhlIHRh
cmdldCBibG9jayB3ZSBkZXRlcm1pbmVkIGFib3ZlLgpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQg
UmVuZGVyUnVieUJhc2U6Om1vdmVCbG9ja0NoaWxkcmVuKFIKICAgICAgICAgICAgICYmIGxhc3RD
aGlsZFRoZXJlICYmIGxhc3RDaGlsZFRoZXJlLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgbGFzdENo
aWxkVGhlcmUtPmNoaWxkcmVuSW5saW5lKCkpIHsgICAgICAgICAgICAKICAgICAgICAgUmVuZGVy
QmxvY2sqIGFub25CbG9ja0hlcmUgPSB0b1JlbmRlckJsb2NrKGZpcnN0Q2hpbGRIZXJlKTsKICAg
ICAgICAgUmVuZGVyQmxvY2sqIGFub25CbG9ja1RoZXJlID0gdG9SZW5kZXJCbG9jayhsYXN0Q2hp
bGRUaGVyZSk7Ci0gICAgICAgIGFub25CbG9ja0hlcmUtPm1vdmVBbGxDaGlsZHJlblRvKGFub25C
bG9ja1RoZXJlLCBhbm9uQmxvY2tUaGVyZS0+Y2hpbGRyZW4oKSk7CisgICAgICAgIGFub25CbG9j
a0hlcmUtPm1vdmVBbGxDaGlsZHJlblRvKGFub25CbG9ja1RoZXJlLCB0cnVlKTsKICAgICAgICAg
YW5vbkJsb2NrSGVyZS0+ZGVsZXRlTGluZUJveFRyZWUoKTsKICAgICAgICAgYW5vbkJsb2NrSGVy
ZS0+ZGVzdHJveSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5oCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDYgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IFJlbmRlclRhYmxlQ29sKEVsZW1lbnQmKTsKICAgICBFbGVtZW50
JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMo
KSk7IH0KIAotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hpbGRyZW4uZmlyc3RDaGlsZCgpOyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBj
b25zdCB7IHJldHVybiBtX2NoaWxkcmVuLmxhc3RDaGlsZCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGNv
bnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiAmbV9jaGlsZHJlbjsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBj
aGlsZHJlbigpIE9WRVJSSURFIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0KICAgICB2b2lkIGNs
ZWFyUHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5Qml0cygpOwogCiAgICAgdW5zaWduZWQgc3Bh
bigpIGNvbnN0IHsgcmV0dXJuIG1fc3BhbjsgfQpAQCAtOTcsNyArOTEsNiBAQCBwcml2YXRlOgog
CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3Q7CiAKLSAgICBSZW5kZXJPYmplY3RDaGls
ZExpc3QgbV9jaGlsZHJlbjsKICAgICB1bnNpZ25lZCBtX3NwYW47CiB9OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gMTU2MjUyKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDEyICszNiw2IEBAIGNsYXNzIFJlbmRlclRhYmxlUm93IEZJTkFMIDogcHVibGlj
IFJlbmQKIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZW5kZXJUYWJsZVJvdyhFbGVtZW50Kik7CiAK
LSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVu
LmZpcnN0Q2hpbGQoKTsgfQotICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZHJlbi5sYXN0Q2hpbGQoKTsgfQotCi0gICAgdmlydHVhbCBjb25zdCBSZW5k
ZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gJm1f
Y2hpbGRyZW47IH0KLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4o
KSBPVkVSUklERSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotCiAgICAgUmVuZGVyVGFibGVTZWN0
aW9uKiBzZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gdG9SZW5kZXJUYWJsZVNlY3Rpb24ocGFyZW50
KCkpOyB9CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gdG9SZW5kZXJU
YWJsZShwYXJlbnQoKS0+cGFyZW50KCkpOyB9CiAKQEAgLTk1LDYgKzg5LDcgQEAgcHJpdmF0ZToK
IAogICAgIHZpcnR1YWwgYm9vbCBpc1RhYmxlUm93KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
dHJ1ZTsgfQogCisgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21U
cmVlKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgT1ZFUlJJREU7CkBA
IC0xMDksNyArMTA0LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgT1ZFUlJJ
REU7CiAKLSAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKICAgICB1bnNpZ25l
ZCBtX3Jvd0luZGV4IDogMzE7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDEyICs2NSw2IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZW5kZXJUYWJsZVNlY3Rpb24oRWxl
bWVudCopOwogICAgIHZpcnR1YWwgflJlbmRlclRhYmxlU2VjdGlvbigpOwogCi0gICAgUmVuZGVy
T2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5maXJzdENoaWxk
KCk7IH0KLSAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hp
bGRyZW4ubGFzdENoaWxkKCk7IH0KLQotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9
Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgT1ZFUlJJREUg
eyByZXR1cm4gJm1fY2hpbGRyZW47IH0KLQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5k
ZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgT1ZFUlJJREU7
CiAKICAgICB2aXJ0dWFsIGludCBmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0IE9WRVJSSURF
OwpAQCAtMjA0LDYgKzE5OCw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBj
b25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gKGlzQW5vbnlt
b3VzKCkgfHwgaXNQc2V1ZG9FbGVtZW50KCkpID8gIlJlbmRlclRhYmxlU2VjdGlvbiAoYW5vbnlt
b3VzKSIgOiAiUmVuZGVyVGFibGVTZWN0aW9uIjsgfQogCisgICAgdmlydHVhbCBib29sIGNhbkhh
dmVDaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1
YWwgYm9vbCBpc1RhYmxlU2VjdGlvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKSBPVkVSUklERTsKQEAg
LTI0Miw4ICsyMzgsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRMb2dpY2FsUG9zaXRpb25G
b3JDZWxsKFJlbmRlclRhYmxlQ2VsbCosIHVuc2lnbmVkIGVmZmVjdGl2ZUNvbHVtbikgY29uc3Q7
CiAKLSAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKLQogICAgIFZlY3RvcjxS
b3dTdHJ1Y3Q+IG1fZ3JpZDsKICAgICBWZWN0b3I8aW50PiBtX3Jvd1BvczsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgs
NiArMTU4LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgSW5saW5lVGV4dEJveCogY3JlYXRl
VGV4dEJveCgpOyAvLyBTdWJjbGFzc2VkIGJ5IFNWRy4KIAogcHJpdmF0ZToKKyAgICB2aXJ0dWFs
IGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gZmFs
c2U7IH0KKwogICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVh
ZFdpZHRoLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEds
eXBoT3ZlcmZsb3cmKTsKIAogICAgIGJvb2wgY29tcHV0ZUNhblVzZVNpbXBsZUZvbnRDb2RlUGF0
aCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbElu
T25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5n
QWxsSW5PbmUuY3BwCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJNdWx0aUNvbHVtblNldC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmNwcCIKLSNp
bmNsdWRlICJSZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwIgogI2luY2x1ZGUgIlJlbmRlclByb2dy
ZXNzLmNwcCIKICNpbmNsdWRlICJSZW5kZXJRdW90ZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyUmVw
bGFjZWQuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJldmlzaW9uIDE1NjI1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRv
cjo6dXBkYXRlRnJvbUVsZQogICAgIFJlbmRlck9iamVjdCogc2F2ZWRSZW5kZXJlciA9IGVsZW1l
bnQoKS0+cmVuZGVyZXIoKTsKIAogICAgIC8vIERlc3Ryb3kgb3VyIGN1cnJlbnQgY2hpbGRyZW4K
LSAgICBjaGlsZHJlbigpLT5kZXN0cm95TGVmdG92ZXJDaGlsZHJlbigpOworICAgIGRlc3Ryb3lM
ZWZ0b3ZlckNoaWxkcmVuKCk7CiAKICAgICAvLyBTaW5jZSB3ZSBzaGFyZSBhIG5vZGUgd2l0aCBv
dXIgY2hpbGRyZW4sIGRlc3Ryb3lpbmcgb3VyIGNoaWxkcmVuIG1heSBzZXQgb3VyIG5vZGUncwog
ICAgIC8vIHJlbmRlcmVyIHRvIDAsIHNvIHdlIG5lZWQgdG8gcmVzdG9yZSBpdC4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAko
cmV2aXNpb24gMTU2MjUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTIgKzM1LDYgQEAgY2xhc3MgUmVu
ZGVyU1ZHQ29udGFpbmVyIDogcHVibGljIFJlbmRlcgogcHVibGljOgogICAgIHZpcnR1YWwgflJl
bmRlclNWR0NvbnRhaW5lcigpOwogCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29u
c3QgeyByZXR1cm4gbV9jaGlsZHJlbi5maXJzdENoaWxkKCk7IH0KLSAgICBSZW5kZXJPYmplY3Qq
IGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4ubGFzdENoaWxkKCk7IH0KLQot
ICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNvbnN0
IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0gICAgdmlydHVhbCBSZW5k
ZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gJm1f
Y2hpbGRyZW47IH0KLQogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBM
YXlvdXRQb2ludCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJp
ZXNVcGRhdGUoKSBPVkVSUklERSBGSU5BTCB7IG1fbmVlZHNCb3VuZGFyaWVzVXBkYXRlID0gdHJ1
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBuZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSBPVkVSUklERSBG
SU5BTCB7IHJldHVybiBtX25lZWRzQm91bmRhcmllc1VwZGF0ZTsgfQpAQCAtNTMsNiArNDcsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgT1ZF
UlJJREUgRklOQUwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICJSZW5kZXJTVkdDb250YWluZXIiOyB9
CiAKKyAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUgRklO
QUwgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIE9WRVJSSURF
OwogCiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBPVkVSUklERSBGSU5BTDsKQEAgLTc5LDcgKzc1LDYg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwogCiBwcml2
YXRlOgotICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAgIEZsb2F0UmVj
dCBtX29iamVjdEJvdW5kaW5nQm94OwogICAgIGJvb2wgbV9vYmplY3RCb3VuZGluZ0JveFZhbGlk
OwogICAgIEZsb2F0UmVjdCBtX3N0cm9rZUJvdW5kaW5nQm94OwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dyYWRpZW50U3RvcC5oCShyZXZp
c2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0dy
YWRpZW50U3RvcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiBwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBjYW5I
YXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgU1ZH
R3JhZGllbnRFbGVtZW50KiBncmFkaWVudEVsZW1lbnQoKSBjb25zdDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgJKHJldmlzaW9u
IDE1NjI1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR0ltYWdl
IjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0ltYWdlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xvY2FsVHJhbnNm
b3JtOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHTW9k
ZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNTYyNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVF1
YWRzCiB2b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKQogewogICAg
IFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnREZXN0cm95ZWQodGhpcyk7Ci0gICAgUmVuZGVyT2Jq
ZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKTsKKyAgICBSZW5kZXJFbGVtZW50Ojp3aWxsQmVEZXN0cm95
ZWQoKTsKIH0KIAogdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6c3R5bGVXaWxsQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaAkocmV2aXNpb24g
MTU2MjUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0Niw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBjb21wdXRlSW50cmluc2ljUmF0aW9JbmZvcm1hdGlvbihGbG9hdFNpemUmIGludHJpbnNp
Y1NpemUsIGRvdWJsZSYgaW50cmluc2ljUmF0aW8sIGJvb2wmIGlzUGVyY2VudGFnZUludHJpbnNp
Y1NpemUpIGNvbnN0IE9WRVJSSURFOwogCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5maXJzdENoaWxkKCk7IH0KLSAgICBSZW5kZXJPYmpl
Y3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4ubGFzdENoaWxkKCk7IH0K
LQotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJP
YmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgT1ZFUlJJREUgeyByZXR1cm4gJm1fY2hpbGRyZW47
IH0KLQogICAgIGJvb2wgaXNMYXlvdXRTaXplQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNM
YXlvdXRTaXplQ2hhbmdlZDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0JvdW5kYXJpZXNV
cGRhdGUoKSBPVkVSUklERSB7IG1fbmVlZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGUgPSB0
cnVlOyB9CiAgICAgdmlydHVhbCBib29sIG5lZWRzQm91bmRhcmllc1VwZGF0ZSgpIE9WRVJSSURF
IHsgcmV0dXJuIG1fbmVlZHNCb3VuZGFyaWVzT3JUcmFuc2Zvcm1VcGRhdGU7IH0KQEAgLTExNSw3
ICsxMDksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlQ2FjaGVkQm91bmRhcmllcygpOwog
ICAgIHZvaWQgYnVpbGRMb2NhbFRvQm9yZGVyQm94VHJhbnNmb3JtKCk7CiAKLSAgICBSZW5kZXJP
YmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKICAgICBJbnRTaXplIG1fY29udGFpbmVyU2l6ZTsK
ICAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsKICAgICBib29sIG1fb2JqZWN0Qm91
bmRpbmdCb3hWYWxpZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1NoYXBlLmgJKHJldmlzaW9uIDE1NjI1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0o
KSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTVkdTaGFwZSgpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJ
REUgRklOQUwgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRl
ck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHU2hhcGUiOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCkgT1ZFUlJJREUgRklOQUw7Cg==
</data>
<flag name="commit-queue"
          id="234513"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212315</attachid>
            <date>2013-09-22 18:31:19 -0700</date>
            <delta_ts>2013-09-22 23:35:26 -0700</delta_ts>
            <desc>another</desc>
            <filename>renderelement-children-4.patch</filename>
            <type>text/plain</type>
            <size>80435</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA5LTIyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjE3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3N0IFJlbmRlckVsZW1lbnQgc3ViY2xhc3NlcyBoYXZlIG1fY2hpbGRyZW4gbWVtYmVyICg+
OTAlIG9mIGluc3RhbmNlcyBvbiB0eXBpY2FsIHBhZ2UpLiBJdCBpcyBub3Qgd29ydGggb3B0aW1p
c2luZworICAgICAgICBmb3IgbWVtb3J5IGZvciB0aGUgZmV3IGNhc2VzIHRoYXQgZG9uJ3QgKFJl
bmRlckltYWdlLCBSZW5kZXJMaW5lQnJlYWsgbW9zdGx5KSBpbiBleHBlbnNlIG9mIHBlcmZvcm1h
bmNlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBjaGlsZCBoYW5kbGluZyB0
byBSZW5kZXJFbGVtZW50LiBUaGlzIGdldHMgcmlkIG9mIHZpcnR1YWwgY2hpbGRyZW4oKSBjYWxs
cyBhbmQgc2ltcGxpZmllcyB0aGUgY29kZS4KKwogMjAxMy0wOS0yMiAgR3l1eW91bmcgS2ltICA8
Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBDU1NfVkFMVUVf
VFlQRV9DQVNUUyBtYWNybyBpbiBvcmRlciB0byBjYXN0IENTU1ZhbHVlIHR5cGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjE3Miw3ICsyMTcyLDYgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKICAgICBy
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCi0gICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdENoaWxkTGlzdC5jcHAKICAgICBy
ZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNw
cAogICAgIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1MDQsOCArNDUwNCw2IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1u
U2V0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmggXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPdmVyZmxvdy5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTU2MjUzKQorKysg
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTE5NCw3ICsxMTk0
LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNw
cCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgXAogICAgIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwIFwKLSAgICByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRM
aXN0LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcCBcCiAgICAgcmVuZGVy
aW5nL1JlbmRlclF1b3RlLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgXApA
QCAtMjQ2MSw3ICsyNDYwLDYgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlck1l
bnVMaXN0LmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJNZXRlci5oIFwKICAgICByZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oIFwKLSAgICByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0LmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBcCiAgICAgcmVuZGVyaW5n
L1JlbmRlclByb2dyZXNzLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5oIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2
aXNpb24gMTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTAyNTIsMjAgKzEwMjUyLDYgQEAKICAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0LmNwcCI+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9t
QnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0
aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRG
cm9tQnVpbGQ+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
ZW5kZXJpbmdcUmVuZGVyUHJvZ3Jlc3MuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KQEAgLTIwMDA1LDcgKzE5OTkxLDYgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJNdWx0aUNvbHVtblNldC5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlck5hbWVkRmxvd1RocmVhZC5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlck9iamVjdC5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlck9iamVjdENoaWxk
TGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFJlbmRlclBy
b2dyZXNzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcUmVuZGVy
UXVvdGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xSZW5kZXJS
ZWdpb24uaCIgLz4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDc2OCw3
ICs0NzY4LDYgQEAKIAkJQkMyOTkzNUQxN0ExREQ1ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMjk5
MzVDMTdBMURENTgwMEJDRTg4MCAvKiBDb2xvcklucHV0VHlwZS5jcHAgKi87IH07CiAJCUJDMkNC
RjRFMTQwRjFBQkQwMDM4NzlCRSAvKiBKU1dlYkdMQ29udGV4dEV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY0QjE0MEYxQTY1MDAzODc5
QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5oICovOyB9OwogCQlCQzJDQkY3QjE0MEYxRDU4MDAz
ODc5QkUgLyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzJDQkY3QTE0MEYxRDU4MDAzODc5QkUgLyogSlNXZWJH
TENvbnRleHRFdmVudC5jcHAgKi87IH07Ci0JCUJDMkNDOERGMEYzMjg4MTAwMEE5REYyNiAvKiBS
ZW5kZXJPYmplY3RDaGlsZExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMkNDOERFMEYzMjg4MTAwMEE5REYyNiAvKiBSZW5kZXJPYmplY3RDaGls
ZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQzJFRDU1NTBDNkI5QkQzMDA5MjBCRkYgLyogSlNFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkVENTU0MEM2QjlCRDMw
MDkyMEJGRiAvKiBKU0VsZW1lbnRDdXN0b20uY3BwICovOyB9OwogCQlCQzJFRDZCQzBDNkJEMkYw
MDA5MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0
b20uY3BwICovOyB9OwogCQlCQzJFRDdBNTBDNkMwRjM2MDA5MjBCRkYgLyogSlNIVE1MRnJhbWVF
bGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDMkVEN0E0MEM2QzBGMzYwMDkyMEJGRiAvKiBKU0hUTUxGcmFtZUVsZW1lbnRDdXN0
b20uY3BwICovOyB9OwpAQCAtNDg4OCw3ICs0ODg3LDYgQEAKIAkJQkM2MERBNUIwRDJBMzFGNzAw
Qjk5MThGIC8qIFhQYXRoRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQzYwREE1OTBEMkEzMUY3MDBCOTkxOEYgLyogWFBhdGhFeGNlcHRp
b24uaCAqLzsgfTsKIAkJQkM2MERCNDkwRDJBM0QxRTAwQjk5MThGIC8qIEpTWFBhdGhFeGNlcHRp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2
MERCNDcwRDJBM0QxRTAwQjk5MThGIC8qIEpTWFBhdGhFeGNlcHRpb24uY3BwICovOyB9OwogCQlC
QzYwREI0QTBEMkEzRDFFMDBCOTkxOEYgLyogSlNYUGF0aEV4Y2VwdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2MERCNDgwRDJBM0QxRTAwQjk5
MThGIC8qIEpTWFBhdGhFeGNlcHRpb24uaCAqLzsgfTsKLQkJQkM2MEVGQjcwRjMzQTBFNzAwODEy
QTkzIC8qIFJlbmRlck9iamVjdENoaWxkTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzYwRUZCNjBGMzNBMEU3MDA4MTJBOTMgLyogUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0LmNwcCAqLzsgfTsKIAkJQkM2NDY0MDkxMUQ3RjMwNDAwNjQ1NUIwIC8q
IERPTVN0cmluZ01hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQzY0NjQwNzExRDdGMzA0MDA2NDU1QjAgLyogRE9NU3RyaW5nTWFwLmNwcCAqLzsg
fTsKIAkJQkM2NDY0MEExMUQ3RjMwNDAwNjQ1NUIwIC8qIERPTVN0cmluZ01hcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM2NDY0MDgxMUQ3RjMwNDAw
NjQ1NUIwIC8qIERPTVN0cmluZ01hcC5oICovOyB9OwogCQlCQzY0NjQxQzExRDdGNDE2MDA2NDU1
QjAgLyogRGF0YXNldERPTVN0cmluZ01hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM2NDY0MUExMUQ3RjQxNjAwNjQ1NUIwIC8qIERhdGFzZXRET01T
dHJpbmdNYXAuaCAqLzsgfTsKQEAgLTExNjMxLDcgKzExNjI5LDYgQEAKIAkJQkMyOTkzNUMxN0Ex
REQ1ODAwQkNFODgwIC8qIENvbG9ySW5wdXRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvbG9ySW5wdXRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMyQ0JGNEIxNDBGMUE2NTAwMzg3OUJFIC8qIEpTV2ViR0xDb250ZXh0RXZlbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTENvbnRleHRFdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzJDQkY3QTE0MEYxRDU4MDAzODc5QkUg
LyogSlNXZWJHTENvbnRleHRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1dlYkdMQ29udGV4dEV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQkMyQ0M4REUwRjMyODgxMDAwQTlERjI2IC8qIFJlbmRlck9iamVjdENoaWxkTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJPYmplY3RDaGlsZExpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMyRUQ1NTQwQzZCOUJEMzAwOTIwQkZG
IC8qIEpTRWxlbWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0VsZW1lbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzJFRDZCQjBDNkJEMkYwMDA5MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQXR0ckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDMkVEN0E0MEM2QzBGMzYwMDkyMEJGRiAvKiBKU0hUTUxGcmFtZUVs
ZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTExNzYwLDcgKzExNzU3LDYgQEAKIAkJQkM2MERBNUEwRDJBMzFGNzAwQjk5MThGIC8qIFhQYXRo
RXhjZXB0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBYUGF0aEV4Y2VwdGlvbi5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNjBEQjQ3MEQyQTNEMUUwMEI5OTE4RiAv
KiBKU1hQYXRoRXhjZXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTWFBhdGhFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzYwREI0ODBEMkEzRDFFMDBCOTkxOEYgLyogSlNYUGF0aEV4Y2VwdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hQYXRoRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUJDNjBFRkI2MEYzM0EwRTcwMDgxMkE5MyAvKiBSZW5kZXJPYmplY3RD
aGlsZExpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM2NDY0
MDcxMUQ3RjMwNDAwNjQ1NUIwIC8qIERPTVN0cmluZ01hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBET01TdHJpbmdNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzY0NjQwODExRDdGMzA0MDA2NDU1QjAgLyogRE9NU3RyaW5nTWFwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVN0cmluZ01hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzY0NjQxQTExRDdGNDE2MDA2NDU1QjAgLyogRGF0YXNldERP
TVN0cmluZ01hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhc2V0RE9N
U3RyaW5nTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDYzMSw4ICsyMDYy
Nyw2IEBACiAJCQkJQkM4NUYyM0MxNTE5MTVFMDAwQkMxN0JFIC8qIFJlbmRlck5hbWVkRmxvd1Ro
cmVhZC5oICovLAogCQkJCUJDRUE0ODQwMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3Qu
Y3BwICovLAogCQkJCUJDRUE0ODQxMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCAq
LywKLQkJCQlCQzYwRUZCNjBGMzNBMEU3MDA4MTJBOTMgLyogUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
LmNwcCAqLywKLQkJCQlCQzJDQzhERTBGMzI4ODEwMDBBOURGMjYgLyogUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0LmggKi8sCiAJCQkJQkNGQTkzMDcxMDMzMzE5MzAwN0IyNUQxIC8qIFJlbmRlck92ZXJm
bG93LmggKi8sCiAJCQkJQTQzQkY1OUExMTQ5MjkyODAwQzY0M0NBIC8qIFJlbmRlclByb2dyZXNz
LmNwcCAqLywKIAkJCQlBNDNCRjU5QjExNDkyOTI4MDBDNjQzQ0EgLyogUmVuZGVyUHJvZ3Jlc3Mu
aCAqLywKQEAgLTIzNzc2LDcgKzIzNzcwLDYgQEAKIAkJCQlCQ0UzMkI5QzE1MTdDMEIyMDBGNTQy
RUMgLyogUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDODVGMjNE
MTUxOTE1RTAwMEJDMTdCRSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRUE0ODgwMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCBpbiBIZWFk
ZXJzICovLAotCQkJCUJDMkNDOERGMEYzMjg4MTAwMEE5REYyNiAvKiBSZW5kZXJPYmplY3RDaGls
ZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkE5MzA4MTAzMzMxOTMwMDdCMjVEMSAvKiBS
ZW5kZXJPdmVyZmxvdy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTQzQkY1OUQxMTQ5MjkyODAwQzY0
M0NBIC8qIFJlbmRlclByb2dyZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1QTU3NEYyNTEzMURC
OTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjY5OTYsNyAr
MjY5ODksNiBAQAogCQkJCUJDRTMyQjlFMTUxN0MyMjcwMEY1NDJFQyAvKiBSZW5kZXJNdWx0aUNv
bHVtblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNGRjlDMzE1MjY1MzU5MDAyMjg4QTEg
LyogUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODdG
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
QkM2MEVGQjcwRjMzQTBFNzAwODEyQTkzIC8qIFJlbmRlck9iamVjdENoaWxkTGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNDNCRjU5QzExNDkyOTI4MDBDNjQzQ0EgLyogUmVuZGVyUHJvZ3Jl
c3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUE1NzRGMjQxMzFEQjkzOTAwNDcxQjg4IC8qIFJl
bmRlclF1b3RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUI1QjdBMTcwMTdDMTBBQTgwMEU0QUEw
QSAvKiBFbGVtZW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiAxNTYyNTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDksNyArNDksNyBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKHVu
c2lnCiAgICAgUmVuZGVyVGFibGVDZWxsKiBmaXhlZENvbnRyaWJ1dG9yID0gMDsKICAgICBSZW5k
ZXJUYWJsZUNlbGwqIG1heENvbnRyaWJ1dG9yID0gMDsKIAotICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IG1fdGFibGUtPmNoaWxkcmVuKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBtX3RhYmxlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNSZW5kZXJUYWJsZUNvbCgpKXsKICAgICAgICAg
ICAgIC8vIFJlbmRlclRhYmxlQ29scyBkb24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIHByZWZlcnJl
ZCBsb2dpY2FsIHdpZHRoLCBidXQgd2UgbmVlZCB0byBjbGVhciB0aGVpciBkaXJ0eSBiaXRzCiAg
ICAgICAgICAgICAvLyBzbyB0aGF0IGlmIHdlIGNhbGwgc2V0UHJlZmVycmVkV2lkdGhzRGlydHko
dHJ1ZSkgb24gYSBjb2wgb3Igb25lIG9mIGl0cyBkZXNjZW5kYW50cywgd2UnbGwgbWFyayBpdCdz
CkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4odW5z
aWcKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5pbkNvbFNwYW4gfHwgIWNlbGwpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgYm9vbCBjZWxsSGFz
Q29udGVudCA9IGNlbGwtPmNoaWxkcmVuKCktPmZpcnN0Q2hpbGQoKSB8fCBjZWxsLT5zdHlsZSgp
LT5oYXNCb3JkZXIoKSB8fCBjZWxsLT5zdHlsZSgpLT5oYXNQYWRkaW5nKCk7CisgICAgICAgICAg
ICAgICAgYm9vbCBjZWxsSGFzQ29udGVudCA9IGNlbGwtPmZpcnN0Q2hpbGQoKSB8fCBjZWxsLT5z
dHlsZSgpLT5oYXNCb3JkZXIoKSB8fCBjZWxsLT5zdHlsZSgpLT5oYXNQYWRkaW5nKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKGNlbGxIYXNDb250ZW50KQogICAgICAgICAgICAgICAgICAgICBjb2x1
bW5MYXlvdXQuZW1wdHlDZWxsc09ubHkgPSBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4
NCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIHN0cnVjdCBTYW1lU2l6ZUFzUmVu
ZGVyQmxvY2sgOiBwdWJsaWMgUmVuZGVyQm94IHsKICAgICB2b2lkKiBwb2ludGVyc1syXTsKLSAg
ICBSZW5kZXJPYmplY3RDaGlsZExpc3QgY2hpbGRyZW47CiAgICAgUmVuZGVyTGluZUJveExpc3Qg
bGluZUJveGVzOwogICAgIHVpbnQzMl90IGJpdGZpZWxkczsKIH07CkBAIC0yMTMsNyArMjEyLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6d2lsbEJlRGVzdHJveWVkKCkKIAogICAgIC8vIE1ha2Ugc3Vy
ZSB0byBkZXN0cm95IGFub255bW91cyBjaGlsZHJlbiBmaXJzdCB3aGlsZSB0aGV5IGFyZSBzdGls
bCBjb25uZWN0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIHRyZWUsIHNvIHRoYXQgdGhleSB3aWxsCiAg
ICAgLy8gcHJvcGVybHkgZGlydHkgbGluZSBib3hlcyB0aGF0IHRoZXkgYXJlIHJlbW92ZWQgZnJv
bS4gRWZmZWN0cyB0aGF0IGRvIDpiZWZvcmUvOmFmdGVyIG9ubHkgb24gaG92ZXIgY291bGQgY3Jh
c2ggb3RoZXJ3aXNlLgotICAgIGNoaWxkcmVuKCktPmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7
CisgICAgZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKIAogICAgIC8vIERlc3Ryb3kgb3VyIGNv
bnRpbnVhdGlvbiBiZWZvcmUgYW55dGhpbmcgb3RoZXIgdGhhbiBhbm9ueW1vdXMgY2hpbGRyZW4u
CiAgICAgLy8gVGhlIHJlYXNvbiB3ZSBkb24ndCBkZXN0cm95IGl0IGJlZm9yZSBhbm9ueW1vdXMg
Y2hpbGRyZW4gaXMgdGhhdCB0aGV5IG1heQpAQCAtNDY4LDcgKzQ2Nyw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmFkZENoaWxkVG9Bbm9ueW1vdXNDb2wKICAgICBpZiAoIWJlZm9yZUNoaWxkKSB7CiAg
ICAgICAgIC8vIENyZWF0ZSBhIG5ldyBibG9jayBvZiB0aGUgY29ycmVjdCB0eXBlLgogICAgICAg
ICBSZW5kZXJCbG9jayogbmV3Qm94ID0gbmV3Q2hpbGRIYXNDb2x1bW5TcGFuID8gY3JlYXRlQW5v
bnltb3VzQ29sdW1uU3BhbkJsb2NrKCkgOiBjcmVhdGVBbm9ueW1vdXNDb2x1bW5zQmxvY2soKTsK
LSAgICAgICAgY2hpbGRyZW4oKS0+YXBwZW5kQ2hpbGROb2RlKHRoaXMsIG5ld0JveCk7CisgICAg
ICAgIGluc2VydENoaWxkSW50ZXJuYWwobmV3Qm94LCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7
CiAgICAgICAgIG5ld0JveC0+YWRkQ2hpbGRJZ25vcmluZ0Fub255bW91c0NvbHVtbkJsb2Nrcyhu
ZXdDaGlsZCwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00OTEsNyArNDkwLDcgQEAg
dm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRUb0Fub255bW91c0NvbAogICAgIAogICAgIC8vIENy
ZWF0ZSBhIG5ldyBhbm9ueW1vdXMgYm94IG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLgogICAgIFJl
bmRlckJsb2NrKiBuZXdCb3ggPSBuZXdDaGlsZEhhc0NvbHVtblNwYW4gPyBjcmVhdGVBbm9ueW1v
dXNDb2x1bW5TcGFuQmxvY2soKSA6IGNyZWF0ZUFub255bW91c0NvbHVtbnNCbG9jaygpOwotICAg
IGNoaWxkcmVuKCktPmluc2VydENoaWxkTm9kZSh0aGlzLCBuZXdCb3gsIG5ld0JlZm9yZUNoaWxk
KTsKKyAgICBpbnNlcnRDaGlsZEludGVybmFsKG5ld0JveCwgbmV3QmVmb3JlQ2hpbGQsIE5vdGlm
eUNoaWxkcmVuKTsKICAgICBuZXdCb3gtPmFkZENoaWxkSWdub3JpbmdBbm9ueW1vdXNDb2x1bW5C
bG9ja3MobmV3Q2hpbGQsIDApOwogICAgIHJldHVybjsKIH0KQEAgLTYwOCw3ICs2MDcsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpzcGxpdEJsb2NrcyhSZW5kZXJCbG9jCiAgICAgfQogCiAgICAgLy8g
Tm93IHdlIGFyZSBhdCB0aGUgY29sdW1ucyBibG9jayBsZXZlbC4gV2UgbmVlZCB0byBwdXQgdGhl
IGNsb25lIGludG8gdGhlIHRvQmxvY2suCi0gICAgdG9CbG9jay0+Y2hpbGRyZW4oKS0+YXBwZW5k
Q2hpbGROb2RlKHRvQmxvY2ssIGNsb25lQmxvY2spOworICAgIHRvQmxvY2stPmluc2VydENoaWxk
SW50ZXJuYWwoY2xvbmVCbG9jaywgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogCiAgICAgLy8g
Tm93IHRha2UgYWxsIHRoZSBjaGlsZHJlbiBhZnRlciBjdXJyQ2hpbGQgYW5kIHJlbW92ZSB0aGVt
IGZyb20gdGhlIGZyb21CbG9jawogICAgIC8vIGFuZCBwdXQgdGhlbSBpbiB0aGUgdG9CbG9jay4K
QEAgLTY0Myw5ICs2NDIsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpzcGxpdEZsb3coUmVuZGVyT2Jq
ZWN0CiAKICAgICBSZW5kZXJPYmplY3QqIGJveEZpcnN0ID0gbWFkZU5ld0JlZm9yZUJsb2NrID8g
YmxvY2stPmZpcnN0Q2hpbGQoKSA6IHByZS0+bmV4dFNpYmxpbmcoKTsKICAgICBpZiAobWFkZU5l
d0JlZm9yZUJsb2NrKQotICAgICAgICBibG9jay0+Y2hpbGRyZW4oKS0+aW5zZXJ0Q2hpbGROb2Rl
KGJsb2NrLCBwcmUsIGJveEZpcnN0KTsKLSAgICBibG9jay0+Y2hpbGRyZW4oKS0+aW5zZXJ0Q2hp
bGROb2RlKGJsb2NrLCBuZXdCbG9ja0JveCwgYm94Rmlyc3QpOwotICAgIGJsb2NrLT5jaGlsZHJl
bigpLT5pbnNlcnRDaGlsZE5vZGUoYmxvY2ssIHBvc3QsIGJveEZpcnN0KTsKKyAgICAgICAgYmxv
Y2stPmluc2VydENoaWxkSW50ZXJuYWwocHJlLCBib3hGaXJzdCwgTm90aWZ5Q2hpbGRyZW4pOwor
ICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKG5ld0Jsb2NrQm94LCBib3hGaXJzdCwgTm90
aWZ5Q2hpbGRyZW4pOworICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKHBvc3QsIGJveEZp
cnN0LCBOb3RpZnlDaGlsZHJlbik7CiAgICAgYmxvY2stPnNldENoaWxkcmVuSW5saW5lKGZhbHNl
KTsKICAgICAKICAgICBpZiAobWFkZU5ld0JlZm9yZUJsb2NrKQpAQCAtNjk1LDEwICs2OTQsMTAg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuQW5vbnltb3VzQwogCiAgICAgUmVuZGVy
T2JqZWN0KiBib3hGaXJzdCA9IGJsb2NrLT5maXJzdENoaWxkKCk7CiAgICAgaWYgKHByZSkKLSAg
ICAgICAgYmxvY2stPmNoaWxkcmVuKCktPmluc2VydENoaWxkTm9kZShibG9jaywgcHJlLCBib3hG
aXJzdCk7Ci0gICAgYmxvY2stPmNoaWxkcmVuKCktPmluc2VydENoaWxkTm9kZShibG9jaywgbmV3
QmxvY2tCb3gsIGJveEZpcnN0KTsKKyAgICAgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwo
cHJlLCBib3hGaXJzdCwgTm90aWZ5Q2hpbGRyZW4pOworICAgIGJsb2NrLT5pbnNlcnRDaGlsZElu
dGVybmFsKG5ld0Jsb2NrQm94LCBib3hGaXJzdCwgTm90aWZ5Q2hpbGRyZW4pOwogICAgIGlmIChw
b3N0KQotICAgICAgICBibG9jay0+Y2hpbGRyZW4oKS0+aW5zZXJ0Q2hpbGROb2RlKGJsb2NrLCBw
b3N0LCBib3hGaXJzdCk7CisgICAgICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKHBvc3Qs
IGJveEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7CiAgICAgYmxvY2stPnNldENoaWxkcmVuSW5saW5l
KGZhbHNlKTsKICAgICAKICAgICAvLyBUaGUgcHJlL3Bvc3QgYmxvY2tzIGFsd2F5cyBoYXZlIGxh
eWVycywgc28gd2Uga25vdyB0byBhbHdheXMgZG8gYSBmdWxsIGluc2VydC9yZW1vdmUgKHNvIHdl
IHBhc3MgdHJ1ZSBhcyB0aGUgbGFzdCBhcmd1bWVudCkuCkBAIC0xMDA1LDcgKzEwMDQsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjptYWtlQ2hpbGRyZW5Ob25JbmxpbmUoCiAgICAgICAgIGNoaWxkID0g
aW5saW5lUnVuRW5kLT5uZXh0U2libGluZygpOwogCiAgICAgICAgIFJlbmRlckJsb2NrKiBibG9j
ayA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAgICAgIGNoaWxkcmVuKCktPmluc2VydENo
aWxkTm9kZSh0aGlzLCBibG9jaywgaW5saW5lUnVuU3RhcnQpOworICAgICAgICBpbnNlcnRDaGls
ZEludGVybmFsKGJsb2NrLCBpbmxpbmVSdW5TdGFydCwgTm90aWZ5Q2hpbGRyZW4pOwogICAgICAg
ICBtb3ZlQ2hpbGRyZW5UbyhibG9jaywgaW5saW5lUnVuU3RhcnQsIGNoaWxkKTsKICAgICB9CiAK
QEAgLTEwMjUsOCArMTAyNCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUxlZnRvdmVyQW5v
bnltb3UKICAgICBpZiAoY2hpbGQtPmNvbnRpbnVhdGlvbigpIHx8IChjaGlsZC0+Zmlyc3RDaGls
ZCgpICYmIChjaGlsZC0+aXNBbm9ueW1vdXNDb2x1bW5TcGFuQmxvY2soKSB8fCBjaGlsZC0+aXNB
bm9ueW1vdXNDb2x1bW5zQmxvY2soKSkpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUmVu
ZGVyT2JqZWN0KiBmaXJzdEFuQ2hpbGQgPSBjaGlsZC0+bV9jaGlsZHJlbi5maXJzdENoaWxkKCk7
Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0QW5DaGlsZCA9IGNoaWxkLT5tX2NoaWxkcmVuLmxhc3RD
aGlsZCgpOworICAgIFJlbmRlck9iamVjdCogZmlyc3RBbkNoaWxkID0gY2hpbGQtPmZpcnN0Q2hp
bGQoKTsKKyAgICBSZW5kZXJPYmplY3QqIGxhc3RBbkNoaWxkID0gY2hpbGQtPmxhc3RDaGlsZCgp
OwogICAgIGlmIChmaXJzdEFuQ2hpbGQpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gZmly
c3RBbkNoaWxkOwogICAgICAgICB3aGlsZSAobykgewpAQCAtMTA0MCwxNSArMTAzOSwxNSBAQCB2
b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVMZWZ0b3ZlckFub255bW91CiAgICAgICAgIGlmIChjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGNoaWxkLT5uZXh0U2libGluZygpLT5zZXRQ
cmV2aW91c1NpYmxpbmcobGFzdEFuQ2hpbGQpOwogICAgICAgICAgICAgCi0gICAgICAgIGlmIChj
aGlsZCA9PSBtX2NoaWxkcmVuLmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIG1fY2hpbGRyZW4u
c2V0Rmlyc3RDaGlsZChmaXJzdEFuQ2hpbGQpOwotICAgICAgICBpZiAoY2hpbGQgPT0gbV9jaGls
ZHJlbi5sYXN0Q2hpbGQoKSkKLSAgICAgICAgICAgIG1fY2hpbGRyZW4uc2V0TGFzdENoaWxkKGxh
c3RBbkNoaWxkKTsKKyAgICAgICAgaWYgKGNoaWxkID09IGZpcnN0Q2hpbGQoKSkKKyAgICAgICAg
ICAgIHNldEZpcnN0Q2hpbGQoZmlyc3RBbkNoaWxkKTsKKyAgICAgICAgaWYgKGNoaWxkID09IGxh
c3RDaGlsZCgpKQorICAgICAgICAgICAgc2V0TGFzdENoaWxkKGxhc3RBbkNoaWxkKTsKICAgICB9
IGVsc2UgewotICAgICAgICBpZiAoY2hpbGQgPT0gbV9jaGlsZHJlbi5maXJzdENoaWxkKCkpCi0g
ICAgICAgICAgICBtX2NoaWxkcmVuLnNldEZpcnN0Q2hpbGQoY2hpbGQtPm5leHRTaWJsaW5nKCkp
OwotICAgICAgICBpZiAoY2hpbGQgPT0gbV9jaGlsZHJlbi5sYXN0Q2hpbGQoKSkKLSAgICAgICAg
ICAgIG1fY2hpbGRyZW4uc2V0TGFzdENoaWxkKGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7Cisg
ICAgICAgIGlmIChjaGlsZCA9PSBmaXJzdENoaWxkKCkpCisgICAgICAgICAgICBzZXRGaXJzdENo
aWxkKGNoaWxkLT5uZXh0U2libGluZygpKTsKKyAgICAgICAgaWYgKGNoaWxkID09IGxhc3RDaGls
ZCgpKQorICAgICAgICAgICAgc2V0TGFzdENoaWxkKGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7
CiAKICAgICAgICAgaWYgKGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkKICAgICAgICAgICAgIGNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKS0+c2V0TmV4dFNpYmxpbmcoY2hpbGQtPm5leHRTaWJsaW5n
KCkpOwpAQCAtMTA1Niw3ICsxMDU1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlTGVmdG92
ZXJBbm9ueW1vdQogICAgICAgICAgICAgY2hpbGQtPm5leHRTaWJsaW5nKCktPnNldFByZXZpb3Vz
U2libGluZyhjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpOwogICAgIH0KIAotICAgIGNoaWxkLT5j
aGlsZHJlbigpLT5zZXRGaXJzdENoaWxkKDApOworICAgIGNoaWxkLT5zZXRGaXJzdENoaWxkKDAp
OwogICAgIGNoaWxkLT5tX25leHQgPSAwOwogCiAgICAgLy8gUmVtb3ZlIGFsbCB0aGUgaW5mb3Jt
YXRpb24gaW4gdGhlIGZsb3cgdGhyZWFkIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGVmdG92ZXIgYW5v
bnltb3VzIGJsb2NrLgpAQCAtMTA5NCw3ICsxMDkzLDcgQEAgc3RhdGljIGJvb2wgY2FuTWVyZ2VD
b250aWd1b3VzQW5vbnltb3VzQgogICAgICAgICAgICAmJiBwcmV2LT5pc0Fub255bW91c0NvbHVt
blNwYW5CbG9jaygpID09IG5leHQtPmlzQW5vbnltb3VzQ29sdW1uU3BhbkJsb2NrKCk7CiB9CiAK
LXZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2sq
IHBhcmVudCwgUmVuZGVyT2JqZWN0KiBjaGlsZCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNl
QW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2sqIHBhcmVudCwgUmVuZGVyQmxvY2sqIGNoaWxk
KQogewogICAgIHBhcmVudC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgcGFyZW50LT5zZXRDaGlsZHJlbklubGluZShjaGlsZC0+Y2hpbGRyZW5JbmxpbmUoKSk7CkBA
IC0xMTAyLDE0ICsxMTAxLDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlQW5vbnltb3Vz
Qm94Q2gKIAogICAgIFJlbmRlckZsb3dUaHJlYWQqIGNoaWxkRmxvd1RocmVhZCA9IGNoaWxkLT5m
bG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgQ3VycmVudFJlbmRlckZsb3dUaHJlYWRN
YWludGFpbmVyIGZsb3dUaHJlYWRNYWludGFpbmVyKGNoaWxkRmxvd1RocmVhZCk7Ci0gICAgCi0g
ICAgUmVuZGVyQmxvY2sqIGFub25CbG9jayA9IHRvUmVuZGVyQmxvY2socGFyZW50LT5jaGlsZHJl
bigpLT5yZW1vdmVDaGlsZE5vZGUocGFyZW50LCBjaGlsZCwgY2hpbGQtPmhhc0xheWVyKCkpKTsK
LSAgICBhbm9uQmxvY2stPm1vdmVBbGxDaGlsZHJlblRvKHBhcmVudCwgbmV4dFNpYmxpbmcsIGNo
aWxkLT5oYXNMYXllcigpKTsKKworICAgIHBhcmVudC0+cmVtb3ZlQ2hpbGRJbnRlcm5hbChjaGls
ZCwgY2hpbGQtPmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJl
bik7CisgICAgY2hpbGQtPm1vdmVBbGxDaGlsZHJlblRvKHBhcmVudCwgbmV4dFNpYmxpbmcsIGNo
aWxkLT5oYXNMYXllcigpKTsKICAgICAvLyBEZWxldGUgdGhlIG5vdy1lbXB0eSBibG9jaydzIGxp
bmVzIGFuZCBudWtlIGl0LgotICAgIGFub25CbG9jay0+ZGVsZXRlTGluZUJveFRyZWUoKTsKKyAg
ICBjaGlsZC0+ZGVsZXRlTGluZUJveFRyZWUoKTsKICAgICBpZiAoY2hpbGRGbG93VGhyZWFkICYm
IGNoaWxkRmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKLSAgICAgICAgdG9S
ZW5kZXJOYW1lZEZsb3dUaHJlYWQoY2hpbGRGbG93VGhyZWFkKS0+cmVtb3ZlRmxvd0NoaWxkSW5m
byhhbm9uQmxvY2spOwotICAgIGFub25CbG9jay0+ZGVzdHJveSgpOworICAgICAgICB0b1JlbmRl
ck5hbWVkRmxvd1RocmVhZChjaGlsZEZsb3dUaHJlYWQpLT5yZW1vdmVGbG93Q2hpbGRJbmZvKGNo
aWxkKTsKKyAgICBjaGlsZC0+ZGVzdHJveSgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjptb3Zl
QWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNUbyhSZW5kZXJCbG9jayogdG9CbG9jaywgYm9vbCBm
dWxsUmVtb3ZlSW5zZXJ0KQpAQCAtMTE4OCwxMSArMTE4NywxMiBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAgICAgICAgICAgICAvLyBDYWNoZSB0aGlzIHZhbHVl
IGFzIGl0IG1pZ2h0IGdldCBjaGFuZ2VkIGluIHNldFN0eWxlKCkgY2FsbC4KICAgICAgICAgICAg
IGJvb2wgaW5saW5lQ2hpbGRyZW5CbG9ja0hhc0xheWVyID0gaW5saW5lQ2hpbGRyZW5CbG9jay0+
aGFzTGF5ZXIoKTsKICAgICAgICAgICAgIGlubGluZUNoaWxkcmVuQmxvY2stPnNldFN0eWxlKG5l
d1N0eWxlKTsKLSAgICAgICAgICAgIGNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZSh0aGlzLCBp
bmxpbmVDaGlsZHJlbkJsb2NrLCBpbmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIpOworICAgICAg
ICAgICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbChpbmxpbmVDaGlsZHJlbkJsb2NrLCBpbmxpbmVDaGls
ZHJlbkJsb2NrSGFzTGF5ZXIgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE5vdyBqdXN0IHB1dCB0aGUgaW5saW5lQ2hp
bGRyZW5CbG9jayBpbnNpZGUgdGhlIGJsb2NrQ2hpbGRyZW5CbG9jay4KLSAgICAgICAgICAgIGJs
b2NrQ2hpbGRyZW5CbG9jay0+Y2hpbGRyZW4oKS0+aW5zZXJ0Q2hpbGROb2RlKGJsb2NrQ2hpbGRy
ZW5CbG9jaywgaW5saW5lQ2hpbGRyZW5CbG9jaywgcHJldiA9PSBpbmxpbmVDaGlsZHJlbkJsb2Nr
ID8gYmxvY2tDaGlsZHJlbkJsb2NrLT5maXJzdENoaWxkKCkgOiAwLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2hpbGRy
ZW5CbG9ja0hhc0xheWVyIHx8IGJsb2NrQ2hpbGRyZW5CbG9jay0+aGFzTGF5ZXIoKSk7CisgICAg
ICAgICAgICBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gcHJldiA9PSBpbmxpbmVDaGlsZHJl
bkJsb2NrID8gYmxvY2tDaGlsZHJlbkJsb2NrLT5maXJzdENoaWxkKCkgOiBudWxscHRyOworICAg
ICAgICAgICAgYmxvY2tDaGlsZHJlbkJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKGlubGluZUNo
aWxkcmVuQmxvY2ssIGJlZm9yZUNoaWxkLAorICAgICAgICAgICAgICAgIChpbmxpbmVDaGlsZHJl
bkJsb2NrSGFzTGF5ZXIgfHwgYmxvY2tDaGlsZHJlbkJsb2NrLT5oYXNMYXllcigpKSA/IE5vdGlm
eUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIG5leHQtPnNldE5l
ZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAvLyBpbmxpbmVDaGlsZHJlbkJsb2NrIGdvdCByZXBhcmVudGVkIHRvIGJsb2NrQ2hpbGRyZW5C
bG9jaywgc28gaXQgaXMgbm8gbG9uZ2VyIGEgY2hpbGQKQEAgLTEyMjAsNyArMTIyMCw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAgLy8gVGhlIHJl
bW92YWwgaGFzIGtub2NrZWQgdXMgZG93biB0byBjb250YWluaW5nIG9ubHkgYSBzaW5nbGUgYW5v
bnltb3VzCiAgICAgICAgIC8vIGJveC4gIFdlIGNhbiBnbyBhaGVhZCBhbmQgcHVsbCB0aGUgY29u
dGVudCByaWdodCBiYWNrIHVwIGludG8gb3VyCiAgICAgICAgIC8vIGJveC4KLSAgICAgICAgY29s
bGFwc2VBbm9ueW1vdXNCb3hDaGlsZCh0aGlzLCBjaGlsZCk7CisgICAgICAgIGNvbGxhcHNlQW5v
bnltb3VzQm94Q2hpbGQodGhpcywgdG9SZW5kZXJCbG9jayhjaGlsZCkpOwogICAgIH0gZWxzZSBp
ZiAoKChwcmV2ICYmIHByZXYtPmlzQW5vbnltb3VzQmxvY2soKSkgfHwgKG5leHQgJiYgbmV4dC0+
aXNBbm9ueW1vdXNCbG9jaygpKSkgJiYgY2FuQ29sbGFwc2VBbm9ueW1vdXNCbG9ja0NoaWxkKCkp
IHsKICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSByZW1vdmFsIGhhcyBrbm9ja2Vk
IHVzIGRvd24gdG8gYSBzaW5nbGUgYW5vbnltb3VzCiAgICAgICAgIC8vIGJsb2NrIHdpdGggcHNl
dWRvLXN0eWxlIGVsZW1lbnQgc2libGluZ3MgKGUuZy4gZmlyc3QtbGV0dGVyKS4gSWYgdGhlc2UK
QEAgLTU4NDUsNyArNTg0NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZUZpcnN0TGV0dGVy
U3R5bGUKICAgICAgICAgfQogICAgICAgICAvLyBUbyBwcmV2ZW50IHJlbW92YWwgb2Ygc2luZ2xl
IGFub255bW91cyBibG9jayBpbiBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQgYW5kIGNhdXNpbmcK
ICAgICAgICAgLy8gfG5leHRTaWJsaW5nfCB0byBnbyBzdGFsZSwgd2UgcmVtb3ZlIHRoZSBvbGQg
Zmlyc3QgbGV0dGVyIHVzaW5nIHJlbW92ZUNoaWxkTm9kZSBmaXJzdC4KLSAgICAgICAgZmlyc3RM
ZXR0ZXJDb250YWluZXItPmNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZShmaXJzdExldHRlckNv
bnRhaW5lciwgZmlyc3RMZXR0ZXIpOworICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVt
b3ZlQ2hpbGRJbnRlcm5hbChmaXJzdExldHRlciwgTm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICBm
aXJzdExldHRlci0+ZGVzdHJveSgpOwogICAgICAgICBmaXJzdExldHRlciA9IG5ld0ZpcnN0TGV0
dGVyOwogICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQoZmlyc3RMZXR0ZXIs
IG5leHRTaWJsaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5o
CShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEyICsxMDQsNiBAQCBwcm90ZWN0ZWQ6CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1vdXMoRG9jdW1lbnQmKTsK
IAotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRy
ZW4uZmlyc3RDaGlsZCgpOyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7
IHJldHVybiBtX2NoaWxkcmVuLmxhc3RDaGlsZCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFJl
bmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJl
dHVybiAmbV9jaGlsZHJlbjsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBj
aGlsZHJlbigpIE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0KICAgICBi
b29sIGJlaW5nRGVzdHJveWVkKCkgY29uc3QgeyByZXR1cm4gbV9iZWluZ0Rlc3Ryb3llZDsgfQog
CiAgICAgLy8gVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgb3ZlcnJpZGRlbiBmb3IgaW5saW5lLWJs
b2NrLgpAQCAtMjkyLDcgKzI4Niw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJCbG9jayogY3JlYXRl
QW5vbnltb3VzQmxvY2soRURpc3BsYXkgZGlzcGxheSA9IEJMT0NLKSBjb25zdCB7IHJldHVybiBj
cmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXJBbmREaXNwbGF5KHRoaXMsIGRpc3BsYXkp
OyB9CiAgICAgUmVuZGVyQmxvY2sqIGNyZWF0ZUFub255bW91c0NvbHVtbnNCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIGNyZWF0ZUFub255bW91c0NvbHVtbnNXaXRoUGFyZW50UmVuZGVyZXIodGhpcyk7
IH0KICAgICBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnltb3VzQ29sdW1uU3BhbkJsb2NrKCkgY29u
c3QgeyByZXR1cm4gY3JlYXRlQW5vbnltb3VzQ29sdW1uU3BhbldpdGhQYXJlbnRSZW5kZXJlcih0
aGlzKTsgfQotICAgIHN0YXRpYyB2b2lkIGNvbGxhcHNlQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVy
QmxvY2sqIHBhcmVudCwgUmVuZGVyT2JqZWN0KiBjaGlsZCk7CisgICAgc3RhdGljIHZvaWQgY29s
bGFwc2VBbm9ueW1vdXNCb3hDaGlsZChSZW5kZXJCbG9jayogcGFyZW50LCBSZW5kZXJCbG9jayog
Y2hpbGQpOwogCiAgICAgdmlydHVhbCBSZW5kZXJCb3gqIGNyZWF0ZUFub255bW91c0JveFdpdGhT
YW1lVHlwZUFzKGNvbnN0IFJlbmRlck9iamVjdCogcGFyZW50KSBjb25zdCBPVkVSUklERTsKIApA
QCAtNTcxLDYgKzU2NSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJC
bG9jaygpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSBjb25zdCBPVkVSUklERSBGSU5BTCB7
IHJldHVybiBpc0lubGluZSgpICYmIGlzUmVwbGFjZWQoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBj
YW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2
b2lkIG1ha2VDaGlsZHJlbk5vbklubGluZShSZW5kZXJPYmplY3QqIGluc2VydGlvblBvaW50ID0g
MCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVuZGVy
QmxvY2sqIGNoaWxkKTsKQEAgLTg3OCw3ICs4NzMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgT3duUHRy
PEZsb2F0aW5nT2JqZWN0cz4gbV9mbG9hdGluZ09iamVjdHM7CiAgICAgT3duUHRyPFJlbmRlckJs
b2NrUmFyZURhdGE+IG1fcmFyZURhdGE7CiAKLSAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9j
aGlsZHJlbjsKICAgICBSZW5kZXJMaW5lQm94TGlzdCBtX2xpbmVCb3hlczsgICAvLyBBbGwgb2Yg
dGhlIHJvb3QgbGluZSBib3hlcyBjcmVhdGVkIGZvciB0aGlzIGJsb2NrIGZsb3cuICBGb3IgZXhh
bXBsZSwgPGRpdj5IZWxsbzxicj53b3JsZC48L2Rpdj4gd2lsbCBoYXZlIHR3byB0b3RhbCBsaW5l
cyBmb3IgdGhlIDxkaXY+LgogCiAgICAgbXV0YWJsZSBzaWduZWQgbV9saW5lSGVpZ2h0IDogMjc7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTU2
MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2NDQsNyArNDY0NCw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyQm94OjpzcGxp
dEFub255bW91c0IKICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHRhYmxlIHJlcGFpbnRpbmcg
bG9naWMga25vd3MgdGhlIHN0cnVjdHVyZSBpcyBkaXJ0eS4KICAgICAgICAgICAgIC8vIFNlZSBm
b3IgZXhhbXBsZSBSZW5kZXJUYWJsZUNlbGw6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQu
CiAgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KHBhcmVudEJveCk7Ci0g
ICAgICAgICAgICBwYXJlbnRCb3gtPmNoaWxkcmVuKCktPmluc2VydENoaWxkTm9kZShwYXJlbnRC
b3gsIHBvc3RCb3gsIGJveFRvU3BsaXQtPm5leHRTaWJsaW5nKCkpOworICAgICAgICAgICAgcGFy
ZW50Qm94LT5pbnNlcnRDaGlsZEludGVybmFsKHBvc3RCb3gsIGJveFRvU3BsaXQtPm5leHRTaWJs
aW5nKCksIE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIGJveFRvU3BsaXQtPm1vdmVDaGls
ZHJlblRvKHBvc3RCb3gsIGJlZm9yZUNoaWxkLCAwLCB0cnVlKTsKIAogICAgICAgICAgICAgbWFy
a0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdChib3hUb1NwbGl0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24g
MTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4MSw5ICsyNzgxLDEzIEBAIHZvaWQgUmVuZGVyQm94
TW9kZWxPYmplY3Q6Om1vdmVDaGlsZFRvKFIKICAgICBpZiAoZnVsbFJlbW92ZUluc2VydCAmJiAo
dG9Cb3hNb2RlbE9iamVjdC0+aXNSZW5kZXJCbG9jaygpIHx8IHRvQm94TW9kZWxPYmplY3QtPmlz
UmVuZGVySW5saW5lKCkpKSB7CiAgICAgICAgIC8vIFRha2VzIGNhcmUgb2YgYWRkaW5nIHRoZSBu
ZXcgY2hpbGQgY29ycmVjdGx5IGlmIHRvQmxvY2sgYW5kIGZyb21CbG9jawogICAgICAgICAvLyBo
YXZlIGRpZmZlcmVudCBraW5kIG9mIGNoaWxkcmVuIChibG9jayB2cyBpbmxpbmUpLgotICAgICAg
ICB0b0JveE1vZGVsT2JqZWN0LT5hZGRDaGlsZChjaGlsZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUo
dGhpcywgY2hpbGQpLCBiZWZvcmVDaGlsZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHRvQm94TW9k
ZWxPYmplY3QtPmNoaWxkcmVuKCktPmluc2VydENoaWxkTm9kZSh0b0JveE1vZGVsT2JqZWN0LCBj
aGlsZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUodGhpcywgY2hpbGQsIGZ1bGxSZW1vdmVJbnNlcnQp
LCBiZWZvcmVDaGlsZCwgZnVsbFJlbW92ZUluc2VydCk7CisgICAgICAgIHJlbW92ZUNoaWxkSW50
ZXJuYWwoY2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgdG9Cb3hNb2RlbE9iamVjdC0+
YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBOb3Rp
ZnlDaGlsZHJlblR5cGUgbm90aWZ5VHlwZSA9IGZ1bGxSZW1vdmVJbnNlcnQgPyBOb3RpZnlDaGls
ZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbjsKKyAgICAgICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbChj
aGlsZCwgbm90aWZ5VHlwZSk7CisgICAgICAgIHRvQm94TW9kZWxPYmplY3QtPmluc2VydENoaWxk
SW50ZXJuYWwoY2hpbGQsIGJlZm9yZUNoaWxkLCBub3RpZnlUeXBlKTsKKyAgICB9CiB9CiAKIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6Om1vdmVDaGlsZHJlblRvKFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiB0b0JveE1vZGVsT2JqZWN0LCBSZW5kZXJPYmplY3QqIHN0YXJ0Q2hpbGQsIFJlbmRlck9i
amVjdCogZW5kQ2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIGJvb2wgZnVsbFJlbW92
ZUluc2VydCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE1NjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1LDE2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCisjaW5jbHVkZSAiQVhPYmpl
Y3RDYWNoZS5oIgogI2luY2x1ZGUgIkNvbnRlbnREYXRhLmgiCisjaW5jbHVkZSAiUmVuZGVyQ291
bnRlci5oIgogI2luY2x1ZGUgIlJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveC5oIgogI2luY2x1
ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgogI2luY2x1
ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1h
Z2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVh
ay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlD
b2x1bW5CbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgpAQCAtNDIsMTIgKzQ1LDE1
IEBACiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJv
dy5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAj
aW5jbHVkZSAiU1ZHUmVuZGVyU3VwcG9ydC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJl
bmRlckVsZW1lbnQ6OlJlbmRlckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKICAgICA6IFJlbmRl
ck9iamVjdChlbGVtZW50KQorICAgICwgbV9maXJzdENoaWxkKG51bGxwdHIpCisgICAgLCBtX2xh
c3RDaGlsZChudWxscHRyKQogewogfQogCkBAIC0xMzYsOSArMTQyLDYgQEAgUmVuZGVyRWxlbWVu
dCogUmVuZGVyRWxlbWVudDo6Y3JlYXRlRm9yKAogCiB2b2lkIFJlbmRlckVsZW1lbnQ6OmFkZENo
aWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7
Ci0gICAgQVNTRVJUKGNoaWxkcmVuKCkpOwotICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCYgY2hp
bGRyZW4gPSAqdGhpcy0+Y2hpbGRyZW4oKTsKLQogICAgIGJvb2wgbmVlZHNUYWJsZSA9IGZhbHNl
OwogCiAgICAgaWYgKG5ld0NoaWxkLT5pc1JlbmRlclRhYmxlQ29sKCkpIHsKQEAgLTE1Niw3ICsx
NTksNyBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmFkZENoaWxkKFJlbmRlck9iamVjCiAKICAgICBp
ZiAobmVlZHNUYWJsZSkgewogICAgICAgICBSZW5kZXJUYWJsZSogdGFibGU7Ci0gICAgICAgIFJl
bmRlck9iamVjdCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnByZXZp
b3VzU2libGluZygpIDogY2hpbGRyZW4ubGFzdENoaWxkKCk7CisgICAgICAgIFJlbmRlck9iamVj
dCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGlu
ZygpIDogbV9sYXN0Q2hpbGQ7CiAgICAgICAgIGlmIChhZnRlckNoaWxkICYmIGFmdGVyQ2hpbGQt
PmlzQW5vbnltb3VzKCkgJiYgYWZ0ZXJDaGlsZC0+aXNUYWJsZSgpICYmICFhZnRlckNoaWxkLT5p
c0JlZm9yZUNvbnRlbnQoKSkKICAgICAgICAgICAgIHRhYmxlID0gdG9SZW5kZXJUYWJsZShhZnRl
ckNoaWxkKTsKICAgICAgICAgZWxzZSB7CkBAIC0xNjUsNyArMTY4LDcgQEAgdm9pZCBSZW5kZXJF
bGVtZW50OjphZGRDaGlsZChSZW5kZXJPYmplYwogICAgICAgICB9CiAgICAgICAgIHRhYmxlLT5h
ZGRDaGlsZChuZXdDaGlsZCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGNoaWxkcmVuLmluc2VydENo
aWxkTm9kZSh0aGlzLCBuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBpbnNlcnRDaGls
ZEludGVybmFsKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwogCiAgICAg
aWYgKG5ld0NoaWxkLT5pc1RleHQoKSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dGV4dFRyYW5zZm9y
bSgpID09IENBUElUQUxJWkUpCiAgICAgICAgIHRvUmVuZGVyVGV4dChuZXdDaGlsZCktPnRyYW5z
Zm9ybVRleHQoKTsKQEAgLTE4OCw4ICsxOTEsMTM5IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWMKIAogdm9pZCBSZW5kZXJFbGVtZW50OjpyZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QqIG9sZENoaWxkKQogewotICAgIEFTU0VSVChjaGlsZHJlbigpKTsKLSAgICBjaGls
ZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUodGhpcywgb2xkQ2hpbGQpOworICAgIHJlbW92ZUNoaWxk
SW50ZXJuYWwob2xkQ2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKK30KKwordm9pZCBSZW5kZXJFbGVt
ZW50OjpkZXN0cm95TGVmdG92ZXJDaGlsZHJlbigpCit7CisgICAgd2hpbGUgKGZpcnN0Q2hpbGQo
KSkgeworICAgICAgICBpZiAoZmlyc3RDaGlsZCgpLT5pc0xpc3RNYXJrZXIoKSB8fCAoZmlyc3RD
aGlsZCgpLT5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBGSVJTVF9MRVRURVIgJiYgIWZpcnN0Q2hp
bGQoKS0+aXNUZXh0KCkpKQorICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5yZW1vdmVGcm9tUGFy
ZW50KCk7IC8vIExpc3QgbWFya2VycyBhcmUgb3duZWQgYnkgdGhlaXIgZW5jbG9zaW5nIGxpc3Qg
YW5kIHNvIGRvbid0IGdldCBkZXN0cm95ZWQgYnkgdGhpcyBjb250YWluZXIuIFNpbWlsYXJseSwg
Zmlyc3QgbGV0dGVycyBhcmUgZGVzdHJveWVkIGJ5IHRoZWlyIHJlbWFpbmluZyB0ZXh0IGZyYWdt
ZW50LgorICAgICAgICBlbHNlIGlmIChmaXJzdENoaWxkKCktPmlzUnVuSW4oKSAmJiBmaXJzdENo
aWxkKCktPm5vZGUoKSkgeworICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5ub2RlKCktPnNldFJl
bmRlcmVyKDApOworICAgICAgICAgICAgZmlyc3RDaGlsZCgpLT5ub2RlKCktPnNldE5lZWRzU3R5
bGVSZWNhbGMoKTsKKyAgICAgICAgICAgIGZpcnN0Q2hpbGQoKS0+ZGVzdHJveSgpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRGVzdHJveSBhbnkgYW5vbnltb3VzIGNoaWxkcmVu
IHJlbWFpbmluZyBpbiB0aGUgcmVuZGVyIHRyZWUsIGFzIHdlbGwgYXMgaW1wbGljaXQgKHNoYWRv
dykgRE9NIGVsZW1lbnRzIGxpa2UgdGhvc2UgdXNlZCBpbiB0aGUgZW5naW5lLWJhc2VkIHRleHQg
ZmllbGRzLgorICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQoKS0+bm9kZSgpKQorICAgICAgICAg
ICAgICAgIGZpcnN0Q2hpbGQoKS0+bm9kZSgpLT5zZXRSZW5kZXJlcigwKTsKKyAgICAgICAgICAg
IGZpcnN0Q2hpbGQoKS0+ZGVzdHJveSgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJl
bmRlckVsZW1lbnQ6Omluc2VydENoaWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW5UeXBlIG5vdGlmeUNoaWxk
cmVuKQoreworICAgIEFTU0VSVChjYW5IYXZlQ2hpbGRyZW4oKSk7CisgICAgQVNTRVJUKCFuZXdD
aGlsZC0+cGFyZW50KCkpOworICAgIEFTU0VSVCghaXNSZW5kZXJCbG9ja0Zsb3coKSB8fCAoIW5l
d0NoaWxkLT5pc1RhYmxlU2VjdGlvbigpICYmICFuZXdDaGlsZC0+aXNUYWJsZVJvdygpICYmICFu
ZXdDaGlsZC0+aXNUYWJsZUNlbGwoKSkpOworCisgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYmIGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykKKyAg
ICAgICAgYmVmb3JlQ2hpbGQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7CisKKyAgICAvLyBUaGlz
IHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzIHByZXZlbnQgcmVuZGVyIHRyZWUg
Y29ycnVwdGlvbgorICAgIC8vIHdoZXJlIGNoaWxkLT5wYXJlbnQoKSBlbmRzIHVwIGJlaW5nIG93
bmVyIGJ1dCBjaGlsZC0+bmV4dFNpYmxpbmcoKS0+cGFyZW50KCkKKyAgICAvLyBpcyBub3Qgb3du
ZXIuCisgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlz
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbmV3Q2hpbGQtPnNldFBhcmVudCh0aGlzKTsKKworICAgIGlmIChtX2ZpcnN0Q2hp
bGQgPT0gYmVmb3JlQ2hpbGQpCisgICAgICAgIG1fZmlyc3RDaGlsZCA9IG5ld0NoaWxkOworCisg
ICAgaWYgKGJlZm9yZUNoaWxkKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcHJldmlvdXNTaWJs
aW5nID0gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOworICAgICAgICBpZiAocHJldmlv
dXNTaWJsaW5nKQorICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nLT5zZXROZXh0U2libGluZyhu
ZXdDaGlsZCk7CisgICAgICAgIG5ld0NoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcocHJldmlvdXNT
aWJsaW5nKTsKKyAgICAgICAgbmV3Q2hpbGQtPnNldE5leHRTaWJsaW5nKGJlZm9yZUNoaWxkKTsK
KyAgICAgICAgYmVmb3JlQ2hpbGQtPnNldFByZXZpb3VzU2libGluZyhuZXdDaGlsZCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKGxhc3RDaGlsZCgpKQorICAgICAgICAgICAgbGFzdENoaWxk
KCktPnNldE5leHRTaWJsaW5nKG5ld0NoaWxkKTsKKyAgICAgICAgbmV3Q2hpbGQtPnNldFByZXZp
b3VzU2libGluZyhsYXN0Q2hpbGQoKSk7CisgICAgICAgIG1fbGFzdENoaWxkID0gbmV3Q2hpbGQ7
CisgICAgfQorCisgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsKKyAgICAgICAg
aWYgKG5vdGlmeUNoaWxkcmVuID09IE5vdGlmeUNoaWxkcmVuKQorICAgICAgICAgICAgbmV3Q2hp
bGQtPmluc2VydGVkSW50b1RyZWUoKTsKKyAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJT
dWJ0cmVlQXR0YWNoZWQobmV3Q2hpbGQpOworICAgIH0KKworICAgIG5ld0NoaWxkLT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lk
dGhzRGlydHkodHJ1ZSk7CisgICAgaWYgKCFub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkpCisgICAg
ICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7IC8vIFdlIG1heSBzdXBwbHkgdGhlIHN0YXRp
YyBwb3NpdGlvbiBmb3IgYW4gYWJzb2x1dGUgcG9zaXRpb25lZCBjaGlsZC4KKworICAgIGlmIChB
WE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKQorICAgICAg
ICBjYWNoZS0+Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOworfQorCit2b2lkIFJlbmRlckVsZW1lbnQ6
OnJlbW92ZUNoaWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBvbGRDaGlsZCwgTm90aWZ5Q2hpbGRy
ZW5UeXBlIG5vdGlmeUNoaWxkcmVuKQoreworICAgIEFTU0VSVChjYW5IYXZlQ2hpbGRyZW4oKSk7
CisgICAgQVNTRVJUKG9sZENoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKKworICAgIGlmIChvbGRD
aGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgICAgICB0b1JlbmRl
ckJveChvbGRDaGlsZCktPnJlbW92ZUZsb2F0aW5nT3JQb3NpdGlvbmVkQ2hpbGRGcm9tQmxvY2tM
aXN0cygpOworCisgICAgLy8gU28gdGhhdCB3ZSdsbCBnZXQgdGhlIGFwcHJvcHJpYXRlIGRpcnR5
IGJpdCBzZXQgKGVpdGhlciB0aGF0IGEgbm9ybWFsIGZsb3cgY2hpbGQgZ290IHlhbmtlZCBvcgor
ICAgIC8vIHRoYXQgYSBwb3NpdGlvbmVkIGNoaWxkIGdvdCB5YW5rZWQpLiBXZSBhbHNvIHJlcGFp
bnQsIHNvIHRoYXQgdGhlIGFyZWEgZXhwb3NlZCB3aGVuIHRoZSBjaGlsZAorICAgIC8vIGRpc2Fw
cGVhcnMgZ2V0cyByZXBhaW50ZWQgcHJvcGVybHkuCisgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVz
dHJveWVkKCkgJiYgbm90aWZ5Q2hpbGRyZW4gPT0gTm90aWZ5Q2hpbGRyZW4gJiYgb2xkQ2hpbGQt
PmV2ZXJIYWRMYXlvdXQoKSkgeworICAgICAgICBvbGRDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CisgICAgICAgIC8vIFdlIG9ubHkgcmVwYWludCB8b2xkQ2hpbGR8
IGlmIHdlIGhhdmUgYSBSZW5kZXJMYXllciBhcyBpdHMgdmlzdWFsIG92ZXJmbG93IG1heSBub3Qg
YmUgdHJhY2tlZCBieSBpdHMgcGFyZW50LgorICAgICAgICBpZiAob2xkQ2hpbGQtPmlzQm9keSgp
KQorICAgICAgICAgICAgdmlldygpLnJlcGFpbnRSb290Q29udGVudHMoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb2xkQ2hpbGQtPnJlcGFpbnQoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBoYXZlIGEgbGluZSBib3ggd3JhcHBlciwgZGVsZXRlIGl0LgorICAgIGlmIChvbGRDaGlsZC0+
aXNCb3goKSkKKyAgICAgICAgdG9SZW5kZXJCb3gob2xkQ2hpbGQpLT5kZWxldGVMaW5lQm94V3Jh
cHBlcigpOworICAgIGVsc2UgaWYgKG9sZENoaWxkLT5pc0xpbmVCcmVhaygpKQorICAgICAgICB0
b1JlbmRlckxpbmVCcmVhayhvbGRDaGlsZCktPmRlbGV0ZUlubGluZUJveFdyYXBwZXIoKTsKKwor
ICAgIC8vIElmIG9sZENoaWxkIGlzIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHNlbGVjdGlvbiwg
dGhlbiBjbGVhciB0aGUgc2VsZWN0aW9uIHRvCisgICAgLy8gYXZvaWQgcHJvYmxlbXMgb2YgaW52
YWxpZCBwb2ludGVycy4KKyAgICAvLyBGSVhNRTogVGhlIEZyYW1lU2VsZWN0aW9uIHNob3VsZCBi
ZSByZXNwb25zaWJsZSBmb3IgdGhpcyB3aGVuIGl0CisgICAgLy8gaXMgbm90aWZpZWQgb2YgRE9N
IG11dGF0aW9ucy4KKyAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSAmJiBvbGRDaGls
ZC0+aXNTZWxlY3Rpb25Cb3JkZXIoKSkKKyAgICAgICAgdmlldygpLmNsZWFyU2VsZWN0aW9uKCk7
CisKKyAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSAmJiBub3RpZnlDaGlsZHJlbiA9
PSBOb3RpZnlDaGlsZHJlbikKKyAgICAgICAgb2xkQ2hpbGQtPndpbGxCZVJlbW92ZWRGcm9tVHJl
ZSgpOworCisgICAgLy8gV0FSTklORzogVGhlcmUgc2hvdWxkIGJlIG5vIGNvZGUgcnVubmluZyBi
ZXR3ZWVuIHdpbGxCZVJlbW92ZWRGcm9tVHJlZSBhbmQgdGhlIGFjdHVhbCByZW1vdmFsIGJlbG93
LgorICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVyZSB3
aWxsQmVSZW1vdmVkRnJvbVRyZWUgd291bGQgZGlydHkgdGhlIHRyZWUncyBzdHJ1Y3R1cmUKKyAg
ICAvLyBhbmQgdGhlIGNvZGUgcnVubmluZyBoZXJlIHdvdWxkIGZvcmNlIGFuIHVudGltZWx5IHJl
YnVpbGRpbmcsIGxlYXZpbmcgfG9sZENoaWxkfCBkYW5nbGluZy4KKworICAgIGlmIChvbGRDaGls
ZC0+cHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgIG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmco
KS0+c2V0TmV4dFNpYmxpbmcob2xkQ2hpbGQtPm5leHRTaWJsaW5nKCkpOworICAgIGlmIChvbGRD
aGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgb2xkQ2hpbGQtPm5leHRTaWJsaW5nKCktPnNl
dFByZXZpb3VzU2libGluZyhvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkpOworCisgICAgaWYg
KG1fZmlyc3RDaGlsZCA9PSBvbGRDaGlsZCkKKyAgICAgICAgbV9maXJzdENoaWxkID0gb2xkQ2hp
bGQtPm5leHRTaWJsaW5nKCk7CisgICAgaWYgKG1fbGFzdENoaWxkID09IG9sZENoaWxkKQorICAg
ICAgICBtX2xhc3RDaGlsZCA9IG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKKworICAgIG9s
ZENoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcoMCk7CisgICAgb2xkQ2hpbGQtPnNldE5leHRTaWJs
aW5nKDApOworICAgIG9sZENoaWxkLT5zZXRQYXJlbnQoMCk7CisKKyAgICAvLyByZW5kZXJlclJl
bW92ZWRGcm9tVHJlZSB3YWxrcyB0aGUgd2hvbGUgc3VidHJlZS4gV2UgY2FuIGltcHJvdmUgcGVy
Zm9ybWFuY2UKKyAgICAvLyBieSBza2lwcGluZyB0aGlzIHN0ZXAgd2hlbiBkZXN0cm95aW5nIHRo
ZSBlbnRpcmUgdHJlZS4KKyAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkKKyAgICAg
ICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJSZW1vdmVkRnJvbVRyZWUob2xkQ2hpbGQpOworCisg
ICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0
Q2FjaGUoKSkKKyAgICAgICAgY2FjaGUtPmNoaWxkcmVuQ2hhbmdlZCh0aGlzKTsKIH0KIAogc3Rh
dGljIHZvaWQgYWRkTGF5ZXJzKFJlbmRlck9iamVjdCogb2JqLCBSZW5kZXJMYXllciogcGFyZW50
TGF5ZXIsIFJlbmRlckVsZW1lbnQqJiBuZXdPYmplY3QsIFJlbmRlckxheWVyKiYgYmVmb3JlQ2hp
bGQpCkBAIC0zNDYsNSArNDgwLDExIEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6d2lsbEJlUmVtb3Zl
ZEZyb21UcmUKICAgICBSZW5kZXJPYmplY3Q6OndpbGxCZVJlbW92ZWRGcm9tVHJlZSgpOwogfQog
Cit2b2lkIFJlbmRlckVsZW1lbnQ6OndpbGxCZURlc3Ryb3llZCgpCit7CisgICAgZGVzdHJveUxl
ZnRvdmVyQ2hpbGRyZW4oKTsKKworICAgIFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCk7
Cit9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAko
cmV2aXNpb24gMTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOSBAQCBwdWJsaWM6CiAgICAgRWxlbWVu
dCogbm9uUHNldWRvRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChSZW5kZXJPYmpl
Y3Q6Om5vblBzZXVkb05vZGUoKSk7IH0KICAgICBFbGVtZW50KiBnZW5lcmF0aW5nRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVudChSZW5kZXJPYmplY3Q6OmdlbmVyYXRpbmdOb2RlKCkp
OyB9CiAKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IEZJTkFM
IHsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBsYXN0
Q2hpbGQoKSBjb25zdCBGSU5BTCB7IHJldHVybiBtX2xhc3RDaGlsZDsgfQorCiAgICAgdmlydHVh
bCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3Qq
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAgdmlydHVhbCB2
b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIHsgcmV0dXJuIGFkZENoaWxkKG5ld0NoaWxk
LCBiZWZvcmVDaGlsZCk7IH0KQEAgLTUxLDYgKzU0LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIG1v
dmVMYXllcnMoUmVuZGVyTGF5ZXIqIG9sZFBhcmVudCwgUmVuZGVyTGF5ZXIqIG5ld1BhcmVudCk7
CiAgICAgUmVuZGVyTGF5ZXIqIGZpbmROZXh0TGF5ZXIoUmVuZGVyTGF5ZXIqIHBhcmVudExheWVy
LCBSZW5kZXJPYmplY3QqIHN0YXJ0UG9pbnQsIGJvb2wgY2hlY2tQYXJlbnQgPSB0cnVlKTsKIAor
ICAgIGVudW0gTm90aWZ5Q2hpbGRyZW5UeXBlIHsgTm90aWZ5Q2hpbGRyZW4sIERvbnROb3RpZnlD
aGlsZHJlbiB9OworICAgIHZvaWQgaW5zZXJ0Q2hpbGRJbnRlcm5hbChSZW5kZXJPYmplY3QqLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJlblR5cGUpOworICAgIHZvaWQg
cmVtb3ZlQ2hpbGRJbnRlcm5hbChSZW5kZXJPYmplY3QqLCBOb3RpZnlDaGlsZHJlblR5cGUpOwor
CiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgUmVuZGVyRWxlbWVudChFbGVtZW50Kik7CiAKQEAg
LTU5LDE0ICs2NiwyMiBAQCBwcm90ZWN0ZWQ6CiAgICAgTGF5b3V0VW5pdCB2YWx1ZUZvckxlbmd0
aChjb25zdCBMZW5ndGgmLCBMYXlvdXRVbml0IG1heGltdW1WYWx1ZSwgYm9vbCByb3VuZFBlcmNl
bnRhZ2VzID0gZmFsc2UpIGNvbnN0OwogICAgIExheW91dFVuaXQgbWluaW11bVZhbHVlRm9yTGVu
Z3RoKGNvbnN0IExlbmd0aCYsIExheW91dFVuaXQgbWF4aW11bVZhbHVlLCBib29sIHJvdW5kUGVy
Y2VudGFnZXMgPSBmYWxzZSkgY29uc3Q7CiAKKyAgICB2b2lkIHNldEZpcnN0Q2hpbGQoUmVuZGVy
T2JqZWN0KiBjaGlsZCkgeyBtX2ZpcnN0Q2hpbGQgPSBjaGlsZDsgfQorICAgIHZvaWQgc2V0TGFz
dENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQpIHsgbV9sYXN0Q2hpbGQgPSBjaGlsZDsgfQorICAg
IHZvaWQgZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKKwogICAgIHZpcnR1YWwgdm9pZCBpbnNl
cnRlZEludG9UcmVlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZVJlbW92ZWRG
cm9tVHJlZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKSBP
VkVSUklERTsKIAogcHJpdmF0ZToKICAgICB2b2lkIG5vZGUoKSBjb25zdCBXVEZfREVMRVRFRF9G
VU5DVElPTjsKICAgICB2b2lkIG5vblBzZXVkb05vZGUoKSBjb25zdCBXVEZfREVMRVRFRF9GVU5D
VElPTjsKICAgICB2b2lkIGdlbmVyYXRpbmdOb2RlKCkgY29uc3QgV1RGX0RFTEVURURfRlVOQ1RJ
T047CiAgICAgdm9pZCBpc1RleHQoKSBjb25zdCBXVEZfREVMRVRFRF9GVU5DVElPTjsKKworICAg
IFJlbmRlck9iamVjdCogbV9maXJzdENoaWxkOworICAgIFJlbmRlck9iamVjdCogbV9sYXN0Q2hp
bGQ7CiB9OwogCiBpbmxpbmUgTGF5b3V0VW5pdCBSZW5kZXJFbGVtZW50Ojp2YWx1ZUZvckxlbmd0
aChjb25zdCBMZW5ndGgmIGxlbmd0aCwgTGF5b3V0VW5pdCBtYXhpbXVtVmFsdWUsIGJvb2wgcm91
bmRQZXJjZW50YWdlcykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24gMTU2MjUzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDk0LDcgKzQ5NCw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmxheW91dCgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoaXMgY29kZSBjb3BpZWQgZnJvbSBSZW5kZXJN
ZWRpYTo6bGF5b3V0KCkuCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IG1fY2hpbGRyZW4uZmly
c3RDaGlsZCgpOworICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7CiAKICAg
ICBpZiAoIWNoaWxkKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuaAkocmV2aXNpb24gMTU2MjUzKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDkgKzcyLDYgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBDdXJzb3JE
aXJlY3RpdmUgZ2V0Q3Vyc29yKGNvbnN0IExheW91dFBvaW50JiwgQ3Vyc29yJikgY29uc3QgT1ZF
UlJJREU7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRy
ZW4oKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIE9WRVJSSURFIEZJTkFMIHsg
cmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCkgT1ZFUlJJREU7CiAKQEAgLTEwMyw3ICsxMDAsNiBAQCBwcml2YXRlOgogICAgIExheW91
dFJlY3QgdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JCb3VuZHMoY29uc3QgTGF5b3V0UG9pbnQm
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVS
UklERSBGSU5BTDsKLSAgICAKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZVdpZGdldCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIGJvb2wgbV9oYXNGYWxsYmFja0NvbnRlbnQ7IC8vIEZJ
WE1FOiBUaGlzIGJlbG9uZ3Mgb24gSFRNTE9iamVjdEVsZW1lbnQuCkBAIC0xMTQsNyArMTEwLDYg
QEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV91bmF2YWlsYWJsZVBsdWdpblJlcGxhY2VtZW50VGV4
dDsKICAgICBib29sIG1fdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQ7CiAgICAg
Ym9vbCBtX21vdXNlRG93bldhc0luVW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3I7Ci0gICAgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAgICAgU3RyaW5nIG1fdW5hdmFpbGFiaWxp
dHlEZXNjcmlwdGlvbjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZVNldC5oCShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhbWVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDYgQEAgcHVi
bGljOgogCiAgICAgSFRNTEZyYW1lU2V0RWxlbWVudCYgZnJhbWVTZXRFbGVtZW50KCkgY29uc3Q7
CiAKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxk
cmVuLmZpcnN0Q2hpbGQoKTsgfQotICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3Qg
eyByZXR1cm4gbV9jaGlsZHJlbi5sYXN0Q2hpbGQoKTsgfQotCi0gICAgdmlydHVhbCBjb25zdCBS
ZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
Jm1fY2hpbGRyZW47IH0KLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRy
ZW4oKSBPVkVSUklERSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotCiAgICAgRnJhbWVFZGdlSW5m
byBlZGdlSW5mbygpIGNvbnN0OwogCiAgICAgYm9vbCB1c2VyUmVzaXplKE1vdXNlRXZlbnQqKTsK
QEAgLTEwMiw2ICs5Niw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFs
bG93ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIEN1cnNvckRpcmVjdGl2ZSBnZXRDdXJzb3IoY29uc3QgTGF5b3V0UG9pbnQmLCBDdXJz
b3ImKSBjb25zdCBPVkVSUklERTsKIApAQCAtMTI0LDggKzExOSw2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBwYWludFJvd0JvcmRlcihjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAg
ICAgdm9pZCBwYWludENvbHVtbkJvcmRlcihjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAKLSAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QgbV9jaGlsZHJlbjsKLQogICAgIEdyaWRB
eGlzIG1fcm93czsKICAgICBHcmlkQXhpcyBtX2NvbHM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEs
NyArODEsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6d2lsbEJlRGVzdHJveWVkKCkKIAogICAgIC8v
IE1ha2Ugc3VyZSB0byBkZXN0cm95IGFub255bW91cyBjaGlsZHJlbiBmaXJzdCB3aGlsZSB0aGV5
IGFyZSBzdGlsbCBjb25uZWN0ZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIHRyZWUsIHNvIHRoYXQgdGhl
eSB3aWxsCiAgICAgLy8gcHJvcGVybHkgZGlydHkgbGluZSBib3hlcyB0aGF0IHRoZXkgYXJlIHJl
bW92ZWQgZnJvbS4gIEVmZmVjdHMgdGhhdCBkbyA6YmVmb3JlLzphZnRlciBvbmx5IG9uIGhvdmVy
IGNvdWxkIGNyYXNoIG90aGVyd2lzZS4KLSAgICBjaGlsZHJlbigpLT5kZXN0cm95TGVmdG92ZXJD
aGlsZHJlbigpOworICAgIGRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7CiAKICAgICAvLyBEZXN0
cm95IG91ciBjb250aW51YXRpb24gYmVmb3JlIGFueXRoaW5nIG90aGVyIHRoYW4gYW5vbnltb3Vz
IGNoaWxkcmVuLgogICAgIC8vIFRoZSByZWFzb24gd2UgZG9uJ3QgZGVzdHJveSBpdCBiZWZvcmUg
YW5vbnltb3VzIGNoaWxkcmVuIGlzIHRoYXQgdGhleSBtYXkKQEAgLTM2Niw3ICszNjYsOCBAQCB2
b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAgICAgd2hpbGUgKG8pIHsK
ICAgICAgICAgUmVuZGVyT2JqZWN0KiB0bXAgPSBvOwogICAgICAgICBvID0gdG1wLT5uZXh0U2li
bGluZygpOwotICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihjaGlsZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUodGhpcywgdG1wKSwgMCk7CisgICAgICAgIHJl
bW92ZUNoaWxkSW50ZXJuYWwodG1wLCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgIGNsb25lSW5s
aW5lLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKHRtcCwgMCk7CiAgICAgICAgIHRtcC0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgfQogCkBAIC00MDcsNyAr
NDA4LDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgICAg
ICAgICAgd2hpbGUgKG8pIHsKICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHRtcCA9IG87
CiAgICAgICAgICAgICAgICAgbyA9IHRtcC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAg
ICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihpbmxpbmVDdXJyLT5j
aGlsZHJlbigpLT5yZW1vdmVDaGlsZE5vZGUoY3VyciwgdG1wKSwgMCk7CisgICAgICAgICAgICAg
ICAgaW5saW5lQ3Vyci0+cmVtb3ZlQ2hpbGRJbnRlcm5hbCh0bXAsIE5vdGlmeUNoaWxkcmVuKTsK
KyAgICAgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bih0bXAsIDApOwogICAgICAgICAgICAgICAgIHRtcC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxOSw3ICs0MjEsNyBA
QCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAgICAgfQogCiAgICAg
Ly8gTm93IHdlIGFyZSBhdCB0aGUgYmxvY2sgbGV2ZWwuIFdlIG5lZWQgdG8gcHV0IHRoZSBjbG9u
ZSBpbnRvIHRoZSB0b0Jsb2NrLgotICAgIHRvQmxvY2stPmNoaWxkcmVuKCktPmFwcGVuZENoaWxk
Tm9kZSh0b0Jsb2NrLCBjbG9uZUlubGluZSk7CisgICAgdG9CbG9jay0+aW5zZXJ0Q2hpbGRJbnRl
cm5hbChjbG9uZUlubGluZSwgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogCiAgICAgLy8gTm93
IHRha2UgYWxsIHRoZSBjaGlsZHJlbiBhZnRlciBjdXJyQ2hpbGQgYW5kIHJlbW92ZSB0aGVtIGZy
b20gdGhlIGZyb21CbG9jawogICAgIC8vIGFuZCBwdXQgdGhlbSBpbiB0aGUgdG9CbG9jay4KQEAg
LTQyNyw3ICs0MjksOCBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJs
CiAgICAgd2hpbGUgKG8pIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiB0bXAgPSBvOwogICAgICAg
ICBvID0gdG1wLT5uZXh0U2libGluZygpOwotICAgICAgICB0b0Jsb2NrLT5jaGlsZHJlbigpLT5h
cHBlbmRDaGlsZE5vZGUodG9CbG9jaywgZnJvbUJsb2NrLT5jaGlsZHJlbigpLT5yZW1vdmVDaGls
ZE5vZGUoZnJvbUJsb2NrLCB0bXApKTsKKyAgICAgICAgZnJvbUJsb2NrLT5yZW1vdmVDaGlsZElu
dGVybmFsKHRtcCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICB0b0Jsb2NrLT5pbnNlcnRDaGls
ZEludGVybmFsKHRtcCwgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogICAgIH0KIH0KIApAQCAt
NDU3LDkgKzQ2MCw5IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMK
IAogICAgIFJlbmRlck9iamVjdCogYm94Rmlyc3QgPSBtYWRlTmV3QmVmb3JlQmxvY2sgPyBibG9j
ay0+Zmlyc3RDaGlsZCgpIDogcHJlLT5uZXh0U2libGluZygpOwogICAgIGlmIChtYWRlTmV3QmVm
b3JlQmxvY2spCi0gICAgICAgIGJsb2NrLT5jaGlsZHJlbigpLT5pbnNlcnRDaGlsZE5vZGUoYmxv
Y2ssIHByZSwgYm94Rmlyc3QpOwotICAgIGJsb2NrLT5jaGlsZHJlbigpLT5pbnNlcnRDaGlsZE5v
ZGUoYmxvY2ssIG5ld0Jsb2NrQm94LCBib3hGaXJzdCk7Ci0gICAgYmxvY2stPmNoaWxkcmVuKCkt
Pmluc2VydENoaWxkTm9kZShibG9jaywgcG9zdCwgYm94Rmlyc3QpOworICAgICAgICBibG9jay0+
aW5zZXJ0Q2hpbGRJbnRlcm5hbChwcmUsIGJveEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7CisgICAg
YmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwobmV3QmxvY2tCb3gsIGJveEZpcnN0LCBOb3RpZnlD
aGlsZHJlbik7CisgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwocG9zdCwgYm94Rmlyc3Qs
IE5vdGlmeUNoaWxkcmVuKTsKICAgICBibG9jay0+c2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwog
ICAgIAogICAgIGlmIChtYWRlTmV3QmVmb3JlQmxvY2spIHsKQEAgLTQ2Nyw3ICs0NzAsOCBAQCB2
b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjCiAgICAgICAgIHdoaWxlIChv
KSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAgICAgIG8gPSBu
by0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHByZS0+Y2hpbGRyZW4oKS0+YXBwZW5kQ2hp
bGROb2RlKHByZSwgYmxvY2stPmNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZShibG9jaywgbm8p
KTsKKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVDaGlsZEludGVybmFsKG5vLCBOb3RpZnlDaGls
ZHJlbik7CisgICAgICAgICAgICBwcmUtPmluc2VydENoaWxkSW50ZXJuYWwobm8sIG51bGxwdHIs
IE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNjEsNyArMTI2NSw3IEBAIHZv
aWQgUmVuZGVySW5saW5lOjpjaGlsZEJlY2FtZU5vbklubGluZSgKICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogb2xkQ29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7CiAgICAgc2V0Q29udGlu
dWF0aW9uKG5ld0JveCk7CiAgICAgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpOwotICAgIGNoaWxkcmVuKCktPnJlbW92ZUNoaWxkTm9kZSh0aGlzLCBjaGls
ZCk7CisgICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbChjaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwogICAg
IHNwbGl0RmxvdyhiZWZvcmVDaGlsZCwgbmV3Qm94LCBjaGlsZCwgb2xkQ29udGludWF0aW9uKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNp
b24gMTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZW5k
ZXJJbmxpbmUqIGNyZWF0ZUFub255bW91cyhEb2N1bWVudCYpOwogCi0gICAgUmVuZGVyT2JqZWN0
KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5maXJzdENoaWxkKCk7IH0K
LSAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4u
bGFzdENoaWxkKCk7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3Qq
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgT1ZFUlJJREU7CiAKICAg
ICB2aXJ0dWFsIExheW91dFVuaXQgbWFyZ2luTGVmdCgpIGNvbnN0IE9WRVJSSURFIEZJTkFMOwpA
QCAtOTksMTIgKzk2LDEwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIE9WRVJS
SURFOwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
KiBjaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9
Ci0gICAgdmlydHVhbCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgT1ZFUlJJREUg
RklOQUwgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KLQogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
SW5saW5lKCkgY29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiB0
cnVlOyB9CiAKICAgICBMYXlvdXRSZWN0IGN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRp
bmdCb3goKSBjb25zdDsKICAgICBJbmxpbmVCb3gqIGN1bGxlZElubGluZUZpcnN0TGluZUJveCgp
IGNvbnN0OwpAQCAtMTc4LDcgKzE3Myw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIG5leHRMaW5lLCBjb25zdCBDb2xvcik7CiAgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIGNvbnRpbnVhdGlvbkJlZm9yZShSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKTsKIAotICAgIFJlbmRlck9iamVjdENoaWxkTGlzdCBtX2NoaWxkcmVuOwogICAg
IFJlbmRlckxpbmVCb3hMaXN0IG1fbGluZUJveGVzOyAgIC8vIEFsbCBvZiB0aGUgbGluZSBib3hl
cyBjcmVhdGVkIGZvciB0aGlzIGlubGluZSBmbG93LiAgRm9yIGV4YW1wbGUsIDxpPkhlbGxvPGJy
PndvcmxkLjwvaT4gd2lsbCBoYXZlIHR3byA8aT4gbGluZSBib3hlcy4KIAogICAgIGJvb2wgbV9h
bHdheXNDcmVhdGVMaW5lQm94ZXMgOiAxOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMTU2MjUzKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6d2lsbEJlRGVzdHIKICAgICB9CiAKICAgICAvLyBSZW5kZXJPYmplY3Q6OndpbGxCZURlc3Ry
b3llZCBjYWxscyBiYWNrIHRvIGRlc3Ryb3lMYXllcigpIGZvciBsYXllciBkZXN0cnVjdGlvbgot
ICAgIFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCk7CisgICAgUmVuZGVyRWxlbWVudDo6
d2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5
bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3
U3R5bGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5o
CShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJyZWFrLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDggQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICB2b2lkIG5vZGUoKSBjb25zdCBXVEZfREVMRVRFRF9GVU5DVElPTjsKIAorICAgIHZp
cnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxz
ZTsgfQorCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25z
dCBMYXlvdXRQb2ludCYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgaW50IGNhcmV0TWluT2Zmc2V0
KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25z
dCBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuaAkocmV2aXNpb24gMTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIE9WRVJS
SURFOwogCiAgICAgdmlydHVhbCBib29sIGlzTGlzdE1hcmtlcigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWVkaWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNZWRpYS5jcHAJKHJldmlzaW9uIDE1NjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZWRpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBS
ZW5kZXJNZWRpYTo6bGF5b3V0KCkKIAogICAgIFJlbmRlckltYWdlOjpsYXlvdXQoKTsKIAotICAg
IFJlbmRlckJveCogY29udHJvbHNSZW5kZXJlciA9IHRvUmVuZGVyQm94KG1fY2hpbGRyZW4uZmly
c3RDaGlsZCgpKTsKKyAgICBSZW5kZXJCb3gqIGNvbnRyb2xzUmVuZGVyZXIgPSB0b1JlbmRlckJv
eChmaXJzdENoaWxkKCkpOwogICAgIGlmICghY29udHJvbHNSZW5kZXJlcikKICAgICAgICAgcmV0
dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAkocmV2aXNp
b24gMTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDEyICs0MSw2IEBAIHB1YmxpYzoKIAogICAgIEhUTUxNZWRpYUVs
ZW1lbnQmIG1lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvSFRNTE1lZGlhRWxlbWVudChu
b2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQo
KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuLmZpcnN0Q2hpbGQoKTsgfQotICAgIFJlbmRlck9i
amVjdCogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5sYXN0Q2hpbGQoKTsg
fQotCi0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkg
Y29uc3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KLSAgICB2aXJ0dWFs
IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBPVkVSUklERSBGSU5BTCB7IHJldHVy
biAmbV9jaGlsZHJlbjsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwogCkBAIC02MSw4ICs1NSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVw
bGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBPVkVSUklERTsKIAogICAgIHZp
cnR1YWwgYm9vbCByZXF1aXJlc0ZvcmNlZFN0eWxlUmVjYWxjUHJvcGFnYXRpb24oKSBjb25zdCBP
VkVSUklERSBGSU5BTCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBSZW5kZXJPYmplY3RDaGlsZExp
c3QgbV9jaGlsZHJlbjsKIH07CiAKIGlubGluZSBSZW5kZXJNZWRpYSogdG9SZW5kZXJNZWRpYShS
ZW5kZXJPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2Myw5ICsxNjYzLDkgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OmhhbmRsZUR5bmFtaWNGbG9hdFBvcwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIC8vIEFuIGFub255bW91cyBibG9jayBtdXN0IGJlIG1hZGUgdG8gd3JhcCB0
aGlzIGlubGluZS4KICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IHRvUmVuZGVyQmxv
Y2socGFyZW50KCkpLT5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOwotICAgICAgICAgICAgUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0KiBjaGlsZGxpc3QgPSBwYXJlbnQoKS0+Y2hpbGRyZW4oKTsKLSAgICAg
ICAgICAgIGNoaWxkbGlzdC0+aW5zZXJ0Q2hpbGROb2RlKHBhcmVudCgpLCBibG9jaywgdGhpcyk7
Ci0gICAgICAgICAgICBibG9jay0+Y2hpbGRyZW4oKS0+YXBwZW5kQ2hpbGROb2RlKGJsb2NrLCBj
aGlsZGxpc3QtPnJlbW92ZUNoaWxkTm9kZShwYXJlbnQoKSwgdGhpcykpOworICAgICAgICAgICAg
cGFyZW50KCktPmluc2VydENoaWxkSW50ZXJuYWwoYmxvY2ssIHRoaXMsIFJlbmRlckVsZW1lbnQ6
Ok5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZEludGVy
bmFsKHRoaXMsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIGJs
b2NrLT5pbnNlcnRDaGlsZEludGVybmFsKHRoaXMsIDAsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNo
aWxkcmVuKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI0MTAsMTEgKzI0MTAsNiBAQCBpbmxp
bmUgdm9pZCBSZW5kZXJPYmplY3Q6OmNsZWFyTGF5b3V0Um9vCiAKIHZvaWQgUmVuZGVyT2JqZWN0
Ojp3aWxsQmVEZXN0cm95ZWQoKQogewotICAgIC8vIERlc3Ryb3kgYW55IGxlZnRvdmVyIGFub255
bW91cyBjaGlsZHJlbi4KLSAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuID0gdGhp
cy0+Y2hpbGRyZW4oKTsKLSAgICBpZiAoY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkcmVuLT5kZXN0
cm95TGVmdG92ZXJDaGlsZHJlbigpOwotCiAgICAgLy8gSWYgdGhpcyByZW5kZXJlciBpcyBiZWlu
ZyBhdXRvc2Nyb2xsZWQsIHN0b3AgdGhlIGF1dG9zY3JvbGwgdGltZXIKICAgICAKICAgICAvLyBG
SVhNRTogUmVuZGVyT2JqZWN0OjpkZXN0cm95IHNob3VsZCBub3QgZ2V0IGNhbGxlZCB3aXRoIGEg
cmVuZGVyZXIgd2hvc2UgZG9jdW1lbnQKQEAgLTI1MjAsMTEgKzI1MTUsOSBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6cmVtb3ZlRnJvbVJlbmRlckZsb3dUCiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1v
dmVGcm9tUmVuZGVyRmxvd1RocmVhZFJlY3Vyc2l2ZShSZW5kZXJGbG93VGhyZWFkKiByZW5kZXJG
bG93VGhyZWFkKQogewotICAgIGlmIChjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxk
cmVuID0gdGhpcy0+Y2hpbGRyZW4oKSkgewotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hp
bGQgPSBjaGlsZHJlbi0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKLSAgICAgICAgICAgIGNoaWxkLT5yZW1vdmVGcm9tUmVuZGVyRmxvd1RocmVhZFJl
Y3Vyc2l2ZShyZW5kZXJGbG93VGhyZWFkKTsKLSAgICB9Ci0gICAgCisgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKKyAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21SZW5kZXJGbG93VGhyZWFkUmVjdXJz
aXZlKHJlbmRlckZsb3dUaHJlYWQpOworCiAgICAgUmVuZGVyRmxvd1RocmVhZCogbG9jYWxGbG93
VGhyZWFkID0gcmVuZGVyRmxvd1RocmVhZDsKICAgICBpZiAoZmxvd1RocmVhZFN0YXRlKCkgPT0g
SW5zaWRlSW5GbG93VGhyZWFkKQogICAgICAgICBsb2NhbEZsb3dUaHJlYWQgPSBmbG93VGhyZWFk
Q29udGFpbmluZ0Jsb2NrKCk7IC8vIFdlIGhhdmUgdG8gYXNrLiBXZSBjYW4ndCBqdXN0IGFzc3Vt
ZSB3ZSBhcmUgaW4gdGhlIHNhbWUgZmxvdyB0aHJlYWQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYg
QEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5j
bHVkZSAiUGFpbnRQaGFzZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdENoaWxkTGlzdC5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKICNp
bmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKQEAgLTE0OCw3ICsxNDcsNiBAQCBjbGFzcyBS
ZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VDCiAgICAgZnJpZW5kIGNsYXNzIFJlbmRl
ckJsb2NrOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlckxheWVyOwotICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJPYmplY3RDaGlsZExpc3Q7
CiBwdWJsaWM6CiAgICAgLy8gQW5vbnltb3VzIG9iamVjdHMgc2hvdWxkIHBhc3MgdGhlIGRvY3Vt
ZW50IGFzIHRoZWlyIG5vZGUsIGFuZCB0aGV5IHdpbGwgdGhlbiBhdXRvbWF0aWNhbGx5IGJlCiAg
ICAgLy8gbWFya2VkIGFzIGFub255bW91cyBpbiB0aGUgY29uc3RydWN0b3IuCkBAIC0xNjYsMjUg
KzE2NCw5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9uZXh0OyB9CiAKICAgICAvLyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIHJlbmFt
ZWQgc2xvd0ZpcnN0Q2hpbGQsIHNsb3dMYXN0Q2hpbGQsIGV0Yy4KLSAgICAvLyB0byBkaXNjb3Vy
YWdlIHRoZWlyIHVzZS4gVGhlIHZpcnR1YWwgY2FsbCB0byBjaGlsZHJlbiBpbnNpZGUgdGhlc2UK
LSAgICAvLyBjYW4gYmUgc2xvdyBmb3IgaG90IGNvZGUgcGF0aHMuCi0gICAgLy8gRGVyaXZlZCBj
bGFzc2VzIGxpa2UgUmVuZGVyQmxvY2sgb3ZlcnJpZGUgdGhlc2Ugbm9uLXZpcnR1YWwKLSAgICAv
LyBmdW5jdGlvbnMgdG8gbWFrZSB0aGVtIGZhc3Qgd2hlbiB3ZSBhbHJlYWR5IGhhdmUgYSBtb3Jl
IHNwZWNpZmljIHBvaW50ZXIgdHlwZS4KLSAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hp
bGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpKQotICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLT5m
aXJzdENoaWxkKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBSZW5kZXJPYmplY3Qq
IGxhc3RDaGlsZCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoY29uc3QgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0KiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCkpCi0gICAgICAgICAgICByZXR1
cm4gY2hpbGRyZW4tPmxhc3RDaGlsZCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSB7IHJldHVybiAwOyB9
Ci0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIC8vIHRvIGRpc2NvdXJhZ2UgdGhlaXIgdXNlLgorICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsg
fQorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9CiAKICAgICBSZW5kZXJPYmplY3QqIG5leHRJblByZU9yZGVyKCkgY29uc3Q7CiAg
ICAgUmVuZGVyT2JqZWN0KiBuZXh0SW5QcmVPcmRlcihjb25zdCBSZW5kZXJPYmplY3QqIHN0YXlX
aXRoaW4pIGNvbnN0OwpAQCAtMjcwLDcgKzI1Miw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBS
ZW5kZXJPYmplY3QgdHJlZSBtYW5pcHVsYXRpb24KICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gY2hpbGRyZW4oKTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hp
bGRyZW4oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVHZW5lcmF0ZWRDaGls
ZHJlbigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVzQW5vbnltb3VzV3JhcHBlcigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCkBAIC0yODEsNiArMjYzLDggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQg
c2V0UHJldmlvdXNTaWJsaW5nKFJlbmRlck9iamVjdCogcHJldmlvdXMpIHsgbV9wcmV2aW91cyA9
IHByZXZpb3VzOyB9CiAgICAgdm9pZCBzZXROZXh0U2libGluZyhSZW5kZXJPYmplY3QqIG5leHQp
IHsgbV9uZXh0ID0gbmV4dDsgfQogICAgIHZvaWQgc2V0UGFyZW50KFJlbmRlckVsZW1lbnQqKTsK
KworICAgIGZyaWVuZCBSZW5kZXJFbGVtZW50OwogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwogcHJpdmF0ZToKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmNwcAko
cmV2aXNpb24gMTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dENoaWxkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0LmgiCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCi0jaW5j
bHVkZSAiUmVuZGVyQ291bnRlci5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNs
dWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIFJlbmRlck9i
amVjdENoaWxkTGlzdDo6ZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKQotewotICAgIHdoaWxlIChm
aXJzdENoaWxkKCkpIHsKLSAgICAgICAgaWYgKGZpcnN0Q2hpbGQoKS0+aXNMaXN0TWFya2VyKCkg
fHwgKGZpcnN0Q2hpbGQoKS0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSICYm
ICFmaXJzdENoaWxkKCktPmlzVGV4dCgpKSkKLSAgICAgICAgICAgIGZpcnN0Q2hpbGQoKS0+cmVt
b3ZlRnJvbVBhcmVudCgpOyAvLyBMaXN0IG1hcmtlcnMgYXJlIG93bmVkIGJ5IHRoZWlyIGVuY2xv
c2luZyBsaXN0IGFuZCBzbyBkb24ndCBnZXQgZGVzdHJveWVkIGJ5IHRoaXMgY29udGFpbmVyLiBT
aW1pbGFybHksIGZpcnN0IGxldHRlcnMgYXJlIGRlc3Ryb3llZCBieSB0aGVpciByZW1haW5pbmcg
dGV4dCBmcmFnbWVudC4KLSAgICAgICAgZWxzZSBpZiAoZmlyc3RDaGlsZCgpLT5pc1J1bkluKCkg
JiYgZmlyc3RDaGlsZCgpLT5ub2RlKCkpIHsKLSAgICAgICAgICAgIGZpcnN0Q2hpbGQoKS0+bm9k
ZSgpLT5zZXRSZW5kZXJlcigwKTsKLSAgICAgICAgICAgIGZpcnN0Q2hpbGQoKS0+bm9kZSgpLT5z
ZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgICAgICAgICBmaXJzdENoaWxkKCktPmRlc3Ryb3ko
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIERlc3Ryb3kgYW55IGFub255bW91
cyBjaGlsZHJlbiByZW1haW5pbmcgaW4gdGhlIHJlbmRlciB0cmVlLCBhcyB3ZWxsIGFzIGltcGxp
Y2l0IChzaGFkb3cpIERPTSBlbGVtZW50cyBsaWtlIHRob3NlIHVzZWQgaW4gdGhlIGVuZ2luZS1i
YXNlZCB0ZXh0IGZpZWxkcy4KLSAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKCktPm5vZGUoKSkK
LSAgICAgICAgICAgICAgICBmaXJzdENoaWxkKCktPm5vZGUoKS0+c2V0UmVuZGVyZXIoMCk7Ci0g
ICAgICAgICAgICBmaXJzdENoaWxkKCktPmRlc3Ryb3koKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3RDaGlsZExpc3Q6OnJlbW92ZUNoaWxkTm9kZShS
ZW5kZXJFbGVtZW50KiBvd25lciwgUmVuZGVyT2JqZWN0KiBvbGRDaGlsZCwgYm9vbCBub3RpZnlS
ZW5kZXJlcikKLXsKLSAgICBBU1NFUlQob2xkQ2hpbGQtPnBhcmVudCgpID09IG93bmVyKTsKLQot
ICAgIGlmIChvbGRDaGlsZC0+aXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQotICAg
ICAgICB0b1JlbmRlckJveChvbGRDaGlsZCktPnJlbW92ZUZsb2F0aW5nT3JQb3NpdGlvbmVkQ2hp
bGRGcm9tQmxvY2tMaXN0cygpOwotCi0gICAgLy8gU28gdGhhdCB3ZSdsbCBnZXQgdGhlIGFwcHJv
cHJpYXRlIGRpcnR5IGJpdCBzZXQgKGVpdGhlciB0aGF0IGEgbm9ybWFsIGZsb3cgY2hpbGQgZ290
IHlhbmtlZCBvcgotICAgIC8vIHRoYXQgYSBwb3NpdGlvbmVkIGNoaWxkIGdvdCB5YW5rZWQpLiBX
ZSBhbHNvIHJlcGFpbnQsIHNvIHRoYXQgdGhlIGFyZWEgZXhwb3NlZCB3aGVuIHRoZSBjaGlsZAot
ICAgIC8vIGRpc2FwcGVhcnMgZ2V0cyByZXBhaW50ZWQgcHJvcGVybHkuCi0gICAgaWYgKCFvd25l
ci0+ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpICYmIG5vdGlmeVJlbmRlcmVyICYmIG9sZENoaWxk
LT5ldmVySGFkTGF5b3V0KCkpIHsKLSAgICAgICAgb2xkQ2hpbGQtPnNldE5lZWRzTGF5b3V0QW5k
UHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICAvLyBXZSBvbmx5IHJlcGFpbnQgfG9sZENoaWxk
fCBpZiB3ZSBoYXZlIGEgUmVuZGVyTGF5ZXIgYXMgaXRzIHZpc3VhbCBvdmVyZmxvdyBtYXkgbm90
IGJlIHRyYWNrZWQgYnkgaXRzIHBhcmVudC4KLSAgICAgICAgaWYgKG9sZENoaWxkLT5pc0JvZHko
KSkKLSAgICAgICAgICAgIG93bmVyLT52aWV3KCkucmVwYWludFJvb3RDb250ZW50cygpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBvbGRDaGlsZC0+cmVwYWludCgpOwotICAgIH0KLQotICAg
IC8vIElmIHdlIGhhdmUgYSBsaW5lIGJveCB3cmFwcGVyLCBkZWxldGUgaXQuCi0gICAgaWYgKG9s
ZENoaWxkLT5pc0JveCgpKQotICAgICAgICB0b1JlbmRlckJveChvbGRDaGlsZCktPmRlbGV0ZUxp
bmVCb3hXcmFwcGVyKCk7Ci0gICAgZWxzZSBpZiAob2xkQ2hpbGQtPmlzTGluZUJyZWFrKCkpCi0g
ICAgICAgIHRvUmVuZGVyTGluZUJyZWFrKG9sZENoaWxkKS0+ZGVsZXRlSW5saW5lQm94V3JhcHBl
cigpOwotCi0gICAgLy8gSWYgb2xkQ2hpbGQgaXMgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgc2Vs
ZWN0aW9uLCB0aGVuIGNsZWFyIHRoZSBzZWxlY3Rpb24gdG8KLSAgICAvLyBhdm9pZCBwcm9ibGVt
cyBvZiBpbnZhbGlkIHBvaW50ZXJzLgotICAgIC8vIEZJWE1FOiBUaGUgRnJhbWVTZWxlY3Rpb24g
c2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzIHdoZW4gaXQKLSAgICAvLyBpcyBub3RpZmll
ZCBvZiBET00gbXV0YXRpb25zLgotICAgIGlmICghb3duZXItPmRvY3VtZW50QmVpbmdEZXN0cm95
ZWQoKSAmJiBvbGRDaGlsZC0+aXNTZWxlY3Rpb25Cb3JkZXIoKSkKLSAgICAgICAgb3duZXItPnZp
ZXcoKS5jbGVhclNlbGVjdGlvbigpOwotCi0gICAgaWYgKCFvd25lci0+ZG9jdW1lbnRCZWluZ0Rl
c3Ryb3llZCgpICYmIG5vdGlmeVJlbmRlcmVyKQotICAgICAgICBvbGRDaGlsZC0+d2lsbEJlUmVt
b3ZlZEZyb21UcmVlKCk7Ci0KLSAgICAvLyBXQVJOSU5HOiBUaGVyZSBzaG91bGQgYmUgbm8gY29k
ZSBydW5uaW5nIGJldHdlZW4gd2lsbEJlUmVtb3ZlZEZyb21UcmVlIGFuZCB0aGUgYWN0dWFsIHJl
bW92YWwgYmVsb3cuCi0gICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgcmFjZSBjb25kaXRp
b25zIHdoZXJlIHdpbGxCZVJlbW92ZWRGcm9tVHJlZSB3b3VsZCBkaXJ0eSB0aGUgdHJlZSdzIHN0
cnVjdHVyZQotICAgIC8vIGFuZCB0aGUgY29kZSBydW5uaW5nIGhlcmUgd291bGQgZm9yY2UgYW4g
dW50aW1lbHkgcmVidWlsZGluZywgbGVhdmluZyB8b2xkQ2hpbGR8IGRhbmdsaW5nLgotCi0gICAg
aWYgKG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAgb2xkQ2hpbGQtPnByZXZp
b3VzU2libGluZygpLT5zZXROZXh0U2libGluZyhvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKSk7Ci0g
ICAgaWYgKG9sZENoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBvbGRDaGlsZC0+bmV4dFNp
YmxpbmcoKS0+c2V0UHJldmlvdXNTaWJsaW5nKG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7
Ci0KLSAgICBpZiAoZmlyc3RDaGlsZCgpID09IG9sZENoaWxkKQotICAgICAgICBzZXRGaXJzdENo
aWxkKG9sZENoaWxkLT5uZXh0U2libGluZygpKTsKLSAgICBpZiAobGFzdENoaWxkKCkgPT0gb2xk
Q2hpbGQpCi0gICAgICAgIHNldExhc3RDaGlsZChvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkp
OwotCi0gICAgb2xkQ2hpbGQtPnNldFByZXZpb3VzU2libGluZygwKTsKLSAgICBvbGRDaGlsZC0+
c2V0TmV4dFNpYmxpbmcoMCk7Ci0gICAgb2xkQ2hpbGQtPnNldFBhcmVudCgwKTsKLQotICAgIC8v
IHJlbmRlcmVyUmVtb3ZlZEZyb21UcmVlIHdhbGtzIHRoZSB3aG9sZSBzdWJ0cmVlLiBXZSBjYW4g
aW1wcm92ZSBwZXJmb3JtYW5jZQotICAgIC8vIGJ5IHNraXBwaW5nIHRoaXMgc3RlcCB3aGVuIGRl
c3Ryb3lpbmcgdGhlIGVudGlyZSB0cmVlLgotICAgIGlmICghb3duZXItPmRvY3VtZW50QmVpbmdE
ZXN0cm95ZWQoKSkKLSAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJSZW1vdmVkRnJvbVRy
ZWUob2xkQ2hpbGQpOwotCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gb3duZXItPmRv
Y3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgIGNhY2hlLT5jaGlsZHJl
bkNoYW5nZWQob3duZXIpOwotCi0gICAgcmV0dXJuIG9sZENoaWxkOwotfQotCi12b2lkIFJlbmRl
ck9iamVjdENoaWxkTGlzdDo6aW5zZXJ0Q2hpbGROb2RlKFJlbmRlckVsZW1lbnQqIG93bmVyLCBS
ZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBib29sIG5v
dGlmeVJlbmRlcmVyKQotewotICAgIEFTU0VSVCghbmV3Q2hpbGQtPnBhcmVudCgpKTsKLSAgICBB
U1NFUlQoIW93bmVyLT5pc1JlbmRlckJsb2NrRmxvdygpIHx8ICghbmV3Q2hpbGQtPmlzVGFibGVT
ZWN0aW9uKCkgJiYgIW5ld0NoaWxkLT5pc1RhYmxlUm93KCkgJiYgIW5ld0NoaWxkLT5pc1RhYmxl
Q2VsbCgpKSk7Ci0KLSAgICB3aGlsZSAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVu
dCgpICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSBvd25lcikKLSAgICAgICAgYmVmb3JlQ2hp
bGQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBo
YXBwZW4sIGJ1dCBpZiBpdCBkb2VzIHByZXZlbnQgcmVuZGVyIHRyZWUgY29ycnVwdGlvbgotICAg
IC8vIHdoZXJlIGNoaWxkLT5wYXJlbnQoKSBlbmRzIHVwIGJlaW5nIG93bmVyIGJ1dCBjaGlsZC0+
bmV4dFNpYmxpbmcoKS0+cGFyZW50KCkKLSAgICAvLyBpcyBub3Qgb3duZXIuCi0gICAgaWYgKGJl
Zm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSBvd25lcikgewotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5ld0No
aWxkLT5zZXRQYXJlbnQob3duZXIpOwotCi0gICAgaWYgKGZpcnN0Q2hpbGQoKSA9PSBiZWZvcmVD
aGlsZCkKLSAgICAgICAgc2V0Rmlyc3RDaGlsZChuZXdDaGlsZCk7Ci0KLSAgICBpZiAoYmVmb3Jl
Q2hpbGQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91c1NpYmxpbmcgPSBiZWZvcmVD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcpCi0g
ICAgICAgICAgICBwcmV2aW91c1NpYmxpbmctPnNldE5leHRTaWJsaW5nKG5ld0NoaWxkKTsKLSAg
ICAgICAgbmV3Q2hpbGQtPnNldFByZXZpb3VzU2libGluZyhwcmV2aW91c1NpYmxpbmcpOwotICAg
ICAgICBuZXdDaGlsZC0+c2V0TmV4dFNpYmxpbmcoYmVmb3JlQ2hpbGQpOwotICAgICAgICBiZWZv
cmVDaGlsZC0+c2V0UHJldmlvdXNTaWJsaW5nKG5ld0NoaWxkKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAobGFzdENoaWxkKCkpCi0gICAgICAgICAgICBsYXN0Q2hpbGQoKS0+c2V0TmV4dFNp
YmxpbmcobmV3Q2hpbGQpOwotICAgICAgICBuZXdDaGlsZC0+c2V0UHJldmlvdXNTaWJsaW5nKGxh
c3RDaGlsZCgpKTsKLSAgICAgICAgc2V0TGFzdENoaWxkKG5ld0NoaWxkKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIW93bmVyLT5kb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgbm90aWZ5UmVuZGVyZXIp
Ci0gICAgICAgIG5ld0NoaWxkLT5pbnNlcnRlZEludG9UcmVlKCk7Ci0KLSAgICBpZiAoIW93bmVy
LT5kb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsKLSAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVu
ZGVyZXJTdWJ0cmVlQXR0YWNoZWQobmV3Q2hpbGQpOwotICAgIH0KLQotICAgIG5ld0NoaWxkLT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICBvd25lci0+c2V0UHJlZmVy
cmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUpOwotICAgIGlmICghb3duZXItPm5vcm1hbENoaWxk
TmVlZHNMYXlvdXQoKSkKLSAgICAgICAgb3duZXItPnNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7
IC8vIFdlIG1heSBzdXBwbHkgdGhlIHN0YXRpYyBwb3NpdGlvbiBmb3IgYW4gYWJzb2x1dGUgcG9z
aXRpb25lZCBjaGlsZC4KLQotICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG93bmVyLT5k
b2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgY2FjaGUtPmNoaWxkcmVuQ2hhbmdl
ZChvd25lcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Q2hpbGRMaXN0LmgJKHJldmlzaW9uIDE1
NjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3RDaGlsZExpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUmVu
ZGVyT2JqZWN0Q2hpbGRMaXN0X2gKLSNkZWZpbmUgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0X2gKLQot
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
UmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlck9iamVjdDsKLQotY2xhc3MgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJPYmplY3RDaGlsZExpc3QoKQotICAgICAg
ICA6IG1fZmlyc3RDaGlsZCgwKQotICAgICAgICAsIG1fbGFzdENoaWxkKDApCi0gICAgewotICAg
IH0KLQotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmly
c3RDaGlsZDsgfQotICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4g
bV9sYXN0Q2hpbGQ7IH0KLQotICAgIC8vIEZJWE1FOiBUZW1wb3Jhcnkgd2hpbGUgUmVuZGVyQm94
IHN0aWxsIGV4aXN0cy4gRXZlbnR1YWxseSB0aGlzIHdpbGwganVzdCBoYXBwZW4gZHVyaW5nIGlu
c2VydC9hcHBlbmQvcmVtb3ZlIG1ldGhvZHMgb24gdGhlIGNoaWxkIGxpc3QsIGFuZCBub2JvZHkK
LSAgICAvLyB3aWxsIG5lZWQgdG8gbWFuaXB1bGF0ZSBmaXJzdENoaWxkIG9yIGxhc3RDaGlsZCBk
aXJlY3RseS4KLSAgICB2b2lkIHNldEZpcnN0Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCkgeyBt
X2ZpcnN0Q2hpbGQgPSBjaGlsZDsgfQotICAgIHZvaWQgc2V0TGFzdENoaWxkKFJlbmRlck9iamVj
dCogY2hpbGQpIHsgbV9sYXN0Q2hpbGQgPSBjaGlsZDsgfQotCi0gICAgdm9pZCBkZXN0cm95TGVm
dG92ZXJDaGlsZHJlbigpOwotCi0gICAgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVu
ZGVyRWxlbWVudCogb3duZXIsIFJlbmRlck9iamVjdCosIGJvb2wgbm90aWZ5UmVuZGVyZXIgPSB0
cnVlKTsKLSAgICB2b2lkIGluc2VydENoaWxkTm9kZShSZW5kZXJFbGVtZW50KiBvd25lciwgUmVu
ZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9vbCBub3Rp
ZnlSZW5kZXJlciA9IHRydWUpOwotICAgIHZvaWQgYXBwZW5kQ2hpbGROb2RlKFJlbmRlckVsZW1l
bnQqIG93bmVyLCBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBib29sIG5vdGlmeVJlbmRlcmVyID0g
dHJ1ZSkKLSAgICB7Ci0gICAgICAgIGluc2VydENoaWxkTm9kZShvd25lciwgbmV3Q2hpbGQsIDAs
IG5vdGlmeVJlbmRlcmVyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVuZGVyT2JqZWN0KiBt
X2ZpcnN0Q2hpbGQ7Ci0gICAgUmVuZGVyT2JqZWN0KiBtX2xhc3RDaGlsZDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFJlbmRlck9iamVjdENoaWxkTGlzdF9oCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkocmV2aXNpb24g
MTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIFJlbmRl
ckJveCogZW1iZWRkZWRDb250ZW50Qm94KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1
YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICJSZW5k
ZXJSZXBsYWNlZCI7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgT1ZFUlJJREUgRklOQUw7CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50UmVwbGFjZWQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSB7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsaWNhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuaAkocmV2aXNpb24gMTU2
MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxpY2EuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsOCArNTAsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlbmRlclJl
cGxpY2EoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1JlcGxpY2EoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7
CisgICAgdmlydHVhbCBib29sIGlzUmVwbGljYSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoKSBPVkVSUklERTsKIAogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3
ICs5OCw3IEBAIHZvaWQgUmVuZGVyUnVieUJhc2U6Om1vdmVJbmxpbmVDaGlsZHJlbigKICAgICAg
ICAgICAgIHRvQmxvY2sgPSB0b1JlbmRlckJsb2NrKGxhc3RDaGlsZCk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgdG9CbG9jayA9IHRvQmFzZS0+Y3JlYXRlQW5vbnltb3VzQmxvY2soKTsK
LSAgICAgICAgICAgIHRvQmFzZS0+Y2hpbGRyZW4oKS0+YXBwZW5kQ2hpbGROb2RlKHRvQmFzZSwg
dG9CbG9jayk7CisgICAgICAgICAgICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJuYWwodG9CbG9j
aywgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIE1v
dmUgb3VyIGlubGluZSBjaGlsZHJlbiBpbnRvIHRoZSB0YXJnZXQgYmxvY2sgd2UgZGV0ZXJtaW5l
ZCBhYm92ZS4KQEAgLTEyMyw3ICsxMjMsNyBAQCB2b2lkIFJlbmRlclJ1YnlCYXNlOjptb3ZlQmxv
Y2tDaGlsZHJlbihSCiAgICAgICAgICAgICAmJiBsYXN0Q2hpbGRUaGVyZSAmJiBsYXN0Q2hpbGRU
aGVyZS0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGxhc3RDaGlsZFRoZXJlLT5jaGlsZHJlbklubGlu
ZSgpKSB7ICAgICAgICAgICAgCiAgICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxvY2tIZXJlID0g
dG9SZW5kZXJCbG9jayhmaXJzdENoaWxkSGVyZSk7CiAgICAgICAgIFJlbmRlckJsb2NrKiBhbm9u
QmxvY2tUaGVyZSA9IHRvUmVuZGVyQmxvY2sobGFzdENoaWxkVGhlcmUpOwotICAgICAgICBhbm9u
QmxvY2tIZXJlLT5tb3ZlQWxsQ2hpbGRyZW5Ubyhhbm9uQmxvY2tUaGVyZSwgYW5vbkJsb2NrVGhl
cmUtPmNoaWxkcmVuKCkpOworICAgICAgICBhbm9uQmxvY2tIZXJlLT5tb3ZlQWxsQ2hpbGRyZW5U
byhhbm9uQmxvY2tUaGVyZSwgdHJ1ZSk7CiAgICAgICAgIGFub25CbG9ja0hlcmUtPmRlbGV0ZUxp
bmVCb3hUcmVlKCk7CiAgICAgICAgIGFub25CbG9ja0hlcmUtPmRlc3Ryb3koKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuaAkocmV2aXNpb24g
MTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDEyICszOCw2IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZW5k
ZXJUYWJsZUNvbChFbGVtZW50Jik7CiAgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIHRvRWxlbWVudChub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKLSAgICBSZW5kZXJPYmpl
Y3QqIGZpcnN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuLmZpcnN0Q2hpbGQoKTsg
fQotICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJl
bi5sYXN0Q2hpbGQoKTsgfQotCi0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmplY3RDaGlsZExp
c3QqIGNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gJm1fY2hpbGRyZW47IH0KLSAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBPVkVSUklERSB7IHJl
dHVybiAmbV9jaGlsZHJlbjsgfQotCiAgICAgdm9pZCBjbGVhclByZWZlcnJlZExvZ2ljYWxXaWR0
aHNEaXJ0eUJpdHMoKTsKIAogICAgIHVuc2lnbmVkIHNwYW4oKSBjb25zdCB7IHJldHVybiBtX3Nw
YW47IH0KQEAgLTk3LDcgKzkxLDYgQEAgcHJpdmF0ZToKIAogICAgIFJlbmRlclRhYmxlKiB0YWJs
ZSgpIGNvbnN0OwogCi0gICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAgICAg
dW5zaWduZWQgbV9zcGFuOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlUm93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlUm93LmgJKHJldmlzaW9uIDE1NjI1MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVJvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsNiBAQCBj
bGFzcyBSZW5kZXJUYWJsZVJvdyBGSU5BTCA6IHB1YmxpYyBSZW5kCiBwdWJsaWM6CiAgICAgZXhw
bGljaXQgUmVuZGVyVGFibGVSb3coRWxlbWVudCopOwogCi0gICAgUmVuZGVyT2JqZWN0KiBmaXJz
dENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5maXJzdENoaWxkKCk7IH0KLSAgICBS
ZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4ubGFzdENo
aWxkKCk7IH0KLQotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGls
ZHJlbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0gICAgdmlydHVh
bCBSZW5kZXJPYmplY3RDaGlsZExpc3QqIGNoaWxkcmVuKCkgT1ZFUlJJREUgeyByZXR1cm4gJm1f
Y2hpbGRyZW47IH0KLQogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHRvUmVuZGVyVGFibGVTZWN0aW9uKHBhcmVudCgpKTsgfQogICAgIFJlbmRlclRhYmxl
KiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRvUmVuZGVyVGFibGUocGFyZW50KCktPnBhcmVudCgp
KTsgfQogCkBAIC05NSw2ICs4OSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNU
YWJsZVJvdygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZpcnR1YWwg
Ym9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxCZVJlbW92ZWRGcm9tVHJlZSgpIE9WRVJSSURFOwogCiAgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpIE9WRVJSSURFOwpAQCAtMTA5LDcgKzEwNCw2IEBAIHByaXZh
dGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIE9WRVJSSURFOwogCi0gICAgUmVuZGVyT2JqZWN0
Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAgICAgdW5zaWduZWQgbV9yb3dJbmRleCA6IDMxOwogfTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
aAkocmV2aXNpb24gMTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMiArNjUsNiBAQCBwdWJsaWM6CiAg
ICAgZXhwbGljaXQgUmVuZGVyVGFibGVTZWN0aW9uKEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5S
ZW5kZXJUYWJsZVNlY3Rpb24oKTsKIAotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4uZmlyc3RDaGlsZCgpOyB9Ci0gICAgUmVuZGVyT2JqZWN0
KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuLmxhc3RDaGlsZCgpOyB9Ci0K
LSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiAmbV9jaGlsZHJlbjsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0Q2hpbGRMaXN0KiBjaGlsZHJlbigpIE9WRVJSSURFIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9
Ci0KICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBpbnQgZmly
c3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdCBPVkVSUklERTsKQEAgLTIwNCw2ICsxOTgsOCBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIChpc0Fub255bW91cygpIHx8IGlzUHNldWRvRWxlbWVu
dCgpKSA/ICJSZW5kZXJUYWJsZVNlY3Rpb24gKGFub255bW91cykiIDogIlJlbmRlclRhYmxlU2Vj
dGlvbiI7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNUYWJsZVNlY3Rpb24o
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgd2ls
bEJlUmVtb3ZlZEZyb21UcmVlKCkgT1ZFUlJJREU7CkBAIC0yNDIsOCArMjM4LDYgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgc2V0TG9naWNhbFBvc2l0aW9uRm9yQ2VsbChSZW5kZXJUYWJsZUNlbGwq
LCB1bnNpZ25lZCBlZmZlY3RpdmVDb2x1bW4pIGNvbnN0OwogCi0gICAgUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0IG1fY2hpbGRyZW47Ci0KICAgICBWZWN0b3I8Um93U3RydWN0PiBtX2dyaWQ7CiAgICAg
VmVjdG9yPGludD4gbV9yb3dQb3M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuaAkocmV2aXNpb24gMTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCw4IEBAIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIElubGluZVRleHRCb3gqIGNyZWF0ZVRleHRCb3goKTsgLy8gU3ViY2xhc3Nl
ZCBieSBTVkcuCiAKIHByaXZhdGU6CisgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigp
IGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICB2b2lkIGNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93Jik7CiAKICAgICBi
b29sIGNvbXB1dGVDYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAkocmV2aXNpb24g
MTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNiBAQAogI2luY2x1ZGUgIlJlbmRlck11bHRp
Q29sdW1uRmxvd1RocmVhZC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5jcHAiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0Q2hp
bGRMaXN0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5jcHAiCiAjaW5jbHVkZSAiUmVu
ZGVyUXVvdGUuY3BwIgogI2luY2x1ZGUgIlJlbmRlclJlcGxhY2VkLmNwcCIKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuY3BwCShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcg
KzEzOSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZUZyb21FbGUKICAgICBS
ZW5kZXJPYmplY3QqIHNhdmVkUmVuZGVyZXIgPSBlbGVtZW50KCktPnJlbmRlcmVyKCk7CiAKICAg
ICAvLyBEZXN0cm95IG91ciBjdXJyZW50IGNoaWxkcmVuCi0gICAgY2hpbGRyZW4oKS0+ZGVzdHJv
eUxlZnRvdmVyQ2hpbGRyZW4oKTsKKyAgICBkZXN0cm95TGVmdG92ZXJDaGlsZHJlbigpOwogCiAg
ICAgLy8gU2luY2Ugd2Ugc2hhcmUgYSBub2RlIHdpdGggb3VyIGNoaWxkcmVuLCBkZXN0cm95aW5n
IG91ciBjaGlsZHJlbiBtYXkgc2V0IG91ciBub2RlJ3MKICAgICAvLyByZW5kZXJlciB0byAwLCBz
byB3ZSBuZWVkIHRvIHJlc3RvcmUgaXQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDE1NjI1MykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEyICszNSw2IEBAIGNsYXNzIFJlbmRlclNWR0NvbnRhaW5lciA6IHB1Ymxp
YyBSZW5kZXIKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZW5kZXJTVkdDb250YWluZXIoKTsKIAot
ICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4u
Zmlyc3RDaGlsZCgpOyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJl
dHVybiBtX2NoaWxkcmVuLmxhc3RDaGlsZCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRl
ck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVy
biAmbV9jaGlsZHJlbjsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGls
ZHJlbigpIE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0KICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgT1ZFUlJJREUgRklO
QUwgeyBtX25lZWRzQm91bmRhcmllc1VwZGF0ZSA9IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wg
bmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gbV9uZWVkc0Jv
dW5kYXJpZXNVcGRhdGU7IH0KQEAgLTUzLDYgKzQ3LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgYm9vbCBpc1NWR0NvbnRhaW5lcigpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiAiUmVuZGVyU1ZHQ29udGFpbmVyIjsgfQogCisgICAgdmlydHVhbCBib29sIGNh
bkhhdmVDaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIHRydWU7IH0KKwog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgdm9pZCBh
ZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0g
MCkgT1ZFUlJJREUgRklOQUw7CkBAIC03OSw3ICs3NSw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKIAogcHJpdmF0ZToKLSAgICBSZW5kZXJPYmplY3RD
aGlsZExpc3QgbV9jaGlsZHJlbjsKICAgICBGbG9hdFJlY3QgbV9vYmplY3RCb3VuZGluZ0JveDsK
ICAgICBib29sIG1fb2JqZWN0Qm91bmRpbmdCb3hWYWxpZDsKICAgICBGbG9hdFJlY3QgbV9zdHJv
a2VCb3VuZGluZ0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHR3JhZGllbnRTdG9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaAkocmV2aXNpb24gMTU2MjUzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdHcmFkaWVudFN0b3AuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNiArNTMsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsK
IAogcHJpdmF0ZToKKyAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIFNWR0dyYWRpZW50RWxlbWVudCogZ3JhZGll
bnRFbGVtZW50KCkgY29uc3Q7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCShyZXZpc2lvbiAxNTYyNTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5
LDYgKzU5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdJbWFnZSI7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdJbWFnZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0K
IAogICAgIHZpcnR1YWwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBsb2NhbFRvUGFyZW50VHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR01vZGVsT2JqZWN0LmNw
cAkocmV2aXNpb24gMTU2MjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9p
ZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJzb2x1dGVRdWFkcwogdm9pZCBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKIHsKICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xp
ZW50RGVzdHJveWVkKHRoaXMpOwotICAgIFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCk7
CisgICAgUmVuZGVyRWxlbWVudDo6d2lsbEJlRGVzdHJveWVkKCk7CiB9CiAKIHZvaWQgUmVuZGVy
U1ZHTW9kZWxPYmplY3Q6OnN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDE1NjI1MykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MiArNDYsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY1Jh
dGlvSW5mb3JtYXRpb24oRmxvYXRTaXplJiBpbnRyaW5zaWNTaXplLCBkb3VibGUmIGludHJpbnNp
Y1JhdGlvLCBib29sJiBpc1BlcmNlbnRhZ2VJbnRyaW5zaWNTaXplKSBjb25zdCBPVkVSUklERTsK
IAotICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRy
ZW4uZmlyc3RDaGlsZCgpOyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7
IHJldHVybiBtX2NoaWxkcmVuLmxhc3RDaGlsZCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFJl
bmRlck9iamVjdENoaWxkTGlzdCogY2hpbGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiAm
bV9jaGlsZHJlbjsgfQotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiBjaGlsZHJl
bigpIE9WRVJSSURFIHsgcmV0dXJuICZtX2NoaWxkcmVuOyB9Ci0KICAgICBib29sIGlzTGF5b3V0
U2l6ZUNoYW5nZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTGF5b3V0U2l6ZUNoYW5nZWQ7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNCb3VuZGFyaWVzVXBkYXRlKCkgT1ZFUlJJREUgeyBtX25l
ZWRzQm91bmRhcmllc09yVHJhbnNmb3JtVXBkYXRlID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBuZWVkc0JvdW5kYXJpZXNVcGRhdGUoKSBPVkVSUklERSB7IHJldHVybiBtX25lZWRzQm91bmRh
cmllc09yVHJhbnNmb3JtVXBkYXRlOyB9CkBAIC0xMTUsNyArMTA5LDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHVwZGF0ZUNhY2hlZEJvdW5kYXJpZXMoKTsKICAgICB2b2lkIGJ1aWxkTG9jYWxUb0Jv
cmRlckJveFRyYW5zZm9ybSgpOwogCi0gICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRy
ZW47CiAgICAgSW50U2l6ZSBtX2NvbnRhaW5lclNpemU7CiAgICAgRmxvYXRSZWN0IG1fb2JqZWN0
Qm91bmRpbmdCb3g7CiAgICAgYm9vbCBtX29iamVjdEJvdW5kaW5nQm94VmFsaWQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdTaGFwZS5oCShyZXZpc2lv
biAxNTYyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgQWZmaW5lVHJhbnNmb3JtIGxvY2FsVHJhbnNmb3JtKCkgY29uc3QgT1ZFUlJJREUgRklOQUwg
eyByZXR1cm4gbV9sb2NhbFRyYW5zZm9ybTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzU1ZHU2hh
cGUoKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBi
b29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IE9WRVJSSURFIEZJTkFMIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlclNWR1NoYXBlIjsgfQogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIE9WRVJSSURF
IEZJTkFMOwo=
</data>
<flag name="commit-queue"
          id="234516"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>