<?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>59662</bug_id>
          
          <creation_ts>2011-04-27 18:11:56 -0700</creation_ts>
          <short_desc>showLineTree/showLineTreeForThis would make working with the line box tree easier</short_desc>
          <delta_ts>2011-05-02 13:24:29 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>394043</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-04-27 18:11:56 -0700</bug_when>
    <thetext>I&apos;m volunteering to get this done since it&apos;s bothered me enough. Please add any feature requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394213</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-27 22:20:41 -0700</bug_when>
    <thetext>SGTM. :)  We should also fix the existing ones so they always work!  So often they get confused by anonymous nodes, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395540</commentid>
    <comment_count>2</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-04-29 15:02:04 -0700</bug_when>
    <thetext>Here&apos;s some sample output where &quot;this&quot; is the RenderText that corresponds to the 3 marked InlineTextBoxes.

(gdb) p this-&gt;showLineTreeForThis()
RenderBlock 0x106eb4788                	DIV	0x106eb4680
  RootInlineBox	0x106ebecb8            	RenderBlock 0x106eb4788
    InlineTextBox	0x106ec0068          	RenderText 0x106eb4918 (0,30) &quot;A line with just text and a br&quot;
    InlineTextBox	0x106ebed78          	RenderBR 0x106eb4a88   (0,1) &quot;\n&quot;
  RootInlineBox	0x106ebfee8            	RenderBlock 0x106eb4788
*   InlineTextBox	0x106ebfe78          	RenderText 0x106eb4d78 (0,27) &quot;A line with some collapsed &quot;
*   InlineTextBox	0x106ebffa8          	RenderText 0x106eb4d78 (32,48) &quot;spaces and line &quot;
*   InlineTextBox	0x106ebf6b8          	RenderText 0x106eb4d78 (50,56) &quot;breaks&quot;
    InlineTextBox	0x106ebf728          	RenderBR 0x106eb4ee8   (0,1) &quot;\n&quot;
  RootInlineBox	0x106ebf858            	RenderBlock 0x106eb4788
    InlineTextBox	0x106ebf7e8          	RenderText 0x106eb4fd8 (1,13) &quot;Here&apos;s some &quot;
    InlineTextBox	0x106ebf918          	RenderText 0x106eb6738 (7,9) &quot;! &quot;
    InlineTextBox	0x106ebf988          	RenderText 0x106eb5e48 (1,5) &quot;RTL &quot;
    InlineTextBox	0x106ebf9f8          	RenderText 0x106eb6358 (0,16) &quot;with nested ltr &quot;
    InlineFlowBox	0x106ebfad8          	RenderInline 0x106eb6528
      InlineTextBox	0x106ebfa68        	RenderText 0x106eb6658 (0,19) &quot;and a bordered span&quot;
    InlineTextBox	0x106ebfb68          	RenderText 0x106eb6738 (0,7) &quot; SHALOM&quot;
    InlineTextBox	0x106ebfbd8          	RenderText 0x106eb6818 (0,1) &quot;.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395564</commentid>
    <comment_count>3</comment_count>
      <attachid>91753</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-04-29 15:31:49 -0700</bug_when>
    <thetext>Created attachment 91753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395580</commentid>
    <comment_count>4</comment_count>
      <attachid>91753</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-29 15:44:19 -0700</bug_when>
    <thetext>Comment on attachment 91753
Patch

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

&gt; Source/WebCore/rendering/InlineFlowBox.cpp:1435
&gt; +void InlineFlowBox::showLineTreeAndMark(const InlineBox* markedBox1, const char* markedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const RenderObject* obj, int depth) const

Why do we pass non-null pointers to markedBox1 and markedBox2?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395637</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-29 17:22:07 -0700</bug_when>
    <thetext>So fantastic.  I&apos;m so excited about this debugging feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395642</commentid>
    <comment_count>6</comment_count>
      <attachid>91753</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-29 17:26:48 -0700</bug_when>
    <thetext>Comment on attachment 91753
Patch

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

&gt; Source/WebCore/rendering/InlineBox.cpp:118
&gt; +    const char* boxName = 0;
&gt; +    if (isRootInlineBox())
&gt; +        boxName = &quot;RootInlineBox&quot;;
&gt; +    else if (isInlineFlowBox())
&gt; +        boxName = &quot;InlineFlowBox&quot;;
&gt; +    else
&gt; +        boxName = &quot;InlineBox&quot;;

The rendering tree has renderName() or something like that.  Seems we should do similarly for the linebox tree.

&gt; Source/WebCore/rendering/InlineBox.cpp:120
&gt; +    for (; printedCharacters &lt; 39; printedCharacters++)

Names are useful for constants.

&gt; Source/WebCore/rendering/InlineFlowBox.cpp:1439
&gt; +        box-&gt;showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLabel2, obj, depth+1);

I believe our style is spaces around operators.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1292
&gt; +    value = value.substring(start(), len());
&gt; +    value.replace(&apos;\\&apos;, &quot;\\\\&quot;);
&gt; +    value.replace(&apos;\n&apos;, &quot;\\n&quot;);

Can we do string manipulation like this in the debugger?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1294
&gt; +    for (; printedCharacters &lt; 39; printedCharacters++)

What&apos;s with the constants?  Can they have names?

&gt; Source/WebCore/rendering/RenderBlock.cpp:6272
&gt; +void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* markedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const RenderObject* obj) const

Feels like box and label are a class.

&gt; Source/WebCore/rendering/RenderObject.cpp:2668
&gt; +    if (ro)

object would be better than ro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396524</commentid>
    <comment_count>7</comment_count>
      <attachid>91753</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-02 11:59:39 -0700</bug_when>
    <thetext>Comment on attachment 91753
Patch

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

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:1294
&gt;&gt; +    for (; printedCharacters &lt; 39; printedCharacters++)
&gt; 
&gt; What&apos;s with the constants?  Can they have names?

39 is the arbitrary value showRenderTree uses to align corresponding DOM nodes to the right of the displayed RenderObjects. I re-used this for consistency and because I call showRenderObject on the containing RenderBlock. I suppose I could throw it in RenderObject.h or something so it can be re-used all the places it exists.

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:6272
&gt;&gt; +void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* markedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const RenderObject* obj) const
&gt; 
&gt; Feels like box and label are a class.

I&apos;d honestly hate to add a box/label class just for this debugging feature. This mirrors showTreeAndMark from Node.

&gt;&gt; Source/WebCore/rendering/RenderObject.cpp:2668
&gt;&gt; +    if (ro)
&gt; 
&gt; object would be better than ro.

Just mirroring the showTree above. I can rename both if it&apos;s worthwhile, but I don&apos;t foresee anyone being confused by these functions :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396556</commentid>
    <comment_count>8</comment_count>
      <attachid>91958</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-02 12:37:27 -0700</bug_when>
    <thetext>Created attachment 91958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396579</commentid>
    <comment_count>9</comment_count>
      <attachid>91958</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-02 13:12:38 -0700</bug_when>
    <thetext>Comment on attachment 91958
Patch

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

&gt; Source/WebCore/rendering/InlineBox.h:154
&gt; +    virtual const char* boxName() const;

I would have just defined boxName in the header, even though it isn&apos;t actually &quot;inline&quot;. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396586</commentid>
    <comment_count>10</comment_count>
      <attachid>91958</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-02 13:23:24 -0700</bug_when>
    <thetext>Comment on attachment 91958
Patch

Clearing flags on attachment: 91958

Committed r85512: &lt;http://trac.webkit.org/changeset/85512&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396587</commentid>
    <comment_count>11</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-02 13:23:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396588</commentid>
    <comment_count>12</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-02 13:24:29 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; All reviewed patches have been landed.  Closing bug.

Thanks for the review!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91753</attachid>
            <date>2011-04-29 15:31:49 -0700</date>
            <delta_ts>2011-05-02 12:37:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59662-20110429153148.patch</filename>
            <type>text/plain</type>
            <size>11308</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1MzYxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDQtMjkgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIHNob3dMaW5lVHJlZS9zaG93TGluZVRyZWVGb3JUaGlzIHdv
dWxkIG1ha2Ugd29ya2luZyB3aXRoIHRoZSBsaW5lIGJveCB0cmVlIGVhc2llcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NjIKKworICAgICAgICBB
ZGRpbmcgYSBzaG93TGluZVRyZWUvc2hvd0xpbmVUcmVlRm9yVGhpcyBtZXRob2QgdG8gaGVscCB2
aXN1YWxpemUgYW5kIGRlYnVnCisgICAgICAgIHRoZSBsaW5lIHRyZWUuIEFsc28gYWRkaW5nIGEg
bWlzc2luZyBzaG93UmVuZGVyVHJlZUZvclRoaXMgbWV0aG9kIHRvIFJlbmRlck9iamVjdC4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhpcyBpcyBhIGRlYnVnZ2luZyBmZWF0dXJlIG9u
bHkgYW5kIG5vdCBjb21waWxlZCBpbiByZWxlYXNlLgorCisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNob3dMaW5lVHJlZUZv
clRoaXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpzaG93TGluZVRyZWVBbmRNYXJr
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6c2hvd0JveCk6CisgICAgICAgIChzaG93
TGluZVRyZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93
Qm94OjpzaG93TGluZVRyZWVBbmRNYXJrKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNob3dCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaG93TGluZVRyZWVBbmRNYXJrKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2hvd1JlbmRlclRy
ZWVGb3JUaGlzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2hvd0xpbmVUcmVl
Rm9yVGhpcyk6CisgICAgICAgIChzaG93TGluZVRyZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDoKKwogMjAxMS0wNC0yOSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBidWlsZGZpeCBhZnRlciByODUz
NDMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2aXNpb24g
ODUwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODQsNiArODQsNDMgQEAgdm9pZCBJbmxpbmVCb3g6OnNob3dUcmVlRm9yVGhp
cygpIGNvbnN0CiAgICAgaWYgKG1fcmVuZGVyZXIpCiAgICAgICAgIG1fcmVuZGVyZXItPnNob3dU
cmVlRm9yVGhpcygpOwogfQorCit2b2lkIElubGluZUJveDo6c2hvd0xpbmVUcmVlRm9yVGhpcygp
IGNvbnN0Cit7CisgICAgaWYgKG1fcmVuZGVyZXIpCisgICAgICAgIG1fcmVuZGVyZXItPmNvbnRh
aW5pbmdCbG9jaygpLT5zaG93TGluZVRyZWVBbmRNYXJrKHRoaXMsICIqIik7Cit9CisKK3ZvaWQg
SW5saW5lQm94OjpzaG93TGluZVRyZWVBbmRNYXJrKGNvbnN0IElubGluZUJveCogbWFya2VkQm94
MSwgY29uc3QgY2hhciogbWFya2VkTGFiZWwxLCBjb25zdCBJbmxpbmVCb3gqIG1hcmtlZEJveDIs
IGNvbnN0IGNoYXIqIG1hcmtlZExhYmVsMiwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmosIGludCBk
ZXB0aCkgY29uc3QKK3sKKyAgICBpbnQgcHJpbnRlZENoYXJhY3RlcnMgPSAwOworICAgIGlmICh0
aGlzID09IG1hcmtlZEJveDEpCisgICAgICAgIHByaW50ZWRDaGFyYWN0ZXJzICs9IGZwcmludGYo
c3RkZXJyLCAiJXMiLCBtYXJrZWRMYWJlbDEpOworICAgIGlmICh0aGlzID09IG1hcmtlZEJveDIp
CisgICAgICAgIHByaW50ZWRDaGFyYWN0ZXJzICs9IGZwcmludGYoc3RkZXJyLCAiJXMiLCBtYXJr
ZWRMYWJlbDIpOworICAgIGlmIChyZW5kZXJlcigpID09IG9iaikKKyAgICAgICAgcHJpbnRlZENo
YXJhY3RlcnMgKz0gZnByaW50ZihzdGRlcnIsICIqIik7CisgICAgZm9yICg7IHByaW50ZWRDaGFy
YWN0ZXJzIDwgZGVwdGggKiAyOyBwcmludGVkQ2hhcmFjdGVycysrKQorICAgICAgICBmcHV0Yygn
ICcsIHN0ZGVycik7CisKKyAgICBzaG93Qm94KHByaW50ZWRDaGFyYWN0ZXJzKTsKK30KKwordm9p
ZCBJbmxpbmVCb3g6OnNob3dCb3goaW50IHByaW50ZWRDaGFyYWN0ZXJzKSBjb25zdAoreworICAg
IGNvbnN0IFJlbmRlck9iamVjdCogb2JqID0gcmVuZGVyZXIoKTsKKyAgICBjb25zdCBjaGFyKiBi
b3hOYW1lID0gMDsKKyAgICBpZiAoaXNSb290SW5saW5lQm94KCkpCisgICAgICAgIGJveE5hbWUg
PSAiUm9vdElubGluZUJveCI7CisgICAgZWxzZSBpZiAoaXNJbmxpbmVGbG93Qm94KCkpCisgICAg
ICAgIGJveE5hbWUgPSAiSW5saW5lRmxvd0JveCI7CisgICAgZWxzZQorICAgICAgICBib3hOYW1l
ID0gIklubGluZUJveCI7CisgICAgcHJpbnRlZENoYXJhY3RlcnMgKz0gZnByaW50ZihzdGRlcnIs
ICIlc1x0JXAiLCBib3hOYW1lLCB0aGlzKTsKKyAgICBmb3IgKDsgcHJpbnRlZENoYXJhY3RlcnMg
PCAzOTsgcHJpbnRlZENoYXJhY3RlcnMrKykKKyAgICAgICAgZnB1dGMoJyAnLCBzdGRlcnIpOwor
ICAgIGZwcmludGYoc3RkZXJyLCAiXHQlcyAlcFxuIiwgb2JqID8gb2JqLT5yZW5kZXJOYW1lKCkg
OiAiTm8gUmVuZGVyZXIiLCBvYmopOworfQogI2VuZGlmCiAKIGludCBJbmxpbmVCb3g6OmxvZ2lj
YWxIZWlnaHQoKSBjb25zdApAQCAtMzM5LDQgKzM3NiwxMCBAQCB2b2lkIHNob3dUcmVlKGNvbnN0
IFdlYkNvcmU6OklubGluZUJveCogCiAgICAgICAgIGItPnNob3dUcmVlRm9yVGhpcygpOwogfQog
Cit2b2lkIHNob3dMaW5lVHJlZShjb25zdCBXZWJDb3JlOjpJbmxpbmVCb3gqIGIpCit7CisgICAg
aWYgKGIpCisgICAgICAgIGItPnNob3dMaW5lVHJlZUZvclRoaXMoKTsKK30KKwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA4NTA5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ3LDYgKzE0Nyw5IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAjaWZuZGVmIE5ERUJVRwogICAgIHZv
aWQgc2hvd1RyZWVGb3JUaGlzKCkgY29uc3Q7CisgICAgdm9pZCBzaG93TGluZVRyZWVGb3JUaGlz
KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNob3dCb3goaW50ID0gMCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHNob3dMaW5lVHJlZUFuZE1hcmsoY29uc3QgSW5saW5lQm94KiA9IDAsIGNv
bnN0IGNoYXIqID0gMCwgY29uc3QgSW5saW5lQm94KiA9IDAsIGNvbnN0IGNoYXIqID0gMCwgY29u
c3QgUmVuZGVyT2JqZWN0KiA9IDAsIGludCA9IDApIGNvbnN0OwogI2VuZGlmCiAKICAgICBib29s
IGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0OyB9CkBAIC0zODYsNiArMzg5LDcgQEAg
aW5saW5lIHZvaWQgSW5saW5lQm94OjpzZXRIYXNCYWRQYXJlbnQoKQogI2lmbmRlZiBOREVCVUcK
IC8vIE91dHNpZGUgdGhlIFdlYkNvcmUgbmFtZXNwYWNlIGZvciBlYXNlIG9mIGludm9jYXRpb24g
ZnJvbSBnZGIuCiB2b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OklubGluZUJveCopOwordm9p
ZCBzaG93TGluZVRyZWUoY29uc3QgV2ViQ29yZTo6SW5saW5lQm94Kik7CiAjZW5kaWYKIAogI2Vu
ZGlmIC8vIElubGluZUJveF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCShyZXZpc2lvbiA4NTA5OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzMiw2ICsxNDMyLDEzIEBA
IHZvaWQgSW5saW5lRmxvd0JveDo6Y29sbGVjdExlYWZCb3hlc0luTG8KIAogI2lmbmRlZiBOREVC
VUcKIAordm9pZCBJbmxpbmVGbG93Qm94OjpzaG93TGluZVRyZWVBbmRNYXJrKGNvbnN0IElubGlu
ZUJveCogbWFya2VkQm94MSwgY29uc3QgY2hhciogbWFya2VkTGFiZWwxLCBjb25zdCBJbmxpbmVC
b3gqIG1hcmtlZEJveDIsIGNvbnN0IGNoYXIqIG1hcmtlZExhYmVsMiwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmosIGludCBkZXB0aCkgY29uc3QKK3sKKyAgICBJbmxpbmVCb3g6OnNob3dMaW5lVHJl
ZUFuZE1hcmsobWFya2VkQm94MSwgbWFya2VkTGFiZWwxLCBtYXJrZWRCb3gyLCBtYXJrZWRMYWJl
bDIsIG9iaiwgZGVwdGgpOworICAgIGZvciAoY29uc3QgSW5saW5lQm94KiBib3ggPSBmaXJzdENo
aWxkKCk7IGJveDsgYm94ID0gYm94LT5uZXh0T25MaW5lKCkpCisgICAgICAgIGJveC0+c2hvd0xp
bmVUcmVlQW5kTWFyayhtYXJrZWRCb3gxLCBtYXJrZWRMYWJlbDEsIG1hcmtlZEJveDIsIG1hcmtl
ZExhYmVsMiwgb2JqLCBkZXB0aCsxKTsKK30KKwogdm9pZCBJbmxpbmVGbG93Qm94OjpjaGVja0Nv
bnNpc3RlbmN5KCkgY29uc3QKIHsKICNpZmRlZiBDSEVDS19DT05TSVNURU5DWQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA4NTA5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDYgKzYxLDggQEAgcHVibGljOgogCiAjaWZuZGVmIE5ERUJVRwogICAgIHZpcnR1YWwg
fklubGluZUZsb3dCb3goKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgc2hvd0xpbmVUcmVlQW5k
TWFyayhjb25zdCBJbmxpbmVCb3gqID0gMCwgY29uc3QgY2hhciogPSAwLCBjb25zdCBJbmxpbmVC
b3gqID0gMCwgY29uc3QgY2hhciogPSAwLCBjb25zdCBSZW5kZXJPYmplY3QqID0gMCwgaW50ID0g
MCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIElubGluZUZsb3dCb3gqIHByZXZMaW5lQm94KCkgY29u
c3QgeyByZXR1cm4gbV9wcmV2TGluZUJveDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gODUwOTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODIsNCAr
MTI4MiwyMiBAQCBib29sIElubGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZzZXQoCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCit2b2lkIElubGluZVRleHRCb3g6OnNo
b3dCb3goaW50IHByaW50ZWRDaGFyYWN0ZXJzKSBjb25zdAoreworICAgIGNvbnN0IFJlbmRlclRl
eHQqIG9iaiA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBv
YmotPnRleHQoKTsKKyAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyhzdGFydCgpLCBsZW4oKSk7
CisgICAgdmFsdWUucmVwbGFjZSgnXFwnLCAiXFxcXCIpOworICAgIHZhbHVlLnJlcGxhY2UoJ1xu
JywgIlxcbiIpOworICAgIHByaW50ZWRDaGFyYWN0ZXJzICs9IGZwcmludGYoc3RkZXJyLCAiJXNc
dCVwIiwgIklubGluZVRleHRCb3giLCB0aGlzKTsKKyAgICBmb3IgKDsgcHJpbnRlZENoYXJhY3Rl
cnMgPCAzOTsgcHJpbnRlZENoYXJhY3RlcnMrKykKKyAgICAgICAgZnB1dGMoJyAnLCBzdGRlcnIp
OworICAgIHByaW50ZWRDaGFyYWN0ZXJzID0gZnByaW50ZihzdGRlcnIsICJcdCVzICVwIiwgb2Jq
LT5yZW5kZXJOYW1lKCksIG9iaik7CisgICAgZm9yICg7IHByaW50ZWRDaGFyYWN0ZXJzIDwgMjQ7
IHByaW50ZWRDaGFyYWN0ZXJzKyspCisgICAgICAgIGZwdXRjKCcgJywgc3RkZXJyKTsKKyAgICBm
cHJpbnRmKHN0ZGVyciwgIiglZCwlZCkgXCIlc1wiXG4iLCBzdGFydCgpLCBzdGFydCgpICsgbGVu
KCksIHZhbHVlLnV0ZjgoKS5kYXRhKCkpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2
aXNpb24gODUwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCwxMCBAQCBwdWJsaWM6CiAgICAgaW50IGxvZ2lj
YWxCb3R0b21WaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIGxvZ2ljYWxPdmVyZmxvd1Jl
Y3QoKS5tYXhZKCk7IH0KICAgICBpbnQgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIGxvZ2ljYWxPdmVyZmxvd1JlY3QoKS54KCk7IH0KICAgICBpbnQgbG9naWNhbFJp
Z2h0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBsb2dpY2FsT3ZlcmZsb3dSZWN0KCku
bWF4WCgpOyB9Ci0gICAgCisKKyNpZm5kZWYgTkRFQlVHCisgICAgdmlydHVhbCB2b2lkIHNob3dC
b3goaW50ID0gMCkgY29uc3Q7CisjZW5kaWYKIHByaXZhdGU6CiAgICAgaW50IHNlbGVjdGlvblRv
cCgpOwogICAgIGludCBzZWxlY3Rpb25Cb3R0b20oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gODUwOTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjY2LDQgKzYy
NjYsMTYgQEAgaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0cwogICAgICAg
ICBtX3JpZ2h0T2JqZWN0c0NvdW50LS07CiB9CiAKKworI2lmbmRlZiBOREVCVUcKKwordm9pZCBS
ZW5kZXJCbG9jazo6c2hvd0xpbmVUcmVlQW5kTWFyayhjb25zdCBJbmxpbmVCb3gqIG1hcmtlZEJv
eDEsIGNvbnN0IGNoYXIqIG1hcmtlZExhYmVsMSwgY29uc3QgSW5saW5lQm94KiBtYXJrZWRCb3gy
LCBjb25zdCBjaGFyKiBtYXJrZWRMYWJlbDIsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqKSBjb25z
dAoreworICAgIHNob3dSZW5kZXJPYmplY3QoKTsKKyAgICBmb3IgKGNvbnN0IFJvb3RJbmxpbmVC
b3gqIHJvb3QgPSBmaXJzdFJvb3RCb3goKTsgcm9vdDsgcm9vdCA9IHJvb3QtPm5leHRSb290Qm94
KCkpCisgICAgICAgIHJvb3QtPnNob3dMaW5lVHJlZUFuZE1hcmsobWFya2VkQm94MSwgbWFya2Vk
TGFiZWwxLCBtYXJrZWRCb3gyLCBtYXJrZWRMYWJlbDIsIG9iaiwgMSk7Cit9CisKKyNlbmRpZgor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkocmV2aXNpb24gODUwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSw5IEBAIHB1YmxpYzoK
ICAgICBpbnQgbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpICsg
YXZhaWxhYmxlTG9naWNhbFdpZHRoKCkgOiBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSArIGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOyB9CiAgICAgaW50IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBib3JkZXJM
ZWZ0KCkgKyBwYWRkaW5nTGVmdCgpIDogYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCk7IH0KIAor
I2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIHNob3dMaW5lVHJlZUFuZE1hcmsoY29uc3QgSW5saW5l
Qm94KiA9IDAsIGNvbnN0IGNoYXIqID0gMCwgY29uc3QgSW5saW5lQm94KiA9IDAsIGNvbnN0IGNo
YXIqID0gMCwgY29uc3QgUmVuZGVyT2JqZWN0KiA9IDApIGNvbnN0OworI2VuZGlmCiBwcm90ZWN0
ZWQ6CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IHVzZWQgaW50ZXJuYWxseSB0byBt
YW5pcHVsYXRlIHRoZSByZW5kZXIgdHJlZSBzdHJ1Y3R1cmUgdmlhIHJlbW92ZS9pbnNlcnQvYXBw
ZW5kQ2hpbGROb2RlLgogICAgIC8vIFNpbmNlIHRoZXkgYXJlIHR5cGljYWxseSBjYWxsZWQgb25s
eSB0byBtb3ZlIG9iamVjdHMgYXJvdW5kIHdpdGhpbiBhbm9ueW1vdXMgYmxvY2tzICh3aGljaCBv
bmx5IGhhdmUgbGF5ZXJzIGluCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAkocmV2aXNpb24gODUwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5Myw2ICsxMzkzLDE3IEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjpzaG93VHJlZUZvclRoaXMoKSBjb24KICAgICAgICAgbm9kZSgpLT5z
aG93VHJlZUZvclRoaXMoKTsKIH0KIAordm9pZCBSZW5kZXJPYmplY3Q6OnNob3dSZW5kZXJUcmVl
Rm9yVGhpcygpIGNvbnN0Cit7CisgICAgc2hvd1JlbmRlclRyZWUodGhpcywgMCk7Cit9CisKK3Zv
aWQgUmVuZGVyT2JqZWN0OjpzaG93TGluZVRyZWVGb3JUaGlzKCkgY29uc3QKK3sKKyAgICBpZiAo
Y29udGFpbmluZ0Jsb2NrKCkpCisgICAgICAgIGNvbnRhaW5pbmdCbG9jaygpLT5zaG93TGluZVRy
ZWVBbmRNYXJrKDAsIDAsIDAsIDAsIHRoaXMpOworfQorCiB2b2lkIFJlbmRlck9iamVjdDo6c2hv
d1JlbmRlck9iamVjdCgpIGNvbnN0CiB7CiAgICAgc2hvd1JlbmRlck9iamVjdCgwKTsKQEAgLTI2
NTIsNiArMjY2MywxMiBAQCB2b2lkIHNob3dUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlck9iamVj
CiAgICAgICAgIHJvLT5zaG93VHJlZUZvclRoaXMoKTsKIH0KIAordm9pZCBzaG93TGluZVRyZWUo
Y29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiBybykKK3sKKyAgICBpZiAocm8pCisgICAgICAg
IHJvLT5zaG93TGluZVRyZWVGb3JUaGlzKCk7Cit9CisKIHZvaWQgc2hvd1JlbmRlclRyZWUoY29u
c3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiBvYmplY3QxKQogewogICAgIHNob3dSZW5kZXJUcmVl
KG9iamVjdDEsIDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAkocmV2aXNpb24gODUwOTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw2ICsyMjIsOCBAQCBwcml2YXRlOgogcHVibGlj
OgogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIHNob3dUcmVlRm9yVGhpcygpIGNvbnN0OworICAg
IHZvaWQgc2hvd1JlbmRlclRyZWVGb3JUaGlzKCkgY29uc3Q7CisgICAgdm9pZCBzaG93TGluZVRy
ZWVGb3JUaGlzKCkgY29uc3Q7CiAKICAgICB2b2lkIHNob3dSZW5kZXJPYmplY3QoKSBjb25zdDsK
ICAgICAvLyBXZSBkb24ndCBtYWtlIHByaW50ZWRDaGFyYWN0ZXJzIGFuIG9wdGlvbmFsIHBhcmFt
ZXRlciBzbyB0aGF0CkBAIC0xMTI2LDYgKzExMjgsNyBAQCBpbmxpbmUgdm9pZCBhZGp1c3RGbG9h
dFJlY3RGb3JQYWdlU2NhbGUoCiAjaWZuZGVmIE5ERUJVRwogLy8gT3V0c2lkZSB0aGUgV2ViQ29y
ZSBuYW1lc3BhY2UgZm9yIGVhc2Ugb2YgaW52b2NhdGlvbiBmcm9tIGdkYi4KIHZvaWQgc2hvd1Ry
ZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kik7Cit2b2lkIHNob3dMaW5lVHJlZShjb25z
dCBXZWJDb3JlOjpSZW5kZXJPYmplY3QqKTsKIHZvaWQgc2hvd1JlbmRlclRyZWUoY29uc3QgV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0KiBvYmplY3QxKTsKIC8vIFdlIGRvbid0IG1ha2Ugb2JqZWN0MiBh
biBvcHRpb25hbCBwYXJhbWV0ZXIgc28gdGhhdCBzaG93UmVuZGVyVHJlZQogLy8gY2FuIGJlIGNh
bGxlZCBmcm9tIGdkYiBlYXNpbHkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91958</attachid>
            <date>2011-05-02 12:37:27 -0700</date>
            <delta_ts>2011-05-02 13:23:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59662-20110502123725.patch</filename>
            <type>text/plain</type>
            <size>13500</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg1NDg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDUtMDIgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIHNob3dMaW5lVHJlZS9zaG93TGluZVRyZWVGb3JUaGlzIHdv
dWxkIG1ha2Ugd29ya2luZyB3aXRoIHRoZSBsaW5lIGJveCB0cmVlIGVhc2llcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NjIKKworICAgICAgICBB
ZGRpbmcgYSBzaG93TGluZVRyZWUvc2hvd0xpbmVUcmVlRm9yVGhpcyBtZXRob2QgdG8gaGVscCB2
aXN1YWxpemUgYW5kIGRlYnVnCisgICAgICAgIHRoZSBsaW5lIHRyZWUuIEFsc28gYWRkaW5nIGEg
bWlzc2luZyBzaG93UmVuZGVyVHJlZUZvclRoaXMgbWV0aG9kIHRvIFJlbmRlck9iamVjdC4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgdGhpcyBpcyBhIGRlYnVnZ2luZyBmZWF0dXJlIG9u
bHkgYW5kIG5vdCBjb21waWxlZCBpbiByZWxlYXNlLgorCisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNob3dMaW5lVHJlZUZv
clRoaXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpzaG93TGluZVRyZWVBbmRNYXJr
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6c2hvd0JveCk6CisgICAgICAgIChzaG93
TGluZVRyZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93
Qm94OjpzaG93TGluZVRyZWVBbmRNYXJrKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNob3dCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaG93TGluZVRyZWVBbmRNYXJrKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2hvd1JlbmRlclRy
ZWVGb3JUaGlzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2hvd0xpbmVUcmVl
Rm9yVGhpcyk6CisgICAgICAgIChzaG93VHJlZSk6CisgICAgICAgIChzaG93TGluZVRyZWUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKwogMjAxMS0wNS0wMiAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdhdmluIEJhcnJh
Y2xvdWdoLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHJldmlz
aW9uIDg1NDg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDExICs3OSw0NSBAQCB2b2lkIElubGluZUJveDo6b3BlcmF0b3Ig
ZGVsZXRlKHZvaWQqIHB0CiB9CiAKICNpZm5kZWYgTkRFQlVHCitjb25zdCBjaGFyKiBJbmxpbmVC
b3g6OmJveE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiSW5saW5lQm94IjsKK30KKwogdm9p
ZCBJbmxpbmVCb3g6OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fcmVuZGVy
ZXIpCiAgICAgICAgIG1fcmVuZGVyZXItPnNob3dUcmVlRm9yVGhpcygpOwogfQorCit2b2lkIElu
bGluZUJveDo6c2hvd0xpbmVUcmVlRm9yVGhpcygpIGNvbnN0Cit7CisgICAgaWYgKG1fcmVuZGVy
ZXIpCisgICAgICAgIG1fcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpLT5zaG93TGluZVRyZWVB
bmRNYXJrKHRoaXMsICIqIik7Cit9CisKK3ZvaWQgSW5saW5lQm94OjpzaG93TGluZVRyZWVBbmRN
YXJrKGNvbnN0IElubGluZUJveCogbWFya2VkQm94MSwgY29uc3QgY2hhciogbWFya2VkTGFiZWwx
LCBjb25zdCBJbmxpbmVCb3gqIG1hcmtlZEJveDIsIGNvbnN0IGNoYXIqIG1hcmtlZExhYmVsMiwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmosIGludCBkZXB0aCkgY29uc3QKK3sKKyAgICBpbnQgcHJp
bnRlZENoYXJhY3RlcnMgPSAwOworICAgIGlmICh0aGlzID09IG1hcmtlZEJveDEpCisgICAgICAg
IHByaW50ZWRDaGFyYWN0ZXJzICs9IGZwcmludGYoc3RkZXJyLCAiJXMiLCBtYXJrZWRMYWJlbDEp
OworICAgIGlmICh0aGlzID09IG1hcmtlZEJveDIpCisgICAgICAgIHByaW50ZWRDaGFyYWN0ZXJz
ICs9IGZwcmludGYoc3RkZXJyLCAiJXMiLCBtYXJrZWRMYWJlbDIpOworICAgIGlmIChyZW5kZXJl
cigpID09IG9iaikKKyAgICAgICAgcHJpbnRlZENoYXJhY3RlcnMgKz0gZnByaW50ZihzdGRlcnIs
ICIqIik7CisgICAgZm9yICg7IHByaW50ZWRDaGFyYWN0ZXJzIDwgZGVwdGggKiAyOyBwcmludGVk
Q2hhcmFjdGVycysrKQorICAgICAgICBmcHV0YygnICcsIHN0ZGVycik7CisKKyAgICBzaG93Qm94
KHByaW50ZWRDaGFyYWN0ZXJzKTsKK30KKwordm9pZCBJbmxpbmVCb3g6OnNob3dCb3goaW50IHBy
aW50ZWRDaGFyYWN0ZXJzKSBjb25zdAoreworICAgIHByaW50ZWRDaGFyYWN0ZXJzICs9IGZwcmlu
dGYoc3RkZXJyLCAiJXNcdCVwIiwgYm94TmFtZSgpLCB0aGlzKTsKKyAgICBmb3IgKDsgcHJpbnRl
ZENoYXJhY3RlcnMgPCBzaG93VHJlZUNoYXJhY3Rlck9mZnNldDsgcHJpbnRlZENoYXJhY3RlcnMr
KykKKyAgICAgICAgZnB1dGMoJyAnLCBzdGRlcnIpOworICAgIGZwcmludGYoc3RkZXJyLCAiXHQl
cyAlcFxuIiwgcmVuZGVyZXIoKSA/IHJlbmRlcmVyKCktPnJlbmRlck5hbWUoKSA6ICJObyBSZW5k
ZXJlciIsIHJlbmRlcmVyKCkpOworfQogI2VuZGlmCiAKIGludCBJbmxpbmVCb3g6OmxvZ2ljYWxI
ZWlnaHQoKSBjb25zdApAQCAtMzM5LDQgKzM3MywxMCBAQCB2b2lkIHNob3dUcmVlKGNvbnN0IFdl
YkNvcmU6OklubGluZUJveCogCiAgICAgICAgIGItPnNob3dUcmVlRm9yVGhpcygpOwogfQogCit2
b2lkIHNob3dMaW5lVHJlZShjb25zdCBXZWJDb3JlOjpJbmxpbmVCb3gqIGIpCit7CisgICAgaWYg
KGIpCisgICAgICAgIGItPnNob3dMaW5lVHJlZUZvclRoaXMoKTsKK30KKwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiA4NTQ4NykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3
LDYgKzE0NywxMSBAQCBwcml2YXRlOgogcHVibGljOgogI2lmbmRlZiBOREVCVUcKICAgICB2b2lk
IHNob3dUcmVlRm9yVGhpcygpIGNvbnN0OworICAgIHZvaWQgc2hvd0xpbmVUcmVlRm9yVGhpcygp
IGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBzaG93Qm94KGludCA9IDApIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzaG93TGluZVRyZWVBbmRNYXJrKGNvbnN0IElubGluZUJveCogPSAw
LCBjb25zdCBjaGFyKiA9IDAsIGNvbnN0IElubGluZUJveCogPSAwLCBjb25zdCBjaGFyKiA9IDAs
IGNvbnN0IFJlbmRlck9iamVjdCogPSAwLCBpbnQgPSAwKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIGJveE5hbWUoKSBjb25zdDsKICNlbmRpZgogCiAgICAgYm9vbCBpc1RleHQoKSBj
b25zdCB7IHJldHVybiBtX2lzVGV4dDsgfQpAQCAtMzg2LDYgKzM5MSw3IEBAIGlubGluZSB2b2lk
IElubGluZUJveDo6c2V0SGFzQmFkUGFyZW50KCkKICNpZm5kZWYgTkRFQlVHCiAvLyBPdXRzaWRl
IHRoZSBXZWJDb3JlIG5hbWVzcGFjZSBmb3IgZWFzZSBvZiBpbnZvY2F0aW9uIGZyb20gZ2RiLgog
dm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpJbmxpbmVCb3gqKTsKK3ZvaWQgc2hvd0xpbmVU
cmVlKGNvbnN0IFdlYkNvcmU6OklubGluZUJveCopOwogI2VuZGlmCiAKICNlbmRpZiAvLyBJbmxp
bmVCb3hfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNw
cAkocmV2aXNpb24gODU0ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzIsNiArMTQzMiwxOCBAQCB2b2lkIElubGlu
ZUZsb3dCb3g6OmNvbGxlY3RMZWFmQm94ZXNJbkxvCiAKICNpZm5kZWYgTkRFQlVHCiAKK2NvbnN0
IGNoYXIqIElubGluZUZsb3dCb3g6OmJveE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiSW5s
aW5lRmxvd0JveCI7Cit9CisKK3ZvaWQgSW5saW5lRmxvd0JveDo6c2hvd0xpbmVUcmVlQW5kTWFy
ayhjb25zdCBJbmxpbmVCb3gqIG1hcmtlZEJveDEsIGNvbnN0IGNoYXIqIG1hcmtlZExhYmVsMSwg
Y29uc3QgSW5saW5lQm94KiBtYXJrZWRCb3gyLCBjb25zdCBjaGFyKiBtYXJrZWRMYWJlbDIsIGNv
bnN0IFJlbmRlck9iamVjdCogb2JqLCBpbnQgZGVwdGgpIGNvbnN0Cit7CisgICAgSW5saW5lQm94
OjpzaG93TGluZVRyZWVBbmRNYXJrKG1hcmtlZEJveDEsIG1hcmtlZExhYmVsMSwgbWFya2VkQm94
MiwgbWFya2VkTGFiZWwyLCBvYmosIGRlcHRoKTsKKyAgICBmb3IgKGNvbnN0IElubGluZUJveCog
Ym94ID0gZmlyc3RDaGlsZCgpOyBib3g7IGJveCA9IGJveC0+bmV4dE9uTGluZSgpKQorICAgICAg
ICBib3gtPnNob3dMaW5lVHJlZUFuZE1hcmsobWFya2VkQm94MSwgbWFya2VkTGFiZWwxLCBtYXJr
ZWRCb3gyLCBtYXJrZWRMYWJlbDIsIG9iaiwgZGVwdGggKyAxKTsKK30KKwogdm9pZCBJbmxpbmVG
bG93Qm94OjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICNpZmRlZiBDSEVDS19DT05TSVNU
RU5DWQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZp
c2lvbiA4NTQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDkgQEAgcHVibGljOgogCiAjaWZuZGVmIE5ERUJV
RwogICAgIHZpcnR1YWwgfklubGluZUZsb3dCb3goKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
c2hvd0xpbmVUcmVlQW5kTWFyayhjb25zdCBJbmxpbmVCb3gqID0gMCwgY29uc3QgY2hhciogPSAw
LCBjb25zdCBJbmxpbmVCb3gqID0gMCwgY29uc3QgY2hhciogPSAwLCBjb25zdCBSZW5kZXJPYmpl
Y3QqID0gMCwgaW50ID0gMCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiBib3hOYW1l
KCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIElubGluZUZsb3dCb3gqIHByZXZMaW5lQm94KCkgY29u
c3QgeyByZXR1cm4gbV9wcmV2TGluZUJveDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gODU0ODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOTEsNCAr
MTI5MSwzMCBAQCBib29sIElubGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZzZXQoCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCisKK2NvbnN0IGNoYXIqIElubGluZVRl
eHRCb3g6OmJveE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiAiSW5saW5lVGV4dEJveCI7Cit9
CisKK3ZvaWQgSW5saW5lVGV4dEJveDo6c2hvd0JveChpbnQgcHJpbnRlZENoYXJhY3RlcnMpIGNv
bnN0Cit7CisgICAgY29uc3QgUmVuZGVyVGV4dCogb2JqID0gdG9SZW5kZXJUZXh0KHJlbmRlcmVy
KCkpOworICAgIFN0cmluZyB2YWx1ZSA9IG9iai0+dGV4dCgpOworICAgIHZhbHVlID0gdmFsdWUu
c3Vic3RyaW5nKHN0YXJ0KCksIGxlbigpKTsKKyAgICB2YWx1ZS5yZXBsYWNlKCdcXCcsICJcXFxc
Iik7CisgICAgdmFsdWUucmVwbGFjZSgnXG4nLCAiXFxuIik7CisgICAgcHJpbnRlZENoYXJhY3Rl
cnMgKz0gZnByaW50ZihzdGRlcnIsICIlc1x0JXAiLCBib3hOYW1lKCksIHRoaXMpOworICAgIGZv
ciAoOyBwcmludGVkQ2hhcmFjdGVycyA8IHNob3dUcmVlQ2hhcmFjdGVyT2Zmc2V0OyBwcmludGVk
Q2hhcmFjdGVycysrKQorICAgICAgICBmcHV0YygnICcsIHN0ZGVycik7CisgICAgcHJpbnRlZENo
YXJhY3RlcnMgPSBmcHJpbnRmKHN0ZGVyciwgIlx0JXMgJXAiLCBvYmotPnJlbmRlck5hbWUoKSwg
b2JqKTsKKyAgICBjb25zdCBpbnQgcmVuZGVyZXJDaGFyYWN0ZXJPZmZzZXQgPSAyNDsKKyAgICBm
b3IgKDsgcHJpbnRlZENoYXJhY3RlcnMgPCByZW5kZXJlckNoYXJhY3Rlck9mZnNldDsgcHJpbnRl
ZENoYXJhY3RlcnMrKykKKyAgICAgICAgZnB1dGMoJyAnLCBzdGRlcnIpOworICAgIGZwcmludGYo
c3RkZXJyLCAiKCVkLCVkKSBcIiVzXCJcbiIsIHN0YXJ0KCksIHN0YXJ0KCkgKyBsZW4oKSwgdmFs
dWUudXRmOCgpLmRhdGEoKSk7Cit9CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9u
IDg1NDg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtODgsNyArODgsMTEgQEAgcHVibGljOgogICAgIGludCBsb2dpY2FsQm90
dG9tVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBsb2dpY2FsT3ZlcmZsb3dSZWN0KCku
bWF4WSgpOyB9CiAgICAgaW50IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJl
dHVybiBsb2dpY2FsT3ZlcmZsb3dSZWN0KCkueCgpOyB9CiAgICAgaW50IGxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbE92ZXJmbG93UmVjdCgpLm1heFgo
KTsgfQotICAgIAorCisjaWZuZGVmIE5ERUJVRworICAgIHZpcnR1YWwgdm9pZCBzaG93Qm94KGlu
dCA9IDApIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgY2hhciogYm94TmFtZSgpIGNvbnN0Owor
I2VuZGlmCiBwcml2YXRlOgogICAgIGludCBzZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgc2VsZWN0
aW9uQm90dG9tKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAJKHJldmlzaW9uIDg1NDg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI2Niw0ICs2MjY2LDE2IEBAIGlubGluZSB2b2lk
IFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHMKICAgICAgICAgbV9yaWdodE9iamVjdHNDb3Vu
dC0tOwogfQogCisKKyNpZm5kZWYgTkRFQlVHCisKK3ZvaWQgUmVuZGVyQmxvY2s6OnNob3dMaW5l
VHJlZUFuZE1hcmsoY29uc3QgSW5saW5lQm94KiBtYXJrZWRCb3gxLCBjb25zdCBjaGFyKiBtYXJr
ZWRMYWJlbDEsIGNvbnN0IElubGluZUJveCogbWFya2VkQm94MiwgY29uc3QgY2hhciogbWFya2Vk
TGFiZWwyLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iaikgY29uc3QKK3sKKyAgICBzaG93UmVuZGVy
T2JqZWN0KCk7CisgICAgZm9yIChjb25zdCBSb290SW5saW5lQm94KiByb290ID0gZmlyc3RSb290
Qm94KCk7IHJvb3Q7IHJvb3QgPSByb290LT5uZXh0Um9vdEJveCgpKQorICAgICAgICByb290LT5z
aG93TGluZVRyZWVBbmRNYXJrKG1hcmtlZEJveDEsIG1hcmtlZExhYmVsMSwgbWFya2VkQm94Miwg
bWFya2VkTGFiZWwyLCBvYmosIDEpOworfQorCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9u
IDg1NDg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyNSw2ICsyMjUsOSBAQCBwdWJsaWM6CiAgICAgaW50IGxvZ2ljYWxSaWdo
dE9mZnNldEZvckNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSArIGF2YWlsYWJsZUxvZ2ljYWxXaWR0
aCgpIDogYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkgKyBhdmFpbGFibGVMb2dpY2FsV2lkdGgo
KTsgfQogICAgIGludCBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQoKSBjb25zdCB7IHJldHVy
biBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQo
KSA6IGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpOyB9CiAKKyNpZm5kZWYgTkRFQlVHCisgICAg
dm9pZCBzaG93TGluZVRyZWVBbmRNYXJrKGNvbnN0IElubGluZUJveCogPSAwLCBjb25zdCBjaGFy
KiA9IDAsIGNvbnN0IElubGluZUJveCogPSAwLCBjb25zdCBjaGFyKiA9IDAsIGNvbnN0IFJlbmRl
ck9iamVjdCogPSAwKSBjb25zdDsKKyNlbmRpZgogcHJvdGVjdGVkOgogICAgIC8vIFRoZXNlIGZ1
bmN0aW9ucyBhcmUgb25seSB1c2VkIGludGVybmFsbHkgdG8gbWFuaXB1bGF0ZSB0aGUgcmVuZGVy
IHRyZWUgc3RydWN0dXJlIHZpYSByZW1vdmUvaW5zZXJ0L2FwcGVuZENoaWxkTm9kZS4KICAgICAv
LyBTaW5jZSB0aGV5IGFyZSB0eXBpY2FsbHkgY2FsbGVkIG9ubHkgdG8gbW92ZSBvYmplY3RzIGFy
b3VuZCB3aXRoaW4gYW5vbnltb3VzIGJsb2NrcyAod2hpY2ggb25seSBoYXZlIGxheWVycyBpbgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9u
IDg1NDg3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzODUsNiArMTM4NSwxNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2hv
d1RyZWVGb3JUaGlzKCkgY29uCiAgICAgICAgIG5vZGUoKS0+c2hvd1RyZWVGb3JUaGlzKCk7CiB9
CiAKK3ZvaWQgUmVuZGVyT2JqZWN0OjpzaG93UmVuZGVyVHJlZUZvclRoaXMoKSBjb25zdAorewor
ICAgIHNob3dSZW5kZXJUcmVlKHRoaXMsIDApOworfQorCit2b2lkIFJlbmRlck9iamVjdDo6c2hv
d0xpbmVUcmVlRm9yVGhpcygpIGNvbnN0Cit7CisgICAgaWYgKGNvbnRhaW5pbmdCbG9jaygpKQor
ICAgICAgICBjb250YWluaW5nQmxvY2soKS0+c2hvd0xpbmVUcmVlQW5kTWFyaygwLCAwLCAwLCAw
LCB0aGlzKTsKK30KKwogdm9pZCBSZW5kZXJPYmplY3Q6OnNob3dSZW5kZXJPYmplY3QoKSBjb25z
dAogewogICAgIHNob3dSZW5kZXJPYmplY3QoMCk7CkBAIC0xNDAzLDcgKzE0MTQsNyBAQCB2b2lk
IFJlbmRlck9iamVjdDo6c2hvd1JlbmRlck9iamVjdChpbnQgCiAKICAgICBpZiAobm9kZSgpKSB7
CiAgICAgICAgIGlmIChwcmludGVkQ2hhcmFjdGVycykKLSAgICAgICAgICAgIGZvciAoOyBwcmlu
dGVkQ2hhcmFjdGVycyA8IDM5OyBwcmludGVkQ2hhcmFjdGVycysrKQorICAgICAgICAgICAgZm9y
ICg7IHByaW50ZWRDaGFyYWN0ZXJzIDwgc2hvd1RyZWVDaGFyYWN0ZXJPZmZzZXQ7IHByaW50ZWRD
aGFyYWN0ZXJzKyspCiAgICAgICAgICAgICAgICAgZnB1dGMoJyAnLCBzdGRlcnIpOwogICAgICAg
ICBmcHV0YygnXHQnLCBzdGRlcnIpOwogICAgICAgICBub2RlKCktPnNob3dOb2RlKCk7CkBAIC0y
NjI2LDEwICsyNjM3LDE2IEBAIGJvb2wgUmVuZGVyT2JqZWN0Ojpub2RlQXRGbG9hdFBvaW50KGNv
bnMKIAogI2lmbmRlZiBOREVCVUcKIAotdm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpSZW5k
ZXJPYmplY3QqIHJvKQordm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmplY3Qq
IG9iamVjdCkKK3sKKyAgICBpZiAob2JqZWN0KQorICAgICAgICBvYmplY3QtPnNob3dUcmVlRm9y
VGhpcygpOworfQorCit2b2lkIHNob3dMaW5lVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKIHsKLSAgICBpZiAocm8pCi0gICAgICAgIHJvLT5zaG93VHJlZUZvclRoaXMo
KTsKKyAgICBpZiAob2JqZWN0KQorICAgICAgICBvYmplY3QtPnNob3dMaW5lVHJlZUZvclRoaXMo
KTsKIH0KIAogdm9pZCBzaG93UmVuZGVyVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmplY3Qq
IG9iamVjdDEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShy
ZXZpc2lvbiA4NTQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNywxMCBAQCBzdHJ1Y3QgRGFzaGJvYXJkUmVn
aW9uVmFsdWUgewogfTsKICNlbmRpZgogCisjaWZuZGVmIE5ERUJVRworY29uc3QgaW50IHNob3dU
cmVlQ2hhcmFjdGVyT2Zmc2V0ID0gMzk7CisjZW5kaWYKKwogLy8gQmFzZSBjbGFzcyBmb3IgYWxs
IHJlbmRlcmluZyB0cmVlIG9iamVjdHMuCiBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgewogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9jazsKQEAgLTIy
Miw2ICsyMjYsOCBAQCBwcml2YXRlOgogcHVibGljOgogI2lmbmRlZiBOREVCVUcKICAgICB2b2lk
IHNob3dUcmVlRm9yVGhpcygpIGNvbnN0OworICAgIHZvaWQgc2hvd1JlbmRlclRyZWVGb3JUaGlz
KCkgY29uc3Q7CisgICAgdm9pZCBzaG93TGluZVRyZWVGb3JUaGlzKCkgY29uc3Q7CiAKICAgICB2
b2lkIHNob3dSZW5kZXJPYmplY3QoKSBjb25zdDsKICAgICAvLyBXZSBkb24ndCBtYWtlIHByaW50
ZWRDaGFyYWN0ZXJzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBzbyB0aGF0CkBAIC0xMTI2LDYgKzEx
MzIsNyBAQCBpbmxpbmUgdm9pZCBhZGp1c3RGbG9hdFJlY3RGb3JQYWdlU2NhbGUoCiAjaWZuZGVm
IE5ERUJVRwogLy8gT3V0c2lkZSB0aGUgV2ViQ29yZSBuYW1lc3BhY2UgZm9yIGVhc2Ugb2YgaW52
b2NhdGlvbiBmcm9tIGdkYi4KIHZvaWQgc2hvd1RyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0Kik7Cit2b2lkIHNob3dMaW5lVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmplY3QqKTsK
IHZvaWQgc2hvd1JlbmRlclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0KiBvYmplY3Qx
KTsKIC8vIFdlIGRvbid0IG1ha2Ugb2JqZWN0MiBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgc28gdGhh
dCBzaG93UmVuZGVyVHJlZQogLy8gY2FuIGJlIGNhbGxlZCBmcm9tIGdkYiBlYXNpbHkuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA4
NTQ4NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEzLDQgKzgxMywxMSBAQCBOb2RlKiBSb290SW5saW5lQm94OjpnZXRM
b2dpY2FsRW5kQm94V2l0CiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgTkRFQlVHCitjb25z
dCBjaGFyKiBSb290SW5saW5lQm94Ojpib3hOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIlJv
b3RJbmxpbmVCb3giOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gODU0ODcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjEsNiArMTYxLDkgQEAgcHVibGljOgogCiAgICAgTm9kZSogZ2V0TG9naWNhbFN0
YXJ0Qm94V2l0aE5vZGUoSW5saW5lQm94KiYpIGNvbnN0OwogICAgIE5vZGUqIGdldExvZ2ljYWxF
bmRCb3hXaXRoTm9kZShJbmxpbmVCb3gqJikgY29uc3Q7CisjaWZuZGVmIE5ERUJVRworICAgIHZp
cnR1YWwgY29uc3QgY2hhciogYm94TmFtZSgpIGNvbnN0OworI2VuZGlmCiBwcml2YXRlOgogICAg
IGJvb2wgaGFzRWxsaXBzaXNCb3goKSBjb25zdCB7IHJldHVybiBtX2hhc0VsbGlwc2lzQm94T3JI
eXBoZW47IH0KICAgICB2b2lkIHNldEhhc0VsbGlwc2lzQm94KGJvb2wgaGFzRWxsaXBzaXNCb3gp
IHsgbV9oYXNFbGxpcHNpc0JveE9ySHlwaGVuID0gaGFzRWxsaXBzaXNCb3g7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>