<?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>73586</bug_id>
          
          <creation_ts>2011-12-01 13:36:50 -0800</creation_ts>
          <short_desc>Upstream text codec and web string files of BlackBerry API</short_desc>
          <delta_ts>2011-12-14 00:26:17 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73144</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Jacky Jiang">jkjiang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>dbates</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>513055</commentid>
    <comment_count>0</comment_count>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-01 13:36:50 -0800</bug_when>
    <thetext>Upstream text codec and web string implementation files of BlackBerry API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513081</commentid>
    <comment_count>1</comment_count>
      <attachid>117484</attachid>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-01 14:05:45 -0800</bug_when>
    <thetext>Created attachment 117484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513317</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-01 17:23:36 -0800</bug_when>
    <thetext>This is all implemented in cross platform code, why does Blackberry have its own copy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513778</commentid>
    <comment_count>3</comment_count>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-02 08:21:09 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; This is all implemented in cross platform code, why does Blackberry have its own copy?
Hi Alexey, they are wrappers for the cross platform code. We have a layer between the WebKit and Browser App, these wrapper APIs are exposed to this layer, we are not going to expose or include the cross platform code to that layer directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513805</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-12-02 08:47:07 -0800</bug_when>
    <thetext>OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518149</commentid>
    <comment_count>5</comment_count>
      <attachid>117484</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-12-08 23:52:36 -0800</bug_when>
    <thetext>Comment on attachment 117484
Patch

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

Informal review.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:28
&gt; +#include &quot;Vector.h&quot;

#include &lt;wtf/Vector.h&gt; instead of #include &quot;Vector.h&quot;.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:36
&gt; +namespace BlackBerry {
&gt; +namespace WebKit {
&gt; +
&gt; +

I would keep only one empty line here.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:47
&gt; +    TextEncoding te(encoding);

I would use textEncoding instead of te.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:57
&gt; +    WTF::String enc(encoding);

WTF:: is not needed, should be removed. And I would change enc to encodingName.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:68
&gt; +
&gt; +

I would remove an extra empty line.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:71
&gt; +    TextEncoding teSource(sourceEncoding);

I would change teSource to textEncodingSource.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:75
&gt; +    TextEncoding teTarget(targetEncoding);

I would name the variable textEncodingTarget.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:82
&gt; +    WTF::String ucs2 = codecSource.decode(sourceStart, sourceLength, true, true, sawError);

Remove WTF::.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:89
&gt; +    WTF::CString encoded = codecTarget.encode(ucs2.characters(), ucs2.length(), WebCore::EntitiesForUnencodables);

Ditto.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:108
&gt; +    WTF::Vector&lt;char&gt; vect;

Remove WTF::. I would rename vect to something like result.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:119
&gt; +    WTF::Vector&lt;char&gt; vect;

Ditto.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:132
&gt; +    WTF::String escapedString(escaped.data(), escaped.length());

Remove WTF::.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:133
&gt; +

I would remove this empty line.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:135
&gt; +    WTF::String urlString = WebCore::decodeURLEscapeSequences(escapedString);
&gt; +    WTF::CString utf8 = urlString.utf8();

Remove WTF::.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:143
&gt; +    WTF::String urlString(url.data(), url.length());

Remove WTF::.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:144
&gt; +

I would remove this empty line.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:146
&gt; +    WTF::String escapedString = WebCore::encodeWithURLEscapeSequences(urlString);
&gt; +    WTF::CString utf8 = escapedString.utf8();

Remove WTF::.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:156
&gt; +    WTF::String mimeString(mime.data(), mime.length());
&gt; +
&gt; +    WTF::String ext = WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType(mimeString);

Remove WTF::. I would change ext to extension.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:160
&gt; +    WTF::CString utf8 = ext.utf8();

Remove WTF::.

&gt; Source/WebKit/blackberry/Api/WebString.cpp:26
&gt; +using WTF::String;

Could this line be removed?

&gt; Source/WebKit/blackberry/Api/WebString.cpp:31
&gt; +WebString::WebString(const char* latin1)
&gt; +: m_impl(static_cast&lt;WebStringImpl*&gt;(WTF::StringImpl::create(latin1).releaseRef()))

You should add 4 spaces before the colon.

&gt; Source/WebKit/blackberry/Api/WebString.cpp:36
&gt; +: m_impl(static_cast&lt;WebStringImpl*&gt;(WTF::StringImpl::create(latin1, length).releaseRef()))

Ditto.

&gt; Source/WebKit/blackberry/Api/WebString.cpp:41
&gt; +: m_impl(static_cast&lt;WebStringImpl*&gt;(WTF::StringImpl::create(utf16, length).releaseRef()))

Ditto.

&gt; Source/WebKit/blackberry/Api/WebString.cpp:59
&gt; +: m_impl(str.m_impl)

Ditto.

&gt; Source/WebKit/blackberry/Api/WebString.cpp:67
&gt; +    return WTF::String::fromUTF8(utf8);

Remove WTF::.

&gt; Source/WebKit/blackberry/Api/WebString.cpp:87
&gt; +    WTF::String str(m_impl);

Ditto.

&gt; Source/WebKit/blackberry/Api/WebString.h:44
&gt; +    WebString&amp; operator=(const WebString&amp;);
&gt; +
&gt; +    std::string utf8() const;
&gt; +
&gt; +    static WebString fromUtf8(const char* utf8);
&gt; +

I would remove extra empty lines.

&gt; Source/WebKit/blackberry/Api/WebString.h:48
&gt; +

Ditto.

&gt; Source/WebKit/blackberry/Api/WebString.h:51
&gt; +

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518475</commentid>
    <comment_count>6</comment_count>
      <attachid>118629</attachid>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-09 13:51:31 -0800</bug_when>
    <thetext>Created attachment 118629
Updated patch

Updated the patch based on Leo and Dan&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518769</commentid>
    <comment_count>7</comment_count>
      <attachid>118629</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-10 01:21:12 -0800</bug_when>
    <thetext>Comment on attachment 118629
Updated patch

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

Looks good, r=me! Please fix these before landing, or upload another patch that I could cq+.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:23
&gt; +#include &quot;CString.h&quot;

&lt;wtf/text/CString.h&gt;

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:53
&gt; +    String lowercasedEncoding = String(encoding).lower();
&gt; +    if (lowercasedEncoding.startsWith(&quot;iso-8859&quot;)

We might want to add a comment here, that this is slow and could easily be optimized, by directly inspecting encoding[i].

&gt; Source/WebKit/blackberry/Api/WebString.cpp:26
&gt; +using WTF::String;

WTFString.h already declares that, this is unncessary here, no?

&gt; Source/WebKit/blackberry/Api/WebString.cpp:109
&gt; +    return WTF::equal(m_impl, utf8);

doesn&apos;t WTF already do &quot;using WTF::equal&quot; in their public headers?

&gt; Source/WebKit/blackberry/Api/WebString.cpp:114
&gt; +    return WTF::equalIgnoringCase(m_impl, utf8);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519434</commentid>
    <comment_count>8</comment_count>
      <attachid>118837</attachid>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-12 13:45:33 -0800</bug_when>
    <thetext>Created attachment 118837
Updated patch

Updated the patch according to Nikolas&apos; comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519556</commentid>
    <comment_count>9</comment_count>
      <attachid>118837</attachid>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-12 15:14:15 -0800</bug_when>
    <thetext>Comment on attachment 118837
Updated patch

I will update again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519745</commentid>
    <comment_count>10</comment_count>
      <attachid>118926</attachid>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-12 17:58:58 -0800</bug_when>
    <thetext>Created attachment 118926
Updated patch

Keep WTF for equal() and equalIgnoringCase(), because the compiler was always trying to use  
WebString.equal() and WebString.equalIgnoringCase() instead of the WTF functions as the cadidates which caused compiling error when we removed WTF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520549</commentid>
    <comment_count>11</comment_count>
      <attachid>118926</attachid>
    <who name="Leo Yang">leo.yang</who>
    <bug_when>2011-12-13 18:03:18 -0800</bug_when>
    <thetext>Comment on attachment 118926
Updated patch

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

Some minor comments.

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:28
&gt; +#include &lt;wtf/Vector.h&gt;
&gt; +#include &lt;wtf/text/CString.h&gt;
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Wouldn&apos;t check-webkit-style complain about sorting problem? Sorting is case sensitive?

&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:32
&gt; +using namespace WTF;

Is this needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520589</commentid>
    <comment_count>12</comment_count>
      <attachid>118926</attachid>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-13 18:37:31 -0800</bug_when>
    <thetext>Comment on attachment 118926
Updated patch

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

&gt;&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:28
&gt;&gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; 
&gt; Wouldn&apos;t check-webkit-style complain about sorting problem? Sorting is case sensitive?

If I remember correctly the ASCII of &apos;V&apos; should be less than &apos;t&apos; and I don&apos;t see any complains.

&gt;&gt; Source/WebKit/blackberry/Api/WebKitTextCodec.cpp:32
&gt;&gt; +using namespace WTF;
&gt; 
&gt; Is this needed?

String, CString and Vector are using it, however, the header files may already declare it.  I can try to remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520668</commentid>
    <comment_count>13</comment_count>
      <attachid>119152</attachid>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-13 21:24:22 -0800</bug_when>
    <thetext>Created attachment 119152
Patch

Remove using namespace WTF in WebKitTextCodex.cpp as the WTFString and Vector header files already declares it for String, CString and Vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520673</commentid>
    <comment_count>14</comment_count>
      <attachid>119152</attachid>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-13 21:40:52 -0800</bug_when>
    <thetext>Comment on attachment 119152
Patch

Nikolas, ping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520704</commentid>
    <comment_count>15</comment_count>
    <who name="Jacky Jiang">jkjiang</who>
    <bug_when>2011-12-13 23:10:32 -0800</bug_when>
    <thetext>Thanks Dan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520746</commentid>
    <comment_count>16</comment_count>
      <attachid>119152</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-14 00:26:11 -0800</bug_when>
    <thetext>Comment on attachment 119152
Patch

Clearing flags on attachment: 119152

Committed r102747: &lt;http://trac.webkit.org/changeset/102747&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520747</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-14 00:26:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117484</attachid>
            <date>2011-12-01 14:05:45 -0800</date>
            <delta_ts>2011-12-09 13:50:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73586-20111201170543.patch</filename>
            <type>text/plain</type>
            <size>15277</size>
            <attacher name="Jacky Jiang">jkjiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxNjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc4NGQ3ZWRkZWRiZmQzZjhi
ZGZiNDdiZjZjM2JiMjZhODgwYzkzNzcuLjIxMTczNWU4MGZkN2IwNzEwMzFhNjc1NTI2Nzk4ZWJk
NmZhMGI0YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTEtMTItMDEgIEphY2t5IEpp
YW5nICA8emhhamlhbmdAcmltLmNvbT4KKworICAgICAgICBVcHN0cmVhbSB0ZXh0IGNvZGVjIGFu
ZCB3ZWIgc3RyaW5nIGZpbGVzIG9mIEJsYWNrQmVycnkgQVBJCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU4NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE90aGVyIG1haW4gY29udHJpYnV0b3JzOgorICAg
ICAgICBKb2UgTWFzb24gPGptYXNvbkByaW0uY29tPgorICAgICAgICBMeW9uIENoZW4gPGxpYWNo
ZW5AcmltLmNvbT4KKyAgICAgICAgRGF2aWQgVGFwdXNrYSA8ZHRhcHVza2FAcmltLmNvbT4KKyAg
ICAgICAgRWxpIEZpZGxlciA8ZWZpZGxlckByaW0uY29tPgorCisgICAgICAgIEluaXRpYWwgdXBz
dHJlYW0sIG5vIG5ldyB0ZXN0cworCisgICAgICAgICogYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4
dENvZGVjLmNwcDogQWRkZWQuCisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzU2FtZUVu
Y29kaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aXNBU0NJSUNvbXBhdGlibGVF
bmNvZGluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OnRyYW5zY29kZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmJhc2U2NERlY29kZVBvbGljeUZvcldlYkNvcmUpOgor
ICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpiYXNlNjREZWNvZGUpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpiYXNlNjRFbmNvZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0Ojp1bmVzY2FwZVVSTCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmVzY2FwZVVS
TCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmdldEV4dGVuc2lvbkZvck1pbWVUeXBl
KToKKyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuaDogQWRkZWQuCisg
ICAgICAgICogYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmNwcDogQWRkZWQuCisgICAgICAgIChC
bGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3RyaW5nKToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjp+V2ViU3RyaW5nKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6V2ViU3RyaW5nOjpmcm9tVXRmOCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpX
ZWJLaXQ6OldlYlN0cmluZzo6b3BlcmF0b3I9KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6V2ViU3RyaW5nOjp1dGY4KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3Ry
aW5nOjpjaGFyYWN0ZXJzKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5n
OjpsZW5ndGgpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmlzRW1w
dHkpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFsKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjplcXVhbElnbm9yaW5nQ2FzZSk6
CisgICAgICAgICogYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmg6IEFkZGVkLgorCiAyMDExLTEx
LTI4ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAgICAgICBDcmVhdGUgc2tlbGV0
b24gZnJhbWV3b3JrIGZvciBub3RpZmljYXRpb25zIHN1cHBvcnQgaW4gV0syCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODdhNmFmZWY3NmM0YTNhNzFiN2FmYTRmMTYyMDUxY2Y5NjViNDJjNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmNwcApAQCAt
MCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENvZGVj
LmgiCisKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJUZXh0
Q29kZWNJQ1UuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJWZWN0b3Iu
aCIKKwordXNpbmcgV2ViQ29yZTo6VGV4dEVuY29kaW5nOwordXNpbmcgV2ViQ29yZTo6VGV4dENv
ZGVjSUNVOworCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Citib29sIGlzU2FtZUVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nMSwgY29uc3QgY2hhciog
ZW5jb2RpbmcyKQoreworICAgIFRleHRFbmNvZGluZyB0ZTEoZW5jb2RpbmcxKTsKKyAgICBUZXh0
RW5jb2RpbmcgdGUyKGVuY29kaW5nMik7CisKKyAgICByZXR1cm4gdGUxID09IHRlMjsKK30KKwor
Ym9vbCBpc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nKQorewor
ICAgIFRleHRFbmNvZGluZyB0ZShlbmNvZGluZyk7CisgICAgaWYgKCF0ZS5pc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrIHRoZSBtb3N0IGNvbW1vbiBlbmNv
ZGluZ3MgZmlyc3QKKyAgICBpZiAodGUgPT0gV2ViQ29yZTo6VVRGOEVuY29kaW5nKCkKKyAgICAg
ICAgfHwgdGUgPT0gV2ViQ29yZTo6TGF0aW4xRW5jb2RpbmcoKQorICAgICAgICB8fCB0ZSA9PSBX
ZWJDb3JlOjpBU0NJSUVuY29kaW5nKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgV1RG
OjpTdHJpbmcgZW5jKGVuY29kaW5nKTsKKyAgICBlbmMgPSBlbmMubG93ZXIoKTsKKyAgICBpZiAo
ZW5jLnN0YXJ0c1dpdGgoImlzby04ODU5IikKKyAgICAgICAgfHwgZW5jLnN0YXJ0c1dpdGgoIndp
bmRvd3MiKQorICAgICAgICB8fCBlbmMuc3RhcnRzV2l0aCgiZXVjLWpwIikKKyAgICAgICAgfHwg
ZW5jLnN0YXJ0c1dpdGgoImV1Yy1rciIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworCitUcmFuc2NvZGVSZXN1bHQgdHJhbnNjb2RlKGNvbnN0IGNoYXIq
IHNvdXJjZUVuY29kaW5nLCBjb25zdCBjaGFyKiB0YXJnZXRFbmNvZGluZywgY29uc3QgY2hhciom
IHNvdXJjZVN0YXJ0LCBpbnQgc291cmNlTGVuZ3RoLCBjaGFyKiYgdGFyZ2V0U3RhcnQsIHVuc2ln
bmVkIGludCB0YXJnZXRMZW5ndGgpCit7CisgICAgVGV4dEVuY29kaW5nIHRlU291cmNlKHNvdXJj
ZUVuY29kaW5nKTsKKyAgICBpZiAoIXRlU291cmNlLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IFNvdXJjZUVuY29kaW5nVW5zdXBwb3J0ZWQ7CisKKyAgICBUZXh0RW5jb2RpbmcgdGVUYXJnZXQo
dGFyZ2V0RW5jb2RpbmcpOworICAgIGlmICghdGVUYXJnZXQuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gVGFyZ2V0RW5jb2RpbmdVbnN1cHBvcnRlZDsKKworICAgIFRleHRDb2RlY0lDVSBjb2Rl
Y1NvdXJjZSh0ZVNvdXJjZSk7CisKKyAgICBib29sIHNhd0Vycm9yID0gZmFsc2U7CisgICAgV1RG
OjpTdHJpbmcgdWNzMiA9IGNvZGVjU291cmNlLmRlY29kZShzb3VyY2VTdGFydCwgc291cmNlTGVu
Z3RoLCB0cnVlLCB0cnVlLCBzYXdFcnJvcik7CisKKyAgICBpZiAoc2F3RXJyb3IpCisgICAgICAg
IHJldHVybiBTb3VyY2VCcm9rZW47CisKKyAgICBUZXh0Q29kZWNJQ1UgY29kZWNUYXJnZXQodGVU
YXJnZXQpOworCisgICAgV1RGOjpDU3RyaW5nIGVuY29kZWQgPSBjb2RlY1RhcmdldC5lbmNvZGUo
dWNzMi5jaGFyYWN0ZXJzKCksIHVjczIubGVuZ3RoKCksIFdlYkNvcmU6OkVudGl0aWVzRm9yVW5l
bmNvZGFibGVzKTsKKworICAgIGlmIChlbmNvZGVkLmxlbmd0aCgpID4gdGFyZ2V0TGVuZ3RoKQor
ICAgICAgICByZXR1cm4gVGFyZ2V0QnVmZmVySW5zdWZmaWNpZW50OworCisgICAgc3RybmNweSh0
YXJnZXRTdGFydCwgZW5jb2RlZC5kYXRhKCksIGVuY29kZWQubGVuZ3RoKCkpOworICAgIHRhcmdl
dFN0YXJ0ICs9IGVuY29kZWQubGVuZ3RoKCk7CisKKyAgICByZXR1cm4gU3VjY2VzczsKK30KKwor
V2ViQ29yZTo6QmFzZTY0RGVjb2RlUG9saWN5IGJhc2U2NERlY29kZVBvbGljeUZvcldlYkNvcmUo
QmFzZTY0RGVjb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICAvLyBNdXN0IG1ha2Ugc3VyZSBCYXNl
NjREZWNvZGVQb2xpY3kgaXMgdGhlIHNhbWUgaW4gV2ViS2l0IGFuZCBXZWJDb3JlIQorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYXNlNjREZWNvZGVQb2xpY3k+KHBvbGljeSk7Cit9
CisKK2Jvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlNjQsIHN0ZDo6dmVj
dG9yPGNoYXI+JiBiaW5hcnksIEJhc2U2NERlY29kZVBvbGljeSBwb2xpY3kpCit7CisgICAgV1RG
OjpWZWN0b3I8Y2hhcj4gdmVjdDsKKyAgICBib29sIHN1Y2Nlc3MgPSBXZWJDb3JlOjpiYXNlNjRE
ZWNvZGUoYmFzZTY0LmNfc3RyKCksIGJhc2U2NC5sZW5ndGgoKSwgdmVjdCwgYmFzZTY0RGVjb2Rl
UG9saWN5Rm9yV2ViQ29yZShwb2xpY3kpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGJpbmFyeS5pbnNlcnQoYmluYXJ5LmJlZ2luKCksIHZlY3QuYmVn
aW4oKSwgdmVjdC5lbmQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYmFzZTY0RW5j
b2RlKGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBiaW5hcnksIHN0ZDo6c3RyaW5nJiBiYXNlNjQs
IEJhc2U2NEVuY29kZVBvbGljeSBwb2xpY3kpCit7CisgICAgV1RGOjpWZWN0b3I8Y2hhcj4gdmVj
dDsKKyAgICB2ZWN0LmFwcGVuZCgmYmluYXJ5WzBdLCBiaW5hcnkuc2l6ZSgpKTsKKworICAgIFdl
YkNvcmU6OmJhc2U2NEVuY29kZSgmYmluYXJ5WzBdLCBiaW5hcnkuc2l6ZSgpLCB2ZWN0LCBCYXNl
NjRJbnNlcnRDUkxGID09IHBvbGljeSA/IHRydWUgOiBmYWxzZSk7CisKKyAgICBiYXNlNjQuZW1w
dHkoKTsKKyAgICBiYXNlNjQuYXBwZW5kKCZ2ZWN0WzBdLCB2ZWN0LnNpemUoKSk7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCB1bmVzY2FwZVVSTChjb25zdCBzdGQ6OnN0cmluZyYgZXNj
YXBlZCwgc3RkOjpzdHJpbmcmIHVybCkKK3sKKyAgICBXVEY6OlN0cmluZyBlc2NhcGVkU3RyaW5n
KGVzY2FwZWQuZGF0YSgpLCBlc2NhcGVkLmxlbmd0aCgpKTsKKworICAgIFdURjo6U3RyaW5nIHVy
bFN0cmluZyA9IFdlYkNvcmU6OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhlc2NhcGVkU3RyaW5n
KTsKKyAgICBXVEY6OkNTdHJpbmcgdXRmOCA9IHVybFN0cmluZy51dGY4KCk7CisKKyAgICB1cmwu
Y2xlYXIoKTsKKyAgICB1cmwuYXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgpKTsKK30K
Kwordm9pZCBlc2NhcGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCwgc3RkOjpzdHJpbmcmIGVz
Y2FwZWQpCit7CisgICAgV1RGOjpTdHJpbmcgdXJsU3RyaW5nKHVybC5kYXRhKCksIHVybC5sZW5n
dGgoKSk7CisKKyAgICBXVEY6OlN0cmluZyBlc2NhcGVkU3RyaW5nID0gV2ViQ29yZTo6ZW5jb2Rl
V2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh1cmxTdHJpbmcpOworICAgIFdURjo6Q1N0cmluZyB1dGY4
ID0gZXNjYXBlZFN0cmluZy51dGY4KCk7CisKKyAgICBlc2NhcGVkLmNsZWFyKCk7CisgICAgZXNj
YXBlZC5hcHBlbmQodXRmOC5kYXRhKCksIHV0ZjgubGVuZ3RoKCkpOworfQorCitib29sIGdldEV4
dGVuc2lvbkZvck1pbWVUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lLCBzdGQ6OnN0cmluZyYg
ZXh0ZW5zaW9uKQoreworICAgIFdURjo6U3RyaW5nIG1pbWVTdHJpbmcobWltZS5kYXRhKCksIG1p
bWUubGVuZ3RoKCkpOworCisgICAgV1RGOjpTdHJpbmcgZXh0ID0gV2ViQ29yZTo6TUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUobWltZVN0cmluZyk7Cisg
ICAgaWYgKGV4dC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdURjo6
Q1N0cmluZyB1dGY4ID0gZXh0LnV0ZjgoKTsKKyAgICBleHRlbnNpb24uY2xlYXIoKTsKKyAgICBl
eHRlbnNpb24uYXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBCbGFja0Jl
cnJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRD
b2RlYy5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kYjNkNDNmN2I5MWI4N2UxNTI2YTY1OGUzYmE3YWNlYjc3MzZkNjQxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29k
ZWMuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAy
MDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2ViS2l0VGV4dENvZGVjX2gKKyNkZWZpbmUgV2Vi
S2l0VGV4dENvZGVjX2gKKworI2luY2x1ZGUgIkJsYWNrQmVycnlHbG9iYWwuaCIKKworI2luY2x1
ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsK
K25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFRyYW5zY29kZVJlc3VsdCB7CisgICAgU3VjY2Vz
cywKKyAgICBTb3VyY2VFbmNvZGluZ1Vuc3VwcG9ydGVkLAorICAgIFNvdXJjZUJyb2tlbiwKKyAg
ICBUYXJnZXRFbmNvZGluZ1Vuc3VwcG9ydGVkLAorICAgIFRhcmdldEJ1ZmZlckluc3VmZmljaWVu
dAorfTsKKworZW51bSBCYXNlNjREZWNvZGVQb2xpY3kgeworICAgIEJhc2U2NEZhaWxPbkludmFs
aWRDaGFyYWN0ZXIsCisgICAgQmFzZTY0SWdub3JlV2hpdGVzcGFjZSwKKyAgICBCYXNlNjRJZ25v
cmVJbnZhbGlkQ2hhcmFjdGVycworfTsKKworZW51bSBCYXNlNjRFbmNvZGVQb2xpY3kgeworICAg
IEJhc2U2NERvTm90SW5zZXJ0Q1JMRiwKKyAgICBCYXNlNjRJbnNlcnRDUkxGCit9OworCitCTEFD
S0JFUlJZX0VYUE9SVCBib29sIGlzU2FtZUVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nMSwg
Y29uc3QgY2hhciogZW5jb2RpbmcyKTsKK0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgaXNBU0NJSUNv
bXBhdGlibGVFbmNvZGluZyhjb25zdCBjaGFyKiBlbmNvZGluZyk7CitCTEFDS0JFUlJZX0VYUE9S
VCBUcmFuc2NvZGVSZXN1bHQgdHJhbnNjb2RlKGNvbnN0IGNoYXIqIHNvdXJjZUVuY29kaW5nLCBj
b25zdCBjaGFyKiB0YXJnZXRFbmNvZGluZywgY29uc3QgY2hhciomIHNvdXJjZVN0YXJ0LCBpbnQg
c291cmNlTGVuZ3RoLCBjaGFyKiYgdGFyZ2V0U3RhcnQsIHVuc2lnbmVkIGludCB0YXJnZXRMZW5n
dGgpOworCitCTEFDS0JFUlJZX0VYUE9SVCBib29sIGJhc2U2NERlY29kZShjb25zdCBzdGQ6OnN0
cmluZyYgYmFzZTY0LCBzdGQ6OnZlY3RvcjxjaGFyPiYgYmluYXJ5LCBCYXNlNjREZWNvZGVQb2xp
Y3kpOworQkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBiYXNlNjRFbmNvZGUoY29uc3Qgc3RkOjp2ZWN0
b3I8Y2hhcj4mIGJpbmFyeSwgc3RkOjpzdHJpbmcmIGJhc2U2NCwgQmFzZTY0RW5jb2RlUG9saWN5
KTsKKworQkxBQ0tCRVJSWV9FWFBPUlQgdm9pZCB1bmVzY2FwZVVSTChjb25zdCBzdGQ6OnN0cmlu
ZyYgZXNjYXBlZCwgc3RkOjpzdHJpbmcmIHVybCk7CitCTEFDS0JFUlJZX0VYUE9SVCB2b2lkIGVz
Y2FwZVVSTChjb25zdCBzdGQ6OnN0cmluZyYgdXJsLCBzdGQ6OnN0cmluZyYgZXNjYXBlZCk7CisK
K0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgZ2V0RXh0ZW5zaW9uRm9yTWltZVR5cGUoY29uc3Qgc3Rk
OjpzdHJpbmcmIG1pbWUsIHN0ZDo6c3RyaW5nJiBleHRlbnNpb24pOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIEJsYWNrQmVycnkKKworI2VuZGlmIC8vIFdlYktpdFRl
eHRDb2RlY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlN0
cmluZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlN0cmluZy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzVmYTMyZGZmYmY4ZGVjZWU0Mzg3ZDkyNWM2NWRjM2UzZjg0Y2Y5NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmNwcApA
QCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiV1RGU3RyaW5nLmgiCisjaW5jbHVk
ZSAiV2ViU3RyaW5nSW1wbC5oIgorCit1c2luZyBXVEY6OlN0cmluZzsKK25hbWVzcGFjZSBCbGFj
a0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJTdHJpbmc6OldlYlN0cmluZyhjb25z
dCBjaGFyKiBsYXRpbjEpCis6IG1faW1wbChzdGF0aWNfY2FzdDxXZWJTdHJpbmdJbXBsKj4oV1RG
OjpTdHJpbmdJbXBsOjpjcmVhdGUobGF0aW4xKS5yZWxlYXNlUmVmKCkpKQoreworfQorCitXZWJT
dHJpbmc6OldlYlN0cmluZyhjb25zdCBjaGFyKiBsYXRpbjEsIHVuc2lnbmVkIGxlbmd0aCkKKzog
bV9pbXBsKHN0YXRpY19jYXN0PFdlYlN0cmluZ0ltcGwqPihXVEY6OlN0cmluZ0ltcGw6OmNyZWF0
ZShsYXRpbjEsIGxlbmd0aCkucmVsZWFzZVJlZigpKSkKK3sKK30KKworV2ViU3RyaW5nOjpXZWJT
dHJpbmcoY29uc3QgdW5zaWduZWQgc2hvcnQqIHV0ZjE2LCB1bnNpZ25lZCBsZW5ndGgpCis6IG1f
aW1wbChzdGF0aWNfY2FzdDxXZWJTdHJpbmdJbXBsKj4oV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUo
dXRmMTYsIGxlbmd0aCkucmVsZWFzZVJlZigpKSkKK3sKK30KKworV2ViU3RyaW5nOjpXZWJTdHJp
bmcoV2ViU3RyaW5nSW1wbCogaW1wbCkKKyAgICA6IG1faW1wbChpbXBsKQoreworICAgIGlmICht
X2ltcGwpCisgICAgICAgIG1faW1wbC0+cmVmKCk7Cit9CisKK1dlYlN0cmluZzo6fldlYlN0cmlu
ZygpCit7CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5kZXJlZigpOworfQorCitX
ZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCBXZWJTdHJpbmcmIHN0cikKKzogbV9pbXBsKHN0ci5t
X2ltcGwpCit7CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5yZWYoKTsKK30KKwor
V2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVV0ZjgoY29uc3QgY2hhciogdXRmOCkKK3sKKyAgICBy
ZXR1cm4gV1RGOjpTdHJpbmc6OmZyb21VVEY4KHV0ZjgpOworfQorCitXZWJTdHJpbmcmIFdlYlN0
cmluZzo6b3BlcmF0b3I9KGNvbnN0IFdlYlN0cmluZyYgc3RyKQoreworICAgIGlmIChzdHIubV9p
bXBsKQorICAgICAgICBzdHIubV9pbXBsLT5yZWYoKTsKKyAgICBpZiAobV9pbXBsKQorICAgICAg
ICBtX2ltcGwtPmRlcmVmKCk7CisgICAgbV9pbXBsID0gc3RyLm1faW1wbDsKKworICAgIHJldHVy
biAqdGhpczsKK30KKworc3RkOjpzdHJpbmcgV2ViU3RyaW5nOjp1dGY4KCkgY29uc3QKK3sKKyAg
ICBzdGQ6OnN0cmluZyB1dGY4OworICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm4gdXRm
ODsKKworICAgIFdURjo6U3RyaW5nIHN0cihtX2ltcGwpOworICAgIENTdHJpbmcgY3N0ciA9IHN0
ci51dGY4KCk7CisgICAgdXRmOC5hc3NpZ24oY3N0ci5kYXRhKCksIGNzdHIubGVuZ3RoKCkpOwor
ICAgIHJldHVybiB1dGY4OworfQorCitjb25zdCB1bnNpZ25lZCBzaG9ydCogV2ViU3RyaW5nOjpj
aGFyYWN0ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5jaGFyYWN0
ZXJzKCkgOiAwOworfQorCit1bnNpZ25lZCBXZWJTdHJpbmc6Omxlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+bGVuZ3RoKCkgOiAwOworfQorCitib29sIFdlYlN0
cmluZzo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2ltcGwgfHwgIW1faW1wbC0+
bGVuZ3RoKCk7Cit9CisKK2Jvb2wgV2ViU3RyaW5nOjplcXVhbChjb25zdCBjaGFyKiB1dGY4KSBj
b25zdAoreworICAgIHJldHVybiBXVEY6OmVxdWFsKG1faW1wbCwgdXRmOCk7Cit9CisKK2Jvb2wg
V2ViU3RyaW5nOjplcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiB1dGY4KSBjb25zdAorewor
ICAgIHJldHVybiBXVEY6OmVxdWFsSWdub3JpbmdDYXNlKG1faW1wbCwgdXRmOCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuaCBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGEwNGI0NTA0ZmM4YTBi
ZGJjNjY0MTlkZGY4N2U2M2QzYzQ0OTdkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYlN0
cmluZ19oCisjZGVmaW5lIFdlYlN0cmluZ19oCisKKyNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFs
LmgiCisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3RyaW5nSW1wbDsKKworY2xhc3MgQkxBQ0tCRVJSWV9F
WFBPUlQgV2ViU3RyaW5nIHsKK3B1YmxpYzoKKyAgICBXZWJTdHJpbmcoKSA6IG1faW1wbCgwKSB7
IH0KKyAgICB+V2ViU3RyaW5nKCk7CisgICAgV2ViU3RyaW5nKGNvbnN0IGNoYXIqIGxhdGluMSk7
CisgICAgV2ViU3RyaW5nKGNvbnN0IGNoYXIqIGxhdGluMSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICBXZWJTdHJpbmcoY29uc3QgdW5zaWduZWQgc2hvcnQqIHV0ZjE2LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIFdlYlN0cmluZyhXZWJTdHJpbmdJbXBsKik7CisgICAgV2ViU3RyaW5nKGNvbnN0IFdl
YlN0cmluZyYpOworICAgIFdlYlN0cmluZyYgb3BlcmF0b3I9KGNvbnN0IFdlYlN0cmluZyYpOwor
CisgICAgc3RkOjpzdHJpbmcgdXRmOCgpIGNvbnN0OworCisgICAgc3RhdGljIFdlYlN0cmluZyBm
cm9tVXRmOChjb25zdCBjaGFyKiB1dGY4KTsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBj
aGFyYWN0ZXJzKCkgY29uc3Q7CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3Q7CisKKyAgICBib29sIGVxdWFsKGNvbnN0IGNoYXIqIHV0ZjgpIGNv
bnN0OworICAgIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogdXRmOCkgY29uc3Q7
CisKKyAgICBXZWJTdHJpbmdJbXBsKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9Citw
cml2YXRlOgorICAgIFdlYlN0cmluZ0ltcGwqIG1faW1wbDsKK307Cit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKK30gLy8gbmFtZXNwYWNlIEJsYWNrQmVycnkKKworI2VuZGlmIC8vIFdlYlN0cmluZ19o
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118629</attachid>
            <date>2011-12-09 13:51:31 -0800</date>
            <delta_ts>2011-12-12 13:45:33 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>73586.patch</filename>
            <type>text/plain</type>
            <size>16728</size>
            <attacher name="Jacky Jiang">jkjiang</attacher>
            
              <data encoding="base64">RnJvbSAyMmY2NTU2NTIwMDk2YWQ1OGNiYmMyYWY0MmYwOWViNzVmNDg5OTE0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNreSBKaWFuZyA8emhhamlhbmdAcmltLmNvbT4KRGF0ZTog
RnJpLCA5IERlYyAyMDExIDExOjQ3OjQ3IC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gVXBzdHJlYW0g
dGV4dCBjb2RlYyBhbmQgd2ViIHN0cmluZyBmaWxlcyBvZiBCbGFja0JlcnJ5IEFQSQogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczNTg2CgpSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KCkluaXRpYWwgdXBzdHJlYW0sIG5vIG5ldyB0ZXN0cwoKKiBibGFja2JlcnJ5
L0FwaS9XZWJLaXRUZXh0Q29kZWMuY3BwOiBBZGRlZC4KKEJsYWNrQmVycnk6OldlYktpdDo6aXNT
YW1lRW5jb2RpbmcpOgooQmxhY2tCZXJyeTo6V2ViS2l0Ojppc0FTQ0lJQ29tcGF0aWJsZUVuY29k
aW5nKToKKEJsYWNrQmVycnk6OldlYktpdDo6dHJhbnNjb2RlKToKKEJsYWNrQmVycnk6OldlYktp
dDo6YmFzZTY0RGVjb2RlUG9saWN5Rm9yV2ViQ29yZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmJh
c2U2NERlY29kZSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmJhc2U2NEVuY29kZSk6CihCbGFja0Jl
cnJ5OjpXZWJLaXQ6OnVuZXNjYXBlVVJMKToKKEJsYWNrQmVycnk6OldlYktpdDo6ZXNjYXBlVVJM
KToKKEJsYWNrQmVycnk6OldlYktpdDo6Z2V0RXh0ZW5zaW9uRm9yTWltZVR5cGUpOgoqIGJsYWNr
YmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5oOiBBZGRlZC4KKiBibGFja2JlcnJ5L0FwaS9XZWJT
dHJpbmcuY3BwOiBBZGRlZC4KKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpXZWJTdHJp
bmcpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6On5XZWJTdHJpbmcpOgooQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmZyb21VdGY4KToKKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OnV0
ZjgpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmNoYXJhY3RlcnMpOgooQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlN0cmluZzo6aXNFbXB0eSk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZzo6ZXF1YWwp
OgooQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFsSWdub3JpbmdDYXNlKToKKiBi
bGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuaDogQWRkZWQuCi0tLQogU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMyArKysrKwogU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuY3BwIHwgIDE1MSArKysrKysrKysrKysr
KysrKysrKysrCiBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5o
ICAgfCAgIDYzICsrKysrKysrKwogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJp
bmcuY3BwICAgICAgIHwgIDExOCArKysrKysrKysrKysrKysrKwogU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJTdHJpbmcuaCAgICAgICAgIHwgICA1NCArKysrKysrKwogNSBmaWxlcyBj
aGFuZ2VkLCA0MTkgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRD
b2RlYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJTdHJpbmcuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJTdHJpbmcuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNTJjY2U2NS4uMDQ1MTJkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzNiBAQAorMjAxMS0xMi0wOSAgSmFja3kgSmlhbmcgIDx6aGFqaWFuZ0ByaW0u
Y29tPgorCisgICAgICAgIFVwc3RyZWFtIHRleHQgY29kZWMgYW5kIHdlYiBzdHJpbmcgZmlsZXMg
b2YgQmxhY2tCZXJyeSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTczNTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwgbm8gbmV3IHRlc3RzCisKKyAgICAgICAgKiBibGFj
a2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6aXNTYW1lRW5jb2RpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
Ojppc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6dHJhbnNjb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6YmFzZTY0RGVjb2Rl
UG9saWN5Rm9yV2ViQ29yZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmJhc2U2NERl
Y29kZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmJhc2U2NEVuY29kZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OnVuZXNjYXBlVVJMKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6ZXNjYXBlVVJMKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Z2V0
RXh0ZW5zaW9uRm9yTWltZVR5cGUpOgorICAgICAgICAqIGJsYWNrYmVycnkvQXBpL1dlYktpdFRl
eHRDb2RlYy5oOiBBZGRlZC4KKyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpXZWJTdHJp
bmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6On5XZWJTdHJpbmcp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmZyb21VdGY4KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OnV0ZjgpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmNoYXJhY3RlcnMpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlN0cmluZzo6aXNFbXB0eSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlN0cmluZzo6ZXF1YWwpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6
OmVxdWFsSWdub3JpbmdDYXNlKToKKyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcu
aDogQWRkZWQuCisKIDIwMTEtMTItMDggIEphY2t5IEppYW5nICA8emhhamlhbmdAcmltLmNvbT4K
IAogICAgICAgICBVcHN0cmVhbSBCbGFja0JlcnJ5IEFQSSBiYWNraW5nIHN0b3JlIGZpbGVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1YTA1MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmNwcApAQCAt
MCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENvZGVj
LmgiCisKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJUZXh0
Q29kZWNJQ1UuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK3VzaW5nIFdlYkNvcmU6OlRleHRFbmNvZGluZzsKK3VzaW5nIFdlYkNv
cmU6OlRleHRDb2RlY0lDVTsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBCbGFj
a0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIGlzU2FtZUVuY29kaW5nKGNvbnN0
IGNoYXIqIGVuY29kaW5nMSwgY29uc3QgY2hhciogZW5jb2RpbmcyKQoreworICAgIHJldHVybiBU
ZXh0RW5jb2RpbmcoZW5jb2RpbmcxKSA9PSBUZXh0RW5jb2RpbmcoZW5jb2RpbmcyKTsKK30KKwor
Ym9vbCBpc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nKQorewor
ICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcoZW5jb2RpbmcpOworICAgIGlmICghdGV4dEVu
Y29kaW5nLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2sg
dGhlIG1vc3QgY29tbW9uIGVuY29kaW5ncyBmaXJzdAorICAgIGlmICh0ZXh0RW5jb2RpbmcgPT0g
V2ViQ29yZTo6VVRGOEVuY29kaW5nKCkgfHwgdGV4dEVuY29kaW5nID09IFdlYkNvcmU6OkxhdGlu
MUVuY29kaW5nKCkgfHwgdGV4dEVuY29kaW5nID09IFdlYkNvcmU6OkFTQ0lJRW5jb2RpbmcoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHJpbmcgbG93ZXJjYXNlZEVuY29kaW5nID0g
U3RyaW5nKGVuY29kaW5nKS5sb3dlcigpOworICAgIGlmIChsb3dlcmNhc2VkRW5jb2Rpbmcuc3Rh
cnRzV2l0aCgiaXNvLTg4NTkiKQorICAgICAgICB8fCBsb3dlcmNhc2VkRW5jb2Rpbmcuc3RhcnRz
V2l0aCgid2luZG93cyIpCisgICAgICAgIHx8IGxvd2VyY2FzZWRFbmNvZGluZy5zdGFydHNXaXRo
KCJldWMtanAiKQorICAgICAgICB8fCBsb3dlcmNhc2VkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiZXVj
LWtyIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitU
cmFuc2NvZGVSZXN1bHQgdHJhbnNjb2RlKGNvbnN0IGNoYXIqIHNvdXJjZUVuY29kaW5nLCBjb25z
dCBjaGFyKiB0YXJnZXRFbmNvZGluZywgY29uc3QgY2hhciomIHNvdXJjZVN0YXJ0LCBpbnQgc291
cmNlTGVuZ3RoLCBjaGFyKiYgdGFyZ2V0U3RhcnQsIHVuc2lnbmVkIGludCB0YXJnZXRMZW5ndGgp
Cit7CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZ1NvdXJjZShzb3VyY2VFbmNvZGluZyk7
CisgICAgaWYgKCF0ZXh0RW5jb2RpbmdTb3VyY2UuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
U291cmNlRW5jb2RpbmdVbnN1cHBvcnRlZDsKKworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rp
bmdUYXJnZXQodGFyZ2V0RW5jb2RpbmcpOworICAgIGlmICghdGV4dEVuY29kaW5nVGFyZ2V0Lmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFRhcmdldEVuY29kaW5nVW5zdXBwb3J0ZWQ7CisKKyAg
ICBib29sIHNhd0Vycm9yID0gZmFsc2U7CisgICAgU3RyaW5nIHVjczIgPSBUZXh0Q29kZWNJQ1Uo
dGV4dEVuY29kaW5nU291cmNlKS5kZWNvZGUoc291cmNlU3RhcnQsIHNvdXJjZUxlbmd0aCwgdHJ1
ZSwgdHJ1ZSwgc2F3RXJyb3IpOworCisgICAgaWYgKHNhd0Vycm9yKQorICAgICAgICByZXR1cm4g
U291cmNlQnJva2VuOworCisgICAgQ1N0cmluZyBlbmNvZGVkID0gVGV4dENvZGVjSUNVKHRleHRF
bmNvZGluZ1RhcmdldCkuZW5jb2RlKHVjczIuY2hhcmFjdGVycygpLCB1Y3MyLmxlbmd0aCgpLCBX
ZWJDb3JlOjpFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgaWYgKGVuY29kZWQubGVuZ3Ro
KCkgPiB0YXJnZXRMZW5ndGgpCisgICAgICAgIHJldHVybiBUYXJnZXRCdWZmZXJJbnN1ZmZpY2ll
bnQ7CisKKyAgICBzdHJuY3B5KHRhcmdldFN0YXJ0LCBlbmNvZGVkLmRhdGEoKSwgZW5jb2RlZC5s
ZW5ndGgoKSk7CisgICAgdGFyZ2V0U3RhcnQgKz0gZW5jb2RlZC5sZW5ndGgoKTsKKworICAgIHJl
dHVybiBTdWNjZXNzOworfQorCitXZWJDb3JlOjpCYXNlNjREZWNvZGVQb2xpY3kgYmFzZTY0RGVj
b2RlUG9saWN5Rm9yV2ViQ29yZShCYXNlNjREZWNvZGVQb2xpY3kgcG9saWN5KQoreworICAgIC8v
IE11c3QgbWFrZSBzdXJlIEJhc2U2NERlY29kZVBvbGljeSBpcyB0aGUgc2FtZSBpbiBXZWJLaXQg
YW5kIFdlYkNvcmUhCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhc2U2NERlY29k
ZVBvbGljeT4ocG9saWN5KTsKK30KKworYm9vbCBiYXNlNjREZWNvZGUoY29uc3Qgc3RkOjpzdHJp
bmcmIGJhc2U2NCwgc3RkOjp2ZWN0b3I8Y2hhcj4mIGJpbmFyeSwgQmFzZTY0RGVjb2RlUG9saWN5
IHBvbGljeSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIGlmICghV2ViQ29yZTo6
YmFzZTY0RGVjb2RlKGJhc2U2NC5jX3N0cigpLCBiYXNlNjQubGVuZ3RoKCksIHJlc3VsdCwgYmFz
ZTY0RGVjb2RlUG9saWN5Rm9yV2ViQ29yZShwb2xpY3kpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYmluYXJ5Lmluc2VydChiaW5hcnkuYmVnaW4oKSwgcmVzdWx0LmJlZ2luKCksIHJl
c3VsdC5lbmQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYmFzZTY0RW5jb2RlKGNv
bnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBiaW5hcnksIHN0ZDo6c3RyaW5nJiBiYXNlNjQsIEJhc2U2
NEVuY29kZVBvbGljeSBwb2xpY3kpCit7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBy
ZXN1bHQuYXBwZW5kKCZiaW5hcnlbMF0sIGJpbmFyeS5zaXplKCkpOworCisgICAgV2ViQ29yZTo6
YmFzZTY0RW5jb2RlKCZiaW5hcnlbMF0sIGJpbmFyeS5zaXplKCksIHJlc3VsdCwgQmFzZTY0SW5z
ZXJ0Q1JMRiA9PSBwb2xpY3kgPyB0cnVlIDogZmFsc2UpOworCisgICAgYmFzZTY0LmNsZWFyKCk7
CisgICAgYmFzZTY0LmFwcGVuZCgmcmVzdWx0WzBdLCByZXN1bHQuc2l6ZSgpKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIHVuZXNjYXBlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiBlc2Nh
cGVkLCBzdGQ6OnN0cmluZyYgdXJsKQoreworICAgIFN0cmluZyBlc2NhcGVkU3RyaW5nKGVzY2Fw
ZWQuZGF0YSgpLCBlc2NhcGVkLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gV2Vi
Q29yZTo6ZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGVzY2FwZWRTdHJpbmcpOworICAgIENTdHJp
bmcgdXRmOCA9IHVybFN0cmluZy51dGY4KCk7CisKKyAgICB1cmwuY2xlYXIoKTsKKyAgICB1cmwu
YXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgpKTsKK30KKwordm9pZCBlc2NhcGVVUkwo
Y29uc3Qgc3RkOjpzdHJpbmcmIHVybCwgc3RkOjpzdHJpbmcmIGVzY2FwZWQpCit7CisgICAgU3Ry
aW5nIHVybFN0cmluZyh1cmwuZGF0YSgpLCB1cmwubGVuZ3RoKCkpOworICAgIFN0cmluZyBlc2Nh
cGVkU3RyaW5nID0gV2ViQ29yZTo6ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh1cmxTdHJp
bmcpOworICAgIENTdHJpbmcgdXRmOCA9IGVzY2FwZWRTdHJpbmcudXRmOCgpOworCisgICAgZXNj
YXBlZC5jbGVhcigpOworICAgIGVzY2FwZWQuYXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0
aCgpKTsKK30KKworYm9vbCBnZXRFeHRlbnNpb25Gb3JNaW1lVHlwZShjb25zdCBzdGQ6OnN0cmlu
ZyYgbWltZSwgc3RkOjpzdHJpbmcmIGV4dGVuc2lvbikKK3sKKyAgICBTdHJpbmcgbWltZVR5cGUo
bWltZS5kYXRhKCksIG1pbWUubGVuZ3RoKCkpOworICAgIFN0cmluZyBwcmVmZXJyZWRFeHRlbnNp
b24gPSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JN
SU1FVHlwZShtaW1lVHlwZSk7CisgICAgaWYgKHByZWZlcnJlZEV4dGVuc2lvbi5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgdXRmOCA9IHByZWZlcnJlZEV4
dGVuc2lvbi51dGY4KCk7CisgICAgZXh0ZW5zaW9uLmNsZWFyKCk7CisgICAgZXh0ZW5zaW9uLmFw
cGVuZCh1dGY4LmRhdGEoKSwgdXRmOC5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuaCBiL1Nv
dXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4NDExYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmgKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aWZuZGVmIFdlYktpdFRleHRDb2RlY19oCisjZGVmaW5lIFdlYktpdFRleHRDb2RlY19oCisKKyNp
bmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUg
PHZlY3Rvcj4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2VudW0gVHJhbnNjb2RlUmVzdWx0IHsKKyAgICBTdWNjZXNzLAorICAgIFNvdXJjZUVuY29kaW5n
VW5zdXBwb3J0ZWQsCisgICAgU291cmNlQnJva2VuLAorICAgIFRhcmdldEVuY29kaW5nVW5zdXBw
b3J0ZWQsCisgICAgVGFyZ2V0QnVmZmVySW5zdWZmaWNpZW50Cit9OworCitlbnVtIEJhc2U2NERl
Y29kZVBvbGljeSB7CisgICAgQmFzZTY0RmFpbE9uSW52YWxpZENoYXJhY3RlciwKKyAgICBCYXNl
NjRJZ25vcmVXaGl0ZXNwYWNlLAorICAgIEJhc2U2NElnbm9yZUludmFsaWRDaGFyYWN0ZXJzCit9
OworCitlbnVtIEJhc2U2NEVuY29kZVBvbGljeSB7CisgICAgQmFzZTY0RG9Ob3RJbnNlcnRDUkxG
LAorICAgIEJhc2U2NEluc2VydENSTEYKK307CisKK0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgaXNT
YW1lRW5jb2RpbmcoY29uc3QgY2hhciogZW5jb2RpbmcxLCBjb25zdCBjaGFyKiBlbmNvZGluZzIp
OworQkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBpc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKGNvbnN0
IGNoYXIqIGVuY29kaW5nKTsKK0JMQUNLQkVSUllfRVhQT1JUIFRyYW5zY29kZVJlc3VsdCB0cmFu
c2NvZGUoY29uc3QgY2hhciogc291cmNlRW5jb2RpbmcsIGNvbnN0IGNoYXIqIHRhcmdldEVuY29k
aW5nLCBjb25zdCBjaGFyKiYgc291cmNlU3RhcnQsIGludCBzb3VyY2VMZW5ndGgsIGNoYXIqJiB0
YXJnZXRTdGFydCwgdW5zaWduZWQgdGFyZ2V0TGVuZ3RoKTsKKworQkxBQ0tCRVJSWV9FWFBPUlQg
Ym9vbCBiYXNlNjREZWNvZGUoY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2U2NCwgc3RkOjp2ZWN0b3I8
Y2hhcj4mIGJpbmFyeSwgQmFzZTY0RGVjb2RlUG9saWN5KTsKK0JMQUNLQkVSUllfRVhQT1JUIGJv
b2wgYmFzZTY0RW5jb2RlKGNvbnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBiaW5hcnksIHN0ZDo6c3Ry
aW5nJiBiYXNlNjQsIEJhc2U2NEVuY29kZVBvbGljeSk7CisKK0JMQUNLQkVSUllfRVhQT1JUIHZv
aWQgdW5lc2NhcGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIGVzY2FwZWQsIHN0ZDo6c3RyaW5nJiB1
cmwpOworQkxBQ0tCRVJSWV9FWFBPUlQgdm9pZCBlc2NhcGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcm
IHVybCwgc3RkOjpzdHJpbmcmIGVzY2FwZWQpOworCitCTEFDS0JFUlJZX0VYUE9SVCBib29sIGdl
dEV4dGVuc2lvbkZvck1pbWVUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lLCBzdGQ6OnN0cmlu
ZyYgZXh0ZW5zaW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBC
bGFja0JlcnJ5CisKKyNlbmRpZiAvLyBXZWJLaXRUZXh0Q29kZWNfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3BwIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjk3ZWEyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL1dlYlN0cmluZy5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaW5jbHVkZSAiV2ViU3RyaW5nSW1wbC5oIgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKwordXNpbmcgV1RGOjpTdHJpbmc7CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVz
cGFjZSBXZWJLaXQgeworCitXZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCBjaGFyKiBsYXRpbjEp
CisgICAgOiBtX2ltcGwoc3RhdGljX2Nhc3Q8V2ViU3RyaW5nSW1wbCo+KFdURjo6U3RyaW5nSW1w
bDo6Y3JlYXRlKGxhdGluMSkucmVsZWFzZVJlZigpKSkKK3sKK30KKworV2ViU3RyaW5nOjpXZWJT
dHJpbmcoY29uc3QgY2hhciogbGF0aW4xLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX2ltcGwo
c3RhdGljX2Nhc3Q8V2ViU3RyaW5nSW1wbCo+KFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlKGxhdGlu
MSwgbGVuZ3RoKS5yZWxlYXNlUmVmKCkpKQoreworfQorCitXZWJTdHJpbmc6OldlYlN0cmluZyhj
b25zdCB1bnNpZ25lZCBzaG9ydCogdXRmMTYsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1faW1w
bChzdGF0aWNfY2FzdDxXZWJTdHJpbmdJbXBsKj4oV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUodXRm
MTYsIGxlbmd0aCkucmVsZWFzZVJlZigpKSkKK3sKK30KKworV2ViU3RyaW5nOjpXZWJTdHJpbmco
V2ViU3RyaW5nSW1wbCogaW1wbCkKKyAgICA6IG1faW1wbChpbXBsKQoreworICAgIGlmIChtX2lt
cGwpCisgICAgICAgIG1faW1wbC0+cmVmKCk7Cit9CisKK1dlYlN0cmluZzo6fldlYlN0cmluZygp
Cit7CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5kZXJlZigpOworfQorCitXZWJT
dHJpbmc6OldlYlN0cmluZyhjb25zdCBXZWJTdHJpbmcmIHN0cikKKyAgICA6IG1faW1wbChzdHIu
bV9pbXBsKQoreworICAgIGlmIChtX2ltcGwpCisgICAgICAgIG1faW1wbC0+cmVmKCk7Cit9CisK
K1dlYlN0cmluZyBXZWJTdHJpbmc6OmZyb21VdGY4KGNvbnN0IGNoYXIqIHV0ZjgpCit7CisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodXRmOCk7Cit9CisKK1dlYlN0cmluZyYgV2ViU3RyaW5n
OjpvcGVyYXRvcj0oY29uc3QgV2ViU3RyaW5nJiBzdHIpCit7CisgICAgaWYgKHN0ci5tX2ltcGwp
CisgICAgICAgIHN0ci5tX2ltcGwtPnJlZigpOworICAgIGlmIChtX2ltcGwpCisgICAgICAgIG1f
aW1wbC0+ZGVyZWYoKTsKKyAgICBtX2ltcGwgPSBzdHIubV9pbXBsOworICAgIHJldHVybiAqdGhp
czsKK30KKworc3RkOjpzdHJpbmcgV2ViU3RyaW5nOjp1dGY4KCkgY29uc3QKK3sKKyAgICBzdGQ6
OnN0cmluZyB1dGY4OworICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm4gdXRmODsKKwor
ICAgIENTdHJpbmcgY3N0ciA9IFN0cmluZyhtX2ltcGwpLnV0ZjgoKTsKKyAgICB1dGY4LmFzc2ln
bihjc3RyLmRhdGEoKSwgY3N0ci5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHV0Zjg7Cit9CisKK2Nv
bnN0IHVuc2lnbmVkIHNob3J0KiBXZWJTdHJpbmc6OmNoYXJhY3RlcnMoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmNoYXJhY3RlcnMoKSA6IDA7Cit9CisKK3Vuc2lnbmVk
IFdlYlN0cmluZzo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBs
LT5sZW5ndGgoKSA6IDA7Cit9CisKK2Jvb2wgV2ViU3RyaW5nOjppc0VtcHR5KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gIW1faW1wbCB8fCAhbV9pbXBsLT5sZW5ndGgoKTsKK30KKworYm9vbCBXZWJT
dHJpbmc6OmVxdWFsKGNvbnN0IGNoYXIqIHV0ZjgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6
ZXF1YWwobV9pbXBsLCB1dGY4KTsKK30KKworYm9vbCBXZWJTdHJpbmc6OmVxdWFsSWdub3JpbmdD
YXNlKGNvbnN0IGNoYXIqIHV0ZjgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6ZXF1YWxJZ25v
cmluZ0Nhc2UobV9pbXBsLCB1dGY4KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8v
IG5hbWVzcGFjZSBCbGFja0JlcnJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvQXBpL1dlYlN0cmluZy5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJp
bmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTI4YmRlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpZm5kZWYgV2ViU3RyaW5nX2gKKyNkZWZpbmUgV2ViU3RyaW5nX2gKKworI2lu
Y2x1ZGUgIkJsYWNrQmVycnlHbG9iYWwuaCIKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFj
ZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJpbmdJbXBs
OworCitjbGFzcyBCTEFDS0JFUlJZX0VYUE9SVCBXZWJTdHJpbmcgeworcHVibGljOgorICAgIFdl
YlN0cmluZygpIDogbV9pbXBsKDApIHsgfQorICAgIH5XZWJTdHJpbmcoKTsKKyAgICBXZWJTdHJp
bmcoY29uc3QgY2hhciogbGF0aW4xKTsKKyAgICBXZWJTdHJpbmcoY29uc3QgY2hhciogbGF0aW4x
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIFdlYlN0cmluZyhjb25zdCB1bnNpZ25lZCBzaG9ydCog
dXRmMTYsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgV2ViU3RyaW5nKFdlYlN0cmluZ0ltcGwqKTsK
KyAgICBXZWJTdHJpbmcoY29uc3QgV2ViU3RyaW5nJik7CisgICAgV2ViU3RyaW5nJiBvcGVyYXRv
cj0oY29uc3QgV2ViU3RyaW5nJik7CisgICAgc3RkOjpzdHJpbmcgdXRmOCgpIGNvbnN0OworICAg
IHN0YXRpYyBXZWJTdHJpbmcgZnJvbVV0ZjgoY29uc3QgY2hhciogdXRmOCk7CisgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQqIGNoYXJhY3RlcnMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICBib29sIGVxdWFsKGNvbnN0
IGNoYXIqIHV0ZjgpIGNvbnN0OworICAgIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hh
ciogdXRmOCkgY29uc3Q7CisgICAgV2ViU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJu
IG1faW1wbDsgfQorcHJpdmF0ZToKKyAgICBXZWJTdHJpbmdJbXBsKiBtX2ltcGw7Cit9OworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBCbGFja0JlcnJ5CisKKyNlbmRpZiAv
LyBXZWJTdHJpbmdfaAotLSAKMS43LjQuMQoK
</data>
<flag name="review"
          id="118427"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118837</attachid>
            <date>2011-12-12 13:45:33 -0800</date>
            <delta_ts>2011-12-12 15:14:14 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>73586-final.patch</filename>
            <type>text/plain</type>
            <size>16792</size>
            <attacher name="Jacky Jiang">jkjiang</attacher>
            
              <data encoding="base64">RnJvbSAxZWI0NDhmZTcwZWMwYjkzNmMyYTcyMzVmYWIxNzI4MTY2ODNhNzZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNreSBKaWFuZyA8emhhamlhbmdAcmltLmNvbT4KRGF0ZTog
TW9uLCAxMiBEZWMgMjAxMSAwNjo1NzoyNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIFVwc3RyZWFt
IHRleHQgY29kZWMgYW5kIHdlYiBzdHJpbmcgZmlsZXMgb2YgQmxhY2tCZXJyeSBBUEkKIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU4NgoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgpJbml0aWFsIHVwc3RyZWFtLCBubyBuZXcgdGVzdHMKCiogYmxhY2tiZXJy
eS9BcGkvV2ViS2l0VGV4dENvZGVjLmNwcDogQWRkZWQuCihCbGFja0JlcnJ5OjpXZWJLaXQ6Omlz
U2FtZUVuY29kaW5nKToKKEJsYWNrQmVycnk6OldlYktpdDo6aXNBU0NJSUNvbXBhdGlibGVFbmNv
ZGluZyk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OnRyYW5zY29kZSk6CihCbGFja0JlcnJ5OjpXZWJL
aXQ6OmJhc2U2NERlY29kZVBvbGljeUZvcldlYkNvcmUpOgooQmxhY2tCZXJyeTo6V2ViS2l0Ojpi
YXNlNjREZWNvZGUpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpiYXNlNjRFbmNvZGUpOgooQmxhY2tC
ZXJyeTo6V2ViS2l0Ojp1bmVzY2FwZVVSTCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmVzY2FwZVVS
TCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmdldEV4dGVuc2lvbkZvck1pbWVUeXBlKToKKiBibGFj
a2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuaDogQWRkZWQuCiogYmxhY2tiZXJyeS9BcGkvV2Vi
U3RyaW5nLmNwcDogQWRkZWQuCihCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3Ry
aW5nKToKKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjp+V2ViU3RyaW5nKToKKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpmcm9tVXRmOCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYlN0cmluZzo6b3BlcmF0b3I9KToKKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjp1
dGY4KToKKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpjaGFyYWN0ZXJzKToKKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpsZW5ndGgpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJTdHJpbmc6OmlzRW1wdHkpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFs
KToKKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjplcXVhbElnbm9yaW5nQ2FzZSk6Ciog
YmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmg6IEFkZGVkLgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzMgKysrKysKIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmNwcCB8ICAxNTIgKysrKysrKysrKysr
KysrKysrKysrKwogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMu
aCAgIHwgICA2MyArKysrKysrKysKIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3Ry
aW5nLmNwcCAgICAgICB8ICAxMTYgKysrKysrKysrKysrKysrKwogU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJTdHJpbmcuaCAgICAgICAgIHwgICA1NCArKysrKysrKwogNSBmaWxlcyBj
aGFuZ2VkLCA0MTggaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRD
b2RlYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJTdHJpbmcuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJTdHJpbmcuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmFlZWNkZS4uM2EyMjcwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzNiBAQAorMjAxMS0xMi0xMiAgSmFja3kgSmlhbmcgIDx6aGFqaWFuZ0ByaW0u
Y29tPgorCisgICAgICAgIFVwc3RyZWFtIHRleHQgY29kZWMgYW5kIHdlYiBzdHJpbmcgZmlsZXMg
b2YgQmxhY2tCZXJyeSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTczNTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwgbm8gbmV3IHRlc3RzCisKKyAgICAgICAgKiBibGFj
a2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6aXNTYW1lRW5jb2RpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
Ojppc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6dHJhbnNjb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6YmFzZTY0RGVjb2Rl
UG9saWN5Rm9yV2ViQ29yZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmJhc2U2NERl
Y29kZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmJhc2U2NEVuY29kZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OnVuZXNjYXBlVVJMKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6ZXNjYXBlVVJMKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Z2V0
RXh0ZW5zaW9uRm9yTWltZVR5cGUpOgorICAgICAgICAqIGJsYWNrYmVycnkvQXBpL1dlYktpdFRl
eHRDb2RlYy5oOiBBZGRlZC4KKyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpXZWJTdHJp
bmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6On5XZWJTdHJpbmcp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmZyb21VdGY4KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OnV0ZjgpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmNoYXJhY3RlcnMpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlN0cmluZzo6aXNFbXB0eSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlN0cmluZzo6ZXF1YWwpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6
OmVxdWFsSWdub3JpbmdDYXNlKToKKyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcu
aDogQWRkZWQuCisKIDIwMTEtMTItMDkgIEphY2t5IEppYW5nICA8emhhamlhbmdAcmltLmNvbT4K
IAogICAgICAgICBVcHN0cmVhbSBCbGFja0JlcnJ5IEFQSSBiYWNraW5nIHN0b3JlIGZpbGVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkMjVmYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmNwcApAQCAt
MCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENvZGVj
LmgiCisKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlRleHRDb2RlY0lDVS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIFdlYkNvcmU6OlRleHRFbmNvZGluZzsKK3Vz
aW5nIFdlYkNvcmU6OlRleHRDb2RlY0lDVTsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVz
cGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIGlzU2FtZUVuY29k
aW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nMSwgY29uc3QgY2hhciogZW5jb2RpbmcyKQoreworICAg
IHJldHVybiBUZXh0RW5jb2RpbmcoZW5jb2RpbmcxKSA9PSBUZXh0RW5jb2RpbmcoZW5jb2Rpbmcy
KTsKK30KKworYm9vbCBpc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29k
aW5nKQoreworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcoZW5jb2RpbmcpOworICAgIGlm
ICghdGV4dEVuY29kaW5nLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gQ2hlY2sgdGhlIG1vc3QgY29tbW9uIGVuY29kaW5ncyBmaXJzdAorICAgIGlmICh0ZXh0RW5j
b2RpbmcgPT0gV2ViQ29yZTo6VVRGOEVuY29kaW5nKCkgfHwgdGV4dEVuY29kaW5nID09IFdlYkNv
cmU6OkxhdGluMUVuY29kaW5nKCkgfHwgdGV4dEVuY29kaW5nID09IFdlYkNvcmU6OkFTQ0lJRW5j
b2RpbmcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHJpbmcgbG93ZXJjYXNlZEVu
Y29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS5sb3dlcigpOworICAgIC8vIFRoaXMgaXMgc2xvdyBh
bmQgY291bGQgZWFzaWx5IGJlIG9wdGltaXplZCBieSBkaXJlY3RseSBpbnNwZWN0aW5nIGVuY29k
aW5nW2ldLgorICAgIGlmIChsb3dlcmNhc2VkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiaXNvLTg4NTki
KQorICAgICAgICB8fCBsb3dlcmNhc2VkRW5jb2Rpbmcuc3RhcnRzV2l0aCgid2luZG93cyIpCisg
ICAgICAgIHx8IGxvd2VyY2FzZWRFbmNvZGluZy5zdGFydHNXaXRoKCJldWMtanAiKQorICAgICAg
ICB8fCBsb3dlcmNhc2VkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiZXVjLWtyIikpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitUcmFuc2NvZGVSZXN1bHQgdHJh
bnNjb2RlKGNvbnN0IGNoYXIqIHNvdXJjZUVuY29kaW5nLCBjb25zdCBjaGFyKiB0YXJnZXRFbmNv
ZGluZywgY29uc3QgY2hhciomIHNvdXJjZVN0YXJ0LCBpbnQgc291cmNlTGVuZ3RoLCBjaGFyKiYg
dGFyZ2V0U3RhcnQsIHVuc2lnbmVkIGludCB0YXJnZXRMZW5ndGgpCit7CisgICAgVGV4dEVuY29k
aW5nIHRleHRFbmNvZGluZ1NvdXJjZShzb3VyY2VFbmNvZGluZyk7CisgICAgaWYgKCF0ZXh0RW5j
b2RpbmdTb3VyY2UuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gU291cmNlRW5jb2RpbmdVbnN1
cHBvcnRlZDsKKworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmdUYXJnZXQodGFyZ2V0RW5j
b2RpbmcpOworICAgIGlmICghdGV4dEVuY29kaW5nVGFyZ2V0LmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIFRhcmdldEVuY29kaW5nVW5zdXBwb3J0ZWQ7CisKKyAgICBib29sIHNhd0Vycm9yID0g
ZmFsc2U7CisgICAgU3RyaW5nIHVjczIgPSBUZXh0Q29kZWNJQ1UodGV4dEVuY29kaW5nU291cmNl
KS5kZWNvZGUoc291cmNlU3RhcnQsIHNvdXJjZUxlbmd0aCwgdHJ1ZSwgdHJ1ZSwgc2F3RXJyb3Ip
OworCisgICAgaWYgKHNhd0Vycm9yKQorICAgICAgICByZXR1cm4gU291cmNlQnJva2VuOworCisg
ICAgQ1N0cmluZyBlbmNvZGVkID0gVGV4dENvZGVjSUNVKHRleHRFbmNvZGluZ1RhcmdldCkuZW5j
b2RlKHVjczIuY2hhcmFjdGVycygpLCB1Y3MyLmxlbmd0aCgpLCBXZWJDb3JlOjpFbnRpdGllc0Zv
clVuZW5jb2RhYmxlcyk7CisgICAgaWYgKGVuY29kZWQubGVuZ3RoKCkgPiB0YXJnZXRMZW5ndGgp
CisgICAgICAgIHJldHVybiBUYXJnZXRCdWZmZXJJbnN1ZmZpY2llbnQ7CisKKyAgICBzdHJuY3B5
KHRhcmdldFN0YXJ0LCBlbmNvZGVkLmRhdGEoKSwgZW5jb2RlZC5sZW5ndGgoKSk7CisgICAgdGFy
Z2V0U3RhcnQgKz0gZW5jb2RlZC5sZW5ndGgoKTsKKworICAgIHJldHVybiBTdWNjZXNzOworfQor
CitXZWJDb3JlOjpCYXNlNjREZWNvZGVQb2xpY3kgYmFzZTY0RGVjb2RlUG9saWN5Rm9yV2ViQ29y
ZShCYXNlNjREZWNvZGVQb2xpY3kgcG9saWN5KQoreworICAgIC8vIE11c3QgbWFrZSBzdXJlIEJh
c2U2NERlY29kZVBvbGljeSBpcyB0aGUgc2FtZSBpbiBXZWJLaXQgYW5kIFdlYkNvcmUhCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhc2U2NERlY29kZVBvbGljeT4ocG9saWN5KTsK
K30KKworYm9vbCBiYXNlNjREZWNvZGUoY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2U2NCwgc3RkOjp2
ZWN0b3I8Y2hhcj4mIGJpbmFyeSwgQmFzZTY0RGVjb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBW
ZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIGlmICghV2ViQ29yZTo6YmFzZTY0RGVjb2RlKGJhc2U2
NC5jX3N0cigpLCBiYXNlNjQubGVuZ3RoKCksIHJlc3VsdCwgYmFzZTY0RGVjb2RlUG9saWN5Rm9y
V2ViQ29yZShwb2xpY3kpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYmluYXJ5Lmlu
c2VydChiaW5hcnkuYmVnaW4oKSwgcmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYmFzZTY0RW5jb2RlKGNvbnN0IHN0ZDo6dmVjdG9yPGNo
YXI+JiBiaW5hcnksIHN0ZDo6c3RyaW5nJiBiYXNlNjQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCit7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKCZiaW5h
cnlbMF0sIGJpbmFyeS5zaXplKCkpOworCisgICAgV2ViQ29yZTo6YmFzZTY0RW5jb2RlKCZiaW5h
cnlbMF0sIGJpbmFyeS5zaXplKCksIHJlc3VsdCwgQmFzZTY0SW5zZXJ0Q1JMRiA9PSBwb2xpY3kg
PyB0cnVlIDogZmFsc2UpOworCisgICAgYmFzZTY0LmNsZWFyKCk7CisgICAgYmFzZTY0LmFwcGVu
ZCgmcmVzdWx0WzBdLCByZXN1bHQuc2l6ZSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIHVuZXNjYXBlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiBlc2NhcGVkLCBzdGQ6OnN0cmluZyYg
dXJsKQoreworICAgIFN0cmluZyBlc2NhcGVkU3RyaW5nKGVzY2FwZWQuZGF0YSgpLCBlc2NhcGVk
Lmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gV2ViQ29yZTo6ZGVjb2RlVVJMRXNj
YXBlU2VxdWVuY2VzKGVzY2FwZWRTdHJpbmcpOworICAgIENTdHJpbmcgdXRmOCA9IHVybFN0cmlu
Zy51dGY4KCk7CisKKyAgICB1cmwuY2xlYXIoKTsKKyAgICB1cmwuYXBwZW5kKHV0ZjguZGF0YSgp
LCB1dGY4Lmxlbmd0aCgpKTsKK30KKwordm9pZCBlc2NhcGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcm
IHVybCwgc3RkOjpzdHJpbmcmIGVzY2FwZWQpCit7CisgICAgU3RyaW5nIHVybFN0cmluZyh1cmwu
ZGF0YSgpLCB1cmwubGVuZ3RoKCkpOworICAgIFN0cmluZyBlc2NhcGVkU3RyaW5nID0gV2ViQ29y
ZTo6ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh1cmxTdHJpbmcpOworICAgIENTdHJpbmcg
dXRmOCA9IGVzY2FwZWRTdHJpbmcudXRmOCgpOworCisgICAgZXNjYXBlZC5jbGVhcigpOworICAg
IGVzY2FwZWQuYXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgpKTsKK30KKworYm9vbCBn
ZXRFeHRlbnNpb25Gb3JNaW1lVHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZSwgc3RkOjpzdHJp
bmcmIGV4dGVuc2lvbikKK3sKKyAgICBTdHJpbmcgbWltZVR5cGUobWltZS5kYXRhKCksIG1pbWUu
bGVuZ3RoKCkpOworICAgIFN0cmluZyBwcmVmZXJyZWRFeHRlbnNpb24gPSBXZWJDb3JlOjpNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShtaW1lVHlwZSk7
CisgICAgaWYgKHByZWZlcnJlZEV4dGVuc2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIENTdHJpbmcgdXRmOCA9IHByZWZlcnJlZEV4dGVuc2lvbi51dGY4KCk7Cisg
ICAgZXh0ZW5zaW9uLmNsZWFyKCk7CisgICAgZXh0ZW5zaW9uLmFwcGVuZCh1dGY4LmRhdGEoKSwg
dXRmOC5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzE4NDExYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvV2ViS2l0VGV4dENvZGVjLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYktpdFRleHRD
b2RlY19oCisjZGVmaW5lIFdlYktpdFRleHRDb2RlY19oCisKKyNpbmNsdWRlICJCbGFja0JlcnJ5
R2xvYmFsLmgiCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNw
YWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gVHJhbnNjb2RlUmVz
dWx0IHsKKyAgICBTdWNjZXNzLAorICAgIFNvdXJjZUVuY29kaW5nVW5zdXBwb3J0ZWQsCisgICAg
U291cmNlQnJva2VuLAorICAgIFRhcmdldEVuY29kaW5nVW5zdXBwb3J0ZWQsCisgICAgVGFyZ2V0
QnVmZmVySW5zdWZmaWNpZW50Cit9OworCitlbnVtIEJhc2U2NERlY29kZVBvbGljeSB7CisgICAg
QmFzZTY0RmFpbE9uSW52YWxpZENoYXJhY3RlciwKKyAgICBCYXNlNjRJZ25vcmVXaGl0ZXNwYWNl
LAorICAgIEJhc2U2NElnbm9yZUludmFsaWRDaGFyYWN0ZXJzCit9OworCitlbnVtIEJhc2U2NEVu
Y29kZVBvbGljeSB7CisgICAgQmFzZTY0RG9Ob3RJbnNlcnRDUkxGLAorICAgIEJhc2U2NEluc2Vy
dENSTEYKK307CisKK0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgaXNTYW1lRW5jb2RpbmcoY29uc3Qg
Y2hhciogZW5jb2RpbmcxLCBjb25zdCBjaGFyKiBlbmNvZGluZzIpOworQkxBQ0tCRVJSWV9FWFBP
UlQgYm9vbCBpc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nKTsK
K0JMQUNLQkVSUllfRVhQT1JUIFRyYW5zY29kZVJlc3VsdCB0cmFuc2NvZGUoY29uc3QgY2hhciog
c291cmNlRW5jb2RpbmcsIGNvbnN0IGNoYXIqIHRhcmdldEVuY29kaW5nLCBjb25zdCBjaGFyKiYg
c291cmNlU3RhcnQsIGludCBzb3VyY2VMZW5ndGgsIGNoYXIqJiB0YXJnZXRTdGFydCwgdW5zaWdu
ZWQgdGFyZ2V0TGVuZ3RoKTsKKworQkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBiYXNlNjREZWNvZGUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGJhc2U2NCwgc3RkOjp2ZWN0b3I8Y2hhcj4mIGJpbmFyeSwgQmFz
ZTY0RGVjb2RlUG9saWN5KTsKK0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgYmFzZTY0RW5jb2RlKGNv
bnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBiaW5hcnksIHN0ZDo6c3RyaW5nJiBiYXNlNjQsIEJhc2U2
NEVuY29kZVBvbGljeSk7CisKK0JMQUNLQkVSUllfRVhQT1JUIHZvaWQgdW5lc2NhcGVVUkwoY29u
c3Qgc3RkOjpzdHJpbmcmIGVzY2FwZWQsIHN0ZDo6c3RyaW5nJiB1cmwpOworQkxBQ0tCRVJSWV9F
WFBPUlQgdm9pZCBlc2NhcGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCwgc3RkOjpzdHJpbmcm
IGVzY2FwZWQpOworCitCTEFDS0JFUlJZX0VYUE9SVCBib29sIGdldEV4dGVuc2lvbkZvck1pbWVU
eXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lLCBzdGQ6OnN0cmluZyYgZXh0ZW5zaW9uKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBCbGFja0JlcnJ5CisKKyNlbmRp
ZiAvLyBXZWJLaXRUZXh0Q29kZWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJTdHJpbmcuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJT
dHJpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOGQ1NDkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlN0cmluZy5j
cHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIw
MTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgorCisjaW5jbHVkZSAiV2ViU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEJs
YWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlN0cmluZzo6V2ViU3RyaW5nKGNv
bnN0IGNoYXIqIGxhdGluMSkKKyAgICA6IG1faW1wbChzdGF0aWNfY2FzdDxXZWJTdHJpbmdJbXBs
Kj4oV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUobGF0aW4xKS5yZWxlYXNlUmVmKCkpKQoreworfQor
CitXZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCBjaGFyKiBsYXRpbjEsIHVuc2lnbmVkIGxlbmd0
aCkKKyAgICA6IG1faW1wbChzdGF0aWNfY2FzdDxXZWJTdHJpbmdJbXBsKj4oV1RGOjpTdHJpbmdJ
bXBsOjpjcmVhdGUobGF0aW4xLCBsZW5ndGgpLnJlbGVhc2VSZWYoKSkpCit7Cit9CisKK1dlYlN0
cmluZzo6V2ViU3RyaW5nKGNvbnN0IHVuc2lnbmVkIHNob3J0KiB1dGYxNiwgdW5zaWduZWQgbGVu
Z3RoKQorICAgIDogbV9pbXBsKHN0YXRpY19jYXN0PFdlYlN0cmluZ0ltcGwqPihXVEY6OlN0cmlu
Z0ltcGw6OmNyZWF0ZSh1dGYxNiwgbGVuZ3RoKS5yZWxlYXNlUmVmKCkpKQoreworfQorCitXZWJT
dHJpbmc6OldlYlN0cmluZyhXZWJTdHJpbmdJbXBsKiBpbXBsKQorICAgIDogbV9pbXBsKGltcGwp
Cit7CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5yZWYoKTsKK30KKworV2ViU3Ry
aW5nOjp+V2ViU3RyaW5nKCkKK3sKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwtPmRl
cmVmKCk7Cit9CisKK1dlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdlYlN0cmluZyYgc3RyKQor
ICAgIDogbV9pbXBsKHN0ci5tX2ltcGwpCit7CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9p
bXBsLT5yZWYoKTsKK30KKworV2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVV0ZjgoY29uc3QgY2hh
ciogdXRmOCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh1dGY4KTsKK30KKworV2Vi
U3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXZWJTdHJpbmcmIHN0cikKK3sKKyAg
ICBpZiAoc3RyLm1faW1wbCkKKyAgICAgICAgc3RyLm1faW1wbC0+cmVmKCk7CisgICAgaWYgKG1f
aW1wbCkKKyAgICAgICAgbV9pbXBsLT5kZXJlZigpOworICAgIG1faW1wbCA9IHN0ci5tX2ltcGw7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdGQ6OnN0cmluZyBXZWJTdHJpbmc6OnV0ZjgoKSBj
b25zdAoreworICAgIHN0ZDo6c3RyaW5nIHV0Zjg7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAg
IHJldHVybiB1dGY4OworCisgICAgQ1N0cmluZyBjc3RyID0gU3RyaW5nKG1faW1wbCkudXRmOCgp
OworICAgIHV0ZjguYXNzaWduKGNzdHIuZGF0YSgpLCBjc3RyLmxlbmd0aCgpKTsKKyAgICByZXR1
cm4gdXRmODsKK30KKworY29uc3QgdW5zaWduZWQgc2hvcnQqIFdlYlN0cmluZzo6Y2hhcmFjdGVy
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Y2hhcmFjdGVycygpIDog
MDsKK30KKwordW5zaWduZWQgV2ViU3RyaW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVy
biBtX2ltcGwgPyBtX2ltcGwtPmxlbmd0aCgpIDogMDsKK30KKworYm9vbCBXZWJTdHJpbmc6Omlz
RW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsIHx8ICFtX2ltcGwtPmxlbmd0aCgp
OworfQorCitib29sIFdlYlN0cmluZzo6ZXF1YWwoY29uc3QgY2hhciogdXRmOCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZXF1YWwobV9pbXBsLCB1dGY4KTsKK30KKworYm9vbCBXZWJTdHJpbmc6OmVx
dWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIHV0ZjgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVx
dWFsSWdub3JpbmdDYXNlKG1faW1wbCwgdXRmOCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkv
V2ViU3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyOGJkZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5n
LmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYlN0cmluZ19oCisjZGVmaW5lIFdlYlN0cmluZ19o
CisKKyNpbmNsdWRlICJCbGFja0JlcnJ5R2xvYmFsLmgiCisjaW5jbHVkZSA8c3RyaW5nPgorCitu
YW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViU3Ry
aW5nSW1wbDsKKworY2xhc3MgQkxBQ0tCRVJSWV9FWFBPUlQgV2ViU3RyaW5nIHsKK3B1YmxpYzoK
KyAgICBXZWJTdHJpbmcoKSA6IG1faW1wbCgwKSB7IH0KKyAgICB+V2ViU3RyaW5nKCk7CisgICAg
V2ViU3RyaW5nKGNvbnN0IGNoYXIqIGxhdGluMSk7CisgICAgV2ViU3RyaW5nKGNvbnN0IGNoYXIq
IGxhdGluMSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBXZWJTdHJpbmcoY29uc3QgdW5zaWduZWQg
c2hvcnQqIHV0ZjE2LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIFdlYlN0cmluZyhXZWJTdHJpbmdJ
bXBsKik7CisgICAgV2ViU3RyaW5nKGNvbnN0IFdlYlN0cmluZyYpOworICAgIFdlYlN0cmluZyYg
b3BlcmF0b3I9KGNvbnN0IFdlYlN0cmluZyYpOworICAgIHN0ZDo6c3RyaW5nIHV0ZjgoKSBjb25z
dDsKKyAgICBzdGF0aWMgV2ViU3RyaW5nIGZyb21VdGY4KGNvbnN0IGNoYXIqIHV0ZjgpOworICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0KiBjaGFyYWN0ZXJzKCkgY29uc3Q7CisgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisgICAgYm9vbCBlcXVh
bChjb25zdCBjaGFyKiB1dGY4KSBjb25zdDsKKyAgICBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNv
bnN0IGNoYXIqIHV0ZjgpIGNvbnN0OworICAgIFdlYlN0cmluZ0ltcGwqIGltcGwoKSBjb25zdCB7
IHJldHVybiBtX2ltcGw7IH0KK3ByaXZhdGU6CisgICAgV2ViU3RyaW5nSW1wbCogbV9pbXBsOwor
fTsKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQorCisj
ZW5kaWYgLy8gV2ViU3RyaW5nX2gKLS0gCjEuNy40LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118926</attachid>
            <date>2011-12-12 17:58:58 -0800</date>
            <delta_ts>2011-12-13 21:24:13 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>73586-final-2.patch</filename>
            <type>text/plain</type>
            <size>16802</size>
            <attacher name="Jacky Jiang">jkjiang</attacher>
            
              <data encoding="base64">RnJvbSBmMTNmNzA5YTEyZDU1OWRlODIyZmJiODU3MTQ5NDgzZjcxNDgyNDA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNreSBKaWFuZyA8emhhamlhbmdAcmltLmNvbT4KRGF0ZTog
TW9uLCAxMiBEZWMgMjAxMSAwNjo1NzoyNyAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIFVwc3RyZWFt
IHRleHQgY29kZWMgYW5kIHdlYiBzdHJpbmcgZmlsZXMgb2YgQmxhY2tCZXJyeSBBUEkKIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU4NgoKUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCgpJbml0aWFsIHVwc3RyZWFtLCBubyBuZXcgdGVzdHMKCiogYmxhY2tiZXJy
eS9BcGkvV2ViS2l0VGV4dENvZGVjLmNwcDogQWRkZWQuCihCbGFja0JlcnJ5OjpXZWJLaXQ6Omlz
U2FtZUVuY29kaW5nKToKKEJsYWNrQmVycnk6OldlYktpdDo6aXNBU0NJSUNvbXBhdGlibGVFbmNv
ZGluZyk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OnRyYW5zY29kZSk6CihCbGFja0JlcnJ5OjpXZWJL
aXQ6OmJhc2U2NERlY29kZVBvbGljeUZvcldlYkNvcmUpOgooQmxhY2tCZXJyeTo6V2ViS2l0Ojpi
YXNlNjREZWNvZGUpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpiYXNlNjRFbmNvZGUpOgooQmxhY2tC
ZXJyeTo6V2ViS2l0Ojp1bmVzY2FwZVVSTCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmVzY2FwZVVS
TCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6OmdldEV4dGVuc2lvbkZvck1pbWVUeXBlKToKKiBibGFj
a2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuaDogQWRkZWQuCiogYmxhY2tiZXJyeS9BcGkvV2Vi
U3RyaW5nLmNwcDogQWRkZWQuCihCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3Ry
aW5nKToKKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjp+V2ViU3RyaW5nKToKKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpmcm9tVXRmOCk6CihCbGFja0JlcnJ5OjpXZWJLaXQ6
OldlYlN0cmluZzo6b3BlcmF0b3I9KToKKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjp1
dGY4KToKKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpjaGFyYWN0ZXJzKToKKEJsYWNr
QmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpsZW5ndGgpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJTdHJpbmc6OmlzRW1wdHkpOgooQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFs
KToKKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjplcXVhbElnbm9yaW5nQ2FzZSk6Ciog
YmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmg6IEFkZGVkLgotLS0KIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzMgKysrKysKIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmNwcCB8ICAxNTIgKysrKysrKysrKysr
KysrKysrKysrKwogU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMu
aCAgIHwgICA2MyArKysrKysrKysKIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3Ry
aW5nLmNwcCAgICAgICB8ICAxMTYgKysrKysrKysrKysrKysrKwogU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9XZWJTdHJpbmcuaCAgICAgICAgIHwgICA1NCArKysrKysrKwogNSBmaWxlcyBj
aGFuZ2VkLCA0MTggaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRD
b2RlYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJTdHJpbmcuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJTdHJpbmcuaAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYmFlZWNkZS4uM2EyMjcwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzNiBAQAorMjAxMS0xMi0xMiAgSmFja3kgSmlhbmcgIDx6aGFqaWFuZ0ByaW0u
Y29tPgorCisgICAgICAgIFVwc3RyZWFtIHRleHQgY29kZWMgYW5kIHdlYiBzdHJpbmcgZmlsZXMg
b2YgQmxhY2tCZXJyeSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTczNTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW5pdGlhbCB1cHN0cmVhbSwgbm8gbmV3IHRlc3RzCisKKyAgICAgICAgKiBibGFj
a2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6aXNTYW1lRW5jb2RpbmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
Ojppc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktp
dDo6dHJhbnNjb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6YmFzZTY0RGVjb2Rl
UG9saWN5Rm9yV2ViQ29yZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmJhc2U2NERl
Y29kZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OmJhc2U2NEVuY29kZSk6CisgICAg
ICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OnVuZXNjYXBlVVJMKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6ZXNjYXBlVVJMKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6Z2V0
RXh0ZW5zaW9uRm9yTWltZVR5cGUpOgorICAgICAgICAqIGJsYWNrYmVycnkvQXBpL1dlYktpdFRl
eHRDb2RlYy5oOiBBZGRlZC4KKyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpXZWJTdHJp
bmcpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6On5XZWJTdHJpbmcp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmZyb21VdGY4KToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OnV0ZjgpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6OmNoYXJhY3RlcnMpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpXZWJTdHJpbmc6Omxlbmd0aCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlN0cmluZzo6aXNFbXB0eSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlN0cmluZzo6ZXF1YWwpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6
OmVxdWFsSWdub3JpbmdDYXNlKToKKyAgICAgICAgKiBibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcu
aDogQWRkZWQuCisKIDIwMTEtMTItMDkgIEphY2t5IEppYW5nICA8emhhamlhbmdAcmltLmNvbT4K
IAogICAgICAgICBVcHN0cmVhbSBCbGFja0JlcnJ5IEFQSSBiYWNraW5nIHN0b3JlIGZpbGVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJkMjVmYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmNwcApAQCAt
MCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VGV4dENvZGVj
LmgiCisKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlRleHRDb2RlY0lDVS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIFdlYkNvcmU6OlRleHRFbmNvZGluZzsKK3Vz
aW5nIFdlYkNvcmU6OlRleHRDb2RlY0lDVTsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVz
cGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIGlzU2FtZUVuY29k
aW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nMSwgY29uc3QgY2hhciogZW5jb2RpbmcyKQoreworICAg
IHJldHVybiBUZXh0RW5jb2RpbmcoZW5jb2RpbmcxKSA9PSBUZXh0RW5jb2RpbmcoZW5jb2Rpbmcy
KTsKK30KKworYm9vbCBpc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29k
aW5nKQoreworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcoZW5jb2RpbmcpOworICAgIGlm
ICghdGV4dEVuY29kaW5nLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gQ2hlY2sgdGhlIG1vc3QgY29tbW9uIGVuY29kaW5ncyBmaXJzdAorICAgIGlmICh0ZXh0RW5j
b2RpbmcgPT0gV2ViQ29yZTo6VVRGOEVuY29kaW5nKCkgfHwgdGV4dEVuY29kaW5nID09IFdlYkNv
cmU6OkxhdGluMUVuY29kaW5nKCkgfHwgdGV4dEVuY29kaW5nID09IFdlYkNvcmU6OkFTQ0lJRW5j
b2RpbmcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHJpbmcgbG93ZXJjYXNlZEVu
Y29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS5sb3dlcigpOworICAgIC8vIFRoaXMgaXMgc2xvdyBh
bmQgY291bGQgZWFzaWx5IGJlIG9wdGltaXplZCBieSBkaXJlY3RseSBpbnNwZWN0aW5nIGVuY29k
aW5nW2ldLgorICAgIGlmIChsb3dlcmNhc2VkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiaXNvLTg4NTki
KQorICAgICAgICB8fCBsb3dlcmNhc2VkRW5jb2Rpbmcuc3RhcnRzV2l0aCgid2luZG93cyIpCisg
ICAgICAgIHx8IGxvd2VyY2FzZWRFbmNvZGluZy5zdGFydHNXaXRoKCJldWMtanAiKQorICAgICAg
ICB8fCBsb3dlcmNhc2VkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiZXVjLWtyIikpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitUcmFuc2NvZGVSZXN1bHQgdHJh
bnNjb2RlKGNvbnN0IGNoYXIqIHNvdXJjZUVuY29kaW5nLCBjb25zdCBjaGFyKiB0YXJnZXRFbmNv
ZGluZywgY29uc3QgY2hhciomIHNvdXJjZVN0YXJ0LCBpbnQgc291cmNlTGVuZ3RoLCBjaGFyKiYg
dGFyZ2V0U3RhcnQsIHVuc2lnbmVkIGludCB0YXJnZXRMZW5ndGgpCit7CisgICAgVGV4dEVuY29k
aW5nIHRleHRFbmNvZGluZ1NvdXJjZShzb3VyY2VFbmNvZGluZyk7CisgICAgaWYgKCF0ZXh0RW5j
b2RpbmdTb3VyY2UuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gU291cmNlRW5jb2RpbmdVbnN1
cHBvcnRlZDsKKworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmdUYXJnZXQodGFyZ2V0RW5j
b2RpbmcpOworICAgIGlmICghdGV4dEVuY29kaW5nVGFyZ2V0LmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIFRhcmdldEVuY29kaW5nVW5zdXBwb3J0ZWQ7CisKKyAgICBib29sIHNhd0Vycm9yID0g
ZmFsc2U7CisgICAgU3RyaW5nIHVjczIgPSBUZXh0Q29kZWNJQ1UodGV4dEVuY29kaW5nU291cmNl
KS5kZWNvZGUoc291cmNlU3RhcnQsIHNvdXJjZUxlbmd0aCwgdHJ1ZSwgdHJ1ZSwgc2F3RXJyb3Ip
OworCisgICAgaWYgKHNhd0Vycm9yKQorICAgICAgICByZXR1cm4gU291cmNlQnJva2VuOworCisg
ICAgQ1N0cmluZyBlbmNvZGVkID0gVGV4dENvZGVjSUNVKHRleHRFbmNvZGluZ1RhcmdldCkuZW5j
b2RlKHVjczIuY2hhcmFjdGVycygpLCB1Y3MyLmxlbmd0aCgpLCBXZWJDb3JlOjpFbnRpdGllc0Zv
clVuZW5jb2RhYmxlcyk7CisgICAgaWYgKGVuY29kZWQubGVuZ3RoKCkgPiB0YXJnZXRMZW5ndGgp
CisgICAgICAgIHJldHVybiBUYXJnZXRCdWZmZXJJbnN1ZmZpY2llbnQ7CisKKyAgICBzdHJuY3B5
KHRhcmdldFN0YXJ0LCBlbmNvZGVkLmRhdGEoKSwgZW5jb2RlZC5sZW5ndGgoKSk7CisgICAgdGFy
Z2V0U3RhcnQgKz0gZW5jb2RlZC5sZW5ndGgoKTsKKworICAgIHJldHVybiBTdWNjZXNzOworfQor
CitXZWJDb3JlOjpCYXNlNjREZWNvZGVQb2xpY3kgYmFzZTY0RGVjb2RlUG9saWN5Rm9yV2ViQ29y
ZShCYXNlNjREZWNvZGVQb2xpY3kgcG9saWN5KQoreworICAgIC8vIE11c3QgbWFrZSBzdXJlIEJh
c2U2NERlY29kZVBvbGljeSBpcyB0aGUgc2FtZSBpbiBXZWJLaXQgYW5kIFdlYkNvcmUhCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhc2U2NERlY29kZVBvbGljeT4ocG9saWN5KTsK
K30KKworYm9vbCBiYXNlNjREZWNvZGUoY29uc3Qgc3RkOjpzdHJpbmcmIGJhc2U2NCwgc3RkOjp2
ZWN0b3I8Y2hhcj4mIGJpbmFyeSwgQmFzZTY0RGVjb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICBW
ZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIGlmICghV2ViQ29yZTo6YmFzZTY0RGVjb2RlKGJhc2U2
NC5jX3N0cigpLCBiYXNlNjQubGVuZ3RoKCksIHJlc3VsdCwgYmFzZTY0RGVjb2RlUG9saWN5Rm9y
V2ViQ29yZShwb2xpY3kpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYmluYXJ5Lmlu
c2VydChiaW5hcnkuYmVnaW4oKSwgcmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYmFzZTY0RW5jb2RlKGNvbnN0IHN0ZDo6dmVjdG9yPGNo
YXI+JiBiaW5hcnksIHN0ZDo6c3RyaW5nJiBiYXNlNjQsIEJhc2U2NEVuY29kZVBvbGljeSBwb2xp
Y3kpCit7CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKCZiaW5h
cnlbMF0sIGJpbmFyeS5zaXplKCkpOworCisgICAgV2ViQ29yZTo6YmFzZTY0RW5jb2RlKCZiaW5h
cnlbMF0sIGJpbmFyeS5zaXplKCksIHJlc3VsdCwgQmFzZTY0SW5zZXJ0Q1JMRiA9PSBwb2xpY3kg
PyB0cnVlIDogZmFsc2UpOworCisgICAgYmFzZTY0LmNsZWFyKCk7CisgICAgYmFzZTY0LmFwcGVu
ZCgmcmVzdWx0WzBdLCByZXN1bHQuc2l6ZSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIHVuZXNjYXBlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiBlc2NhcGVkLCBzdGQ6OnN0cmluZyYg
dXJsKQoreworICAgIFN0cmluZyBlc2NhcGVkU3RyaW5nKGVzY2FwZWQuZGF0YSgpLCBlc2NhcGVk
Lmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gV2ViQ29yZTo6ZGVjb2RlVVJMRXNj
YXBlU2VxdWVuY2VzKGVzY2FwZWRTdHJpbmcpOworICAgIENTdHJpbmcgdXRmOCA9IHVybFN0cmlu
Zy51dGY4KCk7CisKKyAgICB1cmwuY2xlYXIoKTsKKyAgICB1cmwuYXBwZW5kKHV0ZjguZGF0YSgp
LCB1dGY4Lmxlbmd0aCgpKTsKK30KKwordm9pZCBlc2NhcGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcm
IHVybCwgc3RkOjpzdHJpbmcmIGVzY2FwZWQpCit7CisgICAgU3RyaW5nIHVybFN0cmluZyh1cmwu
ZGF0YSgpLCB1cmwubGVuZ3RoKCkpOworICAgIFN0cmluZyBlc2NhcGVkU3RyaW5nID0gV2ViQ29y
ZTo6ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh1cmxTdHJpbmcpOworICAgIENTdHJpbmcg
dXRmOCA9IGVzY2FwZWRTdHJpbmcudXRmOCgpOworCisgICAgZXNjYXBlZC5jbGVhcigpOworICAg
IGVzY2FwZWQuYXBwZW5kKHV0ZjguZGF0YSgpLCB1dGY4Lmxlbmd0aCgpKTsKK30KKworYm9vbCBn
ZXRFeHRlbnNpb25Gb3JNaW1lVHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZSwgc3RkOjpzdHJp
bmcmIGV4dGVuc2lvbikKK3sKKyAgICBTdHJpbmcgbWltZVR5cGUobWltZS5kYXRhKCksIG1pbWUu
bGVuZ3RoKCkpOworICAgIFN0cmluZyBwcmVmZXJyZWRFeHRlbnNpb24gPSBXZWJDb3JlOjpNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShtaW1lVHlwZSk7
CisgICAgaWYgKHByZWZlcnJlZEV4dGVuc2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIENTdHJpbmcgdXRmOCA9IHByZWZlcnJlZEV4dGVuc2lvbi51dGY4KCk7Cisg
ICAgZXh0ZW5zaW9uLmNsZWFyKCk7CisgICAgZXh0ZW5zaW9uLmFwcGVuZCh1dGY4LmRhdGEoKSwg
dXRmOC5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorfSAvLyBuYW1lc3BhY2UgQmxhY2tCZXJyeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ibGFja2JlcnJ5L0FwaS9XZWJLaXRUZXh0Q29kZWMuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMzE4NDExYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJy
eS9BcGkvV2ViS2l0VGV4dENvZGVjLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCwgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYktpdFRleHRD
b2RlY19oCisjZGVmaW5lIFdlYktpdFRleHRDb2RlY19oCisKKyNpbmNsdWRlICJCbGFja0JlcnJ5
R2xvYmFsLmgiCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNw
YWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gVHJhbnNjb2RlUmVz
dWx0IHsKKyAgICBTdWNjZXNzLAorICAgIFNvdXJjZUVuY29kaW5nVW5zdXBwb3J0ZWQsCisgICAg
U291cmNlQnJva2VuLAorICAgIFRhcmdldEVuY29kaW5nVW5zdXBwb3J0ZWQsCisgICAgVGFyZ2V0
QnVmZmVySW5zdWZmaWNpZW50Cit9OworCitlbnVtIEJhc2U2NERlY29kZVBvbGljeSB7CisgICAg
QmFzZTY0RmFpbE9uSW52YWxpZENoYXJhY3RlciwKKyAgICBCYXNlNjRJZ25vcmVXaGl0ZXNwYWNl
LAorICAgIEJhc2U2NElnbm9yZUludmFsaWRDaGFyYWN0ZXJzCit9OworCitlbnVtIEJhc2U2NEVu
Y29kZVBvbGljeSB7CisgICAgQmFzZTY0RG9Ob3RJbnNlcnRDUkxGLAorICAgIEJhc2U2NEluc2Vy
dENSTEYKK307CisKK0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgaXNTYW1lRW5jb2RpbmcoY29uc3Qg
Y2hhciogZW5jb2RpbmcxLCBjb25zdCBjaGFyKiBlbmNvZGluZzIpOworQkxBQ0tCRVJSWV9FWFBP
UlQgYm9vbCBpc0FTQ0lJQ29tcGF0aWJsZUVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nKTsK
K0JMQUNLQkVSUllfRVhQT1JUIFRyYW5zY29kZVJlc3VsdCB0cmFuc2NvZGUoY29uc3QgY2hhciog
c291cmNlRW5jb2RpbmcsIGNvbnN0IGNoYXIqIHRhcmdldEVuY29kaW5nLCBjb25zdCBjaGFyKiYg
c291cmNlU3RhcnQsIGludCBzb3VyY2VMZW5ndGgsIGNoYXIqJiB0YXJnZXRTdGFydCwgdW5zaWdu
ZWQgdGFyZ2V0TGVuZ3RoKTsKKworQkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBiYXNlNjREZWNvZGUo
Y29uc3Qgc3RkOjpzdHJpbmcmIGJhc2U2NCwgc3RkOjp2ZWN0b3I8Y2hhcj4mIGJpbmFyeSwgQmFz
ZTY0RGVjb2RlUG9saWN5KTsKK0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgYmFzZTY0RW5jb2RlKGNv
bnN0IHN0ZDo6dmVjdG9yPGNoYXI+JiBiaW5hcnksIHN0ZDo6c3RyaW5nJiBiYXNlNjQsIEJhc2U2
NEVuY29kZVBvbGljeSk7CisKK0JMQUNLQkVSUllfRVhQT1JUIHZvaWQgdW5lc2NhcGVVUkwoY29u
c3Qgc3RkOjpzdHJpbmcmIGVzY2FwZWQsIHN0ZDo6c3RyaW5nJiB1cmwpOworQkxBQ0tCRVJSWV9F
WFBPUlQgdm9pZCBlc2NhcGVVUkwoY29uc3Qgc3RkOjpzdHJpbmcmIHVybCwgc3RkOjpzdHJpbmcm
IGVzY2FwZWQpOworCitCTEFDS0JFUlJZX0VYUE9SVCBib29sIGdldEV4dGVuc2lvbkZvck1pbWVU
eXBlKGNvbnN0IHN0ZDo6c3RyaW5nJiBtaW1lLCBzdGQ6OnN0cmluZyYgZXh0ZW5zaW9uKTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBCbGFja0JlcnJ5CisKKyNlbmRp
ZiAvLyBXZWJLaXRUZXh0Q29kZWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9XZWJTdHJpbmcuY3BwIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJT
dHJpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjlkODYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlN0cmluZy5j
cHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIw
MTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgorCisjaW5jbHVkZSAiV2ViU3RyaW5nSW1wbC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEJs
YWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlN0cmluZzo6V2ViU3RyaW5nKGNv
bnN0IGNoYXIqIGxhdGluMSkKKyAgICA6IG1faW1wbChzdGF0aWNfY2FzdDxXZWJTdHJpbmdJbXBs
Kj4oV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUobGF0aW4xKS5yZWxlYXNlUmVmKCkpKQoreworfQor
CitXZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCBjaGFyKiBsYXRpbjEsIHVuc2lnbmVkIGxlbmd0
aCkKKyAgICA6IG1faW1wbChzdGF0aWNfY2FzdDxXZWJTdHJpbmdJbXBsKj4oV1RGOjpTdHJpbmdJ
bXBsOjpjcmVhdGUobGF0aW4xLCBsZW5ndGgpLnJlbGVhc2VSZWYoKSkpCit7Cit9CisKK1dlYlN0
cmluZzo6V2ViU3RyaW5nKGNvbnN0IHVuc2lnbmVkIHNob3J0KiB1dGYxNiwgdW5zaWduZWQgbGVu
Z3RoKQorICAgIDogbV9pbXBsKHN0YXRpY19jYXN0PFdlYlN0cmluZ0ltcGwqPihXVEY6OlN0cmlu
Z0ltcGw6OmNyZWF0ZSh1dGYxNiwgbGVuZ3RoKS5yZWxlYXNlUmVmKCkpKQoreworfQorCitXZWJT
dHJpbmc6OldlYlN0cmluZyhXZWJTdHJpbmdJbXBsKiBpbXBsKQorICAgIDogbV9pbXBsKGltcGwp
Cit7CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9pbXBsLT5yZWYoKTsKK30KKworV2ViU3Ry
aW5nOjp+V2ViU3RyaW5nKCkKK3sKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBtX2ltcGwtPmRl
cmVmKCk7Cit9CisKK1dlYlN0cmluZzo6V2ViU3RyaW5nKGNvbnN0IFdlYlN0cmluZyYgc3RyKQor
ICAgIDogbV9pbXBsKHN0ci5tX2ltcGwpCit7CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgbV9p
bXBsLT5yZWYoKTsKK30KKworV2ViU3RyaW5nIFdlYlN0cmluZzo6ZnJvbVV0ZjgoY29uc3QgY2hh
ciogdXRmOCkKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOCh1dGY4KTsKK30KKworV2Vi
U3RyaW5nJiBXZWJTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBXZWJTdHJpbmcmIHN0cikKK3sKKyAg
ICBpZiAoc3RyLm1faW1wbCkKKyAgICAgICAgc3RyLm1faW1wbC0+cmVmKCk7CisgICAgaWYgKG1f
aW1wbCkKKyAgICAgICAgbV9pbXBsLT5kZXJlZigpOworICAgIG1faW1wbCA9IHN0ci5tX2ltcGw7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitzdGQ6OnN0cmluZyBXZWJTdHJpbmc6OnV0ZjgoKSBj
b25zdAoreworICAgIHN0ZDo6c3RyaW5nIHV0Zjg7CisgICAgaWYgKCFtX2ltcGwpCisgICAgICAg
IHJldHVybiB1dGY4OworCisgICAgQ1N0cmluZyBjc3RyID0gU3RyaW5nKG1faW1wbCkudXRmOCgp
OworICAgIHV0ZjguYXNzaWduKGNzdHIuZGF0YSgpLCBjc3RyLmxlbmd0aCgpKTsKKyAgICByZXR1
cm4gdXRmODsKK30KKworY29uc3QgdW5zaWduZWQgc2hvcnQqIFdlYlN0cmluZzo6Y2hhcmFjdGVy
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Y2hhcmFjdGVycygpIDog
MDsKK30KKwordW5zaWduZWQgV2ViU3RyaW5nOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVy
biBtX2ltcGwgPyBtX2ltcGwtPmxlbmd0aCgpIDogMDsKK30KKworYm9vbCBXZWJTdHJpbmc6Omlz
RW1wdHkoKSBjb25zdAoreworICAgIHJldHVybiAhbV9pbXBsIHx8ICFtX2ltcGwtPmxlbmd0aCgp
OworfQorCitib29sIFdlYlN0cmluZzo6ZXF1YWwoY29uc3QgY2hhciogdXRmOCkgY29uc3QKK3sK
KyAgICByZXR1cm4gV1RGOjplcXVhbChtX2ltcGwsIHV0ZjgpOworfQorCitib29sIFdlYlN0cmlu
Zzo6ZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogdXRmOCkgY29uc3QKK3sKKyAgICByZXR1
cm4gV1RGOjplcXVhbElnbm9yaW5nQ2FzZShtX2ltcGwsIHV0ZjgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL1dlYlN0cmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmZlMjhiZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L1dlYlN0cmluZy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBXZWJTdHJpbmdfaAorI2RlZmluZSBX
ZWJTdHJpbmdfaAorCisjaW5jbHVkZSAiQmxhY2tCZXJyeUdsb2JhbC5oIgorI2luY2x1ZGUgPHN0
cmluZz4KKworbmFtZXNwYWNlIEJsYWNrQmVycnkgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYlN0cmluZ0ltcGw7CisKK2NsYXNzIEJMQUNLQkVSUllfRVhQT1JUIFdlYlN0cmluZyB7
CitwdWJsaWM6CisgICAgV2ViU3RyaW5nKCkgOiBtX2ltcGwoMCkgeyB9CisgICAgfldlYlN0cmlu
ZygpOworICAgIFdlYlN0cmluZyhjb25zdCBjaGFyKiBsYXRpbjEpOworICAgIFdlYlN0cmluZyhj
b25zdCBjaGFyKiBsYXRpbjEsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgV2ViU3RyaW5nKGNvbnN0
IHVuc2lnbmVkIHNob3J0KiB1dGYxNiwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBXZWJTdHJpbmco
V2ViU3RyaW5nSW1wbCopOworICAgIFdlYlN0cmluZyhjb25zdCBXZWJTdHJpbmcmKTsKKyAgICBX
ZWJTdHJpbmcmIG9wZXJhdG9yPShjb25zdCBXZWJTdHJpbmcmKTsKKyAgICBzdGQ6OnN0cmluZyB1
dGY4KCkgY29uc3Q7CisgICAgc3RhdGljIFdlYlN0cmluZyBmcm9tVXRmOChjb25zdCBjaGFyKiB1
dGY4KTsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCogY2hhcmFjdGVycygpIGNvbnN0OworICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAg
IGJvb2wgZXF1YWwoY29uc3QgY2hhciogdXRmOCkgY29uc3Q7CisgICAgYm9vbCBlcXVhbElnbm9y
aW5nQ2FzZShjb25zdCBjaGFyKiB1dGY4KSBjb25zdDsKKyAgICBXZWJTdHJpbmdJbXBsKiBpbXBs
KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsOyB9Citwcml2YXRlOgorICAgIFdlYlN0cmluZ0ltcGwq
IG1faW1wbDsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIEJsYWNr
QmVycnkKKworI2VuZGlmIC8vIFdlYlN0cmluZ19oCi0tIAoxLjcuNC4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119152</attachid>
            <date>2011-12-13 21:24:22 -0800</date>
            <delta_ts>2011-12-14 00:26:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73586-20111214002421.patch</filename>
            <type>text/plain</type>
            <size>15227</size>
            <attacher name="Jacky Jiang">jkjiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNzA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJmM2U4ZWU0NzFlOTUyYmE4
M2YyYzk2MWU1YzUzNjgzY2YyYmYxOWIuLmNiODhjMDkyZjIzNzA1YWNlOTA4YWE4NGQ2NzlmM2Vj
ZDU3YzRmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzggQEAKIDIwMTEtMTItMTMgIEphY2t5IEpp
YW5nICA8emhhamlhbmdAcmltLmNvbT4KIAorICAgICAgICBVcHN0cmVhbSB0ZXh0IGNvZGVjIGFu
ZCB3ZWIgc3RyaW5nIGZpbGVzIG9mIEJsYWNrQmVycnkgQVBJCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU4NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluaXRpYWwgdXBzdHJlYW0sIG5vIG5ldyB0ZXN0
cy4KKworICAgICAgICAqIGJsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5jcHA6IEFkZGVk
LgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojppc1NhbWVFbmNvZGluZyk6CisgICAgICAg
IChCbGFja0JlcnJ5OjpXZWJLaXQ6OmlzQVNDSUlDb21wYXRpYmxlRW5jb2RpbmcpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojp0cmFuc2NvZGUpOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpiYXNlNjREZWNvZGVQb2xpY3lGb3JXZWJDb3JlKToKKyAgICAgICAgKEJsYWNrQmVy
cnk6OldlYktpdDo6YmFzZTY0RGVjb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
YmFzZTY0RW5jb2RlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6dW5lc2NhcGVVUkwp
OgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0Ojplc2NhcGVVUkwpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpnZXRFeHRlbnNpb25Gb3JNaW1lVHlwZSk6CisgICAgICAgICogYmxh
Y2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmg6IEFkZGVkLgorICAgICAgICAqIGJsYWNrYmVy
cnkvQXBpL1dlYlN0cmluZy5jcHA6IEFkZGVkLgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpXZWJTdHJpbmc6OldlYlN0cmluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6Oldl
YlN0cmluZzo6fldlYlN0cmluZyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0
cmluZzo6ZnJvbVV0ZjgpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJTdHJpbmc6
Om9wZXJhdG9yPSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZzo6dXRm
OCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZzo6Y2hhcmFjdGVycyk6
CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlN0cmluZzo6bGVuZ3RoKToKKyAgICAg
ICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjppc0VtcHR5KToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6V2ViU3RyaW5nOjplcXVhbCk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlN0cmluZzo6ZXF1YWxJZ25vcmluZ0Nhc2UpOgorICAgICAgICAqIGJsYWNr
YmVycnkvQXBpL1dlYlN0cmluZy5oOiBBZGRlZC4KKworMjAxMS0xMi0xMyAgSmFja3kgSmlhbmcg
IDx6aGFqaWFuZ0ByaW0uY29tPgorCiAgICAgICAgIFtCbGFja0JlcnJ5XSBTd2l0Y2ggdG8gbGli
anBlZyBmb3IgZGVjb2RpbmcKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc0NDc1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvV2ViS2l0VGV4dENvZGVjLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2Vi
S2l0VGV4dENvZGVjLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYWRiMzFmYzc3NWMwYzA0NWMxZmQ3MGUwMTZk
ZmQ3ZWQyZDlkOTM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5
L0FwaS9XZWJLaXRUZXh0Q29kZWMuY3BwCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJLaXRUZXh0Q29kZWMuaCIKKworI2luY2x1ZGUgIkJhc2U2NC5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVk
ZSAiVGV4dENvZGVjSUNVLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordXNp
bmcgV2ViQ29yZTo6VGV4dEVuY29kaW5nOwordXNpbmcgV2ViQ29yZTo6VGV4dENvZGVjSUNVOwor
CituYW1lc3BhY2UgQmxhY2tCZXJyeSB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworYm9vbCBpc1Nh
bWVFbmNvZGluZyhjb25zdCBjaGFyKiBlbmNvZGluZzEsIGNvbnN0IGNoYXIqIGVuY29kaW5nMikK
K3sKKyAgICByZXR1cm4gVGV4dEVuY29kaW5nKGVuY29kaW5nMSkgPT0gVGV4dEVuY29kaW5nKGVu
Y29kaW5nMik7Cit9CisKK2Jvb2wgaXNBU0NJSUNvbXBhdGlibGVFbmNvZGluZyhjb25zdCBjaGFy
KiBlbmNvZGluZykKK3sKKyAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nKGVuY29kaW5nKTsK
KyAgICBpZiAoIXRleHRFbmNvZGluZy5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIENoZWNrIHRoZSBtb3N0IGNvbW1vbiBlbmNvZGluZ3MgZmlyc3QKKyAgICBpZiAo
dGV4dEVuY29kaW5nID09IFdlYkNvcmU6OlVURjhFbmNvZGluZygpIHx8IHRleHRFbmNvZGluZyA9
PSBXZWJDb3JlOjpMYXRpbjFFbmNvZGluZygpIHx8IHRleHRFbmNvZGluZyA9PSBXZWJDb3JlOjpB
U0NJSUVuY29kaW5nKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgU3RyaW5nIGxvd2Vy
Y2FzZWRFbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykubG93ZXIoKTsKKyAgICAvLyBUaGlzIGlz
IHNsb3cgYW5kIGNvdWxkIGVhc2lseSBiZSBvcHRpbWl6ZWQgYnkgZGlyZWN0bHkgaW5zcGVjdGlu
ZyBlbmNvZGluZ1tpXS4KKyAgICBpZiAobG93ZXJjYXNlZEVuY29kaW5nLnN0YXJ0c1dpdGgoImlz
by04ODU5IikKKyAgICAgICAgfHwgbG93ZXJjYXNlZEVuY29kaW5nLnN0YXJ0c1dpdGgoIndpbmRv
d3MiKQorICAgICAgICB8fCBsb3dlcmNhc2VkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiZXVjLWpwIikK
KyAgICAgICAgfHwgbG93ZXJjYXNlZEVuY29kaW5nLnN0YXJ0c1dpdGgoImV1Yy1rciIpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworVHJhbnNjb2RlUmVz
dWx0IHRyYW5zY29kZShjb25zdCBjaGFyKiBzb3VyY2VFbmNvZGluZywgY29uc3QgY2hhciogdGFy
Z2V0RW5jb2RpbmcsIGNvbnN0IGNoYXIqJiBzb3VyY2VTdGFydCwgaW50IHNvdXJjZUxlbmd0aCwg
Y2hhciomIHRhcmdldFN0YXJ0LCB1bnNpZ25lZCBpbnQgdGFyZ2V0TGVuZ3RoKQoreworICAgIFRl
eHRFbmNvZGluZyB0ZXh0RW5jb2RpbmdTb3VyY2Uoc291cmNlRW5jb2RpbmcpOworICAgIGlmICgh
dGV4dEVuY29kaW5nU291cmNlLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIFNvdXJjZUVuY29k
aW5nVW5zdXBwb3J0ZWQ7CisKKyAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nVGFyZ2V0KHRh
cmdldEVuY29kaW5nKTsKKyAgICBpZiAoIXRleHRFbmNvZGluZ1RhcmdldC5pc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBUYXJnZXRFbmNvZGluZ1Vuc3VwcG9ydGVkOworCisgICAgYm9vbCBzYXdF
cnJvciA9IGZhbHNlOworICAgIFN0cmluZyB1Y3MyID0gVGV4dENvZGVjSUNVKHRleHRFbmNvZGlu
Z1NvdXJjZSkuZGVjb2RlKHNvdXJjZVN0YXJ0LCBzb3VyY2VMZW5ndGgsIHRydWUsIHRydWUsIHNh
d0Vycm9yKTsKKworICAgIGlmIChzYXdFcnJvcikKKyAgICAgICAgcmV0dXJuIFNvdXJjZUJyb2tl
bjsKKworICAgIENTdHJpbmcgZW5jb2RlZCA9IFRleHRDb2RlY0lDVSh0ZXh0RW5jb2RpbmdUYXJn
ZXQpLmVuY29kZSh1Y3MyLmNoYXJhY3RlcnMoKSwgdWNzMi5sZW5ndGgoKSwgV2ViQ29yZTo6RW50
aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgIGlmIChlbmNvZGVkLmxlbmd0aCgpID4gdGFyZ2V0
TGVuZ3RoKQorICAgICAgICByZXR1cm4gVGFyZ2V0QnVmZmVySW5zdWZmaWNpZW50OworCisgICAg
c3RybmNweSh0YXJnZXRTdGFydCwgZW5jb2RlZC5kYXRhKCksIGVuY29kZWQubGVuZ3RoKCkpOwor
ICAgIHRhcmdldFN0YXJ0ICs9IGVuY29kZWQubGVuZ3RoKCk7CisKKyAgICByZXR1cm4gU3VjY2Vz
czsKK30KKworV2ViQ29yZTo6QmFzZTY0RGVjb2RlUG9saWN5IGJhc2U2NERlY29kZVBvbGljeUZv
cldlYkNvcmUoQmFzZTY0RGVjb2RlUG9saWN5IHBvbGljeSkKK3sKKyAgICAvLyBNdXN0IG1ha2Ug
c3VyZSBCYXNlNjREZWNvZGVQb2xpY3kgaXMgdGhlIHNhbWUgaW4gV2ViS2l0IGFuZCBXZWJDb3Jl
IQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYXNlNjREZWNvZGVQb2xpY3k+KHBv
bGljeSk7Cit9CisKK2Jvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlNjQs
IHN0ZDo6dmVjdG9yPGNoYXI+JiBiaW5hcnksIEJhc2U2NERlY29kZVBvbGljeSBwb2xpY3kpCit7
CisgICAgVmVjdG9yPGNoYXI+IHJlc3VsdDsKKyAgICBpZiAoIVdlYkNvcmU6OmJhc2U2NERlY29k
ZShiYXNlNjQuY19zdHIoKSwgYmFzZTY0Lmxlbmd0aCgpLCByZXN1bHQsIGJhc2U2NERlY29kZVBv
bGljeUZvcldlYkNvcmUocG9saWN5KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJp
bmFyeS5pbnNlcnQoYmluYXJ5LmJlZ2luKCksIHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIGJhc2U2NEVuY29kZShjb25zdCBzdGQ6OnZl
Y3RvcjxjaGFyPiYgYmluYXJ5LCBzdGQ6OnN0cmluZyYgYmFzZTY0LCBCYXNlNjRFbmNvZGVQb2xp
Y3kgcG9saWN5KQoreworICAgIFZlY3RvcjxjaGFyPiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVu
ZCgmYmluYXJ5WzBdLCBiaW5hcnkuc2l6ZSgpKTsKKworICAgIFdlYkNvcmU6OmJhc2U2NEVuY29k
ZSgmYmluYXJ5WzBdLCBiaW5hcnkuc2l6ZSgpLCByZXN1bHQsIEJhc2U2NEluc2VydENSTEYgPT0g
cG9saWN5ID8gdHJ1ZSA6IGZhbHNlKTsKKworICAgIGJhc2U2NC5jbGVhcigpOworICAgIGJhc2U2
NC5hcHBlbmQoJnJlc3VsdFswXSwgcmVzdWx0LnNpemUoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCB1bmVzY2FwZVVSTChjb25zdCBzdGQ6OnN0cmluZyYgZXNjYXBlZCwgc3RkOjpz
dHJpbmcmIHVybCkKK3sKKyAgICBTdHJpbmcgZXNjYXBlZFN0cmluZyhlc2NhcGVkLmRhdGEoKSwg
ZXNjYXBlZC5sZW5ndGgoKSk7CisgICAgU3RyaW5nIHVybFN0cmluZyA9IFdlYkNvcmU6OmRlY29k
ZVVSTEVzY2FwZVNlcXVlbmNlcyhlc2NhcGVkU3RyaW5nKTsKKyAgICBDU3RyaW5nIHV0ZjggPSB1
cmxTdHJpbmcudXRmOCgpOworCisgICAgdXJsLmNsZWFyKCk7CisgICAgdXJsLmFwcGVuZCh1dGY4
LmRhdGEoKSwgdXRmOC5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgZXNjYXBlVVJMKGNvbnN0IHN0ZDo6
c3RyaW5nJiB1cmwsIHN0ZDo6c3RyaW5nJiBlc2NhcGVkKQoreworICAgIFN0cmluZyB1cmxTdHJp
bmcodXJsLmRhdGEoKSwgdXJsLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgZXNjYXBlZFN0cmluZyA9
IFdlYkNvcmU6OmVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXModXJsU3RyaW5nKTsKKyAgICBD
U3RyaW5nIHV0ZjggPSBlc2NhcGVkU3RyaW5nLnV0ZjgoKTsKKworICAgIGVzY2FwZWQuY2xlYXIo
KTsKKyAgICBlc2NhcGVkLmFwcGVuZCh1dGY4LmRhdGEoKSwgdXRmOC5sZW5ndGgoKSk7Cit9CisK
K2Jvb2wgZ2V0RXh0ZW5zaW9uRm9yTWltZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIG1pbWUsIHN0
ZDo6c3RyaW5nJiBleHRlbnNpb24pCit7CisgICAgU3RyaW5nIG1pbWVUeXBlKG1pbWUuZGF0YSgp
LCBtaW1lLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgcHJlZmVycmVkRXh0ZW5zaW9uID0gV2ViQ29y
ZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUobWlt
ZVR5cGUpOworICAgIGlmIChwcmVmZXJyZWRFeHRlbnNpb24uaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIHV0ZjggPSBwcmVmZXJyZWRFeHRlbnNpb24udXRm
OCgpOworICAgIGV4dGVuc2lvbi5jbGVhcigpOworICAgIGV4dGVuc2lvbi5hcHBlbmQodXRmOC5k
YXRhKCksIHV0ZjgubGVuZ3RoKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIEJsYWNrQmVycnkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViS2l0VGV4dENvZGVjLmggYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxODQxMWE4N2Rj
ZTIwMmNjZWRjZjU4YzE5YzczMjdlNjljNGNjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYktpdFRleHRDb2RlYy5oCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lm
bmRlZiBXZWJLaXRUZXh0Q29kZWNfaAorI2RlZmluZSBXZWJLaXRUZXh0Q29kZWNfaAorCisjaW5j
bHVkZSAiQmxhY2tCZXJyeUdsb2JhbC5oIgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2
ZWN0b3I+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitl
bnVtIFRyYW5zY29kZVJlc3VsdCB7CisgICAgU3VjY2VzcywKKyAgICBTb3VyY2VFbmNvZGluZ1Vu
c3VwcG9ydGVkLAorICAgIFNvdXJjZUJyb2tlbiwKKyAgICBUYXJnZXRFbmNvZGluZ1Vuc3VwcG9y
dGVkLAorICAgIFRhcmdldEJ1ZmZlckluc3VmZmljaWVudAorfTsKKworZW51bSBCYXNlNjREZWNv
ZGVQb2xpY3kgeworICAgIEJhc2U2NEZhaWxPbkludmFsaWRDaGFyYWN0ZXIsCisgICAgQmFzZTY0
SWdub3JlV2hpdGVzcGFjZSwKKyAgICBCYXNlNjRJZ25vcmVJbnZhbGlkQ2hhcmFjdGVycworfTsK
KworZW51bSBCYXNlNjRFbmNvZGVQb2xpY3kgeworICAgIEJhc2U2NERvTm90SW5zZXJ0Q1JMRiwK
KyAgICBCYXNlNjRJbnNlcnRDUkxGCit9OworCitCTEFDS0JFUlJZX0VYUE9SVCBib29sIGlzU2Ft
ZUVuY29kaW5nKGNvbnN0IGNoYXIqIGVuY29kaW5nMSwgY29uc3QgY2hhciogZW5jb2RpbmcyKTsK
K0JMQUNLQkVSUllfRVhQT1JUIGJvb2wgaXNBU0NJSUNvbXBhdGlibGVFbmNvZGluZyhjb25zdCBj
aGFyKiBlbmNvZGluZyk7CitCTEFDS0JFUlJZX0VYUE9SVCBUcmFuc2NvZGVSZXN1bHQgdHJhbnNj
b2RlKGNvbnN0IGNoYXIqIHNvdXJjZUVuY29kaW5nLCBjb25zdCBjaGFyKiB0YXJnZXRFbmNvZGlu
ZywgY29uc3QgY2hhciomIHNvdXJjZVN0YXJ0LCBpbnQgc291cmNlTGVuZ3RoLCBjaGFyKiYgdGFy
Z2V0U3RhcnQsIHVuc2lnbmVkIHRhcmdldExlbmd0aCk7CisKK0JMQUNLQkVSUllfRVhQT1JUIGJv
b2wgYmFzZTY0RGVjb2RlKGNvbnN0IHN0ZDo6c3RyaW5nJiBiYXNlNjQsIHN0ZDo6dmVjdG9yPGNo
YXI+JiBiaW5hcnksIEJhc2U2NERlY29kZVBvbGljeSk7CitCTEFDS0JFUlJZX0VYUE9SVCBib29s
IGJhc2U2NEVuY29kZShjb25zdCBzdGQ6OnZlY3RvcjxjaGFyPiYgYmluYXJ5LCBzdGQ6OnN0cmlu
ZyYgYmFzZTY0LCBCYXNlNjRFbmNvZGVQb2xpY3kpOworCitCTEFDS0JFUlJZX0VYUE9SVCB2b2lk
IHVuZXNjYXBlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiBlc2NhcGVkLCBzdGQ6OnN0cmluZyYgdXJs
KTsKK0JMQUNLQkVSUllfRVhQT1JUIHZvaWQgZXNjYXBlVVJMKGNvbnN0IHN0ZDo6c3RyaW5nJiB1
cmwsIHN0ZDo6c3RyaW5nJiBlc2NhcGVkKTsKKworQkxBQ0tCRVJSWV9FWFBPUlQgYm9vbCBnZXRF
eHRlbnNpb25Gb3JNaW1lVHlwZShjb25zdCBzdGQ6OnN0cmluZyYgbWltZSwgc3RkOjpzdHJpbmcm
IGV4dGVuc2lvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgQmxh
Y2tCZXJyeQorCisjZW5kaWYgLy8gV2ViS2l0VGV4dENvZGVjX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViU3RyaW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViU3RyaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDI5ZDg2ZGU0M2FjNzg2ZjFk
NjNiNTM0NGM1M2RmNTJiYjEwMWIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuY3BwCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKworI2luY2x1ZGUgIldlYlN0cmluZ0ltcGwu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBCbGFja0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCBjaGFyKiBsYXRpbjEpCisgICAgOiBtX2ltcGwo
c3RhdGljX2Nhc3Q8V2ViU3RyaW5nSW1wbCo+KFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlKGxhdGlu
MSkucmVsZWFzZVJlZigpKSkKK3sKK30KKworV2ViU3RyaW5nOjpXZWJTdHJpbmcoY29uc3QgY2hh
ciogbGF0aW4xLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX2ltcGwoc3RhdGljX2Nhc3Q8V2Vi
U3RyaW5nSW1wbCo+KFdURjo6U3RyaW5nSW1wbDo6Y3JlYXRlKGxhdGluMSwgbGVuZ3RoKS5yZWxl
YXNlUmVmKCkpKQoreworfQorCitXZWJTdHJpbmc6OldlYlN0cmluZyhjb25zdCB1bnNpZ25lZCBz
aG9ydCogdXRmMTYsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1faW1wbChzdGF0aWNfY2FzdDxX
ZWJTdHJpbmdJbXBsKj4oV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGUodXRmMTYsIGxlbmd0aCkucmVs
ZWFzZVJlZigpKSkKK3sKK30KKworV2ViU3RyaW5nOjpXZWJTdHJpbmcoV2ViU3RyaW5nSW1wbCog
aW1wbCkKKyAgICA6IG1faW1wbChpbXBsKQoreworICAgIGlmIChtX2ltcGwpCisgICAgICAgIG1f
aW1wbC0+cmVmKCk7Cit9CisKK1dlYlN0cmluZzo6fldlYlN0cmluZygpCit7CisgICAgaWYgKG1f
aW1wbCkKKyAgICAgICAgbV9pbXBsLT5kZXJlZigpOworfQorCitXZWJTdHJpbmc6OldlYlN0cmlu
Zyhjb25zdCBXZWJTdHJpbmcmIHN0cikKKyAgICA6IG1faW1wbChzdHIubV9pbXBsKQoreworICAg
IGlmIChtX2ltcGwpCisgICAgICAgIG1faW1wbC0+cmVmKCk7Cit9CisKK1dlYlN0cmluZyBXZWJT
dHJpbmc6OmZyb21VdGY4KGNvbnN0IGNoYXIqIHV0ZjgpCit7CisgICAgcmV0dXJuIFN0cmluZzo6
ZnJvbVVURjgodXRmOCk7Cit9CisKK1dlYlN0cmluZyYgV2ViU3RyaW5nOjpvcGVyYXRvcj0oY29u
c3QgV2ViU3RyaW5nJiBzdHIpCit7CisgICAgaWYgKHN0ci5tX2ltcGwpCisgICAgICAgIHN0ci5t
X2ltcGwtPnJlZigpOworICAgIGlmIChtX2ltcGwpCisgICAgICAgIG1faW1wbC0+ZGVyZWYoKTsK
KyAgICBtX2ltcGwgPSBzdHIubV9pbXBsOworICAgIHJldHVybiAqdGhpczsKK30KKworc3RkOjpz
dHJpbmcgV2ViU3RyaW5nOjp1dGY4KCkgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyB1dGY4Owor
ICAgIGlmICghbV9pbXBsKQorICAgICAgICByZXR1cm4gdXRmODsKKworICAgIENTdHJpbmcgY3N0
ciA9IFN0cmluZyhtX2ltcGwpLnV0ZjgoKTsKKyAgICB1dGY4LmFzc2lnbihjc3RyLmRhdGEoKSwg
Y3N0ci5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHV0Zjg7Cit9CisKK2NvbnN0IHVuc2lnbmVkIHNo
b3J0KiBXZWJTdHJpbmc6OmNoYXJhY3RlcnMoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwg
PyBtX2ltcGwtPmNoYXJhY3RlcnMoKSA6IDA7Cit9CisKK3Vuc2lnbmVkIFdlYlN0cmluZzo6bGVu
Z3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5sZW5ndGgoKSA6IDA7
Cit9CisKK2Jvb2wgV2ViU3RyaW5nOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1f
aW1wbCB8fCAhbV9pbXBsLT5sZW5ndGgoKTsKK30KKworYm9vbCBXZWJTdHJpbmc6OmVxdWFsKGNv
bnN0IGNoYXIqIHV0ZjgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6ZXF1YWwobV9pbXBsLCB1
dGY4KTsKK30KKworYm9vbCBXZWJTdHJpbmc6OmVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIq
IHV0ZjgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdURjo6ZXF1YWxJZ25vcmluZ0Nhc2UobV9pbXBs
LCB1dGY4KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBCbGFj
a0JlcnJ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlN0cmlu
Zy5oIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mZTI4YmRlZjY5MDRmMDYzOGY0ZDE2NDRlMzhiMTgzNjgxMTMzNDVhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJTdHJpbmcuaApAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpZm5kZWYgV2ViU3RyaW5nX2gKKyNkZWZpbmUgV2ViU3RyaW5nX2gKKworI2luY2x1ZGUg
IkJsYWNrQmVycnlHbG9iYWwuaCIKKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBCbGFj
a0JlcnJ5IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJTdHJpbmdJbXBsOworCitj
bGFzcyBCTEFDS0JFUlJZX0VYUE9SVCBXZWJTdHJpbmcgeworcHVibGljOgorICAgIFdlYlN0cmlu
ZygpIDogbV9pbXBsKDApIHsgfQorICAgIH5XZWJTdHJpbmcoKTsKKyAgICBXZWJTdHJpbmcoY29u
c3QgY2hhciogbGF0aW4xKTsKKyAgICBXZWJTdHJpbmcoY29uc3QgY2hhciogbGF0aW4xLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIFdlYlN0cmluZyhjb25zdCB1bnNpZ25lZCBzaG9ydCogdXRmMTYs
IHVuc2lnbmVkIGxlbmd0aCk7CisgICAgV2ViU3RyaW5nKFdlYlN0cmluZ0ltcGwqKTsKKyAgICBX
ZWJTdHJpbmcoY29uc3QgV2ViU3RyaW5nJik7CisgICAgV2ViU3RyaW5nJiBvcGVyYXRvcj0oY29u
c3QgV2ViU3RyaW5nJik7CisgICAgc3RkOjpzdHJpbmcgdXRmOCgpIGNvbnN0OworICAgIHN0YXRp
YyBXZWJTdHJpbmcgZnJvbVV0ZjgoY29uc3QgY2hhciogdXRmOCk7CisgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQqIGNoYXJhY3RlcnMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dDsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICBib29sIGVxdWFsKGNvbnN0IGNoYXIq
IHV0ZjgpIGNvbnN0OworICAgIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogdXRm
OCkgY29uc3Q7CisgICAgV2ViU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bDsgfQorcHJpdmF0ZToKKyAgICBXZWJTdHJpbmdJbXBsKiBtX2ltcGw7Cit9OworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBCbGFja0JlcnJ5CisKKyNlbmRpZiAvLyBXZWJT
dHJpbmdfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>