<?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>42716</bug_id>
          
          <creation_ts>2010-07-20 16:37:36 -0700</creation_ts>
          <short_desc>Implement WebArchive for Android</short_desc>
          <delta_ts>2012-02-13 14:45:01 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Android</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Elliott Slaughter">eds</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>andreip</cc>
    
    <cc>beidson</cc>
    
    <cc>benm</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eds</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin</cc>
    
    <cc>steveblock</cc>
    
    <cc>swang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>254066</commentid>
    <comment_count>0</comment_count>
    <who name="Elliott Slaughter">eds</who>
    <bug_when>2010-07-20 16:37:36 -0700</bug_when>
    <thetext>Submitting patch upstream for Android support of web archives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254081</commentid>
    <comment_count>1</comment_count>
      <attachid>62135</attachid>
    <who name="Elliott Slaughter">eds</who>
    <bug_when>2010-07-20 17:37:05 -0700</bug_when>
    <thetext>Created attachment 62135
Patch for Android web archive support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254185</commentid>
    <comment_count>2</comment_count>
      <attachid>62135</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-07-21 03:01:52 -0700</bug_when>
    <thetext>Comment on attachment 62135
Patch for Android web archive support.

Thanks for the patch Elliott. I&apos;m not familiar with WebArchive, but some general comments ...

The bug title should be written from the perspective of WebKit, not Android, eg &apos;Implement WebArchive for Android&apos;.

You should set r? on your patch if you wish it to be reviewed. This will also trigger the EWS bots to check style and try to build it.

ChangeLog
 +  	https://bugs.webkit.org/show_bug.cgi?id=42716
Indentation. Should always be spaces, not tabs.

WebCore/ChangeLog:6
 +  	https://bugs.webkit.org/show_bug.cgi?id=42716
Indentation

WebCore/ChangeLog:13
 +          Tests are not included as this feature is Android-specific.
The feature is not Android specific. You can just say something like &apos;platform implementation, no new functionality, existing tests suffice&apos;

WebCore/config.h:103
 +  #define ENABLE_ARCHIVE 1
ENABLE_ARCHIVE is an Android-specific flag added to Android WebKit to allow WebArchive to be disabled. It does not exist upstream (other than an erroneous mention here it seems), so we shouldn&apos;t use it. If you&apos;d like to add such a flag to WebKit, that should be in a separate patch.

WebCore/loader/archive/android/WebArchiveAndroid.cpp:54
 +          Vector&lt;PassRefPtr&lt;Archive&gt; &gt;&amp; subframeArchives)
WebKit style is to indent 4 spaces. Did you run check-webkit-style? See also http://webkit.org/coding/coding-style.html.

WebCore/loader/archive/android/WebArchiveAndroid.cpp:84
 +           subresourcesIterator++) {
WebKit has no maximum line length, so this would probably stay on one line.

WebCore/loader/archive/android/WebArchiveAndroid.cpp:86
 +      }
No braces on one-line control statements.

WebCore/loader/archive/android/WebArchiveAndroid.cpp:118
 +          LOGD(&quot;loadWebArchive: Failed to load field.&quot;);
LOGD is an Android function, so probably shouldn&apos;t be used from WebCore.

WebCore/loader/archive/android/WebArchiveAndroid.cpp:273
 +      /* When an archive cannot be loaded, we return an empty archive instead. */
Use C++ style comments

WebCore/loader/archive/android/WebArchiveAndroid.h:55
 +  #endif // WEBARCHIVEANDROID_H
Incorrect label</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254506</commentid>
    <comment_count>3</comment_count>
      <attachid>62227</attachid>
    <who name="Elliott Slaughter">eds</who>
    <bug_when>2010-07-21 14:01:17 -0700</bug_when>
    <thetext>Created attachment 62227
Android WebArchive patch v2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254709</commentid>
    <comment_count>4</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-07-22 03:12:58 -0700</bug_when>
    <thetext>Adding beidson@apple.com to CC list, as he seems to be the owner of the archive code. Brady, would you mind taking a look please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256949</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-07-27 17:19:35 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=62227) [details]
&gt; Android WebArchive patch v2.

General comments:

1. Don&apos;t use PassRefPtr as a local variable. It should only be a parameter or a return value.

2. Don&apos;t include parameter names in declarations when they add no information (like these places &quot;create(Frame* frame);&quot; and &quot;create(SharedBuffer* buffer);&quot; and &quot;saveWebArchive(xmlTextWriterPtr writer);&quot;).

3. WebArchiveAndroid.h looks like it is missing includes for several things that it uses like PassRefPtr and vector&lt;&gt;

4. Use c++ style casting &quot;(const char*)xmlNodeGetContent(fieldNode-&gt;xmlChildrenNode)&quot;

5. Why does &quot;saveArchive(xmlTextWriterPtr writer, PassRefPtr&lt;Archive&gt; archive)&quot; take a PassRefPtr when it doesn&apos;t appear to take ownership of the pointer?

6. In general, wrapped lines should align with the open (. (I think this is just like Google&apos;s C++ standard.), so this

     static PassRefPtr&lt;WebArchiveAndroid&gt; create(PassRefPtr&lt;ArchiveResource&gt; mainResource,
         Vector&lt;PassRefPtr&lt;ArchiveResource&gt; &gt;&amp; subresources,
         Vector&lt;PassRefPtr&lt;Archive&gt; &gt;&amp; subframeArchives);

should be

static PassRefPtr&lt;WebArchiveAndroid&gt; create(PassRefPtr&lt;ArchiveResource&gt; mainResource,
                                            Vector&lt;PassRefPtr&lt;ArchiveResource&gt; &gt;&amp; subresources,
                                            Vector&lt;PassRefPtr&lt;Archive&gt; &gt;&amp; subframeArchives);
(which is aligned when using a fixed width font).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257978</commentid>
    <comment_count>6</comment_count>
      <attachid>63010</attachid>
    <who name="Elliott Slaughter">eds</who>
    <bug_when>2010-07-29 16:52:30 -0700</bug_when>
    <thetext>Created attachment 63010
Android WebArchive patch v3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272604</commentid>
    <comment_count>7</comment_count>
      <attachid>63010</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-31 20:13:31 -0700</bug_when>
    <thetext>Comment on attachment 63010
Android WebArchive patch v3.

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

&gt; WebCore/loader/archive/ArchiveFactory.cpp:68
&gt; +#elif PLATFORM(ANDROID)
&gt; +    mimeTypes.set(&quot;application/x-webarchive-xml&quot;, archiveFactoryCreate&lt;WebArchiveAndroid&gt;);
Why the wacky MIME type?  Something more sensical would be application/x-webarchive+xml.  Even more sensical would be to use the existing webarchive MIME type.

&gt; WebCore/loader/archive/android/WebArchiveAndroid.cpp:26
&gt; +#define LOG_TAG &quot;webarchive&quot;
What is this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272884</commentid>
    <comment_count>8</comment_count>
    <who name="Elliott Slaughter">eds</who>
    <bug_when>2010-09-01 10:36:07 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 63010 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=63010&amp;action=prettypatch
&gt; 
&gt; &gt; WebCore/loader/archive/ArchiveFactory.cpp:68
&gt; &gt; +#elif PLATFORM(ANDROID)
&gt; &gt; +    mimeTypes.set(&quot;application/x-webarchive-xml&quot;, archiveFactoryCreate&lt;WebArchiveAndroid&gt;);
&gt; Why the wacky MIME type?  Something more sensical would be application/x-webarchive+xml.  Even more sensical would be to use the existing webarchive MIME type.

We chose a different mime type because the format we used doesn&apos;t make use of the xml plist format, and uses custom xml instead. If you still think that using the same mimetype is warranted (even though the formats really aren&apos;t compatible), then I can make that change as suggested.

&gt; &gt; WebCore/loader/archive/android/WebArchiveAndroid.cpp:26
&gt; &gt; +#define LOG_TAG &quot;webarchive&quot;
&gt; What is this?

That&apos;s Android&apos;s logging, will remove.

Thanks for the comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298579</commentid>
    <comment_count>9</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-10-24 08:27:34 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 63010 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=63010&amp;action=prettypatch
&gt; &gt; 
&gt; &gt; &gt; WebCore/loader/archive/ArchiveFactory.cpp:68
&gt; &gt; &gt; +#elif PLATFORM(ANDROID)
&gt; &gt; &gt; +    mimeTypes.set(&quot;application/x-webarchive-xml&quot;, archiveFactoryCreate&lt;WebArchiveAndroid&gt;);
&gt; &gt; Why the wacky MIME type?  Something more sensical would be application/x-webarchive+xml.  Even more sensical would be to use the existing webarchive MIME type.
&gt; 
&gt; We chose a different mime type because the format we used doesn&apos;t make use of the xml plist format, and uses custom xml instead. If you still think that using the same mimetype is warranted (even though the formats really aren&apos;t compatible), then I can make that change as suggested.

Did you consider using the MHTML format instead?  Creating a variant of Apple&apos;s WebArchive format is a rather interesting choice.

I suppose this format has been shipping for a while in Android?  Is it used for anything beyond debugging?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320591</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-12-10 22:15:35 -0800</bug_when>
    <thetext>Wow, I&apos;m surprised Android would want to add a new format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333304</commentid>
    <comment_count>11</comment_count>
      <attachid>63010</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-12 14:28:53 -0800</bug_when>
    <thetext>Comment on attachment 63010
Android WebArchive patch v3.

I&apos;m marking this r- for now.  I&apos;m not necessarily opposed to the patch, I&apos;d like to to understand more of the why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555628</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-02-13 14:45:01 -0800</bug_when>
    <thetext>Android Chromium is the new future.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62135</attachid>
            <date>2010-07-20 17:37:05 -0700</date>
            <delta_ts>2010-07-21 14:01:17 -0700</delta_ts>
            <desc>Patch for Android web archive support.</desc>
            <filename>android-browser-web-archive-support.patch</filename>
            <type>text/plain</type>
            <size>23435</size>
            <attacher name="Elliott Slaughter">eds</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDYzNzg1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDct
MjAgIEVsbGlvdHQgU2xhdWdodGVyICA8ZWRzQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFuZHJvaWQgc3VwcG9ydCBmb3Ig
d2ViYXJjaGl2ZS4KKwlodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI3
MTYKKworICAgICAgICAqIEFuZHJvaWQubWs6CisKIDIwMTAtMDctMjAgIFJhZmFlbCBBbnRvZ25v
bGxpICA8YW50b2dub2xsaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
bnRvbmlvIEdvbWVzLgpJbmRleDogQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBBbmRyb2lkLm1r
CShyZXZpc2lvbiA2MzY4NykKKysrIEFuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2
ICsxMDEsOCBAQCBMT0NBTF9DX0lOQ0xVREVTIDo9ICQoTE9DQUxfQ19JTkNMVURFUykgCiAJJChM
T0NBTF9QQVRIKS9XZWJDb3JlL2luc3BlY3RvciBcCiAJJChMT0NBTF9QQVRIKS9XZWJDb3JlL2xv
YWRlciBcCiAJJChMT0NBTF9QQVRIKS9XZWJDb3JlL2xvYWRlci9hcHBjYWNoZSBcCisJJChMT0NB
TF9QQVRIKS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlIFwKKwkkKExPQ0FMX1BBVEgpL1dlYkNvcmUv
bG9hZGVyL2FyY2hpdmUvYW5kcm9pZCBcCiAJJChMT0NBTF9QQVRIKS9XZWJDb3JlL2xvYWRlci9p
Y29uIFwKIAkkKExPQ0FMX1BBVEgpL1dlYkNvcmUvbm90aWZpY2F0aW9ucyBcCiAJJChMT0NBTF9Q
QVRIKS9XZWJDb3JlL3BhZ2UgXApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzNzg1KQorKysgV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNy0yMCAgRWxsaW90dCBT
bGF1Z2h0ZXIgIDxlZHNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgQW5kcm9pZCBzdXBwb3J0IGZvciB3ZWJhcmNoaXZlLgor
CWh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjcxNgorCisJQWRkZWQg
V2ViQXJjaGl2ZUFuZHJvaWQgY2xhc3Mgd2hpY2ggZXh0ZW5kcyBBcmNoaXZlIHdpdGggdGhlCisJ
QW5kcm9pZCB3ZWJhcmNoaXZlIGZvcm1hdC4gV2ViQWNoaXZlQW5kcm9pZCBpbXBsZW1lbnRzIGEg
c2ltcGxlCisJeG1sIGFuZCBiYXNlNjQgYmFzZWQgZmlsZSBmb3JtYXQgZm9yIGR1bXBpbmcgYW5k
IHJlc3RvcmluZworCWFyY2hpdmUgZGF0YS4KKworICAgICAgICBUZXN0cyBhcmUgbm90IGluY2x1
ZGVkIGFzIHRoaXMgZmVhdHVyZSBpcyBBbmRyb2lkLXNwZWNpZmljLgorCisgICAgICAgICogQW5k
cm9pZC5tazoKKyAgICAgICAgKiBjb25maWcuaDoKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9B
cmNoaXZlRmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphcmNoaXZlTUlNRVR5cGVzKToK
KyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9hbmRyb2lkOiBBZGRlZC4KKyAgICAgICAgKiBsb2Fk
ZXIvYXJjaGl2ZS9hbmRyb2lkL1dlYkFyY2hpdmVBbmRyb2lkLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJBcmNoaXZlQW5kcm9pZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkFyY2hpdmVBbmRyb2lkOjpXZWJBcmNoaXZlQW5kcm9pZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpsb2FkQXJjaGl2ZVJlc291cmNlRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEFyY2hp
dmVSZXNvdXJjZUZpZWxkQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRBcmNoaXZlUmVz
b3VyY2VGaWVsZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpsb2FkQXJjaGl2ZVJlc291cmNl
RmllbGRVUkwpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEFyY2hpdmVSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpsb2FkQXJjaGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBcmNo
aXZlRm9yRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6c2F2ZUFyY2hpdmVSZXNvdXJjZUZpZWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OnNhdmVBcmNoaXZlUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6c2F2ZUFyY2hpdmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQXJjaGl2ZUFuZHJvaWQ6
OnNhdmVXZWJBcmNoaXZlKToKKyAgICAgICAgKiBsb2FkZXIvYXJjaGl2ZS9hbmRyb2lkL1dlYkFy
Y2hpdmVBbmRyb2lkLmg6IEFkZGVkLgorCiAyMDEwLTA3LTIwICBBZGFtIEJhcnRoICA8YWJhcnRo
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KSW5kZXg6IFdlYkNvcmUvQW5kcm9p
ZC5tawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9uIDYzNjg3KQor
KysgV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC05NDksMyArOTQ5LDEwIEBA
IExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXhtbC9YTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgXAogCXhtbC9YTUxIdHRwUmVxdWVzdFVwbG9h
ZC5jcHAgXAogCXhtbC9YTUxTZXJpYWxpemVyLmNwcAorCisjIEZvciBBcmNoaXZlCitMT0NBTF9T
UkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKKwlsb2FkZXIvYXJjaGl2ZS9BcmNoaXZl
RmFjdG9yeS5jcHAgXAorCWxvYWRlci9hcmNoaXZlL0FyY2hpdmVSZXNvdXJjZS5jcHAgXAorCWxv
YWRlci9hcmNoaXZlL0FyY2hpdmVSZXNvdXJjZUNvbGxlY3Rpb24uY3BwIFwKKwlsb2FkZXIvYXJj
aGl2ZS9hbmRyb2lkL1dlYkFyY2hpdmVBbmRyb2lkLmNwcApJbmRleDogV2ViQ29yZS9jb25maWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2NvbmZpZy5oCShyZXZpc2lvbiA2MzY4NykKKysrIFdl
YkNvcmUvY29uZmlnLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDggQEAKICNkZWZpbmUg
RU5BQkxFX1hIVE1MTVAgMAogI2RlZmluZSBFTkFCTEVfWFBBVEggMAogI2RlZmluZSBFTkFCTEVf
WFNMVCAwCi0jZGVmaW5lIEVOQUJMRV9BUkNISVZFIDAKKyN1bmRlZiBFTkFCTEVfQVJDSElWRSAv
LyBFbmFibGVkIGJ5IGRlZmF1bHQgaW4gUGxhdGZvcm0uaAorI2RlZmluZSBFTkFCTEVfQVJDSElW
RSAxCiAjZGVmaW5lIEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMgMQogI3VuZGVmIEVO
QUJMRV9HRU9MT0NBVElPTiAgLy8gRGlzYWJsZWQgYnkgZGVmYXVsdCBpbiBQbGF0Zm9ybS5oCiAj
ZGVmaW5lIEVOQUJMRV9HRU9MT0NBVElPTiAxCkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcmNoaXZl
L0FyY2hpdmVGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcmNoaXZl
L0FyY2hpdmVGYWN0b3J5LmNwcAkocmV2aXNpb24gNjM2ODcpCisrKyBXZWJDb3JlL2xvYWRlci9h
cmNoaXZlL0FyY2hpdmVGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBA
QAogCiAjaWYgUExBVEZPUk0oQ0YpICYmICFQTEFURk9STShRVCkKICNpbmNsdWRlICJMZWdhY3lX
ZWJBcmNoaXZlLmgiCisjZWxpZiBQTEFURk9STShBTkRST0lEKQorI2luY2x1ZGUgIldlYkFyY2hp
dmVBbmRyb2lkLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02Miw2
ICs2NCw4IEBAIHN0YXRpYyBBcmNoaXZlTUlNRVR5cGVzTWFwJiBhcmNoaXZlTUlNRVQKIAogI2lm
IFBMQVRGT1JNKENGKSAmJiAhUExBVEZPUk0oUVQpCiAgICAgbWltZVR5cGVzLnNldCgiYXBwbGlj
YXRpb24veC13ZWJhcmNoaXZlIiwgYXJjaGl2ZUZhY3RvcnlDcmVhdGU8TGVnYWN5V2ViQXJjaGl2
ZT4pOworI2VsaWYgUExBVEZPUk0oQU5EUk9JRCkKKyAgICBtaW1lVHlwZXMuc2V0KCJhcHBsaWNh
dGlvbi94LXdlYmFyY2hpdmUteG1sIiwgYXJjaGl2ZUZhY3RvcnlDcmVhdGU8V2ViQXJjaGl2ZUFu
ZHJvaWQ+KTsKICNlbmRpZgogCiAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwpJbmRleDogV2ViQ29y
ZS9sb2FkZXIvYXJjaGl2ZS9hbmRyb2lkL1dlYkFyY2hpdmVBbmRyb2lkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9hcmNoaXZlL2FuZHJvaWQvV2ViQXJjaGl2ZUFuZHJvaWQuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9hbmRyb2lkL1dlYkFyY2hp
dmVBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZp
bmUgTE9HX1RBRyAid2ViYXJjaGl2ZSIKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYkFyY2hpdmVBbmRyb2lkLmgiCisKKyNpbmNsdWRlICJCYXNlNjQuaCIKKyNpbmNsdWRlIDxs
aWJ4bWwvZW5jb2RpbmcuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisjaW5jbHVkZSA8
bGlieG1sL3RyZWUuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1sc3RyaW5nLmg+CisjaW5jbHVkZSA8
bGlieG1sL3htbHdyaXRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgeG1sQ2hhciogY29uc3QgYXJjaGl2ZVRh
ZyA9IEJBRF9DQVNUICJBcmNoaXZlIjsKK3N0YXRpYyBjb25zdCB4bWxDaGFyKiBjb25zdCBhcmNo
aXZlUmVzb3VyY2VUYWcgPSBCQURfQ0FTVCAiQXJjaGl2ZVJlc291cmNlIjsKK3N0YXRpYyBjb25z
dCB4bWxDaGFyKiBjb25zdCBtYWluUmVzb3VyY2VUYWcgPSBCQURfQ0FTVCAibWFpblJlc291cmNl
IjsKK3N0YXRpYyBjb25zdCB4bWxDaGFyKiBjb25zdCBzdWJyZXNvdXJjZXNUYWcgPSBCQURfQ0FT
VCAic3VicmVzb3VyY2VzIjsKK3N0YXRpYyBjb25zdCB4bWxDaGFyKiBjb25zdCBzdWJmcmFtZXNU
YWcgPSBCQURfQ0FTVCAic3ViZnJhbWVzIjsKK3N0YXRpYyBjb25zdCB4bWxDaGFyKiBjb25zdCB1
cmxGaWVsZFRhZyA9IEJBRF9DQVNUICJ1cmwiOworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0
IG1pbWVGaWVsZFRhZyA9IEJBRF9DQVNUICJtaW1lVHlwZSI7CitzdGF0aWMgY29uc3QgeG1sQ2hh
ciogY29uc3QgZW5jb2RpbmdGaWVsZFRhZyA9IEJBRF9DQVNUICJ0ZXh0RW5jb2RpbmciOworc3Rh
dGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IGZyYW1lRmllbGRUYWcgPSBCQURfQ0FTVCAiZnJhbWVO
YW1lIjsKK3N0YXRpYyBjb25zdCB4bWxDaGFyKiBjb25zdCBkYXRhRmllbGRUYWcgPSBCQURfQ0FT
VCAiZGF0YSI7CisKK1Bhc3NSZWZQdHI8V2ViQXJjaGl2ZUFuZHJvaWQ+IFdlYkFyY2hpdmVBbmRy
b2lkOjpjcmVhdGUoUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1haW5SZXNvdXJjZSwKKyAg
ICAgICAgVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+JiBzdWJyZXNvdXJjZXMs
CisgICAgICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmU+ID4mIHN1YmZyYW1lQXJjaGl2ZXMp
Cit7CisgICAgaWYgKG1haW5SZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJBcmNoaXZlQW5kcm9pZChtYWluUmVzb3VyY2UsIHN1YnJlc291cmNlcywgc3ViZnJhbWVBcmNo
aXZlcykpOworICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPFdlYkFyY2hpdmVBbmRyb2lk
PiBXZWJBcmNoaXZlQW5kcm9pZDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBQYXNzUmVm
UHRyPEFyY2hpdmVSZXNvdXJjZT4gbWFpblJlc291cmNlID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1
bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2UoKTsKKyAgICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNo
aXZlUmVzb3VyY2U+ID4gc3VicmVzb3VyY2VzOworICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hp
dmU+ID4gc3ViZnJhbWVzOworICAgIGludCBjaGlsZHJlbiA9IGZyYW1lLT50cmVlKCktPmNoaWxk
Q291bnQoKTsKKworICAgIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+Z2V0U3Vi
cmVzb3VyY2VzKHN1YnJlc291cmNlcyk7CisKKyAgICBmb3IgKGludCBjaGlsZCA9IDA7IGNoaWxk
IDwgY2hpbGRyZW47IGNoaWxkKyspCisgICAgICAgIHN1YmZyYW1lcy5hcHBlbmQoY3JlYXRlKGZy
YW1lLT50cmVlKCktPmNoaWxkKGNoaWxkKSkpOworCisgICAgcmV0dXJuIGNyZWF0ZShtYWluUmVz
b3VyY2UsIHN1YnJlc291cmNlcywgc3ViZnJhbWVzKTsKK30KKworV2ViQXJjaGl2ZUFuZHJvaWQ6
OldlYkFyY2hpdmVBbmRyb2lkKFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBtYWluUmVzb3Vy
Y2UsCisgICAgICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gPiYgc3VicmVz
b3VyY2VzLAorICAgICAgICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlPiA+JiBzdWJmcmFtZUFy
Y2hpdmVzKQoreworICAgIHNldE1haW5SZXNvdXJjZShtYWluUmVzb3VyY2UpOworCisgICAgZm9y
IChWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+ID46Oml0ZXJhdG9yIHN1YnJlc291
cmNlc0l0ZXJhdG9yID0gc3VicmVzb3VyY2VzLmJlZ2luKCk7CisgICAgICAgICBzdWJyZXNvdXJj
ZXNJdGVyYXRvciAhPSBzdWJyZXNvdXJjZXMuZW5kKCk7CisgICAgICAgICBzdWJyZXNvdXJjZXNJ
dGVyYXRvcisrKSB7CisgICAgICAgIGFkZFN1YnJlc291cmNlKCpzdWJyZXNvdXJjZXNJdGVyYXRv
cik7CisgICAgfQorCisgICAgZm9yIChWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlPiA+OjppdGVy
YXRvciBzdWJmcmFtZXNJdGVyYXRvciA9IHN1YmZyYW1lQXJjaGl2ZXMuYmVnaW4oKTsKKyAgICAg
ICAgIHN1YmZyYW1lc0l0ZXJhdG9yICE9IHN1YmZyYW1lQXJjaGl2ZXMuZW5kKCk7CisgICAgICAg
ICBzdWJmcmFtZXNJdGVyYXRvcisrKSB7CisgICAgICAgIGFkZFN1YmZyYW1lQXJjaGl2ZSgqc3Vi
ZnJhbWVzSXRlcmF0b3IpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgbG9hZEFyY2hpdmVSZXNv
dXJjZUZpZWxkKHhtbE5vZGVQdHIgcmVzb3VyY2VOb2RlLCBjb25zdCB4bWxDaGFyKiBmaWVsZE5h
bWUsIFZlY3RvcjxjaGFyPiogb3V0cHV0RGF0YSkKK3sKKyAgICBpZiAoIW91dHB1dERhdGEpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG91dHB1dERhdGEtPmNsZWFyKCk7CisKKyAgICBj
b25zdCBjaGFyKiBiYXNlNjREYXRhID0gMDsKKworICAgIGZvciAoeG1sTm9kZVB0ciBmaWVsZE5v
ZGUgPSByZXNvdXJjZU5vZGUtPnhtbENoaWxkcmVuTm9kZTsKKyAgICAgICAgIGZpZWxkTm9kZTsK
KyAgICAgICAgIGZpZWxkTm9kZSA9IGZpZWxkTm9kZS0+bmV4dCkgeworICAgICAgICBpZiAoeG1s
U3RyRXF1YWwoZmllbGROb2RlLT5uYW1lLCBmaWVsZE5hbWUpKSB7CisgICAgICAgICAgICBiYXNl
NjREYXRhID0gKGNvbnN0IGNoYXIqKXhtbE5vZGVHZXRDb250ZW50KGZpZWxkTm9kZS0+eG1sQ2hp
bGRyZW5Ob2RlKTsKKyAgICAgICAgICAgIGlmICghYmFzZTY0RGF0YSkgeworICAgICAgICAgICAg
ICAgIC8qIEVtcHR5IGZpZWxkcyBzZWVtIHRvIGJyZWFrIGlmIHRoZXkgYXJlbid0IG51bGwgdGVy
bWluYXRlZC4gKi8KKyAgICAgICAgICAgICAgICBvdXRwdXREYXRhLT5hcHBlbmQoJ1wwJyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWJhc2U2NERhdGEpIHsKKyAgICAgICAg
TE9HRCgibG9hZFdlYkFyY2hpdmU6IEZhaWxlZCB0byBsb2FkIGZpZWxkLiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgaW50IGJhc2U2NFNpemUgPSB4bWxTdHJs
ZW4oQkFEX0NBU1QgYmFzZTY0RGF0YSk7CisKKyAgICBjb25zdCBpbnQgcmVzdWx0ID0gYmFzZTY0
RGVjb2RlKGJhc2U2NERhdGEsIGJhc2U2NFNpemUsICpvdXRwdXREYXRhKTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgICBMT0dEKCJsb2FkV2ViQXJjaGl2ZTogRmFpbGVkIHRvIGRlY29kZSBm
aWVsZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGxvYWRBcmNoaXZlUmVzb3Vy
Y2VGaWVsZEJ1ZmZlcih4bWxOb2RlUHRyIHJlc291cmNlTm9kZSwgY29uc3QgeG1sQ2hhciogZmll
bGROYW1lKQoreworICAgIFZlY3RvcjxjaGFyPiBmaWVsZERhdGE7CisKKyAgICBpZiAobG9hZEFy
Y2hpdmVSZXNvdXJjZUZpZWxkKHJlc291cmNlTm9kZSwgZmllbGROYW1lLCAmZmllbGREYXRhKSkK
KyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZpZWxkRGF0YS5kYXRhKCksIGZp
ZWxkRGF0YS5zaXplKCkpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTdHJpbmcgbG9h
ZEFyY2hpdmVSZXNvdXJjZUZpZWxkU3RyaW5nKHhtbE5vZGVQdHIgcmVzb3VyY2VOb2RlLCBjb25z
dCB4bWxDaGFyKiBmaWVsZE5hbWUpCit7CisgICAgVmVjdG9yPGNoYXI+IGZpZWxkRGF0YTsKKwor
ICAgIGlmIChsb2FkQXJjaGl2ZVJlc291cmNlRmllbGQocmVzb3VyY2VOb2RlLCBmaWVsZE5hbWUs
ICZmaWVsZERhdGEpKQorICAgICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChmaWVsZERhdGEu
ZGF0YSgpLCBmaWVsZERhdGEuc2l6ZSgpKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
c3RhdGljIEtVUkwgbG9hZEFyY2hpdmVSZXNvdXJjZUZpZWxkVVJMKHhtbE5vZGVQdHIgcmVzb3Vy
Y2VOb2RlLCBjb25zdCB4bWxDaGFyKiBmaWVsZE5hbWUpCit7CisgICAgVmVjdG9yPGNoYXI+IGZp
ZWxkRGF0YTsKKworICAgIGlmIChsb2FkQXJjaGl2ZVJlc291cmNlRmllbGQocmVzb3VyY2VOb2Rl
LCBmaWVsZE5hbWUsICZmaWVsZERhdGEpKQorICAgICAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxT
dHJpbmcsIFN0cmluZzo6ZnJvbVVURjgoZmllbGREYXRhLmRhdGEoKSwgZmllbGREYXRhLnNpemUo
KSkpOworCisgICAgcmV0dXJuIEtVUkwoKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8QXJjaGl2
ZVJlc291cmNlPiBsb2FkQXJjaGl2ZVJlc291cmNlKHhtbE5vZGVQdHIgcmVzb3VyY2VOb2RlKQor
eworICAgIGlmICgheG1sU3RyRXF1YWwocmVzb3VyY2VOb2RlLT5uYW1lLCBhcmNoaXZlUmVzb3Vy
Y2VUYWcpKSB7CisgICAgICAgIExPR0QoImxvYWRXZWJBcmNoaXZlOiBNYWxmb3JtZWQgcmVzb3Vy
Y2UuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEtVUkwgdXJsID0gbG9hZEFy
Y2hpdmVSZXNvdXJjZUZpZWxkVVJMKHJlc291cmNlTm9kZSwgdXJsRmllbGRUYWcpOworICAgIGlm
ICh1cmwuaXNOdWxsKCkpIHsKKyAgICAgICAgTE9HRCgibG9hZFdlYkFyY2hpdmU6IEZhaWxlZCB0
byBsb2FkIHJlc291cmNlLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBTdHJp
bmcgbWltZVR5cGUgPSBsb2FkQXJjaGl2ZVJlc291cmNlRmllbGRTdHJpbmcocmVzb3VyY2VOb2Rl
LCBtaW1lRmllbGRUYWcpOworICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkgeworICAgICAgICBM
T0dEKCJsb2FkV2ViQXJjaGl2ZTogRmFpbGVkIHRvIGxvYWQgcmVzb3VyY2UuIik7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIFN0cmluZyB0ZXh0RW5jb2RpbmcgPSBsb2FkQXJjaGl2
ZVJlc291cmNlRmllbGRTdHJpbmcocmVzb3VyY2VOb2RlLCBlbmNvZGluZ0ZpZWxkVGFnKTsKKyAg
ICBpZiAodGV4dEVuY29kaW5nLmlzTnVsbCgpKSB7CisgICAgICAgIExPR0QoImxvYWRXZWJBcmNo
aXZlOiBGYWlsZWQgdG8gbG9hZCByZXNvdXJjZS4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgU3RyaW5nIGZyYW1lTmFtZSA9IGxvYWRBcmNoaXZlUmVzb3VyY2VGaWVsZFN0cmlu
ZyhyZXNvdXJjZU5vZGUsIGZyYW1lRmllbGRUYWcpOworICAgIGlmIChmcmFtZU5hbWUuaXNOdWxs
KCkpIHsKKyAgICAgICAgTE9HRCgibG9hZFdlYkFyY2hpdmU6IEZhaWxlZCB0byBsb2FkIHJlc291
cmNlLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSA9IGxvYWRBcmNoaXZlUmVzb3VyY2VGaWVsZEJ1ZmZlcihyZXNvdXJjZU5v
ZGUsIGRhdGFGaWVsZFRhZyk7CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIExPR0QoImxvYWRX
ZWJBcmNoaXZlOiBGYWlsZWQgdG8gbG9hZCByZXNvdXJjZS4iKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgcmV0dXJuIEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKGRhdGEsIHVybCwg
bWltZVR5cGUsIHRleHRFbmNvZGluZywgZnJhbWVOYW1lKTsKK30KKworc3RhdGljIFBhc3NSZWZQ
dHI8V2ViQXJjaGl2ZUFuZHJvaWQ+IGxvYWRBcmNoaXZlKHhtbE5vZGVQdHIgYXJjaGl2ZU5vZGUp
Cit7CisgICAgeG1sTm9kZVB0ciByZXNvdXJjZU5vZGUgPSAwOworCisgICAgUGFzc1JlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+IG1haW5SZXNvdXJjZTsKKyAgICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNo
aXZlUmVzb3VyY2U+ID4gc3VicmVzb3VyY2VzOworICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hp
dmU+ID4gc3ViZnJhbWVzOworCisgICAgaWYgKCF4bWxTdHJFcXVhbChhcmNoaXZlTm9kZS0+bmFt
ZSwgYXJjaGl2ZVRhZykpIHsKKyAgICAgICAgTE9HRCgibG9hZFdlYkFyY2hpdmU6IE1hbGZvcm1l
ZCBhcmNoaXZlLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBmb3IgKHJlc291
cmNlTm9kZSA9IGFyY2hpdmVOb2RlLT54bWxDaGlsZHJlbk5vZGU7CisgICAgICAgICByZXNvdXJj
ZU5vZGU7CisgICAgICAgICByZXNvdXJjZU5vZGUgPSByZXNvdXJjZU5vZGUtPm5leHQpIHsKKyAg
ICAgICAgaWYgKHhtbFN0ckVxdWFsKHJlc291cmNlTm9kZS0+bmFtZSwgbWFpblJlc291cmNlVGFn
KSkgeworICAgICAgICAgICAgcmVzb3VyY2VOb2RlID0gcmVzb3VyY2VOb2RlLT54bWxDaGlsZHJl
bk5vZGU7CisgICAgICAgICAgICBpZiAoIXJlc291cmNlTm9kZSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIG1haW5SZXNvdXJjZSA9IGxvYWRBcmNoaXZlUmVzb3VyY2UocmVz
b3VyY2VOb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlm
ICghbWFpblJlc291cmNlKSB7CisgICAgICAgIExPR0QoInNhdmVXZWJBcmNoaXZlOiBGYWlsZWQg
dG8gbG9hZCBtYWluIHJlc291cmNlLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBmb3IgKHJlc291cmNlTm9kZSA9IGFyY2hpdmVOb2RlLT54bWxDaGlsZHJlbk5vZGU7CisgICAg
ICAgICByZXNvdXJjZU5vZGU7CisgICAgICAgICByZXNvdXJjZU5vZGUgPSByZXNvdXJjZU5vZGUt
Pm5leHQpIHsKKyAgICAgICAgaWYgKHhtbFN0ckVxdWFsKHJlc291cmNlTm9kZS0+bmFtZSwgc3Vi
cmVzb3VyY2VzVGFnKSkgeworICAgICAgICAgICAgZm9yIChyZXNvdXJjZU5vZGUgPSByZXNvdXJj
ZU5vZGUtPnhtbENoaWxkcmVuTm9kZTsKKyAgICAgICAgICAgICAgICAgcmVzb3VyY2VOb2RlOwor
ICAgICAgICAgICAgICAgICByZXNvdXJjZU5vZGUgPSByZXNvdXJjZU5vZGUtPm5leHQpIHsKKyAg
ICAgICAgICAgICAgICBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gc3VicmVzb3VyY2UgPSBs
b2FkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlTm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFz
dWJyZXNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICBMT0dEKCJzYXZlV2ViQXJjaGl2ZTog
RmFpbGVkIHRvIGxvYWQgc3VicmVzb3VyY2UuIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXMuYXBwZW5k
KHN1YnJlc291cmNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yIChyZXNvdXJjZU5vZGUgPSBhcmNoaXZlTm9kZS0+eG1sQ2hp
bGRyZW5Ob2RlOworICAgICAgICAgcmVzb3VyY2VOb2RlOworICAgICAgICAgcmVzb3VyY2VOb2Rl
ID0gcmVzb3VyY2VOb2RlLT5uZXh0KSB7CisgICAgICAgIGlmICh4bWxTdHJFcXVhbChyZXNvdXJj
ZU5vZGUtPm5hbWUsIHN1YmZyYW1lc1RhZykpIHsKKyAgICAgICAgICAgIGZvciAocmVzb3VyY2VO
b2RlID0gcmVzb3VyY2VOb2RlLT54bWxDaGlsZHJlbk5vZGU7CisgICAgICAgICAgICAgICAgIHJl
c291cmNlTm9kZTsKKyAgICAgICAgICAgICAgICAgcmVzb3VyY2VOb2RlID0gcmVzb3VyY2VOb2Rl
LT5uZXh0KSB7CisgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxXZWJBcmNoaXZlQW5kcm9pZD4g
c3ViZnJhbWUgPSBsb2FkQXJjaGl2ZShyZXNvdXJjZU5vZGUpOworICAgICAgICAgICAgICAgIGlm
ICghc3ViZnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgTE9HRCgic2F2ZVdlYkFyY2hpdmU6
IEZhaWxlZCB0byBsb2FkIHN1YmZyYW1lLiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3ViZnJhbWVzLmFwcGVuZChzdWJm
cmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBXZWJBcmNoaXZlQW5kcm9pZDo6Y3JlYXRlKG1haW5SZXNvdXJjZSwg
c3VicmVzb3VyY2VzLCBzdWJmcmFtZXMpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxXZWJBcmNo
aXZlQW5kcm9pZD4gY3JlYXRlQXJjaGl2ZUZvckVycm9yKCkKK3sKKyAgICAvKiBXaGVuIGFuIGFy
Y2hpdmUgY2Fubm90IGJlIGxvYWRlZCwgd2UgcmV0dXJuIGFuIGVtcHR5IGFyY2hpdmUgaW5zdGVh
ZC4gKi8KKyAgICBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gbWFpblJlc291cmNlID0gQXJj
aGl2ZVJlc291cmNlOjpjcmVhdGUoCisgICAgICAgIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCksIEtV
UkwoUGFyc2VkVVJMU3RyaW5nLCBTdHJpbmc6OmZyb21VVEY4KCJmaWxlOi8vL2R1bW15IikpLAor
ICAgICAgICBTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L3BsYWluIiksIFN0cmluZygiIiksIFN0cmlu
ZygiIikpOworICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gPiBzdWJyZXNv
dXJjZXM7CisgICAgVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZT4gPiBzdWJmcmFtZXM7CisKKyAg
ICByZXR1cm4gV2ViQXJjaGl2ZUFuZHJvaWQ6OmNyZWF0ZShtYWluUmVzb3VyY2UsIHN1YnJlc291
cmNlcywgc3ViZnJhbWVzKTsKK30KKworUGFzc1JlZlB0cjxXZWJBcmNoaXZlQW5kcm9pZD4gV2Vi
QXJjaGl2ZUFuZHJvaWQ6OmNyZWF0ZShTaGFyZWRCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBjb25z
dCBjaGFyKiBjb25zdCBub0Jhc2VVcmwgPSAiIjsKKyAgICBjb25zdCBjaGFyKiBjb25zdCBkZWZh
dWx0RW5jb2RpbmcgPSAwOworICAgIGNvbnN0IGludCBub1BhcnNlck9wdGlvbnMgPSAwOworCisg
ICAgeG1sRG9jUHRyIGRvYyA9IHhtbFJlYWRNZW1vcnkoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
c2l6ZSgpLCBub0Jhc2VVcmwsIGRlZmF1bHRFbmNvZGluZywgbm9QYXJzZXJPcHRpb25zKTsKKyAg
ICBpZiAoIWRvYykgeworICAgICAgICBMT0dEKCJsb2FkV2ViQXJjaGl2ZTogRmFpbGVkIHRvIHBh
cnNlIGRvY3VtZW50LiIpOworICAgICAgICByZXR1cm4gY3JlYXRlQXJjaGl2ZUZvckVycm9yKCk7
CisgICAgfQorCisgICAgeG1sTm9kZVB0ciByb290ID0geG1sRG9jR2V0Um9vdEVsZW1lbnQoZG9j
KTsKKyAgICBpZiAoIXJvb3QpIHsKKyAgICAgICAgTE9HRCgibG9hZFdlYkFyY2hpdmU6IEVtcHR5
IGRvY3VtZW50LiIpOworICAgICAgICB4bWxGcmVlRG9jKGRvYyk7CisgICAgICAgIHJldHVybiBj
cmVhdGVBcmNoaXZlRm9yRXJyb3IoKTsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViQXJjaGl2ZUFu
ZHJvaWQ+IGFyY2hpdmUgPSBsb2FkQXJjaGl2ZShyb290KTsKKyAgICBpZiAoIWFyY2hpdmUpIHsK
KyAgICAgICAgTE9HRCgibG9hZFdlYkFyY2hpdmU6IEZhaWxlZCB0byBsb2FkIGFyY2hpdmUuIik7
CisgICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUFyY2hpdmVG
b3JFcnJvcigpOworICAgIH0KKworICAgIHhtbEZyZWVEb2MoZG9jKTsKKyAgICByZXR1cm4gYXJj
aGl2ZS5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBib29sIHNhdmVBcmNoaXZlUmVzb3VyY2VGaWVs
ZCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwgY29uc3QgeG1sQ2hhciogdGFnLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgc2l6ZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0geG1sVGV4dFdyaXRlclN0YXJ0
RWxlbWVudCh3cml0ZXIsIHRhZyk7CisgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgTE9H
RCgic2F2ZVdlYkFyY2hpdmU6IEZhaWxlZCB0byBzdGFydCBlbGVtZW50LiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHNpemUgPiAwKSB7CisgICAgICAgIFZlY3Rv
cjxjaGFyPiBiYXNlNjREYXRhOworICAgICAgICBiYXNlNjRFbmNvZGUoZGF0YSwgc2l6ZSwgYmFz
ZTY0RGF0YSwgZmFsc2UpOworICAgICAgICBpZiAoYmFzZTY0RGF0YS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIExPR0QoInNhdmVXZWJBcmNoaXZlOiBGYWlsZWQgdG8gYmFzZTY0IGVuY29kZSBk
YXRhLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
cmVzdWx0ID0geG1sVGV4dFdyaXRlcldyaXRlUmF3TGVuKHdyaXRlciwgQkFEX0NBU1QgYmFzZTY0
RGF0YS5kYXRhKCksIGJhc2U2NERhdGEuc2l6ZSgpKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDAp
IHsKKyAgICAgICAgICAgIExPR0QoInNhdmVXZWJBcmNoaXZlOiBGYWlsZWQgdG8gd3JpdGUgZGF0
YS4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJlc3VsdCA9IHhtbFRleHRXcml0ZXJFbmRFbGVtZW50KHdyaXRlcik7CisgICAgaWYgKHJlc3Vs
dCA8IDApIHsKKyAgICAgICAgTE9HRCgic2F2ZVdlYkFyY2hpdmU6IEZhaWxlZCB0byBlbmQgZWxl
bWVudC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitzdGF0aWMgYm9vbCBzYXZlQXJjaGl2ZVJlc291cmNlRmllbGQoeG1sVGV4dFdyaXRl
clB0ciB3cml0ZXIsIGNvbnN0IHhtbENoYXIqIHRhZywgU2hhcmVkQnVmZmVyKiBidWZmZXIpCit7
CisgICAgcmV0dXJuIHNhdmVBcmNoaXZlUmVzb3VyY2VGaWVsZCh3cml0ZXIsIHRhZywgYnVmZmVy
LT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKK30KKworc3RhdGljIGJvb2wgc2F2ZUFyY2hpdmVS
ZXNvdXJjZUZpZWxkKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVyLCBjb25zdCB4bWxDaGFyKiB0YWcs
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIENTdHJpbmcgdXRmOFN0cmluZyA9IHN0cmlu
Zy51dGY4KCk7CisKKyAgICByZXR1cm4gc2F2ZUFyY2hpdmVSZXNvdXJjZUZpZWxkKHdyaXRlciwg
dGFnLCB1dGY4U3RyaW5nLmRhdGEoKSwgdXRmOFN0cmluZy5sZW5ndGgoKSk7Cit9CisKK3N0YXRp
YyBib29sIHNhdmVBcmNoaXZlUmVzb3VyY2UoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsIFBhc3NS
ZWZQdHI8QXJjaGl2ZVJlc291cmNlPiByZXNvdXJjZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0geG1s
VGV4dFdyaXRlclN0YXJ0RWxlbWVudCh3cml0ZXIsIGFyY2hpdmVSZXNvdXJjZVRhZyk7CisgICAg
aWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgTE9HRCgic2F2ZVdlYkFyY2hpdmU6IEZhaWxlZCB0
byBzdGFydCBlbGVtZW50LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFzYXZlQXJjaGl2ZVJlc291cmNlRmllbGQod3JpdGVyLCB1cmxGaWVsZFRhZywgcmVzb3Vy
Y2UtPnVybCgpLnN0cmluZygpKQorICAgICAgICB8fCAhc2F2ZUFyY2hpdmVSZXNvdXJjZUZpZWxk
KHdyaXRlciwgbWltZUZpZWxkVGFnLCByZXNvdXJjZS0+bWltZVR5cGUoKSkKKyAgICAgICAgfHwg
IXNhdmVBcmNoaXZlUmVzb3VyY2VGaWVsZCh3cml0ZXIsIGVuY29kaW5nRmllbGRUYWcsIHJlc291
cmNlLT50ZXh0RW5jb2RpbmcoKSkKKyAgICAgICAgfHwgIXNhdmVBcmNoaXZlUmVzb3VyY2VGaWVs
ZCh3cml0ZXIsIGZyYW1lRmllbGRUYWcsIHJlc291cmNlLT5mcmFtZU5hbWUoKSkKKyAgICAgICAg
fHwgIXNhdmVBcmNoaXZlUmVzb3VyY2VGaWVsZCh3cml0ZXIsIGRhdGFGaWVsZFRhZywgcmVzb3Vy
Y2UtPmRhdGEoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IHhtbFRl
eHRXcml0ZXJFbmRFbGVtZW50KHdyaXRlcik7CisgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAg
ICAgTE9HRCgic2F2ZVdlYkFyY2hpdmU6IEZhaWxlZCB0byBlbmQgZWxlbWVudC4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Ym9vbCBzYXZlQXJjaGl2ZSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwgUGFzc1JlZlB0cjxBcmNo
aXZlPiBhcmNoaXZlKQoreworICAgIGludCByZXN1bHQgPSB4bWxUZXh0V3JpdGVyU3RhcnRFbGVt
ZW50KHdyaXRlciwgYXJjaGl2ZVRhZyk7CisgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAg
TE9HRCgic2F2ZVdlYkFyY2hpdmU6IEZhaWxlZCB0byBzdGFydCBlbGVtZW50LiIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmVzdWx0ID0geG1sVGV4dFdyaXRlclN0YXJ0
RWxlbWVudCh3cml0ZXIsIG1haW5SZXNvdXJjZVRhZyk7CisgICAgaWYgKHJlc3VsdCA8IDApIHsK
KyAgICAgICAgTE9HRCgic2F2ZVdlYkFyY2hpdmU6IEZhaWxlZCB0byBzdGFydCBlbGVtZW50LiIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFzYXZlQXJjaGl2ZVJl
c291cmNlKHdyaXRlciwgYXJjaGl2ZS0+bWFpblJlc291cmNlKCkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXN1bHQgPSB4bWxUZXh0V3JpdGVyRW5kRWxlbWVudCh3cml0ZXIpOwor
ICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgIExPR0QoInNhdmVXZWJBcmNoaXZlOiBGYWls
ZWQgdG8gZW5kIGVsZW1lbnQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXN1bHQgPSB4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50KHdyaXRlciwgc3VicmVzb3VyY2Vz
VGFnKTsKKyAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICBMT0dEKCJzYXZlV2ViQXJjaGl2
ZTogRmFpbGVkIHRvIHN0YXJ0IGVsZW1lbnQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKFZlY3Rvcjxjb25zdCBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+Ojpp
dGVyYXRvciBzdWJyZXNvdXJjZSA9IGFyY2hpdmUtPnN1YnJlc291cmNlcygpLmJlZ2luKCk7Cisg
ICAgICAgICBzdWJyZXNvdXJjZSAhPSBhcmNoaXZlLT5zdWJyZXNvdXJjZXMoKS5lbmQoKTsKKyAg
ICAgICAgIHN1YnJlc291cmNlKyspIHsKKyAgICAgICAgaWYgKCFzYXZlQXJjaGl2ZVJlc291cmNl
KHdyaXRlciwgKnN1YnJlc291cmNlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXN1bHQgPSB4bWxUZXh0V3JpdGVyRW5kRWxlbWVudCh3cml0ZXIpOworICAgIGlm
IChyZXN1bHQgPCAwKSB7CisgICAgICAgIExPR0QoInNhdmVXZWJBcmNoaXZlOiBGYWlsZWQgdG8g
ZW5kIGVsZW1lbnQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXN1
bHQgPSB4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50KHdyaXRlciwgc3ViZnJhbWVzVGFnKTsKKyAg
ICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICBMT0dEKCJzYXZlV2ViQXJjaGl2ZTogRmFpbGVk
IHRvIHN0YXJ0IGVsZW1lbnQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBmb3IgKFZlY3Rvcjxjb25zdCBSZWZQdHI8QXJjaGl2ZT4gPjo6aXRlcmF0b3Igc3ViZnJhbWUg
PSBhcmNoaXZlLT5zdWJmcmFtZUFyY2hpdmVzKCkuYmVnaW4oKTsKKyAgICAgICAgICAgIHN1YmZy
YW1lICE9IGFyY2hpdmUtPnN1YmZyYW1lQXJjaGl2ZXMoKS5lbmQoKTsKKyAgICAgICAgICAgIHN1
YmZyYW1lKyspIHsKKyAgICAgICAgaWYgKCFzYXZlQXJjaGl2ZSh3cml0ZXIsICpzdWJmcmFtZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmVzdWx0ID0geG1sVGV4
dFdyaXRlckVuZEVsZW1lbnQod3JpdGVyKTsKKyAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAg
ICBMT0dEKCJzYXZlV2ViQXJjaGl2ZTogRmFpbGVkIHRvIGVuZCBlbGVtZW50LiIpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJB
cmNoaXZlQW5kcm9pZDo6c2F2ZVdlYkFyY2hpdmUoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIpCit7
CisgICAgY29uc3QgY2hhciogY29uc3QgZGVmYXVsdFhtbFZlcnNpb24gPSAwOworICAgIGNvbnN0
IGNoYXIqIGNvbnN0IGRlZmF1bHRFbmNvZGluZyA9IDA7CisgICAgY29uc3QgY2hhciogY29uc3Qg
ZGVmYXVsdFN0YW5kYWxvbmUgPSAwOworCisgICAgaW50IHJlc3VsdCA9IHhtbFRleHRXcml0ZXJT
dGFydERvY3VtZW50KHdyaXRlciwgZGVmYXVsdFhtbFZlcnNpb24sIGRlZmF1bHRFbmNvZGluZywg
ZGVmYXVsdFN0YW5kYWxvbmUpOworICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgIExPR0Qo
InNhdmVXZWJBcmNoaXZlOiBGYWlsZWQgdG8gc3RhcnQgZG9jdW1lbnQuIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXNhdmVBcmNoaXZlKHdyaXRlciwgdGhpcykp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IHhtbFRleHRXcml0ZXJFbmRE
b2N1bWVudCh3cml0ZXIpOworICAgIGlmIChyZXN1bHQ8IDApIHsKKyAgICAgICAgTE9HRCgic2F2
ZVdlYkFyY2hpdmU6IEZhaWxlZCB0byBlbmQgZG9jdW1lbnQuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9hbmRyb2lkL1dlYkFyY2hpdmVBbmRyb2lkLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9hbmRyb2lkL1dlYkFyY2hpdmVBbmRyb2lkLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9hcmNoaXZlL2FuZHJvaWQvV2ViQXJjaGl2ZUFuZHJv
aWQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEw
LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJBcmNo
aXZlQW5kcm9pZF9oCisjZGVmaW5lIFdlYkFyY2hpdmVBbmRyb2lkX2gKKworI2luY2x1ZGUgIkFy
Y2hpdmUuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSA8bGlieG1sL3htbHdyaXRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFdlYkFyY2hpdmVBbmRyb2lkIDogcHVibGljIEFyY2hpdmUgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkFyY2hpdmVBbmRyb2lkPiBjcmVhdGUoUGFzc1JlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+IG1haW5SZXNvdXJjZSwKKyAgICAgICAgVmVjdG9yPFBhc3NSZWZQdHI8
QXJjaGl2ZVJlc291cmNlPiA+JiBzdWJyZXNvdXJjZXMsCisgICAgICAgIFZlY3RvcjxQYXNzUmVm
UHRyPEFyY2hpdmU+ID4mIHN1YmZyYW1lQXJjaGl2ZXMpOworCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2ViQXJjaGl2ZUFuZHJvaWQ+IGNyZWF0ZShGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkFyY2hpdmVBbmRyb2lkPiBjcmVhdGUoU2hhcmVkQnVmZmVyKiBidWZmZXIp
OworCisgICAgYm9vbCBzYXZlV2ViQXJjaGl2ZSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7CisK
K3ByaXZhdGU6CisgICAgV2ViQXJjaGl2ZUFuZHJvaWQoUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3Vy
Y2U+IG1haW5SZXNvdXJjZSwKKyAgICAgICAgVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291
cmNlPiA+JiBzdWJyZXNvdXJjZXMsCisgICAgICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmU+
ID4mIHN1YmZyYW1lQXJjaGl2ZXMpOworfTsKKworfQorCisjZW5kaWYgLy8gV0VCQVJDSElWRUFO
RFJPSURfSAo=
</data>
<flag name="review"
          id="50299"
          type_id="1"
          status="-"
          setter="steveblock"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62227</attachid>
            <date>2010-07-21 14:01:17 -0700</date>
            <delta_ts>2010-07-29 16:52:30 -0700</delta_ts>
            <desc>Android WebArchive patch v2.</desc>
            <filename>android-browser-web-archive-support-2.patch</filename>
            <type>text/plain</type>
            <size>20579</size>
            <attacher name="Elliott Slaughter">eds</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDYzNzg1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDct
MjAgIEVsbGlvdHQgU2xhdWdodGVyICA8ZWRzQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFdlYkFyY2hpdmUgZm9y
IEFuZHJvaWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MjcxNgorCisgICAgICAgICogQW5kcm9pZC5tazoKKwogMjAxMC0wNy0yMCAgUmFmYWVsIEFu
dG9nbm9sbGkgIDxhbnRvZ25vbGxpQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFudG9uaW8gR29tZXMuCkluZGV4OiBBbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFuZHJv
aWQubWsJKHJldmlzaW9uIDYzNjg3KQorKysgQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDYgKzEwMSw4IEBAIExPQ0FMX0NfSU5DTFVERVMgOj0gJChMT0NBTF9DX0lOQ0xVREVTKSAK
IAkkKExPQ0FMX1BBVEgpL1dlYkNvcmUvaW5zcGVjdG9yIFwKIAkkKExPQ0FMX1BBVEgpL1dlYkNv
cmUvbG9hZGVyIFwKIAkkKExPQ0FMX1BBVEgpL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlIFwKKwkk
KExPQ0FMX1BBVEgpL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUgXAorCSQoTE9DQUxfUEFUSCkvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9hbmRyb2lkIFwKIAkkKExPQ0FMX1BBVEgpL1dlYkNvcmUvbG9h
ZGVyL2ljb24gXAogCSQoTE9DQUxfUEFUSCkvV2ViQ29yZS9ub3RpZmljYXRpb25zIFwKIAkkKExP
Q0FMX1BBVEgpL1dlYkNvcmUvcGFnZSBcCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNjM3ODUpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEwLTA3LTIwICBFbGxp
b3R0IFNsYXVnaHRlciAgPGVkc0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBXZWJBcmNoaXZlIGZvciBBbmRyb2lk
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI3MTYK
KworICAgICAgICBBZGRlZCBXZWJBcmNoaXZlQW5kcm9pZCBjbGFzcyB3aGljaCBleHRlbmRzIEFy
Y2hpdmUgd2l0aCB0aGUKKyAgICAgICAgQW5kcm9pZCB3ZWJhcmNoaXZlIGZvcm1hdC4gV2ViQWNo
aXZlQW5kcm9pZCBpbXBsZW1lbnRzIGEgc2ltcGxlCisgICAgICAgIHhtbCBhbmQgYmFzZTY0IGJh
c2VkIGZpbGUgZm9ybWF0IGZvciBkdW1waW5nIGFuZCByZXN0b3JpbmcKKyAgICAgICAgYXJjaGl2
ZSBkYXRhLgorCisgICAgICAgIFBsYXRmb3JtIGltcGxlbWVudGF0aW9uLCBubyBuZXcgZnVuY3Rp
b25hbGl0eSwgZXhpc3RpbmcgdGVzdHMgc3VmZmljZS4KKworICAgICAgICAqIEFuZHJvaWQubWs6
CisgICAgICAgICogY29uZmlnLmg6CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZh
Y3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJjaGl2ZU1JTUVUeXBlcyk6CisgICAgICAg
ICogbG9hZGVyL2FyY2hpdmUvYW5kcm9pZDogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2FyY2hp
dmUvYW5kcm9pZC9XZWJBcmNoaXZlQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQXJjaGl2ZUFuZHJvaWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJBcmNo
aXZlQW5kcm9pZDo6V2ViQXJjaGl2ZUFuZHJvaWQpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEFy
Y2hpdmVSZXNvdXJjZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRBcmNoaXZlUmVzb3Vy
Y2VGaWVsZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpsb2FkQXJjaGl2ZVJlc291cmNlRmll
bGRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEFyY2hpdmVSZXNvdXJjZUZpZWxkVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRBcmNoaXZlUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6bG9hZEFyY2hpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXJjaGl2ZUZvckVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNhdmVBcmNoaXZlUmVzb3VyY2VGaWVsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpzYXZlQXJjaGl2ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNh
dmVBcmNoaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFyY2hpdmVBbmRyb2lkOjpzYXZlV2Vi
QXJjaGl2ZSk6CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvYW5kcm9pZC9XZWJBcmNoaXZlQW5k
cm9pZC5oOiBBZGRlZC4KKwogMjAxMC0wNy0yMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2MzY4NykKKysrIFdlYkNv
cmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAtOTQ5LDMgKzk0OSwxMCBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAl4bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUuY3BwIFwKIAl4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIFwK
IAl4bWwvWE1MU2VyaWFsaXplci5jcHAKKworIyBGb3IgQXJjaGl2ZQorTE9DQUxfU1JDX0ZJTEVT
IDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCisJbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3Rvcnku
Y3BwIFwKKwlsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2UuY3BwIFwKKwlsb2FkZXIvYXJj
aGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmNwcCBcCisJbG9hZGVyL2FyY2hpdmUvYW5k
cm9pZC9XZWJBcmNoaXZlQW5kcm9pZC5jcHAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
QXJjaGl2ZUZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
QXJjaGl2ZUZhY3RvcnkuY3BwCShyZXZpc2lvbiA2MzY4NykKKysrIFdlYkNvcmUvbG9hZGVyL2Fy
Y2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
CiAKICNpZiBQTEFURk9STShDRikgJiYgIVBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIkxlZ2FjeVdl
YkFyY2hpdmUuaCIKKyNlbGlmIFBMQVRGT1JNKEFORFJPSUQpCisjaW5jbHVkZSAiV2ViQXJjaGl2
ZUFuZHJvaWQuaCIKICNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTYyLDYg
KzY0LDggQEAgc3RhdGljIEFyY2hpdmVNSU1FVHlwZXNNYXAmIGFyY2hpdmVNSU1FVAogCiAjaWYg
UExBVEZPUk0oQ0YpICYmICFQTEFURk9STShRVCkKICAgICBtaW1lVHlwZXMuc2V0KCJhcHBsaWNh
dGlvbi94LXdlYmFyY2hpdmUiLCBhcmNoaXZlRmFjdG9yeUNyZWF0ZTxMZWdhY3lXZWJBcmNoaXZl
Pik7CisjZWxpZiBQTEFURk9STShBTkRST0lEKQorICAgIG1pbWVUeXBlcy5zZXQoImFwcGxpY2F0
aW9uL3gtd2ViYXJjaGl2ZS14bWwiLCBhcmNoaXZlRmFjdG9yeUNyZWF0ZTxXZWJBcmNoaXZlQW5k
cm9pZD4pOwogI2VuZGlmCiAKICAgICBpbml0aWFsaXplZCA9IHRydWU7CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9hcmNoaXZlL2FuZHJvaWQvV2ViQXJjaGl2ZUFuZHJvaWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2FyY2hpdmUvYW5kcm9pZC9XZWJBcmNoaXZlQW5kcm9pZC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9hcmNoaXZlL2FuZHJvaWQvV2ViQXJjaGl2
ZUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4NCBAQAorLyoKKyAqIENvcHly
aWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmlu
ZSBMT0dfVEFHICJ3ZWJhcmNoaXZlIgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViQXJjaGl2ZUFuZHJvaWQuaCIKKworI2luY2x1ZGUgIkJhc2U2NC5oIgorI2luY2x1ZGUgPGxp
YnhtbC9lbmNvZGluZy5oPgorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxs
aWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKyNpbmNsdWRlIDxs
aWJ4bWwveG1sd3JpdGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB4bWxDaGFyKiBjb25zdCBhcmNoaXZlVGFn
ID0gQkFEX0NBU1QgIkFyY2hpdmUiOworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IGFyY2hp
dmVSZXNvdXJjZVRhZyA9IEJBRF9DQVNUICJBcmNoaXZlUmVzb3VyY2UiOworc3RhdGljIGNvbnN0
IHhtbENoYXIqIGNvbnN0IG1haW5SZXNvdXJjZVRhZyA9IEJBRF9DQVNUICJtYWluUmVzb3VyY2Ui
Oworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IHN1YnJlc291cmNlc1RhZyA9IEJBRF9DQVNU
ICJzdWJyZXNvdXJjZXMiOworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IHN1YmZyYW1lc1Rh
ZyA9IEJBRF9DQVNUICJzdWJmcmFtZXMiOworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IHVy
bEZpZWxkVGFnID0gQkFEX0NBU1QgInVybCI7CitzdGF0aWMgY29uc3QgeG1sQ2hhciogY29uc3Qg
bWltZUZpZWxkVGFnID0gQkFEX0NBU1QgIm1pbWVUeXBlIjsKK3N0YXRpYyBjb25zdCB4bWxDaGFy
KiBjb25zdCBlbmNvZGluZ0ZpZWxkVGFnID0gQkFEX0NBU1QgInRleHRFbmNvZGluZyI7CitzdGF0
aWMgY29uc3QgeG1sQ2hhciogY29uc3QgZnJhbWVGaWVsZFRhZyA9IEJBRF9DQVNUICJmcmFtZU5h
bWUiOworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IGRhdGFGaWVsZFRhZyA9IEJBRF9DQVNU
ICJkYXRhIjsKKworUGFzc1JlZlB0cjxXZWJBcmNoaXZlQW5kcm9pZD4gV2ViQXJjaGl2ZUFuZHJv
aWQ6OmNyZWF0ZShQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gbWFpblJlc291cmNlLAorICAg
IFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gPiYgc3VicmVzb3VyY2VzLAorICAg
IFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmU+ID4mIHN1YmZyYW1lQXJjaGl2ZXMpCit7CisgICAg
aWYgKG1haW5SZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJBcmNoaXZl
QW5kcm9pZChtYWluUmVzb3VyY2UsIHN1YnJlc291cmNlcywgc3ViZnJhbWVBcmNoaXZlcykpOwor
ICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPFdlYkFyY2hpdmVBbmRyb2lkPiBXZWJBcmNo
aXZlQW5kcm9pZDo6Y3JlYXRlKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBQYXNzUmVmUHRyPEFyY2hp
dmVSZXNvdXJjZT4gbWFpblJlc291cmNlID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT5tYWluUmVzb3VyY2UoKTsKKyAgICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlUmVzb3Vy
Y2U+ID4gc3VicmVzb3VyY2VzOworICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmU+ID4gc3Vi
ZnJhbWVzOworICAgIGludCBjaGlsZHJlbiA9IGZyYW1lLT50cmVlKCktPmNoaWxkQ291bnQoKTsK
KworICAgIGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+Z2V0U3VicmVzb3VyY2Vz
KHN1YnJlc291cmNlcyk7CisKKyAgICBmb3IgKGludCBjaGlsZCA9IDA7IGNoaWxkIDwgY2hpbGRy
ZW47IGNoaWxkKyspCisgICAgICAgIHN1YmZyYW1lcy5hcHBlbmQoY3JlYXRlKGZyYW1lLT50cmVl
KCktPmNoaWxkKGNoaWxkKSkpOworCisgICAgcmV0dXJuIGNyZWF0ZShtYWluUmVzb3VyY2UsIHN1
YnJlc291cmNlcywgc3ViZnJhbWVzKTsKK30KKworV2ViQXJjaGl2ZUFuZHJvaWQ6OldlYkFyY2hp
dmVBbmRyb2lkKFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBtYWluUmVzb3VyY2UsCisgICAg
VmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+JiBzdWJyZXNvdXJjZXMsCisgICAg
VmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZT4gPiYgc3ViZnJhbWVBcmNoaXZlcykKK3sKKyAgICBz
ZXRNYWluUmVzb3VyY2UobWFpblJlc291cmNlKTsKKworICAgIGZvciAoVmVjdG9yPFBhc3NSZWZQ
dHI8QXJjaGl2ZVJlc291cmNlPiA+OjppdGVyYXRvciBzdWJyZXNvdXJjZXNJdGVyYXRvciA9IHN1
YnJlc291cmNlcy5iZWdpbigpOyBzdWJyZXNvdXJjZXNJdGVyYXRvciAhPSBzdWJyZXNvdXJjZXMu
ZW5kKCk7IHN1YnJlc291cmNlc0l0ZXJhdG9yKyspCisgICAgICAgIGFkZFN1YnJlc291cmNlKCpz
dWJyZXNvdXJjZXNJdGVyYXRvcik7CisKKyAgICBmb3IgKFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hp
dmU+ID46Oml0ZXJhdG9yIHN1YmZyYW1lc0l0ZXJhdG9yID0gc3ViZnJhbWVBcmNoaXZlcy5iZWdp
bigpOyBzdWJmcmFtZXNJdGVyYXRvciAhPSBzdWJmcmFtZUFyY2hpdmVzLmVuZCgpOyBzdWJmcmFt
ZXNJdGVyYXRvcisrKQorICAgICAgICBhZGRTdWJmcmFtZUFyY2hpdmUoKnN1YmZyYW1lc0l0ZXJh
dG9yKTsKK30KKworc3RhdGljIGJvb2wgbG9hZEFyY2hpdmVSZXNvdXJjZUZpZWxkKHhtbE5vZGVQ
dHIgcmVzb3VyY2VOb2RlLCBjb25zdCB4bWxDaGFyKiBmaWVsZE5hbWUsIFZlY3RvcjxjaGFyPiog
b3V0cHV0RGF0YSkKK3sKKyAgICBpZiAoIW91dHB1dERhdGEpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIG91dHB1dERhdGEtPmNsZWFyKCk7CisKKyAgICBjb25zdCBjaGFyKiBiYXNlNjRE
YXRhID0gMDsKKworICAgIGZvciAoeG1sTm9kZVB0ciBmaWVsZE5vZGUgPSByZXNvdXJjZU5vZGUt
PnhtbENoaWxkcmVuTm9kZTsgZmllbGROb2RlOyBmaWVsZE5vZGUgPSBmaWVsZE5vZGUtPm5leHQp
IHsKKyAgICAgICAgaWYgKHhtbFN0ckVxdWFsKGZpZWxkTm9kZS0+bmFtZSwgZmllbGROYW1lKSkg
eworICAgICAgICAgICAgYmFzZTY0RGF0YSA9IChjb25zdCBjaGFyKil4bWxOb2RlR2V0Q29udGVu
dChmaWVsZE5vZGUtPnhtbENoaWxkcmVuTm9kZSk7CisgICAgICAgICAgICBpZiAoIWJhc2U2NERh
dGEpIHsKKyAgICAgICAgICAgICAgICAvLyBFbXB0eSBmaWVsZHMgc2VlbSB0byBicmVhayBpZiB0
aGV5IGFyZW4ndCBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgICAgICAgICAgb3V0cHV0RGF0YS0+
YXBwZW5kKCdcMCcpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFiYXNlNjRE
YXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBpbnQgYmFzZTY0U2l6ZSA9
IHhtbFN0cmxlbihCQURfQ0FTVCBiYXNlNjREYXRhKTsKKworICAgIHJldHVybiBiYXNlNjREZWNv
ZGUoYmFzZTY0RGF0YSwgYmFzZTY0U2l6ZSwgKm91dHB1dERhdGEpOworfQorCitzdGF0aWMgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IGxvYWRBcmNoaXZlUmVzb3VyY2VGaWVsZEJ1ZmZlcih4bWxO
b2RlUHRyIHJlc291cmNlTm9kZSwgY29uc3QgeG1sQ2hhciogZmllbGROYW1lKQoreworICAgIFZl
Y3RvcjxjaGFyPiBmaWVsZERhdGE7CisKKyAgICBpZiAobG9hZEFyY2hpdmVSZXNvdXJjZUZpZWxk
KHJlc291cmNlTm9kZSwgZmllbGROYW1lLCAmZmllbGREYXRhKSkKKyAgICAgICAgcmV0dXJuIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGZpZWxkRGF0YS5kYXRhKCksIGZpZWxkRGF0YS5zaXplKCkpOwor
CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTdHJpbmcgbG9hZEFyY2hpdmVSZXNvdXJjZUZp
ZWxkU3RyaW5nKHhtbE5vZGVQdHIgcmVzb3VyY2VOb2RlLCBjb25zdCB4bWxDaGFyKiBmaWVsZE5h
bWUpCit7CisgICAgVmVjdG9yPGNoYXI+IGZpZWxkRGF0YTsKKworICAgIGlmIChsb2FkQXJjaGl2
ZVJlc291cmNlRmllbGQocmVzb3VyY2VOb2RlLCBmaWVsZE5hbWUsICZmaWVsZERhdGEpKQorICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChmaWVsZERhdGEuZGF0YSgpLCBmaWVsZERhdGEu
c2l6ZSgpKTsKKworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworc3RhdGljIEtVUkwgbG9hZEFy
Y2hpdmVSZXNvdXJjZUZpZWxkVVJMKHhtbE5vZGVQdHIgcmVzb3VyY2VOb2RlLCBjb25zdCB4bWxD
aGFyKiBmaWVsZE5hbWUpCit7CisgICAgVmVjdG9yPGNoYXI+IGZpZWxkRGF0YTsKKworICAgIGlm
IChsb2FkQXJjaGl2ZVJlc291cmNlRmllbGQocmVzb3VyY2VOb2RlLCBmaWVsZE5hbWUsICZmaWVs
ZERhdGEpKQorICAgICAgICByZXR1cm4gS1VSTChQYXJzZWRVUkxTdHJpbmcsIFN0cmluZzo6ZnJv
bVVURjgoZmllbGREYXRhLmRhdGEoKSwgZmllbGREYXRhLnNpemUoKSkpOworCisgICAgcmV0dXJu
IEtVUkwoKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBsb2FkQXJj
aGl2ZVJlc291cmNlKHhtbE5vZGVQdHIgcmVzb3VyY2VOb2RlKQoreworICAgIGlmICgheG1sU3Ry
RXF1YWwocmVzb3VyY2VOb2RlLT5uYW1lLCBhcmNoaXZlUmVzb3VyY2VUYWcpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIEtVUkwgdXJsID0gbG9hZEFyY2hpdmVSZXNvdXJjZUZpZWxkVVJMKHJl
c291cmNlTm9kZSwgdXJsRmllbGRUYWcpOworICAgIGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0gbG9hZEFyY2hpdmVSZXNvdXJjZUZp
ZWxkU3RyaW5nKHJlc291cmNlTm9kZSwgbWltZUZpZWxkVGFnKTsKKyAgICBpZiAobWltZVR5cGUu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU3RyaW5nIHRleHRFbmNvZGluZyA9
IGxvYWRBcmNoaXZlUmVzb3VyY2VGaWVsZFN0cmluZyhyZXNvdXJjZU5vZGUsIGVuY29kaW5nRmll
bGRUYWcpOworICAgIGlmICh0ZXh0RW5jb2RpbmcuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgU3RyaW5nIGZyYW1lTmFtZSA9IGxvYWRBcmNoaXZlUmVzb3VyY2VGaWVsZFN0cmlu
ZyhyZXNvdXJjZU5vZGUsIGZyYW1lRmllbGRUYWcpOworICAgIGlmIChmcmFtZU5hbWUuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEgPSBsb2FkQXJjaGl2ZVJlc291cmNlRmllbGRCdWZmZXIocmVzb3VyY2VOb2RlLCBkYXRhRmll
bGRUYWcpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
QXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoZGF0YSwgdXJsLCBtaW1lVHlwZSwgdGV4dEVuY29kaW5n
LCBmcmFtZU5hbWUpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxXZWJBcmNoaXZlQW5kcm9pZD4g
bG9hZEFyY2hpdmUoeG1sTm9kZVB0ciBhcmNoaXZlTm9kZSkKK3sKKyAgICB4bWxOb2RlUHRyIHJl
c291cmNlTm9kZSA9IDA7CisKKyAgICBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gbWFpblJl
c291cmNlOworICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gPiBzdWJyZXNv
dXJjZXM7CisgICAgVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZT4gPiBzdWJmcmFtZXM7CisKKyAg
ICBpZiAoIXhtbFN0ckVxdWFsKGFyY2hpdmVOb2RlLT5uYW1lLCBhcmNoaXZlVGFnKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKHJlc291cmNlTm9kZSA9IGFyY2hpdmVOb2RlLT54bWxD
aGlsZHJlbk5vZGU7IHJlc291cmNlTm9kZTsgcmVzb3VyY2VOb2RlID0gcmVzb3VyY2VOb2RlLT5u
ZXh0KSB7CisgICAgICAgIGlmICh4bWxTdHJFcXVhbChyZXNvdXJjZU5vZGUtPm5hbWUsIG1haW5S
ZXNvdXJjZVRhZykpIHsKKyAgICAgICAgICAgIHJlc291cmNlTm9kZSA9IHJlc291cmNlTm9kZS0+
eG1sQ2hpbGRyZW5Ob2RlOworICAgICAgICAgICAgaWYgKCFyZXNvdXJjZU5vZGUpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtYWluUmVzb3VyY2UgPSBsb2FkQXJjaGl2ZVJl
c291cmNlKHJlc291cmNlTm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAoIW1haW5SZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3Ig
KHJlc291cmNlTm9kZSA9IGFyY2hpdmVOb2RlLT54bWxDaGlsZHJlbk5vZGU7IHJlc291cmNlTm9k
ZTsgcmVzb3VyY2VOb2RlID0gcmVzb3VyY2VOb2RlLT5uZXh0KSB7CisgICAgICAgIGlmICh4bWxT
dHJFcXVhbChyZXNvdXJjZU5vZGUtPm5hbWUsIHN1YnJlc291cmNlc1RhZykpIHsKKyAgICAgICAg
ICAgIGZvciAocmVzb3VyY2VOb2RlID0gcmVzb3VyY2VOb2RlLT54bWxDaGlsZHJlbk5vZGU7IHJl
c291cmNlTm9kZTsgcmVzb3VyY2VOb2RlID0gcmVzb3VyY2VOb2RlLT5uZXh0KSB7CisgICAgICAg
ICAgICAgICAgUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHN1YnJlc291cmNlID0gbG9hZEFy
Y2hpdmVSZXNvdXJjZShyZXNvdXJjZU5vZGUpOworICAgICAgICAgICAgICAgIGlmICghc3VicmVz
b3VyY2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlcy5hcHBlbmQoc3VicmVzb3VyY2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHJlc291cmNlTm9kZSA9IGFyY2hp
dmVOb2RlLT54bWxDaGlsZHJlbk5vZGU7IHJlc291cmNlTm9kZTsgcmVzb3VyY2VOb2RlID0gcmVz
b3VyY2VOb2RlLT5uZXh0KSB7CisgICAgICAgIGlmICh4bWxTdHJFcXVhbChyZXNvdXJjZU5vZGUt
Pm5hbWUsIHN1YmZyYW1lc1RhZykpIHsKKyAgICAgICAgICAgIGZvciAocmVzb3VyY2VOb2RlID0g
cmVzb3VyY2VOb2RlLT54bWxDaGlsZHJlbk5vZGU7IHJlc291cmNlTm9kZTsgcmVzb3VyY2VOb2Rl
ID0gcmVzb3VyY2VOb2RlLT5uZXh0KSB7CisgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxXZWJB
cmNoaXZlQW5kcm9pZD4gc3ViZnJhbWUgPSBsb2FkQXJjaGl2ZShyZXNvdXJjZU5vZGUpOworICAg
ICAgICAgICAgICAgIGlmICghc3ViZnJhbWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIHN1YmZyYW1lcy5hcHBlbmQoc3ViZnJhbWUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gV2Vi
QXJjaGl2ZUFuZHJvaWQ6OmNyZWF0ZShtYWluUmVzb3VyY2UsIHN1YnJlc291cmNlcywgc3ViZnJh
bWVzKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8V2ViQXJjaGl2ZUFuZHJvaWQ+IGNyZWF0ZUFy
Y2hpdmVGb3JFcnJvcigpCit7CisgICAgLy8gV2hlbiBhbiBhcmNoaXZlIGNhbm5vdCBiZSBsb2Fk
ZWQsIHdlIHJldHVybiBhbiBlbXB0eSBhcmNoaXZlIGluc3RlYWQuCisgICAgUGFzc1JlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+IG1haW5SZXNvdXJjZSA9IEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKAor
ICAgICAgICBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgU3Ry
aW5nOjpmcm9tVVRGOCgiZmlsZTovLy9kdW1teSIpKSwKKyAgICAgICAgU3RyaW5nOjpmcm9tVVRG
OCgidGV4dC9wbGFpbiIpLCBTdHJpbmcoIiIpLCBTdHJpbmcoIiIpKTsKKyAgICBWZWN0b3I8UGFz
c1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+ID4gc3VicmVzb3VyY2VzOworICAgIFZlY3RvcjxQYXNz
UmVmUHRyPEFyY2hpdmU+ID4gc3ViZnJhbWVzOworCisgICAgcmV0dXJuIFdlYkFyY2hpdmVBbmRy
b2lkOjpjcmVhdGUobWFpblJlc291cmNlLCBzdWJyZXNvdXJjZXMsIHN1YmZyYW1lcyk7Cit9CisK
K1Bhc3NSZWZQdHI8V2ViQXJjaGl2ZUFuZHJvaWQ+IFdlYkFyY2hpdmVBbmRyb2lkOjpjcmVhdGUo
U2hhcmVkQnVmZmVyKiBidWZmZXIpCit7CisgICAgY29uc3QgY2hhciogY29uc3Qgbm9CYXNlVXJs
ID0gIiI7CisgICAgY29uc3QgY2hhciogY29uc3QgZGVmYXVsdEVuY29kaW5nID0gMDsKKyAgICBj
b25zdCBpbnQgbm9QYXJzZXJPcHRpb25zID0gMDsKKworICAgIHhtbERvY1B0ciBkb2MgPSB4bWxS
ZWFkTWVtb3J5KGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSwgbm9CYXNlVXJsLCBkZWZh
dWx0RW5jb2RpbmcsIG5vUGFyc2VyT3B0aW9ucyk7CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJl
dHVybiBjcmVhdGVBcmNoaXZlRm9yRXJyb3IoKTsKKworICAgIHhtbE5vZGVQdHIgcm9vdCA9IHht
bERvY0dldFJvb3RFbGVtZW50KGRvYyk7CisgICAgaWYgKCFyb290KSB7CisgICAgICAgIHhtbEZy
ZWVEb2MoZG9jKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUFyY2hpdmVGb3JFcnJvcigpOworICAg
IH0KKworICAgIFJlZlB0cjxXZWJBcmNoaXZlQW5kcm9pZD4gYXJjaGl2ZSA9IGxvYWRBcmNoaXZl
KHJvb3QpOworICAgIGlmICghYXJjaGl2ZSkgeworICAgICAgICB4bWxGcmVlRG9jKGRvYyk7Cisg
ICAgICAgIHJldHVybiBjcmVhdGVBcmNoaXZlRm9yRXJyb3IoKTsKKyAgICB9CisKKyAgICB4bWxG
cmVlRG9jKGRvYyk7CisgICAgcmV0dXJuIGFyY2hpdmUucmVsZWFzZSgpOworfQorCitzdGF0aWMg
Ym9vbCBzYXZlQXJjaGl2ZVJlc291cmNlRmllbGQoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsIGNv
bnN0IHhtbENoYXIqIHRhZywgY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCit7CisgICAgaW50
IHJlc3VsdCA9IHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQod3JpdGVyLCB0YWcpOworICAgIGlm
IChyZXN1bHQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoc2l6ZSA+IDAp
IHsKKyAgICAgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgICAgIGJhc2U2NEVuY29k
ZShkYXRhLCBzaXplLCBiYXNlNjREYXRhLCBmYWxzZSk7CisgICAgICAgIGlmIChiYXNlNjREYXRh
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXN1bHQg
PSB4bWxUZXh0V3JpdGVyV3JpdGVSYXdMZW4od3JpdGVyLCBCQURfQ0FTVCBiYXNlNjREYXRhLmRh
dGEoKSwgYmFzZTY0RGF0YS5zaXplKCkpOworICAgICAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXN1bHQgPSB4bWxUZXh0V3JpdGVy
RW5kRWxlbWVudCh3cml0ZXIpOworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHNhdmVBcmNoaXZlUmVz
b3VyY2VGaWVsZCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwgY29uc3QgeG1sQ2hhciogdGFnLCBT
aGFyZWRCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gc2F2ZUFyY2hpdmVSZXNvdXJjZUZp
ZWxkKHdyaXRlciwgdGFnLCBidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5zaXplKCkpOworfQorCitz
dGF0aWMgYm9vbCBzYXZlQXJjaGl2ZVJlc291cmNlRmllbGQoeG1sVGV4dFdyaXRlclB0ciB3cml0
ZXIsIGNvbnN0IHhtbENoYXIqIHRhZywgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgQ1N0
cmluZyB1dGY4U3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKKworICAgIHJldHVybiBzYXZlQXJjaGl2
ZVJlc291cmNlRmllbGQod3JpdGVyLCB0YWcsIHV0ZjhTdHJpbmcuZGF0YSgpLCB1dGY4U3RyaW5n
Lmxlbmd0aCgpKTsKK30KKworc3RhdGljIGJvb2wgc2F2ZUFyY2hpdmVSZXNvdXJjZSh4bWxUZXh0
V3JpdGVyUHRyIHdyaXRlciwgUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJlc291cmNlKQor
eworICAgIGludCByZXN1bHQgPSB4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50KHdyaXRlciwgYXJj
aGl2ZVJlc291cmNlVGFnKTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFzYXZlQXJjaGl2ZVJlc291cmNlRmllbGQod3JpdGVyLCB1cmxGaWVs
ZFRhZywgcmVzb3VyY2UtPnVybCgpLnN0cmluZygpKQorICAgICAgICB8fCAhc2F2ZUFyY2hpdmVS
ZXNvdXJjZUZpZWxkKHdyaXRlciwgbWltZUZpZWxkVGFnLCByZXNvdXJjZS0+bWltZVR5cGUoKSkK
KyAgICAgICAgfHwgIXNhdmVBcmNoaXZlUmVzb3VyY2VGaWVsZCh3cml0ZXIsIGVuY29kaW5nRmll
bGRUYWcsIHJlc291cmNlLT50ZXh0RW5jb2RpbmcoKSkKKyAgICAgICAgfHwgIXNhdmVBcmNoaXZl
UmVzb3VyY2VGaWVsZCh3cml0ZXIsIGZyYW1lRmllbGRUYWcsIHJlc291cmNlLT5mcmFtZU5hbWUo
KSkKKyAgICAgICAgfHwgIXNhdmVBcmNoaXZlUmVzb3VyY2VGaWVsZCh3cml0ZXIsIGRhdGFGaWVs
ZFRhZywgcmVzb3VyY2UtPmRhdGEoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
c3VsdCA9IHhtbFRleHRXcml0ZXJFbmRFbGVtZW50KHdyaXRlcik7CisgICAgaWYgKHJlc3VsdCA8
IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj
IGJvb2wgc2F2ZUFyY2hpdmUoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIsIFBhc3NSZWZQdHI8QXJj
aGl2ZT4gYXJjaGl2ZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0geG1sVGV4dFdyaXRlclN0YXJ0RWxl
bWVudCh3cml0ZXIsIGFyY2hpdmVUYWcpOworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSB4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50KHdy
aXRlciwgbWFpblJlc291cmNlVGFnKTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFzYXZlQXJjaGl2ZVJlc291cmNlKHdyaXRlciwgYXJjaGl2
ZS0+bWFpblJlc291cmNlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQg
PSB4bWxUZXh0V3JpdGVyRW5kRWxlbWVudCh3cml0ZXIpOworICAgIGlmIChyZXN1bHQgPCAwKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSB4bWxUZXh0V3JpdGVyU3RhcnRF
bGVtZW50KHdyaXRlciwgc3VicmVzb3VyY2VzVGFnKTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChWZWN0b3I8Y29uc3QgUmVmUHRyPEFyY2hp
dmVSZXNvdXJjZT4gPjo6aXRlcmF0b3Igc3VicmVzb3VyY2UgPSBhcmNoaXZlLT5zdWJyZXNvdXJj
ZXMoKS5iZWdpbigpOworICAgICAgICAgc3VicmVzb3VyY2UgIT0gYXJjaGl2ZS0+c3VicmVzb3Vy
Y2VzKCkuZW5kKCk7CisgICAgICAgICBzdWJyZXNvdXJjZSsrKSB7CisgICAgICAgIGlmICghc2F2
ZUFyY2hpdmVSZXNvdXJjZSh3cml0ZXIsICpzdWJyZXNvdXJjZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmVzdWx0ID0geG1sVGV4dFdyaXRlckVuZEVsZW1lbnQo
d3JpdGVyKTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmVzdWx0ID0geG1sVGV4dFdyaXRlclN0YXJ0RWxlbWVudCh3cml0ZXIsIHN1YmZyYW1lc1Rh
Zyk7CisgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAoVmVjdG9yPGNvbnN0IFJlZlB0cjxBcmNoaXZlPiA+OjppdGVyYXRvciBzdWJmcmFtZSA9IGFy
Y2hpdmUtPnN1YmZyYW1lQXJjaGl2ZXMoKS5iZWdpbigpOyBzdWJmcmFtZSAhPSBhcmNoaXZlLT5z
dWJmcmFtZUFyY2hpdmVzKCkuZW5kKCk7IHN1YmZyYW1lKyspIHsKKyAgICAgICAgaWYgKCFzYXZl
QXJjaGl2ZSh3cml0ZXIsICpzdWJmcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmVzdWx0ID0geG1sVGV4dFdyaXRlckVuZEVsZW1lbnQod3JpdGVyKTsKKyAg
ICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgV2ViQXJjaGl2ZUFuZHJvaWQ6OnNhdmVXZWJBcmNoaXZlKHhtbFRleHRXcml0
ZXJQdHIgd3JpdGVyKQoreworICAgIGNvbnN0IGNoYXIqIGNvbnN0IGRlZmF1bHRYbWxWZXJzaW9u
ID0gMDsKKyAgICBjb25zdCBjaGFyKiBjb25zdCBkZWZhdWx0RW5jb2RpbmcgPSAwOworICAgIGNv
bnN0IGNoYXIqIGNvbnN0IGRlZmF1bHRTdGFuZGFsb25lID0gMDsKKworICAgIGludCByZXN1bHQg
PSB4bWxUZXh0V3JpdGVyU3RhcnREb2N1bWVudCh3cml0ZXIsIGRlZmF1bHRYbWxWZXJzaW9uLCBk
ZWZhdWx0RW5jb2RpbmcsIGRlZmF1bHRTdGFuZGFsb25lKTsKKyAgICBpZiAocmVzdWx0IDwgMCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzYXZlQXJjaGl2ZSh3cml0ZXIsIHRo
aXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSB4bWxUZXh0V3JpdGVy
RW5kRG9jdW1lbnQod3JpdGVyKTsKKyAgICBpZiAocmVzdWx0PCAwKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9sb2FkZXIv
YXJjaGl2ZS9hbmRyb2lkL1dlYkFyY2hpdmVBbmRyb2lkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvYXJjaGl2ZS9hbmRyb2lkL1dlYkFyY2hpdmVBbmRyb2lkLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL2xvYWRlci9hcmNoaXZlL2FuZHJvaWQvV2ViQXJjaGl2ZUFuZHJvaWQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLCBUaGUg
QW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJBcmNoaXZlQW5k
cm9pZF9oCisjZGVmaW5lIFdlYkFyY2hpdmVBbmRyb2lkX2gKKworI2luY2x1ZGUgIkFyY2hpdmUu
aCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSA8bGlieG1sL3htbHdyaXRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFdlYkFyY2hpdmVBbmRyb2lkIDogcHVibGljIEFyY2hpdmUgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkFyY2hpdmVBbmRyb2lkPiBjcmVhdGUoUGFzc1JlZlB0cjxBcmNoaXZl
UmVzb3VyY2U+IG1haW5SZXNvdXJjZSwKKyAgICAgICAgVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2
ZVJlc291cmNlPiA+JiBzdWJyZXNvdXJjZXMsCisgICAgICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFy
Y2hpdmU+ID4mIHN1YmZyYW1lQXJjaGl2ZXMpOworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
QXJjaGl2ZUFuZHJvaWQ+IGNyZWF0ZShGcmFtZSogZnJhbWUpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkFyY2hpdmVBbmRyb2lkPiBjcmVhdGUoU2hhcmVkQnVmZmVyKiBidWZmZXIpOworCisg
ICAgYm9vbCBzYXZlV2ViQXJjaGl2ZSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlcik7CisKK3ByaXZh
dGU6CisgICAgV2ViQXJjaGl2ZUFuZHJvaWQoUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1h
aW5SZXNvdXJjZSwKKyAgICAgICAgVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+
JiBzdWJyZXNvdXJjZXMsCisgICAgICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmU+ID4mIHN1
YmZyYW1lQXJjaGl2ZXMpOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViQXJjaGl2ZUFuZHJvaWRf
aAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63010</attachid>
            <date>2010-07-29 16:52:30 -0700</date>
            <delta_ts>2011-01-12 14:28:53 -0800</delta_ts>
            <desc>Android WebArchive patch v3.</desc>
            <filename>android-browser-web-archive-support-3.patch</filename>
            <type>text/plain</type>
            <size>21011</size>
            <attacher name="Elliott Slaughter">eds</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDYzNzg1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDct
MjAgIEVsbGlvdHQgU2xhdWdodGVyICA8ZWRzQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IFdlYkFyY2hpdmUgZm9y
IEFuZHJvaWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MjcxNgorCisgICAgICAgICogQW5kcm9pZC5tazoKKwogMjAxMC0wNy0yMCAgUmFmYWVsIEFu
dG9nbm9sbGkgIDxhbnRvZ25vbGxpQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFudG9uaW8gR29tZXMuCkluZGV4OiBBbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEFuZHJv
aWQubWsJKHJldmlzaW9uIDYzNjg3KQorKysgQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDYgKzEwMSw4IEBAIExPQ0FMX0NfSU5DTFVERVMgOj0gJChMT0NBTF9DX0lOQ0xVREVTKSAK
IAkkKExPQ0FMX1BBVEgpL1dlYkNvcmUvaW5zcGVjdG9yIFwKIAkkKExPQ0FMX1BBVEgpL1dlYkNv
cmUvbG9hZGVyIFwKIAkkKExPQ0FMX1BBVEgpL1dlYkNvcmUvbG9hZGVyL2FwcGNhY2hlIFwKKwkk
KExPQ0FMX1BBVEgpL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUgXAorCSQoTE9DQUxfUEFUSCkvV2Vi
Q29yZS9sb2FkZXIvYXJjaGl2ZS9hbmRyb2lkIFwKIAkkKExPQ0FMX1BBVEgpL1dlYkNvcmUvbG9h
ZGVyL2ljb24gXAogCSQoTE9DQUxfUEFUSCkvV2ViQ29yZS9ub3RpZmljYXRpb25zIFwKIAkkKExP
Q0FMX1BBVEgpL1dlYkNvcmUvcGFnZSBcCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNjM3ODUpCisrKyBXZWJDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEwLTA3LTIwICBFbGxp
b3R0IFNsYXVnaHRlciAgPGVkc0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBXZWJBcmNoaXZlIGZvciBBbmRyb2lk
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI3MTYK
KworICAgICAgICBBZGRlZCBXZWJBcmNoaXZlQW5kcm9pZCBjbGFzcyB3aGljaCBleHRlbmRzIEFy
Y2hpdmUgd2l0aCB0aGUKKyAgICAgICAgQW5kcm9pZCB3ZWJhcmNoaXZlIGZvcm1hdC4gV2ViQWNo
aXZlQW5kcm9pZCBpbXBsZW1lbnRzIGEgc2ltcGxlCisgICAgICAgIHhtbCBhbmQgYmFzZTY0IGJh
c2VkIGZpbGUgZm9ybWF0IGZvciBkdW1waW5nIGFuZCByZXN0b3JpbmcKKyAgICAgICAgYXJjaGl2
ZSBkYXRhLgorCisgICAgICAgIFBsYXRmb3JtIGltcGxlbWVudGF0aW9uLCBubyBuZXcgZnVuY3Rp
b25hbGl0eSwgZXhpc3RpbmcgdGVzdHMgc3VmZmljZS4KKworICAgICAgICAqIEFuZHJvaWQubWs6
CisgICAgICAgICogY29uZmlnLmg6CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZh
Y3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJjaGl2ZU1JTUVUeXBlcyk6CisgICAgICAg
ICogbG9hZGVyL2FyY2hpdmUvYW5kcm9pZDogQWRkZWQuCisgICAgICAgICogbG9hZGVyL2FyY2hp
dmUvYW5kcm9pZC9XZWJBcmNoaXZlQW5kcm9pZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQXJjaGl2ZUFuZHJvaWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJBcmNo
aXZlQW5kcm9pZDo6V2ViQXJjaGl2ZUFuZHJvaWQpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEFy
Y2hpdmVSZXNvdXJjZUZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRBcmNoaXZlUmVzb3Vy
Y2VGaWVsZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpsb2FkQXJjaGl2ZVJlc291cmNlRmll
bGRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6bG9hZEFyY2hpdmVSZXNvdXJjZUZpZWxkVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OmxvYWRBcmNoaXZlUmVzb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6bG9hZEFyY2hpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQXJjaGl2ZUZvckVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNhdmVBcmNoaXZlUmVzb3VyY2VGaWVsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpzYXZlQXJjaGl2ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNh
dmVBcmNoaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkFyY2hpdmVBbmRyb2lkOjpzYXZlV2Vi
QXJjaGl2ZSk6CisgICAgICAgICogbG9hZGVyL2FyY2hpdmUvYW5kcm9pZC9XZWJBcmNoaXZlQW5k
cm9pZC5oOiBBZGRlZC4KKwogMjAxMC0wNy0yMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBXZWJDb3JlL0FuZHJvaWQubWsKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA2MzY4NykKKysrIFdlYkNv
cmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAtOTQ5LDMgKzk0OSwxMCBAQCBMT0NBTF9T
UkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAl4bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGUuY3BwIFwKIAl4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIFwK
IAl4bWwvWE1MU2VyaWFsaXplci5jcHAKKworIyBGb3IgQXJjaGl2ZQorTE9DQUxfU1JDX0ZJTEVT
IDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCisJbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3Rvcnku
Y3BwIFwKKwlsb2FkZXIvYXJjaGl2ZS9BcmNoaXZlUmVzb3VyY2UuY3BwIFwKKwlsb2FkZXIvYXJj
aGl2ZS9BcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmNwcCBcCisJbG9hZGVyL2FyY2hpdmUvYW5k
cm9pZC9XZWJBcmNoaXZlQW5kcm9pZC5jcHAKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
QXJjaGl2ZUZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2FyY2hpdmUv
QXJjaGl2ZUZhY3RvcnkuY3BwCShyZXZpc2lvbiA2MzY4NykKKysrIFdlYkNvcmUvbG9hZGVyL2Fy
Y2hpdmUvQXJjaGl2ZUZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
CiAKICNpZiBQTEFURk9STShDRikgJiYgIVBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIkxlZ2FjeVdl
YkFyY2hpdmUuaCIKKyNlbGlmIFBMQVRGT1JNKEFORFJPSUQpCisjaW5jbHVkZSAiV2ViQXJjaGl2
ZUFuZHJvaWQuaCIKICNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTYyLDYg
KzY0LDggQEAgc3RhdGljIEFyY2hpdmVNSU1FVHlwZXNNYXAmIGFyY2hpdmVNSU1FVAogCiAjaWYg
UExBVEZPUk0oQ0YpICYmICFQTEFURk9STShRVCkKICAgICBtaW1lVHlwZXMuc2V0KCJhcHBsaWNh
dGlvbi94LXdlYmFyY2hpdmUiLCBhcmNoaXZlRmFjdG9yeUNyZWF0ZTxMZWdhY3lXZWJBcmNoaXZl
Pik7CisjZWxpZiBQTEFURk9STShBTkRST0lEKQorICAgIG1pbWVUeXBlcy5zZXQoImFwcGxpY2F0
aW9uL3gtd2ViYXJjaGl2ZS14bWwiLCBhcmNoaXZlRmFjdG9yeUNyZWF0ZTxXZWJBcmNoaXZlQW5k
cm9pZD4pOwogI2VuZGlmCiAKICAgICBpbml0aWFsaXplZCA9IHRydWU7CkluZGV4OiBXZWJDb3Jl
L2xvYWRlci9hcmNoaXZlL2FuZHJvaWQvV2ViQXJjaGl2ZUFuZHJvaWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvbG9hZGVyL2FyY2hpdmUvYW5kcm9pZC9XZWJBcmNoaXZlQW5kcm9pZC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2xvYWRlci9hcmNoaXZlL2FuZHJvaWQvV2ViQXJjaGl2
ZUFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAqIENvcHly
aWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmlu
ZSBMT0dfVEFHICJ3ZWJhcmNoaXZlIgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V2ViQXJjaGl2ZUFuZHJvaWQuaCIKKworI2luY2x1ZGUgIkJhc2U2NC5oIgorI2luY2x1ZGUgPGxp
YnhtbC9lbmNvZGluZy5oPgorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxs
aWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKyNpbmNsdWRlIDxs
aWJ4bWwveG1sd3JpdGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB4bWxDaGFyKiBjb25zdCBhcmNoaXZlVGFn
ID0gQkFEX0NBU1QgIkFyY2hpdmUiOworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IGFyY2hp
dmVSZXNvdXJjZVRhZyA9IEJBRF9DQVNUICJBcmNoaXZlUmVzb3VyY2UiOworc3RhdGljIGNvbnN0
IHhtbENoYXIqIGNvbnN0IG1haW5SZXNvdXJjZVRhZyA9IEJBRF9DQVNUICJtYWluUmVzb3VyY2Ui
Oworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IHN1YnJlc291cmNlc1RhZyA9IEJBRF9DQVNU
ICJzdWJyZXNvdXJjZXMiOworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IHN1YmZyYW1lc1Rh
ZyA9IEJBRF9DQVNUICJzdWJmcmFtZXMiOworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IHVy
bEZpZWxkVGFnID0gQkFEX0NBU1QgInVybCI7CitzdGF0aWMgY29uc3QgeG1sQ2hhciogY29uc3Qg
bWltZUZpZWxkVGFnID0gQkFEX0NBU1QgIm1pbWVUeXBlIjsKK3N0YXRpYyBjb25zdCB4bWxDaGFy
KiBjb25zdCBlbmNvZGluZ0ZpZWxkVGFnID0gQkFEX0NBU1QgInRleHRFbmNvZGluZyI7CitzdGF0
aWMgY29uc3QgeG1sQ2hhciogY29uc3QgZnJhbWVGaWVsZFRhZyA9IEJBRF9DQVNUICJmcmFtZU5h
bWUiOworc3RhdGljIGNvbnN0IHhtbENoYXIqIGNvbnN0IGRhdGFGaWVsZFRhZyA9IEJBRF9DQVNU
ICJkYXRhIjsKKworUGFzc1JlZlB0cjxXZWJBcmNoaXZlQW5kcm9pZD4gV2ViQXJjaGl2ZUFuZHJv
aWQ6OmNyZWF0ZShQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gbWFpblJlc291cmNlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8UGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+ID4mIHN1YnJlc291cmNlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFBh
c3NSZWZQdHI8QXJjaGl2ZT4gPiYgc3ViZnJhbWVBcmNoaXZlcykKK3sKKyAgICBpZiAobWFpblJl
c291cmNlKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkFyY2hpdmVBbmRyb2lkKG1h
aW5SZXNvdXJjZSwgc3VicmVzb3VyY2VzLCBzdWJmcmFtZUFyY2hpdmVzKSk7CisgICAgcmV0dXJu
IDA7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQXJjaGl2ZUFuZHJvaWQ+IFdlYkFyY2hpdmVBbmRyb2lk
OjpjcmVhdGUoRnJhbWUqIGZyYW1lKQoreworICAgIFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1h
aW5SZXNvdXJjZSA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291
cmNlKCk7CisgICAgVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+IHN1YnJlc291
cmNlczsKKyAgICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlPiA+IHN1YmZyYW1lczsKKyAgICBp
bnQgY2hpbGRyZW4gPSBmcmFtZS0+dHJlZSgpLT5jaGlsZENvdW50KCk7CisKKyAgICBmcmFtZS0+
bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmdldFN1YnJlc291cmNlcyhzdWJyZXNvdXJjZXMp
OworCisgICAgZm9yIChpbnQgY2hpbGQgPSAwOyBjaGlsZCA8IGNoaWxkcmVuOyBjaGlsZCsrKQor
ICAgICAgICBzdWJmcmFtZXMuYXBwZW5kKGNyZWF0ZShmcmFtZS0+dHJlZSgpLT5jaGlsZChjaGls
ZCkpKTsKKworICAgIHJldHVybiBjcmVhdGUobWFpblJlc291cmNlLnJlbGVhc2UoKSwgc3VicmVz
b3VyY2VzLCBzdWJmcmFtZXMpOworfQorCitXZWJBcmNoaXZlQW5kcm9pZDo6V2ViQXJjaGl2ZUFu
ZHJvaWQoUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IG1haW5SZXNvdXJjZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlUmVz
b3VyY2U+ID4mIHN1YnJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlPiA+JiBzdWJmcmFtZUFyY2hpdmVzKQorewor
ICAgIHNldE1haW5SZXNvdXJjZShtYWluUmVzb3VyY2UpOworCisgICAgZm9yIChWZWN0b3I8UGFz
c1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+ID46Oml0ZXJhdG9yIHN1YnJlc291cmNlc0l0ZXJhdG9y
ID0gc3VicmVzb3VyY2VzLmJlZ2luKCk7IHN1YnJlc291cmNlc0l0ZXJhdG9yICE9IHN1YnJlc291
cmNlcy5lbmQoKTsgc3VicmVzb3VyY2VzSXRlcmF0b3IrKykKKyAgICAgICAgYWRkU3VicmVzb3Vy
Y2UoKnN1YnJlc291cmNlc0l0ZXJhdG9yKTsKKworICAgIGZvciAoVmVjdG9yPFBhc3NSZWZQdHI8
QXJjaGl2ZT4gPjo6aXRlcmF0b3Igc3ViZnJhbWVzSXRlcmF0b3IgPSBzdWJmcmFtZUFyY2hpdmVz
LmJlZ2luKCk7IHN1YmZyYW1lc0l0ZXJhdG9yICE9IHN1YmZyYW1lQXJjaGl2ZXMuZW5kKCk7IHN1
YmZyYW1lc0l0ZXJhdG9yKyspCisgICAgICAgIGFkZFN1YmZyYW1lQXJjaGl2ZSgqc3ViZnJhbWVz
SXRlcmF0b3IpOworfQorCitzdGF0aWMgYm9vbCBsb2FkQXJjaGl2ZVJlc291cmNlRmllbGQoeG1s
Tm9kZVB0ciByZXNvdXJjZU5vZGUsIGNvbnN0IHhtbENoYXIqIGZpZWxkTmFtZSwgVmVjdG9yPGNo
YXI+KiBvdXRwdXREYXRhKQoreworICAgIGlmICghb3V0cHV0RGF0YSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgb3V0cHV0RGF0YS0+Y2xlYXIoKTsKKworICAgIGNvbnN0IGNoYXIqIGJh
c2U2NERhdGEgPSAwOworCisgICAgZm9yICh4bWxOb2RlUHRyIGZpZWxkTm9kZSA9IHJlc291cmNl
Tm9kZS0+eG1sQ2hpbGRyZW5Ob2RlOyBmaWVsZE5vZGU7IGZpZWxkTm9kZSA9IGZpZWxkTm9kZS0+
bmV4dCkgeworICAgICAgICBpZiAoeG1sU3RyRXF1YWwoZmllbGROb2RlLT5uYW1lLCBmaWVsZE5h
bWUpKSB7CisgICAgICAgICAgICBiYXNlNjREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oeG1sTm9kZUdldENvbnRlbnQoZmllbGROb2RlLT54bWxDaGlsZHJlbk5vZGUpKTsKKyAg
ICAgICAgICAgIGlmICghYmFzZTY0RGF0YSkgeworICAgICAgICAgICAgICAgIC8vIEVtcHR5IGZp
ZWxkcyBzZWVtIHRvIGJyZWFrIGlmIHRoZXkgYXJlbid0IG51bGwgdGVybWluYXRlZC4KKyAgICAg
ICAgICAgICAgICBvdXRwdXREYXRhLT5hcHBlbmQoJ1wwJyk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAoIWJhc2U2NERhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGNvbnN0IGludCBiYXNlNjRTaXplID0geG1sU3RybGVuKEJBRF9DQVNUIGJhc2U2NERhdGEpOwor
CisgICAgcmV0dXJuIGJhc2U2NERlY29kZShiYXNlNjREYXRhLCBiYXNlNjRTaXplLCAqb3V0cHV0
RGF0YSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbG9hZEFyY2hpdmVS
ZXNvdXJjZUZpZWxkQnVmZmVyKHhtbE5vZGVQdHIgcmVzb3VyY2VOb2RlLCBjb25zdCB4bWxDaGFy
KiBmaWVsZE5hbWUpCit7CisgICAgVmVjdG9yPGNoYXI+IGZpZWxkRGF0YTsKKworICAgIGlmIChs
b2FkQXJjaGl2ZVJlc291cmNlRmllbGQocmVzb3VyY2VOb2RlLCBmaWVsZE5hbWUsICZmaWVsZERh
dGEpKQorICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZmllbGREYXRhLmRhdGEo
KSwgZmllbGREYXRhLnNpemUoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFN0cmlu
ZyBsb2FkQXJjaGl2ZVJlc291cmNlRmllbGRTdHJpbmcoeG1sTm9kZVB0ciByZXNvdXJjZU5vZGUs
IGNvbnN0IHhtbENoYXIqIGZpZWxkTmFtZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gZmllbGREYXRh
OworCisgICAgaWYgKGxvYWRBcmNoaXZlUmVzb3VyY2VGaWVsZChyZXNvdXJjZU5vZGUsIGZpZWxk
TmFtZSwgJmZpZWxkRGF0YSkpCisgICAgICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGZpZWxk
RGF0YS5kYXRhKCksIGZpZWxkRGF0YS5zaXplKCkpOworCisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCitzdGF0aWMgS1VSTCBsb2FkQXJjaGl2ZVJlc291cmNlRmllbGRVUkwoeG1sTm9kZVB0ciBy
ZXNvdXJjZU5vZGUsIGNvbnN0IHhtbENoYXIqIGZpZWxkTmFtZSkKK3sKKyAgICBWZWN0b3I8Y2hh
cj4gZmllbGREYXRhOworCisgICAgaWYgKGxvYWRBcmNoaXZlUmVzb3VyY2VGaWVsZChyZXNvdXJj
ZU5vZGUsIGZpZWxkTmFtZSwgJmZpZWxkRGF0YSkpCisgICAgICAgIHJldHVybiBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgU3RyaW5nOjpmcm9tVVRGOChmaWVsZERhdGEuZGF0YSgpLCBmaWVsZERhdGEu
c2l6ZSgpKSk7CisKKyAgICByZXR1cm4gS1VSTCgpOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+IGxvYWRBcmNoaXZlUmVzb3VyY2UoeG1sTm9kZVB0ciByZXNvdXJjZU5v
ZGUpCit7CisgICAgaWYgKCF4bWxTdHJFcXVhbChyZXNvdXJjZU5vZGUtPm5hbWUsIGFyY2hpdmVS
ZXNvdXJjZVRhZykpCisgICAgICAgIHJldHVybiAwOworCisgICAgS1VSTCB1cmwgPSBsb2FkQXJj
aGl2ZVJlc291cmNlRmllbGRVUkwocmVzb3VyY2VOb2RlLCB1cmxGaWVsZFRhZyk7CisgICAgaWYg
KHVybC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcgbWltZVR5cGUg
PSBsb2FkQXJjaGl2ZVJlc291cmNlRmllbGRTdHJpbmcocmVzb3VyY2VOb2RlLCBtaW1lRmllbGRU
YWcpOworICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBTdHJpbmcgdGV4dEVuY29kaW5nID0gbG9hZEFyY2hpdmVSZXNvdXJjZUZpZWxkU3RyaW5nKHJl
c291cmNlTm9kZSwgZW5jb2RpbmdGaWVsZFRhZyk7CisgICAgaWYgKHRleHRFbmNvZGluZy5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHJpbmcgZnJhbWVOYW1lID0gbG9hZEFy
Y2hpdmVSZXNvdXJjZUZpZWxkU3RyaW5nKHJlc291cmNlTm9kZSwgZnJhbWVGaWVsZFRhZyk7Cisg
ICAgaWYgKGZyYW1lTmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gbG9hZEFyY2hpdmVSZXNvdXJjZUZpZWxkQnVmZmVyKHJl
c291cmNlTm9kZSwgZGF0YUZpZWxkVGFnKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIEFyY2hpdmVSZXNvdXJjZTo6Y3JlYXRlKGRhdGEucmVsZWFzZSgp
LCB1cmwsIG1pbWVUeXBlLCB0ZXh0RW5jb2RpbmcsIGZyYW1lTmFtZSk7Cit9CisKK3N0YXRpYyBQ
YXNzUmVmUHRyPFdlYkFyY2hpdmVBbmRyb2lkPiBsb2FkQXJjaGl2ZSh4bWxOb2RlUHRyIGFyY2hp
dmVOb2RlKQoreworICAgIHhtbE5vZGVQdHIgcmVzb3VyY2VOb2RlID0gMDsKKworICAgIFJlZlB0
cjxBcmNoaXZlUmVzb3VyY2U+IG1haW5SZXNvdXJjZTsKKyAgICBWZWN0b3I8UGFzc1JlZlB0cjxB
cmNoaXZlUmVzb3VyY2U+ID4gc3VicmVzb3VyY2VzOworICAgIFZlY3RvcjxQYXNzUmVmUHRyPEFy
Y2hpdmU+ID4gc3ViZnJhbWVzOworCisgICAgaWYgKCF4bWxTdHJFcXVhbChhcmNoaXZlTm9kZS0+
bmFtZSwgYXJjaGl2ZVRhZykpCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChyZXNvdXJj
ZU5vZGUgPSBhcmNoaXZlTm9kZS0+eG1sQ2hpbGRyZW5Ob2RlOyByZXNvdXJjZU5vZGU7IHJlc291
cmNlTm9kZSA9IHJlc291cmNlTm9kZS0+bmV4dCkgeworICAgICAgICBpZiAoeG1sU3RyRXF1YWwo
cmVzb3VyY2VOb2RlLT5uYW1lLCBtYWluUmVzb3VyY2VUYWcpKSB7CisgICAgICAgICAgICByZXNv
dXJjZU5vZGUgPSByZXNvdXJjZU5vZGUtPnhtbENoaWxkcmVuTm9kZTsKKyAgICAgICAgICAgIGlm
ICghcmVzb3VyY2VOb2RlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWFp
blJlc291cmNlID0gbG9hZEFyY2hpdmVSZXNvdXJjZShyZXNvdXJjZU5vZGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFtYWluUmVzb3VyY2UpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgZm9yIChyZXNvdXJjZU5vZGUgPSBhcmNoaXZlTm9kZS0+eG1s
Q2hpbGRyZW5Ob2RlOyByZXNvdXJjZU5vZGU7IHJlc291cmNlTm9kZSA9IHJlc291cmNlTm9kZS0+
bmV4dCkgeworICAgICAgICBpZiAoeG1sU3RyRXF1YWwocmVzb3VyY2VOb2RlLT5uYW1lLCBzdWJy
ZXNvdXJjZXNUYWcpKSB7CisgICAgICAgICAgICBmb3IgKHJlc291cmNlTm9kZSA9IHJlc291cmNl
Tm9kZS0+eG1sQ2hpbGRyZW5Ob2RlOyByZXNvdXJjZU5vZGU7IHJlc291cmNlTm9kZSA9IHJlc291
cmNlTm9kZS0+bmV4dCkgeworICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291
cmNlPiBzdWJyZXNvdXJjZSA9IGxvYWRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2VOb2RlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXN1YnJlc291cmNlKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXMuYXBwZW5kKHN1YnJlc291cmNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChyZXNvdXJjZU5vZGUgPSBhcmNoaXZlTm9kZS0+eG1sQ2hpbGRyZW5Ob2RlOyByZXNvdXJj
ZU5vZGU7IHJlc291cmNlTm9kZSA9IHJlc291cmNlTm9kZS0+bmV4dCkgeworICAgICAgICBpZiAo
eG1sU3RyRXF1YWwocmVzb3VyY2VOb2RlLT5uYW1lLCBzdWJmcmFtZXNUYWcpKSB7CisgICAgICAg
ICAgICBmb3IgKHJlc291cmNlTm9kZSA9IHJlc291cmNlTm9kZS0+eG1sQ2hpbGRyZW5Ob2RlOyBy
ZXNvdXJjZU5vZGU7IHJlc291cmNlTm9kZSA9IHJlc291cmNlTm9kZS0+bmV4dCkgeworICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8V2ViQXJjaGl2ZUFuZHJvaWQ+IHN1YmZyYW1lID0gbG9hZEFy
Y2hpdmUocmVzb3VyY2VOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1YmZyYW1lKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBzdWJmcmFtZXMuYXBwZW5k
KHN1YmZyYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIFdlYkFyY2hpdmVBbmRyb2lkOjpjcmVhdGUobWFpblJlc291
cmNlLnJlbGVhc2UoKSwgc3VicmVzb3VyY2VzLCBzdWJmcmFtZXMpOworfQorCitzdGF0aWMgUGFz
c1JlZlB0cjxXZWJBcmNoaXZlQW5kcm9pZD4gY3JlYXRlQXJjaGl2ZUZvckVycm9yKCkKK3sKKyAg
ICAvLyBXaGVuIGFuIGFyY2hpdmUgY2Fubm90IGJlIGxvYWRlZCwgd2UgcmV0dXJuIGFuIGVtcHR5
IGFyY2hpdmUgaW5zdGVhZC4KKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBtYWluUmVzb3Vy
Y2UgPSBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZSgKKyAgICAgICAgU2hhcmVkQnVmZmVyOjpjcmVh
dGUoKSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIFN0cmluZzo6ZnJvbVVURjgoImZpbGU6Ly8vZHVt
bXkiKSksCisgICAgICAgIFN0cmluZzo6ZnJvbVVURjgoInRleHQvcGxhaW4iKSwgU3RyaW5nKCIi
KSwgU3RyaW5nKCIiKSk7CisgICAgVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+
IHN1YnJlc291cmNlczsKKyAgICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlPiA+IHN1YmZyYW1l
czsKKworICAgIHJldHVybiBXZWJBcmNoaXZlQW5kcm9pZDo6Y3JlYXRlKG1haW5SZXNvdXJjZS5y
ZWxlYXNlKCksIHN1YnJlc291cmNlcywgc3ViZnJhbWVzKTsKK30KKworUGFzc1JlZlB0cjxXZWJB
cmNoaXZlQW5kcm9pZD4gV2ViQXJjaGl2ZUFuZHJvaWQ6OmNyZWF0ZShTaGFyZWRCdWZmZXIqIGJ1
ZmZlcikKK3sKKyAgICBjb25zdCBjaGFyKiBjb25zdCBub0Jhc2VVcmwgPSAiIjsKKyAgICBjb25z
dCBjaGFyKiBjb25zdCBkZWZhdWx0RW5jb2RpbmcgPSAwOworICAgIGNvbnN0IGludCBub1BhcnNl
ck9wdGlvbnMgPSAwOworCisgICAgeG1sRG9jUHRyIGRvYyA9IHhtbFJlYWRNZW1vcnkoYnVmZmVy
LT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpLCBub0Jhc2VVcmwsIGRlZmF1bHRFbmNvZGluZywgbm9Q
YXJzZXJPcHRpb25zKTsKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUFyY2hp
dmVGb3JFcnJvcigpOworCisgICAgeG1sTm9kZVB0ciByb290ID0geG1sRG9jR2V0Um9vdEVsZW1l
bnQoZG9jKTsKKyAgICBpZiAoIXJvb3QpIHsKKyAgICAgICAgeG1sRnJlZURvYyhkb2MpOworICAg
ICAgICByZXR1cm4gY3JlYXRlQXJjaGl2ZUZvckVycm9yKCk7CisgICAgfQorCisgICAgUmVmUHRy
PFdlYkFyY2hpdmVBbmRyb2lkPiBhcmNoaXZlID0gbG9hZEFyY2hpdmUocm9vdCk7CisgICAgaWYg
KCFhcmNoaXZlKSB7CisgICAgICAgIHhtbEZyZWVEb2MoZG9jKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUFyY2hpdmVGb3JFcnJvcigpOworICAgIH0KKworICAgIHhtbEZyZWVEb2MoZG9jKTsKKyAg
ICByZXR1cm4gYXJjaGl2ZS5yZWxlYXNlKCk7Cit9CisKK3N0YXRpYyBib29sIHNhdmVBcmNoaXZl
UmVzb3VyY2VGaWVsZCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwgY29uc3QgeG1sQ2hhciogdGFn
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0geG1sVGV4
dFdyaXRlclN0YXJ0RWxlbWVudCh3cml0ZXIsIHRhZyk7CisgICAgaWYgKHJlc3VsdCA8IDApCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChzaXplID4gMCkgeworICAgICAgICBWZWN0
b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICAgICAgYmFzZTY0RW5jb2RlKGRhdGEsIHNpemUsIGJh
c2U2NERhdGEsIGZhbHNlKTsKKyAgICAgICAgaWYgKGJhc2U2NERhdGEuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJlc3VsdCA9IHhtbFRleHRXcml0ZXJX
cml0ZVJhd0xlbih3cml0ZXIsIEJBRF9DQVNUIGJhc2U2NERhdGEuZGF0YSgpLCBiYXNlNjREYXRh
LnNpemUoKSk7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJlc3VsdCA9IHhtbFRleHRXcml0ZXJFbmRFbGVtZW50KHdyaXRl
cik7CisgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgc2F2ZUFyY2hpdmVSZXNvdXJjZUZpZWxkKHhtbFRl
eHRXcml0ZXJQdHIgd3JpdGVyLCBjb25zdCB4bWxDaGFyKiB0YWcsIFNoYXJlZEJ1ZmZlciogYnVm
ZmVyKQoreworICAgIHJldHVybiBzYXZlQXJjaGl2ZVJlc291cmNlRmllbGQod3JpdGVyLCB0YWcs
IGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7Cit9CisKK3N0YXRpYyBib29sIHNhdmVB
cmNoaXZlUmVzb3VyY2VGaWVsZCh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwgY29uc3QgeG1sQ2hh
ciogdGFnLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBDU3RyaW5nIHV0ZjhTdHJpbmcg
PSBzdHJpbmcudXRmOCgpOworCisgICAgcmV0dXJuIHNhdmVBcmNoaXZlUmVzb3VyY2VGaWVsZCh3
cml0ZXIsIHRhZywgdXRmOFN0cmluZy5kYXRhKCksIHV0ZjhTdHJpbmcubGVuZ3RoKCkpOworfQor
CitzdGF0aWMgYm9vbCBzYXZlQXJjaGl2ZVJlc291cmNlKHhtbFRleHRXcml0ZXJQdHIgd3JpdGVy
LCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJjZT4gcmVzb3VyY2UpCit7CisgICAgaW50IHJlc3Vs
dCA9IHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQod3JpdGVyLCBhcmNoaXZlUmVzb3VyY2VUYWcp
OworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IXNhdmVBcmNoaXZlUmVzb3VyY2VGaWVsZCh3cml0ZXIsIHVybEZpZWxkVGFnLCByZXNvdXJjZS0+
dXJsKCkuc3RyaW5nKCkpCisgICAgICAgIHx8ICFzYXZlQXJjaGl2ZVJlc291cmNlRmllbGQod3Jp
dGVyLCBtaW1lRmllbGRUYWcsIHJlc291cmNlLT5taW1lVHlwZSgpKQorICAgICAgICB8fCAhc2F2
ZUFyY2hpdmVSZXNvdXJjZUZpZWxkKHdyaXRlciwgZW5jb2RpbmdGaWVsZFRhZywgcmVzb3VyY2Ut
PnRleHRFbmNvZGluZygpKQorICAgICAgICB8fCAhc2F2ZUFyY2hpdmVSZXNvdXJjZUZpZWxkKHdy
aXRlciwgZnJhbWVGaWVsZFRhZywgcmVzb3VyY2UtPmZyYW1lTmFtZSgpKQorICAgICAgICB8fCAh
c2F2ZUFyY2hpdmVSZXNvdXJjZUZpZWxkKHdyaXRlciwgZGF0YUZpZWxkVGFnLCByZXNvdXJjZS0+
ZGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmVzdWx0ID0geG1sVGV4dFdy
aXRlckVuZEVsZW1lbnQod3JpdGVyKTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBzYXZlQXJjaGl2
ZSh4bWxUZXh0V3JpdGVyUHRyIHdyaXRlciwgUGFzc1JlZlB0cjxBcmNoaXZlPiBwcnBBcmNoaXZl
KQoreworICAgIFJlZlB0cjxBcmNoaXZlPiBhcmNoaXZlID0gcHJwQXJjaGl2ZTsKKworICAgIGlu
dCByZXN1bHQgPSB4bWxUZXh0V3JpdGVyU3RhcnRFbGVtZW50KHdyaXRlciwgYXJjaGl2ZVRhZyk7
CisgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3Vs
dCA9IHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQod3JpdGVyLCBtYWluUmVzb3VyY2VUYWcpOwor
ICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXNh
dmVBcmNoaXZlUmVzb3VyY2Uod3JpdGVyLCBhcmNoaXZlLT5tYWluUmVzb3VyY2UoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IHhtbFRleHRXcml0ZXJFbmRFbGVtZW50
KHdyaXRlcik7CisgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJlc3VsdCA9IHhtbFRleHRXcml0ZXJTdGFydEVsZW1lbnQod3JpdGVyLCBzdWJyZXNvdXJj
ZXNUYWcpOworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBmb3IgKFZlY3Rvcjxjb25zdCBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+OjppdGVyYXRvciBz
dWJyZXNvdXJjZSA9IGFyY2hpdmUtPnN1YnJlc291cmNlcygpLmJlZ2luKCk7CisgICAgICAgICBz
dWJyZXNvdXJjZSAhPSBhcmNoaXZlLT5zdWJyZXNvdXJjZXMoKS5lbmQoKTsKKyAgICAgICAgIHN1
YnJlc291cmNlKyspIHsKKyAgICAgICAgaWYgKCFzYXZlQXJjaGl2ZVJlc291cmNlKHdyaXRlciwg
KnN1YnJlc291cmNlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXN1bHQgPSB4bWxUZXh0V3JpdGVyRW5kRWxlbWVudCh3cml0ZXIpOworICAgIGlmIChyZXN1bHQg
PCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSB4bWxUZXh0V3JpdGVy
U3RhcnRFbGVtZW50KHdyaXRlciwgc3ViZnJhbWVzVGFnKTsKKyAgICBpZiAocmVzdWx0IDwgMCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChWZWN0b3I8Y29uc3QgUmVmUHRyPEFy
Y2hpdmU+ID46Oml0ZXJhdG9yIHN1YmZyYW1lID0gYXJjaGl2ZS0+c3ViZnJhbWVBcmNoaXZlcygp
LmJlZ2luKCk7IHN1YmZyYW1lICE9IGFyY2hpdmUtPnN1YmZyYW1lQXJjaGl2ZXMoKS5lbmQoKTsg
c3ViZnJhbWUrKykgeworICAgICAgICBpZiAoIXNhdmVBcmNoaXZlKHdyaXRlciwgKnN1YmZyYW1l
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXN1bHQgPSB4bWxU
ZXh0V3JpdGVyRW5kRWxlbWVudCh3cml0ZXIpOworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJBcmNoaXZlQW5k
cm9pZDo6c2F2ZVdlYkFyY2hpdmUoeG1sVGV4dFdyaXRlclB0ciB3cml0ZXIpCit7CisgICAgY29u
c3QgY2hhciogY29uc3QgZGVmYXVsdFhtbFZlcnNpb24gPSAwOworICAgIGNvbnN0IGNoYXIqIGNv
bnN0IGRlZmF1bHRFbmNvZGluZyA9IDA7CisgICAgY29uc3QgY2hhciogY29uc3QgZGVmYXVsdFN0
YW5kYWxvbmUgPSAwOworCisgICAgaW50IHJlc3VsdCA9IHhtbFRleHRXcml0ZXJTdGFydERvY3Vt
ZW50KHdyaXRlciwgZGVmYXVsdFhtbFZlcnNpb24sIGRlZmF1bHRFbmNvZGluZywgZGVmYXVsdFN0
YW5kYWxvbmUpOworICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIXNhdmVBcmNoaXZlKHdyaXRlciwgdGhpcykpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJlc3VsdCA9IHhtbFRleHRXcml0ZXJFbmREb2N1bWVudCh3cml0ZXIpOworICAg
IGlmIChyZXN1bHQ8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9hcmNoaXZlL2FuZHJvaWQvV2ViQXJjaGl2
ZUFuZHJvaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcmNoaXZlL2FuZHJvaWQv
V2ViQXJjaGl2ZUFuZHJvaWQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvbG9hZGVyL2FyY2hp
dmUvYW5kcm9pZC9XZWJBcmNoaXZlQW5kcm9pZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2pl
Y3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYkFyY2hpdmVBbmRyb2lkX2gKKyNkZWZpbmUgV2ViQXJjaGl2
ZUFuZHJvaWRfaAorCisjaW5jbHVkZSAiQXJjaGl2ZS5oIgorI2luY2x1ZGUgIkFyY2hpdmVSZXNv
dXJjZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlIDxsaWJ4bWwveG1sd3JpdGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgV2ViQXJjaGl2ZUFuZHJvaWQgOiBwdWJsaWMgQXJjaGl2ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViQXJjaGl2ZUFuZHJvaWQ+IGNyZWF0ZShQYXNzUmVmUHRyPEFyY2hp
dmVSZXNvdXJjZT4gbWFpblJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+JiBz
dWJyZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8UGFzc1JlZlB0cjxBcmNoaXZlPiA+JiBzdWJmcmFtZUFyY2hpdmVzKTsKKwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkFyY2hpdmVBbmRyb2lkPiBjcmVhdGUoRnJhbWUqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJBcmNoaXZlQW5kcm9pZD4gY3JlYXRlKFNoYXJlZEJ1
ZmZlciopOworCisgICAgYm9vbCBzYXZlV2ViQXJjaGl2ZSh4bWxUZXh0V3JpdGVyUHRyKTsKKwor
cHJpdmF0ZToKKyAgICBXZWJBcmNoaXZlQW5kcm9pZChQYXNzUmVmUHRyPEFyY2hpdmVSZXNvdXJj
ZT4gbWFpblJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxQYXNzUmVmUHRy
PEFyY2hpdmVSZXNvdXJjZT4gPiYgc3VicmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxQYXNzUmVmUHRyPEFyY2hpdmU+ID4mIHN1YmZyYW1lQXJjaGl2ZXMpOworfTsKKwor
fQorCisjZW5kaWYgLy8gV2ViQXJjaGl2ZUFuZHJvaWRfaAo=
</data>
<flag name="review"
          id="51293"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>