<?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>61009</bug_id>
          
          <creation_ts>2011-05-17 18:16:31 -0700</creation_ts>
          <short_desc>Processes spawned by SnowLeopard&apos;s WebProcess attempt to install WebKit2 shims</short_desc>
          <delta_ts>2011-06-18 11:55:51 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>405435</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-17 18:16:31 -0700</bug_when>
    <thetext>Processes spawned by SnowLeopard&apos;s WebProcess attempt to install WebKit2 shims

This causes all processes spawned by WebProcess to crash, not finding the shim dylib.

In radar as &lt;rdar://problem/9457633&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405443</commentid>
    <comment_count>1</comment_count>
      <attachid>93855</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-17 18:21:07 -0700</bug_when>
    <thetext>Created attachment 93855
Patch v1 - Strip the shim dylibs from the environment variable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405507</commentid>
    <comment_count>2</comment_count>
      <attachid>93855</attachid>
    <who name="">mitz</who>
    <bug_when>2011-05-17 21:46:32 -0700</bug_when>
    <thetext>Comment on attachment 93855
Patch v1 - Strip the shim dylibs from the environment variable

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

&gt; Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm:-148
&gt; -#ifndef BUILDING_ON_SNOW_LEOPARD

You will now need to also remove the Snow Leopard guards added in r86734 to WebProcessMainMac.mm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405755</commentid>
    <comment_count>3</comment_count>
      <attachid>93922</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-18 08:48:48 -0700</bug_when>
    <thetext>Created attachment 93922
Patch v2 - Remove that second set of guards, also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405855</commentid>
    <comment_count>4</comment_count>
      <attachid>93941</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-18 11:13:50 -0700</bug_when>
    <thetext>Created attachment 93941
Patch v3 - Better, shared code for sanitizing the variables and do it in PluginProcessMain also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405872</commentid>
    <comment_count>5</comment_count>
      <attachid>93941</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-05-18 11:21:02 -0700</bug_when>
    <thetext>Comment on attachment 93941
Patch v3 - Better, shared code for sanitizing the variables and do it in PluginProcessMain also.

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

&gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:38
&gt; +    const char* environmentVariableBuffer = environmentVariable.utf8().data();

This is a dangling pointer. You need to declare a CString.

&gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:39
&gt; +    String environmentValue = String::fromUTF8(getenv(environmentVariableBuffer));

I&apos;d assign getenv to a pointer and check for null before calling String::fromUTF8.

&gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:49
&gt; +    size_t count = values.size();
&gt; +    for (size_t i = 0; i &lt; count; ++i) {

In WebKit2 we usually write this

for (size_t i = 0, count = values.size(); i &lt; count; ++i)

&gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:63
&gt; +    // If the builder&apos;s length is 1 longer than the original environment variable, that 1 character
&gt; +    // is the unneeded trailing &quot;:&quot; and the actual values are the same, so we&apos;re done.
&gt; +    if (builder.length() == environmentValue.length() + 1)
&gt; +        return;

Could you assert that this is the case?

&gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:68
&gt; +    char* newValueBuffer = const_cast&lt;char*&gt;(newValueCString.data());

I think you can use mutableData here, instead of doing a const_cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405888</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-18 11:30:09 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 93941 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93941&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:38
&gt; &gt; +    const char* environmentVariableBuffer = environmentVariable.utf8().data();
&gt; 
&gt; This is a dangling pointer. You need to declare a CString.

Yikes, yup.

&gt; &gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:39
&gt; &gt; +    String environmentValue = String::fromUTF8(getenv(environmentVariableBuffer));
&gt; 
&gt; I&apos;d assign getenv to a pointer and check for null before calling String::fromUTF8.

Okay.

&gt; &gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:49
&gt; &gt; +    size_t count = values.size();
&gt; &gt; +    for (size_t i = 0; i &lt; count; ++i) {
&gt; 
&gt; In WebKit2 we usually write this
&gt; 
&gt; for (size_t i = 0, count = values.size(); i &lt; count; ++i)

Sweet.

&gt; &gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:63
&gt; &gt; +    // If the builder&apos;s length is 1 longer than the original environment variable, that 1 character
&gt; &gt; +    // is the unneeded trailing &quot;:&quot; and the actual values are the same, so we&apos;re done.
&gt; &gt; +    if (builder.length() == environmentValue.length() + 1)
&gt; &gt; +        return;
&gt; 
&gt; Could you assert that this is the case?

Yup.

&gt; &gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:68
&gt; &gt; +    char* newValueBuffer = const_cast&lt;char*&gt;(newValueCString.data());
&gt; 
&gt; I think you can use mutableData here, instead of doing a const_cast.

I thought mutableData() would always make a copy.  Apparently it doesn&apos;t!  Will-do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405897</commentid>
    <comment_count>7</comment_count>
      <attachid>93955</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-18 11:39:13 -0700</bug_when>
    <thetext>Created attachment 93955
Patch v4 - Anders&apos; feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405990</commentid>
    <comment_count>8</comment_count>
      <attachid>93977</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-18 13:27:27 -0700</bug_when>
    <thetext>Created attachment 93977
Patch v5 - Anders wanted a rewrite using c-strings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405992</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-18 13:28:57 -0700</bug_when>
    <thetext>Attachment 93977 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1

Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:65:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:65:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:66:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:66:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:90:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebKit2/Platform/unix/EnvironmentUtilities.cpp:90:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 6 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>405998</commentid>
    <comment_count>10</comment_count>
      <attachid>93977</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-05-18 13:35:55 -0700</bug_when>
    <thetext>Comment on attachment 93977
Patch v5 - Anders wanted a rewrite using c-strings

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

&gt; Source/WebKit2/Platform/unix/EnvironmentUtilities.h:35
&gt; +void stripValuesEndingWithString(const String&amp; environmentVariable, const String&amp; value);

These could take CStrings or char*, it&apos;s up to you :)

&gt; Source/WebKit2/WebProcess/mac/WebProcessMainMac.mm:46
&gt; +#import &lt;wtf/text/StringBuilder.h&gt;

Not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406046</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-18 15:03:34 -0700</bug_when>
    <thetext>(In reply to comment #10)

&gt; &gt; Source/WebKit2/WebProcess/mac/WebProcessMainMac.mm:46
&gt; &gt; +#import &lt;wtf/text/StringBuilder.h&gt;
&gt; 
&gt; Not needed.

Whoops, forgot to nuke this one.  Will followup.

Mostly landed in r86792</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406047</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-18 15:05:17 -0700</bug_when>
    <thetext>Nuked the #include r86797</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406186</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-18 18:49:49 -0700</bug_when>
    <thetext>It seems like this patch broke waterfall :(
http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20%28WebKit2%20Tests%29/builds/11788</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406210</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-05-18 19:30:17 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; It seems like this patch broke waterfall :(
&gt; http://build.webkit.org/builders/SnowLeopard%20Intel%20Release%20%28WebKit2%20Tests%29/builds/11788

Never ending comedy of errors, this one...  *sigh*

Disabled again in 86814

I&apos;ll make sure both basic browsing and the video layouttests work on SnowLeopard before reenabling.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93855</attachid>
            <date>2011-05-17 18:21:07 -0700</date>
            <delta_ts>2011-05-18 08:48:48 -0700</delta_ts>
            <desc>Patch v1 - Strip the shim dylibs from the environment variable</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>3693</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NzI1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDUtMTcgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85NDU3NjMzPiBhbmQgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMDA5CisgICAgICAgIFByb2Nlc3NlcyBz
cGF3bmVkIGJ5IFNub3dMZW9wYXJkJ3MgV2ViUHJvY2VzcyBhdHRlbXB0IHRvIGluc3RhbGwgV2Vi
S2l0MiBzaGltcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWluTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbik6IEZpbHRlciBvdXQgdGhlIHNo
aW0gZHlsaWJzIGZyb20gdGhlIGVudmlyb25tZW50IHNvIGFueQorICAgICAgICAgIHNwYXduZWQg
cHJvY2Vzc2VzIGRvbid0IHRyeSB0byBpbmNsdWRlIHRoZW0uCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NMYXVuY2hlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6
UHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKTogUmVtb3ZlIHRoZSBub3ctdW5uZWVkZWQg
U25vd0xlb3BhcmQgZ3VhcmRzLgorCiAyMDExLTA1LTE3ICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXJzdGFtcGVkIGJ5IFNhbSBXZWluaWcuCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NMYXVuY2hlck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFj
L1Byb2Nlc3NMYXVuY2hlck1hYy5tbQkocmV2aXNpb24gODY3MjQpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NMYXVuY2hlck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTQ1LDEwICsxNDUsOCBAQCB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6bGF1bmNoUHJv
Y2VzcygpCiAgICAgTlNTdHJpbmcgKnByb2Nlc3NTaGltUGF0aE5TU3RyaW5nID0gbmlsOwogICAg
IGlmIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5cGUgPT0gUHJvY2Vzc0xhdW5jaGVyOjpQbHVn
aW5Qcm9jZXNzKQogICAgICAgICBwcm9jZXNzU2hpbVBhdGhOU1N0cmluZyA9IFtbcHJvY2Vzc0Fw
cEV4ZWN1dGFibGVQYXRoIHN0cmluZ0J5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF0gc3RyaW5n
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIiXTsKLSNp
Zm5kZWYgQlVJTERJTkdfT05fU05PV19MRU9QQVJECiAgICAgZWxzZSBpZiAobV9sYXVuY2hPcHRp
b25zLnByb2Nlc3NUeXBlID09IFByb2Nlc3NMYXVuY2hlcjo6V2ViUHJvY2VzcykKICAgICAgICAg
cHJvY2Vzc1NoaW1QYXRoTlNTdHJpbmcgPSBbW3Byb2Nlc3NBcHBFeGVjdXRhYmxlUGF0aCBzdHJp
bmdCeURlbGV0aW5nTGFzdFBhdGhDb21wb25lbnRdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpAIldlYlByb2Nlc3NTaGltLmR5bGliIl07Ci0jZW5kaWYKICAgICAKICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgc2hpbSBsaWJyYXJ5IGZpbGUgZXhpc3RzIGFuZCBpbnNlcnQgaXQuCiAg
ICAgaWYgKHByb2Nlc3NTaGltUGF0aE5TU3RyaW5nKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQkocmV2aXNpb24gODY3
MjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsMzIgQEAgaW50IFdlYlByb2Nlc3NNYWluKGNv
bnN0IENvbW1hbmRMaW5lJiBjbwogICAgICAgICByZXR1cm4gMjsKICAgICB9CiAKKyAgICAvLyBS
ZW1vdmUgaW5zdGFsbGVkIHNoaW1zIGZyb20gdGhlIERZTERfSU5TRVJUX0xJQlJBUklFUyBlbnZp
cm9ubWVudCB2YXJpYWJsZSBzbyBwcm9jZXNzZXMgCisgICAgLy8gc3Bhd25lZCBieSB0aGUgV2Vi
UHJvY2VzcyBkb24ndCBhdHRlbXB0IHRvIGluc3RhbGwgV2ViS2l0MiBzaGltcy4gICAgCisgICAg
U3RyaW5nIGVudiA9IFN0cmluZzo6ZnJvbVVURjgoZ2V0ZW52KCJEWUxEX0lOU0VSVF9MSUJSQVJJ
RVMiKSk7CisgICAgVmVjdG9yPFN0cmluZz4gb2xkTGlicmFyaWVzLCBuZXdMaWJyYXJpZXM7Cisg
ICAgZW52LnNwbGl0KCc6JywgZmFsc2UsIG9sZExpYnJhcmllcyk7CisgICAgc2l6ZV90IGNvdW50
ID0gb2xkTGlicmFyaWVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgaWYgKG9sZExpYnJhcmllc1tpXS5lbmRzV2l0aCgiL1dlYlByb2Nl
c3NTaGltLmR5bGliIikgJiYgb2xkTGlicmFyaWVzW2ldLmVuZHNXaXRoKCIvUGx1Z2luUHJvY2Vz
c1NoaW0uZHlsaWIiKSkKKyAgICAgICAgICAgIG5ld0xpYnJhcmllcy5hcHBlbmQob2xkTGlicmFy
aWVzW2ldKTsKKyAgICB9CisgICAgCisgICAgaWYgKG5ld0xpYnJhcmllcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gT25seSBib3RoZXIgdW5zZXR0aW5nIHRoZSB2YXJpYWJsZSBpZiBpdCBoYWQg
c29tZXRoaW5nIHRvIGJlZ2luIHdpdGguCisgICAgICAgIGlmICghZW52LmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHVuc2V0ZW52KCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiKTsKKyAgICB9IGVsc2Ug
aWYgKG5ld0xpYnJhcmllcy5zaXplKCkgIT0gb2xkTGlicmFyaWVzLnNpemUoKSkgeworICAgICAg
ICBTdHJpbmcgbmV3VmFsdWU7CisgICAgICAgIGNvdW50ID0gbmV3TGlicmFyaWVzLnNpemUoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudCAtIDE7ICsraSkKKyAgICAgICAg
ICAgIG5ld1ZhbHVlLmFwcGVuZChuZXdMaWJyYXJpZXNbaV0gKyAiOiIpOworCisgICAgICAgIG5l
d1ZhbHVlLmFwcGVuZChuZXdMaWJyYXJpZXNbY291bnQgLSAxXSk7CisgICAgICAgIAorICAgICAg
ICBzZXRlbnYoIkRZTERfSU5TRVJUX0xJQlJBUklFUyIsIG5ld1ZhbHVlLnV0ZjgoKS5kYXRhKCks
IDEpOworICAgIH0KKyAgICAgICAgCiAgICAgU3RyaW5nIGxvY2FsaXphdGlvbiA9IGNvbW1hbmRM
aW5lWyJsb2NhbGl6YXRpb24iXTsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNmTG9jYWxp
emF0aW9uKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4obG9jYWxpemF0aW9uLmNoYXJhY3RlcnMoKSksIGxvY2Fs
aXphdGlvbi5sZW5ndGgoKSkpOwogICAgIGlmIChjZkxvY2FsaXphdGlvbikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93922</attachid>
            <date>2011-05-18 08:48:48 -0700</date>
            <delta_ts>2011-05-18 11:13:50 -0700</delta_ts>
            <desc>Patch v2 - Remove that second set of guards, also.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4148</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NzY0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDUtMTcgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85NDU3NjMzPiBhbmQgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMDA5CisgICAgICAgIFByb2Nlc3NlcyBz
cGF3bmVkIGJ5IFNub3dMZW9wYXJkJ3MgV2ViUHJvY2VzcyBhdHRlbXB0IHRvIGluc3RhbGwgV2Vi
S2l0MiBzaGltcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWluTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbik6IEZpbHRlciBvdXQgdGhlIHNo
aW0gZHlsaWJzIGZyb20gdGhlIGVudmlyb25tZW50IHNvIGFueQorICAgICAgICAgIHNwYXduZWQg
cHJvY2Vzc2VzIGRvbid0IHRyeSB0byBpbmNsdWRlIHRoZW0uCisKKyAgICAgICAgUmVtb3ZlIHRo
ZSBub3ctdW5uZWVkZWQgU25vd0xlb3BhcmQgZ3VhcmRzOgorICAgICAgICAqIFVJUHJvY2Vzcy9M
YXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpQcm9j
ZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MpOiAKKyAgICAgICAgKiBXZWJQcm9jZXNzL21hYy9X
ZWJQcm9jZXNzTWFpbk1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc01haW4pOgor
CiAyMDExLTA1LTE4ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xh
dW5jaGVyTWFjLm1tCShyZXZpc2lvbiA4Njc2NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDUsMTAgKzE0NSw4IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKICAg
ICBOU1N0cmluZyAqcHJvY2Vzc1NoaW1QYXRoTlNTdHJpbmcgPSBuaWw7CiAgICAgaWYgKG1fbGF1
bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6OlBsdWdpblByb2Nlc3Mp
CiAgICAgICAgIHByb2Nlc3NTaGltUGF0aE5TU3RyaW5nID0gW1twcm9jZXNzQXBwRXhlY3V0YWJs
ZVBhdGggc3RyaW5nQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XSBzdHJpbmdCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6QCJQbHVnaW5Qcm9jZXNzU2hpbS5keWxpYiJdOwotI2lmbmRlZiBCVUlM
RElOR19PTl9TTk9XX0xFT1BBUkQKICAgICBlbHNlIGlmIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vz
c1R5cGUgPT0gUHJvY2Vzc0xhdW5jaGVyOjpXZWJQcm9jZXNzKQogICAgICAgICBwcm9jZXNzU2hp
bVBhdGhOU1N0cmluZyA9IFtbcHJvY2Vzc0FwcEV4ZWN1dGFibGVQYXRoIHN0cmluZ0J5RGVsZXRp
bmdMYXN0UGF0aENvbXBvbmVudF0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiV2Vi
UHJvY2Vzc1NoaW0uZHlsaWIiXTsKLSNlbmRpZgogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHRoZSBzaGltIGxpYnJhcnkgZmlsZSBleGlzdHMgYW5kIGluc2VydCBpdC4KICAgICBpZiAocHJv
Y2Vzc1NoaW1QYXRoTlNTdHJpbmcpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
bWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCShyZXZpc2lvbiA4Njc2NCkKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw2ICs3MiwzMiBAQCBpbnQgV2ViUHJvY2Vzc01haW4oY29uc3QgQ29tbWFu
ZExpbmUmIGNvCiAgICAgICAgIHJldHVybiAyOwogICAgIH0KIAorICAgIC8vIFJlbW92ZSBpbnN0
YWxsZWQgc2hpbXMgZnJvbSB0aGUgRFlMRF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50IHZh
cmlhYmxlIHNvIHByb2Nlc3NlcyAKKyAgICAvLyBzcGF3bmVkIGJ5IHRoZSBXZWJQcm9jZXNzIGRv
bid0IGF0dGVtcHQgdG8gaW5zdGFsbCBXZWJLaXQyIHNoaW1zLiAgICAKKyAgICBTdHJpbmcgZW52
ID0gU3RyaW5nOjpmcm9tVVRGOChnZXRlbnYoIkRZTERfSU5TRVJUX0xJQlJBUklFUyIpKTsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBvbGRMaWJyYXJpZXMsIG5ld0xpYnJhcmllczsKKyAgICBlbnYuc3Bs
aXQoJzonLCBmYWxzZSwgb2xkTGlicmFyaWVzKTsKKyAgICBzaXplX3QgY291bnQgPSBvbGRMaWJy
YXJpZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewor
ICAgICAgICBpZiAob2xkTGlicmFyaWVzW2ldLmVuZHNXaXRoKCIvV2ViUHJvY2Vzc1NoaW0uZHls
aWIiKSAmJiBvbGRMaWJyYXJpZXNbaV0uZW5kc1dpdGgoIi9QbHVnaW5Qcm9jZXNzU2hpbS5keWxp
YiIpKQorICAgICAgICAgICAgbmV3TGlicmFyaWVzLmFwcGVuZChvbGRMaWJyYXJpZXNbaV0pOwor
ICAgIH0KKyAgICAKKyAgICBpZiAobmV3TGlicmFyaWVzLmlzRW1wdHkoKSkgeworICAgICAgICAv
LyBPbmx5IGJvdGhlciB1bnNldHRpbmcgdGhlIHZhcmlhYmxlIGlmIGl0IGhhZCBzb21ldGhpbmcg
dG8gYmVnaW4gd2l0aC4KKyAgICAgICAgaWYgKCFlbnYuaXNFbXB0eSgpKQorICAgICAgICAgICAg
dW5zZXRlbnYoIkRZTERfSU5TRVJUX0xJQlJBUklFUyIpOworICAgIH0gZWxzZSBpZiAobmV3TGli
cmFyaWVzLnNpemUoKSAhPSBvbGRMaWJyYXJpZXMuc2l6ZSgpKSB7CisgICAgICAgIFN0cmluZyBu
ZXdWYWx1ZTsKKyAgICAgICAgY291bnQgPSBuZXdMaWJyYXJpZXMuc2l6ZSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50IC0gMTsgKytpKQorICAgICAgICAgICAgbmV3VmFs
dWUuYXBwZW5kKG5ld0xpYnJhcmllc1tpXSArICI6Iik7CisKKyAgICAgICAgbmV3VmFsdWUuYXBw
ZW5kKG5ld0xpYnJhcmllc1tjb3VudCAtIDFdKTsKKyAgICAgICAgCisgICAgICAgIHNldGVudigi
RFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgbmV3VmFsdWUudXRmOCgpLmRhdGEoKSwgMSk7CisgICAg
fQorICAgICAgICAKICAgICBTdHJpbmcgbG9jYWxpemF0aW9uID0gY29tbWFuZExpbmVbImxvY2Fs
aXphdGlvbiJdOwogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZMb2NhbGl6YXRpb24oQWRv
cHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCByZWludGVycHJldF9jYXN0PGNv
bnN0IFVuaUNoYXIqPihsb2NhbGl6YXRpb24uY2hhcmFjdGVycygpKSwgbG9jYWxpemF0aW9uLmxl
bmd0aCgpKSk7CiAgICAgaWYgKGNmTG9jYWxpemF0aW9uKQpAQCAtOTAsMTAgKzExNiw4IEBAIGlu
dCBXZWJQcm9jZXNzTWFpbihjb25zdCBDb21tYW5kTGluZSYgY28KICAgICBXVEY6OmluaXRpYWxp
emVNYWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CiAK
LSNpZm5kZWYgQlVJTERJTkdfT05fU05PV19MRU9QQVJECiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUg
c2hpbS4KICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplU2hpbSgpOwotI2VuZGlm
CiAKICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24uCiAgICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuaW5pdGlhbGl6ZShzZXJ2ZXJQb3J0LCBSdW5Mb29wOjptYWluKCkpOwo=
</data>
<flag name="review"
          id="87148"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93941</attachid>
            <date>2011-05-18 11:13:50 -0700</date>
            <delta_ts>2011-05-18 11:39:13 -0700</delta_ts>
            <desc>Patch v3 - Better, shared code for sanitizing the variables and do it in PluginProcessMain also.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>15843</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2Nzc2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDUtMTggIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85NDU3NjMzPiBhbmQgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMDA5CisgICAgICAgIFByb2Nlc3NlcyBz
cGF3bmVkIGJ5IFNub3dMZW9wYXJkJ3MgV2ViUHJvY2VzcyBhdHRlbXB0IHRvIGluc3RhbGwgV2Vi
S2l0MiBzaGltcy4KKworICAgICAgICBJZiB0aGUgV2ViUHJvY2VzcyBvciBQbHVnaW5Qcm9jZXNz
IGZvcmtzLCBpdCBzaG91bGRuJ3QgcGFzcyBXZWJLaXQyIHNoaW1zIGFsb25nIHRvIHRoZSBuZXcg
cHJvY2VzcworICAgICAgICBpbiB0aGUgRFlMRF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50
IHZhcmlhYmxlLgorCisgICAgICAgIEFkZCBFbnZpcm9ubWVudCBVdGlsaXRpZXMgaGVscGVyIHRv
IHN0cmlwIHVud2FudGVkIHZhbHVlcyBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlOgorICAg
ICAgICAqIFBsYXRmb3JtL3VuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6RW52aXJvbm1lbnRVdGlsaXRpZXM6OnN0cmlwVmFsdWVzRW5kaW5nV2l0
aFN0cmluZyk6CisgICAgICAgICogUGxhdGZvcm0vdW5peC9FbnZpcm9ubWVudFV0aWxpdGllcy5o
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
KyAgICAgICAgU3RyaXAgUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIgZnJvbSBEWUxEX0lOU0VSVF9M
SUJSQVJJRVM6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01haW5N
YWMubW06CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3NNYWluKToKKworICAgICAgICBT
dHJpcCBXZWJQcm9jZXNzU2hpbS5keWxpYiBmcm9tIERZTERfSU5TRVJUX0xJQlJBUklFUzoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc01haW4pOgorCisgICAgICAgIFVucHJvdGVjdCBTbm93TGVvcGFyZCBu
b3cgdGhhdCBpdCB3aWxsIGJlaGF2ZSBhbmQgbm90IHNwYXduIHByb2Nlc3NlcyB0cnlpbmcgdG8g
dXNlIFdlYktpdDIgc2hpbXM6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9j
ZXNzTGF1bmNoZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1
bmNoUHJvY2Vzcyk6CisKIDIwMTEtMDUtMTggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJ
bmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9FbnZpcm9ubWVudFV0aWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9FbnZpcm9ubWVu
dFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91
bml4L0Vudmlyb25tZW50VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFbnZpcm9ubWVu
dFV0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK25hbWVz
cGFjZSBFbnZpcm9ubWVudFV0aWxpdGllcyB7CisKK3ZvaWQgc3RyaXBWYWx1ZXNFbmRpbmdXaXRo
U3RyaW5nKGNvbnN0IFN0cmluZyYgZW52aXJvbm1lbnRWYXJpYWJsZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sgIAorICAgIGNvbnN0IGNoYXIqIGVudmlyb25tZW50VmFyaWFibGVCdWZmZXIgPSBl
bnZpcm9ubWVudFZhcmlhYmxlLnV0ZjgoKS5kYXRhKCk7CisgICAgU3RyaW5nIGVudmlyb25tZW50
VmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4KGdldGVudihlbnZpcm9ubWVudFZhcmlhYmxlQnVmZmVy
KSk7CisKKyAgICBpZiAoZW52aXJvbm1lbnRWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlczsKKyAgICBlbnZpcm9ubWVudFZhbHVlLnNw
bGl0KCc6JywgZmFsc2UsIHZhbHVlcyk7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgc2l6ZV90IGNvdW50ID0gdmFsdWVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKCF2YWx1ZXNbaV0uZW5kc1dpdGgodmFsdWUp
KQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWVzW2ldICsgIjoiKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gSWYgd2UndmUgc3RyaXBwZWQgZXZlcnl0aGluZyB3ZSBjYW4gc2ltcGx5IHVu
c2V0IHRoZSB2YXJpYWJsZS4KKyAgICBpZiAoYnVpbGRlci5pc0VtcHR5KCkpIHsKKyAgICAgICAg
dW5zZXRlbnYoZW52aXJvbm1lbnRWYXJpYWJsZUJ1ZmZlcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgLy8gSWYgdGhlIGJ1aWxkZXIncyBsZW5ndGggaXMgMSBsb25nZXIgdGhh
biB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoYXQgMSBjaGFyYWN0ZXIKKyAg
ICAvLyBpcyB0aGUgdW5uZWVkZWQgdHJhaWxpbmcgIjoiIGFuZCB0aGUgYWN0dWFsIHZhbHVlcyBh
cmUgdGhlIHNhbWUsIHNvIHdlJ3JlIGRvbmUuCisgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkgPT0g
ZW52aXJvbm1lbnRWYWx1ZS5sZW5ndGgoKSArIDEpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICAvLyBUaGUgbmV3IHZhbHVlIGZvciB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVt
cHR5IGFuZCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgb3JpZ2luYWwgdmFsdWUuCisgICAgLy8gV2Ug
Y2FuIGJyZWFrIGNvbnN0LW5lc3MgdG8gY2hlYXBseSByZW1vdmUgdGhlIHVuZWVkZWQgdHJhaWxp
bmcgJzonIGluIHRoZSBidWZmZXIuCisgICAgQ1N0cmluZyBuZXdWYWx1ZUNTdHJpbmcgPSBidWls
ZGVyLnRvU3RyaW5nKCkudXRmOCgpOworICAgIGNoYXIqIG5ld1ZhbHVlQnVmZmVyID0gY29uc3Rf
Y2FzdDxjaGFyKj4obmV3VmFsdWVDU3RyaW5nLmRhdGEoKSk7CisgICAgQVNTRVJUKG5ld1ZhbHVl
QnVmZmVyICYmIG5ld1ZhbHVlQnVmZmVyW25ld1ZhbHVlQ1N0cmluZy5sZW5ndGgoKV0gPT0gJzon
KTsKKyAgICBuZXdWYWx1ZUJ1ZmZlcltuZXdWYWx1ZUNTdHJpbmcubGVuZ3RoKCldID0gJ1wwJzsK
KyAgICAKKyAgICBzZXRlbnYoZW52aXJvbm1lbnRWYXJpYWJsZUJ1ZmZlciwgbmV3VmFsdWVCdWZm
ZXIsIDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBFbnZpcm9ubWVudFV0aWxpdGllcworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvRW52
aXJvbm1lbnRVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS91bml4L0Vudmlyb25tZW50VXRpbGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS91bml4L0Vudmlyb25tZW50VXRpbGl0aWVzLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEVudmlyb25tZW50VXRpbGl0aWVz
X2gKKyNkZWZpbmUgRW52aXJvbm1lbnRVdGlsaXRpZXNfaAorCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCituYW1lc3BhY2UgRW52aXJvbm1l
bnRVdGlsaXRpZXMgeworCit2b2lkIHN0cmlwVmFsdWVzRW5kaW5nV2l0aFN0cmluZyhjb25zdCBT
dHJpbmcmIGVudmlyb25tZW50VmFyaWFibGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8v
IG5hbWVzcGFjZSBFbnZpcm9ubWVudFV0aWxpdGllcworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vICNkZWZpbmUgRW52aXJvbm1lbnRVdGlsaXRpZXNfaAorCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFpbk1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNz
TWFpbk1hYy5tbQkocmV2aXNpb24gODY3NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9j
ZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFpbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2lmIEVOQUJMRShQTFVHSU5fUFJPQ0VTUykKIAogI2ltcG9ydCAiQ29tbWFuZExp
bmUuaCIKKyNpbXBvcnQgIkVudmlyb25tZW50VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJOZXRzY2Fw
ZVBsdWdpbk1vZHVsZS5oIgogI2ltcG9ydCAiUGx1Z2luUHJvY2Vzcy5oIgogI2ltcG9ydCAiUnVu
TG9vcC5oIgpAQCAtNTEsOSArNTIsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogaW50IFBsdWdp
blByb2Nlc3NNYWluKGNvbnN0IENvbW1hbmRMaW5lJiBjb21tYW5kTGluZSkKIHsKLSAgICAvLyBV
bnNldCBEWUxEX0lOU0VSVF9MSUJSQVJJRVMuIFdlIGRvbid0IHdhbnQgb3VyIHBsdWctaW4gcHJv
Y2VzcyBzaGltIHRvIGJlIGxvYWRlZCAKLSAgICAvLyBieSBhbnkgY2hpbGQgcHJvY2Vzc2VzIHRo
YXQgdGhlIHBsdWctaW4gbWF5IGxhdW5jaC4KLSAgICB1bnNldGVudigiRFlMRF9JTlNFUlRfTElC
UkFSSUVTIik7CisgICAgLy8gUmVtb3ZlIHRoZSBQbHVnaW5Qcm9jZXNzIHNoaW0gZnJvbSB0aGUg
RFlMRF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGFueSBwcm9jZXNz
ZXMgCisgICAgLy8gc3Bhd25lZCBieSB0aGUgUGx1Z2luUHJvY2VzcyBkb24ndCB0cnkgdG8gaW5z
ZXJ0IHRoZSBzaGltIGFuZCBjcmFzaC4KKyAgICBFbnZpcm9ubWVudFV0aWxpdGllczo6c3RyaXBW
YWx1ZXNFbmRpbmdXaXRoU3RyaW5nKCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCAiL1BsdWdpblBy
b2Nlc3NTaGltLmR5bGliIik7CiAKICAgICAvLyBDaGVjayBpZiB3ZSdyZSBiZWluZyBzcGF3bmVk
IHRvIHdyaXRlIGEgTUlNRSB0eXBlIHByZWZlcmVuY2VzIGZpbGUuCiAgICAgU3RyaW5nIHBsdWdp
blBhdGggPSBjb21tYW5kTGluZVsiY3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXMiXTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5j
aGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hl
ci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCShyZXZpc2lvbiA4Njc3MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsMTAgKzE0NSw4IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVu
Y2hQcm9jZXNzKCkKICAgICBOU1N0cmluZyAqcHJvY2Vzc1NoaW1QYXRoTlNTdHJpbmcgPSBuaWw7
CiAgICAgaWYgKG1fbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6
OlBsdWdpblByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3NTaGltUGF0aE5TU3RyaW5nID0gW1twcm9j
ZXNzQXBwRXhlY3V0YWJsZVBhdGggc3RyaW5nQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XSBz
dHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJQbHVnaW5Qcm9jZXNzU2hpbS5keWxpYiJd
OwotI2lmbmRlZiBCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQKICAgICBlbHNlIGlmIChtX2xhdW5j
aE9wdGlvbnMucHJvY2Vzc1R5cGUgPT0gUHJvY2Vzc0xhdW5jaGVyOjpXZWJQcm9jZXNzKQogICAg
ICAgICBwcm9jZXNzU2hpbVBhdGhOU1N0cmluZyA9IFtbcHJvY2Vzc0FwcEV4ZWN1dGFibGVQYXRo
IHN0cmluZ0J5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF0gc3RyaW5nQnlBcHBlbmRpbmdQYXRo
Q29tcG9uZW50OkAiV2ViUHJvY2Vzc1NoaW0uZHlsaWIiXTsKLSNlbmRpZgogICAgIAogICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBzaGltIGxpYnJhcnkgZmlsZSBleGlzdHMgYW5kIGluc2VydCBp
dC4KICAgICBpZiAocHJvY2Vzc1NoaW1QYXRoTlNTdHJpbmcpIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg2
NzczKQorKysgU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjIsNiArMzYyLDggQEAKIAkJNTFBQ0JCODIxMjdBOEJBRDAw
RDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNCQjgxMTI3QThCQUQwMEQyMDNCOSAvKiBXZWJDb250
ZXh0TWVudVByb3h5LmggKi87IH07CiAJCTUxQUNCQkEwMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJD
b250ZXh0TWVudVByb3h5TWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUFDQkI5RTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94
eU1hYy5oICovOyB9OwogCQk1MUFDQkJBMTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQUNCQjlGMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLm1t
ICovOyB9OworCQk1MUIxNUE4NDEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRp
ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFC
MTVBODIxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCAqLzsgfTsK
KwkJNTFCMTVBODUxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIxNUE4MzEzODQz
QTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuaCAqLzsgfTsKIAkJNTFCMzAwNTAx
MjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjMwMDRFMTI1MjlEMEUwMDBCNUNB
MCAvKiBXZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAgKi87IH07CiAJCTUxQjMwMDUxMTI1MjlEMEUw
MDBCNUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVBy
b3h5Q0YuY3BwICovOyB9OwogCQk1MUM0MDMyQzEzNjc0OUQ4MDBEQzk3MkQgLyogQXV0aGVudGlj
YXRpb25NYW5hZ2VyLm1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQzQwMzJCMTM2NzQ5RDgwMERDOTcyRCAvKiBBdXRoZW50aWNhdGlvbk1hbmFn
ZXIubWFjLm1tICovOyB9OwpAQCAtMTI5MCw2ICsxMjkyLDggQEAKIAkJNTFBQ0JCODExMjdBOEJB
RDAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViQ29udGV4dE1lbnVQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUFDQkI5RTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb250ZXh0TWVudVByb3h5
TWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQUNCQjlGMTI3QThGMkMwMEQy
MDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTFCMTVBODIxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50
VXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVudmly
b25tZW50VXRpbGl0aWVzLmNwcDsgcGF0aCA9IHVuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUIxNUE4MzEzODQzQTM5MDAzMjFBRDgg
LyogRW52aXJvbm1lbnRVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRW52aXJvbm1lbnRVdGlsaXRpZXMuaDsgcGF0aCA9IHVuaXgvRW52aXJvbm1lbnRVdGlsaXRp
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCMzAwNEUxMjUyOUQwRTAwMEI1
Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDsgcGF0aCA9IGNmL1dlYkJhY2tG
b3J3YXJkTGlzdENGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCMzAwNEYx
MjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlBhZ2VQcm94eUNGLmNwcDsgcGF0aCA9IGNmL1dlYlBhZ2VQ
cm94eUNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDNDAzMkIxMzY3NDlE
ODAwREM5NzJEIC8qIEF1dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tOyBw
YXRoID0gbWFjL0F1dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNDI2LDYgKzI0MzAsMTUgQEAKIAkJCW5hbWUgPSBLZXlWYWx1ZVN0b3Jh
Z2U7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk1MUIxNUE3RDEzODQzOUIy
MDAzMjFBRDggLyogdW5peCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJNTFCMTVBODIxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVz
LmNwcCAqLywKKwkJCQk1MUIxNUE4MzEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGls
aXRpZXMuaCAqLywKKwkJCSk7CisJCQluYW1lID0gdW5peDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CiAJCTUxQjMwMDREMTI1MjlDRjUwMDBCNUNBMCAvKiBjZiAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0zMDE3LDYgKzMwMzAsNyBAQAog
CQkJCTFBQTJFNTFBMTJFNEMwNTYwMEJDNDk2NiAvKiBjZyAqLywKIAkJCQkxQUI1QTFCQTEwRTAy
MUQzMDA0MEY2Q0YgLyogQ29yZUlQQyAqLywKIAkJCQkxQTdFODE0RTExNTJEMjI0MDAwMzY5NUIg
LyogbWFjICovLAorCQkJCTUxQjE1QTdEMTM4NDM5QjIwMDMyMUFEOCAvKiB1bml4ICovLAogCQkJ
CTUxQTdGMkY0MTI1QkY4RDQwMDhBRUIxRCAvKiBMb2dnaW5nLmNwcCAqLywKIAkJCQk1MUE3RjJG
MjEyNUJGODIwMDA4QUVCMUQgLyogTG9nZ2luZy5oICovLAogCQkJCUMwRTNBQTQ1MTIwOUUyQkEw
MEE0OUQwMSAvKiBNb2R1bGUuY3BwICovLApAQCAtMzc5NSw2ICszODA5LDcgQEAKIAkJCQkxQTE3
OTc4MDEzN0VFODJDMDBGOTdENDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MUQxMzA1NDEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3RE
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQxMzA1NjEzODJFQUMwMDAzNTFFREQgLyogU2Vj
SXRlbVJlc3BvbnNlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFCMTVBODUxMzg0M0EzOTAw
MzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ0NjEs
NiArNDQ3Niw3IEBACiAJCQkJNTFEMTMwNTMxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXF1
ZXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQxMzA1NTEzODJFQUMwMDAzNTFFREQg
LyogU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQxMzA1ODEz
ODJGMTA1MDAzNTFFREQgLyogV2ViUHJvY2Vzc1Byb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJNTFCMTVBODQxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJv
Y2Vzc01haW5NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9t
YWMvV2ViUHJvY2Vzc01haW5NYWMubW0JKHJldmlzaW9uIDg2NzczKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01haW5NYWMubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIldlYlByb2Nlc3NNYWluLmgiCiAKICNpbXBvcnQgIkNv
bW1hbmRMaW5lLmgiCisjaW1wb3J0ICJFbnZpcm9ubWVudFV0aWxpdGllcy5oIgogI2ltcG9ydCAi
UnVuTG9vcC5oIgogI2ltcG9ydCAiV2ViUHJvY2Vzcy5oIgogI2ltcG9ydCAiV2ViU3lzdGVtSW50
ZXJmYWNlLmgiCkBAIC00Miw2ICs0Myw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAj
aW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgZG9pbmcgdGhpcyBhbm90aGVyIHdheS4KIGV4dGVybiAiQyIga2Vybl9yZXR1cm5fdCBib290
c3RyYXBfbG9va191cDIobWFjaF9wb3J0X3QsIGNvbnN0IG5hbWVfdCwgbWFjaF9wb3J0X3QqLCBw
aWRfdCwgdWludDY0X3QpOwpAQCAtNTgsNiArNjAsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGludCBXZWJQcm9jZXNzTWFpbihjb25zdCBDb21tYW5kTGluZSYgY29tbWFuZExpbmUpCiB7Cisj
aWZkZWYgQlVJTERJTkdfT05fU05PV0xFT1BBUkQKKyAgICAvLyBSZW1vdmUgdGhlIFdlYlByb2Nl
c3Mgc2hpbSBmcm9tIHRoZSBEWUxEX0lOU0VSVF9MSUJSQVJJRVMgZW52aXJvbm1lbnQgdmFyaWFi
bGUgc28gYW55IHByb2Nlc3NlcyBzcGF3bmVkIGJ5CisgICAgLy8gdGhlIFdlYlByb2Nlc3MgZG9u
J3QgdHJ5IHRvIGluc2VydCB0aGUgc2hpbSBhbmQgY3Jhc2guCisgICAgRW52aXJvbm1lbnRVdGls
aXRpZXM6OnN0cmlwVmFsdWVzRW5kaW5nV2l0aFN0cmluZygiRFlMRF9JTlNFUlRfTElCUkFSSUVT
IiwgIi9XZWJQcm9jZXNzU2hpbS5keWxpYiIpOworI2VuZGlmCisKICAgICBOU0F1dG9yZWxlYXNl
UG9vbCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOwogCiAgICAgU3Ry
aW5nIHNlcnZpY2VOYW1lID0gY29tbWFuZExpbmVbInNlcnZpY2VuYW1lIl07CkBAIC05MCwxMCAr
OTgsOCBAQCBpbnQgV2ViUHJvY2Vzc01haW4oY29uc3QgQ29tbWFuZExpbmUmIGNvCiAgICAgV1RG
Ojppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVu
TG9vcCgpOwogCi0jaWZuZGVmIEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRAogICAgIC8vIEluaXRp
YWxpemUgdGhlIHNoaW0uCiAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZVNoaW0o
KTsKLSNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uLgogICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmluaXRpYWxpemUoc2VydmVyUG9ydCwgUnVuTG9vcDo6bWFpbigpKTsK
</data>
<flag name="review"
          id="87174"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93955</attachid>
            <date>2011-05-18 11:39:13 -0700</date>
            <delta_ts>2011-05-18 13:27:27 -0700</delta_ts>
            <desc>Patch v4 - Anders&apos; feedback</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16088</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2Nzc2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDUtMTggIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85NDU3NjMzPiBhbmQgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMDA5CisgICAgICAgIFByb2Nlc3NlcyBz
cGF3bmVkIGJ5IFNub3dMZW9wYXJkJ3MgV2ViUHJvY2VzcyBhdHRlbXB0IHRvIGluc3RhbGwgV2Vi
S2l0MiBzaGltcy4KKworICAgICAgICBJZiB0aGUgV2ViUHJvY2VzcyBvciBQbHVnaW5Qcm9jZXNz
IGZvcmtzLCBpdCBzaG91bGRuJ3QgcGFzcyBXZWJLaXQyIHNoaW1zIGFsb25nIHRvIHRoZSBuZXcg
cHJvY2VzcworICAgICAgICBpbiB0aGUgRFlMRF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50
IHZhcmlhYmxlLgorCisgICAgICAgIEFkZCBFbnZpcm9ubWVudCBVdGlsaXRpZXMgaGVscGVyIHRv
IHN0cmlwIHVud2FudGVkIHZhbHVlcyBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlOgorICAg
ICAgICAqIFBsYXRmb3JtL3VuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6RW52aXJvbm1lbnRVdGlsaXRpZXM6OnN0cmlwVmFsdWVzRW5kaW5nV2l0
aFN0cmluZyk6CisgICAgICAgICogUGxhdGZvcm0vdW5peC9FbnZpcm9ubWVudFV0aWxpdGllcy5o
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
KyAgICAgICAgU3RyaXAgUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIgZnJvbSBEWUxEX0lOU0VSVF9M
SUJSQVJJRVM6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01haW5N
YWMubW06CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3NNYWluKToKKworICAgICAgICBT
dHJpcCBXZWJQcm9jZXNzU2hpbS5keWxpYiBmcm9tIERZTERfSU5TRVJUX0xJQlJBUklFUzoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc01haW4pOgorCisgICAgICAgIFVucHJvdGVjdCBTbm93TGVvcGFyZCBu
b3cgdGhhdCBpdCB3aWxsIGJlaGF2ZSBhbmQgbm90IHNwYXduIHByb2Nlc3NlcyB0cnlpbmcgdG8g
dXNlIFdlYktpdDIgc2hpbXM6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9j
ZXNzTGF1bmNoZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1
bmNoUHJvY2Vzcyk6CisKIDIwMTEtMDUtMTggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJ
bmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9FbnZpcm9ubWVudFV0aWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9FbnZpcm9ubWVu
dFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91
bml4L0Vudmlyb25tZW50VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFbnZpcm9ubWVu
dFV0aWxpdGllcy5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK25hbWVz
cGFjZSBFbnZpcm9ubWVudFV0aWxpdGllcyB7CisKK3ZvaWQgc3RyaXBWYWx1ZXNFbmRpbmdXaXRo
U3RyaW5nKGNvbnN0IFN0cmluZyYgZW52aXJvbm1lbnRWYXJpYWJsZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sgIAorICAgIENTdHJpbmcgZW52aXJvbm1lbnRWYXJpYWJsZUNTdHJpbmcgPSBlbnZp
cm9ubWVudFZhcmlhYmxlLnV0ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBlbnZpcm9ubWVudFZhcmlh
YmxlQnVmZmVyID0gZW52aXJvbm1lbnRWYXJpYWJsZUNTdHJpbmcuZGF0YSgpOworICAgIGNvbnN0
IGNoYXIqIGVudmlyb25tZW50VmFsdWVCdWZmZXIgPSBnZXRlbnYoZW52aXJvbm1lbnRWYXJpYWJs
ZUJ1ZmZlcik7CisgICAgCisgICAgaWYgKCFlbnZpcm9ubWVudFZhbHVlQnVmZmVyIHx8IGVudmly
b25tZW50VmFsdWVCdWZmZXJbMF0gPT0gJ1wwJykKKyAgICAgICAgcmV0dXJuOworCisgICAgU3Ry
aW5nIGVudmlyb25tZW50VmFsdWUgPSBTdHJpbmc6OmZyb21VVEY4KGVudmlyb25tZW50VmFsdWVC
dWZmZXIpOworCisgICAgVmVjdG9yPFN0cmluZz4gdmFsdWVzOworICAgIGVudmlyb25tZW50VmFs
dWUuc3BsaXQoJzonLCBmYWxzZSwgdmFsdWVzKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKKyAgICBmb3IgKHNpemVfdCBpID0gMCwgY291bnQgPSB2YWx1ZXMuc2l6ZSgpOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBpZiAoIXZhbHVlc1tpXS5lbmRzV2l0aCh2YWx1ZSkpCisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZXNbaV0gKyAiOiIpOworICAgIH0KKyAgICAKKyAg
ICAvLyBJZiB3ZSd2ZSBzdHJpcHBlZCBldmVyeXRoaW5nIHdlIGNhbiBzaW1wbHkgdW5zZXQgdGhl
IHZhcmlhYmxlLgorICAgIGlmIChidWlsZGVyLmlzRW1wdHkoKSkgeworICAgICAgICB1bnNldGVu
dihlbnZpcm9ubWVudFZhcmlhYmxlQnVmZmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICAvLyBJZiB0aGUgYnVpbGRlcidzIGxlbmd0aCBpcyAxIGxvbmdlciB0aGFuIHRoZSBv
cmlnaW5hbCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhhdCAxIGNoYXJhY3RlcgorICAgIC8vIGlz
IHRoZSB1bm5lZWRlZCB0cmFpbGluZyAiOiIgYW5kIHRoZSBhY3R1YWwgdmFsdWVzIGFyZSB0aGUg
c2FtZSwgc28gd2UncmUgZG9uZS4KKyAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSA9PSBlbnZpcm9u
bWVudFZhbHVlLmxlbmd0aCgpICsgMSkgeworICAgICAgICBBU1NFUlQoYnVpbGRlci50b1N0cmlu
ZygpLmxlZnQoYnVpbGRlci5sZW5ndGgoKSAtIDEpID09IGVudmlyb25tZW50VmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBl
bnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZW1wdHkgYW5kIGlzIGRpZmZlcmVudCB0aGFuIHRo
ZSBvcmlnaW5hbCB2YWx1ZS4KKyAgICAvLyBXZSBjYW4gYnJlYWsgY29uc3QtbmVzcyB0byBjaGVh
cGx5IHJlbW92ZSB0aGUgdW5lZWRlZCB0cmFpbGluZyAnOicgaW4gdGhlIGJ1ZmZlci4KKyAgICBD
U3RyaW5nIG5ld1ZhbHVlQ1N0cmluZyA9IGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCk7CisgICAg
Y2hhciogbmV3VmFsdWVCdWZmZXIgPSBuZXdWYWx1ZUNTdHJpbmcubXV0YWJsZURhdGEoKTsKKyAg
ICBBU1NFUlQobmV3VmFsdWVCdWZmZXIgJiYgbmV3VmFsdWVCdWZmZXJbbmV3VmFsdWVDU3RyaW5n
Lmxlbmd0aCgpXSA9PSAnOicpOworICAgIG5ld1ZhbHVlQnVmZmVyW25ld1ZhbHVlQ1N0cmluZy5s
ZW5ndGgoKV0gPSAnXDAnOworICAgIAorICAgIHNldGVudihlbnZpcm9ubWVudFZhcmlhYmxlQnVm
ZmVyLCBuZXdWYWx1ZUJ1ZmZlciwgMSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEVudmlyb25tZW50
VXRpbGl0aWVzCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vdW5peC9FbnZpcm9ubWVudFV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRW52
aXJvbm1lbnRVdGlsaXRpZXNfaAorI2RlZmluZSBFbnZpcm9ubWVudFV0aWxpdGllc19oCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK25h
bWVzcGFjZSBFbnZpcm9ubWVudFV0aWxpdGllcyB7CisKK3ZvaWQgc3RyaXBWYWx1ZXNFbmRpbmdX
aXRoU3RyaW5nKGNvbnN0IFN0cmluZyYgZW52aXJvbm1lbnRWYXJpYWJsZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIEVudmlyb25tZW50VXRpbGl0aWVzCisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gI2RlZmluZSBFbnZpcm9ubWVudFV0aWxpdGll
c19oCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nl
c3NNYWluTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3Mv
bWFjL1BsdWdpblByb2Nlc3NNYWluTWFjLm1tCShyZXZpc2lvbiA4Njc3MykKKysrIFNvdXJjZS9X
ZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWluTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9DRVNTKQogCiAj
aW1wb3J0ICJDb21tYW5kTGluZS5oIgorI2ltcG9ydCAiRW52aXJvbm1lbnRVdGlsaXRpZXMuaCIK
ICNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luTW9kdWxlLmgiCiAjaW1wb3J0ICJQbHVnaW5Qcm9jZXNz
LmgiCiAjaW1wb3J0ICJSdW5Mb29wLmgiCkBAIC01MSw5ICs1Miw5IEBAIG5hbWVzcGFjZSBXZWJL
aXQgewogCiBpbnQgUGx1Z2luUHJvY2Vzc01haW4oY29uc3QgQ29tbWFuZExpbmUmIGNvbW1hbmRM
aW5lKQogewotICAgIC8vIFVuc2V0IERZTERfSU5TRVJUX0xJQlJBUklFUy4gV2UgZG9uJ3Qgd2Fu
dCBvdXIgcGx1Zy1pbiBwcm9jZXNzIHNoaW0gdG8gYmUgbG9hZGVkIAotICAgIC8vIGJ5IGFueSBj
aGlsZCBwcm9jZXNzZXMgdGhhdCB0aGUgcGx1Zy1pbiBtYXkgbGF1bmNoLgotICAgIHVuc2V0ZW52
KCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiKTsKKyAgICAvLyBSZW1vdmUgdGhlIFBsdWdpblByb2Nl
c3Mgc2hpbSBmcm9tIHRoZSBEWUxEX0lOU0VSVF9MSUJSQVJJRVMgZW52aXJvbm1lbnQgdmFyaWFi
bGUgc28gYW55IHByb2Nlc3NlcyAKKyAgICAvLyBzcGF3bmVkIGJ5IHRoZSBQbHVnaW5Qcm9jZXNz
IGRvbid0IHRyeSB0byBpbnNlcnQgdGhlIHNoaW0gYW5kIGNyYXNoLgorICAgIEVudmlyb25tZW50
VXRpbGl0aWVzOjpzdHJpcFZhbHVlc0VuZGluZ1dpdGhTdHJpbmcoIkRZTERfSU5TRVJUX0xJQlJB
UklFUyIsICIvUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIiKTsKIAogICAgIC8vIENoZWNrIGlmIHdl
J3JlIGJlaW5nIHNwYXduZWQgdG8gd3JpdGUgYSBNSU1FIHR5cGUgcHJlZmVyZW5jZXMgZmlsZS4K
ICAgICBTdHJpbmcgcGx1Z2luUGF0aCA9IGNvbW1hbmRMaW5lWyJjcmVhdGVQbHVnaW5NSU1FVHlw
ZXNQcmVmZXJlbmNlcyJdOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0JKHJldmlzaW9uIDg2
NzczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNzTGF1
bmNoZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxMCArMTQ1LDggQEAgdm9pZCBQcm9j
ZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogICAgIE5TU3RyaW5nICpwcm9jZXNzU2hpbVBh
dGhOU1N0cmluZyA9IG5pbDsKICAgICBpZiAobV9sYXVuY2hPcHRpb25zLnByb2Nlc3NUeXBlID09
IFByb2Nlc3NMYXVuY2hlcjo6UGx1Z2luUHJvY2VzcykKICAgICAgICAgcHJvY2Vzc1NoaW1QYXRo
TlNTdHJpbmcgPSBbW3Byb2Nlc3NBcHBFeGVjdXRhYmxlUGF0aCBzdHJpbmdCeURlbGV0aW5nTGFz
dFBhdGhDb21wb25lbnRdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIlBsdWdpblBy
b2Nlc3NTaGltLmR5bGliIl07Ci0jaWZuZGVmIEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRAogICAg
IGVsc2UgaWYgKG1fbGF1bmNoT3B0aW9ucy5wcm9jZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6
OldlYlByb2Nlc3MpCiAgICAgICAgIHByb2Nlc3NTaGltUGF0aE5TU3RyaW5nID0gW1twcm9jZXNz
QXBwRXhlY3V0YWJsZVBhdGggc3RyaW5nQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XSBzdHJp
bmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJXZWJQcm9jZXNzU2hpbS5keWxpYiJdOwotI2Vu
ZGlmCiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHNoaW0gbGlicmFyeSBmaWxlIGV4
aXN0cyBhbmQgaW5zZXJ0IGl0LgogICAgIGlmIChwcm9jZXNzU2hpbVBhdGhOU1N0cmluZykgewpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gODY3NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2Miw2ICszNjIsOCBAQAogCQk1
MUFDQkI4MjEyN0E4QkFEMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQ0JCODExMjdBOEJBRDAw
RDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHkuaCAqLzsgfTsKIAkJNTFBQ0JCQTAxMjdBOEYy
QzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNCQjlFMTI3QThGMkMwMEQyMDNCOSAvKiBX
ZWJDb250ZXh0TWVudVByb3h5TWFjLmggKi87IH07CiAJCTUxQUNCQkExMTI3QThGMkMwMEQyMDNC
OSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQ0JCOUYxMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRl
eHRNZW51UHJveHlNYWMubW0gKi87IH07CisJCTUxQjE1QTg0MTM4NDNBMzkwMDMyMUFEOCAvKiBF
bnZpcm9ubWVudFV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUIxNUE4MjEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGls
aXRpZXMuY3BwICovOyB9OworCQk1MUIxNUE4NTEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1l
bnRVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQjE1QTgzMTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5oICov
OyB9OwogCQk1MUIzMDA1MDEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0Yu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMzAw
NEUxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCAqLzsgfTsKIAkJ
NTFCMzAwNTExMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYlBhZ2VQcm94eUNGLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjMwMDRGMTI1MjlEMEUwMDBC
NUNBMCAvKiBXZWJQYWdlUHJveHlDRi5jcHAgKi87IH07CiAJCTUxQzQwMzJDMTM2NzQ5RDgwMERD
OTcyRCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDNDAzMkIxMzY3NDlEODAwREM5NzJEIC8qIEF1
dGhlbnRpY2F0aW9uTWFuYWdlci5tYWMubW0gKi87IH07CkBAIC0xMjkwLDYgKzEyOTIsOCBAQAog
CQk1MUFDQkI4MTEyN0E4QkFEMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb250ZXh0TWVudVByb3h5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQUNCQjlFMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJD
b250ZXh0TWVudVByb3h5TWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YkNvbnRleHRNZW51UHJveHlNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFB
Q0JCOUYxMjdBOEYyQzAwRDIwM0I5IC8qIFdlYkNvbnRleHRNZW51UHJveHlNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb250ZXh0TWVudVByb3h5TWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUIxNUE4MjEzODQzQTM5MDAzMjFB
RDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwOyBwYXRoID0gdW5peC9FbnZpcm9u
bWVudFV0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQjE1QTgz
MTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBFbnZpcm9ubWVudFV0aWxpdGllcy5oOyBwYXRoID0gdW5peC9F
bnZpcm9ubWVudFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUIz
MDA0RTEyNTI5RDBFMDAwQjVDQTAgLyogV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOyBw
YXRoID0gY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0YuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUGFnZVByb3h5Q0YuY3BwOyBw
YXRoID0gY2YvV2ViUGFnZVByb3h5Q0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUM0MDMyQjEzNjc0OUQ4MDBEQzk3MkQgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLm1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEF1dGhlbnRpY2F0aW9u
TWFuYWdlci5tYWMubW07IHBhdGggPSBtYWMvQXV0aGVudGljYXRpb25NYW5hZ2VyLm1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0MjYsNiArMjQzMCwxNSBAQAogCQkJbmFt
ZSA9IEtleVZhbHVlU3RvcmFnZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CTUxQjE1QTdEMTM4NDM5QjIwMDMyMUFEOCAvKiB1bml4ICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MUIxNUE4MjEzODQzQTM5MDAzMjFBRDggLyogRW52
aXJvbm1lbnRVdGlsaXRpZXMuY3BwICovLAorCQkJCTUxQjE1QTgzMTM4NDNBMzkwMDMyMUFEOCAv
KiBFbnZpcm9ubWVudFV0aWxpdGllcy5oICovLAorCQkJKTsKKwkJCW5hbWUgPSB1bml4OworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNTFCMzAwNEQxMjUyOUNGNTAwMEI1Q0Ew
IC8qIGNmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTMw
MTcsNiArMzAzMCw3IEBACiAJCQkJMUFBMkU1MUExMkU0QzA1NjAwQkM0OTY2IC8qIGNnICovLAog
CQkJCTFBQjVBMUJBMTBFMDIxRDMwMDQwRjZDRiAvKiBDb3JlSVBDICovLAogCQkJCTFBN0U4MTRF
MTE1MkQyMjQwMDAzNjk1QiAvKiBtYWMgKi8sCisJCQkJNTFCMTVBN0QxMzg0MzlCMjAwMzIxQUQ4
IC8qIHVuaXggKi8sCiAJCQkJNTFBN0YyRjQxMjVCRjhENDAwOEFFQjFEIC8qIExvZ2dpbmcuY3Bw
ICovLAogCQkJCTUxQTdGMkYyMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggKi8sCiAJCQkJ
QzBFM0FBNDUxMjA5RTJCQTAwQTQ5RDAxIC8qIE1vZHVsZS5jcHAgKi8sCkBAIC0zNzk1LDYgKzM4
MDksNyBAQAogCQkJCTFBMTc5NzgwMTM3RUU4MkMwMEY5N0Q0NSAvKiBQbHVnaW5DcmVhdGlvblBh
cmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDEzMDU0MTM4MkVBQzAwMDM1MUVERCAv
KiBTZWNJdGVtUmVxdWVzdERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRDEzMDU2MTM4MkVB
QzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
MUIxNUE4NTEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpAQCAtNDQ2MSw2ICs0NDc2LDcgQEAKIAkJCQk1MUQxMzA1MzEzODJFQUMwMDAzNTFF
REQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRDEzMDU1
MTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxRDEzMDU4MTM4MkYxMDUwMDM1MUVERCAvKiBXZWJQcm9jZXNzUHJveHlNYWMubW0g
aW4gU291cmNlcyAqLywKKwkJCQk1MUIxNUE4NDEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1l
bnRVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQkocmV2aXNpb24gODY3NzMp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzc01haW4u
aCIKIAogI2ltcG9ydCAiQ29tbWFuZExpbmUuaCIKKyNpbXBvcnQgIkVudmlyb25tZW50VXRpbGl0
aWVzLmgiCiAjaW1wb3J0ICJSdW5Mb29wLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCiAjaW1w
b3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIKQEAgLTQyLDYgKzQzLDcgQEAKICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogLy8g
RklYTUU6IFdlIHNob3VsZCBiZSBkb2luZyB0aGlzIGFub3RoZXIgd2F5LgogZXh0ZXJuICJDIiBr
ZXJuX3JldHVybl90IGJvb3RzdHJhcF9sb29rX3VwMihtYWNoX3BvcnRfdCwgY29uc3QgbmFtZV90
LCBtYWNoX3BvcnRfdCosIHBpZF90LCB1aW50NjRfdCk7CkBAIC01OCw2ICs2MCwxMiBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogaW50IFdlYlByb2Nlc3NNYWluKGNvbnN0IENvbW1hbmRMaW5lJiBj
b21tYW5kTGluZSkKIHsKKyNpZmRlZiBCVUlMRElOR19PTl9TTk9XTEVPUEFSRAorICAgIC8vIFJl
bW92ZSB0aGUgV2ViUHJvY2VzcyBzaGltIGZyb20gdGhlIERZTERfSU5TRVJUX0xJQlJBUklFUyBl
bnZpcm9ubWVudCB2YXJpYWJsZSBzbyBhbnkgcHJvY2Vzc2VzIHNwYXduZWQgYnkKKyAgICAvLyB0
aGUgV2ViUHJvY2VzcyBkb24ndCB0cnkgdG8gaW5zZXJ0IHRoZSBzaGltIGFuZCBjcmFzaC4KKyAg
ICBFbnZpcm9ubWVudFV0aWxpdGllczo6c3RyaXBWYWx1ZXNFbmRpbmdXaXRoU3RyaW5nKCJEWUxE
X0lOU0VSVF9MSUJSQVJJRVMiLCAiL1dlYlByb2Nlc3NTaGltLmR5bGliIik7CisjZW5kaWYKKwog
ICAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10g
aW5pdF07CiAKICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBjb21tYW5kTGluZVsic2VydmljZW5h
bWUiXTsKQEAgLTkwLDEwICs5OCw4IEBAIGludCBXZWJQcm9jZXNzTWFpbihjb25zdCBDb21tYW5k
TGluZSYgY28KICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6
aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CiAKLSNpZm5kZWYgQlVJTERJTkdfT05fU05PV19MRU9Q
QVJECiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgc2hpbS4KICAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5pbml0aWFsaXplU2hpbSgpOwotI2VuZGlmCiAKICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rp
b24uCiAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZShzZXJ2ZXJQb3J0LCBSdW5M
b29wOjptYWluKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93977</attachid>
            <date>2011-05-18 13:27:27 -0700</date>
            <delta_ts>2011-05-18 13:35:55 -0700</delta_ts>
            <desc>Patch v5 - Anders wanted a rewrite using c-strings</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>18109</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2Nzg0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDUtMTggIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85NDU3NjMzPiBhbmQgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMDA5CisgICAgICAgIFByb2Nlc3NlcyBz
cGF3bmVkIGJ5IFNub3dMZW9wYXJkJ3MgV2ViUHJvY2VzcyBhdHRlbXB0IHRvIGluc3RhbGwgV2Vi
S2l0MiBzaGltcy4KKworICAgICAgICBJZiB0aGUgV2ViUHJvY2VzcyBvciBQbHVnaW5Qcm9jZXNz
IGZvcmtzLCBpdCBzaG91bGRuJ3QgcGFzcyBXZWJLaXQyIHNoaW1zIGFsb25nIHRvIHRoZSBuZXcg
cHJvY2VzcworICAgICAgICBpbiB0aGUgRFlMRF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50
IHZhcmlhYmxlLgorCisgICAgICAgIEFkZCBFbnZpcm9ubWVudCBVdGlsaXRpZXMgaGVscGVyIHRv
IHN0cmlwIHVud2FudGVkIHZhbHVlcyBmcm9tIGFuIGVudmlyb25tZW50IHZhcmlhYmxlOgorICAg
ICAgICAqIFBsYXRmb3JtL3VuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6RW52aXJvbm1lbnRVdGlsaXRpZXM6OnN0cmlwVmFsdWVzRW5kaW5nV2l0
aFN0cmluZyk6CisgICAgICAgICogUGxhdGZvcm0vdW5peC9FbnZpcm9ubWVudFV0aWxpdGllcy5o
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
KyAgICAgICAgU3RyaXAgUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIgZnJvbSBEWUxEX0lOU0VSVF9M
SUJSQVJJRVM6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01haW5N
YWMubW06CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3NNYWluKToKKworICAgICAgICBT
dHJpcCBXZWJQcm9jZXNzU2hpbS5keWxpYiBmcm9tIERZTERfSU5TRVJUX0xJQlJBUklFUzoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJvY2Vzc01haW4pOgorCisgICAgICAgIFVucHJvdGVjdCBTbm93TGVvcGFyZCBu
b3cgdGhhdCBpdCB3aWxsIGJlaGF2ZSBhbmQgbm90IHNwYXduIHByb2Nlc3NlcyB0cnlpbmcgdG8g
dXNlIFdlYktpdDIgc2hpbXM6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9j
ZXNzTGF1bmNoZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6bGF1
bmNoUHJvY2Vzcyk6CisKIDIwMTEtMDUtMTggIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL3VuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9FbnZpcm9ubWVudFV0aWxp
dGllcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVudmlyb25tZW50VXRpbGl0aWVzLmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworbmFtZXNwYWNlIEVudmlyb25tZW50VXRp
bGl0aWVzIHsKKwordm9pZCBzdHJpcFZhbHVlc0VuZGluZ1dpdGhTdHJpbmcoY29uc3QgU3RyaW5n
JiBlbnZpcm9ubWVudFZhcmlhYmxlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIC8vIEdy
YWIgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgIENT
dHJpbmcgZW52aXJvbm1lbnRWYXJpYWJsZUNTdHJpbmcgPSBlbnZpcm9ubWVudFZhcmlhYmxlLnV0
ZjgoKTsKKyAgICBjb25zdCBjaGFyKiBlbnZpcm9ubWVudFZhcmlhYmxlQnVmZmVyID0gZW52aXJv
bm1lbnRWYXJpYWJsZUNTdHJpbmcuZGF0YSgpOworICAgIGNoYXIqIGVudmlyb25tZW50VmFsdWVC
dWZmZXIgPSBnZXRlbnYoZW52aXJvbm1lbnRWYXJpYWJsZUJ1ZmZlcik7CisgICAgICAgIAorICAg
IGlmICghZW52aXJvbm1lbnRWYWx1ZUJ1ZmZlciB8fCBlbnZpcm9ubWVudFZhbHVlQnVmZmVyWzBd
ID09ICdcMCcpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFNldCB1cCB0aGUgc3RyaW5ncyB3
ZSdsbCBiZSBzZWFyY2hpbmcgZm9yLgorICAgIENTdHJpbmcgdmFsdWVDU3RyaW5nID0gdmFsdWUu
dXRmOCgpOworICAgIGNvbnN0IGNoYXIqIHNlYXJjaFZhbHVlID0gdmFsdWVDU3RyaW5nLmRhdGEo
KTsKKyAgICBzaXplX3Qgc2VhcmNoTGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CisgICAgaWYgKCFz
ZWFyY2hMZW5ndGgpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxjaGFyPiBzZWFyY2hW
YWx1ZVdpdGhDb2xvblZlY3RvcjsKKyAgICBzZWFyY2hWYWx1ZVdpdGhDb2xvblZlY3Rvci5ncm93
KHNlYXJjaExlbmd0aCArIDIpOworICAgIGNoYXIqIHNlYXJjaFZhbHVlV2l0aENvbG9uID0gc2Vh
cmNoVmFsdWVXaXRoQ29sb25WZWN0b3IuZGF0YSgpOworICAgIHNpemVfdCBzZWFyY2hMZW5ndGhX
aXRoQ29sb24gPSBzZWFyY2hMZW5ndGggKyAxOworCisgICAgbWVtY3B5KHNlYXJjaFZhbHVlV2l0
aENvbG9uLCBzZWFyY2hWYWx1ZSwgc2VhcmNoTGVuZ3RoKTsKKyAgICBzZWFyY2hWYWx1ZVdpdGhD
b2xvbltzZWFyY2hMZW5ndGhdID0gJzonOworICAgIHNlYXJjaFZhbHVlV2l0aENvbG9uW3NlYXJj
aExlbmd0aFdpdGhDb2xvbl0gPSAnXDAnOworICAgIAorICAgIC8vIExvb3Agb3ZlciBlbnZpcm9u
bWVudFZhbHVlQnVmZmVyLCByZW1vdmluZyBhbnkgY29tcG9uZW50cyB0aGF0IG1hdGNoIHRoZSBz
ZWFyY2ggdmFsdWUgZW5kaW5nIHdpdGggYSBjb2xvbi4KKyAgICBjaGFyKiBjb21wb25lbnRTdGFy
dCA9IGVudmlyb25tZW50VmFsdWVCdWZmZXI7CisgICAgY2hhciogbWF0Y2ggPSBzdHJzdHIoY29t
cG9uZW50U3RhcnQsIHNlYXJjaFZhbHVlV2l0aENvbG9uKTsKKyAgICBib29sIGZvdW5kQW55TWF0
Y2hlcyA9IG1hdGNoICE9IE5VTEw7CisgICAgd2hpbGUgKG1hdGNoICE9IE5VTEwpIHsKKyAgICAg
ICAgLy8gVXBkYXRlIGNvbXBvbmVudFN0YXJ0IHRvIHBvaW50IHRvIHRoZSBjb2xvbiBpbW1lZGlh
dGVseSBwcmVjZWRpbmcgdGhlIG1hdGNoLgorICAgICAgICBjaGFyKiBuZXh0Q29sb24gPSBzdHJz
dHIoY29tcG9uZW50U3RhcnQsICI6Iik7CisgICAgICAgIHdoaWxlIChuZXh0Q29sb24gJiYgbmV4
dENvbG9uIDwgbWF0Y2gpIHsKKyAgICAgICAgICAgIGNvbXBvbmVudFN0YXJ0ID0gbmV4dENvbG9u
OworICAgICAgICAgICAgbmV4dENvbG9uID0gc3Ryc3RyKGNvbXBvbmVudFN0YXJ0LCAiOiIpOwor
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgIC8vIENvcHkgb3ZlciBldmVyeXRo
aW5nIHJpZ2h0IG9mIHRoZSBtYXRjaCB0byB0aGUgY3VycmVudCBjb21wb25lbnQgc3RhcnQsIGFu
ZCBzZWFyY2ggZnJvbSB0aGVyZSBhZ2Fpbi4KKyAgICAgICAgaWYgKGNvbXBvbmVudFN0YXJ0WzBd
ID09ICc6JykgeworICAgICAgICAgICAgLy8gSWYgY29tcG9uZW50U3RhcnQgcG9pbnRzIHRvIGEg
Y29sb24sIGdvIGFoZWFkIGFuZCBjb3B5IHRoZSBjb2xvbiBvdmVyLgorICAgICAgICAgICAgc3Ry
Y3B5KGNvbXBvbmVudFN0YXJ0LCBtYXRjaCArIHNlYXJjaExlbmd0aCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGNvbXBvbmVudFN0YXJ0IHN0aWxsIHBvaW50
cyB0byB0aGUgYmVnaW5uaW5nIG9mIGVudmlyb25tZW50VmFsdWVCdWZmZXIsIHNvIGRvbid0IGNv
cHkgb3ZlciB0aGUgY29sb24uCisgICAgICAgICAgICAvLyBUaGUgZWRnZSBjYXNlIGlzIGlmIHRo
ZSBjb2xvbiBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZywgc28gIm1hdGNoICsg
c2VhcmNoTGVuZ3RoV2l0aG91dENvbG9uICsgMSIgaXMgdGhlCisgICAgICAgICAgICAvLyBudWxs
IHRlcm1pbmF0b3Igb2YgdGhlIG9yaWdpbmFsIGlucHV0LCBpbiB3aGljaCBjYXNlIHRoaXMgaXMg
c3RpbGwgc2FmZS4KKyAgICAgICAgICAgIHN0cmNweShjb21wb25lbnRTdGFydCwgbWF0Y2ggKyBz
ZWFyY2hMZW5ndGhXaXRoQ29sb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtYXRj
aCA9IHN0cnN0cihjb21wb25lbnRTdGFydCwgc2VhcmNoVmFsdWVXaXRoQ29sb24pOworICAgIH0K
KyAgICAKKyAgICAvLyBTZWFyY2ggZm9yIHRoZSB2YWx1ZSB3aXRob3V0IGEgdHJhaWxpbmcgY29s
b24sIHNlZWluZyBpZiB0aGUgb3JpZ2luYWwgaW5wdXQgZW5kcyB3aXRoIGl0LgorICAgIG1hdGNo
ID0gc3Ryc3RyKGNvbXBvbmVudFN0YXJ0LCBzZWFyY2hWYWx1ZSk7CisgICAgd2hpbGUgKG1hdGNo
ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKG1hdGNoW3NlYXJjaExlbmd0aCArIDFdID09ICdcMCcp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbWF0Y2ggPSBzdHJzdHIobWF0Y2ggKyAxLCBz
ZWFyY2hWYWx1ZSk7CisgICAgfQorICAgIAorICAgIC8vIFNpbmNlIHRoZSBvcmlnaW5hbCBpbnB1
dCBlbmRzIHdpdGggdGhlIHNlYXJjaCwgc3RyaXAgb3V0IHRoZSBsYXN0IGNvbXBvbmVudC4KKyAg
ICBpZiAobWF0Y2gpIHsKKyAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudFN0YXJ0IHRvIHBvaW50
IHRvIHRoZSBjb2xvbiBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhlIG1hdGNoLgorICAgICAgICBj
aGFyKiBuZXh0Q29sb24gPSBzdHJzdHIoY29tcG9uZW50U3RhcnQsICI6Iik7CisgICAgICAgIHdo
aWxlIChuZXh0Q29sb24gJiYgbmV4dENvbG9uIDwgbWF0Y2gpIHsKKyAgICAgICAgICAgIGNvbXBv
bmVudFN0YXJ0ID0gbmV4dENvbG9uOworICAgICAgICAgICAgbmV4dENvbG9uID0gc3Ryc3RyKGNv
bXBvbmVudFN0YXJ0LCAiOiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXaGV0
aGVyIGNvbXBvbmVudFN0YXJ0IHBvaW50cyB0byB0aGUgb3JpZ2luYWwgc3RyaW5nIG9yIHRoZSBs
YXN0IGNvbG9uLCBwdXR0aW5nIHRoZSBudWxsIHRlcm1pbmF0b3IgdGhlcmUgd2lsbCBnZXQgdXMg
dGhlIGRlc2lyZWQgcmVzdWx0LgorICAgICAgICBjb21wb25lbnRTdGFydFswXSA9ICdcMCc7CisK
KyAgICAgICAgZm91bmRBbnlNYXRjaGVzID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBm
b3VuZCBubyBtYXRjaGVzLCBkb24ndCBjaGFuZ2UgYW55dGhpbmcuCisgICAgaWYgKCFmb3VuZEFu
eU1hdGNoZXMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHdlIGhhdmUgbm90aGluZyBs
ZWZ0LCBqdXN0IHVuc2V0IHRoZSB2YXJpYWJsZQorICAgIGlmIChlbnZpcm9ubWVudFZhbHVlQnVm
ZmVyWzBdID09ICdcMCcpIHsKKyAgICAgICAgdW5zZXRlbnYoZW52aXJvbm1lbnRWYXJpYWJsZUJ1
ZmZlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2V0ZW52KGVudmlyb25t
ZW50VmFyaWFibGVCdWZmZXIsIGVudmlyb25tZW50VmFsdWVCdWZmZXIsIDEpOworfQorCit9IC8v
IG5hbWVzcGFjZSBFbnZpcm9ubWVudFV0aWxpdGllcworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L0Vudmlyb25tZW50
VXRpbGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4
L0Vudmlyb25tZW50VXRpbGl0aWVzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEVudmlyb25tZW50VXRpbGl0aWVzX2gKKyNkZWZpbmUgRW52aXJv
bm1lbnRVdGlsaXRpZXNfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCituYW1lc3BhY2UgRW52aXJvbm1lbnRVdGlsaXRpZXMgeworCit2
b2lkIHN0cmlwVmFsdWVzRW5kaW5nV2l0aFN0cmluZyhjb25zdCBTdHJpbmcmIGVudmlyb25tZW50
VmFyaWFibGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworCit9IC8vIG5hbWVzcGFjZSBFbnZpcm9u
bWVudFV0aWxpdGllcworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vICNkZWZp
bmUgRW52aXJvbm1lbnRVdGlsaXRpZXNfaAorCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Q
cm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFpbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFpbk1hYy5tbQkocmV2aXNp
b24gODY3NzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9j
ZXNzTWFpbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShQTFVHSU5fUFJPQ0VTUykKIAogI2ltcG9ydCAiQ29tbWFuZExpbmUuaCIKKyNpbXBvcnQgIkVu
dmlyb25tZW50VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJOZXRzY2FwZVBsdWdpbk1vZHVsZS5oIgog
I2ltcG9ydCAiUGx1Z2luUHJvY2Vzcy5oIgogI2ltcG9ydCAiUnVuTG9vcC5oIgpAQCAtNTEsOSAr
NTIsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogaW50IFBsdWdpblByb2Nlc3NNYWluKGNvbnN0
IENvbW1hbmRMaW5lJiBjb21tYW5kTGluZSkKIHsKLSAgICAvLyBVbnNldCBEWUxEX0lOU0VSVF9M
SUJSQVJJRVMuIFdlIGRvbid0IHdhbnQgb3VyIHBsdWctaW4gcHJvY2VzcyBzaGltIHRvIGJlIGxv
YWRlZCAKLSAgICAvLyBieSBhbnkgY2hpbGQgcHJvY2Vzc2VzIHRoYXQgdGhlIHBsdWctaW4gbWF5
IGxhdW5jaC4KLSAgICB1bnNldGVudigiRFlMRF9JTlNFUlRfTElCUkFSSUVTIik7CisgICAgLy8g
UmVtb3ZlIHRoZSBQbHVnaW5Qcm9jZXNzIHNoaW0gZnJvbSB0aGUgRFlMRF9JTlNFUlRfTElCUkFS
SUVTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGFueSBwcm9jZXNzZXMgCisgICAgLy8gc3Bhd25l
ZCBieSB0aGUgUGx1Z2luUHJvY2VzcyBkb24ndCB0cnkgdG8gaW5zZXJ0IHRoZSBzaGltIGFuZCBj
cmFzaC4KKyAgICBFbnZpcm9ubWVudFV0aWxpdGllczo6c3RyaXBWYWx1ZXNFbmRpbmdXaXRoU3Ry
aW5nKCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCAiL1BsdWdpblByb2Nlc3NTaGltLmR5bGliIik7
CiAKICAgICAvLyBDaGVjayBpZiB3ZSdyZSBiZWluZyBzcGF3bmVkIHRvIHdyaXRlIGEgTUlNRSB0
eXBlIHByZWZlcmVuY2VzIGZpbGUuCiAgICAgU3RyaW5nIHBsdWdpblBhdGggPSBjb21tYW5kTGlu
ZVsiY3JlYXRlUGx1Z2luTUlNRVR5cGVzUHJlZmVyZW5jZXMiXTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5j
aGVyTWFjLm1tCShyZXZpc2lvbiA4Njc3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUs
MTAgKzE0NSw4IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKICAgICBO
U1N0cmluZyAqcHJvY2Vzc1NoaW1QYXRoTlNTdHJpbmcgPSBuaWw7CiAgICAgaWYgKG1fbGF1bmNo
T3B0aW9ucy5wcm9jZXNzVHlwZSA9PSBQcm9jZXNzTGF1bmNoZXI6OlBsdWdpblByb2Nlc3MpCiAg
ICAgICAgIHByb2Nlc3NTaGltUGF0aE5TU3RyaW5nID0gW1twcm9jZXNzQXBwRXhlY3V0YWJsZVBh
dGggc3RyaW5nQnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XSBzdHJpbmdCeUFwcGVuZGluZ1Bh
dGhDb21wb25lbnQ6QCJQbHVnaW5Qcm9jZXNzU2hpbS5keWxpYiJdOwotI2lmbmRlZiBCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQKICAgICBlbHNlIGlmIChtX2xhdW5jaE9wdGlvbnMucHJvY2Vzc1R5
cGUgPT0gUHJvY2Vzc0xhdW5jaGVyOjpXZWJQcm9jZXNzKQogICAgICAgICBwcm9jZXNzU2hpbVBh
dGhOU1N0cmluZyA9IFtbcHJvY2Vzc0FwcEV4ZWN1dGFibGVQYXRoIHN0cmluZ0J5RGVsZXRpbmdM
YXN0UGF0aENvbXBvbmVudF0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiV2ViUHJv
Y2Vzc1NoaW0uZHlsaWIiXTsKLSNlbmRpZgogICAgIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSBzaGltIGxpYnJhcnkgZmlsZSBleGlzdHMgYW5kIGluc2VydCBpdC4KICAgICBpZiAocHJvY2Vz
c1NoaW1QYXRoTlNTdHJpbmcpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg2NzczKQorKysgU291cmNlL1dl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjIsNiArMzYyLDggQEAKIAkJNTFBQ0JCODIxMjdBOEJBRDAwRDIwM0I5IC8qIFdlYkNvbnRl
eHRNZW51UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQUNCQjgxMTI3QThCQUQwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5LmggKi87
IH07CiAJCTUxQUNCQkEwMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFDQkI5
RTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oICovOyB9OwogCQk1
MUFDQkJBMTEyN0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUNCQjlGMTI3QThG
MkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLm1tICovOyB9OworCQk1MUIxNUE4
NDEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMTVBODIxMzg0M0EzOTAwMzIx
QUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCAqLzsgfTsKKwkJNTFCMTVBODUxMzg0M0Ez
OTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIxNUE4MzEzODQzQTM5MDAzMjFBRDggLyogRW52
aXJvbm1lbnRVdGlsaXRpZXMuaCAqLzsgfTsKIAkJNTFCMzAwNTAxMjUyOUQwRTAwMEI1Q0EwIC8q
IFdlYkJhY2tGb3J3YXJkTGlzdENGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxQjMwMDRFMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJCYWNrRm9yd2Fy
ZExpc3RDRi5jcHAgKi87IH07CiAJCTUxQjMwMDUxMTI1MjlEMEUwMDBCNUNBMCAvKiBXZWJQYWdl
UHJveHlDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MUIzMDA0RjEyNTI5RDBFMDAwQjVDQTAgLyogV2ViUGFnZVByb3h5Q0YuY3BwICovOyB9Owog
CQk1MUM0MDMyQzEzNjc0OUQ4MDBEQzk3MkQgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLm1hYy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzQwMzJC
MTM2NzQ5RDgwMERDOTcyRCAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tICovOyB9OwpA
QCAtMTI5MCw2ICsxMjkyLDggQEAKIAkJNTFBQ0JCODExMjdBOEJBRDAwRDIwM0I5IC8qIFdlYkNv
bnRleHRNZW51UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29u
dGV4dE1lbnVQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFDQkI5RTEy
N0E4RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb250ZXh0TWVudVByb3h5TWFjLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxQUNCQjlGMTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0
TWVudVByb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTFCMTVBODIxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVudmlyb25tZW50VXRpbGl0aWVzLmNw
cDsgcGF0aCA9IHVuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MUIxNUE4MzEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGls
aXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRW52aXJvbm1lbnRVdGls
aXRpZXMuaDsgcGF0aCA9IHVuaXgvRW52aXJvbm1lbnRVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFCMzAwNEUxMjUyOUQwRTAwMEI1Q0EwIC8qIFdlYkJhY2tGb3J3
YXJkTGlzdENGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkJh
Y2tGb3J3YXJkTGlzdENGLmNwcDsgcGF0aCA9IGNmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFCMzAwNEYxMjUyOUQwRTAwMEI1Q0EwIC8q
IFdlYlBhZ2VQcm94eUNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFdlYlBhZ2VQcm94eUNGLmNwcDsgcGF0aCA9IGNmL1dlYlBhZ2VQcm94eUNGLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDNDAzMkIxMzY3NDlEODAwREM5NzJEIC8qIEF1dGhl
bnRpY2F0aW9uTWFuYWdlci5tYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBBdXRoZW50aWNhdGlvbk1hbmFnZXIubWFjLm1tOyBwYXRoID0gbWFjL0F1dGhlbnRp
Y2F0aW9uTWFuYWdlci5tYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDI2
LDYgKzI0MzAsMTUgQEAKIAkJCW5hbWUgPSBLZXlWYWx1ZVN0b3JhZ2U7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OworCQk1MUIxNUE3RDEzODQzOUIyMDAzMjFBRDggLyogdW5peCAq
LyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNTFCMTVBODIx
Mzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCAqLywKKwkJCQk1MUIx
NUE4MzEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1lbnRVdGlsaXRpZXMuaCAqLywKKwkJCSk7
CisJCQluYW1lID0gdW5peDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTUx
QjMwMDREMTI1MjlDRjUwMDBCNUNBMCAvKiBjZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCkBAIC0zMDE3LDYgKzMwMzAsNyBAQAogCQkJCTFBQTJFNTFBMTJFNEMw
NTYwMEJDNDk2NiAvKiBjZyAqLywKIAkJCQkxQUI1QTFCQTEwRTAyMUQzMDA0MEY2Q0YgLyogQ29y
ZUlQQyAqLywKIAkJCQkxQTdFODE0RTExNTJEMjI0MDAwMzY5NUIgLyogbWFjICovLAorCQkJCTUx
QjE1QTdEMTM4NDM5QjIwMDMyMUFEOCAvKiB1bml4ICovLAogCQkJCTUxQTdGMkY0MTI1QkY4RDQw
MDhBRUIxRCAvKiBMb2dnaW5nLmNwcCAqLywKIAkJCQk1MUE3RjJGMjEyNUJGODIwMDA4QUVCMUQg
LyogTG9nZ2luZy5oICovLAogCQkJCUMwRTNBQTQ1MTIwOUUyQkEwMEE0OUQwMSAvKiBNb2R1bGUu
Y3BwICovLApAQCAtMzc5NSw2ICszODA5LDcgQEAKIAkJCQkxQTE3OTc4MDEzN0VFODJDMDBGOTdE
NDUgLyogUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUQx
MzA1NDEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUQxMzA1NjEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTFCMTVBODUxMzg0M0EzOTAwMzIxQUQ4IC8qIEVudmlyb25t
ZW50VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ0NjEsNiArNDQ3Niw3IEBACiAJCQkJ
NTFEMTMwNTMxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUQxMzA1NTEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNl
RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUQxMzA1ODEzODJGMTA1MDAzNTFFREQgLyog
V2ViUHJvY2Vzc1Byb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTFCMTVBODQxMzg0M0Ez
OTAwMzIxQUQ4IC8qIEVudmlyb25tZW50VXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01haW5NYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01haW5N
YWMubW0JKHJldmlzaW9uIDg2NzczKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMv
V2ViUHJvY2Vzc01haW5NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bXBvcnQgIldlYlByb2Nlc3NNYWluLmgiCiAKICNpbXBvcnQgIkNvbW1hbmRMaW5lLmgiCisjaW1w
b3J0ICJFbnZpcm9ubWVudFV0aWxpdGllcy5oIgogI2ltcG9ydCAiUnVuTG9vcC5oIgogI2ltcG9y
dCAiV2ViUHJvY2Vzcy5oIgogI2ltcG9ydCAiV2ViU3lzdGVtSW50ZXJmYWNlLmgiCkBAIC00Miw2
ICs0Myw3IEBACiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvVGhyZWFk
aW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgZG9pbmcgdGhpcyBhbm90
aGVyIHdheS4KIGV4dGVybiAiQyIga2Vybl9yZXR1cm5fdCBib290c3RyYXBfbG9va191cDIobWFj
aF9wb3J0X3QsIGNvbnN0IG5hbWVfdCwgbWFjaF9wb3J0X3QqLCBwaWRfdCwgdWludDY0X3QpOwpA
QCAtNTgsNiArNjAsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGludCBXZWJQcm9jZXNzTWFp
bihjb25zdCBDb21tYW5kTGluZSYgY29tbWFuZExpbmUpCiB7CisvLyNpZmRlZiBCVUlMRElOR19P
Tl9TTk9XTEVPUEFSRAorICAgIC8vIFJlbW92ZSB0aGUgV2ViUHJvY2VzcyBzaGltIGZyb20gdGhl
IERZTERfSU5TRVJUX0xJQlJBUklFUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBhbnkgcHJvY2Vz
c2VzIHNwYXduZWQgYnkKKyAgICAvLyB0aGUgV2ViUHJvY2VzcyBkb24ndCB0cnkgdG8gaW5zZXJ0
IHRoZSBzaGltIGFuZCBjcmFzaC4KKyAgICBFbnZpcm9ubWVudFV0aWxpdGllczo6c3RyaXBWYWx1
ZXNFbmRpbmdXaXRoU3RyaW5nKCJEWUxEX0lOU0VSVF9MSUJSQVJJRVMiLCAiL1dlYlByb2Nlc3NT
aGltLmR5bGliIik7CisvLyNlbmRpZgorCiAgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBb
W05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKIAogICAgIFN0cmluZyBzZXJ2aWNlTmFt
ZSA9IGNvbW1hbmRMaW5lWyJzZXJ2aWNlbmFtZSJdOwpAQCAtOTAsMTAgKzk4LDggQEAgaW50IFdl
YlByb2Nlc3NNYWluKGNvbnN0IENvbW1hbmRMaW5lJiBjbwogICAgIFdURjo6aW5pdGlhbGl6ZU1h
aW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKIAotI2lm
bmRlZiBCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQKICAgICAvLyBJbml0aWFsaXplIHRoZSBzaGlt
LgogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemVTaGltKCk7Ci0jZW5kaWYKIAog
ICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbi4KICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5p
bml0aWFsaXplKHNlcnZlclBvcnQsIFJ1bkxvb3A6Om1haW4oKSk7Cg==
</data>
<flag name="review"
          id="87218"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>