<?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>5877</bug_id>
          
          <creation_ts>2005-11-29 04:43:10 -0800</creation_ts>
          <short_desc>Remove remaining APPLE_CHANGES and KHTML_NO_CPP_DOM blocks from WebCore</short_desc>
          <delta_ts>2005-12-04 03:34:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>5929</blocked>
    
    <blocked>5931</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>24849</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-29 04:43:10 -0800</bug_when>
    <thetext>Remove remaining APPLE_CHANGES and KHTML_NO_CPP_DOM blocks from WebCore

The previous bug:
http://bugzilla.opendarwin.org/show_bug.cgi?id=5711
only removed APPLE_CHANGES from WebCore/khtml

This removes all the rest from WebCore (kwq mostly), with the exception of SVG, and additionally removes 
all KHTML_NO_CPP_DOM blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24850</commentid>
    <comment_count>1</comment_count>
      <attachid>4847</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-29 04:46:15 -0800</bug_when>
    <thetext>Created attachment 4847
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24851</commentid>
    <comment_count>2</comment_count>
      <attachid>4848</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-29 04:46:54 -0800</bug_when>
    <thetext>Created attachment 4848
cleanup.pl script</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24852</commentid>
    <comment_count>3</comment_count>
      <attachid>4849</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-29 04:47:31 -0800</bug_when>
    <thetext>Created attachment 4849
A hacked version of the partial preprocessor (partpp.pl)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24853</commentid>
    <comment_count>4</comment_count>
      <attachid>4847</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-29 04:54:54 -0800</bug_when>
    <thetext>Comment on attachment 4847
The patch

This also removes all #if 0 blocks (which may or may not be a good thing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24867</commentid>
    <comment_count>5</comment_count>
      <attachid>4847</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-29 07:36:20 -0800</bug_when>
    <thetext>Comment on attachment 4847
The patch

This patch shows lots of cases where it leaves stray multiple blank lines. So
it&apos;s going to leave formatting a little messy. I&apos;d like to see a version that
has a heuristic for nicely eating the excess blank lines.

I also see cases where there&apos;s a comment just before an #if 0 section. This
patch is going to lave those comments stranded. An example is in DOMHTML.mm.

Some of this already probably took place with the last &quot;remove ifdefs&quot; patch,
which I did not review in detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24890</commentid>
    <comment_count>6</comment_count>
      <attachid>4855</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-29 14:59:21 -0800</bug_when>
    <thetext>Created attachment 4855
Responding to Darin&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24891</commentid>
    <comment_count>7</comment_count>
      <attachid>4855</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-29 14:59:30 -0800</bug_when>
    <thetext>Comment on attachment 4855
Responding to Darin&apos;s comments.

To address Darin&apos;s concerns, I did a couple things:

1.  I did a search throughout the entire project looking for &quot;excessive&quot;
newlines and removed them.
2.  I did a manual review of each of the previously changed files and removed
any extra comments, newlines.
3.  I removed dom_misc.* entirely, and moved the remaining DOM::EventListener
and DOM::NodeFilterCondition onto khtml::Shared&lt;T&gt;
4.  As part of my manual walk through khtml_part.cpp I removed
DIRECT_LINKAGE_TO_ECMA as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24892</commentid>
    <comment_count>8</comment_count>
      <attachid>4847</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-29 15:00:04 -0800</bug_when>
    <thetext>Comment on attachment 4847
The patch

Retracting review on this one for now.	See the new larger patch instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25445</commentid>
    <comment_count>9</comment_count>
      <attachid>4855</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-03 11:10:29 -0800</bug_when>
    <thetext>Comment on attachment 4855
Responding to Darin&apos;s comments.

Here&apos;s an example of the kind of blank line thing I&apos;m not so happy about:

---------

 #include &quot;khtmlpart_p.h&quot;

-#if !KHTML_NO_CPLUSPLUS_DOM
-#include &quot;dom/html_document.h&quot;
-#endif

 #include &lt;CoreServices/CoreServices.h&gt;

---------

and here&apos;s another:

---------

   cancelRedirection();

-#if !KHTML_NO_CPLUSPLUS_DOM
-  // null node activated.
-  emit nodeActivated(Node());
-#endif
 }

---------

Otherwise, this patch looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25477</commentid>
    <comment_count>10</comment_count>
      <attachid>4855</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-04 02:26:11 -0800</bug_when>
    <thetext>Comment on attachment 4855
Responding to Darin&apos;s comments.

Retracting review, posting a simpler patch instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25478</commentid>
    <comment_count>11</comment_count>
      <attachid>4926</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-04 02:27:22 -0800</bug_when>
    <thetext>Created attachment 4926
A newer hacked version of partpp.pl which has whitespace removal heuristics</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25479</commentid>
    <comment_count>12</comment_count>
      <attachid>4927</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-04 02:28:00 -0800</bug_when>
    <thetext>Created attachment 4927
Diff from the original (http://www.phost.de/~stefan/Files/partpp.pl) partpp.pl (for the curious)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25480</commentid>
    <comment_count>13</comment_count>
      <attachid>4928</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-04 02:28:48 -0800</bug_when>
    <thetext>Created attachment 4928
SpacingHeuristics.pm perl module</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25481</commentid>
    <comment_count>14</comment_count>
      <attachid>4929</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-04 02:29:36 -0800</bug_when>
    <thetext>Created attachment 4929
completely script generated patch to remove APPLE_CHANGES and KHTML_NO_CPP_DOM (and whitespace)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25482</commentid>
    <comment_count>15</comment_count>
      <attachid>4929</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-04 02:32:23 -0800</bug_when>
    <thetext>Comment on attachment 4929
completely script generated patch to remove APPLE_CHANGES and KHTML_NO_CPP_DOM (and whitespace)

This is a simpler patch which is entirely script generated and addresses
darin&apos;s whitespace concerns.  Script is also attached to the bug.  This should
be a trivial review which any reviewer should feel comfortable with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25483</commentid>
    <comment_count>16</comment_count>
      <attachid>4930</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-04 02:33:29 -0800</bug_when>
    <thetext>Created attachment 4930
newer cleanup.pl (trivial partpp.pl wrapper)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25485</commentid>
    <comment_count>17</comment_count>
      <attachid>4929</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-12-04 03:21:30 -0800</bug_when>
    <thetext>Comment on attachment 4929
completely script generated patch to remove APPLE_CHANGES and KHTML_NO_CPP_DOM (and whitespace)

rs=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4847</attachid>
            <date>2005-11-29 04:46:15 -0800</date>
            <delta_ts>2005-11-29 15:00:04 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>applechanges.patch</filename>
            <type>text/plain</type>
            <size>172054</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2todG1sX3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM1
OQpkaWZmIC1wIC11IC1yMS4zNTkga2h0bWwva2h0bWxfcGFydC5jcHAKLS0tIGtodG1sL2todG1s
X3BhcnQuY3BwCTIxIE5vdiAyMDA1IDA0OjAxOjUxIC0wMDAwCTEuMzU5CisrKyBraHRtbC9raHRt
bF9wYXJ0LmNwcAkyOSBOb3YgMjAwNSAxMjo0MToyNSAtMDAwMApAQCAtMTA2LDkgKzEwNiw2IEBA
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKICNpbmNsdWRlICJraHRtbHBhcnRfcC5oIgog
Ci0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLSNpbmNsdWRlICJkb20vaHRtbF9kb2N1bWVu
dC5oIgotI2VuZGlmCiAKICNpbmNsdWRlIDxDb3JlU2VydmljZXMvQ29yZVNlcnZpY2VzLmg+CiAK
QEAgLTQ4OSwxMCArNDg2LDYgQEAgdm9pZCBLSFRNTFBhcnQ6OnN0b3BMb2FkaW5nKGJvb2wgc2Vu
ZFVubAogICAvLyBTdG9wIGFueSBzdGFydGVkIHJlZGlyZWN0aW9ucyBhcyB3ZWxsISEgKERBKQog
ICBjYW5jZWxSZWRpcmVjdGlvbigpOwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLSAg
Ly8gbnVsbCBub2RlIGFjdGl2YXRlZC4KLSAgZW1pdCBub2RlQWN0aXZhdGVkKE5vZGUoKSk7Ci0j
ZW5kaWYKIH0KIAogYm9vbCBLSFRNTFBhcnQ6OmNsb3NlVVJMKCkKQEAgLTYwNCwxNCArNTk3LDYg
QEAgUVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRlU2NyaXB0KCBjb25zdAogLy9FbmFibGUgdGhp
cyB0byBzZWUgYWxsIEpTIHNjcmlwdHMgYmVpbmcgZXhlY3V0ZWQKIC8vI2RlZmluZSBLSlNfVkVS
Qk9TRQogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotUVZhcmlhbnQgS0hUTUxQYXJ0
OjpleGVjdXRlU2NyaXB0KCBjb25zdCBET006Ok5vZGUgJm4sIGNvbnN0IFFTdHJpbmcgJnNjcmlw
dCwgYm9vbCBmb3JjZVVzZXJHZXN0dXJlICkKLXsKLSAgICByZXR1cm4gZXhlY3V0ZVNjcmlwdChu
LmhhbmRsZSgpLCBzY3JpcHQsIGZvcmNlVXNlckdlc3R1cmUpOwotfQotCi0jZW5kaWYKIAogUVZh
cmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRlU2NyaXB0KCBET006Ok5vZGVJbXBsICpuLCBjb25zdCBR
U3RyaW5nICZzY3JpcHQsIGJvb2wgZm9yY2VVc2VyR2VzdHVyZSApCiB7CkBAIC0xNTkyLDE0ICsx
NTc3LDYgQEAgdm9pZCBLSFRNTFBhcnQ6OnNldE9ubHlMb2NhbFJlZmVyZW5jZXMoYgogfQogCiAK
LSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1RU3RyaW5nIEtIVE1MUGFydDo6dGV4dChj
b25zdCBET006OlJhbmdlICZyKSBjb25zdAotewotICAgIHJldHVybiBwbGFpblRleHQoci5oYW5k
bGUoKSk7Ci19Ci0KLSNlbmRpZgogCiBRU3RyaW5nIEtIVE1MUGFydDo6c2VsZWN0ZWRUZXh0KCkg
Y29uc3QKIHsKQEAgLTIyNzcsMTQgKzIyNTQsNiBAQCBLSFRNTFBhcnQgKktIVE1MUGFydDo6cGFy
ZW50UGFydCgpIGNvbnN0CiB9CiAKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLURP
TTo6Tm9kZSBLSFRNTFBhcnQ6Om5vZGVVbmRlck1vdXNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZC0+bV92aWV3LT5ub2RlVW5kZXJNb3VzZSgpOwotfQotCi0jZW5kaWYKIAogdm9pZCBLSFRNTFBh
cnQ6OmVtaXRTZWxlY3Rpb25DaGFuZ2VkKCkKIHsKQEAgLTI5ODAsMjMgKzI5NDksNiBAQCB2b2lk
IEtIVE1MUGFydDo6c2xvdFBhcnRSZW1vdmVkKCBLUGFydHM6CiB9CiAKIAotI2lmICFLSFRNTF9O
T19DUExVU1BMVVNfRE9NCi0KLXZvaWQgS0hUTUxQYXJ0OjpzZXRBY3RpdmVOb2RlKGNvbnN0IERP
TTo6Tm9kZSAmbm9kZSkKLXsKLSAgICBpZiAoIWQtPm1fZG9jIHx8ICFkLT5tX3ZpZXcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFNldCB0aGUgZG9jdW1lbnQncyBhY3RpdmUgbm9kZQotICAg
IGQtPm1fZG9jLT5zZXRGb2N1c05vZGUobm9kZS5oYW5kbGUoKSk7Ci19Ci0KLURPTTo6Tm9kZSBL
SFRNTFBhcnQ6OmFjdGl2ZU5vZGUoKSBjb25zdAotewotICAgIHJldHVybiBET006Ok5vZGUoZC0+
bV9kb2M/ZC0+bV9kb2MtPmZvY3VzTm9kZSgpOjApOwotfQotCi0jZW5kaWYKIAogRE9NOjpFdmVu
dExpc3RlbmVyICpLSFRNTFBhcnQ6OmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKCBRU3RyaW5nIGNv
ZGUsIE5vZGVJbXBsICpub2RlICkKIHsKSW5kZXg6IGtodG1sL2todG1sX3BhcnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbF9wYXJ0LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTQwCmRpZmYgLXAgLXUgLXIxLjE0MCBraHRtbC9raHRtbF9wYXJ0
LmgKLS0tIGtodG1sL2todG1sX3BhcnQuaAkyMSBOb3YgMjAwNSAwNDowMTo1MSAtMDAwMAkxLjE0
MAorKysga2h0bWwva2h0bWxfcGFydC5oCTI5IE5vdiAyMDA1IDEyOjQxOjI2IC0wMDAwCkBAIC0y
MzEsMjQgKzIzMSw2IEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGNsb3NlVVJMKCk7CiAKIAot
I2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgLyoqCi0gICAqIFJldHVybnMgYSByZWZl
cmVuY2UgdG8gdGhlIERPTSBIVE1MIGRvY3VtZW50IChmb3Igbm9uLUhUTUwgZG9jdW1lbnRzLCBy
ZXR1cm5zIG51bGwpCi0gICAqLwotICBET006OkhUTUxEb2N1bWVudCBodG1sRG9jdW1lbnQoKSBj
b25zdDsKLQotICAvKioKLSAgICogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgRE9NIGRvY3Vt
ZW50LgotICAgKi8KLSAgRE9NOjpEb2N1bWVudCBkb2N1bWVudCgpIGNvbnN0OwotCi0gIC8qKgot
ICAgKiBSZXR1cm5zIHRoZSBub2RlIHRoYXQgaGFzIHRoZSBrZXlib2FyZCBmb2N1cy4KLSAgICov
Ci0gIERPTTo6Tm9kZSBhY3RpdmVOb2RlKCkgY29uc3Q7Ci0KLSNlbmRpZgogCiAgIC8qKgogICAg
KiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgQHJlZiBLUGFydHM6OkJyb3dzZXJFeHRlbnNpb24u
CkBAIC0yOTYsOSArMjc4LDYgQEAgcHVibGljOgogICAvKioKICAgICogU2FtZSBhcyBhYm92ZSBl
eGNlcHQgdGhlIE5vZGUgcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlICd0aGlzJyB2YWx1ZS4KICAg
ICovCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLSAgUVZhcmlhbnQgZXhlY3V0ZVNjcmlw
dCggY29uc3QgRE9NOjpOb2RlICZuLCBjb25zdCBRU3RyaW5nICZzY3JpcHQsIGJvb2wgZm9yY2VV
c2VyR2VzdHVyZSA9IGZhbHNlICk7Ci0jZW5kaWYKICAgUVZhcmlhbnQgZXhlY3V0ZVNjcmlwdCgg
RE9NOjpOb2RlSW1wbCAqbiwgY29uc3QgUVN0cmluZyAmc2NyaXB0LCBib29sIGZvcmNlVXNlckdl
c3R1cmUgPSBmYWxzZSApOwogCiAgIC8qKgpAQCAtNjgxLDEyICs2NjAsNiBAQCBwdWJsaWM6CiAg
ICAqLwogICBpbnQgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkgY29uc3Q7CiAKLSNp
ZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdGV4dCBm
b3IgYSBwYXJ0IG9mIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIFFTdHJpbmcgdGV4dChjb25zdCBE
T006OlJhbmdlICYpIGNvbnN0OwotI2VuZGlmCiAKICAgLyoqCiAgICAqIEhhcyB0aGUgdXNlciBz
ZWxlY3RlZCBhbnl0aGluZz8KQEAgLTc3NiwxNCArNzQ5LDYgQEAgcHVibGljOgogCiAgIHZpcnR1
YWwgdm9pZCB0b2tlbml6ZXJQcm9jZXNzZWREYXRhKCkge307CiAKLSNpZiAhS0hUTUxfTk9fQ1BM
VVNQTFVTX0RPTQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBAcCBOb2RlIGN1cnJlbnRseSB1
bmRlciB0aGUgbW91c2UKLSAgICovCi0gIERPTTo6Tm9kZSBub2RlVW5kZXJNb3VzZSgpIGNvbnN0
OwotCi0jZW5kaWYKIAogICAvKioKICAgICogQGludGVybmFsCkBAIC05NDAsMTggKzkwNSw2IEBA
IHNpZ25hbHM6CiAgICAqLwogICB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoKTsKIAotI2lmICFLSFRN
TF9OT19DUExVU1BMVVNfRE9NCi0KLSAgLyoqCi0gICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQg
d2hlbiBhbiBlbGVtZW50IHJldHJpZXZlcyB0aGUKLSAgICoga2V5Ym9hcmQgZm9jdXMuIE5vdGUg
dGhhdCB0aGUgc2lnbmFsIGFyZ3VtZW50IGNhbiBiZQotICAgKiBhIG51bGwgbm9kZSBpZiBubyBl
bGVtZW50IGlzIGFjdGl2ZSwgbWVhbmluZyBhIG5vZGUKLSAgICogaGFzIGV4cGxpY2l0bHkgYmVl
biBkZWFjdGl2YXRlZCB3aXRob3V0IGEgbmV3IG9uZQotICAgKiBiZWNvbWluZyBhY3RpdmUuCi0g
ICAqLwotICB2b2lkIG5vZGVBY3RpdmF0ZWQoY29uc3QgRE9NOjpOb2RlICYpOwotCi0jZW5kaWYK
IAogcHVibGljOgogCkBAIC0xMDA5LDIwICs5NjIsNiBAQCBwcm90ZWN0ZWQ6CiAKIHB1YmxpYyBz
bG90czoKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgLyoqCi0gICAqIFNldHMg
dGhlIGZvY3Vzc2VkIG5vZGUgb2YgdGhlIGRvY3VtZW50IHRvIHRoZSBzcGVjaWZpZWQgbm9kZS4g
SWYgdGhlIG5vZGUgaXMgYSBmb3JtIGNvbnRyb2wsIHRoZSBjb250cm9sIHdpbGwKLSAgICogcmVj
ZWl2ZSBmb2N1cyBpbiB0aGUgc2FtZSB3YXkgdGhhdCBpdCB3b3VsZCBpZiB0aGUgdXNlciBoYWQg
Y2xpY2tlZCBvbiBpdCBvciB0YWJiZWQgdG8gaXQgd2l0aCB0aGUga2V5Ym9hcmQuIEZvcgotICAg
KiBtb3N0IG90aGVyIHR5cGVzIG9mIGVsZW1lbnRzLCB0aGVyZSBpcyBubyB2aXN1bCBpbmRpY3Rp
b24gb2Ygd2hldGhlciBvciBub3QgdGhleSBhcmUgZm9jdXNzZWQuCi0gICAqCi0gICAqIFNlZSBA
cmVmIGFjdGl2ZU5vZGUKLSAgICoKLSAgICogQHBhcmFtIG5vZGUgVGhlIG5vZGUgdG8gZm9jdXMK
LSAgICovCi0gIHZvaWQgc2V0QWN0aXZlTm9kZShjb25zdCBET006Ok5vZGUgJm5vZGUpOwotCi0j
ZW5kaWYKIAogICAvKioKICAgICogU3RvcHMgYWxsIGFuaW1hdGVkIGltYWdlcyBvbiB0aGUgY3Vy
cmVudCBhbmQgY2hpbGQgcGFnZXMKSW5kZXg6IGtodG1sL2todG1sdmlldy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWx2aWV3LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNTMKZGlmZiAtcCAtdSAtcjEuMTUzIGtodG1sL2todG1sdmlldy5j
cHAKLS0tIGtodG1sL2todG1sdmlldy5jcHAJMjEgTm92IDIwMDUgMDE6MTk6NDggLTAwMDAJMS4x
NTMKKysrIGtodG1sL2todG1sdmlldy5jcHAJMjkgTm92IDIwMDUgMTI6NDE6MjcgLTAwMDAKQEAg
LTY1Miw5ICs2NTIsNiBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZVByZXNzRXZlbnQo
CiAgICAgICAgIGlmIChLV1EobV9wYXJ0KS0+bGFzdEV2ZW50SXNNb3VzZVVwKCkpIHsKICAgICAg
ICAgICAgIGQtPm1vdXNlUHJlc3NlZCA9IGZhbHNlOwogICAgICAgICB9Ci0jaWYgIUtIVE1MX05P
X0NQTFVTUExVU19ET00KLQllbWl0IG1fcGFydC0+bm9kZUFjdGl2YXRlZChtZXYuaW5uZXJOb2Rl
LmdldCgpKTsKLSNlbmRpZgogICAgIH0KIH0KIApAQCAtMTEzNiw5ICsxMTMzLDYgQEAgdm9pZCBL
SFRNTFZpZXc6OmZvY3VzTmV4dFByZXZOb2RlKGJvb2wgbgogICAgIH0KICAgICAvLyBTZXQgZm9j
dXMgbm9kZSBvbiB0aGUgZG9jdW1lbnQKICAgICBtX3BhcnQtPnhtbERvY0ltcGwoKS0+c2V0Rm9j
dXNOb2RlKG5ld0ZvY3VzTm9kZSk7Ci0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLSAgICBl
bWl0IG1fcGFydC0+bm9kZUFjdGl2YXRlZChuZXdGb2N1c05vZGUpOwotI2VuZGlmCiAKIH0KIApJ
bmRleDoga2h0bWwvZG9tL2Nzc19ydWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19ydWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApk
aWZmIC1wIC11IC1yMS44IGtodG1sL2RvbS9jc3NfcnVsZS5oCi0tLSBraHRtbC9kb20vY3NzX3J1
bGUuaAkxNiBTZXAgMjAwNSAyMjo0MjowMyAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9jc3NfcnVs
ZS5oCTI5IE5vdiAyMDA1IDEyOjQxOjI3IC0wMDAwCkBAIC0yNywyMSArMjcsOSBAQAogI2lmbmRl
ZiBfQ1NTX2Nzc19ydWxlX2hfCiAjZGVmaW5lIF9DU1NfY3NzX3J1bGVfaF8KIAotI2lmICFLSFRN
TF9OT19DUExVU1BMVVNfRE9NCi0KLSNpbmNsdWRlIDxkb20vZG9tX3N0cmluZy5oPgotI2luY2x1
ZGUgPGRvbS9jc3Nfc3R5bGVzaGVldC5oPgotI2luY2x1ZGUgPGRvbS9jc3NfdmFsdWUuaD4KLQot
I2VuZGlmCiAKIG5hbWVzcGFjZSBET00gewogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00K
LQotY2xhc3MgQ1NTUnVsZUltcGw7Ci0KLSNlbmRpZgogCiAvKioKICAqIFRoZSA8Y29kZT4gQ1NT
UnVsZSA8L2NvZGU+IGludGVyZmFjZSBpcyB0aGUgYWJzdHJhY3QgYmFzZSBpbnRlcmZhY2UKQEAg
LTYyLDE4ICs1MCw2IEBAIGNsYXNzIENTU1J1bGUKIAogcHVibGljOgogCi0jaWYgIUtIVE1MX05P
X0NQTFVTUExVU19ET00KLQotICAgIENTU1J1bGUoKTsKLSAgICBDU1NSdWxlKGNvbnN0IENTU1J1
bGUgJm90aGVyKTsKLSAgICBDU1NSdWxlKENTU1J1bGVJbXBsICppbXBsKTsKLXB1YmxpYzoKLQot
ICAgIENTU1J1bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NSdWxlICZvdGhlcik7Ci0KLSAgICB+
Q1NTUnVsZSgpOwotCi0jZW5kaWYKIAogICAgIC8qKgogICAgICAqIEFuIGludGVnZXIgaW5kaWNh
dGluZyB3aGljaCB0eXBlIG9mIHJ1bGUgdGhpcyBpcy4KQEAgLTkwLDQ2NyArNjYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIFFVSVJLU19SVUxFID0gMTAwIC8vIE5vdCBwYXJ0IG9mIHRoZSBvZmZpY2lh
bCBET00KICAgICB9OwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIC8qKgot
ICAgICAqIFRoZSB0eXBlIG9mIHRoZSBydWxlLCBhcyBkZWZpbmVkIGFib3ZlLiBUaGUgZXhwZWN0
YXRpb24gaXMgdGhhdAotICAgICAqIGJpbmRpbmctc3BlY2lmaWMgY2FzdGluZyBtZXRob2RzIGNh
biBiZSB1c2VkIHRvIGNhc3QgZG93biBmcm9tCi0gICAgICogYW4gaW5zdGFuY2Ugb2YgdGhlIDxj
b2RlPiBDU1NSdWxlIDwvY29kZT4gaW50ZXJmYWNlIHRvIHRoZQotICAgICAqIHNwZWNpZmljIGRl
cml2ZWQgaW50ZXJmYWNlIGltcGxpZWQgYnkgdGhlIDxjb2RlPiB0eXBlIDwvY29kZT4gLgotICAg
ICAqCi0gICAgICovCi0gICAgdW5zaWduZWQgc2hvcnQgdHlwZSgpIGNvbnN0OwotCi0gICAgLyoq
Ci0gICAgICogVGhlIHBhcnNhYmxlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJ1bGUu
IFRoaXMgcmVmbGVjdHMKLSAgICAgKiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcnVsZSBhbmQg
bm90IGl0cyBpbml0aWFsIHZhbHVlLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGNz
c1RleHQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIHNlZSBAcmVmIGNzc1RleHQKLSAgICAg
KiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqCi0gICAgICogIEhJRVJBUkNIWV9SRVFV
RVNUX0VSUjogUmFpc2VkIGlmIHRoZSBydWxlIGNhbm5vdCBiZSBpbnNlcnRlZAotICAgICAqIGF0
IHRoaXMgcG9pbnQgaW4gdGhlIHN0eWxlIHNoZWV0LgotICAgICAqCi0gICAgICogIE5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgc3R5bGUgc2hlZXQgaXMKLSAgICAg
KiByZWFkb25seS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gQ1NTRXhjZXB0aW9uCi0gICAg
ICogU1lOVEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgQ1NTIHN0cmluZyB2YWx1ZSBo
YXMgYQotICAgICAqIHN5bnRheCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4KLSAgICAgKgotICAg
ICAqIElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgQ1NT
IHN0cmluZyB2YWx1ZQotICAgICAqIHJlcHJlc2VudHMgYSBkaWZmZXJlbnQgdHlwZSBvZiBydWxl
IHRoYW4gdGhlIGN1cnJlbnQgb25lLgotICAgICAqLwotICAgIHZvaWQgc2V0Q3NzVGV4dCggY29u
c3QgRE9NU3RyaW5nICYgKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBzdHlsZSBzaGVldCB0aGF0
IGNvbnRhaW5zIHRoaXMgcnVsZS4KLSAgICAgKgotICAgICAqLwotICAgIENTU1N0eWxlU2hlZXQg
cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogSWYgdGhpcyBydWxl
IGlzIGNvbnRhaW5lZCBpbnNpZGUgYW5vdGhlciBydWxlIChlLmcuIGEgc3R5bGUKLSAgICAgKiBy
dWxlIGluc2lkZSBhbiBAbWVkaWEgYmxvY2spLCB0aGlzIGlzIHRoZSBjb250YWluaW5nIHJ1bGUu
IElmCi0gICAgICogdGhpcyBydWxlIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGFueSBvdGhlciBydWxl
cywgdGhpcyByZXR1cm5zCi0gICAgICogPGNvZGU+IG51bGwgPC9jb2RlPiAuCi0gICAgICoKLSAg
ICAgKi8KLSAgICBDU1NSdWxlIHBhcmVudFJ1bGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAq
IEBpbnRlcm5hbAotICAgICAqIG5vdCBwYXJ0IG9mIHRoZSBET00KLSAgICAgKi8KLSAgICBDU1NS
dWxlSW1wbCAqaGFuZGxlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdDsKLQotcHJv
dGVjdGVkOgotICAgIENTU1J1bGVJbXBsICppbXBsOwotCi0gICAgdm9pZCBhc3NpZ25PdGhlcigg
Y29uc3QgQ1NTUnVsZSAmb3RoZXIsIFJ1bGVUeXBlIHRoaXNUeXBlICk7Ci0KLSNlbmRpZgotCi19
OwotCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotY2xhc3MgQ1NTQ2hhcnNldFJ1bGVJ
bXBsOwotCi0vKioKLSAqIFRoZSA8Y29kZT4gQ1NTQ2hhcnNldFJ1bGUgPC9jb2RlPiBpbnRlcmZh
Y2UgYSA8YSBocmVmPSIiPiBAY2hhcnNldAotICogcnVsZSA8L2E+IGluIGEgQ1NTIHN0eWxlIHNo
ZWV0LiBBIDxjb2RlPiBAY2hhcnNldCA8L2NvZGU+IHJ1bGUgY2FuCi0gKiBiZSB1c2VkIHRvIGRl
ZmluZSB0aGUgZW5jb2Rpbmcgb2YgdGhlIHN0eWxlIHNoZWV0LgotICoKLSAqLwotY2xhc3MgQ1NT
Q2hhcnNldFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU0NoYXJzZXRS
dWxlKCk7Ci0gICAgQ1NTQ2hhcnNldFJ1bGUoY29uc3QgQ1NTQ2hhcnNldFJ1bGUgJm90aGVyKTsK
LSAgICBDU1NDaGFyc2V0UnVsZShjb25zdCBDU1NSdWxlICZvdGhlcik7Ci0gICAgQ1NTQ2hhcnNl
dFJ1bGUoQ1NTQ2hhcnNldFJ1bGVJbXBsICppbXBsKTsKLXB1YmxpYzoKLQotICAgIENTU0NoYXJz
ZXRSdWxlICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTQ2hhcnNldFJ1bGUgJm90aGVyKTsKLSAgICBD
U1NDaGFyc2V0UnVsZSAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLQotICAg
IH5DU1NDaGFyc2V0UnVsZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIGVuY29kaW5nIGluZm9y
bWF0aW9uIHVzZWQgaW4gdGhpcyA8Y29kZT4gQGNoYXJzZXQgPC9jb2RlPgotICAgICAqIHJ1bGUu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgZW5jb2RpbmcoKSBjb25zdDsKLQotICAg
IC8qKgotICAgICAqIHNlZSBAcmVmIGVuY29kaW5nCi0gICAgICogQGV4Y2VwdGlvbiBDU1NFeGNl
cHRpb24KLSAgICAgKiBTWU5UQVhfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBlbmNvZGlu
ZyB2YWx1ZSBoYXMgYSBzeW50YXgKLSAgICAgKiBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4KLSAg
ICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogIE5PX01PRElGSUNB
VElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgZW5jb2RpbmcgcnVsZSBpcwotICAgICAq
IHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZXRFbmNvZGluZyggY29uc3Qg
RE9NU3RyaW5nICYgKTsKLX07Ci0KLQotY2xhc3MgQ1NTRm9udEZhY2VSdWxlSW1wbDsKLS8qKgot
ICogVGhlIDxjb2RlPiBDU1NGb250RmFjZVJ1bGUgPC9jb2RlPiBpbnRlcmZhY2UgcmVwcmVzZW50
cyBhIDxhCi0gKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9mb250cy5odG1s
I2ZvbnQtZGVzY3JpcHRpb25zIj4KLSAqIEBmb250LWZhY2UgcnVsZSA8L2E+IGluIGEgQ1NTIHN0
eWxlIHNoZWV0LiBUaGUgPGNvZGU+IEBmb250LWZhY2UKLSAqIDwvY29kZT4gcnVsZSBpcyB1c2Vk
IHRvIGhvbGQgYSBzZXQgb2YgZm9udCBkZXNjcmlwdGlvbnMuCi0gKgotICovCi1jbGFzcyBDU1NG
b250RmFjZVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU0ZvbnRGYWNl
UnVsZSgpOwotICAgIENTU0ZvbnRGYWNlUnVsZShjb25zdCBDU1NGb250RmFjZVJ1bGUgJm90aGVy
KTsKLSAgICBDU1NGb250RmFjZVJ1bGUoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotICAgIENTU0Zv
bnRGYWNlUnVsZShDU1NGb250RmFjZVJ1bGVJbXBsICppbXBsKTsKLXB1YmxpYzoKLQotICAgIENT
U0ZvbnRGYWNlUnVsZSAmIG9wZXJhdG9yID0gKGNvbnN0IENTU0ZvbnRGYWNlUnVsZSAmb3RoZXIp
OwotICAgIENTU0ZvbnRGYWNlUnVsZSAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1J1bGUgJm90aGVy
KTsKLQotICAgIH5DU1NGb250RmFjZVJ1bGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSA8YSBo
cmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9zeW5kYXRhLmh0bWwjcTgiPgotICAg
ICAqIGRlY2xhcmF0aW9uLWJsb2NrIDwvYT4gb2YgdGhpcyBydWxlLgotICAgICAqCi0gICAgICov
Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBzdHlsZSgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NT
SW1wb3J0UnVsZUltcGw7Ci0vKioKLSAqIFRoZSA8Y29kZT4gQ1NTSW1wb3J0UnVsZSA8L2NvZGU+
IGludGVyZmFjZSByZXByZXNlbnRzIGEgPGEKLSAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RS
L1JFQy1DU1MyL2Nhc2NhZGUuaHRtbCNhdC1pbXBvcnQiPgotICogQGltcG9ydCBydWxlIDwvYT4g
d2l0aGluIGEgQ1NTIHN0eWxlIHNoZWV0LiBUaGUgPGNvZGU+IEBpbXBvcnQKLSAqIDwvY29kZT4g
cnVsZSBpcyB1c2VkIHRvIGltcG9ydCBzdHlsZSBydWxlcyBmcm9tIG90aGVyIHN0eWxlIHNoZWV0
cy4KLSAqCi0gKi8KLWNsYXNzIENTU0ltcG9ydFJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVi
bGljOgotICAgIENTU0ltcG9ydFJ1bGUoKTsKLSAgICBDU1NJbXBvcnRSdWxlKGNvbnN0IENTU0lt
cG9ydFJ1bGUgJm90aGVyKTsKLSAgICBDU1NJbXBvcnRSdWxlKGNvbnN0IENTU1J1bGUgJm90aGVy
KTsKLSAgICBDU1NJbXBvcnRSdWxlKENTU0ltcG9ydFJ1bGVJbXBsICppbXBsKTsKLXB1YmxpYzoK
LQotICAgIENTU0ltcG9ydFJ1bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NJbXBvcnRSdWxlICZv
dGhlcik7Ci0gICAgQ1NTSW1wb3J0UnVsZSAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1J1bGUgJm90
aGVyKTsKLQotICAgIH5DU1NJbXBvcnRSdWxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbG9j
YXRpb24gb2YgdGhlIHN0eWxlIHNoZWV0IHRvIGJlIGltcG9ydGVkLiBUaGUgYXR0cmlidXRlCi0g
ICAgICogd2lsbCBub3QgY29udGFpbiB0aGUgPGNvZGU+ICJ1cmwoLi4uKSIgPC9jb2RlPiBzcGVj
aWZpZXIgYXJvdW5kCi0gICAgICogdGhlIFVSSS4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0
cmluZyBocmVmKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBBIGxpc3Qgb2YgbWVkaWEgdHlw
ZXMgZm9yIHdoaWNoIHRoaXMgc3R5bGUgc2hlZXQgbWF5IGJlIHVzZWQuCi0gICAgICoKLSAgICAg
Ki8KLSAgICBNZWRpYUxpc3QgbWVkaWEoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBz
dHlsZSBzaGVldCByZWZlcnJlZCB0byBieSB0aGlzIHJ1bGUsIGlmIGl0IGhhcyBiZWVuCi0gICAg
ICogbG9hZGVkLiBUaGUgdmFsdWUgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgbnVsbCBpZiB0aGUgc3R5
bGUgc2hlZXQKLSAgICAgKiBoYXMgbm90IHlldCBiZWVuIGxvYWRlZCBvciBpZiBpdCB3aWxsIG5v
dCBiZSBsb2FkZWQgKGUuZy4gaWYKLSAgICAgKiB0aGUgc3R5bGUgc2hlZXQgaXMgZm9yIGEgbWVk
aWEgdHlwZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1c2VyCi0gICAgICogYWdlbnQpLgotICAgICAq
Ci0gICAgICovCi0gICAgQ1NTU3R5bGVTaGVldCBzdHlsZVNoZWV0KCkgY29uc3Q7Ci19OwotCi1j
bGFzcyBDU1NNZWRpYVJ1bGVJbXBsOwotLyoqCi0gKiBUaGUgPGNvZGU+IENTU01lZGlhUnVsZSA8
L2NvZGU+IGludGVyZmFjZSByZXByZXNlbnRzIGEgPGEKLSAqIGhyZWY9Imh0dHA6Ly93d3cudzMu
b3JnL1RSL1JFQy1DU1MyL21lZGlhLmh0bWwjYXQtbWVkaWEtcnVsZSI+Ci0gKiBAbWVkaWEgcnVs
ZSA8L2E+IGluIGEgQ1NTIHN0eWxlIHNoZWV0LiBBIDxjb2RlPiBAbWVkaWEgPC9jb2RlPiBydWxl
Ci0gKiBjYW4gYmUgdXNlZCB0byBkZWxpbWl0IHN0eWxlIHJ1bGVzIGZvciBzcGVjaWZpYyBtZWRp
YSB0eXBlcy4KLSAqCi0gKi8KLWNsYXNzIENTU01lZGlhUnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17
Ci1wdWJsaWM6Ci0gICAgQ1NTTWVkaWFSdWxlKCk7Ci0gICAgQ1NTTWVkaWFSdWxlKGNvbnN0IENT
U01lZGlhUnVsZSAmb3RoZXIpOwotICAgIENTU01lZGlhUnVsZShjb25zdCBDU1NSdWxlICZvdGhl
cik7Ci0gICAgQ1NTTWVkaWFSdWxlKENTU01lZGlhUnVsZUltcGwgKmltcGwpOwotcHVibGljOgot
Ci0gICAgQ1NTTWVkaWFSdWxlICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTTWVkaWFSdWxlICZvdGhl
cik7Ci0gICAgQ1NTTWVkaWFSdWxlICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTUnVsZSAmb3RoZXIp
OwogCi0gICAgfkNTU01lZGlhUnVsZSgpOwotCi0gICAgLyoqCi0gICAgICogQSBsaXN0IG9mIDxh
Ci0gICAgICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvbWVkaWEuaHRtbCNt
ZWRpYS10eXBlcyI+Ci0gICAgICogbWVkaWEgdHlwZXMgPC9hPiBmb3IgdGhpcyBydWxlLgotICAg
ICAqCi0gICAgICovCi0gICAgTWVkaWFMaXN0IG1lZGlhKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAg
ICAgKiBBIGxpc3Qgb2YgYWxsIENTUyBydWxlcyBjb250YWluZWQgd2l0aGluIHRoZSBtZWRpYSBi
bG9jay4KLSAgICAgKgotICAgICAqLwotICAgIENTU1J1bGVMaXN0IGNzc1J1bGVzKCkgY29uc3Q7
Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGluc2VydCBhIG5ldyBydWxlIGludG8gdGhlIG1l
ZGlhIGJsb2NrLgotICAgICAqCi0gICAgICogQHBhcmFtIHJ1bGUgVGhlIHBhcnNhYmxlIHRleHQg
cmVwcmVzZW50aW5nIHRoZSBydWxlLiBGb3IgcnVsZQotICAgICAqIHNldHMgdGhpcyBjb250YWlu
cyBib3RoIHRoZSBzZWxlY3RvciBhbmQgdGhlIHN0eWxlIGRlY2xhcmF0aW9uLgotICAgICAqIEZv
ciBhdC1ydWxlcywgdGhpcyBzcGVjaWZpZXMgYm90aCB0aGUgYXQtaWRlbnRpZmllciBhbmQgdGhl
Ci0gICAgICogcnVsZSBjb250ZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IFRoZSBp
bmRleCB3aXRoaW4gdGhlIG1lZGlhIGJsb2NrJ3MgcnVsZSBjb2xsZWN0aW9uCi0gICAgICogb2Yg
dGhlIHJ1bGUgYmVmb3JlIHdoaWNoIHRvIGluc2VydCB0aGUgc3BlY2lmaWVkIHJ1bGUuIElmIHRo
ZQotICAgICAqIHNwZWNpZmllZCBpbmRleCBpcyBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBt
ZWRpYSBibG9ja3MncwotICAgICAqIHJ1bGUgY29sbGVjdGlvbiwgdGhlIHJ1bGUgd2lsbCBiZSBh
ZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBtZWRpYQotICAgICAqIGJsb2NrLgotICAgICAqCi0gICAg
ICogQHJldHVybiBUaGUgaW5kZXggd2l0aGluIHRoZSBtZWRpYSBibG9jaydzIHJ1bGUgY29sbGVj
dGlvbiBvZgotICAgICAqIHRoZSBuZXdseSBpbnNlcnRlZCBydWxlLgotICAgICAqCi0gICAgICog
QGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJh
aXNlZCBpZiB0aGUgcnVsZSBjYW5ub3QgYmUgaW5zZXJ0ZWQgYXQKLSAgICAgKiB0aGUgc3BlY2lm
aWVkIGluZGV4LiBlLmcuIGlmIGFuIDxjb2RlPiBAaW1wb3J0IDwvY29kZT4gcnVsZSBpcwotICAg
ICAqIGluc2VydGVkIGFmdGVyIGEgc3RhbmRhcmQgcnVsZSBzZXQgb3Igb3RoZXIgYXQtcnVsZS4K
LSAgICAgKgotICAgICAqICBJTkRFWF9TSVpFX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQg
aW5kZXggaXMgbm90IGEgdmFsaWQKLSAgICAgKiBpbnNlcnRpb24gcG9pbnQuCi0gICAgICoKLSAg
ICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBtZWRpYSBy
dWxlIGlzCi0gICAgICogcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIENTU0V4
Y2VwdGlvbgotICAgICAqICBTWU5UQVhfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBydWxl
IGhhcyBhIHN5bnRheCBlcnJvcgotICAgICAqIGFuZCBpcyB1bnBhcnNhYmxlLgotICAgICAqCi0g
ICAgICovCi0gICAgdW5zaWduZWQgaW5zZXJ0UnVsZSAoIGNvbnN0IERPTVN0cmluZyAmcnVsZSwg
dW5zaWduZWQgaW5kZXggKTsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gZGVsZXRlIGEgcnVs
ZSBmcm9tIHRoZSBtZWRpYSBibG9jay4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBUaGUg
aW5kZXggd2l0aGluIHRoZSBtZWRpYSBibG9jaydzIHJ1bGUgY29sbGVjdGlvbgotICAgICAqIG9m
IHRoZSBydWxlIHRvIHJlbW92ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKgotICAg
ICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSU5ERVhfU0laRV9FUlI6IFJhaXNl
ZCBpZiB0aGUgc3BlY2lmaWVkIGluZGV4IGRvZXMgbm90Ci0gICAgICogY29ycmVzcG9uZCB0byBh
IHJ1bGUgaW4gdGhlIG1lZGlhIHJ1bGUgbGlzdC4KLSAgICAgKgotICAgICAqICBOT19NT0RJRklD
QVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG1lZGlhIHJ1bGUgaXMKLSAgICAgKiBy
ZWFkb25seS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgZGVsZXRlUnVsZSAoIHVuc2lnbmVk
IGluZGV4ICk7Ci19OwotCi0KLWNsYXNzIENTU1BhZ2VSdWxlSW1wbDsKLS8qKgotICogVGhlIDxj
b2RlPiBDU1NQYWdlUnVsZSA8L2NvZGU+IGludGVyZmFjZSByZXByZXNlbnRzIGEgPGEKLSAqIGhy
ZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL3BhZ2UuaHRtbCNwYWdlLWJveCI+IEBw
YWdlIHJ1bGUKLSAqIDwvYT4gd2l0aGluIGEgQ1NTIHN0eWxlIHNoZWV0LiBUaGUgPGNvZGU+IEBw
YWdlIDwvY29kZT4gcnVsZSBpcwotICogdXNlZCB0byBzcGVjaWZ5IHRoZSBkaW1lbnNpb25zLCBv
cmllbnRhdGlvbiwgbWFyZ2lucywgZXRjLiBvZiBhCi0gKiBwYWdlIGJveCBmb3IgcGFnZWQgbWVk
aWEuCi0gKgotICovCi1jbGFzcyBDU1NQYWdlUnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17Ci1wdWJs
aWM6Ci0gICAgQ1NTUGFnZVJ1bGUoKTsKLSAgICBDU1NQYWdlUnVsZShjb25zdCBDU1NQYWdlUnVs
ZSAmb3RoZXIpOwotICAgIENTU1BhZ2VSdWxlKGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLSAgICBD
U1NQYWdlUnVsZShDU1NQYWdlUnVsZUltcGwgKmltcGwpOwotcHVibGljOgotCi0gICAgQ1NTUGFn
ZVJ1bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NQYWdlUnVsZSAmb3RoZXIpOwotICAgIENTU1Bh
Z2VSdWxlICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotCi0gICAgfkNTU1Bh
Z2VSdWxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgcGFyc2FibGUgdGV4dHVhbCByZXByZXNl
bnRhdGlvbiBvZiB0aGUgcGFnZSBzZWxlY3RvciBmb3IKLSAgICAgKiB0aGUgcnVsZS4KLSAgICAg
KgotICAgICAqLwotICAgIERPTVN0cmluZyBzZWxlY3RvclRleHQoKSBjb25zdDsKLQotICAgIC8q
KgotICAgICAqIHNlZSBAcmVmIHNlbGVjdG9yVGV4dAotICAgICAqIEBleGNlcHRpb24gQ1NTRXhj
ZXB0aW9uCi0gICAgICogU1lOVEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgQ1NTIHN0
cmluZyB2YWx1ZSBoYXMgYQotICAgICAqIHN5bnRheCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4K
LSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogIE5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgc3R5bGUgc2hlZXQgaXMKLSAgICAg
KiByZWFkb25seS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0U2VsZWN0b3JUZXh0KCBj
b25zdCBET01TdHJpbmcgJiApOwotCi0gICAgLyoqCi0gICAgICogVGhlIDxhIGhyZWY9Imh0dHA6
Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL3N5bmRhdGEuaHRtbCNxOCI+Ci0gICAgICogZGVjbGFy
YXRpb24tYmxvY2sgPC9hPiBvZiB0aGlzIHJ1bGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBDU1NT
dHlsZURlY2xhcmF0aW9uIHN0eWxlKCkgY29uc3Q7Ci19OwotCi1jbGFzcyBDU1NTdHlsZVJ1bGVJ
bXBsOwotLyoqCi0gKiBUaGUgPGNvZGU+IENTU1N0eWxlUnVsZSA8L2NvZGU+IGludGVyZmFjZSBy
ZXByZXNlbnRzIGEgc2luZ2xlIDxhCi0gKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMt
Q1NTMi9zeW5kYXRhLmh0bWwjcTgiPiBydWxlIHNldCA8L2E+Ci0gKiBpbiBhIENTUyBzdHlsZSBz
aGVldC4KLSAqCi0gKi8KLWNsYXNzIENTU1N0eWxlUnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17Ci1w
dWJsaWM6Ci0gICAgQ1NTU3R5bGVSdWxlKCk7Ci0gICAgQ1NTU3R5bGVSdWxlKGNvbnN0IENTU1N0
eWxlUnVsZSAmb3RoZXIpOwotICAgIENTU1N0eWxlUnVsZShjb25zdCBDU1NSdWxlICZvdGhlcik7
Ci0gICAgQ1NTU3R5bGVSdWxlKENTU1N0eWxlUnVsZUltcGwgKmltcGwpOwotcHVibGljOgotCi0g
ICAgQ1NTU3R5bGVSdWxlICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTU3R5bGVSdWxlICZvdGhlcik7
Ci0gICAgQ1NTU3R5bGVSdWxlICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwot
Ci0gICAgfkNTU1N0eWxlUnVsZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIHRleHR1YWwgcmVw
cmVzZW50YXRpb24gb2YgdGhlIDxhCi0gICAgICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIv
UkVDLUNTUzIvc2VsZWN0b3IuaHRtbCI+IHNlbGVjdG9yCi0gICAgICogPC9hPiBmb3IgdGhlIHJ1
bGUgc2V0LiBUaGUgaW1wbGVtZW50YXRpb24gbWF5IGhhdmUgc3RyaXBwZWQgb3V0Ci0gICAgICog
aW5zaWduaWZpY2FudCB3aGl0ZXNwYWNlIHdoaWxlIHBhcnNpbmcgdGhlIHNlbGVjdG9yLgotICAg
ICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIHNlbGVjdG9yVGV4dCgpIGNvbnN0OwotCi0gICAg
LyoqCi0gICAgICogc2VlIEByZWYgc2VsZWN0b3JUZXh0Ci0gICAgICogQGV4Y2VwdGlvbiBDU1NF
eGNlcHRpb24KLSAgICAgKiBTWU5UQVhfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBDU1Mg
c3RyaW5nIHZhbHVlIGhhcyBhCi0gICAgICogc3ludGF4IGVycm9yIGFuZCBpcyB1bnBhcnNhYmxl
LgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiAgTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBzdHlsZSBzaGVldCBpcwotICAg
ICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZXRTZWxlY3RvclRleHQo
IGNvbnN0IERPTVN0cmluZyAmICk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgPGEgaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvc3luZGF0YS5odG1sI3E4Ij4KLSAgICAgKiBkZWNs
YXJhdGlvbi1ibG9jayA8L2E+IG9mIHRoaXMgcnVsZSBzZXQuCi0gICAgICoKLSAgICAgKi8KLSAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uIHN0eWxlKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBDU1NVbmtu
b3duUnVsZUltcGw7Ci0vKioKLSAqIFRoZSA8Y29kZT4gQ1NTVW5rb3duUnVsZSA8L2NvZGU+IGlu
dGVyZmFjZSByZXByZXNlbnRzIGFuIGF0LXJ1bGUKLSAqIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB1
c2VyIGFnZW50LgotICoKLSAqLwotY2xhc3MgQ1NTVW5rbm93blJ1bGUgOiBwdWJsaWMgQ1NTUnVs
ZQotewotcHVibGljOgotICAgIENTU1Vua25vd25SdWxlKCk7Ci0gICAgQ1NTVW5rbm93blJ1bGUo
Y29uc3QgQ1NTVW5rbm93blJ1bGUgJm90aGVyKTsKLSAgICBDU1NVbmtub3duUnVsZShjb25zdCBD
U1NSdWxlICZvdGhlcik7Ci0gICAgQ1NTVW5rbm93blJ1bGUoQ1NTVW5rbm93blJ1bGVJbXBsICpp
bXBsKTsKLXB1YmxpYzoKLQotICAgIENTU1Vua25vd25SdWxlICYgb3BlcmF0b3IgPSAoY29uc3Qg
Q1NTVW5rbm93blJ1bGUgJm90aGVyKTsKLSAgICBDU1NVbmtub3duUnVsZSAmIG9wZXJhdG9yID0g
KGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLQotICAgIH5DU1NVbmtub3duUnVsZSgpOwotfTsKLQot
Ci1jbGFzcyBDU1NSdWxlTGlzdEltcGw7Ci1jbGFzcyBTdHlsZUxpc3RJbXBsOwotLyoqCi0gKiBU
aGUgPGNvZGU+IENTU1J1bGVMaXN0IDwvY29kZT4gaW50ZXJmYWNlIHByb3ZpZGVzIHRoZSBhYnN0
cmFjdGlvbgotICogb2YgYW4gb3JkZXJlZCBjb2xsZWN0aW9uIG9mIENTUyBydWxlcy4KLSAqCi0g
Ki8KLWNsYXNzIENTU1J1bGVMaXN0Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTUnVsZUxpc3QoKTsKLSAg
ICBDU1NSdWxlTGlzdChjb25zdCBDU1NSdWxlTGlzdCAmb3RoZXIpOwotICAgIENTU1J1bGVMaXN0
KENTU1J1bGVMaXN0SW1wbCAqaSk7Ci0gICAgQ1NTUnVsZUxpc3QoU3R5bGVMaXN0SW1wbCAqaSk7
Ci1wdWJsaWM6Ci0KLSAgICBDU1NSdWxlTGlzdCAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1J1bGVM
aXN0ICZvdGhlcik7Ci0KLSAgICB+Q1NTUnVsZUxpc3QoKTsKLQotICAgIC8qKgotICAgICAqIFRo
ZSBudW1iZXIgb2YgPGNvZGU+IENTU1J1bGUgPC9jb2RlPiBzIGluIHRoZSBsaXN0LiBUaGUgcmFu
Z2UKLSAgICAgKiBvZiB2YWxpZCBjaGlsZCBydWxlIGluZGljZXMgaXMgPGNvZGU+IDAgPC9jb2Rl
PiB0byA8Y29kZT4KLSAgICAgKiBsZW5ndGgtMSA8L2NvZGU+IGluY2x1c2l2ZS4KLSAgICAgKgot
ICAgICAqLwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
VXNlZCB0byByZXRyaWV2ZSBhIENTUyBydWxlIGJ5IG9yZGluYWwgaW5kZXguIFRoZSBvcmRlciBp
biB0aGlzCi0gICAgICogY29sbGVjdGlvbiByZXByZXNlbnRzIHRoZSBvcmRlciBvZiB0aGUgcnVs
ZXMgaW4gdGhlIENTUyBzdHlsZQotICAgICAqIHNoZWV0LgotICAgICAqCi0gICAgICogQHBhcmFt
IGluZGV4IEluZGV4IGludG8gdGhlIGNvbGxlY3Rpb24KLSAgICAgKgotICAgICAqIEByZXR1cm4g
VGhlIHN0eWxlIHJ1bGUgYXQgdGhlIDxjb2RlPiBpbmRleCA8L2NvZGU+IHBvc2l0aW9uIGluCi0g
ICAgICogdGhlIDxjb2RlPiBDU1NSdWxlTGlzdCA8L2NvZGU+ICwgb3IgPGNvZGU+IG51bGwgPC9j
b2RlPiBpZiB0aGF0Ci0gICAgICogaXMgbm90IGEgdmFsaWQgaW5kZXguCi0gICAgICoKLSAgICAg
Ki8KLSAgICBDU1NSdWxlIGl0ZW0gKCB1bnNpZ25lZCBpbmRleCApOwotCi0gICAgLyoqCi0gICAg
ICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwotICAgIENT
U1J1bGVMaXN0SW1wbCAqaGFuZGxlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdDsK
LQotcHJvdGVjdGVkOgotICAgIC8vIHdlIGp1c3QgbmVlZCBhIHBvaW50ZXIgdG8gYW4gaW1wbGVt
ZW50YXRpb24gaGVyZS4KLSAgICBDU1NSdWxlTGlzdEltcGwgKmltcGw7Ci19OwotCi0jZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UKIApJbmRleDoga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19zdHlsZXNo
ZWV0LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAga2h0bWwv
ZG9tL2Nzc19zdHlsZXNoZWV0LmgKLS0tIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5oCTE2IFNl
cCAyMDA1IDIyOjQyOjAzIC0wMDAwCTEuMTAKKysrIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5o
CTI5IE5vdiAyMDA1IDEyOjQxOjI3IC0wMDAwCkBAIC0yOSwxNDkgKzI5LDkgQEAKICNpZm5kZWYg
X0NTU19jc3Nfc3R5bGVzaGVldF9oXwogI2RlZmluZSBfQ1NTX2Nzc19zdHlsZXNoZWV0X2hfCiAK
LSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0jaW5jbHVkZSA8ZG9tL2RvbV9zdHJpbmcu
aD4KLSNpbmNsdWRlIDxkb20vZG9tX25vZGUuaD4KLSNpbmNsdWRlIDxkb20vZG9tX21pc2MuaD4K
LQotI2VuZGlmCiAKIG5hbWVzcGFjZSBET00gewogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19E
T00KLQotY2xhc3MgU3R5bGVTaGVldEltcGw7Ci1jbGFzcyBNZWRpYUxpc3Q7Ci1jbGFzcyBOb2Rl
SW1wbDsKLWNsYXNzIERvY3VtZW50SW1wbDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+IFN0eWxlU2hl
ZXQgPC9jb2RlPiBpbnRlcmZhY2UgaXMgdGhlIGFic3RyYWN0IGJhc2UKLSAqIGludGVyZmFjZSBm
b3IgYW55IHR5cGUgb2Ygc3R5bGUgc2hlZXQuIEl0IHJlcHJlc2VudHMgYSBzaW5nbGUgc3R5bGUK
LSAqIHNoZWV0IGFzc29jaWF0ZWQgd2l0aCBhIHN0cnVjdHVyZWQgZG9jdW1lbnQuIEluIEhUTUws
IHRoZQotICogU3R5bGVTaGVldCBpbnRlcmZhY2UgcmVwcmVzZW50cyBlaXRoZXIgYW4gZXh0ZXJu
YWwgc3R5bGUgc2hlZXQsCi0gKiBpbmNsdWRlZCB2aWEgdGhlIEhUTUwgPGEKLSAqIGhyZWY9Imh0
dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvc3RydWN0L2xpbmtzLmh0bWwjaC0xMi4zIj4K
LSAqIExJTksgPC9hPiBlbGVtZW50LCBvciBhbiBpbmxpbmUgPGEKLSAqIGhyZWY9Imh0dHA6Ly93
d3cudzMub3JnL1RSL1JFQy1odG1sNDAvcHJlc2VudC9zdHlsZXMuaHRtbCNoLTE0LjIuMyI+Ci0g
KiBTVFlMRSA8L2E+IGVsZW1lbnQuIEluIFhNTCwgdGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyBh
biBleHRlcm5hbAotICogc3R5bGUgc2hlZXQsIGluY2x1ZGVkIHZpYSBhIDxhCi0gKiBocmVmPSJo
dHRwOi8vd3d3LnczLm9yZy9UUi94bWwtc3R5bGVzaGVldCI+IHN0eWxlIHNoZWV0IHByb2Nlc3Np
bmcKLSAqIGluc3RydWN0aW9uIDwvYT4gLgotICoKLSAqLwotY2xhc3MgU3R5bGVTaGVldAotewot
cHVibGljOgotICAgIFN0eWxlU2hlZXQoKTsKLSAgICBTdHlsZVNoZWV0KGNvbnN0IFN0eWxlU2hl
ZXQgJm90aGVyKTsKLSAgICBTdHlsZVNoZWV0KFN0eWxlU2hlZXRJbXBsICppbXBsKTsKLXB1Ymxp
YzoKLQotICAgIFN0eWxlU2hlZXQgJiBvcGVyYXRvciA9IChjb25zdCBTdHlsZVNoZWV0ICZvdGhl
cik7Ci0KLSAgICB+U3R5bGVTaGVldCgpOwotCi0gICAgLyoqCi0gICAgICogVGhpcyBzcGVjaWZp
ZXMgdGhlIHN0eWxlIHNoZWV0IGxhbmd1YWdlIGZvciB0aGlzIHN0eWxlIHNoZWV0LgotICAgICAq
IFRoZSBzdHlsZSBzaGVldCBsYW5ndWFnZSBpcyBzcGVjaWZpZWQgYXMgYSBjb250ZW50IHR5cGUg
KGUuZy4KLSAgICAgKiAidGV4dC9jc3MiKS4gVGhlIGNvbnRlbnQgdHlwZSBpcyBvZnRlbiBzcGVj
aWZpZWQgaW4gdGhlIDxjb2RlPgotICAgICAqIG93bmVyTm9kZSA8L2NvZGU+IC4gQSBsaXN0IG9m
IHJlZ2lzdGVyZWQgY29udGVudCB0eXBlcyBjYW4gYmUKLSAgICAgKiBmb3VuZCBhdCA8YQotICAg
ICAqIGhyZWY9ImZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL2lhbmEvYXNzaWdubWVudHMvbWVk
aWEtdHlwZXMvIj4KLSAgICAgKiBmdHA6Ly9mdHAuaXNpLmVkdS9pbi1ub3Rlcy9pYW5hL2Fzc2ln
bm1lbnRzL21lZGlhLXR5cGVzLyA8L2E+IC4KLSAgICAgKiBBbHNvIHNlZSB0aGUgPGEKLSAgICAg
KiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL3N0cnVjdC9saW5rcy5odG1s
I2FkZWYtdHlwZS1BIj4KLSAgICAgKiB0eXBlIGF0dHJpYnV0ZSBkZWZpbml0aW9uIDwvYT4gZm9y
IHRoZSA8Y29kZT4gTElOSyA8L2NvZGU+Ci0gICAgICogZWxlbWVudCBpbiBIVE1MIDQuMCwgYW5k
IHRoZSB0eXBlIHBzZXVkby1hdHRyaWJ1dGUgZm9yIHRoZSBYTUwKLSAgICAgKiA8YSBocmVmPSJo
dHRwOi8vd3d3LnczLm9yZy9UUi94bWwtc3R5bGVzaGVldCI+IHN0eWxlIHNoZWV0Ci0gICAgICog
cHJvY2Vzc2luZyBpbnN0cnVjdGlvbiA8L2E+IC4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0
cmluZyB0eXBlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiA8Y29kZT4gZmFsc2UgPC9jb2Rl
PiBpZiB0aGUgc3R5bGUgc2hlZXQgaXMgYXBwbGllZCB0byB0aGUKLSAgICAgKiBkb2N1bWVudC4g
PGNvZGU+IHRydWUgPC9jb2RlPiBpZiBpdCBpcyBub3QuIE1vZGlmeWluZyB0aGlzCi0gICAgICog
YXR0cmlidXRlIG1heSBjYXVzZSBhIHJlcmVzb2x1dGlvbiBvZiBzdHlsZSBmb3IgdGhlIGRvY3Vt
ZW50LgotICAgICAqCi0gICAgICovCi0gICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwotCi0gICAg
LyoqCi0gICAgICogc2VlIEByZWYgZGlzYWJsZWQKLSAgICAgKi8KLSAgICB2b2lkIHNldERpc2Fi
bGVkKCBib29sICk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbm9kZSB0aGF0IGFzc29jaWF0ZXMg
dGhpcyBzdHlsZSBzaGVldCB3aXRoIHRoZSBkb2N1bWVudC4KLSAgICAgKiBGb3IgSFRNTCwgdGhp
cyBtYXkgYmUgdGhlIGNvcnJlc3BvbmRpbmcgPGNvZGU+IExJTksgPC9jb2RlPiBvcgotICAgICAq
IDxjb2RlPiBTVFlMRSA8L2NvZGU+IGVsZW1lbnQuIEZvciBYTUwsIGl0IG1heSBiZSB0aGUgbGlu
a2luZwotICAgICAqIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uIEZvciBzdHlsZSBzaGVldHMgdGhh
dCBhcmUgaW5jbHVkZWQgYnkKLSAgICAgKiBvdGhlciBzdHlsZSBzaGVldHMsIHRoaXMgYXR0cmli
dXRlIGhhcyBhIHZhbHVlIG9mIG51bGwuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIG93bmVy
Tm9kZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogRm9yIHN0eWxlIHNoZWV0IGxhbmd1YWdl
cyB0aGF0IHN1cHBvcnQgdGhlIGNvbmNlcHQgb2Ygc3R5bGUKLSAgICAgKiBzaGVldCBpbmNsdXNp
b24sIHRoaXMgYXR0cmlidXRlIHJlcHJlc2VudHMgdGhlIGluY2x1ZGluZyBzdHlsZQotICAgICAq
IHNoZWV0LCBpZiBvbmUgZXhpc3RzLiBJZiB0aGUgc3R5bGUgc2hlZXQgaXMgYSB0b3AtbGV2ZWwg
c3R5bGUKLSAgICAgKiBzaGVldCwgb3IgdGhlIHN0eWxlIHNoZWV0IGxhbmd1YWdlIGRvZXMgbm90
IHN1cHBvcnQgaW5jbHVzaW9uLAotICAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGlz
IG51bGwuCi0gICAgICoKLSAgICAgKi8KLSAgICBTdHlsZVNoZWV0IHBhcmVudFN0eWxlU2hlZXQo
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIElmIHRoZSBzdHlsZSBzaGVldCBpcyBhIGxpbmtl
ZCBzdHlsZSBzaGVldCwgdGhlIHZhbHVlIG9mIGl0cwotICAgICAqIGF0dHJpYnV0ZSBpcyBpdHMg
bG9jYXRpb24uIEZvciBpbmxpbmUgc3R5bGUgc2hlZXRzLCB0aGUgdmFsdWUKLSAgICAgKiBvZiB0
aGlzIGF0dHJpYnV0ZSBpcyBudWxsLiBTZWUgdGhlIDxhCi0gICAgICogaHJlZj0iaHR0cDovL3d3
dy53My5vcmcvVFIvUkVDLWh0bWw0MC9zdHJ1Y3QvbGlua3MuaHRtbCNhZGVmLWhyZWYiPgotICAg
ICAqIGhyZWYgYXR0cmlidXRlIGRlZmluaXRpb24gPC9hPiBmb3IgdGhlIDxjb2RlPiBMSU5LIDwv
Y29kZT4KLSAgICAgKiBlbGVtZW50IGluIEhUTUwgNC4wLCBhbmQgdGhlIGhyZWYgcHNldWRvLWF0
dHJpYnV0ZSBmb3IgdGhlIFhNTAotICAgICAqIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RS
L3htbC1zdHlsZXNoZWV0Ij4gc3R5bGUgc2hlZXQKLSAgICAgKiBwcm9jZXNzaW5nIGluc3RydWN0
aW9uIDwvYT4gLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGhyZWYoKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIFRoZSBhZHZpc29yeSB0aXRsZS4gVGhlIHRpdGxlIGlzIG9mdGVu
IHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Ci0gICAgICogb3duZXJOb2RlIDwvY29kZT4gLiBTZWUg
dGhlIDxhCi0gICAgICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9zdHJ1
Y3QvZ2xvYmFsLmh0bWwjYWRlZi10aXRsZSI+Ci0gICAgICogdGl0bGUgYXR0cmlidXRlIGRlZmlu
aXRpb24gPC9hPiBmb3IgdGhlIDxjb2RlPiBMSU5LIDwvY29kZT4KLSAgICAgKiBlbGVtZW50IGlu
IEhUTUwgNC4wLCBhbmQgdGhlIHRpdGxlIHBzZXVkby1hdHRyaWJ1dGUgZm9yIHRoZSBYTUwKLSAg
ICAgKiA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtc3R5bGVzaGVldCI+IHN0eWxl
IHNoZWV0Ci0gICAgICogcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiA8L2E+IC4KLSAgICAgKgotICAg
ICAqLwotICAgIERPTVN0cmluZyB0aXRsZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVGhl
IGludGVuZGVkIGRlc3RpbmF0aW9uIG1lZGlhIGZvciBzdHlsZSBpbmZvcm1hdGlvbi4gVGhlIG1l
ZGlhCi0gICAgICogaXMgb2Z0ZW4gc3BlY2lmaWVkIGluIHRoZSA8Y29kZT4gb3duZXJOb2RlIDwv
Y29kZT4gLiBTZWUgdGhlIDxhCi0gICAgICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVD
LWh0bWw0MC9wcmVzZW50L3N0eWxlcy5odG1sI2FkZWYtbWVkaWEiPgotICAgICAqIG1lZGlhIGF0
dHJpYnV0ZSBkZWZpbml0aW9uIDwvYT4gZm9yIHRoZSA8Y29kZT4gTElOSyA8L2NvZGU+Ci0gICAg
ICogZWxlbWVudCBpbiBIVE1MIDQuMCwgYW5kIHRoZSBtZWRpYSBwc2V1ZG8tYXR0cmlidXRlIGZv
ciB0aGUgWE1MCi0gICAgICogPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvV0QteG1sLXN0
eWxlc2hlZXQiPiBzdHlsZSBzaGVldAotICAgICAqIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gPC9h
PiAuCi0gICAgICoKLSAgICAgKi8KLSAgICBNZWRpYUxpc3QgbWVkaWEoKSBjb25zdDsKLQotICAg
IC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqLwotICAgIGJvb2wgaXNDU1NTdHlsZVNoZWV0
KCkgY29uc3Q7Ci0gICAgU3R5bGVTaGVldEltcGwgKmhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIGlt
cGw7IH0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotcHJvdGVjdGVkOgotICAgIFN0eWxlU2hl
ZXRJbXBsICppbXBsOwotfTsKLQotI2VuZGlmCiAKIC8qKgogICogVGhpcyBleGNlcHRpb24gaXMg
cmFpc2VkIHdoZW4gYSBzcGVjaWZpYyBDU1Mgb3BlcmF0aW9uIGlzIGltcG9zc2libGUKQEAgLTE4
MiwyMiArNDIsNiBAQCBjbGFzcyBDU1NFeGNlcHRpb24KIAogcHVibGljOgogCi0jaWYgIUtIVE1M
X05PX0NQTFVTUExVU19ET00KLQotICAgIENTU0V4Y2VwdGlvbih1bnNpZ25lZCBzaG9ydCBfY29k
ZSkgeyBjb2RlID0gX2NvZGU7IH0KLSAgICBDU1NFeGNlcHRpb24oY29uc3QgQ1NTRXhjZXB0aW9u
ICZvdGhlcikgeyBjb2RlID0gb3RoZXIuY29kZTsgfQotCi0gICAgQ1NTRXhjZXB0aW9uICYgb3Bl
cmF0b3IgPSAoY29uc3QgQ1NTRXhjZXB0aW9uICZvdGhlcikKLSAgICAgICAgeyBjb2RlID0gb3Ro
ZXIuY29kZTsgcmV0dXJuICp0aGlzOyB9Ci0KLSAgICB2aXJ0dWFsIH5DU1NFeGNlcHRpb24oKSB7
fQotICAgIC8qKgotICAgICAqIEFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBlcnJv
ciBnZW5lcmF0ZWQuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCAgIGNvZGU7
Ci0KLSNlbmRpZgogCiAgICAgZW51bSBFeGNlcHRpb25Db2RlCiAgICAgewpAQCAtMjA4LDMwOSAr
NTIsNiBAQCBwdWJsaWM6CiAgICAgfTsKIH07CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RP
TQotCi1jbGFzcyBDU1NTdHlsZVNoZWV0SW1wbDsKLWNsYXNzIENTU1J1bGU7Ci1jbGFzcyBDU1NS
dWxlTGlzdDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+IENTU1N0eWxlU2hlZXQgPC9jb2RlPiBpbnRl
cmZhY2UgaXMgYSBjb25jcmV0ZSBpbnRlcmZhY2UKLSAqIHVzZWQgdG8gcmVwcmVzZW50IGEgQ1NT
IHN0eWxlIHNoZWV0IGkuZS4gYSBzdHlsZSBzaGVldCB3aG9zZQotICogY29udGVudCB0eXBlIGlz
ICJ0ZXh0L2NzcyIuCi0gKgotICovCi1jbGFzcyBDU1NTdHlsZVNoZWV0IDogcHVibGljIFN0eWxl
U2hlZXQKLXsKLXB1YmxpYzoKLSAgICBDU1NTdHlsZVNoZWV0KCk7Ci0gICAgQ1NTU3R5bGVTaGVl
dChjb25zdCBDU1NTdHlsZVNoZWV0ICZvdGhlcik7Ci0gICAgQ1NTU3R5bGVTaGVldChjb25zdCBT
dHlsZVNoZWV0ICZvdGhlcik7Ci0gICAgQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0SW1wbCAq
aW1wbCk7Ci1wdWJsaWM6Ci0KLSAgICBDU1NTdHlsZVNoZWV0ICYgb3BlcmF0b3IgPSAoY29uc3Qg
Q1NTU3R5bGVTaGVldCAmb3RoZXIpOwotICAgIENTU1N0eWxlU2hlZXQgJiBvcGVyYXRvciA9IChj
b25zdCBTdHlsZVNoZWV0ICZvdGhlcik7Ci0KLSAgICB+Q1NTU3R5bGVTaGVldCgpOwotCi0gICAg
LyoqCi0gICAgICogSWYgdGhpcyBzdHlsZSBzaGVldCBjb21lcyBmcm9tIGFuIDxjb2RlPiBAaW1w
b3J0IDwvY29kZT4gcnVsZSwKLSAgICAgKiB0aGUgPGNvZGU+IG93bmVyUnVsZSA8L2NvZGU+IGF0
dHJpYnV0ZSB3aWxsIGNvbnRhaW4gdGhlIDxjb2RlPgotICAgICAqIENTU0ltcG9ydFJ1bGUgPC9j
b2RlPiAuIEluIHRoYXQgY2FzZSwgdGhlIDxjb2RlPiBvd25lck5vZGUKLSAgICAgKiA8L2NvZGU+
IGF0dHJpYnV0ZSBpbiB0aGUgPGNvZGU+IFN0eWxlU2hlZXQgPC9jb2RlPiBpbnRlcmZhY2UKLSAg
ICAgKiB3aWxsIGJlIDxjb2RlPiBudWxsIDwvY29kZT4gLiBJZiB0aGUgc3R5bGUgc2hlZXQgY29t
ZXMgZnJvbSBhbgotICAgICAqIGVsZW1lbnQgb3IgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLCB0
aGUgPGNvZGU+IG93bmVyUnVsZQotICAgICAqIDwvY29kZT4gYXR0cmlidXRlIHdpbGwgYmUgPGNv
ZGU+IG51bGwgPC9jb2RlPiBhbmQgdGhlIDxjb2RlPgotICAgICAqIG93bmVyTm9kZSA8L2NvZGU+
IGF0dHJpYnV0ZSB3aWxsIGNvbnRhaW4gdGhlIDxjb2RlPiBOb2RlCi0gICAgICogPC9jb2RlPiAu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBDU1NSdWxlIG93bmVyUnVsZSgpIGNvbnN0OwotCi0gICAg
LyoqCi0gICAgICogVGhlIGxpc3Qgb2YgYWxsIENTUyBydWxlcyBjb250YWluZWQgd2l0aGluIHRo
ZSBzdHlsZSBzaGVldC4KLSAgICAgKiBUaGlzIGluY2x1ZGVzIGJvdGggPGEKLSAgICAgKiBocmVm
PSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9zeW5kYXRhLmh0bWwjcTgiPiBydWxlIHNl
dHMKLSAgICAgKiA8L2E+IGFuZCA8YQotICAgICAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RS
L1JFQy1DU1MyL3N5bmRhdGEuaHRtbCNhdC1ydWxlcyI+Ci0gICAgICogYXQtcnVsZXMgPC9hPiAu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBDU1NSdWxlTGlzdCBjc3NSdWxlcygpIGNvbnN0OwotCi0g
ICAgLyoqCi0gICAgICogVXNlZCB0byBpbnNlcnQgYSBuZXcgcnVsZSBpbnRvIHRoZSBzdHlsZSBz
aGVldC4gVGhlIG5ldyBydWxlCi0gICAgICogbm93IGJlY29tZXMgcGFydCBvZiB0aGUgY2FzY2Fk
ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBydWxlIFRoZSBwYXJzYWJsZSB0ZXh0IHJlcHJlc2Vu
dGluZyB0aGUgcnVsZS4gRm9yIHJ1bGUKLSAgICAgKiBzZXRzIHRoaXMgY29udGFpbnMgYm90aCB0
aGUgc2VsZWN0b3IgYW5kIHRoZSBzdHlsZSBkZWNsYXJhdGlvbi4KLSAgICAgKiBGb3IgYXQtcnVs
ZXMsIHRoaXMgc3BlY2lmaWVzIGJvdGggdGhlIGF0LWlkZW50aWZpZXIgYW5kIHRoZQotICAgICAq
IHJ1bGUgY29udGVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggd2l0
aGluIHRoZSBzdHlsZSBzaGVldCdzIHJ1bGUgbGlzdCBvZgotICAgICAqIHRoZSBydWxlIGJlZm9y
ZSB3aGljaCB0byBpbnNlcnQgdGhlIHNwZWNpZmllZCBydWxlLiBJZiB0aGUKLSAgICAgKiBzcGVj
aWZpZWQgaW5kZXggaXMgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGUgc3R5bGUgc2hlZXQncwot
ICAgICAqIHJ1bGUgY29sbGVjdGlvbiwgdGhlIHJ1bGUgd2lsbCBiZSBhZGRlZCB0byB0aGUgZW5k
IG9mIHRoZSBzdHlsZQotICAgICAqIHNoZWV0LgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUg
aW5kZXggd2l0aGluIHRoZSBzdHlsZSBzaGVldCdzIHJ1bGUgY29sbGVjdGlvbiBvZgotICAgICAq
IHRoZSBuZXdseSBpbnNlcnRlZCBydWxlLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01F
eGNlcHRpb24KLSAgICAgKiBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNlZCBpZiB0aGUgcnVs
ZSBjYW5ub3QgYmUgaW5zZXJ0ZWQgYXQKLSAgICAgKiB0aGUgc3BlY2lmaWVkIGluZGV4IGUuZy4g
aWYgYW4gPGNvZGU+IEBpbXBvcnQgPC9jb2RlPiBydWxlIGlzCi0gICAgICogaW5zZXJ0ZWQgYWZ0
ZXIgYSBzdGFuZGFyZCBydWxlIHNldCBvciBvdGhlciBhdC1ydWxlLgotICAgICAqCi0gICAgICog
IElOREVYX1NJWkVfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBpbmRleCBpcyBub3QgYSB2
YWxpZAotICAgICAqIGluc2VydGlvbiBwb2ludC4KLSAgICAgKgotICAgICAqICBOT19NT0RJRklD
QVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIHN0eWxlIHNoZWV0IGlzCi0gICAgICog
cmVhZG9ubHkuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIENTU0V4Y2VwdGlvbgotICAgICAq
ICBTWU5UQVhfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBydWxlIGhhcyBhIHN5bnRheCBl
cnJvcgotICAgICAqIGFuZCBpcyB1bnBhcnNhYmxlLgotICAgICAqCi0gICAgICovCi0gICAgdW5z
aWduZWQgaW5zZXJ0UnVsZSAoIGNvbnN0IERPTVN0cmluZyAmcnVsZSwgdW5zaWduZWQgaW5kZXgg
KTsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gZGVsZXRlIGEgcnVsZSBmcm9tIHRoZSBzdHls
ZSBzaGVldC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggd2l0aGluIHRo
ZSBzdHlsZSBzaGVldCdzIHJ1bGUgbGlzdCBvZgotICAgICAqIHRoZSBydWxlIHRvIHJlbW92ZS4K
LSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhj
ZXB0aW9uCi0gICAgICogSU5ERVhfU0laRV9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIGlu
ZGV4IGRvZXMgbm90Ci0gICAgICogY29ycmVzcG9uZCB0byBhIHJ1bGUgaW4gdGhlIHN0eWxlIHNo
ZWV0J3MgcnVsZSBsaXN0LgotICAgICAqCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUjogUmFpc2VkIGlmIHRoaXMgc3R5bGUgc2hlZXQgaXMKLSAgICAgKiByZWFkb25seS4KLSAg
ICAgKgotICAgICAqLwotICAgIHZvaWQgZGVsZXRlUnVsZSAoIHVuc2lnbmVkIGluZGV4ICk7Ci0K
LSAgICAvKiBNaWNyb3NvZnQgZXh0ZW5zaW9uLiAqLwotICAgIHZvaWQgYWRkUnVsZSAoIGNvbnN0
IERPTVN0cmluZyAmc2VsZWN0b3IsIGNvbnN0IERPTVN0cmluZyAmc3R5bGUsIGludCBpbmRleCAp
OwotfTsKLQotCi1jbGFzcyBTdHlsZVNoZWV0TGlzdEltcGw7Ci1jbGFzcyBTdHlsZVNoZWV0Owot
Ci0vKioKLSAqIFRoZSA8Y29kZT4gU3R5bGVTaGVldExpc3QgPC9jb2RlPiBpbnRlcmZhY2UgcHJv
dmlkZXMgdGhlCi0gKiBhYnN0cmFjdGlvbiBvZiBhbiBvcmRlcmVkIGNvbGxlY3Rpb24gb2Ygc3R5
bGUgc2hlZXRzLgotICoKLSAqLwotY2xhc3MgU3R5bGVTaGVldExpc3QKLXsKLXB1YmxpYzoKLSAg
ICBTdHlsZVNoZWV0TGlzdCgpOwotICAgIFN0eWxlU2hlZXRMaXN0KGNvbnN0IFN0eWxlU2hlZXRM
aXN0ICZvdGhlcik7Ci0gICAgU3R5bGVTaGVldExpc3QoU3R5bGVTaGVldExpc3RJbXBsICppbXBs
KTsKLXB1YmxpYzoKLQotICAgIFN0eWxlU2hlZXRMaXN0ICYgb3BlcmF0b3IgPSAoY29uc3QgU3R5
bGVTaGVldExpc3QgJm90aGVyKTsKLQotICAgIH5TdHlsZVNoZWV0TGlzdCgpOwotCi0gICAgLyoq
Ci0gICAgICogVGhlIG51bWJlciBvZiA8Y29kZT4gU3R5bGVTaGVldCA8L2NvZGU+IGluIHRoZSBs
aXN0LiBUaGUgcmFuZ2UKLSAgICAgKiBvZiB2YWxpZCBjaGlsZCBzdHlsZXNoZWV0IGluZGljZXMg
aXMgPGNvZGU+IDAgPC9jb2RlPiB0byA8Y29kZT4KLSAgICAgKiBsZW5ndGgtMSA8L2NvZGU+IGlu
Y2x1c2l2ZS4KLSAgICAgKgotICAgICAqLwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogVXNlZCB0byByZXRyaWV2ZSBhIHN0eWxlIHNoZWV0IGJ5IG9yZGlu
YWwgaW5kZXguCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggaW50byB0aGUgY29s
bGVjdGlvbgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgc3R5bGUgc2hlZXQgYXQgdGhlIDxj
b2RlPiBpbmRleCA8L2NvZGU+IHBvc2l0aW9uIGluCi0gICAgICogdGhlIDxjb2RlPiBTdHlsZVNo
ZWV0TGlzdCA8L2NvZGU+ICwgb3IgPGNvZGU+IG51bGwgPC9jb2RlPiBpZgotICAgICAqIHRoYXQg
aXMgbm90IGEgdmFsaWQgaW5kZXguCi0gICAgICoKLSAgICAgKi8KLSAgICBTdHlsZVNoZWV0IGl0
ZW0gKCB1bnNpZ25lZCBpbmRleCApOwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAg
ICovCi0gICAgU3R5bGVTaGVldExpc3RJbXBsICpoYW5kbGUoKSBjb25zdDsKLSAgICBib29sIGlz
TnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgU3R5bGVTaGVldExpc3RJbXBsICppbXBs
OwotfTsKLQotCi1jbGFzcyBNZWRpYUxpc3RJbXBsOwotY2xhc3MgQ1NTUnVsZTsKLWNsYXNzIENT
U1N0eWxlU2hlZXQ7Ci0KLS8qKgotICogVGhlIDxjb2RlPiBNZWRpYUxpc3QgPC9jb2RlPiBpbnRl
cmZhY2UgcHJvdmlkZXMgdGhlIGFic3RyYWN0aW9uIG9mCi0gKiBhbiBvcmRlcmVkIGNvbGxlY3Rp
b24gb2YgbWVkaWEsIHdpdGhvdXQgZGVmaW5pbmcgb3IgY29uc3RyYWluaW5nCi0gKiBob3cgdGhp
cyBjb2xsZWN0aW9uIGlzIGltcGxlbWVudGVkLiBBbGwgbWVkaWEgYXJlIGxvd2VyY2FzZQotICog
c3RyaW5ncy4KLSAqCi0gKi8KLWNsYXNzIE1lZGlhTGlzdAotewotcHVibGljOgotICAgIE1lZGlh
TGlzdCgpOwotICAgIE1lZGlhTGlzdChjb25zdCBNZWRpYUxpc3QgJm90aGVyKTsKLSAgICBNZWRp
YUxpc3QoTWVkaWFMaXN0SW1wbCAqaW1wbCk7Ci1wdWJsaWM6Ci0KLSAgICBNZWRpYUxpc3QgJiBv
cGVyYXRvciA9IChjb25zdCBNZWRpYUxpc3QgJm90aGVyKTsKLQotICAgIH5NZWRpYUxpc3QoKTsK
LQotICAgIC8qKgotICAgICAqIFRoZSBwYXJzYWJsZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBtZWRpYSBsaXN0LiBUaGlzIGlzIGEKLSAgICAgKiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBv
ZiBtZWRpYS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICog
U1lOVEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgc3RyaW5nIHZhbHVlIGhhcyBhIHN5
bnRheCBlcnJvciBhbmQKLSAgICAgKiBpcyB1bnBhcnNhYmxlLgotICAgICAqCi0gICAgICogTk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBtZWRpYSBsaXN0IGlzIHJl
YWRvbmx5LgotICAgICAqLwotICAgIERPTVN0cmluZyBtZWRpYVRleHQoKSBjb25zdDsKLQotICAg
IC8qKgotICAgICAqIHNlZSBAcmVmIG1lZGlhVGV4dAotICAgICAqLwotICAgIHZvaWQgc2V0TWVk
aWFUZXh0KGNvbnN0IERPTVN0cmluZyAmdmFsdWUpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG51
bWJlciBvZiBtZWRpYSBpbiB0aGUgbGlzdC4gVGhlIHJhbmdlIG9mIHZhbGlkIG1lZGlhIGlzIDAg
dG8gbGVuZ3RoLTEgaW5jbHVzaXZlLgotICAgICAqLwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0OwotCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBpbmRleHRoIGluIHRoZSBsaXN0
LiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KLSAgICAgKiB0aGUgbnVtYmVy
IG9mIG1lZGlhIGluIHRoZSBsaXN0LCB0aGlzIHJldHVybnMgbnVsbC4KLSAgICAgKgotICAgICAq
IEBwYXJhbSBpbmRleCBJbmRleCBpbnRvIHRoZSBjb2xsZWN0aW9uLgotICAgICAqCi0gICAgICog
QHJldHVybiBUaGUgbWVkaXVtIGF0IHRoZSBpbmRleHRoIHBvc2l0aW9uIGluIHRoZSBNZWRpYUxp
c3QsIG9yIG51bGwgaWYKLSAgICAgKiB0aGF0IGlzIG5vdCBhIHZhbGlkIGluZGV4LgotICAgICAq
LwotICAgIERPTVN0cmluZyBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLQotICAgIC8qKgot
ICAgICAqIERlbGV0ZXMgdGhlIG1lZGl1bSBpbmRpY2F0ZWQgYnkgb2xkTWVkaXVtIGZyb20gdGhl
IGxpc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb2xkTWVkaXVtIFRoZSBtZWRpdW0gdG8gZGVs
ZXRlIGluIHRoZSBtZWRpYSBsaXN0LgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNl
cHRpb24KLSAgICAgKiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlz
IGxpc3QgaXMgcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKiBOT1RfRk9VTkRfRVJSOiBSYWlzZWQg
aWYgb2xkTWVkaXVtIGlzIG5vdCBpbiB0aGUgbGlzdC4KLSAgICAgKi8KLSAgICB2b2lkIGRlbGV0
ZU1lZGl1bShjb25zdCBET01TdHJpbmcgJm9sZE1lZGl1bSk7Ci0KLSAgICAvKioKLSAgICAgKiBB
ZGRzIHRoZSBtZWRpdW0gbmV3TWVkaXVtIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuIElmIHRoZSBu
ZXdNZWRpdW0gaXMKLSAgICAgKiBhbHJlYWR5IHVzZWQsIGl0IGlzIGZpcnN0IHJlbW92ZWQuCi0g
ICAgICoKLSAgICAgKiBAcGFyYW0gbmV3TWVkaXVtIFRoZSBuZXcgbWVkaXVtIHRvIGFkZC4KLSAg
ICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9DSEFS
QUNURVJfRVJSOiBJZiB0aGUgbWVkaXVtIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCBhcmUKLSAg
ICAgKiBpbnZhbGlkIGluIHRoZSB1bmRlcmx5aW5nIHN0eWxlIGxhbmd1YWdlLgotICAgICAqCi0g
ICAgICogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBsaXN0IGlz
IHJlYWRvbmx5LgotICAgICAqLwotICAgIHZvaWQgYXBwZW5kTWVkaXVtKGNvbnN0IERPTVN0cmlu
ZyAmbmV3TWVkaXVtKTsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqLwotICAg
IE1lZGlhTGlzdEltcGwgKmhhbmRsZSgpIGNvbnN0OwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7
Ci0KLXByb3RlY3RlZDoKLSAgICBNZWRpYUxpc3RJbXBsICppbXBsOwotfTsKLQotY2xhc3MgTGlu
a1N0eWxlSW1wbDsKLQotY2xhc3MgTGlua1N0eWxlCi17Ci1wdWJsaWM6Ci0gICAgTGlua1N0eWxl
KCk7Ci0gICAgTGlua1N0eWxlKGNvbnN0IExpbmtTdHlsZSAmb3RoZXIpOwotCi0gICAgTGlua1N0
eWxlICYgb3BlcmF0b3IgPSAoY29uc3QgTGlua1N0eWxlICZvdGhlcik7Ci0gICAgTGlua1N0eWxl
ICYgb3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpOwotCi0gICAgfkxpbmtTdHlsZSgpOwot
Ci0gICAgU3R5bGVTaGVldCBzaGVldCgpOwotCi0gICAgYm9vbCBpc051bGwoKSBjb25zdDsKLQot
cHJvdGVjdGVkOgotICAgIE5vZGVJbXBsICpub2RlOwotICAgIExpbmtTdHlsZUltcGwgKmltcGw7
Ci19OwotCi1jbGFzcyBEb2N1bWVudFN0eWxlSW1wbDsKLQotY2xhc3MgRG9jdW1lbnRTdHlsZQot
ewotcHVibGljOgotICAgIERvY3VtZW50U3R5bGUoKTsKLSAgICBEb2N1bWVudFN0eWxlKGNvbnN0
IERvY3VtZW50U3R5bGUgJm90aGVyKTsKLQotICAgIERvY3VtZW50U3R5bGUgJiBvcGVyYXRvciA9
IChjb25zdCBEb2N1bWVudFN0eWxlICZvdGhlcik7Ci0gICAgRG9jdW1lbnRTdHlsZSAmIG9wZXJh
dG9yID0gKGNvbnN0IERvY3VtZW50ICZvdGhlcik7Ci0KLSAgICB+RG9jdW1lbnRTdHlsZSgpOwot
Ci0gICAgU3R5bGVTaGVldExpc3Qgc3R5bGVTaGVldHMoKTsKLQotICAgIERPTVN0cmluZyBwcmVm
ZXJyZWRTdHlsZXNoZWV0U2V0KCk7Ci0gICAgRE9NU3RyaW5nIHNlbGVjdGVkU3R5bGVzaGVldFNl
dCgpOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRTdHlsZXNoZWV0U2V0KGNvbnN0IERPTVN0cmluZyYg
YVN0cmluZyk7Ci0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAg
RG9jdW1lbnRJbXBsICpkb2M7Ci0gICAgRG9jdW1lbnRTdHlsZUltcGwgKmltcGw7Ci19OwotCi0j
ZW5kaWYKIAogfTsgLy8gbmFtZXNwYWNlCiAKSW5kZXg6IGtodG1sL2RvbS9jc3NfdmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vY3NzX3ZhbHVl
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAga2h0bWwvZG9t
L2Nzc192YWx1ZS5oCi0tLSBraHRtbC9kb20vY3NzX3ZhbHVlLmgJMTYgU2VwIDIwMDUgMjI6NDI6
MDMgLTAwMDAJMS4xMAorKysga2h0bWwvZG9tL2Nzc192YWx1ZS5oCTI5IE5vdiAyMDA1IDEyOjQx
OjI3IC0wMDAwCkBAIC0zNywyMDEgKzM3LDYgQEAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbklt
cGw7CiBjbGFzcyBDU1NSdWxlOwogY2xhc3MgQ1NTVmFsdWU7CiAKLSNpZiAhS0hUTUxfTk9fQ1BM
VVNQTFVTX0RPTQotCi0vKioKLSAqIFRoZSA8Y29kZT4gQ1NTU3R5bGVEZWNsYXJhdGlvbiA8L2Nv
ZGU+IGludGVyZmFjZSByZXByZXNlbnRzIGEKLSAqIHNpbmdsZSA8YSBocmVmPSJodHRwOi8vd3d3
LnczLm9yZy9UUi9SRUMtQ1NTMi9zeW5kYXRhLmh0bWwjYmxvY2siPgotICogQ1NTIGRlY2xhcmF0
aW9uIGJsb2NrIDwvYT4gLiBUaGlzIGludGVyZmFjZSBtYXkgYmUgdXNlZCB0bwotICogZGV0ZXJt
aW5lIHRoZSBzdHlsZSBwcm9wZXJ0aWVzIGN1cnJlbnRseSBzZXQgaW4gYSBibG9jayBvciB0byBz
ZXQKLSAqIHN0eWxlIHByb3BlcnRpZXMgZXhwbGljaXRseSB3aXRoaW4gdGhlIGJsb2NrLgotICoK
LSAqICBXaGlsZSBhbiBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IHJlY29nbml6ZSBhbGwgQ1NTIHBy
b3BlcnRpZXMKLSAqIHdpdGhpbiBhIENTUyBkZWNsYXJhdGlvbiBibG9jaywgaXQgaXMgZXhwZWN0
ZWQgdG8gcHJvdmlkZSBhY2Nlc3MgdG8KLSAqIGFsbCBzcGVjaWZpZWQgcHJvcGVydGllcyB0aHJv
dWdoIHRoZSA8Y29kZT4gQ1NTU3R5bGVEZWNsYXJhdGlvbgotICogPC9jb2RlPiBpbnRlcmZhY2Uu
IEZ1cnRoZXJtb3JlLCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBzdXBwb3J0IGEKLSAqIHNwZWNpZmlj
IGxldmVsIG9mIENTUyBzaG91bGQgY29ycmVjdGx5IGhhbmRsZSA8YQotICogaHJlZj0iaHR0cDov
L3d3dy53My5vcmcvVFIvUkVDLUNTUzIvYWJvdXQuaHRtbCNzaG9ydGhhbmQiPiBDU1MKLSAqIHNo
b3J0aGFuZCA8L2E+IHByb3BlcnRpZXMgZm9yIHRoYXQgbGV2ZWwuIEZvciBhIGZ1cnRoZXIgZGlz
Y3Vzc2lvbgotICogb2Ygc2hvcnRoYW5kIHByb3BlcnRpZXMsIHNlZSB0aGUgPGNvZGU+IENTUzJQ
cm9wZXJ0aWVzIDwvY29kZT4KLSAqIGludGVyZmFjZS4KLSAqCi0gKi8KLWNsYXNzIENTU1N0eWxl
RGVjbGFyYXRpb24KLXsKLXB1YmxpYzoKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbihjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uICZvdGhlcik7Ci0g
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqaW1wbCk7Ci1w
dWJsaWM6Ci0KLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NT
U3R5bGVEZWNsYXJhdGlvbiAmb3RoZXIpOwotCi0gICAgfkNTU1N0eWxlRGVjbGFyYXRpb24oKTsK
LQotICAgIC8qKgotICAgICAqIFRoZSBwYXJzYWJsZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBkZWNsYXJhdGlvbiBibG9jawotICAgICAqIChpbmNsdWRpbmcgdGhlIHN1cnJvdW5kaW5n
IGN1cmx5IGJyYWNlcykuIFNldHRpbmcgdGhpcwotICAgICAqIGF0dHJpYnV0ZSB3aWxsIHJlc3Vs
dCBpbiB0aGUgcGFyc2luZyBvZiB0aGUgbmV3IHZhbHVlIGFuZAotICAgICAqIHJlc2V0dGluZyBv
ZiB0aGUgcHJvcGVydGllcyBpbiB0aGUgZGVjbGFyYXRpb24gYmxvY2suCi0gICAgICoKLSAgICAg
Ki8KLSAgICBET01TdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogc2Vl
IEByZWYgY3NzVGV4dAotICAgICAqIEBleGNlcHRpb24gQ1NTRXhjZXB0aW9uCi0gICAgICogU1lO
VEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgQ1NTIHN0cmluZyB2YWx1ZSBoYXMgYQot
ICAgICAqIHN5bnRheCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4KLSAgICAgKgotICAgICAqIEBl
eGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjogUmFpc2VkIGlmIHRoaXMgZGVjbGFyYXRpb24gaXMKLSAgICAgKiByZWFkb25seS4KLSAgICAg
KgotICAgICAqLwotICAgIHZvaWQgc2V0Q3NzVGV4dCggY29uc3QgRE9NU3RyaW5nICYgKTsKLQot
ICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2YgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBl
eHBsaWNpdGx5IHNldCBpbiB0aGlzCi0gICAgICogZGVjbGFyYXRpb24gYmxvY2suCi0gICAgICoK
LSAgICAgKi8KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAq
IFRoZSBDU1MgcnVsZSB0aGF0IGNvbnRhaW5zIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suCi0gICAg
ICoKLSAgICAgKi8KLSAgICBDU1NSdWxlIHBhcmVudFJ1bGUoKSBjb25zdDsKLQotICAgIC8qKgot
ICAgICAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgQ1NTIHByb3BlcnR5IGlmIGl0
IGhhcyBiZWVuCi0gICAgICogZXhwbGljaXRseSBzZXQgd2l0aGluIHRoaXMgZGVjbGFyYXRpb24g
YmxvY2suCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRo
ZSBDU1MgcHJvcGVydHkuIFNlZSB0aGUgPGEKLSAgICAgKiBocmVmPSJodHRwOi8vd3d3LnczLm9y
Zy9UUi9SRUMtQ1NTMi9wcm9waWR4Lmh0bWwiPiBDU1MgcHJvcGVydHkKLSAgICAgKiBpbmRleCA8
L2E+IC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHBy
b3BlcnR5IGlmIGl0IGhhcyBiZWVuCi0gICAgICogZXhwbGljaXRseSBzZXQgZm9yIHRoaXMgZGVj
bGFyYXRpb24gYmxvY2suIFJldHVybnMgdGhlIGVtcHR5Ci0gICAgICogc3RyaW5nIGlmIHRoZSBw
cm9wZXJ0eSBoYXMgbm90IGJlZW4gc2V0LgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5n
IGdldFByb3BlcnR5VmFsdWUgKCBjb25zdCBET01TdHJpbmcgJnByb3BlcnR5TmFtZSApOwotCi0g
ICAgLyoqCi0gICAgICogVXNlZCB0byByZXRyaWV2ZSB0aGUgb2JqZWN0IHJlcHJlc2VudGF0aW9u
IG9mIHRoZSB2YWx1ZSBvZiBhCi0gICAgICogQ1NTIHByb3BlcnR5IGlmIGl0IGhhcyBiZWVuIGV4
cGxpY2l0bHkgc2V0IHdpdGhpbiB0aGlzCi0gICAgICogZGVjbGFyYXRpb24gYmxvY2suIFRoaXMg
bWV0aG9kIHJldHVybnMgbnVsbCBpZiB0aGUgcHJvcGVydHkgaXMKLSAgICAgKiBhIDxhIGhyZWY9
Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL2Fib3V0Lmh0bWwjc2hvcnRoYW5kIj4KLSAg
ICAgKiBzaG9ydGhhbmQgPC9hPiBwcm9wZXJ0eS4gU2hvcnRoYW5kIHByb3BlcnR5IHZhbHVlcyBj
YW4gb25seSBiZQotICAgICAqIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBhcyBzdHJpbmdzLCB1c2lu
ZyB0aGUgPGNvZGU+Ci0gICAgICogZ2V0UHJvcGVydHlWYWx1ZSA8L2NvZGU+IGFuZCA8Y29kZT4g
c2V0UHJvcGVydHkgPC9jb2RlPgotICAgICAqIG1ldGhvZHMuCi0gICAgICoKLSAgICAgKiBAcGFy
YW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBDU1MgcHJvcGVydHkuIFNlZSB0aGUgPGEK
LSAgICAgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9wcm9waWR4Lmh0bWwi
PiBDU1MgcHJvcGVydHkKLSAgICAgKiBpbmRleCA8L2E+IC4KLSAgICAgKgotICAgICAqIEByZXR1
cm4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGlmIGl0IGhhcyBiZWVuCi0gICAg
ICogZXhwbGljaXRseSBzZXQgZm9yIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suIFJldHVybnMgdGhl
IDxjb2RlPgotICAgICAqIG51bGwgPC9jb2RlPiBpZiB0aGUgcHJvcGVydHkgaGFzIG5vdCBiZWVu
IHNldC4KLSAgICAgKgotICAgICAqLwotICAgIENTU1ZhbHVlIGdldFByb3BlcnR5Q1NTVmFsdWUg
KCBjb25zdCBET01TdHJpbmcgJnByb3BlcnR5TmFtZSApOwotCi0gICAgLyoqCi0gICAgICogVXNl
ZCB0byByZW1vdmUgYSBDU1MgcHJvcGVydHkgaWYgaXQgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQK
LSAgICAgKiB3aXRoaW4gdGhpcyBkZWNsYXJhdGlvbiBibG9jay4KLSAgICAgKgotICAgICAqIEBw
YXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIENTUyBwcm9wZXJ0eS4gU2VlIHRoZSA8
YQotICAgICAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL3Byb3BpZHguaHRt
bCI+IENTUyBwcm9wZXJ0eQotICAgICAqIGluZGV4IDwvYT4gLgotICAgICAqCi0gICAgICogQHJl
dHVybiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaWYgaXQgaGFzIGJlZW4KLSAg
ICAgKiBleHBsaWNpdGx5IHNldCBmb3IgdGhpcyBkZWNsYXJhdGlvbiBibG9jay4gUmV0dXJucyB0
aGUgZW1wdHkKLSAgICAgKiBzdHJpbmcgaWYgdGhlIHByb3BlcnR5IGhhcyBub3QgYmVlbiBzZXQg
b3IgdGhlIHByb3BlcnR5IG5hbWUKLSAgICAgKiBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFs
aWQgQ1NTMiBwcm9wZXJ0eS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9u
Ci0gICAgICogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBkZWNs
YXJhdGlvbiBpcwotICAgICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3Ry
aW5nIHJlbW92ZVByb3BlcnR5ICggY29uc3QgRE9NU3RyaW5nICZwcm9wZXJ0eU5hbWUgKTsKLQot
ICAgIC8qKgotICAgICAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHByaW9yaXR5IG9mIGEgQ1NTIHBy
b3BlcnR5IChlLmcuIHRoZQotICAgICAqIDxjb2RlPiAiaW1wb3J0YW50IiA8L2NvZGU+IHF1YWxp
ZmllcikgaWYgdGhlIHByb3BlcnR5IGhhcyBiZWVuCi0gICAgICogZXhwbGljaXRseSBzZXQgaW4g
dGhpcyBkZWNsYXJhdGlvbiBibG9jay4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5h
bWUgVGhlIG5hbWUgb2YgdGhlIENTUyBwcm9wZXJ0eS4gU2VlIHRoZSA8YQotICAgICAqIGhyZWY9
Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL3Byb3BpZHguaHRtbCI+IENTUyBwcm9wZXJ0
eQotICAgICAqIGluZGV4IDwvYT4gLgotICAgICAqCi0gICAgICogQHJldHVybiBBIHN0cmluZyBy
ZXByZXNlbnRpbmcgdGhlIHByaW9yaXR5IChlLmcuIDxjb2RlPgotICAgICAqICJpbXBvcnRhbnQi
IDwvY29kZT4gKSBpZiBvbmUgZXhpc3RzLiBUaGUgZW1wdHkgc3RyaW5nIGlmIG5vbmUKLSAgICAg
KiBleGlzdHMuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgZ2V0UHJvcGVydHlQcmlv
cml0eSAoIGNvbnN0IERPTVN0cmluZyAmcHJvcGVydHlOYW1lICk7Ci0KLSAgICAvKioKLSAgICAg
KiBVc2VkIHRvIHNldCBhIHByb3BlcnR5IHZhbHVlIGFuZCBwcmlvcml0eSB3aXRoaW4gdGhpcwot
ICAgICAqIGRlY2xhcmF0aW9uIGJsb2NrLgotICAgICAqCi0gICAgICogQHBhcmFtIHByb3BlcnR5
TmFtZSBUaGUgbmFtZSBvZiB0aGUgQ1NTIHByb3BlcnR5LiBTZWUgdGhlIDxhCi0gICAgICogaHJl
Zj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvcHJvcGlkeC5odG1sIj4gQ1NTIHByb3Bl
cnR5Ci0gICAgICogaW5kZXggPC9hPiAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUgVGhl
IG5ldyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJpb3Jp
dHkgVGhlIG5ldyBwcmlvcml0eSBvZiB0aGUgcHJvcGVydHkgKGUuZy4gPGNvZGU+Ci0gICAgICog
ImltcG9ydGFudCIgPC9jb2RlPiApLgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqCi0g
ICAgICogQGV4Y2VwdGlvbiBDU1NFeGNlcHRpb24KLSAgICAgKiBTWU5UQVhfRVJSOiBSYWlzZWQg
aWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBoYXMgYSBzeW50YXggZXJyb3IKLSAgICAgKiBhbmQgaXMg
dW5wYXJzYWJsZS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAg
ICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgZGVjbGFyYXRp
b24gaXMKLSAgICAgKiByZWFkb25seS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0UHJv
cGVydHkgKCBjb25zdCBET01TdHJpbmcgJnByb3BlcnR5TmFtZSwgY29uc3QgRE9NU3RyaW5nICZ2
YWx1ZSwgY29uc3QgRE9NU3RyaW5nICZwcmlvcml0eSApOwotCi0gICAgLyoqCi0gICAgICogVXNl
ZCB0byByZXRyaWV2ZSB0aGUgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBleHBsaWNpdGx5IHNl
dAotICAgICAqIGluIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suIFRoZSBvcmRlciBvZiB0aGUgcHJv
cGVydGllcwotICAgICAqIHJldHJpZXZlZCB1c2luZyB0aGlzIG1ldGhvZCBkb2VzIG5vdCBoYXZl
IHRvIGJlIHRoZSBvcmRlciBpbgotICAgICAqIHdoaWNoIHRoZXkgd2VyZSBzZXQuIFRoaXMgbWV0
aG9kIGNhbiBiZSB1c2VkIHRvIGl0ZXJhdGUgb3ZlcgotICAgICAqIGFsbCBwcm9wZXJ0aWVzIGlu
IHRoaXMgZGVjbGFyYXRpb24gYmxvY2suCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5k
ZXggb2YgdGhlIHByb3BlcnR5IG5hbWUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0
dXJuIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSBhdCB0aGlzIG9yZGluYWwgcG9zaXRpb24uIFRo
ZQotICAgICAqIGVtcHR5IHN0cmluZyBpZiBubyBwcm9wZXJ0eSBleGlzdHMgYXQgdGhpcyBwb3Np
dGlvbi4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBpdGVtICggdW5zaWduZWQgaW5k
ZXggKTsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqIG5vdCBwYXJ0IG9mIHRo
ZSBET00KLSAgICAgKi8KLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqaGFuZGxlKCkgY29u
c3Q7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIENTU1N0eWxl
RGVjbGFyYXRpb25JbXBsICppbXBsOwotfTsKLQotCi1jbGFzcyBDU1NWYWx1ZUltcGw7Ci0KLSNl
bmRpZgogCiAKIC8qKgpAQCAtMjQ0LDE4ICs0OSw2IEBAIGNsYXNzIENTU1ZhbHVlCiAKIHB1Ymxp
YzoKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICBDU1NWYWx1ZSgpOwotICAg
IENTU1ZhbHVlKGNvbnN0IENTU1ZhbHVlICZvdGhlcik7Ci0gICAgQ1NTVmFsdWUoQ1NTVmFsdWVJ
bXBsICppbXBsKTsKLXB1YmxpYzoKLQotICAgIENTU1ZhbHVlICYgb3BlcmF0b3IgPSAoY29uc3Qg
Q1NTVmFsdWUgJm90aGVyKTsKLQotICAgIH5DU1NWYWx1ZSgpOwotCi0jZW5kaWYKIAogICAgIC8q
KgogICAgICAqIEFuIGludGVnZXIgaW5kaWNhdGluZyB3aGljaCB0eXBlIG9mIHVuaXQgYXBwbGll
cyB0byB0aGUgdmFsdWUuCkBAIC0yNzIsMTA3ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIENT
U19JTklUSUFMID0gNAogICAgIH07CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0g
ICAgLyoqCi0gICAgICogQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgdmFs
dWUuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0g
ICAgLyoqCi0gICAgICogc2VlIEByZWYgY3NzVGV4dAotICAgICAqIEBleGNlcHRpb24gQ1NTRXhj
ZXB0aW9uCi0gICAgICogU1lOVEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgQ1NTIHN0
cmluZyB2YWx1ZSBoYXMgYQotICAgICAqIHN5bnRheCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4K
LSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogIE5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgZGVjbGFyYXRpb24gaXMKLSAgICAg
KiByZWFkb25seS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0Q3NzVGV4dCggY29uc3Qg
RE9NU3RyaW5nICYgKTsKLQotICAgIC8qKgotICAgICAqIEEgY29kZSBkZWZpbmluZyB0aGUgdHlw
ZSBvZiB0aGUgdmFsdWUgYXMgZGVmaW5lZCBhYm92ZS4KLSAgICAgKgotICAgICAqLwotICAgIHVu
c2lnbmVkIHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQGlu
dGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwotICAgIGJvb2wgaXND
U1NWYWx1ZUxpc3QoKSBjb25zdDsKLSAgICBib29sIGlzQ1NTUHJpbWl0aXZlVmFsdWUoKSBjb25z
dDsKLSAgICBDU1NWYWx1ZUltcGwgKmhhbmRsZSgpIGNvbnN0OwotICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NWYWx1ZUltcGwgKmltcGw7Ci0KLSNlbmRpZgog
CiB9OwogCiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1jbGFzcyBDU1NWYWx1ZUxp
c3RJbXBsOwotY2xhc3MgQ1NTVmFsdWU7Ci0KLS8qKgotICogVGhlIDxjb2RlPiBDU1NWYWx1ZUxp
c3QgPC9jb2RlPiBpbnRlcmZhY2UgcHJvdmlkZXMgdGhlIGFic3JhY3Rpb24KLSAqIG9mIGFuIG9y
ZGVyZWQgY29sbGVjdGlvbiBvZiBDU1MgdmFsdWVzLgotICoKLSAqLwotY2xhc3MgQ1NTVmFsdWVM
aXN0IDogcHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTVmFsdWVMaXN0KCk7Ci0g
ICAgQ1NTVmFsdWVMaXN0KGNvbnN0IENTU1ZhbHVlTGlzdCAmb3RoZXIpOwotICAgIENTU1ZhbHVl
TGlzdChjb25zdCBDU1NWYWx1ZSAmb3RoZXIpOwotICAgIENTU1ZhbHVlTGlzdChDU1NWYWx1ZUxp
c3RJbXBsICppbXBsKTsKLXB1YmxpYzoKLQotICAgIENTU1ZhbHVlTGlzdCAmIG9wZXJhdG9yID0g
KGNvbnN0IENTU1ZhbHVlTGlzdCAmb3RoZXIpOwotICAgIENTU1ZhbHVlTGlzdCAmIG9wZXJhdG9y
ID0gKGNvbnN0IENTU1ZhbHVlICZvdGhlcik7Ci0KLSAgICB+Q1NTVmFsdWVMaXN0KCk7Ci0KLSAg
ICAvKioKLSAgICAgKiBUaGUgbnVtYmVyIG9mIDxjb2RlPiBDU1NWYWx1ZSA8L2NvZGU+IHMgaW4g
dGhlIGxpc3QuIFRoZSByYW5nZQotICAgICAqIG9mIHZhbGlkIHZhbHVlcyBpbmRpY2VzIGlzIDxj
b2RlPiAwIDwvY29kZT4gdG8gPGNvZGU+IGxlbmd0aC0xCi0gICAgICogPC9jb2RlPiBpbmNsdXNp
dmUuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLQotICAg
IC8qKgotICAgICAqIFVzZWQgdG8gcmV0cmlldmUgYSBDU1MgcnVsZSBieSBvcmRpbmFsIGluZGV4
LiBUaGUgb3JkZXIgaW4gdGhpcwotICAgICAqIGNvbGxlY3Rpb24gcmVwcmVzZW50cyB0aGUgb3Jk
ZXIgb2YgdGhlIHZhbHVlcyBpbiB0aGUgQ1NTIHN0eWxlCi0gICAgICogcHJvcGVydHkuCi0gICAg
ICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggaW50byB0aGUgY29sbGVjdGlvbi4KLSAgICAg
KgotICAgICAqIEByZXR1cm4gVGhlIHN0eWxlIHJ1bGUgYXQgdGhlIDxjb2RlPiBpbmRleCA8L2Nv
ZGU+IHBvc2l0aW9uIGluCi0gICAgICogdGhlIDxjb2RlPiBDU1NWYWx1ZUxpc3QgPC9jb2RlPiAs
IG9yIDxjb2RlPiBudWxsIDwvY29kZT4gaWYKLSAgICAgKiB0aGF0IGlzIG5vdCB2YWxpZCBpbmRl
eC4KLSAgICAgKgotICAgICAqLwotICAgIENTU1ZhbHVlIGl0ZW0gKCB1bnNpZ25lZCBpbmRleCAp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ1NTVmFsdWVMaXN0SW1wbCAqdmltcGw7Ci19OwotCi0KLWNs
YXNzIENTU1ByaW1pdGl2ZVZhbHVlSW1wbDsKLWNsYXNzIENvdW50ZXI7Ci1jbGFzcyBSR0JDb2xv
cjsKLWNsYXNzIFJlY3Q7Ci0KLSNlbmRpZgogCiAvKioKICAqIFRoZSA8Y29kZT4gQ1NTUHJpbWl0
aXZlVmFsdWUgPC9jb2RlPiBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIHNpbmdsZQpAQCAtMzkwLDIw
ICs4Niw2IEBAIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlIDogcHVibGljIENTU1ZhbHUKIAogcHVi
bGljOgogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIENTU1ByaW1pdGl2ZVZh
bHVlKCk7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUgJm90
aGVyKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBDU1NWYWx1ZSAmb3RoZXIpOwotICAg
IENTU1ByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlSW1wbCAqaW1wbCk7Ci1wdWJsaWM6
Ci0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1ByaW1pdGl2
ZVZhbHVlICZvdGhlcik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUgJiBvcGVyYXRvciA9IChjb25z
dCBDU1NWYWx1ZSAmb3RoZXIpOwotCi0gICAgfkNTU1ByaW1pdGl2ZVZhbHVlKCk7Ci0KLSNlbmRp
ZgogCiAgICAgLyoqCiAgICAgICogQW4gaW50ZWdlciBpbmRpY2F0aW5nIHdoaWNoIHR5cGUgb2Yg
dW5pdCBhcHBsaWVzIHRvIHRoZSB2YWx1ZS4KQEAgLTQ0MSwzMjIgKzEyMywxMCBAQCBwdWJsaWM6
CiAgICAgICAgIENTU19IVE1MX1JFTEFUSVZFID0gMjU1CiAgICAgfTsKIAotI2lmICFLSFRNTF9O
T19DUExVU1BMVVNfRE9NCiAKLSAgICAvKioKLSAgICAgKiBUaGUgdHlwZSBvZiB0aGUgdmFsdWUg
YXMgZGVmaW5lZCBieSB0aGUgY29uc3RhbnRzIHNwZWNpZmllZAotICAgICAqIGFib3ZlLgotICAg
ICAqCi0gICAgICovCi0gICAgdW5zaWduZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSgpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogQSBtZXRob2QgdG8gc2V0IHRoZSBmbG9hdCB2YWx1ZSB3aXRoIGEg
c3BlY2lmaWVkIHVuaXQuIElmIHRoZQotICAgICAqIHByb3BlcnR5IGF0dGFjaGVkIHdpdGggdGhp
cyB2YWx1ZSBjYW4gbm90IGFjY2VwdCB0aGUgc3BlY2lmaWVkCi0gICAgICogdW5pdCBvciB0aGUg
ZmxvYXQgdmFsdWUsIHRoZSB2YWx1ZSB3aWxsIGJlIHVuY2hhbmdlZCBhbmQgYQotICAgICAqIDxj
b2RlPiBET01FeGNlcHRpb24gPC9jb2RlPiB3aWxsIGJlIHJhaXNlZC4KLSAgICAgKgotICAgICAq
IEBwYXJhbSB1bml0VHlwZSBBIHVuaXQgY29kZSBhcyBkZWZpbmVkIGFib3ZlLiBUaGUgdW5pdCBj
b2RlIGNhbgotICAgICAqIG9ubHkgYmUgYSBmbG9hdCB1bml0IHR5cGUgKGUuZy4gPGNvZGU+IE5V
TUJFUiA8L2NvZGU+ICwgPGNvZGU+Ci0gICAgICogUEVSQ0VOVEFHRSA8L2NvZGU+ICwgPGNvZGU+
IENTU19FTVMgPC9jb2RlPiAsIDxjb2RlPiBDU1NfRVhTCi0gICAgICogPC9jb2RlPiAsIDxjb2Rl
PiBDU1NfUFggPC9jb2RlPiAsIDxjb2RlPiBDU1NfUFggPC9jb2RlPiAsCi0gICAgICogPGNvZGU+
IENTU19DTSA8L2NvZGU+ICwgPGNvZGU+IENTU19NTSA8L2NvZGU+ICwgPGNvZGU+IENTU19JTgot
ICAgICAqIDwvY29kZT4gLCA8Y29kZT4gQ1NTX1BUIDwvY29kZT4gLCA8Y29kZT4gQ1NTX1BDIDwv
Y29kZT4gLAotICAgICAqIDxjb2RlPiBDU1NfREVHIDwvY29kZT4gLCA8Y29kZT4gQ1NTX1JBRCA8
L2NvZGU+ICwgPGNvZGU+Ci0gICAgICogQ1NTX0dSQUQgPC9jb2RlPiAsIDxjb2RlPiBDU1NfTVMg
PC9jb2RlPiAsIDxjb2RlPiBDU1NfUyA8L2NvZGU+Ci0gICAgICogLCA8Y29kZT4gQ1NTX0haIDwv
Y29kZT4gLCA8Y29kZT4gQ1NTX0tIWiA8L2NvZGU+ICwgPGNvZGU+Ci0gICAgICogQ1NTX0RJTUVO
U0lPTiA8L2NvZGU+ICkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZmxvYXRWYWx1ZSBUaGUgbmV3
IGZsb2F0IHZhbHVlLgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqIEBleGNlcHRpb24g
RE9NRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9BQ0NFU1NfRVJSOiBSYWlzZXMgaWYgdGhlIGF0
dGFjaGVkIHByb3BlcnR5IGRvZXNuJ3QKLSAgICAgKiBzdXBwb3J0IHRoZSBmbG9hdCB2YWx1ZSBv
ciB0aGUgdW5pdCB0eXBlLgotICAgICAqCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUjogUmFpc2VkIGlmIHRoaXMgcHJvcGVydHkgaXMKLSAgICAgKiByZWFkb25seS4KLSAgICAg
KgotICAgICAqLwotICAgIHZvaWQgc2V0RmxvYXRWYWx1ZSAoIHVuc2lnbmVkIHNob3J0IHVuaXRU
eXBlLCBmbG9hdCBmbG9hdFZhbHVlICk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBp
cyB1c2VkIHRvIGdldCBhIGZsb2F0IHZhbHVlIGluIGEgc3BlY2lmaWVkIHVuaXQuCi0gICAgICog
SWYgdGhpcyBDU1MgdmFsdWUgZG9lc24ndCBjb250YWluIGEgZmxvYXQgdmFsdWUgb3IgY2FuJ3Qg
YmUKLSAgICAgKiBjb252ZXJ0ZWQgaW50byB0aGUgc3BlY2lmaWVkIHVuaXQsIGEgPGNvZGU+IERP
TUV4Y2VwdGlvbgotICAgICAqIDwvY29kZT4gaXMgcmFpc2VkLgotICAgICAqCi0gICAgICogQHBh
cmFtIHVuaXRUeXBlIEEgdW5pdCBjb2RlIHRvIGdldCB0aGUgZmxvYXQgdmFsdWUuIFRoZSB1bml0
Ci0gICAgICogY29kZSBjYW4gb25seSBiZSBhIGZsb2F0IHVuaXQgdHlwZSAoZS5nLiA8Y29kZT4g
Q1NTX05VTUJFUgotICAgICAqIDwvY29kZT4gLCA8Y29kZT4gQ1NTX1BFUkNFTlRBR0UgPC9jb2Rl
PiAsIDxjb2RlPiBDU1NfRU1TCi0gICAgICogPC9jb2RlPiAsIDxjb2RlPiBDU1NfRVhTIDwvY29k
ZT4gLCA8Y29kZT4gQ1NTX1BYIDwvY29kZT4gLAotICAgICAqIDxjb2RlPiBDU1NfUFggPC9jb2Rl
PiAsIDxjb2RlPiBDU1NfQ00gPC9jb2RlPiAsIDxjb2RlPiBDU1NfTU0KLSAgICAgKiA8L2NvZGU+
ICwgPGNvZGU+IENTU19JTiA8L2NvZGU+ICwgPGNvZGU+IENTU19QVCA8L2NvZGU+ICwKLSAgICAg
KiA8Y29kZT4gQ1NTX1BDIDwvY29kZT4gLCA8Y29kZT4gQ1NTX0RFRyA8L2NvZGU+ICwgPGNvZGU+
IENTU19SQUQKLSAgICAgKiA8L2NvZGU+ICwgPGNvZGU+IENTU19HUkFEIDwvY29kZT4gLCA8Y29k
ZT4gQ1NTX01TIDwvY29kZT4gLAotICAgICAqIDxjb2RlPiBDU1NfUyA8L2NvZGU+ICwgPGNvZGU+
IENTU19IWiA8L2NvZGU+ICwgPGNvZGU+IENTU19LSFoKLSAgICAgKiA8L2NvZGU+ICwgPGNvZGU+
IENTU19ESU1FTlNJT04gPC9jb2RlPiApLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgZmxv
YXQgdmFsdWUgaW4gdGhlIHNwZWNpZmllZCB1bml0LgotICAgICAqCi0gICAgICogQGV4Y2VwdGlv
biBET01FeGNlcHRpb24KLSAgICAgKiBJTlZBTElEX0FDQ0VTU19FUlI6IFJhaXNlcyBpZiB0aGUg
Q1NTIHZhbHVlIGRvZXNuJ3QgY29udGFpbiBhCi0gICAgICogZmxvYXQgdmFsdWUgb3IgaWYgdGhl
IGZsb2F0IHZhbHVlIGNhbid0IGJlIGNvbnZlcnRlZCBpbnRvIHRoZQotICAgICAqIHNwZWNpZmll
ZCB1bml0LgotICAgICAqCi0gICAgICovCi0gICAgZmxvYXQgZ2V0RmxvYXRWYWx1ZSAoIHVuc2ln
bmVkIHNob3J0IHVuaXRUeXBlICk7Ci0KLSAgICAvKioKLSAgICAgKiBBIG1ldGhvZCB0byBzZXQg
dGhlIHN0cmluZyB2YWx1ZSB3aXRoIGEgc3BlY2lmaWVkIHVuaXQuIElmIHRoZQotICAgICAqIHBy
b3BlcnR5IGF0dGFjaGVkIHRvIHRoaXMgdmFsdWUgY2FuJ3QgYWNjZXB0IHRoZSBzcGVjaWZpZWQg
dW5pdAotICAgICAqIG9yIHRoZSBzdHJpbmcgdmFsdWUsIHRoZSB2YWx1ZSB3aWxsIGJlIHVuY2hh
bmdlZCBhbmQgYSA8Y29kZT4KLSAgICAgKiBET01FeGNlcHRpb24gPC9jb2RlPiB3aWxsIGJlIHJh
aXNlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzdHJpbmdUeXBlIEEgc3RyaW5nIGNvZGUgYXMg
ZGVmaW5lZCBhYm92ZS4gVGhlIHN0cmluZwotICAgICAqIGNvZGUgY2FuIG9ubHkgYmUgYSBzdHJp
bmcgdW5pdCB0eXBlIChlLmcuIDxjb2RlPiBDU1NfVVJJCi0gICAgICogPC9jb2RlPiAsIDxjb2Rl
PiBDU1NfSURFTlQgPC9jb2RlPiAsIDxjb2RlPiBDU1NfSU5IRVJJVCA8L2NvZGU+Ci0gICAgICog
YW5kIDxjb2RlPiBDU1NfQVRUUiA8L2NvZGU+ICkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3Ry
aW5nVmFsdWUgVGhlIG5ldyBzdHJpbmcgdmFsdWUuIElmIHRoZSA8Y29kZT4KLSAgICAgKiBzdHJp
bmdUeXBlIDwvY29kZT4gaXMgZXF1YWwgdG8gPGNvZGU+IENTU19JTkhFUklUIDwvY29kZT4gLCB0
aGUKLSAgICAgKiA8Y29kZT4gc3RyaW5nVmFsdWUgPC9jb2RlPiBzaG91bGQgYmUgPGNvZGU+IGlu
aGVyaXQgPC9jb2RlPiAuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICogQGV4Y2VwdGlv
biBET01FeGNlcHRpb24KLSAgICAgKiBJTlZBTElEX0FDQ0VTU19FUlI6IFJhaXNlcyBpZiB0aGUg
Q1NTIHZhbHVlIGRvZXNuJ3QgY29udGFpbiBhCi0gICAgICogc3RyaW5nIHZhbHVlIG9yIGlmIHRo
ZSBzdHJpbmcgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVkIGludG8gdGhlCi0gICAgICogc3BlY2lm
aWVkIHVuaXQuCi0gICAgICoKLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBS
YWlzZWQgaWYgdGhpcyBwcm9wZXJ0eSBpcwotICAgICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAg
ICovCi0gICAgdm9pZCBzZXRTdHJpbmdWYWx1ZSAoIHVuc2lnbmVkIHNob3J0IHN0cmluZ1R5cGUs
IGNvbnN0IERPTVN0cmluZyAmc3RyaW5nVmFsdWUgKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMg
bWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSBzdHJpbmcgdmFsdWUgaW4gYSBzcGVjaWZpZWQKLSAg
ICAgKiB1bml0LiBJZiB0aGUgQ1NTIHZhbHVlIGRvZXNuJ3QgY29udGFpbiBhIHN0cmluZyB2YWx1
ZSwgYSA8Y29kZT4KLSAgICAgKiBET01FeGNlcHRpb24gPC9jb2RlPiBpcyByYWlzZWQuCi0gICAg
ICoKLSAgICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgdmFsdWUgaW4gdGhlIGN1cnJlbnQgdW5pdC4g
VGhlIGN1cnJlbnQKLSAgICAgKiA8Y29kZT4gdmFsdWVUeXBlIDwvY29kZT4gY2FuIG9ubHkgYmUg
YSBzdHJpbmcgdW5pdCB0eXBlIChlLmcuCi0gICAgICogPGNvZGU+IENTU19VUkkgPC9jb2RlPiAs
IDxjb2RlPiBDU1NfSURFTlQgPC9jb2RlPiBhbmQgPGNvZGU+Ci0gICAgICogQ1NTX0FUVFIgPC9j
b2RlPiApLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBJ
TlZBTElEX0FDQ0VTU19FUlI6IFJhaXNlcyBpZiB0aGUgQ1NTIHZhbHVlIGRvZXNuJ3QgY29udGFp
biBhCi0gICAgICogc3RyaW5nIHZhbHVlLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5n
IGdldFN0cmluZ1ZhbHVlICggICk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyB1
c2VkIHRvIGdldCB0aGUgQ291bnRlciB2YWx1ZS4gSWYgdGhpcyBDU1MgdmFsdWUKLSAgICAgKiBk
b2Vzbid0IGNvbnRhaW4gYSBjb3VudGVyIHZhbHVlLCBhIDxjb2RlPiBET01FeGNlcHRpb24gPC9j
b2RlPgotICAgICAqIGlzIHJhaXNlZC4gTW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5n
IHN0eWxlIHByb3BlcnR5IGNhbgotICAgICAqIGJlIGFjaGlldmVkIHVzaW5nIHRoZSA8Y29kZT4g
Q291bnRlciA8L2NvZGU+IGludGVyZmFjZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIENv
dW50ZXIgdmFsdWUuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAg
ICAqIElOVkFMSURfQUNDRVNTX0VSUjogUmFpc2VzIGlmIHRoZSBDU1MgdmFsdWUgZG9lc24ndCBj
b250YWluIGEKLSAgICAgKiBDb3VudGVyIHZhbHVlLgotICAgICAqCi0gICAgICovCi0gICAgQ291
bnRlciBnZXRDb3VudGVyVmFsdWUgKCAgKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9k
IGlzIHVzZWQgdG8gZ2V0IHRoZSBSZWN0IHZhbHVlLiBJZiB0aGlzIENTUyB2YWx1ZQotICAgICAq
IGRvZXNuJ3QgY29udGFpbiBhIHJlY3QgdmFsdWUsIGEgPGNvZGU+IERPTUV4Y2VwdGlvbiA8L2Nv
ZGU+IGlzCi0gICAgICogcmFpc2VkLiBNb2RpZmljYXRpb24gdG8gdGhlIGNvcnJlc3BvbmRpbmcg
c3R5bGUgcHJvcGVydHkgY2FuIGJlCi0gICAgICogYWNoaWV2ZWQgdXNpbmcgdGhlIDxjb2RlPiBS
ZWN0IDwvY29kZT4gaW50ZXJmYWNlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgUmVjdCB2
YWx1ZS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSU5W
QUxJRF9BQ0NFU1NfRVJSOiBSYWlzZXMgaWYgdGhlIENTUyB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4g
YQotICAgICAqIFJlY3QgdmFsdWUuCi0gICAgICoKLSAgICAgKi8KLSAgICBSZWN0IGdldFJlY3RW
YWx1ZSAoICApOwotCi0gICAgLyoqCi0gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQg
dGhlIFJHQiBjb2xvci4gSWYgdGhpcyBDU1MgdmFsdWUKLSAgICAgKiBkb2Vzbid0IGNvbnRhaW4g
YSBSR0IgY29sb3IgdmFsdWUsIGEgPGNvZGU+IERPTUV4Y2VwdGlvbgotICAgICAqIDwvY29kZT4g
aXMgcmFpc2VkLiBNb2RpZmljYXRpb24gdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUKLSAgICAg
KiBwcm9wZXJ0eSBjYW4gYmUgYWNoaWV2ZWQgdXNpbmcgdGhlIDxjb2RlPiBSR0JDb2xvciA8L2Nv
ZGU+Ci0gICAgICogaW50ZXJmYWNlLgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgUkdCIGNv
bG9yIHZhbHVlLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAg
KiBJTlZBTElEX0FDQ0VTU19FUlI6IFJhaXNlcyBpZiB0aGUgYXR0YWNoZWQgcHJvcGVydHkgY2Fu
J3QKLSAgICAgKiByZXR1cm4gYSBSR0IgY29sb3IgdmFsdWUuCi0gICAgICoKLSAgICAgKi8KLSAg
ICBSR0JDb2xvciBnZXRSR0JDb2xvclZhbHVlICggICk7Ci0KLSNlbmRpZgotCi19OwotCi0KLSNp
ZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0vKioKLSAqIFRoZSA8Y29kZT4gUkdCQ29sb3Ig
PC9jb2RlPiBpbnRlcmZhY2UgaXMgdXNlZCB0byByZXByZXNlbnQgYW55IDxhCi0gKiBocmVmPSJo
dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWNvbG9y
Ij4KLSAqIFJHQiBjb2xvciA8L2E+IHZhbHVlLiBUaGlzIGludGVyZmFjZSByZWZsZWN0cyB0aGUg
dmFsdWVzIGluIHRoZQotICogdW5kZXJseWluZyBzdHlsZSBwcm9wZXJ0eS4gSGVuY2UsIG1vZGlm
aWNhdGlvbnMgbWFkZSB0aHJvdWdoIHRoaXMKLSAqIGludGVyZmFjZSBtb2RpZnkgdGhlIHN0eWxl
IHByb3BlcnR5LgotICoKLSAqLwotY2xhc3MgUkdCQ29sb3IKLXsKLXB1YmxpYzoKLSAgICBSR0JD
b2xvcigpOwotICAgIFJHQkNvbG9yKGNvbnN0IFJHQkNvbG9yICZvdGhlcik7Ci0gICAgUkdCQ29s
b3IoY29uc3QgUUNvbG9yICZjb2xvcik7Ci0KLSAgICBSR0JDb2xvciAmIG9wZXJhdG9yID0gKGNv
bnN0IFJHQkNvbG9yICZvdGhlcik7Ci0KLSAgICB+UkdCQ29sb3IoKTsKLQotICAgIC8qKgotICAg
ICAqIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgZm9yIHRoZSByZWQgdmFsdWUgb2YgdGhlIFJHQiBj
b2xvci4KLSAgICAgKgotICAgICAqLwotICAgIENTU1ByaW1pdGl2ZVZhbHVlIHJlZCgpIGNvbnN0
OwotCi0gICAgLyoqCi0gICAgICogVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBmb3IgdGhlIGdyZWVu
IHZhbHVlIG9mIHRoZSBSR0IgY29sb3IuCi0gICAgICoKLSAgICAgKi8KLSAgICBDU1NQcmltaXRp
dmVWYWx1ZSBncmVlbigpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVGhpcyBhdHRyaWJ1dGUg
aXMgdXNlZCBmb3IgdGhlIGJsdWUgdmFsdWUgb2YgdGhlIFJHQiBjb2xvci4KLSAgICAgKgotICAg
ICAqLwotICAgIENTU1ByaW1pdGl2ZVZhbHVlIGJsdWUoKSBjb25zdDsKLQotICAgIGNvbnN0IFFD
b2xvciAmY29sb3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9Ci0KLXByb3RlY3RlZDoKLSAg
ICBRQ29sb3IgbV9jb2xvcjsKIH07CiAKLWNsYXNzIFJlY3RJbXBsOwotCi0vKioKLSAqIFRoZSA8
Y29kZT4gUmVjdCA8L2NvZGU+IGludGVyZmFjZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhbnkgPGEK
LSAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL3Zpc3VmeC5odG1sI3ZhbHVl
LWRlZi1zaGFwZSI+Ci0gKiByZWN0IDwvYT4gdmFsdWUuIFRoaXMgaW50ZXJmYWNlIHJlZmxlY3Rz
IHRoZSB2YWx1ZXMgaW4gdGhlCi0gKiB1bmRlcmx5aW5nIHN0eWxlIHByb3BlcnR5LiBIZW5jZSwg
bW9kaWZpY2F0aW9ucyBtYWRlIHRocm91Z2ggdGhpcwotICogaW50ZXJmYWNlIG1vZGlmeSB0aGUg
c3R5bGUgcHJvcGVydHkuCi0gKgotICovCi1jbGFzcyBSZWN0Ci17Ci0gICAgZnJpZW5kIGNsYXNz
IENTU1ByaW1pdGl2ZVZhbHVlOwotcHVibGljOgotICAgIFJlY3QoKTsKLSAgICBSZWN0KGNvbnN0
IFJlY3QgJm90aGVyKTsKLQotICAgIFJlY3QgJiBvcGVyYXRvciA9IChjb25zdCBSZWN0ICZvdGhl
cik7Ci0KLSAgICB+UmVjdCgpOwotCi0gICAgLyoqCi0gICAgICogVGhpcyBhdHRyaWJ1dGUgaXMg
dXNlZCBmb3IgdGhlIHRvcCBvZiB0aGUgcmVjdC4KLSAgICAgKgotICAgICAqLwotICAgIENTU1By
aW1pdGl2ZVZhbHVlIHRvcCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVGhpcyBhdHRyaWJ1
dGUgaXMgdXNlZCBmb3IgdGhlIHJpZ2h0IG9mIHRoZSByZWN0LgotICAgICAqCi0gICAgICovCi0g
ICAgQ1NTUHJpbWl0aXZlVmFsdWUgcmlnaHQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRo
aXMgYXR0cmlidXRlIGlzIHVzZWQgZm9yIHRoZSBib3R0b20gb2YgdGhlIHJlY3QuCi0gICAgICoK
LSAgICAgKi8KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSBib3R0b20oKSBjb25zdDsKLQotICAgIC8q
KgotICAgICAqIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgZm9yIHRoZSBsZWZ0IG9mIHRoZSByZWN0
LgotICAgICAqCi0gICAgICovCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUgbGVmdCgpIGNvbnN0Owog
Ci0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQot
ICAgICAqLwotICAgIFJlY3RJbXBsICpoYW5kbGUoKSBjb25zdDsKLSAgICBib29sIGlzTnVsbCgp
IGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgUmVjdEltcGwgKmltcGw7Ci0gICAgUmVjdChSZWN0
SW1wbCAqaSk7Ci19OwotCi1jbGFzcyBDb3VudGVySW1wbDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+
IENvdW50ZXIgPC9jb2RlPiBpbnRlcmZhY2UgaXMgdXNlZCB0byByZXByZXNlbnQgYW55IDxhCi0g
KiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9zeW5kYXRhLmh0bWwjdmFsdWUt
ZGVmLWNvdW50ZXIiPgotICogY291bnRlciBvciBjb3VudGVycyBmdW5jdGlvbiA8L2E+IHZhbHVl
LiBUaGlzIGludGVyZmFjZSByZWZsZWN0cwotICogdGhlIHZhbHVlcyBpbiB0aGUgdW5kZXJseWlu
ZyBzdHlsZSBwcm9wZXJ0eS4gSGVuY2UsIG1vZGlmaWNhdGlvbnMKLSAqIG1hZGUgdGhyb3VnaCB0
aGlzIGludGVyZmFjZSBtb2RpZnkgdGhlIHN0eWxlIHByb3BlcnR5LgotICoKLSAqLwotY2xhc3Mg
Q291bnRlcgotewotICAgIGZyaWVuZCBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKLXB1YmxpYzoK
LSAgICBDb3VudGVyKCk7Ci0gICAgQ291bnRlcihjb25zdCBDb3VudGVyICZvdGhlcik7Ci1wdWJs
aWM6Ci0KLSAgICBDb3VudGVyICYgb3BlcmF0b3IgPSAoY29uc3QgQ291bnRlciAmb3RoZXIpOwot
Ci0gICAgfkNvdW50ZXIoKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgYXR0cmlidXRlIGlzIHVz
ZWQgZm9yIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb3VudGVyLgotICAgICAqCi0gICAgICovCi0g
ICAgRE9NU3RyaW5nIGlkZW50aWZpZXIoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoaXMg
YXR0cmlidXRlIGlzIHVzZWQgZm9yIHRoZSBzdHlsZSBvZiB0aGUgbGlzdC4KLSAgICAgKgotICAg
ICAqLwotICAgIERPTVN0cmluZyBsaXN0U3R5bGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAq
IFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgZm9yIHRoZSBzZXBhcmF0b3Igb2YgbmVzdGVkIGNvdW50
ZXJzLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIHNlcGFyYXRvcigpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQot
ICAgICAqLwotICAgIENvdW50ZXJJbXBsICpoYW5kbGUoKSBjb25zdDsKLSAgICBib29sIGlzTnVs
bCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ291bnRlckltcGwgKmltcGw7Ci0gICAgQ291
bnRlcihDb3VudGVySW1wbCAqaSk7Ci19OwotCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UKIApJ
bmRleDoga2h0bWwvZG9tL2RvbTJfZXZlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tMl9ldmVudHMuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjI2CmRpZmYgLXAgLXUgLXIxLjI2IGtodG1sL2RvbS9kb20yX2V2ZW50cy5jcHAKLS0t
IGtodG1sL2RvbS9kb20yX2V2ZW50cy5jcHAJMyBPY3QgMjAwNSAyMToxMjoxMSAtMDAwMAkxLjI2
CisrKyBraHRtbC9kb20vZG9tMl9ldmVudHMuY3BwCTI5IE5vdiAyMDA1IDEyOjQxOjI3IC0wMDAw
CkBAIC0yNiwxMiArMjYsNiBAQAogCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgog
Ci0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotI2luY2x1ZGUgImRvbS9kb20yX3ZpZXdz
LmgiCi0jaW5jbHVkZSAiZG9tL2RvbV9leGNlcHRpb24uaCIKLQotI2VuZGlmCiAKIG5hbWVzcGFj
ZSBET00gewogCkBAIC01MywxMiArNDcsNyBAQCBFdmVudExpc3RlbmVyOjp+RXZlbnRMaXN0ZW5l
cigpCiAKIHZvaWQgRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnRJbXBsKEV2ZW50SW1wbCAqZXZ0
LCBib29sIGlzV2luZG93RXZlbnQpCiB7Ci0jaWYgS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQogICAg
IGhhbmRsZUV2ZW50KGV2dCwgaXNXaW5kb3dFdmVudCk7Ci0jZWxzZQotICAgIEV2ZW50IHdyYXBw
ZXIoZXZ0KTsKLSAgICBoYW5kbGVFdmVudCh3cmFwcGVyLCBpc1dpbmRvd0V2ZW50KTsKLSNlbmRp
ZgogfQogCiB2b2lkIEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KEV2ZW50TGlzdGVuZXJFdmVu
dCwgYm9vbCkKQEAgLTcyLDcwNiArNjEsNSBAQCBET01TdHJpbmcgRXZlbnRMaXN0ZW5lcjo6ZXZl
bnRMaXN0ZW5lclR5CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZiAhS0hUTUxfTk9f
Q1BMVVNQTFVTX0RPTQotCi1FdmVudDo6RXZlbnQoKQotewotICAgIGltcGwgPSAwOwotfQotCi0K
LUV2ZW50OjpFdmVudChjb25zdCBFdmVudCAmb3RoZXIpCi17Ci0gICAgaW1wbCA9IG90aGVyLmlt
cGw7Ci0gICAgaWYgKGltcGwpIGltcGwtPnJlZigpOwotfQotCi1FdmVudDo6RXZlbnQoRXZlbnRJ
bXBsICppKQotewotICAgIGltcGwgPSBpOwotICAgIGlmIChpbXBsKSBpbXBsLT5yZWYoKTsKLX0K
LQotRXZlbnQ6On5FdmVudCgpCi17Ci0gICAgaWYgKGltcGwpIGltcGwtPmRlcmVmKCk7Ci19Ci0K
LUV2ZW50ICZFdmVudDo6b3BlcmF0b3IgPSAoY29uc3QgRXZlbnQgJm90aGVyKQotewotICAgIGlm
ICggaW1wbCAhPSBvdGhlci5pbXBsICkgewotICAgIGlmKGltcGwpIGltcGwtPmRlcmVmKCk7Ci0g
ICAgaW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYoaW1wbCkgaW1wbC0+cmVmKCk7Ci0gICAgfQot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotRE9NU3RyaW5nIEV2ZW50Ojp0eXBlKCkgY29uc3QKLXsK
LSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJ
RF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPnR5cGUoKTsKLX0KLQotTm9kZSBFdmVu
dDo6dGFyZ2V0KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9u
KERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPnRh
cmdldCgpOwotfQotCi1Ob2RlIEV2ZW50OjpjdXJyZW50VGFyZ2V0KCkgY29uc3QKLXsKLSAgICBp
ZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFU
RV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPmN1cnJlbnRUYXJnZXQoKTsKLX0KLQotdW5zaWdu
ZWQgc2hvcnQgRXZlbnQ6OmV2ZW50UGhhc2UoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0
aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAg
ICByZXR1cm4gaW1wbC0+ZXZlbnRQaGFzZSgpOwotfQotCi1ib29sIEV2ZW50OjpidWJibGVzKCkg
Y29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlv
bjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPmJ1YmJsZXMoKTsKLX0K
LQotYm9vbCBFdmVudDo6Y2FuY2VsYWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRo
cm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAg
IHJldHVybiBpbXBsLT5jYW5jZWxhYmxlKCk7Ci19Ci0KLURPTVRpbWVTdGFtcCBFdmVudDo6dGlt
ZVN0YW1wKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERP
TUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPnRpbWVT
dGFtcCgpOwotfQotCi12b2lkIEV2ZW50OjpzdG9wUHJvcGFnYXRpb24oKQotewotICAgIGlmICgh
aW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VS
Uik7Ci0KLSAgICBpbXBsLT5zdG9wUHJvcGFnYXRpb24oKTsKLX0KLQotdm9pZCBFdmVudDo6cHJl
dmVudERlZmF1bHQoKQotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9N
RXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBpbXBsLT5wcmV2ZW50RGVmYXVs
dCgpOwotfQotCi12b2lkIEV2ZW50Ojppbml0RXZlbnQoY29uc3QgRE9NU3RyaW5nICZldmVudFR5
cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCi17Ci0gICAgaWYg
KCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVf
RVJSKTsKLQotICAgIGltcGwtPmluaXRFdmVudChldmVudFR5cGVBcmcsY2FuQnViYmxlQXJnLGNh
bmNlbGFibGVBcmcpOwotfQotCi1FdmVudEltcGwgKkV2ZW50OjpoYW5kbGUoKSBjb25zdAotewot
ICAgIHJldHVybiBpbXBsOwotfQotCi1ib29sIEV2ZW50Ojppc051bGwoKSBjb25zdAotewotICAg
IHJldHVybiAoaW1wbCA9PSAwKTsKLX0KLQotdm9pZCBFdmVudDo6c2V0Q2FuY2VsQnViYmxlKGJv
b2wgY2FuY2VsKQotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhj
ZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBpbXBsLT5zZXRDYW5jZWxCdWJibGUo
Y2FuY2VsKTsKLX0KLQotdm9pZCBFdmVudDo6c2V0RGVmYXVsdFByZXZlbnRlZChib29sIGRlZmF1
bHRQcmV2ZW50ZWQpCi17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01F
eGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIGltcGwtPnNldERlZmF1bHRQcmV2
ZW50ZWQoZGVmYXVsdFByZXZlbnRlZCk7Ci19Ci0gCi1ib29sIEV2ZW50OjpnZXRDYW5jZWxCdWJi
bGUoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhj
ZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gaW1wbC0+Z2V0Q2FuY2Vs
QnViYmxlKCk7Ci19Ci0KLWJvb2wgRXZlbnQ6OmRlZmF1bHRQcmV2ZW50ZWQoKSBjb25zdAotewot
ICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElE
X1NUQVRFX0VSUik7Ci0gICAgCi0gICAgcmV0dXJuIGltcGwtPmRlZmF1bHRQcmV2ZW50ZWQoKTsK
LX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmbmRlZiBTQVZFX1NQQUNFCi0KLUV2
ZW50RXhjZXB0aW9uOjpFdmVudEV4Y2VwdGlvbih1bnNpZ25lZCBzaG9ydCBfY29kZSkKLXsKLSAg
ICBjb2RlID0gX2NvZGU7Ci19Ci0KLUV2ZW50RXhjZXB0aW9uOjpFdmVudEV4Y2VwdGlvbihjb25z
dCBFdmVudEV4Y2VwdGlvbiAmb3RoZXIpCi17Ci0gICAgY29kZSA9IG90aGVyLmNvZGU7Ci19Ci0K
LUV2ZW50RXhjZXB0aW9uICYgRXZlbnRFeGNlcHRpb246Om9wZXJhdG9yID0gKGNvbnN0IEV2ZW50
RXhjZXB0aW9uICZvdGhlcikKLXsKLSAgICBjb2RlID0gb3RoZXIuY29kZTsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1VSUV2ZW50
OjpVSUV2ZW50KCkgOiBFdmVudCgpCi17Ci19Ci0KLVVJRXZlbnQ6OlVJRXZlbnQoY29uc3QgVUlF
dmVudCAmb3RoZXIpIDogRXZlbnQob3RoZXIpCi17Ci19Ci0KLVVJRXZlbnQ6OlVJRXZlbnQoY29u
c3QgRXZlbnQgJm90aGVyKSA6IEV2ZW50KCkKLXsKLSAgICAoKnRoaXMpPW90aGVyOwotfQotCi1V
SUV2ZW50OjpVSUV2ZW50KFVJRXZlbnRJbXBsICppbXBsKSA6IEV2ZW50KGltcGwpCi17Ci19Ci0K
LVVJRXZlbnQgJlVJRXZlbnQ6Om9wZXJhdG9yID0gKGNvbnN0IFVJRXZlbnQgJm90aGVyKQotewot
ICAgIEV2ZW50OjpvcGVyYXRvciA9IChvdGhlcik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1V
SUV2ZW50ICZVSUV2ZW50OjpvcGVyYXRvciA9IChjb25zdCBFdmVudCAmb3RoZXIpCi17Ci0gICAg
RXZlbnQgZTsKLSAgICBlID0gb3RoZXI7Ci0gICAgaWYgKCFlLmlzTnVsbCgpICYmICFlLmhhbmRs
ZSgpLT5pc1VJRXZlbnQoKSkgewotCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7Ci0JaW1wbCA9
IDA7Ci0gICAgfSBlbHNlCi0JRXZlbnQ6Om9wZXJhdG9yID0gKG90aGVyKTsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLVVJRXZlbnQ6On5VSUV2ZW50KCkKLXsKLX0KLQotQWJzdHJhY3RWaWV3IFVJ
RXZlbnQ6OnZpZXcoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRp
b24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VUlFdmVudEltcGwqPihpbXBsKS0+dmlldygpOwotfQotCi1pbnQgVUlFdmVudDo6ZGV0
YWlsKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4
Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFVJ
RXZlbnRJbXBsKj4oaW1wbCktPmRldGFpbCgpOwotfQotCi1pbnQgVUlFdmVudDo6a2V5Q29kZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRp
b246OklOVkFMSURfU1RBVEVfRVJSKTsKLSAgICAKLSAgICBpZiAoaW1wbC0+aXNLZXlib2FyZEV2
ZW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCo+KGlt
cGwpLT5rZXlDb2RlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJ
RXZlbnQ6OmNoYXJDb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhj
ZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotICAgIAotICAgIGlmIChp
bXBsLT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtleWJv
YXJkRXZlbnRJbXBsKj4oaW1wbCktPmNoYXJDb2RlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1
cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VYKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwp
Ci0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwot
ICAgIAotICAgIGlmIChpbXBsLT5pc01vdXNlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCktPmNsaWVudFgoKTsKLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6cGFnZVkoKSBjb25zdAotewotICAgIGlm
ICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRF
X0VSUik7Ci0gICAgCi0gICAgaWYgKGltcGwtPmlzTW91c2VFdmVudCgpKQotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+Y2xpZW50WSgpOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50OjpsYXllclgoKSBjb25zdAot
ewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZB
TElEX1NUQVRFX0VSUik7Ci0gICAgCi0gICAgaWYgKGltcGwtPmlzTW91c2VFdmVudCgpKQotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+bGF5ZXJYKCk7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OmxheWVyWSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRp
b246OklOVkFMSURfU1RBVEVfRVJSKTsKLSAgICAKLSAgICBpZiAoaW1wbC0+aXNNb3VzZUV2ZW50
KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5s
YXllclkoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6
d2hpY2goKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9N
RXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICAvLyBOb3RlOiBUaGlzIHByb3Bl
cnR5IHN1cHBvcnRzIGJvdGgga2V5IGV2ZW50cyBhbmQgbW91c2UgZXZlbnRzCi0KLSAgICAvLyBO
ZXRzY2FwZSdzICJ3aGljaCIgcmV0dXJucyBhIHZpcnR1YWwga2V5IGNvZGUgZm9yIGtleWRvd24g
YW5kIGtleXVwLCBhbmQgYSBjaGFyYWN0ZXIgY29kZSBmb3Iga2V5cHJlc3MuCi0gICAgLy8gVGhh
dCdzIGV4YWN0bHkgd2hhdCBJRSdzICJrZXlDb2RlIiByZXR1cm5zLgotICAgIGlmIChpbXBsLT5p
c0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtleWJvYXJkRXZl
bnRJbXBsKj4oaW1wbCktPmtleUNvZGUoKTsKLQotICAgIC8vIEZvciBraHRtbCwgdGhlIHJldHVy
biB2YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQgbW91c2UgYnV0dG9ucyBhcmUgMCwg
MSwgMiwgcmVzcGVjdGl2ZWx5LgotICAgIC8vIEZvciB0aGUgTmV0c2NhcGUgIndoaWNoIiBwcm9w
ZXJ0eSwgdGhlIHJldHVybiB2YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQgbW91c2Ug
YnV0dG9ucyBhcmUgMSwgMiwgMywgcmVzcGVjdGl2ZWx5LiAKLSAgICAvLyBTbyB3ZSBjYW4ganVz
dCBhZGQgMSB0byB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2FsbGluZyBidXR0b24oKS4KLSAgICBp
ZiAoaW1wbC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50SW1wbCo+KGltcGwpLT5idXR0b24oKSArIDE7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
Ci12b2lkIFVJRXZlbnQ6OmluaXRVSUV2ZW50KGNvbnN0IERPTVN0cmluZyAmdHlwZUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWJzdHJhY3RWaWV3ICZ2aWV3QXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZykKLXsKLSAgICBpZiAo
IWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9F
UlIpOwotCi0gICAgc3RhdGljX2Nhc3Q8VUlFdmVudEltcGwqPihpbXBsKS0+aW5pdFVJRXZlbnQo
dHlwZUFyZyxjYW5CdWJibGVBcmcsY2FuY2VsYWJsZUFyZywKLQkJCQkJCSB2aWV3QXJnLmhhbmRs
ZSgpLGRldGFpbEFyZyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1vdXNlRXZl
bnQ6Ok1vdXNlRXZlbnQoKSA6IFVJRXZlbnQoKQotewotfQotCi1Nb3VzZUV2ZW50OjpNb3VzZUV2
ZW50KGNvbnN0IE1vdXNlRXZlbnQgJm90aGVyKSA6IFVJRXZlbnQob3RoZXIpCi17Ci19Ci0KLU1v
dXNlRXZlbnQ6Ok1vdXNlRXZlbnQoY29uc3QgRXZlbnQgJm90aGVyKSA6IFVJRXZlbnQoKQotewot
ICAgICgqdGhpcyk9b3RoZXI7Ci19Ci0KLU1vdXNlRXZlbnQ6Ok1vdXNlRXZlbnQoTW91c2VFdmVu
dEltcGwgKmltcGwpIDogVUlFdmVudChpbXBsKQotewotfQotCi1Nb3VzZUV2ZW50ICZNb3VzZUV2
ZW50OjpvcGVyYXRvciA9IChjb25zdCBNb3VzZUV2ZW50ICZvdGhlcikKLXsKLSAgICBVSUV2ZW50
OjpvcGVyYXRvciA9IChvdGhlcik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1Nb3VzZUV2ZW50
ICZNb3VzZUV2ZW50OjpvcGVyYXRvciA9IChjb25zdCBFdmVudCAmb3RoZXIpCi17Ci0gICAgRXZl
bnQgZTsKLSAgICBlID0gb3RoZXI7Ci0gICAgaWYgKCFlLmlzTnVsbCgpICYmICFlLmhhbmRsZSgp
LT5pc01vdXNlRXZlbnQoKSkgewotCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7Ci0JaW1wbCA9
IDA7Ci0gICAgfSBlbHNlCi0JVUlFdmVudDo6b3BlcmF0b3IgPSAob3RoZXIpOwotICAgIHJldHVy
biAqdGhpczsKLX0KLQotTW91c2VFdmVudDo6fk1vdXNlRXZlbnQoKQotewotfQotCi1pbnQgTW91
c2VFdmVudDo6c2NyZWVuWCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4
Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5zY3JlZW5YKCk7Ci19Ci0KLWludCBN
b3VzZUV2ZW50OjpzY3JlZW5ZKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCktPnNjcmVlblkoKTsKLX0KLQotaW50
IE1vdXNlRXZlbnQ6OmNsaWVudFgoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBE
T01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+Y2xpZW50WCgpOwotfQotCi1p
bnQgTW91c2VFdmVudDo6Y2xpZW50WSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93
IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5jbGllbnRZKCk7Ci19Ci0K
LWJvb2wgTW91c2VFdmVudDo6Y3RybEtleSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRo
cm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5jdHJsS2V5KCk7Ci19
Ci0KLWJvb2wgTW91c2VFdmVudDo6c2hpZnRLZXkoKSBjb25zdAotewotICAgIGlmICghaW1wbCkK
LQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0K
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+c2hpZnRLZXko
KTsKLX0KLQotYm9vbCBNb3VzZUV2ZW50OjphbHRLZXkoKSBjb25zdAotewotICAgIGlmICghaW1w
bCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+YWx0S2V5
KCk7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6bWV0YUtleSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
bXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJS
KTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5tZXRh
S2V5KCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IE1vdXNlRXZlbnQ6OmJ1dHRvbigpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFM
SURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+
KGltcGwpLT5idXR0b24oKTsKLX0KLQotTm9kZSBNb3VzZUV2ZW50OjpyZWxhdGVkVGFyZ2V0KCkg
Y29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlv
bjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE1vdXNlRXZl
bnRJbXBsKj4oaW1wbCktPnJlbGF0ZWRUYXJnZXQoKTsKLX0KLQotdm9pZCBNb3VzZUV2ZW50Ojpp
bml0TW91c2VFdmVudChjb25zdCBET01TdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFic3RyYWN0VmlldyAmdmlld0FyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IGJ1dHRvbkFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE5vZGUgJnJlbGF0ZWRUYXJnZXRBcmcpCi17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93
IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHN0
YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCktPmluaXRNb3VzZUV2ZW50KHR5cGVBcmcs
Y2FuQnViYmxlQXJnLAotCWNhbmNlbGFibGVBcmcsdmlld0FyZy5oYW5kbGUoKSxkZXRhaWxBcmcs
c2NyZWVuWEFyZyxzY3JlZW5ZQXJnLGNsaWVudFhBcmcsCi0JY2xpZW50WUFyZyxjdHJsS2V5QXJn
LGFsdEtleUFyZyxzaGlmdEtleUFyZyxtZXRhS2V5QXJnLGJ1dHRvbkFyZywKLQlyZWxhdGVkVGFy
Z2V0QXJnLmhhbmRsZSgpKTsKLX0KLQotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU11
dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoKSA6IEV2ZW50KCkKLXsKLX0KLQotTXV0YXRpb25F
dmVudDo6TXV0YXRpb25FdmVudChjb25zdCBNdXRhdGlvbkV2ZW50ICZvdGhlcikgOiBFdmVudChv
dGhlcikKLXsKLX0KLQotTXV0YXRpb25FdmVudDo6TXV0YXRpb25FdmVudChjb25zdCBFdmVudCAm
b3RoZXIpIDogRXZlbnQoKQotewotICAgICgqdGhpcyk9b3RoZXI7Ci19Ci0KLU11dGF0aW9uRXZl
bnQ6Ok11dGF0aW9uRXZlbnQoTXV0YXRpb25FdmVudEltcGwgKmltcGwpIDogRXZlbnQoaW1wbCkK
LXsKLX0KLQotTXV0YXRpb25FdmVudCAmTXV0YXRpb25FdmVudDo6b3BlcmF0b3IgPSAoY29uc3Qg
TXV0YXRpb25FdmVudCAmb3RoZXIpCi17Ci0gICAgRXZlbnQ6Om9wZXJhdG9yID0gKG90aGVyKTsK
LSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLU11dGF0aW9uRXZlbnQgJk11dGF0aW9uRXZlbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IEV2ZW50ICZvdGhlcikKLXsKLSAgICBFdmVudCBlOwotICAgIGUgPSBv
dGhlcjsKLSAgICBpZiAoIWUuaXNOdWxsKCkgJiYgIWUuaGFuZGxlKCktPmlzTXV0YXRpb25FdmVu
dCgpKSB7Ci0JaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKLQlpbXBsID0gMDsKLSAgICB9IGVs
c2UKLQlFdmVudDo6b3BlcmF0b3IgPSAob3RoZXIpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQot
TXV0YXRpb25FdmVudDo6fk11dGF0aW9uRXZlbnQoKQotewotfQotCi1Ob2RlIE11dGF0aW9uRXZl
bnQ6OnJlbGF0ZWROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhj
ZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PE11dGF0aW9uRXZlbnRJbXBsKj4oaW1wbCktPnJlbGF0ZWROb2RlKCk7Ci19Ci0K
LURPTVN0cmluZyBNdXRhdGlvbkV2ZW50OjpwcmV2VmFsdWUoKSBjb25zdAotewotICAgIGlmICgh
aW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VS
Uik7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudEltcGwqPihpbXBsKS0+
cHJldlZhbHVlKCk7Ci19Ci0KLURPTVN0cmluZyBNdXRhdGlvbkV2ZW50OjpuZXdWYWx1ZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246
OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhdGlvbkV2
ZW50SW1wbCo+KGltcGwpLT5uZXdWYWx1ZSgpOwotfQotCi1ET01TdHJpbmcgTXV0YXRpb25FdmVu
dDo6YXR0ck5hbWUoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRp
b24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TXV0YXRpb25FdmVudEltcGwqPihpbXBsKS0+YXR0ck5hbWUoKTsKLX0KLQotdW5zaWdu
ZWQgc2hvcnQgTXV0YXRpb25FdmVudDo6YXR0ckNoYW5nZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
bXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJS
KTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50SW1wbCo+KGltcGwpLT5h
dHRyQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgTXV0YXRpb25FdmVudDo6aW5pdE11dGF0aW9uRXZlbnQo
Y29uc3QgRE9NU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBOb2RlICZyZWxhdGVkTm9kZUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmcHJldlZhbHVlQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZu
ZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IERPTVN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKQotewotICAgIGlmICghaW1wbCkK
LQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0K
LSAgICBzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50SW1wbCo+KGltcGwpLT5pbml0TXV0YXRpb25F
dmVudCh0eXBlQXJnLAotCWNhbkJ1YmJsZUFyZyxjYW5jZWxhYmxlQXJnLHJlbGF0ZWROb2RlQXJn
LmhhbmRsZSgpLHByZXZWYWx1ZUFyZywKLQluZXdWYWx1ZUFyZyxhdHRyTmFtZUFyZyxhdHRyQ2hh
bmdlQXJnKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotS2V5Ym9hcmRFdmVudDo6
S2V5Ym9hcmRFdmVudCgpCi17Ci19Ci0KLUtleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQoY29u
c3QgS2V5Ym9hcmRFdmVudCAmb3RoZXIpIDogVUlFdmVudChvdGhlcikKLXsKLX0KLQotS2V5Ym9h
cmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBFdmVudCAmb3RoZXIpCi17Ci0gICAgKnRoaXMg
PSBvdGhlcjsKLX0KLQotS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50
SW1wbCAqaW1wbCkgOiBVSUV2ZW50KGltcGwpCi17Ci19Ci0KLUtleWJvYXJkRXZlbnQgJktleWJv
YXJkRXZlbnQ6Om9wZXJhdG9yID0gKGNvbnN0IEtleWJvYXJkRXZlbnQgJm90aGVyKQotewotICAg
IFVJRXZlbnQ6Om9wZXJhdG9yID0gKG90aGVyKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLUtl
eWJvYXJkRXZlbnQgJktleWJvYXJkRXZlbnQ6Om9wZXJhdG9yID0gKGNvbnN0IEV2ZW50ICZvdGhl
cikKLXsKLSAgICBFdmVudCBlOwotICAgIGUgPSBvdGhlcjsKLSAgICBpZiAoIWUuaXNOdWxsKCkg
JiYgIWUuaGFuZGxlKCktPmlzS2V5Ym9hcmRFdmVudCgpKSB7Ci0JaWYgKCBpbXBsICkgaW1wbC0+
ZGVyZWYoKTsKLQlpbXBsID0gMDsKLSAgICB9IGVsc2UKLQlVSUV2ZW50OjpvcGVyYXRvciA9IChv
dGhlcik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1LZXlib2FyZEV2ZW50Ojp+S2V5Ym9hcmRF
dmVudCgpCi17Ci19Ci0KLURPTVN0cmluZyBLZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyKCkg
Y29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlv
bjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnRJbXBsKj4oaW1wbCktPmtleUlkZW50aWZpZXIoKTsKLX0KLQotdW5zaWduZWQgS2V5Ym9h
cmRFdmVudDo6a2V5TG9jYXRpb24oKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBE
T01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudEltcGwqPihpbXBsKS0+a2V5TG9jYXRpb24oKTsK
LX0KLQotYm9vbCBLZXlib2FyZEV2ZW50OjpjdHJsS2V5KCkgY29uc3QKLXsKLSAgICBpZiAoIWlt
cGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIp
OwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnRJbXBsKj4oaW1wbCktPmN0
cmxLZXkoKTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50OjpzaGlmdEtleSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURf
U1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCo+
KGltcGwpLT5zaGlmdEtleSgpOwotfQotCi1ib29sIEtleWJvYXJkRXZlbnQ6OmFsdEtleSgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246
OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50SW1wbCo+KGltcGwpLT5hbHRLZXkoKTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50OjptZXRh
S2V5KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4
Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnRJbXBsKj4oaW1wbCktPm1ldGFLZXkoKTsKLX0KLQotYm9vbCBLZXlib2FyZEV2
ZW50OjphbHRHcmFwaEtleSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4
Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCo+KGltcGwpLT5hbHRHcmFwaEtleSgpOwotfQot
Ci12b2lkIEtleWJvYXJkRXZlbnQ6OmluaXRLZXlib2FyZEV2ZW50KGNvbnN0IERPTVN0cmluZyAm
dHlwZUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBj
YW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEFic3RyYWN0VmlldyAmdmlld0FyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFy
ZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5
QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0
S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFs
dEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBt
ZXRhS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFsdEdyYXBoS2V5QXJnKQotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24o
RE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBzdGF0aWNfY2FzdDxLZXli
b2FyZEV2ZW50SW1wbCo+KGltcGwpLT5pbml0S2V5Ym9hcmRFdmVudCh0eXBlQXJnLGNhbkJ1YmJs
ZUFyZywKLQljYW5jZWxhYmxlQXJnLHZpZXdBcmcuaGFuZGxlKCksa2V5SWRlbnRpZmllckFyZyxr
ZXlMb2NhdGlvbkFyZyxjdHJsS2V5QXJnLGFsdEtleUFyZywKLSAgICAgICAgc2hpZnRLZXlBcmcs
bWV0YUtleUFyZyxhbHRHcmFwaEtleUFyZyk7Ci19Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZQpJbmRleDoga2h0bWwvZG9tL2Rv
bTJfZXZlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZG9tL2RvbTJfZXZlbnRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtcCAtdSAt
cjEuMjAga2h0bWwvZG9tL2RvbTJfZXZlbnRzLmgKLS0tIGtodG1sL2RvbS9kb20yX2V2ZW50cy5o
CTE2IFNlcCAyMDA1IDIyOjQyOjAzIC0wMDAwCTEuMjAKKysrIGtodG1sL2RvbS9kb20yX2V2ZW50
cy5oCTI5IE5vdiAyMDA1IDEyOjQxOjI3IC0wMDAwCkBAIC0yNywzOSArMjcsMTQgQEAKICNpbmNs
dWRlIDxkb20vZG9tX21pc2MuaD4KICNpbmNsdWRlIDxkb20vZG9tX3N0cmluZy5oPgogCi0jaWYg
IUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotI2luY2x1ZGUgPGRvbS9kb21fbm9kZS5oPgotCi0j
ZW5kaWYKIAogbmFtZXNwYWNlIERPTSB7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQot
Ci1jbGFzcyBFdmVudDsKLWNsYXNzIEV2ZW50RXhjZXB0aW9uOwotY2xhc3MgVUlFdmVudDsKLWNs
YXNzIE1vdXNlRXZlbnQ7Ci1jbGFzcyBNdXRhdGlvbkV2ZW50OwotY2xhc3MgS2V5Ym9hcmRFdmVu
dDsKLWNsYXNzIEFic3RyYWN0VmlldzsKLQotY2xhc3MgVUlFdmVudEltcGw7Ci1jbGFzcyBNb3Vz
ZUV2ZW50SW1wbDsKLWNsYXNzIE11dGF0aW9uRXZlbnRJbXBsOwotY2xhc3MgS2V5Ym9hcmRFdmVu
dEltcGw7Ci0KLSNlbmRpZgogCiBjbGFzcyBFdmVudExpc3RlbmVySW1wbDsKIGNsYXNzIEV2ZW50
SW1wbDsKIAotI2lmIEtIVE1MX05PX0NQTFVTUExVU19ET00KIHR5cGVkZWYgRXZlbnRJbXBsICpF
dmVudExpc3RlbmVyRXZlbnQ7Ci0jZWxzZQotdHlwZWRlZiBFdmVudCAmRXZlbnRMaXN0ZW5lckV2
ZW50OwotI2VuZGlmCiAKIC8qKgogICogSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgpAQCAtMTI5
LDI1ICsxMDQsOSBAQCBwcm90ZWN0ZWQ6CiAgKi8KIGNsYXNzIEV2ZW50IHsKIAotI2lmICFLSFRN
TF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICBmcmllbmQgY2xhc3MgRG9jdW1lbnQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIE5vZGVJbXBsOwotICAgIGZyaWVuZCBjbGFzcyBEb2N1bWVudEltcGw7Ci0KLSNl
bmRpZgogCiBwdWJsaWM6CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgRXZl
bnQoKTsKLSAgICBFdmVudChjb25zdCBFdmVudCAmb3RoZXIpOwotICAgIHZpcnR1YWwgfkV2ZW50
KCk7Ci0KLSAgICBFdmVudCAmIG9wZXJhdG9yID0gKGNvbnN0IEV2ZW50ICZvdGhlcik7Ci0KLSNl
bmRpZgogCiAgICAgLyoqCiAgICAgICogQW4gaW50ZWdlciBpbmRpY2F0aW5nIHdoaWNoIHBoYXNl
IG9mIGV2ZW50IGZsb3cgaXMgYmVpbmcgcHJvY2Vzc2VkLgpAQCAtMTY2LDEzMCArMTI1LDYgQEAg
cHVibGljOgogCUJVQkJMSU5HX1BIQVNFID0gMwogICAgIH07CiAKLSNpZiAhS0hUTUxfTk9fQ1BM
VVNQTFVTX0RPTQotCi0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhlIGV2ZW50IChjYXNl
LWluc2Vuc2l0aXZlKS4gVGhlIG5hbWUgbXVzdCBiZSBhbiBYTUwgbmFtZS4KLSAgICAgKgotICAg
ICAqLwotICAgIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2Vk
IHRvIGluZGljYXRlIHRoZSBFdmVudFRhcmdldCB0byB3aGljaCB0aGUgZXZlbnQgd2FzIG9yaWdp
bmFsbHkKLSAgICAgKiBkaXNwYXRjaGVkLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSB0YXJn
ZXQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgdGhlIEV2ZW50
VGFyZ2V0IHdob3NlIEV2ZW50TGlzdGVuZXJzIGFyZSBjdXJyZW50bHkKLSAgICAgKiBiZWluZyBw
cm9jZXNzZWQuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBkdXJpbmcgY2FwdHVyaW5nIGFu
ZAotICAgICAqIGJ1YmJsaW5nLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBjdXJyZW50VGFy
Z2V0KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGluZGljYXRlIHdoaWNoIHBo
YXNlIG9mIGV2ZW50IGZsb3cgaXMgY3VycmVudGx5IGJlaW5nIGV2YWx1YXRlZC4KLSAgICAgKgot
ICAgICAqLwotICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UoKSBjb25zdDsKLQotICAgIC8q
KgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYW4gZXZlbnQgaXMgYSBi
dWJibGluZyBldmVudC4gSWYgdGhlCi0gICAgICogZXZlbnQgY2FuIGJ1YmJsZSB0aGUgdmFsdWUg
aXMgdHJ1ZSwgZWxzZSB0aGUgdmFsdWUgaXMgZmFsc2UuCi0gICAgICoKLSAgICAgKi8KLSAgICBi
b29sIGJ1YmJsZXMoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUg
d2hldGhlciBvciBub3QgYW4gZXZlbnQgY2FuIGhhdmUgaXRzIGRlZmF1bHQgYWN0aW9uCi0gICAg
ICogcHJldmVudGVkLiBJZiB0aGUgZGVmYXVsdCBhY3Rpb24gY2FuIGJlIHByZXZlbnRlZCB0aGUg
dmFsdWUgaXMgdHJ1ZSwKLSAgICAgKiBlbHNlIHRoZSB2YWx1ZSBpcyBmYWxzZS4KLSAgICAgKgot
ICAgICAqLwotICAgIGJvb2wgY2FuY2VsYWJsZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
VXNlZCB0byBzcGVjaWZ5IHRoZSB0aW1lIChpbiBtaWxsaXNlY29uZHMgcmVsYXRpdmUgdG8gdGhl
IGVwb2NoKSBhdAotICAgICAqIHdoaWNoIHRoZSBldmVudCB3YXMgY3JlYXRlZC4gRHVlIHRvIHRo
ZSBmYWN0IHRoYXQgc29tZSBzeXN0ZW1zIG1heSBub3QKLSAgICAgKiBwcm92aWRlIHRoaXMgaW5m
b3JtYXRpb24gdGhlIHZhbHVlIG9mIHRpbWVTdGFtcCBtYXkgYmUgbm90IGF2YWlsYWJsZSBmb3IK
LSAgICAgKiBhbGwgZXZlbnRzLiBXaGVuIG5vdCBhdmFpbGFibGUsIGEgdmFsdWUgb2YgMCB3aWxs
IGJlIHJldHVybmVkLiBFeGFtcGxlcwotICAgICAqIG9mIGVwb2NoIHRpbWUgYXJlIHRoZSB0aW1l
IG9mIHRoZSBzeXN0ZW0gc3RhcnQgb3IgMDowOjAgVVRDIDFzdCBKYW51YXJ5IDE5NzAuCi0gICAg
ICoKLSAgICAgKi8KLSAgICBET01UaW1lU3RhbXAgdGltZVN0YW1wKCkgY29uc3Q7Ci0KLSAgICAv
KioKLSAgICAgKiBUaGUgc3RvcFByb3BhZ2F0aW9uIG1ldGhvZCBpcyB1c2VkIHByZXZlbnQgZnVy
dGhlciBwcm9wYWdhdGlvbiBvZiBhbgotICAgICAqIGV2ZW50IGR1cmluZyBldmVudCBmbG93LiBJ
ZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgYW55IEV2ZW50TGlzdGVuZXIKLSAgICAgKiB0aGUg
ZXZlbnQgd2lsbCBjZWFzZSBwcm9wYWdhdGluZyB0aHJvdWdoIHRoZSB0cmVlLiBUaGUgZXZlbnQg
d2lsbAotICAgICAqIGNvbXBsZXRlIGRpc3BhdGNoIHRvIGFsbCBsaXN0ZW5lcnMgb24gdGhlIGN1
cnJlbnQgRXZlbnRUYXJnZXQgYmVmb3JlCi0gICAgICogZXZlbnQgZmxvdyBzdG9wcy4gVGhpcyBt
ZXRob2QgbWF5IGJlIHVzZWQgZHVyaW5nIGFueSBzdGFnZSBvZiBldmVudCBmbG93LgotICAgICAq
Ci0gICAgICovCi0gICAgdm9pZCBzdG9wUHJvcGFnYXRpb24oKTsKLQotICAgIC8qKgotICAgICAq
IElmIGFuIGV2ZW50IGlzIGNhbmNlbGFibGUsIHRoZSBwcmV2ZW50RGVmYXVsdCBtZXRob2QgaXMg
dXNlZCB0byBzaWduaWZ5Ci0gICAgICogdGhhdCB0aGUgZXZlbnQgaXMgdG8gYmUgY2FuY2VsZWQs
IG1lYW5pbmcgYW55IGRlZmF1bHQgYWN0aW9uIG5vcm1hbGx5Ci0gICAgICogdGFrZW4gYnkgdGhl
IGltcGxlbWVudGF0aW9uIGFzIGEgcmVzdWx0IG9mIHRoZSBldmVudCB3aWxsIG5vdCBvY2N1ci4g
SWYsCi0gICAgICogZHVyaW5nIGFueSBzdGFnZSBvZiBldmVudCBmbG93LCB0aGUgcHJldmVudERl
ZmF1bHQgbWV0aG9kIGlzIGNhbGxlZCB0aGUKLSAgICAgKiBldmVudCBpcyBjYW5jZWxlZC4gQW55
IGRlZmF1bHQgYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgd2lsbCBub3QKLSAgICAg
KiBvY2N1ci4gQ2FsbGluZyB0aGlzIG1ldGhvZCBmb3IgYSBub24tY2FuY2VsYWJsZSBldmVudCBo
YXMgbm8gZWZmZWN0LgotICAgICAqIE9uY2UgcHJldmVudERlZmF1bHQgaGFzIGJlZW4gY2FsbGVk
IGl0IHdpbGwgcmVtYWluIGluIGVmZmVjdCB0aHJvdWdob3V0Ci0gICAgICogdGhlIHJlbWFpbmRl
ciBvZiB0aGUgZXZlbnQncyBwcm9wYWdhdGlvbi4gVGhpcyBtZXRob2QgbWF5IGJlIHVzZWQgZHVy
aW5nCi0gICAgICogYW55IHN0YWdlIG9mIGV2ZW50IGZsb3cuCi0gICAgICoKLSAgICAgKi8KLSAg
ICB2b2lkIHByZXZlbnREZWZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaW5pdEV2ZW50
IG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHZhbHVlIG9mIGFuIEV2ZW50IGNyZWF0
ZWQKLSAgICAgKiB0aHJvdWdoIHRoZSBEb2N1bWVudEV2ZW50IGludGVyZmFjZS4gVGhpcyBtZXRo
b2QgbWF5IG9ubHkgYmUgY2FsbGVkCi0gICAgICogYmVmb3JlIHRoZSBFdmVudCBoYXMgYmVlbiBk
aXNwYXRjaGVkIHZpYSB0aGUgZGlzcGF0Y2hFdmVudCBtZXRob2QsCi0gICAgICogdGhvdWdoIGl0
IG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRoYXQgcGhhc2UgaWYgbmVjZXNz
YXJ5LgotICAgICAqIElmIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0aGUgZmluYWwgaW52b2NhdGlv
biB0YWtlcyBwcmVjZWRlbmNlLiBJZgotICAgICAqIGNhbGxlZCBmcm9tIGEgc3ViY2xhc3Mgb2Yg
RXZlbnQgaW50ZXJmYWNlIG9ubHkgdGhlIHZhbHVlcyBzcGVjaWZpZWQgaW4KLSAgICAgKiB0aGUg
aW5pdEV2ZW50IG1ldGhvZCBhcmUgbW9kaWZpZWQsIGFsbCBvdGhlciBhdHRyaWJ1dGVzIGFyZSBs
ZWZ0Ci0gICAgICogdW5jaGFuZ2VkLgotICAgICAqCi0gICAgICogQHBhcmFtIGV2ZW50VHlwZUFy
ZyBTcGVjaWZpZXMgdGhlIGV2ZW50IHR5cGUuIFRoaXMgdHlwZSBtYXkgYmUgYW55IGV2ZW50Ci0g
ICAgICogdHlwZSBjdXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIHNwZWNpZmljYXRpb24gb3IgYSBu
ZXcgZXZlbnQgdHlwZS4uIFRoZQotICAgICAqIHN0cmluZyBtdXN0IGJlIGFuIFhNTCBuYW1lLgot
ICAgICAqCi0gICAgICogQW55IG5ldyBldmVudCB0eXBlIG11c3Qgbm90IGJlZ2luIHdpdGggYW55
IHVwcGVyLCBsb3dlciwgb3IgbWl4ZWQgY2FzZQotICAgICAqIHZlcnNpb24gb2YgdGhlIHN0cmlu
ZyAiRE9NIi4gVGhpcyBwcmVmaXggaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBET00KLSAgICAgKiBl
dmVudCBzZXRzLiBJdCBpcyBhbHNvIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgdGhpcmQgcGFy
dGllcyBhZGRpbmcKLSAgICAgKiB0aGVpciBvd24gZXZlbnRzIHVzZSB0aGVpciBvd24gcHJlZml4
IHRvIGF2b2lkIGNvbmZ1c2lvbiBhbmQgbGVzc2VuIHRoZQotICAgICAqIHByb2JhYmlsaXR5IG9m
IGNvbmZsaWN0cyB3aXRoIG90aGVyIG5ldyBldmVudHMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0g
Y2FuQnViYmxlQXJnIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgZXZlbnQgY2FuIGJ1YmJs
ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjYW5jZWxhYmxlQXJnIFNwZWNpZmllcyB3aGV0aGVy
IG9yIG5vdCB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBjYW4gYmUgcHJldmVudGVkLgotICAg
ICAqCi0gICAgICovCi0gICAgdm9pZCBpbml0RXZlbnQoY29uc3QgRE9NU3RyaW5nICZldmVudFR5
cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpOwotCi0gICAgLyoq
Ci0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwot
ICAgIEV2ZW50SW1wbCAqaGFuZGxlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdDsK
LQotICAgIC8qIE5vbnN0YW5kYXJkIGV4dGVuc2lvbnMgbmVlZGVkIHRvIHN1cHBvcnQgd2lkZWx5
IHVzZWQgSlMgZXZlbnQgcHJvcGVydGllcyAqLwotICAgIHZvaWQgc2V0Q2FuY2VsQnViYmxlKGJv
b2wgY2FuY2VsKTsKLSAgICB2b2lkIHNldERlZmF1bHRQcmV2ZW50ZWQoYm9vbCByZXR1cm5WYWx1
ZSk7Ci0gICAgYm9vbCBnZXRDYW5jZWxCdWJibGUoKSBjb25zdDsKLSAgICBib29sIGRlZmF1bHRQ
cmV2ZW50ZWQoKSBjb25zdDsKLQotICAgIEV2ZW50KEV2ZW50SW1wbCAqaSk7Ci0KLXByb3RlY3Rl
ZDoKLSAgICBFdmVudEltcGwgKmltcGw7Ci0KLSNlbmRpZgogCiB9OwogCkBAIC0zMDUsMTQgKzE0
MCw2IEBAIGNsYXNzIEV2ZW50RXhjZXB0aW9uCiB7CiBwdWJsaWM6CiAKLSNpZiAhS0hUTUxfTk9f
Q1BMVVNQTFVTX0RPTQotCi0gICAgRXZlbnRFeGNlcHRpb24odW5zaWduZWQgc2hvcnQgX2NvZGUp
OwotICAgIEV2ZW50RXhjZXB0aW9uKGNvbnN0IEV2ZW50RXhjZXB0aW9uICZvdGhlcik7Ci0gICAg
RXZlbnRFeGNlcHRpb24gJiBvcGVyYXRvciA9IChjb25zdCBFdmVudEV4Y2VwdGlvbiAmb3RoZXIp
OwotICAgIHZpcnR1YWwgfkV2ZW50RXhjZXB0aW9uKCkge30KLQotI2VuZGlmCiAKICAgICAvKioK
ICAgICAgKiBBbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgZXJyb3IgZ2VuZXJhdGVk
LgpAQCAtMzI5LDI3NyArMTU2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgX0VYQ0VQVElPTl9NQVgg
ICAgICAgICAgICAgICAgID0gMzk5OQogICAgIH07CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVT
X0RPTQotCi0gICAgdW5zaWduZWQgc2hvcnQgY29kZTsKLQotI2VuZGlmCiAKIH07CiAKIAotI2lm
ICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLQotLyoqCi0gKiBJbnRyb2R1Y2VkIGluIERPTSBM
ZXZlbCAyCi0gKgotICogVGhlIFVJRXZlbnQgaW50ZXJmYWNlIHByb3ZpZGVzIHNwZWNpZmljIGNv
bnRleHR1YWwgaW5mb3JtYXRpb24gYXNzb2NpYXRlZAotICogd2l0aCBVc2VyIEludGVyZmFjZSBl
dmVudHMuCi0gKgotICovCi1jbGFzcyBVSUV2ZW50IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoK
LSAgICBVSUV2ZW50KCk7Ci0gICAgVUlFdmVudChjb25zdCBVSUV2ZW50ICZvdGhlcik7Ci0gICAg
VUlFdmVudChjb25zdCBFdmVudCAmb3RoZXIpOwotICAgIFVJRXZlbnQgJiBvcGVyYXRvciA9IChj
b25zdCBVSUV2ZW50ICZvdGhlcik7Ci0gICAgVUlFdmVudCAmIG9wZXJhdG9yID0gKGNvbnN0IEV2
ZW50ICZvdGhlcik7Ci0gICAgdmlydHVhbCB+VUlFdmVudCgpOwotCi0gICAgLyoqCi0gICAgICog
VGhlIHZpZXcgYXR0cmlidXRlIGlkZW50aWZpZXMgdGhlIEFic3RyYWN0VmlldyBmcm9tIHdoaWNo
IHRoZSBldmVudCB3YXMKLSAgICAgKiBnZW5lcmF0ZWQuCi0gICAgICoKLSAgICAgKi8KLSAgICBB
YnN0cmFjdFZpZXcgdmlldygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogU3BlY2lmaWVzIHNv
bWUgZGV0YWlsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBFdmVudCwgZGVwZW5kaW5nIG9uIHRoZSB0
eXBlCi0gICAgICogb2YgZXZlbnQuCi0gICAgICoKLSAgICAgKi8KLSAgICBpbnQgZGV0YWlsKCkg
Y29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBOb24tc3RhbmRhcmQgZXh0ZW5zaW9uIHRvIHN1cHBv
cnQgSUUtc3R5bGUga2V5Q29kZSBldmVudCBwcm9wZXJ0eS4KLSAgICAgKgotICAgICAqLwotICAg
IGludCBrZXlDb2RlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBOb24tc3RhbmRhcmQgZXh0
ZW5zaW9uIHRvIHN1cHBvcnQgSUUtc3R5bGUgY2hhckNvZGUgZXZlbnQgcHJvcGVydHkuCi0gICAg
ICoKLSAgICAgKi8KLSAgICBpbnQgY2hhckNvZGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAq
IE5vbi1zdGFuZGFyZCBleHRlbnNpb25zIHRvIHN1cHBvcnQgTmV0c2NhcGUtc3R5bGUgcGFnZVgg
YW5kIHBhZ2VZIGV2ZW50IHByb3BlcnRpZXMuCi0gICAgICoKLSAgICAgKi8KLSAgICBpbnQgcGFn
ZVgoKSBjb25zdDsKLSAgICBpbnQgcGFnZVkoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIE5v
bi1zdGFuZGFyZCBleHRlbnNpb25zIHRvIHN1cHBvcnQgTmV0c2NhcGUtc3R5bGUgbGF5ZXJYIGFu
ZCBsYXllclkgZXZlbnQgcHJvcGVydGllcy4KLSAgICAgKgotICAgICAqLwotICAgIGludCBsYXll
clgoKSBjb25zdDsKLSAgICBpbnQgbGF5ZXJZKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBO
b24tc3RhbmRhcmQgZXh0ZW5zaW9uIHRvIHN1cHBvcnQgTmV0c2NhcGUtc3R5bGUgIndoaWNoIiBl
dmVudCBwcm9wZXJ0eS4KLSAgICAgKgotICAgICAqLwotICAgIGludCB3aGljaCgpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogVGhlIGluaXRVSUV2ZW50IG1ldGhvZCBpcyB1c2VkIHRvIGluaXRp
YWxpemUgdGhlIHZhbHVlIG9mIGEgVUlFdmVudAotICAgICAqIGNyZWF0ZWQgdGhyb3VnaCB0aGUg
RG9jdW1lbnRFdmVudCBpbnRlcmZhY2UuIFRoaXMgbWV0aG9kIG1heSBvbmx5IGJlCi0gICAgICog
Y2FsbGVkIGJlZm9yZSB0aGUgVUlFdmVudCBoYXMgYmVlbiBkaXNwYXRjaGVkIHZpYSB0aGUgZGlz
cGF0Y2hFdmVudAotICAgICAqIG1ldGhvZCwgdGhvdWdoIGl0IG1heSBiZSBjYWxsZWQgbXVsdGlw
bGUgdGltZXMgZHVyaW5nIHRoYXQgcGhhc2UgaWYKLSAgICAgKiBuZWNlc3NhcnkuIElmIGNhbGxl
ZCBtdWx0aXBsZSB0aW1lcywgdGhlIGZpbmFsIGludm9jYXRpb24gdGFrZXMKLSAgICAgKiBwcmVj
ZWRlbmNlLgotICAgICAqCi0gICAgICogQHBhcmFtIHR5cGVBcmcgU3BlY2lmaWVzIHRoZSBldmVu
dCB0eXBlLgotICAgICAqCi0gICAgICogQHBhcmFtIGNhbkJ1YmJsZUFyZyBTcGVjaWZpZXMgd2hl
dGhlciBvciBub3QgdGhlIGV2ZW50IGNhbiBidWJibGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0g
Y2FuY2VsYWJsZUFyZyBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIGV2ZW50J3MgZGVmYXVs
dCBhY3Rpb24KLSAgICAgKiBjYW4gYmUgcHJldmVudGVkLgotICAgICAqCi0gICAgICogQHBhcmFt
IHZpZXdBcmcgU3BlY2lmaWVzIHRoZSBFdmVudCdzIEFic3RyYWN0Vmlldy4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSBkZXRhaWxBcmcgU3BlY2lmaWVzIHRoZSBFdmVudCdzIGRldGFpbC4KLSAgICAg
KgotICAgICAqLwotICAgIHZvaWQgaW5pdFVJRXZlbnQoY29uc3QgRE9NU3RyaW5nICZ0eXBlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBYnN0cmFjdFZpZXcgJnZpZXdBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnKTsKLQotICAg
IFVJRXZlbnQoVUlFdmVudEltcGwgKmltcGwpOwotfTsKLQotCi0KLQotLyoqCi0gKiBJbnRyb2R1
Y2VkIGluIERPTSBMZXZlbCAyCi0gKgotICogVGhlIE1vdXNlRXZlbnQgaW50ZXJmYWNlIHByb3Zp
ZGVzIHNwZWNpZmljIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gYXNzb2NpYXRlZAotICogd2l0aCBN
b3VzZSBldmVudHMuCi0gKgotICogVGhlIGRldGFpbCBhdHRyaWJ1dGUgaW5oZXJpdGVkIGZyb20g
VUlFdmVudCBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiB0aW1lcyBhCi0gKiBtb3VzZSBidXR0b24g
aGFzIGJlZW4gcHJlc3NlZCBhbmQgcmVsZWFzZWQgb3ZlciB0aGUgc2FtZSBzY3JlZW4gbG9jYXRp
b24KLSAqIGR1cmluZyBhIHVzZXIgYWN0aW9uLiBUaGUgYXR0cmlidXRlIHZhbHVlIGlzIDEgd2hl
biB0aGUgdXNlciBiZWdpbnMgdGhpcwotICogYWN0aW9uIGFuZCBpbmNyZW1lbnRzIGJ5IDEgZm9y
IGVhY2ggZnVsbCBzZXF1ZW5jZSBvZiBwcmVzc2luZyBhbmQgcmVsZWFzaW5nLgotICogSWYgdGhl
IHVzZXIgbW92ZXMgdGhlIG1vdXNlIGJldHdlZW4gdGhlIG1vdXNlZG93biBhbmQgbW91c2V1cCB0
aGUgdmFsdWUgd2lsbAotICogYmUgc2V0IHRvIDAsIGluZGljYXRpbmcgdGhhdCBubyBjbGljayBp
cyBvY2N1cnJpbmcuCi0gKgotICogSW4gdGhlIGNhc2Ugb2YgbmVzdGVkIGVsZW1lbnRzIG1vdXNl
IGV2ZW50cyBhcmUgYWx3YXlzIHRhcmdldGVkIGF0IHRoZSBtb3N0Ci0gKiBkZWVwbHkgbmVzdGVk
IGVsZW1lbnQuIEFuY2VzdG9ycyBvZiB0aGUgdGFyZ2V0ZWQgZWxlbWVudCBtYXkgdXNlIGJ1YmJs
aW5nIHRvCi0gKiBvYnRhaW4gbm90aWZpY2F0aW9uIG9mIG1vdXNlIGV2ZW50cyB3aGljaCBvY2N1
ciB3aXRoaW4gaXRzIGRlc2NlbmRlbnQgZWxlbWVudHMuCi0gKgotICovCi1jbGFzcyBNb3VzZUV2
ZW50IDogcHVibGljIFVJRXZlbnQgewotcHVibGljOgotICAgIE1vdXNlRXZlbnQoKTsKLSAgICBN
b3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnQgJm90aGVyKTsKLSAgICBNb3VzZUV2ZW50KGNvbnN0
IEV2ZW50ICZvdGhlcik7Ci0gICAgTW91c2VFdmVudCAmIG9wZXJhdG9yID0gKGNvbnN0IE1vdXNl
RXZlbnQgJm90aGVyKTsKLSAgICBNb3VzZUV2ZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgRXZlbnQg
Jm90aGVyKTsKLSAgICB2aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBU
aGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIGF0IHdoaWNoIHRoZSBldmVudCBvY2N1cnJlZCByZWxh
dGl2ZSB0byB0aGUKLSAgICAgKiBvcmlnaW4gb2YgdGhlIHNjcmVlbiBjb29yZGluYXRlIHN5c3Rl
bS4KLSAgICAgKgotICAgICAqLwotICAgIGludCBzY3JlZW5YKCkgY29uc3Q7Ci0KLSAgICAvKioK
LSAgICAgKiBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSBhdCB3aGljaCB0aGUgZXZlbnQgb2NjdXJy
ZWQgcmVsYXRpdmUgdG8gdGhlCi0gICAgICogb3JpZ2luIG9mIHRoZSBzY3JlZW4gY29vcmRpbmF0
ZSBzeXN0ZW0uCi0gICAgICoKLSAgICAgKi8KLSAgICBpbnQgc2NyZWVuWSgpIGNvbnN0OwotCi0g
ICAgLyoqCi0gICAgICogVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSBhdCB3aGljaCB0aGUgZXZl
bnQgb2NjdXJyZWQgcmVsYXRpdmUgdG8gdGhlCi0gICAgICogRE9NIGltcGxlbWVudGF0aW9uJ3Mg
Y2xpZW50IGFyZWEuCi0gICAgICoKLSAgICAgKi8KLSAgICBpbnQgY2xpZW50WCgpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgYXQgd2hpY2ggdGhlIGV2
ZW50IG9jY3VycmVkIHJlbGF0aXZlIHRvIHRoZSBET00KLSAgICAgKiBpbXBsZW1lbnRhdGlvbidz
IGNsaWVudCBhcmVhLgotICAgICAqCi0gICAgICovCi0gICAgaW50IGNsaWVudFkoKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgJ2N0cmwnIGtl
eSB3YXMgZGVwcmVzc2VkIGR1cmluZyB0aGUgZmlyaW5nCi0gICAgICogb2YgdGhlIGV2ZW50Lgot
ICAgICAqLwotICAgIGJvb2wgY3RybEtleSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNl
ZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSAnc2hpZnQnIGtleSB3YXMgZGVwcmVzc2VkIGR1cmlu
ZyB0aGUgZmlyaW5nCi0gICAgICogb2YgdGhlIGV2ZW50LgotICAgICAqCi0gICAgICovCi0gICAg
Ym9vbCBzaGlmdEtleSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0
ZSB3aGV0aGVyIHRoZSAnYWx0JyBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcgdGhlIGZpcmluZwot
ICAgICAqIG9mIHRoZSBldmVudC4gT24gc29tZSBwbGF0Zm9ybXMgdGhpcyBrZXkgbWF5IG1hcCB0
byBhbiBhbHRlcm5hdGl2ZSBrZXkKLSAgICAgKiBuYW1lLgotICAgICAqCi0gICAgICovCi0gICAg
Ym9vbCBhbHRLZXkoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUg
d2hldGhlciB0aGUgJ21ldGEnIGtleSB3YXMgZGVwcmVzc2VkIGR1cmluZyB0aGUgZmlyaW5nCi0g
ICAgICogb2YgdGhlIGV2ZW50LiBPbiBzb21lIHBsYXRmb3JtcyB0aGlzIGtleSBtYXkgbWFwIHRv
IGFuIGFsdGVybmF0aXZlIGtleQotICAgICAqIG5hbWUuCi0gICAgICoKLSAgICAgKi8KLSAgICBi
b29sIG1ldGFLZXkoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIER1cmluZyBtb3VzZSBldmVu
dHMgY2F1c2VkIGJ5IHRoZSBkZXByZXNzaW9uIG9yIHJlbGVhc2Ugb2YgYSBtb3VzZQotICAgICAq
IGJ1dHRvbiwgYnV0dG9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggbW91c2UgYnV0dG9uIGNo
YW5nZWQgc3RhdGUuIFRoZQotICAgICAqIHZhbHVlcyBmb3IgYnV0dG9uIHJhbmdlIGZyb20gemVy
byB0byBpbmRpY2F0ZSB0aGUgbGVmdCBidXR0b24gb2YgdGhlCi0gICAgICogbW91c2UsIG9uZSB0
byBpbmRpY2F0ZSB0aGUgbWlkZGxlIGJ1dHRvbiBpZiBwcmVzZW50LCBhbmQgdHdvIHRvIGluZGlj
YXRlCi0gICAgICogdGhlIHJpZ2h0IGJ1dHRvbi4gRm9yIG1pY2UgY29uZmlndXJlZCBmb3IgbGVm
dCBoYW5kZWQgdXNlIGluIHdoaWNoIHRoZQotICAgICAqIGJ1dHRvbiBhY3Rpb25zIGFyZSByZXZl
cnNlZCB0aGUgdmFsdWVzIGFyZSBpbnN0ZWFkIHJlYWQgZnJvbSByaWdodCB0bwotICAgICAqIGxl
ZnQuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24oKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaWRlbnRpZnkgYSBzZWNvbmRhcnkgRXZlbnRUYXJn
ZXQgcmVsYXRlZCB0byBhIFVJIGV2ZW50LgotICAgICAqIEN1cnJlbnRseSB0aGlzIGF0dHJpYnV0
ZSBpcyB1c2VkIHdpdGggdGhlIG1vdXNlb3ZlciBldmVudCB0byBpbmRpY2F0ZQotICAgICAqIHRo
ZSBFdmVudFRhcmdldCB3aGljaCB0aGUgcG9pbnRpbmcgZGV2aWNlIGV4aXRlZCBhbmQgd2l0aCB0
aGUgbW91c2VvdXQKLSAgICAgKiBldmVudCB0byBpbmRpY2F0ZSB0aGUgRXZlbnRUYXJnZXQgd2hp
Y2ggdGhlIHBvaW50aW5nIGRldmljZSBlbnRlcmVkLgotICAgICAqCi0gICAgICovCi0gICAgTm9k
ZSByZWxhdGVkVGFyZ2V0KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaW5pdE1vdXNl
RXZlbnQgbWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdmFsdWUgb2YgYQotICAgICAq
IE1vdXNlRXZlbnQgY3JlYXRlZCB0aHJvdWdoIHRoZSBEb2N1bWVudEV2ZW50IGludGVyZmFjZS4g
VGhpcyBtZXRob2QgbWF5Ci0gICAgICogb25seSBiZSBjYWxsZWQgYmVmb3JlIHRoZSBNb3VzZUV2
ZW50IGhhcyBiZWVuIGRpc3BhdGNoZWQgdmlhIHRoZQotICAgICAqIGRpc3BhdGNoRXZlbnQgbWV0
aG9kLCB0aG91Z2ggaXQgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGhhdAot
ICAgICAqIHBoYXNlIGlmIG5lY2Vzc2FyeS4gSWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCB0aGUg
ZmluYWwgaW52b2NhdGlvbiB0YWtlcwotICAgICAqIHByZWNlZGVuY2UuIFBhcmFtZXRlcnMKLSAg
ICAgKgotICAgICAqIEBwYXJhbSB0eXBlQXJnIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZS4KLSAg
ICAgKgotICAgICAqIEBwYXJhbSBjYW5CdWJibGVBcmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90
IHRoZSBldmVudCBjYW4gYnViYmxlLgotICAgICAqCi0gICAgICogQHBhcmFtIGNhbmNlbGFibGVB
cmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBldmVudCdzIGRlZmF1bHQgYWN0aW9uIGNh
biBiZSBwcmV2ZW50ZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmlld0FyZyBTcGVjaWZpZXMg
dGhlIEV2ZW50J3MgQWJzdHJhY3RWaWV3LgotICAgICAqCi0gICAgICogQHBhcmFtIGRldGFpbEFy
ZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3MgbW91c2UgY2xpY2sgY291bnQuCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gc2NyZWVuWEFyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3Mgc2NyZWVuIHggY29vcmRp
bmF0ZQotICAgICAqCi0gICAgICogQHBhcmFtIHNjcmVlbllBcmcgU3BlY2lmaWVzIHRoZSBFdmVu
dCdzIHNjcmVlbiB5IGNvb3JkaW5hdGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBjbGllbnRYQXJn
IFNwZWNpZmllcyB0aGUgRXZlbnQncyBjbGllbnQgeCBjb29yZGluYXRlCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gY2xpZW50WUFyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3MgY2xpZW50IHkgY29vcmRp
bmF0ZQotICAgICAqCi0gICAgICogQHBhcmFtIGN0cmxLZXlBcmcgU3BlY2lmaWVzIHdoZXRoZXIg
b3Igbm90IGNvbnRyb2wga2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRoZSBFdmVudC4KLSAgICAg
KgotICAgICAqIEBwYXJhbSBhbHRLZXlBcmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGFsdCBr
ZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcgdGhlIEV2ZW50LgotICAgICAqCi0gICAgICogQHBhcmFt
IHNoaWZ0S2V5QXJnIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBzaGlmdCBrZXkgd2FzIGRlcHJl
c3NlZCBkdXJpbmcgdGhlIEV2ZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIG1ldGFLZXlBcmcg
U3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IG1ldGEga2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRo
ZSBFdmVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBidXR0b25BcmcgU3BlY2lmaWVzIHRoZSBF
dmVudCdzIG1vdXNlIGJ1dHRvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSByZWxhdGVkVGFyZ2V0
QXJnIFNwZWNpZmllcyB0aGUgRXZlbnQncyByZWxhdGVkIEV2ZW50VGFyZ2V0LgotICAgICAqCi0g
ICAgICovCi0gICAgdm9pZCBpbml0TW91c2VFdmVudChjb25zdCBET01TdHJpbmcgJnR5cGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFic3RyYWN0VmlldyAm
dmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IE5vZGUgJnJlbGF0ZWRUYXJnZXRBcmcpOwotcHJvdGVj
dGVkOgotICAgIE1vdXNlRXZlbnQoTW91c2VFdmVudEltcGwgKmltcGwpOwotfTsKLQotCi0jZW5k
aWYKIAogCiAvKioKQEAgLTYxMiwxNiArMTcyLDYgQEAgcHJvdGVjdGVkOgogY2xhc3MgTXV0YXRp
b25FdmVudCA6IHB1YmxpYyBFdmVudCB7CiBwdWJsaWM6CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQ
TFVTX0RPTQotCi0gICAgTXV0YXRpb25FdmVudCgpOwotICAgIE11dGF0aW9uRXZlbnQoY29uc3Qg
TXV0YXRpb25FdmVudCAmb3RoZXIpOwotICAgIE11dGF0aW9uRXZlbnQoY29uc3QgRXZlbnQgJm90
aGVyKTsKLSAgICBNdXRhdGlvbkV2ZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgTXV0YXRpb25FdmVu
dCAmb3RoZXIpOwotICAgIE11dGF0aW9uRXZlbnQgJiBvcGVyYXRvciA9IChjb25zdCBFdmVudCAm
b3RoZXIpOwotICAgIHZpcnR1YWwgfk11dGF0aW9uRXZlbnQoKTsKLQotI2VuZGlmCiAKICAgICAv
KioKICAgICAgKiBBbiBpbnRlZ2VyIGluZGljYXRpbmcgaW4gd2hpY2ggd2F5IHRoZSBBdHRyIHdh
cyBjaGFuZ2VkLgpAQCAtNjM5LDg3ICsxODksNiBAQCBwdWJsaWM6CiAJUkVNT1ZBTCA9IDMKICAg
ICB9OwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIC8qKgotICAgICAqIHJl
bGF0ZWROb2RlIGlzIHVzZWQgdG8gaWRlbnRpZnkgYSBzZWNvbmRhcnkgbm9kZSByZWxhdGVkIHRv
IGEgbXV0YXRpb24KLSAgICAgKiBldmVudC4gRm9yIGV4YW1wbGUsIGlmIGEgbXV0YXRpb24gZXZl
bnQgaXMgZGlzcGF0Y2hlZCB0byBhIG5vZGUKLSAgICAgKiBpbmRpY2F0aW5nIHRoYXQgaXRzIHBh
cmVudCBoYXMgY2hhbmdlZCwgdGhlIHJlbGF0ZWROb2RlIGlzIHRoZSBjaGFuZ2VkCi0gICAgICog
cGFyZW50LiBJZiBhbiBldmVudCBpcyBpbnN0ZWFkIGRpc3BhdGNoZWQgdG8gYSBzdWJ0cmVlIGlu
ZGljYXRpbmcgYSBub2RlCi0gICAgICogd2FzIGNoYW5nZWQgd2l0aGluIGl0LCB0aGUgcmVsYXRl
ZE5vZGUgaXMgdGhlIGNoYW5nZWQgbm9kZS4gSW4gdGhlIGNhc2UKLSAgICAgKiBvZiB0aGUgRE9N
QXR0ck1vZGlmaWVkIGV2ZW50IGl0IGluZGljYXRlcyB0aGUgQXR0ciBub2RlIHdoaWNoIHdhcwot
ICAgICAqIG1vZGlmaWVkLCBhZGRlZCwgb3IgcmVtb3ZlZC4KLSAgICAgKgotICAgICAqLwotICAg
IE5vZGUgcmVsYXRlZE5vZGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIHByZXZWYWx1ZSBp
bmRpY2F0ZXMgdGhlIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBBdHRyIG5vZGUgaW4KLSAgICAgKiBE
T01BdHRyTW9kaWZpZWQgZXZlbnRzLCBhbmQgb2YgdGhlIENoYXJhY3RlckRhdGEgbm9kZSBpbgot
ICAgICAqIERPTUNoYXJEYXRhTW9kaWZpZWQgZXZlbnRzLgotICAgICAqCi0gICAgICovCi0gICAg
RE9NU3RyaW5nIHByZXZWYWx1ZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogbmV3VmFsdWUg
aW5kaWNhdGVzIHRoZSBuZXcgdmFsdWUgb2YgdGhlIEF0dHIgbm9kZSBpbiBET01BdHRyTW9kaWZp
ZWQKLSAgICAgKiBldmVudHMsIGFuZCBvZiB0aGUgQ2hhcmFjdGVyRGF0YSBub2RlIGluIERPTUNo
YXJEYXRhTW9kaWZpZWQgZXZlbnRzLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIG5l
d1ZhbHVlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBhdHRyTmFtZSBpbmRpY2F0ZXMgdGhl
IG5hbWUgb2YgdGhlIGNoYW5nZWQgQXR0ciBub2RlIGluIGEKLSAgICAgKiBET01BdHRyTW9kaWZp
ZWQgZXZlbnQuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgYXR0ck5hbWUoKSBjb25z
dDsKLQotICAgIC8qKgotICAgICAqIGF0dHJDaGFuZ2UgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIGNo
YW5nZSB3aGljaCB0cmlnZ2VyZWQgdGhlCi0gICAgICogRE9NQXR0ck1vZGlmaWVkIGV2ZW50LiBU
aGUgdmFsdWVzIGNhbiBiZSBNT0RJRklDQVRJT04sIEFERElUSU9OLCBvcgotICAgICAqIFJFTU9W
QUwuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlKCkgY29u
c3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaW5pdE11dGF0aW9uRXZlbnQgbWV0aG9kIGlzIHVz
ZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdmFsdWUgb2YgYQotICAgICAqIE11dGF0aW9uRXZlbnQgY3Jl
YXRlZCB0aHJvdWdoIHRoZSBEb2N1bWVudEV2ZW50IGludGVyZmFjZS4gVGhpcyBtZXRob2QKLSAg
ICAgKiBtYXkgb25seSBiZSBjYWxsZWQgYmVmb3JlIHRoZSBNdXRhdGlvbkV2ZW50IGhhcyBiZWVu
IGRpc3BhdGNoZWQgdmlhIHRoZQotICAgICAqIGRpc3BhdGNoRXZlbnQgbWV0aG9kLCB0aG91Z2gg
aXQgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGhhdAotICAgICAqIHBoYXNl
IGlmIG5lY2Vzc2FyeS4gSWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCB0aGUgZmluYWwgaW52b2Nh
dGlvbiB0YWtlcwotICAgICAqIHByZWNlZGVuY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdHlw
ZUFyZyBTcGVjaWZpZXMgdGhlIGV2ZW50IHR5cGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2Fu
QnViYmxlQXJnIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgZXZlbnQgY2FuIGJ1YmJsZS4K
LSAgICAgKgotICAgICAqIEBwYXJhbSBjYW5jZWxhYmxlQXJnIFNwZWNpZmllcyB3aGV0aGVyIG9y
IG5vdCB0aGUgZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBjYW4gYmUgcHJldmVudGVkLgotICAgICAq
Ci0gICAgICogQHBhcmFtIHJlbGF0ZWROb2RlQXJnIFNwZWNpZmllcyB0aGUgRXZlbnQncyByZWxh
dGVkIE5vZGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJldlZhbHVlQXJnIFNwZWNpZmllcyB0
aGUgRXZlbnQncyBwcmV2VmFsdWUgYXR0cmlidXRlLiBUaGlzIHZhbHVlIG1heSBiZSBudWxsLgot
ICAgICAqCi0gICAgICogQHBhcmFtIG5ld1ZhbHVlQXJnIFNwZWNpZmllcyB0aGUgRXZlbnQncyBu
ZXdWYWx1ZSBhdHRyaWJ1dGUuIFRoaXMgdmFsdWUgbWF5IGJlIG51bGwuCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gYXR0ck5hbWVBcmcgU3BlY2lmaWVzIHRoZSBFdmVudCdzIGF0dHJOYW1lIGF0dHJp
YnV0ZS4gVGhpcyB2YWx1ZSBtYXkgYmUgbnVsbC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhdHRy
Q2hhbmdlQXJnIFNwZWNpZmllcyB0aGUgRXZlbnQncyBhdHRyQ2hhbmdlIGF0dHJpYnV0ZQotICAg
ICAqCi0gICAgICovCi0gICAgdm9pZCBpbml0TXV0YXRpb25FdmVudChjb25zdCBET01TdHJpbmcg
JnR5cGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNh
bkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE5vZGUgJnJlbGF0ZWROb2RlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZwcmV2VmFsdWVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJm5ld1ZhbHVlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZhdHRy
TmFtZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IGF0dHJDaGFuZ2VBcmcpOwotcHJvdGVjdGVkOgotICAgIE11dGF0aW9uRXZlbnQoTXV0
YXRpb25FdmVudEltcGwgKmltcGwpOwotCi0jZW5kaWYKIAogfTsKIApAQCAtNzMzLDI2ICsyMDIs
MTEgQEAgcHJvdGVjdGVkOgogICovCiBjbGFzcyBLZXlib2FyZEV2ZW50CiAKLSNpZiAhS0hUTUxf
Tk9fQ1BMVVNQTFVTX0RPTQotCi0gIDogcHVibGljIFVJRXZlbnQKLQotI2VuZGlmCiAKIHsKIAog
cHVibGljOgogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIEtleWJvYXJkRXZl
bnQoKTsKLSAgICBLZXlib2FyZEV2ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQgJm90aGVyKTsKLSAg
ICBLZXlib2FyZEV2ZW50KGNvbnN0IEV2ZW50ICZvdGhlcik7Ci0gICAgS2V5Ym9hcmRFdmVudCAm
IG9wZXJhdG9yID0gKGNvbnN0IEtleWJvYXJkRXZlbnQgJm90aGVyKTsKLSAgICBLZXlib2FyZEV2
ZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgRXZlbnQgJm90aGVyKTsKLSAgICB2aXJ0dWFsIH5LZXli
b2FyZEV2ZW50KCk7Ci0KLSNlbmRpZgogCiAgICAgLy8gS2V5TG9jYXRpb25Db2RlCiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIERPTV9LRVlfTE9DQVRJT05fU1RBTkRBUkQgICAgICA9IDB4MDA7
CkBAIC03NjEsNzMgKzIxNSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
RE9NX0tFWV9MT0NBVElPTl9OVU1QQUQgICAgICAgID0gMHgwMzsKICAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgRE9NX0tFWV9MT0NBVElPTl9VTktOT1dOICAgICAgID0gMHgwNDsKICAgICAKLSNp
ZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgLyoqCi0gICAgICogSG9sZHMgdGhlIGlk
ZW50aWZpZXIgb2YgdGhlIGtleS4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBrZXlJ
ZGVudGlmaWVyKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBDb250YWlucyBhbiBpbmRpY2F0
aW9uIG9mIHRoZSBsb2NhdGlvbiBvZiB0aGV5IGtleSBvbiB0aGUgZGV2aWNlLgotICAgICAqCi0g
ICAgICovCi0gICAgdW5zaWduZWQga2V5TG9jYXRpb24oKSBjb25zdDsKLQotICAgIC8qKgotICAg
ICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgJ2N0cmwnIGtleSB3YXMgZGVwcmVzc2Vk
IGR1cmluZyB0aGUgZmlyaW5nCi0gICAgICogb2YgdGhlIGV2ZW50LgotICAgICAqLwotICAgIGJv
b2wgY3RybEtleSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0ZSB3
aGV0aGVyIHRoZSAnc2hpZnQnIGtleSB3YXMgZGVwcmVzc2VkIGR1cmluZyB0aGUgZmlyaW5nCi0g
ICAgICogb2YgdGhlIGV2ZW50LgotICAgICAqCi0gICAgICovCi0gICAgYm9vbCBzaGlmdEtleSgp
IGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSAn
YWx0JyBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcgdGhlIGZpcmluZwotICAgICAqIG9mIHRoZSBl
dmVudC4gT24gc29tZSBwbGF0Zm9ybXMgdGhpcyBrZXkgbWF5IG1hcCB0byBhbiBhbHRlcm5hdGl2
ZSBrZXkKLSAgICAgKiBuYW1lLgotICAgICAqCi0gICAgICovCi0gICAgYm9vbCBhbHRLZXkoKSBj
b25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgJ21l
dGEnIGtleSB3YXMgZGVwcmVzc2VkIGR1cmluZyB0aGUgZmlyaW5nCi0gICAgICogb2YgdGhlIGV2
ZW50LiBPbiBzb21lIHBsYXRmb3JtcyB0aGlzIGtleSBtYXkgbWFwIHRvIGFuIGFsdGVybmF0aXZl
IGtleQotICAgICAqIG5hbWUuCi0gICAgICoKLSAgICAgKi8KLSAgICBib29sIG1ldGFLZXkoKSBj
b25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgJ2Fs
dCBncmFwaCcgKD8pIGtleSB3YXMgZGVwcmVzc2VkIGR1cmluZyB0aGUgZmlyaW5nCi0gICAgICog
b2YgdGhlIGV2ZW50LiBPbiBzb21lIHBsYXRmb3JtcyB0aGlzIGtleSBtYXkgbWFwIHRvIGFuIGFs
dGVybmF0aXZlIGtleQotICAgICAqIG5hbWUuCi0gICAgICoKLSAgICAgKi8KLSAgICBib29sIGFs
dEdyYXBoS2V5KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGluaXRLZXlib2FyZEV2ZW50KGNvbnN0IERP
TVN0cmluZyAmdHlwZUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNl
bGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFic3RyYWN0
VmlldyAmdmlld0FyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERP
TVN0cmluZyAma2V5SWRlbnRpZmllckFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzaGlmdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YWx0S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5
QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRHcmFwaEtleUFy
Zyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLXByb3RlY3RlZDoK
LSAgICBLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnRJbXBsICppbXBsKTsKLQotI2VuZGlmCiAK
IH07CiAKSW5kZXg6IGtodG1sL2RvbS9kb20yX3JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbTJfcmFuZ2UuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBraHRtbC9kb20vZG9tMl9yYW5nZS5oCi0tLSBr
aHRtbC9kb20vZG9tMl9yYW5nZS5oCTE2IFNlcCAyMDA1IDIyOjQyOjAzIC0wMDAwCTEuMTEKKysr
IGtodG1sL2RvbS9kb20yX3JhbmdlLmgJMjkgTm92IDIwMDUgMTI6NDE6MjcgLTAwMDAKQEAgLTMz
LDQyICszMywxNCBAQAogCiAjaW5jbHVkZSA8ZG9tL2RvbV9ub2RlLmg+CiAKLSNpZiAhS0hUTUxf
Tk9fQ1BMVVNQTFVTX0RPTQotCi0jaW5jbHVkZSA8ZG9tL2RvbV9kb2MuaD4KLSNpbmNsdWRlIDxk
b20vZG9tX21pc2MuaD4KLQotI2VuZGlmCiAKIG5hbWVzcGFjZSBET00gewogCi0jaWYgIUtIVE1M
X05PX0NQTFVTUExVU19ET00KLQotY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKLWNsYXNzIE5vZGU7
Ci1jbGFzcyBET01TdHJpbmc7Ci1jbGFzcyBEb2N1bWVudEltcGw7Ci1jbGFzcyBSYW5nZUltcGw7
Ci0KLWNsYXNzIERPTUV4Y2VwdGlvbjsKLQotI2VuZGlmCiAKIC8vIEludHJvZHVjZWQgaW4gRE9N
IExldmVsIDI6CiBjbGFzcyBSYW5nZUV4Y2VwdGlvbiB7CiBwdWJsaWM6CiAKLSNpZiAhS0hUTUxf
Tk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgUmFuZ2VFeGNlcHRpb24odW5zaWduZWQgc2hvcnQgX2Nv
ZGUpIHsgY29kZSA9IF9jb2RlOyB9Ci0gICAgUmFuZ2VFeGNlcHRpb24oY29uc3QgUmFuZ2VFeGNl
cHRpb24gJm90aGVyKSB7IGNvZGUgPSBvdGhlci5jb2RlOyB9Ci0KLSAgICBSYW5nZUV4Y2VwdGlv
biAmIG9wZXJhdG9yID0gKGNvbnN0IFJhbmdlRXhjZXB0aW9uICZvdGhlcikKLQl7IGNvZGUgPSBv
dGhlci5jb2RlOyByZXR1cm4gKnRoaXM7IH0KLQotICAgIHZpcnR1YWwgflJhbmdlRXhjZXB0aW9u
KCkge30KLQotI2VuZGlmCiAKICAgICAvKioKICAgICAgKiBBbiBpbnRlZ2VyIGluZGljYXRpbmcg
dGhlIHR5cGUgb2YgZXJyb3IgZ2VuZXJhdGVkLgpAQCAtODEsMjI3ICs1MywxNCBAQCBwdWJsaWM6
CiAgICAgICAgIF9FWENFUFRJT05fTUFYICAgICAgICAgICAgICAgICA9IDI5OTkKICAgICB9Owog
Ci0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIHVuc2lnbmVkIHNob3J0IGNvZGU7
Ci0KLSNlbmRpZgogfTsKIAogY2xhc3MgUmFuZ2UKIHsKIAotI2lmICFLSFRNTF9OT19DUExVU1BM
VVNfRE9NCi0KLSAgICBmcmllbmQgY2xhc3MgRG9jdW1lbnRJbXBsOwotICAgIGZyaWVuZCBjbGFz
cyBEb2N1bWVudDsKLSAgICBmcmllbmQgY2xhc3MgUmFuZ2VJbXBsOwotCi0jZW5kaWYKIAogcHVi
bGljOgogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIFJhbmdlKCk7Ci0gICAg
UmFuZ2UoY29uc3QgRG9jdW1lbnQgcm9vdENvbnRhaW5lcik7Ci0gICAgUmFuZ2UoY29uc3QgUmFu
Z2UgJm90aGVyKTsKLSAgICBSYW5nZShjb25zdCBOb2RlIHN0YXJ0Q29udGFpbmVyLCBjb25zdCBp
bnQgc3RhcnRPZmZzZXQsIGNvbnN0IE5vZGUgZW5kQ29udGFpbmVyLCBjb25zdCBpbnQgZW5kT2Zm
c2V0KTsKLQotICAgIFJhbmdlICYgb3BlcmF0b3IgPSAoY29uc3QgUmFuZ2UgJm90aGVyKTsKLQot
ICAgIH5SYW5nZSgpOwotCi0gICAgLyoqCi0gICAgICogTm9kZSB3aXRoaW4gd2hpY2ggdGhlIHJh
bmdlIGJlZ2lucwotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBzdGFydENvbnRhaW5lcigpIGNv
bnN0OwotCi0gICAgLyoqCi0gICAgICogT2Zmc2V0IHdpdGhpbiB0aGUgc3RhcnRpbmcgbm9kZSBv
ZiB0aGUgcmFuZ2UuCi0gICAgICoKLSAgICAgKi8KLSAgICBpbnQgc3RhcnRPZmZzZXQoKSBjb25z
dDsKLQotICAgIC8qKgotICAgICAqIE5vZGUgd2l0aGluIHdoaWNoIHRoZSByYW5nZSBlbmRzCi0g
ICAgICoKLSAgICAgKi8KLSAgICBOb2RlIGVuZENvbnRhaW5lcigpIGNvbnN0OwotCi0gICAgLyoq
Ci0gICAgICogT2Zmc2V0IHdpdGhpbiB0aGUgZW5kaW5nIG5vZGUgb2YgdGhlIHJhbmdlLgotICAg
ICAqCi0gICAgICovCi0gICAgaW50IGVuZE9mZnNldCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAg
ICogVFJVRSBpZiB0aGUgcmFuZ2UgaXMgY29sbGFwc2VkCi0gICAgICoKLSAgICAgKi8KLSAgICBi
b29sIGNvbGxhcHNlZCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgY29tbW9u
IGFuY2VzdG9yIGNvbnRhaW5lciBvZiB0aGUgcmFuZ2UncyB0d28gZW5kLXBvaW50cy4KLSAgICAg
KiBBbHNvIHNldHMgaXQuCi0gICAgICoKLSAgICAgKi8KLSAgICAvLyAjIyMgQklDIG1ha2UgY29u
c3QgaW4gdGhlIG5leHQgcmVsZWFzZQotICAgIE5vZGUgY29tbW9uQW5jZXN0b3JDb250YWluZXIo
KTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBhdHRyaWJ1dGVzIGRlc2NyaWJpbmcg
dGhlIHN0YXJ0IG9mIHRoZSByYW5nZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSByZWZOb2RlIFRo
ZSA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IHZhbHVlLiBUaGlzIHBhcmFtZXRlcgotICAgICAqIG11
c3QgYmUgZGlmZmVyZW50IGZyb20gPGNvZGU+IG51bGwgPC9jb2RlPiAuCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gb2Zmc2V0IFRoZSA8Y29kZT4gc3RhcnRPZmZzZXQgPC9jb2RlPiB2YWx1ZS4KLSAg
ICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gUmFuZ2VFeGNl
cHRpb24KLSAgICAgKiBOVUxMX05PREVfRVJSOiBSYWlzZWQgaWYgPGNvZGU+IHJlZk5vZGUgPC9j
b2RlPiBpcyA8Y29kZT4gbnVsbAotICAgICAqIDwvY29kZT4gLgotICAgICAqCi0gICAgICogIElO
VkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIDxjb2RlPiByZWZOb2RlIDwvY29kZT4gb3Ig
YW4KLSAgICAgKiBhbmNlc3RvciBvZiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IGlzIGFuIEF0dHIs
IEVudGl0eSwKLSAgICAgKiBOb3RhdGlvbiwgb3IgRG9jdW1lbnRUeXBlIG5vZGUuCi0gICAgICoK
LSAgICAgKiAgSWYgYW4gb2Zmc2V0IGlzIG91dC1vZi1ib3VuZHMsIHNob3VsZCBpdCBqdXN0IGJl
IGZpeGVkIHVwIG9yCi0gICAgICogc2hvdWxkIGFuIGV4Y2VwdGlvbiBiZSByYWlzZWQuCi0gICAg
ICoKLSAgICAgKi8KLSAgICB2b2lkIHNldFN0YXJ0ICggY29uc3QgTm9kZSAmcmVmTm9kZSwgaW50
IG9mZnNldCApOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgYXR0cmlidXRlcyBkZXNjcmli
aW5nIHRoZSBlbmQgb2YgYSByYW5nZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSByZWZOb2RlIFRo
ZSA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IHZhbHVlLiBUaGlzIHBhcmFtZXRlcgotICAgICAqIG11
c3QgYmUgZGlmZmVyZW50IGZyb20gPGNvZGU+IG51bGwgPC9jb2RlPiAuCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gb2Zmc2V0IFRoZSA8Y29kZT4gZW5kT2Zmc2V0IDwvY29kZT4gdmFsdWUuCi0gICAg
ICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0
aW9uCi0gICAgICogTlVMTF9OT0RFX0VSUjogUmFpc2VkIGlmIDxjb2RlPiByZWZOb2RlIDwvY29k
ZT4gaXMgPGNvZGU+IG51bGwKLSAgICAgKiA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqICBJTlZB
TElEX05PREVfVFlQRV9FUlI6IFJhaXNlZCBpZiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IG9yIGFu
Ci0gICAgICogYW5jZXN0b3Igb2YgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiBpcyBhbiBBdHRyLCBF
bnRpdHksCi0gICAgICogTm90YXRpb24sIG9yIERvY3VtZW50VHlwZSBub2RlLgotICAgICAqCi0g
ICAgICovCi0gICAgdm9pZCBzZXRFbmQgKCBjb25zdCBOb2RlICZyZWZOb2RlLCBpbnQgb2Zmc2V0
ICk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBzdGFydCBwb3NpdGlvbiB0byBiZSBiZWZv
cmUgYSBub2RlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVmTm9kZSBSYW5nZSBzdGFydHMgYmVm
b3JlIDxjb2RlPiByZWZOb2RlIDwvY29kZT4KLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAg
KgotICAgICAqIEBleGNlcHRpb24gUmFuZ2VFeGNlcHRpb24KLSAgICAgKiBJTlZBTElEX05PREVf
VFlQRV9FUlI6IFJhaXNlZCBpZiBhbiBhbmNlc3RvciBvZiA8Y29kZT4gcmVmTm9kZQotICAgICAq
IDwvY29kZT4gaXMgYW4gQXR0ciwgRW50aXR5LCBOb3RhdGlvbiwgb3IgRG9jdW1lbnRUeXBlIG5v
ZGUgb3IKLSAgICAgKiBpZiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IGlzIGEgRG9jdW1lbnQsIERv
Y3VtZW50RnJhZ21lbnQsCi0gICAgICogQXR0ciwgRW50aXR5LCBvciBOb3RhdGlvbiBub2RlLgot
ICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZXRTdGFydEJlZm9yZSAoIGNvbnN0IE5vZGUgJnJl
Zk5vZGUgKTsKLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHN0YXJ0IHBvc2l0aW9uIHRvIGJl
IGFmdGVyIGEgbm9kZQotICAgICAqCi0gICAgICogQHBhcmFtIHJlZk5vZGUgUmFuZ2Ugc3RhcnRz
IGFmdGVyIDxjb2RlPiByZWZOb2RlIDwvY29kZT4KLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAg
ICAgKgotICAgICAqIEBleGNlcHRpb24gUmFuZ2VFeGNlcHRpb24KLSAgICAgKiBJTlZBTElEX05P
REVfVFlQRV9FUlI6IFJhaXNlZCBpZiBhbiBhbmNlc3RvciBvZiA8Y29kZT4gcmVmTm9kZQotICAg
ICAqIDwvY29kZT4gaXMgYW4gQXR0ciwgRW50aXR5LCBOb3RhdGlvbiwgb3IgRG9jdW1lbnRUeXBl
IG5vZGUgb3IKLSAgICAgKiBpZiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IGlzIGEgRG9jdW1lbnQs
IERvY3VtZW50RnJhZ21lbnQsCi0gICAgICogQXR0ciwgRW50aXR5LCBvciBOb3RhdGlvbiBub2Rl
LgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZXRTdGFydEFmdGVyICggY29uc3QgTm9kZSAm
cmVmTm9kZSApOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgZW5kIHBvc2l0aW9uIHRvIGJl
IGJlZm9yZSBhIG5vZGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVmTm9kZSBSYW5nZSBlbmRz
IGJlZm9yZSA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0g
ICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOiBSYWlzZWQgaWYgYW4gYW5jZXN0b3Igb2YgPGNvZGU+IHJlZk5vZGUKLSAg
ICAgKiA8L2NvZGU+IGlzIGFuIEF0dHIsIEVudGl0eSwgTm90YXRpb24sIG9yIERvY3VtZW50VHlw
ZSBub2RlIG9yCi0gICAgICogaWYgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiBpcyBhIERvY3VtZW50
LCBEb2N1bWVudEZyYWdtZW50LAotICAgICAqIEF0dHIsIEVudGl0eSwgb3IgTm90YXRpb24gbm9k
ZS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0RW5kQmVmb3JlICggY29uc3QgTm9kZSAm
cmVmTm9kZSApOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgZW5kIG9mIGEgcmFuZ2UgdG8g
YmUgYWZ0ZXIgYSBub2RlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVmTm9kZSBSYW5nZSBlbmRz
IGFmdGVyIDxjb2RlPiByZWZOb2RlIDwvY29kZT4gLgotICAgICAqCi0gICAgICogQHJldHVybgot
ICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBSYW5nZUV4Y2VwdGlvbgotICAgICAqIElOVkFMSURf
Tk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIGFuIGFuY2VzdG9yIG9mIDxjb2RlPiByZWZOb2RlCi0g
ICAgICogPC9jb2RlPiBpcyBhbiBBdHRyLCBFbnRpdHksIE5vdGF0aW9uIG9yIERvY3VtZW50VHlw
ZSBub2RlIG9yIGlmCi0gICAgICogPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiBpcyBhIERvY3VtZW50
LCBEb2N1bWVudEZyYWdtZW50LCBBdHRyLAotICAgICAqIEVudGl0eSwgb3IgTm90YXRpb24gbm9k
ZS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0RW5kQWZ0ZXIgKCBjb25zdCBOb2RlICZy
ZWZOb2RlICk7Ci0KLSAgICAvKioKLSAgICAgKiBDb2xsYXBzZSBhIHJhbmdlIG9udG8gb25lIG9m
IGl0cyBlbmQtcG9pbnRzCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdG9TdGFydCBJZiBUUlVFLCBj
b2xsYXBzZXMgdGhlIFJhbmdlIG9udG8gaXRzIHN0YXJ0OyBpZgotICAgICAqIEZBTFNFLCBjb2xs
YXBzZXMgaXQgb250byBpdHMgZW5kLgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqCi0g
ICAgICovCi0gICAgdm9pZCBjb2xsYXBzZSAoIGJvb2wgdG9TdGFydCApOwotCi0gICAgLyoqCi0g
ICAgICogU2VsZWN0IGEgbm9kZSBhbmQgaXRzIGNvbnRlbnRzCi0gICAgICoKLSAgICAgKiBAcGFy
YW0gcmVmTm9kZSBUaGUgbm9kZSB0byBzZWxlY3QuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0g
ICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOiBSYWlzZWQgaWYgYW4gYW5jZXN0b3Igb2YgPGNvZGU+IHJlZk5vZGUKLSAg
ICAgKiA8L2NvZGU+IGlzIGFuIEF0dHIsIEVudGl0eSwgTm90YXRpb24gb3IgRG9jdW1lbnRUeXBl
IG5vZGUgb3IgaWYKLSAgICAgKiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IGlzIGEgRG9jdW1lbnQs
IERvY3VtZW50RnJhZ21lbnQsIEF0dHIsCi0gICAgICogRW50aXR5LCBvciBOb3RhdGlvbiBub2Rl
LgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZWxlY3ROb2RlICggY29uc3QgTm9kZSAmcmVm
Tm9kZSApOwotCi0gICAgLyoqCi0gICAgICogU2VsZWN0IHRoZSBjb250ZW50cyB3aXRoaW4gYSBu
b2RlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVmTm9kZSBOb2RlIHRvIHNlbGVjdCBmcm9tCi0g
ICAgICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhj
ZXB0aW9uCi0gICAgICogSU5WQUxJRF9OT0RFX1RZUEVfRVJSOiBSYWlzZWQgaWYgPGNvZGU+IHJl
Zk5vZGUgPC9jb2RlPiBvciBhbgotICAgICAqIGFuY2VzdG9yIG9mIDxjb2RlPiByZWZOb2RlIDwv
Y29kZT4gaXMgYW4gQXR0ciwgRW50aXR5LCBOb3RhdGlvbgotICAgICAqIG9yIERvY3VtZW50VHlw
ZSBub2RlLgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZWxlY3ROb2RlQ29udGVudHMgKCBj
b25zdCBOb2RlICZyZWZOb2RlICk7Ci0KLSNlbmRpZgogCiAgICAgZW51bSBDb21wYXJlSG93IHsK
IAlTVEFSVF9UT19TVEFSVCA9IDAsCkBAIC0zMTAsMjAzICs2OSw2IEBAIHB1YmxpYzoKIAlFTkRf
VE9fU1RBUlQgPSAzCiAgICAgfTsKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAg
ICAvKioKLSAgICAgKiBDb21wYXJlIHRoZSBlbmQtcG9pbnRzIG9mIHR3byByYW5nZXMgaW4gYSBk
b2N1bWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBob3cKLSAgICAgKgotICAgICAqIEBwYXJh
bSBzb3VyY2VSYW5nZQotICAgICAqCi0gICAgICogQHJldHVybiAtMSwgMCBvciAxIGRlcGVuZGlu
ZyBvbiB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICogZW5kLXBvaW50IG9mIHRoZSBS
YW5nZSBpcyBiZWZvcmUsIGVxdWFsIHRvLCBvciBhZnRlciB0aGUKLSAgICAgKiBjb3JyZXNwb25k
aW5nIGVuZC1wb2ludCBvZiA8Y29kZT4gc291cmNlUmFuZ2UgPC9jb2RlPiAuCi0gICAgICoKLSAg
ICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIFdST05HX0RPQ1VNRU5UX0VSUjog
UmFpc2VkIGlmIHRoZSB0d28gUmFuZ2VzIGFyZSBub3QgaW4gdGhlCi0gICAgICogc2FtZSBkb2N1
bWVudCBvciBkb2N1bWVudCBmcmFnbWVudC4KLSAgICAgKgotICAgICAqLwotICAgIHNob3J0IGNv
bXBhcmVCb3VuZGFyeVBvaW50cyAoIENvbXBhcmVIb3cgaG93LCBjb25zdCBSYW5nZSAmc291cmNl
UmFuZ2UgKTsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqIG5vdCBwYXJ0IG9m
IHRoZSBET00KLSAgICAgKgotICAgICAqIENvbXBhcmUgdGhlIGJvdW5kYXJ5LXBvaW50cyBvZiBh
IHJhbmdlLgotICAgICAqCi0gICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHN0YXJ0Q29udGFpbmVy
IGlzIGJlZm9yZSB0aGUgZW5kQ29udGFpbmVyLAotICAgICAqIG9yIGlmIHRoZXkgYXJlIGVxdWFs
LgotICAgICAqIFJldHVybiBmYWxzZSBpZiB0aGUgc3RhcnRDb250YWluZXIgaXMgYWZ0ZXIgdGhl
IGVuZENvbnRhaW5lci4KLSAgICAgKgotICAgICAqLwotICAgIGJvb2wgYm91bmRhcnlQb2ludHNW
YWxpZCAoICApOwotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgY29udGVudHMgb2YgYSBy
YW5nZSBmcm9tIHRoZSBjb250YWluaW5nIGRvY3VtZW50IG9yCi0gICAgICogZG9jdW1lbnQgZnJh
Z21lbnQgd2l0aG91dCByZXR1cm5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIHJlbW92ZWQKLSAgICAg
KiBjb250ZW50LgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqCi0gICAgICogQGV4Y2Vw
dGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJh
aXNlZCBpZiBhbnkgcG9ydGlvbiBvZiB0aGUKLSAgICAgKiBjb250ZW50IG9mIHRoZSByYW5nZSBp
cyByZWFkLW9ubHkgb3IgYW55IG9mIHRoZSBub2RlcyB0aGF0Ci0gICAgICogY29udGFpbiBhbnkg
b2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJhbmdlIGFyZSByZWFkLW9ubHkuCi0gICAgICoKLSAgICAg
Ki8KLSAgICB2b2lkIGRlbGV0ZUNvbnRlbnRzICggICk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3Zl
cyB0aGUgY29udGVudHMgb2YgYSByYW5nZSBmcm9tIHRoZSBjb250YWluaW5nIGRvY3VtZW50IG9y
Ci0gICAgICogZG9jdW1lbnQgZnJhZ21lbnQgdG8gYSBuZXcgRG9jdW1lbnRGcmFnbWVudC4KLSAg
ICAgKgotICAgICAqIEByZXR1cm4gQSBEb2N1bWVudEZyYWdtZW50IGNvbnRhaW5pbmcgdGhlIGV4
dHJhY3RlZCBjb250ZW50cy4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9u
Ci0gICAgICogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgYW55IHBvcnRp
b24gb2YgdGhlCi0gICAgICogY29udGVudCBvZiB0aGUgcmFuZ2UgaXMgcmVhZC1vbmx5IG9yIGFu
eSBvZiB0aGUgbm9kZXMgd2hpY2gKLSAgICAgKiBjb250YWluIGFueSBvZiB0aGUgY29udGVudCBv
ZiB0aGUgcmFuZ2UgYXJlIHJlYWQtb25seS4KLSAgICAgKgotICAgICAqICBISUVSQVJDSFlfUkVR
VUVTVF9FUlI6IFJhaXNlZCBpZiBhIERvY3VtZW50VHlwZSBub2RlIHdvdWxkIGJlCi0gICAgICog
ZXh0cmFjdGVkIGludG8gdGhlIG5ldyBEb2N1bWVudEZyYWdtZW50LgotICAgICAqCi0gICAgICov
Ci0gICAgRG9jdW1lbnRGcmFnbWVudCBleHRyYWN0Q29udGVudHMgKCAgKTsKLQotICAgIC8qKgot
ICAgICAqIER1cGxpY2F0ZXMgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2UKLSAgICAgKgotICAgICAq
IEByZXR1cm4gQSBEb2N1bWVudEZyYWdtZW50IGNvbnRhaW5pbmcgY29udGVudHMgZXF1aXZhbGVu
dCB0bwotICAgICAqIHRob3NlIG9mIHRoaXMgcmFuZ2UuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0
aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2VkIGlm
IGEgRG9jdW1lbnRUeXBlIG5vZGUgd291bGQgYmUKLSAgICAgKiBleHRyYWN0ZWQgaW50byB0aGUg
bmV3IERvY3VtZW50RnJhZ21lbnQuCi0gICAgICoKLSAgICAgKi8KLSAgICBEb2N1bWVudEZyYWdt
ZW50IGNsb25lQ29udGVudHMgKCAgKTsKLQotICAgIC8qKgotICAgICAqIEluc2VydHMgYSBub2Rl
IGludG8gdGhlIGRvY3VtZW50IG9yIGRvY3VtZW50IGZyYWdtZW50IGF0IHRoZQotICAgICAqIHN0
YXJ0IG9mIHRoZSByYW5nZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuZXdOb2RlIFRoZSBub2Rl
IHRvIGluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlCi0gICAgICoKLSAgICAgKiBAcmV0
dXJuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIGFuIGFuY2VzdG9yIGNvbnRhaW5lciBv
ZgotICAgICAqIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgaXMgcmVhZC1vbmx5LgotICAgICAqCi0g
ICAgICogIFdST05HX0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBuZXdOb2RlIDwvY29k
ZT4gYW5kIHRoZQotICAgICAqIGNvbnRhaW5lciBvZiB0aGUgc3RhcnQgb2YgdGhlIFJhbmdlIHdl
cmUgbm90IGNyZWF0ZWQgZnJvbSB0aGUKLSAgICAgKiBzYW1lIGRvY3VtZW50LgotICAgICAqCi0g
ICAgICogIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2VkIGlmIHRoZSBjb250YWluZXIgb2Yg
dGhlIHN0YXJ0IG9mCi0gICAgICogdGhlIFJhbmdlIGlzIG9mIGEgdHlwZSB0aGF0IGRvZXMgbm90
IGFsbG93IGNoaWxkcmVuIG9mIHRoZSB0eXBlCi0gICAgICogb2YgPGNvZGU+IG5ld05vZGUgPC9j
b2RlPiBvciBpZiA8Y29kZT4gbmV3Tm9kZSA8L2NvZGU+IGlzIGFuCi0gICAgICogYW5jZXN0b3Ig
b2YgdGhlIGNvbnRhaW5lciAuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0
aW9uCi0gICAgICogSU5WQUxJRF9OT0RFX1RZUEVfRVJSOiBSYWlzZWQgaWYgPGNvZGU+IG5vZGUg
PC9jb2RlPiBpcyBhbgotICAgICAqIEF0dHIsIEVudGl0eSwgTm90YXRpb24sIERvY3VtZW50RnJh
Z21lbnQsIG9yIERvY3VtZW50IG5vZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIGluc2Vy
dE5vZGUgKCBjb25zdCBOb2RlICZuZXdOb2RlICk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXBhcmVu
dHMgdGhlIGNvbnRlbnRzIG9mIHRoZSByYW5nZSB0byB0aGUgZ2l2ZW4gbm9kZSBhbmQKLSAgICAg
KiBpbnNlcnRzIHRoZSBub2RlIGF0IHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIHJh
bmdlLgotICAgICAqCi0gICAgICogQHBhcmFtIG5ld1BhcmVudCBUaGUgbm9kZSB0byBzdXJyb3Vu
ZCB0aGUgY29udGVudHMgd2l0aC4KLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKgotICAg
ICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSOiBSYWlzZWQgaWYgYW4gYW5jZXN0b3IgY29udGFpbmVyIG9mCi0gICAgICogZWl0aGVy
IGVuZC1wb2ludCBvZiB0aGUgcmFuZ2UgaXMgcmVhZC1vbmx5LgotICAgICAqCi0gICAgICogIFdS
T05HX0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBuZXdQYXJlbnQgPC9jb2RlPiBhbmQg
dGhlCi0gICAgICogY29udGFpbmVyIG9mIHRoZSBzdGFydCBvZiB0aGUgUmFuZ2Ugd2VyZSBub3Qg
Y3JlYXRlZCBmcm9tIHRoZQotICAgICAqIHNhbWUgZG9jdW1lbnQuCi0gICAgICoKLSAgICAgKiAg
SElFUkFSQ0hZX1JFUVVFU1RfRVJSOiBSYWlzZWQgaWYgdGhlIGNvbnRhaW5lciBvZiB0aGUgc3Rh
cnQgb2YKLSAgICAgKiB0aGUgUmFuZ2UgaXMgb2YgYSB0eXBlIHRoYXQgZG9lcyBub3QgYWxsb3cg
Y2hpbGRyZW4gb2YgdGhlIHR5cGUKLSAgICAgKiBvZiA8Y29kZT4gbmV3UGFyZW50IDwvY29kZT4g
b3IgaWYgPGNvZGU+IG5ld1BhcmVudCA8L2NvZGU+IGlzCi0gICAgICogYW4gYW5jZXN0b3Igb2Yg
dGhlIGNvbnRhaW5lciBvciBpZiA8Y29kZT4gbm9kZSA8L2NvZGU+IHdvdWxkCi0gICAgICogZW5k
IHVwIHdpdGggYSBjaGlsZCBub2RlIG9mIGEgdHlwZSBub3QgYWxsb3dlZCBieSB0aGUgdHlwZSBv
ZgotICAgICAqIDxjb2RlPiBub2RlIDwvY29kZT4gLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlv
biBSYW5nZUV4Y2VwdGlvbgotICAgICAqIEJBRF9FTkRQT0lOVFNfRVJSOiBSYWlzZWQgaWYgdGhl
IHJhbmdlIHBhcnRpYWxseSBzZWxlY3RzIGEKLSAgICAgKiBub24tdGV4dCBub2RlLgotICAgICAq
Ci0gICAgICogIElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBub2RlIDwv
Y29kZT4gaXMgYW4KLSAgICAgKiBBdHRyLCBFbnRpdHksIERvY3VtZW50VHlwZSwgTm90YXRpb24s
IERvY3VtZW50LCBvcgotICAgICAqIERvY3VtZW50RnJhZ21lbnQgbm9kZS4KLSAgICAgKgotICAg
ICAqLwotICAgIHZvaWQgc3Vycm91bmRDb250ZW50cyAoIGNvbnN0IE5vZGUgJm5ld1BhcmVudCAp
OwotCi0gICAgLyoqCi0gICAgICogUHJvZHVjZXMgYSBuZXcgcmFuZ2Ugd2hvc2UgZW5kLXBvaW50
cyBhcmUgZXF1YWwgdG8gdGhlCi0gICAgICogZW5kLXBvaW50cyBvZiB0aGUgcmFuZ2UuCi0gICAg
ICoKLSAgICAgKiBAcmV0dXJuIFRoZSBkdXBsaWNhdGVkIHJhbmdlLgotICAgICAqCi0gICAgICov
Ci0gICAgUmFuZ2UgY2xvbmVSYW5nZSAoICApOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0
aGUgY29udGVudHMgb2YgYSByYW5nZSBhcyBhIHN0cmluZy4KLSAgICAgKgotICAgICAqIEByZXR1
cm4gVGhlIGNvbnRlbnRzIG9mIHRoZSByYW5nZS4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0
cmluZyB0b1N0cmluZyAoICApOwotICAgIAotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbCBOb3Qg
cGFydCBvZiBET00KLSAgICAgKi8KLSAgICBET01TdHJpbmcgdG9IVE1MICggICk7Ci0KLSAgICAv
KiBNb3ppbGxhIGV4dGVuc2lvbiAtIG9ubHkgd29ya3MgZm9yIEhUTUwgZG9jdW1lbnRzLiAqLwot
ICAgIERvY3VtZW50RnJhZ21lbnQgY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IChET01TdHJpbmcg
Jmh0bWwpOwotICAgIAotICAgIC8qKgotICAgICAqIENhbGxlZCB0byBpbmRpY2F0ZSB0aGF0IHRo
ZSByYW5nZSBpcyBubyBsb25nZXIgaW4gdXNlIGFuZCB0aGF0Ci0gICAgICogdGhlIGltcGxlbWVu
dGF0aW9uIG1heSByZWxpbnF1aXNoIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoCi0gICAg
ICogdGhpcyByYW5nZS4gU3Vic2VxdWVudCBjYWxscyB0byBhbnkgbWV0aG9kcyBvciBhdHRyaWJ1
dGUgZ2V0dGVycwotICAgICAqIG9uIHRoaXMgcmFuZ2Ugd2lsbCByZXN1bHQgaW4gYSBET01FeGNl
cHRpb24gYmVpbmcgdGhyb3duIHdpdGggYW4KLSAgICAgKiBlcnJvciBjb2RlIG9mIElOVkFMSURf
U1RBVEVfRVJSLgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBkZXRhY2ggKCAgKTsKLQotICAg
IC8qKgotICAgICAqIG5vdCBwYXJ0IG9mIHRoZSBET00KLSAgICAgKiBUUlVFIGlmIHRoZSByYW5n
ZSBpcyBkZXRhY2hlZAotICAgICAqCi0gICAgICovCi0gICAgYm9vbCBpc0RldGFjaGVkKCkgY29u
c3Q7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKiBub3QgcGFydCBvZiB0aGUg
RE9NCi0gICAgICovCi0gICAgUmFuZ2UoUmFuZ2VJbXBsICppKTsKLSAgICBSYW5nZUltcGwgKmhh
bmRsZSgpIGNvbnN0OwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAg
ICBSYW5nZUltcGwgKmltcGw7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCB0aHJvd0V4Y2VwdGlvbihp
bnQgZXhjZXB0aW9uY29kZSkgY29uc3Q7Ci0KLSNlbmRpZgogCiB9OwogCkluZGV4OiBraHRtbC9k
b20vZG9tMl90cmF2ZXJzYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2RvbS9kb20yX3RyYXZlcnNhbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NwpkaWZmIC1wIC11IC1yMS43IGtodG1sL2RvbS9kb20yX3RyYXZlcnNhbC5jcHAKLS0tIGtodG1s
L2RvbS9kb20yX3RyYXZlcnNhbC5jcHAJMyBPY3QgMjAwNSAyMToxMjoxMSAtMDAwMAkxLjcKKysr
IGtodG1sL2RvbS9kb20yX3RyYXZlcnNhbC5jcHAJMjkgTm92IDIwMDUgMTI6NDE6MjcgLTAwMDAK
QEAgLTIzLDEzICsyMyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiZG9tL2Rv
bTJfdHJhdmVyc2FsLmgiCiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0jaW5jbHVk
ZSAiZG9tL2RvbV9leGNlcHRpb24uaCIKLSNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgotI2lu
Y2x1ZGUgInhtbC9kb20yX3RyYXZlcnNhbGltcGwuaCIKLQotI2VuZGlmCiAKIG5hbWVzcGFjZSBE
T00gewogCkBAIC00MiwzMTYgKzM1LDUgQEAgc2hvcnQgTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNj
ZXB0Tm9kZShGaQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQot
Tm9kZUZpbHRlcjo6Tm9kZUZpbHRlcigpIDogaW1wbCgwKQotewotfQotCi1Ob2RlRmlsdGVyOjpO
b2RlRmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRpb24gKmNvbmRpdGlvbikKLXsKLSAgICBpbXBsID0g
bmV3IE5vZGVGaWx0ZXJJbXBsKGNvbmRpdGlvbik7Ci0gICAgaW1wbC0+cmVmKCk7Ci19Ci0KLU5v
ZGVGaWx0ZXI6Ok5vZGVGaWx0ZXIoY29uc3QgTm9kZUZpbHRlciAmb3RoZXIpCi17Ci0gICAgaW1w
bCA9IG90aGVyLmltcGw7Ci0gICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5yZWYoKTsKLX0K
LQotTm9kZUZpbHRlcjo6Tm9kZUZpbHRlcihOb2RlRmlsdGVySW1wbCAqaSkKLXsKLSAgICBpbXBs
ID0gaTsKLSAgICBpZiAoaW1wbCkKLSAgICAgICAgaW1wbC0+cmVmKCk7Ci19Ci0KLU5vZGVGaWx0
ZXIgJk5vZGVGaWx0ZXI6Om9wZXJhdG9yPShjb25zdCBOb2RlRmlsdGVyICZvdGhlcikKLXsKLSAg
ICBpZiAoaW1wbCA9PSBvdGhlci5pbXBsKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgCi0g
ICAgTm9kZUZpbHRlckltcGwgKm9sZCA9IGltcGw7Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0g
ICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5yZWYoKTsKLSAgICBpZiAob2xkKSAKLSAgICAg
ICAgb2xkLT5kZXJlZigpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1Ob2RlRmlsdGVyOjp+
Tm9kZUZpbHRlcigpCi17Ci0gICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5kZXJlZigpOwot
fQotCi1zaG9ydCBOb2RlRmlsdGVyOjphY2NlcHROb2RlKGNvbnN0IE5vZGUgJm5vZGUpIGNvbnN0
Ci17Ci0gICAgaWYgKGltcGwpCi0gICAgICAgIHJldHVybiBpbXBsLT5hY2NlcHROb2RlKG5vZGUu
aGFuZGxlKCkpOwotICAgIHJldHVybiBGSUxURVJfQUNDRVBUOwotfQotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1O
b2RlSXRlcmF0b3I6Ok5vZGVJdGVyYXRvcigpCi17Ci0gICAgaW1wbCA9IDA7Ci19Ci0KLU5vZGVJ
dGVyYXRvcjo6Tm9kZUl0ZXJhdG9yKGNvbnN0IE5vZGVJdGVyYXRvciAmb3RoZXIpCi17Ci0gICAg
aW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5yZWYoKTsK
LX0KLQotTm9kZUl0ZXJhdG9yOjpOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9ySW1wbCAqaSkKLXsK
LSAgICBpbXBsID0gaTsKLSAgICBpZiAoaW1wbCkgCi0gICAgICAgIGltcGwtPnJlZigpOwotfQot
Ci1Ob2RlSXRlcmF0b3IgJk5vZGVJdGVyYXRvcjo6b3BlcmF0b3I9KGNvbnN0IE5vZGVJdGVyYXRv
ciAmb3RoZXIpCi17Ci0gICAgaWYgKGltcGwgPT0gb3RoZXIuaW1wbCkKLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIAotICAgIE5vZGVJdGVyYXRvckltcGwgKm9sZCA9IGltcGw7Ci0gICAgaW1w
bCA9IG90aGVyLmltcGw7Ci0gICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5yZWYoKTsKLSAg
ICBpZiAob2xkKSAKLSAgICAgICAgb2xkLT5kZXJlZigpOwotCi0gICAgcmV0dXJuICp0aGlzOwot
fQotCi1Ob2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQotewotICAgIGlmIChpbXBsKSAKLSAg
ICAgICAgaW1wbC0+ZGVyZWYoKTsKLX0KLQotTm9kZSBOb2RlSXRlcmF0b3I6OnJvb3QoKSBjb25z
dAotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwtPnJvb3QoKTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgTm9kZUl0ZXJhdG9yOjp3aGF0VG9TaG93KCkgY29uc3QK
LXsKLSAgICBpZiAoaW1wbCkgCi0gICAgICAgIHJldHVybiBpbXBsLT53aGF0VG9TaG93KCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVGaWx0ZXIgTm9kZUl0ZXJhdG9yOjpmaWx0ZXIoKSBjb25z
dAotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwtPmZpbHRlcigpOwotICAg
IHJldHVybiBOb2RlRmlsdGVyKCk7Ci19Ci0KLWJvb2wgTm9kZUl0ZXJhdG9yOjpleHBhbmRFbnRp
dHlSZWZlcmVuY2VzKCkgY29uc3QKLXsKLSAgICBpZiAoaW1wbCkgCi0gICAgICAgIHJldHVybiBp
bXBsLT5leHBhbmRFbnRpdHlSZWZlcmVuY2VzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUg
Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSgpCi17Ci0gICAgaWYgKCFpbXBsKQotICAgICAgICB0aHJv
dyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBp
bnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgTm9kZUltcGwgKnJlc3VsdCA9IGltcGwtPm5leHRO
b2RlKGV4Y2VwdGlvbmNvZGUpOwotICAgIGlmIChleGNlcHRpb25jb2RlKQotICAgICAgICB0aHJv
dyBET01FeGNlcHRpb24oZXhjZXB0aW9uY29kZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Tm9kZSBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZSgpCi17Ci0gICAgaWYgKCFpbXBsKQotICAg
ICAgICB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7
Ci0KLSAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgTm9kZUltcGwgKnJlc3VsdCA9IGlt
cGwtPnByZXZpb3VzTm9kZShleGNlcHRpb25jb2RlKTsKLSAgICBpZiAoZXhjZXB0aW9uY29kZSkK
LSAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgTm9kZUl0ZXJhdG9yOjpkZXRhY2goKQotewotICAgIGlmICghaW1w
bCkKLSAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFU
RV9FUlIpOwotCi0gICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgIGltcGwtPmRldGFjaChl
eGNlcHRpb25jb2RlKTsKLSAgICBpZiAoZXhjZXB0aW9uY29kZSkKLSAgICAgICAgdGhyb3cgRE9N
RXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwotfQotCi1Ob2RlIE5vZGVJdGVyYXRvcjo6cmVmZXJl
bmNlTm9kZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotICAgICAgICB0aHJvdyBET01FeGNl
cHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0gICAgICAgIAotICAgIHJl
dHVybiBpbXBsLT5yZWZlcmVuY2VOb2RlKCk7Ci19Ci0KLWJvb2wgTm9kZUl0ZXJhdG9yOjpwb2lu
dGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotICAgICAg
ICB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0g
ICAgICAgIAotICAgIHJldHVybiBpbXBsLT5wb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpOwot
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1UcmVlV2Fsa2VyOjpUcmVlV2Fsa2VyKCkKLXsKLSAgICBpbXBsID0g
MDsKLX0KLQotVHJlZVdhbGtlcjo6VHJlZVdhbGtlcihjb25zdCBUcmVlV2Fsa2VyICZvdGhlcikK
LXsKLSAgICBpbXBsID0gb3RoZXIuaW1wbDsKLSAgICBpZiAoaW1wbCkgCi0gICAgICAgIGltcGwt
PnJlZigpOwotfQotCi1UcmVlV2Fsa2VyOjpUcmVlV2Fsa2VyKFRyZWVXYWxrZXJJbXBsICppKQot
ewotICAgIGltcGwgPSBpOwotICAgIGlmIChpbXBsKSAKLSAgICAgICAgaW1wbC0+cmVmKCk7Ci19
Ci0KLVRyZWVXYWxrZXIgJlRyZWVXYWxrZXI6Om9wZXJhdG9yPShjb25zdCBUcmVlV2Fsa2VyICZv
dGhlcikKLXsKLSAgICBpZiAoaW1wbCA9PSBvdGhlci5pbXBsKQotICAgICAgICByZXR1cm4gKnRo
aXM7Ci0gICAgCi0gICAgVHJlZVdhbGtlckltcGwgKm9sZCA9IGltcGw7Ci0gICAgaW1wbCA9IG90
aGVyLmltcGw7Ci0gICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5yZWYoKTsKLSAgICBpZiAo
b2xkKSAKLSAgICAgICAgb2xkLT5kZXJlZigpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1U
cmVlV2Fsa2VyOjp+VHJlZVdhbGtlcigpCi17Ci0gICAgaWYgKGltcGwpIAotICAgICAgICBpbXBs
LT5kZXJlZigpOwotfQotCi1Ob2RlIFRyZWVXYWxrZXI6OnJvb3QoKSBjb25zdAotewotICAgIGlm
IChpbXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwtPnJvb3QoKTsKLSAgICByZXR1cm4gMDsKLX0K
LQotdW5zaWduZWQgVHJlZVdhbGtlcjo6d2hhdFRvU2hvdygpIGNvbnN0Ci17Ci0gICAgaWYgKGlt
cGwpIAotICAgICAgICByZXR1cm4gaW1wbC0+d2hhdFRvU2hvdygpOwotICAgIHJldHVybiAwOwot
fQotCi1Ob2RlRmlsdGVyIFRyZWVXYWxrZXI6OmZpbHRlcigpIGNvbnN0Ci17Ci0gICAgaWYgKGlt
cGwpIAotICAgICAgICByZXR1cm4gaW1wbC0+ZmlsdGVyKCk7Ci0gICAgcmV0dXJuIE5vZGVGaWx0
ZXIoKTsKLX0KLQotYm9vbCBUcmVlV2Fsa2VyOjpleHBhbmRFbnRpdHlSZWZlcmVuY2VzKCkgY29u
c3QKLXsKLSAgICBpZiAoaW1wbCkgcmV0dXJuIGltcGwtPmV4cGFuZEVudGl0eVJlZmVyZW5jZXMo
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU5vZGUgVHJlZVdhbGtlcjo6Y3VycmVudE5vZGUo
KSBjb25zdAotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwtPmN1cnJlbnRO
b2RlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgVHJlZVdhbGtlcjo6c2V0Q3VycmVudE5v
ZGUoY29uc3QgTm9kZSAmbm9kZSkKLXsKLSAgICBpZiAoaW1wbCkgewotICAgICAgICBpbnQgZXhj
ZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgIGltcGwtPnNldEN1cnJlbnROb2RlKG5vZGUuaGFuZGxl
KCksIGV4Y2VwdGlvbmNvZGUpOwotICAgICAgICBpZiAoZXhjZXB0aW9uY29kZSkKLSAgICAgICAg
ICAgIHRocm93IERPTUV4Y2VwdGlvbihleGNlcHRpb25jb2RlKTsKLSAgICB9Ci19Ci0KLU5vZGUg
VHJlZVdhbGtlcjo6cGFyZW50Tm9kZSgpCi17Ci0gICAgaWYgKGltcGwpIAotICAgICAgICByZXR1
cm4gaW1wbC0+cGFyZW50Tm9kZSgpOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlIFRyZWVXYWxr
ZXI6OmZpcnN0Q2hpbGQoKQotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwt
PmZpcnN0Q2hpbGQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSBUcmVlV2Fsa2VyOjpsYXN0
Q2hpbGQoKQotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwtPmxhc3RDaGls
ZCgpOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlIFRyZWVXYWxrZXI6OnByZXZpb3VzU2libGlu
ZygpCi17Ci0gICAgaWYgKGltcGwpIAotICAgICAgICByZXR1cm4gaW1wbC0+cHJldmlvdXNTaWJs
aW5nKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmco
KQotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwtPm5leHRTaWJsaW5nKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKCkKLXsK
LSAgICBpZiAoaW1wbCkgCi0gICAgICAgIHJldHVybiBpbXBsLT5wcmV2aW91c05vZGUoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotTm9kZSBUcmVlV2Fsa2VyOjpuZXh0Tm9kZSgpCi17Ci0gICAgaWYg
KGltcGwpIAotICAgICAgICByZXR1cm4gaW1wbC0+bmV4dE5vZGUoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIERPTQpJbmRleDoga2h0bWwvZG9tL2RvbTJf
dHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZG9tL2RvbTJfdHJhdmVyc2FsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11
IC1yMS42IGtodG1sL2RvbS9kb20yX3RyYXZlcnNhbC5oCi0tLSBraHRtbC9kb20vZG9tMl90cmF2
ZXJzYWwuaAkxNiBTZXAgMjAwNSAyMjo0MjowMyAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9kb20y
X3RyYXZlcnNhbC5oCTI5IE5vdiAyMDA1IDEyOjQxOjI4IC0wMDAwCkBAIC0yOSwxMSArMjksNiBA
QAogCiAjaW5jbHVkZSA8ZG9tL2RvbV9taXNjLmg+CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVT
X0RPTQotCi0jaW5jbHVkZSA8ZG9tL2RvbV9ub2RlLmg+Ci0KLSNlbmRpZgogCiBuYW1lc3BhY2Ug
RE9NIHsKIApAQCAtNDIsMTUgKzM3LDkgQEAgY2xhc3MgTm9kZUZpbHRlckltcGw7CiBjbGFzcyBO
b2RlSXRlcmF0b3JJbXBsOwogY2xhc3MgVHJlZVdhbGtlckltcGw7CiAKLSNpZiAhS0hUTUxfTk9f
Q1BMVVNQTFVTX0RPTQotCi10eXBlZGVmIGNvbnN0IE5vZGUgJkZpbHRlck5vZGU7Ci0KLSNlbHNl
CiAKIHR5cGVkZWYgTm9kZUltcGwgKkZpbHRlck5vZGU7CiAKLSNlbmRpZgogCiBjbGFzcyBOb2Rl
RmlsdGVyQ29uZGl0aW9uIDogcHVibGljIERvbVNoYXJlZAogewpAQCAtODUsMTYgKzc0LDYgQEAg
Y2xhc3MgTm9kZUZpbHRlcgogewogcHVibGljOgogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19E
T00KLQotICAgIE5vZGVGaWx0ZXIoKTsKLSAgICBOb2RlRmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRp
b24gKik7Ci0gICAgTm9kZUZpbHRlcihOb2RlRmlsdGVySW1wbCAqKTsKLSAgICBOb2RlRmlsdGVy
KGNvbnN0IE5vZGVGaWx0ZXIgJm90aGVyKTsKLSAgICBOb2RlRmlsdGVyICZvcGVyYXRvcj0oY29u
c3QgTm9kZUZpbHRlciAmb3RoZXIpOwotICAgIH5Ob2RlRmlsdGVyKCk7Ci0KLSNlbmRpZgogCiAg
ICAgLyoqCiAgICAgICogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJldHVybmVkIGJ5IHRo
ZSBhY2NlcHROb2RlKCkKQEAgLTEzMCw0NTEgKzEwOSw5IEBAIHB1YmxpYzoKICAgICAgICAgU0hP
V19OT1RBVElPTiAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDgwMAogICAgIH07CiAKLSNpZiAh
S0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgLyoqCi0gICAgICogVGVzdCB3aGV0aGVyIGEg
c3BlY2lmaWVkIG5vZGUgaXMgdmlzaWJsZSBpbiB0aGUgbG9naWNhbCB2aWV3IG9mCi0gICAgICog
YSBUcmVlV2Fsa2VyIG9yIE5vZGVJdGVyYXRvci4gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxl
ZCBieQotICAgICAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBUcmVlV2Fsa2VyIGFuZCBOb2RlSXRl
cmF0b3I7IGl0IGlzIG5vdAotICAgICAqIGludGVuZGVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBm
cm9tIHVzZXIgY29kZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuIFRoZSBub2RlIHRvIGNoZWNr
IHRvIHNlZSBpZiBpdCBwYXNzZXMgdGhlIGZpbHRlciBvcgotICAgICAqIG5vdC4KLSAgICAgKgot
ICAgICAqIEByZXR1cm4gYSBjb25zdGFudCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgbm9kZSBp
cyBhY2NlcHRlZCwKLSAgICAgKiByZWplY3RlZCwgb3Igc2tpcHBlZCwgYXMgZGVmaW5lZCA8YQot
ICAgICAqIGhyZWY9IiNUcmF2ZXJzYWwtTm9kZUZpbHRlci1hY2NlcHROb2RlLWNvbnN0YW50cyI+
IGFib3ZlIDwvYT4gLgotICAgICAqCi0gICAgICovCi0gICAgc2hvcnQgYWNjZXB0Tm9kZShjb25z
dCBOb2RlICYpIGNvbnN0OwotCi0gICAgTm9kZUZpbHRlckltcGwgKmhhbmRsZSgpIGNvbnN0IHsg
cmV0dXJuIGltcGw7IH0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIGltcGwgPT0g
MDsgfQotCi1wcml2YXRlOgotICAgIE5vZGVGaWx0ZXJJbXBsICppbXBsOwotCi0jZW5kaWYKLQot
fTsKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLS8qKgotICogTm9kZUl0ZXJhdG9y
cyBhcmUgdXNlZCB0byBzdGVwIHRocm91Z2ggYSBzZXQgb2Ygbm9kZXMsIGUuZy4gdGhlIHNldAot
ICogb2Ygbm9kZXMgaW4gYSBOb2RlTGlzdCwgdGhlIGRvY3VtZW50IHN1YnRyZWUgZ292ZXJuZWQg
YnkgYQotICogcGFydGljdWxhciBub2RlLCB0aGUgcmVzdWx0cyBvZiBhIHF1ZXJ5LCBvciBhbnkg
b3RoZXIgc2V0IG9mIG5vZGVzLgotICogVGhlIHNldCBvZiBub2RlcyB0byBiZSBpdGVyYXRlZCBp
cyBkZXRlcm1pbmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbgotICogb2YgdGhlIE5vZGVJdGVyYXRv
ci4gRE9NIExldmVsIDIgc3BlY2lmaWVzIGEgc2luZ2xlIE5vZGVJdGVyYXRvcgotICogaW1wbGVt
ZW50YXRpb24gZm9yIGRvY3VtZW50LW9yZGVyIHRyYXZlcnNhbCBvZiBhIGRvY3VtZW50IHN1YnRy
ZWUuCi0gKiBJbnN0YW5jZXMgb2YgdGhlc2UgaXRlcmF0b3JzIGFyZSBjcmVhdGVkIGJ5IGNhbGxp
bmcKLSAqIERvY3VtZW50VHJhdmVyc2FsLmNyZWF0ZU5vZGVJdGVyYXRvcigpLgotICoKLSAqICBB
bnkgSXRlcmF0b3IgdGhhdCByZXR1cm5zIG5vZGVzIG1heSBpbXBsZW1lbnQgdGhlCi0gKiBOb2Rl
SXRlcmF0b3IgaW50ZXJmYWNlLiBVc2VycyBhbmQgdmVuZG9yIGxpYnJhcmllcyBtYXkgYWxzbwot
ICogY2hvb3NlIHRvIGNyZWF0ZSBJdGVyYXRvcnMgdGhhdCBpbXBsZW1lbnQgdGhlIE5vZGVJdGVy
YXRvcgotICogaW50ZXJmYWNlLgotICoKLSAqLwotY2xhc3MgTm9kZUl0ZXJhdG9yCi17Ci1wdWJs
aWM6Ci0gICAgTm9kZUl0ZXJhdG9yKGNvbnN0IE5vZGVJdGVyYXRvciAmb3RoZXIpOwotICAgIE5v
ZGVJdGVyYXRvciAmb3BlcmF0b3I9KGNvbnN0IE5vZGVJdGVyYXRvciAmb3RoZXIpOwotCi0gICAg
fk5vZGVJdGVyYXRvcigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIHJvb3Qgbm9kZSBvZiB0aGUg
Tm9kZUl0ZXJhdG9yLCBhcyBzcGVjaWZpZWQgd2hlbiBpdCB3YXMgY3JlYXRlZC4KLSAgICAgKi8K
LSAgICBOb2RlIHJvb3QoKSBjb25zdDsKLQotICAgIC8qKgotICAgICogVGhpcyBhdHRyaWJ1dGUg
ZGV0ZXJtaW5lcyB3aGljaCBub2RlIHR5cGVzIGFyZSBwcmVzZW50ZWQgdmlhIHRoZQotICAgICog
aXRlcmF0b3IuIFRoZSBhdmFpbGFibGUgc2V0IG9mIGNvbnN0YW50cyBpcyBkZWZpbmVkIGluIHRo
ZSBOb2RlRmlsdGVyCi0gICAgKiBpbnRlcmZhY2UuIE5vZGVzIG5vdCBhY2NlcHRlZCBieSB3aGF0
VG9TaG93IHdpbGwgYmUgc2tpcHBlZCwgYnV0IHRoZWlyCi0gICAgKiBjaGlsZHJlbiBtYXkgc3Rp
bGwgYmUgY29uc2lkZXJlZC4gTm90ZSB0aGF0IHRoaXMgc2tpcCB0YWtlcyBwcmVjZWRlbmNlCi0g
ICAgKiBvdmVyIHRoZSBmaWx0ZXIsIGlmIGFueS4KLSAgICAqLwotICAgIHVuc2lnbmVkIHdoYXRU
b1Nob3coKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBOb2RlRmlsdGVyIHVzZWQgdG8g
c2NyZWVuIG5vZGVzLgotICAgICAqLwotICAgIE5vZGVGaWx0ZXIgZmlsdGVyKCkgY29uc3Q7Ci0K
LSAgICAvKioKLSAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBmbGFnIGRldGVybWluZXMgd2hldGhl
ciB0aGUgY2hpbGRyZW4gb2YgZW50aXR5Ci0gICAgICogcmVmZXJlbmNlIG5vZGVzIGFyZSB2aXNp
YmxlIHRvIHRoZSBpdGVyYXRvci4gSWYgZmFsc2UsIHRoZXkgYW5kCi0gICAgICogdGhlaXIgZGVz
Y2VuZGVudHMgd2lsbCBiZSByZWplY3RlZC4gTm90ZSB0aGF0IHRoaXMgcmVqZWN0aW9uIHRha2Vz
Ci0gICAgICogcHJlY2VkZW5jZSBvdmVyIHdoYXRUb1Nob3cgYW5kIHRoZSBmaWx0ZXIuIEFsc28g
bm90ZSB0aGF0IHRoaXMgaXMKLSAgICAgKiBjdXJyZW50bHkgdGhlIG9ubHkgc2l0dWF0aW9uIHdo
ZXJlIE5vZGVJdGVyYXRvcnMgbWF5IHJlamVjdCBhIGNvbXBsZXRlCi0gICAgICogc3VidHJlZSBy
YXRoZXIgdGhhbiBza2lwcGluZyBpbmRpdmlkdWFsIG5vZGVzLgotICAgICAqCi0gICAgICogVG8g
cHJvZHVjZSBhIHZpZXcgb2YgdGhlIGRvY3VtZW50IHRoYXQgaGFzIGVudGl0eSByZWZlcmVuY2Vz
IGV4cGFuZGVkCi0gICAgICogYW5kIGRvZXMgbm90IGV4cG9zZSB0aGUgZW50aXR5IHJlZmVyZW5j
ZSBub2RlIGl0c2VsZiwgdXNlIHRoZSB3aGF0VG9TaG93Ci0gICAgICogZmxhZ3MgdG8gaGlkZSB0
aGUgZW50aXR5IHJlZmVyZW5jZSBub2RlIGFuZCBzZXQgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyB0
bwotICAgICAqIHRydWUgd2hlbiBjcmVhdGluZyB0aGUgaXRlcmF0b3IuIFRvIHByb2R1Y2UgYSB2
aWV3IG9mIHRoZSBkb2N1bWVudCB0aGF0Ci0gICAgICogaGFzIGVudGl0eSByZWZlcmVuY2Ugbm9k
ZXMgYnV0IG5vIGVudGl0eSBleHBhbnNpb24sIHVzZSB0aGUgd2hhdFRvU2hvdwotICAgICAqIGZs
YWdzIHRvIHNob3cgdGhlIGVudGl0eSByZWZlcmVuY2Ugbm9kZSBhbmQgc2V0IGV4cGFuZEVudGl0
eVJlZmVyZW5jZXMgdG8KLSAgICAgKiBmYWxzZS4KLSAgICAgKi8KLSAgICBib29sIGV4cGFuZEVu
dGl0eVJlZmVyZW5jZXMoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG5l
eHQgbm9kZSBpbiB0aGUgc2V0IGFuZCBhZHZhbmNlcyB0aGUgcG9zaXRpb24gb2YKLSAgICAgKiB0
aGUgSXRlcmF0b3IgaW4gdGhlIHNldC4gQWZ0ZXIgYSBOb2RlSXRlcmF0b3IgaXMgY3JlYXRlZCwg
dGhlCi0gICAgICogZmlyc3QgY2FsbCB0byBuZXh0Tm9kZSgpIHJldHVybnMgdGhlIGZpcnN0IG5v
ZGUgaW4gdGhlIHNldC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5leHQgTm9kZSBpbiB0
aGUgc2V0IGJlaW5nIGl0ZXJhdGVkCi0gICAgICogb3Zlciwgb3IgbnVsbCBpZiB0aGVyZSBhcmUg
bm8gbW9yZSBtZW1iZXJzIGluCi0gICAgICogdGhhdCBzZXQuCi0gICAgICoKLSAgICAgKiBAZXhj
ZXB0aW9uIEV4Y2VwdGlvbnMgZnJvbSB1c2VyIGNvZGUKLSAgICAgKiBBbnkgZXhjZXB0aW9ucyBy
YWlzZWQgYnkgYSB1c2VyLXdyaXR0ZW4gRmlsdGVyIHdpbGwgcHJvcGFnYXRlCi0gICAgICogdGhy
b3VnaC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgbmV4dE5vZGUoKTsKLQotICAgIC8qKgot
ICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIG5vZGUgaW4gdGhlIHNldCBhbmQgbW92ZXMgdGhl
IHBvc2l0aW9uIG9mCi0gICAgICogdGhlIEl0ZXJhdG9yIGJhY2t3YXJkcyBpbiB0aGUgc2V0Lgot
ICAgICAqCi0gICAgICogQHJldHVybiBUaGUgcHJldmlvdXMgTm9kZSBpbiB0aGUgc2V0IGJlaW5n
Ci0gICAgICogaXRlcmF0ZWQgb3Zlciwgb3IgbnVsbCBpZiB0aGVyZSBhcmUgbm8gbW9yZQotICAg
ICAqIG1lbWJlcnMgaW4gdGhhdCBzZXQuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIEV4Y2Vw
dGlvbnMgZnJvbSB1c2VyIGNvZGUKLSAgICAgKiBBbnkgZXhjZXB0aW9ucyByYWlzZWQgYnkgYSB1
c2VyLXdyaXR0ZW4gRmlsdGVyIHdpbGwgcHJvcGFnYXRlCi0gICAgICogdGhyb3VnaC4KLSAgICAg
KgotICAgICAqLwotICAgIE5vZGUgcHJldmlvdXNOb2RlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBE
ZXRhY2hlcyB0aGUgTm9kZUl0ZXJhdG9yIGZyb20gdGhlIHNldCB3aGljaCBpdCBpdGVyYXRlZCBv
dmVyLAotICAgICAqIHJlbGVhc2luZyBhbnkgY29tcHV0YXRpb25hbCByZXNvdXJjZXMgYW5kIHBs
YWNpbmcgdGhlIGl0ZXJhdG9yIGluIHRoZQotICAgICAqIElOVkFMSUQgc3RhdGUuIEFmdGVyIGRl
dGFjaCBoYXMgYmVlbiBpbnZva2VkLCBjYWxscyB0byBuZXh0Tm9kZSBvcgotICAgICAqIHByZXZp
b3VzTm9kZSB3aWxsIHJhaXNlIHRoZSBleGNlcHRpb24gSU5WQUxJRF9TVEFURV9FUlIuCi0gICAg
ICovCi0gICAgdm9pZCBkZXRhY2goKTsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAg
ICAqIG5vdCBwYXJ0IG9mIHRoZSBET00KLSAgICAgKi8KLSAgICBOb2RlIHJlZmVyZW5jZU5vZGUo
KSBjb25zdDsKLSAgICBib29sIHBvaW50ZXJCZWZvcmVSZWZlcmVuY2VOb2RlKCkgY29uc3Q7Ci0g
ICAgTm9kZUl0ZXJhdG9ySW1wbCAqaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gaW1wbDsgfQotICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gaW1wbCA9PSAwOyB9Ci0KLSAgICBmcmllbmQg
Y2xhc3MgTm9kZUl0ZXJhdG9ySW1wbDsKLSAgICBmcmllbmQgY2xhc3MgRG9jdW1lbnQ7Ci0KLSAg
ICBOb2RlSXRlcmF0b3IoTm9kZUl0ZXJhdG9ySW1wbCAqKTsKLQotcHJpdmF0ZToKLSAgICBOb2Rl
SXRlcmF0b3IoKTsKLSAgICBOb2RlSXRlcmF0b3JJbXBsICppbXBsOwotfTsKLQotCi0vKioKLSAq
IFRyZWVXYWxrZXIgb2JqZWN0cyBhcmUgdXNlZCB0byBuYXZpZ2F0ZSBhIGRvY3VtZW50Ci0gKiB0
cmVlIG9yIHN1YnRyZWUgdXNpbmcgdGhlIHZpZXcgb2YgdGhlIGRvY3VtZW50IGRlZmluZWQgYnkg
aXRzCi0gKiB3aGF0VG9TaG93IGZsYWdzIGFuZCBhbnkgZmlsdGVycyB0aGF0IGFyZSBkZWZpbmVk
Ci0gKiBmb3IgdGhlIFRyZWVXYWxrZXIgLiBBbnkgZnVuY3Rpb24gd2hpY2ggcGVyZm9ybXMKLSAq
IG5hdmlnYXRpb24gdXNpbmcgYSBUcmVlV2Fsa2VyIHdpbGwgYXV0b21hdGljYWxseQotICogc3Vw
cG9ydCBhbnkgdmlldyBkZWZpbmVkIGJ5IGEgVHJlZVdhbGtlciAuCi0gKgotICogIE9taXR0aW5n
IG5vZGVzIGZyb20gdGhlIGxvZ2ljYWwgdmlldyBvZiBhIHN1YnRyZWUgY2FuIHJlc3VsdCBpbiBh
Ci0gKiBzdHJ1Y3R1cmUgdGhhdCBpcyBzdWJzdGFudGlhbGx5IGRpZmZlcmVudCBmcm9tIHRoZSBz
YW1lIHN1YnRyZWUgaW4KLSAqIHRoZSBjb21wbGV0ZSwgdW5maWx0ZXJlZCBkb2N1bWVudC4gTm9k
ZXMgdGhhdCBhcmUgc2libGluZ3MgaW4gdGhlCi0gKiBUcmVlV2Fsa2VyIHZpZXcgbWF5IGJlIGNo
aWxkcmVuIG9mIGRpZmZlcmVudCwgd2lkZWx5IHNlcGFyYXRlZAotICogbm9kZXMgaW4gdGhlIG9y
aWdpbmFsIHZpZXcuIEZvciBpbnN0YW5jZSwgY29uc2lkZXIgYSBGaWx0ZXIgdGhhdAotICogc2tp
cHMgYWxsIG5vZGVzIGV4Y2VwdCBmb3IgVGV4dCBub2RlcyBhbmQgdGhlIHJvb3Qgbm9kZSBvZiBh
Ci0gKiBkb2N1bWVudC4gSW4gdGhlIGxvZ2ljYWwgdmlldyB0aGF0IHJlc3VsdHMsIGFsbCB0ZXh0
IG5vZGVzIHdpbGwgYmUKLSAqIHNpYmxpbmdzIGFuZCBhcHBlYXIgYXMgZGlyZWN0IGNoaWxkcmVu
IG9mIHRoZSByb290IG5vZGUsIG5vIG1hdHRlcgotICogaG93IGRlZXBseSBuZXN0ZWQgdGhlIHN0
cnVjdHVyZSBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuCi0gKgotICovCi1jbGFzcyBUcmVlV2Fs
a2VyCi17Ci1wdWJsaWM6Ci0gICAgVHJlZVdhbGtlcihjb25zdCBUcmVlV2Fsa2VyICZvdGhlcik7
Ci0gICAgVHJlZVdhbGtlciAmb3BlcmF0b3I9KGNvbnN0IFRyZWVXYWxrZXIgJm90aGVyKTsKLSAg
ICB+VHJlZVdhbGtlcigpOwotCi0gICAgLyoqCi0gICAgICogVGhlIHJvb3Qgbm9kZSBvZiB0aGUg
VHJlZVdhbGtlciwgYXMgc3BlY2lmaWVkIHdoZW4gaXQgd2FzIGNyZWF0ZWQuCi0gICAgICovCi0g
ICAgTm9kZSByb290KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGF0dHJpYnV0ZSBk
ZXRlcm1pbmVzIHdoaWNoIG5vZGUgdHlwZXMgYXJlIHByZXNlbnRlZCB2aWEgdGhlCi0gICAgICog
VHJlZVdhbGtlci4gVGhlIGF2YWlsYWJsZSBzZXQgb2YgY29uc3RhbnRzIGlzIGRlZmluZWQgaW4g
dGhlIE5vZGVGaWx0ZXIKLSAgICAgKiBpbnRlcmZhY2UuIE5vZGVzIG5vdCBhY2NlcHRlZCBieSB3
aGF0VG9TaG93IHdpbGwgYmUgc2tpcHBlZCwgYnV0IHRoZWlyCi0gICAgICogY2hpbGRyZW4gbWF5
IHN0aWxsIGJlIGNvbnNpZGVyZWQuIE5vdGUgdGhhdCB0aGlzIHNraXAgdGFrZXMgcHJlY2VkZW5j
ZQotICAgICAqIG92ZXIgdGhlIGZpbHRlciwgaWYgYW55LgotICAgICAqLwotICAgIHVuc2lnbmVk
IHdoYXRUb1Nob3coKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBmaWx0ZXIgdXNlZCB0
byBzY3JlZW4gbm9kZXMuCi0gICAgICovCi0gICAgTm9kZUZpbHRlciBmaWx0ZXIoKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIFRoZSB2YWx1ZSBvZiB0aGlzIGZsYWcgZGV0ZXJtaW5lcyB3aGV0
aGVyIHRoZSBjaGlsZHJlbiBvZiBlbnRpdHkKLSAgICAgKiByZWZlcmVuY2Ugbm9kZXMgYXJlIHZp
c2libGUgdG8gdGhlIFRyZWVXYWxrZXIuIElmIGZhbHNlLCB0aGV5IGFuZCB0aGVpcgotICAgICAq
IGRlc2NlbmRlbnRzIHdpbGwgYmUgcmVqZWN0ZWQuIE5vdGUgdGhhdCB0aGlzIHJlamVjdGlvbiB0
YWtlcyBwcmVjZWRlbmNlCi0gICAgICogb3ZlciB3aGF0VG9TaG93IGFuZCB0aGUgZmlsdGVyLCBp
ZiBhbnkuCi0gICAgICoKLSAgICAgKiBUbyBwcm9kdWNlIGEgdmlldyBvZiB0aGUgZG9jdW1lbnQg
dGhhdCBoYXMgZW50aXR5IHJlZmVyZW5jZXMgZXhwYW5kZWQKLSAgICAgKiBhbmQgZG9lcyBub3Qg
ZXhwb3NlIHRoZSBlbnRpdHkgcmVmZXJlbmNlIG5vZGUgaXRzZWxmLCB1c2UgdGhlIHdoYXRUb1No
b3cKLSAgICAgKiBmbGFncyB0byBoaWRlIHRoZSBlbnRpdHkgcmVmZXJlbmNlIG5vZGUgYW5kIHNl
dCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzCi0gICAgICogdG8gdHJ1ZSB3aGVuIGNyZWF0aW5nIHRo
ZSBUcmVlV2Fsa2VyLiBUbyBwcm9kdWNlIGEgdmlldyBvZiB0aGUgZG9jdW1lbnQKLSAgICAgKiB0
aGF0IGhhcyBlbnRpdHkgcmVmZXJlbmNlIG5vZGVzIGJ1dCBubyBlbnRpdHkgZXhwYW5zaW9uLCB1
c2UgdGhlCi0gICAgICogd2hhdFRvU2hvdyBmbGFncyB0byBzaG93IHRoZSBlbnRpdHkgcmVmZXJl
bmNlIG5vZGUgYW5kIHNldAotICAgICAqIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMgdG8gZmFsc2Uu
Ci0gICAgICovCi0gICAgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKCkgY29uc3Q7Ci0KLSAg
ICAvKioKLSAgICAgKiBUaGUgbm9kZSBhdCB3aGljaCB0aGUgVHJlZVdhbGtlciBpcyBjdXJyZW50
bHkgcG9zaXRpb25lZC4KLSAgICAgKiBBbHRlcmF0aW9ucyB0byB0aGUgRE9NIHRyZWUgbWF5IGNh
dXNlIHRoZSBjdXJyZW50IG5vZGUgdG8gbm8gbG9uZ2VyIGJlCi0gICAgICogYWNjZXB0ZWQgYnkg
dGhlIFRyZWVXYWxrZXIncyBhc3NvY2lhdGVkIGZpbHRlci4gY3VycmVudE5vZGUgbWF5IGFsc28g
YmUKLSAgICAgKiBleHBsaWNpdGx5IHNldCB0byBhbnkgbm9kZSwgd2hldGhlciBvciBub3QgaXQg
aXMgd2l0aGluIHRoZSBzdWJ0cmVlCi0gICAgICogc3BlY2lmaWVkIGJ5IHRoZSByb290IG5vZGUg
b3Igd291bGQgYmUgYWNjZXB0ZWQgYnkgdGhlIGZpbHRlciBhbmQKLSAgICAgKiB3aGF0VG9TaG93
IGZsYWdzLiBGdXJ0aGVyIHRyYXZlcnNhbCBvY2N1cnMgcmVsYXRpdmUgdG8gY3VycmVudE5vZGUg
ZXZlbgotICAgICAqIGlmIGl0IGlzIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IHZpZXcsIGJ5IGFw
cGx5aW5nIHRoZSBmaWx0ZXJzIGluIHRoZQotICAgICAqIHJlcXVlc3RlZCBkaXJlY3Rpb247IGlm
IG5vIHRyYXZlcnNhbCBpcyBwb3NzaWJsZSwgY3VycmVudE5vZGUgaXMgbm90IGNoYW5nZWQuCi0g
ICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5PVF9TVVBQT1JU
RURfRVJSOiBSYWlzZWQgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHNldCBjdXJyZW50Tm9kZSB0
byBudWxsLgotICAgICAqLwotICAgIE5vZGUgY3VycmVudE5vZGUoKSBjb25zdDsKLQotICAgIC8q
KgotICAgICAqIHNlZSBjdXJyZW50Tm9kZQotICAgICAqLwotICAgIHZvaWQgc2V0Q3VycmVudE5v
ZGUoY29uc3QgTm9kZSAmX2N1cnJlbnROb2RlKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRv
IGFuZCByZXR1cm5zIHRoZSBwYXJlbnQgbm9kZSBvZiB0aGUgY3VycmVudCBub2RlLiBJZgotICAg
ICAqIHRoZXJlIGlzIG5vIHBhcmVudCBub2RlLCBvciBpZiB0aGUgY3VycmVudCBub2RlIGlzIHRo
ZSByb290Ci0gICAgICogbm9kZSBmcm9tIHdoaWNoIHRoaXMgVHJlZVdhbGtlciB3YXMgY3JlYXRl
ZCwgcmV0YWlucyB0aGUKLSAgICAgKiBjdXJyZW50IHBvc2l0aW9uIGFuZCByZXR1cm5zIG51bGwu
Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuZXcgcGFyZW50IG5vZGUsIG9yIG51bGwgaWYg
dGhlIGN1cnJlbnQgbm9kZSBoYXMgbm8KLSAgICAgKiBwYXJlbnQgaW4gdGhlIFRyZWVXYWxrZXIn
cyBsb2dpY2FsIHZpZXcuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbnMgZnJv
bSB1c2VyIGNvZGUKLSAgICAgKiBBbnkgZXhjZXB0aW9ucyByYWlzZWQgYnkgYSB1c2VyLXdyaXR0
ZW4gRmlsdGVyIHdpbGwgcHJvcGFnYXRlCi0gICAgICogdGhyb3VnaC4KLSAgICAgKgotICAgICAq
LwotICAgIE5vZGUgcGFyZW50Tm9kZSgpOwotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIFRy
ZWVXYWxrZXIgdG8gdGhlIGZpcnN0IGNoaWxkIG9mIHRoZQotICAgICAqIGN1cnJlbnQgbm9kZSwg
YW5kIHJldHVybnMgdGhlIG5ldyBub2RlLiBJZiB0aGUgY3VycmVudCBub2RlIGhhcwotICAgICAq
IG5vIGNoaWxkcmVuLCByZXR1cm5zIG51bGwgLCBhbmQgcmV0YWlucyB0aGUKLSAgICAgKiBjdXJy
ZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuZXcgbm9kZSwgb3IgbnVsbCBp
ZiB0aGUgY3VycmVudAotICAgICAqIG5vZGUgaGFzIG5vIGNoaWxkcmVuLgotICAgICAqCi0gICAg
ICogQGV4Y2VwdGlvbiBFeGNlcHRpb25zIGZyb20gdXNlciBjb2RlCi0gICAgICogQW55IGV4Y2Vw
dGlvbnMgcmFpc2VkIGJ5IGEgdXNlci13cml0dGVuIEZpbHRlciB3aWxsIHByb3BhZ2F0ZQotICAg
ICAqIHRocm91Z2guCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIGZpcnN0Q2hpbGQoKTsKLQot
ICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBUcmVlV2Fsa2VyIHRvIHRoZSBsYXN0IGNoaWxkIG9m
IHRoZQotICAgICAqIGN1cnJlbnQgbm9kZSwgYW5kIHJldHVybnMgdGhlIG5ldyBub2RlLiBJZiB0
aGUgY3VycmVudCBub2RlIGhhcwotICAgICAqIG5vIGNoaWxkcmVuLCByZXR1cm5zIG51bGwgLCBh
bmQgcmV0YWlucyB0aGUKLSAgICAgKiBjdXJyZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiBAcmV0
dXJuIFRoZSBuZXcgbm9kZSwgb3IgbnVsbCBpZiB0aGUgY3VycmVudAotICAgICAqIG5vZGUgaGFz
IG5vIGNoaWxkcmVuLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBFeGNlcHRpb25zIGZyb20g
dXNlciBjb2RlCi0gICAgICogQW55IGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGEgdXNlci13cml0dGVu
IEZpbHRlciB3aWxsIHByb3BhZ2F0ZQotICAgICAqIHRocm91Z2guCi0gICAgICoKLSAgICAgKi8K
LSAgICBOb2RlIGxhc3RDaGlsZCgpOwotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIFRyZWVX
YWxrZXIgdG8gdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YKLSAgICAgKiB0aGUgY3VycmVudCBub2Rl
LCBhbmQgcmV0dXJucyB0aGUgbmV3IG5vZGUuIElmIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgKiBo
YXMgbm8gcHJldmlvdXMgc2libGluZywgcmV0dXJucyBudWxsICwgYW5kCi0gICAgICogcmV0YWlu
cyB0aGUgY3VycmVudCBub2RlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbmV3IG5vZGUs
IG9yIG51bGwgaWYgdGhlIGN1cnJlbnQKLSAgICAgKiBub2RlIGhhcyBubyBwcmV2aW91cyBzaWJs
aW5nLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBFeGNlcHRpb25zIGZyb20gdXNlciBjb2Rl
Ci0gICAgICogQW55IGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGEgdXNlci13cml0dGVuIEZpbHRlciB3
aWxsIHByb3BhZ2F0ZQotICAgICAqIHRocm91Z2guCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2Rl
IHByZXZpb3VzU2libGluZygpOwotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIFRyZWVXYWxr
ZXIgdG8gdGhlIG5leHQgc2libGluZyBvZiB0aGUKLSAgICAgKiBjdXJyZW50IG5vZGUsIGFuZCBy
ZXR1cm5zIHRoZSBuZXcgbm9kZS4gSWYgdGhlIGN1cnJlbnQgbm9kZSBoYXMKLSAgICAgKiBubyBu
ZXh0IHNpYmxpbmcsIHJldHVybnMgbnVsbCAsIGFuZCByZXRhaW5zIHRoZQotICAgICAqIGN1cnJl
bnQgbm9kZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBub2RlLCBvciBudWxsIGlm
IHRoZSBjdXJyZW50Ci0gICAgICogbm9kZSBoYXMgbm8gbmV4dCBzaWJsaW5nLgotICAgICAqCi0g
ICAgICogQGV4Y2VwdGlvbiBFeGNlcHRpb25zIGZyb20gdXNlciBjb2RlCi0gICAgICogQW55IGV4
Y2VwdGlvbnMgcmFpc2VkIGJ5IGEgdXNlci13cml0dGVuIEZpbHRlciB3aWxsIHByb3BhZ2F0ZQot
ICAgICAqIHRocm91Z2guCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIG5leHRTaWJsaW5nKCk7
Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgVHJlZVdhbGtlciB0byB0aGUgcHJldmlvdXMg
bm9kZSBpbgotICAgICAqIGRvY3VtZW50IG9yZGVyIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IG5v
ZGUsIGFuZCByZXR1cm5zIHRoZQotICAgICAqIG5ldyBub2RlLiBJZiB0aGUgY3VycmVudCBub2Rl
IGhhcyBubyBwcmV2aW91cyBub2RlLCByZXR1cm5zCi0gICAgICogbnVsbCAsIGFuZCByZXRhaW5z
IHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuZXcgbm9kZSwg
b3IgbnVsbCBpZiB0aGUgY3VycmVudAotICAgICAqIG5vZGUgaGFzIG5vIHByZXZpb3VzIG5vZGUu
Ci0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbnMgZnJvbSB1c2VyIGNvZGUKLSAg
ICAgKiBBbnkgZXhjZXB0aW9ucyByYWlzZWQgYnkgYSB1c2VyLXdyaXR0ZW4gRmlsdGVyIHdpbGwg
cHJvcGFnYXRlCi0gICAgICogdGhyb3VnaC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgcHJl
dmlvdXNOb2RlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgVHJlZVdhbGtlciB0byB0
aGUgbmV4dCBub2RlIGluCi0gICAgICogZG9jdW1lbnQgb3JkZXIgcmVsYXRpdmUgdG8gdGhlIGN1
cnJlbnQgbm9kZSwgYW5kIHJldHVybnMgdGhlCi0gICAgICogbmV3IG5vZGUuIElmIHRoZSBjdXJy
ZW50IG5vZGUgaGFzIG5vIG5leHQgbm9kZSwgcmV0dXJucwotICAgICAqIG51bGwgLCBhbmQgcmV0
YWlucyB0aGUgY3VycmVudCBub2RlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbmV3IG5v
ZGUsIG9yIG51bGwgaWYgdGhlIGN1cnJlbnQKLSAgICAgKiBub2RlIGhhcyBubyBuZXh0IG5vZGUu
Ci0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbnMgZnJvbSB1c2VyIGNvZGUKLSAg
ICAgKiBBbnkgZXhjZXB0aW9ucyByYWlzZWQgYnkgYSB1c2VyLXdyaXR0ZW4gRmlsdGVyIHdpbGwg
cHJvcGFnYXRlCi0gICAgICogdGhyb3VnaC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgbmV4
dE5vZGUoKTsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqIG5vdCBwYXJ0IG9m
IHRoZSBET00KLSAgICAgKi8KLSAgICBUcmVlV2Fsa2VySW1wbCAqaGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gaW1wbDsgfQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gaW1wbCA9PSAw
OyB9Ci0KLSAgICBUcmVlV2Fsa2VyKFRyZWVXYWxrZXJJbXBsICopOwotCi0gICAgZnJpZW5kIGNs
YXNzIERvY3VtZW50OwotICAgIGZyaWVuZCBjbGFzcyBUcmVlV2Fsa2VySW1wbDsKLQotcHJpdmF0
ZToKLSAgICBUcmVlV2Fsa2VyKCk7Ci0gICAgVHJlZVdhbGtlckltcGwgKmltcGw7Ci19OwotCi0K
LS8vICMjIyBub3Qgc3VyZSBpZiB0aGlzIHRoaXMgY2xhc3MgaXMgcmVhbGx5IG5lZWRlZCAtIGJv
dGggbWV0aG9kcyBhcmUgaW4KLS8vIERvY3VtZW50Ci0KLS8qKgotICogRG9jdW1lbnRUcmF2ZXJz
YWwgY29udGFpbnMgbWV0aG9kcyB0aGF0IGNyZWF0ZXMKLSAqIEl0ZXJhdG9ycyB0byB0cmF2ZXJz
ZSBhIG5vZGUgYW5kIGl0cyBjaGlsZHJlbiBpbiBkb2N1bWVudCBvcmRlcgotICogKGRlcHRoIGZp
cnN0LCBwcmUtb3JkZXIgdHJhdmVyc2FsLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBvcmRl
cgotICogaW4gd2hpY2ggdGhlIHN0YXJ0IHRhZ3Mgb2NjdXIgaW4gdGhlIHRleHQgcmVwcmVzZW50
YXRpb24gb2YgdGhlCi0gKiBkb2N1bWVudCkuCi0gKgotICoKLWNsYXNzIERvY3VtZW50VHJhdmVy
c2FsIC8vIDogcHVibGljIERvY3VtZW50ID8KLXsKLXB1YmxpYzoKLSAgICBEb2N1bWVudFRyYXZl
cnNhbCgpOwotICAgIERvY3VtZW50VHJhdmVyc2FsKGNvbnN0IERvY3VtZW50VHJhdmVyc2FsICZv
dGhlcik7Ci0KLSAgICBEb2N1bWVudFRyYXZlcnNhbCAmIG9wZXJhdG9yID0gKGNvbnN0IERvY3Vt
ZW50VHJhdmVyc2FsICZvdGhlcik7CiAKLSAgICB+RG9jdW1lbnRUcmF2ZXJzYWwoKTsKLQotICAg
ICAqKgotICAgICAqCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcm9vdCBUaGUgbm9kZSB3aGljaCB3
aWxsIGJlIGl0ZXJhdGVkIHRvZ2V0aGVyIHdpdGggaXRzCi0gICAgICogY2hpbGRyZW4uIFRoZSBp
dGVyYXRvciBpcyBpbml0aWFsbHkgcG9zaXRpb25lZCBqdXN0IGJlZm9yZSB0aGlzCi0gICAgICog
bm9kZS4gVGhlIHdoYXRUb1Nob3cgZmxhZ3MgYW5kIHRoZSBmaWx0ZXIsIGlmIGFueSwgYXJlIG5v
dAotICAgICAqIGNvbnNpZGVyZWQgd2hlbiBzZXR0aW5nIHRoaXMgcG9zaXRpb24uCi0gICAgICoK
LSAgICAgKiBAcGFyYW0gd2hhdFRvU2hvdyBUaGlzIGZsYWcgc3BlY2lmaWVzIHdoaWNoIG5vZGUg
dHlwZXMgbWF5Ci0gICAgICogYXBwZWFyIGluIHRoZSBsb2dpY2FsIHZpZXcgb2YgdGhlIHRyZWUg
cHJlc2VudGVkIGJ5IHRoZQotICAgICAqIEl0ZXJhdG9yLiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9m
IEl0ZXJhdG9yIGZvciB0aGUgc2V0IG9mCi0gICAgICogcG9zc2libGUgdmFsdWVzLiBUaGVzZSBm
bGFncyBjYW4gYmUgY29tYmluZWQgdXNpbmcgT1IuCi0gICAgICoKLSAgICAgKiAgVGhlc2UgZmxh
Z3MgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIE9SIC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBmaWx0
ZXIgVGhlIEZpbHRlciB0byBiZSB1c2VkIHdpdGggdGhpcyBUcmVlV2Fsa2VyLCBvcgotICAgICAq
IG51bGwgdG8gaW5kaWNhdGUgbm8gZmlsdGVyLgotICAgICAqCi0gICAgICogQHBhcmFtIGV4cGFu
ZEVudGl0eVJlZmVyZW5jZXMgVGhlIHZhbHVlIG9mIHRoaXMgZmxhZwotICAgICAqIGRldGVybWlu
ZXMgd2hldGhlciBlbnRpdHkgcmVmZXJlbmNlIG5vZGVzIGFyZSBleHBhbmRlZC4KLSAgICAgKgot
ICAgICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgTm9kZUl0ZXJhdG9yIC4KLSAgICAgKgot
ICAgICAqCi0gICAgTm9kZUl0ZXJhdG9yIGNyZWF0ZU5vZGVJdGVyYXRvciAoIGNvbnN0IE5vZGUg
JnJvb3QsIGludCB3aGF0VG9TaG93LAotCQkJCSAgICAgIGNvbnN0IE5vZGVGaWx0ZXIgJmZpbHRl
ciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzICk7Ci0KLSAgICAgKioKLSAgICAgKiBDcmVh
dGUgYSBuZXcgVHJlZVdhbGtlciBvdmVyIHRoZSBzdWJ0cmVlIHJvb3RlZCBieSB0aGUKLSAgICAg
KiBzcGVjaWZpZWQgbm9kZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSByb290IFRoZSBub2RlIHdo
aWNoIHdpbGwgc2VydmUgYXMgdGhlIHJvb3QgZm9yIHRoZQotICAgICAqIFRyZWVXYWxrZXIgLiBU
aGUgY3VycmVudE5vZGUgb2YgdGhlIFRyZWVXYWxrZXIKLSAgICAgKiBpcyBzZXQgdG8gdGhpcyBu
b2RlLiBUaGUgd2hhdFRvU2hvdyBmbGFncyBhbmQgdGhlIE5vZGVGaWx0ZXIKLSAgICAgKiBhcmUg
bm90IGNvbnNpZGVyZWQgd2hlbiBzZXR0aW5nIHRoaXMgdmFsdWU7IGFueSBub2RlIHR5cGUgd2ls
bAotICAgICAqIGJlIGFjY2VwdGVkIGFzIHRoZSByb290LiBUaGUgcm9vdCBtdXN0IG5vdCBiZSBu
dWxsLgotICAgICAqCi0gICAgICogQHBhcmFtIHdoYXRUb1Nob3cgVGhpcyBmbGFnIHNwZWNpZmll
cyB3aGljaCBub2RlIHR5cGVzIG1heQotICAgICAqIGFwcGVhciBpbiB0aGUgbG9naWNhbCB2aWV3
IG9mIHRoZSB0cmVlIHByZXNlbnRlZCBieSB0aGUKLSAgICAgKiBJdGVyYXRvci4gU2VlIHRoZSBk
ZXNjcmlwdGlvbiBvZiBUcmVlV2Fsa2VyIGZvciB0aGUgc2V0IG9mCi0gICAgICogcG9zc2libGUg
dmFsdWVzLiBUaGVzZSBmbGFncyBjYW4gYmUgY29tYmluZWQgdXNpbmcgT1IuCi0gICAgICoKLSAg
ICAgKiAgVGhlc2UgZmxhZ3MgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIE9SIC4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSBmaWx0ZXIgVGhlIEZpbHRlciB0byBiZSB1c2VkIHdpdGggdGhpcyBUcmVlV2Fs
a2VyLCBvcgotICAgICAqIG51bGwgdG8gaW5kaWNhdGUgbm8gZmlsdGVyLgotICAgICAqCi0gICAg
ICogQHBhcmFtIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMgVGhlIHZhbHVlIG9mIHRoaXMgZmxhZwot
ICAgICAqIGRldGVybWluZXMgd2hldGhlciBlbnRpdHkgcmVmZXJlbmNlIG5vZGVzIGFyZSBleHBh
bmRlZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5ld2x5IGNyZWF0ZWQgVHJlZVdhbGtl
ciAuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIFJhaXNl
cyB0aGUgZXhjZXB0aW9uIE5PVF9TVVBQT1JURURfRVJSIGlmIHRoZSBzcGVjaWZpZWQgcm9vdAot
ICAgICAqIG5vZGUgaXMgbnVsbC4KLSAgICAgKgotICAgICAqCi0gICAgVHJlZVdhbGtlciBjcmVh
dGVUcmVlV2Fsa2VyICggY29uc3QgTm9kZSAmcm9vdCwgaW50IHdoYXRUb1Nob3csCi0JCQkJICBj
b25zdCBOb2RlRmlsdGVyICZmaWx0ZXIsIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyApOwog
fTsKLSovCiAKLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZQogCkluZGV4OiBraHRtbC9kb20vZG9t
X2V4Y2VwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9kb21fZXhjZXB0aW9uLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11
IC1yMS41IGtodG1sL2RvbS9kb21fZXhjZXB0aW9uLmgKLS0tIGtodG1sL2RvbS9kb21fZXhjZXB0
aW9uLmgJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS41CisrKyBraHRtbC9kb20vZG9tX2V4
Y2VwdGlvbi5oCTI5IE5vdiAyMDA1IDEyOjQxOjI4IC0wMDAwCkBAIC01NywxNyArNTcsNiBAQCBj
bGFzcyBET01FeGNlcHRpb24KIHsKIHB1YmxpYzoKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNf
RE9NCi0KLSAgICBET01FeGNlcHRpb24odW5zaWduZWQgc2hvcnQgX2NvZGUpIHsgY29kZSA9IF9j
b2RlOyB9Ci0gICAgRE9NRXhjZXB0aW9uKGNvbnN0IERPTUV4Y2VwdGlvbiAmb3RoZXIpIHsgY29k
ZSA9IG90aGVyLmNvZGU7IH0KLQotICAgIERPTUV4Y2VwdGlvbiAmIG9wZXJhdG9yID0gKGNvbnN0
IERPTUV4Y2VwdGlvbiAmb3RoZXIpCi0JeyBjb2RlID0gb3RoZXIuY29kZTsgcmV0dXJuICp0aGlz
OyB9Ci0KLSAgICB2aXJ0dWFsIH5ET01FeGNlcHRpb24oKSB7fQotCi0jZW5kaWYKIAogICAgIC8q
KgogICAgICAqIEFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBlcnJvciBnZW5lcmF0
ZWQuCkBAIC05MSwxMSArODAsNiBAQCBwdWJsaWM6CiAgICAgICAgIElOVkFMSURfQUNDRVNTX0VS
UiA9IDE1CiAgICAgfTsKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICB1bnNp
Z25lZCBzaG9ydCBjb2RlOwotCi0jZW5kaWYKIAogfTsKIApJbmRleDoga2h0bWwvZG9tL2RvbV9t
aXNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20v
ZG9tX21pc2MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtcCAtdSAtcjEuOCBr
aHRtbC9kb20vZG9tX21pc2MuY3BwCi0tLSBraHRtbC9kb20vZG9tX21pc2MuY3BwCTMgT2N0IDIw
MDUgMjE6MTI6MTEgLTAwMDAJMS44CisrKyBraHRtbC9kb20vZG9tX21pc2MuY3BwCTI5IE5vdiAy
MDA1IDEyOjQxOjI4IC0wMDAwCkBAIC0zMCwxMyArMzAsNSBAQCBEb21TaGFyZWQ6On5Eb21TaGFy
ZWQoKQogICAvLyBkZWxpYmVyYXRlbHkgbGVmdCBibGFuawogfQogCi0jaWYgIUtIVE1MX05PX0NQ
TFVTUExVU19ET00KLQotYm9vbCBEb21TaGFyZWQ6OmRlbGV0ZU1lKCkKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotI2VuZGlmCiAKIH0KSW5kZXg6IGtodG1sL2RvbS9kb21fbWlzYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21fbWlzYy5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIGtodG1sL2RvbS9kb21f
bWlzYy5oCi0tLSBraHRtbC9kb20vZG9tX21pc2MuaAkxOSBTZXAgMjAwNSAxODo1MjoxMCAtMDAw
MAkxLjEwCisrKyBraHRtbC9kb20vZG9tX21pc2MuaAkyOSBOb3YgMjAwNSAxMjo0MToyOCAtMDAw
MApAQCAtMzcsMTMgKzM3LDcgQEAgcHVibGljOgogICBEb21TaGFyZWQoKSA6IF9yZWYoIDAgKSB7
fQogICB2aXJ0dWFsIH5Eb21TaGFyZWQoKTsKIAotI2lmIEtIVE1MX05PX0NQTFVTUExVU19ET00K
ICAgYm9vbCBkZWxldGVNZSgpIHsgcmV0dXJuIHRydWU7IH0KLSNlbHNlCi0gIC8qIE92ZXJsb2Fk
IHRoaXMgZnVuY3Rpb24gaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgZGVsZXRpb24gYmVoYXZpb3Vy
Ci0gICAqLwotICB2aXJ0dWFsIGJvb2wgZGVsZXRlTWUoKTsKLSNlbmRpZgogCiAgIHZvaWQgcmVm
KCkgeyBfcmVmKys7IH0KICAgdm9pZCBkZXJlZigpIHsgaWYoX3JlZikgX3JlZi0tOyBpZighX3Jl
ZiAmJiBkZWxldGVNZSgpKSBkZWxldGUgdGhpczsgfQpJbmRleDoga2h0bWwvZG9tL2RvbV9ub2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9u
b2RlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtcCAtdSAtcjEuMTYga2h0bWwv
ZG9tL2RvbV9ub2RlLmgKLS0tIGtodG1sL2RvbS9kb21fbm9kZS5oCTIxIE5vdiAyMDA1IDAxOjE5
OjU0IC0wMDAwCTEuMTYKKysrIGtodG1sL2RvbS9kb21fbm9kZS5oCTI5IE5vdiAyMDA1IDEyOjQx
OjI4IC0wMDAwCkBAIC0yOSwyMjUgKzI5LDkgQEAKICNpZm5kZWYgX0RPTV9Ob2RlX2hfCiAjZGVm
aW5lIF9ET01fTm9kZV9oXwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotI2luY2x1
ZGUgPHFzdHJpbmcuaD4KLQotY2xhc3MgUVJlY3Q7Ci0KLSNlbmRpZgogCiBuYW1lc3BhY2UgRE9N
IHsKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLWNsYXNzIE5vZGU7Ci1jbGFzcyBE
T01TdHJpbmc7Ci1jbGFzcyBOb2RlSW1wbDsKLWNsYXNzIE5hbWVkTm9kZU1hcEltcGw7Ci1jbGFz
cyBFdmVudExpc3RlbmVyOwotY2xhc3MgRXZlbnQ7Ci0KLS8qKgotICogT2JqZWN0cyBpbXBsZW1l
bnRpbmcgdGhlIDxjb2RlPiBOYW1lZE5vZGVNYXAgPC9jb2RlPiBpbnRlcmZhY2UgYXJlCi0gKiB1
c2VkIHRvIHJlcHJlc2VudCBjb2xsZWN0aW9ucyBvZiBub2RlcyB0aGF0IGNhbiBiZSBhY2Nlc3Nl
ZCBieQotICogbmFtZS4gTm90ZSB0aGF0IDxjb2RlPiBOYW1lZE5vZGVNYXAgPC9jb2RlPiBkb2Vz
IG5vdCBpbmhlcml0IGZyb20KLSAqIDxjb2RlPiBOb2RlTGlzdCA8L2NvZGU+IDsgPGNvZGU+IE5h
bWVkTm9kZU1hcCA8L2NvZGU+IHMgYXJlIG5vdAotICogbWFpbnRhaW5lZCBpbiBhbnkgcGFydGlj
dWxhciBvcmRlci4gT2JqZWN0cyBjb250YWluZWQgaW4gYW4gb2JqZWN0Ci0gKiBpbXBsZW1lbnRp
bmcgPGNvZGU+IE5hbWVkTm9kZU1hcCA8L2NvZGU+IG1heSBhbHNvIGJlIGFjY2Vzc2VkIGJ5IGFu
Ci0gKiBvcmRpbmFsIGluZGV4LCBidXQgdGhpcyBpcyBzaW1wbHkgdG8gYWxsb3cgY29udmVuaWVu
dCBlbnVtZXJhdGlvbgotICogb2YgdGhlIGNvbnRlbnRzIG9mIGEgPGNvZGU+IE5hbWVkTm9kZU1h
cCA8L2NvZGU+ICwgYW5kIGRvZXMgbm90Ci0gKiBpbXBseSB0aGF0IHRoZSBET00gc3BlY2lmaWVz
IGFuIG9yZGVyIHRvIHRoZXNlIE5vZGVzLgotICoKLSAqLwotY2xhc3MgTmFtZWROb2RlTWFwCi17
Ci1wdWJsaWM6Ci0gICAgTmFtZWROb2RlTWFwKCk7Ci0gICAgTmFtZWROb2RlTWFwKGNvbnN0IE5h
bWVkTm9kZU1hcCAmb3RoZXIpOwotCi0gICAgTmFtZWROb2RlTWFwICYgb3BlcmF0b3IgPSAoY29u
c3QgTmFtZWROb2RlTWFwICZvdGhlcik7Ci0KLSAgICB+TmFtZWROb2RlTWFwKCk7Ci0KLSAgICAv
KioKLSAgICAgKiBUaGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBtYXAuIFRoZSByYW5nZSBvZiB2
YWxpZCBjaGlsZCBub2RlCi0gICAgICogaW5kaWNlcyBpcyAwIHRvIDxjb2RlPiBsZW5ndGgtMSA8
L2NvZGU+IGluY2x1c2l2ZS4KLSAgICAgKgotICAgICAqLwotICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmVzIGEgbm9kZSBzcGVjaWZpZWQgYnkg
bmFtZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgYSBub2RlIHRvIHJldHJp
ZXZlLgotICAgICAqCi0gICAgICogQHJldHVybiBBIDxjb2RlPiBOb2RlIDwvY29kZT4gKG9mIGFu
eSB0eXBlKSB3aXRoIHRoZSBzcGVjaWZpZWQKLSAgICAgKiBuYW1lLCBvciA8Y29kZT4gbnVsbCA8
L2NvZGU+IGlmIHRoZSBzcGVjaWZpZWQgbmFtZSBkaWQgbm90Ci0gICAgICogaWRlbnRpZnkgYW55
IG5vZGUgaW4gdGhlIG1hcC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgZ2V0TmFtZWRJdGVt
ICggY29uc3QgRE9NU3RyaW5nICZuYW1lICkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBBZGRz
IGEgbm9kZSB1c2luZyBpdHMgPGNvZGU+IG5vZGVOYW1lIDwvY29kZT4gYXR0cmlidXRlLgotICAg
ICAqCi0gICAgICogIEFzIHRoZSA8Y29kZT4gbm9kZU5hbWUgPC9jb2RlPiBhdHRyaWJ1dGUgaXMg
dXNlZCB0byBkZXJpdmUgdGhlCi0gICAgICogbmFtZSB3aGljaCB0aGUgbm9kZSBtdXN0IGJlIHN0
b3JlZCB1bmRlciwgbXVsdGlwbGUgbm9kZXMgb2YKLSAgICAgKiBjZXJ0YWluIHR5cGVzICh0aG9z
ZSB0aGF0IGhhdmUgYSAic3BlY2lhbCIgc3RyaW5nIHZhbHVlKSBjYW5ub3QKLSAgICAgKiBiZSBz
dG9yZWQgYXMgdGhlIG5hbWVzIHdvdWxkIGNsYXNoLiBUaGlzIGlzIHNlZW4gYXMgcHJlZmVyYWJs
ZQotICAgICAqIHRvIGFsbG93aW5nIG5vZGVzIHRvIGJlIGFsaWFzZWQuCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gYXJnIEEgbm9kZSB0byBzdG9yZSBpbiBhIG5hbWVkIG5vZGUgbWFwLiBUaGUgbm9k
ZSB3aWxsCi0gICAgICogbGF0ZXIgYmUgYWNjZXNzaWJsZSB1c2luZyB0aGUgdmFsdWUgb2YgdGhl
IDxjb2RlPiBub2RlTmFtZQotICAgICAqIDwvY29kZT4gYXR0cmlidXRlIG9mIHRoZSBub2RlLiBJ
ZiBhIG5vZGUgd2l0aCB0aGF0IG5hbWUgaXMKLSAgICAgKiBhbHJlYWR5IHByZXNlbnQgaW4gdGhl
IG1hcCwgaXQgaXMgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUuCi0gICAgICoKLSAgICAgKiBAcmV0
dXJuIElmIHRoZSBuZXcgPGNvZGU+IE5vZGUgPC9jb2RlPiByZXBsYWNlcyBhbiBleGlzdGluZwot
ICAgICAqIG5vZGUgd2l0aCB0aGUgc2FtZSBuYW1lIHRoZSBwcmV2aW91c2x5IGV4aXN0aW5nIDxj
b2RlPiBOb2RlCi0gICAgICogPC9jb2RlPiBpcyByZXR1cm5lZCwgb3RoZXJ3aXNlIDxjb2RlPiBu
dWxsIDwvY29kZT4gaXMgcmV0dXJuZWQuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4
Y2VwdGlvbgotICAgICAqIFdST05HX0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBhcmcg
PC9jb2RlPiB3YXMgY3JlYXRlZAotICAgICAqIGZyb20gYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhh
biB0aGUgb25lIHRoYXQgY3JlYXRlZCB0aGUgPGNvZGU+Ci0gICAgICogTmFtZWROb2RlTWFwIDwv
Y29kZT4gLgotICAgICAqCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFp
c2VkIGlmIHRoaXMgPGNvZGU+Ci0gICAgICogTmFtZWROb2RlTWFwIDwvY29kZT4gaXMgcmVhZG9u
bHkuCi0gICAgICoKLSAgICAgKiAgSU5VU0VfQVRUUklCVVRFX0VSUjogUmFpc2VkIGlmIDxjb2Rl
PiBhcmcgPC9jb2RlPiBpcyBhbiA8Y29kZT4KLSAgICAgKiBBdHRyIDwvY29kZT4gdGhhdCBpcyBh
bHJlYWR5IGFuIGF0dHJpYnV0ZSBvZiBhbm90aGVyIDxjb2RlPgotICAgICAqIEVsZW1lbnQgPC9j
b2RlPiBvYmplY3QuIFRoZSBET00gdXNlciBtdXN0IGV4cGxpY2l0bHkgY2xvbmUKLSAgICAgKiA8
Y29kZT4gQXR0ciA8L2NvZGU+IG5vZGVzIHRvIHJlLXVzZSB0aGVtIGluIG90aGVyIGVsZW1lbnRz
LgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBzZXROYW1lZEl0ZW0gKCBjb25zdCBOb2RlICZh
cmcgKTsKLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgYSBub2RlIHNwZWNpZmllZCBieSBuYW1l
LiBJZiB0aGUgcmVtb3ZlZCBub2RlIGlzIGFuCi0gICAgICogPGNvZGU+IEF0dHIgPC9jb2RlPiB3
aXRoIGEgZGVmYXVsdCB2YWx1ZSBpdCBpcyBpbW1lZGlhdGVseQotICAgICAqIHJlcGxhY2VkLgot
ICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgYSBub2RlIHRvIHJlbW92ZS4K
LSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5vZGUgcmVtb3ZlZCBmcm9tIHRoZSBtYXAgb3Ig
PGNvZGU+IG51bGwgPC9jb2RlPiBpZgotICAgICAqIG5vIG5vZGUgd2l0aCBzdWNoIGEgbmFtZSBl
eGlzdHMuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5P
VF9GT1VORF9FUlI6IFJhaXNlZCBpZiB0aGVyZSBpcyBubyBub2RlIG5hbWVkIDxjb2RlPiBuYW1l
Ci0gICAgICogPC9jb2RlPiBpbiB0aGUgbWFwLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBy
ZW1vdmVOYW1lZEl0ZW0gKCBjb25zdCBET01TdHJpbmcgJm5hbWUgKTsKLQotICAgIC8qKgotICAg
ICAqIFJldHVybnMgdGhlIDxjb2RlPiBpbmRleCA8L2NvZGU+IHRoIGl0ZW0gaW4gdGhlIG1hcC4g
SWYgPGNvZGU+Ci0gICAgICogaW5kZXggPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwg
dG8gdGhlIG51bWJlciBvZiBub2RlcwotICAgICAqIGluIHRoZSBtYXAsIHRoaXMgcmV0dXJucyA8
Y29kZT4gbnVsbCA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBp
bnRvIHRoZSBtYXAuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBub2RlIGF0IHRoZSA8Y29k
ZT4gaW5kZXggPC9jb2RlPiB0aCBwb3NpdGlvbiBpbiB0aGUKLSAgICAgKiA8Y29kZT4gTmFtZWRO
b2RlTWFwIDwvY29kZT4gLCBvciA8Y29kZT4gbnVsbCA8L2NvZGU+IGlmIHRoYXQgaXMKLSAgICAg
KiBub3QgYSB2YWxpZCBpbmRleC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgaXRlbSAoIHVu
c2lnbmVkIGluZGV4ICkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBJbnRyb2R1Y2VkIGluIERP
TSBMZXZlbCAyCi0gICAgICoKLSAgICAgKiBSZXRyaWV2ZXMgYSBub2RlIHNwZWNpZmllZCBieSBs
b2NhbCBuYW1lIGFuZCBuYW1lc3BhY2UgVVJJLiBIVE1MLW9ubHkKLSAgICAgKiBET00gaW1wbGVt
ZW50YXRpb25zIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkgVGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIG5vZGUg
dG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbG9jYWxOYW1lIFRoZSBsb2NhbCBu
YW1lIG9mIHRoZSBub2RlIHRvIHJldHJpZXZlLgotICAgICAqCi0gICAgICogQHJldHVybiBBIE5v
ZGUgKG9mIGFueSB0eXBlKSB3aXRoIHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZSBhbmQgbmFtZXNw
YWNlCi0gICAgICogVVJJLCBvciBudWxsIGlmIHRoZXkgZG8gbm90IGlkZW50aWZ5IGFueSBub2Rl
IGluIHRoaXMgbWFwLgotICAgICAqLwotICAgIE5vZGUgZ2V0TmFtZWRJdGVtTlMoIGNvbnN0IERP
TVN0cmluZyAmbmFtZXNwYWNlVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERP
TVN0cmluZyAmbG9jYWxOYW1lICkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBJbnRyb2R1Y2Vk
IGluIERPTSBMZXZlbCAyCi0gICAgICoKLSAgICAgKiBBZGRzIGEgbm9kZSB1c2luZyBpdHMgbmFt
ZXNwYWNlVVJJIGFuZCBsb2NhbE5hbWUuIElmIGEgbm9kZSB3aXRoIHRoYXQKLSAgICAgKiBuYW1l
c3BhY2UgVVJJIGFuZCB0aGF0IGxvY2FsIG5hbWUgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMg
bWFwLCBpdCBpcwotICAgICAqIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lLgotICAgICAqIEhUTUwt
b25seSBET00gaW1wbGVtZW50YXRpb25zIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1l
dGhvZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBhcmcgQSBub2RlIHRvIHN0b3JlIGluIHRoaXMg
bWFwLiBUaGUgbm9kZSB3aWxsIGxhdGVyIGJlCi0gICAgICogYWNjZXNzaWJsZSB1c2luZyB0aGUg
dmFsdWUgb2YgaXRzIG5hbWVzcGFjZVVSSSBhbmQgbG9jYWxOYW1lIGF0dHJpYnV0ZXMuCi0gICAg
ICoKLSAgICAgKiBAcmV0dXJuIElmIHRoZSBuZXcgTm9kZSByZXBsYWNlcyBhbiBleGlzdGluZyBu
b2RlIHRoZSByZXBsYWNlZCBOb2RlIGlzCi0gICAgICogcmV0dXJuZWQsIG90aGVyd2lzZSBudWxs
IGlzIHJldHVybmVkLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAg
ICAgKiBXUk9OR19ET0NVTUVOVF9FUlI6IFJhaXNlZCBpZiBhcmcgd2FzIGNyZWF0ZWQgZnJvbSBh
IGRpZmZlcmVudCBkb2N1bWVudAotICAgICAqIHRoYW4gdGhlIG9uZSB0aGF0IGNyZWF0ZWQgdGhp
cyBtYXAuCi0gICAgICoKLSAgICAgKiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNl
ZCBpZiB0aGlzIG1hcCBpcyByZWFkb25seS4KLSAgICAgKgotICAgICAqIElOVVNFX0FUVFJJQlVU
RV9FUlI6IFJhaXNlZCBpZiBhcmcgaXMgYW4gQXR0ciB0aGF0IGlzIGFscmVhZHkgYW4KLSAgICAg
KiBhdHRyaWJ1dGUgb2YgYW5vdGhlciBFbGVtZW50IG9iamVjdC4gVGhlIERPTSB1c2VyIG11c3Qg
ZXhwbGljaXRseSBjbG9uZQotICAgICAqIEF0dHIgbm9kZXMgdG8gcmUtdXNlIHRoZW0gaW4gb3Ro
ZXIgZWxlbWVudHMuCi0gICAgICovCi0gICAgTm9kZSBzZXROYW1lZEl0ZW1OUyggY29uc3QgTm9k
ZSAmYXJnICk7Ci0KLSAgICAvKioKLSAgICAgKiBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi0g
ICAgICoKLSAgICAgKiBSZW1vdmVzIGEgbm9kZSBzcGVjaWZpZWQgYnkgbG9jYWwgbmFtZSBhbmQg
bmFtZXNwYWNlIFVSSS4gQSByZW1vdmVkCi0gICAgICogYXR0cmlidXRlIG1heSBiZSBrbm93biB0
byBoYXZlIGEgZGVmYXVsdCB2YWx1ZSB3aGVuIHRoaXMgbWFwIGNvbnRhaW5zCi0gICAgICogdGhl
IGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gYW4gZWxlbWVudCwgYXMgcmV0dXJuZWQgYnkgdGhlIGF0
dHJpYnV0ZXMKLSAgICAgKiBhdHRyaWJ1dGUgb2YgdGhlIE5vZGUgaW50ZXJmYWNlLiBJZiBzbywg
YW4gYXR0cmlidXRlIGltbWVkaWF0ZWx5IGFwcGVhcnMKLSAgICAgKiBjb250YWluaW5nIHRoZSBk
ZWZhdWx0IHZhbHVlIGFzIHdlbGwgYXMgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZXNwYWNlIFVSSSwK
LSAgICAgKiBsb2NhbCBuYW1lLCBhbmQgcHJlZml4IHdoZW4gYXBwbGljYWJsZS4KLSAgICAgKiBI
VE1MLW9ubHkgRE9NIGltcGxlbWVudGF0aW9ucyBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQgdGhp
cyBtZXRob2QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJIFRoZSBuYW1lc3Bh
Y2UgVVJJIG9mIHRoZSBub2RlIHRvIHJlbW92ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2Nh
bE5hbWUgVGhlIGxvY2FsIG5hbWUgb2YgdGhlIG5vZGUgdG8gcmVtb3ZlLgotICAgICAqCi0gICAg
ICogQHJldHVybiBUaGUgbm9kZSByZW1vdmVkIGZyb20gdGhpcyBtYXAgaWYgYSBub2RlIHdpdGgg
c3VjaCBhIGxvY2FsIG5hbWUKLSAgICAgKiBhbmQgbmFtZXNwYWNlIFVSSSBleGlzdHMuCi0gICAg
ICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5PVF9GT1VORF9FUlI6
IFJhaXNlZCBpZiB0aGVyZSBpcyBubyBub2RlIHdpdGggdGhlIHNwZWNpZmllZAotICAgICAqIG5h
bWVzcGFjZVVSSSBhbmQgbG9jYWxOYW1lIGluIHRoaXMgbWFwLgotICAgICAqCi0gICAgICogTk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBtYXAgaXMgcmVhZG9ubHku
Ci0gICAgICovCi0gICAgTm9kZSByZW1vdmVOYW1lZEl0ZW1OUyggY29uc3QgRE9NU3RyaW5nICZu
YW1lc3BhY2VVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5n
ICZsb2NhbE5hbWUgKTsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqIG5vdCBw
YXJ0IG9mIHRoZSBET00KLSAgICAgKi8KLSAgICBOYW1lZE5vZGVNYXBJbXBsICpoYW5kbGUoKSBj
b25zdCB0aHJvdygpOwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgdGhyb3coKTsKLQotcHJvdGVj
dGVkOgotICAgIE5hbWVkTm9kZU1hcCggTmFtZWROb2RlTWFwSW1wbCAqaSk7Ci0gICAgTmFtZWRO
b2RlTWFwSW1wbCAqaW1wbDsKLQotICAgIGZyaWVuZCBjbGFzcyBOb2RlOwotICAgIGZyaWVuZCBj
bGFzcyBEb2N1bWVudFR5cGU7Ci0gICAgZnJpZW5kIGNsYXNzIE5vZGVJbXBsOwotfTsKLQotY2xh
c3MgTmFtZWROb2RlTWFwOwotY2xhc3MgTm9kZUxpc3Q7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNz
IERPTVN0cmluZzsKLWNsYXNzIFN0eWxlU2hlZXQ7Ci0KLWNsYXNzIE5vZGVJbXBsOwotCi0jZW5k
aWYKIAogLyoqCiAgKiBUaGUgPGNvZGU+IE5vZGUgPC9jb2RlPiBpbnRlcmZhY2UgaXMgdGhlIHBy
aW1hcnkgZGF0YXR5cGUgZm9yIHRoZQpAQCAtMjczLDM2ICs1Nyw5IEBAIGNsYXNzIE5vZGVJbXBs
OwogY2xhc3MgTm9kZQogewogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIGZy
aWVuZCBjbGFzcyBOYW1lZE5vZGVNYXA7Ci0gICAgZnJpZW5kIGNsYXNzIE5vZGVMaXN0OwotICAg
IGZyaWVuZCBjbGFzcyBIVE1MQ29sbGVjdGlvbjsKLSAgICBmcmllbmQgY2xhc3MgU3R5bGVTaGVl
dDsKLQotI2VuZGlmCiAKIHB1YmxpYzoKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0K
LSAgICBOb2RlKCk7Ci0gICAgTm9kZShjb25zdCBOb2RlICZvdGhlcik7Ci0KLSAgICAvKioKLSAg
ICAgKiBAaW50ZXJuYWwKLSAgICAgKi8KLSAgICBOb2RlKCBOb2RlSW1wbCAqX2ltcGwpOwotCi0g
ICAgTm9kZSAmIG9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKTsKLQotICAgIGJvb2wgb3Bl
cmF0b3IgPT0gKGNvbnN0IE5vZGUgJm90aGVyKTsKLQotICAgIGJvb2wgb3BlcmF0b3IgIT0gKGNv
bnN0IE5vZGUgJm90aGVyKTsKLQotICAgIHZpcnR1YWwgfk5vZGUoKTsKLQotI2VuZGlmCiAKICAg
ICAvKioKICAgICAgKiBBbiBpbnRlZ2VyIGluZGljYXRpbmcgd2hpY2ggdHlwZSBvZiBub2RlIHRo
aXMgaXMuCkBAIC00MDksNTYyICsxNjYsMTAgQEAgcHVibGljOgogICAgICAgICBOT1RBVElPTl9O
T0RFID0gMTIKICAgICB9OwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIC8q
KgotICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgbm9kZSwgZGVwZW5kaW5nIG9uIGl0cyB0eXBlOyBz
ZWUgdGhlIHRhYmxlCi0gICAgICogYWJvdmUuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01TdHJp
bmcgbm9kZU5hbWUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSB2YWx1ZSBvZiB0aGlz
IG5vZGUsIGRlcGVuZGluZyBvbiBpdHMgdHlwZTsgc2VlIHRoZSB0YWJsZQotICAgICAqIGFib3Zl
LgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBET01TVFJJ
TkdfU0laRV9FUlI6IFJhaXNlZCB3aGVuIGl0IHdvdWxkIHJldHVybiBtb3JlIGNoYXJhY3RlcnMK
LSAgICAgKiB0aGFuIGZpdCBpbiBhIDxjb2RlPiBET01TdHJpbmcgPC9jb2RlPiB2YXJpYWJsZSBv
biB0aGUKLSAgICAgKiBpbXBsZW1lbnRhdGlvbiBwbGF0Zm9ybS4KLSAgICAgKgotICAgICAqLwot
ICAgIERPTVN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIHNlZSBA
cmVmIG5vZGVWYWx1ZQotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogTk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgd2hlbiB0aGUgbm9kZSBpcyByZWFkb25s
eS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25zdCBET01TdHJp
bmcgJiApOwotCi0gICAgLyoqCi0gICAgICogQSBjb2RlIHJlcHJlc2VudGluZyB0aGUgdHlwZSBv
ZiB0aGUgdW5kZXJseWluZyBvYmplY3QsIGFzCi0gICAgICogZGVmaW5lZCBhYm92ZS4KLSAgICAg
KgotICAgICAqLwotICAgIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0KLSAgICAv
KioKLSAgICAgKiBUaGUgcGFyZW50IG9mIHRoaXMgbm9kZS4gQWxsIG5vZGVzLCBleGNlcHQgPGNv
ZGU+IERvY3VtZW50Ci0gICAgICogPC9jb2RlPiAsIDxjb2RlPiBEb2N1bWVudEZyYWdtZW50IDwv
Y29kZT4gLCBhbmQgPGNvZGU+IEF0dHIKLSAgICAgKiA8L2NvZGU+IG1heSBoYXZlIGEgcGFyZW50
LiBIb3dldmVyLCBpZiBhIG5vZGUgaGFzIGp1c3QgYmVlbgotICAgICAqIGNyZWF0ZWQgYW5kIG5v
dCB5ZXQgYWRkZWQgdG8gdGhlIHRyZWUsIG9yIGlmIGl0IGhhcyBiZWVuCi0gICAgICogcmVtb3Zl
ZCBmcm9tIHRoZSB0cmVlLCB0aGlzIGlzIDxjb2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0g
ICAgICovCi0gICAgTm9kZSBwYXJlbnROb2RlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBB
IDxjb2RlPiBOb2RlTGlzdCA8L2NvZGU+IHRoYXQgY29udGFpbnMgYWxsIGNoaWxkcmVuIG9mIHRo
aXMKLSAgICAgKiBub2RlLiBJZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4sIHRoaXMgaXMgYSA8Y29k
ZT4gTm9kZUxpc3QKLSAgICAgKiA8L2NvZGU+IGNvbnRhaW5pbmcgbm8gbm9kZXMuIFRoZSBjb250
ZW50IG9mIHRoZSByZXR1cm5lZCA8Y29kZT4KLSAgICAgKiBOb2RlTGlzdCA8L2NvZGU+IGlzICZx
dW90O2xpdmUmcXVvdDsgaW4gdGhlIHNlbnNlIHRoYXQsIGZvcgotICAgICAqIGluc3RhbmNlLCBj
aGFuZ2VzIHRvIHRoZSBjaGlsZHJlbiBvZiB0aGUgbm9kZSBvYmplY3QgdGhhdCBpdAotICAgICAq
IHdhcyBjcmVhdGVkIGZyb20gYXJlIGltbWVkaWF0ZWx5IHJlZmxlY3RlZCBpbiB0aGUgbm9kZXMK
LSAgICAgKiByZXR1cm5lZCBieSB0aGUgPGNvZGU+IE5vZGVMaXN0IDwvY29kZT4gYWNjZXNzb3Jz
OyBpdCBpcyBub3QgYQotICAgICAqIHN0YXRpYyBzbmFwc2hvdCBvZiB0aGUgY29udGVudCBvZiB0
aGUgbm9kZS4gVGhpcyBpcyB0cnVlIGZvcgotICAgICAqIGV2ZXJ5IDxjb2RlPiBOb2RlTGlzdCA8
L2NvZGU+ICwgaW5jbHVkaW5nIHRoZSBvbmVzIHJldHVybmVkIGJ5Ci0gICAgICogdGhlIDxjb2Rl
PiBnZXRFbGVtZW50c0J5VGFnTmFtZSA8L2NvZGU+IG1ldGhvZC4KLSAgICAgKgotICAgICAqLwot
ICAgIE5vZGVMaXN0IGNoaWxkTm9kZXMoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBm
aXJzdCBjaGlsZCBvZiB0aGlzIG5vZGUuIElmIHRoZXJlIGlzIG5vIHN1Y2ggbm9kZSwgdGhpcwot
ICAgICAqIHJldHVybnMgPGNvZGU+IG51bGwgPC9jb2RlPiAuCi0gICAgICoKLSAgICAgKi8KLSAg
ICBOb2RlIGZpcnN0Q2hpbGQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBsYXN0IGNo
aWxkIG9mIHRoaXMgbm9kZS4gSWYgdGhlcmUgaXMgbm8gc3VjaCBub2RlLCB0aGlzCi0gICAgICog
cmV0dXJucyA8Y29kZT4gbnVsbCA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUg
bGFzdENoaWxkKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbm9kZSBpbW1lZGlhdGVs
eSBwcmVjZWRpbmcgdGhpcyBub2RlLiBJZiB0aGVyZSBpcyBubyBzdWNoCi0gICAgICogbm9kZSwg
dGhpcyByZXR1cm5zIDxjb2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0gICAgICovCi0gICAg
Tm9kZSBwcmV2aW91c1NpYmxpbmcoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBub2Rl
IGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIG5vZGUuIElmIHRoZXJlIGlzIG5vIHN1Y2gKLSAg
ICAgKiBub2RlLCB0aGlzIHJldHVybnMgPGNvZGU+IG51bGwgPC9jb2RlPiAuCi0gICAgICoKLSAg
ICAgKi8KLSAgICBOb2RlIG5leHRTaWJsaW5nKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBB
IDxjb2RlPiBOYW1lZE5vZGVNYXAgPC9jb2RlPiBjb250YWluaW5nIHRoZSBhdHRyaWJ1dGVzIG9m
IHRoaXMKLSAgICAgKiBub2RlIChpZiBpdCBpcyBhbiA8Y29kZT4gRWxlbWVudCA8L2NvZGU+ICkg
b3IgPGNvZGU+IG51bGwKLSAgICAgKiA8L2NvZGU+IG90aGVyd2lzZS4KLSAgICAgKgotICAgICAq
LwotICAgIE5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAg
KiBUaGUgPGNvZGU+IERvY3VtZW50IDwvY29kZT4gb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlz
IG5vZGUuCi0gICAgICogVGhpcyBpcyBhbHNvIHRoZSA8Y29kZT4gRG9jdW1lbnQgPC9jb2RlPiBv
YmplY3QgdXNlZCB0byBjcmVhdGUKLSAgICAgKiBuZXcgbm9kZXMuIFdoZW4gdGhpcyBub2RlIGlz
IGEgPGNvZGU+IERvY3VtZW50IDwvY29kZT4gdGhpcyBpcwotICAgICAqIDxjb2RlPiBudWxsIDwv
Y29kZT4gLgotICAgICAqCi0gICAgICovCi0gICAgRG9jdW1lbnQgb3duZXJEb2N1bWVudCgpIGNv
bnN0OwotCi0gICAgLyoqCi0gICAgICogSW5zZXJ0cyB0aGUgbm9kZSA8Y29kZT4gbmV3Q2hpbGQg
PC9jb2RlPiBiZWZvcmUgdGhlIGV4aXN0aW5nCi0gICAgICogY2hpbGQgbm9kZSA8Y29kZT4gcmVm
Q2hpbGQgPC9jb2RlPiAuIElmIDxjb2RlPiByZWZDaGlsZCA8L2NvZGU+Ci0gICAgICogaXMgPGNv
ZGU+IG51bGwgPC9jb2RlPiAsIGluc2VydCA8Y29kZT4gbmV3Q2hpbGQgPC9jb2RlPiBhdCB0aGUK
LSAgICAgKiBlbmQgb2YgdGhlIGxpc3Qgb2YgY2hpbGRyZW4uCi0gICAgICoKLSAgICAgKiAgSWYg
PGNvZGU+IG5ld0NoaWxkIDwvY29kZT4gaXMgYSA8Y29kZT4gRG9jdW1lbnRGcmFnbWVudAotICAg
ICAqIDwvY29kZT4gb2JqZWN0LCBhbGwgb2YgaXRzIGNoaWxkcmVuIGFyZSBpbnNlcnRlZCwgaW4g
dGhlIHNhbWUKLSAgICAgKiBvcmRlciwgYmVmb3JlIDxjb2RlPiByZWZDaGlsZCA8L2NvZGU+IC4g
SWYgdGhlIDxjb2RlPiBuZXdDaGlsZAotICAgICAqIDwvY29kZT4gaXMgYWxyZWFkeSBpbiB0aGUg
dHJlZSwgaXQgaXMgZmlyc3QgcmVtb3ZlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuZXdDaGls
ZCBUaGUgbm9kZSB0byBpbnNlcnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVmQ2hpbGQgVGhl
IHJlZmVyZW5jZSBub2RlLCBpLmUuLCB0aGUgbm9kZSBiZWZvcmUgd2hpY2gKLSAgICAgKiB0aGUg
bmV3IG5vZGUgbXVzdCBiZSBpbnNlcnRlZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5v
ZGUgYmVpbmcgaW5zZXJ0ZWQuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlv
bgotICAgICAqIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9kZSBpcyBv
ZiBhIHR5cGUgdGhhdAotICAgICAqIGRvZXMgbm90IGFsbG93IGNoaWxkcmVuIG9mIHRoZSB0eXBl
IG9mIHRoZSA8Y29kZT4gbmV3Q2hpbGQKLSAgICAgKiA8L2NvZGU+IG5vZGUsIG9yIGlmIHRoZSBu
b2RlIHRvIGluc2VydCBpcyBvbmUgb2YgdGhpcyBub2RlJ3MKLSAgICAgKiBhbmNlc3RvcnMuCi0g
ICAgICoKLSAgICAgKiAgV1JPTkdfRE9DVU1FTlRfRVJSOiBSYWlzZWQgaWYgPGNvZGU+IG5ld0No
aWxkIDwvY29kZT4gd2FzCi0gICAgICogY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50IGRvY3VtZW50
IHRoYW4gdGhlIG9uZSB0aGF0IGNyZWF0ZWQKLSAgICAgKiB0aGlzIG5vZGUuCi0gICAgICoKLSAg
ICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlz
IHJlYWRvbmx5LgotICAgICAqCi0gICAgICogIE5PVF9GT1VORF9FUlI6IFJhaXNlZCBpZiA8Y29k
ZT4gcmVmQ2hpbGQgPC9jb2RlPiBpcyBub3QgYQotICAgICAqIGNoaWxkIG9mIHRoaXMgbm9kZS4K
LSAgICAgKgotICAgICAqLwotICAgIE5vZGUgaW5zZXJ0QmVmb3JlICggY29uc3QgTm9kZSAmbmV3
Q2hpbGQsIGNvbnN0IE5vZGUgJnJlZkNoaWxkICk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXBsYWNl
cyB0aGUgY2hpbGQgbm9kZSA8Y29kZT4gb2xkQ2hpbGQgPC9jb2RlPiB3aXRoIDxjb2RlPgotICAg
ICAqIG5ld0NoaWxkIDwvY29kZT4gaW4gdGhlIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCByZXR1cm5z
IHRoZQotICAgICAqIDxjb2RlPiBvbGRDaGlsZCA8L2NvZGU+IG5vZGUuIElmIHRoZSA8Y29kZT4g
bmV3Q2hpbGQgPC9jb2RlPiBpcwotICAgICAqIGFscmVhZHkgaW4gdGhlIHRyZWUsIGl0IGlzIGZp
cnN0IHJlbW92ZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV3Q2hpbGQgVGhlIG5ldyBub2Rl
IHRvIHB1dCBpbiB0aGUgY2hpbGQgbGlzdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBvbGRDaGls
ZCBUaGUgbm9kZSBiZWluZyByZXBsYWNlZCBpbiB0aGUgbGlzdC4KLSAgICAgKgotICAgICAqIEBy
ZXR1cm4gVGhlIG5vZGUgcmVwbGFjZWQuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4
Y2VwdGlvbgotICAgICAqIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9k
ZSBpcyBvZiBhIHR5cGUgdGhhdAotICAgICAqIGRvZXMgbm90IGFsbG93IGNoaWxkcmVuIG9mIHRo
ZSB0eXBlIG9mIHRoZSA8Y29kZT4gbmV3Q2hpbGQKLSAgICAgKiA8L2NvZGU+IG5vZGUsIG9yIGl0
IHRoZSBub2RlIHRvIHB1dCBpbiBpcyBvbmUgb2YgdGhpcyBub2RlJ3MKLSAgICAgKiBhbmNlc3Rv
cnMuCi0gICAgICoKLSAgICAgKiAgV1JPTkdfRE9DVU1FTlRfRVJSOiBSYWlzZWQgaWYgPGNvZGU+
IG5ld0NoaWxkIDwvY29kZT4gd2FzCi0gICAgICogY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50IGRv
Y3VtZW50IHRoYW4gdGhlIG9uZSB0aGF0IGNyZWF0ZWQKLSAgICAgKiB0aGlzIG5vZGUuCi0gICAg
ICoKLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBu
b2RlIGlzIHJlYWRvbmx5LgotICAgICAqCi0gICAgICogIE5PVF9GT1VORF9FUlI6IFJhaXNlZCBp
ZiA8Y29kZT4gb2xkQ2hpbGQgPC9jb2RlPiBpcyBub3QgYQotICAgICAqIGNoaWxkIG9mIHRoaXMg
bm9kZS4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgcmVwbGFjZUNoaWxkICggY29uc3QgTm9k
ZSAmbmV3Q2hpbGQsIGNvbnN0IE5vZGUgJm9sZENoaWxkICk7Ci0KLSAgICAvKioKLSAgICAgKiBS
ZW1vdmVzIHRoZSBjaGlsZCBub2RlIGluZGljYXRlZCBieSA8Y29kZT4gb2xkQ2hpbGQgPC9jb2Rl
PgotICAgICAqIGZyb20gdGhlIGxpc3Qgb2YgY2hpbGRyZW4sIGFuZCByZXR1cm5zIGl0LgotICAg
ICAqCi0gICAgICogQHBhcmFtIG9sZENoaWxkIFRoZSBub2RlIGJlaW5nIHJlbW92ZWQuCi0gICAg
ICoKLSAgICAgKiBAcmV0dXJuIFRoZSBub2RlIHJlbW92ZWQuCi0gICAgICoKLSAgICAgKiBAZXhj
ZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjog
UmFpc2VkIGlmIHRoaXMgbm9kZSBpcyByZWFkb25seS4KLSAgICAgKgotICAgICAqICBOT1RfRk9V
TkRfRVJSOiBSYWlzZWQgaWYgPGNvZGU+IG9sZENoaWxkIDwvY29kZT4gaXMgbm90IGEKLSAgICAg
KiBjaGlsZCBvZiB0aGlzIG5vZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIHJlbW92ZUNo
aWxkICggY29uc3QgTm9kZSAmb2xkQ2hpbGQgKTsKLQotICAgIC8qKgotICAgICAqIEFkZHMgdGhl
IG5vZGUgPGNvZGU+IG5ld0NoaWxkIDwvY29kZT4gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBvZgot
ICAgICAqIGNoaWxkcmVuIG9mIHRoaXMgbm9kZS4gSWYgdGhlIDxjb2RlPiBuZXdDaGlsZCA8L2Nv
ZGU+IGlzCi0gICAgICogYWxyZWFkeSBpbiB0aGUgdHJlZSwgaXQgaXMgZmlyc3QgcmVtb3ZlZC4K
LSAgICAgKgotICAgICAqIEBwYXJhbSBuZXdDaGlsZCBUaGUgbm9kZSB0byBhZGQuCi0gICAgICoK
LSAgICAgKiAgSWYgaXQgaXMgYSA8Y29kZT4gRG9jdW1lbnRGcmFnbWVudCA8L2NvZGU+IG9iamVj
dCwgdGhlIGVudGlyZQotICAgICAqIGNvbnRlbnRzIG9mIHRoZSBkb2N1bWVudCBmcmFnbWVudCBh
cmUgbW92ZWQgaW50byB0aGUgY2hpbGQgbGlzdAotICAgICAqIG9mIHRoaXMgbm9kZQotICAgICAq
Ci0gICAgICogQHJldHVybiBUaGUgbm9kZSBhZGRlZC4KLSAgICAgKgotICAgICAqIEBleGNlcHRp
b24gRE9NRXhjZXB0aW9uCi0gICAgICogSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiBSYWlzZWQgaWYg
dGhpcyBub2RlIGlzIG9mIGEgdHlwZSB0aGF0Ci0gICAgICogZG9lcyBub3QgYWxsb3cgY2hpbGRy
ZW4gb2YgdGhlIHR5cGUgb2YgdGhlIDxjb2RlPiBuZXdDaGlsZAotICAgICAqIDwvY29kZT4gbm9k
ZSwgb3IgaWYgdGhlIG5vZGUgdG8gYXBwZW5kIGlzIG9uZSBvZiB0aGlzIG5vZGUncwotICAgICAq
IGFuY2VzdG9ycy4KLSAgICAgKgotICAgICAqICBXUk9OR19ET0NVTUVOVF9FUlI6IFJhaXNlZCBp
ZiA8Y29kZT4gbmV3Q2hpbGQgPC9jb2RlPiB3YXMKLSAgICAgKiBjcmVhdGVkIGZyb20gYSBkaWZm
ZXJlbnQgZG9jdW1lbnQgdGhhbiB0aGUgb25lIHRoYXQgY3JlYXRlZAotICAgICAqIHRoaXMgbm9k
ZS4KLSAgICAgKgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBp
ZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIGFwcGVu
ZENoaWxkICggY29uc3QgTm9kZSAmbmV3Q2hpbGQgKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMg
aXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYWxsb3cgZWFzeSBkZXRlcm1pbmF0aW9uIG9mCi0g
ICAgICogd2hldGhlciBhIG5vZGUgaGFzIGFueSBjaGlsZHJlbi4KLSAgICAgKgotICAgICAqIEBy
ZXR1cm4gPGNvZGU+IHRydWUgPC9jb2RlPiBpZiB0aGUgbm9kZSBoYXMgYW55IGNoaWxkcmVuLAot
ICAgICAqIDxjb2RlPiBmYWxzZSA8L2NvZGU+IGlmIHRoZSBub2RlIGhhcyBubyBjaGlsZHJlbi4K
LSAgICAgKgotICAgICAqLwotICAgIGJvb2wgaGFzQ2hpbGROb2RlcyAoICApOwotCi0gICAgLyoq
Ci0gICAgICogUmV0dXJucyBhIGR1cGxpY2F0ZSBvZiB0aGlzIG5vZGUsIGkuZS4sIHNlcnZlcyBh
cyBhIGdlbmVyaWMKLSAgICAgKiBjb3B5IGNvbnN0cnVjdG9yIGZvciBub2Rlcy4gVGhlIGR1cGxp
Y2F0ZSBub2RlIGhhcyBubyBwYXJlbnQgKAotICAgICAqIDxjb2RlPiBwYXJlbnROb2RlIDwvY29k
ZT4gcmV0dXJucyA8Y29kZT4gbnVsbCA8L2NvZGU+IC4pLgotICAgICAqCi0gICAgICogIENsb25p
bmcgYW4gPGNvZGU+IEVsZW1lbnQgPC9jb2RlPiBjb3BpZXMgYWxsIGF0dHJpYnV0ZXMgYW5kCi0g
ICAgICogdGhlaXIgdmFsdWVzLCBpbmNsdWRpbmcgdGhvc2UgZ2VuZXJhdGVkIGJ5IHRoZSBYTUwg
cHJvY2Vzc29yIHRvCi0gICAgICogcmVwcmVzZW50IGRlZmF1bHRlZCBhdHRyaWJ1dGVzLCBidXQg
dGhpcyBtZXRob2QgZG9lcyBub3QgY29weQotICAgICAqIGFueSB0ZXh0IGl0IGNvbnRhaW5zIHVu
bGVzcyBpdCBpcyBhIGRlZXAgY2xvbmUsIHNpbmNlIHRoZSB0ZXh0Ci0gICAgICogaXMgY29udGFp
bmVkIGluIGEgY2hpbGQgPGNvZGU+IFRleHQgPC9jb2RlPiBub2RlLiBDbG9uaW5nIGFueQotICAg
ICAqIG90aGVyIHR5cGUgb2Ygbm9kZSBzaW1wbHkgcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBub2Rl
LgotICAgICAqCi0gICAgICogQHBhcmFtIGRlZXAgSWYgPGNvZGU+IHRydWUgPC9jb2RlPiAsIHJl
Y3Vyc2l2ZWx5IGNsb25lIHRoZQotICAgICAqIHN1YnRyZWUgdW5kZXIgdGhlIHNwZWNpZmllZCBu
b2RlOyBpZiA8Y29kZT4gZmFsc2UgPC9jb2RlPiAsCi0gICAgICogY2xvbmUgb25seSB0aGUgbm9k
ZSBpdHNlbGYgKGFuZCBpdHMgYXR0cmlidXRlcywgaWYgaXQgaXMgYW4KLSAgICAgKiA8Y29kZT4g
RWxlbWVudCA8L2NvZGU+ICkuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBkdXBsaWNhdGUg
bm9kZS4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgY2xvbmVOb2RlICggYm9vbCBkZWVwICk7
Ci0KLSAgICAvKioKLSAgICAgKiBNb2RpZmllZCBpbiBET00gTGV2ZWwgMgotICAgICAqCi0gICAg
ICogUHV0cyBhbGwgVGV4dCBub2RlcyBpbiB0aGUgZnVsbCBkZXB0aCBvZiB0aGUgc3ViLXRyZWUg
dW5kZXJuZWF0aCB0aGlzCi0gICAgICogTm9kZSwgaW5jbHVkaW5nIGF0dHJpYnV0ZSBub2Rlcywg
aW50byBhICJub3JtYWwiIGZvcm0gd2hlcmUgb25seQotICAgICAqIHN0cnVjdHVyZSAoZS5nLiwg
ZWxlbWVudHMsIGNvbW1lbnRzLCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgQ0RBVEEKLSAgICAg
KiBzZWN0aW9ucywgYW5kIGVudGl0eSByZWZlcmVuY2VzKSBzZXBhcmF0ZXMgVGV4dCBub2Rlcywg
aS5lLiwgdGhlcmUgYXJlCi0gICAgICogbmVpdGhlciBhZGphY2VudCBUZXh0IG5vZGVzIG5vciBl
bXB0eSBUZXh0IG5vZGVzLiBUaGlzIGNhbiBiZSB1c2VkIHRvCi0gICAgICogZW5zdXJlIHRoYXQg
dGhlIERPTSB2aWV3IG9mIGEgZG9jdW1lbnQgaXMgdGhlIHNhbWUgYXMgaWYgaXQgd2VyZSBzYXZl
ZAotICAgICAqIGFuZCByZS1sb2FkZWQsIGFuZCBpcyB1c2VmdWwgd2hlbiBvcGVyYXRpb25zIChz
dWNoIGFzIFhQb2ludGVyCi0gICAgICogW1hQb2ludGVyXSBsb29rdXBzKSB0aGF0IGRlcGVuZCBv
biBhIHBhcnRpY3VsYXIgZG9jdW1lbnQgdHJlZSBzdHJ1Y3R1cmUKLSAgICAgKiBhcmUgdG8gYmUg
dXNlZC4KLSAgICAgKgotICAgICAqIE5vdGU6IEluIGNhc2VzIHdoZXJlIHRoZSBkb2N1bWVudCBj
b250YWlucyBDREFUQVNlY3Rpb25zLCB0aGUgbm9ybWFsaXplCi0gICAgICogb3BlcmF0aW9uIGFs
b25lIG1heSBub3QgYmUgc3VmZmljaWVudCwgc2luY2UgWFBvaW50ZXJzIGRvIG5vdAotICAgICAq
IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBUZXh0IG5vZGVzIGFuZCBDREFUQVNlY3Rpb24gbm9kZXMu
Ci0gICAgICovCi0gICAgdm9pZCBub3JtYWxpemUgKCAgKTsKLQotICAgIC8qKgotICAgICAqIElu
dHJvZHVjZWQgaW4gRE9NIExldmVsIDIKLSAgICAgKgotICAgICAqIFRlc3RzIHdoZXRoZXIgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIGEgc3BlY2lmaWMgZmVhdHVyZSBhbmQKLSAg
ICAgKiB0aGF0IGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgbm9kZS4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSBmZWF0dXJlIFRoZSBuYW1lIG9mIHRoZSBmZWF0dXJlIHRvIHRlc3QuIFRoaXMg
aXMgdGhlIHNhbWUgbmFtZQotICAgICAqIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gdGhlIG1ldGhv
ZCBoYXNGZWF0dXJlIG9uIERPTUltcGxlbWVudGF0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFt
IHZlcnNpb24gVGhpcyBpcyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGZlYXR1cmUgdG8gdGVz
dC4gSW4KLSAgICAgKiBMZXZlbCAyLCB2ZXJzaW9uIDEsIHRoaXMgaXMgdGhlIHN0cmluZyAiMi4w
Ii4gSWYgdGhlIHZlcnNpb24gaXMgbm90Ci0gICAgICogc3BlY2lmaWVkLCBzdXBwb3J0aW5nIGFu
eSB2ZXJzaW9uIG9mIHRoZSBmZWF0dXJlIHdpbGwgY2F1c2UgdGhlIG1ldGhvZAotICAgICAqIHRv
IHJldHVybiB0cnVlLgotICAgICAqCi0gICAgICogQHJldHVybiBSZXR1cm5zIHRydWUgaWYgdGhl
IHNwZWNpZmllZCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBvbiB0aGlzIG5vZGUsCi0gICAgICogZmFs
c2Ugb3RoZXJ3aXNlLgotICAgICAqLwotICAgIGJvb2wgaXNTdXBwb3J0ZWQoIGNvbnN0IERPTVN0
cmluZyAmZmVhdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJnZl
cnNpb24gKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEludHJvZHVjZWQgaW4gRE9NIExldmVs
IDIKLSAgICAgKgotICAgICAqIFRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoaXMgbm9kZSwgb3IgbnVs
bCBpZiBpdCBpcyB1bnNwZWNpZmllZC4KLSAgICAgKiBUaGlzIGlzIG5vdCBhIGNvbXB1dGVkIHZh
bHVlIHRoYXQgaXMgdGhlIHJlc3VsdCBvZiBhIG5hbWVzcGFjZSBsb29rdXAKLSAgICAgKiBiYXNl
ZCBvbiBhbiBleGFtaW5hdGlvbiBvZiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBpbiBzY29w
ZS4gSXQgaXMKLSAgICAgKiBtZXJlbHkgdGhlIG5hbWVzcGFjZSBVUkkgZ2l2ZW4gYXQgY3JlYXRp
b24gdGltZS4gRm9yIG5vZGVzIG9mIGFueSB0eXBlCi0gICAgICogb3RoZXIgdGhhbiBFTEVNRU5U
X05PREUgYW5kIEFUVFJJQlVURV9OT0RFIGFuZCBub2RlcyBjcmVhdGVkIHdpdGggYSBET00KLSAg
ICAgKiBMZXZlbCAxIG1ldGhvZCwgc3VjaCBhcyBjcmVhdGVFbGVtZW50IGZyb20gdGhlIERvY3Vt
ZW50IGludGVyZmFjZSwgdGhpcwotICAgICAqIGlzIGFsd2F5cyBudWxsLgotICAgICAqCi0gICAg
ICogTm90ZTogUGVyIHRoZSBOYW1lc3BhY2VzIGluIFhNTCBTcGVjaWZpY2F0aW9uIFtOYW1lc3Bh
Y2VzXSBhbiBhdHRyaWJ1dGUKLSAgICAgKiBkb2VzIG5vdCBpbmhlcml0IGl0cyBuYW1lc3BhY2Ug
ZnJvbSB0aGUgZWxlbWVudCBpdCBpcyBhdHRhY2hlZCB0by4gSWYgYW4KLSAgICAgKiBhdHRyaWJ1
dGUgaXMgbm90IGV4cGxpY2l0bHkgZ2l2ZW4gYSBuYW1lc3BhY2UsIGl0IHNpbXBseSBoYXMgbm8K
LSAgICAgKiBuYW1lc3BhY2UuCi0gICAgICovCi0gICAgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgg
ICkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi0g
ICAgICoKLSAgICAgKiBUaGUgbmFtZXNwYWNlIHByZWZpeCBvZiB0aGlzIG5vZGUsIG9yIG51bGwg
aWYgaXQgaXMgdW5zcGVjaWZpZWQuCi0gICAgICogTm90ZSB0aGF0IHNldHRpbmcgdGhpcyBhdHRy
aWJ1dGUsIHdoZW4gcGVybWl0dGVkLCBjaGFuZ2VzIHRoZSBub2RlTmFtZQotICAgICAqIGF0dHJp
YnV0ZSwgd2hpY2ggaG9sZHMgdGhlIHF1YWxpZmllZCBuYW1lLCBhcyB3ZWxsIGFzIHRoZSB0YWdO
YW1lIGFuZAotICAgICAqIG5hbWUgYXR0cmlidXRlcyBvZiB0aGUgRWxlbWVudCBhbmQgQXR0ciBp
bnRlcmZhY2VzLCB3aGVuIGFwcGxpY2FibGUuCi0gICAgICogTm90ZSBhbHNvIHRoYXQgY2hhbmdp
bmcgdGhlIHByZWZpeCBvZiBhbiBhdHRyaWJ1dGUgdGhhdCBpcyBrbm93biB0byBoYXZlCi0gICAg
ICogYSBkZWZhdWx0IHZhbHVlLCBkb2VzIG5vdCBtYWtlIGEgbmV3IGF0dHJpYnV0ZSB3aXRoIHRo
ZSBkZWZhdWx0IHZhbHVlCi0gICAgICogYW5kIHRoZSBvcmlnaW5hbCBwcmVmaXggYXBwZWFyLCBz
aW5jZSB0aGUgbmFtZXNwYWNlVVJJIGFuZCBsb2NhbE5hbWUgZG8KLSAgICAgKiBub3QgY2hhbmdl
LgotICAgICAqIEZvciBub2RlcyBvZiBhbnkgdHlwZSBvdGhlciB0aGFuIEVMRU1FTlRfTk9ERSBh
bmQgQVRUUklCVVRFX05PREUgYW5kCi0gICAgICogbm9kZXMgY3JlYXRlZCB3aXRoIGEgRE9NIExl
dmVsIDEgbWV0aG9kLCBzdWNoIGFzIGNyZWF0ZUVsZW1lbnQgZnJvbSB0aGUKLSAgICAgKiBEb2N1
bWVudCBpbnRlcmZhY2UsIHRoaXMgaXMgYWx3YXlzIG51bGwuCi0gICAgICovCi0gICAgRE9NU3Ry
aW5nIHByZWZpeCggICkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBzZWUgQHJlZiBwcmVmaXgK
LSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9D
SEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggY29udGFpbnMgYW4K
LSAgICAgKiBpbGxlZ2FsIGNoYXJhY3Rlci4KLSAgICAgKgotICAgICAqIE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9kZSBpcyByZWFkb25seS4KLSAgICAgKgot
ICAgICAqIE5BTUVTUEFDRV9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyBt
YWxmb3JtZWQsIGlmIHRoZQotICAgICAqIG5hbWVzcGFjZVVSSSBvZiB0aGlzIG5vZGUgaXMgbnVs
bCwgaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInhtbCIgYW5kCi0gICAgICogdGhlIG5hbWVz
cGFjZVVSSSBvZiB0aGlzIG5vZGUgaXMgZGlmZmVyZW50IGZyb20KLSAgICAgKiAiaHR0cDovL3d3
dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwgaWYgdGhpcyBub2RlIGlzIGFuIGF0dHJpYnV0
ZSBhbmQKLSAgICAgKiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyAieG1sbnMiIGFuZCB0aGUgbmFt
ZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcwotICAgICAqIGRpZmZlcmVudCBmcm9tICJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3htbG5zLyIsIG9yIGlmIHRoaXMgbm9kZSBpcyBhbgotICAgICAqIGF0
dHJpYnV0ZSBhbmQgdGhlIHF1YWxpZmllZE5hbWUgb2YgdGhpcyBub2RlIGlzICJ4bWxucyIgW05h
bWVzcGFjZXNdLgotICAgICAqLwotICAgIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAm
cHJlZml4ICk7Ci0KLSAgICAvKioKLSAgICAgKiBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi0g
ICAgICoKLSAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbCBwYXJ0IG9mIHRoZSBxdWFsaWZpZWQgbmFt
ZSBvZiB0aGlzIG5vZGUuCi0gICAgICogRm9yIG5vZGVzIG9mIGFueSB0eXBlIG90aGVyIHRoYW4g
RUxFTUVOVF9OT0RFIGFuZCBBVFRSSUJVVEVfTk9ERSBhbmQKLSAgICAgKiBub2RlcyBjcmVhdGVk
IHdpdGggYSBET00gTGV2ZWwgMSBtZXRob2QsIHN1Y2ggYXMgY3JlYXRlRWxlbWVudCBmcm9tIHRo
ZQotICAgICAqIERvY3VtZW50IGludGVyZmFjZSwgdGhpcyBpcyBhbHdheXMgbnVsbC4KLSAgICAg
Ki8KLSAgICBET01TdHJpbmcgbG9jYWxOYW1lKCAgKSBjb25zdDsKLQotICAgIC8qKgotICAgICAq
IFJldHVybnMgd2hldGhlciB0aGlzIG5vZGUgKGlmIGl0IGlzIGFuIGVsZW1lbnQpIGhhcyBhbnkg
YXR0cmlidXRlcy4KLSAgICAgKiBAcmV0dXJuIGEgYm9vbGVhbi4gVHJ1ZSBpZiB0aGlzIG5vZGUg
aGFzIGFueSBhdHRyaWJ1dGVzLCBmYWxzZSBvdGhlcndpc2UuCi0gICAgICogIEludHJvZHVjZWQg
aW4gRE9NIExldmVsIDIKLSAgICAgKi8KLSAgICBib29sIGhhc0F0dHJpYnV0ZXMgKCAgKTsKLQot
ICAgIC8qKgotICAgICAqIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKLSAgICAgKiBUaGlzIG1l
dGhvZCBpcyBmcm9tIHRoZSBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICAgKgotICAgICAqIFRo
aXMgbWV0aG9kIGFsbG93cyB0aGUgcmVnaXN0cmF0aW9uIG9mIGV2ZW50IGxpc3RlbmVycyBvbiB0
aGUgZXZlbnQKLSAgICAgKiB0YXJnZXQuIElmIGFuIEV2ZW50TGlzdGVuZXIgaXMgYWRkZWQgdG8g
YW4gRXZlbnRUYXJnZXQgd2hpbGUgaXQgaXMKLSAgICAgKiBwcm9jZXNzaW5nIGFuIGV2ZW50LCBp
dCB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQgYnkgdGhlIGN1cnJlbnQgYWN0aW9ucyBidXQKLSAgICAg
KiBtYXkgYmUgdHJpZ2dlcmVkIGR1cmluZyBhIGxhdGVyIHN0YWdlIG9mIGV2ZW50IGZsb3csIHN1
Y2ggYXMgdGhlCi0gICAgICogYnViYmxpbmcgcGhhc2UuCi0gICAgICoKLSAgICAgKiBJZiBtdWx0
aXBsZSBpZGVudGljYWwgRXZlbnRMaXN0ZW5lcnMgYXJlIHJlZ2lzdGVyZWQgb24gdGhlIHNhbWUK
LSAgICAgKiBFdmVudFRhcmdldCB3aXRoIHRoZSBzYW1lIHBhcmFtZXRlcnMgdGhlIGR1cGxpY2F0
ZSBpbnN0YW5jZXMgYXJlCi0gICAgICogZGlzY2FyZGVkLiBUaGV5IGRvIG5vdCBjYXVzZSB0aGUg
RXZlbnRMaXN0ZW5lciB0byBiZSBjYWxsZWQgdHdpY2UgYW5kCi0gICAgICogc2luY2UgdGhleSBh
cmUgZGlzY2FyZGVkIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgcmVtb3ZlZCB3aXRoIHRoZQotICAg
ICAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgbWV0aG9kLiBQYXJhbWV0ZXJzCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gdHlwZSBUaGUgZXZlbnQgdHlwZSBmb3Igd2hpY2ggdGhlIHVzZXIgaXMgcmVnaXN0
ZXJpbmcKLSAgICAgKgotICAgICAqIEBwYXJhbSBsaXN0ZW5lciBUaGUgbGlzdGVuZXIgcGFyYW1l
dGVyIHRha2VzIGFuIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieQotICAgICAqIHRoZSB1c2VyIHdo
aWNoIGNvbnRhaW5zIHRoZSBtZXRob2RzIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBvY2N1
cnMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdXNlQ2FwdHVyZSBJZiB0cnVlLCB1c2VDYXB0dXJl
IGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHdpc2hlcyB0bwotICAgICAqIGluaXRpYXRlIGNhcHR1
cmUuIEFmdGVyIGluaXRpYXRpbmcgY2FwdHVyZSwgYWxsIGV2ZW50cyBvZiB0aGUgc3BlY2lmaWVk
Ci0gICAgICogdHlwZSB3aWxsIGJlIGRpc3BhdGNoZWQgdG8gdGhlIHJlZ2lzdGVyZWQgRXZlbnRM
aXN0ZW5lciBiZWZvcmUgYmVpbmcKLSAgICAgKiBkaXNwYXRjaGVkIHRvIGFueSBFdmVudFRhcmdl
dHMgYmVuZWF0aCB0aGVtIGluIHRoZSB0cmVlLiBFdmVudHMgd2hpY2gKLSAgICAgKiBhcmUgYnVi
YmxpbmcgdXB3YXJkIHRocm91Z2ggdGhlIHRyZWUgd2lsbCBub3QgdHJpZ2dlciBhbiBFdmVudExp
c3RlbmVyCi0gICAgICogZGVzaWduYXRlZCB0byB1c2UgY2FwdHVyZS4KLSAgICAgKi8KLSAgICB2
b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgRE9NU3RyaW5nICZ0eXBlLAotCQkJICBFdmVudExp
c3RlbmVyICpsaXN0ZW5lciwKLQkJCSAgYm9vbCB1c2VDYXB0dXJlKTsKLQotICAgIC8qKgotICAg
ICAqIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBmcm9t
IHRoZSBFdmVudFRhcmdldCBpbnRlcmZhY2UKLSAgICAgKgotICAgICAqIFRoaXMgbWV0aG9kIGFs
bG93cyB0aGUgcmVtb3ZhbCBvZiBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgZXZlbnQgdGFyZ2V0
LgotICAgICAqIElmIGFuIEV2ZW50TGlzdGVuZXIgaXMgcmVtb3ZlZCBmcm9tIGFuIEV2ZW50VGFy
Z2V0IHdoaWxlIGl0IGlzCi0gICAgICogcHJvY2Vzc2luZyBhbiBldmVudCwgaXQgd2lsbCBub3Qg
YmUgdHJpZ2dlcmVkIGJ5IHRoZSBjdXJyZW50IGFjdGlvbnMuCi0gICAgICoKLSAgICAgKiBFdmVu
dExpc3RlbmVycyBjYW4gbmV2ZXIgYmUgaW52b2tlZCBhZnRlciBiZWluZyByZW1vdmVkLgotICAg
ICAqCi0gICAgICogQ2FsbGluZyByZW1vdmVFdmVudExpc3RlbmVyIHdpdGggYXJndW1lbnRzIHdo
aWNoIGRvIG5vdCBpZGVudGlmeSBhbnkKLSAgICAgKiBjdXJyZW50bHkgcmVnaXN0ZXJlZCBFdmVu
dExpc3RlbmVyIG9uIHRoZSBFdmVudFRhcmdldCBoYXMgbm8gZWZmZWN0LgotICAgICAqCi0gICAg
ICogQHBhcmFtIHR5cGUgU3BlY2lmaWVzIHRoZSBldmVudCB0eXBlIG9mIHRoZSBFdmVudExpc3Rl
bmVyIGJlaW5nIHJlbW92ZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbGlzdGVuZXIgVGhlIEV2
ZW50TGlzdGVuZXIgcGFyYW1ldGVyIGluZGljYXRlcyB0aGUgRXZlbnRMaXN0ZW5lcgotICAgICAq
IHRvIGJlIHJlbW92ZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdXNlQ2FwdHVyZSBTcGVjaWZp
ZXMgd2hldGhlciB0aGUgRXZlbnRMaXN0ZW5lciBiZWluZyByZW1vdmVkIHdhcwotICAgICAqIHJl
Z2lzdGVyZWQgYXMgYSBjYXB0dXJpbmcgbGlzdGVuZXIgb3Igbm90LiBJZiBhIGxpc3RlbmVyIHdh
cyByZWdpc3RlcmVkCi0gICAgICogdHdpY2UsIG9uZSB3aXRoIGNhcHR1cmUgYW5kIG9uZSB3aXRo
b3V0LCBlYWNoIG11c3QgYmUgcmVtb3ZlZAotICAgICAqIHNlcGFyYXRlbHkuIFJlbW92YWwgb2Yg
YSBjYXB0dXJpbmcgbGlzdGVuZXIgZG9lcyBub3QgYWZmZWN0IGEKLSAgICAgKiBub24tY2FwdHVy
aW5nIHZlcnNpb24gb2YgdGhlIHNhbWUgbGlzdGVuZXIsIGFuZCB2aWNlIHZlcnNhLgotICAgICAq
LwotCi0gICAgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IERPTVN0cmluZyAmdHlwZSwK
LQkJCSAgICAgRXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsCi0JCQkgICAgIGJvb2wgdXNlQ2FwdHVy
ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi0gICAgICog
VGhpcyBtZXRob2QgaXMgZnJvbSB0aGUgRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICoKLSAg
ICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgdGhlIGRpc3BhdGNoIG9mIGV2ZW50cyBpbnRvIHRoZSBp
bXBsZW1lbnRhdGlvbnMgZXZlbnQKLSAgICAgKiBtb2RlbC4gRXZlbnRzIGRpc3BhdGNoZWQgaW4g
dGhpcyBtYW5uZXIgd2lsbCBoYXZlIHRoZSBzYW1lIGNhcHR1cmluZyBhbmQKLSAgICAgKiBidWJi
bGluZyBiZWhhdmlvciBhcyBldmVudHMgZGlzcGF0Y2hlZCBkaXJlY3RseSBieSB0aGUgaW1wbGVt
ZW50YXRpb24uCi0gICAgICogVGhlIHRhcmdldCBvZiB0aGUgZXZlbnQgaXMgdGhlIEV2ZW50VGFy
Z2V0IG9uIHdoaWNoIGRpc3BhdGNoRXZlbnQgaXMKLSAgICAgKiBjYWxsZWQuCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0gZXZ0IFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZSwgYmVoYXZpb3IsIGFuZCBj
b250ZXh0dWFsCi0gICAgICogaW5mb3JtYXRpb24gdG8gYmUgdXNlZCBpbiBwcm9jZXNzaW5nIHRo
ZSBldmVudC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIHJldHVybiB2YWx1ZSBvZiBkaXNw
YXRjaEV2ZW50IGluZGljYXRlcyB3aGV0aGVyIGFueSBvZiB0aGUKLSAgICAgKiBsaXN0ZW5lcnMg
d2hpY2ggaGFuZGxlZCB0aGUgZXZlbnQgY2FsbGVkIHByZXZlbnREZWZhdWx0LiBJZgotICAgICAq
IHByZXZlbnREZWZhdWx0IHdhcyBjYWxsZWQgdGhlIHZhbHVlIGlzIGZhbHNlLCBlbHNlIHRoZSB2
YWx1ZSBpcyB0cnVlLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBFdmVudEV4Y2VwdGlvbgot
ICAgICAqIFVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOiBSYWlzZWQgaWYgdGhlIEV2ZW50J3Mg
dHlwZSB3YXMgbm90IHNwZWNpZmllZAotICAgICAqIGJ5IGluaXRpYWxpemluZyB0aGUgZXZlbnQg
YmVmb3JlIGRpc3BhdGNoRXZlbnQgd2FzIGNhbGxlZC4gU3BlY2lmaWNhdGlvbgotICAgICAqIG9m
IHRoZSBFdmVudCdzIHR5cGUgYXMgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcgd2lsbCBhbHNvIHRy
aWdnZXIgdGhpcwotICAgICAqIGV4Y2VwdGlvbi4KLSAgICAgKi8KLSAgICBib29sIGRpc3BhdGNo
RXZlbnQoY29uc3QgRXZlbnQgJmV2dCk7Ci0KLSAgICAvKioKLSAgICAgKiB0ZXN0cyBpZiB0aGlz
IE5vZGUgaXMgMC4gVXNlZnVsIGVzcGVjaWFsbHksIGlmIGNhc3RpbmcgdG8gYSBkZXJpdmVkCi0g
ICAgICogY2xhc3M6Ci0gICAgICoKLSAgICAgKiA8cHJlPgotICAgICAqIE5vZGUgbiA9IC4uLi4u
OwotICAgICAqIC8vIHRyeSB0byBjb252ZXJ0IGludG8gYW4gRWxlbWVudDoKLSAgICAgKiBFbGVt
ZW50IGUgPSBuOwotICAgICAqIGlmKCBlLmlzTnVsbCgpICkKLSAgICAgKiAgIGtkRGVidWcoMzAw
KSA8PCAibm9kZSBpc24ndCBhbiBlbGVtZW50IG5vZGUiIDw8IGVuZGw7Ci0gICAgICogPC9wcmU+
Ci0gICAgICovCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBpbXBsID09IDA7IH0K
LQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbCBoYW5kbGUgdG8gdGhlIGltcGxlbWVudGF0aW9u
IG9iamVjdAotICAgICAqLwotICAgIE5vZGVJbXBsICpoYW5kbGUoKSBjb25zdCB7IHJldHVybiBp
bXBsOyB9Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwgcmV0dXJucyB0aGUgaW5kZXggb2Yg
YSBub2RlCi0gICAgICovCi0gICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdDsKLSAgICBRU3RyaW5n
IHRvSFRNTCgpOwotICAgIHZvaWQgYXBwbHlDaGFuZ2VzKCk7Ci0gICAgLyoqCi0gICAgICogbm90
IHBhcnQgb2YgdGhlIERPTS4KLSAgICAgKiBAcmV0dXJucyB0aGUgZXhhY3QgY29vcmRpbmF0ZXMg
YW5kIHNpemUgb2YgdGhpcyBlbGVtZW50LgotICAgICAqLwotICAgIFFSZWN0IGdldFJlY3QoKTsK
LQotICAgIC8qKgotICAgICAqIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgICogQHJldHVybnMg
d2hldGhlciB0aGlzIG5vZGUgaXMgY29udGVudGVkaXRhYmxlLgotICAgICAqLwotICAgIGJvb2wg
aXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIE5vZGVJbXBsICpp
bXBsOwotCi0jZW5kaWYKIAogfTsKIAogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQot
Y2xhc3MgTm9kZUxpc3RJbXBsOwotCi0vKioKLSAqIFRoZSA8Y29kZT4gTm9kZUxpc3QgPC9jb2Rl
PiBpbnRlcmZhY2UgcHJvdmlkZXMgdGhlIGFic3RyYWN0aW9uIG9mCi0gKiBhbiBvcmRlcmVkIGNv
bGxlY3Rpb24gb2Ygbm9kZXMsIHdpdGhvdXQgZGVmaW5pbmcgb3IgY29uc3RyYWluaW5nCi0gKiBo
b3cgdGhpcyBjb2xsZWN0aW9uIGlzIGltcGxlbWVudGVkLgotICoKLSAqICBUaGUgaXRlbXMgaW4g
dGhlIDxjb2RlPiBOb2RlTGlzdCA8L2NvZGU+IGFyZSBhY2Nlc3NpYmxlIHZpYSBhbgotICogaW50
ZWdyYWwgaW5kZXgsIHN0YXJ0aW5nIGZyb20gMC4KLSAqCi0gKi8KLWNsYXNzIE5vZGVMaXN0Ci17
Ci0gICAgZnJpZW5kIGNsYXNzIEVsZW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIE5vZGU7Ci0gICAg
ZnJpZW5kIGNsYXNzIERvY3VtZW50OwotICAgIGZyaWVuZCBjbGFzcyBIVE1MRG9jdW1lbnQ7Ci0g
ICAgZnJpZW5kIGNsYXNzIE5vZGVMaXN0SW1wbDsKLQotcHVibGljOgotICAgIE5vZGVMaXN0KCk7
Ci0gICAgTm9kZUxpc3QoY29uc3QgTm9kZUxpc3QgJm90aGVyKTsKLQotICAgIE5vZGVMaXN0ICYg
b3BlcmF0b3IgPSAoY29uc3QgTm9kZUxpc3QgJm90aGVyKTsKLQotICAgIH5Ob2RlTGlzdCgpOwot
Ci0gICAgLyoqCi0gICAgICogVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgbGlzdC4gVGhlIHJh
bmdlIG9mIHZhbGlkIGNoaWxkIG5vZGUKLSAgICAgKiBpbmRpY2VzIGlzIDAgdG8gPGNvZGU+IGxl
bmd0aC0xIDwvY29kZT4gaW5jbHVzaXZlLgotICAgICAqCi0gICAgICovCi0gICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSA8Y29kZT4gaW5k
ZXggPC9jb2RlPiB0aCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLiBJZgotICAgICAqIDxjb2RlPiBp
bmRleCA8L2NvZGU+IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mCi0g
ICAgICogbm9kZXMgaW4gdGhlIGxpc3QsIHRoaXMgcmV0dXJucyA8Y29kZT4gbnVsbCA8L2NvZGU+
IC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBpbnRvIHRoZSBjb2xsZWN0aW9u
LgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbm9kZSBhdCB0aGUgPGNvZGU+IGluZGV4IDwv
Y29kZT4gdGggcG9zaXRpb24gaW4gdGhlCi0gICAgICogPGNvZGU+IE5vZGVMaXN0IDwvY29kZT4g
LCBvciA8Y29kZT4gbnVsbCA8L2NvZGU+IGlmIHRoYXQgaXMgbm90Ci0gICAgICogYSB2YWxpZCBp
bmRleC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkg
Y29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKiBub3QgcGFydCBvZiB0
aGUgRE9NCi0gICAgICovCi0gICAgTm9kZSBpdGVtQnlJZCAoY29uc3QgRE9NU3RyaW5nJiBlbGVt
ZW50SWQpIGNvbnN0OwotCi0gICAgTm9kZUxpc3RJbXBsICpoYW5kbGUoKSBjb25zdDsKLSAgICBi
b29sIGlzTnVsbCgpIGNvbnN0OwotCi0gICAgTm9kZUxpc3QoY29uc3QgTm9kZUxpc3RJbXBsICpp
KTsKLQotcHJvdGVjdGVkOgotICAgIE5vZGVMaXN0SW1wbCAqaW1wbDsKLX07Ci0KLSNlbmRpZgog
CiAvKioKICAqIEEgRE9NVGltZVN0YW1wIHJlcHJlc2VudHMgYSBudW1iZXIgb2YgbWlsbGlzZWNv
bmRzLgpJbmRleDoga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjcxCmRpZmYgLXAgLXUgLXIxLjcxIGtodG1sL2VjbWEva2pzX2V2ZW50cy5j
cHAKLS0tIGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJMjcgTm92IDIwMDUgMDc6NTQ6NTAgLTAw
MDAJMS43MQorKysga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAkyOSBOb3YgMjAwNSAxMjo0MToy
OSAtMDAwMApAQCAtNzQsMTEgKzc0LDcgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5lcjo6
aGFuZGxlRXZlbgogICAgIHJldHVybjsKICNlbmRpZgogCi0jaWYgS0hUTUxfTk9fQ1BMVVNQTFVT
X0RPTQogICBFdmVudEltcGwgKmV2dCA9IGVsZTsKLSNlbHNlCi0gIEV2ZW50SW1wbCAqZXZ0ID0g
ZWxlLmhhbmRsZSgpOwotI2VuZGlmCiAKICAgT2JqZWN0SW1wICpsaXN0ZW5lciA9IGxpc3RlbmVy
T2JqKCk7CiAgIE9iamVjdEltcCAqd2luID0gd2luZG93T2JqKCk7CkluZGV4OiBraHRtbC9lY21h
L2tqc190cmF2ZXJzYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkK
ZGlmZiAtcCAtdSAtcjEuMTkga2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmNwcAotLS0ga2h0bWwv
ZWNtYS9ranNfdHJhdmVyc2FsLmNwcAkyNyBOb3YgMjAwNSAwNzo1NDo1MCAtMDAwMAkxLjE5Cisr
KyBraHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwCTI5IE5vdiAyMDA1IDEyOjQxOjI5IC0wMDAw
CkBAIC0zMTYsMTEgKzMxNiw3IEBAIEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6SlNOb2RlRmlsdGVy
Q29uZGkKIAogc2hvcnQgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEZpbHRlck5v
ZGUgZmlsdGVyTm9kZSkgY29uc3QKIHsKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotICAg
IE5vZGVJbXBsICpub2RlID0gZmlsdGVyTm9kZS5oYW5kbGUoKTsKLSNlbHNlCiAgICAgTm9kZUlt
cGwgKm5vZGUgPSBmaWx0ZXJOb2RlOwotI2VuZGlmCiAgICAgS0hUTUxQYXJ0ICpwYXJ0ID0gbm9k
ZS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpOwogICAgIEtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5
Ojpwcm94eShwYXJ0KTsKICAgICBpZiAocHJveHkgJiYgZmlsdGVyLT5pbXBsZW1lbnRzQ2FsbCgp
KSB7CkluZGV4OiBrd3EvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2t3cS9ET00ubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjAKZGlmZiAtcCAtdSAtcjEu
NjAga3dxL0RPTS5tbQotLS0ga3dxL0RPTS5tbQkyMyBOb3YgMjAwNSAwOTo0Njo1NyAtMDAwMAkx
LjYwCisrKyBrd3EvRE9NLm1tCTI5IE5vdiAyMDA1IDEyOjQxOjMxIC0wMDAwCkBAIC0yMjQ4LDEx
ICsyMjQ4LDcgQEAgT2JqQ05vZGVGaWx0ZXJDb25kaXRpb246On5PYmpDTm9kZUZpbHRlcgogCiBz
aG9ydCBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShGaWx0ZXJOb2RlIG4pIGNv
bnN0CiB7Ci0jaWYgS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQogICAgIE5vZGVJbXBsICpub2RlID0g
bjsKLSNlbHNlCi0gICAgTm9kZUltcGwgKm5vZGUgPSBuLmhhbmRsZSgpOwotI2VuZGlmCiAgICAg
aWYgKCFub2RlKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKICAg
ICByZXR1cm4gW21fZmlsdGVyIGFjY2VwdE5vZGU6W0RPTU5vZGUgX25vZGVXaXRoSW1wbDpub2Rl
XV07CkluZGV4OiBrd3EvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9rd3EvRE9NSFRNTC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC1w
IC11IC1yMS4zMSBrd3EvRE9NSFRNTC5tbQotLS0ga3dxL0RPTUhUTUwubW0JMyBPY3QgMjAwNSAy
MToxMzowMCAtMDAwMAkxLjMxCisrKyBrd3EvRE9NSFRNTC5tbQkyOSBOb3YgMjAwNSAxMjo0MToz
MyAtMDAwMApAQCAtNDExMCwxNiArNDExMCw2IEBAIHN0YXRpYyBOU1ZpZXcgKnZpZXdGb3JFbGVt
ZW50KERPTUVsZW1lbnQKICAgICAvLyBGSVhNRSA0MTk3OTk3OiBUaGlzIGNvZGUgc2hvdWxkIHdv
cmssIGFuZCB3aGVuIGl0IGRvZXMgd2UgY2FuIGVsaW1pbmF0ZSB0aGlzIG1ldGhvZCBlbnRpcmVs
eQogICAgIC8vIGFuZCBqdXN0IGhhdmUgdGhlIG9ubHkgY3VycmVudCBjYWxsZXIgKGluIFNhZmFy
aSBhdXRvZmlsbCBjb2RlKSBlbWJlZCB0aGlzIGNvZGUgZGlyZWN0bHkuCiAgICAgLy8gQnV0IGF0
IHRoZSBtb21lbnQgLVtET01IVE1MU2VsZWN0RWxlbWVudCBvcHRpb25zXSBhbHdheXMgcmV0dXJu
cyBhbiBlbXB0eSBjb2xsZWN0aW9uLgotI2lmIDAKLSAgICBET01IVE1MT3B0aW9uc0NvbGxlY3Rp
b24gKm9wdGlvbnMgPSBbc2VsZiBvcHRpb25zXTsKLSAgICBOU011dGFibGVBcnJheSAqb3B0aW9u
TGFiZWxzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICBpbnQgaXRlbUNvdW50ID0gW29w
dGlvbnMgbGVuZ3RoXTsKLSAgICBpbnQgaXRlbUluZGV4OwotICAgIGZvciAoaXRlbUluZGV4ID0g
MDsgaXRlbUluZGV4IDwgaXRlbUNvdW50OyArK2l0ZW1JbmRleCkgewotICAgICAgICBbb3B0aW9u
TGFiZWxzIGFkZE9iamVjdDpbKERPTUhUTUxPcHRpb25FbGVtZW50ICopW29wdGlvbnMgaXRlbTpp
dGVtSW5kZXhdIGxhYmVsXV07Ci0gICAgfQotICAgIHJldHVybiBvcHRpb25MYWJlbHM7Ci0jZW5k
aWYKICAgICAKICAgICAvLyBEdWUgdG8gdGhlIERPTSBBUEkgYnJva2VubmVzcywgZm9yIG5vdyB3
ZSBoYXZlIHRvIGdldCB0aGUgdGl0bGVzIGZyb20gdGhlIHZpZXcKICAgICByZXR1cm4gWyhOU1Bv
cFVwQnV0dG9uICopdmlld0ZvckVsZW1lbnQoc2VsZikgaXRlbVRpdGxlc107CkluZGV4OiBrd3Ev
S1dRS0NvbmZpZ0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
d3EvS1dRS0NvbmZpZ0Jhc2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC1wIC11
IC1yMS4xOSBrd3EvS1dRS0NvbmZpZ0Jhc2UuaAotLS0ga3dxL0tXUUtDb25maWdCYXNlLmgJMjMg
TWF5IDIwMDQgMjI6NDU6MjggLTAwMDAJMS4xOQorKysga3dxL0tXUUtDb25maWdCYXNlLmgJMjkg
Tm92IDIwMDUgMTI6NDE6MzMgLTAwMDAKQEAgLTI3LDkgKzI3LDcgQEAKICNkZWZpbmUgS0NPTkZJ
R19IXwogCiAjaW5jbHVkZSAiS1dRU3RyaW5nLmgiCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1
ZGUgIktXUUtIVE1MU2V0dGluZ3MuaCIKLSNlbmRpZgogCiBjbGFzcyBRQ29sb3I7CiBjbGFzcyBR
U3RyaW5nTGlzdDsKSW5kZXg6IGt3cS9LV1FLSFRNTFBhZ2VDYWNoZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhZ2VDYWNoZS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAtcjEuNSBrd3EvS1dRS0hUTUxQYWdlQ2FjaGUu
aAotLS0ga3dxL0tXUUtIVE1MUGFnZUNhY2hlLmgJMjIgSmFuIDIwMDMgMDA6MTI6MzUgLTAwMDAJ
MS41CisrKyBrd3EvS1dRS0hUTUxQYWdlQ2FjaGUuaAkyOSBOb3YgMjAwNSAxMjo0MTozMyAtMDAw
MApAQCAtMzAsMTIgKzMwLDEwIEBACiAKIGNsYXNzIFFPYmplY3Q7CiAKLSNpZmRlZiBBUFBMRV9D
SEFOR0VTCiAvKgogICAgIFRoaXMgY2xhc3MgaXMgbm90IHVzZWQgYnkgV2ViQ29yZS4gIFRoZSBX
ZWJDb3JlL1dlYktpdCBwYWdlIGNhY2hlIGlzCiAgICAgYSBjYWNoZSBvZiBhIGZ1bGx5IGNvbnN0
cnVjdGVkIERPTSBhbmQgYXNzb2NpYXRlZCByZW5kZXIgb2JqZWN0cy4KICovCi0jZW5kaWYKIGNs
YXNzIEtIVE1MUGFnZUNhY2hlCiB7CiBwdWJsaWM6CkluZGV4OiBrd3EvS1dRS0hUTUxQYXJ0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQu
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjkwCmRpZmYgLXAgLXUgLXIxLjY5MCBrd3EvS1dR
S0hUTUxQYXJ0Lm1tCi0tLSBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTI3IE5vdiAyMDA1IDA3OjU0OjUy
IC0wMDAwCTEuNjkwCisrKyBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTI5IE5vdiAyMDA1IDEyOjQxOjM2
IC0wMDAwCkBAIC04Miw5ICs4Miw3IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9ydW50aW1l
X3Jvb3QuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1dlYlNjcmlwdE9iamVjdFByaXZhdGUu
aD4KIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbXBvcnQgIktXUUFjY09iamVjdENhY2hlLmgiCi0j
ZW5kaWYKIAogI3VuZGVmIF9LV1FfVElNSU5HCiAKQEAgLTE2MiwxMyArMTYwLDYgQEAgdm9pZCBL
SFRNTFBhcnQ6OmNvbXBsZXRlZChib29sIGFyZykKICAgICBLV1EodGhpcyktPl9jb21wbGV0ZWQu
Y2FsbChhcmcpOwogfQogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotdm9pZCBLSFRN
TFBhcnQ6Om5vZGVBY3RpdmF0ZWQoY29uc3QgTm9kZSAmKQotewotfQotCi0jZW5kaWYKIAogYm9v
bCBLSFRNTFBhcnQ6Om9wZW5VUkwoY29uc3QgS1VSTCAmVVJMKQogewpAQCAtMTE2NSwxMiArMTE1
NiwxMCBAQCB2b2lkIEtXUUtIVE1MUGFydDo6cGFpbnQoUVBhaW50ZXIgKnAsIGNvCiAgICAgICAg
IFJlbmRlck9iamVjdCAqZWx0UmVuZGVyZXIgPSBfZWxlbWVudFRvRHJhdy5ub3ROdWxsKCkgPyBf
ZWxlbWVudFRvRHJhdy0+cmVuZGVyZXIoKSA6IDA7CiAgICAgICAgIHJlbmRlcmVyKCktPmxheWVy
KCktPnBhaW50KHAsIHJlY3QsIF9kcmF3U2VsZWN0aW9uT25seSwgZWx0UmVuZGVyZXIpOwogCi0j
aWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAvLyBSZWdpb25zIG1heSBoYXZlIGNoYW5nZWQgYXMg
YSByZXN1bHQgb2YgdGhlIHZpc2liaWxpdHkvei1pbmRleCBvZiBlbGVtZW50IGNoYW5naW5nLgog
ICAgICAgICBpZiAocmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+ZGFzaGJvYXJkUmVnaW9uc0RpcnR5
KCkpewogICAgICAgICAgICAgcmVuZGVyZXIoKS0+Y2FudmFzKCktPnZpZXcoKS0+dXBkYXRlRGFz
aGJvYXJkUmVnaW9ucygpOwogICAgICAgICB9Ci0jZW5kaWYKICAgICB9IGVsc2UgewogICAgICAg
ICBFUlJPUigiY2FsbGVkIEtXUUtIVE1MUGFydDo6cGFpbnQgd2l0aCBuaWwgcmVuZGVyZXIiKTsK
ICAgICB9CkBAIC00MTcwLDExICs0MTU5LDkgQEAgYm9vbCBLV1FLSFRNTFBhcnQ6OnNob3VsZENo
YW5nZVNlbGVjdGlvbgogCiB2b2lkIEtXUUtIVE1MUGFydDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKCkKIHsKLSNpZiBBUFBMRV9DSEFOR0VTCiAgICAgaWYgKEtXUUFjY09iamVjdENhY2hlOjph
Y2Nlc3NpYmlsaXR5RW5hYmxlZCgpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPmRvY3VtZW50KCkt
PmdldEFjY09iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb25Ub1RvcFdlYkFyZWEocmVuZGVy
ZXIoKSwgIkFYVmFsdWVDaGFuZ2VkIik7CiAgICAgfQotI2VuZGlmCiAgICAgW19icmlkZ2UgcmVz
cG9uZFRvQ2hhbmdlZENvbnRlbnRzXTsKIH0KIApJbmRleDoga3dxL0tXUUtVUkwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtVUkwubW0sdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOTUKZGlmZiAtcCAtdSAtcjEuOTUga3dxL0tXUUtVUkwubW0KLS0tIGt3
cS9LV1FLVVJMLm1tCTEgTm92IDIwMDUgMTc6MjE6NDIgLTAwMDAJMS45NQorKysga3dxL0tXUUtV
UkwubW0JMjkgTm92IDIwMDUgMTI6NDE6MzggLTAwMDAKQEAgLTcyOCwxNiArNzI4LDYgQEAgdm9p
ZCBLVVJMOjpzZXRVc2VyKGNvbnN0IFFTdHJpbmcgJnVzZXIpCiAgICAgICAgIGlmICghdXNlci5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFVudGVzdGVkIGNvZGUsIGJ1dCB0aGlzIGlzIG5l
dmVyIHVzZWQuCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNpZiAwCi0gICAg
ICAgICAgICB1ID0gdXNlcjsKLSAgICAgICAgICAgIGlmICh1c2VyU3RhcnRQb3MgPT0gc2NoZW1l
RW5kUG9zICsgMSkgewotICAgICAgICAgICAgICAgIHUgPSAiLy8iICsgdTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIC8vIEFkZCAnQCcgaWYgd2UgZGlkbid0IGhhdmUgb25lIGJlZm9yZS4K
LSAgICAgICAgICAgIGlmIChlbmQgPT0gaG9zdEVuZFBvcyB8fCAoZW5kID09IHBhc3N3b3JkRW5k
UG9zICYmIHVybFN0cmluZ1tlbmRdICE9ICdAJykpIHsKLSAgICAgICAgICAgICAgICB1ICs9ICdA
JzsKLSAgICAgICAgICAgIH0KLSNlbmRpZgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gUmVtb3ZlICdAJyBpZiB3ZSBub3cgaGF2ZSBuZWl0aGVyIHVzZXIgbm9yIHBhc3N3b3JkLgog
ICAgICAgICAgICAgaWYgKHVzZXJFbmRQb3MgPT0gcGFzc3dvcmRFbmRQb3MgJiYgZW5kICE9IGhv
c3RFbmRQb3MgJiYgdXJsU3RyaW5nW2VuZF0gPT0gJ0AnKSB7CkBAIC03NTcsMTYgKzc0Nyw2IEBA
IHZvaWQgS1VSTDo6c2V0UGFzcyhjb25zdCBRU3RyaW5nICZwYXNzd28KICAgICAgICAgaWYgKCFw
YXNzd29yZC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIFVudGVzdGVkIGNvZGUsIGJ1dCB0
aGlzIGlzIG5ldmVyIHVzZWQuCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNp
ZiAwCi0gICAgICAgICAgICBwID0gJzonICsgcGFzc3dvcmQgKyAnQCc7Ci0gICAgICAgICAgICBp
ZiAodXNlckVuZFBvcyA9PSBzY2hlbWVFbmRQb3MgKyAxKSB7Ci0gICAgICAgICAgICAgICAgcCA9
ICIvLyIgKyBwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gRWF0IHRoZSBleGlzdGlu
ZyAnQCcgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGFkZCBvdXIgb3duLgotICAgICAgICAgICAgaWYg
KGVuZCAhPSBob3N0RW5kUG9zICYmIHVybFN0cmluZ1tlbmRdID09ICdAJykgewotICAgICAgICAg
ICAgICAgIGVuZCArPSAxOwotICAgICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAvLyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBu
b3IgcGFzc3dvcmQuCiAgICAgICAgICAgICBpZiAodXNlclN0YXJ0UG9zID09IHVzZXJFbmRQb3Mg
JiYgZW5kICE9IGhvc3RFbmRQb3MgJiYgdXJsU3RyaW5nW2VuZF0gPT0gJ0AnKSB7CkluZGV4OiBr
d3EvS1dRUG9pbnRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2t3cS9LV1FQb2ludEFycmF5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjkKZGlmZiAtcCAt
dSAtcjEuMjkga3dxL0tXUVBvaW50QXJyYXkuaAotLS0ga3dxL0tXUVBvaW50QXJyYXkuaAkxMiBP
Y3QgMjAwNSAwMDo0NDo1MyAtMDAwMAkxLjI5CisrKyBrd3EvS1dRUG9pbnRBcnJheS5oCTI5IE5v
diAyMDA1IDEyOjQxOjM4IC0wMDAwCkBAIC05MywxMiArOTMsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBwb2ludCh1aW50LCBpbnQgKiwgaW50ICopOwogICAgIHZvaWQgc2V0UG9pbnQodWlu
dCwgaW50LCBpbnQpOwotI2lmIDAKLSAgICAvLyBGSVhNRTogV29ya2Fyb3VuZCBmb3IgUmFkYXIg
MjkyMTA2MS4KLSAgICBib29sIHNldFBvaW50cyhpbnQsIGludCwgaW50LCAuLi4pOwotI2Vsc2UK
ICAgICBib29sIHNldFBvaW50cyhpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGlu
dCwgaW50KTsKLSNlbmRpZgogICAgIGJvb2wgc2V0UG9pbnRzKCBpbnQgblBvaW50cywgY29uc3Qg
aW50ICpwb2ludHMgKTsKICAgICAKICNpZmRlZiBfS1dRX0lPU1RSRUFNXwpJbmRleDoga3dxL0tX
UVBvaW50QXJyYXkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dx
L0tXUVBvaW50QXJyYXkubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtcCAtdSAt
cjEuMTEga3dxL0tXUVBvaW50QXJyYXkubW0KLS0tIGt3cS9LV1FQb2ludEFycmF5Lm1tCTMgT2N0
IDIwMDUgMjE6MTM6MDcgLTAwMDAJMS4xMQorKysga3dxL0tXUVBvaW50QXJyYXkubW0JMjkgTm92
IDIwMDUgMTI6NDE6MzggLTAwMDAKQEAgLTEwMCwyNyArMTAwLDYgQEAgYm9vbCBRUG9pbnRBcnJh
eTo6c2V0UG9pbnRzKCBpbnQgblBvaW50cwogfQogCiAvLyBGSVhNRTogV29ya2Fyb3VuZCBmb3Ig
UmFkYXIgMjkyMTA2MQotI2lmIDAKLQotYm9vbCBRUG9pbnRBcnJheTo6c2V0UG9pbnRzKCBpbnQg
blBvaW50cywgaW50IGZpcnN0eCwgaW50IGZpcnN0eSwgLi4uICkKLXsKLSAgICB2YV9saXN0IGFw
OwotICAgIGlmICggIXJlc2l6ZShuUG9pbnRzKSApCi0JcmV0dXJuIEZBTFNFOwotICAgIHNldFBv
aW50KCAwLCBmaXJzdHgsIGZpcnN0eSApOwkJLy8gc2V0IGZpcnN0IHBvaW50Ci0gICAgaW50IGkg
PSAxLCB4LCB5OwotICAgIG5Qb2ludHMtLTsKLSAgICB2YV9zdGFydCggYXAsIGZpcnN0eSApOwot
ICAgIHdoaWxlICggblBvaW50cy0tICkgewotCXggPSB2YV9hcmcoIGFwLCBpbnQgKTsKLQl5ID0g
dmFfYXJnKCBhcCwgaW50ICk7Ci0Jc2V0UG9pbnQoIGkrKywgeCwgeSApOwotICAgIH0KLSAgICB2
YV9lbmQoIGFwICk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLSNlbHNlCiAKIGJvb2wgUVBvaW50
QXJyYXk6OnNldFBvaW50cyggaW50IG5Qb2ludHMsIGludCB4MCwgaW50IHkwLCBpbnQgeDEsIGlu
dCB5MSwgaW50IHgyLCBpbnQgeTIsIGludCB4MywgaW50IHkzKQogewpAQCAtMTMzLDQgKzExMiwz
IEBAIGJvb2wgUVBvaW50QXJyYXk6OnNldFBvaW50cyggaW50IG5Qb2ludHMKICAgICByZXR1cm4g
VFJVRTsKIH0KIAotI2VuZGlmCkluZGV4OiBrd3EvS1dRU3RyaW5nLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FTdHJpbmcubW0sdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTQzCmRpZmYgLXAgLXUgLXIxLjE0MyBrd3EvS1dRU3RyaW5nLm1tCi0tLSBrd3Ev
S1dRU3RyaW5nLm1tCTE5IE9jdCAyMDA1IDAwOjAzOjQ2IC0wMDAwCTEuMTQzCisrKyBrd3EvS1dR
U3RyaW5nLm1tCTI5IE5vdiAyMDA1IDEyOjQxOjQwIC0wMDAwCkBAIC0yODM1LDQyICsyODM1LDkg
QEAgc3RydWN0IEhhbmRsZU5vZGUgewogICAgIH0gdHlwZTsKIH07CiAKLSNpZiAxIC8vIGNoYW5n
ZSB0byAwIHRvIGRvIHRoZSBwYWdlIGxpc3RzIGNoZWNrcwogCiAjZGVmaW5lIENIRUNLX1BBR0Vf
TElTVFMoKSAoKHZvaWQpMCkKIAotI2Vsc2UKLQotc3RhdGljIHZvaWQgQ0hFQ0tfUEFHRV9MSVNU
UygpCi17Ci0gICAgewotICAgICAgICBpbnQgbG9vcENvdW50ID0gMDsKLSAgICAgICAgSGFuZGxl
UGFnZU5vZGUgKm5leHQgPSAwOwotICAgICAgICBmb3IgKEhhbmRsZVBhZ2VOb2RlICpwYWdlID0g
ZnJlZU5vZGVBbGxvY2F0aW9uUGFnZXM7IHBhZ2U7IHBhZ2UgPSBwYWdlLT5wcmV2aW91cykgewot
ICAgICAgICAgICAgQVNTRVJUKHBhZ2UtPm5leHQgPT0gbmV4dCk7Ci0gICAgICAgICAgICBBU1NF
UlQoKChIYW5kbGVOb2RlICopcGFnZS0+bm9kZXMpWzBdLnR5cGUuZnJlZU5vZGVzKTsKLSAgICAg
ICAgICAgIGlmICgrK2xvb3BDb3VudCA+IDEwMCkgewotICAgICAgICAgICAgICAgIEZBVEFMKCJm
cmVlIG5vZGUgcGFnZSBsb29wIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBuZXh0ID0g
cGFnZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB7Ci0gICAgICAgIGludCBsb29wQ291
bnQgPSAwOwotICAgICAgICBIYW5kbGVQYWdlTm9kZSAqbmV4dCA9IDA7Ci0gICAgICAgIGZvciAo
SGFuZGxlUGFnZU5vZGUgKnBhZ2UgPSB1c2VkTm9kZUFsbG9jYXRpb25QYWdlczsgcGFnZTsgcGFn
ZSA9IHBhZ2UtPnByZXZpb3VzKSB7Ci0gICAgICAgICAgICBBU1NFUlQocGFnZS0+bmV4dCA9PSBu
ZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVCgoKEhhbmRsZU5vZGUgKilwYWdlLT5ub2RlcylbMF0u
dHlwZS5mcmVlTm9kZXMgPT0gMCk7Ci0gICAgICAgICAgICBpZiAoKytsb29wQ291bnQgPiAxMDAp
IHsKLSAgICAgICAgICAgICAgICBGQVRBTCgidXNlZCBub2RlIHBhZ2UgbG9vcCIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgbmV4dCA9IHBhZ2U7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LSNlbmRpZgogCiBzdGF0aWMgSGFuZGxlTm9kZSAqaW5pdGlhbGl6ZUhhbmRsZU5vZGVCbG9jayhI
YW5kbGVQYWdlTm9kZSAqcGFnZU5vZGUpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4848</attachid>
            <date>2005-11-29 04:46:54 -0800</date>
            <delta_ts>2005-12-04 02:27:22 -0800</delta_ts>
            <desc>cleanup.pl script</desc>
            <filename>cleanup.pl</filename>
            <type>text/x-perl-script</type>
            <size>383</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsIC13Cm15ICR0ZXN0RGlyZWN0b3J5ID0gJy4nOwpteSBAZmlsZXM7CnB1
c2ggQGZpbGVzLCBtYXAgeyBjaG9tcDsgcy1eJHRlc3REaXJlY3RvcnkvLS07ICRfOyB9IGBmaW5k
IC1FICR0ZXN0RGlyZWN0b3J5IC1yZWdleCAnLipcXC4oaHxjcHB8bW18bXxjKScgLXByaW50YDsK
Zm9yIG15ICRmaWxlIChAZmlsZXMpCnsKCXByaW50ICIkZmlsZVxuIjsKCShzeXN0ZW0oIi4vcGFy
dHBwLnBsIC1EQVBQTEVfQ0hBTkdFUyAtREtIVE1MX05PX0NQTFVTUExVU19ET00gJGZpbGUgPiAk
ZmlsZS50ZW1wIikgPT0gMCkgb3IgZGllICJGYWlsZWQgdG8gcnVuIFBhcnRpYWwgcHJlcHJvY2Vz
c29yIG9uICRmaWxlIjsKCWBtdiAkZmlsZS50ZW1wICRmaWxlYDsKfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4849</attachid>
            <date>2005-11-29 04:47:31 -0800</date>
            <delta_ts>2005-12-04 02:27:22 -0800</delta_ts>
            <desc>A hacked version of the partial preprocessor (partpp.pl)</desc>
            <filename>partpp.pl</filename>
            <type>text/x-perl-script</type>
            <size>18086</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsIC13DQojDQojICBQYXJ0aWFsIFByZXByb2Nlc3Nvcg0KIw0KIyAgVGhp
cyBwcm9ncmFtIHByb2Nlc3NlcyBDIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMsIGVsaW1pbmF0
aW5nDQojICBjb25kaXRpb25zIGtub3duIHRvIGJlIHRydWUgb3IgZmFsc2UuIFRoaXMgY2FuIGJl
IHVzZWQgdG8gc2ltcGxpZnkNCiMgICNpZmRlZi1yaWRkZW4gY29kZS4gVGhpcyBwcm9ncmFtIGF0
dGVtcHRzIHRvIGJlIHNtYXJ0IGFib3V0IGNvbXBsZXgNCiMgIGNvbmRpdGlvbnMuIEZvciBleGFt
cGxlLA0KIyAgICAgICNpZiBkZWZpbmVkKGZvbykgJiYgZGVmaW5lZChiYXIpIHx8IGRlZmluZWQo
aHVoKQ0KIyAgaXMgcmVwbGFjZWQgYnkNCiMgICAgICAjaWYgZGVmaW5lZChodWgpDQojICB3aGVu
IHdlIGtub3cgdGhhdCBmb28gaXMgZGVmaW5lZCBhbmQgYmFyIGlzIG5vdC4gRm9yIGFub3RoZXIg
ZXhhbXBsZSwNCiMgICAgICBwYXJ0cHAgLVVfX1dJTjMyX18NCiMgIHdvdWxkIGVsaW1pbmF0ZSBh
bGwgV2luMzItc3BlY2lmaWMgY29kZSBmcm9tIGEgZ2l2ZW4gc291cmNlIGNvZGUuDQojDQojICBQ
YXJhbWV0ZXJzOg0KIyAgICAtRHN5bSAgICB3ZSBrbm93IHRoYXQgc3ltIGlzIGRlZmluZWQNCiMg
ICAgLVVzeW0gICAgd2Uga25vdyB0aGF0IHN5bSBpcyBub3QgZGVmaW5lZA0KIyAgICAtQyAgICAg
ICBhc3N1bWUgdGhhdCB1c2VyIHdyb3RlICJjbGVhbiIgY29kZSwgdGhhdCBpcywgYWxsDQojICAg
ICAgICAgICAgIG9iamVjdC1saWtlIG1hY3JvcyBiZWhhdmUgYXMgb2JqZWN0cw0KIyAgICAtZCAg
ICAgICBwcm9jZXNzICNkZWZpbmUvI3VuZGVmIGRpcmVjdGl2ZXMgaW4gb3JkZXIgdG8NCiMgICAg
ICAgICAgICAga2VlcCBvdXIgZGljdGlvbmFyeSB1cC10by1kYXRlLg0KIyAgICAtZiAgICAgICBm
b3JjZSBzaW1wbGlmeSBleHByZXNzaW9ucyBldmVuIHdoZW4gdGhleSBkb24ndCBjb250YWluDQoj
ICAgICAgICAgICAgIGFueSBvZiBvdXIgc3ltYm9scw0KIyAgICAtZWV4cHIgICBldmFsdWF0ZSBl
eHByZXNzaW9uIGFuZCBwcmludCBzaW1wbGlmaWVkIHZlcnNpb24NCiMNCiMgIFRoZSAtQyBvcHRp
b24gZGVzZXJ2ZXMgZXhwbGFuYXRpb246IGFzc3VtZSB0aGUgZm9sbG93aW5nOg0KIyAgICAgICAj
ZGVmaW5lIFggMCkgLSAoMQ0KIyAgICAgICAjaWYgKGRlZmluZWQoZm9vKSB8fCBYKQ0KIyAgQXNz
dW1pbmcgZm9vIGlzIGRlZmluZWQsIHRoZSAjaWYgZXhwcmVzc2lvbiB3b3VsZCBiZSBlcXVpdmFs
ZW50IHRvDQojICAgICAgICNpZiAoMSB8fCBYKQ0KIyAgd2hpY2ggaXMgYXQgZmlyc3Qgc2lnaHQg
ZXF1aXZhbGVudCB0bw0KIyAgICAgICAjaWYgKFgpDQojICB3aGljaCBpcyBlcXVhbCB0byAiI2lm
IC0xIiBpLmUuIHRydWUuIEhvd2V2ZXIsIHRoZSBvcmlnaW5hbA0KIyAgZXhwcmVzc2lvbiBpcyAi
I2lmICgxIHx8IDApIC0gKDEpIiB3aGljaCBpcyBmYWxzZS4gVG8gZ3VhcmFudGVlDQojICBjb3Jy
ZWN0bmVzcywgd2UgYXNzdW1lIHRoYXQgdGhpcyBjYW4gaGFwcGVuLCBhbmQgcGFzcyB0aHJvdWdo
DQojICBleHByZXNzaW9ucyBjb250YWluaW5nICJyYXciIG1hY3JvIG5hbWVzIHVuY2hhbmdlZC4g
V2l0aCAtQywgd2UNCiMgIGFzc3VtZSB1c2VyIGRvZXNuJ3Qgd3JpdGUgc3VjaCBoYWNrcyAodGhh
dCBpcywgYWxsIG5vbi1mdW5jdGlvbg0KIyAgbWFjcm9zIGFyZSBwcm9wZXJseSBwYXJlbnRoZXNp
emVkIGV4cHJlc3Npb25zKSwgYW5kIHdvdWxkIHJlcGxhY2UNCiMgIHRoZSBzdGFydGluZyBleHBy
ZXNzaW9uIHdpdGggIihYKSIuDQojDQojICBXaXRoIC1mLCB0aGlzIHByb2dyYW0gc2ltcGxpZmll
cyBleHByZXNzaW9ucyBldmVuIGlmIHRoZXkgZG9uJ3QNCiMgIGNvbnRhaW4gb25lIG9mIG91ciBz
eW1ib2xzLiBGb3IgZXhhbXBsZSwgd2l0aCAtZiwNCiMgICAgICAgI2lmIDEgfHwgMg0KIyAgaXMg
c2ltcGxpZmllZCB0byAiI2lmIDEiLiBCZWNhdXNlIHBhcnRwcCBjb21wdXRlcyBpbiBkZWNpbWFs
IChhbmQNCiMgIHRodXMgbWFrZXMgY29kZSBjb250YWluaW5nIGhleC9vY3QgY29tcHV0YXRpb25z
IGxlc3MgcmVhZGFibGUpLA0KIyAgdGhpcyBpcyBub3JtYWxseSBub3QgZG9uZSBvbiB1bnJlbGF0
ZWQgZXhwcmVzc2lvbnMuDQojDQojICBCdWdzOg0KIyAgLSB3aGVuIHdlIG1vZGlmeSBhIGNvbmRp
dGlvbmFsIGxpbmUsIGNvbW1lbnRzIGdldCBsb3N0DQojICAtIHJlc3VsdHMgbWF5IGJlIGluY29y
cmVjdCBpZiBhbiAjaW5jbHVkZSBmaWxlICN1bmRlZidzIG9yDQojICAgICNkZWZpbmUncyBhIHN5
bWJvbCBwYXNzZWQgaW4gYnkgLUQvLVUuIFRoZSAtZCBvcHRpb24gbWF5IG1ha2UNCiMgICAgdGhp
cyBldmVuIHdvcnNlLg0KIyAgLSAjZWxpZiBpcyBub3Qgc3VwcG9ydGVkDQojICAtIGAjaWYgMCcg
YW5kIGAjaWYgMScgYXJlIGVsaW1pbmF0ZWQgZXZlbiB3aGVuIC1mIGlzIG5vdCBzcGVjaWZpZWQN
CiMNCiMgIChjKSAyMDAyIGJ5IFN0ZWZhbiBSZXV0aGVyDQojDQoNCnVzZSBzdHJpY3Q7DQp1c2Ug
dmFycyBxd3sgJWRlZmluZWQgQGZpbGVzICRvcHRfb3B0aW1pc3RpYyAkb3B0X2RlZmluZXMgQGV4
cHJzDQogICAgICAgICAgICAgICAgICRvcHRfZm9yY2UNCiAgICAgICAgICAgICAgICAgJHNlZW5f
ZGVmaW5lZCB9Ow0KDQokb3B0X29wdGltaXN0aWMgPSAwOw0KJG9wdF9kZWZpbmVzID0gMDsNCiRv
cHRfZm9yY2UgPSAwOw0KDQpteSAkYWxsb3dfY2MgPSAwOw0KDQpmb3JlYWNoIChAQVJHVikgew0K
ICAgIGlmICgvXi0tYmVnaW4kLykgew0KICAgICAgICAkYWxsb3dfY2MgPSAxOw0KICAgIH0gZWxz
aWYgKC9eLS1lbmQkLykgew0KICAgICAgICAkYWxsb3dfY2MgPSAwOw0KICAgIH0gZWxzaWYgKC9e
LUQoLispLykgew0KICAgICAgICAkZGVmaW5lZHskMX0gPSAxOw0KICAgIH0gZWxzaWYgKC9eLVUo
LispLykgew0KICAgICAgICAkZGVmaW5lZHskMX0gPSAwOw0KICAgIH0gZWxzaWYgKCEkYWxsb3df
Y2MgJiYgL14tQyQvKSB7DQogICAgICAgICRvcHRfb3B0aW1pc3RpYyA9IDE7DQogICAgfSBlbHNp
ZiAoISRhbGxvd19jYyAmJiAvXi1kJC8pIHsNCiAgICAgICAgJG9wdF9kZWZpbmVzID0gMTsNCiAg
ICB9IGVsc2lmICghJGFsbG93X2NjICYmIC9eLWYkLykgew0KICAgICAgICAkb3B0X2ZvcmNlID0g
MTsNCiAgICB9IGVsc2lmICghJGFsbG93X2NjICYmIC9eLWUoLiopLykgew0KICAgICAgICBwdXNo
IEBleHBycywgJDE7DQogICAgfSBlbHNpZiAoL14taCQvIHx8IC9eLS0/aGVscCQvKSB7DQogICAg
ICAgIHByaW50ICIkMCAtIHBhcnRpYWwgcHJlcHJvY2Vzc29yDQoNCnVzYWdlOiAkMCBbLURzeW0u
Li5dIFstVXN5bS4uLl0gWy1DXSBbLWRdIFstZl0gWy1ofC0taGVscF0gW2ZpbGVzLi4uXQ0KDQot
RHN5bSAgICAgIGRlZmluZSBhIHN5bWJvbA0KLVVzeW0gICAgICB1bmRlZmluZSBhIHN5bWJvbA0K
LUMgICAgICAgICBhc3N1bWUgJ2NsZWFuJyBjb2RlIChkZXRhaWxlZCBpbmZvIGluIHNvdXJjZSBj
b2RlKQ0KLWQgICAgICAgICBwcm9jZXNzICNkZWZpbmUvI3VuZGVmIGxpbmVzDQotZiAgICAgICAg
IGZvcmNlIHNpbXBsaWZ5DQoNCkMgY29tcGlsZXIgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIGluIC0t
YmVnaW4gLS1lbmQsIHN1Y2ggYXMNCiAgJDAgLS1iZWdpbiAtRHN5bSAtRHN5bSAtSWRpciAtTGRp
ciAtbGxpYiAtLWVuZCBmaWxlLmMNClwodGhpcyBwcm9ncmFtIHdpbGwgdGhlbiBpZ25vcmUgb3B0
aW9ucyBpdCBkb2Vzbid0IGtub3cpLg0KDQpJZiBubyBmaWxlcyBzcGVjaWZpZWQsIHByb2Nlc3Nl
cyBzdGRpbi4gT3V0cHV0IGFsd2F5cyBnb2VzIHRvIHN0ZG91dC4NCg0KXChjKSAyMDAyIFN0ZWZh
biBSZXV0aGVyIDxTdHJldVxAZ214LmRlPi5cbiI7DQogICAgICAgIGV4aXQgMDsNCiAgICB9IGVs
c2Ugew0KICAgICAgICBpZiAoJF8gPX4gL14tLyAmJiAkXyBuZSAnLScpIHsNCiAgICAgICAgICAg
IGRpZSAiYmFkIHBhcmFtZXRlciBgJF8nXG4iDQogICAgICAgICAgICAgICAgdW5sZXNzICRhbGxv
d19jYzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHB1c2ggQGZpbGVzLCAkXzsNCg0K
ICAgICAgICB9DQogICAgfQ0KfQ0KcHVzaCBAZmlsZXMsICItIiBpZiAhQGZpbGVzICYmICFAZXhw
cnM7DQoNCm15ICRleGl0ID0gMDsNCmZvcmVhY2ggKEBleHBycykgew0KICAgIHByaW50ICRfLCAi
OlxuLSAiLCBldmFsX2V4cHIoJF8pLCAiXG4iOw0KfQ0KZm9yZWFjaCAoQGZpbGVzKSB7DQogICAg
aWYgKCRfIGVxICctJykgew0KICAgICAgICBwcm9jZXNzIChcKlNURElOLCBcKlNURE9VVCk7DQog
ICAgfSBlbHNlIHsNCiAgICAgICAgb3BlbiBJTiwgIjwgJF8iIG9yIGRvIHsgcHJpbnQgU1RERVJS
ICIkXzogJCFcbiI7ICRleGl0PTE7IG5leHQ7IH07DQogICAgICAgIHByb2Nlc3MgKFwqSU4sIFwq
U1RET1VUKTsNCiAgICAgICAgY2xvc2UgSU47DQogICAgfQ0KfQ0KZXhpdCAkZXhpdDsNCg0KIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIHByb2Nlc3MgIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjDQoNCiMgcHJvY2VzcyAoaW5mZCwgb3V0ZmQpDQojIC0gcHJvY2VzcyBv
bmUgZmlsZS4gVGhpcyBpcyB0aGUgZW5naW5lIG9mIHRoZSBwcm9ncmFtLg0Kc3ViIHByb2Nlc3Mg
ew0KICAgIG15ICgkaW4sICRvdXQpID0gQF87DQogICAgbXkgJHRvdGFsOw0KICAgIG15IEBpZnN0
YWNrOw0KICAgIG15ICRvdXRfZW5hYmxlZCA9IDE7DQogICAgIyBsaW5lIGxvb3ANCiBMSU5FOg0K
ICAgIHdoaWxlICgxKSB7DQogICAgICAgICMgcmVhZCBvbmUgInZpcnR1YWwiIGxpbmUNCiAgICAg
ICAgJHRvdGFsID0gIiI7DQogICAgICAgIGRvIHsNCiAgICAgICAgICAgIG15ICRsaW5lID0gPCRp
bj47DQogICAgICAgICAgICBpZiAoIWRlZmluZWQgJGxpbmUpIHsNCiAgICAgICAgICAgICAgICBs
YXN0IExJTkUgaWYgJHRvdGFsIGVxICcnOw0KICAgICAgICAgICAgICAgIGRpZSAiJF86JC46IHVu
dGVybWluYXRlZCBjb21tZW50XG4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgd2hpbGUg
KCRsaW5lID1+IC9cXFxuJC8pIHsNCiAgICAgICAgICAgICAgICBteSAkbmV4dCA9IDwkaW4+Ow0K
ICAgICAgICAgICAgICAgIGRpZSAiJF86JC46IHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGVcbiIgaWYg
bm90IGRlZmluZWQgJG5leHQ7DQogICAgICAgICAgICAgICAgJGxpbmUgLj0gJG5leHQ7DQogICAg
ICAgICAgICB9DQogICAgICAgICAgICAkbGluZSA9fiBzL1wjaWYgIUFQUExFX0NIQU5HRVMvI2lm
IDAvOw0KICAgICAgICAgICAgJGxpbmUgPX4gcy8jaWYgQVBQTEVfQ0hBTkdFUy8jaWYgMS87DQog
ICAgICAgICAgICAkbGluZSA9fiBzL1wjaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00vI2lmIDAv
Ow0KICAgICAgICAgICAgJGxpbmUgPX4gcy8jaWYgS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTS8jaWYg
MS87DQogICAgICAgICAgICAkdG90YWwgLj0gJGxpbmU7DQogICAgICAgIH0gd2hpbGUgKCEgaXNf
Y29tcGxldGUoJHRvdGFsKSk7DQoNCiAgICAgICAgIyByZW1vdmUgY29tbWVudHMgdG8gc2VlIGlm
IGl0J3MgYSBwcCBjb21tYW5kDQogICAgICAgIG15ICRzaW5nbGVfbGluZSA9ICR0b3RhbDsgJHNp
bmdsZV9saW5lID1+IHMvXFxcbi8vc2c7DQogICAgICAgIG15ICRjb21tYW5kID0gIiI7DQogICAg
ICAgIHdoaWxlICgxKSB7DQogICAgICAgICAgICBsYXN0IGlmICRzaW5nbGVfbGluZSA9fiBtL1xH
JC9zZ2M7DQogICAgICAgICAgICBpZiAoJHNpbmdsZV9saW5lID1+IG17XEcoW15cIlwnL10rKX1z
Z2MNCiAgICAgICAgICAgICAgICAgfHwgJHNpbmdsZV9saW5lID1+IG17XEcoJyhbXlwnXFxdfFxc
LikqJyl9c2djDQogICAgICAgICAgICAgICAgIHx8ICRzaW5nbGVfbGluZSA9fiBte1xHKCIoW15c
IlxcXXxcXC4pKiIpfXNnYw0KICAgICAgICAgICAgICAgICB8fCAkc2luZ2xlX2xpbmUgPX4gbXtc
RygvW14vKl0pfXNnYykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkY29tbWFuZCAu
PSAkMTsNCiAgICAgICAgICAgICAgICBuZXh0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAg
aWYgKCRzaW5nbGVfbGluZSA9fiBte1xHLy8uKn1zZ2MNCiAgICAgICAgICAgICAgICB8fCAkc2lu
Z2xlX2xpbmUgPX4gbXtcRy9cKi4qP1wqL31zZ2MpDQogICAgICAgICAgICB7DQogICAgICAgICAg
ICAgICAgJGNvbW1hbmQgLj0gIiAiOw0KICAgICAgICAgICAgICAgIG5leHQ7DQogICAgICAgICAg
ICB9DQogICAgICAgICAgICBkaWUgImh1aD8iOw0KICAgICAgICB9DQogICAgICAgIGlmICgkY29t
bWFuZCA9fiAvXlxzKlwjXHMqKFthLXpdKylccyooLiopLykgew0KICAgICAgICAgICAgIyBwcCBj
b21tYW5kDQogICAgICAgICAgICBteSAoJGNtLCAkYXJnKSA9ICgkMSwgdHJpbSgkMikpOw0KICAg
ICAgICAgICAgaWYgKCRjbSBlcSAnaWZkZWYnKSB7DQogICAgICAgICAgICAgICAgaWYgKCRvdXRf
ZW5hYmxlZCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RzICRkZWZpbmVkeyRhcmd9
KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0X2VuYWJsZWQgPSAkZGVmaW5lZHskYXJn
fTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2hpZnQgQGlmc3RhY2ssICRvdXRfZW5hYmxl
ZDsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2hpZnQgQGlmc3RhY2ssICd1bmtub3duJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBy
aW50ICRvdXQgJHRvdGFsOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
fSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgMTsNCiAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2lmICgkY20gZXEgJ2lmbmRlZicpIHsNCiAg
ICAgICAgICAgICAgICBpZiAoJG91dF9lbmFibGVkKSB7DQogICAgICAgICAgICAgICAgICAgIGlm
IChkZWZpbmVkICRkZWZpbmVkeyRhcmd9KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0
X2VuYWJsZWQgPSAxIC0gJGRlZmluZWR7JGFyZ307DQogICAgICAgICAgICAgICAgICAgICAgICB1
bnNoaWZ0IEBpZnN0YWNrLCAkb3V0X2VuYWJsZWQ7DQogICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAndW5rbm93bic7
DQogICAgICAgICAgICAgICAgICAgICAgICBwcmludCAkb3V0ICR0b3RhbDsNCiAgICAgICAgICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg
IHVuc2hpZnQgQGlmc3RhY2ssIDE7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBl
bHNpZiAoJGNtIGVxICdpZicpIHsNCiAgICAgICAgICAgICAgICBpZiAoJG91dF9lbmFibGVkKSB7
DQogICAgICAgICAgICAgICAgICAgIG15ICRyZXN1bHQgPSB0cmltKGV2YWxfZXhwcigkYXJnKSk7
DQogICAgICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0ICF+IC9cRC8pIHsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICRvdXRfZW5hYmxlZCA9ICgkcmVzdWx0ID8gIjEiIDogIjAiKTsNCiAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2hpZnQgQGlmc3RhY2ssICRvdXRfZW5hYmxlZDsNCiAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2hpZnQg
QGlmc3RhY2ssICd1bmtub3duJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICRvdXQg
IiNpZiAkcmVzdWx0XG4iOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg
fSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgMTsNCiAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2lmICgkY20gZXEgJ2VsaWYnKSB7DQogICAg
ICAgICAgICAgICAgZGllICIjZWxpZiBpcyBub3QgeWV0IGltcGxlbWVudGVkIjsNCiAgICAgICAg
ICAgIH0gZWxzaWYgKCRjbSBlcSAnZWxzZScpIHsNCiAgICAgICAgICAgICAgICBkaWUgIiNlbHNl
IHdpdGhvdXQgI2lmIg0KICAgICAgICAgICAgICAgICAgICBpZiAhIEBpZnN0YWNrOw0KICAgICAg
ICAgICAgICAgIGlmICgkb3V0X2VuYWJsZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgIyBvdXRw
dXQgY2FuIGJlIGVuYWJsZWQgaWYgYSkgd2UgZG9uJ3Qga25vdyBvciBiKSB3ZQ0KICAgICAgICAg
ICAgICAgICAgICAjIGtub3cgb3VyIGNvbmRpdGlvbiBpcyB0cnVlDQogICAgICAgICAgICAgICAg
ICAgIGlmICgkaWZzdGFja1swXSBlcSAnMScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRp
ZnN0YWNrWzBdID0gJzAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dF9lbmFibGVkID0g
MDsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAg
IHByaW50ICRvdXQgJHRvdGFsOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg
ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpZnN0YWNrWzBdIGVxICcwJykg
ew0KICAgICAgICAgICAgICAgICAgICAgICAgJGlmc3RhY2tbMF0gPSAnMSc7DQogICAgICAgICAg
ICAgICAgICAgICAgICAkb3V0X2VuYWJsZWQgPSBjaGVja19vdXQoQGlmc3RhY2spOw0KICAgICAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNpZiAo
JGNtIGVxICdlbmRpZicpIHsNCiAgICAgICAgICAgICAgICBkaWUgIiNlbmRpZiB3aXRob3V0ICNp
ZiINCiAgICAgICAgICAgICAgICAgICAgaWYgISBAaWZzdGFjazsNCiAgICAgICAgICAgICAgICBt
eSAkd2h5ID0gc2hpZnQgQGlmc3RhY2s7DQogICAgICAgICAgICAgICAgJG91dF9lbmFibGVkID0g
Y2hlY2tfb3V0IChAaWZzdGFjayk7DQogICAgICAgICAgICAgICAgaWYgKCRvdXRfZW5hYmxlZCAm
JiAoJHdoeSBuZSAnMCcgJiYgJHdoeSBuZSAnMScpKSB7DQogICAgICAgICAgICAgICAgICAgIHBy
aW50ICRvdXQgJHRvdGFsOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7
DQogICAgICAgICAgICAgICAgaWYgKCRjbSBlcSAnZGVmaW5lJykgew0KICAgICAgICAgICAgICAg
ICAgICBpZiAoJG91dF9lbmFibGVkICYmICRvcHRfZGVmaW5lcyAmJiAkYXJnID1+IG17Xihcdysp
fSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGRlZmluZWR7JDF9ID0gMTsNCiAgICAgICAg
ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRjbSBlcSAndW5kZWYnKSB7
DQogICAgICAgICAgICAgICAgICAgIGlmICgkb3V0X2VuYWJsZWQgJiYgJG9wdF9kZWZpbmVzICYm
ICRhcmcgPX4gbXteKFx3Kyl9KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZGVmaW5lZHsk
MX0gPSAwOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNpZiAo
JGNtIG5lICdpbmNsdWRlJyAmJiAkY20gbmUgJ3ByYWdtYScgJiYgJGNtIG5lICdlcnJvcicgJiYg
JGNtIG5lICdpbXBvcnQnICYmICRjbSBuZSAnd2FybmluZycpIHsNCiAgICAgICAgICAgICAgICAg
ICAgZGllICIkXzokLjogdW5rbm93biBwcmVwcm9jZXNzb3IgY29tbWFuZCAnJGNtJ1xuIjsNCiAg
ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcHJpbnQgJG91dCAkdG90YWwNCiAgICAg
ICAgICAgICAgICAgICAgaWYgJG91dF9lbmFibGVkOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9
IGVsc2Ugew0KICAgICAgICAgICAgcHJpbnQgJG91dCAkdG90YWwNCiAgICAgICAgICAgICAgICBp
ZiAkb3V0X2VuYWJsZWQ7DQogICAgICAgIH0NCiAgICB9DQogICAgcHJpbnRmICIkXzokLjogJWQg
dW50ZXJtaW5hdGVkIGNvbmRpdGlvbmFsKHMpIHN0aWxsIG9wZW5cbiIsIHNjYWxhciBAaWZzdGFj
aw0KICAgICAgICBpZiBAaWZzdGFjazsNCn0NCg0KIyB0cnVlIGlmZiAkX1swXSBpcyBhIGNvbXBs
ZXRlIGxpbmUuIENvbXBsZXRlIGxpbmVzIG1heSBub3QgY29udGFpbg0KIyBwYXJ0aWFsIGNvbW1l
bnRzLg0Kc3ViIGlzX2NvbXBsZXRlIHsNCiAgICBteSAkbGluZSA9IHNoaWZ0Ow0KICAgICRsaW5l
ID1+IHMvXFxcbi8vc2c7DQogICAgd2hpbGUgKDEpIHsNCiAgICAgICAgbGFzdCBpZiAkbGluZSA9
fiAvXEckL3NnYzsNCiAgICAgICAgbmV4dCBpZiAoJGxpbmUgPX4gbXtcR1teXCJcJy9dK31zZ2MN
CiAgICAgICAgICAgICAgICAgfHwgJGxpbmUgPX4gbXtcRycoW15cJ1xcXXxcXC4pKid9c2djDQog
ICAgICAgICAgICAgICAgIHx8ICRsaW5lID1+IG17XEciKFteXCJcXF18XFwuKSoifXNnYw0KICAg
ICAgICAgICAgICAgICB8fCAkbGluZSA9fiBte1xHL1teLypdfXNnYw0KICAgICAgICAgICAgICAg
ICB8fCAkbGluZSA9fiBte1xHLy8uKn1zZ2MNCiAgICAgICAgICAgICAgICAgfHwgJGxpbmUgPX4g
bXtcRy9cKi4qP1wqL31zZ2MpOw0KICAgICAgICBkaWUgIiRfOiQuOiBsaXRlcmFsIGFjcm9zcyBs
aW5lc1xuIg0KICAgICAgICAgICAgaWYgKCRsaW5lID1+IG17XEdbXCJcJ119c2djKTsNCiAgICAg
ICAgIyBpdCBpcyBhIGNvbW1lbnQNCiAgICAgICAgcmV0dXJuIDA7DQogICAgfQ0KICAgIHJldHVy
biAxOw0KfQ0KDQojIEdpdmVuIGEgbGlzdCBvZiBzdGF0dXMgdG9rZW5zICgnMCcsICcxJywgJ2Fu
eXRoaW5nIGVsc2UnKSwgZGVjaWRlDQojIHdoZXRoZXIgd2UgY2FuIHNhZmVseSBzdXBwcmVzcyBv
dXRwdXQuDQpzdWIgY2hlY2tfb3V0IHsNCiAgICBmb3JlYWNoIChAXykgew0KICAgICAgICBpZiAo
JF8gZXEgJzAnKSB7DQogICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgIH0NCiAg
ICByZXR1cm4gMTsNCn0NCg0KIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFj
ZS4NCnN1YiB0cmltIHsNCiAgICBteSAkeCA9IHNoaWZ0Ow0KICAgICR4ID1+IHMvXlxzKy8vczsN
CiAgICAkeCA9fiBzL1xzKyQvL3M7DQogICAgJHg7DQp9DQoNCiMgR2l2ZW4gYW4gZXhwcmVzc2lv
biwgcmV0dXJuIHNpbXBsaWZpZWQgdmVyc2lvbiB0aGVyZW9mIChpLmUuDQojIGRlZmluZWQoWCkg
ZXhwYW5kZWQgaWYga25vd24pLg0Kc3ViIGV2YWxfZXhwciB7DQogICAgbG9jYWwgJF8gPSBzaGlm
dDsNCiAgICBsb2NhbCAkc2Vlbl9kZWZpbmVkID0gJG9wdF9mb3JjZTsNCiAgICBteSAkcmVzdWx0
ID0gZXZhbF9jb25kKCk7DQogICAgcmV0dXJuICRfIGlmICEvXEdccyokL3NnYyB8fCAkcmVzdWx0
ID1+IG17L1wqRVJST1JcKi99IHx8ICEkc2Vlbl9kZWZpbmVkOw0KICAgICRyZXN1bHQ7DQp9DQoN
CiMgUGFyc2UgY29uZGl0aW9uYWwtZXhwcmVzc2lvbiBwcm9kdWN0aW9uLiBXZSBwcm9jZXNzIHRo
ZXNlLCBzbw0KIyAiI2lmIGRlZmluZWQoQSkgPyBkZWZpbmVkKEIpIDogMCIgd29ya3MuDQpzdWIg
ZXZhbF9jb25kIHsNCiAgICBteSAkYSA9IGV2YWxfb3IoKTsNCiAgICBpZiAobXtcR1xzKlw/fXNn
Yykgew0KICAgICAgICAjIGNvbmRpdGlvbmFsIG9wZXJhdG9yDQogICAgICAgIG15ICRsaHMgPSBl
dmFsX2NvbmQoKTsNCiAgICAgICAgcmV0dXJuICIvKkVSUk9SKi8iIGlmIG5vdCAvXEdccyo6L3Nn
YzsNCiAgICAgICAgbXkgJHJocyA9IGV2YWxfY29uZCgpOw0KICAgICAgICBpZiAoJGEgPX4gL1xE
Lykgew0KICAgICAgICAgICAgcmV0dXJuICIkYSA/ICRsaHMgOiAkcmhzIjsNCiAgICAgICAgfSBl
bHNlIHsNCiAgICAgICAgICAgIHJldHVybiAkYSA/ICRsaHMgOiAkcmhzOw0KICAgICAgICB9DQog
ICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICRhOw0KICAgIH0NCn0NCg0KIyBQYXJzZSBsb2dp
Y2FsLW9yLWV4cHJlc3Npb24uIEV2YWx1YXRlcyB0byAiMSIgaWYgb25lIHBhcnQga25vd24gdG8N
CiMgYmUgZGVmaW5lZCwgIjAiIGlmIGFsbCBwYXJ0cyBrbm93biB0byBiZSB1bmRlZmluZWQsICJ8
fCIgb2YgYWxsDQojIHVua25vd24gdGVybXMgZWxzZS4NCnN1YiBldmFsX29yIHsNCiAgICBteSBA
dGVybXM7DQogICAgbXkgQGFsbDsNCiAgICBteSAkdHJ1ZSA9IDA7DQogICAgZG8gew0KICAgICAg
ICBteSAkYSA9IGV2YWxfYW5kKCk7DQogICAgICAgIHB1c2ggQGFsbCwgJGE7DQogICAgICAgIGlm
ICgkYSA9fiAvXEQvKSB7DQogICAgICAgICAgICBwdXNoIEB0ZXJtcywgJGE7DQogICAgICAgIH0g
ZWxzZSB7DQogICAgICAgICAgICAkdHJ1ZSB8fD0gJGErMDsNCiAgICAgICAgfQ0KICAgIH0gd2hp
bGUgKG17XEdccypcfFx8fXNnYyk7DQogICAgcmV0dXJuIChAYWxsID09IDENCiAgICAgICAgICAg
ID8gJGFsbFswXQ0KICAgICAgICAgICAgOiAkdHJ1ZQ0KICAgICAgICAgICAgPyAiMSINCiAgICAg
ICAgICAgIDogIUB0ZXJtcw0KICAgICAgICAgICAgPyAiMCINCiAgICAgICAgICAgIDogQHRlcm1z
ID09IDENCiAgICAgICAgICAgID8gIjAgfHwgJHRlcm1zWzBdIg0KICAgICAgICAgICAgOiBqb2lu
ICIgfHwgIiwgQHRlcm1zKTsNCn0NCg0KIyBQYXJzZSBsb2dpY2FsLWFuZC1leHByZXNzaW9uLiBF
dmFsdWF0ZXMgdG8gIjAiIGlmIG9uZSBwYXJ0IGtub3duIHRvDQojIGJlIHVuZGVmaW5lZCwgIjEi
IGlmIGFsbCBwYXJ0cyBrbm93biB0byBiZSBkZWZpbmVkLCAiJiYiIG9mIGFsbA0KIyB1bmtub3du
IHRlcm1zIGVsc2UuDQpzdWIgZXZhbF9hbmQgew0KICAgIG15IEB0ZXJtczsNCiAgICBteSBAYWxs
Ow0KICAgIG15ICR0cnVlID0gMTsNCiAgICBkbyB7DQogICAgICAgIG15ICRhID0gZXZhbF9iaXRv
cigpOw0KICAgICAgICBwdXNoIEBhbGwsICRhOw0KICAgICAgICBpZiAoJGEgPX4gL1xELykgew0K
ICAgICAgICAgICAgcHVzaCBAdGVybXMsICRhOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg
ICAgJHRydWUgJiY9ICRhKzA7DQogICAgICAgIH0NCiAgICB9IHdoaWxlIChte1xHXHMqXCZcJn1z
Z2MpOw0KICAgIHJldHVybiAoQGFsbCA9PSAxDQogICAgICAgICAgICA/ICRhbGxbMF0NCiAgICAg
ICAgICAgIDogISR0cnVlDQogICAgICAgICAgICA/ICIwIg0KICAgICAgICAgICAgOiAhQHRlcm1z
DQogICAgICAgICAgICA/ICIxIg0KICAgICAgICAgICAgOiBAdGVybXMgPT0gMQ0KICAgICAgICAg
ICAgPyAiMSAmJiAkdGVybXNbMF0iDQogICAgICAgICAgICA6IGpvaW4gIiAmJiAiLCBAdGVybXMp
Ow0KfQ0KDQojIFBhcnNlIGluY2x1c2l2ZS1vci1leHByZXNzaW9uLiBUaGlzIGNvbWJpbmVzIHRo
ZSBrbm93biB0ZXJtcyB0byBvbmUsDQojIHRoYXQgaXMsIGAjaWYgMSArICgyIHwgMyknIHlpZWxk
cyBgI2lmIDEgKyAzJy4NCnN1YiBldmFsX2JpdG9yIHsNCiAgICBteSBAdGVybXM7DQogICAgbXkg
JHZhbHVlID0gMDsNCiAgICBkbyB7DQogICAgICAgIG15ICRhID0gZXZhbF9iaXR4b3IoKTsNCiAg
ICAgICAgaWYgKCRhID1+IC9cRC8pIHsNCiAgICAgICAgICAgIHB1c2ggQHRlcm1zLCAkYTsNCiAg
ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR2YWx1ZSB8PSAkYSswOw0KICAgICAgICB9DQog
ICAgfSB3aGlsZSAobXtcR1xzKlx8KD89JHxbXnxdKX1zZ2MpOw0KICAgIHB1c2ggQHRlcm1zLCAk
dmFsdWUgaWYgJHZhbHVlOw0KICAgIHJldHVybiAoQHRlcm1zID8gam9pbiAiIHwgIiwgQHRlcm1z
IDogIjAiKTsNCn0NCg0KIyBQYXJzZSBleGNsdXNpdmUtb3ItZXhwcmVzc2lvbi4gVGhpcyBjb21i
aW5lcyB0aGUga25vd24gdGVybXMgdG8gb25lLA0KIyB0aGF0IGlzLCBgI2lmIDEgKyAoMiBeIDMp
JyB5aWVsZHMgYCNpZiAxICsgMScuDQpzdWIgZXZhbF9iaXR4b3Igew0KICAgIG15IEB0ZXJtczsN
CiAgICBteSAkdmFsdWUgPSAwOw0KICAgIGRvIHsNCiAgICAgICAgbXkgJGEgPSBldmFsX2JpdGFu
ZCgpOw0KICAgICAgICBpZiAoJGEgPX4gL1xELykgew0KICAgICAgICAgICAgcHVzaCBAdGVybXMs
ICRhOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHZhbHVlIF49ICRhKzA7DQogICAg
ICAgIH0NCiAgICB9IHdoaWxlIChte1xHXHMqXF59c2djKTsNCiAgICBwdXNoIEB0ZXJtcywgJHZh
bHVlIGlmICR2YWx1ZTsNCiAgICByZXR1cm4gKEB0ZXJtcyA/IGpvaW4gIiBeICIsIEB0ZXJtcyA6
ICIwIik7DQp9DQoNCiMgUGFyc2UgYW5kLWV4cHJlc3Npb24uIFRoaXMgY29tYmluZXMgdGhlIGtu
b3duIHRlcm1zIHRvIG9uZSwNCiMgdGhhdCBpcywgYCNpZiAxICsgKDIgJiAzKScgeWllbGRzIGAj
aWYgMSArIDInLg0Kc3ViIGV2YWxfYml0YW5kIHsNCiAgICBteSBAdGVybXM7DQogICAgbXkgJHZh
bHVlID0gfjA7DQogICAgZG8gew0KICAgICAgICBteSAkYSA9IGV2YWxfZXEoKTsNCiAgICAgICAg
aWYgKCRhID1+IC9cRC8pIHsNCiAgICAgICAgICAgIHB1c2ggQHRlcm1zLCAkYTsNCiAgICAgICAg
fSBlbHNlIHsNCiAgICAgICAgICAgICR2YWx1ZSAmPSAkYSswOw0KICAgICAgICB9DQogICAgfSB3
aGlsZSAobXtcR1xzKlwmKD89JHxbXiZdKX1zZ2MpOw0KICAgIHB1c2ggQHRlcm1zLCAkdmFsdWUg
aWYgJHZhbHVlICE9IH4wOw0KICAgIGlmICgkdmFsdWUgPT0gMCkgew0KICAgICAgICByZXR1cm4g
IjAiOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiAoQHRlcm1zID8gam9pbiAiICYgIiwg
QHRlcm1zIDogIjAiKTsNCiAgICB9DQp9DQoNCiMgUGFyc2UgZXF1YWxpdHktZXhwcmVzc2lvbi4g
VGhvc2UgYXJlIHRvbyBzZWxkb20gaW4gY29uZGl0aW9uYWxzDQojIGNvbmNlcm5lZCB3aXRoIGRl
ZmluZWRuZXNzLCBzbyB3ZSBkb24ndCBldmFsdWF0ZSB0aGVtLg0Kc3ViIGV2YWxfZXEgew0KICAg
IG15ICRhID0gZXZhbF9yZWxhKCk7DQogICAgd2hpbGUgKG17XEdccyooWz0hXT0pfXNnYykgew0K
ICAgICAgICAkYSAuPSAiICQxICI7DQogICAgICAgICRhIC49IGV2YWxfcmVsYSgpOw0KICAgIH0N
CiAgICAkYTsNCn0NCg0KIyBQYXJzZSByZWxhdGlvbmFsLWV4cHJlc3Npb24uIFRob3NlIGFyZSB0
b28gc2VsZG9tIGluIGNvbmRpdGlvbmFscw0KIyBjb25jZXJuZWQgd2l0aCBkZWZpbmVkbmVzcywg
c28gd2UgZG9uJ3QgZXZhbHVhdGUgdGhlbS4NCnN1YiBldmFsX3JlbGEgew0KICAgIG15ICRhID0g
ZXZhbF9zaGlmdCgpOw0KICAgIHdoaWxlIChte1xHXHMqKFs8Pl09PykoPz1bXjw+XSl9c2djKSB7
DQogICAgICAgICRhIC49ICIgJDEgIjsNCiAgICAgICAgJGEgLj0gZXZhbF9zaGlmdCgpOw0KICAg
IH0NCiAgICAkYTsNCn0NCg0KIyBQYXJzZSBzaGlmdC1leHByZXNzaW9uLiBUaG9zZSBhcmUgdG9v
IHNlbGRvbSBpbiBjb25kaXRpb25hbHMNCiMgY29uY2VybmVkIHdpdGggZGVmaW5lZG5lc3MsIHNv
IHdlIGRvbid0IGV2YWx1YXRlIHRoZW0uDQpzdWIgZXZhbF9zaGlmdCB7DQogICAgbXkgJGEgPSBl
dmFsX2FkZCgpOw0KICAgIHdoaWxlIChte1xHXHMqKDw8fD4+KX1zZ2MpIHsNCiAgICAgICAgJGEg
Lj0gIiAkMSAiOw0KICAgICAgICAkYSAuPSBldmFsX2FkZCgpOw0KICAgIH0NCiAgICAkYTsNCn0N
Cg0KIyBQYXJzZSBhZGRpdGl2ZS1leHByZXNzaW9uLiBUaG9zZSBhcmUgdG9vIHNlbGRvbSBpbiBj
b25kaXRpb25hbHMNCiMgY29uY2VybmVkIHdpdGggZGVmaW5lZG5lc3MsIHNvIHdlIGRvbid0IGV2
YWx1YXRlIHRoZW0uDQpzdWIgZXZhbF9hZGQgew0KICAgIG15ICRhID0gZXZhbF9tdWx0KCk7DQog
ICAgd2hpbGUgKG17XEdccyooXCt8LSl9c2djKSB7DQogICAgICAgICRhIC49ICIgJDEgIjsNCiAg
ICAgICAgJGEgLj0gZXZhbF9tdWx0KCk7DQogICAgfQ0KICAgICRhOw0KfQ0KDQojIFBhcnNlIG11
bHRpcGxpY2F0aXZlLWV4cHJlc3Npb24uIFRob3NlIGFyZSB0b28gc2VsZG9tIGluIGNvbmRpdGlv
bmFscw0KIyBjb25jZXJuZWQgd2l0aCBkZWZpbmVkbmVzcywgc28gd2UgZG9uJ3QgZXZhbHVhdGUg
dGhlbS4NCnN1YiBldmFsX211bHQgew0KICAgIG15ICRhID0gZXZhbF91bmFyeSgpOw0KICAgIHdo
aWxlIChte1xHXHMqKFwqfC98JSl9c2djKSB7DQogICAgICAgICRhIC49ICIgJDEgIjsNCiAgICAg
ICAgJGEgLj0gZXZhbF91bmFyeSgpOw0KICAgIH0NCiAgICAkYTsNCn0NCg0KIyBQYXJzZSB1bmFy
eS1leHByZXNzaW9uLiBJbiBwcmVwcm9jZXNzb3IgZGVmaW5lcywgdGhpcyBhcmU6DQojIC0gIi1l
eHByIiwgIitleHByIiwgIiFleHByIiwgIn5leHByIiAoaGFuZGxlZCBiZWNhdXNlIHRoZXkncmUg
c2ltcGxlKQ0KIyAtICJkZWZpbmVkKFNZTSkiLCAiZGVmaW5lZCBTWU0iIChoYW5kbGVkKQ0KIyAt
IG51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBkZWNpbWFsDQojIC0gcGFyZW50aGVzaXplZCBleHBy
ZXNzaW9ucw0Kc3ViIGV2YWxfdW5hcnkgew0KICAgIG17XEdccyp9c2djOw0KICAgIGlmIChte1xH
IX1zZ2MpIHsNCiAgICAgICAgbXkgJGFyZyA9IGV2YWxfdW5hcnkoKTsNCiAgICAgICAgaWYgKCRh
cmcgPX4gL1xELykgew0KICAgICAgICAgICAgcmV0dXJuICIhJGFyZyI7DQogICAgICAgIH0gZWxz
ZSB7DQogICAgICAgICAgICByZXR1cm4gJGFyZyA/ICIwIiA6ICIxIjsNCiAgICAgICAgfQ0KICAg
IH0gZWxzaWYgKG17XEd+fXNnYykgew0KICAgICAgICBteSAkYXJnID0gZXZhbF91bmFyeSgpOw0K
ICAgICAgICBpZiAoJGFyZyA9fiAvXEQvKSB7DQogICAgICAgICAgICByZXR1cm4gIn4kYXJnIjsN
CiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiB+JGFyZzsNCiAgICAgICAgfQ0K
ICAgIH0gZWxzaWYgKG17XEdcK31zZ2MpIHsNCiAgICAgICAgcmV0dXJuIGV2YWxfdW5hcnkoKTsN
CiAgICB9IGVsc2lmIChte1xHXC19c2djKSB7DQogICAgICAgIG15ICRhcmcgPSBldmFsX3VuYXJ5
KCk7DQogICAgICAgIGlmICgkYXJnID1+IC9cRC8pIHsNCiAgICAgICAgICAgIHJldHVybiAiLSAk
YXJnIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAtJGFyZzsNCiAgICAg
ICAgfQ0KICAgIH0gZWxzaWYgKG17XEdkZWZpbmVkXHMqXChccyooXHcrKVxzKlwpfXNnYyB8fCBt
e1xHXHMqZGVmaW5lZFxzKyhcdyspfXNnYykgew0KICAgICAgICBpZiAoZXhpc3RzICRkZWZpbmVk
eyQxfSkgew0KICAgICAgICAgICAgJHNlZW5fZGVmaW5lZCA9IDE7DQogICAgICAgICAgICByZXR1
cm4gJGRlZmluZWR7JDF9Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICJk
ZWZpbmVkKCQxKSI7DQogICAgICAgIH0NCiAgICB9IGVsc2lmIChte1xHMFt4WF0oWzAtOWEtZkEt
Rl0rKVt1VWxMXSp9c2djKSB7DQogICAgICAgIHJldHVybiBoZXggJDE7DQogICAgfSBlbHNpZiAo
bXtcRzAoWzAtN10rKVt1VWxMXSp9c2djKSB7DQogICAgICAgIHJldHVybiBvY3QgJDE7DQogICAg
fSBlbHNpZiAobXtcRyhbMC05XSspW3VVbExdKn1zZ2MpIHsNCiAgICAgICAgcmV0dXJuICQxOw0K
ICAgIH0gZWxzaWYgKG17XEcoXHcrKX1zZ2MpIHsNCiAgICAgICAgaWYgKG17XEdccyg/PVwoKX1z
Z2MpIHsNCiAgICAgICAgICAgICMgZnVuY3Rpb24tbGlrZSBtYWNybw0KICAgICAgICAgICAgcmV0
dXJuICIvKkVSUk9SKi8iOw0KICAgICAgICB9IGVsc2lmIChleGlzdHMgJGRlZmluZWR7JDF9ICYm
ICEkZGVmaW5lZHskMX0pIHsNCiAgICAgICAgICAgICMgb2JqZWN0LWxpa2UgbWFjcm8gd2hpY2gg
aXMga25vd24gdG8gbm90IGJlIGRlZmluZWQNCiAgICAgICAgICAgIHJldHVybiAiMCI7DQogICAg
ICAgIH0gZWxzaWYgKCRvcHRfb3B0aW1pc3RpYykgew0KICAgICAgICAgICAgIyBvYmplY3QtbGlr
ZSBtYWNybyB3aGljaCBpcyAobWF5YmUpIGRlZmluZWQNCiAgICAgICAgICAgIHJldHVybiAkMTsN
CiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAiLypFUlJPUiovIjsNCiAgICAg
ICAgfQ0KICAgIH0gZWxzaWYgKG17XEdcKH1zZ2MpIHsNCiAgICAgICAgbXkgJGFyZyA9IGV2YWxf
Y29uZCgpOw0KICAgICAgICByZXR1cm4gIi8qRVJST1IqLyIgaWYgIW17XEdccypcKX1zZ2M7DQog
ICAgICAgIGlmICgkYXJnID1+IC9cRC8pIHsNCiAgICAgICAgICAgIHJldHVybiAiKCRhcmcpIjsN
CiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAkYXJnOw0KICAgICAgICB9DQog
ICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICIvKkVSUk9SKi8iOw0KICAgIH0NCn0NCg0Kc3Vi
IGRlYnVnIHsNCiAgICBwcmludCAifCAiLCBzaGlmdCwgIjpcbnwgJF9cbnwgIiwgIiAiIHggcG9z
KCRfKSwgIl5cbiI7DQp9DQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4855</attachid>
            <date>2005-11-29 14:59:21 -0800</date>
            <delta_ts>2005-12-04 02:27:22 -0800</delta_ts>
            <desc>Responding to Darin&apos;s comments.</desc>
            <filename>bigger.patch</filename>
            <type>text/plain</type>
            <size>221727</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2os
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDcKZGlmZiAtcCAtdSAtcjEuNDcgV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCi0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJMjggTm92IDIwMDUgMjM6MzM6NTUgLTAwMDAJMS40NworKysgV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCTI5IE5vdiAyMDA1IDIyOjUxOjM0IC0wMDAwCkBAIC04Nyw3ICs4Nyw2
IEBACiAJCTkzRjE5OEI1MDgyNDVFNTkwMDFFOUFCQyAvKiBkb20yX3JhbmdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDE5RjAyREU0MzIyMDE4
NjM1Q0EgLyogZG9tMl9yYW5nZS5oICovOyB9OwogCQk5M0YxOThCNjA4MjQ1RTU5MDAxRTlBQkMg
LyogZG9tMl90cmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1MjNEMUExMDJERTQzMjIwMTg2MzVDQSAvKiBkb20yX3RyYXZlcnNhbC5oICov
OyB9OwogCQk5M0YxOThCQjA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tX2V4Y2VwdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxOTAwMkRFNDMy
MjAxODYzNUNBIC8qIGRvbV9leGNlcHRpb24uaCAqLzsgfTsKLQkJOTNGMTk4QkQwODI0NUU1OTAw
MUU5QUJDIC8qIGRvbV9taXNjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTIzRDE5MzAyREU0MzIyMDE4NjM1Q0EgLyogZG9tX21pc2MuaCAqLzsgfTsK
IAkJOTNGMTk4QkUwODI0NUU1OTAwMUU5QUJDIC8qIGRvbV9ub2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDE5NTAyREU0MzIyMDE4NjM1Q0Eg
LyogZG9tX25vZGUuaCAqLzsgfTsKIAkJOTNGMTk4QkYwODI0NUU1OTAwMUU5QUJDIC8qIGRvbV9z
dHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1
MjNEMTk3MDJERTQzMjIwMTg2MzVDQSAvKiBkb21fc3RyaW5nLmggKi87IH07CiAJCTkzRjE5OENF
MDgyNDVFNTkwMDFFOUFCQyAvKiBranNfYmluZGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxRjUwMkRFNDM2OTAxODYzNUNBIC8qIGtqc19i
aW5kaW5nLmggKi87IH07CkBAIC00NjgsNyArNDY3LDYgQEAKIAkJOTNGMTlBNjYwODI0NUU1OTAw
MUU5QUJDIC8qIGNzc2hlbHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDE2QTAyREU0MkU3MDE4NjM1Q0EgLyogY3NzaGVscGVyLmNwcCAq
LzsgfTsKIAkJOTNGMTlBNjcwODI0NUU1OTAwMUU5QUJDIC8qIGNzc3BhcnNlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDE2QzAyREU0MkU3
MDE4NjM1Q0EgLyogY3NzcGFyc2VyLmNwcCAqLzsgfTsKIAkJOTNGMTlBNjgwODI0NUU1OTAwMUU5
QUJDIC8qIGNzc3N0eWxlc2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxNzAwMkRFNDJFNzAxODYzNUNBIC8qIGNzc3N0eWxlc2Vs
ZWN0b3IuY3BwICovOyB9OwotCQk5M0YxOUE2RTA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tX21pc2Mu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qx
OTIwMkRFNDMyMjAxODYzNUNBIC8qIGRvbV9taXNjLmNwcCAqLzsgfTsKIAkJOTNGMTlBNzAwODI0
NUU1OTAwMUU5QUJDIC8qIGRvbV9zdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxOTYwMkRFNDMyMjAxODYzNUNBIC8qIGRvbV9zdHJp
bmcuY3BwICovOyB9OwogCQk5M0YxOUE3MzA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tMl9ldmVudHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qx
OUMwMkRFNDMyMjAxODYzNUNBIC8qIGRvbTJfZXZlbnRzLmNwcCAqLzsgfTsKIAkJOTNGMTlBNzUw
ODI0NUU1OTAwMUU5QUJDIC8qIGRvbTJfdHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMUEwMDJERTQzMjIwMTg2MzVDQSAvKiBk
b20yX3RyYXZlcnNhbC5jcHAgKi87IH07CkBAIC02MjYsNyArNjI0LDYgQEAKIAkJQTgyMTJBOTIw
ODc5NEEyMzAwNjc3MzU5IC8qIGRvbTJfcmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTlGMDJERTQzMjIwMTg2MzVDQSAvKiBkb20yX3Jh
bmdlLmggKi87IH07CiAJCUE4MjEyQTkzMDg3OTRBMjMwMDY3NzM1OSAvKiBkb20yX3RyYXZlcnNh
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qx
QTEwMkRFNDMyMjAxODYzNUNBIC8qIGRvbTJfdHJhdmVyc2FsLmggKi87IH07CiAJCUE4MjEyQTk0
MDg3OTRBMjMwMDY3NzM1OSAvKiBkb21fZXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDE5MDAyREU0MzIyMDE4NjM1Q0EgLyogZG9t
X2V4Y2VwdGlvbi5oICovOyB9OwotCQlBODIxMkE5NTA4Nzk0QTIzMDA2NzczNTkgLyogZG9tX21p
c2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNE
MTkzMDJERTQzMjIwMTg2MzVDQSAvKiBkb21fbWlzYy5oICovOyB9OwogCQlBODIxMkE5NjA4Nzk0
QTIzMDA2NzczNTkgLyogZG9tX25vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1MjNEMTk1MDJERTQzMjIwMTg2MzVDQSAvKiBkb21fbm9kZS5oICov
OyB9OwogCQlBODIxMkE5NzA4Nzk0QTIzMDA2NzczNTkgLyogZG9tX3N0cmluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxOTcwMkRFNDMyMjAx
ODYzNUNBIC8qIGRvbV9zdHJpbmcuaCAqLzsgfTsKIAkJQTgyMTJBQTQwODc5NEEyMzAwNjc3MzU5
IC8qIGtqc19iaW5kaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTIzRDFGNTAyREU0MzY5MDE4NjM1Q0EgLyoga2pzX2JpbmRpbmcuaCAqLzsgfTsK
QEAgLTEwMzksNyArMTAzNiw2IEBACiAJCUE4MjEyQzREMDg3OTRBMjMwMDY3NzM1OSAvKiBjc3No
ZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RjUyM0QxNkEwMkRFNDJFNzAxODYzNUNBIC8qIGNzc2hlbHBlci5jcHAgKi87IH07CiAJCUE4MjEy
QzRFMDg3OTRBMjMwMDY3NzM1OSAvKiBjc3NwYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QxNkMwMkRFNDJFNzAxODYzNUNBIC8qIGNz
c3BhcnNlci5jcHAgKi87IH07CiAJCUE4MjEyQzRGMDg3OTRBMjMwMDY3NzM1OSAvKiBjc3NzdHls
ZXNlbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMTcwMDJERTQyRTcwMTg2MzVDQSAvKiBjc3NzdHlsZXNlbGVjdG9yLmNwcCAqLzsg
fTsKLQkJQTgyMTJDNTAwODc5NEEyMzAwNjc3MzU5IC8qIGRvbV9taXNjLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTkyMDJERTQzMjIwMTg2
MzVDQSAvKiBkb21fbWlzYy5jcHAgKi87IH07CiAJCUE4MjEyQzUxMDg3OTRBMjMwMDY3NzM1OSAv
KiBkb21fc3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1MjNEMTk2MDJERTQzMjIwMTg2MzVDQSAvKiBkb21fc3RyaW5nLmNwcCAqLzsgfTsK
IAkJQTgyMTJDNTIwODc5NEEyMzAwNjc3MzU5IC8qIGRvbTJfZXZlbnRzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMTlDMDJERTQzMjIwMTg2
MzVDQSAvKiBkb20yX2V2ZW50cy5jcHAgKi87IH07CiAJCUE4MjEyQzUzMDg3OTRBMjMwMDY3NzM1
OSAvKiBkb20yX3RyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDFBMDAyREU0MzIyMDE4NjM1Q0EgLyogZG9tMl90cmF2ZXJzYWwu
Y3BwICovOyB9OwpAQCAtMjY3OSw4ICsyNjc1LDYgQEAKIAkJRjUyM0QxODgwMkRFNDMyMjAxODYz
NUNBIC8qIGNzc19zdHlsZXNoZWV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBjc3Nfc3R5bGVzaGVldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNTIzRDE4
QTAyREU0MzIyMDE4NjM1Q0EgLyogY3NzX3ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBjc3NfdmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUy
M0QxOTAwMkRFNDMyMjAxODYzNUNBIC8qIGRvbV9leGNlcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IGRvbV9leGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRjUyM0QxOTIwMkRFNDMyMjAxODYzNUNBIC8qIGRvbV9taXNjLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkb21fbWlzYy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUY1MjNEMTkzMDJERTQzMjIwMTg2MzVDQSAvKiBkb21fbWlzYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZG9tX21pc2MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjUyM0QxOTUwMkRFNDMyMjAxODYzNUNBIC8qIGRvbV9ub2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBkb21fbm9kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGNTIzRDE5NjAyREU0MzIyMDE4NjM1Q0EgLyogZG9tX3N0
cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gZG9tX3N0cmlu
Zy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1MjNEMTk3MDJERTQzMjIwMTg2
MzVDQSAvKiBkb21fc3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBk
b21fc3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MjY1LDggKzQyNTks
NiBAQAogCQkJCUY1MjNEMTg4MDJERTQzMjIwMTg2MzVDQSAvKiBjc3Nfc3R5bGVzaGVldC5oICov
LAogCQkJCUY1MjNEMThBMDJERTQzMjIwMTg2MzVDQSAvKiBjc3NfdmFsdWUuaCAqLywKIAkJCQlG
NTIzRDE5MDAyREU0MzIyMDE4NjM1Q0EgLyogZG9tX2V4Y2VwdGlvbi5oICovLAotCQkJCUY1MjNE
MTkyMDJERTQzMjIwMTg2MzVDQSAvKiBkb21fbWlzYy5jcHAgKi8sCi0JCQkJRjUyM0QxOTMwMkRF
NDMyMjAxODYzNUNBIC8qIGRvbV9taXNjLmggKi8sCiAJCQkJRjUyM0QxOTUwMkRFNDMyMjAxODYz
NUNBIC8qIGRvbV9ub2RlLmggKi8sCiAJCQkJRjUyM0QxOTYwMkRFNDMyMjAxODYzNUNBIC8qIGRv
bV9zdHJpbmcuY3BwICovLAogCQkJCUY1MjNEMTk3MDJERTQzMjIwMTg2MzVDQSAvKiBkb21fc3Ry
aW5nLmggKi8sCkBAIC00ODM0LDcgKzQ4MjYsNiBAQAogCQkJCTkzRjE5OEI1MDgyNDVFNTkwMDFF
OUFCQyAvKiBkb20yX3JhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThCNjA4MjQ1RTU5
MDAxRTlBQkMgLyogZG9tMl90cmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEJC
MDgyNDVFNTkwMDFFOUFCQyAvKiBkb21fZXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk5
M0YxOThCRDA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tX21pc2MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OEJFMDgyNDVFNTkwMDFFOUFCQyAvKiBkb21fbm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGMTk4QkYwODI0NUU1OTAwMUU5QUJDIC8qIGRvbV9zdHJpbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzRjE5OENFMDgyNDVFNTkwMDFFOUFCQyAvKiBranNfYmluZGluZy5oIGluIEhlYWRl
cnMgKi8sCkBAIC01MTc3LDcgKzUxNjgsNiBAQAogCQkJCUE4MjEyQTkyMDg3OTRBMjMwMDY3NzM1
OSAvKiBkb20yX3JhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODIxMkE5MzA4Nzk0QTIzMDA2
NzczNTkgLyogZG9tMl90cmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MjEyQTk0MDg3
OTRBMjMwMDY3NzM1OSAvKiBkb21fZXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlBODIx
MkE5NTA4Nzk0QTIzMDA2NzczNTkgLyogZG9tX21pc2MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
MjEyQTk2MDg3OTRBMjMwMDY3NzM1OSAvKiBkb21fbm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTgyMTJBOTcwODc5NEEyMzAwNjc3MzU5IC8qIGRvbV9zdHJpbmcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MjEyQUE0MDg3OTRBMjMwMDY3NzM1OSAvKiBranNfYmluZGluZy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02ODU5LDcgKzY4NDksNiBAQAogCQkJCTkzRjE5QTY2MDgyNDVFNTkwMDFFOUFCQyAv
KiBjc3NoZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBNjcwODI0NUU1OTAwMUU5
QUJDIC8qIGNzc3BhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE2ODA4MjQ1RTU5
MDAxRTlBQkMgLyogY3Nzc3R5bGVzZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0Yx
OUE2RTA4MjQ1RTU5MDAxRTlBQkMgLyogZG9tX21pc2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTNGMTlBNzAwODI0NUU1OTAwMUU5QUJDIC8qIGRvbV9zdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTNGMTlBNzMwODI0NUU1OTAwMUU5QUJDIC8qIGRvbTJfZXZlbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjE5QTc1MDgyNDVFNTkwMDFFOUFCQyAvKiBkb20yX3RyYXZlcnNhbC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTcxMzAsNyArNzExOSw2IEBACiAJCQkJQTgyMTJDNEQwODc5
NEEyMzAwNjc3MzU5IC8qIGNzc2hlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODIxMkM0
RTA4Nzk0QTIzMDA2NzczNTkgLyogY3NzcGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
MjEyQzRGMDg3OTRBMjMwMDY3NzM1OSAvKiBjc3NzdHlsZXNlbGVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUE4MjEyQzUwMDg3OTRBMjMwMDY3NzM1OSAvKiBkb21fbWlzYy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODIxMkM1MTA4Nzk0QTIzMDA2NzczNTkgLyogZG9tX3N0cmluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBODIxMkM1MjA4Nzk0QTIzMDA2NzczNTkgLyogZG9tMl9ldmVu
dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgyMTJDNTMwODc5NEEyMzAwNjc3MzU5IC8qIGRv
bTJfdHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDoga2h0bWwva2h0bWxfcGFydC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFy
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzU5CmRpZmYgLXAgLXUgLXIxLjM1OSBraHRt
bC9raHRtbF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0bWxfcGFydC5jcHAJMjEgTm92IDIwMDUgMDQ6
MDE6NTEgLTAwMDAJMS4zNTkKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTI5IE5vdiAyMDA1IDIy
OjUxOjM2IC0wMDAwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAia2h0bWxfcGFydC5oIgogCi0jZGVmaW5lIERJUkVDVF9MSU5LQUdFX1RPX0VDTUEKICNk
ZWZpbmUgUVRfTk9fQ0xJUEJPQVJECiAjZGVmaW5lIFFUX05PX0RSQUdBTkREUk9QCiAKQEAgLTEw
Niw5ICsxMDUsNiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAjaW5jbHVkZSAia2h0
bWxwYXJ0X3AuaCIKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0jaW5jbHVkZSAiZG9t
L2h0bWxfZG9jdW1lbnQuaCIKLSNlbmRpZgogCiAjaW5jbHVkZSA8Q29yZVNlcnZpY2VzL0NvcmVT
ZXJ2aWNlcy5oPgogCkBAIC0xOTEsNyArMTg3LDYgQEAgS0hUTUxQYXJ0OjpLSFRNTFBhcnQoIFFX
aWRnZXQgKnBhcmVudFdpZAogICAgIHNldEluc3RhbmNlKCBLSFRNTEZhY3Rvcnk6Omluc3RhbmNl
KCksIHByb2YgPT0gQnJvd3NlclZpZXdHVUkgJiYgIXBhcmVudFBhcnQoKSApOwogfQogCi0KIHZv
aWQgS0hUTUxQYXJ0Ojppbml0KCBLSFRNTFZpZXcgKnZpZXcsIEdVSVByb2ZpbGUgcHJvZiApCiB7
CiAgIEF0b21pY1N0cmluZzo6aW5pdCgpOwpAQCAtMjQ0LDggKzIzOSw2IEBAIHZvaWQgS0hUTUxQ
YXJ0Ojppbml0KCBLSFRNTFZpZXcgKnZpZXcsIEcKIAogS0hUTUxQYXJ0Ojp+S0hUTUxQYXJ0KCkK
IHsKLSAgLy9rZERlYnVnKDYwNTApIDw8ICJLSFRNTFBhcnQ6On5LSFRNTFBhcnQgIiA8PCB0aGlz
IDw8IGVuZGw7Ci0KICAgc3RvcEF1dG9TY3JvbGwoKTsKICAgY2FuY2VsUmVkaXJlY3Rpb24oKTsK
IApAQCAtNDg5LDEwICs0ODIsNiBAQCB2b2lkIEtIVE1MUGFydDo6c3RvcExvYWRpbmcoYm9vbCBz
ZW5kVW5sCiAgIC8vIFN0b3AgYW55IHN0YXJ0ZWQgcmVkaXJlY3Rpb25zIGFzIHdlbGwhISAoREEp
CiAgIGNhbmNlbFJlZGlyZWN0aW9uKCk7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQot
ICAvLyBudWxsIG5vZGUgYWN0aXZhdGVkLgotICBlbWl0IG5vZGVBY3RpdmF0ZWQoTm9kZSgpKTsK
LSNlbmRpZgogfQogCiBib29sIEtIVE1MUGFydDo6Y2xvc2VVUkwoKQpAQCAtNTM4LDQ1ICs1Mjcs
MTUgQEAgYm9vbCBLSFRNTFBhcnQ6Om1ldGFSZWZyZXNoRW5hYmxlZCgpIGNvbgogICByZXR1cm4g
ZC0+bV9tZXRhUmVmcmVzaEVuYWJsZWQ7CiB9CiAKLS8vIERlZmluZSB0aGlzIHRvIGRpc2FibGUg
ZGxvcGVuaW5nIGtqc19odG1sLCB3aGVuIGRpcmVjdGx5IGxpbmtpbmcgdG8gaXQuCi0vLyBZb3Ug
bmVlZCB0byBlZGl0IGtodG1sL01ha2VmaWxlLmFtIHRvIGFkZCAuL2VjbWEvbGlia2pzX2h0bWwu
bGEgdG8gTElCQURECi0vLyBhbmQgdG8gZWRpdCBraHRtbC9lY21hL01ha2VmaWxlLmFtIHRvIHMv
a2pzX2h0bWwvbGlia2pzX2h0bWwvLCByZW1vdmUgbGlia2h0bWwgZnJvbSBMSUJBREQsCi0vLyAg
ICAgICAgcmVtb3ZlIExERkxBR1MgbGluZSwgYW5kIHJlcGxhY2Uga2RlX21vZHVsZSB3aXRoIGVp
dGhlciBsaWIgKHNoYXJlZCkgb3Igbm9pbnN0IChzdGF0aWMpCi0vLyNkZWZpbmUgRElSRUNUX0xJ
TktBR0VfVE9fRUNNQQotCi0jaWZkZWYgRElSRUNUX0xJTktBR0VfVE9fRUNNQQogZXh0ZXJuICJD
IiB7IEtKU1Byb3h5ICpranNfaHRtbF9pbml0KEtIVE1MUGFydCAqa2h0bWxwYXJ0KTsgfQotI2Vu
ZGlmCiAKIEtKU1Byb3h5ICpLSFRNTFBhcnQ6OmpTY3JpcHQoKQogewotICBpZiAoIWpTY3JpcHRF
bmFibGVkKCkpeworICBpZiAoIWpTY3JpcHRFbmFibGVkKCkpCiAgICAgcmV0dXJuIDA7Ci0gIH0K
IAotICBpZiAoICFkLT5tX2pzY3JpcHQgKQotICB7Ci0jaWZuZGVmIERJUkVDVF9MSU5LQUdFX1RP
X0VDTUEKLSAgICBLTGlicmFyeSAqbGliID0gS0xpYkxvYWRlcjo6c2VsZigpLT5saWJyYXJ5KCJr
anNfaHRtbCIpOwotICAgIGlmICggIWxpYiApIHsKLSAgICAgIHNldEpTY3JpcHRFbmFibGVkKCBm
YWxzZSApOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIC8vIGxvb2sgZm9yIHBsYWluIEMg
aW5pdCBmdW5jdGlvbgotICAgIHZvaWQgKnN5bSA9IGxpYi0+c3ltYm9sKCJranNfaHRtbF9pbml0
Iik7Ci0gICAgaWYgKCAhc3ltICkgewotICAgICAgbGliLT51bmxvYWQoKTsKLSAgICAgIHNldEpT
Y3JpcHRFbmFibGVkKCBmYWxzZSApOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHR5cGVk
ZWYgS0pTUHJveHkqICgqaW5pdEZ1bmN0aW9uKShLSFRNTFBhcnQgKik7Ci0gICAgaW5pdEZ1bmN0
aW9uIGluaXRTeW0gPSAoaW5pdEZ1bmN0aW9uKSBzeW07Ci0gICAgZC0+bV9qc2NyaXB0ID0gKCpp
bml0U3ltKSh0aGlzKTsKLSAgICBkLT5tX2tqc19saWIgPSBsaWI7Ci0jZWxzZQorICBpZiAoICFk
LT5tX2pzY3JpcHQgKSB7CiAgICAgZC0+bV9qc2NyaXB0ID0ga2pzX2h0bWxfaW5pdCh0aGlzKTsK
LSAgICAvLyBkLT5tX2tqc19saWIgcmVtYWlucyAwTC4KLSNlbmRpZgogICAgIGlmIChkLT5tX2JK
U2NyaXB0RGVidWdFbmFibGVkKQogICAgICAgICBkLT5tX2pzY3JpcHQtPnNldERlYnVnRW5hYmxl
ZCh0cnVlKTsKICAgfQpAQCAtNjAxLDIzICs1NjAsOCBAQCBRVmFyaWFudCBLSFRNTFBhcnQ6OmV4
ZWN1dGVTY3JpcHQoIGNvbnN0CiAgICAgcmV0dXJuIGV4ZWN1dGVTY3JpcHQoIDAsIHNjcmlwdCwg
Zm9yY2VVc2VyR2VzdHVyZSApOwogfQogCi0vL0VuYWJsZSB0aGlzIHRvIHNlZSBhbGwgSlMgc2Ny
aXB0cyBiZWluZyBleGVjdXRlZAotLy8jZGVmaW5lIEtKU19WRVJCT1NFCi0KLSNpZiAhS0hUTUxf
Tk9fQ1BMVVNQTFVTX0RPTQotCi1RVmFyaWFudCBLSFRNTFBhcnQ6OmV4ZWN1dGVTY3JpcHQoIGNv
bnN0IERPTTo6Tm9kZSAmbiwgY29uc3QgUVN0cmluZyAmc2NyaXB0LCBib29sIGZvcmNlVXNlckdl
c3R1cmUgKQotewotICAgIHJldHVybiBleGVjdXRlU2NyaXB0KG4uaGFuZGxlKCksIHNjcmlwdCwg
Zm9yY2VVc2VyR2VzdHVyZSk7Ci19Ci0KLSNlbmRpZgotCiBRVmFyaWFudCBLSFRNTFBhcnQ6OmV4
ZWN1dGVTY3JpcHQoIERPTTo6Tm9kZUltcGwgKm4sIGNvbnN0IFFTdHJpbmcgJnNjcmlwdCwgYm9v
bCBmb3JjZVVzZXJHZXN0dXJlICkKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYw
NzApIDw8ICJLSFRNTFBhcnQ6OmV4ZWN1dGVTY3JpcHQgbj0iIDw8IG4ubm9kZU5hbWUoKS5xc3Ry
aW5nKCkubGF0aW4xKCkgPDwgIigiIDw8IChuLmlzTnVsbCgpID8gMCA6IG4ubm9kZVR5cGUoKSkg
PDwgIikgIiA8PCBzY3JpcHQgPDwgZW5kbDsKLSNlbmRpZgogICBLSlNQcm94eSAqcHJveHkgPSBq
U2NyaXB0KCk7CiAKICAgaWYgKCFwcm94eSB8fCBwcm94eS0+cGF1c2VkKCkpCkBAIC02MzIsOSAr
NTc2LDYgQEAgUVZhcmlhbnQgS0hUTUxQYXJ0OjpleGVjdXRlU2NyaXB0KCBET006OgogICAgICAg
c3VibWl0Rm9ybUFnYWluKCk7CiAgICAgRG9jdW1lbnRJbXBsOjp1cGRhdGVEb2N1bWVudHNSZW5k
ZXJpbmcoKTsKIAotI2lmZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIktIVE1M
UGFydDo6ZXhlY3V0ZVNjcmlwdCAtIGRvbmUiIDw8IGVuZGw7Ci0jZW5kaWYKICAgcmV0dXJuIHJl
dDsKIH0KIApAQCAtODI4LDcgKzc2OSw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpjbGVhcigpCiAgIGNv
bm5lY3QoIGthcHAtPmNsaXBib2FyZCgpLCBTSUdOQUwoIHNlbGVjdGlvbkNoYW5nZWQoKSksIFNM
T1QoIHNsb3RDbGVhclNlbGVjdGlvbigpKSk7CiAjZW5kaWYKIAotCiAgIGlmICggIWQtPm1faGF2
ZUVuY29kaW5nICkKICAgICBkLT5tX2VuY29kaW5nID0gUVN0cmluZzo6bnVsbDsKICNpZmRlZiBT
UEVFRF9ERUJVRwpAQCAtODYzLDI0ICs4MDMsMTMgQEAgdm9pZCBLSFRNTFBhcnQ6OnJlcGxhY2VE
b2NJbXBsKERvY3VtZW50SQogICAgIH0KIH0KIAotLypib29sIEtIVE1MUGFydDo6aXNTU0xJblVz
ZSgpIGNvbnN0Ci17Ci0gIHJldHVybiBkLT5tX3NzbF9pbl91c2U7Ci19Ki8KLQogdm9pZCBLSFRN
TFBhcnQ6OnJlY2VpdmVkRmlyc3REYXRhKCkKIHsKLSAgICAvLyBMZWF2ZSBpbmRlbnRlZCBvbmUg
ZXh0cmEgZm9yIGVhc2llciBtZXJnaW5nLgotICAgIAotICAgICAgLy9rZERlYnVnKCA2MDUwICkg
PDwgImJlZ2luISIgPDwgZW5kbDsKLQogICAgIGJlZ2luKCBkLT5tX3dvcmtpbmdVUkwsIGQtPm1f
ZXh0ZW5zaW9uLT51cmxBcmdzKCkueE9mZnNldCwgZC0+bV9leHRlbnNpb24tPnVybEFyZ3MoKS55
T2Zmc2V0ICk7CiAKLQogICAgIGQtPm1fZG9jLT5kb2NMb2FkZXIoKS0+c2V0Q2FjaGVQb2xpY3ko
ZC0+bV9jYWNoZVBvbGljeSk7CiAgICAgZC0+bV93b3JraW5nVVJMID0gS1VSTCgpOwogCi0KICAg
ICAvLyBXaGVuIHRoZSBmaXJzdCBkYXRhIGFycml2ZXMsIHRoZSBtZXRhZGF0YSBoYXMganVzdCBi
ZWVuIG1hZGUgYXZhaWxhYmxlCiAgICAgUVN0cmluZyBxRGF0YTsKIApAQCAtOTMyLDcgKzg2MSw2
IEBAIHZvaWQgS0hUTUxQYXJ0OjpyZWNlaXZlZEZpcnN0RGF0YSgpCiAKICAgICAvLyBTdXBwb3J0
IGZvciBodHRwIGxhc3QtbW9kaWZpZWQKICAgICBkLT5tX2xhc3RNb2RpZmllZCA9IGQtPm1fam9i
LT5xdWVyeU1ldGFEYXRhKCJtb2RpZmllZCIpOwotICAgIC8va2REZWJ1ZygpIDw8ICJLSFRNTFBh
cnQ6OnNsb3REYXRhIG1ldGFkYXRhIG1vZGlmaWVkOiAiIDw8IGQtPm1fbGFzdE1vZGlmaWVkIDw8
IGVuZGw7CiB9CiAKIApAQCAtOTQ1LDggKzg3Myw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpzbG90Rmlu
aXNoZWQoIEtJTzo6Sm9iICoKICAgICBjaGVja0NvbXBsZXRlZCgpOwogICAgIHJldHVybjsKICAg
fQotICAvL2tkRGVidWcoIDYwNTAgKSA8PCAic2xvdEZpbmlzaGVkIiA8PCBlbmRsOwotCiAKICAg
aWYgKCBkLT5tX2RvYyAmJiBkLT5tX2RvYy0+ZG9jTG9hZGVyKCktPmV4cGlyZURhdGUoKSAmJiBt
X3VybC5wcm90b2NvbCgpLmxvd2VyKCkuc3RhcnRzV2l0aCgiaHR0cCIpKQogICAgICAgS0lPOjpo
dHRwX3VwZGF0ZV9jYWNoZShtX3VybCwgZmFsc2UsIGQtPm1fZG9jLT5kb2NMb2FkZXIoKS0+ZXhw
aXJlRGF0ZSgpKTsKQEAgLTEwMTIsOSArOTM4LDcgQEAgdm9pZCBLSFRNTFBhcnQ6OmJlZ2luKCBj
b25zdCBLVVJMICZ1cmwsIAogCiAgIC8vIFdlIGRvbid0IG5lZWQgS0RFIGNoYWluZWQgVVJJIGhh
bmRsaW5nIG9yIHdpbmRvdyBjYXB0aW9uIHNldHRpbmcKICAgaWYgKCAhbV91cmwuaXNFbXB0eSgp
ICkKLSAgewogICAgIGJhc2V1cmwgPSBtX3VybDsKLSAgfQogCiAgIGlmIChET01JbXBsZW1lbnRh
dGlvbkltcGw6OmlzWE1MTUlNRVR5cGUoYXJncy5zZXJ2aWNlVHlwZSkpCiAgICAgZC0+bV9kb2Mg
PSBET01JbXBsZW1lbnRhdGlvbkltcGw6Omluc3RhbmNlKCktPmNyZWF0ZURvY3VtZW50KCBkLT5t
X3ZpZXcgKTsKQEAgLTEyMjIsMTAgKzExNDYsNiBAQCB2b2lkIEtIVE1MUGFydDo6c2xvdExvYWRl
clJlcXVlc3REb25lKCBrCiAKIHZvaWQgS0hUTUxQYXJ0OjpjaGVja0NvbXBsZXRlZCgpCiB7Ci0v
LyAgIGtkRGVidWcoIDYwNTAgKSA8PCAiS0hUTUxQYXJ0OjpjaGVja0NvbXBsZXRlZCgpIHBhcnNp
bmc6ICIgPDwgZC0+bV9kb2MtPnBhcnNpbmcoKSA8PCBlbmRsOwotLy8gICBrZERlYnVnKCA2MDUw
ICkgPDwgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAiIDw8IGQtPm1fYkNv
bXBsZXRlIDw8IGVuZGw7Ci0KLQogICAvLyBBbnkgZnJhbWUgdGhhdCBoYXNuJ3QgY29tcGxldGVk
IHlldCA/CiAgIENvbnN0RnJhbWVJdCBpdCA9IGQtPm1fZnJhbWVzLmJlZ2luKCk7CiAgIENvbnN0
RnJhbWVJdCBlbmQgPSBkLT5tX2ZyYW1lcy5lbmQoKTsKQEAgLTEyNzMsNyArMTE5Myw2IEBAIHZv
aWQgS0hUTUxQYXJ0OjpjaGVja0NvbXBsZXRlZCgpCiAgICAgICBlbWl0IGNvbXBsZXRlZCgpOwog
ICB9CiAKLQogI2lmZGVmIFNQRUVEX0RFQlVHCiAgIGtkRGVidWcoNjA1MCkgPDwgIkRPTkU6ICIg
PDxkLT5tX3BhcnNldGltZS5lbGFwc2VkKCkgPDwgZW5kbDsKICNlbmRpZgpAQCAtMTM0MiwxMCAr
MTI2MSw5IEBAIFFTdHJpbmcgS0hUTUxQYXJ0OjpiYXNlVGFyZ2V0KCkgY29uc3QKIAogS1VSTCBL
SFRNTFBhcnQ6OmNvbXBsZXRlVVJMKCBjb25zdCBRU3RyaW5nICZ1cmwgKQogewotICBpZiAoICFk
LT5tX2RvYyApIHJldHVybiB1cmw7Ci0KLQotICByZXR1cm4gS1VSTCggZC0+bV9kb2MtPmNvbXBs
ZXRlVVJMKCB1cmwgKSApOworICAgIGlmICghZC0+bV9kb2MpCisgICAgICAgIHJldHVybiB1cmw7
CisgICAgcmV0dXJuIEtVUkwoZC0+bV9kb2MtPmNvbXBsZXRlVVJMKHVybCkpOwogfQogCiB2b2lk
IEtIVE1MUGFydDo6c2NoZWR1bGVSZWRpcmVjdGlvbiggZG91YmxlIGRlbGF5LCBjb25zdCBRU3Ry
aW5nICZ1cmwsIGJvb2wgZG9Mb2NrSGlzdG9yeSkKQEAgLTE0OTcsNyArMTQxNSw2IEBAIHZvaWQg
S0hUTUxQYXJ0OjpzbG90UmVkaXJlY3Rpb24oS0lPOjpKb2IKICAgZC0+bV93b3JraW5nVVJMID0g
dXJsOwogfQogCi0KIFFTdHJpbmcgS0hUTUxQYXJ0OjplbmNvZGluZygpIGNvbnN0CiB7CiAgICAg
aWYoZC0+bV9oYXZlRW5jb2RpbmcgJiYgIWQtPm1fZW5jb2RpbmcuaXNFbXB0eSgpKQpAQCAtMTU5
MSwxNiArMTUwOCw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZXRPbmx5TG9jYWxSZWZlcmVuY2VzKGIK
ICAgZC0+bV9vbmx5TG9jYWxSZWZlcmVuY2VzID0gZW5hYmxlOwogfQogCi0KLSNpZiAhS0hUTUxf
Tk9fQ1BMVVNQTFVTX0RPTQotCi1RU3RyaW5nIEtIVE1MUGFydDo6dGV4dChjb25zdCBET006OlJh
bmdlICZyKSBjb25zdAotewotICAgIHJldHVybiBwbGFpblRleHQoci5oYW5kbGUoKSk7Ci19Ci0K
LSNlbmRpZgotCiBRU3RyaW5nIEtIVE1MUGFydDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gcGxhaW5UZXh0KHNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQoKSk7CkBAIC0xODMy
LDkgKzE3MzksNiBAQCB2b2lkIEtIVE1MUGFydDo6dXJsU2VsZWN0ZWQoIGNvbnN0IFFTdHJpCiAg
ICAgLy8gIyMjIEVSUk9SIEhBTkRMSU5HCiAgICAgcmV0dXJuOwogCi0gIC8va2REZWJ1ZyggNjAw
MCApIDw8ICJ1cmxTZWxlY3RlZDogY29tcGxldGUgVVJMOiIgPDwgY1VSTC51cmwoKSA8PCAiIHRh
cmdldCA9ICIgPDwgdGFyZ2V0IDw8IGVuZGw7Ci0KLQogICBhcmdzLmZyYW1lTmFtZSA9IHRhcmdl
dDsKIAogICBpZiAoIGQtPm1fYkhUVFBSZWZyZXNoICkKQEAgLTIxNjUsNyArMjA2OSw2IEBAIHZv
aWQgS0hUTUxQYXJ0OjpzdWJtaXRGb3JtKCBjb25zdCBjaGFyICoKICAgfQogfQogCi0KIHZvaWQg
S0hUTUxQYXJ0OjpzbG90UGFyZW50Q29tcGxldGVkKCkKIHsKICAgaWYgKCBkLT5tX3NjaGVkdWxl
ZFJlZGlyZWN0aW9uICE9IG5vUmVkaXJlY3Rpb25TY2hlZHVsZWQgJiYgIWQtPm1fcmVkaXJlY3Rp
b25UaW1lci5pc0FjdGl2ZSgpICkKQEAgLTIyMTAsNyArMjExMyw2IEBAIHZvaWQgS0hUTUxQYXJ0
OjpzbG90Q2hpbGRDb21wbGV0ZWQoIGJvb2wKICAgY2hlY2tDb21wbGV0ZWQoKTsKIH0KIAotCiBr
aHRtbDo6Q2hpbGRGcmFtZSAqS0hUTUxQYXJ0OjpjaGlsZEZyYW1lKCBjb25zdCBRT2JqZWN0ICpv
YmogKQogewogICAgIGFzc2VydCggb2JqLT5pbmhlcml0cyggIktQYXJ0czo6UmVhZE9ubHlQYXJ0
IiApICk7CkBAIC0yMjU1LDcgKzIxNTcsNiBAQCBLSFRNTFBhcnQgKktIVE1MUGFydDo6ZmluZEZy
YW1lKCBjb25zdCBRCiAgIH0KIH0KIAotCiBib29sIEtIVE1MUGFydDo6ZnJhbWVFeGlzdHMoIGNv
bnN0IFFTdHJpbmcgJmZyYW1lTmFtZSApCiB7CiAgIENvbnN0RnJhbWVJdCBpdCA9IGQtPm1fZnJh
bWVzLmZpbmQoIGZyYW1lTmFtZSApOwpAQCAtMjI3NiwxNiArMjE3Nyw2IEBAIEtIVE1MUGFydCAq
S0hUTUxQYXJ0OjpwYXJlbnRQYXJ0KCkgY29uc3QKICAgcmV0dXJuIChLSFRNTFBhcnQgKilwYXJl
bnQoKTsKIH0KIAotCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotRE9NOjpOb2RlIEtI
VE1MUGFydDo6bm9kZVVuZGVyTW91c2UoKSBjb25zdAotewotICAgIHJldHVybiBkLT5tX3ZpZXct
Pm5vZGVVbmRlck1vdXNlKCk7Ci19Ci0KLSNlbmRpZgotCiB2b2lkIEtIVE1MUGFydDo6ZW1pdFNl
bGVjdGlvbkNoYW5nZWQoKQogewogfQpAQCAtMjM4NSw3ICsyMjc2LDYgQEAgUVN0cmluZyBLSFRN
TFBhcnQ6Omxhc3RNb2RpZmllZCgpIGNvbnN0CiAgIHJldHVybiBkLT5tX2xhc3RNb2RpZmllZDsK
IH0KIAotCiB2b2lkIEtIVE1MUGFydDo6cmVwYXJzZUNvbmZpZ3VyYXRpb24oKQogewogICBzZXRB
dXRvbG9hZEltYWdlcyggZC0+bV9zZXR0aW5ncy0+YXV0b0xvYWRJbWFnZXMoKSApOwpAQCAtMjQ0
MCw4ICsyMzMwLDYgQEAgS0hUTUxQYXJ0ICpLSFRNTFBhcnQ6OmNoaWxkRnJhbWVOYW1lZChjbwog
ICByZXR1cm4gTlVMTDsKIH0KIAotCi0KIHZvaWQgS0hUTUxQYXJ0OjpzZXRETkRFbmFibGVkKCBi
b29sIGIgKQogewogICBkLT5tX2JEbmQgPSBiOwpAQCAtMjY2NCw3ICsyNTUyLDYgQEAgdm9pZCBL
SFRNTFBhcnQ6OmtodG1sTW91c2VQcmVzc0V2ZW50KGtodAogICAgICAgICBkLT5tX3N0clNlbGVj
dGVkVVJMVGFyZ2V0ID0gZXZlbnQtPnRhcmdldCgpLnFzdHJpbmcoKTsKICAgICB9CiAKLQogICAg
IGlmIChtb3VzZS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiB8fCBtb3VzZS0+YnV0dG9uKCkgPT0g
TWlkQnV0dG9uKSB7CiAgICAgICAgIGQtPm1fYk1vdXNlUHJlc3NlZCA9IHRydWU7CiAKQEAgLTI2
OTIsNyArMjU3OSw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpraHRtbE1vdXNlRG91YmxlQ2xpY2tFdmUK
IHsKIH0KIAotCiB2b2lkIEtIVE1MUGFydDo6aGFuZGxlTW91c2VNb3ZlRXZlbnRTZWxlY3Rpb24o
a2h0bWw6Ok1vdXNlTW92ZUV2ZW50ICpldmVudCkKIHsKICAgICAvLyBNb3VzZSBub3QgcHJlc3Nl
ZC4gRG8gbm90aGluZy4KQEAgLTI3NDgsNyArMjYzNCw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpoYW5k
bGVNb3VzZU1vdmVFdmVudFNlbGUKIAogdm9pZCBLSFRNTFBhcnQ6OmtodG1sTW91c2VNb3ZlRXZl
bnQoa2h0bWw6Ok1vdXNlTW92ZUV2ZW50ICpldmVudCkKIHsKLQogICAgIGhhbmRsZU1vdXNlTW92
ZUV2ZW50U2VsZWN0aW9uKGV2ZW50KTsJCQogfQogCkBAIC0yODQwLDcgKzI3MjUsNiBAQCB2b2lk
IEtIVE1MUGFydDo6c3RvcEF1dG9TY3JvbGwoKQogewogfQogCi0KIHZvaWQgS0hUTUxQYXJ0Ojpz
ZWxlY3RBbGwoKQogewogICAgIGlmICghZC0+bV9kb2MpCkBAIC0yOTU3LDEyICsyODQxLDggQEAg
dm9pZCBLSFRNTFBhcnQ6OmNsZWFyVHlwaW5nU3R5bGUoKQogICAgIHNldFR5cGluZ1N0eWxlKDAp
OwogfQogCi0KIFFWYXJpYW50IEtIVE1MUGFydDo6ZXhlY3V0ZVNjcmlwdChRU3RyaW5nIGZpbGVu
YW1lLCBpbnQgYmFzZUxpbmUsIE5vZGVJbXBsICpuLCBjb25zdCBRU3RyaW5nICZzY3JpcHQpCiB7
Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiZXhlY3V0ZVNjcmlwdDog
ZmlsZW5hbWU9IiA8PCBmaWxlbmFtZSA8PCAiIGJhc2VMaW5lPSIgPDwgYmFzZUxpbmUgPDwgIiBz
Y3JpcHQ9IiA8PCBzY3JpcHQgPDwgZW5kbDsKLSNlbmRpZgogICBLSlNQcm94eSAqcHJveHkgPSBq
U2NyaXB0KCk7CiAKICAgaWYgKCFwcm94eSB8fCBwcm94eS0+cGF1c2VkKCkpCkBAIC0yOTc0LDMw
ICsyODU0LDEwIEBAIFFWYXJpYW50IEtIVE1MUGFydDo6ZXhlY3V0ZVNjcmlwdChRU3RyaW4KIAog
dm9pZCBLSFRNTFBhcnQ6OnNsb3RQYXJ0UmVtb3ZlZCggS1BhcnRzOjpQYXJ0ICpwYXJ0ICkKIHsK
LS8vICAgIGtkRGVidWcoNjA1MCkgPDwgIktIVE1MUGFydDo6c2xvdFBhcnRSZW1vdmVkICIgPDwg
cGFydCA8PCBlbmRsOwogICAgIGlmICggcGFydCA9PSBkLT5tX2FjdGl2ZUZyYW1lICkKICAgICAg
ICAgZC0+bV9hY3RpdmVGcmFtZSA9IDBMOwogfQogCi0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVT
X0RPTQotCi12b2lkIEtIVE1MUGFydDo6c2V0QWN0aXZlTm9kZShjb25zdCBET006Ok5vZGUgJm5v
ZGUpCi17Ci0gICAgaWYgKCFkLT5tX2RvYyB8fCAhZC0+bV92aWV3KQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBTZXQgdGhlIGRvY3VtZW50J3MgYWN0aXZlIG5vZGUKLSAgICBkLT5tX2RvYy0+
c2V0Rm9jdXNOb2RlKG5vZGUuaGFuZGxlKCkpOwotfQotCi1ET006Ok5vZGUgS0hUTUxQYXJ0Ojph
Y3RpdmVOb2RlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRE9NOjpOb2RlKGQtPm1fZG9jP2QtPm1f
ZG9jLT5mb2N1c05vZGUoKTowKTsKLX0KLQotI2VuZGlmCi0KIERPTTo6RXZlbnRMaXN0ZW5lciAq
S0hUTUxQYXJ0OjpjcmVhdGVIVE1MRXZlbnRMaXN0ZW5lciggUVN0cmluZyBjb2RlLCBOb2RlSW1w
bCAqbm9kZSApCiB7CiAgIEtKU1Byb3h5ICpwcm94eSA9IGpTY3JpcHQoKTsKQEAgLTMwMzgsNyAr
Mjg5OCw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpwcmVsb2FkU2NyaXB0KGNvbnN0IFFTdHIKICAgICBr
aHRtbDo6Q2FjaGU6OnByZWxvYWRTY3JpcHQodXJsLCBzY3JpcHQpOwogfQogCi0KIGJvb2wgS0hU
TUxQYXJ0OjpyZXN0b3JlZCgpIGNvbnN0CiB7CiAgIHJldHVybiBkLT5tX3Jlc3RvcmVkOwpAQCAt
MzExNCw3ICsyOTczLDYgQEAgdm9pZCBLSFRNTFBhcnQ6OnVuZG8oKQogICAgIEtXUSh0aGlzKS0+
aXNzdWVVbmRvQ29tbWFuZCgpOwogfQogCi0KIHZvaWQgS0hUTUxQYXJ0Ojpjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlLCBFZGl0QWN0aW9uIGVk
aXRpbmdBY3Rpb24pCiB7CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+bGVuZ3RoKCkgPT0gMCkg
ewpAQCAtMzQyNCw3ICszMjgyLDYgQEAgdm9pZCBLSFRNTFBhcnQ6OnJlbW92ZUVkaXRpbmdTdHls
ZUZyb21FbAogICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIGN1cnJlbnRTdHls
ZS0+Y3NzVGV4dCgpKTsKIH0KIAotCiBib29sIEtIVE1MUGFydDo6aXNDaGFyYWN0ZXJTbWFydFJl
cGxhY2VFeGVtcHQoY29uc3QgUUNoYXIgJiwgYm9vbCkKIHsKICAgICAvLyBubyBzbWFydCByZXBs
YWNlCkBAIC0zNTQ3LDYgKzM0MDQsMyBAQCB2b2lkIEtIVE1MUGFydDo6aGFuZGxlRmFsbGJhY2tD
b250ZW50KCkKICAgICAgICAgcmV0dXJuOwogICAgIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVt
ZW50SW1wbCAqPihub2RlKS0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiB9Ci0KLXVzaW5nIG5h
bWVzcGFjZSBLUGFydHM7Ci0jaW5jbHVkZSAia2h0bWxfcGFydC5tb2MiCkluZGV4OiBraHRtbC9r
aHRtbF9wYXJ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
a2h0bWxfcGFydC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0MApkaWZmIC1wIC11IC1yMS4x
NDAga2h0bWwva2h0bWxfcGFydC5oCi0tLSBraHRtbC9raHRtbF9wYXJ0LmgJMjEgTm92IDIwMDUg
MDQ6MDE6NTEgLTAwMDAJMS4xNDAKKysrIGtodG1sL2todG1sX3BhcnQuaAkyOSBOb3YgMjAwNSAy
Mjo1MTozNyAtMDAwMApAQCAtMTA4LDQ2ICsxMDgsNiBAQCBuYW1lc3BhY2UgS1BhcnRzCiAgIGNs
YXNzIFBhcnRNYW5hZ2VyOwogfTsKIAotLyoqCi0gKiBUaGlzIGNsYXNzIGlzIGtodG1sJ3MgbWFp
biBjbGFzcy4gSXQgZmVhdHVyZXMgYW4gYWxtb3N0IGNvbXBsZXRlCi0gKiB3ZWIgYnJvd3Nlciwg
YW5kIGh0bWwgcmVuZGVyZXIuCi0gKgotICogVGhlIGVhc2llc3Qgd2F5IHRvIHVzZSB0aGlzIGNs
YXNzIChpZiB5b3UganVzdCB3YW50IHRvIGRpc3BsYXkgYW4gSFRNTAotICogcGFnZSBhdCBzb21l
IFVSTCkgaXMgdGhlIGZvbGxvd2luZzoKLSAqCi0gKiA8cHJlPgotICogS1VSTCB1cmwgPSAiaHR0
cDovL3d3dy5rZGUub3JnIjsKLSAqIEtIVE1MUGFydCAqdyA9IG5ldyBLSFRNTFBhcnQoKTsKLSAq
IHctPm9wZW5VUkwodXJsKTsKLSAqIHctPnZpZXcoKS0+cmVzaXplKDUwMCwgNDAwKTsKLSAqIHct
PnNob3coKTsKLSAqIDwvcHJlPgotICoKLSAqIEJ5IGRlZmF1bHQgSmF2YSBhbmQgSmF2YVNjcmlw
dCBzdXBwb3J0IGFyZSBkaXNhYmxlZC4gWW91IGNhbiBlbmFibGUgdGhlbSBieQotICogdXNpbmcg
dGhlIEByZWYgc2V0SmF2YUVuYWJsZWQoKSBhbmQgQHJlZiBzZXRKU2NyaXB0RW5hYmxlZCgpIG1l
dGhvZHMuCi0gKgotICogU29tZSBhcHBzIHdhbnQgdG8gd3JpdGUgdGhlaXIgSFRNTCBjb2RlIGRp
cmVjdGx5IGludG8gdGhlIHdpZGdldCBpbnN0ZWFkIG9mCi0gKiBpdCBvcGVuaW5nIGFuIHVybC4g
WW91IGNhbiBhbHNvIGRvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0gKgotICogPHByZT4K
LSAqIFFTdHJpbmcgbXlIVE1MQ29kZSA9IC4uLjsKLSAqIEtIVE1MUGFydCAqdyA9IG5ldyBLSFRN
TFBhcnQoKTsKLSAqIHctPmJlZ2luKCk7Ci0gKiB3LT53cml0ZShteUhUTUxDb2RlKTsKLSAqIC4u
LgotICogdy0+ZW5kKCk7Ci0gKiA8L3ByZT4KLSAqCi0gKiBZb3UgY2FuIGRvIGFzIG1hbnkgY2Fs
bHMgdG8gd3JpdGUgYXMgeW91IHdhbnQuIEJ1dCB0aGVyZSBhcmUgdHdvCi0gKiBAcmVmIHdyaXRl
KCkgbWV0aG9kcywgb25lIGFjY2VwdGluZyBhIEByZWYgUVN0cmluZyBvbmUgYWNjZXB0aW5nIGEK
LSAqIEBwIGNoYXIgQHAgKiBhcmd1bWVudC4gWW91IHNob3VsZCB1c2Ugb25lIG9yIHRoZSBvdGhl
cgotICogKGJ1dCBub3QgYm90aCkgc2luY2UgdGhlIG1ldGhvZCB1c2luZwotICogdGhlIEBwIGNo
YXIgQHAgKiBhcmd1bWVudCBkb2VzIGFuIGFkZGl0aW9uYWwgZGVjb2Rpbmcgc3RlcCB0byBjb252
ZXJ0IHRoZQotICogd3JpdHRlbiBkYXRhIHRvIFVuaWNvZGUuCi0gKgotICogQHNob3J0IEhUTUwg
QnJvd3NlciBXaWRnZXQKLSAqIEBhdXRob3IgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAq
ICovCiBjbGFzcyBLSFRNTFBhcnQgOiBwdWJsaWMgS1BhcnRzOjpSZWFkT25seVBhcnQKIHsKICAg
UV9PQkpFQ1QKQEAgLTIzMCwyNiArMTkwLDYgQEAgcHVibGljOgogICB2b2lkIHN0b3BMb2FkaW5n
KGJvb2wgc2VuZFVubG9hZCA9IGZhbHNlKTsKICAgdmlydHVhbCBib29sIGNsb3NlVVJMKCk7CiAK
LQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBy
ZWZlcmVuY2UgdG8gdGhlIERPTSBIVE1MIGRvY3VtZW50IChmb3Igbm9uLUhUTUwgZG9jdW1lbnRz
LCByZXR1cm5zIG51bGwpCi0gICAqLwotICBET006OkhUTUxEb2N1bWVudCBodG1sRG9jdW1lbnQo
KSBjb25zdDsKLQotICAvKioKLSAgICogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgRE9NIGRv
Y3VtZW50LgotICAgKi8KLSAgRE9NOjpEb2N1bWVudCBkb2N1bWVudCgpIGNvbnN0OwotCi0gIC8q
KgotICAgKiBSZXR1cm5zIHRoZSBub2RlIHRoYXQgaGFzIHRoZSBrZXlib2FyZCBmb2N1cy4KLSAg
ICovCi0gIERPTTo6Tm9kZSBhY3RpdmVOb2RlKCkgY29uc3Q7Ci0KLSNlbmRpZgotCiAgIC8qKgog
ICAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgQHJlZiBLUGFydHM6OkJyb3dzZXJFeHRlbnNp
b24uCiAgICAqLwpAQCAtMjk2LDkgKzIzNiw2IEBAIHB1YmxpYzoKICAgLyoqCiAgICAqIFNhbWUg
YXMgYWJvdmUgZXhjZXB0IHRoZSBOb2RlIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSAndGhpcycg
dmFsdWUuCiAgICAqLwotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0gIFFWYXJpYW50IGV4
ZWN1dGVTY3JpcHQoIGNvbnN0IERPTTo6Tm9kZSAmbiwgY29uc3QgUVN0cmluZyAmc2NyaXB0LCBi
b29sIGZvcmNlVXNlckdlc3R1cmUgPSBmYWxzZSApOwotI2VuZGlmCiAgIFFWYXJpYW50IGV4ZWN1
dGVTY3JpcHQoIERPTTo6Tm9kZUltcGwgKm4sIGNvbnN0IFFTdHJpbmcgJnNjcmlwdCwgYm9vbCBm
b3JjZVVzZXJHZXN0dXJlID0gZmFsc2UgKTsKIAogICAvKioKQEAgLTQ4MiwxMyArNDE5LDYgQEAg
cHVibGljOgogICAgKi8KICAgdm9pZCBzdG9wKCk7CiAKLSAgLyoKLSAgICogUHJpbnRzIHRoZSBj
dXJyZW50IEhUTUwgcGFnZSBsYXllZCBvdXQgZm9yIHRoZSBwcmludGVyLgotICAgKgotICAgKiAo
bm90IGltcGxlbWVudGVkIGF0IHRoZSBtb21lbnQpCi0gICAqLwotICAvLyAgICB2b2lkIHByaW50
KFFQYWludGVyICosIGludCBwYWdlSGVpZ2h0LCBpbnQgcGFnZVdpZHRoKTsKLQogICAvKioKICAg
ICogUGFpbnRzIHRoZSBIVE1MIHBhZ2UgdG8gYSBRUGFpbnRlci4gU2VlIEByZWYgS0hUTUxWaWV3
OjpwYWludCBmb3IgZGV0YWlscwogICAgKi8KQEAgLTY4MSwxMiArNjExLDYgQEAgcHVibGljOgog
ICAgKi8KICAgaW50IHhQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbigpIGNvbnN0OwogCi0j
aWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRleHQg
Zm9yIGEgcGFydCBvZiB0aGUgZG9jdW1lbnQuCi0gICAqLwotICBRU3RyaW5nIHRleHQoY29uc3Qg
RE9NOjpSYW5nZSAmKSBjb25zdDsKLSNlbmRpZgogCiAgIC8qKgogICAgKiBIYXMgdGhlIHVzZXIg
c2VsZWN0ZWQgYW55dGhpbmc/CkBAIC03NzMsMTggKzY5Nyw4IEBAIHB1YmxpYzoKICAgICovCiAg
IEtQYXJ0czo6UGFydE1hbmFnZXIgKnBhcnRNYW5hZ2VyKCk7CiAKLQogICB2aXJ0dWFsIHZvaWQg
dG9rZW5pemVyUHJvY2Vzc2VkRGF0YSgpIHt9OwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19E
T00KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgQHAgTm9kZSBjdXJyZW50bHkgdW5kZXIgdGhl
IG1vdXNlCi0gICAqLwotICBET006Ok5vZGUgbm9kZVVuZGVyTW91c2UoKSBjb25zdDsKLQotI2Vu
ZGlmCi0KICAgLyoqCiAgICAqIEBpbnRlcm5hbAogICAgKi8KQEAgLTgyOSw3ICs3NDMsNiBAQCBw
dWJsaWM6CiAgICAqLwogICBib29sIGZyYW1lRXhpc3RzKCBjb25zdCBRU3RyaW5nICZmcmFtZU5h
bWUgKTsKIAotCiAgIC8qKgogICAgKiBDYWxsZWQgYnkgS0pTLgogICAgKiBTZXRzIHRoZSBTdGF0
dXNCYXJUZXh0IGFzc2lnbmVkCkBAIC05NDAsMTggKzg1Myw2IEBAIHNpZ25hbHM6CiAgICAqLwog
ICB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoKTsKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9N
Ci0KLSAgLyoqCi0gICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhbiBlbGVtZW50IHJl
dHJpZXZlcyB0aGUKLSAgICoga2V5Ym9hcmQgZm9jdXMuIE5vdGUgdGhhdCB0aGUgc2lnbmFsIGFy
Z3VtZW50IGNhbiBiZQotICAgKiBhIG51bGwgbm9kZSBpZiBubyBlbGVtZW50IGlzIGFjdGl2ZSwg
bWVhbmluZyBhIG5vZGUKLSAgICogaGFzIGV4cGxpY2l0bHkgYmVlbiBkZWFjdGl2YXRlZCB3aXRo
b3V0IGEgbmV3IG9uZQotICAgKiBiZWNvbWluZyBhY3RpdmUuCi0gICAqLwotICB2b2lkIG5vZGVB
Y3RpdmF0ZWQoY29uc3QgRE9NOjpOb2RlICYpOwotCi0jZW5kaWYKIAogcHVibGljOgogCkBAIC05
OTcsNyArODk4LDYgQEAgcHJvdGVjdGVkOgogICAKICAgdm9pZCBzZWxlY3RDbG9zZXN0V29yZEZy
b21Nb3VzZUV2ZW50KFFNb3VzZUV2ZW50ICptb3VzZSwgRE9NOjpOb2RlSW1wbCAqaW5uZXJOb2Rl
LCBpbnQgeCwgaW50IHkpOwogCi0KICAgLyoqCiAgICAqIEludGVybmFsIGVtcHR5IHJlaW1wbGVt
ZW50YXRpb24gb2YgQHJlZiBLUGFydHM6OlJlYWRPbmx5UGFydDo6b3BlbkZpbGUgLgogICAgKi8K
QEAgLTEwMDYsMjQgKzkwNiw4IEBAIHByb3RlY3RlZDoKICAgdmlydHVhbCB2b2lkIHVybFNlbGVj
dGVkKCBjb25zdCBRU3RyaW5nICZ1cmwsIGludCBidXR0b24sIGludCBzdGF0ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBRU3RyaW5nICZfdGFyZ2V0LCBLUGFydHM6OlVSTEFy
Z3MgYXJncyA9IEtQYXJ0czo6VVJMQXJncygpKTsKIAotCiBwdWJsaWMgc2xvdHM6CiAKLSNpZiAh
S0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBmb2N1c3NlZCBu
b2RlIG9mIHRoZSBkb2N1bWVudCB0byB0aGUgc3BlY2lmaWVkIG5vZGUuIElmIHRoZSBub2RlIGlz
IGEgZm9ybSBjb250cm9sLCB0aGUgY29udHJvbCB3aWxsCi0gICAqIHJlY2VpdmUgZm9jdXMgaW4g
dGhlIHNhbWUgd2F5IHRoYXQgaXQgd291bGQgaWYgdGhlIHVzZXIgaGFkIGNsaWNrZWQgb24gaXQg
b3IgdGFiYmVkIHRvIGl0IHdpdGggdGhlIGtleWJvYXJkLiBGb3IKLSAgICogbW9zdCBvdGhlciB0
eXBlcyBvZiBlbGVtZW50cywgdGhlcmUgaXMgbm8gdmlzdWwgaW5kaWN0aW9uIG9mIHdoZXRoZXIg
b3Igbm90IHRoZXkgYXJlIGZvY3Vzc2VkLgotICAgKgotICAgKiBTZWUgQHJlZiBhY3RpdmVOb2Rl
Ci0gICAqCi0gICAqIEBwYXJhbSBub2RlIFRoZSBub2RlIHRvIGZvY3VzCi0gICAqLwotICB2b2lk
IHNldEFjdGl2ZU5vZGUoY29uc3QgRE9NOjpOb2RlICZub2RlKTsKLQotI2VuZGlmCi0KICAgLyoq
CiAgICAqIFN0b3BzIGFsbCBhbmltYXRlZCBpbWFnZXMgb24gdGhlIGN1cnJlbnQgYW5kIGNoaWxk
IHBhZ2VzCiAgICAqLwpAQCAtMTE5NywxMCArMTA4MSw2IEBAIHByaXZhdGU6CiAgIHZvaWQgc3Rh
cnRBdXRvU2Nyb2xsKCk7CiAgIHZvaWQgc3RvcEF1dG9TY3JvbGwoKTsKICAgdm9pZCBvdmVyVVJM
KCBjb25zdCBRU3RyaW5nICZ1cmwsIGNvbnN0IFFTdHJpbmcgJnRhcmdldCwgYm9vbCBzaGlmdFBy
ZXNzZWQgPSBmYWxzZSApOwotCi0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICovCiAgIGJvb2wg
cHJvY2Vzc09iamVjdFJlcXVlc3QoIGtodG1sOjpDaGlsZEZyYW1lICpjaGlsZCwgY29uc3QgS1VS
TCAmdXJsLCBjb25zdCBRU3RyaW5nICZtaW1ldHlwZSApOwogCiAgIC8qKgpJbmRleDoga2h0bWwv
a2h0bWxfcGFydC5tb2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwva2h0bWxfcGFydC5tb2MK
ZGlmZiAtTiBraHRtbC9raHRtbF9wYXJ0Lm1vYwpJbmRleDoga2h0bWwva2h0bWx2aWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbHZpZXcuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1MwpkaWZmIC1wIC11IC1yMS4xNTMga2h0bWwva2h0
bWx2aWV3LmNwcAotLS0ga2h0bWwva2h0bWx2aWV3LmNwcAkyMSBOb3YgMjAwNSAwMToxOTo0OCAt
MDAwMAkxLjE1MworKysga2h0bWwva2h0bWx2aWV3LmNwcAkyOSBOb3YgMjAwNSAyMjo1MTozOCAt
MDAwMApAQCAtMjk0LDcgKzI5NCw2IEBAIHZvaWQgS0hUTUxWaWV3OjpyZXNldFNjcm9sbEJhcnMo
KQogCiB2b2lkIEtIVE1MVmlldzo6aW5pdCgpCiB7Ci0KICAgICBzZXRGb2N1c1BvbGljeShRV2lk
Z2V0OjpTdHJvbmdGb2N1cyk7CiAgICAgdmlld3BvcnQoKS0+c2V0Rm9jdXNQb2xpY3koIFFXaWRn
ZXQ6OldoZWVsRm9jdXMgKTsKICAgICB2aWV3cG9ydCgpLT5zZXRGb2N1c1Byb3h5KHRoaXMpOwpA
QCAtMzA1LDEzICszMDQsMTAgQEAgdm9pZCBLSFRNTFZpZXc6OmluaXQoKQogICAgIF9oZWlnaHQg
PSAwOwogCiAgICAgc2V0QWNjZXB0RHJvcHModHJ1ZSk7Ci0gICAgCiB9CiAKIHZvaWQgS0hUTUxW
aWV3OjpjbGVhcigpCiB7Ci0vLyAgICB2aWV3cG9ydCgpLT5lcmFzZSgpOwotCiAgICAgc2V0U3Rh
dGljQmFja2dyb3VuZChmYWxzZSk7CiAgICAgCiAgICAgbV9wYXJ0LT5jbGVhclNlbGVjdGlvbigp
OwpAQCAtMzU5LDcgKzM1NSw2IEBAIHZvaWQgS0hUTUxWaWV3Ojppbml0U2Nyb2xsQmFycygpCiAg
ICAgc2V0U2Nyb2xsQmFyc01vZGUoaFNjcm9sbEJhck1vZGUoKSk7CiB9CiAKLQogdm9pZCBLSFRN
TFZpZXc6OnNldE1hcmdpbldpZHRoKGludCB3KQogewogICAgIC8vIG1ha2UgaXQgdXBkYXRlIHRo
ZSByZW5kZXJpbmcgYXJlYSB3aGVuIHNldApAQCAtMzcyLDcgKzM2Nyw2IEBAIHZvaWQgS0hUTUxW
aWV3OjpzZXRNYXJnaW5IZWlnaHQoaW50IGgpCiAgICAgX21hcmdpbkhlaWdodCA9IGg7CiB9CiAK
LQogdm9pZCBLSFRNTFZpZXc6OmFkanVzdFZpZXdTaXplKCkKIHsKICAgICBpZiggbV9wYXJ0LT54
bWxEb2NJbXBsKCkgKSB7CkBAIC02NTIsOSArNjQ2LDYgQEAgdm9pZCBLSFRNTFZpZXc6OnZpZXdw
b3J0TW91c2VQcmVzc0V2ZW50KAogICAgICAgICBpZiAoS1dRKG1fcGFydCktPmxhc3RFdmVudElz
TW91c2VVcCgpKSB7CiAgICAgICAgICAgICBkLT5tb3VzZVByZXNzZWQgPSBmYWxzZTsKICAgICAg
ICAgfQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0JZW1pdCBtX3BhcnQtPm5vZGVBY3Rp
dmF0ZWQobWV2LmlubmVyTm9kZS5nZXQoKSk7Ci0jZW5kaWYKICAgICB9CiB9CiAKQEAgLTEwNDIs
OCArMTAzMyw2IEBAIGJvb2wgS0hUTUxWaWV3OjpzY3JvbGxUbyhjb25zdCBRUmVjdCAmYm8KIAog
ICAgIHNjcm9sbEJ5KHNjcm9sbFgsIHNjcm9sbFkpOwogCi0KLQogICAgIC8vIGdlbmVyYXRlIGFi
cyhzY3JvbGwuKQogICAgIGlmIChzY3JvbGxYPDApCiAgICAgICAgIHNjcm9sbFg9LXNjcm9sbFg7
CkBAIC0xMDU1LDcgKzEwNDQsNiBAQCBib29sIEtIVE1MVmlldzo6c2Nyb2xsVG8oY29uc3QgUVJl
Y3QgJmJvCiAgICAgaWYgKCAoc2Nyb2xsWCE9bWF4eCkgJiYgKHNjcm9sbFkhPW1heHkpICkKIAly
ZXR1cm4gdHJ1ZTsKICAgICBlbHNlIHJldHVybiBmYWxzZTsKLQogfQogCiB2b2lkIEtIVE1MVmll
dzo6Zm9jdXNOZXh0UHJldk5vZGUoYm9vbCBuZXh0KQpAQCAtMTEzNiw5ICsxMTI0LDYgQEAgdm9p
ZCBLSFRNTFZpZXc6OmZvY3VzTmV4dFByZXZOb2RlKGJvb2wgbgogICAgIH0KICAgICAvLyBTZXQg
Zm9jdXMgbm9kZSBvbiB0aGUgZG9jdW1lbnQKICAgICBtX3BhcnQtPnhtbERvY0ltcGwoKS0+c2V0
Rm9jdXNOb2RlKG5ld0ZvY3VzTm9kZSk7Ci0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLSAg
ICBlbWl0IG1fcGFydC0+bm9kZUFjdGl2YXRlZChuZXdGb2N1c05vZGUpOwotI2VuZGlmCiAKIH0K
IApAQCAtMTE1Niw3ICsxMTQxLDYgQEAgUVN0cmluZyBLSFRNTFZpZXc6Om1lZGlhVHlwZSgpIGNv
bnN0CiAgICAgcmV0dXJuIG1fbWVkaXVtOwogfQogCi0KIHZvaWQgS0hUTUxWaWV3Ojp1c2VTbG93
UmVwYWludHMoKQogewogICAgIGtkRGVidWcoMCkgPDwgInNsb3cgcmVwYWludHMgcmVxdWVzdGVk
IiA8PCBlbmRsOwpAQCAtMTIwMSw3ICsxMTg1LDYgQEAgdm9pZCBLSFRNTFZpZXc6OnJlc3RvcmVT
Y3JvbGxCYXIgKCApCiAgICAgc3VwcHJlc3NTY3JvbGxCYXJzKGZhbHNlKTsKIH0KIAotCiBib29s
IEtIVE1MVmlldzo6ZGlzcGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRU
eXBlLCBET006Ok5vZGVJbXBsICp0YXJnZXROb2RlLCBib29sIGNhbmNlbGFibGUsCiAJCQkJICAg
aW50IGRldGFpbCxRTW91c2VFdmVudCAqX21vdXNlLCBib29sIHNldFVuZGVyLAogCQkJCSAgIGlu
dCBtb3VzZUV2ZW50VHlwZSkKQEAgLTEyNzMsNyArMTI1Niw2IEBAIHZvaWQgS0hUTUxWaWV3Ojpz
ZXRJZ25vcmVXaGVlbEV2ZW50cyggYm8KIH0KIAogI2lmbmRlZiBRVF9OT19XSEVFTEVWRU5UCi0K
IHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydFdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqIGUpCiB7CiAg
ICAgRG9jdW1lbnRJbXBsICpkb2MgPSBtX3BhcnQtPnhtbERvY0ltcGwoKTsKQEAgLTEyOTgsMTIg
KzEyODAsOSBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRXaGVlbEV2ZW50KFFXaGVlCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KIH0KLQogI2VuZGlmCiAKLQogdm9pZCBLSFRN
TFZpZXc6OmZvY3VzSW5FdmVudCggUUZvY3VzRXZlbnQgKmUgKQogewogICAgIG1fcGFydC0+c2V0
Q2FyZXRWaXNpYmxlKCk7CkBAIC0xMzk3LDQgKzEzNzYsMyBAQCB2b2lkIEtIVE1MVmlldzo6c2V0
VHJhbnNwYXJlbnQoYm9vbCBpc1RyCiB7CiAgICAgZC0+aXNUcmFuc3BhcmVudCA9IGlzVHJhbnNw
YXJlbnQ7CiB9Ci0KSW5kZXg6IGtodG1sL2todG1sdmlldy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sdmlldy5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQ5CmRpZmYgLXAgLXUgLXIxLjQ5IGtodG1sL2todG1sdmlldy5oCi0tLSBraHRtbC9raHRt
bHZpZXcuaAkyMSBOb3YgMjAwNSAwMToxOTo0OSAtMDAwMAkxLjQ5CisrKyBraHRtbC9raHRtbHZp
ZXcuaAkyOSBOb3YgMjAwNSAyMjo1MTozOCAtMDAwMApAQCAtMjIxLDcgKzIyMSw2IEBAIHByb3Rl
Y3RlZCBzbG90czoKICAgICB2b2lkIHNsb3RTY3JvbGxCYXJNb3ZlZCgpOwogCiBwcml2YXRlOgot
CiAgICAgdm9pZCByZXNldEN1cnNvcigpOwogICAgIHZvaWQgaW52YWxpZGF0ZUNsaWNrKCk7CiAK
QEAgLTI3NCw3ICsyNzMsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzS0hUTUxW
aWV3KCkgY29uc3Q7CiAKLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIG1lbWJlciB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBfcmVmQ291bnQ7CiAKQEAgLTI5MSw0ICsyODksMyBA
QCBwcml2YXRlOgogfTsKIAogI2VuZGlmCi0KSW5kZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNl
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC1wIC11IC1yMS4yMyBraHRtbC9j
c3MvY3NzX2Jhc2UuY3BwCi0tLSBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCTI2IE9jdCAyMDA1IDE5
OjQ0OjAzIC0wMDAwCTEuMjMKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAJMjkgTm92IDIwMDUg
MjI6NTE6MzggLTAwMDAKQEAgLTIzOSw3ICsyMzksNiBAQCB2b2lkIENTU1NlbGVjdG9yOjpleHRy
YWN0UHNldWRvVHlwZSgpIGNvCiAgICAgdmFsdWUgPSBudWxsQXRvbTsKIH0KIAotCiBib29sIENT
U1NlbGVjdG9yOjpvcGVyYXRvciA9PSAoIGNvbnN0IENTU1NlbGVjdG9yICZvdGhlciApCiB7CiAg
ICAgY29uc3QgQ1NTU2VsZWN0b3IgKnNlbDEgPSB0aGlzOwpJbmRleDoga2h0bWwvY3NzL2Nzc19i
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nz
c19iYXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtcCAtdSAtcjEuMjEga2h0
bWwvY3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTI2IE9jdCAyMDA1IDE5
OjQ0OjA0IC0wMDAwCTEuMjEKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTI5IE5vdiAyMDA1IDIy
OjUxOjM5IC0wMDAwCkBAIC0yNSw3ICsyNSw2IEBACiAjZGVmaW5lIENTU19CQVNFX0gKIAogI2lu
Y2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCi0jaW5jbHVkZSAiZG9tL2RvbV9taXNjLmgiCiAjaW5j
bHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgImRvbV9xbmFtZS5oIgogI2luY2x1
ZGUgIm1pc2Mvc2hhcmVkLmgiCkluZGV4OiBraHRtbC9kb20vY3NzX3J1bGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vY3NzX3J1bGUuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjgga2h0bWwvZG9tL2Nzc19ydWxlLmgK
LS0tIGtodG1sL2RvbS9jc3NfcnVsZS5oCTE2IFNlcCAyMDA1IDIyOjQyOjAzIC0wMDAwCTEuOAor
Kysga2h0bWwvZG9tL2Nzc19ydWxlLmgJMjkgTm92IDIwMDUgMjI6NTE6MzkgLTAwMDAKQEAgLTI3
LDIxICsyNyw5IEBACiAjaWZuZGVmIF9DU1NfY3NzX3J1bGVfaF8KICNkZWZpbmUgX0NTU19jc3Nf
cnVsZV9oXwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotI2luY2x1ZGUgPGRvbS9k
b21fc3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZG9tL2Nzc19zdHlsZXNoZWV0Lmg+Ci0jaW5jbHVkZSA8
ZG9tL2Nzc192YWx1ZS5oPgotCi0jZW5kaWYKIAogbmFtZXNwYWNlIERPTSB7CiAKLSNpZiAhS0hU
TUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1jbGFzcyBDU1NSdWxlSW1wbDsKLQotI2VuZGlmCiAKIC8q
KgogICogVGhlIDxjb2RlPiBDU1NSdWxlIDwvY29kZT4gaW50ZXJmYWNlIGlzIHRoZSBhYnN0cmFj
dCBiYXNlIGludGVyZmFjZQpAQCAtNTksMjUgKzQ3LDkgQEAgY2xhc3MgQ1NTUnVsZUltcGw7CiAg
Ki8KIGNsYXNzIENTU1J1bGUKIHsKLQotcHVibGljOgotCi0jaWYgIUtIVE1MX05PX0NQTFVTUExV
U19ET00KLQotICAgIENTU1J1bGUoKTsKLSAgICBDU1NSdWxlKGNvbnN0IENTU1J1bGUgJm90aGVy
KTsKLSAgICBDU1NSdWxlKENTU1J1bGVJbXBsICppbXBsKTsKIHB1YmxpYzoKLQotICAgIENTU1J1
bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NSdWxlICZvdGhlcik7Ci0KLSAgICB+Q1NTUnVsZSgp
OwotCi0jZW5kaWYKLQogICAgIC8qKgogICAgICAqIEFuIGludGVnZXIgaW5kaWNhdGluZyB3aGlj
aCB0eXBlIG9mIHJ1bGUgdGhpcyBpcy4KLSAgICAgKgogICAgICAqLwogICAgIGVudW0gUnVsZVR5
cGUgewogICAgICAgICBVTktOT1dOX1JVTEUgPSAwLApAQCAtODksNDY5ICs2MSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgUEFHRV9SVUxFID0gNiwKICAgICAgICAgUVVJUktTX1JVTEUgPSAxMDAgLy8g
Tm90IHBhcnQgb2YgdGhlIG9mZmljaWFsIERPTQogICAgIH07Ci0KLSNpZiAhS0hUTUxfTk9fQ1BM
VVNQTFVTX0RPTQotCi0gICAgLyoqCi0gICAgICogVGhlIHR5cGUgb2YgdGhlIHJ1bGUsIGFzIGRl
ZmluZWQgYWJvdmUuIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0Ci0gICAgICogYmluZGluZy1zcGVj
aWZpYyBjYXN0aW5nIG1ldGhvZHMgY2FuIGJlIHVzZWQgdG8gY2FzdCBkb3duIGZyb20KLSAgICAg
KiBhbiBpbnN0YW5jZSBvZiB0aGUgPGNvZGU+IENTU1J1bGUgPC9jb2RlPiBpbnRlcmZhY2UgdG8g
dGhlCi0gICAgICogc3BlY2lmaWMgZGVyaXZlZCBpbnRlcmZhY2UgaW1wbGllZCBieSB0aGUgPGNv
ZGU+IHR5cGUgPC9jb2RlPiAuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCB0
eXBlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgcGFyc2FibGUgdGV4dHVhbCByZXBy
ZXNlbnRhdGlvbiBvZiB0aGUgcnVsZS4gVGhpcyByZWZsZWN0cwotICAgICAqIHRoZSBjdXJyZW50
IHN0YXRlIG9mIHRoZSBydWxlIGFuZCBub3QgaXRzIGluaXRpYWwgdmFsdWUuCi0gICAgICoKLSAg
ICAgKi8KLSAgICBET01TdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
c2VlIEByZWYgY3NzVGV4dAotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICoK
LSAgICAgKiAgSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiBSYWlzZWQgaWYgdGhlIHJ1bGUgY2Fubm90
IGJlIGluc2VydGVkCi0gICAgICogYXQgdGhpcyBwb2ludCBpbiB0aGUgc3R5bGUgc2hlZXQuCi0g
ICAgICoKLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhp
cyBzdHlsZSBzaGVldCBpcwotICAgICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAgICogQGV4Y2Vw
dGlvbiBDU1NFeGNlcHRpb24KLSAgICAgKiBTWU5UQVhfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNp
ZmllZCBDU1Mgc3RyaW5nIHZhbHVlIGhhcyBhCi0gICAgICogc3ludGF4IGVycm9yIGFuZCBpcyB1
bnBhcnNhYmxlLgotICAgICAqCi0gICAgICogSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOiBSYWlz
ZWQgaWYgdGhlIHNwZWNpZmllZCBDU1Mgc3RyaW5nIHZhbHVlCi0gICAgICogcmVwcmVzZW50cyBh
IGRpZmZlcmVudCB0eXBlIG9mIHJ1bGUgdGhhbiB0aGUgY3VycmVudCBvbmUuCi0gICAgICovCi0g
ICAgdm9pZCBzZXRDc3NUZXh0KCBjb25zdCBET01TdHJpbmcgJiApOwotCi0gICAgLyoqCi0gICAg
ICogVGhlIHN0eWxlIHNoZWV0IHRoYXQgY29udGFpbnMgdGhpcyBydWxlLgotICAgICAqCi0gICAg
ICovCi0gICAgQ1NTU3R5bGVTaGVldCBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3Q7Ci0KLSAgICAv
KioKLSAgICAgKiBJZiB0aGlzIHJ1bGUgaXMgY29udGFpbmVkIGluc2lkZSBhbm90aGVyIHJ1bGUg
KGUuZy4gYSBzdHlsZQotICAgICAqIHJ1bGUgaW5zaWRlIGFuIEBtZWRpYSBibG9jayksIHRoaXMg
aXMgdGhlIGNvbnRhaW5pbmcgcnVsZS4gSWYKLSAgICAgKiB0aGlzIHJ1bGUgaXMgbm90IG5lc3Rl
ZCBpbnNpZGUgYW55IG90aGVyIHJ1bGVzLCB0aGlzIHJldHVybnMKLSAgICAgKiA8Y29kZT4gbnVs
bCA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqLwotICAgIENTU1J1bGUgcGFyZW50UnVsZSgpIGNv
bnN0OwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhl
IERPTQotICAgICAqLwotICAgIENTU1J1bGVJbXBsICpoYW5kbGUoKSBjb25zdDsKLSAgICBib29s
IGlzTnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ1NTUnVsZUltcGwgKmltcGw7Ci0K
LSAgICB2b2lkIGFzc2lnbk90aGVyKCBjb25zdCBDU1NSdWxlICZvdGhlciwgUnVsZVR5cGUgdGhp
c1R5cGUgKTsKLQotI2VuZGlmCi0KLX07Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQot
Ci1jbGFzcyBDU1NDaGFyc2V0UnVsZUltcGw7Ci0KLS8qKgotICogVGhlIDxjb2RlPiBDU1NDaGFy
c2V0UnVsZSA8L2NvZGU+IGludGVyZmFjZSBhIDxhIGhyZWY9IiI+IEBjaGFyc2V0Ci0gKiBydWxl
IDwvYT4gaW4gYSBDU1Mgc3R5bGUgc2hlZXQuIEEgPGNvZGU+IEBjaGFyc2V0IDwvY29kZT4gcnVs
ZSBjYW4KLSAqIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBlbmNvZGluZyBvZiB0aGUgc3R5bGUgc2hl
ZXQuCi0gKgotICovCi1jbGFzcyBDU1NDaGFyc2V0UnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17Ci1w
dWJsaWM6Ci0gICAgQ1NTQ2hhcnNldFJ1bGUoKTsKLSAgICBDU1NDaGFyc2V0UnVsZShjb25zdCBD
U1NDaGFyc2V0UnVsZSAmb3RoZXIpOwotICAgIENTU0NoYXJzZXRSdWxlKGNvbnN0IENTU1J1bGUg
Jm90aGVyKTsKLSAgICBDU1NDaGFyc2V0UnVsZShDU1NDaGFyc2V0UnVsZUltcGwgKmltcGwpOwot
cHVibGljOgotCi0gICAgQ1NTQ2hhcnNldFJ1bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NDaGFy
c2V0UnVsZSAmb3RoZXIpOwotICAgIENTU0NoYXJzZXRSdWxlICYgb3BlcmF0b3IgPSAoY29uc3Qg
Q1NTUnVsZSAmb3RoZXIpOwotCi0gICAgfkNTU0NoYXJzZXRSdWxlKCk7Ci0KLSAgICAvKioKLSAg
ICAgKiBUaGUgZW5jb2RpbmcgaW5mb3JtYXRpb24gdXNlZCBpbiB0aGlzIDxjb2RlPiBAY2hhcnNl
dCA8L2NvZGU+Ci0gICAgICogcnVsZS4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBl
bmNvZGluZygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogc2VlIEByZWYgZW5jb2RpbmcKLSAg
ICAgKiBAZXhjZXB0aW9uIENTU0V4Y2VwdGlvbgotICAgICAqIFNZTlRBWF9FUlI6IFJhaXNlZCBp
ZiB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIHZhbHVlIGhhcyBhIHN5bnRheAotICAgICAqIGVycm9y
IGFuZCBpcyB1bnBhcnNhYmxlLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRp
b24KLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBl
bmNvZGluZyBydWxlIGlzCi0gICAgICogcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKi8KLSAgICB2
b2lkIHNldEVuY29kaW5nKCBjb25zdCBET01TdHJpbmcgJiApOwotfTsKLQotCi1jbGFzcyBDU1NG
b250RmFjZVJ1bGVJbXBsOwotLyoqCi0gKiBUaGUgPGNvZGU+IENTU0ZvbnRGYWNlUnVsZSA8L2Nv
ZGU+IGludGVyZmFjZSByZXByZXNlbnRzIGEgPGEKLSAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3Jn
L1RSL1JFQy1DU1MyL2ZvbnRzLmh0bWwjZm9udC1kZXNjcmlwdGlvbnMiPgotICogQGZvbnQtZmFj
ZSBydWxlIDwvYT4gaW4gYSBDU1Mgc3R5bGUgc2hlZXQuIFRoZSA8Y29kZT4gQGZvbnQtZmFjZQot
ICogPC9jb2RlPiBydWxlIGlzIHVzZWQgdG8gaG9sZCBhIHNldCBvZiBmb250IGRlc2NyaXB0aW9u
cy4KLSAqCi0gKi8KLWNsYXNzIENTU0ZvbnRGYWNlUnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17Ci1w
dWJsaWM6Ci0gICAgQ1NTRm9udEZhY2VSdWxlKCk7Ci0gICAgQ1NTRm9udEZhY2VSdWxlKGNvbnN0
IENTU0ZvbnRGYWNlUnVsZSAmb3RoZXIpOwotICAgIENTU0ZvbnRGYWNlUnVsZShjb25zdCBDU1NS
dWxlICZvdGhlcik7Ci0gICAgQ1NTRm9udEZhY2VSdWxlKENTU0ZvbnRGYWNlUnVsZUltcGwgKmlt
cGwpOwotcHVibGljOgotCi0gICAgQ1NTRm9udEZhY2VSdWxlICYgb3BlcmF0b3IgPSAoY29uc3Qg
Q1NTRm9udEZhY2VSdWxlICZvdGhlcik7Ci0gICAgQ1NTRm9udEZhY2VSdWxlICYgb3BlcmF0b3Ig
PSAoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotCi0gICAgfkNTU0ZvbnRGYWNlUnVsZSgpOwotCi0g
ICAgLyoqCi0gICAgICogVGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1My
L3N5bmRhdGEuaHRtbCNxOCI+Ci0gICAgICogZGVjbGFyYXRpb24tYmxvY2sgPC9hPiBvZiB0aGlz
IHJ1bGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uIHN0eWxlKCkg
Y29uc3Q7Ci19OwotCi1jbGFzcyBDU1NJbXBvcnRSdWxlSW1wbDsKLS8qKgotICogVGhlIDxjb2Rl
PiBDU1NJbXBvcnRSdWxlIDwvY29kZT4gaW50ZXJmYWNlIHJlcHJlc2VudHMgYSA8YQotICogaHJl
Zj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvY2FzY2FkZS5odG1sI2F0LWltcG9ydCI+
Ci0gKiBAaW1wb3J0IHJ1bGUgPC9hPiB3aXRoaW4gYSBDU1Mgc3R5bGUgc2hlZXQuIFRoZSA8Y29k
ZT4gQGltcG9ydAotICogPC9jb2RlPiBydWxlIGlzIHVzZWQgdG8gaW1wb3J0IHN0eWxlIHJ1bGVz
IGZyb20gb3RoZXIgc3R5bGUgc2hlZXRzLgotICoKLSAqLwotY2xhc3MgQ1NTSW1wb3J0UnVsZSA6
IHB1YmxpYyBDU1NSdWxlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTSW1wb3J0UnVsZSgpOwotICAgIENT
U0ltcG9ydFJ1bGUoY29uc3QgQ1NTSW1wb3J0UnVsZSAmb3RoZXIpOwotICAgIENTU0ltcG9ydFJ1
bGUoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotICAgIENTU0ltcG9ydFJ1bGUoQ1NTSW1wb3J0UnVs
ZUltcGwgKmltcGwpOwotcHVibGljOgotCi0gICAgQ1NTSW1wb3J0UnVsZSAmIG9wZXJhdG9yID0g
KGNvbnN0IENTU0ltcG9ydFJ1bGUgJm90aGVyKTsKLSAgICBDU1NJbXBvcnRSdWxlICYgb3BlcmF0
b3IgPSAoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotCi0gICAgfkNTU0ltcG9ydFJ1bGUoKTsKLQot
ICAgIC8qKgotICAgICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgc3R5bGUgc2hlZXQgdG8gYmUgaW1w
b3J0ZWQuIFRoZSBhdHRyaWJ1dGUKLSAgICAgKiB3aWxsIG5vdCBjb250YWluIHRoZSA8Y29kZT4g
InVybCguLi4pIiA8L2NvZGU+IHNwZWNpZmllciBhcm91bmQKLSAgICAgKiB0aGUgVVJJLgotICAg
ICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGhyZWYoKSBjb25zdDsKLQotICAgIC8qKgotICAg
ICAqIEEgbGlzdCBvZiBtZWRpYSB0eXBlcyBmb3Igd2hpY2ggdGhpcyBzdHlsZSBzaGVldCBtYXkg
YmUgdXNlZC4KLSAgICAgKgotICAgICAqLwotICAgIE1lZGlhTGlzdCBtZWRpYSgpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogVGhlIHN0eWxlIHNoZWV0IHJlZmVycmVkIHRvIGJ5IHRoaXMgcnVs
ZSwgaWYgaXQgaGFzIGJlZW4KLSAgICAgKiBsb2FkZWQuIFRoZSB2YWx1ZSBvZiB0aGlzIGF0dHJp
YnV0ZSBpcyBudWxsIGlmIHRoZSBzdHlsZSBzaGVldAotICAgICAqIGhhcyBub3QgeWV0IGJlZW4g
bG9hZGVkIG9yIGlmIGl0IHdpbGwgbm90IGJlIGxvYWRlZCAoZS5nLiBpZgotICAgICAqIHRoZSBz
dHlsZSBzaGVldCBpcyBmb3IgYSBtZWRpYSB0eXBlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVzZXIK
LSAgICAgKiBhZ2VudCkuCi0gICAgICoKLSAgICAgKi8KLSAgICBDU1NTdHlsZVNoZWV0IHN0eWxl
U2hlZXQoKSBjb25zdDsKLX07Ci0KLWNsYXNzIENTU01lZGlhUnVsZUltcGw7Ci0vKioKLSAqIFRo
ZSA8Y29kZT4gQ1NTTWVkaWFSdWxlIDwvY29kZT4gaW50ZXJmYWNlIHJlcHJlc2VudHMgYSA8YQot
ICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvbWVkaWEuaHRtbCNhdC1tZWRp
YS1ydWxlIj4KLSAqIEBtZWRpYSBydWxlIDwvYT4gaW4gYSBDU1Mgc3R5bGUgc2hlZXQuIEEgPGNv
ZGU+IEBtZWRpYSA8L2NvZGU+IHJ1bGUKLSAqIGNhbiBiZSB1c2VkIHRvIGRlbGltaXQgc3R5bGUg
cnVsZXMgZm9yIHNwZWNpZmljIG1lZGlhIHR5cGVzLgotICoKLSAqLwotY2xhc3MgQ1NTTWVkaWFS
dWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NNZWRpYVJ1bGUoKTsKLSAg
ICBDU1NNZWRpYVJ1bGUoY29uc3QgQ1NTTWVkaWFSdWxlICZvdGhlcik7Ci0gICAgQ1NTTWVkaWFS
dWxlKGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLSAgICBDU1NNZWRpYVJ1bGUoQ1NTTWVkaWFSdWxl
SW1wbCAqaW1wbCk7Ci1wdWJsaWM6Ci0KLSAgICBDU1NNZWRpYVJ1bGUgJiBvcGVyYXRvciA9IChj
b25zdCBDU1NNZWRpYVJ1bGUgJm90aGVyKTsKLSAgICBDU1NNZWRpYVJ1bGUgJiBvcGVyYXRvciA9
IChjb25zdCBDU1NSdWxlICZvdGhlcik7Ci0KLSAgICB+Q1NTTWVkaWFSdWxlKCk7Ci0KLSAgICAv
KioKLSAgICAgKiBBIGxpc3Qgb2YgPGEKLSAgICAgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9U
Ui9SRUMtQ1NTMi9tZWRpYS5odG1sI21lZGlhLXR5cGVzIj4KLSAgICAgKiBtZWRpYSB0eXBlcyA8
L2E+IGZvciB0aGlzIHJ1bGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBNZWRpYUxpc3QgbWVkaWEo
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEEgbGlzdCBvZiBhbGwgQ1NTIHJ1bGVzIGNvbnRh
aW5lZCB3aXRoaW4gdGhlIG1lZGlhIGJsb2NrLgotICAgICAqCi0gICAgICovCi0gICAgQ1NTUnVs
ZUxpc3QgY3NzUnVsZXMoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5zZXJ0
IGEgbmV3IHJ1bGUgaW50byB0aGUgbWVkaWEgYmxvY2suCi0gICAgICoKLSAgICAgKiBAcGFyYW0g
cnVsZSBUaGUgcGFyc2FibGUgdGV4dCByZXByZXNlbnRpbmcgdGhlIHJ1bGUuIEZvciBydWxlCi0g
ICAgICogc2V0cyB0aGlzIGNvbnRhaW5zIGJvdGggdGhlIHNlbGVjdG9yIGFuZCB0aGUgc3R5bGUg
ZGVjbGFyYXRpb24uCi0gICAgICogRm9yIGF0LXJ1bGVzLCB0aGlzIHNwZWNpZmllcyBib3RoIHRo
ZSBhdC1pZGVudGlmaWVyIGFuZCB0aGUKLSAgICAgKiBydWxlIGNvbnRlbnQuCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IHdpdGhpbiB0aGUgbWVkaWEgYmxvY2sncyBydWxl
IGNvbGxlY3Rpb24KLSAgICAgKiBvZiB0aGUgcnVsZSBiZWZvcmUgd2hpY2ggdG8gaW5zZXJ0IHRo
ZSBzcGVjaWZpZWQgcnVsZS4gSWYgdGhlCi0gICAgICogc3BlY2lmaWVkIGluZGV4IGlzIGVxdWFs
IHRvIHRoZSBsZW5ndGggb2YgdGhlIG1lZGlhIGJsb2NrcydzCi0gICAgICogcnVsZSBjb2xsZWN0
aW9uLCB0aGUgcnVsZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIG1lZGlhCi0gICAg
ICogYmxvY2suCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBpbmRleCB3aXRoaW4gdGhlIG1l
ZGlhIGJsb2NrJ3MgcnVsZSBjb2xsZWN0aW9uIG9mCi0gICAgICogdGhlIG5ld2x5IGluc2VydGVk
IHJ1bGUuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIEhJ
RVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2VkIGlmIHRoZSBydWxlIGNhbm5vdCBiZSBpbnNlcnRl
ZCBhdAotICAgICAqIHRoZSBzcGVjaWZpZWQgaW5kZXguIGUuZy4gaWYgYW4gPGNvZGU+IEBpbXBv
cnQgPC9jb2RlPiBydWxlIGlzCi0gICAgICogaW5zZXJ0ZWQgYWZ0ZXIgYSBzdGFuZGFyZCBydWxl
IHNldCBvciBvdGhlciBhdC1ydWxlLgotICAgICAqCi0gICAgICogIElOREVYX1NJWkVfRVJSOiBS
YWlzZWQgaWYgdGhlIHNwZWNpZmllZCBpbmRleCBpcyBub3QgYSB2YWxpZAotICAgICAqIGluc2Vy
dGlvbiBwb2ludC4KLSAgICAgKgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6
IFJhaXNlZCBpZiB0aGlzIG1lZGlhIHJ1bGUgaXMKLSAgICAgKiByZWFkb25seS4KLSAgICAgKgot
ICAgICAqIEBleGNlcHRpb24gQ1NTRXhjZXB0aW9uCi0gICAgICogIFNZTlRBWF9FUlI6IFJhaXNl
ZCBpZiB0aGUgc3BlY2lmaWVkIHJ1bGUgaGFzIGEgc3ludGF4IGVycm9yCi0gICAgICogYW5kIGlz
IHVucGFyc2FibGUuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBpbnNlcnRSdWxlICgg
Y29uc3QgRE9NU3RyaW5nICZydWxlLCB1bnNpZ25lZCBpbmRleCApOwotCi0gICAgLyoqCi0gICAg
ICogVXNlZCB0byBkZWxldGUgYSBydWxlIGZyb20gdGhlIG1lZGlhIGJsb2NrLgotICAgICAqCi0g
ICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB3aXRoaW4gdGhlIG1lZGlhIGJsb2NrJ3MgcnVs
ZSBjb2xsZWN0aW9uCi0gICAgICogb2YgdGhlIHJ1bGUgdG8gcmVtb3ZlLgotICAgICAqCi0gICAg
ICogQHJldHVybgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAg
KiBJTkRFWF9TSVpFX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgaW5kZXggZG9lcyBub3QK
LSAgICAgKiBjb3JyZXNwb25kIHRvIGEgcnVsZSBpbiB0aGUgbWVkaWEgcnVsZSBsaXN0LgotICAg
ICAqCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMg
bWVkaWEgcnVsZSBpcwotICAgICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAgdm9p
ZCBkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKTsKLX07Ci0KLQotY2xhc3MgQ1NTUGFnZVJ1
bGVJbXBsOwotLyoqCi0gKiBUaGUgPGNvZGU+IENTU1BhZ2VSdWxlIDwvY29kZT4gaW50ZXJmYWNl
IHJlcHJlc2VudHMgYSA8YQotICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIv
cGFnZS5odG1sI3BhZ2UtYm94Ij4gQHBhZ2UgcnVsZQotICogPC9hPiB3aXRoaW4gYSBDU1Mgc3R5
bGUgc2hlZXQuIFRoZSA8Y29kZT4gQHBhZ2UgPC9jb2RlPiBydWxlIGlzCi0gKiB1c2VkIHRvIHNw
ZWNpZnkgdGhlIGRpbWVuc2lvbnMsIG9yaWVudGF0aW9uLCBtYXJnaW5zLCBldGMuIG9mIGEKLSAq
IHBhZ2UgYm94IGZvciBwYWdlZCBtZWRpYS4KLSAqCi0gKi8KLWNsYXNzIENTU1BhZ2VSdWxlIDog
cHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NQYWdlUnVsZSgpOwotICAgIENTU1Bh
Z2VSdWxlKGNvbnN0IENTU1BhZ2VSdWxlICZvdGhlcik7Ci0gICAgQ1NTUGFnZVJ1bGUoY29uc3Qg
Q1NTUnVsZSAmb3RoZXIpOwotICAgIENTU1BhZ2VSdWxlKENTU1BhZ2VSdWxlSW1wbCAqaW1wbCk7
Ci1wdWJsaWM6Ci0KLSAgICBDU1NQYWdlUnVsZSAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1BhZ2VS
dWxlICZvdGhlcik7Ci0gICAgQ1NTUGFnZVJ1bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NSdWxl
ICZvdGhlcik7Ci0KLSAgICB+Q1NTUGFnZVJ1bGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBw
YXJzYWJsZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYWdlIHNlbGVjdG9yIGZvcgot
ICAgICAqIHRoZSBydWxlLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIHNlbGVjdG9y
VGV4dCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogc2VlIEByZWYgc2VsZWN0b3JUZXh0Ci0g
ICAgICogQGV4Y2VwdGlvbiBDU1NFeGNlcHRpb24KLSAgICAgKiBTWU5UQVhfRVJSOiBSYWlzZWQg
aWYgdGhlIHNwZWNpZmllZCBDU1Mgc3RyaW5nIHZhbHVlIGhhcyBhCi0gICAgICogc3ludGF4IGVy
cm9yIGFuZCBpcyB1bnBhcnNhYmxlLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNl
cHRpb24KLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhp
cyBzdHlsZSBzaGVldCBpcwotICAgICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAg
dm9pZCBzZXRTZWxlY3RvclRleHQoIGNvbnN0IERPTVN0cmluZyAmICk7Ci0KLSAgICAvKioKLSAg
ICAgKiBUaGUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvc3luZGF0YS5o
dG1sI3E4Ij4KLSAgICAgKiBkZWNsYXJhdGlvbi1ibG9jayA8L2E+IG9mIHRoaXMgcnVsZS4KLSAg
ICAgKgotICAgICAqLwotICAgIENTU1N0eWxlRGVjbGFyYXRpb24gc3R5bGUoKSBjb25zdDsKLX07
Ci0KLWNsYXNzIENTU1N0eWxlUnVsZUltcGw7Ci0vKioKLSAqIFRoZSA8Y29kZT4gQ1NTU3R5bGVS
dWxlIDwvY29kZT4gaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBzaW5nbGUgPGEKLSAqIGhyZWY9Imh0
dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL3N5bmRhdGEuaHRtbCNxOCI+IHJ1bGUgc2V0IDwv
YT4KLSAqIGluIGEgQ1NTIHN0eWxlIHNoZWV0LgotICoKLSAqLwotY2xhc3MgQ1NTU3R5bGVSdWxl
IDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NTdHlsZVJ1bGUoKTsKLSAgICBD
U1NTdHlsZVJ1bGUoY29uc3QgQ1NTU3R5bGVSdWxlICZvdGhlcik7Ci0gICAgQ1NTU3R5bGVSdWxl
KGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLSAgICBDU1NTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlSW1w
bCAqaW1wbCk7Ci1wdWJsaWM6Ci0KLSAgICBDU1NTdHlsZVJ1bGUgJiBvcGVyYXRvciA9IChjb25z
dCBDU1NTdHlsZVJ1bGUgJm90aGVyKTsKLSAgICBDU1NTdHlsZVJ1bGUgJiBvcGVyYXRvciA9IChj
b25zdCBDU1NSdWxlICZvdGhlcik7Ci0KLSAgICB+Q1NTU3R5bGVSdWxlKCk7Ci0KLSAgICAvKioK
LSAgICAgKiBUaGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgPGEKLSAgICAgKiBocmVm
PSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9zZWxlY3Rvci5odG1sIj4gc2VsZWN0b3IK
LSAgICAgKiA8L2E+IGZvciB0aGUgcnVsZSBzZXQuIFRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgaGF2
ZSBzdHJpcHBlZCBvdXQKLSAgICAgKiBpbnNpZ25pZmljYW50IHdoaXRlc3BhY2Ugd2hpbGUgcGFy
c2luZyB0aGUgc2VsZWN0b3IuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgc2VsZWN0
b3JUZXh0KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBzZWUgQHJlZiBzZWxlY3RvclRleHQK
LSAgICAgKiBAZXhjZXB0aW9uIENTU0V4Y2VwdGlvbgotICAgICAqIFNZTlRBWF9FUlI6IFJhaXNl
ZCBpZiB0aGUgc3BlY2lmaWVkIENTUyBzdHJpbmcgdmFsdWUgaGFzIGEKLSAgICAgKiBzeW50YXgg
ZXJyb3IgYW5kIGlzIHVucGFyc2FibGUuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4
Y2VwdGlvbgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0
aGlzIHN0eWxlIHNoZWV0IGlzCi0gICAgICogcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKi8KLSAg
ICB2b2lkIHNldFNlbGVjdG9yVGV4dCggY29uc3QgRE9NU3RyaW5nICYgKTsKLQotICAgIC8qKgot
ICAgICAqIFRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9zeW5kYXRh
Lmh0bWwjcTgiPgotICAgICAqIGRlY2xhcmF0aW9uLWJsb2NrIDwvYT4gb2YgdGhpcyBydWxlIHNl
dC4KLSAgICAgKgotICAgICAqLwotICAgIENTU1N0eWxlRGVjbGFyYXRpb24gc3R5bGUoKSBjb25z
dDsKLX07Ci0KLWNsYXNzIENTU1Vua25vd25SdWxlSW1wbDsKLS8qKgotICogVGhlIDxjb2RlPiBD
U1NVbmtvd25SdWxlIDwvY29kZT4gaW50ZXJmYWNlIHJlcHJlc2VudHMgYW4gYXQtcnVsZQotICog
bm90IHN1cHBvcnRlZCBieSB0aGlzIHVzZXIgYWdlbnQuCi0gKgotICovCi1jbGFzcyBDU1NVbmtu
b3duUnVsZSA6IHB1YmxpYyBDU1NSdWxlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTVW5rbm93blJ1bGUo
KTsKLSAgICBDU1NVbmtub3duUnVsZShjb25zdCBDU1NVbmtub3duUnVsZSAmb3RoZXIpOwotICAg
IENTU1Vua25vd25SdWxlKGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLSAgICBDU1NVbmtub3duUnVs
ZShDU1NVbmtub3duUnVsZUltcGwgKmltcGwpOwotcHVibGljOgotCi0gICAgQ1NTVW5rbm93blJ1
bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NVbmtub3duUnVsZSAmb3RoZXIpOwotICAgIENTU1Vu
a25vd25SdWxlICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotCi0gICAgfkNT
U1Vua25vd25SdWxlKCk7CiB9OwogCi0KLWNsYXNzIENTU1J1bGVMaXN0SW1wbDsKLWNsYXNzIFN0
eWxlTGlzdEltcGw7Ci0vKioKLSAqIFRoZSA8Y29kZT4gQ1NTUnVsZUxpc3QgPC9jb2RlPiBpbnRl
cmZhY2UgcHJvdmlkZXMgdGhlIGFic3RyYWN0aW9uCi0gKiBvZiBhbiBvcmRlcmVkIGNvbGxlY3Rp
b24gb2YgQ1NTIHJ1bGVzLgotICoKLSAqLwotY2xhc3MgQ1NTUnVsZUxpc3QKLXsKLXB1YmxpYzoK
LSAgICBDU1NSdWxlTGlzdCgpOwotICAgIENTU1J1bGVMaXN0KGNvbnN0IENTU1J1bGVMaXN0ICZv
dGhlcik7Ci0gICAgQ1NTUnVsZUxpc3QoQ1NTUnVsZUxpc3RJbXBsICppKTsKLSAgICBDU1NSdWxl
TGlzdChTdHlsZUxpc3RJbXBsICppKTsKLXB1YmxpYzoKLQotICAgIENTU1J1bGVMaXN0ICYgb3Bl
cmF0b3IgPSAoY29uc3QgQ1NTUnVsZUxpc3QgJm90aGVyKTsKLQotICAgIH5DU1NSdWxlTGlzdCgp
OwotCi0gICAgLyoqCi0gICAgICogVGhlIG51bWJlciBvZiA8Y29kZT4gQ1NTUnVsZSA8L2NvZGU+
IHMgaW4gdGhlIGxpc3QuIFRoZSByYW5nZQotICAgICAqIG9mIHZhbGlkIGNoaWxkIHJ1bGUgaW5k
aWNlcyBpcyA8Y29kZT4gMCA8L2NvZGU+IHRvIDxjb2RlPgotICAgICAqIGxlbmd0aC0xIDwvY29k
ZT4gaW5jbHVzaXZlLgotICAgICAqCi0gICAgICovCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIHJldHJpZXZlIGEgQ1NTIHJ1bGUgYnkgb3Jk
aW5hbCBpbmRleC4gVGhlIG9yZGVyIGluIHRoaXMKLSAgICAgKiBjb2xsZWN0aW9uIHJlcHJlc2Vu
dHMgdGhlIG9yZGVyIG9mIHRoZSBydWxlcyBpbiB0aGUgQ1NTIHN0eWxlCi0gICAgICogc2hlZXQu
Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggaW50byB0aGUgY29sbGVjdGlvbgot
ICAgICAqCi0gICAgICogQHJldHVybiBUaGUgc3R5bGUgcnVsZSBhdCB0aGUgPGNvZGU+IGluZGV4
IDwvY29kZT4gcG9zaXRpb24gaW4KLSAgICAgKiB0aGUgPGNvZGU+IENTU1J1bGVMaXN0IDwvY29k
ZT4gLCBvciA8Y29kZT4gbnVsbCA8L2NvZGU+IGlmIHRoYXQKLSAgICAgKiBpcyBub3QgYSB2YWxp
ZCBpbmRleC4KLSAgICAgKgotICAgICAqLwotICAgIENTU1J1bGUgaXRlbSAoIHVuc2lnbmVkIGlu
ZGV4ICk7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKiBub3QgcGFydCBvZiB0
aGUgRE9NCi0gICAgICovCi0gICAgQ1NTUnVsZUxpc3RJbXBsICpoYW5kbGUoKSBjb25zdDsKLSAg
ICBib29sIGlzTnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gd2UganVzdCBuZWVk
IGEgcG9pbnRlciB0byBhbiBpbXBsZW1lbnRhdGlvbiBoZXJlLgotICAgIENTU1J1bGVMaXN0SW1w
bCAqaW1wbDsKLX07Ci0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6
IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5oCi0tLSBr
aHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuaAkxNiBTZXAgMjAwNSAyMjo0MjowMyAtMDAwMAkxLjEw
CisrKyBraHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuaAkyOSBOb3YgMjAwNSAyMjo1MTozOSAtMDAw
MApAQCAtMjksMTc2ICsyOSwxNSBAQAogI2lmbmRlZiBfQ1NTX2Nzc19zdHlsZXNoZWV0X2hfCiAj
ZGVmaW5lIF9DU1NfY3NzX3N0eWxlc2hlZXRfaF8KIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNf
RE9NCi0KLSNpbmNsdWRlIDxkb20vZG9tX3N0cmluZy5oPgotI2luY2x1ZGUgPGRvbS9kb21fbm9k
ZS5oPgotI2luY2x1ZGUgPGRvbS9kb21fbWlzYy5oPgotCi0jZW5kaWYKLQogbmFtZXNwYWNlIERP
TSB7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1jbGFzcyBTdHlsZVNoZWV0SW1w
bDsKLWNsYXNzIE1lZGlhTGlzdDsKLWNsYXNzIE5vZGVJbXBsOwotY2xhc3MgRG9jdW1lbnRJbXBs
OwotCi0vKioKLSAqIFRoZSA8Y29kZT4gU3R5bGVTaGVldCA8L2NvZGU+IGludGVyZmFjZSBpcyB0
aGUgYWJzdHJhY3QgYmFzZQotICogaW50ZXJmYWNlIGZvciBhbnkgdHlwZSBvZiBzdHlsZSBzaGVl
dC4gSXQgcmVwcmVzZW50cyBhIHNpbmdsZSBzdHlsZQotICogc2hlZXQgYXNzb2NpYXRlZCB3aXRo
IGEgc3RydWN0dXJlZCBkb2N1bWVudC4gSW4gSFRNTCwgdGhlCi0gKiBTdHlsZVNoZWV0IGludGVy
ZmFjZSByZXByZXNlbnRzIGVpdGhlciBhbiBleHRlcm5hbCBzdHlsZSBzaGVldCwKLSAqIGluY2x1
ZGVkIHZpYSB0aGUgSFRNTCA8YQotICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0
bWw0MC9zdHJ1Y3QvbGlua3MuaHRtbCNoLTEyLjMiPgotICogTElOSyA8L2E+IGVsZW1lbnQsIG9y
IGFuIGlubGluZSA8YQotICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9w
cmVzZW50L3N0eWxlcy5odG1sI2gtMTQuMi4zIj4KLSAqIFNUWUxFIDwvYT4gZWxlbWVudC4gSW4g
WE1MLCB0aGlzIGludGVyZmFjZSByZXByZXNlbnRzIGFuIGV4dGVybmFsCi0gKiBzdHlsZSBzaGVl
dCwgaW5jbHVkZWQgdmlhIGEgPGEKLSAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbC1z
dHlsZXNoZWV0Ij4gc3R5bGUgc2hlZXQgcHJvY2Vzc2luZwotICogaW5zdHJ1Y3Rpb24gPC9hPiAu
Ci0gKgotICovCi1jbGFzcyBTdHlsZVNoZWV0Ci17Ci1wdWJsaWM6Ci0gICAgU3R5bGVTaGVldCgp
OwotICAgIFN0eWxlU2hlZXQoY29uc3QgU3R5bGVTaGVldCAmb3RoZXIpOwotICAgIFN0eWxlU2hl
ZXQoU3R5bGVTaGVldEltcGwgKmltcGwpOwotcHVibGljOgotCi0gICAgU3R5bGVTaGVldCAmIG9w
ZXJhdG9yID0gKGNvbnN0IFN0eWxlU2hlZXQgJm90aGVyKTsKLQotICAgIH5TdHlsZVNoZWV0KCk7
Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIHNwZWNpZmllcyB0aGUgc3R5bGUgc2hlZXQgbGFuZ3Vh
Z2UgZm9yIHRoaXMgc3R5bGUgc2hlZXQuCi0gICAgICogVGhlIHN0eWxlIHNoZWV0IGxhbmd1YWdl
IGlzIHNwZWNpZmllZCBhcyBhIGNvbnRlbnQgdHlwZSAoZS5nLgotICAgICAqICJ0ZXh0L2NzcyIp
LiBUaGUgY29udGVudCB0eXBlIGlzIG9mdGVuIHNwZWNpZmllZCBpbiB0aGUgPGNvZGU+Ci0gICAg
ICogb3duZXJOb2RlIDwvY29kZT4gLiBBIGxpc3Qgb2YgcmVnaXN0ZXJlZCBjb250ZW50IHR5cGVz
IGNhbiBiZQotICAgICAqIGZvdW5kIGF0IDxhCi0gICAgICogaHJlZj0iZnRwOi8vZnRwLmlzaS5l
ZHUvaW4tbm90ZXMvaWFuYS9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy8iPgotICAgICAqIGZ0cDov
L2Z0cC5pc2kuZWR1L2luLW5vdGVzL2lhbmEvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvIDwvYT4g
LgotICAgICAqIEFsc28gc2VlIHRoZSA8YQotICAgICAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3Jn
L1RSL1JFQy1odG1sNDAvc3RydWN0L2xpbmtzLmh0bWwjYWRlZi10eXBlLUEiPgotICAgICAqIHR5
cGUgYXR0cmlidXRlIGRlZmluaXRpb24gPC9hPiBmb3IgdGhlIDxjb2RlPiBMSU5LIDwvY29kZT4K
LSAgICAgKiBlbGVtZW50IGluIEhUTUwgNC4wLCBhbmQgdGhlIHR5cGUgcHNldWRvLWF0dHJpYnV0
ZSBmb3IgdGhlIFhNTAotICAgICAqIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbC1z
dHlsZXNoZWV0Ij4gc3R5bGUgc2hlZXQKLSAgICAgKiBwcm9jZXNzaW5nIGluc3RydWN0aW9uIDwv
YT4gLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKLQotICAg
IC8qKgotICAgICAqIDxjb2RlPiBmYWxzZSA8L2NvZGU+IGlmIHRoZSBzdHlsZSBzaGVldCBpcyBh
cHBsaWVkIHRvIHRoZQotICAgICAqIGRvY3VtZW50LiA8Y29kZT4gdHJ1ZSA8L2NvZGU+IGlmIGl0
IGlzIG5vdC4gTW9kaWZ5aW5nIHRoaXMKLSAgICAgKiBhdHRyaWJ1dGUgbWF5IGNhdXNlIGEgcmVy
ZXNvbHV0aW9uIG9mIHN0eWxlIGZvciB0aGUgZG9jdW1lbnQuCi0gICAgICoKLSAgICAgKi8KLSAg
ICBib29sIGRpc2FibGVkKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBzZWUgQHJlZiBkaXNh
YmxlZAotICAgICAqLwotICAgIHZvaWQgc2V0RGlzYWJsZWQoIGJvb2wgKTsKLQotICAgIC8qKgot
ICAgICAqIFRoZSBub2RlIHRoYXQgYXNzb2NpYXRlcyB0aGlzIHN0eWxlIHNoZWV0IHdpdGggdGhl
IGRvY3VtZW50LgotICAgICAqIEZvciBIVE1MLCB0aGlzIG1heSBiZSB0aGUgY29ycmVzcG9uZGlu
ZyA8Y29kZT4gTElOSyA8L2NvZGU+IG9yCi0gICAgICogPGNvZGU+IFNUWUxFIDwvY29kZT4gZWxl
bWVudC4gRm9yIFhNTCwgaXQgbWF5IGJlIHRoZSBsaW5raW5nCi0gICAgICogcHJvY2Vzc2luZyBp
bnN0cnVjdGlvbi4gRm9yIHN0eWxlIHNoZWV0cyB0aGF0IGFyZSBpbmNsdWRlZCBieQotICAgICAq
IG90aGVyIHN0eWxlIHNoZWV0cywgdGhpcyBhdHRyaWJ1dGUgaGFzIGEgdmFsdWUgb2YgbnVsbC4K
LSAgICAgKgotICAgICAqLwotICAgIE5vZGUgb3duZXJOb2RlKCkgY29uc3Q7Ci0KLSAgICAvKioK
LSAgICAgKiBGb3Igc3R5bGUgc2hlZXQgbGFuZ3VhZ2VzIHRoYXQgc3VwcG9ydCB0aGUgY29uY2Vw
dCBvZiBzdHlsZQotICAgICAqIHNoZWV0IGluY2x1c2lvbiwgdGhpcyBhdHRyaWJ1dGUgcmVwcmVz
ZW50cyB0aGUgaW5jbHVkaW5nIHN0eWxlCi0gICAgICogc2hlZXQsIGlmIG9uZSBleGlzdHMuIElm
IHRoZSBzdHlsZSBzaGVldCBpcyBhIHRvcC1sZXZlbCBzdHlsZQotICAgICAqIHNoZWV0LCBvciB0
aGUgc3R5bGUgc2hlZXQgbGFuZ3VhZ2UgZG9lcyBub3Qgc3VwcG9ydCBpbmNsdXNpb24sCi0gICAg
ICogdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgaXMgbnVsbC4KLSAgICAgKgotICAgICAqLwot
ICAgIFN0eWxlU2hlZXQgcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAg
ICogSWYgdGhlIHN0eWxlIHNoZWV0IGlzIGEgbGlua2VkIHN0eWxlIHNoZWV0LCB0aGUgdmFsdWUg
b2YgaXRzCi0gICAgICogYXR0cmlidXRlIGlzIGl0cyBsb2NhdGlvbi4gRm9yIGlubGluZSBzdHls
ZSBzaGVldHMsIHRoZSB2YWx1ZQotICAgICAqIG9mIHRoaXMgYXR0cmlidXRlIGlzIG51bGwuIFNl
ZSB0aGUgPGEKLSAgICAgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL3N0
cnVjdC9saW5rcy5odG1sI2FkZWYtaHJlZiI+Ci0gICAgICogaHJlZiBhdHRyaWJ1dGUgZGVmaW5p
dGlvbiA8L2E+IGZvciB0aGUgPGNvZGU+IExJTksgPC9jb2RlPgotICAgICAqIGVsZW1lbnQgaW4g
SFRNTCA0LjAsIGFuZCB0aGUgaHJlZiBwc2V1ZG8tYXR0cmlidXRlIGZvciB0aGUgWE1MCi0gICAg
ICogPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sLXN0eWxlc2hlZXQiPiBzdHlsZSBz
aGVldAotICAgICAqIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gPC9hPiAuCi0gICAgICoKLSAgICAg
Ki8KLSAgICBET01TdHJpbmcgaHJlZigpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVGhlIGFk
dmlzb3J5IHRpdGxlLiBUaGUgdGl0bGUgaXMgb2Z0ZW4gc3BlY2lmaWVkIGluIHRoZSA8Y29kZT4K
LSAgICAgKiBvd25lck5vZGUgPC9jb2RlPiAuIFNlZSB0aGUgPGEKLSAgICAgKiBocmVmPSJodHRw
Oi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL3N0cnVjdC9nbG9iYWwuaHRtbCNhZGVmLXRpdGxl
Ij4KLSAgICAgKiB0aXRsZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiA8L2E+IGZvciB0aGUgPGNvZGU+
IExJTksgPC9jb2RlPgotICAgICAqIGVsZW1lbnQgaW4gSFRNTCA0LjAsIGFuZCB0aGUgdGl0bGUg
cHNldWRvLWF0dHJpYnV0ZSBmb3IgdGhlIFhNTAotICAgICAqIDxhIGhyZWY9Imh0dHA6Ly93d3cu
dzMub3JnL1RSL3htbC1zdHlsZXNoZWV0Ij4gc3R5bGUgc2hlZXQKLSAgICAgKiBwcm9jZXNzaW5n
IGluc3RydWN0aW9uIDwvYT4gLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIHRpdGxl
KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaW50ZW5kZWQgZGVzdGluYXRpb24gbWVk
aWEgZm9yIHN0eWxlIGluZm9ybWF0aW9uLiBUaGUgbWVkaWEKLSAgICAgKiBpcyBvZnRlbiBzcGVj
aWZpZWQgaW4gdGhlIDxjb2RlPiBvd25lck5vZGUgPC9jb2RlPiAuIFNlZSB0aGUgPGEKLSAgICAg
KiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL3ByZXNlbnQvc3R5bGVzLmh0
bWwjYWRlZi1tZWRpYSI+Ci0gICAgICogbWVkaWEgYXR0cmlidXRlIGRlZmluaXRpb24gPC9hPiBm
b3IgdGhlIDxjb2RlPiBMSU5LIDwvY29kZT4KLSAgICAgKiBlbGVtZW50IGluIEhUTUwgNC4wLCBh
bmQgdGhlIG1lZGlhIHBzZXVkby1hdHRyaWJ1dGUgZm9yIHRoZSBYTUwKLSAgICAgKiA8YSBocmVm
PSJodHRwOi8vd3d3LnczLm9yZy9UUi9XRC14bWwtc3R5bGVzaGVldCI+IHN0eWxlIHNoZWV0Ci0g
ICAgICogcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiA8L2E+IC4KLSAgICAgKgotICAgICAqLwotICAg
IE1lZGlhTGlzdCBtZWRpYSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0g
ICAgICovCi0gICAgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdDsKLSAgICBTdHlsZVNoZWV0
SW1wbCAqaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gaW1wbDsgfQotICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3Q7Ci1wcm90ZWN0ZWQ6Ci0gICAgU3R5bGVTaGVldEltcGwgKmltcGw7Ci19OwotCi0jZW5k
aWYKLQogLyoqCiAgKiBUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBhIHNwZWNpZmljIENT
UyBvcGVyYXRpb24gaXMgaW1wb3NzaWJsZQogICogdG8gcGVyZm9ybS4KICAqLwogY2xhc3MgQ1NT
RXhjZXB0aW9uCiB7Ci0KIHB1YmxpYzoKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0K
LSAgICBDU1NFeGNlcHRpb24odW5zaWduZWQgc2hvcnQgX2NvZGUpIHsgY29kZSA9IF9jb2RlOyB9
Ci0gICAgQ1NTRXhjZXB0aW9uKGNvbnN0IENTU0V4Y2VwdGlvbiAmb3RoZXIpIHsgY29kZSA9IG90
aGVyLmNvZGU7IH0KLQotICAgIENTU0V4Y2VwdGlvbiAmIG9wZXJhdG9yID0gKGNvbnN0IENTU0V4
Y2VwdGlvbiAmb3RoZXIpCi0gICAgICAgIHsgY29kZSA9IG90aGVyLmNvZGU7IHJldHVybiAqdGhp
czsgfQotCi0gICAgdmlydHVhbCB+Q1NTRXhjZXB0aW9uKCkge30KLSAgICAvKioKLSAgICAgKiBB
biBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgZXJyb3IgZ2VuZXJhdGVkLgotICAgICAq
Ci0gICAgICovCi0gICAgdW5zaWduZWQgc2hvcnQgICBjb2RlOwotCi0jZW5kaWYKLQogICAgIGVu
dW0gRXhjZXB0aW9uQ29kZQogICAgIHsKICAgICAgICAgU1lOVEFYX0VSUiAgICAgICAgICAgICAg
ICAgICAgID0gMCwKQEAgLTIwOCwzMTAgKzQ3LDYgQEAgcHVibGljOgogICAgIH07CiB9OwogCi0j
aWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotY2xhc3MgQ1NTU3R5bGVTaGVldEltcGw7Ci1j
bGFzcyBDU1NSdWxlOwotY2xhc3MgQ1NTUnVsZUxpc3Q7Ci0KLS8qKgotICogVGhlIDxjb2RlPiBD
U1NTdHlsZVNoZWV0IDwvY29kZT4gaW50ZXJmYWNlIGlzIGEgY29uY3JldGUgaW50ZXJmYWNlCi0g
KiB1c2VkIHRvIHJlcHJlc2VudCBhIENTUyBzdHlsZSBzaGVldCBpLmUuIGEgc3R5bGUgc2hlZXQg
d2hvc2UKLSAqIGNvbnRlbnQgdHlwZSBpcyAidGV4dC9jc3MiLgotICoKLSAqLwotY2xhc3MgQ1NT
U3R5bGVTaGVldCA6IHB1YmxpYyBTdHlsZVNoZWV0Ci17Ci1wdWJsaWM6Ci0gICAgQ1NTU3R5bGVT
aGVldCgpOwotICAgIENTU1N0eWxlU2hlZXQoY29uc3QgQ1NTU3R5bGVTaGVldCAmb3RoZXIpOwot
ICAgIENTU1N0eWxlU2hlZXQoY29uc3QgU3R5bGVTaGVldCAmb3RoZXIpOwotICAgIENTU1N0eWxl
U2hlZXQoQ1NTU3R5bGVTaGVldEltcGwgKmltcGwpOwotcHVibGljOgotCi0gICAgQ1NTU3R5bGVT
aGVldCAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1N0eWxlU2hlZXQgJm90aGVyKTsKLSAgICBDU1NT
dHlsZVNoZWV0ICYgb3BlcmF0b3IgPSAoY29uc3QgU3R5bGVTaGVldCAmb3RoZXIpOwotCi0gICAg
fkNTU1N0eWxlU2hlZXQoKTsKLQotICAgIC8qKgotICAgICAqIElmIHRoaXMgc3R5bGUgc2hlZXQg
Y29tZXMgZnJvbSBhbiA8Y29kZT4gQGltcG9ydCA8L2NvZGU+IHJ1bGUsCi0gICAgICogdGhlIDxj
b2RlPiBvd25lclJ1bGUgPC9jb2RlPiBhdHRyaWJ1dGUgd2lsbCBjb250YWluIHRoZSA8Y29kZT4K
LSAgICAgKiBDU1NJbXBvcnRSdWxlIDwvY29kZT4gLiBJbiB0aGF0IGNhc2UsIHRoZSA8Y29kZT4g
b3duZXJOb2RlCi0gICAgICogPC9jb2RlPiBhdHRyaWJ1dGUgaW4gdGhlIDxjb2RlPiBTdHlsZVNo
ZWV0IDwvY29kZT4gaW50ZXJmYWNlCi0gICAgICogd2lsbCBiZSA8Y29kZT4gbnVsbCA8L2NvZGU+
IC4gSWYgdGhlIHN0eWxlIHNoZWV0IGNvbWVzIGZyb20gYW4KLSAgICAgKiBlbGVtZW50IG9yIGEg
cHJvY2Vzc2luZyBpbnN0cnVjdGlvbiwgdGhlIDxjb2RlPiBvd25lclJ1bGUKLSAgICAgKiA8L2Nv
ZGU+IGF0dHJpYnV0ZSB3aWxsIGJlIDxjb2RlPiBudWxsIDwvY29kZT4gYW5kIHRoZSA8Y29kZT4K
LSAgICAgKiBvd25lck5vZGUgPC9jb2RlPiBhdHRyaWJ1dGUgd2lsbCBjb250YWluIHRoZSA8Y29k
ZT4gTm9kZQotICAgICAqIDwvY29kZT4gLgotICAgICAqCi0gICAgICovCi0gICAgQ1NTUnVsZSBv
d25lclJ1bGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0IG9mIGFsbCBDU1Mg
cnVsZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgc3R5bGUgc2hlZXQuCi0gICAgICogVGhpcyBpbmNs
dWRlcyBib3RoIDxhCi0gICAgICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIv
c3luZGF0YS5odG1sI3E4Ij4gcnVsZSBzZXRzCi0gICAgICogPC9hPiBhbmQgPGEKLSAgICAgKiBo
cmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9zeW5kYXRhLmh0bWwjYXQtcnVsZXMi
PgotICAgICAqIGF0LXJ1bGVzIDwvYT4gLgotICAgICAqCi0gICAgICovCi0gICAgQ1NTUnVsZUxp
c3QgY3NzUnVsZXMoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5zZXJ0IGEg
bmV3IHJ1bGUgaW50byB0aGUgc3R5bGUgc2hlZXQuIFRoZSBuZXcgcnVsZQotICAgICAqIG5vdyBi
ZWNvbWVzIHBhcnQgb2YgdGhlIGNhc2NhZGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcnVsZSBU
aGUgcGFyc2FibGUgdGV4dCByZXByZXNlbnRpbmcgdGhlIHJ1bGUuIEZvciBydWxlCi0gICAgICog
c2V0cyB0aGlzIGNvbnRhaW5zIGJvdGggdGhlIHNlbGVjdG9yIGFuZCB0aGUgc3R5bGUgZGVjbGFy
YXRpb24uCi0gICAgICogRm9yIGF0LXJ1bGVzLCB0aGlzIHNwZWNpZmllcyBib3RoIHRoZSBhdC1p
ZGVudGlmaWVyIGFuZCB0aGUKLSAgICAgKiBydWxlIGNvbnRlbnQuCi0gICAgICoKLSAgICAgKiBA
cGFyYW0gaW5kZXggVGhlIGluZGV4IHdpdGhpbiB0aGUgc3R5bGUgc2hlZXQncyBydWxlIGxpc3Qg
b2YKLSAgICAgKiB0aGUgcnVsZSBiZWZvcmUgd2hpY2ggdG8gaW5zZXJ0IHRoZSBzcGVjaWZpZWQg
cnVsZS4gSWYgdGhlCi0gICAgICogc3BlY2lmaWVkIGluZGV4IGlzIGVxdWFsIHRvIHRoZSBsZW5n
dGggb2YgdGhlIHN0eWxlIHNoZWV0J3MKLSAgICAgKiBydWxlIGNvbGxlY3Rpb24sIHRoZSBydWxl
IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3R5bGUKLSAgICAgKiBzaGVldC4KLSAg
ICAgKgotICAgICAqIEByZXR1cm4gVGhlIGluZGV4IHdpdGhpbiB0aGUgc3R5bGUgc2hlZXQncyBy
dWxlIGNvbGxlY3Rpb24gb2YKLSAgICAgKiB0aGUgbmV3bHkgaW5zZXJ0ZWQgcnVsZS4KLSAgICAg
KgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSElFUkFSQ0hZX1JFUVVF
U1RfRVJSOiBSYWlzZWQgaWYgdGhlIHJ1bGUgY2Fubm90IGJlIGluc2VydGVkIGF0Ci0gICAgICog
dGhlIHNwZWNpZmllZCBpbmRleCBlLmcuIGlmIGFuIDxjb2RlPiBAaW1wb3J0IDwvY29kZT4gcnVs
ZSBpcwotICAgICAqIGluc2VydGVkIGFmdGVyIGEgc3RhbmRhcmQgcnVsZSBzZXQgb3Igb3RoZXIg
YXQtcnVsZS4KLSAgICAgKgotICAgICAqICBJTkRFWF9TSVpFX0VSUjogUmFpc2VkIGlmIHRoZSBz
cGVjaWZpZWQgaW5kZXggaXMgbm90IGEgdmFsaWQKLSAgICAgKiBpbnNlcnRpb24gcG9pbnQuCi0g
ICAgICoKLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhp
cyBzdHlsZSBzaGVldCBpcwotICAgICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAgICogQGV4Y2Vw
dGlvbiBDU1NFeGNlcHRpb24KLSAgICAgKiAgU1lOVEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVj
aWZpZWQgcnVsZSBoYXMgYSBzeW50YXggZXJyb3IKLSAgICAgKiBhbmQgaXMgdW5wYXJzYWJsZS4K
LSAgICAgKgotICAgICAqLwotICAgIHVuc2lnbmVkIGluc2VydFJ1bGUgKCBjb25zdCBET01TdHJp
bmcgJnJ1bGUsIHVuc2lnbmVkIGluZGV4ICk7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGRl
bGV0ZSBhIHJ1bGUgZnJvbSB0aGUgc3R5bGUgc2hlZXQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0g
aW5kZXggVGhlIGluZGV4IHdpdGhpbiB0aGUgc3R5bGUgc2hlZXQncyBydWxlIGxpc3Qgb2YKLSAg
ICAgKiB0aGUgcnVsZSB0byByZW1vdmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoK
LSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIElOREVYX1NJWkVfRVJSOiBS
YWlzZWQgaWYgdGhlIHNwZWNpZmllZCBpbmRleCBkb2VzIG5vdAotICAgICAqIGNvcnJlc3BvbmQg
dG8gYSBydWxlIGluIHRoZSBzdHlsZSBzaGVldCdzIHJ1bGUgbGlzdC4KLSAgICAgKgotICAgICAq
ICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIHN0eWxlIHNoZWV0
IGlzCi0gICAgICogcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIGRlbGV0ZVJ1
bGUgKCB1bnNpZ25lZCBpbmRleCApOwotCi0gICAgLyogTWljcm9zb2Z0IGV4dGVuc2lvbi4gKi8K
LSAgICB2b2lkIGFkZFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01T
dHJpbmcgJnN0eWxlLCBpbnQgaW5kZXggKTsKLX07Ci0KLQotY2xhc3MgU3R5bGVTaGVldExpc3RJ
bXBsOwotY2xhc3MgU3R5bGVTaGVldDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+IFN0eWxlU2hlZXRM
aXN0IDwvY29kZT4gaW50ZXJmYWNlIHByb3ZpZGVzIHRoZQotICogYWJzdHJhY3Rpb24gb2YgYW4g
b3JkZXJlZCBjb2xsZWN0aW9uIG9mIHN0eWxlIHNoZWV0cy4KLSAqCi0gKi8KLWNsYXNzIFN0eWxl
U2hlZXRMaXN0Ci17Ci1wdWJsaWM6Ci0gICAgU3R5bGVTaGVldExpc3QoKTsKLSAgICBTdHlsZVNo
ZWV0TGlzdChjb25zdCBTdHlsZVNoZWV0TGlzdCAmb3RoZXIpOwotICAgIFN0eWxlU2hlZXRMaXN0
KFN0eWxlU2hlZXRMaXN0SW1wbCAqaW1wbCk7Ci1wdWJsaWM6Ci0KLSAgICBTdHlsZVNoZWV0TGlz
dCAmIG9wZXJhdG9yID0gKGNvbnN0IFN0eWxlU2hlZXRMaXN0ICZvdGhlcik7Ci0KLSAgICB+U3R5
bGVTaGVldExpc3QoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2YgPGNvZGU+IFN0
eWxlU2hlZXQgPC9jb2RlPiBpbiB0aGUgbGlzdC4gVGhlIHJhbmdlCi0gICAgICogb2YgdmFsaWQg
Y2hpbGQgc3R5bGVzaGVldCBpbmRpY2VzIGlzIDxjb2RlPiAwIDwvY29kZT4gdG8gPGNvZGU+Ci0g
ICAgICogbGVuZ3RoLTEgPC9jb2RlPiBpbmNsdXNpdmUuCi0gICAgICoKLSAgICAgKi8KLSAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gcmV0cmll
dmUgYSBzdHlsZSBzaGVldCBieSBvcmRpbmFsIGluZGV4LgotICAgICAqCi0gICAgICogQHBhcmFt
IGluZGV4IEluZGV4IGludG8gdGhlIGNvbGxlY3Rpb24KLSAgICAgKgotICAgICAqIEByZXR1cm4g
VGhlIHN0eWxlIHNoZWV0IGF0IHRoZSA8Y29kZT4gaW5kZXggPC9jb2RlPiBwb3NpdGlvbiBpbgot
ICAgICAqIHRoZSA8Y29kZT4gU3R5bGVTaGVldExpc3QgPC9jb2RlPiAsIG9yIDxjb2RlPiBudWxs
IDwvY29kZT4gaWYKLSAgICAgKiB0aGF0IGlzIG5vdCBhIHZhbGlkIGluZGV4LgotICAgICAqCi0g
ICAgICovCi0gICAgU3R5bGVTaGVldCBpdGVtICggdW5zaWduZWQgaW5kZXggKTsKLQotICAgIC8q
KgotICAgICAqIEBpbnRlcm5hbAotICAgICAqLwotICAgIFN0eWxlU2hlZXRMaXN0SW1wbCAqaGFu
ZGxlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAg
IFN0eWxlU2hlZXRMaXN0SW1wbCAqaW1wbDsKLX07Ci0KLQotY2xhc3MgTWVkaWFMaXN0SW1wbDsK
LWNsYXNzIENTU1J1bGU7Ci1jbGFzcyBDU1NTdHlsZVNoZWV0OwotCi0vKioKLSAqIFRoZSA8Y29k
ZT4gTWVkaWFMaXN0IDwvY29kZT4gaW50ZXJmYWNlIHByb3ZpZGVzIHRoZSBhYnN0cmFjdGlvbiBv
ZgotICogYW4gb3JkZXJlZCBjb2xsZWN0aW9uIG9mIG1lZGlhLCB3aXRob3V0IGRlZmluaW5nIG9y
IGNvbnN0cmFpbmluZwotICogaG93IHRoaXMgY29sbGVjdGlvbiBpcyBpbXBsZW1lbnRlZC4gQWxs
IG1lZGlhIGFyZSBsb3dlcmNhc2UKLSAqIHN0cmluZ3MuCi0gKgotICovCi1jbGFzcyBNZWRpYUxp
c3QKLXsKLXB1YmxpYzoKLSAgICBNZWRpYUxpc3QoKTsKLSAgICBNZWRpYUxpc3QoY29uc3QgTWVk
aWFMaXN0ICZvdGhlcik7Ci0gICAgTWVkaWFMaXN0KE1lZGlhTGlzdEltcGwgKmltcGwpOwotcHVi
bGljOgotCi0gICAgTWVkaWFMaXN0ICYgb3BlcmF0b3IgPSAoY29uc3QgTWVkaWFMaXN0ICZvdGhl
cik7Ci0KLSAgICB+TWVkaWFMaXN0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgcGFyc2FibGUg
dGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVkaWEgbGlzdC4gVGhpcyBpcyBhCi0gICAg
ICogY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0
aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIFNZTlRBWF9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lm
aWVkIHN0cmluZyB2YWx1ZSBoYXMgYSBzeW50YXggZXJyb3IgYW5kCi0gICAgICogaXMgdW5wYXJz
YWJsZS4KLSAgICAgKgotICAgICAqIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2Vk
IGlmIHRoaXMgbWVkaWEgbGlzdCBpcyByZWFkb25seS4KLSAgICAgKi8KLSAgICBET01TdHJpbmcg
bWVkaWFUZXh0KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBzZWUgQHJlZiBtZWRpYVRleHQK
LSAgICAgKi8KLSAgICB2b2lkIHNldE1lZGlhVGV4dChjb25zdCBET01TdHJpbmcgJnZhbHVlKTsK
LQotICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2YgbWVkaWEgaW4gdGhlIGxpc3QuIFRoZSBy
YW5nZSBvZiB2YWxpZCBtZWRpYSBpcyAwIHRvIGxlbmd0aC0xIGluY2x1c2l2ZS4KLSAgICAgKi8K
LSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLQotCi0gICAgLyoqCi0gICAgICogUmV0dXJu
cyB0aGUgaW5kZXh0aCBpbiB0aGUgbGlzdC4gSWYgaW5kZXggaXMgZ3JlYXRlciB0aGFuIG9yIGVx
dWFsIHRvCi0gICAgICogdGhlIG51bWJlciBvZiBtZWRpYSBpbiB0aGUgbGlzdCwgdGhpcyByZXR1
cm5zIG51bGwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggaW50byB0aGUgY29s
bGVjdGlvbi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG1lZGl1bSBhdCB0aGUgaW5kZXh0
aCBwb3NpdGlvbiBpbiB0aGUgTWVkaWFMaXN0LCBvciBudWxsIGlmCi0gICAgICogdGhhdCBpcyBu
b3QgYSB2YWxpZCBpbmRleC4KLSAgICAgKi8KLSAgICBET01TdHJpbmcgaXRlbSh1bnNpZ25lZCBp
bmRleCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBEZWxldGVzIHRoZSBtZWRpdW0gaW5kaWNh
dGVkIGJ5IG9sZE1lZGl1bSBmcm9tIHRoZSBsaXN0LgotICAgICAqCi0gICAgICogQHBhcmFtIG9s
ZE1lZGl1bSBUaGUgbWVkaXVtIHRvIGRlbGV0ZSBpbiB0aGUgbWVkaWEgbGlzdC4KLSAgICAgKgot
ICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogTk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBsaXN0IGlzIHJlYWRvbmx5LgotICAgICAqCi0gICAg
ICogTk9UX0ZPVU5EX0VSUjogUmFpc2VkIGlmIG9sZE1lZGl1bSBpcyBub3QgaW4gdGhlIGxpc3Qu
Ci0gICAgICovCi0gICAgdm9pZCBkZWxldGVNZWRpdW0oY29uc3QgRE9NU3RyaW5nICZvbGRNZWRp
dW0pOwotCi0gICAgLyoqCi0gICAgICogQWRkcyB0aGUgbWVkaXVtIG5ld01lZGl1bSB0byB0aGUg
ZW5kIG9mIHRoZSBsaXN0LiBJZiB0aGUgbmV3TWVkaXVtIGlzCi0gICAgICogYWxyZWFkeSB1c2Vk
LCBpdCBpcyBmaXJzdCByZW1vdmVkLgotICAgICAqCi0gICAgICogQHBhcmFtIG5ld01lZGl1bSBU
aGUgbmV3IG1lZGl1bSB0byBhZGQuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2Vw
dGlvbgotICAgICAqIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogSWYgdGhlIG1lZGl1bSBjb250YWlu
cyBjaGFyYWN0ZXJzIHRoYXQgYXJlCi0gICAgICogaW52YWxpZCBpbiB0aGUgdW5kZXJseWluZyBz
dHlsZSBsYW5ndWFnZS4KLSAgICAgKgotICAgICAqIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjogUmFpc2VkIGlmIHRoaXMgbGlzdCBpcyByZWFkb25seS4KLSAgICAgKi8KLSAgICB2b2lkIGFw
cGVuZE1lZGl1bShjb25zdCBET01TdHJpbmcgJm5ld01lZGl1bSk7Ci0KLSAgICAvKioKLSAgICAg
KiBAaW50ZXJuYWwKLSAgICAgKi8KLSAgICBNZWRpYUxpc3RJbXBsICpoYW5kbGUoKSBjb25zdDsK
LSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgTWVkaWFMaXN0SW1w
bCAqaW1wbDsKLX07Ci0KLWNsYXNzIExpbmtTdHlsZUltcGw7Ci0KLWNsYXNzIExpbmtTdHlsZQot
ewotcHVibGljOgotICAgIExpbmtTdHlsZSgpOwotICAgIExpbmtTdHlsZShjb25zdCBMaW5rU3R5
bGUgJm90aGVyKTsKLQotICAgIExpbmtTdHlsZSAmIG9wZXJhdG9yID0gKGNvbnN0IExpbmtTdHls
ZSAmb3RoZXIpOwotICAgIExpbmtTdHlsZSAmIG9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVy
KTsKLQotICAgIH5MaW5rU3R5bGUoKTsKLQotICAgIFN0eWxlU2hlZXQgc2hlZXQoKTsKLQotICAg
IGJvb2wgaXNOdWxsKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBOb2RlSW1wbCAqbm9kZTsK
LSAgICBMaW5rU3R5bGVJbXBsICppbXBsOwotfTsKLQotY2xhc3MgRG9jdW1lbnRTdHlsZUltcGw7
Ci0KLWNsYXNzIERvY3VtZW50U3R5bGUKLXsKLXB1YmxpYzoKLSAgICBEb2N1bWVudFN0eWxlKCk7
Ci0gICAgRG9jdW1lbnRTdHlsZShjb25zdCBEb2N1bWVudFN0eWxlICZvdGhlcik7Ci0KLSAgICBE
b2N1bWVudFN0eWxlICYgb3BlcmF0b3IgPSAoY29uc3QgRG9jdW1lbnRTdHlsZSAmb3RoZXIpOwot
ICAgIERvY3VtZW50U3R5bGUgJiBvcGVyYXRvciA9IChjb25zdCBEb2N1bWVudCAmb3RoZXIpOwot
Ci0gICAgfkRvY3VtZW50U3R5bGUoKTsKLQotICAgIFN0eWxlU2hlZXRMaXN0IHN0eWxlU2hlZXRz
KCk7Ci0KLSAgICBET01TdHJpbmcgcHJlZmVycmVkU3R5bGVzaGVldFNldCgpOwotICAgIERPTVN0
cmluZyBzZWxlY3RlZFN0eWxlc2hlZXRTZXQoKTsKLSAgICB2b2lkIHNldFNlbGVjdGVkU3R5bGVz
aGVldFNldChjb25zdCBET01TdHJpbmcmIGFTdHJpbmcpOwotCi0gICAgYm9vbCBpc051bGwoKSBj
b25zdDsKLQotcHJvdGVjdGVkOgotICAgIERvY3VtZW50SW1wbCAqZG9jOwotICAgIERvY3VtZW50
U3R5bGVJbXBsICppbXBsOwotfTsKLQotI2VuZGlmCi0KIH07IC8vIG5hbWVzcGFjZQogCiAjZW5k
aWYKSW5kZXg6IGtodG1sL2RvbS9jc3NfdmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vY3NzX3ZhbHVlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAga2h0bWwvZG9tL2Nzc192YWx1ZS5oCi0tLSBraHRtbC9k
b20vY3NzX3ZhbHVlLmgJMTYgU2VwIDIwMDUgMjI6NDI6MDMgLTAwMDAJMS4xMAorKysga2h0bWwv
ZG9tL2Nzc192YWx1ZS5oCTI5IE5vdiAyMDA1IDIyOjUxOjM5IC0wMDAwCkBAIC0zNywyMjYgKzM3
LDE0IEBAIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb25JbXBsOwogY2xhc3MgQ1NTUnVsZTsKIGNs
YXNzIENTU1ZhbHVlOwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotLyoqCi0gKiBU
aGUgPGNvZGU+IENTU1N0eWxlRGVjbGFyYXRpb24gPC9jb2RlPiBpbnRlcmZhY2UgcmVwcmVzZW50
cyBhCi0gKiBzaW5nbGUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvc3lu
ZGF0YS5odG1sI2Jsb2NrIj4KLSAqIENTUyBkZWNsYXJhdGlvbiBibG9jayA8L2E+IC4gVGhpcyBp
bnRlcmZhY2UgbWF5IGJlIHVzZWQgdG8KLSAqIGRldGVybWluZSB0aGUgc3R5bGUgcHJvcGVydGll
cyBjdXJyZW50bHkgc2V0IGluIGEgYmxvY2sgb3IgdG8gc2V0Ci0gKiBzdHlsZSBwcm9wZXJ0aWVz
IGV4cGxpY2l0bHkgd2l0aGluIHRoZSBibG9jay4KLSAqCi0gKiAgV2hpbGUgYW4gaW1wbGVtZW50
YXRpb24gbWF5IG5vdCByZWNvZ25pemUgYWxsIENTUyBwcm9wZXJ0aWVzCi0gKiB3aXRoaW4gYSBD
U1MgZGVjbGFyYXRpb24gYmxvY2ssIGl0IGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUgYWNjZXNzIHRv
Ci0gKiBhbGwgc3BlY2lmaWVkIHByb3BlcnRpZXMgdGhyb3VnaCB0aGUgPGNvZGU+IENTU1N0eWxl
RGVjbGFyYXRpb24KLSAqIDwvY29kZT4gaW50ZXJmYWNlLiBGdXJ0aGVybW9yZSwgaW1wbGVtZW50
YXRpb25zIHRoYXQgc3VwcG9ydCBhCi0gKiBzcGVjaWZpYyBsZXZlbCBvZiBDU1Mgc2hvdWxkIGNv
cnJlY3RseSBoYW5kbGUgPGEKLSAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1My
L2Fib3V0Lmh0bWwjc2hvcnRoYW5kIj4gQ1NTCi0gKiBzaG9ydGhhbmQgPC9hPiBwcm9wZXJ0aWVz
IGZvciB0aGF0IGxldmVsLiBGb3IgYSBmdXJ0aGVyIGRpc2N1c3Npb24KLSAqIG9mIHNob3J0aGFu
ZCBwcm9wZXJ0aWVzLCBzZWUgdGhlIDxjb2RlPiBDU1MyUHJvcGVydGllcyA8L2NvZGU+Ci0gKiBp
bnRlcmZhY2UuCi0gKgotICovCi1jbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uCi17Ci1wdWJsaWM6
Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwotICAgIENTU1N0eWxlRGVjbGFyYXRpb24oY29u
c3QgQ1NTU3R5bGVEZWNsYXJhdGlvbiAmb3RoZXIpOwotICAgIENTU1N0eWxlRGVjbGFyYXRpb24o
Q1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKmltcGwpOwotcHVibGljOgotCi0gICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1N0eWxlRGVjbGFyYXRpb24gJm90aGVy
KTsKLQotICAgIH5DU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUg
cGFyc2FibGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGVjbGFyYXRpb24gYmxvY2sK
LSAgICAgKiAoaW5jbHVkaW5nIHRoZSBzdXJyb3VuZGluZyBjdXJseSBicmFjZXMpLiBTZXR0aW5n
IHRoaXMKLSAgICAgKiBhdHRyaWJ1dGUgd2lsbCByZXN1bHQgaW4gdGhlIHBhcnNpbmcgb2YgdGhl
IG5ldyB2YWx1ZSBhbmQKLSAgICAgKiByZXNldHRpbmcgb2YgdGhlIHByb3BlcnRpZXMgaW4gdGhl
IGRlY2xhcmF0aW9uIGJsb2NrLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGNzc1Rl
eHQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIHNlZSBAcmVmIGNzc1RleHQKLSAgICAgKiBA
ZXhjZXB0aW9uIENTU0V4Y2VwdGlvbgotICAgICAqIFNZTlRBWF9FUlI6IFJhaXNlZCBpZiB0aGUg
c3BlY2lmaWVkIENTUyBzdHJpbmcgdmFsdWUgaGFzIGEKLSAgICAgKiBzeW50YXggZXJyb3IgYW5k
IGlzIHVucGFyc2FibGUuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgot
ICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIGRlY2xh
cmF0aW9uIGlzCi0gICAgICogcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHNl
dENzc1RleHQoIGNvbnN0IERPTVN0cmluZyAmICk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbnVt
YmVyIG9mIHByb3BlcnRpZXMgdGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseSBzZXQgaW4gdGhpcwot
ICAgICAqIGRlY2xhcmF0aW9uIGJsb2NrLgotICAgICAqCi0gICAgICovCi0gICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgQ1NTIHJ1bGUgdGhhdCBjb250
YWlucyB0aGlzIGRlY2xhcmF0aW9uIGJsb2NrLgotICAgICAqCi0gICAgICovCi0gICAgQ1NTUnVs
ZSBwYXJlbnRSdWxlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIHJldHJpZXZl
IHRoZSB2YWx1ZSBvZiBhIENTUyBwcm9wZXJ0eSBpZiBpdCBoYXMgYmVlbgotICAgICAqIGV4cGxp
Y2l0bHkgc2V0IHdpdGhpbiB0aGlzIGRlY2xhcmF0aW9uIGJsb2NrLgotICAgICAqCi0gICAgICog
QHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgQ1NTIHByb3BlcnR5LiBTZWUgdGhl
IDxhCi0gICAgICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvcHJvcGlkeC5o
dG1sIj4gQ1NTIHByb3BlcnR5Ci0gICAgICogaW5kZXggPC9hPiAuCi0gICAgICoKLSAgICAgKiBA
cmV0dXJuIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBpZiBpdCBoYXMgYmVlbgot
ICAgICAqIGV4cGxpY2l0bHkgc2V0IGZvciB0aGlzIGRlY2xhcmF0aW9uIGJsb2NrLiBSZXR1cm5z
IHRoZSBlbXB0eQotICAgICAqIHN0cmluZyBpZiB0aGUgcHJvcGVydHkgaGFzIG5vdCBiZWVuIHNl
dC4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBnZXRQcm9wZXJ0eVZhbHVlICggY29u
c3QgRE9NU3RyaW5nICZwcm9wZXJ0eU5hbWUgKTsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8g
cmV0cmlldmUgdGhlIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgb2YgYQotICAg
ICAqIENTUyBwcm9wZXJ0eSBpZiBpdCBoYXMgYmVlbiBleHBsaWNpdGx5IHNldCB3aXRoaW4gdGhp
cwotICAgICAqIGRlY2xhcmF0aW9uIGJsb2NrLiBUaGlzIG1ldGhvZCByZXR1cm5zIG51bGwgaWYg
dGhlIHByb3BlcnR5IGlzCi0gICAgICogYSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9S
RUMtQ1NTMi9hYm91dC5odG1sI3Nob3J0aGFuZCI+Ci0gICAgICogc2hvcnRoYW5kIDwvYT4gcHJv
cGVydHkuIFNob3J0aGFuZCBwcm9wZXJ0eSB2YWx1ZXMgY2FuIG9ubHkgYmUKLSAgICAgKiBhY2Nl
c3NlZCBhbmQgbW9kaWZpZWQgYXMgc3RyaW5ncywgdXNpbmcgdGhlIDxjb2RlPgotICAgICAqIGdl
dFByb3BlcnR5VmFsdWUgPC9jb2RlPiBhbmQgPGNvZGU+IHNldFByb3BlcnR5IDwvY29kZT4KLSAg
ICAgKiBtZXRob2RzLgotICAgICAqCi0gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFt
ZSBvZiB0aGUgQ1NTIHByb3BlcnR5LiBTZWUgdGhlIDxhCi0gICAgICogaHJlZj0iaHR0cDovL3d3
dy53My5vcmcvVFIvUkVDLUNTUzIvcHJvcGlkeC5odG1sIj4gQ1NTIHByb3BlcnR5Ci0gICAgICog
aW5kZXggPC9hPiAuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHZhbHVlIG9m
IHRoZSBwcm9wZXJ0eSBpZiBpdCBoYXMgYmVlbgotICAgICAqIGV4cGxpY2l0bHkgc2V0IGZvciB0
aGlzIGRlY2xhcmF0aW9uIGJsb2NrLiBSZXR1cm5zIHRoZSA8Y29kZT4KLSAgICAgKiBudWxsIDwv
Y29kZT4gaWYgdGhlIHByb3BlcnR5IGhhcyBub3QgYmVlbiBzZXQuCi0gICAgICoKLSAgICAgKi8K
LSAgICBDU1NWYWx1ZSBnZXRQcm9wZXJ0eUNTU1ZhbHVlICggY29uc3QgRE9NU3RyaW5nICZwcm9w
ZXJ0eU5hbWUgKTsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gcmVtb3ZlIGEgQ1NTIHByb3Bl
cnR5IGlmIGl0IGhhcyBiZWVuIGV4cGxpY2l0bHkgc2V0Ci0gICAgICogd2l0aGluIHRoaXMgZGVj
bGFyYXRpb24gYmxvY2suCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBu
YW1lIG9mIHRoZSBDU1MgcHJvcGVydHkuIFNlZSB0aGUgPGEKLSAgICAgKiBocmVmPSJodHRwOi8v
d3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9wcm9waWR4Lmh0bWwiPiBDU1MgcHJvcGVydHkKLSAgICAg
KiBpbmRleCA8L2E+IC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdmFsdWUg
b2YgdGhlIHByb3BlcnR5IGlmIGl0IGhhcyBiZWVuCi0gICAgICogZXhwbGljaXRseSBzZXQgZm9y
IHRoaXMgZGVjbGFyYXRpb24gYmxvY2suIFJldHVybnMgdGhlIGVtcHR5Ci0gICAgICogc3RyaW5n
IGlmIHRoZSBwcm9wZXJ0eSBoYXMgbm90IGJlZW4gc2V0IG9yIHRoZSBwcm9wZXJ0eSBuYW1lCi0g
ICAgICogZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHZhbGlkIENTUzIgcHJvcGVydHkuCi0gICAg
ICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgZGVjbGFyYXRpb24gaXMKLSAgICAgKiByZWFk
b25seS4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyByZW1vdmVQcm9wZXJ0eSAoIGNv
bnN0IERPTVN0cmluZyAmcHJvcGVydHlOYW1lICk7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRv
IHJldHJpZXZlIHRoZSBwcmlvcml0eSBvZiBhIENTUyBwcm9wZXJ0eSAoZS5nLiB0aGUKLSAgICAg
KiA8Y29kZT4gImltcG9ydGFudCIgPC9jb2RlPiBxdWFsaWZpZXIpIGlmIHRoZSBwcm9wZXJ0eSBo
YXMgYmVlbgotICAgICAqIGV4cGxpY2l0bHkgc2V0IGluIHRoaXMgZGVjbGFyYXRpb24gYmxvY2su
Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBDU1Mg
cHJvcGVydHkuIFNlZSB0aGUgPGEKLSAgICAgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9S
RUMtQ1NTMi9wcm9waWR4Lmh0bWwiPiBDU1MgcHJvcGVydHkKLSAgICAgKiBpbmRleCA8L2E+IC4K
LSAgICAgKgotICAgICAqIEByZXR1cm4gQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwcmlvcml0
eSAoZS5nLiA8Y29kZT4KLSAgICAgKiAiaW1wb3J0YW50IiA8L2NvZGU+ICkgaWYgb25lIGV4aXN0
cy4gVGhlIGVtcHR5IHN0cmluZyBpZiBub25lCi0gICAgICogZXhpc3RzLgotICAgICAqCi0gICAg
ICovCi0gICAgRE9NU3RyaW5nIGdldFByb3BlcnR5UHJpb3JpdHkgKCBjb25zdCBET01TdHJpbmcg
JnByb3BlcnR5TmFtZSApOwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBzZXQgYSBwcm9wZXJ0
eSB2YWx1ZSBhbmQgcHJpb3JpdHkgd2l0aGluIHRoaXMKLSAgICAgKiBkZWNsYXJhdGlvbiBibG9j
ay4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIENT
UyBwcm9wZXJ0eS4gU2VlIHRoZSA8YQotICAgICAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RS
L1JFQy1DU1MyL3Byb3BpZHguaHRtbCI+IENTUyBwcm9wZXJ0eQotICAgICAqIGluZGV4IDwvYT4g
LgotICAgICAqCi0gICAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIHByb3Bl
cnR5LgotICAgICAqCi0gICAgICogQHBhcmFtIHByaW9yaXR5IFRoZSBuZXcgcHJpb3JpdHkgb2Yg
dGhlIHByb3BlcnR5IChlLmcuIDxjb2RlPgotICAgICAqICJpbXBvcnRhbnQiIDwvY29kZT4gKS4K
LSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gQ1NTRXhj
ZXB0aW9uCi0gICAgICogU1lOVEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUg
aGFzIGEgc3ludGF4IGVycm9yCi0gICAgICogYW5kIGlzIHVucGFyc2FibGUuCi0gICAgICoKLSAg
ICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIGRlY2xhcmF0aW9uIGlzCi0gICAgICogcmVhZG9ubHku
Ci0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHNldFByb3BlcnR5ICggY29uc3QgRE9NU3RyaW5n
ICZwcm9wZXJ0eU5hbWUsIGNvbnN0IERPTVN0cmluZyAmdmFsdWUsIGNvbnN0IERPTVN0cmluZyAm
cHJpb3JpdHkgKTsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHByb3Bl
cnRpZXMgdGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseSBzZXQKLSAgICAgKiBpbiB0aGlzIGRlY2xh
cmF0aW9uIGJsb2NrLiBUaGUgb3JkZXIgb2YgdGhlIHByb3BlcnRpZXMKLSAgICAgKiByZXRyaWV2
ZWQgdXNpbmcgdGhpcyBtZXRob2QgZG9lcyBub3QgaGF2ZSB0byBiZSB0aGUgb3JkZXIgaW4KLSAg
ICAgKiB3aGljaCB0aGV5IHdlcmUgc2V0LiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBpdGVy
YXRlIG92ZXIKLSAgICAgKiBhbGwgcHJvcGVydGllcyBpbiB0aGlzIGRlY2xhcmF0aW9uIGJsb2Nr
LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IG9mIHRoZSBwcm9wZXJ0eSBuYW1l
IHRvIHJldHJpZXZlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbmFtZSBvZiB0aGUgcHJv
cGVydHkgYXQgdGhpcyBvcmRpbmFsIHBvc2l0aW9uLiBUaGUKLSAgICAgKiBlbXB0eSBzdHJpbmcg
aWYgbm8gcHJvcGVydHkgZXhpc3RzIGF0IHRoaXMgcG9zaXRpb24uCi0gICAgICoKLSAgICAgKi8K
LSAgICBET01TdHJpbmcgaXRlbSAoIHVuc2lnbmVkIGluZGV4ICk7Ci0KLSAgICAvKioKLSAgICAg
KiBAaW50ZXJuYWwKLSAgICAgKiBub3QgcGFydCBvZiB0aGUgRE9NCi0gICAgICovCi0gICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbkltcGwgKmhhbmRsZSgpIGNvbnN0OwotICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqaW1wbDsK
LX07Ci0KLQotY2xhc3MgQ1NTVmFsdWVJbXBsOwotCi0jZW5kaWYKLQogCiAvKioKICAqIFRoZSA8
Y29kZT4gQ1NTVmFsdWUgPC9jb2RlPiBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIHNpbXBsZSBvciBh
Ci0gKiBjb21wbGV4ZSB2YWx1ZS4KLSAqCisgKiBjb21wbGV4IHZhbHVlLgogICovCiBjbGFzcyBD
U1NWYWx1ZQogewotCi1wdWJsaWM6Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0g
ICAgQ1NTVmFsdWUoKTsKLSAgICBDU1NWYWx1ZShjb25zdCBDU1NWYWx1ZSAmb3RoZXIpOwotICAg
IENTU1ZhbHVlKENTU1ZhbHVlSW1wbCAqaW1wbCk7CiBwdWJsaWM6Ci0KLSAgICBDU1NWYWx1ZSAm
IG9wZXJhdG9yID0gKGNvbnN0IENTU1ZhbHVlICZvdGhlcik7Ci0KLSAgICB+Q1NTVmFsdWUoKTsK
LQotI2VuZGlmCi0KICAgICAvKioKICAgICAgKiBBbiBpbnRlZ2VyIGluZGljYXRpbmcgd2hpY2gg
dHlwZSBvZiB1bml0IGFwcGxpZXMgdG8gdGhlIHZhbHVlLgogICAgICAqCkBAIC0yNzEsMTA5ICs1
OSw4IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTX0NVU1RPTSA9IDMsCiAgICAgICAgIENTU19JTklU
SUFMID0gNAogICAgIH07Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgLyoq
Ci0gICAgICogQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgdmFsdWUuCi0g
ICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLyoq
Ci0gICAgICogc2VlIEByZWYgY3NzVGV4dAotICAgICAqIEBleGNlcHRpb24gQ1NTRXhjZXB0aW9u
Ci0gICAgICogU1lOVEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgQ1NTIHN0cmluZyB2
YWx1ZSBoYXMgYQotICAgICAqIHN5bnRheCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4KLSAgICAg
KgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogIE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgZGVjbGFyYXRpb24gaXMKLSAgICAgKiByZWFk
b25seS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0Q3NzVGV4dCggY29uc3QgRE9NU3Ry
aW5nICYgKTsKLQotICAgIC8qKgotICAgICAqIEEgY29kZSBkZWZpbmluZyB0aGUgdHlwZSBvZiB0
aGUgdmFsdWUgYXMgZGVmaW5lZCBhYm92ZS4KLSAgICAgKgotICAgICAqLwotICAgIHVuc2lnbmVk
IHNob3J0IGNzc1ZhbHVlVHlwZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFs
Ci0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwotICAgIGJvb2wgaXNDU1NWYWx1
ZUxpc3QoKSBjb25zdDsKLSAgICBib29sIGlzQ1NTUHJpbWl0aXZlVmFsdWUoKSBjb25zdDsKLSAg
ICBDU1NWYWx1ZUltcGwgKmhhbmRsZSgpIGNvbnN0OwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7
Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NWYWx1ZUltcGwgKmltcGw7Ci0KLSNlbmRpZgotCiB9Owog
Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1jbGFzcyBDU1NWYWx1ZUxpc3RJbXBs
OwotY2xhc3MgQ1NTVmFsdWU7Ci0KLS8qKgotICogVGhlIDxjb2RlPiBDU1NWYWx1ZUxpc3QgPC9j
b2RlPiBpbnRlcmZhY2UgcHJvdmlkZXMgdGhlIGFic3JhY3Rpb24KLSAqIG9mIGFuIG9yZGVyZWQg
Y29sbGVjdGlvbiBvZiBDU1MgdmFsdWVzLgotICoKLSAqLwotY2xhc3MgQ1NTVmFsdWVMaXN0IDog
cHVibGljIENTU1ZhbHVlCi17Ci1wdWJsaWM6Ci0gICAgQ1NTVmFsdWVMaXN0KCk7Ci0gICAgQ1NT
VmFsdWVMaXN0KGNvbnN0IENTU1ZhbHVlTGlzdCAmb3RoZXIpOwotICAgIENTU1ZhbHVlTGlzdChj
b25zdCBDU1NWYWx1ZSAmb3RoZXIpOwotICAgIENTU1ZhbHVlTGlzdChDU1NWYWx1ZUxpc3RJbXBs
ICppbXBsKTsKLXB1YmxpYzoKLQotICAgIENTU1ZhbHVlTGlzdCAmIG9wZXJhdG9yID0gKGNvbnN0
IENTU1ZhbHVlTGlzdCAmb3RoZXIpOwotICAgIENTU1ZhbHVlTGlzdCAmIG9wZXJhdG9yID0gKGNv
bnN0IENTU1ZhbHVlICZvdGhlcik7Ci0KLSAgICB+Q1NTVmFsdWVMaXN0KCk7Ci0KLSAgICAvKioK
LSAgICAgKiBUaGUgbnVtYmVyIG9mIDxjb2RlPiBDU1NWYWx1ZSA8L2NvZGU+IHMgaW4gdGhlIGxp
c3QuIFRoZSByYW5nZQotICAgICAqIG9mIHZhbGlkIHZhbHVlcyBpbmRpY2VzIGlzIDxjb2RlPiAw
IDwvY29kZT4gdG8gPGNvZGU+IGxlbmd0aC0xCi0gICAgICogPC9jb2RlPiBpbmNsdXNpdmUuCi0g
ICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLQotICAgIC8qKgot
ICAgICAqIFVzZWQgdG8gcmV0cmlldmUgYSBDU1MgcnVsZSBieSBvcmRpbmFsIGluZGV4LiBUaGUg
b3JkZXIgaW4gdGhpcwotICAgICAqIGNvbGxlY3Rpb24gcmVwcmVzZW50cyB0aGUgb3JkZXIgb2Yg
dGhlIHZhbHVlcyBpbiB0aGUgQ1NTIHN0eWxlCi0gICAgICogcHJvcGVydHkuCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0gaW5kZXggSW5kZXggaW50byB0aGUgY29sbGVjdGlvbi4KLSAgICAgKgotICAg
ICAqIEByZXR1cm4gVGhlIHN0eWxlIHJ1bGUgYXQgdGhlIDxjb2RlPiBpbmRleCA8L2NvZGU+IHBv
c2l0aW9uIGluCi0gICAgICogdGhlIDxjb2RlPiBDU1NWYWx1ZUxpc3QgPC9jb2RlPiAsIG9yIDxj
b2RlPiBudWxsIDwvY29kZT4gaWYKLSAgICAgKiB0aGF0IGlzIG5vdCB2YWxpZCBpbmRleC4KLSAg
ICAgKgotICAgICAqLwotICAgIENTU1ZhbHVlIGl0ZW0gKCB1bnNpZ25lZCBpbmRleCApOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgQ1NTVmFsdWVMaXN0SW1wbCAqdmltcGw7Ci19OwotCi0KLWNsYXNzIENT
U1ByaW1pdGl2ZVZhbHVlSW1wbDsKLWNsYXNzIENvdW50ZXI7Ci1jbGFzcyBSR0JDb2xvcjsKLWNs
YXNzIFJlY3Q7Ci0KLSNlbmRpZgotCiAvKioKICAqIFRoZSA8Y29kZT4gQ1NTUHJpbWl0aXZlVmFs
dWUgPC9jb2RlPiBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIHNpbmdsZQogICogPGEgaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvc3luZGF0YS5odG1sI3ZhbHVlcyI+IENTUwpAQCAt
Mzg3LDI3ICs3NCw5IEBAIGNsYXNzIFJlY3Q7CiAgKi8KIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVl
IDogcHVibGljIENTU1ZhbHVlCiB7Ci0KLXB1YmxpYzoKLQotI2lmICFLSFRNTF9OT19DUExVU1BM
VVNfRE9NCi0KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSgpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVl
KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlICZvdGhlcik7Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUo
Y29uc3QgQ1NTVmFsdWUgJm90aGVyKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShDU1NQcmltaXRp
dmVWYWx1ZUltcGwgKmltcGwpOwogcHVibGljOgotCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUgJiBv
cGVyYXRvciA9IChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSAmb3RoZXIpOwotICAgIENTU1ByaW1p
dGl2ZVZhbHVlICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTVmFsdWUgJm90aGVyKTsKLQotICAgIH5D
U1NQcmltaXRpdmVWYWx1ZSgpOwotCi0jZW5kaWYKLQogICAgIC8qKgogICAgICAqIEFuIGludGVn
ZXIgaW5kaWNhdGluZyB3aGljaCB0eXBlIG9mIHVuaXQgYXBwbGllcyB0byB0aGUgdmFsdWUuCi0g
ICAgICoKICAgICAgKi8KICAgICBlbnVtIFVuaXRUeXBlcyB7CiAgICAgICAgIENTU19VTktOT1dO
ID0gMCwKQEAgLTQ0MCwzMjQgKzEwOSw4IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTX0RBU0hCT0FS
RF9SRUdJT04gPSAyNywgLy8gRklYTUU6IFdoYXQgb24gZWFydGggaXMgdGhpcyBkb2luZyBhcyBh
IHByaW1pdGl2ZSB2YWx1ZT8gVGhpcyBpcyBpbnNhbmUuCiAgICAgICAgIENTU19IVE1MX1JFTEFU
SVZFID0gMjU1CiAgICAgfTsKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICAv
KioKLSAgICAgKiBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgYXMgZGVmaW5lZCBieSB0aGUgY29uc3Rh
bnRzIHNwZWNpZmllZAotICAgICAqIGFib3ZlLgotICAgICAqCi0gICAgICovCi0gICAgdW5zaWdu
ZWQgc2hvcnQgcHJpbWl0aXZlVHlwZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQSBtZXRo
b2QgdG8gc2V0IHRoZSBmbG9hdCB2YWx1ZSB3aXRoIGEgc3BlY2lmaWVkIHVuaXQuIElmIHRoZQot
ICAgICAqIHByb3BlcnR5IGF0dGFjaGVkIHdpdGggdGhpcyB2YWx1ZSBjYW4gbm90IGFjY2VwdCB0
aGUgc3BlY2lmaWVkCi0gICAgICogdW5pdCBvciB0aGUgZmxvYXQgdmFsdWUsIHRoZSB2YWx1ZSB3
aWxsIGJlIHVuY2hhbmdlZCBhbmQgYQotICAgICAqIDxjb2RlPiBET01FeGNlcHRpb24gPC9jb2Rl
PiB3aWxsIGJlIHJhaXNlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB1bml0VHlwZSBBIHVuaXQg
Y29kZSBhcyBkZWZpbmVkIGFib3ZlLiBUaGUgdW5pdCBjb2RlIGNhbgotICAgICAqIG9ubHkgYmUg
YSBmbG9hdCB1bml0IHR5cGUgKGUuZy4gPGNvZGU+IE5VTUJFUiA8L2NvZGU+ICwgPGNvZGU+Ci0g
ICAgICogUEVSQ0VOVEFHRSA8L2NvZGU+ICwgPGNvZGU+IENTU19FTVMgPC9jb2RlPiAsIDxjb2Rl
PiBDU1NfRVhTCi0gICAgICogPC9jb2RlPiAsIDxjb2RlPiBDU1NfUFggPC9jb2RlPiAsIDxjb2Rl
PiBDU1NfUFggPC9jb2RlPiAsCi0gICAgICogPGNvZGU+IENTU19DTSA8L2NvZGU+ICwgPGNvZGU+
IENTU19NTSA8L2NvZGU+ICwgPGNvZGU+IENTU19JTgotICAgICAqIDwvY29kZT4gLCA8Y29kZT4g
Q1NTX1BUIDwvY29kZT4gLCA8Y29kZT4gQ1NTX1BDIDwvY29kZT4gLAotICAgICAqIDxjb2RlPiBD
U1NfREVHIDwvY29kZT4gLCA8Y29kZT4gQ1NTX1JBRCA8L2NvZGU+ICwgPGNvZGU+Ci0gICAgICog
Q1NTX0dSQUQgPC9jb2RlPiAsIDxjb2RlPiBDU1NfTVMgPC9jb2RlPiAsIDxjb2RlPiBDU1NfUyA8
L2NvZGU+Ci0gICAgICogLCA8Y29kZT4gQ1NTX0haIDwvY29kZT4gLCA8Y29kZT4gQ1NTX0tIWiA8
L2NvZGU+ICwgPGNvZGU+Ci0gICAgICogQ1NTX0RJTUVOU0lPTiA8L2NvZGU+ICkuCi0gICAgICoK
LSAgICAgKiBAcGFyYW0gZmxvYXRWYWx1ZSBUaGUgbmV3IGZsb2F0IHZhbHVlLgotICAgICAqCi0g
ICAgICogQHJldHVybgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSU5W
QUxJRF9BQ0NFU1NfRVJSOiBSYWlzZXMgaWYgdGhlIGF0dGFjaGVkIHByb3BlcnR5IGRvZXNuJ3QK
LSAgICAgKiBzdXBwb3J0IHRoZSBmbG9hdCB2YWx1ZSBvciB0aGUgdW5pdCB0eXBlLgotICAgICAq
Ci0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgcHJv
cGVydHkgaXMKLSAgICAgKiByZWFkb25seS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0
RmxvYXRWYWx1ZSAoIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlLCBmbG9hdCBmbG9hdFZhbHVlICk7
Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCBhIGZsb2F0IHZh
bHVlIGluIGEgc3BlY2lmaWVkIHVuaXQuCi0gICAgICogSWYgdGhpcyBDU1MgdmFsdWUgZG9lc24n
dCBjb250YWluIGEgZmxvYXQgdmFsdWUgb3IgY2FuJ3QgYmUKLSAgICAgKiBjb252ZXJ0ZWQgaW50
byB0aGUgc3BlY2lmaWVkIHVuaXQsIGEgPGNvZGU+IERPTUV4Y2VwdGlvbgotICAgICAqIDwvY29k
ZT4gaXMgcmFpc2VkLgotICAgICAqCi0gICAgICogQHBhcmFtIHVuaXRUeXBlIEEgdW5pdCBjb2Rl
IHRvIGdldCB0aGUgZmxvYXQgdmFsdWUuIFRoZSB1bml0Ci0gICAgICogY29kZSBjYW4gb25seSBi
ZSBhIGZsb2F0IHVuaXQgdHlwZSAoZS5nLiA8Y29kZT4gQ1NTX05VTUJFUgotICAgICAqIDwvY29k
ZT4gLCA8Y29kZT4gQ1NTX1BFUkNFTlRBR0UgPC9jb2RlPiAsIDxjb2RlPiBDU1NfRU1TCi0gICAg
ICogPC9jb2RlPiAsIDxjb2RlPiBDU1NfRVhTIDwvY29kZT4gLCA8Y29kZT4gQ1NTX1BYIDwvY29k
ZT4gLAotICAgICAqIDxjb2RlPiBDU1NfUFggPC9jb2RlPiAsIDxjb2RlPiBDU1NfQ00gPC9jb2Rl
PiAsIDxjb2RlPiBDU1NfTU0KLSAgICAgKiA8L2NvZGU+ICwgPGNvZGU+IENTU19JTiA8L2NvZGU+
ICwgPGNvZGU+IENTU19QVCA8L2NvZGU+ICwKLSAgICAgKiA8Y29kZT4gQ1NTX1BDIDwvY29kZT4g
LCA8Y29kZT4gQ1NTX0RFRyA8L2NvZGU+ICwgPGNvZGU+IENTU19SQUQKLSAgICAgKiA8L2NvZGU+
ICwgPGNvZGU+IENTU19HUkFEIDwvY29kZT4gLCA8Y29kZT4gQ1NTX01TIDwvY29kZT4gLAotICAg
ICAqIDxjb2RlPiBDU1NfUyA8L2NvZGU+ICwgPGNvZGU+IENTU19IWiA8L2NvZGU+ICwgPGNvZGU+
IENTU19LSFoKLSAgICAgKiA8L2NvZGU+ICwgPGNvZGU+IENTU19ESU1FTlNJT04gPC9jb2RlPiAp
LgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgZmxvYXQgdmFsdWUgaW4gdGhlIHNwZWNpZmll
ZCB1bml0LgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBJ
TlZBTElEX0FDQ0VTU19FUlI6IFJhaXNlcyBpZiB0aGUgQ1NTIHZhbHVlIGRvZXNuJ3QgY29udGFp
biBhCi0gICAgICogZmxvYXQgdmFsdWUgb3IgaWYgdGhlIGZsb2F0IHZhbHVlIGNhbid0IGJlIGNv
bnZlcnRlZCBpbnRvIHRoZQotICAgICAqIHNwZWNpZmllZCB1bml0LgotICAgICAqCi0gICAgICov
Ci0gICAgZmxvYXQgZ2V0RmxvYXRWYWx1ZSAoIHVuc2lnbmVkIHNob3J0IHVuaXRUeXBlICk7Ci0K
LSAgICAvKioKLSAgICAgKiBBIG1ldGhvZCB0byBzZXQgdGhlIHN0cmluZyB2YWx1ZSB3aXRoIGEg
c3BlY2lmaWVkIHVuaXQuIElmIHRoZQotICAgICAqIHByb3BlcnR5IGF0dGFjaGVkIHRvIHRoaXMg
dmFsdWUgY2FuJ3QgYWNjZXB0IHRoZSBzcGVjaWZpZWQgdW5pdAotICAgICAqIG9yIHRoZSBzdHJp
bmcgdmFsdWUsIHRoZSB2YWx1ZSB3aWxsIGJlIHVuY2hhbmdlZCBhbmQgYSA8Y29kZT4KLSAgICAg
KiBET01FeGNlcHRpb24gPC9jb2RlPiB3aWxsIGJlIHJhaXNlZC4KLSAgICAgKgotICAgICAqIEBw
YXJhbSBzdHJpbmdUeXBlIEEgc3RyaW5nIGNvZGUgYXMgZGVmaW5lZCBhYm92ZS4gVGhlIHN0cmlu
ZwotICAgICAqIGNvZGUgY2FuIG9ubHkgYmUgYSBzdHJpbmcgdW5pdCB0eXBlIChlLmcuIDxjb2Rl
PiBDU1NfVVJJCi0gICAgICogPC9jb2RlPiAsIDxjb2RlPiBDU1NfSURFTlQgPC9jb2RlPiAsIDxj
b2RlPiBDU1NfSU5IRVJJVCA8L2NvZGU+Ci0gICAgICogYW5kIDxjb2RlPiBDU1NfQVRUUiA8L2Nv
ZGU+ICkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3RyaW5nVmFsdWUgVGhlIG5ldyBzdHJpbmcg
dmFsdWUuIElmIHRoZSA8Y29kZT4KLSAgICAgKiBzdHJpbmdUeXBlIDwvY29kZT4gaXMgZXF1YWwg
dG8gPGNvZGU+IENTU19JTkhFUklUIDwvY29kZT4gLCB0aGUKLSAgICAgKiA8Y29kZT4gc3RyaW5n
VmFsdWUgPC9jb2RlPiBzaG91bGQgYmUgPGNvZGU+IGluaGVyaXQgPC9jb2RlPiAuCi0gICAgICoK
LSAgICAgKiBAcmV0dXJuCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBJ
TlZBTElEX0FDQ0VTU19FUlI6IFJhaXNlcyBpZiB0aGUgQ1NTIHZhbHVlIGRvZXNuJ3QgY29udGFp
biBhCi0gICAgICogc3RyaW5nIHZhbHVlIG9yIGlmIHRoZSBzdHJpbmcgdmFsdWUgY2FuJ3QgYmUg
Y29udmVydGVkIGludG8gdGhlCi0gICAgICogc3BlY2lmaWVkIHVuaXQuCi0gICAgICoKLSAgICAg
KiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBwcm9wZXJ0eSBp
cwotICAgICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZXRTdHJpbmdW
YWx1ZSAoIHVuc2lnbmVkIHNob3J0IHN0cmluZ1R5cGUsIGNvbnN0IERPTVN0cmluZyAmc3RyaW5n
VmFsdWUgKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRo
ZSBzdHJpbmcgdmFsdWUgaW4gYSBzcGVjaWZpZWQKLSAgICAgKiB1bml0LiBJZiB0aGUgQ1NTIHZh
bHVlIGRvZXNuJ3QgY29udGFpbiBhIHN0cmluZyB2YWx1ZSwgYSA8Y29kZT4KLSAgICAgKiBET01F
eGNlcHRpb24gPC9jb2RlPiBpcyByYWlzZWQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBz
dHJpbmcgdmFsdWUgaW4gdGhlIGN1cnJlbnQgdW5pdC4gVGhlIGN1cnJlbnQKLSAgICAgKiA8Y29k
ZT4gdmFsdWVUeXBlIDwvY29kZT4gY2FuIG9ubHkgYmUgYSBzdHJpbmcgdW5pdCB0eXBlIChlLmcu
Ci0gICAgICogPGNvZGU+IENTU19VUkkgPC9jb2RlPiAsIDxjb2RlPiBDU1NfSURFTlQgPC9jb2Rl
PiBhbmQgPGNvZGU+Ci0gICAgICogQ1NTX0FUVFIgPC9jb2RlPiApLgotICAgICAqCi0gICAgICog
QGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBJTlZBTElEX0FDQ0VTU19FUlI6IFJhaXNl
cyBpZiB0aGUgQ1NTIHZhbHVlIGRvZXNuJ3QgY29udGFpbiBhCi0gICAgICogc3RyaW5nIHZhbHVl
LgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGdldFN0cmluZ1ZhbHVlICggICk7Ci0K
LSAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgQ291bnRlciB2
YWx1ZS4gSWYgdGhpcyBDU1MgdmFsdWUKLSAgICAgKiBkb2Vzbid0IGNvbnRhaW4gYSBjb3VudGVy
IHZhbHVlLCBhIDxjb2RlPiBET01FeGNlcHRpb24gPC9jb2RlPgotICAgICAqIGlzIHJhaXNlZC4g
TW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHByb3BlcnR5IGNhbgotICAg
ICAqIGJlIGFjaGlldmVkIHVzaW5nIHRoZSA8Y29kZT4gQ291bnRlciA8L2NvZGU+IGludGVyZmFj
ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIENvdW50ZXIgdmFsdWUuCi0gICAgICoKLSAg
ICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIElOVkFMSURfQUNDRVNTX0VSUjog
UmFpc2VzIGlmIHRoZSBDU1MgdmFsdWUgZG9lc24ndCBjb250YWluIGEKLSAgICAgKiBDb3VudGVy
IHZhbHVlLgotICAgICAqCi0gICAgICovCi0gICAgQ291bnRlciBnZXRDb3VudGVyVmFsdWUgKCAg
KTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSBSZWN0
IHZhbHVlLiBJZiB0aGlzIENTUyB2YWx1ZQotICAgICAqIGRvZXNuJ3QgY29udGFpbiBhIHJlY3Qg
dmFsdWUsIGEgPGNvZGU+IERPTUV4Y2VwdGlvbiA8L2NvZGU+IGlzCi0gICAgICogcmFpc2VkLiBN
b2RpZmljYXRpb24gdG8gdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgY2FuIGJlCi0g
ICAgICogYWNoaWV2ZWQgdXNpbmcgdGhlIDxjb2RlPiBSZWN0IDwvY29kZT4gaW50ZXJmYWNlLgot
ICAgICAqCi0gICAgICogQHJldHVybiBUaGUgUmVjdCB2YWx1ZS4KLSAgICAgKgotICAgICAqIEBl
eGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9BQ0NFU1NfRVJSOiBSYWlzZXMg
aWYgdGhlIENTUyB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4gYQotICAgICAqIFJlY3QgdmFsdWUuCi0g
ICAgICoKLSAgICAgKi8KLSAgICBSZWN0IGdldFJlY3RWYWx1ZSAoICApOwotCi0gICAgLyoqCi0g
ICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIFJHQiBjb2xvci4gSWYgdGhpcyBD
U1MgdmFsdWUKLSAgICAgKiBkb2Vzbid0IGNvbnRhaW4gYSBSR0IgY29sb3IgdmFsdWUsIGEgPGNv
ZGU+IERPTUV4Y2VwdGlvbgotICAgICAqIDwvY29kZT4gaXMgcmFpc2VkLiBNb2RpZmljYXRpb24g
dG8gdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUKLSAgICAgKiBwcm9wZXJ0eSBjYW4gYmUgYWNoaWV2
ZWQgdXNpbmcgdGhlIDxjb2RlPiBSR0JDb2xvciA8L2NvZGU+Ci0gICAgICogaW50ZXJmYWNlLgot
ICAgICAqCi0gICAgICogQHJldHVybiB0aGUgUkdCIGNvbG9yIHZhbHVlLgotICAgICAqCi0gICAg
ICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBJTlZBTElEX0FDQ0VTU19FUlI6IFJh
aXNlcyBpZiB0aGUgYXR0YWNoZWQgcHJvcGVydHkgY2FuJ3QKLSAgICAgKiByZXR1cm4gYSBSR0Ig
Y29sb3IgdmFsdWUuCi0gICAgICoKLSAgICAgKi8KLSAgICBSR0JDb2xvciBnZXRSR0JDb2xvclZh
bHVlICggICk7Ci0KLSNlbmRpZgotCiB9OwogCi0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RP
TQotCi0vKioKLSAqIFRoZSA8Y29kZT4gUkdCQ29sb3IgPC9jb2RlPiBpbnRlcmZhY2UgaXMgdXNl
ZCB0byByZXByZXNlbnQgYW55IDxhCi0gKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMt
Q1NTMi9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWNvbG9yIj4KLSAqIFJHQiBjb2xvciA8L2E+IHZh
bHVlLiBUaGlzIGludGVyZmFjZSByZWZsZWN0cyB0aGUgdmFsdWVzIGluIHRoZQotICogdW5kZXJs
eWluZyBzdHlsZSBwcm9wZXJ0eS4gSGVuY2UsIG1vZGlmaWNhdGlvbnMgbWFkZSB0aHJvdWdoIHRo
aXMKLSAqIGludGVyZmFjZSBtb2RpZnkgdGhlIHN0eWxlIHByb3BlcnR5LgotICoKLSAqLwotY2xh
c3MgUkdCQ29sb3IKLXsKLXB1YmxpYzoKLSAgICBSR0JDb2xvcigpOwotICAgIFJHQkNvbG9yKGNv
bnN0IFJHQkNvbG9yICZvdGhlcik7Ci0gICAgUkdCQ29sb3IoY29uc3QgUUNvbG9yICZjb2xvcik7
Ci0KLSAgICBSR0JDb2xvciAmIG9wZXJhdG9yID0gKGNvbnN0IFJHQkNvbG9yICZvdGhlcik7Ci0K
LSAgICB+UkdCQ29sb3IoKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgYXR0cmlidXRlIGlzIHVz
ZWQgZm9yIHRoZSByZWQgdmFsdWUgb2YgdGhlIFJHQiBjb2xvci4KLSAgICAgKgotICAgICAqLwot
ICAgIENTU1ByaW1pdGl2ZVZhbHVlIHJlZCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVGhp
cyBhdHRyaWJ1dGUgaXMgdXNlZCBmb3IgdGhlIGdyZWVuIHZhbHVlIG9mIHRoZSBSR0IgY29sb3Iu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSBncmVlbigpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBmb3IgdGhlIGJsdWUgdmFs
dWUgb2YgdGhlIFJHQiBjb2xvci4KLSAgICAgKgotICAgICAqLwotICAgIENTU1ByaW1pdGl2ZVZh
bHVlIGJsdWUoKSBjb25zdDsKLQotICAgIGNvbnN0IFFDb2xvciAmY29sb3IoKSBjb25zdCB7IHJl
dHVybiBtX2NvbG9yOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBRQ29sb3IgbV9jb2xvcjsKLX07Ci0K
LWNsYXNzIFJlY3RJbXBsOwotCi0vKioKLSAqIFRoZSA8Y29kZT4gUmVjdCA8L2NvZGU+IGludGVy
ZmFjZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhbnkgPGEKLSAqIGhyZWY9Imh0dHA6Ly93d3cudzMu
b3JnL1RSL1JFQy1DU1MyL3Zpc3VmeC5odG1sI3ZhbHVlLWRlZi1zaGFwZSI+Ci0gKiByZWN0IDwv
YT4gdmFsdWUuIFRoaXMgaW50ZXJmYWNlIHJlZmxlY3RzIHRoZSB2YWx1ZXMgaW4gdGhlCi0gKiB1
bmRlcmx5aW5nIHN0eWxlIHByb3BlcnR5LiBIZW5jZSwgbW9kaWZpY2F0aW9ucyBtYWRlIHRocm91
Z2ggdGhpcwotICogaW50ZXJmYWNlIG1vZGlmeSB0aGUgc3R5bGUgcHJvcGVydHkuCi0gKgotICov
Ci1jbGFzcyBSZWN0Ci17Ci0gICAgZnJpZW5kIGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwotcHVi
bGljOgotICAgIFJlY3QoKTsKLSAgICBSZWN0KGNvbnN0IFJlY3QgJm90aGVyKTsKLQotICAgIFJl
Y3QgJiBvcGVyYXRvciA9IChjb25zdCBSZWN0ICZvdGhlcik7Ci0KLSAgICB+UmVjdCgpOwotCi0g
ICAgLyoqCi0gICAgICogVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBmb3IgdGhlIHRvcCBvZiB0aGUg
cmVjdC4KLSAgICAgKgotICAgICAqLwotICAgIENTU1ByaW1pdGl2ZVZhbHVlIHRvcCgpIGNvbnN0
OwotCi0gICAgLyoqCi0gICAgICogVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBmb3IgdGhlIHJpZ2h0
IG9mIHRoZSByZWN0LgotICAgICAqCi0gICAgICovCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUgcmln
aHQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgZm9y
IHRoZSBib3R0b20gb2YgdGhlIHJlY3QuCi0gICAgICoKLSAgICAgKi8KLSAgICBDU1NQcmltaXRp
dmVWYWx1ZSBib3R0b20oKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoaXMgYXR0cmlidXRl
IGlzIHVzZWQgZm9yIHRoZSBsZWZ0IG9mIHRoZSByZWN0LgotICAgICAqCi0gICAgICovCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUgbGVmdCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQGludGVy
bmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwotICAgIFJlY3RJbXBsICpo
YW5kbGUoKSBjb25zdDsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgUmVjdEltcGwgKmltcGw7Ci0gICAgUmVjdChSZWN0SW1wbCAqaSk7Ci19OwotCi1jbGFzcyBD
b3VudGVySW1wbDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+IENvdW50ZXIgPC9jb2RlPiBpbnRlcmZh
Y2UgaXMgdXNlZCB0byByZXByZXNlbnQgYW55IDxhCi0gKiBocmVmPSJodHRwOi8vd3d3LnczLm9y
Zy9UUi9SRUMtQ1NTMi9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWNvdW50ZXIiPgotICogY291bnRl
ciBvciBjb3VudGVycyBmdW5jdGlvbiA8L2E+IHZhbHVlLiBUaGlzIGludGVyZmFjZSByZWZsZWN0
cwotICogdGhlIHZhbHVlcyBpbiB0aGUgdW5kZXJseWluZyBzdHlsZSBwcm9wZXJ0eS4gSGVuY2Us
IG1vZGlmaWNhdGlvbnMKLSAqIG1hZGUgdGhyb3VnaCB0aGlzIGludGVyZmFjZSBtb2RpZnkgdGhl
IHN0eWxlIHByb3BlcnR5LgotICoKLSAqLwotY2xhc3MgQ291bnRlcgotewotICAgIGZyaWVuZCBj
bGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKLXB1YmxpYzoKLSAgICBDb3VudGVyKCk7Ci0gICAgQ291
bnRlcihjb25zdCBDb3VudGVyICZvdGhlcik7Ci1wdWJsaWM6Ci0KLSAgICBDb3VudGVyICYgb3Bl
cmF0b3IgPSAoY29uc3QgQ291bnRlciAmb3RoZXIpOwotCi0gICAgfkNvdW50ZXIoKTsKLQotICAg
IC8qKgotICAgICAqIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgZm9yIHRoZSBpZGVudGlmaWVyIG9m
IHRoZSBjb3VudGVyLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGlkZW50aWZpZXIo
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgZm9yIHRo
ZSBzdHlsZSBvZiB0aGUgbGlzdC4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBsaXN0
U3R5bGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQg
Zm9yIHRoZSBzZXBhcmF0b3Igb2YgbmVzdGVkIGNvdW50ZXJzLgotICAgICAqCi0gICAgICovCi0g
ICAgRE9NU3RyaW5nIHNlcGFyYXRvcigpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQGludGVy
bmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwotICAgIENvdW50ZXJJbXBs
ICpoYW5kbGUoKSBjb25zdDsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6
Ci0gICAgQ291bnRlckltcGwgKmltcGw7Ci0gICAgQ291bnRlcihDb3VudGVySW1wbCAqaSk7Ci19
OwotCi0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBraHRtbC9kb20v
ZG9tMl9ldmVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2RvbS9kb20yX2V2ZW50cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAt
cCAtdSAtcjEuMjYga2h0bWwvZG9tL2RvbTJfZXZlbnRzLmNwcAotLS0ga2h0bWwvZG9tL2RvbTJf
ZXZlbnRzLmNwcAkzIE9jdCAyMDA1IDIxOjEyOjExIC0wMDAwCTEuMjYKKysrIGtodG1sL2RvbS9k
b20yX2V2ZW50cy5jcHAJMjkgTm92IDIwMDUgMjI6NTE6MzkgLTAwMDAKQEAgLTI2LDEyICsyNiw2
IEBACiAKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAKLSNpZiAhS0hUTUxfTk9f
Q1BMVVNQTFVTX0RPTQotCi0jaW5jbHVkZSAiZG9tL2RvbTJfdmlld3MuaCIKLSNpbmNsdWRlICJk
b20vZG9tX2V4Y2VwdGlvbi5oIgotCi0jZW5kaWYKIAogbmFtZXNwYWNlIERPTSB7CiAKQEAgLTUz
LDEyICs0Nyw3IEBAIEV2ZW50TGlzdGVuZXI6On5FdmVudExpc3RlbmVyKCkKIAogdm9pZCBFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudEltcGwoRXZlbnRJbXBsICpldnQsIGJvb2wgaXNXaW5kb3dF
dmVudCkKIHsKLSNpZiBLSFRNTF9OT19DUExVU1BMVVNfRE9NCiAgICAgaGFuZGxlRXZlbnQoZXZ0
LCBpc1dpbmRvd0V2ZW50KTsKLSNlbHNlCi0gICAgRXZlbnQgd3JhcHBlcihldnQpOwotICAgIGhh
bmRsZUV2ZW50KHdyYXBwZXIsIGlzV2luZG93RXZlbnQpOwotI2VuZGlmCiB9CiAKIHZvaWQgRXZl
bnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoRXZlbnRMaXN0ZW5lckV2ZW50LCBib29sKQpAQCAtNzAs
NzA4ICs1OSw0IEBAIERPTVN0cmluZyBFdmVudExpc3RlbmVyOjpldmVudExpc3RlbmVyVHkKICAg
ICByZXR1cm4gIiI7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAhS0hUTUxf
Tk9fQ1BMVVNQTFVTX0RPTQotCi1FdmVudDo6RXZlbnQoKQotewotICAgIGltcGwgPSAwOwotfQot
Ci0KLUV2ZW50OjpFdmVudChjb25zdCBFdmVudCAmb3RoZXIpCi17Ci0gICAgaW1wbCA9IG90aGVy
LmltcGw7Ci0gICAgaWYgKGltcGwpIGltcGwtPnJlZigpOwotfQotCi1FdmVudDo6RXZlbnQoRXZl
bnRJbXBsICppKQotewotICAgIGltcGwgPSBpOwotICAgIGlmIChpbXBsKSBpbXBsLT5yZWYoKTsK
LX0KLQotRXZlbnQ6On5FdmVudCgpCi17Ci0gICAgaWYgKGltcGwpIGltcGwtPmRlcmVmKCk7Ci19
Ci0KLUV2ZW50ICZFdmVudDo6b3BlcmF0b3IgPSAoY29uc3QgRXZlbnQgJm90aGVyKQotewotICAg
IGlmICggaW1wbCAhPSBvdGhlci5pbXBsICkgewotICAgIGlmKGltcGwpIGltcGwtPmRlcmVmKCk7
Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYoaW1wbCkgaW1wbC0+cmVmKCk7Ci0gICAg
fQotICAgIHJldHVybiAqdGhpczsKLX0KLQotRE9NU3RyaW5nIEV2ZW50Ojp0eXBlKCkgY29uc3QK
LXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5W
QUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPnR5cGUoKTsKLX0KLQotTm9kZSBF
dmVudDo6dGFyZ2V0KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0
aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwt
PnRhcmdldCgpOwotfQotCi1Ob2RlIEV2ZW50OjpjdXJyZW50VGFyZ2V0KCkgY29uc3QKLXsKLSAg
ICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9T
VEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPmN1cnJlbnRUYXJnZXQoKTsKLX0KLQotdW5z
aWduZWQgc2hvcnQgRXZlbnQ6OmV2ZW50UGhhc2UoKSBjb25zdAotewotICAgIGlmICghaW1wbCkK
LQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0K
LSAgICByZXR1cm4gaW1wbC0+ZXZlbnRQaGFzZSgpOwotfQotCi1ib29sIEV2ZW50OjpidWJibGVz
KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2Vw
dGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPmJ1YmJsZXMoKTsK
LX0KLQotYm9vbCBFdmVudDo6Y2FuY2VsYWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQot
CXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQot
ICAgIHJldHVybiBpbXBsLT5jYW5jZWxhYmxlKCk7Ci19Ci0KLURPTVRpbWVTdGFtcCBFdmVudDo6
dGltZVN0YW1wKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9u
KERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPnRp
bWVTdGFtcCgpOwotfQotCi12b2lkIEV2ZW50OjpzdG9wUHJvcGFnYXRpb24oKQotewotICAgIGlm
ICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRF
X0VSUik7Ci0KLSAgICBpbXBsLT5zdG9wUHJvcGFnYXRpb24oKTsKLX0KLQotdm9pZCBFdmVudDo6
cHJldmVudERlZmF1bHQoKQotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24o
RE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBpbXBsLT5wcmV2ZW50RGVm
YXVsdCgpOwotfQotCi12b2lkIEV2ZW50Ojppbml0RXZlbnQoY29uc3QgRE9NU3RyaW5nICZldmVu
dFR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpCi17Ci0gICAg
aWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RB
VEVfRVJSKTsKLQotICAgIGltcGwtPmluaXRFdmVudChldmVudFR5cGVBcmcsY2FuQnViYmxlQXJn
LGNhbmNlbGFibGVBcmcpOwotfQotCi1FdmVudEltcGwgKkV2ZW50OjpoYW5kbGUoKSBjb25zdAot
ewotICAgIHJldHVybiBpbXBsOwotfQotCi1ib29sIEV2ZW50Ojppc051bGwoKSBjb25zdAotewot
ICAgIHJldHVybiAoaW1wbCA9PSAwKTsKLX0KLQotdm9pZCBFdmVudDo6c2V0Q2FuY2VsQnViYmxl
KGJvb2wgY2FuY2VsKQotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9N
RXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBpbXBsLT5zZXRDYW5jZWxCdWJi
bGUoY2FuY2VsKTsKLX0KLQotdm9pZCBFdmVudDo6c2V0RGVmYXVsdFByZXZlbnRlZChib29sIGRl
ZmF1bHRQcmV2ZW50ZWQpCi17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihE
T01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIGltcGwtPnNldERlZmF1bHRQ
cmV2ZW50ZWQoZGVmYXVsdFByZXZlbnRlZCk7Ci19Ci0gCi1ib29sIEV2ZW50OjpnZXRDYW5jZWxC
dWJibGUoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9N
RXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gaW1wbC0+Z2V0Q2Fu
Y2VsQnViYmxlKCk7Ci19Ci0KLWJvb2wgRXZlbnQ6OmRlZmF1bHRQcmV2ZW50ZWQoKSBjb25zdAot
ewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZB
TElEX1NUQVRFX0VSUik7Ci0gICAgCi0gICAgcmV0dXJuIGltcGwtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmbmRlZiBTQVZFX1NQQUNFCi0K
LUV2ZW50RXhjZXB0aW9uOjpFdmVudEV4Y2VwdGlvbih1bnNpZ25lZCBzaG9ydCBfY29kZSkKLXsK
LSAgICBjb2RlID0gX2NvZGU7Ci19Ci0KLUV2ZW50RXhjZXB0aW9uOjpFdmVudEV4Y2VwdGlvbihj
b25zdCBFdmVudEV4Y2VwdGlvbiAmb3RoZXIpCi17Ci0gICAgY29kZSA9IG90aGVyLmNvZGU7Ci19
Ci0KLUV2ZW50RXhjZXB0aW9uICYgRXZlbnRFeGNlcHRpb246Om9wZXJhdG9yID0gKGNvbnN0IEV2
ZW50RXhjZXB0aW9uICZvdGhlcikKLXsKLSAgICBjb2RlID0gb3RoZXIuY29kZTsKLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1VSUV2
ZW50OjpVSUV2ZW50KCkgOiBFdmVudCgpCi17Ci19Ci0KLVVJRXZlbnQ6OlVJRXZlbnQoY29uc3Qg
VUlFdmVudCAmb3RoZXIpIDogRXZlbnQob3RoZXIpCi17Ci19Ci0KLVVJRXZlbnQ6OlVJRXZlbnQo
Y29uc3QgRXZlbnQgJm90aGVyKSA6IEV2ZW50KCkKLXsKLSAgICAoKnRoaXMpPW90aGVyOwotfQot
Ci1VSUV2ZW50OjpVSUV2ZW50KFVJRXZlbnRJbXBsICppbXBsKSA6IEV2ZW50KGltcGwpCi17Ci19
Ci0KLVVJRXZlbnQgJlVJRXZlbnQ6Om9wZXJhdG9yID0gKGNvbnN0IFVJRXZlbnQgJm90aGVyKQot
ewotICAgIEV2ZW50OjpvcGVyYXRvciA9IChvdGhlcik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci1VSUV2ZW50ICZVSUV2ZW50OjpvcGVyYXRvciA9IChjb25zdCBFdmVudCAmb3RoZXIpCi17Ci0g
ICAgRXZlbnQgZTsKLSAgICBlID0gb3RoZXI7Ci0gICAgaWYgKCFlLmlzTnVsbCgpICYmICFlLmhh
bmRsZSgpLT5pc1VJRXZlbnQoKSkgewotCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7Ci0JaW1w
bCA9IDA7Ci0gICAgfSBlbHNlCi0JRXZlbnQ6Om9wZXJhdG9yID0gKG90aGVyKTsKLSAgICByZXR1
cm4gKnRoaXM7Ci19Ci0KLVVJRXZlbnQ6On5VSUV2ZW50KCkKLXsKLX0KLQotQWJzdHJhY3RWaWV3
IFVJRXZlbnQ6OnZpZXcoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNl
cHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VUlFdmVudEltcGwqPihpbXBsKS0+dmlldygpOwotfQotCi1pbnQgVUlFdmVudDo6
ZGV0YWlsKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERP
TUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFVJRXZlbnRJbXBsKj4oaW1wbCktPmRldGFpbCgpOwotfQotCi1pbnQgVUlFdmVudDo6a2V5Q29k
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNl
cHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLSAgICAKLSAgICBpZiAoaW1wbC0+aXNLZXlib2Fy
ZEV2ZW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCo+
KGltcGwpLT5rZXlDb2RlKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotaW50
IFVJRXZlbnQ6OmNoYXJDb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotICAgIAotICAgIGlm
IChpbXBsLT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtl
eWJvYXJkRXZlbnRJbXBsKj4oaW1wbCktPmNoYXJDb2RlKCk7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VYKCkgY29uc3QKLXsKLSAgICBpZiAoIWlt
cGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIp
OwotICAgIAotICAgIGlmIChpbXBsLT5pc01vdXNlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCktPmNsaWVudFgoKTsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6cGFnZVkoKSBjb25zdAotewotICAg
IGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NU
QVRFX0VSUik7Ci0gICAgCi0gICAgaWYgKGltcGwtPmlzTW91c2VFdmVudCgpKQotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+Y2xpZW50WSgpOwotICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2ZW50OjpsYXllclgoKSBjb25z
dAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJ
TlZBTElEX1NUQVRFX0VSUik7Ci0gICAgCi0gICAgaWYgKGltcGwtPmlzTW91c2VFdmVudCgpKQot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+bGF5ZXJY
KCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OmxheWVy
WSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNl
cHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLSAgICAKLSAgICBpZiAoaW1wbC0+aXNNb3VzZUV2
ZW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwp
LT5sYXllclkoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVu
dDo6d2hpY2goKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24o
RE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICAvLyBOb3RlOiBUaGlzIHBy
b3BlcnR5IHN1cHBvcnRzIGJvdGgga2V5IGV2ZW50cyBhbmQgbW91c2UgZXZlbnRzCi0KLSAgICAv
LyBOZXRzY2FwZSdzICJ3aGljaCIgcmV0dXJucyBhIHZpcnR1YWwga2V5IGNvZGUgZm9yIGtleWRv
d24gYW5kIGtleXVwLCBhbmQgYSBjaGFyYWN0ZXIgY29kZSBmb3Iga2V5cHJlc3MuCi0gICAgLy8g
VGhhdCdzIGV4YWN0bHkgd2hhdCBJRSdzICJrZXlDb2RlIiByZXR1cm5zLgotICAgIGlmIChpbXBs
LT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnRJbXBsKj4oaW1wbCktPmtleUNvZGUoKTsKLQotICAgIC8vIEZvciBraHRtbCwgdGhlIHJl
dHVybiB2YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQgbW91c2UgYnV0dG9ucyBhcmUg
MCwgMSwgMiwgcmVzcGVjdGl2ZWx5LgotICAgIC8vIEZvciB0aGUgTmV0c2NhcGUgIndoaWNoIiBw
cm9wZXJ0eSwgdGhlIHJldHVybiB2YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQgbW91
c2UgYnV0dG9ucyBhcmUgMSwgMiwgMywgcmVzcGVjdGl2ZWx5LiAKLSAgICAvLyBTbyB3ZSBjYW4g
anVzdCBhZGQgMSB0byB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2FsbGluZyBidXR0b24oKS4KLSAg
ICBpZiAoaW1wbC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50SW1wbCo+KGltcGwpLT5idXR0b24oKSArIDE7Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQotCi12b2lkIFVJRXZlbnQ6OmluaXRVSUV2ZW50KGNvbnN0IERPTVN0cmluZyAmdHlwZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWJzdHJhY3RWaWV3ICZ2aWV3QXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFpbEFyZykKLXsKLSAgICBp
ZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFU
RV9FUlIpOwotCi0gICAgc3RhdGljX2Nhc3Q8VUlFdmVudEltcGwqPihpbXBsKS0+aW5pdFVJRXZl
bnQodHlwZUFyZyxjYW5CdWJibGVBcmcsY2FuY2VsYWJsZUFyZywKLQkJCQkJCSB2aWV3QXJnLmhh
bmRsZSgpLGRldGFpbEFyZyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1vdXNl
RXZlbnQ6Ok1vdXNlRXZlbnQoKSA6IFVJRXZlbnQoKQotewotfQotCi1Nb3VzZUV2ZW50OjpNb3Vz
ZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnQgJm90aGVyKSA6IFVJRXZlbnQob3RoZXIpCi17Ci19Ci0K
LU1vdXNlRXZlbnQ6Ok1vdXNlRXZlbnQoY29uc3QgRXZlbnQgJm90aGVyKSA6IFVJRXZlbnQoKQot
ewotICAgICgqdGhpcyk9b3RoZXI7Ci19Ci0KLU1vdXNlRXZlbnQ6Ok1vdXNlRXZlbnQoTW91c2VF
dmVudEltcGwgKmltcGwpIDogVUlFdmVudChpbXBsKQotewotfQotCi1Nb3VzZUV2ZW50ICZNb3Vz
ZUV2ZW50OjpvcGVyYXRvciA9IChjb25zdCBNb3VzZUV2ZW50ICZvdGhlcikKLXsKLSAgICBVSUV2
ZW50OjpvcGVyYXRvciA9IChvdGhlcik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1Nb3VzZUV2
ZW50ICZNb3VzZUV2ZW50OjpvcGVyYXRvciA9IChjb25zdCBFdmVudCAmb3RoZXIpCi17Ci0gICAg
RXZlbnQgZTsKLSAgICBlID0gb3RoZXI7Ci0gICAgaWYgKCFlLmlzTnVsbCgpICYmICFlLmhhbmRs
ZSgpLT5pc01vdXNlRXZlbnQoKSkgewotCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7Ci0JaW1w
bCA9IDA7Ci0gICAgfSBlbHNlCi0JVUlFdmVudDo6b3BlcmF0b3IgPSAob3RoZXIpOwotICAgIHJl
dHVybiAqdGhpczsKLX0KLQotTW91c2VFdmVudDo6fk1vdXNlRXZlbnQoKQotewotfQotCi1pbnQg
TW91c2VFdmVudDo6c2NyZWVuWCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERP
TUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5zY3JlZW5YKCk7Ci19Ci0KLWlu
dCBNb3VzZUV2ZW50OjpzY3JlZW5ZKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cg
RE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCktPnNjcmVlblkoKTsKLX0KLQot
aW50IE1vdXNlRXZlbnQ6OmNsaWVudFgoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJv
dyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+Y2xpZW50WCgpOwotfQot
Ci1pbnQgTW91c2VFdmVudDo6Y2xpZW50WSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRo
cm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5jbGllbnRZKCk7Ci19
Ci0KLWJvb2wgTW91c2VFdmVudDo6Y3RybEtleSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQot
CXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5jdHJsS2V5KCk7
Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6c2hpZnRLZXkoKSBjb25zdAotewotICAgIGlmICghaW1w
bCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+c2hpZnRL
ZXkoKTsKLX0KLQotYm9vbCBNb3VzZUV2ZW50OjphbHRLZXkoKSBjb25zdAotewotICAgIGlmICgh
aW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VS
Uik7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBsKS0+YWx0
S2V5KCk7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6bWV0YUtleSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVf
RVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5t
ZXRhS2V5KCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IE1vdXNlRXZlbnQ6OmJ1dHRvbigpIGNvbnN0
Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklO
VkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1w
bCo+KGltcGwpLT5idXR0b24oKTsKLX0KLQotTm9kZSBNb3VzZUV2ZW50OjpyZWxhdGVkVGFyZ2V0
KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2Vw
dGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE1vdXNl
RXZlbnRJbXBsKj4oaW1wbCktPnJlbGF0ZWRUYXJnZXQoKTsKLX0KLQotdm9pZCBNb3VzZUV2ZW50
Ojppbml0TW91c2VFdmVudChjb25zdCBET01TdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFic3RyYWN0VmlldyAmdmlld0FyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHNob3J0IGJ1dHRvbkFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IE5vZGUgJnJlbGF0ZWRUYXJnZXRBcmcpCi17Ci0gICAgaWYgKCFpbXBsKQotCXRo
cm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAg
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCktPmluaXRNb3VzZUV2ZW50KHR5cGVB
cmcsY2FuQnViYmxlQXJnLAotCWNhbmNlbGFibGVBcmcsdmlld0FyZy5oYW5kbGUoKSxkZXRhaWxB
cmcsc2NyZWVuWEFyZyxzY3JlZW5ZQXJnLGNsaWVudFhBcmcsCi0JY2xpZW50WUFyZyxjdHJsS2V5
QXJnLGFsdEtleUFyZyxzaGlmdEtleUFyZyxtZXRhS2V5QXJnLGJ1dHRvbkFyZywKLQlyZWxhdGVk
VGFyZ2V0QXJnLmhhbmRsZSgpKTsKLX0KLQotCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LU11dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoKSA6IEV2ZW50KCkKLXsKLX0KLQotTXV0YXRp
b25FdmVudDo6TXV0YXRpb25FdmVudChjb25zdCBNdXRhdGlvbkV2ZW50ICZvdGhlcikgOiBFdmVu
dChvdGhlcikKLXsKLX0KLQotTXV0YXRpb25FdmVudDo6TXV0YXRpb25FdmVudChjb25zdCBFdmVu
dCAmb3RoZXIpIDogRXZlbnQoKQotewotICAgICgqdGhpcyk9b3RoZXI7Ci19Ci0KLU11dGF0aW9u
RXZlbnQ6Ok11dGF0aW9uRXZlbnQoTXV0YXRpb25FdmVudEltcGwgKmltcGwpIDogRXZlbnQoaW1w
bCkKLXsKLX0KLQotTXV0YXRpb25FdmVudCAmTXV0YXRpb25FdmVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTXV0YXRpb25FdmVudCAmb3RoZXIpCi17Ci0gICAgRXZlbnQ6Om9wZXJhdG9yID0gKG90aGVy
KTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLU11dGF0aW9uRXZlbnQgJk11dGF0aW9uRXZlbnQ6
Om9wZXJhdG9yID0gKGNvbnN0IEV2ZW50ICZvdGhlcikKLXsKLSAgICBFdmVudCBlOwotICAgIGUg
PSBvdGhlcjsKLSAgICBpZiAoIWUuaXNOdWxsKCkgJiYgIWUuaGFuZGxlKCktPmlzTXV0YXRpb25F
dmVudCgpKSB7Ci0JaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKLQlpbXBsID0gMDsKLSAgICB9
IGVsc2UKLQlFdmVudDo6b3BlcmF0b3IgPSAob3RoZXIpOwotICAgIHJldHVybiAqdGhpczsKLX0K
LQotTXV0YXRpb25FdmVudDo6fk11dGF0aW9uRXZlbnQoKQotewotfQotCi1Ob2RlIE11dGF0aW9u
RXZlbnQ6OnJlbGF0ZWROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnRJbXBsKj4oaW1wbCktPnJlbGF0ZWROb2RlKCk7Ci19
Ci0KLURPTVN0cmluZyBNdXRhdGlvbkV2ZW50OjpwcmV2VmFsdWUoKSBjb25zdAotewotICAgIGlm
ICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRF
X0VSUik7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudEltcGwqPihpbXBs
KS0+cHJldlZhbHVlKCk7Ci19Ci0KLURPTVN0cmluZyBNdXRhdGlvbkV2ZW50OjpuZXdWYWx1ZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRp
b246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhdGlv
bkV2ZW50SW1wbCo+KGltcGwpLT5uZXdWYWx1ZSgpOwotfQotCi1ET01TdHJpbmcgTXV0YXRpb25F
dmVudDo6YXR0ck5hbWUoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNl
cHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8TXV0YXRpb25FdmVudEltcGwqPihpbXBsKS0+YXR0ck5hbWUoKTsKLX0KLQotdW5z
aWduZWQgc2hvcnQgTXV0YXRpb25FdmVudDo6YXR0ckNoYW5nZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVf
RVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50SW1wbCo+KGltcGwp
LT5hdHRyQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgTXV0YXRpb25FdmVudDo6aW5pdE11dGF0aW9uRXZl
bnQoY29uc3QgRE9NU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBOb2RlICZyZWxhdGVkTm9kZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmcHJldlZhbHVlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5n
ICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IERPTVN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJnKQotewotICAgIGlmICghaW1w
bCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7
Ci0KLSAgICBzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50SW1wbCo+KGltcGwpLT5pbml0TXV0YXRp
b25FdmVudCh0eXBlQXJnLAotCWNhbkJ1YmJsZUFyZyxjYW5jZWxhYmxlQXJnLHJlbGF0ZWROb2Rl
QXJnLmhhbmRsZSgpLHByZXZWYWx1ZUFyZywKLQluZXdWYWx1ZUFyZyxhdHRyTmFtZUFyZyxhdHRy
Q2hhbmdlQXJnKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotS2V5Ym9hcmRFdmVu
dDo6S2V5Ym9hcmRFdmVudCgpCi17Ci19Ci0KLUtleWJvYXJkRXZlbnQ6OktleWJvYXJkRXZlbnQo
Y29uc3QgS2V5Ym9hcmRFdmVudCAmb3RoZXIpIDogVUlFdmVudChvdGhlcikKLXsKLX0KLQotS2V5
Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBFdmVudCAmb3RoZXIpCi17Ci0gICAgKnRo
aXMgPSBvdGhlcjsKLX0KLQotS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChLZXlib2FyZEV2
ZW50SW1wbCAqaW1wbCkgOiBVSUV2ZW50KGltcGwpCi17Ci19Ci0KLUtleWJvYXJkRXZlbnQgJktl
eWJvYXJkRXZlbnQ6Om9wZXJhdG9yID0gKGNvbnN0IEtleWJvYXJkRXZlbnQgJm90aGVyKQotewot
ICAgIFVJRXZlbnQ6Om9wZXJhdG9yID0gKG90aGVyKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LUtleWJvYXJkRXZlbnQgJktleWJvYXJkRXZlbnQ6Om9wZXJhdG9yID0gKGNvbnN0IEV2ZW50ICZv
dGhlcikKLXsKLSAgICBFdmVudCBlOwotICAgIGUgPSBvdGhlcjsKLSAgICBpZiAoIWUuaXNOdWxs
KCkgJiYgIWUuaGFuZGxlKCktPmlzS2V5Ym9hcmRFdmVudCgpKSB7Ci0JaWYgKCBpbXBsICkgaW1w
bC0+ZGVyZWYoKTsKLQlpbXBsID0gMDsKLSAgICB9IGVsc2UKLQlVSUV2ZW50OjpvcGVyYXRvciA9
IChvdGhlcik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1LZXlib2FyZEV2ZW50Ojp+S2V5Ym9h
cmRFdmVudCgpCi17Ci19Ci0KLURPTVN0cmluZyBLZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVy
KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2Vw
dGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEtleWJv
YXJkRXZlbnRJbXBsKj4oaW1wbCktPmtleUlkZW50aWZpZXIoKTsKLX0KLQotdW5zaWduZWQgS2V5
Ym9hcmRFdmVudDo6a2V5TG9jYXRpb24oKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJv
dyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudEltcGwqPihpbXBsKS0+a2V5TG9jYXRpb24o
KTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50OjpjdHJsS2V5KCkgY29uc3QKLXsKLSAgICBpZiAo
IWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9F
UlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnRJbXBsKj4oaW1wbCkt
PmN0cmxLZXkoKTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50OjpzaGlmdEtleSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFM
SURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1w
bCo+KGltcGwpLT5zaGlmdEtleSgpOwotfQotCi1ib29sIEtleWJvYXJkRXZlbnQ6OmFsdEtleSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRp
b246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxLZXlib2Fy
ZEV2ZW50SW1wbCo+KGltcGwpLT5hbHRLZXkoKTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50Ojpt
ZXRhS2V5KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERP
TUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PEtleWJvYXJkRXZlbnRJbXBsKj4oaW1wbCktPm1ldGFLZXkoKTsKLX0KLQotYm9vbCBLZXlib2Fy
ZEV2ZW50OjphbHRHcmFwaEtleSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERP
TUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCo+KGltcGwpLT5hbHRHcmFwaEtleSgpOwot
fQotCi12b2lkIEtleWJvYXJkRXZlbnQ6OmluaXRLZXlib2FyZEV2ZW50KGNvbnN0IERPTVN0cmlu
ZyAmdHlwZUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEFic3RyYWN0VmlldyAmdmlld0FyZywgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZrZXlJZGVudGlmaWVyQXJnLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlv
bkFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJs
S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNo
aWZ0S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGFsdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtZXRhS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGFsdEdyYXBoS2V5QXJnKQotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRp
b24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50SW1wbCo+KGltcGwpLT5pbml0S2V5Ym9hcmRFdmVudCh0eXBlQXJnLGNhbkJ1
YmJsZUFyZywKLQljYW5jZWxhYmxlQXJnLHZpZXdBcmcuaGFuZGxlKCksa2V5SWRlbnRpZmllckFy
ZyxrZXlMb2NhdGlvbkFyZyxjdHJsS2V5QXJnLGFsdEtleUFyZywKLSAgICAgICAgc2hpZnRLZXlB
cmcsbWV0YUtleUFyZyxhbHRHcmFwaEtleUFyZyk7Ci19Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZQpJbmRleDoga2h0bWwvZG9t
L2RvbTJfZXZlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZG9tL2RvbTJfZXZlbnRzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtcCAt
dSAtcjEuMjAga2h0bWwvZG9tL2RvbTJfZXZlbnRzLmgKLS0tIGtodG1sL2RvbS9kb20yX2V2ZW50
cy5oCTE2IFNlcCAyMDA1IDIyOjQyOjAzIC0wMDAwCTEuMjAKKysrIGtodG1sL2RvbS9kb20yX2V2
ZW50cy5oCTI5IE5vdiAyMDA1IDIyOjUxOjM5IC0wMDAwCkBAIC0yNCw0MiArMjQsMTQgQEAKICNp
Zm5kZWYgX0RPTV9FdmVudHNfaF8KICNkZWZpbmUgX0RPTV9FdmVudHNfaF8KIAotI2luY2x1ZGUg
PGRvbS9kb21fbWlzYy5oPgogI2luY2x1ZGUgPGRvbS9kb21fc3RyaW5nLmg+CiAKLSNpZiAhS0hU
TUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0jaW5jbHVkZSA8ZG9tL2RvbV9ub2RlLmg+Ci0KLSNlbmRp
ZgotCiBuYW1lc3BhY2UgRE9NIHsKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLWNs
YXNzIEV2ZW50OwotY2xhc3MgRXZlbnRFeGNlcHRpb247Ci1jbGFzcyBVSUV2ZW50OwotY2xhc3Mg
TW91c2VFdmVudDsKLWNsYXNzIE11dGF0aW9uRXZlbnQ7Ci1jbGFzcyBLZXlib2FyZEV2ZW50Owot
Y2xhc3MgQWJzdHJhY3RWaWV3OwotCi1jbGFzcyBVSUV2ZW50SW1wbDsKLWNsYXNzIE1vdXNlRXZl
bnRJbXBsOwotY2xhc3MgTXV0YXRpb25FdmVudEltcGw7Ci1jbGFzcyBLZXlib2FyZEV2ZW50SW1w
bDsKLQotI2VuZGlmCi0KIGNsYXNzIEV2ZW50TGlzdGVuZXJJbXBsOwogY2xhc3MgRXZlbnRJbXBs
OwogCi0jaWYgS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQogdHlwZWRlZiBFdmVudEltcGwgKkV2ZW50
TGlzdGVuZXJFdmVudDsKLSNlbHNlCi10eXBlZGVmIEV2ZW50ICZFdmVudExpc3RlbmVyRXZlbnQ7
Ci0jZW5kaWYKIAogLyoqCiAgKiBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCkBAIC03Niw3ICs0
OCw3IEBAIHR5cGVkZWYgRXZlbnQgJkV2ZW50TGlzdGVuZXJFdmVudDsKICAqIGFkZCB0aGVtIG1h
bnVhbGx5LgogICoKICAqLwotY2xhc3MgRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBEb21TaGFyZWQg
eworY2xhc3MgRXZlbnRMaXN0ZW5lciA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPEV2ZW50TGlzdGVu
ZXI+IHsKIHB1YmxpYzoKICAgICBFdmVudExpc3RlbmVyKCk7CiAgICAgdmlydHVhbCB+RXZlbnRM
aXN0ZW5lcigpOwpAQCAtMTI4LDI3ICsxMDAsNyBAQCBwcm90ZWN0ZWQ6CiAgKgogICovCiBjbGFz
cyBFdmVudCB7Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgZnJpZW5kIGNs
YXNzIERvY3VtZW50OwotICAgIGZyaWVuZCBjbGFzcyBOb2RlSW1wbDsKLSAgICBmcmllbmQgY2xh
c3MgRG9jdW1lbnRJbXBsOwotCi0jZW5kaWYKLQogcHVibGljOgotCi0jaWYgIUtIVE1MX05PX0NQ
TFVTUExVU19ET00KLQotICAgIEV2ZW50KCk7Ci0gICAgRXZlbnQoY29uc3QgRXZlbnQgJm90aGVy
KTsKLSAgICB2aXJ0dWFsIH5FdmVudCgpOwotCi0gICAgRXZlbnQgJiBvcGVyYXRvciA9IChjb25z
dCBFdmVudCAmb3RoZXIpOwotCi0jZW5kaWYKLQogICAgIC8qKgogICAgICAqIEFuIGludGVnZXIg
aW5kaWNhdGluZyB3aGljaCBwaGFzZSBvZiBldmVudCBmbG93IGlzIGJlaW5nIHByb2Nlc3NlZC4K
ICAgICAgKgpAQCAtMTY1LDEzMiArMTE3LDYgQEAgcHVibGljOgogCUFUX1RBUkdFVCA9IDIsCiAJ
QlVCQkxJTkdfUEhBU0UgPSAzCiAgICAgfTsKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9N
Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgKGNhc2UtaW5zZW5zaXRp
dmUpLiBUaGUgbmFtZSBtdXN0IGJlIGFuIFhNTCBuYW1lLgotICAgICAqCi0gICAgICovCi0gICAg
RE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNh
dGUgdGhlIEV2ZW50VGFyZ2V0IHRvIHdoaWNoIHRoZSBldmVudCB3YXMgb3JpZ2luYWxseQotICAg
ICAqIGRpc3BhdGNoZWQuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIHRhcmdldCgpIGNvbnN0
OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0ZSB0aGUgRXZlbnRUYXJnZXQgd2hv
c2UgRXZlbnRMaXN0ZW5lcnMgYXJlIGN1cnJlbnRseQotICAgICAqIGJlaW5nIHByb2Nlc3NlZC4g
VGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGR1cmluZyBjYXB0dXJpbmcgYW5kCi0gICAgICog
YnViYmxpbmcuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIGN1cnJlbnRUYXJnZXQoKSBjb25z
dDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggcGhhc2Ugb2YgZXZl
bnQgZmxvdyBpcyBjdXJyZW50bHkgYmVpbmcgZXZhbHVhdGVkLgotICAgICAqCi0gICAgICovCi0g
ICAgdW5zaWduZWQgc2hvcnQgZXZlbnRQaGFzZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
VXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhbiBldmVudCBpcyBhIGJ1YmJsaW5nIGV2
ZW50LiBJZiB0aGUKLSAgICAgKiBldmVudCBjYW4gYnViYmxlIHRoZSB2YWx1ZSBpcyB0cnVlLCBl
bHNlIHRoZSB2YWx1ZSBpcyBmYWxzZS4KLSAgICAgKgotICAgICAqLwotICAgIGJvb2wgYnViYmxl
cygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIG9y
IG5vdCBhbiBldmVudCBjYW4gaGF2ZSBpdHMgZGVmYXVsdCBhY3Rpb24KLSAgICAgKiBwcmV2ZW50
ZWQuIElmIHRoZSBkZWZhdWx0IGFjdGlvbiBjYW4gYmUgcHJldmVudGVkIHRoZSB2YWx1ZSBpcyB0
cnVlLAotICAgICAqIGVsc2UgdGhlIHZhbHVlIGlzIGZhbHNlLgotICAgICAqCi0gICAgICovCi0g
ICAgYm9vbCBjYW5jZWxhYmxlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIHNw
ZWNpZnkgdGhlIHRpbWUgKGluIG1pbGxpc2Vjb25kcyByZWxhdGl2ZSB0byB0aGUgZXBvY2gpIGF0
Ci0gICAgICogd2hpY2ggdGhlIGV2ZW50IHdhcyBjcmVhdGVkLiBEdWUgdG8gdGhlIGZhY3QgdGhh
dCBzb21lIHN5c3RlbXMgbWF5IG5vdAotICAgICAqIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiB0
aGUgdmFsdWUgb2YgdGltZVN0YW1wIG1heSBiZSBub3QgYXZhaWxhYmxlIGZvcgotICAgICAqIGFs
bCBldmVudHMuIFdoZW4gbm90IGF2YWlsYWJsZSwgYSB2YWx1ZSBvZiAwIHdpbGwgYmUgcmV0dXJu
ZWQuIEV4YW1wbGVzCi0gICAgICogb2YgZXBvY2ggdGltZSBhcmUgdGhlIHRpbWUgb2YgdGhlIHN5
c3RlbSBzdGFydCBvciAwOjA6MCBVVEMgMXN0IEphbnVhcnkgMTk3MC4KLSAgICAgKgotICAgICAq
LwotICAgIERPTVRpbWVTdGFtcCB0aW1lU3RhbXAoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAq
IFRoZSBzdG9wUHJvcGFnYXRpb24gbWV0aG9kIGlzIHVzZWQgcHJldmVudCBmdXJ0aGVyIHByb3Bh
Z2F0aW9uIG9mIGFuCi0gICAgICogZXZlbnQgZHVyaW5nIGV2ZW50IGZsb3cuIElmIHRoaXMgbWV0
aG9kIGlzIGNhbGxlZCBieSBhbnkgRXZlbnRMaXN0ZW5lcgotICAgICAqIHRoZSBldmVudCB3aWxs
IGNlYXNlIHByb3BhZ2F0aW5nIHRocm91Z2ggdGhlIHRyZWUuIFRoZSBldmVudCB3aWxsCi0gICAg
ICogY29tcGxldGUgZGlzcGF0Y2ggdG8gYWxsIGxpc3RlbmVycyBvbiB0aGUgY3VycmVudCBFdmVu
dFRhcmdldCBiZWZvcmUKLSAgICAgKiBldmVudCBmbG93IHN0b3BzLiBUaGlzIG1ldGhvZCBtYXkg
YmUgdXNlZCBkdXJpbmcgYW55IHN0YWdlIG9mIGV2ZW50IGZsb3cuCi0gICAgICoKLSAgICAgKi8K
LSAgICB2b2lkIHN0b3BQcm9wYWdhdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogSWYgYW4gZXZl
bnQgaXMgY2FuY2VsYWJsZSwgdGhlIHByZXZlbnREZWZhdWx0IG1ldGhvZCBpcyB1c2VkIHRvIHNp
Z25pZnkKLSAgICAgKiB0aGF0IHRoZSBldmVudCBpcyB0byBiZSBjYW5jZWxlZCwgbWVhbmluZyBh
bnkgZGVmYXVsdCBhY3Rpb24gbm9ybWFsbHkKLSAgICAgKiB0YWtlbiBieSB0aGUgaW1wbGVtZW50
YXRpb24gYXMgYSByZXN1bHQgb2YgdGhlIGV2ZW50IHdpbGwgbm90IG9jY3VyLiBJZiwKLSAgICAg
KiBkdXJpbmcgYW55IHN0YWdlIG9mIGV2ZW50IGZsb3csIHRoZSBwcmV2ZW50RGVmYXVsdCBtZXRo
b2QgaXMgY2FsbGVkIHRoZQotICAgICAqIGV2ZW50IGlzIGNhbmNlbGVkLiBBbnkgZGVmYXVsdCBh
Y3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCB3aWxsIG5vdAotICAgICAqIG9jY3VyLiBD
YWxsaW5nIHRoaXMgbWV0aG9kIGZvciBhIG5vbi1jYW5jZWxhYmxlIGV2ZW50IGhhcyBubyBlZmZl
Y3QuCi0gICAgICogT25jZSBwcmV2ZW50RGVmYXVsdCBoYXMgYmVlbiBjYWxsZWQgaXQgd2lsbCBy
ZW1haW4gaW4gZWZmZWN0IHRocm91Z2hvdXQKLSAgICAgKiB0aGUgcmVtYWluZGVyIG9mIHRoZSBl
dmVudCdzIHByb3BhZ2F0aW9uLiBUaGlzIG1ldGhvZCBtYXkgYmUgdXNlZCBkdXJpbmcKLSAgICAg
KiBhbnkgc3RhZ2Ugb2YgZXZlbnQgZmxvdy4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgcHJl
dmVudERlZmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBpbml0RXZlbnQgbWV0aG9kIGlz
IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdmFsdWUgb2YgYW4gRXZlbnQgY3JlYXRlZAotICAgICAq
IHRocm91Z2ggdGhlIERvY3VtZW50RXZlbnQgaW50ZXJmYWNlLiBUaGlzIG1ldGhvZCBtYXkgb25s
eSBiZSBjYWxsZWQKLSAgICAgKiBiZWZvcmUgdGhlIEV2ZW50IGhhcyBiZWVuIGRpc3BhdGNoZWQg
dmlhIHRoZSBkaXNwYXRjaEV2ZW50IG1ldGhvZCwKLSAgICAgKiB0aG91Z2ggaXQgbWF5IGJlIGNh
bGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGhhdCBwaGFzZSBpZiBuZWNlc3NhcnkuCi0gICAg
ICogSWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRoZSBmaW5hbCBpbnZvY2F0aW9uIHRha2VzIHBy
ZWNlZGVuY2UuIElmCi0gICAgICogY2FsbGVkIGZyb20gYSBzdWJjbGFzcyBvZiBFdmVudCBpbnRl
cmZhY2Ugb25seSB0aGUgdmFsdWVzIHNwZWNpZmllZCBpbgotICAgICAqIHRoZSBpbml0RXZlbnQg
bWV0aG9kIGFyZSBtb2RpZmllZCwgYWxsIG90aGVyIGF0dHJpYnV0ZXMgYXJlIGxlZnQKLSAgICAg
KiB1bmNoYW5nZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZXZlbnRUeXBlQXJnIFNwZWNpZmll
cyB0aGUgZXZlbnQgdHlwZS4gVGhpcyB0eXBlIG1heSBiZSBhbnkgZXZlbnQKLSAgICAgKiB0eXBl
IGN1cnJlbnRseSBkZWZpbmVkIGluIHRoaXMgc3BlY2lmaWNhdGlvbiBvciBhIG5ldyBldmVudCB0
eXBlLi4gVGhlCi0gICAgICogc3RyaW5nIG11c3QgYmUgYW4gWE1MIG5hbWUuCi0gICAgICoKLSAg
ICAgKiBBbnkgbmV3IGV2ZW50IHR5cGUgbXVzdCBub3QgYmVnaW4gd2l0aCBhbnkgdXBwZXIsIGxv
d2VyLCBvciBtaXhlZCBjYXNlCi0gICAgICogdmVyc2lvbiBvZiB0aGUgc3RyaW5nICJET00iLiBU
aGlzIHByZWZpeCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIERPTQotICAgICAqIGV2ZW50IHNldHMu
IEl0IGlzIGFsc28gc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB0aGlyZCBwYXJ0aWVzIGFkZGlu
ZwotICAgICAqIHRoZWlyIG93biBldmVudHMgdXNlIHRoZWlyIG93biBwcmVmaXggdG8gYXZvaWQg
Y29uZnVzaW9uIGFuZCBsZXNzZW4gdGhlCi0gICAgICogcHJvYmFiaWxpdHkgb2YgY29uZmxpY3Rz
IHdpdGggb3RoZXIgbmV3IGV2ZW50cy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjYW5CdWJibGVB
cmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBldmVudCBjYW4gYnViYmxlLgotICAgICAq
Ci0gICAgICogQHBhcmFtIGNhbmNlbGFibGVBcmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRo
ZSBldmVudCdzIGRlZmF1bHQgYWN0aW9uIGNhbiBiZSBwcmV2ZW50ZWQuCi0gICAgICoKLSAgICAg
Ki8KLSAgICB2b2lkIGluaXRFdmVudChjb25zdCBET01TdHJpbmcgJmV2ZW50VHlwZUFyZywgYm9v
bCBjYW5CdWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZyk7Ci0KLSAgICAvKioKLSAgICAgKiBA
aW50ZXJuYWwKLSAgICAgKiBub3QgcGFydCBvZiB0aGUgRE9NCi0gICAgICovCi0gICAgRXZlbnRJ
bXBsICpoYW5kbGUoKSBjb25zdDsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotCi0gICAgLyog
Tm9uc3RhbmRhcmQgZXh0ZW5zaW9ucyBuZWVkZWQgdG8gc3VwcG9ydCB3aWRlbHkgdXNlZCBKUyBl
dmVudCBwcm9wZXJ0aWVzICovCi0gICAgdm9pZCBzZXRDYW5jZWxCdWJibGUoYm9vbCBjYW5jZWwp
OwotICAgIHZvaWQgc2V0RGVmYXVsdFByZXZlbnRlZChib29sIHJldHVyblZhbHVlKTsKLSAgICBi
b29sIGdldENhbmNlbEJ1YmJsZSgpIGNvbnN0OwotICAgIGJvb2wgZGVmYXVsdFByZXZlbnRlZCgp
IGNvbnN0OwotCi0gICAgRXZlbnQoRXZlbnRJbXBsICppKTsKLQotcHJvdGVjdGVkOgotICAgIEV2
ZW50SW1wbCAqaW1wbDsKLQotI2VuZGlmCi0KIH07CiAKIApAQCAtMzA0LDE2ICsxMzAsNiBAQCBw
cm90ZWN0ZWQ6CiBjbGFzcyBFdmVudEV4Y2VwdGlvbgogewogcHVibGljOgotCi0jaWYgIUtIVE1M
X05PX0NQTFVTUExVU19ET00KLQotICAgIEV2ZW50RXhjZXB0aW9uKHVuc2lnbmVkIHNob3J0IF9j
b2RlKTsKLSAgICBFdmVudEV4Y2VwdGlvbihjb25zdCBFdmVudEV4Y2VwdGlvbiAmb3RoZXIpOwot
ICAgIEV2ZW50RXhjZXB0aW9uICYgb3BlcmF0b3IgPSAoY29uc3QgRXZlbnRFeGNlcHRpb24gJm90
aGVyKTsKLSAgICB2aXJ0dWFsIH5FdmVudEV4Y2VwdGlvbigpIHt9Ci0KLSNlbmRpZgotCiAgICAg
LyoqCiAgICAgICogQW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIGVycm9yIGdlbmVy
YXRlZC4KICAgICAgKgpAQCAtMzI4LDI4MCArMTQ0LDkgQEAgcHVibGljOgogICAgICAgICBfRVhD
RVBUSU9OX09GRlNFVCAgICAgICAgICAgICAgPSAzMDAwLAogICAgICAgICBfRVhDRVBUSU9OX01B
WCAgICAgICAgICAgICAgICAgPSAzOTk5CiAgICAgfTsKLQotI2lmICFLSFRNTF9OT19DUExVU1BM
VVNfRE9NCi0KLSAgICB1bnNpZ25lZCBzaG9ydCBjb2RlOwotCi0jZW5kaWYKLQogfTsKIAogCi0j
aWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotCi0vKioKLSAqIEludHJvZHVjZWQgaW4gRE9N
IExldmVsIDIKLSAqCi0gKiBUaGUgVUlFdmVudCBpbnRlcmZhY2UgcHJvdmlkZXMgc3BlY2lmaWMg
Y29udGV4dHVhbCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkCi0gKiB3aXRoIFVzZXIgSW50ZXJmYWNl
IGV2ZW50cy4KLSAqCi0gKi8KLWNsYXNzIFVJRXZlbnQgOiBwdWJsaWMgRXZlbnQgewotcHVibGlj
OgotICAgIFVJRXZlbnQoKTsKLSAgICBVSUV2ZW50KGNvbnN0IFVJRXZlbnQgJm90aGVyKTsKLSAg
ICBVSUV2ZW50KGNvbnN0IEV2ZW50ICZvdGhlcik7Ci0gICAgVUlFdmVudCAmIG9wZXJhdG9yID0g
KGNvbnN0IFVJRXZlbnQgJm90aGVyKTsKLSAgICBVSUV2ZW50ICYgb3BlcmF0b3IgPSAoY29uc3Qg
RXZlbnQgJm90aGVyKTsKLSAgICB2aXJ0dWFsIH5VSUV2ZW50KCk7Ci0KLSAgICAvKioKLSAgICAg
KiBUaGUgdmlldyBhdHRyaWJ1dGUgaWRlbnRpZmllcyB0aGUgQWJzdHJhY3RWaWV3IGZyb20gd2hp
Y2ggdGhlIGV2ZW50IHdhcwotICAgICAqIGdlbmVyYXRlZC4KLSAgICAgKgotICAgICAqLwotICAg
IEFic3RyYWN0VmlldyB2aWV3KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBTcGVjaWZpZXMg
c29tZSBkZXRhaWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEV2ZW50LCBkZXBlbmRpbmcgb24gdGhl
IHR5cGUKLSAgICAgKiBvZiBldmVudC4KLSAgICAgKgotICAgICAqLwotICAgIGludCBkZXRhaWwo
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIE5vbi1zdGFuZGFyZCBleHRlbnNpb24gdG8gc3Vw
cG9ydCBJRS1zdHlsZSBrZXlDb2RlIGV2ZW50IHByb3BlcnR5LgotICAgICAqCi0gICAgICovCi0g
ICAgaW50IGtleUNvZGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIE5vbi1zdGFuZGFyZCBl
eHRlbnNpb24gdG8gc3VwcG9ydCBJRS1zdHlsZSBjaGFyQ29kZSBldmVudCBwcm9wZXJ0eS4KLSAg
ICAgKgotICAgICAqLwotICAgIGludCBjaGFyQ29kZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAg
ICogTm9uLXN0YW5kYXJkIGV4dGVuc2lvbnMgdG8gc3VwcG9ydCBOZXRzY2FwZS1zdHlsZSBwYWdl
WCBhbmQgcGFnZVkgZXZlbnQgcHJvcGVydGllcy4KLSAgICAgKgotICAgICAqLwotICAgIGludCBw
YWdlWCgpIGNvbnN0OwotICAgIGludCBwYWdlWSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
Tm9uLXN0YW5kYXJkIGV4dGVuc2lvbnMgdG8gc3VwcG9ydCBOZXRzY2FwZS1zdHlsZSBsYXllclgg
YW5kIGxheWVyWSBldmVudCBwcm9wZXJ0aWVzLgotICAgICAqCi0gICAgICovCi0gICAgaW50IGxh
eWVyWCgpIGNvbnN0OwotICAgIGludCBsYXllclkoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAq
IE5vbi1zdGFuZGFyZCBleHRlbnNpb24gdG8gc3VwcG9ydCBOZXRzY2FwZS1zdHlsZSAid2hpY2gi
IGV2ZW50IHByb3BlcnR5LgotICAgICAqCi0gICAgICovCi0gICAgaW50IHdoaWNoKCkgY29uc3Q7
Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaW5pdFVJRXZlbnQgbWV0aG9kIGlzIHVzZWQgdG8gaW5p
dGlhbGl6ZSB0aGUgdmFsdWUgb2YgYSBVSUV2ZW50Ci0gICAgICogY3JlYXRlZCB0aHJvdWdoIHRo
ZSBEb2N1bWVudEV2ZW50IGludGVyZmFjZS4gVGhpcyBtZXRob2QgbWF5IG9ubHkgYmUKLSAgICAg
KiBjYWxsZWQgYmVmb3JlIHRoZSBVSUV2ZW50IGhhcyBiZWVuIGRpc3BhdGNoZWQgdmlhIHRoZSBk
aXNwYXRjaEV2ZW50Ci0gICAgICogbWV0aG9kLCB0aG91Z2ggaXQgbWF5IGJlIGNhbGxlZCBtdWx0
aXBsZSB0aW1lcyBkdXJpbmcgdGhhdCBwaGFzZSBpZgotICAgICAqIG5lY2Vzc2FyeS4gSWYgY2Fs
bGVkIG11bHRpcGxlIHRpbWVzLCB0aGUgZmluYWwgaW52b2NhdGlvbiB0YWtlcwotICAgICAqIHBy
ZWNlZGVuY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdHlwZUFyZyBTcGVjaWZpZXMgdGhlIGV2
ZW50IHR5cGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2FuQnViYmxlQXJnIFNwZWNpZmllcyB3
aGV0aGVyIG9yIG5vdCB0aGUgZXZlbnQgY2FuIGJ1YmJsZS4KLSAgICAgKgotICAgICAqIEBwYXJh
bSBjYW5jZWxhYmxlQXJnIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgZXZlbnQncyBkZWZh
dWx0IGFjdGlvbgotICAgICAqIGNhbiBiZSBwcmV2ZW50ZWQuCi0gICAgICoKLSAgICAgKiBAcGFy
YW0gdmlld0FyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3MgQWJzdHJhY3RWaWV3LgotICAgICAqCi0g
ICAgICogQHBhcmFtIGRldGFpbEFyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3MgZGV0YWlsLgotICAg
ICAqCi0gICAgICovCi0gICAgdm9pZCBpbml0VUlFdmVudChjb25zdCBET01TdHJpbmcgJnR5cGVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFic3RyYWN0VmlldyAmdmlld0Fy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcpOwotCi0g
ICAgVUlFdmVudChVSUV2ZW50SW1wbCAqaW1wbCk7Ci19OwotCi0KLQotCi0vKioKLSAqIEludHJv
ZHVjZWQgaW4gRE9NIExldmVsIDIKLSAqCi0gKiBUaGUgTW91c2VFdmVudCBpbnRlcmZhY2UgcHJv
dmlkZXMgc3BlY2lmaWMgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkCi0gKiB3aXRo
IE1vdXNlIGV2ZW50cy4KLSAqCi0gKiBUaGUgZGV0YWlsIGF0dHJpYnV0ZSBpbmhlcml0ZWQgZnJv
bSBVSUV2ZW50IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIGEKLSAqIG1vdXNlIGJ1dHRv
biBoYXMgYmVlbiBwcmVzc2VkIGFuZCByZWxlYXNlZCBvdmVyIHRoZSBzYW1lIHNjcmVlbiBsb2Nh
dGlvbgotICogZHVyaW5nIGEgdXNlciBhY3Rpb24uIFRoZSBhdHRyaWJ1dGUgdmFsdWUgaXMgMSB3
aGVuIHRoZSB1c2VyIGJlZ2lucyB0aGlzCi0gKiBhY3Rpb24gYW5kIGluY3JlbWVudHMgYnkgMSBm
b3IgZWFjaCBmdWxsIHNlcXVlbmNlIG9mIHByZXNzaW5nIGFuZCByZWxlYXNpbmcuCi0gKiBJZiB0
aGUgdXNlciBtb3ZlcyB0aGUgbW91c2UgYmV0d2VlbiB0aGUgbW91c2Vkb3duIGFuZCBtb3VzZXVw
IHRoZSB2YWx1ZSB3aWxsCi0gKiBiZSBzZXQgdG8gMCwgaW5kaWNhdGluZyB0aGF0IG5vIGNsaWNr
IGlzIG9jY3VycmluZy4KLSAqCi0gKiBJbiB0aGUgY2FzZSBvZiBuZXN0ZWQgZWxlbWVudHMgbW91
c2UgZXZlbnRzIGFyZSBhbHdheXMgdGFyZ2V0ZWQgYXQgdGhlIG1vc3QKLSAqIGRlZXBseSBuZXN0
ZWQgZWxlbWVudC4gQW5jZXN0b3JzIG9mIHRoZSB0YXJnZXRlZCBlbGVtZW50IG1heSB1c2UgYnVi
YmxpbmcgdG8KLSAqIG9idGFpbiBub3RpZmljYXRpb24gb2YgbW91c2UgZXZlbnRzIHdoaWNoIG9j
Y3VyIHdpdGhpbiBpdHMgZGVzY2VuZGVudCBlbGVtZW50cy4KLSAqCi0gKi8KLWNsYXNzIE1vdXNl
RXZlbnQgOiBwdWJsaWMgVUlFdmVudCB7Ci1wdWJsaWM6Ci0gICAgTW91c2VFdmVudCgpOwotICAg
IE1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudCAmb3RoZXIpOwotICAgIE1vdXNlRXZlbnQoY29u
c3QgRXZlbnQgJm90aGVyKTsKLSAgICBNb3VzZUV2ZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgTW91
c2VFdmVudCAmb3RoZXIpOwotICAgIE1vdXNlRXZlbnQgJiBvcGVyYXRvciA9IChjb25zdCBFdmVu
dCAmb3RoZXIpOwotICAgIHZpcnR1YWwgfk1vdXNlRXZlbnQoKTsKLQotICAgIC8qKgotICAgICAq
IFRoZSBob3Jpem9udGFsIGNvb3JkaW5hdGUgYXQgd2hpY2ggdGhlIGV2ZW50IG9jY3VycmVkIHJl
bGF0aXZlIHRvIHRoZQotICAgICAqIG9yaWdpbiBvZiB0aGUgc2NyZWVuIGNvb3JkaW5hdGUgc3lz
dGVtLgotICAgICAqCi0gICAgICovCi0gICAgaW50IHNjcmVlblgoKSBjb25zdDsKLQotICAgIC8q
KgotICAgICAqIFRoZSB2ZXJ0aWNhbCBjb29yZGluYXRlIGF0IHdoaWNoIHRoZSBldmVudCBvY2N1
cnJlZCByZWxhdGl2ZSB0byB0aGUKLSAgICAgKiBvcmlnaW4gb2YgdGhlIHNjcmVlbiBjb29yZGlu
YXRlIHN5c3RlbS4KLSAgICAgKgotICAgICAqLwotICAgIGludCBzY3JlZW5ZKCkgY29uc3Q7Ci0K
LSAgICAvKioKLSAgICAgKiBUaGUgaG9yaXpvbnRhbCBjb29yZGluYXRlIGF0IHdoaWNoIHRoZSBl
dmVudCBvY2N1cnJlZCByZWxhdGl2ZSB0byB0aGUKLSAgICAgKiBET00gaW1wbGVtZW50YXRpb24n
cyBjbGllbnQgYXJlYS4KLSAgICAgKgotICAgICAqLwotICAgIGludCBjbGllbnRYKCkgY29uc3Q7
Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdmVydGljYWwgY29vcmRpbmF0ZSBhdCB3aGljaCB0aGUg
ZXZlbnQgb2NjdXJyZWQgcmVsYXRpdmUgdG8gdGhlIERPTQotICAgICAqIGltcGxlbWVudGF0aW9u
J3MgY2xpZW50IGFyZWEuCi0gICAgICoKLSAgICAgKi8KLSAgICBpbnQgY2xpZW50WSgpIGNvbnN0
OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSAnY3RybCcg
a2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRoZSBmaXJpbmcKLSAgICAgKiBvZiB0aGUgZXZlbnQu
Ci0gICAgICovCi0gICAgYm9vbCBjdHJsS2V5KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBV
c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlICdzaGlmdCcga2V5IHdhcyBkZXByZXNzZWQgZHVy
aW5nIHRoZSBmaXJpbmcKLSAgICAgKiBvZiB0aGUgZXZlbnQuCi0gICAgICoKLSAgICAgKi8KLSAg
ICBib29sIHNoaWZ0S2V5KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGluZGlj
YXRlIHdoZXRoZXIgdGhlICdhbHQnIGtleSB3YXMgZGVwcmVzc2VkIGR1cmluZyB0aGUgZmlyaW5n
Ci0gICAgICogb2YgdGhlIGV2ZW50LiBPbiBzb21lIHBsYXRmb3JtcyB0aGlzIGtleSBtYXkgbWFw
IHRvIGFuIGFsdGVybmF0aXZlIGtleQotICAgICAqIG5hbWUuCi0gICAgICoKLSAgICAgKi8KLSAg
ICBib29sIGFsdEtleSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0
ZSB3aGV0aGVyIHRoZSAnbWV0YScga2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRoZSBmaXJpbmcK
LSAgICAgKiBvZiB0aGUgZXZlbnQuIE9uIHNvbWUgcGxhdGZvcm1zIHRoaXMga2V5IG1heSBtYXAg
dG8gYW4gYWx0ZXJuYXRpdmUga2V5Ci0gICAgICogbmFtZS4KLSAgICAgKgotICAgICAqLwotICAg
IGJvb2wgbWV0YUtleSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogRHVyaW5nIG1vdXNlIGV2
ZW50cyBjYXVzZWQgYnkgdGhlIGRlcHJlc3Npb24gb3IgcmVsZWFzZSBvZiBhIG1vdXNlCi0gICAg
ICogYnV0dG9uLCBidXR0b24gaXMgdXNlZCB0byBpbmRpY2F0ZSB3aGljaCBtb3VzZSBidXR0b24g
Y2hhbmdlZCBzdGF0ZS4gVGhlCi0gICAgICogdmFsdWVzIGZvciBidXR0b24gcmFuZ2UgZnJvbSB6
ZXJvIHRvIGluZGljYXRlIHRoZSBsZWZ0IGJ1dHRvbiBvZiB0aGUKLSAgICAgKiBtb3VzZSwgb25l
IHRvIGluZGljYXRlIHRoZSBtaWRkbGUgYnV0dG9uIGlmIHByZXNlbnQsIGFuZCB0d28gdG8gaW5k
aWNhdGUKLSAgICAgKiB0aGUgcmlnaHQgYnV0dG9uLiBGb3IgbWljZSBjb25maWd1cmVkIGZvciBs
ZWZ0IGhhbmRlZCB1c2UgaW4gd2hpY2ggdGhlCi0gICAgICogYnV0dG9uIGFjdGlvbnMgYXJlIHJl
dmVyc2VkIHRoZSB2YWx1ZXMgYXJlIGluc3RlYWQgcmVhZCBmcm9tIHJpZ2h0IHRvCi0gICAgICog
bGVmdC4KLSAgICAgKgotICAgICAqLwotICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbigpIGNvbnN0
OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpZGVudGlmeSBhIHNlY29uZGFyeSBFdmVudFRh
cmdldCByZWxhdGVkIHRvIGEgVUkgZXZlbnQuCi0gICAgICogQ3VycmVudGx5IHRoaXMgYXR0cmli
dXRlIGlzIHVzZWQgd2l0aCB0aGUgbW91c2VvdmVyIGV2ZW50IHRvIGluZGljYXRlCi0gICAgICog
dGhlIEV2ZW50VGFyZ2V0IHdoaWNoIHRoZSBwb2ludGluZyBkZXZpY2UgZXhpdGVkIGFuZCB3aXRo
IHRoZSBtb3VzZW91dAotICAgICAqIGV2ZW50IHRvIGluZGljYXRlIHRoZSBFdmVudFRhcmdldCB3
aGljaCB0aGUgcG9pbnRpbmcgZGV2aWNlIGVudGVyZWQuCi0gICAgICoKLSAgICAgKi8KLSAgICBO
b2RlIHJlbGF0ZWRUYXJnZXQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBpbml0TW91
c2VFdmVudCBtZXRob2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSB2YWx1ZSBvZiBhCi0gICAg
ICogTW91c2VFdmVudCBjcmVhdGVkIHRocm91Z2ggdGhlIERvY3VtZW50RXZlbnQgaW50ZXJmYWNl
LiBUaGlzIG1ldGhvZCBtYXkKLSAgICAgKiBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgdGhlIE1vdXNl
RXZlbnQgaGFzIGJlZW4gZGlzcGF0Y2hlZCB2aWEgdGhlCi0gICAgICogZGlzcGF0Y2hFdmVudCBt
ZXRob2QsIHRob3VnaCBpdCBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGR1cmluZyB0aGF0
Ci0gICAgICogcGhhc2UgaWYgbmVjZXNzYXJ5LiBJZiBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRo
ZSBmaW5hbCBpbnZvY2F0aW9uIHRha2VzCi0gICAgICogcHJlY2VkZW5jZS4gUGFyYW1ldGVycwot
ICAgICAqCi0gICAgICogQHBhcmFtIHR5cGVBcmcgU3BlY2lmaWVzIHRoZSBldmVudCB0eXBlLgot
ICAgICAqCi0gICAgICogQHBhcmFtIGNhbkJ1YmJsZUFyZyBTcGVjaWZpZXMgd2hldGhlciBvciBu
b3QgdGhlIGV2ZW50IGNhbiBidWJibGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2FuY2VsYWJs
ZUFyZyBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24g
Y2FuIGJlIHByZXZlbnRlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB2aWV3QXJnIFNwZWNpZmll
cyB0aGUgRXZlbnQncyBBYnN0cmFjdFZpZXcuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZGV0YWls
QXJnIFNwZWNpZmllcyB0aGUgRXZlbnQncyBtb3VzZSBjbGljayBjb3VudC4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSBzY3JlZW5YQXJnIFNwZWNpZmllcyB0aGUgRXZlbnQncyBzY3JlZW4geCBjb29y
ZGluYXRlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2NyZWVuWUFyZyBTcGVjaWZpZXMgdGhlIEV2
ZW50J3Mgc2NyZWVuIHkgY29vcmRpbmF0ZQotICAgICAqCi0gICAgICogQHBhcmFtIGNsaWVudFhB
cmcgU3BlY2lmaWVzIHRoZSBFdmVudCdzIGNsaWVudCB4IGNvb3JkaW5hdGUKLSAgICAgKgotICAg
ICAqIEBwYXJhbSBjbGllbnRZQXJnIFNwZWNpZmllcyB0aGUgRXZlbnQncyBjbGllbnQgeSBjb29y
ZGluYXRlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY3RybEtleUFyZyBTcGVjaWZpZXMgd2hldGhl
ciBvciBub3QgY29udHJvbCBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcgdGhlIEV2ZW50LgotICAg
ICAqCi0gICAgICogQHBhcmFtIGFsdEtleUFyZyBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgYWx0
IGtleSB3YXMgZGVwcmVzc2VkIGR1cmluZyB0aGUgRXZlbnQuCi0gICAgICoKLSAgICAgKiBAcGFy
YW0gc2hpZnRLZXlBcmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHNoaWZ0IGtleSB3YXMgZGVw
cmVzc2VkIGR1cmluZyB0aGUgRXZlbnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbWV0YUtleUFy
ZyBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgbWV0YSBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcg
dGhlIEV2ZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIGJ1dHRvbkFyZyBTcGVjaWZpZXMgdGhl
IEV2ZW50J3MgbW91c2UgYnV0dG9uLgotICAgICAqCi0gICAgICogQHBhcmFtIHJlbGF0ZWRUYXJn
ZXRBcmcgU3BlY2lmaWVzIHRoZSBFdmVudCdzIHJlbGF0ZWQgRXZlbnRUYXJnZXQuCi0gICAgICoK
LSAgICAgKi8KLSAgICB2b2lkIGluaXRNb3VzZUV2ZW50KGNvbnN0IERPTVN0cmluZyAmdHlwZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWJzdHJhY3RWaWV3
ICZ2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRldGFp
bEFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5YQXJn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNjcmVlbllBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WEFyZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRZQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnV0dG9uQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTm9kZSAmcmVsYXRlZFRhcmdldEFyZyk7Ci1wcm90
ZWN0ZWQ6Ci0gICAgTW91c2VFdmVudChNb3VzZUV2ZW50SW1wbCAqaW1wbCk7Ci19OwotCi0KLSNl
bmRpZgotCi0KIC8qKgogICogSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgogICoKQEAgLTYxMSwx
OCArMTU2LDYgQEAgcHJvdGVjdGVkOgogICovCiBjbGFzcyBNdXRhdGlvbkV2ZW50IDogcHVibGlj
IEV2ZW50IHsKIHB1YmxpYzoKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICBN
dXRhdGlvbkV2ZW50KCk7Ci0gICAgTXV0YXRpb25FdmVudChjb25zdCBNdXRhdGlvbkV2ZW50ICZv
dGhlcik7Ci0gICAgTXV0YXRpb25FdmVudChjb25zdCBFdmVudCAmb3RoZXIpOwotICAgIE11dGF0
aW9uRXZlbnQgJiBvcGVyYXRvciA9IChjb25zdCBNdXRhdGlvbkV2ZW50ICZvdGhlcik7Ci0gICAg
TXV0YXRpb25FdmVudCAmIG9wZXJhdG9yID0gKGNvbnN0IEV2ZW50ICZvdGhlcik7Ci0gICAgdmly
dHVhbCB+TXV0YXRpb25FdmVudCgpOwotCi0jZW5kaWYKLQogICAgIC8qKgogICAgICAqIEFuIGlu
dGVnZXIgaW5kaWNhdGluZyBpbiB3aGljaCB3YXkgdGhlIEF0dHIgd2FzIGNoYW5nZWQuCiAgICAg
ICoKQEAgLTYzOCw4OSArMTcxLDYgQEAgcHVibGljOgogCUFERElUSU9OID0gMiwKIAlSRU1PVkFM
ID0gMwogICAgIH07Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgLyoqCi0g
ICAgICogcmVsYXRlZE5vZGUgaXMgdXNlZCB0byBpZGVudGlmeSBhIHNlY29uZGFyeSBub2RlIHJl
bGF0ZWQgdG8gYSBtdXRhdGlvbgotICAgICAqIGV2ZW50LiBGb3IgZXhhbXBsZSwgaWYgYSBtdXRh
dGlvbiBldmVudCBpcyBkaXNwYXRjaGVkIHRvIGEgbm9kZQotICAgICAqIGluZGljYXRpbmcgdGhh
dCBpdHMgcGFyZW50IGhhcyBjaGFuZ2VkLCB0aGUgcmVsYXRlZE5vZGUgaXMgdGhlIGNoYW5nZWQK
LSAgICAgKiBwYXJlbnQuIElmIGFuIGV2ZW50IGlzIGluc3RlYWQgZGlzcGF0Y2hlZCB0byBhIHN1
YnRyZWUgaW5kaWNhdGluZyBhIG5vZGUKLSAgICAgKiB3YXMgY2hhbmdlZCB3aXRoaW4gaXQsIHRo
ZSByZWxhdGVkTm9kZSBpcyB0aGUgY2hhbmdlZCBub2RlLiBJbiB0aGUgY2FzZQotICAgICAqIG9m
IHRoZSBET01BdHRyTW9kaWZpZWQgZXZlbnQgaXQgaW5kaWNhdGVzIHRoZSBBdHRyIG5vZGUgd2hp
Y2ggd2FzCi0gICAgICogbW9kaWZpZWQsIGFkZGVkLCBvciByZW1vdmVkLgotICAgICAqCi0gICAg
ICovCi0gICAgTm9kZSByZWxhdGVkTm9kZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogcHJl
dlZhbHVlIGluZGljYXRlcyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIEF0dHIgbm9kZSBpbgot
ICAgICAqIERPTUF0dHJNb2RpZmllZCBldmVudHMsIGFuZCBvZiB0aGUgQ2hhcmFjdGVyRGF0YSBu
b2RlIGluCi0gICAgICogRE9NQ2hhckRhdGFNb2RpZmllZCBldmVudHMuCi0gICAgICoKLSAgICAg
Ki8KLSAgICBET01TdHJpbmcgcHJldlZhbHVlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBu
ZXdWYWx1ZSBpbmRpY2F0ZXMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgQXR0ciBub2RlIGluIERPTUF0
dHJNb2RpZmllZAotICAgICAqIGV2ZW50cywgYW5kIG9mIHRoZSBDaGFyYWN0ZXJEYXRhIG5vZGUg
aW4gRE9NQ2hhckRhdGFNb2RpZmllZCBldmVudHMuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01T
dHJpbmcgbmV3VmFsdWUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIGF0dHJOYW1lIGluZGlj
YXRlcyB0aGUgbmFtZSBvZiB0aGUgY2hhbmdlZCBBdHRyIG5vZGUgaW4gYQotICAgICAqIERPTUF0
dHJNb2RpZmllZCBldmVudC4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBhdHRyTmFt
ZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogYXR0ckNoYW5nZSBpbmRpY2F0ZXMgdGhlIHR5
cGUgb2YgY2hhbmdlIHdoaWNoIHRyaWdnZXJlZCB0aGUKLSAgICAgKiBET01BdHRyTW9kaWZpZWQg
ZXZlbnQuIFRoZSB2YWx1ZXMgY2FuIGJlIE1PRElGSUNBVElPTiwgQURESVRJT04sIG9yCi0gICAg
ICogUkVNT1ZBTC4KLSAgICAgKgotICAgICAqLwotICAgIHVuc2lnbmVkIHNob3J0IGF0dHJDaGFu
Z2UoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBpbml0TXV0YXRpb25FdmVudCBtZXRo
b2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSB2YWx1ZSBvZiBhCi0gICAgICogTXV0YXRpb25F
dmVudCBjcmVhdGVkIHRocm91Z2ggdGhlIERvY3VtZW50RXZlbnQgaW50ZXJmYWNlLiBUaGlzIG1l
dGhvZAotICAgICAqIG1heSBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgdGhlIE11dGF0aW9uRXZlbnQg
aGFzIGJlZW4gZGlzcGF0Y2hlZCB2aWEgdGhlCi0gICAgICogZGlzcGF0Y2hFdmVudCBtZXRob2Qs
IHRob3VnaCBpdCBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGR1cmluZyB0aGF0Ci0gICAg
ICogcGhhc2UgaWYgbmVjZXNzYXJ5LiBJZiBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRoZSBmaW5h
bCBpbnZvY2F0aW9uIHRha2VzCi0gICAgICogcHJlY2VkZW5jZS4KLSAgICAgKgotICAgICAqIEBw
YXJhbSB0eXBlQXJnIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZS4KLSAgICAgKgotICAgICAqIEBw
YXJhbSBjYW5CdWJibGVBcmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBldmVudCBjYW4g
YnViYmxlLgotICAgICAqCi0gICAgICogQHBhcmFtIGNhbmNlbGFibGVBcmcgU3BlY2lmaWVzIHdo
ZXRoZXIgb3Igbm90IHRoZSBldmVudCdzIGRlZmF1bHQgYWN0aW9uIGNhbiBiZSBwcmV2ZW50ZWQu
Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVsYXRlZE5vZGVBcmcgU3BlY2lmaWVzIHRoZSBFdmVu
dCdzIHJlbGF0ZWQgTm9kZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwcmV2VmFsdWVBcmcgU3Bl
Y2lmaWVzIHRoZSBFdmVudCdzIHByZXZWYWx1ZSBhdHRyaWJ1dGUuIFRoaXMgdmFsdWUgbWF5IGJl
IG51bGwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV3VmFsdWVBcmcgU3BlY2lmaWVzIHRoZSBF
dmVudCdzIG5ld1ZhbHVlIGF0dHJpYnV0ZS4gVGhpcyB2YWx1ZSBtYXkgYmUgbnVsbC4KLSAgICAg
KgotICAgICAqIEBwYXJhbSBhdHRyTmFtZUFyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3MgYXR0ck5h
bWUgYXR0cmlidXRlLiBUaGlzIHZhbHVlIG1heSBiZSBudWxsLgotICAgICAqCi0gICAgICogQHBh
cmFtIGF0dHJDaGFuZ2VBcmcgU3BlY2lmaWVzIHRoZSBFdmVudCdzIGF0dHJDaGFuZ2UgYXR0cmli
dXRlCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIGluaXRNdXRhdGlvbkV2ZW50KGNvbnN0IERP
TVN0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgY2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTm9kZSAmcmVsYXRlZE5vZGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJnByZXZWYWx1ZUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmbmV3VmFsdWVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJp
bmcgJmF0dHJOYW1lQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZUFyZyk7Ci1wcm90ZWN0ZWQ6Ci0gICAgTXV0YXRpb25F
dmVudChNdXRhdGlvbkV2ZW50SW1wbCAqaW1wbCk7Ci0KLSNlbmRpZgotCiB9OwogCiAKQEAgLTcz
MSwxMDQgKzE4MSwxNSBAQCBwcm90ZWN0ZWQ6CiAgKiBhc3NvY2lhdGVkIHdpdGggS2V5Ym9hcmQg
ZXZlbnRzLgogICoKICAqLwotY2xhc3MgS2V5Ym9hcmRFdmVudAotCi0jaWYgIUtIVE1MX05PX0NQ
TFVTUExVU19ET00KLQotICA6IHB1YmxpYyBVSUV2ZW50Ci0KLSNlbmRpZgotCi17CitjbGFzcyBL
ZXlib2FyZEV2ZW50IHsKIAogcHVibGljOgotCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00K
LQotICAgIEtleWJvYXJkRXZlbnQoKTsKLSAgICBLZXlib2FyZEV2ZW50KGNvbnN0IEtleWJvYXJk
RXZlbnQgJm90aGVyKTsKLSAgICBLZXlib2FyZEV2ZW50KGNvbnN0IEV2ZW50ICZvdGhlcik7Ci0g
ICAgS2V5Ym9hcmRFdmVudCAmIG9wZXJhdG9yID0gKGNvbnN0IEtleWJvYXJkRXZlbnQgJm90aGVy
KTsKLSAgICBLZXlib2FyZEV2ZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgRXZlbnQgJm90aGVyKTsK
LSAgICB2aXJ0dWFsIH5LZXlib2FyZEV2ZW50KCk7Ci0KLSNlbmRpZgotCiAgICAgLy8gS2V5TG9j
YXRpb25Db2RlCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERPTV9LRVlfTE9DQVRJT05fU1RB
TkRBUkQgICAgICA9IDB4MDA7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERPTV9LRVlfTE9D
QVRJT05fTEVGVCAgICAgICAgICA9IDB4MDE7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIERP
TV9LRVlfTE9DQVRJT05fUklHSFQgICAgICAgICA9IDB4MDI7CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIERPTV9LRVlfTE9DQVRJT05fTlVNUEFEICAgICAgICA9IDB4MDM7CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIERPTV9LRVlfTE9DQVRJT05fVU5LTk9XTiAgICAgICA9IDB4MDQ7Ci0g
ICAgCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIC8qKgotICAgICAqIEhvbGRz
IHRoZSBpZGVudGlmaWVyIG9mIHRoZSBrZXkuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01TdHJp
bmcga2V5SWRlbnRpZmllcigpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQ29udGFpbnMgYW4g
aW5kaWNhdGlvbiBvZiB0aGUgbG9jYXRpb24gb2YgdGhleSBrZXkgb24gdGhlIGRldmljZS4KLSAg
ICAgKgotICAgICAqLwotICAgIHVuc2lnbmVkIGtleUxvY2F0aW9uKCkgY29uc3Q7Ci0KLSAgICAv
KioKLSAgICAgKiBVc2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlICdjdHJsJyBrZXkgd2FzIGRl
cHJlc3NlZCBkdXJpbmcgdGhlIGZpcmluZwotICAgICAqIG9mIHRoZSBldmVudC4KLSAgICAgKi8K
LSAgICBib29sIGN0cmxLZXkoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5k
aWNhdGUgd2hldGhlciB0aGUgJ3NoaWZ0JyBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcgdGhlIGZp
cmluZwotICAgICAqIG9mIHRoZSBldmVudC4KLSAgICAgKgotICAgICAqLwotICAgIGJvb2wgc2hp
ZnRLZXkoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hldGhl
ciB0aGUgJ2FsdCcga2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRoZSBmaXJpbmcKLSAgICAgKiBv
ZiB0aGUgZXZlbnQuIE9uIHNvbWUgcGxhdGZvcm1zIHRoaXMga2V5IG1heSBtYXAgdG8gYW4gYWx0
ZXJuYXRpdmUga2V5Ci0gICAgICogbmFtZS4KLSAgICAgKgotICAgICAqLwotICAgIGJvb2wgYWx0
S2V5KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGluZGljYXRlIHdoZXRoZXIg
dGhlICdtZXRhJyBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcgdGhlIGZpcmluZwotICAgICAqIG9m
IHRoZSBldmVudC4gT24gc29tZSBwbGF0Zm9ybXMgdGhpcyBrZXkgbWF5IG1hcCB0byBhbiBhbHRl
cm5hdGl2ZSBrZXkKLSAgICAgKiBuYW1lLgotICAgICAqCi0gICAgICovCi0gICAgYm9vbCBtZXRh
S2V5KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGluZGljYXRlIHdoZXRoZXIg
dGhlICdhbHQgZ3JhcGgnICg/KSBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcgdGhlIGZpcmluZwot
ICAgICAqIG9mIHRoZSBldmVudC4gT24gc29tZSBwbGF0Zm9ybXMgdGhpcyBrZXkgbWF5IG1hcCB0
byBhbiBhbHRlcm5hdGl2ZSBrZXkKLSAgICAgKiBuYW1lLgotICAgICAqCi0gICAgICovCi0gICAg
Ym9vbCBhbHRHcmFwaEtleSgpIGNvbnN0OwotCi0gICAgdm9pZCBpbml0S2V5Ym9hcmRFdmVudChj
b25zdCBET01TdHJpbmcgJnR5cGVBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB
YnN0cmFjdFZpZXcgJnZpZXdBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBET01TdHJpbmcgJmtleUlkZW50aWZpZXJBcmcsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2hpZnRLZXlBcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGFsdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
bWV0YUtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0R3Jh
cGhLZXlBcmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi1wcm90
ZWN0ZWQ6Ci0gICAgS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50SW1wbCAqaW1wbCk7Ci0KLSNl
bmRpZgotCiB9OwogCiB9OyAvL25hbWVzcGFjZQpJbmRleDoga2h0bWwvZG9tL2RvbTJfcmFuZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tMl9y
YW5nZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAgLXUgLXIxLjExIGtodG1s
L2RvbS9kb20yX3JhbmdlLmgKLS0tIGtodG1sL2RvbS9kb20yX3JhbmdlLmgJMTYgU2VwIDIwMDUg
MjI6NDI6MDMgLTAwMDAJMS4xMQorKysga2h0bWwvZG9tL2RvbTJfcmFuZ2UuaAkyOSBOb3YgMjAw
NSAyMjo1MTozOSAtMDAwMApAQCAtMzMsNDMgKzMzLDEyIEBACiAKICNpbmNsdWRlIDxkb20vZG9t
X25vZGUuaD4KIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSNpbmNsdWRlIDxkb20v
ZG9tX2RvYy5oPgotI2luY2x1ZGUgPGRvbS9kb21fbWlzYy5oPgotCi0jZW5kaWYKIAogbmFtZXNw
YWNlIERPTSB7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1jbGFzcyBEb2N1bWVu
dEZyYWdtZW50OwotY2xhc3MgTm9kZTsKLWNsYXNzIERPTVN0cmluZzsKLWNsYXNzIERvY3VtZW50
SW1wbDsKLWNsYXNzIFJhbmdlSW1wbDsKLQotY2xhc3MgRE9NRXhjZXB0aW9uOwotCi0jZW5kaWYK
LQogLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjoKIGNsYXNzIFJhbmdlRXhjZXB0aW9uIHsK
IHB1YmxpYzoKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICBSYW5nZUV4Y2Vw
dGlvbih1bnNpZ25lZCBzaG9ydCBfY29kZSkgeyBjb2RlID0gX2NvZGU7IH0KLSAgICBSYW5nZUV4
Y2VwdGlvbihjb25zdCBSYW5nZUV4Y2VwdGlvbiAmb3RoZXIpIHsgY29kZSA9IG90aGVyLmNvZGU7
IH0KLQotICAgIFJhbmdlRXhjZXB0aW9uICYgb3BlcmF0b3IgPSAoY29uc3QgUmFuZ2VFeGNlcHRp
b24gJm90aGVyKQotCXsgY29kZSA9IG90aGVyLmNvZGU7IHJldHVybiAqdGhpczsgfQotCi0gICAg
dmlydHVhbCB+UmFuZ2VFeGNlcHRpb24oKSB7fQotCi0jZW5kaWYKLQogICAgIC8qKgogICAgICAq
IEFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBlcnJvciBnZW5lcmF0ZWQuCiAgICAg
ICoKQEAgLTgwLDQzNCArNDksMTcgQEAgcHVibGljOgogICAgICAgICBfRVhDRVBUSU9OX09GRlNF
VCAgICAgICAgICAgICAgPSAyMDAwLAogICAgICAgICBfRVhDRVBUSU9OX01BWCAgICAgICAgICAg
ICAgICAgPSAyOTk5CiAgICAgfTsKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAg
ICB1bnNpZ25lZCBzaG9ydCBjb2RlOwotCi0jZW5kaWYKIH07CiAKIGNsYXNzIFJhbmdlCiB7Ci0K
LSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgZnJpZW5kIGNsYXNzIERvY3VtZW50
SW1wbDsKLSAgICBmcmllbmQgY2xhc3MgRG9jdW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJhbmdl
SW1wbDsKLQotI2VuZGlmCi0KIHB1YmxpYzoKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9N
Ci0KLSAgICBSYW5nZSgpOwotICAgIFJhbmdlKGNvbnN0IERvY3VtZW50IHJvb3RDb250YWluZXIp
OwotICAgIFJhbmdlKGNvbnN0IFJhbmdlICZvdGhlcik7Ci0gICAgUmFuZ2UoY29uc3QgTm9kZSBz
dGFydENvbnRhaW5lciwgY29uc3QgaW50IHN0YXJ0T2Zmc2V0LCBjb25zdCBOb2RlIGVuZENvbnRh
aW5lciwgY29uc3QgaW50IGVuZE9mZnNldCk7Ci0KLSAgICBSYW5nZSAmIG9wZXJhdG9yID0gKGNv
bnN0IFJhbmdlICZvdGhlcik7Ci0KLSAgICB+UmFuZ2UoKTsKLQotICAgIC8qKgotICAgICAqIE5v
ZGUgd2l0aGluIHdoaWNoIHRoZSByYW5nZSBiZWdpbnMKLSAgICAgKgotICAgICAqLwotICAgIE5v
ZGUgc3RhcnRDb250YWluZXIoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIE9mZnNldCB3aXRo
aW4gdGhlIHN0YXJ0aW5nIG5vZGUgb2YgdGhlIHJhbmdlLgotICAgICAqCi0gICAgICovCi0gICAg
aW50IHN0YXJ0T2Zmc2V0KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBOb2RlIHdpdGhpbiB3
aGljaCB0aGUgcmFuZ2UgZW5kcwotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBlbmRDb250YWlu
ZXIoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIE9mZnNldCB3aXRoaW4gdGhlIGVuZGluZyBu
b2RlIG9mIHRoZSByYW5nZS4KLSAgICAgKgotICAgICAqLwotICAgIGludCBlbmRPZmZzZXQoKSBj
b25zdDsKLQotICAgIC8qKgotICAgICAqIFRSVUUgaWYgdGhlIHJhbmdlIGlzIGNvbGxhcHNlZAot
ICAgICAqCi0gICAgICovCi0gICAgYm9vbCBjb2xsYXBzZWQoKSBjb25zdDsKLQotICAgIC8qKgot
ICAgICAqIEdldHMgdGhlIGNvbW1vbiBhbmNlc3RvciBjb250YWluZXIgb2YgdGhlIHJhbmdlJ3Mg
dHdvIGVuZC1wb2ludHMuCi0gICAgICogQWxzbyBzZXRzIGl0LgotICAgICAqCi0gICAgICovCi0g
ICAgLy8gIyMjIEJJQyBtYWtlIGNvbnN0IGluIHRoZSBuZXh0IHJlbGVhc2UKLSAgICBOb2RlIGNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUg
YXR0cmlidXRlcyBkZXNjcmliaW5nIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0gcmVmTm9kZSBUaGUgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiB2YWx1ZS4gVGhp
cyBwYXJhbWV0ZXIKLSAgICAgKiBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIDxjb2RlPiBudWxsIDwv
Y29kZT4gLgotICAgICAqCi0gICAgICogQHBhcmFtIG9mZnNldCBUaGUgPGNvZGU+IHN0YXJ0T2Zm
c2V0IDwvY29kZT4gdmFsdWUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoKLSAgICAg
KiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0aW9uCi0gICAgICogTlVMTF9OT0RFX0VSUjogUmFpc2Vk
IGlmIDxjb2RlPiByZWZOb2RlIDwvY29kZT4gaXMgPGNvZGU+IG51bGwKLSAgICAgKiA8L2NvZGU+
IC4KLSAgICAgKgotICAgICAqICBJTlZBTElEX05PREVfVFlQRV9FUlI6IFJhaXNlZCBpZiA8Y29k
ZT4gcmVmTm9kZSA8L2NvZGU+IG9yIGFuCi0gICAgICogYW5jZXN0b3Igb2YgPGNvZGU+IHJlZk5v
ZGUgPC9jb2RlPiBpcyBhbiBBdHRyLCBFbnRpdHksCi0gICAgICogTm90YXRpb24sIG9yIERvY3Vt
ZW50VHlwZSBub2RlLgotICAgICAqCi0gICAgICogIElmIGFuIG9mZnNldCBpcyBvdXQtb2YtYm91
bmRzLCBzaG91bGQgaXQganVzdCBiZSBmaXhlZCB1cCBvcgotICAgICAqIHNob3VsZCBhbiBleGNl
cHRpb24gYmUgcmFpc2VkLgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZXRTdGFydCAoIGNv
bnN0IE5vZGUgJnJlZk5vZGUsIGludCBvZmZzZXQgKTsKLQotICAgIC8qKgotICAgICAqIFNldHMg
dGhlIGF0dHJpYnV0ZXMgZGVzY3JpYmluZyB0aGUgZW5kIG9mIGEgcmFuZ2UuCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0gcmVmTm9kZSBUaGUgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiB2YWx1ZS4gVGhp
cyBwYXJhbWV0ZXIKLSAgICAgKiBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIDxjb2RlPiBudWxsIDwv
Y29kZT4gLgotICAgICAqCi0gICAgICogQHBhcmFtIG9mZnNldCBUaGUgPGNvZGU+IGVuZE9mZnNl
dCA8L2NvZGU+IHZhbHVlLgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqCi0gICAgICog
QGV4Y2VwdGlvbiBSYW5nZUV4Y2VwdGlvbgotICAgICAqIE5VTExfTk9ERV9FUlI6IFJhaXNlZCBp
ZiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IGlzIDxjb2RlPiBudWxsCi0gICAgICogPC9jb2RlPiAu
Ci0gICAgICoKLSAgICAgKiAgSU5WQUxJRF9OT0RFX1RZUEVfRVJSOiBSYWlzZWQgaWYgPGNvZGU+
IHJlZk5vZGUgPC9jb2RlPiBvciBhbgotICAgICAqIGFuY2VzdG9yIG9mIDxjb2RlPiByZWZOb2Rl
IDwvY29kZT4gaXMgYW4gQXR0ciwgRW50aXR5LAotICAgICAqIE5vdGF0aW9uLCBvciBEb2N1bWVu
dFR5cGUgbm9kZS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0RW5kICggY29uc3QgTm9k
ZSAmcmVmTm9kZSwgaW50IG9mZnNldCApOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgc3Rh
cnQgcG9zaXRpb24gdG8gYmUgYmVmb3JlIGEgbm9kZQotICAgICAqCi0gICAgICogQHBhcmFtIHJl
Zk5vZGUgUmFuZ2Ugc3RhcnRzIGJlZm9yZSA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+Ci0gICAgICoK
LSAgICAgKiBAcmV0dXJuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0aW9u
Ci0gICAgICogSU5WQUxJRF9OT0RFX1RZUEVfRVJSOiBSYWlzZWQgaWYgYW4gYW5jZXN0b3Igb2Yg
PGNvZGU+IHJlZk5vZGUKLSAgICAgKiA8L2NvZGU+IGlzIGFuIEF0dHIsIEVudGl0eSwgTm90YXRp
b24sIG9yIERvY3VtZW50VHlwZSBub2RlIG9yCi0gICAgICogaWYgPGNvZGU+IHJlZk5vZGUgPC9j
b2RlPiBpcyBhIERvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50LAotICAgICAqIEF0dHIsIEVudGl0
eSwgb3IgTm90YXRpb24gbm9kZS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0U3RhcnRC
ZWZvcmUgKCBjb25zdCBOb2RlICZyZWZOb2RlICk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRo
ZSBzdGFydCBwb3NpdGlvbiB0byBiZSBhZnRlciBhIG5vZGUKLSAgICAgKgotICAgICAqIEBwYXJh
bSByZWZOb2RlIFJhbmdlIHN0YXJ0cyBhZnRlciA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+Ci0gICAg
ICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0
aW9uCi0gICAgICogSU5WQUxJRF9OT0RFX1RZUEVfRVJSOiBSYWlzZWQgaWYgYW4gYW5jZXN0b3Ig
b2YgPGNvZGU+IHJlZk5vZGUKLSAgICAgKiA8L2NvZGU+IGlzIGFuIEF0dHIsIEVudGl0eSwgTm90
YXRpb24sIG9yIERvY3VtZW50VHlwZSBub2RlIG9yCi0gICAgICogaWYgPGNvZGU+IHJlZk5vZGUg
PC9jb2RlPiBpcyBhIERvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50LAotICAgICAqIEF0dHIsIEVu
dGl0eSwgb3IgTm90YXRpb24gbm9kZS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0U3Rh
cnRBZnRlciAoIGNvbnN0IE5vZGUgJnJlZk5vZGUgKTsKLQotICAgIC8qKgotICAgICAqIFNldHMg
dGhlIGVuZCBwb3NpdGlvbiB0byBiZSBiZWZvcmUgYSBub2RlLgotICAgICAqCi0gICAgICogQHBh
cmFtIHJlZk5vZGUgUmFuZ2UgZW5kcyBiZWZvcmUgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPgotICAg
ICAqCi0gICAgICogQHJldHVybgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBSYW5nZUV4Y2Vw
dGlvbgotICAgICAqIElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIGFuIGFuY2VzdG9y
IG9mIDxjb2RlPiByZWZOb2RlCi0gICAgICogPC9jb2RlPiBpcyBhbiBBdHRyLCBFbnRpdHksIE5v
dGF0aW9uLCBvciBEb2N1bWVudFR5cGUgbm9kZSBvcgotICAgICAqIGlmIDxjb2RlPiByZWZOb2Rl
IDwvY29kZT4gaXMgYSBEb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCwKLSAgICAgKiBBdHRyLCBF
bnRpdHksIG9yIE5vdGF0aW9uIG5vZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHNldEVu
ZEJlZm9yZSAoIGNvbnN0IE5vZGUgJnJlZk5vZGUgKTsKLQotICAgIC8qKgotICAgICAqIFNldHMg
dGhlIGVuZCBvZiBhIHJhbmdlIHRvIGJlIGFmdGVyIGEgbm9kZQotICAgICAqCi0gICAgICogQHBh
cmFtIHJlZk5vZGUgUmFuZ2UgZW5kcyBhZnRlciA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IC4KLSAg
ICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gUmFuZ2VFeGNl
cHRpb24KLSAgICAgKiBJTlZBTElEX05PREVfVFlQRV9FUlI6IFJhaXNlZCBpZiBhbiBhbmNlc3Rv
ciBvZiA8Y29kZT4gcmVmTm9kZQotICAgICAqIDwvY29kZT4gaXMgYW4gQXR0ciwgRW50aXR5LCBO
b3RhdGlvbiBvciBEb2N1bWVudFR5cGUgbm9kZSBvciBpZgotICAgICAqIDxjb2RlPiByZWZOb2Rl
IDwvY29kZT4gaXMgYSBEb2N1bWVudCwgRG9jdW1lbnRGcmFnbWVudCwgQXR0ciwKLSAgICAgKiBF
bnRpdHksIG9yIE5vdGF0aW9uIG5vZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHNldEVu
ZEFmdGVyICggY29uc3QgTm9kZSAmcmVmTm9kZSApOwotCi0gICAgLyoqCi0gICAgICogQ29sbGFw
c2UgYSByYW5nZSBvbnRvIG9uZSBvZiBpdHMgZW5kLXBvaW50cwotICAgICAqCi0gICAgICogQHBh
cmFtIHRvU3RhcnQgSWYgVFJVRSwgY29sbGFwc2VzIHRoZSBSYW5nZSBvbnRvIGl0cyBzdGFydDsg
aWYKLSAgICAgKiBGQUxTRSwgY29sbGFwc2VzIGl0IG9udG8gaXRzIGVuZC4KLSAgICAgKgotICAg
ICAqIEByZXR1cm4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgY29sbGFwc2UgKCBib29sIHRv
U3RhcnQgKTsKLQotICAgIC8qKgotICAgICAqIFNlbGVjdCBhIG5vZGUgYW5kIGl0cyBjb250ZW50
cwotICAgICAqCi0gICAgICogQHBhcmFtIHJlZk5vZGUgVGhlIG5vZGUgdG8gc2VsZWN0LgotICAg
ICAqCi0gICAgICogQHJldHVybgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBSYW5nZUV4Y2Vw
dGlvbgotICAgICAqIElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIGFuIGFuY2VzdG9y
IG9mIDxjb2RlPiByZWZOb2RlCi0gICAgICogPC9jb2RlPiBpcyBhbiBBdHRyLCBFbnRpdHksIE5v
dGF0aW9uIG9yIERvY3VtZW50VHlwZSBub2RlIG9yIGlmCi0gICAgICogPGNvZGU+IHJlZk5vZGUg
PC9jb2RlPiBpcyBhIERvY3VtZW50LCBEb2N1bWVudEZyYWdtZW50LCBBdHRyLAotICAgICAqIEVu
dGl0eSwgb3IgTm90YXRpb24gbm9kZS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2VsZWN0
Tm9kZSAoIGNvbnN0IE5vZGUgJnJlZk5vZGUgKTsKLQotICAgIC8qKgotICAgICAqIFNlbGVjdCB0
aGUgY29udGVudHMgd2l0aGluIGEgbm9kZQotICAgICAqCi0gICAgICogQHBhcmFtIHJlZk5vZGUg
Tm9kZSB0byBzZWxlY3QgZnJvbQotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqCi0gICAg
ICogQGV4Y2VwdGlvbiBSYW5nZUV4Y2VwdGlvbgotICAgICAqIElOVkFMSURfTk9ERV9UWVBFX0VS
UjogUmFpc2VkIGlmIDxjb2RlPiByZWZOb2RlIDwvY29kZT4gb3IgYW4KLSAgICAgKiBhbmNlc3Rv
ciBvZiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IGlzIGFuIEF0dHIsIEVudGl0eSwgTm90YXRpb24K
LSAgICAgKiBvciBEb2N1bWVudFR5cGUgbm9kZS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQg
c2VsZWN0Tm9kZUNvbnRlbnRzICggY29uc3QgTm9kZSAmcmVmTm9kZSApOwotCi0jZW5kaWYKLQog
ICAgIGVudW0gQ29tcGFyZUhvdyB7CiAJU1RBUlRfVE9fU1RBUlQgPSAwLAogCVNUQVJUX1RPX0VO
RCA9IDEsCiAJRU5EX1RPX0VORCA9IDIsCiAJRU5EX1RPX1NUQVJUID0gMwogICAgIH07Ci0KLSNp
ZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgLyoqCi0gICAgICogQ29tcGFyZSB0aGUg
ZW5kLXBvaW50cyBvZiB0d28gcmFuZ2VzIGluIGEgZG9jdW1lbnQuCi0gICAgICoKLSAgICAgKiBA
cGFyYW0gaG93Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gc291cmNlUmFuZ2UKLSAgICAgKgotICAg
ICAqIEByZXR1cm4gLTEsIDAgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29ycmVzcG9u
ZGluZwotICAgICAqIGVuZC1wb2ludCBvZiB0aGUgUmFuZ2UgaXMgYmVmb3JlLCBlcXVhbCB0bywg
b3IgYWZ0ZXIgdGhlCi0gICAgICogY29ycmVzcG9uZGluZyBlbmQtcG9pbnQgb2YgPGNvZGU+IHNv
dXJjZVJhbmdlIDwvY29kZT4gLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRp
b24KLSAgICAgKiBXUk9OR19ET0NVTUVOVF9FUlI6IFJhaXNlZCBpZiB0aGUgdHdvIFJhbmdlcyBh
cmUgbm90IGluIHRoZQotICAgICAqIHNhbWUgZG9jdW1lbnQgb3IgZG9jdW1lbnQgZnJhZ21lbnQu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBzaG9ydCBjb21wYXJlQm91bmRhcnlQb2ludHMgKCBDb21w
YXJlSG93IGhvdywgY29uc3QgUmFuZ2UgJnNvdXJjZVJhbmdlICk7Ci0KLSAgICAvKioKLSAgICAg
KiBAaW50ZXJuYWwKLSAgICAgKiBub3QgcGFydCBvZiB0aGUgRE9NCi0gICAgICoKLSAgICAgKiBD
b21wYXJlIHRoZSBib3VuZGFyeS1wb2ludHMgb2YgYSByYW5nZS4KLSAgICAgKgotICAgICAqIFJl
dHVybiB0cnVlIGlmIHRoZSBzdGFydENvbnRhaW5lciBpcyBiZWZvcmUgdGhlIGVuZENvbnRhaW5l
ciwKLSAgICAgKiBvciBpZiB0aGV5IGFyZSBlcXVhbC4KLSAgICAgKiBSZXR1cm4gZmFsc2UgaWYg
dGhlIHN0YXJ0Q29udGFpbmVyIGlzIGFmdGVyIHRoZSBlbmRDb250YWluZXIuCi0gICAgICoKLSAg
ICAgKi8KLSAgICBib29sIGJvdW5kYXJ5UG9pbnRzVmFsaWQgKCAgKTsKLQotICAgIC8qKgotICAg
ICAqIFJlbW92ZXMgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2UgZnJvbSB0aGUgY29udGFpbmluZyBk
b2N1bWVudCBvcgotICAgICAqIGRvY3VtZW50IGZyYWdtZW50IHdpdGhvdXQgcmV0dXJuaW5nIGEg
cmVmZXJlbmNlIHRvIHRoZSByZW1vdmVkCi0gICAgICogY29udGVudC4KLSAgICAgKgotICAgICAq
IEByZXR1cm4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICog
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgYW55IHBvcnRpb24gb2YgdGhl
Ci0gICAgICogY29udGVudCBvZiB0aGUgcmFuZ2UgaXMgcmVhZC1vbmx5IG9yIGFueSBvZiB0aGUg
bm9kZXMgdGhhdAotICAgICAqIGNvbnRhaW4gYW55IG9mIHRoZSBjb250ZW50IG9mIHRoZSByYW5n
ZSBhcmUgcmVhZC1vbmx5LgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBkZWxldGVDb250ZW50
cyAoICApOwotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2Ug
ZnJvbSB0aGUgY29udGFpbmluZyBkb2N1bWVudCBvcgotICAgICAqIGRvY3VtZW50IGZyYWdtZW50
IHRvIGEgbmV3IERvY3VtZW50RnJhZ21lbnQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEEgRG9j
dW1lbnRGcmFnbWVudCBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgY29udGVudHMuCi0gICAgICoK
LSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5PX01PRElGSUNBVElPTl9B
TExPV0VEX0VSUjogUmFpc2VkIGlmIGFueSBwb3J0aW9uIG9mIHRoZQotICAgICAqIGNvbnRlbnQg
b2YgdGhlIHJhbmdlIGlzIHJlYWQtb25seSBvciBhbnkgb2YgdGhlIG5vZGVzIHdoaWNoCi0gICAg
ICogY29udGFpbiBhbnkgb2YgdGhlIGNvbnRlbnQgb2YgdGhlIHJhbmdlIGFyZSByZWFkLW9ubHku
Ci0gICAgICoKLSAgICAgKiAgSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiBSYWlzZWQgaWYgYSBEb2N1
bWVudFR5cGUgbm9kZSB3b3VsZCBiZQotICAgICAqIGV4dHJhY3RlZCBpbnRvIHRoZSBuZXcgRG9j
dW1lbnRGcmFnbWVudC4KLSAgICAgKgotICAgICAqLwotICAgIERvY3VtZW50RnJhZ21lbnQgZXh0
cmFjdENvbnRlbnRzICggICk7Ci0KLSAgICAvKioKLSAgICAgKiBEdXBsaWNhdGVzIHRoZSBjb250
ZW50cyBvZiBhIHJhbmdlCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEEgRG9jdW1lbnRGcmFnbWVu
dCBjb250YWluaW5nIGNvbnRlbnRzIGVxdWl2YWxlbnQgdG8KLSAgICAgKiB0aG9zZSBvZiB0aGlz
IHJhbmdlLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBI
SUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNlZCBpZiBhIERvY3VtZW50VHlwZSBub2RlIHdvdWxk
IGJlCi0gICAgICogZXh0cmFjdGVkIGludG8gdGhlIG5ldyBEb2N1bWVudEZyYWdtZW50LgotICAg
ICAqCi0gICAgICovCi0gICAgRG9jdW1lbnRGcmFnbWVudCBjbG9uZUNvbnRlbnRzICggICk7Ci0K
LSAgICAvKioKLSAgICAgKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSBkb2N1bWVudCBvciBkb2N1
bWVudCBmcmFnbWVudCBhdCB0aGUKLSAgICAgKiBzdGFydCBvZiB0aGUgcmFuZ2UuCi0gICAgICoK
LSAgICAgKiBAcGFyYW0gbmV3Tm9kZSBUaGUgbm9kZSB0byBpbnNlcnQgYXQgdGhlIHN0YXJ0IG9m
IHRoZSByYW5nZQotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqCi0gICAgICogQGV4Y2Vw
dGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJh
aXNlZCBpZiBhbiBhbmNlc3RvciBjb250YWluZXIgb2YKLSAgICAgKiB0aGUgc3RhcnQgb2YgdGhl
IHJhbmdlIGlzIHJlYWQtb25seS4KLSAgICAgKgotICAgICAqICBXUk9OR19ET0NVTUVOVF9FUlI6
IFJhaXNlZCBpZiA8Y29kZT4gbmV3Tm9kZSA8L2NvZGU+IGFuZCB0aGUKLSAgICAgKiBjb250YWlu
ZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBSYW5nZSB3ZXJlIG5vdCBjcmVhdGVkIGZyb20gdGhlCi0g
ICAgICogc2FtZSBkb2N1bWVudC4KLSAgICAgKgotICAgICAqICBISUVSQVJDSFlfUkVRVUVTVF9F
UlI6IFJhaXNlZCBpZiB0aGUgY29udGFpbmVyIG9mIHRoZSBzdGFydCBvZgotICAgICAqIHRoZSBS
YW5nZSBpcyBvZiBhIHR5cGUgdGhhdCBkb2VzIG5vdCBhbGxvdyBjaGlsZHJlbiBvZiB0aGUgdHlw
ZQotICAgICAqIG9mIDxjb2RlPiBuZXdOb2RlIDwvY29kZT4gb3IgaWYgPGNvZGU+IG5ld05vZGUg
PC9jb2RlPiBpcyBhbgotICAgICAqIGFuY2VzdG9yIG9mIHRoZSBjb250YWluZXIgLgotICAgICAq
Ci0gICAgICogQGV4Y2VwdGlvbiBSYW5nZUV4Y2VwdGlvbgotICAgICAqIElOVkFMSURfTk9ERV9U
WVBFX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBub2RlIDwvY29kZT4gaXMgYW4KLSAgICAgKiBBdHRy
LCBFbnRpdHksIE5vdGF0aW9uLCBEb2N1bWVudEZyYWdtZW50LCBvciBEb2N1bWVudCBub2RlLgot
ICAgICAqCi0gICAgICovCi0gICAgdm9pZCBpbnNlcnROb2RlICggY29uc3QgTm9kZSAmbmV3Tm9k
ZSApOwotCi0gICAgLyoqCi0gICAgICogUmVwYXJlbnRzIHRoZSBjb250ZW50cyBvZiB0aGUgcmFu
Z2UgdG8gdGhlIGdpdmVuIG5vZGUgYW5kCi0gICAgICogaW5zZXJ0cyB0aGUgbm9kZSBhdCB0aGUg
cG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZS4KLSAgICAgKgotICAgICAqIEBwYXJh
bSBuZXdQYXJlbnQgVGhlIG5vZGUgdG8gc3Vycm91bmQgdGhlIGNvbnRlbnRzIHdpdGguCi0gICAg
ICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlv
bgotICAgICAqIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIGFuIGFuY2Vz
dG9yIGNvbnRhaW5lciBvZgotICAgICAqIGVpdGhlciBlbmQtcG9pbnQgb2YgdGhlIHJhbmdlIGlz
IHJlYWQtb25seS4KLSAgICAgKgotICAgICAqICBXUk9OR19ET0NVTUVOVF9FUlI6IFJhaXNlZCBp
ZiA8Y29kZT4gbmV3UGFyZW50IDwvY29kZT4gYW5kIHRoZQotICAgICAqIGNvbnRhaW5lciBvZiB0
aGUgc3RhcnQgb2YgdGhlIFJhbmdlIHdlcmUgbm90IGNyZWF0ZWQgZnJvbSB0aGUKLSAgICAgKiBz
YW1lIGRvY3VtZW50LgotICAgICAqCi0gICAgICogIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogUmFp
c2VkIGlmIHRoZSBjb250YWluZXIgb2YgdGhlIHN0YXJ0IG9mCi0gICAgICogdGhlIFJhbmdlIGlz
IG9mIGEgdHlwZSB0aGF0IGRvZXMgbm90IGFsbG93IGNoaWxkcmVuIG9mIHRoZSB0eXBlCi0gICAg
ICogb2YgPGNvZGU+IG5ld1BhcmVudCA8L2NvZGU+IG9yIGlmIDxjb2RlPiBuZXdQYXJlbnQgPC9j
b2RlPiBpcwotICAgICAqIGFuIGFuY2VzdG9yIG9mIHRoZSBjb250YWluZXIgb3IgaWYgPGNvZGU+
IG5vZGUgPC9jb2RlPiB3b3VsZAotICAgICAqIGVuZCB1cCB3aXRoIGEgY2hpbGQgbm9kZSBvZiBh
IHR5cGUgbm90IGFsbG93ZWQgYnkgdGhlIHR5cGUgb2YKLSAgICAgKiA8Y29kZT4gbm9kZSA8L2Nv
ZGU+IC4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gUmFuZ2VFeGNlcHRpb24KLSAgICAgKiBC
QURfRU5EUE9JTlRTX0VSUjogUmFpc2VkIGlmIHRoZSByYW5nZSBwYXJ0aWFsbHkgc2VsZWN0cyBh
Ci0gICAgICogbm9uLXRleHQgbm9kZS4KLSAgICAgKgotICAgICAqICBJTlZBTElEX05PREVfVFlQ
RV9FUlI6IFJhaXNlZCBpZiA8Y29kZT4gbm9kZSA8L2NvZGU+IGlzIGFuCi0gICAgICogQXR0ciwg
RW50aXR5LCBEb2N1bWVudFR5cGUsIE5vdGF0aW9uLCBEb2N1bWVudCwgb3IKLSAgICAgKiBEb2N1
bWVudEZyYWdtZW50IG5vZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHN1cnJvdW5kQ29u
dGVudHMgKCBjb25zdCBOb2RlICZuZXdQYXJlbnQgKTsKLQotICAgIC8qKgotICAgICAqIFByb2R1
Y2VzIGEgbmV3IHJhbmdlIHdob3NlIGVuZC1wb2ludHMgYXJlIGVxdWFsIHRvIHRoZQotICAgICAq
IGVuZC1wb2ludHMgb2YgdGhlIHJhbmdlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgZHVw
bGljYXRlZCByYW5nZS4KLSAgICAgKgotICAgICAqLwotICAgIFJhbmdlIGNsb25lUmFuZ2UgKCAg
KTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2UgYXMg
YSBzdHJpbmcuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBjb250ZW50cyBvZiB0aGUgcmFu
Z2UuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgdG9TdHJpbmcgKCAgKTsKLSAgICAK
LSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwgTm90IHBhcnQgb2YgRE9NCi0gICAgICovCi0gICAg
RE9NU3RyaW5nIHRvSFRNTCAoICApOwotCi0gICAgLyogTW96aWxsYSBleHRlbnNpb24gLSBvbmx5
IHdvcmtzIGZvciBIVE1MIGRvY3VtZW50cy4gKi8KLSAgICBEb2N1bWVudEZyYWdtZW50IGNyZWF0
ZUNvbnRleHR1YWxGcmFnbWVudCAoRE9NU3RyaW5nICZodG1sKTsKLSAgICAKLSAgICAvKioKLSAg
ICAgKiBDYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmFuZ2UgaXMgbm8gbG9uZ2VyIGluIHVz
ZSBhbmQgdGhhdAotICAgICAqIHRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgcmVsaW5xdWlzaCBhbnkg
cmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aAotICAgICAqIHRoaXMgcmFuZ2UuIFN1YnNlcXVlbnQg
Y2FsbHMgdG8gYW55IG1ldGhvZHMgb3IgYXR0cmlidXRlIGdldHRlcnMKLSAgICAgKiBvbiB0aGlz
IHJhbmdlIHdpbGwgcmVzdWx0IGluIGEgRE9NRXhjZXB0aW9uIGJlaW5nIHRocm93biB3aXRoIGFu
Ci0gICAgICogZXJyb3IgY29kZSBvZiBJTlZBTElEX1NUQVRFX0VSUi4KLSAgICAgKgotICAgICAq
LwotICAgIHZvaWQgZGV0YWNoICggICk7Ci0KLSAgICAvKioKLSAgICAgKiBub3QgcGFydCBvZiB0
aGUgRE9NCi0gICAgICogVFJVRSBpZiB0aGUgcmFuZ2UgaXMgZGV0YWNoZWQKLSAgICAgKgotICAg
ICAqLwotICAgIGJvb2wgaXNEZXRhY2hlZCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQGlu
dGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwotICAgIFJhbmdlKFJh
bmdlSW1wbCAqaSk7Ci0gICAgUmFuZ2VJbXBsICpoYW5kbGUoKSBjb25zdDsKLSAgICBib29sIGlz
TnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgUmFuZ2VJbXBsICppbXBsOwotCi1wcml2
YXRlOgotICAgIHZvaWQgdGhyb3dFeGNlcHRpb24oaW50IGV4Y2VwdGlvbmNvZGUpIGNvbnN0Owot
Ci0jZW5kaWYKLQogfTsKIAogLy8gVXNlZCBkZXRlcm1pbmUgaG93IHRvIGludGVycHJldCB0aGUg
b2Zmc2V0cyB1c2VkIGluIERPTSBSYW5nZXMuCkluZGV4OiBraHRtbC9kb20vZG9tMl90cmF2ZXJz
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9k
b20yX3RyYXZlcnNhbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1y
MS43IGtodG1sL2RvbS9kb20yX3RyYXZlcnNhbC5jcHAKLS0tIGtodG1sL2RvbS9kb20yX3RyYXZl
cnNhbC5jcHAJMyBPY3QgMjAwNSAyMToxMjoxMSAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9kb20y
X3RyYXZlcnNhbC5jcHAJMjkgTm92IDIwMDUgMjI6NTE6MzkgLTAwMDAKQEAgLTIzLDMzNSArMjMs
MTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJkb20vZG9tMl90cmF2ZXJzYWwu
aCIKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSNpbmNsdWRlICJkb20vZG9tX2V4
Y2VwdGlvbi5oIgotI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCi0jaW5jbHVkZSAieG1sL2Rv
bTJfdHJhdmVyc2FsaW1wbC5oIgotCi0jZW5kaWYKIAogbmFtZXNwYWNlIERPTSB7CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KIHNob3J0IE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoRmlsdGVyTm9kZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKIH0KIAotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLU5vZGVGaWx0ZXI6Ok5vZGVG
aWx0ZXIoKSA6IGltcGwoMCkKLXsKLX0KLQotTm9kZUZpbHRlcjo6Tm9kZUZpbHRlcihOb2RlRmls
dGVyQ29uZGl0aW9uICpjb25kaXRpb24pCi17Ci0gICAgaW1wbCA9IG5ldyBOb2RlRmlsdGVySW1w
bChjb25kaXRpb24pOwotICAgIGltcGwtPnJlZigpOwotfQotCi1Ob2RlRmlsdGVyOjpOb2RlRmls
dGVyKGNvbnN0IE5vZGVGaWx0ZXIgJm90aGVyKQotewotICAgIGltcGwgPSBvdGhlci5pbXBsOwot
ICAgIGlmIChpbXBsKSAKLSAgICAgICAgaW1wbC0+cmVmKCk7Ci19Ci0KLU5vZGVGaWx0ZXI6Ok5v
ZGVGaWx0ZXIoTm9kZUZpbHRlckltcGwgKmkpCi17Ci0gICAgaW1wbCA9IGk7Ci0gICAgaWYgKGlt
cGwpCi0gICAgICAgIGltcGwtPnJlZigpOwotfQotCi1Ob2RlRmlsdGVyICZOb2RlRmlsdGVyOjpv
cGVyYXRvcj0oY29uc3QgTm9kZUZpbHRlciAmb3RoZXIpCi17Ci0gICAgaWYgKGltcGwgPT0gb3Ro
ZXIuaW1wbCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIAotICAgIE5vZGVGaWx0ZXJJbXBs
ICpvbGQgPSBpbXBsOwotICAgIGltcGwgPSBvdGhlci5pbXBsOwotICAgIGlmIChpbXBsKSAKLSAg
ICAgICAgaW1wbC0+cmVmKCk7Ci0gICAgaWYgKG9sZCkgCi0gICAgICAgIG9sZC0+ZGVyZWYoKTsK
LQotICAgIHJldHVybiAqdGhpczsKLX0KLQotTm9kZUZpbHRlcjo6fk5vZGVGaWx0ZXIoKQotewot
ICAgIGlmIChpbXBsKSAKLSAgICAgICAgaW1wbC0+ZGVyZWYoKTsKLX0KLQotc2hvcnQgTm9kZUZp
bHRlcjo6YWNjZXB0Tm9kZShjb25zdCBOb2RlICZub2RlKSBjb25zdAotewotICAgIGlmIChpbXBs
KQotICAgICAgICByZXR1cm4gaW1wbC0+YWNjZXB0Tm9kZShub2RlLmhhbmRsZSgpKTsKLSAgICBy
ZXR1cm4gRklMVEVSX0FDQ0VQVDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTm9kZUl0ZXJhdG9yOjpOb2Rl
SXRlcmF0b3IoKQotewotICAgIGltcGwgPSAwOwotfQotCi1Ob2RlSXRlcmF0b3I6Ok5vZGVJdGVy
YXRvcihjb25zdCBOb2RlSXRlcmF0b3IgJm90aGVyKQotewotICAgIGltcGwgPSBvdGhlci5pbXBs
OwotICAgIGlmIChpbXBsKSAKLSAgICAgICAgaW1wbC0+cmVmKCk7Ci19Ci0KLU5vZGVJdGVyYXRv
cjo6Tm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvckltcGwgKmkpCi17Ci0gICAgaW1wbCA9IGk7Ci0g
ICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5yZWYoKTsKLX0KLQotTm9kZUl0ZXJhdG9yICZO
b2RlSXRlcmF0b3I6Om9wZXJhdG9yPShjb25zdCBOb2RlSXRlcmF0b3IgJm90aGVyKQotewotICAg
IGlmIChpbXBsID09IG90aGVyLmltcGwpCi0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICAKLSAg
ICBOb2RlSXRlcmF0b3JJbXBsICpvbGQgPSBpbXBsOwotICAgIGltcGwgPSBvdGhlci5pbXBsOwot
ICAgIGlmIChpbXBsKSAKLSAgICAgICAgaW1wbC0+cmVmKCk7Ci0gICAgaWYgKG9sZCkgCi0gICAg
ICAgIG9sZC0+ZGVyZWYoKTsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotTm9kZUl0ZXJhdG9y
Ojp+Tm9kZUl0ZXJhdG9yKCkKLXsKLSAgICBpZiAoaW1wbCkgCi0gICAgICAgIGltcGwtPmRlcmVm
KCk7Ci19Ci0KLU5vZGUgTm9kZUl0ZXJhdG9yOjpyb290KCkgY29uc3QKLXsKLSAgICBpZiAoaW1w
bCkgCi0gICAgICAgIHJldHVybiBpbXBsLT5yb290KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVu
c2lnbmVkIE5vZGVJdGVyYXRvcjo6d2hhdFRvU2hvdygpIGNvbnN0Ci17Ci0gICAgaWYgKGltcGwp
IAotICAgICAgICByZXR1cm4gaW1wbC0+d2hhdFRvU2hvdygpOwotICAgIHJldHVybiAwOwotfQot
Ci1Ob2RlRmlsdGVyIE5vZGVJdGVyYXRvcjo6ZmlsdGVyKCkgY29uc3QKLXsKLSAgICBpZiAoaW1w
bCkgCi0gICAgICAgIHJldHVybiBpbXBsLT5maWx0ZXIoKTsKLSAgICByZXR1cm4gTm9kZUZpbHRl
cigpOwotfQotCi1ib29sIE5vZGVJdGVyYXRvcjo6ZXhwYW5kRW50aXR5UmVmZXJlbmNlcygpIGNv
bnN0Ci17Ci0gICAgaWYgKGltcGwpIAotICAgICAgICByZXR1cm4gaW1wbC0+ZXhwYW5kRW50aXR5
UmVmZXJlbmNlcygpOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlIE5vZGVJdGVyYXRvcjo6bmV4
dE5vZGUoKQotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKERP
TUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgaW50IGV4Y2VwdGlvbmNvZGUg
PSAwOwotICAgIE5vZGVJbXBsICpyZXN1bHQgPSBpbXBsLT5uZXh0Tm9kZShleGNlcHRpb25jb2Rl
KTsKLSAgICBpZiAoZXhjZXB0aW9uY29kZSkKLSAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKGV4
Y2VwdGlvbmNvZGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU5vZGUgTm9kZUl0ZXJhdG9y
OjpwcmV2aW91c05vZGUoKQotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgdGhyb3cgRE9NRXhj
ZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgaW50IGV4Y2Vw
dGlvbmNvZGUgPSAwOwotICAgIE5vZGVJbXBsICpyZXN1bHQgPSBpbXBsLT5wcmV2aW91c05vZGUo
ZXhjZXB0aW9uY29kZSk7Ci0gICAgaWYgKGV4Y2VwdGlvbmNvZGUpCi0gICAgICAgIHRocm93IERP
TUV4Y2VwdGlvbihleGNlcHRpb25jb2RlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IE5vZGVJdGVyYXRvcjo6ZGV0YWNoKCkKLXsKLSAgICBpZiAoIWltcGwpCi0gICAgICAgIHRocm93
IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIGlu
dCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBpbXBsLT5kZXRhY2goZXhjZXB0aW9uY29kZSk7Ci0g
ICAgaWYgKGV4Y2VwdGlvbmNvZGUpCi0gICAgICAgIHRocm93IERPTUV4Y2VwdGlvbihleGNlcHRp
b25jb2RlKTsKLX0KLQotTm9kZSBOb2RlSXRlcmF0b3I6OnJlZmVyZW5jZU5vZGUoKSBjb25zdAot
ewotICAgIGlmICghaW1wbCkKLSAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlv
bjo6SU5WQUxJRF9TVEFURV9FUlIpOwotICAgICAgICAKLSAgICByZXR1cm4gaW1wbC0+cmVmZXJl
bmNlTm9kZSgpOwotfQotCi1ib29sIE5vZGVJdGVyYXRvcjo6cG9pbnRlckJlZm9yZVJlZmVyZW5j
ZU5vZGUoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgdGhyb3cgRE9NRXhjZXB0
aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotICAgICAgICAKLSAgICByZXR1
cm4gaW1wbC0+cG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKTsKLX0KLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
VHJlZVdhbGtlcjo6VHJlZVdhbGtlcigpCi17Ci0gICAgaW1wbCA9IDA7Ci19Ci0KLVRyZWVXYWxr
ZXI6OlRyZWVXYWxrZXIoY29uc3QgVHJlZVdhbGtlciAmb3RoZXIpCi17Ci0gICAgaW1wbCA9IG90
aGVyLmltcGw7Ci0gICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5yZWYoKTsKLX0KLQotVHJl
ZVdhbGtlcjo6VHJlZVdhbGtlcihUcmVlV2Fsa2VySW1wbCAqaSkKLXsKLSAgICBpbXBsID0gaTsK
LSAgICBpZiAoaW1wbCkgCi0gICAgICAgIGltcGwtPnJlZigpOwotfQotCi1UcmVlV2Fsa2VyICZU
cmVlV2Fsa2VyOjpvcGVyYXRvcj0oY29uc3QgVHJlZVdhbGtlciAmb3RoZXIpCi17Ci0gICAgaWYg
KGltcGwgPT0gb3RoZXIuaW1wbCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIAotICAgIFRy
ZWVXYWxrZXJJbXBsICpvbGQgPSBpbXBsOwotICAgIGltcGwgPSBvdGhlci5pbXBsOwotICAgIGlm
IChpbXBsKSAKLSAgICAgICAgaW1wbC0+cmVmKCk7Ci0gICAgaWYgKG9sZCkgCi0gICAgICAgIG9s
ZC0+ZGVyZWYoKTsKLQotICAgIHJldHVybiAqdGhpczsKLX0KLQotVHJlZVdhbGtlcjo6flRyZWVX
YWxrZXIoKQotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgaW1wbC0+ZGVyZWYoKTsKLX0KLQot
Tm9kZSBUcmVlV2Fsa2VyOjpyb290KCkgY29uc3QKLXsKLSAgICBpZiAoaW1wbCkgCi0gICAgICAg
IHJldHVybiBpbXBsLT5yb290KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIFRyZWVX
YWxrZXI6OndoYXRUb1Nob3coKSBjb25zdAotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0
dXJuIGltcGwtPndoYXRUb1Nob3coKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZUZpbHRlciBU
cmVlV2Fsa2VyOjpmaWx0ZXIoKSBjb25zdAotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0
dXJuIGltcGwtPmZpbHRlcigpOwotICAgIHJldHVybiBOb2RlRmlsdGVyKCk7Ci19Ci0KLWJvb2wg
VHJlZVdhbGtlcjo6ZXhwYW5kRW50aXR5UmVmZXJlbmNlcygpIGNvbnN0Ci17Ci0gICAgaWYgKGlt
cGwpIHJldHVybiBpbXBsLT5leHBhbmRFbnRpdHlSZWZlcmVuY2VzKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1Ob2RlIFRyZWVXYWxrZXI6OmN1cnJlbnROb2RlKCkgY29uc3QKLXsKLSAgICBp
ZiAoaW1wbCkgCi0gICAgICAgIHJldHVybiBpbXBsLT5jdXJyZW50Tm9kZSgpOwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIFRyZWVXYWxrZXI6OnNldEN1cnJlbnROb2RlKGNvbnN0IE5vZGUgJm5v
ZGUpCi17Ci0gICAgaWYgKGltcGwpIHsKLSAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwot
ICAgICAgICBpbXBsLT5zZXRDdXJyZW50Tm9kZShub2RlLmhhbmRsZSgpLCBleGNlcHRpb25jb2Rl
KTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCi0gICAgICAgICAgICB0aHJvdyBET01FeGNl
cHRpb24oZXhjZXB0aW9uY29kZSk7Ci0gICAgfQotfQotCi1Ob2RlIFRyZWVXYWxrZXI6OnBhcmVu
dE5vZGUoKQotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwtPnBhcmVudE5v
ZGUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKCkK
LXsKLSAgICBpZiAoaW1wbCkgCi0gICAgICAgIHJldHVybiBpbXBsLT5maXJzdENoaWxkKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgVHJlZVdhbGtlcjo6bGFzdENoaWxkKCkKLXsKLSAgICBp
ZiAoaW1wbCkgCi0gICAgICAgIHJldHVybiBpbXBsLT5sYXN0Q2hpbGQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotTm9kZSBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoKQotewotICAgIGlmIChp
bXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwtPnByZXZpb3VzU2libGluZygpOwotICAgIHJldHVy
biAwOwotfQotCi1Ob2RlIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKCkKLXsKLSAgICBpZiAoaW1w
bCkgCi0gICAgICAgIHJldHVybiBpbXBsLT5uZXh0U2libGluZygpOwotICAgIHJldHVybiAwOwot
fQotCi1Ob2RlIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZSgpCi17Ci0gICAgaWYgKGltcGwpIAot
ICAgICAgICByZXR1cm4gaW1wbC0+cHJldmlvdXNOb2RlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LU5vZGUgVHJlZVdhbGtlcjo6bmV4dE5vZGUoKQotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAg
cmV0dXJuIGltcGwtPm5leHROb2RlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgotCiB9
IC8vIG5hbWVzcGFjZSBET00KSW5kZXg6IGtodG1sL2RvbS9kb20yX3RyYXZlcnNhbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb20yX3RyYXZlcnNh
bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtcCAtdSAtcjEuNiBraHRtbC9kb20v
ZG9tMl90cmF2ZXJzYWwuaAotLS0ga2h0bWwvZG9tL2RvbTJfdHJhdmVyc2FsLmgJMTYgU2VwIDIw
MDUgMjI6NDI6MDMgLTAwMDAJMS42CisrKyBraHRtbC9kb20vZG9tMl90cmF2ZXJzYWwuaAkyOSBO
b3YgMjAwNSAyMjo1MTozOSAtMDAwMApAQCAtMjcsMTMgKzI3LDcgQEAKICNpZm5kZWYgX2RvbTJf
dHJhdmVyc2FsX2hfCiAjZGVmaW5lIF9kb20yX3RyYXZlcnNhbF9oXwogCi0jaW5jbHVkZSA8ZG9t
L2RvbV9taXNjLmg+Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0jaW5jbHVkZSA8
ZG9tL2RvbV9ub2RlLmg+Ci0KLSNlbmRpZgorI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCiAKIG5h
bWVzcGFjZSBET00gewogCkBAIC00Miw2NCArMzYsMjIgQEAgY2xhc3MgTm9kZUZpbHRlckltcGw7
CiBjbGFzcyBOb2RlSXRlcmF0b3JJbXBsOwogY2xhc3MgVHJlZVdhbGtlckltcGw7CiAKLSNpZiAh
S0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi10eXBlZGVmIGNvbnN0IE5vZGUgJkZpbHRlck5vZGU7
Ci0KLSNlbHNlCi0KIHR5cGVkZWYgTm9kZUltcGwgKkZpbHRlck5vZGU7CiAKLSNlbmRpZgotCi1j
bGFzcyBOb2RlRmlsdGVyQ29uZGl0aW9uIDogcHVibGljIERvbVNoYXJlZAorY2xhc3MgTm9kZUZp
bHRlckNvbmRpdGlvbiA6IHB1YmxpYyBraHRtbDo6U2hhcmVkPE5vZGVGaWx0ZXJDb25kaXRpb24+
CiB7CiBwdWJsaWM6CisgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNvbmRpdGlvbigpIHsgfQorCiAg
ICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEZpbHRlck5vZGUpIGNvbnN0OwogfTsKIAotLyoq
Ci0gKiBGaWx0ZXJzIGFyZSBvYmplY3RzIHRoYXQga25vdyBob3cgdG8gImZpbHRlciBvdXQiIG5v
ZGVzLiBJZiBhbgotICogSXRlcmF0b3Igb3IgVHJlZVdhbGtlciBpcyBnaXZlbiBhIGZpbHRlciwg
YmVmb3JlIGl0Ci0gKiByZXR1cm5zIHRoZSBuZXh0IG5vZGUsIGl0IGFwcGxpZXMgdGhlIGZpbHRl
ci4gSWYgdGhlIGZpbHRlciBzYXlzIHRvCi0gKiBhY2NlcHQgdGhlIG5vZGUsIHRoZSBJdGVyYXRv
ciByZXR1cm5zIGl0OyBvdGhlcndpc2UsIHRoZSBJdGVyYXRvcgotICogbG9va3MgZm9yIHRoZSBu
ZXh0IG5vZGUgYW5kIHByZXRlbmRzIHRoYXQgdGhlIG5vZGUgdGhhdCB3YXMKLSAqIHJlamVjdGVk
IHdhcyBub3QgdGhlcmUuCi0gKgotICogIFRoZSBET00gZG9lcyBub3QgcHJvdmlkZSBhbnkgZmls
dGVycy4gRmlsdGVyIGlzIGp1c3QgYW4gaW50ZXJmYWNlCi0gKiB0aGF0IHVzZXJzIGNhbiBpbXBs
ZW1lbnQgdG8gcHJvdmlkZSB0aGVpciBvd24gZmlsdGVycy4KLSAqCi0gKiAgRmlsdGVycyBkbyBu
b3QgbmVlZCB0byBrbm93IGhvdyB0byBpdGVyYXRlLCBub3IgZG8gdGhleSBuZWVkIHRvCi0gKiBr
bm93IGFueXRoaW5nIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IGlzIGJlaW5nIGl0ZXJh
dGVkLiBUaGlzCi0gKiBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8gd3JpdGUgZmlsdGVycywgc2luY2Ug
dGhlIG9ubHkgdGhpbmcgdGhleSBoYXZlCi0gKiB0byBrbm93IGhvdyB0byBkbyBpcyBldmFsdWF0
ZSBhIHNpbmdsZSBub2RlLiBPbmUgZmlsdGVyIG1heSBiZSB1c2VkCi0gKiB3aXRoIGEgbnVtYmVy
IG9mIGRpZmZlcmVudCBraW5kcyBvZiBJdGVyYXRvcnMsIGVuY291cmFnaW5nIGNvZGUKLSAqIHJl
dXNlLgotICoKLSAqIFRvIGNyZWF0ZSB5b3VyIG93biBjdXN0b20gTm9kZUZpbHRlciwgZGVmaW5l
IGEgc3ViY2xhc3Mgb2YKLSAqIEN1c3RvbU5vZGVGaWx0ZXIgd2hpY2ggb3ZlcnJpZGVzIHRoZSBh
Y2NlcHROb2RlKCkgbWV0aG9kIGFuZCBhc3NpZ24KLSAqIGFuIGluc3RhbmNlIG9mIGl0IHRvIHRo
ZSBOb2RlRmlsdGVyLiBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUKLSAqIEN1c3RvbU5vZGVGaWx0
ZXIgY2xhc3MKLSAqLwogY2xhc3MgTm9kZUZpbHRlcgogewogcHVibGljOgotCi0jaWYgIUtIVE1M
X05PX0NQTFVTUExVU19ET00KLQotICAgIE5vZGVGaWx0ZXIoKTsKLSAgICBOb2RlRmlsdGVyKE5v
ZGVGaWx0ZXJDb25kaXRpb24gKik7Ci0gICAgTm9kZUZpbHRlcihOb2RlRmlsdGVySW1wbCAqKTsK
LSAgICBOb2RlRmlsdGVyKGNvbnN0IE5vZGVGaWx0ZXIgJm90aGVyKTsKLSAgICBOb2RlRmlsdGVy
ICZvcGVyYXRvcj0oY29uc3QgTm9kZUZpbHRlciAmb3RoZXIpOwotICAgIH5Ob2RlRmlsdGVyKCk7
Ci0KLSNlbmRpZgotCiAgICAgLyoqCiAgICAgICogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJl
IHJldHVybmVkIGJ5IHRoZSBhY2NlcHROb2RlKCkKICAgICAgKiBtZXRob2Q6Ci0gICAgICoKICAg
ICAgKi8KICAgICBlbnVtIHsKICAgICAgICAgRklMVEVSX0FDQ0VQVCA9IDEsCkBAIC0xMTIsNyAr
NjQsNiBAQCBwdWJsaWM6CiAgICAgICogVGhleSBhcmUgdGhlIHNhbWUgYXMgdGhlIHNldCBvZiBw
b3NzaWJsZSB0eXBlcyBmb3IgTm9kZSwgYW5kCiAgICAgICogdGhlaXIgdmFsdWVzIGFyZSBkZXJp
dmVkIGJ5IHVzaW5nIGEgYml0IHBvc2l0aW9uIGNvcnJlc3BvbmRpbmcKICAgICAgKiB0byB0aGUg
dmFsdWUgb2YgTm9kZVR5cGUgZm9yIHRoZSBlcXVpdmFsZW50IG5vZGUgdHlwZS4KLSAgICAgKgog
ICAgICAqLwogICAgIGVudW0gewogICAgICAgICBTSE9XX0FMTCAgICAgICAgICAgICAgICAgICAg
ICAgPSAweEZGRkZGRkZGLApAQCAtMTI5LDQ1MiArODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFNI
T1dfRE9DVU1FTlRfRlJBR01FTlQgICAgICAgICA9IDB4MDAwMDA0MDAsCiAgICAgICAgIFNIT1df
Tk9UQVRJT04gICAgICAgICAgICAgICAgICA9IDB4MDAwMDA4MDAKICAgICB9OwotCi0jaWYgIUtI
VE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIC8qKgotICAgICAqIFRlc3Qgd2hldGhlciBhIHNw
ZWNpZmllZCBub2RlIGlzIHZpc2libGUgaW4gdGhlIGxvZ2ljYWwgdmlldyBvZgotICAgICAqIGEg
VHJlZVdhbGtlciBvciBOb2RlSXRlcmF0b3IuIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQg
YnkKLSAgICAgKiB0aGUgaW1wbGVtZW50YXRpb24gb2YgVHJlZVdhbGtlciBhbmQgTm9kZUl0ZXJh
dG9yOyBpdCBpcyBub3QKLSAgICAgKiBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZGlyZWN0bHkgZnJv
bSB1c2VyIGNvZGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbiBUaGUgbm9kZSB0byBjaGVjayB0
byBzZWUgaWYgaXQgcGFzc2VzIHRoZSBmaWx0ZXIgb3IKLSAgICAgKiBub3QuCi0gICAgICoKLSAg
ICAgKiBAcmV0dXJuIGEgY29uc3RhbnQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIG5vZGUgaXMg
YWNjZXB0ZWQsCi0gICAgICogcmVqZWN0ZWQsIG9yIHNraXBwZWQsIGFzIGRlZmluZWQgPGEKLSAg
ICAgKiBocmVmPSIjVHJhdmVyc2FsLU5vZGVGaWx0ZXItYWNjZXB0Tm9kZS1jb25zdGFudHMiPiBh
Ym92ZSA8L2E+IC4KLSAgICAgKgotICAgICAqLwotICAgIHNob3J0IGFjY2VwdE5vZGUoY29uc3Qg
Tm9kZSAmKSBjb25zdDsKLQotICAgIE5vZGVGaWx0ZXJJbXBsICpoYW5kbGUoKSBjb25zdCB7IHJl
dHVybiBpbXBsOyB9Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBpbXBsID09IDA7
IH0KLQotcHJpdmF0ZToKLSAgICBOb2RlRmlsdGVySW1wbCAqaW1wbDsKLQotI2VuZGlmCi0KLX07
Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0vKioKLSAqIE5vZGVJdGVyYXRvcnMg
YXJlIHVzZWQgdG8gc3RlcCB0aHJvdWdoIGEgc2V0IG9mIG5vZGVzLCBlLmcuIHRoZSBzZXQKLSAq
IG9mIG5vZGVzIGluIGEgTm9kZUxpc3QsIHRoZSBkb2N1bWVudCBzdWJ0cmVlIGdvdmVybmVkIGJ5
IGEKLSAqIHBhcnRpY3VsYXIgbm9kZSwgdGhlIHJlc3VsdHMgb2YgYSBxdWVyeSwgb3IgYW55IG90
aGVyIHNldCBvZiBub2Rlcy4KLSAqIFRoZSBzZXQgb2Ygbm9kZXMgdG8gYmUgaXRlcmF0ZWQgaXMg
ZGV0ZXJtaW5lZCBieSB0aGUgaW1wbGVtZW50YXRpb24KLSAqIG9mIHRoZSBOb2RlSXRlcmF0b3Iu
IERPTSBMZXZlbCAyIHNwZWNpZmllcyBhIHNpbmdsZSBOb2RlSXRlcmF0b3IKLSAqIGltcGxlbWVu
dGF0aW9uIGZvciBkb2N1bWVudC1vcmRlciB0cmF2ZXJzYWwgb2YgYSBkb2N1bWVudCBzdWJ0cmVl
LgotICogSW5zdGFuY2VzIG9mIHRoZXNlIGl0ZXJhdG9ycyBhcmUgY3JlYXRlZCBieSBjYWxsaW5n
Ci0gKiBEb2N1bWVudFRyYXZlcnNhbC5jcmVhdGVOb2RlSXRlcmF0b3IoKS4KLSAqCi0gKiAgQW55
IEl0ZXJhdG9yIHRoYXQgcmV0dXJucyBub2RlcyBtYXkgaW1wbGVtZW50IHRoZQotICogTm9kZUl0
ZXJhdG9yIGludGVyZmFjZS4gVXNlcnMgYW5kIHZlbmRvciBsaWJyYXJpZXMgbWF5IGFsc28KLSAq
IGNob29zZSB0byBjcmVhdGUgSXRlcmF0b3JzIHRoYXQgaW1wbGVtZW50IHRoZSBOb2RlSXRlcmF0
b3IKLSAqIGludGVyZmFjZS4KLSAqCi0gKi8KLWNsYXNzIE5vZGVJdGVyYXRvcgotewotcHVibGlj
OgotICAgIE5vZGVJdGVyYXRvcihjb25zdCBOb2RlSXRlcmF0b3IgJm90aGVyKTsKLSAgICBOb2Rl
SXRlcmF0b3IgJm9wZXJhdG9yPShjb25zdCBOb2RlSXRlcmF0b3IgJm90aGVyKTsKLQotICAgIH5O
b2RlSXRlcmF0b3IoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSByb290IG5vZGUgb2YgdGhlIE5v
ZGVJdGVyYXRvciwgYXMgc3BlY2lmaWVkIHdoZW4gaXQgd2FzIGNyZWF0ZWQuCi0gICAgICovCi0g
ICAgTm9kZSByb290KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAqIFRoaXMgYXR0cmlidXRlIGRl
dGVybWluZXMgd2hpY2ggbm9kZSB0eXBlcyBhcmUgcHJlc2VudGVkIHZpYSB0aGUKLSAgICAqIGl0
ZXJhdG9yLiBUaGUgYXZhaWxhYmxlIHNldCBvZiBjb25zdGFudHMgaXMgZGVmaW5lZCBpbiB0aGUg
Tm9kZUZpbHRlcgotICAgICogaW50ZXJmYWNlLiBOb2RlcyBub3QgYWNjZXB0ZWQgYnkgd2hhdFRv
U2hvdyB3aWxsIGJlIHNraXBwZWQsIGJ1dCB0aGVpcgotICAgICogY2hpbGRyZW4gbWF5IHN0aWxs
IGJlIGNvbnNpZGVyZWQuIE5vdGUgdGhhdCB0aGlzIHNraXAgdGFrZXMgcHJlY2VkZW5jZQotICAg
ICogb3ZlciB0aGUgZmlsdGVyLCBpZiBhbnkuCi0gICAgKi8KLSAgICB1bnNpZ25lZCB3aGF0VG9T
aG93KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgTm9kZUZpbHRlciB1c2VkIHRvIHNj
cmVlbiBub2Rlcy4KLSAgICAgKi8KLSAgICBOb2RlRmlsdGVyIGZpbHRlcigpIGNvbnN0OwotCi0g
ICAgLyoqCi0gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgZmxhZyBkZXRlcm1pbmVzIHdoZXRoZXIg
dGhlIGNoaWxkcmVuIG9mIGVudGl0eQotICAgICAqIHJlZmVyZW5jZSBub2RlcyBhcmUgdmlzaWJs
ZSB0byB0aGUgaXRlcmF0b3IuIElmIGZhbHNlLCB0aGV5IGFuZAotICAgICAqIHRoZWlyIGRlc2Nl
bmRlbnRzIHdpbGwgYmUgcmVqZWN0ZWQuIE5vdGUgdGhhdCB0aGlzIHJlamVjdGlvbiB0YWtlcwot
ICAgICAqIHByZWNlZGVuY2Ugb3ZlciB3aGF0VG9TaG93IGFuZCB0aGUgZmlsdGVyLiBBbHNvIG5v
dGUgdGhhdCB0aGlzIGlzCi0gICAgICogY3VycmVudGx5IHRoZSBvbmx5IHNpdHVhdGlvbiB3aGVy
ZSBOb2RlSXRlcmF0b3JzIG1heSByZWplY3QgYSBjb21wbGV0ZQotICAgICAqIHN1YnRyZWUgcmF0
aGVyIHRoYW4gc2tpcHBpbmcgaW5kaXZpZHVhbCBub2Rlcy4KLSAgICAgKgotICAgICAqIFRvIHBy
b2R1Y2UgYSB2aWV3IG9mIHRoZSBkb2N1bWVudCB0aGF0IGhhcyBlbnRpdHkgcmVmZXJlbmNlcyBl
eHBhbmRlZAotICAgICAqIGFuZCBkb2VzIG5vdCBleHBvc2UgdGhlIGVudGl0eSByZWZlcmVuY2Ug
bm9kZSBpdHNlbGYsIHVzZSB0aGUgd2hhdFRvU2hvdwotICAgICAqIGZsYWdzIHRvIGhpZGUgdGhl
IGVudGl0eSByZWZlcmVuY2Ugbm9kZSBhbmQgc2V0IGV4cGFuZEVudGl0eVJlZmVyZW5jZXMgdG8K
LSAgICAgKiB0cnVlIHdoZW4gY3JlYXRpbmcgdGhlIGl0ZXJhdG9yLiBUbyBwcm9kdWNlIGEgdmll
dyBvZiB0aGUgZG9jdW1lbnQgdGhhdAotICAgICAqIGhhcyBlbnRpdHkgcmVmZXJlbmNlIG5vZGVz
IGJ1dCBubyBlbnRpdHkgZXhwYW5zaW9uLCB1c2UgdGhlIHdoYXRUb1Nob3cKLSAgICAgKiBmbGFn
cyB0byBzaG93IHRoZSBlbnRpdHkgcmVmZXJlbmNlIG5vZGUgYW5kIHNldCBleHBhbmRFbnRpdHlS
ZWZlcmVuY2VzIHRvCi0gICAgICogZmFsc2UuCi0gICAgICovCi0gICAgYm9vbCBleHBhbmRFbnRp
dHlSZWZlcmVuY2VzKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBuZXh0
IG5vZGUgaW4gdGhlIHNldCBhbmQgYWR2YW5jZXMgdGhlIHBvc2l0aW9uIG9mCi0gICAgICogdGhl
IEl0ZXJhdG9yIGluIHRoZSBzZXQuIEFmdGVyIGEgTm9kZUl0ZXJhdG9yIGlzIGNyZWF0ZWQsIHRo
ZQotICAgICAqIGZpcnN0IGNhbGwgdG8gbmV4dE5vZGUoKSByZXR1cm5zIHRoZSBmaXJzdCBub2Rl
IGluIHRoZSBzZXQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuZXh0IE5vZGUgaW4gdGhl
IHNldCBiZWluZyBpdGVyYXRlZAotICAgICAqIG92ZXIsIG9yIG51bGwgaWYgdGhlcmUgYXJlIG5v
IG1vcmUgbWVtYmVycyBpbgotICAgICAqIHRoYXQgc2V0LgotICAgICAqCi0gICAgICogQGV4Y2Vw
dGlvbiBFeGNlcHRpb25zIGZyb20gdXNlciBjb2RlCi0gICAgICogQW55IGV4Y2VwdGlvbnMgcmFp
c2VkIGJ5IGEgdXNlci13cml0dGVuIEZpbHRlciB3aWxsIHByb3BhZ2F0ZQotICAgICAqIHRocm91
Z2guCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIG5leHROb2RlKCk7Ci0KLSAgICAvKioKLSAg
ICAgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBub2RlIGluIHRoZSBzZXQgYW5kIG1vdmVzIHRoZSBw
b3NpdGlvbiBvZgotICAgICAqIHRoZSBJdGVyYXRvciBiYWNrd2FyZHMgaW4gdGhlIHNldC4KLSAg
ICAgKgotICAgICAqIEByZXR1cm4gVGhlIHByZXZpb3VzIE5vZGUgaW4gdGhlIHNldCBiZWluZwot
ICAgICAqIGl0ZXJhdGVkIG92ZXIsIG9yIG51bGwgaWYgdGhlcmUgYXJlIG5vIG1vcmUKLSAgICAg
KiBtZW1iZXJzIGluIHRoYXQgc2V0LgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBFeGNlcHRp
b25zIGZyb20gdXNlciBjb2RlCi0gICAgICogQW55IGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGEgdXNl
ci13cml0dGVuIEZpbHRlciB3aWxsIHByb3BhZ2F0ZQotICAgICAqIHRocm91Z2guCi0gICAgICoK
LSAgICAgKi8KLSAgICBOb2RlIHByZXZpb3VzTm9kZSgpOwotCi0gICAgLyoqCi0gICAgICogRGV0
YWNoZXMgdGhlIE5vZGVJdGVyYXRvciBmcm9tIHRoZSBzZXQgd2hpY2ggaXQgaXRlcmF0ZWQgb3Zl
ciwKLSAgICAgKiByZWxlYXNpbmcgYW55IGNvbXB1dGF0aW9uYWwgcmVzb3VyY2VzIGFuZCBwbGFj
aW5nIHRoZSBpdGVyYXRvciBpbiB0aGUKLSAgICAgKiBJTlZBTElEIHN0YXRlLiBBZnRlciBkZXRh
Y2ggaGFzIGJlZW4gaW52b2tlZCwgY2FsbHMgdG8gbmV4dE5vZGUgb3IKLSAgICAgKiBwcmV2aW91
c05vZGUgd2lsbCByYWlzZSB0aGUgZXhjZXB0aW9uIElOVkFMSURfU1RBVEVfRVJSLgotICAgICAq
LwotICAgIHZvaWQgZGV0YWNoKCk7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAg
KiBub3QgcGFydCBvZiB0aGUgRE9NCi0gICAgICovCi0gICAgTm9kZSByZWZlcmVuY2VOb2RlKCkg
Y29uc3Q7Ci0gICAgYm9vbCBwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIGNvbnN0OwotICAg
IE5vZGVJdGVyYXRvckltcGwgKmhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIGltcGw7IH0KLSAgICBi
b29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIGltcGwgPT0gMDsgfQotCi0gICAgZnJpZW5kIGNs
YXNzIE5vZGVJdGVyYXRvckltcGw7Ci0gICAgZnJpZW5kIGNsYXNzIERvY3VtZW50OwotCi0gICAg
Tm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvckltcGwgKik7Ci0KLXByaXZhdGU6Ci0gICAgTm9kZUl0
ZXJhdG9yKCk7Ci0gICAgTm9kZUl0ZXJhdG9ySW1wbCAqaW1wbDsKLX07Ci0KLQotLyoqCi0gKiBU
cmVlV2Fsa2VyIG9iamVjdHMgYXJlIHVzZWQgdG8gbmF2aWdhdGUgYSBkb2N1bWVudAotICogdHJl
ZSBvciBzdWJ0cmVlIHVzaW5nIHRoZSB2aWV3IG9mIHRoZSBkb2N1bWVudCBkZWZpbmVkIGJ5IGl0
cwotICogd2hhdFRvU2hvdyBmbGFncyBhbmQgYW55IGZpbHRlcnMgdGhhdCBhcmUgZGVmaW5lZAot
ICogZm9yIHRoZSBUcmVlV2Fsa2VyIC4gQW55IGZ1bmN0aW9uIHdoaWNoIHBlcmZvcm1zCi0gKiBu
YXZpZ2F0aW9uIHVzaW5nIGEgVHJlZVdhbGtlciB3aWxsIGF1dG9tYXRpY2FsbHkKLSAqIHN1cHBv
cnQgYW55IHZpZXcgZGVmaW5lZCBieSBhIFRyZWVXYWxrZXIgLgotICoKLSAqICBPbWl0dGluZyBu
b2RlcyBmcm9tIHRoZSBsb2dpY2FsIHZpZXcgb2YgYSBzdWJ0cmVlIGNhbiByZXN1bHQgaW4gYQot
ICogc3RydWN0dXJlIHRoYXQgaXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgZnJvbSB0aGUgc2Ft
ZSBzdWJ0cmVlIGluCi0gKiB0aGUgY29tcGxldGUsIHVuZmlsdGVyZWQgZG9jdW1lbnQuIE5vZGVz
IHRoYXQgYXJlIHNpYmxpbmdzIGluIHRoZQotICogVHJlZVdhbGtlciB2aWV3IG1heSBiZSBjaGls
ZHJlbiBvZiBkaWZmZXJlbnQsIHdpZGVseSBzZXBhcmF0ZWQKLSAqIG5vZGVzIGluIHRoZSBvcmln
aW5hbCB2aWV3LiBGb3IgaW5zdGFuY2UsIGNvbnNpZGVyIGEgRmlsdGVyIHRoYXQKLSAqIHNraXBz
IGFsbCBub2RlcyBleGNlcHQgZm9yIFRleHQgbm9kZXMgYW5kIHRoZSByb290IG5vZGUgb2YgYQot
ICogZG9jdW1lbnQuIEluIHRoZSBsb2dpY2FsIHZpZXcgdGhhdCByZXN1bHRzLCBhbGwgdGV4dCBu
b2RlcyB3aWxsIGJlCi0gKiBzaWJsaW5ncyBhbmQgYXBwZWFyIGFzIGRpcmVjdCBjaGlsZHJlbiBv
ZiB0aGUgcm9vdCBub2RlLCBubyBtYXR0ZXIKLSAqIGhvdyBkZWVwbHkgbmVzdGVkIHRoZSBzdHJ1
Y3R1cmUgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50LgotICoKLSAqLwotY2xhc3MgVHJlZVdhbGtl
cgotewotcHVibGljOgotICAgIFRyZWVXYWxrZXIoY29uc3QgVHJlZVdhbGtlciAmb3RoZXIpOwot
ICAgIFRyZWVXYWxrZXIgJm9wZXJhdG9yPShjb25zdCBUcmVlV2Fsa2VyICZvdGhlcik7Ci0gICAg
flRyZWVXYWxrZXIoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSByb290IG5vZGUgb2YgdGhlIFRy
ZWVXYWxrZXIsIGFzIHNwZWNpZmllZCB3aGVuIGl0IHdhcyBjcmVhdGVkLgotICAgICAqLwotICAg
IE5vZGUgcm9vdCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVGhpcyBhdHRyaWJ1dGUgZGV0
ZXJtaW5lcyB3aGljaCBub2RlIHR5cGVzIGFyZSBwcmVzZW50ZWQgdmlhIHRoZQotICAgICAqIFRy
ZWVXYWxrZXIuIFRoZSBhdmFpbGFibGUgc2V0IG9mIGNvbnN0YW50cyBpcyBkZWZpbmVkIGluIHRo
ZSBOb2RlRmlsdGVyCi0gICAgICogaW50ZXJmYWNlLiBOb2RlcyBub3QgYWNjZXB0ZWQgYnkgd2hh
dFRvU2hvdyB3aWxsIGJlIHNraXBwZWQsIGJ1dCB0aGVpcgotICAgICAqIGNoaWxkcmVuIG1heSBz
dGlsbCBiZSBjb25zaWRlcmVkLiBOb3RlIHRoYXQgdGhpcyBza2lwIHRha2VzIHByZWNlZGVuY2UK
LSAgICAgKiBvdmVyIHRoZSBmaWx0ZXIsIGlmIGFueS4KLSAgICAgKi8KLSAgICB1bnNpZ25lZCB3
aGF0VG9TaG93KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgZmlsdGVyIHVzZWQgdG8g
c2NyZWVuIG5vZGVzLgotICAgICAqLwotICAgIE5vZGVGaWx0ZXIgZmlsdGVyKCkgY29uc3Q7Ci0K
LSAgICAvKioKLSAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBmbGFnIGRldGVybWluZXMgd2hldGhl
ciB0aGUgY2hpbGRyZW4gb2YgZW50aXR5Ci0gICAgICogcmVmZXJlbmNlIG5vZGVzIGFyZSB2aXNp
YmxlIHRvIHRoZSBUcmVlV2Fsa2VyLiBJZiBmYWxzZSwgdGhleSBhbmQgdGhlaXIKLSAgICAgKiBk
ZXNjZW5kZW50cyB3aWxsIGJlIHJlamVjdGVkLiBOb3RlIHRoYXQgdGhpcyByZWplY3Rpb24gdGFr
ZXMgcHJlY2VkZW5jZQotICAgICAqIG92ZXIgd2hhdFRvU2hvdyBhbmQgdGhlIGZpbHRlciwgaWYg
YW55LgotICAgICAqCi0gICAgICogVG8gcHJvZHVjZSBhIHZpZXcgb2YgdGhlIGRvY3VtZW50IHRo
YXQgaGFzIGVudGl0eSByZWZlcmVuY2VzIGV4cGFuZGVkCi0gICAgICogYW5kIGRvZXMgbm90IGV4
cG9zZSB0aGUgZW50aXR5IHJlZmVyZW5jZSBub2RlIGl0c2VsZiwgdXNlIHRoZSB3aGF0VG9TaG93
Ci0gICAgICogZmxhZ3MgdG8gaGlkZSB0aGUgZW50aXR5IHJlZmVyZW5jZSBub2RlIGFuZCBzZXQg
ZXhwYW5kRW50aXR5UmVmZXJlbmNlcwotICAgICAqIHRvIHRydWUgd2hlbiBjcmVhdGluZyB0aGUg
VHJlZVdhbGtlci4gVG8gcHJvZHVjZSBhIHZpZXcgb2YgdGhlIGRvY3VtZW50Ci0gICAgICogdGhh
dCBoYXMgZW50aXR5IHJlZmVyZW5jZSBub2RlcyBidXQgbm8gZW50aXR5IGV4cGFuc2lvbiwgdXNl
IHRoZQotICAgICAqIHdoYXRUb1Nob3cgZmxhZ3MgdG8gc2hvdyB0aGUgZW50aXR5IHJlZmVyZW5j
ZSBub2RlIGFuZCBzZXQKLSAgICAgKiBleHBhbmRFbnRpdHlSZWZlcmVuY2VzIHRvIGZhbHNlLgot
ICAgICAqLwotICAgIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcygpIGNvbnN0OwotCi0gICAg
LyoqCi0gICAgICogVGhlIG5vZGUgYXQgd2hpY2ggdGhlIFRyZWVXYWxrZXIgaXMgY3VycmVudGx5
IHBvc2l0aW9uZWQuCi0gICAgICogQWx0ZXJhdGlvbnMgdG8gdGhlIERPTSB0cmVlIG1heSBjYXVz
ZSB0aGUgY3VycmVudCBub2RlIHRvIG5vIGxvbmdlciBiZQotICAgICAqIGFjY2VwdGVkIGJ5IHRo
ZSBUcmVlV2Fsa2VyJ3MgYXNzb2NpYXRlZCBmaWx0ZXIuIGN1cnJlbnROb2RlIG1heSBhbHNvIGJl
Ci0gICAgICogZXhwbGljaXRseSBzZXQgdG8gYW55IG5vZGUsIHdoZXRoZXIgb3Igbm90IGl0IGlz
IHdpdGhpbiB0aGUgc3VidHJlZQotICAgICAqIHNwZWNpZmllZCBieSB0aGUgcm9vdCBub2RlIG9y
IHdvdWxkIGJlIGFjY2VwdGVkIGJ5IHRoZSBmaWx0ZXIgYW5kCi0gICAgICogd2hhdFRvU2hvdyBm
bGFncy4gRnVydGhlciB0cmF2ZXJzYWwgb2NjdXJzIHJlbGF0aXZlIHRvIGN1cnJlbnROb2RlIGV2
ZW4KLSAgICAgKiBpZiBpdCBpcyBub3QgcGFydCBvZiB0aGUgY3VycmVudCB2aWV3LCBieSBhcHBs
eWluZyB0aGUgZmlsdGVycyBpbiB0aGUKLSAgICAgKiByZXF1ZXN0ZWQgZGlyZWN0aW9uOyBpZiBu
byB0cmF2ZXJzYWwgaXMgcG9zc2libGUsIGN1cnJlbnROb2RlIGlzIG5vdCBjaGFuZ2VkLgotICAg
ICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBOT1RfU1VQUE9SVEVE
X0VSUjogUmFpc2VkIGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBzZXQgY3VycmVudE5vZGUgdG8g
bnVsbC4KLSAgICAgKi8KLSAgICBOb2RlIGN1cnJlbnROb2RlKCkgY29uc3Q7Ci0KLSAgICAvKioK
LSAgICAgKiBzZWUgY3VycmVudE5vZGUKLSAgICAgKi8KLSAgICB2b2lkIHNldEN1cnJlbnROb2Rl
KGNvbnN0IE5vZGUgJl9jdXJyZW50Tm9kZSk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0byBh
bmQgcmV0dXJucyB0aGUgcGFyZW50IG5vZGUgb2YgdGhlIGN1cnJlbnQgbm9kZS4gSWYKLSAgICAg
KiB0aGVyZSBpcyBubyBwYXJlbnQgbm9kZSwgb3IgaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyB0aGUg
cm9vdAotICAgICAqIG5vZGUgZnJvbSB3aGljaCB0aGlzIFRyZWVXYWxrZXIgd2FzIGNyZWF0ZWQs
IHJldGFpbnMgdGhlCi0gICAgICogY3VycmVudCBwb3NpdGlvbiBhbmQgcmV0dXJucyBudWxsLgot
ICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbmV3IHBhcmVudCBub2RlLCBvciBudWxsIGlmIHRo
ZSBjdXJyZW50IG5vZGUgaGFzIG5vCi0gICAgICogcGFyZW50IGluIHRoZSBUcmVlV2Fsa2VyJ3Mg
bG9naWNhbCB2aWV3LgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBFeGNlcHRpb25zIGZyb20g
dXNlciBjb2RlCi0gICAgICogQW55IGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGEgdXNlci13cml0dGVu
IEZpbHRlciB3aWxsIHByb3BhZ2F0ZQotICAgICAqIHRocm91Z2guCi0gICAgICoKLSAgICAgKi8K
LSAgICBOb2RlIHBhcmVudE5vZGUoKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBUcmVl
V2Fsa2VyIHRvIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUKLSAgICAgKiBjdXJyZW50IG5vZGUsIGFu
ZCByZXR1cm5zIHRoZSBuZXcgbm9kZS4gSWYgdGhlIGN1cnJlbnQgbm9kZSBoYXMKLSAgICAgKiBu
byBjaGlsZHJlbiwgcmV0dXJucyBudWxsICwgYW5kIHJldGFpbnMgdGhlCi0gICAgICogY3VycmVu
dCBub2RlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbmV3IG5vZGUsIG9yIG51bGwgaWYg
dGhlIGN1cnJlbnQKLSAgICAgKiBub2RlIGhhcyBubyBjaGlsZHJlbi4KLSAgICAgKgotICAgICAq
IEBleGNlcHRpb24gRXhjZXB0aW9ucyBmcm9tIHVzZXIgY29kZQotICAgICAqIEFueSBleGNlcHRp
b25zIHJhaXNlZCBieSBhIHVzZXItd3JpdHRlbiBGaWx0ZXIgd2lsbCBwcm9wYWdhdGUKLSAgICAg
KiB0aHJvdWdoLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBmaXJzdENoaWxkKCk7Ci0KLSAg
ICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgVHJlZVdhbGtlciB0byB0aGUgbGFzdCBjaGlsZCBvZiB0
aGUKLSAgICAgKiBjdXJyZW50IG5vZGUsIGFuZCByZXR1cm5zIHRoZSBuZXcgbm9kZS4gSWYgdGhl
IGN1cnJlbnQgbm9kZSBoYXMKLSAgICAgKiBubyBjaGlsZHJlbiwgcmV0dXJucyBudWxsICwgYW5k
IHJldGFpbnMgdGhlCi0gICAgICogY3VycmVudCBub2RlLgotICAgICAqCi0gICAgICogQHJldHVy
biBUaGUgbmV3IG5vZGUsIG9yIG51bGwgaWYgdGhlIGN1cnJlbnQKLSAgICAgKiBub2RlIGhhcyBu
byBjaGlsZHJlbi4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRXhjZXB0aW9ucyBmcm9tIHVz
ZXIgY29kZQotICAgICAqIEFueSBleGNlcHRpb25zIHJhaXNlZCBieSBhIHVzZXItd3JpdHRlbiBG
aWx0ZXIgd2lsbCBwcm9wYWdhdGUKLSAgICAgKiB0aHJvdWdoLgotICAgICAqCi0gICAgICovCi0g
ICAgTm9kZSBsYXN0Q2hpbGQoKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBUcmVlV2Fs
a2VyIHRvIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mCi0gICAgICogdGhlIGN1cnJlbnQgbm9kZSwg
YW5kIHJldHVybnMgdGhlIG5ldyBub2RlLiBJZiB0aGUgY3VycmVudCBub2RlCi0gICAgICogaGFz
IG5vIHByZXZpb3VzIHNpYmxpbmcsIHJldHVybnMgbnVsbCAsIGFuZAotICAgICAqIHJldGFpbnMg
dGhlIGN1cnJlbnQgbm9kZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBub2RlLCBv
ciBudWxsIGlmIHRoZSBjdXJyZW50Ci0gICAgICogbm9kZSBoYXMgbm8gcHJldmlvdXMgc2libGlu
Zy4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRXhjZXB0aW9ucyBmcm9tIHVzZXIgY29kZQot
ICAgICAqIEFueSBleGNlcHRpb25zIHJhaXNlZCBieSBhIHVzZXItd3JpdHRlbiBGaWx0ZXIgd2ls
bCBwcm9wYWdhdGUKLSAgICAgKiB0aHJvdWdoLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBw
cmV2aW91c1NpYmxpbmcoKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBUcmVlV2Fsa2Vy
IHRvIHRoZSBuZXh0IHNpYmxpbmcgb2YgdGhlCi0gICAgICogY3VycmVudCBub2RlLCBhbmQgcmV0
dXJucyB0aGUgbmV3IG5vZGUuIElmIHRoZSBjdXJyZW50IG5vZGUgaGFzCi0gICAgICogbm8gbmV4
dCBzaWJsaW5nLCByZXR1cm5zIG51bGwgLCBhbmQgcmV0YWlucyB0aGUKLSAgICAgKiBjdXJyZW50
IG5vZGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuZXcgbm9kZSwgb3IgbnVsbCBpZiB0
aGUgY3VycmVudAotICAgICAqIG5vZGUgaGFzIG5vIG5leHQgc2libGluZy4KLSAgICAgKgotICAg
ICAqIEBleGNlcHRpb24gRXhjZXB0aW9ucyBmcm9tIHVzZXIgY29kZQotICAgICAqIEFueSBleGNl
cHRpb25zIHJhaXNlZCBieSBhIHVzZXItd3JpdHRlbiBGaWx0ZXIgd2lsbCBwcm9wYWdhdGUKLSAg
ICAgKiB0aHJvdWdoLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBuZXh0U2libGluZygpOwot
Ci0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIFRyZWVXYWxrZXIgdG8gdGhlIHByZXZpb3VzIG5v
ZGUgaW4KLSAgICAgKiBkb2N1bWVudCBvcmRlciByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBub2Rl
LCBhbmQgcmV0dXJucyB0aGUKLSAgICAgKiBuZXcgbm9kZS4gSWYgdGhlIGN1cnJlbnQgbm9kZSBo
YXMgbm8gcHJldmlvdXMgbm9kZSwgcmV0dXJucwotICAgICAqIG51bGwgLCBhbmQgcmV0YWlucyB0
aGUgY3VycmVudCBub2RlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbmV3IG5vZGUsIG9y
IG51bGwgaWYgdGhlIGN1cnJlbnQKLSAgICAgKiBub2RlIGhhcyBubyBwcmV2aW91cyBub2RlLgot
ICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBFeGNlcHRpb25zIGZyb20gdXNlciBjb2RlCi0gICAg
ICogQW55IGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGEgdXNlci13cml0dGVuIEZpbHRlciB3aWxsIHBy
b3BhZ2F0ZQotICAgICAqIHRocm91Z2guCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIHByZXZp
b3VzTm9kZSgpOwotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIFRyZWVXYWxrZXIgdG8gdGhl
IG5leHQgbm9kZSBpbgotICAgICAqIGRvY3VtZW50IG9yZGVyIHJlbGF0aXZlIHRvIHRoZSBjdXJy
ZW50IG5vZGUsIGFuZCByZXR1cm5zIHRoZQotICAgICAqIG5ldyBub2RlLiBJZiB0aGUgY3VycmVu
dCBub2RlIGhhcyBubyBuZXh0IG5vZGUsIHJldHVybnMKLSAgICAgKiBudWxsICwgYW5kIHJldGFp
bnMgdGhlIGN1cnJlbnQgbm9kZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBub2Rl
LCBvciBudWxsIGlmIHRoZSBjdXJyZW50Ci0gICAgICogbm9kZSBoYXMgbm8gbmV4dCBub2RlLgot
ICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBFeGNlcHRpb25zIGZyb20gdXNlciBjb2RlCi0gICAg
ICogQW55IGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGEgdXNlci13cml0dGVuIEZpbHRlciB3aWxsIHBy
b3BhZ2F0ZQotICAgICAqIHRocm91Z2guCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIG5leHRO
b2RlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKiBub3QgcGFydCBvZiB0
aGUgRE9NCi0gICAgICovCi0gICAgVHJlZVdhbGtlckltcGwgKmhhbmRsZSgpIGNvbnN0IHsgcmV0
dXJuIGltcGw7IH0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIGltcGwgPT0gMDsg
fQotCi0gICAgVHJlZVdhbGtlcihUcmVlV2Fsa2VySW1wbCAqKTsKLQotICAgIGZyaWVuZCBjbGFz
cyBEb2N1bWVudDsKLSAgICBmcmllbmQgY2xhc3MgVHJlZVdhbGtlckltcGw7Ci0KLXByaXZhdGU6
Ci0gICAgVHJlZVdhbGtlcigpOwotICAgIFRyZWVXYWxrZXJJbXBsICppbXBsOwotfTsKLQotCi0v
LyAjIyMgbm90IHN1cmUgaWYgdGhpcyB0aGlzIGNsYXNzIGlzIHJlYWxseSBuZWVkZWQgLSBib3Ro
IG1ldGhvZHMgYXJlIGluCi0vLyBEb2N1bWVudAotCi0vKioKLSAqIERvY3VtZW50VHJhdmVyc2Fs
IGNvbnRhaW5zIG1ldGhvZHMgdGhhdCBjcmVhdGVzCi0gKiBJdGVyYXRvcnMgdG8gdHJhdmVyc2Ug
YSBub2RlIGFuZCBpdHMgY2hpbGRyZW4gaW4gZG9jdW1lbnQgb3JkZXIKLSAqIChkZXB0aCBmaXJz
dCwgcHJlLW9yZGVyIHRyYXZlcnNhbCwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUgb3JkZXIK
LSAqIGluIHdoaWNoIHRoZSBzdGFydCB0YWdzIG9jY3VyIGluIHRoZSB0ZXh0IHJlcHJlc2VudGF0
aW9uIG9mIHRoZQotICogZG9jdW1lbnQpLgotICoKLSAqCi1jbGFzcyBEb2N1bWVudFRyYXZlcnNh
bCAvLyA6IHB1YmxpYyBEb2N1bWVudCA/Ci17Ci1wdWJsaWM6Ci0gICAgRG9jdW1lbnRUcmF2ZXJz
YWwoKTsKLSAgICBEb2N1bWVudFRyYXZlcnNhbChjb25zdCBEb2N1bWVudFRyYXZlcnNhbCAmb3Ro
ZXIpOwotCi0gICAgRG9jdW1lbnRUcmF2ZXJzYWwgJiBvcGVyYXRvciA9IChjb25zdCBEb2N1bWVu
dFRyYXZlcnNhbCAmb3RoZXIpOwotCi0gICAgfkRvY3VtZW50VHJhdmVyc2FsKCk7Ci0KLSAgICAg
KioKLSAgICAgKgotICAgICAqCi0gICAgICogQHBhcmFtIHJvb3QgVGhlIG5vZGUgd2hpY2ggd2ls
bCBiZSBpdGVyYXRlZCB0b2dldGhlciB3aXRoIGl0cwotICAgICAqIGNoaWxkcmVuLiBUaGUgaXRl
cmF0b3IgaXMgaW5pdGlhbGx5IHBvc2l0aW9uZWQganVzdCBiZWZvcmUgdGhpcwotICAgICAqIG5v
ZGUuIFRoZSB3aGF0VG9TaG93IGZsYWdzIGFuZCB0aGUgZmlsdGVyLCBpZiBhbnksIGFyZSBub3QK
LSAgICAgKiBjb25zaWRlcmVkIHdoZW4gc2V0dGluZyB0aGlzIHBvc2l0aW9uLgotICAgICAqCi0g
ICAgICogQHBhcmFtIHdoYXRUb1Nob3cgVGhpcyBmbGFnIHNwZWNpZmllcyB3aGljaCBub2RlIHR5
cGVzIG1heQotICAgICAqIGFwcGVhciBpbiB0aGUgbG9naWNhbCB2aWV3IG9mIHRoZSB0cmVlIHBy
ZXNlbnRlZCBieSB0aGUKLSAgICAgKiBJdGVyYXRvci4gU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBJ
dGVyYXRvciBmb3IgdGhlIHNldCBvZgotICAgICAqIHBvc3NpYmxlIHZhbHVlcy4gVGhlc2UgZmxh
Z3MgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIE9SLgotICAgICAqCi0gICAgICogIFRoZXNlIGZsYWdz
IGNhbiBiZSBjb21iaW5lZCB1c2luZyBPUiAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZmlsdGVy
IFRoZSBGaWx0ZXIgdG8gYmUgdXNlZCB3aXRoIHRoaXMgVHJlZVdhbGtlciwgb3IKLSAgICAgKiBu
dWxsIHRvIGluZGljYXRlIG5vIGZpbHRlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBleHBhbmRF
bnRpdHlSZWZlcmVuY2VzIFRoZSB2YWx1ZSBvZiB0aGlzIGZsYWcKLSAgICAgKiBkZXRlcm1pbmVz
IHdoZXRoZXIgZW50aXR5IHJlZmVyZW5jZSBub2RlcyBhcmUgZXhwYW5kZWQuCi0gICAgICoKLSAg
ICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIE5vZGVJdGVyYXRvciAuCi0gICAgICoKLSAg
ICAgKgotICAgIE5vZGVJdGVyYXRvciBjcmVhdGVOb2RlSXRlcmF0b3IgKCBjb25zdCBOb2RlICZy
b290LCBpbnQgd2hhdFRvU2hvdywKLQkJCQkgICAgICBjb25zdCBOb2RlRmlsdGVyICZmaWx0ZXIs
IGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyApOwotCi0gICAgICoqCi0gICAgICogQ3JlYXRl
IGEgbmV3IFRyZWVXYWxrZXIgb3ZlciB0aGUgc3VidHJlZSByb290ZWQgYnkgdGhlCi0gICAgICog
c3BlY2lmaWVkIG5vZGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcm9vdCBUaGUgbm9kZSB3aGlj
aCB3aWxsIHNlcnZlIGFzIHRoZSByb290IGZvciB0aGUKLSAgICAgKiBUcmVlV2Fsa2VyIC4gVGhl
IGN1cnJlbnROb2RlIG9mIHRoZSBUcmVlV2Fsa2VyCi0gICAgICogaXMgc2V0IHRvIHRoaXMgbm9k
ZS4gVGhlIHdoYXRUb1Nob3cgZmxhZ3MgYW5kIHRoZSBOb2RlRmlsdGVyCi0gICAgICogYXJlIG5v
dCBjb25zaWRlcmVkIHdoZW4gc2V0dGluZyB0aGlzIHZhbHVlOyBhbnkgbm9kZSB0eXBlIHdpbGwK
LSAgICAgKiBiZSBhY2NlcHRlZCBhcyB0aGUgcm9vdC4gVGhlIHJvb3QgbXVzdCBub3QgYmUgbnVs
bC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB3aGF0VG9TaG93IFRoaXMgZmxhZyBzcGVjaWZpZXMg
d2hpY2ggbm9kZSB0eXBlcyBtYXkKLSAgICAgKiBhcHBlYXIgaW4gdGhlIGxvZ2ljYWwgdmlldyBv
ZiB0aGUgdHJlZSBwcmVzZW50ZWQgYnkgdGhlCi0gICAgICogSXRlcmF0b3IuIFNlZSB0aGUgZGVz
Y3JpcHRpb24gb2YgVHJlZVdhbGtlciBmb3IgdGhlIHNldCBvZgotICAgICAqIHBvc3NpYmxlIHZh
bHVlcy4gVGhlc2UgZmxhZ3MgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIE9SLgotICAgICAqCi0gICAg
ICogIFRoZXNlIGZsYWdzIGNhbiBiZSBjb21iaW5lZCB1c2luZyBPUiAuCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gZmlsdGVyIFRoZSBGaWx0ZXIgdG8gYmUgdXNlZCB3aXRoIHRoaXMgVHJlZVdhbGtl
ciwgb3IKLSAgICAgKiBudWxsIHRvIGluZGljYXRlIG5vIGZpbHRlci4KLSAgICAgKgotICAgICAq
IEBwYXJhbSBleHBhbmRFbnRpdHlSZWZlcmVuY2VzIFRoZSB2YWx1ZSBvZiB0aGlzIGZsYWcKLSAg
ICAgKiBkZXRlcm1pbmVzIHdoZXRoZXIgZW50aXR5IHJlZmVyZW5jZSBub2RlcyBhcmUgZXhwYW5k
ZWQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuZXdseSBjcmVhdGVkIFRyZWVXYWxrZXIg
LgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBSYWlzZXMg
dGhlIGV4Y2VwdGlvbiBOT1RfU1VQUE9SVEVEX0VSUiBpZiB0aGUgc3BlY2lmaWVkIHJvb3QKLSAg
ICAgKiBub2RlIGlzIG51bGwuCi0gICAgICoKLSAgICAgKgotICAgIFRyZWVXYWxrZXIgY3JlYXRl
VHJlZVdhbGtlciAoIGNvbnN0IE5vZGUgJnJvb3QsIGludCB3aGF0VG9TaG93LAotCQkJCSAgY29u
c3QgTm9kZUZpbHRlciAmZmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMgKTsKIH07
Ci0qLwotCi0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UKIApJbmRleDoga2h0bWwvZG9tL2RvbV9l
eGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9k
b20vZG9tX2V4Y2VwdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtcCAtdSAt
cjEuNSBraHRtbC9kb20vZG9tX2V4Y2VwdGlvbi5oCi0tLSBraHRtbC9kb20vZG9tX2V4Y2VwdGlv
bi5oCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuNQorKysga2h0bWwvZG9tL2RvbV9leGNl
cHRpb24uaAkyOSBOb3YgMjAwNSAyMjo1MTozOSAtMDAwMApAQCAtMjksOCArMjksNiBAQAogI2lm
bmRlZiBfRE9NX0RPTUV4Y2VwdGlvbl9oXwogI2RlZmluZSBfRE9NX0RPTUV4Y2VwdGlvbl9oXwog
Ci0jaW5jbHVkZSA8ZG9tL2RvbV9taXNjLmg+Ci0KIG5hbWVzcGFjZSBET00gewogCiAvKioKQEAg
LTU2LDE5ICs1NCw2IEBAIG5hbWVzcGFjZSBET00gewogY2xhc3MgRE9NRXhjZXB0aW9uCiB7CiBw
dWJsaWM6Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgRE9NRXhjZXB0aW9u
KHVuc2lnbmVkIHNob3J0IF9jb2RlKSB7IGNvZGUgPSBfY29kZTsgfQotICAgIERPTUV4Y2VwdGlv
bihjb25zdCBET01FeGNlcHRpb24gJm90aGVyKSB7IGNvZGUgPSBvdGhlci5jb2RlOyB9Ci0KLSAg
ICBET01FeGNlcHRpb24gJiBvcGVyYXRvciA9IChjb25zdCBET01FeGNlcHRpb24gJm90aGVyKQot
CXsgY29kZSA9IG90aGVyLmNvZGU7IHJldHVybiAqdGhpczsgfQotCi0gICAgdmlydHVhbCB+RE9N
RXhjZXB0aW9uKCkge30KLQotI2VuZGlmCi0KICAgICAvKioKICAgICAgKiBBbiBpbnRlZ2VyIGlu
ZGljYXRpbmcgdGhlIHR5cGUgb2YgZXJyb3IgZ2VuZXJhdGVkLgogICAgICAqCkBAIC05MCwxMyAr
NzUsNiBAQCBwdWJsaWM6CiAgICAgICAgIE5BTUVTUEFDRV9FUlIgPSAxNCwKICAgICAgICAgSU5W
QUxJRF9BQ0NFU1NfRVJSID0gMTUKICAgICB9OwotCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19E
T00KLQotICAgIHVuc2lnbmVkIHNob3J0IGNvZGU7Ci0KLSNlbmRpZgotCiB9OwogCiB9IC8vbmFt
ZXNwYWNlCkluZGV4OiBraHRtbC9kb20vZG9tX21pc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IGtodG1sL2RvbS9kb21fbWlzYy5jcHAKZGlmZiAtTiBraHRtbC9kb20vZG9tX21pc2MuY3BwCi0t
LSBraHRtbC9kb20vZG9tX21pc2MuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MTEgLTAwMDAJMS44Cisr
KyBraHRtbC9kb20vZG9tX21pc2MuY3BwCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEs
NDIgKzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVu
dGF0aW9uIGZvciBLREUuCi0gKgotICogKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImRvbV9taXNjLmgiCi0KLW5hbWVzcGFj
ZSBET00gewotCi1Eb21TaGFyZWQ6On5Eb21TaGFyZWQoKQotewotICAvLyBkZWxpYmVyYXRlbHkg
bGVmdCBibGFuawotfQotCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotYm9vbCBEb21T
aGFyZWQ6OmRlbGV0ZU1lKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2VuZGlmCi0KLX0K
SW5kZXg6IGtodG1sL2RvbS9kb21fbWlzYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtodG1sL2Rv
bS9kb21fbWlzYy5oCmRpZmYgLU4ga2h0bWwvZG9tL2RvbV9taXNjLmgKLS0tIGtodG1sL2RvbS9k
b21fbWlzYy5oCTE5IFNlcCAyMDA1IDE4OjUyOjEwIC0wMDAwCTEuMTAKKysrIGtodG1sL2RvbS9k
b21fbWlzYy5oCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNjYgKzAsMCBAQAotLyoK
LSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
LSAqCi0gKiAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
LSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqLwotI2lmbmRlZiBfRE9NX1Jl
ZkNvdW50SW1wbF9oXwotI2RlZmluZSBfRE9NX1JlZkNvdW50SW1wbF9oXwotCi1uYW1lc3BhY2Ug
RE9NIHsKLQotLyoKLSAqIFRoaXMgaW1wbGVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIHNj
aGVtZSB1c2VkIGZvciBhbGwgaW50ZXJuYWwKLSAqIERPTSBvYmplY3RzLgotICoKLSAqIE90aGVy
IG9iamVjdHMgc2hvdWxkIG92ZXJsb2FkIGRlbGV0ZU1lKCkgdG8gZml0IHRoZWlyIG5lZWRzLiBU
aGUgZGVmYXVsdAotICogaW1wbGVtZW50YXRpb24gZGVsZXRlcyB0aGUgb2JqZWN0IGlmIHRoZSBy
ZWYgY291bnQgZHJvcHMgdG8gMC4KLSAqLwotY2xhc3MgRG9tU2hhcmVkCi17Ci1wdWJsaWM6Ci0g
IERvbVNoYXJlZCgpIDogX3JlZiggMCApIHt9Ci0gIHZpcnR1YWwgfkRvbVNoYXJlZCgpOwotCi0j
aWYgS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotICBib29sIGRlbGV0ZU1lKCkgeyByZXR1cm4gdHJ1
ZTsgfQotI2Vsc2UKLSAgLyogT3ZlcmxvYWQgdGhpcyBmdW5jdGlvbiBpZiB5b3Ugd2FudCBhIGRp
ZmZlcmVudCBkZWxldGlvbiBiZWhhdmlvdXIKLSAgICovCi0gIHZpcnR1YWwgYm9vbCBkZWxldGVN
ZSgpOwotI2VuZGlmCi0KLSAgdm9pZCByZWYoKSB7IF9yZWYrKzsgfQotICB2b2lkIGRlcmVmKCkg
eyBpZihfcmVmKSBfcmVmLS07IGlmKCFfcmVmICYmIGRlbGV0ZU1lKCkpIGRlbGV0ZSB0aGlzOyB9
Ci0gIGJvb2wgaGFzT25lUmVmKCkgY29uc3QgeyByZXR1cm4gX3JlZiA9PSAxOyB9Ci0gIHVuc2ln
bmVkIGludCByZWZDb3VudCgpIGNvbnN0IHsgcmV0dXJuIF9yZWY7IH0KLQotcHJvdGVjdGVkOgot
ICAgIC8vIHRoZSBudW1iZXIgb2YgRE9NT2JqZWN0cyByZWZlcmVuY2luZyB0aGlzIE5vZGUKLSAg
ICAvLyBBbiBpbXBsZW1lbnRhdGlvbiBvYmplY3Qgd2lsbCBkZWxldGUgaXRzZWxmLCBpZiBpdCBo
YXMKLSAgICAvLyBubyBET01PYmplY3QgcmVmZXJlbmNpbmcgaXQsIGFuZCBkZWxldGVNZSgpIHJl
dHVybnMgdHJ1ZS4KLSAgICB1bnNpZ25lZCBpbnQgX3JlZjsKLQotcHJpdmF0ZToKLSAgRG9tU2hh
cmVkKGNvbnN0IERvbVNoYXJlZCAmKTsKLSAgRG9tU2hhcmVkICZvcGVyYXRvcj0oY29uc3QgRG9t
U2hhcmVkICYpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlmCkluZGV4OiBraHRtbC9k
b20vZG9tX25vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9kb20vZG9tX25vZGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1wIC11IC1y
MS4xNiBraHRtbC9kb20vZG9tX25vZGUuaAotLS0ga2h0bWwvZG9tL2RvbV9ub2RlLmgJMjEgTm92
IDIwMDUgMDE6MTk6NTQgLTAwMDAJMS4xNgorKysga2h0bWwvZG9tL2RvbV9ub2RlLmgJMjkgTm92
IDIwMDUgMjI6NTE6MzkgLTAwMDAKQEAgLTI5LDIyNiArMjksOCBAQAogI2lmbmRlZiBfRE9NX05v
ZGVfaF8KICNkZWZpbmUgX0RPTV9Ob2RlX2hfCiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RP
TQotCi0jaW5jbHVkZSA8cXN0cmluZy5oPgotCi1jbGFzcyBRUmVjdDsKLQotI2VuZGlmCi0KIG5h
bWVzcGFjZSBET00gewogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotY2xhc3MgTm9k
ZTsKLWNsYXNzIERPTVN0cmluZzsKLWNsYXNzIE5vZGVJbXBsOwotY2xhc3MgTmFtZWROb2RlTWFw
SW1wbDsKLWNsYXNzIEV2ZW50TGlzdGVuZXI7Ci1jbGFzcyBFdmVudDsKLQotLyoqCi0gKiBPYmpl
Y3RzIGltcGxlbWVudGluZyB0aGUgPGNvZGU+IE5hbWVkTm9kZU1hcCA8L2NvZGU+IGludGVyZmFj
ZSBhcmUKLSAqIHVzZWQgdG8gcmVwcmVzZW50IGNvbGxlY3Rpb25zIG9mIG5vZGVzIHRoYXQgY2Fu
IGJlIGFjY2Vzc2VkIGJ5Ci0gKiBuYW1lLiBOb3RlIHRoYXQgPGNvZGU+IE5hbWVkTm9kZU1hcCA8
L2NvZGU+IGRvZXMgbm90IGluaGVyaXQgZnJvbQotICogPGNvZGU+IE5vZGVMaXN0IDwvY29kZT4g
OyA8Y29kZT4gTmFtZWROb2RlTWFwIDwvY29kZT4gcyBhcmUgbm90Ci0gKiBtYWludGFpbmVkIGlu
IGFueSBwYXJ0aWN1bGFyIG9yZGVyLiBPYmplY3RzIGNvbnRhaW5lZCBpbiBhbiBvYmplY3QKLSAq
IGltcGxlbWVudGluZyA8Y29kZT4gTmFtZWROb2RlTWFwIDwvY29kZT4gbWF5IGFsc28gYmUgYWNj
ZXNzZWQgYnkgYW4KLSAqIG9yZGluYWwgaW5kZXgsIGJ1dCB0aGlzIGlzIHNpbXBseSB0byBhbGxv
dyBjb252ZW5pZW50IGVudW1lcmF0aW9uCi0gKiBvZiB0aGUgY29udGVudHMgb2YgYSA8Y29kZT4g
TmFtZWROb2RlTWFwIDwvY29kZT4gLCBhbmQgZG9lcyBub3QKLSAqIGltcGx5IHRoYXQgdGhlIERP
TSBzcGVjaWZpZXMgYW4gb3JkZXIgdG8gdGhlc2UgTm9kZXMuCi0gKgotICovCi1jbGFzcyBOYW1l
ZE5vZGVNYXAKLXsKLXB1YmxpYzoKLSAgICBOYW1lZE5vZGVNYXAoKTsKLSAgICBOYW1lZE5vZGVN
YXAoY29uc3QgTmFtZWROb2RlTWFwICZvdGhlcik7Ci0KLSAgICBOYW1lZE5vZGVNYXAgJiBvcGVy
YXRvciA9IChjb25zdCBOYW1lZE5vZGVNYXAgJm90aGVyKTsKLQotICAgIH5OYW1lZE5vZGVNYXAo
KTsKLQotICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIG1hcC4gVGhl
IHJhbmdlIG9mIHZhbGlkIGNoaWxkIG5vZGUKLSAgICAgKiBpbmRpY2VzIGlzIDAgdG8gPGNvZGU+
IGxlbmd0aC0xIDwvY29kZT4gaW5jbHVzaXZlLgotICAgICAqCi0gICAgICovCi0gICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgYSBub2RlIHNw
ZWNpZmllZCBieSBuYW1lLgotICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiBhIG5v
ZGUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIEEgPGNvZGU+IE5vZGUgPC9j
b2RlPiAob2YgYW55IHR5cGUpIHdpdGggdGhlIHNwZWNpZmllZAotICAgICAqIG5hbWUsIG9yIDxj
b2RlPiBudWxsIDwvY29kZT4gaWYgdGhlIHNwZWNpZmllZCBuYW1lIGRpZCBub3QKLSAgICAgKiBp
ZGVudGlmeSBhbnkgbm9kZSBpbiB0aGUgbWFwLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBn
ZXROYW1lZEl0ZW0gKCBjb25zdCBET01TdHJpbmcgJm5hbWUgKSBjb25zdDsKLQotICAgIC8qKgot
ICAgICAqIEFkZHMgYSBub2RlIHVzaW5nIGl0cyA8Y29kZT4gbm9kZU5hbWUgPC9jb2RlPiBhdHRy
aWJ1dGUuCi0gICAgICoKLSAgICAgKiAgQXMgdGhlIDxjb2RlPiBub2RlTmFtZSA8L2NvZGU+IGF0
dHJpYnV0ZSBpcyB1c2VkIHRvIGRlcml2ZSB0aGUKLSAgICAgKiBuYW1lIHdoaWNoIHRoZSBub2Rl
IG11c3QgYmUgc3RvcmVkIHVuZGVyLCBtdWx0aXBsZSBub2RlcyBvZgotICAgICAqIGNlcnRhaW4g
dHlwZXMgKHRob3NlIHRoYXQgaGF2ZSBhICJzcGVjaWFsIiBzdHJpbmcgdmFsdWUpIGNhbm5vdAot
ICAgICAqIGJlIHN0b3JlZCBhcyB0aGUgbmFtZXMgd291bGQgY2xhc2guIFRoaXMgaXMgc2VlbiBh
cyBwcmVmZXJhYmxlCi0gICAgICogdG8gYWxsb3dpbmcgbm9kZXMgdG8gYmUgYWxpYXNlZC4KLSAg
ICAgKgotICAgICAqIEBwYXJhbSBhcmcgQSBub2RlIHRvIHN0b3JlIGluIGEgbmFtZWQgbm9kZSBt
YXAuIFRoZSBub2RlIHdpbGwKLSAgICAgKiBsYXRlciBiZSBhY2Nlc3NpYmxlIHVzaW5nIHRoZSB2
YWx1ZSBvZiB0aGUgPGNvZGU+IG5vZGVOYW1lCi0gICAgICogPC9jb2RlPiBhdHRyaWJ1dGUgb2Yg
dGhlIG5vZGUuIElmIGEgbm9kZSB3aXRoIHRoYXQgbmFtZSBpcwotICAgICAqIGFscmVhZHkgcHJl
c2VudCBpbiB0aGUgbWFwLCBpdCBpcyByZXBsYWNlZCBieSB0aGUgbmV3IG9uZS4KLSAgICAgKgot
ICAgICAqIEByZXR1cm4gSWYgdGhlIG5ldyA8Y29kZT4gTm9kZSA8L2NvZGU+IHJlcGxhY2VzIGFu
IGV4aXN0aW5nCi0gICAgICogbm9kZSB3aXRoIHRoZSBzYW1lIG5hbWUgdGhlIHByZXZpb3VzbHkg
ZXhpc3RpbmcgPGNvZGU+IE5vZGUKLSAgICAgKiA8L2NvZGU+IGlzIHJldHVybmVkLCBvdGhlcndp
c2UgPGNvZGU+IG51bGwgPC9jb2RlPiBpcyByZXR1cm5lZC4KLSAgICAgKgotICAgICAqIEBleGNl
cHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogV1JPTkdfRE9DVU1FTlRfRVJSOiBSYWlzZWQgaWYg
PGNvZGU+IGFyZyA8L2NvZGU+IHdhcyBjcmVhdGVkCi0gICAgICogZnJvbSBhIGRpZmZlcmVudCBk
b2N1bWVudCB0aGFuIHRoZSBvbmUgdGhhdCBjcmVhdGVkIHRoZSA8Y29kZT4KLSAgICAgKiBOYW1l
ZE5vZGVNYXAgPC9jb2RlPiAuCi0gICAgICoKLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSOiBSYWlzZWQgaWYgdGhpcyA8Y29kZT4KLSAgICAgKiBOYW1lZE5vZGVNYXAgPC9jb2Rl
PiBpcyByZWFkb25seS4KLSAgICAgKgotICAgICAqICBJTlVTRV9BVFRSSUJVVEVfRVJSOiBSYWlz
ZWQgaWYgPGNvZGU+IGFyZyA8L2NvZGU+IGlzIGFuIDxjb2RlPgotICAgICAqIEF0dHIgPC9jb2Rl
PiB0aGF0IGlzIGFscmVhZHkgYW4gYXR0cmlidXRlIG9mIGFub3RoZXIgPGNvZGU+Ci0gICAgICog
RWxlbWVudCA8L2NvZGU+IG9iamVjdC4gVGhlIERPTSB1c2VyIG11c3QgZXhwbGljaXRseSBjbG9u
ZQotICAgICAqIDxjb2RlPiBBdHRyIDwvY29kZT4gbm9kZXMgdG8gcmUtdXNlIHRoZW0gaW4gb3Ro
ZXIgZWxlbWVudHMuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIHNldE5hbWVkSXRlbSAoIGNv
bnN0IE5vZGUgJmFyZyApOwotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyBhIG5vZGUgc3BlY2lm
aWVkIGJ5IG5hbWUuIElmIHRoZSByZW1vdmVkIG5vZGUgaXMgYW4KLSAgICAgKiA8Y29kZT4gQXR0
ciA8L2NvZGU+IHdpdGggYSBkZWZhdWx0IHZhbHVlIGl0IGlzIGltbWVkaWF0ZWx5Ci0gICAgICog
cmVwbGFjZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiBhIG5vZGUg
dG8gcmVtb3ZlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbm9kZSByZW1vdmVkIGZyb20g
dGhlIG1hcCBvciA8Y29kZT4gbnVsbCA8L2NvZGU+IGlmCi0gICAgICogbm8gbm9kZSB3aXRoIHN1
Y2ggYSBuYW1lIGV4aXN0cy4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9u
Ci0gICAgICogTk9UX0ZPVU5EX0VSUjogUmFpc2VkIGlmIHRoZXJlIGlzIG5vIG5vZGUgbmFtZWQg
PGNvZGU+IG5hbWUKLSAgICAgKiA8L2NvZGU+IGluIHRoZSBtYXAuCi0gICAgICoKLSAgICAgKi8K
LSAgICBOb2RlIHJlbW92ZU5hbWVkSXRlbSAoIGNvbnN0IERPTVN0cmluZyAmbmFtZSApOwotCi0g
ICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgPGNvZGU+IGluZGV4IDwvY29kZT4gdGggaXRlbSBp
biB0aGUgbWFwLiBJZiA8Y29kZT4KLSAgICAgKiBpbmRleCA8L2NvZGU+IGlzIGdyZWF0ZXIgdGhh
biBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIG5vZGVzCi0gICAgICogaW4gdGhlIG1hcCwgdGhp
cyByZXR1cm5zIDxjb2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0gICAgICogQHBhcmFtIGlu
ZGV4IEluZGV4IGludG8gdGhlIG1hcC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5vZGUg
YXQgdGhlIDxjb2RlPiBpbmRleCA8L2NvZGU+IHRoIHBvc2l0aW9uIGluIHRoZQotICAgICAqIDxj
b2RlPiBOYW1lZE5vZGVNYXAgPC9jb2RlPiAsIG9yIDxjb2RlPiBudWxsIDwvY29kZT4gaWYgdGhh
dCBpcwotICAgICAqIG5vdCBhIHZhbGlkIGluZGV4LgotICAgICAqCi0gICAgICovCi0gICAgTm9k
ZSBpdGVtICggdW5zaWduZWQgaW5kZXggKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEludHJv
ZHVjZWQgaW4gRE9NIExldmVsIDIKLSAgICAgKgotICAgICAqIFJldHJpZXZlcyBhIG5vZGUgc3Bl
Y2lmaWVkIGJ5IGxvY2FsIG5hbWUgYW5kIG5hbWVzcGFjZSBVUkkuIEhUTUwtb25seQotICAgICAq
IERPTSBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9k
LgotICAgICAqCi0gICAgICogQHBhcmFtIG5hbWVzcGFjZVVSSSBUaGUgbmFtZXNwYWNlIFVSSSBv
ZiB0aGUgbm9kZSB0byByZXRyaWV2ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsb2NhbE5hbWUg
VGhlIGxvY2FsIG5hbWUgb2YgdGhlIG5vZGUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBA
cmV0dXJuIEEgTm9kZSAob2YgYW55IHR5cGUpIHdpdGggdGhlIHNwZWNpZmllZCBsb2NhbCBuYW1l
IGFuZCBuYW1lc3BhY2UKLSAgICAgKiBVUkksIG9yIG51bGwgaWYgdGhleSBkbyBub3QgaWRlbnRp
ZnkgYW55IG5vZGUgaW4gdGhpcyBtYXAuCi0gICAgICovCi0gICAgTm9kZSBnZXROYW1lZEl0ZW1O
UyggY29uc3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUgKSBjb25zdDsKLQotICAgIC8qKgotICAgICAq
IEludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKLSAgICAgKgotICAgICAqIEFkZHMgYSBub2RlIHVz
aW5nIGl0cyBuYW1lc3BhY2VVUkkgYW5kIGxvY2FsTmFtZS4gSWYgYSBub2RlIHdpdGggdGhhdAot
ICAgICAqIG5hbWVzcGFjZSBVUkkgYW5kIHRoYXQgbG9jYWwgbmFtZSBpcyBhbHJlYWR5IHByZXNl
bnQgaW4gdGhpcyBtYXAsIGl0IGlzCi0gICAgICogcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUuCi0g
ICAgICogSFRNTC1vbmx5IERPTSBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IG5lZWQgdG8gaW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgotICAgICAqCi0gICAgICogQHBhcmFtIGFyZyBBIG5vZGUgdG8gc3Rv
cmUgaW4gdGhpcyBtYXAuIFRoZSBub2RlIHdpbGwgbGF0ZXIgYmUKLSAgICAgKiBhY2Nlc3NpYmxl
IHVzaW5nIHRoZSB2YWx1ZSBvZiBpdHMgbmFtZXNwYWNlVVJJIGFuZCBsb2NhbE5hbWUgYXR0cmli
dXRlcy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gSWYgdGhlIG5ldyBOb2RlIHJlcGxhY2VzIGFu
IGV4aXN0aW5nIG5vZGUgdGhlIHJlcGxhY2VkIE5vZGUgaXMKLSAgICAgKiByZXR1cm5lZCwgb3Ro
ZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4
Y2VwdGlvbgotICAgICAqIFdST05HX0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlmIGFyZyB3YXMgY3Jl
YXRlZCBmcm9tIGEgZGlmZmVyZW50IGRvY3VtZW50Ci0gICAgICogdGhhbiB0aGUgb25lIHRoYXQg
Y3JlYXRlZCB0aGlzIG1hcC4KLSAgICAgKgotICAgICAqIE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUjogUmFpc2VkIGlmIHRoaXMgbWFwIGlzIHJlYWRvbmx5LgotICAgICAqCi0gICAgICogSU5V
U0VfQVRUUklCVVRFX0VSUjogUmFpc2VkIGlmIGFyZyBpcyBhbiBBdHRyIHRoYXQgaXMgYWxyZWFk
eSBhbgotICAgICAqIGF0dHJpYnV0ZSBvZiBhbm90aGVyIEVsZW1lbnQgb2JqZWN0LiBUaGUgRE9N
IHVzZXIgbXVzdCBleHBsaWNpdGx5IGNsb25lCi0gICAgICogQXR0ciBub2RlcyB0byByZS11c2Ug
dGhlbSBpbiBvdGhlciBlbGVtZW50cy4KLSAgICAgKi8KLSAgICBOb2RlIHNldE5hbWVkSXRlbU5T
KCBjb25zdCBOb2RlICZhcmcgKTsKLQotICAgIC8qKgotICAgICAqIEludHJvZHVjZWQgaW4gRE9N
IExldmVsIDIKLSAgICAgKgotICAgICAqIFJlbW92ZXMgYSBub2RlIHNwZWNpZmllZCBieSBsb2Nh
bCBuYW1lIGFuZCBuYW1lc3BhY2UgVVJJLiBBIHJlbW92ZWQKLSAgICAgKiBhdHRyaWJ1dGUgbWF5
IGJlIGtub3duIHRvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIHdoZW4gdGhpcyBtYXAgY29udGFpbnMK
LSAgICAgKiB0aGUgYXR0cmlidXRlcyBhdHRhY2hlZCB0byBhbiBlbGVtZW50LCBhcyByZXR1cm5l
ZCBieSB0aGUgYXR0cmlidXRlcwotICAgICAqIGF0dHJpYnV0ZSBvZiB0aGUgTm9kZSBpbnRlcmZh
Y2UuIElmIHNvLCBhbiBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYXBwZWFycwotICAgICAqIGNvbnRh
aW5pbmcgdGhlIGRlZmF1bHQgdmFsdWUgYXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBuYW1l
c3BhY2UgVVJJLAotICAgICAqIGxvY2FsIG5hbWUsIGFuZCBwcmVmaXggd2hlbiBhcHBsaWNhYmxl
LgotICAgICAqIEhUTUwtb25seSBET00gaW1wbGVtZW50YXRpb25zIGRvIG5vdCBuZWVkIHRvIGlt
cGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuYW1lc3BhY2VVUkkg
VGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIG5vZGUgdG8gcmVtb3ZlLgotICAgICAqCi0gICAgICog
QHBhcmFtIGxvY2FsTmFtZSBUaGUgbG9jYWwgbmFtZSBvZiB0aGUgbm9kZSB0byByZW1vdmUuCi0g
ICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBub2RlIHJlbW92ZWQgZnJvbSB0aGlzIG1hcCBpZiBh
IG5vZGUgd2l0aCBzdWNoIGEgbG9jYWwgbmFtZQotICAgICAqIGFuZCBuYW1lc3BhY2UgVVJJIGV4
aXN0cy4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogTk9U
X0ZPVU5EX0VSUjogUmFpc2VkIGlmIHRoZXJlIGlzIG5vIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVk
Ci0gICAgICogbmFtZXNwYWNlVVJJIGFuZCBsb2NhbE5hbWUgaW4gdGhpcyBtYXAuCi0gICAgICoK
LSAgICAgKiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG1hcCBp
cyByZWFkb25seS4KLSAgICAgKi8KLSAgICBOb2RlIHJlbW92ZU5hbWVkSXRlbU5TKCBjb25zdCBE
T01TdHJpbmcgJm5hbWVzcGFjZVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBET01TdHJpbmcgJmxvY2FsTmFtZSApOwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0g
ICAgICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwotICAgIE5hbWVkTm9kZU1hcEltcGwg
KmhhbmRsZSgpIGNvbnN0IHRocm93KCk7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdCB0aHJvdygp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgTmFtZWROb2RlTWFwKCBOYW1lZE5vZGVNYXBJbXBsICppKTsK
LSAgICBOYW1lZE5vZGVNYXBJbXBsICppbXBsOwotCi0gICAgZnJpZW5kIGNsYXNzIE5vZGU7Ci0g
ICAgZnJpZW5kIGNsYXNzIERvY3VtZW50VHlwZTsKLSAgICBmcmllbmQgY2xhc3MgTm9kZUltcGw7
Ci19OwotCi1jbGFzcyBOYW1lZE5vZGVNYXA7Ci1jbGFzcyBOb2RlTGlzdDsKLWNsYXNzIERvY3Vt
ZW50OwotY2xhc3MgRE9NU3RyaW5nOwotY2xhc3MgU3R5bGVTaGVldDsKLQotY2xhc3MgTm9kZUlt
cGw7Ci0KLSNlbmRpZgotCiAvKioKICAqIFRoZSA8Y29kZT4gTm9kZSA8L2NvZGU+IGludGVyZmFj
ZSBpcyB0aGUgcHJpbWFyeSBkYXRhdHlwZSBmb3IgdGhlCiAgKiBlbnRpcmUgRG9jdW1lbnQgT2Jq
ZWN0IE1vZGVsLiBJdCByZXByZXNlbnRzIGEgc2luZ2xlIG5vZGUgaW4gdGhlCkBAIC0yNzIsMzgg
KzU0LDcgQEAgY2xhc3MgTm9kZUltcGw7CiAgKi8KIGNsYXNzIE5vZGUKIHsKLQotI2lmICFLSFRN
TF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICBmcmllbmQgY2xhc3MgTmFtZWROb2RlTWFwOwotICAg
IGZyaWVuZCBjbGFzcyBOb2RlTGlzdDsKLSAgICBmcmllbmQgY2xhc3MgSFRNTENvbGxlY3Rpb247
Ci0gICAgZnJpZW5kIGNsYXNzIFN0eWxlU2hlZXQ7Ci0KLSNlbmRpZgotCiBwdWJsaWM6Ci0KLSNp
ZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgTm9kZSgpOwotICAgIE5vZGUoY29uc3Qg
Tm9kZSAmb3RoZXIpOwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICovCi0gICAg
Tm9kZSggTm9kZUltcGwgKl9pbXBsKTsKLQotICAgIE5vZGUgJiBvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcik7Ci0KLSAgICBib29sIG9wZXJhdG9yID09IChjb25zdCBOb2RlICZvdGhlcik7
Ci0KLSAgICBib29sIG9wZXJhdG9yICE9IChjb25zdCBOb2RlICZvdGhlcik7Ci0KLSAgICB2aXJ0
dWFsIH5Ob2RlKCk7Ci0KLSNlbmRpZgotCiAgICAgLyoqCiAgICAgICogQW4gaW50ZWdlciBpbmRp
Y2F0aW5nIHdoaWNoIHR5cGUgb2Ygbm9kZSB0aGlzIGlzLgogICAgICAqCkBAIC00MDgsNTczICsx
NTksMTQgQEAgcHVibGljOgogICAgICAgICBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTEsCiAg
ICAgICAgIE5PVEFUSU9OX05PREUgPSAxMgogICAgIH07Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQ
TFVTX0RPTQotCi0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhpcyBub2RlLCBkZXBlbmRp
bmcgb24gaXRzIHR5cGU7IHNlZSB0aGUgdGFibGUKLSAgICAgKiBhYm92ZS4KLSAgICAgKgotICAg
ICAqLwotICAgIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
VGhlIHZhbHVlIG9mIHRoaXMgbm9kZSwgZGVwZW5kaW5nIG9uIGl0cyB0eXBlOyBzZWUgdGhlIHRh
YmxlCi0gICAgICogYWJvdmUuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlv
bgotICAgICAqIERPTVNUUklOR19TSVpFX0VSUjogUmFpc2VkIHdoZW4gaXQgd291bGQgcmV0dXJu
IG1vcmUgY2hhcmFjdGVycwotICAgICAqIHRoYW4gZml0IGluIGEgPGNvZGU+IERPTVN0cmluZyA8
L2NvZGU+IHZhcmlhYmxlIG9uIHRoZQotICAgICAqIGltcGxlbWVudGF0aW9uIHBsYXRmb3JtLgot
ICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwotCi0gICAg
LyoqCi0gICAgICogc2VlIEByZWYgbm9kZVZhbHVlCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNl
cHRpb24KLSAgICAgKiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCB3aGVuIHRo
ZSBub2RlIGlzIHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZXROb2RlVmFs
dWUoIGNvbnN0IERPTVN0cmluZyAmICk7Ci0KLSAgICAvKioKLSAgICAgKiBBIGNvZGUgcmVwcmVz
ZW50aW5nIHRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nIG9iamVjdCwgYXMKLSAgICAgKiBkZWZp
bmVkIGFib3ZlLgotICAgICAqCi0gICAgICovCi0gICAgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUo
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBwYXJlbnQgb2YgdGhpcyBub2RlLiBBbGwg
bm9kZXMsIGV4Y2VwdCA8Y29kZT4gRG9jdW1lbnQKLSAgICAgKiA8L2NvZGU+ICwgPGNvZGU+IERv
Y3VtZW50RnJhZ21lbnQgPC9jb2RlPiAsIGFuZCA8Y29kZT4gQXR0cgotICAgICAqIDwvY29kZT4g
bWF5IGhhdmUgYSBwYXJlbnQuIEhvd2V2ZXIsIGlmIGEgbm9kZSBoYXMganVzdCBiZWVuCi0gICAg
ICogY3JlYXRlZCBhbmQgbm90IHlldCBhZGRlZCB0byB0aGUgdHJlZSwgb3IgaWYgaXQgaGFzIGJl
ZW4KLSAgICAgKiByZW1vdmVkIGZyb20gdGhlIHRyZWUsIHRoaXMgaXMgPGNvZGU+IG51bGwgPC9j
b2RlPiAuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIHBhcmVudE5vZGUoKSBjb25zdDsKLQot
ICAgIC8qKgotICAgICAqIEEgPGNvZGU+IE5vZGVMaXN0IDwvY29kZT4gdGhhdCBjb250YWlucyBh
bGwgY2hpbGRyZW4gb2YgdGhpcwotICAgICAqIG5vZGUuIElmIHRoZXJlIGFyZSBubyBjaGlsZHJl
biwgdGhpcyBpcyBhIDxjb2RlPiBOb2RlTGlzdAotICAgICAqIDwvY29kZT4gY29udGFpbmluZyBu
byBub2Rlcy4gVGhlIGNvbnRlbnQgb2YgdGhlIHJldHVybmVkIDxjb2RlPgotICAgICAqIE5vZGVM
aXN0IDwvY29kZT4gaXMgJnF1b3Q7bGl2ZSZxdW90OyBpbiB0aGUgc2Vuc2UgdGhhdCwgZm9yCi0g
ICAgICogaW5zdGFuY2UsIGNoYW5nZXMgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBub2RlIG9iamVj
dCB0aGF0IGl0Ci0gICAgICogd2FzIGNyZWF0ZWQgZnJvbSBhcmUgaW1tZWRpYXRlbHkgcmVmbGVj
dGVkIGluIHRoZSBub2RlcwotICAgICAqIHJldHVybmVkIGJ5IHRoZSA8Y29kZT4gTm9kZUxpc3Qg
PC9jb2RlPiBhY2Nlc3NvcnM7IGl0IGlzIG5vdCBhCi0gICAgICogc3RhdGljIHNuYXBzaG90IG9m
IHRoZSBjb250ZW50IG9mIHRoZSBub2RlLiBUaGlzIGlzIHRydWUgZm9yCi0gICAgICogZXZlcnkg
PGNvZGU+IE5vZGVMaXN0IDwvY29kZT4gLCBpbmNsdWRpbmcgdGhlIG9uZXMgcmV0dXJuZWQgYnkK
LSAgICAgKiB0aGUgPGNvZGU+IGdldEVsZW1lbnRzQnlUYWdOYW1lIDwvY29kZT4gbWV0aG9kLgot
ICAgICAqCi0gICAgICovCi0gICAgTm9kZUxpc3QgY2hpbGROb2RlcygpIGNvbnN0OwotCi0gICAg
LyoqCi0gICAgICogVGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgbm9kZS4gSWYgdGhlcmUgaXMgbm8g
c3VjaCBub2RlLCB0aGlzCi0gICAgICogcmV0dXJucyA8Y29kZT4gbnVsbCA8L2NvZGU+IC4KLSAg
ICAgKgotICAgICAqLwotICAgIE5vZGUgZmlyc3RDaGlsZCgpIGNvbnN0OwotCi0gICAgLyoqCi0g
ICAgICogVGhlIGxhc3QgY2hpbGQgb2YgdGhpcyBub2RlLiBJZiB0aGVyZSBpcyBubyBzdWNoIG5v
ZGUsIHRoaXMKLSAgICAgKiByZXR1cm5zIDxjb2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0g
ICAgICovCi0gICAgTm9kZSBsYXN0Q2hpbGQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRo
ZSBub2RlIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGlzIG5vZGUuIElmIHRoZXJlIGlzIG5vIHN1
Y2gKLSAgICAgKiBub2RlLCB0aGlzIHJldHVybnMgPGNvZGU+IG51bGwgPC9jb2RlPiAuCi0gICAg
ICoKLSAgICAgKi8KLSAgICBOb2RlIHByZXZpb3VzU2libGluZygpIGNvbnN0OwotCi0gICAgLyoq
Ci0gICAgICogVGhlIG5vZGUgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgbm9kZS4gSWYgdGhl
cmUgaXMgbm8gc3VjaAotICAgICAqIG5vZGUsIHRoaXMgcmV0dXJucyA8Y29kZT4gbnVsbCA8L2Nv
ZGU+IC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgbmV4dFNpYmxpbmcoKSBjb25zdDsKLQot
ICAgIC8qKgotICAgICAqIEEgPGNvZGU+IE5hbWVkTm9kZU1hcCA8L2NvZGU+IGNvbnRhaW5pbmcg
dGhlIGF0dHJpYnV0ZXMgb2YgdGhpcwotICAgICAqIG5vZGUgKGlmIGl0IGlzIGFuIDxjb2RlPiBF
bGVtZW50IDwvY29kZT4gKSBvciA8Y29kZT4gbnVsbAotICAgICAqIDwvY29kZT4gb3RoZXJ3aXNl
LgotICAgICAqCi0gICAgICovCi0gICAgTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMoKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIFRoZSA8Y29kZT4gRG9jdW1lbnQgPC9jb2RlPiBvYmplY3QgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4KLSAgICAgKiBUaGlzIGlzIGFsc28gdGhlIDxjb2RlPiBE
b2N1bWVudCA8L2NvZGU+IG9iamVjdCB1c2VkIHRvIGNyZWF0ZQotICAgICAqIG5ldyBub2Rlcy4g
V2hlbiB0aGlzIG5vZGUgaXMgYSA8Y29kZT4gRG9jdW1lbnQgPC9jb2RlPiB0aGlzIGlzCi0gICAg
ICogPGNvZGU+IG51bGwgPC9jb2RlPiAuCi0gICAgICoKLSAgICAgKi8KLSAgICBEb2N1bWVudCBv
d25lckRvY3VtZW50KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBJbnNlcnRzIHRoZSBub2Rl
IDxjb2RlPiBuZXdDaGlsZCA8L2NvZGU+IGJlZm9yZSB0aGUgZXhpc3RpbmcKLSAgICAgKiBjaGls
ZCBub2RlIDxjb2RlPiByZWZDaGlsZCA8L2NvZGU+IC4gSWYgPGNvZGU+IHJlZkNoaWxkIDwvY29k
ZT4KLSAgICAgKiBpcyA8Y29kZT4gbnVsbCA8L2NvZGU+ICwgaW5zZXJ0IDxjb2RlPiBuZXdDaGls
ZCA8L2NvZGU+IGF0IHRoZQotICAgICAqIGVuZCBvZiB0aGUgbGlzdCBvZiBjaGlsZHJlbi4KLSAg
ICAgKgotICAgICAqICBJZiA8Y29kZT4gbmV3Q2hpbGQgPC9jb2RlPiBpcyBhIDxjb2RlPiBEb2N1
bWVudEZyYWdtZW50Ci0gICAgICogPC9jb2RlPiBvYmplY3QsIGFsbCBvZiBpdHMgY2hpbGRyZW4g
YXJlIGluc2VydGVkLCBpbiB0aGUgc2FtZQotICAgICAqIG9yZGVyLCBiZWZvcmUgPGNvZGU+IHJl
ZkNoaWxkIDwvY29kZT4gLiBJZiB0aGUgPGNvZGU+IG5ld0NoaWxkCi0gICAgICogPC9jb2RlPiBp
cyBhbHJlYWR5IGluIHRoZSB0cmVlLCBpdCBpcyBmaXJzdCByZW1vdmVkLgotICAgICAqCi0gICAg
ICogQHBhcmFtIG5ld0NoaWxkIFRoZSBub2RlIHRvIGluc2VydC4KLSAgICAgKgotICAgICAqIEBw
YXJhbSByZWZDaGlsZCBUaGUgcmVmZXJlbmNlIG5vZGUsIGkuZS4sIHRoZSBub2RlIGJlZm9yZSB3
aGljaAotICAgICAqIHRoZSBuZXcgbm9kZSBtdXN0IGJlIGluc2VydGVkLgotICAgICAqCi0gICAg
ICogQHJldHVybiBUaGUgbm9kZSBiZWluZyBpbnNlcnRlZC4KLSAgICAgKgotICAgICAqIEBleGNl
cHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiBSYWlzZWQg
aWYgdGhpcyBub2RlIGlzIG9mIGEgdHlwZSB0aGF0Ci0gICAgICogZG9lcyBub3QgYWxsb3cgY2hp
bGRyZW4gb2YgdGhlIHR5cGUgb2YgdGhlIDxjb2RlPiBuZXdDaGlsZAotICAgICAqIDwvY29kZT4g
bm9kZSwgb3IgaWYgdGhlIG5vZGUgdG8gaW5zZXJ0IGlzIG9uZSBvZiB0aGlzIG5vZGUncwotICAg
ICAqIGFuY2VzdG9ycy4KLSAgICAgKgotICAgICAqICBXUk9OR19ET0NVTUVOVF9FUlI6IFJhaXNl
ZCBpZiA8Y29kZT4gbmV3Q2hpbGQgPC9jb2RlPiB3YXMKLSAgICAgKiBjcmVhdGVkIGZyb20gYSBk
aWZmZXJlbnQgZG9jdW1lbnQgdGhhbiB0aGUgb25lIHRoYXQgY3JlYXRlZAotICAgICAqIHRoaXMg
bm9kZS4KLSAgICAgKgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNl
ZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKiAgTk9UX0ZPVU5EX0VS
UjogUmFpc2VkIGlmIDxjb2RlPiByZWZDaGlsZCA8L2NvZGU+IGlzIG5vdCBhCi0gICAgICogY2hp
bGQgb2YgdGhpcyBub2RlLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBpbnNlcnRCZWZvcmUg
KCBjb25zdCBOb2RlICZuZXdDaGlsZCwgY29uc3QgTm9kZSAmcmVmQ2hpbGQgKTsKLQotICAgIC8q
KgotICAgICAqIFJlcGxhY2VzIHRoZSBjaGlsZCBub2RlIDxjb2RlPiBvbGRDaGlsZCA8L2NvZGU+
IHdpdGggPGNvZGU+Ci0gICAgICogbmV3Q2hpbGQgPC9jb2RlPiBpbiB0aGUgbGlzdCBvZiBjaGls
ZHJlbiwgYW5kIHJldHVybnMgdGhlCi0gICAgICogPGNvZGU+IG9sZENoaWxkIDwvY29kZT4gbm9k
ZS4gSWYgdGhlIDxjb2RlPiBuZXdDaGlsZCA8L2NvZGU+IGlzCi0gICAgICogYWxyZWFkeSBpbiB0
aGUgdHJlZSwgaXQgaXMgZmlyc3QgcmVtb3ZlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuZXdD
aGlsZCBUaGUgbmV3IG5vZGUgdG8gcHV0IGluIHRoZSBjaGlsZCBsaXN0LgotICAgICAqCi0gICAg
ICogQHBhcmFtIG9sZENoaWxkIFRoZSBub2RlIGJlaW5nIHJlcGxhY2VkIGluIHRoZSBsaXN0Lgot
ICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbm9kZSByZXBsYWNlZC4KLSAgICAgKgotICAgICAq
IEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiBS
YWlzZWQgaWYgdGhpcyBub2RlIGlzIG9mIGEgdHlwZSB0aGF0Ci0gICAgICogZG9lcyBub3QgYWxs
b3cgY2hpbGRyZW4gb2YgdGhlIHR5cGUgb2YgdGhlIDxjb2RlPiBuZXdDaGlsZAotICAgICAqIDwv
Y29kZT4gbm9kZSwgb3IgaXQgdGhlIG5vZGUgdG8gcHV0IGluIGlzIG9uZSBvZiB0aGlzIG5vZGUn
cwotICAgICAqIGFuY2VzdG9ycy4KLSAgICAgKgotICAgICAqICBXUk9OR19ET0NVTUVOVF9FUlI6
IFJhaXNlZCBpZiA8Y29kZT4gbmV3Q2hpbGQgPC9jb2RlPiB3YXMKLSAgICAgKiBjcmVhdGVkIGZy
b20gYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhhbiB0aGUgb25lIHRoYXQgY3JlYXRlZAotICAgICAq
IHRoaXMgbm9kZS4KLSAgICAgKgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6
IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKiAgTk9UX0ZP
VU5EX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBvbGRDaGlsZCA8L2NvZGU+IGlzIG5vdCBhCi0gICAg
ICogY2hpbGQgb2YgdGhpcyBub2RlLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSByZXBsYWNl
Q2hpbGQgKCBjb25zdCBOb2RlICZuZXdDaGlsZCwgY29uc3QgTm9kZSAmb2xkQ2hpbGQgKTsKLQot
ICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhlIGNoaWxkIG5vZGUgaW5kaWNhdGVkIGJ5IDxjb2Rl
PiBvbGRDaGlsZCA8L2NvZGU+Ci0gICAgICogZnJvbSB0aGUgbGlzdCBvZiBjaGlsZHJlbiwgYW5k
IHJldHVybnMgaXQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb2xkQ2hpbGQgVGhlIG5vZGUgYmVp
bmcgcmVtb3ZlZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5vZGUgcmVtb3ZlZC4KLSAg
ICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogTk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlzIHJlYWRvbmx5LgotICAgICAq
Ci0gICAgICogIE5PVF9GT1VORF9FUlI6IFJhaXNlZCBpZiA8Y29kZT4gb2xkQ2hpbGQgPC9jb2Rl
PiBpcyBub3QgYQotICAgICAqIGNoaWxkIG9mIHRoaXMgbm9kZS4KLSAgICAgKgotICAgICAqLwot
ICAgIE5vZGUgcmVtb3ZlQ2hpbGQgKCBjb25zdCBOb2RlICZvbGRDaGlsZCApOwotCi0gICAgLyoq
Ci0gICAgICogQWRkcyB0aGUgbm9kZSA8Y29kZT4gbmV3Q2hpbGQgPC9jb2RlPiB0byB0aGUgZW5k
IG9mIHRoZSBsaXN0IG9mCi0gICAgICogY2hpbGRyZW4gb2YgdGhpcyBub2RlLiBJZiB0aGUgPGNv
ZGU+IG5ld0NoaWxkIDwvY29kZT4gaXMKLSAgICAgKiBhbHJlYWR5IGluIHRoZSB0cmVlLCBpdCBp
cyBmaXJzdCByZW1vdmVkLgotICAgICAqCi0gICAgICogQHBhcmFtIG5ld0NoaWxkIFRoZSBub2Rl
IHRvIGFkZC4KLSAgICAgKgotICAgICAqICBJZiBpdCBpcyBhIDxjb2RlPiBEb2N1bWVudEZyYWdt
ZW50IDwvY29kZT4gb2JqZWN0LCB0aGUgZW50aXJlCi0gICAgICogY29udGVudHMgb2YgdGhlIGRv
Y3VtZW50IGZyYWdtZW50IGFyZSBtb3ZlZCBpbnRvIHRoZSBjaGlsZCBsaXN0Ci0gICAgICogb2Yg
dGhpcyBub2RlCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBub2RlIGFkZGVkLgotICAgICAq
Ci0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBISUVSQVJDSFlfUkVRVUVT
VF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgb2YgYSB0eXBlIHRoYXQKLSAgICAgKiBkb2Vz
IG5vdCBhbGxvdyBjaGlsZHJlbiBvZiB0aGUgdHlwZSBvZiB0aGUgPGNvZGU+IG5ld0NoaWxkCi0g
ICAgICogPC9jb2RlPiBub2RlLCBvciBpZiB0aGUgbm9kZSB0byBhcHBlbmQgaXMgb25lIG9mIHRo
aXMgbm9kZSdzCi0gICAgICogYW5jZXN0b3JzLgotICAgICAqCi0gICAgICogIFdST05HX0RPQ1VN
RU5UX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBuZXdDaGlsZCA8L2NvZGU+IHdhcwotICAgICAqIGNy
ZWF0ZWQgZnJvbSBhIGRpZmZlcmVudCBkb2N1bWVudCB0aGFuIHRoZSBvbmUgdGhhdCBjcmVhdGVk
Ci0gICAgICogdGhpcyBub2RlLgotICAgICAqCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9kZSBpcyByZWFkb25seS4KLSAgICAgKgotICAgICAq
LwotICAgIE5vZGUgYXBwZW5kQ2hpbGQgKCBjb25zdCBOb2RlICZuZXdDaGlsZCApOwotCi0gICAg
LyoqCi0gICAgICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBhbGxvdyBlYXN5IGRl
dGVybWluYXRpb24gb2YKLSAgICAgKiB3aGV0aGVyIGEgbm9kZSBoYXMgYW55IGNoaWxkcmVuLgot
ICAgICAqCi0gICAgICogQHJldHVybiA8Y29kZT4gdHJ1ZSA8L2NvZGU+IGlmIHRoZSBub2RlIGhh
cyBhbnkgY2hpbGRyZW4sCi0gICAgICogPGNvZGU+IGZhbHNlIDwvY29kZT4gaWYgdGhlIG5vZGUg
aGFzIG5vIGNoaWxkcmVuLgotICAgICAqCi0gICAgICovCi0gICAgYm9vbCBoYXNDaGlsZE5vZGVz
ICggICk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgZHVwbGljYXRlIG9mIHRoaXMgbm9k
ZSwgaS5lLiwgc2VydmVzIGFzIGEgZ2VuZXJpYwotICAgICAqIGNvcHkgY29uc3RydWN0b3IgZm9y
IG5vZGVzLiBUaGUgZHVwbGljYXRlIG5vZGUgaGFzIG5vIHBhcmVudCAoCi0gICAgICogPGNvZGU+
IHBhcmVudE5vZGUgPC9jb2RlPiByZXR1cm5zIDxjb2RlPiBudWxsIDwvY29kZT4gLikuCi0gICAg
ICoKLSAgICAgKiAgQ2xvbmluZyBhbiA8Y29kZT4gRWxlbWVudCA8L2NvZGU+IGNvcGllcyBhbGwg
YXR0cmlidXRlcyBhbmQKLSAgICAgKiB0aGVpciB2YWx1ZXMsIGluY2x1ZGluZyB0aG9zZSBnZW5l
cmF0ZWQgYnkgdGhlIFhNTCBwcm9jZXNzb3IgdG8KLSAgICAgKiByZXByZXNlbnQgZGVmYXVsdGVk
IGF0dHJpYnV0ZXMsIGJ1dCB0aGlzIG1ldGhvZCBkb2VzIG5vdCBjb3B5Ci0gICAgICogYW55IHRl
eHQgaXQgY29udGFpbnMgdW5sZXNzIGl0IGlzIGEgZGVlcCBjbG9uZSwgc2luY2UgdGhlIHRleHQK
LSAgICAgKiBpcyBjb250YWluZWQgaW4gYSBjaGlsZCA8Y29kZT4gVGV4dCA8L2NvZGU+IG5vZGUu
IENsb25pbmcgYW55Ci0gICAgICogb3RoZXIgdHlwZSBvZiBub2RlIHNpbXBseSByZXR1cm5zIGEg
Y29weSBvZiB0aGlzIG5vZGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZGVlcCBJZiA8Y29kZT4g
dHJ1ZSA8L2NvZGU+ICwgcmVjdXJzaXZlbHkgY2xvbmUgdGhlCi0gICAgICogc3VidHJlZSB1bmRl
ciB0aGUgc3BlY2lmaWVkIG5vZGU7IGlmIDxjb2RlPiBmYWxzZSA8L2NvZGU+ICwKLSAgICAgKiBj
bG9uZSBvbmx5IHRoZSBub2RlIGl0c2VsZiAoYW5kIGl0cyBhdHRyaWJ1dGVzLCBpZiBpdCBpcyBh
bgotICAgICAqIDxjb2RlPiBFbGVtZW50IDwvY29kZT4gKS4KLSAgICAgKgotICAgICAqIEByZXR1
cm4gVGhlIGR1cGxpY2F0ZSBub2RlLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBjbG9uZU5v
ZGUgKCBib29sIGRlZXAgKTsKLQotICAgIC8qKgotICAgICAqIE1vZGlmaWVkIGluIERPTSBMZXZl
bCAyCi0gICAgICoKLSAgICAgKiBQdXRzIGFsbCBUZXh0IG5vZGVzIGluIHRoZSBmdWxsIGRlcHRo
IG9mIHRoZSBzdWItdHJlZSB1bmRlcm5lYXRoIHRoaXMKLSAgICAgKiBOb2RlLCBpbmNsdWRpbmcg
YXR0cmlidXRlIG5vZGVzLCBpbnRvIGEgIm5vcm1hbCIgZm9ybSB3aGVyZSBvbmx5Ci0gICAgICog
c3RydWN0dXJlIChlLmcuLCBlbGVtZW50cywgY29tbWVudHMsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rp
b25zLCBDREFUQQotICAgICAqIHNlY3Rpb25zLCBhbmQgZW50aXR5IHJlZmVyZW5jZXMpIHNlcGFy
YXRlcyBUZXh0IG5vZGVzLCBpLmUuLCB0aGVyZSBhcmUKLSAgICAgKiBuZWl0aGVyIGFkamFjZW50
IFRleHQgbm9kZXMgbm9yIGVtcHR5IFRleHQgbm9kZXMuIFRoaXMgY2FuIGJlIHVzZWQgdG8KLSAg
ICAgKiBlbnN1cmUgdGhhdCB0aGUgRE9NIHZpZXcgb2YgYSBkb2N1bWVudCBpcyB0aGUgc2FtZSBh
cyBpZiBpdCB3ZXJlIHNhdmVkCi0gICAgICogYW5kIHJlLWxvYWRlZCwgYW5kIGlzIHVzZWZ1bCB3
aGVuIG9wZXJhdGlvbnMgKHN1Y2ggYXMgWFBvaW50ZXIKLSAgICAgKiBbWFBvaW50ZXJdIGxvb2t1
cHMpIHRoYXQgZGVwZW5kIG9uIGEgcGFydGljdWxhciBkb2N1bWVudCB0cmVlIHN0cnVjdHVyZQot
ICAgICAqIGFyZSB0byBiZSB1c2VkLgotICAgICAqCi0gICAgICogTm90ZTogSW4gY2FzZXMgd2hl
cmUgdGhlIGRvY3VtZW50IGNvbnRhaW5zIENEQVRBU2VjdGlvbnMsIHRoZSBub3JtYWxpemUKLSAg
ICAgKiBvcGVyYXRpb24gYWxvbmUgbWF5IG5vdCBiZSBzdWZmaWNpZW50LCBzaW5jZSBYUG9pbnRl
cnMgZG8gbm90Ci0gICAgICogZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIFRleHQgbm9kZXMgYW5kIENE
QVRBU2VjdGlvbiBub2Rlcy4KLSAgICAgKi8KLSAgICB2b2lkIG5vcm1hbGl6ZSAoICApOwotCi0g
ICAgLyoqCi0gICAgICogSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgotICAgICAqCi0gICAgICog
VGVzdHMgd2hldGhlciB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGltcGxlbWVudHMgYSBzcGVjaWZp
YyBmZWF0dXJlIGFuZAotICAgICAqIHRoYXQgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhpcyBu
b2RlLgotICAgICAqCi0gICAgICogQHBhcmFtIGZlYXR1cmUgVGhlIG5hbWUgb2YgdGhlIGZlYXR1
cmUgdG8gdGVzdC4gVGhpcyBpcyB0aGUgc2FtZSBuYW1lCi0gICAgICogd2hpY2ggY2FuIGJlIHBh
c3NlZCB0byB0aGUgbWV0aG9kIGhhc0ZlYXR1cmUgb24gRE9NSW1wbGVtZW50YXRpb24uCi0gICAg
ICoKLSAgICAgKiBAcGFyYW0gdmVyc2lvbiBUaGlzIGlzIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0
aGUgZmVhdHVyZSB0byB0ZXN0LiBJbgotICAgICAqIExldmVsIDIsIHZlcnNpb24gMSwgdGhpcyBp
cyB0aGUgc3RyaW5nICIyLjAiLiBJZiB0aGUgdmVyc2lvbiBpcyBub3QKLSAgICAgKiBzcGVjaWZp
ZWQsIHN1cHBvcnRpbmcgYW55IHZlcnNpb24gb2YgdGhlIGZlYXR1cmUgd2lsbCBjYXVzZSB0aGUg
bWV0aG9kCi0gICAgICogdG8gcmV0dXJuIHRydWUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIG9uIHRoaXMg
bm9kZSwKLSAgICAgKiBmYWxzZSBvdGhlcndpc2UuCi0gICAgICovCi0gICAgYm9vbCBpc1N1cHBv
cnRlZCggY29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLAotICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IERPTVN0cmluZyAmdmVyc2lvbiApIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogSW50cm9k
dWNlZCBpbiBET00gTGV2ZWwgMgotICAgICAqCi0gICAgICogVGhlIG5hbWVzcGFjZSBVUkkgb2Yg
dGhpcyBub2RlLCBvciBudWxsIGlmIGl0IGlzIHVuc3BlY2lmaWVkLgotICAgICAqIFRoaXMgaXMg
bm90IGEgY29tcHV0ZWQgdmFsdWUgdGhhdCBpcyB0aGUgcmVzdWx0IG9mIGEgbmFtZXNwYWNlIGxv
b2t1cAotICAgICAqIGJhc2VkIG9uIGFuIGV4YW1pbmF0aW9uIG9mIHRoZSBuYW1lc3BhY2UgZGVj
bGFyYXRpb25zIGluIHNjb3BlLiBJdCBpcwotICAgICAqIG1lcmVseSB0aGUgbmFtZXNwYWNlIFVS
SSBnaXZlbiBhdCBjcmVhdGlvbiB0aW1lLiBGb3Igbm9kZXMgb2YgYW55IHR5cGUKLSAgICAgKiBv
dGhlciB0aGFuIEVMRU1FTlRfTk9ERSBhbmQgQVRUUklCVVRFX05PREUgYW5kIG5vZGVzIGNyZWF0
ZWQgd2l0aCBhIERPTQotICAgICAqIExldmVsIDEgbWV0aG9kLCBzdWNoIGFzIGNyZWF0ZUVsZW1l
bnQgZnJvbSB0aGUgRG9jdW1lbnQgaW50ZXJmYWNlLCB0aGlzCi0gICAgICogaXMgYWx3YXlzIG51
bGwuCi0gICAgICoKLSAgICAgKiBOb3RlOiBQZXIgdGhlIE5hbWVzcGFjZXMgaW4gWE1MIFNwZWNp
ZmljYXRpb24gW05hbWVzcGFjZXNdIGFuIGF0dHJpYnV0ZQotICAgICAqIGRvZXMgbm90IGluaGVy
aXQgaXRzIG5hbWVzcGFjZSBmcm9tIHRoZSBlbGVtZW50IGl0IGlzIGF0dGFjaGVkIHRvLiBJZiBh
bgotICAgICAqIGF0dHJpYnV0ZSBpcyBub3QgZXhwbGljaXRseSBnaXZlbiBhIG5hbWVzcGFjZSwg
aXQgc2ltcGx5IGhhcyBubwotICAgICAqIG5hbWVzcGFjZS4KLSAgICAgKi8KLSAgICBET01TdHJp
bmcgbmFtZXNwYWNlVVJJKCAgKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEludHJvZHVjZWQg
aW4gRE9NIExldmVsIDIKLSAgICAgKgotICAgICAqIFRoZSBuYW1lc3BhY2UgcHJlZml4IG9mIHRo
aXMgbm9kZSwgb3IgbnVsbCBpZiBpdCBpcyB1bnNwZWNpZmllZC4KLSAgICAgKiBOb3RlIHRoYXQg
c2V0dGluZyB0aGlzIGF0dHJpYnV0ZSwgd2hlbiBwZXJtaXR0ZWQsIGNoYW5nZXMgdGhlIG5vZGVO
YW1lCi0gICAgICogYXR0cmlidXRlLCB3aGljaCBob2xkcyB0aGUgcXVhbGlmaWVkIG5hbWUsIGFz
IHdlbGwgYXMgdGhlIHRhZ05hbWUgYW5kCi0gICAgICogbmFtZSBhdHRyaWJ1dGVzIG9mIHRoZSBF
bGVtZW50IGFuZCBBdHRyIGludGVyZmFjZXMsIHdoZW4gYXBwbGljYWJsZS4KLSAgICAgKiBOb3Rl
IGFsc28gdGhhdCBjaGFuZ2luZyB0aGUgcHJlZml4IG9mIGFuIGF0dHJpYnV0ZSB0aGF0IGlzIGtu
b3duIHRvIGhhdmUKLSAgICAgKiBhIGRlZmF1bHQgdmFsdWUsIGRvZXMgbm90IG1ha2UgYSBuZXcg
YXR0cmlidXRlIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUKLSAgICAgKiBhbmQgdGhlIG9yaWdpbmFs
IHByZWZpeCBhcHBlYXIsIHNpbmNlIHRoZSBuYW1lc3BhY2VVUkkgYW5kIGxvY2FsTmFtZSBkbwot
ICAgICAqIG5vdCBjaGFuZ2UuCi0gICAgICogRm9yIG5vZGVzIG9mIGFueSB0eXBlIG90aGVyIHRo
YW4gRUxFTUVOVF9OT0RFIGFuZCBBVFRSSUJVVEVfTk9ERSBhbmQKLSAgICAgKiBub2RlcyBjcmVh
dGVkIHdpdGggYSBET00gTGV2ZWwgMSBtZXRob2QsIHN1Y2ggYXMgY3JlYXRlRWxlbWVudCBmcm9t
IHRoZQotICAgICAqIERvY3VtZW50IGludGVyZmFjZSwgdGhpcyBpcyBhbHdheXMgbnVsbC4KLSAg
ICAgKi8KLSAgICBET01TdHJpbmcgcHJlZml4KCAgKSBjb25zdDsKLQotICAgIC8qKgotICAgICAq
IHNlZSBAcmVmIHByZWZpeAotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24K
LSAgICAgKiBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHBy
ZWZpeCBjb250YWlucyBhbgotICAgICAqIGlsbGVnYWwgY2hhcmFjdGVyLgotICAgICAqCi0gICAg
ICogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlzIHJl
YWRvbmx5LgotICAgICAqCi0gICAgICogTkFNRVNQQUNFX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVj
aWZpZWQgcHJlZml4IGlzIG1hbGZvcm1lZCwgaWYgdGhlCi0gICAgICogbmFtZXNwYWNlVVJJIG9m
IHRoaXMgbm9kZSBpcyBudWxsLCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyAieG1sIiBhbmQK
LSAgICAgKiB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBkaWZmZXJlbnQgZnJvbQot
ICAgICAqICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCBpZiB0aGlzIG5v
ZGUgaXMgYW4gYXR0cmlidXRlIGFuZAotICAgICAqIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzICJ4
bWxucyIgYW5kIHRoZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzCi0gICAgICogZGlmZmVy
ZW50IGZyb20gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwgb3IgaWYgdGhpcyBub2Rl
IGlzIGFuCi0gICAgICogYXR0cmlidXRlIGFuZCB0aGUgcXVhbGlmaWVkTmFtZSBvZiB0aGlzIG5v
ZGUgaXMgInhtbG5zIiBbTmFtZXNwYWNlc10uCi0gICAgICovCi0gICAgdm9pZCBzZXRQcmVmaXgo
Y29uc3QgRE9NU3RyaW5nICZwcmVmaXggKTsKLQotICAgIC8qKgotICAgICAqIEludHJvZHVjZWQg
aW4gRE9NIExldmVsIDIKLSAgICAgKgotICAgICAqIFJldHVybnMgdGhlIGxvY2FsIHBhcnQgb2Yg
dGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoaXMgbm9kZS4KLSAgICAgKiBGb3Igbm9kZXMgb2YgYW55
IHR5cGUgb3RoZXIgdGhhbiBFTEVNRU5UX05PREUgYW5kIEFUVFJJQlVURV9OT0RFIGFuZAotICAg
ICAqIG5vZGVzIGNyZWF0ZWQgd2l0aCBhIERPTSBMZXZlbCAxIG1ldGhvZCwgc3VjaCBhcyBjcmVh
dGVFbGVtZW50IGZyb20gdGhlCi0gICAgICogRG9jdW1lbnQgaW50ZXJmYWNlLCB0aGlzIGlzIGFs
d2F5cyBudWxsLgotICAgICAqLwotICAgIERPTVN0cmluZyBsb2NhbE5hbWUoICApIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgbm9kZSAoaWYgaXQgaXMgYW4g
ZWxlbWVudCkgaGFzIGFueSBhdHRyaWJ1dGVzLgotICAgICAqIEByZXR1cm4gYSBib29sZWFuLiBU
cnVlIGlmIHRoaXMgbm9kZSBoYXMgYW55IGF0dHJpYnV0ZXMsIGZhbHNlIG90aGVyd2lzZS4KLSAg
ICAgKiAgSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgotICAgICAqLwotICAgIGJvb2wgaGFzQXR0
cmlidXRlcyAoICApOwotCi0gICAgLyoqCi0gICAgICogSW50cm9kdWNlZCBpbiBET00gTGV2ZWwg
MgotICAgICAqIFRoaXMgbWV0aG9kIGlzIGZyb20gdGhlIEV2ZW50VGFyZ2V0IGludGVyZmFjZQot
ICAgICAqCi0gICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHRoZSByZWdpc3RyYXRpb24gb2YgZXZl
bnQgbGlzdGVuZXJzIG9uIHRoZSBldmVudAotICAgICAqIHRhcmdldC4gSWYgYW4gRXZlbnRMaXN0
ZW5lciBpcyBhZGRlZCB0byBhbiBFdmVudFRhcmdldCB3aGlsZSBpdCBpcwotICAgICAqIHByb2Nl
c3NpbmcgYW4gZXZlbnQsIGl0IHdpbGwgbm90IGJlIHRyaWdnZXJlZCBieSB0aGUgY3VycmVudCBh
Y3Rpb25zIGJ1dAotICAgICAqIG1heSBiZSB0cmlnZ2VyZWQgZHVyaW5nIGEgbGF0ZXIgc3RhZ2Ug
b2YgZXZlbnQgZmxvdywgc3VjaCBhcyB0aGUKLSAgICAgKiBidWJibGluZyBwaGFzZS4KLSAgICAg
KgotICAgICAqIElmIG11bHRpcGxlIGlkZW50aWNhbCBFdmVudExpc3RlbmVycyBhcmUgcmVnaXN0
ZXJlZCBvbiB0aGUgc2FtZQotICAgICAqIEV2ZW50VGFyZ2V0IHdpdGggdGhlIHNhbWUgcGFyYW1l
dGVycyB0aGUgZHVwbGljYXRlIGluc3RhbmNlcyBhcmUKLSAgICAgKiBkaXNjYXJkZWQuIFRoZXkg
ZG8gbm90IGNhdXNlIHRoZSBFdmVudExpc3RlbmVyIHRvIGJlIGNhbGxlZCB0d2ljZSBhbmQKLSAg
ICAgKiBzaW5jZSB0aGV5IGFyZSBkaXNjYXJkZWQgdGhleSBkbyBub3QgbmVlZCB0byBiZSByZW1v
dmVkIHdpdGggdGhlCi0gICAgICogcmVtb3ZlRXZlbnRMaXN0ZW5lciBtZXRob2QuIFBhcmFtZXRl
cnMKLSAgICAgKgotICAgICAqIEBwYXJhbSB0eXBlIFRoZSBldmVudCB0eXBlIGZvciB3aGljaCB0
aGUgdXNlciBpcyByZWdpc3RlcmluZwotICAgICAqCi0gICAgICogQHBhcmFtIGxpc3RlbmVyIFRo
ZSBsaXN0ZW5lciBwYXJhbWV0ZXIgdGFrZXMgYW4gaW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5Ci0g
ICAgICogdGhlIHVzZXIgd2hpY2ggY29udGFpbnMgdGhlIG1ldGhvZHMgdG8gYmUgY2FsbGVkIHdo
ZW4gdGhlIGV2ZW50IG9jY3Vycy4KLSAgICAgKgotICAgICAqIEBwYXJhbSB1c2VDYXB0dXJlIElm
IHRydWUsIHVzZUNhcHR1cmUgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIgd2lzaGVzIHRvCi0gICAg
ICogaW5pdGlhdGUgY2FwdHVyZS4gQWZ0ZXIgaW5pdGlhdGluZyBjYXB0dXJlLCBhbGwgZXZlbnRz
IG9mIHRoZSBzcGVjaWZpZWQKLSAgICAgKiB0eXBlIHdpbGwgYmUgZGlzcGF0Y2hlZCB0byB0aGUg
cmVnaXN0ZXJlZCBFdmVudExpc3RlbmVyIGJlZm9yZSBiZWluZwotICAgICAqIGRpc3BhdGNoZWQg
dG8gYW55IEV2ZW50VGFyZ2V0cyBiZW5lYXRoIHRoZW0gaW4gdGhlIHRyZWUuIEV2ZW50cyB3aGlj
aAotICAgICAqIGFyZSBidWJibGluZyB1cHdhcmQgdGhyb3VnaCB0aGUgdHJlZSB3aWxsIG5vdCB0
cmlnZ2VyIGFuIEV2ZW50TGlzdGVuZXIKLSAgICAgKiBkZXNpZ25hdGVkIHRvIHVzZSBjYXB0dXJl
LgotICAgICAqLwotICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBET01TdHJpbmcgJnR5
cGUsCi0JCQkgIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLAotCQkJICBib29sIHVzZUNhcHR1cmUp
OwotCi0gICAgLyoqCi0gICAgICogSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgotICAgICAqIFRo
aXMgbWV0aG9kIGlzIGZyb20gdGhlIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgICAqCi0gICAg
ICogVGhpcyBtZXRob2QgYWxsb3dzIHRoZSByZW1vdmFsIG9mIGV2ZW50IGxpc3RlbmVycyBmcm9t
IHRoZSBldmVudCB0YXJnZXQuCi0gICAgICogSWYgYW4gRXZlbnRMaXN0ZW5lciBpcyByZW1vdmVk
IGZyb20gYW4gRXZlbnRUYXJnZXQgd2hpbGUgaXQgaXMKLSAgICAgKiBwcm9jZXNzaW5nIGFuIGV2
ZW50LCBpdCB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQgYnkgdGhlIGN1cnJlbnQgYWN0aW9ucy4KLSAg
ICAgKgotICAgICAqIEV2ZW50TGlzdGVuZXJzIGNhbiBuZXZlciBiZSBpbnZva2VkIGFmdGVyIGJl
aW5nIHJlbW92ZWQuCi0gICAgICoKLSAgICAgKiBDYWxsaW5nIHJlbW92ZUV2ZW50TGlzdGVuZXIg
d2l0aCBhcmd1bWVudHMgd2hpY2ggZG8gbm90IGlkZW50aWZ5IGFueQotICAgICAqIGN1cnJlbnRs
eSByZWdpc3RlcmVkIEV2ZW50TGlzdGVuZXIgb24gdGhlIEV2ZW50VGFyZ2V0IGhhcyBubyBlZmZl
Y3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdHlwZSBTcGVjaWZpZXMgdGhlIGV2ZW50IHR5cGUg
b2YgdGhlIEV2ZW50TGlzdGVuZXIgYmVpbmcgcmVtb3ZlZC4KLSAgICAgKgotICAgICAqIEBwYXJh
bSBsaXN0ZW5lciBUaGUgRXZlbnRMaXN0ZW5lciBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBFdmVu
dExpc3RlbmVyCi0gICAgICogdG8gYmUgcmVtb3ZlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB1
c2VDYXB0dXJlIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBFdmVudExpc3RlbmVyIGJlaW5nIHJlbW92
ZWQgd2FzCi0gICAgICogcmVnaXN0ZXJlZCBhcyBhIGNhcHR1cmluZyBsaXN0ZW5lciBvciBub3Qu
IElmIGEgbGlzdGVuZXIgd2FzIHJlZ2lzdGVyZWQKLSAgICAgKiB0d2ljZSwgb25lIHdpdGggY2Fw
dHVyZSBhbmQgb25lIHdpdGhvdXQsIGVhY2ggbXVzdCBiZSByZW1vdmVkCi0gICAgICogc2VwYXJh
dGVseS4gUmVtb3ZhbCBvZiBhIGNhcHR1cmluZyBsaXN0ZW5lciBkb2VzIG5vdCBhZmZlY3QgYQot
ICAgICAqIG5vbi1jYXB0dXJpbmcgdmVyc2lvbiBvZiB0aGUgc2FtZSBsaXN0ZW5lciwgYW5kIHZp
Y2UgdmVyc2EuCi0gICAgICovCi0KLSAgICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3Qg
RE9NU3RyaW5nICZ0eXBlLAotCQkJICAgICBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwKLQkJCSAg
ICAgYm9vbCB1c2VDYXB0dXJlKTsKLQotICAgIC8qKgotICAgICAqIEludHJvZHVjZWQgaW4gRE9N
IExldmVsIDIKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBmcm9tIHRoZSBFdmVudFRhcmdldCBpbnRl
cmZhY2UKLSAgICAgKgotICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyB0aGUgZGlzcGF0Y2ggb2Yg
ZXZlbnRzIGludG8gdGhlIGltcGxlbWVudGF0aW9ucyBldmVudAotICAgICAqIG1vZGVsLiBFdmVu
dHMgZGlzcGF0Y2hlZCBpbiB0aGlzIG1hbm5lciB3aWxsIGhhdmUgdGhlIHNhbWUgY2FwdHVyaW5n
IGFuZAotICAgICAqIGJ1YmJsaW5nIGJlaGF2aW9yIGFzIGV2ZW50cyBkaXNwYXRjaGVkIGRpcmVj
dGx5IGJ5IHRoZSBpbXBsZW1lbnRhdGlvbi4KLSAgICAgKiBUaGUgdGFyZ2V0IG9mIHRoZSBldmVu
dCBpcyB0aGUgRXZlbnRUYXJnZXQgb24gd2hpY2ggZGlzcGF0Y2hFdmVudCBpcwotICAgICAqIGNh
bGxlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBldnQgU3BlY2lmaWVzIHRoZSBldmVudCB0eXBl
LCBiZWhhdmlvciwgYW5kIGNvbnRleHR1YWwKLSAgICAgKiBpbmZvcm1hdGlvbiB0byBiZSB1c2Vk
IGluIHByb2Nlc3NpbmcgdGhlIGV2ZW50LgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgcmV0
dXJuIHZhbHVlIG9mIGRpc3BhdGNoRXZlbnQgaW5kaWNhdGVzIHdoZXRoZXIgYW55IG9mIHRoZQot
ICAgICAqIGxpc3RlbmVycyB3aGljaCBoYW5kbGVkIHRoZSBldmVudCBjYWxsZWQgcHJldmVudERl
ZmF1bHQuIElmCi0gICAgICogcHJldmVudERlZmF1bHQgd2FzIGNhbGxlZCB0aGUgdmFsdWUgaXMg
ZmFsc2UsIGVsc2UgdGhlIHZhbHVlIGlzIHRydWUuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9u
IEV2ZW50RXhjZXB0aW9uCi0gICAgICogVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI6IFJhaXNl
ZCBpZiB0aGUgRXZlbnQncyB0eXBlIHdhcyBub3Qgc3BlY2lmaWVkCi0gICAgICogYnkgaW5pdGlh
bGl6aW5nIHRoZSBldmVudCBiZWZvcmUgZGlzcGF0Y2hFdmVudCB3YXMgY2FsbGVkLiBTcGVjaWZp
Y2F0aW9uCi0gICAgICogb2YgdGhlIEV2ZW50J3MgdHlwZSBhcyBudWxsIG9yIGFuIGVtcHR5IHN0
cmluZyB3aWxsIGFsc28gdHJpZ2dlciB0aGlzCi0gICAgICogZXhjZXB0aW9uLgotICAgICAqLwot
ICAgIGJvb2wgZGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCAmZXZ0KTsKLQotICAgIC8qKgotICAg
ICAqIHRlc3RzIGlmIHRoaXMgTm9kZSBpcyAwLiBVc2VmdWwgZXNwZWNpYWxseSwgaWYgY2FzdGlu
ZyB0byBhIGRlcml2ZWQKLSAgICAgKiBjbGFzczoKLSAgICAgKgotICAgICAqIDxwcmU+Ci0gICAg
ICogTm9kZSBuID0gLi4uLi47Ci0gICAgICogLy8gdHJ5IHRvIGNvbnZlcnQgaW50byBhbiBFbGVt
ZW50OgotICAgICAqIEVsZW1lbnQgZSA9IG47Ci0gICAgICogaWYoIGUuaXNOdWxsKCkgKQotICAg
ICAqICAga2REZWJ1ZygzMDApIDw8ICJub2RlIGlzbid0IGFuIGVsZW1lbnQgbm9kZSIgPDwgZW5k
bDsKLSAgICAgKiA8L3ByZT4KLSAgICAgKi8KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0
dXJuIGltcGwgPT0gMDsgfQotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsIGhhbmRsZSB0byB0
aGUgaW1wbGVtZW50YXRpb24gb2JqZWN0Ci0gICAgICovCi0gICAgTm9kZUltcGwgKmhhbmRsZSgp
IGNvbnN0IHsgcmV0dXJuIGltcGw7IH0KLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbCByZXR1
cm5zIHRoZSBpbmRleCBvZiBhIG5vZGUKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0OwotICAgIFFTdHJpbmcgdG9IVE1MKCk7Ci0gICAgdm9pZCBhcHBseUNoYW5nZXMoKTsKLSAg
ICAvKioKLSAgICAgKiBub3QgcGFydCBvZiB0aGUgRE9NLgotICAgICAqIEByZXR1cm5zIHRoZSBl
eGFjdCBjb29yZGluYXRlcyBhbmQgc2l6ZSBvZiB0aGlzIGVsZW1lbnQuCi0gICAgICovCi0gICAg
UVJlY3QgZ2V0UmVjdCgpOwotCi0gICAgLyoqCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTS4K
LSAgICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoaXMgbm9kZSBpcyBjb250ZW50ZWRpdGFibGUuCi0g
ICAgICovCi0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6
Ci0gICAgTm9kZUltcGwgKmltcGw7Ci0KLSNlbmRpZgotCiB9OwogCiAKLSNpZiAhS0hUTUxfTk9f
Q1BMVVNQTFVTX0RPTQotCi1jbGFzcyBOb2RlTGlzdEltcGw7Ci0KLS8qKgotICogVGhlIDxjb2Rl
PiBOb2RlTGlzdCA8L2NvZGU+IGludGVyZmFjZSBwcm92aWRlcyB0aGUgYWJzdHJhY3Rpb24gb2YK
LSAqIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBub2Rlcywgd2l0aG91dCBkZWZpbmluZyBvciBj
b25zdHJhaW5pbmcKLSAqIGhvdyB0aGlzIGNvbGxlY3Rpb24gaXMgaW1wbGVtZW50ZWQuCi0gKgot
ICogIFRoZSBpdGVtcyBpbiB0aGUgPGNvZGU+IE5vZGVMaXN0IDwvY29kZT4gYXJlIGFjY2Vzc2li
bGUgdmlhIGFuCi0gKiBpbnRlZ3JhbCBpbmRleCwgc3RhcnRpbmcgZnJvbSAwLgotICoKLSAqLwot
Y2xhc3MgTm9kZUxpc3QKLXsKLSAgICBmcmllbmQgY2xhc3MgRWxlbWVudDsKLSAgICBmcmllbmQg
Y2xhc3MgTm9kZTsKLSAgICBmcmllbmQgY2xhc3MgRG9jdW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNz
IEhUTUxEb2N1bWVudDsKLSAgICBmcmllbmQgY2xhc3MgTm9kZUxpc3RJbXBsOwotCi1wdWJsaWM6
Ci0gICAgTm9kZUxpc3QoKTsKLSAgICBOb2RlTGlzdChjb25zdCBOb2RlTGlzdCAmb3RoZXIpOwot
Ci0gICAgTm9kZUxpc3QgJiBvcGVyYXRvciA9IChjb25zdCBOb2RlTGlzdCAmb3RoZXIpOwotCi0g
ICAgfk5vZGVMaXN0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbnVtYmVyIG9mIG5vZGVzIGlu
IHRoZSBsaXN0LiBUaGUgcmFuZ2Ugb2YgdmFsaWQgY2hpbGQgbm9kZQotICAgICAqIGluZGljZXMg
aXMgMCB0byA8Y29kZT4gbGVuZ3RoLTEgPC9jb2RlPiBpbmNsdXNpdmUuCi0gICAgICoKLSAgICAg
Ki8KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFJldHVy
bnMgdGhlIDxjb2RlPiBpbmRleCA8L2NvZGU+IHRoIGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uIElm
Ci0gICAgICogPGNvZGU+IGluZGV4IDwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRv
IHRoZSBudW1iZXIgb2YKLSAgICAgKiBub2RlcyBpbiB0aGUgbGlzdCwgdGhpcyByZXR1cm5zIDxj
b2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4IGlu
dG8gdGhlIGNvbGxlY3Rpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBub2RlIGF0IHRo
ZSA8Y29kZT4gaW5kZXggPC9jb2RlPiB0aCBwb3NpdGlvbiBpbiB0aGUKLSAgICAgKiA8Y29kZT4g
Tm9kZUxpc3QgPC9jb2RlPiAsIG9yIDxjb2RlPiBudWxsIDwvY29kZT4gaWYgdGhhdCBpcyBub3QK
LSAgICAgKiBhIHZhbGlkIGluZGV4LgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBpdGVtICgg
dW5zaWduZWQgaW5kZXggKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAg
ICAqIG5vdCBwYXJ0IG9mIHRoZSBET00KLSAgICAgKi8KLSAgICBOb2RlIGl0ZW1CeUlkIChjb25z
dCBET01TdHJpbmcmIGVsZW1lbnRJZCkgY29uc3Q7Ci0KLSAgICBOb2RlTGlzdEltcGwgKmhhbmRs
ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7Ci0KLSAgICBOb2RlTGlzdChjb25z
dCBOb2RlTGlzdEltcGwgKmkpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgTm9kZUxpc3RJbXBsICppbXBs
OwotfTsKLQotI2VuZGlmCi0KIC8qKgogICogQSBET01UaW1lU3RhbXAgcmVwcmVzZW50cyBhIG51
bWJlciBvZiBtaWxsaXNlY29uZHMuCiAgKgogICovCi0jaWYgX19BUFBMRV9fCiB0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyBET01UaW1lU3RhbXA7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBs
b25nIERPTVRpbWVTdGFtcDsKLSNlbmRpZgogCiB9IC8vbmFtZXNwYWNlCiAKSW5kZXg6IGtodG1s
L2RvbS9kb21fc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9kb20vZG9tX3N0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjIKZGlm
ZiAtcCAtdSAtcjEuMjIga2h0bWwvZG9tL2RvbV9zdHJpbmcuY3BwCi0tLSBraHRtbC9kb20vZG9t
X3N0cmluZy5jcHAJMyBPY3QgMjAwNSAyMToxMjoxMSAtMDAwMAkxLjIyCisrKyBraHRtbC9kb20v
ZG9tX3N0cmluZy5jcHAJMjkgTm92IDIwMDUgMjI6NTE6NDAgLTAwMDAKQEAgLTI3LDcgKzI3LDYg
QEAKIAogbmFtZXNwYWNlIERPTSB7CiAKLQogRE9NU3RyaW5nOjpET01TdHJpbmcoY29uc3QgUUNo
YXIgKnN0ciwgdWludCBsZW4pCiB7CiAgICAgaWYgKCFzdHIpIHsKQEAgLTEzNSw3ICsxMzQsNiBA
QCB2b2lkIERPTVN0cmluZzo6aW5zZXJ0KERPTVN0cmluZyBzdHIsIHVpCiAJbV9pbXBsLT5pbnNl
cnQoc3RyLm1faW1wbCwgcG9zKTsKIH0KIAotCiBjb25zdCBRQ2hhciAmRE9NU3RyaW5nOjpvcGVy
YXRvciBbXSh1bnNpZ25lZCBpbnQgaSkgY29uc3QKIHsKICAgICBzdGF0aWMgY29uc3QgUUNoYXIg
bnVsbENoYXIgPSAwOwpJbmRleDoga2h0bWwvZG9tL2RvbV9zdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX3N0cmluZy5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXAgLXUgLXIxLjE1IGtodG1sL2RvbS9kb21fc3RyaW5n
LmgKLS0tIGtodG1sL2RvbS9kb21fc3RyaW5nLmgJMjkgQXVnIDIwMDUgMjE6Mjk6MTEgLTAwMDAJ
MS4xNQorKysga2h0bWwvZG9tL2RvbV9zdHJpbmcuaAkyOSBOb3YgMjAwNSAyMjo1MTo0MCAtMDAw
MApAQCAtNjAsNyArNjAsNiBAQCBwdWJsaWM6CiAgICAgRE9NU3RyaW5nKERPTVN0cmluZ0ltcGwg
KmkpOwogICAgIH5ET01TdHJpbmcoKSB7IGlmKG1faW1wbCkgbV9pbXBsLT5kZXJlZigpOyB9CiAK
LQogICAgIC8vIGFzc2lnbiBhbmQgY29weQogICAgIERPTVN0cmluZyhjb25zdCBET01TdHJpbmcg
JnN0cik7CiAgICAgRE9NU3RyaW5nICZvcGVyYXRvciA9KGNvbnN0IERPTVN0cmluZyAmc3RyKTsK
QEAgLTExMywxMCArMTEyLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNOdWxsKCkgIGNvbnN0IHsg
cmV0dXJuIChtX2ltcGwgPT0gMCk7IH0KICAgICBib29sIGlzRW1wdHkoKSAgY29uc3Q7CiAKLSAg
ICAvKioKLSAgICAgKiBAaW50ZXJuYWwgZ2V0IGEgaGFuZGxlIHRvIHRoZSBpbWxlbWVudGF0aW9u
IG9mIHRoZSBET01TdHJpbmcKLSAgICAgKiBVc2UgYXQgb3duIHJpc2shISEKLSAgICAgKi8KICAg
ICBET01TdHJpbmdJbXBsICppbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9CiAKICNpZmRl
ZiBfX09CSkNfXwpJbmRleDoga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19ldmVudHMuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjcxCmRpZmYgLXAgLXUgLXIxLjcxIGtodG1sL2VjbWEva2pzX2V2
ZW50cy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJMjcgTm92IDIwMDUgMDc6NTQ6
NTAgLTAwMDAJMS43MQorKysga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAkyOSBOb3YgMjAwNSAy
Mjo1MTo0NCAtMDAwMApAQCAtNzQsMTEgKzc0LDcgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0
ZW5lcjo6aGFuZGxlRXZlbgogICAgIHJldHVybjsKICNlbmRpZgogCi0jaWYgS0hUTUxfTk9fQ1BM
VVNQTFVTX0RPTQogICBFdmVudEltcGwgKmV2dCA9IGVsZTsKLSNlbHNlCi0gIEV2ZW50SW1wbCAq
ZXZ0ID0gZWxlLmhhbmRsZSgpOwotI2VuZGlmCiAKICAgT2JqZWN0SW1wICpsaXN0ZW5lciA9IGxp
c3RlbmVyT2JqKCk7CiAgIE9iamVjdEltcCAqd2luID0gd2luZG93T2JqKCk7CkluZGV4OiBraHRt
bC9lY21hL2tqc190cmF2ZXJzYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTkKZGlmZiAtcCAtdSAtcjEuMTkga2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmNwcAotLS0g
a2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmNwcAkyNyBOb3YgMjAwNSAwNzo1NDo1MCAtMDAwMAkx
LjE5CisrKyBraHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwCTI5IE5vdiAyMDA1IDIyOjUxOjQ0
IC0wMDAwCkBAIC0zMTYsMTEgKzMxNiw3IEBAIEpTTm9kZUZpbHRlckNvbmRpdGlvbjo6SlNOb2Rl
RmlsdGVyQ29uZGkKIAogc2hvcnQgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEZp
bHRlck5vZGUgZmlsdGVyTm9kZSkgY29uc3QKIHsKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RP
TQotICAgIE5vZGVJbXBsICpub2RlID0gZmlsdGVyTm9kZS5oYW5kbGUoKTsKLSNlbHNlCiAgICAg
Tm9kZUltcGwgKm5vZGUgPSBmaWx0ZXJOb2RlOwotI2VuZGlmCiAgICAgS0hUTUxQYXJ0ICpwYXJ0
ID0gbm9kZS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpOwogICAgIEtKU1Byb3h5ICpwcm94eSA9IEtK
U1Byb3h5Ojpwcm94eShwYXJ0KTsKICAgICBpZiAocHJveHkgJiYgZmlsdGVyLT5pbXBsZW1lbnRz
Q2FsbCgpKSB7CkluZGV4OiBrd3EvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9ET00ubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjEKZGlmZiAtcCAt
dSAtcjEuNjEga3dxL0RPTS5tbQotLS0ga3dxL0RPTS5tbQkyOSBOb3YgMjAwNSAxNzoyODozNCAt
MDAwMAkxLjYxCisrKyBrd3EvRE9NLm1tCTI5IE5vdiAyMDA1IDIyOjUxOjQ2IC0wMDAwCkBAIC0y
MjQxLDExICsyMjQxLDcgQEAgT2JqQ05vZGVGaWx0ZXJDb25kaXRpb246On5PYmpDTm9kZUZpbHRl
cgogCiBzaG9ydCBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShGaWx0ZXJOb2Rl
IG4pIGNvbnN0CiB7Ci0jaWYgS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQogICAgIE5vZGVJbXBsICpu
b2RlID0gbjsKLSNlbHNlCi0gICAgTm9kZUltcGwgKm5vZGUgPSBuLmhhbmRsZSgpOwotI2VuZGlm
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVD
VDsKICAgICByZXR1cm4gW21fZmlsdGVyIGFjY2VwdE5vZGU6W0RPTU5vZGUgX25vZGVXaXRoSW1w
bDpub2RlXV07CkluZGV4OiBrd3EvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rd3EvRE9NSFRNTC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpk
aWZmIC1wIC11IC1yMS4zMSBrd3EvRE9NSFRNTC5tbQotLS0ga3dxL0RPTUhUTUwubW0JMyBPY3Qg
MjAwNSAyMToxMzowMCAtMDAwMAkxLjMxCisrKyBrd3EvRE9NSFRNTC5tbQkyOSBOb3YgMjAwNSAy
Mjo1MTo0OCAtMDAwMApAQCAtNDEwNiwyMiArNDEwNiw4IEBAIHN0YXRpYyBOU1ZpZXcgKnZpZXdG
b3JFbGVtZW50KERPTUVsZW1lbnQKIH0KIAogLSAoTlNBcnJheSAqKV9vcHRpb25MYWJlbHMKLXsg
ICAgCi0gICAgLy8gRklYTUUgNDE5Nzk5NzogVGhpcyBjb2RlIHNob3VsZCB3b3JrLCBhbmQgd2hl
biBpdCBkb2VzIHdlIGNhbiBlbGltaW5hdGUgdGhpcyBtZXRob2QgZW50aXJlbHkKLSAgICAvLyBh
bmQganVzdCBoYXZlIHRoZSBvbmx5IGN1cnJlbnQgY2FsbGVyIChpbiBTYWZhcmkgYXV0b2ZpbGwg
Y29kZSkgZW1iZWQgdGhpcyBjb2RlIGRpcmVjdGx5LgotICAgIC8vIEJ1dCBhdCB0aGUgbW9tZW50
IC1bRE9NSFRNTFNlbGVjdEVsZW1lbnQgb3B0aW9uc10gYWx3YXlzIHJldHVybnMgYW4gZW1wdHkg
Y29sbGVjdGlvbi4KLSNpZiAwCi0gICAgRE9NSFRNTE9wdGlvbnNDb2xsZWN0aW9uICpvcHRpb25z
ID0gW3NlbGYgb3B0aW9uc107Ci0gICAgTlNNdXRhYmxlQXJyYXkgKm9wdGlvbkxhYmVscyA9IFtO
U011dGFibGVBcnJheSBhcnJheV07Ci0gICAgaW50IGl0ZW1Db3VudCA9IFtvcHRpb25zIGxlbmd0
aF07Ci0gICAgaW50IGl0ZW1JbmRleDsKLSAgICBmb3IgKGl0ZW1JbmRleCA9IDA7IGl0ZW1JbmRl
eCA8IGl0ZW1Db3VudDsgKytpdGVtSW5kZXgpIHsKLSAgICAgICAgW29wdGlvbkxhYmVscyBhZGRP
YmplY3Q6WyhET01IVE1MT3B0aW9uRWxlbWVudCAqKVtvcHRpb25zIGl0ZW06aXRlbUluZGV4XSBs
YWJlbF1dOwotICAgIH0KLSAgICByZXR1cm4gb3B0aW9uTGFiZWxzOwotI2VuZGlmCi0gICAgCi0g
ICAgLy8gRHVlIHRvIHRoZSBET00gQVBJIGJyb2tlbm5lc3MsIGZvciBub3cgd2UgaGF2ZSB0byBn
ZXQgdGhlIHRpdGxlcyBmcm9tIHRoZSB2aWV3Cit7CisgICAgLy8gRklYTUUgNDE5Nzk5NzogRHVl
IHRvIHRoZSBET00gQVBJIGJyb2tlbm5lc3MsIGZvciBub3cgd2UgaGF2ZSB0byBnZXQgdGhlIHRp
dGxlcyBmcm9tIHRoZSB2aWV3CiAgICAgcmV0dXJuIFsoTlNQb3BVcEJ1dHRvbiAqKXZpZXdGb3JF
bGVtZW50KHNlbGYpIGl0ZW1UaXRsZXNdOwogfQogCkluZGV4OiBrd3EvS1dRQXJyYXlJbXBsLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FBcnJheUltcGwu
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtcCAtdSAtcjEuMTQga3dxL0tXUUFy
cmF5SW1wbC5tbQotLS0ga3dxL0tXUUFycmF5SW1wbC5tbQkzIE9jdCAyMDA1IDIxOjEzOjAxIC0w
MDAwCTEuMTQKKysrIGt3cS9LV1FBcnJheUltcGwubW0JMjkgTm92IDIwMDUgMjI6NTE6NDkgLTAw
MDAKQEAgLTQ2LDcgKzQ2LDYgQEAgS1dRQXJyYXlJbXBsOjpLV1FBcnJheVByaXZhdGU6On5LV1FB
cnJheQogICAgIGZhc3RGcmVlKGRhdGEpOwogfQogCi0KIEtXUUFycmF5SW1wbDo6S1dRQXJyYXlJ
bXBsKHNpemVfdCBpdGVtU2l6ZSwgc2l6ZV90IG51bUl0ZW1zKSA6IAogICAgIGQobmV3IEtXUUFy
cmF5UHJpdmF0ZShpdGVtU2l6ZSwgbnVtSXRlbXMpKQogewpJbmRleDoga3dxL0tXUUNTdHJpbmcu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUNTdHJpbmcu
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtcCAtdSAtcjEuMTkga3dxL0tXUUNT
dHJpbmcubW0KLS0tIGt3cS9LV1FDU3RyaW5nLm1tCTMgT2N0IDIwMDUgMjE6MTM6MDEgLTAwMDAJ
MS4xOQorKysga3dxL0tXUUNTdHJpbmcubW0JMjkgTm92IDIwMDUgMjI6NTE6NDkgLTAwMDAKQEAg
LTQ1LDcgKzQ1LDYgQEAgUUNTdHJpbmc6OlFDU3RyaW5nKGludCBzaXplKSA6IFFCeXRlQXJyYQog
ICAgIC8vIGVsc2UgbnVsbAogfQogCi0KIFFDU3RyaW5nOjpRQ1N0cmluZyhjb25zdCBjaGFyICpz
dHIpCiB7CiAgICAgc2l6ZV90IGxlbjsKQEAgLTU0LDcgKzUzLDYgQEAgUUNTdHJpbmc6OlFDU3Ry
aW5nKGNvbnN0IGNoYXIgKnN0cikKICAgICAvLyBlbHNlIG51bGwKIH0KIAotCiBRQ1N0cmluZzo6
UUNTdHJpbmcoY29uc3QgY2hhciAqc3RyLCB1aW50IG1heCkKIHsKICAgICBpZiggc3RyICYmIG1h
eCApCkBAIC03Niw4ICs3NCw5IEBAIFFDU3RyaW5nOjpRQ1N0cmluZyhjb25zdCBjaGFyICpzdHIs
IHVpbnQKIH0KIAogYm9vbCBRQ1N0cmluZzo6aXNFbXB0eSgpIGNvbnN0Ci17IHJldHVybiBsZW5n
dGgoKT09MDsgfQotCit7CisgICAgcmV0dXJuIChsZW5ndGgoKSA9PSAwKTsKK30KIAogdWludCBR
Q1N0cmluZzo6bGVuZ3RoKCkgY29uc3QKIHsKQEAgLTg1LDcgKzg0LDYgQEAgdWludCBRQ1N0cmlu
Zzo6bGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gZCA/IHN0cmxlbihkKSA6IDA7CiB9CiAKLQog
Ym9vbCBRQ1N0cmluZzo6cmVzaXplKHVpbnQgbGVuKQogewogICAgIGJvb2wgc3VjY2VzcyA9IFFC
eXRlQXJyYXk6OnJlc2l6ZShsZW4pOwpAQCAtOTUsMTMgKzkzLDExIEBAIGJvb2wgUUNTdHJpbmc6
OnJlc2l6ZSh1aW50IGxlbikKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAotCiBib29sIFFDU3Ry
aW5nOjp0cnVuY2F0ZSh1aW50IHBvcykKIHsKICAgICByZXR1cm4gcmVzaXplKHBvcysxKTsKIH0K
IAotCiBRQ1N0cmluZyBRQ1N0cmluZzo6bG93ZXIoKSBjb25zdAogewogICAgIC8vIGNvbnZlcnQK
QEAgLTExOSw3ICsxMTUsNiBAQCBRQ1N0cmluZyBRQ1N0cmluZzo6bG93ZXIoKSBjb25zdAogICAg
IHJldHVybiB0bXA7CiB9CiAKLQogUUNTdHJpbmcgUUNTdHJpbmc6OnVwcGVyKCkgY29uc3QKIHsK
ICAgICBRQ1N0cmluZyB0bXAgPSAqdGhpczsJLy8gY29weQpAQCAtMTM2LDE0ICsxMzEsMTUgQEAg
UUNTdHJpbmcgUUNTdHJpbmc6OnVwcGVyKCkgY29uc3QKICAgICByZXR1cm4gdG1wOwogfQogCi0K
IGlubGluZSBRQ1N0cmluZyBRQ1N0cmluZzo6bGVmdCh1aW50IGxlbikgY29uc3QKLXsgcmV0dXJu
IG1pZCgwLCBsZW4pOyB9Ci0KK3sKKyAgICByZXR1cm4gbWlkKDAsIGxlbik7Cit9CiAKIGlubGlu
ZSBRQ1N0cmluZyBRQ1N0cmluZzo6cmlnaHQodWludCBsZW4pIGNvbnN0Ci17IHJldHVybiBtaWQo
bGVuZ3RoKCkgLSBsZW4sIGxlbik7IH0KLQoreworICAgIHJldHVybiBtaWQobGVuZ3RoKCkgLSBs
ZW4sIGxlbik7Cit9CiAKIFFDU3RyaW5nIFFDU3RyaW5nOjptaWQodWludCBpbmRleCwgdWludCBs
ZW4pIGNvbnN0CiB7CkluZGV4OiBrd3EvS1dRQ29sb3IubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUNvbG9yLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQ2CmRpZmYgLXAgLXUgLXIxLjQ2IGt3cS9LV1FDb2xvci5tbQotLS0ga3dxL0tXUUNvbG9yLm1t
CTMgT2N0IDIwMDUgMjE6MTM6MDEgLTAwMDAJMS40NgorKysga3dxL0tXUUNvbG9yLm1tCTI5IE5v
diAyMDA1IDIyOjUxOjQ5IC0wMDAwCkBAIC0yMjUsNyArMjI1LDYgQEAgdm9pZCBRQ29sb3I6OnNl
dEhzdihpbnQgaCwgaW50IHMsIGludCB2KQogICAgIH0KIH0KIAotCiBRQ29sb3IgUUNvbG9yOjps
aWdodChpbnQgZmFjdG9yKSBjb25zdAogewogICAgIGlmIChmYWN0b3IgPD0gMCkgewpJbmRleDog
a3dxL0tXUURhdGVUaW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0tXUURhdGVUaW1lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQKZGlmZiAtcCAtdSAt
cjEuMjQga3dxL0tXUURhdGVUaW1lLmgKLS0tIGt3cS9LV1FEYXRlVGltZS5oCTUgSnVsIDIwMDUg
MDg6MDQ6NTAgLTAwMDAJMS4yNAorKysga3dxL0tXUURhdGVUaW1lLmgJMjkgTm92IDIwMDUgMjI6
NTE6NDkgLTAwMDAKQEAgLTk3LDUgKzk3LDQgQEAgcHVibGljOgogICAgIGJvb2wgdWlFdmVudFBl
bmRpbmcoKSBjb25zdDsKIH07CiAKLQogI2VuZGlmCkluZGV4OiBrd3EvS1dRS0NvbmZpZ0Jhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0NvbmZpZ0Jh
c2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC1wIC11IC1yMS4xOSBrd3EvS1dR
S0NvbmZpZ0Jhc2UuaAotLS0ga3dxL0tXUUtDb25maWdCYXNlLmgJMjMgTWF5IDIwMDQgMjI6NDU6
MjggLTAwMDAJMS4xOQorKysga3dxL0tXUUtDb25maWdCYXNlLmgJMjkgTm92IDIwMDUgMjI6NTE6
NDkgLTAwMDAKQEAgLTI3LDkgKzI3LDcgQEAKICNkZWZpbmUgS0NPTkZJR19IXwogCiAjaW5jbHVk
ZSAiS1dRU3RyaW5nLmgiCi0jaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUUtIVE1MU2V0
dGluZ3MuaCIKLSNlbmRpZgogCiBjbGFzcyBRQ29sb3I7CiBjbGFzcyBRU3RyaW5nTGlzdDsKSW5k
ZXg6IGt3cS9LV1FLSFRNTFBhZ2VDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhZ2VDYWNoZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjUKZGlmZiAtcCAtdSAtcjEuNSBrd3EvS1dRS0hUTUxQYWdlQ2FjaGUuaAotLS0ga3dxL0tXUUtI
VE1MUGFnZUNhY2hlLmgJMjIgSmFuIDIwMDMgMDA6MTI6MzUgLTAwMDAJMS41CisrKyBrd3EvS1dR
S0hUTUxQYWdlQ2FjaGUuaAkyOSBOb3YgMjAwNSAyMjo1MTo0OSAtMDAwMApAQCAtMzAsMTIgKzMw
LDEwIEBACiAKIGNsYXNzIFFPYmplY3Q7CiAKLSNpZmRlZiBBUFBMRV9DSEFOR0VTCiAvKgogICAg
IFRoaXMgY2xhc3MgaXMgbm90IHVzZWQgYnkgV2ViQ29yZS4gIFRoZSBXZWJDb3JlL1dlYktpdCBw
YWdlIGNhY2hlIGlzCiAgICAgYSBjYWNoZSBvZiBhIGZ1bGx5IGNvbnN0cnVjdGVkIERPTSBhbmQg
YXNzb2NpYXRlZCByZW5kZXIgb2JqZWN0cy4KICovCi0jZW5kaWYKIGNsYXNzIEtIVE1MUGFnZUNh
Y2hlCiB7CiBwdWJsaWM6CkluZGV4OiBrd3EvS1dRS0hUTUxQYXJ0Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0sdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNjkwCmRpZmYgLXAgLXUgLXIxLjY5MCBrd3EvS1dRS0hUTUxQYXJ0Lm1tCi0t
LSBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTI3IE5vdiAyMDA1IDA3OjU0OjUyIC0wMDAwCTEuNjkwCisr
KyBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTI5IE5vdiAyMDA1IDIyOjUxOjUzIC0wMDAwCkBAIC04Miw5
ICs4Miw3IEBACiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9ydW50aW1lX3Jvb3QuaD4KICNpbXBv
cnQgPEphdmFTY3JpcHRDb3JlL1dlYlNjcmlwdE9iamVjdFByaXZhdGUuaD4KIAotI2lmIEFQUExF
X0NIQU5HRVMKICNpbXBvcnQgIktXUUFjY09iamVjdENhY2hlLmgiCi0jZW5kaWYKIAogI3VuZGVm
IF9LV1FfVElNSU5HCiAKQEAgLTE2MiwxMyArMTYwLDYgQEAgdm9pZCBLSFRNTFBhcnQ6OmNvbXBs
ZXRlZChib29sIGFyZykKICAgICBLV1EodGhpcyktPl9jb21wbGV0ZWQuY2FsbChhcmcpOwogfQog
Ci0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotdm9pZCBLSFRNTFBhcnQ6Om5vZGVBY3Rp
dmF0ZWQoY29uc3QgTm9kZSAmKQotewotfQotCi0jZW5kaWYKIAogYm9vbCBLSFRNTFBhcnQ6Om9w
ZW5VUkwoY29uc3QgS1VSTCAmVVJMKQogewpAQCAtMTE2NSwxMiArMTE1NiwxMCBAQCB2b2lkIEtX
UUtIVE1MUGFydDo6cGFpbnQoUVBhaW50ZXIgKnAsIGNvCiAgICAgICAgIFJlbmRlck9iamVjdCAq
ZWx0UmVuZGVyZXIgPSBfZWxlbWVudFRvRHJhdy5ub3ROdWxsKCkgPyBfZWxlbWVudFRvRHJhdy0+
cmVuZGVyZXIoKSA6IDA7CiAgICAgICAgIHJlbmRlcmVyKCktPmxheWVyKCktPnBhaW50KHAsIHJl
Y3QsIF9kcmF3U2VsZWN0aW9uT25seSwgZWx0UmVuZGVyZXIpOwogCi0jaWYgQVBQTEVfQ0hBTkdF
UwogICAgICAgICAvLyBSZWdpb25zIG1heSBoYXZlIGNoYW5nZWQgYXMgYSByZXN1bHQgb2YgdGhl
IHZpc2liaWxpdHkvei1pbmRleCBvZiBlbGVtZW50IGNoYW5naW5nLgogICAgICAgICBpZiAocmVu
ZGVyZXIoKS0+ZG9jdW1lbnQoKS0+ZGFzaGJvYXJkUmVnaW9uc0RpcnR5KCkpewogICAgICAgICAg
ICAgcmVuZGVyZXIoKS0+Y2FudmFzKCktPnZpZXcoKS0+dXBkYXRlRGFzaGJvYXJkUmVnaW9ucygp
OwogICAgICAgICB9Ci0jZW5kaWYKICAgICB9IGVsc2UgewogICAgICAgICBFUlJPUigiY2FsbGVk
IEtXUUtIVE1MUGFydDo6cGFpbnQgd2l0aCBuaWwgcmVuZGVyZXIiKTsKICAgICB9CkBAIC00MTcw
LDExICs0MTU5LDkgQEAgYm9vbCBLV1FLSFRNTFBhcnQ6OnNob3VsZENoYW5nZVNlbGVjdGlvbgog
CiB2b2lkIEtXUUtIVE1MUGFydDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkKIHsKLSNpZiBB
UFBMRV9DSEFOR0VTCiAgICAgaWYgKEtXUUFjY09iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5h
YmxlZCgpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmdldEFjY09iamVjdENh
Y2hlKCktPnBvc3ROb3RpZmljYXRpb25Ub1RvcFdlYkFyZWEocmVuZGVyZXIoKSwgIkFYVmFsdWVD
aGFuZ2VkIik7CiAgICAgfQotI2VuZGlmCiAgICAgW19icmlkZ2UgcmVzcG9uZFRvQ2hhbmdlZENv
bnRlbnRzXTsKIH0KIApJbmRleDoga3dxL0tXUUtQYXJ0c0Jyb3dzZXJJbnRlcmZhY2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtQYXJ0c0Jyb3dzZXJJ
bnRlcmZhY2UubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtcCAtdSAtcjEuMTUg
a3dxL0tXUUtQYXJ0c0Jyb3dzZXJJbnRlcmZhY2UubW0KLS0tIGt3cS9LV1FLUGFydHNCcm93c2Vy
SW50ZXJmYWNlLm1tCTMgT2N0IDIwMDUgMjE6MTM6MDUgLTAwMDAJMS4xNQorKysga3dxL0tXUUtQ
YXJ0c0Jyb3dzZXJJbnRlcmZhY2UubW0JMjkgTm92IDIwMDUgMjI6NTE6NTMgLTAwMDAKQEAgLTU2
LDUgKzU2LDMgQEAgdm9pZCBCcm93c2VySW50ZXJmYWNlOjpjYWxsTWV0aG9kKGNvbnN0IAogCiB9
IC8vIG5hbWVzcGFjZSBLUGFydHMKIAotCi0KSW5kZXg6IGt3cS9LV1FLVVJMLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLVVJMLm1tLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjk2CmRpZmYgLXAgLXUgLXIxLjk2IGt3cS9LV1FLVVJMLm1tCi0tLSBrd3Ev
S1dRS1VSTC5tbQkyOSBOb3YgMjAwNSAxNzo1Mjo1NyAtMDAwMAkxLjk2CisrKyBrd3EvS1dRS1VS
TC5tbQkyOSBOb3YgMjAwNSAyMjo1MTo1NCAtMDAwMApAQCAtNzI4LDE2ICs3MjgsNiBAQCB2b2lk
IEtVUkw6OnNldFVzZXIoY29uc3QgUVN0cmluZyAmdXNlcikKICAgICAgICAgaWYgKCF1c2VyLmlz
RW1wdHkoKSkgewogICAgICAgICAgICAgLy8gVW50ZXN0ZWQgY29kZSwgYnV0IHRoaXMgaXMgbmV2
ZXIgdXNlZC4KICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2lmIDAKLSAgICAg
ICAgICAgIHUgPSB1c2VyOwotICAgICAgICAgICAgaWYgKHVzZXJTdGFydFBvcyA9PSBzY2hlbWVF
bmRQb3MgKyAxKSB7Ci0gICAgICAgICAgICAgICAgdSA9ICIvLyIgKyB1OwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgLy8gQWRkICdAJyBpZiB3ZSBkaWRuJ3QgaGF2ZSBvbmUgYmVmb3JlLgot
ICAgICAgICAgICAgaWYgKGVuZCA9PSBob3N0RW5kUG9zIHx8IChlbmQgPT0gcGFzc3dvcmRFbmRQ
b3MgJiYgdXJsU3RyaW5nW2VuZF0gIT0gJ0AnKSkgewotICAgICAgICAgICAgICAgIHUgKz0gJ0An
OwotICAgICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBSZW1vdmUgJ0AnIGlmIHdlIG5vdyBoYXZlIG5laXRoZXIgdXNlciBub3IgcGFzc3dvcmQuCiAg
ICAgICAgICAgICBpZiAodXNlckVuZFBvcyA9PSBwYXNzd29yZEVuZFBvcyAmJiBlbmQgIT0gaG9z
dEVuZFBvcyAmJiB1cmxTdHJpbmdbZW5kXSA9PSAnQCcpIHsKQEAgLTc1NywxNiArNzQ3LDYgQEAg
dm9pZCBLVVJMOjpzZXRQYXNzKGNvbnN0IFFTdHJpbmcgJnBhc3N3bwogICAgICAgICBpZiAoIXBh
c3N3b3JkLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gVW50ZXN0ZWQgY29kZSwgYnV0IHRo
aXMgaXMgbmV2ZXIgdXNlZC4KICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2lm
IDAKLSAgICAgICAgICAgIHAgPSAnOicgKyBwYXNzd29yZCArICdAJzsKLSAgICAgICAgICAgIGlm
ICh1c2VyRW5kUG9zID09IHNjaGVtZUVuZFBvcyArIDEpIHsKLSAgICAgICAgICAgICAgICBwID0g
Ii8vIiArIHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBFYXQgdGhlIGV4aXN0aW5n
ICdAJyBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gYWRkIG91ciBvd24uCi0gICAgICAgICAgICBpZiAo
ZW5kICE9IGhvc3RFbmRQb3MgJiYgdXJsU3RyaW5nW2VuZF0gPT0gJ0AnKSB7Ci0gICAgICAgICAg
ICAgICAgZW5kICs9IDE7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIC8vIFJlbW92ZSAnQCcgaWYgd2Ugbm93IGhhdmUgbmVpdGhlciB1c2VyIG5v
ciBwYXNzd29yZC4KICAgICAgICAgICAgIGlmICh1c2VyU3RhcnRQb3MgPT0gdXNlckVuZFBvcyAm
JiBlbmQgIT0gaG9zdEVuZFBvcyAmJiB1cmxTdHJpbmdbZW5kXSA9PSAnQCcpIHsKQEAgLTg1OSw3
ICs4MzksNiBAQCBRU3RyaW5nIEtVUkw6OmNhbm9uaWNhbFVSTCgpIGNvbnN0CiAjZW5kaWYKIH0K
IAotCiBRU3RyaW5nIEtVUkw6OnByZXR0eVVSTCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzVmFs
aWQpIHsKQEAgLTEzOTEsNyArMTM3MCw2IEBAIHZvaWQgS1VSTDo6cGFyc2UoY29uc3QgY2hhciAq
dXJsLCBjb25zdCAKICAgICB9CiAgICAgcGF0aEVuZFBvcyA9IHAgLSBidWZmZXI7CiAgICAgCi0g
ICAgCiAgICAgLy8gYWRkIHF1ZXJ5LCBlc2NhcGluZyBiYWQgY2hhcmFjdGVycwogICAgIGFwcGVu
ZEVzY2FwaW5nQmFkQ2hhcnMocCwgdXJsICsgcXVlcnlTdGFydCwgcXVlcnlFbmQgLSBxdWVyeVN0
YXJ0KTsKICAgICBxdWVyeUVuZFBvcyA9IHAgLSBidWZmZXI7CkluZGV4OiBrd3EvS1dRTGluZUVk
aXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUxpbmVF
ZGl0Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc1CmRpZmYgLXAgLXUgLXIxLjc1IGt3cS9L
V1FMaW5lRWRpdC5tbQotLS0ga3dxL0tXUUxpbmVFZGl0Lm1tCTIxIE9jdCAyMDA1IDIxOjI3OjUx
IC0wMDAwCTEuNzUKKysrIGt3cS9LV1FMaW5lRWRpdC5tbQkyOSBOb3YgMjAwNSAyMjo1MTo1NSAt
MDAwMApAQCAtMTg4LDcgKzE4OCw2IEBAIGludCBRTGluZUVkaXQ6Om1heExlbmd0aCgpIGNvbnN0
CiAgICAgcmV0dXJuIFttX2NvbnRyb2xsZXIgbWF4aW11bUxlbmd0aF07CiB9CiAKLQogdm9pZCBR
TGluZUVkaXQ6OnNlbGVjdEFsbCgpCiB7CiAgICAgaWYgKCFoYXNGb2N1cygpKSB7CkluZGV4OiBr
d3EvS1dRTGlzdEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0tXUUxpc3RJbXBsLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXAgLXUg
LXIxLjIzIGt3cS9LV1FMaXN0SW1wbC5tbQotLS0ga3dxL0tXUUxpc3RJbXBsLm1tCTMgT2N0IDIw
MDUgMjE6MTM6MDYgLTAwMDAJMS4yMworKysga3dxL0tXUUxpc3RJbXBsLm1tCTI5IE5vdiAyMDA1
IDIyOjUxOjU1IC0wMDAwCkBAIC02Nyw3ICs2Nyw2IEBAIHN0YXRpYyBLV1FMaXN0Tm9kZSAqY29w
eUxpc3QoS1dRTGlzdE5vZGUKICAgICByZXR1cm4gY29weUhlYWQ7CiB9CiAKLQogS1dRTGlzdElt
cGw6OktXUUxpc3RJbXBsKHZvaWQgKCpkZWxldGVGdW5jKSh2b2lkICopKSA6CiAgICAgaGVhZChO
VUxMKSwKICAgICB0YWlsKE5VTEwpLApAQCAtNTEzLDcgKzUxMiw2IEBAIHZvaWQgS1dRTGlzdElt
cGw6OnN3YXAoS1dRTGlzdEltcGwgJm90aGUKICAgICBzd2FwKGRlbGV0ZUl0ZW0sIG90aGVyLmRl
bGV0ZUl0ZW0pOwogfQogCi0KIEtXUUxpc3RJdGVyYXRvckltcGw6OktXUUxpc3RJdGVyYXRvcklt
cGwoKSA6CiAgICAgbGlzdChOVUxMKSwKICAgICBub2RlKE5VTEwpCkluZGV4OiBrd3EvS1dRTWFw
SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRTWFw
SW1wbC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC1wIC11IC1yMS4xMiBrd3Ev
S1dRTWFwSW1wbC5tbQotLS0ga3dxL0tXUU1hcEltcGwubW0JMyBPY3QgMjAwNSAyMToxMzowNiAt
MDAwMAkxLjEyCisrKyBrd3EvS1dRTWFwSW1wbC5tbQkyOSBOb3YgMjAwNSAyMjo1MTo1NSAtMDAw
MApAQCAtMTAzLDcgKzEwMyw2IEBAIGNvbnN0IEtXUU1hcE5vZGVJbXBsICpLV1FNYXBOb2RlSW1w
bDo6c3UKICAgICByZXR1cm4gc3VjYzsKIH0KIAotCiBLV1FNYXBJdGVyYXRvckltcGw6OktXUU1h
cEl0ZXJhdG9ySW1wbCgpIDogbm9kZShOVUxMKQogewogfQpAQCAtNTQyLDcgKzU0MSw2IEBAIHZv
aWQgS1dRTWFwSW1wbDo6cmVtb3ZlRXF1YWxJbnRlcm5hbChLV1EKIAlzd2FwTm9kZXMobm9kZSxu
b2RlVG9SZW1vdmUpOwogICAgIH0KIAotCiAgICAgLy8gZmluZCByZXBsYWNlbWVudCBub2RlCiAg
ICAgS1dRTWFwTm9kZUltcGwgKnJlbW92YWxSZXBsYWNlbWVudDsKIApJbmRleDoga3dxL0tXUVBh
aW50ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVBh
aW50ZXIubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQ4CmRpZmYgLXAgLXUgLXIxLjE0OCBr
d3EvS1dRUGFpbnRlci5tbQotLS0ga3dxL0tXUVBhaW50ZXIubW0JMjcgTm92IDIwMDUgMTE6MDI6
MzUgLTAwMDAJMS4xNDgKKysrIGt3cS9LV1FQYWludGVyLm1tCTI5IE5vdiAyMDA1IDIyOjUxOjU2
IC0wMDAwCkBAIC0zNTEsNyArMzUxLDYgQEAgdm9pZCBRUGFpbnRlcjo6ZHJhd0xpbmUoaW50IHgx
LCBpbnQgeTEsIAogICAgIFtncmFwaGljc0NvbnRleHQgc2V0U2hvdWxkQW50aWFsaWFzOiBmbGFn
XTsKIH0KIAotCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxl
IGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KIHZvaWQgUVBhaW50ZXI6OmRyYXdFbGxpcHNlKGludCB4
LCBpbnQgeSwgaW50IHcsIGludCBoKQogewpAQCAtMzkzLDcgKzM5Miw2IEBAIHZvaWQgUVBhaW50
ZXI6OmRyYXdFbGxpcHNlKGludCB4LCBpbnQgeSwKICAgICB9CiB9CiAKLQogdm9pZCBRUGFpbnRl
cjo6ZHJhd0FyYyAoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGludCBhLCBpbnQgYWxlbikK
IHsgCiAgICAgLy8gT25seSBzdXBwb3J0cyBhcmMgb24gY2lyY2xlcy4gIFRoYXQncyBhbGwga2h0
bWwgbmVlZHMuCkluZGV4OiBrd3EvS1dRUGVuLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9LV1FQZW4ubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlm
ZiAtcCAtdSAtcjEuMTAga3dxL0tXUVBlbi5tbQotLS0ga3dxL0tXUVBlbi5tbQkzIE9jdCAyMDA1
IDIxOjEzOjA3IC0wMDAwCTEuMTAKKysrIGt3cS9LV1FQZW4ubW0JMjkgTm92IDIwMDUgMjI6NTE6
NTYgLTAwMDAKQEAgLTcyLDQgKzcyLDMgQEAgYm9vbCBRUGVuOjpvcGVyYXRvciE9KGNvbnN0IFFQ
ZW4gJmNvbXBhcgogICAgIHJldHVybiAhKCp0aGlzID09IGNvbXBhcmVUbyk7CiB9CiAKLQpJbmRl
eDoga3dxL0tXUVBvaW50QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9rd3EvS1dRUG9pbnRBcnJheS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI5CmRpZmYg
LXAgLXUgLXIxLjI5IGt3cS9LV1FQb2ludEFycmF5LmgKLS0tIGt3cS9LV1FQb2ludEFycmF5LmgJ
MTIgT2N0IDIwMDUgMDA6NDQ6NTMgLTAwMDAJMS4yOQorKysga3dxL0tXUVBvaW50QXJyYXkuaAky
OSBOb3YgMjAwNSAyMjo1MTo1NiAtMDAwMApAQCAtOTMsMTIgKzkzLDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgcG9pbnQodWludCwgaW50ICosIGludCAqKTsKICAgICB2b2lkIHNldFBvaW50
KHVpbnQsIGludCwgaW50KTsKLSNpZiAwCi0gICAgLy8gRklYTUU6IFdvcmthcm91bmQgZm9yIFJh
ZGFyIDI5MjEwNjEuCi0gICAgYm9vbCBzZXRQb2ludHMoaW50LCBpbnQsIGludCwgLi4uKTsKLSNl
bHNlCiAgICAgYm9vbCBzZXRQb2ludHMoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50
LCBpbnQsIGludCk7Ci0jZW5kaWYKICAgICBib29sIHNldFBvaW50cyggaW50IG5Qb2ludHMsIGNv
bnN0IGludCAqcG9pbnRzICk7CiAgICAgCiAjaWZkZWYgX0tXUV9JT1NUUkVBTV8KSW5kZXg6IGt3
cS9LV1FQb2ludEFycmF5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2t3cS9LV1FQb2ludEFycmF5Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXAg
LXUgLXIxLjExIGt3cS9LV1FQb2ludEFycmF5Lm1tCi0tLSBrd3EvS1dRUG9pbnRBcnJheS5tbQkz
IE9jdCAyMDA1IDIxOjEzOjA3IC0wMDAwCTEuMTEKKysrIGt3cS9LV1FQb2ludEFycmF5Lm1tCTI5
IE5vdiAyMDA1IDIyOjUxOjU2IC0wMDAwCkBAIC04NSw3ICs4NSw2IEBAIHZvaWQgUVBvaW50QXJy
YXk6OnNldFBvaW50KCB1aW50IGluZGV4LCAKICAgICBRTWVtQXJyYXk8UVBvaW50Pjo6YXQoIGlu
ZGV4ICkgPSBRUG9pbnQoIHgsIHkgKTsKIH0KIAotCiBib29sIFFQb2ludEFycmF5OjpzZXRQb2lu
dHMoIGludCBuUG9pbnRzLCBjb25zdCBpbnQgKnBvaW50cyApCiB7CiAgICAgaWYgKCAhcmVzaXpl
KG5Qb2ludHMpICkKQEAgLTEwMCwyNyArOTksNiBAQCBib29sIFFQb2ludEFycmF5OjpzZXRQb2lu
dHMoIGludCBuUG9pbnRzCiB9CiAKIC8vIEZJWE1FOiBXb3JrYXJvdW5kIGZvciBSYWRhciAyOTIx
MDYxCi0jaWYgMAotCi1ib29sIFFQb2ludEFycmF5OjpzZXRQb2ludHMoIGludCBuUG9pbnRzLCBp
bnQgZmlyc3R4LCBpbnQgZmlyc3R5LCAuLi4gKQotewotICAgIHZhX2xpc3QgYXA7Ci0gICAgaWYg
KCAhcmVzaXplKG5Qb2ludHMpICkKLQlyZXR1cm4gRkFMU0U7Ci0gICAgc2V0UG9pbnQoIDAsIGZp
cnN0eCwgZmlyc3R5ICk7CQkvLyBzZXQgZmlyc3QgcG9pbnQKLSAgICBpbnQgaSA9IDEsIHgsIHk7
Ci0gICAgblBvaW50cy0tOwotICAgIHZhX3N0YXJ0KCBhcCwgZmlyc3R5ICk7Ci0gICAgd2hpbGUg
KCBuUG9pbnRzLS0gKSB7Ci0JeCA9IHZhX2FyZyggYXAsIGludCApOwotCXkgPSB2YV9hcmcoIGFw
LCBpbnQgKTsKLQlzZXRQb2ludCggaSsrLCB4LCB5ICk7Ci0gICAgfQotICAgIHZhX2VuZCggYXAg
KTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotI2Vsc2UKIAogYm9vbCBRUG9pbnRBcnJheTo6c2V0
UG9pbnRzKCBpbnQgblBvaW50cywgaW50IHgwLCBpbnQgeTAsIGludCB4MSwgaW50IHkxLCBpbnQg
eDIsIGludCB5MiwgaW50IHgzLCBpbnQgeTMpCiB7CkBAIC0xMzMsNCArMTExLDMgQEAgYm9vbCBR
UG9pbnRBcnJheTo6c2V0UG9pbnRzKCBpbnQgblBvaW50cwogICAgIHJldHVybiBUUlVFOwogfQog
Ci0jZW5kaWYKSW5kZXg6IGt3cS9LV1FQdHJEaWN0SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRUHRyRGljdEltcGwubW0sdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuOApkaWZmIC1wIC11IC1yMS44IGt3cS9LV1FQdHJEaWN0SW1wbC5tbQotLS0ga3dx
L0tXUVB0ckRpY3RJbXBsLm1tCTMgT2N0IDIwMDUgMjE6MTM6MDcgLTAwMDAJMS44CisrKyBrd3Ev
S1dRUHRyRGljdEltcGwubW0JMjkgTm92IDIwMDUgMjI6NTE6NTcgLTAwMDAKQEAgLTkzLDcgKzkz
LDYgQEAgS1dRUHRyRGljdEltcGw6OktXUVB0ckRpY3RJbXBsKGNvbnN0IEtXUQogewogfQogCi0K
IEtXUVB0ckRpY3RJbXBsOjp+S1dRUHRyRGljdEltcGwoKQogewogICAgIGRlbGV0ZSBkOwpAQCAt
MTczLDcgKzE3Miw2IEBAIEtXUVB0ckRpY3RJbXBsICZLV1FQdHJEaWN0SW1wbDo6YXNzaWduKGMK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLQogdm9pZCAqS1dRUHRyRGljdEltcGw6OnRha2Uodm9p
ZCAqa2V5KQogewogICAgIHZvaWQgKnZhbHVlID0gZmluZChrZXkpOwpAQCAtMTgxLDEwICsxNzks
NiBAQCB2b2lkICpLV1FQdHJEaWN0SW1wbDo6dGFrZSh2b2lkICprZXkpCiAgICAgcmV0dXJuIHZh
bHVlOwogfQogCi0KLQotCi0KIEtXUVB0ckRpY3RJdGVyYXRvclByaXZhdGU6OktXUVB0ckRpY3RJ
dGVyYXRvclByaXZhdGUoS1dRUHRyRGljdFByaXZhdGUgKmQpIDoKICAgICBjb3VudChDRkRpY3Rp
b25hcnlHZXRDb3VudChkLT5jZmRpY3QpKSwKICAgICBwb3MoMCksCkluZGV4OiBrd3EvS1dRUmVn
RXhwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FSZWdF
eHAubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtcCAtdSAtcjEuMTUga3dxL0tX
UVJlZ0V4cC5tbQotLS0ga3dxL0tXUVJlZ0V4cC5tbQkzIE9jdCAyMDA1IDIxOjEzOjA4IC0wMDAw
CTEuMTUKKysrIGt3cS9LV1FSZWdFeHAubW0JMjkgTm92IDIwMDUgMjI6NTE6NTcgLTAwMDAKQEAg
LTExNSw3ICsxMTUsNiBAQCBRUmVnRXhwOjpLV1FSZWdFeHBQcml2YXRlOjp+S1dRUmVnRXhwUHJp
CiAgICAgcGNyZV9mcmVlKHJlZ2V4KTsKIH0KIAotCiBRUmVnRXhwOjpRUmVnRXhwKCkgOiBkKG5l
dyBRUmVnRXhwOjpLV1FSZWdFeHBQcml2YXRlKCkpCiB7CiB9CkBAIC0xMjgsNyArMTI3LDYgQEAg
UVJlZ0V4cDo6UVJlZ0V4cChjb25zdCBjaGFyICpjcGF0dGVybikgOgogewogfQogCi0KIFFSZWdF
eHA6OlFSZWdFeHAoY29uc3QgUVJlZ0V4cCAmcmUpIDogZCAocmUuZCkKIHsKIH0KSW5kZXg6IGt3
cS9LV1FTbGlkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3Ev
S1dRU2xpZGVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC1wIC11IC1yMS40IGt3
cS9LV1FTbGlkZXIuaAotLS0ga3dxL0tXUVNsaWRlci5oCTEgRmViIDIwMDUgMDE6MjA6NTYgLTAw
MDAJMS40CisrKyBrd3EvS1dRU2xpZGVyLmgJMjkgTm92IDIwMDUgMjI6NTE6NTcgLTAwMDAKQEAg
LTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgRm9jdXNQb2xpY3kgZm9j
dXNQb2xpY3koKSBjb25zdDsKIAotCiBwcml2YXRlOgogICAgIEtXUVNpZ25hbCBtX3NsaWRlclZh
bHVlQ2hhbmdlZDsKICAgICBLV1FTaWduYWwgbV9jbGlja2VkOwpJbmRleDoga3dxL0tXUVN0cmlu
Zy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRU3RyaW5n
Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0MwpkaWZmIC1wIC11IC1yMS4xNDMga3dxL0tX
UVN0cmluZy5tbQotLS0ga3dxL0tXUVN0cmluZy5tbQkxOSBPY3QgMjAwNSAwMDowMzo0NiAtMDAw
MAkxLjE0MworKysga3dxL0tXUVN0cmluZy5tbQkyOSBOb3YgMjAwNSAyMjo1MTo1OSAtMDAwMApA
QCAtMjgwLDcgKzI4MCw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHVjc3RyY21wKCBjb25zdCBRU3Ry
aW4KICAgICByZXR1cm4gYS0+dW5pY29kZSgpIC0gYi0+dW5pY29kZSgpOwogfQogCi0KIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFFDaGFyICphLCBjb25zdCBjaGFyICpiLCBpbnQgbCkKIHsKICAg
ICBBU1NFUlQobCA+PSAwKTsKQEAgLTQ1Miw3ICs0NTEsNiBAQCB2b2lkIEtXUVN0cmluZ0RhdGE6
OmluaXRpYWxpemUoY29uc3QgUUNoCiAgICAgfQogfQogCi0KIC8vIENvcHkgZGF0YQogS1dRU3Ry
aW5nRGF0YTo6S1dRU3RyaW5nRGF0YShjb25zdCBjaGFyICphLCB1aW50IGwpCiB7CkBAIC00NjIs
NyArNDYwLDYgQEAgS1dRU3RyaW5nRGF0YTo6S1dRU3RyaW5nRGF0YShjb25zdCBjaGFyIAogICAg
IGluaXRpYWxpemUoYSwgbCk7CiB9CiAKLQogLy8gQ29weSBkYXRhCiB2b2lkIEtXUVN0cmluZ0Rh
dGE6OmluaXRpYWxpemUoY29uc3QgY2hhciAqYSwgdWludCBsKQogewpAQCAtNTg3LDcgKzU4NCw2
IEBAIHZvaWQgS1dRU3RyaW5nRGF0YTo6aW5jcmVhc2VBc2NpaVNpemUodWkKICAgICBfaXNVbmlj
b2RlVmFsaWQgPSAwOwogfQogCi0KIHZvaWQgS1dRU3RyaW5nRGF0YTo6aW5jcmVhc2VVbmljb2Rl
U2l6ZSh1aW50IHNpemUpCiB7CiAgICAgQVNTRVJUKHNpemUgPiBfbGVuZ3RoKTsKQEAgLTYxMyw3
ICs2MDksNiBAQCB2b2lkIEtXUVN0cmluZ0RhdGE6OmluY3JlYXNlVW5pY29kZVNpemUoCiAgICAg
X2lzQXNjaWlWYWxpZCA9IDA7CiB9CiAKLQogY2hhciAqS1dRU3RyaW5nRGF0YTo6bWFrZUFzY2lp
KCkKIHsKICAgICBBU1NFUlQodGhpcyAhPSBRU3RyaW5nOjpzaGFyZWRfbnVsbCk7CkBAIC02NjAs
NyArNjU1LDYgQEAgY2hhciAqS1dRU3RyaW5nRGF0YTo6bWFrZUFzY2lpKCkKICAgICByZXR1cm4g
X2FzY2lpOwogfQogCi0KIFFDaGFyICpLV1FTdHJpbmdEYXRhOjptYWtlVW5pY29kZSgpCiB7CiAg
ICAgQVNTRVJUKHRoaXMgIT0gUVN0cmluZzo6c2hhcmVkX251bGwpOwpAQCAtODMwLDcgKzgyNCw2
IEBAIGNvbnN0IFFDaGFyICpRU3RyaW5nOjpzdGFibGVVbmljb2RlKCkKICAgICByZXR1cm4gdW5p
Y29kZSgpOwogfQogCi0KIFFTdHJpbmc6On5RU3RyaW5nKCkKIHsKICAgICBBU1NFUlQoZGF0YUhh
bmRsZSk7CkBAIC04NTksNyArODUyLDYgQEAgUVN0cmluZzo6flFTdHJpbmcoKQogI2VuZGlmCiB9
CiAKLQogUVN0cmluZzo6UVN0cmluZygpCiB7CiAjaWZkZWYgUVNUUklOR19ERUJVR19BTExPQ0FU
SU9OUwpAQCAtODcwLDcgKzg2Miw2IEBAIFFTdHJpbmc6OlFTdHJpbmcoKQogICAgIGRhdGFIYW5k
bGVbMF0tPnJlZigpOwogfQogCi0KIC8vIENhcmVmdWwsIGp1c3QgdXNlZCBieSBRQ29uc3RTdHJp
bmcKIFFTdHJpbmc6OlFTdHJpbmcoS1dRU3RyaW5nRGF0YSAqY29uc3REYXRhLCBib29sIC8qZHVt
bXkqLykgCiB7CkBAIC04ODIsNyArODczLDYgQEAgUVN0cmluZzo6UVN0cmluZyhLV1FTdHJpbmdE
YXRhICpjb25zdERhdAogICAgIGNvbnN0RGF0YS0+X2lzSGVhcEFsbG9jYXRlZCA9IDE7CiB9CiAK
LQogUVN0cmluZzo6UVN0cmluZyhRQ2hhciBxYykKIHsKICNpZmRlZiBRU1RSSU5HX0RFQlVHX0FM
TE9DQVRJT05TCkBAIC0xNDE1LDcgKzE0MDUsNiBAQCBpbnQgUVN0cmluZzo6ZmluZFJldiggY29u
c3QgUVN0cmluZyYgc3RyCiAgICAgcmV0dXJuIC0xOwogfQogCi0KICNpZmRlZiBERUJVR19DT05U
QUlOU19DT1VOVEVSCiBzdGF0aWMgaW50IGNvbnRhaW5zQ291bnQgPSAwOwogI2VuZGlmCkBAIC0x
ODUyLDEyICsxODQxLDE0IEBAIFFTdHJpbmcgUVN0cmluZzo6YXJnKGRvdWJsZSByZXBsYWNlbWVu
dCwKIH0KIAogUVN0cmluZyBRU3RyaW5nOjpsZWZ0KHVpbnQgbGVuKSBjb25zdAoteyByZXR1cm4g
bWlkKDAsIGxlbik7IH0KLQoreworICAgIHJldHVybiBtaWQoMCwgbGVuKTsKK30KIAogUVN0cmlu
ZyBRU3RyaW5nOjpyaWdodCh1aW50IGxlbikgY29uc3QKLXsgcmV0dXJuIG1pZChsZW5ndGgoKSAt
IGxlbiwgbGVuKTsgfQotCit7CisgICAgcmV0dXJuIG1pZChsZW5ndGgoKSAtIGxlbiwgbGVuKTsK
K30KIAogUVN0cmluZyBRU3RyaW5nOjptaWQodWludCBzdGFydCwgdWludCBsZW4pIGNvbnN0CiB7
CkBAIC0xODkwLDcgKzE4ODEsNiBAQCBRU3RyaW5nIFFTdHJpbmc6Om1pZCh1aW50IHN0YXJ0LCB1
aW50IGxlCiAgICAgcmV0dXJuIFFTdHJpbmcoKTsKIH0KIAotCiBRU3RyaW5nIFFTdHJpbmc6OmNv
cHkoKSBjb25zdAogewogICAgIC8vIGRvZXMgbm90IG5lZWQgdG8gYmUgYSBkZWVwIGNvcHkKQEAg
LTIwNTEsNyArMjA0MSw2IEBAIHZvaWQgUVN0cmluZzo6ZGVyZWYoKQogICAgIGRhdGFIYW5kbGVb
MF0tPmRlcmVmKCk7CiB9CiAKLQogUVN0cmluZyAmUVN0cmluZzo6c2V0VW5pY29kZShjb25zdCBR
Q2hhciAqdW5pLCB1aW50IGxlbikKIHsKICAgICBkZXRhY2hBbmREaXNjYXJkQ2hhcmFjdGVycygp
OwpAQCAtMjA4Miw3ICsyMDcxLDYgQEAgUVN0cmluZyAmUVN0cmluZzo6c2V0VW5pY29kZShjb25z
dCBRQ2hhcgogICAgIHJldHVybiAqdGhpczsKIH0KIAotCiBRU3RyaW5nICZRU3RyaW5nOjpzZXRM
YXRpbjEoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuKQogewogICAgIGlmICggc3RyID09IDAgKQpA
QCAtMjI1NCw3ICsyMjQyLDYgQEAgUVN0cmluZyAmUVN0cmluZzo6aW5zZXJ0KHVpbnQgaW5kZXgs
IGNvbgogICAgIHJldHVybiAqdGhpczsKIH0KIAotCiBRU3RyaW5nICZRU3RyaW5nOjppbnNlcnQo
dWludCBpbmRleCwgY29uc3QgUVN0cmluZyAmcXMpCiB7CiAgICAgaWYgKHFzLmRhdGFIYW5kbGVb
MF0tPl9sZW5ndGggPT0gMCkKQEAgLTIyOTgsNyArMjI4NSw2IEBAIFFTdHJpbmcgJlFTdHJpbmc6
Omluc2VydCh1aW50IGluZGV4LCBjb24KICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLQogUVN0cmlu
ZyAmUVN0cmluZzo6aW5zZXJ0KHVpbnQgaW5kZXgsIGNvbnN0IFFDaGFyICppbnNlcnRDaGFycywg
dWludCBpbnNlcnRMZW5ndGgpCiB7CiAgICAgaWYgKGluc2VydExlbmd0aCA9PSAwKQpAQCAtMjMx
OCw3ICsyMzA0LDYgQEAgUVN0cmluZyAmUVN0cmluZzo6aW5zZXJ0KHVpbnQgaW5kZXgsIGNvbgog
ICAgIHJldHVybiAqdGhpczsKIH0KIAotCiBRU3RyaW5nICZRU3RyaW5nOjppbnNlcnQodWludCBp
bmRleCwgUUNoYXIgcWMpCiB7CiAgICAgZGV0YWNoKCk7CkBAIC0yMzU4LDcgKzIzNDMsNiBAQCBR
U3RyaW5nICZRU3RyaW5nOjppbnNlcnQodWludCBpbmRleCwgUUNoCiAgICAgcmV0dXJuICp0aGlz
OwogfQogCi0KIFFTdHJpbmcgJlFTdHJpbmc6Omluc2VydCh1aW50IGluZGV4LCBjaGFyIGNoKQog
ewogICAgIGRldGFjaCgpOwpAQCAtMjQ5Myw3ICsyNDc3LDYgQEAgUVN0cmluZyAmUVN0cmluZzo6
cmVwbGFjZShjaGFyIHBhdHRlcm4sIAogICAgIHJldHVybiAqdGhpczsKIH0KIAotCiBRU3RyaW5n
ICZRU3RyaW5nOjpyZXBsYWNlKFFDaGFyIHBhdHRlcm4sIGNvbnN0IFFTdHJpbmcgJnN0cikKIHsK
ICAgICBpbnQgc2xlbiA9IHN0ci5kYXRhSGFuZGxlWzBdLT5fbGVuZ3RoOwpAQCAtMjUwNSw3ICsy
NDg4LDYgQEAgUVN0cmluZyAmUVN0cmluZzo6cmVwbGFjZShRQ2hhciBwYXR0ZXJuLAogICAgIHJl
dHVybiAqdGhpczsKIH0KIAotCiBRU3RyaW5nICZRU3RyaW5nOjpyZXBsYWNlKGNvbnN0IFFTdHJp
bmcgJnBhdHRlcm4sIGNvbnN0IFFTdHJpbmcgJnN0cikKIHsKICAgICBpZiAocGF0dGVybi5pc0Vt
cHR5KCkpCkBAIC0yNTIwLDcgKzI1MDIsNiBAQCBRU3RyaW5nICZRU3RyaW5nOjpyZXBsYWNlKGNv
bnN0IFFTdHJpbmcgCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi0KIFFTdHJpbmcgJlFTdHJpbmc6
OnJlcGxhY2UoY29uc3QgUVJlZ0V4cCAmcXJlLCBjb25zdCBRU3RyaW5nICZzdHIpCiB7CiAgICAg
aWYgKCBpc0VtcHR5KCkgKQpAQCAtMjU0Miw3ICsyNTIzLDYgQEAgUVN0cmluZyAmUVN0cmluZzo6
cmVwbGFjZShjb25zdCBRUmVnRXhwIAogICAgIHJldHVybiAqdGhpczsKIH0KIAotCiBRU3RyaW5n
ICZRU3RyaW5nOjpyZXBsYWNlKFFDaGFyIG9sZENoYXIsIFFDaGFyIG5ld0NoYXIpCiB7CiAgICAg
aWYgKG9sZENoYXIgIT0gbmV3Q2hhciAmJiBmaW5kKG9sZENoYXIpICE9IC0xKSB7CkBAIC0yNTcz
LDcgKzI1NTMsNiBAQCBRU3RyaW5nICZRU3RyaW5nOjpyZXBsYWNlKFFDaGFyIG9sZENoYXIsCiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCi0KIFFDaGFyICpRU3RyaW5nOjpmb3JjZVVuaWNvZGUoKQog
ewogICAgIGRldGFjaCgpOwpAQCAtMjU4Miw3ICsyNTYxLDYgQEAgUUNoYXIgKlFTdHJpbmc6OmZv
cmNlVW5pY29kZSgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvLyBJbmNyZWFzZSBidWZm
ZXIgc2l6ZSBpZiBuZWNlc3NhcnkuICBOZXdseSBhbGxvY2F0ZWQKIC8vIGJ5dGVzIHdpbGwgY29u
dGFpbiBnYXJiYWdlLgogdm9pZCBRU3RyaW5nOjpzZXRMZW5ndGgodWludCBuZXdMZW4pCkBAIC0y
NjIwLDcgKzI1OTgsNiBAQCB2b2lkIFFTdHJpbmc6OnNldExlbmd0aCh1aW50IG5ld0xlbikKICAg
ICBkYXRhSGFuZGxlWzBdLT5fbGVuZ3RoID0gbmV3TGVuOwogfQogCi0KIHZvaWQgUVN0cmluZzo6
dHJ1bmNhdGUodWludCBuZXdMZW4pCiB7CiAgICAgaWYgKCBuZXdMZW4gPCBkYXRhSGFuZGxlWzBd
LT5fbGVuZ3RoICkKQEAgLTI4MzUsNDMgKzI4MTIsOSBAQCBzdHJ1Y3QgSGFuZGxlTm9kZSB7CiAg
ICAgfSB0eXBlOwogfTsKIAotI2lmIDEgLy8gY2hhbmdlIHRvIDAgdG8gZG8gdGhlIHBhZ2UgbGlz
dHMgY2hlY2tzCiAKICNkZWZpbmUgQ0hFQ0tfUEFHRV9MSVNUUygpICgodm9pZCkwKQogCi0jZWxz
ZQotCi1zdGF0aWMgdm9pZCBDSEVDS19QQUdFX0xJU1RTKCkKLXsKLSAgICB7Ci0gICAgICAgIGlu
dCBsb29wQ291bnQgPSAwOwotICAgICAgICBIYW5kbGVQYWdlTm9kZSAqbmV4dCA9IDA7Ci0gICAg
ICAgIGZvciAoSGFuZGxlUGFnZU5vZGUgKnBhZ2UgPSBmcmVlTm9kZUFsbG9jYXRpb25QYWdlczsg
cGFnZTsgcGFnZSA9IHBhZ2UtPnByZXZpb3VzKSB7Ci0gICAgICAgICAgICBBU1NFUlQocGFnZS0+
bmV4dCA9PSBuZXh0KTsKLSAgICAgICAgICAgIEFTU0VSVCgoKEhhbmRsZU5vZGUgKilwYWdlLT5u
b2RlcylbMF0udHlwZS5mcmVlTm9kZXMpOwotICAgICAgICAgICAgaWYgKCsrbG9vcENvdW50ID4g
MTAwKSB7Ci0gICAgICAgICAgICAgICAgRkFUQUwoImZyZWUgbm9kZSBwYWdlIGxvb3AiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIG5leHQgPSBwYWdlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHsKLSAgICAgICAgaW50IGxvb3BDb3VudCA9IDA7Ci0gICAgICAgIEhhbmRsZVBh
Z2VOb2RlICpuZXh0ID0gMDsKLSAgICAgICAgZm9yIChIYW5kbGVQYWdlTm9kZSAqcGFnZSA9IHVz
ZWROb2RlQWxsb2NhdGlvblBhZ2VzOyBwYWdlOyBwYWdlID0gcGFnZS0+cHJldmlvdXMpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChwYWdlLT5uZXh0ID09IG5leHQpOwotICAgICAgICAgICAgQVNTRVJU
KCgoSGFuZGxlTm9kZSAqKXBhZ2UtPm5vZGVzKVswXS50eXBlLmZyZWVOb2RlcyA9PSAwKTsKLSAg
ICAgICAgICAgIGlmICgrK2xvb3BDb3VudCA+IDEwMCkgewotICAgICAgICAgICAgICAgIEZBVEFM
KCJ1c2VkIG5vZGUgcGFnZSBsb29wIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBuZXh0
ID0gcGFnZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotI2VuZGlmCi0KIHN0YXRpYyBIYW5kbGVO
b2RlICppbml0aWFsaXplSGFuZGxlTm9kZUJsb2NrKEhhbmRsZVBhZ2VOb2RlICpwYWdlTm9kZSkK
IHsKICAgICB1aW50IGk7CkluZGV4OiBrd3EvS1dRVGV4dEFyZWEubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVRleHRBcmVhLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjk3CmRpZmYgLXAgLXUgLXIxLjk3IGt3cS9LV1FUZXh0QXJlYS5tbQotLS0ga3dx
L0tXUVRleHRBcmVhLm1tCTI4IE9jdCAyMDA1IDE3OjM1OjQzIC0wMDAwCTEuOTcKKysrIGt3cS9L
V1FUZXh0QXJlYS5tbQkyOSBOb3YgMjAwNSAyMjo1MjowMCAtMDAwMApAQCAtOTIxLDcgKzkyMSw2
IEBAIHN0YXRpYyBOU1N0cmluZyAqV2ViQ29udGludW91c1NwZWxsQ2hlY2sKICAgICBbc3VwZXIg
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOmZsYWddOwogfQogCi0KIC0gKHZvaWQp
c2V0V2lkZ2V0OihRVGV4dEVkaXQgKil3CiB7CiAgICAgd2lkZ2V0ID0gdzsKSW5kZXg6IGt3cS9L
V1FWYWx1ZUxpc3RJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2t3cS9LV1FWYWx1ZUxpc3RJbXBsLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYg
LXAgLXUgLXIxLjE1IGt3cS9LV1FWYWx1ZUxpc3RJbXBsLm1tCi0tLSBrd3EvS1dRVmFsdWVMaXN0
SW1wbC5tbQkzIE9jdCAyMDA1IDIxOjEzOjEwIC0wMDAwCTEuMTUKKysrIGt3cS9LV1FWYWx1ZUxp
c3RJbXBsLm1tCTI5IE5vdiAyMDA1IDIyOjUyOjAwIC0wMDAwCkBAIC0zMjgsNyArMzI4LDYgQEAg
S1dRVmFsdWVMaXN0SXRlcmF0b3JJbXBsIEtXUVZhbHVlTGlzdEltcAogICAgIHJldHVybiAoKGNv
bnN0IEtXUVZhbHVlTGlzdEltcGwgKil0aGlzKS0+ZW5kKCk7CiB9CiAKLQogS1dRVmFsdWVMaXN0
SXRlcmF0b3JJbXBsIEtXUVZhbHVlTGlzdEltcGw6OmJlZ2luKCkgY29uc3QKIHsKICAgICByZXR1
cm4gS1dRVmFsdWVMaXN0SXRlcmF0b3JJbXBsKGZpcnN0Tm9kZSgpKTsKSW5kZXg6IGt3cS9LV1FW
ZWN0b3JJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9L
V1FWZWN0b3JJbXBsLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIx
LjEwIGt3cS9LV1FWZWN0b3JJbXBsLm1tCi0tLSBrd3EvS1dRVmVjdG9ySW1wbC5tbQkzIE9jdCAy
MDA1IDIxOjEzOjExIC0wMDAwCTEuMTAKKysrIGt3cS9LV1FWZWN0b3JJbXBsLm1tCTI5IE5vdiAy
MDA1IDIyOjUyOjAwIC0wMDAwCkBAIC0xNDMsNyArMTQzLDYgQEAgaW50IEtXUVZlY3RvckltcGw6
OmZpbmRSZWYodm9pZCAqaXRlbSkKICAgICByZXR1cm4gLTE7CiB9CiAKLQogS1dRVmVjdG9ySW1w
bCAmS1dRVmVjdG9ySW1wbDo6YXNzaWduKEtXUVZlY3RvckltcGwgJnZpLCBib29sIGRlbEl0ZW1z
KQogewogICAgIGNsZWFyKGRlbEl0ZW1zKTsKSW5kZXg6IGt3cS9XZWJDb3JlU2NyaXB0RGVidWdn
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZVNj
cmlwdERlYnVnZ2VyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC1wIC11IC1yMS4x
IGt3cS9XZWJDb3JlU2NyaXB0RGVidWdnZXIuaAotLS0ga3dxL1dlYkNvcmVTY3JpcHREZWJ1Z2dl
ci5oCTMwIEp1bCAyMDA1IDAzOjAwOjM0IC0wMDAwCTEuMQorKysga3dxL1dlYkNvcmVTY3JpcHRE
ZWJ1Z2dlci5oCTI5IE5vdiAyMDA1IDIyOjUyOjAwIC0wMDAwCkBAIC00MSw3ICs0MSw2IEBAIHVz
aW5nIEtKUzo6RXhlY1N0YXRlOwogI2VuZGlmCiAKIAotCiAvLyAiV2ViU2NyaXB0RGVidWdnZXIi
IHByb3RvY29sIC0gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGRlbGVnYXRlCiAKIEBwcm90b2Nv
bCBXZWJTY3JpcHREZWJ1Z2dlcgpAQCAtNTgsNyArNTcsNiBAQCB1c2luZyBLSlM6OkV4ZWNTdGF0
ZTsKIEBlbmQKIAogCi0KIEBpbnRlcmZhY2UgV2ViQ29yZVNjcmlwdERlYnVnZ2VyIDogTlNPYmpl
Y3QKIHsKIEBwcml2YXRlCkBAIC03NCw3ICs3Miw2IEBAIHVzaW5nIEtKUzo6RXhlY1N0YXRlOwog
QGVuZAogCiAKLQogQGludGVyZmFjZSBXZWJDb3JlU2NyaXB0Q2FsbEZyYW1lIDogTlNPYmplY3QK
IHsKIEBwcml2YXRlCkluZGV4OiBrd3EvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlU2NyaXB0RGVidWdnZXIu
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC1wIC11IC1yMS41IGt3cS9XZWJDb3Jl
U2NyaXB0RGVidWdnZXIubW0KLS0tIGt3cS9XZWJDb3JlU2NyaXB0RGVidWdnZXIubW0JMjcgTm92
IDIwMDUgMDc6NTQ6NTMgLTAwMDAJMS41CisrKyBrd3EvV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1t
CTI5IE5vdiAyMDA1IDIyOjUyOjAxIC0wMDAwCkBAIC0zNSw3ICszNSw2IEBACiB1c2luZyBuYW1l
c3BhY2UgS0pTOwogCiAKLQogQGludGVyZmFjZSBXZWJDb3JlU2NyaXB0RGVidWdnZXIgKFdlYkNv
cmVTY3JpcHREZWJ1Z2dlckludGVybmFsKQogCiAtIChXZWJDb3JlU2NyaXB0Q2FsbEZyYW1lICop
X2VudGVyRnJhbWU6KEV4ZWNTdGF0ZSAqKXN0YXRlOwpAQCAtNDQsNyArNDMsNiBAQCB1c2luZyBu
YW1lc3BhY2UgS0pTOwogQGVuZAogCiAKLQogQGludGVyZmFjZSBXZWJDb3JlU2NyaXB0Q2FsbEZy
YW1lIChXZWJDb3JlU2NyaXB0RGVidWdnZXJJbnRlcm5hbCkKIAogLSAoV2ViQ29yZVNjcmlwdENh
bGxGcmFtZSAqKV9pbml0V2l0aEdsb2JhbE9iamVjdDooV2ViU2NyaXB0T2JqZWN0ICopZ2xvYmFs
T2JqIGNhbGxlcjooV2ViQ29yZVNjcmlwdENhbGxGcmFtZSAqKWNhbGxlciBzdGF0ZTooRXhlY1N0
YXRlICopc3RhdGU7CkBAIC01NCw3ICs1Miw2IEBAIHVzaW5nIG5hbWVzcGFjZSBLSlM7CiBAZW5k
CiAKIAotCiAvLyBjb252ZXJ0IFVTdHJpbmcgdG8gTlNTdHJpbmcKIHN0YXRpYyBOU1N0cmluZyAq
dG9OU1N0cmluZyhjb25zdCBVU3RyaW5nICZzKQogewpAQCAtNjMsNyArNjAsNiBAQCBzdGF0aWMg
TlNTdHJpbmcgKnRvTlNTdHJpbmcoY29uc3QgVVN0cmluCiB9CiAKIAotCiAvLyBDKysgaW50ZXJm
YWNlIHRvIEtKUyBkZWJ1Z2dlciBjYWxsYmFja3MKIAogY2xhc3MgV2ViQ29yZVNjcmlwdERlYnVn
Z2VySW1wIDogcHVibGljIEtKUzo6RGVidWdnZXIgewpAQCAtMTIxLDcgKzExNyw2IEBAIGNsYXNz
IFdlYkNvcmVTY3JpcHREZWJ1Z2dlckltcCA6IHB1YmxpYyAKIH07CiAKIAotCiAvLyBXZWJDb3Jl
U2NyaXB0RGVidWdnZXIKIC8vCiAvLyBUaGlzIGlzIHRoZSBtYWluIChiZWhpbmQtdGhlLXNjZW5l
cykgZGVidWdnZXIgY2xhc3MgaW4gV2ViQ29yZS4KQEAgLTE2Myw3ICsxNTgsNiBAQCBjbGFzcyBX
ZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiBAZW5kCiAKIAotCiBAaW1wbGVtZW50
YXRpb24gV2ViQ29yZVNjcmlwdERlYnVnZ2VyIChXZWJDb3JlU2NyaXB0RGVidWdnZXJJbnRlcm5h
bCkKIAogLSAoV2ViQ29yZVNjcmlwdENhbGxGcmFtZSAqKV9lbnRlckZyYW1lOihFeGVjU3RhdGUg
KilzdGF0ZTsKQEAgLTE4Myw3ICsxNzcsNiBAQCBjbGFzcyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJ
bXAgOiBwdWJsaWMgCiBAZW5kCiAKIAotCiAvLyBXZWJDb3JlU2NyaXB0Q2FsbEZyYW1lCiAvLwog
Ly8gT25lIG9mIHRoZXNlIGlzIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGVhY2ggc3RhY2sgZnJhbWUu
ICBBZGRpdGlvbmFsbHksIHRoZXJlIGlzIGEgImdsb2JhbCIKQEAgLTIyOCw3ICsyMjEsNiBAQCBj
bGFzcyBXZWJDb3JlU2NyaXB0RGVidWdnZXJJbXAgOiBwdWJsaWMgCiBAZW5kCiAKIAotCiBAaW1w
bGVtZW50YXRpb24gV2ViQ29yZVNjcmlwdENhbGxGcmFtZQogCiAtICh2b2lkKWRlYWxsb2MK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4926</attachid>
            <date>2005-12-04 02:27:22 -0800</date>
            <delta_ts>2005-12-04 02:30:16 -0800</delta_ts>
            <desc>A newer hacked version of partpp.pl which has whitespace removal heuristics</desc>
            <filename>partpp.pl</filename>
            <type>text/x-perl-script</type>
            <size>18413</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsIC13DQojDQojICBQYXJ0aWFsIFByZXByb2Nlc3Nvcg0KIw0KIyAgVGhp
cyBwcm9ncmFtIHByb2Nlc3NlcyBDIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMsIGVsaW1pbmF0
aW5nDQojICBjb25kaXRpb25zIGtub3duIHRvIGJlIHRydWUgb3IgZmFsc2UuIFRoaXMgY2FuIGJl
IHVzZWQgdG8gc2ltcGxpZnkNCiMgICNpZmRlZi1yaWRkZW4gY29kZS4gVGhpcyBwcm9ncmFtIGF0
dGVtcHRzIHRvIGJlIHNtYXJ0IGFib3V0IGNvbXBsZXgNCiMgIGNvbmRpdGlvbnMuIEZvciBleGFt
cGxlLA0KIyAgICAgICNpZiBkZWZpbmVkKGZvbykgJiYgZGVmaW5lZChiYXIpIHx8IGRlZmluZWQo
aHVoKQ0KIyAgaXMgcmVwbGFjZWQgYnkNCiMgICAgICAjaWYgZGVmaW5lZChodWgpDQojICB3aGVu
IHdlIGtub3cgdGhhdCBmb28gaXMgZGVmaW5lZCBhbmQgYmFyIGlzIG5vdC4gRm9yIGFub3RoZXIg
ZXhhbXBsZSwNCiMgICAgICBwYXJ0cHAgLVVfX1dJTjMyX18NCiMgIHdvdWxkIGVsaW1pbmF0ZSBh
bGwgV2luMzItc3BlY2lmaWMgY29kZSBmcm9tIGEgZ2l2ZW4gc291cmNlIGNvZGUuDQojDQojICBQ
YXJhbWV0ZXJzOg0KIyAgICAtRHN5bSAgICB3ZSBrbm93IHRoYXQgc3ltIGlzIGRlZmluZWQNCiMg
ICAgLVVzeW0gICAgd2Uga25vdyB0aGF0IHN5bSBpcyBub3QgZGVmaW5lZA0KIyAgICAtQyAgICAg
ICBhc3N1bWUgdGhhdCB1c2VyIHdyb3RlICJjbGVhbiIgY29kZSwgdGhhdCBpcywgYWxsDQojICAg
ICAgICAgICAgIG9iamVjdC1saWtlIG1hY3JvcyBiZWhhdmUgYXMgb2JqZWN0cw0KIyAgICAtZCAg
ICAgICBwcm9jZXNzICNkZWZpbmUvI3VuZGVmIGRpcmVjdGl2ZXMgaW4gb3JkZXIgdG8NCiMgICAg
ICAgICAgICAga2VlcCBvdXIgZGljdGlvbmFyeSB1cC10by1kYXRlLg0KIyAgICAtZiAgICAgICBm
b3JjZSBzaW1wbGlmeSBleHByZXNzaW9ucyBldmVuIHdoZW4gdGhleSBkb24ndCBjb250YWluDQoj
ICAgICAgICAgICAgIGFueSBvZiBvdXIgc3ltYm9scw0KIyAgICAtZWV4cHIgICBldmFsdWF0ZSBl
eHByZXNzaW9uIGFuZCBwcmludCBzaW1wbGlmaWVkIHZlcnNpb24NCiMNCiMgIFRoZSAtQyBvcHRp
b24gZGVzZXJ2ZXMgZXhwbGFuYXRpb246IGFzc3VtZSB0aGUgZm9sbG93aW5nOg0KIyAgICAgICAj
ZGVmaW5lIFggMCkgLSAoMQ0KIyAgICAgICAjaWYgKGRlZmluZWQoZm9vKSB8fCBYKQ0KIyAgQXNz
dW1pbmcgZm9vIGlzIGRlZmluZWQsIHRoZSAjaWYgZXhwcmVzc2lvbiB3b3VsZCBiZSBlcXVpdmFs
ZW50IHRvDQojICAgICAgICNpZiAoMSB8fCBYKQ0KIyAgd2hpY2ggaXMgYXQgZmlyc3Qgc2lnaHQg
ZXF1aXZhbGVudCB0bw0KIyAgICAgICAjaWYgKFgpDQojICB3aGljaCBpcyBlcXVhbCB0byAiI2lm
IC0xIiBpLmUuIHRydWUuIEhvd2V2ZXIsIHRoZSBvcmlnaW5hbA0KIyAgZXhwcmVzc2lvbiBpcyAi
I2lmICgxIHx8IDApIC0gKDEpIiB3aGljaCBpcyBmYWxzZS4gVG8gZ3VhcmFudGVlDQojICBjb3Jy
ZWN0bmVzcywgd2UgYXNzdW1lIHRoYXQgdGhpcyBjYW4gaGFwcGVuLCBhbmQgcGFzcyB0aHJvdWdo
DQojICBleHByZXNzaW9ucyBjb250YWluaW5nICJyYXciIG1hY3JvIG5hbWVzIHVuY2hhbmdlZC4g
V2l0aCAtQywgd2UNCiMgIGFzc3VtZSB1c2VyIGRvZXNuJ3Qgd3JpdGUgc3VjaCBoYWNrcyAodGhh
dCBpcywgYWxsIG5vbi1mdW5jdGlvbg0KIyAgbWFjcm9zIGFyZSBwcm9wZXJseSBwYXJlbnRoZXNp
emVkIGV4cHJlc3Npb25zKSwgYW5kIHdvdWxkIHJlcGxhY2UNCiMgIHRoZSBzdGFydGluZyBleHBy
ZXNzaW9uIHdpdGggIihYKSIuDQojDQojICBXaXRoIC1mLCB0aGlzIHByb2dyYW0gc2ltcGxpZmll
cyBleHByZXNzaW9ucyBldmVuIGlmIHRoZXkgZG9uJ3QNCiMgIGNvbnRhaW4gb25lIG9mIG91ciBz
eW1ib2xzLiBGb3IgZXhhbXBsZSwgd2l0aCAtZiwNCiMgICAgICAgI2lmIDEgfHwgMg0KIyAgaXMg
c2ltcGxpZmllZCB0byAiI2lmIDEiLiBCZWNhdXNlIHBhcnRwcCBjb21wdXRlcyBpbiBkZWNpbWFs
IChhbmQNCiMgIHRodXMgbWFrZXMgY29kZSBjb250YWluaW5nIGhleC9vY3QgY29tcHV0YXRpb25z
IGxlc3MgcmVhZGFibGUpLA0KIyAgdGhpcyBpcyBub3JtYWxseSBub3QgZG9uZSBvbiB1bnJlbGF0
ZWQgZXhwcmVzc2lvbnMuDQojDQojICBCdWdzOg0KIyAgLSB3aGVuIHdlIG1vZGlmeSBhIGNvbmRp
dGlvbmFsIGxpbmUsIGNvbW1lbnRzIGdldCBsb3N0DQojICAtIHJlc3VsdHMgbWF5IGJlIGluY29y
cmVjdCBpZiBhbiAjaW5jbHVkZSBmaWxlICN1bmRlZidzIG9yDQojICAgICNkZWZpbmUncyBhIHN5
bWJvbCBwYXNzZWQgaW4gYnkgLUQvLVUuIFRoZSAtZCBvcHRpb24gbWF5IG1ha2UNCiMgICAgdGhp
cyBldmVuIHdvcnNlLg0KIyAgLSAjZWxpZiBpcyBub3Qgc3VwcG9ydGVkDQojICAtIGAjaWYgMCcg
YW5kIGAjaWYgMScgYXJlIGVsaW1pbmF0ZWQgZXZlbiB3aGVuIC1mIGlzIG5vdCBzcGVjaWZpZWQN
CiMNCiMgIChjKSAyMDAyIGJ5IFN0ZWZhbiBSZXV0aGVyDQojDQoNCnVzZSBzdHJpY3Q7DQp1c2Ug
dmFycyBxd3sgJWRlZmluZWQgQGZpbGVzICRvcHRfb3B0aW1pc3RpYyAkb3B0X2RlZmluZXMgQGV4
cHJzDQogICAgICAgICAgICAgICAgICRvcHRfZm9yY2UNCiAgICAgICAgICAgICAgICAgJHNlZW5f
ZGVmaW5lZCB9Ow0KdXNlIFNwYWNpbmdIZXVyaXN0aWNzOw0KDQokb3B0X29wdGltaXN0aWMgPSAw
Ow0KJG9wdF9kZWZpbmVzID0gMDsNCiRvcHRfZm9yY2UgPSAwOw0KDQpteSAkYWxsb3dfY2MgPSAw
Ow0KDQpmb3JlYWNoIChAQVJHVikgew0KICAgIGlmICgvXi0tYmVnaW4kLykgew0KICAgICAgICAk
YWxsb3dfY2MgPSAxOw0KICAgIH0gZWxzaWYgKC9eLS1lbmQkLykgew0KICAgICAgICAkYWxsb3df
Y2MgPSAwOw0KICAgIH0gZWxzaWYgKC9eLUQoLispLykgew0KICAgICAgICAkZGVmaW5lZHskMX0g
PSAxOw0KICAgIH0gZWxzaWYgKC9eLVUoLispLykgew0KICAgICAgICAkZGVmaW5lZHskMX0gPSAw
Ow0KICAgIH0gZWxzaWYgKCEkYWxsb3dfY2MgJiYgL14tQyQvKSB7DQogICAgICAgICRvcHRfb3B0
aW1pc3RpYyA9IDE7DQogICAgfSBlbHNpZiAoISRhbGxvd19jYyAmJiAvXi1kJC8pIHsNCiAgICAg
ICAgJG9wdF9kZWZpbmVzID0gMTsNCiAgICB9IGVsc2lmICghJGFsbG93X2NjICYmIC9eLWYkLykg
ew0KICAgICAgICAkb3B0X2ZvcmNlID0gMTsNCiAgICB9IGVsc2lmICghJGFsbG93X2NjICYmIC9e
LWUoLiopLykgew0KICAgICAgICBwdXNoIEBleHBycywgJDE7DQogICAgfSBlbHNpZiAoL14taCQv
IHx8IC9eLS0/aGVscCQvKSB7DQogICAgICAgIHByaW50ICIkMCAtIHBhcnRpYWwgcHJlcHJvY2Vz
c29yDQoNCnVzYWdlOiAkMCBbLURzeW0uLi5dIFstVXN5bS4uLl0gWy1DXSBbLWRdIFstZl0gWy1o
fC0taGVscF0gW2ZpbGVzLi4uXQ0KDQotRHN5bSAgICAgIGRlZmluZSBhIHN5bWJvbA0KLVVzeW0g
ICAgICB1bmRlZmluZSBhIHN5bWJvbA0KLUMgICAgICAgICBhc3N1bWUgJ2NsZWFuJyBjb2RlIChk
ZXRhaWxlZCBpbmZvIGluIHNvdXJjZSBjb2RlKQ0KLWQgICAgICAgICBwcm9jZXNzICNkZWZpbmUv
I3VuZGVmIGxpbmVzDQotZiAgICAgICAgIGZvcmNlIHNpbXBsaWZ5DQoNCkMgY29tcGlsZXIgb3B0
aW9ucyBjYW4gYmUgcGFzc2VkIGluIC0tYmVnaW4gLS1lbmQsIHN1Y2ggYXMNCiAgJDAgLS1iZWdp
biAtRHN5bSAtRHN5bSAtSWRpciAtTGRpciAtbGxpYiAtLWVuZCBmaWxlLmMNClwodGhpcyBwcm9n
cmFtIHdpbGwgdGhlbiBpZ25vcmUgb3B0aW9ucyBpdCBkb2Vzbid0IGtub3cpLg0KDQpJZiBubyBm
aWxlcyBzcGVjaWZpZWQsIHByb2Nlc3NlcyBzdGRpbi4gT3V0cHV0IGFsd2F5cyBnb2VzIHRvIHN0
ZG91dC4NCg0KXChjKSAyMDAyIFN0ZWZhbiBSZXV0aGVyIDxTdHJldVxAZ214LmRlPi5cbiI7DQog
ICAgICAgIGV4aXQgMDsNCiAgICB9IGVsc2Ugew0KICAgICAgICBpZiAoJF8gPX4gL14tLyAmJiAk
XyBuZSAnLScpIHsNCiAgICAgICAgICAgIGRpZSAiYmFkIHBhcmFtZXRlciBgJF8nXG4iDQogICAg
ICAgICAgICAgICAgdW5sZXNzICRhbGxvd19jYzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg
ICAgIHB1c2ggQGZpbGVzLCAkXzsNCg0KICAgICAgICB9DQogICAgfQ0KfQ0KcHVzaCBAZmlsZXMs
ICItIiBpZiAhQGZpbGVzICYmICFAZXhwcnM7DQoNCm15ICRleGl0ID0gMDsNCmZvcmVhY2ggKEBl
eHBycykgew0KICAgIHByaW50ICRfLCAiOlxuLSAiLCBldmFsX2V4cHIoJF8pLCAiXG4iOw0KfQ0K
Zm9yZWFjaCAoQGZpbGVzKSB7DQogICAgaWYgKCRfIGVxICctJykgew0KICAgICAgICBwcm9jZXNz
IChcKlNURElOLCBcKlNURE9VVCk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgb3BlbiBJTiwgIjwg
JF8iIG9yIGRvIHsgcHJpbnQgU1RERVJSICIkXzogJCFcbiI7ICRleGl0PTE7IG5leHQ7IH07DQog
ICAgICAgIHByb2Nlc3MgKFwqSU4sIFwqU1RET1VUKTsNCiAgICAgICAgY2xvc2UgSU47DQogICAg
fQ0KfQ0KZXhpdCAkZXhpdDsNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIHBy
b2Nlc3MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgcHJvY2VzcyAoaW5m
ZCwgb3V0ZmQpDQojIC0gcHJvY2VzcyBvbmUgZmlsZS4gVGhpcyBpcyB0aGUgZW5naW5lIG9mIHRo
ZSBwcm9ncmFtLg0Kc3ViIHByb2Nlc3Mgew0KICAgIG15ICgkaW4sICRvdXQpID0gQF87DQogICAg
bXkgJHRvdGFsOw0KICAgIG15IEBpZnN0YWNrOw0KICAgIG15ICRvdXRfZW5hYmxlZCA9IDE7DQog
ICAgIyBsaW5lIGxvb3ANCiBMSU5FOg0KICAgIHdoaWxlICgxKSB7DQogICAgICAgICMgcmVhZCBv
bmUgInZpcnR1YWwiIGxpbmUNCiAgICAgICAgJHRvdGFsID0gIiI7DQogICAgICAgIGRvIHsNCiAg
ICAgICAgICAgIG15ICRsaW5lID0gPCRpbj47DQogICAgICAgICAgICBpZiAoIWRlZmluZWQgJGxp
bmUpIHsNCiAgICAgICAgICAgICAgICBsYXN0IExJTkUgaWYgJHRvdGFsIGVxICcnOw0KICAgICAg
ICAgICAgICAgIGRpZSAiJF86JC46IHVudGVybWluYXRlZCBjb21tZW50XG4iOw0KICAgICAgICAg
ICAgfQ0KICAgICAgICAgICAgd2hpbGUgKCRsaW5lID1+IC9cXFxuJC8pIHsNCiAgICAgICAgICAg
ICAgICBteSAkbmV4dCA9IDwkaW4+Ow0KICAgICAgICAgICAgICAgIGRpZSAiJF86JC46IHVuZXhw
ZWN0ZWQgZW5kIG9mIGZpbGVcbiIgaWYgbm90IGRlZmluZWQgJG5leHQ7DQogICAgICAgICAgICAg
ICAgJGxpbmUgLj0gJG5leHQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdG90YWwgLj0g
JGxpbmU7DQogICAgICAgIH0gd2hpbGUgKCEgaXNfY29tcGxldGUoJHRvdGFsKSk7DQogICAgICAg
IA0KICAgICAgICBuZXh0IGlmIChpc09ubHlXaGl0ZVNwYWNlKCR0b3RhbCkpOw0KDQogICAgICAg
ICMgcmVtb3ZlIGNvbW1lbnRzIHRvIHNlZSBpZiBpdCdzIGEgcHAgY29tbWFuZA0KICAgICAgICBt
eSAkc2luZ2xlX2xpbmUgPSAkdG90YWw7ICRzaW5nbGVfbGluZSA9fiBzL1xcXG4vL3NnOw0KICAg
ICAgICBteSAkY29tbWFuZCA9ICIiOw0KICAgICAgICB3aGlsZSAoMSkgew0KICAgICAgICAgICAg
bGFzdCBpZiAkc2luZ2xlX2xpbmUgPX4gbS9cRyQvc2djOw0KICAgICAgICAgICAgaWYgKCRzaW5n
bGVfbGluZSA9fiBte1xHKFteXCJcJy9dKyl9c2djDQogICAgICAgICAgICAgICAgIHx8ICRzaW5n
bGVfbGluZSA9fiBte1xHKCcoW15cJ1xcXXxcXC4pKicpfXNnYw0KICAgICAgICAgICAgICAgICB8
fCAkc2luZ2xlX2xpbmUgPX4gbXtcRygiKFteXCJcXF18XFwuKSoiKX1zZ2MNCiAgICAgICAgICAg
ICAgICAgfHwgJHNpbmdsZV9saW5lID1+IG17XEcoL1teLypdKX1zZ2MpDQogICAgICAgICAgICB7
DQogICAgICAgICAgICAgICAgJGNvbW1hbmQgLj0gJDE7DQogICAgICAgICAgICAgICAgbmV4dDsN
CiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkc2luZ2xlX2xpbmUgPX4gbXtcRy8vLip9
c2djDQogICAgICAgICAgICAgICAgfHwgJHNpbmdsZV9saW5lID1+IG17XEcvXCouKj9cKi99c2dj
KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRjb21tYW5kIC49ICIgIjsNCiAgICAg
ICAgICAgICAgICBuZXh0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZGllICJodWg/IjsN
CiAgICAgICAgfQ0KICAgICAgICBpZiAoJGNvbW1hbmQgPX4gL15ccypcI1xzKihbYS16XSspXHMq
KC4qKS8pIHsNCiAgICAgICAgICAgICMgcHAgY29tbWFuZA0KICAgICAgICAgICAgbXkgKCRjbSwg
JGFyZykgPSAoJDEsIHRyaW0oJDIpKTsNCiAgICAgICAgICAgIGlmICgkY20gZXEgJ2lmZGVmJykg
ew0KICAgICAgICAgICAgICAgIGlmICgkb3V0X2VuYWJsZWQpIHsNCiAgICAgICAgICAgICAgICAg
ICAgaWYgKGV4aXN0cyAkZGVmaW5lZHskYXJnfSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg
JG91dF9lbmFibGVkID0gJGRlZmluZWR7JGFyZ307DQogICAgICAgICAgICAgICAgICAgICAgICB1
bnNoaWZ0IEBpZnN0YWNrLCAkb3V0X2VuYWJsZWQ7DQogICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAndW5rbm93bic7
DQogICAgICAgICAgICAgICAgICAgICAgICBhcHBseVNwYWNpbmdIZXVyaXN0aWNzQW5kUHJpbnQo
JG91dCwgJHRvdGFsKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0g
ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIHVuc2hpZnQgQGlmc3RhY2ssIDE7DQogICAgICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNpZiAoJGNtIGVxICdpZm5kZWYnKSB7DQogICAg
ICAgICAgICAgICAgaWYgKCRvdXRfZW5hYmxlZCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAo
ZGVmaW5lZCAkZGVmaW5lZHskYXJnfSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG91dF9l
bmFibGVkID0gMSAtICRkZWZpbmVkeyRhcmd9Ow0KICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aGlmdCBAaWZzdGFjaywgJG91dF9lbmFibGVkOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ew0KICAgICAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgJ3Vua25vd24nOw0K
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlTcGFjaW5nSGV1cmlzdGljc0FuZFByaW50KCRv
dXQsICR0b3RhbCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVs
c2Ugew0KICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAxOw0KICAgICAgICAg
ICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzaWYgKCRjbSBlcSAnaWYnKSB7DQogICAgICAgICAg
ICAgICAgaWYgKCRvdXRfZW5hYmxlZCkgew0KICAgICAgICAgICAgICAgICAgICBteSAkcmVzdWx0
ID0gdHJpbShldmFsX2V4cHIoJGFyZykpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHJlc3Vs
dCAhfiAvXEQvKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0X2VuYWJsZWQgPSAoJHJl
c3VsdCA/ICIxIiA6ICIwIik7DQogICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBpZnN0
YWNrLCAkb3V0X2VuYWJsZWQ7DQogICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmluZ0xpbmUo
JHRvdGFsKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2hpZnQgQGlmc3RhY2ssICd1bmtub3duJzsNCiAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGx5U3BhY2luZ0hldXJpc3RpY3NBbmRQcmludCgkb3V0LCAiI2lmICRyZXN1bHRcbiIp
Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg
ICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgMTsNCiAgICAgICAgICAgICAgICB9DQog
ICAgICAgICAgICB9IGVsc2lmICgkY20gZXEgJ2VsaWYnKSB7DQogICAgICAgICAgICAgICAgcHJp
bnQgU1RERVJSICIjZWxpZiBpcyBub3QgeWV0IGltcGxlbWVudGVkLCBpZ25vcmluZy5cbiI7DQog
ICAgICAgICAgICAgICAgYXBwbHlTcGFjaW5nSGV1cmlzdGljc0FuZFByaW50KCRvdXQsICR0b3Rh
bCk7DQogICAgICAgICAgICB9IGVsc2lmICgkY20gZXEgJ2Vsc2UnKSB7DQogICAgICAgICAgICAg
ICAgZGllICIjZWxzZSB3aXRob3V0ICNpZiINCiAgICAgICAgICAgICAgICAgICAgaWYgISBAaWZz
dGFjazsNCiAgICAgICAgICAgICAgICBpZiAoJG91dF9lbmFibGVkKSB7DQogICAgICAgICAgICAg
ICAgICAgICMgb3V0cHV0IGNhbiBiZSBlbmFibGVkIGlmIGEpIHdlIGRvbid0IGtub3cgb3IgYikg
d2UNCiAgICAgICAgICAgICAgICAgICAgIyBrbm93IG91ciBjb25kaXRpb24gaXMgdHJ1ZQ0KICAg
ICAgICAgICAgICAgICAgICBpZiAoJGlmc3RhY2tbMF0gZXEgJzEnKSB7DQogICAgICAgICAgICAg
ICAgICAgICAgICAkaWZzdGFja1swXSA9ICcwJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICRv
dXRfZW5hYmxlZCA9IDA7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg
ICAgICAgICAgICAgICBhcHBseVNwYWNpbmdIZXVyaXN0aWNzQW5kUHJpbnQoJG91dCwgJHRvdGFs
KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAg
ICAgICAgICAgICAgICAgIGlmICgkaWZzdGFja1swXSBlcSAnMCcpIHsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICRpZnN0YWNrWzBdID0gJzEnOw0KICAgICAgICAgICAgICAgICAgICAgICAgJG91
dF9lbmFibGVkID0gY2hlY2tfb3V0KEBpZnN0YWNrKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0K
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzaWYgKCRjbSBlcSAnZW5kaWYnKSB7
DQogICAgICAgICAgICAgICAgZGllICIjZW5kaWYgd2l0aG91dCAjaWYiDQogICAgICAgICAgICAg
ICAgICAgIGlmICEgQGlmc3RhY2s7DQogICAgICAgICAgICAgICAgbXkgJHdoeSA9IHNoaWZ0IEBp
ZnN0YWNrOw0KICAgICAgICAgICAgICAgICRvdXRfZW5hYmxlZCA9IGNoZWNrX291dCAoQGlmc3Rh
Y2spOw0KICAgICAgICAgICAgICAgIGlmICgkb3V0X2VuYWJsZWQgJiYgKCR3aHkgbmUgJzAnICYm
ICR3aHkgbmUgJzEnKSkgew0KICAgICAgICAgICAgICAgICAgICBhcHBseVNwYWNpbmdIZXVyaXN0
aWNzQW5kUHJpbnQoJG91dCwgJHRvdGFsKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg
ICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGlmICgkY20gZXEgJ2RlZmluZScpIHsNCiAgICAg
ICAgICAgICAgICAgICAgaWYgKCRvdXRfZW5hYmxlZCAmJiAkb3B0X2RlZmluZXMgJiYgJGFyZyA9
fiBte14oXHcrKX0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkZWZpbmVkeyQxfSA9IDE7
DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2lmICgkY20gZXEg
J3VuZGVmJykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJG91dF9lbmFibGVkICYmICRvcHRf
ZGVmaW5lcyAmJiAkYXJnID1+IG17XihcdyspfSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg
JGRlZmluZWR7JDF9ID0gMDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg
IH0gZWxzaWYgKCRjbSBuZSAnaW5jbHVkZScgJiYgJGNtIG5lICdwcmFnbWEnICYmICRjbSBuZSAn
ZXJyb3InICYmICRjbSBuZSAnaW1wb3J0JyAmJiAkY20gbmUgJ3dhcm5pbmcnKSB7DQogICAgICAg
ICAgICAgICAgICAgIGRpZSAiJF86JC46IHVua25vd24gcHJlcHJvY2Vzc29yIGNvbW1hbmQgJyRj
bSdcbiI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGFwcGx5U3BhY2luZ0hl
dXJpc3RpY3NBbmRQcmludCgkb3V0LCAkdG90YWwpDQogICAgICAgICAgICAgICAgICAgIGlmICRv
dXRfZW5hYmxlZDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg
IGFwcGx5U3BhY2luZ0hldXJpc3RpY3NBbmRQcmludCgkb3V0LCAkdG90YWwpDQogICAgICAgICAg
ICAgICAgaWYgJG91dF9lbmFibGVkOw0KICAgICAgICB9DQoJCWlmICgkb3V0X2VuYWJsZWQpIHsN
CgkJCXNldFByZXZpb3VzQWxsb3dlZExpbmUoJHRvdGFsKTsNCgkJfSBlbHNlIHsNCgkJCWlnbm9y
aW5nTGluZSgkdG90YWwpOw0KCQl9DQogICAgfQ0KICAgIHByaW50ZiAiJF86JC46ICVkIHVudGVy
bWluYXRlZCBjb25kaXRpb25hbChzKSBzdGlsbCBvcGVuXG4iLCBzY2FsYXIgQGlmc3RhY2sNCiAg
ICAgICAgaWYgQGlmc3RhY2s7DQogICAgcHJpbnRQZW5kaW5nRW1wdHlMaW5lcygkb3V0KTsNCn0N
Cg0KIyB0cnVlIGlmZiAkX1swXSBpcyBhIGNvbXBsZXRlIGxpbmUuIENvbXBsZXRlIGxpbmVzIG1h
eSBub3QgY29udGFpbg0KIyBwYXJ0aWFsIGNvbW1lbnRzLg0Kc3ViIGlzX2NvbXBsZXRlIHsNCiAg
ICBteSAkbGluZSA9IHNoaWZ0Ow0KICAgICRsaW5lID1+IHMvXFxcbi8vc2c7DQogICAgd2hpbGUg
KDEpIHsNCiAgICAgICAgbGFzdCBpZiAkbGluZSA9fiAvXEckL3NnYzsNCiAgICAgICAgbmV4dCBp
ZiAoJGxpbmUgPX4gbXtcR1teXCJcJy9dK31zZ2MNCiAgICAgICAgICAgICAgICAgfHwgJGxpbmUg
PX4gbXtcRycoW15cJ1xcXXxcXC4pKid9c2djDQogICAgICAgICAgICAgICAgIHx8ICRsaW5lID1+
IG17XEciKFteXCJcXF18XFwuKSoifXNnYw0KICAgICAgICAgICAgICAgICB8fCAkbGluZSA9fiBt
e1xHL1teLypdfXNnYw0KICAgICAgICAgICAgICAgICB8fCAkbGluZSA9fiBte1xHLy8uKn1zZ2MN
CiAgICAgICAgICAgICAgICAgfHwgJGxpbmUgPX4gbXtcRy9cKi4qP1wqL31zZ2MpOw0KICAgICAg
ICBkaWUgIiRfOiQuOiBsaXRlcmFsIGFjcm9zcyBsaW5lc1xuIg0KICAgICAgICAgICAgaWYgKCRs
aW5lID1+IG17XEdbXCJcJ119c2djKTsNCiAgICAgICAgIyBpdCBpcyBhIGNvbW1lbnQNCiAgICAg
ICAgcmV0dXJuIDA7DQogICAgfQ0KICAgIHJldHVybiAxOw0KfQ0KDQojIEdpdmVuIGEgbGlzdCBv
ZiBzdGF0dXMgdG9rZW5zICgnMCcsICcxJywgJ2FueXRoaW5nIGVsc2UnKSwgZGVjaWRlDQojIHdo
ZXRoZXIgd2UgY2FuIHNhZmVseSBzdXBwcmVzcyBvdXRwdXQuDQpzdWIgY2hlY2tfb3V0IHsNCiAg
ICBmb3JlYWNoIChAXykgew0KICAgICAgICBpZiAoJF8gZXEgJzAnKSB7DQogICAgICAgICAgICBy
ZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gMTsNCn0NCg0KIyBSZW1vdmUg
bGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZS4NCnN1YiB0cmltIHsNCiAgICBteSAkeCA9
IHNoaWZ0Ow0KICAgICR4ID1+IHMvXlxzKy8vczsNCiAgICAkeCA9fiBzL1xzKyQvL3M7DQogICAg
JHg7DQp9DQoNCiMgR2l2ZW4gYW4gZXhwcmVzc2lvbiwgcmV0dXJuIHNpbXBsaWZpZWQgdmVyc2lv
biB0aGVyZW9mIChpLmUuDQojIGRlZmluZWQoWCkgZXhwYW5kZWQgaWYga25vd24pLg0Kc3ViIGV2
YWxfZXhwciB7DQogICAgbG9jYWwgJF8gPSBzaGlmdDsNCiAgICBsb2NhbCAkc2Vlbl9kZWZpbmVk
ID0gJG9wdF9mb3JjZTsNCiAgICBteSAkcmVzdWx0ID0gZXZhbF9jb25kKCk7DQogICAgcmV0dXJu
ICRfIGlmICEvXEdccyokL3NnYyB8fCAkcmVzdWx0ID1+IG17L1wqRVJST1JcKi99IHx8ICEkc2Vl
bl9kZWZpbmVkOw0KICAgICRyZXN1bHQ7DQp9DQoNCiMgUGFyc2UgY29uZGl0aW9uYWwtZXhwcmVz
c2lvbiBwcm9kdWN0aW9uLiBXZSBwcm9jZXNzIHRoZXNlLCBzbw0KIyAiI2lmIGRlZmluZWQoQSkg
PyBkZWZpbmVkKEIpIDogMCIgd29ya3MuDQpzdWIgZXZhbF9jb25kIHsNCiAgICBteSAkYSA9IGV2
YWxfb3IoKTsNCiAgICBpZiAobXtcR1xzKlw/fXNnYykgew0KICAgICAgICAjIGNvbmRpdGlvbmFs
IG9wZXJhdG9yDQogICAgICAgIG15ICRsaHMgPSBldmFsX2NvbmQoKTsNCiAgICAgICAgcmV0dXJu
ICIvKkVSUk9SKi8iIGlmIG5vdCAvXEdccyo6L3NnYzsNCiAgICAgICAgbXkgJHJocyA9IGV2YWxf
Y29uZCgpOw0KICAgICAgICBpZiAoJGEgPX4gL1xELykgew0KICAgICAgICAgICAgcmV0dXJuICIk
YSA/ICRsaHMgOiAkcmhzIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAk
YSA/ICRsaHMgOiAkcmhzOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJu
ICRhOw0KICAgIH0NCn0NCg0KIyBQYXJzZSBsb2dpY2FsLW9yLWV4cHJlc3Npb24uIEV2YWx1YXRl
cyB0byAiMSIgaWYgb25lIHBhcnQga25vd24gdG8NCiMgYmUgZGVmaW5lZCwgIjAiIGlmIGFsbCBw
YXJ0cyBrbm93biB0byBiZSB1bmRlZmluZWQsICJ8fCIgb2YgYWxsDQojIHVua25vd24gdGVybXMg
ZWxzZS4NCnN1YiBldmFsX29yIHsNCiAgICBteSBAdGVybXM7DQogICAgbXkgQGFsbDsNCiAgICBt
eSAkdHJ1ZSA9IDA7DQogICAgZG8gew0KICAgICAgICBteSAkYSA9IGV2YWxfYW5kKCk7DQogICAg
ICAgIHB1c2ggQGFsbCwgJGE7DQogICAgICAgIGlmICgkYSA9fiAvXEQvKSB7DQogICAgICAgICAg
ICBwdXNoIEB0ZXJtcywgJGE7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdHJ1ZSB8
fD0gJGErMDsNCiAgICAgICAgfQ0KICAgIH0gd2hpbGUgKG17XEdccypcfFx8fXNnYyk7DQogICAg
cmV0dXJuIChAYWxsID09IDENCiAgICAgICAgICAgID8gJGFsbFswXQ0KICAgICAgICAgICAgOiAk
dHJ1ZQ0KICAgICAgICAgICAgPyAiMSINCiAgICAgICAgICAgIDogIUB0ZXJtcw0KICAgICAgICAg
ICAgPyAiMCINCiAgICAgICAgICAgIDogQHRlcm1zID09IDENCiAgICAgICAgICAgID8gIjAgfHwg
JHRlcm1zWzBdIg0KICAgICAgICAgICAgOiBqb2luICIgfHwgIiwgQHRlcm1zKTsNCn0NCg0KIyBQ
YXJzZSBsb2dpY2FsLWFuZC1leHByZXNzaW9uLiBFdmFsdWF0ZXMgdG8gIjAiIGlmIG9uZSBwYXJ0
IGtub3duIHRvDQojIGJlIHVuZGVmaW5lZCwgIjEiIGlmIGFsbCBwYXJ0cyBrbm93biB0byBiZSBk
ZWZpbmVkLCAiJiYiIG9mIGFsbA0KIyB1bmtub3duIHRlcm1zIGVsc2UuDQpzdWIgZXZhbF9hbmQg
ew0KICAgIG15IEB0ZXJtczsNCiAgICBteSBAYWxsOw0KICAgIG15ICR0cnVlID0gMTsNCiAgICBk
byB7DQogICAgICAgIG15ICRhID0gZXZhbF9iaXRvcigpOw0KICAgICAgICBwdXNoIEBhbGwsICRh
Ow0KICAgICAgICBpZiAoJGEgPX4gL1xELykgew0KICAgICAgICAgICAgcHVzaCBAdGVybXMsICRh
Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHRydWUgJiY9ICRhKzA7DQogICAgICAg
IH0NCiAgICB9IHdoaWxlIChte1xHXHMqXCZcJn1zZ2MpOw0KICAgIHJldHVybiAoQGFsbCA9PSAx
DQogICAgICAgICAgICA/ICRhbGxbMF0NCiAgICAgICAgICAgIDogISR0cnVlDQogICAgICAgICAg
ICA/ICIwIg0KICAgICAgICAgICAgOiAhQHRlcm1zDQogICAgICAgICAgICA/ICIxIg0KICAgICAg
ICAgICAgOiBAdGVybXMgPT0gMQ0KICAgICAgICAgICAgPyAiMSAmJiAkdGVybXNbMF0iDQogICAg
ICAgICAgICA6IGpvaW4gIiAmJiAiLCBAdGVybXMpOw0KfQ0KDQojIFBhcnNlIGluY2x1c2l2ZS1v
ci1leHByZXNzaW9uLiBUaGlzIGNvbWJpbmVzIHRoZSBrbm93biB0ZXJtcyB0byBvbmUsDQojIHRo
YXQgaXMsIGAjaWYgMSArICgyIHwgMyknIHlpZWxkcyBgI2lmIDEgKyAzJy4NCnN1YiBldmFsX2Jp
dG9yIHsNCiAgICBteSBAdGVybXM7DQogICAgbXkgJHZhbHVlID0gMDsNCiAgICBkbyB7DQogICAg
ICAgIG15ICRhID0gZXZhbF9iaXR4b3IoKTsNCiAgICAgICAgaWYgKCRhID1+IC9cRC8pIHsNCiAg
ICAgICAgICAgIHB1c2ggQHRlcm1zLCAkYTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg
ICR2YWx1ZSB8PSAkYSswOw0KICAgICAgICB9DQogICAgfSB3aGlsZSAobXtcR1xzKlx8KD89JHxb
XnxdKX1zZ2MpOw0KICAgIHB1c2ggQHRlcm1zLCAkdmFsdWUgaWYgJHZhbHVlOw0KICAgIHJldHVy
biAoQHRlcm1zID8gam9pbiAiIHwgIiwgQHRlcm1zIDogIjAiKTsNCn0NCg0KIyBQYXJzZSBleGNs
dXNpdmUtb3ItZXhwcmVzc2lvbi4gVGhpcyBjb21iaW5lcyB0aGUga25vd24gdGVybXMgdG8gb25l
LA0KIyB0aGF0IGlzLCBgI2lmIDEgKyAoMiBeIDMpJyB5aWVsZHMgYCNpZiAxICsgMScuDQpzdWIg
ZXZhbF9iaXR4b3Igew0KICAgIG15IEB0ZXJtczsNCiAgICBteSAkdmFsdWUgPSAwOw0KICAgIGRv
IHsNCiAgICAgICAgbXkgJGEgPSBldmFsX2JpdGFuZCgpOw0KICAgICAgICBpZiAoJGEgPX4gL1xE
Lykgew0KICAgICAgICAgICAgcHVzaCBAdGVybXMsICRhOw0KICAgICAgICB9IGVsc2Ugew0KICAg
ICAgICAgICAgJHZhbHVlIF49ICRhKzA7DQogICAgICAgIH0NCiAgICB9IHdoaWxlIChte1xHXHMq
XF59c2djKTsNCiAgICBwdXNoIEB0ZXJtcywgJHZhbHVlIGlmICR2YWx1ZTsNCiAgICByZXR1cm4g
KEB0ZXJtcyA/IGpvaW4gIiBeICIsIEB0ZXJtcyA6ICIwIik7DQp9DQoNCiMgUGFyc2UgYW5kLWV4
cHJlc3Npb24uIFRoaXMgY29tYmluZXMgdGhlIGtub3duIHRlcm1zIHRvIG9uZSwNCiMgdGhhdCBp
cywgYCNpZiAxICsgKDIgJiAzKScgeWllbGRzIGAjaWYgMSArIDInLg0Kc3ViIGV2YWxfYml0YW5k
IHsNCiAgICBteSBAdGVybXM7DQogICAgbXkgJHZhbHVlID0gfjA7DQogICAgZG8gew0KICAgICAg
ICBteSAkYSA9IGV2YWxfZXEoKTsNCiAgICAgICAgaWYgKCRhID1+IC9cRC8pIHsNCiAgICAgICAg
ICAgIHB1c2ggQHRlcm1zLCAkYTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR2YWx1
ZSAmPSAkYSswOw0KICAgICAgICB9DQogICAgfSB3aGlsZSAobXtcR1xzKlwmKD89JHxbXiZdKX1z
Z2MpOw0KICAgIHB1c2ggQHRlcm1zLCAkdmFsdWUgaWYgJHZhbHVlICE9IH4wOw0KICAgIGlmICgk
dmFsdWUgPT0gMCkgew0KICAgICAgICByZXR1cm4gIjAiOw0KICAgIH0gZWxzZSB7DQogICAgICAg
IHJldHVybiAoQHRlcm1zID8gam9pbiAiICYgIiwgQHRlcm1zIDogIjAiKTsNCiAgICB9DQp9DQoN
CiMgUGFyc2UgZXF1YWxpdHktZXhwcmVzc2lvbi4gVGhvc2UgYXJlIHRvbyBzZWxkb20gaW4gY29u
ZGl0aW9uYWxzDQojIGNvbmNlcm5lZCB3aXRoIGRlZmluZWRuZXNzLCBzbyB3ZSBkb24ndCBldmFs
dWF0ZSB0aGVtLg0Kc3ViIGV2YWxfZXEgew0KICAgIG15ICRhID0gZXZhbF9yZWxhKCk7DQogICAg
d2hpbGUgKG17XEdccyooWz0hXT0pfXNnYykgew0KICAgICAgICAkYSAuPSAiICQxICI7DQogICAg
ICAgICRhIC49IGV2YWxfcmVsYSgpOw0KICAgIH0NCiAgICAkYTsNCn0NCg0KIyBQYXJzZSByZWxh
dGlvbmFsLWV4cHJlc3Npb24uIFRob3NlIGFyZSB0b28gc2VsZG9tIGluIGNvbmRpdGlvbmFscw0K
IyBjb25jZXJuZWQgd2l0aCBkZWZpbmVkbmVzcywgc28gd2UgZG9uJ3QgZXZhbHVhdGUgdGhlbS4N
CnN1YiBldmFsX3JlbGEgew0KICAgIG15ICRhID0gZXZhbF9zaGlmdCgpOw0KICAgIHdoaWxlICht
e1xHXHMqKFs8Pl09PykoPz1bXjw+XSl9c2djKSB7DQogICAgICAgICRhIC49ICIgJDEgIjsNCiAg
ICAgICAgJGEgLj0gZXZhbF9zaGlmdCgpOw0KICAgIH0NCiAgICAkYTsNCn0NCg0KIyBQYXJzZSBz
aGlmdC1leHByZXNzaW9uLiBUaG9zZSBhcmUgdG9vIHNlbGRvbSBpbiBjb25kaXRpb25hbHMNCiMg
Y29uY2VybmVkIHdpdGggZGVmaW5lZG5lc3MsIHNvIHdlIGRvbid0IGV2YWx1YXRlIHRoZW0uDQpz
dWIgZXZhbF9zaGlmdCB7DQogICAgbXkgJGEgPSBldmFsX2FkZCgpOw0KICAgIHdoaWxlIChte1xH
XHMqKDw8fD4+KX1zZ2MpIHsNCiAgICAgICAgJGEgLj0gIiAkMSAiOw0KICAgICAgICAkYSAuPSBl
dmFsX2FkZCgpOw0KICAgIH0NCiAgICAkYTsNCn0NCg0KIyBQYXJzZSBhZGRpdGl2ZS1leHByZXNz
aW9uLiBUaG9zZSBhcmUgdG9vIHNlbGRvbSBpbiBjb25kaXRpb25hbHMNCiMgY29uY2VybmVkIHdp
dGggZGVmaW5lZG5lc3MsIHNvIHdlIGRvbid0IGV2YWx1YXRlIHRoZW0uDQpzdWIgZXZhbF9hZGQg
ew0KICAgIG15ICRhID0gZXZhbF9tdWx0KCk7DQogICAgd2hpbGUgKG17XEdccyooXCt8LSl9c2dj
KSB7DQogICAgICAgICRhIC49ICIgJDEgIjsNCiAgICAgICAgJGEgLj0gZXZhbF9tdWx0KCk7DQog
ICAgfQ0KICAgICRhOw0KfQ0KDQojIFBhcnNlIG11bHRpcGxpY2F0aXZlLWV4cHJlc3Npb24uIFRo
b3NlIGFyZSB0b28gc2VsZG9tIGluIGNvbmRpdGlvbmFscw0KIyBjb25jZXJuZWQgd2l0aCBkZWZp
bmVkbmVzcywgc28gd2UgZG9uJ3QgZXZhbHVhdGUgdGhlbS4NCnN1YiBldmFsX211bHQgew0KICAg
IG15ICRhID0gZXZhbF91bmFyeSgpOw0KICAgIHdoaWxlIChte1xHXHMqKFwqfC98JSl9c2djKSB7
DQogICAgICAgICRhIC49ICIgJDEgIjsNCiAgICAgICAgJGEgLj0gZXZhbF91bmFyeSgpOw0KICAg
IH0NCiAgICAkYTsNCn0NCg0KIyBQYXJzZSB1bmFyeS1leHByZXNzaW9uLiBJbiBwcmVwcm9jZXNz
b3IgZGVmaW5lcywgdGhpcyBhcmU6DQojIC0gIi1leHByIiwgIitleHByIiwgIiFleHByIiwgIn5l
eHByIiAoaGFuZGxlZCBiZWNhdXNlIHRoZXkncmUgc2ltcGxlKQ0KIyAtICJkZWZpbmVkKFNZTSki
LCAiZGVmaW5lZCBTWU0iIChoYW5kbGVkKQ0KIyAtIG51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBk
ZWNpbWFsDQojIC0gcGFyZW50aGVzaXplZCBleHByZXNzaW9ucw0Kc3ViIGV2YWxfdW5hcnkgew0K
ICAgIG17XEdccyp9c2djOw0KICAgIGlmIChte1xHIX1zZ2MpIHsNCiAgICAgICAgbXkgJGFyZyA9
IGV2YWxfdW5hcnkoKTsNCiAgICAgICAgaWYgKCRhcmcgPX4gL1xELykgew0KICAgICAgICAgICAg
cmV0dXJuICIhJGFyZyI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZXR1cm4gJGFy
ZyA/ICIwIiA6ICIxIjsNCiAgICAgICAgfQ0KICAgIH0gZWxzaWYgKG17XEd+fXNnYykgew0KICAg
ICAgICBteSAkYXJnID0gZXZhbF91bmFyeSgpOw0KICAgICAgICBpZiAoJGFyZyA9fiAvXEQvKSB7
DQogICAgICAgICAgICByZXR1cm4gIn4kYXJnIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg
ICAgIHJldHVybiB+JGFyZzsNCiAgICAgICAgfQ0KICAgIH0gZWxzaWYgKG17XEdcK31zZ2MpIHsN
CiAgICAgICAgcmV0dXJuIGV2YWxfdW5hcnkoKTsNCiAgICB9IGVsc2lmIChte1xHXC19c2djKSB7
DQogICAgICAgIG15ICRhcmcgPSBldmFsX3VuYXJ5KCk7DQogICAgICAgIGlmICgkYXJnID1+IC9c
RC8pIHsNCiAgICAgICAgICAgIHJldHVybiAiLSAkYXJnIjsNCiAgICAgICAgfSBlbHNlIHsNCiAg
ICAgICAgICAgIHJldHVybiAtJGFyZzsNCiAgICAgICAgfQ0KICAgIH0gZWxzaWYgKG17XEdkZWZp
bmVkXHMqXChccyooXHcrKVxzKlwpfXNnYyB8fCBte1xHXHMqZGVmaW5lZFxzKyhcdyspfXNnYykg
ew0KICAgICAgICBpZiAoZXhpc3RzICRkZWZpbmVkeyQxfSkgew0KICAgICAgICAgICAgJHNlZW5f
ZGVmaW5lZCA9IDE7DQogICAgICAgICAgICByZXR1cm4gJGRlZmluZWR7JDF9Ow0KICAgICAgICB9
IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICJkZWZpbmVkKCQxKSI7DQogICAgICAgIH0NCiAg
ICB9IGVsc2lmIChte1xHMFt4WF0oWzAtOWEtZkEtRl0rKVt1VWxMXSp9c2djKSB7DQogICAgICAg
IHJldHVybiBoZXggJDE7DQogICAgfSBlbHNpZiAobXtcRzAoWzAtN10rKVt1VWxMXSp9c2djKSB7
DQogICAgICAgIHJldHVybiBvY3QgJDE7DQogICAgfSBlbHNpZiAobXtcRyhbMC05XSspW3VVbExd
Kn1zZ2MpIHsNCiAgICAgICAgcmV0dXJuICQxOw0KICAgIH0gZWxzaWYgKG17XEcoXHcrKX1zZ2Mp
IHsNCiAgICAgICAgaWYgKG17XEdccyg/PVwoKX1zZ2MpIHsNCiAgICAgICAgICAgICMgZnVuY3Rp
b24tbGlrZSBtYWNybw0KICAgICAgICAgICAgcmV0dXJuICIvKkVSUk9SKi8iOw0KICAgICAgICB9
IGVsc2lmIChleGlzdHMgJGRlZmluZWR7JDF9KSB7DQogICAgICAgICAgICAjIG9iamVjdC1saWtl
IG1hY3JvIHdoaWNoIGlzIGtub3duIHRvIHVzDQogICAgICAgICAgICAkc2Vlbl9kZWZpbmVkID0g
MTsNCiAgICAgICAgICAgIHJldHVybiAkZGVmaW5lZHskMX07DQogICAgICAgIH0gZWxzaWYgKCRv
cHRfb3B0aW1pc3RpYykgew0KICAgICAgICAgICAgIyBvYmplY3QtbGlrZSBtYWNybyB3aGljaCBp
cyAobWF5YmUpIGRlZmluZWQNCiAgICAgICAgICAgIHJldHVybiAkMTsNCiAgICAgICAgfSBlbHNl
IHsNCiAgICAgICAgICAgIHJldHVybiAiLypFUlJPUiovIjsNCiAgICAgICAgfQ0KICAgIH0gZWxz
aWYgKG17XEdcKH1zZ2MpIHsNCiAgICAgICAgbXkgJGFyZyA9IGV2YWxfY29uZCgpOw0KICAgICAg
ICByZXR1cm4gIi8qRVJST1IqLyIgaWYgIW17XEdccypcKX1zZ2M7DQogICAgICAgIGlmICgkYXJn
ID1+IC9cRC8pIHsNCiAgICAgICAgICAgIHJldHVybiAiKCRhcmcpIjsNCiAgICAgICAgfSBlbHNl
IHsNCiAgICAgICAgICAgIHJldHVybiAkYXJnOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAg
ICAgICAgcmV0dXJuICIvKkVSUk9SKi8iOw0KICAgIH0NCn0NCg0Kc3ViIGRlYnVnIHsNCiAgICBw
cmludCAifCAiLCBzaGlmdCwgIjpcbnwgJF9cbnwgIiwgIiAiIHggcG9zKCRfKSwgIl5cbiI7DQp9
DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4927</attachid>
            <date>2005-12-04 02:28:00 -0800</date>
            <delta_ts>2005-12-04 02:28:00 -0800</delta_ts>
            <desc>Diff from the original (http://www.phost.de/~stefan/Files/partpp.pl) partpp.pl (for the curious)</desc>
            <filename>partpp.patch</filename>
            <type>text/plain</type>
            <size>4712</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">LS0tIG9yaWdpbmFsX3BhcnRwcC5wbAkyMDA1LTEyLTA0IDAyOjI0OjEwLjAwMDAwMDAwMCAtMDgw
MAorKysgcGFydHBwLnBsCTIwMDUtMTItMDQgMDI6MDc6MDAuMDAwMDAwMDAwIC0wODAwCkBAIC02
MSw2ICs2MSw3IEBACiB1c2UgdmFycyBxd3sgJWRlZmluZWQgQGZpbGVzICRvcHRfb3B0aW1pc3Rp
YyAkb3B0X2RlZmluZXMgQGV4cHJzDQogICAgICAgICAgICAgICAgICAkb3B0X2ZvcmNlDQogICAg
ICAgICAgICAgICAgICAkc2Vlbl9kZWZpbmVkIH07DQordXNlIFNwYWNpbmdIZXVyaXN0aWNzOw0K
IA0KICRvcHRfb3B0aW1pc3RpYyA9IDA7DQogJG9wdF9kZWZpbmVzID0gMDsNCkBAIC0xNTgsNiAr
MTU5LDggQEAKICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAkdG90YWwgLj0gJGxpbmU7DQog
ICAgICAgICB9IHdoaWxlICghIGlzX2NvbXBsZXRlKCR0b3RhbCkpOw0KKyAgICAgICAgDQorICAg
ICAgICBuZXh0IGlmIChpc09ubHlXaGl0ZVNwYWNlKCR0b3RhbCkpOw0KIA0KICAgICAgICAgIyBy
ZW1vdmUgY29tbWVudHMgdG8gc2VlIGlmIGl0J3MgYSBwcCBjb21tYW5kDQogICAgICAgICBteSAk
c2luZ2xlX2xpbmUgPSAkdG90YWw7ICRzaW5nbGVfbGluZSA9fiBzL1xcXG4vL3NnOw0KQEAgLTE5
MCw3ICsxOTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywg
JG91dF9lbmFibGVkOw0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAndW5rbm93bic7DQotICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbnQgJG91dCAkdG90YWw7DQorICAgICAgICAgICAgICAgICAgICAgICAg
YXBwbHlTcGFjaW5nSGV1cmlzdGljc0FuZFByaW50KCRvdXQsICR0b3RhbCk7DQogICAgICAgICAg
ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAg
ICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAxOw0KQEAgLTIwMiw3ICsyMDUsNyBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZzdGFjaywgJG91dF9lbmFibGVkOw0KICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBp
ZnN0YWNrLCAndW5rbm93bic7DQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgJG91dCAk
dG90YWw7DQorICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlTcGFjaW5nSGV1cmlzdGljc0Fu
ZFByaW50KCRvdXQsICR0b3RhbCk7DQogICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAx
Ow0KQEAgLTIxMywxNSArMjE2LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0
ICF+IC9cRC8pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0X2VuYWJsZWQgPSAoJHJl
c3VsdCA/ICIxIiA6ICIwIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaGlmdCBAaWZz
dGFjaywgJG91dF9lbmFibGVkOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yaW5nTGlu
ZSgkdG90YWwpOw0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAndW5rbm93bic7DQotICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnQgJG91dCAiI2lmICRyZXN1bHRcbiI7DQorICAgICAgICAgICAgICAgICAg
ICAgICAgYXBwbHlTcGFjaW5nSGV1cmlzdGljc0FuZFByaW50KCRvdXQsICIjaWYgJHJlc3VsdFxu
Iik7DQogICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIH0gZWxzZSB7DQog
ICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBpZnN0YWNrLCAxOw0KICAgICAgICAgICAgICAg
ICB9DQogICAgICAgICAgICAgfSBlbHNpZiAoJGNtIGVxICdlbGlmJykgew0KLSAgICAgICAgICAg
ICAgICBkaWUgIiNlbGlmIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiOw0KKyAgICAgICAgICAgICAg
ICBwcmludCBTVERFUlIgIiNlbGlmIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIGlnbm9yaW5nLlxu
IjsNCisgICAgICAgICAgICAgICAgYXBwbHlTcGFjaW5nSGV1cmlzdGljc0FuZFByaW50KCRvdXQs
ICR0b3RhbCk7DQogICAgICAgICAgICAgfSBlbHNpZiAoJGNtIGVxICdlbHNlJykgew0KICAgICAg
ICAgICAgICAgICBkaWUgIiNlbHNlIHdpdGhvdXQgI2lmIg0KICAgICAgICAgICAgICAgICAgICAg
aWYgISBAaWZzdGFjazsNCkBAIC0yMzIsNyArMjM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAg
ICAgICRpZnN0YWNrWzBdID0gJzAnOw0KICAgICAgICAgICAgICAgICAgICAgICAgICRvdXRfZW5h
YmxlZCA9IDA7DQogICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHByaW50ICRvdXQgJHRvdGFsOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGx5U3BhY2luZ0hldXJpc3RpY3NBbmRQcmludCgkb3V0LCAkdG90YWwpOw0KICAgICAgICAgICAg
ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAg
ICAgaWYgKCRpZnN0YWNrWzBdIGVxICcwJykgew0KQEAgLTI0Niw3ICsyNTEsNyBAQAogICAgICAg
ICAgICAgICAgIG15ICR3aHkgPSBzaGlmdCBAaWZzdGFjazsNCiAgICAgICAgICAgICAgICAgJG91
dF9lbmFibGVkID0gY2hlY2tfb3V0IChAaWZzdGFjayk7DQogICAgICAgICAgICAgICAgIGlmICgk
b3V0X2VuYWJsZWQgJiYgKCR3aHkgbmUgJzAnICYmICR3aHkgbmUgJzEnKSkgew0KLSAgICAgICAg
ICAgICAgICAgICAgcHJpbnQgJG91dCAkdG90YWw7DQorICAgICAgICAgICAgICAgICAgICBhcHBs
eVNwYWNpbmdIZXVyaXN0aWNzQW5kUHJpbnQoJG91dCwgJHRvdGFsKTsNCiAgICAgICAgICAgICAg
ICAgfQ0KICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgIGlmICgkY20gZXEg
J2RlZmluZScpIHsNCkBAIC0yNTcsMTkgKzI2MiwyNSBAQAogICAgICAgICAgICAgICAgICAgICBp
ZiAoJG91dF9lbmFibGVkICYmICRvcHRfZGVmaW5lcyAmJiAkYXJnID1+IG17XihcdyspfSkgew0K
ICAgICAgICAgICAgICAgICAgICAgICAgICRkZWZpbmVkeyQxfSA9IDA7DQogICAgICAgICAgICAg
ICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRjbSBuZSAnaW5jbHVkZScgJiYg
JGNtIG5lICdwcmFnbWEnICYmICRjbSBuZSAnZXJyb3InKSB7DQorICAgICAgICAgICAgICAgIH0g
ZWxzaWYgKCRjbSBuZSAnaW5jbHVkZScgJiYgJGNtIG5lICdwcmFnbWEnICYmICRjbSBuZSAnZXJy
b3InICYmICRjbSBuZSAnaW1wb3J0JyAmJiAkY20gbmUgJ3dhcm5pbmcnKSB7DQogICAgICAgICAg
ICAgICAgICAgICBkaWUgIiRfOiQuOiB1bmtub3duIHByZXByb2Nlc3NvciBjb21tYW5kICckY20n
XG4iOw0KICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHByaW50ICRvdXQgJHRv
dGFsDQorICAgICAgICAgICAgICAgIGFwcGx5U3BhY2luZ0hldXJpc3RpY3NBbmRQcmludCgkb3V0
LCAkdG90YWwpDQogICAgICAgICAgICAgICAgICAgICBpZiAkb3V0X2VuYWJsZWQ7DQogICAgICAg
ICAgICAgfQ0KICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwcmludCAkb3V0ICR0b3Rh
bA0KKyAgICAgICAgICAgIGFwcGx5U3BhY2luZ0hldXJpc3RpY3NBbmRQcmludCgkb3V0LCAkdG90
YWwpDQogICAgICAgICAgICAgICAgIGlmICRvdXRfZW5hYmxlZDsNCiAgICAgICAgIH0NCisJCWlm
ICgkb3V0X2VuYWJsZWQpIHsNCisJCQlzZXRQcmV2aW91c0FsbG93ZWRMaW5lKCR0b3RhbCk7DQor
CQl9IGVsc2Ugew0KKwkJCWlnbm9yaW5nTGluZSgkdG90YWwpOw0KKwkJfQ0KICAgICB9DQogICAg
IHByaW50ZiAiJF86JC46ICVkIHVudGVybWluYXRlZCBjb25kaXRpb25hbChzKSBzdGlsbCBvcGVu
XG4iLCBzY2FsYXIgQGlmc3RhY2sNCiAgICAgICAgIGlmIEBpZnN0YWNrOw0KKyAgICBwcmludFBl
bmRpbmdFbXB0eUxpbmVzKCRvdXQpOw0KIH0NCiANCiAjIHRydWUgaWZmICRfWzBdIGlzIGEgY29t
cGxldGUgbGluZS4gQ29tcGxldGUgbGluZXMgbWF5IG5vdCBjb250YWluDQpAQCAtNTUyLDkgKzU2
MywxMCBAQAogICAgICAgICBpZiAobXtcR1xzKD89XCgpfXNnYykgew0KICAgICAgICAgICAgICMg
ZnVuY3Rpb24tbGlrZSBtYWNybw0KICAgICAgICAgICAgIHJldHVybiAiLypFUlJPUiovIjsNCi0g
ICAgICAgIH0gZWxzaWYgKGV4aXN0cyAkZGVmaW5lZHskMX0gJiYgISRkZWZpbmVkeyQxfSkgew0K
LSAgICAgICAgICAgICMgb2JqZWN0LWxpa2UgbWFjcm8gd2hpY2ggaXMga25vd24gdG8gbm90IGJl
IGRlZmluZWQNCi0gICAgICAgICAgICByZXR1cm4gIjAiOw0KKyAgICAgICAgfSBlbHNpZiAoZXhp
c3RzICRkZWZpbmVkeyQxfSkgew0KKyAgICAgICAgICAgICMgb2JqZWN0LWxpa2UgbWFjcm8gd2hp
Y2ggaXMga25vd24gdG8gdXMNCisgICAgICAgICAgICAkc2Vlbl9kZWZpbmVkID0gMTsNCisgICAg
ICAgICAgICByZXR1cm4gJGRlZmluZWR7JDF9Ow0KICAgICAgICAgfSBlbHNpZiAoJG9wdF9vcHRp
bWlzdGljKSB7DQogICAgICAgICAgICAgIyBvYmplY3QtbGlrZSBtYWNybyB3aGljaCBpcyAobWF5
YmUpIGRlZmluZWQNCiAgICAgICAgICAgICByZXR1cm4gJDE7DQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4928</attachid>
            <date>2005-12-04 02:28:48 -0800</date>
            <delta_ts>2005-12-04 02:28:48 -0800</delta_ts>
            <desc>SpacingHeuristics.pm perl module</desc>
            <filename>SpacingHeuristics.pm</filename>
            <type>text/x-perl-script</type>
            <size>1708</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyBBIHNtYWxsIG1vZHVsZSBJIHdyb3RlIGZvciBoZWxwaW5nIHJlbW92ZSBleHRyYSBibGFuayBs
aW5lcwojIGZyb20gZmlsZXMgd2hlbiBwcm9jZXNzaW5nLgoKQkVHSU4gewogICB1c2UgRXhwb3J0
ZXIgICAoKTsKICAgb3VyICgkVkVSU0lPTiwgQElTQSwgQEVYUE9SVCwgQEVYUE9SVF9PSywgJUVY
UE9SVF9UQUdTKTsKICAgJFZFUlNJT04gICAgID0gMS4wMDsKICAgQElTQSAgICAgICAgID0gcXco
RXhwb3J0ZXIpOwogICBARVhQT1JUICAgICAgPSBxdygmcmVzZXRTcGFjaW5nSGV1cmlzdGljcyAm
aXNPbmx5V2hpdGVTcGFjZSAmYXBwbHlTcGFjaW5nSGV1cmlzdGljc0FuZFByaW50ICZzZXRQcmV2
aW91c0FsbG93ZWRMaW5lICZzZXRQcmV2aW91c0FsbG93ZWRMaW5lICZwcmludFBlbmRpbmdFbXB0
eUxpbmVzICZpZ25vcmluZ0xpbmUpOwogICAlRVhQT1JUX1RBR1MgPSAoKTsKICAgQEVYUE9SVF9P
SyAgID0gKCk7Cn0KCm91ciBARVhQT1JUX09LOwoKbXkgJGp1c3RGb3VuZEVtcHR5TGluZSA9IDA7
Cm15ICRwcmV2aW91c0xpbmVXYXNEaXNhbGxvd2VkID0gMDsKbXkgJHByZXZpb3VzQWxsb3dlZExp
bmUgPSAiIjsKbXkgJHBlbmRpbmdFbXB0eUxpbmVzID0gIiI7CgpzdWIgcmVzZXRTcGFjaW5nSGV1
cmlzdGljcwp7CiAgICAkanVzdEZvdW5kRW1wdHlMaW5lID0gMDsKICAgICRwcmV2aW91c0xpbmVX
YXNEaXNhbGxvd2VkID0gMDsKICAgICRwcmV2aW91c0FsbG93ZWRMaW5lID0gIiI7CiAgICAkcGVu
ZGluZ0VtcHR5TGluZXMgPSAiIjsKfQoKc3ViIGlzT25seVdoaXRlU3BhY2UKewogICAgbXkgJGxp
bmUgPSBzaGlmdDsKICAgIG15ICRpc09ubHlXaGl0ZVNwYWNlID0gKCRsaW5lID1+IG0vXlxzKyQv
KTsKICAgICRwZW5kaW5nRW1wdHlMaW5lcyAuPSAkbGluZSBpZiAoJGlzT25seVdoaXRlU3BhY2Up
OwogICAgcmV0dXJuICRpc09ubHlXaGl0ZVNwYWNlOwp9CgpzdWIgYXBwbHlTcGFjaW5nSGV1cmlz
dGljc0FuZFByaW50CnsKICAgIG15ICgkb3V0LCAkbGluZSkgPSBAXzsKICAgIAogICAgcHJpbnRQ
ZW5kaW5nRW1wdHlMaW5lcygkb3V0LCAkbGluZSk7CiAgICAkcHJldmlvdXNMaW5lV2FzRGlzYWxs
b3dlZCA9IDA7CiAgICBwcmludCAkb3V0ICRsaW5lOwp9CgpzdWIgc2V0UHJldmlvdXNBbGxvd2Vk
TGluZQp7CiAgICBteSAkbGluZSA9IHNoaWZ0OwogICAgJHByZXZpb3VzQWxsb3dlZExpbmUgPSAk
bGluZTsKfQoKc3ViIHByaW50UGVuZGluZ0VtcHR5TGluZXMKewogICAgbXkgJG91dCA9IHNoaWZ0
OwogICAgbXkgJGxpbmUgPSBzaGlmdDsKICAgIGlmICgkcHJldmlvdXNMaW5lV2FzRGlzYWxsb3dl
ZCkgewogICAgICAgIGlmICghKCRwZW5kaW5nRW1wdHlMaW5lcyBlcSAiIikgJiYgISgkcHJldmlv
dXNBbGxvd2VkTGluZSA9fiBtL3tccyokLykgJiYgISgkbGluZSA9fiBtL15ccyp9LykpIHsKICAg
ICAgICAgICAgJHBlbmRpbmdFbXB0eUxpbmVzID0gIlxuIjsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAkcGVuZGluZ0VtcHR5TGluZXMgPSAiIjsKICAgICAgICB9CiAgICB9CiAgICBwcmlu
dCAkb3V0ICRwZW5kaW5nRW1wdHlMaW5lczsKICAgICRwZW5kaW5nRW1wdHlMaW5lcyA9ICIiOwp9
CgpzdWIgaWdub3JpbmdMaW5lCnsKICAgICMgbXkgJGxpbmUgPSBzaGlmdDsgIyBpZ25vcmluZyBp
bnB1dCBhcmd1bWVudAogICAgJHByZXZpb3VzTGluZVdhc0Rpc2FsbG93ZWQgPSAxOwp9CgoxOw==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4929</attachid>
            <date>2005-12-04 02:29:36 -0800</date>
            <delta_ts>2005-12-04 03:21:30 -0800</delta_ts>
            <desc>completely script generated patch to remove APPLE_CHANGES and KHTML_NO_CPP_DOM (and whitespace)</desc>
            <filename>cleanup.patch</filename>
            <type>text/plain</type>
            <size>166024</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2todG1sX3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2todG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM2
MgpkaWZmIC1wIC11IC1yMS4zNjIga2h0bWwva2h0bWxfcGFydC5jcHAKLS0tIGtodG1sL2todG1s
X3BhcnQuY3BwCTIgRGVjIDIwMDUgMDM6NDg6MDMgLTAwMDAJMS4zNjIKKysrIGtodG1sL2todG1s
X3BhcnQuY3BwCTQgRGVjIDIwMDUgMTA6MjQ6MjkgLTAwMDAKQEAgLTEwNywxMCArMTA3LDYgQEAg
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2luY2x1ZGUgImtodG1scGFydF9wLmgiCiAK
LSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotI2luY2x1ZGUgImRvbS9odG1sX2RvY3VtZW50
LmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnROYW1lczsKQEAgLTQ5MCwxMSArNDg2LDYgQEAgdm9p
ZCBLSFRNTFBhcnQ6OnN0b3BMb2FkaW5nKGJvb2wgc2VuZFVubAogCiAgIC8vIFN0b3AgYW55IHN0
YXJ0ZWQgcmVkaXJlY3Rpb25zIGFzIHdlbGwhISAoREEpCiAgIGNhbmNlbFJlZGlyZWN0aW9uKCk7
Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotICAvLyBudWxsIG5vZGUgYWN0aXZhdGVk
LgotICBlbWl0IG5vZGVBY3RpdmF0ZWQoTm9kZSgpKTsKLSNlbmRpZgogfQogCiBib29sIEtIVE1M
UGFydDo6Y2xvc2VVUkwoKQpAQCAtNjA2LDE1ICs1OTcsNiBAQCBRVmFyaWFudCBLSFRNTFBhcnQ6
OmV4ZWN1dGVTY3JpcHQoIGNvbnN0CiAvL0VuYWJsZSB0aGlzIHRvIHNlZSBhbGwgSlMgc2NyaXB0
cyBiZWluZyBleGVjdXRlZAogLy8jZGVmaW5lIEtKU19WRVJCT1NFCiAKLSNpZiAhS0hUTUxfTk9f
Q1BMVVNQTFVTX0RPTQotCi1RVmFyaWFudCBLSFRNTFBhcnQ6OmV4ZWN1dGVTY3JpcHQoIGNvbnN0
IERPTTo6Tm9kZSAmbiwgY29uc3QgUVN0cmluZyAmc2NyaXB0LCBib29sIGZvcmNlVXNlckdlc3R1
cmUgKQotewotICAgIHJldHVybiBleGVjdXRlU2NyaXB0KG4uaGFuZGxlKCksIHNjcmlwdCwgZm9y
Y2VVc2VyR2VzdHVyZSk7Ci19Ci0KLSNlbmRpZgotCiBRVmFyaWFudCBLSFRNTFBhcnQ6OmV4ZWN1
dGVTY3JpcHQoIERPTTo6Tm9kZUltcGwgKm4sIGNvbnN0IFFTdHJpbmcgJnNjcmlwdCwgYm9vbCBm
b3JjZVVzZXJHZXN0dXJlICkKIHsKICNpZmRlZiBLSlNfVkVSQk9TRQpAQCAtMTU5MywxNiArMTU3
NSw2IEBAIHZvaWQgS0hUTUxQYXJ0OjpzZXRPbmx5TG9jYWxSZWZlcmVuY2VzKGIKICAgZC0+bV9v
bmx5TG9jYWxSZWZlcmVuY2VzID0gZW5hYmxlOwogfQogCi0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQ
TFVTX0RPTQotCi1RU3RyaW5nIEtIVE1MUGFydDo6dGV4dChjb25zdCBET006OlJhbmdlICZyKSBj
b25zdAotewotICAgIHJldHVybiBwbGFpblRleHQoci5oYW5kbGUoKSk7Ci19Ci0KLSNlbmRpZgot
CiBRU3RyaW5nIEtIVE1MUGFydDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
cGxhaW5UZXh0KHNlbGVjdGlvbigpLnRvUmFuZ2UoKS5nZXQoKSk7CkBAIC0yMjc4LDE2ICsyMjUw
LDYgQEAgS0hUTUxQYXJ0ICpLSFRNTFBhcnQ6OnBhcmVudFBhcnQoKSBjb25zdAogICByZXR1cm4g
KEtIVE1MUGFydCAqKXBhcmVudCgpOwogfQogCi0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RP
TQotCi1ET006Ok5vZGUgS0hUTUxQYXJ0Ojpub2RlVW5kZXJNb3VzZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGQtPm1fdmlldy0+bm9kZVVuZGVyTW91c2UoKTsKLX0KLQotI2VuZGlmCi0KIHZvaWQg
S0hUTUxQYXJ0OjplbWl0U2VsZWN0aW9uQ2hhbmdlZCgpCiB7CiB9CkBAIC0yOTgxLDI1ICsyOTQz
LDYgQEAgdm9pZCBLSFRNTFBhcnQ6OnNsb3RQYXJ0UmVtb3ZlZCggS1BhcnRzOgogICAgICAgICBk
LT5tX2FjdGl2ZUZyYW1lID0gMEw7CiB9CiAKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9N
Ci0KLXZvaWQgS0hUTUxQYXJ0OjpzZXRBY3RpdmVOb2RlKGNvbnN0IERPTTo6Tm9kZSAmbm9kZSkK
LXsKLSAgICBpZiAoIWQtPm1fZG9jIHx8ICFkLT5tX3ZpZXcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFNldCB0aGUgZG9jdW1lbnQncyBhY3RpdmUgbm9kZQotICAgIGQtPm1fZG9jLT5zZXRG
b2N1c05vZGUobm9kZS5oYW5kbGUoKSk7Ci19Ci0KLURPTTo6Tm9kZSBLSFRNTFBhcnQ6OmFjdGl2
ZU5vZGUoKSBjb25zdAotewotICAgIHJldHVybiBET006Ok5vZGUoZC0+bV9kb2M/ZC0+bV9kb2Mt
PmZvY3VzTm9kZSgpOjApOwotfQotCi0jZW5kaWYKLQogRE9NOjpFdmVudExpc3RlbmVyICpLSFRN
TFBhcnQ6OmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKCBRU3RyaW5nIGNvZGUsIE5vZGVJbXBsICpu
b2RlICkKIHsKICAgS0pTUHJveHkgKnByb3h5ID0galNjcmlwdCgpOwpJbmRleDoga2h0bWwva2h0
bWxfcGFydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2to
dG1sX3BhcnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDAKZGlmZiAtcCAtdSAtcjEuMTQw
IGtodG1sL2todG1sX3BhcnQuaAotLS0ga2h0bWwva2h0bWxfcGFydC5oCTIxIE5vdiAyMDA1IDA0
OjAxOjUxIC0wMDAwCTEuMTQwCisrKyBraHRtbC9raHRtbF9wYXJ0LmgJNCBEZWMgMjAwNSAxMDoy
NDoyOSAtMDAwMApAQCAtMjMwLDI2ICsyMzAsNiBAQCBwdWJsaWM6CiAgIHZvaWQgc3RvcExvYWRp
bmcoYm9vbCBzZW5kVW5sb2FkID0gZmFsc2UpOwogICB2aXJ0dWFsIGJvb2wgY2xvc2VVUkwoKTsK
IAotCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAvKioKLSAgICogUmV0dXJucyBh
IHJlZmVyZW5jZSB0byB0aGUgRE9NIEhUTUwgZG9jdW1lbnQgKGZvciBub24tSFRNTCBkb2N1bWVu
dHMsIHJldHVybnMgbnVsbCkKLSAgICovCi0gIERPTTo6SFRNTERvY3VtZW50IGh0bWxEb2N1bWVu
dCgpIGNvbnN0OwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBET00g
ZG9jdW1lbnQuCi0gICAqLwotICBET006OkRvY3VtZW50IGRvY3VtZW50KCkgY29uc3Q7Ci0KLSAg
LyoqCi0gICAqIFJldHVybnMgdGhlIG5vZGUgdGhhdCBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLgot
ICAgKi8KLSAgRE9NOjpOb2RlIGFjdGl2ZU5vZGUoKSBjb25zdDsKLQotI2VuZGlmCi0KICAgLyoq
CiAgICAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBAcmVmIEtQYXJ0czo6QnJvd3NlckV4dGVu
c2lvbi4KICAgICovCkBAIC0yOTYsOSArMjc2LDYgQEAgcHVibGljOgogICAvKioKICAgICogU2Ft
ZSBhcyBhYm92ZSBleGNlcHQgdGhlIE5vZGUgcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlICd0aGlz
JyB2YWx1ZS4KICAgICovCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLSAgUVZhcmlhbnQg
ZXhlY3V0ZVNjcmlwdCggY29uc3QgRE9NOjpOb2RlICZuLCBjb25zdCBRU3RyaW5nICZzY3JpcHQs
IGJvb2wgZm9yY2VVc2VyR2VzdHVyZSA9IGZhbHNlICk7Ci0jZW5kaWYKICAgUVZhcmlhbnQgZXhl
Y3V0ZVNjcmlwdCggRE9NOjpOb2RlSW1wbCAqbiwgY29uc3QgUVN0cmluZyAmc2NyaXB0LCBib29s
IGZvcmNlVXNlckdlc3R1cmUgPSBmYWxzZSApOwogCiAgIC8qKgpAQCAtNjgxLDEzICs2NTgsNiBA
QCBwdWJsaWM6CiAgICAqLwogICBpbnQgeFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uKCkg
Y29uc3Q7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotICAvKioKLSAgICogUmV0dXJu
cyB0aGUgdGV4dCBmb3IgYSBwYXJ0IG9mIHRoZSBkb2N1bWVudC4KLSAgICovCi0gIFFTdHJpbmcg
dGV4dChjb25zdCBET006OlJhbmdlICYpIGNvbnN0OwotI2VuZGlmCi0KICAgLyoqCiAgICAqIEhh
cyB0aGUgdXNlciBzZWxlY3RlZCBhbnl0aGluZz8KICAgICoKQEAgLTc3NiwxNSArNzQ2LDYgQEAg
cHVibGljOgogCiAgIHZpcnR1YWwgdm9pZCB0b2tlbml6ZXJQcm9jZXNzZWREYXRhKCkge307CiAK
LSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBA
cCBOb2RlIGN1cnJlbnRseSB1bmRlciB0aGUgbW91c2UKLSAgICovCi0gIERPTTo6Tm9kZSBub2Rl
VW5kZXJNb3VzZSgpIGNvbnN0OwotCi0jZW5kaWYKLQogICAvKioKICAgICogQGludGVybmFsCiAg
ICAqLwpAQCAtOTQwLDE5ICs5MDEsNiBAQCBzaWduYWxzOgogICAgKi8KICAgdm9pZCBzZWxlY3Rp
b25DaGFuZ2VkKCk7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gIC8qKgotICAg
KiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYW4gZWxlbWVudCByZXRyaWV2ZXMgdGhlCi0g
ICAqIGtleWJvYXJkIGZvY3VzLiBOb3RlIHRoYXQgdGhlIHNpZ25hbCBhcmd1bWVudCBjYW4gYmUK
LSAgICogYSBudWxsIG5vZGUgaWYgbm8gZWxlbWVudCBpcyBhY3RpdmUsIG1lYW5pbmcgYSBub2Rl
Ci0gICAqIGhhcyBleHBsaWNpdGx5IGJlZW4gZGVhY3RpdmF0ZWQgd2l0aG91dCBhIG5ldyBvbmUK
LSAgICogYmVjb21pbmcgYWN0aXZlLgotICAgKi8KLSAgdm9pZCBub2RlQWN0aXZhdGVkKGNvbnN0
IERPTTo6Tm9kZSAmKTsKLQotI2VuZGlmCi0KIHB1YmxpYzoKIAogICAvKioKQEAgLTEwMDksMjEg
Kzk1Nyw2IEBAIHByb3RlY3RlZDoKIAogcHVibGljIHNsb3RzOgogCi0jaWYgIUtIVE1MX05PX0NQ
TFVTUExVU19ET00KLQotICAvKioKLSAgICogU2V0cyB0aGUgZm9jdXNzZWQgbm9kZSBvZiB0aGUg
ZG9jdW1lbnQgdG8gdGhlIHNwZWNpZmllZCBub2RlLiBJZiB0aGUgbm9kZSBpcyBhIGZvcm0gY29u
dHJvbCwgdGhlIGNvbnRyb2wgd2lsbAotICAgKiByZWNlaXZlIGZvY3VzIGluIHRoZSBzYW1lIHdh
eSB0aGF0IGl0IHdvdWxkIGlmIHRoZSB1c2VyIGhhZCBjbGlja2VkIG9uIGl0IG9yIHRhYmJlZCB0
byBpdCB3aXRoIHRoZSBrZXlib2FyZC4gRm9yCi0gICAqIG1vc3Qgb3RoZXIgdHlwZXMgb2YgZWxl
bWVudHMsIHRoZXJlIGlzIG5vIHZpc3VsIGluZGljdGlvbiBvZiB3aGV0aGVyIG9yIG5vdCB0aGV5
IGFyZSBmb2N1c3NlZC4KLSAgICoKLSAgICogU2VlIEByZWYgYWN0aXZlTm9kZQotICAgKgotICAg
KiBAcGFyYW0gbm9kZSBUaGUgbm9kZSB0byBmb2N1cwotICAgKi8KLSAgdm9pZCBzZXRBY3RpdmVO
b2RlKGNvbnN0IERPTTo6Tm9kZSAmbm9kZSk7Ci0KLSNlbmRpZgotCiAgIC8qKgogICAgKiBTdG9w
cyBhbGwgYW5pbWF0ZWQgaW1hZ2VzIG9uIHRoZSBjdXJyZW50IGFuZCBjaGlsZCBwYWdlcwogICAg
Ki8KSW5kZXg6IGtodG1sL2todG1sdmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwva2h0bWx2aWV3LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NTUKZGlmZiAtcCAtdSAtcjEuMTU1IGtodG1sL2todG1sdmlldy5jcHAKLS0tIGtodG1sL2todG1s
dmlldy5jcHAJMiBEZWMgMjAwNSAwMzo0ODowNCAtMDAwMAkxLjE1NQorKysga2h0bWwva2h0bWx2
aWV3LmNwcAk0IERlYyAyMDA1IDEwOjI0OjMwIC0wMDAwCkBAIC02NTIsOSArNjUyLDYgQEAgdm9p
ZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VQcmVzc0V2ZW50KAogICAgICAgICBpZiAoS1dRKG1f
cGFydCktPmxhc3RFdmVudElzTW91c2VVcCgpKSB7CiAgICAgICAgICAgICBkLT5tb3VzZVByZXNz
ZWQgPSBmYWxzZTsKICAgICAgICAgfQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0JZW1p
dCBtX3BhcnQtPm5vZGVBY3RpdmF0ZWQobWV2LmlubmVyTm9kZS5nZXQoKSk7Ci0jZW5kaWYKICAg
ICB9CiB9CiAKQEAgLTExMzYsMTAgKzExMzMsNiBAQCB2b2lkIEtIVE1MVmlldzo6Zm9jdXNOZXh0
UHJldk5vZGUoYm9vbCBuCiAgICAgfQogICAgIC8vIFNldCBmb2N1cyBub2RlIG9uIHRoZSBkb2N1
bWVudAogICAgIG1fcGFydC0+eG1sRG9jSW1wbCgpLT5zZXRGb2N1c05vZGUobmV3Rm9jdXNOb2Rl
KTsKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotICAgIGVtaXQgbV9wYXJ0LT5ub2RlQWN0
aXZhdGVkKG5ld0ZvY3VzTm9kZSk7Ci0jZW5kaWYKLQogfQogCiB2b2lkIEtIVE1MVmlldzo6c2V0
TWVkaWFUeXBlKCBjb25zdCBRU3RyaW5nICZtZWRpdW0gKQpJbmRleDoga2h0bWwvZG9tL2Nzc19y
dWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nz
c19ydWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC1wIC11IC1yMS44IGtodG1s
L2RvbS9jc3NfcnVsZS5oCi0tLSBraHRtbC9kb20vY3NzX3J1bGUuaAkxNiBTZXAgMjAwNSAyMjo0
MjowMyAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9jc3NfcnVsZS5oCTQgRGVjIDIwMDUgMTA6MjQ6
MzAgLTAwMDAKQEAgLTI3LDIyICsyNyw4IEBACiAjaWZuZGVmIF9DU1NfY3NzX3J1bGVfaF8KICNk
ZWZpbmUgX0NTU19jc3NfcnVsZV9oXwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQot
I2luY2x1ZGUgPGRvbS9kb21fc3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZG9tL2Nzc19zdHlsZXNoZWV0
Lmg+Ci0jaW5jbHVkZSA8ZG9tL2Nzc192YWx1ZS5oPgotCi0jZW5kaWYKLQogbmFtZXNwYWNlIERP
TSB7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1jbGFzcyBDU1NSdWxlSW1wbDsK
LQotI2VuZGlmCi0KIC8qKgogICogVGhlIDxjb2RlPiBDU1NSdWxlIDwvY29kZT4gaW50ZXJmYWNl
IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGludGVyZmFjZQogICogZm9yIGFueSB0eXBlIG9mIENTUyA8
YQpAQCAtNjIsMTkgKzQ4LDYgQEAgY2xhc3MgQ1NTUnVsZQogCiBwdWJsaWM6CiAKLSNpZiAhS0hU
TUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgQ1NTUnVsZSgpOwotICAgIENTU1J1bGUoY29uc3Qg
Q1NTUnVsZSAmb3RoZXIpOwotICAgIENTU1J1bGUoQ1NTUnVsZUltcGwgKmltcGwpOwotcHVibGlj
OgotCi0gICAgQ1NTUnVsZSAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLQot
ICAgIH5DU1NSdWxlKCk7Ci0KLSNlbmRpZgotCiAgICAgLyoqCiAgICAgICogQW4gaW50ZWdlciBp
bmRpY2F0aW5nIHdoaWNoIHR5cGUgb2YgcnVsZSB0aGlzIGlzLgogICAgICAqCkBAIC04OSw0Njkg
KzYyLDcgQEAgcHVibGljOgogICAgICAgICBQQUdFX1JVTEUgPSA2LAogICAgICAgICBRVUlSS1Nf
UlVMRSA9IDEwMCAvLyBOb3QgcGFydCBvZiB0aGUgb2ZmaWNpYWwgRE9NCiAgICAgfTsKLQotI2lm
ICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICAvKioKLSAgICAgKiBUaGUgdHlwZSBvZiB0
aGUgcnVsZSwgYXMgZGVmaW5lZCBhYm92ZS4gVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQKLSAgICAg
KiBiaW5kaW5nLXNwZWNpZmljIGNhc3RpbmcgbWV0aG9kcyBjYW4gYmUgdXNlZCB0byBjYXN0IGRv
d24gZnJvbQotICAgICAqIGFuIGluc3RhbmNlIG9mIHRoZSA8Y29kZT4gQ1NTUnVsZSA8L2NvZGU+
IGludGVyZmFjZSB0byB0aGUKLSAgICAgKiBzcGVjaWZpYyBkZXJpdmVkIGludGVyZmFjZSBpbXBs
aWVkIGJ5IHRoZSA8Y29kZT4gdHlwZSA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqLwotICAgIHVu
c2lnbmVkIHNob3J0IHR5cGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBwYXJzYWJs
ZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBydWxlLiBUaGlzIHJlZmxlY3RzCi0gICAg
ICogdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJ1bGUgYW5kIG5vdCBpdHMgaW5pdGlhbCB2YWx1
ZS4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAg
ICAvKioKLSAgICAgKiBzZWUgQHJlZiBjc3NUZXh0Ci0gICAgICogQGV4Y2VwdGlvbiBET01FeGNl
cHRpb24KLSAgICAgKgotICAgICAqICBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNlZCBpZiB0
aGUgcnVsZSBjYW5ub3QgYmUgaW5zZXJ0ZWQKLSAgICAgKiBhdCB0aGlzIHBvaW50IGluIHRoZSBz
dHlsZSBzaGVldC4KLSAgICAgKgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6
IFJhaXNlZCBpZiB0aGlzIHN0eWxlIHNoZWV0IGlzCi0gICAgICogcmVhZG9ubHkuCi0gICAgICoK
LSAgICAgKiBAZXhjZXB0aW9uIENTU0V4Y2VwdGlvbgotICAgICAqIFNZTlRBWF9FUlI6IFJhaXNl
ZCBpZiB0aGUgc3BlY2lmaWVkIENTUyBzdHJpbmcgdmFsdWUgaGFzIGEKLSAgICAgKiBzeW50YXgg
ZXJyb3IgYW5kIGlzIHVucGFyc2FibGUuCi0gICAgICoKLSAgICAgKiBJTlZBTElEX01PRElGSUNB
VElPTl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIENTUyBzdHJpbmcgdmFsdWUKLSAgICAg
KiByZXByZXNlbnRzIGEgZGlmZmVyZW50IHR5cGUgb2YgcnVsZSB0aGFuIHRoZSBjdXJyZW50IG9u
ZS4KLSAgICAgKi8KLSAgICB2b2lkIHNldENzc1RleHQoIGNvbnN0IERPTVN0cmluZyAmICk7Ci0K
LSAgICAvKioKLSAgICAgKiBUaGUgc3R5bGUgc2hlZXQgdGhhdCBjb250YWlucyB0aGlzIHJ1bGUu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBDU1NTdHlsZVNoZWV0IHBhcmVudFN0eWxlU2hlZXQoKSBj
b25zdDsKLQotICAgIC8qKgotICAgICAqIElmIHRoaXMgcnVsZSBpcyBjb250YWluZWQgaW5zaWRl
IGFub3RoZXIgcnVsZSAoZS5nLiBhIHN0eWxlCi0gICAgICogcnVsZSBpbnNpZGUgYW4gQG1lZGlh
IGJsb2NrKSwgdGhpcyBpcyB0aGUgY29udGFpbmluZyBydWxlLiBJZgotICAgICAqIHRoaXMgcnVs
ZSBpcyBub3QgbmVzdGVkIGluc2lkZSBhbnkgb3RoZXIgcnVsZXMsIHRoaXMgcmV0dXJucwotICAg
ICAqIDxjb2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0gICAgICovCi0gICAgQ1NTUnVsZSBw
YXJlbnRSdWxlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKiBu
b3QgcGFydCBvZiB0aGUgRE9NCi0gICAgICovCi0gICAgQ1NTUnVsZUltcGwgKmhhbmRsZSgpIGNv
bnN0OwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NSdWxl
SW1wbCAqaW1wbDsKLQotICAgIHZvaWQgYXNzaWduT3RoZXIoIGNvbnN0IENTU1J1bGUgJm90aGVy
LCBSdWxlVHlwZSB0aGlzVHlwZSApOwotCi0jZW5kaWYKLQotfTsKLQotI2lmICFLSFRNTF9OT19D
UExVU1BMVVNfRE9NCi0KLWNsYXNzIENTU0NoYXJzZXRSdWxlSW1wbDsKLQotLyoqCi0gKiBUaGUg
PGNvZGU+IENTU0NoYXJzZXRSdWxlIDwvY29kZT4gaW50ZXJmYWNlIGEgPGEgaHJlZj0iIj4gQGNo
YXJzZXQKLSAqIHJ1bGUgPC9hPiBpbiBhIENTUyBzdHlsZSBzaGVldC4gQSA8Y29kZT4gQGNoYXJz
ZXQgPC9jb2RlPiBydWxlIGNhbgotICogYmUgdXNlZCB0byBkZWZpbmUgdGhlIGVuY29kaW5nIG9m
IHRoZSBzdHlsZSBzaGVldC4KLSAqCi0gKi8KLWNsYXNzIENTU0NoYXJzZXRSdWxlIDogcHVibGlj
IENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NDaGFyc2V0UnVsZSgpOwotICAgIENTU0NoYXJz
ZXRSdWxlKGNvbnN0IENTU0NoYXJzZXRSdWxlICZvdGhlcik7Ci0gICAgQ1NTQ2hhcnNldFJ1bGUo
Y29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotICAgIENTU0NoYXJzZXRSdWxlKENTU0NoYXJzZXRSdWxl
SW1wbCAqaW1wbCk7Ci1wdWJsaWM6Ci0KLSAgICBDU1NDaGFyc2V0UnVsZSAmIG9wZXJhdG9yID0g
KGNvbnN0IENTU0NoYXJzZXRSdWxlICZvdGhlcik7Ci0gICAgQ1NTQ2hhcnNldFJ1bGUgJiBvcGVy
YXRvciA9IChjb25zdCBDU1NSdWxlICZvdGhlcik7Ci0KLSAgICB+Q1NTQ2hhcnNldFJ1bGUoKTsK
LQotICAgIC8qKgotICAgICAqIFRoZSBlbmNvZGluZyBpbmZvcm1hdGlvbiB1c2VkIGluIHRoaXMg
PGNvZGU+IEBjaGFyc2V0IDwvY29kZT4KLSAgICAgKiBydWxlLgotICAgICAqCi0gICAgICovCi0g
ICAgRE9NU3RyaW5nIGVuY29kaW5nKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBzZWUgQHJl
ZiBlbmNvZGluZwotICAgICAqIEBleGNlcHRpb24gQ1NTRXhjZXB0aW9uCi0gICAgICogU1lOVEFY
X0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgdmFsdWUgaGFzIGEgc3ludGF4
Ci0gICAgICogZXJyb3IgYW5kIGlzIHVucGFyc2FibGUuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0
aW9uIERPTUV4Y2VwdGlvbgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJh
aXNlZCBpZiB0aGlzIGVuY29kaW5nIHJ1bGUgaXMKLSAgICAgKiByZWFkb25seS4KLSAgICAgKgot
ICAgICAqLwotICAgIHZvaWQgc2V0RW5jb2RpbmcoIGNvbnN0IERPTVN0cmluZyAmICk7CiB9Owot
Ci0KLWNsYXNzIENTU0ZvbnRGYWNlUnVsZUltcGw7Ci0vKioKLSAqIFRoZSA8Y29kZT4gQ1NTRm9u
dEZhY2VSdWxlIDwvY29kZT4gaW50ZXJmYWNlIHJlcHJlc2VudHMgYSA8YQotICogaHJlZj0iaHR0
cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvZm9udHMuaHRtbCNmb250LWRlc2NyaXB0aW9ucyI+
Ci0gKiBAZm9udC1mYWNlIHJ1bGUgPC9hPiBpbiBhIENTUyBzdHlsZSBzaGVldC4gVGhlIDxjb2Rl
PiBAZm9udC1mYWNlCi0gKiA8L2NvZGU+IHJ1bGUgaXMgdXNlZCB0byBob2xkIGEgc2V0IG9mIGZv
bnQgZGVzY3JpcHRpb25zLgotICoKLSAqLwotY2xhc3MgQ1NTRm9udEZhY2VSdWxlIDogcHVibGlj
IENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NGb250RmFjZVJ1bGUoKTsKLSAgICBDU1NGb250
RmFjZVJ1bGUoY29uc3QgQ1NTRm9udEZhY2VSdWxlICZvdGhlcik7Ci0gICAgQ1NTRm9udEZhY2VS
dWxlKGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLSAgICBDU1NGb250RmFjZVJ1bGUoQ1NTRm9udEZh
Y2VSdWxlSW1wbCAqaW1wbCk7Ci1wdWJsaWM6Ci0KLSAgICBDU1NGb250RmFjZVJ1bGUgJiBvcGVy
YXRvciA9IChjb25zdCBDU1NGb250RmFjZVJ1bGUgJm90aGVyKTsKLSAgICBDU1NGb250RmFjZVJ1
bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NSdWxlICZvdGhlcik7Ci0KLSAgICB+Q1NTRm9udEZh
Y2VSdWxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5v
cmcvVFIvUkVDLUNTUzIvc3luZGF0YS5odG1sI3E4Ij4KLSAgICAgKiBkZWNsYXJhdGlvbi1ibG9j
ayA8L2E+IG9mIHRoaXMgcnVsZS4KLSAgICAgKgotICAgICAqLwotICAgIENTU1N0eWxlRGVjbGFy
YXRpb24gc3R5bGUoKSBjb25zdDsKLX07Ci0KLWNsYXNzIENTU0ltcG9ydFJ1bGVJbXBsOwotLyoq
Ci0gKiBUaGUgPGNvZGU+IENTU0ltcG9ydFJ1bGUgPC9jb2RlPiBpbnRlcmZhY2UgcmVwcmVzZW50
cyBhIDxhCi0gKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9jYXNjYWRlLmh0
bWwjYXQtaW1wb3J0Ij4KLSAqIEBpbXBvcnQgcnVsZSA8L2E+IHdpdGhpbiBhIENTUyBzdHlsZSBz
aGVldC4gVGhlIDxjb2RlPiBAaW1wb3J0Ci0gKiA8L2NvZGU+IHJ1bGUgaXMgdXNlZCB0byBpbXBv
cnQgc3R5bGUgcnVsZXMgZnJvbSBvdGhlciBzdHlsZSBzaGVldHMuCi0gKgotICovCi1jbGFzcyBD
U1NJbXBvcnRSdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBDU1NJbXBvcnRS
dWxlKCk7Ci0gICAgQ1NTSW1wb3J0UnVsZShjb25zdCBDU1NJbXBvcnRSdWxlICZvdGhlcik7Ci0g
ICAgQ1NTSW1wb3J0UnVsZShjb25zdCBDU1NSdWxlICZvdGhlcik7Ci0gICAgQ1NTSW1wb3J0UnVs
ZShDU1NJbXBvcnRSdWxlSW1wbCAqaW1wbCk7Ci1wdWJsaWM6Ci0KLSAgICBDU1NJbXBvcnRSdWxl
ICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTSW1wb3J0UnVsZSAmb3RoZXIpOwotICAgIENTU0ltcG9y
dFJ1bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NSdWxlICZvdGhlcik7Ci0KLSAgICB+Q1NTSW1w
b3J0UnVsZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIGxvY2F0aW9uIG9mIHRoZSBzdHlsZSBz
aGVldCB0byBiZSBpbXBvcnRlZC4gVGhlIGF0dHJpYnV0ZQotICAgICAqIHdpbGwgbm90IGNvbnRh
aW4gdGhlIDxjb2RlPiAidXJsKC4uLikiIDwvY29kZT4gc3BlY2lmaWVyIGFyb3VuZAotICAgICAq
IHRoZSBVUkkuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgaHJlZigpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogQSBsaXN0IG9mIG1lZGlhIHR5cGVzIGZvciB3aGljaCB0aGlzIHN0
eWxlIHNoZWV0IG1heSBiZSB1c2VkLgotICAgICAqCi0gICAgICovCi0gICAgTWVkaWFMaXN0IG1l
ZGlhKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgc3R5bGUgc2hlZXQgcmVmZXJyZWQg
dG8gYnkgdGhpcyBydWxlLCBpZiBpdCBoYXMgYmVlbgotICAgICAqIGxvYWRlZC4gVGhlIHZhbHVl
IG9mIHRoaXMgYXR0cmlidXRlIGlzIG51bGwgaWYgdGhlIHN0eWxlIHNoZWV0Ci0gICAgICogaGFz
IG5vdCB5ZXQgYmVlbiBsb2FkZWQgb3IgaWYgaXQgd2lsbCBub3QgYmUgbG9hZGVkIChlLmcuIGlm
Ci0gICAgICogdGhlIHN0eWxlIHNoZWV0IGlzIGZvciBhIG1lZGlhIHR5cGUgbm90IHN1cHBvcnRl
ZCBieSB0aGUgdXNlcgotICAgICAqIGFnZW50KS4KLSAgICAgKgotICAgICAqLwotICAgIENTU1N0
eWxlU2hlZXQgc3R5bGVTaGVldCgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTTWVkaWFSdWxlSW1w
bDsKLS8qKgotICogVGhlIDxjb2RlPiBDU1NNZWRpYVJ1bGUgPC9jb2RlPiBpbnRlcmZhY2UgcmVw
cmVzZW50cyBhIDxhCi0gKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9tZWRp
YS5odG1sI2F0LW1lZGlhLXJ1bGUiPgotICogQG1lZGlhIHJ1bGUgPC9hPiBpbiBhIENTUyBzdHls
ZSBzaGVldC4gQSA8Y29kZT4gQG1lZGlhIDwvY29kZT4gcnVsZQotICogY2FuIGJlIHVzZWQgdG8g
ZGVsaW1pdCBzdHlsZSBydWxlcyBmb3Igc3BlY2lmaWMgbWVkaWEgdHlwZXMuCi0gKgotICovCi1j
bGFzcyBDU1NNZWRpYVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU01l
ZGlhUnVsZSgpOwotICAgIENTU01lZGlhUnVsZShjb25zdCBDU1NNZWRpYVJ1bGUgJm90aGVyKTsK
LSAgICBDU1NNZWRpYVJ1bGUoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotICAgIENTU01lZGlhUnVs
ZShDU1NNZWRpYVJ1bGVJbXBsICppbXBsKTsKLXB1YmxpYzoKLQotICAgIENTU01lZGlhUnVsZSAm
IG9wZXJhdG9yID0gKGNvbnN0IENTU01lZGlhUnVsZSAmb3RoZXIpOwotICAgIENTU01lZGlhUnVs
ZSAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLQotICAgIH5DU1NNZWRpYVJ1
bGUoKTsKLQotICAgIC8qKgotICAgICAqIEEgbGlzdCBvZiA8YQotICAgICAqIGhyZWY9Imh0dHA6
Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL21lZGlhLmh0bWwjbWVkaWEtdHlwZXMiPgotICAgICAq
IG1lZGlhIHR5cGVzIDwvYT4gZm9yIHRoaXMgcnVsZS4KLSAgICAgKgotICAgICAqLwotICAgIE1l
ZGlhTGlzdCBtZWRpYSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQSBsaXN0IG9mIGFsbCBD
U1MgcnVsZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgbWVkaWEgYmxvY2suCi0gICAgICoKLSAgICAg
Ki8KLSAgICBDU1NSdWxlTGlzdCBjc3NSdWxlcygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
VXNlZCB0byBpbnNlcnQgYSBuZXcgcnVsZSBpbnRvIHRoZSBtZWRpYSBibG9jay4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSBydWxlIFRoZSBwYXJzYWJsZSB0ZXh0IHJlcHJlc2VudGluZyB0aGUgcnVs
ZS4gRm9yIHJ1bGUKLSAgICAgKiBzZXRzIHRoaXMgY29udGFpbnMgYm90aCB0aGUgc2VsZWN0b3Ig
YW5kIHRoZSBzdHlsZSBkZWNsYXJhdGlvbi4KLSAgICAgKiBGb3IgYXQtcnVsZXMsIHRoaXMgc3Bl
Y2lmaWVzIGJvdGggdGhlIGF0LWlkZW50aWZpZXIgYW5kIHRoZQotICAgICAqIHJ1bGUgY29udGVu
dC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggd2l0aGluIHRoZSBtZWRp
YSBibG9jaydzIHJ1bGUgY29sbGVjdGlvbgotICAgICAqIG9mIHRoZSBydWxlIGJlZm9yZSB3aGlj
aCB0byBpbnNlcnQgdGhlIHNwZWNpZmllZCBydWxlLiBJZiB0aGUKLSAgICAgKiBzcGVjaWZpZWQg
aW5kZXggaXMgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGUgbWVkaWEgYmxvY2tzJ3MKLSAgICAg
KiBydWxlIGNvbGxlY3Rpb24sIHRoZSBydWxlIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiB0
aGUgbWVkaWEKLSAgICAgKiBibG9jay4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIGluZGV4
IHdpdGhpbiB0aGUgbWVkaWEgYmxvY2sncyBydWxlIGNvbGxlY3Rpb24gb2YKLSAgICAgKiB0aGUg
bmV3bHkgaW5zZXJ0ZWQgcnVsZS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0
aW9uCi0gICAgICogSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiBSYWlzZWQgaWYgdGhlIHJ1bGUgY2Fu
bm90IGJlIGluc2VydGVkIGF0Ci0gICAgICogdGhlIHNwZWNpZmllZCBpbmRleC4gZS5nLiBpZiBh
biA8Y29kZT4gQGltcG9ydCA8L2NvZGU+IHJ1bGUgaXMKLSAgICAgKiBpbnNlcnRlZCBhZnRlciBh
IHN0YW5kYXJkIHJ1bGUgc2V0IG9yIG90aGVyIGF0LXJ1bGUuCi0gICAgICoKLSAgICAgKiAgSU5E
RVhfU0laRV9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIGluZGV4IGlzIG5vdCBhIHZhbGlk
Ci0gICAgICogaW5zZXJ0aW9uIHBvaW50LgotICAgICAqCi0gICAgICogIE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbWVkaWEgcnVsZSBpcwotICAgICAqIHJlYWRv
bmx5LgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBDU1NFeGNlcHRpb24KLSAgICAgKiAgU1lO
VEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgcnVsZSBoYXMgYSBzeW50YXggZXJyb3IK
LSAgICAgKiBhbmQgaXMgdW5wYXJzYWJsZS4KLSAgICAgKgotICAgICAqLwotICAgIHVuc2lnbmVk
IGluc2VydFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnJ1bGUsIHVuc2lnbmVkIGluZGV4ICk7Ci0K
LSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGRlbGV0ZSBhIHJ1bGUgZnJvbSB0aGUgbWVkaWEgYmxv
Y2suCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IHdpdGhpbiB0aGUgbWVk
aWEgYmxvY2sncyBydWxlIGNvbGxlY3Rpb24KLSAgICAgKiBvZiB0aGUgcnVsZSB0byByZW1vdmUu
Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4
Y2VwdGlvbgotICAgICAqIElOREVYX1NJWkVfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBp
bmRleCBkb2VzIG5vdAotICAgICAqIGNvcnJlc3BvbmQgdG8gYSBydWxlIGluIHRoZSBtZWRpYSBy
dWxlIGxpc3QuCi0gICAgICoKLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBS
YWlzZWQgaWYgdGhpcyBtZWRpYSBydWxlIGlzCi0gICAgICogcmVhZG9ubHkuCi0gICAgICoKLSAg
ICAgKi8KLSAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBpbmRleCApOwotfTsKLQotCi1j
bGFzcyBDU1NQYWdlUnVsZUltcGw7Ci0vKioKLSAqIFRoZSA8Y29kZT4gQ1NTUGFnZVJ1bGUgPC9j
b2RlPiBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIDxhCi0gKiBocmVmPSJodHRwOi8vd3d3LnczLm9y
Zy9UUi9SRUMtQ1NTMi9wYWdlLmh0bWwjcGFnZS1ib3giPiBAcGFnZSBydWxlCi0gKiA8L2E+IHdp
dGhpbiBhIENTUyBzdHlsZSBzaGVldC4gVGhlIDxjb2RlPiBAcGFnZSA8L2NvZGU+IHJ1bGUgaXMK
LSAqIHVzZWQgdG8gc3BlY2lmeSB0aGUgZGltZW5zaW9ucywgb3JpZW50YXRpb24sIG1hcmdpbnMs
IGV0Yy4gb2YgYQotICogcGFnZSBib3ggZm9yIHBhZ2VkIG1lZGlhLgotICoKLSAqLwotY2xhc3Mg
Q1NTUGFnZVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU1BhZ2VSdWxl
KCk7Ci0gICAgQ1NTUGFnZVJ1bGUoY29uc3QgQ1NTUGFnZVJ1bGUgJm90aGVyKTsKLSAgICBDU1NQ
YWdlUnVsZShjb25zdCBDU1NSdWxlICZvdGhlcik7Ci0gICAgQ1NTUGFnZVJ1bGUoQ1NTUGFnZVJ1
bGVJbXBsICppbXBsKTsKLXB1YmxpYzoKLQotICAgIENTU1BhZ2VSdWxlICYgb3BlcmF0b3IgPSAo
Y29uc3QgQ1NTUGFnZVJ1bGUgJm90aGVyKTsKLSAgICBDU1NQYWdlUnVsZSAmIG9wZXJhdG9yID0g
KGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLQotICAgIH5DU1NQYWdlUnVsZSgpOwotCi0gICAgLyoq
Ci0gICAgICogVGhlIHBhcnNhYmxlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhZ2Ug
c2VsZWN0b3IgZm9yCi0gICAgICogdGhlIHJ1bGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBET01T
dHJpbmcgc2VsZWN0b3JUZXh0KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBzZWUgQHJlZiBz
ZWxlY3RvclRleHQKLSAgICAgKiBAZXhjZXB0aW9uIENTU0V4Y2VwdGlvbgotICAgICAqIFNZTlRB
WF9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIENTUyBzdHJpbmcgdmFsdWUgaGFzIGEKLSAg
ICAgKiBzeW50YXggZXJyb3IgYW5kIGlzIHVucGFyc2FibGUuCi0gICAgICoKLSAgICAgKiBAZXhj
ZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6
IFJhaXNlZCBpZiB0aGlzIHN0eWxlIHNoZWV0IGlzCi0gICAgICogcmVhZG9ubHkuCi0gICAgICoK
LSAgICAgKi8KLSAgICB2b2lkIHNldFNlbGVjdG9yVGV4dCggY29uc3QgRE9NU3RyaW5nICYgKTsK
LQotICAgIC8qKgotICAgICAqIFRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMt
Q1NTMi9zeW5kYXRhLmh0bWwjcTgiPgotICAgICAqIGRlY2xhcmF0aW9uLWJsb2NrIDwvYT4gb2Yg
dGhpcyBydWxlLgotICAgICAqCi0gICAgICovCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiBzdHls
ZSgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTU3R5bGVSdWxlSW1wbDsKLS8qKgotICogVGhlIDxj
b2RlPiBDU1NTdHlsZVJ1bGUgPC9jb2RlPiBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIHNpbmdsZSA8
YQotICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvc3luZGF0YS5odG1sI3E4
Ij4gcnVsZSBzZXQgPC9hPgotICogaW4gYSBDU1Mgc3R5bGUgc2hlZXQuCi0gKgotICovCi1jbGFz
cyBDU1NTdHlsZVJ1bGUgOiBwdWJsaWMgQ1NTUnVsZQotewotcHVibGljOgotICAgIENTU1N0eWxl
UnVsZSgpOwotICAgIENTU1N0eWxlUnVsZShjb25zdCBDU1NTdHlsZVJ1bGUgJm90aGVyKTsKLSAg
ICBDU1NTdHlsZVJ1bGUoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotICAgIENTU1N0eWxlUnVsZShD
U1NTdHlsZVJ1bGVJbXBsICppbXBsKTsKLXB1YmxpYzoKLQotICAgIENTU1N0eWxlUnVsZSAmIG9w
ZXJhdG9yID0gKGNvbnN0IENTU1N0eWxlUnVsZSAmb3RoZXIpOwotICAgIENTU1N0eWxlUnVsZSAm
IG9wZXJhdG9yID0gKGNvbnN0IENTU1J1bGUgJm90aGVyKTsKLQotICAgIH5DU1NTdHlsZVJ1bGUo
KTsKLQotICAgIC8qKgotICAgICAqIFRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSA8
YQotICAgICAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL3NlbGVjdG9yLmh0
bWwiPiBzZWxlY3RvcgotICAgICAqIDwvYT4gZm9yIHRoZSBydWxlIHNldC4gVGhlIGltcGxlbWVu
dGF0aW9uIG1heSBoYXZlIHN0cmlwcGVkIG91dAotICAgICAqIGluc2lnbmlmaWNhbnQgd2hpdGVz
cGFjZSB3aGlsZSBwYXJzaW5nIHRoZSBzZWxlY3Rvci4KLSAgICAgKgotICAgICAqLwotICAgIERP
TVN0cmluZyBzZWxlY3RvclRleHQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIHNlZSBAcmVm
IHNlbGVjdG9yVGV4dAotICAgICAqIEBleGNlcHRpb24gQ1NTRXhjZXB0aW9uCi0gICAgICogU1lO
VEFYX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgQ1NTIHN0cmluZyB2YWx1ZSBoYXMgYQot
ICAgICAqIHN5bnRheCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4KLSAgICAgKgotICAgICAqIEBl
eGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjogUmFpc2VkIGlmIHRoaXMgc3R5bGUgc2hlZXQgaXMKLSAgICAgKiByZWFkb25seS4KLSAgICAg
KgotICAgICAqLwotICAgIHZvaWQgc2V0U2VsZWN0b3JUZXh0KCBjb25zdCBET01TdHJpbmcgJiAp
OwotCi0gICAgLyoqCi0gICAgICogVGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JF
Qy1DU1MyL3N5bmRhdGEuaHRtbCNxOCI+Ci0gICAgICogZGVjbGFyYXRpb24tYmxvY2sgPC9hPiBv
ZiB0aGlzIHJ1bGUgc2V0LgotICAgICAqCi0gICAgICovCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlv
biBzdHlsZSgpIGNvbnN0OwotfTsKLQotY2xhc3MgQ1NTVW5rbm93blJ1bGVJbXBsOwotLyoqCi0g
KiBUaGUgPGNvZGU+IENTU1Vua293blJ1bGUgPC9jb2RlPiBpbnRlcmZhY2UgcmVwcmVzZW50cyBh
biBhdC1ydWxlCi0gKiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdXNlciBhZ2VudC4KLSAqCi0gKi8K
LWNsYXNzIENTU1Vua25vd25SdWxlIDogcHVibGljIENTU1J1bGUKLXsKLXB1YmxpYzoKLSAgICBD
U1NVbmtub3duUnVsZSgpOwotICAgIENTU1Vua25vd25SdWxlKGNvbnN0IENTU1Vua25vd25SdWxl
ICZvdGhlcik7Ci0gICAgQ1NTVW5rbm93blJ1bGUoY29uc3QgQ1NTUnVsZSAmb3RoZXIpOwotICAg
IENTU1Vua25vd25SdWxlKENTU1Vua25vd25SdWxlSW1wbCAqaW1wbCk7Ci1wdWJsaWM6Ci0KLSAg
ICBDU1NVbmtub3duUnVsZSAmIG9wZXJhdG9yID0gKGNvbnN0IENTU1Vua25vd25SdWxlICZvdGhl
cik7Ci0gICAgQ1NTVW5rbm93blJ1bGUgJiBvcGVyYXRvciA9IChjb25zdCBDU1NSdWxlICZvdGhl
cik7Ci0KLSAgICB+Q1NTVW5rbm93blJ1bGUoKTsKLX07Ci0KLQotY2xhc3MgQ1NTUnVsZUxpc3RJ
bXBsOwotY2xhc3MgU3R5bGVMaXN0SW1wbDsKLS8qKgotICogVGhlIDxjb2RlPiBDU1NSdWxlTGlz
dCA8L2NvZGU+IGludGVyZmFjZSBwcm92aWRlcyB0aGUgYWJzdHJhY3Rpb24KLSAqIG9mIGFuIG9y
ZGVyZWQgY29sbGVjdGlvbiBvZiBDU1MgcnVsZXMuCi0gKgotICovCi1jbGFzcyBDU1NSdWxlTGlz
dAotewotcHVibGljOgotICAgIENTU1J1bGVMaXN0KCk7Ci0gICAgQ1NTUnVsZUxpc3QoY29uc3Qg
Q1NTUnVsZUxpc3QgJm90aGVyKTsKLSAgICBDU1NSdWxlTGlzdChDU1NSdWxlTGlzdEltcGwgKmkp
OwotICAgIENTU1J1bGVMaXN0KFN0eWxlTGlzdEltcGwgKmkpOwotcHVibGljOgotCi0gICAgQ1NT
UnVsZUxpc3QgJiBvcGVyYXRvciA9IChjb25zdCBDU1NSdWxlTGlzdCAmb3RoZXIpOwotCi0gICAg
fkNTU1J1bGVMaXN0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbnVtYmVyIG9mIDxjb2RlPiBD
U1NSdWxlIDwvY29kZT4gcyBpbiB0aGUgbGlzdC4gVGhlIHJhbmdlCi0gICAgICogb2YgdmFsaWQg
Y2hpbGQgcnVsZSBpbmRpY2VzIGlzIDxjb2RlPiAwIDwvY29kZT4gdG8gPGNvZGU+Ci0gICAgICog
bGVuZ3RoLTEgPC9jb2RlPiBpbmNsdXNpdmUuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gcmV0cmlldmUgYSBD
U1MgcnVsZSBieSBvcmRpbmFsIGluZGV4LiBUaGUgb3JkZXIgaW4gdGhpcwotICAgICAqIGNvbGxl
Y3Rpb24gcmVwcmVzZW50cyB0aGUgb3JkZXIgb2YgdGhlIHJ1bGVzIGluIHRoZSBDU1Mgc3R5bGUK
LSAgICAgKiBzaGVldC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBpbnRvIHRo
ZSBjb2xsZWN0aW9uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBzdHlsZSBydWxlIGF0IHRo
ZSA8Y29kZT4gaW5kZXggPC9jb2RlPiBwb3NpdGlvbiBpbgotICAgICAqIHRoZSA8Y29kZT4gQ1NT
UnVsZUxpc3QgPC9jb2RlPiAsIG9yIDxjb2RlPiBudWxsIDwvY29kZT4gaWYgdGhhdAotICAgICAq
IGlzIG5vdCBhIHZhbGlkIGluZGV4LgotICAgICAqCi0gICAgICovCi0gICAgQ1NTUnVsZSBpdGVt
ICggdW5zaWduZWQgaW5kZXggKTsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAq
IG5vdCBwYXJ0IG9mIHRoZSBET00KLSAgICAgKi8KLSAgICBDU1NSdWxlTGlzdEltcGwgKmhhbmRs
ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICAv
LyB3ZSBqdXN0IG5lZWQgYSBwb2ludGVyIHRvIGFuIGltcGxlbWVudGF0aW9uIGhlcmUuCi0gICAg
Q1NTUnVsZUxpc3RJbXBsICppbXBsOwotfTsKLQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlCiAK
ICNlbmRpZgpJbmRleDoga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAga2h0bWwvZG9tL2Nzc19zdHls
ZXNoZWV0LmgKLS0tIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5oCTE2IFNlcCAyMDA1IDIyOjQy
OjAzIC0wMDAwCTEuMTAKKysrIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5oCTQgRGVjIDIwMDUg
MTA6MjQ6MzAgLTAwMDAKQEAgLTI5LDE1MCArMjksOCBAQAogI2lmbmRlZiBfQ1NTX2Nzc19zdHls
ZXNoZWV0X2hfCiAjZGVmaW5lIF9DU1NfY3NzX3N0eWxlc2hlZXRfaF8KIAotI2lmICFLSFRNTF9O
T19DUExVU1BMVVNfRE9NCi0KLSNpbmNsdWRlIDxkb20vZG9tX3N0cmluZy5oPgotI2luY2x1ZGUg
PGRvbS9kb21fbm9kZS5oPgotI2luY2x1ZGUgPGRvbS9kb21fbWlzYy5oPgotCi0jZW5kaWYKLQog
bmFtZXNwYWNlIERPTSB7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1jbGFzcyBT
dHlsZVNoZWV0SW1wbDsKLWNsYXNzIE1lZGlhTGlzdDsKLWNsYXNzIE5vZGVJbXBsOwotY2xhc3Mg
RG9jdW1lbnRJbXBsOwotCi0vKioKLSAqIFRoZSA8Y29kZT4gU3R5bGVTaGVldCA8L2NvZGU+IGlu
dGVyZmFjZSBpcyB0aGUgYWJzdHJhY3QgYmFzZQotICogaW50ZXJmYWNlIGZvciBhbnkgdHlwZSBv
ZiBzdHlsZSBzaGVldC4gSXQgcmVwcmVzZW50cyBhIHNpbmdsZSBzdHlsZQotICogc2hlZXQgYXNz
b2NpYXRlZCB3aXRoIGEgc3RydWN0dXJlZCBkb2N1bWVudC4gSW4gSFRNTCwgdGhlCi0gKiBTdHls
ZVNoZWV0IGludGVyZmFjZSByZXByZXNlbnRzIGVpdGhlciBhbiBleHRlcm5hbCBzdHlsZSBzaGVl
dCwKLSAqIGluY2x1ZGVkIHZpYSB0aGUgSFRNTCA8YQotICogaHJlZj0iaHR0cDovL3d3dy53My5v
cmcvVFIvUkVDLWh0bWw0MC9zdHJ1Y3QvbGlua3MuaHRtbCNoLTEyLjMiPgotICogTElOSyA8L2E+
IGVsZW1lbnQsIG9yIGFuIGlubGluZSA8YQotICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIv
UkVDLWh0bWw0MC9wcmVzZW50L3N0eWxlcy5odG1sI2gtMTQuMi4zIj4KLSAqIFNUWUxFIDwvYT4g
ZWxlbWVudC4gSW4gWE1MLCB0aGlzIGludGVyZmFjZSByZXByZXNlbnRzIGFuIGV4dGVybmFsCi0g
KiBzdHlsZSBzaGVldCwgaW5jbHVkZWQgdmlhIGEgPGEKLSAqIGhyZWY9Imh0dHA6Ly93d3cudzMu
b3JnL1RSL3htbC1zdHlsZXNoZWV0Ij4gc3R5bGUgc2hlZXQgcHJvY2Vzc2luZwotICogaW5zdHJ1
Y3Rpb24gPC9hPiAuCi0gKgotICovCi1jbGFzcyBTdHlsZVNoZWV0Ci17Ci1wdWJsaWM6Ci0gICAg
U3R5bGVTaGVldCgpOwotICAgIFN0eWxlU2hlZXQoY29uc3QgU3R5bGVTaGVldCAmb3RoZXIpOwot
ICAgIFN0eWxlU2hlZXQoU3R5bGVTaGVldEltcGwgKmltcGwpOwotcHVibGljOgotCi0gICAgU3R5
bGVTaGVldCAmIG9wZXJhdG9yID0gKGNvbnN0IFN0eWxlU2hlZXQgJm90aGVyKTsKLQotICAgIH5T
dHlsZVNoZWV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIHNwZWNpZmllcyB0aGUgc3R5bGUg
c2hlZXQgbGFuZ3VhZ2UgZm9yIHRoaXMgc3R5bGUgc2hlZXQuCi0gICAgICogVGhlIHN0eWxlIHNo
ZWV0IGxhbmd1YWdlIGlzIHNwZWNpZmllZCBhcyBhIGNvbnRlbnQgdHlwZSAoZS5nLgotICAgICAq
ICJ0ZXh0L2NzcyIpLiBUaGUgY29udGVudCB0eXBlIGlzIG9mdGVuIHNwZWNpZmllZCBpbiB0aGUg
PGNvZGU+Ci0gICAgICogb3duZXJOb2RlIDwvY29kZT4gLiBBIGxpc3Qgb2YgcmVnaXN0ZXJlZCBj
b250ZW50IHR5cGVzIGNhbiBiZQotICAgICAqIGZvdW5kIGF0IDxhCi0gICAgICogaHJlZj0iZnRw
Oi8vZnRwLmlzaS5lZHUvaW4tbm90ZXMvaWFuYS9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy8iPgot
ICAgICAqIGZ0cDovL2Z0cC5pc2kuZWR1L2luLW5vdGVzL2lhbmEvYXNzaWdubWVudHMvbWVkaWEt
dHlwZXMvIDwvYT4gLgotICAgICAqIEFsc28gc2VlIHRoZSA8YQotICAgICAqIGhyZWY9Imh0dHA6
Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvc3RydWN0L2xpbmtzLmh0bWwjYWRlZi10eXBlLUEi
PgotICAgICAqIHR5cGUgYXR0cmlidXRlIGRlZmluaXRpb24gPC9hPiBmb3IgdGhlIDxjb2RlPiBM
SU5LIDwvY29kZT4KLSAgICAgKiBlbGVtZW50IGluIEhUTUwgNC4wLCBhbmQgdGhlIHR5cGUgcHNl
dWRvLWF0dHJpYnV0ZSBmb3IgdGhlIFhNTAotICAgICAqIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMu
b3JnL1RSL3htbC1zdHlsZXNoZWV0Ij4gc3R5bGUgc2hlZXQKLSAgICAgKiBwcm9jZXNzaW5nIGlu
c3RydWN0aW9uIDwvYT4gLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIHR5cGUoKSBj
b25zdDsKLQotICAgIC8qKgotICAgICAqIDxjb2RlPiBmYWxzZSA8L2NvZGU+IGlmIHRoZSBzdHls
ZSBzaGVldCBpcyBhcHBsaWVkIHRvIHRoZQotICAgICAqIGRvY3VtZW50LiA8Y29kZT4gdHJ1ZSA8
L2NvZGU+IGlmIGl0IGlzIG5vdC4gTW9kaWZ5aW5nIHRoaXMKLSAgICAgKiBhdHRyaWJ1dGUgbWF5
IGNhdXNlIGEgcmVyZXNvbHV0aW9uIG9mIHN0eWxlIGZvciB0aGUgZG9jdW1lbnQuCi0gICAgICoK
LSAgICAgKi8KLSAgICBib29sIGRpc2FibGVkKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBz
ZWUgQHJlZiBkaXNhYmxlZAotICAgICAqLwotICAgIHZvaWQgc2V0RGlzYWJsZWQoIGJvb2wgKTsK
LQotICAgIC8qKgotICAgICAqIFRoZSBub2RlIHRoYXQgYXNzb2NpYXRlcyB0aGlzIHN0eWxlIHNo
ZWV0IHdpdGggdGhlIGRvY3VtZW50LgotICAgICAqIEZvciBIVE1MLCB0aGlzIG1heSBiZSB0aGUg
Y29ycmVzcG9uZGluZyA8Y29kZT4gTElOSyA8L2NvZGU+IG9yCi0gICAgICogPGNvZGU+IFNUWUxF
IDwvY29kZT4gZWxlbWVudC4gRm9yIFhNTCwgaXQgbWF5IGJlIHRoZSBsaW5raW5nCi0gICAgICog
cHJvY2Vzc2luZyBpbnN0cnVjdGlvbi4gRm9yIHN0eWxlIHNoZWV0cyB0aGF0IGFyZSBpbmNsdWRl
ZCBieQotICAgICAqIG90aGVyIHN0eWxlIHNoZWV0cywgdGhpcyBhdHRyaWJ1dGUgaGFzIGEgdmFs
dWUgb2YgbnVsbC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgb3duZXJOb2RlKCkgY29uc3Q7
Ci0KLSAgICAvKioKLSAgICAgKiBGb3Igc3R5bGUgc2hlZXQgbGFuZ3VhZ2VzIHRoYXQgc3VwcG9y
dCB0aGUgY29uY2VwdCBvZiBzdHlsZQotICAgICAqIHNoZWV0IGluY2x1c2lvbiwgdGhpcyBhdHRy
aWJ1dGUgcmVwcmVzZW50cyB0aGUgaW5jbHVkaW5nIHN0eWxlCi0gICAgICogc2hlZXQsIGlmIG9u
ZSBleGlzdHMuIElmIHRoZSBzdHlsZSBzaGVldCBpcyBhIHRvcC1sZXZlbCBzdHlsZQotICAgICAq
IHNoZWV0LCBvciB0aGUgc3R5bGUgc2hlZXQgbGFuZ3VhZ2UgZG9lcyBub3Qgc3VwcG9ydCBpbmNs
dXNpb24sCi0gICAgICogdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgaXMgbnVsbC4KLSAgICAg
KgotICAgICAqLwotICAgIFN0eWxlU2hlZXQgcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0OwotCi0g
ICAgLyoqCi0gICAgICogSWYgdGhlIHN0eWxlIHNoZWV0IGlzIGEgbGlua2VkIHN0eWxlIHNoZWV0
LCB0aGUgdmFsdWUgb2YgaXRzCi0gICAgICogYXR0cmlidXRlIGlzIGl0cyBsb2NhdGlvbi4gRm9y
IGlubGluZSBzdHlsZSBzaGVldHMsIHRoZSB2YWx1ZQotICAgICAqIG9mIHRoaXMgYXR0cmlidXRl
IGlzIG51bGwuIFNlZSB0aGUgPGEKLSAgICAgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9S
RUMtaHRtbDQwL3N0cnVjdC9saW5rcy5odG1sI2FkZWYtaHJlZiI+Ci0gICAgICogaHJlZiBhdHRy
aWJ1dGUgZGVmaW5pdGlvbiA8L2E+IGZvciB0aGUgPGNvZGU+IExJTksgPC9jb2RlPgotICAgICAq
IGVsZW1lbnQgaW4gSFRNTCA0LjAsIGFuZCB0aGUgaHJlZiBwc2V1ZG8tYXR0cmlidXRlIGZvciB0
aGUgWE1MCi0gICAgICogPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sLXN0eWxlc2hl
ZXQiPiBzdHlsZSBzaGVldAotICAgICAqIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gPC9hPiAuCi0g
ICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgaHJlZigpIGNvbnN0OwotCi0gICAgLyoqCi0g
ICAgICogVGhlIGFkdmlzb3J5IHRpdGxlLiBUaGUgdGl0bGUgaXMgb2Z0ZW4gc3BlY2lmaWVkIGlu
IHRoZSA8Y29kZT4KLSAgICAgKiBvd25lck5vZGUgPC9jb2RlPiAuIFNlZSB0aGUgPGEKLSAgICAg
KiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL3N0cnVjdC9nbG9iYWwuaHRt
bCNhZGVmLXRpdGxlIj4KLSAgICAgKiB0aXRsZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiA8L2E+IGZv
ciB0aGUgPGNvZGU+IExJTksgPC9jb2RlPgotICAgICAqIGVsZW1lbnQgaW4gSFRNTCA0LjAsIGFu
ZCB0aGUgdGl0bGUgcHNldWRvLWF0dHJpYnV0ZSBmb3IgdGhlIFhNTAotICAgICAqIDxhIGhyZWY9
Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbC1zdHlsZXNoZWV0Ij4gc3R5bGUgc2hlZXQKLSAgICAg
KiBwcm9jZXNzaW5nIGluc3RydWN0aW9uIDwvYT4gLgotICAgICAqCi0gICAgICovCi0gICAgRE9N
U3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaW50ZW5kZWQgZGVz
dGluYXRpb24gbWVkaWEgZm9yIHN0eWxlIGluZm9ybWF0aW9uLiBUaGUgbWVkaWEKLSAgICAgKiBp
cyBvZnRlbiBzcGVjaWZpZWQgaW4gdGhlIDxjb2RlPiBvd25lck5vZGUgPC9jb2RlPiAuIFNlZSB0
aGUgPGEKLSAgICAgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL3ByZXNl
bnQvc3R5bGVzLmh0bWwjYWRlZi1tZWRpYSI+Ci0gICAgICogbWVkaWEgYXR0cmlidXRlIGRlZmlu
aXRpb24gPC9hPiBmb3IgdGhlIDxjb2RlPiBMSU5LIDwvY29kZT4KLSAgICAgKiBlbGVtZW50IGlu
IEhUTUwgNC4wLCBhbmQgdGhlIG1lZGlhIHBzZXVkby1hdHRyaWJ1dGUgZm9yIHRoZSBYTUwKLSAg
ICAgKiA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9XRC14bWwtc3R5bGVzaGVldCI+IHN0
eWxlIHNoZWV0Ci0gICAgICogcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiA8L2E+IC4KLSAgICAgKgot
ICAgICAqLwotICAgIE1lZGlhTGlzdCBtZWRpYSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
QGludGVybmFsCi0gICAgICovCi0gICAgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdDsKLSAg
ICBTdHlsZVNoZWV0SW1wbCAqaGFuZGxlKCkgY29uc3QgeyByZXR1cm4gaW1wbDsgfQotICAgIGJv
b2wgaXNOdWxsKCkgY29uc3Q7Ci1wcm90ZWN0ZWQ6Ci0gICAgU3R5bGVTaGVldEltcGwgKmltcGw7
Ci19OwotCi0jZW5kaWYKLQogLyoqCiAgKiBUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBh
IHNwZWNpZmljIENTUyBvcGVyYXRpb24gaXMgaW1wb3NzaWJsZQogICogdG8gcGVyZm9ybS4KQEAg
LTE4MiwyMyArNDAsNiBAQCBjbGFzcyBDU1NFeGNlcHRpb24KIAogcHVibGljOgogCi0jaWYgIUtI
VE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIENTU0V4Y2VwdGlvbih1bnNpZ25lZCBzaG9ydCBf
Y29kZSkgeyBjb2RlID0gX2NvZGU7IH0KLSAgICBDU1NFeGNlcHRpb24oY29uc3QgQ1NTRXhjZXB0
aW9uICZvdGhlcikgeyBjb2RlID0gb3RoZXIuY29kZTsgfQotCi0gICAgQ1NTRXhjZXB0aW9uICYg
b3BlcmF0b3IgPSAoY29uc3QgQ1NTRXhjZXB0aW9uICZvdGhlcikKLSAgICAgICAgeyBjb2RlID0g
b3RoZXIuY29kZTsgcmV0dXJuICp0aGlzOyB9Ci0KLSAgICB2aXJ0dWFsIH5DU1NFeGNlcHRpb24o
KSB7fQotICAgIC8qKgotICAgICAqIEFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBl
cnJvciBnZW5lcmF0ZWQuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCAgIGNv
ZGU7Ci0KLSNlbmRpZgotCiAgICAgZW51bSBFeGNlcHRpb25Db2RlCiAgICAgewogICAgICAgICBT
WU5UQVhfRVJSICAgICAgICAgICAgICAgICAgICAgPSAwLApAQCAtMjA3LDMxMSArNDgsNiBAQCBw
dWJsaWM6CiAgICAgICAgIF9FWENFUFRJT05fTUFYICAgICAgICAgICAgICAgICA9IDE5OTkKICAg
ICB9OwogfTsKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLWNsYXNzIENTU1N0eWxl
U2hlZXRJbXBsOwotY2xhc3MgQ1NTUnVsZTsKLWNsYXNzIENTU1J1bGVMaXN0OwotCi0vKioKLSAq
IFRoZSA8Y29kZT4gQ1NTU3R5bGVTaGVldCA8L2NvZGU+IGludGVyZmFjZSBpcyBhIGNvbmNyZXRl
IGludGVyZmFjZQotICogdXNlZCB0byByZXByZXNlbnQgYSBDU1Mgc3R5bGUgc2hlZXQgaS5lLiBh
IHN0eWxlIHNoZWV0IHdob3NlCi0gKiBjb250ZW50IHR5cGUgaXMgInRleHQvY3NzIi4KLSAqCi0g
Ki8KLWNsYXNzIENTU1N0eWxlU2hlZXQgOiBwdWJsaWMgU3R5bGVTaGVldAotewotcHVibGljOgot
ICAgIENTU1N0eWxlU2hlZXQoKTsKLSAgICBDU1NTdHlsZVNoZWV0KGNvbnN0IENTU1N0eWxlU2hl
ZXQgJm90aGVyKTsKLSAgICBDU1NTdHlsZVNoZWV0KGNvbnN0IFN0eWxlU2hlZXQgJm90aGVyKTsK
LSAgICBDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXRJbXBsICppbXBsKTsKLXB1YmxpYzoKLQot
ICAgIENTU1N0eWxlU2hlZXQgJiBvcGVyYXRvciA9IChjb25zdCBDU1NTdHlsZVNoZWV0ICZvdGhl
cik7Ci0gICAgQ1NTU3R5bGVTaGVldCAmIG9wZXJhdG9yID0gKGNvbnN0IFN0eWxlU2hlZXQgJm90
aGVyKTsKLQotICAgIH5DU1NTdHlsZVNoZWV0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGlz
IHN0eWxlIHNoZWV0IGNvbWVzIGZyb20gYW4gPGNvZGU+IEBpbXBvcnQgPC9jb2RlPiBydWxlLAot
ICAgICAqIHRoZSA8Y29kZT4gb3duZXJSdWxlIDwvY29kZT4gYXR0cmlidXRlIHdpbGwgY29udGFp
biB0aGUgPGNvZGU+Ci0gICAgICogQ1NTSW1wb3J0UnVsZSA8L2NvZGU+IC4gSW4gdGhhdCBjYXNl
LCB0aGUgPGNvZGU+IG93bmVyTm9kZQotICAgICAqIDwvY29kZT4gYXR0cmlidXRlIGluIHRoZSA8
Y29kZT4gU3R5bGVTaGVldCA8L2NvZGU+IGludGVyZmFjZQotICAgICAqIHdpbGwgYmUgPGNvZGU+
IG51bGwgPC9jb2RlPiAuIElmIHRoZSBzdHlsZSBzaGVldCBjb21lcyBmcm9tIGFuCi0gICAgICog
ZWxlbWVudCBvciBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24sIHRoZSA8Y29kZT4gb3duZXJSdWxl
Ci0gICAgICogPC9jb2RlPiBhdHRyaWJ1dGUgd2lsbCBiZSA8Y29kZT4gbnVsbCA8L2NvZGU+IGFu
ZCB0aGUgPGNvZGU+Ci0gICAgICogb3duZXJOb2RlIDwvY29kZT4gYXR0cmlidXRlIHdpbGwgY29u
dGFpbiB0aGUgPGNvZGU+IE5vZGUKLSAgICAgKiA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqLwot
ICAgIENTU1J1bGUgb3duZXJSdWxlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbGlz
dCBvZiBhbGwgQ1NTIHJ1bGVzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHN0eWxlIHNoZWV0LgotICAg
ICAqIFRoaXMgaW5jbHVkZXMgYm90aCA8YQotICAgICAqIGhyZWY9Imh0dHA6Ly93d3cudzMub3Jn
L1RSL1JFQy1DU1MyL3N5bmRhdGEuaHRtbCNxOCI+IHJ1bGUgc2V0cwotICAgICAqIDwvYT4gYW5k
IDxhCi0gICAgICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvc3luZGF0YS5o
dG1sI2F0LXJ1bGVzIj4KLSAgICAgKiBhdC1ydWxlcyA8L2E+IC4KLSAgICAgKgotICAgICAqLwot
ICAgIENTU1J1bGVMaXN0IGNzc1J1bGVzKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2Vk
IHRvIGluc2VydCBhIG5ldyBydWxlIGludG8gdGhlIHN0eWxlIHNoZWV0LiBUaGUgbmV3IHJ1bGUK
LSAgICAgKiBub3cgYmVjb21lcyBwYXJ0IG9mIHRoZSBjYXNjYWRlLgotICAgICAqCi0gICAgICog
QHBhcmFtIHJ1bGUgVGhlIHBhcnNhYmxlIHRleHQgcmVwcmVzZW50aW5nIHRoZSBydWxlLiBGb3Ig
cnVsZQotICAgICAqIHNldHMgdGhpcyBjb250YWlucyBib3RoIHRoZSBzZWxlY3RvciBhbmQgdGhl
IHN0eWxlIGRlY2xhcmF0aW9uLgotICAgICAqIEZvciBhdC1ydWxlcywgdGhpcyBzcGVjaWZpZXMg
Ym90aCB0aGUgYXQtaWRlbnRpZmllciBhbmQgdGhlCi0gICAgICogcnVsZSBjb250ZW50LgotICAg
ICAqCi0gICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB3aXRoaW4gdGhlIHN0eWxlIHNoZWV0
J3MgcnVsZSBsaXN0IG9mCi0gICAgICogdGhlIHJ1bGUgYmVmb3JlIHdoaWNoIHRvIGluc2VydCB0
aGUgc3BlY2lmaWVkIHJ1bGUuIElmIHRoZQotICAgICAqIHNwZWNpZmllZCBpbmRleCBpcyBlcXVh
bCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHlsZSBzaGVldCdzCi0gICAgICogcnVsZSBjb2xsZWN0
aW9uLCB0aGUgcnVsZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHN0eWxlCi0gICAg
ICogc2hlZXQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBpbmRleCB3aXRoaW4gdGhlIHN0
eWxlIHNoZWV0J3MgcnVsZSBjb2xsZWN0aW9uIG9mCi0gICAgICogdGhlIG5ld2x5IGluc2VydGVk
IHJ1bGUuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIEhJ
RVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2VkIGlmIHRoZSBydWxlIGNhbm5vdCBiZSBpbnNlcnRl
ZCBhdAotICAgICAqIHRoZSBzcGVjaWZpZWQgaW5kZXggZS5nLiBpZiBhbiA8Y29kZT4gQGltcG9y
dCA8L2NvZGU+IHJ1bGUgaXMKLSAgICAgKiBpbnNlcnRlZCBhZnRlciBhIHN0YW5kYXJkIHJ1bGUg
c2V0IG9yIG90aGVyIGF0LXJ1bGUuCi0gICAgICoKLSAgICAgKiAgSU5ERVhfU0laRV9FUlI6IFJh
aXNlZCBpZiB0aGUgc3BlY2lmaWVkIGluZGV4IGlzIG5vdCBhIHZhbGlkCi0gICAgICogaW5zZXJ0
aW9uIHBvaW50LgotICAgICAqCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjog
UmFpc2VkIGlmIHRoaXMgc3R5bGUgc2hlZXQgaXMKLSAgICAgKiByZWFkb25seS4KLSAgICAgKgot
ICAgICAqIEBleGNlcHRpb24gQ1NTRXhjZXB0aW9uCi0gICAgICogIFNZTlRBWF9FUlI6IFJhaXNl
ZCBpZiB0aGUgc3BlY2lmaWVkIHJ1bGUgaGFzIGEgc3ludGF4IGVycm9yCi0gICAgICogYW5kIGlz
IHVucGFyc2FibGUuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBpbnNlcnRSdWxlICgg
Y29uc3QgRE9NU3RyaW5nICZydWxlLCB1bnNpZ25lZCBpbmRleCApOwotCi0gICAgLyoqCi0gICAg
ICogVXNlZCB0byBkZWxldGUgYSBydWxlIGZyb20gdGhlIHN0eWxlIHNoZWV0LgotICAgICAqCi0g
ICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB3aXRoaW4gdGhlIHN0eWxlIHNoZWV0J3MgcnVs
ZSBsaXN0IG9mCi0gICAgICogdGhlIHJ1bGUgdG8gcmVtb3ZlLgotICAgICAqCi0gICAgICogQHJl
dHVybgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBJTkRF
WF9TSVpFX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgaW5kZXggZG9lcyBub3QKLSAgICAg
KiBjb3JyZXNwb25kIHRvIGEgcnVsZSBpbiB0aGUgc3R5bGUgc2hlZXQncyBydWxlIGxpc3QuCi0g
ICAgICoKLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhp
cyBzdHlsZSBzaGVldCBpcwotICAgICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAg
dm9pZCBkZWxldGVSdWxlICggdW5zaWduZWQgaW5kZXggKTsKLQotICAgIC8qIE1pY3Jvc29mdCBl
eHRlbnNpb24uICovCi0gICAgdm9pZCBhZGRSdWxlICggY29uc3QgRE9NU3RyaW5nICZzZWxlY3Rv
ciwgY29uc3QgRE9NU3RyaW5nICZzdHlsZSwgaW50IGluZGV4ICk7Ci19OwotCi0KLWNsYXNzIFN0
eWxlU2hlZXRMaXN0SW1wbDsKLWNsYXNzIFN0eWxlU2hlZXQ7Ci0KLS8qKgotICogVGhlIDxjb2Rl
PiBTdHlsZVNoZWV0TGlzdCA8L2NvZGU+IGludGVyZmFjZSBwcm92aWRlcyB0aGUKLSAqIGFic3Ry
YWN0aW9uIG9mIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBzdHlsZSBzaGVldHMuCi0gKgotICov
Ci1jbGFzcyBTdHlsZVNoZWV0TGlzdAotewotcHVibGljOgotICAgIFN0eWxlU2hlZXRMaXN0KCk7
Ci0gICAgU3R5bGVTaGVldExpc3QoY29uc3QgU3R5bGVTaGVldExpc3QgJm90aGVyKTsKLSAgICBT
dHlsZVNoZWV0TGlzdChTdHlsZVNoZWV0TGlzdEltcGwgKmltcGwpOwotcHVibGljOgotCi0gICAg
U3R5bGVTaGVldExpc3QgJiBvcGVyYXRvciA9IChjb25zdCBTdHlsZVNoZWV0TGlzdCAmb3RoZXIp
OwotCi0gICAgflN0eWxlU2hlZXRMaXN0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbnVtYmVy
IG9mIDxjb2RlPiBTdHlsZVNoZWV0IDwvY29kZT4gaW4gdGhlIGxpc3QuIFRoZSByYW5nZQotICAg
ICAqIG9mIHZhbGlkIGNoaWxkIHN0eWxlc2hlZXQgaW5kaWNlcyBpcyA8Y29kZT4gMCA8L2NvZGU+
IHRvIDxjb2RlPgotICAgICAqIGxlbmd0aC0xIDwvY29kZT4gaW5jbHVzaXZlLgotICAgICAqCi0g
ICAgICovCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBV
c2VkIHRvIHJldHJpZXZlIGEgc3R5bGUgc2hlZXQgYnkgb3JkaW5hbCBpbmRleC4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSBpbmRleCBJbmRleCBpbnRvIHRoZSBjb2xsZWN0aW9uCi0gICAgICoKLSAg
ICAgKiBAcmV0dXJuIFRoZSBzdHlsZSBzaGVldCBhdCB0aGUgPGNvZGU+IGluZGV4IDwvY29kZT4g
cG9zaXRpb24gaW4KLSAgICAgKiB0aGUgPGNvZGU+IFN0eWxlU2hlZXRMaXN0IDwvY29kZT4gLCBv
ciA8Y29kZT4gbnVsbCA8L2NvZGU+IGlmCi0gICAgICogdGhhdCBpcyBub3QgYSB2YWxpZCBpbmRl
eC4KLSAgICAgKgotICAgICAqLwotICAgIFN0eWxlU2hlZXQgaXRlbSAoIHVuc2lnbmVkIGluZGV4
ICk7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKi8KLSAgICBTdHlsZVNoZWV0
TGlzdEltcGwgKmhhbmRsZSgpIGNvbnN0OwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7Ci0KLXBy
b3RlY3RlZDoKLSAgICBTdHlsZVNoZWV0TGlzdEltcGwgKmltcGw7Ci19OwotCi0KLWNsYXNzIE1l
ZGlhTGlzdEltcGw7Ci1jbGFzcyBDU1NSdWxlOwotY2xhc3MgQ1NTU3R5bGVTaGVldDsKLQotLyoq
Ci0gKiBUaGUgPGNvZGU+IE1lZGlhTGlzdCA8L2NvZGU+IGludGVyZmFjZSBwcm92aWRlcyB0aGUg
YWJzdHJhY3Rpb24gb2YKLSAqIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBtZWRpYSwgd2l0aG91
dCBkZWZpbmluZyBvciBjb25zdHJhaW5pbmcKLSAqIGhvdyB0aGlzIGNvbGxlY3Rpb24gaXMgaW1w
bGVtZW50ZWQuIEFsbCBtZWRpYSBhcmUgbG93ZXJjYXNlCi0gKiBzdHJpbmdzLgotICoKLSAqLwot
Y2xhc3MgTWVkaWFMaXN0Ci17Ci1wdWJsaWM6Ci0gICAgTWVkaWFMaXN0KCk7Ci0gICAgTWVkaWFM
aXN0KGNvbnN0IE1lZGlhTGlzdCAmb3RoZXIpOwotICAgIE1lZGlhTGlzdChNZWRpYUxpc3RJbXBs
ICppbXBsKTsKLXB1YmxpYzoKLQotICAgIE1lZGlhTGlzdCAmIG9wZXJhdG9yID0gKGNvbnN0IE1l
ZGlhTGlzdCAmb3RoZXIpOwotCi0gICAgfk1lZGlhTGlzdCgpOwotCi0gICAgLyoqCi0gICAgICog
VGhlIHBhcnNhYmxlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lZGlhIGxpc3QuIFRo
aXMgaXMgYQotICAgICAqIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhLgotICAgICAqCi0g
ICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBTWU5UQVhfRVJSOiBSYWlzZWQg
aWYgdGhlIHNwZWNpZmllZCBzdHJpbmcgdmFsdWUgaGFzIGEgc3ludGF4IGVycm9yIGFuZAotICAg
ICAqIGlzIHVucGFyc2FibGUuCi0gICAgICoKLSAgICAgKiBOT19NT0RJRklDQVRJT05fQUxMT1dF
RF9FUlI6IFJhaXNlZCBpZiB0aGlzIG1lZGlhIGxpc3QgaXMgcmVhZG9ubHkuCi0gICAgICovCi0g
ICAgRE9NU3RyaW5nIG1lZGlhVGV4dCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogc2VlIEBy
ZWYgbWVkaWFUZXh0Ci0gICAgICovCi0gICAgdm9pZCBzZXRNZWRpYVRleHQoY29uc3QgRE9NU3Ry
aW5nICZ2YWx1ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbnVtYmVyIG9mIG1lZGlhIGluIHRo
ZSBsaXN0LiBUaGUgcmFuZ2Ugb2YgdmFsaWQgbWVkaWEgaXMgMCB0byBsZW5ndGgtMSBpbmNsdXNp
dmUuCi0gICAgICovCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0KLQotICAgIC8qKgot
ICAgICAqIFJldHVybnMgdGhlIGluZGV4dGggaW4gdGhlIGxpc3QuIElmIGluZGV4IGlzIGdyZWF0
ZXIgdGhhbiBvciBlcXVhbCB0bwotICAgICAqIHRoZSBudW1iZXIgb2YgbWVkaWEgaW4gdGhlIGxp
c3QsIHRoaXMgcmV0dXJucyBudWxsLgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IEluZGV4
IGludG8gdGhlIGNvbGxlY3Rpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBtZWRpdW0g
YXQgdGhlIGluZGV4dGggcG9zaXRpb24gaW4gdGhlIE1lZGlhTGlzdCwgb3IgbnVsbCBpZgotICAg
ICAqIHRoYXQgaXMgbm90IGEgdmFsaWQgaW5kZXguCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogRGVsZXRlcyB0aGUg
bWVkaXVtIGluZGljYXRlZCBieSBvbGRNZWRpdW0gZnJvbSB0aGUgbGlzdC4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSBvbGRNZWRpdW0gVGhlIG1lZGl1bSB0byBkZWxldGUgaW4gdGhlIG1lZGlhIGxp
c3QuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbGlzdCBpcyByZWFkb25seS4K
LSAgICAgKgotICAgICAqIE5PVF9GT1VORF9FUlI6IFJhaXNlZCBpZiBvbGRNZWRpdW0gaXMgbm90
IGluIHRoZSBsaXN0LgotICAgICAqLwotICAgIHZvaWQgZGVsZXRlTWVkaXVtKGNvbnN0IERPTVN0
cmluZyAmb2xkTWVkaXVtKTsKLQotICAgIC8qKgotICAgICAqIEFkZHMgdGhlIG1lZGl1bSBuZXdN
ZWRpdW0gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gSWYgdGhlIG5ld01lZGl1bSBpcwotICAgICAq
IGFscmVhZHkgdXNlZCwgaXQgaXMgZmlyc3QgcmVtb3ZlZC4KLSAgICAgKgotICAgICAqIEBwYXJh
bSBuZXdNZWRpdW0gVGhlIG5ldyBtZWRpdW0gdG8gYWRkLgotICAgICAqCi0gICAgICogQGV4Y2Vw
dGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IElmIHRoZSBt
ZWRpdW0gY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IGFyZQotICAgICAqIGludmFsaWQgaW4gdGhl
IHVuZGVybHlpbmcgc3R5bGUgbGFuZ3VhZ2UuCi0gICAgICoKLSAgICAgKiBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIGxpc3QgaXMgcmVhZG9ubHkuCi0gICAgICov
Ci0gICAgdm9pZCBhcHBlbmRNZWRpdW0oY29uc3QgRE9NU3RyaW5nICZuZXdNZWRpdW0pOwotCi0g
ICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICovCi0gICAgTWVkaWFMaXN0SW1wbCAqaGFu
ZGxlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAg
IE1lZGlhTGlzdEltcGwgKmltcGw7Ci19OwotCi1jbGFzcyBMaW5rU3R5bGVJbXBsOwotCi1jbGFz
cyBMaW5rU3R5bGUKLXsKLXB1YmxpYzoKLSAgICBMaW5rU3R5bGUoKTsKLSAgICBMaW5rU3R5bGUo
Y29uc3QgTGlua1N0eWxlICZvdGhlcik7Ci0KLSAgICBMaW5rU3R5bGUgJiBvcGVyYXRvciA9IChj
b25zdCBMaW5rU3R5bGUgJm90aGVyKTsKLSAgICBMaW5rU3R5bGUgJiBvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcik7Ci0KLSAgICB+TGlua1N0eWxlKCk7Ci0KLSAgICBTdHlsZVNoZWV0IHNo
ZWV0KCk7Ci0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgTm9k
ZUltcGwgKm5vZGU7Ci0gICAgTGlua1N0eWxlSW1wbCAqaW1wbDsKLX07Ci0KLWNsYXNzIERvY3Vt
ZW50U3R5bGVJbXBsOwotCi1jbGFzcyBEb2N1bWVudFN0eWxlCi17Ci1wdWJsaWM6Ci0gICAgRG9j
dW1lbnRTdHlsZSgpOwotICAgIERvY3VtZW50U3R5bGUoY29uc3QgRG9jdW1lbnRTdHlsZSAmb3Ro
ZXIpOwotCi0gICAgRG9jdW1lbnRTdHlsZSAmIG9wZXJhdG9yID0gKGNvbnN0IERvY3VtZW50U3R5
bGUgJm90aGVyKTsKLSAgICBEb2N1bWVudFN0eWxlICYgb3BlcmF0b3IgPSAoY29uc3QgRG9jdW1l
bnQgJm90aGVyKTsKLQotICAgIH5Eb2N1bWVudFN0eWxlKCk7Ci0KLSAgICBTdHlsZVNoZWV0TGlz
dCBzdHlsZVNoZWV0cygpOwotCi0gICAgRE9NU3RyaW5nIHByZWZlcnJlZFN0eWxlc2hlZXRTZXQo
KTsKLSAgICBET01TdHJpbmcgc2VsZWN0ZWRTdHlsZXNoZWV0U2V0KCk7Ci0gICAgdm9pZCBzZXRT
ZWxlY3RlZFN0eWxlc2hlZXRTZXQoY29uc3QgRE9NU3RyaW5nJiBhU3RyaW5nKTsKLQotICAgIGJv
b2wgaXNOdWxsKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBEb2N1bWVudEltcGwgKmRvYzsK
LSAgICBEb2N1bWVudFN0eWxlSW1wbCAqaW1wbDsKLX07Ci0KLSNlbmRpZgotCiB9OyAvLyBuYW1l
c3BhY2UKIAogI2VuZGlmCkluZGV4OiBraHRtbC9kb20vY3NzX3ZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc192YWx1ZS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIGtodG1sL2RvbS9jc3NfdmFsdWUu
aAotLS0ga2h0bWwvZG9tL2Nzc192YWx1ZS5oCTE2IFNlcCAyMDA1IDIyOjQyOjAzIC0wMDAwCTEu
MTAKKysrIGtodG1sL2RvbS9jc3NfdmFsdWUuaAk0IERlYyAyMDA1IDEwOjI0OjMxIC0wMDAwCkBA
IC0zNywyMDMgKzM3LDYgQEAgY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGw7CiBjbGFzcyBD
U1NSdWxlOwogY2xhc3MgQ1NTVmFsdWU7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQot
Ci0vKioKLSAqIFRoZSA8Y29kZT4gQ1NTU3R5bGVEZWNsYXJhdGlvbiA8L2NvZGU+IGludGVyZmFj
ZSByZXByZXNlbnRzIGEKLSAqIHNpbmdsZSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9S
RUMtQ1NTMi9zeW5kYXRhLmh0bWwjYmxvY2siPgotICogQ1NTIGRlY2xhcmF0aW9uIGJsb2NrIDwv
YT4gLiBUaGlzIGludGVyZmFjZSBtYXkgYmUgdXNlZCB0bwotICogZGV0ZXJtaW5lIHRoZSBzdHls
ZSBwcm9wZXJ0aWVzIGN1cnJlbnRseSBzZXQgaW4gYSBibG9jayBvciB0byBzZXQKLSAqIHN0eWxl
IHByb3BlcnRpZXMgZXhwbGljaXRseSB3aXRoaW4gdGhlIGJsb2NrLgotICoKLSAqICBXaGlsZSBh
biBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IHJlY29nbml6ZSBhbGwgQ1NTIHByb3BlcnRpZXMKLSAq
IHdpdGhpbiBhIENTUyBkZWNsYXJhdGlvbiBibG9jaywgaXQgaXMgZXhwZWN0ZWQgdG8gcHJvdmlk
ZSBhY2Nlc3MgdG8KLSAqIGFsbCBzcGVjaWZpZWQgcHJvcGVydGllcyB0aHJvdWdoIHRoZSA8Y29k
ZT4gQ1NTU3R5bGVEZWNsYXJhdGlvbgotICogPC9jb2RlPiBpbnRlcmZhY2UuIEZ1cnRoZXJtb3Jl
LCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBzdXBwb3J0IGEKLSAqIHNwZWNpZmljIGxldmVsIG9mIENT
UyBzaG91bGQgY29ycmVjdGx5IGhhbmRsZSA8YQotICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcv
VFIvUkVDLUNTUzIvYWJvdXQuaHRtbCNzaG9ydGhhbmQiPiBDU1MKLSAqIHNob3J0aGFuZCA8L2E+
IHByb3BlcnRpZXMgZm9yIHRoYXQgbGV2ZWwuIEZvciBhIGZ1cnRoZXIgZGlzY3Vzc2lvbgotICog
b2Ygc2hvcnRoYW5kIHByb3BlcnRpZXMsIHNlZSB0aGUgPGNvZGU+IENTUzJQcm9wZXJ0aWVzIDwv
Y29kZT4KLSAqIGludGVyZmFjZS4KLSAqCi0gKi8KLWNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb24K
LXsKLXB1YmxpYzoKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKCk7Ci0gICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbihjb25zdCBDU1NTdHlsZURlY2xhcmF0aW9uICZvdGhlcik7Ci0gICAgQ1NTU3R5bGVE
ZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqaW1wbCk7Ci1wdWJsaWM6Ci0KLSAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTU3R5bGVEZWNsYXJh
dGlvbiAmb3RoZXIpOwotCi0gICAgfkNTU1N0eWxlRGVjbGFyYXRpb24oKTsKLQotICAgIC8qKgot
ICAgICAqIFRoZSBwYXJzYWJsZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkZWNsYXJh
dGlvbiBibG9jawotICAgICAqIChpbmNsdWRpbmcgdGhlIHN1cnJvdW5kaW5nIGN1cmx5IGJyYWNl
cykuIFNldHRpbmcgdGhpcwotICAgICAqIGF0dHJpYnV0ZSB3aWxsIHJlc3VsdCBpbiB0aGUgcGFy
c2luZyBvZiB0aGUgbmV3IHZhbHVlIGFuZAotICAgICAqIHJlc2V0dGluZyBvZiB0aGUgcHJvcGVy
dGllcyBpbiB0aGUgZGVjbGFyYXRpb24gYmxvY2suCi0gICAgICoKLSAgICAgKi8KLSAgICBET01T
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogc2VlIEByZWYgY3NzVGV4
dAotICAgICAqIEBleGNlcHRpb24gQ1NTRXhjZXB0aW9uCi0gICAgICogU1lOVEFYX0VSUjogUmFp
c2VkIGlmIHRoZSBzcGVjaWZpZWQgQ1NTIHN0cmluZyB2YWx1ZSBoYXMgYQotICAgICAqIHN5bnRh
eCBlcnJvciBhbmQgaXMgdW5wYXJzYWJsZS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9N
RXhjZXB0aW9uCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlm
IHRoaXMgZGVjbGFyYXRpb24gaXMKLSAgICAgKiByZWFkb25seS4KLSAgICAgKgotICAgICAqLwot
ICAgIHZvaWQgc2V0Q3NzVGV4dCggY29uc3QgRE9NU3RyaW5nICYgKTsKLQotICAgIC8qKgotICAg
ICAqIFRoZSBudW1iZXIgb2YgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBleHBsaWNpdGx5IHNl
dCBpbiB0aGlzCi0gICAgICogZGVjbGFyYXRpb24gYmxvY2suCi0gICAgICoKLSAgICAgKi8KLSAg
ICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoZSBDU1MgcnVs
ZSB0aGF0IGNvbnRhaW5zIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suCi0gICAgICoKLSAgICAgKi8K
LSAgICBDU1NSdWxlIHBhcmVudFJ1bGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQg
dG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgQ1NTIHByb3BlcnR5IGlmIGl0IGhhcyBiZWVuCi0g
ICAgICogZXhwbGljaXRseSBzZXQgd2l0aGluIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suCi0gICAg
ICoKLSAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBDU1MgcHJvcGVy
dHkuIFNlZSB0aGUgPGEKLSAgICAgKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NT
Mi9wcm9waWR4Lmh0bWwiPiBDU1MgcHJvcGVydHkKLSAgICAgKiBpbmRleCA8L2E+IC4KLSAgICAg
KgotICAgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGlmIGl0
IGhhcyBiZWVuCi0gICAgICogZXhwbGljaXRseSBzZXQgZm9yIHRoaXMgZGVjbGFyYXRpb24gYmxv
Y2suIFJldHVybnMgdGhlIGVtcHR5Ci0gICAgICogc3RyaW5nIGlmIHRoZSBwcm9wZXJ0eSBoYXMg
bm90IGJlZW4gc2V0LgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGdldFByb3BlcnR5
VmFsdWUgKCBjb25zdCBET01TdHJpbmcgJnByb3BlcnR5TmFtZSApOwotCi0gICAgLyoqCi0gICAg
ICogVXNlZCB0byByZXRyaWV2ZSB0aGUgb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1
ZSBvZiBhCi0gICAgICogQ1NTIHByb3BlcnR5IGlmIGl0IGhhcyBiZWVuIGV4cGxpY2l0bHkgc2V0
IHdpdGhpbiB0aGlzCi0gICAgICogZGVjbGFyYXRpb24gYmxvY2suIFRoaXMgbWV0aG9kIHJldHVy
bnMgbnVsbCBpZiB0aGUgcHJvcGVydHkgaXMKLSAgICAgKiBhIDxhIGhyZWY9Imh0dHA6Ly93d3cu
dzMub3JnL1RSL1JFQy1DU1MyL2Fib3V0Lmh0bWwjc2hvcnRoYW5kIj4KLSAgICAgKiBzaG9ydGhh
bmQgPC9hPiBwcm9wZXJ0eS4gU2hvcnRoYW5kIHByb3BlcnR5IHZhbHVlcyBjYW4gb25seSBiZQot
ICAgICAqIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBhcyBzdHJpbmdzLCB1c2luZyB0aGUgPGNvZGU+
Ci0gICAgICogZ2V0UHJvcGVydHlWYWx1ZSA8L2NvZGU+IGFuZCA8Y29kZT4gc2V0UHJvcGVydHkg
PC9jb2RlPgotICAgICAqIG1ldGhvZHMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJvcGVydHlO
YW1lIFRoZSBuYW1lIG9mIHRoZSBDU1MgcHJvcGVydHkuIFNlZSB0aGUgPGEKLSAgICAgKiBocmVm
PSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9wcm9waWR4Lmh0bWwiPiBDU1MgcHJvcGVy
dHkKLSAgICAgKiBpbmRleCA8L2E+IC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyB0
aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGlmIGl0IGhhcyBiZWVuCi0gICAgICogZXhwbGljaXRs
eSBzZXQgZm9yIHRoaXMgZGVjbGFyYXRpb24gYmxvY2suIFJldHVybnMgdGhlIDxjb2RlPgotICAg
ICAqIG51bGwgPC9jb2RlPiBpZiB0aGUgcHJvcGVydHkgaGFzIG5vdCBiZWVuIHNldC4KLSAgICAg
KgotICAgICAqLwotICAgIENTU1ZhbHVlIGdldFByb3BlcnR5Q1NTVmFsdWUgKCBjb25zdCBET01T
dHJpbmcgJnByb3BlcnR5TmFtZSApOwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byByZW1vdmUg
YSBDU1MgcHJvcGVydHkgaWYgaXQgaGFzIGJlZW4gZXhwbGljaXRseSBzZXQKLSAgICAgKiB3aXRo
aW4gdGhpcyBkZWNsYXJhdGlvbiBibG9jay4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwcm9wZXJ0
eU5hbWUgVGhlIG5hbWUgb2YgdGhlIENTUyBwcm9wZXJ0eS4gU2VlIHRoZSA8YQotICAgICAqIGhy
ZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1DU1MyL3Byb3BpZHguaHRtbCI+IENTUyBwcm9w
ZXJ0eQotICAgICAqIGluZGV4IDwvYT4gLgotICAgICAqCi0gICAgICogQHJldHVybiBSZXR1cm5z
IHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgaWYgaXQgaGFzIGJlZW4KLSAgICAgKiBleHBsaWNp
dGx5IHNldCBmb3IgdGhpcyBkZWNsYXJhdGlvbiBibG9jay4gUmV0dXJucyB0aGUgZW1wdHkKLSAg
ICAgKiBzdHJpbmcgaWYgdGhlIHByb3BlcnR5IGhhcyBub3QgYmVlbiBzZXQgb3IgdGhlIHByb3Bl
cnR5IG5hbWUKLSAgICAgKiBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgQ1NTMiBwcm9w
ZXJ0eS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogTk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBkZWNsYXJhdGlvbiBpcwot
ICAgICAqIHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIHJlbW92ZVBy
b3BlcnR5ICggY29uc3QgRE9NU3RyaW5nICZwcm9wZXJ0eU5hbWUgKTsKLQotICAgIC8qKgotICAg
ICAqIFVzZWQgdG8gcmV0cmlldmUgdGhlIHByaW9yaXR5IG9mIGEgQ1NTIHByb3BlcnR5IChlLmcu
IHRoZQotICAgICAqIDxjb2RlPiAiaW1wb3J0YW50IiA8L2NvZGU+IHF1YWxpZmllcikgaWYgdGhl
IHByb3BlcnR5IGhhcyBiZWVuCi0gICAgICogZXhwbGljaXRseSBzZXQgaW4gdGhpcyBkZWNsYXJh
dGlvbiBibG9jay4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIG5hbWUg
b2YgdGhlIENTUyBwcm9wZXJ0eS4gU2VlIHRoZSA8YQotICAgICAqIGhyZWY9Imh0dHA6Ly93d3cu
dzMub3JnL1RSL1JFQy1DU1MyL3Byb3BpZHguaHRtbCI+IENTUyBwcm9wZXJ0eQotICAgICAqIGlu
ZGV4IDwvYT4gLgotICAgICAqCi0gICAgICogQHJldHVybiBBIHN0cmluZyByZXByZXNlbnRpbmcg
dGhlIHByaW9yaXR5IChlLmcuIDxjb2RlPgotICAgICAqICJpbXBvcnRhbnQiIDwvY29kZT4gKSBp
ZiBvbmUgZXhpc3RzLiBUaGUgZW1wdHkgc3RyaW5nIGlmIG5vbmUKLSAgICAgKiBleGlzdHMuCi0g
ICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgZ2V0UHJvcGVydHlQcmlvcml0eSAoIGNvbnN0
IERPTVN0cmluZyAmcHJvcGVydHlOYW1lICk7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIHNl
dCBhIHByb3BlcnR5IHZhbHVlIGFuZCBwcmlvcml0eSB3aXRoaW4gdGhpcwotICAgICAqIGRlY2xh
cmF0aW9uIGJsb2NrLgotICAgICAqCi0gICAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFt
ZSBvZiB0aGUgQ1NTIHByb3BlcnR5LiBTZWUgdGhlIDxhCi0gICAgICogaHJlZj0iaHR0cDovL3d3
dy53My5vcmcvVFIvUkVDLUNTUzIvcHJvcGlkeC5odG1sIj4gQ1NTIHByb3BlcnR5Ci0gICAgICog
aW5kZXggPC9hPiAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIG5ldyB2YWx1ZSBv
ZiB0aGUgcHJvcGVydHkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcHJpb3JpdHkgVGhlIG5ldyBw
cmlvcml0eSBvZiB0aGUgcHJvcGVydHkgKGUuZy4gPGNvZGU+Ci0gICAgICogImltcG9ydGFudCIg
PC9jb2RlPiApLgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAqCi0gICAgICogQGV4Y2Vw
dGlvbiBDU1NFeGNlcHRpb24KLSAgICAgKiBTWU5UQVhfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNp
ZmllZCB2YWx1ZSBoYXMgYSBzeW50YXggZXJyb3IKLSAgICAgKiBhbmQgaXMgdW5wYXJzYWJsZS4K
LSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogIE5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgZGVjbGFyYXRpb24gaXMKLSAgICAg
KiByZWFkb25seS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0UHJvcGVydHkgKCBjb25z
dCBET01TdHJpbmcgJnByb3BlcnR5TmFtZSwgY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSwgY29uc3Qg
RE9NU3RyaW5nICZwcmlvcml0eSApOwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byByZXRyaWV2
ZSB0aGUgcHJvcGVydGllcyB0aGF0IGhhdmUgYmVlbiBleHBsaWNpdGx5IHNldAotICAgICAqIGlu
IHRoaXMgZGVjbGFyYXRpb24gYmxvY2suIFRoZSBvcmRlciBvZiB0aGUgcHJvcGVydGllcwotICAg
ICAqIHJldHJpZXZlZCB1c2luZyB0aGlzIG1ldGhvZCBkb2VzIG5vdCBoYXZlIHRvIGJlIHRoZSBv
cmRlciBpbgotICAgICAqIHdoaWNoIHRoZXkgd2VyZSBzZXQuIFRoaXMgbWV0aG9kIGNhbiBiZSB1
c2VkIHRvIGl0ZXJhdGUgb3ZlcgotICAgICAqIGFsbCBwcm9wZXJ0aWVzIGluIHRoaXMgZGVjbGFy
YXRpb24gYmxvY2suCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggb2YgdGhlIHBy
b3BlcnR5IG5hbWUgdG8gcmV0cmlldmUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuYW1l
IG9mIHRoZSBwcm9wZXJ0eSBhdCB0aGlzIG9yZGluYWwgcG9zaXRpb24uIFRoZQotICAgICAqIGVt
cHR5IHN0cmluZyBpZiBubyBwcm9wZXJ0eSBleGlzdHMgYXQgdGhpcyBwb3NpdGlvbi4KLSAgICAg
KgotICAgICAqLwotICAgIERPTVN0cmluZyBpdGVtICggdW5zaWduZWQgaW5kZXggKTsKLQotICAg
IC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqIG5vdCBwYXJ0IG9mIHRoZSBET00KLSAgICAg
Ki8KLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqaGFuZGxlKCkgY29uc3Q7Ci0gICAgYm9v
bCBpc051bGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIENTU1N0eWxlRGVjbGFyYXRpb25J
bXBsICppbXBsOwotfTsKLQotCi1jbGFzcyBDU1NWYWx1ZUltcGw7Ci0KLSNlbmRpZgotCi0KIC8q
KgogICogVGhlIDxjb2RlPiBDU1NWYWx1ZSA8L2NvZGU+IGludGVyZmFjZSByZXByZXNlbnRzIGEg
c2ltcGxlIG9yIGEKICAqIGNvbXBsZXhlIHZhbHVlLgpAQCAtMjQ0LDE5ICs0Nyw2IEBAIGNsYXNz
IENTU1ZhbHVlCiAKIHB1YmxpYzoKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAg
ICBDU1NWYWx1ZSgpOwotICAgIENTU1ZhbHVlKGNvbnN0IENTU1ZhbHVlICZvdGhlcik7Ci0gICAg
Q1NTVmFsdWUoQ1NTVmFsdWVJbXBsICppbXBsKTsKLXB1YmxpYzoKLQotICAgIENTU1ZhbHVlICYg
b3BlcmF0b3IgPSAoY29uc3QgQ1NTVmFsdWUgJm90aGVyKTsKLQotICAgIH5DU1NWYWx1ZSgpOwot
Ci0jZW5kaWYKLQogICAgIC8qKgogICAgICAqIEFuIGludGVnZXIgaW5kaWNhdGluZyB3aGljaCB0
eXBlIG9mIHVuaXQgYXBwbGllcyB0byB0aGUgdmFsdWUuCiAgICAgICoKQEAgLTI3MSwxMDkgKzYx
LDggQEAgcHVibGljOgogICAgICAgICBDU1NfQ1VTVE9NID0gMywKICAgICAgICAgQ1NTX0lOSVRJ
QUwgPSA0CiAgICAgfTsKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICAvKioK
LSAgICAgKiBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCB2YWx1ZS4KLSAg
ICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICAvKioK
LSAgICAgKiBzZWUgQHJlZiBjc3NUZXh0Ci0gICAgICogQGV4Y2VwdGlvbiBDU1NFeGNlcHRpb24K
LSAgICAgKiBTWU5UQVhfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBDU1Mgc3RyaW5nIHZh
bHVlIGhhcyBhCi0gICAgICogc3ludGF4IGVycm9yIGFuZCBpcyB1bnBhcnNhYmxlLgotICAgICAq
Ci0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBkZWNsYXJhdGlvbiBpcwotICAgICAqIHJlYWRv
bmx5LgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBzZXRDc3NUZXh0KCBjb25zdCBET01TdHJp
bmcgJiApOwotCi0gICAgLyoqCi0gICAgICogQSBjb2RlIGRlZmluaW5nIHRoZSB0eXBlIG9mIHRo
ZSB2YWx1ZSBhcyBkZWZpbmVkIGFib3ZlLgotICAgICAqCi0gICAgICovCi0gICAgdW5zaWduZWQg
c2hvcnQgY3NzVmFsdWVUeXBlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwK
LSAgICAgKiBub3QgcGFydCBvZiB0aGUgRE9NCi0gICAgICovCi0gICAgYm9vbCBpc0NTU1ZhbHVl
TGlzdCgpIGNvbnN0OwotICAgIGJvb2wgaXNDU1NQcmltaXRpdmVWYWx1ZSgpIGNvbnN0OwotICAg
IENTU1ZhbHVlSW1wbCAqaGFuZGxlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdDsK
LQotcHJvdGVjdGVkOgotICAgIENTU1ZhbHVlSW1wbCAqaW1wbDsKLQotI2VuZGlmCi0KIH07CiAK
LQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLWNsYXNzIENTU1ZhbHVlTGlzdEltcGw7
Ci1jbGFzcyBDU1NWYWx1ZTsKLQotLyoqCi0gKiBUaGUgPGNvZGU+IENTU1ZhbHVlTGlzdCA8L2Nv
ZGU+IGludGVyZmFjZSBwcm92aWRlcyB0aGUgYWJzcmFjdGlvbgotICogb2YgYW4gb3JkZXJlZCBj
b2xsZWN0aW9uIG9mIENTUyB2YWx1ZXMuCi0gKgotICovCi1jbGFzcyBDU1NWYWx1ZUxpc3QgOiBw
dWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBDU1NWYWx1ZUxpc3QoKTsKLSAgICBDU1NW
YWx1ZUxpc3QoY29uc3QgQ1NTVmFsdWVMaXN0ICZvdGhlcik7Ci0gICAgQ1NTVmFsdWVMaXN0KGNv
bnN0IENTU1ZhbHVlICZvdGhlcik7Ci0gICAgQ1NTVmFsdWVMaXN0KENTU1ZhbHVlTGlzdEltcGwg
KmltcGwpOwotcHVibGljOgotCi0gICAgQ1NTVmFsdWVMaXN0ICYgb3BlcmF0b3IgPSAoY29uc3Qg
Q1NTVmFsdWVMaXN0ICZvdGhlcik7Ci0gICAgQ1NTVmFsdWVMaXN0ICYgb3BlcmF0b3IgPSAoY29u
c3QgQ1NTVmFsdWUgJm90aGVyKTsKLQotICAgIH5DU1NWYWx1ZUxpc3QoKTsKLQotICAgIC8qKgot
ICAgICAqIFRoZSBudW1iZXIgb2YgPGNvZGU+IENTU1ZhbHVlIDwvY29kZT4gcyBpbiB0aGUgbGlz
dC4gVGhlIHJhbmdlCi0gICAgICogb2YgdmFsaWQgdmFsdWVzIGluZGljZXMgaXMgPGNvZGU+IDAg
PC9jb2RlPiB0byA8Y29kZT4gbGVuZ3RoLTEKLSAgICAgKiA8L2NvZGU+IGluY2x1c2l2ZS4KLSAg
ICAgKgotICAgICAqLwotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotCi0gICAgLyoqCi0g
ICAgICogVXNlZCB0byByZXRyaWV2ZSBhIENTUyBydWxlIGJ5IG9yZGluYWwgaW5kZXguIFRoZSBv
cmRlciBpbiB0aGlzCi0gICAgICogY29sbGVjdGlvbiByZXByZXNlbnRzIHRoZSBvcmRlciBvZiB0
aGUgdmFsdWVzIGluIHRoZSBDU1Mgc3R5bGUKLSAgICAgKiBwcm9wZXJ0eS4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSBpbmRleCBJbmRleCBpbnRvIHRoZSBjb2xsZWN0aW9uLgotICAgICAqCi0gICAg
ICogQHJldHVybiBUaGUgc3R5bGUgcnVsZSBhdCB0aGUgPGNvZGU+IGluZGV4IDwvY29kZT4gcG9z
aXRpb24gaW4KLSAgICAgKiB0aGUgPGNvZGU+IENTU1ZhbHVlTGlzdCA8L2NvZGU+ICwgb3IgPGNv
ZGU+IG51bGwgPC9jb2RlPiBpZgotICAgICAqIHRoYXQgaXMgbm90IHZhbGlkIGluZGV4LgotICAg
ICAqCi0gICAgICovCi0gICAgQ1NTVmFsdWUgaXRlbSAoIHVuc2lnbmVkIGluZGV4ICk7Ci0KLXBy
b3RlY3RlZDoKLSAgICBDU1NWYWx1ZUxpc3RJbXBsICp2aW1wbDsKLX07Ci0KLQotY2xhc3MgQ1NT
UHJpbWl0aXZlVmFsdWVJbXBsOwotY2xhc3MgQ291bnRlcjsKLWNsYXNzIFJHQkNvbG9yOwotY2xh
c3MgUmVjdDsKLQotI2VuZGlmCi0KIC8qKgogICogVGhlIDxjb2RlPiBDU1NQcmltaXRpdmVWYWx1
ZSA8L2NvZGU+IGludGVyZmFjZSByZXByZXNlbnRzIGEgc2luZ2xlCiAgKiA8YSBocmVmPSJodHRw
Oi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi9zeW5kYXRhLmh0bWwjdmFsdWVzIj4gQ1NTCkBAIC0z
OTAsMjEgKzc5LDYgQEAgY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdQog
CiBwdWJsaWM6CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgQ1NTUHJpbWl0
aXZlVmFsdWUoKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1
ZSAmb3RoZXIpOwotICAgIENTU1ByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ZhbHVlICZvdGhlcik7
Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWVJbXBsICppbXBsKTsKLXB1
YmxpYzoKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlICYgb3BlcmF0b3IgPSAoY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUgJm90aGVyKTsKLSAgICBDU1NQcmltaXRpdmVWYWx1ZSAmIG9wZXJhdG9yID0g
KGNvbnN0IENTU1ZhbHVlICZvdGhlcik7Ci0KLSAgICB+Q1NTUHJpbWl0aXZlVmFsdWUoKTsKLQot
I2VuZGlmCi0KICAgICAvKioKICAgICAgKiBBbiBpbnRlZ2VyIGluZGljYXRpbmcgd2hpY2ggdHlw
ZSBvZiB1bml0IGFwcGxpZXMgdG8gdGhlIHZhbHVlLgogICAgICAqCkBAIC00NDAsMzI0ICsxMTQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIENTU19EQVNIQk9BUkRfUkVHSU9OID0gMjcsIC8vIEZJWE1F
OiBXaGF0IG9uIGVhcnRoIGlzIHRoaXMgZG9pbmcgYXMgYSBwcmltaXRpdmUgdmFsdWU/IFRoaXMg
aXMgaW5zYW5lLgogICAgICAgICBDU1NfSFRNTF9SRUxBVElWRSA9IDI1NQogICAgIH07Ci0KLSNp
ZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgLyoqCi0gICAgICogVGhlIHR5cGUgb2Yg
dGhlIHZhbHVlIGFzIGRlZmluZWQgYnkgdGhlIGNvbnN0YW50cyBzcGVjaWZpZWQKLSAgICAgKiBh
Ym92ZS4KLSAgICAgKgotICAgICAqLwotICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUo
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEEgbWV0aG9kIHRvIHNldCB0aGUgZmxvYXQgdmFs
dWUgd2l0aCBhIHNwZWNpZmllZCB1bml0LiBJZiB0aGUKLSAgICAgKiBwcm9wZXJ0eSBhdHRhY2hl
ZCB3aXRoIHRoaXMgdmFsdWUgY2FuIG5vdCBhY2NlcHQgdGhlIHNwZWNpZmllZAotICAgICAqIHVu
aXQgb3IgdGhlIGZsb2F0IHZhbHVlLCB0aGUgdmFsdWUgd2lsbCBiZSB1bmNoYW5nZWQgYW5kIGEK
LSAgICAgKiA8Y29kZT4gRE9NRXhjZXB0aW9uIDwvY29kZT4gd2lsbCBiZSByYWlzZWQuCi0gICAg
ICoKLSAgICAgKiBAcGFyYW0gdW5pdFR5cGUgQSB1bml0IGNvZGUgYXMgZGVmaW5lZCBhYm92ZS4g
VGhlIHVuaXQgY29kZSBjYW4KLSAgICAgKiBvbmx5IGJlIGEgZmxvYXQgdW5pdCB0eXBlIChlLmcu
IDxjb2RlPiBOVU1CRVIgPC9jb2RlPiAsIDxjb2RlPgotICAgICAqIFBFUkNFTlRBR0UgPC9jb2Rl
PiAsIDxjb2RlPiBDU1NfRU1TIDwvY29kZT4gLCA8Y29kZT4gQ1NTX0VYUwotICAgICAqIDwvY29k
ZT4gLCA8Y29kZT4gQ1NTX1BYIDwvY29kZT4gLCA8Y29kZT4gQ1NTX1BYIDwvY29kZT4gLAotICAg
ICAqIDxjb2RlPiBDU1NfQ00gPC9jb2RlPiAsIDxjb2RlPiBDU1NfTU0gPC9jb2RlPiAsIDxjb2Rl
PiBDU1NfSU4KLSAgICAgKiA8L2NvZGU+ICwgPGNvZGU+IENTU19QVCA8L2NvZGU+ICwgPGNvZGU+
IENTU19QQyA8L2NvZGU+ICwKLSAgICAgKiA8Y29kZT4gQ1NTX0RFRyA8L2NvZGU+ICwgPGNvZGU+
IENTU19SQUQgPC9jb2RlPiAsIDxjb2RlPgotICAgICAqIENTU19HUkFEIDwvY29kZT4gLCA8Y29k
ZT4gQ1NTX01TIDwvY29kZT4gLCA8Y29kZT4gQ1NTX1MgPC9jb2RlPgotICAgICAqICwgPGNvZGU+
IENTU19IWiA8L2NvZGU+ICwgPGNvZGU+IENTU19LSFogPC9jb2RlPiAsIDxjb2RlPgotICAgICAq
IENTU19ESU1FTlNJT04gPC9jb2RlPiApLgotICAgICAqCi0gICAgICogQHBhcmFtIGZsb2F0VmFs
dWUgVGhlIG5ldyBmbG9hdCB2YWx1ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKiBA
ZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIElOVkFMSURfQUNDRVNTX0VSUjogUmFpc2Vz
IGlmIHRoZSBhdHRhY2hlZCBwcm9wZXJ0eSBkb2Vzbid0Ci0gICAgICogc3VwcG9ydCB0aGUgZmxv
YXQgdmFsdWUgb3IgdGhlIHVuaXQgdHlwZS4KLSAgICAgKgotICAgICAqICBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIHByb3BlcnR5IGlzCi0gICAgICogcmVhZG9u
bHkuCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHNldEZsb2F0VmFsdWUgKCB1bnNpZ25lZCBz
aG9ydCB1bml0VHlwZSwgZmxvYXQgZmxvYXRWYWx1ZSApOwotCi0gICAgLyoqCi0gICAgICogVGhp
cyBtZXRob2QgaXMgdXNlZCB0byBnZXQgYSBmbG9hdCB2YWx1ZSBpbiBhIHNwZWNpZmllZCB1bml0
LgotICAgICAqIElmIHRoaXMgQ1NTIHZhbHVlIGRvZXNuJ3QgY29udGFpbiBhIGZsb2F0IHZhbHVl
IG9yIGNhbid0IGJlCi0gICAgICogY29udmVydGVkIGludG8gdGhlIHNwZWNpZmllZCB1bml0LCBh
IDxjb2RlPiBET01FeGNlcHRpb24KLSAgICAgKiA8L2NvZGU+IGlzIHJhaXNlZC4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSB1bml0VHlwZSBBIHVuaXQgY29kZSB0byBnZXQgdGhlIGZsb2F0IHZhbHVl
LiBUaGUgdW5pdAotICAgICAqIGNvZGUgY2FuIG9ubHkgYmUgYSBmbG9hdCB1bml0IHR5cGUgKGUu
Zy4gPGNvZGU+IENTU19OVU1CRVIKLSAgICAgKiA8L2NvZGU+ICwgPGNvZGU+IENTU19QRVJDRU5U
QUdFIDwvY29kZT4gLCA8Y29kZT4gQ1NTX0VNUwotICAgICAqIDwvY29kZT4gLCA8Y29kZT4gQ1NT
X0VYUyA8L2NvZGU+ICwgPGNvZGU+IENTU19QWCA8L2NvZGU+ICwKLSAgICAgKiA8Y29kZT4gQ1NT
X1BYIDwvY29kZT4gLCA8Y29kZT4gQ1NTX0NNIDwvY29kZT4gLCA8Y29kZT4gQ1NTX01NCi0gICAg
ICogPC9jb2RlPiAsIDxjb2RlPiBDU1NfSU4gPC9jb2RlPiAsIDxjb2RlPiBDU1NfUFQgPC9jb2Rl
PiAsCi0gICAgICogPGNvZGU+IENTU19QQyA8L2NvZGU+ICwgPGNvZGU+IENTU19ERUcgPC9jb2Rl
PiAsIDxjb2RlPiBDU1NfUkFECi0gICAgICogPC9jb2RlPiAsIDxjb2RlPiBDU1NfR1JBRCA8L2Nv
ZGU+ICwgPGNvZGU+IENTU19NUyA8L2NvZGU+ICwKLSAgICAgKiA8Y29kZT4gQ1NTX1MgPC9jb2Rl
PiAsIDxjb2RlPiBDU1NfSFogPC9jb2RlPiAsIDxjb2RlPiBDU1NfS0haCi0gICAgICogPC9jb2Rl
PiAsIDxjb2RlPiBDU1NfRElNRU5TSU9OIDwvY29kZT4gKS4KLSAgICAgKgotICAgICAqIEByZXR1
cm4gVGhlIGZsb2F0IHZhbHVlIGluIHRoZSBzcGVjaWZpZWQgdW5pdC4KLSAgICAgKgotICAgICAq
IEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9BQ0NFU1NfRVJSOiBSYWlz
ZXMgaWYgdGhlIENTUyB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4gYQotICAgICAqIGZsb2F0IHZhbHVl
IG9yIGlmIHRoZSBmbG9hdCB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgaW50byB0aGUKLSAgICAg
KiBzcGVjaWZpZWQgdW5pdC4KLSAgICAgKgotICAgICAqLwotICAgIGZsb2F0IGdldEZsb2F0VmFs
dWUgKCB1bnNpZ25lZCBzaG9ydCB1bml0VHlwZSApOwotCi0gICAgLyoqCi0gICAgICogQSBtZXRo
b2QgdG8gc2V0IHRoZSBzdHJpbmcgdmFsdWUgd2l0aCBhIHNwZWNpZmllZCB1bml0LiBJZiB0aGUK
LSAgICAgKiBwcm9wZXJ0eSBhdHRhY2hlZCB0byB0aGlzIHZhbHVlIGNhbid0IGFjY2VwdCB0aGUg
c3BlY2lmaWVkIHVuaXQKLSAgICAgKiBvciB0aGUgc3RyaW5nIHZhbHVlLCB0aGUgdmFsdWUgd2ls
bCBiZSB1bmNoYW5nZWQgYW5kIGEgPGNvZGU+Ci0gICAgICogRE9NRXhjZXB0aW9uIDwvY29kZT4g
d2lsbCBiZSByYWlzZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3RyaW5nVHlwZSBBIHN0cmlu
ZyBjb2RlIGFzIGRlZmluZWQgYWJvdmUuIFRoZSBzdHJpbmcKLSAgICAgKiBjb2RlIGNhbiBvbmx5
IGJlIGEgc3RyaW5nIHVuaXQgdHlwZSAoZS5nLiA8Y29kZT4gQ1NTX1VSSQotICAgICAqIDwvY29k
ZT4gLCA8Y29kZT4gQ1NTX0lERU5UIDwvY29kZT4gLCA8Y29kZT4gQ1NTX0lOSEVSSVQgPC9jb2Rl
PgotICAgICAqIGFuZCA8Y29kZT4gQ1NTX0FUVFIgPC9jb2RlPiApLgotICAgICAqCi0gICAgICog
QHBhcmFtIHN0cmluZ1ZhbHVlIFRoZSBuZXcgc3RyaW5nIHZhbHVlLiBJZiB0aGUgPGNvZGU+Ci0g
ICAgICogc3RyaW5nVHlwZSA8L2NvZGU+IGlzIGVxdWFsIHRvIDxjb2RlPiBDU1NfSU5IRVJJVCA8
L2NvZGU+ICwgdGhlCi0gICAgICogPGNvZGU+IHN0cmluZ1ZhbHVlIDwvY29kZT4gc2hvdWxkIGJl
IDxjb2RlPiBpbmhlcml0IDwvY29kZT4gLgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAq
IEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9BQ0NFU1NfRVJSOiBSYWlz
ZXMgaWYgdGhlIENTUyB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4gYQotICAgICAqIHN0cmluZyB2YWx1
ZSBvciBpZiB0aGUgc3RyaW5nIHZhbHVlIGNhbid0IGJlIGNvbnZlcnRlZCBpbnRvIHRoZQotICAg
ICAqIHNwZWNpZmllZCB1bml0LgotICAgICAqCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgcHJvcGVydHkgaXMKLSAgICAgKiByZWFkb25seS4KLSAg
ICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0U3RyaW5nVmFsdWUgKCB1bnNpZ25lZCBzaG9ydCBz
dHJpbmdUeXBlLCBjb25zdCBET01TdHJpbmcgJnN0cmluZ1ZhbHVlICk7Ci0KLSAgICAvKioKLSAg
ICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgc3RyaW5nIHZhbHVlIGluIGEgc3Bl
Y2lmaWVkCi0gICAgICogdW5pdC4gSWYgdGhlIENTUyB2YWx1ZSBkb2Vzbid0IGNvbnRhaW4gYSBz
dHJpbmcgdmFsdWUsIGEgPGNvZGU+Ci0gICAgICogRE9NRXhjZXB0aW9uIDwvY29kZT4gaXMgcmFp
c2VkLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgc3RyaW5nIHZhbHVlIGluIHRoZSBjdXJy
ZW50IHVuaXQuIFRoZSBjdXJyZW50Ci0gICAgICogPGNvZGU+IHZhbHVlVHlwZSA8L2NvZGU+IGNh
biBvbmx5IGJlIGEgc3RyaW5nIHVuaXQgdHlwZSAoZS5nLgotICAgICAqIDxjb2RlPiBDU1NfVVJJ
IDwvY29kZT4gLCA8Y29kZT4gQ1NTX0lERU5UIDwvY29kZT4gYW5kIDxjb2RlPgotICAgICAqIENT
U19BVFRSIDwvY29kZT4gKS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9u
Ci0gICAgICogSU5WQUxJRF9BQ0NFU1NfRVJSOiBSYWlzZXMgaWYgdGhlIENTUyB2YWx1ZSBkb2Vz
bid0IGNvbnRhaW4gYQotICAgICAqIHN0cmluZyB2YWx1ZS4KLSAgICAgKgotICAgICAqLwotICAg
IERPTVN0cmluZyBnZXRTdHJpbmdWYWx1ZSAoICApOwotCi0gICAgLyoqCi0gICAgICogVGhpcyBt
ZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIENvdW50ZXIgdmFsdWUuIElmIHRoaXMgQ1NTIHZhbHVl
Ci0gICAgICogZG9lc24ndCBjb250YWluIGEgY291bnRlciB2YWx1ZSwgYSA8Y29kZT4gRE9NRXhj
ZXB0aW9uIDwvY29kZT4KLSAgICAgKiBpcyByYWlzZWQuIE1vZGlmaWNhdGlvbiB0byB0aGUgY29y
cmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSBjYW4KLSAgICAgKiBiZSBhY2hpZXZlZCB1c2luZyB0
aGUgPGNvZGU+IENvdW50ZXIgPC9jb2RlPiBpbnRlcmZhY2UuCi0gICAgICoKLSAgICAgKiBAcmV0
dXJuIFRoZSBDb3VudGVyIHZhbHVlLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNl
cHRpb24KLSAgICAgKiBJTlZBTElEX0FDQ0VTU19FUlI6IFJhaXNlcyBpZiB0aGUgQ1NTIHZhbHVl
IGRvZXNuJ3QgY29udGFpbiBhCi0gICAgICogQ291bnRlciB2YWx1ZS4KLSAgICAgKgotICAgICAq
LwotICAgIENvdW50ZXIgZ2V0Q291bnRlclZhbHVlICggICk7Ci0KLSAgICAvKioKLSAgICAgKiBU
aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgUmVjdCB2YWx1ZS4gSWYgdGhpcyBDU1MgdmFs
dWUKLSAgICAgKiBkb2Vzbid0IGNvbnRhaW4gYSByZWN0IHZhbHVlLCBhIDxjb2RlPiBET01FeGNl
cHRpb24gPC9jb2RlPiBpcwotICAgICAqIHJhaXNlZC4gTW9kaWZpY2F0aW9uIHRvIHRoZSBjb3Jy
ZXNwb25kaW5nIHN0eWxlIHByb3BlcnR5IGNhbiBiZQotICAgICAqIGFjaGlldmVkIHVzaW5nIHRo
ZSA8Y29kZT4gUmVjdCA8L2NvZGU+IGludGVyZmFjZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4g
VGhlIFJlY3QgdmFsdWUuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgot
ICAgICAqIElOVkFMSURfQUNDRVNTX0VSUjogUmFpc2VzIGlmIHRoZSBDU1MgdmFsdWUgZG9lc24n
dCBjb250YWluIGEKLSAgICAgKiBSZWN0IHZhbHVlLgotICAgICAqCi0gICAgICovCi0gICAgUmVj
dCBnZXRSZWN0VmFsdWUgKCAgKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGlzIHVz
ZWQgdG8gZ2V0IHRoZSBSR0IgY29sb3IuIElmIHRoaXMgQ1NTIHZhbHVlCi0gICAgICogZG9lc24n
dCBjb250YWluIGEgUkdCIGNvbG9yIHZhbHVlLCBhIDxjb2RlPiBET01FeGNlcHRpb24KLSAgICAg
KiA8L2NvZGU+IGlzIHJhaXNlZC4gTW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHN0
eWxlCi0gICAgICogcHJvcGVydHkgY2FuIGJlIGFjaGlldmVkIHVzaW5nIHRoZSA8Y29kZT4gUkdC
Q29sb3IgPC9jb2RlPgotICAgICAqIGludGVyZmFjZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4g
dGhlIFJHQiBjb2xvciB2YWx1ZS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0
aW9uCi0gICAgICogSU5WQUxJRF9BQ0NFU1NfRVJSOiBSYWlzZXMgaWYgdGhlIGF0dGFjaGVkIHBy
b3BlcnR5IGNhbid0Ci0gICAgICogcmV0dXJuIGEgUkdCIGNvbG9yIHZhbHVlLgotICAgICAqCi0g
ICAgICovCi0gICAgUkdCQ29sb3IgZ2V0UkdCQ29sb3JWYWx1ZSAoICApOwotCi0jZW5kaWYKLQog
fTsKLQotCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotLyoqCi0gKiBUaGUgPGNvZGU+
IFJHQkNvbG9yIDwvY29kZT4gaW50ZXJmYWNlIGlzIHVzZWQgdG8gcmVwcmVzZW50IGFueSA8YQot
ICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvc3luZGF0YS5odG1sI3ZhbHVl
LWRlZi1jb2xvciI+Ci0gKiBSR0IgY29sb3IgPC9hPiB2YWx1ZS4gVGhpcyBpbnRlcmZhY2UgcmVm
bGVjdHMgdGhlIHZhbHVlcyBpbiB0aGUKLSAqIHVuZGVybHlpbmcgc3R5bGUgcHJvcGVydHkuIEhl
bmNlLCBtb2RpZmljYXRpb25zIG1hZGUgdGhyb3VnaCB0aGlzCi0gKiBpbnRlcmZhY2UgbW9kaWZ5
IHRoZSBzdHlsZSBwcm9wZXJ0eS4KLSAqCi0gKi8KLWNsYXNzIFJHQkNvbG9yCi17Ci1wdWJsaWM6
Ci0gICAgUkdCQ29sb3IoKTsKLSAgICBSR0JDb2xvcihjb25zdCBSR0JDb2xvciAmb3RoZXIpOwot
ICAgIFJHQkNvbG9yKGNvbnN0IFFDb2xvciAmY29sb3IpOwotCi0gICAgUkdCQ29sb3IgJiBvcGVy
YXRvciA9IChjb25zdCBSR0JDb2xvciAmb3RoZXIpOwotCi0gICAgflJHQkNvbG9yKCk7Ci0KLSAg
ICAvKioKLSAgICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGZvciB0aGUgcmVkIHZhbHVlIG9m
IHRoZSBSR0IgY29sb3IuCi0gICAgICoKLSAgICAgKi8KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSBy
ZWQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgZm9y
IHRoZSBncmVlbiB2YWx1ZSBvZiB0aGUgUkdCIGNvbG9yLgotICAgICAqCi0gICAgICovCi0gICAg
Q1NTUHJpbWl0aXZlVmFsdWUgZ3JlZW4oKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoaXMg
YXR0cmlidXRlIGlzIHVzZWQgZm9yIHRoZSBibHVlIHZhbHVlIG9mIHRoZSBSR0IgY29sb3IuCi0g
ICAgICoKLSAgICAgKi8KLSAgICBDU1NQcmltaXRpdmVWYWx1ZSBibHVlKCkgY29uc3Q7Ci0KLSAg
ICBjb25zdCBRQ29sb3IgJmNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvcjsgfQotCi1wcm90
ZWN0ZWQ6Ci0gICAgUUNvbG9yIG1fY29sb3I7Ci19OwotCi1jbGFzcyBSZWN0SW1wbDsKLQotLyoq
Ci0gKiBUaGUgPGNvZGU+IFJlY3QgPC9jb2RlPiBpbnRlcmZhY2UgaXMgdXNlZCB0byByZXByZXNl
bnQgYW55IDxhCi0gKiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtQ1NTMi92aXN1Zngu
aHRtbCN2YWx1ZS1kZWYtc2hhcGUiPgotICogcmVjdCA8L2E+IHZhbHVlLiBUaGlzIGludGVyZmFj
ZSByZWZsZWN0cyB0aGUgdmFsdWVzIGluIHRoZQotICogdW5kZXJseWluZyBzdHlsZSBwcm9wZXJ0
eS4gSGVuY2UsIG1vZGlmaWNhdGlvbnMgbWFkZSB0aHJvdWdoIHRoaXMKLSAqIGludGVyZmFjZSBt
b2RpZnkgdGhlIHN0eWxlIHByb3BlcnR5LgotICoKLSAqLwotY2xhc3MgUmVjdAotewotICAgIGZy
aWVuZCBjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKLXB1YmxpYzoKLSAgICBSZWN0KCk7Ci0gICAg
UmVjdChjb25zdCBSZWN0ICZvdGhlcik7Ci0KLSAgICBSZWN0ICYgb3BlcmF0b3IgPSAoY29uc3Qg
UmVjdCAmb3RoZXIpOwotCi0gICAgflJlY3QoKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgYXR0
cmlidXRlIGlzIHVzZWQgZm9yIHRoZSB0b3Agb2YgdGhlIHJlY3QuCi0gICAgICoKLSAgICAgKi8K
LSAgICBDU1NQcmltaXRpdmVWYWx1ZSB0b3AoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRo
aXMgYXR0cmlidXRlIGlzIHVzZWQgZm9yIHRoZSByaWdodCBvZiB0aGUgcmVjdC4KLSAgICAgKgot
ICAgICAqLwotICAgIENTU1ByaW1pdGl2ZVZhbHVlIHJpZ2h0KCkgY29uc3Q7Ci0KLSAgICAvKioK
LSAgICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGZvciB0aGUgYm90dG9tIG9mIHRoZSByZWN0
LgotICAgICAqCi0gICAgICovCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUgYm90dG9tKCkgY29uc3Q7
Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGZvciB0aGUgbGVmdCBv
ZiB0aGUgcmVjdC4KLSAgICAgKgotICAgICAqLwotICAgIENTU1ByaW1pdGl2ZVZhbHVlIGxlZnQo
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqIG5vdCBwYXJ0IG9m
IHRoZSBET00KLSAgICAgKi8KLSAgICBSZWN0SW1wbCAqaGFuZGxlKCkgY29uc3Q7Ci0gICAgYm9v
bCBpc051bGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIFJlY3RJbXBsICppbXBsOwotICAg
IFJlY3QoUmVjdEltcGwgKmkpOwotfTsKLQotY2xhc3MgQ291bnRlckltcGw7Ci0KLS8qKgotICog
VGhlIDxjb2RlPiBDb3VudGVyIDwvY29kZT4gaW50ZXJmYWNlIGlzIHVzZWQgdG8gcmVwcmVzZW50
IGFueSA8YQotICogaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLUNTUzIvc3luZGF0YS5o
dG1sI3ZhbHVlLWRlZi1jb3VudGVyIj4KLSAqIGNvdW50ZXIgb3IgY291bnRlcnMgZnVuY3Rpb24g
PC9hPiB2YWx1ZS4gVGhpcyBpbnRlcmZhY2UgcmVmbGVjdHMKLSAqIHRoZSB2YWx1ZXMgaW4gdGhl
IHVuZGVybHlpbmcgc3R5bGUgcHJvcGVydHkuIEhlbmNlLCBtb2RpZmljYXRpb25zCi0gKiBtYWRl
IHRocm91Z2ggdGhpcyBpbnRlcmZhY2UgbW9kaWZ5IHRoZSBzdHlsZSBwcm9wZXJ0eS4KLSAqCi0g
Ki8KLWNsYXNzIENvdW50ZXIKLXsKLSAgICBmcmllbmQgY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7
Ci1wdWJsaWM6Ci0gICAgQ291bnRlcigpOwotICAgIENvdW50ZXIoY29uc3QgQ291bnRlciAmb3Ro
ZXIpOwotcHVibGljOgotCi0gICAgQ291bnRlciAmIG9wZXJhdG9yID0gKGNvbnN0IENvdW50ZXIg
Jm90aGVyKTsKLQotICAgIH5Db3VudGVyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGF0dHJp
YnV0ZSBpcyB1c2VkIGZvciB0aGUgaWRlbnRpZmllciBvZiB0aGUgY291bnRlci4KLSAgICAgKgot
ICAgICAqLwotICAgIERPTVN0cmluZyBpZGVudGlmaWVyKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAg
ICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGZvciB0aGUgc3R5bGUgb2YgdGhlIGxpc3QuCi0g
ICAgICoKLSAgICAgKi8KLSAgICBET01TdHJpbmcgbGlzdFN0eWxlKCkgY29uc3Q7Ci0KLSAgICAv
KioKLSAgICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGZvciB0aGUgc2VwYXJhdG9yIG9mIG5l
c3RlZCBjb3VudGVycy4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBzZXBhcmF0b3Io
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqIG5vdCBwYXJ0IG9m
IHRoZSBET00KLSAgICAgKi8KLSAgICBDb3VudGVySW1wbCAqaGFuZGxlKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc051bGwoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIENvdW50ZXJJbXBsICppbXBs
OwotICAgIENvdW50ZXIoQ291bnRlckltcGwgKmkpOwotfTsKLQotI2VuZGlmCi0KIH0gLy8gbmFt
ZXNwYWNlCiAKICNlbmRpZgpJbmRleDoga2h0bWwvZG9tL2RvbTJfZXZlbnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tMl9ldmVudHMuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI2CmRpZmYgLXAgLXUgLXIxLjI2IGtodG1sL2RvbS9k
b20yX2V2ZW50cy5jcHAKLS0tIGtodG1sL2RvbS9kb20yX2V2ZW50cy5jcHAJMyBPY3QgMjAwNSAy
MToxMjoxMSAtMDAwMAkxLjI2CisrKyBraHRtbC9kb20vZG9tMl9ldmVudHMuY3BwCTQgRGVjIDIw
MDUgMTA6MjQ6MzEgLTAwMDAKQEAgLTI2LDEzICsyNiw2IEBACiAKICNpbmNsdWRlICJ4bWwvZG9t
Ml9ldmVudHNpbXBsLmgiCiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0jaW5jbHVk
ZSAiZG9tL2RvbTJfdmlld3MuaCIKLSNpbmNsdWRlICJkb20vZG9tX2V4Y2VwdGlvbi5oIgotCi0j
ZW5kaWYKLQogbmFtZXNwYWNlIERPTSB7CiAKIGNvbnN0IHVuc2lnbmVkIEtleWJvYXJkRXZlbnQ6
OkRPTV9LRVlfTE9DQVRJT05fU1RBTkRBUkQ7CkBAIC01MywxMiArNDYsNyBAQCBFdmVudExpc3Rl
bmVyOjp+RXZlbnRMaXN0ZW5lcigpCiAKIHZvaWQgRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnRJ
bXBsKEV2ZW50SW1wbCAqZXZ0LCBib29sIGlzV2luZG93RXZlbnQpCiB7Ci0jaWYgS0hUTUxfTk9f
Q1BMVVNQTFVTX0RPTQogICAgIGhhbmRsZUV2ZW50KGV2dCwgaXNXaW5kb3dFdmVudCk7Ci0jZWxz
ZQotICAgIEV2ZW50IHdyYXBwZXIoZXZ0KTsKLSAgICBoYW5kbGVFdmVudCh3cmFwcGVyLCBpc1dp
bmRvd0V2ZW50KTsKLSNlbmRpZgogfQogCiB2b2lkIEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KEV2ZW50TGlzdGVuZXJFdmVudCwgYm9vbCkKQEAgLTcxLDcwNyArNTksNCBAQCBET01TdHJpbmcg
RXZlbnRMaXN0ZW5lcjo6ZXZlbnRMaXN0ZW5lclR5CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1FdmVudDo6RXZlbnQoKQotewot
ICAgIGltcGwgPSAwOwotfQotCi0KLUV2ZW50OjpFdmVudChjb25zdCBFdmVudCAmb3RoZXIpCi17
Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYgKGltcGwpIGltcGwtPnJlZigpOwotfQot
Ci1FdmVudDo6RXZlbnQoRXZlbnRJbXBsICppKQotewotICAgIGltcGwgPSBpOwotICAgIGlmIChp
bXBsKSBpbXBsLT5yZWYoKTsKLX0KLQotRXZlbnQ6On5FdmVudCgpCi17Ci0gICAgaWYgKGltcGwp
IGltcGwtPmRlcmVmKCk7Ci19Ci0KLUV2ZW50ICZFdmVudDo6b3BlcmF0b3IgPSAoY29uc3QgRXZl
bnQgJm90aGVyKQotewotICAgIGlmICggaW1wbCAhPSBvdGhlci5pbXBsICkgewotICAgIGlmKGlt
cGwpIGltcGwtPmRlcmVmKCk7Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYoaW1wbCkg
aW1wbC0+cmVmKCk7Ci0gICAgfQotICAgIHJldHVybiAqdGhpczsKLX0KLQotRE9NU3RyaW5nIEV2
ZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9u
KERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPnR5
cGUoKTsKLX0KLQotTm9kZSBFdmVudDo6dGFyZ2V0KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwp
Ci0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwot
Ci0gICAgcmV0dXJuIGltcGwtPnRhcmdldCgpOwotfQotCi1Ob2RlIEV2ZW50OjpjdXJyZW50VGFy
Z2V0KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4
Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIGltcGwtPmN1cnJlbnRU
YXJnZXQoKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgRXZlbnQ6OmV2ZW50UGhhc2UoKSBjb25zdAot
ewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZB
TElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gaW1wbC0+ZXZlbnRQaGFzZSgpOwotfQotCi1i
b29sIEV2ZW50OjpidWJibGVzKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJu
IGltcGwtPmJ1YmJsZXMoKTsKLX0KLQotYm9vbCBFdmVudDo6Y2FuY2VsYWJsZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFM
SURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBpbXBsLT5jYW5jZWxhYmxlKCk7Ci19Ci0KLURP
TVRpbWVTdGFtcCBFdmVudDo6dGltZVN0YW1wKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0J
dGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0g
ICAgcmV0dXJuIGltcGwtPnRpbWVTdGFtcCgpOwotfQotCi12b2lkIEV2ZW50OjpzdG9wUHJvcGFn
YXRpb24oKQotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0
aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBpbXBsLT5zdG9wUHJvcGFnYXRpb24oKTsK
LX0KLQotdm9pZCBFdmVudDo6cHJldmVudERlZmF1bHQoKQotewotICAgIGlmICghaW1wbCkKLQl0
aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAg
ICBpbXBsLT5wcmV2ZW50RGVmYXVsdCgpOwotfQotCi12b2lkIEV2ZW50Ojppbml0RXZlbnQoY29u
c3QgRE9NU3RyaW5nICZldmVudFR5cGVBcmcsIGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNl
bGFibGVBcmcpCi17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNl
cHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIGltcGwtPmluaXRFdmVudChldmVudFR5
cGVBcmcsY2FuQnViYmxlQXJnLGNhbmNlbGFibGVBcmcpOwotfQotCi1FdmVudEltcGwgKkV2ZW50
OjpoYW5kbGUoKSBjb25zdAotewotICAgIHJldHVybiBpbXBsOwotfQotCi1ib29sIEV2ZW50Ojpp
c051bGwoKSBjb25zdAotewotICAgIHJldHVybiAoaW1wbCA9PSAwKTsKLX0KLQotdm9pZCBFdmVu
dDo6c2V0Q2FuY2VsQnViYmxlKGJvb2wgY2FuY2VsKQotewotICAgIGlmICghaW1wbCkKLQl0aHJv
dyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBp
bXBsLT5zZXRDYW5jZWxCdWJibGUoY2FuY2VsKTsKLX0KLQotdm9pZCBFdmVudDo6c2V0RGVmYXVs
dFByZXZlbnRlZChib29sIGRlZmF1bHRQcmV2ZW50ZWQpCi17Ci0gICAgaWYgKCFpbXBsKQotCXRo
cm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAg
IGltcGwtPnNldERlZmF1bHRQcmV2ZW50ZWQoZGVmYXVsdFByZXZlbnRlZCk7Ci19Ci0gCi1ib29s
IEV2ZW50OjpnZXRDYW5jZWxCdWJibGUoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJv
dyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBy
ZXR1cm4gaW1wbC0+Z2V0Q2FuY2VsQnViYmxlKCk7Ci19Ci0KLWJvb2wgRXZlbnQ6OmRlZmF1bHRQ
cmV2ZW50ZWQoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24o
RE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0gICAgCi0gICAgcmV0dXJuIGltcGwt
PmRlZmF1bHRQcmV2ZW50ZWQoKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lm
bmRlZiBTQVZFX1NQQUNFCi0KLUV2ZW50RXhjZXB0aW9uOjpFdmVudEV4Y2VwdGlvbih1bnNpZ25l
ZCBzaG9ydCBfY29kZSkKLXsKLSAgICBjb2RlID0gX2NvZGU7Ci19Ci0KLUV2ZW50RXhjZXB0aW9u
OjpFdmVudEV4Y2VwdGlvbihjb25zdCBFdmVudEV4Y2VwdGlvbiAmb3RoZXIpCi17Ci0gICAgY29k
ZSA9IG90aGVyLmNvZGU7Ci19Ci0KLUV2ZW50RXhjZXB0aW9uICYgRXZlbnRFeGNlcHRpb246Om9w
ZXJhdG9yID0gKGNvbnN0IEV2ZW50RXhjZXB0aW9uICZvdGhlcikKLXsKLSAgICBjb2RlID0gb3Ro
ZXIuY29kZTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLSNlbmRpZgotCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1VSUV2ZW50OjpVSUV2ZW50KCkgOiBFdmVudCgpCi17Ci19Ci0KLVVJRXZl
bnQ6OlVJRXZlbnQoY29uc3QgVUlFdmVudCAmb3RoZXIpIDogRXZlbnQob3RoZXIpCi17Ci19Ci0K
LVVJRXZlbnQ6OlVJRXZlbnQoY29uc3QgRXZlbnQgJm90aGVyKSA6IEV2ZW50KCkKLXsKLSAgICAo
KnRoaXMpPW90aGVyOwotfQotCi1VSUV2ZW50OjpVSUV2ZW50KFVJRXZlbnRJbXBsICppbXBsKSA6
IEV2ZW50KGltcGwpCi17Ci19Ci0KLVVJRXZlbnQgJlVJRXZlbnQ6Om9wZXJhdG9yID0gKGNvbnN0
IFVJRXZlbnQgJm90aGVyKQotewotICAgIEV2ZW50OjpvcGVyYXRvciA9IChvdGhlcik7Ci0gICAg
cmV0dXJuICp0aGlzOwotfQotCi1VSUV2ZW50ICZVSUV2ZW50OjpvcGVyYXRvciA9IChjb25zdCBF
dmVudCAmb3RoZXIpCi17Ci0gICAgRXZlbnQgZTsKLSAgICBlID0gb3RoZXI7Ci0gICAgaWYgKCFl
LmlzTnVsbCgpICYmICFlLmhhbmRsZSgpLT5pc1VJRXZlbnQoKSkgewotCWlmICggaW1wbCApIGlt
cGwtPmRlcmVmKCk7Ci0JaW1wbCA9IDA7Ci0gICAgfSBlbHNlCi0JRXZlbnQ6Om9wZXJhdG9yID0g
KG90aGVyKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVVJRXZlbnQ6On5VSUV2ZW50KCkKLXsK
LX0KLQotQWJzdHJhY3RWaWV3IFVJRXZlbnQ6OnZpZXcoKSBjb25zdAotewotICAgIGlmICghaW1w
bCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VUlFdmVudEltcGwqPihpbXBsKS0+dmlldygpOwot
fQotCi1pbnQgVUlFdmVudDo6ZGV0YWlsKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhy
b3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PFVJRXZlbnRJbXBsKj4oaW1wbCktPmRldGFpbCgpOwotfQotCi1p
bnQgVUlFdmVudDo6a2V5Q29kZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERP
TUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLSAgICAKLSAgICBp
ZiAoaW1wbC0+aXNLZXlib2FyZEV2ZW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50SW1wbCo+KGltcGwpLT5rZXlDb2RlKCk7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OmNoYXJDb2RlKCkgY29uc3QKLXsKLSAgICBpZiAo
IWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9F
UlIpOwotICAgIAotICAgIGlmIChpbXBsLT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnRJbXBsKj4oaW1wbCktPmNoYXJDb2RlKCk7Ci0g
ICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQotaW50IFVJRXZlbnQ6OnBhZ2VYKCkgY29u
c3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6
SU5WQUxJRF9TVEFURV9FUlIpOwotICAgIAotICAgIGlmIChpbXBsLT5pc01vdXNlRXZlbnQoKSkK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCktPmNsaWVu
dFgoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi1pbnQgVUlFdmVudDo6cGFn
ZVkoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhj
ZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0gICAgCi0gICAgaWYgKGltcGwtPmlzTW91c2VF
dmVudCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBs
KS0+Y2xpZW50WSgpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLWludCBVSUV2
ZW50OjpsYXllclgoKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRp
b24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0gICAgCi0gICAgaWYgKGltcGwt
PmlzTW91c2VFdmVudCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudElt
cGwqPihpbXBsKS0+bGF5ZXJYKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLX0KLQot
aW50IFVJRXZlbnQ6OmxheWVyWSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERP
TUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLSAgICAKLSAgICBp
ZiAoaW1wbC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50SW1wbCo+KGltcGwpLT5sYXllclkoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAw
OwotfQotCi1pbnQgVUlFdmVudDo6d2hpY2goKSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0
aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAg
ICAvLyBOb3RlOiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzIGJvdGgga2V5IGV2ZW50cyBhbmQgbW91
c2UgZXZlbnRzCi0KLSAgICAvLyBOZXRzY2FwZSdzICJ3aGljaCIgcmV0dXJucyBhIHZpcnR1YWwg
a2V5IGNvZGUgZm9yIGtleWRvd24gYW5kIGtleXVwLCBhbmQgYSBjaGFyYWN0ZXIgY29kZSBmb3Ig
a2V5cHJlc3MuCi0gICAgLy8gVGhhdCdzIGV4YWN0bHkgd2hhdCBJRSdzICJrZXlDb2RlIiByZXR1
cm5zLgotICAgIGlmIChpbXBsLT5pc0tleWJvYXJkRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEtleWJvYXJkRXZlbnRJbXBsKj4oaW1wbCktPmtleUNvZGUoKTsKLQotICAgIC8v
IEZvciBraHRtbCwgdGhlIHJldHVybiB2YWx1ZXMgZm9yIGxlZnQsIG1pZGRsZSBhbmQgcmlnaHQg
bW91c2UgYnV0dG9ucyBhcmUgMCwgMSwgMiwgcmVzcGVjdGl2ZWx5LgotICAgIC8vIEZvciB0aGUg
TmV0c2NhcGUgIndoaWNoIiBwcm9wZXJ0eSwgdGhlIHJldHVybiB2YWx1ZXMgZm9yIGxlZnQsIG1p
ZGRsZSBhbmQgcmlnaHQgbW91c2UgYnV0dG9ucyBhcmUgMSwgMiwgMywgcmVzcGVjdGl2ZWx5LiAK
LSAgICAvLyBTbyB3ZSBjYW4ganVzdCBhZGQgMSB0byB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2Fs
bGluZyBidXR0b24oKS4KLSAgICBpZiAoaW1wbC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5idXR0b24oKSArIDE7Ci0K
LSAgICByZXR1cm4gMDsKLX0KLQotCi12b2lkIFVJRXZlbnQ6OmluaXRVSUV2ZW50KGNvbnN0IERP
TVN0cmluZyAmdHlwZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuQnViYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5j
ZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWJzdHJh
Y3RWaWV3ICZ2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRl
dGFpbEFyZykKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2Vw
dGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgc3RhdGljX2Nhc3Q8VUlFdmVudEltcGwq
PihpbXBsKS0+aW5pdFVJRXZlbnQodHlwZUFyZyxjYW5CdWJibGVBcmcsY2FuY2VsYWJsZUFyZywK
LQkJCQkJCSB2aWV3QXJnLmhhbmRsZSgpLGRldGFpbEFyZyk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLU1vdXNlRXZlbnQ6Ok1vdXNlRXZlbnQoKSA6IFVJRXZlbnQoKQotewotfQot
Ci1Nb3VzZUV2ZW50OjpNb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnQgJm90aGVyKSA6IFVJRXZl
bnQob3RoZXIpCi17Ci19Ci0KLU1vdXNlRXZlbnQ6Ok1vdXNlRXZlbnQoY29uc3QgRXZlbnQgJm90
aGVyKSA6IFVJRXZlbnQoKQotewotICAgICgqdGhpcyk9b3RoZXI7Ci19Ci0KLU1vdXNlRXZlbnQ6
Ok1vdXNlRXZlbnQoTW91c2VFdmVudEltcGwgKmltcGwpIDogVUlFdmVudChpbXBsKQotewotfQot
Ci1Nb3VzZUV2ZW50ICZNb3VzZUV2ZW50OjpvcGVyYXRvciA9IChjb25zdCBNb3VzZUV2ZW50ICZv
dGhlcikKLXsKLSAgICBVSUV2ZW50OjpvcGVyYXRvciA9IChvdGhlcik7Ci0gICAgcmV0dXJuICp0
aGlzOwotfQotCi1Nb3VzZUV2ZW50ICZNb3VzZUV2ZW50OjpvcGVyYXRvciA9IChjb25zdCBFdmVu
dCAmb3RoZXIpCi17Ci0gICAgRXZlbnQgZTsKLSAgICBlID0gb3RoZXI7Ci0gICAgaWYgKCFlLmlz
TnVsbCgpICYmICFlLmhhbmRsZSgpLT5pc01vdXNlRXZlbnQoKSkgewotCWlmICggaW1wbCApIGlt
cGwtPmRlcmVmKCk7Ci0JaW1wbCA9IDA7Ci0gICAgfSBlbHNlCi0JVUlFdmVudDo6b3BlcmF0b3Ig
PSAob3RoZXIpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotTW91c2VFdmVudDo6fk1vdXNlRXZl
bnQoKQotewotfQotCi1pbnQgTW91c2VFdmVudDo6c2NyZWVuWCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVf
RVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5z
Y3JlZW5YKCk7Ci19Ci0KLWludCBNb3VzZUV2ZW50OjpzY3JlZW5ZKCkgY29uc3QKLXsKLSAgICBp
ZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFU
RV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCkt
PnNjcmVlblkoKTsKLX0KLQotaW50IE1vdXNlRXZlbnQ6OmNsaWVudFgoKSBjb25zdAotewotICAg
IGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NU
QVRFX0VSUik7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudEltcGwqPihpbXBs
KS0+Y2xpZW50WCgpOwotfQotCi1pbnQgTW91c2VFdmVudDo6Y2xpZW50WSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURf
U1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+KGlt
cGwpLT5jbGllbnRZKCk7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6Y3RybEtleSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFM
SURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50SW1wbCo+
KGltcGwpLT5jdHJsS2V5KCk7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6c2hpZnRLZXkoKSBjb25z
dAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJ
TlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVudElt
cGwqPihpbXBsKS0+c2hpZnRLZXkoKTsKLX0KLQotYm9vbCBNb3VzZUV2ZW50OjphbHRLZXkoKSBj
b25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9u
OjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TW91c2VFdmVu
dEltcGwqPihpbXBsKS0+YWx0S2V5KCk7Ci19Ci0KLWJvb2wgTW91c2VFdmVudDo6bWV0YUtleSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRp
b246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNb3VzZUV2
ZW50SW1wbCo+KGltcGwpLT5tZXRhS2V5KCk7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IE1vdXNlRXZl
bnQ6OmJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlv
bihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxNb3VzZUV2ZW50SW1wbCo+KGltcGwpLT5idXR0b24oKTsKLX0KLQotTm9kZSBNb3VzZUV2
ZW50OjpyZWxhdGVkVGFyZ2V0KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCktPnJlbGF0ZWRUYXJnZXQoKTsKLX0K
LQotdm9pZCBNb3VzZUV2ZW50Ojppbml0TW91c2VFdmVudChjb25zdCBET01TdHJpbmcgJnR5cGVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFic3RyYWN0Vmll
dyAmdmlld0FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRh
aWxBcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFy
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5vZGUgJnJlbGF0ZWRUYXJnZXRBcmcpCi17Ci0g
ICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURf
U1RBVEVfRVJSKTsKLQotICAgIHN0YXRpY19jYXN0PE1vdXNlRXZlbnRJbXBsKj4oaW1wbCktPmlu
aXRNb3VzZUV2ZW50KHR5cGVBcmcsY2FuQnViYmxlQXJnLAotCWNhbmNlbGFibGVBcmcsdmlld0Fy
Zy5oYW5kbGUoKSxkZXRhaWxBcmcsc2NyZWVuWEFyZyxzY3JlZW5ZQXJnLGNsaWVudFhBcmcsCi0J
Y2xpZW50WUFyZyxjdHJsS2V5QXJnLGFsdEtleUFyZyxzaGlmdEtleUFyZyxtZXRhS2V5QXJnLGJ1
dHRvbkFyZywKLQlyZWxhdGVkVGFyZ2V0QXJnLmhhbmRsZSgpKTsKLX0KLQotCi0KLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLU11dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoKSA6IEV2ZW50
KCkKLXsKLX0KLQotTXV0YXRpb25FdmVudDo6TXV0YXRpb25FdmVudChjb25zdCBNdXRhdGlvbkV2
ZW50ICZvdGhlcikgOiBFdmVudChvdGhlcikKLXsKLX0KLQotTXV0YXRpb25FdmVudDo6TXV0YXRp
b25FdmVudChjb25zdCBFdmVudCAmb3RoZXIpIDogRXZlbnQoKQotewotICAgICgqdGhpcyk9b3Ro
ZXI7Ci19Ci0KLU11dGF0aW9uRXZlbnQ6Ok11dGF0aW9uRXZlbnQoTXV0YXRpb25FdmVudEltcGwg
KmltcGwpIDogRXZlbnQoaW1wbCkKLXsKLX0KLQotTXV0YXRpb25FdmVudCAmTXV0YXRpb25FdmVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTXV0YXRpb25FdmVudCAmb3RoZXIpCi17Ci0gICAgRXZlbnQ6
Om9wZXJhdG9yID0gKG90aGVyKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLU11dGF0aW9uRXZl
bnQgJk11dGF0aW9uRXZlbnQ6Om9wZXJhdG9yID0gKGNvbnN0IEV2ZW50ICZvdGhlcikKLXsKLSAg
ICBFdmVudCBlOwotICAgIGUgPSBvdGhlcjsKLSAgICBpZiAoIWUuaXNOdWxsKCkgJiYgIWUuaGFu
ZGxlKCktPmlzTXV0YXRpb25FdmVudCgpKSB7Ci0JaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsK
LQlpbXBsID0gMDsKLSAgICB9IGVsc2UKLQlFdmVudDo6b3BlcmF0b3IgPSAob3RoZXIpOwotICAg
IHJldHVybiAqdGhpczsKLX0KLQotTXV0YXRpb25FdmVudDo6fk11dGF0aW9uRXZlbnQoKQotewot
fQotCi1Ob2RlIE11dGF0aW9uRXZlbnQ6OnJlbGF0ZWROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAo
IWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9F
UlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE11dGF0aW9uRXZlbnRJbXBsKj4oaW1wbCkt
PnJlbGF0ZWROb2RlKCk7Ci19Ci0KLURPTVN0cmluZyBNdXRhdGlvbkV2ZW50OjpwcmV2VmFsdWUo
KSBjb25zdAotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0
aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TXV0YXRp
b25FdmVudEltcGwqPihpbXBsKS0+cHJldlZhbHVlKCk7Ci19Ci0KLURPTVN0cmluZyBNdXRhdGlv
bkV2ZW50OjpuZXdWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4
Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50SW1wbCo+KGltcGwpLT5uZXdWYWx1ZSgpOwotfQotCi1E
T01TdHJpbmcgTXV0YXRpb25FdmVudDo6YXR0ck5hbWUoKSBjb25zdAotewotICAgIGlmICghaW1w
bCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudEltcGwqPihpbXBsKS0+YXR0
ck5hbWUoKTsKLX0KLQotdW5zaWduZWQgc2hvcnQgTXV0YXRpb25FdmVudDo6YXR0ckNoYW5nZSgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRp
b246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhdGlv
bkV2ZW50SW1wbCo+KGltcGwpLT5hdHRyQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgTXV0YXRpb25FdmVu
dDo6aW5pdE11dGF0aW9uRXZlbnQoY29uc3QgRE9NU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOb2RlICZyZWxhdGVkTm9k
ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0
cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRE9NU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmYXR0ck5hbWVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRyQ2hhbmdlQXJn
KQotewotICAgIGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJ
TlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBzdGF0aWNfY2FzdDxNdXRhdGlvbkV2ZW50SW1wbCo+
KGltcGwpLT5pbml0TXV0YXRpb25FdmVudCh0eXBlQXJnLAotCWNhbkJ1YmJsZUFyZyxjYW5jZWxh
YmxlQXJnLHJlbGF0ZWROb2RlQXJnLmhhbmRsZSgpLHByZXZWYWx1ZUFyZywKLQluZXdWYWx1ZUFy
ZyxhdHRyTmFtZUFyZyxhdHRyQ2hhbmdlQXJnKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudCgpCi17Ci19Ci0KLUtleWJvYXJkRXZl
bnQ6OktleWJvYXJkRXZlbnQoY29uc3QgS2V5Ym9hcmRFdmVudCAmb3RoZXIpIDogVUlFdmVudChv
dGhlcikKLXsKLX0KLQotS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBFdmVudCAm
b3RoZXIpCi17Ci0gICAgKnRoaXMgPSBvdGhlcjsKLX0KLQotS2V5Ym9hcmRFdmVudDo6S2V5Ym9h
cmRFdmVudChLZXlib2FyZEV2ZW50SW1wbCAqaW1wbCkgOiBVSUV2ZW50KGltcGwpCi17Ci19Ci0K
LUtleWJvYXJkRXZlbnQgJktleWJvYXJkRXZlbnQ6Om9wZXJhdG9yID0gKGNvbnN0IEtleWJvYXJk
RXZlbnQgJm90aGVyKQotewotICAgIFVJRXZlbnQ6Om9wZXJhdG9yID0gKG90aGVyKTsKLSAgICBy
ZXR1cm4gKnRoaXM7Ci19Ci0KLUtleWJvYXJkRXZlbnQgJktleWJvYXJkRXZlbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IEV2ZW50ICZvdGhlcikKLXsKLSAgICBFdmVudCBlOwotICAgIGUgPSBvdGhlcjsK
LSAgICBpZiAoIWUuaXNOdWxsKCkgJiYgIWUuaGFuZGxlKCktPmlzS2V5Ym9hcmRFdmVudCgpKSB7
Ci0JaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKLQlpbXBsID0gMDsKLSAgICB9IGVsc2UKLQlV
SUV2ZW50OjpvcGVyYXRvciA9IChvdGhlcik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1LZXli
b2FyZEV2ZW50Ojp+S2V5Ym9hcmRFdmVudCgpCi17Ci19Ci0KLURPTVN0cmluZyBLZXlib2FyZEV2
ZW50OjprZXlJZGVudGlmaWVyKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnRJbXBsKj4oaW1wbCktPmtleUlkZW50aWZpZXIoKTsK
LX0KLQotdW5zaWduZWQgS2V5Ym9hcmRFdmVudDo6a2V5TG9jYXRpb24oKSBjb25zdAotewotICAg
IGlmICghaW1wbCkKLQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NU
QVRFX0VSUik7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudEltcGwqPihp
bXBsKS0+a2V5TG9jYXRpb24oKTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50OjpjdHJsS2V5KCkg
Y29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlv
bjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnRJbXBsKj4oaW1wbCktPmN0cmxLZXkoKTsKLX0KLQotYm9vbCBLZXlib2FyZEV2ZW50Ojpz
aGlmdEtleSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihE
T01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxLZXlib2FyZEV2ZW50SW1wbCo+KGltcGwpLT5zaGlmdEtleSgpOwotfQotCi1ib29sIEtleWJv
YXJkRXZlbnQ6OmFsdEtleSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKQotCXRocm93IERPTUV4
Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVfRVJSKTsKLQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCo+KGltcGwpLT5hbHRLZXkoKTsKLX0KLQotYm9v
bCBLZXlib2FyZEV2ZW50OjptZXRhS2V5KCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpCi0JdGhy
b3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnRJbXBsKj4oaW1wbCktPm1ldGFLZXkoKTsK
LX0KLQotYm9vbCBLZXlib2FyZEV2ZW50OjphbHRHcmFwaEtleSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpbXBsKQotCXRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246OklOVkFMSURfU1RBVEVf
RVJSKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCo+KGltcGwp
LT5hbHRHcmFwaEtleSgpOwotfQotCi12b2lkIEtleWJvYXJkRXZlbnQ6OmluaXRLZXlib2FyZEV2
ZW50KGNvbnN0IERPTVN0cmluZyAmdHlwZUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5jZWxhYmxlQXJnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFic3RyYWN0VmlldyAmdmlld0FyZywgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZrZXlJ
ZGVudGlmaWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBrZXlMb2NhdGlvbkFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjdHJsS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGFsdEtleUFyZywgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBtZXRhS2V5QXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKQotewotICAgIGlmICghaW1wbCkK
LQl0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0K
LSAgICBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50SW1wbCo+KGltcGwpLT5pbml0S2V5Ym9hcmRF
dmVudCh0eXBlQXJnLGNhbkJ1YmJsZUFyZywKLQljYW5jZWxhYmxlQXJnLHZpZXdBcmcuaGFuZGxl
KCksa2V5SWRlbnRpZmllckFyZyxrZXlMb2NhdGlvbkFyZyxjdHJsS2V5QXJnLGFsdEtleUFyZywK
LSAgICAgICAgc2hpZnRLZXlBcmcsbWV0YUtleUFyZyxhbHRHcmFwaEtleUFyZyk7Ci19Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFj
ZQpJbmRleDoga2h0bWwvZG9tL2RvbTJfZXZlbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbTJfZXZlbnRzLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMjAKZGlmZiAtcCAtdSAtcjEuMjAga2h0bWwvZG9tL2RvbTJfZXZlbnRzLmgKLS0tIGto
dG1sL2RvbS9kb20yX2V2ZW50cy5oCTE2IFNlcCAyMDA1IDIyOjQyOjAzIC0wMDAwCTEuMjAKKysr
IGtodG1sL2RvbS9kb20yX2V2ZW50cy5oCTQgRGVjIDIwMDUgMTA6MjQ6MzEgLTAwMDAKQEAgLTI3
LDM5ICsyNywxMiBAQAogI2luY2x1ZGUgPGRvbS9kb21fbWlzYy5oPgogI2luY2x1ZGUgPGRvbS9k
b21fc3RyaW5nLmg+CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0jaW5jbHVkZSA8
ZG9tL2RvbV9ub2RlLmg+Ci0KLSNlbmRpZgotCiBuYW1lc3BhY2UgRE9NIHsKIAotI2lmICFLSFRN
TF9OT19DUExVU1BMVVNfRE9NCi0KLWNsYXNzIEV2ZW50OwotY2xhc3MgRXZlbnRFeGNlcHRpb247
Ci1jbGFzcyBVSUV2ZW50OwotY2xhc3MgTW91c2VFdmVudDsKLWNsYXNzIE11dGF0aW9uRXZlbnQ7
Ci1jbGFzcyBLZXlib2FyZEV2ZW50OwotY2xhc3MgQWJzdHJhY3RWaWV3OwotCi1jbGFzcyBVSUV2
ZW50SW1wbDsKLWNsYXNzIE1vdXNlRXZlbnRJbXBsOwotY2xhc3MgTXV0YXRpb25FdmVudEltcGw7
Ci1jbGFzcyBLZXlib2FyZEV2ZW50SW1wbDsKLQotI2VuZGlmCi0KIGNsYXNzIEV2ZW50TGlzdGVu
ZXJJbXBsOwogY2xhc3MgRXZlbnRJbXBsOwogCi0jaWYgS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQog
dHlwZWRlZiBFdmVudEltcGwgKkV2ZW50TGlzdGVuZXJFdmVudDsKLSNlbHNlCi10eXBlZGVmIEV2
ZW50ICZFdmVudExpc3RlbmVyRXZlbnQ7Ci0jZW5kaWYKIAogLyoqCiAgKiBJbnRyb2R1Y2VkIGlu
IERPTSBMZXZlbCAyCkBAIC0xMjksMjYgKzEwMiw4IEBAIHByb3RlY3RlZDoKICAqLwogY2xhc3Mg
RXZlbnQgewogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIGZyaWVuZCBjbGFz
cyBEb2N1bWVudDsKLSAgICBmcmllbmQgY2xhc3MgTm9kZUltcGw7Ci0gICAgZnJpZW5kIGNsYXNz
IERvY3VtZW50SW1wbDsKLQotI2VuZGlmCi0KIHB1YmxpYzoKIAotI2lmICFLSFRNTF9OT19DUExV
U1BMVVNfRE9NCi0KLSAgICBFdmVudCgpOwotICAgIEV2ZW50KGNvbnN0IEV2ZW50ICZvdGhlcik7
Ci0gICAgdmlydHVhbCB+RXZlbnQoKTsKLQotICAgIEV2ZW50ICYgb3BlcmF0b3IgPSAoY29uc3Qg
RXZlbnQgJm90aGVyKTsKLQotI2VuZGlmCi0KICAgICAvKioKICAgICAgKiBBbiBpbnRlZ2VyIGlu
ZGljYXRpbmcgd2hpY2ggcGhhc2Ugb2YgZXZlbnQgZmxvdyBpcyBiZWluZyBwcm9jZXNzZWQuCiAg
ICAgICoKQEAgLTE2NSwxMzIgKzEyMCw2IEBAIHB1YmxpYzoKIAlBVF9UQVJHRVQgPSAyLAogCUJV
QkJMSU5HX1BIQVNFID0gMwogICAgIH07Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQot
Ci0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhlIGV2ZW50IChjYXNlLWluc2Vuc2l0aXZl
KS4gVGhlIG5hbWUgbXVzdCBiZSBhbiBYTUwgbmFtZS4KLSAgICAgKgotICAgICAqLwotICAgIERP
TVN0cmluZyB0eXBlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGluZGljYXRl
IHRoZSBFdmVudFRhcmdldCB0byB3aGljaCB0aGUgZXZlbnQgd2FzIG9yaWdpbmFsbHkKLSAgICAg
KiBkaXNwYXRjaGVkLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSB0YXJnZXQoKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgdGhlIEV2ZW50VGFyZ2V0IHdob3Nl
IEV2ZW50TGlzdGVuZXJzIGFyZSBjdXJyZW50bHkKLSAgICAgKiBiZWluZyBwcm9jZXNzZWQuIFRo
aXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBkdXJpbmcgY2FwdHVyaW5nIGFuZAotICAgICAqIGJ1
YmJsaW5nLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBjdXJyZW50VGFyZ2V0KCkgY29uc3Q7
Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGluZGljYXRlIHdoaWNoIHBoYXNlIG9mIGV2ZW50
IGZsb3cgaXMgY3VycmVudGx5IGJlaW5nIGV2YWx1YXRlZC4KLSAgICAgKgotICAgICAqLwotICAg
IHVuc2lnbmVkIHNob3J0IGV2ZW50UGhhc2UoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVz
ZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgYW4gZXZlbnQgaXMgYSBidWJibGluZyBldmVu
dC4gSWYgdGhlCi0gICAgICogZXZlbnQgY2FuIGJ1YmJsZSB0aGUgdmFsdWUgaXMgdHJ1ZSwgZWxz
ZSB0aGUgdmFsdWUgaXMgZmFsc2UuCi0gICAgICoKLSAgICAgKi8KLSAgICBib29sIGJ1YmJsZXMo
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBu
b3QgYW4gZXZlbnQgY2FuIGhhdmUgaXRzIGRlZmF1bHQgYWN0aW9uCi0gICAgICogcHJldmVudGVk
LiBJZiB0aGUgZGVmYXVsdCBhY3Rpb24gY2FuIGJlIHByZXZlbnRlZCB0aGUgdmFsdWUgaXMgdHJ1
ZSwKLSAgICAgKiBlbHNlIHRoZSB2YWx1ZSBpcyBmYWxzZS4KLSAgICAgKgotICAgICAqLwotICAg
IGJvb2wgY2FuY2VsYWJsZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBzcGVj
aWZ5IHRoZSB0aW1lIChpbiBtaWxsaXNlY29uZHMgcmVsYXRpdmUgdG8gdGhlIGVwb2NoKSBhdAot
ICAgICAqIHdoaWNoIHRoZSBldmVudCB3YXMgY3JlYXRlZC4gRHVlIHRvIHRoZSBmYWN0IHRoYXQg
c29tZSBzeXN0ZW1zIG1heSBub3QKLSAgICAgKiBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gdGhl
IHZhbHVlIG9mIHRpbWVTdGFtcCBtYXkgYmUgbm90IGF2YWlsYWJsZSBmb3IKLSAgICAgKiBhbGwg
ZXZlbnRzLiBXaGVuIG5vdCBhdmFpbGFibGUsIGEgdmFsdWUgb2YgMCB3aWxsIGJlIHJldHVybmVk
LiBFeGFtcGxlcwotICAgICAqIG9mIGVwb2NoIHRpbWUgYXJlIHRoZSB0aW1lIG9mIHRoZSBzeXN0
ZW0gc3RhcnQgb3IgMDowOjAgVVRDIDFzdCBKYW51YXJ5IDE5NzAuCi0gICAgICoKLSAgICAgKi8K
LSAgICBET01UaW1lU3RhbXAgdGltZVN0YW1wKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBU
aGUgc3RvcFByb3BhZ2F0aW9uIG1ldGhvZCBpcyB1c2VkIHByZXZlbnQgZnVydGhlciBwcm9wYWdh
dGlvbiBvZiBhbgotICAgICAqIGV2ZW50IGR1cmluZyBldmVudCBmbG93LiBJZiB0aGlzIG1ldGhv
ZCBpcyBjYWxsZWQgYnkgYW55IEV2ZW50TGlzdGVuZXIKLSAgICAgKiB0aGUgZXZlbnQgd2lsbCBj
ZWFzZSBwcm9wYWdhdGluZyB0aHJvdWdoIHRoZSB0cmVlLiBUaGUgZXZlbnQgd2lsbAotICAgICAq
IGNvbXBsZXRlIGRpc3BhdGNoIHRvIGFsbCBsaXN0ZW5lcnMgb24gdGhlIGN1cnJlbnQgRXZlbnRU
YXJnZXQgYmVmb3JlCi0gICAgICogZXZlbnQgZmxvdyBzdG9wcy4gVGhpcyBtZXRob2QgbWF5IGJl
IHVzZWQgZHVyaW5nIGFueSBzdGFnZSBvZiBldmVudCBmbG93LgotICAgICAqCi0gICAgICovCi0g
ICAgdm9pZCBzdG9wUHJvcGFnYXRpb24oKTsKLQotICAgIC8qKgotICAgICAqIElmIGFuIGV2ZW50
IGlzIGNhbmNlbGFibGUsIHRoZSBwcmV2ZW50RGVmYXVsdCBtZXRob2QgaXMgdXNlZCB0byBzaWdu
aWZ5Ci0gICAgICogdGhhdCB0aGUgZXZlbnQgaXMgdG8gYmUgY2FuY2VsZWQsIG1lYW5pbmcgYW55
IGRlZmF1bHQgYWN0aW9uIG5vcm1hbGx5Ci0gICAgICogdGFrZW4gYnkgdGhlIGltcGxlbWVudGF0
aW9uIGFzIGEgcmVzdWx0IG9mIHRoZSBldmVudCB3aWxsIG5vdCBvY2N1ci4gSWYsCi0gICAgICog
ZHVyaW5nIGFueSBzdGFnZSBvZiBldmVudCBmbG93LCB0aGUgcHJldmVudERlZmF1bHQgbWV0aG9k
IGlzIGNhbGxlZCB0aGUKLSAgICAgKiBldmVudCBpcyBjYW5jZWxlZC4gQW55IGRlZmF1bHQgYWN0
aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgd2lsbCBub3QKLSAgICAgKiBvY2N1ci4gQ2Fs
bGluZyB0aGlzIG1ldGhvZCBmb3IgYSBub24tY2FuY2VsYWJsZSBldmVudCBoYXMgbm8gZWZmZWN0
LgotICAgICAqIE9uY2UgcHJldmVudERlZmF1bHQgaGFzIGJlZW4gY2FsbGVkIGl0IHdpbGwgcmVt
YWluIGluIGVmZmVjdCB0aHJvdWdob3V0Ci0gICAgICogdGhlIHJlbWFpbmRlciBvZiB0aGUgZXZl
bnQncyBwcm9wYWdhdGlvbi4gVGhpcyBtZXRob2QgbWF5IGJlIHVzZWQgZHVyaW5nCi0gICAgICog
YW55IHN0YWdlIG9mIGV2ZW50IGZsb3cuCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHByZXZl
bnREZWZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaW5pdEV2ZW50IG1ldGhvZCBpcyB1
c2VkIHRvIGluaXRpYWxpemUgdGhlIHZhbHVlIG9mIGFuIEV2ZW50IGNyZWF0ZWQKLSAgICAgKiB0
aHJvdWdoIHRoZSBEb2N1bWVudEV2ZW50IGludGVyZmFjZS4gVGhpcyBtZXRob2QgbWF5IG9ubHkg
YmUgY2FsbGVkCi0gICAgICogYmVmb3JlIHRoZSBFdmVudCBoYXMgYmVlbiBkaXNwYXRjaGVkIHZp
YSB0aGUgZGlzcGF0Y2hFdmVudCBtZXRob2QsCi0gICAgICogdGhvdWdoIGl0IG1heSBiZSBjYWxs
ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRoYXQgcGhhc2UgaWYgbmVjZXNzYXJ5LgotICAgICAq
IElmIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0aGUgZmluYWwgaW52b2NhdGlvbiB0YWtlcyBwcmVj
ZWRlbmNlLiBJZgotICAgICAqIGNhbGxlZCBmcm9tIGEgc3ViY2xhc3Mgb2YgRXZlbnQgaW50ZXJm
YWNlIG9ubHkgdGhlIHZhbHVlcyBzcGVjaWZpZWQgaW4KLSAgICAgKiB0aGUgaW5pdEV2ZW50IG1l
dGhvZCBhcmUgbW9kaWZpZWQsIGFsbCBvdGhlciBhdHRyaWJ1dGVzIGFyZSBsZWZ0Ci0gICAgICog
dW5jaGFuZ2VkLgotICAgICAqCi0gICAgICogQHBhcmFtIGV2ZW50VHlwZUFyZyBTcGVjaWZpZXMg
dGhlIGV2ZW50IHR5cGUuIFRoaXMgdHlwZSBtYXkgYmUgYW55IGV2ZW50Ci0gICAgICogdHlwZSBj
dXJyZW50bHkgZGVmaW5lZCBpbiB0aGlzIHNwZWNpZmljYXRpb24gb3IgYSBuZXcgZXZlbnQgdHlw
ZS4uIFRoZQotICAgICAqIHN0cmluZyBtdXN0IGJlIGFuIFhNTCBuYW1lLgotICAgICAqCi0gICAg
ICogQW55IG5ldyBldmVudCB0eXBlIG11c3Qgbm90IGJlZ2luIHdpdGggYW55IHVwcGVyLCBsb3dl
ciwgb3IgbWl4ZWQgY2FzZQotICAgICAqIHZlcnNpb24gb2YgdGhlIHN0cmluZyAiRE9NIi4gVGhp
cyBwcmVmaXggaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBET00KLSAgICAgKiBldmVudCBzZXRzLiBJ
dCBpcyBhbHNvIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgdGhpcmQgcGFydGllcyBhZGRpbmcK
LSAgICAgKiB0aGVpciBvd24gZXZlbnRzIHVzZSB0aGVpciBvd24gcHJlZml4IHRvIGF2b2lkIGNv
bmZ1c2lvbiBhbmQgbGVzc2VuIHRoZQotICAgICAqIHByb2JhYmlsaXR5IG9mIGNvbmZsaWN0cyB3
aXRoIG90aGVyIG5ldyBldmVudHMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2FuQnViYmxlQXJn
IFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgZXZlbnQgY2FuIGJ1YmJsZS4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSBjYW5jZWxhYmxlQXJnIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUg
ZXZlbnQncyBkZWZhdWx0IGFjdGlvbiBjYW4gYmUgcHJldmVudGVkLgotICAgICAqCi0gICAgICov
Ci0gICAgdm9pZCBpbml0RXZlbnQoY29uc3QgRE9NU3RyaW5nICZldmVudFR5cGVBcmcsIGJvb2wg
Y2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcpOwotCi0gICAgLyoqCi0gICAgICogQGlu
dGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwotICAgIEV2ZW50SW1w
bCAqaGFuZGxlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdDsKLQotICAgIC8qIE5v
bnN0YW5kYXJkIGV4dGVuc2lvbnMgbmVlZGVkIHRvIHN1cHBvcnQgd2lkZWx5IHVzZWQgSlMgZXZl
bnQgcHJvcGVydGllcyAqLwotICAgIHZvaWQgc2V0Q2FuY2VsQnViYmxlKGJvb2wgY2FuY2VsKTsK
LSAgICB2b2lkIHNldERlZmF1bHRQcmV2ZW50ZWQoYm9vbCByZXR1cm5WYWx1ZSk7Ci0gICAgYm9v
bCBnZXRDYW5jZWxCdWJibGUoKSBjb25zdDsKLSAgICBib29sIGRlZmF1bHRQcmV2ZW50ZWQoKSBj
b25zdDsKLQotICAgIEV2ZW50KEV2ZW50SW1wbCAqaSk7Ci0KLXByb3RlY3RlZDoKLSAgICBFdmVu
dEltcGwgKmltcGw7Ci0KLSNlbmRpZgotCiB9OwogCiAKQEAgLTMwNSwxNSArMTM0LDYgQEAgY2xh
c3MgRXZlbnRFeGNlcHRpb24KIHsKIHB1YmxpYzoKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNf
RE9NCi0KLSAgICBFdmVudEV4Y2VwdGlvbih1bnNpZ25lZCBzaG9ydCBfY29kZSk7Ci0gICAgRXZl
bnRFeGNlcHRpb24oY29uc3QgRXZlbnRFeGNlcHRpb24gJm90aGVyKTsKLSAgICBFdmVudEV4Y2Vw
dGlvbiAmIG9wZXJhdG9yID0gKGNvbnN0IEV2ZW50RXhjZXB0aW9uICZvdGhlcik7Ci0gICAgdmly
dHVhbCB+RXZlbnRFeGNlcHRpb24oKSB7fQotCi0jZW5kaWYKLQogICAgIC8qKgogICAgICAqIEFu
IGludGVnZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBlcnJvciBnZW5lcmF0ZWQuCiAgICAgICoK
QEAgLTMyOCwyODAgKzE0OCw4IEBAIHB1YmxpYzoKICAgICAgICAgX0VYQ0VQVElPTl9PRkZTRVQg
ICAgICAgICAgICAgID0gMzAwMCwKICAgICAgICAgX0VYQ0VQVElPTl9NQVggICAgICAgICAgICAg
ICAgID0gMzk5OQogICAgIH07Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAg
dW5zaWduZWQgc2hvcnQgY29kZTsKLQotI2VuZGlmCi0KLX07Ci0KLQotI2lmICFLSFRNTF9OT19D
UExVU1BMVVNfRE9NCi0KLQotLyoqCi0gKiBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi0gKgot
ICogVGhlIFVJRXZlbnQgaW50ZXJmYWNlIHByb3ZpZGVzIHNwZWNpZmljIGNvbnRleHR1YWwgaW5m
b3JtYXRpb24gYXNzb2NpYXRlZAotICogd2l0aCBVc2VyIEludGVyZmFjZSBldmVudHMuCi0gKgot
ICovCi1jbGFzcyBVSUV2ZW50IDogcHVibGljIEV2ZW50IHsKLXB1YmxpYzoKLSAgICBVSUV2ZW50
KCk7Ci0gICAgVUlFdmVudChjb25zdCBVSUV2ZW50ICZvdGhlcik7Ci0gICAgVUlFdmVudChjb25z
dCBFdmVudCAmb3RoZXIpOwotICAgIFVJRXZlbnQgJiBvcGVyYXRvciA9IChjb25zdCBVSUV2ZW50
ICZvdGhlcik7Ci0gICAgVUlFdmVudCAmIG9wZXJhdG9yID0gKGNvbnN0IEV2ZW50ICZvdGhlcik7
Ci0gICAgdmlydHVhbCB+VUlFdmVudCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIHZpZXcgYXR0
cmlidXRlIGlkZW50aWZpZXMgdGhlIEFic3RyYWN0VmlldyBmcm9tIHdoaWNoIHRoZSBldmVudCB3
YXMKLSAgICAgKiBnZW5lcmF0ZWQuCi0gICAgICoKLSAgICAgKi8KLSAgICBBYnN0cmFjdFZpZXcg
dmlldygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogU3BlY2lmaWVzIHNvbWUgZGV0YWlsIGlu
Zm9ybWF0aW9uIGFib3V0IHRoZSBFdmVudCwgZGVwZW5kaW5nIG9uIHRoZSB0eXBlCi0gICAgICog
b2YgZXZlbnQuCi0gICAgICoKLSAgICAgKi8KLSAgICBpbnQgZGV0YWlsKCkgY29uc3Q7Ci0KLSAg
ICAvKioKLSAgICAgKiBOb24tc3RhbmRhcmQgZXh0ZW5zaW9uIHRvIHN1cHBvcnQgSUUtc3R5bGUg
a2V5Q29kZSBldmVudCBwcm9wZXJ0eS4KLSAgICAgKgotICAgICAqLwotICAgIGludCBrZXlDb2Rl
KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBOb24tc3RhbmRhcmQgZXh0ZW5zaW9uIHRvIHN1
cHBvcnQgSUUtc3R5bGUgY2hhckNvZGUgZXZlbnQgcHJvcGVydHkuCi0gICAgICoKLSAgICAgKi8K
LSAgICBpbnQgY2hhckNvZGUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIE5vbi1zdGFuZGFy
ZCBleHRlbnNpb25zIHRvIHN1cHBvcnQgTmV0c2NhcGUtc3R5bGUgcGFnZVggYW5kIHBhZ2VZIGV2
ZW50IHByb3BlcnRpZXMuCi0gICAgICoKLSAgICAgKi8KLSAgICBpbnQgcGFnZVgoKSBjb25zdDsK
LSAgICBpbnQgcGFnZVkoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIE5vbi1zdGFuZGFyZCBl
eHRlbnNpb25zIHRvIHN1cHBvcnQgTmV0c2NhcGUtc3R5bGUgbGF5ZXJYIGFuZCBsYXllclkgZXZl
bnQgcHJvcGVydGllcy4KLSAgICAgKgotICAgICAqLwotICAgIGludCBsYXllclgoKSBjb25zdDsK
LSAgICBpbnQgbGF5ZXJZKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBOb24tc3RhbmRhcmQg
ZXh0ZW5zaW9uIHRvIHN1cHBvcnQgTmV0c2NhcGUtc3R5bGUgIndoaWNoIiBldmVudCBwcm9wZXJ0
eS4KLSAgICAgKgotICAgICAqLwotICAgIGludCB3aGljaCgpIGNvbnN0OwotCi0gICAgLyoqCi0g
ICAgICogVGhlIGluaXRVSUV2ZW50IG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIHZh
bHVlIG9mIGEgVUlFdmVudAotICAgICAqIGNyZWF0ZWQgdGhyb3VnaCB0aGUgRG9jdW1lbnRFdmVu
dCBpbnRlcmZhY2UuIFRoaXMgbWV0aG9kIG1heSBvbmx5IGJlCi0gICAgICogY2FsbGVkIGJlZm9y
ZSB0aGUgVUlFdmVudCBoYXMgYmVlbiBkaXNwYXRjaGVkIHZpYSB0aGUgZGlzcGF0Y2hFdmVudAot
ICAgICAqIG1ldGhvZCwgdGhvdWdoIGl0IG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZHVy
aW5nIHRoYXQgcGhhc2UgaWYKLSAgICAgKiBuZWNlc3NhcnkuIElmIGNhbGxlZCBtdWx0aXBsZSB0
aW1lcywgdGhlIGZpbmFsIGludm9jYXRpb24gdGFrZXMKLSAgICAgKiBwcmVjZWRlbmNlLgotICAg
ICAqCi0gICAgICogQHBhcmFtIHR5cGVBcmcgU3BlY2lmaWVzIHRoZSBldmVudCB0eXBlLgotICAg
ICAqCi0gICAgICogQHBhcmFtIGNhbkJ1YmJsZUFyZyBTcGVjaWZpZXMgd2hldGhlciBvciBub3Qg
dGhlIGV2ZW50IGNhbiBidWJibGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2FuY2VsYWJsZUFy
ZyBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24KLSAg
ICAgKiBjYW4gYmUgcHJldmVudGVkLgotICAgICAqCi0gICAgICogQHBhcmFtIHZpZXdBcmcgU3Bl
Y2lmaWVzIHRoZSBFdmVudCdzIEFic3RyYWN0Vmlldy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBk
ZXRhaWxBcmcgU3BlY2lmaWVzIHRoZSBFdmVudCdzIGRldGFpbC4KLSAgICAgKgotICAgICAqLwot
ICAgIHZvaWQgaW5pdFVJRXZlbnQoY29uc3QgRE9NU3RyaW5nICZ0eXBlQXJnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBBYnN0cmFjdFZpZXcgJnZpZXdBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGV0YWlsQXJnKTsKLQotICAgIFVJRXZlbnQoVUlF
dmVudEltcGwgKmltcGwpOwogfTsKIAotCi0KLQotLyoqCi0gKiBJbnRyb2R1Y2VkIGluIERPTSBM
ZXZlbCAyCi0gKgotICogVGhlIE1vdXNlRXZlbnQgaW50ZXJmYWNlIHByb3ZpZGVzIHNwZWNpZmlj
IGNvbnRleHR1YWwgaW5mb3JtYXRpb24gYXNzb2NpYXRlZAotICogd2l0aCBNb3VzZSBldmVudHMu
Ci0gKgotICogVGhlIGRldGFpbCBhdHRyaWJ1dGUgaW5oZXJpdGVkIGZyb20gVUlFdmVudCBpbmRp
Y2F0ZXMgdGhlIG51bWJlciBvZiB0aW1lcyBhCi0gKiBtb3VzZSBidXR0b24gaGFzIGJlZW4gcHJl
c3NlZCBhbmQgcmVsZWFzZWQgb3ZlciB0aGUgc2FtZSBzY3JlZW4gbG9jYXRpb24KLSAqIGR1cmlu
ZyBhIHVzZXIgYWN0aW9uLiBUaGUgYXR0cmlidXRlIHZhbHVlIGlzIDEgd2hlbiB0aGUgdXNlciBi
ZWdpbnMgdGhpcwotICogYWN0aW9uIGFuZCBpbmNyZW1lbnRzIGJ5IDEgZm9yIGVhY2ggZnVsbCBz
ZXF1ZW5jZSBvZiBwcmVzc2luZyBhbmQgcmVsZWFzaW5nLgotICogSWYgdGhlIHVzZXIgbW92ZXMg
dGhlIG1vdXNlIGJldHdlZW4gdGhlIG1vdXNlZG93biBhbmQgbW91c2V1cCB0aGUgdmFsdWUgd2ls
bAotICogYmUgc2V0IHRvIDAsIGluZGljYXRpbmcgdGhhdCBubyBjbGljayBpcyBvY2N1cnJpbmcu
Ci0gKgotICogSW4gdGhlIGNhc2Ugb2YgbmVzdGVkIGVsZW1lbnRzIG1vdXNlIGV2ZW50cyBhcmUg
YWx3YXlzIHRhcmdldGVkIGF0IHRoZSBtb3N0Ci0gKiBkZWVwbHkgbmVzdGVkIGVsZW1lbnQuIEFu
Y2VzdG9ycyBvZiB0aGUgdGFyZ2V0ZWQgZWxlbWVudCBtYXkgdXNlIGJ1YmJsaW5nIHRvCi0gKiBv
YnRhaW4gbm90aWZpY2F0aW9uIG9mIG1vdXNlIGV2ZW50cyB3aGljaCBvY2N1ciB3aXRoaW4gaXRz
IGRlc2NlbmRlbnQgZWxlbWVudHMuCi0gKgotICovCi1jbGFzcyBNb3VzZUV2ZW50IDogcHVibGlj
IFVJRXZlbnQgewotcHVibGljOgotICAgIE1vdXNlRXZlbnQoKTsKLSAgICBNb3VzZUV2ZW50KGNv
bnN0IE1vdXNlRXZlbnQgJm90aGVyKTsKLSAgICBNb3VzZUV2ZW50KGNvbnN0IEV2ZW50ICZvdGhl
cik7Ci0gICAgTW91c2VFdmVudCAmIG9wZXJhdG9yID0gKGNvbnN0IE1vdXNlRXZlbnQgJm90aGVy
KTsKLSAgICBNb3VzZUV2ZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgRXZlbnQgJm90aGVyKTsKLSAg
ICB2aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaG9yaXpvbnRh
bCBjb29yZGluYXRlIGF0IHdoaWNoIHRoZSBldmVudCBvY2N1cnJlZCByZWxhdGl2ZSB0byB0aGUK
LSAgICAgKiBvcmlnaW4gb2YgdGhlIHNjcmVlbiBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgKgot
ICAgICAqLwotICAgIGludCBzY3JlZW5YKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUg
dmVydGljYWwgY29vcmRpbmF0ZSBhdCB3aGljaCB0aGUgZXZlbnQgb2NjdXJyZWQgcmVsYXRpdmUg
dG8gdGhlCi0gICAgICogb3JpZ2luIG9mIHRoZSBzY3JlZW4gY29vcmRpbmF0ZSBzeXN0ZW0uCi0g
ICAgICoKLSAgICAgKi8KLSAgICBpbnQgc2NyZWVuWSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAg
ICogVGhlIGhvcml6b250YWwgY29vcmRpbmF0ZSBhdCB3aGljaCB0aGUgZXZlbnQgb2NjdXJyZWQg
cmVsYXRpdmUgdG8gdGhlCi0gICAgICogRE9NIGltcGxlbWVudGF0aW9uJ3MgY2xpZW50IGFyZWEu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBpbnQgY2xpZW50WCgpIGNvbnN0OwotCi0gICAgLyoqCi0g
ICAgICogVGhlIHZlcnRpY2FsIGNvb3JkaW5hdGUgYXQgd2hpY2ggdGhlIGV2ZW50IG9jY3VycmVk
IHJlbGF0aXZlIHRvIHRoZSBET00KLSAgICAgKiBpbXBsZW1lbnRhdGlvbidzIGNsaWVudCBhcmVh
LgotICAgICAqCi0gICAgICovCi0gICAgaW50IGNsaWVudFkoKSBjb25zdDsKLQotICAgIC8qKgot
ICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgJ2N0cmwnIGtleSB3YXMgZGVwcmVz
c2VkIGR1cmluZyB0aGUgZmlyaW5nCi0gICAgICogb2YgdGhlIGV2ZW50LgotICAgICAqLwotICAg
IGJvb2wgY3RybEtleSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0
ZSB3aGV0aGVyIHRoZSAnc2hpZnQnIGtleSB3YXMgZGVwcmVzc2VkIGR1cmluZyB0aGUgZmlyaW5n
Ci0gICAgICogb2YgdGhlIGV2ZW50LgotICAgICAqCi0gICAgICovCi0gICAgYm9vbCBzaGlmdEtl
eSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRo
ZSAnYWx0JyBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcgdGhlIGZpcmluZwotICAgICAqIG9mIHRo
ZSBldmVudC4gT24gc29tZSBwbGF0Zm9ybXMgdGhpcyBrZXkgbWF5IG1hcCB0byBhbiBhbHRlcm5h
dGl2ZSBrZXkKLSAgICAgKiBuYW1lLgotICAgICAqCi0gICAgICovCi0gICAgYm9vbCBhbHRLZXko
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUg
J21ldGEnIGtleSB3YXMgZGVwcmVzc2VkIGR1cmluZyB0aGUgZmlyaW5nCi0gICAgICogb2YgdGhl
IGV2ZW50LiBPbiBzb21lIHBsYXRmb3JtcyB0aGlzIGtleSBtYXkgbWFwIHRvIGFuIGFsdGVybmF0
aXZlIGtleQotICAgICAqIG5hbWUuCi0gICAgICoKLSAgICAgKi8KLSAgICBib29sIG1ldGFLZXko
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIER1cmluZyBtb3VzZSBldmVudHMgY2F1c2VkIGJ5
IHRoZSBkZXByZXNzaW9uIG9yIHJlbGVhc2Ugb2YgYSBtb3VzZQotICAgICAqIGJ1dHRvbiwgYnV0
dG9uIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggbW91c2UgYnV0dG9uIGNoYW5nZWQgc3RhdGUu
IFRoZQotICAgICAqIHZhbHVlcyBmb3IgYnV0dG9uIHJhbmdlIGZyb20gemVybyB0byBpbmRpY2F0
ZSB0aGUgbGVmdCBidXR0b24gb2YgdGhlCi0gICAgICogbW91c2UsIG9uZSB0byBpbmRpY2F0ZSB0
aGUgbWlkZGxlIGJ1dHRvbiBpZiBwcmVzZW50LCBhbmQgdHdvIHRvIGluZGljYXRlCi0gICAgICog
dGhlIHJpZ2h0IGJ1dHRvbi4gRm9yIG1pY2UgY29uZmlndXJlZCBmb3IgbGVmdCBoYW5kZWQgdXNl
IGluIHdoaWNoIHRoZQotICAgICAqIGJ1dHRvbiBhY3Rpb25zIGFyZSByZXZlcnNlZCB0aGUgdmFs
dWVzIGFyZSBpbnN0ZWFkIHJlYWQgZnJvbSByaWdodCB0bwotICAgICAqIGxlZnQuCi0gICAgICoK
LSAgICAgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBidXR0b24oKSBjb25zdDsKLQotICAgIC8qKgot
ICAgICAqIFVzZWQgdG8gaWRlbnRpZnkgYSBzZWNvbmRhcnkgRXZlbnRUYXJnZXQgcmVsYXRlZCB0
byBhIFVJIGV2ZW50LgotICAgICAqIEN1cnJlbnRseSB0aGlzIGF0dHJpYnV0ZSBpcyB1c2VkIHdp
dGggdGhlIG1vdXNlb3ZlciBldmVudCB0byBpbmRpY2F0ZQotICAgICAqIHRoZSBFdmVudFRhcmdl
dCB3aGljaCB0aGUgcG9pbnRpbmcgZGV2aWNlIGV4aXRlZCBhbmQgd2l0aCB0aGUgbW91c2VvdXQK
LSAgICAgKiBldmVudCB0byBpbmRpY2F0ZSB0aGUgRXZlbnRUYXJnZXQgd2hpY2ggdGhlIHBvaW50
aW5nIGRldmljZSBlbnRlcmVkLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSByZWxhdGVkVGFy
Z2V0KCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaW5pdE1vdXNlRXZlbnQgbWV0aG9k
IGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdmFsdWUgb2YgYQotICAgICAqIE1vdXNlRXZlbnQg
Y3JlYXRlZCB0aHJvdWdoIHRoZSBEb2N1bWVudEV2ZW50IGludGVyZmFjZS4gVGhpcyBtZXRob2Qg
bWF5Ci0gICAgICogb25seSBiZSBjYWxsZWQgYmVmb3JlIHRoZSBNb3VzZUV2ZW50IGhhcyBiZWVu
IGRpc3BhdGNoZWQgdmlhIHRoZQotICAgICAqIGRpc3BhdGNoRXZlbnQgbWV0aG9kLCB0aG91Z2gg
aXQgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgdGhhdAotICAgICAqIHBoYXNl
IGlmIG5lY2Vzc2FyeS4gSWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzLCB0aGUgZmluYWwgaW52b2Nh
dGlvbiB0YWtlcwotICAgICAqIHByZWNlZGVuY2UuIFBhcmFtZXRlcnMKLSAgICAgKgotICAgICAq
IEBwYXJhbSB0eXBlQXJnIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZS4KLSAgICAgKgotICAgICAq
IEBwYXJhbSBjYW5CdWJibGVBcmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBldmVudCBj
YW4gYnViYmxlLgotICAgICAqCi0gICAgICogQHBhcmFtIGNhbmNlbGFibGVBcmcgU3BlY2lmaWVz
IHdoZXRoZXIgb3Igbm90IHRoZSBldmVudCdzIGRlZmF1bHQgYWN0aW9uIGNhbiBiZSBwcmV2ZW50
ZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdmlld0FyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3Mg
QWJzdHJhY3RWaWV3LgotICAgICAqCi0gICAgICogQHBhcmFtIGRldGFpbEFyZyBTcGVjaWZpZXMg
dGhlIEV2ZW50J3MgbW91c2UgY2xpY2sgY291bnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2Ny
ZWVuWEFyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3Mgc2NyZWVuIHggY29vcmRpbmF0ZQotICAgICAq
Ci0gICAgICogQHBhcmFtIHNjcmVlbllBcmcgU3BlY2lmaWVzIHRoZSBFdmVudCdzIHNjcmVlbiB5
IGNvb3JkaW5hdGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBjbGllbnRYQXJnIFNwZWNpZmllcyB0
aGUgRXZlbnQncyBjbGllbnQgeCBjb29yZGluYXRlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY2xp
ZW50WUFyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3MgY2xpZW50IHkgY29vcmRpbmF0ZQotICAgICAq
Ci0gICAgICogQHBhcmFtIGN0cmxLZXlBcmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGNvbnRy
b2wga2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRoZSBFdmVudC4KLSAgICAgKgotICAgICAqIEBw
YXJhbSBhbHRLZXlBcmcgU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGFsdCBrZXkgd2FzIGRlcHJl
c3NlZCBkdXJpbmcgdGhlIEV2ZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIHNoaWZ0S2V5QXJn
IFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBzaGlmdCBrZXkgd2FzIGRlcHJlc3NlZCBkdXJpbmcg
dGhlIEV2ZW50LgotICAgICAqCi0gICAgICogQHBhcmFtIG1ldGFLZXlBcmcgU3BlY2lmaWVzIHdo
ZXRoZXIgb3Igbm90IG1ldGEga2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRoZSBFdmVudC4KLSAg
ICAgKgotICAgICAqIEBwYXJhbSBidXR0b25BcmcgU3BlY2lmaWVzIHRoZSBFdmVudCdzIG1vdXNl
IGJ1dHRvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSByZWxhdGVkVGFyZ2V0QXJnIFNwZWNpZmll
cyB0aGUgRXZlbnQncyByZWxhdGVkIEV2ZW50VGFyZ2V0LgotICAgICAqCi0gICAgICovCi0gICAg
dm9pZCBpbml0TW91c2VFdmVudChjb25zdCBET01TdHJpbmcgJnR5cGVBcmcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbkJ1YmJsZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFic3RyYWN0VmlldyAmdmlld0FyZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXRhaWxBcmcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2NyZWVuWEFyZywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzY3JlZW5ZQXJnLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudFhBcmcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgY2xpZW50WUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgY3RybEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYWx0S2V5QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzaGlmdEtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgbWV0YUtleUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IGJ1dHRvbkFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE5vZGUgJnJlbGF0ZWRUYXJnZXRBcmcpOwotcHJvdGVjdGVkOgotICAgIE1v
dXNlRXZlbnQoTW91c2VFdmVudEltcGwgKmltcGwpOwotfTsKLQotCi0jZW5kaWYKLQotCiAvKioK
ICAqIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDIKICAqCkBAIC02MTIsMTcgKzE2MCw2IEBAIHBy
b3RlY3RlZDoKIGNsYXNzIE11dGF0aW9uRXZlbnQgOiBwdWJsaWMgRXZlbnQgewogcHVibGljOgog
Ci0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotICAgIE11dGF0aW9uRXZlbnQoKTsKLSAg
ICBNdXRhdGlvbkV2ZW50KGNvbnN0IE11dGF0aW9uRXZlbnQgJm90aGVyKTsKLSAgICBNdXRhdGlv
bkV2ZW50KGNvbnN0IEV2ZW50ICZvdGhlcik7Ci0gICAgTXV0YXRpb25FdmVudCAmIG9wZXJhdG9y
ID0gKGNvbnN0IE11dGF0aW9uRXZlbnQgJm90aGVyKTsKLSAgICBNdXRhdGlvbkV2ZW50ICYgb3Bl
cmF0b3IgPSAoY29uc3QgRXZlbnQgJm90aGVyKTsKLSAgICB2aXJ0dWFsIH5NdXRhdGlvbkV2ZW50
KCk7Ci0KLSNlbmRpZgotCiAgICAgLyoqCiAgICAgICogQW4gaW50ZWdlciBpbmRpY2F0aW5nIGlu
IHdoaWNoIHdheSB0aGUgQXR0ciB3YXMgY2hhbmdlZC4KICAgICAgKgpAQCAtNjM4LDg5ICsxNzUs
NiBAQCBwdWJsaWM6CiAJQURESVRJT04gPSAyLAogCVJFTU9WQUwgPSAzCiAgICAgfTsKLQotI2lm
ICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICAvKioKLSAgICAgKiByZWxhdGVkTm9kZSBp
cyB1c2VkIHRvIGlkZW50aWZ5IGEgc2Vjb25kYXJ5IG5vZGUgcmVsYXRlZCB0byBhIG11dGF0aW9u
Ci0gICAgICogZXZlbnQuIEZvciBleGFtcGxlLCBpZiBhIG11dGF0aW9uIGV2ZW50IGlzIGRpc3Bh
dGNoZWQgdG8gYSBub2RlCi0gICAgICogaW5kaWNhdGluZyB0aGF0IGl0cyBwYXJlbnQgaGFzIGNo
YW5nZWQsIHRoZSByZWxhdGVkTm9kZSBpcyB0aGUgY2hhbmdlZAotICAgICAqIHBhcmVudC4gSWYg
YW4gZXZlbnQgaXMgaW5zdGVhZCBkaXNwYXRjaGVkIHRvIGEgc3VidHJlZSBpbmRpY2F0aW5nIGEg
bm9kZQotICAgICAqIHdhcyBjaGFuZ2VkIHdpdGhpbiBpdCwgdGhlIHJlbGF0ZWROb2RlIGlzIHRo
ZSBjaGFuZ2VkIG5vZGUuIEluIHRoZSBjYXNlCi0gICAgICogb2YgdGhlIERPTUF0dHJNb2RpZmll
ZCBldmVudCBpdCBpbmRpY2F0ZXMgdGhlIEF0dHIgbm9kZSB3aGljaCB3YXMKLSAgICAgKiBtb2Rp
ZmllZCwgYWRkZWQsIG9yIHJlbW92ZWQuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIHJlbGF0
ZWROb2RlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBwcmV2VmFsdWUgaW5kaWNhdGVzIHRo
ZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgQXR0ciBub2RlIGluCi0gICAgICogRE9NQXR0ck1vZGlm
aWVkIGV2ZW50cywgYW5kIG9mIHRoZSBDaGFyYWN0ZXJEYXRhIG5vZGUgaW4KLSAgICAgKiBET01D
aGFyRGF0YU1vZGlmaWVkIGV2ZW50cy4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBw
cmV2VmFsdWUoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIG5ld1ZhbHVlIGluZGljYXRlcyB0
aGUgbmV3IHZhbHVlIG9mIHRoZSBBdHRyIG5vZGUgaW4gRE9NQXR0ck1vZGlmaWVkCi0gICAgICog
ZXZlbnRzLCBhbmQgb2YgdGhlIENoYXJhY3RlckRhdGEgbm9kZSBpbiBET01DaGFyRGF0YU1vZGlm
aWVkIGV2ZW50cy4KLSAgICAgKgotICAgICAqLwotICAgIERPTVN0cmluZyBuZXdWYWx1ZSgpIGNv
bnN0OwotCi0gICAgLyoqCi0gICAgICogYXR0ck5hbWUgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRo
ZSBjaGFuZ2VkIEF0dHIgbm9kZSBpbiBhCi0gICAgICogRE9NQXR0ck1vZGlmaWVkIGV2ZW50Lgot
ICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGF0dHJOYW1lKCkgY29uc3Q7Ci0KLSAgICAv
KioKLSAgICAgKiBhdHRyQ2hhbmdlIGluZGljYXRlcyB0aGUgdHlwZSBvZiBjaGFuZ2Ugd2hpY2gg
dHJpZ2dlcmVkIHRoZQotICAgICAqIERPTUF0dHJNb2RpZmllZCBldmVudC4gVGhlIHZhbHVlcyBj
YW4gYmUgTU9ESUZJQ0FUSU9OLCBBRERJVElPTiwgb3IKLSAgICAgKiBSRU1PVkFMLgotICAgICAq
Ci0gICAgICovCi0gICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZSgpIGNvbnN0OwotCi0gICAg
LyoqCi0gICAgICogVGhlIGluaXRNdXRhdGlvbkV2ZW50IG1ldGhvZCBpcyB1c2VkIHRvIGluaXRp
YWxpemUgdGhlIHZhbHVlIG9mIGEKLSAgICAgKiBNdXRhdGlvbkV2ZW50IGNyZWF0ZWQgdGhyb3Vn
aCB0aGUgRG9jdW1lbnRFdmVudCBpbnRlcmZhY2UuIFRoaXMgbWV0aG9kCi0gICAgICogbWF5IG9u
bHkgYmUgY2FsbGVkIGJlZm9yZSB0aGUgTXV0YXRpb25FdmVudCBoYXMgYmVlbiBkaXNwYXRjaGVk
IHZpYSB0aGUKLSAgICAgKiBkaXNwYXRjaEV2ZW50IG1ldGhvZCwgdGhvdWdoIGl0IG1heSBiZSBj
YWxsZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIHRoYXQKLSAgICAgKiBwaGFzZSBpZiBuZWNlc3Nh
cnkuIElmIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgdGhlIGZpbmFsIGludm9jYXRpb24gdGFrZXMK
LSAgICAgKiBwcmVjZWRlbmNlLgotICAgICAqCi0gICAgICogQHBhcmFtIHR5cGVBcmcgU3BlY2lm
aWVzIHRoZSBldmVudCB0eXBlLgotICAgICAqCi0gICAgICogQHBhcmFtIGNhbkJ1YmJsZUFyZyBT
cGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIGV2ZW50IGNhbiBidWJibGUuCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0gY2FuY2VsYWJsZUFyZyBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgdGhlIGV2
ZW50J3MgZGVmYXVsdCBhY3Rpb24gY2FuIGJlIHByZXZlbnRlZC4KLSAgICAgKgotICAgICAqIEBw
YXJhbSByZWxhdGVkTm9kZUFyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3MgcmVsYXRlZCBOb2RlLgot
ICAgICAqCi0gICAgICogQHBhcmFtIHByZXZWYWx1ZUFyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3Mg
cHJldlZhbHVlIGF0dHJpYnV0ZS4gVGhpcyB2YWx1ZSBtYXkgYmUgbnVsbC4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSBuZXdWYWx1ZUFyZyBTcGVjaWZpZXMgdGhlIEV2ZW50J3MgbmV3VmFsdWUgYXR0
cmlidXRlLiBUaGlzIHZhbHVlIG1heSBiZSBudWxsLgotICAgICAqCi0gICAgICogQHBhcmFtIGF0
dHJOYW1lQXJnIFNwZWNpZmllcyB0aGUgRXZlbnQncyBhdHRyTmFtZSBhdHRyaWJ1dGUuIFRoaXMg
dmFsdWUgbWF5IGJlIG51bGwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYXR0ckNoYW5nZUFyZyBT
cGVjaWZpZXMgdGhlIEV2ZW50J3MgYXR0ckNoYW5nZSBhdHRyaWJ1dGUKLSAgICAgKgotICAgICAq
LwotICAgIHZvaWQgaW5pdE11dGF0aW9uRXZlbnQoY29uc3QgRE9NU3RyaW5nICZ0eXBlQXJnLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNlbGFibGVB
cmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOb2RlICZy
ZWxhdGVkTm9kZUFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IERPTVN0cmluZyAmcHJldlZhbHVlQXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZuZXdWYWx1ZUFyZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmYXR0ck5hbWVBcmcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhdHRy
Q2hhbmdlQXJnKTsKLXByb3RlY3RlZDoKLSAgICBNdXRhdGlvbkV2ZW50KE11dGF0aW9uRXZlbnRJ
bXBsICppbXBsKTsKLQotI2VuZGlmCi0KIH07CiAKIApAQCAtNzMzLDEwMiArMTg3LDE2IEBAIHBy
b3RlY3RlZDoKICAqLwogY2xhc3MgS2V5Ym9hcmRFdmVudAogCi0jaWYgIUtIVE1MX05PX0NQTFVT
UExVU19ET00KLQotICA6IHB1YmxpYyBVSUV2ZW50Ci0KLSNlbmRpZgotCiB7CiAKIHB1YmxpYzoK
IAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICBLZXlib2FyZEV2ZW50KCk7Ci0g
ICAgS2V5Ym9hcmRFdmVudChjb25zdCBLZXlib2FyZEV2ZW50ICZvdGhlcik7Ci0gICAgS2V5Ym9h
cmRFdmVudChjb25zdCBFdmVudCAmb3RoZXIpOwotICAgIEtleWJvYXJkRXZlbnQgJiBvcGVyYXRv
ciA9IChjb25zdCBLZXlib2FyZEV2ZW50ICZvdGhlcik7Ci0gICAgS2V5Ym9hcmRFdmVudCAmIG9w
ZXJhdG9yID0gKGNvbnN0IEV2ZW50ICZvdGhlcik7Ci0gICAgdmlydHVhbCB+S2V5Ym9hcmRFdmVu
dCgpOwotCi0jZW5kaWYKLQogICAgIC8vIEtleUxvY2F0aW9uQ29kZQogICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBET01fS0VZX0xPQ0FUSU9OX1NUQU5EQVJEICAgICAgPSAweDAwOwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBET01fS0VZX0xPQ0FUSU9OX0xFRlQgICAgICAgICAgPSAweDAx
OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBET01fS0VZX0xPQ0FUSU9OX1JJR0hUICAgICAg
ICAgPSAweDAyOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBET01fS0VZX0xPQ0FUSU9OX05V
TVBBRCAgICAgICAgPSAweDAzOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBET01fS0VZX0xP
Q0FUSU9OX1VOS05PV04gICAgICAgPSAweDA0OwotICAgIAotI2lmICFLSFRNTF9OT19DUExVU1BM
VVNfRE9NCi0KLSAgICAvKioKLSAgICAgKiBIb2xkcyB0aGUgaWRlbnRpZmllciBvZiB0aGUga2V5
LgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3RyaW5nIGtleUlkZW50aWZpZXIoKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIENvbnRhaW5zIGFuIGluZGljYXRpb24gb2YgdGhlIGxvY2F0aW9u
IG9mIHRoZXkga2V5IG9uIHRoZSBkZXZpY2UuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25l
ZCBrZXlMb2NhdGlvbigpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBpbmRpY2F0
ZSB3aGV0aGVyIHRoZSAnY3RybCcga2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRoZSBmaXJpbmcK
LSAgICAgKiBvZiB0aGUgZXZlbnQuCi0gICAgICovCi0gICAgYm9vbCBjdHJsS2V5KCkgY29uc3Q7
Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlICdzaGlmdCcg
a2V5IHdhcyBkZXByZXNzZWQgZHVyaW5nIHRoZSBmaXJpbmcKLSAgICAgKiBvZiB0aGUgZXZlbnQu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBib29sIHNoaWZ0S2V5KCkgY29uc3Q7Ci0KLSAgICAvKioK
LSAgICAgKiBVc2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlICdhbHQnIGtleSB3YXMgZGVwcmVz
c2VkIGR1cmluZyB0aGUgZmlyaW5nCi0gICAgICogb2YgdGhlIGV2ZW50LiBPbiBzb21lIHBsYXRm
b3JtcyB0aGlzIGtleSBtYXkgbWFwIHRvIGFuIGFsdGVybmF0aXZlIGtleQotICAgICAqIG5hbWUu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBib29sIGFsdEtleSgpIGNvbnN0OwotCi0gICAgLyoqCi0g
ICAgICogVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSAnbWV0YScga2V5IHdhcyBkZXByZXNz
ZWQgZHVyaW5nIHRoZSBmaXJpbmcKLSAgICAgKiBvZiB0aGUgZXZlbnQuIE9uIHNvbWUgcGxhdGZv
cm1zIHRoaXMga2V5IG1heSBtYXAgdG8gYW4gYWx0ZXJuYXRpdmUga2V5Ci0gICAgICogbmFtZS4K
LSAgICAgKgotICAgICAqLwotICAgIGJvb2wgbWV0YUtleSgpIGNvbnN0OwotCi0gICAgLyoqCi0g
ICAgICogVXNlZCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSAnYWx0IGdyYXBoJyAoPykga2V5IHdh
cyBkZXByZXNzZWQgZHVyaW5nIHRoZSBmaXJpbmcKLSAgICAgKiBvZiB0aGUgZXZlbnQuIE9uIHNv
bWUgcGxhdGZvcm1zIHRoaXMga2V5IG1heSBtYXAgdG8gYW4gYWx0ZXJuYXRpdmUga2V5Ci0gICAg
ICogbmFtZS4KLSAgICAgKgotICAgICAqLwotICAgIGJvb2wgYWx0R3JhcGhLZXkoKSBjb25zdDsK
LQotICAgIHZvaWQgaW5pdEtleWJvYXJkRXZlbnQoY29uc3QgRE9NU3RyaW5nICZ0eXBlQXJnLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWJzdHJhY3RWaWV3ICZ2aWV3QXJnLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZrZXlJZGVudGlm
aWVyQXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQga2V5TG9j
YXRpb25BcmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGN0cmxLZXlB
cmcsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNoaWZ0S2V5QXJnLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbHRLZXlBcmcsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG1ldGFLZXlBcmcsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGFsdEdyYXBoS2V5QXJnKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotcHJvdGVjdGVkOgotICAgIEtleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudEltcGwgKmltcGwpOwotCi0jZW5kaWYKLQogfTsKIAogfTsgLy9uYW1lc3Bh
Y2UKSW5kZXg6IGtodG1sL2RvbS9kb20yX3JhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbTJfcmFuZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMQpkaWZmIC1wIC11IC1yMS4xMSBraHRtbC9kb20vZG9tMl9yYW5nZS5oCi0tLSBraHRt
bC9kb20vZG9tMl9yYW5nZS5oCTE2IFNlcCAyMDA1IDIyOjQyOjAzIC0wMDAwCTEuMTEKKysrIGto
dG1sL2RvbS9kb20yX3JhbmdlLmgJNCBEZWMgMjAwNSAxMDoyNDozMSAtMDAwMApAQCAtMzMsNDMg
KzMzLDEyIEBACiAKICNpbmNsdWRlIDxkb20vZG9tX25vZGUuaD4KIAotI2lmICFLSFRNTF9OT19D
UExVU1BMVVNfRE9NCi0KLSNpbmNsdWRlIDxkb20vZG9tX2RvYy5oPgotI2luY2x1ZGUgPGRvbS9k
b21fbWlzYy5oPgotCi0jZW5kaWYKLQogbmFtZXNwYWNlIERPTSB7CiAKLSNpZiAhS0hUTUxfTk9f
Q1BMVVNQTFVTX0RPTQotCi1jbGFzcyBEb2N1bWVudEZyYWdtZW50OwotY2xhc3MgTm9kZTsKLWNs
YXNzIERPTVN0cmluZzsKLWNsYXNzIERvY3VtZW50SW1wbDsKLWNsYXNzIFJhbmdlSW1wbDsKLQot
Y2xhc3MgRE9NRXhjZXB0aW9uOwotCi0jZW5kaWYKLQogLy8gSW50cm9kdWNlZCBpbiBET00gTGV2
ZWwgMjoKIGNsYXNzIFJhbmdlRXhjZXB0aW9uIHsKIHB1YmxpYzoKIAotI2lmICFLSFRNTF9OT19D
UExVU1BMVVNfRE9NCi0KLSAgICBSYW5nZUV4Y2VwdGlvbih1bnNpZ25lZCBzaG9ydCBfY29kZSkg
eyBjb2RlID0gX2NvZGU7IH0KLSAgICBSYW5nZUV4Y2VwdGlvbihjb25zdCBSYW5nZUV4Y2VwdGlv
biAmb3RoZXIpIHsgY29kZSA9IG90aGVyLmNvZGU7IH0KLQotICAgIFJhbmdlRXhjZXB0aW9uICYg
b3BlcmF0b3IgPSAoY29uc3QgUmFuZ2VFeGNlcHRpb24gJm90aGVyKQotCXsgY29kZSA9IG90aGVy
LmNvZGU7IHJldHVybiAqdGhpczsgfQotCi0gICAgdmlydHVhbCB+UmFuZ2VFeGNlcHRpb24oKSB7
fQotCi0jZW5kaWYKLQogICAgIC8qKgogICAgICAqIEFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUg
dHlwZSBvZiBlcnJvciBnZW5lcmF0ZWQuCiAgICAgICoKQEAgLTgwLDQzNCArNDksMTkgQEAgcHVi
bGljOgogICAgICAgICBfRVhDRVBUSU9OX09GRlNFVCAgICAgICAgICAgICAgPSAyMDAwLAogICAg
ICAgICBfRVhDRVBUSU9OX01BWCAgICAgICAgICAgICAgICAgPSAyOTk5CiAgICAgfTsKLQotI2lm
ICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICB1bnNpZ25lZCBzaG9ydCBjb2RlOwotCi0j
ZW5kaWYKIH07CiAKIGNsYXNzIFJhbmdlCiB7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RP
TQotCi0gICAgZnJpZW5kIGNsYXNzIERvY3VtZW50SW1wbDsKLSAgICBmcmllbmQgY2xhc3MgRG9j
dW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIFJhbmdlSW1wbDsKLQotI2VuZGlmCi0KIHB1YmxpYzoK
IAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICBSYW5nZSgpOwotICAgIFJhbmdl
KGNvbnN0IERvY3VtZW50IHJvb3RDb250YWluZXIpOwotICAgIFJhbmdlKGNvbnN0IFJhbmdlICZv
dGhlcik7Ci0gICAgUmFuZ2UoY29uc3QgTm9kZSBzdGFydENvbnRhaW5lciwgY29uc3QgaW50IHN0
YXJ0T2Zmc2V0LCBjb25zdCBOb2RlIGVuZENvbnRhaW5lciwgY29uc3QgaW50IGVuZE9mZnNldCk7
Ci0KLSAgICBSYW5nZSAmIG9wZXJhdG9yID0gKGNvbnN0IFJhbmdlICZvdGhlcik7Ci0KLSAgICB+
UmFuZ2UoKTsKLQotICAgIC8qKgotICAgICAqIE5vZGUgd2l0aGluIHdoaWNoIHRoZSByYW5nZSBi
ZWdpbnMKLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgc3RhcnRDb250YWluZXIoKSBjb25zdDsK
LQotICAgIC8qKgotICAgICAqIE9mZnNldCB3aXRoaW4gdGhlIHN0YXJ0aW5nIG5vZGUgb2YgdGhl
IHJhbmdlLgotICAgICAqCi0gICAgICovCi0gICAgaW50IHN0YXJ0T2Zmc2V0KCkgY29uc3Q7Ci0K
LSAgICAvKioKLSAgICAgKiBOb2RlIHdpdGhpbiB3aGljaCB0aGUgcmFuZ2UgZW5kcwotICAgICAq
Ci0gICAgICovCi0gICAgTm9kZSBlbmRDb250YWluZXIoKSBjb25zdDsKLQotICAgIC8qKgotICAg
ICAqIE9mZnNldCB3aXRoaW4gdGhlIGVuZGluZyBub2RlIG9mIHRoZSByYW5nZS4KLSAgICAgKgot
ICAgICAqLwotICAgIGludCBlbmRPZmZzZXQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRS
VUUgaWYgdGhlIHJhbmdlIGlzIGNvbGxhcHNlZAotICAgICAqCi0gICAgICovCi0gICAgYm9vbCBj
b2xsYXBzZWQoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGNvbW1vbiBhbmNl
c3RvciBjb250YWluZXIgb2YgdGhlIHJhbmdlJ3MgdHdvIGVuZC1wb2ludHMuCi0gICAgICogQWxz
byBzZXRzIGl0LgotICAgICAqCi0gICAgICovCi0gICAgLy8gIyMjIEJJQyBtYWtlIGNvbnN0IGlu
IHRoZSBuZXh0IHJlbGVhc2UKLSAgICBOb2RlIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCk7Ci0g
ICAgCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgYXR0cmlidXRlcyBkZXNjcmliaW5nIHRoZSBz
dGFydCBvZiB0aGUgcmFuZ2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVmTm9kZSBUaGUgPGNv
ZGU+IHJlZk5vZGUgPC9jb2RlPiB2YWx1ZS4gVGhpcyBwYXJhbWV0ZXIKLSAgICAgKiBtdXN0IGJl
IGRpZmZlcmVudCBmcm9tIDxjb2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0gICAgICogQHBh
cmFtIG9mZnNldCBUaGUgPGNvZGU+IHN0YXJ0T2Zmc2V0IDwvY29kZT4gdmFsdWUuCi0gICAgICoK
LSAgICAgKiBAcmV0dXJuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0aW9u
Ci0gICAgICogTlVMTF9OT0RFX0VSUjogUmFpc2VkIGlmIDxjb2RlPiByZWZOb2RlIDwvY29kZT4g
aXMgPGNvZGU+IG51bGwKLSAgICAgKiA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqICBJTlZBTElE
X05PREVfVFlQRV9FUlI6IFJhaXNlZCBpZiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IG9yIGFuCi0g
ICAgICogYW5jZXN0b3Igb2YgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiBpcyBhbiBBdHRyLCBFbnRp
dHksCi0gICAgICogTm90YXRpb24sIG9yIERvY3VtZW50VHlwZSBub2RlLgotICAgICAqCi0gICAg
ICogIElmIGFuIG9mZnNldCBpcyBvdXQtb2YtYm91bmRzLCBzaG91bGQgaXQganVzdCBiZSBmaXhl
ZCB1cCBvcgotICAgICAqIHNob3VsZCBhbiBleGNlcHRpb24gYmUgcmFpc2VkLgotICAgICAqCi0g
ICAgICovCi0gICAgdm9pZCBzZXRTdGFydCAoIGNvbnN0IE5vZGUgJnJlZk5vZGUsIGludCBvZmZz
ZXQgKTsKLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGF0dHJpYnV0ZXMgZGVzY3JpYmluZyB0
aGUgZW5kIG9mIGEgcmFuZ2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVmTm9kZSBUaGUgPGNv
ZGU+IHJlZk5vZGUgPC9jb2RlPiB2YWx1ZS4gVGhpcyBwYXJhbWV0ZXIKLSAgICAgKiBtdXN0IGJl
IGRpZmZlcmVudCBmcm9tIDxjb2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0gICAgICogQHBh
cmFtIG9mZnNldCBUaGUgPGNvZGU+IGVuZE9mZnNldCA8L2NvZGU+IHZhbHVlLgotICAgICAqCi0g
ICAgICogQHJldHVybgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBSYW5nZUV4Y2VwdGlvbgot
ICAgICAqIE5VTExfTk9ERV9FUlI6IFJhaXNlZCBpZiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IGlz
IDxjb2RlPiBudWxsCi0gICAgICogPC9jb2RlPiAuCi0gICAgICoKLSAgICAgKiAgSU5WQUxJRF9O
T0RFX1RZUEVfRVJSOiBSYWlzZWQgaWYgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiBvciBhbgotICAg
ICAqIGFuY2VzdG9yIG9mIDxjb2RlPiByZWZOb2RlIDwvY29kZT4gaXMgYW4gQXR0ciwgRW50aXR5
LAotICAgICAqIE5vdGF0aW9uLCBvciBEb2N1bWVudFR5cGUgbm9kZS4KLSAgICAgKgotICAgICAq
LwotICAgIHZvaWQgc2V0RW5kICggY29uc3QgTm9kZSAmcmVmTm9kZSwgaW50IG9mZnNldCApOwot
Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgc3RhcnQgcG9zaXRpb24gdG8gYmUgYmVmb3JlIGEg
bm9kZQotICAgICAqCi0gICAgICogQHBhcmFtIHJlZk5vZGUgUmFuZ2Ugc3RhcnRzIGJlZm9yZSA8
Y29kZT4gcmVmTm9kZSA8L2NvZGU+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoKLSAg
ICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9OT0RFX1RZUEVf
RVJSOiBSYWlzZWQgaWYgYW4gYW5jZXN0b3Igb2YgPGNvZGU+IHJlZk5vZGUKLSAgICAgKiA8L2Nv
ZGU+IGlzIGFuIEF0dHIsIEVudGl0eSwgTm90YXRpb24sIG9yIERvY3VtZW50VHlwZSBub2RlIG9y
Ci0gICAgICogaWYgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiBpcyBhIERvY3VtZW50LCBEb2N1bWVu
dEZyYWdtZW50LAotICAgICAqIEF0dHIsIEVudGl0eSwgb3IgTm90YXRpb24gbm9kZS4KLSAgICAg
KgotICAgICAqLwotICAgIHZvaWQgc2V0U3RhcnRCZWZvcmUgKCBjb25zdCBOb2RlICZyZWZOb2Rl
ICk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBzdGFydCBwb3NpdGlvbiB0byBiZSBhZnRl
ciBhIG5vZGUKLSAgICAgKgotICAgICAqIEBwYXJhbSByZWZOb2RlIFJhbmdlIHN0YXJ0cyBhZnRl
ciA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoK
LSAgICAgKiBAZXhjZXB0aW9uIFJhbmdlRXhjZXB0aW9uCi0gICAgICogSU5WQUxJRF9OT0RFX1RZ
UEVfRVJSOiBSYWlzZWQgaWYgYW4gYW5jZXN0b3Igb2YgPGNvZGU+IHJlZk5vZGUKLSAgICAgKiA8
L2NvZGU+IGlzIGFuIEF0dHIsIEVudGl0eSwgTm90YXRpb24sIG9yIERvY3VtZW50VHlwZSBub2Rl
IG9yCi0gICAgICogaWYgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiBpcyBhIERvY3VtZW50LCBEb2N1
bWVudEZyYWdtZW50LAotICAgICAqIEF0dHIsIEVudGl0eSwgb3IgTm90YXRpb24gbm9kZS4KLSAg
ICAgKgotICAgICAqLwotICAgIHZvaWQgc2V0U3RhcnRBZnRlciAoIGNvbnN0IE5vZGUgJnJlZk5v
ZGUgKTsKLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGVuZCBwb3NpdGlvbiB0byBiZSBiZWZv
cmUgYSBub2RlLgotICAgICAqCi0gICAgICogQHBhcmFtIHJlZk5vZGUgUmFuZ2UgZW5kcyBiZWZv
cmUgPGNvZGU+IHJlZk5vZGUgPC9jb2RlPgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAq
Ci0gICAgICogQGV4Y2VwdGlvbiBSYW5nZUV4Y2VwdGlvbgotICAgICAqIElOVkFMSURfTk9ERV9U
WVBFX0VSUjogUmFpc2VkIGlmIGFuIGFuY2VzdG9yIG9mIDxjb2RlPiByZWZOb2RlCi0gICAgICog
PC9jb2RlPiBpcyBhbiBBdHRyLCBFbnRpdHksIE5vdGF0aW9uLCBvciBEb2N1bWVudFR5cGUgbm9k
ZSBvcgotICAgICAqIGlmIDxjb2RlPiByZWZOb2RlIDwvY29kZT4gaXMgYSBEb2N1bWVudCwgRG9j
dW1lbnRGcmFnbWVudCwKLSAgICAgKiBBdHRyLCBFbnRpdHksIG9yIE5vdGF0aW9uIG5vZGUuCi0g
ICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHNldEVuZEJlZm9yZSAoIGNvbnN0IE5vZGUgJnJlZk5v
ZGUgKTsKLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGVuZCBvZiBhIHJhbmdlIHRvIGJlIGFm
dGVyIGEgbm9kZQotICAgICAqCi0gICAgICogQHBhcmFtIHJlZk5vZGUgUmFuZ2UgZW5kcyBhZnRl
ciA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAg
KgotICAgICAqIEBleGNlcHRpb24gUmFuZ2VFeGNlcHRpb24KLSAgICAgKiBJTlZBTElEX05PREVf
VFlQRV9FUlI6IFJhaXNlZCBpZiBhbiBhbmNlc3RvciBvZiA8Y29kZT4gcmVmTm9kZQotICAgICAq
IDwvY29kZT4gaXMgYW4gQXR0ciwgRW50aXR5LCBOb3RhdGlvbiBvciBEb2N1bWVudFR5cGUgbm9k
ZSBvciBpZgotICAgICAqIDxjb2RlPiByZWZOb2RlIDwvY29kZT4gaXMgYSBEb2N1bWVudCwgRG9j
dW1lbnRGcmFnbWVudCwgQXR0ciwKLSAgICAgKiBFbnRpdHksIG9yIE5vdGF0aW9uIG5vZGUuCi0g
ICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHNldEVuZEFmdGVyICggY29uc3QgTm9kZSAmcmVmTm9k
ZSApOwotCi0gICAgLyoqCi0gICAgICogQ29sbGFwc2UgYSByYW5nZSBvbnRvIG9uZSBvZiBpdHMg
ZW5kLXBvaW50cwotICAgICAqCi0gICAgICogQHBhcmFtIHRvU3RhcnQgSWYgVFJVRSwgY29sbGFw
c2VzIHRoZSBSYW5nZSBvbnRvIGl0cyBzdGFydDsgaWYKLSAgICAgKiBGQUxTRSwgY29sbGFwc2Vz
IGl0IG9udG8gaXRzIGVuZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKgotICAgICAq
LwotICAgIHZvaWQgY29sbGFwc2UgKCBib29sIHRvU3RhcnQgKTsKLQotICAgIC8qKgotICAgICAq
IFNlbGVjdCBhIG5vZGUgYW5kIGl0cyBjb250ZW50cwotICAgICAqCi0gICAgICogQHBhcmFtIHJl
Zk5vZGUgVGhlIG5vZGUgdG8gc2VsZWN0LgotICAgICAqCi0gICAgICogQHJldHVybgotICAgICAq
Ci0gICAgICogQGV4Y2VwdGlvbiBSYW5nZUV4Y2VwdGlvbgotICAgICAqIElOVkFMSURfTk9ERV9U
WVBFX0VSUjogUmFpc2VkIGlmIGFuIGFuY2VzdG9yIG9mIDxjb2RlPiByZWZOb2RlCi0gICAgICog
PC9jb2RlPiBpcyBhbiBBdHRyLCBFbnRpdHksIE5vdGF0aW9uIG9yIERvY3VtZW50VHlwZSBub2Rl
IG9yIGlmCi0gICAgICogPGNvZGU+IHJlZk5vZGUgPC9jb2RlPiBpcyBhIERvY3VtZW50LCBEb2N1
bWVudEZyYWdtZW50LCBBdHRyLAotICAgICAqIEVudGl0eSwgb3IgTm90YXRpb24gbm9kZS4KLSAg
ICAgKgotICAgICAqLwotICAgIHZvaWQgc2VsZWN0Tm9kZSAoIGNvbnN0IE5vZGUgJnJlZk5vZGUg
KTsKLQotICAgIC8qKgotICAgICAqIFNlbGVjdCB0aGUgY29udGVudHMgd2l0aGluIGEgbm9kZQot
ICAgICAqCi0gICAgICogQHBhcmFtIHJlZk5vZGUgTm9kZSB0byBzZWxlY3QgZnJvbQotICAgICAq
Ci0gICAgICogQHJldHVybgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBSYW5nZUV4Y2VwdGlv
bgotICAgICAqIElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIDxjb2RlPiByZWZOb2Rl
IDwvY29kZT4gb3IgYW4KLSAgICAgKiBhbmNlc3RvciBvZiA8Y29kZT4gcmVmTm9kZSA8L2NvZGU+
IGlzIGFuIEF0dHIsIEVudGl0eSwgTm90YXRpb24KLSAgICAgKiBvciBEb2N1bWVudFR5cGUgbm9k
ZS4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgc2VsZWN0Tm9kZUNvbnRlbnRzICggY29uc3Qg
Tm9kZSAmcmVmTm9kZSApOwotCi0jZW5kaWYKLQogICAgIGVudW0gQ29tcGFyZUhvdyB7CiAJU1RB
UlRfVE9fU1RBUlQgPSAwLAogCVNUQVJUX1RPX0VORCA9IDEsCiAJRU5EX1RPX0VORCA9IDIsCiAJ
RU5EX1RPX1NUQVJUID0gMwogICAgIH07Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQot
Ci0gICAgLyoqCi0gICAgICogQ29tcGFyZSB0aGUgZW5kLXBvaW50cyBvZiB0d28gcmFuZ2VzIGlu
IGEgZG9jdW1lbnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaG93Ci0gICAgICoKLSAgICAgKiBA
cGFyYW0gc291cmNlUmFuZ2UKLSAgICAgKgotICAgICAqIEByZXR1cm4gLTEsIDAgb3IgMSBkZXBl
bmRpbmcgb24gd2hldGhlciB0aGUgY29ycmVzcG9uZGluZwotICAgICAqIGVuZC1wb2ludCBvZiB0
aGUgUmFuZ2UgaXMgYmVmb3JlLCBlcXVhbCB0bywgb3IgYWZ0ZXIgdGhlCi0gICAgICogY29ycmVz
cG9uZGluZyBlbmQtcG9pbnQgb2YgPGNvZGU+IHNvdXJjZVJhbmdlIDwvY29kZT4gLgotICAgICAq
Ci0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBXUk9OR19ET0NVTUVOVF9F
UlI6IFJhaXNlZCBpZiB0aGUgdHdvIFJhbmdlcyBhcmUgbm90IGluIHRoZQotICAgICAqIHNhbWUg
ZG9jdW1lbnQgb3IgZG9jdW1lbnQgZnJhZ21lbnQuCi0gICAgICoKLSAgICAgKi8KLSAgICBzaG9y
dCBjb21wYXJlQm91bmRhcnlQb2ludHMgKCBDb21wYXJlSG93IGhvdywgY29uc3QgUmFuZ2UgJnNv
dXJjZVJhbmdlICk7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKiBub3QgcGFy
dCBvZiB0aGUgRE9NCi0gICAgICoKLSAgICAgKiBDb21wYXJlIHRoZSBib3VuZGFyeS1wb2ludHMg
b2YgYSByYW5nZS4KLSAgICAgKgotICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBzdGFydENvbnRh
aW5lciBpcyBiZWZvcmUgdGhlIGVuZENvbnRhaW5lciwKLSAgICAgKiBvciBpZiB0aGV5IGFyZSBl
cXVhbC4KLSAgICAgKiBSZXR1cm4gZmFsc2UgaWYgdGhlIHN0YXJ0Q29udGFpbmVyIGlzIGFmdGVy
IHRoZSBlbmRDb250YWluZXIuCi0gICAgICoKLSAgICAgKi8KLSAgICBib29sIGJvdW5kYXJ5UG9p
bnRzVmFsaWQgKCAgKTsKLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhlIGNvbnRlbnRzIG9m
IGEgcmFuZ2UgZnJvbSB0aGUgY29udGFpbmluZyBkb2N1bWVudCBvcgotICAgICAqIGRvY3VtZW50
IGZyYWdtZW50IHdpdGhvdXQgcmV0dXJuaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSByZW1vdmVkCi0g
ICAgICogY29udGVudC4KLSAgICAgKgotICAgICAqIEByZXR1cm4KLSAgICAgKgotICAgICAqIEBl
eGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJS
OiBSYWlzZWQgaWYgYW55IHBvcnRpb24gb2YgdGhlCi0gICAgICogY29udGVudCBvZiB0aGUgcmFu
Z2UgaXMgcmVhZC1vbmx5IG9yIGFueSBvZiB0aGUgbm9kZXMgdGhhdAotICAgICAqIGNvbnRhaW4g
YW55IG9mIHRoZSBjb250ZW50IG9mIHRoZSByYW5nZSBhcmUgcmVhZC1vbmx5LgotICAgICAqCi0g
ICAgICovCi0gICAgdm9pZCBkZWxldGVDb250ZW50cyAoICApOwotCi0gICAgLyoqCi0gICAgICog
TW92ZXMgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2UgZnJvbSB0aGUgY29udGFpbmluZyBkb2N1bWVu
dCBvcgotICAgICAqIGRvY3VtZW50IGZyYWdtZW50IHRvIGEgbmV3IERvY3VtZW50RnJhZ21lbnQu
Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIEEgRG9jdW1lbnRGcmFnbWVudCBjb250YWluaW5nIHRo
ZSBleHRyYWN0ZWQgY29udGVudHMuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2Vw
dGlvbgotICAgICAqIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIGFueSBw
b3J0aW9uIG9mIHRoZQotICAgICAqIGNvbnRlbnQgb2YgdGhlIHJhbmdlIGlzIHJlYWQtb25seSBv
ciBhbnkgb2YgdGhlIG5vZGVzIHdoaWNoCi0gICAgICogY29udGFpbiBhbnkgb2YgdGhlIGNvbnRl
bnQgb2YgdGhlIHJhbmdlIGFyZSByZWFkLW9ubHkuCi0gICAgICoKLSAgICAgKiAgSElFUkFSQ0hZ
X1JFUVVFU1RfRVJSOiBSYWlzZWQgaWYgYSBEb2N1bWVudFR5cGUgbm9kZSB3b3VsZCBiZQotICAg
ICAqIGV4dHJhY3RlZCBpbnRvIHRoZSBuZXcgRG9jdW1lbnRGcmFnbWVudC4KLSAgICAgKgotICAg
ICAqLwotICAgIERvY3VtZW50RnJhZ21lbnQgZXh0cmFjdENvbnRlbnRzICggICk7Ci0KLSAgICAv
KioKLSAgICAgKiBEdXBsaWNhdGVzIHRoZSBjb250ZW50cyBvZiBhIHJhbmdlCi0gICAgICoKLSAg
ICAgKiBAcmV0dXJuIEEgRG9jdW1lbnRGcmFnbWVudCBjb250YWluaW5nIGNvbnRlbnRzIGVxdWl2
YWxlbnQgdG8KLSAgICAgKiB0aG9zZSBvZiB0aGlzIHJhbmdlLgotICAgICAqCi0gICAgICogQGV4
Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNl
ZCBpZiBhIERvY3VtZW50VHlwZSBub2RlIHdvdWxkIGJlCi0gICAgICogZXh0cmFjdGVkIGludG8g
dGhlIG5ldyBEb2N1bWVudEZyYWdtZW50LgotICAgICAqCi0gICAgICovCi0gICAgRG9jdW1lbnRG
cmFnbWVudCBjbG9uZUNvbnRlbnRzICggICk7Ci0KLSAgICAvKioKLSAgICAgKiBJbnNlcnRzIGEg
bm9kZSBpbnRvIHRoZSBkb2N1bWVudCBvciBkb2N1bWVudCBmcmFnbWVudCBhdCB0aGUKLSAgICAg
KiBzdGFydCBvZiB0aGUgcmFuZ2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV3Tm9kZSBUaGUg
bm9kZSB0byBpbnNlcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZQotICAgICAqCi0gICAgICog
QHJldHVybgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiBhbiBhbmNlc3RvciBjb250YWlu
ZXIgb2YKLSAgICAgKiB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIGlzIHJlYWQtb25seS4KLSAgICAg
KgotICAgICAqICBXUk9OR19ET0NVTUVOVF9FUlI6IFJhaXNlZCBpZiA8Y29kZT4gbmV3Tm9kZSA8
L2NvZGU+IGFuZCB0aGUKLSAgICAgKiBjb250YWluZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBSYW5n
ZSB3ZXJlIG5vdCBjcmVhdGVkIGZyb20gdGhlCi0gICAgICogc2FtZSBkb2N1bWVudC4KLSAgICAg
KgotICAgICAqICBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNlZCBpZiB0aGUgY29udGFpbmVy
IG9mIHRoZSBzdGFydCBvZgotICAgICAqIHRoZSBSYW5nZSBpcyBvZiBhIHR5cGUgdGhhdCBkb2Vz
IG5vdCBhbGxvdyBjaGlsZHJlbiBvZiB0aGUgdHlwZQotICAgICAqIG9mIDxjb2RlPiBuZXdOb2Rl
IDwvY29kZT4gb3IgaWYgPGNvZGU+IG5ld05vZGUgPC9jb2RlPiBpcyBhbgotICAgICAqIGFuY2Vz
dG9yIG9mIHRoZSBjb250YWluZXIgLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBSYW5nZUV4
Y2VwdGlvbgotICAgICAqIElOVkFMSURfTk9ERV9UWVBFX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBu
b2RlIDwvY29kZT4gaXMgYW4KLSAgICAgKiBBdHRyLCBFbnRpdHksIE5vdGF0aW9uLCBEb2N1bWVu
dEZyYWdtZW50LCBvciBEb2N1bWVudCBub2RlLgotICAgICAqCi0gICAgICovCi0gICAgdm9pZCBp
bnNlcnROb2RlICggY29uc3QgTm9kZSAmbmV3Tm9kZSApOwotCi0gICAgLyoqCi0gICAgICogUmVw
YXJlbnRzIHRoZSBjb250ZW50cyBvZiB0aGUgcmFuZ2UgdG8gdGhlIGdpdmVuIG5vZGUgYW5kCi0g
ICAgICogaW5zZXJ0cyB0aGUgbm9kZSBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHRo
ZSByYW5nZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuZXdQYXJlbnQgVGhlIG5vZGUgdG8gc3Vy
cm91bmQgdGhlIGNvbnRlbnRzIHdpdGguCi0gICAgICoKLSAgICAgKiBAcmV0dXJuCi0gICAgICoK
LSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5PX01PRElGSUNBVElPTl9B
TExPV0VEX0VSUjogUmFpc2VkIGlmIGFuIGFuY2VzdG9yIGNvbnRhaW5lciBvZgotICAgICAqIGVp
dGhlciBlbmQtcG9pbnQgb2YgdGhlIHJhbmdlIGlzIHJlYWQtb25seS4KLSAgICAgKgotICAgICAq
ICBXUk9OR19ET0NVTUVOVF9FUlI6IFJhaXNlZCBpZiA8Y29kZT4gbmV3UGFyZW50IDwvY29kZT4g
YW5kIHRoZQotICAgICAqIGNvbnRhaW5lciBvZiB0aGUgc3RhcnQgb2YgdGhlIFJhbmdlIHdlcmUg
bm90IGNyZWF0ZWQgZnJvbSB0aGUKLSAgICAgKiBzYW1lIGRvY3VtZW50LgotICAgICAqCi0gICAg
ICogIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2VkIGlmIHRoZSBjb250YWluZXIgb2YgdGhl
IHN0YXJ0IG9mCi0gICAgICogdGhlIFJhbmdlIGlzIG9mIGEgdHlwZSB0aGF0IGRvZXMgbm90IGFs
bG93IGNoaWxkcmVuIG9mIHRoZSB0eXBlCi0gICAgICogb2YgPGNvZGU+IG5ld1BhcmVudCA8L2Nv
ZGU+IG9yIGlmIDxjb2RlPiBuZXdQYXJlbnQgPC9jb2RlPiBpcwotICAgICAqIGFuIGFuY2VzdG9y
IG9mIHRoZSBjb250YWluZXIgb3IgaWYgPGNvZGU+IG5vZGUgPC9jb2RlPiB3b3VsZAotICAgICAq
IGVuZCB1cCB3aXRoIGEgY2hpbGQgbm9kZSBvZiBhIHR5cGUgbm90IGFsbG93ZWQgYnkgdGhlIHR5
cGUgb2YKLSAgICAgKiA8Y29kZT4gbm9kZSA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqIEBleGNl
cHRpb24gUmFuZ2VFeGNlcHRpb24KLSAgICAgKiBCQURfRU5EUE9JTlRTX0VSUjogUmFpc2VkIGlm
IHRoZSByYW5nZSBwYXJ0aWFsbHkgc2VsZWN0cyBhCi0gICAgICogbm9uLXRleHQgbm9kZS4KLSAg
ICAgKgotICAgICAqICBJTlZBTElEX05PREVfVFlQRV9FUlI6IFJhaXNlZCBpZiA8Y29kZT4gbm9k
ZSA8L2NvZGU+IGlzIGFuCi0gICAgICogQXR0ciwgRW50aXR5LCBEb2N1bWVudFR5cGUsIE5vdGF0
aW9uLCBEb2N1bWVudCwgb3IKLSAgICAgKiBEb2N1bWVudEZyYWdtZW50IG5vZGUuCi0gICAgICoK
LSAgICAgKi8KLSAgICB2b2lkIHN1cnJvdW5kQ29udGVudHMgKCBjb25zdCBOb2RlICZuZXdQYXJl
bnQgKTsKLQotICAgIC8qKgotICAgICAqIFByb2R1Y2VzIGEgbmV3IHJhbmdlIHdob3NlIGVuZC1w
b2ludHMgYXJlIGVxdWFsIHRvIHRoZQotICAgICAqIGVuZC1wb2ludHMgb2YgdGhlIHJhbmdlLgot
ICAgICAqCi0gICAgICogQHJldHVybiBUaGUgZHVwbGljYXRlZCByYW5nZS4KLSAgICAgKgotICAg
ICAqLwotICAgIFJhbmdlIGNsb25lUmFuZ2UgKCAgKTsKLQotICAgIC8qKgotICAgICAqIFJldHVy
bnMgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2UgYXMgYSBzdHJpbmcuCi0gICAgICoKLSAgICAgKiBA
cmV0dXJuIFRoZSBjb250ZW50cyBvZiB0aGUgcmFuZ2UuCi0gICAgICoKLSAgICAgKi8KLSAgICBE
T01TdHJpbmcgdG9TdHJpbmcgKCAgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwg
Tm90IHBhcnQgb2YgRE9NCi0gICAgICovCi0gICAgRE9NU3RyaW5nIHRvSFRNTCAoICApOwotCi0g
ICAgLyogTW96aWxsYSBleHRlbnNpb24gLSBvbmx5IHdvcmtzIGZvciBIVE1MIGRvY3VtZW50cy4g
Ki8KLSAgICBEb2N1bWVudEZyYWdtZW50IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCAoRE9NU3Ry
aW5nICZodG1sKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBDYWxsZWQgdG8gaW5kaWNhdGUgdGhh
dCB0aGUgcmFuZ2UgaXMgbm8gbG9uZ2VyIGluIHVzZSBhbmQgdGhhdAotICAgICAqIHRoZSBpbXBs
ZW1lbnRhdGlvbiBtYXkgcmVsaW5xdWlzaCBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aAot
ICAgICAqIHRoaXMgcmFuZ2UuIFN1YnNlcXVlbnQgY2FsbHMgdG8gYW55IG1ldGhvZHMgb3IgYXR0
cmlidXRlIGdldHRlcnMKLSAgICAgKiBvbiB0aGlzIHJhbmdlIHdpbGwgcmVzdWx0IGluIGEgRE9N
RXhjZXB0aW9uIGJlaW5nIHRocm93biB3aXRoIGFuCi0gICAgICogZXJyb3IgY29kZSBvZiBJTlZB
TElEX1NUQVRFX0VSUi4KLSAgICAgKgotICAgICAqLwotICAgIHZvaWQgZGV0YWNoICggICk7Ci0K
LSAgICAvKioKLSAgICAgKiBub3QgcGFydCBvZiB0aGUgRE9NCi0gICAgICogVFJVRSBpZiB0aGUg
cmFuZ2UgaXMgZGV0YWNoZWQKLSAgICAgKgotICAgICAqLwotICAgIGJvb2wgaXNEZXRhY2hlZCgp
IGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2Yg
dGhlIERPTQotICAgICAqLwotICAgIFJhbmdlKFJhbmdlSW1wbCAqaSk7Ci0gICAgUmFuZ2VJbXBs
ICpoYW5kbGUoKSBjb25zdDsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6
Ci0gICAgUmFuZ2VJbXBsICppbXBsOwotCi1wcml2YXRlOgotICAgIHZvaWQgdGhyb3dFeGNlcHRp
b24oaW50IGV4Y2VwdGlvbmNvZGUpIGNvbnN0OwotCi0jZW5kaWYKLQogfTsKIAogLy8gVXNlZCBk
ZXRlcm1pbmUgaG93IHRvIGludGVycHJldCB0aGUgb2Zmc2V0cyB1c2VkIGluIERPTSBSYW5nZXMu
CkluZGV4OiBraHRtbC9kb20vZG9tMl90cmF2ZXJzYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb20yX3RyYXZlcnNhbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNwpkaWZmIC1wIC11IC1yMS43IGtodG1sL2RvbS9kb20yX3RyYXZlcnNh
bC5jcHAKLS0tIGtodG1sL2RvbS9kb20yX3RyYXZlcnNhbC5jcHAJMyBPY3QgMjAwNSAyMToxMjox
MSAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9kb20yX3RyYXZlcnNhbC5jcHAJNCBEZWMgMjAwNSAx
MDoyNDozMSAtMDAwMApAQCAtMjMsMTQgKzIzLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJkb20vZG9tMl90cmF2ZXJzYWwuaCIKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNf
RE9NCi0KLSNpbmNsdWRlICJkb20vZG9tX2V4Y2VwdGlvbi5oIgotI2luY2x1ZGUgImRvbS9kb21f
c3RyaW5nLmgiCi0jaW5jbHVkZSAieG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5oIgotCi0jZW5kaWYK
LQogbmFtZXNwYWNlIERPTSB7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MSwzMTcgKzMzLDQgQEAgc2hvcnQg
Tm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShGaQogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWYg
IUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotTm9kZUZpbHRlcjo6Tm9kZUZpbHRlcigpIDogaW1w
bCgwKQotewotfQotCi1Ob2RlRmlsdGVyOjpOb2RlRmlsdGVyKE5vZGVGaWx0ZXJDb25kaXRpb24g
KmNvbmRpdGlvbikKLXsKLSAgICBpbXBsID0gbmV3IE5vZGVGaWx0ZXJJbXBsKGNvbmRpdGlvbik7
Ci0gICAgaW1wbC0+cmVmKCk7Ci19Ci0KLU5vZGVGaWx0ZXI6Ok5vZGVGaWx0ZXIoY29uc3QgTm9k
ZUZpbHRlciAmb3RoZXIpCi17Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYgKGltcGwp
IAotICAgICAgICBpbXBsLT5yZWYoKTsKLX0KLQotTm9kZUZpbHRlcjo6Tm9kZUZpbHRlcihOb2Rl
RmlsdGVySW1wbCAqaSkKLXsKLSAgICBpbXBsID0gaTsKLSAgICBpZiAoaW1wbCkKLSAgICAgICAg
aW1wbC0+cmVmKCk7Ci19Ci0KLU5vZGVGaWx0ZXIgJk5vZGVGaWx0ZXI6Om9wZXJhdG9yPShjb25z
dCBOb2RlRmlsdGVyICZvdGhlcikKLXsKLSAgICBpZiAoaW1wbCA9PSBvdGhlci5pbXBsKQotICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgCi0gICAgTm9kZUZpbHRlckltcGwgKm9sZCA9IGltcGw7
Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5y
ZWYoKTsKLSAgICBpZiAob2xkKSAKLSAgICAgICAgb2xkLT5kZXJlZigpOwotCi0gICAgcmV0dXJu
ICp0aGlzOwotfQotCi1Ob2RlRmlsdGVyOjp+Tm9kZUZpbHRlcigpCi17Ci0gICAgaWYgKGltcGwp
IAotICAgICAgICBpbXBsLT5kZXJlZigpOwotfQotCi1zaG9ydCBOb2RlRmlsdGVyOjphY2NlcHRO
b2RlKGNvbnN0IE5vZGUgJm5vZGUpIGNvbnN0Ci17Ci0gICAgaWYgKGltcGwpCi0gICAgICAgIHJl
dHVybiBpbXBsLT5hY2NlcHROb2RlKG5vZGUuaGFuZGxlKCkpOwotICAgIHJldHVybiBGSUxURVJf
QUNDRVBUOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ob2RlSXRlcmF0b3I6Ok5vZGVJdGVyYXRvcigpCi17
Ci0gICAgaW1wbCA9IDA7Ci19Ci0KLU5vZGVJdGVyYXRvcjo6Tm9kZUl0ZXJhdG9yKGNvbnN0IE5v
ZGVJdGVyYXRvciAmb3RoZXIpCi17Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYgKGlt
cGwpIAotICAgICAgICBpbXBsLT5yZWYoKTsKLX0KLQotTm9kZUl0ZXJhdG9yOjpOb2RlSXRlcmF0
b3IoTm9kZUl0ZXJhdG9ySW1wbCAqaSkKLXsKLSAgICBpbXBsID0gaTsKLSAgICBpZiAoaW1wbCkg
Ci0gICAgICAgIGltcGwtPnJlZigpOwotfQotCi1Ob2RlSXRlcmF0b3IgJk5vZGVJdGVyYXRvcjo6
b3BlcmF0b3I9KGNvbnN0IE5vZGVJdGVyYXRvciAmb3RoZXIpCi17Ci0gICAgaWYgKGltcGwgPT0g
b3RoZXIuaW1wbCkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIAotICAgIE5vZGVJdGVyYXRv
ckltcGwgKm9sZCA9IGltcGw7Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYgKGltcGwp
IAotICAgICAgICBpbXBsLT5yZWYoKTsKLSAgICBpZiAob2xkKSAKLSAgICAgICAgb2xkLT5kZXJl
ZigpOwotCi0gICAgcmV0dXJuICp0aGlzOwotfQotCi1Ob2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0
b3IoKQotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgaW1wbC0+ZGVyZWYoKTsKLX0KLQotTm9k
ZSBOb2RlSXRlcmF0b3I6OnJvb3QoKSBjb25zdAotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAg
cmV0dXJuIGltcGwtPnJvb3QoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgTm9kZUl0
ZXJhdG9yOjp3aGF0VG9TaG93KCkgY29uc3QKLXsKLSAgICBpZiAoaW1wbCkgCi0gICAgICAgIHJl
dHVybiBpbXBsLT53aGF0VG9TaG93KCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVGaWx0ZXIg
Tm9kZUl0ZXJhdG9yOjpmaWx0ZXIoKSBjb25zdAotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAg
cmV0dXJuIGltcGwtPmZpbHRlcigpOwotICAgIHJldHVybiBOb2RlRmlsdGVyKCk7Ci19Ci0KLWJv
b2wgTm9kZUl0ZXJhdG9yOjpleHBhbmRFbnRpdHlSZWZlcmVuY2VzKCkgY29uc3QKLXsKLSAgICBp
ZiAoaW1wbCkgCi0gICAgICAgIHJldHVybiBpbXBsLT5leHBhbmRFbnRpdHlSZWZlcmVuY2VzKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSgpCi17Ci0g
ICAgaWYgKCFpbXBsKQotICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJ
TlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgTm9k
ZUltcGwgKnJlc3VsdCA9IGltcGwtPm5leHROb2RlKGV4Y2VwdGlvbmNvZGUpOwotICAgIGlmIChl
eGNlcHRpb25jb2RlKQotICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oZXhjZXB0aW9uY29kZSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTm9kZSBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9k
ZSgpCi17Ci0gICAgaWYgKCFpbXBsKQotICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhj
ZXB0aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0KLSAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7
Ci0gICAgTm9kZUltcGwgKnJlc3VsdCA9IGltcGwtPnByZXZpb3VzTm9kZShleGNlcHRpb25jb2Rl
KTsKLSAgICBpZiAoZXhjZXB0aW9uY29kZSkKLSAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKGV4
Y2VwdGlvbmNvZGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgTm9kZUl0ZXJhdG9y
OjpkZXRhY2goKQotewotICAgIGlmICghaW1wbCkKLSAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9u
KERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9TVEFURV9FUlIpOwotCi0gICAgaW50IGV4Y2VwdGlvbmNv
ZGUgPSAwOwotICAgIGltcGwtPmRldGFjaChleGNlcHRpb25jb2RlKTsKLSAgICBpZiAoZXhjZXB0
aW9uY29kZSkKLSAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwotfQot
Ci1Ob2RlIE5vZGVJdGVyYXRvcjo6cmVmZXJlbmNlTm9kZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFp
bXBsKQotICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpJTlZBTElEX1NU
QVRFX0VSUik7Ci0gICAgICAgIAotICAgIHJldHVybiBpbXBsLT5yZWZlcmVuY2VOb2RlKCk7Ci19
Ci0KLWJvb2wgTm9kZUl0ZXJhdG9yOjpwb2ludGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFpbXBsKQotICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0
aW9uOjpJTlZBTElEX1NUQVRFX0VSUik7Ci0gICAgICAgIAotICAgIHJldHVybiBpbXBsLT5wb2lu
dGVyQmVmb3JlUmVmZXJlbmNlTm9kZSgpOwotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UcmVlV2Fsa2VyOjpU
cmVlV2Fsa2VyKCkKLXsKLSAgICBpbXBsID0gMDsKLX0KLQotVHJlZVdhbGtlcjo6VHJlZVdhbGtl
cihjb25zdCBUcmVlV2Fsa2VyICZvdGhlcikKLXsKLSAgICBpbXBsID0gb3RoZXIuaW1wbDsKLSAg
ICBpZiAoaW1wbCkgCi0gICAgICAgIGltcGwtPnJlZigpOwotfQotCi1UcmVlV2Fsa2VyOjpUcmVl
V2Fsa2VyKFRyZWVXYWxrZXJJbXBsICppKQotewotICAgIGltcGwgPSBpOwotICAgIGlmIChpbXBs
KSAKLSAgICAgICAgaW1wbC0+cmVmKCk7Ci19Ci0KLVRyZWVXYWxrZXIgJlRyZWVXYWxrZXI6Om9w
ZXJhdG9yPShjb25zdCBUcmVlV2Fsa2VyICZvdGhlcikKLXsKLSAgICBpZiAoaW1wbCA9PSBvdGhl
ci5pbXBsKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgCi0gICAgVHJlZVdhbGtlckltcGwg
Km9sZCA9IGltcGw7Ci0gICAgaW1wbCA9IG90aGVyLmltcGw7Ci0gICAgaWYgKGltcGwpIAotICAg
ICAgICBpbXBsLT5yZWYoKTsKLSAgICBpZiAob2xkKSAKLSAgICAgICAgb2xkLT5kZXJlZigpOwot
Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1UcmVlV2Fsa2VyOjp+VHJlZVdhbGtlcigpCi17Ci0g
ICAgaWYgKGltcGwpIAotICAgICAgICBpbXBsLT5kZXJlZigpOwotfQotCi1Ob2RlIFRyZWVXYWxr
ZXI6OnJvb3QoKSBjb25zdAotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwt
PnJvb3QoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgVHJlZVdhbGtlcjo6d2hhdFRv
U2hvdygpIGNvbnN0Ci17Ci0gICAgaWYgKGltcGwpIAotICAgICAgICByZXR1cm4gaW1wbC0+d2hh
dFRvU2hvdygpOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlRmlsdGVyIFRyZWVXYWxrZXI6OmZp
bHRlcigpIGNvbnN0Ci17Ci0gICAgaWYgKGltcGwpIAotICAgICAgICByZXR1cm4gaW1wbC0+Zmls
dGVyKCk7Ci0gICAgcmV0dXJuIE5vZGVGaWx0ZXIoKTsKLX0KLQotYm9vbCBUcmVlV2Fsa2VyOjpl
eHBhbmRFbnRpdHlSZWZlcmVuY2VzKCkgY29uc3QKLXsKLSAgICBpZiAoaW1wbCkgcmV0dXJuIGlt
cGwtPmV4cGFuZEVudGl0eVJlZmVyZW5jZXMoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU5v
ZGUgVHJlZVdhbGtlcjo6Y3VycmVudE5vZGUoKSBjb25zdAotewotICAgIGlmIChpbXBsKSAKLSAg
ICAgICAgcmV0dXJuIGltcGwtPmN1cnJlbnROb2RlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZv
aWQgVHJlZVdhbGtlcjo6c2V0Q3VycmVudE5vZGUoY29uc3QgTm9kZSAmbm9kZSkKLXsKLSAgICBp
ZiAoaW1wbCkgewotICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgIGltcGwt
PnNldEN1cnJlbnROb2RlKG5vZGUuaGFuZGxlKCksIGV4Y2VwdGlvbmNvZGUpOwotICAgICAgICBp
ZiAoZXhjZXB0aW9uY29kZSkKLSAgICAgICAgICAgIHRocm93IERPTUV4Y2VwdGlvbihleGNlcHRp
b25jb2RlKTsKLSAgICB9Ci19Ci0KLU5vZGUgVHJlZVdhbGtlcjo6cGFyZW50Tm9kZSgpCi17Ci0g
ICAgaWYgKGltcGwpIAotICAgICAgICByZXR1cm4gaW1wbC0+cGFyZW50Tm9kZSgpOwotICAgIHJl
dHVybiAwOwotfQotCi1Ob2RlIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoKQotewotICAgIGlmIChp
bXBsKSAKLSAgICAgICAgcmV0dXJuIGltcGwtPmZpcnN0Q2hpbGQoKTsKLSAgICByZXR1cm4gMDsK
LX0KLQotTm9kZSBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoKQotewotICAgIGlmIChpbXBsKSAKLSAg
ICAgICAgcmV0dXJuIGltcGwtPmxhc3RDaGlsZCgpOwotICAgIHJldHVybiAwOwotfQotCi1Ob2Rl
IFRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZygpCi17Ci0gICAgaWYgKGltcGwpIAotICAgICAg
ICByZXR1cm4gaW1wbC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5v
ZGUgVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoKQotewotICAgIGlmIChpbXBsKSAKLSAgICAgICAg
cmV0dXJuIGltcGwtPm5leHRTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgVHJl
ZVdhbGtlcjo6cHJldmlvdXNOb2RlKCkKLXsKLSAgICBpZiAoaW1wbCkgCi0gICAgICAgIHJldHVy
biBpbXBsLT5wcmV2aW91c05vZGUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSBUcmVlV2Fs
a2VyOjpuZXh0Tm9kZSgpCi17Ci0gICAgaWYgKGltcGwpIAotICAgICAgICByZXR1cm4gaW1wbC0+
bmV4dE5vZGUoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNl
IERPTQpJbmRleDoga2h0bWwvZG9tL2RvbTJfdHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbTJfdHJhdmVyc2FsLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNgpkaWZmIC1wIC11IC1yMS42IGtodG1sL2RvbS9kb20yX3RyYXZlcnNh
bC5oCi0tLSBraHRtbC9kb20vZG9tMl90cmF2ZXJzYWwuaAkxNiBTZXAgMjAwNSAyMjo0MjowMyAt
MDAwMAkxLjYKKysrIGtodG1sL2RvbS9kb20yX3RyYXZlcnNhbC5oCTQgRGVjIDIwMDUgMTA6MjQ6
MzEgLTAwMDAKQEAgLTI5LDEyICsyOSw2IEBACiAKICNpbmNsdWRlIDxkb20vZG9tX21pc2MuaD4K
IAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSNpbmNsdWRlIDxkb20vZG9tX25vZGUu
aD4KLQotI2VuZGlmCi0KIG5hbWVzcGFjZSBET00gewogCiBjbGFzcyBOb2RlSW1wbDsKQEAgLTQy
LDE1ICszNiw4IEBAIGNsYXNzIE5vZGVGaWx0ZXJJbXBsOwogY2xhc3MgTm9kZUl0ZXJhdG9ySW1w
bDsKIGNsYXNzIFRyZWVXYWxrZXJJbXBsOwogCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00K
LQotdHlwZWRlZiBjb25zdCBOb2RlICZGaWx0ZXJOb2RlOwotCi0jZWxzZQotCiB0eXBlZGVmIE5v
ZGVJbXBsICpGaWx0ZXJOb2RlOwogCi0jZW5kaWYKIAogY2xhc3MgTm9kZUZpbHRlckNvbmRpdGlv
biA6IHB1YmxpYyBEb21TaGFyZWQKIHsKQEAgLTg1LDE3ICs3Miw2IEBAIGNsYXNzIE5vZGVGaWx0
ZXIKIHsKIHB1YmxpYzoKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICBOb2Rl
RmlsdGVyKCk7Ci0gICAgTm9kZUZpbHRlcihOb2RlRmlsdGVyQ29uZGl0aW9uICopOwotICAgIE5v
ZGVGaWx0ZXIoTm9kZUZpbHRlckltcGwgKik7Ci0gICAgTm9kZUZpbHRlcihjb25zdCBOb2RlRmls
dGVyICZvdGhlcik7Ci0gICAgTm9kZUZpbHRlciAmb3BlcmF0b3I9KGNvbnN0IE5vZGVGaWx0ZXIg
Jm90aGVyKTsKLSAgICB+Tm9kZUZpbHRlcigpOwotCi0jZW5kaWYKLQogICAgIC8qKgogICAgICAq
IFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZXR1cm5lZCBieSB0aGUgYWNjZXB0Tm9kZSgp
CiAgICAgICogbWV0aG9kOgpAQCAtMTI5LDQ1MyArMTA1LDcgQEAgcHVibGljOgogICAgICAgICBT
SE9XX0RPQ1VNRU5UX0ZSQUdNRU5UICAgICAgICAgPSAweDAwMDAwNDAwLAogICAgICAgICBTSE9X
X05PVEFUSU9OICAgICAgICAgICAgICAgICAgPSAweDAwMDAwODAwCiAgICAgfTsKLQotI2lmICFL
SFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICAvKioKLSAgICAgKiBUZXN0IHdoZXRoZXIgYSBz
cGVjaWZpZWQgbm9kZSBpcyB2aXNpYmxlIGluIHRoZSBsb2dpY2FsIHZpZXcgb2YKLSAgICAgKiBh
IFRyZWVXYWxrZXIgb3IgTm9kZUl0ZXJhdG9yLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVk
IGJ5Ci0gICAgICogdGhlIGltcGxlbWVudGF0aW9uIG9mIFRyZWVXYWxrZXIgYW5kIE5vZGVJdGVy
YXRvcjsgaXQgaXMgbm90Ci0gICAgICogaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGZy
b20gdXNlciBjb2RlLgotICAgICAqCi0gICAgICogQHBhcmFtIG4gVGhlIG5vZGUgdG8gY2hlY2sg
dG8gc2VlIGlmIGl0IHBhc3NlcyB0aGUgZmlsdGVyIG9yCi0gICAgICogbm90LgotICAgICAqCi0g
ICAgICogQHJldHVybiBhIGNvbnN0YW50IHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBub2RlIGlz
IGFjY2VwdGVkLAotICAgICAqIHJlamVjdGVkLCBvciBza2lwcGVkLCBhcyBkZWZpbmVkIDxhCi0g
ICAgICogaHJlZj0iI1RyYXZlcnNhbC1Ob2RlRmlsdGVyLWFjY2VwdE5vZGUtY29uc3RhbnRzIj4g
YWJvdmUgPC9hPiAuCi0gICAgICoKLSAgICAgKi8KLSAgICBzaG9ydCBhY2NlcHROb2RlKGNvbnN0
IE5vZGUgJikgY29uc3Q7Ci0KLSAgICBOb2RlRmlsdGVySW1wbCAqaGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gaW1wbDsgfQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gaW1wbCA9PSAw
OyB9Ci0KLXByaXZhdGU6Ci0gICAgTm9kZUZpbHRlckltcGwgKmltcGw7Ci0KLSNlbmRpZgotCi19
OwotCi0jaWYgIUtIVE1MX05PX0NQTFVTUExVU19ET00KLQotLyoqCi0gKiBOb2RlSXRlcmF0b3Jz
IGFyZSB1c2VkIHRvIHN0ZXAgdGhyb3VnaCBhIHNldCBvZiBub2RlcywgZS5nLiB0aGUgc2V0Ci0g
KiBvZiBub2RlcyBpbiBhIE5vZGVMaXN0LCB0aGUgZG9jdW1lbnQgc3VidHJlZSBnb3Zlcm5lZCBi
eSBhCi0gKiBwYXJ0aWN1bGFyIG5vZGUsIHRoZSByZXN1bHRzIG9mIGEgcXVlcnksIG9yIGFueSBv
dGhlciBzZXQgb2Ygbm9kZXMuCi0gKiBUaGUgc2V0IG9mIG5vZGVzIHRvIGJlIGl0ZXJhdGVkIGlz
IGRldGVybWluZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uCi0gKiBvZiB0aGUgTm9kZUl0ZXJhdG9y
LiBET00gTGV2ZWwgMiBzcGVjaWZpZXMgYSBzaW5nbGUgTm9kZUl0ZXJhdG9yCi0gKiBpbXBsZW1l
bnRhdGlvbiBmb3IgZG9jdW1lbnQtb3JkZXIgdHJhdmVyc2FsIG9mIGEgZG9jdW1lbnQgc3VidHJl
ZS4KLSAqIEluc3RhbmNlcyBvZiB0aGVzZSBpdGVyYXRvcnMgYXJlIGNyZWF0ZWQgYnkgY2FsbGlu
ZwotICogRG9jdW1lbnRUcmF2ZXJzYWwuY3JlYXRlTm9kZUl0ZXJhdG9yKCkuCi0gKgotICogIEFu
eSBJdGVyYXRvciB0aGF0IHJldHVybnMgbm9kZXMgbWF5IGltcGxlbWVudCB0aGUKLSAqIE5vZGVJ
dGVyYXRvciBpbnRlcmZhY2UuIFVzZXJzIGFuZCB2ZW5kb3IgbGlicmFyaWVzIG1heSBhbHNvCi0g
KiBjaG9vc2UgdG8gY3JlYXRlIEl0ZXJhdG9ycyB0aGF0IGltcGxlbWVudCB0aGUgTm9kZUl0ZXJh
dG9yCi0gKiBpbnRlcmZhY2UuCi0gKgotICovCi1jbGFzcyBOb2RlSXRlcmF0b3IKLXsKLXB1Ymxp
YzoKLSAgICBOb2RlSXRlcmF0b3IoY29uc3QgTm9kZUl0ZXJhdG9yICZvdGhlcik7Ci0gICAgTm9k
ZUl0ZXJhdG9yICZvcGVyYXRvcj0oY29uc3QgTm9kZUl0ZXJhdG9yICZvdGhlcik7Ci0KLSAgICB+
Tm9kZUl0ZXJhdG9yKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgcm9vdCBub2RlIG9mIHRoZSBO
b2RlSXRlcmF0b3IsIGFzIHNwZWNpZmllZCB3aGVuIGl0IHdhcyBjcmVhdGVkLgotICAgICAqLwot
ICAgIE5vZGUgcm9vdCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgKiBUaGlzIGF0dHJpYnV0ZSBk
ZXRlcm1pbmVzIHdoaWNoIG5vZGUgdHlwZXMgYXJlIHByZXNlbnRlZCB2aWEgdGhlCi0gICAgKiBp
dGVyYXRvci4gVGhlIGF2YWlsYWJsZSBzZXQgb2YgY29uc3RhbnRzIGlzIGRlZmluZWQgaW4gdGhl
IE5vZGVGaWx0ZXIKLSAgICAqIGludGVyZmFjZS4gTm9kZXMgbm90IGFjY2VwdGVkIGJ5IHdoYXRU
b1Nob3cgd2lsbCBiZSBza2lwcGVkLCBidXQgdGhlaXIKLSAgICAqIGNoaWxkcmVuIG1heSBzdGls
bCBiZSBjb25zaWRlcmVkLiBOb3RlIHRoYXQgdGhpcyBza2lwIHRha2VzIHByZWNlZGVuY2UKLSAg
ICAqIG92ZXIgdGhlIGZpbHRlciwgaWYgYW55LgotICAgICovCi0gICAgdW5zaWduZWQgd2hhdFRv
U2hvdygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVGhlIE5vZGVGaWx0ZXIgdXNlZCB0byBz
Y3JlZW4gbm9kZXMuCi0gICAgICovCi0gICAgTm9kZUZpbHRlciBmaWx0ZXIoKSBjb25zdDsKLQot
ICAgIC8qKgotICAgICAqIFRoZSB2YWx1ZSBvZiB0aGlzIGZsYWcgZGV0ZXJtaW5lcyB3aGV0aGVy
IHRoZSBjaGlsZHJlbiBvZiBlbnRpdHkKLSAgICAgKiByZWZlcmVuY2Ugbm9kZXMgYXJlIHZpc2li
bGUgdG8gdGhlIGl0ZXJhdG9yLiBJZiBmYWxzZSwgdGhleSBhbmQKLSAgICAgKiB0aGVpciBkZXNj
ZW5kZW50cyB3aWxsIGJlIHJlamVjdGVkLiBOb3RlIHRoYXQgdGhpcyByZWplY3Rpb24gdGFrZXMK
LSAgICAgKiBwcmVjZWRlbmNlIG92ZXIgd2hhdFRvU2hvdyBhbmQgdGhlIGZpbHRlci4gQWxzbyBu
b3RlIHRoYXQgdGhpcyBpcwotICAgICAqIGN1cnJlbnRseSB0aGUgb25seSBzaXR1YXRpb24gd2hl
cmUgTm9kZUl0ZXJhdG9ycyBtYXkgcmVqZWN0IGEgY29tcGxldGUKLSAgICAgKiBzdWJ0cmVlIHJh
dGhlciB0aGFuIHNraXBwaW5nIGluZGl2aWR1YWwgbm9kZXMuCi0gICAgICoKLSAgICAgKiBUbyBw
cm9kdWNlIGEgdmlldyBvZiB0aGUgZG9jdW1lbnQgdGhhdCBoYXMgZW50aXR5IHJlZmVyZW5jZXMg
ZXhwYW5kZWQKLSAgICAgKiBhbmQgZG9lcyBub3QgZXhwb3NlIHRoZSBlbnRpdHkgcmVmZXJlbmNl
IG5vZGUgaXRzZWxmLCB1c2UgdGhlIHdoYXRUb1Nob3cKLSAgICAgKiBmbGFncyB0byBoaWRlIHRo
ZSBlbnRpdHkgcmVmZXJlbmNlIG5vZGUgYW5kIHNldCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzIHRv
Ci0gICAgICogdHJ1ZSB3aGVuIGNyZWF0aW5nIHRoZSBpdGVyYXRvci4gVG8gcHJvZHVjZSBhIHZp
ZXcgb2YgdGhlIGRvY3VtZW50IHRoYXQKLSAgICAgKiBoYXMgZW50aXR5IHJlZmVyZW5jZSBub2Rl
cyBidXQgbm8gZW50aXR5IGV4cGFuc2lvbiwgdXNlIHRoZSB3aGF0VG9TaG93Ci0gICAgICogZmxh
Z3MgdG8gc2hvdyB0aGUgZW50aXR5IHJlZmVyZW5jZSBub2RlIGFuZCBzZXQgZXhwYW5kRW50aXR5
UmVmZXJlbmNlcyB0bwotICAgICAqIGZhbHNlLgotICAgICAqLwotICAgIGJvb2wgZXhwYW5kRW50
aXR5UmVmZXJlbmNlcygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmV4
dCBub2RlIGluIHRoZSBzZXQgYW5kIGFkdmFuY2VzIHRoZSBwb3NpdGlvbiBvZgotICAgICAqIHRo
ZSBJdGVyYXRvciBpbiB0aGUgc2V0LiBBZnRlciBhIE5vZGVJdGVyYXRvciBpcyBjcmVhdGVkLCB0
aGUKLSAgICAgKiBmaXJzdCBjYWxsIHRvIG5leHROb2RlKCkgcmV0dXJucyB0aGUgZmlyc3Qgbm9k
ZSBpbiB0aGUgc2V0LgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbmV4dCBOb2RlIGluIHRo
ZSBzZXQgYmVpbmcgaXRlcmF0ZWQKLSAgICAgKiBvdmVyLCBvciBudWxsIGlmIHRoZXJlIGFyZSBu
byBtb3JlIG1lbWJlcnMgaW4KLSAgICAgKiB0aGF0IHNldC4KLSAgICAgKgotICAgICAqIEBleGNl
cHRpb24gRXhjZXB0aW9ucyBmcm9tIHVzZXIgY29kZQotICAgICAqIEFueSBleGNlcHRpb25zIHJh
aXNlZCBieSBhIHVzZXItd3JpdHRlbiBGaWx0ZXIgd2lsbCBwcm9wYWdhdGUKLSAgICAgKiB0aHJv
dWdoLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBuZXh0Tm9kZSgpOwotCi0gICAgLyoqCi0g
ICAgICogUmV0dXJucyB0aGUgcHJldmlvdXMgbm9kZSBpbiB0aGUgc2V0IGFuZCBtb3ZlcyB0aGUg
cG9zaXRpb24gb2YKLSAgICAgKiB0aGUgSXRlcmF0b3IgYmFja3dhcmRzIGluIHRoZSBzZXQuCi0g
ICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBwcmV2aW91cyBOb2RlIGluIHRoZSBzZXQgYmVpbmcK
LSAgICAgKiBpdGVyYXRlZCBvdmVyLCBvciBudWxsIGlmIHRoZXJlIGFyZSBubyBtb3JlCi0gICAg
ICogbWVtYmVycyBpbiB0aGF0IHNldC4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRXhjZXB0
aW9ucyBmcm9tIHVzZXIgY29kZQotICAgICAqIEFueSBleGNlcHRpb25zIHJhaXNlZCBieSBhIHVz
ZXItd3JpdHRlbiBGaWx0ZXIgd2lsbCBwcm9wYWdhdGUKLSAgICAgKiB0aHJvdWdoLgotICAgICAq
Ci0gICAgICovCi0gICAgTm9kZSBwcmV2aW91c05vZGUoKTsKLQotICAgIC8qKgotICAgICAqIERl
dGFjaGVzIHRoZSBOb2RlSXRlcmF0b3IgZnJvbSB0aGUgc2V0IHdoaWNoIGl0IGl0ZXJhdGVkIG92
ZXIsCi0gICAgICogcmVsZWFzaW5nIGFueSBjb21wdXRhdGlvbmFsIHJlc291cmNlcyBhbmQgcGxh
Y2luZyB0aGUgaXRlcmF0b3IgaW4gdGhlCi0gICAgICogSU5WQUxJRCBzdGF0ZS4gQWZ0ZXIgZGV0
YWNoIGhhcyBiZWVuIGludm9rZWQsIGNhbGxzIHRvIG5leHROb2RlIG9yCi0gICAgICogcHJldmlv
dXNOb2RlIHdpbGwgcmFpc2UgdGhlIGV4Y2VwdGlvbiBJTlZBTElEX1NUQVRFX0VSUi4KLSAgICAg
Ki8KLSAgICB2b2lkIGRldGFjaCgpOwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAg
ICogbm90IHBhcnQgb2YgdGhlIERPTQotICAgICAqLwotICAgIE5vZGUgcmVmZXJlbmNlTm9kZSgp
IGNvbnN0OwotICAgIGJvb2wgcG9pbnRlckJlZm9yZVJlZmVyZW5jZU5vZGUoKSBjb25zdDsKLSAg
ICBOb2RlSXRlcmF0b3JJbXBsICpoYW5kbGUoKSBjb25zdCB7IHJldHVybiBpbXBsOyB9Ci0gICAg
Ym9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBpbXBsID09IDA7IH0KLQotICAgIGZyaWVuZCBj
bGFzcyBOb2RlSXRlcmF0b3JJbXBsOwotICAgIGZyaWVuZCBjbGFzcyBEb2N1bWVudDsKLQotICAg
IE5vZGVJdGVyYXRvcihOb2RlSXRlcmF0b3JJbXBsICopOwotCi1wcml2YXRlOgotICAgIE5vZGVJ
dGVyYXRvcigpOwotICAgIE5vZGVJdGVyYXRvckltcGwgKmltcGw7Ci19OwotCi0KLS8qKgotICog
VHJlZVdhbGtlciBvYmplY3RzIGFyZSB1c2VkIHRvIG5hdmlnYXRlIGEgZG9jdW1lbnQKLSAqIHRy
ZWUgb3Igc3VidHJlZSB1c2luZyB0aGUgdmlldyBvZiB0aGUgZG9jdW1lbnQgZGVmaW5lZCBieSBp
dHMKLSAqIHdoYXRUb1Nob3cgZmxhZ3MgYW5kIGFueSBmaWx0ZXJzIHRoYXQgYXJlIGRlZmluZWQK
LSAqIGZvciB0aGUgVHJlZVdhbGtlciAuIEFueSBmdW5jdGlvbiB3aGljaCBwZXJmb3JtcwotICog
bmF2aWdhdGlvbiB1c2luZyBhIFRyZWVXYWxrZXIgd2lsbCBhdXRvbWF0aWNhbGx5Ci0gKiBzdXBw
b3J0IGFueSB2aWV3IGRlZmluZWQgYnkgYSBUcmVlV2Fsa2VyIC4KLSAqCi0gKiAgT21pdHRpbmcg
bm9kZXMgZnJvbSB0aGUgbG9naWNhbCB2aWV3IG9mIGEgc3VidHJlZSBjYW4gcmVzdWx0IGluIGEK
LSAqIHN0cnVjdHVyZSB0aGF0IGlzIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IGZyb20gdGhlIHNh
bWUgc3VidHJlZSBpbgotICogdGhlIGNvbXBsZXRlLCB1bmZpbHRlcmVkIGRvY3VtZW50LiBOb2Rl
cyB0aGF0IGFyZSBzaWJsaW5ncyBpbiB0aGUKLSAqIFRyZWVXYWxrZXIgdmlldyBtYXkgYmUgY2hp
bGRyZW4gb2YgZGlmZmVyZW50LCB3aWRlbHkgc2VwYXJhdGVkCi0gKiBub2RlcyBpbiB0aGUgb3Jp
Z2luYWwgdmlldy4gRm9yIGluc3RhbmNlLCBjb25zaWRlciBhIEZpbHRlciB0aGF0Ci0gKiBza2lw
cyBhbGwgbm9kZXMgZXhjZXB0IGZvciBUZXh0IG5vZGVzIGFuZCB0aGUgcm9vdCBub2RlIG9mIGEK
LSAqIGRvY3VtZW50LiBJbiB0aGUgbG9naWNhbCB2aWV3IHRoYXQgcmVzdWx0cywgYWxsIHRleHQg
bm9kZXMgd2lsbCBiZQotICogc2libGluZ3MgYW5kIGFwcGVhciBhcyBkaXJlY3QgY2hpbGRyZW4g
b2YgdGhlIHJvb3Qgbm9kZSwgbm8gbWF0dGVyCi0gKiBob3cgZGVlcGx5IG5lc3RlZCB0aGUgc3Ry
dWN0dXJlIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudC4KLSAqCi0gKi8KLWNsYXNzIFRyZWVXYWxr
ZXIKLXsKLXB1YmxpYzoKLSAgICBUcmVlV2Fsa2VyKGNvbnN0IFRyZWVXYWxrZXIgJm90aGVyKTsK
LSAgICBUcmVlV2Fsa2VyICZvcGVyYXRvcj0oY29uc3QgVHJlZVdhbGtlciAmb3RoZXIpOwotICAg
IH5UcmVlV2Fsa2VyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgcm9vdCBub2RlIG9mIHRoZSBU
cmVlV2Fsa2VyLCBhcyBzcGVjaWZpZWQgd2hlbiBpdCB3YXMgY3JlYXRlZC4KLSAgICAgKi8KLSAg
ICBOb2RlIHJvb3QoKSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFRoaXMgYXR0cmlidXRlIGRl
dGVybWluZXMgd2hpY2ggbm9kZSB0eXBlcyBhcmUgcHJlc2VudGVkIHZpYSB0aGUKLSAgICAgKiBU
cmVlV2Fsa2VyLiBUaGUgYXZhaWxhYmxlIHNldCBvZiBjb25zdGFudHMgaXMgZGVmaW5lZCBpbiB0
aGUgTm9kZUZpbHRlcgotICAgICAqIGludGVyZmFjZS4gTm9kZXMgbm90IGFjY2VwdGVkIGJ5IHdo
YXRUb1Nob3cgd2lsbCBiZSBza2lwcGVkLCBidXQgdGhlaXIKLSAgICAgKiBjaGlsZHJlbiBtYXkg
c3RpbGwgYmUgY29uc2lkZXJlZC4gTm90ZSB0aGF0IHRoaXMgc2tpcCB0YWtlcyBwcmVjZWRlbmNl
Ci0gICAgICogb3ZlciB0aGUgZmlsdGVyLCBpZiBhbnkuCi0gICAgICovCi0gICAgdW5zaWduZWQg
d2hhdFRvU2hvdygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVGhlIGZpbHRlciB1c2VkIHRv
IHNjcmVlbiBub2Rlcy4KLSAgICAgKi8KLSAgICBOb2RlRmlsdGVyIGZpbHRlcigpIGNvbnN0Owot
Ci0gICAgLyoqCi0gICAgICogVGhlIHZhbHVlIG9mIHRoaXMgZmxhZyBkZXRlcm1pbmVzIHdoZXRo
ZXIgdGhlIGNoaWxkcmVuIG9mIGVudGl0eQotICAgICAqIHJlZmVyZW5jZSBub2RlcyBhcmUgdmlz
aWJsZSB0byB0aGUgVHJlZVdhbGtlci4gSWYgZmFsc2UsIHRoZXkgYW5kIHRoZWlyCi0gICAgICog
ZGVzY2VuZGVudHMgd2lsbCBiZSByZWplY3RlZC4gTm90ZSB0aGF0IHRoaXMgcmVqZWN0aW9uIHRh
a2VzIHByZWNlZGVuY2UKLSAgICAgKiBvdmVyIHdoYXRUb1Nob3cgYW5kIHRoZSBmaWx0ZXIsIGlm
IGFueS4KLSAgICAgKgotICAgICAqIFRvIHByb2R1Y2UgYSB2aWV3IG9mIHRoZSBkb2N1bWVudCB0
aGF0IGhhcyBlbnRpdHkgcmVmZXJlbmNlcyBleHBhbmRlZAotICAgICAqIGFuZCBkb2VzIG5vdCBl
eHBvc2UgdGhlIGVudGl0eSByZWZlcmVuY2Ugbm9kZSBpdHNlbGYsIHVzZSB0aGUgd2hhdFRvU2hv
dwotICAgICAqIGZsYWdzIHRvIGhpZGUgdGhlIGVudGl0eSByZWZlcmVuY2Ugbm9kZSBhbmQgc2V0
IGV4cGFuZEVudGl0eVJlZmVyZW5jZXMKLSAgICAgKiB0byB0cnVlIHdoZW4gY3JlYXRpbmcgdGhl
IFRyZWVXYWxrZXIuIFRvIHByb2R1Y2UgYSB2aWV3IG9mIHRoZSBkb2N1bWVudAotICAgICAqIHRo
YXQgaGFzIGVudGl0eSByZWZlcmVuY2Ugbm9kZXMgYnV0IG5vIGVudGl0eSBleHBhbnNpb24sIHVz
ZSB0aGUKLSAgICAgKiB3aGF0VG9TaG93IGZsYWdzIHRvIHNob3cgdGhlIGVudGl0eSByZWZlcmVu
Y2Ugbm9kZSBhbmQgc2V0Ci0gICAgICogZXhwYW5kRW50aXR5UmVmZXJlbmNlcyB0byBmYWxzZS4K
LSAgICAgKi8KLSAgICBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMoKSBjb25zdDsKLQotICAg
IC8qKgotICAgICAqIFRoZSBub2RlIGF0IHdoaWNoIHRoZSBUcmVlV2Fsa2VyIGlzIGN1cnJlbnRs
eSBwb3NpdGlvbmVkLgotICAgICAqIEFsdGVyYXRpb25zIHRvIHRoZSBET00gdHJlZSBtYXkgY2F1
c2UgdGhlIGN1cnJlbnQgbm9kZSB0byBubyBsb25nZXIgYmUKLSAgICAgKiBhY2NlcHRlZCBieSB0
aGUgVHJlZVdhbGtlcidzIGFzc29jaWF0ZWQgZmlsdGVyLiBjdXJyZW50Tm9kZSBtYXkgYWxzbyBi
ZQotICAgICAqIGV4cGxpY2l0bHkgc2V0IHRvIGFueSBub2RlLCB3aGV0aGVyIG9yIG5vdCBpdCBp
cyB3aXRoaW4gdGhlIHN1YnRyZWUKLSAgICAgKiBzcGVjaWZpZWQgYnkgdGhlIHJvb3Qgbm9kZSBv
ciB3b3VsZCBiZSBhY2NlcHRlZCBieSB0aGUgZmlsdGVyIGFuZAotICAgICAqIHdoYXRUb1Nob3cg
ZmxhZ3MuIEZ1cnRoZXIgdHJhdmVyc2FsIG9jY3VycyByZWxhdGl2ZSB0byBjdXJyZW50Tm9kZSBl
dmVuCi0gICAgICogaWYgaXQgaXMgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgdmlldywgYnkgYXBw
bHlpbmcgdGhlIGZpbHRlcnMgaW4gdGhlCi0gICAgICogcmVxdWVzdGVkIGRpcmVjdGlvbjsgaWYg
bm8gdHJhdmVyc2FsIGlzIHBvc3NpYmxlLCBjdXJyZW50Tm9kZSBpcyBub3QgY2hhbmdlZC4KLSAg
ICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogTk9UX1NVUFBPUlRF
RF9FUlI6IFJhaXNlZCBpZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gc2V0IGN1cnJlbnROb2RlIHRv
IG51bGwuCi0gICAgICovCi0gICAgTm9kZSBjdXJyZW50Tm9kZSgpIGNvbnN0OwotCi0gICAgLyoq
Ci0gICAgICogc2VlIGN1cnJlbnROb2RlCi0gICAgICovCi0gICAgdm9pZCBzZXRDdXJyZW50Tm9k
ZShjb25zdCBOb2RlICZfY3VycmVudE5vZGUpOwotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdG8g
YW5kIHJldHVybnMgdGhlIHBhcmVudCBub2RlIG9mIHRoZSBjdXJyZW50IG5vZGUuIElmCi0gICAg
ICogdGhlcmUgaXMgbm8gcGFyZW50IG5vZGUsIG9yIGlmIHRoZSBjdXJyZW50IG5vZGUgaXMgdGhl
IHJvb3QKLSAgICAgKiBub2RlIGZyb20gd2hpY2ggdGhpcyBUcmVlV2Fsa2VyIHdhcyBjcmVhdGVk
LCByZXRhaW5zIHRoZQotICAgICAqIGN1cnJlbnQgcG9zaXRpb24gYW5kIHJldHVybnMgbnVsbC4K
LSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBwYXJlbnQgbm9kZSwgb3IgbnVsbCBpZiB0
aGUgY3VycmVudCBub2RlIGhhcyBubwotICAgICAqIHBhcmVudCBpbiB0aGUgVHJlZVdhbGtlcidz
IGxvZ2ljYWwgdmlldy4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRXhjZXB0aW9ucyBmcm9t
IHVzZXIgY29kZQotICAgICAqIEFueSBleGNlcHRpb25zIHJhaXNlZCBieSBhIHVzZXItd3JpdHRl
biBGaWx0ZXIgd2lsbCBwcm9wYWdhdGUKLSAgICAgKiB0aHJvdWdoLgotICAgICAqCi0gICAgICov
Ci0gICAgTm9kZSBwYXJlbnROb2RlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgVHJl
ZVdhbGtlciB0byB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlCi0gICAgICogY3VycmVudCBub2RlLCBh
bmQgcmV0dXJucyB0aGUgbmV3IG5vZGUuIElmIHRoZSBjdXJyZW50IG5vZGUgaGFzCi0gICAgICog
bm8gY2hpbGRyZW4sIHJldHVybnMgbnVsbCAsIGFuZCByZXRhaW5zIHRoZQotICAgICAqIGN1cnJl
bnQgbm9kZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBub2RlLCBvciBudWxsIGlm
IHRoZSBjdXJyZW50Ci0gICAgICogbm9kZSBoYXMgbm8gY2hpbGRyZW4uCi0gICAgICoKLSAgICAg
KiBAZXhjZXB0aW9uIEV4Y2VwdGlvbnMgZnJvbSB1c2VyIGNvZGUKLSAgICAgKiBBbnkgZXhjZXB0
aW9ucyByYWlzZWQgYnkgYSB1c2VyLXdyaXR0ZW4gRmlsdGVyIHdpbGwgcHJvcGFnYXRlCi0gICAg
ICogdGhyb3VnaC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgZmlyc3RDaGlsZCgpOwotCi0g
ICAgLyoqCi0gICAgICogTW92ZXMgdGhlIFRyZWVXYWxrZXIgdG8gdGhlIGxhc3QgY2hpbGQgb2Yg
dGhlCi0gICAgICogY3VycmVudCBub2RlLCBhbmQgcmV0dXJucyB0aGUgbmV3IG5vZGUuIElmIHRo
ZSBjdXJyZW50IG5vZGUgaGFzCi0gICAgICogbm8gY2hpbGRyZW4sIHJldHVybnMgbnVsbCAsIGFu
ZCByZXRhaW5zIHRoZQotICAgICAqIGN1cnJlbnQgbm9kZS4KLSAgICAgKgotICAgICAqIEByZXR1
cm4gVGhlIG5ldyBub2RlLCBvciBudWxsIGlmIHRoZSBjdXJyZW50Ci0gICAgICogbm9kZSBoYXMg
bm8gY2hpbGRyZW4uCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbnMgZnJvbSB1
c2VyIGNvZGUKLSAgICAgKiBBbnkgZXhjZXB0aW9ucyByYWlzZWQgYnkgYSB1c2VyLXdyaXR0ZW4g
RmlsdGVyIHdpbGwgcHJvcGFnYXRlCi0gICAgICogdGhyb3VnaC4KLSAgICAgKgotICAgICAqLwot
ICAgIE5vZGUgbGFzdENoaWxkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgVHJlZVdh
bGtlciB0byB0aGUgcHJldmlvdXMgc2libGluZyBvZgotICAgICAqIHRoZSBjdXJyZW50IG5vZGUs
IGFuZCByZXR1cm5zIHRoZSBuZXcgbm9kZS4gSWYgdGhlIGN1cnJlbnQgbm9kZQotICAgICAqIGhh
cyBubyBwcmV2aW91cyBzaWJsaW5nLCByZXR1cm5zIG51bGwgLCBhbmQKLSAgICAgKiByZXRhaW5z
IHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuZXcgbm9kZSwg
b3IgbnVsbCBpZiB0aGUgY3VycmVudAotICAgICAqIG5vZGUgaGFzIG5vIHByZXZpb3VzIHNpYmxp
bmcuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbnMgZnJvbSB1c2VyIGNvZGUK
LSAgICAgKiBBbnkgZXhjZXB0aW9ucyByYWlzZWQgYnkgYSB1c2VyLXdyaXR0ZW4gRmlsdGVyIHdp
bGwgcHJvcGFnYXRlCi0gICAgICogdGhyb3VnaC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUg
cHJldmlvdXNTaWJsaW5nKCk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgVHJlZVdhbGtl
ciB0byB0aGUgbmV4dCBzaWJsaW5nIG9mIHRoZQotICAgICAqIGN1cnJlbnQgbm9kZSwgYW5kIHJl
dHVybnMgdGhlIG5ldyBub2RlLiBJZiB0aGUgY3VycmVudCBub2RlIGhhcwotICAgICAqIG5vIG5l
eHQgc2libGluZywgcmV0dXJucyBudWxsICwgYW5kIHJldGFpbnMgdGhlCi0gICAgICogY3VycmVu
dCBub2RlLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbmV3IG5vZGUsIG9yIG51bGwgaWYg
dGhlIGN1cnJlbnQKLSAgICAgKiBub2RlIGhhcyBubyBuZXh0IHNpYmxpbmcuCi0gICAgICoKLSAg
ICAgKiBAZXhjZXB0aW9uIEV4Y2VwdGlvbnMgZnJvbSB1c2VyIGNvZGUKLSAgICAgKiBBbnkgZXhj
ZXB0aW9ucyByYWlzZWQgYnkgYSB1c2VyLXdyaXR0ZW4gRmlsdGVyIHdpbGwgcHJvcGFnYXRlCi0g
ICAgICogdGhyb3VnaC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgbmV4dFNpYmxpbmcoKTsK
LQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBUcmVlV2Fsa2VyIHRvIHRoZSBwcmV2aW91cyBu
b2RlIGluCi0gICAgICogZG9jdW1lbnQgb3JkZXIgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgbm9k
ZSwgYW5kIHJldHVybnMgdGhlCi0gICAgICogbmV3IG5vZGUuIElmIHRoZSBjdXJyZW50IG5vZGUg
aGFzIG5vIHByZXZpb3VzIG5vZGUsIHJldHVybnMKLSAgICAgKiBudWxsICwgYW5kIHJldGFpbnMg
dGhlIGN1cnJlbnQgbm9kZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5ldyBub2RlLCBv
ciBudWxsIGlmIHRoZSBjdXJyZW50Ci0gICAgICogbm9kZSBoYXMgbm8gcHJldmlvdXMgbm9kZS4K
LSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRXhjZXB0aW9ucyBmcm9tIHVzZXIgY29kZQotICAg
ICAqIEFueSBleGNlcHRpb25zIHJhaXNlZCBieSBhIHVzZXItd3JpdHRlbiBGaWx0ZXIgd2lsbCBw
cm9wYWdhdGUKLSAgICAgKiB0aHJvdWdoLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBwcmV2
aW91c05vZGUoKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBUcmVlV2Fsa2VyIHRvIHRo
ZSBuZXh0IG5vZGUgaW4KLSAgICAgKiBkb2N1bWVudCBvcmRlciByZWxhdGl2ZSB0byB0aGUgY3Vy
cmVudCBub2RlLCBhbmQgcmV0dXJucyB0aGUKLSAgICAgKiBuZXcgbm9kZS4gSWYgdGhlIGN1cnJl
bnQgbm9kZSBoYXMgbm8gbmV4dCBub2RlLCByZXR1cm5zCi0gICAgICogbnVsbCAsIGFuZCByZXRh
aW5zIHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBuZXcgbm9k
ZSwgb3IgbnVsbCBpZiB0aGUgY3VycmVudAotICAgICAqIG5vZGUgaGFzIG5vIG5leHQgbm9kZS4K
LSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRXhjZXB0aW9ucyBmcm9tIHVzZXIgY29kZQotICAg
ICAqIEFueSBleGNlcHRpb25zIHJhaXNlZCBieSBhIHVzZXItd3JpdHRlbiBGaWx0ZXIgd2lsbCBw
cm9wYWdhdGUKLSAgICAgKiB0aHJvdWdoLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBuZXh0
Tm9kZSgpOwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2Yg
dGhlIERPTQotICAgICAqLwotICAgIFRyZWVXYWxrZXJJbXBsICpoYW5kbGUoKSBjb25zdCB7IHJl
dHVybiBpbXBsOyB9Ci0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBpbXBsID09IDA7
IH0KLQotICAgIFRyZWVXYWxrZXIoVHJlZVdhbGtlckltcGwgKik7Ci0KLSAgICBmcmllbmQgY2xh
c3MgRG9jdW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIFRyZWVXYWxrZXJJbXBsOwotCi1wcml2YXRl
OgotICAgIFRyZWVXYWxrZXIoKTsKLSAgICBUcmVlV2Fsa2VySW1wbCAqaW1wbDsKLX07Ci0KLQot
Ly8gIyMjIG5vdCBzdXJlIGlmIHRoaXMgdGhpcyBjbGFzcyBpcyByZWFsbHkgbmVlZGVkIC0gYm90
aCBtZXRob2RzIGFyZSBpbgotLy8gRG9jdW1lbnQKLQotLyoqCi0gKiBEb2N1bWVudFRyYXZlcnNh
bCBjb250YWlucyBtZXRob2RzIHRoYXQgY3JlYXRlcwotICogSXRlcmF0b3JzIHRvIHRyYXZlcnNl
IGEgbm9kZSBhbmQgaXRzIGNoaWxkcmVuIGluIGRvY3VtZW50IG9yZGVyCi0gKiAoZGVwdGggZmly
c3QsIHByZS1vcmRlciB0cmF2ZXJzYWwsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIG9yZGVy
Ci0gKiBpbiB3aGljaCB0aGUgc3RhcnQgdGFncyBvY2N1ciBpbiB0aGUgdGV4dCByZXByZXNlbnRh
dGlvbiBvZiB0aGUKLSAqIGRvY3VtZW50KS4KLSAqCi0gKgotY2xhc3MgRG9jdW1lbnRUcmF2ZXJz
YWwgLy8gOiBwdWJsaWMgRG9jdW1lbnQgPwotewotcHVibGljOgotICAgIERvY3VtZW50VHJhdmVy
c2FsKCk7Ci0gICAgRG9jdW1lbnRUcmF2ZXJzYWwoY29uc3QgRG9jdW1lbnRUcmF2ZXJzYWwgJm90
aGVyKTsKLQotICAgIERvY3VtZW50VHJhdmVyc2FsICYgb3BlcmF0b3IgPSAoY29uc3QgRG9jdW1l
bnRUcmF2ZXJzYWwgJm90aGVyKTsKLQotICAgIH5Eb2N1bWVudFRyYXZlcnNhbCgpOwotCi0gICAg
ICoqCi0gICAgICoKLSAgICAgKgotICAgICAqIEBwYXJhbSByb290IFRoZSBub2RlIHdoaWNoIHdp
bGwgYmUgaXRlcmF0ZWQgdG9nZXRoZXIgd2l0aCBpdHMKLSAgICAgKiBjaGlsZHJlbi4gVGhlIGl0
ZXJhdG9yIGlzIGluaXRpYWxseSBwb3NpdGlvbmVkIGp1c3QgYmVmb3JlIHRoaXMKLSAgICAgKiBu
b2RlLiBUaGUgd2hhdFRvU2hvdyBmbGFncyBhbmQgdGhlIGZpbHRlciwgaWYgYW55LCBhcmUgbm90
Ci0gICAgICogY29uc2lkZXJlZCB3aGVuIHNldHRpbmcgdGhpcyBwb3NpdGlvbi4KLSAgICAgKgot
ICAgICAqIEBwYXJhbSB3aGF0VG9TaG93IFRoaXMgZmxhZyBzcGVjaWZpZXMgd2hpY2ggbm9kZSB0
eXBlcyBtYXkKLSAgICAgKiBhcHBlYXIgaW4gdGhlIGxvZ2ljYWwgdmlldyBvZiB0aGUgdHJlZSBw
cmVzZW50ZWQgYnkgdGhlCi0gICAgICogSXRlcmF0b3IuIFNlZSB0aGUgZGVzY3JpcHRpb24gb2Yg
SXRlcmF0b3IgZm9yIHRoZSBzZXQgb2YKLSAgICAgKiBwb3NzaWJsZSB2YWx1ZXMuIFRoZXNlIGZs
YWdzIGNhbiBiZSBjb21iaW5lZCB1c2luZyBPUi4KLSAgICAgKgotICAgICAqICBUaGVzZSBmbGFn
cyBjYW4gYmUgY29tYmluZWQgdXNpbmcgT1IgLgotICAgICAqCi0gICAgICogQHBhcmFtIGZpbHRl
ciBUaGUgRmlsdGVyIHRvIGJlIHVzZWQgd2l0aCB0aGlzIFRyZWVXYWxrZXIsIG9yCi0gICAgICog
bnVsbCB0byBpbmRpY2F0ZSBubyBmaWx0ZXIuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZXhwYW5k
RW50aXR5UmVmZXJlbmNlcyBUaGUgdmFsdWUgb2YgdGhpcyBmbGFnCi0gICAgICogZGV0ZXJtaW5l
cyB3aGV0aGVyIGVudGl0eSByZWZlcmVuY2Ugbm9kZXMgYXJlIGV4cGFuZGVkLgotICAgICAqCi0g
ICAgICogQHJldHVybiBUaGUgbmV3bHkgY3JlYXRlZCBOb2RlSXRlcmF0b3IgLgotICAgICAqCi0g
ICAgICoKLSAgICBOb2RlSXRlcmF0b3IgY3JlYXRlTm9kZUl0ZXJhdG9yICggY29uc3QgTm9kZSAm
cm9vdCwgaW50IHdoYXRUb1Nob3csCi0JCQkJICAgICAgY29uc3QgTm9kZUZpbHRlciAmZmlsdGVy
LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMgKTsKLQotICAgICAqKgotICAgICAqIENyZWF0
ZSBhIG5ldyBUcmVlV2Fsa2VyIG92ZXIgdGhlIHN1YnRyZWUgcm9vdGVkIGJ5IHRoZQotICAgICAq
IHNwZWNpZmllZCBub2RlLgotICAgICAqCi0gICAgICogQHBhcmFtIHJvb3QgVGhlIG5vZGUgd2hp
Y2ggd2lsbCBzZXJ2ZSBhcyB0aGUgcm9vdCBmb3IgdGhlCi0gICAgICogVHJlZVdhbGtlciAuIFRo
ZSBjdXJyZW50Tm9kZSBvZiB0aGUgVHJlZVdhbGtlcgotICAgICAqIGlzIHNldCB0byB0aGlzIG5v
ZGUuIFRoZSB3aGF0VG9TaG93IGZsYWdzIGFuZCB0aGUgTm9kZUZpbHRlcgotICAgICAqIGFyZSBu
b3QgY29uc2lkZXJlZCB3aGVuIHNldHRpbmcgdGhpcyB2YWx1ZTsgYW55IG5vZGUgdHlwZSB3aWxs
Ci0gICAgICogYmUgYWNjZXB0ZWQgYXMgdGhlIHJvb3QuIFRoZSByb290IG11c3Qgbm90IGJlIG51
bGwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gd2hhdFRvU2hvdyBUaGlzIGZsYWcgc3BlY2lmaWVz
IHdoaWNoIG5vZGUgdHlwZXMgbWF5Ci0gICAgICogYXBwZWFyIGluIHRoZSBsb2dpY2FsIHZpZXcg
b2YgdGhlIHRyZWUgcHJlc2VudGVkIGJ5IHRoZQotICAgICAqIEl0ZXJhdG9yLiBTZWUgdGhlIGRl
c2NyaXB0aW9uIG9mIFRyZWVXYWxrZXIgZm9yIHRoZSBzZXQgb2YKLSAgICAgKiBwb3NzaWJsZSB2
YWx1ZXMuIFRoZXNlIGZsYWdzIGNhbiBiZSBjb21iaW5lZCB1c2luZyBPUi4KLSAgICAgKgotICAg
ICAqICBUaGVzZSBmbGFncyBjYW4gYmUgY29tYmluZWQgdXNpbmcgT1IgLgotICAgICAqCi0gICAg
ICogQHBhcmFtIGZpbHRlciBUaGUgRmlsdGVyIHRvIGJlIHVzZWQgd2l0aCB0aGlzIFRyZWVXYWxr
ZXIsIG9yCi0gICAgICogbnVsbCB0byBpbmRpY2F0ZSBubyBmaWx0ZXIuCi0gICAgICoKLSAgICAg
KiBAcGFyYW0gZXhwYW5kRW50aXR5UmVmZXJlbmNlcyBUaGUgdmFsdWUgb2YgdGhpcyBmbGFnCi0g
ICAgICogZGV0ZXJtaW5lcyB3aGV0aGVyIGVudGl0eSByZWZlcmVuY2Ugbm9kZXMgYXJlIGV4cGFu
ZGVkLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbmV3bHkgY3JlYXRlZCBUcmVlV2Fsa2Vy
IC4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogUmFpc2Vz
IHRoZSBleGNlcHRpb24gTk9UX1NVUFBPUlRFRF9FUlIgaWYgdGhlIHNwZWNpZmllZCByb290Ci0g
ICAgICogbm9kZSBpcyBudWxsLgotICAgICAqCi0gICAgICoKLSAgICBUcmVlV2Fsa2VyIGNyZWF0
ZVRyZWVXYWxrZXIgKCBjb25zdCBOb2RlICZyb290LCBpbnQgd2hhdFRvU2hvdywKLQkJCQkgIGNv
bnN0IE5vZGVGaWx0ZXIgJmZpbHRlciwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzICk7CiB9
OwotKi8KLQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDoga2h0bWwv
ZG9tL2RvbV9leGNlcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9kb20vZG9tX2V4Y2VwdGlvbi5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlm
ZiAtcCAtdSAtcjEuNSBraHRtbC9kb20vZG9tX2V4Y2VwdGlvbi5oCi0tLSBraHRtbC9kb20vZG9t
X2V4Y2VwdGlvbi5oCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuNQorKysga2h0bWwvZG9t
L2RvbV9leGNlcHRpb24uaAk0IERlYyAyMDA1IDEwOjI0OjMxIC0wMDAwCkBAIC01NywxOCArNTcs
NiBAQCBjbGFzcyBET01FeGNlcHRpb24KIHsKIHB1YmxpYzoKIAotI2lmICFLSFRNTF9OT19DUExV
U1BMVVNfRE9NCi0KLSAgICBET01FeGNlcHRpb24odW5zaWduZWQgc2hvcnQgX2NvZGUpIHsgY29k
ZSA9IF9jb2RlOyB9Ci0gICAgRE9NRXhjZXB0aW9uKGNvbnN0IERPTUV4Y2VwdGlvbiAmb3RoZXIp
IHsgY29kZSA9IG90aGVyLmNvZGU7IH0KLQotICAgIERPTUV4Y2VwdGlvbiAmIG9wZXJhdG9yID0g
KGNvbnN0IERPTUV4Y2VwdGlvbiAmb3RoZXIpCi0JeyBjb2RlID0gb3RoZXIuY29kZTsgcmV0dXJu
ICp0aGlzOyB9Ci0KLSAgICB2aXJ0dWFsIH5ET01FeGNlcHRpb24oKSB7fQotCi0jZW5kaWYKLQog
ICAgIC8qKgogICAgICAqIEFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBlcnJvciBn
ZW5lcmF0ZWQuCiAgICAgICoKQEAgLTkwLDEzICs3OCw2IEBAIHB1YmxpYzoKICAgICAgICAgTkFN
RVNQQUNFX0VSUiA9IDE0LAogICAgICAgICBJTlZBTElEX0FDQ0VTU19FUlIgPSAxNQogICAgIH07
Ci0KLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi0gICAgdW5zaWduZWQgc2hvcnQgY29k
ZTsKLQotI2VuZGlmCi0KIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IGtodG1sL2RvbS9kb21f
bWlzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9t
L2RvbV9taXNjLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXAgLXUgLXIxLjgg
a2h0bWwvZG9tL2RvbV9taXNjLmNwcAotLS0ga2h0bWwvZG9tL2RvbV9taXNjLmNwcAkzIE9jdCAy
MDA1IDIxOjEyOjExIC0wMDAwCTEuOAorKysga2h0bWwvZG9tL2RvbV9taXNjLmNwcAk0IERlYyAy
MDA1IDEwOjI0OjMxIC0wMDAwCkBAIC0yOSwxNCArMjksNCBAQCBEb21TaGFyZWQ6On5Eb21TaGFy
ZWQoKQogewogICAvLyBkZWxpYmVyYXRlbHkgbGVmdCBibGFuawogfQotCi0jaWYgIUtIVE1MX05P
X0NQTFVTUExVU19ET00KLQotYm9vbCBEb21TaGFyZWQ6OmRlbGV0ZU1lKCkKLXsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotI2VuZGlmCi0KIH0KSW5kZXg6IGtodG1sL2RvbS9kb21fbWlzYy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21fbWlzYy5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIGtodG1sL2RvbS9k
b21fbWlzYy5oCi0tLSBraHRtbC9kb20vZG9tX21pc2MuaAkxOSBTZXAgMjAwNSAxODo1MjoxMCAt
MDAwMAkxLjEwCisrKyBraHRtbC9kb20vZG9tX21pc2MuaAk0IERlYyAyMDA1IDEwOjI0OjMxIC0w
MDAwCkBAIC0zNywxMyArMzcsNyBAQCBwdWJsaWM6CiAgIERvbVNoYXJlZCgpIDogX3JlZiggMCAp
IHt9CiAgIHZpcnR1YWwgfkRvbVNoYXJlZCgpOwogCi0jaWYgS0hUTUxfTk9fQ1BMVVNQTFVTX0RP
TQogICBib29sIGRlbGV0ZU1lKCkgeyByZXR1cm4gdHJ1ZTsgfQotI2Vsc2UKLSAgLyogT3Zlcmxv
YWQgdGhpcyBmdW5jdGlvbiBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCBkZWxldGlvbiBiZWhhdmlv
dXIKLSAgICovCi0gIHZpcnR1YWwgYm9vbCBkZWxldGVNZSgpOwotI2VuZGlmCiAKICAgdm9pZCBy
ZWYoKSB7IF9yZWYrKzsgfQogICB2b2lkIGRlcmVmKCkgeyBpZihfcmVmKSBfcmVmLS07IGlmKCFf
cmVmICYmIGRlbGV0ZU1lKCkpIGRlbGV0ZSB0aGlzOyB9CkluZGV4OiBraHRtbC9kb20vZG9tX25v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9t
X25vZGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC1wIC11IC1yMS4xNiBraHRt
bC9kb20vZG9tX25vZGUuaAotLS0ga2h0bWwvZG9tL2RvbV9ub2RlLmgJMjEgTm92IDIwMDUgMDE6
MTk6NTQgLTAwMDAJMS4xNgorKysga2h0bWwvZG9tL2RvbV9ub2RlLmgJNCBEZWMgMjAwNSAxMDoy
NDozMSAtMDAwMApAQCAtMjksMjI2ICsyOSw4IEBACiAjaWZuZGVmIF9ET01fTm9kZV9oXwogI2Rl
ZmluZSBfRE9NX05vZGVfaF8KIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSNpbmNs
dWRlIDxxc3RyaW5nLmg+Ci0KLWNsYXNzIFFSZWN0OwotCi0jZW5kaWYKLQogbmFtZXNwYWNlIERP
TSB7CiAKLSNpZiAhS0hUTUxfTk9fQ1BMVVNQTFVTX0RPTQotCi1jbGFzcyBOb2RlOwotY2xhc3Mg
RE9NU3RyaW5nOwotY2xhc3MgTm9kZUltcGw7Ci1jbGFzcyBOYW1lZE5vZGVNYXBJbXBsOwotY2xh
c3MgRXZlbnRMaXN0ZW5lcjsKLWNsYXNzIEV2ZW50OwotCi0vKioKLSAqIE9iamVjdHMgaW1wbGVt
ZW50aW5nIHRoZSA8Y29kZT4gTmFtZWROb2RlTWFwIDwvY29kZT4gaW50ZXJmYWNlIGFyZQotICog
dXNlZCB0byByZXByZXNlbnQgY29sbGVjdGlvbnMgb2Ygbm9kZXMgdGhhdCBjYW4gYmUgYWNjZXNz
ZWQgYnkKLSAqIG5hbWUuIE5vdGUgdGhhdCA8Y29kZT4gTmFtZWROb2RlTWFwIDwvY29kZT4gZG9l
cyBub3QgaW5oZXJpdCBmcm9tCi0gKiA8Y29kZT4gTm9kZUxpc3QgPC9jb2RlPiA7IDxjb2RlPiBO
YW1lZE5vZGVNYXAgPC9jb2RlPiBzIGFyZSBub3QKLSAqIG1haW50YWluZWQgaW4gYW55IHBhcnRp
Y3VsYXIgb3JkZXIuIE9iamVjdHMgY29udGFpbmVkIGluIGFuIG9iamVjdAotICogaW1wbGVtZW50
aW5nIDxjb2RlPiBOYW1lZE5vZGVNYXAgPC9jb2RlPiBtYXkgYWxzbyBiZSBhY2Nlc3NlZCBieSBh
bgotICogb3JkaW5hbCBpbmRleCwgYnV0IHRoaXMgaXMgc2ltcGx5IHRvIGFsbG93IGNvbnZlbmll
bnQgZW51bWVyYXRpb24KLSAqIG9mIHRoZSBjb250ZW50cyBvZiBhIDxjb2RlPiBOYW1lZE5vZGVN
YXAgPC9jb2RlPiAsIGFuZCBkb2VzIG5vdAotICogaW1wbHkgdGhhdCB0aGUgRE9NIHNwZWNpZmll
cyBhbiBvcmRlciB0byB0aGVzZSBOb2Rlcy4KLSAqCi0gKi8KLWNsYXNzIE5hbWVkTm9kZU1hcAot
ewotcHVibGljOgotICAgIE5hbWVkTm9kZU1hcCgpOwotICAgIE5hbWVkTm9kZU1hcChjb25zdCBO
YW1lZE5vZGVNYXAgJm90aGVyKTsKLQotICAgIE5hbWVkTm9kZU1hcCAmIG9wZXJhdG9yID0gKGNv
bnN0IE5hbWVkTm9kZU1hcCAmb3RoZXIpOwotCi0gICAgfk5hbWVkTm9kZU1hcCgpOwotCi0gICAg
LyoqCi0gICAgICogVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgbWFwLiBUaGUgcmFuZ2Ugb2Yg
dmFsaWQgY2hpbGQgbm9kZQotICAgICAqIGluZGljZXMgaXMgMCB0byA8Y29kZT4gbGVuZ3RoLTEg
PC9jb2RlPiBpbmNsdXNpdmUuCi0gICAgICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlcyBhIG5vZGUgc3BlY2lmaWVkIGJ5
IG5hbWUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIGEgbm9kZSB0byByZXRy
aWV2ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQSA8Y29kZT4gTm9kZSA8L2NvZGU+IChvZiBh
bnkgdHlwZSkgd2l0aCB0aGUgc3BlY2lmaWVkCi0gICAgICogbmFtZSwgb3IgPGNvZGU+IG51bGwg
PC9jb2RlPiBpZiB0aGUgc3BlY2lmaWVkIG5hbWUgZGlkIG5vdAotICAgICAqIGlkZW50aWZ5IGFu
eSBub2RlIGluIHRoZSBtYXAuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIGdldE5hbWVkSXRl
bSAoIGNvbnN0IERPTVN0cmluZyAmbmFtZSApIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQWRk
cyBhIG5vZGUgdXNpbmcgaXRzIDxjb2RlPiBub2RlTmFtZSA8L2NvZGU+IGF0dHJpYnV0ZS4KLSAg
ICAgKgotICAgICAqICBBcyB0aGUgPGNvZGU+IG5vZGVOYW1lIDwvY29kZT4gYXR0cmlidXRlIGlz
IHVzZWQgdG8gZGVyaXZlIHRoZQotICAgICAqIG5hbWUgd2hpY2ggdGhlIG5vZGUgbXVzdCBiZSBz
dG9yZWQgdW5kZXIsIG11bHRpcGxlIG5vZGVzIG9mCi0gICAgICogY2VydGFpbiB0eXBlcyAodGhv
c2UgdGhhdCBoYXZlIGEgInNwZWNpYWwiIHN0cmluZyB2YWx1ZSkgY2Fubm90Ci0gICAgICogYmUg
c3RvcmVkIGFzIHRoZSBuYW1lcyB3b3VsZCBjbGFzaC4gVGhpcyBpcyBzZWVuIGFzIHByZWZlcmFi
bGUKLSAgICAgKiB0byBhbGxvd2luZyBub2RlcyB0byBiZSBhbGlhc2VkLgotICAgICAqCi0gICAg
ICogQHBhcmFtIGFyZyBBIG5vZGUgdG8gc3RvcmUgaW4gYSBuYW1lZCBub2RlIG1hcC4gVGhlIG5v
ZGUgd2lsbAotICAgICAqIGxhdGVyIGJlIGFjY2Vzc2libGUgdXNpbmcgdGhlIHZhbHVlIG9mIHRo
ZSA8Y29kZT4gbm9kZU5hbWUKLSAgICAgKiA8L2NvZGU+IGF0dHJpYnV0ZSBvZiB0aGUgbm9kZS4g
SWYgYSBub2RlIHdpdGggdGhhdCBuYW1lIGlzCi0gICAgICogYWxyZWFkeSBwcmVzZW50IGluIHRo
ZSBtYXAsIGl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lLgotICAgICAqCi0gICAgICogQHJl
dHVybiBJZiB0aGUgbmV3IDxjb2RlPiBOb2RlIDwvY29kZT4gcmVwbGFjZXMgYW4gZXhpc3RpbmcK
LSAgICAgKiBub2RlIHdpdGggdGhlIHNhbWUgbmFtZSB0aGUgcHJldmlvdXNseSBleGlzdGluZyA8
Y29kZT4gTm9kZQotICAgICAqIDwvY29kZT4gaXMgcmV0dXJuZWQsIG90aGVyd2lzZSA8Y29kZT4g
bnVsbCA8L2NvZGU+IGlzIHJldHVybmVkLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01F
eGNlcHRpb24KLSAgICAgKiBXUk9OR19ET0NVTUVOVF9FUlI6IFJhaXNlZCBpZiA8Y29kZT4gYXJn
IDwvY29kZT4gd2FzIGNyZWF0ZWQKLSAgICAgKiBmcm9tIGEgZGlmZmVyZW50IGRvY3VtZW50IHRo
YW4gdGhlIG9uZSB0aGF0IGNyZWF0ZWQgdGhlIDxjb2RlPgotICAgICAqIE5hbWVkTm9kZU1hcCA8
L2NvZGU+IC4KLSAgICAgKgotICAgICAqICBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJh
aXNlZCBpZiB0aGlzIDxjb2RlPgotICAgICAqIE5hbWVkTm9kZU1hcCA8L2NvZGU+IGlzIHJlYWRv
bmx5LgotICAgICAqCi0gICAgICogIElOVVNFX0FUVFJJQlVURV9FUlI6IFJhaXNlZCBpZiA8Y29k
ZT4gYXJnIDwvY29kZT4gaXMgYW4gPGNvZGU+Ci0gICAgICogQXR0ciA8L2NvZGU+IHRoYXQgaXMg
YWxyZWFkeSBhbiBhdHRyaWJ1dGUgb2YgYW5vdGhlciA8Y29kZT4KLSAgICAgKiBFbGVtZW50IDwv
Y29kZT4gb2JqZWN0LiBUaGUgRE9NIHVzZXIgbXVzdCBleHBsaWNpdGx5IGNsb25lCi0gICAgICog
PGNvZGU+IEF0dHIgPC9jb2RlPiBub2RlcyB0byByZS11c2UgdGhlbSBpbiBvdGhlciBlbGVtZW50
cy4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUgc2V0TmFtZWRJdGVtICggY29uc3QgTm9kZSAm
YXJnICk7Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIGEgbm9kZSBzcGVjaWZpZWQgYnkgbmFt
ZS4gSWYgdGhlIHJlbW92ZWQgbm9kZSBpcyBhbgotICAgICAqIDxjb2RlPiBBdHRyIDwvY29kZT4g
d2l0aCBhIGRlZmF1bHQgdmFsdWUgaXQgaXMgaW1tZWRpYXRlbHkKLSAgICAgKiByZXBsYWNlZC4K
LSAgICAgKgotICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIGEgbm9kZSB0byByZW1vdmUu
Ci0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBub2RlIHJlbW92ZWQgZnJvbSB0aGUgbWFwIG9y
IDxjb2RlPiBudWxsIDwvY29kZT4gaWYKLSAgICAgKiBubyBub2RlIHdpdGggc3VjaCBhIG5hbWUg
ZXhpc3RzLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBO
T1RfRk9VTkRfRVJSOiBSYWlzZWQgaWYgdGhlcmUgaXMgbm8gbm9kZSBuYW1lZCA8Y29kZT4gbmFt
ZQotICAgICAqIDwvY29kZT4gaW4gdGhlIG1hcC4KLSAgICAgKgotICAgICAqLwotICAgIE5vZGUg
cmVtb3ZlTmFtZWRJdGVtICggY29uc3QgRE9NU3RyaW5nICZuYW1lICk7Ci0KLSAgICAvKioKLSAg
ICAgKiBSZXR1cm5zIHRoZSA8Y29kZT4gaW5kZXggPC9jb2RlPiB0aCBpdGVtIGluIHRoZSBtYXAu
IElmIDxjb2RlPgotICAgICAqIGluZGV4IDwvY29kZT4gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFs
IHRvIHRoZSBudW1iZXIgb2Ygbm9kZXMKLSAgICAgKiBpbiB0aGUgbWFwLCB0aGlzIHJldHVybnMg
PGNvZGU+IG51bGwgPC9jb2RlPiAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXgg
aW50byB0aGUgbWFwLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbm9kZSBhdCB0aGUgPGNv
ZGU+IGluZGV4IDwvY29kZT4gdGggcG9zaXRpb24gaW4gdGhlCi0gICAgICogPGNvZGU+IE5hbWVk
Tm9kZU1hcCA8L2NvZGU+ICwgb3IgPGNvZGU+IG51bGwgPC9jb2RlPiBpZiB0aGF0IGlzCi0gICAg
ICogbm90IGEgdmFsaWQgaW5kZXguCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIGl0ZW0gKCB1
bnNpZ25lZCBpbmRleCApIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogSW50cm9kdWNlZCBpbiBE
T00gTGV2ZWwgMgotICAgICAqCi0gICAgICogUmV0cmlldmVzIGEgbm9kZSBzcGVjaWZpZWQgYnkg
bG9jYWwgbmFtZSBhbmQgbmFtZXNwYWNlIFVSSS4gSFRNTC1vbmx5Ci0gICAgICogRE9NIGltcGxl
bWVudGF0aW9ucyBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICoK
LSAgICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJIFRoZSBuYW1lc3BhY2UgVVJJIG9mIHRoZSBub2Rl
IHRvIHJldHJpZXZlLgotICAgICAqCi0gICAgICogQHBhcmFtIGxvY2FsTmFtZSBUaGUgbG9jYWwg
bmFtZSBvZiB0aGUgbm9kZSB0byByZXRyaWV2ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQSBO
b2RlIChvZiBhbnkgdHlwZSkgd2l0aCB0aGUgc3BlY2lmaWVkIGxvY2FsIG5hbWUgYW5kIG5hbWVz
cGFjZQotICAgICAqIFVSSSwgb3IgbnVsbCBpZiB0aGV5IGRvIG5vdCBpZGVudGlmeSBhbnkgbm9k
ZSBpbiB0aGlzIG1hcC4KLSAgICAgKi8KLSAgICBOb2RlIGdldE5hbWVkSXRlbU5TKCBjb25zdCBE
T01TdHJpbmcgJm5hbWVzcGFjZVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBE
T01TdHJpbmcgJmxvY2FsTmFtZSApIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogSW50cm9kdWNl
ZCBpbiBET00gTGV2ZWwgMgotICAgICAqCi0gICAgICogQWRkcyBhIG5vZGUgdXNpbmcgaXRzIG5h
bWVzcGFjZVVSSSBhbmQgbG9jYWxOYW1lLiBJZiBhIG5vZGUgd2l0aCB0aGF0Ci0gICAgICogbmFt
ZXNwYWNlIFVSSSBhbmQgdGhhdCBsb2NhbCBuYW1lIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlz
IG1hcCwgaXQgaXMKLSAgICAgKiByZXBsYWNlZCBieSB0aGUgbmV3IG9uZS4KLSAgICAgKiBIVE1M
LW9ubHkgRE9NIGltcGxlbWVudGF0aW9ucyBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYXJnIEEgbm9kZSB0byBzdG9yZSBpbiB0aGlz
IG1hcC4gVGhlIG5vZGUgd2lsbCBsYXRlciBiZQotICAgICAqIGFjY2Vzc2libGUgdXNpbmcgdGhl
IHZhbHVlIG9mIGl0cyBuYW1lc3BhY2VVUkkgYW5kIGxvY2FsTmFtZSBhdHRyaWJ1dGVzLgotICAg
ICAqCi0gICAgICogQHJldHVybiBJZiB0aGUgbmV3IE5vZGUgcmVwbGFjZXMgYW4gZXhpc3Rpbmcg
bm9kZSB0aGUgcmVwbGFjZWQgTm9kZSBpcwotICAgICAqIHJldHVybmVkLCBvdGhlcndpc2UgbnVs
bCBpcyByZXR1cm5lZC4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0g
ICAgICogV1JPTkdfRE9DVU1FTlRfRVJSOiBSYWlzZWQgaWYgYXJnIHdhcyBjcmVhdGVkIGZyb20g
YSBkaWZmZXJlbnQgZG9jdW1lbnQKLSAgICAgKiB0aGFuIHRoZSBvbmUgdGhhdCBjcmVhdGVkIHRo
aXMgbWFwLgotICAgICAqCi0gICAgICogTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlz
ZWQgaWYgdGhpcyBtYXAgaXMgcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKiBJTlVTRV9BVFRSSUJV
VEVfRVJSOiBSYWlzZWQgaWYgYXJnIGlzIGFuIEF0dHIgdGhhdCBpcyBhbHJlYWR5IGFuCi0gICAg
ICogYXR0cmlidXRlIG9mIGFub3RoZXIgRWxlbWVudCBvYmplY3QuIFRoZSBET00gdXNlciBtdXN0
IGV4cGxpY2l0bHkgY2xvbmUKLSAgICAgKiBBdHRyIG5vZGVzIHRvIHJlLXVzZSB0aGVtIGluIG90
aGVyIGVsZW1lbnRzLgotICAgICAqLwotICAgIE5vZGUgc2V0TmFtZWRJdGVtTlMoIGNvbnN0IE5v
ZGUgJmFyZyApOwotCi0gICAgLyoqCi0gICAgICogSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgot
ICAgICAqCi0gICAgICogUmVtb3ZlcyBhIG5vZGUgc3BlY2lmaWVkIGJ5IGxvY2FsIG5hbWUgYW5k
IG5hbWVzcGFjZSBVUkkuIEEgcmVtb3ZlZAotICAgICAqIGF0dHJpYnV0ZSBtYXkgYmUga25vd24g
dG8gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgd2hlbiB0aGlzIG1hcCBjb250YWlucwotICAgICAqIHRo
ZSBhdHRyaWJ1dGVzIGF0dGFjaGVkIHRvIGFuIGVsZW1lbnQsIGFzIHJldHVybmVkIGJ5IHRoZSBh
dHRyaWJ1dGVzCi0gICAgICogYXR0cmlidXRlIG9mIHRoZSBOb2RlIGludGVyZmFjZS4gSWYgc28s
IGFuIGF0dHJpYnV0ZSBpbW1lZGlhdGVseSBhcHBlYXJzCi0gICAgICogY29udGFpbmluZyB0aGUg
ZGVmYXVsdCB2YWx1ZSBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIG5hbWVzcGFjZSBVUkks
Ci0gICAgICogbG9jYWwgbmFtZSwgYW5kIHByZWZpeCB3aGVuIGFwcGxpY2FibGUuCi0gICAgICog
SFRNTC1vbmx5IERPTSBpbXBsZW1lbnRhdGlvbnMgZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50IHRo
aXMgbWV0aG9kLgotICAgICAqCi0gICAgICogQHBhcmFtIG5hbWVzcGFjZVVSSSBUaGUgbmFtZXNw
YWNlIFVSSSBvZiB0aGUgbm9kZSB0byByZW1vdmUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbG9j
YWxOYW1lIFRoZSBsb2NhbCBuYW1lIG9mIHRoZSBub2RlIHRvIHJlbW92ZS4KLSAgICAgKgotICAg
ICAqIEByZXR1cm4gVGhlIG5vZGUgcmVtb3ZlZCBmcm9tIHRoaXMgbWFwIGlmIGEgbm9kZSB3aXRo
IHN1Y2ggYSBsb2NhbCBuYW1lCi0gICAgICogYW5kIG5hbWVzcGFjZSBVUkkgZXhpc3RzLgotICAg
ICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBOT1RfRk9VTkRfRVJS
OiBSYWlzZWQgaWYgdGhlcmUgaXMgbm8gbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQKLSAgICAgKiBu
YW1lc3BhY2VVUkkgYW5kIGxvY2FsTmFtZSBpbiB0aGlzIG1hcC4KLSAgICAgKgotICAgICAqIE5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbWFwIGlzIHJlYWRvbmx5
LgotICAgICAqLwotICAgIE5vZGUgcmVtb3ZlTmFtZWRJdGVtTlMoIGNvbnN0IERPTVN0cmluZyAm
bmFtZXNwYWNlVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmlu
ZyAmbG9jYWxOYW1lICk7Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKiBub3Qg
cGFydCBvZiB0aGUgRE9NCi0gICAgICovCi0gICAgTmFtZWROb2RlTWFwSW1wbCAqaGFuZGxlKCkg
Y29uc3QgdGhyb3coKTsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHRocm93KCk7Ci0KLXByb3Rl
Y3RlZDoKLSAgICBOYW1lZE5vZGVNYXAoIE5hbWVkTm9kZU1hcEltcGwgKmkpOwotICAgIE5hbWVk
Tm9kZU1hcEltcGwgKmltcGw7Ci0KLSAgICBmcmllbmQgY2xhc3MgTm9kZTsKLSAgICBmcmllbmQg
Y2xhc3MgRG9jdW1lbnRUeXBlOwotICAgIGZyaWVuZCBjbGFzcyBOb2RlSW1wbDsKLX07Ci0KLWNs
YXNzIE5hbWVkTm9kZU1hcDsKLWNsYXNzIE5vZGVMaXN0OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFz
cyBET01TdHJpbmc7Ci1jbGFzcyBTdHlsZVNoZWV0OwotCi1jbGFzcyBOb2RlSW1wbDsKLQotI2Vu
ZGlmCi0KIC8qKgogICogVGhlIDxjb2RlPiBOb2RlIDwvY29kZT4gaW50ZXJmYWNlIGlzIHRoZSBw
cmltYXJ5IGRhdGF0eXBlIGZvciB0aGUKICAqIGVudGlyZSBEb2N1bWVudCBPYmplY3QgTW9kZWwu
IEl0IHJlcHJlc2VudHMgYSBzaW5nbGUgbm9kZSBpbiB0aGUKQEAgLTI3MywzNyArNTUsOCBAQCBj
bGFzcyBOb2RlSW1wbDsKIGNsYXNzIE5vZGUKIHsKIAotI2lmICFLSFRNTF9OT19DUExVU1BMVVNf
RE9NCi0KLSAgICBmcmllbmQgY2xhc3MgTmFtZWROb2RlTWFwOwotICAgIGZyaWVuZCBjbGFzcyBO
b2RlTGlzdDsKLSAgICBmcmllbmQgY2xhc3MgSFRNTENvbGxlY3Rpb247Ci0gICAgZnJpZW5kIGNs
YXNzIFN0eWxlU2hlZXQ7Ci0KLSNlbmRpZgotCiBwdWJsaWM6CiAKLSNpZiAhS0hUTUxfTk9fQ1BM
VVNQTFVTX0RPTQotCi0gICAgTm9kZSgpOwotICAgIE5vZGUoY29uc3QgTm9kZSAmb3RoZXIpOwot
Ci0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICovCi0gICAgTm9kZSggTm9kZUltcGwg
Kl9pbXBsKTsKLQotICAgIE5vZGUgJiBvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcik7Ci0K
LSAgICBib29sIG9wZXJhdG9yID09IChjb25zdCBOb2RlICZvdGhlcik7Ci0KLSAgICBib29sIG9w
ZXJhdG9yICE9IChjb25zdCBOb2RlICZvdGhlcik7Ci0KLSAgICB2aXJ0dWFsIH5Ob2RlKCk7Ci0K
LSNlbmRpZgotCiAgICAgLyoqCiAgICAgICogQW4gaW50ZWdlciBpbmRpY2F0aW5nIHdoaWNoIHR5
cGUgb2Ygbm9kZSB0aGlzIGlzLgogICAgICAqCkBAIC00MDgsNTY0ICsxNjEsOCBAQCBwdWJsaWM6
CiAgICAgICAgIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSAxMSwKICAgICAgICAgTk9UQVRJT05f
Tk9ERSA9IDEyCiAgICAgfTsKLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0KLSAgICAv
KioKLSAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIG5vZGUsIGRlcGVuZGluZyBvbiBpdHMgdHlwZTsg
c2VlIHRoZSB0YWJsZQotICAgICAqIGFib3ZlLgotICAgICAqCi0gICAgICovCi0gICAgRE9NU3Ry
aW5nIG5vZGVOYW1lKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdmFsdWUgb2YgdGhp
cyBub2RlLCBkZXBlbmRpbmcgb24gaXRzIHR5cGU7IHNlZSB0aGUgdGFibGUKLSAgICAgKiBhYm92
ZS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRE9NRXhjZXB0aW9uCi0gICAgICogRE9NU1RS
SU5HX1NJWkVfRVJSOiBSYWlzZWQgd2hlbiBpdCB3b3VsZCByZXR1cm4gbW9yZSBjaGFyYWN0ZXJz
Ci0gICAgICogdGhhbiBmaXQgaW4gYSA8Y29kZT4gRE9NU3RyaW5nIDwvY29kZT4gdmFyaWFibGUg
b24gdGhlCi0gICAgICogaW1wbGVtZW50YXRpb24gcGxhdGZvcm0uCi0gICAgICoKLSAgICAgKi8K
LSAgICBET01TdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBzZWUg
QHJlZiBub2RlVmFsdWUKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIE5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIHdoZW4gdGhlIG5vZGUgaXMgcmVhZG9u
bHkuCi0gICAgICoKLSAgICAgKi8KLSAgICB2b2lkIHNldE5vZGVWYWx1ZSggY29uc3QgRE9NU3Ry
aW5nICYgKTsKLQotICAgIC8qKgotICAgICAqIEEgY29kZSByZXByZXNlbnRpbmcgdGhlIHR5cGUg
b2YgdGhlIHVuZGVybHlpbmcgb2JqZWN0LCBhcwotICAgICAqIGRlZmluZWQgYWJvdmUuCi0gICAg
ICoKLSAgICAgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwotCi0gICAg
LyoqCi0gICAgICogVGhlIHBhcmVudCBvZiB0aGlzIG5vZGUuIEFsbCBub2RlcywgZXhjZXB0IDxj
b2RlPiBEb2N1bWVudAotICAgICAqIDwvY29kZT4gLCA8Y29kZT4gRG9jdW1lbnRGcmFnbWVudCA8
L2NvZGU+ICwgYW5kIDxjb2RlPiBBdHRyCi0gICAgICogPC9jb2RlPiBtYXkgaGF2ZSBhIHBhcmVu
dC4gSG93ZXZlciwgaWYgYSBub2RlIGhhcyBqdXN0IGJlZW4KLSAgICAgKiBjcmVhdGVkIGFuZCBu
b3QgeWV0IGFkZGVkIHRvIHRoZSB0cmVlLCBvciBpZiBpdCBoYXMgYmVlbgotICAgICAqIHJlbW92
ZWQgZnJvbSB0aGUgdHJlZSwgdGhpcyBpcyA8Y29kZT4gbnVsbCA8L2NvZGU+IC4KLSAgICAgKgot
ICAgICAqLwotICAgIE5vZGUgcGFyZW50Tm9kZSgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
QSA8Y29kZT4gTm9kZUxpc3QgPC9jb2RlPiB0aGF0IGNvbnRhaW5zIGFsbCBjaGlsZHJlbiBvZiB0
aGlzCi0gICAgICogbm9kZS4gSWYgdGhlcmUgYXJlIG5vIGNoaWxkcmVuLCB0aGlzIGlzIGEgPGNv
ZGU+IE5vZGVMaXN0Ci0gICAgICogPC9jb2RlPiBjb250YWluaW5nIG5vIG5vZGVzLiBUaGUgY29u
dGVudCBvZiB0aGUgcmV0dXJuZWQgPGNvZGU+Ci0gICAgICogTm9kZUxpc3QgPC9jb2RlPiBpcyAm
cXVvdDtsaXZlJnF1b3Q7IGluIHRoZSBzZW5zZSB0aGF0LCBmb3IKLSAgICAgKiBpbnN0YW5jZSwg
Y2hhbmdlcyB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIG5vZGUgb2JqZWN0IHRoYXQgaXQKLSAgICAg
KiB3YXMgY3JlYXRlZCBmcm9tIGFyZSBpbW1lZGlhdGVseSByZWZsZWN0ZWQgaW4gdGhlIG5vZGVz
Ci0gICAgICogcmV0dXJuZWQgYnkgdGhlIDxjb2RlPiBOb2RlTGlzdCA8L2NvZGU+IGFjY2Vzc29y
czsgaXQgaXMgbm90IGEKLSAgICAgKiBzdGF0aWMgc25hcHNob3Qgb2YgdGhlIGNvbnRlbnQgb2Yg
dGhlIG5vZGUuIFRoaXMgaXMgdHJ1ZSBmb3IKLSAgICAgKiBldmVyeSA8Y29kZT4gTm9kZUxpc3Qg
PC9jb2RlPiAsIGluY2x1ZGluZyB0aGUgb25lcyByZXR1cm5lZCBieQotICAgICAqIHRoZSA8Y29k
ZT4gZ2V0RWxlbWVudHNCeVRhZ05hbWUgPC9jb2RlPiBtZXRob2QuCi0gICAgICoKLSAgICAgKi8K
LSAgICBOb2RlTGlzdCBjaGlsZE5vZGVzKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUg
Zmlyc3QgY2hpbGQgb2YgdGhpcyBub2RlLiBJZiB0aGVyZSBpcyBubyBzdWNoIG5vZGUsIHRoaXMK
LSAgICAgKiByZXR1cm5zIDxjb2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0gICAgICovCi0g
ICAgTm9kZSBmaXJzdENoaWxkKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbGFzdCBj
aGlsZCBvZiB0aGlzIG5vZGUuIElmIHRoZXJlIGlzIG5vIHN1Y2ggbm9kZSwgdGhpcwotICAgICAq
IHJldHVybnMgPGNvZGU+IG51bGwgPC9jb2RlPiAuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2Rl
IGxhc3RDaGlsZCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogVGhlIG5vZGUgaW1tZWRpYXRl
bHkgcHJlY2VkaW5nIHRoaXMgbm9kZS4gSWYgdGhlcmUgaXMgbm8gc3VjaAotICAgICAqIG5vZGUs
IHRoaXMgcmV0dXJucyA8Y29kZT4gbnVsbCA8L2NvZGU+IC4KLSAgICAgKgotICAgICAqLwotICAg
IE5vZGUgcHJldmlvdXNTaWJsaW5nKCkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbm9k
ZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBub2RlLiBJZiB0aGVyZSBpcyBubyBzdWNoCi0g
ICAgICogbm9kZSwgdGhpcyByZXR1cm5zIDxjb2RlPiBudWxsIDwvY29kZT4gLgotICAgICAqCi0g
ICAgICovCi0gICAgTm9kZSBuZXh0U2libGluZygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICog
QSA8Y29kZT4gTmFtZWROb2RlTWFwIDwvY29kZT4gY29udGFpbmluZyB0aGUgYXR0cmlidXRlcyBv
ZiB0aGlzCi0gICAgICogbm9kZSAoaWYgaXQgaXMgYW4gPGNvZGU+IEVsZW1lbnQgPC9jb2RlPiAp
IG9yIDxjb2RlPiBudWxsCi0gICAgICogPC9jb2RlPiBvdGhlcndpc2UuCi0gICAgICoKLSAgICAg
Ki8KLSAgICBOYW1lZE5vZGVNYXAgYXR0cmlidXRlcygpIGNvbnN0OwotCi0gICAgLyoqCi0gICAg
ICogVGhlIDxjb2RlPiBEb2N1bWVudCA8L2NvZGU+IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhp
cyBub2RlLgotICAgICAqIFRoaXMgaXMgYWxzbyB0aGUgPGNvZGU+IERvY3VtZW50IDwvY29kZT4g
b2JqZWN0IHVzZWQgdG8gY3JlYXRlCi0gICAgICogbmV3IG5vZGVzLiBXaGVuIHRoaXMgbm9kZSBp
cyBhIDxjb2RlPiBEb2N1bWVudCA8L2NvZGU+IHRoaXMgaXMKLSAgICAgKiA8Y29kZT4gbnVsbCA8
L2NvZGU+IC4KLSAgICAgKgotICAgICAqLwotICAgIERvY3VtZW50IG93bmVyRG9jdW1lbnQoKSBj
b25zdDsKLQotICAgIC8qKgotICAgICAqIEluc2VydHMgdGhlIG5vZGUgPGNvZGU+IG5ld0NoaWxk
IDwvY29kZT4gYmVmb3JlIHRoZSBleGlzdGluZwotICAgICAqIGNoaWxkIG5vZGUgPGNvZGU+IHJl
ZkNoaWxkIDwvY29kZT4gLiBJZiA8Y29kZT4gcmVmQ2hpbGQgPC9jb2RlPgotICAgICAqIGlzIDxj
b2RlPiBudWxsIDwvY29kZT4gLCBpbnNlcnQgPGNvZGU+IG5ld0NoaWxkIDwvY29kZT4gYXQgdGhl
Ci0gICAgICogZW5kIG9mIHRoZSBsaXN0IG9mIGNoaWxkcmVuLgotICAgICAqCi0gICAgICogIElm
IDxjb2RlPiBuZXdDaGlsZCA8L2NvZGU+IGlzIGEgPGNvZGU+IERvY3VtZW50RnJhZ21lbnQKLSAg
ICAgKiA8L2NvZGU+IG9iamVjdCwgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcmUgaW5zZXJ0ZWQsIGlu
IHRoZSBzYW1lCi0gICAgICogb3JkZXIsIGJlZm9yZSA8Y29kZT4gcmVmQ2hpbGQgPC9jb2RlPiAu
IElmIHRoZSA8Y29kZT4gbmV3Q2hpbGQKLSAgICAgKiA8L2NvZGU+IGlzIGFscmVhZHkgaW4gdGhl
IHRyZWUsIGl0IGlzIGZpcnN0IHJlbW92ZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV3Q2hp
bGQgVGhlIG5vZGUgdG8gaW5zZXJ0LgotICAgICAqCi0gICAgICogQHBhcmFtIHJlZkNoaWxkIFRo
ZSByZWZlcmVuY2Ugbm9kZSwgaS5lLiwgdGhlIG5vZGUgYmVmb3JlIHdoaWNoCi0gICAgICogdGhl
IG5ldyBub2RlIG11c3QgYmUgaW5zZXJ0ZWQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBu
b2RlIGJlaW5nIGluc2VydGVkLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01FeGNlcHRp
b24KLSAgICAgKiBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMg
b2YgYSB0eXBlIHRoYXQKLSAgICAgKiBkb2VzIG5vdCBhbGxvdyBjaGlsZHJlbiBvZiB0aGUgdHlw
ZSBvZiB0aGUgPGNvZGU+IG5ld0NoaWxkCi0gICAgICogPC9jb2RlPiBub2RlLCBvciBpZiB0aGUg
bm9kZSB0byBpbnNlcnQgaXMgb25lIG9mIHRoaXMgbm9kZSdzCi0gICAgICogYW5jZXN0b3JzLgot
ICAgICAqCi0gICAgICogIFdST05HX0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBuZXdD
aGlsZCA8L2NvZGU+IHdhcwotICAgICAqIGNyZWF0ZWQgZnJvbSBhIGRpZmZlcmVudCBkb2N1bWVu
dCB0aGFuIHRoZSBvbmUgdGhhdCBjcmVhdGVkCi0gICAgICogdGhpcyBub2RlLgotICAgICAqCi0g
ICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9kZSBp
cyByZWFkb25seS4KLSAgICAgKgotICAgICAqICBOT1RfRk9VTkRfRVJSOiBSYWlzZWQgaWYgPGNv
ZGU+IHJlZkNoaWxkIDwvY29kZT4gaXMgbm90IGEKLSAgICAgKiBjaGlsZCBvZiB0aGlzIG5vZGUu
Ci0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIGluc2VydEJlZm9yZSAoIGNvbnN0IE5vZGUgJm5l
d0NoaWxkLCBjb25zdCBOb2RlICZyZWZDaGlsZCApOwotCi0gICAgLyoqCi0gICAgICogUmVwbGFj
ZXMgdGhlIGNoaWxkIG5vZGUgPGNvZGU+IG9sZENoaWxkIDwvY29kZT4gd2l0aCA8Y29kZT4KLSAg
ICAgKiBuZXdDaGlsZCA8L2NvZGU+IGluIHRoZSBsaXN0IG9mIGNoaWxkcmVuLCBhbmQgcmV0dXJu
cyB0aGUKLSAgICAgKiA8Y29kZT4gb2xkQ2hpbGQgPC9jb2RlPiBub2RlLiBJZiB0aGUgPGNvZGU+
IG5ld0NoaWxkIDwvY29kZT4gaXMKLSAgICAgKiBhbHJlYWR5IGluIHRoZSB0cmVlLCBpdCBpcyBm
aXJzdCByZW1vdmVkLgotICAgICAqCi0gICAgICogQHBhcmFtIG5ld0NoaWxkIFRoZSBuZXcgbm9k
ZSB0byBwdXQgaW4gdGhlIGNoaWxkIGxpc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gb2xkQ2hp
bGQgVGhlIG5vZGUgYmVpbmcgcmVwbGFjZWQgaW4gdGhlIGxpc3QuCi0gICAgICoKLSAgICAgKiBA
cmV0dXJuIFRoZSBub2RlIHJlcGxhY2VkLgotICAgICAqCi0gICAgICogQGV4Y2VwdGlvbiBET01F
eGNlcHRpb24KLSAgICAgKiBISUVSQVJDSFlfUkVRVUVTVF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5v
ZGUgaXMgb2YgYSB0eXBlIHRoYXQKLSAgICAgKiBkb2VzIG5vdCBhbGxvdyBjaGlsZHJlbiBvZiB0
aGUgdHlwZSBvZiB0aGUgPGNvZGU+IG5ld0NoaWxkCi0gICAgICogPC9jb2RlPiBub2RlLCBvciBp
dCB0aGUgbm9kZSB0byBwdXQgaW4gaXMgb25lIG9mIHRoaXMgbm9kZSdzCi0gICAgICogYW5jZXN0
b3JzLgotICAgICAqCi0gICAgICogIFdST05HX0RPQ1VNRU5UX0VSUjogUmFpc2VkIGlmIDxjb2Rl
PiBuZXdDaGlsZCA8L2NvZGU+IHdhcwotICAgICAqIGNyZWF0ZWQgZnJvbSBhIGRpZmZlcmVudCBk
b2N1bWVudCB0aGFuIHRoZSBvbmUgdGhhdCBjcmVhdGVkCi0gICAgICogdGhpcyBub2RlLgotICAg
ICAqCi0gICAgICogIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMg
bm9kZSBpcyByZWFkb25seS4KLSAgICAgKgotICAgICAqICBOT1RfRk9VTkRfRVJSOiBSYWlzZWQg
aWYgPGNvZGU+IG9sZENoaWxkIDwvY29kZT4gaXMgbm90IGEKLSAgICAgKiBjaGlsZCBvZiB0aGlz
IG5vZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIHJlcGxhY2VDaGlsZCAoIGNvbnN0IE5v
ZGUgJm5ld0NoaWxkLCBjb25zdCBOb2RlICZvbGRDaGlsZCApOwotCi0gICAgLyoqCi0gICAgICog
UmVtb3ZlcyB0aGUgY2hpbGQgbm9kZSBpbmRpY2F0ZWQgYnkgPGNvZGU+IG9sZENoaWxkIDwvY29k
ZT4KLSAgICAgKiBmcm9tIHRoZSBsaXN0IG9mIGNoaWxkcmVuLCBhbmQgcmV0dXJucyBpdC4KLSAg
ICAgKgotICAgICAqIEBwYXJhbSBvbGRDaGlsZCBUaGUgbm9kZSBiZWluZyByZW1vdmVkLgotICAg
ICAqCi0gICAgICogQHJldHVybiBUaGUgbm9kZSByZW1vdmVkLgotICAgICAqCi0gICAgICogQGV4
Y2VwdGlvbiBET01FeGNlcHRpb24KLSAgICAgKiBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6
IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCi0gICAgICoKLSAgICAgKiAgTk9UX0ZP
VU5EX0VSUjogUmFpc2VkIGlmIDxjb2RlPiBvbGRDaGlsZCA8L2NvZGU+IGlzIG5vdCBhCi0gICAg
ICogY2hpbGQgb2YgdGhpcyBub2RlLgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSByZW1vdmVD
aGlsZCAoIGNvbnN0IE5vZGUgJm9sZENoaWxkICk7Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIHRo
ZSBub2RlIDxjb2RlPiBuZXdDaGlsZCA8L2NvZGU+IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3Qgb2YK
LSAgICAgKiBjaGlsZHJlbiBvZiB0aGlzIG5vZGUuIElmIHRoZSA8Y29kZT4gbmV3Q2hpbGQgPC9j
b2RlPiBpcwotICAgICAqIGFscmVhZHkgaW4gdGhlIHRyZWUsIGl0IGlzIGZpcnN0IHJlbW92ZWQu
Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gbmV3Q2hpbGQgVGhlIG5vZGUgdG8gYWRkLgotICAgICAq
Ci0gICAgICogIElmIGl0IGlzIGEgPGNvZGU+IERvY3VtZW50RnJhZ21lbnQgPC9jb2RlPiBvYmpl
Y3QsIHRoZSBlbnRpcmUKLSAgICAgKiBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgZnJhZ21lbnQg
YXJlIG1vdmVkIGludG8gdGhlIGNoaWxkIGxpc3QKLSAgICAgKiBvZiB0aGlzIG5vZGUKLSAgICAg
KgotICAgICAqIEByZXR1cm4gVGhlIG5vZGUgYWRkZWQuCi0gICAgICoKLSAgICAgKiBAZXhjZXB0
aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogUmFpc2VkIGlm
IHRoaXMgbm9kZSBpcyBvZiBhIHR5cGUgdGhhdAotICAgICAqIGRvZXMgbm90IGFsbG93IGNoaWxk
cmVuIG9mIHRoZSB0eXBlIG9mIHRoZSA8Y29kZT4gbmV3Q2hpbGQKLSAgICAgKiA8L2NvZGU+IG5v
ZGUsIG9yIGlmIHRoZSBub2RlIHRvIGFwcGVuZCBpcyBvbmUgb2YgdGhpcyBub2RlJ3MKLSAgICAg
KiBhbmNlc3RvcnMuCi0gICAgICoKLSAgICAgKiAgV1JPTkdfRE9DVU1FTlRfRVJSOiBSYWlzZWQg
aWYgPGNvZGU+IG5ld0NoaWxkIDwvY29kZT4gd2FzCi0gICAgICogY3JlYXRlZCBmcm9tIGEgZGlm
ZmVyZW50IGRvY3VtZW50IHRoYW4gdGhlIG9uZSB0aGF0IGNyZWF0ZWQKLSAgICAgKiB0aGlzIG5v
ZGUuCi0gICAgICoKLSAgICAgKiAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQg
aWYgdGhpcyBub2RlIGlzIHJlYWRvbmx5LgotICAgICAqCi0gICAgICovCi0gICAgTm9kZSBhcHBl
bmRDaGlsZCAoIGNvbnN0IE5vZGUgJm5ld0NoaWxkICk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlz
IGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGFsbG93IGVhc3kgZGV0ZXJtaW5hdGlvbiBvZgot
ICAgICAqIHdoZXRoZXIgYSBub2RlIGhhcyBhbnkgY2hpbGRyZW4uCi0gICAgICoKLSAgICAgKiBA
cmV0dXJuIDxjb2RlPiB0cnVlIDwvY29kZT4gaWYgdGhlIG5vZGUgaGFzIGFueSBjaGlsZHJlbiwK
LSAgICAgKiA8Y29kZT4gZmFsc2UgPC9jb2RlPiBpZiB0aGUgbm9kZSBoYXMgbm8gY2hpbGRyZW4u
Ci0gICAgICoKLSAgICAgKi8KLSAgICBib29sIGhhc0NoaWxkTm9kZXMgKCAgKTsKLQotICAgIC8q
KgotICAgICAqIFJldHVybnMgYSBkdXBsaWNhdGUgb2YgdGhpcyBub2RlLCBpLmUuLCBzZXJ2ZXMg
YXMgYSBnZW5lcmljCi0gICAgICogY29weSBjb25zdHJ1Y3RvciBmb3Igbm9kZXMuIFRoZSBkdXBs
aWNhdGUgbm9kZSBoYXMgbm8gcGFyZW50ICgKLSAgICAgKiA8Y29kZT4gcGFyZW50Tm9kZSA8L2Nv
ZGU+IHJldHVybnMgPGNvZGU+IG51bGwgPC9jb2RlPiAuKS4KLSAgICAgKgotICAgICAqICBDbG9u
aW5nIGFuIDxjb2RlPiBFbGVtZW50IDwvY29kZT4gY29waWVzIGFsbCBhdHRyaWJ1dGVzIGFuZAot
ICAgICAqIHRoZWlyIHZhbHVlcywgaW5jbHVkaW5nIHRob3NlIGdlbmVyYXRlZCBieSB0aGUgWE1M
IHByb2Nlc3NvciB0bwotICAgICAqIHJlcHJlc2VudCBkZWZhdWx0ZWQgYXR0cmlidXRlcywgYnV0
IHRoaXMgbWV0aG9kIGRvZXMgbm90IGNvcHkKLSAgICAgKiBhbnkgdGV4dCBpdCBjb250YWlucyB1
bmxlc3MgaXQgaXMgYSBkZWVwIGNsb25lLCBzaW5jZSB0aGUgdGV4dAotICAgICAqIGlzIGNvbnRh
aW5lZCBpbiBhIGNoaWxkIDxjb2RlPiBUZXh0IDwvY29kZT4gbm9kZS4gQ2xvbmluZyBhbnkKLSAg
ICAgKiBvdGhlciB0eXBlIG9mIG5vZGUgc2ltcGx5IHJldHVybnMgYSBjb3B5IG9mIHRoaXMgbm9k
ZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBkZWVwIElmIDxjb2RlPiB0cnVlIDwvY29kZT4gLCBy
ZWN1cnNpdmVseSBjbG9uZSB0aGUKLSAgICAgKiBzdWJ0cmVlIHVuZGVyIHRoZSBzcGVjaWZpZWQg
bm9kZTsgaWYgPGNvZGU+IGZhbHNlIDwvY29kZT4gLAotICAgICAqIGNsb25lIG9ubHkgdGhlIG5v
ZGUgaXRzZWxmIChhbmQgaXRzIGF0dHJpYnV0ZXMsIGlmIGl0IGlzIGFuCi0gICAgICogPGNvZGU+
IEVsZW1lbnQgPC9jb2RlPiApLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgZHVwbGljYXRl
IG5vZGUuCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIGNsb25lTm9kZSAoIGJvb2wgZGVlcCAp
OwotCi0gICAgLyoqCi0gICAgICogTW9kaWZpZWQgaW4gRE9NIExldmVsIDIKLSAgICAgKgotICAg
ICAqIFB1dHMgYWxsIFRleHQgbm9kZXMgaW4gdGhlIGZ1bGwgZGVwdGggb2YgdGhlIHN1Yi10cmVl
IHVuZGVybmVhdGggdGhpcwotICAgICAqIE5vZGUsIGluY2x1ZGluZyBhdHRyaWJ1dGUgbm9kZXMs
IGludG8gYSAibm9ybWFsIiBmb3JtIHdoZXJlIG9ubHkKLSAgICAgKiBzdHJ1Y3R1cmUgKGUuZy4s
IGVsZW1lbnRzLCBjb21tZW50cywgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIENEQVRBCi0gICAg
ICogc2VjdGlvbnMsIGFuZCBlbnRpdHkgcmVmZXJlbmNlcykgc2VwYXJhdGVzIFRleHQgbm9kZXMs
IGkuZS4sIHRoZXJlIGFyZQotICAgICAqIG5laXRoZXIgYWRqYWNlbnQgVGV4dCBub2RlcyBub3Ig
ZW1wdHkgVGV4dCBub2Rlcy4gVGhpcyBjYW4gYmUgdXNlZCB0bwotICAgICAqIGVuc3VyZSB0aGF0
IHRoZSBET00gdmlldyBvZiBhIGRvY3VtZW50IGlzIHRoZSBzYW1lIGFzIGlmIGl0IHdlcmUgc2F2
ZWQKLSAgICAgKiBhbmQgcmUtbG9hZGVkLCBhbmQgaXMgdXNlZnVsIHdoZW4gb3BlcmF0aW9ucyAo
c3VjaCBhcyBYUG9pbnRlcgotICAgICAqIFtYUG9pbnRlcl0gbG9va3VwcykgdGhhdCBkZXBlbmQg
b24gYSBwYXJ0aWN1bGFyIGRvY3VtZW50IHRyZWUgc3RydWN0dXJlCi0gICAgICogYXJlIHRvIGJl
IHVzZWQuCi0gICAgICoKLSAgICAgKiBOb3RlOiBJbiBjYXNlcyB3aGVyZSB0aGUgZG9jdW1lbnQg
Y29udGFpbnMgQ0RBVEFTZWN0aW9ucywgdGhlIG5vcm1hbGl6ZQotICAgICAqIG9wZXJhdGlvbiBh
bG9uZSBtYXkgbm90IGJlIHN1ZmZpY2llbnQsIHNpbmNlIFhQb2ludGVycyBkbyBub3QKLSAgICAg
KiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gVGV4dCBub2RlcyBhbmQgQ0RBVEFTZWN0aW9uIG5vZGVz
LgotICAgICAqLwotICAgIHZvaWQgbm9ybWFsaXplICggICk7Ci0KLSAgICAvKioKLSAgICAgKiBJ
bnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi0gICAgICoKLSAgICAgKiBUZXN0cyB3aGV0aGVyIHRo
ZSBET00gaW1wbGVtZW50YXRpb24gaW1wbGVtZW50cyBhIHNwZWNpZmljIGZlYXR1cmUgYW5kCi0g
ICAgICogdGhhdCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGlzIG5vZGUuCi0gICAgICoKLSAg
ICAgKiBAcGFyYW0gZmVhdHVyZSBUaGUgbmFtZSBvZiB0aGUgZmVhdHVyZSB0byB0ZXN0LiBUaGlz
IGlzIHRoZSBzYW1lIG5hbWUKLSAgICAgKiB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBtZXRo
b2QgaGFzRmVhdHVyZSBvbiBET01JbXBsZW1lbnRhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJh
bSB2ZXJzaW9uIFRoaXMgaXMgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBmZWF0dXJlIHRvIHRl
c3QuIEluCi0gICAgICogTGV2ZWwgMiwgdmVyc2lvbiAxLCB0aGlzIGlzIHRoZSBzdHJpbmcgIjIu
MCIuIElmIHRoZSB2ZXJzaW9uIGlzIG5vdAotICAgICAqIHNwZWNpZmllZCwgc3VwcG9ydGluZyBh
bnkgdmVyc2lvbiBvZiB0aGUgZmVhdHVyZSB3aWxsIGNhdXNlIHRoZSBtZXRob2QKLSAgICAgKiB0
byByZXR1cm4gdHJ1ZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyB0cnVlIGlmIHRo
ZSBzcGVjaWZpZWQgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgb24gdGhpcyBub2RlLAotICAgICAqIGZh
bHNlIG90aGVyd2lzZS4KLSAgICAgKi8KLSAgICBib29sIGlzU3VwcG9ydGVkKCBjb25zdCBET01T
dHJpbmcgJmZlYXR1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZ2
ZXJzaW9uICkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAgKiBJbnRyb2R1Y2VkIGluIERPTSBMZXZl
bCAyCi0gICAgICoKLSAgICAgKiBUaGUgbmFtZXNwYWNlIFVSSSBvZiB0aGlzIG5vZGUsIG9yIG51
bGwgaWYgaXQgaXMgdW5zcGVjaWZpZWQuCi0gICAgICogVGhpcyBpcyBub3QgYSBjb21wdXRlZCB2
YWx1ZSB0aGF0IGlzIHRoZSByZXN1bHQgb2YgYSBuYW1lc3BhY2UgbG9va3VwCi0gICAgICogYmFz
ZWQgb24gYW4gZXhhbWluYXRpb24gb2YgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgaW4gc2Nv
cGUuIEl0IGlzCi0gICAgICogbWVyZWx5IHRoZSBuYW1lc3BhY2UgVVJJIGdpdmVuIGF0IGNyZWF0
aW9uIHRpbWUuIEZvciBub2RlcyBvZiBhbnkgdHlwZQotICAgICAqIG90aGVyIHRoYW4gRUxFTUVO
VF9OT0RFIGFuZCBBVFRSSUJVVEVfTk9ERSBhbmQgbm9kZXMgY3JlYXRlZCB3aXRoIGEgRE9NCi0g
ICAgICogTGV2ZWwgMSBtZXRob2QsIHN1Y2ggYXMgY3JlYXRlRWxlbWVudCBmcm9tIHRoZSBEb2N1
bWVudCBpbnRlcmZhY2UsIHRoaXMKLSAgICAgKiBpcyBhbHdheXMgbnVsbC4KLSAgICAgKgotICAg
ICAqIE5vdGU6IFBlciB0aGUgTmFtZXNwYWNlcyBpbiBYTUwgU3BlY2lmaWNhdGlvbiBbTmFtZXNw
YWNlc10gYW4gYXR0cmlidXRlCi0gICAgICogZG9lcyBub3QgaW5oZXJpdCBpdHMgbmFtZXNwYWNl
IGZyb20gdGhlIGVsZW1lbnQgaXQgaXMgYXR0YWNoZWQgdG8uIElmIGFuCi0gICAgICogYXR0cmli
dXRlIGlzIG5vdCBleHBsaWNpdGx5IGdpdmVuIGEgbmFtZXNwYWNlLCBpdCBzaW1wbHkgaGFzIG5v
Ci0gICAgICogbmFtZXNwYWNlLgotICAgICAqLwotICAgIERPTVN0cmluZyBuYW1lc3BhY2VVUkko
ICApIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgot
ICAgICAqCi0gICAgICogVGhlIG5hbWVzcGFjZSBwcmVmaXggb2YgdGhpcyBub2RlLCBvciBudWxs
IGlmIGl0IGlzIHVuc3BlY2lmaWVkLgotICAgICAqIE5vdGUgdGhhdCBzZXR0aW5nIHRoaXMgYXR0
cmlidXRlLCB3aGVuIHBlcm1pdHRlZCwgY2hhbmdlcyB0aGUgbm9kZU5hbWUKLSAgICAgKiBhdHRy
aWJ1dGUsIHdoaWNoIGhvbGRzIHRoZSBxdWFsaWZpZWQgbmFtZSwgYXMgd2VsbCBhcyB0aGUgdGFn
TmFtZSBhbmQKLSAgICAgKiBuYW1lIGF0dHJpYnV0ZXMgb2YgdGhlIEVsZW1lbnQgYW5kIEF0dHIg
aW50ZXJmYWNlcywgd2hlbiBhcHBsaWNhYmxlLgotICAgICAqIE5vdGUgYWxzbyB0aGF0IGNoYW5n
aW5nIHRoZSBwcmVmaXggb2YgYW4gYXR0cmlidXRlIHRoYXQgaXMga25vd24gdG8gaGF2ZQotICAg
ICAqIGEgZGVmYXVsdCB2YWx1ZSwgZG9lcyBub3QgbWFrZSBhIG5ldyBhdHRyaWJ1dGUgd2l0aCB0
aGUgZGVmYXVsdCB2YWx1ZQotICAgICAqIGFuZCB0aGUgb3JpZ2luYWwgcHJlZml4IGFwcGVhciwg
c2luY2UgdGhlIG5hbWVzcGFjZVVSSSBhbmQgbG9jYWxOYW1lIGRvCi0gICAgICogbm90IGNoYW5n
ZS4KLSAgICAgKiBGb3Igbm9kZXMgb2YgYW55IHR5cGUgb3RoZXIgdGhhbiBFTEVNRU5UX05PREUg
YW5kIEFUVFJJQlVURV9OT0RFIGFuZAotICAgICAqIG5vZGVzIGNyZWF0ZWQgd2l0aCBhIERPTSBM
ZXZlbCAxIG1ldGhvZCwgc3VjaCBhcyBjcmVhdGVFbGVtZW50IGZyb20gdGhlCi0gICAgICogRG9j
dW1lbnQgaW50ZXJmYWNlLCB0aGlzIGlzIGFsd2F5cyBudWxsLgotICAgICAqLwotICAgIERPTVN0
cmluZyBwcmVmaXgoICApIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogc2VlIEByZWYgcHJlZml4
Ci0gICAgICoKLSAgICAgKiBAZXhjZXB0aW9uIERPTUV4Y2VwdGlvbgotICAgICAqIElOVkFMSURf
Q0hBUkFDVEVSX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGNvbnRhaW5zIGFu
Ci0gICAgICogaWxsZWdhbCBjaGFyYWN0ZXIuCi0gICAgICoKLSAgICAgKiBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCi0gICAgICoK
LSAgICAgKiBOQU1FU1BBQ0VfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMg
bWFsZm9ybWVkLCBpZiB0aGUKLSAgICAgKiBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIG51
bGwsIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzICJ4bWwiIGFuZAotICAgICAqIHRoZSBuYW1l
c3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIGRpZmZlcmVudCBmcm9tCi0gICAgICogImh0dHA6Ly93
d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsIGlmIHRoaXMgbm9kZSBpcyBhbiBhdHRyaWJ1
dGUgYW5kCi0gICAgICogdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInhtbG5zIiBhbmQgdGhlIG5h
bWVzcGFjZVVSSSBvZiB0aGlzIG5vZGUgaXMKLSAgICAgKiBkaWZmZXJlbnQgZnJvbSAiaHR0cDov
L3d3dy53My5vcmcvMjAwMC94bWxucy8iLCBvciBpZiB0aGlzIG5vZGUgaXMgYW4KLSAgICAgKiBh
dHRyaWJ1dGUgYW5kIHRoZSBxdWFsaWZpZWROYW1lIG9mIHRoaXMgbm9kZSBpcyAieG1sbnMiIFtO
YW1lc3BhY2VzXS4KLSAgICAgKi8KLSAgICB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcg
JnByZWZpeCApOwotCi0gICAgLyoqCi0gICAgICogSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgot
ICAgICAqCi0gICAgICogUmV0dXJucyB0aGUgbG9jYWwgcGFydCBvZiB0aGUgcXVhbGlmaWVkIG5h
bWUgb2YgdGhpcyBub2RlLgotICAgICAqIEZvciBub2RlcyBvZiBhbnkgdHlwZSBvdGhlciB0aGFu
IEVMRU1FTlRfTk9ERSBhbmQgQVRUUklCVVRFX05PREUgYW5kCi0gICAgICogbm9kZXMgY3JlYXRl
ZCB3aXRoIGEgRE9NIExldmVsIDEgbWV0aG9kLCBzdWNoIGFzIGNyZWF0ZUVsZW1lbnQgZnJvbSB0
aGUKLSAgICAgKiBEb2N1bWVudCBpbnRlcmZhY2UsIHRoaXMgaXMgYWx3YXlzIG51bGwuCi0gICAg
ICovCi0gICAgRE9NU3RyaW5nIGxvY2FsTmFtZSggICkgY29uc3Q7Ci0KLSAgICAvKioKLSAgICAg
KiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBub2RlIChpZiBpdCBpcyBhbiBlbGVtZW50KSBoYXMgYW55
IGF0dHJpYnV0ZXMuCi0gICAgICogQHJldHVybiBhIGJvb2xlYW4uIFRydWUgaWYgdGhpcyBub2Rl
IGhhcyBhbnkgYXR0cmlidXRlcywgZmFsc2Ugb3RoZXJ3aXNlLgotICAgICAqICBJbnRyb2R1Y2Vk
IGluIERPTSBMZXZlbCAyCi0gICAgICovCi0gICAgYm9vbCBoYXNBdHRyaWJ1dGVzICggICk7Ci0K
LSAgICAvKioKLSAgICAgKiBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi0gICAgICogVGhpcyBt
ZXRob2QgaXMgZnJvbSB0aGUgRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICoKLSAgICAgKiBU
aGlzIG1ldGhvZCBhbGxvd3MgdGhlIHJlZ2lzdHJhdGlvbiBvZiBldmVudCBsaXN0ZW5lcnMgb24g
dGhlIGV2ZW50Ci0gICAgICogdGFyZ2V0LiBJZiBhbiBFdmVudExpc3RlbmVyIGlzIGFkZGVkIHRv
IGFuIEV2ZW50VGFyZ2V0IHdoaWxlIGl0IGlzCi0gICAgICogcHJvY2Vzc2luZyBhbiBldmVudCwg
aXQgd2lsbCBub3QgYmUgdHJpZ2dlcmVkIGJ5IHRoZSBjdXJyZW50IGFjdGlvbnMgYnV0Ci0gICAg
ICogbWF5IGJlIHRyaWdnZXJlZCBkdXJpbmcgYSBsYXRlciBzdGFnZSBvZiBldmVudCBmbG93LCBz
dWNoIGFzIHRoZQotICAgICAqIGJ1YmJsaW5nIHBoYXNlLgotICAgICAqCi0gICAgICogSWYgbXVs
dGlwbGUgaWRlbnRpY2FsIEV2ZW50TGlzdGVuZXJzIGFyZSByZWdpc3RlcmVkIG9uIHRoZSBzYW1l
Ci0gICAgICogRXZlbnRUYXJnZXQgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIHRoZSBkdXBsaWNh
dGUgaW5zdGFuY2VzIGFyZQotICAgICAqIGRpc2NhcmRlZC4gVGhleSBkbyBub3QgY2F1c2UgdGhl
IEV2ZW50TGlzdGVuZXIgdG8gYmUgY2FsbGVkIHR3aWNlIGFuZAotICAgICAqIHNpbmNlIHRoZXkg
YXJlIGRpc2NhcmRlZCB0aGV5IGRvIG5vdCBuZWVkIHRvIGJlIHJlbW92ZWQgd2l0aCB0aGUKLSAg
ICAgKiByZW1vdmVFdmVudExpc3RlbmVyIG1ldGhvZC4gUGFyYW1ldGVycwotICAgICAqCi0gICAg
ICogQHBhcmFtIHR5cGUgVGhlIGV2ZW50IHR5cGUgZm9yIHdoaWNoIHRoZSB1c2VyIGlzIHJlZ2lz
dGVyaW5nCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbGlzdGVuZXIgVGhlIGxpc3RlbmVyIHBhcmFt
ZXRlciB0YWtlcyBhbiBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkKLSAgICAgKiB0aGUgdXNlciB3
aGljaCBjb250YWlucyB0aGUgbWV0aG9kcyB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgb2Nj
dXJzLgotICAgICAqCi0gICAgICogQHBhcmFtIHVzZUNhcHR1cmUgSWYgdHJ1ZSwgdXNlQ2FwdHVy
ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlciB3aXNoZXMgdG8KLSAgICAgKiBpbml0aWF0ZSBjYXB0
dXJlLiBBZnRlciBpbml0aWF0aW5nIGNhcHR1cmUsIGFsbCBldmVudHMgb2YgdGhlIHNwZWNpZmll
ZAotICAgICAqIHR5cGUgd2lsbCBiZSBkaXNwYXRjaGVkIHRvIHRoZSByZWdpc3RlcmVkIEV2ZW50
TGlzdGVuZXIgYmVmb3JlIGJlaW5nCi0gICAgICogZGlzcGF0Y2hlZCB0byBhbnkgRXZlbnRUYXJn
ZXRzIGJlbmVhdGggdGhlbSBpbiB0aGUgdHJlZS4gRXZlbnRzIHdoaWNoCi0gICAgICogYXJlIGJ1
YmJsaW5nIHVwd2FyZCB0aHJvdWdoIHRoZSB0cmVlIHdpbGwgbm90IHRyaWdnZXIgYW4gRXZlbnRM
aXN0ZW5lcgotICAgICAqIGRlc2lnbmF0ZWQgdG8gdXNlIGNhcHR1cmUuCi0gICAgICovCi0gICAg
dm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IERPTVN0cmluZyAmdHlwZSwKLQkJCSAgRXZlbnRM
aXN0ZW5lciAqbGlzdGVuZXIsCi0JCQkgIGJvb2wgdXNlQ2FwdHVyZSk7Ci0KLSAgICAvKioKLSAg
ICAgKiBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyCi0gICAgICogVGhpcyBtZXRob2QgaXMgZnJv
bSB0aGUgRXZlbnRUYXJnZXQgaW50ZXJmYWNlCi0gICAgICoKLSAgICAgKiBUaGlzIG1ldGhvZCBh
bGxvd3MgdGhlIHJlbW92YWwgb2YgZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIGV2ZW50IHRhcmdl
dC4KLSAgICAgKiBJZiBhbiBFdmVudExpc3RlbmVyIGlzIHJlbW92ZWQgZnJvbSBhbiBFdmVudFRh
cmdldCB3aGlsZSBpdCBpcwotICAgICAqIHByb2Nlc3NpbmcgYW4gZXZlbnQsIGl0IHdpbGwgbm90
IGJlIHRyaWdnZXJlZCBieSB0aGUgY3VycmVudCBhY3Rpb25zLgotICAgICAqCi0gICAgICogRXZl
bnRMaXN0ZW5lcnMgY2FuIG5ldmVyIGJlIGludm9rZWQgYWZ0ZXIgYmVpbmcgcmVtb3ZlZC4KLSAg
ICAgKgotICAgICAqIENhbGxpbmcgcmVtb3ZlRXZlbnRMaXN0ZW5lciB3aXRoIGFyZ3VtZW50cyB3
aGljaCBkbyBub3QgaWRlbnRpZnkgYW55Ci0gICAgICogY3VycmVudGx5IHJlZ2lzdGVyZWQgRXZl
bnRMaXN0ZW5lciBvbiB0aGUgRXZlbnRUYXJnZXQgaGFzIG5vIGVmZmVjdC4KLSAgICAgKgotICAg
ICAqIEBwYXJhbSB0eXBlIFNwZWNpZmllcyB0aGUgZXZlbnQgdHlwZSBvZiB0aGUgRXZlbnRMaXN0
ZW5lciBiZWluZyByZW1vdmVkLgotICAgICAqCi0gICAgICogQHBhcmFtIGxpc3RlbmVyIFRoZSBF
dmVudExpc3RlbmVyIHBhcmFtZXRlciBpbmRpY2F0ZXMgdGhlIEV2ZW50TGlzdGVuZXIKLSAgICAg
KiB0byBiZSByZW1vdmVkLgotICAgICAqCi0gICAgICogQHBhcmFtIHVzZUNhcHR1cmUgU3BlY2lm
aWVzIHdoZXRoZXIgdGhlIEV2ZW50TGlzdGVuZXIgYmVpbmcgcmVtb3ZlZCB3YXMKLSAgICAgKiBy
ZWdpc3RlcmVkIGFzIGEgY2FwdHVyaW5nIGxpc3RlbmVyIG9yIG5vdC4gSWYgYSBsaXN0ZW5lciB3
YXMgcmVnaXN0ZXJlZAotICAgICAqIHR3aWNlLCBvbmUgd2l0aCBjYXB0dXJlIGFuZCBvbmUgd2l0
aG91dCwgZWFjaCBtdXN0IGJlIHJlbW92ZWQKLSAgICAgKiBzZXBhcmF0ZWx5LiBSZW1vdmFsIG9m
IGEgY2FwdHVyaW5nIGxpc3RlbmVyIGRvZXMgbm90IGFmZmVjdCBhCi0gICAgICogbm9uLWNhcHR1
cmluZyB2ZXJzaW9uIG9mIHRoZSBzYW1lIGxpc3RlbmVyLCBhbmQgdmljZSB2ZXJzYS4KLSAgICAg
Ki8KLQotICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBET01TdHJpbmcgJnR5cGUs
Ci0JCQkgICAgIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLAotCQkJICAgICBib29sIHVzZUNhcHR1
cmUpOwotCi0gICAgLyoqCi0gICAgICogSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMgotICAgICAq
IFRoaXMgbWV0aG9kIGlzIGZyb20gdGhlIEV2ZW50VGFyZ2V0IGludGVyZmFjZQotICAgICAqCi0g
ICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHRoZSBkaXNwYXRjaCBvZiBldmVudHMgaW50byB0aGUg
aW1wbGVtZW50YXRpb25zIGV2ZW50Ci0gICAgICogbW9kZWwuIEV2ZW50cyBkaXNwYXRjaGVkIGlu
IHRoaXMgbWFubmVyIHdpbGwgaGF2ZSB0aGUgc2FtZSBjYXB0dXJpbmcgYW5kCi0gICAgICogYnVi
YmxpbmcgYmVoYXZpb3IgYXMgZXZlbnRzIGRpc3BhdGNoZWQgZGlyZWN0bHkgYnkgdGhlIGltcGxl
bWVudGF0aW9uLgotICAgICAqIFRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50IGlzIHRoZSBFdmVudFRh
cmdldCBvbiB3aGljaCBkaXNwYXRjaEV2ZW50IGlzCi0gICAgICogY2FsbGVkLgotICAgICAqCi0g
ICAgICogQHBhcmFtIGV2dCBTcGVjaWZpZXMgdGhlIGV2ZW50IHR5cGUsIGJlaGF2aW9yLCBhbmQg
Y29udGV4dHVhbAotICAgICAqIGluZm9ybWF0aW9uIHRvIGJlIHVzZWQgaW4gcHJvY2Vzc2luZyB0
aGUgZXZlbnQuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSByZXR1cm4gdmFsdWUgb2YgZGlz
cGF0Y2hFdmVudCBpbmRpY2F0ZXMgd2hldGhlciBhbnkgb2YgdGhlCi0gICAgICogbGlzdGVuZXJz
IHdoaWNoIGhhbmRsZWQgdGhlIGV2ZW50IGNhbGxlZCBwcmV2ZW50RGVmYXVsdC4gSWYKLSAgICAg
KiBwcmV2ZW50RGVmYXVsdCB3YXMgY2FsbGVkIHRoZSB2YWx1ZSBpcyBmYWxzZSwgZWxzZSB0aGUg
dmFsdWUgaXMgdHJ1ZS4KLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gRXZlbnRFeGNlcHRpb24K
LSAgICAgKiBVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUjogUmFpc2VkIGlmIHRoZSBFdmVudCdz
IHR5cGUgd2FzIG5vdCBzcGVjaWZpZWQKLSAgICAgKiBieSBpbml0aWFsaXppbmcgdGhlIGV2ZW50
IGJlZm9yZSBkaXNwYXRjaEV2ZW50IHdhcyBjYWxsZWQuIFNwZWNpZmljYXRpb24KLSAgICAgKiBv
ZiB0aGUgRXZlbnQncyB0eXBlIGFzIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nIHdpbGwgYWxzbyB0
cmlnZ2VyIHRoaXMKLSAgICAgKiBleGNlcHRpb24uCi0gICAgICovCi0gICAgYm9vbCBkaXNwYXRj
aEV2ZW50KGNvbnN0IEV2ZW50ICZldnQpOwotCi0gICAgLyoqCi0gICAgICogdGVzdHMgaWYgdGhp
cyBOb2RlIGlzIDAuIFVzZWZ1bCBlc3BlY2lhbGx5LCBpZiBjYXN0aW5nIHRvIGEgZGVyaXZlZAot
ICAgICAqIGNsYXNzOgotICAgICAqCi0gICAgICogPHByZT4KLSAgICAgKiBOb2RlIG4gPSAuLi4u
LjsKLSAgICAgKiAvLyB0cnkgdG8gY29udmVydCBpbnRvIGFuIEVsZW1lbnQ6Ci0gICAgICogRWxl
bWVudCBlID0gbjsKLSAgICAgKiBpZiggZS5pc051bGwoKSApCi0gICAgICogICBrZERlYnVnKDMw
MCkgPDwgIm5vZGUgaXNuJ3QgYW4gZWxlbWVudCBub2RlIiA8PCBlbmRsOwotICAgICAqIDwvcHJl
PgotICAgICAqLwotICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gaW1wbCA9PSAwOyB9
Ci0KLSAgICAvKioKLSAgICAgKiBAaW50ZXJuYWwgaGFuZGxlIHRvIHRoZSBpbXBsZW1lbnRhdGlv
biBvYmplY3QKLSAgICAgKi8KLSAgICBOb2RlSW1wbCAqaGFuZGxlKCkgY29uc3QgeyByZXR1cm4g
aW1wbDsgfQotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsIHJldHVybnMgdGhlIGluZGV4IG9m
IGEgbm9kZQotICAgICAqLwotICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3Q7Ci0gICAgUVN0cmlu
ZyB0b0hUTUwoKTsKLSAgICB2b2lkIGFwcGx5Q2hhbmdlcygpOwotICAgIC8qKgotICAgICAqIG5v
dCBwYXJ0IG9mIHRoZSBET00uCi0gICAgICogQHJldHVybnMgdGhlIGV4YWN0IGNvb3JkaW5hdGVz
IGFuZCBzaXplIG9mIHRoaXMgZWxlbWVudC4KLSAgICAgKi8KLSAgICBRUmVjdCBnZXRSZWN0KCk7
Ci0KLSAgICAvKioKLSAgICAgKiBub3QgcGFydCBvZiB0aGUgRE9NLgotICAgICAqIEByZXR1cm5z
IHdoZXRoZXIgdGhpcyBub2RlIGlzIGNvbnRlbnRlZGl0YWJsZS4KLSAgICAgKi8KLSAgICBib29s
IGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBOb2RlSW1wbCAq
aW1wbDsKLQotI2VuZGlmCi0KLX07Ci0KLQotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0K
LWNsYXNzIE5vZGVMaXN0SW1wbDsKLQotLyoqCi0gKiBUaGUgPGNvZGU+IE5vZGVMaXN0IDwvY29k
ZT4gaW50ZXJmYWNlIHByb3ZpZGVzIHRoZSBhYnN0cmFjdGlvbiBvZgotICogYW4gb3JkZXJlZCBj
b2xsZWN0aW9uIG9mIG5vZGVzLCB3aXRob3V0IGRlZmluaW5nIG9yIGNvbnN0cmFpbmluZwotICog
aG93IHRoaXMgY29sbGVjdGlvbiBpcyBpbXBsZW1lbnRlZC4KLSAqCi0gKiAgVGhlIGl0ZW1zIGlu
IHRoZSA8Y29kZT4gTm9kZUxpc3QgPC9jb2RlPiBhcmUgYWNjZXNzaWJsZSB2aWEgYW4KLSAqIGlu
dGVncmFsIGluZGV4LCBzdGFydGluZyBmcm9tIDAuCi0gKgotICovCi1jbGFzcyBOb2RlTGlzdAot
ewotICAgIGZyaWVuZCBjbGFzcyBFbGVtZW50OwotICAgIGZyaWVuZCBjbGFzcyBOb2RlOwotICAg
IGZyaWVuZCBjbGFzcyBEb2N1bWVudDsKLSAgICBmcmllbmQgY2xhc3MgSFRNTERvY3VtZW50Owot
ICAgIGZyaWVuZCBjbGFzcyBOb2RlTGlzdEltcGw7Ci0KLXB1YmxpYzoKLSAgICBOb2RlTGlzdCgp
OwotICAgIE5vZGVMaXN0KGNvbnN0IE5vZGVMaXN0ICZvdGhlcik7Ci0KLSAgICBOb2RlTGlzdCAm
IG9wZXJhdG9yID0gKGNvbnN0IE5vZGVMaXN0ICZvdGhlcik7Ci0KLSAgICB+Tm9kZUxpc3QoKTsK
LQotICAgIC8qKgotICAgICAqIFRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gdGhlIGxpc3QuIFRoZSBy
YW5nZSBvZiB2YWxpZCBjaGlsZCBub2RlCi0gICAgICogaW5kaWNlcyBpcyAwIHRvIDxjb2RlPiBs
ZW5ndGgtMSA8L2NvZGU+IGluY2x1c2l2ZS4KLSAgICAgKgotICAgICAqLwotICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgPGNvZGU+IGlu
ZGV4IDwvY29kZT4gdGggaXRlbSBpbiB0aGUgY29sbGVjdGlvbi4gSWYKLSAgICAgKiA8Y29kZT4g
aW5kZXggPC9jb2RlPiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG51bWJlciBvZgot
ICAgICAqIG5vZGVzIGluIHRoZSBsaXN0LCB0aGlzIHJldHVybnMgPGNvZGU+IG51bGwgPC9jb2Rl
PiAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggSW5kZXggaW50byB0aGUgY29sbGVjdGlv
bi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIG5vZGUgYXQgdGhlIDxjb2RlPiBpbmRleCA8
L2NvZGU+IHRoIHBvc2l0aW9uIGluIHRoZQotICAgICAqIDxjb2RlPiBOb2RlTGlzdCA8L2NvZGU+
ICwgb3IgPGNvZGU+IG51bGwgPC9jb2RlPiBpZiB0aGF0IGlzIG5vdAotICAgICAqIGEgdmFsaWQg
aW5kZXguCi0gICAgICoKLSAgICAgKi8KLSAgICBOb2RlIGl0ZW0gKCB1bnNpZ25lZCBpbmRleCAp
IGNvbnN0OwotCi0gICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2Yg
dGhlIERPTQotICAgICAqLwotICAgIE5vZGUgaXRlbUJ5SWQgKGNvbnN0IERPTVN0cmluZyYgZWxl
bWVudElkKSBjb25zdDsKLQotICAgIE5vZGVMaXN0SW1wbCAqaGFuZGxlKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc051bGwoKSBjb25zdDsKLQotICAgIE5vZGVMaXN0KGNvbnN0IE5vZGVMaXN0SW1wbCAq
aSk7Ci0KLXByb3RlY3RlZDoKLSAgICBOb2RlTGlzdEltcGwgKmltcGw7CiB9OwogCi0jZW5kaWYK
LQogLyoqCiAgKiBBIERPTVRpbWVTdGFtcCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIG1pbGxpc2Vj
b25kcy4KICAqCkluZGV4OiBraHRtbC9lY21hL2tqc19ldmVudHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2V2ZW50cy5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNzMKZGlmZiAtcCAtdSAtcjEuNzMga2h0bWwvZWNtYS9ranNfZXZl
bnRzLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfZXZlbnRzLmNwcAkzIERlYyAyMDA1IDIwOjI2OjAw
IC0wMDAwCTEuNzMKKysrIGtodG1sL2VjbWEva2pzX2V2ZW50cy5jcHAJNCBEZWMgMjAwNSAxMDoy
NDozMiAtMDAwMApAQCAtNzQsMTEgKzc0LDcgQEAgdm9pZCBKU0Fic3RyYWN0RXZlbnRMaXN0ZW5l
cjo6aGFuZGxlRXZlbgogICAgIHJldHVybjsKICNlbmRpZgogCi0jaWYgS0hUTUxfTk9fQ1BMVVNQ
TFVTX0RPTQogICBFdmVudEltcGwgKmV2dCA9IGVsZTsKLSNlbHNlCi0gIEV2ZW50SW1wbCAqZXZ0
ID0gZWxlLmhhbmRsZSgpOwotI2VuZGlmCiAKICAgT2JqZWN0SW1wICpsaXN0ZW5lciA9IGxpc3Rl
bmVyT2JqKCk7CiAgIE9iamVjdEltcCAqd2luID0gd2luZG93T2JqKCk7CkluZGV4OiBraHRtbC9l
Y21hL2tqc190cmF2ZXJzYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VjbWEva2pzX3RyYXZlcnNhbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTkKZGlmZiAtcCAtdSAtcjEuMTkga2h0bWwvZWNtYS9ranNfdHJhdmVyc2FsLmNwcAotLS0ga2h0
bWwvZWNtYS9ranNfdHJhdmVyc2FsLmNwcAkyNyBOb3YgMjAwNSAwNzo1NDo1MCAtMDAwMAkxLjE5
CisrKyBraHRtbC9lY21hL2tqc190cmF2ZXJzYWwuY3BwCTQgRGVjIDIwMDUgMTA6MjQ6MzMgLTAw
MDAKQEAgLTMxNiwxMSArMzE2LDcgQEAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0
ZXJDb25kaQogCiBzaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoRmlsdGVy
Tm9kZSBmaWx0ZXJOb2RlKSBjb25zdAogewotI2lmICFLSFRNTF9OT19DUExVU1BMVVNfRE9NCi0g
ICAgTm9kZUltcGwgKm5vZGUgPSBmaWx0ZXJOb2RlLmhhbmRsZSgpOwotI2Vsc2UKICAgICBOb2Rl
SW1wbCAqbm9kZSA9IGZpbHRlck5vZGU7Ci0jZW5kaWYKICAgICBLSFRNTFBhcnQgKnBhcnQgPSBu
b2RlLT5nZXREb2N1bWVudCgpLT5wYXJ0KCk7CiAgICAgS0pTUHJveHkgKnByb3h5ID0gS0pTUHJv
eHk6OnByb3h5KHBhcnQpOwogICAgIGlmIChwcm94eSAmJiBmaWx0ZXItPmltcGxlbWVudHNDYWxs
KCkpIHsKSW5kZXg6IGt3cS9LV1FLQ29uZmlnQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLQ29uZmlnQmFzZS5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE5CmRpZmYgLXAgLXUgLXIxLjE5IGt3cS9LV1FLQ29uZmlnQmFzZS5oCi0tLSBrd3EvS1dR
S0NvbmZpZ0Jhc2UuaAkyMyBNYXkgMjAwNCAyMjo0NToyOCAtMDAwMAkxLjE5CisrKyBrd3EvS1dR
S0NvbmZpZ0Jhc2UuaAk0IERlYyAyMDA1IDEwOjI0OjM0IC0wMDAwCkBAIC0yNyw5ICsyNyw3IEBA
CiAjZGVmaW5lIEtDT05GSUdfSF8KIAogI2luY2x1ZGUgIktXUVN0cmluZy5oIgotI2lmIEFQUExF
X0NIQU5HRVMKICNpbmNsdWRlICJLV1FLSFRNTFNldHRpbmdzLmgiCi0jZW5kaWYKIAogY2xhc3Mg
UUNvbG9yOwogY2xhc3MgUVN0cmluZ0xpc3Q7CkluZGV4OiBrd3EvS1dRS0hUTUxQYWdlQ2FjaGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYWdl
Q2FjaGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXAgLXUgLXIxLjUga3dxL0tX
UUtIVE1MUGFnZUNhY2hlLmgKLS0tIGt3cS9LV1FLSFRNTFBhZ2VDYWNoZS5oCTIyIEphbiAyMDAz
IDAwOjEyOjM1IC0wMDAwCTEuNQorKysga3dxL0tXUUtIVE1MUGFnZUNhY2hlLmgJNCBEZWMgMjAw
NSAxMDoyNDozNCAtMDAwMApAQCAtMzAsMTIgKzMwLDEwIEBACiAKIGNsYXNzIFFPYmplY3Q7CiAK
LSNpZmRlZiBBUFBMRV9DSEFOR0VTCiAvKgogICAgIFRoaXMgY2xhc3MgaXMgbm90IHVzZWQgYnkg
V2ViQ29yZS4gIFRoZSBXZWJDb3JlL1dlYktpdCBwYWdlIGNhY2hlIGlzCiAgICAgYSBjYWNoZSBv
ZiBhIGZ1bGx5IGNvbnN0cnVjdGVkIERPTSBhbmQgYXNzb2NpYXRlZCByZW5kZXIgb2JqZWN0cy4K
ICovCi0jZW5kaWYKIGNsYXNzIEtIVE1MUGFnZUNhY2hlCiB7CiBwdWJsaWM6CkluZGV4OiBrd3Ev
S1dRUG9pbnRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3
cS9LV1FQb2ludEFycmF5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjkKZGlmZiAtcCAtdSAt
cjEuMjkga3dxL0tXUVBvaW50QXJyYXkuaAotLS0ga3dxL0tXUVBvaW50QXJyYXkuaAkxMiBPY3Qg
MjAwNSAwMDo0NDo1MyAtMDAwMAkxLjI5CisrKyBrd3EvS1dRUG9pbnRBcnJheS5oCTQgRGVjIDIw
MDUgMTA6MjQ6MzQgLTAwMDAKQEAgLTkzLDEyICs5Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIHBvaW50KHVpbnQsIGludCAqLCBpbnQgKik7CiAgICAgdm9pZCBzZXRQb2ludCh1aW50LCBp
bnQsIGludCk7Ci0jaWYgMAotICAgIC8vIEZJWE1FOiBXb3JrYXJvdW5kIGZvciBSYWRhciAyOTIx
MDYxLgotICAgIGJvb2wgc2V0UG9pbnRzKGludCwgaW50LCBpbnQsIC4uLik7Ci0jZWxzZQogICAg
IGJvb2wgc2V0UG9pbnRzKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBp
bnQpOwotI2VuZGlmCiAgICAgYm9vbCBzZXRQb2ludHMoIGludCBuUG9pbnRzLCBjb25zdCBpbnQg
KnBvaW50cyApOwogICAgIAogI2lmZGVmIF9LV1FfSU9TVFJFQU1fCg==
</data>
<flag name="review"
          id="940"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4930</attachid>
            <date>2005-12-04 02:33:29 -0800</date>
            <delta_ts>2005-12-04 02:33:29 -0800</delta_ts>
            <desc>newer cleanup.pl (trivial partpp.pl wrapper)</desc>
            <filename>cleanup.pl</filename>
            <type>text/x-perl-script</type>
            <size>361</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsIC13Cm15ICR0ZXN0RGlyZWN0b3J5ID0gJy4nOwpteSBAZmlsZXM7CnB1
c2ggQGZpbGVzLCBtYXAgeyBjaG9tcDsgcy1eJHRlc3REaXJlY3RvcnkvLS07ICRfOyB9IGBmaW5k
IC4gLW5hbWUgIiouY3BwIiAtb3IgLW5hbWUgIiouaCJgOwpmb3IgbXkgJGZpbGUgKEBmaWxlcykK
ewoJcHJpbnQgIiRmaWxlXG4iOwoJKHN5c3RlbSgiLi9wYXJ0cHAucGwgLURBUFBMRV9DSEFOR0VT
IC1ES0hUTUxfTk9fQ1BMVVNQTFVTX0RPTSAkZmlsZSA+ICRmaWxlLnRlbXAiKSA9PSAwKSBvciBk
aWUgIkZhaWxlZCB0byBydW4gUGFydGlhbCBwcmVwcm9jZXNzb3Igb24gJGZpbGUiOwoJYG12ICRm
aWxlLnRlbXAgJGZpbGVgOwp9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>