<?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>3961</bug_id>
          
          <creation_ts>2005-07-12 00:20:23 -0700</creation_ts>
          <short_desc>Build is broken</short_desc>
          <delta_ts>2005-07-12 08:29:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</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>14431</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2005-07-12 00:20:23 -0700</bug_when>
    <thetext>The build is broken:

/Users/andersca/src/webkit/WebCore/kwq/KWQTextCodec.mm:33:25: unicode/ucnv.h: No such file or 
directory

looks like adding ucnv.h to WebCore/icu/unicode should do the trick</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14432</commentid>
    <comment_count>1</comment_count>
      <attachid>2919</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-07-12 00:22:27 -0700</bug_when>
    <thetext>Created attachment 2919
adds icu/unicode/ucnv.h to fix broken build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14433</commentid>
    <comment_count>2</comment_count>
      <attachid>2920</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-07-12 00:25:48 -0700</bug_when>
    <thetext>Created attachment 2920
Adds ucnv_err.h as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14440</commentid>
    <comment_count>3</comment_count>
    <who name="Ken Kocienda">kocienda</who>
    <bug_when>2005-07-12 08:29:51 -0700</bug_when>
    <thetext>My apologies. I forgot that these headers are not included on all systems and that we accommodate 
everyone by adding headers to WebCore/icu/unicode. Lesson learned.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2919</attachid>
            <date>2005-07-12 00:22:27 -0700</date>
            <delta_ts>2005-07-12 14:38:36 -0700</delta_ts>
            <desc>adds icu/unicode/ucnv.h to fix broken build.</desc>
            <filename>ucnv.patch</filename>
            <type>text/plain</type>
            <size>77389</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGljdS91bmljb2RlL3VjbnYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB1Y252LmgKZGlm
ZiAtTiBpY3UvdW5pY29kZS91Y252LmgKLS0tIGljdS91bmljb2RlL3VjbnYuaAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBpY3UvdW5pY29kZS91Y252LmgJMTIgSnVsIDIwMDUgMDc6MDU6
NDMgLTAwMDAKQEAgLTAsMCArMSwxODE3IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHly
aWdodCAoQykgMTk5OS0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAg
Q29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCisgKiAgdWNudi5oOgorICogIEV4dGVybmFsIEFQSXMgZm9yIHRoZSBJQ1UncyBjb2Rlc2V0
IGNvbnZlcnNpb24gbGlicmFyeQorICogIEJlcnRyYW5kIEEuIERhbWliYQorICoKKyAqIE1vZGlm
aWNhdGlvbiBIaXN0b3J5OgorICoKKyAqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3Jp
cHRpb24KKyAqICAgMDQvMDQvOTkgICAgaGVsZW5hICAgICAgRml4ZWQgaW50ZXJuYWwgaGVhZGVy
IGluY2x1c2lvbi4KKyAqICAgMDUvMTEvMDAgICAgaGVsZW5hICAgICAgQWRkZWQgc2V0RmFsbGJh
Y2sgYW5kIHVzZXNGYWxsYmFjayBBUElzLgorICogICAwNi8yOS8yMDAwICBoZWxlbmEgICAgICBN
YWpvciByZXdyaXRlIG9mIHRoZSBjYWxsYmFjayBBUElzLgorICogICAxMi8wNy8yMDAwICBzcmwg
ICAgICAgICBVcGRhdGUgb2YgZG9jdW1lbnRhdGlvbgorICovCisKKy8qKgorICogXGZpbGUKKyAq
IFxicmllZiBDIEFQSTogQ2hhcmFjdGVyIGNvbnZlcnNpb24gCisgKgorICogPGgyPkNoYXJhY3Rl
ciBDb252ZXJzaW9uIEMgQVBJPC9oMj4KKyAqCisgKiA8cD5UaGlzIEFQSSBpcyB1c2VkIHRvIGNv
bnZlcnQgY29kZXBhZ2Ugb3IgY2hhcmFjdGVyIGVuY29kZWQgZGF0YSB0byBhbmQKKyAqIGZyb20g
VVRGLTE2LiBZb3UgY2FuIG9wZW4gYSBjb252ZXJ0ZXIgd2l0aCB7QGxpbmsgdWNudl9vcGVuKCkg
fS4gV2l0aCB0aGF0CisgKiBjb252ZXJ0ZXIsIHlvdSBjYW4gZ2V0IGl0cyBwcm9wZXJ0aWVzLCBz
ZXQgb3B0aW9ucywgY29udmVydCB5b3VyIGRhdGEgYW5kCisgKiBjbG9zZSB0aGUgY29udmVydGVy
LjwvcD4KKyAqCisgKiA8cD5TaW5jZSBtYW55IHNvZnR3YXJlIHByb2dyYW1zIHJlY29naXplIGRp
ZmZlcmVudCBjb252ZXJ0ZXIgbmFtZXMgZm9yCisgKiBkaWZmZXJlbnQgdHlwZXMgb2YgY29udmVy
dGVycywgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIEFQSSB0bworICogaXRlcmF0
ZSBvdmVyIHRoZSBjb252ZXJ0ZXIgYWxpYXNlcy4gVGhlIGZ1bmN0aW9ucyB7QGxpbmsgdWNudl9n
ZXRBdmFpbGFibGVOYW1lKCkgfSwKKyAqIHtAbGluayB1Y252X2dldEFsaWFzKCkgfSBhbmQge0Bs
aW5rIHVjbnZfZ2V0U3RhbmRhcmROYW1lKCkgfSBhcmUgc29tZSBvZiB0aGUKKyAqIG1vcmUgZnJl
cXVlbnRseSB1c2VkIGFsaWFzIGZ1bmN0aW9ucyB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbi48L3A+
CisgKgorICogPHA+V2hlbiBhIGNvbnZlcnRlciBlbmNvdW50ZXJzIGFuIGlsbGVnYWwsIGlycmVn
dWxhciwgaW52YWxpZCBvciB1bm1hcHBhYmxlIGNoYXJhY3RlcgorICogaXRzIGRlZmF1bHQgYmVo
YXZpb3IgaXMgdG8gdXNlIGEgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciB0byByZXBsYWNlIHRoZQor
ICogYmFkIGJ5dGUgc2VxdWVuY2UuIFRoaXMgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgdXNp
bmcge0BsaW5rIHVjbnZfZ2V0RnJvbVVDYWxsQmFjaygpIH0KKyAqIG9yIHtAbGluayB1Y252X2dl
dFRvVUNhbGxCYWNrKCkgfSBvbiB0aGUgY29udmVydGVyLiBUaGUgaGVhZGVyIHVjbnZfZXJyLmgg
ZGVmaW5lcworICogbWFueSBvdGhlciBjYWxsYmFjayBhY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQg
aW5zdGVhZCBvZiBhIGNoYXJhY3RlciBzdWJzdGl0dXRpb24uPC9wPgorICoKKyAqIDxwPk1vcmUg
aW5mb3JtYXRpb24gYWJvdXQgdGhpcyBBUEkgY2FuIGJlIGZvdW5kIGluIG91ciAKKyAqIDxhIGhy
ZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvdXNlcmd1aWRlL2NvbnZlcnNpb24u
aHRtbCI+VXNlcidzCisgKiBHdWlkZTwvYT4uPC9wPgorICovCisKKyNpZm5kZWYgVUNOVl9ICisj
ZGVmaW5lIFVDTlZfSAorCisjaW5jbHVkZSAidW5pY29kZS91Y252X2Vyci5oIgorI2luY2x1ZGUg
InVuaWNvZGUvdWVudW0uaCIKKworI2lmbmRlZiBfX1VTRVRfSF9fCisKKy8qKgorICogVVNldCBp
cyB0aGUgQyBBUEkgdHlwZSBmb3IgVW5pY29kZSBzZXRzLgorICogSXQgaXMgZm9yd2FyZC1kZWNs
YXJlZCBoZXJlIHRvIGF2b2lkIGluY2x1ZGluZyB0aGUgaGVhZGVyIGZpbGUgaWYgcmVsYXRlZAor
ICogY29udmVyc2lvbiBBUElzIGFyZSBub3QgdXNlZC4KKyAqIFNlZSB1bmljb2RlL3VzZXQuaAor
ICoKKyAqIEBzZWUgdWNudl9nZXRVbmljb2RlU2V0CisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLwor
c3RydWN0IFVTZXQ7CisvKiogQHN0YWJsZSBJQ1UgMi42ICovCit0eXBlZGVmIHN0cnVjdCBVU2V0
IFVTZXQ7CisKKyNlbmRpZgorCisjaWYgIVVDT05GSUdfTk9fQ09OVkVSU0lPTgorCitVX0NERUNM
X0JFR0lOCisKKy8qKiBNYXhpbXVtIGxlbmd0aCBvZiBhIGNvbnZlcnRlciBuYW1lIGluY2x1ZGlu
ZyB0aGUgdGVybWluYXRpbmcgTlVMTCBAc3RhYmxlIElDVSAyLjAgKi8KKyNkZWZpbmUgVUNOVl9N
QVhfQ09OVkVSVEVSX05BTUVfTEVOR1RIIDYwCisvKiogTWF4aW11bSBsZW5ndGggb2YgYSBjb252
ZXJ0ZXIgbmFtZSBpbmNsdWRpbmcgcGF0aCBhbmQgdGVybWluYXRpbmcgTlVMTCBAc3RhYmxlIElD
VSAyLjAgKi8KKyNkZWZpbmUgVUNOVl9NQVhfRlVMTF9GSUxFX05BTUVfTEVOR1RIICg2MDArVUNO
Vl9NQVhfQ09OVkVSVEVSX05BTUVfTEVOR1RIKQorCisvKiogU2hpZnQgaW4gZm9yIEVCRENESUNf
U1RBVEVGVUwgYW5kIGlzbzIwMjIgc3RhdGVzIEBzdGFibGUgSUNVIDIuMCAqLworI2RlZmluZSAg
VUNOVl9TSSAweDBGCisvKiogU2hpZnQgb3V0IGZvciBFQkRDRElDX1NUQVRFRlVMIGFuZCBpc28y
MDIyIHN0YXRlcyBAc3RhYmxlIElDVSAyLjAgKi8KKyNkZWZpbmUgIFVDTlZfU08gMHgwRQorCisv
KioKKyAqIEVudW0gZm9yIHNwZWNpZnlpbmcgYmFzaWMgdHlwZXMgb2YgY29udmVydGVycworICog
QHNlZSB1Y252X2dldFR5cGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0g
eworICAgIFVDTlZfVU5TVVBQT1JURURfQ09OVkVSVEVSID0gLTEsCisgICAgVUNOVl9TQkNTID0g
MCwKKyAgICBVQ05WX0RCQ1MgPSAxLAorICAgIFVDTlZfTUJDUyA9IDIsCisgICAgVUNOVl9MQVRJ
Tl8xID0gMywKKyAgICBVQ05WX1VURjggPSA0LAorICAgIFVDTlZfVVRGMTZfQmlnRW5kaWFuID0g
NSwKKyAgICBVQ05WX1VURjE2X0xpdHRsZUVuZGlhbiA9IDYsCisgICAgVUNOVl9VVEYzMl9CaWdF
bmRpYW4gPSA3LAorICAgIFVDTlZfVVRGMzJfTGl0dGxlRW5kaWFuID0gOCwKKyAgICBVQ05WX0VC
Q0RJQ19TVEFURUZVTCA9IDksCisgICAgVUNOVl9JU09fMjAyMiA9IDEwLAorCisgICAgVUNOVl9M
TUJDU18xID0gMTEsCisgICAgVUNOVl9MTUJDU18yLCAKKyAgICBVQ05WX0xNQkNTXzMsCisgICAg
VUNOVl9MTUJDU180LAorICAgIFVDTlZfTE1CQ1NfNSwKKyAgICBVQ05WX0xNQkNTXzYsCisgICAg
VUNOVl9MTUJDU184LAorICAgIFVDTlZfTE1CQ1NfMTEsCisgICAgVUNOVl9MTUJDU18xNiwKKyAg
ICBVQ05WX0xNQkNTXzE3LAorICAgIFVDTlZfTE1CQ1NfMTgsCisgICAgVUNOVl9MTUJDU18xOSwK
KyAgICBVQ05WX0xNQkNTX0xBU1QgPSBVQ05WX0xNQkNTXzE5LAorICAgIFVDTlZfSFosCisgICAg
VUNOVl9TQ1NVLAorICAgIFVDTlZfSVNDSUksCisgICAgVUNOVl9VU19BU0NJSSwKKyAgICBVQ05W
X1VURjcsCisgICAgVUNOVl9CT0NVMSwKKyAgICBVQ05WX1VURjE2LAorICAgIFVDTlZfVVRGMzIs
CisgICAgVUNOVl9DRVNVOCwKKyAgICBVQ05WX0lNQVBfTUFJTEJPWCwKKworICAgIC8qIE51bWJl
ciBvZiBjb252ZXJ0ZXIgdHlwZXMgZm9yIHdoaWNoIHdlIGhhdmUgY29udmVyc2lvbiByb3V0aW5l
cy4gKi8KKyAgICBVQ05WX05VTUJFUl9PRl9TVVBQT1JURURfQ09OVkVSVEVSX1RZUEVTCisKK30g
VUNvbnZlcnRlclR5cGU7CisKKy8qKgorICogRW51bSBmb3Igc3BlY2lmeWluZyB3aGljaCBwbGF0
Zm9ybSBhIGNvbnZlcnRlciBJRCByZWZlcnMgdG8uCisgKiBUaGUgdXNlIG9mIHBsYXRmb3JtL0ND
U0lEIGlzIG5vdCByZWNvbW1lbmRlZC4gU2VlIHVjbnZfb3BlbkNDU0lEKCkuCisgKgorICogQHNl
ZSB1Y252X2dldFBsYXRmb3JtCisgKiBAc2VlIHVjbnZfb3BlbkNDU0lECisgKiBAc2VlIHVjbnZf
Z2V0Q0NTSUQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0geworICAgIFVD
TlZfVU5LTk9XTiA9IC0xLAorICAgIFVDTlZfSUJNID0gMAorfSBVQ29udmVydGVyUGxhdGZvcm07
CisKKy8qKgorICogRnVuY3Rpb24gcG9pbnRlciBmb3IgZXJyb3IgY2FsbGJhY2sgaW4gdGhlIGNv
ZGVwYWdlIHRvIHVuaWNvZGUgZGlyZWN0aW9uLgorICogQ2FsbGVkIHdoZW4gYW4gZXJyb3IgaGFz
IG9jY3VyZWQgaW4gY29udmVyc2lvbiB0byB1bmljb2RlLCBvciBvbiBvcGVuL2Nsb3NlIG9mIHRo
ZSBjYWxsYmFjayAoc2VlIHJlYXNvbikuCisgKiBAcGFyYW0gY29udGV4dCBQb2ludGVyIHRvIHRo
ZSBjYWxsYmFjaydzIHByaXZhdGUgZGF0YQorICogQHBhcmFtIGFyZ3MgSW5mb3JtYXRpb24gYWJv
dXQgdGhlIGNvbnZlcnNpb24gaW4gcHJvZ3Jlc3MKKyAqIEBwYXJhbSBjb2RlVW5pdHMgUG9pbnRz
IHRvICdsZW5ndGgnIGJ5dGVzIG9mIHRoZSBjb25jZXJuZWQgY29kZXBhZ2Ugc2VxdWVuY2UKKyAq
IEBwYXJhbSBsZW5ndGggU2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBjb25jZXJuZWQgY29kZXBhZ2Ug
c2VxdWVuY2UKKyAqIEBwYXJhbSByZWFzb24gRGVmaW5lcyB0aGUgcmVhc29uIHRoZSBjYWxsYmFj
ayB3YXMgaW52b2tlZAorICogQHNlZSB1Y252X3NldFRvVUNhbGxCYWNrCisgKiBAc2VlIFVDb252
ZXJ0ZXJUb1VuaWNvZGVBcmdzCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiB2b2lk
IChVX0VYUE9SVDIgKlVDb252ZXJ0ZXJUb1VDYWxsYmFjaykgKAorICAgICAgICAgICAgICAgICAg
Y29uc3Qgdm9pZCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJUb1VuaWNv
ZGVBcmdzICphcmdzLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29kZVVuaXRzLAor
ICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBVQ29u
dmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLAorICAgICAgICAgICAgICAgICAgVUVycm9yQ29k
ZSAqKTsKKworLyoqCisgKiBGdW5jdGlvbiBwb2ludGVyIGZvciBlcnJvciBjYWxsYmFjayBpbiB0
aGUgdW5pY29kZSB0byBjb2RlcGFnZSBkaXJlY3Rpb24uCisgKiBDYWxsZWQgd2hlbiBhbiBlcnJv
ciBoYXMgb2NjdXJlZCBpbiBjb252ZXJzaW9uIGZyb20gdW5pY29kZSwgb3Igb24gb3Blbi9jbG9z
ZSBvZiB0aGUgY2FsbGJhY2sgKHNlZSByZWFzb24pLgorICogQHBhcmFtIGNvbnRleHQgUG9pbnRl
ciB0byB0aGUgY2FsbGJhY2sncyBwcml2YXRlIGRhdGEKKyAqIEBwYXJhbSBhcmdzIEluZm9ybWF0
aW9uIGFib3V0IHRoZSBjb252ZXJzaW9uIGluIHByb2dyZXNzCisgKiBAcGFyYW0gY29kZVVuaXRz
IFBvaW50cyB0byAnbGVuZ3RoJyBVQ2hhcnMgb2YgdGhlIGNvbmNlcm5lZCBVbmljb2RlIHNlcXVl
bmNlCisgKiBAcGFyYW0gbGVuZ3RoIFNpemUgKGluIGJ5dGVzKSBvZiB0aGUgY29uY2VybmVkIGNv
ZGVwYWdlIHNlcXVlbmNlCisgKiBAcGFyYW0gY29kZVBvaW50IFNpbmdsZSBVQ2hhcjMyIChVVEYt
MzIpIGNvbnRhaW5pbmcgdGhlIGNvbmNlcmVuZCBVbmljb2RlIGNvZGVwb2ludC4KKyAqIEBwYXJh
bSByZWFzb24gRGVmaW5lcyB0aGUgcmVhc29uIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZAorICog
QHNlZSB1Y252X3NldEZyb21VQ2FsbEJhY2sKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBl
ZGVmIHZvaWQgKFVfRVhQT1JUMiAqVUNvbnZlcnRlckZyb21VQ2FsbGJhY2spICgKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgVUNv
bnZlcnRlckZyb21Vbmljb2RlQXJncyAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VUNoYXIqIGNvZGVVbml0cywKKyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY29kZVBvaW50LAorICAgICAgICAgICAgICAgICAg
ICBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLAorICAgICAgICAgICAgICAgICAgICBV
RXJyb3JDb2RlICopOworCitVX0NERUNMX0VORAorCisvKioKKyAqIENoYXJhY3RlciB0aGF0IHNl
cGFyYXRlcyBjb252ZXJ0ZXIgbmFtZXMgZnJvbSBvcHRpb25zIGFuZCBvcHRpb25zIGZyb20gZWFj
aCBvdGhlci4KKyAqIEBzZWUgdWNudl9vcGVuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworI2Rl
ZmluZSBVQ05WX09QVElPTl9TRVBfQ0hBUiAnLCcKKworLyoqCisgKiBTdHJpbmcgdmVyc2lvbiBv
ZiBVQ05WX09QVElPTl9TRVBfQ0hBUi4gCisgKiBAc2VlIHVjbnZfb3BlbgorICogQHN0YWJsZSBJ
Q1UgMi4wCisgKi8KKyNkZWZpbmUgVUNOVl9PUFRJT05fU0VQX1NUUklORyAiLCIKKworLyoqCisg
KiBDaGFyYWN0ZXIgdGhhdCBzZXBhcmF0ZXMgYSBjb252ZXJ0ZXIgb3B0aW9uIGZyb20gaXRzIHZh
bHVlLgorICogQHNlZSB1Y252X29wZW4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCisjZGVmaW5l
IFVDTlZfVkFMVUVfU0VQX0NIQVIgJz0nCisKKy8qKgorICogU3RyaW5nIHZlcnNpb24gb2YgVUNO
Vl9WQUxVRV9TRVBfQ0hBUi4gCisgKiBAc2VlIHVjbnZfb3BlbgorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KKyNkZWZpbmUgVUNOVl9WQUxVRV9TRVBfU1RSSU5HICI9IgorCisvKioKKyAqIENvbnZl
cnRlciBvcHRpb24gZm9yIHNwZWNpZnlpbmcgYSBsb2NhbGUuCisgKiBGb3IgZXhhbXBsZSwgdWNu
dl9vcGVuKCJTQ1NVLGxvY2FsZT1qYSIsICZlcnJvckNvZGUpOworICogU2VlIGNvbnZydHJzLnR4
dC4KKyAqCisgKiBAc2VlIHVjbnZfb3BlbgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KKyNkZWZp
bmUgVUNOVl9MT0NBTEVfT1BUSU9OX1NUUklORyAiLGxvY2FsZT0iCisKKy8qKgorICogQ29udmVy
dGVyIG9wdGlvbiBmb3Igc3BlY2lmeWluZyBhIHZlcnNpb24gc2VsZWN0b3IgKDAuLjkpIGZvciBz
b21lIGNvbnZlcnRlcnMuCisgKiBGb3IgZXhhbXBsZSwgdWNudl9vcGVuKCJVVEYtNyx2ZXJzaW9u
PTEiLCAmZXJyb3JDb2RlKTsKKyAqIFNlZSBjb252cnRycy50eHQuCisgKgorICogQHNlZSB1Y252
X29wZW4KKyAqIEBzdGFibGUgSUNVIDIuNAorICovCisjZGVmaW5lIFVDTlZfVkVSU0lPTl9PUFRJ
T05fU1RSSU5HICIsdmVyc2lvbj0iCisKKy8qKgorICogQ29udmVydGVyIG9wdGlvbiBmb3IgRUJD
RElDIFNCQ1Mgb3IgbWl4ZWQtU0JDUy9EQkNTIChzdGF0ZWZ1bCkgY29kZXBhZ2VzLgorICogU3dh
cHMgVW5pY29kZSBtYXBwaW5ncyBmb3IgRUJDRElDIExGIGFuZCBOTCBjb2RlcywgYXMgdXNlZCBv
bgorICogUy8zOTAgKHovT1MpIFVuaXggU3lzdGVtIFNlcnZpY2VzIChPcGVuIEVkaXRpb24pLgor
ICogRm9yIGV4YW1wbGUsIHVjbnZfb3BlbigiaWJtLTEwNDcsc3dhcGxmbmwiLCAmZXJyb3JDb2Rl
KTsKKyAqIFNlZSBjb252cnRycy50eHQuCisgKgorICogQHNlZSB1Y252X29wZW4KKyAqIEBzdGFi
bGUgSUNVIDIuNAorICovCisjZGVmaW5lIFVDTlZfU1dBUF9MRk5MX09QVElPTl9TVFJJTkcgIixz
d2FwbGZubCIKKworLyoqCisgKiBEbyBhIGZ1enp5IGNvbXBhcmUgb2YgYSB0d28gY29udmVydGVy
L2FsaWFzIG5hbWVzLiAgVGhlIGNvbXBhcmlzb24KKyAqIGlzIGNhc2UtaW5zZW5zaXRpdmUuICBJ
dCBhbHNvIGlnbm9yZXMgdGhlIGNoYXJhY3RlcnMgJy0nLCAnXycsIGFuZAorICogJyAnIChkYXNo
LCB1bmRlcnNjb3JlLCBhbmQgc3BhY2UpLiAgVGh1cyB0aGUgc3RyaW5ncyAiVVRGLTgiLAorICog
InV0Zl84IiwgYW5kICJVdGYgOCIgYXJlIGV4YWN0bHkgZXF1aXZhbGVudC4KKyAqIAorICogQHBh
cmFtIG5hbWUxIGEgY29udmVydGVyIG5hbWUgb3IgYWxpYXMsIHplcm8tdGVybWluYXRlZAorICog
QHBhcmFtIG5hbWUyIGEgY29udmVydGVyIG5hbWUgb3IgYWxpYXMsIHplcm8tdGVybWluYXRlZAor
ICogQHJldHVybiAwIGlmIHRoZSBuYW1lcyBtYXRjaCwgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBpZiB0
aGUgbmFtZTEKKyAqIGxleGljYWxseSBwcmVjZWRlcyBuYW1lMiwgb3IgYSBwb3NpdGl2ZSB2YWx1
ZSBpZiB0aGUgbmFtZTEKKyAqIGxleGljYWxseSBmb2xsb3dzIG5hbWUyLgorICogQHN0YWJsZSBJ
Q1UgMi4wCisgKi8KK1VfU1RBQkxFIGludCBVX0VYUE9SVDIKK3VjbnZfY29tcGFyZU5hbWVzKGNv
bnN0IGNoYXIgKm5hbWUxLCBjb25zdCBjaGFyICpuYW1lMik7CisKKworLyoqCisgKiBDcmVhdGVz
IGEgVUNvbnZlcnRlciBvYmplY3Qgd2l0aCB0aGUgbmFtZXMgc3BlY2lmaWVkIGFzIGEgQyBzdHJp
bmcuCisgKiBUaGUgYWN0dWFsIG5hbWUgd2lsbCBiZSByZXNvbHZlZCB3aXRoIHRoZSBhbGlhcyBm
aWxlCisgKiB1c2luZyBhIGNhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzb24gdGhhdCBp
Z25vcmVzCisgKiB0aGUgZGVsaW1pdGVycyAnLScsICdfJywgYW5kICcgJyAoZGFzaCwgdW5kZXJz
Y29yZSwgYW5kIHNwYWNlKS4KKyAqIEUuZy4sIHRoZSBuYW1lcyAiVVRGOCIsICJ1dGYtOCIsIGFu
ZCAiVXRmIDgiIGFyZSBhbGwgZXF1aXZhbGVudC4KKyAqIElmIDxjb2RlPk5VTEw8L2NvZGU+IGlz
IHBhc3NlZCBmb3IgdGhlIGNvbnZlcnRlciBuYW1lLCBpdCB3aWxsIGNyZWF0ZSBvbmUgd2l0aCB0
aGUKKyAqIGdldERlZmF1bHROYW1lIHJldHVybiB2YWx1ZS4KKyAqCisgKiA8cD5BIGNvbnZlcnRl
ciBuYW1lIGZvciBJQ1UgMS41IGFuZCBhYm92ZSBtYXkgY29udGFpbiBvcHRpb25zCisgKiBsaWtl
IGEgbG9jYWxlIHNwZWNpZmljYXRpb24gdG8gY29udHJvbCB0aGUgc3BlY2lmaWMgYmVoYXZpb3Ig
b2YKKyAqIHRoZSBuZXdseSBpbnN0YW50aWF0ZWQgY29udmVydGVyLgorICogVGhlIG1lYW5pbmcg
b2YgdGhlIG9wdGlvbnMgZGVwZW5kcyBvbiB0aGUgcGFydGljdWxhciBjb252ZXJ0ZXIuCisgKiBJ
ZiBhbiBvcHRpb24gaXMgbm90IGRlZmluZWQgZm9yIG9yIHJlY29nbml6ZWQgYnkgYSBnaXZlbiBj
b252ZXJ0ZXIsIHRoZW4gaXQgaXMgaWdub3JlZC48L3A+CisgKgorICogPHA+T3B0aW9ucyBhcmUg
YXBwZW5kZWQgdG8gdGhlIGNvbnZlcnRlciBuYW1lIHN0cmluZywgd2l0aCBhCisgKiA8Y29kZT5V
Q05WX09QVElPTl9TRVBfQ0hBUjwvY29kZT4gYmV0d2VlbiB0aGUgbmFtZSBhbmQgdGhlIGZpcnN0
IG9wdGlvbiBhbmQKKyAqIGFsc28gYmV0d2VlbiBhZGphY2VudCBvcHRpb25zLjwvcD4KKyAqCisg
KiA8cD5JZiB0aGUgYWxpYXMgaXMgYW1iaWd1b3VzLCB0aGVuIHRoZSBwcmVmZXJyZWQgY29udmVy
dGVyIGlzIHVzZWQKKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHNldCB0byBVX0FNQklHVU9VU19BTElB
U19XQVJOSU5HLjwvcD4KKyAqCisgKiA8cD5UaGUgY29udmVyc2lvbiBiZWhhdmlvciBhbmQgbmFt
ZXMgY2FuIHZhcnkgYmV0d2VlbiBwbGF0Zm9ybXMuIElDVSBtYXkKKyAqIGNvbnZlcnQgc29tZSBj
aGFyYWN0ZXJzIGRpZmZlcmVudGx5IGZyb20gb3RoZXIgcGxhdGZvcm1zLiBEZXRhaWxzIG9uIHRo
aXMgdG9waWMKKyAqIGFyZSBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0u
Y29tL2ljdS91c2VyZ3VpZGUvY29udmVyc2lvbi5odG1sIj5Vc2VyJ3MKKyAqIEd1aWRlPC9hPi48
L3A+CisgKgorICogQHBhcmFtIGNvbnZlcnRlck5hbWUgTmFtZSBvZiB0aGUgdWNvbnYgdGFibGUs
IG1heSBoYXZlIG9wdGlvbnMgYXBwZW5kZWQKKyAqIEBwYXJhbSBlcnIgb3V0Z29pbmcgZXJyb3Ig
c3RhdHVzIDxUVD5VX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SLCBVX0ZJTEVfQUNDRVNTX0VSUk9S
PC9UVD4KKyAqIEByZXR1cm4gdGhlIGNyZWF0ZWQgVW5pY29kZSBjb252ZXJ0ZXIgb2JqZWN0LCBv
ciA8VFQ+TlVMTDwvVFQ+IGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqIEBzZWUgdWNudl9vcGVuVQor
ICogQHNlZSB1Y252X29wZW5DQ1NJRAorICogQHNlZSB1Y252X2Nsb3NlCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlciogVV9FWFBPUlQyIAordWNudl9vcGVuKGNv
bnN0IGNoYXIgKmNvbnZlcnRlck5hbWUsIFVFcnJvckNvZGUgKmVycik7CisKKworLyoqCisgKiBD
cmVhdGVzIGEgVW5pY29kZSBjb252ZXJ0ZXIgd2l0aCB0aGUgbmFtZXMgc3BlY2lmaWVkIGFzIHVu
aWNvZGUgc3RyaW5nLiAKKyAqIFRoZSBuYW1lIHNob3VsZCBiZSBsaW1pdGVkIHRvIHRoZSBBU0NJ
SS03IGFscGhhbnVtZXJpY3MgcmFuZ2UuCisgKiBUaGUgYWN0dWFsIG5hbWUgd2lsbCBiZSByZXNv
bHZlZCB3aXRoIHRoZSBhbGlhcyBmaWxlCisgKiB1c2luZyBhIGNhc2UtaW5zZW5zaXRpdmUgc3Ry
aW5nIGNvbXBhcmlzb24gdGhhdCBpZ25vcmVzCisgKiB0aGUgZGVsaW1pdGVycyAnLScsICdfJywg
YW5kICcgJyAoZGFzaCwgdW5kZXJzY29yZSwgYW5kIHNwYWNlKS4KKyAqIEUuZy4sIHRoZSBuYW1l
cyAiVVRGOCIsICJ1dGYtOCIsIGFuZCAiVXRmIDgiIGFyZSBhbGwgZXF1aXZhbGVudC4KKyAqIElm
IDxUVD5OVUxMPC9UVD4gaXMgcGFzc2VkIGZvciB0aGUgY29udmVydGVyIG5hbWUsIGl0IHdpbGwg
Y3JlYXRlIAorICogb25lIHdpdGggdGhlIHVjbnZfZ2V0RGVmYXVsdE5hbWUoKSByZXR1cm4gdmFs
dWUuCisgKiBJZiB0aGUgYWxpYXMgaXMgYW1iaWd1b3VzLCB0aGVuIHRoZSBwcmVmZXJyZWQgY29u
dmVydGVyIGlzIHVzZWQKKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHNldCB0byBVX0FNQklHVU9VU19B
TElBU19XQVJOSU5HLgorICogQHBhcmFtIG5hbWUgOiBuYW1lIG9mIHRoZSB1Y29udiB0YWJsZSBp
biBhIHplcm8gdGVybWluYXRlZCAKKyAqICAgICAgICBVbmljb2RlIHN0cmluZworICogQHBhcmFt
IGVyciBvdXRnb2luZyBlcnJvciBzdGF0dXMgPFRUPlVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1Is
IAorICogICAgICAgIFVfRklMRV9BQ0NFU1NfRVJST1I8L1RUPgorICogQHJldHVybiB0aGUgY3Jl
YXRlZCBVbmljb2RlIGNvbnZlcnRlciBvYmplY3QsIG9yIDxUVD5OVUxMPC9UVD4gaWYgYW4gCisg
KiAgICAgICAgZXJyb3Igb2NjdXJlZAorICogQHNlZSB1Y252X29wZW4KKyAqIEBzZWUgdWNudl9v
cGVuQ0NTSUQKKyAqIEBzZWUgdWNudl9jbG9zZQorICogQHNlZSB1Y252X2dldERlZmF1bHROYW1l
CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlciogVV9FWFBPUlQy
IAordWNudl9vcGVuVShjb25zdCBVQ2hhciAqbmFtZSwKKyAgICAgICAgICAgVUVycm9yQ29kZSAq
ZXJyKTsKKworLyoqCisgKiBDcmVhdGVzIGEgVUNvbnZlcnRlciBvYmplY3QgZnJvbSBhIENDU0lE
IG51bWJlciBhbmQgcGxhdGZvcm0gcGFpci4KKyAqIE5vdGUgdGhhdCB0aGUgdXNlZnVsbmVzcyBv
ZiB0aGlzIGZ1bmN0aW9uIGlzIGxpbWl0ZWQgdG8gcGxhdGZvcm1zIHdpdGggbnVtZXJpYworICog
ZW5jb2RpbmcgSURzLiBPbmx5IElCTSBhbmQgTWljcm9zb2Z0IHBsYXRmb3JtcyB1c2UgbnVtZXJp
YyAoMTYtYml0KSBpZGVudGlmaWVycyBmb3IKKyAqIGVuY29kaW5ncy4KKyAqCisgKiBJbiBhZGRp
dGlvbiwgSUJNIENDU0lEcyBhbmQgVW5pY29kZSBjb252ZXJzaW9uIHRhYmxlcyBhcmUgbm90IDE6
MSByZWxhdGVkLgorICogRm9yIG1hbnkgSUJNIENDU0lEcyB0aGVyZSBhcmUgbXVsdGlwbGUgKHVw
IHRvIHNpeCkgVW5pY29kZSBjb252ZXJzaW9uIHRhYmxlcywgYW5kCisgKiBmb3Igc29tZSBVbmlj
b2RlIGNvbnZlcnNpb24gdGFibGVzIHRoZXJlIGFyZSBtdWx0aXBsZSBDQ1NJRHMuCisgKiBTb21l
ICJhbHRlcm5hdGUiIFVuaWNvZGUgY29udmVyc2lvbiB0YWJsZXMgYXJlIHByb3ZpZGVkIGJ5IHRo
ZQorICogSUJNIENEUkEgY29udmVyc2lvbiB0YWJsZSByZWdpc3RyeS4KKyAqIFRoZSBtb3N0IHBy
b21pbmVudCBleGFtcGxlIG9mIGEgc3lzdGVtYXRpYyBtb2RpZmljYXRpb24gb2YgY29udmVyc2lv
biB0YWJsZXMgdGhhdCBpcworICogbm90IHByb3ZpZGVkIGluIHRoZSBmb3JtIG9mIGNvbnZlcnNp
b24gdGFibGUgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgaXMKKyAqIHRoYXQgUy8zOTAgVW5peCBT
eXN0ZW0gU2VydmljZXMgc3dhcHMgdGhlIGNvZGVzIGZvciBMaW5lIEZlZWQgYW5kIE5ldyBMaW5l
IGluIGFsbAorICogRUJDRElDIGNvZGVwYWdlcywgd2hpY2ggcmVxdWlyZXMgc3VjaCBhIHN3YXAg
aW4gdGhlIFVuaWNvZGUgY29udmVyc2lvbiB0YWJsZXMgYXMgd2VsbC4KKyAqCisgKiBPbmx5IElC
TSBkZWZhdWx0IGNvbnZlcnNpb24gdGFibGVzIGFyZSBhY2Nlc3NpYmxlIHdpdGggdWNudl9vcGVu
Q0NTSUQoKS4KKyAqIHVjbnZfZ2V0Q0NTSUQoKSB3aWxsIHJldHVybiB0aGUgc2FtZSBDQ1NJRCBm
b3IgYWxsIGNvbnZlcnNpb24gdGFibGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhh
dCBDQ1NJRC4KKyAqCisgKiBDdXJyZW50bHksIHRoZSBvbmx5ICJwbGF0Zm9ybSIgc3VwcG9ydGVk
IGluIHRoZSBJQ1UgY29udmVydGVyIEFQSSBpcyBVQ05WX0lCTS4KKyAqCisgKiBJbiBzdW1tYXJ5
LCB0aGUgdXNlIG9mIENDU0lEcyBhbmQgdGhlIGFzc29jaWF0ZWQgQVBJIGZ1bmN0aW9ucyBpcyBu
b3QgcmVjb21tZW5kZWQuCisgKgorICogSW4gb3JkZXIgdG8gb3BlbiBhIGNvbnZlcnRlciB3aXRo
IHRoZSBkZWZhdWx0IElCTSBDRFJBIFVuaWNvZGUgY29udmVyc2lvbiB0YWJsZSwKKyAqIHlvdSBj
YW4gdXNlIHRoaXMgZnVuY3Rpb24gb3IgdXNlIHRoZSBwcmVmaXggImlibS0iOgorICogXGNvZGUK
KyAqICAgICBjaGFyIG5hbWVbMjBdOworICogICAgIHNwcmludGYobmFtZSwgImlibS0laHUiLCBj
Y3NpZCk7CisgKiAgICAgY252PXVjbnZfb3BlbihuYW1lLCAmZXJyb3JDb2RlKTsKKyAqIFxlbmRj
b2RlCisgKgorICogSW4gb3JkZXIgdG8gb3BlbiBhIGNvbnZlcnRlciB3aXRoIHRoZSBJQk0gUy8z
OTAgVW5peCBTeXN0ZW0gU2VydmljZXMgdmFyaWFudAorICogb2YgYSBVbmljb2RlL0VCQ0RJQyBj
b252ZXJzaW9uIHRhYmxlLAorICogeW91IGNhbiB1c2UgdGhlIHByZWZpeCAiaWJtLSIgdG9nZXRo
ZXIgd2l0aCB0aGUgb3B0aW9uIHN0cmluZyBVQ05WX1NXQVBfTEZOTF9PUFRJT05fU1RSSU5HOgor
ICogXGNvZGUKKyAqICAgICBjaGFyIG5hbWVbMjBdOworICogICAgIHNwcmludGYobmFtZSwgImli
bS0laHUiIFVDTlZfU1dBUF9MRk5MX09QVElPTl9TVFJJTkcsIGNjc2lkKTsKKyAqICAgICBjbnY9
dWNudl9vcGVuKG5hbWUsICZlcnJvckNvZGUpOworICogXGVuZGNvZGUKKyAqCisgKiBJbiBvcmRl
ciB0byBvcGVuIGEgY29udmVydGVyIGZyb20gYSBNaWNyb3NvZnQgY29kZXBhZ2UgbnVtYmVyLCB1
c2UgdGhlIHByZWZpeCAiY3AiOgorICogXGNvZGUKKyAqICAgICBjaGFyIG5hbWVbMjBdOworICog
ICAgIHNwcmludGYobmFtZSwgImNwJWh1IiwgY29kZXBhZ2VJRCk7CisgKiAgICAgY252PXVjbnZf
b3BlbihuYW1lLCAmZXJyb3JDb2RlKTsKKyAqIFxlbmRjb2RlCisgKgorICogSWYgdGhlIGFsaWFz
IGlzIGFtYmlndW91cywgdGhlbiB0aGUgcHJlZmVycmVkIGNvbnZlcnRlciBpcyB1c2VkCisgKiBh
bmQgdGhlIHN0YXR1cyBpcyBzZXQgdG8gVV9BTUJJR1VPVVNfQUxJQVNfV0FSTklORy4KKyAqCisg
KiBAcGFyYW0gY29kZXBhZ2UgY29kZXBhZ2UgbnVtYmVyIHRvIGNyZWF0ZQorICogQHBhcmFtIHBs
YXRmb3JtIHRoZSBwbGF0Zm9ybSBpbiB3aGljaCB0aGUgY29kZXBhZ2UgbnVtYmVyIGV4aXN0cwor
ICogQHBhcmFtIGVyciBlcnJvciBzdGF0dXMgPFRUPlVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1Is
IFVfRklMRV9BQ0NFU1NfRVJST1I8L1RUPgorICogQHJldHVybiB0aGUgY3JlYXRlZCBVbmljb2Rl
IGNvbnZlcnRlciBvYmplY3QsIG9yIDxUVD5OVUxMPC9UVD4gaWYgYW4gZXJyb3IKKyAqICAgb2Nj
dXJlZC4KKyAqIEBzZWUgdWNudl9vcGVuCisgKiBAc2VlIHVjbnZfb3BlblUKKyAqIEBzZWUgdWNu
dl9jbG9zZQorICogQHNlZSB1Y252X2dldENDU0lECisgKiBAc2VlIHVjbnZfZ2V0UGxhdGZvcm0K
KyAqIEBzZWUgVUNvbnZlcnRlclBsYXRmb3JtCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9T
VEFCTEUgVUNvbnZlcnRlciogVV9FWFBPUlQyCit1Y252X29wZW5DQ1NJRChpbnQzMl90IGNvZGVw
YWdlLAorICAgICAgICAgICAgICAgVUNvbnZlcnRlclBsYXRmb3JtIHBsYXRmb3JtLAorICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSAqIGVycik7CisKKy8qKgorICogPHA+Q3JlYXRlcyBhIFVDb252
ZXJ0ZXIgb2JqZWN0IHNwZWNpZmllZCBmcm9tIGEgcGFja2FnZU5hbWUgYW5kIGEgY29udmVydGVy
TmFtZS48L3A+CisgKiAKKyAqIDxwPlRoZSBwYWNrYWdlTmFtZSBhbmQgY29udmVydGVyTmFtZSBt
dXN0IHBvaW50IHRvIGFuIElDVSB1ZGF0YSBvYmplY3QsIGFzIGRlZmluZWQgYnkKKyAqICAgPGNv
ZGU+IHVkYXRhX29wZW4oIHBhY2thZ2VOYW1lLCAiY252IiwgY29udmVydGVyTmFtZSwgZXJyKSA8
L2NvZGU+IG9yIGVxdWl2YWxlbnQuCisgKiBUeXBpY2FsbHksIHBhY2thZ2VOYW1lIHdpbGwgcmVm
ZXIgdG8gYSAoLmRhdCkgZmlsZSwgb3IgdG8gYSBwYWNrYWdlIHJlZ2lzdGVyZWQgd2l0aAorICog
dWRhdGFfc2V0QXBwRGF0YSgpLjwvcD4KKyAqIAorICogPHA+VGhlIG5hbWUgd2lsbCBOT1QgYmUg
bG9va2VkIHVwIGluIHRoZSBhbGlhcyBtZWNoYW5pc20sIG5vciB3aWxsIHRoZSBjb252ZXJ0ZXIg
YmUKKyAqIHN0b3JlZCBpbiB0aGUgY29udmVydGVyIGNhY2hlIG9yIHRoZSBhbGlhcyB0YWJsZS4g
VGhlIG9ubHkgd2F5IHRvIG9wZW4gZnVydGhlciBjb252ZXJ0ZXJzCisgKiBpcyBjYWxsIHRoaXMg
ZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMsIG9yIHVzZSB0aGUgdWNudl9zYWZlQ2xvbmUoKSBmdW5j
dGlvbiB0byBjbG9uZSBhIAorICogJ21hc3RlcicgY29udmVydGVyLjwvcD4KKyAqCisgKiA8cD5B
IGZ1dHVyZSB2ZXJzaW9uIG9mIElDVSBtYXkgYWRkIGFsaWFzIHRhYmxlIGxvb2t1cHMgYW5kL29y
IGNhY2hpbmcKKyAqIHRvIHRoaXMgZnVuY3Rpb24uPC9wPgorICogCisgKiA8cD5FeGFtcGxlIFVz
ZToKKyAqICAgICAgPGNvZGU+Y252ID0gdWNudl9vcGVuUGFja2FnZSgibXlhcHAiLCAibXljb252
ZXJ0ZXIiLCAmZXJyKTs8L2NvZGU+CisgKiA8L3A+CisgKgorICogQHBhcmFtIHBhY2thZ2VOYW1l
IG5hbWUgb2YgdGhlIHBhY2thZ2UgKGVxdWl2YWxlbnQgdG8gJ3BhdGgnIGluIHVkYXRhX29wZW4o
KSBjYWxsKQorICogQHBhcmFtIGNvbnZlcnRlck5hbWUgbmFtZSBvZiB0aGUgZGF0YSBpdGVtIHRv
IGJlIHVzZWQsIHdpdGhvdXQgc3VmZml4LgorICogQHBhcmFtIGVyciBvdXRnb2luZyBlcnJvciBz
dGF0dXMgPFRUPlVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1IsIFVfRklMRV9BQ0NFU1NfRVJST1I8
L1RUPgorICogQHJldHVybiB0aGUgY3JlYXRlZCBVbmljb2RlIGNvbnZlcnRlciBvYmplY3QsIG9y
IDxUVD5OVUxMPC9UVD4gaWYgYW4gZXJyb3Igb2NjdXJlZAorICogQHNlZSB1ZGF0YV9vcGVuCisg
KiBAc2VlIHVjbnZfb3BlbgorICogQHNlZSB1Y252X3NhZmVDbG9uZQorICogQHNlZSB1Y252X2Ns
b3NlCisgKiBAc3RhYmxlIElDVSAyLjIKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlciogVV9FWFBP
UlQyIAordWNudl9vcGVuUGFja2FnZShjb25zdCBjaGFyICpwYWNrYWdlTmFtZSwgY29uc3QgY2hh
ciAqY29udmVydGVyTmFtZSwgVUVycm9yQ29kZSAqZXJyKTsKKworLyoqCisgKiBUaHJlYWQgc2Fm
ZSBjbG9uaW5nIG9wZXJhdGlvbgorICogQHBhcmFtIGNudiBjb252ZXJ0ZXIgdG8gYmUgY2xvbmVk
CisgKiBAcGFyYW0gc3RhY2tCdWZmZXIgdXNlciBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoZSBuZXcg
Y2xvbmUuIElmIE5VTEwgbmV3IG1lbW9yeSB3aWxsIGJlIGFsbG9jYXRlZC4gCisgKiAgSWYgYnVm
ZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2gsIG5ldyBtZW1vcnkgd2lsbCBiZSBhbGxvY2F0ZWQuCisg
KiAgQ2xpZW50cyBjYW4gdXNlIHRoZSBVX0NOVl9TQUZFQ0xPTkVfQlVGRkVSU0laRS4gVGhpcyB3
aWxsIHByb2JhYmx5IGJlIGVub3VnaCB0byBhdm9pZCBtZW1vcnkgYWxsb2NhdGlvbnMuCisgKiBA
cGFyYW0gcEJ1ZmZlclNpemUgcG9pbnRlciB0byBzaXplIG9mIGFsbG9jYXRlZCBzcGFjZS4gCisg
KiAgSWYgKnBCdWZmZXJTaXplID09IDAsIGEgc3VmZmljaWVudCBzaXplIGZvciB1c2UgaW4gY2xv
bmluZyB3aWxsIAorICogIGJlIHJldHVybmVkICgncHJlLWZsaWdodGluZycpCisgKiAgSWYgKnBC
dWZmZXJTaXplIGlzIG5vdCBlbm91Z2ggZm9yIGEgc3RhY2stYmFzZWQgc2FmZSBjbG9uZSwgCisg
KiAgbmV3IG1lbW9yeSB3aWxsIGJlIGFsbG9jYXRlZC4KKyAqIEBwYXJhbSBzdGF0dXMgdG8gaW5k
aWNhdGUgd2hldGhlciB0aGUgb3BlcmF0aW9uIHdlbnQgb24gc21vb3RobHkgb3IgdGhlcmUgd2Vy
ZSBlcnJvcnMKKyAqICBBbiBpbmZvcm1hdGlvbmFsIHN0YXR1cyB2YWx1ZSwgVV9TQUZFQ0xPTkVf
QUxMT0NBVEVEX0VSUk9SLCBpcyB1c2VkIGlmIGFueSBhbGxvY2F0aW9ucyB3ZXJlIG5lY2Vzc2Fy
eS4KKyAqIEByZXR1cm4gcG9pbnRlciB0byB0aGUgbmV3IGNsb25lCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlciAqIFVfRVhQT1JUMiAKK3VjbnZfc2FmZUNsb25l
KGNvbnN0IFVDb252ZXJ0ZXIgKmNudiwgCisgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAg
ICpzdGFja0J1ZmZlciwKKyAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgKnBCdWZmZXJT
aXplLCAKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgKnN0YXR1cyk7CisKKy8qKgor
ICogXGRlZiBVX0NOVl9TQUZFQ0xPTkVfQlVGRkVSU0laRQorICogRGVmaW5pdGlvbiBvZiBhIGJ1
ZmZlciBzaXplIHRoYXQgaXMgZGVzaWduZWQgdG8gYmUgbGFyZ2UgZW5vdWdoIGZvcgorICogY29u
dmVydGVycyB0byBiZSBjbG9uZWQgd2l0aCB1Y252X3NhZmVDbG9uZSgpLgorICogQHN0YWJsZSBJ
Q1UgMi4wCisgKi8KKyNkZWZpbmUgVV9DTlZfU0FGRUNMT05FX0JVRkZFUlNJWkUgIDEwMjQKKwor
LyoqCisgKiBEZWxldGVzIHRoZSB1bmljb2RlIGNvbnZlcnRlciBhbmQgcmVsZWFzZXMgcmVzb3Vy
Y2VzIGFzc29jaWF0ZWQKKyAqIHdpdGgganVzdCB0aGlzIGluc3RhbmNlLgorICogRG9lcyBub3Qg
ZnJlZSB1cCBzaGFyZWQgY29udmVydGVyIHRhYmxlcy4KKyAqCisgKiBAcGFyYW0gY29udmVydGVy
IHRoZSBjb252ZXJ0ZXIgb2JqZWN0IHRvIGJlIGRlbGV0ZWQKKyAqIEBzZWUgdWNudl9vcGVuCisg
KiBAc2VlIHVjbnZfb3BlblUKKyAqIEBzZWUgdWNudl9vcGVuQ0NTSUQKKyAqIEBzdGFibGUgSUNV
IDIuMAorICovCitVX1NUQUJMRSB2b2lkICBVX0VYUE9SVDIKK3VjbnZfY2xvc2UoVUNvbnZlcnRl
ciAqIGNvbnZlcnRlcik7CisKKy8qKgorICogRmlsbHMgaW4gdGhlIG91dHB1dCBwYXJhbWV0ZXIs
IHN1YkNoYXJzLCB3aXRoIHRoZSBzdWJzdGl0dXRpb24gY2hhcmFjdGVycworICogYXMgbXVsdGlw
bGUgYnl0ZXMuCisgKgorICogQHBhcmFtIGNvbnZlcnRlciB0aGUgVW5pY29kZSBjb252ZXJ0ZXIK
KyAqIEBwYXJhbSBzdWJDaGFycyB0aGUgc3Vic2l0dXRpb24gY2hhcmFjdGVycworICogQHBhcmFt
IGxlbiBvbiBpbnB1dCB0aGUgY2FwYWNpdHkgb2Ygc3ViQ2hhcnMsIG9uIG91dHB1dCB0aGUgbnVt
YmVyIAorICogb2YgYnl0ZXMgY29waWVkIHRvIGl0CisgKiBAcGFyYW0gIGVyciB0aGUgb3V0Z29p
bmcgZXJyb3Igc3RhdHVzIGNvZGUuCisgKiBJZiB0aGUgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciBh
cnJheSBpcyB0b28gc21hbGwsIGFuCisgKiA8VFQ+VV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUjwv
VFQ+IHdpbGwgYmUgcmV0dXJuZWQuCisgKiBAc2VlIHVjbnZfc2V0U3Vic3RDaGFycworICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y252X2dldFN1YnN0
Q2hhcnMoY29uc3QgVUNvbnZlcnRlciAqY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgIGNo
YXIgKnN1YkNoYXJzLAorICAgICAgICAgICAgICAgICAgIGludDhfdCAqbGVuLAorICAgICAgICAg
ICAgICAgICAgIFVFcnJvckNvZGUgKmVycik7CisKKy8qKgorICogU2V0cyB0aGUgc3Vic3RpdHV0
aW9uIGNoYXJzIHdoZW4gY29udmVydGluZyBmcm9tIHVuaWNvZGUgdG8gYSBjb2RlcGFnZS4gVGhl
CisgKiBzdWJzdGl0dXRpb24gaXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIG9mIDEtNCBieXRlcywg
YW5kIG1heSBjb250YWluCisgKiAgPFRUPk5VTEw8L1RUPiBieXRlLgorICogQHBhcmFtIGNvbnZl
cnRlciB0aGUgVW5pY29kZSBjb252ZXJ0ZXIKKyAqIEBwYXJhbSBzdWJDaGFycyB0aGUgc3Vic3Rp
dHV0aW9uIGNoYXJhY3RlciBieXRlIHNlcXVlbmNlIHdlIHdhbnQgc2V0CisgKiBAcGFyYW0gbGVu
IHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gc3ViQ2hhcnMKKyAqIEBwYXJhbSBlcnIgdGhlIGVycm9y
IHN0YXR1cyBjb2RlLiAgPFRUPlVfSU5ERVhfT1VUT0ZCT1VORFNfRVJST1IgPC9UVD4gaWYKKyAq
IGxlbiBpcyBiaWdnZXIgdGhhbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgYWxsb3dlZCBp
biBzdWJjaGFycworICogQHNlZSB1Y252X2dldFN1YnN0Q2hhcnMKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWNudl9zZXRTdWJzdENoYXJzKFVDb252
ZXJ0ZXIgKmNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdWJDaGFy
cywKKyAgICAgICAgICAgICAgICAgICBpbnQ4X3QgbGVuLAorICAgICAgICAgICAgICAgICAgIFVF
cnJvckNvZGUgKmVycik7CisKKy8qKgorICogRmlsbHMgaW4gdGhlIG91dHB1dCBwYXJhbWV0ZXIs
IGVyckJ5dGVzLCB3aXRoIHRoZSBlcnJvciBjaGFyYWN0ZXJzIGZyb20gdGhlCisgKiBsYXN0IGZh
aWxpbmcgY29udmVyc2lvbi4KKyAqCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSBVbmljb2RlIGNv
bnZlcnRlcgorICogQHBhcmFtIGVyckJ5dGVzIHRoZSBjb2RlcGFnZSBieXRlcyB3aGljaCB3ZXJl
IGluIGVycm9yCisgKiBAcGFyYW0gbGVuIG9uIGlucHV0IHRoZSBjYXBhY2l0eSBvZiBlcnJCeXRl
cywgb24gb3V0cHV0IHRoZSBudW1iZXIgb2YKKyAqICBieXRlcyB3aGljaCB3ZXJlIGNvcGllZCB0
byBpdAorICogQHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVzIGNvZGUuCisgKiBJZiB0aGUgc3Vi
c3RpdHV0aW9uIGNoYXJhY3RlciBhcnJheSBpcyB0b28gc21hbGwsIGFuCisgKiA8VFQ+VV9JTkRF
WF9PVVRPRkJPVU5EU19FUlJPUjwvVFQ+IHdpbGwgYmUgcmV0dXJuZWQuCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfZ2V0SW52YWxpZENoYXJz
KGNvbnN0IFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KmVyckJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgaW50OF90ICpsZW4sCisgICAgICAgICAg
ICAgICAgICAgICBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIEZpbGxzIGluIHRoZSBvdXRw
dXQgcGFyYW1ldGVyLCBlcnJDaGFycywgd2l0aCB0aGUgZXJyb3IgY2hhcmFjdGVycyBmcm9tIHRo
ZQorICogbGFzdCBmYWlsaW5nIGNvbnZlcnNpb24uCisgKgorICogQHBhcmFtIGNvbnZlcnRlciB0
aGUgVW5pY29kZSBjb252ZXJ0ZXIKKyAqIEBwYXJhbSBlcnJVQ2hhcnMgdGhlIFVDaGFycyB3aGlj
aCB3ZXJlIGluIGVycm9yCisgKiBAcGFyYW0gbGVuIG9uIGlucHV0IHRoZSBjYXBhY2l0eSBvZiBl
cnJVQ2hhcnMsIG9uIG91dHB1dCB0aGUgbnVtYmVyIG9mIAorICogIFVDaGFycyB3aGljaCB3ZXJl
IGNvcGllZCB0byBpdAorICogQHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVzIGNvZGUuCisgKiBJ
ZiB0aGUgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciBhcnJheSBpcyB0b28gc21hbGwsIGFuCisgKiA8
VFQ+VV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUjwvVFQ+IHdpbGwgYmUgcmV0dXJuZWQuCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfZ2V0SW52
YWxpZFVDaGFycyhjb25zdCBVQ29udmVydGVyICpjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgVUNoYXIgKmVyclVDaGFycywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQ4X3QgKmxl
biwKKyAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIFJl
c2V0cyB0aGUgc3RhdGUgb2YgYSBjb252ZXJ0ZXIgdG8gdGhlIGRlZmF1bHQgc3RhdGUuIFRoaXMg
aXMgdXNlZAorICogaW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IsIHRvIHJlc3RhcnQgYSBjb252ZXJz
aW9uIGZyb20gYSBrbm93biBkZWZhdWx0IHN0YXRlLgorICogSXQgd2lsbCBhbHNvIGVtcHR5IHRo
ZSBpbnRlcm5hbCBvdXRwdXQgYnVmZmVycy4KKyAqIEBwYXJhbSBjb252ZXJ0ZXIgdGhlIFVuaWNv
ZGUgY29udmVydGVyCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VY
UE9SVDIKK3VjbnZfcmVzZXQoVUNvbnZlcnRlciAqY29udmVydGVyKTsKKworLyoqCisgKiBSZXNl
dHMgdGhlIHRvLVVuaWNvZGUgcGFydCBvZiBhIGNvbnZlcnRlciBzdGF0ZSB0byB0aGUgZGVmYXVs
dCBzdGF0ZS4KKyAqIFRoaXMgaXMgdXNlZCBpbiB0aGUgY2FzZSBvZiBhbiBlcnJvciB0byByZXN0
YXJ0IGEgY29udmVyc2lvbiB0bworICogVW5pY29kZSB0byBhIGtub3duIGRlZmF1bHQgc3RhdGUu
IEl0IHdpbGwgYWxzbyBlbXB0eSB0aGUgaW50ZXJuYWwKKyAqIG91dHB1dCBidWZmZXJzIHVzZWQg
Zm9yIHRoZSBjb252ZXJzaW9uIHRvIFVuaWNvZGUgY29kZXBvaW50cy4KKyAqIEBwYXJhbSBjb252
ZXJ0ZXIgdGhlIFVuaWNvZGUgY29udmVydGVyCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9T
VEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y252X3Jlc2V0VG9Vbmljb2RlKFVDb252ZXJ0ZXIgKmNv
bnZlcnRlcik7CisKKy8qKgorICogUmVzZXRzIHRoZSBmcm9tLVVuaWNvZGUgcGFydCBvZiBhIGNv
bnZlcnRlciBzdGF0ZSB0byB0aGUgZGVmYXVsdCBzdGF0ZS4KKyAqIFRoaXMgaXMgdXNlZCBpbiB0
aGUgY2FzZSBvZiBhbiBlcnJvciB0byByZXN0YXJ0IGEgY29udmVyc2lvbiBmcm9tCisgKiBVbmlj
b2RlIHRvIGEga25vd24gZGVmYXVsdCBzdGF0ZS4gSXQgd2lsbCBhbHNvIGVtcHR5IHRoZSBpbnRl
cm5hbCBvdXRwdXQKKyAqIGJ1ZmZlcnMgdXNlZCBmb3IgdGhlIGNvbnZlcnNpb24gZnJvbSBVbmlj
b2RlIGNvZGVwb2ludHMuCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSBVbmljb2RlIGNvbnZlcnRl
cgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNu
dl9yZXNldEZyb21Vbmljb2RlKFVDb252ZXJ0ZXIgKmNvbnZlcnRlcik7CisKKy8qKgorICogUmV0
dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgb3V0cHV0IHBlciBVQ2hh
ciBpbiBjb252ZXJzaW9uCisgKiBmcm9tIFVuaWNvZGUgdXNpbmcgdGhpcyBjb252ZXJ0ZXIuCisg
KiBUaGUgcmV0dXJuZWQgbnVtYmVyIGNhbiBiZSB1c2VkIHdpdGggVUNOVl9HRVRfTUFYX0JZVEVT
X0ZPUl9TVFJJTkcKKyAqIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIHRhcmdldCBidWZmZXIg
Zm9yIGNvbnZlcnNpb24gZnJvbSBVbmljb2RlLgorICoKKyAqIE5vdGU6IEJlZm9yZSBJQ1UgMi44
LCB0aGlzIGZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIHJlbGlhYmxlIG51bWJlcnMgZm9yCisgKiBz
b21lIHN0YXRlZnVsIGNvbnZlcnRlcnMgKEVCQ0RJQ19TVEFURUZVTCwgSVNPLTIwMjIpIGFuZCBM
TUJDUy4KKyAqCisgKiBUaGlzIG51bWJlciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBtYXhp
bXVtIG51bWJlciBvZiBieXRlcyBwZXIKKyAqICJjb252ZXJzaW9uIHVuaXQiLiBJbiBvdGhlciB3
b3JkcywgaXQgbWF5IG5vdCBiZSB0aGUgaW50dWl0aXZlbHkgZXhwZWN0ZWQKKyAqIG51bWJlciBv
ZiBieXRlcyBwZXIgY2hhcmFjdGVyIHRoYXQgd291bGQgYmUgcHVibGlzaGVkIGZvciBhIGNoYXJz
ZXQsCisgKiBhbmQgbWF5IG5vdCBmdWxmaWxsIGFueSBvdGhlciBwdXJwb3NlIHRoYW4gdGhlIGFs
bG9jYXRpb24gb2YgYW4gb3V0cHV0CisgKiBidWZmZXIgb2YgZ3VhcmFudGVlZCBzdWZmaWNpZW50
IHNpemUgZm9yIGEgZ2l2ZW4gaW5wdXQgbGVuZ3RoIGFuZCBjb252ZXJ0ZXIuCisgKgorICogRXhh
bXBsZXMgZm9yIHNwZWNpYWwgY2FzZXMgdGhhdCBhcmUgdGFrZW4gaW50byBhY2NvdW50OgorICog
LSBTdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzIG1heSBjb252ZXJ0IHRvIG1vcmUgYnl0ZXMgdGhh
biBCTVAgY29kZSBwb2ludHMuCisgKiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBieXRlcyBwZXIg
VUNoYXIgKFVURi0xNiBjb2RlIHVuaXQpLCBub3QgcGVyCisgKiAgIFVuaWNvZGUgY29kZSBwb2lu
dCwgZm9yIGVmZmljaWVudCBidWZmZXIgYWxsb2NhdGlvbi4KKyAqIC0gU3RhdGUtc2hpZnRpbmcg
b3V0cHV0IChTSS9TTywgZXNjYXBlcywgZXRjLikgZnJvbSBzdGF0ZWZ1bCBjb252ZXJ0ZXJzLgor
ICogLSBXaGVuIG0gaW5wdXQgVUNoYXJzIGFyZSBjb252ZXJ0ZWQgdG8gbiBvdXRwdXQgYnl0ZXMs
IHRoZW4gdGhlIG1heGltdW0gbS9uCisgKiAgIGlzIHRha2VuIGludG8gYWNjb3VudC4KKyAqCisg
KiBUaGUgbnVtYmVyIHJldHVybmVkIGhlcmUgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQKKyAq
IChzZWUgVUNOVl9HRVRfTUFYX0JZVEVTX0ZPUl9TVFJJTkcpOgorICogLSBjYWxsYmFja3Mgd2hp
Y2ggb3V0cHV0IG1vcmUgdGhhbiBvbmUgY2hhcnNldCBjaGFyYWN0ZXIgc2VxdWVuY2UgcGVyIGNh
bGwsCisgKiAgIGxpa2UgZXNjYXBlIGNhbGxiYWNrcworICogLSBpbml0aWFsIGFuZCBmaW5hbCBu
b24tY2hhcmFjdGVyIGJ5dGVzIHRoYXQgYXJlIG91dHB1dCBieSBzb21lIGNvbnZlcnRlcnMKKyAq
ICAgKGF1dG9tYXRpYyBCT01zLCBpbml0aWFsIGVzY2FwZSBzZXF1ZW5jZSwgZmluYWwgU0ksIGV0
Yy4pCisgKgorICogRXhhbXBsZXMgZm9yIHJldHVybmVkIHZhbHVlczoKKyAqIC0gU0JDUyBjaGFy
c2V0czogMQorICogLSBTaGlmdC1KSVM6IDIKKyAqIC0gVVRGLTE2OiAyICgyIHBlciBCTVAsIDQg
cGVyIHN1cnJvZ2F0ZSBfcGFpcl8sIEJPTSBub3QgY291bnRlZCkKKyAqIC0gVVRGLTg6IDMgKDMg
cGVyIEJNUCwgNCBwZXIgc3Vycm9nYXRlIF9wYWlyXykKKyAqIC0gRUJDRElDX1NUQVRFRlVMIChF
QkNESUMgbWl4ZWQgU0JDUy9EQkNTKTogMyAoU08gKyBEQkNTKQorICogLSBJU08tMjAyMjogMyAo
YWx3YXlzIG91dHB1dHMgVVRGLTgpCisgKiAtIElTTy0yMDIyLUpQOiA2ICg0LWJ5dGUgZXNjYXBl
IHNlcXVlbmNlcyArIERCQ1MpCisgKiAtIElTTy0yMDIyLUNOOiA4ICg0LWJ5dGUgZGVzaWduYXRv
ciBzZXF1ZW5jZXMgKyAyLWJ5dGUgU1MyL1NTMyArIERCQ1MpCisgKgorICogQHBhcmFtIGNvbnZl
cnRlciBUaGUgVW5pY29kZSBjb252ZXJ0ZXIuCisgKiBAcmV0dXJuIFRoZSBtYXhpbXVtIG51bWJl
ciBvZiBieXRlcyBwZXIgVUNoYXIgdGhhdCBhcmUgb3V0cHV0IGJ5IHVjbnZfZnJvbVVuaWNvZGUo
KSwKKyAqICAgICAgICAgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIFVDTlZfR0VUX01BWF9CWVRF
U19GT1JfU1RSSU5HIGZvciBidWZmZXIgYWxsb2NhdGlvbi4KKyAqCisgKiBAc2VlIFVDTlZfR0VU
X01BWF9CWVRFU19GT1JfU1RSSU5HCisgKiBAc2VlIHVjbnZfZ2V0TWluQ2hhclNpemUKKyAqIEBz
dGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQ4X3QgVV9FWFBPUlQyCit1Y252X2dldE1h
eENoYXJTaXplKGNvbnN0IFVDb252ZXJ0ZXIgKmNvbnZlcnRlcik7CisKKyNpZm5kZWYgVV9ISURF
X0RSQUZUX0FQSQorCisvKioKKyAqIENhbGN1bGF0ZXMgdGhlIHNpemUgb2YgYSBidWZmZXIgZm9y
IGNvbnZlcnNpb24gZnJvbSBVbmljb2RlIHRvIGEgY2hhcnNldC4KKyAqIFRoZSBjYWxjdWxhdGVk
IHNpemUgaXMgZ3VhcmFudGVlZCB0byBiZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvbnZlcnNpb24u
CisgKgorICogSXQgdGFrZXMgaW50byBhY2NvdW50IGluaXRpYWwgYW5kIGZpbmFsIG5vbi1jaGFy
YWN0ZXIgYnl0ZXMgdGhhdCBhcmUgb3V0cHV0CisgKiBieSBzb21lIGNvbnZlcnRlcnMuCisgKiBJ
dCBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBjYWxsYmFja3Mgd2hpY2ggb3V0cHV0IG1vcmUg
dGhhbiBvbmUgY2hhcnNldAorICogY2hhcmFjdGVyIHNlcXVlbmNlIHBlciBjYWxsLCBsaWtlIGVz
Y2FwZSBjYWxsYmFja3MuCisgKiBUaGUgZGVmYXVsdCAoc3Vic3RpdHV0aW9uKSBjYWxsYmFjayBv
bmx5IG91dHB1dHMgb25lIGNoYXJzZXQgY2hhcmFjdGVyIHNlcXVlbmNlLgorICoKKyAqIEBwYXJh
bSBsZW5ndGggTnVtYmVyIG9mIFVDaGFycyB0byBiZSBjb252ZXJ0ZWQuCisgKiBAcGFyYW0gbWF4
Q2hhclNpemUgUmV0dXJuIHZhbHVlIGZyb20gdWNudl9nZXRNYXhDaGFyU2l6ZSgpIGZvciB0aGUg
Y29udmVydGVyCisgKiAgICAgICAgICAgICAgICAgICAgdGhhdCB3aWxsIGJlIHVzZWQuCisgKiBA
cmV0dXJuIFNpemUgb2YgYSBidWZmZXIgdGhhdCB3aWxsIGJlIGxhcmdlIGVub3VnaCB0byBob2xk
IHRoZSBvdXRwdXQgYnl0ZXMgb2YKKyAqICAgICAgICAgY29udmVydGluZyBsZW5ndGggVUNoYXJz
IHdpdGggdGhlIGNvbnZlcnRlciB0aGF0IHJldHVybmVkIHRoZSBtYXhDaGFyU2l6ZS4KKyAqCisg
KiBAc2VlIHVjbnZfZ2V0TWF4Q2hhclNpemUKKyAqIEBkcmFmdCBJQ1UgMi44CisgKi8KKyNkZWZp
bmUgVUNOVl9HRVRfTUFYX0JZVEVTX0ZPUl9TVFJJTkcobGVuZ3RoLCBtYXhDaGFyU2l6ZSkgXAor
ICAgICAoKChpbnQzMl90KShsZW5ndGgpKzEwKSooaW50MzJfdCkobWF4Q2hhclNpemUpKQorCisj
ZW5kaWYgLypVX0hJREVfRFJBRlRfQVBJKi8KKworLyoqCisgKiBSZXR1cm5zIHRoZSBtaW5pbXVt
IGJ5dGUgbGVuZ3RoIGZvciBjaGFyYWN0ZXJzIGluIHRoaXMgY29kZXBhZ2UuIAorICogVGhpcyBp
cyB1c3VhbGx5IGVpdGhlciAxIG9yIDIuCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSBVbmljb2Rl
IGNvbnZlcnRlcgorICogQHJldHVybiB0aGUgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgYWxsb3dl
ZCBieSB0aGlzIHBhcnRpY3VsYXIgY29udmVydGVyCisgKiBAc2VlIHVjbnZfZ2V0TWF4Q2hhclNp
emUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQ4X3QgVV9FWFBPUlQyCit1
Y252X2dldE1pbkNoYXJTaXplKGNvbnN0IFVDb252ZXJ0ZXIgKmNvbnZlcnRlcik7CisKKy8qKgor
ICogUmV0dXJucyB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb252ZXJ0ZXIgcGFzc2VkIGluIGJh
c2VkIG9uIHRoZSBMb2NhbGUgCisgKiBwYXNzZWQgaW4uIElmIHRoZSBsb2NhbGUgY29udGFpbnMg
bm8gZGlzcGxheSBuYW1lLCB0aGUgaW50ZXJuYWwgQVNDSUkKKyAqIG5hbWUgd2lsbCBiZSBmaWxs
ZWQgaW4uCisgKgorICogQHBhcmFtIGNvbnZlcnRlciB0aGUgVW5pY29kZSBjb252ZXJ0ZXIuCisg
KiBAcGFyYW0gZGlzcGxheUxvY2FsZSBpcyB0aGUgc3BlY2lmaWMgTG9jYWxlIHdlIHdhbnQgdG8g
bG9jYWxpc2VkIGZvcgorICogQHBhcmFtIGRpc3BsYXlOYW1lIHVzZXIgcHJvdmlkZWQgYnVmZmVy
IHRvIGJlIGZpbGxlZCBpbgorICogQHBhcmFtIGRpc3BsYXlOYW1lQ2FwYWNpdHkgc2l6ZSBvZiBk
aXNwbGF5TmFtZSBCdWZmZXIKKyAqIEBwYXJhbSBlcnIgZXJyb3Igc3RhdHVzIGNvZGUKKyAqIEBy
ZXR1cm4gZGlzcGxheU5hbWVMZW5ndGggbnVtYmVyIG9mIFVDaGFyIG5lZWRlZCBpbiBkaXNwbGF5
TmFtZQorICogQHNlZSB1Y252X2dldE5hbWUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NU
QUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNudl9nZXREaXNwbGF5TmFtZShjb25zdCBVQ29udmVy
dGVyICpjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpc3BsYXlM
b2NhbGUsCisgICAgICAgICAgICAgICAgICAgIFVDaGFyICpkaXNwbGF5TmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCBkaXNwbGF5TmFtZUNhcGFjaXR5LAorICAgICAgICAgICAgICAg
ICAgICBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIEdldHMgdGhlIGludGVybmFsLCBjYW5v
bmljYWwgbmFtZSBvZiB0aGUgY29udmVydGVyICh6ZXJvLXRlcm1pbmF0ZWQpLgorICogVGhlIGxp
ZmV0aW1lIG9mIHRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBiZSB0aGF0IG9mIHRoZSBjb252ZXJ0
ZXIgCisgKiBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbi4KKyAqIEBwYXJhbSBjb252ZXJ0ZXIgdGhl
IFVuaWNvZGUgY29udmVydGVyCisgKiBAcGFyYW0gZXJyIFVFcnJvckNvZGUgc3RhdHVzCisgKiBA
cmV0dXJuIHRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSBjb252ZXJ0ZXIKKyAqIEBzZWUgdWNudl9n
ZXREaXNwbGF5TmFtZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNo
YXIgKiBVX0VYUE9SVDIgCit1Y252X2dldE5hbWUoY29uc3QgVUNvbnZlcnRlciAqY29udmVydGVy
LCBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIEdldHMgYSBjb2RlcGFnZSBudW1iZXIgYXNz
b2NpYXRlZCB3aXRoIHRoZSBjb252ZXJ0ZXIuIFRoaXMgaXMgbm90IGd1YXJhbnRlZWQKKyAqIHRv
IGJlIHRoZSBvbmUgdXNlZCB0byBjcmVhdGUgdGhlIGNvbnZlcnRlci4gU29tZSBjb252ZXJ0ZXJz
IGRvIG5vdCByZXByZXNlbnQKKyAqIHBsYXRmb3JtIHJlZ2lzdGVyZWQgY29kZXBhZ2VzIGFuZCBy
ZXR1cm4gemVybyBmb3IgdGhlIGNvZGVwYWdlIG51bWJlci4KKyAqIFRoZSBlcnJvciBjb2RlIGZp
bGwtaW4gcGFyYW1ldGVyIGluZGljYXRlcyBpZiB0aGUgY29kZXBhZ2UgbnVtYmVyCisgKiBpcyBh
dmFpbGFibGUuCisgKiBEb2VzIG5vdCBjaGVjayBpZiB0aGUgY29udmVydGVyIGlzIDxUVD5OVUxM
PC9UVD4gb3IgaWYgY29udmVydGVyJ3MgZGF0YQorICogdGFibGUgaXMgPFRUPk5VTEw8L1RUPi4K
KyAqCisgKiBJbXBvcnRhbnQ6IFRoZSB1c2Ugb2YgQ0NTSURzIGlzIG5vdCByZWNvbW1lbmRlZCBi
ZWNhdXNlIGl0IGlzIGxpbWl0ZWQKKyAqIHRvIG9ubHkgdHdvIHBsYXRmb3JtcyBpbiBwcmluY2lw
bGUgYW5kIG9ubHkgb25lIChVQ05WX0lCTSkgaW4gdGhlIGN1cnJlbnQKKyAqIElDVSBjb252ZXJ0
ZXIgQVBJLgorICogQWxzbywgQ0NTSURzIGFyZSBpbnN1ZmZpY2llbnQgdG8gaWRlbnRpZnkgSUJN
IFVuaWNvZGUgY29udmVyc2lvbiB0YWJsZXMgcHJlY2lzZWx5LgorICogRm9yIG1vcmUgZGV0YWls
cyBzZWUgdWNudl9vcGVuQ0NTSUQoKS4KKyAqCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSBVbmlj
b2RlIGNvbnZlcnRlcgorICogQHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVzIGNvZGUuCisgKiBA
cmV0dXJuIElmIGFueSBlcnJvciBvY2N1cnJzLCAtMSB3aWxsIGJlIHJldHVybmVkIG90aGVyd2lz
ZSwgdGhlIGNvZGVwYWdlIG51bWJlcgorICogd2lsbCBiZSByZXR1cm5lZAorICogQHNlZSB1Y252
X29wZW5DQ1NJRAorICogQHNlZSB1Y252X2dldFBsYXRmb3JtCisgKiBAc3RhYmxlIElDVSAyLjAK
KyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjbnZfZ2V0Q0NTSUQoY29uc3QgVUNv
bnZlcnRlciAqY29udmVydGVyLAorICAgICAgICAgICAgICBVRXJyb3JDb2RlICplcnIpOworCisv
KioKKyAqIEdldHMgYSBjb2RlcGFnZSBwbGF0Zm9ybSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnZl
cnRlci4gQ3VycmVudGx5LCAKKyAqIG9ubHkgPFRUPlVDTlZfSUJNPC9UVD4gd2lsbCBiZSByZXR1
cm5lZC4KKyAqIERvZXMgbm90IHRlc3QgaWYgdGhlIGNvbnZlcnRlciBpcyA8VFQ+TlVMTDwvVFQ+
IG9yIGlmIGNvbnZlcnRlcidzIGRhdGEgCisgKiB0YWJsZSBpcyA8VFQ+TlVMTDwvVFQ+LiAKKyAq
IEBwYXJhbSBjb252ZXJ0ZXIgdGhlIFVuaWNvZGUgY29udmVydGVyCisgKiBAcGFyYW0gZXJyIHRo
ZSBlcnJvciBzdGF0dXMgY29kZS4KKyAqIEByZXR1cm4gVGhlIGNvZGVwYWdlIHBsYXRmb3JtCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlclBsYXRmb3JtIFVfRVhQ
T1JUMgordWNudl9nZXRQbGF0Zm9ybShjb25zdCBVQ29udmVydGVyICpjb252ZXJ0ZXIsCisgICAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUgKmVycik7CisKKy8qKgorICogR2V0cyB0aGUgdHlwZSBv
ZiB0aGUgY29udmVydGVyCisgKiBlLmcuIFNCQ1MsIE1CQ1MsIERCQ1MsIFVURjgsIFVURjE2X0JF
LCBVVEYxNl9MRSwgSVNPXzIwMjIsIAorICogRUJDRElDX1NUQVRFRlVMLCBMQVRJTl8xCisgKiBA
cGFyYW0gY29udmVydGVyIGEgdmFsaWQsIG9wZW5lZCBjb252ZXJ0ZXIKKyAqIEByZXR1cm4gdGhl
IHR5cGUgb2YgdGhlIGNvbnZlcnRlcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IFVDb252ZXJ0ZXJUeXBlIFVfRVhQT1JUMgordWNudl9nZXRUeXBlKGNvbnN0IFVDb252ZXJ0ZXIg
KiBjb252ZXJ0ZXIpOworCisvKioKKyAqIEdldHMgdGhlICJzdGFydGVyIiAobGVhZCkgYnl0ZXMg
Zm9yIGNvbnZlcnRlcnMgb2YgdHlwZSBNQkNTLgorICogV2lsbCBmaWxsIGluIGFuIDxUVD5VX0lM
TEVHQUxfQVJHVU1FTlRfRVJST1I8L1RUPiBpZiBjb252ZXJ0ZXIgcGFzc2VkIGluCisgKiBpcyBu
b3QgTUJDUy4gRmlsbHMgaW4gYW4gYXJyYXkgb2YgdHlwZSBVQm9vbCwgd2l0aCB0aGUgdmFsdWUg
b2YgdGhlIGJ5dGUgCisgKiBhcyBvZmZzZXQgdG8gdGhlIGFycmF5LiBGb3IgZXhhbXBsZSwgaWYg
KHN0YXJ0ZXJzWzB4MjBdID09IFRSVUUpIGF0IHJldHVybiwKKyAqIGl0IG1lYW5zIHRoYXQgdGhl
IGJ5dGUgMHgyMCBpcyBhIHN0YXJ0ZXIgYnl0ZSBpbiB0aGlzIGNvbnZlcnRlci4KKyAqIENvbnRl
eHQgcG9pbnRlcnMgYXJlIGFsd2F5cyBvd25lZCBieSB0aGUgY2FsbGVyLgorICogCisgKiBAcGFy
YW0gY29udmVydGVyIGEgdmFsaWQsIG9wZW5lZCBjb252ZXJ0ZXIgb2YgdHlwZSBNQkNTCisgKiBA
cGFyYW0gc3RhcnRlcnMgYW4gYXJyYXkgb2Ygc2l6ZSAyNTYgdG8gYmUgZmlsbGVkIGluCisgKiBA
cGFyYW0gZXJyIGVycm9yIHN0YXR1cywgPFRUPlVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjwvVFQ+
IGlmIHRoZSAKKyAqIGNvbnZlcnRlciBpcyBub3QgYSB0eXBlIHdoaWNoIGNhbiByZXR1cm4gc3Rh
cnRlcnMuCisgKiBAc2VlIHVjbnZfZ2V0VHlwZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y252X2dldFN0YXJ0ZXJzKGNvbnN0IFVDb252ZXJ0ZXIq
IGNvbnZlcnRlciwgCisgICAgICAgICAgICAgICAgIFVCb29sIHN0YXJ0ZXJzWzI1Nl0sCisgICAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUqIGVycik7CisKKworLyoqCisgKiBTZWxlY3RvcnMgZm9y
IFVuaWNvZGUgc2V0cyB0aGF0IGNhbiBiZSByZXR1cm5lZCBieSB1Y252X2dldFVuaWNvZGVTZXQo
KS4KKyAqIEBzZWUgdWNudl9nZXRVbmljb2RlU2V0CisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLwor
dHlwZWRlZiBlbnVtIFVDb252ZXJ0ZXJVbmljb2RlU2V0IHsKKyAgICAvKiogU2VsZWN0IHRoZSBz
ZXQgb2Ygcm91bmR0cmlwcGFibGUgVW5pY29kZSBjb2RlIHBvaW50cy4gQHN0YWJsZSBJQ1UgMi42
ICovCisgICAgVUNOVl9ST1VORFRSSVBfU0VULAorICAgIC8qKiBOdW1iZXIgb2YgVUNvbnZlcnRl
clVuaWNvZGVTZXQgc2VsZWN0b3JzLiBAc3RhYmxlIElDVSAyLjYgKi8KKyAgICBVQ05WX1NFVF9D
T1VOVAorfSBVQ29udmVydGVyVW5pY29kZVNldDsKKworCisvKioKKyAqIFJldHVybnMgdGhlIHNl
dCBvZiBVbmljb2RlIGNvZGUgcG9pbnRzIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCBieSBhbiBJQ1Ug
Y29udmVydGVyLgorICoKKyAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHJldHVybnMgb25s
eSBvbmUga2luZCBvZiBzZXQgKFVDTlZfUk9VTkRUUklQX1NFVCk6CisgKiBUaGUgc2V0IG9mIGFs
bCBVbmljb2RlIGNvZGUgcG9pbnRzIHRoYXQgY2FuIGJlIHJvdW5kdHJpcC1jb252ZXJ0ZWQKKyAq
IChjb252ZXJ0ZWQgd2l0aG91dCBhbnkgZGF0YSBsb3NzKSB3aXRoIHRoZSBjb252ZXJ0ZXIuCisg
KiBUaGlzIHNldCB3aWxsIG5vdCBpbmNsdWRlIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBmYWxsYmFj
ayBtYXBwaW5ncworICogb3IgYXJlIG9ubHkgdGhlIHJlc3VsdCBvZiByZXZlcnNlIGZhbGxiYWNr
IG1hcHBpbmdzLgorICogU2VlIFVUUiAjMjIgIkNoYXJhY3RlciBNYXBwaW5nIE1hcmt1cCBMYW5n
dWFnZSIKKyAqIGF0IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjIyLworICoKKyAq
IFRoaXMgaXMgdXNlZnVsIGZvciBleGFtcGxlIGZvcgorICogLSBjaGVja2luZyB0aGF0IGEgc3Ry
aW5nIG9yIGRvY3VtZW50IGNhbiBiZSByb3VuZHRyaXAtY29udmVydGVkIHdpdGggYSBjb252ZXJ0
ZXIsCisgKiAgIHdpdGhvdXQvYmVmb3JlIGFjdHVhbGx5IHBlcmZvcm1pbmcgdGhlIGNvbnZlcnNp
b24KKyAqIC0gdGVzdGluZyBpZiBhIGNvbnZlcnRlciBjYW4gYmUgdXNlZCBmb3IgdGV4dCBmb3Ig
dHlwaWNhbCB0ZXh0IGZvciBhIGNlcnRhaW4gbG9jYWxlLAorICogICBieSBjb21wYXJpbmcgaXRz
IHJvdW5kdHJpcCBzZXQgd2l0aCB0aGUgc2V0IG9mIEV4ZW1wbGFyQ2hhcmFjdGVycyBmcm9tCisg
KiAgIElDVSdzIGxvY2FsZSBkYXRhIG9yIG90aGVyIHNvdXJjZXMKKyAqCisgKiBJbiB0aGUgZnV0
dXJlLCB0aGVyZSBtYXkgYmUgbW9yZSBVQ29udmVydGVyVW5pY29kZVNldCBjaG9pY2VzIHRvIHNl
bGVjdAorICogc2V0cyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLgorICoKKyAqIEBwYXJhbSBj
bnYgVGhlIGNvbnZlcnRlciBmb3Igd2hpY2ggYSBzZXQgaXMgcmVxdWVzdGVkLgorICogQHBhcmFt
IHNldEZpbGxJbiBBIHZhbGlkIFVTZXQgKi4gSXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHRoaXMgZnVu
Y3Rpb24gYmVmb3JlCisgKiAgICAgICAgICAgIHRoZSBjb252ZXJ0ZXIncyBzcGVjaWZpYyBzZXQg
aXMgZmlsbGVkIGludG8gdGhlIFVTZXQuCisgKiBAcGFyYW0gd2hpY2hTZXQgQSBVQ29udmVydGVy
VW5pY29kZVNldCBzZWxlY3RvcjsKKyAqICAgICAgICAgICAgICBjdXJyZW50bHkgVUNOVl9ST1VO
RFRSSVBfU0VUIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCB2YWx1ZS4KKyAqIEBwYXJhbSBwRXJyb3JD
b2RlIElDVSBlcnJvciBjb2RlIGluL291dCBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAgICAgICAg
ICBNdXN0IGZ1bGZpbGwgVV9TVUNDRVNTIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KKyAqCisg
KiBAc2VlIFVDb252ZXJ0ZXJVbmljb2RlU2V0CisgKiBAc2VlIHVzZXRfb3BlbgorICogQHNlZSB1
c2V0X2Nsb3NlCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9S
VDIKK3VjbnZfZ2V0VW5pY29kZVNldChjb25zdCBVQ29udmVydGVyICpjbnYsCisgICAgICAgICAg
ICAgICAgICAgVVNldCAqc2V0RmlsbEluLAorICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJV
bmljb2RlU2V0IHdoaWNoU2V0LAorICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJv
ckNvZGUpOworCisvKioKKyAqIEdldHMgdGhlIGN1cnJlbnQgY2FsYmFjayBmdW5jdGlvbiB1c2Vk
IGJ5IHRoZSBjb252ZXJ0ZXIgd2hlbiBhbiBpbGxlZ2FsCisgKiAgb3IgaW52YWxpZCBjb2RlcGFn
ZSBzZXF1ZW5jZSBpcyBmb3VuZC4gCisgKiBDb250ZXh0IHBvaW50ZXJzIGFyZSBhbHdheXMgb3du
ZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSB1bmljb2RlIGNv
bnZlcnRlcgorICogQHBhcmFtIGFjdGlvbiBmaWxsaW46IHJldHVybnMgdGhlIGNhbGxiYWNrIGZ1
bmN0aW9uIHBvaW50ZXIKKyAqIEBwYXJhbSBjb250ZXh0IGZpbGxpbjogcmV0dXJucyB0aGUgY2Fs
bGJhY2sncyBwcml2YXRlIHZvaWQqIGNvbnRleHQKKyAqIEBzZWUgdWNudl9zZXRUb1VDYWxsQmFj
aworICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y252
X2dldFRvVUNhbGxCYWNrIChjb25zdCBVQ29udmVydGVyICogY29udmVydGVyLAorICAgICAgICAg
ICAgICAgICAgICAgVUNvbnZlcnRlclRvVUNhbGxiYWNrICphY3Rpb24sCisgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICoqY29udGV4dCk7CisKKy8qKgorICogR2V0cyB0aGUgY3VycmVu
dCBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBjb252ZXJ0ZXIgd2hlbiBpbGxlZ2FsIAor
ICogb3IgaW52YWxpZCBVbmljb2RlIHNlcXVlbmNlIGlzIGZvdW5kLgorICogQ29udGV4dCBwb2lu
dGVycyBhcmUgYWx3YXlzIG93bmVkIGJ5IHRoZSBjYWxsZXIuCisgKgorICogQHBhcmFtIGNvbnZl
cnRlciB0aGUgdW5pY29kZSBjb252ZXJ0ZXIKKyAqIEBwYXJhbSBhY3Rpb24gZmlsbGluOiByZXR1
cm5zIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyCisgKiBAcGFyYW0gY29udGV4dCBmaWxs
aW46IHJldHVybnMgdGhlIGNhbGxiYWNrJ3MgcHJpdmF0ZSB2b2lkKiBjb250ZXh0CisgKiBAc2Vl
IHVjbnZfc2V0RnJvbVVDYWxsQmFjaworICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IHZvaWQgVV9FWFBPUlQyCit1Y252X2dldEZyb21VQ2FsbEJhY2sgKGNvbnN0IFVDb252ZXJ0ZXIg
KiBjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJGcm9tVUNhbGxi
YWNrICphY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKipjb250ZXh0
KTsKKworLyoqCisgKiBDaGFuZ2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBj
b252ZXJ0ZXIgd2hlbgorICogYW4gaWxsZWdhbCBvciBpbnZhbGlkIHNlcXVlbmNlIGlzIGZvdW5k
LgorICogQ29udGV4dCBwb2ludGVycyBhcmUgYWx3YXlzIG93bmVkIGJ5IHRoZSBjYWxsZXIuCisg
KiBQcmVkZWZpbmVkIGFjdGlvbnMgYW5kIGNvbnRleHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdWNu
dl9lcnIuaCBoZWFkZXIuCisgKgorICogQHBhcmFtIGNvbnZlcnRlciB0aGUgdW5pY29kZSBjb252
ZXJ0ZXIKKyAqIEBwYXJhbSBuZXdBY3Rpb24gdGhlIG5ldyBjYWxsYmFjayBmdW5jdGlvbgorICog
QHBhcmFtIG5ld0NvbnRleHQgdGhlIG5ldyB0b1VuaWNvZGUgY2FsbGJhY2sgY29udGV4dCBwb2lu
dGVyLiBUaGlzIGNhbiBiZSBOVUxMLgorICogQHBhcmFtIG9sZEFjdGlvbiBmaWxsaW46IHJldHVy
bnMgdGhlIG9sZCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIGNhbiBiZSBOVUxMLgor
ICogQHBhcmFtIG9sZENvbnRleHQgZmlsbGluOiByZXR1cm5zIHRoZSBvbGQgY2FsbGJhY2sncyBw
cml2YXRlIHZvaWQqIGNvbnRleHQuIFRoaXMgY2FuIGJlIE5VTEwuCisgKiBAcGFyYW0gZXJyIFRo
ZSBlcnJvciBjb2RlIHN0YXR1cworICogQHNlZSB1Y252X2dldFRvVUNhbGxCYWNrCisgKiBAc3Rh
YmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfc2V0VG9VQ2Fs
bEJhY2sgKFVDb252ZXJ0ZXIgKiBjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICBVQ29u
dmVydGVyVG9VQ2FsbGJhY2sgbmV3QWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCogbmV3Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJUb1VDYWxs
YmFjayAqb2xkQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCoqIG9sZENv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICogZXJyKTsKKworLyoqCisg
KiBDaGFuZ2VzIHRoZSBjdXJyZW50IGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIGNvbnZl
cnRlciB3aGVuCisgKiBhbiBpbGxlZ2FsIG9yIGludmFsaWQgc2VxdWVuY2UgaXMgZm91bmQuCisg
KiBDb250ZXh0IHBvaW50ZXJzIGFyZSBhbHdheXMgb3duZWQgYnkgdGhlIGNhbGxlci4KKyAqIFBy
ZWRlZmluZWQgYWN0aW9ucyBhbmQgY29udGV4dHMgY2FuIGJlIGZvdW5kIGluIHRoZSB1Y252X2Vy
ci5oIGhlYWRlci4KKyAqCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSB1bmljb2RlIGNvbnZlcnRl
cgorICogQHBhcmFtIG5ld0FjdGlvbiB0aGUgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAcGFy
YW0gbmV3Q29udGV4dCB0aGUgbmV3IGZyb21Vbmljb2RlIGNhbGxiYWNrIGNvbnRleHQgcG9pbnRl
ci4gVGhpcyBjYW4gYmUgTlVMTC4KKyAqIEBwYXJhbSBvbGRBY3Rpb24gZmlsbGluOiByZXR1cm5z
IHRoZSBvbGQgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBjYW4gYmUgTlVMTC4KKyAq
IEBwYXJhbSBvbGRDb250ZXh0IGZpbGxpbjogcmV0dXJucyB0aGUgb2xkIGNhbGxiYWNrJ3MgcHJp
dmF0ZSB2b2lkKiBjb250ZXh0LiBUaGlzIGNhbiBiZSBOVUxMLgorICogQHBhcmFtIGVyciBUaGUg
ZXJyb3IgY29kZSBzdGF0dXMKKyAqIEBzZWUgdWNudl9nZXRGcm9tVUNhbGxCYWNrCisgKiBAc3Rh
YmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfc2V0RnJvbVVD
YWxsQmFjayAoVUNvbnZlcnRlciAqIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
VUNvbnZlcnRlckZyb21VQ2FsbGJhY2sgbmV3QWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpuZXdDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBVQ29udmVy
dGVyRnJvbVVDYWxsYmFjayAqb2xkQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICoqb2xkQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAq
IGVycik7CisKKy8qKgorICogQ29udmVydHMgYW4gYXJyYXkgb2YgdW5pY29kZSBjaGFyYWN0ZXJz
IHRvIGFuIGFycmF5IG9mIGNvZGVwYWdlCisgKiBjaGFyYWN0ZXJzLiBUaGlzIGZ1bmN0aW9uIGlz
IG9wdGltaXplZCBmb3IgY29udmVydGluZyBhIGNvbnRpbnVvdXMKKyAqIHN0cmVhbSBvZiBkYXRh
IGluIGJ1ZmZlci1zaXplZCBjaHVua3MsIHdoZXJlIHRoZSBlbnRpcmUgc291cmNlIGFuZAorICog
dGFyZ2V0IGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgYnVmZmVycy4KKyAqIAorICogVGhlIHNv
dXJjZSBwb2ludGVyIGlzIGFuIGluL291dCBwYXJhbWV0ZXIuIEl0IHN0YXJ0cyBvdXQgcG9pbnRp
bmcgd2hlcmUgdGhlIAorICogY29udmVyc2lvbiBpcyB0byBiZWdpbiwgYW5kIGVuZHMgdXAgcG9p
bnRpbmcgYWZ0ZXIgdGhlIGxhc3QgVUNoYXIgY29uc3VtZWQuIAorICogCisgKiBUYXJnZXQgc2lt
aWxhcmx5IHN0YXJ0cyBvdXQgcG9pbnRlciBhdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGJ5dGUgaW4g
dGhlIG91dHB1dAorICogYnVmZmVyLCBhbmQgZW5kcyB1cCBwb2ludGluZyBhZnRlciB0aGUgbGFz
dCBieXRlIHdyaXR0ZW4gdG8gdGhlIG91dHB1dC4KKyAqIAorICogVGhlIGNvbnZlcnRlciBhbHdh
eXMgYXR0ZW1wdHMgdG8gY29uc3VtZSB0aGUgZW50aXJlIHNvdXJjZSBidWZmZXIsIHVubGVzcyAK
KyAqICgxLikgdGhlIHRhcmdldCBidWZmZXIgaXMgZnVsbCwgb3IgKDIuKSBhIGZhaWxpbmcgZXJy
b3IgaXMgcmV0dXJuZWQgZnJvbSB0aGUKKyAqIGN1cnJlbnQgY2FsbGJhY2sgZnVuY3Rpb24uICBX
aGVuIGEgc3VjY2Vzc2Z1bCBlcnJvciBzdGF0dXMgaGFzIGJlZW4KKyAqIHJldHVybmVkLCBpdCBt
ZWFucyB0aGF0IGFsbCBvZiB0aGUgc291cmNlIGJ1ZmZlciBoYXMgYmVlbgorICogIGNvbnN1bWVk
LiBBdCB0aGF0IHBvaW50LCB0aGUgY2FsbGVyIHNob3VsZCByZXNldCB0aGUgc291cmNlIGFuZAor
ICogIHNvdXJjZUxpbWl0IHBvaW50ZXJzIHRvIHBvaW50IHRvIHRoZSBuZXh0IGNodW5rLgorICog
CisgKiBBdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gKGZsdXNoPT1UUlVFKSwgdGhlIGlucHV0IGlz
IGNvbXBsZXRlbHkgY29uc3VtZWQKKyAqIHdoZW4gKnNvdXJjZT09c291cmNlTGltaXQgYW5kIG5v
IGVycm9yIGNvZGUgaXMgc2V0LgorICogVGhlIGNvbnZlcnRlciBvYmplY3QgaXMgdGhlbiBhdXRv
bWF0aWNhbGx5IHJlc2V0IGJ5IHRoaXMgZnVuY3Rpb24uCisgKiAoVGhpcyBtZWFucyB0aGF0IGEg
Y29udmVydGVyIG5lZWQgbm90IGJlIHJlc2V0IGV4cGxpY2l0bHkgYmV0d2VlbiBkYXRhCisgKiBz
dHJlYW1zIGlmIGl0IGZpbmlzaGVzIHRoZSBwcmV2aW91cyBzdHJlYW0gd2l0aG91dCBlcnJvcnMu
KQorICogCisgKiBUaGlzIGlzIGEgPEk+c3RhdGVmdWw8L0k+IGNvbnZlcnNpb24uIEFkZGl0aW9u
YWxseSwgZXZlbiB3aGVuIGFsbCBzb3VyY2UgZGF0YSBoYXMKKyAqIGJlZW4gY29uc3VtZWQsIHNv
bWUgZGF0YSBtYXkgYmUgaW4gdGhlIGNvbnZlcnRlcnMnIGludGVybmFsIHN0YXRlLgorICogQ2Fs
bCB0aGlzIGZ1bmN0aW9uIHJlcGVhdGVkbHksIHVwZGF0aW5nIHRoZSB0YXJnZXQgcG9pbnRlcnMg
d2l0aAorICogdGhlIG5leHQgZW1wdHkgY2h1bmsgb2YgdGFyZ2V0IGluIGNhc2Ugb2YgYQorICog
PFRUPlVfQlVGRkVSX09WRVJGTE9XX0VSUk9SPC9UVD4sIGFuZCB1cGRhdGluZyB0aGUgc291cmNl
ICBwb2ludGVycworICogIHdpdGggdGhlIG5leHQgY2h1bmsgb2Ygc291cmNlIHdoZW4gYSBzdWNj
ZXNzZnVsIGVycm9yIHN0YXR1cyBpcworICogcmV0dXJuZWQsIHVudGlsIHRoZXJlIGFyZSBubyBt
b3JlIGNodW5rcyBvZiBzb3VyY2UgZGF0YS4KKyAqIEBwYXJhbSBjb252ZXJ0ZXIgdGhlIFVuaWNv
ZGUgY29udmVydGVyCisgKiBAcGFyYW0gdGFyZ2V0IEkvTyBwYXJhbWV0ZXIuIElucHV0IDogUG9p
bnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciB0byBjb3B5CisgKiAgY29kZXBhZ2Ug
Y2hhcmFjdGVycyB0by4gT3V0cHV0IDogcG9pbnRzIHRvIGFmdGVyIHRoZSBsYXN0IGNvZGVwYWdl
IGNoYXJhY3RlciBjb3BpZWQKKyAqICB0byA8VFQ+dGFyZ2V0PC9UVD4uCisgKiBAcGFyYW0gdGFy
Z2V0TGltaXQgdGhlIHBvaW50ZXIganVzdCBhZnRlciBsYXN0IG9mIHRoZSA8VFQ+dGFyZ2V0PC9U
VD4gYnVmZmVyCisgKiBAcGFyYW0gc291cmNlIEkvTyBwYXJhbWV0ZXIsIHBvaW50ZXIgdG8gcG9p
bnRlciB0byB0aGUgc291cmNlIFVuaWNvZGUgY2hhcmFjdGVyIGJ1ZmZlci4gCisgKiBAcGFyYW0g
c291cmNlTGltaXQgdGhlIHBvaW50ZXIganVzdCBhZnRlciB0aGUgbGFzdCBvZiB0aGUgc291cmNl
IGJ1ZmZlcgorICogQHBhcmFtIG9mZnNldHMgaWYgTlVMTCBpcyBwYXNzZWQsIG5vdGhpbmcgd2ls
bCBoYXBwZW4gdG8gaXQsIG90aGVyd2lzZSBpdCBuZWVkcyB0byBoYXZlIHRoZSBzYW1lIG51bWJl
cgorICogb2YgYWxsb2NhdGVkIGNlbGxzIGFzIDxUVD50YXJnZXQ8L1RUPi4gV2lsbCBmaWxsIGlu
IG9mZnNldHMgZnJvbSB0YXJnZXQgdG8gc291cmNlIHBvaW50ZXIKKyAqIGUuZzogPFRUPm9mZnNl
dHNbM108L1RUPiBpcyBlcXVhbCB0byA2LCBpdCBtZWFucyB0aGF0IHRoZSA8VFQ+dGFyZ2V0WzNd
PC9UVD4gd2FzIGEgcmVzdWx0IG9mIHRyYW5zY29kaW5nIDxUVD5zb3VyY2VbNl08L1RUPgorICog
Rm9yIG91dHB1dCBkYXRhIGNhcnJpZWQgYWNyb3NzIGNhbGxzLCBhbmQgb3RoZXIgZGF0YSB3aXRo
b3V0IGEgc3BlY2lmaWMgc291cmNlIGNoYXJhY3RlcgorICogKHN1Y2ggYXMgZnJvbSBlc2NhcGUg
c2VxdWVuY2VzIG9yIGNhbGxiYWNrcykgIC0xIHdpbGwgYmUgcGxhY2VkIGZvciBvZmZzZXRzLiAK
KyAqIEBwYXJhbSBmbHVzaCBzZXQgdG8gPFRUPlRSVUU8L1RUPiBpZiB0aGUgY3VycmVudCBzb3Vy
Y2UgYnVmZmVyIGlzIHRoZSBsYXN0IGF2YWlsYWJsZQorICogY2h1bmsgb2YgdGhlIHNvdXJjZSwg
PFRUPkZBTFNFPC9UVD4gb3RoZXJ3aXNlLiBOb3RlIHRoYXQgaWYgYSBmYWlsaW5nIHN0YXR1cyBp
cyByZXR1cm5lZCwKKyAqIHRoaXMgZnVuY3Rpb24gbWF5IGhhdmUgdG8gYmUgY2FsbGVkIG11bHRp
cGxlIHRpbWVzIHdpdGggZmx1c2ggc2V0IHRvIDxUVD5UUlVFPC9UVD4gdW50aWwKKyAqIHRoZSBz
b3VyY2UgYnVmZmVyIGlzIGNvbnN1bWVkLgorICogQHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVz
LiAgPFRUPlVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjwvVFQ+IHdpbGwgYmUgc2V0IGlmIHRoZQor
ICogY29udmVydGVyIGlzIDxUVD5OVUxMPC9UVD4uCisgKiA8Y29kZT5VX0JVRkZFUl9PVkVSRkxP
V19FUlJPUjwvY29kZT4gd2lsbCBiZSBzZXQgaWYgdGhlIHRhcmdldCBpcyBmdWxsIGFuZCB0aGVy
ZSBpcyAKKyAqIHN0aWxsIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgdGFyZ2V0LgorICogQHNl
ZSB1Y252X2Zyb21VQ2hhcnMKKyAqIEBzZWUgdWNudl9jb252ZXJ0CisgKiBAc2VlIHVjbnZfZ2V0
TWluQ2hhclNpemUKKyAqIEBzZWUgdWNudl9zZXRUb1VDYWxsQmFjaworICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNudl9mcm9tVW5pY29kZSAoVUNv
bnZlcnRlciAqIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgIGNoYXIgKip0YXJnZXQsCisg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0YXJnZXRMaW1pdCwKKyAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVDaGFyICoqIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
ICogc291cmNlTGltaXQsCisgICAgICAgICAgICAgICAgICBpbnQzMl90KiBvZmZzZXRzLAorICAg
ICAgICAgICAgICAgICAgVUJvb2wgZmx1c2gsCisgICAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl
ICogZXJyKTsKKworLyoqCisgKiBDb252ZXJ0cyBhIGJ1ZmZlciBvZiBjb2RlcGFnZSBieXRlcyBp
bnRvIGFuIGFycmF5IG9mIHVuaWNvZGUgVUNoYXJzCisgKiBjaGFyYWN0ZXJzLiBUaGlzIGZ1bmN0
aW9uIGlzIG9wdGltaXplZCBmb3IgY29udmVydGluZyBhIGNvbnRpbnVvdXMKKyAqIHN0cmVhbSBv
ZiBkYXRhIGluIGJ1ZmZlci1zaXplZCBjaHVua3MsIHdoZXJlIHRoZSBlbnRpcmUgc291cmNlIGFu
ZAorICogdGFyZ2V0IGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgYnVmZmVycy4KKyAqIAorICog
VGhlIHNvdXJjZSBwb2ludGVyIGlzIGFuIGluL291dCBwYXJhbWV0ZXIuIEl0IHN0YXJ0cyBvdXQg
cG9pbnRpbmcgd2hlcmUgdGhlIAorICogY29udmVyc2lvbiBpcyB0byBiZWdpbiwgYW5kIGVuZHMg
dXAgcG9pbnRpbmcgYWZ0ZXIgdGhlIGxhc3QgYnl0ZSBvZiBzb3VyY2UgY29uc3VtZWQuIAorICog
CisgKiBUYXJnZXQgc2ltaWxhcmx5IHN0YXJ0cyBvdXQgcG9pbnRlciBhdCB0aGUgZmlyc3QgYXZh
aWxhYmxlIFVDaGFyIGluIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlciwgYW5kIGVuZHMgdXAgcG9pbnRp
bmcgYWZ0ZXIgdGhlIGxhc3QgVUNoYXIgd3JpdHRlbiB0byB0aGUgb3V0cHV0LiAKKyAqIEl0IGRv
ZXMgTk9UIG5lY2Vzc2FyaWx5IGtlZXAgVUNoYXIgc2VxdWVuY2VzIHRvZ2V0aGVyLgorICogCisg
KiBUaGUgY29udmVydGVyIGFsd2F5cyBhdHRlbXB0cyB0byBjb25zdW1lIHRoZSBlbnRpcmUgc291
cmNlIGJ1ZmZlciwgdW5sZXNzIAorICogKDEuKSB0aGUgdGFyZ2V0IGJ1ZmZlciBpcyBmdWxsLCBv
ciAoMi4pIGEgZmFpbGluZyBlcnJvciBpcyByZXR1cm5lZCBmcm9tIHRoZQorICogY3VycmVudCBj
YWxsYmFjayBmdW5jdGlvbi4gIFdoZW4gYSBzdWNjZXNzZnVsIGVycm9yIHN0YXR1cyBoYXMgYmVl
bgorICogcmV0dXJuZWQsIGl0IG1lYW5zIHRoYXQgYWxsIG9mIHRoZSBzb3VyY2UgYnVmZmVyIGhh
cyBiZWVuCisgKiAgY29uc3VtZWQuIEF0IHRoYXQgcG9pbnQsIHRoZSBjYWxsZXIgc2hvdWxkIHJl
c2V0IHRoZSBzb3VyY2UgYW5kCisgKiAgc291cmNlTGltaXQgcG9pbnRlcnMgdG8gcG9pbnQgdG8g
dGhlIG5leHQgY2h1bmsuCisgKgorICogQXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIChmbHVzaD09
VFJVRSksIHRoZSBpbnB1dCBpcyBjb21wbGV0ZWx5IGNvbnN1bWVkCisgKiB3aGVuICpzb3VyY2U9
PXNvdXJjZUxpbWl0IGFuZCBubyBlcnJvciBjb2RlIGlzIHNldAorICogVGhlIGNvbnZlcnRlciBv
YmplY3QgaXMgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc2V0IGJ5IHRoaXMgZnVuY3Rpb24uCisgKiAo
VGhpcyBtZWFucyB0aGF0IGEgY29udmVydGVyIG5lZWQgbm90IGJlIHJlc2V0IGV4cGxpY2l0bHkg
YmV0d2VlbiBkYXRhCisgKiBzdHJlYW1zIGlmIGl0IGZpbmlzaGVzIHRoZSBwcmV2aW91cyBzdHJl
YW0gd2l0aG91dCBlcnJvcnMuKQorICogCisgKiBUaGlzIGlzIGEgPEk+c3RhdGVmdWw8L0k+IGNv
bnZlcnNpb24uIEFkZGl0aW9uYWxseSwgZXZlbiB3aGVuIGFsbCBzb3VyY2UgZGF0YSBoYXMKKyAq
IGJlZW4gY29uc3VtZWQsIHNvbWUgZGF0YSBtYXkgYmUgaW4gdGhlIGNvbnZlcnRlcnMnIGludGVy
bmFsIHN0YXRlLgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHJlcGVhdGVkbHksIHVwZGF0aW5nIHRo
ZSB0YXJnZXQgcG9pbnRlcnMgd2l0aAorICogdGhlIG5leHQgZW1wdHkgY2h1bmsgb2YgdGFyZ2V0
IGluIGNhc2Ugb2YgYQorICogPFRUPlVfQlVGRkVSX09WRVJGTE9XX0VSUk9SPC9UVD4sIGFuZCB1
cGRhdGluZyB0aGUgc291cmNlICBwb2ludGVycworICogIHdpdGggdGhlIG5leHQgY2h1bmsgb2Yg
c291cmNlIHdoZW4gYSBzdWNjZXNzZnVsIGVycm9yIHN0YXR1cyBpcworICogcmV0dXJuZWQsIHVu
dGlsIHRoZXJlIGFyZSBubyBtb3JlIGNodW5rcyBvZiBzb3VyY2UgZGF0YS4KKyAqIEBwYXJhbSBj
b252ZXJ0ZXIgdGhlIFVuaWNvZGUgY29udmVydGVyCisgKiBAcGFyYW0gdGFyZ2V0IEkvTyBwYXJh
bWV0ZXIuIElucHV0IDogUG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciB0byBj
b3B5CisgKiAgVUNoYXJzIGludG8uIE91dHB1dCA6IHBvaW50cyB0byBhZnRlciB0aGUgbGFzdCBV
Q2hhciBjb3BpZWQuCisgKiBAcGFyYW0gdGFyZ2V0TGltaXQgdGhlIHBvaW50ZXIganVzdCBhZnRl
ciB0aGUgZW5kIG9mIHRoZSA8VFQ+dGFyZ2V0PC9UVD4gYnVmZmVyCisgKiBAcGFyYW0gc291cmNl
IEkvTyBwYXJhbWV0ZXIsIHBvaW50ZXIgdG8gcG9pbnRlciB0byB0aGUgc291cmNlIGNvZGVwYWdl
IGJ1ZmZlci4gCisgKiBAcGFyYW0gc291cmNlTGltaXQgdGhlIHBvaW50ZXIgdG8gdGhlIGJ5dGUg
YWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc291cmNlIGJ1ZmZlcgorICogQHBhcmFtIG9mZnNldHMgaWYg
TlVMTCBpcyBwYXNzZWQsIG5vdGhpbmcgd2lsbCBoYXBwZW4gdG8gaXQsIG90aGVyd2lzZSBpdCBu
ZWVkcyB0byBoYXZlIHRoZSBzYW1lIG51bWJlcgorICogb2YgYWxsb2NhdGVkIGNlbGxzIGFzIDxU
VD50YXJnZXQ8L1RUPi4gV2lsbCBmaWxsIGluIG9mZnNldHMgZnJvbSB0YXJnZXQgdG8gc291cmNl
IHBvaW50ZXIKKyAqIGUuZzogPFRUPm9mZnNldHNbM108L1RUPiBpcyBlcXVhbCB0byA2LCBpdCBt
ZWFucyB0aGF0IHRoZSA8VFQ+dGFyZ2V0WzNdPC9UVD4gd2FzIGEgcmVzdWx0IG9mIHRyYW5zY29k
aW5nIDxUVD5zb3VyY2VbNl08L1RUPgorICogRm9yIG91dHB1dCBkYXRhIGNhcnJpZWQgYWNyb3Nz
IGNhbGxzLCBhbmQgb3RoZXIgZGF0YSB3aXRob3V0IGEgc3BlY2lmaWMgc291cmNlIGNoYXJhY3Rl
cgorICogKHN1Y2ggYXMgZnJvbSBlc2NhcGUgc2VxdWVuY2VzIG9yIGNhbGxiYWNrcykgIC0xIHdp
bGwgYmUgcGxhY2VkIGZvciBvZmZzZXRzLiAKKyAqIEBwYXJhbSBmbHVzaCBzZXQgdG8gPFRUPlRS
VUU8L1RUPiBpZiB0aGUgY3VycmVudCBzb3VyY2UgYnVmZmVyIGlzIHRoZSBsYXN0IGF2YWlsYWJs
ZQorICogY2h1bmsgb2YgdGhlIHNvdXJjZSwgPFRUPkZBTFNFPC9UVD4gb3RoZXJ3aXNlLiBOb3Rl
IHRoYXQgaWYgYSBmYWlsaW5nIHN0YXR1cyBpcyByZXR1cm5lZCwKKyAqIHRoaXMgZnVuY3Rpb24g
bWF5IGhhdmUgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZmx1c2ggc2V0IHRvIDxU
VD5UUlVFPC9UVD4gdW50aWwKKyAqIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGNvbnN1bWVkLgorICog
QHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVzLiAgPFRUPlVfSUxMRUdBTF9BUkdVTUVOVF9FUlJP
UjwvVFQ+IHdpbGwgYmUgc2V0IGlmIHRoZQorICogY29udmVydGVyIGlzIDxUVD5OVUxMPC9UVD4u
CisgKiA8Y29kZT5VX0JVRkZFUl9PVkVSRkxPV19FUlJPUjwvY29kZT4gd2lsbCBiZSBzZXQgaWYg
dGhlIHRhcmdldCBpcyBmdWxsIGFuZCB0aGVyZSBpcyAKKyAqIHN0aWxsIGRhdGEgdG8gYmUgd3Jp
dHRlbiB0byB0aGUgdGFyZ2V0LiAKKyAqIEBzZWUgdWNudl9mcm9tVUNoYXJzCisgKiBAc2VlIHVj
bnZfY29udmVydAorICogQHNlZSB1Y252X2dldE1pbkNoYXJTaXplCisgKiBAc2VlIHVjbnZfc2V0
RnJvbVVDYWxsQmFjaworICogQHNlZSB1Y252X2dldE5leHRVQ2hhcgorICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNudl90b1VuaWNvZGUoVUNvbnZl
cnRlciAqY29udmVydGVyLAorICAgICAgICAgICAgICAgVUNoYXIgKip0YXJnZXQsCisgICAgICAg
ICAgICAgICBjb25zdCBVQ2hhciAqdGFyZ2V0TGltaXQsCisgICAgICAgICAgICAgICBjb25zdCBj
aGFyICoqc291cmNlLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc291cmNlTGltaXQsCisg
ICAgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXRzLAorICAgICAgICAgICAgICAgVUJvb2wgZmx1
c2gsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIENvbnZlcnQg
dGhlIFVuaWNvZGUgc3RyaW5nIGludG8gYSBjb2RlcGFnZSBzdHJpbmcgdXNpbmcgYW4gZXhpc3Rp
bmcgVUNvbnZlcnRlci4KKyAqIFRoZSBvdXRwdXQgc3RyaW5nIGlzIE5VTC10ZXJtaW5hdGVkIGlm
IHBvc3NpYmxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBtb3JlIGNvbnZlbmllbnQgYnV0
IGxlc3MgcG93ZXJmdWwgdmVyc2lvbiBvZiB1Y252X2Zyb21Vbmljb2RlKCkuCisgKiBJdCBpcyBv
bmx5IHVzZWZ1bCBmb3Igd2hvbGUgc3RyaW5ncywgbm90IGZvciBzdHJlYW1pbmcgY29udmVyc2lv
bi4KKyAqCisgKiBUaGUgbWF4aW11bSBvdXRwdXQgYnVmZmVyIGNhcGFjaXR5IHJlcXVpcmVkIChi
YXJyaW5nIG91dHB1dCBmcm9tIGNhbGxiYWNrcykgd2lsbCBiZQorICogVUNOVl9HRVRfTUFYX0JZ
VEVTX0ZPUl9TVFJJTkcoc3JjTGVuZ3RoLCB1Y252X2dldE1heENoYXJTaXplKGNudikpLgorICoK
KyAqIEBwYXJhbSBjbnYgdGhlIGNvbnZlcnRlciBvYmplY3QgdG8gYmUgdXNlZCAodWNudl9yZXNl
dEZyb21Vbmljb2RlKCkgd2lsbCBiZSBjYWxsZWQpCisgKiBAcGFyYW0gc3JjIHRoZSBpbnB1dCBV
bmljb2RlIHN0cmluZworICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgaW5wdXQgc3RyaW5nIGxlbmd0
aCwgb3IgLTEgaWYgTlVMLXRlcm1pbmF0ZWQKKyAqIEBwYXJhbSBkZXN0IGRlc3RpbmF0aW9uIHN0
cmluZyBidWZmZXIsIGNhbiBiZSBOVUxMIGlmIGRlc3RDYXBhY2l0eT09MAorICogQHBhcmFtIGRl
c3RDYXBhY2l0eSB0aGUgbnVtYmVyIG9mIGNoYXJzIGF2YWlsYWJsZSBhdCBkZXN0CisgKiBAcGFy
YW0gcEVycm9yQ29kZSBub3JtYWwgSUNVIGVycm9yIGNvZGU7CisgKiAgICAgICAgICAgICAgICAg
IGNvbW1vbiBlcnJvciBjb2RlcyB0aGF0IG1heSBiZSBzZXQgYnkgdGhpcyBmdW5jdGlvbiBpbmNs
dWRlCisgKiAgICAgICAgICAgICAgICAgIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SLCBVX1NUUklO
R19OT1RfVEVSTUlOQVRFRF9XQVJOSU5HLAorICogICAgICAgICAgICAgICAgICBVX0lMTEVHQUxf
QVJHVU1FTlRfRVJST1IsIGFuZCBjb252ZXJzaW9uIGVycm9ycworICogQHJldHVybiB0aGUgbGVu
Z3RoIG9mIHRoZSBvdXRwdXQgc3RyaW5nLCBub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIE5V
TDsKKyAqICAgICAgICAgaWYgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gZGVzdENhcGFjaXR5
LCB0aGVuIHRoZSBzdHJpbmcgd2lsbCBub3QgZml0CisgKiAgICAgICAgIGFuZCBhIGJ1ZmZlciBv
ZiB0aGUgaW5kaWNhdGVkIGxlbmd0aCB3b3VsZCBuZWVkIHRvIGJlIHBhc3NlZCBpbgorICogQHNl
ZSB1Y252X2Zyb21Vbmljb2RlCisgKiBAc2VlIHVjbnZfY29udmVydAorICogQHNlZSBVQ05WX0dF
VF9NQVhfQllURVNfRk9SX1NUUklORworICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IGludDMyX3QgVV9FWFBPUlQyCit1Y252X2Zyb21VQ2hhcnMoVUNvbnZlcnRlciAqY252LAorICAg
ICAgICAgICAgICAgIGNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LAorICAgICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLAorICAgICAgICAgICAg
ICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIENvbnZlcnQgdGhlIGNvZGVw
YWdlIHN0cmluZyBpbnRvIGEgVW5pY29kZSBzdHJpbmcgdXNpbmcgYW4gZXhpc3RpbmcgVUNvbnZl
cnRlci4KKyAqIFRoZSBvdXRwdXQgc3RyaW5nIGlzIE5VTC10ZXJtaW5hdGVkIGlmIHBvc3NpYmxl
LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBtb3JlIGNvbnZlbmllbnQgYnV0IGxlc3MgcG93
ZXJmdWwgdmVyc2lvbiBvZiB1Y252X3RvVW5pY29kZSgpLgorICogSXQgaXMgb25seSB1c2VmdWwg
Zm9yIHdob2xlIHN0cmluZ3MsIG5vdCBmb3Igc3RyZWFtaW5nIGNvbnZlcnNpb24uCisgKgorICog
VGhlIG1heGltdW0gb3V0cHV0IGJ1ZmZlciBjYXBhY2l0eSByZXF1aXJlZCAoYmFycmluZyBvdXRw
dXQgZnJvbSBjYWxsYmFja3MpIHdpbGwgYmUKKyAqIDIqc3JjTGVuZ3RoIChlYWNoIGNoYXIgbWF5
IGJlIGNvbnZlcnRlZCBpbnRvIGEgc3Vycm9nYXRlIHBhaXIpLgorICoKKyAqIEBwYXJhbSBjbnYg
dGhlIGNvbnZlcnRlciBvYmplY3QgdG8gYmUgdXNlZCAodWNudl9yZXNldFRvVW5pY29kZSgpIHdp
bGwgYmUgY2FsbGVkKQorICogQHBhcmFtIHNyYyB0aGUgaW5wdXQgY29kZXBhZ2Ugc3RyaW5nCisg
KiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBpbnB1dCBzdHJpbmcgbGVuZ3RoLCBvciAtMSBpZiBOVUwt
dGVybWluYXRlZAorICogQHBhcmFtIGRlc3QgZGVzdGluYXRpb24gc3RyaW5nIGJ1ZmZlciwgY2Fu
IGJlIE5VTEwgaWYgZGVzdENhcGFjaXR5PT0wCisgKiBAcGFyYW0gZGVzdENhcGFjaXR5IHRoZSBu
dW1iZXIgb2YgVUNoYXJzIGF2YWlsYWJsZSBhdCBkZXN0CisgKiBAcGFyYW0gcEVycm9yQ29kZSBu
b3JtYWwgSUNVIGVycm9yIGNvZGU7CisgKiAgICAgICAgICAgICAgICAgIGNvbW1vbiBlcnJvciBj
b2RlcyB0aGF0IG1heSBiZSBzZXQgYnkgdGhpcyBmdW5jdGlvbiBpbmNsdWRlCisgKiAgICAgICAg
ICAgICAgICAgIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SLCBVX1NUUklOR19OT1RfVEVSTUlOQVRF
RF9XQVJOSU5HLAorICogICAgICAgICAgICAgICAgICBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1Is
IGFuZCBjb252ZXJzaW9uIGVycm9ycworICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRw
dXQgc3RyaW5nLCBub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTDsKKyAqICAgICAgICAg
aWYgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gZGVzdENhcGFjaXR5LCB0aGVuIHRoZSBzdHJp
bmcgd2lsbCBub3QgZml0CisgKiAgICAgICAgIGFuZCBhIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVk
IGxlbmd0aCB3b3VsZCBuZWVkIHRvIGJlIHBhc3NlZCBpbgorICogQHNlZSB1Y252X3RvVW5pY29k
ZQorICogQHNlZSB1Y252X2NvbnZlcnQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMgordWNudl90b1VDaGFycyhVQ29udmVydGVyICpjbnYsCisgICAg
ICAgICAgICAgIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKyAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKKyAgICAgICAgICAgICAgVUVy
cm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogQ29udmVydCBhIGNvZGVwYWdlIGJ1ZmZl
ciBpbnRvIFVuaWNvZGUgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUuCisgKiBUaGUgaW5wdXQgaXMg
Y29tcGxldGVseSBjb25zdW1lZCB3aGVuIHRoZSBVX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SIGlz
IHNldC4KKyAqCisgKiBBZHZhbnRhZ2UgY29tcGFyZWQgdG8gdWNudl90b1VuaWNvZGUoKSBvciB1
Y252X3RvVUNoYXJzKCk6CisgKiAtIEZhc3RlciBmb3Igc21hbGwgYW1vdW50cyBvZiBkYXRhLCBm
b3IgbW9zdCBjb252ZXJ0ZXJzLCBlLmcuLAorICogICBVUy1BU0NJSSwgSVNPLTg4NTktMSwgVVRG
LTgvMTYvMzIsIGFuZCBtb3N0ICJub3JtYWwiIGNoYXJzZXRzLgorICogICAoRm9yIGNvbXBsZXgg
Y29udmVydGVycywgZS5nLiwgU0NTVSwgVVRGLTcgYW5kIElTTyAyMDIyIHZhcmlhbnRzLAorICog
ICAgaXQgdXNlcyB1Y252X3RvVW5pY29kZSgpIGludGVybmFsbHkuKQorICogLSBDb252ZW5pZW50
LgorICoKKyAqIExpbWl0YXRpb25zIGNvbXBhcmVkIHRvIHVjbnZfdG9Vbmljb2RlKCk6CisgKiAt
IEFsd2F5cyBhc3N1bWVzIGZsdXNoPVRSVUUuCisgKiAgIFRoaXMgbWFrZXMgdWNudl9nZXROZXh0
VUNoYXIoKSB1bnN1aXRhYmxlIGZvciAic3RyZWFtaW5nIiBjb252ZXJzaW9uLAorICogICB0aGF0
IGlzLCBmb3Igd2hlcmUgdGhlIGlucHV0IGlzIHN1cHBsaWVkIGluIG11bHRpcGxlIGJ1ZmZlcnMs
CisgKiAgIGJlY2F1c2UgdWNudl9nZXROZXh0VUNoYXIoKSB3aWxsIGFzc3VtZSB0aGUgZW5kIG9m
IHRoZSBpbnB1dCBhdCB0aGUgZW5kCisgKiAgIG9mIHRoZSBmaXJzdCBidWZmZXIuCisgKiAtIERv
ZXMgbm90IHByb3ZpZGUgb2Zmc2V0IG91dHB1dC4KKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0byAi
bWl4IiB1Y252X2dldE5leHRVQ2hhcigpIGFuZCB1Y252X3RvVW5pY29kZSgpIGJlY2F1c2UKKyAq
IHVjbnZfZ2V0TmV4dFVDaGFyKCkgdXNlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgY29udmVy
dGVyCisgKiAodW5saWtlIHVjbnZfdG9VQ2hhcnMoKSB3aGljaCBhbHdheXMgcmVzZXRzIGZpcnN0
KS4KKyAqIEhvd2V2ZXIsIGlmIHVjbnZfZ2V0TmV4dFVDaGFyKCkgaXMgY2FsbGVkIGFmdGVyIHVj
bnZfdG9Vbmljb2RlKCkKKyAqIHN0b3BwZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYXJhY3RlciBz
ZXF1ZW5jZSAod2l0aCBmbHVzaD1GQUxTRSksCisgKiB0aGVuIHVjbnZfZ2V0TmV4dFVDaGFyKCkg
d2lsbCBhbHdheXMgdXNlIHRoZSBzbG93ZXIgdWNudl90b1VuaWNvZGUoKQorICogaW50ZXJuYWxs
eSB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIgYm91bmRhcnkuCisgKiAoVGhpcyBpcyBuZXcgaW4g
SUNVIDIuNi4gSW4gZWFybGllciByZWxlYXNlcywgdWNudl9nZXROZXh0VUNoYXIoKSBoYWQgdG8K
KyAqIHN0YXJ0IGF0IGEgY2hhcmFjdGVyIGJvdW5kYXJ5LikKKyAqCisgKiBJbnN0ZWFkIG9mIHVz
aW5nIHVjbnZfZ2V0TmV4dFVDaGFyKCksIGl0IGlzIHJlY29tbWVuZGVkCisgKiB0byBjb252ZXJ0
IHVzaW5nIHVjbnZfdG9Vbmljb2RlKCkgb3IgdWNudl90b1VDaGFycygpCisgKiBhbmQgdGhlbiBp
dGVyYXRlIG92ZXIgdGhlIHRleHQgdXNpbmcgVTE2X05FWFQoKSBvciBhIFVDaGFySXRlcmF0b3Ig
KHVpdGVyLmgpCisgKiBvciBhIEMrKyBDaGFyYWN0ZXJJdGVyYXRvciBvciBzaW1pbGFyLgorICog
VGhpcyBhbGxvd3Mgc3RyZWFtaW5nIGNvbnZlcnNpb24gYW5kIG9mZnNldCBvdXRwdXQsIGZvciBl
eGFtcGxlLgorICoKKyAqIDxwPkhhbmRsaW5nIG9mIHN1cnJvZ2F0ZSBwYWlycyBhbmQgc3VwcGxl
bWVudGFyeS1wbGFuZSBjb2RlIHBvaW50czo8YnI+CisgKiBUaGVyZSBhcmUgdHdvIGRpZmZlcmVu
dCBraW5kcyBvZiBjb2RlcGFnZXMgdGhhdCBwcm92aWRlIG1hcHBpbmdzIGZvciBzdXJyb2dhdGUg
Y2hhcmFjdGVyczoKKyAqIDx1bD4KKyAqICAgPGxpPkNvZGVwYWdlcyBsaWtlIFVURi04LCBVVEYt
MzIsIGFuZCBHQiAxODAzMCBwcm92aWRlIGRpcmVjdCByZXByZXNlbnRhdGlvbnMgZm9yIFVuaWNv
ZGUKKyAqICAgICAgIGNvZGUgcG9pbnRzIFUrMTAwMDAtVSsxMGZmZmYgYXMgd2VsbCBhcyBmb3Ig
c2luZ2xlIHN1cnJvZ2F0ZXMgVStkODAwLVUrZGZmZi4KKyAqICAgICAgIEVhY2ggdmFsaWQgc2Vx
dWVuY2Ugd2lsbCByZXN1bHQgaW4gZXhhY3RseSBvbmUgcmV0dXJuZWQgY29kZSBwb2ludC4KKyAq
ICAgICAgIElmIGEgc2VxdWVuY2UgcmVzdWx0cyBpbiBhIHNpbmdsZSBzdXJyb2dhdGUsIHRoZW4g
dGhhdCB3aWxsIGJlIHJldHVybmVkCisgKiAgICAgICBieSBpdHNlbGYsIGV2ZW4gaWYgYSBuZWln
aGJvcmluZyBzZXF1ZW5jZSBlbmNvZGVzIHRoZSBtYXRjaGluZyBzdXJyb2dhdGUuPC9saT4KKyAq
ICAgPGxpPkNvZGVwYWdlcyBsaWtlIFNDU1UgYW5kIExNQkNTIChhbmQgVVRGLTE2KSBwcm92aWRl
IGRpcmVjdCByZXByZXNlbnRhdGlvbnMgb25seSBmb3IgQk1QIGNvZGUgcG9pbnRzCisgKiAgICAg
ICBpbmNsdWRpbmcgc3Vycm9nYXRlcy4gQ29kZSBwb2ludHMgaW4gc3VwcGxlbWVudGFyeSBwbGFu
ZXMgYXJlIHJlcHJlc2VudGVkIHdpdGgKKyAqICAgICAgIHR3byBzZXF1ZW5jZXMsIGVhY2ggZW5j
b2RpbmcgYSBzdXJyb2dhdGUuCisgKiAgICAgICBGb3IgdGhlc2UgY29kZXBhZ2VzLCBtYXRjaGlu
ZyBwYWlycyBvZiBzdXJyb2dhdGVzIHdpbGwgYmUgY29tYmluZWQgaW50byBzaW5nbGUKKyAqICAg
ICAgIGNvZGUgcG9pbnRzIGZvciByZXR1cm5pbmcgZnJvbSB0aGlzIGZ1bmN0aW9uLgorICogICAg
ICAgKE5vdGUgdGhhdCBTQ1NVIGlzIGFjdHVhbGx5IGEgbWl4IG9mIHRoZXNlIGNvZGVwYWdlIHR5
cGVzLik8L2xpPgorICogPC91bD48L3A+CisgKgorICogQHBhcmFtIGNvbnZlcnRlciBhbiBvcGVu
IFVDb252ZXJ0ZXIKKyAqIEBwYXJhbSBzb3VyY2UgdGhlIGFkZHJlc3Mgb2YgYSBwb2ludGVyIHRv
IHRoZSBjb2RlcGFnZSBidWZmZXIsIHdpbGwgYmUKKyAqICB1cGRhdGVkIHRvIHBvaW50IGFmdGVy
IHRoZSBieXRlcyBjb25zdW1lZCBpbiB0aGUgY29udmVyc2lvbiBjYWxsLgorICogQHBhcmFtIHNv
dXJjZUxpbWl0IHBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAqIEBwYXJh
bSBlcnIgZmlsbHMgaW4gZXJyb3Igc3RhdHVzIChzZWUgdWNudl90b1VuaWNvZGUpCisgKiA8Y29k
ZT5VX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SPC9jb2RlPiB3aWxsIGJlIHNldCBpZiB0aGUgaW5w
dXQgCisgKiBpcyBlbXB0eSBvciBkb2VzIG5vdCBjb252ZXJ0IHRvIGFueSBvdXRwdXQgKGUuZy46
IHB1cmUgc3RhdGUtY2hhbmdlIAorICogY29kZXMgU0kvU08sIGVzY2FwZSBzZXF1ZW5jZXMgZm9y
IElTTyAyMDIyLAorICogb3IgaWYgdGhlIGNhbGxiYWNrIGRpZCBub3Qgb3V0cHV0IGFueXRoaW5n
LCAuLi4pLgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBzZXQgYSA8Y29kZT5VX0JVRkZFUl9P
VkVSRkxPV19FUlJPUjwvY29kZT4gYmVjYXVzZQorICogIHRoZSAiYnVmZmVyIiBpcyB0aGUgcmV0
dXJuIGNvZGUuIEhvd2V2ZXIsIHRoZXJlIG1pZ2h0IGJlIHN1YnNlcXVlbnQgb3V0cHV0CisgKiAg
c3RvcmVkIGluIHRoZSBjb252ZXJ0ZXIgb2JqZWN0CisgKiB0aGF0IHdpbGwgYmUgcmV0dXJuZWQg
aW4gZm9sbG93aW5nIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uCisgKiBAcmV0dXJuIGEgVUNoYXIz
MiByZXN1bHRpbmcgZnJvbSB0aGUgcGFydGlhbCBjb252ZXJzaW9uIG9mIHNvdXJjZQorICogQHNl
ZSB1Y252X3RvVW5pY29kZQorICogQHNlZSB1Y252X3RvVUNoYXJzCisgKiBAc2VlIHVjbnZfY29u
dmVydAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVDaGFyMzIgVV9FWFBPUlQy
Cit1Y252X2dldE5leHRVQ2hhcihVQ29udmVydGVyICogY29udmVydGVyLAorICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KiBzb3VyY2VMaW1pdCwKKyAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKiBlcnIpOworCisv
KioKKyAqIENvbnZlcnQgZnJvbSBvbmUgZXh0ZXJuYWwgY2hhcnNldCB0byBhbm90aGVyIHVzaW5n
IHR3byBleGlzdGluZyBVQ29udmVydGVycy4KKyAqIEludGVybmFsbHksIHR3byBjb252ZXJzaW9u
cyAtIHVjbnZfdG9Vbmljb2RlKCkgYW5kIHVjbnZfZnJvbVVuaWNvZGUoKSAtCisgKiBhcmUgdXNl
ZCwgInBpdm90aW5nIiB0aHJvdWdoIDE2LWJpdCBVbmljb2RlLgorICoKKyAqIFRoZXJlIGlzIGEg
c2ltaWxhciBmdW5jdGlvbiwgdWNudl9jb252ZXJ0KCksCisgKiB3aGljaCBoYXMgdGhlIGZvbGxv
d2luZyBsaW1pdGF0aW9uczoKKyAqIC0gaXQgdGFrZXMgY2hhcnNldCBuYW1lcywgbm90IGNvbnZl
cnRlciBvYmplY3RzLCBzbyB0aGF0CisgKiAgIC0gdHdvIGNvbnZlcnRlcnMgYXJlIG9wZW5lZCBm
b3IgZWFjaCBjYWxsCisgKiAgIC0gb25seSBzaW5nbGUtc3RyaW5nIGNvbnZlcnNpb24gaXMgcG9z
c2libGUsIG5vdCBzdHJlYW1pbmcgb3BlcmF0aW9uCisgKiAtIGl0IGRvZXMgbm90IHByb3ZpZGUg
ZW5vdWdoIGluZm9ybWF0aW9uIHRvIGZpbmQgb3V0LAorICogICBpbiBjYXNlIG9mIGZhaWx1cmUs
IHdoZXRoZXIgdGhlIHRvVW5pY29kZSBvcgorICogICB0aGUgZnJvbVVuaWNvZGUgY29udmVyc2lv
biBmYWlsZWQKKyAqCisgKiBCeSBjb250cmFzdCwgdWNudl9jb252ZXJ0RXgoKQorICogLSB0YWtl
cyBVQ29udmVydGVyIHBhcmFtZXRlcnMgaW5zdGVhZCBvZiBjaGFyc2V0IG5hbWVzCisgKiAtIGZ1
bGx5IGV4cG9zZXMgdGhlIHBpdm90IGJ1ZmZlciBmb3IgY29tcGxldGUgZXJyb3IgaGFuZGxpbmcK
KyAqCisgKiB1Y252X2NvbnZlcnRFeCgpIGFsc28gcHJvdmlkZXMgZnVydGhlciBjb252ZW5pZW5j
ZToKKyAqIC0gYW4gb3B0aW9uIHRvIHJlc2V0IHRoZSBjb252ZXJ0ZXJzIGF0IHRoZSBiZWdpbm5p
bmcKKyAqICAgKGlmIHJlc2V0PT1UUlVFLCBzZWUgcGFyYW1ldGVyczsKKyAqICAgIGFsc28gc2V0
cyAqcGl2b3RUYXJnZXQ9KnBpdm90U291cmNlPXBpdm90U3RhcnQpCisgKiAtIGFsbG93IE5VTC10
ZXJtaW5hdGVkIGlucHV0CisgKiAgIChvbmx5IGEgc2luZ2xlIE5VTCBieXRlLCB3aWxsIG5vdCB3
b3JrIGZvciBjaGFyc2V0cyB3aXRoIG11bHRpLWJ5dGUgTlVMcykKKyAqICAgKGlmIHNvdXJjZUxp
bWl0PT1OVUxMLCBzZWUgcGFyYW1ldGVycykKKyAqIC0gdGVybWluYXRlIHdpdGggYSBOVUwgb24g
b3V0cHV0CisgKiAgIChvbmx5IGEgc2luZ2xlIE5VTCBieXRlLCBub3QgdXNlZnVsIGZvciBjaGFy
c2V0cyB3aXRoIG11bHRpLWJ5dGUgTlVMcyksCisgKiAgIG9yIHNldCBVX1NUUklOR19OT1RfVEVS
TUlOQVRFRF9XQVJOSU5HIGlmIHRoZSBvdXRwdXQgZXhhY3RseSBmaWxscworICogICB0aGUgdGFy
Z2V0IGJ1ZmZlcgorICogLSB0aGUgcGl2b3QgYnVmZmVyIGNhbiBiZSBwcm92aWRlZCBpbnRlcm5h
bGx5OworICogICBpbiB0aGlzIGNhc2UsIHRoZSBjYWxsZXIgd2lsbCBub3QgYmUgYWJsZSB0byBn
ZXQgZGV0YWlscyBhYm91dCB3aGVyZSBhbgorICogICBlcnJvciBvY2N1cnJlZAorICogICAoaWYg
cGl2b3RTdGFydD09TlVMTCwgc2VlIGJlbG93KQorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5z
IHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAqIC0gdGhlIGVudGlyZSBzb3Vy
Y2UgdGV4dCBoYXMgYmVlbiBjb252ZXJ0ZWQgc3VjY2Vzc2Z1bGx5IHRvIHRoZSB0YXJnZXQgYnVm
ZmVyCisgKiAtIGEgdGFyZ2V0IGJ1ZmZlciBvdmVyZmxvdyBvY2N1cnJlZCAoVV9CVUZGRVJfT1ZF
UkZMT1dfRVJST1IpCisgKiAtIGEgY29udmVyc2lvbiBlcnJvciBvY2N1cnJlZAorICogICAob3Ro
ZXIgVV9GQUlMVVJFKCksIHNlZSBkZXNjcmlwdGlvbiBvZiBwRXJyb3JDb2RlKQorICoKKyAqIExp
bWl0YXRpb24gY29tcGFyZWQgdG8gdGhlIGRpcmVjdCB1c2Ugb2YKKyAqIHVjbnZfZnJvbVVuaWNv
ZGUoKSBhbmQgdWNudl90b1VuaWNvZGUoKToKKyAqIHVjbnZfY29udmVydEV4KCkgZG9lcyBub3Qg
cHJvdmlkZSBvZmZzZXQgaW5mb3JtYXRpb24uCisgKgorICogTGltaXRhdGlvbiBjb21wYXJlZCB0
byB1Y252X2Zyb21VQ2hhcnMoKSBhbmQgdWNudl90b1VDaGFycygpOgorICogdWNudl9jb252ZXJ0
RXgoKSBkb2VzIG5vdCBzdXBwb3J0IHByZWZsaWdodGluZyBkaXJlY3RseS4KKyAqCisgKiBTYW1w
bGUgY29kZSBmb3IgY29udmVydGluZyBhIHNpbmdsZSBzdHJpbmcgZnJvbQorICogb25lIGV4dGVy
bmFsIGNoYXJzZXQgdG8gVVRGLTgsIGlnbm9yaW5nIHRoZSBsb2NhdGlvbiBvZiBlcnJvcnM6Cisg
KgorICogXGNvZGUKKyAqIGludDMyX3QKKyAqIG15VG9VVEY4KFVDb252ZXJ0ZXIgKmNudiwKKyAq
ICAgICAgICAgIGNvbnN0IGNoYXIgKnMsIGludDMyX3QgbGVuZ3RoLAorICogICAgICAgICAgY2hh
ciAqdTgsIGludDMyX3QgY2FwYWNpdHksCisgKiAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JD
b2RlKSB7CisgKiAgICAgVUNvbnZlcnRlciAqdXRmOENudjsKKyAqICAgICBjaGFyICp0YXJnZXQ7
CisgKgorICogICAgIGlmKFVfRkFJTFVSRSgqcEVycm9yQ29kZSkpIHsKKyAqICAgICAgICAgcmV0
dXJuIDA7CisgKiAgICAgfQorICoKKyAqICAgICB1dGY4Q252PW15R2V0Q2FjaGVkVVRGOENvbnZl
cnRlcihwRXJyb3JDb2RlKTsKKyAqICAgICBpZihVX0ZBSUxVUkUoKnBFcnJvckNvZGUpKSB7Cisg
KiAgICAgICAgIHJldHVybiAwOworICogICAgIH0KKyAqCisgKiAgICAgdGFyZ2V0PXU4OworICog
ICAgIHVjbnZfY29udmVydEV4KGNudiwgdXRmOENudiwKKyAqICAgICAgICAgICAgICAgICAgICAm
dGFyZ2V0LCB1OCtjYXBhY2l0eSwKKyAqICAgICAgICAgICAgICAgICAgICAmcywgbGVuZ3RoPj0w
ID8gcytsZW5ndGggOiBOVUxMLAorICogICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5V
TEwsIE5VTEwsCisgKiAgICAgICAgICAgICAgICAgICAgVFJVRSwgVFJVRSwKKyAqICAgICAgICAg
ICAgICAgICAgICBwRXJyb3JDb2RlKTsKKyAqIAorICogICAgIG15UmVsZWFzZUNhY2hlZFVURjhD
b252ZXJ0ZXIodXRmOENudik7CisgKgorICogICAgIC8vIHJldHVybiB0aGUgb3V0cHV0IHN0cmlu
ZyBsZW5ndGgsIGJ1dCB3aXRob3V0IHByZWZsaWdodGluZworICogICAgIHJldHVybiAoaW50MzJf
dCkodGFyZ2V0LXU4KTsKKyAqIH0KKyAqIFxlbmRjb2RlCisgKgorICogQHBhcmFtIHRhcmdldENu
diAgICAgT3V0cHV0IGNvbnZlcnRlciwgdXNlZCB0byBjb252ZXJ0IGZyb20gdGhlIFVURi0xNiBw
aXZvdAorICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHRhcmdldCB1c2luZyB1Y252X2Zy
b21Vbmljb2RlKCkuCisgKiBAcGFyYW0gc291cmNlQ252ICAgICBJbnB1dCBjb252ZXJ0ZXIsIHVz
ZWQgdG8gY29udmVydCBmcm9tIHRoZSBzb3VyY2UgdG8KKyAqICAgICAgICAgICAgICAgICAgICAg
IHRoZSBVVEYtMTYgcGl2b3QgdXNpbmcgdWNudl90b1VuaWNvZGUoKS4KKyAqIEBwYXJhbSB0YXJn
ZXQgICAgICAgIEkvTyBwYXJhbWV0ZXIsIHNhbWUgYXMgZm9yIHVjbnZfZnJvbVVDaGFycygpLgor
ICogICAgICAgICAgICAgICAgICAgICAgSW5wdXQ6ICp0YXJnZXQgcG9pbnRzIHRvIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIHRhcmdldCBidWZmZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBPdXRw
dXQ6ICp0YXJnZXQgcG9pbnRzIHRvIHRoZSBmaXJzdCB1bml0IGFmdGVyIHRoZSBsYXN0IGNoYXIg
d3JpdHRlbi4KKyAqIEBwYXJhbSB0YXJnZXRMaW1pdCAgIFBvaW50ZXIgdG8gdGhlIGZpcnN0IHVu
aXQgYWZ0ZXIgdGhlIHRhcmdldCBidWZmZXIuCisgKiBAcGFyYW0gc291cmNlICAgICAgICBJL08g
cGFyYW1ldGVyLCBzYW1lIGFzIGZvciB1Y252X3RvVUNoYXJzKCkuCisgKiAgICAgICAgICAgICAg
ICAgICAgICBJbnB1dDogKnNvdXJjZSBwb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc291
cmNlIGJ1ZmZlci4KKyAqICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogKnNvdXJjZSBwb2lu
dHMgdG8gdGhlIGZpcnN0IHVuaXQgYWZ0ZXIgdGhlIGxhc3QgY2hhciByZWFkLgorICogQHBhcmFt
IHNvdXJjZUxpbWl0ICAgUG9pbnRlciB0byB0aGUgZmlyc3QgdW5pdCBhZnRlciB0aGUgc291cmNl
IGJ1ZmZlci4KKyAqIEBwYXJhbSBwaXZvdFN0YXJ0ICAgIFBvaW50ZXIgdG8gdGhlIFVURi0xNiBw
aXZvdCBidWZmZXIuIElmIHBpdm90U3RhcnQ9PU5VTEwsCisgKiAgICAgICAgICAgICAgICAgICAg
ICB0aGVuIGFuIGludGVybmFsIGJ1ZmZlciBpcyB1c2VkIGFuZCB0aGUgb3RoZXIgcGl2b3QKKyAq
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBhcmUgaWdub3JlZCBhbmQgY2FuIGJlIE5V
TEwgYXMgd2VsbC4KKyAqIEBwYXJhbSBwaXZvdFNvdXJjZSAgIEkvTyBwYXJhbWV0ZXIsIHNhbWUg
YXMgc291cmNlIGluIHVjbnZfZnJvbVVDaGFycygpIGZvcgorICogICAgICAgICAgICAgICAgICAg
ICAgY29udmVyc2lvbiBmcm9tIHRoZSBwaXZvdCBidWZmZXIgdG8gdGhlIHRhcmdldCBidWZmZXIu
CisgKiBAcGFyYW0gcGl2b3RUYXJnZXQgICBJL08gcGFyYW1ldGVyLCBzYW1lIGFzIHRhcmdldCBp
biB1Y252X3RvVUNoYXJzKCkgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9u
IGZyb20gdGhlIHNvdXJjZSBidWZmZXIgdG8gdGhlIHBpdm90IGJ1ZmZlci4KKyAqICAgICAgICAg
ICAgICAgICAgICAgIEl0IG11c3QgYmUgcGl2b3RTdGFydDw9KnBpdm90U291cmNlPD0qcGl2b3RU
YXJnZXQ8PXBpdm90TGltaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBwaXZvdFN0YXJ0
PHBpdm90TGltaXQgKHVubGVzcyBwaXZvdFN0YXJ0PT1OVUxMKS4KKyAqIEBwYXJhbSBwaXZvdExp
bWl0ICAgIFBvaW50ZXIgdG8gdGhlIGZpcnN0IHVuaXQgYWZ0ZXIgdGhlIHBpdm90IGJ1ZmZlci4K
KyAqIEBwYXJhbSByZXNldCAgICAgICAgIElmIFRSVUUsIHRoZW4gdWNudl9yZXNldFRvVW5pY29k
ZShzb3VyY2VDbnYpIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgdWNudl9yZXNldEZyb21V
bmljb2RlKHRhcmdldENudikgYXJlIGNhbGxlZCwgYW5kIHRoZQorICogICAgICAgICAgICAgICAg
ICAgICAgcGl2b3QgcG9pbnRlcnMgYXJlIHJlc2V0ICgqcGl2b3RUYXJnZXQ9KnBpdm90U291cmNl
PXBpdm90U3RhcnQpLgorICogQHBhcmFtIGZsdXNoICAgICAgICAgSWYgdHJ1ZSwgaW5kaWNhdGVz
IHRoZSBlbmQgb2YgdGhlIGlucHV0LgorICogICAgICAgICAgICAgICAgICAgICAgUGFzc2VkIGRp
cmVjdGx5IHRvIHVjbnZfdG9Vbmljb2RlKCksIGFuZCBjYXJyaWVkIG92ZXIgdG8KKyAqICAgICAg
ICAgICAgICAgICAgICAgIHVjbnZfZnJvbVVuaWNvZGUoKSB3aGVuIHRoZSBzb3VyY2UgaXMgZW1w
dHkgYXMgd2VsbC4KKyAqIEBwYXJhbSBwRXJyb3JDb2RlICAgIElDVSBlcnJvciBjb2RlIGluL291
dCBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBNdXN0IGZ1bGZpbGwgVV9TVUND
RVNTIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFVf
QlVGRkVSX09WRVJGTE9XX0VSUk9SIGFsd2F5cyByZWZlcnMgdG8gdGhlIHRhcmdldCBidWZmZXIK
KyAqICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2Ugb3ZlcmZsb3dzIGludG8gdGhlIHBpdm90
IGJ1ZmZlciBhcmUgaGFuZGxlZCBpbnRlcm5hbGx5LgorICogICAgICAgICAgICAgICAgICAgICAg
T3RoZXIgY29udmVyc2lvbiBlcnJvcnMgYXJlIGZyb20gdGhlIHNvdXJjZS10by1waXZvdAorICog
ICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbiBpZiAqcGl2b3RTb3VyY2U9PXBpdm90U3Rh
cnQsIG90aGVyd2lzZSBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcGl2b3QtdG8t
dGFyZ2V0IGNvbnZlcnNpb24uCisgKgorICogQHNlZSB1Y252X2NvbnZlcnQKKyAqIEBzZWUgdWNu
dl9mcm9tQWxnb3JpdGhtaWMKKyAqIEBzZWUgdWNudl90b0FsZ29yaXRobWljCisgKiBAc2VlIHVj
bnZfZnJvbVVuaWNvZGUKKyAqIEBzZWUgdWNudl90b1VuaWNvZGUKKyAqIEBzZWUgdWNudl9mcm9t
VUNoYXJzCisgKiBAc2VlIHVjbnZfdG9VQ2hhcnMKKyAqIEBzdGFibGUgSUNVIDIuNgorICovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWNudl9jb252ZXJ0RXgoVUNvbnZlcnRlciAqdGFyZ2V0
Q252LCBVQ29udmVydGVyICpzb3VyY2VDbnYsCisgICAgICAgICAgICAgICBjaGFyICoqdGFyZ2V0
LCBjb25zdCBjaGFyICp0YXJnZXRMaW1pdCwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipz
b3VyY2UsIGNvbnN0IGNoYXIgKnNvdXJjZUxpbWl0LAorICAgICAgICAgICAgICAgVUNoYXIgKnBp
dm90U3RhcnQsIFVDaGFyICoqcGl2b3RTb3VyY2UsCisgICAgICAgICAgICAgICBVQ2hhciAqKnBp
dm90VGFyZ2V0LCBjb25zdCBVQ2hhciAqcGl2b3RMaW1pdCwKKyAgICAgICAgICAgICAgIFVCb29s
IHJlc2V0LCBVQm9vbCBmbHVzaCwKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNv
ZGUpOworCisvKioKKyAqIENvbnZlcnQgZnJvbSBvbmUgZXh0ZXJuYWwgY2hhcnNldCB0byBhbm90
aGVyLgorICogSW50ZXJuYWxseSwgdHdvIGNvbnZlcnRlcnMgYXJlIG9wZW5lZCBhY2NvcmRpbmcg
dG8gdGhlIG5hbWUgYXJndW1lbnRzLAorICogdGhlbiB0aGUgdGV4dCBpcyBjb252ZXJ0ZWQgdG8g
YW5kIGZyb20gdGhlIDE2LWJpdCBVbmljb2RlICJwaXZvdCIKKyAqIHVzaW5nIHVjbnZfY29udmVy
dEV4KCksIHRoZW4gdGhlIGNvbnZlcnRlcnMgYXJlIGNsb3NlZCBhZ2Fpbi4KKyAqCisgKiBUaGlz
IGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24sIG5vdCBhbiBlZmZpY2llbnQgd2F5IHRvIGNvbnZl
cnQgYSBsb3Qgb2YgdGV4dDoKKyAqIHVjbnZfY29udmVydCgpCisgKiAtIHRha2VzIGNoYXJzZXQg
bmFtZXMsIG5vdCBjb252ZXJ0ZXIgb2JqZWN0cywgc28gdGhhdAorICogICAtIHR3byBjb252ZXJ0
ZXJzIGFyZSBvcGVuZWQgZm9yIGVhY2ggY2FsbAorICogICAtIG9ubHkgc2luZ2xlLXN0cmluZyBj
b252ZXJzaW9uIGlzIHBvc3NpYmxlLCBub3Qgc3RyZWFtaW5nIG9wZXJhdGlvbgorICogLSBkb2Vz
IG5vdCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBmaW5kIG91dCwKKyAqICAgaW4gY2Fz
ZSBvZiBmYWlsdXJlLCB3aGV0aGVyIHRoZSB0b1VuaWNvZGUgb3IKKyAqICAgdGhlIGZyb21Vbmlj
b2RlIGNvbnZlcnNpb24gZmFpbGVkCisgKiAtIGFsbG93cyBOVUwtdGVybWluYXRlZCBpbnB1dAor
ICogICAob25seSBhIHNpbmdsZSBOVUwgYnl0ZSwgd2lsbCBub3Qgd29yayBmb3IgY2hhcnNldHMg
d2l0aCBtdWx0aS1ieXRlIE5VTHMpCisgKiAgIChpZiBzb3VyY2VMZW5ndGg9PS0xLCBzZWUgcGFy
YW1ldGVycykKKyAqIC0gdGVybWluYXRlIHdpdGggYSBOVUwgb24gb3V0cHV0CisgKiAgIChvbmx5
IGEgc2luZ2xlIE5VTCBieXRlLCBub3QgdXNlZnVsIGZvciBjaGFyc2V0cyB3aXRoIG11bHRpLWJ5
dGUgTlVMcyksCisgKiAgIG9yIHNldCBVX1NUUklOR19OT1RfVEVSTUlOQVRFRF9XQVJOSU5HIGlm
IHRoZSBvdXRwdXQgZXhhY3RseSBmaWxscworICogICB0aGUgdGFyZ2V0IGJ1ZmZlcgorICogLSBh
IHBpdm90IGJ1ZmZlciBpcyBwcm92aWRlZCBpbnRlcm5hbGx5CisgKgorICogVGhlIGZ1bmN0aW9u
IHJldHVybnMgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICogLSB0aGUgZW50
aXJlIHNvdXJjZSB0ZXh0IGhhcyBiZWVuIGNvbnZlcnRlZCBzdWNjZXNzZnVsbHkgdG8gdGhlIHRh
cmdldCBidWZmZXIKKyAqICAgYW5kIGVpdGhlciB0aGUgdGFyZ2V0IGJ1ZmZlciBpcyB0ZXJtaW5h
dGVkIHdpdGggYSBzaW5nbGUgTlVMIGJ5dGUKKyAqICAgb3IgdGhlIGVycm9yIGNvZGUgaXMgc2V0
IHRvIFVfU1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcKKyAqIC0gYSB0YXJnZXQgYnVmZmVy
IG92ZXJmbG93IG9jY3VycmVkIChVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKKyAqICAgYW5kIHRo
ZSBmdWxsIG91dHB1dCBzdHJpbmcgbGVuZ3RoIGlzIHJldHVybmVkICgicHJlZmxpZ2h0aW5nIikK
KyAqIC0gYSBjb252ZXJzaW9uIGVycm9yIG9jY3VycmVkCisgKiAgIChvdGhlciBVX0ZBSUxVUkUo
KSwgc2VlIGRlc2NyaXB0aW9uIG9mIHBFcnJvckNvZGUpCisgKgorICogQHBhcmFtIHRvQ29udmVy
dGVyTmFtZSAgIFRoZSBuYW1lIG9mIHRoZSBjb252ZXJ0ZXIgdGhhdCBpcyB1c2VkIHRvIGNvbnZl
cnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBVVEYtMTYgcGl2b3QgYnVm
ZmVyIHRvIHRoZSB0YXJnZXQuCisgKiBAcGFyYW0gZnJvbUNvbnZlcnRlck5hbWUgVGhlIG5hbWUg
b2YgdGhlIGNvbnZlcnRlciB0aGF0IGlzIHVzZWQgdG8gY29udmVydAorICogICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgVVRGLTE2IHBpdm90IGJ1ZmZlci4K
KyAqIEBwYXJhbSB0YXJnZXQgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVy
LgorICogQHBhcmFtIHRhcmdldENhcGFjaXR5ICAgIENhcGFjaXR5IG9mIHRoZSB0YXJnZXQsIGlu
IGJ5dGVzLgorICogQHBhcmFtIHNvdXJjZSAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0
IGJ1ZmZlci4KKyAqIEBwYXJhbSBzb3VyY2VMZW5ndGggICAgICBMZW5ndGggb2YgdGhlIGlucHV0
IHRleHQsIGluIGJ5dGVzLCBvciAtMSBmb3IgTlVMLXRlcm1pbmF0ZWQgaW5wdXQuCisgKiBAcGFy
YW0gcEVycm9yQ29kZSAgICAgICAgSUNVIGVycm9yIGNvZGUgaW4vb3V0IHBhcmFtZXRlci4KKyAq
ICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGZ1bGZpbGwgVV9TVUNDRVNTIGJlZm9yZSB0
aGUgZnVuY3Rpb24gY2FsbC4KKyAqIEByZXR1cm4gTGVuZ3RoIG9mIHRoZSBjb21wbGV0ZSBvdXRw
dXQgdGV4dCBpbiBieXRlcywgZXZlbiBpZiBpdCBleGNlZWRzIHRoZSB0YXJnZXRDYXBhY2l0eQor
ICogICAgICAgICBhbmQgYSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpcyBzZXQuCisgKgorICog
QHNlZSB1Y252X2NvbnZlcnRFeAorICogQHNlZSB1Y252X2Zyb21BbGdvcml0aG1pYworICogQHNl
ZSB1Y252X3RvQWxnb3JpdGhtaWMKKyAqIEBzZWUgdWNudl9mcm9tVW5pY29kZQorICogQHNlZSB1
Y252X3RvVW5pY29kZQorICogQHNlZSB1Y252X2Zyb21VQ2hhcnMKKyAqIEBzZWUgdWNudl90b1VD
aGFycworICogQHNlZSB1Y252X2dldE5leHRVQ2hhcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8K
K1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1Y252X2NvbnZlcnQoY29uc3QgY2hhciAqdG9D
b252ZXJ0ZXJOYW1lLAorICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZyb21Db252ZXJ0ZXJOYW1l
LAorICAgICAgICAgICAgIGNoYXIgKnRhcmdldCwKKyAgICAgICAgICAgICBpbnQzMl90IHRhcmdl
dENhcGFjaXR5LAorICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSwKKyAgICAgICAgICAg
ICBpbnQzMl90IHNvdXJjZUxlbmd0aCwKKyAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JD
b2RlKTsKKworLyoqCisgKiBDb252ZXJ0IGZyb20gb25lIGV4dGVybmFsIGNoYXJzZXQgdG8gYW5v
dGhlci4KKyAqIEludGVybmFsbHksIHRoZSB0ZXh0IGlzIGNvbnZlcnRlZCB0byBhbmQgZnJvbSB0
aGUgMTYtYml0IFVuaWNvZGUgInBpdm90IgorICogdXNpbmcgdWNudl9jb252ZXJ0RXgoKS4gdWNu
dl90b0FsZ29yaXRobWljKCkgd29ya3MgZXhhY3RseSBsaWtlIHVjbnZfY29udmVydCgpCisgKiBl
eGNlcHQgdGhhdCB0aGUgdHdvIGNvbnZlcnRlcnMgbmVlZCBub3QgYmUgbG9va2VkIHVwIGFuZCBv
cGVuZWQgY29tcGxldGVseS4KKyAqCisgKiBUaGUgc291cmNlLXRvLXBpdm90IGNvbnZlcnNpb24g
dXNlcyB0aGUgY252IGNvbnZlcnRlciBwYXJhbWV0ZXIuCisgKiBUaGUgcGl2b3QtdG8tdGFyZ2V0
IGNvbnZlcnNpb24gdXNlcyBhIHB1cmVseSBhbGdvcml0aG1pYyBjb252ZXJ0ZXIKKyAqIGFjY29y
ZGluZyB0byB0aGUgc3BlY2lmaWVkIHR5cGUsIGUuZy4sIFVDTlZfVVRGOCBmb3IgYSBVVEYtOCBj
b252ZXJ0ZXIuCisgKgorICogSW50ZXJuYWxseSwgdGhlIGFsZ29yaXRobWljIGNvbnZlcnRlciBp
cyBvcGVuZWQgYW5kIGNsb3NlZCBmb3IgZWFjaAorICogZnVuY3Rpb24gY2FsbCwgd2hpY2ggaXMg
bW9yZSBlZmZpY2llbnQgdGhhbiB1c2luZyB0aGUgcHVibGljIHVjbnZfb3BlbigpCisgKiBidXQg
c29tZXdoYXQgbGVzcyBlZmZpY2llbnQgdGhhbiBvbmx5IHJlc2V0dGluZyBhbiBleGlzdGluZyBj
b252ZXJ0ZXIKKyAqIGFuZCB1c2luZyB1Y252X2NvbnZlcnRFeCgpLgorICoKKyAqIFRoaXMgZnVu
Y3Rpb24gaXMgbW9yZSBjb252ZW5pZW50IHRoYW4gdWNudl9jb252ZXJ0RXgoKSBmb3Igc2luZ2xl
LXN0cmluZworICogY29udmVyc2lvbnMsIGVzcGVjaWFsbHkgd2hlbiAicHJlZmxpZ2h0aW5nIiBp
cyBkZXNpcmVkIChyZXR1cm5pbmcgdGhlIGxlbmd0aAorICogb2YgdGhlIGNvbXBsZXRlIG91dHB1
dCBldmVuIGlmIGl0IGRvZXMgbm90IGZpdCBpbnRvIHRoZSB0YXJnZXQgYnVmZmVyOworICogc2Vl
IHRoZSBVc2VyIEd1aWRlIFN0cmluZ3MgY2hhcHRlcikuIFNlZSB1Y252X2NvbnZlcnQoKSBmb3Ig
ZGV0YWlscy4KKyAqCisgKiBAcGFyYW0gYWxnb3JpdGhtaWNUeXBlICAgVUNvbnZlcnRlclR5cGUg
Y29uc3RhbnQgaWRlbnRpZnlpbmcgdGhlIGRlc2lyZWQgdGFyZ2V0CisgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhcnNldCBhcyBhIHB1cmVseSBhbGdvcml0aG1pYyBjb252ZXJ0ZXIuCisg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhvc2UgYXJlIGNvbnZlcnRlcnMgZm9yIFVuaWNv
ZGUgY2hhcnNldHMgbGlrZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIFVURi04LCBCT0NV
LTEsIFNDU1UsIFVURi03LCBJTUFQLW1haWxib3gtbmFtZSwgZXRjLiwKKyAqICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcyB3ZWxsIGFzIFVTLUFTQ0lJIGFuZCBJU08tODg1OS0xLgorICogQHBh
cmFtIGNudiAgICAgICAgICAgICAgIFRoZSBjb252ZXJ0ZXIgdGhhdCBpcyB1c2VkIHRvIGNvbnZl
cnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIFVU
Ri0xNiBwaXZvdCBidWZmZXIuCisgKiBAcGFyYW0gdGFyZ2V0ICAgICAgICAgICAgUG9pbnRlciB0
byB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSB0YXJnZXRDYXBhY2l0eSAgICBDYXBhY2l0
eSBvZiB0aGUgdGFyZ2V0LCBpbiBieXRlcy4KKyAqIEBwYXJhbSBzb3VyY2UgICAgICAgICAgICBQ
b2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gc291cmNlTGVuZ3RoICAgICAg
TGVuZ3RoIG9mIHRoZSBpbnB1dCB0ZXh0LCBpbiBieXRlcworICogQHBhcmFtIHBFcnJvckNvZGUg
ICAgICAgIElDVSBlcnJvciBjb2RlIGluL291dCBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgTXVzdCBmdWxmaWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNh
bGwuCisgKiBAcmV0dXJuIExlbmd0aCBvZiB0aGUgY29tcGxldGUgb3V0cHV0IHRleHQgaW4gYnl0
ZXMsIGV2ZW4gaWYgaXQgZXhjZWVkcyB0aGUgdGFyZ2V0Q2FwYWNpdHkKKyAqICAgICAgICAgYW5k
IGEgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMgc2V0LgorICoKKyAqIEBzZWUgdWNudl9mcm9t
QWxnb3JpdGhtaWMKKyAqIEBzZWUgdWNudl9jb252ZXJ0CisgKiBAc2VlIHVjbnZfY29udmVydEV4
CisgKiBAc2VlIHVjbnZfZnJvbVVuaWNvZGUKKyAqIEBzZWUgdWNudl90b1VuaWNvZGUKKyAqIEBz
ZWUgdWNudl9mcm9tVUNoYXJzCisgKiBAc2VlIHVjbnZfdG9VQ2hhcnMKKyAqIEBzdGFibGUgSUNV
IDIuNgorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNudl90b0FsZ29yaXRobWlj
KFVDb252ZXJ0ZXJUeXBlIGFsZ29yaXRobWljVHlwZSwKKyAgICAgICAgICAgICAgICAgICBVQ29u
dmVydGVyICpjbnYsCisgICAgICAgICAgICAgICAgICAgY2hhciAqdGFyZ2V0LCBpbnQzMl90IHRh
cmdldENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50
MzJfdCBzb3VyY2VMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9y
Q29kZSk7CisKKy8qKgorICogQ29udmVydCBmcm9tIG9uZSBleHRlcm5hbCBjaGFyc2V0IHRvIGFu
b3RoZXIuCisgKiBJbnRlcm5hbGx5LCB0aGUgdGV4dCBpcyBjb252ZXJ0ZWQgdG8gYW5kIGZyb20g
dGhlIDE2LWJpdCBVbmljb2RlICJwaXZvdCIKKyAqIHVzaW5nIHVjbnZfY29udmVydEV4KCkuIHVj
bnZfZnJvbUFsZ29yaXRobWljKCkgd29ya3MgZXhhY3RseSBsaWtlIHVjbnZfY29udmVydCgpCisg
KiBleGNlcHQgdGhhdCB0aGUgdHdvIGNvbnZlcnRlcnMgbmVlZCBub3QgYmUgbG9va2VkIHVwIGFu
ZCBvcGVuZWQgY29tcGxldGVseS4KKyAqCisgKiBUaGUgc291cmNlLXRvLXBpdm90IGNvbnZlcnNp
b24gdXNlcyBhIHB1cmVseSBhbGdvcml0aG1pYyBjb252ZXJ0ZXIKKyAqIGFjY29yZGluZyB0byB0
aGUgc3BlY2lmaWVkIHR5cGUsIGUuZy4sIFVDTlZfVVRGOCBmb3IgYSBVVEYtOCBjb252ZXJ0ZXIu
CisgKiBUaGUgcGl2b3QtdG8tdGFyZ2V0IGNvbnZlcnNpb24gdXNlcyB0aGUgY252IGNvbnZlcnRl
ciBwYXJhbWV0ZXIuCisgKgorICogSW50ZXJuYWxseSwgdGhlIGFsZ29yaXRobWljIGNvbnZlcnRl
ciBpcyBvcGVuZWQgYW5kIGNsb3NlZCBmb3IgZWFjaAorICogZnVuY3Rpb24gY2FsbCwgd2hpY2gg
aXMgbW9yZSBlZmZpY2llbnQgdGhhbiB1c2luZyB0aGUgcHVibGljIHVjbnZfb3BlbigpCisgKiBi
dXQgc29tZXdoYXQgbGVzcyBlZmZpY2llbnQgdGhhbiBvbmx5IHJlc2V0dGluZyBhbiBleGlzdGlu
ZyBjb252ZXJ0ZXIKKyAqIGFuZCB1c2luZyB1Y252X2NvbnZlcnRFeCgpLgorICoKKyAqIFRoaXMg
ZnVuY3Rpb24gaXMgbW9yZSBjb252ZW5pZW50IHRoYW4gdWNudl9jb252ZXJ0RXgoKSBmb3Igc2lu
Z2xlLXN0cmluZworICogY29udmVyc2lvbnMsIGVzcGVjaWFsbHkgd2hlbiAicHJlZmxpZ2h0aW5n
IiBpcyBkZXNpcmVkIChyZXR1cm5pbmcgdGhlIGxlbmd0aAorICogb2YgdGhlIGNvbXBsZXRlIG91
dHB1dCBldmVuIGlmIGl0IGRvZXMgbm90IGZpdCBpbnRvIHRoZSB0YXJnZXQgYnVmZmVyOworICog
c2VlIHRoZSBVc2VyIEd1aWRlIFN0cmluZ3MgY2hhcHRlcikuIFNlZSB1Y252X2NvbnZlcnQoKSBm
b3IgZGV0YWlscy4KKyAqCisgKiBAcGFyYW0gY252ICAgICAgICAgICAgICAgVGhlIGNvbnZlcnRl
ciB0aGF0IGlzIHVzZWQgdG8gY29udmVydAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGZy
b20gdGhlIFVURi0xNiBwaXZvdCBidWZmZXIgdG8gdGhlIHRhcmdldC4KKyAqIEBwYXJhbSBhbGdv
cml0aG1pY1R5cGUgICBVQ29udmVydGVyVHlwZSBjb25zdGFudCBpZGVudGlmeWluZyB0aGUgZGVz
aXJlZCBzb3VyY2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0IGFzIGEgcHVy
ZWx5IGFsZ29yaXRobWljIGNvbnZlcnRlci4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBU
aG9zZSBhcmUgY29udmVydGVycyBmb3IgVW5pY29kZSBjaGFyc2V0cyBsaWtlCisgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVRGLTgsIEJPQ1UtMSwgU0NTVSwgVVRGLTcsIElNQVAtbWFpbGJv
eC1uYW1lLCBldGMuLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgVVMt
QVNDSUkgYW5kIElTTy04ODU5LTEuCisgKiBAcGFyYW0gdGFyZ2V0ICAgICAgICAgICAgUG9pbnRl
ciB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSB0YXJnZXRDYXBhY2l0eSAgICBDYXBh
Y2l0eSBvZiB0aGUgdGFyZ2V0LCBpbiBieXRlcy4KKyAqIEBwYXJhbSBzb3VyY2UgICAgICAgICAg
ICBQb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gc291cmNlTGVuZ3RoICAg
ICAgTGVuZ3RoIG9mIHRoZSBpbnB1dCB0ZXh0LCBpbiBieXRlcworICogQHBhcmFtIHBFcnJvckNv
ZGUgICAgICAgIElDVSBlcnJvciBjb2RlIGluL291dCBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgTXVzdCBmdWxmaWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9u
IGNhbGwuCisgKiBAcmV0dXJuIExlbmd0aCBvZiB0aGUgY29tcGxldGUgb3V0cHV0IHRleHQgaW4g
Ynl0ZXMsIGV2ZW4gaWYgaXQgZXhjZWVkcyB0aGUgdGFyZ2V0Q2FwYWNpdHkKKyAqICAgICAgICAg
YW5kIGEgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMgc2V0LgorICoKKyAqIEBzZWUgdWNudl9m
cm9tQWxnb3JpdGhtaWMKKyAqIEBzZWUgdWNudl9jb252ZXJ0CisgKiBAc2VlIHVjbnZfY29udmVy
dEV4CisgKiBAc2VlIHVjbnZfZnJvbVVuaWNvZGUKKyAqIEBzZWUgdWNudl90b1VuaWNvZGUKKyAq
IEBzZWUgdWNudl9mcm9tVUNoYXJzCisgKiBAc2VlIHVjbnZfdG9VQ2hhcnMKKyAqIEBzdGFibGUg
SUNVIDIuNgorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNudl9mcm9tQWxnb3Jp
dGhtaWMoVUNvbnZlcnRlciAqY252LAorICAgICAgICAgICAgICAgICAgICAgVUNvbnZlcnRlclR5
cGUgYWxnb3JpdGhtaWNUeXBlLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGFyZ2V0LCBp
bnQzMl90IHRhcmdldENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
c291cmNlLCBpbnQzMl90IHNvdXJjZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIEZyZWVzIHVwIG1lbW9yeSBvY2N1cGllZCBi
eSB1bnVzZWQsIGNhY2hlZCBjb252ZXJ0ZXIgc2hhcmVkIGRhdGEuCisgKgorICogQHJldHVybiB0
aGUgbnVtYmVyIG9mIGNhY2hlZCBjb252ZXJ0ZXJzIHN1Y2Nlc3NmdWxseSBkZWxldGVkCisgKiBA
c2VlIHVjbnZfY2xvc2UKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQzMl90
IFVfRVhQT1JUMgordWNudl9mbHVzaENhY2hlKHZvaWQpOworCisvKioKKyAqIFJldHVybnMgdGhl
IG51bWJlciBvZiBhdmFpbGFibGUgY29udmVydGVycywgYXMgcGVyIHRoZSBhbGlhcyBmaWxlLgor
ICoKKyAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgY29udmVydGVycworICogQHNl
ZSB1Y252X2dldEF2YWlsYWJsZU5hbWUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMgordWNudl9jb3VudEF2YWlsYWJsZSh2b2lkKTsKKworLyoqCisg
KiBHZXRzIHRoZSBjYW5vbmljYWwgY29udmVydGVyIG5hbWUgb2YgdGhlIHNwZWNpZmllZCBjb252
ZXJ0ZXIgZnJvbSBhIGxpc3Qgb2YKKyAqIGFsbCBhdmFpbGFibGUgY29udmVydGVycyBjb250YWll
ZCBpbiB0aGUgYWxpYXMgZmlsZS4gQWxsIGNvbnZlcnRlcnMKKyAqIGluIHRoaXMgbGlzdCBjYW4g
YmUgb3BlbmVkLgorICoKKyAqIEBwYXJhbSBuIHRoZSBpbmRleCB0byBhIGNvbnZlcnRlciBhdmFp
bGFibGUgb24gdGhlIHN5c3RlbSAoaW4gdGhlIHJhbmdlIDxUVD5bMC4udWNudl9jb3VudEF2YWlh
YmxlKCldPC9UVD4pCisgKiBAcmV0dXJuIGEgcG9pbnRlciBhIHN0cmluZyAobGlicmFyeSBvd25l
ZCksIG9yIDxUVD5OVUxMPC9UVD4gaWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCisgKiBA
c2VlIHVjbnZfY291bnRBdmFpbGFibGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBjb25zdCBjaGFyKiBVX0VYUE9SVDIKK3VjbnZfZ2V0QXZhaWxhYmxlTmFtZShpbnQzMl90IG4p
OworCisvKioKKyAqIFJldHVybnMgYSBVRW51bWVyYXRpb24gdG8gZW51bWVyYXRlIGFsbCBvZiB0
aGUgY2Fub25pY2FsIGNvbnZlcnRlcgorICogbmFtZXMsIGFzIHBlciB0aGUgYWxpYXMgZmlsZSwg
cmVnYXJkbGVzcyBvZiB0aGUgYWJpbGl0eSB0byBvcGVuIGVhY2gKKyAqIGNvbnZlcnRlci4KKyAq
CisgKiBAcmV0dXJuIEEgVUVudW1lcmF0aW9uIG9iamVjdCBmb3IgZ2V0dGluZyBhbGwgdGhlIHJl
Y29nbml6ZWQgY2Fub25pY2FsCisgKiAgIGNvbnZlcnRlciBuYW1lcy4KKyAqIEBzZWUgdWNudl9n
ZXRBdmFpbGFibGVOYW1lCisgKiBAc2VlIHVlbnVtX2Nsb3NlCisgKiBAc2VlIHVlbnVtX25leHQK
KyAqIEBzdGFibGUgSUNVIDIuNAorICovCitVX1NUQUJMRSBVRW51bWVyYXRpb24gKiBVX0VYUE9S
VDIKK3VjbnZfb3BlbkFsbE5hbWVzKFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAq
IEdpdmVzIHRoZSBudW1iZXIgb2YgYWxpYXNlcyBmb3IgYSBnaXZlbiBjb252ZXJ0ZXIgb3IgYWxp
YXMgbmFtZS4KKyAqIElmIHRoZSBhbGlhcyBpcyBhbWJpZ3VvdXMsIHRoZW4gdGhlIHByZWZlcnJl
ZCBjb252ZXJ0ZXIgaXMgdXNlZAorICogYW5kIHRoZSBzdGF0dXMgaXMgc2V0IHRvIFVfQU1CSUdV
T1VTX0FMSUFTX1dBUk5JTkcuCisgKiBUaGlzIG1ldGhvZCBvbmx5IGVudW1lcmF0ZXMgdGhlIGxp
c3RlZCBlbnRyaWVzIGluIHRoZSBhbGlhcyBmaWxlLgorICogQHBhcmFtIGFsaWFzIGFsaWFzIG5h
bWUKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIGVycm9yIHN0YXR1cworICogQHJldHVybiBudW1iZXIg
b2YgbmFtZXMgb24gYWxpYXMgbGlzdCBmb3IgZ2l2ZW4gYWxpYXMKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitVX1NUQUJMRSB1aW50MTZfdCBVX0VYUE9SVDIgCit1Y252X2NvdW50QWxpYXNlcyhj
b25zdCBjaGFyICphbGlhcywgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogR2l2
ZXMgdGhlIG5hbWUgb2YgdGhlIGFsaWFzIGF0IGdpdmVuIGluZGV4IG9mIGFsaWFzIGxpc3QuCisg
KiBUaGlzIG1ldGhvZCBvbmx5IGVudW1lcmF0ZXMgdGhlIGxpc3RlZCBlbnRyaWVzIGluIHRoZSBh
bGlhcyBmaWxlLgorICogSWYgdGhlIGFsaWFzIGlzIGFtYmlndW91cywgdGhlbiB0aGUgcHJlZmVy
cmVkIGNvbnZlcnRlciBpcyB1c2VkCisgKiBhbmQgdGhlIHN0YXR1cyBpcyBzZXQgdG8gVV9BTUJJ
R1VPVVNfQUxJQVNfV0FSTklORy4KKyAqIEBwYXJhbSBhbGlhcyBhbGlhcyBuYW1lCisgKiBAcGFy
YW0gbiBpbmRleCBpbiBhbGlhcyBsaXN0CisgKiBAcGFyYW0gcEVycm9yQ29kZSByZXN1bHQgb2Yg
b3BlcmF0aW9uCisgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGFsaWFzIGF0IGdp
dmVuIGluZGV4CisgKiBAc2VlIHVjbnZfY291bnRBbGlhc2VzCisgKiBAc3RhYmxlIElDVSAyLjAK
KyAqLworVV9TVEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JUMiAKK3VjbnZfZ2V0QWxpYXMoY29u
c3QgY2hhciAqYWxpYXMsIHVpbnQxNl90IG4sIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisv
KioKKyAqIEZpbGwtdXAgdGhlIGxpc3Qgb2YgYWxpYXMgbmFtZXMgZm9yIHRoZSBnaXZlbiBhbGlh
cy4KKyAqIFRoaXMgbWV0aG9kIG9ubHkgZW51bWVyYXRlcyB0aGUgbGlzdGVkIGVudHJpZXMgaW4g
dGhlIGFsaWFzIGZpbGUuCisgKiBJZiB0aGUgYWxpYXMgaXMgYW1iaWd1b3VzLCB0aGVuIHRoZSBw
cmVmZXJyZWQgY29udmVydGVyIGlzIHVzZWQKKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHNldCB0byBV
X0FNQklHVU9VU19BTElBU19XQVJOSU5HLgorICogQHBhcmFtIGFsaWFzIGFsaWFzIG5hbWUKKyAq
IEBwYXJhbSBhbGlhc2VzIGZpbGwtaW4gbGlzdCwgYWxpYXNlcyBpcyBhIHBvaW50ZXIgdG8gYW4g
YXJyYXkgb2YKKyAqICAgICAgICA8Y29kZT51Y252X2NvdW50QWxpYXNlcygpPC9jb2RlPiBzdHJp
bmctcG9pbnRlcnMKKyAqICAgICAgICAoPGNvZGU+Y29uc3QgY2hhciAqPC9jb2RlPikgdGhhdCB3
aWxsIGJlIGZpbGxlZCBpbi4KKyAqICAgICAgICBUaGUgc3RyaW5ncyB0aGVtc2VsdmVzIGFyZSBv
d25lZCBieSB0aGUgbGlicmFyeS4KKyAqIEBwYXJhbSBwRXJyb3JDb2RlIHJlc3VsdCBvZiBvcGVy
YXRpb24KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAK
K3VjbnZfZ2V0QWxpYXNlcyhjb25zdCBjaGFyICphbGlhcywgY29uc3QgY2hhciAqKmFsaWFzZXMs
IFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIFJldHVybiBhIG5ldyBVRW51bWVy
YXRpb24gb2JqZWN0IGZvciBlbnVtZXJhdGluZyBhbGwgdGhlCisgKiBhbGlhcyBuYW1lcyBmb3Ig
YSBnaXZlbiBjb252ZXJ0ZXIgdGhhdCBhcmUgcmVjb2duaXplZCBieSBhIHN0YW5kYXJkLgorICog
VGhpcyBtZXRob2Qgb25seSBlbnVtZXJhdGVzIHRoZSBsaXN0ZWQgZW50cmllcyBpbiB0aGUgYWxp
YXMgZmlsZS4KKyAqIFRoZSBjb252cnRycy50eHQgZmlsZSBjYW4gYmUgbW9kaWZpZWQgdG8gY2hh
bmdlIHRoZSByZXN1bHRzIG9mCisgKiB0aGlzIGZ1bmN0aW9uLgorICogVGhlIGZpcnN0IHJlc3Vs
dCBpbiB0aGlzIGxpc3QgaXMgdGhlIHNhbWUgcmVzdWx0IGdpdmVuIGJ5CisgKiA8Y29kZT51Y252
X2dldFN0YW5kYXJkTmFtZTwvY29kZT4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGFsaWFzIGZvcgor
ICogdGhlIHNwZWNpZmllZCBzdGFuZGFyZCBuYW1lLiBUaGUgcmV0dXJuZWQgb2JqZWN0IG11c3Qg
YmUgY2xvc2VkIHdpdGgKKyAqIDxjb2RlPnVlbnVtX2Nsb3NlPC9jb2RlPiB3aGVuIHlvdSBhcmUg
ZG9uZSB3aXRoIHRoZSBvYmplY3QuCisgKgorICogQHBhcmFtIGNvbnZOYW1lIG9yaWdpbmFsIGNv
bnZlcnRlciBuYW1lCisgKiBAcGFyYW0gc3RhbmRhcmQgbmFtZSBvZiB0aGUgc3RhbmRhcmQgZ292
ZXJuaW5nIHRoZSBuYW1lczsgTUlNRSBhbmQgSUFOQQorICogICAgICBhcmUgc3VjaCBzdGFuZGFy
ZHMKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIFRoZSBlcnJvciBjb2RlCisgKiBAcmV0dXJuIEEgVUVu
dW1lcmF0aW9uIG9iamVjdCBmb3IgZ2V0dGluZyBhbGwgYWxpYXNlcyB0aGF0IGFyZSByZWNvZ25p
emVkCisgKiAgICAgIGJ5IGEgc3RhbmRhcmQuIElmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBhcmUg
aW52YWxpZCwgTlVMTAorICogICAgICBpcyByZXR1cm5lZC4KKyAqIEBzZWUgdWNudl9nZXRTdGFu
ZGFyZE5hbWUKKyAqIEBzZWUgdWVudW1fY2xvc2UKKyAqIEBzZWUgdWVudW1fbmV4dAorICogQHN0
YWJsZSBJQ1UgMi4yCisgKi8KK1VfU1RBQkxFIFVFbnVtZXJhdGlvbiAqIFVfRVhQT1JUMgordWNu
dl9vcGVuU3RhbmRhcmROYW1lcyhjb25zdCBjaGFyICpjb252TmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqc3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgIFVF
cnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIEdpdmVzIHRoZSBudW1iZXIgb2Ygc3Rh
bmRhcmRzIGFzc29jaWF0ZWQgdG8gY29udmVydGVyIG5hbWVzLgorICogQHJldHVybiBudW1iZXIg
b2Ygc3RhbmRhcmRzCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdWludDE2X3Qg
VV9FWFBPUlQyCit1Y252X2NvdW50U3RhbmRhcmRzKHZvaWQpOworCisvKioKKyAqIEdpdmVzIHRo
ZSBuYW1lIG9mIHRoZSBzdGFuZGFyZCBhdCBnaXZlbiBpbmRleCBvZiBzdGFuZGFyZCBsaXN0Lgor
ICogQHBhcmFtIG4gaW5kZXggaW4gc3RhbmRhcmQgbGlzdAorICogQHBhcmFtIHBFcnJvckNvZGUg
cmVzdWx0IG9mIG9wZXJhdGlvbgorICogQHJldHVybiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBz
dGFuZGFyZCBhdCBnaXZlbiBpbmRleC4gT3duZWQgYnkgdGhlIGxpYnJhcnkuCisgKiBAc3RhYmxl
IElDVSAyLjAKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNudl9nZXRT
dGFuZGFyZCh1aW50MTZfdCBuLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKworLyoqCisgKiBS
ZXR1cm5zIGEgc3RhbmRhcmQgbmFtZSBmb3IgYSBnaXZlbiBjb252ZXJ0ZXIgbmFtZS4KKyAqIDxw
PgorICogRXhhbXBsZSBhbGlhcyB0YWJsZTo8YnI+CisgKiBjb252IGFsaWFzMSB7IFNUQU5EQVJE
MSB9IGFsaWFzMiB7IFNUQU5EQVJEMSogfQorICogPHA+CisgKiBSZXN1bHQgb2YgdWNudl9nZXRT
dGFuZGFyZE5hbWUoImNvbnYiLCAiU1RBTkRBUkQxIikgZnJvbSBleGFtcGxlCisgKiBhbGlhcyB0
YWJsZTo8YnI+CisgKiA8Yj4iYWxpYXMyIjwvYj4KKyAqCisgKiBAcGFyYW0gbmFtZSBvcmlnaW5h
bCBjb252ZXJ0ZXIgbmFtZQorICogQHBhcmFtIHN0YW5kYXJkIG5hbWUgb2YgdGhlIHN0YW5kYXJk
IGdvdmVybmluZyB0aGUgbmFtZXM7IE1JTUUgYW5kIElBTkEKKyAqICAgICAgICBhcmUgc3VjaCBz
dGFuZGFyZHMKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIHJlc3VsdCBvZiBvcGVyYXRpb24KKyAqIEBy
ZXR1cm4gcmV0dXJucyB0aGUgc3RhbmRhcmQgY29udmVydGVyIG5hbWU7CisgKiAgICAgICAgIGlm
IGEgc3RhbmRhcmQgY29udmVydGVyIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsCisgKiAgICAg
ICAgIHRoZW4gPGNvZGU+TlVMTDwvY29kZT4gaXMgcmV0dXJuZWQuIE93bmVkIGJ5IHRoZSBsaWJy
YXJ5LgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VY
UE9SVDIKK3VjbnZfZ2V0U3RhbmRhcmROYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIg
KnN0YW5kYXJkLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0
aW9uIHdpbGwgcmV0dXJuIHRoZSBpbnRlcm5hbCBjYW5vbmljYWwgY29udmVydGVyIG5hbWUgb2Yg
dGhlCisgKiB0YWdnZWQgYWxpYXMuIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIHVjbnZfb3BlblN0
YW5kYXJkTmFtZXMsIHdoaWNoCisgKiByZXR1cm5zIHRoZSB0YWdnZWQgYWxpYXMgZ2l2ZW4gdGhl
IGNhbm9uaWNhbCBuYW1lLgorICogPHA+CisgKiBFeGFtcGxlIGFsaWFzIHRhYmxlOjxicj4KKyAq
IGNvbnYgYWxpYXMxIHsgU1RBTkRBUkQxIH0gYWxpYXMyIHsgU1RBTkRBUkQxKiB9CisgKiA8cD4K
KyAqIFJlc3VsdCBvZiB1Y252X2dldFN0YW5kYXJkTmFtZSgiYWxpYXMxIiwgIlNUQU5EQVJEMSIp
IGZyb20gZXhhbXBsZQorICogYWxpYXMgdGFibGU6PGJyPgorICogPGI+ImNvbnYiPC9iPgorICoK
KyAqIEByZXR1cm4gcmV0dXJucyB0aGUgY2Fub25pY2FsIGNvbnZlcnRlciBuYW1lOworICogICAg
ICAgICBpZiBhIHN0YW5kYXJkIG9yIGFsaWFzIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsCisg
KiAgICAgICAgIHRoZW4gPGNvZGU+TlVMTDwvY29kZT4gaXMgcmV0dXJuZWQuIFRoZSByZXR1cm5l
ZCBzdHJpbmcgaXMKKyAqICAgICAgICAgb3duZWQgYnkgdGhlIGxpYnJhcnkuCisgKiBAc2VlIHVj
bnZfZ2V0U3RhbmRhcmROYW1lCisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9TVEFCTEUgY29u
c3QgY2hhciAqIFVfRVhQT1JUMgordWNudl9nZXRDYW5vbmljYWxOYW1lKGNvbnN0IGNoYXIgKmFs
aWFzLCBjb25zdCBjaGFyICpzdGFuZGFyZCwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8q
KgorICogcmV0dXJucyB0aGUgY3VycmVudCBkZWZhdWx0IGNvbnZlcnRlciBuYW1lLgorICoKKyAq
IEByZXR1cm4gcmV0dXJucyB0aGUgY3VycmVudCBkZWZhdWx0IGNvbnZlcnRlciBuYW1lOworICog
ICAgICAgICBpZiBhIGRlZmF1bHQgY29udmVydGVyIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQs
CisgKiAgICAgICAgIHRoZW4gPGNvZGU+TlVMTDwvY29kZT4gaXMgcmV0dXJuZWQuCisgKiAgICAg
ICAgIFN0b3JhZ2Ugb3duZWQgYnkgdGhlIGxpYnJhcnkKKyAqIEBzZWUgdWNudl9zZXREZWZhdWx0
TmFtZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VY
UE9SVDIKK3VjbnZfZ2V0RGVmYXVsdE5hbWUodm9pZCk7CisKKy8qKgorICogc2V0cyB0aGUgY3Vy
cmVudCBkZWZhdWx0IGNvbnZlcnRlciBuYW1lLiBDYWxsZXIgbXVzdCBvd24gdGhlIHN0b3JhZ2Ug
Zm9yICduYW1lJworICogYW5kIHByZXNlcnZlIGl0IGluZGVmaW5pdGVseS4gCisgKiBAcGFyYW0g
bmFtZSB0aGUgY29udmVydGVyIG5hbWUgdG8gYmUgdGhlIGRlZmF1bHQgKG11c3QgZXhpc3QpLgor
ICogQHNlZSB1Y252X2dldERlZmF1bHROYW1lCisgKiBAc3lzdGVtIFNZU1RFTSBBUEkKKyAqIEBz
dGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWNudl9zZXREZWZh
dWx0TmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBGaXhlcyB0aGUgYmFja3NsYXNo
IGNoYXJhY3RlciBtaXNtYXBwaW5nLiAgRm9yIGV4YW1wbGUsIGluIFNKSVMsIHRoZSBiYWNrc2xh
c2ggCisgKiBjaGFyYWN0ZXIgaW4gdGhlIEFTQ0lJIHBvcnRpb24gaXMgYWxzbyB1c2VkIHRvIHJl
cHJlc2VudCB0aGUgeWVuIGN1cnJlbmN5IHNpZ24uICAKKyAqIFdoZW4gbWFwcGluZyBmcm9tIFVu
aWNvZGUgY2hhcmFjdGVyIDB4MDA1QywgaXQncyB1bmNsZWFyIHdoZXRoZXIgdG8gbWFwIHRoZSAK
KyAqIGNoYXJhY3RlciBiYWNrIHRvIHllbiBvciBiYWNrc2xhc2ggaW4gU0pJUy4gIFRoaXMgZnVu
Y3Rpb24gd2lsbCB0YWtlIHRoZSBpbnB1dAorICogYnVmZmVyIGFuZCByZXBsYWNlIGFsbCB0aGUg
eWVuIHNpZ24gY2hhcmFjdGVycyB3aXRoIGJhY2tzbGFzaC4gIFRoaXMgaXMgbmVjZXNzYXJ5Cisg
KiB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIG9wZW4gYSBmaWxlIHdpdGggdGhlIGlucHV0IGJ1ZmZl
ciBvbiBXaW5kb3dzLgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHRlc3QgdGhlIGNvbnZlcnRlciB0
byBzZWUgd2hldGhlciBzdWNoIG1hcHBpbmcgaXMKKyAqIHJlcXVpcmVkLiAgWW91IGNhbiBzb21l
dGltZXMgYXZvaWQgdXNpbmcgdGhpcyBmdW5jdGlvbiBieSB1c2luZyB0aGUgY29ycmVjdCB2ZXJz
aW9uCisgKiBvZiBTaGlmdC1KSVMuCisgKgorICogQHBhcmFtIGNudiBUaGUgY29udmVydGVyIHJl
cHJlc2VudGluZyB0aGUgdGFyZ2V0IGNvZGVwYWdlLgorICogQHBhcmFtIHNvdXJjZSB0aGUgaW5w
dXQgYnVmZmVyIHRvIGJlIGZpeGVkCisgKiBAcGFyYW0gc291cmNlTGVuIHRoZSBsZW5ndGggb2Yg
dGhlIGlucHV0IGJ1ZmZlcgorICogQHNlZSB1Y252X2lzQW1iaWd1b3VzCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfZml4RmlsZVNlcGFyYXRv
cihjb25zdCBVQ29udmVydGVyICpjbnYsIFVDaGFyICpzb3VyY2UsIGludDMyX3Qgc291cmNlTGVu
KTsKKworLyoqCisgKiBEZXRlcm1pbmVzIGlmIHRoZSBjb252ZXJ0ZXIgY29udGFpbnMgYW1iaWd1
b3VzIG1hcHBpbmdzIG9mIHRoZSBzYW1lCisgKiBjaGFyYWN0ZXIgb3Igbm90LgorICogQHBhcmFt
IGNudiB0aGUgY29udmVydGVyIHRvIGJlIHRlc3RlZAorICogQHJldHVybiBUUlVFIGlmIHRoZSBj
b252ZXJ0ZXIgY29udGFpbnMgYW1iaWd1b3VzIG1hcHBpbmcgb2YgdGhlIHNhbWUgCisgKiBjaGFy
YWN0ZXIsIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBVQm9vbCBVX0VYUE9SVDIKK3VjbnZfaXNBbWJpZ3VvdXMoY29uc3QgVUNvbnZlcnRlciAqY252
KTsKKworLyoqCisgKiBTZXRzIHRoZSBjb252ZXJ0ZXIgdG8gdXNlIGZhbGxiYWNrIG1hcHBpbmcg
b3Igbm90LgorICogQHBhcmFtIGNudiBUaGUgY29udmVydGVyIHRvIHNldCB0aGUgZmFsbGJhY2sg
bWFwcGluZyB1c2FnZSBvbi4KKyAqIEBwYXJhbSB1c2VzRmFsbGJhY2sgVFJVRSBpZiB0aGUgdXNl
ciB3YW50cyB0aGUgY29udmVydGVyIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWxsYmFjayAK
KyAqIG1hcHBpbmcsIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjbnZfc2V0RmFsbGJhY2soVUNvbnZlcnRlciAqY252
LCBVQm9vbCB1c2VzRmFsbGJhY2spOworCisvKioKKyAqIERldGVybWluZXMgaWYgdGhlIGNvbnZl
cnRlciB1c2VzIGZhbGxiYWNrIG1hcHBpbmdzIG9yIG5vdC4KKyAqIEBwYXJhbSBjbnYgVGhlIGNv
bnZlcnRlciB0byBiZSB0ZXN0ZWQKKyAqIEByZXR1cm4gVFJVRSBpZiB0aGUgY29udmVydGVyIHVz
ZXMgZmFsbGJhY2ssIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIgCit1Y252X3VzZXNGYWxsYmFjayhjb25zdCBVQ29udmVy
dGVyICpjbnYpOworCisvKioKKyAqIERldGVjdHMgVW5pY29kZSBzaWduYXR1cmUgYnl0ZSBzZXF1
ZW5jZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBieXRlIHN0cmVhbQorICogYW5kIHJldHVybnMgdGhl
IGNoYXJzZXQgbmFtZSBvZiB0aGUgaW5kaWNhdGVkIFVuaWNvZGUgY2hhcnNldC4KKyAqIE5VTEwg
aXMgcmV0dXJuZWQgd2hlbiBubyBVbmljb2RlIHNpZ25hdHVyZSBpcyByZWNvZ25pemVkLgorICog
VGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc2lnbmF0dXJlIGlzIG91dHB1dCBhcyB3ZWxsLgor
ICoKKyAqIFRoZSBjYWxsZXIgY2FuIHVjbnZfb3BlbigpIGEgY29udmVydGVyIHVzaW5nIHRoZSBj
aGFyc2V0IG5hbWUuCisgKiBUaGUgZmlyc3QgY29kZSB1bml0IChVQ2hhcikgZnJvbSB0aGUgc3Rh
cnQgb2YgdGhlIHN0cmVhbSB3aWxsIGJlIFUrRkVGRgorICogKHRoZSBVbmljb2RlIEJPTS9zaWdu
YXR1cmUgY2hhcmFjdGVyKSBhbmQgY2FuIHVzdWFsbHkgYmUgaWdub3JlZC4KKyAqCisgKiBGb3Ig
bW9zdCBVbmljb2RlIGNoYXJzZXRzIGl0IGlzIGFsc28gcG9zc2libGUgdG8gaWdub3JlIHRoZSBp
bmRpY2F0ZWQKKyAqIG51bWJlciBvZiBpbml0aWFsIHN0cmVhbSBieXRlcyBhbmQgc3RhcnQgY29u
dmVydGluZyBhZnRlciB0aGVtLgorICogSG93ZXZlciwgdGhlcmUgYXJlIHN0YXRlZnVsIFVuaWNv
ZGUgY2hhcnNldHMgKFVURi03IGFuZCBCT0NVLTEpIGZvciB3aGljaAorICogdGhpcyB3aWxsIG5v
dCB3b3JrLiBUaGVyZWZvcmUsIGl0IGlzIGJlc3QgdG8gaWdub3JlIHRoZSBmaXJzdCBvdXRwdXQg
VUNoYXIKKyAqIGluc3RlYWQgb2YgdGhlIGlucHV0IHNpZ25hdHVyZSBieXRlcy4KKyAqIDxwPgor
ICogVXNhZ2U6CisgKiBAY29kZSAgICAgCisgKiAgICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJP
X0VSUk9SOworICogICAgICBjaGFyIGlucHV0W10gPSB7ICdceEVGJywnXHhCQicsICdceEJGJywn
XHg0MScsJ1x4NDInLCdceDQzJyB9OworICogICAgICBpbnQzMl90IHNpZ25hdHVyZUxlbmd0aCA9
IDA7CisgKiAgICAgIGNoYXIgKmVuY29kaW5nID0gdWNudl9kZXRlY3RVbmljb2RlU2lnbmF0dXJl
cyhpbnB1dCxzaXplb2YoaW5wdXQpLCZzaWduYXR1cmVMZW5ndGgsJmVycik7CisgKiAgICAgIFVD
b252ZXJ0ZXIgKmNvbnYgPSBOVUxMOworICogICAgICBVQ2hhciBvdXRwdXRbMTAwXTsKKyAqICAg
ICAgVUNoYXIgKnRhcmdldCA9IG91dHB1dCwgKm91dDsKKyAqICAgICAgY2hhciAqc291cmNlID0g
aW5wdXQ7CisgKiAgICAgIGlmKGVuY29kaW5nIT1OVUxMICYmIFVfU1VDQ0VTUyhlcnIpKXsKKyAq
ICAgICAgICAgIC8vIHNob3VsZCBzaWduYXR1cmUgYmUgZGlzY2FyZGVkID8KKyAqICAgICAgICAg
IGNvbnYgPSB1Y252X29wZW4oZW5jb2RpbmcsICZlcnIpOworICogICAgICAgICAgLy8gZG8gdGhl
IGNvbnZlcnNpb24KKyAqICAgICAgICAgIHVjbnZfdG9Vbmljb2RlKGNvbnYsCisgKiAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXQsIG91dHB1dCArIHNpemVvZihvdXRwdXQpL1VfU0laRU9G
X1VDSEFSLAorICogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBpbnB1dCArIHNpemVv
ZihpbnB1dCksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBUUlVFLCAmZXJyKTsK
KyAqICAgICAgICAgIG91dCA9IG91dHB1dDsKKyAqICAgICAgICAgIGlmIChkaXNjYXJkU2lnbmF0
dXJlKXsKKyAqICAgICAgICAgICAgICArK291dDsgLy8gaWdub3JlIGluaXRpYWwgVStGRUZGCisg
KiAgICAgICAgICB9CisgKiAgICAgICAgICB3aGlsZShvdXQgIT0gdGFyZ2V0KSB7CisgKiAgICAg
ICAgICAgICAgcHJpbnRmKCIlMDR4ICIsICpvdXQrKyk7CisgKiAgICAgICAgICB9CisgKiAgICAg
ICAgICBwdXRzKCIiKTsKKyAqICAgICAgfQorICogICAgIAorICogQGVuZGNvZGUKKyAqCisgKiBA
cGFyYW0gc291cmNlICAgICAgICAgICAgVGhlIHNvdXJjZSBzdHJpbmcgaW4gd2hpY2ggdGhlIHNp
Z25hdHVyZSBzaG91bGQgYmUgZGV0ZWN0ZWQuCisgKiBAcGFyYW0gc291cmNlTGVuZ3RoICAgICAg
TGVuZ3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcsIG9yIC0xIGlmIHRlcm1pbmF0ZWQgd2l0aCBhIE5V
TCBieXRlLgorICogQHBhcmFtIHNpZ25hdHVyZUxlbmd0aCAgIEEgcG9pbnRlciB0byBpbnQzMl90
IHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIHNpZ25hdHVy
ZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZGV0ZWN0ZWQgVVRGLiAwIGlm
IG5vdCBkZXRlY3RlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgYSBOVUxM
IHBvaW50ZXIuCisgKiBAcGFyYW0gcEVycm9yQ29kZSAgICAgICAgQSBwb2ludGVyIHRvIHJlY2Vp
dmUgaW5mb3JtYXRpb24gYWJvdXQgYW55IGVycm9ycyB0aGF0IG1heSBvY2N1ciBkdXJpbmcgZGV0
ZWN0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgYSB2YWxpZCBwb2lu
dGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUsIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFp
bHVyZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2Fs
bC4KKyAqIEByZXR1cm4gVGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIGRldGVjdGVkLiBOVUxMIGlm
IGVuY29kaW5nIGlzIG5vdCBkZXRlY3RlZC4gCisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9T
VEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyCit1Y252X2RldGVjdFVuaWNvZGVTaWduYXR1cmUo
Y29uc3QgY2hhciogc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
c291cmNlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKnNpZ25h
dHVyZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJy
b3JDb2RlKTsKKworI2VuZGlmCisKKyNlbmRpZgorLypfVUNOViovCg==
</data>
<flag name="review"
          id="218"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2920</attachid>
            <date>2005-07-12 00:25:48 -0700</date>
            <delta_ts>2005-07-12 00:27:11 -0700</delta_ts>
            <desc>Adds ucnv_err.h as well.</desc>
            <filename>ucnv.patch</filename>
            <type>text/plain</type>
            <size>99120</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGljdS91bmljb2RlL3VjbnYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB1Y252LmgKZGlm
ZiAtTiBpY3UvdW5pY29kZS91Y252LmgKLS0tIGljdS91bmljb2RlL3VjbnYuaAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCisrKyBpY3UvdW5pY29kZS91Y252LmgJMTIgSnVsIDIwMDUgMDc6MTA6
NDggLTAwMDAKQEAgLTAsMCArMSwxODE3IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHly
aWdodCAoQykgMTk5OS0yMDA0LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAg
Q29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCisgKiAgdWNudi5oOgorICogIEV4dGVybmFsIEFQSXMgZm9yIHRoZSBJQ1UncyBjb2Rlc2V0
IGNvbnZlcnNpb24gbGlicmFyeQorICogIEJlcnRyYW5kIEEuIERhbWliYQorICoKKyAqIE1vZGlm
aWNhdGlvbiBIaXN0b3J5OgorICoKKyAqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3Jp
cHRpb24KKyAqICAgMDQvMDQvOTkgICAgaGVsZW5hICAgICAgRml4ZWQgaW50ZXJuYWwgaGVhZGVy
IGluY2x1c2lvbi4KKyAqICAgMDUvMTEvMDAgICAgaGVsZW5hICAgICAgQWRkZWQgc2V0RmFsbGJh
Y2sgYW5kIHVzZXNGYWxsYmFjayBBUElzLgorICogICAwNi8yOS8yMDAwICBoZWxlbmEgICAgICBN
YWpvciByZXdyaXRlIG9mIHRoZSBjYWxsYmFjayBBUElzLgorICogICAxMi8wNy8yMDAwICBzcmwg
ICAgICAgICBVcGRhdGUgb2YgZG9jdW1lbnRhdGlvbgorICovCisKKy8qKgorICogXGZpbGUKKyAq
IFxicmllZiBDIEFQSTogQ2hhcmFjdGVyIGNvbnZlcnNpb24gCisgKgorICogPGgyPkNoYXJhY3Rl
ciBDb252ZXJzaW9uIEMgQVBJPC9oMj4KKyAqCisgKiA8cD5UaGlzIEFQSSBpcyB1c2VkIHRvIGNv
bnZlcnQgY29kZXBhZ2Ugb3IgY2hhcmFjdGVyIGVuY29kZWQgZGF0YSB0byBhbmQKKyAqIGZyb20g
VVRGLTE2LiBZb3UgY2FuIG9wZW4gYSBjb252ZXJ0ZXIgd2l0aCB7QGxpbmsgdWNudl9vcGVuKCkg
fS4gV2l0aCB0aGF0CisgKiBjb252ZXJ0ZXIsIHlvdSBjYW4gZ2V0IGl0cyBwcm9wZXJ0aWVzLCBz
ZXQgb3B0aW9ucywgY29udmVydCB5b3VyIGRhdGEgYW5kCisgKiBjbG9zZSB0aGUgY29udmVydGVy
LjwvcD4KKyAqCisgKiA8cD5TaW5jZSBtYW55IHNvZnR3YXJlIHByb2dyYW1zIHJlY29naXplIGRp
ZmZlcmVudCBjb252ZXJ0ZXIgbmFtZXMgZm9yCisgKiBkaWZmZXJlbnQgdHlwZXMgb2YgY29udmVy
dGVycywgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIEFQSSB0bworICogaXRlcmF0
ZSBvdmVyIHRoZSBjb252ZXJ0ZXIgYWxpYXNlcy4gVGhlIGZ1bmN0aW9ucyB7QGxpbmsgdWNudl9n
ZXRBdmFpbGFibGVOYW1lKCkgfSwKKyAqIHtAbGluayB1Y252X2dldEFsaWFzKCkgfSBhbmQge0Bs
aW5rIHVjbnZfZ2V0U3RhbmRhcmROYW1lKCkgfSBhcmUgc29tZSBvZiB0aGUKKyAqIG1vcmUgZnJl
cXVlbnRseSB1c2VkIGFsaWFzIGZ1bmN0aW9ucyB0byBnZXQgdGhpcyBpbmZvcm1hdGlvbi48L3A+
CisgKgorICogPHA+V2hlbiBhIGNvbnZlcnRlciBlbmNvdW50ZXJzIGFuIGlsbGVnYWwsIGlycmVn
dWxhciwgaW52YWxpZCBvciB1bm1hcHBhYmxlIGNoYXJhY3RlcgorICogaXRzIGRlZmF1bHQgYmVo
YXZpb3IgaXMgdG8gdXNlIGEgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciB0byByZXBsYWNlIHRoZQor
ICogYmFkIGJ5dGUgc2VxdWVuY2UuIFRoaXMgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQgYnkgdXNp
bmcge0BsaW5rIHVjbnZfZ2V0RnJvbVVDYWxsQmFjaygpIH0KKyAqIG9yIHtAbGluayB1Y252X2dl
dFRvVUNhbGxCYWNrKCkgfSBvbiB0aGUgY29udmVydGVyLiBUaGUgaGVhZGVyIHVjbnZfZXJyLmgg
ZGVmaW5lcworICogbWFueSBvdGhlciBjYWxsYmFjayBhY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQg
aW5zdGVhZCBvZiBhIGNoYXJhY3RlciBzdWJzdGl0dXRpb24uPC9wPgorICoKKyAqIDxwPk1vcmUg
aW5mb3JtYXRpb24gYWJvdXQgdGhpcyBBUEkgY2FuIGJlIGZvdW5kIGluIG91ciAKKyAqIDxhIGhy
ZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3UvdXNlcmd1aWRlL2NvbnZlcnNpb24u
aHRtbCI+VXNlcidzCisgKiBHdWlkZTwvYT4uPC9wPgorICovCisKKyNpZm5kZWYgVUNOVl9ICisj
ZGVmaW5lIFVDTlZfSAorCisjaW5jbHVkZSAidW5pY29kZS91Y252X2Vyci5oIgorI2luY2x1ZGUg
InVuaWNvZGUvdWVudW0uaCIKKworI2lmbmRlZiBfX1VTRVRfSF9fCisKKy8qKgorICogVVNldCBp
cyB0aGUgQyBBUEkgdHlwZSBmb3IgVW5pY29kZSBzZXRzLgorICogSXQgaXMgZm9yd2FyZC1kZWNs
YXJlZCBoZXJlIHRvIGF2b2lkIGluY2x1ZGluZyB0aGUgaGVhZGVyIGZpbGUgaWYgcmVsYXRlZAor
ICogY29udmVyc2lvbiBBUElzIGFyZSBub3QgdXNlZC4KKyAqIFNlZSB1bmljb2RlL3VzZXQuaAor
ICoKKyAqIEBzZWUgdWNudl9nZXRVbmljb2RlU2V0CisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLwor
c3RydWN0IFVTZXQ7CisvKiogQHN0YWJsZSBJQ1UgMi42ICovCit0eXBlZGVmIHN0cnVjdCBVU2V0
IFVTZXQ7CisKKyNlbmRpZgorCisjaWYgIVVDT05GSUdfTk9fQ09OVkVSU0lPTgorCitVX0NERUNM
X0JFR0lOCisKKy8qKiBNYXhpbXVtIGxlbmd0aCBvZiBhIGNvbnZlcnRlciBuYW1lIGluY2x1ZGlu
ZyB0aGUgdGVybWluYXRpbmcgTlVMTCBAc3RhYmxlIElDVSAyLjAgKi8KKyNkZWZpbmUgVUNOVl9N
QVhfQ09OVkVSVEVSX05BTUVfTEVOR1RIIDYwCisvKiogTWF4aW11bSBsZW5ndGggb2YgYSBjb252
ZXJ0ZXIgbmFtZSBpbmNsdWRpbmcgcGF0aCBhbmQgdGVybWluYXRpbmcgTlVMTCBAc3RhYmxlIElD
VSAyLjAgKi8KKyNkZWZpbmUgVUNOVl9NQVhfRlVMTF9GSUxFX05BTUVfTEVOR1RIICg2MDArVUNO
Vl9NQVhfQ09OVkVSVEVSX05BTUVfTEVOR1RIKQorCisvKiogU2hpZnQgaW4gZm9yIEVCRENESUNf
U1RBVEVGVUwgYW5kIGlzbzIwMjIgc3RhdGVzIEBzdGFibGUgSUNVIDIuMCAqLworI2RlZmluZSAg
VUNOVl9TSSAweDBGCisvKiogU2hpZnQgb3V0IGZvciBFQkRDRElDX1NUQVRFRlVMIGFuZCBpc28y
MDIyIHN0YXRlcyBAc3RhYmxlIElDVSAyLjAgKi8KKyNkZWZpbmUgIFVDTlZfU08gMHgwRQorCisv
KioKKyAqIEVudW0gZm9yIHNwZWNpZnlpbmcgYmFzaWMgdHlwZXMgb2YgY29udmVydGVycworICog
QHNlZSB1Y252X2dldFR5cGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0g
eworICAgIFVDTlZfVU5TVVBQT1JURURfQ09OVkVSVEVSID0gLTEsCisgICAgVUNOVl9TQkNTID0g
MCwKKyAgICBVQ05WX0RCQ1MgPSAxLAorICAgIFVDTlZfTUJDUyA9IDIsCisgICAgVUNOVl9MQVRJ
Tl8xID0gMywKKyAgICBVQ05WX1VURjggPSA0LAorICAgIFVDTlZfVVRGMTZfQmlnRW5kaWFuID0g
NSwKKyAgICBVQ05WX1VURjE2X0xpdHRsZUVuZGlhbiA9IDYsCisgICAgVUNOVl9VVEYzMl9CaWdF
bmRpYW4gPSA3LAorICAgIFVDTlZfVVRGMzJfTGl0dGxlRW5kaWFuID0gOCwKKyAgICBVQ05WX0VC
Q0RJQ19TVEFURUZVTCA9IDksCisgICAgVUNOVl9JU09fMjAyMiA9IDEwLAorCisgICAgVUNOVl9M
TUJDU18xID0gMTEsCisgICAgVUNOVl9MTUJDU18yLCAKKyAgICBVQ05WX0xNQkNTXzMsCisgICAg
VUNOVl9MTUJDU180LAorICAgIFVDTlZfTE1CQ1NfNSwKKyAgICBVQ05WX0xNQkNTXzYsCisgICAg
VUNOVl9MTUJDU184LAorICAgIFVDTlZfTE1CQ1NfMTEsCisgICAgVUNOVl9MTUJDU18xNiwKKyAg
ICBVQ05WX0xNQkNTXzE3LAorICAgIFVDTlZfTE1CQ1NfMTgsCisgICAgVUNOVl9MTUJDU18xOSwK
KyAgICBVQ05WX0xNQkNTX0xBU1QgPSBVQ05WX0xNQkNTXzE5LAorICAgIFVDTlZfSFosCisgICAg
VUNOVl9TQ1NVLAorICAgIFVDTlZfSVNDSUksCisgICAgVUNOVl9VU19BU0NJSSwKKyAgICBVQ05W
X1VURjcsCisgICAgVUNOVl9CT0NVMSwKKyAgICBVQ05WX1VURjE2LAorICAgIFVDTlZfVVRGMzIs
CisgICAgVUNOVl9DRVNVOCwKKyAgICBVQ05WX0lNQVBfTUFJTEJPWCwKKworICAgIC8qIE51bWJl
ciBvZiBjb252ZXJ0ZXIgdHlwZXMgZm9yIHdoaWNoIHdlIGhhdmUgY29udmVyc2lvbiByb3V0aW5l
cy4gKi8KKyAgICBVQ05WX05VTUJFUl9PRl9TVVBQT1JURURfQ09OVkVSVEVSX1RZUEVTCisKK30g
VUNvbnZlcnRlclR5cGU7CisKKy8qKgorICogRW51bSBmb3Igc3BlY2lmeWluZyB3aGljaCBwbGF0
Zm9ybSBhIGNvbnZlcnRlciBJRCByZWZlcnMgdG8uCisgKiBUaGUgdXNlIG9mIHBsYXRmb3JtL0ND
U0lEIGlzIG5vdCByZWNvbW1lbmRlZC4gU2VlIHVjbnZfb3BlbkNDU0lEKCkuCisgKgorICogQHNl
ZSB1Y252X2dldFBsYXRmb3JtCisgKiBAc2VlIHVjbnZfb3BlbkNDU0lECisgKiBAc2VlIHVjbnZf
Z2V0Q0NTSUQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIGVudW0geworICAgIFVD
TlZfVU5LTk9XTiA9IC0xLAorICAgIFVDTlZfSUJNID0gMAorfSBVQ29udmVydGVyUGxhdGZvcm07
CisKKy8qKgorICogRnVuY3Rpb24gcG9pbnRlciBmb3IgZXJyb3IgY2FsbGJhY2sgaW4gdGhlIGNv
ZGVwYWdlIHRvIHVuaWNvZGUgZGlyZWN0aW9uLgorICogQ2FsbGVkIHdoZW4gYW4gZXJyb3IgaGFz
IG9jY3VyZWQgaW4gY29udmVyc2lvbiB0byB1bmljb2RlLCBvciBvbiBvcGVuL2Nsb3NlIG9mIHRo
ZSBjYWxsYmFjayAoc2VlIHJlYXNvbikuCisgKiBAcGFyYW0gY29udGV4dCBQb2ludGVyIHRvIHRo
ZSBjYWxsYmFjaydzIHByaXZhdGUgZGF0YQorICogQHBhcmFtIGFyZ3MgSW5mb3JtYXRpb24gYWJv
dXQgdGhlIGNvbnZlcnNpb24gaW4gcHJvZ3Jlc3MKKyAqIEBwYXJhbSBjb2RlVW5pdHMgUG9pbnRz
IHRvICdsZW5ndGgnIGJ5dGVzIG9mIHRoZSBjb25jZXJuZWQgY29kZXBhZ2Ugc2VxdWVuY2UKKyAq
IEBwYXJhbSBsZW5ndGggU2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBjb25jZXJuZWQgY29kZXBhZ2Ug
c2VxdWVuY2UKKyAqIEBwYXJhbSByZWFzb24gRGVmaW5lcyB0aGUgcmVhc29uIHRoZSBjYWxsYmFj
ayB3YXMgaW52b2tlZAorICogQHNlZSB1Y252X3NldFRvVUNhbGxCYWNrCisgKiBAc2VlIFVDb252
ZXJ0ZXJUb1VuaWNvZGVBcmdzCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiB2b2lk
IChVX0VYUE9SVDIgKlVDb252ZXJ0ZXJUb1VDYWxsYmFjaykgKAorICAgICAgICAgICAgICAgICAg
Y29uc3Qgdm9pZCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJUb1VuaWNv
ZGVBcmdzICphcmdzLAorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29kZVVuaXRzLAor
ICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBVQ29u
dmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLAorICAgICAgICAgICAgICAgICAgVUVycm9yQ29k
ZSAqKTsKKworLyoqCisgKiBGdW5jdGlvbiBwb2ludGVyIGZvciBlcnJvciBjYWxsYmFjayBpbiB0
aGUgdW5pY29kZSB0byBjb2RlcGFnZSBkaXJlY3Rpb24uCisgKiBDYWxsZWQgd2hlbiBhbiBlcnJv
ciBoYXMgb2NjdXJlZCBpbiBjb252ZXJzaW9uIGZyb20gdW5pY29kZSwgb3Igb24gb3Blbi9jbG9z
ZSBvZiB0aGUgY2FsbGJhY2sgKHNlZSByZWFzb24pLgorICogQHBhcmFtIGNvbnRleHQgUG9pbnRl
ciB0byB0aGUgY2FsbGJhY2sncyBwcml2YXRlIGRhdGEKKyAqIEBwYXJhbSBhcmdzIEluZm9ybWF0
aW9uIGFib3V0IHRoZSBjb252ZXJzaW9uIGluIHByb2dyZXNzCisgKiBAcGFyYW0gY29kZVVuaXRz
IFBvaW50cyB0byAnbGVuZ3RoJyBVQ2hhcnMgb2YgdGhlIGNvbmNlcm5lZCBVbmljb2RlIHNlcXVl
bmNlCisgKiBAcGFyYW0gbGVuZ3RoIFNpemUgKGluIGJ5dGVzKSBvZiB0aGUgY29uY2VybmVkIGNv
ZGVwYWdlIHNlcXVlbmNlCisgKiBAcGFyYW0gY29kZVBvaW50IFNpbmdsZSBVQ2hhcjMyIChVVEYt
MzIpIGNvbnRhaW5pbmcgdGhlIGNvbmNlcmVuZCBVbmljb2RlIGNvZGVwb2ludC4KKyAqIEBwYXJh
bSByZWFzb24gRGVmaW5lcyB0aGUgcmVhc29uIHRoZSBjYWxsYmFjayB3YXMgaW52b2tlZAorICog
QHNlZSB1Y252X3NldEZyb21VQ2FsbEJhY2sKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBl
ZGVmIHZvaWQgKFVfRVhQT1JUMiAqVUNvbnZlcnRlckZyb21VQ2FsbGJhY2spICgKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgVUNv
bnZlcnRlckZyb21Vbmljb2RlQXJncyAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VUNoYXIqIGNvZGVVbml0cywKKyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCisg
ICAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY29kZVBvaW50LAorICAgICAgICAgICAgICAgICAg
ICBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLAorICAgICAgICAgICAgICAgICAgICBV
RXJyb3JDb2RlICopOworCitVX0NERUNMX0VORAorCisvKioKKyAqIENoYXJhY3RlciB0aGF0IHNl
cGFyYXRlcyBjb252ZXJ0ZXIgbmFtZXMgZnJvbSBvcHRpb25zIGFuZCBvcHRpb25zIGZyb20gZWFj
aCBvdGhlci4KKyAqIEBzZWUgdWNudl9vcGVuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworI2Rl
ZmluZSBVQ05WX09QVElPTl9TRVBfQ0hBUiAnLCcKKworLyoqCisgKiBTdHJpbmcgdmVyc2lvbiBv
ZiBVQ05WX09QVElPTl9TRVBfQ0hBUi4gCisgKiBAc2VlIHVjbnZfb3BlbgorICogQHN0YWJsZSBJ
Q1UgMi4wCisgKi8KKyNkZWZpbmUgVUNOVl9PUFRJT05fU0VQX1NUUklORyAiLCIKKworLyoqCisg
KiBDaGFyYWN0ZXIgdGhhdCBzZXBhcmF0ZXMgYSBjb252ZXJ0ZXIgb3B0aW9uIGZyb20gaXRzIHZh
bHVlLgorICogQHNlZSB1Y252X29wZW4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCisjZGVmaW5l
IFVDTlZfVkFMVUVfU0VQX0NIQVIgJz0nCisKKy8qKgorICogU3RyaW5nIHZlcnNpb24gb2YgVUNO
Vl9WQUxVRV9TRVBfQ0hBUi4gCisgKiBAc2VlIHVjbnZfb3BlbgorICogQHN0YWJsZSBJQ1UgMi4w
CisgKi8KKyNkZWZpbmUgVUNOVl9WQUxVRV9TRVBfU1RSSU5HICI9IgorCisvKioKKyAqIENvbnZl
cnRlciBvcHRpb24gZm9yIHNwZWNpZnlpbmcgYSBsb2NhbGUuCisgKiBGb3IgZXhhbXBsZSwgdWNu
dl9vcGVuKCJTQ1NVLGxvY2FsZT1qYSIsICZlcnJvckNvZGUpOworICogU2VlIGNvbnZydHJzLnR4
dC4KKyAqCisgKiBAc2VlIHVjbnZfb3BlbgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KKyNkZWZp
bmUgVUNOVl9MT0NBTEVfT1BUSU9OX1NUUklORyAiLGxvY2FsZT0iCisKKy8qKgorICogQ29udmVy
dGVyIG9wdGlvbiBmb3Igc3BlY2lmeWluZyBhIHZlcnNpb24gc2VsZWN0b3IgKDAuLjkpIGZvciBz
b21lIGNvbnZlcnRlcnMuCisgKiBGb3IgZXhhbXBsZSwgdWNudl9vcGVuKCJVVEYtNyx2ZXJzaW9u
PTEiLCAmZXJyb3JDb2RlKTsKKyAqIFNlZSBjb252cnRycy50eHQuCisgKgorICogQHNlZSB1Y252
X29wZW4KKyAqIEBzdGFibGUgSUNVIDIuNAorICovCisjZGVmaW5lIFVDTlZfVkVSU0lPTl9PUFRJ
T05fU1RSSU5HICIsdmVyc2lvbj0iCisKKy8qKgorICogQ29udmVydGVyIG9wdGlvbiBmb3IgRUJD
RElDIFNCQ1Mgb3IgbWl4ZWQtU0JDUy9EQkNTIChzdGF0ZWZ1bCkgY29kZXBhZ2VzLgorICogU3dh
cHMgVW5pY29kZSBtYXBwaW5ncyBmb3IgRUJDRElDIExGIGFuZCBOTCBjb2RlcywgYXMgdXNlZCBv
bgorICogUy8zOTAgKHovT1MpIFVuaXggU3lzdGVtIFNlcnZpY2VzIChPcGVuIEVkaXRpb24pLgor
ICogRm9yIGV4YW1wbGUsIHVjbnZfb3BlbigiaWJtLTEwNDcsc3dhcGxmbmwiLCAmZXJyb3JDb2Rl
KTsKKyAqIFNlZSBjb252cnRycy50eHQuCisgKgorICogQHNlZSB1Y252X29wZW4KKyAqIEBzdGFi
bGUgSUNVIDIuNAorICovCisjZGVmaW5lIFVDTlZfU1dBUF9MRk5MX09QVElPTl9TVFJJTkcgIixz
d2FwbGZubCIKKworLyoqCisgKiBEbyBhIGZ1enp5IGNvbXBhcmUgb2YgYSB0d28gY29udmVydGVy
L2FsaWFzIG5hbWVzLiAgVGhlIGNvbXBhcmlzb24KKyAqIGlzIGNhc2UtaW5zZW5zaXRpdmUuICBJ
dCBhbHNvIGlnbm9yZXMgdGhlIGNoYXJhY3RlcnMgJy0nLCAnXycsIGFuZAorICogJyAnIChkYXNo
LCB1bmRlcnNjb3JlLCBhbmQgc3BhY2UpLiAgVGh1cyB0aGUgc3RyaW5ncyAiVVRGLTgiLAorICog
InV0Zl84IiwgYW5kICJVdGYgOCIgYXJlIGV4YWN0bHkgZXF1aXZhbGVudC4KKyAqIAorICogQHBh
cmFtIG5hbWUxIGEgY29udmVydGVyIG5hbWUgb3IgYWxpYXMsIHplcm8tdGVybWluYXRlZAorICog
QHBhcmFtIG5hbWUyIGEgY29udmVydGVyIG5hbWUgb3IgYWxpYXMsIHplcm8tdGVybWluYXRlZAor
ICogQHJldHVybiAwIGlmIHRoZSBuYW1lcyBtYXRjaCwgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBpZiB0
aGUgbmFtZTEKKyAqIGxleGljYWxseSBwcmVjZWRlcyBuYW1lMiwgb3IgYSBwb3NpdGl2ZSB2YWx1
ZSBpZiB0aGUgbmFtZTEKKyAqIGxleGljYWxseSBmb2xsb3dzIG5hbWUyLgorICogQHN0YWJsZSBJ
Q1UgMi4wCisgKi8KK1VfU1RBQkxFIGludCBVX0VYUE9SVDIKK3VjbnZfY29tcGFyZU5hbWVzKGNv
bnN0IGNoYXIgKm5hbWUxLCBjb25zdCBjaGFyICpuYW1lMik7CisKKworLyoqCisgKiBDcmVhdGVz
IGEgVUNvbnZlcnRlciBvYmplY3Qgd2l0aCB0aGUgbmFtZXMgc3BlY2lmaWVkIGFzIGEgQyBzdHJp
bmcuCisgKiBUaGUgYWN0dWFsIG5hbWUgd2lsbCBiZSByZXNvbHZlZCB3aXRoIHRoZSBhbGlhcyBm
aWxlCisgKiB1c2luZyBhIGNhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzb24gdGhhdCBp
Z25vcmVzCisgKiB0aGUgZGVsaW1pdGVycyAnLScsICdfJywgYW5kICcgJyAoZGFzaCwgdW5kZXJz
Y29yZSwgYW5kIHNwYWNlKS4KKyAqIEUuZy4sIHRoZSBuYW1lcyAiVVRGOCIsICJ1dGYtOCIsIGFu
ZCAiVXRmIDgiIGFyZSBhbGwgZXF1aXZhbGVudC4KKyAqIElmIDxjb2RlPk5VTEw8L2NvZGU+IGlz
IHBhc3NlZCBmb3IgdGhlIGNvbnZlcnRlciBuYW1lLCBpdCB3aWxsIGNyZWF0ZSBvbmUgd2l0aCB0
aGUKKyAqIGdldERlZmF1bHROYW1lIHJldHVybiB2YWx1ZS4KKyAqCisgKiA8cD5BIGNvbnZlcnRl
ciBuYW1lIGZvciBJQ1UgMS41IGFuZCBhYm92ZSBtYXkgY29udGFpbiBvcHRpb25zCisgKiBsaWtl
IGEgbG9jYWxlIHNwZWNpZmljYXRpb24gdG8gY29udHJvbCB0aGUgc3BlY2lmaWMgYmVoYXZpb3Ig
b2YKKyAqIHRoZSBuZXdseSBpbnN0YW50aWF0ZWQgY29udmVydGVyLgorICogVGhlIG1lYW5pbmcg
b2YgdGhlIG9wdGlvbnMgZGVwZW5kcyBvbiB0aGUgcGFydGljdWxhciBjb252ZXJ0ZXIuCisgKiBJ
ZiBhbiBvcHRpb24gaXMgbm90IGRlZmluZWQgZm9yIG9yIHJlY29nbml6ZWQgYnkgYSBnaXZlbiBj
b252ZXJ0ZXIsIHRoZW4gaXQgaXMgaWdub3JlZC48L3A+CisgKgorICogPHA+T3B0aW9ucyBhcmUg
YXBwZW5kZWQgdG8gdGhlIGNvbnZlcnRlciBuYW1lIHN0cmluZywgd2l0aCBhCisgKiA8Y29kZT5V
Q05WX09QVElPTl9TRVBfQ0hBUjwvY29kZT4gYmV0d2VlbiB0aGUgbmFtZSBhbmQgdGhlIGZpcnN0
IG9wdGlvbiBhbmQKKyAqIGFsc28gYmV0d2VlbiBhZGphY2VudCBvcHRpb25zLjwvcD4KKyAqCisg
KiA8cD5JZiB0aGUgYWxpYXMgaXMgYW1iaWd1b3VzLCB0aGVuIHRoZSBwcmVmZXJyZWQgY29udmVy
dGVyIGlzIHVzZWQKKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHNldCB0byBVX0FNQklHVU9VU19BTElB
U19XQVJOSU5HLjwvcD4KKyAqCisgKiA8cD5UaGUgY29udmVyc2lvbiBiZWhhdmlvciBhbmQgbmFt
ZXMgY2FuIHZhcnkgYmV0d2VlbiBwbGF0Zm9ybXMuIElDVSBtYXkKKyAqIGNvbnZlcnQgc29tZSBj
aGFyYWN0ZXJzIGRpZmZlcmVudGx5IGZyb20gb3RoZXIgcGxhdGZvcm1zLiBEZXRhaWxzIG9uIHRo
aXMgdG9waWMKKyAqIGFyZSBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0u
Y29tL2ljdS91c2VyZ3VpZGUvY29udmVyc2lvbi5odG1sIj5Vc2VyJ3MKKyAqIEd1aWRlPC9hPi48
L3A+CisgKgorICogQHBhcmFtIGNvbnZlcnRlck5hbWUgTmFtZSBvZiB0aGUgdWNvbnYgdGFibGUs
IG1heSBoYXZlIG9wdGlvbnMgYXBwZW5kZWQKKyAqIEBwYXJhbSBlcnIgb3V0Z29pbmcgZXJyb3Ig
c3RhdHVzIDxUVD5VX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SLCBVX0ZJTEVfQUNDRVNTX0VSUk9S
PC9UVD4KKyAqIEByZXR1cm4gdGhlIGNyZWF0ZWQgVW5pY29kZSBjb252ZXJ0ZXIgb2JqZWN0LCBv
ciA8VFQ+TlVMTDwvVFQ+IGlmIGFuIGVycm9yIG9jY3VyZWQKKyAqIEBzZWUgdWNudl9vcGVuVQor
ICogQHNlZSB1Y252X29wZW5DQ1NJRAorICogQHNlZSB1Y252X2Nsb3NlCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlciogVV9FWFBPUlQyIAordWNudl9vcGVuKGNv
bnN0IGNoYXIgKmNvbnZlcnRlck5hbWUsIFVFcnJvckNvZGUgKmVycik7CisKKworLyoqCisgKiBD
cmVhdGVzIGEgVW5pY29kZSBjb252ZXJ0ZXIgd2l0aCB0aGUgbmFtZXMgc3BlY2lmaWVkIGFzIHVu
aWNvZGUgc3RyaW5nLiAKKyAqIFRoZSBuYW1lIHNob3VsZCBiZSBsaW1pdGVkIHRvIHRoZSBBU0NJ
SS03IGFscGhhbnVtZXJpY3MgcmFuZ2UuCisgKiBUaGUgYWN0dWFsIG5hbWUgd2lsbCBiZSByZXNv
bHZlZCB3aXRoIHRoZSBhbGlhcyBmaWxlCisgKiB1c2luZyBhIGNhc2UtaW5zZW5zaXRpdmUgc3Ry
aW5nIGNvbXBhcmlzb24gdGhhdCBpZ25vcmVzCisgKiB0aGUgZGVsaW1pdGVycyAnLScsICdfJywg
YW5kICcgJyAoZGFzaCwgdW5kZXJzY29yZSwgYW5kIHNwYWNlKS4KKyAqIEUuZy4sIHRoZSBuYW1l
cyAiVVRGOCIsICJ1dGYtOCIsIGFuZCAiVXRmIDgiIGFyZSBhbGwgZXF1aXZhbGVudC4KKyAqIElm
IDxUVD5OVUxMPC9UVD4gaXMgcGFzc2VkIGZvciB0aGUgY29udmVydGVyIG5hbWUsIGl0IHdpbGwg
Y3JlYXRlIAorICogb25lIHdpdGggdGhlIHVjbnZfZ2V0RGVmYXVsdE5hbWUoKSByZXR1cm4gdmFs
dWUuCisgKiBJZiB0aGUgYWxpYXMgaXMgYW1iaWd1b3VzLCB0aGVuIHRoZSBwcmVmZXJyZWQgY29u
dmVydGVyIGlzIHVzZWQKKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHNldCB0byBVX0FNQklHVU9VU19B
TElBU19XQVJOSU5HLgorICogQHBhcmFtIG5hbWUgOiBuYW1lIG9mIHRoZSB1Y29udiB0YWJsZSBp
biBhIHplcm8gdGVybWluYXRlZCAKKyAqICAgICAgICBVbmljb2RlIHN0cmluZworICogQHBhcmFt
IGVyciBvdXRnb2luZyBlcnJvciBzdGF0dXMgPFRUPlVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1Is
IAorICogICAgICAgIFVfRklMRV9BQ0NFU1NfRVJST1I8L1RUPgorICogQHJldHVybiB0aGUgY3Jl
YXRlZCBVbmljb2RlIGNvbnZlcnRlciBvYmplY3QsIG9yIDxUVD5OVUxMPC9UVD4gaWYgYW4gCisg
KiAgICAgICAgZXJyb3Igb2NjdXJlZAorICogQHNlZSB1Y252X29wZW4KKyAqIEBzZWUgdWNudl9v
cGVuQ0NTSUQKKyAqIEBzZWUgdWNudl9jbG9zZQorICogQHNlZSB1Y252X2dldERlZmF1bHROYW1l
CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlciogVV9FWFBPUlQy
IAordWNudl9vcGVuVShjb25zdCBVQ2hhciAqbmFtZSwKKyAgICAgICAgICAgVUVycm9yQ29kZSAq
ZXJyKTsKKworLyoqCisgKiBDcmVhdGVzIGEgVUNvbnZlcnRlciBvYmplY3QgZnJvbSBhIENDU0lE
IG51bWJlciBhbmQgcGxhdGZvcm0gcGFpci4KKyAqIE5vdGUgdGhhdCB0aGUgdXNlZnVsbmVzcyBv
ZiB0aGlzIGZ1bmN0aW9uIGlzIGxpbWl0ZWQgdG8gcGxhdGZvcm1zIHdpdGggbnVtZXJpYworICog
ZW5jb2RpbmcgSURzLiBPbmx5IElCTSBhbmQgTWljcm9zb2Z0IHBsYXRmb3JtcyB1c2UgbnVtZXJp
YyAoMTYtYml0KSBpZGVudGlmaWVycyBmb3IKKyAqIGVuY29kaW5ncy4KKyAqCisgKiBJbiBhZGRp
dGlvbiwgSUJNIENDU0lEcyBhbmQgVW5pY29kZSBjb252ZXJzaW9uIHRhYmxlcyBhcmUgbm90IDE6
MSByZWxhdGVkLgorICogRm9yIG1hbnkgSUJNIENDU0lEcyB0aGVyZSBhcmUgbXVsdGlwbGUgKHVw
IHRvIHNpeCkgVW5pY29kZSBjb252ZXJzaW9uIHRhYmxlcywgYW5kCisgKiBmb3Igc29tZSBVbmlj
b2RlIGNvbnZlcnNpb24gdGFibGVzIHRoZXJlIGFyZSBtdWx0aXBsZSBDQ1NJRHMuCisgKiBTb21l
ICJhbHRlcm5hdGUiIFVuaWNvZGUgY29udmVyc2lvbiB0YWJsZXMgYXJlIHByb3ZpZGVkIGJ5IHRo
ZQorICogSUJNIENEUkEgY29udmVyc2lvbiB0YWJsZSByZWdpc3RyeS4KKyAqIFRoZSBtb3N0IHBy
b21pbmVudCBleGFtcGxlIG9mIGEgc3lzdGVtYXRpYyBtb2RpZmljYXRpb24gb2YgY29udmVyc2lv
biB0YWJsZXMgdGhhdCBpcworICogbm90IHByb3ZpZGVkIGluIHRoZSBmb3JtIG9mIGNvbnZlcnNp
b24gdGFibGUgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgaXMKKyAqIHRoYXQgUy8zOTAgVW5peCBT
eXN0ZW0gU2VydmljZXMgc3dhcHMgdGhlIGNvZGVzIGZvciBMaW5lIEZlZWQgYW5kIE5ldyBMaW5l
IGluIGFsbAorICogRUJDRElDIGNvZGVwYWdlcywgd2hpY2ggcmVxdWlyZXMgc3VjaCBhIHN3YXAg
aW4gdGhlIFVuaWNvZGUgY29udmVyc2lvbiB0YWJsZXMgYXMgd2VsbC4KKyAqCisgKiBPbmx5IElC
TSBkZWZhdWx0IGNvbnZlcnNpb24gdGFibGVzIGFyZSBhY2Nlc3NpYmxlIHdpdGggdWNudl9vcGVu
Q0NTSUQoKS4KKyAqIHVjbnZfZ2V0Q0NTSUQoKSB3aWxsIHJldHVybiB0aGUgc2FtZSBDQ1NJRCBm
b3IgYWxsIGNvbnZlcnNpb24gdGFibGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhh
dCBDQ1NJRC4KKyAqCisgKiBDdXJyZW50bHksIHRoZSBvbmx5ICJwbGF0Zm9ybSIgc3VwcG9ydGVk
IGluIHRoZSBJQ1UgY29udmVydGVyIEFQSSBpcyBVQ05WX0lCTS4KKyAqCisgKiBJbiBzdW1tYXJ5
LCB0aGUgdXNlIG9mIENDU0lEcyBhbmQgdGhlIGFzc29jaWF0ZWQgQVBJIGZ1bmN0aW9ucyBpcyBu
b3QgcmVjb21tZW5kZWQuCisgKgorICogSW4gb3JkZXIgdG8gb3BlbiBhIGNvbnZlcnRlciB3aXRo
IHRoZSBkZWZhdWx0IElCTSBDRFJBIFVuaWNvZGUgY29udmVyc2lvbiB0YWJsZSwKKyAqIHlvdSBj
YW4gdXNlIHRoaXMgZnVuY3Rpb24gb3IgdXNlIHRoZSBwcmVmaXggImlibS0iOgorICogXGNvZGUK
KyAqICAgICBjaGFyIG5hbWVbMjBdOworICogICAgIHNwcmludGYobmFtZSwgImlibS0laHUiLCBj
Y3NpZCk7CisgKiAgICAgY252PXVjbnZfb3BlbihuYW1lLCAmZXJyb3JDb2RlKTsKKyAqIFxlbmRj
b2RlCisgKgorICogSW4gb3JkZXIgdG8gb3BlbiBhIGNvbnZlcnRlciB3aXRoIHRoZSBJQk0gUy8z
OTAgVW5peCBTeXN0ZW0gU2VydmljZXMgdmFyaWFudAorICogb2YgYSBVbmljb2RlL0VCQ0RJQyBj
b252ZXJzaW9uIHRhYmxlLAorICogeW91IGNhbiB1c2UgdGhlIHByZWZpeCAiaWJtLSIgdG9nZXRo
ZXIgd2l0aCB0aGUgb3B0aW9uIHN0cmluZyBVQ05WX1NXQVBfTEZOTF9PUFRJT05fU1RSSU5HOgor
ICogXGNvZGUKKyAqICAgICBjaGFyIG5hbWVbMjBdOworICogICAgIHNwcmludGYobmFtZSwgImli
bS0laHUiIFVDTlZfU1dBUF9MRk5MX09QVElPTl9TVFJJTkcsIGNjc2lkKTsKKyAqICAgICBjbnY9
dWNudl9vcGVuKG5hbWUsICZlcnJvckNvZGUpOworICogXGVuZGNvZGUKKyAqCisgKiBJbiBvcmRl
ciB0byBvcGVuIGEgY29udmVydGVyIGZyb20gYSBNaWNyb3NvZnQgY29kZXBhZ2UgbnVtYmVyLCB1
c2UgdGhlIHByZWZpeCAiY3AiOgorICogXGNvZGUKKyAqICAgICBjaGFyIG5hbWVbMjBdOworICog
ICAgIHNwcmludGYobmFtZSwgImNwJWh1IiwgY29kZXBhZ2VJRCk7CisgKiAgICAgY252PXVjbnZf
b3BlbihuYW1lLCAmZXJyb3JDb2RlKTsKKyAqIFxlbmRjb2RlCisgKgorICogSWYgdGhlIGFsaWFz
IGlzIGFtYmlndW91cywgdGhlbiB0aGUgcHJlZmVycmVkIGNvbnZlcnRlciBpcyB1c2VkCisgKiBh
bmQgdGhlIHN0YXR1cyBpcyBzZXQgdG8gVV9BTUJJR1VPVVNfQUxJQVNfV0FSTklORy4KKyAqCisg
KiBAcGFyYW0gY29kZXBhZ2UgY29kZXBhZ2UgbnVtYmVyIHRvIGNyZWF0ZQorICogQHBhcmFtIHBs
YXRmb3JtIHRoZSBwbGF0Zm9ybSBpbiB3aGljaCB0aGUgY29kZXBhZ2UgbnVtYmVyIGV4aXN0cwor
ICogQHBhcmFtIGVyciBlcnJvciBzdGF0dXMgPFRUPlVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1Is
IFVfRklMRV9BQ0NFU1NfRVJST1I8L1RUPgorICogQHJldHVybiB0aGUgY3JlYXRlZCBVbmljb2Rl
IGNvbnZlcnRlciBvYmplY3QsIG9yIDxUVD5OVUxMPC9UVD4gaWYgYW4gZXJyb3IKKyAqICAgb2Nj
dXJlZC4KKyAqIEBzZWUgdWNudl9vcGVuCisgKiBAc2VlIHVjbnZfb3BlblUKKyAqIEBzZWUgdWNu
dl9jbG9zZQorICogQHNlZSB1Y252X2dldENDU0lECisgKiBAc2VlIHVjbnZfZ2V0UGxhdGZvcm0K
KyAqIEBzZWUgVUNvbnZlcnRlclBsYXRmb3JtCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9T
VEFCTEUgVUNvbnZlcnRlciogVV9FWFBPUlQyCit1Y252X29wZW5DQ1NJRChpbnQzMl90IGNvZGVw
YWdlLAorICAgICAgICAgICAgICAgVUNvbnZlcnRlclBsYXRmb3JtIHBsYXRmb3JtLAorICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSAqIGVycik7CisKKy8qKgorICogPHA+Q3JlYXRlcyBhIFVDb252
ZXJ0ZXIgb2JqZWN0IHNwZWNpZmllZCBmcm9tIGEgcGFja2FnZU5hbWUgYW5kIGEgY29udmVydGVy
TmFtZS48L3A+CisgKiAKKyAqIDxwPlRoZSBwYWNrYWdlTmFtZSBhbmQgY29udmVydGVyTmFtZSBt
dXN0IHBvaW50IHRvIGFuIElDVSB1ZGF0YSBvYmplY3QsIGFzIGRlZmluZWQgYnkKKyAqICAgPGNv
ZGU+IHVkYXRhX29wZW4oIHBhY2thZ2VOYW1lLCAiY252IiwgY29udmVydGVyTmFtZSwgZXJyKSA8
L2NvZGU+IG9yIGVxdWl2YWxlbnQuCisgKiBUeXBpY2FsbHksIHBhY2thZ2VOYW1lIHdpbGwgcmVm
ZXIgdG8gYSAoLmRhdCkgZmlsZSwgb3IgdG8gYSBwYWNrYWdlIHJlZ2lzdGVyZWQgd2l0aAorICog
dWRhdGFfc2V0QXBwRGF0YSgpLjwvcD4KKyAqIAorICogPHA+VGhlIG5hbWUgd2lsbCBOT1QgYmUg
bG9va2VkIHVwIGluIHRoZSBhbGlhcyBtZWNoYW5pc20sIG5vciB3aWxsIHRoZSBjb252ZXJ0ZXIg
YmUKKyAqIHN0b3JlZCBpbiB0aGUgY29udmVydGVyIGNhY2hlIG9yIHRoZSBhbGlhcyB0YWJsZS4g
VGhlIG9ubHkgd2F5IHRvIG9wZW4gZnVydGhlciBjb252ZXJ0ZXJzCisgKiBpcyBjYWxsIHRoaXMg
ZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMsIG9yIHVzZSB0aGUgdWNudl9zYWZlQ2xvbmUoKSBmdW5j
dGlvbiB0byBjbG9uZSBhIAorICogJ21hc3RlcicgY29udmVydGVyLjwvcD4KKyAqCisgKiA8cD5B
IGZ1dHVyZSB2ZXJzaW9uIG9mIElDVSBtYXkgYWRkIGFsaWFzIHRhYmxlIGxvb2t1cHMgYW5kL29y
IGNhY2hpbmcKKyAqIHRvIHRoaXMgZnVuY3Rpb24uPC9wPgorICogCisgKiA8cD5FeGFtcGxlIFVz
ZToKKyAqICAgICAgPGNvZGU+Y252ID0gdWNudl9vcGVuUGFja2FnZSgibXlhcHAiLCAibXljb252
ZXJ0ZXIiLCAmZXJyKTs8L2NvZGU+CisgKiA8L3A+CisgKgorICogQHBhcmFtIHBhY2thZ2VOYW1l
IG5hbWUgb2YgdGhlIHBhY2thZ2UgKGVxdWl2YWxlbnQgdG8gJ3BhdGgnIGluIHVkYXRhX29wZW4o
KSBjYWxsKQorICogQHBhcmFtIGNvbnZlcnRlck5hbWUgbmFtZSBvZiB0aGUgZGF0YSBpdGVtIHRv
IGJlIHVzZWQsIHdpdGhvdXQgc3VmZml4LgorICogQHBhcmFtIGVyciBvdXRnb2luZyBlcnJvciBz
dGF0dXMgPFRUPlVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1IsIFVfRklMRV9BQ0NFU1NfRVJST1I8
L1RUPgorICogQHJldHVybiB0aGUgY3JlYXRlZCBVbmljb2RlIGNvbnZlcnRlciBvYmplY3QsIG9y
IDxUVD5OVUxMPC9UVD4gaWYgYW4gZXJyb3Igb2NjdXJlZAorICogQHNlZSB1ZGF0YV9vcGVuCisg
KiBAc2VlIHVjbnZfb3BlbgorICogQHNlZSB1Y252X3NhZmVDbG9uZQorICogQHNlZSB1Y252X2Ns
b3NlCisgKiBAc3RhYmxlIElDVSAyLjIKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlciogVV9FWFBP
UlQyIAordWNudl9vcGVuUGFja2FnZShjb25zdCBjaGFyICpwYWNrYWdlTmFtZSwgY29uc3QgY2hh
ciAqY29udmVydGVyTmFtZSwgVUVycm9yQ29kZSAqZXJyKTsKKworLyoqCisgKiBUaHJlYWQgc2Fm
ZSBjbG9uaW5nIG9wZXJhdGlvbgorICogQHBhcmFtIGNudiBjb252ZXJ0ZXIgdG8gYmUgY2xvbmVk
CisgKiBAcGFyYW0gc3RhY2tCdWZmZXIgdXNlciBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoZSBuZXcg
Y2xvbmUuIElmIE5VTEwgbmV3IG1lbW9yeSB3aWxsIGJlIGFsbG9jYXRlZC4gCisgKiAgSWYgYnVm
ZmVyIGlzIG5vdCBsYXJnZSBlbm91Z2gsIG5ldyBtZW1vcnkgd2lsbCBiZSBhbGxvY2F0ZWQuCisg
KiAgQ2xpZW50cyBjYW4gdXNlIHRoZSBVX0NOVl9TQUZFQ0xPTkVfQlVGRkVSU0laRS4gVGhpcyB3
aWxsIHByb2JhYmx5IGJlIGVub3VnaCB0byBhdm9pZCBtZW1vcnkgYWxsb2NhdGlvbnMuCisgKiBA
cGFyYW0gcEJ1ZmZlclNpemUgcG9pbnRlciB0byBzaXplIG9mIGFsbG9jYXRlZCBzcGFjZS4gCisg
KiAgSWYgKnBCdWZmZXJTaXplID09IDAsIGEgc3VmZmljaWVudCBzaXplIGZvciB1c2UgaW4gY2xv
bmluZyB3aWxsIAorICogIGJlIHJldHVybmVkICgncHJlLWZsaWdodGluZycpCisgKiAgSWYgKnBC
dWZmZXJTaXplIGlzIG5vdCBlbm91Z2ggZm9yIGEgc3RhY2stYmFzZWQgc2FmZSBjbG9uZSwgCisg
KiAgbmV3IG1lbW9yeSB3aWxsIGJlIGFsbG9jYXRlZC4KKyAqIEBwYXJhbSBzdGF0dXMgdG8gaW5k
aWNhdGUgd2hldGhlciB0aGUgb3BlcmF0aW9uIHdlbnQgb24gc21vb3RobHkgb3IgdGhlcmUgd2Vy
ZSBlcnJvcnMKKyAqICBBbiBpbmZvcm1hdGlvbmFsIHN0YXR1cyB2YWx1ZSwgVV9TQUZFQ0xPTkVf
QUxMT0NBVEVEX0VSUk9SLCBpcyB1c2VkIGlmIGFueSBhbGxvY2F0aW9ucyB3ZXJlIG5lY2Vzc2Fy
eS4KKyAqIEByZXR1cm4gcG9pbnRlciB0byB0aGUgbmV3IGNsb25lCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlciAqIFVfRVhQT1JUMiAKK3VjbnZfc2FmZUNsb25l
KGNvbnN0IFVDb252ZXJ0ZXIgKmNudiwgCisgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAg
ICpzdGFja0J1ZmZlciwKKyAgICAgICAgICAgICAgIGludDMyX3QgICAgICAgICAgKnBCdWZmZXJT
aXplLCAKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUgICAgICAgKnN0YXR1cyk7CisKKy8qKgor
ICogXGRlZiBVX0NOVl9TQUZFQ0xPTkVfQlVGRkVSU0laRQorICogRGVmaW5pdGlvbiBvZiBhIGJ1
ZmZlciBzaXplIHRoYXQgaXMgZGVzaWduZWQgdG8gYmUgbGFyZ2UgZW5vdWdoIGZvcgorICogY29u
dmVydGVycyB0byBiZSBjbG9uZWQgd2l0aCB1Y252X3NhZmVDbG9uZSgpLgorICogQHN0YWJsZSBJ
Q1UgMi4wCisgKi8KKyNkZWZpbmUgVV9DTlZfU0FGRUNMT05FX0JVRkZFUlNJWkUgIDEwMjQKKwor
LyoqCisgKiBEZWxldGVzIHRoZSB1bmljb2RlIGNvbnZlcnRlciBhbmQgcmVsZWFzZXMgcmVzb3Vy
Y2VzIGFzc29jaWF0ZWQKKyAqIHdpdGgganVzdCB0aGlzIGluc3RhbmNlLgorICogRG9lcyBub3Qg
ZnJlZSB1cCBzaGFyZWQgY29udmVydGVyIHRhYmxlcy4KKyAqCisgKiBAcGFyYW0gY29udmVydGVy
IHRoZSBjb252ZXJ0ZXIgb2JqZWN0IHRvIGJlIGRlbGV0ZWQKKyAqIEBzZWUgdWNudl9vcGVuCisg
KiBAc2VlIHVjbnZfb3BlblUKKyAqIEBzZWUgdWNudl9vcGVuQ0NTSUQKKyAqIEBzdGFibGUgSUNV
IDIuMAorICovCitVX1NUQUJMRSB2b2lkICBVX0VYUE9SVDIKK3VjbnZfY2xvc2UoVUNvbnZlcnRl
ciAqIGNvbnZlcnRlcik7CisKKy8qKgorICogRmlsbHMgaW4gdGhlIG91dHB1dCBwYXJhbWV0ZXIs
IHN1YkNoYXJzLCB3aXRoIHRoZSBzdWJzdGl0dXRpb24gY2hhcmFjdGVycworICogYXMgbXVsdGlw
bGUgYnl0ZXMuCisgKgorICogQHBhcmFtIGNvbnZlcnRlciB0aGUgVW5pY29kZSBjb252ZXJ0ZXIK
KyAqIEBwYXJhbSBzdWJDaGFycyB0aGUgc3Vic2l0dXRpb24gY2hhcmFjdGVycworICogQHBhcmFt
IGxlbiBvbiBpbnB1dCB0aGUgY2FwYWNpdHkgb2Ygc3ViQ2hhcnMsIG9uIG91dHB1dCB0aGUgbnVt
YmVyIAorICogb2YgYnl0ZXMgY29waWVkIHRvIGl0CisgKiBAcGFyYW0gIGVyciB0aGUgb3V0Z29p
bmcgZXJyb3Igc3RhdHVzIGNvZGUuCisgKiBJZiB0aGUgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciBh
cnJheSBpcyB0b28gc21hbGwsIGFuCisgKiA8VFQ+VV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUjwv
VFQ+IHdpbGwgYmUgcmV0dXJuZWQuCisgKiBAc2VlIHVjbnZfc2V0U3Vic3RDaGFycworICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y252X2dldFN1YnN0
Q2hhcnMoY29uc3QgVUNvbnZlcnRlciAqY29udmVydGVyLAorICAgICAgICAgICAgICAgICAgIGNo
YXIgKnN1YkNoYXJzLAorICAgICAgICAgICAgICAgICAgIGludDhfdCAqbGVuLAorICAgICAgICAg
ICAgICAgICAgIFVFcnJvckNvZGUgKmVycik7CisKKy8qKgorICogU2V0cyB0aGUgc3Vic3RpdHV0
aW9uIGNoYXJzIHdoZW4gY29udmVydGluZyBmcm9tIHVuaWNvZGUgdG8gYSBjb2RlcGFnZS4gVGhl
CisgKiBzdWJzdGl0dXRpb24gaXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIG9mIDEtNCBieXRlcywg
YW5kIG1heSBjb250YWluCisgKiAgPFRUPk5VTEw8L1RUPiBieXRlLgorICogQHBhcmFtIGNvbnZl
cnRlciB0aGUgVW5pY29kZSBjb252ZXJ0ZXIKKyAqIEBwYXJhbSBzdWJDaGFycyB0aGUgc3Vic3Rp
dHV0aW9uIGNoYXJhY3RlciBieXRlIHNlcXVlbmNlIHdlIHdhbnQgc2V0CisgKiBAcGFyYW0gbGVu
IHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gc3ViQ2hhcnMKKyAqIEBwYXJhbSBlcnIgdGhlIGVycm9y
IHN0YXR1cyBjb2RlLiAgPFRUPlVfSU5ERVhfT1VUT0ZCT1VORFNfRVJST1IgPC9UVD4gaWYKKyAq
IGxlbiBpcyBiaWdnZXIgdGhhbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgYWxsb3dlZCBp
biBzdWJjaGFycworICogQHNlZSB1Y252X2dldFN1YnN0Q2hhcnMKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWNudl9zZXRTdWJzdENoYXJzKFVDb252
ZXJ0ZXIgKmNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdWJDaGFy
cywKKyAgICAgICAgICAgICAgICAgICBpbnQ4X3QgbGVuLAorICAgICAgICAgICAgICAgICAgIFVF
cnJvckNvZGUgKmVycik7CisKKy8qKgorICogRmlsbHMgaW4gdGhlIG91dHB1dCBwYXJhbWV0ZXIs
IGVyckJ5dGVzLCB3aXRoIHRoZSBlcnJvciBjaGFyYWN0ZXJzIGZyb20gdGhlCisgKiBsYXN0IGZh
aWxpbmcgY29udmVyc2lvbi4KKyAqCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSBVbmljb2RlIGNv
bnZlcnRlcgorICogQHBhcmFtIGVyckJ5dGVzIHRoZSBjb2RlcGFnZSBieXRlcyB3aGljaCB3ZXJl
IGluIGVycm9yCisgKiBAcGFyYW0gbGVuIG9uIGlucHV0IHRoZSBjYXBhY2l0eSBvZiBlcnJCeXRl
cywgb24gb3V0cHV0IHRoZSBudW1iZXIgb2YKKyAqICBieXRlcyB3aGljaCB3ZXJlIGNvcGllZCB0
byBpdAorICogQHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVzIGNvZGUuCisgKiBJZiB0aGUgc3Vi
c3RpdHV0aW9uIGNoYXJhY3RlciBhcnJheSBpcyB0b28gc21hbGwsIGFuCisgKiA8VFQ+VV9JTkRF
WF9PVVRPRkJPVU5EU19FUlJPUjwvVFQ+IHdpbGwgYmUgcmV0dXJuZWQuCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfZ2V0SW52YWxpZENoYXJz
KGNvbnN0IFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KmVyckJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgaW50OF90ICpsZW4sCisgICAgICAgICAg
ICAgICAgICAgICBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIEZpbGxzIGluIHRoZSBvdXRw
dXQgcGFyYW1ldGVyLCBlcnJDaGFycywgd2l0aCB0aGUgZXJyb3IgY2hhcmFjdGVycyBmcm9tIHRo
ZQorICogbGFzdCBmYWlsaW5nIGNvbnZlcnNpb24uCisgKgorICogQHBhcmFtIGNvbnZlcnRlciB0
aGUgVW5pY29kZSBjb252ZXJ0ZXIKKyAqIEBwYXJhbSBlcnJVQ2hhcnMgdGhlIFVDaGFycyB3aGlj
aCB3ZXJlIGluIGVycm9yCisgKiBAcGFyYW0gbGVuIG9uIGlucHV0IHRoZSBjYXBhY2l0eSBvZiBl
cnJVQ2hhcnMsIG9uIG91dHB1dCB0aGUgbnVtYmVyIG9mIAorICogIFVDaGFycyB3aGljaCB3ZXJl
IGNvcGllZCB0byBpdAorICogQHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVzIGNvZGUuCisgKiBJ
ZiB0aGUgc3Vic3RpdHV0aW9uIGNoYXJhY3RlciBhcnJheSBpcyB0b28gc21hbGwsIGFuCisgKiA8
VFQ+VV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUjwvVFQ+IHdpbGwgYmUgcmV0dXJuZWQuCisgKiBA
c3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfZ2V0SW52
YWxpZFVDaGFycyhjb25zdCBVQ29udmVydGVyICpjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgVUNoYXIgKmVyclVDaGFycywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQ4X3QgKmxl
biwKKyAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIFJl
c2V0cyB0aGUgc3RhdGUgb2YgYSBjb252ZXJ0ZXIgdG8gdGhlIGRlZmF1bHQgc3RhdGUuIFRoaXMg
aXMgdXNlZAorICogaW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IsIHRvIHJlc3RhcnQgYSBjb252ZXJz
aW9uIGZyb20gYSBrbm93biBkZWZhdWx0IHN0YXRlLgorICogSXQgd2lsbCBhbHNvIGVtcHR5IHRo
ZSBpbnRlcm5hbCBvdXRwdXQgYnVmZmVycy4KKyAqIEBwYXJhbSBjb252ZXJ0ZXIgdGhlIFVuaWNv
ZGUgY29udmVydGVyCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VY
UE9SVDIKK3VjbnZfcmVzZXQoVUNvbnZlcnRlciAqY29udmVydGVyKTsKKworLyoqCisgKiBSZXNl
dHMgdGhlIHRvLVVuaWNvZGUgcGFydCBvZiBhIGNvbnZlcnRlciBzdGF0ZSB0byB0aGUgZGVmYXVs
dCBzdGF0ZS4KKyAqIFRoaXMgaXMgdXNlZCBpbiB0aGUgY2FzZSBvZiBhbiBlcnJvciB0byByZXN0
YXJ0IGEgY29udmVyc2lvbiB0bworICogVW5pY29kZSB0byBhIGtub3duIGRlZmF1bHQgc3RhdGUu
IEl0IHdpbGwgYWxzbyBlbXB0eSB0aGUgaW50ZXJuYWwKKyAqIG91dHB1dCBidWZmZXJzIHVzZWQg
Zm9yIHRoZSBjb252ZXJzaW9uIHRvIFVuaWNvZGUgY29kZXBvaW50cy4KKyAqIEBwYXJhbSBjb252
ZXJ0ZXIgdGhlIFVuaWNvZGUgY29udmVydGVyCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9T
VEFCTEUgdm9pZCBVX0VYUE9SVDIgCit1Y252X3Jlc2V0VG9Vbmljb2RlKFVDb252ZXJ0ZXIgKmNv
bnZlcnRlcik7CisKKy8qKgorICogUmVzZXRzIHRoZSBmcm9tLVVuaWNvZGUgcGFydCBvZiBhIGNv
bnZlcnRlciBzdGF0ZSB0byB0aGUgZGVmYXVsdCBzdGF0ZS4KKyAqIFRoaXMgaXMgdXNlZCBpbiB0
aGUgY2FzZSBvZiBhbiBlcnJvciB0byByZXN0YXJ0IGEgY29udmVyc2lvbiBmcm9tCisgKiBVbmlj
b2RlIHRvIGEga25vd24gZGVmYXVsdCBzdGF0ZS4gSXQgd2lsbCBhbHNvIGVtcHR5IHRoZSBpbnRl
cm5hbCBvdXRwdXQKKyAqIGJ1ZmZlcnMgdXNlZCBmb3IgdGhlIGNvbnZlcnNpb24gZnJvbSBVbmlj
b2RlIGNvZGVwb2ludHMuCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSBVbmljb2RlIGNvbnZlcnRl
cgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNu
dl9yZXNldEZyb21Vbmljb2RlKFVDb252ZXJ0ZXIgKmNvbnZlcnRlcik7CisKKy8qKgorICogUmV0
dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgb3V0cHV0IHBlciBVQ2hh
ciBpbiBjb252ZXJzaW9uCisgKiBmcm9tIFVuaWNvZGUgdXNpbmcgdGhpcyBjb252ZXJ0ZXIuCisg
KiBUaGUgcmV0dXJuZWQgbnVtYmVyIGNhbiBiZSB1c2VkIHdpdGggVUNOVl9HRVRfTUFYX0JZVEVT
X0ZPUl9TVFJJTkcKKyAqIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIHRhcmdldCBidWZmZXIg
Zm9yIGNvbnZlcnNpb24gZnJvbSBVbmljb2RlLgorICoKKyAqIE5vdGU6IEJlZm9yZSBJQ1UgMi44
LCB0aGlzIGZ1bmN0aW9uIGRpZCBub3QgcmV0dXJuIHJlbGlhYmxlIG51bWJlcnMgZm9yCisgKiBz
b21lIHN0YXRlZnVsIGNvbnZlcnRlcnMgKEVCQ0RJQ19TVEFURUZVTCwgSVNPLTIwMjIpIGFuZCBM
TUJDUy4KKyAqCisgKiBUaGlzIG51bWJlciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBtYXhp
bXVtIG51bWJlciBvZiBieXRlcyBwZXIKKyAqICJjb252ZXJzaW9uIHVuaXQiLiBJbiBvdGhlciB3
b3JkcywgaXQgbWF5IG5vdCBiZSB0aGUgaW50dWl0aXZlbHkgZXhwZWN0ZWQKKyAqIG51bWJlciBv
ZiBieXRlcyBwZXIgY2hhcmFjdGVyIHRoYXQgd291bGQgYmUgcHVibGlzaGVkIGZvciBhIGNoYXJz
ZXQsCisgKiBhbmQgbWF5IG5vdCBmdWxmaWxsIGFueSBvdGhlciBwdXJwb3NlIHRoYW4gdGhlIGFs
bG9jYXRpb24gb2YgYW4gb3V0cHV0CisgKiBidWZmZXIgb2YgZ3VhcmFudGVlZCBzdWZmaWNpZW50
IHNpemUgZm9yIGEgZ2l2ZW4gaW5wdXQgbGVuZ3RoIGFuZCBjb252ZXJ0ZXIuCisgKgorICogRXhh
bXBsZXMgZm9yIHNwZWNpYWwgY2FzZXMgdGhhdCBhcmUgdGFrZW4gaW50byBhY2NvdW50OgorICog
LSBTdXBwbGVtZW50YXJ5IGNvZGUgcG9pbnRzIG1heSBjb252ZXJ0IHRvIG1vcmUgYnl0ZXMgdGhh
biBCTVAgY29kZSBwb2ludHMuCisgKiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBieXRlcyBwZXIg
VUNoYXIgKFVURi0xNiBjb2RlIHVuaXQpLCBub3QgcGVyCisgKiAgIFVuaWNvZGUgY29kZSBwb2lu
dCwgZm9yIGVmZmljaWVudCBidWZmZXIgYWxsb2NhdGlvbi4KKyAqIC0gU3RhdGUtc2hpZnRpbmcg
b3V0cHV0IChTSS9TTywgZXNjYXBlcywgZXRjLikgZnJvbSBzdGF0ZWZ1bCBjb252ZXJ0ZXJzLgor
ICogLSBXaGVuIG0gaW5wdXQgVUNoYXJzIGFyZSBjb252ZXJ0ZWQgdG8gbiBvdXRwdXQgYnl0ZXMs
IHRoZW4gdGhlIG1heGltdW0gbS9uCisgKiAgIGlzIHRha2VuIGludG8gYWNjb3VudC4KKyAqCisg
KiBUaGUgbnVtYmVyIHJldHVybmVkIGhlcmUgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQKKyAq
IChzZWUgVUNOVl9HRVRfTUFYX0JZVEVTX0ZPUl9TVFJJTkcpOgorICogLSBjYWxsYmFja3Mgd2hp
Y2ggb3V0cHV0IG1vcmUgdGhhbiBvbmUgY2hhcnNldCBjaGFyYWN0ZXIgc2VxdWVuY2UgcGVyIGNh
bGwsCisgKiAgIGxpa2UgZXNjYXBlIGNhbGxiYWNrcworICogLSBpbml0aWFsIGFuZCBmaW5hbCBu
b24tY2hhcmFjdGVyIGJ5dGVzIHRoYXQgYXJlIG91dHB1dCBieSBzb21lIGNvbnZlcnRlcnMKKyAq
ICAgKGF1dG9tYXRpYyBCT01zLCBpbml0aWFsIGVzY2FwZSBzZXF1ZW5jZSwgZmluYWwgU0ksIGV0
Yy4pCisgKgorICogRXhhbXBsZXMgZm9yIHJldHVybmVkIHZhbHVlczoKKyAqIC0gU0JDUyBjaGFy
c2V0czogMQorICogLSBTaGlmdC1KSVM6IDIKKyAqIC0gVVRGLTE2OiAyICgyIHBlciBCTVAsIDQg
cGVyIHN1cnJvZ2F0ZSBfcGFpcl8sIEJPTSBub3QgY291bnRlZCkKKyAqIC0gVVRGLTg6IDMgKDMg
cGVyIEJNUCwgNCBwZXIgc3Vycm9nYXRlIF9wYWlyXykKKyAqIC0gRUJDRElDX1NUQVRFRlVMIChF
QkNESUMgbWl4ZWQgU0JDUy9EQkNTKTogMyAoU08gKyBEQkNTKQorICogLSBJU08tMjAyMjogMyAo
YWx3YXlzIG91dHB1dHMgVVRGLTgpCisgKiAtIElTTy0yMDIyLUpQOiA2ICg0LWJ5dGUgZXNjYXBl
IHNlcXVlbmNlcyArIERCQ1MpCisgKiAtIElTTy0yMDIyLUNOOiA4ICg0LWJ5dGUgZGVzaWduYXRv
ciBzZXF1ZW5jZXMgKyAyLWJ5dGUgU1MyL1NTMyArIERCQ1MpCisgKgorICogQHBhcmFtIGNvbnZl
cnRlciBUaGUgVW5pY29kZSBjb252ZXJ0ZXIuCisgKiBAcmV0dXJuIFRoZSBtYXhpbXVtIG51bWJl
ciBvZiBieXRlcyBwZXIgVUNoYXIgdGhhdCBhcmUgb3V0cHV0IGJ5IHVjbnZfZnJvbVVuaWNvZGUo
KSwKKyAqICAgICAgICAgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIFVDTlZfR0VUX01BWF9CWVRF
U19GT1JfU1RSSU5HIGZvciBidWZmZXIgYWxsb2NhdGlvbi4KKyAqCisgKiBAc2VlIFVDTlZfR0VU
X01BWF9CWVRFU19GT1JfU1RSSU5HCisgKiBAc2VlIHVjbnZfZ2V0TWluQ2hhclNpemUKKyAqIEBz
dGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQ4X3QgVV9FWFBPUlQyCit1Y252X2dldE1h
eENoYXJTaXplKGNvbnN0IFVDb252ZXJ0ZXIgKmNvbnZlcnRlcik7CisKKyNpZm5kZWYgVV9ISURF
X0RSQUZUX0FQSQorCisvKioKKyAqIENhbGN1bGF0ZXMgdGhlIHNpemUgb2YgYSBidWZmZXIgZm9y
IGNvbnZlcnNpb24gZnJvbSBVbmljb2RlIHRvIGEgY2hhcnNldC4KKyAqIFRoZSBjYWxjdWxhdGVk
IHNpemUgaXMgZ3VhcmFudGVlZCB0byBiZSBzdWZmaWNpZW50IGZvciB0aGlzIGNvbnZlcnNpb24u
CisgKgorICogSXQgdGFrZXMgaW50byBhY2NvdW50IGluaXRpYWwgYW5kIGZpbmFsIG5vbi1jaGFy
YWN0ZXIgYnl0ZXMgdGhhdCBhcmUgb3V0cHV0CisgKiBieSBzb21lIGNvbnZlcnRlcnMuCisgKiBJ
dCBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCBjYWxsYmFja3Mgd2hpY2ggb3V0cHV0IG1vcmUg
dGhhbiBvbmUgY2hhcnNldAorICogY2hhcmFjdGVyIHNlcXVlbmNlIHBlciBjYWxsLCBsaWtlIGVz
Y2FwZSBjYWxsYmFja3MuCisgKiBUaGUgZGVmYXVsdCAoc3Vic3RpdHV0aW9uKSBjYWxsYmFjayBv
bmx5IG91dHB1dHMgb25lIGNoYXJzZXQgY2hhcmFjdGVyIHNlcXVlbmNlLgorICoKKyAqIEBwYXJh
bSBsZW5ndGggTnVtYmVyIG9mIFVDaGFycyB0byBiZSBjb252ZXJ0ZWQuCisgKiBAcGFyYW0gbWF4
Q2hhclNpemUgUmV0dXJuIHZhbHVlIGZyb20gdWNudl9nZXRNYXhDaGFyU2l6ZSgpIGZvciB0aGUg
Y29udmVydGVyCisgKiAgICAgICAgICAgICAgICAgICAgdGhhdCB3aWxsIGJlIHVzZWQuCisgKiBA
cmV0dXJuIFNpemUgb2YgYSBidWZmZXIgdGhhdCB3aWxsIGJlIGxhcmdlIGVub3VnaCB0byBob2xk
IHRoZSBvdXRwdXQgYnl0ZXMgb2YKKyAqICAgICAgICAgY29udmVydGluZyBsZW5ndGggVUNoYXJz
IHdpdGggdGhlIGNvbnZlcnRlciB0aGF0IHJldHVybmVkIHRoZSBtYXhDaGFyU2l6ZS4KKyAqCisg
KiBAc2VlIHVjbnZfZ2V0TWF4Q2hhclNpemUKKyAqIEBkcmFmdCBJQ1UgMi44CisgKi8KKyNkZWZp
bmUgVUNOVl9HRVRfTUFYX0JZVEVTX0ZPUl9TVFJJTkcobGVuZ3RoLCBtYXhDaGFyU2l6ZSkgXAor
ICAgICAoKChpbnQzMl90KShsZW5ndGgpKzEwKSooaW50MzJfdCkobWF4Q2hhclNpemUpKQorCisj
ZW5kaWYgLypVX0hJREVfRFJBRlRfQVBJKi8KKworLyoqCisgKiBSZXR1cm5zIHRoZSBtaW5pbXVt
IGJ5dGUgbGVuZ3RoIGZvciBjaGFyYWN0ZXJzIGluIHRoaXMgY29kZXBhZ2UuIAorICogVGhpcyBp
cyB1c3VhbGx5IGVpdGhlciAxIG9yIDIuCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSBVbmljb2Rl
IGNvbnZlcnRlcgorICogQHJldHVybiB0aGUgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgYWxsb3dl
ZCBieSB0aGlzIHBhcnRpY3VsYXIgY29udmVydGVyCisgKiBAc2VlIHVjbnZfZ2V0TWF4Q2hhclNp
emUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQ4X3QgVV9FWFBPUlQyCit1
Y252X2dldE1pbkNoYXJTaXplKGNvbnN0IFVDb252ZXJ0ZXIgKmNvbnZlcnRlcik7CisKKy8qKgor
ICogUmV0dXJucyB0aGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb252ZXJ0ZXIgcGFzc2VkIGluIGJh
c2VkIG9uIHRoZSBMb2NhbGUgCisgKiBwYXNzZWQgaW4uIElmIHRoZSBsb2NhbGUgY29udGFpbnMg
bm8gZGlzcGxheSBuYW1lLCB0aGUgaW50ZXJuYWwgQVNDSUkKKyAqIG5hbWUgd2lsbCBiZSBmaWxs
ZWQgaW4uCisgKgorICogQHBhcmFtIGNvbnZlcnRlciB0aGUgVW5pY29kZSBjb252ZXJ0ZXIuCisg
KiBAcGFyYW0gZGlzcGxheUxvY2FsZSBpcyB0aGUgc3BlY2lmaWMgTG9jYWxlIHdlIHdhbnQgdG8g
bG9jYWxpc2VkIGZvcgorICogQHBhcmFtIGRpc3BsYXlOYW1lIHVzZXIgcHJvdmlkZWQgYnVmZmVy
IHRvIGJlIGZpbGxlZCBpbgorICogQHBhcmFtIGRpc3BsYXlOYW1lQ2FwYWNpdHkgc2l6ZSBvZiBk
aXNwbGF5TmFtZSBCdWZmZXIKKyAqIEBwYXJhbSBlcnIgZXJyb3Igc3RhdHVzIGNvZGUKKyAqIEBy
ZXR1cm4gZGlzcGxheU5hbWVMZW5ndGggbnVtYmVyIG9mIFVDaGFyIG5lZWRlZCBpbiBkaXNwbGF5
TmFtZQorICogQHNlZSB1Y252X2dldE5hbWUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NU
QUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNudl9nZXREaXNwbGF5TmFtZShjb25zdCBVQ29udmVy
dGVyICpjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpc3BsYXlM
b2NhbGUsCisgICAgICAgICAgICAgICAgICAgIFVDaGFyICpkaXNwbGF5TmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCBkaXNwbGF5TmFtZUNhcGFjaXR5LAorICAgICAgICAgICAgICAg
ICAgICBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIEdldHMgdGhlIGludGVybmFsLCBjYW5v
bmljYWwgbmFtZSBvZiB0aGUgY29udmVydGVyICh6ZXJvLXRlcm1pbmF0ZWQpLgorICogVGhlIGxp
ZmV0aW1lIG9mIHRoZSByZXR1cm5lZCBzdHJpbmcgd2lsbCBiZSB0aGF0IG9mIHRoZSBjb252ZXJ0
ZXIgCisgKiBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbi4KKyAqIEBwYXJhbSBjb252ZXJ0ZXIgdGhl
IFVuaWNvZGUgY29udmVydGVyCisgKiBAcGFyYW0gZXJyIFVFcnJvckNvZGUgc3RhdHVzCisgKiBA
cmV0dXJuIHRoZSBpbnRlcm5hbCBuYW1lIG9mIHRoZSBjb252ZXJ0ZXIKKyAqIEBzZWUgdWNudl9n
ZXREaXNwbGF5TmFtZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNo
YXIgKiBVX0VYUE9SVDIgCit1Y252X2dldE5hbWUoY29uc3QgVUNvbnZlcnRlciAqY29udmVydGVy
LCBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIEdldHMgYSBjb2RlcGFnZSBudW1iZXIgYXNz
b2NpYXRlZCB3aXRoIHRoZSBjb252ZXJ0ZXIuIFRoaXMgaXMgbm90IGd1YXJhbnRlZWQKKyAqIHRv
IGJlIHRoZSBvbmUgdXNlZCB0byBjcmVhdGUgdGhlIGNvbnZlcnRlci4gU29tZSBjb252ZXJ0ZXJz
IGRvIG5vdCByZXByZXNlbnQKKyAqIHBsYXRmb3JtIHJlZ2lzdGVyZWQgY29kZXBhZ2VzIGFuZCBy
ZXR1cm4gemVybyBmb3IgdGhlIGNvZGVwYWdlIG51bWJlci4KKyAqIFRoZSBlcnJvciBjb2RlIGZp
bGwtaW4gcGFyYW1ldGVyIGluZGljYXRlcyBpZiB0aGUgY29kZXBhZ2UgbnVtYmVyCisgKiBpcyBh
dmFpbGFibGUuCisgKiBEb2VzIG5vdCBjaGVjayBpZiB0aGUgY29udmVydGVyIGlzIDxUVD5OVUxM
PC9UVD4gb3IgaWYgY29udmVydGVyJ3MgZGF0YQorICogdGFibGUgaXMgPFRUPk5VTEw8L1RUPi4K
KyAqCisgKiBJbXBvcnRhbnQ6IFRoZSB1c2Ugb2YgQ0NTSURzIGlzIG5vdCByZWNvbW1lbmRlZCBi
ZWNhdXNlIGl0IGlzIGxpbWl0ZWQKKyAqIHRvIG9ubHkgdHdvIHBsYXRmb3JtcyBpbiBwcmluY2lw
bGUgYW5kIG9ubHkgb25lIChVQ05WX0lCTSkgaW4gdGhlIGN1cnJlbnQKKyAqIElDVSBjb252ZXJ0
ZXIgQVBJLgorICogQWxzbywgQ0NTSURzIGFyZSBpbnN1ZmZpY2llbnQgdG8gaWRlbnRpZnkgSUJN
IFVuaWNvZGUgY29udmVyc2lvbiB0YWJsZXMgcHJlY2lzZWx5LgorICogRm9yIG1vcmUgZGV0YWls
cyBzZWUgdWNudl9vcGVuQ0NTSUQoKS4KKyAqCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSBVbmlj
b2RlIGNvbnZlcnRlcgorICogQHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVzIGNvZGUuCisgKiBA
cmV0dXJuIElmIGFueSBlcnJvciBvY2N1cnJzLCAtMSB3aWxsIGJlIHJldHVybmVkIG90aGVyd2lz
ZSwgdGhlIGNvZGVwYWdlIG51bWJlcgorICogd2lsbCBiZSByZXR1cm5lZAorICogQHNlZSB1Y252
X29wZW5DQ1NJRAorICogQHNlZSB1Y252X2dldFBsYXRmb3JtCisgKiBAc3RhYmxlIElDVSAyLjAK
KyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjbnZfZ2V0Q0NTSUQoY29uc3QgVUNv
bnZlcnRlciAqY29udmVydGVyLAorICAgICAgICAgICAgICBVRXJyb3JDb2RlICplcnIpOworCisv
KioKKyAqIEdldHMgYSBjb2RlcGFnZSBwbGF0Zm9ybSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnZl
cnRlci4gQ3VycmVudGx5LCAKKyAqIG9ubHkgPFRUPlVDTlZfSUJNPC9UVD4gd2lsbCBiZSByZXR1
cm5lZC4KKyAqIERvZXMgbm90IHRlc3QgaWYgdGhlIGNvbnZlcnRlciBpcyA8VFQ+TlVMTDwvVFQ+
IG9yIGlmIGNvbnZlcnRlcidzIGRhdGEgCisgKiB0YWJsZSBpcyA8VFQ+TlVMTDwvVFQ+LiAKKyAq
IEBwYXJhbSBjb252ZXJ0ZXIgdGhlIFVuaWNvZGUgY29udmVydGVyCisgKiBAcGFyYW0gZXJyIHRo
ZSBlcnJvciBzdGF0dXMgY29kZS4KKyAqIEByZXR1cm4gVGhlIGNvZGVwYWdlIHBsYXRmb3JtCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVUNvbnZlcnRlclBsYXRmb3JtIFVfRVhQ
T1JUMgordWNudl9nZXRQbGF0Zm9ybShjb25zdCBVQ29udmVydGVyICpjb252ZXJ0ZXIsCisgICAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUgKmVycik7CisKKy8qKgorICogR2V0cyB0aGUgdHlwZSBv
ZiB0aGUgY29udmVydGVyCisgKiBlLmcuIFNCQ1MsIE1CQ1MsIERCQ1MsIFVURjgsIFVURjE2X0JF
LCBVVEYxNl9MRSwgSVNPXzIwMjIsIAorICogRUJDRElDX1NUQVRFRlVMLCBMQVRJTl8xCisgKiBA
cGFyYW0gY29udmVydGVyIGEgdmFsaWQsIG9wZW5lZCBjb252ZXJ0ZXIKKyAqIEByZXR1cm4gdGhl
IHR5cGUgb2YgdGhlIGNvbnZlcnRlcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IFVDb252ZXJ0ZXJUeXBlIFVfRVhQT1JUMgordWNudl9nZXRUeXBlKGNvbnN0IFVDb252ZXJ0ZXIg
KiBjb252ZXJ0ZXIpOworCisvKioKKyAqIEdldHMgdGhlICJzdGFydGVyIiAobGVhZCkgYnl0ZXMg
Zm9yIGNvbnZlcnRlcnMgb2YgdHlwZSBNQkNTLgorICogV2lsbCBmaWxsIGluIGFuIDxUVD5VX0lM
TEVHQUxfQVJHVU1FTlRfRVJST1I8L1RUPiBpZiBjb252ZXJ0ZXIgcGFzc2VkIGluCisgKiBpcyBu
b3QgTUJDUy4gRmlsbHMgaW4gYW4gYXJyYXkgb2YgdHlwZSBVQm9vbCwgd2l0aCB0aGUgdmFsdWUg
b2YgdGhlIGJ5dGUgCisgKiBhcyBvZmZzZXQgdG8gdGhlIGFycmF5LiBGb3IgZXhhbXBsZSwgaWYg
KHN0YXJ0ZXJzWzB4MjBdID09IFRSVUUpIGF0IHJldHVybiwKKyAqIGl0IG1lYW5zIHRoYXQgdGhl
IGJ5dGUgMHgyMCBpcyBhIHN0YXJ0ZXIgYnl0ZSBpbiB0aGlzIGNvbnZlcnRlci4KKyAqIENvbnRl
eHQgcG9pbnRlcnMgYXJlIGFsd2F5cyBvd25lZCBieSB0aGUgY2FsbGVyLgorICogCisgKiBAcGFy
YW0gY29udmVydGVyIGEgdmFsaWQsIG9wZW5lZCBjb252ZXJ0ZXIgb2YgdHlwZSBNQkNTCisgKiBA
cGFyYW0gc3RhcnRlcnMgYW4gYXJyYXkgb2Ygc2l6ZSAyNTYgdG8gYmUgZmlsbGVkIGluCisgKiBA
cGFyYW0gZXJyIGVycm9yIHN0YXR1cywgPFRUPlVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjwvVFQ+
IGlmIHRoZSAKKyAqIGNvbnZlcnRlciBpcyBub3QgYSB0eXBlIHdoaWNoIGNhbiByZXR1cm4gc3Rh
cnRlcnMuCisgKiBAc2VlIHVjbnZfZ2V0VHlwZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y252X2dldFN0YXJ0ZXJzKGNvbnN0IFVDb252ZXJ0ZXIq
IGNvbnZlcnRlciwgCisgICAgICAgICAgICAgICAgIFVCb29sIHN0YXJ0ZXJzWzI1Nl0sCisgICAg
ICAgICAgICAgICAgIFVFcnJvckNvZGUqIGVycik7CisKKworLyoqCisgKiBTZWxlY3RvcnMgZm9y
IFVuaWNvZGUgc2V0cyB0aGF0IGNhbiBiZSByZXR1cm5lZCBieSB1Y252X2dldFVuaWNvZGVTZXQo
KS4KKyAqIEBzZWUgdWNudl9nZXRVbmljb2RlU2V0CisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLwor
dHlwZWRlZiBlbnVtIFVDb252ZXJ0ZXJVbmljb2RlU2V0IHsKKyAgICAvKiogU2VsZWN0IHRoZSBz
ZXQgb2Ygcm91bmR0cmlwcGFibGUgVW5pY29kZSBjb2RlIHBvaW50cy4gQHN0YWJsZSBJQ1UgMi42
ICovCisgICAgVUNOVl9ST1VORFRSSVBfU0VULAorICAgIC8qKiBOdW1iZXIgb2YgVUNvbnZlcnRl
clVuaWNvZGVTZXQgc2VsZWN0b3JzLiBAc3RhYmxlIElDVSAyLjYgKi8KKyAgICBVQ05WX1NFVF9D
T1VOVAorfSBVQ29udmVydGVyVW5pY29kZVNldDsKKworCisvKioKKyAqIFJldHVybnMgdGhlIHNl
dCBvZiBVbmljb2RlIGNvZGUgcG9pbnRzIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCBieSBhbiBJQ1Ug
Y29udmVydGVyLgorICoKKyAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHJldHVybnMgb25s
eSBvbmUga2luZCBvZiBzZXQgKFVDTlZfUk9VTkRUUklQX1NFVCk6CisgKiBUaGUgc2V0IG9mIGFs
bCBVbmljb2RlIGNvZGUgcG9pbnRzIHRoYXQgY2FuIGJlIHJvdW5kdHJpcC1jb252ZXJ0ZWQKKyAq
IChjb252ZXJ0ZWQgd2l0aG91dCBhbnkgZGF0YSBsb3NzKSB3aXRoIHRoZSBjb252ZXJ0ZXIuCisg
KiBUaGlzIHNldCB3aWxsIG5vdCBpbmNsdWRlIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBmYWxsYmFj
ayBtYXBwaW5ncworICogb3IgYXJlIG9ubHkgdGhlIHJlc3VsdCBvZiByZXZlcnNlIGZhbGxiYWNr
IG1hcHBpbmdzLgorICogU2VlIFVUUiAjMjIgIkNoYXJhY3RlciBNYXBwaW5nIE1hcmt1cCBMYW5n
dWFnZSIKKyAqIGF0IGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjIyLworICoKKyAq
IFRoaXMgaXMgdXNlZnVsIGZvciBleGFtcGxlIGZvcgorICogLSBjaGVja2luZyB0aGF0IGEgc3Ry
aW5nIG9yIGRvY3VtZW50IGNhbiBiZSByb3VuZHRyaXAtY29udmVydGVkIHdpdGggYSBjb252ZXJ0
ZXIsCisgKiAgIHdpdGhvdXQvYmVmb3JlIGFjdHVhbGx5IHBlcmZvcm1pbmcgdGhlIGNvbnZlcnNp
b24KKyAqIC0gdGVzdGluZyBpZiBhIGNvbnZlcnRlciBjYW4gYmUgdXNlZCBmb3IgdGV4dCBmb3Ig
dHlwaWNhbCB0ZXh0IGZvciBhIGNlcnRhaW4gbG9jYWxlLAorICogICBieSBjb21wYXJpbmcgaXRz
IHJvdW5kdHJpcCBzZXQgd2l0aCB0aGUgc2V0IG9mIEV4ZW1wbGFyQ2hhcmFjdGVycyBmcm9tCisg
KiAgIElDVSdzIGxvY2FsZSBkYXRhIG9yIG90aGVyIHNvdXJjZXMKKyAqCisgKiBJbiB0aGUgZnV0
dXJlLCB0aGVyZSBtYXkgYmUgbW9yZSBVQ29udmVydGVyVW5pY29kZVNldCBjaG9pY2VzIHRvIHNl
bGVjdAorICogc2V0cyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLgorICoKKyAqIEBwYXJhbSBj
bnYgVGhlIGNvbnZlcnRlciBmb3Igd2hpY2ggYSBzZXQgaXMgcmVxdWVzdGVkLgorICogQHBhcmFt
IHNldEZpbGxJbiBBIHZhbGlkIFVTZXQgKi4gSXQgd2lsbCBiZSBjbGVhcmVkIGJ5IHRoaXMgZnVu
Y3Rpb24gYmVmb3JlCisgKiAgICAgICAgICAgIHRoZSBjb252ZXJ0ZXIncyBzcGVjaWZpYyBzZXQg
aXMgZmlsbGVkIGludG8gdGhlIFVTZXQuCisgKiBAcGFyYW0gd2hpY2hTZXQgQSBVQ29udmVydGVy
VW5pY29kZVNldCBzZWxlY3RvcjsKKyAqICAgICAgICAgICAgICBjdXJyZW50bHkgVUNOVl9ST1VO
RFRSSVBfU0VUIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCB2YWx1ZS4KKyAqIEBwYXJhbSBwRXJyb3JD
b2RlIElDVSBlcnJvciBjb2RlIGluL291dCBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAgICAgICAg
ICBNdXN0IGZ1bGZpbGwgVV9TVUNDRVNTIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KKyAqCisg
KiBAc2VlIFVDb252ZXJ0ZXJVbmljb2RlU2V0CisgKiBAc2VlIHVzZXRfb3BlbgorICogQHNlZSB1
c2V0X2Nsb3NlCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9S
VDIKK3VjbnZfZ2V0VW5pY29kZVNldChjb25zdCBVQ29udmVydGVyICpjbnYsCisgICAgICAgICAg
ICAgICAgICAgVVNldCAqc2V0RmlsbEluLAorICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJV
bmljb2RlU2V0IHdoaWNoU2V0LAorICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJv
ckNvZGUpOworCisvKioKKyAqIEdldHMgdGhlIGN1cnJlbnQgY2FsYmFjayBmdW5jdGlvbiB1c2Vk
IGJ5IHRoZSBjb252ZXJ0ZXIgd2hlbiBhbiBpbGxlZ2FsCisgKiAgb3IgaW52YWxpZCBjb2RlcGFn
ZSBzZXF1ZW5jZSBpcyBmb3VuZC4gCisgKiBDb250ZXh0IHBvaW50ZXJzIGFyZSBhbHdheXMgb3du
ZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSB1bmljb2RlIGNv
bnZlcnRlcgorICogQHBhcmFtIGFjdGlvbiBmaWxsaW46IHJldHVybnMgdGhlIGNhbGxiYWNrIGZ1
bmN0aW9uIHBvaW50ZXIKKyAqIEBwYXJhbSBjb250ZXh0IGZpbGxpbjogcmV0dXJucyB0aGUgY2Fs
bGJhY2sncyBwcml2YXRlIHZvaWQqIGNvbnRleHQKKyAqIEBzZWUgdWNudl9zZXRUb1VDYWxsQmFj
aworICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyCit1Y252
X2dldFRvVUNhbGxCYWNrIChjb25zdCBVQ29udmVydGVyICogY29udmVydGVyLAorICAgICAgICAg
ICAgICAgICAgICAgVUNvbnZlcnRlclRvVUNhbGxiYWNrICphY3Rpb24sCisgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICoqY29udGV4dCk7CisKKy8qKgorICogR2V0cyB0aGUgY3VycmVu
dCBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBjb252ZXJ0ZXIgd2hlbiBpbGxlZ2FsIAor
ICogb3IgaW52YWxpZCBVbmljb2RlIHNlcXVlbmNlIGlzIGZvdW5kLgorICogQ29udGV4dCBwb2lu
dGVycyBhcmUgYWx3YXlzIG93bmVkIGJ5IHRoZSBjYWxsZXIuCisgKgorICogQHBhcmFtIGNvbnZl
cnRlciB0aGUgdW5pY29kZSBjb252ZXJ0ZXIKKyAqIEBwYXJhbSBhY3Rpb24gZmlsbGluOiByZXR1
cm5zIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyCisgKiBAcGFyYW0gY29udGV4dCBmaWxs
aW46IHJldHVybnMgdGhlIGNhbGxiYWNrJ3MgcHJpdmF0ZSB2b2lkKiBjb250ZXh0CisgKiBAc2Vl
IHVjbnZfc2V0RnJvbVVDYWxsQmFjaworICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IHZvaWQgVV9FWFBPUlQyCit1Y252X2dldEZyb21VQ2FsbEJhY2sgKGNvbnN0IFVDb252ZXJ0ZXIg
KiBjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJGcm9tVUNhbGxi
YWNrICphY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKipjb250ZXh0
KTsKKworLyoqCisgKiBDaGFuZ2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBj
b252ZXJ0ZXIgd2hlbgorICogYW4gaWxsZWdhbCBvciBpbnZhbGlkIHNlcXVlbmNlIGlzIGZvdW5k
LgorICogQ29udGV4dCBwb2ludGVycyBhcmUgYWx3YXlzIG93bmVkIGJ5IHRoZSBjYWxsZXIuCisg
KiBQcmVkZWZpbmVkIGFjdGlvbnMgYW5kIGNvbnRleHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdWNu
dl9lcnIuaCBoZWFkZXIuCisgKgorICogQHBhcmFtIGNvbnZlcnRlciB0aGUgdW5pY29kZSBjb252
ZXJ0ZXIKKyAqIEBwYXJhbSBuZXdBY3Rpb24gdGhlIG5ldyBjYWxsYmFjayBmdW5jdGlvbgorICog
QHBhcmFtIG5ld0NvbnRleHQgdGhlIG5ldyB0b1VuaWNvZGUgY2FsbGJhY2sgY29udGV4dCBwb2lu
dGVyLiBUaGlzIGNhbiBiZSBOVUxMLgorICogQHBhcmFtIG9sZEFjdGlvbiBmaWxsaW46IHJldHVy
bnMgdGhlIG9sZCBjYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIGNhbiBiZSBOVUxMLgor
ICogQHBhcmFtIG9sZENvbnRleHQgZmlsbGluOiByZXR1cm5zIHRoZSBvbGQgY2FsbGJhY2sncyBw
cml2YXRlIHZvaWQqIGNvbnRleHQuIFRoaXMgY2FuIGJlIE5VTEwuCisgKiBAcGFyYW0gZXJyIFRo
ZSBlcnJvciBjb2RlIHN0YXR1cworICogQHNlZSB1Y252X2dldFRvVUNhbGxCYWNrCisgKiBAc3Rh
YmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfc2V0VG9VQ2Fs
bEJhY2sgKFVDb252ZXJ0ZXIgKiBjb252ZXJ0ZXIsCisgICAgICAgICAgICAgICAgICAgICBVQ29u
dmVydGVyVG9VQ2FsbGJhY2sgbmV3QWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCogbmV3Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJUb1VDYWxs
YmFjayAqb2xkQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCoqIG9sZENv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICogZXJyKTsKKworLyoqCisg
KiBDaGFuZ2VzIHRoZSBjdXJyZW50IGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIGNvbnZl
cnRlciB3aGVuCisgKiBhbiBpbGxlZ2FsIG9yIGludmFsaWQgc2VxdWVuY2UgaXMgZm91bmQuCisg
KiBDb250ZXh0IHBvaW50ZXJzIGFyZSBhbHdheXMgb3duZWQgYnkgdGhlIGNhbGxlci4KKyAqIFBy
ZWRlZmluZWQgYWN0aW9ucyBhbmQgY29udGV4dHMgY2FuIGJlIGZvdW5kIGluIHRoZSB1Y252X2Vy
ci5oIGhlYWRlci4KKyAqCisgKiBAcGFyYW0gY29udmVydGVyIHRoZSB1bmljb2RlIGNvbnZlcnRl
cgorICogQHBhcmFtIG5ld0FjdGlvbiB0aGUgbmV3IGNhbGxiYWNrIGZ1bmN0aW9uCisgKiBAcGFy
YW0gbmV3Q29udGV4dCB0aGUgbmV3IGZyb21Vbmljb2RlIGNhbGxiYWNrIGNvbnRleHQgcG9pbnRl
ci4gVGhpcyBjYW4gYmUgTlVMTC4KKyAqIEBwYXJhbSBvbGRBY3Rpb24gZmlsbGluOiByZXR1cm5z
IHRoZSBvbGQgY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlci4gVGhpcyBjYW4gYmUgTlVMTC4KKyAq
IEBwYXJhbSBvbGRDb250ZXh0IGZpbGxpbjogcmV0dXJucyB0aGUgb2xkIGNhbGxiYWNrJ3MgcHJp
dmF0ZSB2b2lkKiBjb250ZXh0LiBUaGlzIGNhbiBiZSBOVUxMLgorICogQHBhcmFtIGVyciBUaGUg
ZXJyb3IgY29kZSBzdGF0dXMKKyAqIEBzZWUgdWNudl9nZXRGcm9tVUNhbGxCYWNrCisgKiBAc3Rh
YmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfc2V0RnJvbVVD
YWxsQmFjayAoVUNvbnZlcnRlciAqIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
VUNvbnZlcnRlckZyb21VQ2FsbGJhY2sgbmV3QWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpuZXdDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICBVQ29udmVy
dGVyRnJvbVVDYWxsYmFjayAqb2xkQWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2b2lkICoqb2xkQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAq
IGVycik7CisKKy8qKgorICogQ29udmVydHMgYW4gYXJyYXkgb2YgdW5pY29kZSBjaGFyYWN0ZXJz
IHRvIGFuIGFycmF5IG9mIGNvZGVwYWdlCisgKiBjaGFyYWN0ZXJzLiBUaGlzIGZ1bmN0aW9uIGlz
IG9wdGltaXplZCBmb3IgY29udmVydGluZyBhIGNvbnRpbnVvdXMKKyAqIHN0cmVhbSBvZiBkYXRh
IGluIGJ1ZmZlci1zaXplZCBjaHVua3MsIHdoZXJlIHRoZSBlbnRpcmUgc291cmNlIGFuZAorICog
dGFyZ2V0IGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgYnVmZmVycy4KKyAqIAorICogVGhlIHNv
dXJjZSBwb2ludGVyIGlzIGFuIGluL291dCBwYXJhbWV0ZXIuIEl0IHN0YXJ0cyBvdXQgcG9pbnRp
bmcgd2hlcmUgdGhlIAorICogY29udmVyc2lvbiBpcyB0byBiZWdpbiwgYW5kIGVuZHMgdXAgcG9p
bnRpbmcgYWZ0ZXIgdGhlIGxhc3QgVUNoYXIgY29uc3VtZWQuIAorICogCisgKiBUYXJnZXQgc2lt
aWxhcmx5IHN0YXJ0cyBvdXQgcG9pbnRlciBhdCB0aGUgZmlyc3QgYXZhaWxhYmxlIGJ5dGUgaW4g
dGhlIG91dHB1dAorICogYnVmZmVyLCBhbmQgZW5kcyB1cCBwb2ludGluZyBhZnRlciB0aGUgbGFz
dCBieXRlIHdyaXR0ZW4gdG8gdGhlIG91dHB1dC4KKyAqIAorICogVGhlIGNvbnZlcnRlciBhbHdh
eXMgYXR0ZW1wdHMgdG8gY29uc3VtZSB0aGUgZW50aXJlIHNvdXJjZSBidWZmZXIsIHVubGVzcyAK
KyAqICgxLikgdGhlIHRhcmdldCBidWZmZXIgaXMgZnVsbCwgb3IgKDIuKSBhIGZhaWxpbmcgZXJy
b3IgaXMgcmV0dXJuZWQgZnJvbSB0aGUKKyAqIGN1cnJlbnQgY2FsbGJhY2sgZnVuY3Rpb24uICBX
aGVuIGEgc3VjY2Vzc2Z1bCBlcnJvciBzdGF0dXMgaGFzIGJlZW4KKyAqIHJldHVybmVkLCBpdCBt
ZWFucyB0aGF0IGFsbCBvZiB0aGUgc291cmNlIGJ1ZmZlciBoYXMgYmVlbgorICogIGNvbnN1bWVk
LiBBdCB0aGF0IHBvaW50LCB0aGUgY2FsbGVyIHNob3VsZCByZXNldCB0aGUgc291cmNlIGFuZAor
ICogIHNvdXJjZUxpbWl0IHBvaW50ZXJzIHRvIHBvaW50IHRvIHRoZSBuZXh0IGNodW5rLgorICog
CisgKiBBdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gKGZsdXNoPT1UUlVFKSwgdGhlIGlucHV0IGlz
IGNvbXBsZXRlbHkgY29uc3VtZWQKKyAqIHdoZW4gKnNvdXJjZT09c291cmNlTGltaXQgYW5kIG5v
IGVycm9yIGNvZGUgaXMgc2V0LgorICogVGhlIGNvbnZlcnRlciBvYmplY3QgaXMgdGhlbiBhdXRv
bWF0aWNhbGx5IHJlc2V0IGJ5IHRoaXMgZnVuY3Rpb24uCisgKiAoVGhpcyBtZWFucyB0aGF0IGEg
Y29udmVydGVyIG5lZWQgbm90IGJlIHJlc2V0IGV4cGxpY2l0bHkgYmV0d2VlbiBkYXRhCisgKiBz
dHJlYW1zIGlmIGl0IGZpbmlzaGVzIHRoZSBwcmV2aW91cyBzdHJlYW0gd2l0aG91dCBlcnJvcnMu
KQorICogCisgKiBUaGlzIGlzIGEgPEk+c3RhdGVmdWw8L0k+IGNvbnZlcnNpb24uIEFkZGl0aW9u
YWxseSwgZXZlbiB3aGVuIGFsbCBzb3VyY2UgZGF0YSBoYXMKKyAqIGJlZW4gY29uc3VtZWQsIHNv
bWUgZGF0YSBtYXkgYmUgaW4gdGhlIGNvbnZlcnRlcnMnIGludGVybmFsIHN0YXRlLgorICogQ2Fs
bCB0aGlzIGZ1bmN0aW9uIHJlcGVhdGVkbHksIHVwZGF0aW5nIHRoZSB0YXJnZXQgcG9pbnRlcnMg
d2l0aAorICogdGhlIG5leHQgZW1wdHkgY2h1bmsgb2YgdGFyZ2V0IGluIGNhc2Ugb2YgYQorICog
PFRUPlVfQlVGRkVSX09WRVJGTE9XX0VSUk9SPC9UVD4sIGFuZCB1cGRhdGluZyB0aGUgc291cmNl
ICBwb2ludGVycworICogIHdpdGggdGhlIG5leHQgY2h1bmsgb2Ygc291cmNlIHdoZW4gYSBzdWNj
ZXNzZnVsIGVycm9yIHN0YXR1cyBpcworICogcmV0dXJuZWQsIHVudGlsIHRoZXJlIGFyZSBubyBt
b3JlIGNodW5rcyBvZiBzb3VyY2UgZGF0YS4KKyAqIEBwYXJhbSBjb252ZXJ0ZXIgdGhlIFVuaWNv
ZGUgY29udmVydGVyCisgKiBAcGFyYW0gdGFyZ2V0IEkvTyBwYXJhbWV0ZXIuIElucHV0IDogUG9p
bnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciB0byBjb3B5CisgKiAgY29kZXBhZ2Ug
Y2hhcmFjdGVycyB0by4gT3V0cHV0IDogcG9pbnRzIHRvIGFmdGVyIHRoZSBsYXN0IGNvZGVwYWdl
IGNoYXJhY3RlciBjb3BpZWQKKyAqICB0byA8VFQ+dGFyZ2V0PC9UVD4uCisgKiBAcGFyYW0gdGFy
Z2V0TGltaXQgdGhlIHBvaW50ZXIganVzdCBhZnRlciBsYXN0IG9mIHRoZSA8VFQ+dGFyZ2V0PC9U
VD4gYnVmZmVyCisgKiBAcGFyYW0gc291cmNlIEkvTyBwYXJhbWV0ZXIsIHBvaW50ZXIgdG8gcG9p
bnRlciB0byB0aGUgc291cmNlIFVuaWNvZGUgY2hhcmFjdGVyIGJ1ZmZlci4gCisgKiBAcGFyYW0g
c291cmNlTGltaXQgdGhlIHBvaW50ZXIganVzdCBhZnRlciB0aGUgbGFzdCBvZiB0aGUgc291cmNl
IGJ1ZmZlcgorICogQHBhcmFtIG9mZnNldHMgaWYgTlVMTCBpcyBwYXNzZWQsIG5vdGhpbmcgd2ls
bCBoYXBwZW4gdG8gaXQsIG90aGVyd2lzZSBpdCBuZWVkcyB0byBoYXZlIHRoZSBzYW1lIG51bWJl
cgorICogb2YgYWxsb2NhdGVkIGNlbGxzIGFzIDxUVD50YXJnZXQ8L1RUPi4gV2lsbCBmaWxsIGlu
IG9mZnNldHMgZnJvbSB0YXJnZXQgdG8gc291cmNlIHBvaW50ZXIKKyAqIGUuZzogPFRUPm9mZnNl
dHNbM108L1RUPiBpcyBlcXVhbCB0byA2LCBpdCBtZWFucyB0aGF0IHRoZSA8VFQ+dGFyZ2V0WzNd
PC9UVD4gd2FzIGEgcmVzdWx0IG9mIHRyYW5zY29kaW5nIDxUVD5zb3VyY2VbNl08L1RUPgorICog
Rm9yIG91dHB1dCBkYXRhIGNhcnJpZWQgYWNyb3NzIGNhbGxzLCBhbmQgb3RoZXIgZGF0YSB3aXRo
b3V0IGEgc3BlY2lmaWMgc291cmNlIGNoYXJhY3RlcgorICogKHN1Y2ggYXMgZnJvbSBlc2NhcGUg
c2VxdWVuY2VzIG9yIGNhbGxiYWNrcykgIC0xIHdpbGwgYmUgcGxhY2VkIGZvciBvZmZzZXRzLiAK
KyAqIEBwYXJhbSBmbHVzaCBzZXQgdG8gPFRUPlRSVUU8L1RUPiBpZiB0aGUgY3VycmVudCBzb3Vy
Y2UgYnVmZmVyIGlzIHRoZSBsYXN0IGF2YWlsYWJsZQorICogY2h1bmsgb2YgdGhlIHNvdXJjZSwg
PFRUPkZBTFNFPC9UVD4gb3RoZXJ3aXNlLiBOb3RlIHRoYXQgaWYgYSBmYWlsaW5nIHN0YXR1cyBp
cyByZXR1cm5lZCwKKyAqIHRoaXMgZnVuY3Rpb24gbWF5IGhhdmUgdG8gYmUgY2FsbGVkIG11bHRp
cGxlIHRpbWVzIHdpdGggZmx1c2ggc2V0IHRvIDxUVD5UUlVFPC9UVD4gdW50aWwKKyAqIHRoZSBz
b3VyY2UgYnVmZmVyIGlzIGNvbnN1bWVkLgorICogQHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVz
LiAgPFRUPlVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjwvVFQ+IHdpbGwgYmUgc2V0IGlmIHRoZQor
ICogY29udmVydGVyIGlzIDxUVD5OVUxMPC9UVD4uCisgKiA8Y29kZT5VX0JVRkZFUl9PVkVSRkxP
V19FUlJPUjwvY29kZT4gd2lsbCBiZSBzZXQgaWYgdGhlIHRhcmdldCBpcyBmdWxsIGFuZCB0aGVy
ZSBpcyAKKyAqIHN0aWxsIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgdGFyZ2V0LgorICogQHNl
ZSB1Y252X2Zyb21VQ2hhcnMKKyAqIEBzZWUgdWNudl9jb252ZXJ0CisgKiBAc2VlIHVjbnZfZ2V0
TWluQ2hhclNpemUKKyAqIEBzZWUgdWNudl9zZXRUb1VDYWxsQmFjaworICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNudl9mcm9tVW5pY29kZSAoVUNv
bnZlcnRlciAqIGNvbnZlcnRlciwKKyAgICAgICAgICAgICAgICAgIGNoYXIgKip0YXJnZXQsCisg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0YXJnZXRMaW1pdCwKKyAgICAgICAgICAgICAg
ICAgIGNvbnN0IFVDaGFyICoqIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
ICogc291cmNlTGltaXQsCisgICAgICAgICAgICAgICAgICBpbnQzMl90KiBvZmZzZXRzLAorICAg
ICAgICAgICAgICAgICAgVUJvb2wgZmx1c2gsCisgICAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl
ICogZXJyKTsKKworLyoqCisgKiBDb252ZXJ0cyBhIGJ1ZmZlciBvZiBjb2RlcGFnZSBieXRlcyBp
bnRvIGFuIGFycmF5IG9mIHVuaWNvZGUgVUNoYXJzCisgKiBjaGFyYWN0ZXJzLiBUaGlzIGZ1bmN0
aW9uIGlzIG9wdGltaXplZCBmb3IgY29udmVydGluZyBhIGNvbnRpbnVvdXMKKyAqIHN0cmVhbSBv
ZiBkYXRhIGluIGJ1ZmZlci1zaXplZCBjaHVua3MsIHdoZXJlIHRoZSBlbnRpcmUgc291cmNlIGFu
ZAorICogdGFyZ2V0IGRvZXMgbm90IGZpdCBpbiBhdmFpbGFibGUgYnVmZmVycy4KKyAqIAorICog
VGhlIHNvdXJjZSBwb2ludGVyIGlzIGFuIGluL291dCBwYXJhbWV0ZXIuIEl0IHN0YXJ0cyBvdXQg
cG9pbnRpbmcgd2hlcmUgdGhlIAorICogY29udmVyc2lvbiBpcyB0byBiZWdpbiwgYW5kIGVuZHMg
dXAgcG9pbnRpbmcgYWZ0ZXIgdGhlIGxhc3QgYnl0ZSBvZiBzb3VyY2UgY29uc3VtZWQuIAorICog
CisgKiBUYXJnZXQgc2ltaWxhcmx5IHN0YXJ0cyBvdXQgcG9pbnRlciBhdCB0aGUgZmlyc3QgYXZh
aWxhYmxlIFVDaGFyIGluIHRoZSBvdXRwdXQKKyAqIGJ1ZmZlciwgYW5kIGVuZHMgdXAgcG9pbnRp
bmcgYWZ0ZXIgdGhlIGxhc3QgVUNoYXIgd3JpdHRlbiB0byB0aGUgb3V0cHV0LiAKKyAqIEl0IGRv
ZXMgTk9UIG5lY2Vzc2FyaWx5IGtlZXAgVUNoYXIgc2VxdWVuY2VzIHRvZ2V0aGVyLgorICogCisg
KiBUaGUgY29udmVydGVyIGFsd2F5cyBhdHRlbXB0cyB0byBjb25zdW1lIHRoZSBlbnRpcmUgc291
cmNlIGJ1ZmZlciwgdW5sZXNzIAorICogKDEuKSB0aGUgdGFyZ2V0IGJ1ZmZlciBpcyBmdWxsLCBv
ciAoMi4pIGEgZmFpbGluZyBlcnJvciBpcyByZXR1cm5lZCBmcm9tIHRoZQorICogY3VycmVudCBj
YWxsYmFjayBmdW5jdGlvbi4gIFdoZW4gYSBzdWNjZXNzZnVsIGVycm9yIHN0YXR1cyBoYXMgYmVl
bgorICogcmV0dXJuZWQsIGl0IG1lYW5zIHRoYXQgYWxsIG9mIHRoZSBzb3VyY2UgYnVmZmVyIGhh
cyBiZWVuCisgKiAgY29uc3VtZWQuIEF0IHRoYXQgcG9pbnQsIHRoZSBjYWxsZXIgc2hvdWxkIHJl
c2V0IHRoZSBzb3VyY2UgYW5kCisgKiAgc291cmNlTGltaXQgcG9pbnRlcnMgdG8gcG9pbnQgdG8g
dGhlIG5leHQgY2h1bmsuCisgKgorICogQXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIChmbHVzaD09
VFJVRSksIHRoZSBpbnB1dCBpcyBjb21wbGV0ZWx5IGNvbnN1bWVkCisgKiB3aGVuICpzb3VyY2U9
PXNvdXJjZUxpbWl0IGFuZCBubyBlcnJvciBjb2RlIGlzIHNldAorICogVGhlIGNvbnZlcnRlciBv
YmplY3QgaXMgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc2V0IGJ5IHRoaXMgZnVuY3Rpb24uCisgKiAo
VGhpcyBtZWFucyB0aGF0IGEgY29udmVydGVyIG5lZWQgbm90IGJlIHJlc2V0IGV4cGxpY2l0bHkg
YmV0d2VlbiBkYXRhCisgKiBzdHJlYW1zIGlmIGl0IGZpbmlzaGVzIHRoZSBwcmV2aW91cyBzdHJl
YW0gd2l0aG91dCBlcnJvcnMuKQorICogCisgKiBUaGlzIGlzIGEgPEk+c3RhdGVmdWw8L0k+IGNv
bnZlcnNpb24uIEFkZGl0aW9uYWxseSwgZXZlbiB3aGVuIGFsbCBzb3VyY2UgZGF0YSBoYXMKKyAq
IGJlZW4gY29uc3VtZWQsIHNvbWUgZGF0YSBtYXkgYmUgaW4gdGhlIGNvbnZlcnRlcnMnIGludGVy
bmFsIHN0YXRlLgorICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHJlcGVhdGVkbHksIHVwZGF0aW5nIHRo
ZSB0YXJnZXQgcG9pbnRlcnMgd2l0aAorICogdGhlIG5leHQgZW1wdHkgY2h1bmsgb2YgdGFyZ2V0
IGluIGNhc2Ugb2YgYQorICogPFRUPlVfQlVGRkVSX09WRVJGTE9XX0VSUk9SPC9UVD4sIGFuZCB1
cGRhdGluZyB0aGUgc291cmNlICBwb2ludGVycworICogIHdpdGggdGhlIG5leHQgY2h1bmsgb2Yg
c291cmNlIHdoZW4gYSBzdWNjZXNzZnVsIGVycm9yIHN0YXR1cyBpcworICogcmV0dXJuZWQsIHVu
dGlsIHRoZXJlIGFyZSBubyBtb3JlIGNodW5rcyBvZiBzb3VyY2UgZGF0YS4KKyAqIEBwYXJhbSBj
b252ZXJ0ZXIgdGhlIFVuaWNvZGUgY29udmVydGVyCisgKiBAcGFyYW0gdGFyZ2V0IEkvTyBwYXJh
bWV0ZXIuIElucHV0IDogUG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciB0byBj
b3B5CisgKiAgVUNoYXJzIGludG8uIE91dHB1dCA6IHBvaW50cyB0byBhZnRlciB0aGUgbGFzdCBV
Q2hhciBjb3BpZWQuCisgKiBAcGFyYW0gdGFyZ2V0TGltaXQgdGhlIHBvaW50ZXIganVzdCBhZnRl
ciB0aGUgZW5kIG9mIHRoZSA8VFQ+dGFyZ2V0PC9UVD4gYnVmZmVyCisgKiBAcGFyYW0gc291cmNl
IEkvTyBwYXJhbWV0ZXIsIHBvaW50ZXIgdG8gcG9pbnRlciB0byB0aGUgc291cmNlIGNvZGVwYWdl
IGJ1ZmZlci4gCisgKiBAcGFyYW0gc291cmNlTGltaXQgdGhlIHBvaW50ZXIgdG8gdGhlIGJ5dGUg
YWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc291cmNlIGJ1ZmZlcgorICogQHBhcmFtIG9mZnNldHMgaWYg
TlVMTCBpcyBwYXNzZWQsIG5vdGhpbmcgd2lsbCBoYXBwZW4gdG8gaXQsIG90aGVyd2lzZSBpdCBu
ZWVkcyB0byBoYXZlIHRoZSBzYW1lIG51bWJlcgorICogb2YgYWxsb2NhdGVkIGNlbGxzIGFzIDxU
VD50YXJnZXQ8L1RUPi4gV2lsbCBmaWxsIGluIG9mZnNldHMgZnJvbSB0YXJnZXQgdG8gc291cmNl
IHBvaW50ZXIKKyAqIGUuZzogPFRUPm9mZnNldHNbM108L1RUPiBpcyBlcXVhbCB0byA2LCBpdCBt
ZWFucyB0aGF0IHRoZSA8VFQ+dGFyZ2V0WzNdPC9UVD4gd2FzIGEgcmVzdWx0IG9mIHRyYW5zY29k
aW5nIDxUVD5zb3VyY2VbNl08L1RUPgorICogRm9yIG91dHB1dCBkYXRhIGNhcnJpZWQgYWNyb3Nz
IGNhbGxzLCBhbmQgb3RoZXIgZGF0YSB3aXRob3V0IGEgc3BlY2lmaWMgc291cmNlIGNoYXJhY3Rl
cgorICogKHN1Y2ggYXMgZnJvbSBlc2NhcGUgc2VxdWVuY2VzIG9yIGNhbGxiYWNrcykgIC0xIHdp
bGwgYmUgcGxhY2VkIGZvciBvZmZzZXRzLiAKKyAqIEBwYXJhbSBmbHVzaCBzZXQgdG8gPFRUPlRS
VUU8L1RUPiBpZiB0aGUgY3VycmVudCBzb3VyY2UgYnVmZmVyIGlzIHRoZSBsYXN0IGF2YWlsYWJs
ZQorICogY2h1bmsgb2YgdGhlIHNvdXJjZSwgPFRUPkZBTFNFPC9UVD4gb3RoZXJ3aXNlLiBOb3Rl
IHRoYXQgaWYgYSBmYWlsaW5nIHN0YXR1cyBpcyByZXR1cm5lZCwKKyAqIHRoaXMgZnVuY3Rpb24g
bWF5IGhhdmUgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZmx1c2ggc2V0IHRvIDxU
VD5UUlVFPC9UVD4gdW50aWwKKyAqIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGNvbnN1bWVkLgorICog
QHBhcmFtIGVyciB0aGUgZXJyb3Igc3RhdHVzLiAgPFRUPlVfSUxMRUdBTF9BUkdVTUVOVF9FUlJP
UjwvVFQ+IHdpbGwgYmUgc2V0IGlmIHRoZQorICogY29udmVydGVyIGlzIDxUVD5OVUxMPC9UVD4u
CisgKiA8Y29kZT5VX0JVRkZFUl9PVkVSRkxPV19FUlJPUjwvY29kZT4gd2lsbCBiZSBzZXQgaWYg
dGhlIHRhcmdldCBpcyBmdWxsIGFuZCB0aGVyZSBpcyAKKyAqIHN0aWxsIGRhdGEgdG8gYmUgd3Jp
dHRlbiB0byB0aGUgdGFyZ2V0LiAKKyAqIEBzZWUgdWNudl9mcm9tVUNoYXJzCisgKiBAc2VlIHVj
bnZfY29udmVydAorICogQHNlZSB1Y252X2dldE1pbkNoYXJTaXplCisgKiBAc2VlIHVjbnZfc2V0
RnJvbVVDYWxsQmFjaworICogQHNlZSB1Y252X2dldE5leHRVQ2hhcgorICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIAordWNudl90b1VuaWNvZGUoVUNvbnZl
cnRlciAqY29udmVydGVyLAorICAgICAgICAgICAgICAgVUNoYXIgKip0YXJnZXQsCisgICAgICAg
ICAgICAgICBjb25zdCBVQ2hhciAqdGFyZ2V0TGltaXQsCisgICAgICAgICAgICAgICBjb25zdCBj
aGFyICoqc291cmNlLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc291cmNlTGltaXQsCisg
ICAgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXRzLAorICAgICAgICAgICAgICAgVUJvb2wgZmx1
c2gsCisgICAgICAgICAgICAgICBVRXJyb3JDb2RlICplcnIpOworCisvKioKKyAqIENvbnZlcnQg
dGhlIFVuaWNvZGUgc3RyaW5nIGludG8gYSBjb2RlcGFnZSBzdHJpbmcgdXNpbmcgYW4gZXhpc3Rp
bmcgVUNvbnZlcnRlci4KKyAqIFRoZSBvdXRwdXQgc3RyaW5nIGlzIE5VTC10ZXJtaW5hdGVkIGlm
IHBvc3NpYmxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBtb3JlIGNvbnZlbmllbnQgYnV0
IGxlc3MgcG93ZXJmdWwgdmVyc2lvbiBvZiB1Y252X2Zyb21Vbmljb2RlKCkuCisgKiBJdCBpcyBv
bmx5IHVzZWZ1bCBmb3Igd2hvbGUgc3RyaW5ncywgbm90IGZvciBzdHJlYW1pbmcgY29udmVyc2lv
bi4KKyAqCisgKiBUaGUgbWF4aW11bSBvdXRwdXQgYnVmZmVyIGNhcGFjaXR5IHJlcXVpcmVkIChi
YXJyaW5nIG91dHB1dCBmcm9tIGNhbGxiYWNrcykgd2lsbCBiZQorICogVUNOVl9HRVRfTUFYX0JZ
VEVTX0ZPUl9TVFJJTkcoc3JjTGVuZ3RoLCB1Y252X2dldE1heENoYXJTaXplKGNudikpLgorICoK
KyAqIEBwYXJhbSBjbnYgdGhlIGNvbnZlcnRlciBvYmplY3QgdG8gYmUgdXNlZCAodWNudl9yZXNl
dEZyb21Vbmljb2RlKCkgd2lsbCBiZSBjYWxsZWQpCisgKiBAcGFyYW0gc3JjIHRoZSBpbnB1dCBV
bmljb2RlIHN0cmluZworICogQHBhcmFtIHNyY0xlbmd0aCB0aGUgaW5wdXQgc3RyaW5nIGxlbmd0
aCwgb3IgLTEgaWYgTlVMLXRlcm1pbmF0ZWQKKyAqIEBwYXJhbSBkZXN0IGRlc3RpbmF0aW9uIHN0
cmluZyBidWZmZXIsIGNhbiBiZSBOVUxMIGlmIGRlc3RDYXBhY2l0eT09MAorICogQHBhcmFtIGRl
c3RDYXBhY2l0eSB0aGUgbnVtYmVyIG9mIGNoYXJzIGF2YWlsYWJsZSBhdCBkZXN0CisgKiBAcGFy
YW0gcEVycm9yQ29kZSBub3JtYWwgSUNVIGVycm9yIGNvZGU7CisgKiAgICAgICAgICAgICAgICAg
IGNvbW1vbiBlcnJvciBjb2RlcyB0aGF0IG1heSBiZSBzZXQgYnkgdGhpcyBmdW5jdGlvbiBpbmNs
dWRlCisgKiAgICAgICAgICAgICAgICAgIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SLCBVX1NUUklO
R19OT1RfVEVSTUlOQVRFRF9XQVJOSU5HLAorICogICAgICAgICAgICAgICAgICBVX0lMTEVHQUxf
QVJHVU1FTlRfRVJST1IsIGFuZCBjb252ZXJzaW9uIGVycm9ycworICogQHJldHVybiB0aGUgbGVu
Z3RoIG9mIHRoZSBvdXRwdXQgc3RyaW5nLCBub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIE5V
TDsKKyAqICAgICAgICAgaWYgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gZGVzdENhcGFjaXR5
LCB0aGVuIHRoZSBzdHJpbmcgd2lsbCBub3QgZml0CisgKiAgICAgICAgIGFuZCBhIGJ1ZmZlciBv
ZiB0aGUgaW5kaWNhdGVkIGxlbmd0aCB3b3VsZCBuZWVkIHRvIGJlIHBhc3NlZCBpbgorICogQHNl
ZSB1Y252X2Zyb21Vbmljb2RlCisgKiBAc2VlIHVjbnZfY29udmVydAorICogQHNlZSBVQ05WX0dF
VF9NQVhfQllURVNfRk9SX1NUUklORworICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IGludDMyX3QgVV9FWFBPUlQyCit1Y252X2Zyb21VQ2hhcnMoVUNvbnZlcnRlciAqY252LAorICAg
ICAgICAgICAgICAgIGNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LAorICAgICAgICAg
ICAgICAgIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLAorICAgICAgICAgICAg
ICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIENvbnZlcnQgdGhlIGNvZGVw
YWdlIHN0cmluZyBpbnRvIGEgVW5pY29kZSBzdHJpbmcgdXNpbmcgYW4gZXhpc3RpbmcgVUNvbnZl
cnRlci4KKyAqIFRoZSBvdXRwdXQgc3RyaW5nIGlzIE5VTC10ZXJtaW5hdGVkIGlmIHBvc3NpYmxl
LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBtb3JlIGNvbnZlbmllbnQgYnV0IGxlc3MgcG93
ZXJmdWwgdmVyc2lvbiBvZiB1Y252X3RvVW5pY29kZSgpLgorICogSXQgaXMgb25seSB1c2VmdWwg
Zm9yIHdob2xlIHN0cmluZ3MsIG5vdCBmb3Igc3RyZWFtaW5nIGNvbnZlcnNpb24uCisgKgorICog
VGhlIG1heGltdW0gb3V0cHV0IGJ1ZmZlciBjYXBhY2l0eSByZXF1aXJlZCAoYmFycmluZyBvdXRw
dXQgZnJvbSBjYWxsYmFja3MpIHdpbGwgYmUKKyAqIDIqc3JjTGVuZ3RoIChlYWNoIGNoYXIgbWF5
IGJlIGNvbnZlcnRlZCBpbnRvIGEgc3Vycm9nYXRlIHBhaXIpLgorICoKKyAqIEBwYXJhbSBjbnYg
dGhlIGNvbnZlcnRlciBvYmplY3QgdG8gYmUgdXNlZCAodWNudl9yZXNldFRvVW5pY29kZSgpIHdp
bGwgYmUgY2FsbGVkKQorICogQHBhcmFtIHNyYyB0aGUgaW5wdXQgY29kZXBhZ2Ugc3RyaW5nCisg
KiBAcGFyYW0gc3JjTGVuZ3RoIHRoZSBpbnB1dCBzdHJpbmcgbGVuZ3RoLCBvciAtMSBpZiBOVUwt
dGVybWluYXRlZAorICogQHBhcmFtIGRlc3QgZGVzdGluYXRpb24gc3RyaW5nIGJ1ZmZlciwgY2Fu
IGJlIE5VTEwgaWYgZGVzdENhcGFjaXR5PT0wCisgKiBAcGFyYW0gZGVzdENhcGFjaXR5IHRoZSBu
dW1iZXIgb2YgVUNoYXJzIGF2YWlsYWJsZSBhdCBkZXN0CisgKiBAcGFyYW0gcEVycm9yQ29kZSBu
b3JtYWwgSUNVIGVycm9yIGNvZGU7CisgKiAgICAgICAgICAgICAgICAgIGNvbW1vbiBlcnJvciBj
b2RlcyB0aGF0IG1heSBiZSBzZXQgYnkgdGhpcyBmdW5jdGlvbiBpbmNsdWRlCisgKiAgICAgICAg
ICAgICAgICAgIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SLCBVX1NUUklOR19OT1RfVEVSTUlOQVRF
RF9XQVJOSU5HLAorICogICAgICAgICAgICAgICAgICBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1Is
IGFuZCBjb252ZXJzaW9uIGVycm9ycworICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRw
dXQgc3RyaW5nLCBub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTDsKKyAqICAgICAgICAg
aWYgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gZGVzdENhcGFjaXR5LCB0aGVuIHRoZSBzdHJp
bmcgd2lsbCBub3QgZml0CisgKiAgICAgICAgIGFuZCBhIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVk
IGxlbmd0aCB3b3VsZCBuZWVkIHRvIGJlIHBhc3NlZCBpbgorICogQHNlZSB1Y252X3RvVW5pY29k
ZQorICogQHNlZSB1Y252X2NvbnZlcnQKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMgordWNudl90b1VDaGFycyhVQ29udmVydGVyICpjbnYsCisgICAg
ICAgICAgICAgIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKyAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKKyAgICAgICAgICAgICAgVUVy
cm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogQ29udmVydCBhIGNvZGVwYWdlIGJ1ZmZl
ciBpbnRvIFVuaWNvZGUgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUuCisgKiBUaGUgaW5wdXQgaXMg
Y29tcGxldGVseSBjb25zdW1lZCB3aGVuIHRoZSBVX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SIGlz
IHNldC4KKyAqCisgKiBBZHZhbnRhZ2UgY29tcGFyZWQgdG8gdWNudl90b1VuaWNvZGUoKSBvciB1
Y252X3RvVUNoYXJzKCk6CisgKiAtIEZhc3RlciBmb3Igc21hbGwgYW1vdW50cyBvZiBkYXRhLCBm
b3IgbW9zdCBjb252ZXJ0ZXJzLCBlLmcuLAorICogICBVUy1BU0NJSSwgSVNPLTg4NTktMSwgVVRG
LTgvMTYvMzIsIGFuZCBtb3N0ICJub3JtYWwiIGNoYXJzZXRzLgorICogICAoRm9yIGNvbXBsZXgg
Y29udmVydGVycywgZS5nLiwgU0NTVSwgVVRGLTcgYW5kIElTTyAyMDIyIHZhcmlhbnRzLAorICog
ICAgaXQgdXNlcyB1Y252X3RvVW5pY29kZSgpIGludGVybmFsbHkuKQorICogLSBDb252ZW5pZW50
LgorICoKKyAqIExpbWl0YXRpb25zIGNvbXBhcmVkIHRvIHVjbnZfdG9Vbmljb2RlKCk6CisgKiAt
IEFsd2F5cyBhc3N1bWVzIGZsdXNoPVRSVUUuCisgKiAgIFRoaXMgbWFrZXMgdWNudl9nZXROZXh0
VUNoYXIoKSB1bnN1aXRhYmxlIGZvciAic3RyZWFtaW5nIiBjb252ZXJzaW9uLAorICogICB0aGF0
IGlzLCBmb3Igd2hlcmUgdGhlIGlucHV0IGlzIHN1cHBsaWVkIGluIG11bHRpcGxlIGJ1ZmZlcnMs
CisgKiAgIGJlY2F1c2UgdWNudl9nZXROZXh0VUNoYXIoKSB3aWxsIGFzc3VtZSB0aGUgZW5kIG9m
IHRoZSBpbnB1dCBhdCB0aGUgZW5kCisgKiAgIG9mIHRoZSBmaXJzdCBidWZmZXIuCisgKiAtIERv
ZXMgbm90IHByb3ZpZGUgb2Zmc2V0IG91dHB1dC4KKyAqCisgKiBJdCBpcyBwb3NzaWJsZSB0byAi
bWl4IiB1Y252X2dldE5leHRVQ2hhcigpIGFuZCB1Y252X3RvVW5pY29kZSgpIGJlY2F1c2UKKyAq
IHVjbnZfZ2V0TmV4dFVDaGFyKCkgdXNlcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgY29udmVy
dGVyCisgKiAodW5saWtlIHVjbnZfdG9VQ2hhcnMoKSB3aGljaCBhbHdheXMgcmVzZXRzIGZpcnN0
KS4KKyAqIEhvd2V2ZXIsIGlmIHVjbnZfZ2V0TmV4dFVDaGFyKCkgaXMgY2FsbGVkIGFmdGVyIHVj
bnZfdG9Vbmljb2RlKCkKKyAqIHN0b3BwZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYXJhY3RlciBz
ZXF1ZW5jZSAod2l0aCBmbHVzaD1GQUxTRSksCisgKiB0aGVuIHVjbnZfZ2V0TmV4dFVDaGFyKCkg
d2lsbCBhbHdheXMgdXNlIHRoZSBzbG93ZXIgdWNudl90b1VuaWNvZGUoKQorICogaW50ZXJuYWxs
eSB1bnRpbCB0aGUgbmV4dCBjaGFyYWN0ZXIgYm91bmRhcnkuCisgKiAoVGhpcyBpcyBuZXcgaW4g
SUNVIDIuNi4gSW4gZWFybGllciByZWxlYXNlcywgdWNudl9nZXROZXh0VUNoYXIoKSBoYWQgdG8K
KyAqIHN0YXJ0IGF0IGEgY2hhcmFjdGVyIGJvdW5kYXJ5LikKKyAqCisgKiBJbnN0ZWFkIG9mIHVz
aW5nIHVjbnZfZ2V0TmV4dFVDaGFyKCksIGl0IGlzIHJlY29tbWVuZGVkCisgKiB0byBjb252ZXJ0
IHVzaW5nIHVjbnZfdG9Vbmljb2RlKCkgb3IgdWNudl90b1VDaGFycygpCisgKiBhbmQgdGhlbiBp
dGVyYXRlIG92ZXIgdGhlIHRleHQgdXNpbmcgVTE2X05FWFQoKSBvciBhIFVDaGFySXRlcmF0b3Ig
KHVpdGVyLmgpCisgKiBvciBhIEMrKyBDaGFyYWN0ZXJJdGVyYXRvciBvciBzaW1pbGFyLgorICog
VGhpcyBhbGxvd3Mgc3RyZWFtaW5nIGNvbnZlcnNpb24gYW5kIG9mZnNldCBvdXRwdXQsIGZvciBl
eGFtcGxlLgorICoKKyAqIDxwPkhhbmRsaW5nIG9mIHN1cnJvZ2F0ZSBwYWlycyBhbmQgc3VwcGxl
bWVudGFyeS1wbGFuZSBjb2RlIHBvaW50czo8YnI+CisgKiBUaGVyZSBhcmUgdHdvIGRpZmZlcmVu
dCBraW5kcyBvZiBjb2RlcGFnZXMgdGhhdCBwcm92aWRlIG1hcHBpbmdzIGZvciBzdXJyb2dhdGUg
Y2hhcmFjdGVyczoKKyAqIDx1bD4KKyAqICAgPGxpPkNvZGVwYWdlcyBsaWtlIFVURi04LCBVVEYt
MzIsIGFuZCBHQiAxODAzMCBwcm92aWRlIGRpcmVjdCByZXByZXNlbnRhdGlvbnMgZm9yIFVuaWNv
ZGUKKyAqICAgICAgIGNvZGUgcG9pbnRzIFUrMTAwMDAtVSsxMGZmZmYgYXMgd2VsbCBhcyBmb3Ig
c2luZ2xlIHN1cnJvZ2F0ZXMgVStkODAwLVUrZGZmZi4KKyAqICAgICAgIEVhY2ggdmFsaWQgc2Vx
dWVuY2Ugd2lsbCByZXN1bHQgaW4gZXhhY3RseSBvbmUgcmV0dXJuZWQgY29kZSBwb2ludC4KKyAq
ICAgICAgIElmIGEgc2VxdWVuY2UgcmVzdWx0cyBpbiBhIHNpbmdsZSBzdXJyb2dhdGUsIHRoZW4g
dGhhdCB3aWxsIGJlIHJldHVybmVkCisgKiAgICAgICBieSBpdHNlbGYsIGV2ZW4gaWYgYSBuZWln
aGJvcmluZyBzZXF1ZW5jZSBlbmNvZGVzIHRoZSBtYXRjaGluZyBzdXJyb2dhdGUuPC9saT4KKyAq
ICAgPGxpPkNvZGVwYWdlcyBsaWtlIFNDU1UgYW5kIExNQkNTIChhbmQgVVRGLTE2KSBwcm92aWRl
IGRpcmVjdCByZXByZXNlbnRhdGlvbnMgb25seSBmb3IgQk1QIGNvZGUgcG9pbnRzCisgKiAgICAg
ICBpbmNsdWRpbmcgc3Vycm9nYXRlcy4gQ29kZSBwb2ludHMgaW4gc3VwcGxlbWVudGFyeSBwbGFu
ZXMgYXJlIHJlcHJlc2VudGVkIHdpdGgKKyAqICAgICAgIHR3byBzZXF1ZW5jZXMsIGVhY2ggZW5j
b2RpbmcgYSBzdXJyb2dhdGUuCisgKiAgICAgICBGb3IgdGhlc2UgY29kZXBhZ2VzLCBtYXRjaGlu
ZyBwYWlycyBvZiBzdXJyb2dhdGVzIHdpbGwgYmUgY29tYmluZWQgaW50byBzaW5nbGUKKyAqICAg
ICAgIGNvZGUgcG9pbnRzIGZvciByZXR1cm5pbmcgZnJvbSB0aGlzIGZ1bmN0aW9uLgorICogICAg
ICAgKE5vdGUgdGhhdCBTQ1NVIGlzIGFjdHVhbGx5IGEgbWl4IG9mIHRoZXNlIGNvZGVwYWdlIHR5
cGVzLik8L2xpPgorICogPC91bD48L3A+CisgKgorICogQHBhcmFtIGNvbnZlcnRlciBhbiBvcGVu
IFVDb252ZXJ0ZXIKKyAqIEBwYXJhbSBzb3VyY2UgdGhlIGFkZHJlc3Mgb2YgYSBwb2ludGVyIHRv
IHRoZSBjb2RlcGFnZSBidWZmZXIsIHdpbGwgYmUKKyAqICB1cGRhdGVkIHRvIHBvaW50IGFmdGVy
IHRoZSBieXRlcyBjb25zdW1lZCBpbiB0aGUgY29udmVyc2lvbiBjYWxsLgorICogQHBhcmFtIHNv
dXJjZUxpbWl0IHBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAqIEBwYXJh
bSBlcnIgZmlsbHMgaW4gZXJyb3Igc3RhdHVzIChzZWUgdWNudl90b1VuaWNvZGUpCisgKiA8Y29k
ZT5VX0lOREVYX09VVE9GQk9VTkRTX0VSUk9SPC9jb2RlPiB3aWxsIGJlIHNldCBpZiB0aGUgaW5w
dXQgCisgKiBpcyBlbXB0eSBvciBkb2VzIG5vdCBjb252ZXJ0IHRvIGFueSBvdXRwdXQgKGUuZy46
IHB1cmUgc3RhdGUtY2hhbmdlIAorICogY29kZXMgU0kvU08sIGVzY2FwZSBzZXF1ZW5jZXMgZm9y
IElTTyAyMDIyLAorICogb3IgaWYgdGhlIGNhbGxiYWNrIGRpZCBub3Qgb3V0cHV0IGFueXRoaW5n
LCAuLi4pLgorICogVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBzZXQgYSA8Y29kZT5VX0JVRkZFUl9P
VkVSRkxPV19FUlJPUjwvY29kZT4gYmVjYXVzZQorICogIHRoZSAiYnVmZmVyIiBpcyB0aGUgcmV0
dXJuIGNvZGUuIEhvd2V2ZXIsIHRoZXJlIG1pZ2h0IGJlIHN1YnNlcXVlbnQgb3V0cHV0CisgKiAg
c3RvcmVkIGluIHRoZSBjb252ZXJ0ZXIgb2JqZWN0CisgKiB0aGF0IHdpbGwgYmUgcmV0dXJuZWQg
aW4gZm9sbG93aW5nIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uCisgKiBAcmV0dXJuIGEgVUNoYXIz
MiByZXN1bHRpbmcgZnJvbSB0aGUgcGFydGlhbCBjb252ZXJzaW9uIG9mIHNvdXJjZQorICogQHNl
ZSB1Y252X3RvVW5pY29kZQorICogQHNlZSB1Y252X3RvVUNoYXJzCisgKiBAc2VlIHVjbnZfY29u
dmVydAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIFVDaGFyMzIgVV9FWFBPUlQy
Cit1Y252X2dldE5leHRVQ2hhcihVQ29udmVydGVyICogY29udmVydGVyLAorICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqKnNvdXJjZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KiBzb3VyY2VMaW1pdCwKKyAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKiBlcnIpOworCisv
KioKKyAqIENvbnZlcnQgZnJvbSBvbmUgZXh0ZXJuYWwgY2hhcnNldCB0byBhbm90aGVyIHVzaW5n
IHR3byBleGlzdGluZyBVQ29udmVydGVycy4KKyAqIEludGVybmFsbHksIHR3byBjb252ZXJzaW9u
cyAtIHVjbnZfdG9Vbmljb2RlKCkgYW5kIHVjbnZfZnJvbVVuaWNvZGUoKSAtCisgKiBhcmUgdXNl
ZCwgInBpdm90aW5nIiB0aHJvdWdoIDE2LWJpdCBVbmljb2RlLgorICoKKyAqIFRoZXJlIGlzIGEg
c2ltaWxhciBmdW5jdGlvbiwgdWNudl9jb252ZXJ0KCksCisgKiB3aGljaCBoYXMgdGhlIGZvbGxv
d2luZyBsaW1pdGF0aW9uczoKKyAqIC0gaXQgdGFrZXMgY2hhcnNldCBuYW1lcywgbm90IGNvbnZl
cnRlciBvYmplY3RzLCBzbyB0aGF0CisgKiAgIC0gdHdvIGNvbnZlcnRlcnMgYXJlIG9wZW5lZCBm
b3IgZWFjaCBjYWxsCisgKiAgIC0gb25seSBzaW5nbGUtc3RyaW5nIGNvbnZlcnNpb24gaXMgcG9z
c2libGUsIG5vdCBzdHJlYW1pbmcgb3BlcmF0aW9uCisgKiAtIGl0IGRvZXMgbm90IHByb3ZpZGUg
ZW5vdWdoIGluZm9ybWF0aW9uIHRvIGZpbmQgb3V0LAorICogICBpbiBjYXNlIG9mIGZhaWx1cmUs
IHdoZXRoZXIgdGhlIHRvVW5pY29kZSBvcgorICogICB0aGUgZnJvbVVuaWNvZGUgY29udmVyc2lv
biBmYWlsZWQKKyAqCisgKiBCeSBjb250cmFzdCwgdWNudl9jb252ZXJ0RXgoKQorICogLSB0YWtl
cyBVQ29udmVydGVyIHBhcmFtZXRlcnMgaW5zdGVhZCBvZiBjaGFyc2V0IG5hbWVzCisgKiAtIGZ1
bGx5IGV4cG9zZXMgdGhlIHBpdm90IGJ1ZmZlciBmb3IgY29tcGxldGUgZXJyb3IgaGFuZGxpbmcK
KyAqCisgKiB1Y252X2NvbnZlcnRFeCgpIGFsc28gcHJvdmlkZXMgZnVydGhlciBjb252ZW5pZW5j
ZToKKyAqIC0gYW4gb3B0aW9uIHRvIHJlc2V0IHRoZSBjb252ZXJ0ZXJzIGF0IHRoZSBiZWdpbm5p
bmcKKyAqICAgKGlmIHJlc2V0PT1UUlVFLCBzZWUgcGFyYW1ldGVyczsKKyAqICAgIGFsc28gc2V0
cyAqcGl2b3RUYXJnZXQ9KnBpdm90U291cmNlPXBpdm90U3RhcnQpCisgKiAtIGFsbG93IE5VTC10
ZXJtaW5hdGVkIGlucHV0CisgKiAgIChvbmx5IGEgc2luZ2xlIE5VTCBieXRlLCB3aWxsIG5vdCB3
b3JrIGZvciBjaGFyc2V0cyB3aXRoIG11bHRpLWJ5dGUgTlVMcykKKyAqICAgKGlmIHNvdXJjZUxp
bWl0PT1OVUxMLCBzZWUgcGFyYW1ldGVycykKKyAqIC0gdGVybWluYXRlIHdpdGggYSBOVUwgb24g
b3V0cHV0CisgKiAgIChvbmx5IGEgc2luZ2xlIE5VTCBieXRlLCBub3QgdXNlZnVsIGZvciBjaGFy
c2V0cyB3aXRoIG11bHRpLWJ5dGUgTlVMcyksCisgKiAgIG9yIHNldCBVX1NUUklOR19OT1RfVEVS
TUlOQVRFRF9XQVJOSU5HIGlmIHRoZSBvdXRwdXQgZXhhY3RseSBmaWxscworICogICB0aGUgdGFy
Z2V0IGJ1ZmZlcgorICogLSB0aGUgcGl2b3QgYnVmZmVyIGNhbiBiZSBwcm92aWRlZCBpbnRlcm5h
bGx5OworICogICBpbiB0aGlzIGNhc2UsIHRoZSBjYWxsZXIgd2lsbCBub3QgYmUgYWJsZSB0byBn
ZXQgZGV0YWlscyBhYm91dCB3aGVyZSBhbgorICogICBlcnJvciBvY2N1cnJlZAorICogICAoaWYg
cGl2b3RTdGFydD09TlVMTCwgc2VlIGJlbG93KQorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5z
IHdoZW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAqIC0gdGhlIGVudGlyZSBzb3Vy
Y2UgdGV4dCBoYXMgYmVlbiBjb252ZXJ0ZWQgc3VjY2Vzc2Z1bGx5IHRvIHRoZSB0YXJnZXQgYnVm
ZmVyCisgKiAtIGEgdGFyZ2V0IGJ1ZmZlciBvdmVyZmxvdyBvY2N1cnJlZCAoVV9CVUZGRVJfT1ZF
UkZMT1dfRVJST1IpCisgKiAtIGEgY29udmVyc2lvbiBlcnJvciBvY2N1cnJlZAorICogICAob3Ro
ZXIgVV9GQUlMVVJFKCksIHNlZSBkZXNjcmlwdGlvbiBvZiBwRXJyb3JDb2RlKQorICoKKyAqIExp
bWl0YXRpb24gY29tcGFyZWQgdG8gdGhlIGRpcmVjdCB1c2Ugb2YKKyAqIHVjbnZfZnJvbVVuaWNv
ZGUoKSBhbmQgdWNudl90b1VuaWNvZGUoKToKKyAqIHVjbnZfY29udmVydEV4KCkgZG9lcyBub3Qg
cHJvdmlkZSBvZmZzZXQgaW5mb3JtYXRpb24uCisgKgorICogTGltaXRhdGlvbiBjb21wYXJlZCB0
byB1Y252X2Zyb21VQ2hhcnMoKSBhbmQgdWNudl90b1VDaGFycygpOgorICogdWNudl9jb252ZXJ0
RXgoKSBkb2VzIG5vdCBzdXBwb3J0IHByZWZsaWdodGluZyBkaXJlY3RseS4KKyAqCisgKiBTYW1w
bGUgY29kZSBmb3IgY29udmVydGluZyBhIHNpbmdsZSBzdHJpbmcgZnJvbQorICogb25lIGV4dGVy
bmFsIGNoYXJzZXQgdG8gVVRGLTgsIGlnbm9yaW5nIHRoZSBsb2NhdGlvbiBvZiBlcnJvcnM6Cisg
KgorICogXGNvZGUKKyAqIGludDMyX3QKKyAqIG15VG9VVEY4KFVDb252ZXJ0ZXIgKmNudiwKKyAq
ICAgICAgICAgIGNvbnN0IGNoYXIgKnMsIGludDMyX3QgbGVuZ3RoLAorICogICAgICAgICAgY2hh
ciAqdTgsIGludDMyX3QgY2FwYWNpdHksCisgKiAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JD
b2RlKSB7CisgKiAgICAgVUNvbnZlcnRlciAqdXRmOENudjsKKyAqICAgICBjaGFyICp0YXJnZXQ7
CisgKgorICogICAgIGlmKFVfRkFJTFVSRSgqcEVycm9yQ29kZSkpIHsKKyAqICAgICAgICAgcmV0
dXJuIDA7CisgKiAgICAgfQorICoKKyAqICAgICB1dGY4Q252PW15R2V0Q2FjaGVkVVRGOENvbnZl
cnRlcihwRXJyb3JDb2RlKTsKKyAqICAgICBpZihVX0ZBSUxVUkUoKnBFcnJvckNvZGUpKSB7Cisg
KiAgICAgICAgIHJldHVybiAwOworICogICAgIH0KKyAqCisgKiAgICAgdGFyZ2V0PXU4OworICog
ICAgIHVjbnZfY29udmVydEV4KGNudiwgdXRmOENudiwKKyAqICAgICAgICAgICAgICAgICAgICAm
dGFyZ2V0LCB1OCtjYXBhY2l0eSwKKyAqICAgICAgICAgICAgICAgICAgICAmcywgbGVuZ3RoPj0w
ID8gcytsZW5ndGggOiBOVUxMLAorICogICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5V
TEwsIE5VTEwsCisgKiAgICAgICAgICAgICAgICAgICAgVFJVRSwgVFJVRSwKKyAqICAgICAgICAg
ICAgICAgICAgICBwRXJyb3JDb2RlKTsKKyAqIAorICogICAgIG15UmVsZWFzZUNhY2hlZFVURjhD
b252ZXJ0ZXIodXRmOENudik7CisgKgorICogICAgIC8vIHJldHVybiB0aGUgb3V0cHV0IHN0cmlu
ZyBsZW5ndGgsIGJ1dCB3aXRob3V0IHByZWZsaWdodGluZworICogICAgIHJldHVybiAoaW50MzJf
dCkodGFyZ2V0LXU4KTsKKyAqIH0KKyAqIFxlbmRjb2RlCisgKgorICogQHBhcmFtIHRhcmdldENu
diAgICAgT3V0cHV0IGNvbnZlcnRlciwgdXNlZCB0byBjb252ZXJ0IGZyb20gdGhlIFVURi0xNiBw
aXZvdAorICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIHRhcmdldCB1c2luZyB1Y252X2Zy
b21Vbmljb2RlKCkuCisgKiBAcGFyYW0gc291cmNlQ252ICAgICBJbnB1dCBjb252ZXJ0ZXIsIHVz
ZWQgdG8gY29udmVydCBmcm9tIHRoZSBzb3VyY2UgdG8KKyAqICAgICAgICAgICAgICAgICAgICAg
IHRoZSBVVEYtMTYgcGl2b3QgdXNpbmcgdWNudl90b1VuaWNvZGUoKS4KKyAqIEBwYXJhbSB0YXJn
ZXQgICAgICAgIEkvTyBwYXJhbWV0ZXIsIHNhbWUgYXMgZm9yIHVjbnZfZnJvbVVDaGFycygpLgor
ICogICAgICAgICAgICAgICAgICAgICAgSW5wdXQ6ICp0YXJnZXQgcG9pbnRzIHRvIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIHRhcmdldCBidWZmZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBPdXRw
dXQ6ICp0YXJnZXQgcG9pbnRzIHRvIHRoZSBmaXJzdCB1bml0IGFmdGVyIHRoZSBsYXN0IGNoYXIg
d3JpdHRlbi4KKyAqIEBwYXJhbSB0YXJnZXRMaW1pdCAgIFBvaW50ZXIgdG8gdGhlIGZpcnN0IHVu
aXQgYWZ0ZXIgdGhlIHRhcmdldCBidWZmZXIuCisgKiBAcGFyYW0gc291cmNlICAgICAgICBJL08g
cGFyYW1ldGVyLCBzYW1lIGFzIGZvciB1Y252X3RvVUNoYXJzKCkuCisgKiAgICAgICAgICAgICAg
ICAgICAgICBJbnB1dDogKnNvdXJjZSBwb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc291
cmNlIGJ1ZmZlci4KKyAqICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogKnNvdXJjZSBwb2lu
dHMgdG8gdGhlIGZpcnN0IHVuaXQgYWZ0ZXIgdGhlIGxhc3QgY2hhciByZWFkLgorICogQHBhcmFt
IHNvdXJjZUxpbWl0ICAgUG9pbnRlciB0byB0aGUgZmlyc3QgdW5pdCBhZnRlciB0aGUgc291cmNl
IGJ1ZmZlci4KKyAqIEBwYXJhbSBwaXZvdFN0YXJ0ICAgIFBvaW50ZXIgdG8gdGhlIFVURi0xNiBw
aXZvdCBidWZmZXIuIElmIHBpdm90U3RhcnQ9PU5VTEwsCisgKiAgICAgICAgICAgICAgICAgICAg
ICB0aGVuIGFuIGludGVybmFsIGJ1ZmZlciBpcyB1c2VkIGFuZCB0aGUgb3RoZXIgcGl2b3QKKyAq
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBhcmUgaWdub3JlZCBhbmQgY2FuIGJlIE5V
TEwgYXMgd2VsbC4KKyAqIEBwYXJhbSBwaXZvdFNvdXJjZSAgIEkvTyBwYXJhbWV0ZXIsIHNhbWUg
YXMgc291cmNlIGluIHVjbnZfZnJvbVVDaGFycygpIGZvcgorICogICAgICAgICAgICAgICAgICAg
ICAgY29udmVyc2lvbiBmcm9tIHRoZSBwaXZvdCBidWZmZXIgdG8gdGhlIHRhcmdldCBidWZmZXIu
CisgKiBAcGFyYW0gcGl2b3RUYXJnZXQgICBJL08gcGFyYW1ldGVyLCBzYW1lIGFzIHRhcmdldCBp
biB1Y252X3RvVUNoYXJzKCkgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9u
IGZyb20gdGhlIHNvdXJjZSBidWZmZXIgdG8gdGhlIHBpdm90IGJ1ZmZlci4KKyAqICAgICAgICAg
ICAgICAgICAgICAgIEl0IG11c3QgYmUgcGl2b3RTdGFydDw9KnBpdm90U291cmNlPD0qcGl2b3RU
YXJnZXQ8PXBpdm90TGltaXQKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBwaXZvdFN0YXJ0
PHBpdm90TGltaXQgKHVubGVzcyBwaXZvdFN0YXJ0PT1OVUxMKS4KKyAqIEBwYXJhbSBwaXZvdExp
bWl0ICAgIFBvaW50ZXIgdG8gdGhlIGZpcnN0IHVuaXQgYWZ0ZXIgdGhlIHBpdm90IGJ1ZmZlci4K
KyAqIEBwYXJhbSByZXNldCAgICAgICAgIElmIFRSVUUsIHRoZW4gdWNudl9yZXNldFRvVW5pY29k
ZShzb3VyY2VDbnYpIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgdWNudl9yZXNldEZyb21V
bmljb2RlKHRhcmdldENudikgYXJlIGNhbGxlZCwgYW5kIHRoZQorICogICAgICAgICAgICAgICAg
ICAgICAgcGl2b3QgcG9pbnRlcnMgYXJlIHJlc2V0ICgqcGl2b3RUYXJnZXQ9KnBpdm90U291cmNl
PXBpdm90U3RhcnQpLgorICogQHBhcmFtIGZsdXNoICAgICAgICAgSWYgdHJ1ZSwgaW5kaWNhdGVz
IHRoZSBlbmQgb2YgdGhlIGlucHV0LgorICogICAgICAgICAgICAgICAgICAgICAgUGFzc2VkIGRp
cmVjdGx5IHRvIHVjbnZfdG9Vbmljb2RlKCksIGFuZCBjYXJyaWVkIG92ZXIgdG8KKyAqICAgICAg
ICAgICAgICAgICAgICAgIHVjbnZfZnJvbVVuaWNvZGUoKSB3aGVuIHRoZSBzb3VyY2UgaXMgZW1w
dHkgYXMgd2VsbC4KKyAqIEBwYXJhbSBwRXJyb3JDb2RlICAgIElDVSBlcnJvciBjb2RlIGluL291
dCBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAgICAgICAgICAgICBNdXN0IGZ1bGZpbGwgVV9TVUND
RVNTIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFVf
QlVGRkVSX09WRVJGTE9XX0VSUk9SIGFsd2F5cyByZWZlcnMgdG8gdGhlIHRhcmdldCBidWZmZXIK
KyAqICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2Ugb3ZlcmZsb3dzIGludG8gdGhlIHBpdm90
IGJ1ZmZlciBhcmUgaGFuZGxlZCBpbnRlcm5hbGx5LgorICogICAgICAgICAgICAgICAgICAgICAg
T3RoZXIgY29udmVyc2lvbiBlcnJvcnMgYXJlIGZyb20gdGhlIHNvdXJjZS10by1waXZvdAorICog
ICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbiBpZiAqcGl2b3RTb3VyY2U9PXBpdm90U3Rh
cnQsIG90aGVyd2lzZSBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgcGl2b3QtdG8t
dGFyZ2V0IGNvbnZlcnNpb24uCisgKgorICogQHNlZSB1Y252X2NvbnZlcnQKKyAqIEBzZWUgdWNu
dl9mcm9tQWxnb3JpdGhtaWMKKyAqIEBzZWUgdWNudl90b0FsZ29yaXRobWljCisgKiBAc2VlIHVj
bnZfZnJvbVVuaWNvZGUKKyAqIEBzZWUgdWNudl90b1VuaWNvZGUKKyAqIEBzZWUgdWNudl9mcm9t
VUNoYXJzCisgKiBAc2VlIHVjbnZfdG9VQ2hhcnMKKyAqIEBzdGFibGUgSUNVIDIuNgorICovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWNudl9jb252ZXJ0RXgoVUNvbnZlcnRlciAqdGFyZ2V0
Q252LCBVQ29udmVydGVyICpzb3VyY2VDbnYsCisgICAgICAgICAgICAgICBjaGFyICoqdGFyZ2V0
LCBjb25zdCBjaGFyICp0YXJnZXRMaW1pdCwKKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipz
b3VyY2UsIGNvbnN0IGNoYXIgKnNvdXJjZUxpbWl0LAorICAgICAgICAgICAgICAgVUNoYXIgKnBp
dm90U3RhcnQsIFVDaGFyICoqcGl2b3RTb3VyY2UsCisgICAgICAgICAgICAgICBVQ2hhciAqKnBp
dm90VGFyZ2V0LCBjb25zdCBVQ2hhciAqcGl2b3RMaW1pdCwKKyAgICAgICAgICAgICAgIFVCb29s
IHJlc2V0LCBVQm9vbCBmbHVzaCwKKyAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNv
ZGUpOworCisvKioKKyAqIENvbnZlcnQgZnJvbSBvbmUgZXh0ZXJuYWwgY2hhcnNldCB0byBhbm90
aGVyLgorICogSW50ZXJuYWxseSwgdHdvIGNvbnZlcnRlcnMgYXJlIG9wZW5lZCBhY2NvcmRpbmcg
dG8gdGhlIG5hbWUgYXJndW1lbnRzLAorICogdGhlbiB0aGUgdGV4dCBpcyBjb252ZXJ0ZWQgdG8g
YW5kIGZyb20gdGhlIDE2LWJpdCBVbmljb2RlICJwaXZvdCIKKyAqIHVzaW5nIHVjbnZfY29udmVy
dEV4KCksIHRoZW4gdGhlIGNvbnZlcnRlcnMgYXJlIGNsb3NlZCBhZ2Fpbi4KKyAqCisgKiBUaGlz
IGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24sIG5vdCBhbiBlZmZpY2llbnQgd2F5IHRvIGNvbnZl
cnQgYSBsb3Qgb2YgdGV4dDoKKyAqIHVjbnZfY29udmVydCgpCisgKiAtIHRha2VzIGNoYXJzZXQg
bmFtZXMsIG5vdCBjb252ZXJ0ZXIgb2JqZWN0cywgc28gdGhhdAorICogICAtIHR3byBjb252ZXJ0
ZXJzIGFyZSBvcGVuZWQgZm9yIGVhY2ggY2FsbAorICogICAtIG9ubHkgc2luZ2xlLXN0cmluZyBj
b252ZXJzaW9uIGlzIHBvc3NpYmxlLCBub3Qgc3RyZWFtaW5nIG9wZXJhdGlvbgorICogLSBkb2Vz
IG5vdCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiB0byBmaW5kIG91dCwKKyAqICAgaW4gY2Fz
ZSBvZiBmYWlsdXJlLCB3aGV0aGVyIHRoZSB0b1VuaWNvZGUgb3IKKyAqICAgdGhlIGZyb21Vbmlj
b2RlIGNvbnZlcnNpb24gZmFpbGVkCisgKiAtIGFsbG93cyBOVUwtdGVybWluYXRlZCBpbnB1dAor
ICogICAob25seSBhIHNpbmdsZSBOVUwgYnl0ZSwgd2lsbCBub3Qgd29yayBmb3IgY2hhcnNldHMg
d2l0aCBtdWx0aS1ieXRlIE5VTHMpCisgKiAgIChpZiBzb3VyY2VMZW5ndGg9PS0xLCBzZWUgcGFy
YW1ldGVycykKKyAqIC0gdGVybWluYXRlIHdpdGggYSBOVUwgb24gb3V0cHV0CisgKiAgIChvbmx5
IGEgc2luZ2xlIE5VTCBieXRlLCBub3QgdXNlZnVsIGZvciBjaGFyc2V0cyB3aXRoIG11bHRpLWJ5
dGUgTlVMcyksCisgKiAgIG9yIHNldCBVX1NUUklOR19OT1RfVEVSTUlOQVRFRF9XQVJOSU5HIGlm
IHRoZSBvdXRwdXQgZXhhY3RseSBmaWxscworICogICB0aGUgdGFyZ2V0IGJ1ZmZlcgorICogLSBh
IHBpdm90IGJ1ZmZlciBpcyBwcm92aWRlZCBpbnRlcm5hbGx5CisgKgorICogVGhlIGZ1bmN0aW9u
IHJldHVybnMgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOgorICogLSB0aGUgZW50
aXJlIHNvdXJjZSB0ZXh0IGhhcyBiZWVuIGNvbnZlcnRlZCBzdWNjZXNzZnVsbHkgdG8gdGhlIHRh
cmdldCBidWZmZXIKKyAqICAgYW5kIGVpdGhlciB0aGUgdGFyZ2V0IGJ1ZmZlciBpcyB0ZXJtaW5h
dGVkIHdpdGggYSBzaW5nbGUgTlVMIGJ5dGUKKyAqICAgb3IgdGhlIGVycm9yIGNvZGUgaXMgc2V0
IHRvIFVfU1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcKKyAqIC0gYSB0YXJnZXQgYnVmZmVy
IG92ZXJmbG93IG9jY3VycmVkIChVX0JVRkZFUl9PVkVSRkxPV19FUlJPUikKKyAqICAgYW5kIHRo
ZSBmdWxsIG91dHB1dCBzdHJpbmcgbGVuZ3RoIGlzIHJldHVybmVkICgicHJlZmxpZ2h0aW5nIikK
KyAqIC0gYSBjb252ZXJzaW9uIGVycm9yIG9jY3VycmVkCisgKiAgIChvdGhlciBVX0ZBSUxVUkUo
KSwgc2VlIGRlc2NyaXB0aW9uIG9mIHBFcnJvckNvZGUpCisgKgorICogQHBhcmFtIHRvQ29udmVy
dGVyTmFtZSAgIFRoZSBuYW1lIG9mIHRoZSBjb252ZXJ0ZXIgdGhhdCBpcyB1c2VkIHRvIGNvbnZl
cnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBVVEYtMTYgcGl2b3QgYnVm
ZmVyIHRvIHRoZSB0YXJnZXQuCisgKiBAcGFyYW0gZnJvbUNvbnZlcnRlck5hbWUgVGhlIG5hbWUg
b2YgdGhlIGNvbnZlcnRlciB0aGF0IGlzIHVzZWQgdG8gY29udmVydAorICogICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyb20gdGhlIHNvdXJjZSB0byB0aGUgVVRGLTE2IHBpdm90IGJ1ZmZlci4K
KyAqIEBwYXJhbSB0YXJnZXQgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBvdXRwdXQgYnVmZmVy
LgorICogQHBhcmFtIHRhcmdldENhcGFjaXR5ICAgIENhcGFjaXR5IG9mIHRoZSB0YXJnZXQsIGlu
IGJ5dGVzLgorICogQHBhcmFtIHNvdXJjZSAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0
IGJ1ZmZlci4KKyAqIEBwYXJhbSBzb3VyY2VMZW5ndGggICAgICBMZW5ndGggb2YgdGhlIGlucHV0
IHRleHQsIGluIGJ5dGVzLCBvciAtMSBmb3IgTlVMLXRlcm1pbmF0ZWQgaW5wdXQuCisgKiBAcGFy
YW0gcEVycm9yQ29kZSAgICAgICAgSUNVIGVycm9yIGNvZGUgaW4vb3V0IHBhcmFtZXRlci4KKyAq
ICAgICAgICAgICAgICAgICAgICAgICAgICBNdXN0IGZ1bGZpbGwgVV9TVUNDRVNTIGJlZm9yZSB0
aGUgZnVuY3Rpb24gY2FsbC4KKyAqIEByZXR1cm4gTGVuZ3RoIG9mIHRoZSBjb21wbGV0ZSBvdXRw
dXQgdGV4dCBpbiBieXRlcywgZXZlbiBpZiBpdCBleGNlZWRzIHRoZSB0YXJnZXRDYXBhY2l0eQor
ICogICAgICAgICBhbmQgYSBVX0JVRkZFUl9PVkVSRkxPV19FUlJPUiBpcyBzZXQuCisgKgorICog
QHNlZSB1Y252X2NvbnZlcnRFeAorICogQHNlZSB1Y252X2Zyb21BbGdvcml0aG1pYworICogQHNl
ZSB1Y252X3RvQWxnb3JpdGhtaWMKKyAqIEBzZWUgdWNudl9mcm9tVW5pY29kZQorICogQHNlZSB1
Y252X3RvVW5pY29kZQorICogQHNlZSB1Y252X2Zyb21VQ2hhcnMKKyAqIEBzZWUgdWNudl90b1VD
aGFycworICogQHNlZSB1Y252X2dldE5leHRVQ2hhcgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8K
K1VfU1RBQkxFIGludDMyX3QgVV9FWFBPUlQyCit1Y252X2NvbnZlcnQoY29uc3QgY2hhciAqdG9D
b252ZXJ0ZXJOYW1lLAorICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZyb21Db252ZXJ0ZXJOYW1l
LAorICAgICAgICAgICAgIGNoYXIgKnRhcmdldCwKKyAgICAgICAgICAgICBpbnQzMl90IHRhcmdl
dENhcGFjaXR5LAorICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSwKKyAgICAgICAgICAg
ICBpbnQzMl90IHNvdXJjZUxlbmd0aCwKKyAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JD
b2RlKTsKKworLyoqCisgKiBDb252ZXJ0IGZyb20gb25lIGV4dGVybmFsIGNoYXJzZXQgdG8gYW5v
dGhlci4KKyAqIEludGVybmFsbHksIHRoZSB0ZXh0IGlzIGNvbnZlcnRlZCB0byBhbmQgZnJvbSB0
aGUgMTYtYml0IFVuaWNvZGUgInBpdm90IgorICogdXNpbmcgdWNudl9jb252ZXJ0RXgoKS4gdWNu
dl90b0FsZ29yaXRobWljKCkgd29ya3MgZXhhY3RseSBsaWtlIHVjbnZfY29udmVydCgpCisgKiBl
eGNlcHQgdGhhdCB0aGUgdHdvIGNvbnZlcnRlcnMgbmVlZCBub3QgYmUgbG9va2VkIHVwIGFuZCBv
cGVuZWQgY29tcGxldGVseS4KKyAqCisgKiBUaGUgc291cmNlLXRvLXBpdm90IGNvbnZlcnNpb24g
dXNlcyB0aGUgY252IGNvbnZlcnRlciBwYXJhbWV0ZXIuCisgKiBUaGUgcGl2b3QtdG8tdGFyZ2V0
IGNvbnZlcnNpb24gdXNlcyBhIHB1cmVseSBhbGdvcml0aG1pYyBjb252ZXJ0ZXIKKyAqIGFjY29y
ZGluZyB0byB0aGUgc3BlY2lmaWVkIHR5cGUsIGUuZy4sIFVDTlZfVVRGOCBmb3IgYSBVVEYtOCBj
b252ZXJ0ZXIuCisgKgorICogSW50ZXJuYWxseSwgdGhlIGFsZ29yaXRobWljIGNvbnZlcnRlciBp
cyBvcGVuZWQgYW5kIGNsb3NlZCBmb3IgZWFjaAorICogZnVuY3Rpb24gY2FsbCwgd2hpY2ggaXMg
bW9yZSBlZmZpY2llbnQgdGhhbiB1c2luZyB0aGUgcHVibGljIHVjbnZfb3BlbigpCisgKiBidXQg
c29tZXdoYXQgbGVzcyBlZmZpY2llbnQgdGhhbiBvbmx5IHJlc2V0dGluZyBhbiBleGlzdGluZyBj
b252ZXJ0ZXIKKyAqIGFuZCB1c2luZyB1Y252X2NvbnZlcnRFeCgpLgorICoKKyAqIFRoaXMgZnVu
Y3Rpb24gaXMgbW9yZSBjb252ZW5pZW50IHRoYW4gdWNudl9jb252ZXJ0RXgoKSBmb3Igc2luZ2xl
LXN0cmluZworICogY29udmVyc2lvbnMsIGVzcGVjaWFsbHkgd2hlbiAicHJlZmxpZ2h0aW5nIiBp
cyBkZXNpcmVkIChyZXR1cm5pbmcgdGhlIGxlbmd0aAorICogb2YgdGhlIGNvbXBsZXRlIG91dHB1
dCBldmVuIGlmIGl0IGRvZXMgbm90IGZpdCBpbnRvIHRoZSB0YXJnZXQgYnVmZmVyOworICogc2Vl
IHRoZSBVc2VyIEd1aWRlIFN0cmluZ3MgY2hhcHRlcikuIFNlZSB1Y252X2NvbnZlcnQoKSBmb3Ig
ZGV0YWlscy4KKyAqCisgKiBAcGFyYW0gYWxnb3JpdGhtaWNUeXBlICAgVUNvbnZlcnRlclR5cGUg
Y29uc3RhbnQgaWRlbnRpZnlpbmcgdGhlIGRlc2lyZWQgdGFyZ2V0CisgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhcnNldCBhcyBhIHB1cmVseSBhbGdvcml0aG1pYyBjb252ZXJ0ZXIuCisg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhvc2UgYXJlIGNvbnZlcnRlcnMgZm9yIFVuaWNv
ZGUgY2hhcnNldHMgbGlrZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIFVURi04LCBCT0NV
LTEsIFNDU1UsIFVURi03LCBJTUFQLW1haWxib3gtbmFtZSwgZXRjLiwKKyAqICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcyB3ZWxsIGFzIFVTLUFTQ0lJIGFuZCBJU08tODg1OS0xLgorICogQHBh
cmFtIGNudiAgICAgICAgICAgICAgIFRoZSBjb252ZXJ0ZXIgdGhhdCBpcyB1c2VkIHRvIGNvbnZl
cnQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBzb3VyY2UgdG8gdGhlIFVU
Ri0xNiBwaXZvdCBidWZmZXIuCisgKiBAcGFyYW0gdGFyZ2V0ICAgICAgICAgICAgUG9pbnRlciB0
byB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSB0YXJnZXRDYXBhY2l0eSAgICBDYXBhY2l0
eSBvZiB0aGUgdGFyZ2V0LCBpbiBieXRlcy4KKyAqIEBwYXJhbSBzb3VyY2UgICAgICAgICAgICBQ
b2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gc291cmNlTGVuZ3RoICAgICAg
TGVuZ3RoIG9mIHRoZSBpbnB1dCB0ZXh0LCBpbiBieXRlcworICogQHBhcmFtIHBFcnJvckNvZGUg
ICAgICAgIElDVSBlcnJvciBjb2RlIGluL291dCBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgTXVzdCBmdWxmaWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNh
bGwuCisgKiBAcmV0dXJuIExlbmd0aCBvZiB0aGUgY29tcGxldGUgb3V0cHV0IHRleHQgaW4gYnl0
ZXMsIGV2ZW4gaWYgaXQgZXhjZWVkcyB0aGUgdGFyZ2V0Q2FwYWNpdHkKKyAqICAgICAgICAgYW5k
IGEgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMgc2V0LgorICoKKyAqIEBzZWUgdWNudl9mcm9t
QWxnb3JpdGhtaWMKKyAqIEBzZWUgdWNudl9jb252ZXJ0CisgKiBAc2VlIHVjbnZfY29udmVydEV4
CisgKiBAc2VlIHVjbnZfZnJvbVVuaWNvZGUKKyAqIEBzZWUgdWNudl90b1VuaWNvZGUKKyAqIEBz
ZWUgdWNudl9mcm9tVUNoYXJzCisgKiBAc2VlIHVjbnZfdG9VQ2hhcnMKKyAqIEBzdGFibGUgSUNV
IDIuNgorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNudl90b0FsZ29yaXRobWlj
KFVDb252ZXJ0ZXJUeXBlIGFsZ29yaXRobWljVHlwZSwKKyAgICAgICAgICAgICAgICAgICBVQ29u
dmVydGVyICpjbnYsCisgICAgICAgICAgICAgICAgICAgY2hhciAqdGFyZ2V0LCBpbnQzMl90IHRh
cmdldENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50
MzJfdCBzb3VyY2VMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9y
Q29kZSk7CisKKy8qKgorICogQ29udmVydCBmcm9tIG9uZSBleHRlcm5hbCBjaGFyc2V0IHRvIGFu
b3RoZXIuCisgKiBJbnRlcm5hbGx5LCB0aGUgdGV4dCBpcyBjb252ZXJ0ZWQgdG8gYW5kIGZyb20g
dGhlIDE2LWJpdCBVbmljb2RlICJwaXZvdCIKKyAqIHVzaW5nIHVjbnZfY29udmVydEV4KCkuIHVj
bnZfZnJvbUFsZ29yaXRobWljKCkgd29ya3MgZXhhY3RseSBsaWtlIHVjbnZfY29udmVydCgpCisg
KiBleGNlcHQgdGhhdCB0aGUgdHdvIGNvbnZlcnRlcnMgbmVlZCBub3QgYmUgbG9va2VkIHVwIGFu
ZCBvcGVuZWQgY29tcGxldGVseS4KKyAqCisgKiBUaGUgc291cmNlLXRvLXBpdm90IGNvbnZlcnNp
b24gdXNlcyBhIHB1cmVseSBhbGdvcml0aG1pYyBjb252ZXJ0ZXIKKyAqIGFjY29yZGluZyB0byB0
aGUgc3BlY2lmaWVkIHR5cGUsIGUuZy4sIFVDTlZfVVRGOCBmb3IgYSBVVEYtOCBjb252ZXJ0ZXIu
CisgKiBUaGUgcGl2b3QtdG8tdGFyZ2V0IGNvbnZlcnNpb24gdXNlcyB0aGUgY252IGNvbnZlcnRl
ciBwYXJhbWV0ZXIuCisgKgorICogSW50ZXJuYWxseSwgdGhlIGFsZ29yaXRobWljIGNvbnZlcnRl
ciBpcyBvcGVuZWQgYW5kIGNsb3NlZCBmb3IgZWFjaAorICogZnVuY3Rpb24gY2FsbCwgd2hpY2gg
aXMgbW9yZSBlZmZpY2llbnQgdGhhbiB1c2luZyB0aGUgcHVibGljIHVjbnZfb3BlbigpCisgKiBi
dXQgc29tZXdoYXQgbGVzcyBlZmZpY2llbnQgdGhhbiBvbmx5IHJlc2V0dGluZyBhbiBleGlzdGlu
ZyBjb252ZXJ0ZXIKKyAqIGFuZCB1c2luZyB1Y252X2NvbnZlcnRFeCgpLgorICoKKyAqIFRoaXMg
ZnVuY3Rpb24gaXMgbW9yZSBjb252ZW5pZW50IHRoYW4gdWNudl9jb252ZXJ0RXgoKSBmb3Igc2lu
Z2xlLXN0cmluZworICogY29udmVyc2lvbnMsIGVzcGVjaWFsbHkgd2hlbiAicHJlZmxpZ2h0aW5n
IiBpcyBkZXNpcmVkIChyZXR1cm5pbmcgdGhlIGxlbmd0aAorICogb2YgdGhlIGNvbXBsZXRlIG91
dHB1dCBldmVuIGlmIGl0IGRvZXMgbm90IGZpdCBpbnRvIHRoZSB0YXJnZXQgYnVmZmVyOworICog
c2VlIHRoZSBVc2VyIEd1aWRlIFN0cmluZ3MgY2hhcHRlcikuIFNlZSB1Y252X2NvbnZlcnQoKSBm
b3IgZGV0YWlscy4KKyAqCisgKiBAcGFyYW0gY252ICAgICAgICAgICAgICAgVGhlIGNvbnZlcnRl
ciB0aGF0IGlzIHVzZWQgdG8gY29udmVydAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGZy
b20gdGhlIFVURi0xNiBwaXZvdCBidWZmZXIgdG8gdGhlIHRhcmdldC4KKyAqIEBwYXJhbSBhbGdv
cml0aG1pY1R5cGUgICBVQ29udmVydGVyVHlwZSBjb25zdGFudCBpZGVudGlmeWluZyB0aGUgZGVz
aXJlZCBzb3VyY2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0IGFzIGEgcHVy
ZWx5IGFsZ29yaXRobWljIGNvbnZlcnRlci4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBU
aG9zZSBhcmUgY29udmVydGVycyBmb3IgVW5pY29kZSBjaGFyc2V0cyBsaWtlCisgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVRGLTgsIEJPQ1UtMSwgU0NTVSwgVVRGLTcsIElNQVAtbWFpbGJv
eC1uYW1lLCBldGMuLAorICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgVVMt
QVNDSUkgYW5kIElTTy04ODU5LTEuCisgKiBAcGFyYW0gdGFyZ2V0ICAgICAgICAgICAgUG9pbnRl
ciB0byB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSB0YXJnZXRDYXBhY2l0eSAgICBDYXBh
Y2l0eSBvZiB0aGUgdGFyZ2V0LCBpbiBieXRlcy4KKyAqIEBwYXJhbSBzb3VyY2UgICAgICAgICAg
ICBQb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gc291cmNlTGVuZ3RoICAg
ICAgTGVuZ3RoIG9mIHRoZSBpbnB1dCB0ZXh0LCBpbiBieXRlcworICogQHBhcmFtIHBFcnJvckNv
ZGUgICAgICAgIElDVSBlcnJvciBjb2RlIGluL291dCBwYXJhbWV0ZXIuCisgKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgTXVzdCBmdWxmaWxsIFVfU1VDQ0VTUyBiZWZvcmUgdGhlIGZ1bmN0aW9u
IGNhbGwuCisgKiBAcmV0dXJuIExlbmd0aCBvZiB0aGUgY29tcGxldGUgb3V0cHV0IHRleHQgaW4g
Ynl0ZXMsIGV2ZW4gaWYgaXQgZXhjZWVkcyB0aGUgdGFyZ2V0Q2FwYWNpdHkKKyAqICAgICAgICAg
YW5kIGEgVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IgaXMgc2V0LgorICoKKyAqIEBzZWUgdWNudl9m
cm9tQWxnb3JpdGhtaWMKKyAqIEBzZWUgdWNudl9jb252ZXJ0CisgKiBAc2VlIHVjbnZfY29udmVy
dEV4CisgKiBAc2VlIHVjbnZfZnJvbVVuaWNvZGUKKyAqIEBzZWUgdWNudl90b1VuaWNvZGUKKyAq
IEBzZWUgdWNudl9mcm9tVUNoYXJzCisgKiBAc2VlIHVjbnZfdG9VQ2hhcnMKKyAqIEBzdGFibGUg
SUNVIDIuNgorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNudl9mcm9tQWxnb3Jp
dGhtaWMoVUNvbnZlcnRlciAqY252LAorICAgICAgICAgICAgICAgICAgICAgVUNvbnZlcnRlclR5
cGUgYWxnb3JpdGhtaWNUeXBlLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGFyZ2V0LCBp
bnQzMl90IHRhcmdldENhcGFjaXR5LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
c291cmNlLCBpbnQzMl90IHNvdXJjZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgIFVFcnJv
ckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIEZyZWVzIHVwIG1lbW9yeSBvY2N1cGllZCBi
eSB1bnVzZWQsIGNhY2hlZCBjb252ZXJ0ZXIgc2hhcmVkIGRhdGEuCisgKgorICogQHJldHVybiB0
aGUgbnVtYmVyIG9mIGNhY2hlZCBjb252ZXJ0ZXJzIHN1Y2Nlc3NmdWxseSBkZWxldGVkCisgKiBA
c2VlIHVjbnZfY2xvc2UKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSBpbnQzMl90
IFVfRVhQT1JUMgordWNudl9mbHVzaENhY2hlKHZvaWQpOworCisvKioKKyAqIFJldHVybnMgdGhl
IG51bWJlciBvZiBhdmFpbGFibGUgY29udmVydGVycywgYXMgcGVyIHRoZSBhbGlhcyBmaWxlLgor
ICoKKyAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBhdmFpbGFibGUgY29udmVydGVycworICogQHNl
ZSB1Y252X2dldEF2YWlsYWJsZU5hbWUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBpbnQzMl90IFVfRVhQT1JUMgordWNudl9jb3VudEF2YWlsYWJsZSh2b2lkKTsKKworLyoqCisg
KiBHZXRzIHRoZSBjYW5vbmljYWwgY29udmVydGVyIG5hbWUgb2YgdGhlIHNwZWNpZmllZCBjb252
ZXJ0ZXIgZnJvbSBhIGxpc3Qgb2YKKyAqIGFsbCBhdmFpbGFibGUgY29udmVydGVycyBjb250YWll
ZCBpbiB0aGUgYWxpYXMgZmlsZS4gQWxsIGNvbnZlcnRlcnMKKyAqIGluIHRoaXMgbGlzdCBjYW4g
YmUgb3BlbmVkLgorICoKKyAqIEBwYXJhbSBuIHRoZSBpbmRleCB0byBhIGNvbnZlcnRlciBhdmFp
bGFibGUgb24gdGhlIHN5c3RlbSAoaW4gdGhlIHJhbmdlIDxUVD5bMC4udWNudl9jb3VudEF2YWlh
YmxlKCldPC9UVD4pCisgKiBAcmV0dXJuIGEgcG9pbnRlciBhIHN0cmluZyAobGlicmFyeSBvd25l
ZCksIG9yIDxUVD5OVUxMPC9UVD4gaWYgdGhlIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCisgKiBA
c2VlIHVjbnZfY291bnRBdmFpbGFibGUKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBjb25zdCBjaGFyKiBVX0VYUE9SVDIKK3VjbnZfZ2V0QXZhaWxhYmxlTmFtZShpbnQzMl90IG4p
OworCisvKioKKyAqIFJldHVybnMgYSBVRW51bWVyYXRpb24gdG8gZW51bWVyYXRlIGFsbCBvZiB0
aGUgY2Fub25pY2FsIGNvbnZlcnRlcgorICogbmFtZXMsIGFzIHBlciB0aGUgYWxpYXMgZmlsZSwg
cmVnYXJkbGVzcyBvZiB0aGUgYWJpbGl0eSB0byBvcGVuIGVhY2gKKyAqIGNvbnZlcnRlci4KKyAq
CisgKiBAcmV0dXJuIEEgVUVudW1lcmF0aW9uIG9iamVjdCBmb3IgZ2V0dGluZyBhbGwgdGhlIHJl
Y29nbml6ZWQgY2Fub25pY2FsCisgKiAgIGNvbnZlcnRlciBuYW1lcy4KKyAqIEBzZWUgdWNudl9n
ZXRBdmFpbGFibGVOYW1lCisgKiBAc2VlIHVlbnVtX2Nsb3NlCisgKiBAc2VlIHVlbnVtX25leHQK
KyAqIEBzdGFibGUgSUNVIDIuNAorICovCitVX1NUQUJMRSBVRW51bWVyYXRpb24gKiBVX0VYUE9S
VDIKK3VjbnZfb3BlbkFsbE5hbWVzKFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAq
IEdpdmVzIHRoZSBudW1iZXIgb2YgYWxpYXNlcyBmb3IgYSBnaXZlbiBjb252ZXJ0ZXIgb3IgYWxp
YXMgbmFtZS4KKyAqIElmIHRoZSBhbGlhcyBpcyBhbWJpZ3VvdXMsIHRoZW4gdGhlIHByZWZlcnJl
ZCBjb252ZXJ0ZXIgaXMgdXNlZAorICogYW5kIHRoZSBzdGF0dXMgaXMgc2V0IHRvIFVfQU1CSUdV
T1VTX0FMSUFTX1dBUk5JTkcuCisgKiBUaGlzIG1ldGhvZCBvbmx5IGVudW1lcmF0ZXMgdGhlIGxp
c3RlZCBlbnRyaWVzIGluIHRoZSBhbGlhcyBmaWxlLgorICogQHBhcmFtIGFsaWFzIGFsaWFzIG5h
bWUKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIGVycm9yIHN0YXR1cworICogQHJldHVybiBudW1iZXIg
b2YgbmFtZXMgb24gYWxpYXMgbGlzdCBmb3IgZ2l2ZW4gYWxpYXMKKyAqIEBzdGFibGUgSUNVIDIu
MAorICovCitVX1NUQUJMRSB1aW50MTZfdCBVX0VYUE9SVDIgCit1Y252X2NvdW50QWxpYXNlcyhj
b25zdCBjaGFyICphbGlhcywgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogR2l2
ZXMgdGhlIG5hbWUgb2YgdGhlIGFsaWFzIGF0IGdpdmVuIGluZGV4IG9mIGFsaWFzIGxpc3QuCisg
KiBUaGlzIG1ldGhvZCBvbmx5IGVudW1lcmF0ZXMgdGhlIGxpc3RlZCBlbnRyaWVzIGluIHRoZSBh
bGlhcyBmaWxlLgorICogSWYgdGhlIGFsaWFzIGlzIGFtYmlndW91cywgdGhlbiB0aGUgcHJlZmVy
cmVkIGNvbnZlcnRlciBpcyB1c2VkCisgKiBhbmQgdGhlIHN0YXR1cyBpcyBzZXQgdG8gVV9BTUJJ
R1VPVVNfQUxJQVNfV0FSTklORy4KKyAqIEBwYXJhbSBhbGlhcyBhbGlhcyBuYW1lCisgKiBAcGFy
YW0gbiBpbmRleCBpbiBhbGlhcyBsaXN0CisgKiBAcGFyYW0gcEVycm9yQ29kZSByZXN1bHQgb2Yg
b3BlcmF0aW9uCisgKiBAcmV0dXJuIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGFsaWFzIGF0IGdp
dmVuIGluZGV4CisgKiBAc2VlIHVjbnZfY291bnRBbGlhc2VzCisgKiBAc3RhYmxlIElDVSAyLjAK
KyAqLworVV9TVEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JUMiAKK3VjbnZfZ2V0QWxpYXMoY29u
c3QgY2hhciAqYWxpYXMsIHVpbnQxNl90IG4sIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisv
KioKKyAqIEZpbGwtdXAgdGhlIGxpc3Qgb2YgYWxpYXMgbmFtZXMgZm9yIHRoZSBnaXZlbiBhbGlh
cy4KKyAqIFRoaXMgbWV0aG9kIG9ubHkgZW51bWVyYXRlcyB0aGUgbGlzdGVkIGVudHJpZXMgaW4g
dGhlIGFsaWFzIGZpbGUuCisgKiBJZiB0aGUgYWxpYXMgaXMgYW1iaWd1b3VzLCB0aGVuIHRoZSBw
cmVmZXJyZWQgY29udmVydGVyIGlzIHVzZWQKKyAqIGFuZCB0aGUgc3RhdHVzIGlzIHNldCB0byBV
X0FNQklHVU9VU19BTElBU19XQVJOSU5HLgorICogQHBhcmFtIGFsaWFzIGFsaWFzIG5hbWUKKyAq
IEBwYXJhbSBhbGlhc2VzIGZpbGwtaW4gbGlzdCwgYWxpYXNlcyBpcyBhIHBvaW50ZXIgdG8gYW4g
YXJyYXkgb2YKKyAqICAgICAgICA8Y29kZT51Y252X2NvdW50QWxpYXNlcygpPC9jb2RlPiBzdHJp
bmctcG9pbnRlcnMKKyAqICAgICAgICAoPGNvZGU+Y29uc3QgY2hhciAqPC9jb2RlPikgdGhhdCB3
aWxsIGJlIGZpbGxlZCBpbi4KKyAqICAgICAgICBUaGUgc3RyaW5ncyB0aGVtc2VsdmVzIGFyZSBv
d25lZCBieSB0aGUgbGlicmFyeS4KKyAqIEBwYXJhbSBwRXJyb3JDb2RlIHJlc3VsdCBvZiBvcGVy
YXRpb24KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAK
K3VjbnZfZ2V0QWxpYXNlcyhjb25zdCBjaGFyICphbGlhcywgY29uc3QgY2hhciAqKmFsaWFzZXMs
IFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIFJldHVybiBhIG5ldyBVRW51bWVy
YXRpb24gb2JqZWN0IGZvciBlbnVtZXJhdGluZyBhbGwgdGhlCisgKiBhbGlhcyBuYW1lcyBmb3Ig
YSBnaXZlbiBjb252ZXJ0ZXIgdGhhdCBhcmUgcmVjb2duaXplZCBieSBhIHN0YW5kYXJkLgorICog
VGhpcyBtZXRob2Qgb25seSBlbnVtZXJhdGVzIHRoZSBsaXN0ZWQgZW50cmllcyBpbiB0aGUgYWxp
YXMgZmlsZS4KKyAqIFRoZSBjb252cnRycy50eHQgZmlsZSBjYW4gYmUgbW9kaWZpZWQgdG8gY2hh
bmdlIHRoZSByZXN1bHRzIG9mCisgKiB0aGlzIGZ1bmN0aW9uLgorICogVGhlIGZpcnN0IHJlc3Vs
dCBpbiB0aGlzIGxpc3QgaXMgdGhlIHNhbWUgcmVzdWx0IGdpdmVuIGJ5CisgKiA8Y29kZT51Y252
X2dldFN0YW5kYXJkTmFtZTwvY29kZT4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGFsaWFzIGZvcgor
ICogdGhlIHNwZWNpZmllZCBzdGFuZGFyZCBuYW1lLiBUaGUgcmV0dXJuZWQgb2JqZWN0IG11c3Qg
YmUgY2xvc2VkIHdpdGgKKyAqIDxjb2RlPnVlbnVtX2Nsb3NlPC9jb2RlPiB3aGVuIHlvdSBhcmUg
ZG9uZSB3aXRoIHRoZSBvYmplY3QuCisgKgorICogQHBhcmFtIGNvbnZOYW1lIG9yaWdpbmFsIGNv
bnZlcnRlciBuYW1lCisgKiBAcGFyYW0gc3RhbmRhcmQgbmFtZSBvZiB0aGUgc3RhbmRhcmQgZ292
ZXJuaW5nIHRoZSBuYW1lczsgTUlNRSBhbmQgSUFOQQorICogICAgICBhcmUgc3VjaCBzdGFuZGFy
ZHMKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIFRoZSBlcnJvciBjb2RlCisgKiBAcmV0dXJuIEEgVUVu
dW1lcmF0aW9uIG9iamVjdCBmb3IgZ2V0dGluZyBhbGwgYWxpYXNlcyB0aGF0IGFyZSByZWNvZ25p
emVkCisgKiAgICAgIGJ5IGEgc3RhbmRhcmQuIElmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBhcmUg
aW52YWxpZCwgTlVMTAorICogICAgICBpcyByZXR1cm5lZC4KKyAqIEBzZWUgdWNudl9nZXRTdGFu
ZGFyZE5hbWUKKyAqIEBzZWUgdWVudW1fY2xvc2UKKyAqIEBzZWUgdWVudW1fbmV4dAorICogQHN0
YWJsZSBJQ1UgMi4yCisgKi8KK1VfU1RBQkxFIFVFbnVtZXJhdGlvbiAqIFVfRVhQT1JUMgordWNu
dl9vcGVuU3RhbmRhcmROYW1lcyhjb25zdCBjaGFyICpjb252TmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqc3RhbmRhcmQsCisgICAgICAgICAgICAgICAgICAgICAgIFVF
cnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIEdpdmVzIHRoZSBudW1iZXIgb2Ygc3Rh
bmRhcmRzIGFzc29jaWF0ZWQgdG8gY29udmVydGVyIG5hbWVzLgorICogQHJldHVybiBudW1iZXIg
b2Ygc3RhbmRhcmRzCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgdWludDE2X3Qg
VV9FWFBPUlQyCit1Y252X2NvdW50U3RhbmRhcmRzKHZvaWQpOworCisvKioKKyAqIEdpdmVzIHRo
ZSBuYW1lIG9mIHRoZSBzdGFuZGFyZCBhdCBnaXZlbiBpbmRleCBvZiBzdGFuZGFyZCBsaXN0Lgor
ICogQHBhcmFtIG4gaW5kZXggaW4gc3RhbmRhcmQgbGlzdAorICogQHBhcmFtIHBFcnJvckNvZGUg
cmVzdWx0IG9mIG9wZXJhdGlvbgorICogQHJldHVybiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBz
dGFuZGFyZCBhdCBnaXZlbiBpbmRleC4gT3duZWQgYnkgdGhlIGxpYnJhcnkuCisgKiBAc3RhYmxl
IElDVSAyLjAKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JUMgordWNudl9nZXRT
dGFuZGFyZCh1aW50MTZfdCBuLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKworLyoqCisgKiBS
ZXR1cm5zIGEgc3RhbmRhcmQgbmFtZSBmb3IgYSBnaXZlbiBjb252ZXJ0ZXIgbmFtZS4KKyAqIDxw
PgorICogRXhhbXBsZSBhbGlhcyB0YWJsZTo8YnI+CisgKiBjb252IGFsaWFzMSB7IFNUQU5EQVJE
MSB9IGFsaWFzMiB7IFNUQU5EQVJEMSogfQorICogPHA+CisgKiBSZXN1bHQgb2YgdWNudl9nZXRT
dGFuZGFyZE5hbWUoImNvbnYiLCAiU1RBTkRBUkQxIikgZnJvbSBleGFtcGxlCisgKiBhbGlhcyB0
YWJsZTo8YnI+CisgKiA8Yj4iYWxpYXMyIjwvYj4KKyAqCisgKiBAcGFyYW0gbmFtZSBvcmlnaW5h
bCBjb252ZXJ0ZXIgbmFtZQorICogQHBhcmFtIHN0YW5kYXJkIG5hbWUgb2YgdGhlIHN0YW5kYXJk
IGdvdmVybmluZyB0aGUgbmFtZXM7IE1JTUUgYW5kIElBTkEKKyAqICAgICAgICBhcmUgc3VjaCBz
dGFuZGFyZHMKKyAqIEBwYXJhbSBwRXJyb3JDb2RlIHJlc3VsdCBvZiBvcGVyYXRpb24KKyAqIEBy
ZXR1cm4gcmV0dXJucyB0aGUgc3RhbmRhcmQgY29udmVydGVyIG5hbWU7CisgKiAgICAgICAgIGlm
IGEgc3RhbmRhcmQgY29udmVydGVyIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsCisgKiAgICAg
ICAgIHRoZW4gPGNvZGU+TlVMTDwvY29kZT4gaXMgcmV0dXJuZWQuIE93bmVkIGJ5IHRoZSBsaWJy
YXJ5LgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VY
UE9SVDIKK3VjbnZfZ2V0U3RhbmRhcmROYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIg
KnN0YW5kYXJkLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKKworLyoqCisgKiBUaGlzIGZ1bmN0
aW9uIHdpbGwgcmV0dXJuIHRoZSBpbnRlcm5hbCBjYW5vbmljYWwgY29udmVydGVyIG5hbWUgb2Yg
dGhlCisgKiB0YWdnZWQgYWxpYXMuIFRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIHVjbnZfb3BlblN0
YW5kYXJkTmFtZXMsIHdoaWNoCisgKiByZXR1cm5zIHRoZSB0YWdnZWQgYWxpYXMgZ2l2ZW4gdGhl
IGNhbm9uaWNhbCBuYW1lLgorICogPHA+CisgKiBFeGFtcGxlIGFsaWFzIHRhYmxlOjxicj4KKyAq
IGNvbnYgYWxpYXMxIHsgU1RBTkRBUkQxIH0gYWxpYXMyIHsgU1RBTkRBUkQxKiB9CisgKiA8cD4K
KyAqIFJlc3VsdCBvZiB1Y252X2dldFN0YW5kYXJkTmFtZSgiYWxpYXMxIiwgIlNUQU5EQVJEMSIp
IGZyb20gZXhhbXBsZQorICogYWxpYXMgdGFibGU6PGJyPgorICogPGI+ImNvbnYiPC9iPgorICoK
KyAqIEByZXR1cm4gcmV0dXJucyB0aGUgY2Fub25pY2FsIGNvbnZlcnRlciBuYW1lOworICogICAg
ICAgICBpZiBhIHN0YW5kYXJkIG9yIGFsaWFzIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQsCisg
KiAgICAgICAgIHRoZW4gPGNvZGU+TlVMTDwvY29kZT4gaXMgcmV0dXJuZWQuIFRoZSByZXR1cm5l
ZCBzdHJpbmcgaXMKKyAqICAgICAgICAgb3duZWQgYnkgdGhlIGxpYnJhcnkuCisgKiBAc2VlIHVj
bnZfZ2V0U3RhbmRhcmROYW1lCisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9TVEFCTEUgY29u
c3QgY2hhciAqIFVfRVhQT1JUMgordWNudl9nZXRDYW5vbmljYWxOYW1lKGNvbnN0IGNoYXIgKmFs
aWFzLCBjb25zdCBjaGFyICpzdGFuZGFyZCwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8q
KgorICogcmV0dXJucyB0aGUgY3VycmVudCBkZWZhdWx0IGNvbnZlcnRlciBuYW1lLgorICoKKyAq
IEByZXR1cm4gcmV0dXJucyB0aGUgY3VycmVudCBkZWZhdWx0IGNvbnZlcnRlciBuYW1lOworICog
ICAgICAgICBpZiBhIGRlZmF1bHQgY29udmVydGVyIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQs
CisgKiAgICAgICAgIHRoZW4gPGNvZGU+TlVMTDwvY29kZT4gaXMgcmV0dXJuZWQuCisgKiAgICAg
ICAgIFN0b3JhZ2Ugb3duZWQgYnkgdGhlIGxpYnJhcnkKKyAqIEBzZWUgdWNudl9zZXREZWZhdWx0
TmFtZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxFIGNvbnN0IGNoYXIgKiBVX0VY
UE9SVDIKK3VjbnZfZ2V0RGVmYXVsdE5hbWUodm9pZCk7CisKKy8qKgorICogc2V0cyB0aGUgY3Vy
cmVudCBkZWZhdWx0IGNvbnZlcnRlciBuYW1lLiBDYWxsZXIgbXVzdCBvd24gdGhlIHN0b3JhZ2Ug
Zm9yICduYW1lJworICogYW5kIHByZXNlcnZlIGl0IGluZGVmaW5pdGVseS4gCisgKiBAcGFyYW0g
bmFtZSB0aGUgY29udmVydGVyIG5hbWUgdG8gYmUgdGhlIGRlZmF1bHQgKG11c3QgZXhpc3QpLgor
ICogQHNlZSB1Y252X2dldERlZmF1bHROYW1lCisgKiBAc3lzdGVtIFNZU1RFTSBBUEkKKyAqIEBz
dGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWNudl9zZXREZWZh
dWx0TmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBGaXhlcyB0aGUgYmFja3NsYXNo
IGNoYXJhY3RlciBtaXNtYXBwaW5nLiAgRm9yIGV4YW1wbGUsIGluIFNKSVMsIHRoZSBiYWNrc2xh
c2ggCisgKiBjaGFyYWN0ZXIgaW4gdGhlIEFTQ0lJIHBvcnRpb24gaXMgYWxzbyB1c2VkIHRvIHJl
cHJlc2VudCB0aGUgeWVuIGN1cnJlbmN5IHNpZ24uICAKKyAqIFdoZW4gbWFwcGluZyBmcm9tIFVu
aWNvZGUgY2hhcmFjdGVyIDB4MDA1QywgaXQncyB1bmNsZWFyIHdoZXRoZXIgdG8gbWFwIHRoZSAK
KyAqIGNoYXJhY3RlciBiYWNrIHRvIHllbiBvciBiYWNrc2xhc2ggaW4gU0pJUy4gIFRoaXMgZnVu
Y3Rpb24gd2lsbCB0YWtlIHRoZSBpbnB1dAorICogYnVmZmVyIGFuZCByZXBsYWNlIGFsbCB0aGUg
eWVuIHNpZ24gY2hhcmFjdGVycyB3aXRoIGJhY2tzbGFzaC4gIFRoaXMgaXMgbmVjZXNzYXJ5Cisg
KiB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIG9wZW4gYSBmaWxlIHdpdGggdGhlIGlucHV0IGJ1ZmZl
ciBvbiBXaW5kb3dzLgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHRlc3QgdGhlIGNvbnZlcnRlciB0
byBzZWUgd2hldGhlciBzdWNoIG1hcHBpbmcgaXMKKyAqIHJlcXVpcmVkLiAgWW91IGNhbiBzb21l
dGltZXMgYXZvaWQgdXNpbmcgdGhpcyBmdW5jdGlvbiBieSB1c2luZyB0aGUgY29ycmVjdCB2ZXJz
aW9uCisgKiBvZiBTaGlmdC1KSVMuCisgKgorICogQHBhcmFtIGNudiBUaGUgY29udmVydGVyIHJl
cHJlc2VudGluZyB0aGUgdGFyZ2V0IGNvZGVwYWdlLgorICogQHBhcmFtIHNvdXJjZSB0aGUgaW5w
dXQgYnVmZmVyIHRvIGJlIGZpeGVkCisgKiBAcGFyYW0gc291cmNlTGVuIHRoZSBsZW5ndGggb2Yg
dGhlIGlucHV0IGJ1ZmZlcgorICogQHNlZSB1Y252X2lzQW1iaWd1b3VzCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VjbnZfZml4RmlsZVNlcGFyYXRv
cihjb25zdCBVQ29udmVydGVyICpjbnYsIFVDaGFyICpzb3VyY2UsIGludDMyX3Qgc291cmNlTGVu
KTsKKworLyoqCisgKiBEZXRlcm1pbmVzIGlmIHRoZSBjb252ZXJ0ZXIgY29udGFpbnMgYW1iaWd1
b3VzIG1hcHBpbmdzIG9mIHRoZSBzYW1lCisgKiBjaGFyYWN0ZXIgb3Igbm90LgorICogQHBhcmFt
IGNudiB0aGUgY29udmVydGVyIHRvIGJlIHRlc3RlZAorICogQHJldHVybiBUUlVFIGlmIHRoZSBj
b252ZXJ0ZXIgY29udGFpbnMgYW1iaWd1b3VzIG1hcHBpbmcgb2YgdGhlIHNhbWUgCisgKiBjaGFy
YWN0ZXIsIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJM
RSBVQm9vbCBVX0VYUE9SVDIKK3VjbnZfaXNBbWJpZ3VvdXMoY29uc3QgVUNvbnZlcnRlciAqY252
KTsKKworLyoqCisgKiBTZXRzIHRoZSBjb252ZXJ0ZXIgdG8gdXNlIGZhbGxiYWNrIG1hcHBpbmcg
b3Igbm90LgorICogQHBhcmFtIGNudiBUaGUgY29udmVydGVyIHRvIHNldCB0aGUgZmFsbGJhY2sg
bWFwcGluZyB1c2FnZSBvbi4KKyAqIEBwYXJhbSB1c2VzRmFsbGJhY2sgVFJVRSBpZiB0aGUgdXNl
ciB3YW50cyB0aGUgY29udmVydGVyIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWxsYmFjayAK
KyAqIG1hcHBpbmcsIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSB2b2lkIFVfRVhQT1JUMiAKK3VjbnZfc2V0RmFsbGJhY2soVUNvbnZlcnRlciAqY252
LCBVQm9vbCB1c2VzRmFsbGJhY2spOworCisvKioKKyAqIERldGVybWluZXMgaWYgdGhlIGNvbnZl
cnRlciB1c2VzIGZhbGxiYWNrIG1hcHBpbmdzIG9yIG5vdC4KKyAqIEBwYXJhbSBjbnYgVGhlIGNv
bnZlcnRlciB0byBiZSB0ZXN0ZWQKKyAqIEByZXR1cm4gVFJVRSBpZiB0aGUgY29udmVydGVyIHVz
ZXMgZmFsbGJhY2ssIEZBTFNFIG90aGVyd2lzZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitV
X1NUQUJMRSBVQm9vbCBVX0VYUE9SVDIgCit1Y252X3VzZXNGYWxsYmFjayhjb25zdCBVQ29udmVy
dGVyICpjbnYpOworCisvKioKKyAqIERldGVjdHMgVW5pY29kZSBzaWduYXR1cmUgYnl0ZSBzZXF1
ZW5jZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBieXRlIHN0cmVhbQorICogYW5kIHJldHVybnMgdGhl
IGNoYXJzZXQgbmFtZSBvZiB0aGUgaW5kaWNhdGVkIFVuaWNvZGUgY2hhcnNldC4KKyAqIE5VTEwg
aXMgcmV0dXJuZWQgd2hlbiBubyBVbmljb2RlIHNpZ25hdHVyZSBpcyByZWNvZ25pemVkLgorICog
VGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc2lnbmF0dXJlIGlzIG91dHB1dCBhcyB3ZWxsLgor
ICoKKyAqIFRoZSBjYWxsZXIgY2FuIHVjbnZfb3BlbigpIGEgY29udmVydGVyIHVzaW5nIHRoZSBj
aGFyc2V0IG5hbWUuCisgKiBUaGUgZmlyc3QgY29kZSB1bml0IChVQ2hhcikgZnJvbSB0aGUgc3Rh
cnQgb2YgdGhlIHN0cmVhbSB3aWxsIGJlIFUrRkVGRgorICogKHRoZSBVbmljb2RlIEJPTS9zaWdu
YXR1cmUgY2hhcmFjdGVyKSBhbmQgY2FuIHVzdWFsbHkgYmUgaWdub3JlZC4KKyAqCisgKiBGb3Ig
bW9zdCBVbmljb2RlIGNoYXJzZXRzIGl0IGlzIGFsc28gcG9zc2libGUgdG8gaWdub3JlIHRoZSBp
bmRpY2F0ZWQKKyAqIG51bWJlciBvZiBpbml0aWFsIHN0cmVhbSBieXRlcyBhbmQgc3RhcnQgY29u
dmVydGluZyBhZnRlciB0aGVtLgorICogSG93ZXZlciwgdGhlcmUgYXJlIHN0YXRlZnVsIFVuaWNv
ZGUgY2hhcnNldHMgKFVURi03IGFuZCBCT0NVLTEpIGZvciB3aGljaAorICogdGhpcyB3aWxsIG5v
dCB3b3JrLiBUaGVyZWZvcmUsIGl0IGlzIGJlc3QgdG8gaWdub3JlIHRoZSBmaXJzdCBvdXRwdXQg
VUNoYXIKKyAqIGluc3RlYWQgb2YgdGhlIGlucHV0IHNpZ25hdHVyZSBieXRlcy4KKyAqIDxwPgor
ICogVXNhZ2U6CisgKiBAY29kZSAgICAgCisgKiAgICAgIFVFcnJvckNvZGUgZXJyID0gVV9aRVJP
X0VSUk9SOworICogICAgICBjaGFyIGlucHV0W10gPSB7ICdceEVGJywnXHhCQicsICdceEJGJywn
XHg0MScsJ1x4NDInLCdceDQzJyB9OworICogICAgICBpbnQzMl90IHNpZ25hdHVyZUxlbmd0aCA9
IDA7CisgKiAgICAgIGNoYXIgKmVuY29kaW5nID0gdWNudl9kZXRlY3RVbmljb2RlU2lnbmF0dXJl
cyhpbnB1dCxzaXplb2YoaW5wdXQpLCZzaWduYXR1cmVMZW5ndGgsJmVycik7CisgKiAgICAgIFVD
b252ZXJ0ZXIgKmNvbnYgPSBOVUxMOworICogICAgICBVQ2hhciBvdXRwdXRbMTAwXTsKKyAqICAg
ICAgVUNoYXIgKnRhcmdldCA9IG91dHB1dCwgKm91dDsKKyAqICAgICAgY2hhciAqc291cmNlID0g
aW5wdXQ7CisgKiAgICAgIGlmKGVuY29kaW5nIT1OVUxMICYmIFVfU1VDQ0VTUyhlcnIpKXsKKyAq
ICAgICAgICAgIC8vIHNob3VsZCBzaWduYXR1cmUgYmUgZGlzY2FyZGVkID8KKyAqICAgICAgICAg
IGNvbnYgPSB1Y252X29wZW4oZW5jb2RpbmcsICZlcnIpOworICogICAgICAgICAgLy8gZG8gdGhl
IGNvbnZlcnNpb24KKyAqICAgICAgICAgIHVjbnZfdG9Vbmljb2RlKGNvbnYsCisgKiAgICAgICAg
ICAgICAgICAgICAgICAgICB0YXJnZXQsIG91dHB1dCArIHNpemVvZihvdXRwdXQpL1VfU0laRU9G
X1VDSEFSLAorICogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBpbnB1dCArIHNpemVv
ZihpbnB1dCksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBUUlVFLCAmZXJyKTsK
KyAqICAgICAgICAgIG91dCA9IG91dHB1dDsKKyAqICAgICAgICAgIGlmIChkaXNjYXJkU2lnbmF0
dXJlKXsKKyAqICAgICAgICAgICAgICArK291dDsgLy8gaWdub3JlIGluaXRpYWwgVStGRUZGCisg
KiAgICAgICAgICB9CisgKiAgICAgICAgICB3aGlsZShvdXQgIT0gdGFyZ2V0KSB7CisgKiAgICAg
ICAgICAgICAgcHJpbnRmKCIlMDR4ICIsICpvdXQrKyk7CisgKiAgICAgICAgICB9CisgKiAgICAg
ICAgICBwdXRzKCIiKTsKKyAqICAgICAgfQorICogICAgIAorICogQGVuZGNvZGUKKyAqCisgKiBA
cGFyYW0gc291cmNlICAgICAgICAgICAgVGhlIHNvdXJjZSBzdHJpbmcgaW4gd2hpY2ggdGhlIHNp
Z25hdHVyZSBzaG91bGQgYmUgZGV0ZWN0ZWQuCisgKiBAcGFyYW0gc291cmNlTGVuZ3RoICAgICAg
TGVuZ3RoIG9mIHRoZSBpbnB1dCBzdHJpbmcsIG9yIC0xIGlmIHRlcm1pbmF0ZWQgd2l0aCBhIE5V
TCBieXRlLgorICogQHBhcmFtIHNpZ25hdHVyZUxlbmd0aCAgIEEgcG9pbnRlciB0byBpbnQzMl90
IHRvIHJlY2VpdmUgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IG1ha2UgdXAgdGhlIHNpZ25hdHVy
ZSAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZGV0ZWN0ZWQgVVRGLiAwIGlm
IG5vdCBkZXRlY3RlZC4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgYSBOVUxM
IHBvaW50ZXIuCisgKiBAcGFyYW0gcEVycm9yQ29kZSAgICAgICAgQSBwb2ludGVyIHRvIHJlY2Vp
dmUgaW5mb3JtYXRpb24gYWJvdXQgYW55IGVycm9ycyB0aGF0IG1heSBvY2N1ciBkdXJpbmcgZGV0
ZWN0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgYSB2YWxpZCBwb2lu
dGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUsIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFp
bHVyZQorICogICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2Fs
bC4KKyAqIEByZXR1cm4gVGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIGRldGVjdGVkLiBOVUxMIGlm
IGVuY29kaW5nIGlzIG5vdCBkZXRlY3RlZC4gCisgKiBAc3RhYmxlIElDVSAyLjQKKyAqLworVV9T
VEFCTEUgY29uc3QgY2hhciogVV9FWFBPUlQyCit1Y252X2RldGVjdFVuaWNvZGVTaWduYXR1cmUo
Y29uc3QgY2hhciogc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
c291cmNlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKnNpZ25h
dHVyZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJy
b3JDb2RlKTsKKworI2VuZGlmCisKKyNlbmRpZgorLypfVUNOViovCkluZGV4OiBpY3UvdW5pY29k
ZS91Y252X2Vyci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHVjbnZfZXJyLmgKZGlmZiAtTiBpY3Uv
dW5pY29kZS91Y252X2Vyci5oCi0tLSBpY3UvdW5pY29kZS91Y252X2Vyci5oCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKKysrIGljdS91bmljb2RlL3VjbnZfZXJyLmgJMTIgSnVsIDIwMDUgMDc6
MTA6NDkgLTAwMDAKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyog
ICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKyAqCisgKgorICogICB1Y252X2Vyci5oOgorICovCisKKy8qKgorICogXGZpbGUKKyAq
IFxicmllZiBDIFVDb252ZXJ0ZXIgcHJlZGVmaW5lZCBlcnJvciBjYWxsYmFja3MKKyAqCisgKiAg
PGgyPkVycm9yIEJlaGF2aW91ciBGdW5jdGlvbnM8L2gyPgorICogIERlZmluZXMgc29tZSBlcnJv
ciBiZWhhdmlvdXIgZnVuY3Rpb25zIGNhbGxlZCBieSB1Y252X3tmcm9tLHRvfVVuaWNvZGUKKyAq
ICBUaGVzZSBhcmUgcHJvdmlkZWQgYXMgcGFydCBvZiBJQ1UgYW5kIG1hbnkgYXJlIHN0YWJsZSwg
YnV0IHRoZXkKKyAqICBjYW4gYWxzbyBiZSBjb25zaWRlcmVkIG9ubHkgYXMgYW4gZXhhbXBsZSBv
ZiB3aGF0IGNhbiBiZSBkb25lIHdpdGgKKyAqICBjYWxsYmFja3MuICBZb3UgbWF5IG9mIGNvdXJz
ZSB3cml0ZSB5b3VyIG93bi4KKyAqCisgKiAgSWYgeW91IHdhbnQgdG8gd3JpdGUgeW91ciBvd24s
IHlvdSBtYXkgYWxzbyBmaW5kIHRoZSBmdW5jdGlvbnMgZnJvbQorICogIHVjbnZfY2IuaCB1c2Vm
dWwgd2hlbiB3cml0aW5nIHlvdXIgb3duIGNhbGxiYWNrcy4KKyAqCisgKiAgVGhlc2UgZnVuY3Rp
b25zLCBhbHRob3VnaCBwdWJsaWMsIHNob3VsZCBORVZFUiBiZSBjYWxsZWQgZGlyZWN0bHkuCisg
KiAgVGhleSBzaG91bGQgYmUgdXNlZCBhcyBwYXJhbWV0ZXJzIHRvIHRoZSB1Y252X3NldEZyb21V
Q2FsbGJhY2sKKyAqICBhbmQgdWNudl9zZXRUb1VDYWxsYmFjayBmdW5jdGlvbnMsIHRvIHNldCB0
aGUgYmVoYXZpb3VyIG9mIGEgY29udmVydGVyCisgKiAgd2hlbiBpdCBlbmNvdW50ZXJzIElMTEVH
QUwvVU5NQVBQRUQvSU5WQUxJRCBzZXF1ZW5jZXMuCisgKgorICogIHVzYWdlIGV4YW1wbGU6ICAn
U1RPUCcgZG9lc24ndCBuZWVkIGFueSBjb250ZXh0LCBidXQgbmV3Q29udGV4dAorICogICAgY291
bGQgYmUgc2V0IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuICdOVUxMJyBpZiBuZWVkZWQuIFRoZSBh
dmFpbGFibGUKKyAqICAgIGNvbnRleHRzIGluIHRoaXMgaGVhZGVyIGNhbiBtb2RpZnkgdGhlIGRl
ZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGNhbGxiYWNrLgorICoKKyAqICBcY29kZQorICogIFVFcnJv
ckNvZGUgZXJyID0gVV9aRVJPX0VSUk9SOworICogIFVDb252ZXJ0ZXIgKm15Q29udmVydGVyID0g
dWNudl9vcGVuKCJpYm0tOTQ5IiwgJmVycik7CisgKiAgY29uc3Qgdm9pZCAqb2xkQ29udGV4dDsK
KyAqICBVQ29udmVydGVyRnJvbVVDYWxsYmFjayBvbGRBY3Rpb247CisgKgorICoKKyAqICBpZiAo
VV9TVUNDRVNTKGVycikpCisgKiAgeworICogICAgICB1Y252X3NldEZyb21VQ2FsbEJhY2sobXlD
b252ZXJ0ZXIsCisgKiAgICAgICAgICAgICAgICAgICAgICAgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tf
U1RPUCwKKyAqICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICogICAgICAgICAgICAgICAg
ICAgICAgICZvbGRBY3Rpb24sCisgKiAgICAgICAgICAgICAgICAgICAgICAgJm9sZENvbnRleHQs
CisgKiAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR1cyk7CisgKiAgfQorICogIFxlbmRjb2Rl
CisgKgorICogIFRoZSBjb2RlIGFib3ZlIHRlbGxzICJteUNvbnZlcnRlciIgdG8gc3RvcCB3aGVu
IGl0IGVuY291bnRlcnMgYW4KKyAqICBJTExFR0FML1RSVU5DQVRFRC9JTlZBTElEIHNlcXVlbmNl
cyB3aGVuIGl0IGlzIHVzZWQgdG8gY29udmVydCBmcm9tCisgKiAgVW5pY29kZSAtPiBDb2RlcGFn
ZS4gVGhlIGJlaGF2aW9yIGZyb20gQ29kZXBhZ2UgdG8gVW5pY29kZSBpcyBub3QgY2hhbmdlZCwK
KyAqICBhbmQgdWNudl9zZXRUb1VDYWxsQmFjayB3b3VsZCBuZWVkIHRvIGJlIGNhbGxlZCBpbiBv
cmRlciB0byBjaGFuZ2UKKyAqICB0aGF0IGJlaGF2aW9yIHRvby4KKyAqCisgKiAgSGVyZSBpcyBh
biBleGFtcGxlIHdpdGggYSBjb250ZXh0OgorICoKKyAqICBcY29kZQorICogIFVFcnJvckNvZGUg
ZXJyID0gVV9aRVJPX0VSUk9SOworICogIFVDb252ZXJ0ZXIgKm15Q29udmVydGVyID0gdWNudl9v
cGVuKCJpYm0tOTQ5IiwgJmVycik7CisgKiAgY29uc3Qgdm9pZCAqb2xkQ29udGV4dDsKKyAqICBV
Q29udmVydGVyRnJvbVVDYWxsYmFjayBvbGRBY3Rpb247CisgKgorICoKKyAqICBpZiAoVV9TVUND
RVNTKGVycikpCisgKiAgeworICogICAgICB1Y252X3NldFRvVUNhbGxCYWNrKG15Q29udmVydGVy
LAorICogICAgICAgICAgICAgICAgICAgICAgIFVDTlZfVE9fVV9DQUxMQkFDS19TVUJTVElUVVRF
LAorICogICAgICAgICAgICAgICAgICAgICAgIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdBTCwKKyAq
ICAgICAgICAgICAgICAgICAgICAgICAmb2xkQWN0aW9uLAorICogICAgICAgICAgICAgICAgICAg
ICAgICZvbGRDb250ZXh0LAorICogICAgICAgICAgICAgICAgICAgICAgICZzdGF0dXMpOworICog
IH0KKyAqICBcZW5kY29kZQorICoKKyAqICBUaGUgY29kZSBhYm92ZSB0ZWxscyAibXlDb252ZXJ0
ZXIiIHRvIHN0b3Agd2hlbiBpdCBlbmNvdW50ZXJzIGFuCisgKiAgSUxMRUdBTC9UUlVOQ0FURUQv
SU5WQUxJRCBzZXF1ZW5jZXMgd2hlbiBpdCBpcyB1c2VkIHRvIGNvbnZlcnQgZnJvbQorICogIENv
ZGVwYWdlIC0+IFVuaWNvZGUuIEFueSB1bm1hcHBlZCBhbmQgbGVnYWwgY2hhcmFjdGVycyB3aWxs
IGJlCisgKiAgc3Vic3RpdHV0ZWQgdG8gYmUgdGhlIGRlZmF1bHQgc3Vic3RpdHV0aW9uIGNoYXJh
Y3Rlci4KKyAqLworCisjaWZuZGVmIFVDTlZfRVJSX0gKKyNkZWZpbmUgVUNOVl9FUlJfSAorCisj
aW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworI2lmICFVQ09ORklHX05PX0NPTlZFUlNJT04K
KworLyoqIEZvcndhcmQgZGVjbGFyaW5nIHRoZSBVQ29udmVydGVyIHN0cnVjdHVyZS4gQHN0YWJs
ZSBJQ1UgMi4wICovCitzdHJ1Y3QgVUNvbnZlcnRlcjsKKworLyoqIEBzdGFibGUgSUNVIDIuMCAq
LwordHlwZWRlZiBzdHJ1Y3QgVUNvbnZlcnRlciBVQ29udmVydGVyOworCisvKioKKyAqIEZST01f
VSwgVE9fVSBjb250ZXh0IG9wdGlvbnMgZm9yIHN1YiBjYWxsYmFjaworICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KKyNkZWZpbmUgVUNOVl9TVUJfU1RPUF9PTl9JTExFR0FMICJpIgorCisvKioKKyAq
IEZST01fVSwgVE9fVSBjb250ZXh0IG9wdGlvbnMgZm9yIHNraXAgY2FsbGJhY2sKKyAqIEBzdGFi
bGUgSUNVIDIuMAorICovCisjZGVmaW5lIFVDTlZfU0tJUF9TVE9QX09OX0lMTEVHQUwgImkiCisK
Ky8qKgorICogRlJPTV9VX0NBTExCQUNLX0VTQ0FQRSBjb250ZXh0IG9wdGlvbiB0byBlc2NhcGUg
dGhlIGNvZGUgdW5pdCBhY2NvcmRpbmcgdG8gSUNVICglVVhYWFgpIAorICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KKyNkZWZpbmUgVUNOVl9FU0NBUEVfSUNVICAgICAgIE5VTEwKKy8qKgorICogRlJP
TV9VX0NBTExCQUNLX0VTQ0FQRSBjb250ZXh0IG9wdGlvbiB0byBlc2NhcGUgdGhlIGNvZGUgdW5p
dCBhY2NvcmRpbmcgdG8gSkFWQSAoXFx1WFhYWCkKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCisj
ZGVmaW5lIFVDTlZfRVNDQVBFX0pBVkEgICAgICAiSiIKKy8qKgorICogRlJPTV9VX0NBTExCQUNL
X0VTQ0FQRSBjb250ZXh0IG9wdGlvbiB0byBlc2NhcGUgdGhlIGNvZGUgdW5pdCBhY2NvcmRpbmcg
dG8gQyAoXFx1WFhYWCBcXFVYWFhYWFhYWCkKKyAqIFRPX1VfQ0FMTEJBQ0tfRVNDQVBFIG9wdGlv
biB0byBlc2NhcGUgdGhlIGNoYXJhY3RlciB2YWx1ZSBhY2NvZGluZyB0byBDIChcXHhYWFhYKQor
ICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KKyNkZWZpbmUgVUNOVl9FU0NBUEVfQyAgICAgICAgICJD
IgorLyoqCisgKiBGUk9NX1VfQ0FMTEJBQ0tfRVNDQVBFIGNvbnRleHQgb3B0aW9uIHRvIGVzY2Fw
ZSB0aGUgY29kZSB1bml0IGFjY29yZGluZyB0byBYTUwgRGVjaW1hbCBlc2NhcGUgKCZhbXA7I0RE
REQ7KQorICogVE9fVV9DQUxMQkFDS19FU0NBUEUgY29udGV4dCBvcHRpb24gdG8gZXNjYXBlIHRo
ZSBjaGFyYWN0ZXIgdmFsdWUgYWNjb2RpbmcgdG8gWE1MIERlY2ltYWwgZXNjYXBlICgmYW1wOyNE
REREOykKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCisjZGVmaW5lIFVDTlZfRVNDQVBFX1hNTF9E
RUMgICAiRCIKKy8qKgorICogRlJPTV9VX0NBTExCQUNLX0VTQ0FQRSBjb250ZXh0IG9wdGlvbiB0
byBlc2NhcGUgdGhlIGNvZGUgdW5pdCBhY2NvcmRpbmcgdG8gWE1MIEhleCBlc2NhcGUgKCZhbXA7
I3hYWFhYOykKKyAqIFRPX1VfQ0FMTEJBQ0tfRVNDQVBFIGNvbnRleHQgb3B0aW9uIHRvIGVzY2Fw
ZSB0aGUgY2hhcmFjdGVyIHZhbHVlIGFjY29kaW5nIHRvIFhNTCBIZXggZXNjYXBlICgmYW1wOyN4
WFhYWDspCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworI2RlZmluZSBVQ05WX0VTQ0FQRV9YTUxf
SEVYICAgIlgiCisvKioKKyAqIEZST01fVV9DQUxMQkFDS19FU0NBUEUgY29udGV4dCBvcHRpb24g
dG8gZXNjYXBlIHRlaCBjb2RlIHVuaXQgYWNjb3JkaW5nIHRvIFVuaWNvZGUgKFUrWFhYWFgpCisg
KiBAc3RhYmxlIElDVSAyLjAKKyAqLworI2RlZmluZSBVQ05WX0VTQ0FQRV9VTklDT0RFICAgIlUi
CisKKy8qKiAKKyAqIFRoZSBwcm9jZXNzIGNvbmRpdGlvbiBjb2RlIHRvIGJlIHVzZWQgd2l0aCB0
aGUgY2FsbGJhY2tzLiAgCisgKiBDb2RlcyB3aGljaCBhcmUgZ3JlYXRlciB0aGFuIFVDTlZfSVJS
RUdVTEFSIHNob3VsZCBiZSAKKyAqIHBhc3NlZCBvbiB0byBhbnkgY2hhaW5lZCBjYWxsYmFja3Mu
CisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBVQ05WX1VOQVNT
SUdORUQgPSAwLCAgLyoqPCBUaGUgY29kZSBwb2ludCBpcyB1bmFzc2lnbmVkLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUaGUgZXJyb3IgY29kZSBVX0lOVkFMSURfQ0hBUl9GT1VORCB3
aWxsIGJlIHNldC4gKi8KKyAgICBVQ05WX0lMTEVHQUwgPSAxLCAgICAgLyoqPCBUaGUgY29kZSBw
b2ludCBpcyBpbGxlZ2FsLiBGb3IgZXhhbXBsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxceDgxXFx4MkUgaXMgaWxsZWdhbCBpbiBTSklTIGJlY2F1c2UgXFx4MkUKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGEgdmFsaWQgdHJhaWwgYnl0ZSBmb3IgdGhlIFxc
eDgxIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWFkIGJ5dGUuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFsc28sIHN0YXJ0aW5nIHdpdGggVW5pY29kZSAzLjAuMSwgbm9u
LXNob3J0ZXN0IGJ5dGUgc2VxdWVuY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IFVURi04IChsaWtlIFxceEMxXFx4QTEgaW5zdGVhZCBvZiBcXHg2MSBmb3IgVSswMDYxKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgYWxzbyBpbGxlZ2FsLCBub3QganVzdCBpcnJl
Z3VsYXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBlcnJvciBjb2RlIFVfSUxM
RUdBTF9DSEFSX0ZPVU5EIHdpbGwgYmUgc2V0LiAqLworICAgIFVDTlZfSVJSRUdVTEFSID0gMiwg
ICAvKio8IFRoZSBjb2RlcG9pbnQgaXMgbm90IGEgcmVndWxhciBzZXF1ZW5jZSBpbiAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGVuY29kaW5nLiBGb3IgZXhhbXBsZSwgXFx4RURc
XHhBMFxceDgwLi5cXHhFRFxceEJGXFx4QkYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXJlIGlycmVndWxhciBVVEYtOCBieXRlIHNlcXVlbmNlcyBmb3Igc2luZ2xlIHN1cnJvZ2F0ZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlIHBvaW50cy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVGhlIGVycm9yIGNvZGUgVV9JTlZBTElEX0NIQVJfRk9VTkQgd2lsbCBi
ZSBzZXQuICovCisgICAgVUNOVl9SRVNFVCA9IDMsICAgICAgIC8qKjwgVGhlIGNhbGxiYWNrIGlz
IGNhbGxlZCB3aXRoIHRoaXMgcmVhc29uIHdoZW4gYQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAncmVzZXQnIGhhcyBvY2N1cmVkLiBDYWxsYmFjayBzaG91bGQgcmVzZXQgYWxsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLiAqLworICAgIFVDTlZfQ0xPU0UgPSA0LCAg
ICAgICAgLyoqPCBDYWxsZWQgd2hlbiB0aGUgY29udmVydGVyIGlzIGNsb3NlZC4gVGhlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrIHNob3VsZCByZWxlYXNlIGFueSBhbGxv
Y2F0ZWQgbWVtb3J5LiovCisgICAgVUNOVl9DTE9ORSA9IDUgICAgICAgICAvKio8IENhbGxlZCB3
aGVuIHVjbnZfc2FmZUNsb25lKCkgaXMgY2FsbGVkIG9uIHRoZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udmVydGVyLiB0aGUgcG9pbnRlciBhdmFpbGFibGUgYXMgdGhlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGV4dCcgaXMgYW4gYWxpYXMgdG8gdGhlIG9y
aWdpbmFsIGNvbnZlcnRlcnMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
IHBvaW50ZXIuIElmIHRoZSBjb250ZXh0IG11c3QgYmUgb3duZWQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ5IHRoZSBuZXcgY29udmVydGVyLCB0aGUgY2FsbGJhY2sgbXVzdCBjbG9u
ZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhIGFuZCBjYWxsIHVjbnZf
c2V0RnJvbVVDYWxsYmFjayAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciBzZXRU
b1VDYWxsYmFjaykgd2l0aCB0aGUgY29ycmVjdCBwb2ludGVyLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YWJsZSBJQ1UgMi4yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAq
LworfSBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb247CisKKworLyoqCisgKiBUaGUgc3RydWN0dXJl
IGZvciB0aGUgZnJvbVVuaWNvZGUgY2FsbGJhY2sgZnVuY3Rpb24gcGFyYW1ldGVyLgorICogQHN0
YWJsZSBJQ1UgMi4wCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1aW50MTZfdCBzaXplOyAg
ICAgICAgICAgICAgLyoqPCBUaGUgc2l6ZSBvZiB0aGlzIHN0cnVjdC4gQHN0YWJsZSBJQ1UgMi4w
ICovCisgICAgVUJvb2wgZmx1c2g7ICAgICAgICAgICAgICAgIC8qKjwgVGhlIGludGVybmFsIHN0
YXRlIG9mIGNvbnZlcnRlciB3aWxsIGJlIHJlc2V0IGFuZCBkYXRhIGZsdXNoZWQgaWYgc2V0IHRv
IFRSVUUuIEBzdGFibGUgSUNVIDIuMCAgICAqLworICAgIFVDb252ZXJ0ZXIgKmNvbnZlcnRlcjsg
ICAgICAvKio8IFBvaW50ZXIgdG8gdGhlIGNvbnZlcnRlciB0aGF0IGlzIG9wZW5lZCBhbmQgdG8g
d2hpY2ggdGhpcyBzdHJ1Y3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LiBAc3RhYmxlIElDVSAy
LjAgICovCisgICAgY29uc3QgVUNoYXIgKnNvdXJjZTsgICAgICAgIC8qKjwgUG9pbnRlciB0byB0
aGUgc291cmNlIHNvdXJjZSBidWZmZXIuIEBzdGFibGUgSUNVIDIuMCAgICAqLworICAgIGNvbnN0
IFVDaGFyICpzb3VyY2VMaW1pdDsgICAvKio8IFBvaW50ZXIgdG8gdGhlIGxpbWl0IChlbmQgKyAx
KSBvZiBzb3VyY2UgYnVmZmVyLiBAc3RhYmxlIElDVSAyLjAgICAgKi8KKyAgICBjaGFyICp0YXJn
ZXQ7ICAgICAgICAgICAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSB0YXJnZXQgYnVmZmVyLiBAc3Rh
YmxlIElDVSAyLjAgICAgKi8KKyAgICBjb25zdCBjaGFyICp0YXJnZXRMaW1pdDsgICAgLyoqPCBQ
b2ludGVyIHRvIHRoZSBsaW1pdCAoZW5kICsgMSkgb2YgdGFyZ2V0IGJ1ZmZlci4gQHN0YWJsZSBJ
Q1UgMi4wICAgICAqLworICAgIGludDMyX3QgKm9mZnNldHM7ICAgICAgICAgICAvKio8IFBvaW50
ZXIgdG8gdGhlIGJ1ZmZlciB0aGF0IHJlY2lldmVzIHRoZSBvZmZzZXRzLiAqb2Zmc2V0ID0gYmxh
aCA7IG9mZnNldCsrOy4gQHN0YWJsZSBJQ1UgMi4wICAqLworfSBVQ29udmVydGVyRnJvbVVuaWNv
ZGVBcmdzOworCisKKy8qKgorICogVGhlIHN0cnVjdHVyZSBmb3IgdGhlIHRvVW5pY29kZSBjYWxs
YmFjayBmdW5jdGlvbiBwYXJhbWV0ZXIuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRl
ZiBzdHJ1Y3QgeworICAgIHVpbnQxNl90IHNpemU7ICAgICAgICAgICAgICAvKio8IFRoZSBzaXpl
IG9mIHRoaXMgc3RydWN0ICAgQHN0YWJsZSBJQ1UgMi4wICovCisgICAgVUJvb2wgZmx1c2g7ICAg
ICAgICAgICAgICAgIC8qKjwgVGhlIGludGVybmFsIHN0YXRlIG9mIGNvbnZlcnRlciB3aWxsIGJl
IHJlc2V0IGFuZCBkYXRhIGZsdXNoZWQgaWYgc2V0IHRvIFRSVUUuIEBzdGFibGUgSUNVIDIuMCAg
ICovCisgICAgVUNvbnZlcnRlciAqY29udmVydGVyOyAgICAgIC8qKjwgUG9pbnRlciB0byB0aGUg
Y29udmVydGVyIHRoYXQgaXMgb3BlbmVkIGFuZCB0byB3aGljaCB0aGlzIHN0cnVjdCBpcyBwYXNz
ZWQgYXMgYW4gYXJndW1lbnQuIEBzdGFibGUgSUNVIDIuMCAqLworICAgIGNvbnN0IGNoYXIgKnNv
dXJjZTsgICAgICAgICAvKio8IFBvaW50ZXIgdG8gdGhlIHNvdXJjZSBzb3VyY2UgYnVmZmVyLiBA
c3RhYmxlIElDVSAyLjAgICAgKi8KKyAgICBjb25zdCBjaGFyICpzb3VyY2VMaW1pdDsgICAgLyoq
PCBQb2ludGVyIHRvIHRoZSBsaW1pdCAoZW5kICsgMSkgb2Ygc291cmNlIGJ1ZmZlci4gQHN0YWJs
ZSBJQ1UgMi4wICAgICovCisgICAgVUNoYXIgKnRhcmdldDsgICAgICAgICAgICAgIC8qKjwgUG9p
bnRlciB0byB0aGUgdGFyZ2V0IGJ1ZmZlci4gQHN0YWJsZSBJQ1UgMi4wICAgICovCisgICAgY29u
c3QgVUNoYXIgKnRhcmdldExpbWl0OyAgIC8qKjwgUG9pbnRlciB0byB0aGUgbGltaXQgKGVuZCAr
IDEpIG9mIHRhcmdldCBidWZmZXIuIEBzdGFibGUgSUNVIDIuMCAgICAgKi8KKyAgICBpbnQzMl90
ICpvZmZzZXRzOyAgICAgICAgICAgLyoqPCBQb2ludGVyIHRvIHRoZSBidWZmZXIgdGhhdCByZWNp
ZXZlcyB0aGUgb2Zmc2V0cy4gKm9mZnNldCA9IGJsYWggOyBvZmZzZXQrKzsuIEBzdGFibGUgSUNV
IDIuMCAgKi8KK30gVUNvbnZlcnRlclRvVW5pY29kZUFyZ3M7CisKKworLyoqCisgKiBETyBOT1Qg
Q0FMTCBUSElTIEZVTkNUSU9OIERJUkVDVExZIQorICogVGhpcyBGcm9tIFVuaWNvZGUgY2FsbGJh
Y2sgU1RPUFMgYXQgdGhlIElMTEVHQUxfU0VRVUVOQ0UsCisgKiByZXR1cm5pbmcgdGhlIGVycm9y
IGNvZGUgYmFjayB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LgorICoKKyAqIEBwYXJhbSBjb250
ZXh0IFBvaW50ZXIgdG8gdGhlIGNhbGxiYWNrJ3MgcHJpdmF0ZSBkYXRhCisgKiBAcGFyYW0gZnJv
bVVBcmdzIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjb252ZXJzaW9uIGluIHByb2dyZXNzCisgKiBA
cGFyYW0gY29kZVVuaXRzIFBvaW50cyB0byAnbGVuZ3RoJyBVQ2hhcnMgb2YgdGhlIGNvbmNlcm5l
ZCBVbmljb2RlIHNlcXVlbmNlCisgKiBAcGFyYW0gbGVuZ3RoIFNpemUgKGluIGJ5dGVzKSBvZiB0
aGUgY29uY2VybmVkIGNvZGVwYWdlIHNlcXVlbmNlCisgKiBAcGFyYW0gY29kZVBvaW50IFNpbmds
ZSBVQ2hhcjMyIChVVEYtMzIpIGNvbnRhaW5pbmcgdGhlIGNvbmNlcmVuZCBVbmljb2RlIGNvZGVw
b2ludC4KKyAqIEBwYXJhbSByZWFzb24gRGVmaW5lcyB0aGUgcmVhc29uIHRoZSBjYWxsYmFjayB3
YXMgaW52b2tlZAorICogQHBhcmFtIGVyciBUaGlzIHNob3VsZCBhbHdheXMgYmUgc2V0IHRvIGEg
ZmFpbHVyZSBzdGF0dXMgcHJpb3IgdG8gY2FsbGluZy4KKyAqIEBzdGFibGUgSUNVIDIuMAorICov
CitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMiBVQ05WX0ZST01fVV9DQUxMQkFDS19TVE9QICgKKyAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICBV
Q29udmVydGVyRnJvbVVuaWNvZGVBcmdzICpmcm9tVUFyZ3MsCisgICAgICAgICAgICAgICAgICBj
b25zdCBVQ2hhciogY29kZVVuaXRzLAorICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgs
CisgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNvZGVQb2ludCwKKyAgICAgICAgICAgICAgICAg
IFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sCisgICAgICAgICAgICAgICAgICBVRXJy
b3JDb2RlICogZXJyKTsKKworCisKKy8qKgorICogRE8gTk9UIENBTEwgVEhJUyBGVU5DVElPTiBE
SVJFQ1RMWSEKKyAqIFRoaXMgVG8gVW5pY29kZSBjYWxsYmFjayBTVE9QUyBhdCB0aGUgSUxMRUdB
TF9TRVFVRU5DRSwKKyAqIHJldHVybmluZyB0aGUgZXJyb3IgY29kZSBiYWNrIHRvIHRoZSBjYWxs
ZXIgaW1tZWRpYXRlbHkuCisgKgorICogQHBhcmFtIGNvbnRleHQgUG9pbnRlciB0byB0aGUgY2Fs
bGJhY2sncyBwcml2YXRlIGRhdGEKKyAqIEBwYXJhbSB0b1VBcmdzIEluZm9ybWF0aW9uIGFib3V0
IHRoZSBjb252ZXJzaW9uIGluIHByb2dyZXNzCisgKiBAcGFyYW0gY29kZVVuaXRzIFBvaW50cyB0
byAnbGVuZ3RoJyBieXRlcyBvZiB0aGUgY29uY2VybmVkIGNvZGVwYWdlIHNlcXVlbmNlCisgKiBA
cGFyYW0gbGVuZ3RoIFNpemUgKGluIGJ5dGVzKSBvZiB0aGUgY29uY2VybmVkIGNvZGVwYWdlIHNl
cXVlbmNlCisgKiBAcGFyYW0gcmVhc29uIERlZmluZXMgdGhlIHJlYXNvbiB0aGUgY2FsbGJhY2sg
d2FzIGludm9rZWQKKyAqIEBwYXJhbSBlcnIgVGhpcyBzaG91bGQgYWx3YXlzIGJlIHNldCB0byBh
IGZhaWx1cmUgc3RhdHVzIHByaW9yIHRvIGNhbGxpbmcuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAq
LworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgVUNOVl9UT19VX0NBTExCQUNLX1NUT1AgKAorICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgIFVD
b252ZXJ0ZXJUb1VuaWNvZGVBcmdzICp0b1VBcmdzLAorICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogY29kZVVuaXRzLAorICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsCisgICAg
ICAgICAgICAgICAgICBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLAorICAgICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSAqIGVycik7CisKKy8qKgorICogRE8gTk9UIENBTEwgVEhJUyBG
VU5DVElPTiBESVJFQ1RMWSEKKyAqIFRoaXMgRnJvbSBVbmljb2RlIGNhbGxiYWNrIHNraXBzIGFu
eSBJTExFR0FMX1NFUVVFTkNFLCBvcgorICogc2tpcHMgb25seSBVTkFTU0lOR0VEX1NFUVVFTkNF
IGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBwYXJhbWV0ZXIKKyAqIHNpbXBseSBpZ25vcmluZyB0
aG9zZSBjaGFyYWN0ZXJzLiAKKyAqCisgKiBAcGFyYW0gY29udGV4dCAgVGhlIGZ1bmN0aW9uIGN1
cnJlbnRseSByZWNvZ25pemVzIHRoZSBjYWxsYmFjayBvcHRpb25zOgorICogICAgICAgICAgICAg
ICAgIFVDTlZfU0tJUF9TVE9QX09OX0lMTEVHQUw6IFNUT1BTIGF0IHRoZSBJTExFR0FMX1NFUVVF
TkNFLAorICogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGJh
Y2sgdG8gdGhlIGNhbGxlciBpbW1lZGlhdGVseS4KKyAqICAgICAgICAgICAgICAgICBOVUxMOiBT
a2lwcyBhbnkgSUxMRUdBTF9TRVFVRU5DRQorICogQHBhcmFtIGZyb21VQXJncyBJbmZvcm1hdGlv
biBhYm91dCB0aGUgY29udmVyc2lvbiBpbiBwcm9ncmVzcworICogQHBhcmFtIGNvZGVVbml0cyBQ
b2ludHMgdG8gJ2xlbmd0aCcgVUNoYXJzIG9mIHRoZSBjb25jZXJuZWQgVW5pY29kZSBzZXF1ZW5j
ZQorICogQHBhcmFtIGxlbmd0aCBTaXplIChpbiBieXRlcykgb2YgdGhlIGNvbmNlcm5lZCBjb2Rl
cGFnZSBzZXF1ZW5jZQorICogQHBhcmFtIGNvZGVQb2ludCBTaW5nbGUgVUNoYXIzMiAoVVRGLTMy
KSBjb250YWluaW5nIHRoZSBjb25jZXJlbmQgVW5pY29kZSBjb2RlcG9pbnQuCisgKiBAcGFyYW0g
cmVhc29uIERlZmluZXMgdGhlIHJlYXNvbiB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQKKyAqIEBw
YXJhbSBlcnIgUmV0dXJuIHZhbHVlIHdpbGwgYmUgc2V0IHRvIHN1Y2Nlc3MgaWYgdGhlIGNhbGxi
YWNrIHdhcyBoYW5kbGVkLAorICogICAgICBvdGhlcndpc2UgdGhpcyB2YWx1ZSB3aWxsIGJlIHNl
dCB0byBhIGZhaWx1cmUgc3RhdHVzLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IHZvaWQgVV9FWFBPUlQyIFVDTlZfRlJPTV9VX0NBTExCQUNLX1NLSVAgKAorICAgICAgICAgICAg
ICAgICAgY29uc3Qgdm9pZCAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJG
cm9tVW5pY29kZUFyZ3MgKmZyb21VQXJncywKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy
KiBjb2RlVW5pdHMsCisgICAgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgIFVDaGFyMzIgY29kZVBvaW50LAorICAgICAgICAgICAgICAgICAgVUNvbnZlcnRl
ckNhbGxiYWNrUmVhc29uIHJlYXNvbiwKKyAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKiBl
cnIpOworCisvKioKKyAqIERPIE5PVCBDQUxMIFRISVMgRlVOQ1RJT04gRElSRUNUTFkhCisgKiBU
aGlzIEZyb20gVW5pY29kZSBjYWxsYmFjayB3aWxsIFN1YnN0aXR1dGUgdGhlIElMTEVHQUwgU0VR
VUVOQ0UsIG9yIAorICogVU5BU1NJR05FRF9TRVFVRU5DRSBkZXBlbmRpbmcgb24gY29udGV4dCBw
YXJhbWV0ZXIsIHdpdGggdGhlCisgKiBjdXJyZW50IHN1YnN0aXR1dGlvbiBzdHJpbmcgZm9yIHRo
ZSBjb252ZXJ0ZXIuIFRoaXMgaXMgdGhlIGRlZmF1bHQKKyAqIGNhbGxiYWNrLgorICoKKyAqIEBw
YXJhbSBjb250ZXh0IFRoZSBmdW5jdGlvbiBjdXJyZW50bHkgcmVjb2duaXplcyB0aGUgY2FsbGJh
Y2sgb3B0aW9uczoKKyAqICAgICAgICAgICAgICAgICBVQ05WX1NVQl9TVE9QX09OX0lMTEVHQUw6
IFNUT1BTIGF0IHRoZSBJTExFR0FMX1NFUVVFTkNFLAorICogICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGJhY2sgdG8gdGhlIGNhbGxlciBpbW1lZGlhdGVseS4K
KyAqICAgICAgICAgICAgICAgICBOVUxMOiBTdWJzdGl0dXRlcyBhbnkgSUxMRUdBTF9TRVFVRU5D
RQorICogQHBhcmFtIGZyb21VQXJncyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udmVyc2lvbiBp
biBwcm9ncmVzcworICogQHBhcmFtIGNvZGVVbml0cyBQb2ludHMgdG8gJ2xlbmd0aCcgVUNoYXJz
IG9mIHRoZSBjb25jZXJuZWQgVW5pY29kZSBzZXF1ZW5jZQorICogQHBhcmFtIGxlbmd0aCBTaXpl
IChpbiBieXRlcykgb2YgdGhlIGNvbmNlcm5lZCBjb2RlcGFnZSBzZXF1ZW5jZQorICogQHBhcmFt
IGNvZGVQb2ludCBTaW5nbGUgVUNoYXIzMiAoVVRGLTMyKSBjb250YWluaW5nIHRoZSBjb25jZXJl
bmQgVW5pY29kZSBjb2RlcG9pbnQuCisgKiBAcGFyYW0gcmVhc29uIERlZmluZXMgdGhlIHJlYXNv
biB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQKKyAqIEBwYXJhbSBlcnIgUmV0dXJuIHZhbHVlIHdp
bGwgYmUgc2V0IHRvIHN1Y2Nlc3MgaWYgdGhlIGNhbGxiYWNrIHdhcyBoYW5kbGVkLAorICogICAg
ICBvdGhlcndpc2UgdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byBhIGZhaWx1cmUgc3RhdHVzLgor
ICogQHNlZSB1Y252X3NldFN1YnN0Q2hhcnMKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NU
QUJMRSB2b2lkIFVfRVhQT1JUMiBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFICgKKyAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICBV
Q29udmVydGVyRnJvbVVuaWNvZGVBcmdzICpmcm9tVUFyZ3MsCisgICAgICAgICAgICAgICAgICBj
b25zdCBVQ2hhciogY29kZVVuaXRzLAorICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgs
CisgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNvZGVQb2ludCwKKyAgICAgICAgICAgICAgICAg
IFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sCisgICAgICAgICAgICAgICAgICBVRXJy
b3JDb2RlICogZXJyKTsKKworLyoqCisgKiBETyBOT1QgQ0FMTCBUSElTIEZVTkNUSU9OIERJUkVD
VExZIQorICogVGhpcyBGcm9tIFVuaWNvZGUgY2FsbGJhY2sgd2lsbCBTdWJzdGl0dXRlIHRoZSBJ
TExFR0FMIFNFUVVFTkNFIHdpdGggdGhlCisgKiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBv
ZiB0aGUgaWxsZWdhbCBjb2RlcG9pbnRzCisgKgorICogQHBhcmFtIGNvbnRleHQgVGhlIGZ1bmN0
aW9uIGN1cnJlbnRseSByZWNvZ25pemVzIHRoZSBjYWxsYmFjayBvcHRpb25zOgorICogICAgICAg
IDx1bD4KKyAqICAgICAgICA8bGk+VUNOVl9FU0NBUEVfSUNVOiBTdWJzdGl0dWVzIHRoZSAgSUxM
RUdBTCBTRVFVRU5DRSB3aXRoIHRoZSBoZXhhZGVjaW1hbCAKKyAqICAgICAgICAgIHJlcHJlc2Vu
dGF0aW9uIGluIHRoZSBmb3JtYXQgICVVWFhYWCwgZS5nLiAiJXVGRkZFJXUwMEFDJXVDOEZFIiku
IAorICogICAgICAgICAgSW4gdGhlIEV2ZW50IHRoZSBjb252ZXJ0ZXIgZG9lc24ndCBzdXBwb3J0
IHRoZSBjaGFyYWN0ZXJzIHslLFV9W0EtRl1bMC05XSwgCisgKiAgICAgICAgICBpdCB3aWxsICBz
dWJzdGl0dXRlICB0aGUgaWxsZWdhbCBzZXF1ZW5jZSB3aXRoIHRoZSBzdWJzdGl0dXRpb24gY2hh
cmFjdGVycy4KKyAqICAgICAgICAgIE5vdGUgdGhhdCAgY29kZVVuaXQoMzJiaXQgaW50IGVnOiB1
bml0IG9mIGEgc3Vycm9nYXRlIHBhaXIpIGlzIHJlcHJlc2VudGVkIGFzCisgKiAgICAgICAgICAl
VUQ4NEQlVURDNTY8L2xpPgorICogICAgICAgIDxsaT5VQ05WX0VTQ0FQRV9KQVZBOiBTdWJzdGl0
dWVzIHRoZSAgSUxMRUdBTCBTRVFVRU5DRSB3aXRoIHRoZSBoZXhhZGVjaW1hbCAKKyAqICAgICAg
ICAgIHJlcHJlc2VudGF0aW9uIGluIHRoZSBmb3JtYXQgIFxcdVhYWFgsIGUuZy4gIlxcdUZGRkVc
XHUwMEFDXFx1QzhGRSIpLiAKKyAqICAgICAgICAgIEluIHRoZSBFdmVudCB0aGUgY29udmVydGVy
IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgY2hhcmFjdGVycyB7XCx1fVtBLUZdWzAtOV0sIAorICogICAg
ICAgICAgaXQgd2lsbCAgc3Vic3RpdHV0ZSAgdGhlIGlsbGVnYWwgc2VxdWVuY2Ugd2l0aCB0aGUg
c3Vic3RpdHV0aW9uIGNoYXJhY3RlcnMuCisgKiAgICAgICAgICBOb3RlIHRoYXQgIGNvZGVVbml0
KDMyYml0IGludCBlZzogdW5pdCBvZiBhIHN1cnJvZ2F0ZSBwYWlyKSBpcyByZXByZXNlbnRlZCBh
cworICogICAgICAgICAgXFx1RDg0RFxcdURDNTY8L2xpPgorICogICAgICAgIDxsaT5VQ05WX0VT
Q0FQRV9DOiBTdWJzdGl0dWVzIHRoZSAgSUxMRUdBTCBTRVFVRU5DRSB3aXRoIHRoZSBoZXhhZGVj
aW1hbCAKKyAqICAgICAgICAgIHJlcHJlc2VudGF0aW9uIGluIHRoZSBmb3JtYXQgIFxcdVhYWFgs
IGUuZy4gIlxcdUZGRkVcXHUwMEFDXFx1QzhGRSIpLiAKKyAqICAgICAgICAgIEluIHRoZSBFdmVu
dCB0aGUgY29udmVydGVyIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgY2hhcmFjdGVycyB7XCx1LFV9W0Et
Rl1bMC05XSwgCisgKiAgICAgICAgICBpdCB3aWxsICBzdWJzdGl0dXRlICB0aGUgaWxsZWdhbCBz
ZXF1ZW5jZSB3aXRoIHRoZSBzdWJzdGl0dXRpb24gY2hhcmFjdGVycy4KKyAqICAgICAgICAgIE5v
dGUgdGhhdCAgY29kZVVuaXQoMzJiaXQgaW50IGVnOiB1bml0IG9mIGEgc3Vycm9nYXRlIHBhaXIp
IGlzIHJlcHJlc2VudGVkIGFzCisgKiAgICAgICAgICBcXFUwMDAyMzQ1NjwvbGk+CisgKiAgICAg
ICAgPGxpPlVDTlZfRVNDQVBFX1hNTF9ERUM6IFN1YnN0aXR1ZXMgdGhlICBJTExFR0FMIFNFUVVF
TkNFIHdpdGggdGhlIGRlY2ltYWwgCisgKiAgICAgICAgICByZXByZXNlbnRhdGlvbiBpbiB0aGUg
Zm9ybWF0ICAmYW1wOyNERERERERERDssIGUuZy4gIiZhbXA7IzY1NTM0OyZhbXA7IzE3MjsmYW1w
OyM1MTQ1NDsiKS4gCisgKiAgICAgICAgICBJbiB0aGUgRXZlbnQgdGhlIGNvbnZlcnRlciBkb2Vz
bid0IHN1cHBvcnQgdGhlIGNoYXJhY3RlcnMgeyZhbXA7LCN9WzAtOV0sIAorICogICAgICAgICAg
aXQgd2lsbCAgc3Vic3RpdHV0ZSAgdGhlIGlsbGVnYWwgc2VxdWVuY2Ugd2l0aCB0aGUgc3Vic3Rp
dHV0aW9uIGNoYXJhY3RlcnMuCisgKiAgICAgICAgICBOb3RlIHRoYXQgIGNvZGVVbml0KDMyYml0
IGludCBlZzogdW5pdCBvZiBhIHN1cnJvZ2F0ZSBwYWlyKSBpcyByZXByZXNlbnRlZCBhcworICog
ICAgICAgICAgJmFtcDsjMTQ0NDcwOyBhbmQgWmVybyBwYWRkaW5nIGlzIGlnbm9yZWQuPC9saT4K
KyAqICAgICAgICA8bGk+VUNOVl9FU0NBUEVfWE1MX0hFWDpTdWJzdGl0dWVzIHRoZSAgSUxMRUdB
TCBTRVFVRU5DRSB3aXRoIHRoZSBkZWNpbWFsIAorICogICAgICAgICAgcmVwcmVzZW50YXRpb24g
aW4gdGhlIGZvcm1hdCAgJiN4WFhYWCwgZS5nLiAiJmFtcDsjeEZGRkU7JmFtcDsjeDAwQUM7JmFt
cDsjeEM4RkU7IikuIAorICogICAgICAgICAgSW4gdGhlIEV2ZW50IHRoZSBjb252ZXJ0ZXIgZG9l
c24ndCBzdXBwb3J0IHRoZSBjaGFyYWN0ZXJzIHsmLCMseH1bMC05XSwgCisgKiAgICAgICAgICBp
dCB3aWxsICBzdWJzdGl0dXRlICB0aGUgaWxsZWdhbCBzZXF1ZW5jZSB3aXRoIHRoZSBzdWJzdGl0
dXRpb24gY2hhcmFjdGVycy4KKyAqICAgICAgICAgIE5vdGUgdGhhdCAgY29kZVVuaXQoMzJiaXQg
aW50IGVnOiB1bml0IG9mIGEgc3Vycm9nYXRlIHBhaXIpIGlzIHJlcHJlc2VudGVkIGFzCisgKiAg
ICAgICAgICAmYW1wOyN4MjM0NTY7PC9saT4KKyAqICAgICAgICA8L3VsPgorICogQHBhcmFtIGZy
b21VQXJncyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udmVyc2lvbiBpbiBwcm9ncmVzcworICog
QHBhcmFtIGNvZGVVbml0cyBQb2ludHMgdG8gJ2xlbmd0aCcgVUNoYXJzIG9mIHRoZSBjb25jZXJu
ZWQgVW5pY29kZSBzZXF1ZW5jZQorICogQHBhcmFtIGxlbmd0aCBTaXplIChpbiBieXRlcykgb2Yg
dGhlIGNvbmNlcm5lZCBjb2RlcGFnZSBzZXF1ZW5jZQorICogQHBhcmFtIGNvZGVQb2ludCBTaW5n
bGUgVUNoYXIzMiAoVVRGLTMyKSBjb250YWluaW5nIHRoZSBjb25jZXJlbmQgVW5pY29kZSBjb2Rl
cG9pbnQuCisgKiBAcGFyYW0gcmVhc29uIERlZmluZXMgdGhlIHJlYXNvbiB0aGUgY2FsbGJhY2sg
d2FzIGludm9rZWQKKyAqIEBwYXJhbSBlcnIgUmV0dXJuIHZhbHVlIHdpbGwgYmUgc2V0IHRvIHN1
Y2Nlc3MgaWYgdGhlIGNhbGxiYWNrIHdhcyBoYW5kbGVkLAorICogICAgICBvdGhlcndpc2UgdGhp
cyB2YWx1ZSB3aWxsIGJlIHNldCB0byBhIGZhaWx1cmUgc3RhdHVzLgorICogQHN0YWJsZSBJQ1Ug
Mi4wCisgKi8KK1VfU1RBQkxFIHZvaWQgVV9FWFBPUlQyIFVDTlZfRlJPTV9VX0NBTExCQUNLX0VT
Q0FQRSAoCisgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgVUNvbnZlcnRlckZyb21Vbmljb2RlQXJncyAqZnJvbVVBcmdzLAorICAgICAgICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIGNvZGVVbml0cywKKyAgICAgICAgICAgICAgICAgIGludDMy
X3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjb2RlUG9pbnQsCisgICAgICAg
ICAgICAgICAgICBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLAorICAgICAgICAgICAg
ICAgICAgVUVycm9yQ29kZSAqIGVycik7CisKKworLyoqCisgKiBETyBOT1QgQ0FMTCBUSElTIEZV
TkNUSU9OIERJUkVDVExZIQorICogVGhpcyBUbyBVbmljb2RlIGNhbGxiYWNrIHNraXBzIGFueSBJ
TExFR0FMX1NFUVVFTkNFLCBvcgorICogc2tpcHMgb25seSBVTkFTU0lOR0VEX1NFUVVFTkNFIGRl
cGVuZGluZyBvbiB0aGUgY29udGV4dCBwYXJhbWV0ZXIKKyAqIHNpbXBseSBpZ25vcmluZyB0aG9z
ZSBjaGFyYWN0ZXJzLiAKKyAqCisgKiBAcGFyYW0gY29udGV4dCAgVGhlIGZ1bmN0aW9uIGN1cnJl
bnRseSByZWNvZ25pemVzIHRoZSBjYWxsYmFjayBvcHRpb25zOgorICogICAgICAgICAgICAgICAg
IFVDTlZfU0tJUF9TVE9QX09OX0lMTEVHQUw6IFNUT1BTIGF0IHRoZSBJTExFR0FMX1NFUVVFTkNF
LAorICogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIHRoZSBlcnJvciBjb2RlIGJhY2sg
dG8gdGhlIGNhbGxlciBpbW1lZGlhdGVseS4KKyAqICAgICAgICAgICAgICAgICBOVUxMOiBTa2lw
cyBhbnkgSUxMRUdBTF9TRVFVRU5DRQorICogQHBhcmFtIHRvVUFyZ3MgSW5mb3JtYXRpb24gYWJv
dXQgdGhlIGNvbnZlcnNpb24gaW4gcHJvZ3Jlc3MKKyAqIEBwYXJhbSBjb2RlVW5pdHMgUG9pbnRz
IHRvICdsZW5ndGgnIGJ5dGVzIG9mIHRoZSBjb25jZXJuZWQgY29kZXBhZ2Ugc2VxdWVuY2UKKyAq
IEBwYXJhbSBsZW5ndGggU2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBjb25jZXJuZWQgY29kZXBhZ2Ug
c2VxdWVuY2UKKyAqIEBwYXJhbSByZWFzb24gRGVmaW5lcyB0aGUgcmVhc29uIHRoZSBjYWxsYmFj
ayB3YXMgaW52b2tlZAorICogQHBhcmFtIGVyciBSZXR1cm4gdmFsdWUgd2lsbCBiZSBzZXQgdG8g
c3VjY2VzcyBpZiB0aGUgY2FsbGJhY2sgd2FzIGhhbmRsZWQsCisgKiAgICAgIG90aGVyd2lzZSB0
aGlzIHZhbHVlIHdpbGwgYmUgc2V0IHRvIGEgZmFpbHVyZSBzdGF0dXMuCisgKiBAc3RhYmxlIElD
VSAyLjAKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIgVUNOVl9UT19VX0NBTExCQUNLX1NL
SVAgKAorICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgIFVDb252ZXJ0ZXJUb1VuaWNvZGVBcmdzICp0b1VBcmdzLAorICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogY29kZVVuaXRzLAorICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5n
dGgsCisgICAgICAgICAgICAgICAgICBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLAor
ICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqIGVycik7CisKKy8qKgorICogRE8gTk9UIENB
TEwgVEhJUyBGVU5DVElPTiBESVJFQ1RMWSEKKyAqIFRoaXMgVG8gVW5pY29kZSBjYWxsYmFjayB3
aWxsIFN1YnN0aXR1dGUgdGhlIElMTEVHQUwgU0VRVUVOQ0Usb3IgCisgKiBVTkFTU0lHTkVEX1NF
UVVFTkNFIGRlcGVuZGluZyBvbiBjb250ZXh0IHBhcmFtZXRlciwgIHdpdGggdGhlCisgKiBVbmlj
b2RlIHN1YnN0aXR1dGlvbiBjaGFyYWN0ZXIsIFUrRkZGRC4KKyAqCisgKiBAcGFyYW0gY29udGV4
dCAgVGhlIGZ1bmN0aW9uIGN1cnJlbnRseSByZWNvZ25pemVzIHRoZSBjYWxsYmFjayBvcHRpb25z
OgorICogICAgICAgICAgICAgICAgIFVDTlZfU1VCX1NUT1BfT05fSUxMRUdBTDogU1RPUFMgYXQg
dGhlIElMTEVHQUxfU0VRVUVOQ0UsCisgKiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcg
dGhlIGVycm9yIGNvZGUgYmFjayB0byB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LgorICogICAgICAg
ICAgICAgICAgIE5VTEw6IFN1YnN0aXR1dGVzIGFueSBJTExFR0FMX1NFUVVFTkNFCisgKiBAcGFy
YW0gdG9VQXJncyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udmVyc2lvbiBpbiBwcm9ncmVzcwor
ICogQHBhcmFtIGNvZGVVbml0cyBQb2ludHMgdG8gJ2xlbmd0aCcgYnl0ZXMgb2YgdGhlIGNvbmNl
cm5lZCBjb2RlcGFnZSBzZXF1ZW5jZQorICogQHBhcmFtIGxlbmd0aCBTaXplIChpbiBieXRlcykg
b2YgdGhlIGNvbmNlcm5lZCBjb2RlcGFnZSBzZXF1ZW5jZQorICogQHBhcmFtIHJlYXNvbiBEZWZp
bmVzIHRoZSByZWFzb24gdGhlIGNhbGxiYWNrIHdhcyBpbnZva2VkCisgKiBAcGFyYW0gZXJyIFJl
dHVybiB2YWx1ZSB3aWxsIGJlIHNldCB0byBzdWNjZXNzIGlmIHRoZSBjYWxsYmFjayB3YXMgaGFu
ZGxlZCwKKyAqICAgICAgb3RoZXJ3aXNlIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYSBmYWls
dXJlIHN0YXR1cy4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQ
T1JUMiBVQ05WX1RPX1VfQ0FMTEJBQ0tfU1VCU1RJVFVURSAoCisgICAgICAgICAgICAgICAgICBj
b25zdCB2b2lkICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgVUNvbnZlcnRlclRvVW5pY29k
ZUFyZ3MgKnRvVUFyZ3MsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2RlVW5pdHMs
CisgICAgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgIFVD
b252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sCisgICAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlICogZXJyKTsKKworLyoqCisgKiBETyBOT1QgQ0FMTCBUSElTIEZVTkNUSU9OIERJUkVDVExZ
IQorICogVGhpcyBUbyBVbmljb2RlIGNhbGxiYWNrIHdpbGwgU3Vic3RpdHV0ZSB0aGUgSUxMRUdB
TCBTRVFVRU5DRSB3aXRoIHRoZQorICogaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhl
IGlsbGVnYWwgYnl0ZXMKKyAqICAoaW4gdGhlIGZvcm1hdCAgJVhOTiwgZS5nLiAiJVhGRiVYMEEl
WEM4JVgwMyIpLgorICoKKyAqIEBwYXJhbSBjb250ZXh0IFRoaXMgZnVuY3Rpb24gY3VycmVudGx5
IHJlY29nbml6ZXMgdGhlIGNhbGxiYWNrIG9wdGlvbnM6CisgKiAgICAgIFVDTlZfRVNDQVBFX0lD
VSwgVUNOVl9FU0NBUEVfSkFWQSwgVUNOVl9FU0NBUEVfQywgVUNOVl9FU0NBUEVfWE1MX0RFQywK
KyAqICAgICAgVUNOVl9FU0NBUEVfWE1MX0hFWCBhbmQgVUNOVl9FU0NBUEVfVU5JQ09ERS4KKyAq
IEBwYXJhbSB0b1VBcmdzIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjb252ZXJzaW9uIGluIHByb2dy
ZXNzCisgKiBAcGFyYW0gY29kZVVuaXRzIFBvaW50cyB0byAnbGVuZ3RoJyBieXRlcyBvZiB0aGUg
Y29uY2VybmVkIGNvZGVwYWdlIHNlcXVlbmNlCisgKiBAcGFyYW0gbGVuZ3RoIFNpemUgKGluIGJ5
dGVzKSBvZiB0aGUgY29uY2VybmVkIGNvZGVwYWdlIHNlcXVlbmNlCisgKiBAcGFyYW0gcmVhc29u
IERlZmluZXMgdGhlIHJlYXNvbiB0aGUgY2FsbGJhY2sgd2FzIGludm9rZWQKKyAqIEBwYXJhbSBl
cnIgUmV0dXJuIHZhbHVlIHdpbGwgYmUgc2V0IHRvIHN1Y2Nlc3MgaWYgdGhlIGNhbGxiYWNrIHdh
cyBoYW5kbGVkLAorICogICAgICBvdGhlcndpc2UgdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byBh
IGZhaWx1cmUgc3RhdHVzLgorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KKworVV9TVEFCTEUgdm9p
ZCBVX0VYUE9SVDIgVUNOVl9UT19VX0NBTExCQUNLX0VTQ0FQRSAoCisgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgVUNvbnZlcnRlclRvVW5p
Y29kZUFyZ3MgKnRvVUFyZ3MsCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb2RlVW5p
dHMsCisgICAgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAg
IFVDb252ZXJ0ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sCisgICAgICAgICAgICAgICAgICBVRXJy
b3JDb2RlICogZXJyKTsKKworI2VuZGlmCisKKyNlbmRpZgorCisvKlVDTlZfRVJSX0gqLyAK
</data>
<flag name="review"
          id="219"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>