<?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>27410</bug_id>
          
          <creation_ts>2009-07-18 02:33:00 -0700</creation_ts>
          <short_desc>[Gtk] adding GObject Language bindings auto-generator</short_desc>
          <delta_ts>2010-01-14 04:59:13 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>33590</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>16401</blocked>
    
    <blocked>28105</blocked>
    
    <blocked>28106</blocked>
    
    <blocked>28107</blocked>
    
    <blocked>28109</blocked>
    
    <blocked>28110</blocked>
    
    <blocked>28111</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Luke Kenneth Casson Leighton">lkcl</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adam</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>sam</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>132893</commentid>
    <comment_count>0</comment_count>
      <attachid>33020</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 02:33:00 -0700</bug_when>
    <thetext>Created attachment 33020
adds codegenerator for gobject language bindings

following david&apos;s advice, this patch adds just the gobject code generator.  follow-up bug reports will make use of it.  the code-generator is the largest piece of the puzzle: once this is committed, the remaining pieces should be a breeze.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132897</commentid>
    <comment_count>1</comment_count>
      <attachid>33020</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2009-07-18 02:56:48 -0700</bug_when>
    <thetext>Comment on attachment 33020
adds codegenerator for gobject language bindings

The patch is still is huge. If possible please trim it down to something that can build the bindings for Node.idl only. The point here is to review the generation process (and code) and not to make an outright usable GLib bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132914</commentid>
    <comment_count>2</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 08:42:55 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; (From update of attachment 33020 [details])
&gt; The patch is still is huge. 

 yes.  i know.

&gt; If possible please trim it down to something that
&gt; can build the bindings for Node.idl only. The point here is to review the
&gt; generation process (and code) and not to make an outright usable GLib bindings.

 sadly, as already discussed, and to reiterate here, which i am very disappointed to be having to do:

 * milestone 1 has been reached with patch #16401.  i am already in &quot;maintenance&quot; mode on this work - not &quot;development&quot;.  the development milestone (1) is _completed_.

 * the generation process (and code) was developed using high-level testing on top of extreme rapid iterative process.  therefore, even _i_ don&apos;t know exactly why many of these things are in there: all i can tell you is, &quot;it works&quot;, and, if you are willing to take the original patch, and apply it, and then also build pywebkitgtk as well, you too can prove to yourself that &quot;it works&quot;.

 * line-by-line, blow-by-blow, bit-by-bit, piece-by-piece review is going to bore the pants off of me _and_ any reviewers wishing to take it on.  and take absolutely forever.  i&apos;ve said - already - i&apos;m _not_ willing to commit that level of time.

 * &quot;trimming down&quot; requires development, going &quot;backwards&quot; not forwards.  development &quot;backwards&quot; is not something that not one but _two_ separate developers have already said &quot;no&quot; to.


so.

if you would like less lines, i can simply cut the file in half, if you like.  if that&apos;s too few lines, i&apos;m happy to cut it in half again, until you have an amount of lines of code that is acceptable.

but i have already made it clear: there will be _no_ time spent &quot;developing&quot;.  and &quot;going backwards&quot; requires &quot;development.

i will re-enable the review request and await your decision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132915</commentid>
    <comment_count>3</comment_count>
      <attachid>33020</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 08:46:28 -0700</bug_when>
    <thetext>Comment on attachment 33020
adds codegenerator for gobject language bindings

re-enabling review.  awaiting decision.  a compromise _has_ to be reached, here, so that its acceptance does not interfere with its maintenance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132916</commentid>
    <comment_count>4</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 08:52:52 -0700</bug_when>
    <thetext>plus - remember, jan: you&apos;re asking me to interfere with the core of the code, by maintaining two separate versions.  one that&apos;s useable and useful; the other that&apos;s an educational process for the webkit team.  the most appropriate time for that educational process to have taken place was: when the work was being developed - or at least a reasonable time thereafter.

we&apos;re now.... eight nearly TEN months after the initial development took place.

&quot;going backwards&quot; that far is simply impractical, when there are so many things.

ultimately, you will, at some point, simply go, &quot;you know what? we&apos;re just going to have to trust that this code does the job.  we don&apos;t _like_ the fact that we don&apos;t fully understand it, but we _can_ satisfy ourselves that it works, by using that stupidly-named project, pyjamas-desktop, and that will just have to do&quot;.

i realise that it&apos;s a very different development style from that which you may be used to, and i can only apologise for it.

but i am _not_ going to go &quot;backwards&quot;.  there is far, far too much left to do - several more months of work - being held up already.

l.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132917</commentid>
    <comment_count>5</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 09:02:30 -0700</bug_when>
    <thetext>if you would like to check the last set of review comments
(made by sam) and responses, which cover this file, they can
be extracted here:

https://bugs.webkit.org/show_bug.cgi?id=16401#c217</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132930</commentid>
    <comment_count>6</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 10:56:14 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; (From update of attachment 33020 [details])
&gt; The patch is still is huge. If possible please trim it down to something that
&gt; can build the bindings for Node.idl only. 

the answer&apos;s always been &quot;no&quot;.

please respond with an answer indicating that you respect that decision,
and will accommodate it and will help move this forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132935</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-07-18 11:41:14 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; plus - remember, jan: you&apos;re asking me to interfere with the core of the code,
&gt; by maintaining two separate versions.  one that&apos;s useable and useful; the other
&gt; that&apos;s an educational process for the webkit team.  the most appropriate time
&gt; for that educational process to have taken place was: when the work was being
&gt; developed - or at least a reasonable time thereafter.

Luke, with all due respect, I talked with you on IRC before you&apos;d even started writing any of this code.  At that time I told you that contributing incremental patches for a large feature was the only reasonable approach to take.  It&apos;s a process that every other WebKit contributor has found to be reasonable, and that has worked well for many significant features (a JavaScript bytecode interpreter, a JavaScript JIT compiler, SVG support, auto-generated JavaScript and Objective-C DOM bindings, WML support, ports of WebKit to Windows, Qt, GTK, wxWidgets, Haiku, … to name only a few).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132938</commentid>
    <comment_count>8</comment_count>
      <attachid>33020</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-07-18 11:56:48 -0700</bug_when>
    <thetext>Comment on attachment 33020
adds codegenerator for gobject language bindings

This still needs to be broken up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132941</commentid>
    <comment_count>9</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 13:24:03 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; plus - remember, jan: you&apos;re asking me to interfere with the core of the code,
&gt; &gt; by maintaining two separate versions.  one that&apos;s useable and useful; the other
&gt; &gt; that&apos;s an educational process for the webkit team.  the most appropriate time
&gt; &gt; for that educational process to have taken place was: when the work was being
&gt; &gt; developed - or at least a reasonable time thereafter.
&gt; 
&gt; Luke, 

 hellooo.

&gt; with all due respect, I talked with you on IRC before you&apos;d even started
&gt; writing any of this code.

 yes.

&gt;  At that time I told you that contributing
&gt; incremental patches for a large feature was the only reasonable approach to
&gt; take. 

 *sigh*... it&apos;s such a long time ago that i honestly now don&apos;t remember.
 and, i was fairly focussed and committed to making the most of the time
 that i had available and had committed.  [and, to be honest, the
 significance would not have sunk in at that very early stage]

 that meant 100% focus.  i knew full well that if i stopped, the work would
 not be completed.  not because i would be lazy or anything, but because
 simply the sheer quantity of different levels of expertise required and
 the overwhelming number of functions, properties and objects - in order
 to keep a map of everything that&apos;s going on is just... too much to have
 to re-remember _even_ after a break of two weeks.

 i don&apos;t know if you can appreciate that - going well beyond reasonable
 mental boundaries, to focus on a specialist area so intensly that it
 causes actual mental pain and in some cases physical harm.

 i can tell you that i&apos;ve done that several times, before now, in order
 to get results, and have recovered afterwards and had absolutely _no_
 desire to return to that time, whatsoever.

 so - it was the only way [that i personally could have done it], and
 now it&apos;s done, i&apos;m not going through that again - not for anyone.


&gt; It&apos;s a process that every other WebKit contributor has found to be
&gt; reasonable, and that has worked well for many significant features (a
&gt; JavaScript bytecode interpreter, a JavaScript JIT compiler, SVG support,
&gt; auto-generated JavaScript and Objective-C DOM bindings, WML support, ports of
&gt; WebKit to Windows, Qt, GTK, wxWidgets, Haiku, … to name only a few).

 i fully appreciate that.  gosh, who was it - sam i think who did the obj-c
 bindings - said that he managed an incremental process.

 what&apos;s different in this case is that sam knew the process: i didn&apos;t.

 so, i sent in a patch, and i waited, and waited, and nobody reviewed it,
 so i moved on with the work.

 _then_ i discover that there&apos;s this obscure box you have
 to put a &quot;?&quot; in that brings it to peoples&apos; attention, but by then,
 it was far too late.

 i had already moved beyond the initial stages - the ones that i am being
 asked to commit time, money and resources to to &quot;go back&quot; to.

 if you want to &quot;go backwards&quot; - fine: you can look at and review those
 earlier patches.

 but i am really really sorry - i am _not_ going to go backwards to a time
 where i will have to drag things out of long-term memory at a time where
 i was absolutely focussed for eleven hour days and i do mean on nothing
 but these bindings.

 mistakes have been made, yes.  misunderstandings, yes.  go backwards? no.
 move forwards? it&apos;s truly up to you to come up with an initiative to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132942</commentid>
    <comment_count>10</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 13:33:52 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 33020 [details])
&gt; This still needs to be broken up.

 ok - what would you suggest?  [bearing in mind that if you ask for anything that requires development work, the answer&apos;s no]

 how many lines of code would be reasonable?   i am happy to submit the first 150 lines for example.  a second patch  will add the next 150 lines.

 i don&apos;t believe that this is what you mean.

 development time for this code is _over_, sam.  it works.  it&apos;s too late to turn back the clock.  mistakes have been made: we cope with them.  misunderstandings have happened: we find them, go &quot;whoops&quot; and move on.

 you _have_ to accept the reality of the situation, some day.  which is that it is simply _too painful_ for me to return to &quot;significant development&quot; mode on this.

 so - accept this, and review this, you do need to do.

 sorry, sam.  back to you.

 think of _something_.  come on.

 think of a way in which this file can be reviewed - and accepted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132943</commentid>
    <comment_count>11</comment_count>
      <attachid>33020</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 13:35:58 -0700</bug_when>
    <thetext>Comment on attachment 33020
adds codegenerator for gobject language bindings

sorry, sam - breaking it up isn&apos;t an option.
re-enabling review, to give people an opportunity
to come up with another idea.
options discussed and rejected so far:
 * doing Node.idl only [rejected several times]
 * breaking file up [method not described]
options suggested (only half-joking):
 * split into 10of 150-line patches</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132944</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-07-18 13:50:48 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 33020 [details] [details])
&gt; &gt; This still needs to be broken up.
&gt; 
&gt;  ok - what would you suggest?  [bearing in mind that if you ask for anything
&gt; that requires development work, the answer&apos;s no]

Since you&apos;re unwilling to do further work on this patch, please stop wasting the time of reviewers by reposting it without modifications.

&gt;  you _have_ to accept the reality of the situation, some day.  which is that it
&gt; is simply _too painful_ for me to return to &quot;significant development&quot; mode on
&gt; this.

It&apos;s disappointing to hear that, but your unwillingness to continue work on the patch does not mean that we should land it in the current state.  We&apos;ve made this very clear.  We&apos;re more than happy to wait for someone to bring the patch up to a sufficient level of quality that we&apos;re comfortable with it being landed. 

&gt;  think of a way in which this file can be reviewed - and accepted.

We&apos;ve outlined several times what changes need to be made in order to make progress on this issue.  If you&apos;re not willing to make the necessary changes, that&apos;s fine, but please stop wasting our time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132946</commentid>
    <comment_count>13</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 14:35:50 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (From update of attachment 33020 [details] [details] [details])
&gt; &gt; &gt; This still needs to be broken up.
&gt; &gt; 
&gt; &gt;  ok - what would you suggest?  [bearing in mind that if you ask for anything
&gt; &gt; that requires development work, the answer&apos;s no]
&gt; 
&gt; Since you&apos;re unwilling to do further work on this patch,

 that isn&apos;t the case.  my position was stated clearly once already,
 let me see if i can find it....  nope.  too many pages to go through.

 it went something like (and this is a clearer expression, anyway):

 * yes to maintenance work
 * yes to svn update merges
 * yes to future improvements (incremental ones of course) 
 * yes to future enhancements (incremental ones of course)
 * no to &quot;going backwards&quot; e.g. &quot;just Node.idl&quot;.
 * no to removing features that destroy the ability to test the overall code
 * no to removing things that make it unusable [to pyjamas developers]
 * yes to bug-fixes
 * yes to coding-standards fixes and other obvious and simple fixes

 the &quot;yes&quot; things are easy.  simple.  the &quot;no&quot; things are time-consuming.
 painful.  or... necessary.


&gt; please stop wasting
&gt; the time of reviewers by reposting it without modifications.

 i&apos;m sorry that you consider it to be a waste of time.  i&apos;m waiting
 for review comments on the actual content of the file, such as,
 for example, agreement and acceptance of the responses here:

     https://bugs.webkit.org/show_bug.cgi?id=27410#c5

 or, any additional review comments.

 so i don&apos;t consider it to be a waste of time.  let&apos;s turn this around,
 and use a careful choice of words in doing so.  had the thought occurred
 that by shutting these reviews with no comments that it might be wasting
 _my_ time - by not reading my responses?

 in mirroring the thought that had occurred to you, that caused you to
 ask me to &quot;stop wasting reviewers time&quot;, i invite you to think about
 that.



&gt; &gt;  you _have_ to accept the reality of the situation, some day.  which is that it
&gt; &gt; is simply _too painful_ for me to return to &quot;significant development&quot; mode on
&gt; &gt; this.
&gt; 
&gt; It&apos;s disappointing to hear that, but your unwillingness to continue work on the
&gt; patch 

 i am perfectly willing to work on the patch - to move it _forward_, not
 backwards.

 remember that i have a responsibility to keep it in a working - and useful -
 state.

&gt; does not mean that we should land it in the current state.  We&apos;ve made
&gt; this very clear.  We&apos;re more than happy to wait for someone to bring the patch
&gt; up to a sufficient level of quality that we&apos;re comfortable with it being
&gt; landed. 

 ah.

 see... here&apos;s the thing.  i am quite happy to be the person willing to
 do that - to bring it up to a level of &quot;sufficient quality&quot; [without
 &quot;going backwards&quot;].

 but, the last two reviewers have been unwilling to make any comments
 indicating what is lacking in the &quot;quality&quot;.

 if reviewers are willing to provide reviews indicating what the lacking
 quality is, i am happy to answer them.


&gt; &gt;  think of a way in which this file can be reviewed - and accepted.
&gt; 
&gt; We&apos;ve outlined several times what changes need to be made in order to make
&gt; progress on this issue.

 then, with patience, do consider listing them here, as relevant to the
 file that&apos;s been submitted: CodeGeneratorGObject.pm.

 we can then keep track of them, in a manageable way.  i&apos;ve made an
 effort in this regard, to make references to the last review comments,
 as you can see.

 i _was_ expecting that to happen [immediately] and i&apos;m really 
 disappointed to find that we&apos;re up to comment 12 already, with
 no technical discussions entered into.

 if that _also_ turns out to be too much, then we will just have to
 think of something else.

 i am _not_ going to go away.  i am _not_ going to give up.  i am going
 to keep on and on at you, coming up with new suggestions, new ideas,
 badgering you to do the same, until you either give in and listen to my
 advice, or we come up with a workable solution that takes everyone&apos;s
 abilities and resources into account, or someone else comes in to help
 contribute.

 that&apos;s how it&apos;s going to be, i&apos;m afraid.  i gave up on a free software
 project once and the consequences were disastrous, costing businesses
 world-wide billions of dollars.  i&apos;m not going to give up again.

 so we think of something, ok?

 ah.

 idea.

 split CodeGeneratorGObject.pm into separate perl files.  i can then
 maintain working code and can submit files one at a time.

 what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132947</commentid>
    <comment_count>14</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-18 14:43:41 -0700</bug_when>
    <thetext>ok.

i will wait to hear from you for an idea regarding a solution,
(and/or agreement on ideas proposed), to move forward.

if i do not hear from you within 24 hours, i will assume that,
by default, the current solution is acceptable, and will re-raise
the review flag accordingly on this file, on the assumption that
silence indicates a willingness to continue with the review
process, on this file, which was left off here:

https://bugs.webkit.org/show_bug.cgi?id=16401#c217

l.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132981</commentid>
    <comment_count>15</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-19 02:49:01 -0700</bug_when>
    <thetext>ok - i have a better idea.

let&apos;s start with something really small.  to which there can really be
no objections, because it is a start, and a stub, and contains
pretty much nothing.

if you are unable to provide me with proper guidance, guidance that would save all of us a lot of time, i have to instead... &quot;guess&quot; what you want.

i decided against utilising a binary search (cut to 750 lines, review, cut to 375 lines, review, cut to 170 lines, review) and instead decided to take the minimalist approach, to at least get started.

at any time, please feel free to provide guidance and feedback that will help, in the long run, save you - and me - vast amounts of time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132982</commentid>
    <comment_count>16</comment_count>
      <attachid>33038</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-19 02:52:11 -0700</bug_when>
    <thetext>Created attachment 33038
absolute basic beginnings of CodeGeneratorGObject.pm. 

this patch contains two functions - the absolute basic beginnings of the code generator.  it can be seen to have zero impact on the existing codebase.  it is not compiled in.  it is not linked in.  it is perl.  it is not used anywhere.  it is a start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133058</commentid>
    <comment_count>17</comment_count>
      <attachid>33038</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-07-19 19:31:59 -0700</bug_when>
    <thetext>Comment on attachment 33038
absolute basic beginnings of CodeGeneratorGObject.pm. 

&gt; +package CodeGeneratorGObject;
&gt; +
&gt; +require &quot;CodeGeneratorGObjectLibrary1.pm&quot;;

This file doesn&apos;t exist as far as I can see.  What is it?  Why is it named in this manner?

&gt; +
&gt; +# Params: &apos;domClass&apos; struct

What is this comment about?  The &quot;Params&quot; suggests it is about the arguments to the following function, but the function appears to take three arguments that have no relation to this comment.

&gt; +sub GenerateInterface {
&gt; +    my $object = shift;
&gt; +    my $dataNode = shift;
&gt; +    my $defines = shift;
&gt; +
&gt; +    my $name = $dataNode-&gt;name;
&gt; +
&gt; +    print &quot;$name\n&quot;;

What&apos;s the purpose of this print statement?

&gt; +
&gt; +    $object-&gt;Generate($dataNode);
&gt; +
&gt; +    # Write changes
&gt; +    my $fname = &quot;Gdom_&quot; . $name; #decamelize($name);

The comment here doesn&apos;t seem to add anything.  Why is there commented-out code here?

&gt; +    $fname =~ s/_//g;
&gt; +    $object-&gt;WriteData($fname);
&gt; +}
&gt; +
&gt; +# Params: &apos;idlDocument&apos; struct

Same comment as for the previous function applies to this comment.

Marking as r- due to these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133142</commentid>
    <comment_count>18</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-20 08:33:00 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 33038 [details])
&gt; &gt; +package CodeGeneratorGObject;
&gt; &gt; +
&gt; &gt; +require &quot;CodeGeneratorGObjectLibrary1.pm&quot;;
&gt; 
&gt; This file doesn&apos;t exist as far as I can see.  What is it?  Why is it named in
&gt; this manner?

 it contains the remainder of the code which will be reviewed separately.
 i&apos;ll add a comment to that effect.

&gt; &gt; +
&gt; &gt; +# Params: &apos;domClass&apos; struct
&gt; 
&gt; What is this comment about?  

 i have no idea.  it was copied from the JSBindings code, by alp.

&gt; The &quot;Params&quot; suggests it is about the arguments to
&gt; the following function, but the function appears to take three arguments that
&gt; have no relation to this comment.
&gt; 
&gt; &gt; +sub GenerateInterface {
&gt; &gt; +    my $object = shift;
&gt; &gt; +    my $dataNode = shift;
&gt; &gt; +    my $defines = shift;
&gt; &gt; +
&gt; &gt; +    my $name = $dataNode-&gt;name;
&gt; &gt; +
&gt; &gt; +    print &quot;$name\n&quot;;
&gt; 
&gt; What&apos;s the purpose of this print statement?

 i have no idea.  i am reluctant to remove it in case it is important.


&gt; &gt; +
&gt; &gt; +    $object-&gt;Generate($dataNode);
&gt; &gt; +
&gt; &gt; +    # Write changes
&gt; &gt; +    my $fname = &quot;Gdom_&quot; . $name; #decamelize($name);
&gt; 
&gt; The comment here doesn&apos;t seem to add anything.  Why is there commented-out code
&gt; here?

 i have no idea.  perhaps it is there when there was the possibility
 that the DerivedSources/gdom/ files would be named Gdom_interface_name
 rather than GdomInterfaceName.


&gt; &gt; +    $fname =~ s/_//g;
&gt; &gt; +    $object-&gt;WriteData($fname);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +# Params: &apos;idlDocument&apos; struct
&gt; 
&gt; Same comment as for the previous function applies to this comment.

 same response: it&apos;s copied from the JS code, by alp.

here is a copy of the code from which it was copied (CodeGeneratorJS.pm)

you can see the same two-word comments, and the same &quot;Params: &apos;domClass&apos; struct&quot; comments.

if you can find an explanation from the original authors as to why
these files contain these comments, i will be happy to attach them
and add their comments.

alternatively, the comments can be left as-is, as they match up
with the file from which they were copied.  to remove them would
only confuse people who would like to compare the two files to find
out how they work.

i am changing the comment to be the same as in CodeGeneratorJS.pm



sub finish
{
    my $object = shift;

    # Commit changes!
    $object-&gt;WriteData();
}

sub leftShift($$) {
    my ($value, $distance) = @_;
    return (($value &lt;&lt; $distance) &amp; 0xFFFFFFFF);
}

# Params: &apos;domClass&apos; struct
sub GenerateInterface
{
    my $object = shift;
    my $dataNode = shift;
    my $defines = shift;

    # Start actual generation
    $object-&gt;GenerateHeader($dataNode);
    $object-&gt;GenerateImplementation($dataNode);

    my $name = $dataNode-&gt;name;

    # Open files for writing
    my $headerFileName = &quot;$outputDir/JS$name.h&quot;;
    my $implFileName = &quot;$outputDir/JS$name.cpp&quot;;

    open($IMPL, &quot;&gt;$implFileName&quot;) || die &quot;Couldn&apos;t open file $implFileName&quot;;
    open($HEADER, &quot;&gt;$headerFileName&quot;) || die &quot;Couldn&apos;t open file $headerFileName&quot;;
}

# Params: &apos;idlDocument&apos; struct
sub GenerateModule
{
    my $object = shift;
    my $dataNode = shift;

    $module = $dataNode-&gt;module;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133146</commentid>
    <comment_count>19</comment_count>
      <attachid>33086</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-20 08:38:00 -0700</bug_when>
    <thetext>Created attachment 33086
answered review comments

answering review comments.  made functions in file more like the original from which it was copied (CodeGeneratorJS.pm).  added explanation of CodeGeneratorGObjectLibrary1.pm which is included in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133152</commentid>
    <comment_count>20</comment_count>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-07-20 09:30:21 -0700</bug_when>
    <thetext>print $name doesn&apos;t seem to be needed so it&apos;s been removed.
no consequences yet observed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138307</commentid>
    <comment_count>21</comment_count>
      <attachid>33086</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-08 04:07:54 -0700</bug_when>
    <thetext>Comment on attachment 33086
answered review comments

cancelling review whilst auto-patch-maintenance script is written which puts ChangeLog at top of file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138310</commentid>
    <comment_count>22</comment_count>
      <attachid>33086</attachid>
    <who name="Luke Kenneth Casson Leighton">lkcl</who>
    <bug_when>2009-08-08 04:09:03 -0700</bug_when>
    <thetext>Comment on attachment 33086
answered review comments

cancelling review whilst auto-patch-maintenance script is written which puts ChangeLog at top of file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138671</commentid>
    <comment_count>23</comment_count>
      <attachid>34467</attachid>
    <who name="Gour">gour</who>
    <bug_when>2009-08-10 08:20:42 -0700</bug_when>
    <thetext>Created attachment 34467
uploaded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180677</commentid>
    <comment_count>24</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-01-14 04:59:13 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 33590 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33020</attachid>
            <date>2009-07-18 02:33:00 -0700</date>
            <delta_ts>2009-07-20 08:38:00 -0700</delta_ts>
            <desc>adds codegenerator for gobject language bindings</desc>
            <filename>codegen.gobject.patch</filename>
            <type>text/plain</type>
            <size>50503</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEgQEAKKzIwMDktMDctMTggIGxrY2wgPGxrY2xAbGtjbC5uZXQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworICAgICAgICBBZGQgR09iamVjdCBDb2Rl
IEdlbmVyYXRvcgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09i
amVjdC5wbTogQWRkZWQgZ29iamVjdCBiaW5kaW5ncyBhdXRvLWdlbmVyYXRvci4KKwogMjAwOS0w
Ni0wNSAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE1MzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEx1a2Ug
S2VubmV0aCBDYXNzb24gTGVpZ2h0b24gPGxrY2xAbGtjbC5uZXQ+CisjIENvcHlyaWdodCAoQykg
MjAwOCBNYXJ0aW4gU290byA8c290b0BmcmVlZGVza3RvcC5vcmc+CisjIENvcHlyaWdodCAoQykg
MjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorIworIyBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisjIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
IyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisjCisjIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIyBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyMgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCisKK3BhY2thZ2UgQ29kZUdlbmVyYXRvckdPYmplY3Q7CisKKyMgRGVmYXVsdCBMaWNlbmNl
IFRlbXBsYXRlcworbXkgJGxpY2VuY2VUZW1wbGF0ZSA9IDw8ICJFT0YiOworLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsXEBsa2NsLm5l
dD4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscFxAYXRva2VyLmNvbT4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuCisgKi8KK0VPRgorCitteSAlaW1wbEluY2x1
ZGVzID0gKCk7CitteSAlaGRySW5jbHVkZXMgPSAoKTsKK215ICVoZHJQcm9wSW5jbHVkZXMgPSAo
KTsKK215ICVpbXBsVHlwZWRlZnMgPSAoKTsKKworIyBEZWZhdWx0IGNvbnN0cnVjdG9yCitzdWIg
bmV3IHsKKyAgICBteSAkb2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJHJlZmVyZW5jZSA9IHsgfTsK
KworICAgICRjb2RlR2VuZXJhdG9yID0gc2hpZnQ7CisgICAgJG91dHB1dERpciA9IHNoaWZ0Owor
CisgICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7CisgICAgcmV0dXJuICRyZWZlcmVuY2U7
Cit9CisKK3N1YiBmaW5pc2ggeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKK30KKworIyBQYXJh
bXM6ICdkb21DbGFzcycgc3RydWN0CitzdWIgR2VuZXJhdGVJbnRlcmZhY2UgeworICAgIG15ICRv
YmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkZGVmaW5l
cyA9IHNoaWZ0OworCisgICAgbXkgJG5hbWUgPSAkZGF0YU5vZGUtPm5hbWU7CisKKyAgICBwcmlu
dCAiJG5hbWVcbiI7CisKKyAgICAkb2JqZWN0LT5HZW5lcmF0ZSgkZGF0YU5vZGUpOworCisgICAg
IyBXcml0ZSBjaGFuZ2VzCisgICAgbXkgJGZuYW1lID0gIkdkb21fIiAuICRuYW1lOyAjZGVjYW1l
bGl6ZSgkbmFtZSk7CisgICAgJGZuYW1lID1+IHMvXy8vZzsKKyAgICAkb2JqZWN0LT5Xcml0ZURh
dGEoJGZuYW1lKTsKK30KKworIyBQYXJhbXM6ICdpZGxEb2N1bWVudCcgc3RydWN0CitzdWIgR2Vu
ZXJhdGVNb2R1bGUgeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUg
PSBzaGlmdDsKKworICAgICRtb2R1bGUgPSAkZGF0YU5vZGUtPm1vZHVsZTsKK30KKworc3ViIENs
c1RvR09ialR5cGUgeworICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKKyAgICByZXR1cm4gdWMo
ZGVjYW1lbGl6ZSgkY2xhc3NOYW1lKSkKK30KKworc3ViIEdldFBhcmVudENsYXNzTmFtZSB7Cisg
ICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICAjID8/IHF1ZT8/CisgICAgI3JldHVybiAk
ZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifSBpZiAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJMZWdhY3lQYXJlbnQifTsKKyAgICByZXR1cm4gIkdk
b21ET01PYmplY3QiIGlmIEB7JGRhdGFOb2RlLT5wYXJlbnRzfSBlcSAwOworICAgIHJldHVybiAi
R2RvbSIgLiAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJGRhdGFOb2RlLT5wYXJlbnRzKDAp
KTsKK30KKworc3ViIEdldFBhcmVudEdPYmpUeXBlIHsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlm
dDsKKworICAgICMgPz8gcXVlPz8KKyAgICAjcmV0dXJuICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9IGlmICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkxlZ2FjeVBhcmVudCJ9OworICAgIHJldHVybiAiR0RPTV9UWVBFX0RPTV9PQkpFQ1QiIGlm
IEB7JGRhdGFOb2RlLT5wYXJlbnRzfSBlcSAwOworICAgIHJldHVybiAiR0RPTV9UWVBFXyIgLiBD
bHNUb0dPYmpUeXBlKCRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkZGF0YU5vZGUtPnBhcmVu
dHMoMCkpKTsKK30KKworCisjIEFsZ29yaXRobSB0YWtlbiBmcm9tIFN0cmluZzo6Q2FtZWxDYXNl
IDAuMDEKK3N1YiBjYW1lbGl6ZSB7CisgICAgbXkgJHMgPSBzaGlmdDsKKyAgICBqb2luKCcnLCBt
YXB7IHVjZmlyc3QgJF8gfSBzcGxpdCgvKD88PVtBLVphLXpdKV8oPz1bQS1aYS16XSl8XGIvLCAk
cykpOworfQorCisjIEFsZ29yaXRobSB0YWtlbiBmcm9tIFN0cmluZzo6Q2FtZWxDYXNlIDAuMDEK
K3N1YiBkZWNhbWVsaXplIHsKKyAgICBteSAkcyA9IHNoaWZ0OworICAgICRzID1+IHN7KFteYS16
QS1aXT8pKFtBLVpdKikoW0EtWl0pKFthLXpdPyl9eworICAgICAgICBteSAkZmMgPSBwb3MoJHMp
PT0wOworICAgICAgICBteSAoJHAwLCRwMSwkcDIsJHAzKSA9ICgkMSxsYyQyLGxjJDMsJDQpOwor
ICAgICAgICBteSAkdCA9ICRwMCB8fCAkZmMgPyAkcDAgOiAnXyc7CisgICAgICAgICR0IC49ICRw
MyA/ICRwMSA/ICIke3AxfV8kcDIkcDMiIDogIiRwMiRwMyIgOiAiJHAxJHAyIjsKKyAgICAgICAg
JHQ7CisgICAgfWdlOworICAgICRzOworfQorCitzdWIgR2V0SGRyTmFtZSB7CisgICAgbXkgJG5h
bWUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoc2hpZnQpOworCisgICAgcmV0dXJuICJH
ZG9tJG5hbWUiOworfQorCitzdWIgR2V0Q2xhc3NOYW1lIHsKKyAgICBteSAkbmFtZSA9ICRjb2Rl
R2VuZXJhdG9yLT5TdHJpcE1vZHVsZShzaGlmdCk7CisKKyAgICByZXR1cm4gIkdkb20kbmFtZSI7
Cit9CisKK3N1YiBHZXRHSW5jbHVkZUhkciB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBt
eSAkbmFtZSA9IEdldEhkck5hbWUoJHR5cGUpOworICAgICNteSAkbmFtZSA9IGNhbWVsaXplKEdl
dENsYXNzTmFtZSgkdHlwZSkpOworCisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJpbnQiOwor
ICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAibG9uZyI7CisgICAgcmV0dXJuICIiIGlmICR0eXBl
IGVxICJzaG9ydCI7CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJjaGFyIjsKKyAgICByZXR1
cm4gIiIgaWYgJHR5cGUgZXEgImZsb2F0IjsKKyAgICByZXR1cm4gIiIgaWYgJHR5cGUgZXEgImRv
dWJsZSI7CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCI7CisgICAgcmV0dXJu
ICIiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBpbnQiOworICAgIHJldHVybiAiIiBpZiAkdHlwZSBl
cSAidW5zaWduZWQgbG9uZyI7CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBs
b25nIGxvbmciOworICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiOwor
ICAgIHJldHVybiAiIiBpZiAkdHlwZSBlcSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4gIiIg
aWYgJHR5cGUgZXEgIkV2ZW50TGlzdGVuZXIiOworICAgIHJldHVybiAiUmFuZ2UuaCIgaWYgJHR5
cGUgZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAiZ2RvbS9HZG9tQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgiIGlmICR0eXBlIGVxICJET01PYmplY3QiOworICAgIHJldHVybiAiIiBpZiAk
dHlwZSBlcSAidW5zaWduZWQgY2hhciI7CisgICAgcmV0dXJuICIiIGlmICR0eXBlIGVxICJSR0JD
b2xvciI7ICMgWFhYIFRPRE8gLSBET00gY2xhc3Mgd3JhcHBlcgorICAgIHJldHVybiAiZ2xpYi1v
YmplY3QuaCIgaWYgJHR5cGUgZXEgIkRPTVN0cmluZyI7CisgICAgcmV0dXJuICJHZG9tTm9kZS5o
IiBpZiAkdHlwZSBlcSAiRXZlbnRUYXJnZXQiOworCisgICAgcmV0dXJuICJnbGliLW9iamVjdC5o
IiBpZiAkdHlwZSBlcSAiZmxvYXQiOworCisgICAgcmV0dXJuICJnbGliLW9iamVjdC5oIiBpZiAk
dHlwZSBlcSAiYm9vbGVhbiI7CisKKyAgICByZXR1cm4gImdsaWItb2JqZWN0LmgiIGlmICR0eXBl
IGVxICJ2b2lkIjsKKworICAgIHJldHVybiAiJG5hbWUuaCI7Cit9CisKKyMgcmV0dXJucyAxIGlm
IHdlIG5lZWQgdG8gY3JlYXRlIGEgZ29iamVjdCB3cmFwcGVyIGFyb3VuZCB0aGUgcmV0dXJuIHJl
c3VsdAorc3ViIElzR0RPTUNsYXNzVHlwZSB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBt
eSAkbmFtZSA9IEdldENsYXNzTmFtZSgkdHlwZSk7CisKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBl
cSAiRE9NVGltZVN0YW1wIjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAiRE9NU3RyaW5nIjsK
KyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciI7CisgICAgcmV0dXJuIDAg
aWYgJHR5cGUgZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJmbG9h
dCI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImRvdWJsZSI7CisgICAgcmV0dXJuIDAgaWYg
JHR5cGUgZXEgImJvb2xlYW4iOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJjaGFyIjsKKyAg
ICByZXR1cm4gMCBpZiAkdHlwZSBlcSAibG9uZyI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEg
InNob3J0IjsKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAidWNoYXIiOworICAgIHJldHVybiAw
IGlmICR0eXBlIGVxICJ1bnNpZ25lZCI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgImludCI7
CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGludCI7CisgICAgcmV0dXJuIDAg
aWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1
bnNpZ25lZCBsb25nIGxvbmciOworICAgIHJldHVybiAwIGlmICR0eXBlIGVxICJ1bnNpZ25lZCBz
aG9ydCI7CisgICAgcmV0dXJuIDAgaWYgJHR5cGUgZXEgIlJHQkNvbG9yIjsgIyBYWFggVE9ETyAt
IERPTSBjbGFzcyB3cmFwcGVyCisKKyAgICByZXR1cm4gMCBpZiAkdHlwZSBlcSAidm9pZCI7CisK
KyAgICByZXR1cm4gMTsKK30KKworc3ViIEdldFByb3BHVHlwZSB7CisgICAgbXkgJHR5cGUgPSBz
aGlmdDsKKyAgICBteSAkbmFtZSA9IEdldENsYXNzTmFtZSgkdHlwZSk7CisKKyAgICByZXR1cm4g
InN0cmluZyIgaWYgJHR5cGUgZXEgIkRPTVN0cmluZyI7CisgICAgcmV0dXJuICJmbG9hdCIgaWYg
JHR5cGUgZXEgImZsb2F0IjsKKyAgICByZXR1cm4gIm5vdHlldHN1cHBvcnRlZCIgaWYgJHR5cGUg
ZXEgIkNvbXBhcmVIb3ciOworICAgIHJldHVybiAiZG91YmxlIiBpZiAkdHlwZSBlcSAiZG91Ymxl
IjsKKyAgICByZXR1cm4gImJvb2xlYW4iIGlmICR0eXBlIGVxICJib29sZWFuIjsKKyAgICByZXR1
cm4gImNoYXIiIGlmICR0eXBlIGVxICJjaGFyIjsKKyAgICByZXR1cm4gImxvbmciIGlmICR0eXBl
IGVxICJsb25nIjsKKyAgICByZXR1cm4gImludCIgaWYgJHR5cGUgZXEgInNob3J0IjsKKyAgICBy
ZXR1cm4gInVjaGFyIiBpZiAkdHlwZSBlcSAidWNoYXIiOworICAgIHJldHVybiAidWludCIgaWYg
JHR5cGUgZXEgInVuc2lnbmVkIjsKKyAgICByZXR1cm4gImludCIgaWYgJHR5cGUgZXEgImludCI7
CisgICAgcmV0dXJuICJ1aW50IiBpZiAkdHlwZSBlcSAidW5zaWduZWQgaW50IjsKKyAgICByZXR1
cm4gInVpbnQ2NCIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmcgbG9uZyI7CisgICAgcmV0dXJu
ICJ1bG9uZyIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciOworICAgIHJldHVybiAidXNob3J0
IiBpZiAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiOworICAgIHJldHVybiAidWxvbmciIGlmICR0
eXBlIGVxICJSR0JDb2xvciI7ICMgWFhYIFRPRE8gLSBET00gY2xhc3Mgd3JhcHBlcgorCisgICAg
cmV0dXJuICJvYmplY3QiOworfQorCitzdWIgR2V0R1R5cGUgeworICAgIG15ICR0eXBlID0gc2hp
ZnQ7CisgICAgbXkgJG5hbWUgPSBHZXRDbGFzc05hbWUoJHR5cGUpOworICAgICNteSAkbmFtZSA9
IGNhbWVsaXplKEdldENsYXNzTmFtZSgkdHlwZSkpOworCisgICAgcmV0dXJuICJHZG9tTm9kZSAq
IiBpZiAkdHlwZSBlcSAiRXZlbnRUYXJnZXQiOworICAgIHJldHVybiAiZ2NoYXIgKiIgaWYgJHR5
cGUgZXEgIkRPTVN0cmluZyI7CisgICAgcmV0dXJuICJnZmxvYXQiIGlmICR0eXBlIGVxICJmbG9h
dCI7CisgICAgcmV0dXJuICJXZWJDb3JlOjpSYW5nZTo6Q29tcGFyZUhvdyAiIGlmICR0eXBlIGVx
ICJDb21wYXJlSG93IjsKKyAgICByZXR1cm4gImdkb3VibGUiIGlmICR0eXBlIGVxICJkb3VibGUi
OworICAgIHJldHVybiAiZ2Jvb2xlYW4iIGlmICR0eXBlIGVxICJib29sZWFuIjsKKyAgICByZXR1
cm4gImdjaGFyIiBpZiAkdHlwZSBlcSAiY2hhciI7CisgICAgcmV0dXJuICJnbG9uZyIgaWYgJHR5
cGUgZXEgImxvbmciOworICAgIHJldHVybiAiZ3Nob3J0IiBpZiAkdHlwZSBlcSAic2hvcnQiOwor
ICAgIHJldHVybiAiZ3VjaGFyIiBpZiAkdHlwZSBlcSAidWNoYXIiOworICAgIHJldHVybiAiZ3Vp
bnQiIGlmICR0eXBlIGVxICJ1bnNpZ25lZCI7CisgICAgcmV0dXJuICJnaW50IiBpZiAkdHlwZSBl
cSAiaW50IjsKKyAgICByZXR1cm4gImd1aW50IiBpZiAkdHlwZSBlcSAidW5zaWduZWQgaW50IjsK
KyAgICByZXR1cm4gImd1bG9uZyIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmciOworICAgIHJl
dHVybiAiZ3VpbnQ2NCIgaWYgJHR5cGUgZXEgInVuc2lnbmVkIGxvbmcgbG9uZyI7CisgICAgcmV0
dXJuICJndXNob3J0IiBpZiAkdHlwZSBlcSAidW5zaWduZWQgc2hvcnQiOworICAgIHJldHVybiAi
Z3Vsb25nIiBpZiAkdHlwZSBlcSAiUkdCQ29sb3IiOyAjIFhYWCBUT0RPIC0gRE9NIGNsYXNzIHdy
YXBwZXIKKworICAgIHJldHVybiAidm9pZCIgaWYgJHR5cGUgZXEgInZvaWQiOworCisgICAgcmV0
dXJuICIkbmFtZSAqIjsKK30KKworc3ViIGdldEluY0hkciB7CisgICAgbXkgJHR5cGUgPSBzaGlm
dDsKKworICAgIG15ICRpbmNsdWRlSGRyID0gR2V0R0luY2x1ZGVIZHIoJHR5cGUpOworICAgIGlm
ICgkaW5jbHVkZUhkcikgeworICAgICAgICBpZiAoJHR5cGUgZXEgIkV2ZW50VGFyZ2V0Iikgewor
ICAgICAgICAgICAgcmV0dXJuICJHZG9tTm9kZS5oIjsKKyAgICAgICAgfSBlbHNpZiAoJHR5cGUg
ZXEgIkRPTU9iamVjdCIpIHsKKyAgICAgICAgICAgICMgWFhYID8/Pz8gd3RmPz8gOikgY29waWVk
IGZyb20ganNnZW5lcmF0b3IuCisgICAgICAgICAgICByZXR1cm4gIkdkb21DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gJGlu
Y2x1ZGVIZHI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICIiOworfQorCitzdWIgYWRk
UHJvcEluY0hkciB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIG15ICRoZHIgPSBnZXRJ
bmNIZHIoJHR5cGUpOworICAgIGlmICgkaGRyIG5lICIiKSB7CisgICAgICAgIGlmIChJc0dET01D
bGFzc1R5cGUoJHR5cGUpKSB7CisgICAgICAgICAgICAkaGRyID0gc3Vic3RyKCRoZHIsIDAsIGxl
bmd0aCgkaGRyKS0yKTsKKyAgICAgICAgICAgICRoZHJQcm9wSW5jbHVkZXN7Imdkb20vIi4kaGRy
LiIuaCJ9ID0gMTsKKyAgICAgICAgICAgICRoZHJQcm9wSW5jbHVkZXN7Imdkb20vIi4kaGRyLiJQ
cml2YXRlLmgifSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkaGRyUHJvcElu
Y2x1ZGVzeyRoZHJ9ID0gMTsKKyAgICAgICAgfQorICAgIH0KKworfQorCitzdWIgYWRkSW5jSGRy
IHsKKyAgICBteSAkdHlwZSA9IHNoaWZ0OworCisgICAgbXkgJGhkciA9IGdldEluY0hkcigkdHlw
ZSk7CisgICAgaWYgKCRoZHIgbmUgIiIpIHsKKyAgICAgICAgaWYgKElzR0RPTUNsYXNzVHlwZSgk
dHlwZSkpIHsKKyAgICAgICAgICAgICRoZHJJbmNsdWRlc3siZ2RvbS8kaGRyIn0gPSAxOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgJGhkckluY2x1ZGVzeyRoZHJ9ID0gMTsKKyAgICAg
ICAgfQorICAgIH0KKworfQorCitzdWIgYWRkSW5jQm9keSB7CisgICAgbXkgJHR5cGUgPSBzaGlm
dDsKKworICAgIG15ICRoZHIgPSBnZXRJbmNIZHIoJHR5cGUpOworICAgIGlmICgkaGRyIG5lICIi
KSB7CisgICAgICAgIGlmIChJc0dET01DbGFzc1R5cGUoJHR5cGUpKSB7CisgICAgICAgICAgICAk
aW1wbEluY2x1ZGVzeyJnZG9tLyRoZHIifSA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyRoZHJ9ID0gMTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3Vi
IEdldFByaXZGbiB7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKyAgICBteSAkbGNh
c2VfaWZhY2VuYW1lID0gc2hpZnQ7CisgICAgbXkgJHJlcyA9IHNoaWZ0OworICAgIG15ICRwYXJt
ID0gc2hpZnQ7CisKKyAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkV2ZW50VGFyZ2V0Iikgewor
ICAgICAgICByZXR1cm4gIldlYkNvcmU6Ok5vZGUgKiAkcmVzID0gV2ViS2l0Ojpjb3JlKHNlbGYp
OyI7CisgICAgfQorICAgIHJldHVybiAiV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqICRyZXMg
PSBXZWJLaXQ6OmNvcmUoJHBhcm0pOyI7Cit9CisKK3N1YiBza2lwUHJvcFRlbXBvcmFyaWx5IHsK
KyAgICBteSAkdHlwZSA9IHNoaWZ0OworICAgIG15ICRwcm9wX3R5cGUgPSBzaGlmdDsKKworICAg
ICMgc2tpcCBNZWRpYUxpc3QKKyAgICBpZiAoJHByb3BfdHlwZSBlcSAic3R5bGVzaGVldHM6Ok1l
ZGlhTGlzdCIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgIyBza2lwIE9iamVj
dAorICAgIGlmICgkcHJvcF90eXBlIGVxICJPYmplY3QiKSB7CisgICAgICAgIHJldHVybiAxOwor
ICAgIH0KKworICAgICMgc2tpcCBFdmVudAorICAgIGlmICgkcHJvcF90eXBlIGVxICJFdmVudCIp
IHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgIyBza2lwIENyeXB0bworICAgIGlm
ICgkcHJvcF90eXBlIGVxICJDcnlwdG8iKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKwor
ICAgICMgc2tpcCBDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbgorICAgIGlmICgkcHJvcF90eXBlIGVx
ICJDU1NWYXJpYWJsZXNEZWNsYXJhdGlvbiIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQor
CisgICAgIyBza2lwIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uCisgICAgI2lmICgkcHJvcF90
eXBlIGVxICJDU1NTdHlsZURlY2xhcmF0aW9uIikgeworICAgICMgICAgcmV0dXJuIDE7CisgICAg
I30KKworICAgICMgc2tpcCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbgorICAgICNpZiAoJHBy
b3BfdHlwZSBlcSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24iKSB7CisgICAgIyAgICByZXR1
cm4gMTsKKyAgICAjfQorCisgICAgIyBza2lwIEV2ZW50TGlzdGVuZXIKKyAgICBpZiAoJHByb3Bf
dHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisg
ICAgIyBza2lwIERPTVdpbmRvdworICAgICNpZiAoJHByb3BfdHlwZSBlcSAiRE9NV2luZG93Iikg
eworICAgICMgICAgcmV0dXJuIDE7CisgICAgI30KKworICAgICMgc2tpcCBDb25zdHJ1Y3RvcnMg
KHdoYXRldmVyIHRoZXkgYXJlKSBmb3Igbm93LgorICAgIGlmICgkcHJvcF90eXBlID1+IC9Db25z
dHJ1Y3RvciQvKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICMgY2FudmFzMmQu
Li4uCisgICAgaWYgKCRwcm9wX3R5cGUgZXEgImN1c3RvbSIpIHsKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgfQorCisgICAgaWYgKCRwcm9wX3R5cGUgZXEgIkFycmF5IikgeworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisKKyAgICBpZiAoJHByb3BfdHlwZSBlcSAiRE9NVGltZVN0YW1wIikgewor
ICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAjIFRPRE86IFNWRworICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNQb2RUeXBlKCR0eXBlKSB8fCAkY29kZUdlbmVyYXRvci0+SXNTVkdBbmlt
YXRlZFR5cGUoJHR5cGUpKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4g
MDsKK30KKworc3ViIFVzZXNNYW51YWxUb0dET01JbXBsZW1lbnRhdGlvbiB7CisgICAgbXkgJHR5
cGUgPSBzaGlmdDsKKworICAgICMgc2tpcHBlZCBvdXQgQ2FudmFzUGl4ZWxBcnJheSAtIHNlZSBK
U0NhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwIGZvciB3aHkuCisgICAgcmV0dXJuIDEgaWYgJHR5
cGUgZXEgIk5vZGUiIG9yICR0eXBlIGVxICJEb2N1bWVudCIgb3IgJHR5cGUgZXEgIkhUTUxDb2xs
ZWN0aW9uIiBvcgorICAgICAgJHR5cGUgZXEgIlNWR1BhdGhTZWciIG9yICR0eXBlIGVxICJTdHls
ZVNoZWV0IiBvciAkdHlwZSBlcSAiQ1NTUnVsZSIgb3IgJHR5cGUgZXEgIkNTU1ZhbHVlIiBvcgor
ICAgICAgJHR5cGUgZXEgIk9iamVjdCIgb3IKKwkkdHlwZSBlcSAiRXZlbnQiIG9yICR0eXBlIGVx
ICJFbGVtZW50IiBvciAkdHlwZSBlcSAiVGV4dCI7CisgICAgcmV0dXJuIDA7Cit9CisKKworIyBH
ZW5lcmF0ZSBoZWFkZXIgYW5kIGltcGwKK3N1YiBHZW5lcmF0ZSB7CisgICAgbXkgJG9iamVjdCA9
IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworCisgICAgbXkgJGhhc0xlZ2FjeVBh
cmVudCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkxlZ2FjeVBhcmVudCJ9Owor
ICAgIG15ICRoYXNSZWFsUGFyZW50ID0gQHskZGF0YU5vZGUtPnBhcmVudHN9ID4gMDsKKyAgICBt
eSAkaGFzUGFyZW50ID0gJGhhc0xlZ2FjeVBhcmVudCB8fCAkaGFzUmVhbFBhcmVudDsKKyAgICBt
eSAkcGFyZW50Q2xhc3NOYW1lID0gR2V0UGFyZW50Q2xhc3NOYW1lKCRkYXRhTm9kZSk7CisgICAg
bXkgJHBhcmVudEdPYmpUeXBlID0gR2V0UGFyZW50R09ialR5cGUoJGRhdGFOb2RlKTsKKyAgICBt
eSAkaW50ZXJmYWNlTmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKKyAgICBteSAkY2xhc3NOYW1lID0g
R2V0Q2xhc3NOYW1lKCRpbnRlcmZhY2VOYW1lKTsKKyAgICBteSAkaGRyTmFtZSA9IEdldEhkck5h
bWUoJGludGVyZmFjZU5hbWUpOworCisgICAgIyBBZGQgdGhlIGRlZmF1bHQgaW1wbCBoZWFkZXIg
dGVtcGxhdGUKKyAgICBAY1ByZWZpeCA9IHNwbGl0KCJcciIsICRsaWNlbmNlVGVtcGxhdGUpOwor
ICAgIHB1c2goQGNQcmVmaXgsICJcbiIpOworCisgICAgJGltcGxJbmNsdWRlc3siR0RPTUJpbmRp
bmcuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJnZG9tLyRoZHJOYW1lLmgifSA9IDE7Cisg
ICAgJGltcGxJbmNsdWRlc3siZ2RvbS8ke2hkck5hbWV9UHJpdmF0ZS5oIn0gPSAxOworCisgICAg
bXkgJHBhcmVudEludGVyZmFjZU5hbWUgPSAiRE9NT2JqZWN0IjsKKyAgICBteSAkcGFyZW50R0lm
YWNlTmFtZSA9ICJHRE9NT2JqZWN0IjsKKyAgICBteSAkcGFyZW50SGRyTmFtZSA9ICJHZG9tRE9N
T2JqZWN0IjsKKyAgICBpZiAoJHBhcmVudENsYXNzTmFtZSBuZSAiR09iamVjdCIpIHsKKyAgICAg
ICAgJHBhcmVudEludGVyZmFjZU5hbWUgPSBzdWJzdHIoJHBhcmVudENsYXNzTmFtZSwgNCk7Cisg
ICAgICAgIGlmICgkcGFyZW50SW50ZXJmYWNlTmFtZSBuZSAiRE9NT2JqZWN0IikgeworICAgICAg
ICAgICAgJHBhcmVudEdJZmFjZU5hbWUgPSAiR0RPTSIuc3Vic3RyKCRwYXJlbnRDbGFzc05hbWUs
IDQpOworICAgICAgICAgICAgJHBhcmVudEhkck5hbWUgPSBHZXRIZHJOYW1lKCRwYXJlbnRJbnRl
cmZhY2VOYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRwYXJlbnRHSWZhY2VO
YW1lID0gIkdET01PYmplY3QiOworICAgICAgICB9CisgICAgICAgICRpbXBsSW5jbHVkZXN7Imdk
b20vJHtwYXJlbnRIZHJOYW1lfS5oIn0gPSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJnZG9t
LyR7cGFyZW50SGRyTmFtZX1Qcml2YXRlLmgifSA9IDE7CisgICAgICAgICRoZHJJbmNsdWRlc3si
Z2RvbS8ke3BhcmVudEhkck5hbWV9LmgifSA9IDE7CisgICAgICAgICMkaGRySW5jbHVkZXN7IlBy
aXZhdGUke3BhcmVudEhkck5hbWV9LmgifSA9IDA7CisgICAgfQorCisgICAgIyBUT0RPIC0gbWFr
ZSB0aGVzZSBvbmx5IGluY2x1ZGUgd2hlcmUgbmVlZGVkLCBsaWtld2lzZSB0aGUKKyAgICAjIGZ1
bmN0aW9uIGRlY2xhcmF0aW9ucyB0b0dET00sIHRvbworICAgICRpbXBsSW5jbHVkZXN7Ik5vZGUu
aCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJOb2RlTGlzdC5oIn0gPSAxOworICAgICRpbXBs
SW5jbHVkZXN7IkVsZW1lbnQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJDU1NWYWx1ZS5o
In0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNTU1J1bGUuaCJ9ID0gMTsKKyAgICAkaW1wbElu
Y2x1ZGVzeyJDU1NSdWxlTGlzdC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNTU1N0eWxl
RGVjbGFyYXRpb24uaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJIVE1MQ29sbGVjdGlvbi5o
In0gPSAxOworICAgICMkaW1wbEluY2x1ZGVzeyJTVkdQYXRoU2VnLmgifSA9IDE7CisgICAgJGlt
cGxJbmNsdWRlc3siU3R5bGVTaGVldC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkV2ZW50
LmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siQ2FudmFzUGl4ZWxBcnJheS5oIn0gPSAxOwor
ICAgICRpbXBsSW5jbHVkZXN7IkRPTVdpbmRvdy5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7
IlRleHQuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJDb3VudGVyLmgifSA9IDE7CisgICAg
JGltcGxJbmNsdWRlc3siUmVjdC5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkltYWdlRGF0
YS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkNhbnZhc0dyYWRpZW50LmgifSA9IDE7Cisg
ICAgJGltcGxJbmNsdWRlc3siVGV4dE1ldHJpY3MuaCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVz
eyJEYXRhYmFzZS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkRPTVNlbGVjdGlvbi5oIn0g
PSAxOworICAgICRpbXBsSW5jbHVkZXN7IlhQYXRoUmVzdWx0LmgifSA9IDE7CisgICAgJGltcGxJ
bmNsdWRlc3siZ2RvbS9HU3RyaW5nQ29udmVydC5oIn0gPSAxOworCisgICAgcHVzaChAY0JvZHks
ICJuYW1lc3BhY2UgV2ViS2l0IHtcbiIpOworCisgICAgIyBHZXQgY29ycmVjdCBwYXNzL3N0b3Jl
IHR5cGVzIHJlc3BlY3RpbmcgUE9EVHlwZSBmbGFnCisgICAgbXkgJHBvZFR5cGUgPSAkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJQT0RUeXBlIn07CisgICAgbXkgJHBhc3NUeXBlID0g
JHBvZFR5cGUgPyAiSlNTVkdQT0RUeXBlV3JhcHBlcjwkcG9kVHlwZT4qIiA6ICIkaW50ZXJmYWNl
TmFtZSoiOworCisgICAgaWYgKCFVc2VzTWFudWFsVG9HRE9NSW1wbGVtZW50YXRpb24oJGludGVy
ZmFjZU5hbWUpKSB7CisJJGltcGxDb250ZW50ID0gPDwgIkVPRiI7CitncG9pbnRlciB0b0dET00o
V2ViQ29yZTo6JHBhc3NUeXBlIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKwlyZXR1cm4gTlVMTDsK
KworICAgIGlmIChncG9pbnRlciByZXQgPSBHRE9NT2JqZWN0Q2FjaGU6OmdldERPTU9iamVjdChv
YmopKQorCXJldHVybiByZXQ7CisKKyAgICByZXR1cm4gR0RPTU9iamVjdENhY2hlOjpwdXRET01P
YmplY3Qob2JqLCBXZWJLaXQ6OndyYXAke2ludGVyZmFjZU5hbWV9KG9iaikpOworfQorRU9GCisK
KyAgICAgICAgcHVzaChAY0JvZHksICRpbXBsQ29udGVudCk7CisgICAgfQorCisgICAgbXkgJGlt
cGxDb250ZW50ID0gIiI7CisKKyAgICBwdXNoKEBjQm9keSwgIn0gLyogbmFtZXNwYWNlIFdlYktp
dCAqL1xuIik7CisKKyAgICAjIFhYWCBUT0RPIHB1c2goQGNCb2R5LCAidXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7XG5cbiIpOworICAgIHB1c2goQGNCb2R5LCAiZXh0ZXJuIFwiQ1wiIHtcblxuIik7
CisKKyAgICAjIEFkZCB0aGUgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUKKyAgICBAaFByZWZpeCA9
IHNwbGl0KCJcciIsICRsaWNlbmNlVGVtcGxhdGUpOworICAgICNwdXNoKEBoUHJlZml4LCAiXG4i
KTsKKworICAgICMgSGVhZGVyIGd1YXJkCisgICAgbXkgJGd1YXJkID0gIl9fIiAuICRjbGFzc05h
bWUgLiAiX0hfXyI7CisKKyAgICBteSAkY2xzQ2FwcyA9IHN1YnN0cihDbHNUb0dPYmpUeXBlKCRj
bGFzc05hbWUpLCA1KTsKKyAgICBteSAkbGNhc2VfaWZhY2VuYW1lID0gImdkb21fIiAuIGRlY2Ft
ZWxpemUoJGludGVyZmFjZU5hbWUpOworICAgICNteSAkcGFyZW50Q2xzQ2FwcyA9ICJHRE9NXyIg
LiBDbHNUb0dPYmpUeXBlKCRwYXJlbnRJbnRlcmZhY2VOYW1lKTsKKworICAgIEBoUHJlZml4R3Vh
cmQgPSA8PCAiRU9GIjsKKyNpZm5kZWYgJGd1YXJkCisjZGVmaW5lICRndWFyZAorRU9GCisKKyAg
ICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKK0dfQkVHSU5fREVDTFMKKworRU9GCisKKyAgICBw
dXNoKEBoQm9keVByZSwgJGltcGxDb250ZW50KTsKKworICAgICRpbXBsQ29udGVudCA9IDw8ICJF
T0YiOworCisjZGVmaW5lIEdET01fVFlQRV8ke2Nsc0NhcHN9ICAgICAgICAgICAgKCR7bGNhc2Vf
aWZhY2VuYW1lfV9nZXRfdHlwZSgpKQorI2RlZmluZSBHRE9NXyR7Y2xzQ2Fwc30ob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgR0RPTV9UWVBFXyR7Y2xz
Q2Fwc30sICR7Y2xhc3NOYW1lfSkpCisjZGVmaW5lIEdET01fJHtjbHNDYXBzfV9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBHRE9NX1RZUEVfJHtjbHND
YXBzfSwgJGNsYXNzTmFtZSlDbGFzcykKKyNkZWZpbmUgR0RPTV9JU18ke2Nsc0NhcHN9KG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIEdET01fVFlQRV8ke2Ns
c0NhcHN9KSkKKyNkZWZpbmUgR0RPTV9JU18ke2Nsc0NhcHN9X0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIEdET01fVFlQRV8ke2Nsc0NhcHN9KSkKKyNkZWZp
bmUgR0RPTV8ke2Nsc0NhcHN9X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIEdET01fVFlQRV8ke2Nsc0NhcHN9LCAke2NsYXNzTmFtZX1DbGFzcykpCisK
K3R5cGVkZWYgc3RydWN0IF8ke2NsYXNzTmFtZX1Qcml2YXRlICR7Y2xhc3NOYW1lfVByaXZhdGU7
CisKK3N0cnVjdCBfJHtjbGFzc05hbWV9IHsKKyAgICAke3BhcmVudENsYXNzTmFtZX0gcGFyZW50
X2luc3RhbmNlOworICAgICR7Y2xhc3NOYW1lfVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3Qg
XyR7Y2xhc3NOYW1lfUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQorJHtsY2FzZV9pZmFjZW5hbWV9X2dldF90eXBlICh2b2lkKTsK
KworRU9GCisKKyAgICBwdXNoKEBoQm9keSwgJGltcGxDb250ZW50KTsKKworICAgICRpbXBsQ29u
dGVudCA9IDw8ICJFT0YiOworI2lmbmRlZiAke2d1YXJkfV9QUk9QXworI2RlZmluZSAke2d1YXJk
fV9QUk9QXworRU9GCisKKyAgICBwdXNoKEBoQm9keVByb3BQcmUsICRpbXBsQ29udGVudCk7CisK
KyAgICBwdXNoKEBoQm9keVByb3AsICJHX0JFR0lOX0RFQ0xTXG4iKTsKKworICAgICRoZHJQcm9w
SW5jbHVkZXsiZ2xpYi1vYmplY3QuaCJ9ID0gMTsKKyAgICAkaGRyUHJvcEluY2x1ZGV7Imdkb20v
JHtwYXJlbnRIZHJOYW1lfVByaXZhdGUuaCJ9ID0gMTsKKyAgICAkaGRyUHJvcEluY2x1ZGV7IiR7
aW50ZXJmYWNlTmFtZX0uaCJ9ID0gMTsKKworICAgICRpbXBsSW5jbHVkZXN7Imdkb20vJHtwYXJl
bnRIZHJOYW1lfS5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IiR7aW50ZXJmYWNlTmFtZX0u
aCJ9ID0gMTsKKworICAgICRpbXBsVHlwZWRlZnN7IiRjbGFzc05hbWUifSA9IDE7CisgICAgJGlt
cGxUeXBlZGVmc3siJHtjbGFzc05hbWV9Q2xhc3MifSA9IDE7CisKKyAgICAkaW1wbENvbnRlbnQg
PSA8PCAiRU9GIjsKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJnbGliLW9iamVjdC5o
IgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdHByaXZhdGUuaD4gCisjaW5jbHVkZSAiRE9NV2luZG93LmgiIC8qIHl1a2s6IFRPRE8gLSBt
YWtlIHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNsdWRlICJOb2RlLmgiIC8qIHl1a2s6IFRPRE8gLSBt
YWtlIHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIgLyogeXVrazog
VE9ETyAtIG1ha2UgdGhpcyBvcHRpb25hbCAqLworI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIg
LyogeXVrazogVE9ETyAtIG1ha2UgdGhpcyBvcHRpb25hbCAqLworI2luY2x1ZGUgIkNhbnZhc0dy
YWRpZW50LmgiIC8qIHl1a2s6IFRPRE8gLSBtYWtlIHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNsdWRl
ICJDYW52YXNTdHlsZS5oIiAvKiB5dWtrOiBUT0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICovCisj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiIC8qIHl1a2s6IFRPRE8gLSBtYWtl
IHRoaXMgb3B0aW9uYWwgKi8KKyNpbmNsdWRlIDxnZG9tL0dkb21ET01PYmplY3RQcml2YXRlLmg+
IC8qIHl1a2s6IFRPRE8gLSBtYWtlIHRoaXMgb3B0aW9uYWwgKi8KKy8qI2luY2x1ZGUgPGdkb20v
R2RvbUV2ZW50VGFyZ2V0Tm9kZS5oPiB5dWtrOiBUT0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsICov
CisvKiAjaW5jbHVkZSA8Z2RvbS9HZG9tRXZlbnRUYXJnZXROb2RlUHJpdmF0ZS5oPiB5dWtrOiBU
T0RPIC0gbWFrZSB0aGlzIG9wdGlvbmFsIG9uIEV2ZW50VGFyZ2V0Ki8KKyNpbmNsdWRlICIke2lu
dGVyZmFjZU5hbWV9LmgiCisjaW5jbHVkZSA8Z2RvbS8ke2hkck5hbWV9Lmg+CisjaW5jbHVkZSA8
Z2RvbS8ke2hkck5hbWV9UHJpdmF0ZS5oPgorI2luY2x1ZGUgPGdkb20vJHtoZHJOYW1lfXByb3Bz
Lmg+CisKKyNpbmNsdWRlICJnZG9tL0dTdHJpbmdDb252ZXJ0LmgiCisKKyNpbmNsdWRlICJDYW52
YXNQaXhlbEFycmF5LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisj
aW5jbHVkZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiSFRN
TENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisjaW5jbHVkZSA8Z2RvbS9HZG9tRXZl
bnQuaD4KKworCitFT0YKKworICAgIHB1c2goQGNCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKKwor
ICAgICRpbXBsQ29udGVudCA9IDw8ICJFT0YiOworCitHX0JFR0lOX0RFQ0xTCisKK0dfREVGSU5F
X1RZUEUoJHtjbGFzc05hbWV9LCAke2xjYXNlX2lmYWNlbmFtZX0sICR7cGFyZW50R09ialR5cGV9
KTsKKworc3RydWN0IF8ke2NsYXNzTmFtZX1Qcml2YXRlIHsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
JHtpbnRlcmZhY2VOYW1lfT4gY29yZU9iamVjdDsKK307CisKK0dfRU5EX0RFQ0xTCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCiske2NsYXNzTmFtZX0gKgord3JhcCR7aW50ZXJmYWNlTmFtZX0oUGFz
c1JlZlB0cjxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9PiBwcnBDb3JlT2JqZWN0KQoreworICAg
IFJlZlB0cjxXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9PiBjb3JlT2JqZWN0ID0gcHJwQ29yZU9i
amVjdDsKKworICAgICR7Y2xhc3NOYW1lfSAqd3JhcHBlciA9IEdET01fJHtjbHNDYXBzfShnX29i
amVjdF9uZXcoR0RPTV9UWVBFXyR7Y2xzQ2Fwc30sIE5VTEwpKTsKKyAgICBHZG9tRE9NT2JqZWN0
UHJpdmF0ZSogcHJpdiA9IEdET01fRE9NX09CSkVDVF9HRVRfUFJJVkFURShHRE9NX0RPTV9PQkpF
Q1Qod3JhcHBlcikpOworCisgICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqcmF3Q29yZU9i
amVjdCA9IGNvcmVPYmplY3QuZ2V0KCk7CisgICAgcmF3Q29yZU9iamVjdC0+cmVmKCk7CisgICAg
cHJpdi0+Y29yZU9iamVjdCA9IHJhd0NvcmVPYmplY3Q7CisKKyAgICByZXR1cm4gd3JhcHBlcjsK
K30KKworV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqCitjb3JlKCR7Y2xhc3NOYW1lfSAqcmVx
dWVzdCkKK3sKKyAgICBpZiAocmVxdWVzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsK
KworICAgIEdkb21ET01PYmplY3RQcml2YXRlKiBwcml2ID0gR0RPTV9ET01fT0JKRUNUX0dFVF9Q
UklWQVRFKEdET01fRE9NX09CSkVDVChyZXF1ZXN0KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0gKj4ocHJpdi0+Y29yZU9iamVjdCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCitFT0YKKyAgICBwdXNoKEBjQm9keVByaXYsICRpbXBsQ29u
dGVudCk7CisKKyAgICAjIFByb3BlcnRpZXMKKyAgICBteSAkZnVuY3Rpb25OYW1lUHJlZml4ID0g
JGxjYXNlX2lmYWNlbmFtZTsgCisgIFNLSVBQUk9QOiBmb3JlYWNoIG15ICRhdHRyaWJ1dGUgKEB7
JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICBteSAkcHJvcF9uYW1lID0gJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLT5uYW1lOworICAgICAgICBteSAkcHJvcE5hbWUgPSBkZWNhbWVsaXpl
KCRwcm9wX25hbWUpOworICAgICAgICBteSAkcHJvcF90eXBlID0gJGF0dHJpYnV0ZS0+c2lnbmF0
dXJlLT50eXBlOworICAgICAgICBteSAkdHlwZSA9IEdldEdUeXBlKCRwcm9wX3R5cGUpOworICAg
ICAgICBteSAkZnVuY3Rpb25TaWcgPSAiJGNsYXNzTmFtZSAqdGhpeiI7CisjICAgICAgICBteSAk
Y3VzdG9tID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tIn07CisjCisjICAgICAgICBpZiAoJHByb3BfbmFtZSBuZSAncmVzcG9uc2VUZXh0JykgeyAj
IGFsbG93IFhNTEh0dHBSZXF1ZXN0IHJlc3BvbnNlVGV4dAorIyAgICAgICAgICAgIGlmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21HZXR0ZXIifSkg
eworIyAgICAgICAgICAgICAgICBuZXh0IFNLSVBQUk9QOworIyAgICAgICAgICAgIH0KKyMgICAg
ICAgIH0KKyAgICAgICAgJGltcGxJbmNsdWRlc3siQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCJ9ID0gMSBpZiAkdHlwZSBlcSAiQ1NTU3R5bGVEZWNsYXJhdGlvbiI7CisgICAgICAgICRpbXBs
SW5jbHVkZXN7IkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgifSA9IDEgaWYgJHByb3BfdHlw
ZSBlcSAiQ1NTU3R5bGVEZWNsYXJhdGlvbiI7CisKKyAgICAgICAgIyBza2lwIEphdmFTY3JpcHRD
YWxsRnJhbWUudHlwZQorICAgICAgICBpZiAoKCRwcm9wX25hbWUgZXEgInR5cGUiKSAmJiAoJGlu
dGVyZmFjZU5hbWUgZXEgIkphdmFTY3JpcHRDYWxsRnJhbWUiKSl7CisgICAgICAgICAgICBuZXh0
IFNLSVBQUk9QOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNraXBQcm9wVGVtcG9yYXJpbHko
JHR5cGUsICRwcm9wX3R5cGUpKSB7CisgICAgICAgICAgICBuZXh0IFNLSVBQUk9QOworICAgICAg
ICB9CisKKyAgICAgICAgYWRkUHJvcEluY0hkcigkcHJvcF90eXBlKTsKKworICAgICAgICAjcHVz
aChAaEJvZHlQcm9wLCAiV0VCS0lUX0FQSSAkdHlwZVxuJGZ1bmN0aW9uTmFtZVByZWZpeCIgLiAi
X3Byb3BfZ2V0XyIgLiAiJHByb3BOYW1lICgkZnVuY3Rpb25TaWcpO1xuXG4iKTsKKworICAgICAg
ICAjcHVzaChAaEJvZHlQcm9wLCAiV0VCS0lUX0FQSSB2b2lkXG4kZnVuY3Rpb25OYW1lUHJlZml4
IiAuICJfcHJvcF9zZXRfIiAuICIkcHJvcE5hbWUgKCRmdW5jdGlvblNpZywgJHR5cGUiIC4gInZh
bHVlKTtcblxuIik7CisgICAgfQorCisgICAgIyBQcm9wZXJ0aWVzCisgICAgJGltcGxDb250ZW50
ID0gPDwgIkVPRiI7CitHX0JFR0lOX0RFQ0xTCisKK2VudW0geworICAgIEJST1dTRVJfRVZFTlQs
CisgICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWludCBldmVudF9zaWduYWxzW0xBU1Rf
U0lHTkFMXSA9IHsgMCwgfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorRU9GCisgICAgcHVzaChA
Y0JvZHlQcml2LCAkaW1wbENvbnRlbnQpOworCisgICAgbXkgQHR4dF9pbnN0YWxsX3Byb3BzID0g
KCk7CisgICAgbXkgQHR4dF9zZXRfcHJvcHMgPSAoKTsKKyAgICBteSBAdHh0X2dldF9wcm9wcyA9
ICgpOworCisgICAgbXkgJHByaXZfZm4gPSBHZXRQcml2Rm4oJGludGVyZmFjZU5hbWUsICR7bGNh
c2VfaWZhY2VuYW1lfSwgImdzZWxmIiwgInNlbGYiKTsKKworICAgIG15ICR0eHRfZ2V0X3Byb3Ag
PSA8PCAiRU9GIjsKK3N0YXRpYyB2b2lkICR7bGNhc2VfaWZhY2VuYW1lfV9fZ2V0X3Byb3BlcnR5
X2ZuKEdPYmplY3QgKiBvYmplY3QsIGd1aW50IHByb3BfaWQsCisgICAgICAgICAgICAgICAgICAg
ICBHVmFsdWUgKiB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgIEdQYXJhbVNwZWMgKiBwc3Bl
YykKK3sKKyAgICAke2NsYXNzTmFtZX0gKnNlbGYgPSBHRE9NXyR7Y2xzQ2Fwc30ob2JqZWN0KTsK
KyAgICAkcHJpdl9mbgorICAgIHN3aXRjaCAocHJvcF9pZCkgeworRU9GCisgICAgcHVzaChAdHh0
X2dldF9wcm9wcywgJHR4dF9nZXRfcHJvcCk7CisKKyAgICBteSAkdHh0X3NldF9wcm9wID0gPDwg
IkVPRiI7CitzdGF0aWMgdm9pZCAke2xjYXNlX2lmYWNlbmFtZX1fX3NldF9wcm9wZXJ0eV9mbihH
T2JqZWN0ICogb2JqZWN0LCBndWludCBwcm9wX2lkLAorICAgICAgICAgICAgICAgICAgICAgY29u
c3QgR1ZhbHVlICogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICBHUGFyYW1TcGVjICogcHNw
ZWMpCit7CisgICAgJHtjbGFzc05hbWV9ICpzZWxmID0gR0RPTV8ke2Nsc0NhcHN9KG9iamVjdCk7
CisgICAgJHByaXZfZm4KKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKK0VPRgorICAgIHB1c2goQHR4
dF9zZXRfcHJvcHMsICR0eHRfc2V0X3Byb3ApOworICAgICMgSXRlcmF0ZSBvdmVyIHRoZSBpbnRl
cmZhY2UgYXR0cmlidXRlcyBhbmQgZ2VuZXJhdGUgYSBwcm9wZXJ0eSBmb3IKKyAgICAjIGVhY2gg
b25lIG9mIHRoZW0uCisgIFNLSVBFTlVNOgorICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHsk
ZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7CisgICAgICAgIG15ICRwcm9wX25hbWUgPSAkYXR0cmli
dXRlLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIG15ICRzZXRwcm9wX25hbWVfZm4gPSAkY29k
ZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkcHJvcF9uYW1lKTsKKyAgICAgICAgbXkgJGdldHByb3Bf
bmFtZV9mbiA9ICRjb2RlR2VuZXJhdG9yLT5XS19sY2ZpcnN0KCRwcm9wX25hbWUpOworCisgICAg
ICAgIG15ICRwcm9wTmFtZSA9IGRlY2FtZWxpemUoJHByb3BfbmFtZSk7CisgICAgICAgIG15ICRw
cm9wQ2FwcyA9IHVjKCRwcm9wTmFtZSk7CisgICAgICAgIG15ICRwcm9wX3R5cGUgPSAkYXR0cmli
dXRlLT5zaWduYXR1cmUtPnR5cGU7CisgICAgICAgIG15ICR0eXBlID0gR2V0R1R5cGUoJHByb3Bf
dHlwZSk7CisgICAgICAgIG15ICR7cHJvcEVudW19ID0gIlBST1BfJHtwcm9wQ2Fwc30iOworICAg
ICAgICBteSAke3Byb3BfZ3R5cGV9ID0gZGVjYW1lbGl6ZSgkcHJvcF90eXBlKTsKKyAgICAgICAg
aWYgKCRwcm9wX2d0eXBlIGVxICJldmVudF90YXJnZXQiKSB7CisgICAgICAgICAgICAkcHJvcF9n
dHlwZSA9ICJub2RlIjsKKyAgICAgICAgfQorICAgICAgICBteSAke3Byb3BHVHlwZX0gPSB1Yygk
cHJvcF9ndHlwZSk7CisgICAgICAgIG15ICRsY2FzZV9ndHlwZW5hbWUgPSAiZ2RvbV8iIC4gJHBy
b3BfZ3R5cGU7CisKKyMKKyMgICAgICAgIG15ICRjdXN0b20gPSAkYXR0cmlidXRlLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifTsKKyMKKyMgICAgICAgIGlmICgkcHJv
cF9uYW1lIG5lICdyZXNwb25zZVRleHQnKSB7ICMgYWxsb3cgWE1MSHR0cFJlcXVlc3QgcmVzcG9u
c2VUZXh0CisjICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUdldHRlciJ9KSB7CisjICAgICAgICAgICAgICAgIG5leHQgU0tJ
UEVOVU07CisjICAgICAgICAgICAgfQorIyAgICAgICAgfQorCisgICAgICAgICRpbXBsSW5jbHVk
ZXN7IkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgifSA9IDEgaWYgJHR5cGUgZXEgIkNTU1N0
eWxlRGVjbGFyYXRpb24iOworCisgICAgICAgICMgc2tpcCBKYXZhU2NyaXB0Q2FsbEZyYW1lLnR5
cGUKKyAgICAgICAgaWYgKCgkcHJvcF9uYW1lIGVxICJ0eXBlIikgJiYgKCRpbnRlcmZhY2VOYW1l
IGVxICJKYXZhU2NyaXB0Q2FsbEZyYW1lIikpeworICAgICAgICAgICAgbmV4dCBTS0lQRU5VTTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChza2lwUHJvcFRlbXBvcmFyaWx5KCR0eXBlLCAkcHJv
cF90eXBlKSkgeworICAgICAgICAgICAgbmV4dCBTS0lQRU5VTTsKKyAgICAgICAgfQorCisgICAg
ICAgIHB1c2goQGNCb2R5UHJpdiwgIiAgICAke3Byb3BFbnVtfSxcbiIpOworCisgICAgICAgIG15
ICRndHlwZSA9IEdldFByb3BHVHlwZSgkcHJvcF90eXBlKTsKKyAgICAgICAgbXkgJGdwYXJhbWZs
YWcgPSAiR19QQVJBTV9SRUFEQUJMRSI7CisgICAgICAgIG15ICR3cml0ZWFibGUgPSAkYXR0cmli
dXRlLT50eXBlICF+IC9ecmVhZG9ubHkvOworICAgICAgICBteSAkY29uc3QgPSAicmVhZC1vbmx5
ICI7CisgICAgICAgIGlmICgkcHJvcF9uYW1lIGVxICdsb2NhdGlvbicgJiYgJGludGVyZmFjZU5h
bWUgZXEgJ0RvY3VtZW50JykgeworICAgICAgICAgICAgbmV4dCBTS0lQRU5VTTsKKyAgICAgICAg
fQorICAgICAgICAjaWYgKCR3cml0ZWFibGUgJiYgJGN1c3RvbSkgeworICAgICAgICBpZiAoJHdy
aXRlYWJsZSkgeworICAgICAgICAgICAgJGNvbnN0ID0gInJlYWQtb25seSAoZHVlIHRvIGN1c3Rv
bSBmdW5jdGlvbnMgbmVlZGVkIGluIGdkb213ZWJraXQpIjsKKyAgICAgICAgfQorICAgICAgICAj
IGlmICgkd3JpdGVhYmxlICYmICEkY3VzdG9tKSB7CisgICAgICAgIGlmICgkd3JpdGVhYmxlKSB7
CisgICAgICAgICAgICAkZ3BhcmFtZmxhZyA9ICJHX1BBUkFNX1JFQURXUklURSI7CisgICAgICAg
ICAgICAkY29uc3QgPSAicmVhZC13cml0ZSAiOworICAgICAgICB9CisKKyAgICAgICAgbXkgJF9n
dHlwZSA9ICRndHlwZTsKKyAgICAgICAgaWYgKCRndHlwZSBlcSAidXNob3J0IikgeworICAgICAg
ICAgICAgJF9ndHlwZSA9ICJ1aW50IjsgIyB5dWsuCisgICAgICAgIH0KKyAgICAgICAgJG5pY2sg
PSBkZWNhbWVsaXplKCIke2ludGVyZmFjZU5hbWV9XyR7cHJvcE5hbWV9Iik7CisgICAgICAgICRs
b25nID0gIiR7Y29uc3R9ICR7dHlwZX0gJHtpbnRlcmZhY2VOYW1lfS4ke3Byb3BOYW1lfSI7Cisg
ICAgICAgIG15ICR0eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7CisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ19rbGFzcywgJHtwcm9wRW51bX0sCisgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfJHtfZ3R5cGV9ICgiJHtwcm9wTmFtZX0iLCAvKiBuYW1lICovCisgICAgICAg
ICAgICAgICAgIiRuaWNrIiwgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8KKyAgICAgICAgICAgICAg
ICAiJGxvbmciLCAvKiBsb25nZXIgLSBjb3VsZCBkbyB3aXRoIHNvbWUgZXh0cmEgZG9jIHN0dWZm
IGhlcmUgKi8KK0VPRgorICAgICAgICBwdXNoKEB0eHRfaW5zdGFsbF9wcm9wcywgJHR4dF9pbnN0
YWxsX3Byb3ApOworICAgICAgICAkdHh0X2luc3RhbGxfcHJvcCA9ICIvKiBUT0RPISAkZ3R5cGUg
Ki9cbiI7CisKKyAgICAgICAgaWYgKCR3cml0ZWFibGUpIHsKKyAgICAgICAgICAgIG15ICRvayA9
IDA7CisgICAgICAgICAgICBteSAkY29udmVydF9mbiA9ICIiOworCisgICAgICAgICAgICBpZiAo
JGd0eXBlIGVxICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgJGNvbnZlcnRfZm4gPSAiV2Vi
Q29yZTo6U3RyaW5nOjpmcm9tVVRGOCI7CisgICAgICAgICAgICAgICAgJG9rID0gMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmICgkZ3R5cGUgZXEgImJvb2xlYW4iKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCR7aW50ZXJmYWNlTmFtZX0gbmUgIkRPTVdpbmRvdyIpIHsgI1hYWCBU
T0RPOiBza2lwICJwdXREaXJlY3QiIHN0dWZmIC0gbm8gaWRlYSB3aGF0IGl0J3MgYWJvdXQgeWV0
CisgICAgICAgICAgICAgICAgICAgICRvayA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJmbG9hdCIpIHsKKyAgICAgICAgICAgICAgICAkb2sg
PSAxOworICAgICAgICAgICAgfSBlbHNpZiAoJGd0eXBlIGVxICJkb3VibGUiKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCR7aW50ZXJmYWNlTmFtZX0gbmUgIkRPTVdpbmRvdyIpIHsgI1hYWCBUT0RP
OiBza2lwICJwdXREaXJlY3QiIHN0dWZmIC0gbm8gaWRlYSB3aGF0IGl0J3MgYWJvdXQgeWV0Cisg
ICAgICAgICAgICAgICAgICAgICRvayA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNpZiAoJGd0eXBlIGVxICJ1aW50NjQiKSB7CisgICAgICAgICAgICAgICAgJG9rID0g
MTsKKyAgICAgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAidWxvbmciKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCR7aW50ZXJmYWNlTmFtZX0gbmUgIkRPTVdpbmRvdyIpIHsgI1hYWCBUT0RPOiBz
a2lwICJwdXREaXJlY3QiIHN0dWZmIC0gbm8gaWRlYSB3aGF0IGl0J3MgYWJvdXQgeWV0CisgICAg
ICAgICAgICAgICAgICAgICRvayA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNpZiAoJGd0eXBlIGVxICJsb25nIikgeworICAgICAgICAgICAgICAgIGlmICgke2ludGVy
ZmFjZU5hbWV9IG5lICJET01XaW5kb3ciKSB7ICNYWFggVE9ETzogc2tpcCAicHV0RGlyZWN0IiBz
dHVmZiAtIG5vIGlkZWEgd2hhdCBpdCdzIGFib3V0IHlldAorICAgICAgICAgICAgICAgICAgICAk
b2sgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzaWYgKCRndHlwZSBl
cSAidWludCIpIHsKKyAgICAgICAgICAgICAgICAkb2sgPSAxOworICAgICAgICAgICAgfSBlbHNp
ZiAoJGd0eXBlIGVxICJ1c2hvcnQiKSB7CisgICAgICAgICAgICAgICAgJG9rID0gMTsKKyAgICAg
ICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAidWNoYXIiKSB7CisgICAgICAgICAgICAgICAgJG9r
ID0gMTsKKyAgICAgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAiY2hhciIpIHsKKyAgICAgICAg
ICAgICAgICAkb2sgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgIyBYWFggVE9ETyAt
IHNraXAgTG9jYXRpb24KKyAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiTG9jYXRp
b24iKSB7CisgICAgICAgICAgICAgICAgJG9rID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCRvaykgeworICAgICAgICAgICAgICAgIHB1c2goQHR4dF9zZXRfcHJvcHMsICIg
ICAgY2FzZSAke3Byb3BFbnVtfTpcbiAgICB7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEB0
eHRfc2V0X3Byb3BzLCAiICAgICAgICBXZWJDb3JlOjpFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIp
IGlmIEB7JGF0dHJpYnV0ZS0+c2V0dGVyRXhjZXB0aW9uc307CisgICAgICAgICAgICAgICAgcHVz
aChAdHh0X3NldF9wcm9wcywgIiAgICAgICAgZ3NlbGYtPnNldCR7c2V0cHJvcF9uYW1lX2ZufSgk
e2NvbnZlcnRfZm59KGdfdmFsdWVfZ2V0XyRndHlwZSAodmFsdWUpKSIpOworCisgICAgICAgICAg
ICAgICAgcHVzaChAdHh0X3NldF9wcm9wcywgIiwgZWMiKSBpZiBAeyRhdHRyaWJ1dGUtPnNldHRl
ckV4Y2VwdGlvbnN9OworICAgICAgICAgICAgICAgIHB1c2goQHR4dF9zZXRfcHJvcHMsICIpO1xu
Iik7CisKKyAgICAgICAgICAgICAgICBwdXNoKEB0eHRfc2V0X3Byb3BzLCAiICAgICAgICBicmVh
aztcbiAgICB9XG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1c2go
QHR4dF9nZXRfcHJvcHMsICIgICBjYXNlICR7cHJvcEVudW19OlxuICAgIHtcbiIpOworCisgICAg
ICAgIG15ICRleGNlcHRpb24gPSAiIjsKKyAgICAgICAgaWYgKEB7JGF0dHJpYnV0ZS0+Z2V0dGVy
RXhjZXB0aW9uc30pIHsKKyAgICAgICAgICAgICRleGNlcHRpb24gPSAiZWMiOworICAgICAgICAg
ICAgcHVzaChAdHh0X2dldF9wcm9wcywgIiAgICAgICAgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBl
YyA9IDA7XG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIG15ICRjb252ZXJ0X2ZuID0gIiI7Cisg
ICAgICAgIG15ICRwb3N0X2NvbnZlcnRfZm4gPSAiIjsKKyAgICAgICAgbXkgJGRvbmUgPSAwOwor
ICAgICAgICBpZiAoJGd0eXBlIGVxICJzdHJpbmciKSB7CisgICAgICAgICAgICBwdXNoKEB0eHRf
Z2V0X3Byb3BzLCAiICAgICAgICBnX3ZhbHVlX3Rha2Vfc3RyaW5nICh2YWx1ZSwgR1N0cmluZ0Nv
bnZlcnQoZ3NlbGYtPiR7Z2V0cHJvcF9uYW1lX2ZufSgke2V4Y2VwdGlvbn0pKSk7XG4iKTsKKyAg
ICAgICAgICAgICRkb25lID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoJGd0eXBlIGVx
ICJvYmplY3QiKSB7CisgICAgICAgICAgICBteSAkZG9tb2JqVHlwZSA9ICJHRE9NIi4kcHJvcF90
eXBlOworCisgICAgICAgICAgICAkdHh0X2dldF9wcm9wID0gPDwgIkVPRiI7CisgICAgICAgIFBh
c3NSZWZQdHI8V2ViQ29yZTo6JHtwcm9wX3R5cGV9PiBwdHIgPSBnc2VsZi0+JHtnZXRwcm9wX25h
bWVfZm59KCR7ZXhjZXB0aW9ufSk7CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUs
IFdlYktpdDo6dG9HRE9NKHB0ci5nZXQoKSkpOworRU9GCisgICAgICAgICAgICBwdXNoKEB0eHRf
Z2V0X3Byb3BzLCAkdHh0X2dldF9wcm9wKTsKKworICAgICAgICAgICAgJGRvbmUgPSAxOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCEkZG9uZSkgeworICAgICAgICAgICAgcHVzaChAdHh0X2dl
dF9wcm9wcywgIiAgICAgICAgZ192YWx1ZV9zZXRfJF9ndHlwZSAodmFsdWUsICR7Y29udmVydF9m
bn1nc2VsZi0+JHtnZXRwcm9wX25hbWVfZm59KCR7ZXhjZXB0aW9ufSkke3Bvc3RfY29udmVydF9m
bn0pO1xuIik7CisgICAgICAgIH0KKworICAgICAgICBwdXNoKEB0eHRfZ2V0X3Byb3BzLCAiICAg
ICAgICBicmVhaztcbiAgICB9XG4iKTsKKworICAgICAgICAjIGlzIHRoaXMgX2VudGlyZWx5XyBu
ZWNlc3Nhcnk/Pz8KKyAgICAgICAgIyBjYW4gaXQgYmUgZG9uZSB3aXRoIGdlbmVyaWMgZ19wYXJh
bV9zcGVjX2d0eXBlCisgICAgICAgICMgYW5kIGdldHRpbmcgYSBmZXcgdGhpbmdzLCBpZ25vcmlu
ZyB0aGUgbWluLW1heCBmb3IgZXhhbXBsZT8KKyAgICAgICAgaWYgKCRndHlwZSBlcSAiaW50Iikg
eworICAgICAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAg
ICAgICBHX01JTklOVCwgICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYSU5U
LCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworRU9G
CisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAiYm9vbGVhbiIpIHsKKyAgICAgICAgICAgICR0
eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7CisgICAgICAgICAgICAgICAgRkFMU0UsIC8qIGRl
ZmF1bHQgKi8KK0VPRgorICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgImZsb2F0IikgeworICAg
ICAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICBH
X01JTkZMT0FULCAgICAgICAgLyogbWluICovCisgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwg
LyogbWF4ICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIGRlZmF1bHQgKi8KK0VPRgor
ICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgImRvdWJsZSIpIHsKKyAgICAgICAgICAgICR0eHRf
aW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7CisgICAgICAgICAgICAgICAgR19NSU5ET1VCTEUsICAg
ICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWERPVUJMRSwgLyogbWF4ICovCisg
ICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIGRlZmF1bHQgKi8KK0VPRgorICAgICAgICB9IGVs
c2lmICgkZ3R5cGUgZXEgInVpbnQ2NCIpIHsKKyAgICAgICAgICAgICR0eHRfaW5zdGFsbF9wcm9w
ID0gPDwgIkVPRiI7CisgICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIG1pbiAqLworICAgICAg
ICAgICAgICAgIEdfTUFYVUlOVDY0LCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAg
ICAgLyogZGVmYXVsdCAqLworRU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAidWxvbmci
KSB7CisgICAgICAgICAgICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAgICAgICAg
ICAgICAgIDAsICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWFVMT05HLCAv
KiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworRU9GCisg
ICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAibG9uZyIpIHsKKyAgICAgICAgICAgICR0eHRfaW5z
dGFsbF9wcm9wID0gPDwgIkVPRiI7CisgICAgICAgICAgICAgICAgR19NSU5MT05HLCAgICAgICAg
LyogbWluICovCisgICAgICAgICAgICAgICAgR19NQVhMT05HLCAvKiBtYXggKi8KKyAgICAgICAg
ICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworRU9GCisgICAgICAgIH0gZWxzaWYgKCRn
dHlwZSBlcSAidWludCIpIHsKKyAgICAgICAgICAgICR0eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVP
RiI7CisgICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAg
IEdfTUFYVUlOVCwgLyogbWF4ICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgIC8qIGRlZmF1
bHQgKi8KK0VPRgorICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEgInVzaG9ydCIpIHsKKyAgICAg
ICAgICAgICR0eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7CisgICAgICAgICAgICAgICAgMCwg
ICAgICAgIC8qIG1pbiAqLworICAgICAgICAgICAgICAgIEdfTUFYVUlOVDE2LCAvKiBtYXggKi8K
KyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLworRU9GCisgICAgICAgIH0g
ZWxzaWYgKCRndHlwZSBlcSAidWNoYXIiKSB7CisgICAgICAgICAgICAkdHh0X2luc3RhbGxfcHJv
cCA9IDw8ICJFT0YiOworICAgICAgICAgICAgICAgIEdfTUlOSU5UOCwgICAgICAgIC8qIG1pbiAq
LworICAgICAgICAgICAgICAgIEdfTUFYSU5UOCwgLyogbWF4ICovCisgICAgICAgICAgICAgICAg
MCwgICAgICAgIC8qIGRlZmF1bHQgKi8KK0VPRgorICAgICAgICB9IGVsc2lmICgkZ3R5cGUgZXEg
ImNoYXIiKSB7CisgICAgICAgICAgICAkdHh0X2luc3RhbGxfcHJvcCA9IDw8ICJFT0YiOworICAg
ICAgICAgICAgICAgIDAsICAgICAgICAvKiBtaW4gKi8KKyAgICAgICAgICAgICAgICBHX01BWFVJ
TlQ4LCAvKiBtYXggKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgLyogZGVmYXVsdCAqLwor
RU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAic3RyaW5nIikgeworICAgICAgICAgICAg
JHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICAiIiwgLyogZGVm
YXVsdCAqLworRU9GCisgICAgICAgIH0gZWxzaWYgKCRndHlwZSBlcSAib2JqZWN0IikgeworICAg
ICAgICAgICAgJHR4dF9pbnN0YWxsX3Byb3AgPSA8PCAiRU9GIjsKKyAgICAgICAgICAgICAgICBH
RE9NX1RZUEVfJHtwcm9wR1R5cGV9LCAvKiBnb2JqZWN0IHR5cGUgKi8KK0VPRgorICAgICAgICB9
CisgICAgICAgIHB1c2goQHR4dF9pbnN0YWxsX3Byb3BzLCAkdHh0X2luc3RhbGxfcHJvcCk7Cisg
ICAgICAgICR0eHRfaW5zdGFsbF9wcm9wID0gPDwgIkVPRiI7CisgICAgICAgICAgICAgICAgKEdQ
YXJhbUZsYWdzKSR7Z3BhcmFtZmxhZ30pKTsKKworRU9GCisgICAgICAgIHB1c2goQHR4dF9pbnN0
YWxsX3Byb3BzLCAkdHh0X2luc3RhbGxfcHJvcCk7CisgICAgfQorCisgICAgcHVzaChAY0JvZHlQ
cml2LCAifTtcblxuIik7CisKKworICAgICR0eHRfZ2V0X3Byb3AgPSA8PCAiRU9GIjsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KK0VPRgorICAgIHB1
c2goQHR4dF9nZXRfcHJvcHMsICR0eHRfZ2V0X3Byb3ApOworCisgICAgJHR4dF9zZXRfcHJvcCA9
IDw8ICJFT0YiOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorRU9GCisgICAgcHVzaChAdHh0X3NldF9wcm9wcywgJHR4dF9zZXRfcHJvcCk7CisKKyAg
ICBteSAkdHh0X3NldF9nZXRfcHJvcHMgPSA8PCAiRU9GIjsKKyAgICBjYXNlIFBST1BfQUdFOgor
ICAgICAgICBzZWxmLT5hZ2UgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFBST1BfQUdFOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUs
IHNlbGYtPmFnZSk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgICsgICBnX3ZhbHVlX2luaXQo
JnBhcmFtc1swXSwgR19UWVBFX0ZST01fSU5TVEFOQ0Uob2JqZWN0KSk7CisgICAgICAgICsgICBn
X3ZhbHVlX3NldF9pbnN0YW5jZSgmcGFyYW1zWzBdLCAoZ3BvaW50ZXIpb2JqZWN0KTsKKworRU9G
CisKKyAgICAjIFRPRE86IHdvcmsgb3V0IGlmIGl0J3MgYXBwcm9wcmlhdGUgdG8gc3BsaXQgdGhp
cyBpbnRvIG1hbnkgZGlmZmVyZW50CisgICAgIyBzaWduYWxzIGUuZy4gImNsaWNrIiBldGMuCisg
ICAgbXkgJHR4dF9pbnN0YWxsX3NpZ25hbHMgPSAiIjsKKworICAgIGlmICgkaW50ZXJmYWNlTmFt
ZSBlcSAiRE9NV2luZG93IiBvcgorICAgICAgICAkaW50ZXJmYWNlTmFtZSBlcSAiTm9kZSIgb3IK
KyAgICAgICAgJGludGVyZmFjZU5hbWUgZXEgIlhNTEh0dHBSZXF1ZXN0IikgeworICAgICAgICAk
dHh0X2luc3RhbGxfc2lnbmFscyA9IDw8ICJFT0YiOworICAgIGV2ZW50X3NpZ25hbHNbQlJPV1NF
Ul9FVkVOVF0gPSBnX3NpZ25hbF9uZXcoImJyb3dzZXItZXZlbnQiLAorICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyhyZXF1ZXN0Q2xhc3MpLAorICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05B
TF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19TSUdOQUxfREVUQUlMRUQgICksCisgICAgICAgIDAsCisgICAg
ICAgIE5VTEwsCisgICAgICAgIE5VTEwsCisgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09C
SkVDVF9CT09MRUFOLAorICAgICAgICBHX1RZUEVfTk9ORSwgMiwKKyAgICAgICAgR0RPTV9UWVBF
X0VWRU5ULCBHX1RZUEVfQk9PTEVBTik7CitFT0YKKyAgICB9CisKKyAgICAkaW1wbENvbnRlbnQg
PSA8PCAiRU9GIjsKKworc3RhdGljIHZvaWQgJHtsY2FzZV9pZmFjZW5hbWV9X2ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBHZG9tRE9NT2JqZWN0KiBkb21fb2JqZWN0ID0gR0RPTV9E
T01fT0JKRUNUKG9iamVjdCk7CisgICAgR2RvbURPTU9iamVjdFByaXZhdGUqIHByaXYgPSBkb21f
b2JqZWN0LT5wcml2OworCisgICAgaWYgKHByaXYtPmNvcmVPYmplY3QgIT0gMCkgeworCVdlYktp
dDo6R0RPTU9iamVjdENhY2hlOjpmb3JnZXRET01PYmplY3QocHJpdi0+Y29yZU9iamVjdCk7CisJ
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqPihwcml2LT5jb3JlT2JqZWN0
KS0+ZGVyZWYoKTsKKwlwcml2LT5jb3JlT2JqZWN0ID0gMDsKKyAgICB9CisKKyAgICBHX09CSkVD
VF9DTEFTUygke2xjYXNlX2lmYWNlbmFtZX1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0
KTsKK30KKworQHR4dF9zZXRfcHJvcHMKKworQHR4dF9nZXRfcHJvcHMKKworc3RhdGljIHZvaWQg
JHtsY2FzZV9pZmFjZW5hbWV9X2NsYXNzX2luaXQoJHtjbGFzc05hbWV9Q2xhc3MqIHJlcXVlc3RD
bGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MgKmdfa2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVx
dWVzdENsYXNzKTsKKyAgICBnX2tsYXNzLT5maW5hbGl6ZSA9ICR7bGNhc2VfaWZhY2VuYW1lfV9m
aW5hbGl6ZTsKKyAgICBnX2tsYXNzLT5zZXRfcHJvcGVydHkgPSAke2xjYXNlX2lmYWNlbmFtZX1f
X3NldF9wcm9wZXJ0eV9mbjsKKyAgICBnX2tsYXNzLT5nZXRfcHJvcGVydHkgPSAke2xjYXNlX2lm
YWNlbmFtZX1fX2dldF9wcm9wZXJ0eV9mbjsKKworQHR4dF9pbnN0YWxsX3Byb3BzCisKKyR0eHRf
aW5zdGFsbF9zaWduYWxzCit9CisKK3N0YXRpYyB2b2lkICR7bGNhc2VfaWZhY2VuYW1lfV9pbml0
KCR7Y2xhc3NOYW1lfSogcmVxdWVzdCkKK3sKK30KKworRU9GCisgICAgcHVzaChAY0JvZHlQcml2
LCAkaW1wbENvbnRlbnQpOworCisgICAgJGltcGxJbmNsdWRlc3siZ2RvbS9HZG9tJHtpbnRlcmZh
Y2VOYW1lfVByaXZhdGUuaCJ9ID0gMTsKKyAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKKwor
I2lmbmRlZiAke2d1YXJkfV9QUklWXworI2RlZmluZSAke2d1YXJkfV9QUklWXworI2luY2x1ZGUg
ImdsaWItb2JqZWN0LmgiCisjaW5jbHVkZSAiZ2RvbS8ke3BhcmVudEhkck5hbWV9LmgiCisjaW5j
bHVkZSAiJHtpbnRlcmZhY2VOYW1lfS5oIgorRU9GCisgICAgcHVzaChAaEJvZHlQcml2LCAkaW1w
bENvbnRlbnQpOworCisgICAgJGltcGxDb250ZW50ID0gPDwgIkVPRiI7CisvL30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCit0eXBlZGVmIHN0cnVjdCBfJHtjbGFzc05hbWV9ICR7Y2xhc3NOYW1lfTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisgICAgJHtjbGFzc05hbWV9ICoKKyAgICB3cmFwJHtpbnRl
cmZhY2VOYW1lfShQYXNzUmVmUHRyPFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0+IHBycENvcmVP
YmplY3QpOworCisgICAgV2ViQ29yZTo6JHtpbnRlcmZhY2VOYW1lfSAqCisgICAgY29yZSgke2Ns
YXNzTmFtZX0gKnJlcXVlc3QpOworRU9GCisgICAgcHVzaChAaEJvZHlQcml2LCAkaW1wbENvbnRl
bnQpOworCisgICAgaWYgKCAhVXNlc01hbnVhbFRvR0RPTUltcGxlbWVudGF0aW9uKCRpbnRlcmZh
Y2VOYW1lKSkgeworICAgICAgICAkaW1wbENvbnRlbnQgPSA8PCAiRU9GIjsKKworICAgIGdwb2lu
dGVyCisgICAgdG9HRE9NKFdlYkNvcmU6OiR7aW50ZXJmYWNlTmFtZX0qIG5vZGUpOworRU9GCisg
ICAgICAgIHB1c2goQGhCb2R5UHJpdiwgJGltcGxDb250ZW50KTsKKyAgICB9CisKKyAgICAkaW1w
bENvbnRlbnQgPSA8PCAiRU9GIjsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLyog
JHtndWFyZH1fUFJJVl8gKi8KKworRU9GCisgICAgcHVzaChAaEJvZHlQcml2LCAkaW1wbENvbnRl
bnQpOworCisgICAgI2lmICgkcGFyYW1JRExUeXBlIGVxICJET01PYmplY3QiKSB7CisgICAgIyBY
WFggPz8/PyB3dGY/PyA6KSBjb3BpZWQgZnJvbSBqc2dlbmVyYXRvci4KKyAgICAjICAgICRpbXBs
SW5jbHVkZXN7IkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgifSA9IDE7CisgICAgI30gZWxz
ZSB7CisgICAgIyAgICAkaW1wbEluY2x1ZGVzeyRpbmNsdWRlSGRyfSA9IDE7CisgICAgI30KKyAg
ICAkaW1wbEluY2x1ZGVzeyIke2ludGVyZmFjZU5hbWV9LmgifSA9IDE7CisgICAgJGltcGxJbmNs
dWRlc3siZ2RvbS9HZG9tRE9NT2JqZWN0UHJpdmF0ZS5oIn0gPSAxOworCisgIExPT1A6CisgICAg
Zm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CisJI215ICRm
dW5jdGlvbk5hbWUgPSBkZWNhbWVsaXplKCRjbGFzc05hbWUpIC4gIl8iIC4gZGVjYW1lbGl6ZSgk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZSk7CisJbXkgJGZuX3NpZ19uYW1lID0gJGZ1bmN0aW9u
LT5zaWduYXR1cmUtPm5hbWU7CisJbXkgJGZuX3NpZ190eXBlID0gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPnR5cGU7CisJbXkgJGZ1bmN0aW9uTmFtZSA9ICJnZG9tXyIgLiBkZWNhbWVsaXplKCRpbnRl
cmZhY2VOYW1lKSAuICJfIiAuIGRlY2FtZWxpemUoJGZuX3NpZ19uYW1lKTsKKwlteSAkcmV0dXJu
VHlwZSA9IEdldEdUeXBlKCRmbl9zaWdfdHlwZSk7CisJbXkgJHJldF9pc19jbHNfdHlwZSA9IElz
R0RPTUNsYXNzVHlwZSgkZm5fc2lnX3R5cGUpOworCisJbXkgJGZ1bmN0aW9uU2lnID0gIiRjbGFz
c05hbWUgKnRoaXoiOworCisJbXkgJGNhbGxfaW1wbF9wYXJhbXMgPSAiIjsKKwlteSAkZ2RvbV9m
bl9wcmVmaXggPSAiZ2RvbV8iIC4gZGVjYW1lbGl6ZSgkZm5fc2lnX3R5cGUpOworCisJaWYgKCRm
dW5jdGlvbk5hbWUgZXEgImdkb21fY3NzX3N0eWxlX2RlY2xhcmF0aW9uX3NldF9wcm9wZXJ0eSIp
IHsKKwkgICAgIyByZXNlcnZlZCBuYW1lIGNsYXNoIGluIGdsaWIhCisJICAgICRmdW5jdGlvbk5h
bWUgPSAiZ2RvbV9jc3Nfc3R5bGVfZGVjbGFyYXRpb25fc2V0X2Nzc19wcm9wZXJ0eSI7CisJfQor
CSMgWFhYIHNraXAgQ29tcGFyZUhvdyBmdW5jdGlvbnMgZm9yIG5vdworCWlmICgkZnVuY3Rpb25O
YW1lIGVxICJnZG9tX3JhbmdlX2NvbXBhcmVfYm91bmRhcnlfcG9pbnRzIikgeworCSAgICBwdXNo
KEBoQm9keSwgIlxuLyogWFhYIFRPRE86IHNraXBwaW5nIENvbXBhcmVIb3cgZnVuY3Rpb24gJHtm
dW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAgICBwdXNoKEBjQm9keSwgIlxuLyogWFhYIFRPRE86
IHNraXBwaW5nIENvbXBhcmVIb3cgZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOwor
CSAgICBuZXh0IExPT1A7CisJfQorCisJIyBYWFggc2tpcCBTVkdEb2N1bWVudCBmdW5jdGlvbnMg
Zm9yIG5vdworCWlmICgkcmV0dXJuVHlwZSBlcSAiR2RvbVNWR0RvY3VtZW50ICoiKSB7CisJICAg
IHB1c2goQGhCb2R5LCAiXG4vKiBYWFggVE9ETzogc2tpcHBpbmcgU1ZHRG9jdW1lbnQgZnVuY3Rp
b24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOworCSAgICBwdXNoKEBjQm9keSwgIlxuLyogWFhY
IFRPRE86IHNraXBwaW5nIFNWR0RvY3VtZW50IGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSAqL1xu
XG4iKTsKKwkgICAgbmV4dCBMT09QOworCX0KKworCSMgWFhYIGRvbid0IHNraXAgc29tZSBjdXN0
b20gZnVuY3Rpb25zIGZvciBub3cKKwlteSAkaXNfY3VzdG9tX2ZuID0gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b20ifTsKKwlpZiAoJGZ1bmN0aW9uTmFt
ZSBlcSAiZ2RvbV9odG1sX2NvbGxlY3Rpb25faXRlbSIgfHwKKwkgICAgJGZ1bmN0aW9uTmFtZSBl
cSAiZ2RvbV9odG1sX2NvbGxlY3Rpb25fbmFtZWRfaXRlbSIgfHwKKwkgICAgJGZ1bmN0aW9uTmFt
ZSBlcSAiZ2RvbV9odG1sX2lucHV0X2VsZW1lbnRfc2V0X3NlbGVjdGlvbl9yYW5nZSIgfHwKKwkg
ICAgJGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV9odG1sX2Zvcm1fZWxlbWVudF9zdWJtaXQiIHx8CisJ
ICAgICRmdW5jdGlvbk5hbWUgZXEgImdkb21feG1sX2h0dHBfcmVxdWVzdF9vcGVuIiB8fAorCSAg
ICAkZnVuY3Rpb25OYW1lIGVxICJnZG9tX3htbF9odHRwX3JlcXVlc3Rfc2V0X3JlcXVlc3RfaGVh
ZGVyIiB8fAorCSAgICAkZnVuY3Rpb25OYW1lIGVxICJnZG9tX3htbF9odHRwX3JlcXVlc3Rfc2Vu
ZCIgfHwKKwkgICAgJGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV94bWxfaHR0cF9yZXF1ZXN0X2dldF9y
ZXNwb25zZV9oZWFkZXIiIHx8CisJICAgICRmdW5jdGlvbk5hbWUgZXEgImdkb21feG1sX2h0dHBf
cmVxdWVzdF9vdmVycmlkZV9taW1lX3R5cGUiIHx8CisJICAgICRmdW5jdGlvbk5hbWUgZXEgImdk
b21feG1sX2h0dHBfcmVxdWVzdF9kaXNwYXRjaF9ldmVudCIgfHwKKwkgICAgJGZ1bmN0aW9uTmFt
ZSBlcSAiZ2RvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUiKSB7CisJICAgICRpc19jdXN0b21fZm4g
PSAwOworCX0KKwkjIFhYWCBza2lwIHNvbWUgY3VzdG9tIGZ1bmN0aW9ucyBmb3Igbm93CisJaWYg
KCRpc19jdXN0b21fZm4gJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fbm9kZV9pdGVy
YXRvcl9uZXh0X25vZGUiICYmIAorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX25vZGVfYXBw
ZW5kX2NoaWxkIiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV9ub2RlX3JlbW92ZV9j
aGlsZCIgJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fbm9kZV9pbnNlcnRfYmVmb3Jl
IiAmJgorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX25vZGVfcmVwbGFjZV9jaGlsZCIgJiYK
KwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV90cmVlX3dhbGtlcl9wYXJlbnRfbm9kZSIgJiYg
CisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fdHJlZV93YWxrZXJfZmlyc3RfY2hpbGQiICYm
IAorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX3RyZWVfd2Fsa2VyX2xhc3RfY2hpbGQiICYm
IAorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX3RyZWVfd2Fsa2VyX3ByZXZpb3VzX3NpYmxp
bmciICYmIAorCSAgICAkZnVuY3Rpb25OYW1lIG5lICJnZG9tX3RyZWVfd2Fsa2VyX25leHRfc2li
bGluZyIgJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fdHJlZV93YWxrZXJfcHJldmlv
dXNfbm9kZSIgJiYgCisJICAgICRmdW5jdGlvbk5hbWUgbmUgImdkb21fdHJlZV93YWxrZXJfbmV4
dF9ub2RlIiAmJiAKKwkgICAgJGZ1bmN0aW9uTmFtZSBuZSAiZ2RvbV9ub2RlX2l0ZXJhdG9yX3By
ZXZpb3VzX25vZGUiKSB7CisJICAgIHB1c2goQGhCb2R5LCAiXG4vKiBYWFggVE9ETzogY3VzdG9t
IGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSAqL1xuXG4iKTsKKwkgICAgcHVzaChAY0JvZHksICJc
bi8qIFhYWCBUT0RPOiBjdXN0b20gZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9ICovXG5cbiIpOwor
CSAgICBuZXh0IExPT1A7CisJfQorCisJZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5w
YXJhbWV0ZXJzfSkgeworCSAgICBteSAkcGFyYW1JRExUeXBlID0gJHBhcmFtLT50eXBlOworCSAg
ICBhZGRJbmNCb2R5KCRwYXJhbUlETFR5cGUpOworCSAgICBhZGRJbmNIZHIoJHBhcmFtSURMVHlw
ZSk7CisJICAgIG15ICRwYXJhbVR5cGUgPSBHZXRHVHlwZSgkcGFyYW1JRExUeXBlKTsKKwkgICAg
bXkgJHBhcmFtTmFtZSA9IGRlY2FtZWxpemUoJHBhcmFtLT5uYW1lKTsKKworCSAgICAkZnVuY3Rp
b25TaWcgLj0gIiwgJHBhcmFtVHlwZSAkcGFyYW1OYW1lIjsKKworCSAgICBteSAkcGFyYW1faXNf
Y2xzX3R5cGUgPSBJc0dET01DbGFzc1R5cGUoJHBhcmFtSURMVHlwZSk7CisJICAgIGlmICgkcGFy
YW1faXNfY2xzX3R5cGUpIHsKKwkJaWYgKCRwYXJhbUlETFR5cGUgbmUgIkRPTU9iamVjdCIgJiYK
KwkJICAgICRwYXJhbUlETFR5cGUgbmUgIkV2ZW50VGFyZ2V0IikgeworCQkgICAgJGltcGxJbmNs
dWRlc3siZ2RvbS9HZG9tJHtwYXJhbUlETFR5cGV9UHJpdmF0ZS5oIn0gPSAxOworCQkgICAgIyB0
aGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBidXQgb25lIG9mIHRoZQorCQkgICAgIyBhdXRv
LWdlbmVyYXRlZCBmaWxlcyBuZWVkZWQgaXQgc28uLi4uCisJCSAgICAkaW1wbEluY2x1ZGVzeyIk
e3BhcmFtSURMVHlwZX0uaCJ9ID0gMTsKKwkJfQorCSAgICB9CisJICAgIGlmICgkcGFyYW1faXNf
Y2xzX3R5cGUgfHwgKCRwYXJhbUlETFR5cGUgZXEgIkRPTVN0cmluZyIpKSB7CisJCSRwYXJhbU5h
bWUgPSAiX2dfIiAuICRwYXJhbU5hbWU7CisJICAgIH0KKwkgICAgaWYgKCRjYWxsX2ltcGxfcGFy
YW1zKSB7CisJCSRjYWxsX2ltcGxfcGFyYW1zIC49ICIsICRwYXJhbU5hbWUiOworCSAgICB9IGVs
c2UgeworCQkkY2FsbF9pbXBsX3BhcmFtcyA9ICIkcGFyYW1OYW1lIjsKKwkgICAgfQorCX0KKwor
ICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bUFyZ3VtZW50SGFuZGxpbmcifSkgeworCisJICAgIGlmICgkY2FsbF9pbXBsX3BhcmFtcykgewor
CQkkY2FsbF9pbXBsX3BhcmFtcyAuPSAiLCAmY2FsbFN0YWNrIjsKKwkgICAgfSBlbHNlIHsKKwkJ
JGNhbGxfaW1wbF9wYXJhbXMgPSAiJmNhbGxTdGFjayI7CisJICAgIH0KKyAgICAgICAgJGltcGxJ
bmNsdWRlc3siU2NyaXB0Q2FsbFN0YWNrLmgifSA9IDE7CisgICAgfQorCisJYWRkSW5jSGRyKCRm
bl9zaWdfdHlwZSk7CisJaWYgKCRyZXRfaXNfY2xzX3R5cGUpIHsKKwkgICAgIyAgICAkaW1wbFR5
cGVkZWZzeyJHZG9tJHtmbl9zaWdfdHlwZX0ifSA9IDE7CisJfQorCisJaWYgKCRyZXR1cm5UeXBl
IG5lICJ2b2lkIikgeworCisJICAgIGlmICgkcmV0X2lzX2Nsc190eXBlKSB7CisJCWlmICgkZm5f
c2lnX3R5cGUgZXEgIkRPTU9iamVjdCIpIHsKKwkJICAgICMgWFhYID8/Pz8gd3RmPz8gOikgY29w
aWVkIGZyb20ganNnZW5lcmF0b3IuCisJCSAgICAkaW1wbEluY2x1ZGVzeyJnZG9tL0dkb21DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaCJ9ID0gMTsKKwkJfSBlbHNlIHsKKwkJICAgICNpZiAoJGZu
X3NpZ190eXBlIG5lICJFdmVudFRhcmdldCIpIHsKKwkJCSMkaW1wbEluY2x1ZGVzeyJnZG9tL0dk
b20ke2ZuX3NpZ190eXBlfVByaXZhdGUuaCJ9ID0gMTsKKwkJCSMkaW1wbEluY2x1ZGVzeyJnZG9t
L0dkb20ke2ZuX3NpZ190eXBlfS5oIn0gPSAxOworCQkgICAgI30KKwkJICAgICRpbXBsSW5jbHVk
ZXN7IiR7Zm5fc2lnX3R5cGV9LmgifSA9IDE7CisgICAgICAgICAgICAkY0JvZHlHRE9NeyJncG9p
bnRlciB0b0dET00oV2ViQ29yZTo6JHtmbl9zaWdfdHlwZX0qIG5vZGUpOyJ9ID0gMTsKKwkJfQor
CSAgICB9CisJfQorCisJIyBYWFggc2tpcCBjdXN0b20gZnVuY3Rpb25zIGZvciBub3cKKwkjIGJ1
dCBza2lwIGZyb20gaGVyZSB0byBhbGxvdyBzb21lIGhlYWRlcnMgdG8gYmUgY3JlYXRlZAorCSMg
Zm9yIGEgc3VjY2Vzc2Z1bCBjb21waWxlLgorCWlmICgkaXNfY3VzdG9tX2ZuICYmCisJICAgICRm
dW5jdGlvbk5hbWUgbmUgImdkb21fbm9kZV9yZW1vdmVfY2hpbGQiICYmIAorCSAgICAkZnVuY3Rp
b25OYW1lIG5lICJnZG9tX25vZGVfaW5zZXJ0X2JlZm9yZSIgJiYKKwkgICAgJGZ1bmN0aW9uTmFt
ZSBuZSAiZ2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQiICYmCisJICAgICRmdW5jdGlvbk5hbWUgbmUg
Imdkb21fbm9kZV9hcHBlbmRfY2hpbGQiKSB7CisJICAgIHB1c2goQGhCb2R5LCAiXG4vKiBYWFgg
VE9ETzogY3VzdG9tIGZ1bmN0aW9uICR7ZnVuY3Rpb25OYW1lfSAqL1xuXG4iKTsKKwkgICAgcHVz
aChAY0JvZHksICJcbi8qIFhYWCBUT0RPOiBjdXN0b20gZnVuY3Rpb24gJHtmdW5jdGlvbk5hbWV9
ICovXG5cbiIpOworCSAgICBuZXh0IExPT1A7CisJfQorCisgICAgaWYgKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7
CisgICAgICAgICMgWFhYIHNraXAgY3VzdG9tIGFyZ3VtZW50IGhhbmRsaW5nIC0gY3VycmVudGx5
IGluIENvbnNvbGUuaWRsCisgICAgICAgICMgcmVxdWlyZXMgRXhlY1N0YXRlIHdoaWNoIGhhcyBi
ZWVuIHJlbW92ZWQgdW50aWwgIzE2NDAxIGlzIGFjY2VwdGVkLgorCSAgICBwdXNoKEBoQm9keSwg
IlxuLyogWFhYIFRPRE86IGN1c3RvbSBhcmd1bWVudCBoYW5kbGluZyAke2Z1bmN0aW9uTmFtZX0g
Ki9cblxuIik7CisJICAgIHB1c2goQGNCb2R5LCAiXG4vKiBYWFggVE9ETzogY3VzdG9tIGFyZ3Vt
ZW50IGhhbmRsaW5nICR7ZnVuY3Rpb25OYW1lfSAqL1xuXG4iKTsKKwkgICAgbmV4dCBMT09QOwor
ICAgIH0KKwlteSAkX3JldHVyblR5cGUgPSAkcmV0dXJuVHlwZTsKKwlteSAkZG9tb2JqVHlwZSA9
ICJHRE9NIi4kZm5fc2lnX3R5cGU7CisJaWYgKCRmbl9zaWdfdHlwZSBlcSAnRE9NT2JqZWN0JyAm
JgorCSAgICAkZnVuY3Rpb25OYW1lIGVxICdnZG9tX2h0bWxfY2FudmFzX2VsZW1lbnRfZ2V0X2Nv
bnRleHQnKSB7CisJICAgICMgWFhYIEhBQ0shCisJICAgICRfcmV0dXJuVHlwZSA9ICdHZG9tQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCAqJzsKKwkgICAgJGRvbW9ialR5cGUgPSAnR0RPTUNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQnOworCSAgICAkZ2RvbV9mbl9wcmVmaXggPSAnZ2RvbV9jYW52YXNfcmVu
ZGVyaW5nX2NvbnRleHQnOworCSAgICBuZXh0IExPT1A7CSAgICAgICAjIFhYWCAtIHRvbyBpbnZv
bHZlZCBmb3Igbm93LiAgc2tpcCBpdC4KKwkgICAgIyBtdXN0IGNvbnZlcnQgdG8gYSBET01PYmpl
Y3QgKFRPRE86IGJyb3dzZSBKUyBjb2RlIHRvIGZpbmQgb3V0IGhvdykKKwkgICAgIyBiZXR0ZXI6
IHdvcmsgb3V0IGhvdyB0byBjcmVhdGUgYSBHRE9NRG9tT2JqZWN0CisJfQorCisJaWYgKCRmbl9z
aWdfdHlwZSBlcSAnRE9NT2JqZWN0JyAmJgorCSAgICAkZnVuY3Rpb25OYW1lIGVxICdnZG9tX2Rv
Y3VtZW50X2dldF9jc3NfY2FudmFzX2NvbnRleHQnKSB7CisJICAgICMgWFhYIEhBQ0shCisJICAg
ICRfcmV0dXJuVHlwZSA9ICdHZG9tQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIConOworCSAgICAk
ZG9tb2JqVHlwZSA9ICdHRE9NQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEJzsKKwkgICAgJGdkb21f
Zm5fcHJlZml4ID0gJ2dkb21fY2FudmFzX3JlbmRlcmluZ19jb250ZXh0MmQnOworCSAgICBuZXh0
IExPT1A7CSAgICAgICAjIFhYWCAtIHRvbyBpbnZvbHZlZCBmb3Igbm93LiAgc2tpcCBpdC4KKwkg
ICAgIyBtdXN0IGNvbnZlcnQgdG8gYSBET01PYmplY3QgKFRPRE86IGJyb3dzZSBKUyBjb2RlIHRv
IGZpbmQgb3V0IGhvdykKKwkgICAgIyBiZXR0ZXI6IHdvcmsgb3V0IGhvdyB0byBjcmVhdGUgYSBH
RE9NRG9tT2JqZWN0CisJfQorCisKKwlwdXNoKEBoQm9keSwgIldFQktJVF9BUEkgJF9yZXR1cm5U
eXBlXG4kZnVuY3Rpb25OYW1lICgkZnVuY3Rpb25TaWcpO1xuXG4iKTsKKworCXB1c2goQGNCb2R5
LCAiJF9yZXR1cm5UeXBlXG4kZnVuY3Rpb25OYW1lICgkZnVuY3Rpb25TaWcpXG57XG4iKTsKKwor
ICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3Rv
bUFyZ3VtZW50SGFuZGxpbmcifSkgeworICAgICAgICBteSAkbnVtUGFyYW1ldGVycyA9IEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfTsKKyAgICAgICAgcHVzaChAY0JvZHksICIgICAgV2ViQ29yZTo6
U2NyaXB0Q2FsbFN0YWNrIGNhbGxTdGFjayhleGVjLCBhcmdzLCAkbnVtUGFyYW1ldGVycyk7XG4i
KTsKKyAgICB9CisKKwlwdXNoKEBjQm9keSwgIiAgICBXZWJDb3JlOjoke2ludGVyZmFjZU5hbWV9
ICogaXRlbSA9IFdlYktpdDo6Y29yZSh0aGl6KTtcbiIpOworCWlmICgkcmV0dXJuVHlwZSBuZSAi
dm9pZCIpIHsKKwkgICAgIyBYWFggVE9ETzogcmV0dXJuIHByb3BlciBkZWZhdWx0IHJlc3VsdAor
CSAgICBwdXNoKEBjQm9keSwgIiAgICBnX3JldHVybl92YWxfaWZfZmFpbCAoaXRlbSwgMCk7XG4i
KTsKKwl9IGVsc2UgeworCSAgICBwdXNoKEBjQm9keSwgIiAgICBnX3JldHVybl9pZl9mYWlsIChp
dGVtKTtcbiIpOworCX0KKworCWZvcmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pIHsKKwkgICAgbXkgJHBhcmFtTmFtZSA9IGRlY2FtZWxpemUoJHBhcmFtLT5uYW1lKTsK
KwkgICAgbXkgJHBhcmFtSURMVHlwZSA9ICRwYXJhbS0+dHlwZTsKKwkgICAgbXkgJHBhcmFtVHlw
ZUlzUHJpbWl0aXZlID0gJGNvZGVHZW5lcmF0b3ItPklzUHJpbWl0aXZlVHlwZSgkcGFyYW1JRExU
eXBlKTsKKwkgICAgbXkgJHBhcmFtX2lzX2Nsc190eXBlID0gSXNHRE9NQ2xhc3NUeXBlKCRwYXJh
bUlETFR5cGUpOworCSAgICBhZGRJbmNIZHIoJHBhcmFtSURMVHlwZSk7CisJICAgIGlmICgkcGFy
YW1faXNfY2xzX3R5cGUpIHsKKwkJIyAgICAkaW1wbFR5cGVkZWZzeyJHZG9tJHtwYXJhbUlETFR5
cGV9In0gPSAxOworCSAgICB9CisKKyAgICAgICAgIyBYWFggVE9ETzogcmVzb2x2ZSB3aGljaCBh
cmd1bWVudHMgc2hvdWxkIC8gY2FuIGJlIE5VTEwKKyAgICAgICAgIyBvciBoZWNrIHJlc29sdmUg
aWYgaXQncyBldmVuIG5lY2Vzc2FyeSB0byBjaGVjayEgT2JqQyBkb2Vzbid0LgorICAgICAgICAj
CisJICAgICMgaWYgKCEkcGFyYW1UeXBlSXNQcmltaXRpdmUpIHsKKwkJIyBpZiAoJHJldHVyblR5
cGUgbmUgInZvaWQiKSB7CisJCSMgICAgIHB1c2goQGNCb2R5LCAiICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsICgkcGFyYW1OYW1lLCAwKTtcbiIpOworCQkjIH0gZWxzZSB7CisJCSMgICAgIHB1c2go
QGNCb2R5LCAiICAgIGdfcmV0dXJuX2lmX2ZhaWwgKCRwYXJhbU5hbWUpO1xuIik7CisJCSMgfQor
CSAgICAjfQorCX0KKworCSRyZXR1cm5QYXJhbU5hbWUgPSAiIjsKKwlmb3JlYWNoIG15ICRwYXJh
bSAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisJICAgIG15ICRwYXJhbUlETFR5cGUgPSAk
cGFyYW0tPnR5cGU7CisJICAgIG15ICRwYXJhbVR5cGUgPSBHZXRHVHlwZSgkcGFyYW1JRExUeXBl
KTsKKwkgICAgbXkgJHBhcmFtTmFtZSA9IGRlY2FtZWxpemUoJHBhcmFtLT5uYW1lKTsKKworCSAg
ICBteSAkcGFyYW1faXNfY2xzX3R5cGUgPSBJc0dET01DbGFzc1R5cGUoJHBhcmFtSURMVHlwZSk7
CisJICAgICMgSEFDSyEKKwkgICAgaWYgKCRmdW5jdGlvbk5hbWUgZXEgImdkb21feG1sX2h0dHBf
cmVxdWVzdF9vcGVuIiAmJgorCQkkcGFyYW0tPm5hbWUgZXEgInVybCIpIHsKKworCQkjJGltcGxJ
bmNsdWRlc3siS1VSTC5oIn0gPSAxOworCQlwdXNoKEBjQm9keSwgIiAgICBXZWJDb3JlOjpLVVJM
IF9nXyR7cGFyYW1OYW1lfSA9IFdlYkNvcmU6OktVUkwoJHBhcmFtTmFtZSk7XG4iKTsKKwkgICAg
fSBlbHNpZiAoJHBhcmFtSURMVHlwZSBlcSAiRE9NU3RyaW5nIikgeworCQlwdXNoKEBjQm9keSwg
IiAgICBXZWJDb3JlOjpTdHJpbmcgX2dfJHtwYXJhbU5hbWV9ID0gV2ViQ29yZTo6U3RyaW5nOjpm
cm9tVVRGOCgkcGFyYW1OYW1lKTtcbiIpOworCSAgICB9CisJICAgIGlmICgkcGFyYW1faXNfY2xz
X3R5cGUpIHsKKwkJbXkgJHBhcmFtX2dkb21fZm4gPSAiZ2RvbV8iIC4gZGVjYW1lbGl6ZSgkcGFy
YW1JRExUeXBlKTsKKwkJaWYgKCRwYXJhbUlETFR5cGUgZXEgIkV2ZW50VGFyZ2V0IikgeworCQkg
ICAgJGltcGxJbmNsdWRlc3siZ2RvbS9HZG9tTm9kZVByaXZhdGUuaCJ9ID0gMTsKKwkJICAgIHB1
c2goQGNCb2R5LCAiICAgIFdlYkNvcmU6Ok5vZGUgKiBfZ18ke3BhcmFtTmFtZX0gPSBXZWJLaXQ6
OmNvcmUoJHBhcmFtTmFtZSk7XG4iKTsKKwkJfSBlbHNlIHsKKwkJICAgIHB1c2goQGNCb2R5LCAi
ICAgIFdlYkNvcmU6OiR7cGFyYW1JRExUeXBlfSAqIF9nXyR7cGFyYW1OYW1lfSA9IFdlYktpdDo6
Y29yZSgkcGFyYW1OYW1lKTtcbiIpOworCQl9CisgICAgICAgICMgWFhYIFRPRE86IHJlc29sdmUg
d2hpY2ggYXJndW1lbnRzIHNob3VsZCAvIGNhbiBiZSBOVUxMCisgICAgICAgICMgb3IgaGVjayBy
ZXNvbHZlIGlmIGl0J3MgZXZlbiBuZWNlc3NhcnkgdG8gY2hlY2shIE9iakMgZG9lc24ndC4KKyAg
ICAgICAgIworCQkjaWYgKCRyZXR1cm5UeXBlIG5lICJ2b2lkIikgeworCQkjICAgIHB1c2goQGNC
b2R5LCAiICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChfZ18ke3BhcmFtTmFtZX0sIDApO1xuIik7
CisJCSN9IGVsc2UgeworCQkjICAgIHB1c2goQGNCb2R5LCAiICAgIGdfcmV0dXJuX2lmX2ZhaWwg
KF9nXyR7cGFyYW1OYW1lfSk7XG4iKTsKKwkJI30KKworCSAgICB9CisJICAgICRyZXR1cm5QYXJh
bU5hbWUgPSAiX2dfIi4kcGFyYW1OYW1lIGlmICRwYXJhbS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IlJldHVybiJ9OworCX0KKworCW15ICRhc3NpZ24gPSAiIjsKKwlteSAkYXNzaWduX3ByZSA9ICIi
OworCW15ICRhc3NpZ25fcG9zdCA9ICIiOworCSRnX3JlcyA9IDA7CisJaWYgKCRyZXR1cm5UeXBl
IG5lICJ2b2lkIiAmJiAhJGlzX2N1c3RvbV9mbikgeworCisJICAgIGlmICgkcmV0X2lzX2Nsc190
eXBlKSB7CisJCSRhc3NpZ24gPSAiUGFzc1JlZlB0cjxXZWJDb3JlOjoke2ZuX3NpZ190eXBlfT4g
Z19yZXMgPSAiOworCQkkYXNzaWduX3ByZSA9ICJXVEY6OmdldFB0cigiOworCQkkYXNzaWduX3Bv
c3QgPSAiKSI7CisJICAgIH0gZWxzZSB7CisJCSRhc3NpZ24gPSAiJHtfcmV0dXJuVHlwZX0gcmVz
ID0gIjsKKwkgICAgfQorCX0KKwlteSAkZXhjZXB0aW9ucyA9ICIiOworCWlmIChAeyRmdW5jdGlv
bi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKKwkgICAgcHVzaChAY0JvZHksICIgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKwkgICAgaWYgKCR7Y2FsbF9pbXBsX3BhcmFtc30g
bmUgIiIpIHsKKwkJJGV4Y2VwdGlvbnMgPSAiLCBlYyI7CisJICAgIH0gZWxzZSB7CisJCSRleGNl
cHRpb25zID0gImVjIjsKKwkgICAgfQorCX0KKworCSMgbmVlZCB0aGlzIGZvciBpbmNsdWRpbmcg
Li4uIF9zb21ldGhpbmdfIC0gZm9yIHRoZSBjbGFzcyBhcmdzCisJI2lmICgkcmV0X2lzX2Nsc190
eXBlKSB7CisJIyAgICAkaW1wbEluY2x1ZGVzeyJnZG9tJHtmbl9zaWdfdHlwZX0uaCJ9ID0gMTsK
KwkjfQorCWlmICgkZnVuY3Rpb25OYW1lIGVxICJnZG9tX25vZGVfYXBwZW5kX2NoaWxkIiB8fAor
CSAgICAkZnVuY3Rpb25OYW1lIGVxICJnZG9tX25vZGVfaW5zZXJ0X2JlZm9yZSIgfHwKKwkgICAg
JGZ1bmN0aW9uTmFtZSBlcSAiZ2RvbV9ub2RlX3JlcGxhY2VfY2hpbGQiIHx8CisJICAgICRmdW5j
dGlvbk5hbWUgZXEgImdkb21fbm9kZV9yZW1vdmVfY2hpbGQiKSB7CisJICAgIG15ICRjdXN0b21f
Z2RvbV9ub2RlX2FwcGVuZF9jaGlsZCA9IDw8ICJFT0YiOworICAgIGJvb2wgb2sgPSBpdGVtLT4k
e2ZuX3NpZ19uYW1lfSgke2NhbGxfaW1wbF9wYXJhbXN9JHtleGNlcHRpb25zfSk7CisgICAgaWYg
KG9rKQorICAgIHsKKyAgICAgICAgJHtfcmV0dXJuVHlwZX0gcmVzID0gc3RhdGljX2Nhc3Q8JHtf
cmV0dXJuVHlwZX0+KFdlYktpdDo6dG9HRE9NKCRyZXR1cm5QYXJhbU5hbWUpKTsKKyAgICAgICAg
cmV0dXJuIHJlczsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7CitFT0YKKwkgICAgcHVzaChAY0Jv
ZHksICRjdXN0b21fZ2RvbV9ub2RlX2FwcGVuZF9jaGlsZCk7CisJfSBlbHNpZiAoJGZuX3NpZ190
eXBlIGVxICJET01PYmplY3QiICYmCisJCSAkZnVuY3Rpb25OYW1lIG5lICdnZG9tX2RvY3VtZW50
X2dldF9jc3NfY2FudmFzX2NvbnRleHQnKSB7CisJICAgIHB1c2goQGNCb2R5LCAiICAgIC8qIFhY
WCBUT0RPIC0gZ2V0IGNhbnZhcyBvYmplY3QgKGl0ZW0tPiR7Zm5fc2lnX25hbWV9KCR7Y2FsbF9p
bXBsX3BhcmFtc30ke2V4Y2VwdGlvbnN9KSk7Ki9cbiIgKTsKKworCX0gZWxzaWYgKCRmbl9zaWdf
dHlwZSBlcSAiRE9NU3RyaW5nIikgeworCSAgICBwdXNoKEBjQm9keSwgIiAgICAke2Fzc2lnbn1H
U3RyaW5nQ29udmVydChpdGVtLT4ke2ZuX3NpZ19uYW1lfSgke2NhbGxfaW1wbF9wYXJhbXN9JHtl
eGNlcHRpb25zfSkpO1xuIiApOworCX0gZWxzZSB7CisJICAgIGlmICgkZ19yZXMpIHsKKwkJJGdf
cmVzID0gIiR7YXNzaWdufSR7YXNzaWduX3ByZX1pdGVtLT4ke2ZuX3NpZ19uYW1lfSgke2NhbGxf
aW1wbF9wYXJhbXN9JHtleGNlcHRpb25zfSR7YXNzaWduX3Bvc3R9KSIgOworCSAgICB9IGVsc2Ug
eworCQlwdXNoKEBjQm9keSwgIiAgICAke2Fzc2lnbn0ke2Fzc2lnbl9wcmV9aXRlbS0+JHtmbl9z
aWdfbmFtZX0oJHtjYWxsX2ltcGxfcGFyYW1zfSR7ZXhjZXB0aW9uc30ke2Fzc2lnbl9wb3N0fSk7
XG4iICk7CisJICAgIH0KKwl9CisJaWYgKCRyZXR1cm5UeXBlIG5lICJ2b2lkIiAmJiAhJGlzX2N1
c3RvbV9mbikgeworCisJICAgIGlmICgkZm5fc2lnX3R5cGUgbmUgIkRPTU9iamVjdCIpIHsKKwkJ
aWYgKCRyZXRfaXNfY2xzX3R5cGUpIHsKKwkJICAgIHB1c2goQGNCb2R5LCAiICAgICR7X3JldHVy
blR5cGV9IHJlcyA9IHN0YXRpY19jYXN0PCR7X3JldHVyblR5cGV9PihXZWJLaXQ6OnRvR0RPTShn
X3Jlcy5nZXQoKSkpO1xuIik7CisJCX0KKwkgICAgfQorCSAgICBpZiAoJGZuX3NpZ190eXBlIGVx
ICJET01PYmplY3QiKSB7CisJCXB1c2goQGNCb2R5LCAiICAgIHJldHVybiBOVUxMOyAvKiBYWFgg
VE9ETzogcmV0dXJuIGNhbnZhcyBvYmplY3QgKi9cbiIpOworCSAgICB9IGVsc2UgeworCQlwdXNo
KEBjQm9keSwgIiAgICByZXR1cm4gcmVzO1xuIik7CisJICAgIH0KKwl9CisJcHVzaChAY0JvZHks
ICJcbiIpOworCisJcHVzaChAY0JvZHksICJ9XG5cbiIpOworICAgIH0KKworICAgIHB1c2goQGNC
b2R5LCAifSAvKiBleHRlcm4gXCJDXCIgKi9cblxuIik7CisgICAgcHVzaChAY0JvZHlQcml2LCAi
R19FTkRfREVDTFNcblxuIik7CisKKyAgICBwdXNoKEBoQm9keSwgIkdfRU5EX0RFQ0xTXG5cbiIp
OworICAgIHB1c2goQGhCb2R5LCAiI2VuZGlmIC8qICRndWFyZCAqL1xuIik7CisKKyAgICBwdXNo
KEBoQm9keVByb3AsICJHX0VORF9ERUNMU1xuXG4iKTsKKyAgICBwdXNoKEBoQm9keVByb3AsICIj
ZW5kaWYgLyogJHtndWFyZH1fUFJPUF8qL1xuIik7Cit9CisKKyMgSW50ZXJuYWwgaGVscGVyCitz
dWIgV3JpdGVEYXRhIHsKKyAgICBteSAoJG9iamVjdCwgJG5hbWUpID0gQF87CisKKyAgICAjIFdy
aXRlIFByaXZhdGUgaGVhZGVyCisgICAgbXkgJGhkckZOYW1lUHJpdiA9ICIkb3V0cHV0RGlyLyIg
LiAkbmFtZSAuICJQcml2YXRlLmgiOworICAgIG9wZW4oUFJJVkhFQURFUiwgIj4kaGRyRk5hbWVQ
cml2Iikgb3IgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJGhkckZOYW1lUHJpdiI7CisgICAgcHJp
bnQgUFJJVkhFQURFUiBAaFByZWZpeDsKKyAgICBwcmludCBQUklWSEVBREVSICJcbiI7CisgICAg
cHJpbnQgUFJJVkhFQURFUiBAaEJvZHlQcml2OworICAgIGNsb3NlKFBSSVZIRUFERVIpOworCisg
ICAgIyBXcml0ZSBwcm9wZXJ0aWVzIGhlYWRlciAoYXZvaWRzIHJlY3Vyc2l2ZSBuaWdodG1hcmUp
CisgICAgbXkgJGhkclByb3BGTmFtZSA9ICIkb3V0cHV0RGlyLyIgLiAkbmFtZSAuICJwcm9wcy5o
IjsKKyAgICBvcGVuKFBST1BIRUFERVIsICI+JGhkclByb3BGTmFtZSIpIG9yIGRpZSAiQ291bGRu
J3Qgb3BlbiBmaWxlICRoZHJQcm9wRk5hbWUiOworCisgICAgJGhkclByb3BJbmNsdWRlc3siZ2xp
Yi1vYmplY3QuaCJ9ID0gMTsKKworICAgIHByaW50IFBST1BIRUFERVIgQGhQcmVmaXg7CisgICAg
cHJpbnQgUFJPUEhFQURFUiAiLyogcmVjdXJzaXZlIGluY2x1ZGVzIC8gZGVmaW5lcyBpc3N1ZSBm
b3JjZXMgc2VwYXJhdGUgaGVhZGVyIGZvciBwcm9wZXJ0aWVzLlxucGVyaGFwcyAtIGJldHRlciAt
IGFsbCBnZG9tIGd0ayBmdW5jdGlvbnMgc2hvdWxkIGJlIGluIGhlcmUhKi9cbiI7CisgICAgcHJp
bnQgUFJPUEhFQURFUiBAaEJvZHlQcm9wUHJlOworICAgIHByaW50IFBST1BIRUFERVIgIiNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPlxuIjsKKyAgICBwcmludCBQUk9QSEVBREVSIG1h
cCB7ICIjaW5jbHVkZSBcIiRfXCJcbiIgfSBzb3J0IGtleXMoJWhkclByb3BJbmNsdWRlcyk7Cisg
ICAgcHJpbnQgUFJPUEhFQURFUiAiXG4iIGlmIGtleXMoJWhkclByb3BJbmNsdWRlcyk7CisgICAg
cHJpbnQgUFJPUEhFQURFUiAiXG4iOworICAgIHByaW50IFBST1BIRUFERVIgQGhCb2R5UHJvcDsK
KworICAgIGNsb3NlKEhFQURFUik7CisKKyAgICAjIFdyaXRlIHB1YmxpYyBoZWFkZXIuCisgICAg
bXkgJGhkckZOYW1lID0gIiRvdXRwdXREaXIvIiAuICRuYW1lIC4gIi5oIjsKKyAgICBvcGVuKEhF
QURFUiwgIj4kaGRyRk5hbWUiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkaGRyRk5hbWUi
OworCisgICAgJGhkckluY2x1ZGVzeyJnbGliLW9iamVjdC5oIn0gPSAxOworCisgICAgcHJpbnQg
SEVBREVSIEBoUHJlZml4OworICAgIHByaW50IEhFQURFUiBAaFByZWZpeEd1YXJkOworICAgIHBy
aW50IEhFQURFUiAiI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+XG4iOworICAgIHBy
aW50IEhFQURFUiBtYXAgeyAiI2luY2x1ZGUgXCIkX1wiXG4iIH0gc29ydCBrZXlzKCVoZHJJbmNs
dWRlcyk7CisgICAgcHJpbnQgSEVBREVSICJcbiIgaWYga2V5cyglaGRySW5jbHVkZXMpOworICAg
IHByaW50IEhFQURFUiAiXG4iOworICAgIHByaW50IEhFQURFUiBAaEJvZHlQcmU7CisgICAgcHJp
bnQgSEVBREVSIG1hcCB7ICJ0eXBlZGVmIHN0cnVjdCBfJF8gJF87XG4iIH0gc29ydCBrZXlzKCVp
bXBsVHlwZWRlZnMpOworICAgIHByaW50IEhFQURFUiAiXG4iIGlmIGtleXMoJWltcGxUeXBlZGVm
cyk7CisgICAgcHJpbnQgSEVBREVSIEBoQm9keTsKKworICAgIGNsb3NlKEhFQURFUik7CisKKyAg
ICAjIFdyaXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBzb3VyY2VzCisgICAgbXkgJGltcGxGaWxlTmFt
ZSA9ICIkb3V0cHV0RGlyLyIgLiAkbmFtZSAuICIuY3BwIjsKKyAgICBvcGVuKElNUEwsICI+JGlt
cGxGaWxlTmFtZSIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRpbXBsRmlsZU5hbWUiOwor
CisgICAgcHJpbnQgSU1QTCBAY1ByZWZpeDsKKyAgICBwcmludCBJTVBMICIjaW5jbHVkZSBcImNv
bmZpZy5oXCJcblxuIjsKKyAgICBwcmludCBJTVBMICIjaW5jbHVkZSA8d3RmL0dldFB0ci5oPlxu
IjsKKyAgICBwcmludCBJTVBMIG1hcCB7ICIjaW5jbHVkZSBcIiRfXCJcbiIgfSBzb3J0IGtleXMo
JWltcGxJbmNsdWRlcyk7CisgICAgcHJpbnQgSU1QTCAiXG4iIGlmIGtleXMoJWltcGxJbmNsdWRl
cyk7CisgICAgcHJpbnQgSU1QTCAibmFtZXNwYWNlIFdlYktpdCB7XG4iOworICAgIHByaW50IElN
UEwgbWFwIHsgIiRfXG4iIH0gc29ydCBrZXlzKCVjQm9keUdET00pOworICAgIHByaW50IElNUEwg
In07IC8vIG5hbWVzcGFjZSBXZWJLaXRcbiI7CisgICAgcHJpbnQgSU1QTCBAY0JvZHk7CisKKyAg
ICBwcmludCBJTVBMICJcbiI7CisgICAgcHJpbnQgSU1QTCBAY0JvZHlQcml2OworCisgICAgY2xv
c2UoSU1QTCk7CisKKyAgICAlaW1wbEluY2x1ZGVzID0gKCk7CisgICAgJWltcGxUeXBlZGVmcyA9
ICgpOworICAgICVoZHJJbmNsdWRlcyA9ICgpOworICAgIEBoUHJlZml4ID0gKCk7CisgICAgQGhC
b2R5ID0gKCk7CisgICAgQGhCb2R5UHJpdiA9ICgpOworICAgIEBoQm9keVByb3AgPSAoKTsKKyAg
ICBAaEJvZHlQcm9wUHJlID0gKCk7CisKKyAgICBAY1ByZWZpeCA9ICgpOworICAgIEBjQm9keUdE
T00gPSAoKTsKKyAgICBAY0JvZHkgPSAoKTsKKyAgICBAY0JvZHlQcml2ID0gKCk7Cit9CisKKzE7
Cg==
</data>
<flag name="review"
          id="17361"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33038</attachid>
            <date>2009-07-19 02:52:11 -0700</date>
            <delta_ts>2009-07-20 08:38:00 -0700</delta_ts>
            <desc>absolute basic beginnings of CodeGeneratorGObject.pm. </desc>
            <filename>f</filename>
            <type>text/plain</type>
            <size>2312</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEgQEAKKzIwMDktMDctMTggIGxrY2wgPGxrY2xAbGtjbC5uZXQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworICAgICAgICBBZGQgR09iamVjdCBDb2Rl
IEdlbmVyYXRvcgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09i
amVjdC5wbTogQWRkZWQgZ29iamVjdCBiaW5kaW5ncyBhdXRvLWdlbmVyYXRvci4KKwogMjAwOS0w
Ni0wNSAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUxIEBACisjIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBMdWtlIEtl
bm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorIyBDb3B5cmlnaHQgKEMpIDIw
MDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3JnPgorIyBDb3B5cmlnaHQgKEMpIDIw
MDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyMgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisjIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorCitwYWNrYWdlIENvZGVHZW5lcmF0b3JHT2JqZWN0OworCityZXF1aXJlICJDb2RlR2VuZXJh
dG9yR09iamVjdExpYnJhcnkxLnBtIjsKKworIyBQYXJhbXM6ICdkb21DbGFzcycgc3RydWN0Citz
dWIgR2VuZXJhdGVJbnRlcmZhY2UgeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAk
ZGF0YU5vZGUgPSBzaGlmdDsKKyAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OworCisgICAgbXkgJG5h
bWUgPSAkZGF0YU5vZGUtPm5hbWU7CisKKyAgICBwcmludCAiJG5hbWVcbiI7CisKKyAgICAkb2Jq
ZWN0LT5HZW5lcmF0ZSgkZGF0YU5vZGUpOworCisgICAgIyBXcml0ZSBjaGFuZ2VzCisgICAgbXkg
JGZuYW1lID0gIkdkb21fIiAuICRuYW1lOyAjZGVjYW1lbGl6ZSgkbmFtZSk7CisgICAgJGZuYW1l
ID1+IHMvXy8vZzsKKyAgICAkb2JqZWN0LT5Xcml0ZURhdGEoJGZuYW1lKTsKK30KKworIyBQYXJh
bXM6ICdpZGxEb2N1bWVudCcgc3RydWN0CitzdWIgR2VuZXJhdGVNb2R1bGUgeworICAgIG15ICRv
YmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKKworICAgICRtb2R1bGUg
PSAkZGF0YU5vZGUtPm1vZHVsZTsKK30KKworCisxOwo=
</data>
<flag name="review"
          id="17375"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33086</attachid>
            <date>2009-07-20 08:38:00 -0700</date>
            <delta_ts>2009-08-08 04:09:03 -0700</delta_ts>
            <desc>answered review comments</desc>
            <filename>codegen.gobject.patch</filename>
            <type>text/plain</type>
            <size>2427</size>
            <attacher name="Luke Kenneth Casson Leighton">lkcl</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDQ3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTEgQEAKKzIwMDktMDctMTggIGxrY2wgPGxrY2xAbGtjbC5uZXQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworICAgICAgICBBZGQgR09iamVjdCBDb2Rl
IEdlbmVyYXRvcgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09i
amVjdC5wbTogQWRkZWQgZ29iamVjdCBiaW5kaW5ncyBhdXRvLWdlbmVyYXRvci4KKwogMjAwOS0w
Ni0wNSAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUyIEBACisjIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBMdWtlIEtl
bm5ldGggQ2Fzc29uIExlaWdodG9uIDxsa2NsQGxrY2wubmV0PgorIyBDb3B5cmlnaHQgKEMpIDIw
MDggTWFydGluIFNvdG8gPHNvdG9AZnJlZWRlc2t0b3Aub3JnPgorIyBDb3B5cmlnaHQgKEMpIDIw
MDggQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyMKKyMgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyMg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyMgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisjIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorCitwYWNrYWdlIENvZGVHZW5lcmF0b3JHT2JqZWN0OworCisjIHRoaXMgZmlsZSBpcyBpbmNs
dWRlZCBpbiBhIHNlcGFyYXRlIHBhdGNoOiBjdXJyZW50bHkgIzI3NDMxCisjIGl0IGlzIG5vdCBp
bmNsdWRlZCBpbiAjMjc0MTAgYmVjYXVzZSB0aGF0IHdvdWxkIHJlcXVpcmUgcmV2aWV3CisjIG9m
IDEsNTAwIGxpbmVzIG9mIGNvZGUuCityZXF1aXJlICJDb2RlR2VuZXJhdG9yR09iamVjdExpYnJh
cnkxLnBtIjsKKworIyBQYXJhbXM6ICdkb21DbGFzcycgc3RydWN0CitzdWIgR2VuZXJhdGVJbnRl
cmZhY2UgeworICAgIG15ICRvYmplY3QgPSBzaGlmdDsKKyAgICBteSAkZGF0YU5vZGUgPSBzaGlm
dDsKKyAgICBteSAkZGVmaW5lcyA9IHNoaWZ0OworCisgICAgbXkgJG5hbWUgPSAkZGF0YU5vZGUt
Pm5hbWU7CisKKyAgICAkb2JqZWN0LT5HZW5lcmF0ZSgkZGF0YU5vZGUpOworCisgICAgIyBDb21t
aXQgY2hhbmdlcyEKKyAgICBteSAkZm5hbWUgPSAiR2RvbV8iIC4gJG5hbWU7IAorICAgICRmbmFt
ZSA9fiBzL18vL2c7CisgICAgJG9iamVjdC0+V3JpdGVEYXRhKCRmbmFtZSk7Cit9CisKKyMgUGFy
YW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAorc3ViIEdlbmVyYXRlTW9kdWxlIHsKKyAgICBteSAk
b2JqZWN0ID0gc2hpZnQ7CisgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CisKKyAgICAkbW9kdWxl
ID0gJGRhdGFOb2RlLT5tb2R1bGU7Cit9CisKKworMTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34467</attachid>
            <date>2009-08-10 08:20:42 -0700</date>
            <delta_ts>2009-08-12 13:38:10 -0700</delta_ts>
            <desc>uploaded</desc>
            <filename>patch.27410.txt</filename>
            <type>text/plain</type>
            <size>2500</size>
            <attacher name="Gour">gour</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDAgKzEsMTAgQEAKKzIwMDktMDgtMTAgIEx1a2UgS2VubmV0aCBDYXNzb24gTGVpZ2h0b24g
PGxrY2xAbGtjbC5uZXQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKwor
ICAgICAgICBBZGQgR09iamVjdCBDb2RlIEdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc0MTAKKworICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG06IEFkZGVkIGdvYmplY3QgYmluZGluZ3MgYXV0
by1nZW5lcmF0b3IuCisKKwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JHT2JqZWN0LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yR09iamVjdC5wbQkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgTHVrZSBLZW5uZXRoIENhc3NvbiBMZWln
aHRvbiA8bGtjbEBsa2NsLm5ldD4KKyMgQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbiBTb3RvIDxz
b3RvQGZyZWVkZXNrdG9wLm9yZz4KKyMgQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxw
QGF0b2tlci5jb20+CisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFpbnQgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAorIyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworcGFja2FnZSBDb2Rl
R2VuZXJhdG9yR09iamVjdDsKKworcmVxdWlyZSAiQ29kZUdlbmVyYXRvckdPYmplY3RMaWJyYXJ5
MS5wbSI7CityZXF1aXJlICJDb2RlR2VuZXJhdG9yR09iamVjdExpYnJhcnlGdW5jdGlvbnMucG0i
OworcmVxdWlyZSAiQ29kZUdlbmVyYXRvckdPYmplY3RMaWJyYXJ5R2VuZXJhdGUucG0iOworcmVx
dWlyZSAiQ29kZUdlbmVyYXRvckdPYmplY3RMaWJyYXJ5Mi5wbSI7CityZXF1aXJlICJDb2RlR2Vu
ZXJhdG9yR09iamVjdExpYnJhcnlQcm9wZXJ0aWVzLnBtIjsKKworc3ViIGZpbmlzaCB7CisgICAg
bXkgJG9iamVjdCA9IHNoaWZ0OworfQorCisjIFBhcmFtczogJ2RvbUNsYXNzJyBzdHJ1Y3QKK3N1
YiBHZW5lcmF0ZUludGVyZmFjZSB7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRk
YXRhTm9kZSA9IHNoaWZ0OworICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7CisKKyAgICBteSAkbmFt
ZSA9ICRkYXRhTm9kZS0+bmFtZTsKKworICAgICRvYmplY3QtPkdlbmVyYXRlKCRkYXRhTm9kZSk7
CisKKyAgICAjIENvbW1pdCBjaGFuZ2VzIQorICAgIG15ICRmbmFtZSA9ICJXZWJraXRfIiAuICRu
YW1lOyAKKyAgICAkZm5hbWUgPX4gcy9fLy9nOworICAgICRvYmplY3QtPldyaXRlRGF0YSgkZm5h
bWUpOworfQorCisjIFBhcmFtczogJ2lkbERvY3VtZW50JyBzdHJ1Y3QKK3N1YiBHZW5lcmF0ZU1v
ZHVsZSB7CisgICAgbXkgJG9iamVjdCA9IHNoaWZ0OworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0
OworCisgICAgJG1vZHVsZSA9ICRkYXRhTm9kZS0+bW9kdWxlOworfQorCisKKzE7Cg==
</data>
<flag name="review"
          id="18865"
          type_id="1"
          status="-"
          setter="mrowe"
    />
          </attachment>
      

    </bug>

</bugzilla>