<?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>15555</bug_id>
          
          <creation_ts>2007-10-18 02:43:22 -0700</creation_ts>
          <short_desc>XMLHttpRequest does not support charset &quot;x-user-defined&quot;, which can facilitate loading of binary data</short_desc>
          <delta_ts>2007-10-27 01:52:39 -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>WebCore Misc.</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://tlrobinson.net/misc/webkit/binaryXHR.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tom Robinson">tom</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>58803</commentid>
    <comment_count>0</comment_count>
    <who name="Tom Robinson">tom</who>
    <bug_when>2007-10-18 02:43:22 -0700</bug_when>
    <thetext>Firefox&apos;s XMLHttpRequest can load binary data by overriding the MIME type to use &quot;x-user-defined&quot;:

req.overrideMimeType(&quot;text/plain; charset=x-user-defined&quot;);

(http://mgran.blogspot.com/2006/08/downloading-binary-streams-with.html)

WebKit&apos;s XMLHttpRequest does not support this charset, so it defaults to another, which results in some of the binary values greater than 127 being mapped to incorrect values (see the red boxes in the test case).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58804</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-10-18 02:51:30 -0700</bug_when>
    <thetext>I&apos;m wondering if this encoding is of any use outside XHR - most likely, Firefox supports it for all page loads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59446</commentid>
    <comment_count>2</comment_count>
      <attachid>16860</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-10-25 11:24:46 -0700</bug_when>
    <thetext>Created attachment 16860
proposed fix

This matches Firefox implementation, since I couldn&apos;t find MSIE one documented anywhere (this charset is not supposed to be used on the Web, according to MSDN).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59452</commentid>
    <comment_count>3</comment_count>
    <who name="Tom Robinson">tom</who>
    <bug_when>2007-10-25 11:42:41 -0700</bug_when>
    <thetext>But should it actually match Firefox&apos;s implementation? I&apos;m wondering why Firefox returns the correct value OR&apos;d with 0xF700 for values &gt;= 0x80? Is there a good reason for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59453</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-10-25 11:56:09 -0700</bug_when>
    <thetext>So, what does IE do? Is its implementation of x-user-defined different in some way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59501</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-10-25 22:41:58 -0700</bug_when>
    <thetext>In IE, responseText is trimmed at null bytes, so it apparently isn&apos;t suitable for binary data regardless of its encoding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59517</commentid>
    <comment_count>6</comment_count>
      <attachid>16860</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-26 00:15:01 -0700</bug_when>
    <thetext>Comment on attachment 16860
proposed fix

+        unsigned char c = bytes[i];
+        characters[i] = (c &lt; 0x80) ? c : 0xf700 + c;

If you used &quot;signed char&quot; you wouldn&apos;t need to do as much math:

        signed char signedByte = bytes[i];
        characters[i] = signedByte &amp; 0xF7FF;

+        UChar32 highBits = c &amp; 0xffffff80;
+        if (!highBits || highBits == 0xf780)
+            bytes[resultLength++] = static_cast&lt;char&gt;(c);

And I&apos;d just write this as:

    signed char signedByte = c;
    if (signedByte &amp; 0xF7FF == c)
        bytes[resultLength++] = signedByte;

r=me with or without my suggested optimization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59608</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-10-27 01:52:39 -0700</bug_when>
    <thetext>Committed revision 27145 with suggested optimizations.

I guess it remains to be seen how (and whether) this change affects HTML documents...</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16860</attachid>
            <date>2007-10-25 11:24:46 -0700</date>
            <delta_ts>2007-10-26 00:15:01 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>15555r1_patch.txt</filename>
            <type>text/plain</type>
            <size>18041</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNzA0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDctMTAtMjUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTU1CisgICAgICAgIFhN
TEh0dHBSZXF1ZXN0IGRvZXMgbm90IHN1cHBvcnQgY2hhcnNldCAieC11c2VyLWRlZmluZWQiLCB3
aGljaCBjYW4KKyAgICAgICAgZmFjaWxpdGF0ZSBsb2FkaW5nIG9mIGJpbmFyeSBkYXRhCisKKyAg
ICAgICAgVGVzdDogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9iaW5hcnkteC11c2VyLWRlZmlu
ZWQuaHRtbAorCisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJFbmNv
ZGluZ05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6Om5ld1N0cmVhbWluZ1RleHREZWNvZGVyVXNl
ckRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENvZGVjVXNlckRlZmluZWQ6OnJlZ2lz
dGVyQ29kZWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY1VzZXJEZWZpbmVkOjpkZWNv
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6ZW5jb2RlQ29tcGxleFVzZXJEZWZpbmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDb2RlY1VzZXJEZWZpbmVkOjplbmNvZGUpOgorICAgICAgICAqIHBs
YXRmb3JtL1RleHRDb2RlY1VzZXJEZWZpbmVkLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L1RleHRFbmNvZGluZ1JlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkQmFzZVRl
eHRDb2RlY01hcHMpOgorCiAyMDA3LTEwLTI1ICBKb24gSG9uZXljdXR0ICA8amhvbmV5Y3V0dEBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUuCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDI3
MDMzKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtNjcxLDYgKzY3
MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL1N0cmluZ0ltcGwuY3BwIFwKICAgICBw
bGF0Zm9ybS9UZXh0Q29kZWMuY3BwIFwKICAgICBwbGF0Zm9ybS9UZXh0Q29kZWNMYXRpbjEuY3Bw
IFwKKyAgICBwbGF0Zm9ybS9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAgXAogICAgIHBsYXRmb3Jt
L1RleHRDb2RlY1VURjE2LmNwcCBcCiAgICAgcGxhdGZvcm0vVGV4dERlY29kZXIuY3BwIFwKICAg
ICBwbGF0Zm9ybS9UZXh0RW5jb2RpbmcuY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMjcwMzMpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDY3LDYgKzM0NjcsMTQgQEAKIAkJ
CQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cVGV4dENvZGVjVXNlckRlZmluZWQu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXFRleHRDb2RlY1VURjE2LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjcw
MzMpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzU5NCw2ICszNTk0LDggQEAKIAkJRTE0ODQyRkYwQTY3NEEzMTAwN0U0RDM5
IC8qIFRleHRDb2RlY0lDVS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTQ4NDJGRTBBNjc0QTMxMDA3RTREMzkgLyogVGV4dENvZGVjSUNVLmNwcCAq
LzsgfTsKIAkJRTE0ODQzMkYwQTY3NEZDMjAwN0U0RDM5IC8qIFRleHRDb2RlY01hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0ODQzMkUwQTY3NEZD
MjAwN0U0RDM5IC8qIFRleHRDb2RlY01hYy5oICovOyB9OwogCQlFMTQ4NDNENjBBNjc1NEE2MDA3
RTREMzkgLyogVGV4dENvZGVjTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxNDg0MzkxMEE2NzUyQkYwMDdFNEQzOSAvKiBUZXh0Q29kZWNNYWMu
Y3BwICovOyB9OworCQlFMTU4NjM5OTBDRDEwQjczMDA2NkUyQzkgLyogVGV4dENvZGVjVXNlckRl
ZmluZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
NTg2Mzk3MENEMTBCNzMwMDY2RTJDOSAvKiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5oICovOyB9Owor
CQlFMTU4NjM5QTBDRDEwQjczMDA2NkUyQzkgLyogVGV4dENvZGVjVXNlckRlZmluZWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1ODYzOTgwQ0Qx
MEI3MzAwNjZFMkM5IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVkLmNwcCAqLzsgfTsKIAkJRTFEOEUz
MTYwQjI5RTM5QzAwRjRCQUY2IC8qIEhUVFBQYXJzZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUQ4RTMxNTBCMjlFMzlDMDBGNEJBRjYgLyogSFRU
UFBhcnNlcnMuaCAqLzsgfTsKIAkJRTFEOEUzMUEwQjI5RTNCNjAwRjRCQUY2IC8qIEhUVFBQYXJz
ZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
RDhFMzE5MEIyOUUzQjYwMEY0QkFGNiAvKiBIVFRQUGFyc2Vycy5jcHAgKi87IH07CiAJCUUxRTZF
RUE0MEI2MjhEQTgwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTZFRUEzMEI2MjhEQTgwMDVG
MkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTc1MDAsNiArNzUwMiw4
IEBACiAJCUUxNDg0MkZFMEE2NzRBMzEwMDdFNEQzOSAvKiBUZXh0Q29kZWNJQ1UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENvZGVjSUNVLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0ODQzMkUwQTY3NEZDMjAwN0U0RDM5IC8qIFRleHRD
b2RlY01hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1l
ID0gVGV4dENvZGVjTWFjLmg7IHBhdGggPSBtYWMvVGV4dENvZGVjTWFjLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUxNDg0MzkxMEE2NzUyQkYwMDdFNEQzOSAvKiBUZXh0Q29kZWNN
YWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgbmFt
ZSA9IFRleHRDb2RlY01hYy5jcHA7IHBhdGggPSBtYWMvVGV4dENvZGVjTWFjLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE1ODYzOTcwQ0QxMEI3MzAwNjZFMkM5IC8qIFRleHRD
b2RlY1VzZXJEZWZpbmVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRD
b2RlY1VzZXJEZWZpbmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxNTg2Mzk4
MENEMTBCNzMwMDY2RTJDOSAvKiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRDhFMzE1MEIyOUUzOUMwMEY0QkFGNiAvKiBIVFRQ
UGFyc2Vycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVFRQUGFyc2Vycy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUQ4RTMxOTBCMjlFM0I2MDBGNEJBRjYg
LyogSFRUUFBhcnNlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SFRUUFBhcnNlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUU2RUVBMzBC
NjI4REE4MDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMjMwLDYgKzExMjM0LDggQEAKIAkJCQk5MzJDQTdDMDBB
QUEyMEMxMDBBRDFGQUQgLyogVGV4dENvZGVjTGF0aW4xLmggKi8sCiAJCQkJRTE0ODQzOTEwQTY3
NTJCRjAwN0U0RDM5IC8qIFRleHRDb2RlY01hYy5jcHAgKi8sCiAJCQkJRTE0ODQzMkUwQTY3NEZD
MjAwN0U0RDM5IC8qIFRleHRDb2RlY01hYy5oICovLAorCQkJCUUxNTg2Mzk3MENEMTBCNzMwMDY2
RTJDOSAvKiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5oICovLAorCQkJCUUxNTg2Mzk4MENEMTBCNzMw
MDY2RTJDOSAvKiBUZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAgKi8sCiAJCQkJOTMyQ0E4NDcwQUFB
NjZDQjAwQUQxRkFEIC8qIFRleHRDb2RlY1VURjE2LmNwcCAqLywKIAkJCQk5MzJDQTgzQTBBQUE2
NjdGMDBBRDFGQUQgLyogVGV4dENvZGVjVVRGMTYuaCAqLywKIAkJCQk5MzJDQTc2NDBBQUExREY1
MDBBRDFGQUQgLyogVGV4dERlY29kZXIuY3BwICovLApAQCAtMTM1NzUsNiArMTM1ODEsNyBAQAog
CQkJCUE4MEYzQTc1MENDREEzMTgwMDJERDk5MCAvKiBET01TVkdQYXRoU2VnQ3VydmV0b1F1YWRy
YXRpY0Ficy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRjNBN0QwQ0NEQTMyNDAwMkREOTkwIC8q
IERPTVNWR0FuZ2xlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBGNDM1MjBDQ0RFNjA0MDAyREQ5
OTAgLyogRE9NU1ZHQW5pbWF0ZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTE1ODYzOTkwQ0QxMEI3MzAwNjZFMkM5IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVkLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTE1MTA3LDYgKzE1MTE0LDcgQEAKIAkJCQlBODNCNzk1NjBDQ0IwMTI1MDAw
QjA4MjUgLyogRE9NU1ZHRm9udEZhY2VFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgw
RjM5M0UwQ0NEOTcxQTAwMkREOTkwIC8qIEpTU1ZHRGVmaW5pdGlvblNyY0VsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTgwRjM5NTkwQ0NEOTc5NjAwMkREOTkwIC8qIERPTVNWR0RlZmlu
aXRpb25TcmNFbGVtZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTE1ODYzOUEwQ0QxMEI3MzAw
NjZFMkM5IC8qIFRleHRDb2RlY1VzZXJEZWZpbmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9UZXh0Q29kZWNVc2VyRGVmaW5lZC5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUZXh0Q29kZWNVc2VyRGVmaW5lZC5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK3VzaW5nIHN0ZDo6YXV0b19wdHI7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0ZXJFbmNv
ZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCit7CisgICAgcmVnaXN0
cmFyKCJ4LXVzZXItZGVmaW5lZCIsICJ4LXVzZXItZGVmaW5lZCIpOworfQorCitzdGF0aWMgYXV0
b19wdHI8VGV4dENvZGVjPiBuZXdTdHJlYW1pbmdUZXh0RGVjb2RlclVzZXJEZWZpbmVkKGNvbnN0
IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiBhdXRvX3B0cjxUZXh0
Q29kZWM+KG5ldyBUZXh0Q29kZWNVc2VyRGVmaW5lZCk7Cit9CisKK3ZvaWQgVGV4dENvZGVjVXNl
ckRlZmluZWQ6OnJlZ2lzdGVyQ29kZWNzKFRleHRDb2RlY1JlZ2lzdHJhciByZWdpc3RyYXIpCit7
CisgICAgcmVnaXN0cmFyKCJ4LXVzZXItZGVmaW5lZCIsIG5ld1N0cmVhbWluZ1RleHREZWNvZGVy
VXNlckRlZmluZWQsIDApOworfQorCitTdHJpbmcgVGV4dENvZGVjVXNlckRlZmluZWQ6OmRlY29k
ZShjb25zdCBjaGFyKiBieXRlcywgc2l6ZV90IGxlbmd0aCwgYm9vbCkKK3sKKyAgICBVQ2hhciog
Y2hhcmFjdGVyczsKKyAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpuZXdVbmluaXRpYWxpemVk
KGxlbmd0aCwgY2hhcmFjdGVycyk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IGJ5dGVzW2ldOworICAgICAgICBj
aGFyYWN0ZXJzW2ldID0gKGMgPCAweDgwKSA/IGMgOiAweGY3MDAgKyBjOworICAgIH0KKworICAg
IHJldHVybiBzdHJpbmc7Cit9CisKK3N0YXRpYyBDU3RyaW5nIGVuY29kZUNvbXBsZXhVc2VyRGVm
aW5lZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgYm9vbCBhbGxvd0Vu
dGl0aWVzKQoreworICAgIFZlY3RvcjxjaGFyPiByZXN1bHQobGVuZ3RoKTsKKyAgICBjaGFyKiBi
eXRlcyA9IHJlc3VsdC5kYXRhKCk7CisKKyAgICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gMDsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKSB7CisgICAgICAgIFVDaGFyMzIgYzsK
KyAgICAgICAgVTE2X05FWFQoY2hhcmFjdGVycywgaSwgbGVuZ3RoLCBjKTsKKyAgICAgICAgVUNo
YXIzMiBoaWdoQml0cyA9IGMgJiAweGZmZmZmZjgwOworICAgICAgICBpZiAoIWhpZ2hCaXRzIHx8
IGhpZ2hCaXRzID09IDB4Zjc4MCkKKyAgICAgICAgICAgIGJ5dGVzW3Jlc3VsdExlbmd0aCsrXSA9
IHN0YXRpY19jYXN0PGNoYXI+KGMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5v
IHdheSB0byBlbmNvZGUgdGhpcyBjaGFyYWN0ZXIgd2l0aCB4LXVzZXItZGVmaW5lZC4KKyAgICAg
ICAgICAgIGlmIChhbGxvd0VudGl0aWVzKSB7CisgICAgICAgICAgICAgICAgY2hhciBlbnRpdHlC
dWZmZXJbMTZdOworICAgICAgICAgICAgICAgIHNwcmludGYoZW50aXR5QnVmZmVyLCAiJiMldTsi
LCBjKTsKKyAgICAgICAgICAgICAgICBzaXplX3QgZW50aXR5TGVuZ3RoID0gc3RybGVuKGVudGl0
eUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZShyZXN1bHRMZW5ndGggKyBl
bnRpdHlMZW5ndGggKyBsZW5ndGggLSBpKTsKKyAgICAgICAgICAgICAgICBieXRlcyA9IHJlc3Vs
dC5kYXRhKCk7CisgICAgICAgICAgICAgICAgbWVtY3B5KGJ5dGVzICsgcmVzdWx0TGVuZ3RoLCBl
bnRpdHlCdWZmZXIsIGVudGl0eUxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVzdWx0TGVuZ3Ro
ICs9IGVudGl0eUxlbmd0aDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGJ5
dGVzW3Jlc3VsdExlbmd0aCsrXSA9ICc/JzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBDU3RyaW5nKGJ5dGVzLCByZXN1bHRMZW5ndGgpOworfQorCitDU3RyaW5nIFRleHRDb2RlY1Vz
ZXJEZWZpbmVkOjplbmNvZGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgs
IGJvb2wgYWxsb3dFbnRpdGllcykKK3sKKyAgICBjaGFyKiBieXRlczsKKyAgICBDU3RyaW5nIHN0
cmluZyA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobGVuZ3RoLCBieXRlcyk7CisKKyAgICAv
LyBDb252ZXJ0IHRoZSBzdHJpbmcgYSBmYXN0IHdheSBhbmQgc2ltdWx0YW5lb3VzbHkgZG8gYW4g
ZWZmaWNpZW50IGNoZWNrIHRvIHNlZSBpZiBpdCdzIGFsbCBBU0NJSS4KKyAgICBVQ2hhciBvcmVk
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
IFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICBieXRlc1tpXSA9IGM7CisgICAgICAg
IG9yZWQgfD0gYzsKKyAgICB9CisKKyAgICBpZiAoIShvcmVkICYgMHhGRjgwKSkKKyAgICAgICAg
cmV0dXJuIHN0cmluZzsKKworICAgIC8vIElmIGl0IHdhc24ndCBhbGwgQVNDSUksIGNhbGwgdGhl
IGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBtb3JlLWNvbXBsZXggY2FzZXMuCisgICAgcmV0dXJuIGVu
Y29kZUNvbXBsZXhVc2VyRGVmaW5lZChjaGFyYWN0ZXJzLCBsZW5ndGgsIGFsbG93RW50aXRpZXMp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJD
b3JlL3BsYXRmb3JtL1RleHRDb2RlY1VzZXJEZWZpbmVkLmNwcApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1RleHRDb2Rl
Y1VzZXJEZWZpbmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9UZXh0Q29kZWNV
c2VyRGVmaW5lZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFRleHRDb2RlY1VzZXJEZWZpbmVkX2gKKyNkZWZpbmUgVGV4dENvZGVjVXNlckRlZmlu
ZWRfaAorCisjaW5jbHVkZSAiVGV4dENvZGVjLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ICAgIGNsYXNzIFRleHRDb2RlY1VzZXJEZWZpbmVkIDogcHVibGljIFRleHRDb2RlYyB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgdm9pZCByZWdpc3RlckVuY29kaW5nTmFtZXMoRW5jb2Rp
bmdOYW1lUmVnaXN0cmFyKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyKTsKKworICAgICAgICB2aXJ0dWFsIFN0cmluZyBkZWNvZGUoY29uc3Qg
Y2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2ggPSBmYWxzZSk7CisgICAgICAgIHZpcnR1
YWwgQ1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIGFsbG93
RW50aXRpZXMgPSBmYWxzZSk7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVGV4dENvZGVjVXNlckRlZmluZWRfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9wbGF0Zm9ybS9UZXh0Q29kZWNVc2VyRGVmaW5lZC5oCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3Zu
OmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vVGV4dEVuY29k
aW5nUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vVGV4dEVuY29k
aW5nUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAyNzAzMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vVGV4
dEVuY29kaW5nUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlRleHRDb2RlY0xhdGluMS5o
IgorI2luY2x1ZGUgIlRleHRDb2RlY1VzZXJEZWZpbmVkLmgiCiAjaW5jbHVkZSAiVGV4dENvZGVj
VVRGMTYuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkBAIC0xNjcsNiArMTY4LDkgQEAgc3RhdGljIHZvaWQgYnVpbGRCYXNlVGV4dENv
ZGVjTWFwcygpCiAgICAgVGV4dENvZGVjVVRGMTY6OnJlZ2lzdGVyRW5jb2RpbmdOYW1lcyhhZGRU
b1RleHRFbmNvZGluZ05hbWVNYXApOwogICAgIFRleHRDb2RlY1VURjE2OjpyZWdpc3RlckNvZGVj
cyhhZGRUb1RleHRDb2RlY01hcCk7CiAKKyAgICBUZXh0Q29kZWNVc2VyRGVmaW5lZDo6cmVnaXN0
ZXJFbmNvZGluZ05hbWVzKGFkZFRvVGV4dEVuY29kaW5nTmFtZU1hcCk7CisgICAgVGV4dENvZGVj
VXNlckRlZmluZWQ6OnJlZ2lzdGVyQ29kZWNzKGFkZFRvVGV4dENvZGVjTWFwKTsKKwogI2lmIFVT
RShJQ1VfVU5JQ09ERSkKICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQmFzZUVuY29kaW5nTmFt
ZXMoYWRkVG9UZXh0RW5jb2RpbmdOYW1lTWFwKTsKICAgICBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVy
QmFzZUNvZGVjcyhhZGRUb1RleHRDb2RlY01hcCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzA0OSkK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDA3LTEwLTI1ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU1NQorICAgICAgICBYTUxIdHRwUmVxdWVzdCBk
b2VzIG5vdCBzdXBwb3J0IGNoYXJzZXQgIngtdXNlci1kZWZpbmVkIiwgd2hpY2ggY2FuCisgICAg
ICAgIGZhY2lsaXRhdGUgbG9hZGluZyBvZiBiaW5hcnkgZGF0YQorCisgICAgICAgICogaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC9iaW5hcnkteC11c2VyLWRlZmluZWQtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2JpbmFyeS14LXVzZXIt
ZGVmaW5lZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0
L3Jlc291cmNlcy8yNTYuYmluOiBBZGRlZC4KKwogMjAwNy0xMC0yNSAgSG9sZ2VyIEZyZXl0aGVy
ICA8emVja2VAc2VsZmlzaC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gSGF1c21h
bm4gPGhhdXNtYW5uQGtkZS5vcmc+LgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9iaW5hcnkteC11c2VyLWRlZmluZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvYmluYXJ5LXgtdXNlci1k
ZWZpbmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QvYmluYXJ5LXgtdXNlci1kZWZpbmVkLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitUZXN0IGZvciBidWcgMTU1NTU6IFhNTEh0dHBSZXF1
ZXN0IGRvZXMgbm90IHN1cHBvcnQgY2hhcnNldCAieC11c2VyLWRlZmluZWQiLCB3aGljaCBjYW4g
ZmFjaWxpdGF0ZSBsb2FkaW5nIG9mIGJpbmFyeSBkYXRhLgorCitTVUNDRVNTCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2JpbmFyeS14
LXVzZXItZGVmaW5lZC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBl
CiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9iaW5hcnkteC11c2VyLWRlZmlu
ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L2JpbmFyeS14LXVzZXItZGVmaW5lZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9iaW5hcnkteC11c2VyLWRlZmluZWQuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorPHA+VGVzdCBmb3IgPGEgaHJlZj0iaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NTUiPmJ1ZyAxNTU1NTwvYT46CitY
TUxIdHRwUmVxdWVzdCBkb2VzIG5vdCBzdXBwb3J0IGNoYXJzZXQgIngtdXNlci1kZWZpbmVkIiwg
d2hpY2ggY2FuIGZhY2lsaXRhdGUgbG9hZGluZyBvZiBiaW5hcnkgZGF0YS48L3A+Cis8c2NyaXB0
PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworCit0cnkgeworICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3Q7Cisg
IHJlcS5vdmVycmlkZU1pbWVUeXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVk
Iik7CisgIHJlcS5vcGVuKCJHRVQiLCAicmVzb3VyY2VzLzI1Ni5iaW4iLCBmYWxzZSk7CisgIHJl
cS5zZW5kKCk7CisgIGZvciAodmFyIGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKKyAgICB2YXIgYnl0
ID0gcmVxLnJlc3BvbnNlVGV4dC5jaGFyQ29kZUF0KGkpOworICAgIGlmIChieXQgIT0gaSkKKyAg
ICAgIHRocm93ICJpbmNvcnJlY3QgYnl0ZTogIiArIGJ5dCArICIgKHNob3VsZCBiZSAiICsgaSAr
ICIpIjsKKyAgfQorCisgIGZvciAodmFyIGkgPSAxMjg7IGkgPCAyNTY7IGkrKykgeworICAgIHZh
ciBieXQgPSByZXEucmVzcG9uc2VUZXh0LmNoYXJDb2RlQXQoaSk7CisgICAgaWYgKGJ5dCAhPSBp
ICsgMHhmNzAwKQorICAgICAgdGhyb3cgImluY29ycmVjdCBieXRlOiAiICsgYnl0ICsgIiAoc2hv
dWxkIGJlICIgKyAoaSArIDB4ZjcwMCkgKyAiKSI7CisgIH0KKworICBkb2N1bWVudC53cml0ZSgi
PGRpdj5TVUNDRVNTPC9kaXY+Iik7CisKK30gY2F0Y2ggKGV4KSB7CisgIGRvY3VtZW50LndyaXRl
KCI8ZGl2PiIgKyBleCArICI8L2Rpdj4iKTsKK30KKzwvc2NyaXB0PgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9iaW5hcnkteC11c2Vy
LWRlZmluZWQuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0
bWwKCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNl
cy8yNTYuYmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmlu
YXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVz
b3VyY2VzLzI1Ni5iaW4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgoKQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmth
R3h3ZEhoOGdJU0lqSkNVbUp5Z3BLaXNzTFM0dk1ERXlNelExTmpjNApPVG83UEQwK1AwQkJRa05F
UlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldsdGNYVjVmWUdGaVkyUmxabWRvYVdwcmJHMXVi
M0J4CmNuTjBkWFozZUhsNmUzeDlmbitBZ1lLRGhJV0doNGlKaW91TWpZNlBrSkdTazVTVmxwZVlt
WnFibkoyZW42Q2hvcU9rcGFhbnFLbXEKcTZ5dHJxK3dzYkt6dExXMnQ3aTV1cnU4dmI2L3dNSEN3
OFRGeHNmSXljckx6TTNPejlEUjB0UFUxZGJYMk5uYTI5emQzdC9nNGVMago1T1htNStqcDZ1dnM3
ZTd2OFBIeTgvVDE5dmY0K2ZyNy9QMysvdz09Cgo=
</data>
<flag name="review"
          id="7139"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>