<?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>44288</bug_id>
          
          <creation_ts>2010-08-19 12:50:22 -0700</creation_ts>
          <short_desc>MarkupAccumulator::appendStartMarkup should be broken down into pieces</short_desc>
          <delta_ts>2010-08-28 14:47:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>44229</dependson>
    
    <dependson>44318</dependson>
          <blocked>44831</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>266907</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-19 12:50:22 -0700</bug_when>
    <thetext>MarkupAccumulator::appendStartMarkup consists of one giant switch statement in which all kinds of nodes are serialized.  We should separate the serialization code for each type of node into a separate member functions of MarkupAccumulator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266944</commentid>
    <comment_count>1</comment_count>
      <attachid>64897</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-19 14:02:46 -0700</bug_when>
    <thetext>Created attachment 64897
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266949</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-19 14:04:56 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=64897) [details]
&gt; cleanup

Whole CharEntity business is very ugly.  It&apos;ll be greatly appreciated if anyone can tell me a better way of defining an array of CharEntity&apos;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266950</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-19 14:05:06 -0700</bug_when>
    <thetext>Attachment 64897 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/editing/markup.cpp:636:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266953</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-19 14:11:48 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Attachment 64897 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
&gt; WebCore/editing/markup.cpp:636:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
&gt; Total errors found: 1 in 2 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

This is a willful violation of the style guideline because the patch becomes unintelligible (svn diff tries to replace appendStartMarkup by appendElement, interleaving bits of pieces of both functions).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266977</commentid>
    <comment_count>5</comment_count>
      <attachid>64897</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-19 14:50:22 -0700</bug_when>
    <thetext>Comment on attachment 64897
cleanup

Thanks for working on this code.  It&apos;s blowing my mind too much to review properly.

WebCore/ChangeLog:14
 +          No new tests. (OOPS!)
This can&apos;t land with OOPS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266978</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-19 14:50:54 -0700</bug_when>
    <thetext>If you&apos;re going to do a lot of work on markup.cpp, please consider cleaning up all the style in a first pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266980</commentid>
    <comment_count>7</comment_count>
      <attachid>64901</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-19 14:56:54 -0700</bug_when>
    <thetext>Created attachment 64901
fixed &quot;No new tests. (OOPS!)&quot;

(In reply to comment #5)
&gt; (From update of attachment 64897 [details])
&gt; Thanks for working on this code.  It&apos;s blowing my mind too much to review properly.
&gt; 
&gt; WebCore/ChangeLog:14
&gt;  +          No new tests. (OOPS!)
&gt; This can&apos;t land with OOPS

Sorry, I meant to change that line to &quot;No new tests are added since this is a cleanup.&quot; Fixed.

(In reply to comment #6)
&gt; If you&apos;re going to do a lot of work on markup.cpp, please consider cleaning up all the style in a first pass.

Which function / part of code are you referring to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266987</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-19 15:02:40 -0700</bug_when>
    <thetext>&gt; &gt; If you&apos;re going to do a lot of work on markup.cpp, please consider cleaning up all the style in a first pass.
&gt; 
&gt; Which function / part of code are you referring to?

Oh, I just noticed that the style bot was red.  I&apos;d just work through the file until check-webkit-style passes.  That makes future changes easier to review because we don&apos;t have to worry about existing bad style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266988</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-19 15:02:58 -0700</bug_when>
    <thetext>Attachment 64901 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/editing/markup.cpp:636:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267409</commentid>
    <comment_count>10</comment_count>
      <attachid>64993</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-20 14:28:47 -0700</bug_when>
    <thetext>Created attachment 64993
cleanup

Removed escapeEntityReferences because that can be done in a separate patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268225</commentid>
    <comment_count>11</comment_count>
      <attachid>64993</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-23 17:43:08 -0700</bug_when>
    <thetext>Comment on attachment 64993
cleanup

WebCore/editing/markup.cpp:490
 +      const QualifiedName* parentName = 0;
I&apos;m not sure I understand why we use a pointer here.  It seems using a QualifiedName local would work just as well. I can&apos;t imaging its any slower since QualifiedName it itself just a RefPtr.

WebCore/editing/markup.cpp:489
 +      bool documentIsHTML = text-&gt;document()-&gt;isHTMLDocument();
Seems this is only used in one place in this function.

WebCore/editing/markup.cpp:580
 +              append(out, attribute-&gt;name().localName());
is localName all caps or something?  Confused why this is needed.

WebCore/editing/markup.cpp:587
 +              // We don&apos;t want to complete file:/// URLs because it may contain sensitive information
Are there other file-like urls that could get us into trouble?

WebCore/editing/markup.cpp:604
 +          RefPtr&lt;CSSMutableStyleDeclaration&gt; style = static_cast&lt;HTMLElement*&gt;(element)-&gt;getInlineStyleDecl()-&gt;copy();
Wow, this block wants to be broken up again too. :)

r+ since you&apos;re just moving code.  But you might consider my comments for a follow-up patch.  I suspect we also need more testing here, but that can come when we start fixing stuff here. :)

Thank you SO MUCH for working on this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268259</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-23 18:51:42 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 64993 [details])
&gt; WebCore/editing/markup.cpp:490
&gt;  +      const QualifiedName* parentName = 0;
&gt; I&apos;m not sure I understand why we use a pointer here.  It seems using a QualifiedName local would work just as well. I can&apos;t imaging its any slower since QualifiedName it itself just a RefPtr.

Will ask on webkit-dev since QualifiedName&apos;s default constructor is hidden behind a flag.

&gt; WebCore/editing/markup.cpp:489
&gt;  +      bool documentIsHTML = text-&gt;document()-&gt;isHTMLDocument();
&gt; Seems this is only used in one place in this function.

Will fix.

&gt; WebCore/editing/markup.cpp:580
&gt;  +              append(out, attribute-&gt;name().localName());
&gt; is localName all caps or something?  Confused why this is needed.

toString gives back namespace:localName and we want to avoid that if the document is not XML.

&gt; WebCore/editing/markup.cpp:587
&gt;  +              // We don&apos;t want to complete file:/// URLs because it may contain sensitive information
&gt; Are there other file-like urls that could get us into trouble?

I&apos;m not sure.  Probably need some security review here.

&gt; WebCore/editing/markup.cpp:604
&gt;  +          RefPtr&lt;CSSMutableStyleDeclaration&gt; style = static_cast&lt;HTMLElement*&gt;(element)-&gt;getInlineStyleDecl()-&gt;copy();
&gt; Wow, this block wants to be broken up again too. :)

Yes.  But I&apos;m thinking of doing this whole style thing up front so that we don&apos;t have to special-case style attribute at the very end.

&gt; r+ since you&apos;re just moving code.  But you might consider my comments for a follow-up patch.  I suspect we also need more testing here, but that can come when we start fixing stuff here. :)

Since this code is shared in copying &amp; innerHTML, I&apos;d suspect that the test coverage isn&apos;t so bad.  Changing one or two lines will definitely result in failure of several tests but I wouldn&apos;t mind having more structured tests as well.

&gt; Thank you SO MUCH for working on this!

My pleasure, thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268272</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-08-23 19:14:14 -0700</bug_when>
    <thetext>Committed r65854: &lt;http://trac.webkit.org/changeset/65854&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268286</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 20:43:29 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65854 might have broken GTK Linux 32-bit Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/65856
http://trac.webkit.org/changeset/65857
http://trac.webkit.org/changeset/65854
http://trac.webkit.org/changeset/65855</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268659</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-08-24 11:09:26 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 64993 [details])
&gt; WebCore/editing/markup.cpp:490
&gt;  +      const QualifiedName* parentName = 0;
&gt; I&apos;m not sure I understand why we use a pointer here.  It seems using a QualifiedName local would work just as well. I can&apos;t imagine its any slower since QualifiedName it itself just a RefPtr.

I think a pointer is a good way to handle an optional value. Also, a RefPtr is slower than a raw pointer.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64897</attachid>
            <date>2010-08-19 14:02:46 -0700</date>
            <delta_ts>2010-08-19 14:56:54 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-44288-20100819140245.patch</filename>
            <type>text/plain</type>
            <size>29521</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTY5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDgtMTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3VwIHNob3VsZCBiZSBicm9rZW4gZG93biBp
bnRvIHBpZWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDQyODgKKworICAgICAgICBFeHRyYWN0ZWQgYXBwZW5kVGV4dE5vZGUsIGFwcGVuZENvbW1l
bnROb2RlLCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIGFwcGVuZEVsZW1lbnQsCisgICAg
ICAgIGFuZCBhcHBlbmRDREFUQVNlY3Rpb24gZnJvbSBhcHBlbmRTdGFydE1hcmt1cC4KKworICAg
ICAgICBBbHNvIGFkZGVkIGVzY2FwZUVudGl0eVJlZmVyZW5jZXMgdGhhdCBlc2NhcGVzIHRoZSBz
cGVjaWZpZWQgY2hhcmFjdGVycyB1c2luZyBlbnRpdHkgcmVmZXJlbmNlcywKKyAgICAgICAgVGhp
cyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGFwcGVuZFF1b3RlZEF0dHJpYnV0ZVZhbHVlIGFuZCBhcHBl
bmRFc2NhcGVkQ29udGVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAg
ICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAg
IChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhTdHlsZU5vZGUpOiBDYWxscyBh
cHBlbmRRdW90ZWRBdHRyaWJ1dGVWYWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OmVzY2FwZUVudGl0
eVJlZmVyZW5jZXMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNoYXJFbnRpdHk6Oik6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkQXR0cmlidXRl
VmFsdWUpOiBSZW5hbWVkIGZyb20gYXBwZW5kQXR0cmlidXRlVmFsdWUKKyAgICAgICAgc2luY2Ug
aXQgbm93IHdyYXBzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgYnkgZG91YmxlIHF1b3RhdGlvbnMuCisg
ICAgICAgIChXZWJDb3JlOjphcHBlbmRFc2NhcGVkQ29udGVudCk6IENhbGxzIGVzY2FwZUVudGl0
eVJlZmVyZW5jZXMuCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
UXVvdGVkVVJMQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFRleHROb2RlKTogRXh0cmFjdGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZE5hbWVzcGFjZSk6IENhbGxzIGFwcGVuZFF1b3RlZEF0dHJp
YnV0ZVZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENv
bW1lbnROb2RlKTogRXh0cmFjdGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbik6IEV4dHJhY3RlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KTogRXh0cmFjdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2VjdGlvbik6IEV4
dHJhY3RlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFy
dE1hcmt1cCk6CisKIDIwMTAtMDgtMTcgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcv
bWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2
aXNpb24gNjU2ODMpCisrKyBXZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgsNiArNjgsMTYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGlj
IGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZShDU1NTdHlsZURlY2xhcmF0aW9uKiwg
aW50IHByb3BlcnR5SUQpOwogCitlbnVtIEVudGl0eUVzY2FwZUZsYWcgeworICAgIGVzY2FwZUVu
dGl0eUFtcCAgPSAweDAwMDEsCisgICAgZXNjYXBlRW50aXR5TGVmdCAgID0gMHgwMDAyLAorICAg
IGVzY2FwZUVudGl0eVJpZ2h0ICAgPSAweDAwMDQsCisgICAgZXNjYXBlRW50aXR5RG91YmxlUXVv
dGF0aW9uID0gMHgwMDA4LAorICAgIGVzY2FwZUVudGl0eU5vbkJyZWFrU3BhY2UgPSAweDAwMTAs
Cit9OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBFbnRpdHlFc2NhcGVGbGFnczsKK3N0YXRpYyB2
b2lkIGVzY2FwZUVudGl0eVJlZmVyZW5jZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBVQ2hh
ciosIHNpemVfdCBsZW5ndGgsIEVudGl0eUVzY2FwZUZsYWdzKTsKKwogY2xhc3MgQXR0cmlidXRl
Q2hhbmdlIHsKIHB1YmxpYzoKICAgICBBdHRyaWJ1dGVDaGFuZ2UoKQpAQCAtMTEyLDE4ICsxMjIs
MjMgQEAgcHVibGljOgogICAgIFN0cmluZyB0YWtlUmVzdWx0cygpOwogCiBwcml2YXRlOgotICAg
IHZvaWQgYXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBT
dHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBlc2NhcGVOQlNQKTsKKyAgICB2b2lkIGFwcGVuZFF1b3Rl
ZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRy
aWJ1dGUsIGJvb2wgZXNjYXBlTkJTUCk7CiAgICAgU3RyaW5nIGVzY2FwZUNvbnRlbnRUZXh0KGNv
bnN0IFN0cmluZyYsIGJvb2wgZXNjYXBlTkJTUCk7CiAgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxB
dHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKTsKICAgICBTdHJpbmcgc3RyaW5nVmFsdWVGb3JSYW5nZShjb25zdCBOb2RlKiwgY29uc3Qg
UmFuZ2UqKTsKICAgICBwYWlyPGNvbnN0IFVDaGFyKiwgc2l6ZV90PiB1Y2hhclJhbmdlKGNvbnN0
IE5vZGUqLCBjb25zdCBSYW5nZSAqKTsKICAgICB2b2lkIGFwcGVuZFVDaGFyUmFuZ2UoVmVjdG9y
PFVDaGFyPiYgcmVzdWx0LCBjb25zdCBwYWlyPGNvbnN0IFVDaGFyKiwgc2l6ZV90PiYgcmFuZ2Up
OwogICAgIFN0cmluZyByZW5kZXJlZFRleHQoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7Cisg
ICAgdm9pZCBhcHBlbmRUZXh0Tm9kZShWZWN0b3I8VUNoYXI+JiBvdXQsIE5vZGUqIG5vZGUpOwog
ICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBFbGVtZW50Kik7CiAgICAg
Ym9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlKiwgTmFtZXNw
YWNlcyYpOwogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJLCBOYW1lc3BhY2VzJik7Ci0gICAgdm9pZCBhcHBlbmREb2N1bWVudFR5cGUoVmVjdG9yPFVD
aGFyPiYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUqKTsKICAgICB2b2lkIHJlbW92ZUV4dGVy
aW9yU3R5bGVzKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CisgICAgdm9pZCBhcHBlbmRD
b21tZW50Tm9kZShWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IENvbW1lbnQqKTsKKyAgICB2b2lk
IGFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50
VHlwZSopOworICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hh
cj4mIG91dCwgY29uc3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uKik7CisgICAgdm9pZCBhcHBlbmRF
bGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqIG5hbWVzcGFj
ZXMsIGJvb2wgc2hvdWxkQWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsK
KyAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IENE
QVRBU2VjdGlvbiogc2VjdGlvbik7CiAgICAgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8
VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMs
IE5hbWVzcGFjZXMqLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGJvb2wgc2hvdWxkU2Vs
ZkNsb3NlKGNvbnN0IE5vZGUqKTsKICAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNo
YXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKQEAgLTE2OSwyMCArMTg0LDE5IEBAIHZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZShOb2QKICAgICBpZiAobV9ub2RlcykKICAgICAg
ICAgbV9ub2Rlcy0+YXBwZW5kKG5vZGUpOwogfQotICAgIAorCiB2b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjp3cmFwV2l0aFN0eWxlTm9kZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIGlzQmxvY2spCiB7CiAgICAgLy8gQWxsIHRleHQtZGVjb3JhdGlv
bi1yZWxhdGVkIGVsZW1lbnRzIHNob3VsZCBoYXZlIGJlZW4gdHJlYXRlZCBhcyBzcGVjaWFsIGFu
Y2VzdG9ycwogICAgIC8vIElmIHdlIGV2ZXIgaGl0IHRoaXMgQVNTRVJULCB3ZSBzaG91bGQgZXhw
b3J0IFN0eWxlQ2hhbmdlIGluIEFwcGx5U3R5bGVDb21tYW5kIGFuZCB1c2UgaXQgaGVyZQogICAg
IEFTU0VSVChwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVRl
eHREZWNvcmF0aW9uKSAmJiBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KSk7Ci0gICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBTdHJpbmcsIGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9
IikpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBkaXZDbG9zZSwgKCI8
L2Rpdj4iKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlU3Bh
bk9wZW4sICgiPHNwYW4gY2xhc3M9XCIiIEFwcGxlU3R5bGVTcGFuQ2xhc3MgIlwiIHN0eWxlPVwi
IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBzdHlsZVNwYW5PcGVu
LCAoIjxzcGFuIGNsYXNzPVwiIiBBcHBsZVN0eWxlU3BhbkNsYXNzICJcIiBzdHlsZT0iKSk7CiAg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIHN0eWxlU3BhbkNsb3NlLCAoIjwv
c3Bhbj4iKSk7CiAgICAgVmVjdG9yPFVDaGFyPiBvcGVuVGFnOwogICAgIGFwcGVuZChvcGVuVGFn
LCBpc0Jsb2NrID8gZGl2U3R5bGUgOiBzdHlsZVNwYW5PcGVuKTsKLSAgICBhcHBlbmRBdHRyaWJ1
dGVWYWx1ZShvcGVuVGFnLCBzdHlsZS0+Y3NzVGV4dCgpLCBkb2N1bWVudC0+aXNIVE1MRG9jdW1l
bnQoKSk7Ci0gICAgb3BlblRhZy5hcHBlbmQoJ1wiJyk7CisgICAgYXBwZW5kUXVvdGVkQXR0cmli
dXRlVmFsdWUob3BlblRhZywgc3R5bGUtPmNzc1RleHQoKSwgZG9jdW1lbnQtPmlzSFRNTERvY3Vt
ZW50KCkpOwogICAgIG9wZW5UYWcuYXBwZW5kKCc+Jyk7CiAgICAgbV9yZXZlcnNlZFByZWNlZGlu
Z01hcmt1cC5hcHBlbmQoU3RyaW5nOjphZG9wdChvcGVuVGFnKSk7CiAgICAgbV9zdWNjZWVkaW5n
TWFya3VwLmFwcGVuZChpc0Jsb2NrID8gZGl2Q2xvc2UgOiBzdHlsZVNwYW5DbG9zZSk7CkBAIC0y
MTUsOTQgKzIyOSw1OSBAQCBTdHJpbmcgTWFya3VwQWNjdW11bGF0b3I6OnRha2VSZXN1bHRzKCkK
ICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwogfQogCi12b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0
IFN0cmluZyYgYXR0cmlidXRlLCBib29sIGVzY2FwZU5CU1ApCitzdGF0aWMgdm9pZCBlc2NhcGVF
bnRpdHlSZWZlcmVuY2VzKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgVUNoYXIqIGNvbnRlbnQs
IHNpemVfdCBsZW5ndGgsIEVudGl0eUVzY2FwZUZsYWdzIGZsYWdzKQogewotICAgIGNvbnN0IFVD
aGFyKiB1Y2hhcnMgPSBhdHRyaWJ1dGUuY2hhcmFjdGVycygpOwotICAgIHVuc2lnbmVkIGxlbiA9
IGF0dHJpYnV0ZS5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBsYXN0Q29waWVkRnJvbSA9IDA7Ci0K
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgYW1wRW50aXR5LCAoIiZhbXA7
IikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBndEVudGl0eSwgKCIm
Z3Q7IikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBsdEVudGl0eSwg
KCImbHQ7IikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBxdW90RW50
aXR5LCAoIiZxdW90OyIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
bmJzcEVudGl0eSwgKCImbmJzcDsiKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIFVDaGFyIGMgPSB1Y2hhcnNbaV07Ci0gICAgICAgIHN3
aXRjaCAoYykgewotICAgICAgICAgICAgY2FzZSAnJic6Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCh1Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwgaSAtIGxhc3RDb3BpZWRGcm9tKTsKLSAg
ICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBhbXBFbnRpdHkpOwotICAgICAgICAgICAgICAg
IGxhc3RDb3BpZWRGcm9tID0gaSArIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlICc8JzoKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVjaGFycyArIGxh
c3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOwotICAgICAgICAgICAgICAgIGFwcGVu
ZChyZXN1bHQsIGx0RW50aXR5KTsKLSAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkg
KyAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnPic6Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh1Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwgaSAtIGxh
c3RDb3BpZWRGcm9tKTsKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBndEVudGl0eSk7
Ci0gICAgICAgICAgICAgICAgbGFzdENvcGllZEZyb20gPSBpICsgMTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQodWNoYXJzICsgbGFzdENvcGllZEZyb20sIGkgLSBsYXN0Q29waWVkRnJvbSk7Ci0gICAg
ICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcXVvdEVudGl0eSk7Ci0gICAgICAgICAgICAgICAg
bGFzdENvcGllZEZyb20gPSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2Ugbm9CcmVha1NwYWNlOgotICAgICAgICAgICAgICAgIGlmIChlc2NhcGVOQlNQKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodWNoYXJzICsgbGFzdENvcGllZEZy
b20sIGkgLSBsYXN0Q29waWVkRnJvbSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZChyZXN1
bHQsIG5ic3BFbnRpdHkpOwotICAgICAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkg
KyAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICBzdHJ1
Y3QgQ2hhckVudGl0eSB7CisgICAgICAgIFVDaGFyIGVudGl0eTsKKyAgICAgICAgU3RyaW5nIHJl
ZmVyZW5jZTsKKyAgICAgICAgRW50aXR5RXNjYXBlRmxhZ3MgZmxhZzsKKworICAgICAgICBDaGFy
RW50aXR5KFVDaGFyIGVudGl0eSwgY29uc3QgU3RyaW5nJiByZWZlcmVuY2UsIEVudGl0eUVzY2Fw
ZUZsYWcgZmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy0+ZW50aXR5ID0gZW50aXR5
OworICAgICAgICAgICAgdGhpcy0+cmVmZXJlbmNlID0gcmVmZXJlbmNlOworICAgICAgICAgICAg
dGhpcy0+ZmxhZyA9IGZsYWc7CisgICAgICAgIH0KKyAgICB9OworCisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBDaGFyRW50aXR5LCBhbXBFbnRpdHksICgnJicsICImYW1wOyIsIGVzY2Fw
ZUVudGl0eUFtcCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgQ2hhckVudGl0eSwg
bHRFbnRpdHksICgnPCcsICImbHQ7IiwgZXNjYXBlRW50aXR5TGVmdCkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgQ2hhckVudGl0eSwgZ3RFbnRpdHksICgnPicsICImZ3Q7IiwgZXNj
YXBlRW50aXR5UmlnaHQpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IENoYXJFbnRp
dHksIHF1b3RFbnRpdHksICgnIicsICImcXVvdDsiLCBlc2NhcGVFbnRpdHlEb3VibGVRdW90YXRp
b24pKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IENoYXJFbnRpdHksIG5ic3BFbnRp
dHksIChub0JyZWFrU3BhY2UsICImbmJzcDsiLCBlc2NhcGVFbnRpdHlOb25CcmVha1NwYWNlKSk7
CisgICAgc3RhdGljIGNvbnN0IENoYXJFbnRpdHkqIGVudGl0aWVzW10gPSB7ICZhbXBFbnRpdHks
ICZsdEVudGl0eSwgJmd0RW50aXR5LCAmcXVvdEVudGl0eSwgJm5ic3BFbnRpdHkgfTsKKworICAg
IHNpemVfdCBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBVQ2hhciBjdXJyZW50Q2hhciA9IGNvbnRl
bnRbaV07CisKKyAgICAgICAgLy8gVGhpcyBsb29wIHNob3VsZCBiZSB1bmZvbGRlZCBkdXJpbmcg
Y29tcGlsYXRpb24uCisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgc2l6ZW9mKGVudGl0
aWVzKSAvIHNpemVvZihDaGFyRW50aXR5Kik7IGorKykgeworICAgICAgICAgICAgaWYgKGVudGl0
aWVzW2pdLT5mbGFnICYgZmxhZ3MgJiYgZW50aXRpZXNbal0tPmVudGl0eSA9PSBjdXJyZW50Q2hh
cikgeworICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoY29udGVudCArIHBvc2l0aW9uQWZ0ZXJM
YXN0RW50aXR5LCBpIC0gcG9zaXRpb25BZnRlckxhc3RFbnRpdHkpOworICAgICAgICAgICAgICAg
IGFwcGVuZChvdXQsIGVudGl0aWVzW2pdLT5yZWZlcmVuY2UpOworICAgICAgICAgICAgICAgIHBv
c2l0aW9uQWZ0ZXJMYXN0RW50aXR5ID0gaSArIDE7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8v
IHNob3VsZCBvbmx5IG1hdGNoIG9uZSBlbnRpdHkKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KLSAgICAKLSAgICByZXN1bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBs
ZW4gLSBsYXN0Q29waWVkRnJvbSk7CisgICAgb3V0LmFwcGVuZChjb250ZW50ICsgcG9zaXRpb25B
ZnRlckxhc3RFbnRpdHksIGxlbmd0aCAtIHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5KTsKK30KKwor
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkQXR0cmlidXRlVmFsdWUoVmVjdG9y
PFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBlc2NhcGVOQlNQ
KQoreworICAgIHJlc3VsdC5hcHBlbmQoJ1wiJyk7CisgICAgZXNjYXBlRW50aXR5UmVmZXJlbmNl
cyhyZXN1bHQsIGF0dHJpYnV0ZS5jaGFyYWN0ZXJzKCksIGF0dHJpYnV0ZS5sZW5ndGgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZUVudGl0eUFtcCB8IGVzY2FwZUVudGl0eUxl
ZnQgfCBlc2NhcGVFbnRpdHlSaWdodCB8IGVzY2FwZUVudGl0eURvdWJsZVF1b3RhdGlvbgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAoZXNjYXBlTkJTUCA/IGVzY2FwZUVudGl0eU5vbkJy
ZWFrU3BhY2UgOiAwKSk7CisgICAgcmVzdWx0LmFwcGVuZCgnXCInKTsKIH0KIAogc3RhdGljIHZv
aWQgYXBwZW5kRXNjYXBlZENvbnRlbnQoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBwYWlyPGNvbnN0
IFVDaGFyKiwgc2l6ZV90PiByYW5nZSwgYm9vbCBlc2NhcGVOQlNQKQogewotICAgIGNvbnN0IFVD
aGFyKiB1Y2hhcnMgPSByYW5nZS5maXJzdDsKLSAgICB1bnNpZ25lZCBsZW4gPSByYW5nZS5zZWNv
bmQ7Ci0gICAgdW5zaWduZWQgbGFzdENvcGllZEZyb20gPSAwOwotICAgIAotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBhbXBFbnRpdHksICgiJmFtcDsiKSk7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGd0RW50aXR5LCAoIiZndDsiKSk7Ci0gICAg
REVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGx0RW50aXR5LCAoIiZsdDsiKSk7Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIG5ic3BFbnRpdHksICgiJm5ic3A7
IikpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAg
IFVDaGFyIGMgPSB1Y2hhcnNbaV07Ci0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgICAg
Y2FzZSAnJic6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh1Y2hhcnMgKyBsYXN0Q29w
aWVkRnJvbSwgaSAtIGxhc3RDb3BpZWRGcm9tKTsKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVz
dWx0LCBhbXBFbnRpdHkpOwotICAgICAgICAgICAgICAgIGxhc3RDb3BpZWRGcm9tID0gaSArIDE7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICc8JzoKLSAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENv
cGllZEZyb20pOwotICAgICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIGx0RW50aXR5KTsKLSAg
ICAgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkgKyAxOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSAnPic6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh1Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwgaSAtIGxhc3RDb3BpZWRGcm9tKTsKLSAgICAgICAg
ICAgICAgICBhcHBlbmQocmVzdWx0LCBndEVudGl0eSk7Ci0gICAgICAgICAgICAgICAgbGFzdENv
cGllZEZyb20gPSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2Ugbm9CcmVha1NwYWNlOgotICAgICAgICAgICAgICAgIGlmIChlc2NhcGVOQlNQKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodWNoYXJzICsgbGFzdENvcGllZEZyb20sIGkg
LSBsYXN0Q29waWVkRnJvbSk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG5i
c3BFbnRpdHkpOwotICAgICAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkgKyAxOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICByZXN1bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBsZW4g
LSBsYXN0Q29waWVkRnJvbSk7CisKKyAgICBlc2NhcGVFbnRpdHlSZWZlcmVuY2VzKHJlc3VsdCwg
cmFuZ2UuZmlyc3QsIHJhbmdlLnNlY29uZCwgZXNjYXBlRW50aXR5QW1wIHwgZXNjYXBlRW50aXR5
TGVmdCB8IGVzY2FwZUVudGl0eVJpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChl
c2NhcGVOQlNQID8gZXNjYXBlRW50aXR5Tm9uQnJlYWtTcGFjZSA6IDApKTsKIH0gICAgCiAKIFN0
cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6ZXNjYXBlQ29udGVudFRleHQoY29uc3QgU3RyaW5nJiBp
biwgYm9vbCBlc2NhcGVOQlNQKQpAQCAtMzMxLDkgKzMxMCw3IEBAIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEEKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
IG5vdCBmdWxseSBtYXRjaCBvdGhlciBicm93c2Vycy4gRmlyZWZveCBwZXJjZW50LWVzY2FwZXMg
bm9uLUFTQ0lJIGNoYXJhY3RlcnMgZm9yIGlubmVySFRNTC4KLSAgICByZXN1bHQuYXBwZW5kKHF1
b3RlQ2hhcik7Ci0gICAgYXBwZW5kQXR0cmlidXRlVmFsdWUocmVzdWx0LCB1cmxTdHJpbmcsIGZh
bHNlKTsKLSAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ2hhcik7ICAgIAorICAgIGFwcGVuZFF1b3Rl
ZEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgdXJsU3RyaW5nLCBmYWxzZSk7CiB9CiAKIFN0cmluZyBN
YXJrdXBBY2N1bXVsYXRvcjo6c3RyaW5nVmFsdWVGb3JSYW5nZShjb25zdCBOb2RlKiBub2RlLCBj
b25zdCBSYW5nZSogcmFuZ2UpCkBAIC00NzQsMTIgKzQ1MSw0NiBAQCB2b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmROYW1lc3BhY2UoCiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQuYXBw
ZW5kKCc9Jyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAgICAgICAgYXBwZW5kQXR0
cmlidXRlVmFsdWUocmVzdWx0LCBuYW1lc3BhY2VVUkksIGZhbHNlKTsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgnIicpOworICAgICAgICBhcHBlbmRRdW90ZWRBdHRyaWJ1dGVWYWx1ZShyZXN1bHQs
IG5hbWVzcGFjZVVSSSwgZmFsc2UpOwogICAgIH0KIH0KIAordm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6cmVtb3ZlRXh0ZXJpb3JTdHlsZXMoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KQoreworICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsb2F0KTsKK30KKwor
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dE5vZGUoVmVjdG9yPFVDaGFyPiYgb3V0
LCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBib29sIGRvY3VtZW50SXNI
VE1MID0gbm9kZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKKworICAgIGlmIChOb2Rl
KiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKHBhcmVudC0+aGFz
VGFnTmFtZShzY3JpcHRUYWcpIHx8IHBhcmVudC0+aGFzVGFnTmFtZShzdHlsZVRhZykgfHwgcGFy
ZW50LT5oYXNUYWdOYW1lKHhtcFRhZykpCisgICAgICAgICAgICBhcHBlbmRVQ2hhclJhbmdlKG91
dCwgdWNoYXJSYW5nZShub2RlLCBtX3JhbmdlKSk7CisgICAgICAgIGVsc2UgaWYgKHBhcmVudC0+
aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpCisgICAgICAgICAgICBhcHBlbmRFc2NhcGVkQ29udGVu
dChvdXQsIHVjaGFyUmFuZ2Uobm9kZSwgbV9yYW5nZSksIGRvY3VtZW50SXNIVE1MKTsKKyAgICB9
CisKKyAgICBpZiAoIXNob3VsZEFubm90YXRlKCkpIHsKKyAgICAgICAgYXBwZW5kRXNjYXBlZENv
bnRlbnQob3V0LCB1Y2hhclJhbmdlKG5vZGUsIG1fcmFuZ2UpLCBkb2N1bWVudElzSFRNTCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYm9vbCB1c2VSZW5kZXJlZFRleHQgPSAh
ZW5jbG9zaW5nTm9kZVdpdGhUYWcoUG9zaXRpb24obm9kZSwgMCksIHNlbGVjdFRhZyk7CisgICAg
U3RyaW5nIG1hcmt1cCA9IGVzY2FwZUNvbnRlbnRUZXh0KHVzZVJlbmRlcmVkVGV4dCA/IHJlbmRl
cmVkVGV4dChub2RlLCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2Uobm9kZSwgbV9yYW5n
ZSksIGZhbHNlKTsKKyAgICBtYXJrdXAgPSBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9y
bWF0KG1hcmt1cCwgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dCo+KG5vZGUpKTsKKyAgICBhcHBlbmQo
b3V0LCBtYXJrdXApOworfQorICAgIAordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29t
bWVudE5vZGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBDb21tZW50KiBjb21tZW50KQorewor
ICAgIC8vIEZJWE1FOiBDb21tZW50IGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJp
YWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2Vw
dGlvbiBpZiBpdCBpbmNsdWRlcyAiLS0+Ii4KKyAgICBhcHBlbmQob3V0LCAiPCEtLSIpOworICAg
IGFwcGVuZChvdXQsIGNvbW1lbnQtPmRhdGEoKSk7CisgICAgYXBwZW5kKG91dCwgIi0tPiIpOwor
fQorCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmREb2N1bWVudFR5cGUoVmVjdG9yPFVD
aGFyPiYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUqIG4pCiB7CiAgICAgaWYgKG4tPm5hbWUo
KS5pc0VtcHR5KCkpCkBAIC01MDksOSArNTIwLDExMSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmREb2N1bWVudFR5CiAgICAgYXBwZW5kKHJlc3VsdCwgIj4iKTsKIH0KIAotdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6cmVtb3ZlRXh0ZXJpb3JTdHlsZXMoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgUHJvY2Vzc2luZ0luc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlGbG9hdCk7CisgICAgLy8gRklYTUU6IFBJIGRhdGEgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxT
ZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgdGhpcyBzaG91bGQgcmFpc2Ug
YW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICI/PiIuCisgICAgYXBwZW5kKG91dCwgIjw/Iik7
CisgICAgYXBwZW5kKG91dCwgaW5zdHJ1Y3Rpb24tPnRhcmdldCgpKTsKKyAgICBhcHBlbmQob3V0
LCAiICIpOworICAgIGFwcGVuZChvdXQsIGluc3RydWN0aW9uLT5kYXRhKCkpOworICAgIGFwcGVu
ZChvdXQsICI/PiIpOworfQorCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50
KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNw
YWNlcywgYm9vbCBzaG91bGRBZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUg
cmFuZ2VGdWxseVNlbGVjdHNOb2RlKQoreworICAgIGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVt
ZW50LT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpOworICAgIG91dC5hcHBlbmQoJzwnKTsK
KyAgICBhcHBlbmQob3V0LCBlbGVtZW50LT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOworCisg
ICAgaWYgKCFkb2N1bWVudElzSFRNTCAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFj
ZUVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIGFwcGVuZE5hbWVzcGFjZShvdXQsIGVsZW1lbnQt
PnByZWZpeCgpLCBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMpOworCisgICAg
TmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOworICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1
dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAvLyBXZSdsbCBoYW5k
bGUgdGhlIHN0eWxlIGF0dHJpYnV0ZSBzZXBhcmF0ZWx5LCBiZWxvdy4KKyAgICAgICAgaWYgKGF0
dHJpYnV0ZS0+bmFtZSgpID09IHN0eWxlQXR0ciAmJiBlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkg
JiYgKHNob3VsZEFubm90YXRlKCkgfHwgc2hvdWxkQWRkRGlzcGxheUlubGluZSkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LmFwcGVuZCgnICcpOworCisgICAgICAgIGlmIChk
b2N1bWVudElzSFRNTCkKKyAgICAgICAgICAgIGFwcGVuZChvdXQsIGF0dHJpYnV0ZS0+bmFtZSgp
LmxvY2FsTmFtZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXBwZW5kKG91dCwgYXR0
cmlidXRlLT5uYW1lKCkudG9TdHJpbmcoKSk7CisKKyAgICAgICAgb3V0LmFwcGVuZCgnPScpOwor
CisgICAgICAgIGlmIChlbGVtZW50LT5pc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKSB7CisgICAg
ICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNvbXBsZXRlIGZpbGU6Ly8vIFVSTHMgYmVjYXVz
ZSBpdCBtYXkgY29udGFpbiBzZW5zaXRpdmUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIC8vIGFi
b3V0IHRoZSB1c2VyJ3Mgc3lzdGVtLgorICAgICAgICAgICAgU3RyaW5nIHVybCA9IGF0dHJpYnV0
ZS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRSZXNvbHZlVVJMcygpICYmICFlbGVt
ZW50LT5kb2N1bWVudCgpLT51cmwoKS5pc0xvY2FsRmlsZSgpKQorICAgICAgICAgICAgICAgIHVy
bCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHJpYnV0ZS0+dmFsdWUoKSk7
CisgICAgICAgICAgICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShvdXQsIHVybCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXBwZW5kUXVvdGVkQXR0cmlidXRlVmFsdWUob3V0
LCBhdHRyaWJ1dGUtPnZhbHVlKCksIGRvY3VtZW50SXNIVE1MKTsKKworICAgICAgICBpZiAoIWRv
Y3VtZW50SXNIVE1MICYmIG5hbWVzcGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRl
KGF0dHJpYnV0ZSwgKm5hbWVzcGFjZXMpKQorICAgICAgICAgICAgYXBwZW5kTmFtZXNwYWNlKG91
dCwgYXR0cmlidXRlLT5wcmVmaXgoKSwgYXR0cmlidXRlLT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVz
cGFjZXMpOworICAgIH0KKworICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgKHNo
b3VsZEFubm90YXRlKCkgfHwgc2hvdWxkQWRkRGlzcGxheUlubGluZSkpIHsKKyAgICAgICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oZWxlbWVudCktPmdldElubGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7CisgICAgICAg
IGlmIChzaG91bGRBbm5vdGF0ZSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24+IHN0eWxlRnJvbU1hdGNoZWRSdWxlcyA9IHN0eWxlRnJvbU1hdGNoZWRS
dWxlc0ZvckVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgICAgICAvLyBTdHlsZXMgZnJvbSB0aGUg
aW5saW5lIHN0eWxlIGRlY2xhcmF0aW9uLCBoZWxkIGluIHRoZSB2YXJpYWJsZSAic3R5bGUiLCB0
YWtlIHByZWNlZGVuY2UgCisgICAgICAgICAgICAvLyBvdmVyIHRob3NlIGZyb20gbWF0Y2hlZCBy
dWxlcy4KKyAgICAgICAgICAgIHN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+bWVyZ2Uoc3R5bGUuZ2V0
KCkpOworICAgICAgICAgICAgc3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXM7CisKKyAgICAg
ICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVG
b3JFbGVtZW50ID0gY29tcHV0ZWRTdHlsZShlbGVtZW50KTsKKyAgICAgICAgICAgIFJlZlB0cjxD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZnJvbUNvbXB1dGVkU3R5bGUgPSBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5
bGUtPmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b246OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICAgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7
CisgICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHByb3BlcnR5LnZhbHVlKCk7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSB2YWx1ZSwgaWYgaXQncyBhIHBl
cmNlbnRhZ2UsIG1heSBub3QgcmVmbGVjdCB0aGUgYWN0dWFsIGNvbXB1dGVkIHZhbHVlLiAgCisg
ICAgICAgICAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBzdHlsZT0iaGVpZ2h0OiAxJTsgb3Zl
cmZsb3c6IHZpc2libGU7IiBpbiBxdWlya3Ntb2RlCisgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGVyZSBhcmUgb3RoZXJzIGxpa2UgdGhpcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81MTk1
MTIzPiBTbGFzaGRvdCBjb3B5L3Bhc3RlIGZpZGVsaXR5IHByb2JsZW0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX1BSSU1JVElW
RV9WQUxVRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbHVlKS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVmUHRy
PENTU1ZhbHVlPiBjb21wdXRlZFByb3BlcnR5VmFsdWUgPSBjb21wdXRlZFN0eWxlRm9yRWxlbWVu
dC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShwcm9wZXJ0eS5pZCgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnJvbUNvbXB1dGVkU3R5bGUtPmFkZFBhcnNlZFByb3BlcnR5KENTU1By
b3BlcnR5KHByb3BlcnR5LmlkKCksIGNvbXB1dGVkUHJvcGVydHlWYWx1ZSkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3R5bGUtPm1lcmdlKGZyb21D
b21wdXRlZFN0eWxlLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2hvdWxkQWRkRGlz
cGxheUlubGluZSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURp
c3BsYXksIENTU1ZhbHVlSW5saW5lLCB0cnVlKTsKKyAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMg
bm90IGZ1bGx5IHNlbGVjdGVkIGJ5IHRoZSByYW5nZSwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGtl
ZXAgc3R5bGVzIHRoYXQgYWZmZWN0IGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5vZGVzIGFyb3Vu
ZCBpdAorICAgICAgICAvLyBvbmx5IHRoZSBvbmVzIHRoYXQgYWZmZWN0IGl0IGFuZCB0aGUgbm9k
ZXMgd2l0aGluIGl0LgorICAgICAgICBpZiAocmFuZ2VGdWxseVNlbGVjdHNOb2RlID09IERvZXNO
b3RGdWxseVNlbGVjdE5vZGUpCisgICAgICAgICAgICByZW1vdmVFeHRlcmlvclN0eWxlcyhzdHls
ZS5nZXQoKSk7CisgICAgICAgIGlmIChzdHlsZS0+bGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVQcmVmaXgsICgiIHN0eWxl
PSIpKTsKKyAgICAgICAgICAgIGFwcGVuZChvdXQsIHN0eWxlUHJlZml4KTsKKyAgICAgICAgICAg
IGFwcGVuZFF1b3RlZEF0dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmNzc1RleHQoKSwgZG9jdW1l
bnRJc0hUTUwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNob3VsZFNlbGZDbG9zZShl
bGVtZW50KSkgeworICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQorICAgICAg
ICAgICAgb3V0LmFwcGVuZCgnICcpOyAvLyBYSFRNTCAxLjAgPC0+IEhUTUwgY29tcGF0aWJpbGl0
eS4KKyAgICAgICAgb3V0LmFwcGVuZCgnLycpOworICAgIH0KKyAgICBvdXQuYXBwZW5kKCc+Jyk7
Cit9CisKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2VjdGlvbihWZWN0b3I8
VUNoYXI+JiBvdXQsIGNvbnN0IENEQVRBU2VjdGlvbiogc2VjdGlvbikKK3sKKyAgICAvLyBGSVhN
RTogQ0RBVEEgY29udGVudCBpcyBub3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBw
b3NzaWJseSBvdGhlciBjYWxsZXJzKSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGlu
Y2x1ZGVzICJdXT4iLgorICAgIGFwcGVuZChvdXQsICI8IVtDREFUQVsiKTsKKyAgICBhcHBlbmQo
b3V0LCBzZWN0aW9uLT5kYXRhKCkpOworICAgIGFwcGVuZChvdXQsICJdXT4iKTsKIH0KIAogdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVz
dWx0LCBjb25zdCBOb2RlKiBub2RlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIE5hbWVz
cGFjZXMqIG5hbWVzcGFjZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0
c05vZGUpCkBAIC01MTksMzYgKzYzMiwxMiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRTdGFydE1hcmt1CiAgICAgaWYgKG5hbWVzcGFjZXMpCiAgICAgICAgIG5hbWVzcGFjZXMtPmNo
ZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBub2RlLT5kb2N1
bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpOwogICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkg
ewotICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERTogewotICAgICAgICAgICAgaWYgKE5vZGUq
IHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIGlmIChwYXJl
bnQtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKQotICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnQt
Pmhhc1RhZ05hbWUoc3R5bGVUYWcpCi0gICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+aGFz
VGFnTmFtZSh4bXBUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZFVDaGFyUmFuZ2Uo
cmVzdWx0LCB1Y2hhclJhbmdlKG5vZGUsIG1fcmFuZ2UpKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUodGV4
dGFyZWFUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEVzY2FwZWRDb250ZW50KHJl
c3VsdCwgdWNoYXJSYW5nZShub2RlLCBtX3JhbmdlKSwgZG9jdW1lbnRJc0hUTUwpOyAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghc2hvdWxkQW5ub3RhdGUoKSkgewot
ICAgICAgICAgICAgICAgIGFwcGVuZEVzY2FwZWRDb250ZW50KHJlc3VsdCwgdWNoYXJSYW5nZShu
b2RlLCBtX3JhbmdlKSwgZG9jdW1lbnRJc0hUTUwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBib29sIHVzZVJlbmRlcmVk
VGV4dCA9ICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhQb3NpdGlvbihjb25zdF9jYXN0PE5vZGUqPihu
b2RlKSwgMCksIHNlbGVjdFRhZyk7Ci0gICAgICAgICAgICBTdHJpbmcgbWFya3VwID0gZXNjYXBl
Q29udGVudFRleHQodXNlUmVuZGVyZWRUZXh0ID8gcmVuZGVyZWRUZXh0KG5vZGUsIG1fcmFuZ2Up
IDogc3RyaW5nVmFsdWVGb3JSYW5nZShub2RlLCBtX3JhbmdlKSwgZmFsc2UpOwotICAgICAgICAg
ICAgbWFya3VwID0gY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChtYXJrdXAsIHN0
YXRpY19jYXN0PGNvbnN0IFRleHQqPihub2RlKSk7Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0
LCBtYXJrdXApOworICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKKyAgICAgICAgICAgIGFw
cGVuZFRleHROb2RlKHJlc3VsdCwgY29uc3RfY2FzdDxOb2RlKj4obm9kZSkpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogQ29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQg
WE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBh
biBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIi0tPiIuCi0gICAgICAgICAgICBhcHBlbmQocmVz
dWx0LCAiPCEtLSIpOwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29u
c3QgQ29tbWVudCo+KG5vZGUpLT5kYXRhKCkpOwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwg
Ii0tPiIpOworICAgICAgICAgICAgYXBwZW5kQ29tbWVudE5vZGUocmVzdWx0LCBzdGF0aWNfY2Fz
dDxjb25zdCBDb21tZW50Kj4obm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9GUkFH
TUVOVF9OT0RFOgpAQCAtNTU2LDExNyArNjQ1LDE0IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZFN0YXJ0TWFya3UKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6
CiAgICAgICAgICAgICBhcHBlbmREb2N1bWVudFR5cGUocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25z
dCBEb2N1bWVudFR5cGUqPihub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6IHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBQSSBkYXRhIGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3Np
Ymx5IG90aGVyIGNhbGxlcnMpIHRoaXMgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBp
bmNsdWRlcyAiPz4iLgotICAgICAgICAgICAgY29uc3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBu
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obm9kZSk7Ci0gICAg
ICAgICAgICBhcHBlbmQocmVzdWx0LCAiPD8iKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQs
IG4tPnRhcmdldCgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICIgIik7Ci0gICAgICAg
ICAgICBhcHBlbmQocmVzdWx0LCBuLT5kYXRhKCkpOwotICAgICAgICAgICAgYXBwZW5kKHJlc3Vs
dCwgIj8+Iik7CisgICAgICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RF
OgorICAgICAgICAgICAgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKHJlc3VsdCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obm9kZSkpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJzwnKTsKLSAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQq
IGVsID0gc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+KG5vZGUpOwotICAgICAgICAgICAgYm9v
bCBjb252ZXJ0ID0gY29udmVydEJsb2Nrc1RvSW5saW5lcyAmJiBpc0Jsb2NrKGNvbnN0X2Nhc3Q8
Tm9kZSo+KG5vZGUpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIGVsLT5ub2RlTmFtZVBy
ZXNlcnZpbmdDYXNlKCkpOwotICAgICAgICAgICAgTmFtZWROb2RlTWFwICphdHRycyA9IGVsLT5h
dHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRycy0+bGVuZ3Ro
KCk7Ci0gICAgICAgICAgICBpZiAoIWRvY3VtZW50SXNIVE1MICYmIG5hbWVzcGFjZXMgJiYgc2hv
dWxkQWRkTmFtZXNwYWNlRWxlbWVudChlbCkpCi0gICAgICAgICAgICAgICAgYXBwZW5kTmFtZXNw
YWNlKHJlc3VsdCwgZWwtPnByZWZpeCgpLCBlbC0+bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2Vz
KTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSAqYXR0ciA9IGF0dHJzLT5hdHRyaWJ1dGVJ
dGVtKGkpOwotICAgICAgICAgICAgICAgIC8vIFdlJ2xsIGhhbmRsZSB0aGUgc3R5bGUgYXR0cmli
dXRlIHNlcGFyYXRlbHksIGJlbG93LgotICAgICAgICAgICAgICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gc3R5bGVBdHRyICYmIGVsLT5pc0hUTUxFbGVtZW50KCkgJiYgKHNob3VsZEFubm90YXRlKCkg
fHwgY29udmVydCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudElz
SFRNTCkKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgYXR0ci0+bmFtZSgpLmxv
Y2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFw
cGVuZChyZXN1bHQsIGF0dHItPm5hbWUoKS50b1N0cmluZygpKTsKLQotICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJz0nKTsKLQotICAgICAgICAgICAgICAgIGlmIChlbC0+aXNVUkxBdHRy
aWJ1dGUoYXR0cikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBj
b21wbGV0ZSBmaWxlOi8vLyBVUkxzIGJlY2F1c2UgaXQgbWF5IGNvbnRhaW4gc2Vuc2l0aXZlIGlu
Zm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIGFib3V0IHRoZSB1c2VyJ3Mgc3lzdGVt
LgotICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVzb2x2ZVVSTHMoKSAmJiAhbm9kZS0+
ZG9jdW1lbnQoKS0+dXJsKCkuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgbm9kZS0+ZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoYXR0ci0+dmFsdWUoKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVW
YWx1ZShyZXN1bHQsIGF0dHItPnZhbHVlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1wiJyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgYXR0ci0+dmFsdWUoKSwg
ZG9jdW1lbnRJc0hUTUwpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdcIicp
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnRJc0hU
TUwgJiYgbmFtZXNwYWNlcyAmJiBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoYXR0ciwgKm5h
bWVzcGFjZXMpKQotICAgICAgICAgICAgICAgICAgICBhcHBlbmROYW1lc3BhY2UocmVzdWx0LCBh
dHRyLT5wcmVmaXgoKSwgYXR0ci0+bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGVsLT5pc0hUTUxFbGVtZW50
KCkgJiYgKHNob3VsZEFubm90YXRlKCkgfHwgY29udmVydCkpIHsKLSAgICAgICAgICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gY29uc3RfY2FzdDxFbGVtZW50Kj4oZWwpOwotICAgICAgICAgICAg
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpLT5nZXRJbmxpbmVTdHlsZURlY2woKS0+Y29weSgpOwot
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRBbm5vdGF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9tTWF0Y2hlZFJ1
bGVzID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChjb25zdF9jYXN0PEVsZW1lbnQq
PihlbCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBTdHlsZXMgZnJvbSB0aGUgaW5saW5lIHN0
eWxlIGRlY2xhcmF0aW9uLCBoZWxkIGluIHRoZSB2YXJpYWJsZSAic3R5bGUiLCB0YWtlIHByZWNl
ZGVuY2UgCi0gICAgICAgICAgICAgICAgICAgIC8vIG92ZXIgdGhvc2UgZnJvbSBtYXRjaGVkIHJ1
bGVzLgotICAgICAgICAgICAgICAgICAgICBzdHlsZUZyb21NYXRjaGVkUnVsZXMtPm1lcmdlKHN0
eWxlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBzdHlsZUZyb21NYXRjaGVk
UnVsZXM7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlRm9yRWxlbWVudCA9IGNv
bXB1dGVkU3R5bGUoZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gZnJvbUNvbXB1dGVkU3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gKml0OwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHByb3BlcnR5LnZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHZhbHVlLCBpZiBpdCdz
IGEgcGVyY2VudGFnZSwgbWF5IG5vdCByZWZsZWN0IHRoZSBhY3R1YWwgY29tcHV0ZWQgdmFsdWUu
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogc3R5bGU9Imhl
aWdodDogMSU7IG92ZXJmbG93OiB2aXNpYmxlOyIgaW4gcXVpcmtzbW9kZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgb3RoZXJzIGxpa2UgdGhpcywgc2Vl
IDxyZGFyOi8vcHJvYmxlbS81MTk1MTIzPiBTbGFzaGRvdCBjb3B5L3Bhc3RlIGZpZGVsaXR5IHBy
b2JsZW0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlw
ZSgpID09IENTU1ZhbHVlOjpDU1NfUFJJTUlUSVZFX1ZBTFVFKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkt
PnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBj
b21wdXRlZFByb3BlcnR5VmFsdWUgPSBjb21wdXRlZFN0eWxlRm9yRWxlbWVudC0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0eS5pZCgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmcm9tQ29tcHV0ZWRTdHlsZS0+YWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVy
dHkocHJvcGVydHkuaWQoKSwgY29tcHV0ZWRQcm9wZXJ0eVZhbHVlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlLT5tZXJnZShmcm9tQ29tcHV0ZWRTdHlsZS5nZXQo
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb252ZXJ0KQotICAg
ICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBD
U1NWYWx1ZUlubGluZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMg
bm90IGZ1bGx5IHNlbGVjdGVkIGJ5IHRoZSByYW5nZSwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGtl
ZXAgc3R5bGVzIHRoYXQgYWZmZWN0IGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5vZGVzIGFyb3Vu
ZCBpdAotICAgICAgICAgICAgICAgIC8vIG9ubHkgdGhlIG9uZXMgdGhhdCBhZmZlY3QgaXQgYW5k
IHRoZSBub2RlcyB3aXRoaW4gaXQuCi0gICAgICAgICAgICAgICAgaWYgKHJhbmdlRnVsbHlTZWxl
Y3RzTm9kZSA9PSBEb2VzTm90RnVsbHlTZWxlY3ROb2RlKQotICAgICAgICAgICAgICAgICAgICBy
ZW1vdmVFeHRlcmlvclN0eWxlcyhzdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0
eWxlLT5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBTdHJpbmcsIHN0eWxlUHJlZml4LCAoIiBzdHlsZT1cIiIpKTsKLSAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgc3R5bGVQcmVmaXgpOwotICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShyZXN1bHQsIHN0eWxlLT5jc3NUZXh0KCksIGRvY3Vt
ZW50SXNIVE1MKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXCInKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChzaG91bGRTZWxmQ2xvc2UoZWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVsLT5pc0hU
TUxFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsgLy8g
WEhUTUwgMS4wIDwtPiBIVE1MIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnLycpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
PicpOworICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKKyAgICAgICAgICAgIGFwcGVu
ZEVsZW1lbnQocmVzdWx0LCBjb25zdF9jYXN0PEVsZW1lbnQqPihzdGF0aWNfY2FzdDxjb25zdCBF
bGVtZW50Kj4obm9kZSkpLCBuYW1lc3BhY2VzLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlz
QmxvY2soY29uc3RfY2FzdDxOb2RlKj4obm9kZSkpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOb2RlOjpDREFUQV9T
RUNUSU9OX05PREU6IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDREFUQSBjb250ZW50IGlzIG5v
dCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMp
IHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIl1dPiIuCi0gICAgICAg
ICAgICBjb25zdCBDREFUQVNlY3Rpb24qIG4gPSBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rp
b24qPihub2RlKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICI8IVtDREFUQVsiKTsKLSAg
ICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPmRhdGEoKSk7Ci0gICAgICAgICAgICBhcHBlbmQo
cmVzdWx0LCAiXV0+Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBj
YXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKKyAgICAgICAgICAgIGFwcGVuZENEQVRBU2Vj
dGlvbihyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENEQVRBU2VjdGlvbio+KG5vZGUpKTsKICAg
ICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpFTlRJ
VFlfTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64901</attachid>
            <date>2010-08-19 14:56:54 -0700</date>
            <delta_ts>2010-08-20 14:28:42 -0700</delta_ts>
            <desc>fixed &quot;No new tests. (OOPS!)&quot;</desc>
            <filename>fix44288</filename>
            <type>text/plain</type>
            <size>29547</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTY5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDgtMTkgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3VwIHNob3VsZCBiZSBicm9rZW4gZG93biBp
bnRvIHBpZWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDQyODgKKworICAgICAgICBFeHRyYWN0ZWQgYXBwZW5kVGV4dE5vZGUsIGFwcGVuZENvbW1l
bnROb2RlLCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIGFwcGVuZEVsZW1lbnQsCisgICAg
ICAgIGFuZCBhcHBlbmRDREFUQVNlY3Rpb24gZnJvbSBhcHBlbmRTdGFydE1hcmt1cC4KKworICAg
ICAgICBBbHNvIGFkZGVkIGVzY2FwZUVudGl0eVJlZmVyZW5jZXMgdGhhdCBlc2NhcGVzIHRoZSBz
cGVjaWZpZWQgY2hhcmFjdGVycyB1c2luZyBlbnRpdHkgcmVmZXJlbmNlcywKKyAgICAgICAgVGhp
cyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGFwcGVuZFF1b3RlZEF0dHJpYnV0ZVZhbHVlIGFuZCBhcHBl
bmRFc2NhcGVkQ29udGVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXJlIGFkZGVkIHNpbmNl
IHRoaXMgaXMgYSBjbGVhbnVwLgorCisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjp3
cmFwV2l0aFN0eWxlTm9kZSk6IENhbGxzIGFwcGVuZFF1b3RlZEF0dHJpYnV0ZVZhbHVlLgorICAg
ICAgICAoV2ViQ29yZTo6ZXNjYXBlRW50aXR5UmVmZXJlbmNlcyk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q2hhckVudGl0eTo6KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRRdW90ZWRBdHRyaWJ1dGVWYWx1ZSk6IFJlbmFtZWQgZnJvbSBhcHBlbmRBdHRy
aWJ1dGVWYWx1ZQorICAgICAgICBzaW5jZSBpdCBub3cgd3JhcHMgdGhlIGF0dHJpYnV0ZSB2YWx1
ZSBieSBkb3VibGUgcXVvdGF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZEVzY2FwZWRD
b250ZW50KTogQ2FsbHMgZXNjYXBlRW50aXR5UmVmZXJlbmNlcy4KKyAgICAgICAgKFdlYkNvcmU6
Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dE5vZGUpOiBFeHRyYWN0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNl
KTogQ2FsbHMgYXBwZW5kUXVvdGVkQXR0cmlidXRlVmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudE5vZGUpOiBFeHRyYWN0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9u
KTogRXh0cmFjdGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEVsZW1lbnQpOiBFeHRyYWN0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kQ0RBVEFTZWN0aW9uKTogRXh0cmFjdGVkLgorICAgICAgICAoV2ViQ29yZTo6TWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3VwKToKKwogMjAxMC0wOC0xNyAgRXJpYyBT
ZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0
aC4KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiA2NTY4MykKKysrIFdlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxNiBAQCB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCiBzdGF0aWMgYm9vbCBwcm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9O
b25lKENTU1N0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcGVydHlJRCk7CiAKK2VudW0gRW50aXR5
RXNjYXBlRmxhZyB7CisgICAgZXNjYXBlRW50aXR5QW1wICA9IDB4MDAwMSwKKyAgICBlc2NhcGVF
bnRpdHlMZWZ0ICAgPSAweDAwMDIsCisgICAgZXNjYXBlRW50aXR5UmlnaHQgICA9IDB4MDAwNCwK
KyAgICBlc2NhcGVFbnRpdHlEb3VibGVRdW90YXRpb24gPSAweDAwMDgsCisgICAgZXNjYXBlRW50
aXR5Tm9uQnJlYWtTcGFjZSA9IDB4MDAxMCwKK307Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEVu
dGl0eUVzY2FwZUZsYWdzOworc3RhdGljIHZvaWQgZXNjYXBlRW50aXR5UmVmZXJlbmNlcyhWZWN0
b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRW50aXR5RXNjYXBl
RmxhZ3MpOworCiBjbGFzcyBBdHRyaWJ1dGVDaGFuZ2UgewogcHVibGljOgogICAgIEF0dHJpYnV0
ZUNoYW5nZSgpCkBAIC0xMTIsMTggKzEyMiwyMyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHRha2VS
ZXN1bHRzKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0
b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBib29sIGVzY2FwZU5C
U1ApOworICAgIHZvaWQgYXBwZW5kUXVvdGVkQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYg
cmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBlc2NhcGVOQlNQKTsKICAgICBT
dHJpbmcgZXNjYXBlQ29udGVudFRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBlc2NhcGVOQlNQKTsK
ICAgICB2b2lkIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJl
c3VsdCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIFN0cmluZyBzdHJpbmdWYWx1ZUZv
clJhbmdlKGNvbnN0IE5vZGUqLCBjb25zdCBSYW5nZSopOwogICAgIHBhaXI8Y29uc3QgVUNoYXIq
LCBzaXplX3Q+IHVjaGFyUmFuZ2UoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlICopOwogICAgIHZv
aWQgYXBwZW5kVUNoYXJSYW5nZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IHBhaXI8Y29u
c3QgVUNoYXIqLCBzaXplX3Q+JiByYW5nZSk7CiAgICAgU3RyaW5nIHJlbmRlcmVkVGV4dChjb25z
dCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKKyAgICB2b2lkIGFwcGVuZFRleHROb2RlKFZlY3RvcjxV
Q2hhcj4mIG91dCwgTm9kZSogbm9kZSk7CiAgICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVt
ZW50KGNvbnN0IEVsZW1lbnQqKTsKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0
ZShjb25zdCBBdHRyaWJ1dGUqLCBOYW1lc3BhY2VzJik7CiAgICAgdm9pZCBhcHBlbmROYW1lc3Bh
Y2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmKTsKLSAgICB2b2lkIGFw
cGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlw
ZSopOwogICAgIHZvaWQgcmVtb3ZlRXh0ZXJpb3JTdHlsZXMoQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qKTsKKyAgICB2b2lkIGFwcGVuZENvbW1lbnROb2RlKFZlY3RvcjxVQ2hhcj4mIG91dCwg
Y29uc3QgQ29tbWVudCopOworICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hh
cj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKik7CisgICAgdm9pZCBhcHBlbmRQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24qKTsKKyAgICB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVt
ZW50KiwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcywgYm9vbCBzaG91bGRBZGREaXNwbGF5SW5saW5l
LCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworICAgIHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFZl
Y3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgQ0RBVEFTZWN0aW9uKiBzZWN0aW9uKTsKICAgICB2b2lk
IGFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSosIGJv
b2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgTmFtZXNwYWNlcyosIFJhbmdlRnVsbHlTZWxlY3Rz
Tm9kZSk7CiAgICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29uc3QgTm9kZSopOwogICAgIHZvaWQg
YXBwZW5kRW5kTWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSopOwpAQCAt
MTY5LDIwICsxODQsMTkgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKE5v
ZAogICAgIGlmIChtX25vZGVzKQogICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CiB9Ci0g
ICAgCisKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsK
ICAgICAvLyBBbGwgdGV4dC1kZWNvcmF0aW9uLXJlbGF0ZWQgZWxlbWVudHMgc2hvdWxkIGhhdmUg
YmVlbiB0cmVhdGVkIGFzIHNwZWNpYWwgYW5jZXN0b3JzCiAgICAgLy8gSWYgd2UgZXZlciBoaXQg
dGhpcyBBU1NFUlQsIHdlIHNob3VsZCBleHBvcnQgU3R5bGVDaGFuZ2UgaW4gQXBwbHlTdHlsZUNv
bW1hbmQgYW5kIHVzZSBpdCBoZXJlCiAgICAgQVNTRVJUKHByb3BlcnR5TWlzc2luZ09yRXF1YWxU
b05vbmUoc3R5bGUsIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pICYmIHByb3BlcnR5TWlzc2lu
Z09yRXF1YWxUb05vbmUoc3R5bGUsIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5F
ZmZlY3QpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgZGl2U3R5bGUs
ICgiPGRpdiBzdHlsZT1cIiIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmlu
ZywgZGl2U3R5bGUsICgiPGRpdiBzdHlsZT0iKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIGRpdkNsb3NlLCAoIjwvZGl2PiIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKGNvbnN0IFN0cmluZywgc3R5bGVTcGFuT3BlbiwgKCI8c3BhbiBjbGFzcz1cIiIgQXBwbGVT
dHlsZVNwYW5DbGFzcyAiXCIgc3R5bGU9XCIiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIHN0eWxlU3Bhbk9wZW4sICgiPHNwYW4gY2xhc3M9XCIiIEFwcGxlU3R5bGVT
cGFuQ2xhc3MgIlwiIHN0eWxlPSIpKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgc3R5bGVTcGFuQ2xvc2UsICgiPC9zcGFuPiIpKTsKICAgICBWZWN0b3I8VUNoYXI+IG9w
ZW5UYWc7CiAgICAgYXBwZW5kKG9wZW5UYWcsIGlzQmxvY2sgPyBkaXZTdHlsZSA6IHN0eWxlU3Bh
bk9wZW4pOwotICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG9wZW5UYWcsIHN0eWxlLT5jc3NUZXh0
KCksIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKTsKLSAgICBvcGVuVGFnLmFwcGVuZCgnXCIn
KTsKKyAgICBhcHBlbmRRdW90ZWRBdHRyaWJ1dGVWYWx1ZShvcGVuVGFnLCBzdHlsZS0+Y3NzVGV4
dCgpLCBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7CiAgICAgb3BlblRhZy5hcHBlbmQoJz4n
KTsKICAgICBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KG9w
ZW5UYWcpKTsKICAgICBtX3N1Y2NlZWRpbmdNYXJrdXAuYXBwZW5kKGlzQmxvY2sgPyBkaXZDbG9z
ZSA6IHN0eWxlU3BhbkNsb3NlKTsKQEAgLTIxNSw5NCArMjI5LDU5IEBAIFN0cmluZyBNYXJrdXBB
Y2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMoKQogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3Vs
dCk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZl
Y3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZXNjYXBl
TkJTUCkKK3N0YXRpYyB2b2lkIGVzY2FwZUVudGl0eVJlZmVyZW5jZXMoVmVjdG9yPFVDaGFyPiYg
b3V0LCBjb25zdCBVQ2hhciogY29udGVudCwgc2l6ZV90IGxlbmd0aCwgRW50aXR5RXNjYXBlRmxh
Z3MgZmxhZ3MpCiB7Ci0gICAgY29uc3QgVUNoYXIqIHVjaGFycyA9IGF0dHJpYnV0ZS5jaGFyYWN0
ZXJzKCk7Ci0gICAgdW5zaWduZWQgbGVuID0gYXR0cmlidXRlLmxlbmd0aCgpOwotICAgIHVuc2ln
bmVkIGxhc3RDb3BpZWRGcm9tID0gMDsKLQotICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3Qg
U3RyaW5nLCBhbXBFbnRpdHksICgiJmFtcDsiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIGd0RW50aXR5LCAoIiZndDsiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIGx0RW50aXR5LCAoIiZsdDsiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChjb25zdCBTdHJpbmcsIHF1b3RFbnRpdHksICgiJnF1b3Q7IikpOwotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBuYnNwRW50aXR5LCAoIiZuYnNwOyIpKTsKLSAgICAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgVUNoYXIg
YyA9IHVjaGFyc1tpXTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICBjYXNlICcm
JzoKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9t
LCBpIC0gbGFzdENvcGllZEZyb20pOwotICAgICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIGFt
cEVudGl0eSk7Ci0gICAgICAgICAgICAgICAgbGFzdENvcGllZEZyb20gPSBpICsgMTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJzwnOgotICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQodWNoYXJzICsgbGFzdENvcGllZEZyb20sIGkgLSBsYXN0Q29waWVkRnJv
bSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbHRFbnRpdHkpOwotICAgICAgICAg
ICAgICAgIGxhc3RDb3BpZWRGcm9tID0gaSArIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlICc+JzoKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVjaGFy
cyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOwotICAgICAgICAgICAgICAg
IGFwcGVuZChyZXN1bHQsIGd0RW50aXR5KTsKLSAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJv
bSA9IGkgKyAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnIic6
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh1Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwg
aSAtIGxhc3RDb3BpZWRGcm9tKTsKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBxdW90
RW50aXR5KTsKLSAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkgKyAxOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBub0JyZWFrU3BhY2U6Ci0gICAgICAg
ICAgICAgICAgaWYgKGVzY2FwZU5CU1ApIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCh1Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwgaSAtIGxhc3RDb3BpZWRGcm9tKTsKLSAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbmJzcEVudGl0eSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGxhc3RDb3BpZWRGcm9tID0gaSArIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgIHN0cnVjdCBDaGFyRW50aXR5IHsKKyAgICAgICAgVUNoYXIg
ZW50aXR5OworICAgICAgICBTdHJpbmcgcmVmZXJlbmNlOworICAgICAgICBFbnRpdHlFc2NhcGVG
bGFncyBmbGFnOworCisgICAgICAgIENoYXJFbnRpdHkoVUNoYXIgZW50aXR5LCBjb25zdCBTdHJp
bmcmIHJlZmVyZW5jZSwgRW50aXR5RXNjYXBlRmxhZyBmbGFnKQorICAgICAgICB7CisgICAgICAg
ICAgICB0aGlzLT5lbnRpdHkgPSBlbnRpdHk7CisgICAgICAgICAgICB0aGlzLT5yZWZlcmVuY2Ug
PSByZWZlcmVuY2U7CisgICAgICAgICAgICB0aGlzLT5mbGFnID0gZmxhZzsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IENoYXJFbnRpdHksIGFtcEVu
dGl0eSwgKCcmJywgIiZhbXA7IiwgZXNjYXBlRW50aXR5QW1wKSk7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChjb25zdCBDaGFyRW50aXR5LCBsdEVudGl0eSwgKCc8JywgIiZsdDsiLCBlc2NhcGVF
bnRpdHlMZWZ0KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBDaGFyRW50aXR5LCBn
dEVudGl0eSwgKCc+JywgIiZndDsiLCBlc2NhcGVFbnRpdHlSaWdodCkpOworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgQ2hhckVudGl0eSwgcXVvdEVudGl0eSwgKCciJywgIiZxdW90OyIs
IGVzY2FwZUVudGl0eURvdWJsZVF1b3RhdGlvbikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Y29uc3QgQ2hhckVudGl0eSwgbmJzcEVudGl0eSwgKG5vQnJlYWtTcGFjZSwgIiZuYnNwOyIsIGVz
Y2FwZUVudGl0eU5vbkJyZWFrU3BhY2UpKTsKKyAgICBzdGF0aWMgY29uc3QgQ2hhckVudGl0eSog
ZW50aXRpZXNbXSA9IHsgJmFtcEVudGl0eSwgJmx0RW50aXR5LCAmZ3RFbnRpdHksICZxdW90RW50
aXR5LCAmbmJzcEVudGl0eSB9OworCisgICAgc2l6ZV90IHBvc2l0aW9uQWZ0ZXJMYXN0RW50aXR5
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
IFVDaGFyIGN1cnJlbnRDaGFyID0gY29udGVudFtpXTsKKworICAgICAgICAvLyBUaGlzIGxvb3Ag
c2hvdWxkIGJlIHVuZm9sZGVkIGR1cmluZyBjb21waWxhdGlvbi4KKyAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBzaXplb2YoZW50aXRpZXMpIC8gc2l6ZW9mKENoYXJFbnRpdHkqKTsgaisr
KSB7CisgICAgICAgICAgICBpZiAoZW50aXRpZXNbal0tPmZsYWcgJiBmbGFncyAmJiBlbnRpdGll
c1tqXS0+ZW50aXR5ID09IGN1cnJlbnRDaGFyKSB7CisgICAgICAgICAgICAgICAgb3V0LmFwcGVu
ZChjb250ZW50ICsgcG9zaXRpb25BZnRlckxhc3RFbnRpdHksIGkgLSBwb3NpdGlvbkFmdGVyTGFz
dEVudGl0eSk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG91dCwgZW50aXRpZXNbal0tPnJlZmVy
ZW5jZSk7CisgICAgICAgICAgICAgICAgcG9zaXRpb25BZnRlckxhc3RFbnRpdHkgPSBpICsgMTsK
KyAgICAgICAgICAgICAgICBicmVhazsgLy8gc2hvdWxkIG9ubHkgbWF0Y2ggb25lIGVudGl0eQor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHJlc3VsdC5hcHBlbmQo
dWNoYXJzICsgbGFzdENvcGllZEZyb20sIGxlbiAtIGxhc3RDb3BpZWRGcm9tKTsKKyAgICBvdXQu
YXBwZW5kKGNvbnRlbnQgKyBwb3NpdGlvbkFmdGVyTGFzdEVudGl0eSwgbGVuZ3RoIC0gcG9zaXRp
b25BZnRlckxhc3RFbnRpdHkpOworfQorCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRR
dW90ZWRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYg
YXR0cmlidXRlLCBib29sIGVzY2FwZU5CU1ApCit7CisgICAgcmVzdWx0LmFwcGVuZCgnXCInKTsK
KyAgICBlc2NhcGVFbnRpdHlSZWZlcmVuY2VzKHJlc3VsdCwgYXR0cmlidXRlLmNoYXJhY3RlcnMo
KSwgYXR0cmlidXRlLmxlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBl
RW50aXR5QW1wIHwgZXNjYXBlRW50aXR5TGVmdCB8IGVzY2FwZUVudGl0eVJpZ2h0IHwgZXNjYXBl
RW50aXR5RG91YmxlUXVvdGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChlc2Nh
cGVOQlNQID8gZXNjYXBlRW50aXR5Tm9uQnJlYWtTcGFjZSA6IDApKTsKKyAgICByZXN1bHQuYXBw
ZW5kKCdcIicpOwogfQogCiBzdGF0aWMgdm9pZCBhcHBlbmRFc2NhcGVkQ29udGVudChWZWN0b3I8
VUNoYXI+JiByZXN1bHQsIHBhaXI8Y29uc3QgVUNoYXIqLCBzaXplX3Q+IHJhbmdlLCBib29sIGVz
Y2FwZU5CU1ApCiB7Ci0gICAgY29uc3QgVUNoYXIqIHVjaGFycyA9IHJhbmdlLmZpcnN0OwotICAg
IHVuc2lnbmVkIGxlbiA9IHJhbmdlLnNlY29uZDsKLSAgICB1bnNpZ25lZCBsYXN0Q29waWVkRnJv
bSA9IDA7Ci0gICAgCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJpbmcsIGFtcEVu
dGl0eSwgKCImYW1wOyIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
Z3RFbnRpdHksICgiJmd0OyIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmlu
ZywgbHRFbnRpdHksICgiJmx0OyIpKTsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0
cmluZywgbmJzcEVudGl0eSwgKCImbmJzcDsiKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IHVjaGFyc1tpXTsKLSAgICAgICAg
c3dpdGNoIChjKSB7Ci0gICAgICAgICAgICBjYXNlICcmJzoKLSAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBpIC0gbGFzdENvcGllZEZyb20pOwot
ICAgICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIGFtcEVudGl0eSk7Ci0gICAgICAgICAgICAg
ICAgbGFzdENvcGllZEZyb20gPSBpICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgJzwnOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodWNoYXJzICsg
bGFzdENvcGllZEZyb20sIGkgLSBsYXN0Q29waWVkRnJvbSk7Ci0gICAgICAgICAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgbHRFbnRpdHkpOwotICAgICAgICAgICAgICAgIGxhc3RDb3BpZWRGcm9tID0g
aSArIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICc+JzoKLSAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHVjaGFycyArIGxhc3RDb3BpZWRGcm9tLCBpIC0g
bGFzdENvcGllZEZyb20pOwotICAgICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIGd0RW50aXR5
KTsKLSAgICAgICAgICAgICAgICBsYXN0Q29waWVkRnJvbSA9IGkgKyAxOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBub0JyZWFrU3BhY2U6Ci0gICAgICAgICAgICAg
ICAgaWYgKGVzY2FwZU5CU1ApIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh1
Y2hhcnMgKyBsYXN0Q29waWVkRnJvbSwgaSAtIGxhc3RDb3BpZWRGcm9tKTsKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbmJzcEVudGl0eSk7Ci0gICAgICAgICAgICAgICAgICAg
IGxhc3RDb3BpZWRGcm9tID0gaSArIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJlc3VsdC5hcHBlbmQodWNo
YXJzICsgbGFzdENvcGllZEZyb20sIGxlbiAtIGxhc3RDb3BpZWRGcm9tKTsKKworICAgIGVzY2Fw
ZUVudGl0eVJlZmVyZW5jZXMocmVzdWx0LCByYW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kLCBlc2Nh
cGVFbnRpdHlBbXAgfCBlc2NhcGVFbnRpdHlMZWZ0IHwgZXNjYXBlRW50aXR5UmlnaHQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgKGVzY2FwZU5CU1AgPyBlc2NhcGVFbnRpdHlOb25CcmVh
a1NwYWNlIDogMCkpOwogfSAgICAKIAogU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjplc2NhcGVD
b250ZW50VGV4dChjb25zdCBTdHJpbmcmIGluLCBib29sIGVzY2FwZU5CU1ApCkBAIC0zMzEsOSAr
MzEwLDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQQogICAgIH0K
IAogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXMgbm90IGZ1bGx5IG1hdGNoIG90aGVyIGJyb3dzZXJz
LiBGaXJlZm94IHBlcmNlbnQtZXNjYXBlcyBub24tQVNDSUkgY2hhcmFjdGVycyBmb3IgaW5uZXJI
VE1MLgotICAgIHJlc3VsdC5hcHBlbmQocXVvdGVDaGFyKTsKLSAgICBhcHBlbmRBdHRyaWJ1dGVW
YWx1ZShyZXN1bHQsIHVybFN0cmluZywgZmFsc2UpOwotICAgIHJlc3VsdC5hcHBlbmQocXVvdGVD
aGFyKTsgICAgCisgICAgYXBwZW5kUXVvdGVkQXR0cmlidXRlVmFsdWUocmVzdWx0LCB1cmxTdHJp
bmcsIGZhbHNlKTsKIH0KIAogU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpzdHJpbmdWYWx1ZUZv
clJhbmdlKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSkKQEAgLTQ3NCwxMiAr
NDUxLDQ2IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5hbWVzcGFjZSgKICAgICAg
ICAgfQogCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnIicpOwotICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShyZXN1bHQsIG5hbWVzcGFjZVVS
SSwgZmFsc2UpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7CisgICAgICAgIGFwcGVuZFF1
b3RlZEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgbmFtZXNwYWNlVVJJLCBmYWxzZSk7CiAgICAgfQog
fQogCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpyZW1vdmVFeHRlcmlvclN0eWxlcyhDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5
KENTU1Byb3BlcnR5RmxvYXQpOworfQorCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRU
ZXh0Tm9kZShWZWN0b3I8VUNoYXI+JiBvdXQsIE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5v
ZGUpOworICAgIGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBub2RlLT5kb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpOworCisgICAgaWYgKE5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKSkg
eworICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKHNjcmlwdFRhZykgfHwgcGFyZW50LT5o
YXNUYWdOYW1lKHN0eWxlVGFnKSB8fCBwYXJlbnQtPmhhc1RhZ05hbWUoeG1wVGFnKSkKKyAgICAg
ICAgICAgIGFwcGVuZFVDaGFyUmFuZ2Uob3V0LCB1Y2hhclJhbmdlKG5vZGUsIG1fcmFuZ2UpKTsK
KyAgICAgICAgZWxzZSBpZiAocGFyZW50LT5oYXNUYWdOYW1lKHRleHRhcmVhVGFnKSkKKyAgICAg
ICAgICAgIGFwcGVuZEVzY2FwZWRDb250ZW50KG91dCwgdWNoYXJSYW5nZShub2RlLCBtX3Jhbmdl
KSwgZG9jdW1lbnRJc0hUTUwpOworICAgIH0KKworICAgIGlmICghc2hvdWxkQW5ub3RhdGUoKSkg
eworICAgICAgICBhcHBlbmRFc2NhcGVkQ29udGVudChvdXQsIHVjaGFyUmFuZ2Uobm9kZSwgbV9y
YW5nZSksIGRvY3VtZW50SXNIVE1MKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBib29sIHVzZVJlbmRlcmVkVGV4dCA9ICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhQb3NpdGlvbihu
b2RlLCAwKSwgc2VsZWN0VGFnKTsKKyAgICBTdHJpbmcgbWFya3VwID0gZXNjYXBlQ29udGVudFRl
eHQodXNlUmVuZGVyZWRUZXh0ID8gcmVuZGVyZWRUZXh0KG5vZGUsIG1fcmFuZ2UpIDogc3RyaW5n
VmFsdWVGb3JSYW5nZShub2RlLCBtX3JhbmdlKSwgZmFsc2UpOworICAgIG1hcmt1cCA9IGNvbnZl
cnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQobWFya3VwLCBzdGF0aWNfY2FzdDxjb25zdCBU
ZXh0Kj4obm9kZSkpOworICAgIGFwcGVuZChvdXQsIG1hcmt1cCk7Cit9CisgICAgCit2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50Tm9kZShWZWN0b3I8VUNoYXI+JiBvdXQsIGNv
bnN0IENvbW1lbnQqIGNvbW1lbnQpCit7CisgICAgLy8gRklYTUU6IENvbW1lbnQgY29udGVudCBp
cyBub3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxs
ZXJzKSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICItLT4iLgorICAg
IGFwcGVuZChvdXQsICI8IS0tIik7CisgICAgYXBwZW5kKG91dCwgY29tbWVudC0+ZGF0YSgpKTsK
KyAgICBhcHBlbmQob3V0LCAiLS0+Iik7Cit9CisKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlw
ZSogbikKIHsKICAgICBpZiAobi0+bmFtZSgpLmlzRW1wdHkoKSkKQEAgLTUwOSw5ICs1MjAsMTEx
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZERvY3VtZW50VHkKICAgICBhcHBlbmQo
cmVzdWx0LCAiPiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpyZW1vdmVFeHRlcmlv
clN0eWxlcyhDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0
LCBjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewotICAgIHN0eWxl
LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZsb2F0KTsKKyAgICAvLyBGSVhNRTogUEkgZGF0
YSBpcyBub3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBj
YWxsZXJzKSB0aGlzIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIj8+
Ii4KKyAgICBhcHBlbmQob3V0LCAiPD8iKTsKKyAgICBhcHBlbmQob3V0LCBpbnN0cnVjdGlvbi0+
dGFyZ2V0KCkpOworICAgIGFwcGVuZChvdXQsICIgIik7CisgICAgYXBwZW5kKG91dCwgaW5zdHJ1
Y3Rpb24tPmRhdGEoKSk7CisgICAgYXBwZW5kKG91dCwgIj8+Iik7Cit9CisKK3ZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBl
bGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzLCBib29sIHNob3VsZEFkZERpc3BsYXlJbmxp
bmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit7CisgICAg
Ym9vbCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50
KCk7CisgICAgb3V0LmFwcGVuZCgnPCcpOworICAgIGFwcGVuZChvdXQsIGVsZW1lbnQtPm5vZGVO
YW1lUHJlc2VydmluZ0Nhc2UoKSk7CisKKyAgICBpZiAoIWRvY3VtZW50SXNIVE1MICYmIG5hbWVz
cGFjZXMgJiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgYXBw
ZW5kTmFtZXNwYWNlKG91dCwgZWxlbWVudC0+cHJlZml4KCksIGVsZW1lbnQtPm5hbWVzcGFjZVVS
SSgpLCAqbmFtZXNwYWNlcyk7CisKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVt
ZW50LT5hdHRyaWJ1dGVzKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlcy0+bGVu
Z3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0o
aSk7CisgICAgICAgIC8vIFdlJ2xsIGhhbmRsZSB0aGUgc3R5bGUgYXR0cmlidXRlIHNlcGFyYXRl
bHksIGJlbG93LgorICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lKCkgPT0gc3R5bGVBdHRyICYm
IGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8fCBzaG91bGRB
ZGREaXNwbGF5SW5saW5lKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQuYXBw
ZW5kKCcgJyk7CisKKyAgICAgICAgaWYgKGRvY3VtZW50SXNIVE1MKQorICAgICAgICAgICAgYXBw
ZW5kKG91dCwgYXR0cmlidXRlLT5uYW1lKCkubG9jYWxOYW1lKCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBhcHBlbmQob3V0LCBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpKTsKKwor
ICAgICAgICBvdXQuYXBwZW5kKCc9Jyk7CisKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzVVJMQXR0
cmlidXRlKGF0dHJpYnV0ZSkpIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY29t
cGxldGUgZmlsZTovLy8gVVJMcyBiZWNhdXNlIGl0IG1heSBjb250YWluIHNlbnNpdGl2ZSBpbmZv
cm1hdGlvbgorICAgICAgICAgICAgLy8gYWJvdXQgdGhlIHVzZXIncyBzeXN0ZW0uCisgICAgICAg
ICAgICBTdHJpbmcgdXJsID0gYXR0cmlidXRlLT52YWx1ZSgpOworICAgICAgICAgICAgaWYgKHNo
b3VsZFJlc29sdmVVUkxzKCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPnVybCgpLmlzTG9jYWxG
aWxlKCkpCisgICAgICAgICAgICAgICAgdXJsID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoYXR0cmlidXRlLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGFwcGVuZFF1b3RlZFVSTEF0
dHJpYnV0ZVZhbHVlKG91dCwgdXJsKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBhcHBl
bmRRdW90ZWRBdHRyaWJ1dGVWYWx1ZShvdXQsIGF0dHJpYnV0ZS0+dmFsdWUoKSwgZG9jdW1lbnRJ
c0hUTUwpOworCisgICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwgJiYgbmFtZXNwYWNlcyAmJiBz
aG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoYXR0cmlidXRlLCAqbmFtZXNwYWNlcykpCisgICAg
ICAgICAgICBhcHBlbmROYW1lc3BhY2Uob3V0LCBhdHRyaWJ1dGUtPnByZWZpeCgpLCBhdHRyaWJ1
dGUtPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7CisgICAgfQorCisgICAgaWYgKGVsZW1l
bnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8fCBzaG91bGRBZGREaXNw
bGF5SW5saW5lKSkgeworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IHN0eWxlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KS0+Z2V0SW5saW5lU3R5
bGVEZWNsKCktPmNvcHkoKTsKKyAgICAgICAgaWYgKHNob3VsZEFubm90YXRlKCkpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9tTWF0Y2hl
ZFJ1bGVzID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChlbGVtZW50KTsKKyAgICAg
ICAgICAgIC8vIFN0eWxlcyBmcm9tIHRoZSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24sIGhlbGQg
aW4gdGhlIHZhcmlhYmxlICJzdHlsZSIsIHRha2UgcHJlY2VkZW5jZSAKKyAgICAgICAgICAgIC8v
IG92ZXIgdGhvc2UgZnJvbSBtYXRjaGVkIHJ1bGVzLgorICAgICAgICAgICAgc3R5bGVGcm9tTWF0
Y2hlZFJ1bGVzLT5tZXJnZShzdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBzdHlsZSA9IHN0eWxl
RnJvbU1hdGNoZWRSdWxlczsKKworICAgICAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZUZvckVsZW1lbnQgPSBjb21wdXRlZFN0eWxlKGVsZW1l
bnQpOworICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBmcm9t
Q29tcHV0ZWRTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7CisgICAgICAgICAgICAgICAgZm9y
IChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IENT
U1Byb3BlcnR5JiBwcm9wZXJ0eSA9ICppdDsKKyAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWUq
IHZhbHVlID0gcHJvcGVydHkudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHBy
b3BlcnR5IHZhbHVlLCBpZiBpdCdzIGEgcGVyY2VudGFnZSwgbWF5IG5vdCByZWZsZWN0IHRoZSBh
Y3R1YWwgY29tcHV0ZWQgdmFsdWUuICAKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1w
bGU6IHN0eWxlPSJoZWlnaHQ6IDElOyBvdmVyZmxvdzogdmlzaWJsZTsiIGluIHF1aXJrc21vZGUK
KyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBvdGhlcnMgbGlrZSB0aGlz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUxOTUxMjM+IFNsYXNoZG90IGNvcHkvcGFzdGUgZmlkZWxp
dHkgcHJvYmxlbQorICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgp
ID09IENTU1ZhbHVlOjpDU1NfUFJJTUlUSVZFX1ZBTFVFKQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpLT5wcmltaXRpdmVU
eXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkUHJvcGVydHlWYWx1
ZSA9IGNvbXB1dGVkU3R5bGVGb3JFbGVtZW50LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5
LmlkKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQ29tcHV0ZWRTdHls
ZS0+YWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHkuaWQoKSwgY29tcHV0ZWRQ
cm9wZXJ0eVZhbHVlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzdHlsZS0+bWVyZ2UoZnJvbUNvbXB1dGVkU3R5bGUuZ2V0KCkpOworICAgICAgICB9
CisgICAgICAgIGlmIChzaG91bGRBZGREaXNwbGF5SW5saW5lKQorICAgICAgICAgICAgc3R5bGUt
PnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlzcGxheSwgQ1NTVmFsdWVJbmxpbmUsIHRydWUpOwor
ICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBub3QgZnVsbHkgc2VsZWN0ZWQgYnkgdGhlIHJhbmdl
LCB0aGVuIHdlIGRvbid0IHdhbnQgdG8ga2VlcCBzdHlsZXMgdGhhdCBhZmZlY3QgaXRzIHJlbGF0
aW9uc2hpcCB0byB0aGUgbm9kZXMgYXJvdW5kIGl0CisgICAgICAgIC8vIG9ubHkgdGhlIG9uZXMg
dGhhdCBhZmZlY3QgaXQgYW5kIHRoZSBub2RlcyB3aXRoaW4gaXQuCisgICAgICAgIGlmIChyYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgPT0gRG9lc05vdEZ1bGx5U2VsZWN0Tm9kZSkKKyAgICAgICAgICAg
IHJlbW92ZUV4dGVyaW9yU3R5bGVzKHN0eWxlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0eWxlLT5s
ZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3Ry
aW5nLCBzdHlsZVByZWZpeCwgKCIgc3R5bGU9IikpOworICAgICAgICAgICAgYXBwZW5kKG91dCwg
c3R5bGVQcmVmaXgpOworICAgICAgICAgICAgYXBwZW5kUXVvdGVkQXR0cmlidXRlVmFsdWUob3V0
LCBzdHlsZS0+Y3NzVGV4dCgpLCBkb2N1bWVudElzSFRNTCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoc2hvdWxkU2VsZkNsb3NlKGVsZW1lbnQpKSB7CisgICAgICAgIGlmIChlbGVtZW50
LT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAgICBvdXQuYXBwZW5kKCcgJyk7IC8vIFhIVE1M
IDEuMCA8LT4gSFRNTCBjb21wYXRpYmlsaXR5LgorICAgICAgICBvdXQuYXBwZW5kKCcvJyk7Cisg
ICAgfQorICAgIG91dC5hcHBlbmQoJz4nKTsKK30KKwordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgQ0RBVEFTZWN0aW9u
KiBzZWN0aW9uKQoreworICAgIC8vIEZJWE1FOiBDREFUQSBjb250ZW50IGlzIG5vdCBlc2NhcGVk
LCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCBy
YWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIl1dPiIuCisgICAgYXBwZW5kKG91dCwg
IjwhW0NEQVRBWyIpOworICAgIGFwcGVuZChvdXQsIHNlY3Rpb24tPmRhdGEoKSk7CisgICAgYXBw
ZW5kKG91dCwgIl1dPiIpOwogfQogCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFy
dE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIGJvb2wgY29u
dmVydEJsb2Nrc1RvSW5saW5lcywgTmFtZXNwYWNlcyogbmFtZXNwYWNlcywgUmFuZ2VGdWxseVNl
bGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKQEAgLTUxOSwzNiArNjMyLDEyIEBAIHZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3UKICAgICBpZiAobmFtZXNwYWNl
cykKICAgICAgICAgbmFtZXNwYWNlcy0+Y2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgYm9vbCBk
b2N1bWVudElzSFRNTCA9IG5vZGUtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCk7CiAgICAg
c3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RF
OiB7Ci0gICAgICAgICAgICBpZiAoTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShzY3JpcHRUYWcpCi0gICAg
ICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+aGFzVGFnTmFtZShzdHlsZVRhZykKLSAgICAgICAg
ICAgICAgICAgICAgfHwgcGFyZW50LT5oYXNUYWdOYW1lKHhtcFRhZykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kVUNoYXJSYW5nZShyZXN1bHQsIHVjaGFyUmFuZ2Uobm9kZSwgbV9yYW5n
ZSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHBhcmVudC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kRXNjYXBlZENvbnRlbnQocmVzdWx0LCB1Y2hhclJhbmdlKG5vZGUsIG1fcmFuZ2Up
LCBkb2N1bWVudElzSFRNTCk7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKCFzaG91bGRBbm5vdGF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgYXBwZW5kRXNjYXBlZENv
bnRlbnQocmVzdWx0LCB1Y2hhclJhbmdlKG5vZGUsIG1fcmFuZ2UpLCBkb2N1bWVudElzSFRNTCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGJvb2wgdXNlUmVuZGVyZWRUZXh0ID0gIWVuY2xvc2luZ05vZGVXaXRoVGFnKFBv
c2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLCAwKSwgc2VsZWN0VGFnKTsKLSAgICAgICAg
ICAgIFN0cmluZyBtYXJrdXAgPSBlc2NhcGVDb250ZW50VGV4dCh1c2VSZW5kZXJlZFRleHQgPyBy
ZW5kZXJlZFRleHQobm9kZSwgbV9yYW5nZSkgOiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIG1f
cmFuZ2UpLCBmYWxzZSk7Ci0gICAgICAgICAgICBtYXJrdXAgPSBjb252ZXJ0SFRNTFRleHRUb0lu
dGVyY2hhbmdlRm9ybWF0KG1hcmt1cCwgc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dCo+KG5vZGUpKTsK
LSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG1hcmt1cCk7CisgICAgICAgIGNhc2UgTm9kZTo6
VEVYVF9OT0RFOgorICAgICAgICAgICAgYXBwZW5kVGV4dE5vZGUocmVzdWx0LCBjb25zdF9jYXN0
PE5vZGUqPihub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBj
YXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDb21tZW50IGNv
bnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3Ro
ZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBpbmNsdWRlcyAiLS0+
Ii4KLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICI8IS0tIik7Ci0gICAgICAgICAgICBhcHBl
bmQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDb21tZW50Kj4obm9kZSktPmRhdGEoKSk7Ci0g
ICAgICAgICAgICBhcHBlbmQocmVzdWx0LCAiLS0+Iik7CisgICAgICAgICAgICBhcHBlbmRDb21t
ZW50Tm9kZShyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihub2RlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgogICAgICAg
ICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CkBAIC01NTYsMTE3ICs2NDUsMTQg
QEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdQogICAgICAgICBjYXNl
IE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKICAgICAgICAgICAgIGFwcGVuZERvY3VtZW50VHlw
ZShyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50VHlwZSo+KG5vZGUpKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05f
Tk9ERTogewotICAgICAgICAgICAgLy8gRklYTUU6IFBJIGRhdGEgaXMgbm90IGVzY2FwZWQsIGJ1
dCBYTUxTZXJpYWxpemVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgdGhpcyBzaG91bGQg
cmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICI/PiIuCi0gICAgICAgICAgICBjb25z
dCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIG4gPSBzdGF0aWNfY2FzdDxjb25zdCBQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24qPihub2RlKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICI8PyIpOwot
ICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbi0+dGFyZ2V0KCkpOwotICAgICAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgIiAiKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIG4tPmRhdGEoKSk7
Ci0gICAgICAgICAgICBhcHBlbmQocmVzdWx0LCAiPz4iKTsKKyAgICAgICAgY2FzZSBOb2RlOjpQ
Uk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6CisgICAgICAgICAgICBhcHBlbmRQcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24ocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24qPihub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IE5vZGU6OkVMRU1FTlRfTk9ERTogewotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPCcpOwot
ICAgICAgICAgICAgY29uc3QgRWxlbWVudCogZWwgPSBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50
Kj4obm9kZSk7Ci0gICAgICAgICAgICBib29sIGNvbnZlcnQgPSBjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzICYmIGlzQmxvY2soY29uc3RfY2FzdDxOb2RlKj4obm9kZSkpOwotICAgICAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgZWwtPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7Ci0gICAgICAgICAgICBO
YW1lZE5vZGVNYXAgKmF0dHJzID0gZWwtPmF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGF0dHJzLT5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmICghZG9jdW1lbnRJ
c0hUTUwgJiYgbmFtZXNwYWNlcyAmJiBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGVsKSkKLSAg
ICAgICAgICAgICAgICBhcHBlbmROYW1lc3BhY2UocmVzdWx0LCBlbC0+cHJlZml4KCksIGVsLT5u
YW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMpOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgQXR0cmlidXRl
ICphdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAgICAgICAgICAgLy8gV2Un
bGwgaGFuZGxlIHRoZSBzdHlsZSBhdHRyaWJ1dGUgc2VwYXJhdGVseSwgYmVsb3cuCi0gICAgICAg
ICAgICAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBzdHlsZUF0dHIgJiYgZWwtPmlzSFRNTEVsZW1l
bnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8fCBjb252ZXJ0KSkKLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGRvY3VtZW50SXNIVE1MKQotICAgICAgICAgICAgICAgICAgICBhcHBl
bmQocmVzdWx0LCBhdHRyLT5uYW1lKCkubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgYXR0ci0+bmFtZSgpLnRvU3Ry
aW5nKCkpOwotCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPScpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGVsLT5pc1VSTEF0dHJpYnV0ZShhdHRyKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNvbXBsZXRlIGZpbGU6Ly8vIFVSTHMgYmVjYXVzZSBp
dCBtYXkgY29udGFpbiBzZW5zaXRpdmUgaW5mb3JtYXRpb24KLSAgICAgICAgICAgICAgICAgICAg
Ly8gYWJvdXQgdGhlIHVzZXIncyBzeXN0ZW0uCi0gICAgICAgICAgICAgICAgICAgIGlmIChzaG91
bGRSZXNvbHZlVVJMcygpICYmICFub2RlLT5kb2N1bWVudCgpLT51cmwoKS5pc0xvY2FsRmlsZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUo
cmVzdWx0LCBub2RlLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChhdHRyLT52YWx1ZSgpKS5zdHJp
bmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgYXR0ci0+dmFsdWUoKS5zdHJp
bmcoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnXCInKTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFs
dWUocmVzdWx0LCBhdHRyLT52YWx1ZSgpLCBkb2N1bWVudElzSFRNTCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJ1wiJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgaWYgKCFkb2N1bWVudElzSFRNTCAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5h
bWVzcGFjZUF0dHJpYnV0ZShhdHRyLCAqbmFtZXNwYWNlcykpCi0gICAgICAgICAgICAgICAgICAg
IGFwcGVuZE5hbWVzcGFjZShyZXN1bHQsIGF0dHItPnByZWZpeCgpLCBhdHRyLT5uYW1lc3BhY2VV
UkkoKSwgKm5hbWVzcGFjZXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoZWwtPmlzSFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8fCBjb252
ZXJ0KSkgewotICAgICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBjb25zdF9jYXN0PEVs
ZW1lbnQqPihlbCk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCktPmdldElu
bGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZEFubm90
YXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JF
bGVtZW50KGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsKSk7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFN0eWxlcyBmcm9tIHRoZSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24sIGhlbGQgaW4gdGhlIHZh
cmlhYmxlICJzdHlsZSIsIHRha2UgcHJlY2VkZW5jZSAKLSAgICAgICAgICAgICAgICAgICAgLy8g
b3ZlciB0aG9zZSBmcm9tIG1hdGNoZWQgcnVsZXMuCi0gICAgICAgICAgICAgICAgICAgIHN0eWxl
RnJvbU1hdGNoZWRSdWxlcy0+bWVyZ2Uoc3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAg
ICBzdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlczsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNv
bXB1dGVkU3R5bGVGb3JFbGVtZW50ID0gY29tcHV0ZWRTdHlsZShlbGVtZW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBmcm9tQ29tcHV0
ZWRTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHls
ZS0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOjpjb25zdF9pdGVyYXRvciBpdCA9IHN0eWxlLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYg
cHJvcGVydHkgPSAqaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIHZh
bHVlID0gcHJvcGVydHkudmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGUgcHJvcGVydHkgdmFsdWUsIGlmIGl0J3MgYSBwZXJjZW50YWdlLCBtYXkgbm90IHJlZmxlY3Qg
dGhlIGFjdHVhbCBjb21wdXRlZCB2YWx1ZS4gIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZvciBleGFtcGxlOiBzdHlsZT0iaGVpZ2h0OiAxJTsgb3ZlcmZsb3c6IHZpc2libGU7IiBp
biBxdWlya3Ntb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJl
IGFyZSBvdGhlcnMgbGlrZSB0aGlzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUxOTUxMjM+IFNsYXNo
ZG90IGNvcHkvcGFzdGUgZmlkZWxpdHkgcHJvYmxlbQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19QUklNSVRJVkVf
VkFMVUUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkUHJvcGVydHlWYWx1ZSA9IGNvbXB1dGVk
U3R5bGVGb3JFbGVtZW50LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LmlkKCkpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21Db21wdXRlZFN0eWxlLT5h
ZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eS5pZCgpLCBjb21wdXRlZFByb3Bl
cnR5VmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUtPm1l
cmdlKGZyb21Db21wdXRlZFN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbnZlcnQpCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1ZhbHVlSW5saW5lLCB0cnVlKTsKLSAgICAgICAg
ICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBub3QgZnVsbHkgc2VsZWN0ZWQgYnkgdGhlIHJhbmdl
LCB0aGVuIHdlIGRvbid0IHdhbnQgdG8ga2VlcCBzdHlsZXMgdGhhdCBhZmZlY3QgaXRzIHJlbGF0
aW9uc2hpcCB0byB0aGUgbm9kZXMgYXJvdW5kIGl0Ci0gICAgICAgICAgICAgICAgLy8gb25seSB0
aGUgb25lcyB0aGF0IGFmZmVjdCBpdCBhbmQgdGhlIG5vZGVzIHdpdGhpbiBpdC4KLSAgICAgICAg
ICAgICAgICBpZiAocmFuZ2VGdWxseVNlbGVjdHNOb2RlID09IERvZXNOb3RGdWxseVNlbGVjdE5v
ZGUpCi0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV4dGVyaW9yU3R5bGVzKHN0eWxlLmdldCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPmxlbmd0aCgpID4gMCkgewotICAgICAgICAg
ICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVQcmVmaXgs
ICgiIHN0eWxlPVwiIikpOwotICAgICAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0LCBzdHls
ZVByZWZpeCk7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKHJlc3Vs
dCwgc3R5bGUtPmNzc1RleHQoKSwgZG9jdW1lbnRJc0hUTUwpOwotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCdcIicpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZFNlbGZDbG9zZShlbCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZWwtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICcpOyAvLyBYSFRNTCAxLjAgPC0+IEhUTUwgY29tcGF0aWJpbGl0
eS4KLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CisgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVO
VF9OT0RFOgorICAgICAgICAgICAgYXBwZW5kRWxlbWVudChyZXN1bHQsIGNvbnN0X2Nhc3Q8RWxl
bWVudCo+KHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKSksIG5hbWVzcGFjZXMsIGNv
bnZlcnRCbG9ja3NUb0lubGluZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSks
IHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERTogewotICAgICAgICAgICAgLy8g
RklYTUU6IENEQVRBIGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChh
bmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBp
dCBpbmNsdWRlcyAiXV0+Ii4KLSAgICAgICAgICAgIGNvbnN0IENEQVRBU2VjdGlvbiogbiA9IHN0
YXRpY19jYXN0PGNvbnN0IENEQVRBU2VjdGlvbio+KG5vZGUpOwotICAgICAgICAgICAgYXBwZW5k
KHJlc3VsdCwgIjwhW0NEQVRBWyIpOwotICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgbi0+ZGF0
YSgpKTsKLSAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsICJdXT4iKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisgICAgICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgor
ICAgICAgICAgICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q0RBVEFTZWN0aW9uKj4obm9kZSkpOwogICAgICAgICBjYXNlIE5vZGU6OkFUVFJJQlVURV9OT0RF
OgogICAgICAgICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgogICAgICAgICBjYXNlIE5vZGU6OkVO
VElUWV9SRUZFUkVOQ0VfTk9ERToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64993</attachid>
            <date>2010-08-20 14:28:47 -0700</date>
            <delta_ts>2010-08-23 17:43:08 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-44288-20100820142845.patch</filename>
            <type>text/plain</type>
            <size>18569</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTc1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMDgtMjAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3VwIHNob3VsZCBiZSBicm9rZW4gZG93biBp
bnRvIHBpZWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDQyODgKKworICAgICAgICBFeHRyYWN0ZWQgYXBwZW5kVGV4dCwgYXBwZW5kQ29tbWVudCwg
YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uLCBhcHBlbmRFbGVtZW50IGFuZCBhcHBlbmRDREFU
QVNlY3Rpb24uCisgICAgICAgIEFsc28gc2ltcGxpZmllZCB0aGUgY29uZGl0aW9uYWxzIGluIGFw
cGVuZFRleHQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFyZSBhZGRlZCBzaW5jZSB0aGlzIGlz
IGEgY2xlYW51cC4KKworICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2VjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXApOgorCiAyMDEwLTA4
LTIwICBKb3NlcGggUGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGF2aWQgS2lsemVyLgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDY1NzQ5
KQorKysgV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw4
ICsxMjIsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQo
Y29uc3QgRWxlbWVudCopOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNv
bnN0IEF0dHJpYnV0ZSosIE5hbWVzcGFjZXMmKTsKICAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShW
ZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOworICAgIHZvaWQgYXBwZW5k
VGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2b2lkIGFwcGVuZENvbW1lbnQo
VmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpOwogICAgIHZvaWQgYXBw
ZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBl
Kik7CisgICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYg
b3V0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2b2lk
IHJlbW92ZUV4dGVyaW9yU3R5bGVzKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7CisgICAg
dm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwg
Ym9vbCBhZGREaXNwbGF5SW5saW5lLCBOYW1lc3BhY2VzKiwgUmFuZ2VGdWxseVNlbGVjdHNOb2Rl
KTsKKyAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0
IFN0cmluZyYgc2VjdGlvbik7CiAgICAgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNo
YXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIE5h
bWVzcGFjZXMqLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGJvb2wgc2hvdWxkU2VsZkNs
b3NlKGNvbnN0IE5vZGUqKTsKICAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChWZWN0b3I8VUNoYXI+
JiByZXN1bHQsIGNvbnN0IE5vZGUqKTsKQEAgLTQ3OSw2ICs0ODQsMzcgQEAgdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kTmFtZXNwYWNlKAogICAgIH0KIH0KIAordm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit7Cisg
ICAgYm9vbCBkb2N1bWVudElzSFRNTCA9IHRleHQtPmRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50
KCk7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogcGFyZW50TmFtZSA9IDA7CisgICAgaWYgKHRl
eHQtPnBhcmVudEVsZW1lbnQoKSkKKyAgICAgICAgcGFyZW50TmFtZSA9ICZzdGF0aWNfY2FzdDxF
bGVtZW50Kj4odGV4dC0+cGFyZW50RWxlbWVudCgpKS0+dGFnUU5hbWUoKTsKKworICAgIGlmIChw
YXJlbnROYW1lICYmICgqcGFyZW50TmFtZSA9PSBzY3JpcHRUYWcgfHwgKnBhcmVudE5hbWUgPT0g
c3R5bGVUYWcgfHwgKnBhcmVudE5hbWUgPT0geG1wVGFnKSkgeworICAgICAgICBhcHBlbmRVQ2hh
clJhbmdlKG91dCwgdWNoYXJSYW5nZSh0ZXh0LCBtX3JhbmdlKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXNob3VsZEFubm90YXRlKCkgfHwgKHBhcmVudE5hbWUgJiYgKnBh
cmVudE5hbWUgPT0gdGV4dGFyZWFUYWcpKSB7CisgICAgICAgIGFwcGVuZEVzY2FwZWRDb250ZW50
KG91dCwgdWNoYXJSYW5nZSh0ZXh0LCBtX3JhbmdlKSwgZG9jdW1lbnRJc0hUTUwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCB1c2VSZW5kZXJlZFRleHQgPSAhZW5jbG9zaW5n
Tm9kZVdpdGhUYWcoUG9zaXRpb24odGV4dCwgMCksIHNlbGVjdFRhZyk7CisgICAgU3RyaW5nIG1h
cmt1cCA9IGVzY2FwZUNvbnRlbnRUZXh0KHVzZVJlbmRlcmVkVGV4dCA/IHJlbmRlcmVkVGV4dCh0
ZXh0LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2UodGV4dCwgbV9yYW5nZSksIGZhbHNl
KTsKKyAgICBtYXJrdXAgPSBjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0KG1hcmt1
cCwgdGV4dCk7CisgICAgYXBwZW5kKG91dCwgbWFya3VwKTsKK30KKwordm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ29tbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYg
Y29tbWVudCkKK3sKKyAgICAvLyBGSVhNRTogQ29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVk
LCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCBy
YWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMgIi0tPiIuCisgICAgYXBwZW5kKG91dCwg
IjwhLS0iKTsKKyAgICBhcHBlbmQob3V0LCBjb21tZW50KTsKKyAgICBhcHBlbmQob3V0LCAiLS0+
Iik7Cit9CisKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZERvY3VtZW50VHlwZShWZWN0
b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSogbikKIHsKICAgICBpZiAobi0+
bmFtZSgpLmlzRW1wdHkoKSkKQEAgLTUwOCw0NiArNTQ0LDEzMSBAQCB2b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmREb2N1bWVudFR5CiAgICAgYXBwZW5kKHJlc3VsdCwgIj4iKTsKIH0KIAor
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3Rv
cjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSkK
K3sKKyAgICAvLyBGSVhNRTogUEkgZGF0YSBpcyBub3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6
ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJzKSB0aGlzIHNob3VsZCByYWlzZSBhbiBleGNl
cHRpb24gaWYgaXQgaW5jbHVkZXMgIj8+Ii4KKyAgICBhcHBlbmQob3V0LCAiPD8iKTsKKyAgICBh
cHBlbmQob3V0LCB0YXJnZXQpOworICAgIGFwcGVuZChvdXQsICIgIik7CisgICAgYXBwZW5kKG91
dCwgZGF0YSk7CisgICAgYXBwZW5kKG91dCwgIj8+Iik7Cit9CisKIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OnJlbW92ZUV4dGVyaW9yU3R5bGVzKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkKIHsKICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGbG9hdCk7CiB9
CiAKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYg
b3V0LCBFbGVtZW50KiBlbGVtZW50LCBib29sIGFkZERpc3BsYXlJbmxpbmUsIE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUp
Cit7CisgICAgYm9vbCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmlzSFRN
TERvY3VtZW50KCk7CisgICAgb3V0LmFwcGVuZCgnPCcpOworICAgIGFwcGVuZChvdXQsIGVsZW1l
bnQtPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CisgICAgaWYgKCFkb2N1bWVudElzSFRNTCAm
JiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoZWxlbWVudCkpCisgICAg
ICAgIGFwcGVuZE5hbWVzcGFjZShvdXQsIGVsZW1lbnQtPnByZWZpeCgpLCBlbGVtZW50LT5uYW1l
c3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMpOworCisgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVz
ID0gZWxlbWVudC0+YXR0cmlidXRlcygpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGF0dHJpYnV0
ZXMtPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1
dGVJdGVtKGkpOworICAgICAgICAvLyBXZSdsbCBoYW5kbGUgdGhlIHN0eWxlIGF0dHJpYnV0ZSBz
ZXBhcmF0ZWx5LCBiZWxvdy4KKyAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSgpID09IHN0eWxl
QXR0ciAmJiBlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgKHNob3VsZEFubm90YXRlKCkgfHwg
YWRkRGlzcGxheUlubGluZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LmFw
cGVuZCgnICcpOworICAgICAgICAKKyAgICAgICAgaWYgKGRvY3VtZW50SXNIVE1MKQorICAgICAg
ICAgICAgYXBwZW5kKG91dCwgYXR0cmlidXRlLT5uYW1lKCkubG9jYWxOYW1lKCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBhcHBlbmQob3V0LCBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmlu
ZygpKTsKKworICAgICAgICBvdXQuYXBwZW5kKCc9Jyk7CisKKyAgICAgICAgaWYgKGVsZW1lbnQt
PmlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkpIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gY29tcGxldGUgZmlsZTovLy8gVVJMcyBiZWNhdXNlIGl0IG1heSBjb250YWluIHNlbnNp
dGl2ZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgLy8gYWJvdXQgdGhlIHVzZXIncyBzeXN0ZW0u
CisgICAgICAgICAgICBpZiAoc2hvdWxkUmVzb2x2ZVVSTHMoKSAmJiAhZWxlbWVudC0+ZG9jdW1l
bnQoKS0+dXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgICAgICAgICBhcHBlbmRRdW90ZWRV
UkxBdHRyaWJ1dGVWYWx1ZShvdXQsIGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0
dHJpYnV0ZS0+dmFsdWUoKSkuc3RyaW5nKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKG91dCwgYXR0cmlidXRlLT52YWx1
ZSgpLnN0cmluZygpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dC5hcHBlbmQo
J1wiJyk7CisgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvdXQsIGF0dHJpYnV0ZS0+
dmFsdWUoKSwgZG9jdW1lbnRJc0hUTUwpOworICAgICAgICAgICAgb3V0LmFwcGVuZCgnXCInKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwgJiYgbmFtZXNwYWNlcyAm
JiBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoYXR0cmlidXRlLCAqbmFtZXNwYWNlcykpCisg
ICAgICAgICAgICBhcHBlbmROYW1lc3BhY2Uob3V0LCBhdHRyaWJ1dGUtPnByZWZpeCgpLCBhdHRy
aWJ1dGUtPm5hbWVzcGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7CisgICAgfQorCisgICAgaWYgKGVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8fCBhZGREaXNwbGF5
SW5saW5lKSkgeworICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0
eWxlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KS0+Z2V0SW5saW5lU3R5bGVE
ZWNsKCktPmNvcHkoKTsKKyAgICAgICAgaWYgKHNob3VsZEFubm90YXRlKCkpIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVGcm9tTWF0Y2hlZFJ1
bGVzID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChjb25zdF9jYXN0PEVsZW1lbnQq
PihlbGVtZW50KSk7CisgICAgICAgICAgICAvLyBTdHlsZXMgZnJvbSB0aGUgaW5saW5lIHN0eWxl
IGRlY2xhcmF0aW9uLCBoZWxkIGluIHRoZSB2YXJpYWJsZSAic3R5bGUiLCB0YWtlIHByZWNlZGVu
Y2UgCisgICAgICAgICAgICAvLyBvdmVyIHRob3NlIGZyb20gbWF0Y2hlZCBydWxlcy4KKyAgICAg
ICAgICAgIHN0eWxlRnJvbU1hdGNoZWRSdWxlcy0+bWVyZ2Uoc3R5bGUuZ2V0KCkpOworICAgICAg
ICAgICAgc3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXM7CisKKyAgICAgICAgICAgIFJlZlB0
cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVGb3JFbGVtZW50ID0g
Y29tcHV0ZWRTdHlsZShlbGVtZW50KTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gZnJvbUNvbXB1dGVkU3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbjo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3R5bGUtPmVuZCgpOwor
ICAgICAgICAgICAgICAgIGZvciAoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gc3R5bGUtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7CisgICAgICAgICAg
ICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IHByb3BlcnR5LnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBwcm9wZXJ0eSB2YWx1ZSwgaWYgaXQncyBhIHBlcmNlbnRhZ2UsIG1h
eSBub3QgcmVmbGVjdCB0aGUgYWN0dWFsIGNvbXB1dGVkIHZhbHVlLiAgCisgICAgICAgICAgICAg
ICAgICAgIC8vIEZvciBleGFtcGxlOiBzdHlsZT0iaGVpZ2h0OiAxJTsgb3ZlcmZsb3c6IHZpc2li
bGU7IiBpbiBxdWlya3Ntb2RlCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBh
cmUgb3RoZXJzIGxpa2UgdGhpcywgc2VlIDxyZGFyOi8vcHJvYmxlbS81MTk1MTIzPiBTbGFzaGRv
dCBjb3B5L3Bhc3RlIGZpZGVsaXR5IHByb2JsZW0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZh
bHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX1BSSU1JVElWRV9WQUxVRSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlPiBj
b21wdXRlZFByb3BlcnR5VmFsdWUgPSBjb21wdXRlZFN0eWxlRm9yRWxlbWVudC0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShwcm9wZXJ0eS5pZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnJvbUNvbXB1dGVkU3R5bGUtPmFkZFBhcnNlZFByb3BlcnR5KENTU1Byb3BlcnR5KHByb3Bl
cnR5LmlkKCksIGNvbXB1dGVkUHJvcGVydHlWYWx1ZSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0eWxlLT5tZXJnZShmcm9tQ29tcHV0ZWRTdHlsZS5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFkZERpc3BsYXlJbmxpbmUpCisgICAgICAg
ICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlEaXNwbGF5LCBDU1NWYWx1ZUlubGlu
ZSwgdHJ1ZSk7CisgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIG5vdCBmdWxseSBzZWxlY3RlZCBi
eSB0aGUgcmFuZ2UsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBrZWVwIHN0eWxlcyB0aGF0IGFmZmVj
dCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBub2RlcyBhcm91bmQgaXQKKyAgICAgICAgLy8gb25s
eSB0aGUgb25lcyB0aGF0IGFmZmVjdCBpdCBhbmQgdGhlIG5vZGVzIHdpdGhpbiBpdC4KKyAgICAg
ICAgaWYgKHJhbmdlRnVsbHlTZWxlY3RzTm9kZSA9PSBEb2VzTm90RnVsbHlTZWxlY3ROb2RlKQor
ICAgICAgICAgICAgcmVtb3ZlRXh0ZXJpb3JTdHlsZXMoc3R5bGUuZ2V0KCkpOworICAgICAgICBp
ZiAoc3R5bGUtPmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHN0eWxlUHJlZml4LCAoIiBzdHlsZT1cIiIpKTsKKyAgICAgICAgICAg
IGFwcGVuZChvdXQsIHN0eWxlUHJlZml4KTsKKyAgICAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZh
bHVlKG91dCwgc3R5bGUtPmNzc1RleHQoKSwgZG9jdW1lbnRJc0hUTUwpOworICAgICAgICAgICAg
b3V0LmFwcGVuZCgnXCInKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzaG91bGRTZWxm
Q2xvc2UoZWxlbWVudCkpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkK
KyAgICAgICAgICAgIG91dC5hcHBlbmQoJyAnKTsgLy8gWEhUTUwgMS4wIDwtPiBIVE1MIGNvbXBh
dGliaWxpdHkuCisgICAgICAgIG91dC5hcHBlbmQoJy8nKTsKKyAgICB9CisgICAgb3V0LmFwcGVu
ZCgnPicpOworfQorCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDREFUQVNlY3Rpb24o
VmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pCit7CisgICAgLy8gRklY
TUU6IENEQVRBIGNvbnRlbnQgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxpemVyIChhbmQg
cG9zc2libHkgb3RoZXIgY2FsbGVycykgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBp
bmNsdWRlcyAiXV0+Ii4KKyAgICBhcHBlbmQob3V0LCAiPCFbQ0RBVEFbIik7CisgICAgYXBwZW5k
KG91dCwgc2VjdGlvbik7CisgICAgYXBwZW5kKG91dCwgIl1dPiIpOworfQorCiB2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IE5vZGUqIG5vZGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgTmFtZXNwYWNlcyog
bmFtZXNwYWNlcywgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkK
IHsKICAgICBpZiAobmFtZXNwYWNlcykKICAgICAgICAgbmFtZXNwYWNlcy0+Y2hlY2tDb25zaXN0
ZW5jeSgpOwogCi0gICAgYm9vbCBkb2N1bWVudElzSFRNTCA9IG5vZGUtPmRvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCk7CiAgICAgc3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7Ci0gICAgY2Fz
ZSBOb2RlOjpURVhUX05PREU6IHsKLSAgICAgICAgaWYgKE5vZGUqIHBhcmVudCA9IG5vZGUtPnBh
cmVudE5vZGUoKSkgewotICAgICAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShzY3JpcHRU
YWcpCi0gICAgICAgICAgICAgICAgfHwgcGFyZW50LT5oYXNUYWdOYW1lKHN0eWxlVGFnKQotICAg
ICAgICAgICAgICAgIHx8IHBhcmVudC0+aGFzVGFnTmFtZSh4bXBUYWcpKSB7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kVUNoYXJSYW5nZShyZXN1bHQsIHVjaGFyUmFuZ2Uobm9kZSwgbV9yYW5nZSkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KHBhcmVudC0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykpIHsKLSAgICAgICAgICAgICAgICBhcHBl
bmRFc2NhcGVkQ29udGVudChyZXN1bHQsIHVjaGFyUmFuZ2Uobm9kZSwgbV9yYW5nZSksIGRvY3Vt
ZW50SXNIVE1MKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUoKSkgewotICAgICAgICAgICAgYm9vbCB1
c2VSZW5kZXJlZFRleHQgPSAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoUG9zaXRpb24oY29uc3RfY2Fz
dDxOb2RlKj4obm9kZSksIDApLCBzZWxlY3RUYWcpOwotICAgICAgICAgICAgU3RyaW5nIG1hcmt1
cCA9IGVzY2FwZUNvbnRlbnRUZXh0KHVzZVJlbmRlcmVkVGV4dCA/IHJlbmRlcmVkVGV4dChub2Rl
LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2Uobm9kZSwgbV9yYW5nZSksIGZhbHNlKTsK
LSAgICAgICAgICAgIG1hcmt1cCA9IGNvbnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQo
bWFya3VwLCBzdGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obm9kZSkpOwotICAgICAgICAgICAgYXBw
ZW5kKHJlc3VsdCwgbWFya3VwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGFwcGVuZEVzY2FwZWRDb250ZW50KHJlc3VsdCwgdWNoYXJSYW5nZShub2RlLCBtX3Jhbmdl
KSwgZG9jdW1lbnRJc0hUTUwpOworICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgorICAgICAgICBh
cHBlbmRUZXh0KHJlc3VsdCwgc3RhdGljX2Nhc3Q8VGV4dCo+KGNvbnN0X2Nhc3Q8Tm9kZSo+KG5v
ZGUpKSk7CiAgICAgICAgIGJyZWFrOwotICAgIH0KICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9E
RToKLSAgICAgICAgLy8gRklYTUU6IENvbW1lbnQgY29udGVudCBpcyBub3QgZXNjYXBlZCwgYnV0
IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJzKSBzaG91bGQgcmFpc2Ug
YW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICItLT4iLgotICAgICAgICBhcHBlbmQocmVzdWx0
LCAiPCEtLSIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDb21t
ZW50Kj4obm9kZSktPmRhdGEoKSk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsICItLT4iKTsKKyAg
ICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihu
b2RlKS0+ZGF0YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9O
T0RFOgogICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKQEAgLTU1NSwxMTUg
KzY3NiwxNSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1CiAgICAg
Y2FzZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6CiAgICAgICAgIGFwcGVuZERvY3VtZW50VHlw
ZShyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50VHlwZSo+KG5vZGUpKTsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6IHsK
LSAgICAgICAgLy8gRklYTUU6IFBJIGRhdGEgaXMgbm90IGVzY2FwZWQsIGJ1dCBYTUxTZXJpYWxp
emVyIChhbmQgcG9zc2libHkgb3RoZXIgY2FsbGVycykgdGhpcyBzaG91bGQgcmFpc2UgYW4gZXhj
ZXB0aW9uIGlmIGl0IGluY2x1ZGVzICI/PiIuCi0gICAgICAgIGNvbnN0IFByb2Nlc3NpbmdJbnN0
cnVjdGlvbiogbiA9IHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5v
ZGUpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiPD8iKTsKLSAgICAgICAgYXBwZW5kKHJlc3Vs
dCwgbi0+dGFyZ2V0KCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiICIpOwotICAgICAgICBh
cHBlbmQocmVzdWx0LCBuLT5kYXRhKCkpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCAiPz4iKTsK
KyAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKKyAgICAgICAgYXBw
ZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vz
c2luZ0luc3RydWN0aW9uKj4obm9kZSktPnRhcmdldCgpLCBzdGF0aWNfY2FzdDxjb25zdCBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKS0+ZGF0YSgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOiB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
JzwnKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGNvbnN0X2Nhc3Q8RWxlbWVudCo+KHN0
YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKSk7Ci0gICAgICAgIGJvb2wgY29udmVydCA9
IGNvbnZlcnRCbG9ja3NUb0lubGluZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2Rl
KSk7Ci0gICAgICAgIGFwcGVuZChyZXN1bHQsIGVsZW1lbnQtPm5vZGVOYW1lUHJlc2VydmluZ0Nh
c2UoKSk7Ci0gICAgICAgIGlmICghZG9jdW1lbnRJc0hUTUwgJiYgbmFtZXNwYWNlcyAmJiBzaG91
bGRBZGROYW1lc3BhY2VFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICAgICAgYXBwZW5kTmFtZXNw
YWNlKHJlc3VsdCwgZWxlbWVudC0+cHJlZml4KCksIGVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpLCAq
bmFtZXNwYWNlcyk7Ci0KLSAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVu
dC0+YXR0cmlidXRlcygpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhdHRyaWJ1dGVzLT5s
ZW5ndGgoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRy
aWJ1dGVJdGVtKGkpOwotICAgICAgICAgICAgLy8gV2UnbGwgaGFuZGxlIHRoZSBzdHlsZSBhdHRy
aWJ1dGUgc2VwYXJhdGVseSwgYmVsb3cuCi0gICAgICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1l
KCkgPT0gc3R5bGVBdHRyICYmIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5u
b3RhdGUoKSB8fCBjb252ZXJ0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLQotICAgICAgICAgICAgaWYgKGRvY3VtZW50SXNIVE1M
KQotICAgICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIGF0dHJpYnV0ZS0+bmFtZSgpLmxvY2Fs
TmFtZSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcHBlbmQocmVzdWx0
LCBhdHRyaWJ1dGUtPm5hbWUoKS50b1N0cmluZygpKTsKLQotICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnPScpOwotCi0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNVUkxBdHRyaWJ1dGUoYXR0
cmlidXRlKSkgewotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY29tcGxldGUg
ZmlsZTovLy8gVVJMcyBiZWNhdXNlIGl0IG1heSBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlv
bgotICAgICAgICAgICAgICAgIC8vIGFib3V0IHRoZSB1c2VyJ3Mgc3lzdGVtLgotICAgICAgICAg
ICAgICAgIGlmIChzaG91bGRSZXNvbHZlVVJMcygpICYmICFub2RlLT5kb2N1bWVudCgpLT51cmwo
KS5pc0xvY2FsRmlsZSgpKQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRRdW90ZWRVUkxBdHRy
aWJ1dGVWYWx1ZShyZXN1bHQsIG5vZGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGF0dHJpYnV0
ZS0+dmFsdWUoKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUocmVzdWx0LCBhdHRyaWJ1dGUt
PnZhbHVlKCkuc3RyaW5nKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCdcIicpOwotICAgICAgICAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZVZh
bHVlKHJlc3VsdCwgYXR0cmlidXRlLT52YWx1ZSgpLCBkb2N1bWVudElzSFRNTCk7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXCInKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKCFkb2N1bWVudElzSFRNTCAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFj
ZUF0dHJpYnV0ZShhdHRyaWJ1dGUsICpuYW1lc3BhY2VzKSkKLSAgICAgICAgICAgICAgICBhcHBl
bmROYW1lc3BhY2UocmVzdWx0LCBhdHRyaWJ1dGUtPnByZWZpeCgpLCBhdHRyaWJ1dGUtPm5hbWVz
cGFjZVVSSSgpLCAqbmFtZXNwYWNlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZWxlbWVu
dC0+aXNIVE1MRWxlbWVudCgpICYmIChzaG91bGRBbm5vdGF0ZSgpIHx8IGNvbnZlcnQpKSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KS0+Z2V0SW5saW5lU3R5bGVEZWNsKCktPmNv
cHkoKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBbm5vdGF0ZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUZyb21NYXRjaGVkUnVs
ZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGNvbnN0X2Nhc3Q8RWxlbWVudCo+
KGVsZW1lbnQpKTsKLSAgICAgICAgICAgICAgICAvLyBTdHlsZXMgZnJvbSB0aGUgaW5saW5lIHN0
eWxlIGRlY2xhcmF0aW9uLCBoZWxkIGluIHRoZSB2YXJpYWJsZSAic3R5bGUiLCB0YWtlIHByZWNl
ZGVuY2UgCi0gICAgICAgICAgICAgICAgLy8gb3ZlciB0aG9zZSBmcm9tIG1hdGNoZWQgcnVsZXMu
Ci0gICAgICAgICAgICAgICAgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5tZXJnZShzdHlsZS5nZXQo
KSk7Ci0gICAgICAgICAgICAgICAgc3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXM7Ci0KLSAg
ICAgICAgICAgICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRl
ZFN0eWxlRm9yRWxlbWVudCA9IGNvbXB1dGVkU3R5bGUoZWxlbWVudCk7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBmcm9tQ29tcHV0ZWRTdHlsZSA9
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKLQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IHN0eWxlLT5lbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBD
U1NQcm9wZXJ0eSYgcHJvcGVydHkgPSAqaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NW
YWx1ZSogdmFsdWUgPSBwcm9wZXJ0eS52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIHByb3BlcnR5IHZhbHVlLCBpZiBpdCdzIGEgcGVyY2VudGFnZSwgbWF5IG5vdCByZWZs
ZWN0IHRoZSBhY3R1YWwgY29tcHV0ZWQgdmFsdWUuICAKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZvciBleGFtcGxlOiBzdHlsZT0iaGVpZ2h0OiAxJTsgb3ZlcmZsb3c6IHZpc2libGU7IiBp
biBxdWlya3Ntb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlcmUgYXJl
IG90aGVycyBsaWtlIHRoaXMsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTE5NTEyMz4gU2xhc2hkb3Qg
Y29weS9wYXN0ZSBmaWRlbGl0eSBwcm9ibGVtCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfUFJJTUlUSVZFX1ZBTFVFKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlZlB0cjxD
U1NWYWx1ZT4gY29tcHV0ZWRQcm9wZXJ0eVZhbHVlID0gY29tcHV0ZWRTdHlsZUZvckVsZW1lbnQt
PmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydHkuaWQoKSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmcm9tQ29tcHV0ZWRTdHlsZS0+YWRkUGFyc2VkUHJvcGVydHkoQ1NT
UHJvcGVydHkocHJvcGVydHkuaWQoKSwgY29tcHV0ZWRQcm9wZXJ0eVZhbHVlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3R5bGUt
Pm1lcmdlKGZyb21Db21wdXRlZFN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChjb252ZXJ0KQotICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eURpc3BsYXksIENTU1ZhbHVlSW5saW5lLCB0cnVlKTsKLSAgICAgICAgICAgIC8vIElm
IHRoZSBub2RlIGlzIG5vdCBmdWxseSBzZWxlY3RlZCBieSB0aGUgcmFuZ2UsIHRoZW4gd2UgZG9u
J3Qgd2FudCB0byBrZWVwIHN0eWxlcyB0aGF0IGFmZmVjdCBpdHMgcmVsYXRpb25zaGlwIHRvIHRo
ZSBub2RlcyBhcm91bmQgaXQKLSAgICAgICAgICAgIC8vIG9ubHkgdGhlIG9uZXMgdGhhdCBhZmZl
Y3QgaXQgYW5kIHRoZSBub2RlcyB3aXRoaW4gaXQuCi0gICAgICAgICAgICBpZiAocmFuZ2VGdWxs
eVNlbGVjdHNOb2RlID09IERvZXNOb3RGdWxseVNlbGVjdE5vZGUpCi0gICAgICAgICAgICAgICAg
cmVtb3ZlRXh0ZXJpb3JTdHlsZXMoc3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKHN0eWxl
LT5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNv
bnN0IFN0cmluZywgc3R5bGVQcmVmaXgsICgiIHN0eWxlPVwiIikpOwotICAgICAgICAgICAgICAg
IGFwcGVuZChyZXN1bHQsIHN0eWxlUHJlZml4KTsKLSAgICAgICAgICAgICAgICBhcHBlbmRBdHRy
aWJ1dGVWYWx1ZShyZXN1bHQsIHN0eWxlLT5jc3NUZXh0KCksIGRvY3VtZW50SXNIVE1MKTsKLSAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdcIicpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgewotICAgICAgICAg
ICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgJyk7IC8vIFhIVE1MIDEuMCA8LT4gSFRNTCBjb21wYXRpYmlsaXR5LgotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoJz4nKTsKKyAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKKyAgICAgICAgYXBwZW5kRWxl
bWVudChyZXN1bHQsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihjb25zdF9jYXN0PE5vZGUqPihub2Rl
KSksIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihu
b2RlKSksIG5hbWVzcGFjZXMsIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CiAgICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERTogewotICAgICAgICAv
LyBGSVhNRTogQ0RBVEEgY29udGVudCBpcyBub3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIg
KGFuZCBwb3NzaWJseSBvdGhlciBjYWxsZXJzKSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlm
IGl0IGluY2x1ZGVzICJdXT4iLgotICAgICAgICBjb25zdCBDREFUQVNlY3Rpb24qIG4gPSBzdGF0
aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24qPihub2RlKTsKLSAgICAgICAgYXBwZW5kKHJlc3Vs
dCwgIjwhW0NEQVRBWyIpOwotICAgICAgICBhcHBlbmQocmVzdWx0LCBuLT5kYXRhKCkpOwotICAg
ICAgICBhcHBlbmQocmVzdWx0LCAiXV0+Iik7CisgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9O
X05PREU6CisgICAgICAgIGFwcGVuZENEQVRBU2VjdGlvbihyZXN1bHQsIHN0YXRpY19jYXN0PGNv
bnN0IENEQVRBU2VjdGlvbio+KG5vZGUpLT5kYXRhKCkpOwogICAgICAgICBicmVhazsKLSAgICB9
CiAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAgICBjYXNlIE5vZGU6OkVOVElUWV9O
T0RFOgogICAgIGNhc2UgTm9kZTo6RU5USVRZX1JFRkVSRU5DRV9OT0RFOgo=
</data>
<flag name="review"
          id="53675"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>