<?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>54822</bug_id>
          
          <creation_ts>2011-02-20 04:41:56 -0800</creation_ts>
          <short_desc>Web Inspector: generate protocol documentation based on IDL.</short_desc>
          <delta_ts>2011-02-21 05:35:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>354266</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-20 04:41:56 -0800</bug_when>
    <thetext>IDL is the best source of the protocol information as of today. We should gen some docs out of it. Patch to follow, it generates something like: https://sites.google.com/site/webinspectorprotocol/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354267</commentid>
    <comment_count>1</comment_count>
      <attachid>83092</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-20 04:45:10 -0800</bug_when>
    <thetext>Created attachment 83092
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354273</commentid>
    <comment_count>2</comment_count>
      <attachid>83092</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2011-02-20 06:20:36 -0800</bug_when>
    <thetext>Comment on attachment 83092
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:528
&gt; +    push(@lines, &quot;    seq: number,&quot;);

should be &amp;lt;number&amp;gt; for consistency</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354277</commentid>
    <comment_count>3</comment_count>
      <attachid>83092</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-02-20 07:54:35 -0800</bug_when>
    <thetext>Comment on attachment 83092
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:394
&gt; +{
&gt; +    my $interface = shift;
&gt; +    my $function = shift;
&gt; +
&gt; +    my $functionName = $function-&gt;signature-&gt;name;
&gt; +    my $domain = $interface-&gt;name;
&gt; +
&gt; +    my @argsFiltered = grep($_-&gt;direction eq &quot;out&quot;, @{$function-&gt;parameters});
&gt; +
&gt; +    my @lines;
&gt; +    push(@lines, &quot;&lt;h4&gt;&quot; . $interface-&gt;name . &quot;.&quot; . ${functionName} . &quot;&lt;/h4&gt;&quot;);
&gt; +    my $doc = $function-&gt;signature-&gt;extendedAttributes-&gt;{&quot;doc&quot;};
&gt; +    if ($doc) {
&gt; +        push(@lines, $doc);
&gt; +    }
&gt; +
&gt; +    push(@lines, &quot;&lt;pre style=&apos;background: lightGrey; padding: 10px&apos;&gt;&quot;);
&gt; +    push(@lines, &quot;{&quot;);
&gt; +    push(@lines, &quot;    seq: &amp;lt;number&amp;gt;,&quot;);
&gt; +    push(@lines, &quot;    type: \&quot;event\&quot;,&quot;);
&gt; +    push(@lines, &quot;    domain: \&quot;$domain\&quot;,&quot;);
&gt; +    if (scalar(@argsFiltered)) {
&gt; +        push(@lines, &quot;    event: \&quot;${functionName}\&quot;,&quot;);
&gt; +        push(@lines, &quot;    data: {&quot;);
&gt; +        my @parameters;
&gt; +        foreach my $parameter (@argsFiltered) {
&gt; +            push(@parameters, &quot;        &quot; . parameterDocLine($parameter));
&gt; +        }
&gt; +        push(@lines, join(&quot;,\n&quot;, @parameters));
&gt; +        push(@lines, &quot;    }&quot;);
&gt; +    } else {
&gt; +        push(@lines, &quot;    event: \&quot;${functionName}\&quot;&quot;);
&gt; +    }
&gt; +    push(@lines, &quot;}&quot;);
&gt; +    push(@lines, &quot;&lt;/pre&gt;&quot;);
&gt; +    push(@documentationLines, @lines);
&gt; +}

Please use inline text. It is significantly increasing readability.

&gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:546
&gt; +

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354286</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-20 09:37:48 -0800</bug_when>
    <thetext>&gt; &gt; +}
&gt; 
&gt; Please use inline text. It is significantly increasing readability.
&gt; 
&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:546
&gt; &gt; +
&gt; 
&gt; ditto

I tried that, but it made readability worse. Reason is that there are several conditions / loops that don&apos;t work well in combination with text chunks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354290</commentid>
    <comment_count>5</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2011-02-20 10:34:27 -0800</bug_when>
    <thetext>I generate &quot;protocol docs&quot; for weine as well - I have some of my own IDL as well as (obviously) reuse Inspector.idl.  Rather than generate HTML, I generate JSON.  I then have some JS code which generates HTML for the protocol doc.  I reuse the same JSON in weinre as well - to generate proxies, etc.

Current version, which I think matches the current IDL, is here:

    https://github.com/pmuellr/weinre/blob/develop/weinre.build/scripts/simple-idl2json.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354299</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-20 11:12:49 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I generate &quot;protocol docs&quot; for weine as well - I have some of my own IDL as well as (obviously) reuse Inspector.idl.  Rather than generate HTML, I generate JSON.  I then have some JS code which generates HTML for the protocol doc.  I reuse the same JSON in weinre as well - to generate proxies, etc.
&gt; 
&gt; Current version, which I think matches the current IDL, is here:
&gt; 
&gt;     https://github.com/pmuellr/weinre/blob/develop/weinre.build/scripts/simple-idl2json.py

IDL is extremely limited in terms of markup for documentation generation. I&apos;d much rather have JSON as a source for both generated code and the documentation. We only use IDL for historical reasons + IDLParser is a part of the build on all ports. If we figure out how to run JavaScript in the build, we will be able to use JSON source.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354497</commentid>
    <comment_count>7</comment_count>
      <attachid>83092</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-02-21 02:57:14 -0800</bug_when>
    <thetext>Comment on attachment 83092
Patch

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

&gt;&gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:394
&gt;&gt; +}
&gt; 
&gt; Please use inline text. It is significantly increasing readability.

I second this comment.

&gt; Source/WebCore/inspector/CodeGeneratorInspector.pm:521
&gt; +        push(@lines, &quot;    command: \&quot;${functionName}\&quot;&quot;);

This line can be pulled out  of the if block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354499</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-21 03:03:40 -0800</bug_when>
    <thetext>Committed r79204: &lt;http://trac.webkit.org/changeset/79204&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>354540</commentid>
    <comment_count>9</comment_count>
    <who name="Patrick Mueller">pmuellr</who>
    <bug_when>2011-02-21 05:35:15 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; IDL is extremely limited in terms of markup for documentation 
&gt; generation. I&apos;d much rather have JSON as a source for both 
&gt; generated code and the documentation. We only use IDL for 
&gt; historical reasons + IDLParser is a part of the build on all ports.

I&apos;m somewhat surprised to find that I actually like the IDL format.  
It&apos;s fairly concise, and turns out to be easy to parse.  I especially
like the trick of denoting call back parms as &quot;out&quot; parameters.

Although I love JSON as a transportable data structure format, I
really dislike writing it, and even reading it is kinda distasteful 
(this will change when there&apos;s a nice JSON viewer in all my &quot;IDEs&quot;).

But it wouldn&apos;t be the end of the world for me if we switched to JSON.

&gt; If we figure out how to run JavaScript in the build, we will be 
&gt; able to use JSON source.

Well, WebKit nightlies build &quot;jsc&quot; (or they used to, or they can).  
Perhaps v8-based builds could be convinced to build a similar CLI, and 
we could parameterize the name of the executable.

But really, a lot of languages can read JSON.  Can&apos;t remember which
version of Python shipped JSON built-in, or the lowest level of Python
the night build requires.  But it turns out, for Python, JSON 
structures are also legal Python literals, so you can just eval() them 
anyway.

There&apos;s no reason to wait for a JavaScript interpreter if you want to
switch from IDL to JSON.  And if you&apos;re writing something new, I vote
for Python over Perl.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83092</attachid>
            <date>2011-02-20 04:45:10 -0800</date>
            <delta_ts>2011-02-21 02:57:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54822-20110220154455.patch</filename>
            <type>text/plain</type>
            <size>15540</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg2OTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5MWJiZGExNWJmYmRjZTJk
Zjk1MjNiYWU3ZDI4ZTk5NTk3YjU2YjI3Li5hMTY5MTEwOWEyZjY1NTcwZTIyYmRlNTJhZWRhM2U5
ZjZiZGY5YTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDItMjAgIFBhdmVs
IEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogZ2VuZXJhdGUgcHJvdG9j
b2wgZG9jdW1lbnRhdGlvbiBiYXNlZCBvbiBJREwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDgyMgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucG06CisKIDIwMTEtMDItMTYgIElseWEgVGlraG9ub3Zza3kgIDxs
b2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRz
a3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCmluZGV4IGU0ZTE5YjA4MTJiNWIxY2FkZDljODFlZTdlOGI5ZjdiYzgwNTU0ZWIuLjZk
YzlkZjJjMjRhZTdlNDdmODA5NjRhMGRkODk2ZGE3ZTNjZDkzOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC05Nyw3ICs5
Nyw4IEBAICR0eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIklu
c3BlY3Rvck9iamVjdCIsCiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKICAg
ICAiSlNPTlR5cGUiID0+ICJPYmplY3QiLAotICAgICJKU1R5cGUiID0+ICJvYmplY3QiCisgICAg
IkpTVHlwZSIgPT4gIm9iamVjdCIsCisgICAgIkRvY1R5cGUiID0+ICIlcyIKIH07CiAkdHlwZVRy
YW5zZm9ybXsiQXJyYXkifSA9IHsKICAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiIsCkBAIC0xMDYsNyArMTA3LDggQEAgJHR5cGVUcmFuc2Zvcm17IkFycmF5In0gPSB7
CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcnJheSIsCiAgICAgImhlYWRlciIgPT4gIklu
c3BlY3RvclZhbHVlcy5oIiwKICAgICAiSlNPTlR5cGUiID0+ICJBcnJheSIsCi0gICAgIkpTVHlw
ZSIgPT4gIm9iamVjdCIKKyAgICAiSlNUeXBlIiA9PiAib2JqZWN0IiwKKyAgICAiRG9jVHlwZSIg
PT4gImFycmF5IG9mICVzIgogfTsKICR0eXBlVHJhbnNmb3JteyJWYWx1ZSJ9ID0gewogICAgICJw
YXJhbSIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IiwKQEAgLTExNSw3ICsxMTcsOCBA
QCAkdHlwZVRyYW5zZm9ybXsiVmFsdWUifSA9IHsKICAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rv
clZhbHVlIiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVzLmgiLAogICAgICJKU09O
VHlwZSIgPT4gIlZhbHVlIiwKLSAgICAiSlNUeXBlIiA9PiAiIgorICAgICJKU1R5cGUiID0+ICIi
LAorICAgICJEb2NUeXBlIiA9PiAidmFsdWUiCiB9OwogJHR5cGVUcmFuc2Zvcm17IlN0cmluZyJ9
ID0gewogICAgICJwYXJhbSIgPT4gImNvbnN0IFN0cmluZyYiLApAQCAtMjI0LDYgKzIyNyw5IEBA
IG15IEBmcm9udGVuZENvbnN0YW50RGVjbGFyYXRpb25zOwogbXkgQGZyb250ZW5kQ29uc3RhbnRE
ZWZpbml0aW9uczsKIG15ICRmcm9udGVuZEZvb3RlcjsKIAorbXkgQGRvY3VtZW50YXRpb25Ub2M7
CitteSBAZG9jdW1lbnRhdGlvbkxpbmVzOworCiAjIERlZmF1bHQgY29uc3RydWN0b3IKIHN1YiBu
ZXcKIHsKQEAgLTI5Nyw2ICszMDMsMTkgQEAgc3ViIGdlbmVyYXRlRnVuY3Rpb25zCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBwdXNoKEBkb2N1bWVudGF0aW9uVG9jLCAiPGxpPjxhIGhyZWY9JyMi
IC4gJGludGVyZmFjZS0+bmFtZSAuICInPiIgLiAkaW50ZXJmYWNlLT5uYW1lIC4gIjwvYT48L2xp
PiIpOworICAgIHB1c2goQGRvY3VtZW50YXRpb25MaW5lcywgIjxoMiBpZD0nIiAuICRpbnRlcmZh
Y2UtPm5hbWUgLiAiJz48YSBuYW1lPSIgLiAkaW50ZXJmYWNlLT5uYW1lIC4gIj48L2E+IiAuICRp
bnRlcmZhY2UtPm5hbWUgLiAiPC9oMj4iKTsKKworICAgIHB1c2goQGRvY3VtZW50YXRpb25MaW5l
cywgIjxoMz5FdmVudHM8L2gzPiIpOworICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChncmVwKCRf
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJub3RpZnkifSwgQHskaW50ZXJmYWNl
LT5mdW5jdGlvbnN9KSApIHsKKyAgICAgICAgZ2VuZXJhdGVEb2N1bWVudGF0aW9uRXZlbnQoJGlu
dGVyZmFjZSwgJGZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBwdXNoKEBkb2N1bWVudGF0aW9uTGlu
ZXMsICI8aDM+Q29tbWFuZHM8L2gzPiIpOworICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChncmVw
KCEkXy0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsibm90aWZ5In0sIEB7JGludGVy
ZmFjZS0+ZnVuY3Rpb25zfSkpIHsKKyAgICAgICAgZ2VuZXJhdGVEb2N1bWVudGF0aW9uQ29tbWFu
ZCgkaW50ZXJmYWNlLCAkZnVuY3Rpb24pOworICAgIH0KKwogICAgIGNvbGxlY3RCYWNrZW5kSlNT
dHViRnVuY3Rpb25zKCRpbnRlcmZhY2UpOwogfQogCkBAIC0zMTAsNyArMzI5LDcgQEAgc3ViIGdl
bmVyYXRlRnJvbnRlbmRGdW5jdGlvbgogICAgIG15ICRkb21haW4gPSAkaW50ZXJmYWNlLT5uYW1l
OwogICAgIG15IEBhcmdzRmlsdGVyZWQgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7
JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7ICMganVzdCBrZWVwIG9ubHkgb3V0IHBhcmFtZXRlcnMg
Zm9yIGZyb250ZW5kIGludGVyZmFjZS4KICAgICBtYXAoJGZyb250ZW5kVHlwZXN7JF8tPnR5cGV9
ID0gMSwgQGFyZ3NGaWx0ZXJlZCk7ICMgcmVnaXN0ZXIgcmVxdWlyZWQgdHlwZXMuCi0gICAgbXkg
JGFyZ3VtZW50cyA9IGpvaW4oIiwgIiwgbWFwKCR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+eyJw
YXJhbSJ9IC4gIiAiIC4gJF8tPm5hbWUsIEBhcmdzRmlsdGVyZWQpKTsgIyBwcmVwYXJlIGFyZ3Vt
ZW50cyBmb3IgZnVuY3Rpb24gc2lnbmF0dXJlLgorICAgIG15ICRhcmd1bWVudHMgPSBqb2luKCIs
ICIsIG1hcCh0eXBlVHJhaXRzKCRfLT50eXBlLCAicGFyYW0iKSAuICIgIiAuICRfLT5uYW1lLCBA
YXJnc0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uIHNpZ25hdHVy
ZS4KIAogICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdW5jdGlvbk5hbWV9KCR7YXJn
dW1lbnRzfSk7IjsKICAgICAhJGZyb250ZW5kTWV0aG9kU2lnbmF0dXJlc3ske3NpZ25hdHVyZX19
IHx8IGRpZSAiRHVwbGljYXRlIGZyb250ZW5kIGZ1bmN0aW9uIHdhcyBkZXRlY3RlZCBmb3Igc2ln
bmF0dXJlICckc2lnbmF0dXJlJy4iOwpAQCAtMzI1LDcgKzM0NCw3IEBAIHN1YiBnZW5lcmF0ZUZy
b250ZW5kRnVuY3Rpb24KICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1N
ZXNzYWdlLT5zZXRTdHJpbmcoXCJkb21haW5cIiwgXCIkZG9tYWluXCIpOyIpOwogICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnNldFN0cmluZyhcImV2ZW50
XCIsIFwiJGZ1bmN0aW9uTmFtZVwiKTsiKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXlsb2FkRGF0YU9iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7Iik7Ci0gICAgbXkgQHB1c2hBcmd1bWVudHMgPSBtYXAoIiAgICBwYXlsb2FkRGF0
YU9iamVjdC0+c2V0IiAuICR0eXBlVHJhbnNmb3JteyRfLT50eXBlfS0+eyJKU09OVHlwZSJ9IC4g
IihcIiIgLiAkXy0+bmFtZSAuICJcIiwgIiAuICRfLT5uYW1lIC4gIik7IiwgQGFyZ3NGaWx0ZXJl
ZCk7CisgICAgbXkgQHB1c2hBcmd1bWVudHMgPSBtYXAoIiAgICBwYXlsb2FkRGF0YU9iamVjdC0+
c2V0IiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJKU09OVHlwZSIpIC4gIihcIiIgLiAkXy0+bmFt
ZSAuICJcIiwgIiAuICRfLT5uYW1lIC4gIik7IiwgQGFyZ3NGaWx0ZXJlZCk7CiAgICAgcHVzaChA
ZnVuY3Rpb24sIEBwdXNoQXJndW1lbnRzKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1
bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRPYmplY3QoXCJkYXRhXCIsIHBheWxvYWREYXRhT2JqZWN0
KTsiKTsKICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBtX2luc3BlY3RvckNsaWVudC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKCR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsi
KTsKQEAgLTMzNSw2ICszNTQsNDUgQEAgc3ViIGdlbmVyYXRlRnJvbnRlbmRGdW5jdGlvbgogICAg
IHB1c2goQGZyb250ZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7CiB9CiAKK3N1YiBnZW5lcmF0
ZURvY3VtZW50YXRpb25FdmVudAoreworICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKKyAgICBt
eSAkZnVuY3Rpb24gPSBzaGlmdDsKKworICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+bmFtZTsKKyAgICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKKwor
ICAgIG15IEBhcmdzRmlsdGVyZWQgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfSk7CisKKyAgICBteSBAbGluZXM7CisgICAgcHVzaChAbGluZXMs
ICI8aDQ+IiAuICRpbnRlcmZhY2UtPm5hbWUgLiAiLiIgLiAke2Z1bmN0aW9uTmFtZX0gLiAiPC9o
ND4iKTsKKyAgICBteSAkZG9jID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJkb2MifTsKKyAgICBpZiAoJGRvYykgeworICAgICAgICBwdXNoKEBsaW5lcywgJGRv
Yyk7CisgICAgfQorCisgICAgcHVzaChAbGluZXMsICI8cHJlIHN0eWxlPSdiYWNrZ3JvdW5kOiBs
aWdodEdyZXk7IHBhZGRpbmc6IDEwcHgnPiIpOworICAgIHB1c2goQGxpbmVzLCAieyIpOworICAg
IHB1c2goQGxpbmVzLCAiICAgIHNlcTogJmx0O251bWJlciZndDssIik7CisgICAgcHVzaChAbGlu
ZXMsICIgICAgdHlwZTogXCJldmVudFwiLCIpOworICAgIHB1c2goQGxpbmVzLCAiICAgIGRvbWFp
bjogXCIkZG9tYWluXCIsIik7CisgICAgaWYgKHNjYWxhcihAYXJnc0ZpbHRlcmVkKSkgeworICAg
ICAgICBwdXNoKEBsaW5lcywgIiAgICBldmVudDogXCIke2Z1bmN0aW9uTmFtZX1cIiwiKTsKKyAg
ICAgICAgcHVzaChAbGluZXMsICIgICAgZGF0YTogeyIpOworICAgICAgICBteSBAcGFyYW1ldGVy
czsKKyAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAYXJnc0ZpbHRlcmVkKSB7CisgICAg
ICAgICAgICBwdXNoKEBwYXJhbWV0ZXJzLCAiICAgICAgICAiIC4gcGFyYW1ldGVyRG9jTGluZSgk
cGFyYW1ldGVyKSk7CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAbGluZXMsIGpvaW4oIixcbiIs
IEBwYXJhbWV0ZXJzKSk7CisgICAgICAgIHB1c2goQGxpbmVzLCAiICAgIH0iKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBwdXNoKEBsaW5lcywgIiAgICBldmVudDogXCIke2Z1bmN0aW9uTmFtZX1c
IiIpOworICAgIH0KKyAgICBwdXNoKEBsaW5lcywgIn0iKTsKKyAgICBwdXNoKEBsaW5lcywgIjwv
cHJlPiIpOworICAgIHB1c2goQGRvY3VtZW50YXRpb25MaW5lcywgQGxpbmVzKTsKK30KKwogc3Vi
IGNhbWVsQ2FzZQogewogICAgIG15ICR2YWx1ZSA9IHNoaWZ0OwpAQCAtMzU3LDcgKzQxNSw3IEBA
IHN1YiBnZW5lcmF0ZUJhY2tlbmRGdW5jdGlvbgogICAgIG1hcCgkYmFja2VuZFR5cGVzeyRfLT50
eXBlfSA9IDEsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7ICMgcmVnaXN0ZXIgcmVxdWlyZWQg
dHlwZXMKICAgICBteSBAaW5BcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJpbiIgJiYgISgk
Xy0+bmFtZSBlcSAiY2FsbElkIikgLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwogICAgIG15
IEBvdXRBcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFy
YW1ldGVyc30pOwotCisgICAgCiAgICAgbXkgJHNpZ25hdHVyZSA9ICIgICAgdm9pZCAke2Z1bGxR
dWFsaWZpZWRGdW5jdGlvbk5hbWV9KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVl
c3RNZXNzYWdlT2JqZWN0KTsiOwogICAgICEkYmFja2VuZE1ldGhvZFNpZ25hdHVyZXN7JHtzaWdu
YXR1cmV9fSB8fCBkaWUgIkR1cGxpY2F0ZSBmdW5jdGlvbiB3YXMgZGV0ZWN0ZWQgZm9yIHNpZ25h
dHVyZSAnJHNpZ25hdHVyZScuIjsKICAgICAkYmFja2VuZE1ldGhvZFNpZ25hdHVyZXN7JHtzaWdu
YXR1cmV9fSA9ICIkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZSI7CkBAIC0zNzEsMTQgKzQyOSwx
NCBAQCBzdWIgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24KICAgICBwdXNoKEBmdW5jdGlvbiwgIiIp
OwogCiAgICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJGRvbWFpbkFj
Y2Vzc29yID0gJHR5cGVUcmFuc2Zvcm17JGRvbWFpbn0tPnsiZG9tYWluQWNjZXNzb3IifTsKKyAg
ICBteSAkZG9tYWluQWNjZXNzb3IgPSB0eXBlVHJhaXRzKCRkb21haW4sICJkb21haW5BY2Nlc3Nv
ciIpOwogICAgICRiYWNrZW5kVHlwZXN7JGRvbWFpbn0gPSAxOwogICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgIGlmICghJGRvbWFpbkFjY2Vzc29yKSIpOwogICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhcIlByb3RvY29sIEVycm9yOiAkZG9tYWlu
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS5cIik7Iik7CiAgICAgcHVzaChAZnVuY3Rpb24sICIi
KTsKIAogICAgICMgZGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG91dCBhcmd1bWVudHMuCi0g
ICAgcHVzaChAZnVuY3Rpb24sIG1hcCgiICAgICIgLiAkdHlwZVRyYW5zZm9ybXskXy0+dHlwZX0t
PnsidmFyaWFibGUifSAuICIgIiAuICRfLT5uYW1lIC4gIiA9ICIgLiAkdHlwZVRyYW5zZm9ybXsk
Xy0+dHlwZX0tPnsiZGVmYXVsdFZhbHVlIn0gLiAiOyIsIEBvdXRBcmdzKSk7CisgICAgcHVzaChA
ZnVuY3Rpb24sIG1hcCgiICAgICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAidmFyaWFibGUiKSAu
ICIgIiAuICRfLT5uYW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiZGVmYXVsdFZh
bHVlIikgLiAiOyIsIEBvdXRBcmdzKSk7CiAKICAgICBteSAkaW5kZW50ID0gIiI7CiAgICAgaWYg
KHNjYWxhcihAaW5BcmdzKSkgewpAQCAtMzg4LDcgKzQ0Niw3IEBAIHN1YiBnZW5lcmF0ZUJhY2tl
bmRGdW5jdGlvbgogICAgICAgICAgICAgbXkgJG5hbWUgPSAkcGFyYW1ldGVyLT5uYW1lOwogICAg
ICAgICAgICAgbXkgJHR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOwogICAgICAgICAgICAgbXkgJHR5
cGVTdHJpbmcgPSBjYW1lbENhc2UoJHBhcmFtZXRlci0+dHlwZSk7Ci0gICAgICAgICAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICAgICAgIiAuICR0eXBlVHJhbnNmb3JteyR0eXBlfS0+eyJ2YXJpYWJs
ZSJ9IC4gIiAkbmFtZSA9IGdldCR0eXBlU3RyaW5nKGFyZ3VtZW50c0NvbnRhaW5lci5nZXQoKSwg
XCIkbmFtZVwiLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Iik7CisgICAgICAgICAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICAgICAgIiAuIHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIpIC4gIiAk
bmFtZSA9IGdldCR0eXBlU3RyaW5nKGFyZ3VtZW50c0NvbnRhaW5lci5nZXQoKSwgXCIkbmFtZVwi
LCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Iik7CiAgICAgICAgIH0KICAgICAgICAgcHVzaChAZnVu
Y3Rpb24sICIiKTsKICAgICAgICAgJGluZGVudCA9ICIgICAgIjsKQEAgLTQxNSw3ICs0NzMsNyBA
QCBzdWIgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24KICAgICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkg
ewogICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgZWxzZSB7Iik7CiAgICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9u
c2VEYXRhID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICAgICAgcHVzaChAZnVu
Y3Rpb24sIG1hcCgiICAgICAgICAgICAgcmVzcG9uc2VEYXRhLT5zZXQiIC4gJHR5cGVUcmFuc2Zv
cm17JF8tPnR5cGV9LT57IkpTT05UeXBlIn0gLiAiKFwiIiAuICRfLT5uYW1lIC4gIlwiLCAiIC4g
JF8tPm5hbWUgLiAiKTsiLCBAb3V0QXJncykpOworICAgICAgICBwdXNoKEBmdW5jdGlvbiwgbWFw
KCIgICAgICAgICAgICByZXNwb25zZURhdGEtPnNldCIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAi
SlNPTlR5cGUiKSAuICIoXCIiIC4gJF8tPm5hbWUgLiAiXCIsICIgLiAkXy0+bmFtZSAuICIpOyIs
IEBvdXRBcmdzKSk7CiAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICAgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRPYmplY3QoXCJkYXRhXCIsIHJlc3BvbnNlRGF0YSk7Iik7CiAgICAgICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICB9Iik7CiAgICAgfQpAQCAtNDI4LDYgKzQ4Niw2NCBA
QCBzdWIgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24KICAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0lt
cGwsIEBmdW5jdGlvbik7CiB9CiAKK3N1YiBnZW5lcmF0ZURvY3VtZW50YXRpb25Db21tYW5kCit7
CisgICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0Owor
CisgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOworICAg
IG15ICRkb21haW4gPSAkaW50ZXJmYWNlLT5uYW1lOworCisgICAgbXkgQGxpbmVzOworCisgICAg
cHVzaChAbGluZXMsICI8aDQ+IiAuICRpbnRlcmZhY2UtPm5hbWUgLiAiLiIgLiAke2Z1bmN0aW9u
TmFtZX0gLiAiPC9oND4iKTsKKyAgICBteSAkZG9jID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJkb2MifTsKKyAgICBpZiAoJGRvYykgeworICAgICAgICBwdXNo
KEBsaW5lcywgJGRvYyk7CisgICAgfQorCisgICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRpcmVj
dGlvbiBlcSAiaW4iICYmICEoJF8tPm5hbWUgZXEgImNhbGxJZCIpICwgQHskZnVuY3Rpb24tPnBh
cmFtZXRlcnN9KTsKKyAgICBwdXNoKEBsaW5lcywgIjxwcmUgc3R5bGU9J2JhY2tncm91bmQ6IGxp
Z2h0R3JleTsgcGFkZGluZzogMTBweCc+Iik7CisgICAgcHVzaChAbGluZXMsICJyZXF1ZXN0OiB7
Iik7CisgICAgcHVzaChAbGluZXMsICIgICAgc2VxOiAmbHQ7bnVtYmVyJmd0OywiKTsKKyAgICBw
dXNoKEBsaW5lcywgIiAgICB0eXBlOiBcInJlcXVlc3RcIiwiKTsKKyAgICBwdXNoKEBsaW5lcywg
IiAgICBkb21haW46IFwiIiAuICRpbnRlcmZhY2UtPm5hbWUgLiAiXCIsIik7CisgICAgaWYgKHNj
YWxhcihAaW5BcmdzKSkgeworICAgICAgICBwdXNoKEBsaW5lcywgIiAgICBjb21tYW5kOiBcIiR7
ZnVuY3Rpb25OYW1lfVwiLCIpOworICAgICAgICBwdXNoKEBsaW5lcywgIiAgICBhcmd1bWVudHM6
IHsiKTsKKyAgICAgICAgbXkgQHBhcmFtZXRlcnM7CisgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
ZXRlciAoQGluQXJncykgeworICAgICAgICAgICAgcHVzaChAcGFyYW1ldGVycywgIiAgICAgICAg
IiAuIHBhcmFtZXRlckRvY0xpbmUoJHBhcmFtZXRlcikpOworICAgICAgICB9CisgICAgICAgIHB1
c2goQGxpbmVzLCBqb2luKCIsXG4iLCBAcGFyYW1ldGVycykpOworICAgICAgICBwdXNoKEBsaW5l
cywgIiAgICB9Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAbGluZXMsICIgICAgY29t
bWFuZDogXCIke2Z1bmN0aW9uTmFtZX1cIiIpOworICAgIH0KKyAgICBwdXNoKEBsaW5lcywgIn0i
KTsKKworICAgIG15IEBvdXRBcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRm
dW5jdGlvbi0+cGFyYW1ldGVyc30pOyAgICAKKyAgICBwdXNoKEBsaW5lcywgIiIpOworICAgIHB1
c2goQGxpbmVzLCAicmVzcG9uc2U6IHsiKTsKKyAgICBwdXNoKEBsaW5lcywgIiAgICBzZXE6IG51
bWJlciwiKTsKKyAgICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkgeworICAgICAgICBwdXNoKEBsaW5l
cywgIiAgICB0eXBlOiBcInJlc3BvbnNlXCIsIik7CisgICAgICAgIHB1c2goQGxpbmVzLCAiICAg
IGJvZHk6IHsiKTsKKyAgICAgICAgICAgIG15IEBwYXJhbWV0ZXJzOworICAgICAgICAgICAgZm9y
ZWFjaCBteSAkcGFyYW1ldGVyIChAb3V0QXJncykgeworICAgICAgICAgICAgICAgIHB1c2goQHBh
cmFtZXRlcnMsICIgICAgICAgICIgLiBwYXJhbWV0ZXJEb2NMaW5lKCRwYXJhbWV0ZXIpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQGxpbmVzLCBqb2luKCIsXG4iLCBAcGFyYW1l
dGVycykpOworICAgICAgICBwdXNoKEBsaW5lcywgIiAgICB9Iik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgcHVzaChAbGluZXMsICIgICAgdHlwZTogXCJyZXNwb25zZVwiIik7CisgICAgfQorICAg
IHB1c2goQGxpbmVzLCAifSIpOworICAgIHB1c2goQGxpbmVzLCAiPC9wcmU+Iik7CisKKyAgICBw
dXNoKEBkb2N1bWVudGF0aW9uTGluZXMsIEBsaW5lcyk7Cit9CisKIHN1YiBnZW5lcmF0ZUJhY2tl
bmRSZXBvcnRQcm90b2NvbEVycm9yCiB7CiAgICAgbXkgJHJlcG9ydFByb3RvY29sRXJyb3IgPSA8
PCAiRU9GIjsKQEAgLTQ0OSwxMCArNTY1LDEwIEBAIEVPRgogc3ViIGdlbmVyYXRlQXJndW1lbnRH
ZXR0ZXJzCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICBteSAkanNvbiA9ICR0eXBlVHJh
bnNmb3JteyR0eXBlfXsiSlNPTlR5cGUifTsKLSAgICBteSAkdmFyaWFibGUgPSAkdHlwZVRyYW5z
Zm9ybXskdHlwZX17InZhcmlhYmxlIn07Ci0gICAgbXkgJGRlZmF1bHRWYWx1ZSA9ICR0eXBlVHJh
bnNmb3JteyR0eXBlfXsiZGVmYXVsdFZhbHVlIn07Ci0gICAgbXkgJHJldHVybiAgPSAkdHlwZVRy
YW5zZm9ybXskdHlwZX17InJldHVybiJ9ID8gJHR5cGVUcmFuc2Zvcm17JHR5cGV9eyJyZXR1cm4i
fSA6ICR0eXBlVHJhbnNmb3JteyR0eXBlfXsicGFyYW0ifTsKKyAgICBteSAkanNvbiA9IHR5cGVU
cmFpdHMoJHR5cGUsICJKU09OVHlwZSIpOworICAgIG15ICR2YXJpYWJsZSA9IHR5cGVUcmFpdHMo
JHR5cGUsICJ2YXJpYWJsZSIpOworICAgIG15ICRkZWZhdWx0VmFsdWUgPSB0eXBlVHJhaXRzKCR0
eXBlLCAiZGVmYXVsdFZhbHVlIik7CisgICAgbXkgJHJldHVybiAgPSB0eXBlVHJhaXRzKCR0eXBl
LCAicmV0dXJuIikgPyB0eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikgOiB0eXBlVHJhaXRzKCR0
eXBlLCAicGFyYW0iKTsKIAogICAgIG15ICR0eXBlU3RyaW5nID0gY2FtZWxDYXNlKCR0eXBlKTsK
ICAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgJHJldHVybiBnZXQk
dHlwZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOyIpOwpAQCAtNTc2LDcgKzY5Miw3IEBAIHN1
YiBjb2xsZWN0QmFja2VuZEpTU3R1YkZ1bmN0aW9ucwogCiAgICAgZm9yZWFjaCBteSAkZnVuY3Rp
b24gKEBmdW5jdGlvbnMpIHsKICAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+bmFtZTsKLSAgICAgICAgbXkgJGFyZ3VtZW50TmFtZXMgPSBqb2luKCIsIiwgbWFwKCJcIiIg
LiAkXy0+bmFtZSAuICJcIjogXCIiIC4gJHR5cGVUcmFuc2Zvcm17JF8tPnR5cGV9LT57IkpTVHlw
ZSJ9IC4gIlwiIiwgZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJh
bWV0ZXJzfSkpKTsKKyAgICAgICAgbXkgJGFyZ3VtZW50TmFtZXMgPSBqb2luKCIsIiwgbWFwKCJc
IiIgLiAkXy0+bmFtZSAuICJcIjogXCIiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwgIkpTVHlwZSIp
IC4gIlwiIiwgZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0
ZXJzfSkpKTsKICAgICAgICAgcHVzaChAYmFja2VuZEpTU3R1YnMsICIgICAgdGhpcy5fcmVnaXN0
ZXJEZWxlZ2F0ZSgneyIgLgogICAgICAgICAgICAgIlwic2VxXCI6IDAsICIgLgogICAgICAgICAg
ICAgIlwiZG9tYWluXCI6IFwiJGRvbWFpblwiLCAiIC4KQEAgLTcyNCw4ICs4NDAsOCBAQCBzdWIg
Z2VuZXJhdGVIZWFkZXIKICAgICBteSAkbWV0aG9kcyA9IHNoaWZ0OwogICAgIG15ICRmb290ZXIg
PSBzaGlmdDsKIAotICAgIG15ICRmb3J3YXJkSGVhZGVycyA9IGpvaW4oIlxuIiwgc29ydChtYXAo
IiNpbmNsdWRlIDwiIC4gJHR5cGVUcmFuc2Zvcm17JF99LT57ImZvcndhcmRIZWFkZXIifSAuICI+
IiwgZ3JlcCgkdHlwZVRyYW5zZm9ybXskX30tPnsiZm9yd2FyZEhlYWRlciJ9LCBrZXlzICV7JHR5
cGVzfSkpKSk7Ci0gICAgbXkgJGZvcndhcmREZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIsIHNvcnQo
bWFwKCJjbGFzcyAiIC4gJHR5cGVUcmFuc2Zvcm17JF99LT57ImZvcndhcmQifSAuICI7IiwgZ3Jl
cCgkdHlwZVRyYW5zZm9ybXskX30tPnsiZm9yd2FyZCJ9LCBrZXlzICV7JHR5cGVzfSkpKSk7Cisg
ICAgbXkgJGZvcndhcmRIZWFkZXJzID0gam9pbigiXG4iLCBzb3J0KG1hcCgiI2luY2x1ZGUgPCIg
LiB0eXBlVHJhaXRzKCRfLCAiZm9yd2FyZEhlYWRlciIpIC4gIj4iLCBncmVwKHR5cGVUcmFpdHMo
JF8sICJmb3J3YXJkSGVhZGVyIiksIGtleXMgJXskdHlwZXN9KSkpKTsKKyAgICBteSAkZm9yd2Fy
ZERlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgc29ydChtYXAoImNsYXNzICIgLiB0eXBlVHJhaXRz
KCRfLCAiZm9yd2FyZCIpIC4gIjsiLCBncmVwKHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkIiksIGtl
eXMgJXskdHlwZXN9KSkpKTsKICAgICBteSAkY29uc3RhbnREZWNsYXJhdGlvbnMgPSBqb2luKCJc
biIsIEB7JGNvbnN0YW50c30pOwogICAgIG15ICRtZXRob2RzRGVjbGFyYXRpb25zID0gam9pbigi
XG4iLCBAeyRtZXRob2RzfSk7CiAKQEAgLTc3Nyw3ICs4OTMsNyBAQCBzdWIgZ2VuZXJhdGVTb3Vy
Y2UKIAogICAgIG15ICVoZWFkZXJzOwogICAgIGZvcmVhY2ggbXkgJHR5cGUgKGtleXMgJXskdHlw
ZXN9KSB7Ci0gICAgICAgICRoZWFkZXJzeyIjaW5jbHVkZSBcIiIgLiAkdHlwZVRyYW5zZm9ybXsk
dHlwZX0tPnsiaGVhZGVyIn0gLiAiXCIifSA9IDEgaWYgISR0eXBlVHJhbnNmb3JteyR0eXBlfS0+
eyJoZWFkZXIifSBlcSAgIiI7CisgICAgICAgICRoZWFkZXJzeyIjaW5jbHVkZSBcIiIgLiB0eXBl
VHJhaXRzKCR0eXBlLCAiaGVhZGVyIikgLiAiXCIifSA9IDEgaWYgIXR5cGVUcmFpdHMoJHR5cGUs
ICJoZWFkZXIiKSBlcSAgIiI7CiAgICAgfQogICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsIHNvcnQg
a2V5cyAlaGVhZGVycyk7CiAgICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwpAQCAtNzk0LDYg
KzkxMCw0MyBAQCBzdWIgZ2VuZXJhdGVTb3VyY2UKICAgICByZXR1cm4gQHNvdXJjZUNvbnRlbnQ7
CiB9CiAKK3N1YiB0eXBlVHJhaXRzCit7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAk
dHJhaXQgPSBzaGlmdDsKKyAgICByZXR1cm4gJHR5cGVUcmFuc2Zvcm17JHR5cGV9LT57JHRyYWl0
fTsKK30KKworc3ViIHBhcmFtZXRlckRvY1R5cGUKK3sKKyAgICBteSAkcGFyYW1ldGVyID0gc2hp
ZnQ7CisgICAgbXkgJHN1YnR5cGUgPSAkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
dHlwZSJ9OworICAgIGlmICgkc3VidHlwZSkgeworICAgICAgICBteSAkcGF0dGVybiA9IHR5cGVU
cmFpdHMoJHBhcmFtZXRlci0+dHlwZSwgIkRvY1R5cGUiKTsKKyAgICAgICAgcmV0dXJuIHNwcmlu
dGYoJHBhdHRlcm4sICImbHQ7JHN1YnR5cGUmZ3Q7Iik7CisgICAgfQorCisgICAgbXkgJHN1YnR5
cGVSZWYgPSAkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsidHlwZVJlZiJ9OworICAg
IGlmICgkc3VidHlwZVJlZikgeworICAgICAgICBteSAkcGF0dGVybiA9IHR5cGVUcmFpdHMoJHBh
cmFtZXRlci0+dHlwZSwgIkRvY1R5cGUiKTsKKyAgICAgICAgcmV0dXJuIHNwcmludGYoJHBhdHRl
cm4sICImbHQ7PGEgaHJlZj0nIyRzdWJ0eXBlUmVmJz4iIC4gJHN1YnR5cGVSZWYgLiAiPC9hPiZn
dDsiKTsKKyAgICB9CisKKyAgICByZXR1cm4gIiZsdDsiIC4gdHlwZVRyYWl0cygkcGFyYW1ldGVy
LT50eXBlLCAiSlNUeXBlIikgLiAiJmd0OyI7Cit9CisKK3N1YiBwYXJhbWV0ZXJEb2NMaW5lCit7
CisgICAgbXkgJHBhcmFtZXRlciA9IHNoaWZ0OworCisgICAgbXkgJHJlc3VsdCA9ICRwYXJhbWV0
ZXItPm5hbWUgLiAiOiAiIC4gcGFyYW1ldGVyRG9jVHlwZSgkcGFyYW1ldGVyKTsKKyAgICBteSAk
ZG9jID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57ImRvYyJ9OworICAgIGlmICgk
ZG9jKSB7CisgICAgICAgICRyZXN1bHQgPSAkcmVzdWx0IC4gIiAvLyAiIC4gJGRvYzsKKyAgICB9
CisgICAgcmV0dXJuICRyZXN1bHQ7Cit9CisKIHN1YiBmaW5pc2gKIHsKICAgICBteSAkb2JqZWN0
ID0gc2hpZnQ7CkBAIC04MTYsNyArOTY5LDcgQEAgc3ViIGZpbmlzaAogICAgIHB1c2goQGJhY2tl
bmRDb25zdGFudERlY2xhcmF0aW9ucywgInByaXZhdGU6Iik7CiAKICAgICBmb3JlYWNoIG15ICR0
eXBlIChrZXlzICViYWNrZW5kVHlwZXMpIHsKLSAgICAgICAgaWYgKCR0eXBlVHJhbnNmb3JteyR0
eXBlfXsiSlNPTlR5cGUifSkgeworICAgICAgICBpZiAodHlwZVRyYWl0cygkdHlwZSwgIkpTT05U
eXBlIikpIHsKICAgICAgICAgICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVB
cmd1bWVudEdldHRlcnMoJHR5cGUpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg0MCw2ICs5OTMs
MTQgQEAgc3ViIGZpbmlzaAogICAgIHByaW50ICRKU19TVFVCIGpvaW4oIlxuIiwgZ2VuZXJhdGVC
YWNrZW5kU3R1YkpTKCkpOwogICAgIGNsb3NlKCRKU19TVFVCKTsKICAgICB1bmRlZigkSlNfU1RV
Qik7CisKKyAgICBvcGVuKG15ICRET0NTLCAiPiRvdXRwdXREaXIvV2ViSW5zcGVjdG9yUHJvdG9j
b2wuaHRtbCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvV2ViSW5zcGVj
dG9yUHJvdG9jb2wuaHRtbCI7CisgICAgcHJpbnQgJERPQ1MgIjxvbCBjbGFzcz0ndG9jJyBzdHls
ZT0nbGlzdC1zdHlsZTogbm9uZTsgcGFkZGluZzogMCc+IjsKKyAgICBwcmludCAkRE9DUyBqb2lu
KCJcbiIsIEBkb2N1bWVudGF0aW9uVG9jKTsKKyAgICBwcmludCAkRE9DUyAiPC9vbD4iOworICAg
IHByaW50ICRET0NTIGpvaW4oIlxuIiwgQGRvY3VtZW50YXRpb25MaW5lcyk7CisgICAgY2xvc2Uo
JERPQ1MpOworICAgIHVuZGVmKCRET0NTKTsKIH0KIAogMTsK
</data>
<flag name="review"
          id="74837"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>