<?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>138343</bug_id>
          
          <creation_ts>2014-11-03 18:40:49 -0800</creation_ts>
          <short_desc>Web Inspector: Enum value collisions between different generators</short_desc>
          <delta_ts>2014-11-04 07:36:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>burg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1045944</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-11-03 18:40:49 -0800</bug_when>
    <thetext>* SUMMARY
Sending Debugger.pause reason &quot;InspectorDebuggerFrontendDispatcher::Reason::Exception&quot; across to the frontend actually sends the string &quot;WebSocket&quot; instead of &quot;exception&quot;. There is a collision between enum values for the different dispatchers.

Generated code had both:

&gt; // InspectorProtocolObjects.h
&gt; 
&gt;     namespace Timeline {
&gt;     enum class EventType {
&gt;         ...
&gt;         WebSocketDestroy = 133,
&gt;     };
&gt;     }
&gt; 
&gt; // InspectorFrontendDispatchers.h
&gt; 
&gt;     class InspectorDebuggerFrontendDispatcher {
&gt;     public:
&gt;         ...
&gt;         enum class Reason {
&gt;             Exception = 133,
&gt;         };
&gt;     }

We need to ensure that the values we generate are unique across all enums in all domains, not just the domains being generated for that particular dispatcher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045945</commentid>
    <comment_count>1</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-11-03 18:40:58 -0800</bug_when>
    <thetext>I have a fix, I need to make a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045946</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-11-03 18:41:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/18862317&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045953</commentid>
    <comment_count>3</comment_count>
      <attachid>240899</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-11-03 18:54:29 -0800</bug_when>
    <thetext>Created attachment 240899
[PATCH] Proposed Fix

Before the patch you can see the collision.

&gt; FAIL: enum-values.json-result
&gt; --- JavaScriptCore/inspector/scripts/tests/expected/enum-values.json-result	2014-11-03 18:50:12.000000000 -0800
&gt; +++ /var/folders/_b/scj8wvc516g_708gsbsfwq5w0000gn/T/tmpg_18v0/enum-values.json-result	2014-11-03 18:50:33.000000000 -0800
&gt; @@ -159,9 +159,9 @@
&gt;      // Named after parameter &apos;returnValue&apos; while generating command/event commandWithEnumReturnValue.
&gt;      enum class ReturnValue {
&gt;          Shared = 0,
&gt; -        Cyan = 1,
&gt; -        Magenta = 2,
&gt; -        Yellow = 3,
&gt; +        Cyan = 6,
&gt; +        Magenta = 7,
&gt; +        Yellow = 8,
&gt;      }; // enum class ReturnValue
&gt;      virtual void commandWithEnumReturnValue(ErrorString&amp;, InspectorCommandDomainBackendDispatcherHandler::ReturnValue* out_returnValue) = 0;
&gt;  protected:
&gt; @@ -343,8 +343,8 @@
&gt;          // Named after parameter &apos;parameter&apos; while generating command/event eventWithEnumParameter.
&gt;          enum class Parameter {
&gt;              Shared = 0,
&gt; -            Black = 1,
&gt; -            White = 2,
&gt; +            Black = 4,
&gt; +            White = 5,
&gt;          }; // enum class Parameter
&gt;      void eventWithEnumParameter(Parameter parameter);
&gt;  private:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1045954</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-03 18:57:18 -0800</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046067</commentid>
    <comment_count>5</comment_count>
      <attachid>240899</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-11-04 06:56:54 -0800</bug_when>
    <thetext>Comment on attachment 240899
[PATCH] Proposed Fix

Hmm, hadn&apos;t thought about that case.. thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046069</commentid>
    <comment_count>6</comment_count>
      <attachid>240899</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-04 07:36:08 -0800</bug_when>
    <thetext>Comment on attachment 240899
[PATCH] Proposed Fix

Clearing flags on attachment: 240899

Committed r175546: &lt;http://trac.webkit.org/changeset/175546&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1046070</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-04 07:36:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>240899</attachid>
            <date>2014-11-03 18:54:29 -0800</date>
            <delta_ts>2014-11-04 07:36:08 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>fix.patch</filename>
            <type>text/plain</type>
            <size>54528</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDgyNDQwOTMuLjQ5Y2VjNmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1IEBACiAyMDE0LTExLTAzICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRW51bSB2
YWx1ZSBjb2xsaXNpb25zIGJldHdlZW4gZGlmZmVyZW50IGdlbmVyYXRvcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODM0MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVhY2ggZ2VuZXJhdG9yIHdhcyB1
c2luZyBpdHMgb3duIGZpbHRlcmVkIGxpc3Qgb2YgZG9tYWluc190b19nZW5lcmF0ZQorICAgICAg
ICB0byBidWlsZCB0aGUgc2hhcmVkIHVuaXF1ZSBsaXN0IG9mIGVudW0gdmFsdWUgZW5jb2Rpbmdz
LiBUaGlzIGxpc3QKKyAgICAgICAgd2FzIHNsaWdodGx5IGRpZmZlcmVudCBhY3Jvc3MgZGlmZmVy
ZW50IGdlbmVyYXRvcnMuIEluc3RlYWQgYWx3YXlzCisgICAgICAgIHVzZSB0aGUgbGlzdCBvZiBh
bGwgbm9uLXN1cHBsZW1lbnRhbCBkb21haW5zIHRvIGdlbmVyYXRlIHRoZSBzaGFyZWQKKyAgICAg
ICAgbGlzdCBvZiBlbnVtIHZhbHVlcy4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2VuZXJhdG9yLm5vbl9zdXBwbGVtZW50YWxf
ZG9tYWlucyk6CisgICAgICAgIChHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZSk6CisgICAg
ICAgIChHZW5lcmF0b3IuX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1ZXMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246IEFkZGVkLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24t
cmVzdWx0OiBBZGRlZC4KKworMjAxNC0xMS0wMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9A
YXBwbGUuY29tPgorCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEZpeCBSV0lQcm90b2NvbCA2NC10
by0zMiBiaXQgY29udmVyc2lvbiB3YXJuaW5ncwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4MzI1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQppbmRl
eCBiOWM0MzhmLi44ZDRhNWRhIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC05NCw5ICs5
NCwxMiBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0
ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRo
LmJhc2VuYW1lKHNlbGYuX2lucHV0X2ZpbGVwYXRoKSkKIAogICAgICMgVGhlc2UgbWV0aG9kcyBh
cmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpOgorICAgIGRlZiBub25fc3VwcGxlbWVudGFsX2RvbWFpbnMoc2VsZik6CiAgICAgICAg
IHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbm90IGRvbWFpbi5pc19zdXBwbGVtZW50YWws
IHNlbGYubW9kZWwoKS5kb21haW5zKQogCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLm5vbl9zdXBwbGVtZW50YWxfZG9tYWlucygpCisKICAg
ICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgogICAgICAgICBwYXNzCiAKQEAgLTE3MCw3ICsx
NzMsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgIHNlbGYuX2Fzc2lnbmVkX2VudW1fdmFs
dWVzID0gW10KICAgICAgICAgYWxsX3R5cGVzID0gW10KIAotICAgICAgICBkb21haW5zID0gc2Vs
Zi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgZG9tYWlucyA9IHNlbGYubm9uX3N1cHBs
ZW1lbnRhbF9kb21haW5zKCkKIAogICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CiAgICAg
ICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZW51bS12YWx1ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmNkYWQ2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpAQCAtMCwwICsxLDM1IEBA
Cit7ImRvbWFpbnMiOlsKK3sKKyAgICAiZG9tYWluIjogIlR5cGVEb21haW4iLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsic2hhcmVk
IiwgInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAg
ImRvbWFpbiI6ICJDb21tYW5kRG9tYWluIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJuYW1lIjogImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwKKyAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogW10sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInJldHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVu
dW0iOiBbInNoYXJlZCIsICJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Il0gfQorICAgICAgICAg
ICAgXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIkV2ZW50RG9tYWlu
IiwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJldmVu
dFdpdGhFbnVtUGFyYW1ldGVyIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbInNoYXJlZCIsICJibGFjayIsICJ3aGl0ZSJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fQorICAgIF0KK30KK119CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12
YWx1ZXMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU3
ZTllODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwxMTk5IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVm
IEluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3Rv
ckFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKKworI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlwZXMu
aCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworY2xhc3MgQWx0ZXJuYXRlSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZvaWQgc2V0QmFja2VuZERpc3BhdGNoZXIo
UGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gZGlzcGF0Y2hlcikgeyBtX2Jh
Y2tlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjsgfQorICAgIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZERpc3Bh
dGNoZXIuZ2V0KCk7IH0KK3ByaXZhdGU6CisgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOworfTsKKworCitjbGFzcyBBbHRlcm5hdGVJbnNw
ZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkFsdGVybmF0
ZUluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJZCkgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0t
dmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
Ly8gVHlwZURvbWFpbi4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9tYWlu
LlR5cGVEb21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIsIEdyZWVuOiAi
Z3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKKworLy8gQ29tbWFuZERvbWFpbi4KK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlIiwgW10sIFsicmV0dXJuVmFsdWUiXSk7CitJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJDb21tYW5kRG9tYWluIik7CisKKy8vIEV2ZW50RG9tYWluLgorSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2ZW50RG9tYWlu
Iik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2ZW50RG9tYWluLmV2ZW50V2l0
aEVudW1QYXJhbWV0ZXIiLCBbInBhcmFtZXRlciJdKTsKK0luc3BlY3RvckJhY2tlbmQuYWN0aXZh
dGVEb21haW4oIkV2ZW50RG9tYWluIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvckJhY2tlbmRD
b21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJv
dG9jb2xPYmplY3RzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCitjbGFzcyBBbHRlcm5hdGVJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI7CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCisK
K2NsYXNzIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewor
cHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncmV0dXJuVmFsdWUnIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZS4KKyAg
ICBlbnVtIGNsYXNzIFJldHVyblZhbHVlIHsKKyAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAg
Q3lhbiA9IDYsCisgICAgICAgIE1hZ2VudGEgPSA3LAorICAgICAgICBZZWxsb3cgPSA4LAorICAg
IH07IC8vIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWUoRXJyb3JTdHJpbmcmLCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSogb3V0X3JldHVyblZhbHVlKSA9IDA7
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgY29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
LCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAg
SW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKK3B1YmxpYzoKKyAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlSW5zcGVjdG9yQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KK3ByaXZhdGU6CisgICAgQWx0ZXJu
YXRlSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBtX2FsdGVybmF0ZURp
c3BhdGNoZXI7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQorI2luY2x1ZGUgIkluc3BlY3RvckFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitJbnNwZWN0b3JDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitQYXNzUmVmUHRyPEluc3BlY3RvckNv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyLCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5z
cGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyLCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKKyAgICAsIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcihu
dWxscHRyKQorI2VuZGlmCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiQ29tbWFuZERvbWFpbiIpLCB0aGlzKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBpZiAobWV0aG9kID09ICJjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZSIpCisgICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkNvbW1hbmREb21haW4i
LCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKK30KKwordm9pZCBJbnNwZWN0b3JD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQorICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZShjYWxsSWQpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIEluc3BlY3RvckNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKKyAgICBt
X2FnZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1
ZSk7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOworCisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZERpc3Bh
dGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgi
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK2NsYXNzIEluc3BlY3RvckV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQorICAg
ICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFtZXRlcicgd2hpbGUgZ2VuZXJhdGlu
ZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIuCisgICAgICAgIGVudW0gY2xh
c3MgUGFyYW1ldGVyIHsKKyAgICAgICAgICAgIFNoYXJlZCA9IDAsCisgICAgICAgICAgICBCbGFj
ayA9IDQsCisgICAgICAgICAgICBXaGl0ZSA9IDUsCisgICAgICAgIH07IC8vIGVudW0gY2xhc3Mg
UGFyYW1ldGVyCisgICAgdm9pZCBldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJh
bWV0ZXIpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOworfTsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit2b2lkIEluc3BlY3RvckV2ZW50RG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIp
Cit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1l
dGVyIikpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJwYXJhbWV0ZXIiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50
VmFsdWUocGFyYW1ldGVyKSk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVy
YWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOworCisgICAgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JQcm90b2NvbE9i
amVjdHNfaAorI2RlZmluZSBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHNfaAorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBQcm90b2NvbCB7
CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFR5cGVEb21haW4geworZW51
bSBjbGFzcyBUeXBlRG9tYWluRW51bTsKK30gLy8gVHlwZURvbWFpbgorLy8gRW5kIG9mIGZvcndh
cmQgZGVjbGFyYXRpb25zLgorCisKKworCitTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFs
dWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBUeXBlRG9tYWluIHsKKy8q
ICAqLworZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bSB7CisgICAgU2hhcmVkID0gMCwKKyAgICBS
ZWQgPSAxLAorICAgIEdyZWVuID0gMiwKKyAgICBCbHVlID0gMywKK307IC8vIGVudW0gY2xhc3Mg
VHlwZURvbWFpbkVudW0KK30gLy8gVHlwZURvbWFpbgorCisKKworfSAvLyBuYW1lc3BhY2UgUHJv
dG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzX2gp
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clByb3RvY29sT2JqZWN0cy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFj
ZSBQcm90b2NvbCB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tdID0geworICAgICJzaGFyZWQiLAorICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAg
ImJsdWUiLAorICAgICJibGFjayIsCisgICAgIndoaXRlIiwKKyAgICAiY3lhbiIsCisgICAgIm1h
Z2VudGEiLAorICAgICJ5ZWxsb3ciLAorfTsKKworU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQor
CisKKworfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clByb3RvY29sT2JqZWN0cy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IFJXSVByb3RvY29sQmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12
YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitAcHJvdG9jb2wgUldJUHJvdG9j
b2xUeXBlRG9tYWluRG9tYWluSGFuZGxlcjsKK0Bwcm90b2NvbCBSV0lQcm90b2NvbENvbW1hbmRE
b21haW5Eb21haW5IYW5kbGVyOworQHByb3RvY29sIFJXSVByb3RvY29sRXZlbnREb21haW5Eb21h
aW5IYW5kbGVyOworCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKKworY2xhc3MgT2JqQ0lu
c3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8UldJUHJv
dG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0g
aGFuZGxlcjsgfQorICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShs
b25nIGNhbGxJZCkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFJldGFpblB0cjxpZDxSV0lQcm90
b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKK307CisKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworIyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEJhY2tl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRp
b24ubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5oIgorCisjaW1wb3J0
ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEJhY2tlbmREaXNw
YXRjaGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQWx0ZXJuYXRlRGlzcGF0Y2hhYmxl
QWdlbnQuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0F1Z21lbnRhYmxlSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworQGltcGxl
bWVudGF0aW9uIFJXSVByb3RvY29sQ29uZmlndXJhdGlvbgoreworICAgIEF1Z21lbnRhYmxlSW5z
cGVjdG9yQ29udHJvbGxlciogX2NvbnRyb2xsZXI7CisgICAgaWQ8UldJUHJvdG9jb2xDb21tYW5k
RG9tYWluRG9tYWluSGFuZGxlcj4gX2NvbW1hbmREb21haW5IYW5kbGVyOworICAgIFJXSVByb3Rv
Y29sRXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgKl9ldmVudERvbWFpbkV2ZW50RGlz
cGF0Y2hlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyCit7CisgICAgc2VsZiA9IFtzdXBl
ciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJU
KGNvbnRyb2xsZXIpOworICAgIF9jb250cm9sbGVyID0gY29udHJvbGxlcjsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19jb21tYW5kRG9tYWluSGFuZGxl
ciByZWxlYXNlXTsKKyAgICBbX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyIHJlbGVhc2VdOwor
ICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClzZXRDb21tYW5kRG9tYWluSGFuZGxl
cjooaWQ8UldJUHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4paGFuZGxlcgorewor
ICAgIGlmIChoYW5kbGVyID09IF9jb21tYW5kRG9tYWluSGFuZGxlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgW19jb21tYW5kRG9tYWluSGFuZGxlciByZWxlYXNlXTsKKyAgICBfY29tbWFuZERv
bWFpbkhhbmRsZXIgPSBbaGFuZGxlciByZXRhaW5dOworCisgICAgYXV0byBhbHRlcm5hdGVEaXNw
YXRjaGVyID0gc3RkOjptYWtlX3VuaXF1ZTxPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPihoYW5kbGVyKTsKKyAgICBhdXRvIGFsdGVybmF0ZUFnZW50ID0gc3RkOjpt
YWtlX3VuaXF1ZTxBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudDxJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXIsIEFsdGVybmF0ZUluc3BlY3RvckNvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4+KEFTQ0lJTGl0ZXJhbCgiQ29tbWFuZERvbWFpbiIpLCBXVEY6Om1vdmUo
YWx0ZXJuYXRlRGlzcGF0Y2hlcikpOworICAgIF9jb250cm9sbGVyLT5hZ2VudFJlZ2lzdHJ5KCku
YXBwZW5kRXh0cmFBZ2VudChXVEY6Om1vdmUoYWx0ZXJuYXRlQWdlbnQpKTsKK30KKworLSAoaWQ8
UldJUHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4pY29tbWFuZERvbWFpbkhhbmRs
ZXIKK3sKKyAgICByZXR1cm4gX2NvbW1hbmREb21haW5IYW5kbGVyOworfQorCistIChSV0lQcm90
b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyICopZXZlbnREb21haW5FdmVudERp
c3BhdGNoZXIKK3sKKyAgICBpZiAoIV9ldmVudERvbWFpbkV2ZW50RGlzcGF0Y2hlcikKKyAgICAg
ICAgX2V2ZW50RG9tYWluRXZlbnREaXNwYXRjaGVyID0gW1tSV0lQcm90b2NvbEV2ZW50RG9tYWlu
RG9tYWluRXZlbnREaXNwYXRjaGVyIGFsbG9jXSBpbml0V2l0aENvbnRyb2xsZXI6X2NvbnRyb2xs
ZXJdOworICAgIHJldHVybiBfZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7Cit9CisKK0BlbmQK
KworCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbi5tbQorCisjIyMgQmVn
aW4gRmlsZTogUldJUHJvdG9jb2xDb25maWd1cmF0aW9uLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJSV0lQcm90b2NvbC5oIgorCitAaW50ZXJmYWNl
IFJXSVByb3RvY29sQ29uZmlndXJhdGlvbiA6IE5TT2JqZWN0CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmV0YWluLCBzZXR0ZXI9c2V0Q29tbWFuZERvbWFpbkhhbmRsZXI6KSBpZDxSV0lQcm90b2Nv
bENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBjb21tYW5kRG9tYWluSGFuZGxlcjsKK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgUldJUHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciAqZXZlbnREb21haW5FdmVudERpc3BhdGNoZXI7CitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBSV0lQcm90b2NvbENvbmZpZ3VyYXRpb24uaAorCisjIyMgQmVnaW4gRmlsZTog
UldJUHJvdG9jb2xCYWNrZW5kRGlzcGF0Y2hlcnMubW0KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZW51bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJXSVByb3RvY29s
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpbmNsdWRlICJSV0lQcm90b2NvbEludGVybmFsLmgi
CisjaW5jbHVkZSAiUldJUHJvdG9jb2xFbnVtQ29udmVyc2lvbkhlbHBlcnMuaCIKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCit2b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKQoreworICAgIGlkIGVycm9y
Q2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJv
cik7CisgICAgfTsKKworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oUldJUHJvdG9jb2xDb21t
YW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1
ZSkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHRPYmplY3QgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiksIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUp
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0T2JqZWN0LnJlbGVhc2UoKSwgU3RyaW5nKCkpOworICAgIH07CisKKyAgICBbbV9kZWxlZ2F0
ZSBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107Cit9CisKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjIyMgRW5kIEZpbGU6IFJXSVByb3RvY29sQmFja2VuZERpc3Bh
dGNoZXJzLm1tCisKKyMjIyBCZWdpbiBGaWxlOiBSV0lQcm90b2NvbEVudW1Db252ZXJzaW9uSGVs
cGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFsdWVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2ltcG9ydCAi
UldJUHJvdG9jb2xBcnJheUNvbnZlcnNpb25IZWxwZXJzLmgiCisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBPYmpDRW51bVR5cGU+CitPYmpDRW51bVR5cGUgZnJv
bVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSk7CisKKworaW5saW5lIFN0cmluZyB0b1Byb3Rv
Y29sU3RyaW5nKFJXSVByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCit7CisgICAgc3dpdGNo
KHZhbHVlKSB7CisgICAgY2FzZSBSV0lQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOgorICAg
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJzaGFyZWQiKTsKKyAgICBjYXNlIFJXSVByb3RvY29s
VHlwZURvbWFpbkVudW1SZWQ6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInJlZCIpOwor
ICAgIGNhc2UgUldJUHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOgorICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJncmVlbiIpOworICAgIGNhc2UgUldJUHJvdG9jb2xUeXBlRG9tYWluRW51
bUJsdWU6CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImJsdWUiKTsKKyAgICB9Cit9CisK
K3RlbXBsYXRlPD4KK2lubGluZSBSV0lQcm90b2NvbFR5cGVEb21haW5FbnVtIGZyb21Qcm90b2Nv
bFN0cmluZyhTdHJpbmcgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQorICAg
ICAgICByZXR1cm4gUldJUHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDsKKyAgICBpZiAodmFs
dWUgPT0gInJlZCIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbFR5cGVEb21haW5FbnVtUmVk
OworICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xU
eXBlRG9tYWluRW51bUdyZWVuOworICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCisgICAgICAgIHJl
dHVybiBSV0lQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZTsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gUldJUHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDsKK30KKwor
CitpbmxpbmUgU3RyaW5nIHRvUHJvdG9jb2xTdHJpbmcoUldJUHJvdG9jb2xDb21tYW5kRG9tYWlu
Q29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSB2YWx1ZSkKK3sKKyAgICBzd2l0
Y2godmFsdWUpIHsKKyAgICBjYXNlIFJXSVByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVTaGFyZWQ6CisgICAgICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoInNoYXJlZCIpOworICAgIGNhc2UgUldJUHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZUN5YW46CisgICAgICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoImN5YW4iKTsKKyAgICBjYXNlIFJXSVByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVNYWdlbnRhOgorICAgICAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJtYWdlbnRhIik7CisgICAgY2FzZSBSV0lQcm90b2NvbENvbW1hbmREb21h
aW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlWWVsbG93OgorICAgICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJ5ZWxsb3ciKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPD4KK2lu
bGluZSBSV0lQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJl
dHVyblZhbHVlIGZyb21Qcm90b2NvbFN0cmluZyhTdHJpbmcgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlID09ICJzaGFyZWQiKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xDb21tYW5kRG9tYWlu
Q29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZVNoYXJlZDsKKyAgICBpZiAodmFs
dWUgPT0gImN5YW4iKQorICAgICAgICByZXR1cm4gUldJUHJvdG9jb2xDb21tYW5kRG9tYWluQ29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZUN5YW47CisgICAgaWYgKHZhbHVlID09
ICJtYWdlbnRhIikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVNYWdlbnRhOworICAgIGlmICh2YWx1ZSA9
PSAieWVsbG93IikKKyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVZZWxsb3c7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIFJXSVByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWVTaGFyZWQ7Cit9CisKKworaW5saW5lIFN0cmluZyB0
b1Byb3RvY29sU3RyaW5nKFJXSVByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1l
dGVyUGFyYW1ldGVyIHZhbHVlKQoreworICAgIHN3aXRjaCh2YWx1ZSkgeworICAgIGNhc2UgUldJ
UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJTaGFyZWQ6
CisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInNoYXJlZCIpOworICAgIGNhc2UgUldJUHJv
dG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJCbGFjazoKKyAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxhY2siKTsKKyAgICBjYXNlIFJXSVByb3RvY29s
RXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyV2hpdGU6CisgICAgICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoIndoaXRlIik7CisgICAgfQorfQorCit0ZW1wbGF0ZTw+Citp
bmxpbmUgUldJUHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0
ZXIgZnJvbVByb3RvY29sU3RyaW5nKFN0cmluZyB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0g
InNoYXJlZCIpCisgICAgICAgIHJldHVybiBSV0lQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRo
RW51bVBhcmFtZXRlclBhcmFtZXRlclNoYXJlZDsKKyAgICBpZiAodmFsdWUgPT0gImJsYWNrIikK
KyAgICAgICAgcmV0dXJuIFJXSVByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1l
dGVyUGFyYW1ldGVyQmxhY2s7CisgICAgaWYgKHZhbHVlID09ICJ3aGl0ZSIpCisgICAgICAgIHJl
dHVybiBSV0lQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRl
cldoaXRlOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSV0lQcm90b2Nv
bEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlclNoYXJlZDsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyMjIyBFbmQgRmlsZTogUldJUHJvdG9jb2xFbnVt
Q29udmVyc2lvbkhlbHBlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xFdmVudERp
c3BhdGNoZXJzLm1tCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGVudW0tdmFs
dWVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lt
cG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEludGVybmFsLmgiCisKKyNpbXBv
cnQgIlJXSVByb3RvY29sRW51bUNvbnZlcnNpb25IZWxwZXJzLmgiCisjaW1wb3J0IDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclZhbHVlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCisK
KworCisKK0BpbXBsZW1lbnRhdGlvbiBSV0lQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnRE
aXNwYXRjaGVyCit7CisgICAgQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyKiBfY29udHJv
bGxlcjsKK30KKworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQXVnbWVudGFi
bGVJbnNwZWN0b3JDb250cm9sbGVyKiljb250cm9sbGVyOworeworICAgIHNlbGYgPSBbc3VwZXIg
aW5pdF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChj
b250cm9sbGVyKTsKKyAgICBfY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgcmV0dXJuIHNl
bGY7Cit9CisKKy0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0ZXI6KFJX
SVByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFt
ZXRlcgoreworICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZnJvbnRlbmRDaGFubmVsID0g
X2NvbnRyb2xsZXItPmZyb250ZW5kQ2hhbm5lbCgpOworICAgIGlmICghZnJvbnRlbmRDaGFubmVs
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVz
c2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkV2ZW50RG9tYWluLmV2
ZW50V2l0aEVudW1QYXJhbWV0ZXIiKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBhcmFtZXRlciIpLCB0b1Byb3RvY29sU3RyaW5nKHBh
cmFtZXRlcikpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJh
bXMiKSwgcGFyYW1zT2JqZWN0KTsKKyAgICBmcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitAZW5kCisKKworIyMj
IEVuZCBGaWxlOiBSV0lQcm90b2NvbEV2ZW50RGlzcGF0Y2hlcnMubW0KKworIyMjIEJlZ2luIEZp
bGU6IFJXSVByb3RvY29sLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZW51
bS12YWx1ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKworI2ltcG9ydCA8V2ViSW5zcGVj
dG9yL1JXSVByb3RvY29sSlNPTk9iamVjdC5oPgorCisKKworCisKK3R5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIFJXSVByb3RvY29sVHlwZURvbWFpbkVudW0pIHsKKyAgICBSV0lQcm90b2NvbFR5
cGVEb21haW5FbnVtU2hhcmVkLAorICAgIFJXSVByb3RvY29sVHlwZURvbWFpbkVudW1SZWQsCisg
ICAgUldJUHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuLAorICAgIFJXSVByb3RvY29sVHlwZURv
bWFpbkVudW1CbHVlLAorfTsKKwordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgUldJUHJvdG9j
b2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSkgewor
ICAgIFJXSVByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0
dXJuVmFsdWVTaGFyZWQsCisgICAgUldJUHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZUN5YW4sCisgICAgUldJUHJvdG9jb2xDb21tYW5kRG9t
YWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZU1hZ2VudGEsCisgICAgUldJ
UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1
ZVllbGxvdywKK307CisKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFJXSVByb3RvY29sRXZl
bnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKSB7CisgICAgUldJUHJvdG9j
b2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJTaGFyZWQsCisgICAg
UldJUHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXJCbGFj
aywKKyAgICBSV0lQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFt
ZXRlcldoaXRlLAorfTsKKworCisKK0Bwcm90b2NvbCBSV0lQcm90b2NvbENvbW1hbmREb21haW5E
b21haW5IYW5kbGVyIDxOU09iamVjdD4KK0ByZXF1aXJlZAorLSAodm9pZCljb21tYW5kV2l0aEVu
dW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikp
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoUldJUHJvdG9jb2xDb21tYW5k
RG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkp
c3VjY2Vzc0NhbGxiYWNrOworQGVuZAorCitAaW50ZXJmYWNlIFJXSVByb3RvY29sRXZlbnREb21h
aW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAorLSAodm9pZClldmVudFdpdGhFbnVt
UGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooUldJUHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOworQGVuZAorCisKKyMjIyBFbmQgRmlsZTog
UldJUHJvdG9jb2wuaAorCisjIyMgQmVnaW4gRmlsZTogUldJUHJvdG9jb2xUeXBlcy5tbQorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVtLXZhbHVlcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUldJUHJvdG9jb2xJbnRlcm5hbC5oIgorCisjaW1wb3J0ICJSV0lQcm90b2NvbEVu
dW1Db252ZXJzaW9uSGVscGVycy5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2ltcG9ydCA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKKworCisKKworCisKKworCisj
IyMgRW5kIEZpbGU6IFJXSVByb3RvY29sVHlwZXMubW0KKworIyMjIEJlZ2luIEZpbGU6IFJXSVBy
b3RvY29sSW50ZXJuYWwuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBlbnVt
LXZhbHVlcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpbXBvcnQgIlJXSVByb3RvY29sLmgiCisjaW1wb3J0ICJSV0lQcm90b2NvbEpTT05PYmplY3RJ
bnRlcm5hbC5oIgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvQXVnbWVudGFibGVJbnNwZWN0b3JD
b250cm9sbGVyLmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZXMuaD4K
KworQGludGVyZmFjZSBSV0lQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVy
IChQcml2YXRlKQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooSW5zcGVjdG9y
OjpBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXIqKWNvbnRyb2xsZXI7CitAZW5kCisKKwor
IyMjIEVuZCBGaWxlOiBSV0lQcm90b2NvbEludGVybmFsLmgK
</data>

          </attachment>
      

    </bug>

</bugzilla>