<?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>23999</bug_id>
          
          <creation_ts>2009-02-17 16:26:16 -0800</creation_ts>
          <short_desc>Split off MIME Type parsing into its own class</short_desc>
          <delta_ts>2009-02-21 20:24:06 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>hyatt</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>110036</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-17 16:26:16 -0800</bug_when>
    <thetext>Bug 23797 (committed as revision 40925) adds MIMETypeRegistry::getParameterFromMIMEType/stripParametersFromMIMEType, which breaks both chromium and wx builds (they both have their own implementations of MIMETypeRegistry).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110037</commentid>
    <comment_count>1</comment_count>
      <attachid>27740</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-17 16:26:58 -0800</bug_when>
    <thetext>Created attachment 27740
Split off MIME type parsing into its own class, v1

 WebCore/WebCore.xcodeproj/project.pbxproj |    8 +++
 WebCore/html/HTMLMediaElement.cpp         |   10 ++---
 WebCore/platform/MIMETypeParser.cpp       |   70 +++++++++++++++++++++++++++++
 WebCore/platform/MIMETypeParser.h         |   52 +++++++++++++++++++++
 WebCore/platform/MIMETypeRegistry.cpp     |   36 ---------------
 WebCore/platform/MIMETypeRegistry.h       |    5 +--
 WebCore/platform/graphics/MediaPlayer.cpp |    3 +-
 7 files changed, 137 insertions(+), 47 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110045</commentid>
    <comment_count>2</comment_count>
      <attachid>27740</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-17 19:48:46 -0800</bug_when>
    <thetext>Comment on attachment 27740
Split off MIME type parsing into its own class, v1

Taking this out of review queue, new patch coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110047</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-17 20:51:13 -0800</bug_when>
    <thetext>What the devil?! ContentType is already defined in RenderStyleConstants. And it doesn&apos;t even mean the same thing. Crud.

Ok, anybody else with clever naming ideas?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110048</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-17 21:07:34 -0800</bug_when>
    <thetext>I wonder if hyatt may complain if I rename RenderStyleConstants&apos; ContentType to GeneratedContentType?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110050</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-02-17 22:24:47 -0800</bug_when>
    <thetext>Following the (obsolete) naming scheme used for those style enums, you could rename it to EContentType. They should really be scoped somehow (perhaps under RenderStyle), they are polluting the WebCore namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110072</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-18 07:25:37 -0800</bug_when>
    <thetext>Hyatt suggested StyleContentType over IRC, so I am going with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110075</commentid>
    <comment_count>7</comment_count>
      <attachid>27750</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-18 09:45:45 -0800</bug_when>
    <thetext>Created attachment 27750
Split off MIME type parsing into its own class, v2

 WebCore/ChangeLog                              |   29 +++++++++
 WebCore/GNUmakefile.am                         |    2 +
 WebCore/WebCore.pro                            |    1 +
 WebCore/WebCore.scons                          |    1 +
 WebCore/WebCore.vcproj/WebCore.vcproj          |    8 +++
 WebCore/WebCore.xcodeproj/project.pbxproj      |    8 +++
 WebCore/WebCoreSources.bkl                     |    1 +
 WebCore/html/HTMLMediaElement.cpp              |   10 +--
 WebCore/platform/ContentType.cpp               |   77 ++++++++++++++++++++++++
 WebCore/platform/ContentType.h                 |   52 ++++++++++++++++
 WebCore/platform/MIMETypeRegistry.cpp          |   36 -----------
 WebCore/platform/MIMETypeRegistry.h            |    3 -
 WebCore/platform/graphics/MediaPlayer.cpp      |    3 +-
 WebCore/rendering/style/ContentData.h          |    2 +-
 WebCore/rendering/style/RenderStyleConstants.h |    2 +-
 15 files changed, 187 insertions(+), 48 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110076</commentid>
    <comment_count>8</comment_count>
      <attachid>27750</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-18 09:48:03 -0800</bug_when>
    <thetext>Comment on attachment 27750
Split off MIME type parsing into its own class, v2

This is part one of the refactoring --splitting off ContentType into its own type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110077</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-18 09:51:18 -0800</bug_when>
    <thetext>One thought. Perhaps in part two of this, we should re-orient MIMETypeRegistry to be an implementation class, rather than the utility class that it is right now. In other words, the flow should go like this:

ContentType::createFromUrl(url).isSupported(ImageMediaType)

where ContentType uses ContentTypeRegistry, but all the queries go through ContentType. WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110321</commentid>
    <comment_count>10</comment_count>
      <attachid>27750</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-02-19 16:41:54 -0800</bug_when>
    <thetext>Comment on attachment 27750
Split off MIME type parsing into its own class, v2

r=me

&gt; +                    if (!MediaPlayer::supportsType(contentType.type(), contentType.parameter(&quot;codecs&quot;)))
&gt;                          continue;

It would be nice to make MediaPlayer::supportsType just take ContentType. Does not need to be in this patch though...

&gt; +    class ContentType {
&gt; +    public:
&gt; +        ContentType(const String&amp; type);
&gt; +
&gt; +        String parameter(const String&amp; parameterName);
&gt; +        String type();

These can be const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110485</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-21 20:24:06 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/41113.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27740</attachid>
            <date>2009-02-17 16:26:58 -0800</date>
            <delta_ts>2009-02-17 19:48:46 -0800</delta_ts>
            <desc>Split off MIME type parsing into its own class, v1</desc>
            <filename>Split-off-MIME-type-parsing-into-its-own-class-v1.patch</filename>
            <type>text/plain</type>
            <size>14325</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">YjY2ZGVjYmE4M2YwYzkzNzI4MmRjYmNmN2Y1NWQzY2ZlZTJhN2I3YgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjNzRmZDg4Li5hMjU3NDdiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjIyLDYgKzYyMiw4IEBA
CiAJCTQxNkU3NUNDMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1Q0EwRURGOTBD
NzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgKi87IH07CiAJCTQxNkY0NUYwMEVEN0Iz
MTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkY0NUVGMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJp
bmcuaCAqLzsgfTsKIAkJNDFDNzYwQjEwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUM3NjBCMDBF
REUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0MUQwMTVDQTBGNEI1QzcxMDA0QTY2MkYgLyogTUlN
RVR5cGVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxRDAxNUM4MEY0QjVDNzEwMDRBNjYyRiAvKiBNSU1FVHlwZVBhcnNlci5oICovOyB9Owor
CQk0MUQwMTVDQjBGNEI1QzcxMDA0QTY2MkYgLyogTUlNRVR5cGVQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMDE1QzkwRjRCNUM3MTAw
NEE2NjJGIC8qIE1JTUVUeXBlUGFyc2VyLmNwcCAqLzsgfTsKIAkJNDFGMUQyMUYwRUYzNUMyQTAw
REE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFGMUQyMUQwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlw
dENhY2hlZEZyYW1lRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQxRjFEMjIwMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFt
ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDFGMUQyMUUwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAgKi87
IH07CiAJCTQ0MTUyOTJFMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDE1Mjky
QzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovOyB9OwpAQCAt
NTU0OSw2ICs1NTUxLDggQEAKIAkJNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENh
bGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRD
YWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZGNDVFRjBFRDdC
MzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcmlwdFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MUM3
NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2NyaXB0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNDFEMDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8qIE1JTUVUeXBlUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1JTUVUeXBlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQxRDAxNUM5MEY0QjVDNzEwMDRBNjYyRiAvKiBNSU1FVHlwZVBhcnNl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNSU1FVHlwZVBhcnNl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxRjFEMjFEMEVGMzVDMkEwMERB
ODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxRjFEMjFFMEVGMzVDMkEwMERBODc1MyAvKiBTY3JpcHRDYWNoZWRGcmFtZURhdGEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMwRTFBRThB
MDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTM3NDgsNiArMTM3NTIsOCBAQAogCQkJCTkzNTIwN0JEMDlCRDQxMEEw
MEYyMDM4RCAvKiBMb2NhbGl6ZWRTdHJpbmdzLmggKi8sCiAJCQkJQTgyMzlERkUwOUIzQ0Y4QTAw
QjYwNjQxIC8qIExvZ2dpbmcuY3BwICovLAogCQkJCUE4MjM5REZGMDlCM0NGOEEwMEI2MDY0MSAv
KiBMb2dnaW5nLmggKi8sCisJCQkJNDFEMDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8qIE1JTUVUeXBl
UGFyc2VyLmggKi8sCisJCQkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIE1JTUVUeXBlUGFy
c2VyLmNwcCAqLywKIAkJCQlCQzc3MkM0QzBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdp
c3RyeS5jcHAgKi8sCiAJCQkJQkM3NzJDNEQwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVn
aXN0cnkuaCAqLywKIAkJCQk0QjI3MDhDNTBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5o
ICovLApAQCAtMTY3NzMsNiArMTY3NzksNyBAQAogCQkJCTFBNTY5RDI1MEQ3RTJCODIwMDdDMzk4
MyAvKiBydW50aW1lX3Jvb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTFFMDk5RTY0OTIw
MDU2RTU4MSAvKiB2aXNpYmxlX3VuaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTdDODEyMzBG
MkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk0MUQwMTVDQTBGNEI1QzcxMDA0QTY2MkYgLyogTUlNRVR5cGVQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMTg3NjEsNiArMTg3NjgsNyBAQAogCQkJCTFBNTY5RDI0MEQ3RTJCODIwMDdDMzk4
MyAvKiBydW50aW1lX3Jvb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFMUQwOTlFNjQ5
MjAwNTZFNTgxIC8qIHZpc2libGVfdW5pdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3Qzgx
MjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0MUQwMTVDQjBGNEI1QzcxMDA0QTY2MkYgLyogTUlNRVR5cGVQYXJzZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAgYi9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXggM2RiYjAyZC4uYTk3
NGZhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBi
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2lu
Y2x1ZGUgIk1lZGlhRXJyb3IuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJN
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVQYXJzZXIuaCIKICNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNpbmNs
dWRlICJQYWdlLmgiCkBAIC04OTksMTUgKzkwMCwxMiBAQCBTdHJpbmcgSFRNTE1lZGlhRWxlbWVu
dDo6c2VsZWN0TWVkaWFVUkwoU3RyaW5nJiBtZWRpYU1JTUVUeXBlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlm
IChzb3VyY2UtPmhhc0F0dHJpYnV0ZSh0eXBlQXR0cikpIHsKLSAgICAgICAgICAgICAgICAgICAg
U3RyaW5nIHR5cGUgPSBzb3VyY2UtPnR5cGUoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFBhcmFtZXRl
ckZyb21NSU1FVHlwZSh0eXBlLCAiY29kZWNzIik7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmlu
ZyBzaW1wbGVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVU
eXBlKHR5cGUpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghTWVkaWFQbGF5ZXI6OnN1cHBv
cnRzVHlwZShzaW1wbGVUeXBlLCBjb2RlY3MpKQorICAgICAgICAgICAgICAgICAgICBNSU1FVHlw
ZVBhcnNlciBtaW1lVHlwZShzb3VyY2UtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShtaW1lVHlwZS50eXBlKCksIG1pbWVUeXBlLnBh
cmFtZXRlcigiY29kZWNzIikpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHR5cGUgd2l0aCBhbGwgcGFyYW1ldGVycyBp
biBwbGFjZSBzbyB0aGUgbWVkaWEgZW5naW5lIGNhbiB1c2UgdGhlbQotICAgICAgICAgICAgICAg
ICAgICBtZWRpYU1JTUVUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAgICAgICAgbWVkaWFNSU1F
VHlwZSA9IG1pbWVUeXBlLnJhdygpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBtZWRpYVNyYyA9IHNvdXJjZS0+c3JjKCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUGFyc2VyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjFiZGE2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L01JTUVUeXBlUGFyc2VyLmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJNSU1FVHlwZVBhcnNlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0
cmluZyBNSU1FVHlwZVBhcnNlcjo6cGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyTmFt
ZSkKK3sKKyAgICBTdHJpbmcgcGFyYW1ldGVyVmFsdWU7CisgICAgCisgICAgLy8gYSBNSU1FIHR5
cGUgY2FuIGhhdmUgb25lIG9yIG1vcmUgInBhcmFtPXZhbHVlIiBhZnRlciBhIHNlbWktY29sb24s
IGFuZCBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IHNlbWktY29sb25zCisgICAgaW50IHNl
bWkgPSBtX3R5cGUuZmluZCgnOycpOworICAgIGlmIChzZW1pICE9IC0xKSB7CisgICAgICAgIGlu
dCBzdGFydCA9IG1fdHlwZS5maW5kKHBhcmFtZXRlck5hbWUsIHNlbWkgKyAxLCBmYWxzZSk7Cisg
ICAgICAgIGlmIChzdGFydCAhPSAtMSkgeworICAgICAgICAgICAgc3RhcnQgPSBtX3R5cGUuZmlu
ZCgnPScsIHN0YXJ0ICsgNik7CisgICAgICAgICAgICBpZiAoc3RhcnQgIT0gLTEpIHsKKyAgICAg
ICAgICAgICAgICBpbnQgZW5kID0gbV90eXBlLmZpbmQoJzsnLCBzdGFydCArIDYpOworICAgICAg
ICAgICAgICAgIGlmIChlbmQgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGVuZCA9IG1fdHlw
ZS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZSA9IG1fdHlwZS5zdWJz
dHJpbmcoc3RhcnQgKyAxLCBlbmQgLSAoc3RhcnQgKyAxKSkuc3RyaXBXaGl0ZVNwYWNlKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHBhcmFtZXRl
clZhbHVlOworfQorCitTdHJpbmcgTUlNRVR5cGVQYXJzZXI6OnR5cGUoKQoreworICAgIFN0cmlu
ZyBzdHJpcHBlZFR5cGUgPSBtX3R5cGUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgCisgICAgLy8g
InR5cGUiIGNhbiBoYXZlIHBhcmFtZXRlcnMgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBzdHJpcCB0aGVt
CisgICAgaW50IHNlbWkgPSBzdHJpcHBlZFR5cGUuZmluZCgnOycpOworICAgIGlmIChzZW1pICE9
IC0xKQorICAgICAgICBzdHJpcHBlZFR5cGUgPSBzdHJpcHBlZFR5cGUubGVmdChzZW1pKS5zdHJp
cFdoaXRlU3BhY2UoKTsKKyAgICAKKyAgICByZXR1cm4gc3RyaXBwZWRUeXBlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBl
UGFyc2VyLmggYi9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUGFyc2VyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhYWY3OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVQYXJzZXIuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTUlN
RVR5cGVQYXJzZXJfaAorI2RlZmluZSBNSU1FVHlwZVBhcnNlcl9oCisKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgTUlN
RVR5cGVQYXJzZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgTUlNRVR5cGVQYXJzZXIoY29uc3Qg
U3RyaW5nJiB0eXBlKQorICAgICAgICAgICAgOiBtX3R5cGUodHlwZS5zdHJpcFdoaXRlU3BhY2Uo
KSkgeyB9CisgICAgICAgIAorICAgICAgICBTdHJpbmcgcGFyYW1ldGVyKGNvbnN0IFN0cmluZyYg
cGFyYW1ldGVyTmFtZSk7CisgICAgICAgIFN0cmluZyB0eXBlKCk7CisgICAgICAgIFN0cmluZyBy
YXcoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBTdHJp
bmcgbV90eXBlOyAKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBNSU1FVHlwZVBhcnNlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBl
UmVnaXN0cnkuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAppbmRl
eCA0NWJmNDE3Li44Zjk4NzM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBl
UmVnaXN0cnkuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAK
QEAgLTIzOSw0MiArMjM5LDYgQEAgU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBl
Rm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW0iOwogfQogCi1TdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1ldGVyRnJv
bU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJOYW1l
KQotewotICAgIFN0cmluZyBwYXJhbWV0ZXJWYWx1ZTsKLQotICAgIC8vIGEgTUlNRSB0eXBlIGNh
biBoYXZlIG9uZSBvciBtb3JlICJwYXJhbT12YWx1ZSIgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBhbmQg
c2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlciBieSBzZW1pLWNvbG9ucwotICAgIGludCBzZW1pID0g
dHlwZS5maW5kKCc7Jyk7Ci0gICAgaWYgKHNlbWkgIT0gLTEpIHsKLSAgICAgICAgaW50IHN0YXJ0
ID0gdHlwZS5maW5kKHBhcmFtZXRlck5hbWUsIHNlbWkgKyAxLCBmYWxzZSk7Ci0gICAgICAgIGlm
IChzdGFydCAhPSAtMSkgewotICAgICAgICAgICAgc3RhcnQgPSB0eXBlLmZpbmQoJz0nLCBzdGFy
dCArIDYpOwotICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAg
aW50IGVuZCA9IHR5cGUuZmluZCgnOycsIHN0YXJ0ICsgNik7Ci0gICAgICAgICAgICAgICAgaWYg
KGVuZCA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZW5kID0gdHlwZS5sZW5ndGgoKTsKLSAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHR5cGUuc3Vic3RyaW5nKHN0YXJ0ICsgMSwg
ZW5kIC0gKHN0YXJ0ICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcmFtZXRlclZhbHVlOwotfQotCi1TdHJpbmcg
TUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJzRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCi17Ci0gICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1pbWVUeXBlLnN0cmlw
V2hpdGVTcGFjZSgpOwotCi0gICAgLy8gInR5cGUiIGNhbiBoYXZlIHBhcmFtZXRlcnMgYWZ0ZXIg
YSBzZW1pLWNvbG9uLCBzdHJpcCB0aGVtCi0gICAgaW50IHNlbWkgPSBzdHJpcHBlZFR5cGUuZmlu
ZCgnOycpOwotICAgIGlmIChzZW1pICE9IC0xKQotICAgICAgICBzdHJpcHBlZFR5cGUgPSBzdHJp
cHBlZFR5cGUubGVmdChzZW1pKS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIHJldHVybiBzdHJp
cHBlZFR5cGU7Ci19Ci0KLQotCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIGlmIChtaW1lVHlwZS5p
c0VtcHR5KCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnku
aCBiL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCmluZGV4IGU5ZWM4MTEuLjdh
Y2FhMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCkBAIC0zOSw5ICszOSw2IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4gZ2V0RXh0ZW5zaW9uc0Zvck1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAgICAgc3RhdGljIFN0cmluZyBnZXRQcmVmZXJyZWRF
eHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOwogCi0gICAgc3RhdGljIFN0
cmluZyBnZXRQYXJhbWV0ZXJGcm9tTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIHBhcmFtZXRlck5hbWUpOwotICAgIHN0YXRpYyBTdHJpbmcgc3RyaXBQYXJhbWV0ZXJz
RnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSk7Ci0KICAgICBzdGF0aWMgU3RyaW5nIGdl
dE1JTUVUeXBlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAgICAgLy8gQ2hlY2sgdG8g
c2VlIGlmIGEgbWltZSB0eXBlIGlzIHN1aXRhYmxlIGZvciBiZWluZyBsb2FkZWQgaW5saW5lIGFz
IGFuCkBAIC03NSw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+
JiBnZXRTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlcygpOwogICAgIHN0YXRpYyBIYXNoU2V0PFN0
cmluZz4mIGdldFN1cHBvcnRlZE1lZGlhTUlNRVR5cGVzKCk7CiB9OwotCisgICAgCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBNSU1FVHlwZVJlZ2lzdHJ5X2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKaW5kZXggZTNiOGU3Ny4uYzkzNmNlMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTMwLDYgKzMw
LDcgQEAKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKIAogI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVBhcnNlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZS5oIgpAQCAt
MTg3LDcgKzE4OCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAgLy8gaWYgd2UgZG9uJ3Qga25vdyB0aGUg
TUlNRSB0eXBlLCBzZWUgaWYgdGhlIHBhdGggY2FuIGhlbHAKICAgICBTdHJpbmcgdHlwZSA9IG1p
bWVUeXBlLmlzRW1wdHkoKSA/IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCh1
cmwpIDogbWltZVR5cGU7Ci0gICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6Omdl
dFBhcmFtZXRlckZyb21NSU1FVHlwZSh0eXBlLCAiY29kZWNzIik7CisgICAgU3RyaW5nIGNvZGVj
cyA9IE1JTUVUeXBlUGFyc2VyKHR5cGUpLnBhcmFtZXRlcigiY29kZWNzIik7CiAKICAgICBNZWRp
YVBsYXllckZhY3RvcnkqIGVuZ2luZSA9IGNob29zZUJlc3RFbmdpbmVGb3JUeXBlQW5kQ29kZWNz
KHR5cGUsIGNvZGVjcyk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27750</attachid>
            <date>2009-02-18 09:45:45 -0800</date>
            <delta_ts>2009-02-19 16:41:54 -0800</delta_ts>
            <desc>Split off MIME type parsing into its own class, v2</desc>
            <filename>Split-off-MIME-type-parsing-into-its-own-class-v2.patch</filename>
            <type>text/plain</type>
            <size>18824</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">Y2Q4NWQ1N2Y1MjEwN2ExNjhiNjg2OWY1MGMyYjkzMDM0NzhiZjc4NApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlZmZkMGNmLi40NGFjMmY1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMyIEBACisyMDA5LTAyLTE4ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTk5CisgICAg
ICAgIFNwbGl0IG9mZiBNSU1FIHR5cGUgcGFyc2luZyBpbnRvIGl0cyBvd24gY2xhc3MuCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgQ29udGVudFR5cGUgc291cmNlcy4KKyAgICAg
ICAgKiBXZWJDb3JlLnBybzogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS5zY29uczogRGl0dG8u
IAorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAq
IFdlYkNvcmVTb3VyY2VzLmJrbDogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcDogQ2hhbmdlZCB0byB1c2UgQ29udGVudFR5cGUuCisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVVSTCk6CisgICAgICAgICogcGxhdGZvcm0vQ29u
dGVudFR5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRUeXBlOjpDb250
ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50VHlwZTo6cGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRUeXBlOjp0eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9D
b250ZW50VHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRUeXBlOjpyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6bG9hZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0NvbnRlbnREYXRhLmg6IFJlbmFtZWQgQ29udGVudFR5
cGUgdG8gU3R5bGVDb250ZW50VHlwZS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGVDb25zdGFudHMuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjopOgorCiAyMDA5LTAy
LTE2ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZTgxYzE1OC4uY2MwYjZjOSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMjEx
LDYgKzEyMTEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vQXJl
bmEuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmggXAogCVdlYkNvcmUvcGxhdGZvcm0v
QXV0b2RyYWluZWRQb29sLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL0NvbnRleHRNZW51LmggXAogCVdlYkNv
cmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYWQ3YjA2NC4uZjQ5YzcyNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBA
IC04NzAsNiArODcwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vdGV4dC9BdG9taWNT
dHJpbmcuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0L0Jhc2U2NC5jcHAgXAogICAgIHBsYXRmb3Jt
L3RleHQvQmlkaUNvbnRleHQuY3BwIFwKKyAgICBwbGF0Zm9ybS9Db250ZW50VHlwZS5jcHAgXAog
ICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCiAgICAgcGxhdGZvcm0vdGV4dC9DU3RyaW5n
LmNwcCBcCiAgICAgcGxhdGZvcm0vRGVwcmVjYXRlZFB0ckxpc3RJbXBsLmNwcCBcCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUuc2NvbnMgYi9XZWJDb3JlL1dlYkNvcmUuc2NvbnMKaW5kZXgg
MDRmODcwMC4uYTY1MTAwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnNjb25zCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5zY29ucwpAQCAtNzE4LDYgKzcxOCw3IEBAIHNvdXJjZXNbJ2JyaWRn
ZS9jJ10gPSBbCiAjIFRoZXNlIG1heSBldmVudHVhbGx5IG1vdmUgdG8gYSBzZXBhcmF0ZSBzb3Vy
Y2VzIGZpbGUKIHNvdXJjZXNbJ3BsYXRmb3JtJ10gPSBbCiAgICAgJ3BsYXRmb3JtL0FyZW5hLmNw
cCcsCisgICAgJ3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcCcsCiAgICAgJ3BsYXRmb3JtL0NvbnRl
eHRNZW51LmNwcCcsCiAgICAgJ3BsYXRmb3JtL0RlcHJlY2F0ZWRQdHJMaXN0SW1wbC5jcHAnLAog
ICAgICdwbGF0Zm9ybS9EcmFnRGF0YS5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKaW5kZXggNThmZDFjNC4uZjAzYjlhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC0zMTMyLDYgKzMxMzIsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQ29udGVudFR5cGUuY3BwIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cQ29udGVudFR5cGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXENvbnRleHRNZW51LmNwcCINCiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGM3NGZkODguLjA3NGZlYTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC02MjIsNiArNjIyLDggQEAKIAkJNDE2RTc1Q0MwRURGOTBDNzAwMzYwRTFEIC8q
IFNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTZFNzVDQTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNw
cCAqLzsgfTsKIAkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RjQ1RUYwRUQ3
QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovOyB9OwogCQk0MUM3NjBCMTBFREUwM0Qz
MDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQxRDAx
NUNBMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFEMDE1QzgwRjRCNUM3MTAwNEE2NjJGIC8qIENv
bnRlbnRUeXBlLmggKi87IH07CisJCTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50
VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MUQwMTVDOTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUuY3BwICovOyB9OwogCQk0MUYx
RDIxRjBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MUYxRDIxRDBFRjM1QzJBMDBE
QTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDFGMUQyMjAwRUYzNUMyQTAwREE4NzUzIC8qIFNj
cmlwdENhY2hlZEZyYW1lRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MUYxRDIxRTBFRjM1QzJBMDBEQTg3NTMgLyogU2NyaXB0Q2FjaGVkRnJh
bWVEYXRhLmNwcCAqLzsgfTsKIAkJNDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVn
SW5JbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
LmggKi87IH07CkBAIC01NTQ5LDYgKzU1NTEsOCBAQAogCQk0MTZFNzVDQTBFREY5MEM3MDAzNjBF
MUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNjcmlwdENhbGxGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQxNkY0NUVGMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQxQzc2MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDFEMDE1QzkwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRl
bnRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRlbnRU
eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDFGMUQyMUQwRUYzNUMyQTAw
REE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JpcHRDYWNoZWRGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDFGMUQyMUUwRUYzNUMyQTAwREE4NzUzIC8qIFNjcmlwdENhY2hlZEZyYW1lRGF0
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRDYWNoZWRG
cmFtZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFF
OEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzc0OCw2ICsxMzc1Miw4IEBACiAJCQkJOTM1MjA3QkQwOUJENDEw
QTAwRjIwMzhEIC8qIExvY2FsaXplZFN0cmluZ3MuaCAqLywKIAkJCQlBODIzOURGRTA5QjNDRjhB
MDBCNjA2NDEgLyogTG9nZ2luZy5jcHAgKi8sCiAJCQkJQTgyMzlERkYwOUIzQ0Y4QTAwQjYwNjQx
IC8qIExvZ2dpbmcuaCAqLywKKwkJCQk0MUQwMTVDODBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVu
dFR5cGUuaCAqLywKKwkJCQk0MUQwMTVDOTBGNEI1QzcxMDA0QTY2MkYgLyogQ29udGVudFR5cGUu
Y3BwICovLAogCQkJCUJDNzcyQzRDMEM0RUIzMDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5
LmNwcCAqLywKIAkJCQlCQzc3MkM0RDBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3Ry
eS5oICovLAogCQkJCTRCMjcwOEM1MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi8s
CkBAIC0xNjc3Myw2ICsxNjc3OSw3IEBACiAJCQkJMUE1NjlEMjUwRDdFMkI4MjAwN0MzOTgzIC8q
IHJ1bnRpbWVfcm9vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMUUwOTlFNjQ5MjAwNTZF
NTgxIC8qIHZpc2libGVfdW5pdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExN0M4MTIzMEYyQTVD
RjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTQx
RDAxNUNBMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xODc2MSw2ICsxODc2OCw3IEBACiAJCQkJMUE1NjlEMjQwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1
bnRpbWVfcm9vdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUxRDA5OUU2NDkyMDA1NkU1
ODEgLyogdmlzaWJsZV91bml0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTdDODEyMjBGMkE1
Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTQxRDAxNUNCMEY0QjVDNzEwMDRBNjYyRiAvKiBDb250ZW50VHlwZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsIGIvV2ViQ29yZS9XZWJD
b3JlU291cmNlcy5ia2wKaW5kZXggOGM1NjAyNy4uZDQ0OGZmOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlU291cmNlcy5ia2wKKysrIGIvV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKQEAg
LTcyNCw2ICs3MjQsNyBAQCBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpc3Qgb2YgZmlsZXMgbmVl
ZGVkIHRvIGJ1aWxkIFdlYkNvcmUuCiAgICAgICAgIHBsYXRmb3JtL3RleHQvQmFzZTY0LmNwcAog
ICAgICAgICBwbGF0Zm9ybS90ZXh0L0JpZGlDb250ZXh0LmNwcAogICAgICAgICBwbGF0Zm9ybS90
ZXh0L0NTdHJpbmcuY3BwCisgICAgICAgIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAogICAgICAg
ICBwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKICAgICAgICAgcGxhdGZvcm0vRGVwcmVjYXRlZFB0
ckxpc3RJbXBsLmNwcAogICAgICAgICBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKaW5kZXggM2RiYjAyZC4uMDMzNTVlZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRl
ICJIVE1MTWVkaWFFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1
ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC04OTksMTUgKzkwMCwxMiBAQCBTdHJpbmcgSFRNTE1l
ZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFVUkwoU3RyaW5nJiBtZWRpYU1JTUVUeXBlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2UtPmhhc0F0dHJpYnV0ZSh0eXBlQXR0cikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nIHR5cGUgPSBzb3VyY2UtPnR5cGUoKS5zdHJpcFdoaXRlU3BhY2UoKTsK
LSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvZGVjcyA9IE1JTUVUeXBlUmVnaXN0cnk6Omdl
dFBhcmFtZXRlckZyb21NSU1FVHlwZSh0eXBlLCAiY29kZWNzIik7Ci0gICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBzaW1wbGVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6c3RyaXBQYXJhbWV0ZXJz
RnJvbU1JTUVUeXBlKHR5cGUpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghTWVkaWFQbGF5
ZXI6OnN1cHBvcnRzVHlwZShzaW1wbGVUeXBlLCBjb2RlY3MpKQorICAgICAgICAgICAgICAgICAg
ICBDb250ZW50VHlwZSBjb250ZW50VHlwZShzb3VyY2UtPnR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghTWVkaWFQbGF5ZXI6OnN1cHBvcnRzVHlwZShjb250ZW50VHlwZS50eXBlKCks
IGNvbnRlbnRUeXBlLnBhcmFtZXRlcigiY29kZWNzIikpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHR5cGUgd2l0aCBh
bGwgcGFyYW1ldGVycyBpbiBwbGFjZSBzbyB0aGUgbWVkaWEgZW5naW5lIGNhbiB1c2UgdGhlbQot
ICAgICAgICAgICAgICAgICAgICBtZWRpYU1JTUVUeXBlID0gdHlwZTsKKyAgICAgICAgICAgICAg
ICAgICAgbWVkaWFNSU1FVHlwZSA9IGNvbnRlbnRUeXBlLnJhdygpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBtZWRpYVNyYyA9IHNvdXJjZS0+c3JjKCkuc3RyaW5nKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0NvbnRl
bnRUeXBlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZTZlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Q29udGVudFR5cGU6OkNvbnRlbnRUeXBlKGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCisgICAg
OiBtX3R5cGUoY29udGVudFR5cGUpCit7Cit9CisKK1N0cmluZyBDb250ZW50VHlwZTo6cGFyYW1l
dGVyKGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyTmFtZSkKK3sKKyAgICBTdHJpbmcgcGFyYW1ldGVy
VmFsdWU7CisgICAgU3RyaW5nIHN0cmlwcGVkVHlwZSA9IG1fdHlwZS5zdHJpcFdoaXRlU3BhY2Uo
KTsKKworICAgIC8vIGEgTUlNRSB0eXBlIGNhbiBoYXZlIG9uZSBvciBtb3JlICJwYXJhbT12YWx1
ZSIgYWZ0ZXIgYSBzZW1pLWNvbG9uLCBhbmQgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlciBieSBz
ZW1pLWNvbG9ucworICAgIGludCBzZW1pID0gc3RyaXBwZWRUeXBlLmZpbmQoJzsnKTsKKyAgICBp
ZiAoc2VtaSAhPSAtMSkgeworICAgICAgICBpbnQgc3RhcnQgPSBzdHJpcHBlZFR5cGUuZmluZChw
YXJhbWV0ZXJOYW1lLCBzZW1pICsgMSwgZmFsc2UpOworICAgICAgICBpZiAoc3RhcnQgIT0gLTEp
IHsKKyAgICAgICAgICAgIHN0YXJ0ID0gc3RyaXBwZWRUeXBlLmZpbmQoJz0nLCBzdGFydCArIDYp
OworICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgaW50IGVu
ZCA9IHN0cmlwcGVkVHlwZS5maW5kKCc7Jywgc3RhcnQgKyA2KTsKKyAgICAgICAgICAgICAgICBp
ZiAoZW5kID09IC0xKQorICAgICAgICAgICAgICAgICAgICBlbmQgPSBzdHJpcHBlZFR5cGUubGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWUgPSBzdHJpcHBlZFR5cGUuc3Vi
c3RyaW5nKHN0YXJ0ICsgMSwgZW5kIC0gKHN0YXJ0ICsgMSkpLnN0cmlwV2hpdGVTcGFjZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHBhcmFtZXRlclZh
bHVlOworfQorCitTdHJpbmcgQ29udGVudFR5cGU6OnR5cGUoKQoreworICAgIFN0cmluZyBzdHJp
cHBlZFR5cGUgPSBtX3R5cGUuc3RyaXBXaGl0ZVNwYWNlKCk7CisKKyAgICAvLyAidHlwZSIgY2Fu
IGhhdmUgcGFyYW1ldGVycyBhZnRlciBhIHNlbWktY29sb24sIHN0cmlwIHRoZW0KKyAgICBpbnQg
c2VtaSA9IHN0cmlwcGVkVHlwZS5maW5kKCc7Jyk7CisgICAgaWYgKHNlbWkgIT0gLTEpCisgICAg
ICAgIHN0cmlwcGVkVHlwZSA9IHN0cmlwcGVkVHlwZS5sZWZ0KHNlbWkpLnN0cmlwV2hpdGVTcGFj
ZSgpOworCisgICAgcmV0dXJuIHN0cmlwcGVkVHlwZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9Db250ZW50VHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjg5YzBmODMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL0NvbnRlbnRU
eXBlLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29udGVudFR5cGVfaAorI2RlZmluZSBDb250ZW50
VHlwZV9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyAgICBjbGFzcyBDb250ZW50VHlwZSB7CisgICAgcHVibGljOgorICAgICAgICBDb250
ZW50VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOworCisgICAgICAgIFN0cmluZyBwYXJhbWV0ZXIo
Y29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJOYW1lKTsKKyAgICAgICAgU3RyaW5nIHR5cGUoKTsKKyAg
ICAgICAgU3RyaW5nIHJhdygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHByaXZhdGU6
CisgICAgICAgIFN0cmluZyBtX3R5cGU7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQ29udGVudFR5cGVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3Ry
eS5jcHAKaW5kZXggNDViZjQxNy4uOGY5ODczNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuY3BwCkBAIC0yMzksNDIgKzIzOSw2IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5Ojpn
ZXRNSU1FVHlwZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiAiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIjsKIH0KIAotU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldFBh
cmFtZXRlckZyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyTmFtZSkKLXsKLSAgICBTdHJpbmcgcGFyYW1ldGVyVmFsdWU7Ci0KLSAgICAvLyBhIE1J
TUUgdHlwZSBjYW4gaGF2ZSBvbmUgb3IgbW9yZSAicGFyYW09dmFsdWUiIGFmdGVyIGEgc2VtaS1j
b2xvbiwgYW5kIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgYnkgc2VtaS1jb2xvbnMKLSAgICBp
bnQgc2VtaSA9IHR5cGUuZmluZCgnOycpOwotICAgIGlmIChzZW1pICE9IC0xKSB7Ci0gICAgICAg
IGludCBzdGFydCA9IHR5cGUuZmluZChwYXJhbWV0ZXJOYW1lLCBzZW1pICsgMSwgZmFsc2UpOwot
ICAgICAgICBpZiAoc3RhcnQgIT0gLTEpIHsKLSAgICAgICAgICAgIHN0YXJ0ID0gdHlwZS5maW5k
KCc9Jywgc3RhcnQgKyA2KTsKLSAgICAgICAgICAgIGlmIChzdGFydCAhPSAtMSkgewotICAgICAg
ICAgICAgICAgIGludCBlbmQgPSB0eXBlLmZpbmQoJzsnLCBzdGFydCArIDYpOwotICAgICAgICAg
ICAgICAgIGlmIChlbmQgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGVuZCA9IHR5cGUubGVu
Z3RoKCk7Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWUgPSB0eXBlLnN1YnN0cmluZyhz
dGFydCArIDEsIGVuZCAtIChzdGFydCArIDEpKS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBwYXJhbWV0ZXJWYWx1ZTsKLX0K
LQotU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OnN0cmlwUGFyYW1ldGVyc0Zyb21NSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIFN0cmluZyBzdHJpcHBlZFR5cGUgPSBtaW1l
VHlwZS5zdHJpcFdoaXRlU3BhY2UoKTsKLQotICAgIC8vICJ0eXBlIiBjYW4gaGF2ZSBwYXJhbWV0
ZXJzIGFmdGVyIGEgc2VtaS1jb2xvbiwgc3RyaXAgdGhlbQotICAgIGludCBzZW1pID0gc3RyaXBw
ZWRUeXBlLmZpbmQoJzsnKTsKLSAgICBpZiAoc2VtaSAhPSAtMSkKLSAgICAgICAgc3RyaXBwZWRU
eXBlID0gc3RyaXBwZWRUeXBlLmxlZnQoc2VtaSkuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0KLSAgICBy
ZXR1cm4gc3RyaXBwZWRUeXBlOwotfQotCi0KLQogYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICBpZiAo
bWltZVR5cGUuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlw
ZVJlZ2lzdHJ5LmggYi9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaAppbmRleCBl
OWVjODExLi5mY2E0NjdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVn
aXN0cnkuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuaApAQCAtMzks
OSArMzksNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGdldEV4dGVuc2lv
bnNGb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOwogICAgIHN0YXRpYyBTdHJpbmcgZ2V0
UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKTsKIAotICAg
IHN0YXRpYyBTdHJpbmcgZ2V0UGFyYW1ldGVyRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJOYW1lKTsKLSAgICBzdGF0aWMgU3RyaW5nIHN0cmlw
UGFyYW1ldGVyc0Zyb21NSU1FVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpOwotCiAgICAgc3RhdGlj
IFN0cmluZyBnZXRNSU1FVHlwZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAgIC8v
IENoZWNrIHRvIHNlZSBpZiBhIG1pbWUgdHlwZSBpcyBzdWl0YWJsZSBmb3IgYmVpbmcgbG9hZGVk
IGlubGluZSBhcyBhbgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApp
bmRleCBlM2I4ZTc3Li5lODZmMjA4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCiAKKyNpbmNsdWRlICJDb250ZW50VHlwZS5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC0xODcsNyArMTg4LDcgQEAgdm9pZCBNZWRpYVBsYXll
cjo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAg
ICAvLyBpZiB3ZSBkb24ndCBrbm93IHRoZSBNSU1FIHR5cGUsIHNlZSBpZiB0aGUgcGF0aCBjYW4g
aGVscAogICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuaXNFbXB0eSgpID8gTUlNRVR5cGVSZWdp
c3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKHVybCkgOiBtaW1lVHlwZTsKLSAgICBTdHJpbmcgY29k
ZWNzID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UGFyYW1ldGVyRnJvbU1JTUVUeXBlKHR5cGUsICJj
b2RlY3MiKTsKKyAgICBTdHJpbmcgY29kZWNzID0gQ29udGVudFR5cGUodHlwZSkucGFyYW1ldGVy
KCJjb2RlY3MiKTsKIAogICAgIE1lZGlhUGxheWVyRmFjdG9yeSogZW5naW5lID0gY2hvb3NlQmVz
dEVuZ2luZUZvclR5cGVBbmRDb2RlY3ModHlwZSwgY29kZWNzKTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0NvbnRlbnREYXRhLmgKaW5kZXggZDkyNGQxYS4uNDQ3ODVlZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvQ29udGVudERhdGEuaAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9Db250ZW50RGF0YS5oCkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBDb250ZW50RGF0
YSA6IE5vbmNvcHlhYmxlIHsKIAogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIENvbnRlbnRUeXBl
IG1fdHlwZTsKKyAgICBTdHlsZUNvbnRlbnRUeXBlIG1fdHlwZTsKICAgICB1bmlvbiB7CiAgICAg
ICAgIFN0eWxlSW1hZ2UqIG1faW1hZ2U7CiAgICAgICAgIFN0cmluZ0ltcGwqIG1fdGV4dDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlQ29uc3RhbnRzLmgg
Yi9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZUNvbnN0YW50cy5oCmluZGV4IGNi
NjgwMzUuLjQwNWNmN2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlQ29uc3RhbnRzLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGVDb25zdGFudHMuaApAQCAtMjAxLDcgKzIwMSw3IEBAIGVudW0gRUxpc3RTdHlsZVR5cGUgewog
ICAgICBISVJBR0FOQSwgS0FUQUtBTkEsIEhJUkFHQU5BX0lST0hBLCBLQVRBS0FOQV9JUk9IQSwg
TE5PTkUKIH07CiAKLWVudW0gQ29udGVudFR5cGUgeworZW51bSBTdHlsZUNvbnRlbnRUeXBlIHsK
ICAgICBDT05URU5UX05PTkUsIENPTlRFTlRfT0JKRUNULCBDT05URU5UX1RFWFQsIENPTlRFTlRf
Q09VTlRFUgogfTsKIAo=
</data>
<flag name="review"
          id="13488"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>