<?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>283307</bug_id>
          
          <creation_ts>2024-11-18 11:32:18 -0800</creation_ts>
          <short_desc>CFNetwork URLRequest::initialize(CFDictionaryRef webKitSecureCodingDictionary) crashes when HTTP headers come in String -&gt; String form</short_desc>
          <delta_ts>2024-11-20 16:36:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pedro Varangot">pvarangot</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2075878</commentid>
    <comment_count>0</comment_count>
    <who name="Pedro Varangot">pvarangot</who>
    <bug_when>2024-11-18 11:32:18 -0800</bug_when>
    <thetext>This is because it&apos;s iterating them like this:

[headerFields enumerateKeysAndObjectsUsingBlock:^(NSString *name, NSArray&lt;NSString *&gt; *values, BOOL *stop) {
					for (NSString * value in values) {

and that will call countByEnumeratingWithState:objects:count: on a String (it&apos;s an array method) and crash with invalid selector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2075880</commentid>
    <comment_count>1</comment_count>
      <attachid>473268</attachid>
    <who name="Pedro Varangot">pvarangot</who>
    <bug_when>2024-11-18 11:34:38 -0800</bug_when>
    <thetext>Created attachment 473268
Test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2075881</commentid>
    <comment_count>2</comment_count>
      <attachid>473269</attachid>
    <who name="Pedro Varangot">pvarangot</who>
    <bug_when>2024-11-18 11:35:00 -0800</bug_when>
    <thetext>Created attachment 473269
Library required to run test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2075886</commentid>
    <comment_count>3</comment_count>
    <who name="Pedro Varangot">pvarangot</who>
    <bug_when>2024-11-18 11:42:27 -0800</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/36808</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2076203</commentid>
    <comment_count>4</comment_count>
    <who name="Pedro Varangot">pvarangot</who>
    <bug_when>2024-11-19 11:51:50 -0800</bug_when>
    <thetext>&lt;rdar://problem/139800100&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2076545</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-11-20 16:36:24 -0800</bug_when>
    <thetext>Committed 286883@main (1ad5fb316231): &lt;https://commits.webkit.org/286883@main&gt;

Reviewed commits have been landed. Closing PR #36808 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>473268</attachid>
            <date>2024-11-18 11:34:38 -0800</date>
            <delta_ts>2024-11-18 11:34:38 -0800</delta_ts>
            <desc>Test case</desc>
            <filename>r00100.html</filename>
            <type>text/html</type>
            <size>9224</size>
            <attacher name="Pedro Varangot">pvarangot</attacher>
            
              <data encoding="base64">PHNjcmlwdD4Kd2luZG93LnRlc3RSdW5uZXI/LndhaXRVbnRpbERvbmUoKTsKaW1wb3J0KCcuL2Nv
cmVpcGMuanMnKS50aGVuKCh7IENvcmVJUEMgfSkgPT4gewogIENvcmVJUEMuR1BVLlJlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyLlJlZGlyZWN0UmVjZWl2ZWQoMCwgewogICAgaWRlbnRpZmllcjog
MjYyMTQ3LAogICAgcmVxdWVzdDogewogICAgICAgIGdldFJlcXVlc3REYXRhVG9TZXJpYWxpemU6
IHsKICAgICAgICAgICAgdmFyaWFudFR5cGU6ICdXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RQbGF0
Zm9ybURhdGEnLAogICAgICAgICAgICB2YXJpYW50OiB7CiAgICAgICAgICAgICAgICBtX3VybFJl
cXVlc3Q6IHsKICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFZhbHVlOiB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0
YTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sUHJvcGVydGllczog
e30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNdXRhYmxlOiBmYWxzZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV91cmw6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cmluZzogJycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZW91dDogNDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fj
aGVQb2xpY3k6IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbkRvY3VtZW50
VVJMOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsVmFsdWU6
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsOiB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nOiBsb2NhdGlvbi5o
cmVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEhhbmRsZUhUVFBDb29r
aWVzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0RmxhZ3M6
IDQwOTYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dDZWxsdWxhcjogdHJ1
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50c0lkbGVTeXN0ZW1TbGVl
cDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVdpbmRvd0RlbGF5
OiAxMTgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVdpbmRvd0R1cmF0aW9u
OiAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXR3b3JrU2VydmljZVR5cGU6
IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFByaW9yaXR5OiA4OSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0hUVFA6IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZTogdHJ1ZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cE1l
dGhvZDoge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyRmllbGRzOiB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsVmFsdWU6IFt7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogWycnLCB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudFR5cGU6ICdTdHJp
bmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6
ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbGlhczogWycnLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudFR5cGU6ICdTdHJpbmcnLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6ICcnCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogWycn
LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudFR5
cGU6ICdWZWN0b3I8U3RyaW5nPicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFudDogW10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH1dCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiBbJ0EnLCB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudFR5cGU6ICdTdHJpbmcnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6IGxvY2F0
aW9uLmhyZWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFsaWFzOiBbJycsIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYW50VHlwZTogJ1ZlY3RvcjxTdHJpbmc+JywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiBbXQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZTogewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVJlZmVyZW5jZToge30KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9keVBhcnRzOiB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbmFsVmFsdWU6IFt7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhbGlhczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnRUeXBlOiAnV2ViS2l0OjpDb3JlSVBDU3RyaW5nJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RyaW5nOiAnYScKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFz
OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudFR5
cGU6ICdXZWJLaXQ6OkNvcmVJUENEYXRhJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YXJpYW50OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFSZWZlcmVuY2U6IHt9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRUeXBlOiAnV2ViS2l0OjpDb3JlSVBD
RGF0YScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
UmVmZXJlbmNlOiB7fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZW91dFRpbWU6IDU4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzU2hvcnRDb25uZWN0aW9u
VGltZW91dDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkVHJh
bnNtaXNzaW9uVGltZW91dDogNjMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxs
b3dlZFByb3RvY29sVHlwZXM6IDYwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
dW5kSW50ZXJmYWNlSWRlbnRpZmllcjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25hbFZhbHVlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0cmluZzogJycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWxsb3dzRXhwZW5zaXZlTmV0d29ya0FjY2VzczogewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25hbFZhbHVlOiBmYWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dz
Q29uc3RyYWluZWROZXR3b3JrQWNjZXNzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbmFsVmFsdWU6IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd3NVQ0E6IHt9LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc3VtZXNIVFRQM0NhcGFibGU6IGZhbHNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9uOiAwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtub3duVHJhY2tlcjogZmFsc2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJhY2tlckNvbnRleHQ6IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZTogewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9zdHJpbmc6ICcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaXZhY3lQcm94eUZhaWxDbG9zZWQ6IHRydWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmFjeVByb3h5RmFpbENsb3NlZEZvclVucmVhY2hh
YmxlTm9uTWFpbkhvc3RzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
aXZhY3lQcm94eUZhaWxDbG9zZWRGb3JVbnJlYWNoYWJsZUhvc3RzOiBmYWxzZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlc0ROU1NFQ1ZhbGlkYXRpb246IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZTogZmFsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFsbG93c1BlcnNpc3RlbnRETlM6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvaGliaXRQcml2YWN5UHJveHk6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYWxsb3dQcml2YXRlQWNjZXNzVG9rZW5zRm9yVGhpcmRQYXJ0eTogZmFsc2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlRW5oYW5jZWRQcml2YWN5TW9kZTogZmFs
c2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tUcmFja2VyczogZmFsc2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbEluc2VjdXJlTG9hZFdpdGhIVFRQ
U0ROU1JlY29yZDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNXZWJT
ZWFyY2hDb250ZW50OiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk6IHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9uYWxWYWx1ZTogW3sKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsaWFzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhbnRUeXBlOiAnc2hvcnQnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiAxNjQ3OQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXM6IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudFR5cGU6ICd1bnNpZ25lZCBs
b25nIGxvbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYW50OiA5NTAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldDogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsaWFzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnRUeXBlOiAndW5zaWduZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiA3MQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXM6IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudFR5cGU6ICdsb25nIGxvbmcnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiA3OQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbV9pc0FwcEluaXRp
YXRlZDogewogICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsVmFsdWU6IHRydWUKICAgICAgICAg
ICAgICAgIH0sCiAgICAgICAgICAgICAgICBtX3JlcXVlc3RlcjogewogICAgICAgICAgICAgICAg
ICAgIG9wdGlvbmFsVmFsdWU6IDYKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBt
X3ByaXZhY3lQcm94eUZhaWxDbG9zZWRGb3JVbnJlYWNoYWJsZU5vbk1haW5Ib3N0czogZmFsc2Us
CiAgICAgICAgICAgICAgICBtX3VzZUFkdmFuY2VkUHJpdmFjeVByb3RlY3Rpb25zOiB0cnVlLAog
ICAgICAgICAgICAgICAgbV9kaWRGaWx0ZXJMaW5rRGVjb3JhdGlvbjogZmFsc2UsCiAgICAgICAg
ICAgICAgICBtX2lzUHJpdmF0ZVRva2VuVXNhZ2VCeVRoaXJkUGFydHlBbGxvd2VkOiB0cnVlLAog
ICAgICAgICAgICAgICAgbV93YXNTY2hlbWVPcHRpbWlzdGljYWxseVVwZ3JhZGVkOiB0cnVlCiAg
ICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhY2hlUGFydGl0aW9uOiAnJywKICAgICAg
ICBoaWRkZW5Gcm9tSW5zcGVjdG9yOiBmYWxzZQogICAgfSwKICAgIHJlc3BvbnNlOiB7CiAgICAg
ICAgZ2V0UmVzcG9uc2VEYXRhOiB7fQogICAgfQp9KTsKfSk7Cjwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>473269</attachid>
            <date>2024-11-18 11:35:00 -0800</date>
            <delta_ts>2024-11-18 11:35:00 -0800</delta_ts>
            <desc>Library required to run test case</desc>
            <filename>coreipc.js</filename>
            <type>application/x-javascript</type>
            <size>54786</size>
            <attacher name="Pedro Varangot">pvarangot</attacher>
            
              <data encoding="base64">Y29uc3QgTUFYX1VJTlQ4ID0gTWF0aC5wb3coMiwgOCktMTsKY29uc3QgTUlOX1VJTlQgPSAwOwpj
b25zdCBNQVhfVUlOVDE2ID0gTWF0aC5wb3coMiwgMTYpLTE7CmNvbnN0IE1BWF9VSU5UMzIgPSBN
YXRoLnBvdygyLCAzMiktMTsKY29uc3QgTUFYX1VJTlQ2NCA9IE1hdGgucG93KDIsIDY0KS0xOwoK
Y29uc3QgTUFYX0lOVDggPSBNYXRoLnBvdygyLCA4LTEpLTE7CmNvbnN0IE1JTl9JTlQ4ID0gLU1h
dGgucG93KDIsIDgtMSkrMTsKY29uc3QgTUFYX0lOVDE2ID0gTWF0aC5wb3coMiwgMTYtMSktMTsK
Y29uc3QgTUlOX0lOVDE2ID0gLU1hdGgucG93KDIsIDE2LTEpKzE7CmNvbnN0IE1BWF9JTlQzMiA9
IE1hdGgucG93KDIsIDMyLTEpLTE7CmNvbnN0IE1JTl9JTlQzMiA9IC1NYXRoLnBvdygyLCAzMi0x
KSsxOwpjb25zdCBNQVhfSU5UNjQgPSBNYXRoLnBvdygyLCA2NC0xKS0xOwpjb25zdCBNSU5fSU5U
NjQgPSAtTWF0aC5wb3coMiwgNjQtMSkrMTsKCgpmdW5jdGlvbiBkZWVwQ29weShvYmplY3QpIHsK
ICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iamVjdCkpOwp9Cgpjb25zdCBG
VVpaX01BUktFUiA9IFsKICAgIHt0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogMHgwfSwKICAgIHt0
eXBlOiAndWludDhfdCcsIHZhbHVlOiAweDQ2fSwKICAgIHt0eXBlOiAndWludDhfdCcsIHZhbHVl
OiAweDU1fSwKICAgIHt0eXBlOiAndWludDhfdCcsIHZhbHVlOiAweDVhfSwKICAgIHt0eXBlOiAn
dWludDhfdCcsIHZhbHVlOiAweDVhfSwKICAgIHt0eXBlOiAndWludDhfdCcsIHZhbHVlOiAweDQ2
fSwKICAgIHt0eXBlOiAndWludDhfdCcsIHZhbHVlOiAweDU1fSwKICAgIHt0eXBlOiAndWludDhf
dCcsIHZhbHVlOiAweDVhfSwKICAgIHt0eXBlOiAndWludDhfdCcsIHZhbHVlOiAweDVhfSwKICAg
IHt0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogMHg0MX0sCl07CgpmdW5jdGlvbiBzcGxpdENsYXNz
QW5kRnVuY3Rpb24obmFtZSkgewogICAgY29uc3QgW2NseiwgLi4ucmVzdF0gPSBuYW1lLnNwbGl0
KCJfIik7CiAgICByZXR1cm4gW2NseiwgcmVzdC5qb2luKCJfIildOwp9CgpjbGFzcyBDb3JlSVBD
Q2xhc3MgewogICAgbWVzc2FnZXM7CiAgICB0eXBlSW5mbzsKICAgIFVJOwogICAgR1BVOwogICAg
TmV0d29ya2luZzsKICAgIG1lc3NhZ2VCeU5hbWUgPSB7fTsKCiAgICBkZWZhdWx0X3RpbWVvdXQg
PSAxOwoKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIC8vIFRha2UgYSBjb3B5IG9mIElQQyBk
aWN0aW9uYXJpZXMgdG8gYXZvaWQgY2FsbGluZyBpbnRvIElQQyBBUEkgZnJlcXVlbnRseQogICAg
ICAgIHRoaXMubWVzc2FnZXMgPSBkZWVwQ29weShJUEMubWVzc2FnZXMpOwogICAgICAgIHRoaXMu
dHlwZUluZm8gPSBkZWVwQ29weShJUEMuc2VyaWFsaXplZFR5cGVJbmZvKTsKICAgICAgICB0aGlz
LmVudW1JbmZvID0gZGVlcENvcHkoSVBDLnNlcmlhbGl6ZWRFbnVtSW5mbyk7CiAgICAgICAgdGhp
cy5vYmplY3RJZGVudGlmaWVycyA9IGRlZXBDb3B5KElQQy5vYmplY3RJZGVudGlmaWVycyk7Cgog
ICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1lc3NhZ2VCeU5hbWUoKTsKCiAgICAgICAgLy8gZml4LXVw
cwogICAgICAgIHRoaXMub2JqZWN0SWRlbnRpZmllcnMucHVzaCgnV2ViS2l0OjpXZWJQYWdlUHJv
eHlJZGVudGlmaWVyJyk7CiAgICAgICAgdGhpcy5vYmplY3RJZGVudGlmaWVycy5wdXNoKCdXZWJD
b3JlOjpQcm9jZXNzSWRlbnRpZmllcicpOwogICAgICAgIHRoaXMub2JqZWN0SWRlbnRpZmllcnMu
cHVzaCgnV2ViS2l0OjpSZW1vdGVDRE1JZGVudGlmaWVyJyk7CgogICAgICAgIHRoaXMuVUkgPSB0
aGlzLmluaXRpYWxpemVNZXNzYWdlcygiVUkiKTsKICAgICAgICB0aGlzLkdQVSA9IHRoaXMuaW5p
dGlhbGl6ZU1lc3NhZ2VzKCJHUFUiKTsKICAgICAgICB0aGlzLk5ldHdvcmtpbmcgPSB0aGlzLmlu
aXRpYWxpemVNZXNzYWdlcygiTmV0d29ya2luZyIpOwogICAgfQoKICAgIGluaXRpYWxpemVNZXNz
YWdlQnlOYW1lKCkgewogICAgICAgIGZvcihjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVu
dHJpZXModGhpcy5tZXNzYWdlcykpIHsKICAgICAgICAgICAgbGV0IFtjbGFzc05hbWUsIGZ1bmN0
aW9uTmFtZV0gPSBzcGxpdENsYXNzQW5kRnVuY3Rpb24oa2V5KTsKICAgICAgICAgICAgdmFsdWUu
Y2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgICAgICAgICB2YWx1ZS5mdW5jdGlvbk5hbWUgPSBm
dW5jdGlvbk5hbWU7CiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJ5TmFtZVt2YWx1ZS5uYW1lXSA9
IHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICBpbml0aWFsaXplTWVzc2FnZXMocHJvY2Vzcykg
ewogICAgICAgIGNvbnN0IG1lc3NhZ2VzID0ge307CiAgICAgICAgZm9yKGNvbnN0IFtrZXksIHZh
bHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm1lc3NhZ2VzKSkgewogICAgICAgICAgICBsZXQg
W2NsYXNzTmFtZSwgZnVuY3Rpb25OYW1lXSA9IHNwbGl0Q2xhc3NBbmRGdW5jdGlvbihrZXkpOwog
ICAgICAgICAgICBpZighKGNsYXNzTmFtZSBpbiBtZXNzYWdlcykpIHsKICAgICAgICAgICAgICAg
IG1lc3NhZ2VzW2NsYXNzTmFtZV0gPSB7fTsKICAgICAgICAgICAgfQogICAgICAgICAgICBtZXNz
YWdlc1tjbGFzc05hbWVdW2Z1bmN0aW9uTmFtZV0gPSB0aGlzLmdlbmVyYXRlU2VuZGluZ0Z1bmN0
aW9uKHByb2Nlc3MsIHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1lc3NhZ2VzOwog
ICAgfQoKICAgIGdlbmVyYXRlU2VuZGluZ0Z1bmN0aW9uKHByb2Nlc3MsIGRlZmluaXRpb24pIHsK
ICAgICAgICBjb25zdCBuYW1lID0gZGVmaW5pdGlvbi5uYW1lOwogICAgICAgIGlmKGRlZmluaXRp
b24ucmVwbHlBcmd1bWVudHMgPT09IG51bGwpIHsKICAgICAgICAgICAgaWYoZGVmaW5pdGlvbi5p
c1N5bmMpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoY29ubmVjdGlvbklkZW50aWZpZXIsIG1l
c3NhZ2VBcmd1bWVudHMpID0+IHsKICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVk
QXJndW1lbnRzID0gQXJndW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZUFyZ3VtZW50cyhkZWZpbml0
aW9uLmFyZ3VtZW50cywgbWVzc2FnZUFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgc2Vy
aWFsaXplZEFyZ3VtZW50cy5wdXNoKEZVWlpfTUFSS0VSKTsKICAgICAgICAgICAgICAgICAgICBJ
UEMuc2VuZFN5bmNNZXNzYWdlKHByb2Nlc3MsIGNvbm5lY3Rpb25JZGVudGlmaWVyLCBuYW1lLCB0
aGlzLmRlZmF1bHRfdGltZW91dCwgc2VyaWFsaXplZEFyZ3VtZW50cyk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKGNvbm5lY3Rp
b25JZGVudGlmaWVyLCBtZXNzYWdlQXJndW1lbnRzKSA9PiB7CiAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc2VyaWFsaXplZEFyZ3VtZW50cyA9IEFyZ3VtZW50U2VyaWFsaXplci5zZXJpYWxpemVB
cmd1bWVudHMoZGVmaW5pdGlvbi5hcmd1bWVudHMsIG1lc3NhZ2VBcmd1bWVudHMpOwogICAgICAg
ICAgICAgICAgICAgIHNlcmlhbGl6ZWRBcmd1bWVudHMucHVzaChGVVpaX01BUktFUik7CiAgICAg
ICAgICAgICAgICAgICAgSVBDLnNlbmRNZXNzYWdlKHByb2Nlc3MsIGNvbm5lY3Rpb25JZGVudGlm
aWVyLCBuYW1lLCBzZXJpYWxpemVkQXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IHJlcGx5QXJndW1lbnRz
ID0gZGVmaW5pdGlvbi5yZXBseUFyZ3VtZW50czsKICAgICAgICAgICAgaWYoZGVmaW5pdGlvbi5p
c1N5bmMpIHsKICAgICAgICAgICAgICAgIHJldHVybiAoY29ubmVjdGlvbklkZW50aWZpZXIsIG1l
c3NhZ2VBcmd1bWVudHMsIHJlcGx5SGFuZGxlcikgPT4gewogICAgICAgICAgICAgICAgICAgIGNv
bnN0IHNlcmlhbGl6ZWRBcmd1bWVudHMgPSBBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplQXJn
dW1lbnRzKGRlZmluaXRpb24uYXJndW1lbnRzLCBtZXNzYWdlQXJndW1lbnRzKTsKICAgICAgICAg
ICAgICAgICAgICBzZXJpYWxpemVkQXJndW1lbnRzLnB1c2goRlVaWl9NQVJLRVIpOwogICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHJlcGx5ID0gSVBDLnNlbmRTeW5jTWVzc2FnZShwcm9jZXNzLCBj
b25uZWN0aW9uSWRlbnRpZmllciwgbmFtZSwgdGhpcy5kZWZhdWx0X3RpbWVvdXQsIHNlcmlhbGl6
ZWRBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgIGlmKHJlcGx5ICYmIHJlcGx5SGFuZGxl
cikgewogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGFyc2VkUmVwbHksIHR5cGVkUmVw
bHldID0gQXJndW1lbnRQYXJzZXIucGFyc2VSZXBseShyZXBseSwgcmVwbHlBcmd1bWVudHMpOwog
ICAgICAgICAgICAgICAgICAgICAgICByZXBseUhhbmRsZXIocGFyc2VkUmVwbHksIHJlcGx5LmJ1
ZmZlciwgdHlwZWRSZXBseSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIChjb25uZWN0aW9u
SWRlbnRpZmllciwgbWVzc2FnZUFyZ3VtZW50cywgcmVwbHlIYW5kbGVyKSA9PiB7CiAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IElQQy5jb25uZWN0aW9uRm9yUHJvY2Vzc1Rh
cmdldChwcm9jZXNzKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkQXJndW1l
bnRzID0gQXJndW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZUFyZ3VtZW50cyhkZWZpbml0aW9uLmFy
Z3VtZW50cywgbWVzc2FnZUFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXpl
ZEFyZ3VtZW50cy5wdXNoKEZVWlpfTUFSS0VSKTsKICAgICAgICAgICAgICAgICAgICBjb25uZWN0
aW9uLnNlbmRXaXRoQXN5bmNSZXBseShjb25uZWN0aW9uSWRlbnRpZmllciwgbmFtZSwgc2VyaWFs
aXplZEFyZ3VtZW50cywgKHJlcGx5KT0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVw
bHlIYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGFyc2VkUmVw
bHksIHR5cGVkUmVwbHldID0gQXJndW1lbnRQYXJzZXIucGFyc2VSZXBseShyZXBseSwgcmVwbHlB
cmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlIYW5kbGVyKHBhcnNl
ZFJlcGx5LCByZXBseS5idWZmZXIsIHR5cGVkUmVwbHkpOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICB9CgogICAgbmV3U3RyZWFtQ29ubmVjdGlvbigpIHsKICAgICAgICBy
ZXR1cm4gbmV3IFN0cmVhbUNvbm5lY3Rpb24oKTsKICAgIH0KfQoKZXhwb3J0IGNsYXNzIFN0cmVh
bUNvbm5lY3Rpb24gewogICAgI2Nvbm5lY3Rpb25QYWlyOwogICAgaGFuZGxlOwogICAgY29ubmVj
dGlvbjsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuI2Nvbm5lY3Rpb25QYWlyID0g
SVBDLmNyZWF0ZVN0cmVhbUNsaWVudENvbm5lY3Rpb24oMTQsIDAuMSk7CiAgICAgICAgdGhpcy5o
YW5kbGUgPSB0aGlzLiNjb25uZWN0aW9uUGFpclsxXTsKICAgICAgICB0aGlzLmNvbm5lY3Rpb24g
PSB0aGlzLiNjb25uZWN0aW9uUGFpclswXTsKICAgICAgICB0aGlzLmNvbm5lY3Rpb24ub3Blbigp
OwogICAgfQoKICAgIG5ld0ludGVyZmFjZShpbnRlcmZhY2VOYW1lLCBjb25uZWN0aW9uSWRlbnRp
ZmllcikgewogICAgICAgIHJldHVybiBuZXcgU3RyZWFtQ29ubmVjdGlvbkludGVyZmFjZShpbnRl
cmZhY2VOYW1lLCBjb25uZWN0aW9uSWRlbnRpZmllciwgdGhpcy5jb25uZWN0aW9uKTsKICAgIH0K
fQoKZXhwb3J0IGNsYXNzIFN0cmVhbUNvbm5lY3Rpb25JbnRlcmZhY2UgewogICAgI2Nvbm5lY3Rp
b25JZGVudGlmaWVyOwogICAgY29uc3RydWN0b3IoaW50ZXJmYWNlTmFtZSwgY29ubmVjdGlvbklk
ZW50aWZpZXIsIGNvbm5lY3Rpb24pIHsKICAgICAgICB0aGlzLmludGVyZmFjZU5hbWUgPSBpbnRl
cmZhY2VOYW1lOwogICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247CiAgICAgICAg
dGhpcy4jY29ubmVjdGlvbklkZW50aWZpZXIgPSBjb25uZWN0aW9uSWRlbnRpZmllcjsKICAgICAg
ICB0aGlzLmdlbmVyYXRlZEZ1bmN0aW9ucyA9IFtdOwogICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1l
c3NhZ2VzKCk7CiAgICB9CgogICAgaW5pdGlhbGl6ZU1lc3NhZ2VzKCkgewogICAgICAgIGZvcihj
b25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoQ29yZUlQQy5tZXNzYWdlcykpIHsK
ICAgICAgICAgICAgbGV0IFtjbGFzc05hbWUsIGZ1bmN0aW9uTmFtZV0gPSBzcGxpdENsYXNzQW5k
RnVuY3Rpb24oa2V5KTsKICAgICAgICAgICAgaWYoY2xhc3NOYW1lID09IHRoaXMuaW50ZXJmYWNl
TmFtZSkgewogICAgICAgICAgICAgICAgdGhpc1tmdW5jdGlvbk5hbWVdID0gdGhpcy5nZW5lcmF0
ZVN0cmVhbVNlbmRpbmdGdW5jdGlvbih2YWx1ZSk7CiAgICAgICAgICAgICAgICB0aGlzLmdlbmVy
YXRlZEZ1bmN0aW9ucy5wdXNoKGZ1bmN0aW9uTmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICB9CgogICAgZ2VuZXJhdGVTdHJlYW1TZW5kaW5nRnVuY3Rpb24oZGVmaW5pdGlvbikgewog
ICAgICAgIGNvbnN0IG5hbWUgPSBkZWZpbml0aW9uLm5hbWU7CiAgICAgICAgaWYoZGVmaW5pdGlv
bi5yZXBseUFyZ3VtZW50cyA9PT0gbnVsbCkgewogICAgICAgICAgICBpZihkZWZpbml0aW9uLmlz
U3luYykgewogICAgICAgICAgICAgICAgcmV0dXJuIChtZXNzYWdlQXJndW1lbnRzKSA9PiB7CiAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplZEFyZ3VtZW50cyA9IEFyZ3VtZW50U2Vy
aWFsaXplci5zZXJpYWxpemVBcmd1bWVudHMoZGVmaW5pdGlvbi5hcmd1bWVudHMsIG1lc3NhZ2VB
cmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5zZW5kU3luY01l
c3NhZ2UodGhpcy4jY29ubmVjdGlvbklkZW50aWZpZXIsIG5hbWUsIHNlcmlhbGl6ZWRBcmd1bWVu
dHMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgcmV0dXJuIChtZXNzYWdlQXJndW1lbnRzKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc2VyaWFsaXplZEFyZ3VtZW50cyA9IEFyZ3VtZW50U2VyaWFsaXplci5zZXJpYWxpemVBcmd1
bWVudHMoZGVmaW5pdGlvbi5hcmd1bWVudHMsIG1lc3NhZ2VBcmd1bWVudHMpOwogICAgICAgICAg
ICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5zZW5kTWVzc2FnZSh0aGlzLiNjb25uZWN0aW9uSWRl
bnRpZmllciwgbmFtZSwgc2VyaWFsaXplZEFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCByZXBseUFyZ3Vt
ZW50cyA9IGRlZmluaXRpb24ucmVwbHlBcmd1bWVudHM7CiAgICAgICAgICAgIGlmKGRlZmluaXRp
b24uaXNTeW5jKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKG1lc3NhZ2VBcmd1bWVudHMsIHJl
cGx5SGFuZGxlcikgPT4gewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRBcmd1
bWVudHMgPSBBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplQXJndW1lbnRzKGRlZmluaXRpb24u
YXJndW1lbnRzLCBtZXNzYWdlQXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBy
ZXBseSA9IHRoaXMuY29ubmVjdGlvbi5zZW5kU3luY01lc3NhZ2UodGhpcy4jY29ubmVjdGlvbklk
ZW50aWZpZXIsIG5hbWUsIHNlcmlhbGl6ZWRBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAg
IGlmKHJlcGx5ICYmIHJlcGx5SGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBbcGFyc2VkUmVwbHksIHR5cGVkUmVwbHldID0gQXJndW1lbnRQYXJzZXIucGFyc2VSZXBseShy
ZXBseSwgcmVwbHlBcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgICAgICByZXBseUhhbmRs
ZXIocGFyc2VkUmVwbHksIHJlcGx5LmJ1ZmZlciwgdHlwZWRSZXBseSk7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgcmV0dXJuIChtZXNzYWdlQXJndW1lbnRzLCByZXBseUhhbmRsZXIpID0+IHsKICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkQXJndW1lbnRzID0gQXJndW1lbnRTZXJpYWxp
emVyLnNlcmlhbGl6ZUFyZ3VtZW50cyhkZWZpbml0aW9uLmFyZ3VtZW50cywgbWVzc2FnZUFyZ3Vt
ZW50cyk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLnNlbmRXaXRoQXN5bmNS
ZXBseSh0aGlzLiNjb25uZWN0aW9uSWRlbnRpZmllciwgbmFtZSwgc2VyaWFsaXplZEFyZ3VtZW50
cywgKHJlcGx5KT0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVwbHlIYW5kbGVyKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGFyc2VkUmVwbHksIHR5cGVkUmVw
bHldID0gQXJndW1lbnRQYXJzZXIucGFyc2VSZXBseShyZXBseSwgcmVwbHlBcmd1bWVudHMpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbHlIYW5kbGVyKHBhcnNlZFJlcGx5LCByZXBs
eS5idWZmZXIsIHR5cGVkUmVwbHkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICB9Cn0KCmV4cG9ydCBjbGFzcyBTZXJpYWxpemF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7
CiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7CiAgICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAg
ICAgdGhpcy5uYW1lID0gJ1NlcmlhbGl6YXRpb25FcnJvcic7CiAgICB9Cn0KCmNvbnN0IGFsaWFz
ZXMgPSB7CiAgICAnaW50JzogJ3VpbnQzMl90JywKICAgICd1bnNpZ25lZCc6ICd1aW50MzJfdCcs
CiAgICAnY2hhcic6ICd1aW50OF90JywKICAgICdzaXplX3QnOiAndWludDY0X3QnLAogICAgJ3Bp
ZF90JzogJ3VpbnQzMl90JywKICAgICd1bnNpZ25lZCBzaG9ydCc6ICd1aW50MTZfdCcsCiAgICAn
Y29uc3QgdWludDhfdCc6ICd1aW50OF90JywKICAgICdjb25zdCBjaGFyJzogJ3VpbnQ4X3QnLAog
ICAgJ3Vuc2lnbmVkIGxvbmcnOiAndWludDY0X3QnLAogICAgJ2xvbmcnOiAndWludDY0X3QnLAog
ICAgJ3Vuc2lnbmVkIGNoYXInOiAndWludDhfdCcsCiAgICAnQ0dGbG9hdCc6ICdkb3VibGUnLAog
ICAgJ2xvbmcgbG9uZyc6ICdpbnQ2NF90JywKICAgICd1bnNpZ25lZCBsb25nIGxvbmcnOiAndWlu
dDY0X3QnLAogICAgJ3Nob3J0JzogJ2ludDE2X3QnLAogICAgJ0dDR0xlbnVtJzogJ3VpbnQzMl90
JywKICAgICdjb25zdCBmbG9hdCc6ICdmbG9hdCcsCiAgICAnY29uc3QgaW50MzJfdCc6ICdpbnQz
Ml90JywKICAgICdjb25zdCB1aW50MzJfdCc6ICd1aW50MzJfdCcsCiAgICAnTlNJbnRlZ2VyJzog
J2ludDY0X3QnLAogICAgJ05TVUludGVnZXInOiAndWludDY0X3QnLAogICAgJ1dlYkNvcmU6OkNv
bnRleHRNZW51QWN0aW9uJzogJ3VpbnQzMl90JywKICAgICdDR0JpdG1hcEluZm8nOiAndWludDMy
X3QnLAogICAgJ1VJbnQzMic6ICd1aW50MzJfdCcsCiAgICAnQ1RGb250RGVzY3JpcHRvck9wdGlv
bnMnOiAndWludDMyX3QnLAogICAgJ1N5c3RlbU1lbW9yeVByZXNzdXJlU3RhdHVzJzogJ1dURjo6
U3lzdGVtTWVtb3J5UHJlc3N1cmVTdGF0dXMnCn0KCmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQWxp
YXMoYXJndW1lbnRUeXBlKSB7CiAgICBpZihhcmd1bWVudFR5cGUgaW4gYWxpYXNlcykgewogICAg
ICAgIHJldHVybiByZXNvbHZlQWxpYXMoYWxpYXNlc1thcmd1bWVudFR5cGVdKTsKICAgIH0KICAg
IHJldHVybiBhcmd1bWVudFR5cGU7Cn0KCmZ1bmN0aW9uIGlzUHJpbXRpdmVUeXBlKHR5cGUpIHsK
ICAgIHJldHVybiBbImRvdWJsZSIsICJmbG9hdCIsICJib29sIiwiU3RyaW5nIiwidWludDhfdCIs
ICJpbnQ4X3QiLCJ1aW50MTZfdCIsICJpbnQxNl90IiwidWludDMyX3QiLCAiaW50MzJfdCIsInVp
bnQ2NF90IiwgImludDY0X3QiLF0uaW5jbHVkZXModHlwZSk7Cn0KCmZ1bmN0aW9uIGlzRW51bSh0
eXBlKSB7CiAgICByZXR1cm4gQ29yZUlQQy5lbnVtSW5mb1t0eXBlXSAhPSB1bmRlZmluZWQ7Cn0K
CmZ1bmN0aW9uIGlzSWRlbnRpZmllcih0eXBlKSB7CiAgICByZXR1cm4gQ29yZUlQQy5vYmplY3RJ
ZGVudGlmaWVycy5pbmNsdWRlcyh0eXBlKTsKfQoKZXhwb3J0IGNsYXNzIEFyZ3VtZW50U2VyaWFs
aXplciB7CiAgICBzdGF0aWMgZW51bVNpemVNYXAgPSB7CiAgICAgIDE6ICd1aW50OF90JywKICAg
ICAgMjogJ3VpbnQxNl90JywKICAgICAgNDogJ3VpbnQzMl90JywKICAgICAgODogJ3VpbnQ2NF90
JwogICAgfTsKCiAgICBzdGF0aWMgc3BsaXRUZW1wbGF0ZVR5cGUodGVtcGxhdGVUeXBlKSB7CiAg
ICAgICAgY29uc3QgcmVzdWx0ID0gW107CiAgICAgICAgbGV0IGN1cnJlbnQgPSAnJzsKICAgICAg
ICBsZXQgZGVwdGggPSAwOwogICAgICAgIGZvcihsZXQgaW5kZXg9MDsgaW5kZXg8dGVtcGxhdGVU
eXBlLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgICAgICBjb25zdCBjdXJyZW50Q2hhcmFjdGVy
ID0gdGVtcGxhdGVUeXBlLmNoYXJBdChpbmRleCk7CiAgICAgICAgICAgIGlmKGN1cnJlbnRDaGFy
YWN0ZXIgPT0gJz4nKSB7CiAgICAgICAgICAgICAgICBkZXB0aCAtPSAxOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIGlmKGN1cnJlbnRDaGFyYWN0ZXIgPT0gJzwnKSB7CiAgICAgICAgICAgICAg
ICBkZXB0aCArPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGRlcHRoPT0wICYmIGN1
cnJlbnRDaGFyYWN0ZXIgPT0gJywnKSB7CiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjdXJy
ZW50LnRyaW0oKSk7CiAgICAgICAgICAgICAgICBjdXJyZW50ID0gJyc7CiAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICBjdXJyZW50ICs9IGN1cnJlbnRDaGFyYWN0ZXI7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoZGVwdGggIT0gMCkgewogICAgICAgICAgICB0
aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGB1bmJhbGFuY2VkIGFuZ2xlIGJyYWNrZXRzIHdo
ZW4gcGFyc2luZyAnJHsgdGVtcGxhdGVUeXBlIH0nYCkKICAgICAgICB9CiAgICAgICAgcmVzdWx0
LnB1c2goY3VycmVudC50cmltKCkpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAg
c3RhdGljIHBhcnNlVGVtcGxhdGUobmFtZSkgewogICAgICAgIGlmKCFuYW1lLmVuZHNXaXRoKCI+
IikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgQ2Fubm90IHBh
cnNlIHRlbXBsYXRlICckeyBuYW1lIH0nLiBEb2VzIG5vdCBlbmQgd2l0aCAnPidgKTsKICAgICAg
ICB9CiAgICAgICAgY29uc3Qgc3RhcnQgPSBuYW1lLmluZGV4T2YoIjwiKTsKICAgICAgICBpZihz
dGFydCA9PSAtMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGBD
b3VsZG4ndCBmaW5kIHN0YXJ0IG9mIHRlbXBsYXRlICckeyBuYW1lIH0nYCk7CiAgICAgICAgfQog
ICAgICAgIHJldHVybiBbbmFtZS5zdWJzdHJpbmcoMCwgc3RhcnQpLCBuYW1lLnN1YnN0cmluZyhz
dGFydCArIDEsIG5hbWUubGVuZ3RoLTEpXTsKICAgIH0KCiAgICBzdGF0aWMgc2VyaWFsaXplT3B0
aW9uYWwoaW5uZXJUeXBlLCBhcmd1bWVudCkgewogICAgICAgIGlmKE9iamVjdC5oYXNPd24oYXJn
dW1lbnQsICJvcHRpb25hbFZhbHVlIikpIHsKICAgICAgICAgICAgY29uc3QgYXJndW1lbnREZWZp
bml0aW9uID0gewogICAgICAgICAgICAgICAgdHlwZTogaW5uZXJUeXBlLAogICAgICAgICAgICAg
ICAgbmFtZTogJ29wdGlvbmFsVmFsdWUnCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRyeSB7
CiAgICAgICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkVmFsdWUgPSBBcmd1bWVudFNlcmlhbGl6
ZXIuc2VyaWFsaXplQXJndW1lbnQoYXJndW1lbnREZWZpbml0aW9uLCBhcmd1bWVudC5vcHRpb25h
bFZhbHVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBbe3ZhbHVlOiAxLCB0eXBlOiAnYm9vbCd9
LCBzZXJpYWxpemVkVmFsdWVdOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAg
ICAgICAgICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBTZXJpYWxpemF0aW9uRXJyb3IpIHsKICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGB3aGVuIHNlcmlhbGl6
aW5nIG9wdGlvbmFsIHZhbHVlIG9mIHR5cGUgJyR7IGlubmVyVHlwZSB9JzogJHsgZXJyb3IubWVz
c2FnZSB9YCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRo
cm93IGVycm9yOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgcmV0dXJuIFt7dmFsdWU6IDAsIHR5cGU6ICdib29sJ31dOwogICAgICAg
IH0KICAgIH0KCiAgICBzdGF0aWMgc2VyaWFsaXplTWFya2FibGUoaW5uZXJUeXBlLCBhcmd1bWVu
dCkgewogICAgICAgIGlmKE9iamVjdC5oYXNPd24oYXJndW1lbnQsICJvcHRpb25hbFZhbHVlIikp
IHsKICAgICAgICAgICAgY29uc3QgYXJndW1lbnREZWZpbml0aW9uID0gewogICAgICAgICAgICAg
ICAgdHlwZTogaW5uZXJUeXBlLAogICAgICAgICAgICAgICAgbmFtZTogJ29wdGlvbmFsVmFsdWUn
CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBjb25zdCBz
ZXJpYWxpemVkVmFsdWUgPSBBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplQXJndW1lbnQoYXJn
dW1lbnREZWZpbml0aW9uLCBhcmd1bWVudC5vcHRpb25hbFZhbHVlKTsKICAgICAgICAgICAgICAg
IHJldHVybiBbe3ZhbHVlOiAwLCB0eXBlOiAnYm9vbCd9LCBzZXJpYWxpemVkVmFsdWVdOwogICAg
ICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgaWYoZXJyb3IgaW5zdGFu
Y2VvZiBTZXJpYWxpemF0aW9uRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
U2VyaWFsaXphdGlvbkVycm9yKGB3aGVuIHNlcmlhbGl6aW5nIG9wdGlvbmFsIHZhbHVlIG9mIHR5
cGUgJyR7IGlubmVyVHlwZSB9JzogJHsgZXJyb3IubWVzc2FnZSB9YCk7CiAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIFt7
dmFsdWU6IDEsIHR5cGU6ICdib29sJ31dOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgc2Vy
aWFsaXplVmVjdG9yKGlubmVyVHlwZSwgYXJndW1lbnQpIHsKICAgICAgICBjb25zdCBzcGxpdFR5
cGUgPSBBcmd1bWVudFNlcmlhbGl6ZXIuc3BsaXRUZW1wbGF0ZVR5cGUoaW5uZXJUeXBlKTsKICAg
ICAgICBpbm5lclR5cGUgPSBzcGxpdFR5cGVbMF07CiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShh
cmd1bWVudCkpIHsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gW107CiAgICAgICAgICAgIGNv
bnN0IGFyZ3VtZW50RGVmaW5pdGlvbiA9IHsKICAgICAgICAgICAgICAgIHR5cGU6IGlubmVyVHlw
ZSwKICAgICAgICAgICAgfTsKICAgICAgICAgICAgbGV0IGNvdW50ID0gMDsKICAgICAgICAgICAg
Zm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJndW1lbnQpIHsKICAgICAgICAgICAgICAgIGFyZ3VtZW50
RGVmaW5pdGlvbi5uYW1lID0gYGVsZW1lbnQjJHsgY291bnQgfWA7CiAgICAgICAgICAgICAgICBj
b3VudCArPSAxOwogICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goWyBBcmd1bWVudFNlcmlhbGl6
ZXIuc2VyaWFsaXplQXJndW1lbnQoYXJndW1lbnREZWZpbml0aW9uLCBlbGVtZW50KSBdKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gW3t2YWx1ZTogcmVzdWx0LCB0eXBlOiAnVmVj
dG9yJ31dOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKCdh
cmd1bWVudCBvZiB2ZWN0b3ItdHlwZSBpcyBub3QgYW4gYXJyYXknKTsKICAgIH0KCiAgICBzdGF0
aWMgc2VyaWFsaXplSGFzaFNldChpbm5lclR5cGUsIGFyZ3VtZW50KSB7CiAgICAgICAgY29uc3Qg
c3BsaXRUeXBlID0gQXJndW1lbnRTZXJpYWxpemVyLnNwbGl0VGVtcGxhdGVUeXBlKGlubmVyVHlw
ZSk7CiAgICAgICAgaW5uZXJUeXBlID0gc3BsaXRUeXBlWzBdOwogICAgICAgIGlmKEFycmF5Lmlz
QXJyYXkoYXJndW1lbnQpKSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgICAg
ICAgICBjb25zdCBhcmd1bWVudERlZmluaXRpb24gPSB7CiAgICAgICAgICAgICAgICB0eXBlOiBp
bm5lclR5cGUsCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGxldCBjb3VudCA9IDA7CiAgICAg
ICAgICAgIGZvcihjb25zdCBlbGVtZW50IG9mIGFyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICBh
cmd1bWVudERlZmluaXRpb24ubmFtZSA9IGBlbGVtZW50IyR7IGNvdW50IH1gOwogICAgICAgICAg
ICAgICAgY291bnQgKz0gMTsKICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKFsgQXJndW1lbnRT
ZXJpYWxpemVyLnNlcmlhbGl6ZUFyZ3VtZW50KGFyZ3VtZW50RGVmaW5pdGlvbiwgZWxlbWVudCkg
XSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7dmFsdWU6IGNvdW50LCB0eXBl
OiAndWludDMyX3QnfSwgcmVzdWx0XTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IFNlcmlh
bGl6YXRpb25FcnJvcignYXJndW1lbnQgb2YgSGFzaFNldCB0eXBlIGlzIG5vdCBhbiBhcnJheScp
OwogICAgfQoKICAgIHN0YXRpYyBzZXJpYWxpemVIYXNoTWFwKGlubmVyVHlwZSwgYXJndW1lbnQp
IHsKICAgICAgICBpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50KSkgewogICAgICAgICAgICBjb25z
dCByZXN1bHQgPSBbXTsKICAgICAgICAgICAgY29uc3QgYXJndW1lbnREZWZpbml0aW9uID0gewog
ICAgICAgICAgICAgICAgdHlwZTogaW5uZXJUeXBlLAogICAgICAgICAgICB9OwogICAgICAgICAg
ICBsZXQgY291bnQgPSAwOwogICAgICAgICAgICBmb3IoY29uc3QgZWxlbWVudCBvZiBhcmd1bWVu
dCkgewogICAgICAgICAgICAgICAgYXJndW1lbnREZWZpbml0aW9uLm5hbWUgPSBga2V5IyR7IGNv
dW50IH1gOwogICAgICAgICAgICAgICAgY291bnQgKz0gMTsKICAgICAgICAgICAgICAgIHJlc3Vs
dC5wdXNoKFsgQXJndW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZUtleVZhbHVlUGFpcihhcmd1bWVu
dERlZmluaXRpb24sIGVsZW1lbnQpIF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVy
biBbe3ZhbHVlOiBjb3VudCwgdHlwZTogJ3VpbnQzMl90J30sIHJlc3VsdF07CiAgICAgICAgfQog
ICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoJ2FyZ3VtZW50IG9mIEhhc2hNYXAg
dHlwZSBpcyBub3QgYW4gYXJyYXknKTsKICAgIH0KCiAgICBzdGF0aWMgc2VyaWFsaXplU3RkQXJy
YXkoaW5uZXJUeXBlLCBhcmd1bWVudCkgewogICAgICAgIGNvbnN0IHNwbGl0VHlwZSA9IEFyZ3Vt
ZW50U2VyaWFsaXplci5zcGxpdFRlbXBsYXRlVHlwZShpbm5lclR5cGUpOwogICAgICAgIGlmKHNw
bGl0VHlwZS5sZW5ndGggIT0gMikgewogICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlv
bkVycm9yKCdzdGQ6OnBhaXIgZG9lcyBub3QgaGF2ZSBhIGZpeGVkIGNhcmRpbmFsaXR5JykKICAg
ICAgICB9CiAgICAgICAgY29uc3Qgc2l6ZSA9IE51bWJlcihzcGxpdFR5cGVbMV0pOwogICAgICAg
IGlubmVyVHlwZSA9IHNwbGl0VHlwZVswXTsKICAgICAgICBpZihBcnJheS5pc0FycmF5KGFyZ3Vt
ZW50KSB8fCBhcmd1bWVudC5sZW5ndGggIT0gc2l6ZSkgewogICAgICAgICAgICBjb25zdCByZXN1
bHQgPSBbXTsKICAgICAgICAgICAgY29uc3QgYXJndW1lbnREZWZpbml0aW9uID0gewogICAgICAg
ICAgICAgICAgdHlwZTogaW5uZXJUeXBlLAogICAgICAgICAgICB9OwogICAgICAgICAgICBsZXQg
Y291bnQgPSAwOwogICAgICAgICAgICBmb3IoY29uc3QgZWxlbWVudCBvZiBhcmd1bWVudCkgewog
ICAgICAgICAgICAgICAgYXJndW1lbnREZWZpbml0aW9uLm5hbWUgPSBgZWxlbWVudCMkeyBjb3Vu
dCB9YDsKICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7CiAgICAgICAgICAgICAgICByZXN1bHQu
cHVzaChbIEFyZ3VtZW50U2VyaWFsaXplci5zZXJpYWxpemVBcmd1bWVudChhcmd1bWVudERlZmlu
aXRpb24sIGVsZW1lbnQpIF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgfQogICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoJ2FyZ3Vt
ZW50IG9mIHN0ZDo6cGFpciB0eXBlIGlzIG5vdCBhbiBhcnJheScpOwogICAgfQoKICAgIHN0YXRp
YyBzZXJpYWxpemVQYWlyKGlubmVyVHlwZSwgYXJndW1lbnQpIHsKICAgICAgICBpZihBcnJheS5p
c0FycmF5KGFyZ3VtZW50KSAmJiBhcmd1bWVudC5sZW5ndGggPT0gMikgewogICAgICAgICAgICBj
b25zdCByZXN1bHQgPSBbXTsKICAgICAgICAgICAgY29uc3QgaW5uZXJUeXBlcyA9IEFyZ3VtZW50
U2VyaWFsaXplci5zcGxpdFRlbXBsYXRlVHlwZShpbm5lclR5cGUpOwogICAgICAgICAgICBsZXQg
YXJndW1lbnREZWZpbml0aW9uID0gewogICAgICAgICAgICAgICAgdHlwZTogaW5uZXJUeXBlc1sw
XSwKICAgICAgICAgICAgICAgIG5hbWU6ICdlbGVtZW50IzAnLAogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHJlc3VsdC5wdXNoKFsgQXJndW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZUFyZ3VtZW50
KGFyZ3VtZW50RGVmaW5pdGlvbiwgYXJndW1lbnRbMF0pIF0pOwogICAgICAgICAgICBhcmd1bWVu
dERlZmluaXRpb24udHlwZSA9IGlubmVyVHlwZXNbMV07CiAgICAgICAgICAgIGFyZ3VtZW50RGVm
aW5pdGlvbi5uYW1lID0gJ2VsZW1lbnQjMSc7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFsgQXJn
dW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZUFyZ3VtZW50KGFyZ3VtZW50RGVmaW5pdGlvbiwgYXJn
dW1lbnRbMV0pIF0pOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAg
ICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKCdhcmd1bWVudCBvZiBwYWlyLXR5cGUgaXMg
bm90IGFuIGFycmF5IHdpdGggdHdvIGVsZW1lbnRzJyk7CiAgICB9CgogICAgc3RhdGljIHNlcmlh
bGl6ZUtleVZhbHVlUGFpcihpbm5lclR5cGUsIGFyZ3VtZW50KSB7CiAgICAgICAgY29uc3Qgc3Bs
aXRUZW1wbGF0ZVR5cGUgPSBBcmd1bWVudFNlcmlhbGl6ZXIuc3BsaXRUZW1wbGF0ZVR5cGUoaW5u
ZXJUeXBlKTsKICAgICAgICBpZihhcmd1bWVudFsna2V5J10gPT09IHVuZGVmaW5lZCkKICAgICAg
ICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcignYXJndW1lbnQgb2Yga2V5IHZhbHVl
IHR5cGUgaXMgbWlzc2luZyB0aGUga2V5IGF0dHJpYnV0ZScpOwogICAgICAgIGlmKGFyZ3VtZW50
Wyd2YWx1ZSddID09PSB1bmRlZmluZWQpCiAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0
aW9uRXJyb3IoJ2FyZ3VtZW50IG9mIGtleSB2YWx1ZSB0eXBlIGlzIG1pc3NpbmcgdGhlIGtleSBh
dHRyaWJ1dGUnKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgICAgICBsZXQgYXJndW1l
bnREZWZpbml0aW9uID0ge3R5cGU6IHNwbGl0VGVtcGxhdGVUeXBlWzBdLCBuYW1lOiAia2V5In07
CiAgICAgICAgcmVzdWx0LnB1c2goQXJndW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZUFyZ3VtZW50
KGFyZ3VtZW50RGVmaW5pdGlvbiwgYXJndW1lbnRbJ2tleSddKSk7CiAgICAgICAgYXJndW1lbnRE
ZWZpbml0aW9uID0ge3R5cGU6IHNwbGl0VGVtcGxhdGVUeXBlWzFdLCBuYW1lOiAidmFsdWUifTsK
ICAgICAgICByZXN1bHQucHVzaChBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplQXJndW1lbnQo
YXJndW1lbnREZWZpbml0aW9uLCBhcmd1bWVudFsndmFsdWUnXSkpOwogICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICB9CgogICAgc3RhdGljIHNlcmlhbGl6ZVZhcmlhbnQoaW5uZXJUeXBlLCBhcmd1
bWVudCkgewogICAgICAgIGNvbnN0IHZhcmlhbnRUeXBlcyA9IEFyZ3VtZW50U2VyaWFsaXplci5z
cGxpdFRlbXBsYXRlVHlwZShpbm5lclR5cGUpOwogICAgICAgIGlmKCFPYmplY3QuaGFzT3duKGFy
Z3VtZW50LCAndmFyaWFudFR5cGUnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXph
dGlvbkVycm9yKCdtaXNzaW5nIGZpZWxkIFwndmFyaWFudFR5cGVcJyB3aGVuIHNlcmlhbGl6aW5n
IHZhcmlhbnQnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdmFyaWFudFR5cGUgPSBhcmd1bWVu
dC52YXJpYW50VHlwZTsKICAgICAgICBjb25zdCB2YXJpYW50SW5kZXggPSB2YXJpYW50VHlwZXMu
aW5kZXhPZih2YXJpYW50VHlwZSk7CiAgICAgICAgaWYodmFyaWFudEluZGV4ID09IC0xKSB7CiAg
ICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYHR5cGUgJyR7IHZhcmlhbnRU
eXBlIH0nIGlzIG5vdCB2YWxpZCBmb3IgdmFyaWFudGApOwogICAgICAgIH0KICAgICAgICBpZigh
T2JqZWN0Lmhhc093bihhcmd1bWVudCwgJ3ZhcmlhbnQnKSkgewogICAgICAgICAgICB0aHJvdyBu
ZXcgU2VyaWFsaXphdGlvbkVycm9yKCdtaXNzaW5nIGZpZWxkIFwndmFyaWFudFwnIHdoZW4gc2Vy
aWFsaXppbmcgdmFyaWFudCcpOwogICAgICAgIH0KICAgICAgICBjb25zdCBhcmd1bWVudERlZmlu
aXRpb24gPSB7CiAgICAgICAgICAgIG5hbWU6ICd2YXJpYW50JywKICAgICAgICAgICAgdHlwZTog
dmFyaWFudFR5cGUKICAgICAgICB9OwogICAgICAgIHJldHVybiBbe3ZhbHVlOiB2YXJpYW50SW5k
ZXgsIHR5cGU6ICd1aW50OF90J30sIEFyZ3VtZW50U2VyaWFsaXplci5zZXJpYWxpemVBcmd1bWVu
dChhcmd1bWVudERlZmluaXRpb24sIGFyZ3VtZW50LnZhcmlhbnQpXTsKICAgIH0KCiAgICBzdGF0
aWMgc2VyaWFsaXplVGVtcGxhdGUoYXJndW1lbnREZWZpbml0aW9uLCBhcmd1bWVudCkgewogICAg
ICAgIGNvbnN0IGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlOwogICAgICAg
IGlmKGFyZ3VtZW50VHlwZS5pbmNsdWRlcygiPCIpKSB7CiAgICAgICAgICAgIGNvbnN0IFsgdGVt
cGxhdGVUeXBlLCBpbm5lclR5cGUgXSA9IEFyZ3VtZW50U2VyaWFsaXplci5wYXJzZVRlbXBsYXRl
KGFyZ3VtZW50VHlwZSk7CiAgICAgICAgICAgIHN3aXRjaCAodGVtcGxhdGVUeXBlKSB7CiAgICAg
ICAgICAgICAgICBjYXNlICdSZWZQdHInOgogICAgICAgICAgICAgICAgY2FzZSAnc3RkOjp1bmlx
dWVfcHRyJzoKICAgICAgICAgICAgICAgIGNhc2UgJ1JldGFpblB0cic6CiAgICAgICAgICAgICAg
ICBjYXNlICdzdGQ6Om9wdGlvbmFsJzoKICAgICAgICAgICAgICAgIGNhc2UgJ09wdGlvbmFsJzoK
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJndW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZU9w
dGlvbmFsKGlubmVyVHlwZSwgYXJndW1lbnQpOwogICAgICAgICAgICAgICAgY2FzZSAnVmVjdG9y
JzoKICAgICAgICAgICAgICAgIGNhc2UgJ3N0ZDo6dmVjdG9yJzoKICAgICAgICAgICAgICAgIGNh
c2UgJ3N0ZDo6c3Bhbic6CiAgICAgICAgICAgICAgICBjYXNlICdBcnJheVJlZmVyZW5jZSc6CiAg
ICAgICAgICAgICAgICBjYXNlICdTcGFuJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJn
dW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZVZlY3Rvcihpbm5lclR5cGUsIGFyZ3VtZW50KTsKICAg
ICAgICAgICAgICAgIGNhc2UgJ3N0ZDo6YXJyYXknOgogICAgICAgICAgICAgICAgICAgIHJldHVy
biBBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplU3RkQXJyYXkoaW5uZXJUeXBlLCBhcmd1bWVu
dCk7CiAgICAgICAgICAgICAgICBjYXNlICdIYXNoU2V0JzoKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQXJndW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZUhhc2hTZXQoaW5uZXJUeXBlLCBhcmd1
bWVudCk7CiAgICAgICAgICAgICAgICBjYXNlICdzdGQ6OnZhcmlhbnQnOgogICAgICAgICAgICAg
ICAgICAgIHJldHVybiBBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplVmFyaWFudChpbm5lclR5
cGUsIGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgIGNhc2UgJ3N0ZDo6cGFpcic6CiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEFyZ3VtZW50U2VyaWFsaXplci5zZXJpYWxpemVQYWlyKGlubmVy
VHlwZSwgYXJndW1lbnQpOwogICAgICAgICAgICAgICAgY2FzZSAnT3B0aW9uU2V0JzoKICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQXJndW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6ZU9wdGlvblNl
dChpbm5lclR5cGUsIGFyZ3VtZW50RGVmaW5pdGlvbi5uYW1lLCBhcmd1bWVudCk7CiAgICAgICAg
ICAgICAgICBjYXNlICdXVEY6Ok1hcmthYmxlJzoKICAgICAgICAgICAgICAgIGNhc2UgJ01hcmth
YmxlJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJndW1lbnRTZXJpYWxpemVyLnNlcmlh
bGl6ZU1hcmthYmxlKGlubmVyVHlwZSwgYXJndW1lbnQpOwogICAgICAgICAgICAgICAgY2FzZSAn
S2V5VmFsdWVQYWlyJzoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJndW1lbnRTZXJpYWxp
emVyLnNlcmlhbGl6ZUtleVZhbHVlUGFpcihpbm5lclR5cGUsIGFyZ3VtZW50KTsKICAgICAgICAg
ICAgICAgIGNhc2UgJ0hhc2hNYXAnOgogICAgICAgICAgICAgICAgY2FzZSAnTWVtb3J5Q29tcGFj
dFJvYmluSG9vZEhhc2hNYXAnOgogICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmd1bWVudFNl
cmlhbGl6ZXIuc2VyaWFsaXplSGFzaE1hcChpbm5lclR5cGUsIGFyZ3VtZW50KTsKICAgICAgICAg
ICAgICAgIGNhc2UgJ1JlZic6CiAgICAgICAgICAgICAgICBjYXNlICdVbmlxdWVSZWYnOgogICAg
ICAgICAgICAgICAgICAgIHJldHVybiBBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplQXJndW1l
bnQoe3R5cGU6IGlubmVyVHlwZSwgbmFtZTogYXJndW1lbnREZWZpbml0aW9uLm5hbWV9LCBhcmd1
bWVudCk7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYERvbid0IGtub3cgaG93IHRvIHNlcmlhbGl6ZSB0ZW1w
bGF0ZSAnJHsgdGVtcGxhdGVUeXBlIH0nYCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KCiAgICBzdGF0aWMgc2VyaWFsaXplSWRlbnRpZmll
cihhcmd1bWVudERlZmluaXRpb24sIGFyZ3VtZW50KSB7CiAgICAgICAgaWYoQ29yZUlQQy5vYmpl
Y3RJZGVudGlmaWVycy5pbmNsdWRlcyhhcmd1bWVudERlZmluaXRpb24udHlwZSkpIHsKICAgICAg
ICAgICAgaWYodHlwZW9mIGFyZ3VtZW50ICE9ICdudW1iZXInICYmIHR5cGVvZiBhcmd1bWVudCAh
PSAnYmlnaW50JykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJv
cihgSWRlbnRpZmllciBvZiB0eXBlICR7IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlIH0gaXMgbm90
IGEgbnVtYmVyYCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoYXJndW1lbnQgPCBNSU5f
SU5UNjQgfHwgYXJndW1lbnQgPiBNQVhfSU5UNjQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5l
dyBTZXJpYWxpemF0aW9uRXJyb3IoYElkZW50aWZpZXIgdmFsdWUgKCR7IGFyZ3VtZW50RGVmaW5p
dGlvbi5uYW1lIH0pIG9mIHR5cGUgJHsgYXJndW1lbnREZWZpbml0aW9uLnR5cGUgfSBpcyBvdXQt
b2YtYm91bmRzLmApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IGFy
Z3VtZW50LCB0eXBlOiAndWludDY0X3QnfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKICAgIH0KCiAgICBzdGF0aWMgc2VyaWFsaXplT3B0aW9uU2V0KGlubmVyVHlwZSwgbmFt
ZSwgYXJndW1lbnQpIHsKICAgICAgICBjb25zdCBhcmd1bWVudERlZmluaXRpb24gPSB7CiAgICAg
ICAgICAgIHR5cGU6IGlubmVyVHlwZSwKICAgICAgICAgICAgbmFtZTogbmFtZQogICAgICAgIH0K
ICAgICAgICByZXR1cm4gdGhpcy5zZXJpYWxpemVFbnVtKGFyZ3VtZW50RGVmaW5pdGlvbiwgYXJn
dW1lbnQpOwogICAgfQoKICAgIHN0YXRpYyBzZXJpYWxpemVFbnVtKGFyZ3VtZW50RGVmaW5pdGlv
biwgYXJndW1lbnQpIHsKICAgICAgICBjb25zdCBlbnVtVHlwZSA9IGFyZ3VtZW50RGVmaW5pdGlv
bi5lbnVtID8gYXJndW1lbnREZWZpbml0aW9uLmVudW0gOiBhcmd1bWVudERlZmluaXRpb24udHlw
ZTsKICAgICAgICBpZihlbnVtVHlwZSBpbiBDb3JlSVBDLmVudW1JbmZvKSB7CiAgICAgICAgICAg
IGNvbnN0IGVudW1EZWZpbml0aW9uID0gQ29yZUlQQy5lbnVtSW5mb1tlbnVtVHlwZV07CiAgICAg
ICAgICAgIGNvbnN0IGVudW1SZXByZXNlbnRhdGlvbiA9IEFyZ3VtZW50U2VyaWFsaXplci5lbnVt
U2l6ZU1hcFtlbnVtRGVmaW5pdGlvbi5zaXplXTsKICAgICAgICAgICAgaWYoIWVudW1SZXByZXNl
bnRhdGlvbikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihg
SW52YWxpZCBlbnVtIHNpemUgJyR7IGVudW1EZWZpbml0aW9uLnNpemUgfScgd2hlbiBzZXJpYWxp
emluZyAkeyBlbnVtVHlwZSB9IG9mIG1lbWJlciAkeyBhcmd1bWVudERlZmluaXRpb24ubmFtZSB9
YCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoIWVudW1EZWZpbml0aW9uLmlzT3B0aW9u
U2V0ICYmICFlbnVtRGVmaW5pdGlvbi52YWxpZFZhbHVlcy5pbmNsdWRlcyhhcmd1bWVudCkpIHsK
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYEludmFsaWQgZW51
bSB2YWx1ZSAkeyBhcmd1bWVudCB9IHdoZW4gc2VyaWFsaXppbmcgJHsgZW51bVR5cGUgfSBvZiBt
ZW1iZXIgJHsgYXJndW1lbnREZWZpbml0aW9uLm5hbWUgfWApOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIHJldHVybiB7dmFsdWU6IGFyZ3VtZW50LCB0eXBlOiBlbnVtUmVwcmVzZW50YXRpb259
OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQoKICAgIHN0YXRpYyBz
ZXJpYWxpemVUeXBlKGFyZ3VtZW50RGVmaW5pdGlvbiwgYXJndW1lbnQpIHsKICAgICAgICBpZihh
cmd1bWVudERlZmluaXRpb24udHlwZSBpbiBDb3JlSVBDLnR5cGVJbmZvKSB7CiAgICAgICAgICAg
IHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gQXJndW1lbnRTZXJpYWxpemVyLnNlcmlhbGl6
ZUFyZ3VtZW50cyhDb3JlSVBDLnR5cGVJbmZvW2FyZ3VtZW50RGVmaW5pdGlvbi50eXBlXSwgYXJn
dW1lbnQpOwogICAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7CiAgICAgICAgICAgICAgICBpZihl
cnJvciBpbnN0YW5jZW9mIFNlcmlhbGl6YXRpb25FcnJvcikgewogICAgICAgICAgICAgICAgICAg
IGxldCBtZXNzYWdlID0gYFdoZW4gc2VyaWFsaXppbmcgc3RydWN0ICR7IGFyZ3VtZW50RGVmaW5p
dGlvbi5uYW1lIH0gb2YgdHlwZSAkeyBhcmd1bWVudERlZmluaXRpb24udHlwZSB9OiAkeyBlcnJv
ci5tZXNzYWdlIH1gOwogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9u
RXJyb3IobWVzc2FnZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgIHRocm93IGVycm9yOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICB9CgogICAgc3RhdGljIHNlcmlhbGl6ZVBy
aW1pdGl2ZShhcmd1bWVudERlZmluaXRpb24sIGFyZ3VtZW50KSB7CiAgICAgICAgc3dpdGNoKGFy
Z3VtZW50RGVmaW5pdGlvbi50eXBlKSB7CiAgICAgICAgICAgIGNhc2UgJ3VpbnQ4X3QnOgogICAg
ICAgICAgICAgICAgaWYodHlwZW9mIGFyZ3VtZW50ICE9ICJudW1iZXIiKSB7CiAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgUHJpbWl0aXZlIHZhbHVlIG9m
IHR5cGUgJHsgYXJndW1lbnREZWZpbml0aW9uLnR5cGUgfSBpcyBub3QgYSBudW1iZXJgKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKGFyZ3VtZW50IDwgTUlOX1VJTlQgfHwg
YXJndW1lbnQgPiBNQVhfVUlOVDgpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vy
aWFsaXphdGlvbkVycm9yKGBQcmltaXRpdmUgdmFsdWUgKCR7IGFyZ3VtZW50RGVmaW5pdGlvbi5u
YW1lIH0pIG9mIHR5cGUgJHsgYXJndW1lbnREZWZpbml0aW9uLnR5cGUgfSBpcyBvdXQtb2YtYm91
bmRzLmApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTog
YXJndW1lbnQsIHR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlfTsKICAgICAgICAgICAgY2Fz
ZSAnaW50OF90JzoKICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBhcmd1bWVudCAhPSAibnVtYmVy
IikgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYFBy
aW1pdGl2ZSB2YWx1ZSBvZiB0eXBlICR7IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlIH0gaXMgbm90
IGEgbnVtYmVyYCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihhcmd1bWVu
dCA8IE1JTl9JTlQ4IHx8IGFyZ3VtZW50ID4gTUFYX0lOVDgpIHsKICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGBQcmltaXRpdmUgdmFsdWUgKCR7IGFyZ3Vt
ZW50RGVmaW5pdGlvbi5uYW1lIH0pIG9mIHR5cGUgJHsgYXJndW1lbnREZWZpbml0aW9uLnR5cGUg
fSBpcyBvdXQtb2YtYm91bmRzLmApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
cmV0dXJuIHt2YWx1ZTogYXJndW1lbnQsIHR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlfTsK
ICAgICAgICAgICAgY2FzZSAndWludDE2X3QnOgogICAgICAgICAgICAgICAgaWYodHlwZW9mIGFy
Z3VtZW50ICE9ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlh
bGl6YXRpb25FcnJvcihgUHJpbWl0aXZlIHZhbHVlIG9mIHR5cGUgJHsgYXJndW1lbnREZWZpbml0
aW9uLnR5cGUgfSBpcyBub3QgYSBudW1iZXJgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIGlmKGFyZ3VtZW50IDwgTUlOX1VJTlQgfHwgYXJndW1lbnQgPiBNQVhfVUlOVDE2KSB7
CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgUHJpbWl0
aXZlIHZhbHVlICgkeyBhcmd1bWVudERlZmluaXRpb24ubmFtZSB9KSBvZiB0eXBlICR7IGFyZ3Vt
ZW50RGVmaW5pdGlvbi50eXBlIH0gaXMgb3V0LW9mLWJvdW5kcy5gKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IGFyZ3VtZW50LCB0eXBlOiBhcmd1bWVu
dERlZmluaXRpb24udHlwZX07CiAgICAgICAgICAgIGNhc2UgJ2ludDE2X3QnOgogICAgICAgICAg
ICAgICAgaWYodHlwZW9mIGFyZ3VtZW50ICE9ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgUHJpbWl0aXZlIHZhbHVlIG9mIHR5cGUg
JHsgYXJndW1lbnREZWZpbml0aW9uLnR5cGUgfSBpcyBub3QgYSBudW1iZXJgKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKGFyZ3VtZW50IDwgTUlOX0lOVDE2IHx8IGFyZ3Vt
ZW50ID4gTUFYX0lOVDE2KSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6
YXRpb25FcnJvcihgUHJpbWl0aXZlIHZhbHVlICgkeyBhcmd1bWVudERlZmluaXRpb24ubmFtZSB9
KSBvZiB0eXBlICR7IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlIH0gaXMgb3V0LW9mLWJvdW5kcy5g
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IGFyZ3Vt
ZW50LCB0eXBlOiBhcmd1bWVudERlZmluaXRpb24udHlwZX07CiAgICAgICAgICAgIGNhc2UgJ3Vp
bnQzMl90JzoKICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBhcmd1bWVudCAhPSAibnVtYmVyIikg
ewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYFByaW1p
dGl2ZSB2YWx1ZSBvZiB0eXBlICR7IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlIH0gaXMgbm90IGEg
bnVtYmVyYCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihhcmd1bWVudCA8
IE1JTl9VSU5UIHx8IGFyZ3VtZW50ID4gTUFYX1VJTlQzMikgewogICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYFByaW1pdGl2ZSB2YWx1ZSAoJHsgYXJndW1l
bnREZWZpbml0aW9uLm5hbWUgfSkgb2YgdHlwZSAkeyBhcmd1bWVudERlZmluaXRpb24udHlwZSB9
IGlzIG91dC1vZi1ib3VuZHMuYCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBy
ZXR1cm4ge3ZhbHVlOiBhcmd1bWVudCwgdHlwZTogYXJndW1lbnREZWZpbml0aW9uLnR5cGV9Owog
ICAgICAgICAgICBjYXNlICdpbnQzMl90JzoKICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBhcmd1
bWVudCAhPSAibnVtYmVyIikgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxp
emF0aW9uRXJyb3IoYFByaW1pdGl2ZSB2YWx1ZSBvZiB0eXBlICR7IGFyZ3VtZW50RGVmaW5pdGlv
bi50eXBlIH0gaXMgbm90IGEgbnVtYmVyYCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICBpZihhcmd1bWVudCA8IE1JTl9JTlQzMiB8fCBhcmd1bWVudCA+IE1BWF9JTlQzMikgewog
ICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYFByaW1pdGl2
ZSB2YWx1ZSAoJHsgYXJndW1lbnREZWZpbml0aW9uLm5hbWUgfSkgb2YgdHlwZSAkeyBhcmd1bWVu
dERlZmluaXRpb24udHlwZSB9IGlzIG91dC1vZi1ib3VuZHMuYCk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiBhcmd1bWVudCwgdHlwZTogYXJndW1lbnRE
ZWZpbml0aW9uLnR5cGV9OwogICAgICAgICAgICBjYXNlICd1aW50NjRfdCc6CiAgICAgICAgICAg
ICAgICBpZih0eXBlb2YgYXJndW1lbnQgIT0gIm51bWJlciIgJiYgdHlwZW9mIGFyZ3VtZW50ICE9
ICJiaWdpbnQiKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25F
cnJvcihgUHJpbWl0aXZlIHZhbHVlIG9mIHR5cGUgJHsgYXJndW1lbnREZWZpbml0aW9uLnR5cGUg
fSBpcyBub3QgYSBudW1iZXIuIGl0IGlzICR7IHR5cGVvZihhcmd1bWVudCkgfS4gJHsgYXJndW1l
bnQgfWApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoYXJndW1lbnQgPCBN
SU5fVUlOVCB8fCBhcmd1bWVudCA+IE1BWF9VSU5UNjQpIHsKICAgICAgICAgICAgICAgICAgICB0
aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGBQcmltaXRpdmUgdmFsdWUgKCR7IGFyZ3VtZW50
RGVmaW5pdGlvbi5uYW1lIH0pIG9mIHR5cGUgJHsgYXJndW1lbnREZWZpbml0aW9uLnR5cGUgfSBp
cyBvdXQtb2YtYm91bmRzLmApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0
dXJuIHt2YWx1ZTogYXJndW1lbnQsIHR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlfTsKICAg
ICAgICAgICAgY2FzZSAnaW50NjRfdCc6CiAgICAgICAgICAgICAgICBpZih0eXBlb2YgYXJndW1l
bnQgIT0gIm51bWJlciIgJiYgdHlwZW9mIGFyZ3VtZW50ICE9ICJiaWdpbnQiKSB7CiAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgUHJpbWl0aXZlIHZhbHVl
IG9mIHR5cGUgJHsgYXJndW1lbnREZWZpbml0aW9uLnR5cGUgfSBpcyBub3QgYSBudW1iZXJgKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKGFyZ3VtZW50IDwgTUlOX0lOVDY0
IHx8IGFyZ3VtZW50ID4gTUFYX0lOVDY0KSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFNlcmlhbGl6YXRpb25FcnJvcihgUHJpbWl0aXZlIHZhbHVlICgkeyBhcmd1bWVudERlZmluaXRp
b24ubmFtZSB9KSBvZiB0eXBlICR7IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlIH0gaXMgb3V0LW9m
LWJvdW5kcy5gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB7dmFs
dWU6IGFyZ3VtZW50LCB0eXBlOiBhcmd1bWVudERlZmluaXRpb24udHlwZX07CiAgICAgICAgICAg
IGNhc2UgJ2Zsb2F0JzoKICAgICAgICAgICAgY2FzZSAnZG91YmxlJzoKICAgICAgICAgICAgICAg
IGlmKHR5cGVvZiBhcmd1bWVudCAhPSAibnVtYmVyIikgewogICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYFByaW1pdGl2ZSB2YWx1ZSBvZiB0eXBlICR7IGFy
Z3VtZW50RGVmaW5pdGlvbi50eXBlIH0gaXMgbm90IGEgbnVtYmVyYCk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiBhcmd1bWVudCwgdHlwZTogYXJndW1l
bnREZWZpbml0aW9uLnR5cGV9OwogICAgICAgICAgICBjYXNlICdTdHJpbmcnOgogICAgICAgICAg
ICAgICAgaWYodHlwZW9mIGFyZ3VtZW50ICE9ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgUHJpbWl0aXZlIHZhbHVlIGlzIG5vdCBh
IHN0cmluZ2ApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1
ZTogYXJndW1lbnQsIHR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlfTsKICAgICAgICAgICAg
Y2FzZSAnYm9vbCc6CiAgICAgICAgICAgICAgICBpZih0eXBlb2YgYXJndW1lbnQgIT0gJ2Jvb2xl
YW4nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihg
UHJpbWl0aXZlIHZhbHVlIGlzIG5vdCBhIGJvb2xgKTsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgIHJldHVybiB7dmFsdWU6IGFyZ3VtZW50ID8gMSA6IDAsIHR5cGU6IGFyZ3VtZW50
RGVmaW5pdGlvbi50eXBlfTsKICAgICAgICAgICAgY2FzZSAnSVBDOjpDb25uZWN0aW9uSGFuZGxl
JzoKICAgICAgICAgICAgICAgIGlmKGFyZ3VtZW50IGluc3RhbmNlb2YgU3RyZWFtQ29ubmVjdGlv
bikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IGFyZ3VtZW50LmhhbmRsZSwg
dHlwZTogJ0Nvbm5lY3Rpb25IYW5kbGUnfTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZihhcmd1
bWVudC5vcGVuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogYXJndW1lbnQs
IHR5cGU6ICdDb25uZWN0aW9uSGFuZGxlJ307CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYENvbm5lY3Rpb25I
YW5kbGUgaXMgbm90IGEgY29ubmVjdGlvbiBvYmplY3RgKTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgY2FzZSAnSVBDOjpTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uSGFuZGxlJzoKICAgICAg
ICAgICAgICAgIGlmKGFyZ3VtZW50IGluc3RhbmNlb2YgU3RyZWFtQ29ubmVjdGlvbikgewogICAg
ICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IGFyZ3VtZW50LmhhbmRsZSwgdHlwZTogJ1N0
cmVhbVNlcnZlckNvbm5lY3Rpb25IYW5kbGUnfTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZihh
cmd1bWVudC5vcGVuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogYXJndW1l
bnQsIHR5cGU6ICdTdHJlYW1TZXJ2ZXJDb25uZWN0aW9uSGFuZGxlJ307CiAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJy
b3IoYENvbm5lY3Rpb25IYW5kbGUgaXMgbm90IGEgY29ubmVjdGlvbiBvYmplY3RgKTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAnc3RkOjpudWxscHRyX3QnOgogICAgICAgICAg
ICAgICAgaWYoYXJndW1lbnQgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g
W107CiAgICAgICAgICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihg
c3RkOjpudWxscHRyX3QgaXMgbm90IG51bGxgKTsKICAgICAgICAgICAgY2FzZSAnV2ViQ29yZTo6
U2hhcmVkTWVtb3J5OjpIYW5kbGUnOgogICAgICAgICAgICBjYXNlICdXZWJDb3JlOjpTaGFyZWRN
ZW1vcnlIYW5kbGUnOgogICAgICAgICAgICAgICAgaWYodHlwZW9mIGFyZ3VtZW50ICE9ICdvYmpl
Y3QnKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcign
U2hhcmVkTWVtb3J5IGFyZ3VtZW50IGlzIG5vdCBhbiBvYmplY3QnKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgIGlmKCFhcmd1bWVudC5wcm90ZWN0aW9uKSB7CiAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcignU2hhcmVkTWVtb3J5IGFyZ3Vt
ZW50IGlzIG1pc3NpbmcgXCdwcm90ZWN0aW9uXCcgYXR0cmlidXRlJyk7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICBpZihhcmd1bWVudC5wcm90ZWN0aW9uICE9ICdSZWFkT25seScg
JiYgYXJndW1lbnQucHJvdGVjdGlvbiAhPSAnUmVhZFdyaXRlJykgewogICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoIlNoYXJlZE1lbW9yeSBwcm90ZWN0aW9u
IHNob3VsZCBiZSBlaXRoZXIgJ1JlYWRXcml0ZScgb3IgJ1JlYWRPbmx5JyIpOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgaWYoIWFyZ3VtZW50LmhhbmRsZSkgewogICAgICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoJ1NoYXJlZE1lbW9yeSBhcmd1
bWVudCBpcyBtaXNzaW5nIFwnaGFuZGxlXCcgYXR0cmlidXRlJyk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICBpZighYXJndW1lbnQuaGFuZGxlLndyaXRlQnl0ZXMpIHsKICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKCdTaGFyZWRNZW1vcnkg
aGFuZGxlIGFyZ3VtZW50IGlzIG5vdCBhbiBPYmplY3QgY3JlYXRlZCB3aXRoIElQQy5jcmVhdGVT
aGFyZWRNZW1vcnknKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB7
dmFsdWU6IGFyZ3VtZW50LmhhbmRsZSwgdHlwZTogJ1NoYXJlZE1lbW9yeScsIHByb3RlY3Rpb246
IGFyZ3VtZW50LnByb3RlY3Rpb259OwogICAgICAgICAgICBjYXNlICdJUEM6OlNlbWFwaG9yZSc6
CiAgICAgICAgICAgICAgICBpZih0eXBlb2YoYXJndW1lbnQpICE9ICdvYmplY3QnIHx8ICFhcmd1
bWVudC5zaWduYWwpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlv
bkVycm9yKCdJUEM6OlNlbWFwaG9yZSBhcmd1bWVudCBpcyBub3QgYW4gT2JqZWN0IGNyZWF0ZWQg
d2l0aCBJUEMuY3JlYXRlU2VtYXBob3JlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICByZXR1cm4ge3ZhbHVlOiBhcmd1bWVudCwgdHlwZTogJ1NlbWFwaG9yZSd9OwogICAgICAg
IH0KICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQoKICAgIHN0YXRpYyBzZXJpYWxpemVB
cmd1bWVudChhcmd1bWVudERlZmluaXRpb24sIGFyZ3VtZW50KSB7CiAgICAgICAgbGV0IHJlc3Vs
dDsKICAgICAgICBhcmd1bWVudERlZmluaXRpb24udHlwZSA9IHJlc29sdmVBbGlhcyhhcmd1bWVu
dERlZmluaXRpb24udHlwZSk7CiAgICAgICAgaWYoYXJndW1lbnREZWZpbml0aW9uLm9wdGlvbmFs
ID09PSB0cnVlKSB7CiAgICAgICAgICAgIGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlID0gYE9wdGlv
bmFsPCR7IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlIH0+YDsKICAgICAgICAgICAgYXJndW1lbnRE
ZWZpbml0aW9uLm9wdGlvbmFsID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmKHJlc3VsdCA9
IEFyZ3VtZW50U2VyaWFsaXplci5zZXJpYWxpemVUZW1wbGF0ZShhcmd1bWVudERlZmluaXRpb24s
IGFyZ3VtZW50KSkKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICBpZihyZXN1bHQg
PSBBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplSWRlbnRpZmllcihhcmd1bWVudERlZmluaXRp
b24sIGFyZ3VtZW50KSkKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICBpZihyZXN1
bHQgPSBBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplRW51bShhcmd1bWVudERlZmluaXRpb24s
IGFyZ3VtZW50KSkKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICBpZihyZXN1bHQg
PSBBcmd1bWVudFNlcmlhbGl6ZXIuc2VyaWFsaXplUHJpbWl0aXZlKGFyZ3VtZW50RGVmaW5pdGlv
biwgYXJndW1lbnQpKQogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIGlmKHJlc3Vs
dCA9IEFyZ3VtZW50U2VyaWFsaXplci5zZXJpYWxpemVUeXBlKGFyZ3VtZW50RGVmaW5pdGlvbiwg
YXJndW1lbnQpKQogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIHRocm93IG5ldyBF
cnJvcihgRG9uJ3Qga25vdyBob3cgdG8gc2VyaWFsaXplICR7IGFyZ3VtZW50RGVmaW5pdGlvbi5u
YW1lIH0gb2YgdHlwZSAkeyBhcmd1bWVudERlZmluaXRpb24udHlwZSB9YCk7CiAgICB9CgogICAg
c3RhdGljIHNlcmlhbGl6ZUFyZ3VtZW50cyhtZXRob2RBcmd1bWVudHNEZWZpbml0aW9uLCBtZXRo
b2RBcmd1bWVudHMpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgICAgICBmb3IoY29u
c3QgYXJndW1lbnQgb2YgbWV0aG9kQXJndW1lbnRzRGVmaW5pdGlvbikgewogICAgICAgICAgICBj
b25zdCBuYW1lID0gQXJndW1lbnRTZXJpYWxpemVyLnNpbXBsaWZ5TmFtZShhcmd1bWVudC5uYW1l
KTsKICAgICAgICAgICAgaWYobmFtZSBpbiBtZXRob2RBcmd1bWVudHMpIHsKICAgICAgICAgICAg
ICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goQXJndW1lbnRTZXJpYWxp
emVyLnNlcmlhbGl6ZUFyZ3VtZW50KGFyZ3VtZW50LCBtZXRob2RBcmd1bWVudHNbbmFtZV0pKTsK
ICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgaWYo
ZXJyb3IgaW5zdGFuY2VvZiBTZXJpYWxpemF0aW9uRXJyb3IpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihgV2hlbiBzZXJpYWxpemluZyBhcmd1
bWVudC9maWVsZCAnJHsgbmFtZSB9JzogYCArIGVycm9yLm1lc3NhZ2UpOwogICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYGFyZ3VtZW50L2Zp
ZWxkICckeyBuYW1lIH0nIGlzIG1pc3NpbmdgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIHN0YXRpYyBzaW1wbGlmeU5hbWUobmFtZSkg
ewogICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2VBbGwoIigpIiwgIiIpOwogICAgICAgIGxldCBw
b3MgPSAtMTsKICAgICAgICB3aGlsZSgocG9zID0gbmFtZS5pbmRleE9mKCIuIikpID4gLTEpIHsK
ICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIHBvcykgKyBuYW1lLmNoYXJBdChw
b3MrMSkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKHBvcysyLCBuYW1lLmxlbmd0aCk7
CiAgICAgICAgfQogICAgICAgIHJldHVybiBuYW1lCiAgICB9Cgp9CgpleHBvcnQgY2xhc3MgUGFy
c2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7CiAgICAg
ICAgc3VwZXIobWVzc2FnZSk7CiAgICAgICAgdGhpcy5uYW1lID0gJ1BhcnNlckVycm9yJzsKICAg
IH0KfQoKY29uc3QgTUVTU0FHRV9IRUFERVJfU0laRSA9IDB4MTA7CgpleHBvcnQgY2xhc3MgQXJn
dW1lbnRQYXJzZXIgewogICAgc3RhdGljIGFsaWduKHBvc2l0aW9uLCBncmFudWxhcml0eSkgewog
ICAgICAgIGlmKHBvc2l0aW9uJWdyYW51bGFyaXR5KSB7CiAgICAgICAgICAgIHBvc2l0aW9uID0g
cG9zaXRpb24gKyBncmFudWxhcml0eS0ocG9zaXRpb24lZ3JhbnVsYXJpdHkpOwogICAgICAgIH0K
ICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICB9CgogICAgc3RhdGljIHBhcnNlUmVwbHkocmVw
bHksIHJlcGx5QXJndW1lbnRzKSB7CiAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IERhdGFWaWV3
KHJlcGx5LmJ1ZmZlcik7CiAgICAgICAgY29uc3QgWywgdHlwZWRSZXN1bHQsIHJlc3VsdF0gPSBB
cmd1bWVudFBhcnNlci5wYXJzZUFyZ3VtZW50cyhidWZmZXIsIE1FU1NBR0VfSEVBREVSX1NJWkUs
IHJlcGx5QXJndW1lbnRzKTsKICAgICAgICByZXR1cm4gW3Jlc3VsdCwgdHlwZWRSZXN1bHRdCiAg
ICB9CgogICAgc3RhdGljIGNoZWNrT3V0T2ZCb3VuZHMoYnVmZmVyLCBwb3NpdGlvbiwgcmVxdWVz
dGVkU2l6ZSkgewogICAgICAgIGlmKHBvc2l0aW9uICsgcmVxdWVzdGVkU2l6ZSA+IGJ1ZmZlci5i
eXRlTGVuZ3RoKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFcnJvcignb3V0IG9mIGJv
dW5kcycpOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgcGFyc2VJZGVudGlmaWVyKGJ1ZmZl
ciwgcG9zaXRpb24sIGFyZ3VtZW50RGVmaW5pdGlvbikgewogICAgICAgIGlmKENvcmVJUEMub2Jq
ZWN0SWRlbnRpZmllcnMuaW5jbHVkZXMoYXJndW1lbnREZWZpbml0aW9uLnR5cGUpKSB7CiAgICAg
ICAgICAgIHBvc2l0aW9uID0gQXJndW1lbnRQYXJzZXIuYWxpZ24ocG9zaXRpb24sIDgpOwogICAg
ICAgICAgICBBcmd1bWVudFBhcnNlci5jaGVja091dE9mQm91bmRzKGJ1ZmZlciwgcG9zaXRpb24s
IDgpOwogICAgICAgICAgICByZXR1cm4gW3Bvc2l0aW9uICsgOCwge3BhcnNlZFZhbHVlOiBidWZm
ZXIuZ2V0QmlnVWludDY0KHBvc2l0aW9uLCB0cnVlKSwgcGFyc2VkVHlwZTogYXJndW1lbnREZWZp
bml0aW9uLnR5cGV9XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0K
CiAgICBzdGF0aWMgcGFyc2VUeXBlKGJ1ZmZlciwgcG9zaXRpb24sIGFyZ3VtZW50RGVmaW5pdGlv
bikgewogICAgICAgIGlmKGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlIGluIENvcmVJUEMudHlwZUlu
Zm8pIHsKICAgICAgICAgICAgY29uc3QgW25ld1Bvc2l0aW9uLCB2YWx1ZV0gPSB0aGlzLnBhcnNl
QXJndW1lbnRzKAogICAgICAgICAgICAgICAgYnVmZmVyLCBwb3NpdGlvbiwgQ29yZUlQQy50eXBl
SW5mb1thcmd1bWVudERlZmluaXRpb24udHlwZV0KICAgICAgICAgICAgKTsKICAgICAgICAgICAg
cmV0dXJuIFtuZXdQb3NpdGlvbiwge3BhcnNlZFZhbHVlOiB2YWx1ZSwgcGFyc2VkVHlwZTogYXJn
dW1lbnREZWZpbml0aW9uLnR5cGV9XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHVuZGVmaW5l
ZDsKICAgIH0KCiAgICBzdGF0aWMgcGFyc2VWZWN0b3IoYnVmZmVyLCBwb3NpdGlvbiwgaW5uZXJU
eXBlKSB7CiAgICAgICAgcG9zaXRpb24gPSBBcmd1bWVudFBhcnNlci5hbGlnbihwb3NpdGlvbiwg
OCk7CiAgICAgICAgQXJndW1lbnRQYXJzZXIuY2hlY2tPdXRPZkJvdW5kcyhidWZmZXIsIHBvc2l0
aW9uLCA4KTsKICAgICAgICBjb25zdCBlbGVtZW50Q291bnQgPSBidWZmZXIuZ2V0QmlnVWludDY0
KHBvc2l0aW9uLCB0cnVlKTsKICAgICAgICBwb3NpdGlvbiArPSA4OwogICAgICAgIGNvbnN0IHZh
bHVlcyA9IFtdOwogICAgICAgIGxldCBlbGVtZW50OwogICAgICAgIGNvbnN0IGFyZ3VtZW50RGVm
aW5pdGlvbiA9IHt0eXBlOiBpbm5lclR5cGV9OwogICAgICAgIGZvcihsZXQgaW5kZXggPSAwOyBp
bmRleCA8IGVsZW1lbnRDb3VudDsgaW5kZXgrKykgewogICAgICAgICAgICBhcmd1bWVudERlZmlu
aXRpb24ubmFtZSA9IGBlbGVtZW50IyR7IGluZGV4IH1gOwogICAgICAgICAgICB0cnkgewogICAg
ICAgICAgICAgICAgW3Bvc2l0aW9uLCBlbGVtZW50XSA9IEFyZ3VtZW50UGFyc2VyLnBhcnNlQXJn
dW1lbnQoYnVmZmVyLCBwb3NpdGlvbiwgYXJndW1lbnREZWZpbml0aW9uKTsKICAgICAgICAgICAg
fSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZXJFcnJvcihg
d2hlbiBwYXJzaW5nIGVsZW1lbnQgIyR7IGluZGV4IH0gb2YgYXJyYXk6ICR7IGVycm9yLm1lc3Nh
Z2UgfWApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhbHVlcy5wdXNoKGVsZW1lbnQpOwog
ICAgICAgIH0KICAgICAgICByZXR1cm4gW3Bvc2l0aW9uLCB2YWx1ZXNdOwogICAgfQoKICAgIHN0
YXRpYyBwYXJzZVBhaXIoYnVmZmVyLCBwb3NpdGlvbiwgaW5uZXJUeXBlKSB7CiAgICAgICAgY29u
c3QgdmFsdWVzID0gW107CiAgICAgICAgY29uc3QgaW5uZXJUeXBlcyA9IEFyZ3VtZW50U2VyaWFs
aXplci5zcGxpdFRlbXBsYXRlVHlwZShpbm5lclR5cGUpOwogICAgICAgIGxldCBhcmd1bWVudERl
ZmluaXRpb24gPSB7dHlwZTogaW5uZXJUeXBlc1swXX07CiAgICAgICAgYXJndW1lbnREZWZpbml0
aW9uLm5hbWUgPSAiZWxlbWVudCMwIjsKICAgICAgICBsZXQgZWxlbWVudDsKICAgICAgICBbcG9z
aXRpb24sIGVsZW1lbnRdID0gQXJndW1lbnRQYXJzZXIucGFyc2VBcmd1bWVudChidWZmZXIsIHBv
c2l0aW9uLCBhcmd1bWVudERlZmluaXRpb24pOwogICAgICAgIHZhbHVlcy5wdXNoKGVsZW1lbnQp
OwogICAgICAgIGFyZ3VtZW50RGVmaW5pdGlvbi5uYW1lID0gImVsZW1lbnQjMSI7CiAgICAgICAg
YXJndW1lbnREZWZpbml0aW9uLnR5cGUgPSBpbm5lclR5cGVzWzFdOwogICAgICAgIFtwb3NpdGlv
biwgZWxlbWVudF0gPSBBcmd1bWVudFBhcnNlci5wYXJzZUFyZ3VtZW50KGJ1ZmZlciwgcG9zaXRp
b24sIGFyZ3VtZW50RGVmaW5pdGlvbik7CiAgICAgICAgdmFsdWVzLnB1c2goZWxlbWVudCk7CiAg
ICAgICAgcmV0dXJuIFtwb3NpdGlvbiwgdmFsdWVzXTsKICAgIH0KCiAgICBzdGF0aWMgcGFyc2VI
YXNoTWFwKGJ1ZmZlciwgcG9zaXRpb24sIGlubmVyVHlwZSkgewogICAgICAgIHBvc2l0aW9uID0g
QXJndW1lbnRQYXJzZXIuYWxpZ24ocG9zaXRpb24sIDQpOwogICAgICAgIEFyZ3VtZW50UGFyc2Vy
LmNoZWNrT3V0T2ZCb3VuZHMoYnVmZmVyLCBwb3NpdGlvbiwgNCk7CiAgICAgICAgY29uc3QgZWxl
bWVudENvdW50ID0gYnVmZmVyLmdldFVpbnQzMihwb3NpdGlvbiwgdHJ1ZSk7CiAgICAgICAgcG9z
aXRpb24gKz0gNDsKICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTsKICAgICAgICBsZXQgZWxlbWVu
dDsKICAgICAgICBmb3IobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50Q291bnQ7IGluZGV4
KyspIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIFtwb3NpdGlvbiwgZWxlbWVu
dF0gPSBBcmd1bWVudFBhcnNlci5wYXJzZVBhaXIoYnVmZmVyLCBwb3NpdGlvbiwgaW5uZXJUeXBl
KTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIHRocm93IG5l
dyBQYXJzZXJFcnJvcihgd2hlbiBwYXJzaW5nIGVsZW1lbnQgIyR7IGluZGV4IH0gb2YgSGFzaE1h
cDogJHsgZXJyb3IubWVzc2FnZSB9YCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFsdWVz
LnB1c2goZWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBbcG9zaXRpb24sIHZhbHVl
c107CiAgICB9CgogICAgc3RhdGljIHBhcnNlT3B0aW9uYWwoYnVmZmVyLCBwb3NpdGlvbiwgaW5u
ZXJUeXBlKSB7CiAgICAgICAgQXJndW1lbnRQYXJzZXIuY2hlY2tPdXRPZkJvdW5kcyhidWZmZXIs
IHBvc2l0aW9uLCAxKTsKICAgICAgICBjb25zdCBoYXMgPSAhIWJ1ZmZlci5nZXRVaW50OChwb3Np
dGlvbik7CiAgICAgICAgcG9zaXRpb24gKz0gMTsKICAgICAgICBpZihoYXMpIHsKICAgICAgICAg
ICAgY29uc3QgYXJndW1lbnREZWZpbml0aW9uID0ge25hbWU6ICdvcHRpb25hbFZhbHVlJywgdHlw
ZTogaW5uZXJUeXBlfTsKICAgICAgICAgICAgY29uc3QgW25ld1Bvc2l0aW9uLCBvcHRpb25hbFZh
bHVlXSA9IEFyZ3VtZW50UGFyc2VyLnBhcnNlQXJndW1lbnQoYnVmZmVyLCBwb3NpdGlvbiwgYXJn
dW1lbnREZWZpbml0aW9uKQogICAgICAgICAgICByZXR1cm4gW25ld1Bvc2l0aW9uLCB7b3B0aW9u
YWxWYWx1ZTogb3B0aW9uYWxWYWx1ZX1dOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJl
dHVybiBbcG9zaXRpb24sIHt9XQogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgcGFyc2VNYXJr
YWJsZShidWZmZXIsIHBvc2l0aW9uLCBpbm5lclR5cGUpIHsKICAgICAgICBBcmd1bWVudFBhcnNl
ci5jaGVja091dE9mQm91bmRzKGJ1ZmZlciwgcG9zaXRpb24sIDEpOwogICAgICAgIGNvbnN0IGlz
RW1wdHkgPSAhIWJ1ZmZlci5nZXRVaW50OChwb3NpdGlvbik7CiAgICAgICAgcG9zaXRpb24gKz0g
MTsKICAgICAgICBpZighaXNFbXB0eSkgewogICAgICAgICAgICBjb25zdCBhcmd1bWVudERlZmlu
aXRpb24gPSB7bmFtZTogJ29wdGlvbmFsVmFsdWUnLCB0eXBlOiBpbm5lclR5cGV9OwogICAgICAg
ICAgICByZXR1cm4gQXJndW1lbnRQYXJzZXIucGFyc2VBcmd1bWVudChidWZmZXIsIHBvc2l0aW9u
LCBhcmd1bWVudERlZmluaXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVy
biBbcG9zaXRpb24sIHt9XQogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgcGFyc2VWYXJpYW50
KGJ1ZmZlciwgcG9zaXRpb24sIGlubmVyVHlwZSkgewogICAgICAgIEFyZ3VtZW50UGFyc2VyLmNo
ZWNrT3V0T2ZCb3VuZHMoYnVmZmVyLCBwb3NpdGlvbiwgMSk7CiAgICAgICAgY29uc3QgdmFyaWFu
dFR5cGVzID0gQXJndW1lbnRTZXJpYWxpemVyLnNwbGl0VGVtcGxhdGVUeXBlKGlubmVyVHlwZSk7
CiAgICAgICAgY29uc3QgdmFyaWFudEluZGV4ID0gYnVmZmVyLmdldFVpbnQ4KHBvc2l0aW9uLCB0
cnVlKTsKICAgICAgICBpZih2YXJpYW50SW5kZXggPiB2YXJpYW50VHlwZXMubGVuZ3RoIC0gMSkg
ewogICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXJyb3IoYGludmFsaWQgdmFyaWFudCBpbmRl
eCAkeyB2YXJpYW50SW5kZXggfWApCiAgICAgICAgfQogICAgICAgIHBvc2l0aW9uICs9IDE7CiAg
ICAgICAgY29uc3QgdmFyaWFudFR5cGUgPSB2YXJpYW50VHlwZXNbdmFyaWFudEluZGV4XTsKICAg
ICAgICBjb25zdCBhcmd1bWVudERlZmluaXRpb24gPSB7bmFtZTogJ3ZhcmlhbnQnLCB0eXBlOiB2
YXJpYW50VHlwZX07CiAgICAgICAgY29uc3QgW25ld1Bvc2l0aW9uLCB2YWx1ZV0gPSBBcmd1bWVu
dFBhcnNlci5wYXJzZUFyZ3VtZW50KGJ1ZmZlciwgcG9zaXRpb24sIGFyZ3VtZW50RGVmaW5pdGlv
bik7CiAgICAgICAgcmV0dXJuIFtuZXdQb3NpdGlvbiwge3ZhcmlhbnRUeXBlOiB2YXJpYW50VHlw
ZSwgdmFyaWFudDogdmFsdWV9XTsKICAgIH0KCiAgICBzdGF0aWMgcGFyc2VUZW1wbGF0ZShidWZm
ZXIsIHBvc2l0aW9uLCBhcmd1bWVudERlZmluaXRpb24pIHsKICAgICAgICBjb25zdCBhcmd1bWVu
dFR5cGUgPSBhcmd1bWVudERlZmluaXRpb24udHlwZTsKICAgICAgICBpZihhcmd1bWVudFR5cGUu
aW5jbHVkZXMoIjwiKSkgewogICAgICAgICAgICBjb25zdCBbIHRlbXBsYXRlVHlwZSwgaW5uZXJU
eXBlIF0gPSBBcmd1bWVudFNlcmlhbGl6ZXIucGFyc2VUZW1wbGF0ZShhcmd1bWVudFR5cGUpOwog
ICAgICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlVHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSAn
UmVmUHRyJzoKICAgICAgICAgICAgICAgIGNhc2UgJ3N0ZDo6dW5pcXVlX3B0cic6CiAgICAgICAg
ICAgICAgICBjYXNlICdSZXRhaW5QdHInOgogICAgICAgICAgICAgICAgY2FzZSAnc3RkOjpvcHRp
b25hbCc6CiAgICAgICAgICAgICAgICBjYXNlICdPcHRpb25hbCc6IHsKICAgICAgICAgICAgICAg
ICAgICBjb25zdCBbbmV3UG9zaXRpb24sIHZhbHVlXSA9IEFyZ3VtZW50UGFyc2VyLnBhcnNlT3B0
aW9uYWwoYnVmZmVyLCBwb3NpdGlvbiwgaW5uZXJUeXBlKTsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gW25ld1Bvc2l0aW9uLCB7cGFyc2VkVHlwZTogYXJndW1lbnREZWZpbml0aW9uLnR5cGUs
IHBhcnNlZFZhbHVlOiB2YWx1ZX1dCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBj
YXNlICdzdGQ6OnNwYW4nOgogICAgICAgICAgICAgICAgY2FzZSAnVmVjdG9yJzogewogICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFtuZXdQb3NpdGlvbiwgdmFsdWVzXSA9IEFyZ3VtZW50UGFyc2Vy
LnBhcnNlVmVjdG9yKGJ1ZmZlciwgcG9zaXRpb24sIGlubmVyVHlwZSk7CiAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFtuZXdQb3NpdGlvbiwge3BhcnNlZFR5cGU6IGFyZ3VtZW50RGVmaW5pdGlv
bi50eXBlLCB2YWx1ZTogdmFsdWVzfV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAvLyBUT0RPOiBIYXNoU2V0IGFuZCBzdGQ6OmFycmF5IGFuZCBLZXlWYWx1ZVBhaXIgYW5kIEhh
c2hNYXAKICAgICAgICAgICAgICAgIGNhc2UgJ3N0ZDo6dmFyaWFudCc6IHsKICAgICAgICAgICAg
ICAgICAgICBjb25zdCBbbmV3UG9zaXRpb24sIHZhcmlhbnRdID0gQXJndW1lbnRQYXJzZXIucGFy
c2VWYXJpYW50KGJ1ZmZlciwgcG9zaXRpb24sIGlubmVyVHlwZSk7CiAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFtuZXdQb3NpdGlvbiwge3BhcnNlZFR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50
eXBlLCBwYXJzZWRWYWx1ZTogdmFyaWFudH1dOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgY2FzZSAnc3RkOjpwYWlyJzogewogICAgICAgICAgICAgICAgICAgIGxldCBbbmV3UG9z
aXRpb24sIHZhbHVlc10gPSBBcmd1bWVudFBhcnNlci5wYXJzZVBhaXIoYnVmZmVyLCBwb3NpdGlv
biwgaW5uZXJUeXBlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW25ld1Bvc2l0aW9uLCB7
cGFyc2VkVHlwZTogYXJndW1lbnREZWZpbml0aW9uLnR5cGUsIHBhcnNlZFZhbHVlOiB2YWx1ZXN9
XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhc2UgJ09wdGlvblNldCc6IHsK
ICAgICAgICAgICAgICAgICAgICBsZXQgW25ld1Bvc2l0aW9uLCBvcHRpb25TZXRdID0gQXJndW1l
bnRQYXJzZXIucGFyc2VFbnVtKGJ1ZmZlciwgcG9zaXRpb24sIHt0eXBlOiBpbm5lclR5cGUsIG5h
bWU6IGFyZ3VtZW50RGVmaW5pdGlvbi5uYW1lfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFtuZXdQb3NpdGlvbiwge3BhcnNlZFR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlLCBwYXJz
ZWRWYWx1ZTogb3B0aW9uU2V0fV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBj
YXNlICdXVEY6Ok1hcmthYmxlJzoKICAgICAgICAgICAgICAgIGNhc2UgJ01hcmthYmxlJzogewog
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFtuZXdQb3NpdGlvbiwgdmFsdWVdID0gQXJndW1lbnRQ
YXJzZXIucGFyc2VNYXJrYWJsZShidWZmZXIsIHBvc2l0aW9uLCBpbm5lclR5cGUpOwogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBbbmV3UG9zaXRpb24sIHtwYXJzZWRUeXBlOiBhcmd1bWVudERl
ZmluaXRpb24udHlwZSwgcGFyc2VkVmFsdWU6IHZhbHVlfV0KICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIGNhc2UgJ1JlZic6CiAgICAgICAgICAgICAgICBjYXNlICdVbmlxdWVSZWYn
OiB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFyZ3VtZW50UGFyc2VyLnBhcnNlQXJndW1l
bnQoYnVmZmVyLCBwb3NpdGlvbiwge3R5cGU6IGlubmVyVHlwZSwgbmFtZTogYXJndW1lbnREZWZp
bml0aW9uLm5hbWV9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhc2UgJ0hh
c2hNYXAnOiB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFyZ3VtZW50UGFyc2VyLnBhcnNl
SGFzaE1hcChidWZmZXIsIHBvc2l0aW9uLCBpbm5lclR5cGUpOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFy
c2VyRXJyb3IoYERvbid0IGtub3cgaG93IHRvIHBhcnNlIHRlbXBsYXRlIHR5cGUgJyR7IHRlbXBs
YXRlVHlwZSB9J2ApCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHVuZGVm
aW5lZDsKICAgIH0KCiAgICBzdGF0aWMgcGFyc2VFbnVtKGJ1ZmZlciwgcG9zaXRpb24sIGFyZ3Vt
ZW50RGVmaW5pdGlvbikgewogICAgICAgIGNvbnN0IGFyZ3VtZW50VHlwZSA9IGFyZ3VtZW50RGVm
aW5pdGlvbi50eXBlOwogICAgICAgIGlmKGFyZ3VtZW50VHlwZSBpbiBDb3JlSVBDLmVudW1JbmZv
KSB7CiAgICAgICAgICAgIGNvbnN0IGVudW1Bcmd1bWVudERlZmludGlvbiA9IHsKICAgICAgICAg
ICAgICAgIHR5cGU6IEFyZ3VtZW50U2VyaWFsaXplci5lbnVtU2l6ZU1hcFtDb3JlSVBDLmVudW1J
bmZvW2FyZ3VtZW50VHlwZV0uc2l6ZV0sCiAgICAgICAgICAgICAgICBuYW1lOiBhcmd1bWVudERl
ZmluaXRpb24ubmFtZQogICAgICAgICAgICB9OwogICAgICAgICAgICByZXR1cm4gQXJndW1lbnRQ
YXJzZXIucGFyc2VQcmltaXRpdmUoYnVmZmVyLCBwb3NpdGlvbiwgZW51bUFyZ3VtZW50RGVmaW50
aW9uKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgIH0KCiAgICBzdGF0
aWMgcGFyc2VQcmltaXRpdmUoYnVmZmVyLCBwb3NpdGlvbiwgYXJndW1lbnREZWZpbml0aW9uKSB7
CiAgICAgICAgc3dpdGNoKGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlKSB7CiAgICAgICAgICAgIGNh
c2UgJ2Jvb2wnOgogICAgICAgICAgICAgICAgQXJndW1lbnRQYXJzZXIuY2hlY2tPdXRPZkJvdW5k
cyhidWZmZXIsIHBvc2l0aW9uLCAxKTsKICAgICAgICAgICAgICAgIHJldHVybiBbcG9zaXRpb24g
KyAxLCB7cGFyc2VkVmFsdWU6ICEhYnVmZmVyLmdldFVpbnQ4KHBvc2l0aW9uKSwgcGFyc2VkVHlw
ZTogYXJndW1lbnREZWZpbml0aW9uLnR5cGV9XTsKICAgICAgICAgICAgY2FzZSAndWludDhfdCc6
CiAgICAgICAgICAgICAgICBBcmd1bWVudFBhcnNlci5jaGVja091dE9mQm91bmRzKGJ1ZmZlciwg
cG9zaXRpb24sIDEpOwogICAgICAgICAgICAgICAgcmV0dXJuIFtwb3NpdGlvbiArIDEsIHtwYXJz
ZWRWYWx1ZTogYnVmZmVyLmdldFVpbnQ4KHBvc2l0aW9uKSwgcGFyc2VkVHlwZTogYXJndW1lbnRE
ZWZpbml0aW9uLnR5cGV9XTsKICAgICAgICAgICAgY2FzZSAnaW50OF90JzoKICAgICAgICAgICAg
ICAgIEFyZ3VtZW50UGFyc2VyLmNoZWNrT3V0T2ZCb3VuZHMoYnVmZmVyLCBwb3NpdGlvbiwgMSk7
CiAgICAgICAgICAgICAgICByZXR1cm4gW3Bvc2l0aW9uICsgMSwge3BhcnNlZFZhbHVlOiBidWZm
ZXIuZ2V0SW50OChwb3NpdGlvbiksIHBhcnNlZFR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBl
fV07CiAgICAgICAgICAgIGNhc2UgJ3VpbnQxNl90JzoKICAgICAgICAgICAgICAgIHBvc2l0aW9u
ID0gQXJndW1lbnRQYXJzZXIuYWxpZ24ocG9zaXRpb24sIDIpOwogICAgICAgICAgICAgICAgQXJn
dW1lbnRQYXJzZXIuY2hlY2tPdXRPZkJvdW5kcyhidWZmZXIsIHBvc2l0aW9uLCAyKTsKICAgICAg
ICAgICAgICAgIHJldHVybiBbcG9zaXRpb24gKyAyLCB7cGFyc2VkVmFsdWU6IGJ1ZmZlci5nZXRV
aW50MTYocG9zaXRpb24sIHRydWUpLCBwYXJzZWRUeXBlOiBhcmd1bWVudERlZmluaXRpb24udHlw
ZX1dOwogICAgICAgICAgICBjYXNlICdpbnQxNl90JzoKICAgICAgICAgICAgICAgIHBvc2l0aW9u
ID0gQXJndW1lbnRQYXJzZXIuYWxpZ24ocG9zaXRpb24sIDIpOwogICAgICAgICAgICAgICAgQXJn
dW1lbnRQYXJzZXIuY2hlY2tPdXRPZkJvdW5kcyhidWZmZXIsIHBvc2l0aW9uLCAyKTsKICAgICAg
ICAgICAgICAgIHJldHVybiBbcG9zaXRpb24gKyAyLCB7cGFyc2VkVmFsdWU6IGJ1ZmZlci5nZXRJ
bnQxNihwb3NpdGlvbiwgdHJ1ZSksIHBhcnNlZFR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBl
fV0KICAgICAgICAgICAgY2FzZSAndWludDMyX3QnOgogICAgICAgICAgICAgICAgcG9zaXRpb24g
PSBBcmd1bWVudFBhcnNlci5hbGlnbihwb3NpdGlvbiwgNCk7CiAgICAgICAgICAgICAgICBBcmd1
bWVudFBhcnNlci5jaGVja091dE9mQm91bmRzKGJ1ZmZlciwgcG9zaXRpb24sIDQpOwogICAgICAg
ICAgICAgICAgcmV0dXJuIFtwb3NpdGlvbiArIDQsIHtwYXJzZWRWYWx1ZTogYnVmZmVyLmdldFVp
bnQzMihwb3NpdGlvbiwgdHJ1ZSksIHBhcnNlZFR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBl
fV07CiAgICAgICAgICAgIGNhc2UgJ2ludDMyX3QnOgogICAgICAgICAgICAgICAgcG9zaXRpb24g
PSBBcmd1bWVudFBhcnNlci5hbGlnbihwb3NpdGlvbiwgNCk7CiAgICAgICAgICAgICAgICBBcmd1
bWVudFBhcnNlci5jaGVja091dE9mQm91bmRzKGJ1ZmZlciwgcG9zaXRpb24sIDQpOwogICAgICAg
ICAgICAgICAgcmV0dXJuIFtwb3NpdGlvbiArIDQsIHtwYXJzZWRWYWx1ZTogYnVmZmVyLmdldElu
dDMyKHBvc2l0aW9uLCB0cnVlKSwgcGFyc2VkVHlwZTogYXJndW1lbnREZWZpbml0aW9uLnR5cGV9
XTsKICAgICAgICAgICAgY2FzZSAndWludDY0X3QnOgogICAgICAgICAgICAgICAgcG9zaXRpb24g
PSBBcmd1bWVudFBhcnNlci5hbGlnbihwb3NpdGlvbiwgOCk7CiAgICAgICAgICAgICAgICBBcmd1
bWVudFBhcnNlci5jaGVja091dE9mQm91bmRzKGJ1ZmZlciwgcG9zaXRpb24sIDgpOwogICAgICAg
ICAgICAgICAgcmV0dXJuIFtwb3NpdGlvbiArIDgsIHtwYXJzZWRWYWx1ZTogYnVmZmVyLmdldEJp
Z1VpbnQ2NChwb3NpdGlvbiwgdHJ1ZSksIHBhcnNlZFR5cGU6IGFyZ3VtZW50RGVmaW5pdGlvbi50
eXBlfV07CiAgICAgICAgICAgIGNhc2UgJ2ludDY0X3QnOgogICAgICAgICAgICAgICAgcG9zaXRp
b24gPSBBcmd1bWVudFBhcnNlci5hbGlnbihwb3NpdGlvbiwgOCk7CiAgICAgICAgICAgICAgICBB
cmd1bWVudFBhcnNlci5jaGVja091dE9mQm91bmRzKGJ1ZmZlciwgcG9zaXRpb24sIDgpOwogICAg
ICAgICAgICAgICAgcmV0dXJuIFtwb3NpdGlvbiArIDgsIHtwYXJzZWRWYWx1ZTogYnVmZmVyLmdl
dEJpZ0ludDY0KHBvc2l0aW9uLCB0cnVlKSwgcGFyc2VkVHlwZTogYXJndW1lbnREZWZpbml0aW9u
LnR5cGV9XTsKICAgICAgICAgICAgY2FzZSAnZmxvYXQnOgogICAgICAgICAgICAgICAgcG9zaXRp
b24gPSBBcmd1bWVudFBhcnNlci5hbGlnbihwb3NpdGlvbiwgNCk7CiAgICAgICAgICAgICAgICBB
cmd1bWVudFBhcnNlci5jaGVja091dE9mQm91bmRzKGJ1ZmZlciwgcG9zaXRpb24sIDQpOwogICAg
ICAgICAgICAgICAgcmV0dXJuIFtwb3NpdGlvbiArIDQsIHtwYXJzZWRWYWx1ZTogYnVmZmVyLmdl
dEZsb2F0MzIocG9zaXRpb24pLCBwYXJzZWRUeXBlOiBhcmd1bWVudERlZmluaXRpb24udHlwZX1d
OwogICAgICAgICAgICBjYXNlICdkb3VibGUnOgogICAgICAgICAgICAgICAgcG9zaXRpb24gPSBB
cmd1bWVudFBhcnNlci5hbGlnbihwb3NpdGlvbiwgOCk7CiAgICAgICAgICAgICAgICBBcmd1bWVu
dFBhcnNlci5jaGVja091dE9mQm91bmRzKGJ1ZmZlciwgcG9zaXRpb24sIDgpOwogICAgICAgICAg
ICAgICAgcmV0dXJuIFtwb3NpdGlvbiArIDgsIHtwYXJzZWRWYWx1ZTogYnVmZmVyLmdldEZsb2F0
NjQocG9zaXRpb24pLCBwYXJzZWRUeXBlOiBhcmd1bWVudERlZmluaXRpb24udHlwZX1dOwogICAg
ICAgICAgICBjYXNlICdTdHJpbmcnOiB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IEFyZ3Vt
ZW50UGFyc2VyLmFsaWduKHBvc2l0aW9uLCA0KTsKICAgICAgICAgICAgICAgIEFyZ3VtZW50UGFy
c2VyLmNoZWNrT3V0T2ZCb3VuZHMoYnVmZmVyLCBwb3NpdGlvbiwgNCk7CiAgICAgICAgICAgICAg
ICBjb25zdCBzdHJpbmdMZW5ndGggPSBidWZmZXIuZ2V0VWludDMyKHBvc2l0aW9uLCB0cnVlKTsK
ICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDQ7CiAgICAgICAgICAgICAgICBpZihzdHJpbmdM
ZW5ndGggPT0gMHhmZmZmZmZmZikgewogICAgICAgICAgICAgICAgICAgIC8vIG51bGwgc3RyaW5n
CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtwb3NpdGlvbiwge3BhcnNlZFZhbHVlOiBudWxs
LCBwYXJzZWRUeXBlOiAnU3RyaW5nJ31dOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgY29uc3QgaXM4Qml0ID0gISFidWZmZXIuZ2V0VWludDgocG9zaXRpb24pOwogICAgICAgICAg
ICAgICAgcG9zaXRpb24gKz0gMTsKICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSAnJzsKICAg
ICAgICAgICAgICAgIGlmKGlzOEJpdCkgewogICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50UGFy
c2VyLmNoZWNrT3V0T2ZCb3VuZHMoYnVmZmVyLCBwb3NpdGlvbiwgc3RyaW5nTGVuZ3RoKTsKICAg
ICAgICAgICAgICAgICAgICBmb3IobGV0IGk9MDsgaTxzdHJpbmdMZW5ndGg7IGkrKykgewogICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZmZXIu
Z2V0VWludDgocG9zaXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0g
MTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgIEFyZ3VtZW50UGFyc2VyLmNoZWNrT3V0T2ZCb3VuZHMoYnVmZmVyLCBwb3Np
dGlvbiwgc3RyaW5nTGVuZ3RoICogMik7CiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7
IGk8c3RyaW5nTGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9
IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmZmVyLmdldFVpbnQxNihwb3NpdGlvbikpOwogICAgICAg
ICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyOwogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBbcG9zaXRpb24sIHtwYXJzZWRW
YWx1ZTogcmVzdWx0LCBwYXJzZWRUeXBlOiAnU3RyaW5nJ31dOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIGNhc2UgJ3N0ZDo6bnVsbHB0cl90JzoKICAgICAgICAgICAgICAgIHJldHVybiBbcG9z
aXRpb24sIHtwYXJzZWRWYWx1ZTogJ251bGwnLCBwYXJzZWRUeXBlOiAnc3RkOjpudWxscHRyX3Qn
fV07CiAgICAgICAgfQogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICB9CgogICAgc3RhdGlj
IHBhcnNlQXJndW1lbnQoYnVmZmVyLCBwb3NpdGlvbiwgYXJndW1lbnREZWZpbml0aW9uKSB7CiAg
ICAgICAgbGV0IHJlc3VsdDsKICAgICAgICBhcmd1bWVudERlZmluaXRpb24udHlwZSA9IHJlc29s
dmVBbGlhcyhhcmd1bWVudERlZmluaXRpb24udHlwZSk7CiAgICAgICAgaWYoYXJndW1lbnREZWZp
bml0aW9uLm9wdGlvbmFsID09PSB0cnVlKSB7CiAgICAgICAgICAgIGFyZ3VtZW50RGVmaW5pdGlv
bi50eXBlID0gYE9wdGlvbmFsPCR7IGFyZ3VtZW50RGVmaW5pdGlvbi50eXBlIH0+YDsKICAgICAg
ICAgICAgYXJndW1lbnREZWZpbml0aW9uLm9wdGlvbmFsID0gZmFsc2U7CiAgICAgICAgfQogICAg
ICAgIGlmKHJlc3VsdCA9IEFyZ3VtZW50UGFyc2VyLnBhcnNlVGVtcGxhdGUoYnVmZmVyLCBwb3Np
dGlvbiwgYXJndW1lbnREZWZpbml0aW9uKSkgewogICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgIH0KICAgICAgICBpZihyZXN1bHQgPSBBcmd1bWVudFBhcnNlci5wYXJzZUlkZW50aWZp
ZXIoYnVmZmVyLCBwb3NpdGlvbiwgYXJndW1lbnREZWZpbml0aW9uKSkgewogICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZihyZXN1bHQgPSBBcmd1bWVudFBhcnNl
ci5wYXJzZUVudW0oYnVmZmVyLCBwb3NpdGlvbiwgYXJndW1lbnREZWZpbml0aW9uKSkgewogICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZihyZXN1bHQgPSBBcmd1
bWVudFBhcnNlci5wYXJzZVByaW1pdGl2ZShidWZmZXIsIHBvc2l0aW9uLCBhcmd1bWVudERlZmlu
aXRpb24pKSB7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGlm
KHJlc3VsdCA9IEFyZ3VtZW50UGFyc2VyLnBhcnNlVHlwZShidWZmZXIsIHBvc2l0aW9uLCBhcmd1
bWVudERlZmluaXRpb24pKSB7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQog
ICAgICAgIHRocm93IG5ldyBQYXJzZXJFcnJvcihgRG9uJ3Qga25vdyBob3cgdG8gcGFyc2UgdHlw
ZSAnJHsgYXJndW1lbnREZWZpbml0aW9uLnR5cGUgfSdgKTsKICAgIH0KCiAgICBzdGF0aWMgdW50
eXBlUmVzdWx0T2xkKHR5cGVkUmVzdWx0KSB7CiAgICAgICAgbGV0IHJlc3VsdDsKICAgICAgICBp
ZihBcnJheS5pc0FycmF5KHR5cGVkUmVzdWx0KSkgewogICAgICAgICAgICByZXN1bHQgPSBbXTsK
ICAgICAgICAgICAgZm9yKGNvbnN0IHZhbHVlIG9mIHR5cGVkUmVzdWx0KSB7CiAgICAgICAgICAg
ICAgICBpZih0eXBlb2YodmFsdWUudmFsdWUpID09ICdvYmplY3QnKSB7CiAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnB1c2goQXJndW1lbnRQYXJzZXIudW50eXBlUmVzdWx0KHZhbHVlKSk7CiAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZh
bHVlLnZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgIHJlc3VsdCA9IHt9OwogICAgICAgICAgICBmb3IoY29uc3QgW2tleSwg
dmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHR5cGVkUmVzdWx0KSkgewogICAgICAgICAgICAgICAg
aWYodHlwZW9mKHZhbHVlLnZhbHVlKSA9PSAnb2JqZWN0JykgewogICAgICAgICAgICAgICAgICAg
IHJlc3VsdFtrZXldID0gQXJndW1lbnRQYXJzZXIudW50eXBlUmVzdWx0KHZhbHVlLnZhbHVlKTsK
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0g
PSB2YWx1ZS52YWx1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIHN0YXRpYyB1bnR5cGVSZXN1bHQodHlw
ZWRSZXN1bHQpIHsKICAgICAgICBpZih0eXBlb2YodHlwZWRSZXN1bHQpPT0nb2JqZWN0Jykgewog
ICAgICAgICAgICBpZigncGFyc2VkVHlwZScgaW4gdHlwZWRSZXN1bHQpIHsKICAgICAgICAgICAg
ICAgIGlmKGlzRW51bSh0eXBlZFJlc3VsdC5wYXJzZWRUeXBlKSB8fCBpc1ByaW10aXZlVHlwZSh0
eXBlZFJlc3VsdC5wYXJzZWRUeXBlKSB8fCBpc0lkZW50aWZpZXIodHlwZWRSZXN1bHQucGFyc2Vk
VHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZWRSZXN1bHQucGFyc2VkVmFs
dWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gQXJndW1lbnRQYXJz
ZXIudW50eXBlUmVzdWx0KHR5cGVkUmVzdWx0LnBhcnNlZFZhbHVlKTsKICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9OwogICAgICAgICAgICAgICAg
Zm9yKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0eXBlZFJlc3VsdCkpIHsK
ICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IEFyZ3VtZW50UGFyc2VyLnVudHlwZVJl
c3VsdCh2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKEFycmF5LmlzQXJyYXkodHlw
ZWRSZXN1bHQpKSB7CiAgICAgICAgICAgIGNvbnN0IG5ld0FycmF5ID0gW107CiAgICAgICAgICAg
IGZvcihjb25zdCBlbGVtZW50IG9mIHR5cGVkUmVzdWx0KSB7CiAgICAgICAgICAgICAgICBuZXdB
cnJheS5wdXNoKEFyZ3VtZW50UGFyc2VyLnVudHlwZVJlc3VsdChlbGVtZW50KSk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgcmV0dXJuIG5ld0FycmF5OwogICAgICAgIH0KICAgICAgICByZXR1
cm4gdHlwZWRSZXN1bHQ7CiAgICB9CgogICAgc3RhdGljIHBhcnNlQXJndW1lbnRzKGJ1ZmZlciwg
cG9zaXRpb24sIHJlcGx5QXJndW1lbnRzKSB7CiAgICAgICAgY29uc3QgdHlwZWRSZXN1bHQgPSB7
fQogICAgICAgIGZvcihjb25zdCBhcmd1bWVudCBvZiByZXBseUFyZ3VtZW50cykgewogICAgICAg
ICAgICB0cnkgewogICAgICAgICAgICAgICAgbGV0IHBhcnNlUmVzdWx0OwogICAgICAgICAgICAg
ICAgW3Bvc2l0aW9uLCBwYXJzZVJlc3VsdF0gPSBBcmd1bWVudFBhcnNlci5wYXJzZUFyZ3VtZW50
KGJ1ZmZlciwgcG9zaXRpb24sIGFyZ3VtZW50KTsKICAgICAgICAgICAgICAgIHR5cGVkUmVzdWx0
W0FyZ3VtZW50U2VyaWFsaXplci5zaW1wbGlmeU5hbWUoYXJndW1lbnQubmFtZSldID0gcGFyc2VS
ZXN1bHQ7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgICBpZihl
cnJvciBpbnN0YW5jZW9mIFBhcnNlckVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFBhcnNlckVycm9yKGBXaGVuIHBhcnNpbmcgZmllbGQgJyR7IGFyZ3VtZW50Lm5hbWUgfScg
b2YgdHlwZSAnJHsgYXJndW1lbnQudHlwZSB9JzogJHsgZXJyb3IubWVzc2FnZSB9YCk7CiAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBbcG9z
aXRpb24sIHR5cGVkUmVzdWx0LCBBcmd1bWVudFBhcnNlci51bnR5cGVSZXN1bHQodHlwZWRSZXN1
bHQpXTsKICAgIH0KfQoKZXhwb3J0IGNsYXNzIElQQ1dpcmVUYXAgewogICAgI25leHRUYXBzCiAg
ICAjYWxsVGFwcwogICAgI2V2ZXJ5VGFwcwogICAgI2xpc3RlbmVyRnVuY3Rpb24KICAgICNwcm9j
ZXNzCgogICAgY29uc3RydWN0b3IocHJvY2VzcywgZGlyZWN0aW9uKSB7CiAgICAgICAgaWYoIVsn
VUknLCdHUFUnLCdOZXR3b3JraW5nJ10uaW5jbHVkZXMocHJvY2VzcykpewogICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoYFdpcmVUYXA6IHByb2Nlc3MgaGFzIHRvIGJlIG9uZSBvZiAnVUknLCdH
UFUnIG9yICdOZXR3b3JraW5nJyBidXQgaXMgJyR7cHJvY2Vzc30nYCk7CiAgICAgICAgfQogICAg
ICAgIGlmKGRpcmVjdGlvbiAhPSAiT3V0Z29pbmciICYmIGRpcmVjdGlvbiAhPSAiSW5jb21pbmci
KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgV2lyZVRhcDogZGlyZWN0aW9uIGhhcyB0
byBiZSBvbmUgb2YgJ091dGdvaW5nJyBvciAnSW5jb21pbmcnIGJ1dCBpcyAnJHtkaXJlY3Rpb259
J2ApOwogICAgICAgIH0KICAgICAgICB0aGlzLiNwcm9jZXNzID0gcHJvY2VzczsKICAgICAgICB0
aGlzLiNhbGxUYXBzID0gW107CiAgICAgICAgdGhpcy4jZXZlcnlUYXBzID0ge307CiAgICAgICAg
dGhpcy4jbmV4dFRhcHMgPSB7fTsKICAgICAgICB0aGlzLiNsaXN0ZW5lckZ1bmN0aW9uID0gdGhp
cy5jcmVhdGVMaXN0ZW5lcigpOwogICAgICAgIGlmKGRpcmVjdGlvbiA9PSAiT3V0Z29pbmciKSB7
CiAgICAgICAgICAgIElQQy5hZGRPdXRnb2luZ01lc3NhZ2VMaXN0ZW5lcihwcm9jZXNzLCB0aGlz
LiNsaXN0ZW5lckZ1bmN0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBJUEMuYWRk
SW5jb21pbmdNZXNzYWdlTGlzdGVuZXIocHJvY2VzcywgdGhpcy4jbGlzdGVuZXJGdW5jdGlvbik7
CiAgICAgICAgfQogICAgICAgIC8vIHNlbGYgcmVmZXJlbmNlIHRvIGF2b2lkIGdjIGlzc3Vlcwog
ICAgICAgIGlmKCF3aW5kb3cucmVmcykgewogICAgICAgICAgICB3aW5kb3cucmVmcyA9IFtdOwog
ICAgICAgIH0KICAgICAgICB3aW5kb3cucmVmcy5wdXNoKHRoaXMpOwogICAgfQoKICAgIHRhcE5l
eHQobWVzc2FnZSwgdGFwKSB7CiAgICAgICAgaWYoIShtZXNzYWdlIGluIHRoaXMuI25leHRUYXBz
KSkgewogICAgICAgICAgICB0aGlzLiNuZXh0VGFwc1ttZXNzYWdlXSA9IFtdOwogICAgICAgIH0K
ICAgICAgICB0aGlzLiNuZXh0VGFwc1ttZXNzYWdlXS5wdXNoKHRhcCk7CiAgICB9CgogICAgdGFw
RXZlcnkobWVzc2FnZSwgdGFwKSB7CiAgICAgICAgaWYoIShtZXNzYWdlIGluIHRoaXMuI2V2ZXJ5
VGFwcykpIHsKICAgICAgICAgICAgdGhpcy4jZXZlcnlUYXBzW21lc3NhZ2VdID0gW107CiAgICAg
ICAgfQogICAgICAgIHRoaXMuI2V2ZXJ5VGFwc1ttZXNzYWdlXS5wdXNoKHRhcCk7CiAgICB9Cgog
ICAgdGFwQWxsKHRhcCkgewogICAgICAgIHRoaXMuI2FsbFRhcHMucHVzaCh0YXApOwogICAgfQoK
ICAgIHBhcnNlTWVzc2FnZShtZXNzYWdlTmFtZSwgYnVmZmVyKSB7CiAgICAgICAgY29uc3QgbWVz
c2FnZUFyZ3VtZW50cyA9IENvcmVJUEMubWVzc2FnZUJ5TmFtZVttZXNzYWdlTmFtZV0uYXJndW1l
bnRzOwogICAgICAgIGlmKCFtZXNzYWdlQXJndW1lbnRzKSByZXR1cm4gWzAsIHt9LCB7fV07CiAg
ICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIEFyZ3VtZW50UGFyc2VyLnBhcnNlQXJndW1l
bnRzKGJ1ZmZlciwgTUVTU0FHRV9IRUFERVJfU0laRSwgbWVzc2FnZUFyZ3VtZW50cyk7CiAgICAg
ICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaWYod2luZG93LiR2bSkgewogICAgICAg
ICAgICAgICAgJHZtPy5wcmludCgiV2lyZVRhcCBjb3VsZG4ndCBwYXJzZSBtZXNzYWdlOiAiICsg
ZXJyb3IubWVzc2FnZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb25z
b2xlLmxvZygiV2lyZVRhcCBjb3VsZG4ndCBwYXJzZSBtZXNzYWdlOiAiICsgZXJyb3IubWVzc2Fn
ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgaXNGdXp6TWVzc2FnZShidWZm
ZXIpIHsKICAgICAgICAgICAgaWYoYnVmZmVyLmJ5dGVMZW5ndGggPj0gMjQpIHsKICAgICAgICAg
ICAgICAgIGNvbnN0IHNsaWNlID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLnNsaWNlKGJ1ZmZlci5i
eXRlTGVuZ3RoIC0gMTIpKTsKICAgICAgICAgICAgICAgIGlmKHNsaWNlWzBdID09IDB4NWE1YTU1
NDYpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGNyZWF0ZUxpc3RlbmVyKCkgewogICAgICAg
IHJldHVybiAodGFwQXJndW1lbnRzKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VOYW1l
ID0gdGFwQXJndW1lbnRzLm5hbWU7CiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25JRCA9IHRh
cEFyZ3VtZW50cy5kZXN0aW5hdGlvbklEOwogICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0YXBB
cmd1bWVudHMuYnVmZmVyOwogICAgICAgICAgICBpZih0aGlzLmlzRnV6ek1lc3NhZ2UoYnVmZmVy
KSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxl
dCB0eXBlZFJlc3VsdDsKICAgICAgICAgICAgbGV0IHJlc3VsdDsKICAgICAgICAgICAgZm9yKGNv
bnN0IHRhcCBvZiB0aGlzLiNhbGxUYXBzKSB7CiAgICAgICAgICAgICAgICBpZih0eXBlZFJlc3Vs
dCA9PSB1bmRlZmluZWQgJiYgYnVmZmVyKQogICAgICAgICAgICAgICAgICAgIFssIHR5cGVkUmVz
dWx0LCByZXN1bHRdID0gdGhpcy5wYXJzZU1lc3NhZ2UobWVzc2FnZU5hbWUsIG5ldyBEYXRhVmll
dyhidWZmZXIpKTsKICAgICAgICAgICAgICAgIHRhcCh0aGlzLiNwcm9jZXNzLCBjb25uZWN0aW9u
SUQsIG1lc3NhZ2VOYW1lLCB0eXBlZFJlc3VsdCwgcmVzdWx0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgICBjb25zdCBldmVyeVRhcHMgPSB0aGlzLiNldmVyeVRhcHNbbWVzc2FnZU5hbWVdOwog
ICAgICAgICAgICBpZihldmVyeVRhcHMpIHsKICAgICAgICAgICAgICAgIGZvcihjb25zdCB0YXAg
b2YgZXZlcnlUYXBzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYodHlwZWRSZXN1bHQgPT0gdW5k
ZWZpbmVkICYmIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgICAgWywgdHlwZWRSZXN1bHQs
IHJlc3VsdF0gPSB0aGlzLnBhcnNlTWVzc2FnZShtZXNzYWdlTmFtZSwgbmV3IERhdGFWaWV3KGJ1
ZmZlcikpOwogICAgICAgICAgICAgICAgICAgIHRhcCh0aGlzLiNwcm9jZXNzLCBjb25uZWN0aW9u
SUQsIG1lc3NhZ2VOYW1lLCB0eXBlZFJlc3VsdCwgcmVzdWx0KTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBuZXh0VGFwcyA9IHRoaXMuI25leHRUYXBz
W21lc3NhZ2VOYW1lXTsKICAgICAgICAgICAgaWYobmV4dFRhcHMpIHsKICAgICAgICAgICAgICAg
IGxldCB0YXA7CiAgICAgICAgICAgICAgICB3aGlsZSh0YXAgPSBuZXh0VGFwcy5wb3AoKSkgewog
ICAgICAgICAgICAgICAgICAgIGlmKHR5cGVkUmVzdWx0ID09IHVuZGVmaW5lZCAmJiBidWZmZXIp
CiAgICAgICAgICAgICAgICAgICAgICAgIFssIHR5cGVkUmVzdWx0LCByZXN1bHRdID0gdGhpcy5w
YXJzZU1lc3NhZ2UobWVzc2FnZU5hbWUsIG5ldyBEYXRhVmlldyhidWZmZXIpKTsKICAgICAgICAg
ICAgICAgICAgICB0YXAodGhpcy4jcHJvY2VzcywgY29ubmVjdGlvbklELCBtZXNzYWdlTmFtZSwg
dHlwZWRSZXN1bHQsIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFRPRE86
IG9ubHkgZG8gdGhpcyB3aGlsZSBmdXp6aW5nCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICB9OwogICAgfQp9CgpleHBvcnQgY29uc3QgQ29yZUlQQyA9IG5ldyBDb3JlSVBD
Q2xhc3MoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>