<?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>35415</bug_id>
          
          <creation_ts>2010-02-25 18:32:28 -0800</creation_ts>
          <short_desc>[Chromium] Create WebKit API for WebCore::ImageDecoder</short_desc>
          <delta_ts>2010-03-06 04:43:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit API</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="Kavita Kanetkar">kkanetkar</reporter>
          <assigned_to name="Kavita Kanetkar">kkanetkar</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>japhet</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yaar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>193973</commentid>
    <comment_count>0</comment_count>
    <who name="Kavita Kanetkar">kkanetkar</who>
    <bug_when>2010-02-25 18:32:28 -0800</bug_when>
    <thetext>Linked to Chromium issue: Issue 28063. Create WebKit API wrapper for ImageDecoder to be used by Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194360</commentid>
    <comment_count>1</comment_count>
      <attachid>49665</attachid>
    <who name="Kavita Kanetkar">kkanetkar</who>
    <bug_when>2010-02-26 16:51:19 -0800</bug_when>
    <thetext>Created attachment 49665
proposed patch

Link to corresponding Chromium bug:
http://code.google.com/p/chromium/issues/detail?id=28063</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194370</commentid>
    <comment_count>2</comment_count>
    <who name="Yaar Schnitman">yaar</who>
    <bug_when>2010-02-26 17:13:44 -0800</bug_when>
    <thetext>LG, but I&apos;m not a WK reviewer. Darin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194479</commentid>
    <comment_count>3</comment_count>
      <attachid>49665</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-27 01:53:19 -0800</bug_when>
    <thetext>Comment on attachment 49665
proposed patch

We usually document methods on the WebKit API.  I know is a bit outside the norm for most WebKit code, but it&apos;s helpful to have a one or two line comment about each function in the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194761</commentid>
    <comment_count>4</comment_count>
      <attachid>49734</attachid>
    <who name="Kavita Kanetkar">kkanetkar</who>
    <bug_when>2010-03-01 12:25:57 -0800</bug_when>
    <thetext>Created attachment 49734
patch2

Added comments in the .h file for the API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194822</commentid>
    <comment_count>5</comment_count>
      <attachid>49734</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-01 14:16:12 -0800</bug_when>
    <thetext>Comment on attachment 49734
patch2

&gt; Index: WebKit/chromium/src/WebImageDecoder.cpp
...
&gt; +using namespace WebCore;
&gt; +
&gt; +namespace WebKit {
&gt; +
&gt; +WebImageDecoder::~WebImageDecoder()
&gt; +{
&gt; +    WTF::OwnPtr&lt;WebCore::ImageDecoder&gt; ownedDecoder(m_decoder);

nit: no need for the WTF:: prefix or the WebCore:: prefix in .cpp files.


&gt; +    ownedDecoder.clear();

you could also just call &apos;delete m_decoder;&apos;


&gt; +}
&gt; +
&gt; +WebImageDecoder* WebImageDecoder::create(ImageDecoderType type)
&gt; +{
&gt; +    WebImageDecoder* webImageDecoder = 0;
&gt; +    if (type == BMP)
&gt; +      webImageDecoder = new WebImageDecoder(new BMPImageDecoder());
&gt; +    else if (type == ICO)
&gt; +      webImageDecoder = new WebImageDecoder(new ICOImageDecoder());

nit: indentation is wrong


&gt; +void WebImageDecoder::setData(const WebData* data, bool allDataReceived)
&gt; +{
&gt; +    RefPtr&lt;WebCore::SharedBuffer&gt; buffer(WebCore::SharedBuffer::create(data-&gt;data(), data-&gt;size()));
&gt; +    m_decoder-&gt;setData(buffer.get(), allDataReceived);
&gt; +}
&gt; +
&gt; +bool WebImageDecoder::isFailed() const
&gt; +{
&gt; +    return m_decoder-&gt;failed();
&gt; +}

^^^ here and elsewhere, please add ASSERT(m_decoder) before dereferencing.


&gt; +bool WebImageDecoder::isFrameCompleteAtIndex(int index) const
&gt; +{
&gt; +    WebCore::RGBA32Buffer* const frameBuffer = m_decoder-&gt;frameBufferAtIndex(index);
&gt; +    if (!frameBuffer)
&gt; +      return false;
&gt; +    else
&gt; +      return (frameBuffer-&gt;status() == WebCore::RGBA32Buffer::FrameComplete);
&gt; +}
&gt; +
&gt; +WebImage WebImageDecoder::getImage(int index = 0) const
&gt; +{
&gt; +    WebCore::RGBA32Buffer* const frameBuffer = m_decoder-&gt;frameBufferAtIndex(index);
&gt; +    if (!frameBuffer)
&gt; +      return WebImage();
&gt; +    else 
&gt; +#if WEBKIT_USING_SKIA
&gt; +      return WebImage(*(frameBuffer-&gt;asNewNativeImage()));
&gt; +#elif WEBKIT_USING_CG
&gt; +      return WebImage(frameBuffer-&gt;asNewNativeImage());
&gt; +#endif

^^^ indentation is wrong, here and elsewhere


&gt; Index: WebKit/chromium/ChangeLog
...
&gt; +        Create WebKit API for  WebCore::ImageDecoder
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=35415
&gt; +
&gt; +        Related to Chromium bug: http://code.google.com/p/chromium/issues/detail?id=28063

^^^ nit: we usually don&apos;t reference the chromium bugs here.  the webkit
bug should be enough.


&gt; +
&gt; +        * WebKit.gyp:
&gt; +        * public/WebImageDecoder.h: Added.
&gt; +        (WebKit::WebImageDecoder::):
&gt; +        (WebKit::WebImageDecoder::WebImageDecoder):
&gt; +        * src/WebImageDecoder.cpp: Added.
&gt; +        (WebKit::WebImageDecoder::~WebImageDecoder):
&gt; +        (WebKit::WebImageDecoder::create):
&gt; +        (WebKit::WebImageDecoder::setData):
&gt; +        (WebKit::WebImageDecoder::isFailed):
&gt; +        (WebKit::WebImageDecoder::isSizeAvailable):
&gt; +        (WebKit::WebImageDecoder::frameCount):
&gt; +        (WebKit::WebImageDecoder::isFrameCompleteAtIndex):
&gt; +        (WebKit::WebImageDecoder::getImage):

^^^ nit: when adding new files, it is customary to remove the lines
that mention the functions.


&gt; Index: WebKit/chromium/public/WebImageDecoder.h

&gt; +#ifndef WebImageDecoder_h
&gt; +#define WebImageDecoder_h
&gt; +
&gt; +#include &quot;WebCommon.h&quot;
&gt; +#include &quot;WebImage.h&quot;
&gt; +
&gt; +namespace WebCore { class ImageDecoder; }
&gt; +
&gt; +namespace WebKit {
&gt; +
&gt; +class WebData;
&gt; +
&gt; +class WebImageDecoder {
&gt; +public:
&gt; +
&gt; +virtual ~WebImageDecoder();

^^^ fix indentation

also this destructor should not be virtual since there are no other
virtual methods declared on this class.


&gt; +
&gt; +    enum ImageDecoderType {
&gt; +        BMP = 1,
&gt; +        ICO = 2
&gt; +    };

This enum should just be named Type since it is already in the
namespace WebImageDecoder.  The values should be TypeBMP and
TypeICO.  That way code that uses these will read like this:
WebImageDecoder::TypeBMP.


&gt; +    // Caller owns the returned pointer.
&gt; +    WEBKIT_API static WebImageDecoder* create(ImageDecoderType type);

I think this should just be a constructor.  Like WebImage, the constructor
should just be inline and it should call an &quot;init&quot; method that is decorated
with WEBKIT_API.  The destructor should call a &quot;reset&quot; method that is similarly
decorated with WEBKIT_API.  (This way our DLL would not export constructor and
destructor methods.)


&gt; +
&gt; +    // Returns true if image decoding failed.
&gt; +    WEBKIT_API bool isFailed() const;
&gt; +
&gt; +    // Sets data contents for underlying decoder. 
&gt; +    WEBKIT_API void setData(const WebData* data, bool allDataReceived);

it seems like most of the methods on this class are not useful
until the user has called setData.  i would list setData just
below create since you have to call setData after create before
calling any other method.


&gt; +
&gt; +    // Returns true if size information is available for the decoder.
&gt; +    WEBKIT_API bool isSizeAvailable() const;

It seems strange for this API to provide this method but it doesn&apos;t
provide a way to actually read the size of the image.


&gt; +
&gt; +    // Gives frame count for the image. For multiple frames, decoder scans the image data for the count.
&gt; +    WEBKIT_API size_t frameCount() const;
&gt; +
&gt; +    // Returns if the frame at given index is completely decoded.
&gt; +    WEBKIT_API bool isFrameCompleteAtIndex(int index) const;
&gt; +
&gt; +    // Creates and returns WebImage from buffer at the index.
&gt; +    WEBKIT_API WebImage getImage(int index) const;
&gt; +
&gt; +private:
&gt; +    typedef WebCore::ImageDecoder WebImageDecoderPrivate;

since this is declared in the WebImageDecoder namespace, it is not
necessary for its typename to also start with WebImageDecoder.
alternatively, you can just move this typedef to the WebKit namespace,
like we do elsewhere (e.g., see WebString.h).


&gt; +    WebImageDecoder(WebImageDecoderPrivate* imageDecoder) : m_decoder(imageDecoder) { }
&gt; +
&gt; +    WebImageDecoderPrivate* m_decoder;

m_decoder -&gt; m_private to match conventions used elsewhere in the
API.

Since WebCore::ImageDecoder is not reference counted, you should
make sure that WebImageDecoder cannot be copied using the copy
constructor or assignment operator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195812</commentid>
    <comment_count>6</comment_count>
      <attachid>49962</attachid>
    <who name="Kavita Kanetkar">kkanetkar</who>
    <bug_when>2010-03-03 16:38:04 -0800</bug_when>
    <thetext>Created attachment 49962
Addressed comments

Thanks for the review. 

Also, WebImageDecoder::getImage() handles #if WEBKIT_USING_SKIA  and #if WEBKIT_USING_CG
Do I need to worry about others?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195826</commentid>
    <comment_count>7</comment_count>
      <attachid>49966</attachid>
    <who name="Kavita Kanetkar">kkanetkar</who>
    <bug_when>2010-03-03 17:20:02 -0800</bug_when>
    <thetext>Created attachment 49966
minor fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195833</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-03 17:34:00 -0800</bug_when>
    <thetext>Attachment 49962 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/331107</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195842</commentid>
    <comment_count>9</comment_count>
      <attachid>49971</attachid>
    <who name="Kavita Kanetkar">kkanetkar</who>
    <bug_when>2010-03-03 18:22:16 -0800</bug_when>
    <thetext>Created attachment 49971
patch3

Correct version. Sorry for multiple uploads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196377</commentid>
    <comment_count>10</comment_count>
      <attachid>49971</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-05 00:34:28 -0800</bug_when>
    <thetext>Comment on attachment 49971
patch3

&gt; Index: WebKit/chromium/src/WebImageDecoder.cpp
...
&gt; +void WebImageDecoder::init(Type type)
&gt; +{
&gt; +    m_private = 0;
&gt; +    if (type == TypeBMP)
&gt; +        m_private = static_cast&lt;ImageDecoder*&gt;(new BMPImageDecoder());
&gt; +    else if (type == TypeICO)
&gt; +        m_private = new ICOImageDecoder();

nit: please use a switch/case above so that if the enum gets a new value,
the compiler will complain about an unimplemented case in the switch
statement.

why the static cast in the BMP case?  That shouldn&apos;t be necessary given
that BMPImageDecoder inherits from ImageDecoder.



&gt; +WebSize WebImageDecoder::size() const
&gt; +{
&gt; +    ASSERT(m_private);
&gt; +    return WebSize(m_private-&gt;size().width(), m_private-&gt;size().height());

WebSize has a constructor that takes an IntSize, so you should be able to
just write:

  return m_private-&gt;size();


&gt; +bool WebImageDecoder::isFrameCompleteAtIndex(int index) const
&gt; +{
&gt; +    ASSERT(m_private);
&gt; +    WebCore::RGBA32Buffer* const frameBuffer = m_private-&gt;frameBufferAtIndex(index);

^^^ nit: no need for the &quot;WebCore::&quot; prefix

&gt; +    if (!frameBuffer)
&gt; +        return false;
&gt; +    return (frameBuffer-&gt;status() == WebCore::RGBA32Buffer::FrameComplete);

^^^ ditto


&gt; +WebImage WebImageDecoder::getImage(int index = 0) const
&gt; +{
&gt; +    ASSERT(m_private);
&gt; +    WebCore::RGBA32Buffer* const frameBuffer = m_private-&gt;frameBufferAtIndex(index);

^^^ ditto


&gt; Index: WebKit/chromium/public/WebImageDecoder.h
...
&gt; +class WebImageDecoder : public WebNonCopyable {
&gt; +public:
&gt; +    enum Type {
&gt; +        TypeBMP = 1,
&gt; +        TypeICO = 2
&gt; +    };

nit: no need to assign numbers to the enum values.  just let
the default 0 and 1 be used.


&gt; +    WEBKIT_API void setData(const WebData* data, bool allDataReceived);

normally, WebData is passed using a &quot;const WebData&amp;&quot;.  why make it a
pointer instead?


&gt; +    WEBKIT_API WebImage getImage(int index) const;

maybe this method should be called getFrameAtIndex for consistency with
the frameCount and isFrameCompleteAtIndex methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196685</commentid>
    <comment_count>11</comment_count>
      <attachid>50123</attachid>
    <who name="Kavita Kanetkar">kkanetkar</who>
    <bug_when>2010-03-05 14:44:00 -0800</bug_when>
    <thetext>Created attachment 50123
patch 4


&gt; Index: WebKit/chromium/src/WebImageDecoder.cpp
...
&gt; +void WebImageDecoder::init(Type type)
&gt; +{
&gt; +    m_private = 0;
&gt; +    if (type == TypeBMP)
&gt; +        m_private = static_cast&lt;ImageDecoder*&gt;(new BMPImageDecoder());
&gt; +    else if (type == TypeICO)
&gt; +        m_private = new ICOImageDecoder();

nit: please use a switch/case above so that if the enum gets a new value,
the compiler will complain about an unimplemented case in the switch
statement.

I am using VS cpp compiler and the compiler didn&apos;t give me any warning about unimplemented switch case. Am I suppressing warnings some how?

&gt; +    WEBKIT_API void setData(const WebData* data, bool allDataReceived);

normally, WebData is passed using a &quot;const WebData&amp;&quot;.  why make it a
pointer instead?

The underlying WebCore::ImageDecoder&apos;s setData() was taking a pointer. Changed it now to take a &amp;

Thanks,
Kavita.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196716</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-03-05 15:09:28 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=50123) [details]
&gt; patch 4
&gt; 
&gt; 
&gt; &gt; Index: WebKit/chromium/src/WebImageDecoder.cpp
&gt; ...
&gt; &gt; +void WebImageDecoder::init(Type type)
&gt; &gt; +{
&gt; &gt; +    m_private = 0;
&gt; &gt; +    if (type == TypeBMP)
&gt; &gt; +        m_private = static_cast&lt;ImageDecoder*&gt;(new BMPImageDecoder());
&gt; &gt; +    else if (type == TypeICO)
&gt; &gt; +        m_private = new ICOImageDecoder();
&gt; 
&gt; nit: please use a switch/case above so that if the enum gets a new value,
&gt; the compiler will complain about an unimplemented case in the switch
&gt; statement.
&gt; 
&gt; I am using VS cpp compiler and the compiler didn&apos;t give me any warning about
&gt; unimplemented switch case. Am I suppressing warnings some how?

Ah, yeah... that&apos;s just something GCC will complain about.  It is pretty useful, and I wish VS would do the same.


&gt; 
&gt; &gt; +    WEBKIT_API void setData(const WebData* data, bool allDataReceived);
&gt; 
&gt; normally, WebData is passed using a &quot;const WebData&amp;&quot;.  why make it a
&gt; pointer instead?
&gt; 
&gt; The underlying WebCore::ImageDecoder&apos;s setData() was taking a pointer. Changed
&gt; it now to take a &amp;

OK, great.  thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196884</commentid>
    <comment_count>13</comment_count>
      <attachid>50123</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-06 04:43:20 -0800</bug_when>
    <thetext>Comment on attachment 50123
patch 4

Clearing flags on attachment: 50123

Committed r55618: &lt;http://trac.webkit.org/changeset/55618&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196885</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-06 04:43:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49665</attachid>
            <date>2010-02-26 16:51:19 -0800</date>
            <delta_ts>2010-03-01 12:25:57 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>two-sided-webkit.txt</filename>
            <type>text/plain</type>
            <size>8694</size>
            <attacher name="Kavita Kanetkar">kkanetkar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA1NTMyMykKKysrIFdlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkhpc3RvcnlJdGVtLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViSFRUUEJvZHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbWFnZS5oJywKKyAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYklucHV0RWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YklucHV0RXZlbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCkBAIC0z
MDksNiArMzEwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhpc3RvcnlJdGVtLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQQm9keS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViSW1hZ2VDRy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViSW1hZ2VEZWNv
ZGVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbWFnZVNraWEuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYklucHV0RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViSW5wdXRFdmVudC5jcHAnLApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJCTVBJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIK
KworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJJbWFnZURlY29kZXI6On5XZWJJbWFnZURlY29kZXIo
KQoreworICAgIFdURjo6T3duUHRyPFdlYkNvcmU6OkltYWdlRGVjb2Rlcj4gb3duZWREZWNvZGVy
KG1fZGVjb2Rlcik7CisgICAgb3duZWREZWNvZGVyLmNsZWFyKCk7Cit9CisKK1dlYkltYWdlRGVj
b2RlciogV2ViSW1hZ2VEZWNvZGVyOjpjcmVhdGUoSW1hZ2VEZWNvZGVyVHlwZSB0eXBlKQorewor
ICAgIFdlYkltYWdlRGVjb2Rlciogd2ViSW1hZ2VEZWNvZGVyID0gMDsKKyAgICBpZiAodHlwZSA9
PSBCTVApCisgICAgICB3ZWJJbWFnZURlY29kZXIgPSBuZXcgV2ViSW1hZ2VEZWNvZGVyKG5ldyBC
TVBJbWFnZURlY29kZXIoKSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSBJQ08pCisgICAgICB3ZWJJ
bWFnZURlY29kZXIgPSBuZXcgV2ViSW1hZ2VEZWNvZGVyKG5ldyBJQ09JbWFnZURlY29kZXIoKSk7
CisKKyAgIHJldHVybiB3ZWJJbWFnZURlY29kZXI7IAorfSAKKwordm9pZCBXZWJJbWFnZURlY29k
ZXI6OnNldERhdGEoY29uc3QgV2ViRGF0YSogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKSk7CisgICAgbV9kZWNv
ZGVyLT5zZXREYXRhKGJ1ZmZlci5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBX
ZWJJbWFnZURlY29kZXI6OmlzRmFpbGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVy
LT5mYWlsZWQoKTsKK30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7Cit9CisK
K3NpemVfdCBXZWJJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RlY29kZXItPmZyYW1lQ291bnQoKTsKK30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6Omlz
RnJhbWVDb21wbGV0ZUF0SW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAgIFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlciogY29uc3QgZnJhbWVCdWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleChpbmRleCk7CisgICAgaWYgKCFmcmFtZUJ1ZmZlcikKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBlbHNlCisgICAgICByZXR1cm4gKGZyYW1lQnVmZmVyLT5zdGF0dXMoKSA9PSBXZWJDb3Jl
OjpSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworfQorCitXZWJJbWFnZSBXZWJJbWFnZURl
Y29kZXI6OmdldEltYWdlKGludCBpbmRleCA9IDApIGNvbnN0Cit7CisgICAgV2ViQ29yZTo6UkdC
QTMyQnVmZmVyKiBjb25zdCBmcmFtZUJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdElu
ZGV4KGluZGV4KTsKKyAgICBpZiAoIWZyYW1lQnVmZmVyKQorICAgICAgcmV0dXJuIFdlYkltYWdl
KCk7CisgICAgZWxzZSAKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgICAgcmV0dXJuIFdlYklt
YWdlKCooZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworI2VsaWYgV0VCS0lUX1VT
SU5HX0NHCisgICAgICByZXR1cm4gV2ViSW1hZ2UoZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1h
Z2UoKSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU1MzIzKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTAyLTI2ICBLYXZpdGEgS2FuZXRrYXIgIDxr
a2FuZXRrYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENyZWF0ZSBXZWJLaXQgQVBJIGZvciAgV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTQx
NQorCisgICAgICAgIFJlbGF0ZWQgdG8gQ2hyb21pdW0gYnVnOiBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yODA2MworCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbWFnZURlY29kZXI6Oik6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdl
RGVjb2Rlcjo6V2ViSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VEZWNvZGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlRGVjb2Rlcjo6fldlYkltYWdl
RGVjb2Rlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW1hZ2VEZWNvZGVyOjppc0ZhaWxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjppc0Zy
YW1lQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjpn
ZXRJbWFnZSk6CisKIDIwMTAtMDItMjYgIEJyZXR0IFdpbHNvbiAgPGJyZXR0d0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRml4IGNocm9taXVtIGJ1aWxkLiBUaGlzIHRlc3QncyBleHBlY3RhdGlv
biBiZWNhbWUgb2Jzb2xldGUgd2l0aApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
bWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
bWFnZURlY29kZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSW1h
Z2VEZWNvZGVyX2gKKyNkZWZpbmUgV2ViSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIldlYkNv
bW1vbi5oIgorI2luY2x1ZGUgIldlYkltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xh
c3MgSW1hZ2VEZWNvZGVyOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJEYXRh
OworCitjbGFzcyBXZWJJbWFnZURlY29kZXIgeworcHVibGljOgorCit2aXJ0dWFsIH5XZWJJbWFn
ZURlY29kZXIoKTsKKworICAgIGVudW0gSW1hZ2VEZWNvZGVyVHlwZSB7CisgICAgICAgIEJNUCA9
IDEsCisgICAgICAgIElDTyA9IDIKKyAgICB9OworCisgICAgLy8gQ2FsbGVyIG93bnMgdGhlIHJl
dHVybmVkIHBvaW50ZXIuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViSW1hZ2VEZWNvZGVyKiBj
cmVhdGUoSW1hZ2VEZWNvZGVyVHlwZSB0eXBlKTsKKworICAgIFdFQktJVF9BUEkgYm9vbCBpc0Zh
aWxlZCgpIGNvbnN0OworCisgICAgV0VCS0lUX0FQSSB2b2lkIHNldERhdGEoY29uc3QgV2ViRGF0
YSogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOworCisgICAgV0VCS0lUX0FQSSBib29sIGlz
U2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworCisgICAgV0VCS0lUX0FQSSBzaXplX3QgZnJhbWVDb3Vu
dCgpIGNvbnN0OworCisgICAgV0VCS0lUX0FQSSBib29sIGlzRnJhbWVDb21wbGV0ZUF0SW5kZXgo
aW50IGluZGV4KSBjb25zdDsKKworICAgIFdFQktJVF9BUEkgV2ViSW1hZ2UgZ2V0SW1hZ2UoaW50
IGluZGV4KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIFdlYkNvcmU6OkltYWdlRGVj
b2RlciBXZWJJbWFnZURlY29kZXJQcml2YXRlOworCisgICAgV2ViSW1hZ2VEZWNvZGVyKFdlYklt
YWdlRGVjb2RlclByaXZhdGUqIGltYWdlRGVjb2RlcikgOiBtX2RlY29kZXIoaW1hZ2VEZWNvZGVy
KSB7IH0KKworICAgIFdlYkltYWdlRGVjb2RlclByaXZhdGUqIG1fZGVjb2RlcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49734</attachid>
            <date>2010-03-01 12:25:57 -0800</date>
            <delta_ts>2010-03-03 16:38:04 -0800</delta_ts>
            <desc>patch2</desc>
            <filename>two-sided-webkit2.txt</filename>
            <type>text/plain</type>
            <size>9100</size>
            <attacher name="Kavita Kanetkar">kkanetkar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA1NTMyMykKKysrIFdlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkhpc3RvcnlJdGVtLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViSFRUUEJvZHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbWFnZS5oJywKKyAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYklucHV0RWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YklucHV0RXZlbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCkBAIC0z
MDksNiArMzEwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhpc3RvcnlJdGVtLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQQm9keS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViSW1hZ2VDRy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViSW1hZ2VEZWNv
ZGVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbWFnZVNraWEuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYklucHV0RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViSW5wdXRFdmVudC5jcHAnLApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJCTVBJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIK
KworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJJbWFnZURlY29kZXI6On5XZWJJbWFnZURlY29kZXIo
KQoreworICAgIFdURjo6T3duUHRyPFdlYkNvcmU6OkltYWdlRGVjb2Rlcj4gb3duZWREZWNvZGVy
KG1fZGVjb2Rlcik7CisgICAgb3duZWREZWNvZGVyLmNsZWFyKCk7Cit9CisKK1dlYkltYWdlRGVj
b2RlciogV2ViSW1hZ2VEZWNvZGVyOjpjcmVhdGUoSW1hZ2VEZWNvZGVyVHlwZSB0eXBlKQorewor
ICAgIFdlYkltYWdlRGVjb2Rlciogd2ViSW1hZ2VEZWNvZGVyID0gMDsKKyAgICBpZiAodHlwZSA9
PSBCTVApCisgICAgICB3ZWJJbWFnZURlY29kZXIgPSBuZXcgV2ViSW1hZ2VEZWNvZGVyKG5ldyBC
TVBJbWFnZURlY29kZXIoKSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSBJQ08pCisgICAgICB3ZWJJ
bWFnZURlY29kZXIgPSBuZXcgV2ViSW1hZ2VEZWNvZGVyKG5ldyBJQ09JbWFnZURlY29kZXIoKSk7
CisKKyAgIHJldHVybiB3ZWJJbWFnZURlY29kZXI7IAorfSAKKwordm9pZCBXZWJJbWFnZURlY29k
ZXI6OnNldERhdGEoY29uc3QgV2ViRGF0YSogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKSk7CisgICAgbV9kZWNv
ZGVyLT5zZXREYXRhKGJ1ZmZlci5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBX
ZWJJbWFnZURlY29kZXI6OmlzRmFpbGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVy
LT5mYWlsZWQoKTsKK30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7Cit9CisK
K3NpemVfdCBXZWJJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RlY29kZXItPmZyYW1lQ291bnQoKTsKK30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6Omlz
RnJhbWVDb21wbGV0ZUF0SW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAgIFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlciogY29uc3QgZnJhbWVCdWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleChpbmRleCk7CisgICAgaWYgKCFmcmFtZUJ1ZmZlcikKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBlbHNlCisgICAgICByZXR1cm4gKGZyYW1lQnVmZmVyLT5zdGF0dXMoKSA9PSBXZWJDb3Jl
OjpSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworfQorCitXZWJJbWFnZSBXZWJJbWFnZURl
Y29kZXI6OmdldEltYWdlKGludCBpbmRleCA9IDApIGNvbnN0Cit7CisgICAgV2ViQ29yZTo6UkdC
QTMyQnVmZmVyKiBjb25zdCBmcmFtZUJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdElu
ZGV4KGluZGV4KTsKKyAgICBpZiAoIWZyYW1lQnVmZmVyKQorICAgICAgcmV0dXJuIFdlYkltYWdl
KCk7CisgICAgZWxzZSAKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgICAgcmV0dXJuIFdlYklt
YWdlKCooZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworI2VsaWYgV0VCS0lUX1VT
SU5HX0NHCisgICAgICByZXR1cm4gV2ViSW1hZ2UoZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1h
Z2UoKSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU1MzIzKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTAyLTI2ICBLYXZpdGEgS2FuZXRrYXIgIDxr
a2FuZXRrYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENyZWF0ZSBXZWJLaXQgQVBJIGZvciAgV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTQx
NQorCisgICAgICAgIFJlbGF0ZWQgdG8gQ2hyb21pdW0gYnVnOiBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yODA2MworCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbWFnZURlY29kZXI6Oik6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdl
RGVjb2Rlcjo6V2ViSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VEZWNvZGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlRGVjb2Rlcjo6fldlYkltYWdl
RGVjb2Rlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW1hZ2VEZWNvZGVyOjppc0ZhaWxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjppc0Zy
YW1lQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjpn
ZXRJbWFnZSk6CisKIDIwMTAtMDItMjYgIEJyZXR0IFdpbHNvbiAgPGJyZXR0d0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRml4IGNocm9taXVtIGJ1aWxkLiBUaGlzIHRlc3QncyBleHBlY3RhdGlv
biBiZWNhbWUgb2Jzb2xldGUgd2l0aApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
bWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
bWFnZURlY29kZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSW1h
Z2VEZWNvZGVyX2gKKyNkZWZpbmUgV2ViSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIldlYkNv
bW1vbi5oIgorI2luY2x1ZGUgIldlYkltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xh
c3MgSW1hZ2VEZWNvZGVyOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJEYXRh
OworCitjbGFzcyBXZWJJbWFnZURlY29kZXIgeworcHVibGljOgorCit2aXJ0dWFsIH5XZWJJbWFn
ZURlY29kZXIoKTsKKworICAgIGVudW0gSW1hZ2VEZWNvZGVyVHlwZSB7CisgICAgICAgIEJNUCA9
IDEsCisgICAgICAgIElDTyA9IDIKKyAgICB9OworCisgICAgLy8gQ2FsbGVyIG93bnMgdGhlIHJl
dHVybmVkIHBvaW50ZXIuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViSW1hZ2VEZWNvZGVyKiBj
cmVhdGUoSW1hZ2VEZWNvZGVyVHlwZSB0eXBlKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBp
bWFnZSBkZWNvZGluZyBmYWlsZWQuCisgICAgV0VCS0lUX0FQSSBib29sIGlzRmFpbGVkKCkgY29u
c3Q7CisKKyAgICAvLyBTZXRzIGRhdGEgY29udGVudHMgZm9yIHVuZGVybHlpbmcgZGVjb2Rlci4g
CisgICAgV0VCS0lUX0FQSSB2b2lkIHNldERhdGEoY29uc3QgV2ViRGF0YSogZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHNpemUgaW5mb3JtYXRp
b24gaXMgYXZhaWxhYmxlIGZvciB0aGUgZGVjb2Rlci4KKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNT
aXplQXZhaWxhYmxlKCkgY29uc3Q7CisKKyAgICAvLyBHaXZlcyBmcmFtZSBjb3VudCBmb3IgdGhl
IGltYWdlLiBGb3IgbXVsdGlwbGUgZnJhbWVzLCBkZWNvZGVyIHNjYW5zIHRoZSBpbWFnZSBkYXRh
IGZvciB0aGUgY291bnQuCisgICAgV0VCS0lUX0FQSSBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0
OworCisgICAgLy8gUmV0dXJucyBpZiB0aGUgZnJhbWUgYXQgZ2l2ZW4gaW5kZXggaXMgY29tcGxl
dGVseSBkZWNvZGVkLgorICAgIFdFQktJVF9BUEkgYm9vbCBpc0ZyYW1lQ29tcGxldGVBdEluZGV4
KGludCBpbmRleCkgY29uc3Q7CisKKyAgICAvLyBDcmVhdGVzIGFuZCByZXR1cm5zIFdlYkltYWdl
IGZyb20gYnVmZmVyIGF0IHRoZSBpbmRleC4KKyAgICBXRUJLSVRfQVBJIFdlYkltYWdlIGdldElt
YWdlKGludCBpbmRleCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBXZWJDb3JlOjpJ
bWFnZURlY29kZXIgV2ViSW1hZ2VEZWNvZGVyUHJpdmF0ZTsKKworICAgIFdlYkltYWdlRGVjb2Rl
cihXZWJJbWFnZURlY29kZXJQcml2YXRlKiBpbWFnZURlY29kZXIpIDogbV9kZWNvZGVyKGltYWdl
RGVjb2RlcikgeyB9CisKKyAgICBXZWJJbWFnZURlY29kZXJQcml2YXRlKiBtX2RlY29kZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCg==
</data>
<flag name="review"
          id="32684"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49962</attachid>
            <date>2010-03-03 16:38:04 -0800</date>
            <delta_ts>2010-03-03 17:20:02 -0800</delta_ts>
            <desc>Addressed comments</desc>
            <filename>two-sided-2.txt</filename>
            <type>text/plain</type>
            <size>8821</size>
            <attacher name="Kavita Kanetkar">kkanetkar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA1NTMyMykKKysrIFdlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkhpc3RvcnlJdGVtLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViSFRUUEJvZHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbWFnZS5oJywKKyAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYklucHV0RWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YklucHV0RXZlbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCkBAIC0z
MDksNiArMzEwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhpc3RvcnlJdGVtLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQQm9keS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViSW1hZ2VDRy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViSW1hZ2VEZWNv
ZGVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbWFnZVNraWEuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYklucHV0RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViSW5wdXRFdmVudC5jcHAnLApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJCTVBJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIK
KyNpbmNsdWRlICJXZWJTaXplLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJJbWFnZURlY29kZXI6OnJlc2V0KCkKK3sKKyAgICBk
ZWxldGUgbV9wcml2YXRlOworfQorCit2b2lkIFdlYkltYWdlRGVjb2Rlcjo6aW5pdChUeXBlIHR5
cGUpCit7CisgICAgbV9wcml2YXRlID0gMDsKKyAgICBpZiAodHlwZSA9PSBUeXBlQk1QKQorICAg
ICAgICBtX3ByaXZhdGUgPSBzdGF0aWNfY2FzdDxJbWFnZURlY29kZXIqPihuZXcgQk1QSW1hZ2VE
ZWNvZGVyKCkpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gVHlwZUlDTykKKyAgICAgICAgbV9wcml2
YXRlID0gbmV3IElDT0ltYWdlRGVjb2RlcigpOworfSAKKwordm9pZCBXZWJJbWFnZURlY29kZXI6
OnNldERhdGEoY29uc3QgV2ViRGF0YSogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7Cisg
ICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4g
YnVmZmVyKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgZGF0YS0+
c2l6ZSgpKSk7CisgICAgbV9wcml2YXRlLT5zZXREYXRhKGJ1ZmZlci5nZXQoKSwgYWxsRGF0YVJl
Y2VpdmVkKTsKK30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6OmlzRmFpbGVkKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5mYWlsZWQoKTsK
K30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNTaXplQXZhaWxh
YmxlKCk7Cit9CisKK1dlYlNpemUgV2ViSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gV2ViU2l6ZShtX3ByaXZhdGUtPnNpemUo
KS53aWR0aCgpLCBtX3ByaXZhdGUtPnNpemUoKS5oZWlnaHQoKSk7Cit9CisKK3NpemVfdCBXZWJJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUp
OworICAgIHJldHVybiBtX3ByaXZhdGUtPmZyYW1lQ291bnQoKTsKK30KKworYm9vbCBXZWJJbWFn
ZURlY29kZXI6OmlzRnJhbWVDb21wbGV0ZUF0SW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAg
IEFTU0VSVChtX3ByaXZhdGUpOworICAgIFdlYkNvcmU6OlJHQkEzMkJ1ZmZlciogY29uc3QgZnJh
bWVCdWZmZXIgPSBtX3ByaXZhdGUtPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYg
KCFmcmFtZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgcmV0dXJuIChmcmFtZUJ1
ZmZlci0+c3RhdHVzKCkgPT0gV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsK
K30KKworV2ViSW1hZ2UgV2ViSW1hZ2VEZWNvZGVyOjpnZXRJbWFnZShpbnQgaW5kZXggPSAwKSBj
b25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIFdlYkNvcmU6OlJHQkEzMkJ1ZmZl
ciogY29uc3QgZnJhbWVCdWZmZXIgPSBtX3ByaXZhdGUtPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCk7CisgICAgaWYgKCFmcmFtZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIFdlYkltYWdlKCk7Cisj
aWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAgICByZXR1cm4gV2ViSW1hZ2UoKihmcmFtZUJ1ZmZlci0+
YXNOZXdOYXRpdmVJbWFnZSgpKSk7CisjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKKyAgICByZXR1cm4g
V2ViSW1hZ2UoZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKSk7CisjZW5kaWYKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1MzIzKQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDEwLTAyLTI2ICBLYXZpdGEgS2FuZXRrYXIgIDxra2FuZXRrYXJAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENyZWF0
ZSBXZWJLaXQgQVBJIGZvciAgV2ViQ29yZTo6SW1hZ2VEZWNvZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTQxNQorCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAg
ICAqIHNyYy9XZWJJbWFnZURlY29kZXIuY3BwOiBBZGRlZC4KKwogMjAxMC0wMi0yNiAgQnJldHQg
V2lsc29uICA8YnJldHR3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggY2hyb21pdW0gYnVp
bGQuIFRoaXMgdGVzdCdzIGV4cGVjdGF0aW9uIGJlY2FtZSBvYnNvbGV0ZSB3aXRoCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJJbWFnZURlY29kZXJfaAorI2RlZmluZSBXZWJJbWFnZURl
Y29kZXJfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIK
KyNpbmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNz
IEltYWdlRGVjb2RlcjsgfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordHlwZWRlZiBXZWJDb3Jl
OjpJbWFnZURlY29kZXIgV2ViSW1hZ2VEZWNvZGVyUHJpdmF0ZTsKK2NsYXNzIFdlYkRhdGE7CisK
K2NsYXNzIFdlYkltYWdlRGVjb2RlciA6IHB1YmxpYyBXZWJOb25Db3B5YWJsZSB7CitwdWJsaWM6
CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVHlwZUJNUCA9IDEsCisgICAgICAgIFR5cGVJQ08g
PSAyCisgICAgfTsKKworICAgICB+V2ViSW1hZ2VEZWNvZGVyKCkgeyByZXNldCgpOyB9CisKKyAg
ICBleHBsaWNpdCBXZWJJbWFnZURlY29kZXIoVHlwZSB0eXBlKSB7IGluaXQodHlwZSk7IH0KKwor
ICAgIC8vIFNldHMgZGF0YSBjb250ZW50cyBmb3IgdW5kZXJseWluZyBkZWNvZGVyLiBBbGwgdGhl
IEFQSSBtZXRob2RzCisgICAgLy8gcmVxdWlyZSB0aGF0IHNldERhdGEoKSBpcyBjYWxsZWQgcHJp
b3IgdG8gdGhlaXIgdXNlLgorICAgIFdFQktJVF9BUEkgdm9pZCBzZXREYXRhKGNvbnN0IFdlYkRh
dGEqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKKworICAgIC8vIERlbGV0ZXMgb3duZWQg
ZGVjb2Rlci4KKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBpbWFnZSBkZWNvZGluZyBmYWlsZWQuCisgICAgV0VCS0lUX0FQSSBib29sIGlzRmFp
bGVkKCkgY29uc3Q7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHNpemUgaW5mb3JtYXRp
b24gaXMgYXZhaWxhYmxlIGZvciB0aGUgZGVjb2Rlci4KKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNT
aXplQXZhaWxhYmxlKCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBp
bWFnZS4KKyAgICBXRUJLSVRfQVBJIFdlYlNpemUgc2l6ZSgpIGNvbnN0OworCisgICAgLy8gR2l2
ZXMgZnJhbWUgY291bnQgZm9yIHRoZSBpbWFnZS4gRm9yIG11bHRpcGxlIGZyYW1lcywgZGVjb2Rl
ciBzY2FucyB0aGUgaW1hZ2UgZGF0YSBmb3IgdGhlIGNvdW50LgorICAgIFdFQktJVF9BUEkgc2l6
ZV90IGZyYW1lQ291bnQoKSBjb25zdDsKKworICAgIC8vIFJldHVybnMgaWYgdGhlIGZyYW1lIGF0
IGdpdmVuIGluZGV4IGlzIGNvbXBsZXRlbHkgZGVjb2RlZC4KKyAgICBXRUJLSVRfQVBJIGJvb2wg
aXNGcmFtZUNvbXBsZXRlQXRJbmRleChpbnQgaW5kZXgpIGNvbnN0OworCisgICAgLy8gQ3JlYXRl
cyBhbmQgcmV0dXJucyBXZWJJbWFnZSBmcm9tIGJ1ZmZlciBhdCB0aGUgaW5kZXguCisgICAgV0VC
S0lUX0FQSSBXZWJJbWFnZSBnZXRJbWFnZShpbnQgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIC8vIENyZWF0ZXMgdHlwZS1zcGVjaWZpYyBkZWNvZGVyLgorICAgIFdFQktJVF9BUEkgdm9p
ZCBpbml0KFR5cGUgdHlwZSk7CisKKyAgICBXZWJJbWFnZURlY29kZXJQcml2YXRlKiBtX3ByaXZh
dGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49966</attachid>
            <date>2010-03-03 17:20:02 -0800</date>
            <delta_ts>2010-03-03 18:22:16 -0800</delta_ts>
            <desc>minor fix.</desc>
            <filename>two-sided-webkit2.txt</filename>
            <type>text/plain</type>
            <size>9100</size>
            <attacher name="Kavita Kanetkar">kkanetkar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA1NTMyMykKKysrIFdlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkhpc3RvcnlJdGVtLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViSFRUUEJvZHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbWFnZS5oJywKKyAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYklucHV0RWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YklucHV0RXZlbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCkBAIC0z
MDksNiArMzEwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhpc3RvcnlJdGVtLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQQm9keS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViSW1hZ2VDRy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViSW1hZ2VEZWNv
ZGVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbWFnZVNraWEuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYklucHV0RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViSW5wdXRFdmVudC5jcHAnLApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJCTVBJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIK
KworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJJbWFnZURlY29kZXI6On5XZWJJbWFnZURlY29kZXIo
KQoreworICAgIFdURjo6T3duUHRyPFdlYkNvcmU6OkltYWdlRGVjb2Rlcj4gb3duZWREZWNvZGVy
KG1fZGVjb2Rlcik7CisgICAgb3duZWREZWNvZGVyLmNsZWFyKCk7Cit9CisKK1dlYkltYWdlRGVj
b2RlciogV2ViSW1hZ2VEZWNvZGVyOjpjcmVhdGUoSW1hZ2VEZWNvZGVyVHlwZSB0eXBlKQorewor
ICAgIFdlYkltYWdlRGVjb2Rlciogd2ViSW1hZ2VEZWNvZGVyID0gMDsKKyAgICBpZiAodHlwZSA9
PSBCTVApCisgICAgICB3ZWJJbWFnZURlY29kZXIgPSBuZXcgV2ViSW1hZ2VEZWNvZGVyKG5ldyBC
TVBJbWFnZURlY29kZXIoKSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSBJQ08pCisgICAgICB3ZWJJ
bWFnZURlY29kZXIgPSBuZXcgV2ViSW1hZ2VEZWNvZGVyKG5ldyBJQ09JbWFnZURlY29kZXIoKSk7
CisKKyAgIHJldHVybiB3ZWJJbWFnZURlY29kZXI7IAorfSAKKwordm9pZCBXZWJJbWFnZURlY29k
ZXI6OnNldERhdGEoY29uc3QgV2ViRGF0YSogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyKFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKSk7CisgICAgbV9kZWNv
ZGVyLT5zZXREYXRhKGJ1ZmZlci5nZXQoKSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBX
ZWJJbWFnZURlY29kZXI6OmlzRmFpbGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVy
LT5mYWlsZWQoKTsKK30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7Cit9CisK
K3NpemVfdCBXZWJJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RlY29kZXItPmZyYW1lQ291bnQoKTsKK30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6Omlz
RnJhbWVDb21wbGV0ZUF0SW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAgIFdlYkNvcmU6OlJH
QkEzMkJ1ZmZlciogY29uc3QgZnJhbWVCdWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleChpbmRleCk7CisgICAgaWYgKCFmcmFtZUJ1ZmZlcikKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBlbHNlCisgICAgICByZXR1cm4gKGZyYW1lQnVmZmVyLT5zdGF0dXMoKSA9PSBXZWJDb3Jl
OjpSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworfQorCitXZWJJbWFnZSBXZWJJbWFnZURl
Y29kZXI6OmdldEltYWdlKGludCBpbmRleCA9IDApIGNvbnN0Cit7CisgICAgV2ViQ29yZTo6UkdC
QTMyQnVmZmVyKiBjb25zdCBmcmFtZUJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdElu
ZGV4KGluZGV4KTsKKyAgICBpZiAoIWZyYW1lQnVmZmVyKQorICAgICAgcmV0dXJuIFdlYkltYWdl
KCk7CisgICAgZWxzZSAKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgICAgcmV0dXJuIFdlYklt
YWdlKCooZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworI2VsaWYgV0VCS0lUX1VT
SU5HX0NHCisgICAgICByZXR1cm4gV2ViSW1hZ2UoZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1h
Z2UoKSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU1MzIzKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTAyLTI2ICBLYXZpdGEgS2FuZXRrYXIgIDxr
a2FuZXRrYXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENyZWF0ZSBXZWJLaXQgQVBJIGZvciAgV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTQx
NQorCisgICAgICAgIFJlbGF0ZWQgdG8gQ2hyb21pdW0gYnVnOiBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yODA2MworCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViSW1hZ2VEZWNvZGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJJbWFnZURlY29kZXI6Oik6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdl
RGVjb2Rlcjo6V2ViSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VEZWNvZGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlRGVjb2Rlcjo6fldlYkltYWdl
RGVjb2Rlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2ViSW1hZ2VEZWNvZGVyOjppc0ZhaWxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjppc0Zy
YW1lQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjpn
ZXRJbWFnZSk6CisKIDIwMTAtMDItMjYgIEJyZXR0IFdpbHNvbiAgPGJyZXR0d0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgRml4IGNocm9taXVtIGJ1aWxkLiBUaGlzIHRlc3QncyBleHBlY3RhdGlv
biBiZWNhbWUgb2Jzb2xldGUgd2l0aApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
bWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
bWFnZURlY29kZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSW1h
Z2VEZWNvZGVyX2gKKyNkZWZpbmUgV2ViSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIldlYkNv
bW1vbi5oIgorI2luY2x1ZGUgIldlYkltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xh
c3MgSW1hZ2VEZWNvZGVyOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJEYXRh
OworCitjbGFzcyBXZWJJbWFnZURlY29kZXIgeworcHVibGljOgorCit2aXJ0dWFsIH5XZWJJbWFn
ZURlY29kZXIoKTsKKworICAgIGVudW0gSW1hZ2VEZWNvZGVyVHlwZSB7CisgICAgICAgIEJNUCA9
IDEsCisgICAgICAgIElDTyA9IDIKKyAgICB9OworCisgICAgLy8gQ2FsbGVyIG93bnMgdGhlIHJl
dHVybmVkIHBvaW50ZXIuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViSW1hZ2VEZWNvZGVyKiBj
cmVhdGUoSW1hZ2VEZWNvZGVyVHlwZSB0eXBlKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBp
bWFnZSBkZWNvZGluZyBmYWlsZWQuCisgICAgV0VCS0lUX0FQSSBib29sIGlzRmFpbGVkKCkgY29u
c3Q7CisKKyAgICAvLyBTZXRzIGRhdGEgY29udGVudHMgZm9yIHVuZGVybHlpbmcgZGVjb2Rlci4g
CisgICAgV0VCS0lUX0FQSSB2b2lkIHNldERhdGEoY29uc3QgV2ViRGF0YSogZGF0YSwgYm9vbCBh
bGxEYXRhUmVjZWl2ZWQpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHNpemUgaW5mb3JtYXRp
b24gaXMgYXZhaWxhYmxlIGZvciB0aGUgZGVjb2Rlci4KKyAgICBXRUJLSVRfQVBJIGJvb2wgaXNT
aXplQXZhaWxhYmxlKCkgY29uc3Q7CisKKyAgICAvLyBHaXZlcyBmcmFtZSBjb3VudCBmb3IgdGhl
IGltYWdlLiBGb3IgbXVsdGlwbGUgZnJhbWVzLCBkZWNvZGVyIHNjYW5zIHRoZSBpbWFnZSBkYXRh
IGZvciB0aGUgY291bnQuCisgICAgV0VCS0lUX0FQSSBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0
OworCisgICAgLy8gUmV0dXJucyBpZiB0aGUgZnJhbWUgYXQgZ2l2ZW4gaW5kZXggaXMgY29tcGxl
dGVseSBkZWNvZGVkLgorICAgIFdFQktJVF9BUEkgYm9vbCBpc0ZyYW1lQ29tcGxldGVBdEluZGV4
KGludCBpbmRleCkgY29uc3Q7CisKKyAgICAvLyBDcmVhdGVzIGFuZCByZXR1cm5zIFdlYkltYWdl
IGZyb20gYnVmZmVyIGF0IHRoZSBpbmRleC4KKyAgICBXRUJLSVRfQVBJIFdlYkltYWdlIGdldElt
YWdlKGludCBpbmRleCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBXZWJDb3JlOjpJ
bWFnZURlY29kZXIgV2ViSW1hZ2VEZWNvZGVyUHJpdmF0ZTsKKworICAgIFdlYkltYWdlRGVjb2Rl
cihXZWJJbWFnZURlY29kZXJQcml2YXRlKiBpbWFnZURlY29kZXIpIDogbV9kZWNvZGVyKGltYWdl
RGVjb2RlcikgeyB9CisKKyAgICBXZWJJbWFnZURlY29kZXJQcml2YXRlKiBtX2RlY29kZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49971</attachid>
            <date>2010-03-03 18:22:16 -0800</date>
            <delta_ts>2010-03-05 14:44:00 -0800</delta_ts>
            <desc>patch3</desc>
            <filename>two-sided-2.txt</filename>
            <type>text/plain</type>
            <size>8822</size>
            <attacher name="Kavita Kanetkar">kkanetkar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA1NTMyMykKKysrIFdlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkhpc3RvcnlJdGVtLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViSFRUUEJvZHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbWFnZS5oJywKKyAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYklucHV0RWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YklucHV0RXZlbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCkBAIC0z
MDksNiArMzEwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhpc3RvcnlJdGVtLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQQm9keS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViSW1hZ2VDRy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViSW1hZ2VEZWNv
ZGVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbWFnZVNraWEuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYklucHV0RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViSW5wdXRFdmVudC5jcHAnLApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJCTVBJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIK
KyNpbmNsdWRlICJXZWJTaXplLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJJbWFnZURlY29kZXI6OnJlc2V0KCkKK3sKKyAgICBk
ZWxldGUgbV9wcml2YXRlOworfQorCit2b2lkIFdlYkltYWdlRGVjb2Rlcjo6aW5pdChUeXBlIHR5
cGUpCit7CisgICAgbV9wcml2YXRlID0gMDsKKyAgICBpZiAodHlwZSA9PSBUeXBlQk1QKQorICAg
ICAgICBtX3ByaXZhdGUgPSBzdGF0aWNfY2FzdDxJbWFnZURlY29kZXIqPihuZXcgQk1QSW1hZ2VE
ZWNvZGVyKCkpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gVHlwZUlDTykKKyAgICAgICAgbV9wcml2
YXRlID0gbmV3IElDT0ltYWdlRGVjb2RlcigpOworfSAKKwordm9pZCBXZWJJbWFnZURlY29kZXI6
OnNldERhdGEoY29uc3QgV2ViRGF0YSogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7Cisg
ICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4g
YnVmZmVyKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgZGF0YS0+
c2l6ZSgpKSk7CisgICAgbV9wcml2YXRlLT5zZXREYXRhKGJ1ZmZlci5nZXQoKSwgYWxsRGF0YVJl
Y2VpdmVkKTsKK30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6OmlzRmFpbGVkKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5mYWlsZWQoKTsK
K30KKworYm9vbCBXZWJJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNTaXplQXZhaWxh
YmxlKCk7Cit9CisKK1dlYlNpemUgV2ViSW1hZ2VEZWNvZGVyOjpzaXplKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICByZXR1cm4gV2ViU2l6ZShtX3ByaXZhdGUtPnNpemUo
KS53aWR0aCgpLCBtX3ByaXZhdGUtPnNpemUoKS5oZWlnaHQoKSk7Cit9CisKK3NpemVfdCBXZWJJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUp
OworICAgIHJldHVybiBtX3ByaXZhdGUtPmZyYW1lQ291bnQoKTsKK30KKworYm9vbCBXZWJJbWFn
ZURlY29kZXI6OmlzRnJhbWVDb21wbGV0ZUF0SW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAg
IEFTU0VSVChtX3ByaXZhdGUpOworICAgIFdlYkNvcmU6OlJHQkEzMkJ1ZmZlciogY29uc3QgZnJh
bWVCdWZmZXIgPSBtX3ByaXZhdGUtPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYg
KCFmcmFtZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAoZnJhbWVC
dWZmZXItPnN0YXR1cygpID09IFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7
Cit9CisKK1dlYkltYWdlIFdlYkltYWdlRGVjb2Rlcjo6Z2V0SW1hZ2UoaW50IGluZGV4ID0gMCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICBXZWJDb3JlOjpSR0JBMzJCdWZm
ZXIqIGNvbnN0IGZyYW1lQnVmZmVyID0gbV9wcml2YXRlLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5k
ZXgpOworICAgIGlmICghZnJhbWVCdWZmZXIpCisgICAgICAgIHJldHVybiBXZWJJbWFnZSgpOwor
I2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgcmV0dXJuIFdlYkltYWdlKCooZnJhbWVCdWZmZXIt
PmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworI2VsaWYgV0VCS0lUX1VTSU5HX0NHCisgICAgcmV0dXJu
IFdlYkltYWdlKGZyYW1lQnVmZmVyLT5hc05ld05hdGl2ZUltYWdlKCkpOworI2VuZGlmCit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA1NTMyMykK
KysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NCBAQAorMjAxMC0wMi0yNiAgS2F2aXRhIEthbmV0a2FyICA8a2thbmV0a2FyQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmVh
dGUgV2ViS2l0IEFQSSBmb3IgIFdlYkNvcmU6OkltYWdlRGVjb2RlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU0MTUKKworICAgICAgICAqIFdlYktp
dC5neXA6CisgICAgICAgICogcHVibGljL1dlYkltYWdlRGVjb2Rlci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBzcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcDogQWRkZWQuCisKIDIwMTAtMDItMjYgIEJyZXR0
IFdpbHNvbiAgPGJyZXR0d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IGNocm9taXVtIGJ1
aWxkLiBUaGlzIHRlc3QncyBleHBlY3RhdGlvbiBiZWNhbWUgb2Jzb2xldGUgd2l0aApJbmRleDog
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViSW1hZ2VEZWNvZGVyX2gKKyNkZWZpbmUgV2ViSW1hZ2VE
ZWNvZGVyX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYkltYWdlLmgi
CisjaW5jbHVkZSAiV2ViTm9uQ29weWFibGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFz
cyBJbWFnZURlY29kZXI7IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3R5cGVkZWYgV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyIFdlYkltYWdlRGVjb2RlclByaXZhdGU7CitjbGFzcyBXZWJEYXRhOwor
CitjbGFzcyBXZWJJbWFnZURlY29kZXIgOiBwdWJsaWMgV2ViTm9uQ29weWFibGUgeworcHVibGlj
OgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIFR5cGVCTVAgPSAxLAorICAgICAgICBUeXBlSUNP
ID0gMgorICAgIH07CisKKyAgICAgfldlYkltYWdlRGVjb2RlcigpIHsgcmVzZXQoKTsgfQorCisg
ICAgZXhwbGljaXQgV2ViSW1hZ2VEZWNvZGVyKFR5cGUgdHlwZSkgeyBpbml0KHR5cGUpOyB9CisK
KyAgICAvLyBTZXRzIGRhdGEgY29udGVudHMgZm9yIHVuZGVybHlpbmcgZGVjb2Rlci4gQWxsIHRo
ZSBBUEkgbWV0aG9kcworICAgIC8vIHJlcXVpcmUgdGhhdCBzZXREYXRhKCkgaXMgY2FsbGVkIHBy
aW9yIHRvIHRoZWlyIHVzZS4KKyAgICBXRUJLSVRfQVBJIHZvaWQgc2V0RGF0YShjb25zdCBXZWJE
YXRhKiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICAvLyBEZWxldGVzIG93bmVk
IGRlY29kZXIuCisgICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgaW1hZ2UgZGVjb2RpbmcgZmFpbGVkLgorICAgIFdFQktJVF9BUEkgYm9vbCBpc0Zh
aWxlZCgpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBzaXplIGluZm9ybWF0
aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGRlY29kZXIuCisgICAgV0VCS0lUX0FQSSBib29sIGlz
U2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUg
aW1hZ2UuCisgICAgV0VCS0lUX0FQSSBXZWJTaXplIHNpemUoKSBjb25zdDsKKworICAgIC8vIEdp
dmVzIGZyYW1lIGNvdW50IGZvciB0aGUgaW1hZ2UuIEZvciBtdWx0aXBsZSBmcmFtZXMsIGRlY29k
ZXIgc2NhbnMgdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBjb3VudC4KKyAgICBXRUJLSVRfQVBJIHNp
emVfdCBmcmFtZUNvdW50KCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIGlmIHRoZSBmcmFtZSBh
dCBnaXZlbiBpbmRleCBpcyBjb21wbGV0ZWx5IGRlY29kZWQuCisgICAgV0VCS0lUX0FQSSBib29s
IGlzRnJhbWVDb21wbGV0ZUF0SW5kZXgoaW50IGluZGV4KSBjb25zdDsKKworICAgIC8vIENyZWF0
ZXMgYW5kIHJldHVybnMgV2ViSW1hZ2UgZnJvbSBidWZmZXIgYXQgdGhlIGluZGV4LgorICAgIFdF
QktJVF9BUEkgV2ViSW1hZ2UgZ2V0SW1hZ2UoaW50IGluZGV4KSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICAvLyBDcmVhdGVzIHR5cGUtc3BlY2lmaWMgZGVjb2Rlci4KKyAgICBXRUJLSVRfQVBJIHZv
aWQgaW5pdChUeXBlIHR5cGUpOworCisgICAgV2ViSW1hZ2VEZWNvZGVyUHJpdmF0ZSogbV9wcml2
YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="32989"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50123</attachid>
            <date>2010-03-05 14:44:00 -0800</date>
            <delta_ts>2010-03-06 04:43:20 -0800</delta_ts>
            <desc>patch 4</desc>
            <filename>two-sided-4.txt</filename>
            <type>text/plain</type>
            <size>8727</size>
            <attacher name="Kavita Kanetkar">kkanetkar</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA1NTMyMykKKysrIFdlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkhpc3RvcnlJdGVtLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMv
V2ViSFRUUEJvZHkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJJbWFnZS5oJywKKyAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkltYWdlRGVjb2Rlci5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL1dlYklucHV0RWxlbWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dl
YklucHV0RXZlbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJLaXQuaCcsCkBAIC0z
MDksNiArMzEwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhpc3RvcnlJdGVtLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQQm9keS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViSW1hZ2VDRy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViSW1hZ2VEZWNv
ZGVyLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJbWFnZVNraWEuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYklucHV0RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViSW5wdXRFdmVudC5jcHAnLApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VE
ZWNvZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJCTVBJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIK
KyNpbmNsdWRlICJXZWJTaXplLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJJbWFnZURlY29kZXI6OnJlc2V0KCkKK3sKKyAgICBk
ZWxldGUgbV9wcml2YXRlOworfQorCit2b2lkIFdlYkltYWdlRGVjb2Rlcjo6aW5pdChUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlQk1QOgorICAgICAgICBt
X3ByaXZhdGUgPSBuZXcgQk1QSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVHlwZUlDTzoKKyAgICAgICAgbV9wcml2YXRlID0gbmV3IElDT0ltYWdlRGVjb2RlcigpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgV2ViSW1hZ2VEZWNvZGVyOjpzZXREYXRh
KGNvbnN0IFdlYkRhdGEmIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIEFTU0VS
VChtX3ByaXZhdGUpOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcihTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpKTsKKyAgICBtX3ByaXZhdGUtPnNl
dERhdGEoYnVmZmVyLmdldCgpLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCitib29sIFdlYkltYWdl
RGVjb2Rlcjo6aXNGYWlsZWQoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmZhaWxlZCgpOworfQorCitib29sIFdlYkltYWdlRGVjb2Rlcjo6
aXNTaXplQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5pc1NpemVBdmFpbGFibGUoKTsKK30KKworV2ViU2l6ZSBXZWJJbWFn
ZURlY29kZXI6OnNpemUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3ByaXZhdGUpOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPnNpemUoKTsKK30KKworc2l6ZV90IFdlYkltYWdlRGVjb2Rlcjo6ZnJh
bWVDb3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0ZSk7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+ZnJhbWVDb3VudCgpOworfQorCitib29sIFdlYkltYWdlRGVjb2Rlcjo6aXNGcmFt
ZUNvbXBsZXRlQXRJbmRleChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcHJpdmF0
ZSk7CisgICAgUkdCQTMyQnVmZmVyKiBjb25zdCBmcmFtZUJ1ZmZlciA9IG1fcHJpdmF0ZS0+ZnJh
bWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWZyYW1lQnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIChmcmFtZUJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMy
QnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKK30KKworV2ViSW1hZ2UgV2ViSW1hZ2VEZWNvZGVyOjpn
ZXRGcmFtZUF0SW5kZXgoaW50IGluZGV4ID0gMCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2
YXRlKTsKKyAgICBSR0JBMzJCdWZmZXIqIGNvbnN0IGZyYW1lQnVmZmVyID0gbV9wcml2YXRlLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghZnJhbWVCdWZmZXIpCisgICAgICAg
IHJldHVybiBXZWJJbWFnZSgpOworI2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgcmV0dXJuIFdl
YkltYWdlKCooZnJhbWVCdWZmZXItPmFzTmV3TmF0aXZlSW1hZ2UoKSkpOworI2VsaWYgV0VCS0lU
X1VTSU5HX0NHCisgICAgcmV0dXJuIFdlYkltYWdlKGZyYW1lQnVmZmVyLT5hc05ld05hdGl2ZUlt
YWdlKCkpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA1NTMyMykKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wMi0yNiAgS2F2aXRhIEthbmV0a2FyICA8
a2thbmV0a2FyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDcmVhdGUgV2ViS2l0IEFQSSBmb3IgIFdlYkNvcmU6OkltYWdlRGVj
b2RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU0
MTUKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYkltYWdlRGVj
b2Rlci5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcDogQWRkZWQu
CisKIDIwMTAtMDItMjYgIEJyZXR0IFdpbHNvbiAgPGJyZXR0d0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgRml4IGNocm9taXVtIGJ1aWxkLiBUaGlzIHRlc3QncyBleHBlY3RhdGlvbiBiZWNhbWUg
b2Jzb2xldGUgd2l0aApJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbWFnZURlY29k
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkltYWdlRGVjb2Rl
ci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJbWFnZURlY29k
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSW1hZ2VEZWNvZGVy
X2gKKyNkZWZpbmUgV2ViSW1hZ2VEZWNvZGVyX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgor
I2luY2x1ZGUgIldlYkltYWdlLmgiCisjaW5jbHVkZSAiV2ViTm9uQ29weWFibGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBJbWFnZURlY29kZXI7IH0KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3R5cGVkZWYgV2ViQ29yZTo6SW1hZ2VEZWNvZGVyIFdlYkltYWdlRGVjb2RlclByaXZh
dGU7CitjbGFzcyBXZWJEYXRhOworCitjbGFzcyBXZWJJbWFnZURlY29kZXIgOiBwdWJsaWMgV2Vi
Tm9uQ29weWFibGUgeworcHVibGljOgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIFR5cGVCTVAs
CisgICAgICAgIFR5cGVJQ08KKyAgICB9OworCisgICAgfldlYkltYWdlRGVjb2RlcigpIHsgcmVz
ZXQoKTsgfQorCisgICAgZXhwbGljaXQgV2ViSW1hZ2VEZWNvZGVyKFR5cGUgdHlwZSkgeyBpbml0
KHR5cGUpOyB9CisKKyAgICAvLyBTZXRzIGRhdGEgY29udGVudHMgZm9yIHVuZGVybHlpbmcgZGVj
b2Rlci4gQWxsIHRoZSBBUEkgbWV0aG9kcworICAgIC8vIHJlcXVpcmUgdGhhdCBzZXREYXRhKCkg
aXMgY2FsbGVkIHByaW9yIHRvIHRoZWlyIHVzZS4KKyAgICBXRUJLSVRfQVBJIHZvaWQgc2V0RGF0
YShjb25zdCBXZWJEYXRhJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CisKKyAgICAvLyBE
ZWxldGVzIG93bmVkIGRlY29kZXIuCisgICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisKKyAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgaW1hZ2UgZGVjb2RpbmcgZmFpbGVkLgorICAgIFdFQktJVF9B
UEkgYm9vbCBpc0ZhaWxlZCgpIGNvbnN0OworICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBz
aXplIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGRlY29kZXIuCisgICAgV0VCS0lU
X0FQSSBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUg
c2l6ZSBvZiB0aGUgaW1hZ2UuCisgICAgV0VCS0lUX0FQSSBXZWJTaXplIHNpemUoKSBjb25zdDsK
KworICAgIC8vIEdpdmVzIGZyYW1lIGNvdW50IGZvciB0aGUgaW1hZ2UuIEZvciBtdWx0aXBsZSBm
cmFtZXMsIGRlY29kZXIgc2NhbnMgdGhlIGltYWdlIGRhdGEgZm9yIHRoZSBjb3VudC4KKyAgICBX
RUJLSVRfQVBJIHNpemVfdCBmcmFtZUNvdW50KCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIGlm
IHRoZSBmcmFtZSBhdCBnaXZlbiBpbmRleCBpcyBjb21wbGV0ZWx5IGRlY29kZWQuCisgICAgV0VC
S0lUX0FQSSBib29sIGlzRnJhbWVDb21wbGV0ZUF0SW5kZXgoaW50IGluZGV4KSBjb25zdDsKKwor
ICAgIC8vIENyZWF0ZXMgYW5kIHJldHVybnMgV2ViSW1hZ2UgZnJvbSBidWZmZXIgYXQgdGhlIGlu
ZGV4LgorICAgIFdFQktJVF9BUEkgV2ViSW1hZ2UgZ2V0RnJhbWVBdEluZGV4KGludCBpbmRleCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgLy8gQ3JlYXRlcyB0eXBlLXNwZWNpZmljIGRlY29kZXIu
CisgICAgV0VCS0lUX0FQSSB2b2lkIGluaXQoVHlwZSB0eXBlKTsKKworICAgIFdlYkltYWdlRGVj
b2RlclByaXZhdGUqIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>