<?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>71236</bug_id>
          
          <creation_ts>2011-10-31 14:03:47 -0700</creation_ts>
          <short_desc>refactor Scrollable::m_scrollOrigin from protected to private</short_desc>
          <delta_ts>2011-11-01 15:07:11 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>70395</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xiaomei Ji">xji</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>493484</commentid>
    <comment_count>0</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-10-31 14:03:47 -0700</bug_when>
    <thetext>change Scrollable::m_scrollOrigin from protected to private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493550</commentid>
    <comment_count>1</comment_count>
      <attachid>113095</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-10-31 15:46:18 -0700</bug_when>
    <thetext>Created attachment 113095
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493565</commentid>
    <comment_count>2</comment_count>
      <attachid>113095</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-31 15:56:13 -0700</bug_when>
    <thetext>Comment on attachment 113095
patch

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

&gt; Source/WebCore/platform/ScrollableArea.h:91
&gt; +    int scrollOriginX() const { return m_scrollOrigin.x(); }
&gt; +    int scrollOriginY() const { return m_scrollOrigin.y(); }

This seems unnecessary. Why not write scrollOrigin().x() at the call site?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493568</commentid>
    <comment_count>3</comment_count>
      <attachid>113095</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-31 15:56:40 -0700</bug_when>
    <thetext>Comment on attachment 113095
patch

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

&gt; Source/WebCore/platform/ScrollableArea.cpp:69
&gt; +    if (m_scrollOrigin != origin)
&gt; +        m_scrollOrigin = origin;

The if statement adds no value.

&gt; Source/WebCore/platform/ScrollableArea.cpp:75
&gt; +    if (m_scrollOrigin.x() != x)
&gt; +        m_scrollOrigin.setX(x);

The if statement adds no value.

&gt; Source/WebCore/platform/ScrollableArea.cpp:81
&gt; +    if (m_scrollOrigin.y() != y)
&gt; +        m_scrollOrigin.setY(y);

The if statement adds no value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493575</commentid>
    <comment_count>4</comment_count>
      <attachid>113095</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-31 16:01:05 -0700</bug_when>
    <thetext>Comment on attachment 113095
patch

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

&gt; Source/WebCore/platform/ScrollView.cpp:591
&gt;  
&gt; +
&gt;      // Make sure the scrollbar offsets are up to date.

Why add a second blank line here? Please don’t.

&gt; Source/WebCore/platform/ScrollView.cpp:1264
&gt; +    if (ScrollableArea::scrollOrigin() == origin)

Should just say scrollOrigin(), not ScrollableArea::scrollOrigin().

&gt; Source/WebCore/platform/ScrollView.h:322
&gt; -    IntPoint scrollOrigin() const { return m_scrollOrigin; }
&gt; +    IntPoint scrollOrigin() const { return ScrollableArea::scrollOrigin(); }

Why is this needed at all? Can’t we just use the inherited function and not override it? If the visibility needs to change, that can be done with &quot;using&quot;.

&gt; Source/WebCore/platform/ScrollableArea.h:94
&gt; +    void setScrollOrigin(const IntPoint&amp;);
&gt; +    void setScrollOriginX(int);
&gt; +    void setScrollOriginY(int);

It’s not good to have these as new public functions. It would be dangerous to call any of these on, say, a ScrollView, bypassing the ScrollView::setScrollOrigin function that prefers the actual scrolling.

So we need to keep these private in classes like ScrollView, somehow. It’s not clear to me what the best way to do that is. Maybe make protected in this class? That might not be sufficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494026</commentid>
    <comment_count>5</comment_count>
      <attachid>113095</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-11-01 11:01:26 -0700</bug_when>
    <thetext>Comment on attachment 113095
patch

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

&gt;&gt; Source/WebCore/platform/ScrollView.cpp:591
&gt;&gt;      // Make sure the scrollbar offsets are up to date.
&gt; 
&gt; Why add a second blank line here? Please don’t.

Thanks for the quick review!

removed the blank line.

&gt;&gt; Source/WebCore/platform/ScrollView.cpp:1264
&gt;&gt; +    if (ScrollableArea::scrollOrigin() == origin)
&gt; 
&gt; Should just say scrollOrigin(), not ScrollableArea::scrollOrigin().

changed.

&gt;&gt; Source/WebCore/platform/ScrollView.h:322
&gt;&gt; +    IntPoint scrollOrigin() const { return ScrollableArea::scrollOrigin(); }
&gt; 
&gt; Why is this needed at all? Can’t we just use the inherited function and not override it? If the visibility needs to change, that can be done with &quot;using&quot;.

Yes, you are right. it is not needed. I changed the caller side in FrameView.cpp

&gt;&gt; Source/WebCore/platform/ScrollableArea.cpp:69
&gt;&gt; +        m_scrollOrigin = origin;
&gt; 
&gt; The if statement adds no value.

removed and moved the assignment into inline in .h

&gt;&gt; Source/WebCore/platform/ScrollableArea.cpp:75
&gt;&gt; +        m_scrollOrigin.setX(x);
&gt; 
&gt; The if statement adds no value.

removed.

&gt;&gt; Source/WebCore/platform/ScrollableArea.cpp:81
&gt;&gt; +        m_scrollOrigin.setY(y);
&gt; 
&gt; The if statement adds no value.

removed.

&gt;&gt; Source/WebCore/platform/ScrollableArea.h:91
&gt;&gt; +    int scrollOriginY() const { return m_scrollOrigin.y(); }
&gt; 
&gt; This seems unnecessary. Why not write scrollOrigin().x() at the call site?

removed.

&gt;&gt; Source/WebCore/platform/ScrollableArea.h:94
&gt;&gt; +    void setScrollOriginY(int);
&gt; 
&gt; It’s not good to have these as new public functions. It would be dangerous to call any of these on, say, a ScrollView, bypassing the ScrollView::setScrollOrigin function that prefers the actual scrolling.
&gt; 
&gt; So we need to keep these private in classes like ScrollView, somehow. It’s not clear to me what the best way to do that is. Maybe make protected in this class? That might not be sufficient.

Yes, you are right that it should not be public.  I changed m_scrollOrigin from protected to private in ScrollableArea. but the value is set in ScrollView and RenderLayer. I changed those setters as protected for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494027</commentid>
    <comment_count>6</comment_count>
      <attachid>113196</attachid>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-11-01 11:02:26 -0700</bug_when>
    <thetext>Created attachment 113196
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494191</commentid>
    <comment_count>7</comment_count>
    <who name="Xiaomei Ji">xji</who>
    <bug_when>2011-11-01 15:07:11 -0700</bug_when>
    <thetext>Committed r99002: &lt;http://trac.webkit.org/changeset/99002&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113095</attachid>
            <date>2011-10-31 15:46:18 -0700</date>
            <delta_ts>2011-11-01 11:02:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>71236.v1</filename>
            <type>text/plain</type>
            <size>15278</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4ODg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMzEgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yOiBjaGFuZ2UgU2Nyb2xs
YWJsZTo6bV9zY3JvbGxPcmlnaW4gZnJvbSBwcm90ZWN0ZWQgdG8gcHJpdmF0ZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjM2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT25seSByZWZhY3Rvciwgbm8g
bmV3IHRlc3RzIG5lZWRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6Om1pbmltdW1TY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6b3ZlcmhhbmdBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
dXBkYXRlU2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3aGVlbEV2
ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxWaWV3OjpzY3JvbGxPcmlnaW4pOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFi
bGVBcmVhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxP
cmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9yaWdp
blgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9yaWdpblkp
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsT3JpZ2luWCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsT3JpZ2luWSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUbyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6Om1pbmltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsWE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsWU9mZnNl
dCk6CisKIDIwMTEtMTAtMzEgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIE92ZXJyaWRkZW4gTGF5b3V0UmVjdCBtZXRob2Qgc3RpbGwgdXNlcyBJbnRSZWN0cwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDk4MTQy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5NiwxNCArMjk2LDE0IEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0Q29udGVudHNTaXpl
KGNvbnN0IEkKIAogSW50UG9pbnQgU2Nyb2xsVmlldzo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkg
Y29uc3QKIHsKLSAgICBJbnRQb2ludCBtYXhpbXVtT2Zmc2V0KGNvbnRlbnRzV2lkdGgoKSAtIHZp
c2libGVXaWR0aCgpIC0gbV9zY3JvbGxPcmlnaW4ueCgpLCBjb250ZW50c0hlaWdodCgpIC0gdmlz
aWJsZUhlaWdodCgpIC0gbV9zY3JvbGxPcmlnaW4ueSgpKTsKKyAgICBJbnRQb2ludCBtYXhpbXVt
T2Zmc2V0KGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpIC0gc2Nyb2xsT3JpZ2luWCgp
LCBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpIC0gc2Nyb2xsT3JpZ2luWSgpKTsK
ICAgICBtYXhpbXVtT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKICAgICByZXR1cm4gbWF4
aW11bU9mZnNldDsKIH0KIAogSW50UG9pbnQgU2Nyb2xsVmlldzo6bWluaW11bVNjcm9sbFBvc2l0
aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW50UG9pbnQoLW1fc2Nyb2xsT3JpZ2luLngoKSwg
LW1fc2Nyb2xsT3JpZ2luLnkoKSk7CisgICAgcmV0dXJuIEludFBvaW50KC1zY3JvbGxPcmlnaW5Y
KCksIC1zY3JvbGxPcmlnaW5ZKCkpOwogfQogCiBJbnRQb2ludCBTY3JvbGxWaWV3OjphZGp1c3RT
Y3JvbGxQb3NpdGlvbldpdGhpblJhbmdlKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkgY29u
c3QKQEAgLTMzNyw4ICszMzcsOCBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldChj
b25zdCBJCiAgICAgfQogCiAgICAgSW50U2l6ZSBuZXdPZmZzZXQgPSBtX3Njcm9sbE9mZnNldDsK
LSAgICBuZXdPZmZzZXQuc2V0V2lkdGgoaG9yaXpvbnRhbE9mZnNldCAtIG1fc2Nyb2xsT3JpZ2lu
LngoKSk7Ci0gICAgbmV3T2Zmc2V0LnNldEhlaWdodCh2ZXJ0aWNhbE9mZnNldCAtIG1fc2Nyb2xs
T3JpZ2luLnkoKSk7CisgICAgbmV3T2Zmc2V0LnNldFdpZHRoKGhvcml6b250YWxPZmZzZXQgLSBz
Y3JvbGxPcmlnaW5YKCkpOworICAgIG5ld09mZnNldC5zZXRIZWlnaHQodmVydGljYWxPZmZzZXQg
LSBzY3JvbGxPcmlnaW5ZKCkpOwogCiAgICAgc2Nyb2xsVG8obmV3T2Zmc2V0KTsKIH0KQEAgLTM2
MCw5ICszNjAsOSBAQCB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbFRvKGNvbnN0IEludFNpemUmCiBp
bnQgU2Nyb2xsVmlldzo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0
CiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKQotICAgICAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54KCkgKyBtX3Njcm9sbE9yaWdp
bi54KCk7CisgICAgICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpLngoKSArIHNjcm9sbE9yaWdp
blgoKTsKICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xs
YmFyKQotICAgICAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS55KCkgKyBtX3Njcm9sbE9yaWdp
bi55KCk7CisgICAgICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpLnkoKSArIHNjcm9sbE9yaWdp
blkoKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDA4LDEzICs0MDgsMTMgQEAgSW50U2l6ZSBT
Y3JvbGxWaWV3OjpvdmVyaGFuZ0Ftb3VudCgpIGNvbgogewogICAgIEludFNpemUgc3RyZXRjaDsK
IAotICAgIGludCBwaHlzaWNhbFNjcm9sbFkgPSBzY3JvbGxQb3NpdGlvbigpLnkoKSArIG1fc2Ny
b2xsT3JpZ2luLnkoKTsKKyAgICBpbnQgcGh5c2ljYWxTY3JvbGxZID0gc2Nyb2xsUG9zaXRpb24o
KS55KCkgKyBzY3JvbGxPcmlnaW5ZKCk7CiAgICAgaWYgKHBoeXNpY2FsU2Nyb2xsWSA8IDApCiAg
ICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHBoeXNpY2FsU2Nyb2xsWSk7CiAgICAgZWxzZSBpZiAo
Y29udGVudHNIZWlnaHQoKSAmJiBwaHlzaWNhbFNjcm9sbFkgPiBjb250ZW50c0hlaWdodCgpIC0g
dmlzaWJsZUhlaWdodCgpKQogICAgICAgICBzdHJldGNoLnNldEhlaWdodChwaHlzaWNhbFNjcm9s
bFkgLSAoY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwogCi0gICAgaW50IHBo
eXNpY2FsU2Nyb2xsWCA9IHNjcm9sbFBvc2l0aW9uKCkueCgpICsgbV9zY3JvbGxPcmlnaW4ueCgp
OworICAgIGludCBwaHlzaWNhbFNjcm9sbFggPSBzY3JvbGxQb3NpdGlvbigpLngoKSArIHNjcm9s
bE9yaWdpblgoKTsKICAgICBpZiAocGh5c2ljYWxTY3JvbGxYIDwgMCkKICAgICAgICAgc3RyZXRj
aC5zZXRXaWR0aChwaHlzaWNhbFNjcm9sbFgpOwogICAgIGVsc2UgaWYgKGNvbnRlbnRzV2lkdGgo
KSAmJiBwaHlzaWNhbFNjcm9sbFggPiBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkK
QEAgLTQ5Myw4ICs0OTMsOCBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29u
c3QgCiAgICAgICAgICAgICBuZXdIYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gZmFsc2U7CiAKICAg
ICAgICAgaWYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIgIT0gbmV3SGFzSG9yaXpvbnRhbFNjcm9s
bGJhciAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhciB8fCAhYXZvaWRTY3JvbGxiYXJDcmVhdGlv
bigpKSkgewotICAgICAgICAgICAgaWYgKG1fc2Nyb2xsT3JpZ2luLnkoKSAmJiAhbmV3SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgICAgICBtX3Njcm9sbE9yaWdpbi5zZXRZKG1f
c2Nyb2xsT3JpZ2luLnkoKSAtIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAg
ICAgICAgICAgaWYgKHNjcm9sbE9yaWdpblkoKSAmJiAhbmV3SGFzSG9yaXpvbnRhbFNjcm9sbGJh
cikKKyAgICAgICAgICAgICAgICBzZXRTY3JvbGxPcmlnaW5ZKHNjcm9sbE9yaWdpblkoKSAtIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKG1faG9yaXpv
bnRhbFNjcm9sbGJhcikKICAgICAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPmlu
dmFsaWRhdGUoKTsKICAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmV3SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcik7CkBAIC01MDIsOCArNTAyLDggQEAgdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyICE9IG5ld0hhc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIChoYXNWZXJ0aWNh
bFNjcm9sbGJhciB8fCAhYXZvaWRTY3JvbGxiYXJDcmVhdGlvbigpKSkgewotICAgICAgICAgICAg
aWYgKG1fc2Nyb2xsT3JpZ2luLngoKSAmJiAhbmV3SGFzVmVydGljYWxTY3JvbGxiYXIpCi0gICAg
ICAgICAgICAgICAgbV9zY3JvbGxPcmlnaW4uc2V0WChtX3Njcm9sbE9yaWdpbi54KCkgLSBtX3Zl
cnRpY2FsU2Nyb2xsYmFyLT53aWR0aCgpKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxPcmlnaW5Y
KCkgJiYgIW5ld0hhc1ZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICAgICAgICAgIHNldFNjcm9s
bE9yaWdpblgoc2Nyb2xsT3JpZ2luWCgpIC0gbV92ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSk7
CiAgICAgICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKICAgICAgICAgICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5pbnZhbGlkYXRlKCk7CiAgICAgICAgICAgICBzZXRIYXNWZXJ0
aWNhbFNjcm9sbGJhcihuZXdIYXNWZXJ0aWNhbFNjcm9sbGJhcik7CkBAIC01ODMsMTAgKzU4Mywx
MSBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAg
ICBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChvbGRTY3JvbGxDb3JuZXJSZWN0KTsKICAgICB9
CiAKLSAgICBJbnRQb2ludCBzY3JvbGxQb2ludCA9IGFkanVzdFNjcm9sbFBvc2l0aW9uV2l0aGlu
UmFuZ2UoSW50UG9pbnQoZGVzaXJlZE9mZnNldCkpICsgSW50U2l6ZShtX3Njcm9sbE9yaWdpbi54
KCksIG1fc2Nyb2xsT3JpZ2luLnkoKSk7CisgICAgSW50UG9pbnQgc2Nyb2xsUG9pbnQgPSBhZGp1
c3RTY3JvbGxQb3NpdGlvbldpdGhpblJhbmdlKEludFBvaW50KGRlc2lyZWRPZmZzZXQpKSArIElu
dFNpemUoc2Nyb2xsT3JpZ2luWCgpLCBzY3JvbGxPcmlnaW5ZKCkpOwogICAgIGlmIChzY3JvbGxQ
b2ludCAhPSBzY3JvbGxQb3NpdGlvbigpKQogICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHNjcm9sbFBvaW50KTsKIAorCiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBzY3JvbGxiYXIgb2Zmc2V0cyBhcmUgdXAgdG8gZGF0ZS4KICAgICBpZiAobV9ob3Jp
em9udGFsU2Nyb2xsYmFyKQogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPm9mZnNldERp
ZENoYW5nZSgpOwpAQCAtMTA3Niw3ICsxMDc3LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxh
dGVPdmVyaGFuZ0FyZWFzRgogICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gKGhv
cml6b250YWxTY3JvbGxiYXIoKSAmJiAhaG9yaXpvbnRhbFNjcm9sbGJhcigpLT5pc092ZXJsYXlT
Y3JvbGxiYXIoKSkKICAgICAgICAgPyBob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpIDog
MDsKIAotICAgIGludCBwaHlzaWNhbFNjcm9sbFkgPSBzY3JvbGxQb3NpdGlvbigpLnkoKSArIG1f
c2Nyb2xsT3JpZ2luLnkoKTsKKyAgICBpbnQgcGh5c2ljYWxTY3JvbGxZID0gc2Nyb2xsUG9zaXRp
b24oKS55KCkgKyBzY3JvbGxPcmlnaW5ZKCk7CiAgICAgaWYgKHBoeXNpY2FsU2Nyb2xsWSA8IDAp
IHsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCA9IGZyYW1lUmVjdCgpOwogICAgICAg
ICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LnNldEhlaWdodCgtcGh5c2ljYWxTY3JvbGxZKTsKQEAg
LTEwODcsNyArMTA4OCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVh
c0YKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKICAg
ICB9CiAKLSAgICBpbnQgcGh5c2ljYWxTY3JvbGxYID0gc2Nyb2xsUG9zaXRpb24oKS54KCkgKyBt
X3Njcm9sbE9yaWdpbi54KCk7CisgICAgaW50IHBoeXNpY2FsU2Nyb2xsWCA9IHNjcm9sbFBvc2l0
aW9uKCkueCgpICsgc2Nyb2xsT3JpZ2luWCgpOwogICAgIGlmIChwaHlzaWNhbFNjcm9sbFggPCAw
KSB7CiAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFdpZHRoKC1waHlzaWNhbFNjcm9s
bFgpOwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoZnJhbWVSZWN0KCku
aGVpZ2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LmhlaWdodCgpKTsKQEAgLTEyNjAsMTAg
KzEyNjEsMTAgQEAgdm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVQYW5TY3JvbGxJY29uKCkKIAogdm9p
ZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIG9yaWdpbiwgYm9v
bCB1cGRhdGVQb3NpdGlvbkF0QWxsLCBib29sIHVwZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseSkK
IHsKLSAgICBpZiAobV9zY3JvbGxPcmlnaW4gPT0gb3JpZ2luKQorICAgIGlmIChTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsT3JpZ2luKCkgPT0gb3JpZ2luKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3Njcm9sbE9yaWdpbiA9IG9yaWdpbjsKKyAgICBTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3Jp
Z2luKG9yaWdpbik7CiAKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgewogICAgICAgICBwbGF0
Zm9ybVNldFNjcm9sbE9yaWdpbihvcmlnaW4sIHVwZGF0ZVBvc2l0aW9uQXRBbGwsIHVwZGF0ZVBv
c2l0aW9uU3luY2hyb25vdXNseSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCShyZXZpc2lvbiA5ODE0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsQ29udGVudHNTbG93UGF0aChjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0KTsKIAogICAgIHZvaWQgc2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBvaW50JiwgYm9vbCB1
cGRhdGVQb3NpdGlvbkF0QWxsLCBib29sIHVwZGF0ZVBvc2l0aW9uU3luY2hyb25vdXNseSk7Ci0g
ICAgSW50UG9pbnQgc2Nyb2xsT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPcmlnaW47
IH0KKyAgICBJbnRQb2ludCBzY3JvbGxPcmlnaW4oKSBjb25zdCB7IHJldHVybiBTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsT3JpZ2luKCk7IH0KIAogICAgIC8vIFN1YmNsYXNzZWQgYnkgRnJhbWVWaWV3
IHRvIGNoZWNrIHRoZSB3cml0aW5nLW1vZGUgb2YgdGhlIGRvY3VtZW50LgogICAgIHZpcnR1YWwg
Ym9vbCBpc1ZlcnRpY2FsRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCShyZXZpc2lvbiA5ODE0
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNyArNjIsMjUgQEAgU2Nyb2xsQW5pbWF0b3IqIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxBbgogCiAgICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3IuZ2V0KCk7CiB9CisKK3Zv
aWQgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgb3JpZ2lu
KQoreworICAgIGlmIChtX3Njcm9sbE9yaWdpbiAhPSBvcmlnaW4pCisgICAgICAgIG1fc2Nyb2xs
T3JpZ2luID0gb3JpZ2luOworfQogIAordm9pZCBTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3Jp
Z2luWChpbnQgeCkKK3sKKyAgICBpZiAobV9zY3JvbGxPcmlnaW4ueCgpICE9IHgpCisgICAgICAg
IG1fc2Nyb2xsT3JpZ2luLnNldFgoeCk7Cit9CisKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFNj
cm9sbE9yaWdpblkoaW50IHkpCit7CisgICAgaWYgKG1fc2Nyb2xsT3JpZ2luLnkoKSAhPSB5KQor
ICAgICAgICBtX3Njcm9sbE9yaWdpbi5zZXRZKHkpOworfQorCiBib29sIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmgJKHJldmlzaW9uIDk4MTQyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsMTMgQEAgcHVibGljOgogICAgIFNj
cm9sbGJhck92ZXJsYXlTdHlsZSBzY3JvbGxiYXJPdmVybGF5U3R5bGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxTY3JvbGxiYXJPdmVybGF5U3R5bGU+KG1fc2Nyb2xsYmFyT3ZlcmxheVN0
eWxlKTsgfQogCiAgICAgU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yKCkgY29uc3Q7CisK
ICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zY3Jv
bGxPcmlnaW47IH0KKyAgICBpbnQgc2Nyb2xsT3JpZ2luWCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsT3JpZ2luLngoKTsgfQorICAgIGludCBzY3JvbGxPcmlnaW5ZKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxPcmlnaW4ueSgpOyB9CisgICAgdm9pZCBzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50
UG9pbnQmKTsKKyAgICB2b2lkIHNldFNjcm9sbE9yaWdpblgoaW50KTsKKyAgICB2b2lkIHNldFNj
cm9sbE9yaWdpblkoaW50KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25z
dCA9IDA7CkBAIC0xODEsMTkgKzE4Nyw2IEBAIHByb3RlY3RlZDoKICAgICBib29sIGhhc0xheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdDsKICAgICBib29sIGhhc0xheWVyRm9yU2Nyb2xs
Q29ybmVyKCkgY29uc3Q7CiAKLSAgICAvLyBUaGVyZSBhcmUgOCBwb3NzaWJsZSBjb21iaW5hdGlv
bnMgb2Ygd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24uIFNjcm9sbCBvcmlnaW4gd2lsbCBiZSBu
b24temVybyBpbiB0aGUgeCBvciB5IGF4aXMKLSAgICAvLyBpZiB0aGVyZSBpcyBhbnkgcmV2ZXJz
ZWQgZGlyZWN0aW9uIG9yIHdyaXRpbmctbW9kZS4gVGhlIGNvbWJpbmF0aW9ucyBhcmU6Ci0gICAg
Ly8gd3JpdGluZy1tb2RlIC8gZGlyZWN0aW9uICAgICBzY3JvbGxPcmlnaW4ueCgpIHNldCAgICBz
Y3JvbGxPcmlnaW4ueSgpIHNldAotICAgIC8vIGhvcml6b250YWwtdGIgLyBsdHIgICAgICAgICAg
Tk8gICAgICAgICAgICAgICAgICAgICAgTk8KLSAgICAvLyBob3Jpem9udGFsLXRiIC8gcnRsICAg
ICAgICAgIFlFUyAgICAgICAgICAgICAgICAgICAgIE5PCi0gICAgLy8gaG9yaXpvbnRhbC1idCAv
IGx0ciAgICAgICAgICBOTyAgICAgICAgICAgICAgICAgICAgICBZRVMKLSAgICAvLyBob3Jpem9u
dGFsLWJ0IC8gcnRsICAgICAgICAgIFlFUyAgICAgICAgICAgICAgICAgICAgIFlFUwotICAgIC8v
IHZlcnRpY2FsLWxyIC8gbHRyICAgICAgICAgICAgTk8gICAgICAgICAgICAgICAgICAgICAgTk8K
LSAgICAvLyB2ZXJ0aWNhbC1sciAvIHJ0bCAgICAgICAgICAgIE5PICAgICAgICAgICAgICAgICAg
ICAgIFlFUwotICAgIC8vIHZlcnRpY2FsLXJsIC8gbHRyICAgICAgICAgICAgWUVTICAgICAgICAg
ICAgICAgICAgICAgTk8KLSAgICAvLyB2ZXJ0aWNhbC1ybCAvIHJ0bCAgICAgICAgICAgIFlFUyAg
ICAgICAgICAgICAgICAgICAgIFlFUwotICAgIEludFBvaW50IG1fc2Nyb2xsT3JpZ2luOwotCiBw
cml2YXRlOgogICAgIC8vIE5PVEU6IE9ubHkgY2FsbGVkIGZyb20gdGhlIFNjcm9sbEFuaW1hdG9y
LgogICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxBbmltYXRvcjsKQEAgLTIwOCw2ICsyMDEsMTkgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2hvcml6b250YWxTY3JvbGxFbGFzdGljaXR5IDogMjsg
Ly8gU2Nyb2xsRWxhc3RpY2l0eQogCiAgICAgdW5zaWduZWQgbV9zY3JvbGxiYXJPdmVybGF5U3R5
bGUgOiAyOyAvLyBTY3JvbGxiYXJPdmVybGF5U3R5bGUKKworICAgIC8vIFRoZXJlIGFyZSA4IHBv
c3NpYmxlIGNvbWJpbmF0aW9ucyBvZiB3cml0aW5nIG1vZGUgYW5kIGRpcmVjdGlvbi4gU2Nyb2xs
IG9yaWdpbiB3aWxsIGJlIG5vbi16ZXJvIGluIHRoZSB4IG9yIHkgYXhpcworICAgIC8vIGlmIHRo
ZXJlIGlzIGFueSByZXZlcnNlZCBkaXJlY3Rpb24gb3Igd3JpdGluZy1tb2RlLiBUaGUgY29tYmlu
YXRpb25zIGFyZToKKyAgICAvLyB3cml0aW5nLW1vZGUgLyBkaXJlY3Rpb24gICAgIHNjcm9sbE9y
aWdpbi54KCkgc2V0ICAgIHNjcm9sbE9yaWdpbi55KCkgc2V0CisgICAgLy8gaG9yaXpvbnRhbC10
YiAvIGx0ciAgICAgICAgICBOTyAgICAgICAgICAgICAgICAgICAgICBOTworICAgIC8vIGhvcml6
b250YWwtdGIgLyBydGwgICAgICAgICAgWUVTICAgICAgICAgICAgICAgICAgICAgTk8KKyAgICAv
LyBob3Jpem9udGFsLWJ0IC8gbHRyICAgICAgICAgIE5PICAgICAgICAgICAgICAgICAgICAgIFlF
UworICAgIC8vIGhvcml6b250YWwtYnQgLyBydGwgICAgICAgICAgWUVTICAgICAgICAgICAgICAg
ICAgICAgWUVTCisgICAgLy8gdmVydGljYWwtbHIgLyBsdHIgICAgICAgICAgICBOTyAgICAgICAg
ICAgICAgICAgICAgICBOTworICAgIC8vIHZlcnRpY2FsLWxyIC8gcnRsICAgICAgICAgICAgTk8g
ICAgICAgICAgICAgICAgICAgICAgWUVTCisgICAgLy8gdmVydGljYWwtcmwgLyBsdHIgICAgICAg
ICAgICBZRVMgICAgICAgICAgICAgICAgICAgICBOTworICAgIC8vIHZlcnRpY2FsLXJsIC8gcnRs
ICAgICAgICAgICAgWUVTICAgICAgICAgICAgICAgICAgICAgWUVTCisgICAgSW50UG9pbnQgbV9z
Y3JvbGxPcmlnaW47CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDk4MTQyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM4NSw3ICsxMzg1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8oTGF5b3V0VW5pdCB4
LAogICAgIC8vIGNvbXBsaWNhdGVkIChzaW5jZSBpdCB3aWxsIGludm9sdmUgdGVzdGluZyB3aGV0
aGVyIG91ciBsYXllcgogICAgIC8vIGlzIGVpdGhlciBvY2NsdWRlZCBieSBhbm90aGVyIGxheWVy
IG9yIGNsaXBwZWQgYnkgYW4gZW5jbG9zaW5nCiAgICAgLy8gbGF5ZXIgb3IgY29udGFpbnMgZml4
ZWQgYmFja2dyb3VuZHMsIGV0Yy4pLgotICAgIExheW91dFNpemUgbmV3U2Nyb2xsT2Zmc2V0ID0g
TGF5b3V0U2l6ZSh4IC0gbV9zY3JvbGxPcmlnaW4ueCgpLCB5IC0gbV9zY3JvbGxPcmlnaW4ueSgp
KTsKKyAgICBMYXlvdXRTaXplIG5ld1Njcm9sbE9mZnNldCA9IExheW91dFNpemUoeCAtIHNjcm9s
bE9yaWdpblgoKSwgeSAtIHNjcm9sbE9yaWdpblkoKSk7CiAgICAgaWYgKG1fc2Nyb2xsT2Zmc2V0
ID09IG5ld1Njcm9sbE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fc2Nyb2xsT2Zmc2V0
ID0gbmV3U2Nyb2xsT2Zmc2V0OwpAQCAtMTcwOSwxOCArMTcwOSwxOCBAQCBMYXlvdXRVbml0IFJl
bmRlckxheWVyOjpzY3JvbGxQb3NpdGlvbihTCiAKIExheW91dFBvaW50IFJlbmRlckxheWVyOjpz
Y3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2Nyb2xsT3JpZ2luICsgbV9z
Y3JvbGxPZmZzZXQ7CisgICAgcmV0dXJuIHNjcm9sbE9yaWdpbigpICsgbV9zY3JvbGxPZmZzZXQ7
CiB9CiAKIExheW91dFBvaW50IFJlbmRlckxheWVyOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBj
b25zdAogewotICAgIHJldHVybiBtX3Njcm9sbE9yaWdpbjsKKyAgICByZXR1cm4gc2Nyb2xsT3Jp
Z2luKCk7CiB9CiAKIExheW91dFBvaW50IFJlbmRlckxheWVyOjptYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBtX3Njcm9sbFNpemUgbWF5IG5vdCBiZSB1cC10
by1kYXRlIGlmIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IGlzIHRydWUuCi0gICAgcmV0dXJuIG1f
c2Nyb2xsT3JpZ2luICsgbV9zY3JvbGxTaXplIC0gdmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpLnNp
emUoKTsKKyAgICByZXR1cm4gc2Nyb2xsT3JpZ2luKCkgKyBtX3Njcm9sbFNpemUgLSB2aXNpYmxl
Q29udGVudFJlY3QodHJ1ZSkuc2l6ZSgpOwogfQogCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjp2
aXNpYmxlQ29udGVudFJlY3QoYm9vbCBpbmNsdWRlU2Nyb2xsYmFycykgY29uc3QKQEAgLTIyMDcs
NyArMjIwNyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb24KICAg
ICBtX3Njcm9sbFNpemUuc2V0V2lkdGgob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkp
OwogICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93
VG9wKCkpOwogICAgIAotICAgIG1fc2Nyb2xsT3JpZ2luID0gTGF5b3V0UG9pbnQoLW1fc2Nyb2xs
T3ZlcmZsb3cud2lkdGgoKSwgLW1fc2Nyb2xsT3ZlcmZsb3cuaGVpZ2h0KCkpOworICAgIHNldFNj
cm9sbE9yaWdpbihMYXlvdXRQb2ludCgtbV9zY3JvbGxPdmVyZmxvdy53aWR0aCgpLCAtbV9zY3Jv
bGxPdmVyZmxvdy5oZWlnaHQoKSkpOwogCiAgICAgaWYgKG5lZWRIQmFyKQogICAgICAgICAqbmVl
ZEhCYXIgPSBtX3Njcm9sbFNpemUud2lkdGgoKSA+IGJveC0+Y2xpZW50V2lkdGgoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA5ODE0MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzksOCArMjc5LDggQEAgcHVibGljOgogCiAgICAgTGF5b3V0U2l6ZSBzY3JvbGxlZENvbnRl
bnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBzY3JvbGxPZmZzZXQoKSArIG1fc2Nyb2xsT3ZlcmZs
b3c7IH0KIAotICAgIExheW91dFVuaXQgc2Nyb2xsWE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Nyb2xsT2Zmc2V0LndpZHRoKCkgKyBtX3Njcm9sbE9yaWdpbi54KCk7IH0KLSAgICBMYXlvdXRV
bml0IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQo
KSArIG1fc2Nyb2xsT3JpZ2luLnkoKTsgfQorICAgIExheW91dFVuaXQgc2Nyb2xsWE9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCkgKyBzY3JvbGxPcmlnaW5YKCk7
IH0KKyAgICBMYXlvdXRVbml0IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bE9mZnNldC5oZWlnaHQoKSArIHNjcm9sbE9yaWdpblkoKTsgfQogICAgIExheW91dFNpemUgc2Ny
b2xsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0U2l6ZShzY3JvbGxYT2Zmc2V0KCksIHNj
cm9sbFlPZmZzZXQoKSk7IH0KIAogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXQoTGF5b3V0VW5pdCwg
TGF5b3V0VW5pdCwgU2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgPSBTY3JvbGxPZmZzZXRVbmNsYW1wZWQp
Owo=
</data>
<flag name="review"
          id="111346"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113196</attachid>
            <date>2011-11-01 11:02:26 -0700</date>
            <delta_ts>2011-11-01 11:55:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>71236.v2</filename>
            <type>text/plain</type>
            <size>14775</size>
            <attacher name="Xiaomei Ji">xji</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk4OTc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMTEtMDEgIFhpYW9tZWkg
SmkgIDx4amlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlZmFjdG9yOiBjaGFuZ2UgU2Nyb2xs
YWJsZTo6bV9zY3JvbGxPcmlnaW4gZnJvbSBwcm90ZWN0ZWQgdG8gcHJpdmF0ZS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjM2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT25seSByZWZhY3Rvciwgbm8g
bmV3IHRlc3RzIG5lZWRlZC4KKworICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsWEZvckZpeGVkUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxZRm9yRml4ZWRQb3NpdGlvbik6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
bWluaW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNl
dFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpvdmVyaGFuZ0Ftb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbFZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9yaWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luWCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luWSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3Jv
bGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om1pbmltdW1TY3JvbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsWE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
c2Nyb2xsWU9mZnNldCk6CisKIDIwMTEtMTEtMDEgIE1pa2UgUmVlZCAgPHJlZWRAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBbc2tpYV0gY2FsbCByZWFkUGl4ZWxzIG9uIGNhbnZhcyBpbnN0ZWFkIG9m
IGRldmljZSAod2lsbCBiZSBwcml2YXRlIG9uIGRldmljZSBzb29uKSBhbmQgY2hlY2sgZm9yIGVy
cm9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA5ODE0MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2
Nyw3ICsxMzY3LDcgQEAgTGF5b3V0VW5pdCBGcmFtZVZpZXc6OnNjcm9sbFhGb3JGaXhlZFBvcwog
CiAgICAgTGF5b3V0VW5pdCB4ID0gc2Nyb2xsWCgpOwogCi0gICAgaWYgKCFTY3JvbGxWaWV3Ojpz
Y3JvbGxPcmlnaW4oKS54KCkpIHsKKyAgICBpZiAoIXNjcm9sbE9yaWdpbigpLngoKSkgewogICAg
ICAgICBpZiAoeCA8IDApCiAgICAgICAgICAgICB4ID0gMDsKICAgICAgICAgZWxzZSBpZiAoeCA+
IG1heFgpCkBAIC0xNDAyLDcgKzE0MDIsNyBAQCBMYXlvdXRVbml0IEZyYW1lVmlldzo6c2Nyb2xs
WUZvckZpeGVkUG9zCiAKICAgICBMYXlvdXRVbml0IHkgPSBzY3JvbGxZKCk7CiAKLSAgICBpZiAo
IVNjcm9sbFZpZXc6OnNjcm9sbE9yaWdpbigpLnkoKSkgeworICAgIGlmICghc2Nyb2xsT3JpZ2lu
KCkueSgpKSB7CiAgICAgICAgIGlmICh5IDwgMCkKICAgICAgICAgICAgIHkgPSAwOwogICAgICAg
ICBlbHNlIGlmICh5ID4gbWF4WSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZp
ZXcuY3BwCShyZXZpc2lvbiA5ODE0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsMTQgKzI5NiwxNCBAQCB2b2lkIFNjcm9s
bFZpZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJCiAKIEludFBvaW50IFNjcm9sbFZpZXc6Om1h
eGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgSW50UG9pbnQgbWF4aW11bU9mZnNl
dChjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSAtIG1fc2Nyb2xsT3JpZ2luLngoKSwg
Y29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSAtIG1fc2Nyb2xsT3JpZ2luLnkoKSk7
CisgICAgSW50UG9pbnQgbWF4aW11bU9mZnNldChjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lk
dGgoKSAtIHNjcm9sbE9yaWdpbigpLngoKSwgY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVIZWln
aHQoKSAtIHNjcm9sbE9yaWdpbigpLnkoKSk7CiAgICAgbWF4aW11bU9mZnNldC5jbGFtcE5lZ2F0
aXZlVG9aZXJvKCk7CiAgICAgcmV0dXJuIG1heGltdW1PZmZzZXQ7CiB9CiAKIEludFBvaW50IFNj
cm9sbFZpZXc6Om1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElu
dFBvaW50KC1tX3Njcm9sbE9yaWdpbi54KCksIC1tX3Njcm9sbE9yaWdpbi55KCkpOworICAgIHJl
dHVybiBJbnRQb2ludCgtc2Nyb2xsT3JpZ2luKCkueCgpLCAtc2Nyb2xsT3JpZ2luKCkueSgpKTsK
IH0KIAogSW50UG9pbnQgU2Nyb2xsVmlldzo6YWRqdXN0U2Nyb2xsUG9zaXRpb25XaXRoaW5SYW5n
ZShjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQpIGNvbnN0CkBAIC0zMzcsOCArMzM3LDggQEAg
dm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSQogICAgIH0KIAogICAgIElu
dFNpemUgbmV3T2Zmc2V0ID0gbV9zY3JvbGxPZmZzZXQ7Ci0gICAgbmV3T2Zmc2V0LnNldFdpZHRo
KGhvcml6b250YWxPZmZzZXQgLSBtX3Njcm9sbE9yaWdpbi54KCkpOwotICAgIG5ld09mZnNldC5z
ZXRIZWlnaHQodmVydGljYWxPZmZzZXQgLSBtX3Njcm9sbE9yaWdpbi55KCkpOworICAgIG5ld09m
ZnNldC5zZXRXaWR0aChob3Jpem9udGFsT2Zmc2V0IC0gc2Nyb2xsT3JpZ2luKCkueCgpKTsKKyAg
ICBuZXdPZmZzZXQuc2V0SGVpZ2h0KHZlcnRpY2FsT2Zmc2V0IC0gc2Nyb2xsT3JpZ2luKCkueSgp
KTsKIAogICAgIHNjcm9sbFRvKG5ld09mZnNldCk7CiB9CkBAIC0zNjAsOSArMzYwLDkgQEAgdm9p
ZCBTY3JvbGxWaWV3OjpzY3JvbGxUbyhjb25zdCBJbnRTaXplJgogaW50IFNjcm9sbFZpZXc6OnNj
cm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewogICAgIGlmIChzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0
dXJuIHNjcm9sbFBvc2l0aW9uKCkueCgpICsgbV9zY3JvbGxPcmlnaW4ueCgpOworICAgICAgICBy
ZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCk7CiAgICAgaWYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAg
cmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueSgpICsgbV9zY3JvbGxPcmlnaW4ueSgpOworICAgICAg
ICByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS55KCkgKyBzY3JvbGxPcmlnaW4oKS55KCk7CiAgICAg
cmV0dXJuIDA7CiB9CiAKQEAgLTQwOCwxMyArNDA4LDEzIEBAIEludFNpemUgU2Nyb2xsVmlldzo6
b3ZlcmhhbmdBbW91bnQoKSBjb24KIHsKICAgICBJbnRTaXplIHN0cmV0Y2g7CiAKLSAgICBpbnQg
cGh5c2ljYWxTY3JvbGxZID0gc2Nyb2xsUG9zaXRpb24oKS55KCkgKyBtX3Njcm9sbE9yaWdpbi55
KCk7CisgICAgaW50IHBoeXNpY2FsU2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgc2Ny
b2xsT3JpZ2luKCkueSgpOwogICAgIGlmIChwaHlzaWNhbFNjcm9sbFkgPCAwKQogICAgICAgICBz
dHJldGNoLnNldEhlaWdodChwaHlzaWNhbFNjcm9sbFkpOwogICAgIGVsc2UgaWYgKGNvbnRlbnRz
SGVpZ2h0KCkgJiYgcGh5c2ljYWxTY3JvbGxZID4gY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVI
ZWlnaHQoKSkKICAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQocGh5c2ljYWxTY3JvbGxZIC0gKGNv
bnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKIAotICAgIGludCBwaHlzaWNhbFNj
cm9sbFggPSBzY3JvbGxQb3NpdGlvbigpLngoKSArIG1fc2Nyb2xsT3JpZ2luLngoKTsKKyAgICBp
bnQgcGh5c2ljYWxTY3JvbGxYID0gc2Nyb2xsUG9zaXRpb24oKS54KCkgKyBzY3JvbGxPcmlnaW4o
KS54KCk7CiAgICAgaWYgKHBoeXNpY2FsU2Nyb2xsWCA8IDApCiAgICAgICAgIHN0cmV0Y2guc2V0
V2lkdGgocGh5c2ljYWxTY3JvbGxYKTsKICAgICBlbHNlIGlmIChjb250ZW50c1dpZHRoKCkgJiYg
cGh5c2ljYWxTY3JvbGxYID4gY29udGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCkBAIC00
OTMsOCArNDkzLDggQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAog
ICAgICAgICAgICAgbmV3SGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGZhbHNlOwogCiAgICAgICAg
IGlmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyICE9IG5ld0hhc0hvcml6b250YWxTY3JvbGxiYXIg
JiYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIgfHwgIWF2b2lkU2Nyb2xsYmFyQ3JlYXRpb24oKSkp
IHsKLSAgICAgICAgICAgIGlmIChtX3Njcm9sbE9yaWdpbi55KCkgJiYgIW5ld0hhc0hvcml6b250
YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICAgICAgbV9zY3JvbGxPcmlnaW4uc2V0WShtX3Njcm9s
bE9yaWdpbi55KCkgLSBtX2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGlmIChzY3JvbGxPcmlnaW4oKS55KCkgJiYgIW5ld0hhc0hvcml6b250YWxTY3JvbGxiYXIp
CisgICAgICAgICAgICAgICAgc2V0U2Nyb2xsT3JpZ2luWShzY3JvbGxPcmlnaW4oKS55KCkgLSBt
X2hvcml6b250YWxTY3JvbGxiYXItPmhlaWdodCgpKTsKICAgICAgICAgICAgIGlmIChtX2hvcml6
b250YWxTY3JvbGxiYXIpCiAgICAgICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5p
bnZhbGlkYXRlKCk7CiAgICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5ld0hh
c0hvcml6b250YWxTY3JvbGxiYXIpOwpAQCAtNTAyLDggKzUwMiw4IEBAIHZvaWQgU2Nyb2xsVmll
dzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChoYXNW
ZXJ0aWNhbFNjcm9sbGJhciAhPSBuZXdIYXNWZXJ0aWNhbFNjcm9sbGJhciAmJiAoaGFzVmVydGlj
YWxTY3JvbGxiYXIgfHwgIWF2b2lkU2Nyb2xsYmFyQ3JlYXRpb24oKSkpIHsKLSAgICAgICAgICAg
IGlmIChtX3Njcm9sbE9yaWdpbi54KCkgJiYgIW5ld0hhc1ZlcnRpY2FsU2Nyb2xsYmFyKQotICAg
ICAgICAgICAgICAgIG1fc2Nyb2xsT3JpZ2luLnNldFgobV9zY3JvbGxPcmlnaW4ueCgpIC0gbV92
ZXJ0aWNhbFNjcm9sbGJhci0+d2lkdGgoKSk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsT3JpZ2lu
KCkueCgpICYmICFuZXdIYXNWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgICAgICAgICBzZXRT
Y3JvbGxPcmlnaW5YKHNjcm9sbE9yaWdpbigpLngoKSAtIG1fdmVydGljYWxTY3JvbGxiYXItPndp
ZHRoKCkpOwogICAgICAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCiAgICAgICAgICAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+aW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIobmV3SGFzVmVydGljYWxTY3JvbGxiYXIpOwpAQCAtNTgzLDcg
KzU4Myw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAg
ICAgICAgIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KG9sZFNjcm9sbENvcm5lclJlY3QpOwog
ICAgIH0KIAotICAgIEludFBvaW50IHNjcm9sbFBvaW50ID0gYWRqdXN0U2Nyb2xsUG9zaXRpb25X
aXRoaW5SYW5nZShJbnRQb2ludChkZXNpcmVkT2Zmc2V0KSkgKyBJbnRTaXplKG1fc2Nyb2xsT3Jp
Z2luLngoKSwgbV9zY3JvbGxPcmlnaW4ueSgpKTsKKyAgICBJbnRQb2ludCBzY3JvbGxQb2ludCA9
IGFkanVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2UoSW50UG9pbnQoZGVzaXJlZE9mZnNldCkp
ICsgSW50U2l6ZShzY3JvbGxPcmlnaW4oKS54KCksIHNjcm9sbE9yaWdpbigpLnkoKSk7CiAgICAg
aWYgKHNjcm9sbFBvaW50ICE9IHNjcm9sbFBvc2l0aW9uKCkpCiAgICAgICAgIFNjcm9sbGFibGVB
cmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oc2Nyb2xsUG9pbnQpOwogCkBAIC0x
MDc2LDcgKzEwNzYsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNG
CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSAoaG9yaXpvbnRhbFNjcm9sbGJh
cigpICYmICFob3Jpem9udGFsU2Nyb2xsYmFyKCktPmlzT3ZlcmxheVNjcm9sbGJhcigpKQogICAg
ICAgICA/IGhvcml6b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCkgOiAwOwogCi0gICAgaW50IHBo
eXNpY2FsU2Nyb2xsWSA9IHNjcm9sbFBvc2l0aW9uKCkueSgpICsgbV9zY3JvbGxPcmlnaW4ueSgp
OworICAgIGludCBwaHlzaWNhbFNjcm9sbFkgPSBzY3JvbGxQb3NpdGlvbigpLnkoKSArIHNjcm9s
bE9yaWdpbigpLnkoKTsKICAgICBpZiAocGh5c2ljYWxTY3JvbGxZIDwgMCkgewogICAgICAgICBo
b3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJhbWVSZWN0KCk7CiAgICAgICAgIGhvcml6b250YWxP
dmVyaGFuZ1JlY3Quc2V0SGVpZ2h0KC1waHlzaWNhbFNjcm9sbFkpOwpAQCAtMTA4Nyw3ICsxMDg3
LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxhdGVPdmVyaGFuZ0FyZWFzRgogICAgICAgICBo
b3Jpem9udGFsT3ZlcmhhbmdSZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIH0KIAotICAgIGlu
dCBwaHlzaWNhbFNjcm9sbFggPSBzY3JvbGxQb3NpdGlvbigpLngoKSArIG1fc2Nyb2xsT3JpZ2lu
LngoKTsKKyAgICBpbnQgcGh5c2ljYWxTY3JvbGxYID0gc2Nyb2xsUG9zaXRpb24oKS54KCkgKyBz
Y3JvbGxPcmlnaW4oKS54KCk7CiAgICAgaWYgKHBoeXNpY2FsU2Nyb2xsWCA8IDApIHsKICAgICAg
ICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgoLXBoeXNpY2FsU2Nyb2xsWCk7CiAgICAg
ICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldEhlaWdodChmcmFtZVJlY3QoKS5oZWlnaHQoKSAt
IGhvcml6b250YWxPdmVyaGFuZ1JlY3QuaGVpZ2h0KCkpOwpAQCAtMTI2MCwxMCArMTI2MCwxMCBA
QCB2b2lkIFNjcm9sbFZpZXc6OnJlbW92ZVBhblNjcm9sbEljb24oKQogCiB2b2lkIFNjcm9sbFZp
ZXc6OnNldFNjcm9sbE9yaWdpbihjb25zdCBJbnRQb2ludCYgb3JpZ2luLCBib29sIHVwZGF0ZVBv
c2l0aW9uQXRBbGwsIGJvb2wgdXBkYXRlUG9zaXRpb25TeW5jaHJvbm91c2x5KQogewotICAgIGlm
IChtX3Njcm9sbE9yaWdpbiA9PSBvcmlnaW4pCisgICAgaWYgKHNjcm9sbE9yaWdpbigpID09IG9y
aWdpbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zY3JvbGxPcmlnaW4gPSBvcmlnaW47Cisg
ICAgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9yaWdpbihvcmlnaW4pOwogCiAgICAgaWYgKHBs
YXRmb3JtV2lkZ2V0KCkpIHsKICAgICAgICAgcGxhdGZvcm1TZXRTY3JvbGxPcmlnaW4ob3JpZ2lu
LCB1cGRhdGVQb3NpdGlvbkF0QWxsLCB1cGRhdGVQb3NpdGlvblN5bmNocm9ub3VzbHkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gOTgxNDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
OSw3ICszMTksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbENvbnRlbnRz
U2xvd1BhdGgoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCk7CiAKICAgICB2b2lkIHNldFNjcm9s
bE9yaWdpbihjb25zdCBJbnRQb2ludCYsIGJvb2wgdXBkYXRlUG9zaXRpb25BdEFsbCwgYm9vbCB1
cGRhdGVQb3NpdGlvblN5bmNocm9ub3VzbHkpOwotICAgIEludFBvaW50IHNjcm9sbE9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT3JpZ2luOyB9CiAKICAgICAvLyBTdWJjbGFzc2VkIGJ5
IEZyYW1lVmlldyB0byBjaGVjayB0aGUgd3JpdGluZy1tb2RlIG9mIHRoZSBkb2N1bWVudC4KICAg
ICB2aXJ0dWFsIGJvb2wgaXNWZXJ0aWNhbERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lv
biA5ODE0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Ny
b2xsT2Zmc2V0RnJvbUludGVybmFscyhjb25zdCBJbnRQb2ludCYpOwogCiBwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBzZXRTY3JvbGxPcmlnaW4oY29uc3QgSW50UG9pbnQmIG9yaWdpbikgeyBtX3Njcm9s
bE9yaWdpbiA9IG9yaWdpbjsgfSAKKyAgICB2b2lkIHNldFNjcm9sbE9yaWdpblgoaW50IHgpIHsg
bV9zY3JvbGxPcmlnaW4uc2V0WCh4KTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsT3JpZ2luWShpbnQg
eSkgeyBtX3Njcm9sbE9yaWdpbi5zZXRZKHkpOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpID0g
MDsKIApAQCAtMTgxLDE5ICsxODUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBoYXNMYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNMYXllckZvclNjcm9sbENv
cm5lcigpIGNvbnN0OwogCi0gICAgLy8gVGhlcmUgYXJlIDggcG9zc2libGUgY29tYmluYXRpb25z
IG9mIHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0aW9uLiBTY3JvbGwgb3JpZ2luIHdpbGwgYmUgbm9u
LXplcm8gaW4gdGhlIHggb3IgeSBheGlzCi0gICAgLy8gaWYgdGhlcmUgaXMgYW55IHJldmVyc2Vk
IGRpcmVjdGlvbiBvciB3cml0aW5nLW1vZGUuIFRoZSBjb21iaW5hdGlvbnMgYXJlOgotICAgIC8v
IHdyaXRpbmctbW9kZSAvIGRpcmVjdGlvbiAgICAgc2Nyb2xsT3JpZ2luLngoKSBzZXQgICAgc2Ny
b2xsT3JpZ2luLnkoKSBzZXQKLSAgICAvLyBob3Jpem9udGFsLXRiIC8gbHRyICAgICAgICAgIE5P
ICAgICAgICAgICAgICAgICAgICAgIE5PCi0gICAgLy8gaG9yaXpvbnRhbC10YiAvIHJ0bCAgICAg
ICAgICBZRVMgICAgICAgICAgICAgICAgICAgICBOTwotICAgIC8vIGhvcml6b250YWwtYnQgLyBs
dHIgICAgICAgICAgTk8gICAgICAgICAgICAgICAgICAgICAgWUVTCi0gICAgLy8gaG9yaXpvbnRh
bC1idCAvIHJ0bCAgICAgICAgICBZRVMgICAgICAgICAgICAgICAgICAgICBZRVMKLSAgICAvLyB2
ZXJ0aWNhbC1sciAvIGx0ciAgICAgICAgICAgIE5PICAgICAgICAgICAgICAgICAgICAgIE5PCi0g
ICAgLy8gdmVydGljYWwtbHIgLyBydGwgICAgICAgICAgICBOTyAgICAgICAgICAgICAgICAgICAg
ICBZRVMKLSAgICAvLyB2ZXJ0aWNhbC1ybCAvIGx0ciAgICAgICAgICAgIFlFUyAgICAgICAgICAg
ICAgICAgICAgIE5PCi0gICAgLy8gdmVydGljYWwtcmwgLyBydGwgICAgICAgICAgICBZRVMgICAg
ICAgICAgICAgICAgICAgICBZRVMKLSAgICBJbnRQb2ludCBtX3Njcm9sbE9yaWdpbjsKLQogcHJp
dmF0ZToKICAgICAvLyBOT1RFOiBPbmx5IGNhbGxlZCBmcm9tIHRoZSBTY3JvbGxBbmltYXRvci4K
ICAgICBmcmllbmQgY2xhc3MgU2Nyb2xsQW5pbWF0b3I7CkBAIC0yMDgsNiArMTk5LDE5IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSA6IDI7IC8v
IFNjcm9sbEVsYXN0aWNpdHkKIAogICAgIHVuc2lnbmVkIG1fc2Nyb2xsYmFyT3ZlcmxheVN0eWxl
IDogMjsgLy8gU2Nyb2xsYmFyT3ZlcmxheVN0eWxlCisKKyAgICAvLyBUaGVyZSBhcmUgOCBwb3Nz
aWJsZSBjb21iaW5hdGlvbnMgb2Ygd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24uIFNjcm9sbCBv
cmlnaW4gd2lsbCBiZSBub24temVybyBpbiB0aGUgeCBvciB5IGF4aXMKKyAgICAvLyBpZiB0aGVy
ZSBpcyBhbnkgcmV2ZXJzZWQgZGlyZWN0aW9uIG9yIHdyaXRpbmctbW9kZS4gVGhlIGNvbWJpbmF0
aW9ucyBhcmU6CisgICAgLy8gd3JpdGluZy1tb2RlIC8gZGlyZWN0aW9uICAgICBzY3JvbGxPcmln
aW4ueCgpIHNldCAgICBzY3JvbGxPcmlnaW4ueSgpIHNldAorICAgIC8vIGhvcml6b250YWwtdGIg
LyBsdHIgICAgICAgICAgTk8gICAgICAgICAgICAgICAgICAgICAgTk8KKyAgICAvLyBob3Jpem9u
dGFsLXRiIC8gcnRsICAgICAgICAgIFlFUyAgICAgICAgICAgICAgICAgICAgIE5PCisgICAgLy8g
aG9yaXpvbnRhbC1idCAvIGx0ciAgICAgICAgICBOTyAgICAgICAgICAgICAgICAgICAgICBZRVMK
KyAgICAvLyBob3Jpem9udGFsLWJ0IC8gcnRsICAgICAgICAgIFlFUyAgICAgICAgICAgICAgICAg
ICAgIFlFUworICAgIC8vIHZlcnRpY2FsLWxyIC8gbHRyICAgICAgICAgICAgTk8gICAgICAgICAg
ICAgICAgICAgICAgTk8KKyAgICAvLyB2ZXJ0aWNhbC1sciAvIHJ0bCAgICAgICAgICAgIE5PICAg
ICAgICAgICAgICAgICAgICAgIFlFUworICAgIC8vIHZlcnRpY2FsLXJsIC8gbHRyICAgICAgICAg
ICAgWUVTICAgICAgICAgICAgICAgICAgICAgTk8KKyAgICAvLyB2ZXJ0aWNhbC1ybCAvIHJ0bCAg
ICAgICAgICAgIFlFUyAgICAgICAgICAgICAgICAgICAgIFlFUworICAgIEludFBvaW50IG1fc2Ny
b2xsT3JpZ2luOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA5ODE0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
ODUsNyArMTM4NSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKExheW91dFVuaXQgeCwK
ICAgICAvLyBjb21wbGljYXRlZCAoc2luY2UgaXQgd2lsbCBpbnZvbHZlIHRlc3Rpbmcgd2hldGhl
ciBvdXIgbGF5ZXIKICAgICAvLyBpcyBlaXRoZXIgb2NjbHVkZWQgYnkgYW5vdGhlciBsYXllciBv
ciBjbGlwcGVkIGJ5IGFuIGVuY2xvc2luZwogICAgIC8vIGxheWVyIG9yIGNvbnRhaW5zIGZpeGVk
IGJhY2tncm91bmRzLCBldGMuKS4KLSAgICBMYXlvdXRTaXplIG5ld1Njcm9sbE9mZnNldCA9IExh
eW91dFNpemUoeCAtIG1fc2Nyb2xsT3JpZ2luLngoKSwgeSAtIG1fc2Nyb2xsT3JpZ2luLnkoKSk7
CisgICAgTGF5b3V0U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBMYXlvdXRTaXplKHggLSBzY3JvbGxP
cmlnaW4oKS54KCksIHkgLSBzY3JvbGxPcmlnaW4oKS55KCkpOwogICAgIGlmIChtX3Njcm9sbE9m
ZnNldCA9PSBuZXdTY3JvbGxPZmZzZXQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3Njcm9sbE9m
ZnNldCA9IG5ld1Njcm9sbE9mZnNldDsKQEAgLTE3MDksMTggKzE3MDksMTggQEAgTGF5b3V0VW5p
dCBSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24oUwogCiBMYXlvdXRQb2ludCBSZW5kZXJMYXll
cjo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewotICAgIHJldHVybiBtX3Njcm9sbE9yaWdpbiAr
IG1fc2Nyb2xsT2Zmc2V0OworICAgIHJldHVybiBzY3JvbGxPcmlnaW4oKSArIG1fc2Nyb2xsT2Zm
c2V0OwogfQogCiBMYXlvdXRQb2ludCBSZW5kZXJMYXllcjo6bWluaW11bVNjcm9sbFBvc2l0aW9u
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zY3JvbGxPcmlnaW47CisgICAgcmV0dXJuIHNjcm9s
bE9yaWdpbigpOwogfQogCiBMYXlvdXRQb2ludCBSZW5kZXJMYXllcjo6bWF4aW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogbV9zY3JvbGxTaXplIG1heSBub3QgYmUg
dXAtdG8tZGF0ZSBpZiBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSBpcyB0cnVlLgotICAgIHJldHVy
biBtX3Njcm9sbE9yaWdpbiArIG1fc2Nyb2xsU2l6ZSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVl
KS5zaXplKCk7CisgICAgcmV0dXJuIHNjcm9sbE9yaWdpbigpICsgbV9zY3JvbGxTaXplIC0gdmlz
aWJsZUNvbnRlbnRSZWN0KHRydWUpLnNpemUoKTsKIH0KIAogTGF5b3V0UmVjdCBSZW5kZXJMYXll
cjo6dmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMpIGNvbnN0CkBAIC0y
MjA3LDcgKzIyMDcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9u
CiAgICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVm
dCgpKTsKICAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVy
Zmxvd1RvcCgpKTsKICAgICAKLSAgICBtX3Njcm9sbE9yaWdpbiA9IExheW91dFBvaW50KC1tX3Nj
cm9sbE92ZXJmbG93LndpZHRoKCksIC1tX3Njcm9sbE92ZXJmbG93LmhlaWdodCgpKTsKKyAgICBz
ZXRTY3JvbGxPcmlnaW4oTGF5b3V0UG9pbnQoLW1fc2Nyb2xsT3ZlcmZsb3cud2lkdGgoKSwgLW1f
c2Nyb2xsT3ZlcmZsb3cuaGVpZ2h0KCkpKTsKIAogICAgIGlmIChuZWVkSEJhcikKICAgICAgICAg
Km5lZWRIQmFyID0gbV9zY3JvbGxTaXplLndpZHRoKCkgPiBib3gtPmNsaWVudFdpZHRoKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gOTgxNDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjc5LDggKzI3OSw4IEBAIHB1YmxpYzoKIAogICAgIExheW91dFNpemUgc2Nyb2xsZWRD
b250ZW50T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc2Nyb2xsT2Zmc2V0KCkgKyBtX3Njcm9sbE92
ZXJmbG93OyB9CiAKLSAgICBMYXlvdXRVbml0IHNjcm9sbFhPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbE9mZnNldC53aWR0aCgpICsgbV9zY3JvbGxPcmlnaW4ueCgpOyB9Ci0gICAgTGF5
b3V0VW5pdCBzY3JvbGxZT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxPZmZzZXQuaGVp
Z2h0KCkgKyBtX3Njcm9sbE9yaWdpbi55KCk7IH0KKyAgICBMYXlvdXRVbml0IHNjcm9sbFhPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9mZnNldC53aWR0aCgpICsgc2Nyb2xsT3JpZ2lu
KCkueCgpOyB9CisgICAgTGF5b3V0VW5pdCBzY3JvbGxZT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxPZmZzZXQuaGVpZ2h0KCkgKyBzY3JvbGxPcmlnaW4oKS55KCk7IH0KICAgICBMYXlv
dXRTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFNpemUoc2Nyb2xsWE9m
ZnNldCgpLCBzY3JvbGxZT2Zmc2V0KCkpOyB9CiAKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0KExh
eW91dFVuaXQsIExheW91dFVuaXQsIFNjcm9sbE9mZnNldENsYW1waW5nID0gU2Nyb2xsT2Zmc2V0
VW5jbGFtcGVkKTsK
</data>
<flag name="review"
          id="111465"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>