<?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>130226</bug_id>
          
          <creation_ts>2014-03-13 23:33:42 -0700</creation_ts>
          <short_desc>[Mac] Avoid creating DOMCSSStyleDeclaration in WebHTMLConverter</short_desc>
          <delta_ts>2014-03-14 12:32:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>130227</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>990314</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-13 23:33:42 -0700</bug_when>
    <thetext>Right now, we spend a significant amount of time creating Objective-C wrappers for CSSStyleDeclaration
and then looking up NSMutableDictionary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990315</commentid>
    <comment_count>1</comment_count>
      <attachid>226655</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-13 23:37:32 -0700</bug_when>
    <thetext>Created attachment 226655
Extracted HTMLConverterCaches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990321</commentid>
    <comment_count>2</comment_count>
      <attachid>226657</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-13 23:47:38 -0700</bug_when>
    <thetext>Created attachment 226657
A/B test result

It&apos;s crazy.  This simple C++ rewrite is a 20% improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990337</commentid>
    <comment_count>3</comment_count>
      <attachid>226655</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-14 00:36:39 -0700</bug_when>
    <thetext>Comment on attachment 226655
Extracted HTMLConverterCaches

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

r=me

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:568
&gt; +    auto result = m_computedStyles.add(element, nullptr);
&gt; +    if (result.isNewEntry)
&gt; +        result.iterator-&gt;value = CSSComputedStyleDeclaration::create(element, true);
&gt; +    CSSStyleDeclaration* declaration = result.iterator-&gt;value.get();

This would be more efficient using ComputedStyleExtractor directly. Then we wouldn&apos;t have to build a CSSComputedStyleDeclaration object at all.

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:569
&gt; +    return declaration ? declaration-&gt;getPropertyCSSValue(propertyName) : 0;

0 -&gt; nullptr

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:577
&gt; +    auto result = m_inlineStyles.add(element, nullptr);
&gt; +    if (result.isNewEntry)
&gt; +        result.iterator-&gt;value = element-&gt;style();
&gt; +    CSSStyleDeclaration* declaration = result.iterator-&gt;value.get();

This code would be more efficient if it accessed the StyleProperties directly via Element::inlineStyle() instead of instantiating a CSSOM wrapper via style().

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:578
&gt; +    return declaration ? declaration-&gt;getPropertyCSSValue(propertyName) : 0;

0 -&gt; nullptr

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:785
&gt; +        Element* element = toElement(coreNode);

I&apos;d make this Element&amp;.

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:1005
&gt; +        Element* element = toElement(coreNode);

Same here.

&gt; Source/WebCore/platform/mac/HTMLConverter.mm:2424
&gt; +    _caches = nullptr;

Is this actually necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990340</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-14 01:04:24 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 226655 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226655&amp;action=review
&gt;
&gt; &gt; Source/WebCore/platform/mac/HTMLConverter.mm:568
&gt; &gt; +    auto result = m_computedStyles.add(element, nullptr);
&gt; &gt; +    if (result.isNewEntry)
&gt; &gt; +        result.iterator-&gt;value = CSSComputedStyleDeclaration::create(element, true);
&gt; &gt; +    CSSStyleDeclaration* declaration = result.iterator-&gt;value.get();
&gt; 
&gt; This would be more efficient using ComputedStyleExtractor directly. Then we wouldn&apos;t have to build a CSSComputedStyleDeclaration object at all.

Can I store ComputedStyleExtractor in the hash map and use it later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990541</commentid>
    <comment_count>5</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-14 10:17:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 226655 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=226655&amp;action=review
&gt; &gt;
&gt; &gt; &gt; Source/WebCore/platform/mac/HTMLConverter.mm:568
&gt; &gt; &gt; +    auto result = m_computedStyles.add(element, nullptr);
&gt; &gt; &gt; +    if (result.isNewEntry)
&gt; &gt; &gt; +        result.iterator-&gt;value = CSSComputedStyleDeclaration::create(element, true);
&gt; &gt; &gt; +    CSSStyleDeclaration* declaration = result.iterator-&gt;value.get();
&gt; &gt; 
&gt; &gt; This would be more efficient using ComputedStyleExtractor directly. Then we wouldn&apos;t have to build a CSSComputedStyleDeclaration object at all.
&gt; 
&gt; Can I store ComputedStyleExtractor in the hash map and use it later?

Totally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990608</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-03-14 12:32:46 -0700</bug_when>
    <thetext>Committed r165635: &lt;http://trac.webkit.org/changeset/165635&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226655</attachid>
            <date>2014-03-13 23:37:32 -0700</date>
            <delta_ts>2014-03-14 00:36:38 -0700</delta_ts>
            <desc>Extracted HTMLConverterCaches</desc>
            <filename>bug-130226-20140313233710.patch</filename>
            <type>text/plain</type>
            <size>26828</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTYwMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE0LTAzLTEzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFtNYWNdIEF2b2lkIGNyZWF0aW5n
IERPTUNTU1N0eWxlRGVjbGFyYXRpb24gaW4gV2ViSFRNTENvbnZlcnRlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwMjI2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXh0cmFjdGVkIEhUTUxDb252ZXJ0
ZXJDYWNoZXMgaW4gQysrIHRoYXQgZGlyZWN0bHkgY2FsbHMgZ2V0UHJvcGVydHlDU1NWYWx1ZSBv
biBjb21wdXRlZCBzdHlsZQorICAgICAgICBhbmQgaW5saW5lIHN0eWxlIHRvIGF2b2lkIGNyZWF0
aW5nIE9iamVjdGl2ZS1DIHdyYXBwZXJzIGZvciBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
CisKKyAgICAgICAgVGhpcyBpbXByb3ZlcyB0aGUgcnVudGltZSBvZiBQZXJmb3JtYW5jZVRlc3Rz
L0ludGVyYWN0aXZlL0NvcHlBbGwuaHRtbCBmcm9tIDMxLTMycyB0byAyNS0yNnMgKDIwJSkuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9IVE1MQ29udmVydGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlckNhY2hlczo6
Y29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29udmVydGVy
Q2FjaGVzOjppbmxpbmVTdHlsZVByb3BlcnR5Rm9yRWxlbWVudCk6CisgICAgICAgIChzdHJpbmdG
cm9tQ1NTVmFsdWUpOgorICAgICAgICAoLVtXZWJIVE1MQ29udmVydGVyIF9jb21wdXRlZFN0cmlu
Z0Zvck5vZGU6cHJvcGVydHk6XSk6CisgICAgICAgIChmbG9hdFZhbHVlRnJvbVByaW1pdGl2ZVZh
bHVlKToKKyAgICAgICAgKF9nZXRGbG9hdCk6CisgICAgICAgICgtW1dlYkhUTUxDb252ZXJ0ZXIg
X2dldENvbXB1dGVkRmxvYXQ6Zm9yTm9kZTpwcm9wZXJ0eTpdKToKKyAgICAgICAgKC1bV2ViSFRN
TENvbnZlcnRlciBfY29tcHV0ZWRDb2xvckZvck5vZGU6cHJvcGVydHk6XSk6CisgICAgICAgICgt
W1dlYkhUTUxDb252ZXJ0ZXIgZGVhbGxvY10pOgorICAgICAgICAoLVtXZWJIVE1MQ29udmVydGVy
IGluaXRdKToKKwogMjAxNC0wMy0xMyAgTWFuaXNoIFIgR3VybmFuZXkgIDxtLmd1cm5hbmV5QHNh
bXN1bmcuY29tPgogCiAgICAgICAgIFNjcm9sbCBzaXplIGlzIG5vdCByZWNhbGN1bGF0ZWQgd2hl
biBhYnNvbHV0ZSBsZWZ0IG9mIGNoaWxkIGlzIHVwZGF0ZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaAkocmV2aXNpb24gMTY1NTY2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmFuZ2U7CiB9
CiAKK2NsYXNzIEhUTUxDb252ZXJ0ZXJDYWNoZXM7CisKIEBpbnRlcmZhY2UgV2ViSFRNTENvbnZl
cnRlciA6IE5TT2JqZWN0IHsKICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpfYXR0clN0
cjsKICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZG9jdW1lbnRBdHRyczsKQEAgLTU0LDcgKzU2
LDYgQEAgQGludGVyZmFjZSBXZWJIVE1MQ29udmVydGVyIDogTlNPYmplY3QgewogICAgIE5TTXV0
YWJsZUFycmF5ICpfdGV4dFRhYmxlUm93czsKICAgICBOU011dGFibGVBcnJheSAqX3RleHRUYWJs
ZVJvd0FycmF5czsKICAgICBOU011dGFibGVBcnJheSAqX3RleHRUYWJsZVJvd0JhY2tncm91bmRD
b2xvcnM7Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX2NvbXB1dGVkU3R5bGVzRm9yRWxlbWVu
dHM7CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqX3NwZWNpZmllZFN0eWxlc0ZvckVsZW1lbnRz
OwogICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKl9zdHJpbmdzRm9yTm9kZXM7CiAgICAgTlNNdXRh
YmxlRGljdGlvbmFyeSAqX2Zsb2F0c0Zvck5vZGVzOwpAQCAtNjksNiArNzAsOCBAQCBAaW50ZXJm
YWNlIFdlYkhUTUxDb252ZXJ0ZXIgOiBOU09iamVjdCB7CiAgICAgTlNJbnRlZ2VyIF9lcnJvckNv
ZGU7CiAgICAgTlNJbnRlZ2VyIF9xdW90ZUxldmVsOwogCisgICAgc3RkOjp1bmlxdWVfcHRyPEhU
TUxDb252ZXJ0ZXJDYWNoZXM+IF9jYWNoZXM7CisKICAgICBzdHJ1Y3QgewogICAgICAgICB1bnNp
Z25lZCBpbnQgaXNTb2Z0OjE7CiAgICAgICAgIHVuc2lnbmVkIGludCByZWFjaGVkU3RhcnQ6MTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tCShy
ZXZpc2lvbiAxNjU1NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZl
cnRlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDE3IEBACiAjaW1wb3J0ICJBcmNo
aXZlUmVzb3VyY2UuaCIKICNpbXBvcnQgIkNhY2hlZEltYWdlLmgiCiAjaW1wb3J0ICJDb2xvck1h
Yy5oIgorI2ltcG9ydCAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW1wb3J0ICJD
U1NQcmltaXRpdmVWYWx1ZS5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkRvY3Vt
ZW50TG9hZGVyLmgiCisjaW1wb3J0ICJET01DU1NQcmltaXRpdmVWYWx1ZUludGVybmFsLmgiCiAj
aW1wb3J0ICJET01Eb2N1bWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01FbGVtZW50SW50ZXJu
YWwuaCIKICNpbXBvcnQgIkRPTUhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCisjaW1wb3J0ICJET01O
b2RlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVByaXZhdGUuaCIKKyNpbXBvcnQgIkRPTVJHQkNv
bG9ySW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkVs
ZW1lbnQuaCIKICNpbXBvcnQgIkZvbnQuaCIKQEAgLTQ0LDYgKzQ5LDcgQEAKICNpbXBvcnQgIkhU
TUxOYW1lcy5oIgogI2ltcG9ydCAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2ltcG9ydCAiTG9hZGVy
TlNVUkxFeHRyYXMuaCIKKyNpbXBvcnQgIlJHQkNvbG9yLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFn
ZS5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKICNpbXBvcnQgIlRleHRJdGVyYXRvci5oIgpA
QCAtMzkwLDYgKzM5NiwxNiBAQCAtIChCT09MKWlnbm9yZXNPcmllbnRhdGlvbjsKIC8vIEFkZGl0
aW9uYWwgY29udHJvbCBVbmljb2RlIGNoYXJhY3RlcnMKIGNvbnN0IHVuaWNoYXIgV2ViTmV4dExp
bmVDaGFyYWN0ZXIgPSAweDAwODU7CiAKK2NsYXNzIEhUTUxDb252ZXJ0ZXJDYWNoZXMgeworcHVi
bGljOgorICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVs
ZW1lbnQoRWxlbWVudCosIFN0cmluZyYpOworICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGlubGlu
ZVN0eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQqLCBTdHJpbmcmKTsKKyAgICAKK3ByaXZh
dGU6CisgICAgSGFzaE1hcDxFbGVtZW50KiwgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbj4+IG1fY29tcHV0ZWRTdHlsZXM7CisgICAgSGFzaE1hcDxFbGVtZW50KiwgUmVmUHRyPENT
U1N0eWxlRGVjbGFyYXRpb24+PiBtX2lubGluZVN0eWxlczsKK307CisKIEBpbnRlcmZhY2UgTlNU
ZXh0TGlzdCAoV2ViQ29yZU5TVGV4dExpc3REZXRhaWxzKQogKyAoTlNEaWN0aW9uYXJ5ICopX3N0
YW5kYXJkTWFya2VyQXR0cmlidXRlc0ZvckF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWF0dHJz
OwogQGVuZApAQCAtNTQ0LDE5ICs1NjAsMjIgQEAgLSAoTlNBcnJheSAqKV9jaGlsZHJlbkZvck5v
ZGU6KERPTU5vZGUgKgogICAgIHJldHVybiBhcnJheTsKIH0KIAotLSAoRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqKV9jb21wdXRlZFN0eWxlRm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQK
K1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmNvbXB1dGVkU3R5bGVQ
cm9wZXJ0eUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
CiB7Ci0gICAgRE9NRG9jdW1lbnQgKmRvY3VtZW50ID0gW2VsZW1lbnQgb3duZXJEb2N1bWVudF07
Ci0gICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqcmVzdWx0ID0gbmlsOwotICAgIHJlc3VsdCA9
IFtfY29tcHV0ZWRTdHlsZXNGb3JFbGVtZW50cyBvYmplY3RGb3JLZXk6ZWxlbWVudF07Ci0gICAg
aWYgKHJlc3VsdCkgewotICAgICAgICBpZiAoW3Jlc3VsdCBpc0VxdWFsOltOU051bGwgbnVsbF1d
KQotICAgICAgICAgICAgcmVzdWx0ID0gbmlsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3Vs
dCA9IFtkb2N1bWVudCBnZXRDb21wdXRlZFN0eWxlOmVsZW1lbnQgcHNldWRvRWxlbWVudDpAIiJd
IDsKLSAgICAgICAgW19jb21wdXRlZFN0eWxlc0ZvckVsZW1lbnRzIHNldE9iamVjdDoocmVzdWx0
ID8gKGlkKXJlc3VsdCA6IChpZClbTlNOdWxsIG51bGxdKSBmb3JLZXk6ZWxlbWVudF07Ci0gICAg
fQotICAgIHJldHVybiByZXN1bHQ7CisgICAgYXV0byByZXN1bHQgPSBtX2NvbXB1dGVkU3R5bGVz
LmFkZChlbGVtZW50LCBudWxscHRyKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OmNyZWF0ZShlbGVtZW50LCB0cnVlKTsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJh
dGlvbiA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgcmV0dXJuIGRlY2xhcmF0
aW9uID8gZGVjbGFyYXRpb24tPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHlOYW1lKSA6IDA7
Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IEhUTUxDb252ZXJ0ZXJDYWNoZXM6OmlubGluZVN0
eWxlUHJvcGVydHlGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFN0cmluZyYgcHJvcGVydHlO
YW1lKQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9pbmxpbmVTdHlsZXMuYWRkKGVsZW1lbnQsIG51
bGxwdHIpOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IGVsZW1lbnQtPnN0eWxlKCk7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
ZGVjbGFyYXRpb24gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIHJldHVybiBk
ZWNsYXJhdGlvbiA/IGRlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5TmFt
ZSkgOiAwOwogfQogCiAtIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3NwZWNpZmllZFN0eWxl
Rm9yRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKQEAgLTU3Miw1NCArNTkxLDUxIEBAIC0g
KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3BlY2lmaWVkU3QKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCitzdGF0aWMgYm9vbCBzdHJpbmdGcm9tQ1NTVmFsdWUoQ1NTVmFsdWUmIHZhbHVlLCBT
dHJpbmcmIHJlc3VsdCkKK3sKKyAgICBpZiAodmFsdWUuaXNQcmltaXRpdmVWYWx1ZSgpKSB7Cisg
ICAgICAgIHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSB0b0NTU1ByaW1pdGl2ZVZhbHVl
KHZhbHVlKS5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgIGlmIChwcmltaXRpdmVUeXBlID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HIHx8IHByaW1pdGl2ZVR5cGUgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19VUkkgfHwKKyAgICAgICAgICAgIHByaW1pdGl2ZVR5cGUgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19JREVOVCB8fCBwcmltaXRpdmVUeXBlID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfQVRUUikgeworICAgICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUu
Y3NzVGV4dCgpOworICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLmxlbmd0aCgpKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gc3RyaW5nVmFsdWU7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHZhbHVlLmlz
VmFsdWVMaXN0KCkpIHsKKyAgICAgICAgcmVzdWx0ID0gdmFsdWUuY3NzVGV4dCgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiAtIChOU1N0cmlu
ZyAqKV9jb21wdXRlZFN0cmluZ0Zvck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0
cmluZyAqKWtleQogewotICAgIE5TU3RyaW5nICpyZXN1bHQgPSBuaWw7Ci0gICAgQk9PTCBpbmhl
cml0ID0gWUVTOwotICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKW5vZGU7
ICAgIAotICAgIGlmIChlbGVtZW50ICYmIFtlbGVtZW50IG5vZGVUeXBlXSA9PSBET01fRUxFTUVO
VF9OT0RFKSB7Ci0gICAgICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKmNvbXB1dGVkU3R5bGU7
Ci0gICAgICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnNwZWNpZmllZFN0eWxlOwotICAgICAg
ICBpbmhlcml0ID0gTk87Ci0gICAgICAgIGlmICghcmVzdWx0ICYmIChjb21wdXRlZFN0eWxlID0g
W3NlbGYgX2NvbXB1dGVkU3R5bGVGb3JFbGVtZW50OmVsZW1lbnRdKSkgewotICAgICAgICAgICAg
RE9NQ1NTUHJpbWl0aXZlVmFsdWUgKmNvbXB1dGVkVmFsdWUgPSAoRE9NQ1NTUHJpbWl0aXZlVmFs
dWUgKilbY29tcHV0ZWRTdHlsZSBnZXRQcm9wZXJ0eUNTU1ZhbHVlOmtleV07Ci0gICAgICAgICAg
ICBpZiAoY29tcHV0ZWRWYWx1ZSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHZh
bHVlVHlwZSA9IFtjb21wdXRlZFZhbHVlIGNzc1ZhbHVlVHlwZV07Ci0gICAgICAgICAgICAgICAg
aWYgKHZhbHVlVHlwZSA9PSBET01fQ1NTX1BSSU1JVElWRV9WQUxVRSkgewotICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcmltaXRpdmVUeXBlID0gW2NvbXB1dGVkVmFsdWUgcHJp
bWl0aXZlVHlwZV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVUeXBlID09IERP
TV9DU1NfU1RSSU5HIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19VUkkgfHwgcHJpbWl0aXZl
VHlwZSA9PSBET01fQ1NTX0lERU5UIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19BVFRSKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbY29tcHV0ZWRWYWx1ZSBnZXRTdHJp
bmdWYWx1ZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmICFbcmVzdWx0
IGxlbmd0aF0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmlsOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUg
PT0gRE9NX0NTU19WQUxVRV9MSVNUKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbY29t
cHV0ZWRTdHlsZSBnZXRQcm9wZXJ0eVZhbHVlOmtleV07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFyZXN1bHQgJiYgKHNwZWNpZmllZFN0eWxlID0gW3NlbGYgX3NwZWNp
ZmllZFN0eWxlRm9yRWxlbWVudDplbGVtZW50XSkpIHsKLSAgICAgICAgICAgIERPTUNTU1ByaW1p
dGl2ZVZhbHVlICpzcGVjaWZpZWRWYWx1ZSA9IChET01DU1NQcmltaXRpdmVWYWx1ZSAqKVtzcGVj
aWZpZWRTdHlsZSBnZXRQcm9wZXJ0eUNTU1ZhbHVlOmtleV07Ci0gICAgICAgICAgICBpZiAoc3Bl
Y2lmaWVkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZVR5cGUg
PSBbc3BlY2lmaWVkVmFsdWUgY3NzVmFsdWVUeXBlXTsKLSAgICAgICAgICAgICAgICBpZiAodmFs
dWVUeXBlID09IERPTV9DU1NfUFJJTUlUSVZFX1ZBTFVFKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHByaW1pdGl2ZVR5cGUgPSBbc3BlY2lmaWVkVmFsdWUgcHJpbWl0aXZl
VHlwZV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVUeXBlID09IERPTV9DU1Nf
U1RSSU5HIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19VUkkgfHwgcHJpbWl0aXZlVHlwZSA9
PSBET01fQ1NTX0lERU5UIHx8IHByaW1pdGl2ZVR5cGUgPT0gRE9NX0NTU19BVFRSKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbc3BlY2lmaWVkVmFsdWUgZ2V0U3RyaW5nVmFs
dWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiAhW3Jlc3VsdCBsZW5n
dGhdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5pbDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IFtzcGVjaWZpZWRTdHlsZSBnZXRQcm9wZXJ0eVZhbHVlOmtleV07Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBE
T01fQ1NTX0lOSEVSSVQpCi0gICAgICAgICAgICAgICAgICAgIGluaGVyaXQgPSBZRVM7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09IERPTV9DU1NfVkFMVUVfTElTVCkKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW3NwZWNpZmllZFN0eWxlIGdldFByb3BlcnR5VmFs
dWU6a2V5XTsKKyAgICBib29sIGhhdmVSZXN1bHQgPSBmYWxzZTsKKyAgICBTdHJpbmcgcmVzdWx0
OworICAgIGJvb2wgaW5oZXJpdCA9IHRydWU7CisgICAgTm9kZSogY29yZU5vZGUgPSBjb3JlKG5v
ZGUpOworICAgIGlmIChjb3JlTm9kZSAmJiBjb3JlTm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7Cisg
ICAgICAgIEVsZW1lbnQqIGNvcmVFbGVtZW50ID0gdG9FbGVtZW50KGNvcmVOb2RlKTsKKyAgICAg
ICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IGtleTsKKyAgICAgICAgaW5oZXJpdCA9IGZhbHNlOwor
ICAgICAgICBpZiAoIWhhdmVSZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFs
dWU+IHZhbHVlID0gX2NhY2hlcy0+Y29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChjb3Jl
RWxlbWVudCwgcHJvcGVydHlOYW1lKSkKKyAgICAgICAgICAgICAgICBoYXZlUmVzdWx0ID0gc3Ry
aW5nRnJvbUNTU1ZhbHVlKCp2YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWhhdmVSZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
X2NhY2hlcy0+Y29tcHV0ZWRTdHlsZVByb3BlcnR5Rm9yRWxlbWVudChjb3JlRWxlbWVudCwgcHJv
cGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1
ZSgpKQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGhhdmVSZXN1bHQgPSBzdHJpbmdGcm9tQ1NTVmFs
dWUoKnZhbHVlLCByZXN1bHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlm
ICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBFbGVtZW50KiBjb3JlRWxlbWVudCA9IGNvcmUoZWxl
bWVudCk7CisgICAgICAgIGlmICghaGF2ZVJlc3VsdCkgewogICAgICAgICAgICAgaWYgKFtAImRp
c3BsYXkiIGlzRXF1YWxUb1N0cmluZzprZXldKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvcmVF
bGVtZW50LT5oYXNUYWdOYW1lKGhlYWRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHNj
cmlwdFRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBjb3JlRWxl
bWVudC0+aGFzVGFnTmFtZShub2ZyYW1lc1RhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IEAibm9uZSI7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJub25lIjsKICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShhZGRyZXNzVGFnKSB8
fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShibG9ja3F1b3RlVGFnKSB8fCBjb3JlRWxlbWVudC0+
aGFzVGFnTmFtZShib2R5VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShjZW50ZXJUYWcp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZGRU
YWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGRpclRhZykgfHwgY29yZUVsZW1lbnQtPmhh
c1RhZ05hbWUoZGl2VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShkbFRhZykKICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShkdFRhZykgfHwg
Y29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNU
YWdOYW1lKGZvcm1UYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGZyYW1lVGFnKQpAQCAt
NjI3LDYxICs2NDMsNjEgQEAgLSAoTlNTdHJpbmcgKilfY29tcHV0ZWRTdHJpbmdGb3JOb2RlOihE
TwogICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGgy
VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShoM1RhZykgfHwgY29yZUVsZW1lbnQtPmhh
c1RhZ05hbWUoaDRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGg1VGFnKQogICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGg2VGFnKSB8fCBj
b3JlRWxlbWVudC0+aGFzVGFnTmFtZShpZnJhbWVUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKG1lbnVUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKG5vc2NyaXB0VGFnKQogICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKG9sVGFnKSB8
fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShwVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFt
ZShwcmVUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHVsVGFnKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQCJibG9jayI7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
ICJibG9jayI7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05h
bWUobGlUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBAImxpc3QtaXRlbSI7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJsaXN0LWl0ZW0iOwogICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gQCJ0YWJsZSI7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
ICJ0YWJsZSI7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05h
bWUodHJUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBAInRhYmxlLXJvdyI7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJ0YWJsZS1yb3ciOwogICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKSB8fCBjb3JlRWxlbWVudC0+
aGFzVGFnTmFtZSh0ZFRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAidGFibGUt
Y2VsbCI7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJ0YWJsZS1jZWxsIjsKICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0aGVhZFRhZykpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAidGFibGUtaGVhZGVyLWdyb3VwIjsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gInRhYmxlLWhlYWRlci1ncm91cCI7CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGJvZHlUYWcpKQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBAInRhYmxlLXJvdy1ncm91cCI7CisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdCA9ICJ0YWJsZS1yb3ctZ3JvdXAiOwogICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRmb290VGFnKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gQCJ0YWJsZS1mb290ZXItZ3JvdXAiOworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSAidGFibGUtZm9vdGVyLWdyb3VwIjsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChj
b3JlRWxlbWVudC0+aGFzVGFnTmFtZShjb2xUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBAInRhYmxlLWNvbHVtbiI7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJ0YWJs
ZS1jb2x1bW4iOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKGNvbGdyb3VwVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJ0YWJsZS1j
b2x1bW4tZ3JvdXAiOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAidGFibGUtY29sdW1u
LWdyb3VwIjsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFt
ZShjYXB0aW9uVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJ0YWJsZS1jYXB0
aW9uIjsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gInRhYmxlLWNhcHRpb24iOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChbQCJ3aGl0ZS1zcGFjZSIgaXNFcXVhbFRvU3RyaW5nOmtleV0p
IHsKICAgICAgICAgICAgICAgICBpZiAoY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUocHJlVGFnKSkK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gQCJwcmUiOworICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSAicHJlIjsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIGluaGVyaXQgPSBZRVM7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFtAImZvbnQtc3R5bGUi
IGlzRXF1YWxUb1N0cmluZzprZXldKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvcmVFbGVtZW50
LT5oYXNUYWdOYW1lKGlUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGNpdGVUYWcpIHx8
IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGVtVGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFt
ZSh2YXJUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGFkZHJlc3NUYWcpKQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBAIml0YWxpYyI7CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9ICJpdGFsaWMiOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgaW5oZXJpdCA9IFlFUzsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoW0AiZm9udC13ZWlnaHQi
IGlzRXF1YWxUb1N0cmluZzprZXldKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvcmVFbGVtZW50
LT5oYXNUYWdOYW1lKGJUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHN0cm9uZ1RhZykg
fHwgY29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGhUYWcpKQotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBAImJvbGRlciI7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJib2xkZXIi
OwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlF
UzsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoW0AidGV4dC1kZWNvcmF0aW9uIiBpc0VxdWFsVG9T
dHJpbmc6a2V5XSkgewogICAgICAgICAgICAgICAgIGlmIChjb3JlRWxlbWVudC0+aGFzVGFnTmFt
ZSh1VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZShpbnNUYWcpKQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBAInVuZGVybGluZSI7CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICJ1bmRlcmxpbmUiOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5o
YXNUYWdOYW1lKHNUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHN0cmlrZVRhZykgfHwg
Y29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoZGVsVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gQCJsaW5lLXRocm91Z2giOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAibGlu
ZS10aHJvdWdoIjsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGlu
aGVyaXQgPSBZRVM7IC8vID8/PyB0aGlzIGlzIG5vdCBzdHJpY3RseSBjb3JyZWN0CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKFtAInRleHQtYWxpZ24iIGlzRXF1YWxUb1N0cmluZzprZXldKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKGNlbnRlclRhZykgfHwg
Y29yZUVsZW1lbnQtPmhhc1RhZ05hbWUoY2FwdGlvblRhZykgfHwgY29yZUVsZW1lbnQtPmhhc1Rh
Z05hbWUodGhUYWcpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBAImNlbnRlciI7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICJjZW50ZXIiOwogICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsKICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoW0AidmVydGljYWwtYWxpZ24iIGlzRXF1YWxUb1N0cmluZzprZXldKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHN1cFRhZykpCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IEAic3VwZXIiOworICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSAic3VwZXIiOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKHN1YlRhZykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAic3ViIjsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gInN1YiI7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Y29yZUVsZW1lbnQtPmhhc1RhZ05hbWUodGhlYWRUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdO
YW1lKHRib2R5VGFnKSB8fCBjb3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0Zm9vdFRhZykpCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IEAibWlkZGxlIjsKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gIm1pZGRsZSI7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29yZUVsZW1lbnQt
Pmhhc1RhZ05hbWUodHJUYWcpIHx8IGNvcmVFbGVtZW50LT5oYXNUYWdOYW1lKHRoVGFnKSB8fCBj
b3JlRWxlbWVudC0+aGFzVGFnTmFtZSh0ZFRhZykpCiAgICAgICAgICAgICAgICAgICAgIGluaGVy
aXQgPSBZRVM7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFtAImZvbnQtZmFtaWx5IiBpc0VxdWFs
VG9TdHJpbmc6a2V5XSB8fCBbQCJmb250LXZhcmlhbnQiIGlzRXF1YWxUb1N0cmluZzprZXldIHx8
IFtAImZvbnQtZWZmZWN0IiBpc0VxdWFsVG9TdHJpbmc6a2V5XQpAQCAtNjkyLDEyICs3MDgsMTQg
QEAgLSAoTlNTdHJpbmcgKilfY29tcHV0ZWRTdHJpbmdGb3JOb2RlOihETwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQotICAgIGlmICghcmVzdWx0ICYmIGluaGVyaXQpIHsKKyAgICBp
ZiAoIWhhdmVSZXN1bHQgJiYgaW5oZXJpdCkgewogICAgICAgICBET01Ob2RlICpwYXJlbnROb2Rl
ID0gW25vZGUgcGFyZW50Tm9kZV07CiAgICAgICAgIGlmIChwYXJlbnROb2RlKQotICAgICAgICAg
ICAgcmVzdWx0ID0gW3NlbGYgX3N0cmluZ0Zvck5vZGU6cGFyZW50Tm9kZSBwcm9wZXJ0eTprZXld
OworICAgICAgICAgICAgcmV0dXJuIFtzZWxmIF9zdHJpbmdGb3JOb2RlOnBhcmVudE5vZGUgcHJv
cGVydHk6a2V5XTsKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdCA/IFtyZXN1bHQgbG93ZXJjYXNl
U3RyaW5nXSA6IG5pbDsKKyAgICBpZiAoaGF2ZVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5sb3dlcigpOworICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKE5TU3RyaW5nICopX3N0cmluZ0Zv
ck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleQpAQCAtNzE5LDcy
ICs3MzcsODIgQEAgLSAoTlNTdHJpbmcgKilfc3RyaW5nRm9yTm9kZTooRE9NTm9kZSAqKQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBmbG9hdFZhbHVlRnJvbVBy
aW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSwgZmxvYXQmIHJl
c3VsdCkKK3sKKyAgICAvLyBGSVhNRTogVXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlVmFs
dWUuCisgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS5wcmltaXRpdmVUeXBlKCkpIHsKKyAgICBj
YXNlIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFg6CisgICAgICAgIHJlc3VsdCA9IHByaW1pdGl2
ZVZhbHVlLmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QVDoKKyAgICAg
ICAgcmVzdWx0ID0gNCAqIHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QVCkgLyAzOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUEM6CisgICAgICAgIHJlc3VsdCA9IDE2ICogcHJpbWl0aXZlVmFs
dWUuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgY2FzZSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0NNOgorICAgICAgICBy
ZXN1bHQgPSA5NiAqIHByaW1pdGl2ZVZhbHVlLmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QQykgLyAyLjU0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTU06CisgICAgICAgIHJlc3VsdCA9IDk2ICogcHJpbWl0aXZlVmFs
dWUuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BDKSAvIDI1LjQ7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JTjoKKyAg
ICAgICAgcmVzdWx0ID0gOTYgKiBwcmltaXRpdmVWYWx1ZS5nZXRGbG9hdFZhbHVlKENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfSU4pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBzdGF0aWMgaW5saW5lIEJPT0wgX2dl
dEZsb2F0KERPTUNTU1ByaW1pdGl2ZVZhbHVlICpwcmltaXRpdmVWYWx1ZSwgQ0dGbG9hdCAqdmFs
KQogewogICAgIGlmICghdmFsKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgc3dpdGNoIChbcHJp
bWl0aXZlVmFsdWUgcHJpbWl0aXZlVHlwZV0pIHsKLSAgICAgICAgY2FzZSBET01fQ1NTX1BYOgot
ICAgICAgICAgICAgKnZhbCA9IFtwcmltaXRpdmVWYWx1ZSBnZXRGbG9hdFZhbHVlOkRPTV9DU1Nf
UFhdOwotICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAgICAgY2FzZSBET01fQ1NTX1BUOgot
ICAgICAgICAgICAgKnZhbCA9IDQgKiBbcHJpbWl0aXZlVmFsdWUgZ2V0RmxvYXRWYWx1ZTpET01f
Q1NTX1BUXSAvIDM7Ci0gICAgICAgICAgICByZXR1cm4gWUVTOwotICAgICAgICBjYXNlIERPTV9D
U1NfUEM6Ci0gICAgICAgICAgICAqdmFsID0gMTYgKiBbcHJpbWl0aXZlVmFsdWUgZ2V0RmxvYXRW
YWx1ZTpET01fQ1NTX1BDXTsKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIGNhc2Ug
RE9NX0NTU19DTToKLSAgICAgICAgICAgICp2YWwgPSA5NiAqIFtwcmltaXRpdmVWYWx1ZSBnZXRG
bG9hdFZhbHVlOkRPTV9DU1NfQ01dIC8gKENHRmxvYXQpMi41NDsKLSAgICAgICAgICAgIHJldHVy
biBZRVM7Ci0gICAgICAgIGNhc2UgRE9NX0NTU19NTToKLSAgICAgICAgICAgICp2YWwgPSA5NiAq
IFtwcmltaXRpdmVWYWx1ZSBnZXRGbG9hdFZhbHVlOkRPTV9DU1NfTU1dIC8gKENHRmxvYXQpMjUu
NDsKLSAgICAgICAgICAgIHJldHVybiBZRVM7Ci0gICAgICAgIGNhc2UgRE9NX0NTU19JTjoKLSAg
ICAgICAgICAgICp2YWwgPSA5NiAqIFtwcmltaXRpdmVWYWx1ZSBnZXRGbG9hdFZhbHVlOkRPTV9D
U1NfSU5dOwotICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBOTzsKLSAgICB9CisgICAgZmxvYXQgcmVzdWx0OworICAgIGJvb2wgaGF2
ZVJlc3VsdCA9IGZsb2F0VmFsdWVGcm9tUHJpbWl0aXZlVmFsdWUoKmNvcmUocHJpbWl0aXZlVmFs
dWUpLCByZXN1bHQpOworICAgIGlmIChoYXZlUmVzdWx0ICYmIHZhbCkKKyAgICAgICAgKnZhbCA9
IHJlc3VsdDsKKyAgICByZXR1cm4gaGF2ZVJlc3VsdDsKIH0KIAogLSAoQk9PTClfZ2V0Q29tcHV0
ZWRGbG9hdDooQ0dGbG9hdCAqKXZhbCBmb3JOb2RlOihET01Ob2RlICopbm9kZSBwcm9wZXJ0eToo
TlNTdHJpbmcgKilrZXkKIHsKLSAgICBCT09MIHJlc3VsdCA9IE5POwotICAgIEJPT0wgaW5oZXJp
dCA9IFlFUzsKLSAgICBDR0Zsb2F0IGZsb2F0VmFsID0gMDsKLSAgICBET01FbGVtZW50ICplbGVt
ZW50ID0gKERPTUVsZW1lbnQgKilub2RlOyAgICAKLSAgICBpZiAoZWxlbWVudCAmJiBbZWxlbWVu
dCBub2RlVHlwZV0gPT0gRE9NX0VMRU1FTlRfTk9ERSkgewotICAgICAgICBET01DU1NTdHlsZURl
Y2xhcmF0aW9uICpjb21wdXRlZFN0eWxlLCAqc3BlY2lmaWVkU3R5bGU7Ci0gICAgICAgIGluaGVy
aXQgPSBOTzsKLSAgICAgICAgaWYgKCFyZXN1bHQgJiYgKGNvbXB1dGVkU3R5bGUgPSBbc2VsZiBf
Y29tcHV0ZWRTdHlsZUZvckVsZW1lbnQ6ZWxlbWVudF0pKSB7Ci0gICAgICAgICAgICBET01DU1NQ
cmltaXRpdmVWYWx1ZSAqY29tcHV0ZWRWYWx1ZSA9IChET01DU1NQcmltaXRpdmVWYWx1ZSAqKVtj
b21wdXRlZFN0eWxlIGdldFByb3BlcnR5Q1NTVmFsdWU6a2V5XTsKLSAgICAgICAgICAgIGlmIChj
b21wdXRlZFZhbHVlICYmIFtjb21wdXRlZFZhbHVlIGNzc1ZhbHVlVHlwZV0gPT0gRE9NX0NTU19Q
UklNSVRJVkVfVkFMVUUpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gX2dldEZsb2F0KGNvbXB1
dGVkVmFsdWUsICZmbG9hdFZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZXN1bHQgJiYg
KHNwZWNpZmllZFN0eWxlID0gW3NlbGYgX3NwZWNpZmllZFN0eWxlRm9yRWxlbWVudDplbGVtZW50
XSkpIHsKLSAgICAgICAgICAgIERPTUNTU1ByaW1pdGl2ZVZhbHVlICpzcGVjaWZpZWRWYWx1ZSA9
IChET01DU1NQcmltaXRpdmVWYWx1ZSAqKVtzcGVjaWZpZWRTdHlsZSBnZXRQcm9wZXJ0eUNTU1Zh
bHVlOmtleV07Ci0gICAgICAgICAgICBpZiAoc3BlY2lmaWVkVmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZVR5cGUgPSBbc3BlY2lmaWVkVmFsdWUgY3NzVmFsdWVU
eXBlXTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWVUeXBlID09IERPTV9DU1NfUFJJTUlUSVZF
X1ZBTFVFKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfZ2V0RmxvYXQoc3BlY2lmaWVk
VmFsdWUsICZmbG9hdFZhbCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUeXBlID09
IERPTV9DU1NfSU5IRVJJVCkKLSAgICAgICAgICAgICAgICAgICAgaW5oZXJpdCA9IFlFUzsKKyAg
ICBib29sIGhhdmVSZXN1bHQgPSBmYWxzZTsKKyAgICBib29sIGluaGVyaXQgPSB0cnVlOworICAg
IGZsb2F0IGZsb2F0VmFsID0gMDsKKyAgICBOb2RlKiBjb3JlTm9kZSA9IGNvcmUobm9kZSk7Cisg
ICAgaWYgKGNvcmVOb2RlICYmIGNvcmVOb2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAg
RWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChjb3JlTm9kZSk7CisgICAgICAgIFN0cmluZyBw
cm9wZXJ0eU5hbWUgPSBrZXk7CisgICAgICAgIGluaGVyaXQgPSBmYWxzZTsKKyAgICAgICAgaWYg
KCFoYXZlUmVzdWx0KSB7CisgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9
IF9jYWNoZXMtPmNvbXB1dGVkU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVy
dHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgp
KQorICAgICAgICAgICAgICAgICAgICBoYXZlUmVzdWx0ID0gZmxvYXRWYWx1ZUZyb21QcmltaXRp
dmVWYWx1ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSksIGZsb2F0VmFsKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWhhdmVSZXN1bHQpIHsKKyAgICAgICAgICAg
IGlmIChSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gX2NhY2hlcy0+aW5saW5lU3R5bGVQcm9wZXJ0
eUZvckVsZW1lbnQoZWxlbWVudCwgcHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+aXNJbmhlcml0ZWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1
ZSgpKQorICAgICAgICAgICAgICAgICAgICBoYXZlUmVzdWx0ID0gZmxvYXRWYWx1ZUZyb21Qcmlt
aXRpdmVWYWx1ZSh0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSksIGZsb2F0VmFsKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBpZiAo
IWhhdmVSZXN1bHQpIHsKICAgICAgICAgICAgIGlmIChbQCJ0ZXh0LWluZGVudCIgaXNFcXVhbFRv
U3RyaW5nOmtleV0gfHwgW0AibGV0dGVyLXNwYWNpbmciIGlzRXF1YWxUb1N0cmluZzprZXldIHx8
IFtAIndvcmQtc3BhY2luZyIgaXNFcXVhbFRvU3RyaW5nOmtleV0KICAgICAgICAgICAgICAgICB8
fCBbQCJsaW5lLWhlaWdodCIgaXNFcXVhbFRvU3RyaW5nOmtleV0gfHwgW0Aid2lkb3dzIiBpc0Vx
dWFsVG9TdHJpbmc6a2V5XSB8fCBbQCJvcnBoYW5zIiBpc0VxdWFsVG9TdHJpbmc6a2V5XSkKLSAg
ICAgICAgICAgICAgICBpbmhlcml0ID0gWUVTOworICAgICAgICAgICAgICAgIGluaGVyaXQgPSB0
cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICghcmVzdWx0ICYmIGluaGVyaXQpIHsKKyAg
ICBpZiAoIWhhdmVSZXN1bHQgJiYgaW5oZXJpdCkgewogICAgICAgICBET01Ob2RlICpwYXJlbnRO
b2RlID0gW25vZGUgcGFyZW50Tm9kZV07CiAgICAgICAgIGlmIChwYXJlbnROb2RlKQotICAgICAg
ICAgICAgcmVzdWx0ID0gW3NlbGYgX2dldEZsb2F0OiZmbG9hdFZhbCBmb3JOb2RlOnBhcmVudE5v
ZGUgcHJvcGVydHk6a2V5XTsKKyAgICAgICAgICAgIHJldHVybiBbc2VsZiBfZ2V0RmxvYXQ6dmFs
IGZvck5vZGU6cGFyZW50Tm9kZSBwcm9wZXJ0eTprZXldOwogICAgIH0KLSAgICBpZiAocmVzdWx0
ICYmIHZhbCkKKyAgICBpZiAoaGF2ZVJlc3VsdCAmJiB2YWwpCiAgICAgICAgICp2YWwgPSBmbG9h
dFZhbDsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBoYXZlUmVzdWx0OwogfQogCiAt
IChCT09MKV9nZXRGbG9hdDooQ0dGbG9hdCAqKXZhbCBmb3JOb2RlOihET01Ob2RlICopbm9kZSBw
cm9wZXJ0eTooTlNTdHJpbmcgKilrZXkKQEAgLTk2OCw0MSArOTk2LDQzIEBAIC0gKERPTUVsZW1l
bnQgKilfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2QKIC0gKFBsYXRmb3JtQ29sb3IgKilfY29tcHV0
ZWRDb2xvckZvck5vZGU6KERPTU5vZGUgKilub2RlIHByb3BlcnR5OihOU1N0cmluZyAqKWtleQog
ewogICAgIFBsYXRmb3JtQ29sb3IgKnJlc3VsdCA9IG5pbDsKLSAgICBCT09MIGluaGVyaXQgPSBZ
RVM7Ci0gICAgQk9PTCBoYXZlUmVzdWx0ID0gTk87CisgICAgYm9vbCBpbmhlcml0ID0gdHJ1ZTsK
KyAgICBib29sIGhhdmVSZXN1bHQgPSBmYWxzZTsKICAgICBCT09MIGlzQ29sb3IgPSBbQCJjb2xv
ciIgaXNFcXVhbFRvU3RyaW5nOmtleV07CiAgICAgQk9PTCBpc0JhY2tncm91bmRDb2xvciA9IFtA
ImJhY2tncm91bmQtY29sb3IiIGlzRXF1YWxUb1N0cmluZzprZXldOwotICAgIERPTUVsZW1lbnQg
KmVsZW1lbnQgPSAoRE9NRWxlbWVudCAqKW5vZGU7ICAgIAotICAgIGlmIChlbGVtZW50ICYmIFtl
bGVtZW50IG5vZGVUeXBlXSA9PSBET01fRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgIERPTUNTU1N0
eWxlRGVjbGFyYXRpb24gKmNvbXB1dGVkU3R5bGUsICpzcGVjaWZpZWRTdHlsZTsKLSAgICAgICAg
aW5oZXJpdCA9IE5POwotICAgICAgICBpZiAoIWhhdmVSZXN1bHQgJiYgKGNvbXB1dGVkU3R5bGUg
PSBbc2VsZiBfY29tcHV0ZWRTdHlsZUZvckVsZW1lbnQ6ZWxlbWVudF0pKSB7Ci0gICAgICAgICAg
ICBET01DU1NQcmltaXRpdmVWYWx1ZSAqY29tcHV0ZWRWYWx1ZSA9IChET01DU1NQcmltaXRpdmVW
YWx1ZSAqKVtjb21wdXRlZFN0eWxlIGdldFByb3BlcnR5Q1NTVmFsdWU6a2V5XTsKLSAgICAgICAg
ICAgIGlmIChjb21wdXRlZFZhbHVlICYmIFtjb21wdXRlZFZhbHVlIGNzc1ZhbHVlVHlwZV0gPT0g
RE9NX0NTU19QUklNSVRJVkVfVkFMVUUgJiYgW2NvbXB1dGVkVmFsdWUgcHJpbWl0aXZlVHlwZV0g
PT0gRE9NX0NTU19SR0JDT0xPUikgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb2xvckZv
clJHQkNvbG9yKFtjb21wdXRlZFZhbHVlIGdldFJHQkNvbG9yVmFsdWVdLCBpc0NvbG9yKTsKLSAg
ICAgICAgICAgICAgICBoYXZlUmVzdWx0ID0gWUVTOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGlmICghaGF2ZVJlc3VsdCAmJiAoc3BlY2lmaWVkU3R5bGUgPSBbc2VsZiBfc3Bl
Y2lmaWVkU3R5bGVGb3JFbGVtZW50OmVsZW1lbnRdKSkgewotICAgICAgICAgICAgRE9NQ1NTUHJp
bWl0aXZlVmFsdWUgKnNwZWNpZmllZFZhbHVlID0gKERPTUNTU1ByaW1pdGl2ZVZhbHVlICopW3Nw
ZWNpZmllZFN0eWxlIGdldFByb3BlcnR5Q1NTVmFsdWU6a2V5XTsKLSAgICAgICAgICAgIGlmIChz
cGVjaWZpZWRWYWx1ZSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHZhbHVlVHlw
ZSA9IFtzcGVjaWZpZWRWYWx1ZSBjc3NWYWx1ZVR5cGVdOwotICAgICAgICAgICAgICAgIGlmICh2
YWx1ZVR5cGUgPT0gRE9NX0NTU19QUklNSVRJVkVfVkFMVUUgJiYgW3NwZWNpZmllZFZhbHVlIHBy
aW1pdGl2ZVR5cGVdID09IERPTV9DU1NfUkdCQ09MT1IpIHsKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gX2NvbG9yRm9yUkdCQ29sb3IoW3NwZWNpZmllZFZhbHVlIGdldFJHQkNvbG9yVmFs
dWVdLCBpc0NvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgaGF2ZVJlc3VsdCA9IFlFUzsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBET01fQ1NTX0lOSEVSSVQpCi0g
ICAgICAgICAgICAgICAgICAgIGluaGVyaXQgPSBZRVM7CisgICAgTm9kZSogY29yZU5vZGUgPSBj
b3JlKG5vZGUpOworICAgIGlmIChjb3JlTm9kZSAmJiBjb3JlTm9kZS0+aXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQoY29yZU5vZGUpOworICAg
ICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0ga2V5OworICAgICAgICBpbmhlcml0ID0gZmFsc2U7
CisgICAgICAgIGlmICghaGF2ZVJlc3VsdCkgeworICAgICAgICAgICAgaWYgKFJlZlB0cjxDU1NW
YWx1ZT4gdmFsdWUgPSBfY2FjaGVzLT5jb21wdXRlZFN0eWxlUHJvcGVydHlGb3JFbGVtZW50KGVs
ZW1lbnQsIHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSAmJiB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuaXNSR0JDb2xvcigp
KSB7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpSR0JDb2xvcj4gY29sb3Ig
PSB0b0NTU1ByaW1pdGl2ZVZhbHVlKCp2YWx1ZSkuZ2V0UkdCQ29sb3JWYWx1ZShBU1NFUlRfTk9f
RVhDRVBUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NvbG9yRm9yUkdCQ29s
b3Ioa2l0KGNvbG9yLmdldCgpKSwgaXNDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIGhhdmVS
ZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBpZiAoIWhhdmVSZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gX2NhY2hlcy0+aW5saW5lU3R5bGVQcm9wZXJ0eUZvckVsZW1lbnQoZWxl
bWVudCwgcHJvcGVydHlOYW1lKSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpICYmIHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5pc1JHQkNvbG9yKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlJHQkNvbG9yPiBjb2xvciA9
IHRvQ1NTUHJpbWl0aXZlVmFsdWUoKnZhbHVlKS5nZXRSR0JDb2xvclZhbHVlKEFTU0VSVF9OT19F
WENFUFRJT04pOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29sb3JGb3JSR0JDb2xv
cihraXQoY29sb3IuZ2V0KCkpLCBpc0NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgaGF2ZVJl
c3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+aXNJbmhlcml0
ZWRWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBpbmhlcml0ID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgaWYg
KChpc0NvbG9yICYmICFoYXZlUmVzdWx0KSB8fCAoaXNCYWNrZ3JvdW5kQ29sb3IgJiYgIVtzZWxm
IF9lbGVtZW50SGFzT3duQmFja2dyb3VuZENvbG9yOmVsZW1lbnRdKSkKLSAgICAgICAgICAgICAg
ICBpbmhlcml0ID0gWUVTOworICAgICAgICAgICAgaWYgKChpc0NvbG9yICYmICFoYXZlUmVzdWx0
KSB8fCAoaXNCYWNrZ3JvdW5kQ29sb3IgJiYgIVtzZWxmIF9lbGVtZW50SGFzT3duQmFja2dyb3Vu
ZENvbG9yOnN0YXRpY19jYXN0PERPTUVsZW1lbnQqPihub2RlKV0pKQorICAgICAgICAgICAgICAg
IGluaGVyaXQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghcmVzdWx0ICYmIGlu
aGVyaXQpIHsKICAgICAgICAgRE9NTm9kZSAqcGFyZW50Tm9kZSA9IFtub2RlIHBhcmVudE5vZGVd
OwogICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiAhKGlzQmFja2dyb3VuZENvbG9yICYmIFtwYXJl
bnROb2RlIG5vZGVUeXBlXSA9PSBET01fRUxFTUVOVF9OT0RFICYmIFtzZWxmIF9lbGVtZW50SGFz
T3duQmFja2dyb3VuZENvbG9yOihET01FbGVtZW50ICopcGFyZW50Tm9kZV0pKQotICAgICAgICAg
ICAgcmVzdWx0ID0gW3NlbGYgX2NvbG9yRm9yTm9kZTpwYXJlbnROb2RlIHByb3BlcnR5OmtleV07
CisgICAgICAgICAgICByZXR1cm4gW3NlbGYgX2NvbG9yRm9yTm9kZTpwYXJlbnROb2RlIHByb3Bl
cnR5OmtleV07CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMzkxLDYgKzI0MjEs
NyBAQCAtICh2b2lkKV9sb2FkRnJvbURPTVJhbmdlCiAKIC0gKHZvaWQpZGVhbGxvYwogeworICAg
IF9jYWNoZXMgPSBudWxscHRyOwogICAgIFtfYXR0clN0ciByZWxlYXNlXTsKICAgICBbX2RvY3Vt
ZW50QXR0cnMgcmVsZWFzZV07CiAgICAgW19kb21SYW5nZSByZWxlYXNlXTsKQEAgLTI0MDUsNyAr
MjQzNiw2IEBAIC0gKHZvaWQpZGVhbGxvYwogICAgIFtfdGV4dFRhYmxlUm93cyByZWxlYXNlXTsK
ICAgICBbX3RleHRUYWJsZVJvd0FycmF5cyByZWxlYXNlXTsKICAgICBbX3RleHRUYWJsZVJvd0Jh
Y2tncm91bmRDb2xvcnMgcmVsZWFzZV07Ci0gICAgW19jb21wdXRlZFN0eWxlc0ZvckVsZW1lbnRz
IHJlbGVhc2VdOwogICAgIFtfc3BlY2lmaWVkU3R5bGVzRm9yRWxlbWVudHMgcmVsZWFzZV07CiAg
ICAgW19zdHJpbmdzRm9yTm9kZXMgcmVsZWFzZV07CiAgICAgW19mbG9hdHNGb3JOb2RlcyByZWxl
YXNlXTsKQEAgLTI0MzUsNyArMjQ2NSw2IEBAIC0gKGlkKWluaXQKICAgICBfdGV4dFRhYmxlUm93
cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAgIF90ZXh0VGFibGVSb3dBcnJh
eXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKICAgICBfdGV4dFRhYmxlUm93QmFj
a2dyb3VuZENvbG9ycyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIF9jb21w
dXRlZFN0eWxlc0ZvckVsZW1lbnRzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0
XTsKICAgICBfc3BlY2lmaWVkU3R5bGVzRm9yRWxlbWVudHMgPSBbW05TTXV0YWJsZURpY3Rpb25h
cnkgYWxsb2NdIGluaXRdOwogICAgIF9zdHJpbmdzRm9yTm9kZXMgPSBbW05TTXV0YWJsZURpY3Rp
b25hcnkgYWxsb2NdIGluaXRdOwogICAgIF9mbG9hdHNGb3JOb2RlcyA9IFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdF07CkBAIC0yNDUzLDYgKzI0ODIsOCBAQCAtIChpZClpbml0CiAg
ICAgX2Vycm9yQ29kZSA9IC0xOwogICAgIF9pbmRleGluZ0xpbWl0ID0gMDsKICAgICBfdGh1bWJu
YWlsTGltaXQgPSAwOworICAgIAorICAgIF9jYWNoZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEhUTUxD
b252ZXJ0ZXJDYWNoZXM+KCk7CiAKICAgICBfZmxhZ3MuaXNJbmRleGluZyA9IChfaW5kZXhpbmdM
aW1pdCA+IDApOwogICAgIF9mbGFncy5pc1Rlc3RpbmcgPSAwOwo=
</data>
<flag name="review"
          id="250901"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>226657</attachid>
            <date>2014-03-13 23:47:38 -0700</date>
            <delta_ts>2014-03-13 23:47:38 -0700</delta_ts>
            <desc>A/B test result</desc>
            <filename>as-cpp1-test.html</filename>
            <type>text/html</type>
            <size>23136</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPldlYktpdCBQZXJmb3JtYW5jZSBU
ZXN0IFJlc3VsdHM8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKc2VjdGlvbiB7CiAg
ICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVs
YXRpdmU7Cn0KCi50aW1lLXBsb3RzIHsKICAgIHBhZGRpbmctbGVmdDogMjVweDsKfQoKLnRpbWUt
cGxvdHMgPiBkaXYgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDkwcHg7
CiAgICBoZWlnaHQ6IDQwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cn0KCnNlY3Rpb24gaDEg
ewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxZW07Cn0KCnNlY3Rpb24g
LnRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVy
OwogICAgYmFja2dyb3VuZDogI2ZmY2M2NjsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIHBh
ZGRpbmc6IDBweCA1cHg7Cn0KCmJvZHkgewogICAgcGFkZGluZzogMHB4OwogICAgbWFyZ2luOiAw
cHg7CiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKfQoKdGFibGUgewogICAgYmFja2dyb3Vu
ZDogd2hpdGU7CiAgICB3aWR0aDogMTAwJTsKfQoKdGFibGUsIHRkLCB0aCB7CiAgICBib3JkZXIt
Y29sbGFwc2U6IGNvbGxhcHNlOwogICAgcGFkZGluZzogNXB4Owp9Cgp0ci5ldmVuIHsKICAgIGJh
Y2tncm91bmQ6ICNmNmY2ZjY7Cn0KCnRhYmxlIHRkIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
ICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cn0KCnRoLCB0ZCB7CiAgICBjdXJzb3I6IHBvaW50
ZXI7CiAgICBjdXJzb3I6IGhhbmQ7Cn0KCnRoIHsKICAgIGJhY2tncm91bmQ6ICNlNmVlZWU7CiAg
ICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90
dG9tLCBmcm9tKHJnYigyNDQsIDI0NCwgMjQ0KSksIHRvKHJnYigyMTcsIDIxNywgMjE3KSkpOwog
ICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKfQoKdGg6YWZ0ZXIgewogICAgY29udGVudDogJyBc
MjVCOCc7Cn0KCnRoLmhlYWRlclNvcnRVcDphZnRlciB7CiAgICBjb250ZW50OiAnIFwyNUJFJzsK
fQoKdGguaGVhZGVyU29ydERvd246YWZ0ZXIgewogICAgY29udGVudDogJyBcMjVCNCc7Cn0KCnRk
LmNvbXBhcmlzb24sIHRkLnJlc3VsdCB7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKdGQuYmV0
dGVyIHsKICAgIGNvbG9yOiAjNmM2Owp9Cgp0ZC53b3JzZSB7CiAgICBjb2xvcjogI2M2NjsKfQoK
dGQubWlzc2luZyB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5jaGVja2JveCB7CiAgICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiAjZWVlOwogICAgYmFja2dyb3Vu
ZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgZnJvbShy
Z2IoMjIwLCAyMjAsIDIyMCkpLCB0byhyZ2IoMjAwLCAyMDAsIDIwMCkpKTsKICAgIGJvcmRlcjog
aW5zZXQgMXB4ICNkZGQ7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBtYXJnaW46IDEwcHg7
CiAgICBmb250LXNpemU6IHNtYWxsOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY3Vyc29yOiBo
YW5kOwogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgIGZvbnQtd2VpZ2h0OiBib2xk
Owp9CgouY2hlY2tib3ggc3BhbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5l
LWhlaWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICBib3JkZXI6IG91dHNldCAx
cHggdHJhbnNwYXJlbnQ7Cn0KCi5jaGVja2JveCAuY2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kOiAj
ZTZlZWVlOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9w
LCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMjU1LCAyNTUsIDI1NSkpLCB0byhyZ2IoMjM1LCAyMzUs
IDIzNSkpKTsKICAgIGJvcmRlcjogb3V0c2V0IDFweCAjZWVlOwogICAgYm9yZGVyLXJhZGl1czog
NXB4Owp9Cgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IHN0eWxlPSJwYWRkaW5nOiAwIDEw
cHg7Ij4KUmVzdWx0IDxzcGFuIGlkPSJ0aW1lLW1lbW9yeSIgY2xhc3M9ImNoZWNrYm94Ij48c3Bh
biBjbGFzcz0iY2hlY2tlZCI+VGltZTwvc3Bhbj48c3Bhbj5NZW1vcnk8L3NwYW4+PC9zcGFuPgpS
ZWZlcmVuY2UgPHNwYW4gaWQ9InJlZmVyZW5jZSIgY2xhc3M9ImNoZWNrYm94Ij48L3NwYW4+Cjwv
ZGl2Pgo8dGFibGUgaWQ9ImNvbnRhaW5lciI+PC90YWJsZT4KPHNjcmlwdD4KCihmdW5jdGlvbiAo
KSB7CiAgICB2YXIgalF1ZXJ5ID0gJ1BlcmZvcm1hbmNlVGVzdHMvRHJvbWFlby9yZXNvdXJjZXMv
ZHJvbWFlby93ZWIvbGliL2pxdWVyeS0xLjYuNC5qcyc7CiAgICB2YXIgcGx1Z2lucyA9IFsnUGVy
Zm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LmZsb3QubWluLmpzJywgJ1BlcmZvcm1hbmNl
VGVzdHMvcmVzb3VyY2VzL2pxdWVyeS50YWJsZXNvcnRlci5taW4uanMnLAogICAgICAgICdQZXJm
b3JtYW5jZVRlc3RzL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzJ107CiAgICB2YXIgbG9jYWxQYXRo
ID0gJy9Wb2x1bWVzL0RhdGEvd2Via2l0Myc7CiAgICB2YXIgcmVtb3RlUGF0aCA9ICdodHRwczov
L3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0L3RydW5rJzsKICAgIHZhciBudW1iZXJP
ZkZhaWx1cmVzID0gMDsKICAgIHZhciBzdGFydGVkTG9hZGluZ1BsdWdpbnMgPSBmYWxzZTsKICAg
IHZhciBudW1iZXJPZkxvYWRlZFBsdWdpbnMgPSAwOwoKICAgIGZ1bmN0aW9uIGxvYWRTY3JpcHQo
c3JjLCBsb2FkZWQsIGZhaWxlZCkgewogICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlOwogICAgICAg
IHNjcmlwdC5zcmMgPSBzcmM7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGxvYWRlZDsKICAgICAg
ICBpZiAoZmFpbGVkKQogICAgICAgICAgICBzY3JpcHQub25lcnJvciA9IGZhaWxlZDsKICAgICAg
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICB9CgogICAgZnVuY3Rpb24g
bG9hZFBsdWdpbnModHJ1bmtQYXRoKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVn
aW5zLmxlbmd0aDsgaSsrKQogICAgICAgICAgICBsb2FkU2NyaXB0KHRydW5rUGF0aCArICcvJyAr
IHBsdWdpbnNbaV0sIGxvYWRlZFBsdWdpbiwgY3JlYXRlRmFpbGVkVG9Mb2FkUGx1Z2luKHBsdWdp
bnNbaV0pKTsKICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkZWRQbHVnaW4oKSB7CiAgICAgICAgbnVt
YmVyT2ZMb2FkZWRQbHVnaW5zKys7CiAgICAgICAgaWYgKG51bWJlck9mTG9hZGVkUGx1Z2lucyA9
PSBwbHVnaW5zLmxlbmd0aCkKICAgICAgICAgICAgc2V0VGltZW91dChpbml0LCAwKTsgICAgICAg
ICAgICAKICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVGYWlsZWRUb0xvYWRQbHVnaW4ocGx1Z2lu
KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgYWxlcnQoIkZhaWxlZCB0byBsb2FkICIg
KyBwbHVnaW4pOyB9CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlTG9hZGVkSlF1ZXJ5KHRydW5r
UGF0aCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGxvYWRQbHVnaW5zKHRydW5rUGF0
aCk7IH0KICAgIH0KCiAgICBsb2FkU2NyaXB0KGxvY2FsUGF0aCArICcvJyArIGpRdWVyeSwKICAg
ICAgICBjcmVhdGVMb2FkZWRKUXVlcnkobG9jYWxQYXRoKSwKICAgICAgICBmdW5jdGlvbiAoKSB7
CiAgICAgICAgICAgIGxvYWRTY3JpcHQocmVtb3RlUGF0aCArICcvJyArIGpRdWVyeSwKICAgICAg
ICAgICAgICAgIGNyZWF0ZUxvYWRlZEpRdWVyeShyZW1vdGVQYXRoKSwKICAgICAgICAgICAgICAg
IGZ1bmN0aW9uICgpIHsgYWxlcnQoIkZhaWxlZCB0byBsb2FkIGpRdWVyeS4iKTsgfSk7CiAgICAg
ICAgfSk7Cn0pKCk7CgpmdW5jdGlvbiBUZXN0UmVzdWx0KG1ldHJpYywgdmFsdWVzLCBhc3NvY2lh
dGVkUnVuKSB7CiAgICBpZiAodmFsdWVzWzBdIGluc3RhbmNlb2YgQXJyYXkpIHsKICAgICAgICB2
YXIgZmxhdHRlbmVkVmFsdWVzID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1
ZXMubGVuZ3RoOyBpKyspCiAgICAgICAgICAgIGZsYXR0ZW5lZFZhbHVlcyA9IGZsYXR0ZW5lZFZh
bHVlcy5jb25jYXQodmFsdWVzW2ldKTsKICAgICAgICB2YWx1ZXMgPSBmbGF0dGVuZWRWYWx1ZXM7
CiAgICB9CgogICAgdGhpcy50ZXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWV0cmljOyB9CiAg
ICB0aGlzLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24g
KHZhbHVlKSB7IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogdmFsdWU7IH0pOyB9CiAg
ICB0aGlzLnVuc2NhbGVkTWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFN0YXRpc3RpY3Muc3Vt
KHZhbHVlcykgLyB2YWx1ZXMubGVuZ3RoOyB9CiAgICB0aGlzLm1lYW4gPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogdGhpcy51bnNjYWxlZE1lYW4oKTsgfQog
ICAgdGhpcy5taW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3Rvcigp
ICogU3RhdGlzdGljcy5taW4odmFsdWVzKTsgfQogICAgdGhpcy5tYXggPSBmdW5jdGlvbiAoKSB7
IHJldHVybiBtZXRyaWMuc2NhbGluZ0ZhY3RvcigpICogU3RhdGlzdGljcy5tYXgodmFsdWVzKTsg
fQogICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YSA9IGZ1bmN0aW9uICgpIHsKICAgICAg
ICByZXR1cm4gbWV0cmljLnNjYWxpbmdGYWN0b3IoKSAqIFN0YXRpc3RpY3MuY29uZmlkZW5jZUlu
dGVydmFsRGVsdGEoMC45NSwgdmFsdWVzLmxlbmd0aCwKICAgICAgICAgICAgU3RhdGlzdGljcy5z
dW0odmFsdWVzKSwgU3RhdGlzdGljcy5zcXVhcmVTdW0odmFsdWVzKSk7CiAgICB9CiAgICB0aGlz
LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhUmF0aW8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlz
LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKCkgLyB0aGlzLm1lYW4oKTsgfQogICAgdGhpcy5wZXJj
ZW50RGlmZmVyZW5jZSA9IGZ1bmN0aW9uKG90aGVyKSB7IHJldHVybiAob3RoZXIudW5zY2FsZWRN
ZWFuKCkgLSB0aGlzLnVuc2NhbGVkTWVhbigpKSAvIHRoaXMudW5zY2FsZWRNZWFuKCk7IH0KICAg
IHRoaXMuaXNTdGF0aXN0aWNhbGx5U2lnbmlmaWNhbnQgPSBmdW5jdGlvbiAob3RoZXIpIHsKICAg
ICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKG90aGVyLm1lYW4oKSAtIHRoaXMubWVhbigpKTsKICAg
ICAgICByZXR1cm4gZGlmZiA+IHRoaXMuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKSAmJiBkaWZm
ID4gb3RoZXIuY29uZmlkZW5jZUludGVydmFsRGVsdGEoKTsKICAgIH0KICAgIHRoaXMucnVuID0g
ZnVuY3Rpb24gKCkgeyByZXR1cm4gYXNzb2NpYXRlZFJ1bjsgfQp9CgpmdW5jdGlvbiBUZXN0UnVu
KGVudHJ5KSB7CiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gZW50
cnlbJ2Rlc2NyaXB0aW9uJ107IH0KICAgIHRoaXMud2Via2l0UmV2aXNpb24gPSBmdW5jdGlvbiAo
KSB7IHJldHVybiBlbnRyeVsncmV2aXNpb25zJ11bJ1dlYktpdCddWydyZXZpc2lvbiddOyB9CiAg
ICB0aGlzLmxhYmVsID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBsYWJlbCA9ICdyJyArIHRo
aXMud2Via2l0UmV2aXNpb24oKTsKICAgICAgICBpZiAodGhpcy5kZXNjcmlwdGlvbigpKQogICAg
ICAgICAgICBsYWJlbCArPSAnICZkYXNoOyAnICsgdGhpcy5kZXNjcmlwdGlvbigpOwogICAgICAg
IHJldHVybiBsYWJlbDsKICAgIH0KfQoKZnVuY3Rpb24gUGVyZlRlc3RNZXRyaWMobmFtZSwgbWV0
cmljKSB7CiAgICB2YXIgdGVzdFJlc3VsdHMgPSBbXTsKICAgIHZhciBjYWNoZWRVbml0ID0gbnVs
bDsKICAgIHZhciBjYWNoZWRTY2FsaW5nRmFjdG9yID0gbnVsbDsKICAgIHZhciB1bml0ID0geydG
cmFtZVJhdGUnOiAnZnBzJywgJ1J1bnMnOiAncnVucy9zJywgJ1RpbWUnOiAnbXMnLCAnTWFsbG9j
JzogJ2J5dGVzJywgJ0pTSGVhcCc6ICdieXRlcyd9W21ldHJpY107CgogICAgLy8gV2UgY2FuJ3Qg
ZG8gdGhpcyBpbiBUZXN0UmVzdWx0IGJlY2F1c2UgYWxsIHJlc3VsdHMgZm9yIGVhY2ggdGVzdCBu
ZWVkIHRvIHNoYXJlIHRoZSBzYW1lIHVuaXQgYW5kIHRoZSBzYW1lIHNjYWxpbmcgZmFjdG9yLgog
ICAgZnVuY3Rpb24gY29tcHV0ZVNjYWxpbmdGYWN0b3JJZk5lZWRlZCgpIHsKICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkbid0IGJlIGFkanVzdGluZyB1bml0cyBvbiBldmVyeSB0ZXN0IHJlc3Vs
dC4KICAgICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIG9uIHRoZSBmaXJzdCB0ZXN0LgogICAg
ICAgIGlmICghdGVzdFJlc3VsdHMubGVuZ3RoIHx8IGNhY2hlZFVuaXQpCiAgICAgICAgICAgIHJl
dHVybjsKCiAgICAgICAgdmFyIG1lYW4gPSB0ZXN0UmVzdWx0c1swXS51bnNjYWxlZE1lYW4oKTsg
Ly8gRklYTUU6IFdlIHNob3VsZCBsb29rIGF0IGFsbCB2YWx1ZXMuCiAgICAgICAgdmFyIGtpbG8g
PSB1bml0ID09ICdieXRlcycgPyAxMDI0IDogMTAwMDsKICAgICAgICBpZiAobWVhbiA+IDEwICog
a2lsbyAqIGtpbG8gJiYgdW5pdCAhPSAnbXMnKSB7CiAgICAgICAgICAgIGNhY2hlZFNjYWxpbmdG
YWN0b3IgPSAxIC8ga2lsbyAvIGtpbG87CiAgICAgICAgICAgIGNhY2hlZFVuaXQgPSAnTSAnICsg
dW5pdDsKICAgICAgICB9IGVsc2UgaWYgKG1lYW4gPiAxMCAqIGtpbG8pIHsKICAgICAgICAgICAg
Y2FjaGVkU2NhbGluZ0ZhY3RvciA9IDEgLyBraWxvOwogICAgICAgICAgICBjYWNoZWRVbml0ID0g
dW5pdCA9PSAnbXMnID8gJ3MnIDogKCdLICcgKyB1bml0KTsKICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICBjYWNoZWRTY2FsaW5nRmFjdG9yID0gMTsKICAgICAgICAgICAgY2FjaGVkVW5pdCA9
IHVuaXQ7CiAgICAgICAgfQogICAgfQoKICAgIHRoaXMubmFtZSA9IGZ1bmN0aW9uICgpIHsgcmV0
dXJuIG5hbWUgKyAnOicgKyBtZXRyaWM7IH0KICAgIHRoaXMuaXNNZW1vcnlUZXN0ID0gZnVuY3Rp
b24gKCkgeyByZXR1cm4gbWV0cmljID09ICdKU0hlYXAnIHx8IG1ldHJpYyA9PSAnTWFsbG9jJzsg
fQogICAgdGhpcy5hZGRSZXN1bHQgPSBmdW5jdGlvbiAobmV3UmVzdWx0KSB7CiAgICAgICAgdGVz
dFJlc3VsdHMucHVzaChuZXdSZXN1bHQpOwogICAgICAgIGNhY2hlZFVuaXQgPSBudWxsOwogICAg
ICAgIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSBudWxsOwogICAgfQogICAgdGhpcy5yZXN1bHRzID0g
ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGVzdFJlc3VsdHM7IH0KICAgIHRoaXMuc2NhbGluZ0ZhY3Rv
ciA9IGZ1bmN0aW9uKCkgewogICAgICAgIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKTsK
ICAgICAgICByZXR1cm4gY2FjaGVkU2NhbGluZ0ZhY3RvcjsKICAgIH0KICAgIHRoaXMudW5pdCA9
IGZ1bmN0aW9uICgpIHsKICAgICAgICBjb21wdXRlU2NhbGluZ0ZhY3RvcklmTmVlZGVkKCk7CiAg
ICAgICAgcmV0dXJuIGNhY2hlZFVuaXQ7CiAgICB9CiAgICB0aGlzLnNtYWxsZXJJc0JldHRlciA9
IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVuaXQgPT0gJ21zJyB8fCB1bml0ID09ICdieXRlcyc7IH0K
fQoKdmFyIHBsb3RDb2xvciA9ICdyZ2IoMjMwLDUwLDUwKSc7CnZhciBzdWJwb2ludHNQbG90T3B0
aW9ucyA9IHsKICAgIGxpbmVzOiB7c2hvdzp0cnVlLCBsaW5lV2lkdGg6IDB9LAogICAgY29sb3I6
IHBsb3RDb2xvciwKICAgIHBvaW50czoge3Nob3c6IHRydWUsIHJhZGl1czogMX0sCiAgICBiYXJz
OiB7c2hvdzogZmFsc2V9fTsKCnZhciBtYWluUGxvdE9wdGlvbnMgPSB7CiAgICB4YXhpczogewog
ICAgICAgIG1pbjogLTAuNSwKICAgICAgICB0aWNrU2l6ZTogMSwKICAgIH0sCiAgICBjcm9zc2hh
aXI6IHsgbW9kZTogJ3knIH0sCiAgICBzZXJpZXM6IHsgc2hhZG93U2l6ZTogMCB9LAogICAgYmFy
czoge3Nob3c6IHRydWUsIGFsaWduOiAnY2VudGVyJywgYmFyV2lkdGg6IDAuNX0sCiAgICBsaW5l
czogeyBzaG93OiBmYWxzZSB9LAogICAgcG9pbnRzOiB7IHNob3c6IHRydWUgfSwKICAgIGdyaWQ6
IHsKICAgICAgICBib3JkZXJXaWR0aDogMSwKICAgICAgICBib3JkZXJDb2xvcjogJyNjY2MnLAog
ICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLAogICAgICAgIGhvdmVyYWJsZTogdHJ1ZSwK
ICAgICAgICBhdXRvSGlnaGxpZ2h0OiBmYWxzZSwKICAgIH0KfTsKCnZhciB0aW1lUGxvdE9wdGlv
bnMgPSB7CiAgICB5YXhpczogeyBzaG93OiBmYWxzZSB9LAogICAgeGF4aXM6IHsgc2hvdzogZmFs
c2UgfSwKICAgIGxpbmVzOiB7IHNob3c6IHRydWUgfSwKICAgIGdyaWQ6IHsgYm9yZGVyV2lkdGg6
IDEsIGJvcmRlckNvbG9yOiAnI2NjYycgfSwKICAgIGNvbG9yczogWyBwbG90Q29sb3IgXQp9OwoK
ZnVuY3Rpb24gY3JlYXRlUGxvdChjb250YWluZXIsIHRlc3QpIHsKICAgIHZhciBzZWN0aW9uID0g
JCgnPHNlY3Rpb24+PGRpdiBjbGFzcz0icGxvdCI+PC9kaXY+PGRpdiBjbGFzcz0idGltZS1wbG90
cyI+PC9kaXY+JwogICAgICAgICsgJzxzcGFuIGNsYXNzPSJ0b29sdGlwIj48L3NwYW4+PC9zZWN0
aW9uPicpOwogICAgc2VjdGlvbi5jaGlsZHJlbignLnBsb3QnKS5jc3Moeyd3aWR0aCc6ICgxMDAg
KiB0ZXN0LnJlc3VsdHMoKS5sZW5ndGggKyAyNSkgKyAncHgnLCAnaGVpZ2h0JzogJzMwMHB4J30p
OwogICAgJChjb250YWluZXIpLmFwcGVuZChzZWN0aW9uKTsKCiAgICB2YXIgcGxvdENvbnRhaW5l
ciA9IHNlY3Rpb24uY2hpbGRyZW4oJy5wbG90Jyk7CiAgICB2YXIgbWluSXNaZXJvID0gdHJ1ZTsK
ICAgIGF0dGFjaFBsb3QodGVzdCwgcGxvdENvbnRhaW5lciwgbWluSXNaZXJvKTsKCiAgICBhdHRh
Y2hUaW1lUGxvdHModGVzdCwgc2VjdGlvbi5jaGlsZHJlbignLnRpbWUtcGxvdHMnKSk7CgogICAg
dmFyIHRvb2x0aXAgPSBzZWN0aW9uLmNoaWxkcmVuKCcudG9vbHRpcCcpOwogICAgcGxvdENvbnRh
aW5lci5iaW5kKCdwbG90aG92ZXInLCBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCBpdGVtKSB7
CiAgICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgICAgdmFyIHBvc3RmaXggPSBpdGVtLnNlcmll
cy5pZCA/ICcgKCcgKyBpdGVtLnNlcmllcy5pZCArICcpJyA6ICcnOwogICAgICAgICAgICB0b29s
dGlwLmh0bWwoaXRlbS5kYXRhcG9pbnRbMV0udG9QcmVjaXNpb24oNCkgKyBwb3N0Zml4KTsKICAg
ICAgICAgICAgdmFyIHNlY3Rpb25PZmZzZXQgPSAkKHNlY3Rpb24pLm9mZnNldCgpOwogICAgICAg
ICAgICB0b29sdGlwLmNzcyh7bGVmdDogaXRlbS5wYWdlWCAtIHNlY3Rpb25PZmZzZXQubGVmdCAt
IHRvb2x0aXAub3V0ZXJXaWR0aCgpIC8gMiwgdG9wOiBpdGVtLnBhZ2VZIC0gc2VjdGlvbk9mZnNl
dC50b3AgKyAxMH0pOwogICAgICAgICAgICB0b29sdGlwLmZhZGVJbigyMDApOwogICAgICAgIH0g
ZWxzZQogICAgICAgICAgICB0b29sdGlwLmhpZGUoKTsKICAgIH0pOwogICAgcGxvdENvbnRhaW5l
ci5tb3VzZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgdG9vbHRpcC5oaWRlKCk7CiAgICB9KTsK
ICAgIHBsb3RDb250YWluZXIuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKICAgICAgICBtaW5Jc1plcm8gPSAhbWluSXNaZXJvOwogICAgICAg
IGF0dGFjaFBsb3QodGVzdCwgcGxvdENvbnRhaW5lciwgbWluSXNaZXJvKTsKICAgIH0pOwoKICAg
IHJldHVybiBzZWN0aW9uOwp9CgpmdW5jdGlvbiBhdHRhY2hUaW1lUGxvdHModGVzdCwgY29udGFp
bmVyKSB7CiAgICB2YXIgcmVzdWx0cyA9IHRlc3QucmVzdWx0cygpOwogICAgdmFyIGF0dGFjaGVk
UGxvdCA9IGZhbHNlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsr
KSB7CiAgICAgICAgY29udGFpbmVyLmFwcGVuZCgnPGRpdj48L2Rpdj4nKTsKICAgICAgICB2YXIg
dmFsdWVzID0gcmVzdWx0c1tpXS52YWx1ZXMoKTsKICAgICAgICBpZiAoIXZhbHVlcykKICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgYXR0YWNoZWRQbG90ID0gdHJ1ZTsKCiAgICAgICAgJC5w
bG90KGNvbnRhaW5lci5jaGlsZHJlbigpLmxhc3QoKSwgW3ZhbHVlcy5tYXAoZnVuY3Rpb24gKHZh
bHVlLCBpbmRleCkgeyByZXR1cm4gW2luZGV4LCB2YWx1ZV07IH0pXSwKICAgICAgICAgICAgJC5l
eHRlbmQodHJ1ZSwge30sIHRpbWVQbG90T3B0aW9ucywge3lheGlzOiB7bWluOiBNYXRoLm1pbi5h
cHBseShNYXRoLCB2YWx1ZXMpICogMC45LCBtYXg6IE1hdGgubWF4LmFwcGx5KE1hdGgsIHZhbHVl
cykgKiAxLjF9LAogICAgICAgICAgICAgICAgeGF4aXM6IHttaW46IC0wLjUsIG1heDogdmFsdWVz
Lmxlbmd0aCAtIDAuNX19KSk7CiAgICB9CiAgICBpZiAoIWF0dGFjaGVkUGxvdCkKICAgICAgICBj
b250YWluZXIuY2hpbGRyZW4oKS5yZW1vdmUoKTsKfQoKZnVuY3Rpb24gYXR0YWNoUGxvdCh0ZXN0
LCBwbG90Q29udGFpbmVyLCBtaW5Jc1plcm8pIHsKICAgIHZhciByZXN1bHRzID0gdGVzdC5yZXN1
bHRzKCk7CgogICAgdmFyIHZhbHVlcyA9IHJlc3VsdHMucmVkdWNlKGZ1bmN0aW9uICh2YWx1ZXMs
IHJlc3VsdCwgaW5kZXgpIHsKICAgICAgICB2YXIgbmV3VmFsdWVzID0gcmVzdWx0LnZhbHVlcygp
OwogICAgICAgIHJldHVybiBuZXdWYWx1ZXMgPyB2YWx1ZXMuY29uY2F0KG5ld1ZhbHVlcy5tYXAo
ZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBbaW5kZXgsIHZhbHVlXTsgfSkpIDogdmFsdWVzOwog
ICAgfSwgW10pOwoKICAgIHZhciBwbG90RGF0YSA9IFskLmV4dGVuZCh0cnVlLCB7fSwgc3VicG9p
bnRzUGxvdE9wdGlvbnMsIHtkYXRhOiB2YWx1ZXN9KV07CiAgICBwbG90RGF0YS5wdXNoKHtpZDog
JyZtdTsnLCBkYXRhOiByZXN1bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1
cm4gW2luZGV4LCByZXN1bHQubWVhbigpXTsgfSksIGNvbG9yOiBwbG90Q29sb3J9KTsKCiAgICB2
YXIgb3ZlcmFsbE1heCA9IFN0YXRpc3RpY3MubWF4KHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1
bHQsIGluZGV4KSB7IHJldHVybiByZXN1bHQubWF4KCk7IH0pKTsKICAgIHZhciBvdmVyYWxsTWlu
ID0gU3RhdGlzdGljcy5taW4ocmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsg
cmV0dXJuIHJlc3VsdC5taW4oKTsgfSkpOwogICAgdmFyIG1hcmdpbiA9IChvdmVyYWxsTWF4IC0g
b3ZlcmFsbE1pbikgKiAwLjE7CiAgICB2YXIgY3VycmVudFBsb3RPcHRpb25zID0gJC5leHRlbmQo
dHJ1ZSwge30sIG1haW5QbG90T3B0aW9ucywge3lheGlzOiB7CiAgICAgICAgbWluOiBtaW5Jc1pl
cm8gPyAwIDogb3ZlcmFsbE1pbiAtIG1hcmdpbiwKICAgICAgICBtYXg6IG1pbklzWmVybyA/IG92
ZXJhbGxNYXggKiAxLjEgOiBvdmVyYWxsTWF4ICsgbWFyZ2lufX0pOwoKICAgIGN1cnJlbnRQbG90
T3B0aW9ucy54YXhpcy5tYXggPSByZXN1bHRzLmxlbmd0aCAtIDAuNTsKICAgIGN1cnJlbnRQbG90
T3B0aW9ucy54YXhpcy50aWNrcyA9IHJlc3VsdHMubWFwKGZ1bmN0aW9uIChyZXN1bHQsIGluZGV4
KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5ydW4oKS5sYWJlbCgpXTsgfSk7CgogICAgJC5wbG90
KHBsb3RDb250YWluZXIsIHBsb3REYXRhLCBjdXJyZW50UGxvdE9wdGlvbnMpOwp9CgpmdW5jdGlv
biB0b0ZpeGVkV2lkdGhQcmVjaXNpb24odmFsdWUpIHsKICAgIHZhciBkZWNpbWFsID0gdmFsdWUu
dG9GaXhlZCgyKTsKICAgIHJldHVybiBkZWNpbWFsOwp9CgpmdW5jdGlvbiBmb3JtYXRQZXJjZW50
YWdlKGZyYWN0aW9uKSB7CiAgICB2YXIgcGVyY2VudGFnZSA9IGZyYWN0aW9uICogMTAwOwogICAg
cmV0dXJuIChmcmFjdGlvbiAqIDEwMCkudG9GaXhlZCgyKSArICclJzsKfQoKZnVuY3Rpb24gY3Jl
YXRlVGFibGUodGVzdHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgp
IHsKICAgICQoJyNjb250YWluZXInKS5odG1sKCc8dGhlYWQ+PHRyPjx0aD5UZXN0PC90aD48dGg+
VW5pdDwvdGg+JyArIHJ1bnMubWFwKGZ1bmN0aW9uIChydW4sIGluZGV4KSB7CiAgICAgICAgcmV0
dXJuICc8dGggY29sc3Bhbj0iJyArIChpbmRleCA9PSByZWZlcmVuY2VJbmRleCA/IDIgOiAzKSAr
ICciIGNsYXNzPSJ7c29ydGVyOiBcJ2NvbXBhcmlzb25cJ30iPicgKyBydW4ubGFiZWwoKSArICc8
L3RoPic7CiAgICB9KS5yZWR1Y2UoZnVuY3Rpb24gKG1hcmt1cCwgY2VsbCkgeyByZXR1cm4gbWFy
a3VwICsgY2VsbDsgfSwgJycpICsgJzwvdHI+PC9oZWFkPjx0Ym9keT48L3Rib2R5PicpOwoKICAg
IHZhciB0ZXN0TmFtZXMgPSBbXTsKICAgIGZvciAodGVzdE5hbWUgaW4gdGVzdHMpCiAgICAgICAg
dGVzdE5hbWVzLnB1c2godGVzdE5hbWUpOwoKICAgIHRlc3ROYW1lcy5zb3J0KCkubWFwKGZ1bmN0
aW9uICh0ZXN0TmFtZSkgewogICAgICAgIHZhciB0ZXN0ID0gdGVzdHNbdGVzdE5hbWVdOwogICAg
ICAgIGlmICh0ZXN0LmlzTWVtb3J5VGVzdCgpICE9IHNob3VsZElnbm9yZU1lbW9yeSkKICAgICAg
ICAgICAgY3JlYXRlVGFibGVSb3cocnVucywgdGVzdCwgcmVmZXJlbmNlSW5kZXgpOwogICAgfSk7
CgogICAgJCgnI2NvbnRhaW5lcicpLnRhYmxlc29ydGVyKHt3aWRnZXRzOiBbJ3plYnJhJ119KTsK
fQoKZnVuY3Rpb24gbGluZWFyUmVncmVzc2lvbihwb2ludHMpIHsKICAgIC8vIEltcGxlbWVudCBo
dHRwOi8vd3d3LmVhc3ljYWxjdWxhdGlvbi5jb20vc3RhdGlzdGljcy9sZWFybi1jb3JyZWxhdGlv
bi5waHAuCiAgICAvLyB4ID0gbWFnbml0dWRlCiAgICAvLyB5ID0gaXRlcmF0aW9ucwogICAgdmFy
IHN1bVggPSAwOwogICAgdmFyIHN1bVkgPSAwOwogICAgdmFyIHN1bVhTcXVhcmVkID0gMDsKICAg
IHZhciBzdW1ZU3F1YXJlZCA9IDA7CiAgICB2YXIgc3VtWFRpbWVzWSA9IDA7CgogICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgeCA9IGk7CiAg
ICAgICAgdmFyIHkgPSBwb2ludHNbaV07CiAgICAgICAgc3VtWCArPSB4OwogICAgICAgIHN1bVkg
Kz0geTsKICAgICAgICBzdW1YU3F1YXJlZCArPSB4ICogeDsKICAgICAgICBzdW1ZU3F1YXJlZCAr
PSB5ICogeTsKICAgICAgICBzdW1YVGltZXNZICs9IHggKiB5OwogICAgfQoKICAgIHZhciByID0g
KHBvaW50cy5sZW5ndGggKiBzdW1YVGltZXNZIC0gc3VtWCAqIHN1bVkpIC8KICAgICAgICBNYXRo
LnNxcnQoKHBvaW50cy5sZW5ndGggKiBzdW1YU3F1YXJlZCAtIHN1bVggKiBzdW1YKSAqCiAgICAg
ICAgICAgICAgICAgIChwb2ludHMubGVuZ3RoICogc3VtWVNxdWFyZWQgLSBzdW1ZICogc3VtWSkp
OwoKICAgIGlmIChpc05hTihyKSB8fCByID09IE1hdGguSW5maW5pdHkpCiAgICAgICAgciA9IDA7
CgogICAgdmFyIHNsb3BlID0gKHBvaW50cy5sZW5ndGggKiBzdW1YVGltZXNZIC0gc3VtWCAqIHN1
bVkpIC8gKHBvaW50cy5sZW5ndGggKiBzdW1YU3F1YXJlZCAtIHN1bVggKiBzdW1YKTsKICAgIHZh
ciBpbnRlcmNlcHQgPSBzdW1ZIC8gcG9pbnRzLmxlbmd0aCAtIHNsb3BlICogc3VtWCAvIHBvaW50
cy5sZW5ndGg7CiAgICByZXR1cm4ge3Nsb3BlOiBzbG9wZSwgaW50ZXJjZXB0OiBpbnRlcmNlcHQs
IHJTcXVhcmVkOiByICogcn07Cn0KCnZhciB3YXJuaW5nU2lnbiA9ICc8c3ZnIHZpZXdCb3g9IjAg
MCAxMDAgMTAwIiBzdHlsZT0id2lkdGg6IDE4cHg7IGhlaWdodDogMThweDsgdmVydGljYWwtYWxp
Z246IGJvdHRvbTsiIHZlcnNpb249IjEuMSI+JwogICAgKyAnPHBvbHlnb24gZmlsbD0icmVkIiBw
b2ludHM9IjUwLDEwIDkwLDgwIDEwLDgwIDUwLDEwIiBzdHJva2U9InJlZCIgc3Ryb2tlLXdpZHRo
PSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgLz4nCiAgICArICc8cG9seWdvbiBmaWxsPSJ3
aGl0ZSIgcG9pbnRzPSI0NywzMCA0OCwyOSwgNTAsIDI4LjcsIDUyLDI5IDUzLDMwIDUwLDYwIiBz
dHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiAv
PicKICAgICsgJzxjaXJjbGUgY3g9IjUwIiBjeT0iNzMiIHI9IjYiIGZpbGw9IndoaXRlIiAvPicK
ICAgICsgJzwvc3ZnPic7CgpmdW5jdGlvbiBjcmVhdGVUYWJsZVJvdyhydW5zLCB0ZXN0LCByZWZl
cmVuY2VJbmRleCkgewogICAgdmFyIHRhYmxlUm93ID0gJCgnPHRyPjx0ZCBjbGFzcz0idGVzdCI+
JyArIHRlc3QubmFtZSgpICsgJzwvdGQ+PHRkIGNsYXNzPSJ1bml0Ij4nICsgdGVzdC51bml0KCkg
KyAnPC90ZD48L3RyPicpOwoKICAgIGZ1bmN0aW9uIG1hcmt1cEZvclJ1bihyZXN1bHQsIHJlZmVy
ZW5jZVJlc3VsdCkgewogICAgICAgIHZhciBjb21wYXJpc29uQ2VsbCA9ICcnOwogICAgICAgIHZh
ciBoaWRkZW5WYWx1ZSA9ICcnOwogICAgICAgIHZhciBzaG91bGRDb21wYXJlID0gcmVzdWx0ICE9
PSByZWZlcmVuY2VSZXN1bHQ7CiAgICAgICAgaWYgKHNob3VsZENvbXBhcmUgJiYgcmVmZXJlbmNl
UmVzdWx0KSB7CiAgICAgICAgICAgIHZhciBwZXJjZW50RGlmZmVyZW5jZSA9IHJlZmVyZW5jZVJl
c3VsdC5wZXJjZW50RGlmZmVyZW5jZShyZXN1bHQpOwogICAgICAgICAgICB2YXIgYmV0dGVyID0g
dGVzdC5zbWFsbGVySXNCZXR0ZXIoKSA/IHBlcmNlbnREaWZmZXJlbmNlIDwgMCA6IHBlcmNlbnRE
aWZmZXJlbmNlID4gMDsKICAgICAgICAgICAgdmFyIGNvbXBhcmlzb24gPSAnJzsKICAgICAgICAg
ICAgdmFyIGNsYXNzTmFtZSA9ICdjb21wYXJpc29uJzsKICAgICAgICAgICAgaWYgKHJlZmVyZW5j
ZVJlc3VsdC5pc1N0YXRpc3RpY2FsbHlTaWduaWZpY2FudChyZXN1bHQpKSB7CiAgICAgICAgICAg
ICAgICBjb21wYXJpc29uID0gZm9ybWF0UGVyY2VudGFnZShNYXRoLmFicyhwZXJjZW50RGlmZmVy
ZW5jZSkpICsgKGJldHRlciA/ICcgQmV0dGVyJyA6ICcgV29yc2UmbmJzcDsnKTsKICAgICAgICAg
ICAgICAgIGNsYXNzTmFtZSArPSBiZXR0ZXIgPyAnIGJldHRlcicgOiAnIHdvcnNlJzsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBoaWRkZW5WYWx1ZSA9ICc8c3BhbiBzdHlsZT0iZGlzcGxheTog
bm9uZSI+fCcgKyBjb21wYXJpc29uICsgJzwvc3Bhbj4nOwogICAgICAgICAgICBjb21wYXJpc29u
Q2VsbCA9ICc8dGQgY2xhc3M9IicgKyBjbGFzc05hbWUgKyAnIj4nICsgY29tcGFyaXNvbiArICc8
L3RkPic7CiAgICAgICAgfSBlbHNlIGlmIChzaG91bGRDb21wYXJlKQogICAgICAgICAgICBjb21w
YXJpc29uQ2VsbCA9ICc8dGQgY2xhc3M9ImNvbXBhcmlzb24iPjwvdGQ+JzsKCiAgICAgICAgdmFy
IHZhbHVlcyA9IHJlc3VsdC52YWx1ZXMoKTsKICAgICAgICB2YXIgd2FybmluZyA9ICcnOwogICAg
ICAgIHZhciByZWdyZXNzaW9uQW5hbHlzaXMgPSAnJzsKICAgICAgICBpZiAodmFsdWVzICYmIHZh
bHVlcy5sZW5ndGggPiAzKSB7CiAgICAgICAgICAgIHJlZ3Jlc3Npb25SZXN1bHQgPSBsaW5lYXJS
ZWdyZXNzaW9uKHZhbHVlcyk7CiAgICAgICAgICAgIHJlZ3Jlc3Npb25BbmFseXNpcyA9ICdzbG9w
ZT0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlZ3Jlc3Npb25SZXN1bHQuc2xvcGUpCiAgICAg
ICAgICAgICAgICArICcsIFJeMj0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlZ3Jlc3Npb25S
ZXN1bHQuclNxdWFyZWQpOwogICAgICAgICAgICBpZiAocmVncmVzc2lvblJlc3VsdC5yU3F1YXJl
ZCA+IDAuNiAmJiBNYXRoLmFicyhyZWdyZXNzaW9uUmVzdWx0LnNsb3BlKSA+IDAuMDEpIHsKICAg
ICAgICAgICAgICAgIHdhcm5pbmcgPSAnIDxzcGFuIGNsYXNzPSJyZWdyZXNzaW9uLXdhcm5pbmci
IHRpdGxlPSJEZXRlY3RlZCBhIHRpbWUgZGVwZW5kZW5jeSB3aXRoICcgKyByZWdyZXNzaW9uQW5h
bHlzaXMgKyAnIj4nICsgd2FybmluZ1NpZ24gKyAnIDwvc3Bhbj4nOwogICAgICAgICAgICB9CiAg
ICAgICAgfQoKICAgICAgICB2YXIgc3RhdGlzdGljcyA9ICcmc2lnbWE7PScgKyB0b0ZpeGVkV2lk
dGhQcmVjaXNpb24ocmVzdWx0LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKCkpICsgJywgbWluPScg
KyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0Lm1pbigpKQogICAgICAgICAgICArICcsIG1h
eD0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5tYXgoKSkgKyAnXG4nICsgcmVncmVz
c2lvbkFuYWx5c2lzOwoKICAgICAgICAvLyBUYWJsZXNvcnRlciBkb2Vzbid0IGtub3cgYWJvdXQg
dGhlIHNlY29uZCBjZWxsIHNvIHB1dCB0aGUgY29tcGFyaXNvbiBpbiB0aGUgaW52aXNpYmxlIGVs
ZW1lbnQuCiAgICAgICAgcmV0dXJuICc8dGQgY2xhc3M9InJlc3VsdCIgdGl0bGU9IicgKyBzdGF0
aXN0aWNzICsgJyI+JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQubWVhbigpKSArIGhp
ZGRlblZhbHVlCiAgICAgICAgICAgICsgJzwvdGQ+PHRkIGNsYXNzPSJjb25maWRlbmNlSW50ZXJ2
YWxEZWx0YSIgdGl0bGU9IicgKyBzdGF0aXN0aWNzICsgJyI+JnBsdXNtbjsgJwogICAgICAgICAg
ICArIGZvcm1hdFBlcmNlbnRhZ2UocmVzdWx0LmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhUmF0aW8o
KSkgKyB3YXJuaW5nICsgJzwvdGQ+JyArIGNvbXBhcmlzb25DZWxsOwogICAgfQoKICAgIGZ1bmN0
aW9uIG1hcmt1cEZvck1pc3NpbmdSdW4oaXNSZWZlcmVuY2UpIHsKICAgICAgICByZXR1cm4gJzx0
ZCBjb2xzcGFuPSInICsgKGlzUmVmZXJlbmNlID8gMiA6IDMpICsgJyIgY2xhc3M9Im1pc3Npbmci
Pk1pc3Npbmc8L3RkPic7CiAgICB9CgogICAgdmFyIHJ1bkluZGV4ID0gMDsKICAgIHZhciByZXN1
bHRzID0gdGVzdC5yZXN1bHRzKCk7CiAgICB2YXIgcmVmZXJlbmNlUmVzdWx0ID0gdW5kZWZpbmVk
OwogICAgdmFyIHJlc3VsdEluZGV4TWFwID0ge307CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJl
c3VsdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB3aGlsZSAocnVuc1tydW5JbmRleF0gIT09IHJl
c3VsdHNbaV0ucnVuKCkpCiAgICAgICAgICAgIHJ1bkluZGV4Kys7CiAgICAgICAgaWYgKHJ1bklu
ZGV4ID09IHJlZmVyZW5jZUluZGV4KQogICAgICAgICAgICByZWZlcmVuY2VSZXN1bHQgPSByZXN1
bHRzW2ldOwogICAgICAgIHJlc3VsdEluZGV4TWFwW3J1bkluZGV4XSA9IGk7CiAgICB9CiAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHJ1bnMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgcmVzdWx0
SW5kZXggPSByZXN1bHRJbmRleE1hcFtpXTsKICAgICAgICBpZiAocmVzdWx0SW5kZXggPT0gdW5k
ZWZpbmVkKQogICAgICAgICAgICB0YWJsZVJvdy5hcHBlbmQobWFya3VwRm9yTWlzc2luZ1J1bihp
ID09IHJlZmVyZW5jZUluZGV4KSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0YWJsZVJvdy5h
cHBlbmQobWFya3VwRm9yUnVuKHJlc3VsdHNbcmVzdWx0SW5kZXhdLCByZWZlcmVuY2VSZXN1bHQp
KTsKICAgIH0KCiAgICAkKCcjY29udGFpbmVyJykuY2hpbGRyZW4oJ3Rib2R5JykubGFzdCgpLmFw
cGVuZCh0YWJsZVJvdyk7CgogICAgdGFibGVSb3cuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7CiAg
ICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPSB0YWJsZVJvd1swXSAmJiBldmVudC50YXJnZXQucGFy
ZW50Tm9kZSAhPSB0YWJsZVJvd1swXSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOwoKICAgICAgICB2YXIgZmlyc3RDZWxsID0gdGFibGVSb3cuY2hp
bGRyZW4oJ3RkJykuZmlyc3QoKTsKICAgICAgICBpZiAoZmlyc3RDZWxsLmNoaWxkcmVuKCdzZWN0
aW9uJykubGVuZ3RoKSB7CiAgICAgICAgICAgIGZpcnN0Q2VsbC5jaGlsZHJlbignc2VjdGlvbicp
LnJlbW92ZSgpOwogICAgICAgICAgICB0YWJsZVJvdy5jaGlsZHJlbigndGQnKS5jc3MoeydwYWRk
aW5nLWJvdHRvbSc6ICcnfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHBsb3Qg
PSBjcmVhdGVQbG90KGZpcnN0Q2VsbCwgdGVzdCk7CiAgICAgICAgICAgIHBsb3QuY3NzKHsncG9z
aXRpb24nOiAnYWJzb2x1dGUnLCAnei1pbmRleCc6IDJ9KTsKICAgICAgICAgICAgdmFyIG9mZnNl
dCA9IHRhYmxlUm93Lm9mZnNldCgpOwogICAgICAgICAgICBvZmZzZXQubGVmdCArPSAxOwogICAg
ICAgICAgICBvZmZzZXQudG9wICs9IHRhYmxlUm93Lm91dGVySGVpZ2h0KCk7CiAgICAgICAgICAg
IHBsb3Qub2Zmc2V0KG9mZnNldCk7CiAgICAgICAgICAgIHRhYmxlUm93LmNoaWxkcmVuKCd0ZCcp
LmNzcyh7J3BhZGRpbmctYm90dG9tJzogcGxvdC5vdXRlckhlaWdodCgpICsgNX0pOwogICAgICAg
IH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7Cn0KCmZ1bmN0aW9uIGluaXQoKSB7CiAg
ICAkLnRhYmxlc29ydGVyLmFkZFBhcnNlcih7CiAgICAgICAgaWQ6ICdjb21wYXJpc29uJywKICAg
ICAgICBpczogZnVuY3Rpb24ocykgewogICAgICAgICAgICByZXR1cm4gcy5pbmRleE9mKCd8Jykg
Pj0gMDsKICAgICAgICB9LAogICAgICAgIGZvcm1hdDogZnVuY3Rpb24ocykgewogICAgICAgICAg
ICB2YXIgcGFyc2VkID0gcGFyc2VGbG9hdChzLnN1YnN0cmluZyhzLmluZGV4T2YoJ3wnKSArIDEp
KTsKICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgPyAwIDogcGFyc2VkOwogICAgICAg
IH0sCiAgICAgICAgdHlwZTogJ251bWVyaWMnLAogICAgfSk7CgogICAgdmFyIHJ1bnMgPSBbXTsK
ICAgIHZhciBtZXRyaWNzID0ge307CiAgICAkLmVhY2goSlNPTi5wYXJzZShkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnanNvbicpLnRleHRDb250ZW50KSwgZnVuY3Rpb24gKGluZGV4LCBlbnRyeSkg
ewogICAgICAgIHZhciBydW4gPSBuZXcgVGVzdFJ1bihlbnRyeSk7CiAgICAgICAgcnVucy5wdXNo
KHJ1bik7CgogICAgICAgIGZ1bmN0aW9uIGFkZFRlc3RzKHRlc3RzLCBwYXJlbnRGdWxsTmFtZSkg
ewogICAgICAgICAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiB0ZXN0cykgewogICAgICAgICAgICAg
ICAgdmFyIGZ1bGxUZXN0TmFtZSA9IHBhcmVudEZ1bGxOYW1lICsgJy8nICsgdGVzdE5hbWU7CiAg
ICAgICAgICAgICAgICB2YXIgcmF3TWV0cmljcyA9IHRlc3RzW3Rlc3ROYW1lXS5tZXRyaWNzOwoK
ICAgICAgICAgICAgICAgIGZvciAodmFyIG1ldHJpY05hbWUgaW4gcmF3TWV0cmljcykgewogICAg
ICAgICAgICAgICAgICAgIHZhciBmdWxsTWV0cmljTmFtZSA9IGZ1bGxUZXN0TmFtZSArICc6JyAr
IG1ldHJpY05hbWU7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1ldHJpYyA9IG1ldHJpY3NbZnVs
bE1ldHJpY05hbWVdOwogICAgICAgICAgICAgICAgICAgIGlmICghbWV0cmljKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIG1ldHJpYyA9IG5ldyBQZXJmVGVzdE1ldHJpYyhmdWxsVGVzdE5hbWUs
IG1ldHJpY05hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzW2Z1bGxNZXRyaWNO
YW1lXSA9IG1ldHJpYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
bWV0cmljLmFkZFJlc3VsdChuZXcgVGVzdFJlc3VsdChtZXRyaWMsIHJhd01ldHJpY3NbbWV0cmlj
TmFtZV0uY3VycmVudCwgcnVuKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAg
aWYgKHRlc3RzW3Rlc3ROYW1lXS50ZXN0cykKICAgICAgICAgICAgICAgICAgICBhZGRUZXN0cyh0
ZXN0c1t0ZXN0TmFtZV0udGVzdHMsIGZ1bGxUZXN0TmFtZSk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CgogICAgICAgIGFkZFRlc3RzKGVudHJ5LnRlc3RzLCAnJyk7CiAgICB9KTsKCiAgICB2YXIg
c2hvdWxkSWdub3JlTWVtb3J5PSB0cnVlOwogICAgdmFyIHJlZmVyZW5jZUluZGV4ID0gMDsKCiAg
ICBjcmVhdGVUYWJsZShtZXRyaWNzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnksIHJlZmVyZW5j
ZUluZGV4KTsKCiAgICAkKCcjdGltZS1tZW1vcnknKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAo
ZXZlbnQsIGNoZWNrZWRFbGVtZW50KSB7CiAgICAgICAgc2hvdWxkSWdub3JlTWVtb3J5ID0gY2hl
Y2tlZEVsZW1lbnQudGV4dENvbnRlbnQgPT0gJ1RpbWUnOwogICAgICAgIGNyZWF0ZVRhYmxlKG1l
dHJpY3MsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOwogICAgfSk7
CgogICAgcnVucy5tYXAoZnVuY3Rpb24gKHJ1biwgaW5kZXgpIHsKICAgICAgICAkKCcjcmVmZXJl
bmNlJykuYXBwZW5kKCc8c3BhbiB2YWx1ZT0iJyArIGluZGV4ICsgJyInICsgKGluZGV4ID09IHJl
ZmVyZW5jZUluZGV4ID8gJyBjbGFzcz0iY2hlY2tlZCInIDogJycpICsgJz4nICsgcnVuLmxhYmVs
KCkgKyAnPC9zcGFuPicpOwogICAgfSkKCiAgICAkKCcjcmVmZXJlbmNlJykuYmluZCgnY2hhbmdl
JywgZnVuY3Rpb24gKGV2ZW50LCBjaGVja2VkRWxlbWVudCkgewogICAgICAgIHJlZmVyZW5jZUlu
ZGV4ID0gcGFyc2VJbnQoY2hlY2tlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKTsKICAg
ICAgICBjcmVhdGVUYWJsZShtZXRyaWNzLCBydW5zLCBzaG91bGRJZ25vcmVNZW1vcnksIHJlZmVy
ZW5jZUluZGV4KTsKICAgIH0pOwoKICAgICQoJy5jaGVja2JveCcpLmVhY2goZnVuY3Rpb24gKGlu
ZGV4LCBjaGVja2JveCkgewogICAgICAgICQoY2hlY2tib3gpLmNoaWxkcmVuKCdzcGFuJykuY2xp
Y2soZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdj
aGVja2VkJykpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICQoY2hlY2tib3gp
LmNoaWxkcmVuKCdzcGFuJykucmVtb3ZlQ2xhc3MoJ2NoZWNrZWQnKTsKICAgICAgICAgICAgJCh0
aGlzKS5hZGRDbGFzcygnY2hlY2tlZCcpOwogICAgICAgICAgICAkKGNoZWNrYm94KS50cmlnZ2Vy
KCdjaGFuZ2UnLCAkKHRoaXMpKTsKICAgICAgICB9KTsKICAgIH0pOwp9Cgo8L3NjcmlwdD4KPHNj
cmlwdCBpZD0ianNvbiIgdHlwZT0iYXBwbGljYXRpb24vanNvbiI+W3sidGVzdHMiOiB7IkludGVy
YWN0aXZlIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Bl
cmZvcm1hbmNlVGVzdHMvSW50ZXJhY3RpdmUiLCAidGVzdHMiOiB7IkNvcHlBbGwiOiB7InVybCI6
ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9J
bnRlcmFjdGl2ZS9Db3B5QWxsLmh0bWwiLCAibWV0cmljcyI6IHsiTWFsbG9jIjogeyJjdXJyZW50
IjogW1szNjg2MDc4ODguMCwgMzY4Mjk2MjU2LjBdXX0sICJKU0hlYXAiOiB7ImN1cnJlbnQiOiBb
WzIyNzI0NC4wLCAyMzE5MjYuMF1dfSwgIlRpbWUiOiB7ImN1cnJlbnQiOiBbWzMxODczLjAsIDMw
ODk5LjBdXX19fX19fSwgImJ1aWxkVGltZSI6ICIyMDE0LTAzLTE0VDA2OjE0OjM5LjMyMjI2NyIs
ICJkZXNjcmlwdGlvbiI6ICJVbnBhdGNoZWQiLCAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRp
bWVzdGFtcCI6ICIyMDE0LTAzLTEzVDIxOjI3OjQ3LjU2MzAzNloiLCAicmV2aXNpb24iOiAiMTY1
NTY2In19fSwgeyJ0ZXN0cyI6IHsiSW50ZXJhY3RpdmUiOiB7InVybCI6ICJodHRwOi8vdHJhYy53
ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFuY2VUZXN0cy9JbnRlcmFjdGl2ZSIsICJ0
ZXN0cyI6IHsiQ29weUFsbCI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nl
ci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0ludGVyYWN0aXZlL0NvcHlBbGwuaHRtbCIsICJtZXRy
aWNzIjogeyJNYWxsb2MiOiB7ImN1cnJlbnQiOiBbWzMzMjMzNTcyOC4wLCAzMzIzMzQzNTIuMF1d
fSwgIkpTSGVhcCI6IHsiY3VycmVudCI6IFtbMjI3MjQ0LjAsIDIzMTkyNi4wXV19LCAiVGltZSI6
IHsiY3VycmVudCI6IFtbMjYyNDQuMCwgMjQ3MjkuMF1dfX19fX19LCAiZGVzY3JpcHRpb24iOiAi
UGF0Y2hlZCIsICJidWlsZFRpbWUiOiAiMjAxNC0wMy0xNFQwNjoxOTo1MS4xOTk1MjAiLCAicmV2
aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIyMDE0LTAzLTEzVDIxOjI3OjQ3LjU2
MzAzNloiLCAicmV2aXNpb24iOiAiMTY1NTY2In19fSwgeyJ0ZXN0cyI6IHsiSW50ZXJhY3RpdmUi
OiB7InVybCI6ICJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvUGVyZm9ybWFu
Y2VUZXN0cy9JbnRlcmFjdGl2ZSIsICJ0ZXN0cyI6IHsiQ29weUFsbCI6IHsidXJsIjogImh0dHA6
Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0ludGVyYWN0
aXZlL0NvcHlBbGwuaHRtbCIsICJtZXRyaWNzIjogeyJNYWxsb2MiOiB7ImN1cnJlbnQiOiBbWzM2
ODU1NjQ0MC4wLCAzNjgyNDg5MDQuMF1dfSwgIkpTSGVhcCI6IHsiY3VycmVudCI6IFtbMjI3MjQ0
LjAsIDIzMTkyNi4wXV19LCAiVGltZSI6IHsiY3VycmVudCI6IFtbMzI0MDUuMCwgMzE2OTAuMF1d
fX19fX19LCAicmV2aXNpb25zIjogeyJXZWJLaXQiOiB7InRpbWVzdGFtcCI6ICIyMDE0LTAzLTEz
VDIxOjI3OjQ3LjU2MzAzNloiLCAicmV2aXNpb24iOiAiMTY1NTY2In19LCAiYnVpbGRUaW1lIjog
IjIwMTQtMDMtMTRUMDY6MjM6MDYuNTg0NjcwIiwgImRlc2NyaXB0aW9uIjogIlVucGF0Y2hlZCJ9
LCB7InRlc3RzIjogeyJJbnRlcmFjdGl2ZSI6IHsidXJsIjogImh0dHA6Ly90cmFjLndlYmtpdC5v
cmcvYnJvd3Nlci90cnVuay9QZXJmb3JtYW5jZVRlc3RzL0ludGVyYWN0aXZlIiwgInRlc3RzIjog
eyJDb3B5QWxsIjogeyJ1cmwiOiAiaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5r
L1BlcmZvcm1hbmNlVGVzdHMvSW50ZXJhY3RpdmUvQ29weUFsbC5odG1sIiwgIm1ldHJpY3MiOiB7
Ik1hbGxvYyI6IHsiY3VycmVudCI6IFtbMjQxMDg1MTM2LjAsIDI0MTA3OTY2NC4wXV19LCAiSlNI
ZWFwIjogeyJjdXJyZW50IjogW1syMjcyNDQuMCwgMjMxOTI2LjBdXX0sICJUaW1lIjogeyJjdXJy
ZW50IjogW1syNzA1MS4wLCAyNTk4Ni4wXV19fX19fX0sICJidWlsZFRpbWUiOiAiMjAxNC0wMy0x
NFQwNjoyNToyMC40MjIzODAiLCAiZGVzY3JpcHRpb24iOiAiUGF0Y2hlZCIsICJyZXZpc2lvbnMi
OiB7IldlYktpdCI6IHsidGltZXN0YW1wIjogIjIwMTQtMDMtMTNUMjE6Mjc6NDcuNTYzMDM2WiIs
ICJyZXZpc2lvbiI6ICIxNjU1NjYifX19XTwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>