<?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>81446</bug_id>
          
          <creation_ts>2012-03-17 00:35:27 -0700</creation_ts>
          <short_desc>Cache the type string of JavaScript object</short_desc>
          <delta_ts>2012-03-20 13:23:27 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>581283</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-03-17 00:35:27 -0700</bug_when>
    <thetext>Currently, we create a new string for every time we need the type string, we can do better than that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581284</commentid>
    <comment_count>1</comment_count>
      <attachid>132452</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-03-17 00:43:49 -0700</bug_when>
    <thetext>Created attachment 132452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581685</commentid>
    <comment_count>2</comment_count>
      <attachid>132452</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-19 01:04:04 -0700</bug_when>
    <thetext>Comment on attachment 132452
Patch

Attachment 132452 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11988018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581692</commentid>
    <comment_count>3</comment_count>
      <attachid>132452</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-19 01:27:55 -0700</bug_when>
    <thetext>Comment on attachment 132452
Patch

Attachment 132452 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11982591</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581957</commentid>
    <comment_count>4</comment_count>
      <attachid>132452</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-19 11:13:28 -0700</bug_when>
    <thetext>Comment on attachment 132452
Patch

Attachment 132452 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11989193</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581996</commentid>
    <comment_count>5</comment_count>
      <attachid>132452</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-19 11:40:33 -0700</bug_when>
    <thetext>Comment on attachment 132452
Patch

Attachment 132452 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/11980877</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582050</commentid>
    <comment_count>6</comment_count>
      <attachid>132452</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-19 12:28:00 -0700</bug_when>
    <thetext>Comment on attachment 132452
Patch

Attachment 132452 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11989243</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582158</commentid>
    <comment_count>7</comment_count>
      <attachid>132452</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-19 13:36:31 -0700</bug_when>
    <thetext>Comment on attachment 132452
Patch

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

Approach looks good. r- because it doesn&apos;t build on all platforms.

Also, one comment below.

&gt; Source/JavaScriptCore/runtime/JSValue.cpp:NaN
&gt;  JSString* JSValue::toStringSlowCase(ExecState* exec) const

Please add common strings for all the JSValue::toString strings. These can be very common just like the type string case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582161</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-19 13:38:33 -0700</bug_when>
    <thetext>... Did you consider use the SmallStrings storage instead? That has the nice side-benefit of using weak pointers, so its allocations don&apos;t fragment the heap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582190</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-19 13:52:45 -0700</bug_when>
    <thetext>Will we have more trouble with profiling/Web Inspector, as we&apos;re getting additional &quot;leaking&quot; objects?

SmallStrings used to confuse people looking at Caches debug window.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582202</commentid>
    <comment_count>10</comment_count>
      <attachid>132452</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-03-19 14:00:44 -0700</bug_when>
    <thetext>Comment on attachment 132452
Patch

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

&gt; Source/JavaScriptCore/runtime/CommonIdentifiers.h:75
&gt; -    macro(displayName) \
&gt; -    macro(undefined)
&gt; +    macro(displayName)

Why remove undefined from the common identifiers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582222</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-19 14:09:38 -0700</bug_when>
    <thetext>&gt; Will we have more trouble with profiling/Web Inspector, as we&apos;re getting additional &quot;leaking&quot; objects?
&gt; 
&gt; SmallStrings used to confuse people looking at Caches debug window.

Like I said, SmallStrings are weak, so they disappear if not in use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582225</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-03-19 14:11:21 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; ... Did you consider use the SmallStrings storage instead? That has the nice side-benefit of using weak pointers, so its allocations don&apos;t fragment the heap.

I did, but then we keep trashing the strings. I also considered CommonIdentifier + smallstrings. In the end, I went for the fastest in the benchmarks.

&gt; &gt; Source/JavaScriptCore/runtime/JSValue.cpp:NaN
&gt; &gt;  JSString* JSValue::toStringSlowCase(ExecState* exec) const
&gt; 
&gt; Please add common strings for all the JSValue::toString strings. These can be very common just like the type string case.

I have a regression related to JSValue::toString() and I wanted to see that function separately. Your idea does not affect the regression so I can add that.

&gt; &gt; Source/JavaScriptCore/runtime/CommonIdentifiers.h:75
&gt; &gt; -    macro(displayName) \
&gt; &gt; -    macro(undefined)
&gt; &gt; +    macro(displayName)
&gt; 
&gt; Why remove undefined from the common identifiers?

It is unused with this patch. The cached JSString is used instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582243</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-19 14:24:09 -0700</bug_when>
    <thetext>&gt; &gt; ... Did you consider use the SmallStrings storage instead? That has the nice side-benefit of using weak pointers, so its allocations don&apos;t fragment the heap.
&gt; 
&gt; I did, but then we keep trashing the strings.

Can you elaborate on this? Using this technique, how much benchmark time is spent creating strings?

If we assume that small strings occupy 1KB of space (which is pretty generous), and that the heap is only 512KB in size, the maximum time you&apos;d ever expect to spend allocating small strings is on the order of 1/512 = 0.002%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582654</commentid>
    <comment_count>14</comment_count>
      <attachid>132749</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-03-19 19:45:48 -0700</bug_when>
    <thetext>Created attachment 132749
Alternative

&gt; Can you elaborate on this? Using this technique, how much benchmark time is spent creating strings?
&gt; 
&gt; If we assume that small strings occupy 1KB of space (which is pretty generous), and that the heap is only 512KB in size, the maximum time you&apos;d ever expect to spend allocating small strings is on the order of 1/512 = 0.002%.

Here is a patch for the other version.

The trashing of strings was just an assumption. Profiling does not show any difference in the top functions between those two patches (fastFree() and fastMalloc() included).

I have no clue why this is slower than the previous patch (by around 1.7%). I think that could just be my system, I am tempted to go with this because it is simpler... Any opinion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582799</commentid>
    <comment_count>15</comment_count>
      <attachid>132769</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-03-19 23:46:54 -0700</bug_when>
    <thetext>Created attachment 132769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582803</commentid>
    <comment_count>16</comment_count>
      <attachid>132769</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-03-19 23:49:24 -0700</bug_when>
    <thetext>Comment on attachment 132769
Patch

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

&gt; Source/JavaScriptCore/runtime/SmallStrings.h:81
&gt; +        JSString* name##Keyword(JSGlobalData* globalData) const \

I suffixed with &quot;Keyword&quot; to avoid name clash with the C++ keywords.
I considered the suffix &quot;String&quot;, but &quot;nullString&quot; is too ambiguous in my opinion.

Any suggestion for a better name is welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583144</commentid>
    <comment_count>17</comment_count>
      <attachid>132769</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-20 09:37:25 -0700</bug_when>
    <thetext>Comment on attachment 132769
Patch

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

r=me

Hate to leave 1.7% on the table, but I do prefer the approach here for memory reasons, and the overall speedup is still quite large. I think it&apos;s reasonable to take the speedup and move on.

&gt;&gt; Source/JavaScriptCore/runtime/SmallStrings.h:81
&gt;&gt; +        JSString* name##Keyword(JSGlobalData* globalData) const \
&gt; 
&gt; I suffixed with &quot;Keyword&quot; to avoid name clash with the C++ keywords.
&gt; I considered the suffix &quot;String&quot;, but &quot;nullString&quot; is too ambiguous in my opinion.
&gt; 
&gt; Any suggestion for a better name is welcome.

I&apos;d prefer &quot;name##String&quot; because not all of these strings are, in fact, keywords.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583401</commentid>
    <comment_count>18</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-03-20 13:23:27 -0700</bug_when>
    <thetext>Committed r111433: &lt;http://trac.webkit.org/changeset/111433&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132452</attachid>
            <date>2012-03-17 00:43:49 -0700</date>
            <delta_ts>2012-03-19 23:46:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81446-20120317004348.patch</filename>
            <type>text/plain</type>
            <size>17372</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YTk1ODMzZWRhMTc0ZWNiNjAzMTIxZjg3ZGNkNGI4MjNiZjI5MDFlLi4xODc0N2E3NjI1OWJiMmYw
MjAzMmQ1Zjk5OTQ1ZmE3MGQyNWJhZjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxMi0wMy0xNyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBDYWNoZSB0aGUgdHlwZSBzdHJpbmcgb2YgSmF2YVNjcmlwdCBvYmpl
Y3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNDQ2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVh
ZCBvZiBjcmVhdGluZyB0aGUgSlNTdHJpbmcgZXZlcnkgdGltZSwgd2UgY3JlYXRlCisgICAgICAg
IGxhemlseSB0aGUgc3RyaW5ncyBpbiBKU0dsb2JhbERhdGEuCisKKyAgICAgICAgVGhpcyBhdm9p
ZCB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSBTdHJpbmdJbXBsIGFuZCBvZiB0aGUgSlNTdHJpbmcs
CisgICAgICAgIHdoaWNoIGdpdmVzIHNvbWUgcGVyZm9ybWFuY2UgaW1wcm92bWVudC4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpFeGVjU3RhdGU6OmNvbW1vblN0cmluZ3MpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRl
bnRpZmllcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblN0cmluZ3MuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvbW1vblN0cmluZ3M6OmluaXRpYWxpemUp
OgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU3RyaW5ncy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChDb21tb25TdHJpbmdzKToKKyAgICAgICAgKEpTQzo6Q29tbW9uU3RyaW5n
czo6Q29tbW9uU3RyaW5ncyk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0dsb2JhbERh
dGEpOgorICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFs
dWU6OnRvU3RyaW5nU2xvd0Nhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OmpzVHlwZVN0cmluZ0ZvclZhbHVlKToKKwogMjAxMi0wMy0xNiAgQmVu
amFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGlmeSBT
bWFsbFN0cmluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjdkZWY4ZDdmYTE1
ZWFjNDMwYTU4YTMwZDE3NTY5MzhhZmY4NTViNS4uN2Y1NTVmNDBmNDFjMzQ0M2ViMDZhM2E2YWYz
YmI0ZDdjYWM0MTg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMzMyw2ICsz
MzMsOCBAQAogCQkyNjg0QjJEODE0RDRBOUIyMDA3MkMwQjYgLyogVVJMQ2hhcmFjdGVyVHlwZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjY4NEIy
Q0ExNEQ0QTlCMjAwNzJDMEI2IC8qIFVSTENoYXJhY3RlclR5cGVzLmNwcCAqLzsgfTsKIAkJMjY4
NEIyREIxNEQ0QTlCMjAwNzJDMEI2IC8qIFVSTEVzY2FwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjg0QjJDRDE0RDRBOUIyMDA3MkMwQjYgLyog
VVJMRXNjYXBlLmNwcCAqLzsgfTsKIAkJMjY4NEIyREYxNEQ0QTlCMjAwNzJDMEI2IC8qIFVSTFNl
Z21lbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI2ODRCMkQxMTRENEE5QjIwMDcyQzBCNiAvKiBVUkxTZWdtZW50cy5jcHAgKi87IH07CisJCTI2
RDg0MUMzMTUxNDcwRUIwMDBFOUJGRiAvKiBDb21tb25TdHJpbmdzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2RDg0MUMxMTUxNDcwRUIwMDBFOUJG
RiAvKiBDb21tb25TdHJpbmdzLmNwcCAqLzsgfTsKKwkJMjZEODQxQzQxNTE0NzBFQjAwMEU5QkZG
IC8qIENvbW1vblN0cmluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2RDg0MUMyMTUxNDcwRUIwMDBFOUJGRiAvKiBDb21tb25TdHJpbmdzLmggKi87
IH07CiAJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkwQUQ0MzEw
QzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IH07CiAJCTQxMzU5Q0Y2MEZERDg5Q0Iw
MDIwNjE4MCAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MTM1OUNGNDBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGguY3BwICov
OyB9OwogCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0
IC8qIFlhcnIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMTAzOCw2ICsxMDQwLDggQEAKIAkJMjY4NEIyRDAxNEQ0QTlCMjAwNzJDMEI2IC8qIFVS
TFF1ZXJ5Q2Fub25pY2FsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBV
UkxRdWVyeUNhbm9uaWNhbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjY4
NEIyRDExNEQ0QTlCMjAwNzJDMEI2IC8qIFVSTFNlZ21lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVSTFNlZ21lbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMjY4NEIyRDIxNEQ0QTlCMjAwNzJDMEI2IC8qIFVSTFNlZ21lbnRzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVSTFNlZ21lbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTI2RDg0MUMxMTUxNDcwRUIwMDBFOUJGRiAvKiBDb21tb25TdHJp
bmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbW1vblN0cmlu
Z3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNkQ4NDFDMjE1MTQ3MEVCMDAw
RTlCRkYgLyogQ29tbW9uU3RyaW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb21tb25TdHJpbmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJDRkM1QjdB
MTJGNDQ3MTQwMDQ5MTRFMiAvKiBDaGFyYWN0ZXJOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDaGFyYWN0ZXJOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0MTM1OUNGNDBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZU1hdGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MTM1OUNGNTBGREQ4OUNCMDAyMDYxODAgLyogRGF0ZU1hdGguaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZU1hdGguaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIyNzEsNiArMjI3NSw4IEBACiAJCQkJQkM2QUFBRTQwRTFGNDI2NTAw
QUQ4N0Q4IC8qIENsYXNzSW5mby5oICovLAogCQkJCTY1RUE3MzYyMEJBRTM1RDEwMDFCQjU2MCAv
KiBDb21tb25JZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJNjVFQTczNjMwQkFFMzVEMTAwMUJCNTYw
IC8qIENvbW1vbklkZW50aWZpZXJzLmggKi8sCisJCQkJMjZEODQxQzExNTE0NzBFQjAwMEU5QkZG
IC8qIENvbW1vblN0cmluZ3MuY3BwICovLAorCQkJCTI2RDg0MUMyMTUxNDcwRUIwMDBFOUJGRiAv
KiBDb21tb25TdHJpbmdzLmggKi8sCiAJCQkJOTY5QTA5MjIwRUQxRTA5QzAwRjFGNjgxIC8qIENv
bXBsZXRpb24uY3BwICovLAogCQkJCUY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBDb21wbGV0
aW9uLmggKi8sCiAJCQkJQkNBNjJERkYwRTI4MjYzMTAwMDRGMzBEIC8qIENvbnN0cnVjdERhdGEu
Y3BwICovLApAQCAtMjc4Myw2ICsyNzg5LDcgQEAKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4
N0MgLyogQmlnSW50ZWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEwODI3N0ExNDIxNjhENzAw
OTBDQ0FDIC8qIEJpbmFyeVNlbWFwaG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMw
RTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xlYW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTI2
RDg0MUM0MTUxNDcwRUIwMDBFOUJGRiAvKiBDb21tb25TdHJpbmdzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMkM4RDAzMDE0QTNDRUZDMDA1NzhFNjUgLyogQ29waWVkQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5s
aW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDg4LDYgKzM0OTUsNyBAQAogCQkJCUUx
QTg2MkQ2MEQ3RjJCNUMwMDFFQzZBQSAvKiBDb2xsYXRvckRlZmF1bHQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTFBODYyQTkwRDdFQkI3NjAwMUVDNkFBIC8qIENvbGxhdG9ySUNVLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUMxMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21tb25JZGVudGlm
aWVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyNkQ4NDFDMzE1MTQ3MEVCMDAwRTlCRkYgLyog
Q29tbW9uU3RyaW5ncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0
MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1
QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyODA4MkUxMDdFQzA1NzAwMTNFN0IyIC8qIENvbnN0cnVjdERhdGEuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKaW5k
ZXggNWJmMmI5NDg4NzYyNzNiNjAzMDI5N2NjYmUzYjM0ODQxMGM3ZDBlZS4uN2E4OTk2ODEwNTIy
ZjM0N2U2NWM1MDlkM2YxNzU3ZTUzM2QzY2M2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaApAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIEpT
QyAgewogCiAgICAgY2xhc3MgQXJndW1lbnRzOwotICAgIGNsYXNzIEpTQWN0aXZhdGlvbjsKKyAg
ICBjbGFzcyBDb21tb25TdHJpbmdzOwogICAgIGNsYXNzIEludGVycHJldGVyOwogICAgIGNsYXNz
IFNjb3BlQ2hhaW5Ob2RlOwogCkBAIC03MCw2ICs3MCw3IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAg
ICAgICAgSlNWYWx1ZSBleGNlcHRpb24oKSBjb25zdCB7IHJldHVybiBnbG9iYWxEYXRhKCkuZXhj
ZXB0aW9uOyB9CiAgICAgICAgIGJvb2wgaGFkRXhjZXB0aW9uKCkgY29uc3QgeyByZXR1cm4gZ2xv
YmFsRGF0YSgpLmV4Y2VwdGlvbjsgfQogCisgICAgICAgIGNvbnN0IENvbW1vblN0cmluZ3MmIGNv
bW1vblN0cmluZ3MoKSBjb25zdCB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLmNvbW1vblN0cmluZ3M7
IH0KICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5TmFtZXMoKSBjb25z
dCB7IHJldHVybiAqZ2xvYmFsRGF0YSgpLnByb3BlcnR5TmFtZXM7IH0KICAgICAgICAgY29uc3Qg
TWFya2VkQXJndW1lbnRCdWZmZXImIGVtcHR5TGlzdCgpIGNvbnN0IHsgcmV0dXJuICpnbG9iYWxE
YXRhKCkuZW1wdHlMaXN0OyB9CiAgICAgICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcigpIHsg
cmV0dXJuIGdsb2JhbERhdGEoKS5pbnRlcnByZXRlcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5kZXggMGQ5NTgwMTk3MjI1MWRk
ZDcyZDdjODJkOWRkZGViYTAyM2Q1M2EyOC4uMTk2MmMwMzhmY2NmYWI3ZDY4NjM2NWNmYTliNTZk
N2VkMTk5MzBiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uSWRlbnRpZmllcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25JZGVudGlmaWVycy5oCkBAIC03Miw4ICs3Miw3IEBACiAgICAgbWFjcm8odmFsdWUpIFwKICAg
ICBtYWNybyh2YWx1ZU9mKSBcCiAgICAgbWFjcm8od3JpdGFibGUpIFwKLSAgICBtYWNybyhkaXNw
bGF5TmFtZSkgXAotICAgIG1hY3JvKHVuZGVmaW5lZCkKKyAgICBtYWNybyhkaXNwbGF5TmFtZSkK
IAogI2RlZmluZSBKU0NfQ09NTU9OX0lERU5USUZJRVJTX0VBQ0hfS0VZV09SRChtYWNybykgXAog
ICAgIG1hY3JvKG51bGwpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblN0cmluZ3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU3RyaW5ncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk5ZjE0MjBiZjY5OGFmOTYxNGYwMGFhYTFhMGUx
NGEzMmQ2YjM1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblN0cmluZ3MuY3BwCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ29tbW9uU3RyaW5ncy5oIgorCisjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNTdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgQ29tbW9uU3RyaW5nczo6aW5p
dGlhbGl6ZShTdHJvbmc8SlNTdHJpbmc+JiBzdHJpbmcsIGNvbnN0IGNoYXIqIHZhbHVlKSBjb25z
dAoreworICAgIHN0cmluZy5zZXQoKm1fZ2xvYmFsRGF0YSwgSlNTdHJpbmc6OmNyZWF0ZSgqbV9n
bG9iYWxEYXRhLCBTdHJpbmdJbXBsOjpjcmVhdGUodmFsdWUpKSk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblN0cmluZ3MuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblN0cmluZ3MuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NWIy
YTIxODIxNWY3YmI1ZTM3YTc3Y2JlM2ZkMzMxYmJiNzI0MDU1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU3RyaW5ncy5oCkBAIC0wLDAgKzEs
NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIENvbW1vblN0cmluZ3NfaAorI2RlZmluZSBDb21tb25TdHJpbmdzX2gKKworI2luY2x1ZGUg
IkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5jbHVkZSAiU3Ryb25nSW5saW5l
cy5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCisjZGVmaW5lIEpTQ19DT01NT05f
U1RSSU5HU19FQUNIX05BTUUobWFjcm8pIFwKKyAgICBtYWNybyhib29sZWFuKSBcCisgICAgbWFj
cm8oZnVuY3Rpb24pIFwKKyAgICBtYWNybyhudW1iZXIpIFwKKyAgICBtYWNybyhvYmplY3QpIFwK
KyAgICBtYWNybyh1bmRlZmluZWQpIFwKKyAgICBtYWNybyhzdHJpbmcpCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CitjbGFzcyBKU1N0cmluZzsKKworY2xhc3MgQ29t
bW9uU3RyaW5ncyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uU3RyaW5ncyk7Citw
dWJsaWM6CisgICAgQ29tbW9uU3RyaW5ncyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCisgICAg
ICAgIDogbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCisgICAgeworICAgIH0KKworI2RlZmluZSBK
U0NfQ09NTU9OX1NUUklOR1NfQUNDRVNTT1JfREVGSU5JVElPTihuYW1lKSBcCisgICAgSlNTdHJp
bmcqIG5hbWUoKSBjb25zdCB7IFwKKyAgICAgICAgaWYgKCFtXyMjbmFtZSkgXAorICAgICAgICAg
ICAgaW5pdGlhbGl6ZShtXyMjbmFtZSwgI25hbWUpOyBcCisgICAgICAgIHJldHVybiAqbV8jI25h
bWU7IFwKKyAgICB9CisgICAgSlNDX0NPTU1PTl9TVFJJTkdTX0VBQ0hfTkFNRShKU0NfQ09NTU9O
X1NUUklOR1NfQUNDRVNTT1JfREVGSU5JVElPTikKKyN1bmRlZiBKU0NfQ09NTU9OX1NUUklOR1Nf
QUNDRVNTT1JfREVGSU5JVElPTgorCitwcml2YXRlOgorICAgIEpTR2xvYmFsRGF0YSogbV9nbG9i
YWxEYXRhOworCisgICAgdm9pZCBpbml0aWFsaXplKFN0cm9uZzxKU1N0cmluZz4mIHN0cmluZywg
Y29uc3QgY2hhciogdmFsdWUpIGNvbnN0OworCisjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19B
VFRSSUJVVEVfREVDTEFSQVRJT04obmFtZSkgbXV0YWJsZSBTdHJvbmc8SlNTdHJpbmc+IG1fIyNu
YW1lOworICAgIEpTQ19DT01NT05fU1RSSU5HU19FQUNIX05BTUUoSlNDX0NPTU1PTl9TVFJJTkdT
X0FUVFJJQlVURV9ERUNMQVJBVElPTikKKyN1bmRlZiBKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklC
VVRFX0RFQ0xBUkFUSU9OCit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENv
bW1vblN0cmluZ3NfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAKaW5kZXggZmUwNjJlYWIwNzYzMmI5ZGRmMGNkNDUzNGMyYjBlNDhmNDU1MDM3Ni4u
OWU5ZmUyMTY4MDJkZjBkMTkxZWMxZDA0ZDdkZjA0NzcwNmY5NDQ4NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJDb21t
b25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIkNvbW1vblN0cmluZ3MuaCIKICNpbmNsdWRlICJE
ZWJ1Z2dlckFjdGl2YXRpb24uaCIKICNpbmNsdWRlICJGdW5jdGlvbkNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCkBAIC0xMzUsNiArMTM2LDcgQEAgSlNHbG9iYWxEYXRh
OjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGUsIFRocmVhZFN0YWNr
VHlwZSB0aHJlYWQKICAgICAsIGlkZW50aWZpZXJUYWJsZShnbG9iYWxEYXRhVHlwZSA9PSBEZWZh
dWx0ID8gd3RmVGhyZWFkRGF0YSgpLmN1cnJlbnRJZGVudGlmaWVyVGFibGUoKSA6IGNyZWF0ZUlk
ZW50aWZpZXJUYWJsZSgpKQogICAgICwgcHJvcGVydHlOYW1lcyhuZXcgQ29tbW9uSWRlbnRpZmll
cnModGhpcykpCiAgICAgLCBlbXB0eUxpc3QobmV3IE1hcmtlZEFyZ3VtZW50QnVmZmVyKQorICAg
ICwgY29tbW9uU3RyaW5ncyhhZG9wdFB0cihuZXcgQ29tbW9uU3RyaW5ncyh0aGlzKSkpCiAjaWYg
RU5BQkxFKEFTU0VNQkxFUikKICAgICAsIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKaW5kZXgg
Y2M3MDY5OGE5MDI0YTk3OGYzZDg4YmFjN2JhY2E4ZDQ2NDc0Y2I4YS4uOTdmOWZjODc5ZGEzYjNm
YjFlOGYyNjNmMDk3NDQ1ZTgwODdmNzZkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgKQEAgLTYxLDYgKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CisgICAg
Y2xhc3MgQ29tbW9uU3RyaW5nczsKICAgICBjbGFzcyBIYW5kbGVTdGFjazsKICAgICBjbGFzcyBJ
ZGVudGlmaWVyVGFibGU7CiAgICAgY2xhc3MgSW50ZXJwcmV0ZXI7CkBAIC0yMDAsNiArMjAxLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIENvbW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5h
bWVzOwogICAgICAgICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZlciogZW1wdHlMaXN0OyAvLyBM
aXN0cyBhcmUgc3VwcG9zZWQgdG8gYmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayB0byBoYXZlIHRo
ZWlyIGVsZW1lbnRzIHByb3Blcmx5IG1hcmtlZCwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIGhlcmUg
LSBidXQgdGhpcyBsaXN0IGhhcyBub3RoaW5nIHRvIG1hcmsuCiAgICAgICAgIFNtYWxsU3RyaW5n
cyBzbWFsbFN0cmluZ3M7CisgICAgICAgIE93blB0cjxDb21tb25TdHJpbmdzPiBjb21tb25TdHJp
bmdzOwogICAgICAgICBOdW1lcmljU3RyaW5ncyBudW1lcmljU3RyaW5nczsKICAgICAgICAgRGF0
ZUluc3RhbmNlQ2FjaGUgZGF0ZUluc3RhbmNlQ2FjaGU7CiAgICAgICAgIFdURjo6U2ltcGxlU3Rh
dHMgbWFjaGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklUOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAppbmRleCAzNjY5N2M2MGM1NjYxN2Nk
ZjAwZTZkMDY3M2ZiYzgwYjdjNWFkNWM4Li41NWZkYmY5OTk2NzBmOTk1M2ViZTBmMjY4YmJlZmM0
ZTcwYTg2ZDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zh
bHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcApA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiQm9vbGVhbkNvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiQm9vbGVhblByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkNvbW1vblN0cmluZ3MuaCIKICNp
bmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKICNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKQEAgLTI3Miw3ICsyNzMsNyBAQCBKU1N0cmluZyogSlNWYWx1ZTo6
dG9TdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgaWYgKGlzTnVsbCgp
KQogICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5udWxsS2V5d29yZC51c3RyaW5nKCkpOwogICAgIGlmIChpc1VuZGVmaW5lZCgpKQot
ICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS51bmRlZmluZWQudXN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIGV4ZWMtPmNvbW1vblN0
cmluZ3MoKS51bmRlZmluZWQoKTsKIAogICAgIEFTU0VSVChpc0NlbGwoKSk7CiAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGFzQ2VsbCgpLT50b1ByaW1pdGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAppbmRleCA0NTlmZWI0
NjZjNTZjMzNkYTQwZjU1ZDBiNDZmNzBhMjIzZTA4YWZhLi44ODlhNjhlY2QzOWE4ODczNzY3MTFi
MzM4Zjg1YWI4MzYxM2I2NTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cGVyYXRpb25zLmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKIAorI2luY2x1ZGUgIkNvbW1vblN0cmluZ3MuaCIKICNpbmNs
dWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcu
aCIKQEAgLTU5LDI0ICs2MCwyNCBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBqc0FkZFNsb3dDYXNl
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQogSlNWYWx1ZSBq
c1R5cGVTdHJpbmdGb3JWYWx1ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2KQogewog
ICAgIGlmICh2LmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoY2FsbEZyYW1lLCAidW5kZWZpbmVkIik7CisgICAgICAgIHJldHVybiBjYWxsRnJhbWUtPmNv
bW1vblN0cmluZ3MoKS51bmRlZmluZWQoKTsKICAgICBpZiAodi5pc0Jvb2xlYW4oKSkKLSAgICAg
ICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJib29sZWFuIik7CisgICAg
ICAgIHJldHVybiBjYWxsRnJhbWUtPmNvbW1vblN0cmluZ3MoKS5ib29sZWFuKCk7CiAgICAgaWYg
KHYuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJh
bWUsICJudW1iZXIiKTsKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29tbW9uU3RyaW5ncygp
Lm51bWJlcigpOwogICAgIGlmICh2LmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoY2FsbEZyYW1lLCAic3RyaW5nIik7CisgICAgICAgIHJldHVybiBjYWxsRnJh
bWUtPmNvbW1vblN0cmluZ3MoKS5zdHJpbmcoKTsKICAgICBpZiAodi5pc09iamVjdCgpKSB7CiAg
ICAgICAgIC8vIFJldHVybiAidW5kZWZpbmVkIiBmb3Igb2JqZWN0cyB0aGF0IHNob3VsZCBiZSB0
cmVhdGVkCiAgICAgICAgIC8vIGFzIG51bGwgd2hlbiBkb2luZyBjb21wYXJpc29ucy4KICAgICAg
ICAgaWYgKGFzT2JqZWN0KHYpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5tYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGNhbGxG
cmFtZSwgInVuZGVmaW5lZCIpOworICAgICAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+Y29tbW9u
U3RyaW5ncygpLnVuZGVmaW5lZCgpOwogICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHYpOwogICAgICAgICBpZiAob2JqZWN0LT5t
ZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShvYmplY3QsIGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5v
bmUpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGNhbGxGcmFtZSwgImZ1
bmN0aW9uIik7CisgICAgICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5jb21tb25TdHJpbmdzKCku
ZnVuY3Rpb24oKTsKICAgICB9Ci0gICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhjYWxsRnJh
bWUsICJvYmplY3QiKTsKKyAgICByZXR1cm4gY2FsbEZyYW1lLT5jb21tb25TdHJpbmdzKCkub2Jq
ZWN0KCk7CiB9CiAKIGJvb2wganNJc09iamVjdFR5cGUoSlNWYWx1ZSB2KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132749</attachid>
            <date>2012-03-19 19:45:48 -0700</date>
            <delta_ts>2012-03-19 23:46:50 -0700</delta_ts>
            <desc>Alternative</desc>
            <filename>smallstring_patch.diff</filename>
            <type>text/plain</type>
            <size>6382</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5o
CmluZGV4IDBkOTU4MDEuLjE5NjJjMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtNzIsOCArNzIsNyBAQAogICAgIG1hY3Jv
KHZhbHVlKSBcCiAgICAgbWFjcm8odmFsdWVPZikgXAogICAgIG1hY3JvKHdyaXRhYmxlKSBcCi0g
ICAgbWFjcm8oZGlzcGxheU5hbWUpIFwKLSAgICBtYWNybyh1bmRlZmluZWQpCisgICAgbWFjcm8o
ZGlzcGxheU5hbWUpCiAKICNkZWZpbmUgSlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX0tFWVdP
UkQobWFjcm8pIFwKICAgICBtYWNybyhudWxsKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTVmFsdWUuY3BwCmluZGV4IGYzNWNhMjEuLmFjY2UxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCkBAIC0yODQsOCArMjg0LDEwIEBAIEpTU3RyaW5n
KiBKU1ZhbHVlOjp0b1N0cmluZ1Nsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAg
ICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
ZmFsc2VLZXl3b3JkLnVzdHJpbmcoKSk7CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1
cm4ganNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5udWxsS2V5
d29yZC51c3RyaW5nKCkpOwotICAgIGlmIChpc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4g
anNOb250cml2aWFsU3RyaW5nKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlZmluZWQu
dXN0cmluZygpKTsKKyAgICBpZiAoaXNVbmRlZmluZWQoKSkgeworICAgICAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLnNtYWxsU3RyaW5ncy51bmRlZmluZWQoJmdsb2JhbERhdGEpOworICAgIH0KIAogICAg
IEFTU0VSVChpc0NlbGwoKSk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGFzQ2VsbCgpLT50b1ByaW1p
dGl2ZShleGVjLCBQcmVmZXJTdHJpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcGVyYXRpb25zLmNwcAppbmRleCA0NTlmZWI0Li4yMGRjZDViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcApAQCAtNTgsMjUgKzU4LDI2IEBAIE5F
VkVSX0lOTElORSBKU1ZhbHVlIGpzQWRkU2xvd0Nhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
VmFsdWUgdjEsIEpTVmFsdWUgdjIpCiAKIEpTVmFsdWUganNUeXBlU3RyaW5nRm9yVmFsdWUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdikKIHsKKyAgICBKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEgPSBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKICAgICBpZiAodi5pc1VuZGVmaW5lZCgp
KQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGNhbGxGcmFtZSwgInVuZGVmaW5l
ZCIpOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MudW5kZWZpbmVkKCZn
bG9iYWxEYXRhKTsKICAgICBpZiAodi5pc0Jvb2xlYW4oKSkKLSAgICAgICAgcmV0dXJuIGpzTm9u
dHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJib29sZWFuIik7CisgICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLnNtYWxsU3RyaW5ncy5ib29sZWFuKCZnbG9iYWxEYXRhKTsKICAgICBpZiAodi5pc051
bWJlcigpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGNhbGxGcmFtZSwgIm51
bWJlciIpOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MubnVtYmVyKCZn
bG9iYWxEYXRhKTsKICAgICBpZiAodi5pc1N0cmluZygpKQotICAgICAgICByZXR1cm4ganNOb250
cml2aWFsU3RyaW5nKGNhbGxGcmFtZSwgInN0cmluZyIpOworICAgICAgICByZXR1cm4gZ2xvYmFs
RGF0YS5zbWFsbFN0cmluZ3Muc3RyaW5nKCZnbG9iYWxEYXRhKTsKICAgICBpZiAodi5pc09iamVj
dCgpKSB7CiAgICAgICAgIC8vIFJldHVybiAidW5kZWZpbmVkIiBmb3Igb2JqZWN0cyB0aGF0IHNo
b3VsZCBiZSB0cmVhdGVkCiAgICAgICAgIC8vIGFzIG51bGwgd2hlbiBkb2luZyBjb21wYXJpc29u
cy4KICAgICAgICAgaWYgKGFzT2JqZWN0KHYpLT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5tYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGNhbGxGcmFtZSwgInVuZGVmaW5lZCIpOworICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERh
dGEuc21hbGxTdHJpbmdzLnVuZGVmaW5lZCgmZ2xvYmFsRGF0YSk7CiAgICAgICAgIENhbGxEYXRh
IGNhbGxEYXRhOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qodik7CiAgICAg
ICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKG9iamVjdCwgY2FsbERh
dGEpICE9IENhbGxUeXBlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJp
bmcoY2FsbEZyYW1lLCAiZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRh
LnNtYWxsU3RyaW5ncy5mdW5jdGlvbigmZ2xvYmFsRGF0YSk7CiAgICAgfQotICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoY2FsbEZyYW1lLCAib2JqZWN0Iik7CisgICAgcmV0dXJuIGdsb2Jh
bERhdGEuc21hbGxTdHJpbmdzLm9iamVjdCgmZ2xvYmFsRGF0YSk7CiB9CiAKIGJvb2wganNJc09i
amVjdFR5cGUoSlNWYWx1ZSB2KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU21hbGxTdHJpbmdzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nt
YWxsU3RyaW5ncy5jcHAKaW5kZXggY2FmMjAxYy4uMjhjMDcxNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwCkBAIC03MSw2ICs3MSw5IEBAIFNt
YWxsU3RyaW5nczo6U21hbGxTdHJpbmdzKCkKIHsKICAgICBDT01QSUxFX0FTU0VSVChzaW5nbGVD
aGFyYWN0ZXJTdHJpbmdDb3VudCA9PSBzaXplb2YobV9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKSAv
IHNpemVvZihtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbMF0pLCBJc051bUNoYXJhY3RlcnNDb25z
dEluU3luY1dpdGhDbGFzc1VzYWdlKTsKICAgICBjbGVhcigpOworI2RlZmluZSBKU0NfQ09NTU9O
X1NUUklOR1NfQVRUUklCVVRFX0NMRUFSKG5hbWUpIG1fIyNuYW1lID0gMDsKKyAgICBKU0NfQ09N
TU9OX1NUUklOR1NfRUFDSF9OQU1FKEpTQ19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVfQ0xFQVIp
CisjdW5kZWYgSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9DTEVBUgogfQogCiBTbWFsbFN0
cmluZ3M6On5TbWFsbFN0cmluZ3MoKQpAQCAtODIsNiArODUsOSBAQCB2b2lkIFNtYWxsU3RyaW5n
czo6ZmluYWxpemVTbWFsbFN0cmluZ3MoKQogICAgIGZpbmFsaXplKG1fZW1wdHlTdHJpbmcpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaW5nbGVDaGFyYWN0ZXJTdHJpbmdDb3VudDsg
KytpKQogICAgICAgICBmaW5hbGl6ZShtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbaV0pOworI2Rl
ZmluZSBKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0ZJTkFMSVpFKG5hbWUpIGZpbmFsaXpl
KG1fIyNuYW1lKTsKKyAgICBKU0NfQ09NTU9OX1NUUklOR1NfRUFDSF9OQU1FKEpTQ19DT01NT05f
U1RSSU5HU19BVFRSSUJVVEVfRklOQUxJWkUpCisjdW5kZWYgSlNDX0NPTU1PTl9TVFJJTkdTX0FU
VFJJQlVURV9GSU5BTElaRQogfQogCiB2b2lkIFNtYWxsU3RyaW5nczo6Y2xlYXIoKQpAQCAtMTI0
LDQgKzEzMCw5IEBAIFN0cmluZ0ltcGwqIFNtYWxsU3RyaW5nczo6c2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nUmVwKHVuc2lnbmVkIGNoYXIgY2hhcmFjdGVyKQogICAgIHJldHVybiBtX3N0b3JhZ2UtPnJl
cChjaGFyYWN0ZXIpOwogfQogCit2b2lkIFNtYWxsU3RyaW5nczo6aW5pdGlhbGl6ZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEpTU3RyaW5nKiYgc3RyaW5nLCBjb25zdCBjaGFyKiB2YWx1ZSkg
Y29uc3QKK3sKKyAgICBzdHJpbmcgPSBKU1N0cmluZzo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBTdHJp
bmdJbXBsOjpjcmVhdGUodmFsdWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5oCmluZGV4IGNkOGU2MzAuLjU1
ZTA4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3Ry
aW5ncy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NtYWxsU3RyaW5ncy5o
CkBAIC0zMCw2ICszMCwxNCBAQAogI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCisjZGVmaW5lIEpTQ19DT01NT05fU1RSSU5HU19FQUNIX05BTUUo
bWFjcm8pIFwKKyAgICBtYWNybyhib29sZWFuKSBcCisgICAgbWFjcm8oZnVuY3Rpb24pIFwKKyAg
ICBtYWNybyhudW1iZXIpIFwKKyAgICBtYWNybyhvYmplY3QpIFwKKyAgICBtYWNybyh1bmRlZmlu
ZWQpIFwKKyAgICBtYWNybyhzdHJpbmcpCisKIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
SGVhcFJvb3RWaXNpdG9yOwpAQCAtNjksMTIgKzc3LDI3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIEpTU3RyaW5nKiogc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpIHsgcmV0dXJuICZtX3Np
bmdsZUNoYXJhY3RlclN0cmluZ3NbMF07IH0KIAorI2RlZmluZSBKU0NfQ09NTU9OX1NUUklOR1Nf
QUNDRVNTT1JfREVGSU5JVElPTihuYW1lKSBcCisgICAgICAgIEpTU3RyaW5nKiBuYW1lKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkgY29uc3QgeyBcCisgICAgICAgICAgICBpZiAoIW1fIyNuYW1l
KSBcCisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZShnbG9iYWxEYXRhLCBtXyMjbmFtZSwgI25h
bWUpOyBcCisgICAgICAgICAgICByZXR1cm4gbV8jI25hbWU7IFwKKyAgICAgICAgfQorICAgICAg
ICBKU0NfQ09NTU9OX1NUUklOR1NfRUFDSF9OQU1FKEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NP
Ul9ERUZJTklUSU9OKQorI3VuZGVmIEpTQ19DT01NT05fU1RSSU5HU19BQ0NFU1NPUl9ERUZJTklU
SU9OCisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2luZ2xl
Q2hhcmFjdGVyU3RyaW5nQ291bnQgPSBtYXhTaW5nbGVDaGFyYWN0ZXJTdHJpbmcgKyAxOwogCiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlRW1wdHlTdHJpbmcoSlNHbG9iYWxE
YXRhKik7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY3JlYXRlU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKEpTR2xvYmFsRGF0YSosIHVuc2lnbmVkIGNoYXIpOwogCisgICAgICAgIHZvaWQg
aW5pdGlhbGl6ZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTU3RyaW5nKiYgc3RyaW5nLCBj
b25zdCBjaGFyKiB2YWx1ZSkgY29uc3Q7CisKKyNkZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FU
VFJJQlVURV9ERUNMQVJBVElPTihuYW1lKSBtdXRhYmxlIEpTU3RyaW5nKiBtXyMjbmFtZTsKKyAg
ICAgICAgSlNDX0NPTU1PTl9TVFJJTkdTX0VBQ0hfTkFNRShKU0NfQ09NTU9OX1NUUklOR1NfQVRU
UklCVVRFX0RFQ0xBUkFUSU9OKQorI3VuZGVmIEpTQ19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVf
REVDTEFSQVRJT04KKwogICAgICAgICBKU1N0cmluZyogbV9lbXB0eVN0cmluZzsKICAgICAgICAg
SlNTdHJpbmcqIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tzaW5nbGVDaGFyYWN0ZXJTdHJpbmdD
b3VudF07CiAgICAgICAgIE93blB0cjxTbWFsbFN0cmluZ3NTdG9yYWdlPiBtX3N0b3JhZ2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132769</attachid>
            <date>2012-03-19 23:46:54 -0700</date>
            <delta_ts>2012-03-20 09:37:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81446-20120319234653.patch</filename>
            <type>text/plain</type>
            <size>9117</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMzU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NjdmYWIzNjE1MjQwOWEyNmU4ZmM3MTA4NmNkZjRiZDMxMTRlM2I4Li42NGFlNTg4NGM1NjI4MjRk
NmMwN2MwOGE4Yzg4NDUwMzQ5NzU2OTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxMi0wMy0xOSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBDYWNoZSB0aGUgdHlwZSBzdHJpbmcgb2YgSmF2YVNjcmlwdCBvYmpl
Y3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxNDQ2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5zdGVh
ZCBvZiBjcmVhdGluZyB0aGUgSlNTdHJpbmcgZXZlcnkgdGltZSwgd2UgY3JlYXRlCisgICAgICAg
IGxhemlseSB0aGUgc3RyaW5ncyBpbiBKU0dsb2JhbERhdGEuCisKKyAgICAgICAgVGhpcyBhdm9p
ZCB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSBTdHJpbmdJbXBsIGFuZCBvZiB0aGUgSlNTdHJpbmcs
CisgICAgICAgIHdoaWNoIGdpdmVzIHNvbWUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgorCisg
ICAgICAgICogcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oOgorICAgICAgICAqIHJ1bnRpbWUv
SlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnRvU3RyaW5nU2xvd0Nhc2UpOgor
ICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OmpzVHlwZVN0
cmluZ0ZvclZhbHVlKToKKyAgICAgICAgKiBydW50aW1lL1NtYWxsU3RyaW5ncy5jcHA6CisgICAg
ICAgIChKU0M6OlNtYWxsU3RyaW5nczo6U21hbGxTdHJpbmdzKToKKyAgICAgICAgKEpTQzo6U21h
bGxTdHJpbmdzOjpmaW5hbGl6ZVNtYWxsU3RyaW5ncyk6CisgICAgICAgIChKU0M6OlNtYWxsU3Ry
aW5nczo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIHJ1bnRpbWUvU21h
bGxTdHJpbmdzLmg6CisgICAgICAgIChTbWFsbFN0cmluZ3MpOgorCiAyMDEyLTAzLTE5ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRGl2aXNpb24gb3B0aW1pemF0
aW9ucyBmYWlsIHRvIGluZmVyIGNhc2VzIG9mIHRydW5jYXRlZCBkaXZpc2lvbiBhbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4
IDBkOTU4MDE5NzIyNTFkZGQ3MmQ3YzgyZDlkZGRlYmEwMjNkNTNhMjguLjE5NjJjMDM4ZmNjZmFi
N2Q2ODYzNjVjZmE5YjU2ZDdlZDE5OTMwYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtNzIsOCArNzIsNyBAQAogICAgIG1h
Y3JvKHZhbHVlKSBcCiAgICAgbWFjcm8odmFsdWVPZikgXAogICAgIG1hY3JvKHdyaXRhYmxlKSBc
Ci0gICAgbWFjcm8oZGlzcGxheU5hbWUpIFwKLSAgICBtYWNybyh1bmRlZmluZWQpCisgICAgbWFj
cm8oZGlzcGxheU5hbWUpCiAKICNkZWZpbmUgSlNDX0NPTU1PTl9JREVOVElGSUVSU19FQUNIX0tF
WVdPUkQobWFjcm8pIFwKICAgICBtYWNybyhudWxsKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVmFsdWUuY3BwCmluZGV4IDM2Njk3YzYwYzU2NjE3Y2RmMDBlNmQwNjczZmJjODBi
N2M1YWQ1YzguLjBmZTY1ODNlOWJiZDNhZjQ3YTdlYTI2YmM4MTJiZDVhNGNmNWQzMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCkBAIC0yNjAsMTkgKzI2MCwy
MCBAQCBib29sIEpTVmFsdWU6OmlzVmFsaWRDYWxsZWUoKQogCiBKU1N0cmluZyogSlNWYWx1ZTo6
dG9TdHJpbmdTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CisgICAgSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEFTU0VSVCghaXNTdHJp
bmcoKSk7CiAgICAgaWYgKGlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQoYXNJ
bnQzMigpKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZygmZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5udW1lcmljU3RyaW5ncy5hZGQoYXNJbnQzMigpKSk7CiAgICAgaWYgKGlzRG91YmxlKCkpCi0g
ICAgICAgIHJldHVybiBqc1N0cmluZygmZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxE
YXRhKCkubnVtZXJpY1N0cmluZ3MuYWRkKGFzRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpz
U3RyaW5nKCZnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLm51bWVyaWNTdHJpbmdzLmFkZChhc0RvdWJs
ZSgpKSk7CiAgICAgaWYgKGlzVHJ1ZSgpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3Ry
aW5nKGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50cnVlS2V5d29yZC51c3RyaW5nKCkpOwor
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MudHJ1ZUtleXdvcmQoJmdsb2Jh
bERhdGEpOwogICAgIGlmIChpc0ZhbHNlKCkpCi0gICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxT
dHJpbmcoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmZhbHNlS2V5d29yZC51c3RyaW5nKCkp
OworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MuZmFsc2VLZXl3b3JkKCZn
bG9iYWxEYXRhKTsKICAgICBpZiAoaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc05vbnRyaXZp
YWxTdHJpbmcoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm51bGxLZXl3b3JkLnVzdHJpbmco
KSk7CisgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5udWxsS2V5d29yZCgm
Z2xvYmFsRGF0YSk7CiAgICAgaWYgKGlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBqc05v
bnRyaXZpYWxTdHJpbmcoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnVuZGVmaW5lZC51c3Ry
aW5nKCkpOworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MudW5kZWZpbmVk
S2V5d29yZCgmZ2xvYmFsRGF0YSk7CiAKICAgICBBU1NFUlQoaXNDZWxsKCkpOwogICAgIEpTVmFs
dWUgdmFsdWUgPSBhc0NlbGwoKS0+dG9QcmltaXRpdmUoZXhlYywgUHJlZmVyU3RyaW5nKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAKaW5kZXggNDU5ZmVi
NDY2YzU2YzMzZGE0MGY1NWQwYjQ2ZjcwYTIyM2UwOGFmYS4uMWQ4MDNkNTk0ZThkOTk0YmU0Njll
NGNlZGJjMmEwZWVlMDAxMWZlZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3BlcmF0aW9ucy5jcHAKQEAgLTU4LDI1ICs1OCwyNiBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBq
c0FkZFNsb3dDYXNlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYy
KQogCiBKU1ZhbHVlIGpzVHlwZVN0cmluZ0ZvclZhbHVlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlIHYpCiB7CisgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCk7CiAgICAgaWYgKHYuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIGpz
Tm9udHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJ1bmRlZmluZWQiKTsKKyAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEuc21hbGxTdHJpbmdzLnVuZGVmaW5lZEtleXdvcmQoJmdsb2JhbERhdGEpOwog
ICAgIGlmICh2LmlzQm9vbGVhbigpKQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5n
KGNhbGxGcmFtZSwgImJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEuc21hbGxT
dHJpbmdzLmJvb2xlYW5LZXl3b3JkKCZnbG9iYWxEYXRhKTsKICAgICBpZiAodi5pc051bWJlcigp
KQotICAgICAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGNhbGxGcmFtZSwgIm51bWJlciIp
OworICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MubnVtYmVyS2V5d29yZCgm
Z2xvYmFsRGF0YSk7CiAgICAgaWYgKHYuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIGpzTm9u
dHJpdmlhbFN0cmluZyhjYWxsRnJhbWUsICJzdHJpbmciKTsKKyAgICAgICAgcmV0dXJuIGdsb2Jh
bERhdGEuc21hbGxTdHJpbmdzLnN0cmluZ0tleXdvcmQoJmdsb2JhbERhdGEpOwogICAgIGlmICh2
LmlzT2JqZWN0KCkpIHsKICAgICAgICAgLy8gUmV0dXJuICJ1bmRlZmluZWQiIGZvciBvYmplY3Rz
IHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQKICAgICAgICAgLy8gYXMgbnVsbCB3aGVuIGRvaW5nIGNv
bXBhcmlzb25zLgogICAgICAgICBpZiAoYXNPYmplY3QodiktPnN0cnVjdHVyZSgpLT50eXBlSW5m
bygpLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBqc05vbnRy
aXZpYWxTdHJpbmcoY2FsbEZyYW1lLCAidW5kZWZpbmVkIik7CisgICAgICAgICAgICByZXR1cm4g
Z2xvYmFsRGF0YS5zbWFsbFN0cmluZ3MudW5kZWZpbmVkS2V5d29yZCgmZ2xvYmFsRGF0YSk7CiAg
ICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNP
YmplY3Qodik7CiAgICAgICAgIGlmIChvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRh
KG9iamVjdCwgY2FsbERhdGEpICE9IENhbGxUeXBlTm9uZSkKLSAgICAgICAgICAgIHJldHVybiBq
c05vbnRyaXZpYWxTdHJpbmcoY2FsbEZyYW1lLCAiZnVuY3Rpb24iKTsKKyAgICAgICAgICAgIHJl
dHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5mdW5jdGlvbktleXdvcmQoJmdsb2JhbERhdGEp
OwogICAgIH0KLSAgICByZXR1cm4ganNOb250cml2aWFsU3RyaW5nKGNhbGxGcmFtZSwgIm9iamVj
dCIpOworICAgIHJldHVybiBnbG9iYWxEYXRhLnNtYWxsU3RyaW5ncy5vYmplY3RLZXl3b3JkKCZn
bG9iYWxEYXRhKTsKIH0KIAogYm9vbCBqc0lzT2JqZWN0VHlwZShKU1ZhbHVlIHYpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TbWFsbFN0cmluZ3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmNwcAppbmRleCBmZTExM2M1
ZjA1ZjFiOTljNWRmOTc0YjE2ODA1YzZmNjkwZWI0YmZkLi5mNTBmNzNkMjdjN2MwMzBmYWUyYTNk
ZmI2NjZmNWE0ZmFhYjVjMjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TbWFsbFN0cmluZ3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NtYWxsU3RyaW5ncy5jcHAKQEAgLTY4LDEwICs2OCwxMyBAQCBTbWFsbFN0cmluZ3NTdG9yYWdl
OjpTbWFsbFN0cmluZ3NTdG9yYWdlKCkKIH0KIAogU21hbGxTdHJpbmdzOjpTbWFsbFN0cmluZ3Mo
KQorICAgIDogbV9lbXB0eVN0cmluZygwKQorI2RlZmluZSBKU0NfQ09NTU9OX1NUUklOR1NfQVRU
UklCVVRFX0lOSVRJQUxJWkUobmFtZSkgLCBtXyMjbmFtZSgwKQorICAgIEpTQ19DT01NT05fU1RS
SU5HU19FQUNIX05BTUUoSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9JTklUSUFMSVpFKQor
I3VuZGVmIEpTQ19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVfSU5JVElBTElaRQogewogICAgIENP
TVBJTEVfQVNTRVJUKHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50ID09IHNpemVvZihtX3Npbmds
ZUNoYXJhY3RlclN0cmluZ3MpIC8gc2l6ZW9mKG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1swXSks
IElzTnVtQ2hhcmFjdGVyc0NvbnN0SW5TeW5jV2l0aENsYXNzVXNhZ2UpOwogCi0gICAgbV9lbXB0
eVN0cmluZyA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpbmdsZUNoYXJhY3Rl
clN0cmluZ0NvdW50OyArK2kpCiAgICAgICAgIG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXSA9
IDA7CiB9CkBAIC04NSw2ICs4OCw5IEBAIHZvaWQgU21hbGxTdHJpbmdzOjpmaW5hbGl6ZVNtYWxs
U3RyaW5ncygpCiAgICAgZmluYWxpemUobV9lbXB0eVN0cmluZyk7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpbmdsZUNoYXJhY3RlclN0cmluZ0NvdW50OyArK2kpCiAgICAgICAgIGZp
bmFsaXplKG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tpXSk7CisjZGVmaW5lIEpTQ19DT01NT05f
U1RSSU5HU19BVFRSSUJVVEVfRklOQUxJWkUobmFtZSkgZmluYWxpemUobV8jI25hbWUpOworICAg
IEpTQ19DT01NT05fU1RSSU5HU19FQUNIX05BTUUoSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVU
RV9GSU5BTElaRSkKKyN1bmRlZiBKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0ZJTkFMSVpF
CiB9CiAKIHZvaWQgU21hbGxTdHJpbmdzOjpjcmVhdGVFbXB0eVN0cmluZyhKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEpCkBAIC0xMDgsNCArMTE0LDkgQEAgU3RyaW5nSW1wbCogU21hbGxTdHJpbmdz
OjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAodW5zaWduZWQgY2hhciBjaGFyYWN0ZXIpCiAgICAg
cmV0dXJuIG1fc3RvcmFnZS0+cmVwKGNoYXJhY3Rlcik7CiB9CiAKK3ZvaWQgU21hbGxTdHJpbmdz
Ojppbml0aWFsaXplKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNTdHJpbmcqJiBzdHJpbmcs
IGNvbnN0IGNoYXIqIHZhbHVlKSBjb25zdAoreworICAgIHN0cmluZyA9IEpTU3RyaW5nOjpjcmVh
dGUoKmdsb2JhbERhdGEsIFN0cmluZ0ltcGw6OmNyZWF0ZSh2YWx1ZSkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nt
YWxsU3RyaW5ncy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdz
LmgKaW5kZXggMWNlNzA5NTllOGYwMjdjYmY5ZDMwYmE2Yjg2ZDFkZGViMmMyNGI2Yi4uZDVkN2U4
NzNiMTA3MDJlMzJiMTllODI2NGI3MDcxZTM2NjQwYTBjMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU21hbGxTdHJpbmdzLmgKQEAgLTMwLDYgKzMwLDE3IEBACiAjaW5jbHVk
ZSA8d3RmL0ZpeGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKKyNkZWZpbmUg
SlNDX0NPTU1PTl9TVFJJTkdTX0VBQ0hfTkFNRShtYWNybykgXAorICAgIG1hY3JvKGJvb2xlYW4p
IFwKKyAgICBtYWNybyhmYWxzZSkgXAorICAgIG1hY3JvKGZ1bmN0aW9uKSBcCisgICAgbWFjcm8o
bnVtYmVyKSBcCisgICAgbWFjcm8obnVsbCkgXAorICAgIG1hY3JvKG9iamVjdCkgXAorICAgIG1h
Y3JvKHVuZGVmaW5lZCkgXAorICAgIG1hY3JvKHN0cmluZykgXAorICAgIG1hY3JvKHRydWUpCisK
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgSGVhcFJvb3RWaXNpdG9yOwpAQCAtNjYsMTMg
Kzc3LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTU3RyaW5nKiogc2luZ2xlQ2hh
cmFjdGVyU3RyaW5ncygpIHsgcmV0dXJuICZtX3NpbmdsZUNoYXJhY3RlclN0cmluZ3NbMF07IH0K
IAorI2RlZmluZSBKU0NfQ09NTU9OX1NUUklOR1NfQUNDRVNTT1JfREVGSU5JVElPTihuYW1lKSBc
CisgICAgICAgIEpTU3RyaW5nKiBuYW1lIyNLZXl3b3JkKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkgY29uc3QgXAorICAgICAgICB7IFwKKyAgICAgICAgICAgIGlmICghbV8jI25hbWUpIFwKKyAg
ICAgICAgICAgICAgICBpbml0aWFsaXplKGdsb2JhbERhdGEsIG1fIyNuYW1lLCAjbmFtZSk7IFwK
KyAgICAgICAgICAgIHJldHVybiBtXyMjbmFtZTsgXAorICAgICAgICB9CisgICAgICAgIEpTQ19D
T01NT05fU1RSSU5HU19FQUNIX05BTUUoSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklO
SVRJT04pCisjdW5kZWYgSlNDX0NPTU1PTl9TVFJJTkdTX0FDQ0VTU09SX0RFRklOSVRJT04KKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaW5nbGVDaGFyYWN0
ZXJTdHJpbmdDb3VudCA9IG1heFNpbmdsZUNoYXJhY3RlclN0cmluZyArIDE7CiAKICAgICAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjcmVhdGVFbXB0eVN0cmluZyhKU0dsb2JhbERhdGEqKTsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoSlNHbG9iYWxEYXRhKiwgdW5zaWduZWQgY2hhcik7CiAKKyAgICAgICAgdm9pZCBpbml0aWFs
aXplKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNTdHJpbmcqJiBzdHJpbmcsIGNvbnN0IGNo
YXIqIHZhbHVlKSBjb25zdDsKKwogICAgICAgICBKU1N0cmluZyogbV9lbXB0eVN0cmluZzsKKyNk
ZWZpbmUgSlNDX0NPTU1PTl9TVFJJTkdTX0FUVFJJQlVURV9ERUNMQVJBVElPTihuYW1lKSBtdXRh
YmxlIEpTU3RyaW5nKiBtXyMjbmFtZTsKKyAgICAgICAgSlNDX0NPTU1PTl9TVFJJTkdTX0VBQ0hf
TkFNRShKU0NfQ09NTU9OX1NUUklOR1NfQVRUUklCVVRFX0RFQ0xBUkFUSU9OKQorI3VuZGVmIEpT
Q19DT01NT05fU1RSSU5HU19BVFRSSUJVVEVfREVDTEFSQVRJT04KICAgICAgICAgSlNTdHJpbmcq
IG1fc2luZ2xlQ2hhcmFjdGVyU3RyaW5nc1tzaW5nbGVDaGFyYWN0ZXJTdHJpbmdDb3VudF07CiAg
ICAgICAgIE93blB0cjxTbWFsbFN0cmluZ3NTdG9yYWdlPiBtX3N0b3JhZ2U7CiAgICAgfTsK
</data>
<flag name="review"
          id="136520"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>