<?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>57276</bug_id>
          
          <creation_ts>2011-03-28 15:19:57 -0700</creation_ts>
          <short_desc>Add an optimization to make line height and box placement calculations faster</short_desc>
          <delta_ts>2011-06-18 12:34:58 -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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>darin</cc>
    
    <cc>mitz</cc>
    
    <cc>psolanki</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>374827</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-03-28 15:19:57 -0700</bug_when>
    <thetext>Add an optimization to make line height and box placement calculations faster.  Basically try to avoid spending as much time in computeLogicalBoxHeights and placeBoxesInBlockDirection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>374828</commentid>
    <comment_count>1</comment_count>
      <attachid>87219</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-03-28 15:20:17 -0700</bug_when>
    <thetext>Created attachment 87219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375454</commentid>
    <comment_count>2</comment_count>
      <attachid>87353</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-03-29 10:01:46 -0700</bug_when>
    <thetext>Created attachment 87353
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375499</commentid>
    <comment_count>3</comment_count>
      <attachid>87353</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-29 10:37:34 -0700</bug_when>
    <thetext>Comment on attachment 87353
Patch

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

&gt; Source/WebCore/rendering/InlineFlowBox.cpp:105
&gt; +        InlineFlowBox* childFlowBox = static_cast&lt;InlineFlowBox*&gt;(child);
&gt; +        if (childFlowBox-&gt;hasTextDescendants())
&gt; +            m_hasTextDescendants = true;

I don’t think the local variable here is helpful.

&gt; Source/WebCore/rendering/InlineFlowBox.cpp:110
&gt; +        RenderStyle* parentStyle = renderer()-&gt;style(m_firstLine);
&gt; +        RenderStyle* childStyle = child-&gt;renderer()-&gt;style(m_firstLine);

Seems a shame to always compute these, since they are not always used.

&gt; Source/WebCore/rendering/InlineFlowBox.cpp:111
&gt; +        bool changeResult = false;

Not sure what “change result” means in this name. Can you come up with a better name.

&gt; Source/WebCore/rendering/InlineFlowBox.cpp:521
&gt; -        if (curr-&gt;isInlineFlowBox())
&gt; -            static_cast&lt;InlineFlowBox*&gt;(curr)-&gt;computeLogicalBoxHeights(rootBox, maxPositionTop, maxPositionBottom, maxAscent, maxDescent,
&gt; -                                                                        setMaxAscent, setMaxDescent, strictMode, textBoxDataMap,
&gt; -                                                                        baselineType, verticalPositionCache);
&gt; +        if (inlineFlowBox)
&gt; +            inlineFlowBox-&gt;computeLogicalBoxHeights(rootBox, maxPositionTop, maxPositionBottom, maxAscent, maxDescent,
&gt; +                                                    setMaxAscent, setMaxDescent, strictMode, textBoxDataMap,
&gt; +                                                    baselineType, verticalPositionCache);

It’s better to not line up the subsequent lines so you don’t have to move them when making a change like this one. Also, there should be braces in this if statement.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87219</attachid>
            <date>2011-03-28 15:20:17 -0700</date>
            <delta_ts>2011-03-29 10:01:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17634</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlz
aW9uIDgyMTQ0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Niw4ICs5Niw0OSBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFk
ZFRvTGluZShJbmxpbmVCb3gqCiAgICAgfQogICAgIGNoaWxkLT5zZXRGaXJzdExpbmVTdHlsZUJp
dChtX2ZpcnN0TGluZSk7CiAgICAgY2hpbGQtPnNldElzSG9yaXpvbnRhbChpc0hvcml6b250YWwo
KSk7Ci0gICAgaWYgKGNoaWxkLT5pc1RleHQoKSkKKyAgICBpZiAoY2hpbGQtPmlzVGV4dCgpKSB7
CiAgICAgICAgIG1faGFzVGV4dENoaWxkcmVuID0gdHJ1ZTsKKyAgICAgICAgbV9oYXNUZXh0RGVz
Y2VuZGFudHMgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzSW5saW5lRmxvd0JveCgp
KSB7CisgICAgICAgIElubGluZUZsb3dCb3gqIGNoaWxkRmxvd0JveCA9IHN0YXRpY19jYXN0PElu
bGluZUZsb3dCb3gqPihjaGlsZCk7CisgICAgICAgIGlmIChjaGlsZEZsb3dCb3gtPmhhc1RleHRE
ZXNjZW5kYW50cygpKQorICAgICAgICAgICAgbV9oYXNUZXh0RGVzY2VuZGFudHMgPSB0cnVlOwor
ICAgIH0KKworICAgIGlmIChjaGlsZHJlbkhhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkg
JiYgIWNoaWxkLT5yZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSkgeworICAgICAgICBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSk7CisgICAg
ICAgIFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlID0gY2hpbGQtPnJlbmRlcmVyKCktPnN0eWxlKG1f
Zmlyc3RMaW5lKTsKKyAgICAgICAgYm9vbCBjaGFuZ2VSZXN1bHQgPSBmYWxzZTsKKyAgICAgICAg
aWYgKGNoaWxkLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpCisgICAgICAgICAgICBjaGFuZ2VS
ZXN1bHQgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChjaGlsZC0+aXNUZXh0KCkpIHsKKyAgICAg
ICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKS0+aXNCUigpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHBhcmVudFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAhPSBjaGlsZFN0
eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKQorICAgICAgICAgICAgICAgICAgICB8
fCBwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICE9IGNoaWxkU3R5
bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSB8fCBwYXJlbnRTdHlsZS0+bGluZUhl
aWdodCgpICE9IGNoaWxkU3R5bGUtPmxpbmVIZWlnaHQoKQorICAgICAgICAgICAgICAgICAgICB8
fCAocGFyZW50U3R5bGUtPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSAmJiAhaXNSb290SW5s
aW5lQm94KCkpIHx8IGNoaWxkU3R5bGUtPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkKKyAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlUmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY2hpbGRTdHlsZS0+aGFzVGV4dENvbWJpbmUoKSB8fCBjaGlsZFN0eWxlLT50ZXh0RW1w
aGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUpCisgICAgICAgICAgICAgICAgY2hh
bmdlUmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjaGls
ZC0+cmVuZGVyZXIoKS0+aXNCUigpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
aXMgZHVtYi4gV2Ugb25seSB0dXJuIG9mZiBiZWNhdXNlIGN1cnJlbnQgbGF5b3V0IHRlc3QgcmVz
dWx0cyBleHBlY3QgdGhlIDxicj4gdG8gYmUgMC1oZWlnaHQgb24gdGhlIGJhc2VsaW5lLgorICAg
ICAgICAgICAgICAgIC8vIE90aGVyIHRoYW4gbWFraW5nIGEgemlsbGlvbiB0ZXN0cyBoYXZlIHRv
IHJlZ2VuZXJhdGUgcmVzdWx0cywgdGhlcmUncyBubyByZWFzb24gdG8gZGl0Y2ggdGhlIG9wdGlt
aXphdGlvbiBoZXJlLgorICAgICAgICAgICAgICAgIGNoYW5nZVJlc3VsdCA9IHRydWU7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChpc0lubGluZUZsb3dCb3go
KSk7CisgICAgICAgICAgICAgICAgSW5saW5lRmxvd0JveCogY2hpbGRGbG93Qm94ID0gc3RhdGlj
X2Nhc3Q8SW5saW5lRmxvd0JveCo+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0
aGUgY2hpbGQncyBiaXQsIGFuZCB0aGVuIGFsc28gY2hlY2sgZm9yIGRpZmZlcmVuY2VzIGluIGZv
bnQsIGxpbmUtaGVpZ2h0LCB2ZXJ0aWNhbC1hbGlnbgorICAgICAgICAgICAgICAgIGlmICghY2hp
bGRGbG93Qm94LT5jaGlsZHJlbkhhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkgfHwgcGFy
ZW50U3R5bGUtPmZvbnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpICE9IGNoaWxkU3R5bGUtPmZv
bnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpCisgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVu
dFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgIT0gY2hpbGRTdHlsZS0+Zm9u
dCgpLmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkg
IT0gY2hpbGRTdHlsZS0+bGluZUhlaWdodCgpCisgICAgICAgICAgICAgICAgICAgIHx8IChwYXJl
bnRTdHlsZS0+dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FICYmICFpc1Jvb3RJbmxpbmVCb3go
KSkgfHwgY2hpbGRTdHlsZS0+dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FCisgICAgICAgICAg
ICAgICAgICAgIHx8IGNoaWxkU3R5bGUtPmhhc0JvcmRlcigpIHx8IGNoaWxkU3R5bGUtPmhhc1Bh
ZGRpbmcoKSB8fCBjaGlsZFN0eWxlLT5oYXNUZXh0Q29tYmluZSgpKQorICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VSZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGNoYW5nZVJlc3VsdCkKKyAgICAgICAgICAgIGNsZWFyQ2hpbGRyZW5IYXZlU2Ft
ZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpOworICAgIH0KIAogICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKIH0KQEAgLTQwNiwxMiArNDQ3LDE0IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZUxv
Z2ljYWxCb3hIZWkKICAgICAvLyBwYXJ0IG9mIHRoZSBib3ggKEVYQ0xVRElORyBsZWFkaW5nKSBp
cyBhYm92ZSAoZm9yIGFzY2VudCkgb3IgYmVsb3cgKGZvciBkZXNjZW50KSB0aGUgcm9vdCBib3gn
cyBiYXNlbGluZS4KICAgICBib29sIGFmZmVjdHNBc2NlbnQgPSBmYWxzZTsKICAgICBib29sIGFm
ZmVjdHNEZXNjZW50ID0gZmFsc2U7CisgICAgYm9vbCBjaGVja0NoaWxkcmVuID0gIWNoaWxkcmVu
SGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKTsKKyAgICAKICAgICBpZiAoaXNSb290SW5s
aW5lQm94KCkpIHsKICAgICAgICAgLy8gRXhhbWluZSBvdXIgcm9vdCBib3guCiAgICAgICAgIGlu
dCBhc2NlbnQgPSAwOwogICAgICAgICBpbnQgZGVzY2VudCA9IDA7CiAgICAgICAgIHJvb3RCb3gt
PmFzY2VudEFuZERlc2NlbnRGb3JCb3gocm9vdEJveCwgdGV4dEJveERhdGFNYXAsIGFzY2VudCwg
ZGVzY2VudCwgYWZmZWN0c0FzY2VudCwgYWZmZWN0c0Rlc2NlbnQpOwotICAgICAgICBpZiAoaGFz
VGV4dENoaWxkcmVuKCkgfHwgc3RyaWN0TW9kZSkgeworICAgICAgICBpZiAoc3RyaWN0TW9kZSB8
fCBoYXNUZXh0Q2hpbGRyZW4oKSB8fCAoIWNoZWNrQ2hpbGRyZW4gJiYgaGFzVGV4dERlc2NlbmRh
bnRzKCkpKSB7CiAgICAgICAgICAgICBpZiAobWF4QXNjZW50IDwgYXNjZW50IHx8ICFzZXRNYXhB
c2NlbnQpIHsKICAgICAgICAgICAgICAgICBtYXhBc2NlbnQgPSBhc2NlbnQ7CiAgICAgICAgICAg
ICAgICAgc2V0TWF4QXNjZW50ID0gdHJ1ZTsKQEAgLTQyMyw2ICs0NjYsOSBAQCB2b2lkIElubGlu
ZUZsb3dCb3g6OmNvbXB1dGVMb2dpY2FsQm94SGVpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBp
ZiAoIWNoZWNrQ2hpbGRyZW4pCisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoSW5saW5lQm94
KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7
CiAgICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLT5pc1Bvc2l0aW9uZWQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOyAvLyBQb3NpdGlvbmVkIHBsYWNlaG9sZGVycyBkb24ndCBhZmZlY3QgY2Fs
Y3VsYXRpb25zLgpAQCAtNDc4LDI3ICs1MjQsMzcgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpjb21w
dXRlTG9naWNhbEJveEhlaQogdm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5CbG9ja0Rp
cmVjdGlvbihpbnQgdG9wLCBpbnQgbWF4SGVpZ2h0LCBpbnQgbWF4QXNjZW50LCBib29sIHN0cmlj
dE1vZGUsIGludCYgbGluZVRvcCwgaW50JiBsaW5lQm90dG9tLCBib29sJiBzZXRMaW5lVG9wLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGxpbmVU
b3BJbmNsdWRpbmdNYXJnaW5zLCBpbnQmIGxpbmVCb3R0b21JbmNsdWRpbmdNYXJnaW5zLCBib29s
JiBoYXNBbm5vdGF0aW9uc0JlZm9yZSwgYm9vbCYgaGFzQW5ub3RhdGlvbnNBZnRlciwgRm9udEJh
c2VsaW5lIGJhc2VsaW5lVHlwZSkKIHsKLSAgICBpZiAoaXNSb290SW5saW5lQm94KCkpCi0gICAg
ICAgIHNldExvZ2ljYWxUb3AodG9wICsgbWF4QXNjZW50IC0gYmFzZWxpbmVQb3NpdGlvbihiYXNl
bGluZVR5cGUpKTsgLy8gUGxhY2Ugb3VyIHJvb3QgYm94LgorICAgIGJvb2wgaXNSb290Qm94ID0g
aXNSb290SW5saW5lQm94KCk7CisgICAgaWYgKGlzUm9vdEJveCkgeworICAgICAgICBjb25zdCBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MgPSByZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSkt
PmZvbnRNZXRyaWNzKCk7CisgICAgICAgIHNldExvZ2ljYWxUb3AodG9wICsgbWF4QXNjZW50IC0g
Zm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlwZSkpOworICAgIH0KKworICAgIGludCBhZGp1
c3RtZW50Rm9yQ2hpbGRyZW5XaXRoU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IDA7CisgICAg
aWYgKGNoaWxkcmVuSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKSkgeworICAgICAgICBh
ZGp1c3RtZW50Rm9yQ2hpbGRyZW5XaXRoU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSA9IGxvZ2lj
YWxUb3AoKTsKKyAgICAgICAgaWYgKHBhcmVudCgpKQorICAgICAgICAgICAgYWRqdXN0bWVudEZv
ckNoaWxkcmVuV2l0aFNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUgKz0gKGJveE1vZGVsT2JqZWN0
KCktPmJvcmRlckJlZm9yZSgpICsgYm94TW9kZWxPYmplY3QoKS0+cGFkZGluZ0JlZm9yZSgpKTsK
KyAgICB9CiAKICAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewogICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIo
KS0+aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gUG9zaXRpb25lZCBw
bGFjZWhvbGRlcnMgZG9uJ3QgYWZmZWN0IGNhbGN1bGF0aW9ucy4KLSAgICAgICAgCi0gICAgICAg
IC8vIEFkanVzdCBib3hlcyB0byB1c2UgdGhlaXIgcmVhbCBib3ggeS9oZWlnaHQgYW5kIG5vdCB0
aGUgbG9naWNhbCBoZWlnaHQgKGFzIGRpY3RhdGVkIGJ5Ci0gICAgICAgIC8vIGxpbmUtaGVpZ2h0
KS4KLSAgICAgICAgYm9vbCBpc0lubGluZUZsb3cgPSBjdXJyLT5pc0lubGluZUZsb3dCb3goKTsK
LSAgICAgICAgaWYgKGlzSW5saW5lRmxvdykKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PElubGlu
ZUZsb3dCb3gqPihjdXJyKS0+cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24odG9wLCBtYXhIZWln
aHQsIG1heEFzY2VudCwgc3RyaWN0TW9kZSwgbGluZVRvcCwgbGluZUJvdHRvbSwgc2V0TGluZVRv
cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZVRvcEluY2x1ZGluZ01hcmdpbnMsIGxpbmVCb3R0b21J
bmNsdWRpbmdNYXJnaW5zLCBoYXNBbm5vdGF0aW9uc0JlZm9yZSwgaGFzQW5ub3RhdGlvbnNBZnRl
ciwgYmFzZWxpbmVUeXBlKTsKIAorICAgICAgICBpZiAoY2hpbGRyZW5IYXZlU2FtZUxpbmVIZWln
aHRBbmRCYXNlbGluZSgpKSB7CisgICAgICAgICAgICBjdXJyLT5hZGp1c3RCbG9ja0RpcmVjdGlv
blBvc2l0aW9uKGFkanVzdG1lbnRGb3JDaGlsZHJlbldpdGhTYW1lTGluZUhlaWdodEFuZEJhc2Vs
aW5lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBp
c0lubGluZUZsb3cgPSBjdXJyLT5pc0lubGluZUZsb3dCb3goKTsKICAgICAgICAgYm9vbCBjaGls
ZEFmZmVjdHNUb3BCb3R0b21Qb3MgPSB0cnVlOwogICAgICAgICBpZiAoY3Vyci0+dmVydGljYWxB
bGlnbigpID09IFRPUCkKICAgICAgICAgICAgIGN1cnItPnNldExvZ2ljYWxUb3AodG9wKTsKICAg
ICAgICAgZWxzZSBpZiAoY3Vyci0+dmVydGljYWxBbGlnbigpID09IEJPVFRPTSkKICAgICAgICAg
ICAgIGN1cnItPnNldExvZ2ljYWxUb3AodG9wICsgbWF4SGVpZ2h0IC0gY3Vyci0+bGluZUhlaWdo
dCgpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKGlzSW5saW5lRmxvdyAmJiAh
c3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIpLT5oYXNUZXh0Q2hpbGRyZW4oKSkgJiYg
IWN1cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc0lubGluZURpcmVjdGlvbkJvcmRlcnNPclBhZGRp
bmcoKSAmJiAhc3RyaWN0TW9kZSkKKyAgICAgICAgICAgIGlmICghc3RyaWN0TW9kZSAmJiAoaXNJ
bmxpbmVGbG93ICYmICFzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94Kj4oY3VyciktPmhhc1RleHRD
aGlsZHJlbigpKSAmJiAhY3Vyci0+Ym94TW9kZWxPYmplY3QoKS0+aGFzSW5saW5lRGlyZWN0aW9u
Qm9yZGVyc09yUGFkZGluZygpCisgICAgICAgICAgICAgICAgJiYgIShjaGlsZHJlbkhhdmVTYW1l
TGluZUhlaWdodEFuZEJhc2VsaW5lKCkgJiYgc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1
cnIpLT5oYXNUZXh0RGVzY2VuZGFudHMoKSkpCiAgICAgICAgICAgICAgICAgY2hpbGRBZmZlY3Rz
VG9wQm90dG9tUG9zID0gZmFsc2U7CiAgICAgICAgICAgICBpbnQgcG9zQWRqdXN0ID0gbWF4QXNj
ZW50IC0gY3Vyci0+YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUpOwogICAgICAgICAgICAg
Y3Vyci0+c2V0TG9naWNhbFRvcChjdXJyLT5sb2dpY2FsVG9wKCkgKyB0b3AgKyBwb3NBZGp1c3Qp
OwpAQCAtNTY5LDEzICs2MjUsMTYgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSW5C
bG9ja0RpcgogICAgICAgICAgICAgbGluZUJvdHRvbSA9IG1heChsaW5lQm90dG9tLCBuZXdMb2dp
Y2FsVG9wICsgYm94SGVpZ2h0KTsKICAgICAgICAgICAgIGxpbmVCb3R0b21JbmNsdWRpbmdNYXJn
aW5zID0gbWF4KGxpbmVCb3R0b20sIG1heChsaW5lQm90dG9tSW5jbHVkaW5nTWFyZ2lucywgbmV3
TG9naWNhbFRvcEluY2x1ZGluZ01hcmdpbnMgKyBib3hIZWlnaHRJbmNsdWRpbmdNYXJnaW5zKSk7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEFkanVzdCBib3hlcyB0byB1c2UgdGhl
aXIgcmVhbCBib3ggeS9oZWlnaHQgYW5kIG5vdCB0aGUgbG9naWNhbCBoZWlnaHQgKGFzIGRpY3Rh
dGVkIGJ5CisgICAgICAgIC8vIGxpbmUtaGVpZ2h0KS4KKyAgICAgICAgaWYgKGlzSW5saW5lRmxv
dykKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKS0+cGxhY2VC
b3hlc0luQmxvY2tEaXJlY3Rpb24odG9wLCBtYXhIZWlnaHQsIG1heEFzY2VudCwgc3RyaWN0TW9k
ZSwgbGluZVRvcCwgbGluZUJvdHRvbSwgc2V0TGluZVRvcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlu
ZVRvcEluY2x1ZGluZ01hcmdpbnMsIGxpbmVCb3R0b21JbmNsdWRpbmdNYXJnaW5zLCBoYXNBbm5v
dGF0aW9uc0JlZm9yZSwgaGFzQW5ub3RhdGlvbnNBZnRlciwgYmFzZWxpbmVUeXBlKTsKICAgICB9
CiAKLSAgICBpZiAoaXNSb290SW5saW5lQm94KCkpIHsKLSAgICAgICAgY29uc3QgRm9udE1ldHJp
Y3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250TWV0
cmljcygpOwotICAgICAgICBzZXRMb2dpY2FsVG9wKGxvZ2ljYWxUb3AoKSArIGJhc2VsaW5lUG9z
aXRpb24oYmFzZWxpbmVUeXBlKSAtIGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUpKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChoYXNUZXh0Q2hpbGRyZW4oKSB8fCBzdHJpY3RNb2RlKSB7
CisgICAgaWYgKGlzUm9vdEJveCkgeworICAgICAgICBpZiAoc3RyaWN0TW9kZSB8fCBoYXNUZXh0
Q2hpbGRyZW4oKSB8fCAoY2hpbGRyZW5IYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpICYm
IGhhc1RleHREZXNjZW5kYW50cygpKSkgewogICAgICAgICAgICAgaWYgKCFzZXRMaW5lVG9wKSB7
CiAgICAgICAgICAgICAgICAgc2V0TGluZVRvcCA9IHRydWU7CiAgICAgICAgICAgICAgICAgbGlu
ZVRvcCA9IGxvZ2ljYWxUb3AoKTsKQEAgLTgyMSw3ICs4ODAsNyBAQCBib29sIElubGluZUZsb3dC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAKICAgICAvLyBDb25zdHJhaW4gb3VyIGhpdCB0ZXN0
aW5nIHRvIHRoZSBsaW5lIHRvcCBhbmQgYm90dG9tIGlmIG5lY2Vzc2FyeS4KICAgICBib29sIG5v
UXVpcmtzTW9kZSA9IHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmluTm9RdWlya3NNb2RlKCk7Ci0g
ICAgaWYgKCFoYXNUZXh0Q2hpbGRyZW4oKSAmJiAhbm9RdWlya3NNb2RlKSB7CisgICAgaWYgKCFu
b1F1aXJrc01vZGUgJiYgIWhhc1RleHRDaGlsZHJlbigpICYmICEoY2hpbGRyZW5IYXZlU2FtZUxp
bmVIZWlnaHRBbmRCYXNlbGluZSgpICYmIGhhc1RleHREZXNjZW5kYW50cygpKSkgewogICAgICAg
ICBSb290SW5saW5lQm94KiByb290Qm94ID0gcm9vdCgpOwogICAgICAgICBpbnQmIHRvcCA9IGlz
SG9yaXpvbnRhbCgpID8gbWluWSA6IG1pblg7CiAgICAgICAgIGludCYgbG9naWNhbEhlaWdodCA9
IGlzSG9yaXpvbnRhbCgpID8gaGVpZ2h0IDogd2lkdGg7CkBAIC05ODYsNyArMTA0NSw3IEBAIHZv
aWQgSW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucygKIAogICAgIC8vIENvbnN0cmFp
biBvdXIgYmFja2dyb3VuZC9ib3JkZXIgcGFpbnRpbmcgdG8gdGhlIGxpbmUgdG9wIGFuZCBib3R0
b20gaWYgbmVjZXNzYXJ5LgogICAgIGJvb2wgbm9RdWlya3NNb2RlID0gcmVuZGVyZXIoKS0+ZG9j
dW1lbnQoKS0+aW5Ob1F1aXJrc01vZGUoKTsKLSAgICBpZiAoIWhhc1RleHRDaGlsZHJlbigpICYm
ICFub1F1aXJrc01vZGUpIHsKKyAgICBpZiAoIW5vUXVpcmtzTW9kZSAmJiAhaGFzVGV4dENoaWxk
cmVuKCkgJiYgIShjaGlsZHJlbkhhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkgJiYgaGFz
VGV4dERlc2NlbmRhbnRzKCkpKSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSBy
b290KCk7CiAgICAgICAgIGludCYgdG9wID0gaXNIb3Jpem9udGFsKCkgPyB5IDogeDsKICAgICAg
ICAgaW50JiBsb2dpY2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBoIDogdzsKQEAgLTEwNjgs
NyArMTEyNyw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRNYXNrKFBhaW50SW5mbyYKIAog
ICAgIC8vIENvbnN0cmFpbiBvdXIgYmFja2dyb3VuZC9ib3JkZXIgcGFpbnRpbmcgdG8gdGhlIGxp
bmUgdG9wIGFuZCBib3R0b20gaWYgbmVjZXNzYXJ5LgogICAgIGJvb2wgbm9RdWlya3NNb2RlID0g
cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+aW5Ob1F1aXJrc01vZGUoKTsKLSAgICBpZiAoIWhhc1Rl
eHRDaGlsZHJlbigpICYmICFub1F1aXJrc01vZGUpIHsKKyAgICBpZiAoIW5vUXVpcmtzTW9kZSAm
JiAhaGFzVGV4dENoaWxkcmVuKCkgJiYgIShjaGlsZHJlbkhhdmVTYW1lTGluZUhlaWdodEFuZEJh
c2VsaW5lKCkgJiYgaGFzVGV4dERlc2NlbmRhbnRzKCkpKSB7CiAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIHJvb3RCb3ggPSByb290KCk7CiAgICAgICAgIGludCYgdG9wID0gaXNIb3Jpem9udGFsKCkg
PyB5IDogeDsKICAgICAgICAgaW50JiBsb2dpY2FsSGVpZ2h0ID0gaXNIb3Jpem9udGFsKCkgPyBo
IDogdzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2
aXNpb24gODIxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX25l
eHRMaW5lQm94KDApCiAgICAgICAgICwgbV9pbmNsdWRlTG9naWNhbExlZnRFZGdlKGZhbHNlKQog
ICAgICAgICAsIG1faW5jbHVkZUxvZ2ljYWxSaWdodEVkZ2UoZmFsc2UpCisgICAgICAgICwgbV9j
aGlsZHJlbkhhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKHRydWUpCiAjaWZuZGVmIE5ERUJV
RwogICAgICAgICAsIG1faGFzQmFkQ2hpbGRMaXN0KGZhbHNlKQogI2VuZGlmCkBAIC01NSw2ICs1
Niw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdGV4dCBjaGlsZHJlbiBtdXN0IG5vdCBhcHBseS4g
IFRoaXMgY2hhbmdlIGFsc28gbWVhbnMgdGhhdCBnYXBzIHdpbGwgZXhpc3QgYmV0d2VlbiBpbWFn
ZSBidWxsZXQgbGlzdCBpdGVtcy4gIEV2ZW4gd2hlbiB0aGUgbGlzdCBidWxsZXQKICAgICAgICAg
Ly8gaXMgYW4gaW1hZ2UsIHRoZSBsaW5lIGlzIHN0aWxsIGNvbnNpZGVyZWQgdG8gYmUgaW1tdW5l
IGZyb20gdGhlIHF1aXJrLgogICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IG9iai0+c3R5bGUo
KS0+ZGlzcGxheSgpID09IExJU1RfSVRFTTsKKyAgICAgICAgbV9oYXNUZXh0RGVzY2VuZGFudHMg
PSBtX2hhc1RleHRDaGlsZHJlbjsKICAgICB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0xODEsNiAr
MTgzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgcGxhY2VFbGxpcHNpc0JveChib29s
IGx0ciwgZmxvYXQgYmxvY2tMZWZ0RWRnZSwgZmxvYXQgYmxvY2tSaWdodEVkZ2UsIGZsb2F0IGVs
bGlwc2lzV2lkdGgsIGJvb2wmKTsKIAogICAgIGJvb2wgaGFzVGV4dENoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNUZXh0Q2hpbGRyZW47IH0KKyAgICBib29sIGhhc1RleHREZXNjZW5kYW50
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGV4dERlc2NlbmRhbnRzOyB9CiAKICAgICB2b2lkIGNo
ZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKICAgICB2b2lkIHNldEhhc0JhZENoaWxkTGlzdCgpOwpA
QCAtMjI2LDYgKzIyOSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXlvdXRPdmVyZmxvdyhj
b25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBzZXRWaXN1YWxPdmVyZmxvdyhjb25zdCBJbnRSZWN0
Jik7CiAKKyAgICBib29sIGNoaWxkcmVuSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKSBj
b25zdCB7IHJldHVybiBtX2NoaWxkcmVuSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmU7IH0K
KyAgICB2b2lkIGNsZWFyQ2hpbGRyZW5IYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpCisg
ICAgeyAKKyAgICAgICAgbV9jaGlsZHJlbkhhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lID0g
ZmFsc2U7CisgICAgICAgIGlmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+Y2hpbGRyZW5IYXZlU2Ft
ZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpKQorICAgICAgICAgICAgcGFyZW50KCktPmNsZWFyQ2hp
bGRyZW5IYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGFkZEJveFNoYWRvd1Zpc3VhbE92ZXJmbG93KEludFJlY3QmIGxvZ2ljYWxWaXN1
YWxPdmVyZmxvdyk7CiAgICAgdm9pZCBhZGRUZXh0Qm94VmlzdWFsT3ZlcmZsb3coY29uc3QgSW5s
aW5lVGV4dEJveCosIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgSW50UmVjdCYg
bG9naWNhbFZpc3VhbE92ZXJmbG93KTsKQEAgLTI0NSw2ICsyNTYsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgYm9vbCBtX2luY2x1ZGVMb2dpY2FsTGVmdEVkZ2UgOiAxOwogICAgIGJvb2wgbV9pbmNsdWRl
TG9naWNhbFJpZ2h0RWRnZSA6IDE7CiAgICAgYm9vbCBtX2hhc1RleHRDaGlsZHJlbiA6IDE7Cisg
ICAgYm9vbCBtX2hhc1RleHREZXNjZW5kYW50cyA6IDE7CisgICAgYm9vbCBtX2NoaWxkcmVuSGF2
ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUgOiAxOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIGJv
b2wgbV9oYXNCYWRDaGlsZExpc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDgyMTQ0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4Myw2ICsyMDgzLDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6c2ltcGxpZmllZE5vcm1hbEZsb3dMYQogICAgICAgICBSZW5kZXJPYmpl
Y3QqIG8gPSBiaWRpRmlyc3QodGhpcywgMCwgZmFsc2UpOwogICAgICAgICB3aGlsZSAobykgewog
ICAgICAgICAgICAgaWYgKCFvLT5pc1Bvc2l0aW9uZWQoKSAmJiAoby0+aXNSZXBsYWNlZCgpIHx8
IG8tPmlzRmxvYXRpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW8tPnNlbGZOZWVk
c0xheW91dCgpICYmICFvLT5ub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkpOwogICAgICAgICAgICAg
ICAgIG8tPmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRvUmVuZGVyQm94
KG8pLT5pbmxpbmVCb3hXcmFwcGVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgUm9vdElubGlu
ZUJveCogYm94ID0gdG9SZW5kZXJCb3gobyktPmlubGluZUJveFdyYXBwZXIoKS0+cm9vdCgpOwpA
QCAtMjEwMSw4ICsyMTAyLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNpbXBsaWZpZWROb3JtYWxG
bG93TGEKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoUmVuZGVyQm94KiBi
b3ggPSBmaXJzdENoaWxkQm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0U2libGluZ0JveCgpKSB7
Ci0gICAgICAgICAgICBpZiAoIWJveC0+aXNQb3NpdGlvbmVkKCkpCisgICAgICAgICAgICBpZiAo
IWJveC0+aXNQb3NpdGlvbmVkKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWJveC0+c2Vs
Zk5lZWRzTGF5b3V0KCkgJiYgIWJveC0+bm9ybWFsQ2hpbGROZWVkc0xheW91dCgpKTsKICAgICAg
ICAgICAgICAgICBib3gtPmxheW91dElmTmVlZGVkKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAko
cmV2aXNpb24gODIxNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtNDk4LDcgKzQ5OCw3IEBAIHByaXZhdGU6CiAgICAgSW5saW5l
SXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiwgYm9vbCBmaXJz
dExpbmUsIGJvb2wmIGlzTGluZUVtcHR5LCBMaW5lQnJlYWtJdGVyYXRvckluZm8mLCBib29sJiBw
cmV2aW91c0xpbmVCcm9rZUNsZWFubHksIGJvb2wmIGh5cGhlbmF0ZWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRUNsZWFyKiwgRmxvYXRpbmdPYmplY3QqIGxhc3RGbG9h
dEZyb21QcmV2aW91c0xpbmUsIFZlY3RvcjxSZW5kZXJCb3gqPiYgcG9zaXRpb25lZE9iamVjdHMp
OwogICAgIFJvb3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUodW5zaWduZWQgcnVuQ291bnQsIEJp
ZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKiBsYXN0UnVuLCBib29sIGZpcnN0TGluZSwgYm9vbCBs
YXN0TGluZSwgUmVuZGVyT2JqZWN0KiBlbmRPYmplY3QpOwotICAgIElubGluZUZsb3dCb3gqIGNy
ZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqLCBib29sIGZpcnN0TGluZSk7CisgICAgSW5saW5l
Rmxvd0JveCogY3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVjdCosIGJvb2wgZmlyc3RMaW5lLCBJ
bmxpbmVCb3gqIGNoaWxkQm94KTsKIAogICAgIHZvaWQgY29tcHV0ZUlubGluZURpcmVjdGlvblBv
c2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJveCosIGJvb2wgZmlyc3RMaW5lLCBCaWRpUnVuKiBm
aXJzdFJ1biwgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biwgYm9vbCByZWFjaGVkRW5kLCBHbHlw
aE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcCYsIFZlcnRpY2FsUG9zaXRpb25DYWNoZSYpOwog
ICAgIHZvaWQgY29tcHV0ZUJsb2NrRGlyZWN0aW9uUG9zaXRpb25zRm9yTGluZShSb290SW5saW5l
Qm94KiwgQmlkaVJ1biosIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiwgVmVydGlj
YWxQb3NpdGlvbkNhY2hlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tMaW5lTGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gODIxNDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk1LDE0ICsxOTUsMTQgQEAgc3RhdGljIGJvb2wgcGFyZW50SXNDb25zdHJ1Y3RlZE9y
SGF2ZU5leAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW5saW5lRmxvd0JveCogUmVuZGVyQmxv
Y2s6OmNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3QqIG9iaiwgYm9vbCBmaXJzdExpbmUpCitJ
bmxpbmVGbG93Qm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVjdCog
b2JqLCBib29sIGZpcnN0TGluZSwgSW5saW5lQm94KiBjaGlsZEJveCkKIHsKICAgICAvLyBTZWUg
aWYgd2UgaGF2ZSBhbiB1bmNvbnN0cnVjdGVkIGxpbmUgYm94IGZvciB0aGlzIG9iamVjdCB0aGF0
IGlzIGFsc28KICAgICAvLyB0aGUgbGFzdCBpdGVtIG9uIHRoZSBsaW5lLgogICAgIHVuc2lnbmVk
IGxpbmVEZXB0aCA9IDE7Ci0gICAgSW5saW5lRmxvd0JveCogY2hpbGRCb3ggPSAwOwogICAgIElu
bGluZUZsb3dCb3gqIHBhcmVudEJveCA9IDA7CiAgICAgSW5saW5lRmxvd0JveCogcmVzdWx0ID0g
MDsKKyAgICBib29sIGhhc0RlZmF1bHRMaW5lQm94Q29udGFpbiA9IHN0eWxlKCktPmxpbmVCb3hD
b250YWluKCkgPT0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lQm94Q29udGFpbigpOwogICAgIGRv
IHsKICAgICAgICAgQVNTRVJUKG9iai0+aXNSZW5kZXJJbmxpbmUoKSB8fCBvYmogPT0gdGhpcyk7
CiAgICAgICAgIApAQCAtMjIzLDYgKzIyMyw4IEBAIElubGluZUZsb3dCb3gqIFJlbmRlckJsb2Nr
OjpjcmVhdGVMaW5lQm8KICAgICAgICAgICAgIHBhcmVudEJveCA9IHN0YXRpY19jYXN0PElubGlu
ZUZsb3dCb3gqPihuZXdCb3gpOwogICAgICAgICAgICAgcGFyZW50Qm94LT5zZXRGaXJzdExpbmVT
dHlsZUJpdChmaXJzdExpbmUpOwogICAgICAgICAgICAgcGFyZW50Qm94LT5zZXRJc0hvcml6b250
YWwoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICBpZiAoIWhhc0RlZmF1
bHRMaW5lQm94Q29udGFpbikKKyAgICAgICAgICAgICAgICBwYXJlbnRCb3gtPmNsZWFyQ2hpbGRy
ZW5IYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpOwogICAgICAgICAgICAgY29uc3RydWN0
ZWROZXdCb3ggPSB0cnVlOwogICAgICAgICB9CiAKQEAgLTI3NiwxMCArMjc4LDExIEBAIFJvb3RJ
bmxpbmVCb3gqIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RMaW4KICAgICAgICAgLy8gcnVuJ3MgaW5s
aW5lIGJveC4KICAgICAgICAgaWYgKCFwYXJlbnRCb3ggfHwgcGFyZW50Qm94LT5yZW5kZXJlcigp
ICE9IHItPm1fb2JqZWN0LT5wYXJlbnQoKSkKICAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgaW5s
aW5lIGJveGVzIGFsbCB0aGUgd2F5IGJhY2sgdG8gdGhlIGFwcHJvcHJpYXRlIGluc2VydGlvbiBw
b2ludC4KLSAgICAgICAgICAgIHBhcmVudEJveCA9IGNyZWF0ZUxpbmVCb3hlcyhyLT5tX29iamVj
dC0+cGFyZW50KCksIGZpcnN0TGluZSk7Ci0KLSAgICAgICAgLy8gQXBwZW5kIHRoZSBpbmxpbmUg
Ym94IHRvIHRoaXMgbGluZS4KLSAgICAgICAgcGFyZW50Qm94LT5hZGRUb0xpbmUoYm94KTsKKyAg
ICAgICAgICAgIHBhcmVudEJveCA9IGNyZWF0ZUxpbmVCb3hlcyhyLT5tX29iamVjdC0+cGFyZW50
KCksIGZpcnN0TGluZSwgYm94KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBBcHBl
bmQgdGhlIGlubGluZSBib3ggdG8gdGhpcyBsaW5lLgorICAgICAgICAgICAgcGFyZW50Qm94LT5h
ZGRUb0xpbmUoYm94KTsKKyAgICAgICAgfQogCiAgICAgICAgIGJvb2wgdmlzdWFsbHlPcmRlcmVk
ID0gci0+bV9vYmplY3QtPnN0eWxlKCktPnZpc3VhbGx5T3JkZXJlZCgpOwogICAgICAgICBib3gt
PnNldEJpZGlMZXZlbChyLT5sZXZlbCgpKTsKQEAgLTQzOSw2ICs0NDIsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpjb21wdXRlSW5saW5lRGlyZWN0aW9uCiAgICAgICAgICAgICAgICAgR2x5cGhPdmVy
Zmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0ID0gdGV4dEJveERhdGFNYXAuYWRk
KHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihyLT5tX2JveCksIG1ha2VfcGFpcihWZWN0b3I8
Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5maXJzdDsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoaXQtPnNlY29uZC5maXJzdC5pc0VtcHR5KCkpOwogICAgICAgICAg
ICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+c2Vjb25kLmZpcnN0KTsKKyAg
ICAgICAgICAgICAgICByLT5tX2JveC0+cGFyZW50KCktPmNsZWFyQ2hpbGRyZW5IYXZlU2FtZUxp
bmVIZWlnaHRBbmRCYXNlbGluZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKChn
bHlwaE92ZXJmbG93LnRvcCB8fCBnbHlwaE92ZXJmbG93LmJvdHRvbSB8fCBnbHlwaE92ZXJmbG93
LmxlZnQgfHwgZ2x5cGhPdmVyZmxvdy5yaWdodCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQo
ci0+bV9ib3gtPmlzVGV4dCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87353</attachid>
            <date>2011-03-29 10:01:46 -0700</date>
            <delta_ts>2011-03-29 10:37:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>21218</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDMtMjkgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NzI3NgorICAgICAgICAKKyAgICAgICAgQWRkIG9wdGltaXphdGlvbnMgdG8gbWFrZSB0aGUgdmVy
dGljYWwgcGxhY2VtZW50IG9mIGJveGVzIG11Y2ggZmFzdGVyLiBXaGVuZXZlciBhIGJveCBpcyBh
ZGRlZAorICAgICAgICB0byBhIGxpbmUsIGNvbXBhcmUgaXQgd2l0aCB0aGUgcGFyZW50IGJveC4g
SWYgd2UgY2FuIGRldGVybWluZSB0aGF0IHRoZSBjaGlsZCBib3ggaGFzIHRoZSBleGFjdAorICAg
ICAgICBzYW1lIGhlaWdodCBhbmQgYmFzZWxpbmUgcG9zaXRpb24gYXMgdGhlIHBhcmVudCBib3gs
IHRoZW4gd2Uga2VlcCBhIGJvb2xlYW4gZmxhZyBzZXQgY2FsbGVkCisgICAgICAgIGNoaWxkcmVu
SGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKS4gSWYgdGhlIGJveCBpcyBkaWZmZXJlbnQg
Zm9yIGFueSByZWFzb24gdGhlbiB3ZSBjbGVhciB0aGUKKyAgICAgICAgZmxhZyB1cCB0aGUgbGlu
ZSBib3ggcGFyZW50IGNoYWluLgorCisgICAgICAgIFdoZW4gaXQgY29tZXMgdGltZSB0byBkbyBj
b21wdXRlTG9naWNhbGJveEhlaWdodHMsIHdlIGNhbiBhdm9pZCByZWN1cnJpbmcgaW50byB0aGUg
Y2hpbGRyZW4gb2YKKyAgICAgICAgYSBib3ggd2hvc2UgZGVzY2VuZGFudHMgYWxsIGhhdmUgdGhl
IHNhbWUgcG9zaXRpb24uIFdoZW4gd2UgZG8gcGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24sIHdl
CisgICAgICAgIGNhbiBkbyBhIHNpbXBsaWZpZWQgcmVjdXJzaW9uIHRoYXQganVzdCBjYWxscyBh
ZGp1c3RCbG9ja0RpcmVjdGlvblBvc2l0aW9uIHRvIG9mZnNldCB0aGUgYm94ZXMKKyAgICAgICAg
d2l0aG91dCBkb2luZyBhbnl0aGluZyBlbHNlLgorICAgICAgICAKKyAgICAgICAgQmVjYXVzZSBv
ZiB0aGUgcXVpcmtzIG1vZGUgcnVsZSBvZiBvbmx5IHNocmlua2luZyBib3hlcyB3aXRoIG5vIGlt
bWVkaWF0ZSB0ZXh0IGNoaWxkcmVuLCB3ZSBuZWVkCisgICAgICAgIHRvIHRyYWNrIHdoZXRoZXIg
YSBib3ggaGFzIHRleHQgZGVzY2VuZGFudHMgbm93IGFzIHdlbGwuICBXaGVuIHdlIGF2b2lkIGRv
aW5nIHRoZSByZWN1cnNpb24KKyAgICAgICAgdGhpcyBmbGFnIHRlbGxzIHVzIHdoZXRoZXIgdGhl
IGNvbGxlY3Rpb24gb2YgYm94ZXMgc2hvdWxkIGhhdmUgYW4gYWZmZWN0IG9uIHRoZSBhc2NlbnQg
YW5kIGRlc2NlbnQKKyAgICAgICAgb2YgdGhlIGxpbmUgaW4gcXVpcmtzIG1vZGUuCisgCisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lRmxvd0JveDo6YWRkVG9MaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6
OmNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93
Qm94OjpwbGFjZUJveGVzSW5CbG9ja0RpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94
OjpwYWludEJveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6
OnBhaW50TWFzayk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaDoKKyAgICAg
ICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OklubGluZUZsb3dCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lRmxvd0JveDo6aGFzVGV4dERlc2NlbmRhbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUZsb3dCb3g6OmRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6Y2xlYXJEZXNjZW5kYW50c0hh
dmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjcmVhdGVMaW5lQm94ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVjdExpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKToK
KwogMjAxMS0wMy0yOCAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gODIxNDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDggKzk2LDQ5IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVG9MaW5lKElubGluZUJveCoKICAg
ICB9CiAgICAgY2hpbGQtPnNldEZpcnN0TGluZVN0eWxlQml0KG1fZmlyc3RMaW5lKTsKICAgICBj
aGlsZC0+c2V0SXNIb3Jpem9udGFsKGlzSG9yaXpvbnRhbCgpKTsKLSAgICBpZiAoY2hpbGQtPmlz
VGV4dCgpKQorICAgIGlmIChjaGlsZC0+aXNUZXh0KCkpIHsKICAgICAgICAgbV9oYXNUZXh0Q2hp
bGRyZW4gPSB0cnVlOworICAgICAgICBtX2hhc1RleHREZXNjZW5kYW50cyA9IHRydWU7CisgICAg
fSBlbHNlIGlmIChjaGlsZC0+aXNJbmxpbmVGbG93Qm94KCkpIHsKKyAgICAgICAgSW5saW5lRmxv
d0JveCogY2hpbGRGbG93Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KGNoaWxkKTsK
KyAgICAgICAgaWYgKGNoaWxkRmxvd0JveC0+aGFzVGV4dERlc2NlbmRhbnRzKCkpCisgICAgICAg
ICAgICBtX2hhc1RleHREZXNjZW5kYW50cyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGRlc2Nl
bmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKSAmJiAhY2hpbGQtPnJlbmRlcmVy
KCktPmlzUG9zaXRpb25lZCgpKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIGNo
aWxkU3R5bGUgPSBjaGlsZC0+cmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpOworICAgICAg
ICBib29sIGNoYW5nZVJlc3VsdCA9IGZhbHNlOworICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVy
KCktPmlzUmVwbGFjZWQoKSkKKyAgICAgICAgICAgIGNoYW5nZVJlc3VsdCA9IHRydWU7CisgICAg
ICAgIGVsc2UgaWYgKGNoaWxkLT5pc1RleHQoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkLT5y
ZW5kZXJlcigpLT5pc0JSKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyZW50U3R5bGUtPmZv
bnQoKS5mb250TWV0cmljcygpLmFzY2VudCgpICE9IGNoaWxkU3R5bGUtPmZvbnQoKS5mb250TWV0
cmljcygpLmFzY2VudCgpCisgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudFN0eWxlLT5mb250
KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkgIT0gY2hpbGRTdHlsZS0+Zm9udCgpLmZvbnRNZXRy
aWNzKCkuZGVzY2VudCgpIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0gY2hpbGRTdHls
ZS0+bGluZUhlaWdodCgpCisgICAgICAgICAgICAgICAgICAgIHx8IChwYXJlbnRTdHlsZS0+dmVy
dGljYWxBbGlnbigpICE9IEJBU0VMSU5FICYmICFpc1Jvb3RJbmxpbmVCb3goKSkgfHwgY2hpbGRT
dHlsZS0+dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FKQorICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VSZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFN0eWxlLT5o
YXNUZXh0Q29tYmluZSgpIHx8IGNoaWxkU3R5bGUtPnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0
RW1waGFzaXNNYXJrTm9uZSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VSZXN1bHQgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLT5pc0JS
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBkdW1iLiBXZSBvbmx5IHR1
cm4gb2ZmIGJlY2F1c2UgY3VycmVudCBsYXlvdXQgdGVzdCByZXN1bHRzIGV4cGVjdCB0aGUgPGJy
PiB0byBiZSAwLWhlaWdodCBvbiB0aGUgYmFzZWxpbmUuCisgICAgICAgICAgICAgICAgLy8gT3Ro
ZXIgdGhhbiBtYWtpbmcgYSB6aWxsaW9uIHRlc3RzIGhhdmUgdG8gcmVnZW5lcmF0ZSByZXN1bHRz
LCB0aGVyZSdzIG5vIHJlYXNvbiB0byBkaXRjaCB0aGUgb3B0aW1pemF0aW9uIGhlcmUuCisgICAg
ICAgICAgICAgICAgY2hhbmdlUmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGlzSW5saW5lRmxvd0JveCgpKTsKKyAgICAgICAgICAgICAg
ICBJbmxpbmVGbG93Qm94KiBjaGlsZEZsb3dCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVGbG93Qm94
Kj4oY2hpbGQpOworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBjaGlsZCdzIGJpdCwgYW5k
IHRoZW4gYWxzbyBjaGVjayBmb3IgZGlmZmVyZW5jZXMgaW4gZm9udCwgbGluZS1oZWlnaHQsIHZl
cnRpY2FsLWFsaWduCisgICAgICAgICAgICAgICAgaWYgKCFjaGlsZEZsb3dCb3gtPmRlc2NlbmRh
bnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKSB8fCBwYXJlbnRTdHlsZS0+Zm9udCgp
LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgIT0gY2hpbGRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNz
KCkuYXNjZW50KCkKKyAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50U3R5bGUtPmZvbnQoKS5m
b250TWV0cmljcygpLmRlc2NlbnQoKSAhPSBjaGlsZFN0eWxlLT5mb250KCkuZm9udE1ldHJpY3Mo
KS5kZXNjZW50KCkgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBjaGlsZFN0eWxlLT5s
aW5lSGVpZ2h0KCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHBhcmVudFN0eWxlLT52ZXJ0aWNh
bEFsaWduKCkgIT0gQkFTRUxJTkUgJiYgIWlzUm9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxl
LT52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKKyAgICAgICAgICAgICAgICAgICAgfHwgY2hp
bGRTdHlsZS0+aGFzQm9yZGVyKCkgfHwgY2hpbGRTdHlsZS0+aGFzUGFkZGluZygpIHx8IGNoaWxk
U3R5bGUtPmhhc1RleHRDb21iaW5lKCkpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZVJlc3Vs
dCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hhbmdl
UmVzdWx0KQorICAgICAgICAgICAgY2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFu
ZEJhc2VsaW5lKCk7CisgICAgfQogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQpAQCAtNDA2
LDEyICs0NDcsMTQgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9naWNhbEJveEhlaQog
ICAgIC8vIHBhcnQgb2YgdGhlIGJveCAoRVhDTFVESU5HIGxlYWRpbmcpIGlzIGFib3ZlIChmb3Ig
YXNjZW50KSBvciBiZWxvdyAoZm9yIGRlc2NlbnQpIHRoZSByb290IGJveCdzIGJhc2VsaW5lLgog
ICAgIGJvb2wgYWZmZWN0c0FzY2VudCA9IGZhbHNlOwogICAgIGJvb2wgYWZmZWN0c0Rlc2NlbnQg
PSBmYWxzZTsKKyAgICBib29sIGNoZWNrQ2hpbGRyZW4gPSAhZGVzY2VuZGFudHNIYXZlU2FtZUxp
bmVIZWlnaHRBbmRCYXNlbGluZSgpOworICAgIAogICAgIGlmIChpc1Jvb3RJbmxpbmVCb3goKSkg
ewogICAgICAgICAvLyBFeGFtaW5lIG91ciByb290IGJveC4KICAgICAgICAgaW50IGFzY2VudCA9
IDA7CiAgICAgICAgIGludCBkZXNjZW50ID0gMDsKICAgICAgICAgcm9vdEJveC0+YXNjZW50QW5k
RGVzY2VudEZvckJveChyb290Qm94LCB0ZXh0Qm94RGF0YU1hcCwgYXNjZW50LCBkZXNjZW50LCBh
ZmZlY3RzQXNjZW50LCBhZmZlY3RzRGVzY2VudCk7Ci0gICAgICAgIGlmIChoYXNUZXh0Q2hpbGRy
ZW4oKSB8fCBzdHJpY3RNb2RlKSB7CisgICAgICAgIGlmIChzdHJpY3RNb2RlIHx8IGhhc1RleHRD
aGlsZHJlbigpIHx8ICghY2hlY2tDaGlsZHJlbiAmJiBoYXNUZXh0RGVzY2VuZGFudHMoKSkpIHsK
ICAgICAgICAgICAgIGlmIChtYXhBc2NlbnQgPCBhc2NlbnQgfHwgIXNldE1heEFzY2VudCkgewog
ICAgICAgICAgICAgICAgIG1heEFzY2VudCA9IGFzY2VudDsKICAgICAgICAgICAgICAgICBzZXRN
YXhBc2NlbnQgPSB0cnVlOwpAQCAtNDIzLDExICs0NjYsMTQgQEAgdm9pZCBJbmxpbmVGbG93Qm94
Ojpjb21wdXRlTG9naWNhbEJveEhlaQogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCFjaGVj
a0NoaWxkcmVuKQorICAgICAgICByZXR1cm47CisKICAgICBmb3IgKElubGluZUJveCogY3VyciA9
IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewogICAgICAg
ICBpZiAoY3Vyci0+cmVuZGVyZXIoKS0+aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsgLy8gUG9zaXRpb25lZCBwbGFjZWhvbGRlcnMgZG9uJ3QgYWZmZWN0IGNhbGN1bGF0aW9u
cy4KICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNJbmxpbmVGbG93ID0gY3Vyci0+aXNJbmxpbmVG
bG93Qm94KCk7CisgICAgICAgIElubGluZUZsb3dCb3gqIGlubGluZUZsb3dCb3ggPSBjdXJyLT5p
c0lubGluZUZsb3dCb3goKSA/IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKSA6IDA7
CiAgICAgICAgIAogICAgICAgICBib29sIGFmZmVjdHNBc2NlbnQgPSBmYWxzZTsKICAgICAgICAg
Ym9vbCBhZmZlY3RzRGVzY2VudCA9IGZhbHNlOwpAQCAtNDQ4LDcgKzQ5NCw4IEBAIHZvaWQgSW5s
aW5lRmxvd0JveDo6Y29tcHV0ZUxvZ2ljYWxCb3hIZWkKICAgICAgICAgfSBlbHNlIGlmIChjdXJy
LT52ZXJ0aWNhbEFsaWduKCkgPT0gQk9UVE9NKSB7CiAgICAgICAgICAgICBpZiAobWF4UG9zaXRp
b25Cb3R0b20gPCBib3hIZWlnaHQpCiAgICAgICAgICAgICAgICAgbWF4UG9zaXRpb25Cb3R0b20g
PSBib3hIZWlnaHQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoKCFpc0lubGluZUZsb3cgfHwgc3RhdGlj
X2Nhc3Q8SW5saW5lRmxvd0JveCo+KGN1cnIpLT5oYXNUZXh0Q2hpbGRyZW4oKSkgfHwgY3Vyci0+
Ym94TW9kZWxPYmplY3QoKS0+aGFzSW5saW5lRGlyZWN0aW9uQm9yZGVyc09yUGFkZGluZygpIHx8
IHN0cmljdE1vZGUpIHsKKyAgICAgICAgfSBlbHNlIGlmICghaW5saW5lRmxvd0JveCB8fCBzdHJp
Y3RNb2RlIHx8IGlubGluZUZsb3dCb3gtPmhhc1RleHRDaGlsZHJlbigpIHx8IChpbmxpbmVGbG93
Qm94LT5kZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkgJiYgaW5saW5l
Rmxvd0JveC0+aGFzVGV4dERlc2NlbmRhbnRzKCkpCisgICAgICAgICAgICAgICAgICAgfHwgaW5s
aW5lRmxvd0JveC0+Ym94TW9kZWxPYmplY3QoKS0+aGFzSW5saW5lRGlyZWN0aW9uQm9yZGVyc09y
UGFkZGluZygpKSB7CiAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlc2UgdmFsdWVzIGNhbiBi
ZSBuZWdhdGl2ZS4gIEV2ZW4gdGhvdWdoIHdlIG9ubHkgYWZmZWN0IHRoZSBtYXhBc2NlbnQgYW5k
IG1heERlc2NlbnQgdmFsdWVzCiAgICAgICAgICAgICAvLyBpZiBvdXIgYm94IChleGNsdWRpbmcg
bGluZS1oZWlnaHQpIHdhcyBhYm92ZSAoZm9yIGFzY2VudCkgb3IgYmVsb3cgKGZvciBkZXNjZW50
KSB0aGUgcm9vdCBiYXNlbGluZSwgb25jZSB5b3UgZmFjdG9yIGluIGxpbmUtaGVpZ2h0CiAgICAg
ICAgICAgICAvLyB0aGUgZmluYWwgYm94IGNhbiBlbmQgdXAgYmVpbmcgZnVsbHkgYWJvdmUgb3Ig
ZnVsbHkgYmVsb3cgdGhlIHJvb3QgYm94J3MgYmFzZWxpbmUhICBUaGlzIGlzIG9rLCBidXQgd2hh
dCBpdApAQCAtNDY4LDM3ICs1MTUsNDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpjb21wdXRlTG9n
aWNhbEJveEhlaQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGN1cnIt
PmlzSW5saW5lRmxvd0JveCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0Jv
eCo+KGN1cnIpLT5jb21wdXRlTG9naWNhbEJveEhlaWdodHMocm9vdEJveCwgbWF4UG9zaXRpb25U
b3AsIG1heFBvc2l0aW9uQm90dG9tLCBtYXhBc2NlbnQsIG1heERlc2NlbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRNYXhBc2NlbnQsIHNldE1heERlc2NlbnQsIHN0cmljdE1vZGUsIHRleHRCb3hEYXRh
TWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVUeXBlLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUp
OworICAgICAgICBpZiAoaW5saW5lRmxvd0JveCkKKyAgICAgICAgICAgIGlubGluZUZsb3dCb3gt
PmNvbXB1dGVMb2dpY2FsQm94SGVpZ2h0cyhyb290Qm94LCBtYXhQb3NpdGlvblRvcCwgbWF4UG9z
aXRpb25Cb3R0b20sIG1heEFzY2VudCwgbWF4RGVzY2VudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNYXhBc2NlbnQsIHNldE1heERlc2Nl
bnQsIHN0cmljdE1vZGUsIHRleHRCb3hEYXRhTWFwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lVHlwZSwgdmVydGljYWxQb3NpdGlv
bkNhY2hlKTsKICAgICB9CiB9CiAKIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxv
Y2tEaXJlY3Rpb24oaW50IHRvcCwgaW50IG1heEhlaWdodCwgaW50IG1heEFzY2VudCwgYm9vbCBz
dHJpY3RNb2RlLCBpbnQmIGxpbmVUb3AsIGludCYgbGluZUJvdHRvbSwgYm9vbCYgc2V0TGluZVRv
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBs
aW5lVG9wSW5jbHVkaW5nTWFyZ2lucywgaW50JiBsaW5lQm90dG9tSW5jbHVkaW5nTWFyZ2lucywg
Ym9vbCYgaGFzQW5ub3RhdGlvbnNCZWZvcmUsIGJvb2wmIGhhc0Fubm90YXRpb25zQWZ0ZXIsIEZv
bnRCYXNlbGluZSBiYXNlbGluZVR5cGUpCiB7Ci0gICAgaWYgKGlzUm9vdElubGluZUJveCgpKQot
ICAgICAgICBzZXRMb2dpY2FsVG9wKHRvcCArIG1heEFzY2VudCAtIGJhc2VsaW5lUG9zaXRpb24o
YmFzZWxpbmVUeXBlKSk7IC8vIFBsYWNlIG91ciByb290IGJveC4KKyAgICBib29sIGlzUm9vdEJv
eCA9IGlzUm9vdElubGluZUJveCgpOworICAgIGlmIChpc1Jvb3RCb3gpIHsKKyAgICAgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExp
bmUpLT5mb250TWV0cmljcygpOworICAgICAgICBzZXRMb2dpY2FsVG9wKHRvcCArIG1heEFzY2Vu
dCAtIGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUpKTsKKyAgICB9CisKKyAgICBpbnQg
YWRqdXN0bWVudEZvckNoaWxkcmVuV2l0aFNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUgPSAwOwor
ICAgIGlmIChkZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkpIHsKKyAg
ICAgICAgYWRqdXN0bWVudEZvckNoaWxkcmVuV2l0aFNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUg
PSBsb2dpY2FsVG9wKCk7CisgICAgICAgIGlmIChwYXJlbnQoKSkKKyAgICAgICAgICAgIGFkanVz
dG1lbnRGb3JDaGlsZHJlbldpdGhTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lICs9IChib3hNb2Rl
bE9iamVjdCgpLT5ib3JkZXJCZWZvcmUoKSArIGJveE1vZGVsT2JqZWN0KCktPnBhZGRpbmdCZWZv
cmUoKSk7CisgICAgfQogCiAgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAgaWYgKGN1cnItPnJl
bmRlcmVyKCktPmlzUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIFBvc2l0
aW9uZWQgcGxhY2Vob2xkZXJzIGRvbid0IGFmZmVjdCBjYWxjdWxhdGlvbnMuCi0gICAgICAgIAot
ICAgICAgICAvLyBBZGp1c3QgYm94ZXMgdG8gdXNlIHRoZWlyIHJlYWwgYm94IHkvaGVpZ2h0IGFu
ZCBub3QgdGhlIGxvZ2ljYWwgaGVpZ2h0IChhcyBkaWN0YXRlZCBieQotICAgICAgICAvLyBsaW5l
LWhlaWdodCkuCi0gICAgICAgIGJvb2wgaXNJbmxpbmVGbG93ID0gY3Vyci0+aXNJbmxpbmVGbG93
Qm94KCk7Ci0gICAgICAgIGlmIChpc0lubGluZUZsb3cpCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxJbmxpbmVGbG93Qm94Kj4oY3VyciktPnBsYWNlQm94ZXNJbkJsb2NrRGlyZWN0aW9uKHRvcCwg
bWF4SGVpZ2h0LCBtYXhBc2NlbnQsIHN0cmljdE1vZGUsIGxpbmVUb3AsIGxpbmVCb3R0b20sIHNl
dExpbmVUb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVUb3BJbmNsdWRpbmdNYXJnaW5zLCBsaW5l
Qm90dG9tSW5jbHVkaW5nTWFyZ2lucywgaGFzQW5ub3RhdGlvbnNCZWZvcmUsIGhhc0Fubm90YXRp
b25zQWZ0ZXIsIGJhc2VsaW5lVHlwZSk7CiAKKyAgICAgICAgaWYgKGRlc2NlbmRhbnRzSGF2ZVNh
bWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKSkgeworICAgICAgICAgICAgY3Vyci0+YWRqdXN0Qmxv
Y2tEaXJlY3Rpb25Qb3NpdGlvbihhZGp1c3RtZW50Rm9yQ2hpbGRyZW5XaXRoU2FtZUxpbmVIZWln
aHRBbmRCYXNlbGluZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIElubGluZUZsb3dCb3gqIGlubGluZUZsb3dCb3ggPSBjdXJyLT5pc0lubGluZUZsb3dCb3go
KSA/IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKSA6IDA7CiAgICAgICAgIGJvb2wg
Y2hpbGRBZmZlY3RzVG9wQm90dG9tUG9zID0gdHJ1ZTsKICAgICAgICAgaWYgKGN1cnItPnZlcnRp
Y2FsQWxpZ24oKSA9PSBUT1ApCiAgICAgICAgICAgICBjdXJyLT5zZXRMb2dpY2FsVG9wKHRvcCk7
CiAgICAgICAgIGVsc2UgaWYgKGN1cnItPnZlcnRpY2FsQWxpZ24oKSA9PSBCT1RUT00pCiAgICAg
ICAgICAgICBjdXJyLT5zZXRMb2dpY2FsVG9wKHRvcCArIG1heEhlaWdodCAtIGN1cnItPmxpbmVI
ZWlnaHQoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKChpc0lubGluZUZsb3cg
JiYgIXN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKS0+aGFzVGV4dENoaWxkcmVuKCkp
ICYmICFjdXJyLT5ib3hNb2RlbE9iamVjdCgpLT5oYXNJbmxpbmVEaXJlY3Rpb25Cb3JkZXJzT3JQ
YWRkaW5nKCkgJiYgIXN0cmljdE1vZGUpCisgICAgICAgICAgICBpZiAoIXN0cmljdE1vZGUgJiYg
aW5saW5lRmxvd0JveCAmJiAhaW5saW5lRmxvd0JveC0+aGFzVGV4dENoaWxkcmVuKCkgJiYgIWN1
cnItPmJveE1vZGVsT2JqZWN0KCktPmhhc0lubGluZURpcmVjdGlvbkJvcmRlcnNPclBhZGRpbmco
KQorICAgICAgICAgICAgICAgICYmICEoaW5saW5lRmxvd0JveC0+ZGVzY2VuZGFudHNIYXZlU2Ft
ZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpICYmIGlubGluZUZsb3dCb3gtPmhhc1RleHREZXNjZW5k
YW50cygpKSkKICAgICAgICAgICAgICAgICBjaGlsZEFmZmVjdHNUb3BCb3R0b21Qb3MgPSBmYWxz
ZTsKICAgICAgICAgICAgIGludCBwb3NBZGp1c3QgPSBtYXhBc2NlbnQgLSBjdXJyLT5iYXNlbGlu
ZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSk7CiAgICAgICAgICAgICBjdXJyLT5zZXRMb2dpY2FsVG9w
KGN1cnItPmxvZ2ljYWxUb3AoKSArIHRvcCArIHBvc0FkanVzdCk7CkBAIC01NjksMTMgKzYyNiwx
NiBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbkJsb2NrRGlyCiAgICAgICAgICAg
ICBsaW5lQm90dG9tID0gbWF4KGxpbmVCb3R0b20sIG5ld0xvZ2ljYWxUb3AgKyBib3hIZWlnaHQp
OwogICAgICAgICAgICAgbGluZUJvdHRvbUluY2x1ZGluZ01hcmdpbnMgPSBtYXgobGluZUJvdHRv
bSwgbWF4KGxpbmVCb3R0b21JbmNsdWRpbmdNYXJnaW5zLCBuZXdMb2dpY2FsVG9wSW5jbHVkaW5n
TWFyZ2lucyArIGJveEhlaWdodEluY2x1ZGluZ01hcmdpbnMpKTsKICAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gQWRqdXN0IGJveGVzIHRvIHVzZSB0aGVpciByZWFsIGJveCB5L2hlaWdo
dCBhbmQgbm90IHRoZSBsb2dpY2FsIGhlaWdodCAoYXMgZGljdGF0ZWQgYnkKKyAgICAgICAgLy8g
bGluZS1oZWlnaHQpLgorICAgICAgICBpZiAoaW5saW5lRmxvd0JveCkKKyAgICAgICAgICAgIGlu
bGluZUZsb3dCb3gtPnBsYWNlQm94ZXNJbkJsb2NrRGlyZWN0aW9uKHRvcCwgbWF4SGVpZ2h0LCBt
YXhBc2NlbnQsIHN0cmljdE1vZGUsIGxpbmVUb3AsIGxpbmVCb3R0b20sIHNldExpbmVUb3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
VG9wSW5jbHVkaW5nTWFyZ2lucywgbGluZUJvdHRvbUluY2x1ZGluZ01hcmdpbnMsIGhhc0Fubm90
YXRpb25zQmVmb3JlLCBoYXNBbm5vdGF0aW9uc0FmdGVyLCBiYXNlbGluZVR5cGUpOwogICAgIH0K
IAotICAgIGlmIChpc1Jvb3RJbmxpbmVCb3goKSkgewotICAgICAgICBjb25zdCBGb250TWV0cmlj
cyYgZm9udE1ldHJpY3MgPSByZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmZvbnRNZXRy
aWNzKCk7Ci0gICAgICAgIHNldExvZ2ljYWxUb3AobG9naWNhbFRvcCgpICsgYmFzZWxpbmVQb3Np
dGlvbihiYXNlbGluZVR5cGUpIC0gZm9udE1ldHJpY3MuYXNjZW50KGJhc2VsaW5lVHlwZSkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGhhc1RleHRDaGlsZHJlbigpIHx8IHN0cmljdE1vZGUpIHsK
KyAgICBpZiAoaXNSb290Qm94KSB7CisgICAgICAgIGlmIChzdHJpY3RNb2RlIHx8IGhhc1RleHRD
aGlsZHJlbigpIHx8IChkZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkg
JiYgaGFzVGV4dERlc2NlbmRhbnRzKCkpKSB7CiAgICAgICAgICAgICBpZiAoIXNldExpbmVUb3Ap
IHsKICAgICAgICAgICAgICAgICBzZXRMaW5lVG9wID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBs
aW5lVG9wID0gbG9naWNhbFRvcCgpOwpAQCAtODIxLDcgKzg4MSw3IEBAIGJvb2wgSW5saW5lRmxv
d0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKIAogICAgIC8vIENvbnN0cmFpbiBvdXIgaGl0IHRl
c3RpbmcgdG8gdGhlIGxpbmUgdG9wIGFuZCBib3R0b20gaWYgbmVjZXNzYXJ5LgogICAgIGJvb2wg
bm9RdWlya3NNb2RlID0gcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+aW5Ob1F1aXJrc01vZGUoKTsK
LSAgICBpZiAoIWhhc1RleHRDaGlsZHJlbigpICYmICFub1F1aXJrc01vZGUpIHsKKyAgICBpZiAo
IW5vUXVpcmtzTW9kZSAmJiAhaGFzVGV4dENoaWxkcmVuKCkgJiYgIShkZXNjZW5kYW50c0hhdmVT
YW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkgJiYgaGFzVGV4dERlc2NlbmRhbnRzKCkpKSB7CiAg
ICAgICAgIFJvb3RJbmxpbmVCb3gqIHJvb3RCb3ggPSByb290KCk7CiAgICAgICAgIGludCYgdG9w
ID0gaXNIb3Jpem9udGFsKCkgPyBtaW5ZIDogbWluWDsKICAgICAgICAgaW50JiBsb2dpY2FsSGVp
Z2h0ID0gaXNIb3Jpem9udGFsKCkgPyBoZWlnaHQgOiB3aWR0aDsKQEAgLTk4Niw3ICsxMDQ2LDcg
QEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKAogCiAgICAgLy8gQ29u
c3RyYWluIG91ciBiYWNrZ3JvdW5kL2JvcmRlciBwYWludGluZyB0byB0aGUgbGluZSB0b3AgYW5k
IGJvdHRvbSBpZiBuZWNlc3NhcnkuCiAgICAgYm9vbCBub1F1aXJrc01vZGUgPSByZW5kZXJlcigp
LT5kb2N1bWVudCgpLT5pbk5vUXVpcmtzTW9kZSgpOwotICAgIGlmICghaGFzVGV4dENoaWxkcmVu
KCkgJiYgIW5vUXVpcmtzTW9kZSkgeworICAgIGlmICghbm9RdWlya3NNb2RlICYmICFoYXNUZXh0
Q2hpbGRyZW4oKSAmJiAhKGRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUo
KSAmJiBoYXNUZXh0RGVzY2VuZGFudHMoKSkpIHsKICAgICAgICAgUm9vdElubGluZUJveCogcm9v
dEJveCA9IHJvb3QoKTsKICAgICAgICAgaW50JiB0b3AgPSBpc0hvcml6b250YWwoKSA/IHkgOiB4
OwogICAgICAgICBpbnQmIGxvZ2ljYWxIZWlnaHQgPSBpc0hvcml6b250YWwoKSA/IGggOiB3OwpA
QCAtMTA2OCw3ICsxMTI4LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludE1hc2soUGFpbnRJ
bmZvJgogCiAgICAgLy8gQ29uc3RyYWluIG91ciBiYWNrZ3JvdW5kL2JvcmRlciBwYWludGluZyB0
byB0aGUgbGluZSB0b3AgYW5kIGJvdHRvbSBpZiBuZWNlc3NhcnkuCiAgICAgYm9vbCBub1F1aXJr
c01vZGUgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpLT5pbk5vUXVpcmtzTW9kZSgpOwotICAgIGlm
ICghaGFzVGV4dENoaWxkcmVuKCkgJiYgIW5vUXVpcmtzTW9kZSkgeworICAgIGlmICghbm9RdWly
a3NNb2RlICYmICFoYXNUZXh0Q2hpbGRyZW4oKSAmJiAhKGRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5l
SGVpZ2h0QW5kQmFzZWxpbmUoKSAmJiBoYXNUZXh0RGVzY2VuZGFudHMoKSkpIHsKICAgICAgICAg
Um9vdElubGluZUJveCogcm9vdEJveCA9IHJvb3QoKTsKICAgICAgICAgaW50JiB0b3AgPSBpc0hv
cml6b250YWwoKSA/IHkgOiB4OwogICAgICAgICBpbnQmIGxvZ2ljYWxIZWlnaHQgPSBpc0hvcml6
b250YWwoKSA/IGggOiB3OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZs
b3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5oCShyZXZpc2lvbiA4MjE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAg
ICAgICAsIG1fbmV4dExpbmVCb3goMCkKICAgICAgICAgLCBtX2luY2x1ZGVMb2dpY2FsTGVmdEVk
Z2UoZmFsc2UpCiAgICAgICAgICwgbV9pbmNsdWRlTG9naWNhbFJpZ2h0RWRnZShmYWxzZSkKKyAg
ICAgICAgLCBtX2Rlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUodHJ1ZSkK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICwgbV9oYXNCYWRDaGlsZExpc3QoZmFsc2UpCiAjZW5k
aWYKQEAgLTU1LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAvLyB0ZXh0IGNoaWxkcmVuIG11
c3Qgbm90IGFwcGx5LiAgVGhpcyBjaGFuZ2UgYWxzbyBtZWFucyB0aGF0IGdhcHMgd2lsbCBleGlz
dCBiZXR3ZWVuIGltYWdlIGJ1bGxldCBsaXN0IGl0ZW1zLiAgRXZlbiB3aGVuIHRoZSBsaXN0IGJ1
bGxldAogICAgICAgICAvLyBpcyBhbiBpbWFnZSwgdGhlIGxpbmUgaXMgc3RpbGwgY29uc2lkZXJl
ZCB0byBiZSBpbW11bmUgZnJvbSB0aGUgcXVpcmsuCiAgICAgICAgIG1faGFzVGV4dENoaWxkcmVu
ID0gb2JqLT5zdHlsZSgpLT5kaXNwbGF5KCkgPT0gTElTVF9JVEVNOworICAgICAgICBtX2hhc1Rl
eHREZXNjZW5kYW50cyA9IG1faGFzVGV4dENoaWxkcmVuOwogICAgIH0KIAogI2lmbmRlZiBOREVC
VUcKQEAgLTE4MSw2ICsxODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBwbGFjZUVs
bGlwc2lzQm94KGJvb2wgbHRyLCBmbG9hdCBibG9ja0xlZnRFZGdlLCBmbG9hdCBibG9ja1JpZ2h0
RWRnZSwgZmxvYXQgZWxsaXBzaXNXaWR0aCwgYm9vbCYpOwogCiAgICAgYm9vbCBoYXNUZXh0Q2hp
bGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2hhc1RleHRDaGlsZHJlbjsgfQorICAgIGJvb2wgaGFz
VGV4dERlc2NlbmRhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUZXh0RGVzY2VuZGFudHM7IH0K
IAogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OwogICAgIHZvaWQgc2V0SGFzQmFk
Q2hpbGRMaXN0KCk7CkBAIC0yMjYsNiArMjI5LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExh
eW91dE92ZXJmbG93KGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIHNldFZpc3VhbE92ZXJmbG93
KGNvbnN0IEludFJlY3QmKTsKIAorICAgIGJvb2wgZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWln
aHRBbmRCYXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVI
ZWlnaHRBbmRCYXNlbGluZTsgfQorICAgIHZvaWQgY2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGlu
ZUhlaWdodEFuZEJhc2VsaW5lKCkKKyAgICB7IAorICAgICAgICBtX2Rlc2NlbmRhbnRzSGF2ZVNh
bWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUgPSBmYWxzZTsKKyAgICAgICAgaWYgKHBhcmVudCgpICYm
IHBhcmVudCgpLT5kZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkpCisg
ICAgICAgICAgICBwYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFu
ZEJhc2VsaW5lKCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgYWRkQm94U2hhZG93Vmlz
dWFsT3ZlcmZsb3coSW50UmVjdCYgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsKICAgICB2b2lkIGFk
ZFRleHRCb3hWaXN1YWxPdmVyZmxvdyhjb25zdCBJbmxpbmVUZXh0Qm94KiwgR2x5cGhPdmVyZmxv
d0FuZEZhbGxiYWNrRm9udHNNYXAmLCBJbnRSZWN0JiBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwpA
QCAtMjQ1LDYgKzI1Niw4IEBAIHByb3RlY3RlZDoKICAgICBib29sIG1faW5jbHVkZUxvZ2ljYWxM
ZWZ0RWRnZSA6IDE7CiAgICAgYm9vbCBtX2luY2x1ZGVMb2dpY2FsUmlnaHRFZGdlIDogMTsKICAg
ICBib29sIG1faGFzVGV4dENoaWxkcmVuIDogMTsKKyAgICBib29sIG1faGFzVGV4dERlc2NlbmRh
bnRzIDogMTsKKyAgICBib29sIG1fZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNl
bGluZSA6IDE7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBtX2hhc0JhZENoaWxkTGlzdDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA4MjE0
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OTgsNyArNDk4LDcgQEAgcHJpdmF0ZToKICAgICBJbmxpbmVJdGVyYXRvciBmaW5k
TmV4dExpbmVCcmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImLCBib29sIGZpcnN0TGluZSwgYm9vbCYg
aXNMaW5lRW1wdHksIExpbmVCcmVha0l0ZXJhdG9ySW5mbyYsIGJvb2wmIHByZXZpb3VzTGluZUJy
b2tlQ2xlYW5seSwgYm9vbCYgaHlwaGVuYXRlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFQ2xlYXIqLCBGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0RnJvbVByZXZpb3Vz
TGluZSwgVmVjdG9yPFJlbmRlckJveCo+JiBwb3NpdGlvbmVkT2JqZWN0cyk7CiAgICAgUm9vdElu
bGluZUJveCogY29uc3RydWN0TGluZSh1bnNpZ25lZCBydW5Db3VudCwgQmlkaVJ1biogZmlyc3RS
dW4sIEJpZGlSdW4qIGxhc3RSdW4sIGJvb2wgZmlyc3RMaW5lLCBib29sIGxhc3RMaW5lLCBSZW5k
ZXJPYmplY3QqIGVuZE9iamVjdCk7Ci0gICAgSW5saW5lRmxvd0JveCogY3JlYXRlTGluZUJveGVz
KFJlbmRlck9iamVjdCosIGJvb2wgZmlyc3RMaW5lKTsKKyAgICBJbmxpbmVGbG93Qm94KiBjcmVh
dGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiwgYm9vbCBmaXJzdExpbmUsIElubGluZUJveCogY2hp
bGRCb3gpOwogCiAgICAgdm9pZCBjb21wdXRlSW5saW5lRGlyZWN0aW9uUG9zaXRpb25zRm9yTGlu
ZShSb290SW5saW5lQm94KiwgYm9vbCBmaXJzdExpbmUsIEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRp
UnVuKiB0cmFpbGluZ1NwYWNlUnVuLCBib29sIHJlYWNoZWRFbmQsIEdseXBoT3ZlcmZsb3dBbmRG
YWxsYmFja0ZvbnRzTWFwJiwgVmVydGljYWxQb3NpdGlvbkNhY2hlJik7CiAgICAgdm9pZCBjb21w
dXRlQmxvY2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqLCBCaWRpUnVu
KiwgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXAmLCBWZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlv
dXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA4MjE0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsMTQg
KzE5NSwxNCBAQCBzdGF0aWMgYm9vbCBwYXJlbnRJc0NvbnN0cnVjdGVkT3JIYXZlTmV4CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1JbmxpbmVGbG93Qm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlTGlu
ZUJveGVzKFJlbmRlck9iamVjdCogb2JqLCBib29sIGZpcnN0TGluZSkKK0lubGluZUZsb3dCb3gq
IFJlbmRlckJsb2NrOjpjcmVhdGVMaW5lQm94ZXMoUmVuZGVyT2JqZWN0KiBvYmosIGJvb2wgZmly
c3RMaW5lLCBJbmxpbmVCb3gqIGNoaWxkQm94KQogewogICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGFu
IHVuY29uc3RydWN0ZWQgbGluZSBib3ggZm9yIHRoaXMgb2JqZWN0IHRoYXQgaXMgYWxzbwogICAg
IC8vIHRoZSBsYXN0IGl0ZW0gb24gdGhlIGxpbmUuCiAgICAgdW5zaWduZWQgbGluZURlcHRoID0g
MTsKLSAgICBJbmxpbmVGbG93Qm94KiBjaGlsZEJveCA9IDA7CiAgICAgSW5saW5lRmxvd0JveCog
cGFyZW50Qm94ID0gMDsKICAgICBJbmxpbmVGbG93Qm94KiByZXN1bHQgPSAwOworICAgIGJvb2wg
aGFzRGVmYXVsdExpbmVCb3hDb250YWluID0gc3R5bGUoKS0+bGluZUJveENvbnRhaW4oKSA9PSBS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVCb3hDb250YWluKCk7CiAgICAgZG8gewogICAgICAgICBB
U1NFUlQob2JqLT5pc1JlbmRlcklubGluZSgpIHx8IG9iaiA9PSB0aGlzKTsKICAgICAgICAgCkBA
IC0yMjMsNiArMjIzLDggQEAgSW5saW5lRmxvd0JveCogUmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVC
bwogICAgICAgICAgICAgcGFyZW50Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lRmxvd0JveCo+KG5l
d0JveCk7CiAgICAgICAgICAgICBwYXJlbnRCb3gtPnNldEZpcnN0TGluZVN0eWxlQml0KGZpcnN0
TGluZSk7CiAgICAgICAgICAgICBwYXJlbnRCb3gtPnNldElzSG9yaXpvbnRhbChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgIGlmICghaGFzRGVmYXVsdExpbmVCb3hDb250
YWluKQorICAgICAgICAgICAgICAgIHBhcmVudEJveC0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1l
TGluZUhlaWdodEFuZEJhc2VsaW5lKCk7CiAgICAgICAgICAgICBjb25zdHJ1Y3RlZE5ld0JveCA9
IHRydWU7CiAgICAgICAgIH0KIApAQCAtMjc2LDEwICsyNzgsMTEgQEAgUm9vdElubGluZUJveCog
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdExpbgogICAgICAgICAvLyBydW4ncyBpbmxpbmUgYm94Lgog
ICAgICAgICBpZiAoIXBhcmVudEJveCB8fCBwYXJlbnRCb3gtPnJlbmRlcmVyKCkgIT0gci0+bV9v
YmplY3QtPnBhcmVudCgpKQogICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBpbmxpbmUgYm94ZXMg
YWxsIHRoZSB3YXkgYmFjayB0byB0aGUgYXBwcm9wcmlhdGUgaW5zZXJ0aW9uIHBvaW50LgotICAg
ICAgICAgICAgcGFyZW50Qm94ID0gY3JlYXRlTGluZUJveGVzKHItPm1fb2JqZWN0LT5wYXJlbnQo
KSwgZmlyc3RMaW5lKTsKLQotICAgICAgICAvLyBBcHBlbmQgdGhlIGlubGluZSBib3ggdG8gdGhp
cyBsaW5lLgotICAgICAgICBwYXJlbnRCb3gtPmFkZFRvTGluZShib3gpOworICAgICAgICAgICAg
cGFyZW50Qm94ID0gY3JlYXRlTGluZUJveGVzKHItPm1fb2JqZWN0LT5wYXJlbnQoKSwgZmlyc3RM
aW5lLCBib3gpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIEFwcGVuZCB0aGUgaW5s
aW5lIGJveCB0byB0aGlzIGxpbmUuCisgICAgICAgICAgICBwYXJlbnRCb3gtPmFkZFRvTGluZShi
b3gpOworICAgICAgICB9CiAKICAgICAgICAgYm9vbCB2aXN1YWxseU9yZGVyZWQgPSByLT5tX29i
amVjdC0+c3R5bGUoKS0+dmlzdWFsbHlPcmRlcmVkKCk7CiAgICAgICAgIGJveC0+c2V0QmlkaUxl
dmVsKHItPmxldmVsKCkpOwpAQCAtNDM5LDYgKzQ0Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNv
bXB1dGVJbmxpbmVEaXJlY3Rpb24KICAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFs
bGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoc3RhdGljX2Nh
c3Q8SW5saW5lVGV4dEJveCo+KHItPm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1w
bGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLmZpcnN0OwogICAgICAgICAgICAgICAg
IEFTU0VSVChpdC0+c2Vjb25kLmZpcnN0LmlzRW1wdHkoKSk7CiAgICAgICAgICAgICAgICAgY29w
eVRvVmVjdG9yKGZhbGxiYWNrRm9udHMsIGl0LT5zZWNvbmQuZmlyc3QpOworICAgICAgICAgICAg
ICAgIHItPm1fYm94LT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdo
dEFuZEJhc2VsaW5lKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKGdseXBoT3Zl
cmZsb3cudG9wIHx8IGdseXBoT3ZlcmZsb3cuYm90dG9tIHx8IGdseXBoT3ZlcmZsb3cubGVmdCB8
fCBnbHlwaE92ZXJmbG93LnJpZ2h0KSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChyLT5tX2Jv
eC0+aXNUZXh0KCkpOwo=
</data>
<flag name="review"
          id="79775"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>