<?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>64398</bug_id>
          
          <creation_ts>2011-07-12 14:48:14 -0700</creation_ts>
          <short_desc>Character reference parser for new XML parser</short_desc>
          <delta_ts>2011-07-14 13:08:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>64396</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Vicki Pfau">jeffrey+webkit</reporter>
          <assigned_to name="Vicki Pfau">jeffrey+webkit</assigned_to>
          <cc>abarth</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>435981</commentid>
    <comment_count>0</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-07-12 14:48:14 -0700</bug_when>
    <thetext>Character reference parser for new XML parser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436069</commentid>
    <comment_count>1</comment_count>
      <attachid>100586</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-07-12 16:36:05 -0700</bug_when>
    <thetext>Created attachment 100586
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436081</commentid>
    <comment_count>2</comment_count>
      <attachid>100586</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-12 16:48:52 -0700</bug_when>
    <thetext>Comment on attachment 100586
Patch

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

&gt; Source/WebCore/xml/parser/XMLCharacterReferenceParser.cpp:37
&gt; +namespace {

No need to indent for namespaces.

&gt; Source/WebCore/xml/parser/XMLCharacterReferenceParser.cpp:46
&gt; +    inline UChar adjustEntity(UChar32 value)

You probably don&apos;t need this for XML.  This is a strange HTML legacy thing.

&gt; Source/WebCore/xml/parser/XMLCharacterReferenceParser.cpp:94
&gt; +bool consumeCharacterReference(SegmentedString&amp; source, Vector&lt;UChar, 16&gt;&amp; decodedCharacter, bool&amp; notEnoughCharacters)

You should be able to share almost all of this code with the HTML version by taking convertToUTF16 as a template parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436083</commentid>
    <comment_count>3</comment_count>
      <attachid>100586</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-12 16:52:10 -0700</bug_when>
    <thetext>Comment on attachment 100586
Patch

I&apos;m going to make this r- to encourage you to share more code using a template.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436804</commentid>
    <comment_count>4</comment_count>
      <attachid>100743</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-07-13 17:57:44 -0700</bug_when>
    <thetext>Created attachment 100743
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436838</commentid>
    <comment_count>5</comment_count>
      <attachid>100743</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-13 18:45:50 -0700</bug_when>
    <thetext>Comment on attachment 100743
Patch

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

This looks great.  We could od some work to fixup some naming mistakes I made when writing this code originally, but that&apos;s nto a big deal.  (The most pervasive one is renaming &quot;cc&quot; to either currentCharacter or &quot;c&quot; as appropriate.)

&gt; Source/WebCore/xml/parser/CharacterReferenceParserInlineMethods.h:28
&gt; +#ifndef CharacterReferenceParserInlineMethods_h
&gt; +#define CharacterReferenceParserInlineMethods_h

I&apos;d drop the word &quot;Methods&quot; from the name of this file/

&gt; Source/WebCore/xml/parser/CharacterReferenceParserInlineMethods.h:51
&gt; +template &lt;typename ParserFunctions&gt;
&gt; +inline bool consumeCharacterReference(SegmentedString&amp; source, Vector&lt;UChar, 16&gt;&amp; decodedCharacter, bool&amp; notEnoughCharacters, UChar additionalAllowedCharacter)

jamesr says to get rid of this inline keyword.  That&apos;s probably the right.  The compiler will probably just generate an unconditional jump anyway.

&gt; Source/WebCore/xml/parser/XMLCharacterReferenceParser.cpp:45
&gt; +        return 0xFFFD;

bad indents in this file.

&gt; Source/WebCore/xml/parser/XMLCharacterReferenceParser.cpp:66
&gt; +        ASSERT_NOT_REACHED();

Do you mean notImplemented() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436839</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-13 18:46:21 -0700</bug_when>
    <thetext>You should also listen to whatever suggestions jamesr has.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437244</commentid>
    <comment_count>7</comment_count>
      <attachid>100840</attachid>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2011-07-14 12:15:35 -0700</bug_when>
    <thetext>Created attachment 100840
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437282</commentid>
    <comment_count>8</comment_count>
      <attachid>100840</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 13:08:23 -0700</bug_when>
    <thetext>Comment on attachment 100840
Patch for landing

Clearing flags on attachment: 100840

Committed r91025: &lt;http://trac.webkit.org/changeset/91025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437283</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 13:08:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100586</attachid>
            <date>2011-07-12 16:36:05 -0700</date>
            <delta_ts>2011-07-13 17:57:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64398-20110712163604.patch</filename>
            <type>text/plain</type>
            <size>14987</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA4NTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MzAyNDEyN2RkOTJhN2Mx
M2QyNGU1OTY5Y2Q4ZjA4ZDZkMTY0YjZkLi5kZTc1OGY4NGM2ZTEzNjQwYzI1MTUxODM0NTYzYmQz
YzNjNDNmYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDctMTIgIEplZmZy
ZXkgUGZhdSAgPGpwZmF1QGFwcGxlLmNvbT4KKworICAgICAgICBDaGFyYWN0ZXIgcmVmZXJlbmNl
IHBhcnNlciBmb3IgbmV3IFhNTCBwYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0Mzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTmV3IGNoYXJhY3RlciByZWZlcmVuY2UgcGFyc2VyIHRoYXQgaXMg
YmFzZWQgb24gdGhlIEhUTUxFbnRpdHlQYXJzZXIgY2xhc3MKKworICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Vt
ZUNoYXJhY3RlclJlZmVyZW5jZSk6CisgICAgICAgICogeG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXIuaDogQWRkZWQuCisKIDIwMTEtMDctMTIgIEpvc2VwaCBQZWNvcmFybyAg
PGpvZXBlY2tAd2Via2l0Lm9yZz4KIAogICAgICAgICBBcHBsaWNhdGlvbkNhY2hlIHVwZGF0ZSBz
aG91bGQgbm90IGltbWVkaWF0ZWx5IGZhaWwgd2hlbiByZWFjaGluZyBwZXItb3JpZ2luIHF1b3Rh
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggMTMyM2QyOTJjZjk2MzdkZmU0ZTJiNjIwMjkyYTVlY2FlOTFjOWNmMC4uZDE1OTc5Mzcy
YmE4YTI3ZTc1MDE4YTQ1Mzc0YzFhM2ViZjY0NTk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTUsNiArNTUsOCBAQAogCQkw
MEI5MzE4QzEzQkE4RENDMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBCOTMxODYxM0JBODY3
RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCAqLzsgfTsKIAkJMDBDQTkzQjIx
M0M2NjkxNjAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMENBOTNCMTEzQzY2OTE2MDBGN0ZFOTUg
LyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCAqLzsgfTsKIAkJMDBDQTkzQjUxM0M2Njk3QzAwRjdG
RTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQ0E5M0I0MTNDNjY5N0MwMEY3RkU5NSAvKiBOZXdYTUxE
b2N1bWVudFBhcnNlci5jcHAgKi87IH07CisJCTAwRDA0NjRBMTNDNEQxNDUwMDMyNkZDQyAvKiBY
TUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDBEMDQ2NDgxM0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlci5jcHAgKi87IH07CisJCTAwRDA0NjRCMTNDNEQxNDUwMDMyNkZD
QyAvKiBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwRDA0NjQ5MTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxD
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaCAqLzsgfTsKIAkJMDUyQkZDRTkxMjhBQkYxNTAwRkQz
MzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNTJCRkNFODEyOEFCRjE1MDBGRDMzOEQgLyogR2VvbG9j
YXRpb25DbGllbnRNb2NrLmNwcCAqLzsgfTsKIAkJMDUyQkZDRUIxMjhBQkYyMTAwRkQzMzhEIC8q
IEdlb2xvY2F0aW9uQ2xpZW50TW9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDUyQkZDRUExMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xp
ZW50TW9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTA1RkQ2OUUwMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1lU3RhbXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA1RkQ2OURGMTI4NDVENDMwMEIy
QkVCMyAvKiBET01UaW1lU3RhbXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNjQyMiw2ICs2NDI0LDggQEAKIAkJMDBCOTMxODYxM0JBODY3RjAw
MzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwMENBOTNCMTEzQzY2OTE2MDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJz
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV3WE1MRG9jdW1lbnRQYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDBDQTkzQjQxM0M2Njk3QzAwRjdG
RTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMDBEMDQ2NDgxM0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxD
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwMEQwNDY0OTEzQzREMTQ1MDAzMjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTENoYXJhY3RlclJlZmVyZW5j
ZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNTJCRkNFODEyOEFCRjE1
MDBGRDMzOEQgLyogR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEdlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHA7IHBhdGggPSBtb2Nr
L0dlb2xvY2F0aW9uQ2xpZW50TW9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA1MkJGQ0VBMTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VvbG9jYXRpb25DbGllbnRNb2NrLmg7IHBh
dGggPSBtb2NrL0dlb2xvY2F0aW9uQ2xpZW50TW9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNUZENjlERjEyODQ1RDQzMDBCMkJFQjMgLyogRE9NVGltZVN0YW1wLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVRpbWVTdGFtcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTI3MjEsNiArMTI3MjUsOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJMDBDQTkzQjQxM0M2Njk3QzAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCAq
LywKIAkJCQkwMENBOTNCMTEzQzY2OTE2MDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIu
aCAqLywKKwkJCQkwMEQwNDY0ODEzQzREMTQ1MDAzMjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJl
bmNlUGFyc2VyLmNwcCAqLywKKwkJCQkwMEQwNDY0OTEzQzREMTQ1MDAzMjZGQ0MgLyogWE1MQ2hh
cmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggKi8sCiAJCQkJMDBCOTMxODExM0JBODY3RjAwMzVBOTQ4
IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCAqLywKIAkJCQkwMEI5MzE4MjEzQkE4NjdGMDAzNUE5
NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuaCAqLywKIAkJCQkwMEI5MzE4MzEzQkE4NjdGMDAzNUE5
NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLywKQEAgLTIzMDg5LDYgKzIzMDk1
LDcgQEAKIAkJCQk5MzMwOUUyNDA5OUU2NDkyMDA1NkU1ODEgLyogV3JhcENvbnRlbnRzSW5EdW1t
eVNwYW5Db21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QkFGM0IyNDEyQzFBMzk4MDAwMTRC
RjEgLyogV3JpdGluZ0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgyMDIwOUQx
NTA4RDAwMEU2MUQ3IC8qIFhMaW5rTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTAwRDA0NjRC
MTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDBCOTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERv
Y3VtZW50UGFyc2VyU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzcyQzQ3MEM0RUIyQzYw
MDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTg2Miw2ICsy
NTg2OSw3IEBACiAJCQkJNTExMjI0NzgxMENGQjhGNDAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTIzMDk5RTY0
OTIwMDU2RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgzM0M3Q0MwQTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMDBEMDQ2NEExM0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwMEI5MzE4NzEzQkE4REIz
MDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDBC
OTMxODkxM0JBOERCQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwMEI5MzE4QjEzQkE4REM5MDAzNUE5NDggLyogWE1MRG9jdW1lbnRQ
YXJzZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NThiZWZiM2QyMGMxOGIwZTE3YThiZjZlMWQ1YWY2Y2M5YzliOTZkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXIuY3BwCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBN
b2JpbGUsIEluYy4gaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAK
K25hbWVzcGFjZSB7CisgICAgCisgICAgc3RhdGljIGNvbnN0IFVDaGFyIHdpbmRvd3NMYXRpbjFF
eHRlbnNpb25BcnJheVszMl0gPSB7CisgICAgICAgIDB4MjBBQywgMHgwMDgxLCAweDIwMUEsIDB4
MDE5MiwgMHgyMDFFLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLCAvLyA4MC04NworICAgICAgICAw
eDAyQzYsIDB4MjAzMCwgMHgwMTYwLCAweDIwMzksIDB4MDE1MiwgMHgwMDhELCAweDAxN0QsIDB4
MDA4RiwgLy8gODgtOEYKKyAgICAgICAgMHgwMDkwLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFDLCAw
eDIwMUQsIDB4MjAyMiwgMHgyMDEzLCAweDIwMTQsIC8vIDkwLTk3CisgICAgICAgIDB4MDJEQywg
MHgyMTIyLCAweDAxNjEsIDB4MjAzQSwgMHgwMTUzLCAweDAwOUQsIDB4MDE3RSwgMHgwMTc4LCAv
LyA5OC05RgorICAgIH07CisgICAgCisgICAgaW5saW5lIFVDaGFyIGFkanVzdEVudGl0eShVQ2hh
cjMyIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCh2YWx1ZSAmIH4weDFGKSAhPSAweDAwODAp
CisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIHJldHVybiB3aW5kb3dzTGF0aW4x
RXh0ZW5zaW9uQXJyYXlbdmFsdWUgLSAweDgwXTsKKyAgICB9CisgICAgCisgICAgaW5saW5lIFVD
aGFyMzIgbGVnYWxFbnRpdHlGb3IoVUNoYXIzMiB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBBIG51bWJlciBvZiBzcGVjaWZpYyBlbnRpdHkgdmFsdWVzIGdlbmVyYXRlIHBhcnNlIGVy
cm9ycy4KKyAgICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA+IDB4MTBGRkZGIHx8ICh2YWx1ZSA+
PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhERkZGKSkKKyAgICAgICAgICAgIHJldHVybiAweEZGRkQ7
CisgICAgICAgIGlmIChVX0lTX0JNUCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gYWRqdXN0
RW50aXR5KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICAKKyAgICBp
bmxpbmUgYm9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBWZWN0b3I8VUNoYXIsIDE2
PiYgZGVjb2RlZENoYXJhY3RlcikKKyAgICB7CisgICAgICAgIGlmIChVX0lTX0JNUCh2YWx1ZSkp
IHsKKyAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVDaGFyPih2YWx1
ZSk7CisgICAgICAgICAgICBBU1NFUlQoY2hhcmFjdGVyID09IHZhbHVlKTsKKyAgICAgICAgICAg
IGRlY29kZWRDaGFyYWN0ZXIuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBkZWNvZGVkQ2hhcmFjdGVyLmFwcGVuZChVMTZfTEVB
RCh2YWx1ZSkpOworICAgICAgICBkZWNvZGVkQ2hhcmFjdGVyLmFwcGVuZChVMTZfVFJBSUwodmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlubGluZSBib29s
IGlzSGV4RGlnaXQoVUNoYXIgY2MpCisgICAgeworICAgICAgICByZXR1cm4gKGNjID49ICcwJyAm
JiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0EnICYm
IGNjIDw9ICdGJyk7CisgICAgfQorICAgIAorICAgIHZvaWQgdW5jb25zdW1lQ2hhcmFjdGVycyhT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgVmVjdG9yPFVDaGFyLCAxMD4mIGNvbnN1bWVk
Q2hhcmFjdGVycykKKyAgICB7CisgICAgICAgIGlmIChjb25zdW1lZENoYXJhY3RlcnMuc2l6ZSgp
ID09IDEpCisgICAgICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOwor
ICAgICAgICBlbHNlIGlmIChjb25zdW1lZENoYXJhY3RlcnMuc2l6ZSgpID09IDIpIHsKKyAgICAg
ICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7CisgICAgICAgICAgICBz
b3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMV0pOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmluZyhTdHJpbmcoY29uc3VtZWRDaGFy
YWN0ZXJzLmRhdGEoKSwgY29uc3VtZWRDaGFyYWN0ZXJzLnNpemUoKSkpKTsKKyAgICB9CisgICAg
Cit9CisKK2Jvb2wgY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmIHNv
dXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3Vn
aENoYXJhY3RlcnMpCit7CisgICAgQVNTRVJUKCFub3RFbm91Z2hDaGFyYWN0ZXJzKTsKKyAgICBB
U1NFUlQoZGVjb2RlZENoYXJhY3Rlci5pc0VtcHR5KCkpOworICAgIAorICAgIGVudW0gRW50aXR5
U3RhdGUgeworICAgICAgICBJbml0aWFsLAorICAgICAgICBOdW1iZXIsCisgICAgICAgIE1heWJl
SGV4TG93ZXJDYXNlWCwKKyAgICAgICAgTWF5YmVIZXhVcHBlckNhc2VYLAorICAgICAgICBIZXgs
CisgICAgICAgIERlY2ltYWwKKyAgICB9OworICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0g
SW5pdGlhbDsKKyAgICBVQ2hhcjMyIHJlc3VsdCA9IDA7CisgICAgVmVjdG9yPFVDaGFyLCAxMD4g
Y29uc3VtZWRDaGFyYWN0ZXJzOworICAgIAorICAgIHdoaWxlICghc291cmNlLmlzRW1wdHkoKSkg
eworICAgICAgICBVQ2hhciBjYyA9ICpzb3VyY2U7CisgICAgICAgIHN3aXRjaCAoZW50aXR5U3Rh
dGUpIHsKKyAgICAgICAgY2FzZSBJbml0aWFsOiB7CisgICAgICAgICAgICBpZiAoY2MgPT0gJyMn
KSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOdW1iZXI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBOdW1iZXI6IHsKKyAgICAgICAgICAgIGlmIChjYyA9PSAneCcp
IHsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4TG93ZXJDYXNlWDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYyA9
PSAnWCcpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4VXBwZXJDYXNl
WDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUg
PSBEZWNpbWFsOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc291cmNlLnB1c2goJyMnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIE1heWJlSGV4TG93ZXJDYXNlWDogeworICAgICAgICAgICAg
aWYgKGlzSGV4RGlnaXQoY2MpKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBIZXg7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
b3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgc291cmNlLnB1c2goJ3gnKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE1heWJlSGV4VXBwZXJD
YXNlWDogeworICAgICAgICAgICAgaWYgKGlzSGV4RGlnaXQoY2MpKSB7CisgICAgICAgICAgICAg
ICAgZW50aXR5U3RhdGUgPSBIZXg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgc291cmNl
LnB1c2goJ1gnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEhleDogeworICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYgKyBjYyAtICcwJzsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGNjID49ICdhJyAmJiBjYyA8PSAnZicpCisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0ICogMTYgKyAxMCArIGNjIC0gJ2EnOworICAgICAgICAgICAgZWxzZSBpZiAo
Y2MgPj0gJ0EnICYmIGNjIDw9ICdGJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQg
KiAxNiArIDEwICsgY2MgLSAnQSc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsK
KyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb1VURjE2KGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29k
ZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bmNv
bnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIERlY2ltYWw6IHsKKyAgICAgICAgICAgIGlmIChjYyA+PSAn
MCcgJiYgY2MgPD0gJzknKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsg
Y2MgLSAnMCc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAg
ICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb1VURjE2KGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0
ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGNvbnN1bWVkQ2hhcmFjdGVycy5hcHBlbmQoY2MpOworICAgICAgICBz
b3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgfQorICAgIEFTU0VSVChzb3VyY2UuaXNF
bXB0eSgpKTsKKyAgICBub3RFbm91Z2hDaGFyYWN0ZXJzID0gdHJ1ZTsKKyAgICB1bmNvbnN1bWVD
aGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oIGIvU291cmNlL1dl
YkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4xZjgwZjEzYTk0NTZjODU4MWYyNmQ0YmMwNDM5NmQyYzdjODE1ODVjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXIuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyX2gKKyNkZWZp
bmUgWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyX2gKKworI2luY2x1ZGUgIlNlZ21lbnRlZFN0
cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitib29sIGNvbnN1bWVDaGFyYWN0
ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRD
aGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpOworCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100743</attachid>
            <date>2011-07-13 17:57:44 -0700</date>
            <delta_ts>2011-07-14 12:15:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64398-20110713175743.patch</filename>
            <type>text/plain</type>
            <size>30760</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA4NTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MzAyNDEyN2RkOTJhN2Mx
M2QyNGU1OTY5Y2Q4ZjA4ZDZkMTY0YjZkLi5jNDc2M2Y2ZGQyZWUxMjQ1YTY1NTlhMGYzZDg3NjFl
YmIyMGUyNGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDctMTMgIEplZmZy
ZXkgUGZhdSAgPGpwZmF1QGFwcGxlLmNvbT4KKworICAgICAgICBDaGFyYWN0ZXIgcmVmZXJlbmNl
IHBhcnNlciBmb3IgbmV3IFhNTCBwYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0Mzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JlZCBvdXQgdGhlIEhUTUwgZW50aXR5IHBhcnNlciBh
bmQgYWRkZWQgYSBjb21tb24gdGVtcGxhdGUgZm9yIHBhcnNpbmcgY2hhcmFjdGVyIHJlZmVyZW5j
ZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdW1lSFRNTEVudGl0eSk6CisgICAgICAgICogeG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6aXNIZXhE
aWdpdCk6CisgICAgICAgIChXZWJDb3JlOjp1bmNvbnN1bWVDaGFyYWN0ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UpOgorICAgICAgICAqIHhtbC9wYXJz
ZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjb25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKToKKyAgICAgICAgKiB4bWwvcGFyc2Vy
L1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oOiBBZGRlZC4KKwogMjAxMS0wNy0xMiAgSm9z
ZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIEFwcGxpY2F0aW9u
Q2FjaGUgdXBkYXRlIHNob3VsZCBub3QgaW1tZWRpYXRlbHkgZmFpbCB3aGVuIHJlYWNoaW5nIHBl
ci1vcmlnaW4gcXVvdGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAxMzIzZDI5MmNmOTYzN2RmZTRlMmI2MjAyOTJhNWVjYWU5MWM5
Y2YwLi4xZjUxYzQxZTlhNjBjYzc1MTRiODM3YmQ5MDViZDFjODY3NDNlMmFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NSw2
ICs1NSw5IEBACiAJCTAwQjkzMThDMTNCQThEQ0MwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNl
clNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
MEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJTY29wZS5oICovOyB9
OwogCQkwMENBOTNCMjEzQzY2OTE2MDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQ0E5M0IxMTND
NjY5MTYwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5oICovOyB9OwogCQkwMENBOTNC
NTEzQzY2OTdDMDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBDQTkzQjQxM0M2Njk3QzAwRjdG
RTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmNwcCAqLzsgfTsKKwkJMDBEMDQ2NEExM0M0RDE0
NTAwMzI2RkNDIC8qIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMEQwNDY0ODEzQzREMTQ1MDAzMjZG
Q0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCAqLzsgfTsKKwkJMDBEMDQ2NEIx
M0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBEMDQ2NDkxM0M0RDE0NTAw
MzI2RkNDIC8qIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oICovOyB9OworCQkwMDAyMkU2
OTEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9k
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDAwMjJF
NjgxM0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhv
ZHMuaCAqLzsgfTsKIAkJMDUyQkZDRTkxMjhBQkYxNTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xp
ZW50TW9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwNTJCRkNFODEyOEFCRjE1MDBGRDMzOEQgLyogR2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcCAq
LzsgfTsKIAkJMDUyQkZDRUIxMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDUyQkZD
RUExMjhBQkYyMTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA1RkQ2OUUwMTI4NDVENDMw
MEIyQkVCMyAvKiBET01UaW1lU3RhbXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA1RkQ2OURGMTI4NDVENDMwMEIyQkVCMyAvKiBET01UaW1lU3RhbXAu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjQy
Miw2ICs2NDI1LDkgQEAKIAkJMDBCOTMxODYxM0JBODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MRG9jdW1l
bnRQYXJzZXJTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwMENBOTNCMTEz
QzY2OTE2MDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmV3WE1MRG9jdW1lbnRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDBDQTkzQjQxM0M2Njk3QzAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50
UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ld1hNTERv
Y3VtZW50UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDBEMDQ2NDgx
M0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMEQwNDY0OTEzQzREMTQ1MDAz
MjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwMDAyMkU2ODEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1MkJGQ0U4MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2Nh
dGlvbkNsaWVudE1vY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
R2VvbG9jYXRpb25DbGllbnRNb2NrLmNwcDsgcGF0aCA9IG1vY2svR2VvbG9jYXRpb25DbGllbnRN
b2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDUyQkZDRUExMjhBQkYyMTAw
RkQzMzhEIC8qIEdlb2xvY2F0aW9uQ2xpZW50TW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBHZW9sb2NhdGlvbkNsaWVudE1vY2suaDsgcGF0aCA9IG1vY2svR2VvbG9jYXRp
b25DbGllbnRNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA1RkQ2OURGMTI4
NDVENDMwMEIyQkVCMyAvKiBET01UaW1lU3RhbXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRE9NVGltZVN0YW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MjcxOSw4ICsxMjcyNSwxMSBAQAogCQkwMEI5MzE4MDEzQkE4NjdGMDAzNUE5NDggLyogcGFyc2Vy
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwMDAyMkU2
ODEzQ0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9k
cy5oICovLAogCQkJCTAwQ0E5M0I0MTNDNjY5N0MwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBh
cnNlci5jcHAgKi8sCiAJCQkJMDBDQTkzQjExM0M2NjkxNjAwRjdGRTk1IC8qIE5ld1hNTERvY3Vt
ZW50UGFyc2VyLmggKi8sCisJCQkJMDBEMDQ2NDgxM0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlci5jcHAgKi8sCisJCQkJMDBEMDQ2NDkxM0M0RDE0NTAwMzI2RkND
IC8qIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oICovLAogCQkJCTAwQjkzMTgxMTNCQTg2
N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5jcHAgKi8sCiAJCQkJMDBCOTMxODIxM0JB
ODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmggKi8sCiAJCQkJMDBCOTMxODMxM0JB
ODY3RjAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgKi8sCkBAIC0yMDMx
MSw2ICsyMDMyMCw3IEBACiAJCQkJNjU1MEI2OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2Vj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0MTg1RUUwQ0Q2NUYwNDAwNzYzQzk5IC8qIENo
YW5nZVZlcnNpb25XcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBMDA5OURGMDI3
MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDAwMjJFNjkx
M0NFMUJCQTAwMjgyRDVCIC8qIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJBMEQwMDZDMUQwMEVGNkYyNiAvKiBDaGFyc2V0
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQjIxMjUxRjEyRDAwM0VGMjY5IC8qIENo
ZWNrYm94SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMDBCNzIxQTExREU2NDI4MDA4
QUI5RkYgLyogQ2hlY2tlZEludC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzA4OSw2ICsyMzA5OSw3
IEBACiAJCQkJOTMzMDlFMjQwOTlFNjQ5MjAwNTZFNTgxIC8qIFdyYXBDb250ZW50c0luRHVtbXlT
cGFuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUJBRjNCMjQxMkMxQTM5ODAwMDE0QkYx
IC8qIFdyaXRpbmdEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NjU4MjAyMDlEMTUw
OEQwMDBFNjFENyAvKiBYTGlua05hbWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwMEQwNDY0QjEz
QzREMTQ1MDAzMjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwMEI5MzE4ODEzQkE4REJBMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTAwQjkzMThDMTNCQThEQ0MwMDM1QTk0OCAvKiBYTUxEb2N1
bWVudFBhcnNlclNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzc3MkM0NzBDNEVCMkM2MDA4
MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjU4NjIsNiArMjU4
NzMsNyBAQAogCQkJCTUxMTIyNDc4MTBDRkI4RjQwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUyMzA5OUU2NDky
MDA1NkU1ODEgLyogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4MzNDN0NDMEEyQ0YwNzQwMEQ1NzY2NCAvKiBYTGlua05hbWVzLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTAwRDA0NjRBMTNDNEQxNDUwMDMyNkZDQyAvKiBYTUxDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDBCOTMxODcxM0JBOERCMzAw
MzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAwQjkz
MTg5MTNCQThEQkMwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDBCOTMxOEIxM0JBOERDOTAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFy
c2VyU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwCmluZGV4IDZhNDIyYjhhMWE3OWMyY2MzNDNmNWIwNDFl
NjY4YmJmNDcyZTQxNWIuLmZiNDYyODk5YTBkNDdjZDQzMzVkNmRjZTg0NWNhNzI1NDJiMTNlOTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3Bw
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEVu
dGl0eVBhcnNlci5oIgogCisjaW5jbHVkZSAiQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5l
TWV0aG9kcy5oIgogI2luY2x1ZGUgIkhUTUxFbnRpdHlTZWFyY2guaCIKICNpbmNsdWRlICJIVE1M
RW50aXR5VGFibGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC00NSwyMDkgKzQ2LDEw
MiBAQCBzdGF0aWMgY29uc3QgVUNoYXIgd2luZG93c0xhdGluMUV4dGVuc2lvbkFycmF5WzMyXSA9
IHsKICAgICAweDAyREMsIDB4MjEyMiwgMHgwMTYxLCAweDIwM0EsIDB4MDE1MywgMHgwMDlELCAw
eDAxN0UsIDB4MDE3OCwgLy8gOTgtOUYKIH07CiAKLWlubGluZSBVQ2hhciBhZGp1c3RFbnRpdHko
VUNoYXIzMiB2YWx1ZSkKLXsKLSAgICBpZiAoKHZhbHVlICYgfjB4MUYpICE9IDB4MDA4MCkKLSAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgIHJldHVybiB3aW5kb3dzTGF0aW4xRXh0ZW5zaW9uQXJy
YXlbdmFsdWUgLSAweDgwXTsKLX0KLQotaW5saW5lIFVDaGFyMzIgbGVnYWxFbnRpdHlGb3IoVUNo
YXIzMiB2YWx1ZSkKLXsKLSAgICAvLyBGSVhNRTogQSBudW1iZXIgb2Ygc3BlY2lmaWMgZW50aXR5
IHZhbHVlcyBnZW5lcmF0ZSBwYXJzZSBlcnJvcnMuCi0gICAgaWYgKHZhbHVlID09IDAgfHwgdmFs
dWUgPiAweDEwRkZGRiB8fCAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REZGRikpCi0g
ICAgICAgIHJldHVybiAweEZGRkQ7Ci0gICAgaWYgKFVfSVNfQk1QKHZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIGFkanVzdEVudGl0eSh2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1pbmxp
bmUgYm9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBWZWN0b3I8VUNoYXIsIDE2PiYg
ZGVjb2RlZEVudGl0eSkKLXsKLSAgICBpZiAoVV9JU19CTVAodmFsdWUpKSB7Ci0gICAgICAgIFVD
aGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVDaGFyPih2YWx1ZSk7Ci0gICAgICAgIEFTU0VS
VChjaGFyYWN0ZXIgPT0gdmFsdWUpOwotICAgICAgICBkZWNvZGVkRW50aXR5LmFwcGVuZChjaGFy
YWN0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZGVjb2RlZEVudGl0eS5h
cHBlbmQoVTE2X0xFQUQodmFsdWUpKTsKLSAgICBkZWNvZGVkRW50aXR5LmFwcGVuZChVMTZfVFJB
SUwodmFsdWUpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgaXNIZXhEaWdp
dChVQ2hhciBjYykKLXsKLSAgICByZXR1cm4gKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHx8IChj
YyA+PSAnYScgJiYgY2MgPD0gJ2YnKSB8fCAoY2MgPj0gJ0EnICYmIGNjIDw9ICdGJyk7Ci19Ci0K
IGlubGluZSBib29sIGlzQWxwaGFOdW1lcmljKFVDaGFyIGNjKQogewogICAgIHJldHVybiAoY2Mg
Pj0gJzAnICYmIGNjIDw9ICc5JykgfHwgKGNjID49ICdhJyAmJiBjYyA8PSAneicpIHx8IChjYyA+
PSAnQScgJiYgY2MgPD0gJ1onKTsKIH0KIAotdm9pZCB1bmNvbnN1bWVDaGFyYWN0ZXJzKFNlZ21l
bnRlZFN0cmluZyYgc291cmNlLCBjb25zdCBWZWN0b3I8VUNoYXIsIDEwPiYgY29uc3VtZWRDaGFy
YWN0ZXJzKQotewotICAgIGlmIChjb25zdW1lZENoYXJhY3RlcnMuc2l6ZSgpID09IDEpCi0gICAg
ICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVyc1swXSk7Ci0gICAgZWxzZSBpZiAoY29u
c3VtZWRDaGFyYWN0ZXJzLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1
bWVkQ2hhcmFjdGVyc1swXSk7Ci0gICAgICAgIHNvdXJjZS5wdXNoKGNvbnN1bWVkQ2hhcmFjdGVy
c1sxXSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNvdXJjZS5wcmVwZW5kKFNlZ21lbnRlZFN0cmlu
ZyhTdHJpbmcoY29uc3VtZWRDaGFyYWN0ZXJzLmRhdGEoKSwgY29uc3VtZWRDaGFyYWN0ZXJzLnNp
emUoKSkpKTsKLX0KK2NsYXNzIEhUTUxFbnRpdHlQYXJzZXIgeworcHVibGljOgorICAgIGlubGlu
ZSBzdGF0aWMgVUNoYXIgYWRqdXN0RW50aXR5KFVDaGFyMzIgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAoKHZhbHVlICYgfjB4MUYpICE9IDB4MDA4MCkKKyAgICAgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICAgICAgcmV0dXJuIHdpbmRvd3NMYXRpbjFFeHRlbnNpb25BcnJheVt2YWx1ZSAtIDB4
ODBdOworICAgIH0KIAotfQorICAgIGlubGluZSBzdGF0aWMgVUNoYXIzMiBsZWdhbEVudGl0eUZv
cihVQ2hhcjMyIHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEEgbnVtYmVyIG9mIHNw
ZWNpZmljIGVudGl0eSB2YWx1ZXMgZ2VuZXJhdGUgcGFyc2UgZXJyb3JzLgorICAgICAgICBpZiAo
IXZhbHVlIHx8IHZhbHVlID4gMHgxMEZGRkYgfHwgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8
PSAweERGRkYpKQorICAgICAgICAgICAgcmV0dXJuIDB4RkZGRDsKKyAgICAgICAgaWYgKFVfSVNf
Qk1QKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBhZGp1c3RFbnRpdHkodmFsdWUpOworICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgfQogCi1ib29sIGNvbnN1bWVIVE1MRW50aXR5KFNlZ21l
bnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVjb2RlZEVudGl0eSwgYm9v
bCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIp
Ci17Ci0gICAgQVNTRVJUKCFhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciB8fCBhZGRpdGlvbmFs
QWxsb3dlZENoYXJhY3RlciA9PSAnIicgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0g
J1wnJyB8fCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnPicpOwotICAgIEFTU0VSVCgh
bm90RW5vdWdoQ2hhcmFjdGVycyk7Ci0gICAgQVNTRVJUKGRlY29kZWRFbnRpdHkuaXNFbXB0eSgp
KTsKKyAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29udmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwg
VmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHkpCisgICAgeworICAgICAgICBpZiAoVV9J
U19CTVAodmFsdWUpKSB7CisgICAgICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2Fz
dDxVQ2hhcj4odmFsdWUpOworICAgICAgICAgICAgQVNTRVJUKGNoYXJhY3RlciA9PSB2YWx1ZSk7
CisgICAgICAgICAgICBkZWNvZGVkRW50aXR5LmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZGVjb2RlZEVudGl0eS5hcHBlbmQo
VTE2X0xFQUQodmFsdWUpKTsKKyAgICAgICAgZGVjb2RlZEVudGl0eS5hcHBlbmQoVTE2X1RSQUlM
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAotICAgIGVudW0gRW50aXR5
U3RhdGUgewotICAgICAgICBJbml0aWFsLAotICAgICAgICBOdW1iZXIsCi0gICAgICAgIE1heWJl
SGV4TG93ZXJDYXNlWCwKLSAgICAgICAgTWF5YmVIZXhVcHBlckNhc2VYLAotICAgICAgICBIZXgs
Ci0gICAgICAgIERlY2ltYWwsCi0gICAgICAgIE5hbWVkCi0gICAgfTsKLSAgICBFbnRpdHlTdGF0
ZSBlbnRpdHlTdGF0ZSA9IEluaXRpYWw7Ci0gICAgVUNoYXIzMiByZXN1bHQgPSAwOwotICAgIFZl
Y3RvcjxVQ2hhciwgMTA+IGNvbnN1bWVkQ2hhcmFjdGVyczsKKyAgICBpbmxpbmUgc3RhdGljIGJv
b2wgYWNjZXB0TWFsZm9ybWVkKCkgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgd2hpbGUgKCFzb3Vy
Y2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFVDaGFyIGNjID0gKnNvdXJjZTsKLSAgICAgICAgc3dp
dGNoIChlbnRpdHlTdGF0ZSkgewotICAgICAgICBjYXNlIEluaXRpYWw6IHsKLSAgICAgICAgICAg
IGlmIChjYyA9PSAnXHgwOScgfHwgY2MgPT0gJ1x4MEEnIHx8IGNjID09ICdceDBDJyB8fCBjYyA9
PSAnICcgfHwgY2MgPT0gJzwnIHx8IGNjID09ICcmJykKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgJiYgY2Mg
PT0gYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKGNjID09ICcjJykgewotICAgICAgICAgICAgICAgIGVudGl0
eVN0YXRlID0gTnVtYmVyOworICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb25zdW1lTmFtZWRFbnRp
dHkoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50
aXR5LCBib29sJiBub3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENo
YXJhY3RlciwgVUNoYXImIGNjKQorICAgIHsKKyAgICAgICAgVmVjdG9yPFVDaGFyLCAxMD4gY29u
c3VtZWRDaGFyYWN0ZXJzOworICAgICAgICBIVE1MRW50aXR5U2VhcmNoIGVudGl0eVNlYXJjaDsK
KyAgICAgICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjYyA9ICpz
b3VyY2U7CisgICAgICAgICAgICBlbnRpdHlTZWFyY2guYWR2YW5jZShjYyk7CisgICAgICAgICAg
ICBpZiAoIWVudGl0eVNlYXJjaC5pc0VudGl0eVByZWZpeCgpKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChjYyA+PSAnYScgJiYgY2MgPD0g
J3onKSB8fCAoY2MgPj0gJ0EnICYmIGNjIDw9ICdaJykpIHsKLSAgICAgICAgICAgICAgICBlbnRp
dHlTdGF0ZSA9IE5hbWVkOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY29uc3VtZWRDaGFyYWN0
ZXJzLmFwcGVuZChjYyk7CisgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7
CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBOdW1iZXI6IHsKLSAgICAgICAgICAgIGlmIChjYyA9
PSAneCcpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4TG93ZXJDYXNl
WDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChjYyA9PSAnWCcpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4VXBw
ZXJDYXNlWDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKSB7Ci0gICAgICAgICAgICAgICAgZW50aXR5
U3RhdGUgPSBEZWNpbWFsOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc291cmNlLnB1c2goJyMnKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE1heWJlSGV4TG93ZXJDYXNlWDogewotICAgICAg
ICAgICAgaWYgKGlzSGV4RGlnaXQoY2MpKSB7Ci0gICAgICAgICAgICAgICAgZW50aXR5U3RhdGUg
PSBIZXg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBzb3VyY2UucHVzaCgnIycpOwotICAgICAgICAgICAgc291cmNlLnB1c2goJ3gnKTsKKyAg
ICAgICAgbm90RW5vdWdoQ2hhcmFjdGVycyA9IHNvdXJjZS5pc0VtcHR5KCk7CisgICAgICAgIGlm
IChub3RFbm91Z2hDaGFyYWN0ZXJzKSB7CisgICAgICAgICAgICAvLyBXZSBjYW4ndCBhbiBlbnRp
dHkgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBhIGxvbmdlciBlbnRpdHkKKyAgICAgICAgICAgIC8v
IHRoYXQgd2UgY291bGQgbWF0Y2ggaWYgd2UgaGFkIG1vcmUgZGF0YS4KKyAgICAgICAgICAgIHVu
Y29uc3VtZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgTWF5YmVIZXhVcHBlckNh
c2VYOiB7Ci0gICAgICAgICAgICBpZiAoaXNIZXhEaWdpdChjYykpIHsKLSAgICAgICAgICAgICAg
ICBlbnRpdHlTdGF0ZSA9IEhleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7Ci0gICAgICAgICAgICBzb3VyY2Uu
cHVzaCgnWCcpOworICAgICAgICBpZiAoIWVudGl0eVNlYXJjaC5tb3N0UmVjZW50TWF0Y2goKSkg
eworICAgICAgICAgICAgQVNTRVJUKCFlbnRpdHlTZWFyY2guY3VycmVudFZhbHVlKCkpOworICAg
ICAgICAgICAgdW5jb25zdW1lQ2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBIZXg6
IHsKLSAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKQotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgY2MgLSAnMCc7Ci0gICAgICAgICAgICBlbHNlIGlm
IChjYyA+PSAnYScgJiYgY2MgPD0gJ2YnKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3Vs
dCAqIDE2ICsgMTAgKyBjYyAtICdhJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICdBJyAm
JiBjYyA8PSAnRicpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYgKyAxMCAr
IGNjIC0gJ0EnOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09
ICc7JykKLSAgICAgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2VBbmRBU1NFUlQoY2MpOwot
ICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9VVEYxNihsZWdhbEVudGl0eUZvcihyZXN1
bHQpLCBkZWNvZGVkRW50aXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgRGVjaW1hbDogewotICAgICAgICAgICAgaWYgKGNjID49
ICcwJyAmJiBjYyA8PSAnOScpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTAg
KyBjYyAtICcwJzsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChjYyA9
PSAnOycpCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvVVRGMTYobGVnYWxFbnRpdHlGb3IocmVz
dWx0KSwgZGVjb2RlZEVudGl0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIE5hbWVkOiB7Ci0gICAgICAgICAgICBIVE1MRW50aXR5
U2VhcmNoIGVudGl0eVNlYXJjaDsKLSAgICAgICAgICAgIHdoaWxlICghc291cmNlLmlzRW1wdHko
KSkgeworICAgICAgICBpZiAoZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRNYXRjaCgpLT5sZW5ndGgg
IT0gZW50aXR5U2VhcmNoLmN1cnJlbnRMZW5ndGgoKSkgeworICAgICAgICAgICAgLy8gV2UndmUg
Y29uc3VtZWQgdG9vIG1hbnkgY2hhcmFjdGVycy4gV2UgbmVlZCB0byB3YWxrIHRoZQorICAgICAg
ICAgICAgLy8gc291cmNlIGJhY2sgdG8gdGhlIHBvaW50IGF0IHdoaWNoIHdlIGhhZCBjb25zdW1l
ZCBhbgorICAgICAgICAgICAgLy8gYWN0dWFsIGVudGl0eS4KKyAgICAgICAgICAgIHVuY29uc3Vt
ZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOworICAgICAgICAgICAgY29u
c3VtZWRDaGFyYWN0ZXJzLmNsZWFyKCk7CisgICAgICAgICAgICBjb25zdCBpbnQgbGVuZ3RoID0g
ZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRNYXRjaCgpLT5sZW5ndGg7CisgICAgICAgICAgICBjb25z
dCBVQ2hhciogcmVmZXJlbmNlID0gZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRNYXRjaCgpLT5lbnRp
dHk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgY2MgPSAqc291cmNlOwotICAgICAgICAgICAgICAgIGVudGl0eVNlYXJjaC5h
ZHZhbmNlKGNjKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVudGl0eVNlYXJjaC5pc0VudGl0eVBy
ZWZpeCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlZmVyZW5jZSwgY2MgPT0gKnJlZmVyZW5jZSsrKTsKICAgICAgICAgICAgICAg
ICBjb25zdW1lZENoYXJhY3RlcnMuYXBwZW5kKGNjKTsKICAgICAgICAgICAgICAgICBzb3VyY2Uu
YWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFzb3VyY2UuaXNF
bXB0eSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vdEVub3VnaENoYXJhY3RlcnMg
PSBzb3VyY2UuaXNFbXB0eSgpOwotICAgICAgICAgICAgaWYgKG5vdEVub3VnaENoYXJhY3RlcnMp
IHsKLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBhbiBlbnRpdHkgYmVjYXVzZSB0aGVyZSBt
aWdodCBiZSBhIGxvbmdlciBlbnRpdHkKLSAgICAgICAgICAgICAgICAvLyB0aGF0IHdlIGNvdWxk
IG1hdGNoIGlmIHdlIGhhZCBtb3JlIGRhdGEuCi0gICAgICAgICAgICAgICAgdW5jb25zdW1lQ2hh
cmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFlbnRpdHlTZWFyY2gu
bW9zdFJlY2VudE1hdGNoKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWVudGl0eVNlYXJj
aC5jdXJyZW50VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdW5jb25zdW1lQ2hhcmFjdGVycyhz
b3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVudGl0eVNlYXJjaC5tb3N0UmVjZW50
TWF0Y2goKS0+bGVuZ3RoICE9IGVudGl0eVNlYXJjaC5jdXJyZW50TGVuZ3RoKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBXZSd2ZSBjb25zdW1lZCB0b28gbWFueSBjaGFyYWN0ZXJzLiAgV2UgbmVl
ZCB0byB3YWxrIHRoZQotICAgICAgICAgICAgICAgIC8vIHNvdXJjZSBiYWNrIHRvIHRoZSBwb2lu
dCBhdCB3aGljaCB3ZSBoYWQgY29uc3VtZWQgYW4KLSAgICAgICAgICAgICAgICAvLyBhY3R1YWwg
ZW50aXR5LgotICAgICAgICAgICAgICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291cmNlLCBjb25z
dW1lZENoYXJhY3RlcnMpOwotICAgICAgICAgICAgICAgIGNvbnN1bWVkQ2hhcmFjdGVycy5jbGVh
cigpOwotICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGggPSBlbnRpdHlTZWFyY2gubW9z
dFJlY2VudE1hdGNoKCktPmxlbmd0aDsKLSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogcmVm
ZXJlbmNlID0gZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRNYXRjaCgpLT5lbnRpdHk7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgICAgICBjYyA9ICpzb3VyY2U7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
cmVmZXJlbmNlLCBjYyA9PSAqcmVmZXJlbmNlKyspOwotICAgICAgICAgICAgICAgICAgICBjb25z
dW1lZENoYXJhY3RlcnMuYXBwZW5kKGNjKTsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlLmFk
dmFuY2VBbmRBU1NFUlQoY2MpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXNvdXJjZS5p
c0VtcHR5KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYyA9ICpzb3Vy
Y2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZW50aXR5U2VhcmNoLm1vc3RSZWNl
bnRNYXRjaCgpLT5sYXN0Q2hhcmFjdGVyKCkgPT0gJzsnCi0gICAgICAgICAgICAgICAgfHwgIWFk
ZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgfHwgIShpc0FscGhhTnVt
ZXJpYyhjYykgfHwgY2MgPT0gJz0nKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0
VG9VVEYxNihlbnRpdHlTZWFyY2gubW9zdFJlY2VudE1hdGNoKCktPnZhbHVlLCBkZWNvZGVkRW50
aXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291
cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY2MgPSAqc291cmNlOwogICAgICAgICB9CisgICAgICAgIGlmIChlbnRpdHlTZWFy
Y2gubW9zdFJlY2VudE1hdGNoKCktPmxhc3RDaGFyYWN0ZXIoKSA9PSAnOycKKyAgICAgICAgICAg
IHx8ICFhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcgorICAgICAgICAgICAgfHwgIShpc0FscGhh
TnVtZXJpYyhjYykgfHwgY2MgPT0gJz0nKSkgeworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b1VURjE2KGVudGl0eVNlYXJjaC5tb3N0UmVjZW50TWF0Y2goKS0+dmFsdWUsIGRlY29kZWRFbnRp
dHkpOwogICAgICAgICB9Ci0gICAgICAgIGNvbnN1bWVkQ2hhcmFjdGVycy5hcHBlbmQoY2MpOwot
ICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAgIHVuY29uc3VtZUNo
YXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIEFTU0VSVChzb3VyY2UuaXNFbXB0eSgpKTsKLSAgICBub3RFbm91Z2hD
aGFyYWN0ZXJzID0gdHJ1ZTsKLSAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3Vt
ZWRDaGFyYWN0ZXJzKTsKLSAgICByZXR1cm4gZmFsc2U7Cit9OworCit9CisKKworYm9vbCBjb25z
dW1lSFRNTEVudGl0eShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4m
IGRlY29kZWRFbnRpdHksIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9u
YWxBbGxvd2VkQ2hhcmFjdGVyKQoreworICAgIHJldHVybiBjb25zdW1lQ2hhcmFjdGVyUmVmZXJl
bmNlPEhUTUxFbnRpdHlQYXJzZXI+KHNvdXJjZSwgZGVjb2RlZEVudGl0eSwgbm90RW5vdWdoQ2hh
cmFjdGVycywgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIpOwogfQogCiBVQ2hhciBkZWNvZGVO
YW1lZEVudGl0eShjb25zdCBjaGFyKiBuYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9DaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmggYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhv
ZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wNjZiY2E3ODBkNmZjYmE3N2MwZGYxOGVkYzM4NTI0OWNlMTAxMzZj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9DaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gKKyNkZWZpbmUgQ2hhcmFjdGVyUmVmZXJlbmNl
UGFyc2VySW5saW5lTWV0aG9kc19oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworaW5saW5lIGJvb2wgaXNIZXhEaWdpdChVQ2hhciBjYykKK3sKKyAg
ICByZXR1cm4gKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHx8IChjYyA+PSAnYScgJiYgY2MgPD0g
J2YnKSB8fCAoY2MgPj0gJ0EnICYmIGNjIDw9ICdGJyk7Cit9CisKK2lubGluZSB2b2lkIHVuY29u
c3VtZUNoYXJhY3RlcnMoU2VnbWVudGVkU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFZlY3RvcjxVQ2hh
ciwgMTA+JiBjb25zdW1lZENoYXJhY3RlcnMpCit7CisgICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVy
cy5zaXplKCkgPT0gMSkKKyAgICAgICAgc291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJzWzBd
KTsKKyAgICBlbHNlIGlmIChjb25zdW1lZENoYXJhY3RlcnMuc2l6ZSgpID09IDIpIHsKKyAgICAg
ICAgc291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJzWzBdKTsKKyAgICAgICAgc291cmNlLnB1
c2goY29uc3VtZWRDaGFyYWN0ZXJzWzFdKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc291cmNlLnBy
ZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0cmluZyhjb25zdW1lZENoYXJhY3RlcnMuZGF0YSgpLCBj
b25zdW1lZENoYXJhY3RlcnMuc2l6ZSgpKSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUGFy
c2VyRnVuY3Rpb25zPgoraW5saW5lIGJvb2wgY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZShTZWdt
ZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRDaGFyYWN0ZXIs
IGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFj
dGVyKQoreworICAgIEFTU0VSVCghYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwgYWRkaXRp
b25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJyInIHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVy
ID09ICdcJycgfHwgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPT0gJz4nKTsKKyAgICBBU1NF
UlQoIW5vdEVub3VnaENoYXJhY3RlcnMpOworICAgIEFTU0VSVChkZWNvZGVkQ2hhcmFjdGVyLmlz
RW1wdHkoKSk7CisgICAgCisgICAgZW51bSBFbnRpdHlTdGF0ZSB7CisgICAgICAgIEluaXRpYWws
CisgICAgICAgIE51bWJlciwKKyAgICAgICAgTWF5YmVIZXhMb3dlckNhc2VYLAorICAgICAgICBN
YXliZUhleFVwcGVyQ2FzZVgsCisgICAgICAgIEhleCwKKyAgICAgICAgRGVjaW1hbCwKKyAgICAg
ICAgTmFtZWQKKyAgICB9OworICAgIEVudGl0eVN0YXRlIGVudGl0eVN0YXRlID0gSW5pdGlhbDsK
KyAgICBVQ2hhcjMyIHJlc3VsdCA9IDA7CisgICAgVmVjdG9yPFVDaGFyLCAxMD4gY29uc3VtZWRD
aGFyYWN0ZXJzOworICAgIAorICAgIHdoaWxlICghc291cmNlLmlzRW1wdHkoKSkgeworICAgICAg
ICBVQ2hhciBjYyA9ICpzb3VyY2U7CisgICAgICAgIHN3aXRjaCAoZW50aXR5U3RhdGUpIHsKKyAg
ICAgICAgY2FzZSBJbml0aWFsOiB7CisgICAgICAgICAgICBpZiAoY2MgPT0gJ1x4MDknIHx8IGNj
ID09ICdceDBBJyB8fCBjYyA9PSAnXHgwQycgfHwgY2MgPT0gJyAnIHx8IGNjID09ICc8JyB8fCBj
YyA9PSAnJicpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYg
KGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyICYmIGNjID09IGFkZGl0aW9uYWxBbGxvd2VkQ2hh
cmFjdGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChj
YyA9PSAnIycpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IE51bWJlcjsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoY2MgPj0g
J2EnICYmIGNjIDw9ICd6JykgfHwgKGNjID49ICdBJyAmJiBjYyA8PSAnWicpKSB7CisgICAgICAg
ICAgICAgICAgZW50aXR5U3RhdGUgPSBOYW1lZDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIE51bWJlcjogeworICAgICAgICAgICAgaWYgKGNjID09ICd4JykgeworICAgICAg
ICAgICAgICAgIGVudGl0eVN0YXRlID0gTWF5YmVIZXhMb3dlckNhc2VYOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNjID09ICdYJykgewor
ICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTWF5YmVIZXhVcHBlckNhc2VYOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNjID49ICcw
JyAmJiBjYyA8PSAnOScpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IERlY2ltYWw7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
b3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgTWF5YmVIZXhMb3dlckNhc2VYOiB7CisgICAgICAgICAgICBpZiAoaXNIZXhE
aWdpdChjYykpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IEhleDsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZS5wdXNo
KCcjJyk7CisgICAgICAgICAgICBzb3VyY2UucHVzaCgneCcpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNhc2UgTWF5YmVIZXhVcHBlckNhc2VYOiB7Cisg
ICAgICAgICAgICBpZiAoaXNIZXhEaWdpdChjYykpIHsKKyAgICAgICAgICAgICAgICBlbnRpdHlT
dGF0ZSA9IEhleDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNvdXJjZS5wdXNoKCcjJyk7CisgICAgICAgICAgICBzb3VyY2UucHVzaCgnWCcp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNhc2UgSGV4
OiB7CisgICAgICAgICAgICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIGNjIC0gJzAnOworICAgICAgICAgICAgZWxzZSBp
ZiAoY2MgPj0gJ2EnICYmIGNjIDw9ICdmJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1
bHQgKiAxNiArIDEwICsgY2MgLSAnYSc7CisgICAgICAgICAgICBlbHNlIGlmIChjYyA+PSAnQScg
JiYgY2MgPD0gJ0YnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgMTAg
KyBjYyAtICdBJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID09ICc7JykgeworICAgICAgICAg
ICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2Fs
RW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChQYXJzZXJGdW5jdGlvbnM6OmFjY2VwdE1hbGZvcm1lZCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1bmN0aW9uczo6
bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3Vt
ZWRDaGFyYWN0ZXJzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERlY2ltYWw6
IHsKKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0gJzknKQorICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgY2MgLSAnMCc7CisgICAgICAgICAgICBlbHNlIGlm
IChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChj
Yyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlckZ1bmN0aW9uczo6Y29udmVydFRvVVRG
MTYoUGFyc2VyRnVuY3Rpb25zOjpsZWdhbEVudGl0eUZvcihyZXN1bHQpLCBkZWNvZGVkQ2hhcmFj
dGVyKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoUGFyc2VyRnVuY3Rpb25zOjphY2NlcHRNYWxm
b3JtZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VyRnVuY3Rpb25zOjpjb252ZXJ0
VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5Rm9yKHJlc3VsdCksIGRlY29kZWRD
aGFyYWN0ZXIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdW5jb25zdW1l
Q2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBOYW1lZDogeworICAgICAgICAgICAgcmV0dXJuIFBhcnNlckZ1bmN0
aW9uczo6Y29uc3VtZU5hbWVkRW50aXR5KHNvdXJjZSwgZGVjb2RlZENoYXJhY3Rlciwgbm90RW5v
dWdoQ2hhcmFjdGVycywgYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIsIGNjKTsKKyAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGNvbnN1bWVkQ2hhcmFjdGVycy5hcHBlbmQoY2MpOworICAg
ICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgfQorICAgIEFTU0VSVChzb3Vy
Y2UuaXNFbXB0eSgpKTsKKyAgICBub3RFbm91Z2hDaGFyYWN0ZXJzID0gdHJ1ZTsKKyAgICB1bmNv
bnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30KKworI2VuZGlmIC8vIENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGlu
ZU1ldGhvZHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFy
YWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxD
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyZDc2MThjNGM4NDFkNTUy
N2Y1ZTY4MjY3YzVkZjgzNWU0N2E3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5jcHAKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhNTENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlci5oIgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCisjaW5jbHVkZSAiQ2hhcmFj
dGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlciB7Citw
dWJsaWM6CisgICAgaW5saW5lIHN0YXRpYyBVQ2hhcjMyIGxlZ2FsRW50aXR5Rm9yKFVDaGFyMzIg
dmFsdWUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogQSBudW1iZXIgb2Ygc3BlY2lmaWMgZW50
aXR5IHZhbHVlcyBnZW5lcmF0ZSBwYXJzZSBlcnJvcnMuCisgICAgICAgIGlmICghdmFsdWUgfHwg
dmFsdWUgPiAweDEwRkZGRiB8fCAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REZGRikp
CisgICAgICAgIHJldHVybiAweEZGRkQ7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisK
KyAgICBpbmxpbmUgc3RhdGljIGJvb2wgY29udmVydFRvVVRGMTYoVUNoYXIzMiB2YWx1ZSwgVmVj
dG9yPFVDaGFyLCAxNj4mIGRlY29kZWRDaGFyYWN0ZXIpCisgICAgeworICAgICAgICBpZiAoVV9J
U19CTVAodmFsdWUpKSB7CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVD
aGFyPih2YWx1ZSk7CisgICAgICAgIEFTU0VSVChjaGFyYWN0ZXIgPT0gdmFsdWUpOworICAgICAg
ICBkZWNvZGVkQ2hhcmFjdGVyLmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBkZWNvZGVkQ2hhcmFjdGVyLmFwcGVuZChVMTZfTEVBRCh2
YWx1ZSkpOworICAgICAgICBkZWNvZGVkQ2hhcmFjdGVyLmFwcGVuZChVMTZfVFJBSUwodmFsdWUp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaW5saW5lIHN0YXRpYyBib29s
IGFjY2VwdE1hbGZvcm1lZCgpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBpbmxpbmUgc3RhdGlj
IGJvb2wgY29uc3VtZU5hbWVkRW50aXR5KFNlZ21lbnRlZFN0cmluZyYsIFZlY3RvcjxVQ2hhciwg
MTY+JiwgYm9vbCYsIFVDaGFyLCBVQ2hhciYpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK307CisKK30KKworYm9vbCBj
b25zdW1lWE1MQ2hhcmFjdGVyUmVmZXJlbmNlKFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0
b3I8VUNoYXIsIDE2PiYgZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVy
cykKK3sKKyAgICByZXR1cm4gY29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZTxYTUxDaGFyYWN0ZXJS
ZWZlcmVuY2VQYXJzZXI+KHNvdXJjZSwgZGVjb2RlZENoYXJhY3Rlciwgbm90RW5vdWdoQ2hhcmFj
dGVycywgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZkNWYxZWI3MjllYWNkNTRjNWE0NDM3MzIwZDI3MjgwM2MyN2VmZTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5j
ZVBhcnNlci5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJfaAor
I2RlZmluZSBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJfaAorCisjaW5jbHVkZSAiU2VnbWVu
dGVkU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2Jvb2wgY29uc3VtZVhN
TENoYXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmLCBWZWN0b3I8VUNoYXIsIDE2PiYg
ZGVjb2RlZENoYXJhY3RlciwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycyk7CisKK30KKworI2Vu
ZGlmIC8vIFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100840</attachid>
            <date>2011-07-14 12:15:35 -0700</date>
            <delta_ts>2011-07-14 13:08:23 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-64398-20110714121534.patch</filename>
            <type>text/plain</type>
            <size>30749</size>
            <attacher name="Vicki Pfau">jeffrey+webkit</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA4NTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MzAyNDEyN2RkOTJhN2Mx
M2QyNGU1OTY5Y2Q4ZjA4ZDZkMTY0YjZkLi43MjJhNzQ5MzI0MzY2YzU4ODdhYWI5YWI1Y2Y4NDQ3
MDM5ZGMyM2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDctMTMgIEplZmZy
ZXkgUGZhdSAgPGpwZmF1QGFwcGxlLmNvbT4KKworICAgICAgICBDaGFyYWN0ZXIgcmVmZXJlbmNl
IHBhcnNlciBmb3IgbmV3IFhNTCBwYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0Mzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0
aC4KKworICAgICAgICBSZWZhY3RvcmVkIG91dCB0aGUgSFRNTCBlbnRpdHkgcGFyc2VyIGFuZCBh
ZGRlZCBhIGNvbW1vbiB0ZW1wbGF0ZSBmb3IgcGFyc2luZyBjaGFyYWN0ZXIgcmVmZXJlbmNlcy4K
KworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MRW50aXR5UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnN1bWVIVE1MRW50aXR5KToKKyAgICAgICAgKiB4bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVyZW5j
ZVBhcnNlcklubGluZU1ldGhvZHMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjppc0hleERpZ2l0
KToKKyAgICAgICAgKFdlYkNvcmU6OnVuY29uc3VtZUNoYXJhY3RlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29uc3VtZUNoYXJhY3RlclJlZmVyZW5jZSk6CisgICAgICAgICogeG1sL3BhcnNlci9Y
TUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNvbnN1bWVYTUxDaGFyYWN0ZXJSZWZlcmVuY2UpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1M
Q2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmg6IEFkZGVkLgorCiAyMDExLTA3LTEyICBKb3NlcGgg
UGVjb3Jhcm8gIDxqb2VwZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQXBwbGljYXRpb25DYWNo
ZSB1cGRhdGUgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSBmYWlsIHdoZW4gcmVhY2hpbmcgcGVyLW9y
aWdpbiBxdW90YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDEzMjNkMjkyY2Y5NjM3ZGZlNGUyYjYyMDI5MmE1ZWNhZTkxYzljZjAu
LjFmNTFjNDFlOWE2MGNjNzUxNGI4MzdiZDkwNWJkMWM4Njc0M2UyYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTU1LDYgKzU1
LDkgQEAKIAkJMDBCOTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyU2Nv
cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwQjkz
MTg2MTNCQTg2N0YwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlclNjb3BlLmggKi87IH07CiAJ
CTAwQ0E5M0IyMTNDNjY5MTYwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDBDQTkzQjExM0M2Njkx
NjAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2VyLmggKi87IH07CiAJCTAwQ0E5M0I1MTND
NjY5N0MwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMENBOTNCNDEzQzY2OTdDMDBGN0ZFOTUg
LyogTmV3WE1MRG9jdW1lbnRQYXJzZXIuY3BwICovOyB9OworCQkwMEQwNDY0QTEzQzREMTQ1MDAz
MjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDAwRDA0NjQ4MTNDNEQxNDUwMDMyNkZDQyAv
KiBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwICovOyB9OworCQkwMEQwNDY0QjEzQzRE
MTQ1MDAzMjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMEQwNDY0OTEzQzREMTQ1MDAzMjZG
Q0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggKi87IH07CisJCTAwMDIyRTY5MTND
RTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwMDAyMkU2ODEz
Q0UxQkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5o
ICovOyB9OwogCQkwNTJCRkNFOTEyOEFCRjE1MDBGRDMzOEQgLyogR2VvbG9jYXRpb25DbGllbnRN
b2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA1
MkJGQ0U4MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suY3BwICovOyB9
OwogCQkwNTJCRkNFQjEyOEFCRjIxMDBGRDMzOEQgLyogR2VvbG9jYXRpb25DbGllbnRNb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNTJCRkNFQTEy
OEFCRjIxMDBGRDMzOEQgLyogR2VvbG9jYXRpb25DbGllbnRNb2NrLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDVGRDY5RTAxMjg0NUQ0MzAwQjJC
RUIzIC8qIERPTVRpbWVTdGFtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDVGRDY5REYxMjg0NUQ0MzAwQjJCRUIzIC8qIERPTVRpbWVTdGFtcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02NDIyLDYg
KzY0MjUsOSBAQAogCQkwMEI5MzE4NjEzQkE4NjdGMDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxEb2N1bWVudFBh
cnNlclNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTAwQ0E5M0IxMTNDNjY5
MTYwMEY3RkU5NSAvKiBOZXdYTUxEb2N1bWVudFBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOZXdYTUxEb2N1bWVudFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwMENBOTNCNDEzQzY2OTdDMDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQYXJz
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV3WE1MRG9jdW1l
bnRQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwMEQwNDY0ODEzQzRE
MTQ1MDAzMjZGQ0MgLyogWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTAwRDA0NjQ5MTNDNEQxNDUwMDMyNkZD
QyAvKiBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTAwMDIyRTY4MTNDRTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJSZWZl
cmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMDUyQkZDRTgxMjhBQkYxNTAwRkQzMzhEIC8qIEdlb2xvY2F0aW9u
Q2xpZW50TW9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBHZW9s
b2NhdGlvbkNsaWVudE1vY2suY3BwOyBwYXRoID0gbW9jay9HZW9sb2NhdGlvbkNsaWVudE1vY2su
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNTJCRkNFQTEyOEFCRjIxMDBGRDMz
OEQgLyogR2VvbG9jYXRpb25DbGllbnRNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEdlb2xvY2F0aW9uQ2xpZW50TW9jay5oOyBwYXRoID0gbW9jay9HZW9sb2NhdGlvbkNs
aWVudE1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDVGRDY5REYxMjg0NUQ0
MzAwQjJCRUIzIC8qIERPTVRpbWVTdGFtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01UaW1lU3RhbXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNzE5
LDggKzEyNzI1LDExIEBACiAJCTAwQjkzMTgwMTNCQTg2N0YwMDM1QTk0OCAvKiBwYXJzZXIgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTAwMDIyRTY4MTND
RTFCQkEwMDI4MkQ1QiAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzLmgg
Ki8sCiAJCQkJMDBDQTkzQjQxM0M2Njk3QzAwRjdGRTk1IC8qIE5ld1hNTERvY3VtZW50UGFyc2Vy
LmNwcCAqLywKIAkJCQkwMENBOTNCMTEzQzY2OTE2MDBGN0ZFOTUgLyogTmV3WE1MRG9jdW1lbnRQ
YXJzZXIuaCAqLywKKwkJCQkwMEQwNDY0ODEzQzREMTQ1MDAzMjZGQ0MgLyogWE1MQ2hhcmFjdGVy
UmVmZXJlbmNlUGFyc2VyLmNwcCAqLywKKwkJCQkwMEQwNDY0OTEzQzREMTQ1MDAzMjZGQ0MgLyog
WE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyLmggKi8sCiAJCQkJMDBCOTMxODExM0JBODY3RjAw
MzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCAqLywKIAkJCQkwMEI5MzE4MjEzQkE4NjdG
MDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuaCAqLywKIAkJCQkwMEI5MzE4MzEzQkE4NjdG
MDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCAqLywKQEAgLTIwMzExLDYg
KzIwMzIwLDcgQEAKIAkJCQk2NTUwQjY5RTA5OURGMDI3MDA5MEQ3ODEgLyogQ0RBVEFTZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTQxODVFRTBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdl
VmVyc2lvbldyYXBwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTBCNkEwMDk5REYwMjcwMDkw
RDc4MSAvKiBDaGFyYWN0ZXJEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkwMDAyMkU2OTEzQ0Ux
QkJBMDAyODJENUIgLyogQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMkEwRDAwNkMxRDAwRUY2RjI2IC8qIENoYXJzZXREYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCMjEyNTFGMTJEMDAzRUYyNjkgLyogQ2hlY2ti
b3hJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwMEI3MjFBMTFERTY0MjgwMDhBQjlG
RiAvKiBDaGVja2VkSW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIzMDg5LDYgKzIzMDk5LDcgQEAK
IAkJCQk5MzMwOUUyNDA5OUU2NDkyMDA1NkU1ODEgLyogV3JhcENvbnRlbnRzSW5EdW1teVNwYW5D
b21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QkFGM0IyNDEyQzFBMzk4MDAwMTRCRjEgLyog
V3JpdGluZ0RpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgyMDIwOUQxNTA4RDAw
MEU2MUQ3IC8qIFhMaW5rTmFtZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTAwRDA0NjRCMTNDNEQx
NDUwMDMyNkZDQyAvKiBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTAwQjkzMTg4MTNCQThEQkEwMDM1QTk0OCAvKiBYTUxEb2N1bWVudFBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDBCOTMxOEMxM0JBOERDQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50
UGFyc2VyU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzcyQzQ3MEM0RUIyQzYwMDgzMjg1
RiAvKiBYTUxIdHRwUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTg2Miw2ICsyNTg3Myw3
IEBACiAJCQkJNTExMjI0NzgxMENGQjhGNDAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5RTIzMDk5RTY0OTIwMDU2
RTU4MSAvKiBXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTgzM0M3Q0MwQTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFtZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMDBEMDQ2NEExM0M0RDE0NTAwMzI2RkNDIC8qIFhNTENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwMEI5MzE4NzEzQkE4REIzMDAzNUE5
NDggLyogWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDBCOTMxODkx
M0JBOERCQzAwMzVBOTQ4IC8qIFhNTERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwMEI5MzE4QjEzQkE4REM5MDAzNUE5NDggLyogWE1MRG9jdW1lbnRQYXJzZXJT
Y29wZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL0hUTUxFbnRpdHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTEVudGl0eVBhcnNlci5jcHAKaW5kZXggNmE0MjJiOGExYTc5YzJjYzM0M2Y1YjA0MWU2Njhi
YmY0NzJlNDE1Yi4uZmI0NjI4OTlhMGQ0N2NkNDMzNWQ2ZGNlODQ1Y2E3MjU0MmIxM2U5NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTEVudGl0eVBhcnNlci5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MRW50aXR5
UGFyc2VyLmgiCiAKKyNpbmNsdWRlICJDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRo
b2RzLmgiCiAjaW5jbHVkZSAiSFRNTEVudGl0eVNlYXJjaC5oIgogI2luY2x1ZGUgIkhUTUxFbnRp
dHlUYWJsZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTQ1LDIwOSArNDYsMTAyIEBA
IHN0YXRpYyBjb25zdCBVQ2hhciB3aW5kb3dzTGF0aW4xRXh0ZW5zaW9uQXJyYXlbMzJdID0gewog
ICAgIDB4MDJEQywgMHgyMTIyLCAweDAxNjEsIDB4MjAzQSwgMHgwMTUzLCAweDAwOUQsIDB4MDE3
RSwgMHgwMTc4LCAvLyA5OC05RgogfTsKIAotaW5saW5lIFVDaGFyIGFkanVzdEVudGl0eShVQ2hh
cjMyIHZhbHVlKQotewotICAgIGlmICgodmFsdWUgJiB+MHgxRikgIT0gMHgwMDgwKQotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgcmV0dXJuIHdpbmRvd3NMYXRpbjFFeHRlbnNpb25BcnJheVt2
YWx1ZSAtIDB4ODBdOwotfQotCi1pbmxpbmUgVUNoYXIzMiBsZWdhbEVudGl0eUZvcihVQ2hhcjMy
IHZhbHVlKQotewotICAgIC8vIEZJWE1FOiBBIG51bWJlciBvZiBzcGVjaWZpYyBlbnRpdHkgdmFs
dWVzIGdlbmVyYXRlIHBhcnNlIGVycm9ycy4KLSAgICBpZiAodmFsdWUgPT0gMCB8fCB2YWx1ZSA+
IDB4MTBGRkZGIHx8ICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhERkZGKSkKLSAgICAg
ICAgcmV0dXJuIDB4RkZGRDsKLSAgICBpZiAoVV9JU19CTVAodmFsdWUpKQotICAgICAgICByZXR1
cm4gYWRqdXN0RW50aXR5KHZhbHVlKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLWlubGluZSBi
b29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNv
ZGVkRW50aXR5KQotewotICAgIGlmIChVX0lTX0JNUCh2YWx1ZSkpIHsKLSAgICAgICAgVUNoYXIg
Y2hhcmFjdGVyID0gc3RhdGljX2Nhc3Q8VUNoYXI+KHZhbHVlKTsKLSAgICAgICAgQVNTRVJUKGNo
YXJhY3RlciA9PSB2YWx1ZSk7Ci0gICAgICAgIGRlY29kZWRFbnRpdHkuYXBwZW5kKGNoYXJhY3Rl
cik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBkZWNvZGVkRW50aXR5LmFwcGVu
ZChVMTZfTEVBRCh2YWx1ZSkpOwotICAgIGRlY29kZWRFbnRpdHkuYXBwZW5kKFUxNl9UUkFJTCh2
YWx1ZSkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBpc0hleERpZ2l0KFVD
aGFyIGNjKQotewotICAgIHJldHVybiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykgfHwgKGNjID49
ICdhJyAmJiBjYyA8PSAnZicpIHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKTsKLX0KLQogaW5s
aW5lIGJvb2wgaXNBbHBoYU51bWVyaWMoVUNoYXIgY2MpCiB7CiAgICAgcmV0dXJuIChjYyA+PSAn
MCcgJiYgY2MgPD0gJzknKSB8fCAoY2MgPj0gJ2EnICYmIGNjIDw9ICd6JykgfHwgKGNjID49ICdB
JyAmJiBjYyA8PSAnWicpOwogfQogCi12b2lkIHVuY29uc3VtZUNoYXJhY3RlcnMoU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UsIGNvbnN0IFZlY3RvcjxVQ2hhciwgMTA+JiBjb25zdW1lZENoYXJhY3Rl
cnMpCi17Ci0gICAgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5zaXplKCkgPT0gMSkKLSAgICAgICAg
c291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJzWzBdKTsKLSAgICBlbHNlIGlmIChjb25zdW1l
ZENoYXJhY3RlcnMuc2l6ZSgpID09IDIpIHsKLSAgICAgICAgc291cmNlLnB1c2goY29uc3VtZWRD
aGFyYWN0ZXJzWzBdKTsKLSAgICAgICAgc291cmNlLnB1c2goY29uc3VtZWRDaGFyYWN0ZXJzWzFd
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgc291cmNlLnByZXBlbmQoU2VnbWVudGVkU3RyaW5nKFN0
cmluZyhjb25zdW1lZENoYXJhY3RlcnMuZGF0YSgpLCBjb25zdW1lZENoYXJhY3RlcnMuc2l6ZSgp
KSkpOwotfQorY2xhc3MgSFRNTEVudGl0eVBhcnNlciB7CitwdWJsaWM6CisgICAgaW5saW5lIHN0
YXRpYyBVQ2hhciBhZGp1c3RFbnRpdHkoVUNoYXIzMiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICgodmFsdWUgJiB+MHgxRikgIT0gMHgwMDgwKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgICAgICByZXR1cm4gd2luZG93c0xhdGluMUV4dGVuc2lvbkFycmF5W3ZhbHVlIC0gMHg4MF07
CisgICAgfQogCi19CisgICAgaW5saW5lIHN0YXRpYyBVQ2hhcjMyIGxlZ2FsRW50aXR5Rm9yKFVD
aGFyMzIgdmFsdWUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogQSBudW1iZXIgb2Ygc3BlY2lm
aWMgZW50aXR5IHZhbHVlcyBnZW5lcmF0ZSBwYXJzZSBlcnJvcnMuCisgICAgICAgIGlmICghdmFs
dWUgfHwgdmFsdWUgPiAweDEwRkZGRiB8fCAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4
REZGRikpCisgICAgICAgICAgICByZXR1cm4gMHhGRkZEOworICAgICAgICBpZiAoVV9JU19CTVAo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGFkanVzdEVudGl0eSh2YWx1ZSk7CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICB9CiAKLWJvb2wgY29uc3VtZUhUTUxFbnRpdHkoU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkRW50aXR5LCBib29sJiBu
b3RFbm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKLXsK
LSAgICBBU1NFUlQoIWFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyIHx8IGFkZGl0aW9uYWxBbGxv
d2VkQ2hhcmFjdGVyID09ICciJyB8fCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnXCcn
IHx8IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICc+Jyk7Ci0gICAgQVNTRVJUKCFub3RF
bm91Z2hDaGFyYWN0ZXJzKTsKLSAgICBBU1NFUlQoZGVjb2RlZEVudGl0eS5pc0VtcHR5KCkpOwor
ICAgIGlubGluZSBzdGF0aWMgYm9vbCBjb252ZXJ0VG9VVEYxNihVQ2hhcjMyIHZhbHVlLCBWZWN0
b3I8VUNoYXIsIDE2PiYgZGVjb2RlZEVudGl0eSkKKyAgICB7CisgICAgICAgIGlmIChVX0lTX0JN
UCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IHN0YXRpY19jYXN0PFVD
aGFyPih2YWx1ZSk7CisgICAgICAgICAgICBBU1NFUlQoY2hhcmFjdGVyID09IHZhbHVlKTsKKyAg
ICAgICAgICAgIGRlY29kZWRFbnRpdHkuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBkZWNvZGVkRW50aXR5LmFwcGVuZChVMTZf
TEVBRCh2YWx1ZSkpOworICAgICAgICBkZWNvZGVkRW50aXR5LmFwcGVuZChVMTZfVFJBSUwodmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgZW51bSBFbnRpdHlTdGF0
ZSB7Ci0gICAgICAgIEluaXRpYWwsCi0gICAgICAgIE51bWJlciwKLSAgICAgICAgTWF5YmVIZXhM
b3dlckNhc2VYLAotICAgICAgICBNYXliZUhleFVwcGVyQ2FzZVgsCi0gICAgICAgIEhleCwKLSAg
ICAgICAgRGVjaW1hbCwKLSAgICAgICAgTmFtZWQKLSAgICB9OwotICAgIEVudGl0eVN0YXRlIGVu
dGl0eVN0YXRlID0gSW5pdGlhbDsKLSAgICBVQ2hhcjMyIHJlc3VsdCA9IDA7Ci0gICAgVmVjdG9y
PFVDaGFyLCAxMD4gY29uc3VtZWRDaGFyYWN0ZXJzOworICAgIGlubGluZSBzdGF0aWMgYm9vbCBh
Y2NlcHRNYWxmb3JtZWQoKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB3aGlsZSAoIXNvdXJjZS5p
c0VtcHR5KCkpIHsKLSAgICAgICAgVUNoYXIgY2MgPSAqc291cmNlOwotICAgICAgICBzd2l0Y2gg
KGVudGl0eVN0YXRlKSB7Ci0gICAgICAgIGNhc2UgSW5pdGlhbDogewotICAgICAgICAgICAgaWYg
KGNjID09ICdceDA5JyB8fCBjYyA9PSAnXHgwQScgfHwgY2MgPT0gJ1x4MEMnIHx8IGNjID09ICcg
JyB8fCBjYyA9PSAnPCcgfHwgY2MgPT0gJyYnKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciAmJiBjYyA9PSBh
ZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAoY2MgPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAgZW50aXR5U3Rh
dGUgPSBOdW1iZXI7CisgICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnN1bWVOYW1lZEVudGl0eShT
ZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRFbnRpdHks
IGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMsIFVDaGFyIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFj
dGVyLCBVQ2hhciYgY2MpCisgICAgeworICAgICAgICBWZWN0b3I8VUNoYXIsIDEwPiBjb25zdW1l
ZENoYXJhY3RlcnM7CisgICAgICAgIEhUTUxFbnRpdHlTZWFyY2ggZW50aXR5U2VhcmNoOworICAg
ICAgICB3aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNjID0gKnNvdXJj
ZTsKKyAgICAgICAgICAgIGVudGl0eVNlYXJjaC5hZHZhbmNlKGNjKTsKKyAgICAgICAgICAgIGlm
ICghZW50aXR5U2VhcmNoLmlzRW50aXR5UHJlZml4KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGNjID49ICdhJyAmJiBjYyA8PSAneicp
IHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSkgewotICAgICAgICAgICAgICAgIGVudGl0eVN0
YXRlID0gTmFtZWQ7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjb25zdW1lZENoYXJhY3RlcnMu
YXBwZW5kKGNjKTsKKyAgICAgICAgICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKICAg
ICAgICAgfQotICAgICAgICBjYXNlIE51bWJlcjogewotICAgICAgICAgICAgaWYgKGNjID09ICd4
JykgewotICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTWF5YmVIZXhMb3dlckNhc2VYOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNj
ID09ICdYJykgewotICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlID0gTWF5YmVIZXhVcHBlckNh
c2VYOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0
ZSA9IERlY2ltYWw7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgTWF5YmVIZXhMb3dlckNhc2VYOiB7Ci0gICAgICAgICAg
ICBpZiAoaXNIZXhEaWdpdChjYykpIHsKLSAgICAgICAgICAgICAgICBlbnRpdHlTdGF0ZSA9IEhl
eDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHNvdXJjZS5wdXNoKCcjJyk7Ci0gICAgICAgICAgICBzb3VyY2UucHVzaCgneCcpOworICAgICAg
ICBub3RFbm91Z2hDaGFyYWN0ZXJzID0gc291cmNlLmlzRW1wdHkoKTsKKyAgICAgICAgaWYgKG5v
dEVub3VnaENoYXJhY3RlcnMpIHsKKyAgICAgICAgICAgIC8vIFdlIGNhbid0IGFuIGVudGl0eSBi
ZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGEgbG9uZ2VyIGVudGl0eQorICAgICAgICAgICAgLy8gdGhh
dCB3ZSBjb3VsZCBtYXRjaCBpZiB3ZSBoYWQgbW9yZSBkYXRhLgorICAgICAgICAgICAgdW5jb25z
dW1lQ2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBNYXliZUhleFVwcGVyQ2FzZVg6
IHsKLSAgICAgICAgICAgIGlmIChpc0hleERpZ2l0KGNjKSkgewotICAgICAgICAgICAgICAgIGVu
dGl0eVN0YXRlID0gSGV4OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgc291cmNlLnB1c2goJyMnKTsKLSAgICAgICAgICAgIHNvdXJjZS5wdXNo
KCdYJyk7CisgICAgICAgIGlmICghZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRNYXRjaCgpKSB7Cisg
ICAgICAgICAgICBBU1NFUlQoIWVudGl0eVNlYXJjaC5jdXJyZW50VmFsdWUoKSk7CisgICAgICAg
ICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBjYXNlIEhleDogewot
ICAgICAgICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCi0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gcmVzdWx0ICogMTYgKyBjYyAtICcwJzsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNj
ID49ICdhJyAmJiBjYyA8PSAnZicpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICog
MTYgKyAxMCArIGNjIC0gJ2EnOwotICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNj
IDw9ICdGJykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2Mg
LSAnQSc7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoY2MgPT0gJzsn
KQotICAgICAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1VURjE2KGxlZ2FsRW50aXR5Rm9yKHJlc3VsdCks
IGRlY29kZWRFbnRpdHkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBEZWNpbWFsOiB7Ci0gICAgICAgICAgICBpZiAoY2MgPj0gJzAn
ICYmIGNjIDw9ICc5JykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxMCArIGNj
IC0gJzAnOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNjID09ICc7
JykKLSAgICAgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2VBbmRBU1NFUlQoY2MpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9VVEYxNihsZWdhbEVudGl0eUZvcihyZXN1bHQp
LCBkZWNvZGVkRW50aXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgTmFtZWQ6IHsKLSAgICAgICAgICAgIEhUTUxFbnRpdHlTZWFy
Y2ggZW50aXR5U2VhcmNoOwotICAgICAgICAgICAgd2hpbGUgKCFzb3VyY2UuaXNFbXB0eSgpKSB7
CisgICAgICAgIGlmIChlbnRpdHlTZWFyY2gubW9zdFJlY2VudE1hdGNoKCktPmxlbmd0aCAhPSBl
bnRpdHlTZWFyY2guY3VycmVudExlbmd0aCgpKSB7CisgICAgICAgICAgICAvLyBXZSd2ZSBjb25z
dW1lZCB0b28gbWFueSBjaGFyYWN0ZXJzLiBXZSBuZWVkIHRvIHdhbGsgdGhlCisgICAgICAgICAg
ICAvLyBzb3VyY2UgYmFjayB0byB0aGUgcG9pbnQgYXQgd2hpY2ggd2UgaGFkIGNvbnN1bWVkIGFu
CisgICAgICAgICAgICAvLyBhY3R1YWwgZW50aXR5LgorICAgICAgICAgICAgdW5jb25zdW1lQ2hh
cmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7CisgICAgICAgICAgICBjb25zdW1l
ZENoYXJhY3RlcnMuY2xlYXIoKTsKKyAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGggPSBlbnRp
dHlTZWFyY2gubW9zdFJlY2VudE1hdGNoKCktPmxlbmd0aDsKKyAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiByZWZlcmVuY2UgPSBlbnRpdHlTZWFyY2gubW9zdFJlY2VudE1hdGNoKCktPmVudGl0eTsK
KyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBjYyA9ICpzb3VyY2U7Ci0gICAgICAgICAgICAgICAgZW50aXR5U2VhcmNoLmFkdmFu
Y2UoY2MpOwotICAgICAgICAgICAgICAgIGlmICghZW50aXR5U2VhcmNoLmlzRW50aXR5UHJlZml4
KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQocmVmZXJlbmNlLCBjYyA9PSAqcmVmZXJlbmNlKyspOwogICAgICAgICAgICAgICAgIGNv
bnN1bWVkQ2hhcmFjdGVycy5hcHBlbmQoY2MpOwogICAgICAgICAgICAgICAgIHNvdXJjZS5hZHZh
bmNlQW5kQVNTRVJUKGNjKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXNvdXJjZS5pc0VtcHR5
KCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbm90RW5vdWdoQ2hhcmFjdGVycyA9IHNv
dXJjZS5pc0VtcHR5KCk7Ci0gICAgICAgICAgICBpZiAobm90RW5vdWdoQ2hhcmFjdGVycykgewot
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGFuIGVudGl0eSBiZWNhdXNlIHRoZXJlIG1pZ2h0
IGJlIGEgbG9uZ2VyIGVudGl0eQotICAgICAgICAgICAgICAgIC8vIHRoYXQgd2UgY291bGQgbWF0
Y2ggaWYgd2UgaGFkIG1vcmUgZGF0YS4KLSAgICAgICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0
ZXJzKHNvdXJjZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWVudGl0eVNlYXJjaC5tb3N0
UmVjZW50TWF0Y2goKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghZW50aXR5U2VhcmNoLmN1
cnJlbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB1bmNvbnN1bWVDaGFyYWN0ZXJzKHNvdXJj
ZSwgY29uc3VtZWRDaGFyYWN0ZXJzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRNYXRj
aCgpLT5sZW5ndGggIT0gZW50aXR5U2VhcmNoLmN1cnJlbnRMZW5ndGgoKSkgewotICAgICAgICAg
ICAgICAgIC8vIFdlJ3ZlIGNvbnN1bWVkIHRvbyBtYW55IGNoYXJhY3RlcnMuICBXZSBuZWVkIHRv
IHdhbGsgdGhlCi0gICAgICAgICAgICAgICAgLy8gc291cmNlIGJhY2sgdG8gdGhlIHBvaW50IGF0
IHdoaWNoIHdlIGhhZCBjb25zdW1lZCBhbgotICAgICAgICAgICAgICAgIC8vIGFjdHVhbCBlbnRp
dHkuCi0gICAgICAgICAgICAgICAgdW5jb25zdW1lQ2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1bWVk
Q2hhcmFjdGVycyk7Ci0gICAgICAgICAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJzLmNsZWFyKCk7
Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IGxlbmd0aCA9IGVudGl0eVNlYXJjaC5tb3N0UmVj
ZW50TWF0Y2goKS0+bGVuZ3RoOwotICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiByZWZlcmVu
Y2UgPSBlbnRpdHlTZWFyY2gubW9zdFJlY2VudE1hdGNoKCktPmVudGl0eTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNjID0gKnNvdXJjZTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZWZl
cmVuY2UsIGNjID09ICpyZWZlcmVuY2UrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN1bWVk
Q2hhcmFjdGVycy5hcHBlbmQoY2MpOwotICAgICAgICAgICAgICAgICAgICBzb3VyY2UuYWR2YW5j
ZUFuZEFTU0VSVChjYyk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghc291cmNlLmlzRW1w
dHkoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNjID0gKnNvdXJjZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlbnRpdHlTZWFyY2gubW9zdFJlY2VudE1h
dGNoKCktPmxhc3RDaGFyYWN0ZXIoKSA9PSAnOycKLSAgICAgICAgICAgICAgICB8fCAhYWRkaXRp
b25hbEFsbG93ZWRDaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICB8fCAhKGlzQWxwaGFOdW1lcmlj
KGNjKSB8fCBjYyA9PSAnPScpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1VU
RjE2KGVudGl0eVNlYXJjaC5tb3N0UmVjZW50TWF0Y2goKS0+dmFsdWUsIGRlY29kZWRFbnRpdHkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdW5jb25zdW1lQ2hhcmFjdGVycyhzb3VyY2Us
IGNvbnN1bWVkQ2hhcmFjdGVycyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBjYyA9ICpzb3VyY2U7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGVudGl0eVNlYXJjaC5t
b3N0UmVjZW50TWF0Y2goKS0+bGFzdENoYXJhY3RlcigpID09ICc7JworICAgICAgICAgICAgfHwg
IWFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyCisgICAgICAgICAgICB8fCAhKGlzQWxwaGFOdW1l
cmljKGNjKSB8fCBjYyA9PSAnPScpKSB7CisgICAgICAgICAgICByZXR1cm4gY29udmVydFRvVVRG
MTYoZW50aXR5U2VhcmNoLm1vc3RSZWNlbnRNYXRjaCgpLT52YWx1ZSwgZGVjb2RlZEVudGl0eSk7
CiAgICAgICAgIH0KLSAgICAgICAgY29uc3VtZWRDaGFyYWN0ZXJzLmFwcGVuZChjYyk7Ci0gICAg
ICAgIHNvdXJjZS5hZHZhbmNlQW5kQVNTRVJUKGNjKTsKKyAgICAgICAgdW5jb25zdW1lQ2hhcmFj
dGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgQVNTRVJUKHNvdXJjZS5pc0VtcHR5KCkpOwotICAgIG5vdEVub3VnaENoYXJh
Y3RlcnMgPSB0cnVlOwotICAgIHVuY29uc3VtZUNoYXJhY3RlcnMoc291cmNlLCBjb25zdW1lZENo
YXJhY3RlcnMpOwotICAgIHJldHVybiBmYWxzZTsKK307CisKK30KKworCitib29sIGNvbnN1bWVI
VE1MRW50aXR5KFNlZ21lbnRlZFN0cmluZyYgc291cmNlLCBWZWN0b3I8VUNoYXIsIDE2PiYgZGVj
b2RlZEVudGl0eSwgYm9vbCYgbm90RW5vdWdoQ2hhcmFjdGVycywgVUNoYXIgYWRkaXRpb25hbEFs
bG93ZWRDaGFyYWN0ZXIpCit7CisgICAgcmV0dXJuIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2U8
SFRNTEVudGl0eVBhcnNlcj4oc291cmNlLCBkZWNvZGVkRW50aXR5LCBub3RFbm91Z2hDaGFyYWN0
ZXJzLCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcik7CiB9CiAKIFVDaGFyIGRlY29kZU5hbWVk
RW50aXR5KGNvbnN0IGNoYXIqIG5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL0NoYXJhY3RlclJlZmVyZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VySW5saW5lTWV0aG9kcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc2MWM1NDIyMDRjZDBjOGJiOTk3YjMyMmE5MmUwMjk1MTYwNjFkNjUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL0NoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlcklubGluZU1ldGhvZHMuaApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENoYXJhY3RlclJlZmVy
ZW5jZVBhcnNlcklubGluZU1ldGhvZHNfaAorI2RlZmluZSBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJz
ZXJJbmxpbmVNZXRob2RzX2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitpbmxpbmUgYm9vbCBpc0hleERpZ2l0KFVDaGFyIGNjKQoreworICAgIHJl
dHVybiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykgfHwgKGNjID49ICdhJyAmJiBjYyA8PSAnZicp
IHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ0YnKTsKK30KKworaW5saW5lIHZvaWQgdW5jb25zdW1l
Q2hhcmFjdGVycyhTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgY29uc3QgVmVjdG9yPFVDaGFyLCAx
MD4mIGNvbnN1bWVkQ2hhcmFjdGVycykKK3sKKyAgICBpZiAoY29uc3VtZWRDaGFyYWN0ZXJzLnNp
emUoKSA9PSAxKQorICAgICAgICBzb3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOwor
ICAgIGVsc2UgaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5zaXplKCkgPT0gMikgeworICAgICAgICBz
b3VyY2UucHVzaChjb25zdW1lZENoYXJhY3RlcnNbMF0pOworICAgICAgICBzb3VyY2UucHVzaChj
b25zdW1lZENoYXJhY3RlcnNbMV0pOworICAgIH0gZWxzZQorICAgICAgICBzb3VyY2UucHJlcGVu
ZChTZWdtZW50ZWRTdHJpbmcoU3RyaW5nKGNvbnN1bWVkQ2hhcmFjdGVycy5kYXRhKCksIGNvbnN1
bWVkQ2hhcmFjdGVycy5zaXplKCkpKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBQYXJzZXJG
dW5jdGlvbnM+Citib29sIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5n
JiBzb3VyY2UsIFZlY3RvcjxVQ2hhciwgMTY+JiBkZWNvZGVkQ2hhcmFjdGVyLCBib29sJiBub3RF
bm91Z2hDaGFyYWN0ZXJzLCBVQ2hhciBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKK3sKKyAg
ICBBU1NFUlQoIWFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyIHx8IGFkZGl0aW9uYWxBbGxvd2Vk
Q2hhcmFjdGVyID09ICciJyB8fCBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PSAnXCcnIHx8
IGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09ICc+Jyk7CisgICAgQVNTRVJUKCFub3RFbm91
Z2hDaGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQoZGVjb2RlZENoYXJhY3Rlci5pc0VtcHR5KCkpOwor
ICAgIAorICAgIGVudW0gRW50aXR5U3RhdGUgeworICAgICAgICBJbml0aWFsLAorICAgICAgICBO
dW1iZXIsCisgICAgICAgIE1heWJlSGV4TG93ZXJDYXNlWCwKKyAgICAgICAgTWF5YmVIZXhVcHBl
ckNhc2VYLAorICAgICAgICBIZXgsCisgICAgICAgIERlY2ltYWwsCisgICAgICAgIE5hbWVkCisg
ICAgfTsKKyAgICBFbnRpdHlTdGF0ZSBlbnRpdHlTdGF0ZSA9IEluaXRpYWw7CisgICAgVUNoYXIz
MiByZXN1bHQgPSAwOworICAgIFZlY3RvcjxVQ2hhciwgMTA+IGNvbnN1bWVkQ2hhcmFjdGVyczsK
KyAgICAKKyAgICB3aGlsZSAoIXNvdXJjZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgVUNoYXIgY2Mg
PSAqc291cmNlOworICAgICAgICBzd2l0Y2ggKGVudGl0eVN0YXRlKSB7CisgICAgICAgIGNhc2Ug
SW5pdGlhbDogeworICAgICAgICAgICAgaWYgKGNjID09ICdceDA5JyB8fCBjYyA9PSAnXHgwQScg
fHwgY2MgPT0gJ1x4MEMnIHx8IGNjID09ICcgJyB8fCBjYyA9PSAnPCcgfHwgY2MgPT0gJyYnKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChhZGRpdGlvbmFs
QWxsb3dlZENoYXJhY3RlciAmJiBjYyA9PSBhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlcikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoY2MgPT0gJyMnKSB7
CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBOdW1iZXI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGNjID49ICdhJyAmJiBjYyA8
PSAneicpIHx8IChjYyA+PSAnQScgJiYgY2MgPD0gJ1onKSkgeworICAgICAgICAgICAgICAgIGVu
dGl0eVN0YXRlID0gTmFtZWQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBO
dW1iZXI6IHsKKyAgICAgICAgICAgIGlmIChjYyA9PSAneCcpIHsKKyAgICAgICAgICAgICAgICBl
bnRpdHlTdGF0ZSA9IE1heWJlSGV4TG93ZXJDYXNlWDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYyA9PSAnWCcpIHsKKyAgICAgICAgICAg
ICAgICBlbnRpdHlTdGF0ZSA9IE1heWJlSGV4VXBwZXJDYXNlWDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYyA+PSAnMCcgJiYgY2MgPD0g
JzknKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBEZWNpbWFsOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc291cmNlLnB1c2go
JyMnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IE1heWJlSGV4TG93ZXJDYXNlWDogeworICAgICAgICAgICAgaWYgKGlzSGV4RGlnaXQoY2MpKSB7
CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBIZXg7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzb3VyY2UucHVzaCgnIycpOworICAg
ICAgICAgICAgc291cmNlLnB1c2goJ3gnKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIE1heWJlSGV4VXBwZXJDYXNlWDogeworICAgICAgICAgICAg
aWYgKGlzSGV4RGlnaXQoY2MpKSB7CisgICAgICAgICAgICAgICAgZW50aXR5U3RhdGUgPSBIZXg7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBz
b3VyY2UucHVzaCgnIycpOworICAgICAgICAgICAgc291cmNlLnB1c2goJ1gnKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEhleDogeworICAgICAg
ICAgICAgaWYgKGNjID49ICcwJyAmJiBjYyA8PSAnOScpCisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gcmVzdWx0ICogMTYgKyBjYyAtICcwJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNjID49ICdh
JyAmJiBjYyA8PSAnZicpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMTYgKyAx
MCArIGNjIC0gJ2EnOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPj0gJ0EnICYmIGNjIDw9ICdG
JykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIDEwICsgY2MgLSAnQSc7
CisgICAgICAgICAgICBlbHNlIGlmIChjYyA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICBzb3Vy
Y2UuYWR2YW5jZUFuZEFTU0VSVChjYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlckZ1
bmN0aW9uczo6Y29udmVydFRvVVRGMTYoUGFyc2VyRnVuY3Rpb25zOjpsZWdhbEVudGl0eUZvcihy
ZXN1bHQpLCBkZWNvZGVkQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoUGFyc2Vy
RnVuY3Rpb25zOjphY2NlcHRNYWxmb3JtZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUGFy
c2VyRnVuY3Rpb25zOjpjb252ZXJ0VG9VVEYxNihQYXJzZXJGdW5jdGlvbnM6OmxlZ2FsRW50aXR5
Rm9yKHJlc3VsdCksIGRlY29kZWRDaGFyYWN0ZXIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgdW5jb25zdW1lQ2hhcmFjdGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVy
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEZWNpbWFsOiB7CisgICAgICAg
ICAgICBpZiAoY2MgPj0gJzAnICYmIGNjIDw9ICc5JykKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSByZXN1bHQgKiAxMCArIGNjIC0gJzAnOworICAgICAgICAgICAgZWxzZSBpZiAoY2MgPT0gJzsn
KSB7CisgICAgICAgICAgICAgICAgc291cmNlLmFkdmFuY2VBbmRBU1NFUlQoY2MpOworICAgICAg
ICAgICAgICAgIHJldHVybiBQYXJzZXJGdW5jdGlvbnM6OmNvbnZlcnRUb1VURjE2KFBhcnNlckZ1
bmN0aW9uczo6bGVnYWxFbnRpdHlGb3IocmVzdWx0KSwgZGVjb2RlZENoYXJhY3Rlcik7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKFBhcnNlckZ1bmN0aW9uczo6YWNjZXB0TWFsZm9ybWVkKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlckZ1bmN0aW9uczo6Y29udmVydFRvVVRGMTYoUGFy
c2VyRnVuY3Rpb25zOjpsZWdhbEVudGl0eUZvcihyZXN1bHQpLCBkZWNvZGVkQ2hhcmFjdGVyKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVuY29uc3VtZUNoYXJhY3RlcnMo
c291cmNlLCBjb25zdW1lZENoYXJhY3RlcnMpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgTmFtZWQ6IHsKKyAgICAgICAgICAgIHJldHVybiBQYXJzZXJGdW5jdGlvbnM6OmNvbnN1
bWVOYW1lZEVudGl0eShzb3VyY2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVub3VnaENoYXJhY3Rl
cnMsIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyLCBjYyk7CisgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBjb25zdW1lZENoYXJhY3RlcnMuYXBwZW5kKGNjKTsKKyAgICAgICAgc291cmNl
LmFkdmFuY2VBbmRBU1NFUlQoY2MpOworICAgIH0KKyAgICBBU1NFUlQoc291cmNlLmlzRW1wdHko
KSk7CisgICAgbm90RW5vdWdoQ2hhcmFjdGVycyA9IHRydWU7CisgICAgdW5jb25zdW1lQ2hhcmFj
dGVycyhzb3VyY2UsIGNvbnN1bWVkQ2hhcmFjdGVycyk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9CisKKyNlbmRpZiAvLyBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVNZXRob2RzX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVmZXJl
bmNlUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MQ2hhcmFjdGVyUmVm
ZXJlbmNlUGFyc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMmQ3NjE4YzRjODQxZDU1MjdmNWU2ODI2N2M1
ZGY4MzVlNDdhN2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLiBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIu
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworI2luY2x1ZGUgIkNoYXJhY3RlclJlZmVyZW5j
ZVBhcnNlcklubGluZU1ldGhvZHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgeworCitjbGFzcyBYTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIgeworcHVibGljOgorICAg
IGlubGluZSBzdGF0aWMgVUNoYXIzMiBsZWdhbEVudGl0eUZvcihVQ2hhcjMyIHZhbHVlKQorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IEEgbnVtYmVyIG9mIHNwZWNpZmljIGVudGl0eSB2YWx1ZXMg
Z2VuZXJhdGUgcGFyc2UgZXJyb3JzLgorICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID4gMHgx
MEZGRkYgfHwgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERGRkYpKQorICAgICAgICBy
ZXR1cm4gMHhGRkZEOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaW5saW5l
IHN0YXRpYyBib29sIGNvbnZlcnRUb1VURjE2KFVDaGFyMzIgdmFsdWUsIFZlY3RvcjxVQ2hhciwg
MTY+JiBkZWNvZGVkQ2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgaWYgKFVfSVNfQk1QKHZhbHVl
KSkgeworICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcj4odmFsdWUp
OworICAgICAgICBBU1NFUlQoY2hhcmFjdGVyID09IHZhbHVlKTsKKyAgICAgICAgZGVjb2RlZENo
YXJhY3Rlci5hcHBlbmQoY2hhcmFjdGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgZGVjb2RlZENoYXJhY3Rlci5hcHBlbmQoVTE2X0xFQUQodmFsdWUpKTsKKyAg
ICAgICAgZGVjb2RlZENoYXJhY3Rlci5hcHBlbmQoVTE2X1RSQUlMKHZhbHVlKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlubGluZSBzdGF0aWMgYm9vbCBhY2NlcHRNYWxm
b3JtZWQoKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgaW5saW5lIHN0YXRpYyBib29sIGNvbnN1
bWVOYW1lZEVudGl0eShTZWdtZW50ZWRTdHJpbmcmLCBWZWN0b3I8VUNoYXIsIDE2PiYsIGJvb2wm
LCBVQ2hhciwgVUNoYXImKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCit9CisKK2Jvb2wgY29uc3VtZVhNTENo
YXJhY3RlclJlZmVyZW5jZShTZWdtZW50ZWRTdHJpbmcmIHNvdXJjZSwgVmVjdG9yPFVDaGFyLCAx
Nj4mIGRlY29kZWRDaGFyYWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpCit7CisgICAg
cmV0dXJuIGNvbnN1bWVDaGFyYWN0ZXJSZWZlcmVuY2U8WE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFy
c2VyPihzb3VyY2UsIGRlY29kZWRDaGFyYWN0ZXIsIG5vdEVub3VnaENoYXJhY3RlcnMsIDApOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvcGFyc2VyL1hNTENoYXJhY3RlclJlZmVyZW5jZVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUv
eG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDVm
MWViNzI5ZWFjZDU0YzVhNDQzNzMyMGQyNzI4MDNjMjdlZmU5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXIuaApA
QCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgWE1MQ2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyX2gKKyNkZWZpbmUgWE1M
Q2hhcmFjdGVyUmVmZXJlbmNlUGFyc2VyX2gKKworI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitib29sIGNvbnN1bWVYTUxDaGFyYWN0ZXJS
ZWZlcmVuY2UoU2VnbWVudGVkU3RyaW5nJiwgVmVjdG9yPFVDaGFyLCAxNj4mIGRlY29kZWRDaGFy
YWN0ZXIsIGJvb2wmIG5vdEVub3VnaENoYXJhY3RlcnMpOworCit9CisKKyNlbmRpZiAvLyBYTUxD
aGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>