<?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>42084</bug_id>
          
          <creation_ts>2010-07-12 08:47:02 -0700</creation_ts>
          <short_desc>Add a PluginController class, use it for invalidation and getting the user agent</short_desc>
          <delta_ts>2010-07-13 22:35:46 -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>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>aroben</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>249862</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-07-12 08:47:02 -0700</bug_when>
    <thetext>Add a PluginController class, use it for invalidation and getting the user agent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249868</commentid>
    <comment_count>1</comment_count>
      <attachid>61236</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-07-12 08:51:48 -0700</bug_when>
    <thetext>Created attachment 61236
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249874</commentid>
    <comment_count>2</comment_count>
      <attachid>61236</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-07-12 09:08:39 -0700</bug_when>
    <thetext>Comment on attachment 61236
Patch

&gt;  void NPN_MemFree(void* ptr)
&gt;  {
&gt; +    // We could use fastFree here, but there might be plug-ins that mix NPN_MemAlloc/NPN_MemFree with malloc and free,
&gt; +    // so having them be equivalent seems like a good idea.
&gt; +    free(ptr);
&gt;      notImplemented();
&gt;  }

This doesn&apos;t seem &quot;not implemented&quot; anymore.

&gt; -void NPN_InvalidateRect(NPP instance, NPRect *invalidRect)
&gt; +void NPN_InvalidateRect(NPP npp, NPRect *invalidRect)

Funny * placement here.

&gt; +void NetscapePlugin::invalidate(NPRect* invalidRect)

I think the parameter type could be const NPRect*.

&gt; -bool NetscapePlugin::initialize(const Parameters&amp; parameters)
&gt; +bool NetscapePlugin::initialize(PluginController* pluginController, const Parameters&amp; parameters)
&gt;  {
&gt; +    ASSERT(!m_pluginController);
&gt; +    m_pluginController = pluginController;

Other code seems to assume that m_pluginController is non-null after this point. So maybe you should add an assertion about that.

&gt; +class PluginController {
&gt; +public:
&gt; +    virtual ~PluginController() { }

I think it&apos;s better to declare the destructor as protected, if no one is supposed to be allowed to delete a PluginController.

&gt; +String PluginView::userAgent(const KURL&amp; url)
&gt; +{
&gt; +    if (Frame* frame = m_pluginElement-&gt;document()-&gt;frame())
&gt; +        return frame-&gt;loader()-&gt;client()-&gt;userAgent(url);
&gt; +
&gt; +    return String();
&gt; +}

I think an early return when frame is null would be nicer.

PluginController seems more like a client-type class than a controller-type class. It isn&apos;t really controlling a plugin at all; it&apos;s just performing some actions on behalf of the plugin. Maybe PluginClient would be a better name?

You should make sure this doesn&apos;t break the Windows build. You could add PluginController.h to WebKit2.vcproj.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249876</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-07-12 09:14:43 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 61236 [details])
&gt; &gt;  void NPN_MemFree(void* ptr)
&gt; &gt;  {
&gt; &gt; +    // We could use fastFree here, but there might be plug-ins that mix NPN_MemAlloc/NPN_MemFree with malloc and free,
&gt; &gt; +    // so having them be equivalent seems like a good idea.
&gt; &gt; +    free(ptr);
&gt; &gt;      notImplemented();
&gt; &gt;  }
&gt; 
&gt; This doesn&apos;t seem &quot;not implemented&quot; anymore.
&gt; 

Removed.

&gt; &gt; -void NPN_InvalidateRect(NPP instance, NPRect *invalidRect)
&gt; &gt; +void NPN_InvalidateRect(NPP npp, NPRect *invalidRect)
&gt; 
&gt; Funny * placement here.
&gt;

Fixed.
 
&gt; &gt; +void NetscapePlugin::invalidate(NPRect* invalidRect)
&gt; 
&gt; I think the parameter type could be const NPRect*.

Fixed.

&gt; 
&gt; &gt; -bool NetscapePlugin::initialize(const Parameters&amp; parameters)
&gt; &gt; +bool NetscapePlugin::initialize(PluginController* pluginController, const Parameters&amp; parameters)
&gt; &gt;  {
&gt; &gt; +    ASSERT(!m_pluginController);
&gt; &gt; +    m_pluginController = pluginController;
&gt; 
&gt; Other code seems to assume that m_pluginController is non-null after this point. So maybe you should add an assertion about that.
&gt;

Added.
 
&gt; &gt; +class PluginController {
&gt; &gt; +public:
&gt; &gt; +    virtual ~PluginController() { }
&gt; 
&gt; I think it&apos;s better to declare the destructor as protected, if no one is supposed to be allowed to delete a PluginController.
&gt;

Fixed.
 
&gt; &gt; +String PluginView::userAgent(const KURL&amp; url)
&gt; &gt; +{
&gt; &gt; +    if (Frame* frame = m_pluginElement-&gt;document()-&gt;frame())
&gt; &gt; +        return frame-&gt;loader()-&gt;client()-&gt;userAgent(url);
&gt; &gt; +
&gt; &gt; +    return String();
&gt; &gt; +}
&gt; 
&gt; I think an early return when frame is null would be nicer.

Fixed.

&gt; 
&gt; PluginController seems more like a client-type class than a controller-type class. It isn&apos;t really controlling a plugin at all; it&apos;s just performing some actions on behalf of the plugin. Maybe PluginClient would be a better name?
&gt; 

I don&apos;t like PluginClient in this case - how about PluginOwner?

&gt; You should make sure this doesn&apos;t break the Windows build. You could add PluginController.h to WebKit2.vcproj.

Will do.

&gt; 
&gt; r=me

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249917</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-07-12 11:09:16 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 61236 [details] [details])
&gt; &gt; PluginController seems more like a client-type class than a controller-type class. It isn&apos;t really controlling a plugin at all; it&apos;s just performing some actions on behalf of the plugin. Maybe PluginClient would be a better name?
&gt; &gt; 
&gt; 
&gt; I don&apos;t like PluginClient in this case - how about PluginOwner?

There&apos;s nothing in the PluginController interface that indicates that this object owns a plugin. It&apos;s just an object that knows how to invalidate a plugin and return a user-agent string. So PluginOwner also seems a little misleading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250971</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-07-13 22:35:46 -0700</bug_when>
    <thetext>Committed r63094: &lt;http://trac.webkit.org/changeset/63094&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61236</attachid>
            <date>2010-07-12 08:51:48 -0700</date>
            <delta_ts>2010-07-12 09:08:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42084-20100712085147.patch</filename>
            <type>text/plain</type>
            <size>19723</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzdhNGFiODg2MjJjMGY0ZThmY2I2N2U2NDYzNzRkYzE1YTk2MjhiNC4uNTY4MmIxZTg5NDg1YTZh
MWM4NTkxNzRkMGY5MzBjNDhkZmExMjgwZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNy0xMiAgQW5k
ZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIFBsdWdpbkNvbnRyb2xsZXIgY2xhc3Ms
IHVzZSBpdCBmb3IgaW52YWxpZGF0aW9uIGFuZCBnZXR0aW5nIHRoZSB1c2VyIGFnZW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjA4NAorCisgICAg
ICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgIEV4cG9ydCBXaWRnZXQ6OmNvbnZlcnRUb0Nv
bnRhaW5pbmdXaW5kb3cuCisKIDIwMTAtMDctMTAgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2Nh
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXgg
MGYxMWNhNmQ2ZWI4OTVhMTgyMjc4NjdjNzhkMGVmMjI1MmE4NDcwMS4uNGUzYzE0ODMzZjk4NWE4
Mzg2MGZkOWVjZWQ1NGVmM2E4YjU4ODkxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgorKysgYi9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC05NTEsNiArOTUxLDcgQEAgX19a
Tks3V2ViQ29yZTZXaWRnZXQyM2NvbnZlcnRUb0NvbnRhaW5pbmdWaWV3RVJLTlNfN0ludFJlY3RF
CiBfX1pOSzdXZWJDb3JlNldpZGdldDIzY29udmVydFRvQ29udGFpbmluZ1ZpZXdFUktOU184SW50
UG9pbnRFCiBfX1pOSzdXZWJDb3JlNldpZGdldDI1Y29udmVydEZyb21Db250YWluaW5nVmlld0VS
S05TXzdJbnRSZWN0RQogX19aTks3V2ViQ29yZTZXaWRnZXQyNWNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdFUktOU184SW50UG9pbnRFCitfX1pOSzdXZWJDb3JlNldpZGdldDI1Y29udmVydFRvQ29u
dGFpbmluZ1dpbmRvd0VSS05TXzdJbnRSZWN0RQogX19aTks3V2ViQ29yZTZXaWRnZXQ5ZnJhbWVS
ZWN0RXYKIF9fWk5LN1dlYkNvcmU3RWxlbWVudDEyZ2V0QXR0cmlidXRlRVJLTlNfMTNRdWFsaWZp
ZWROYW1lRQogX19aTks3V2ViQ29yZTdFbGVtZW50OWlubmVyVGV4dEV2CmRpZmYgLS1naXQgYS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDhlODk0Nzc3ZDJmM2Fl
Y2Q0YzRhNWVhNWQ3NjBjNzY3NzNiOTVhMGMuLjYyY2FmNzRhMzA0NjY0NmY2ZGYwYjU2YTAwODYy
Yzc3OGQ3ZTQ1ZWEgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTAtMDctMTIgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgYSBQbHVnaW5Db250cm9sbGVyIGNsYXNzLCB1c2UgaXQgZm9yIGlu
dmFsaWRhdGlvbiBhbmQgZ2V0dGluZyB0aGUgdXNlciBhZ2VudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIwODQKKworICAgICAgICAqIFdlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIFBsdWdpbkNvbnRyb2xsZXIu
aAorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL0R1bW15UGx1Z2luLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RHVtbXlQbHVnaW46OmluaXRpYWxpemUpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvUGx1Z2lucy9EdW1teVBsdWdpbi5oOgorICAgICAgICBQYXNzIHRoZSBQbHVnaW5Db250cm9s
bGVyIHRvIGluaXRpYWxpemUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2Nh
cGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwOgorICAgICAgICBJbXBsZW1lbnQgTlBOX1VzZXJB
Z2VudCwgTlBOX01lbUFsbG9jLCBOUE5fTWVtRnJlZSwgTlBOX0ludmFsaWRhdGVSZWN0IGFuZCBO
UE5fSW52YWxpZGF0ZVJlZ2lvbi4KKworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2lu
OjpOZXRzY2FwZVBsdWdpbik6CisgICAgICAgIEluaXRpYWxpemUgbV9wbHVnaW5Db250cm9sbGVy
IHRvIG51bGwuCisKKyAgICAgICAgKFdlYktpdDo6TmV0c2NhcGVQbHVnaW46OmludmFsaWRhdGUp
OgorICAgICAgICBBc2sgdGhlIHBsdWctaW4gY29udHJvbGxlciB0byBpbnZhbGlkYXRlLgorCisg
ICAgICAgIChXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luOjp1c2VyQWdlbnQpOsK0CisgICAgICAgIEFz
ayB0aGUgcGx1Zy1pbiBjb250cm9sbGVyIGZvciB0aGUgdXNlciBhZ2VudC4KKworICAgICAgICAo
V2ViS2l0OjpOZXRzY2FwZVBsdWdpbjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIFNldCB0aGUgbV9w
bHVnaW5Db250cm9sbGVyIG1lbWJlciB2YXJpYWJsZS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW4uaDoKKyAgICAgICAgTWFrZSBpbml0aWFsaXplIHRha2UgYSBQbHVnaW5D
b250cm9sbGVyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkNvbnRyb2xs
ZXIuaDogQWRkZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OmluaXRpYWxpemVQbHVnaW4pOgorICAg
ICAgICBQYXNzIHRoZSBQbHVnaW5Db250cm9sbGVyIHRvIGluaXRpYWxpemUuCisKKyAgICAgICAg
KFdlYktpdDo6UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICBUZWxsIHRoZSBo
b3N0IHdpbmRvdyB0byBpbnZhbGlkYXRlIHRoZSBnaXZlbiByZWN0LgorCisgICAgICAgIChXZWJL
aXQ6OlBsdWdpblZpZXc6OmludmFsaWRhdGUpOgorICAgICAgICBDYWxsIGludmFsaWRhdGVSZWN0
LgorCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnVzZXJBZ2VudCk6CisgICAgICAgIEFz
ayB0aGUgZnJhbWUgbG9hZGVyIGNsaWVudCBmb3IgdGhlIHVzZXIgYWdlbnQuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oOgorCiAyMDEwLTA3LTEwICBBbmRlcnMg
Q2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2Ft
IFdlaW5pZy4KZGlmZiAtLWdpdCBhL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZDAyMjgzNWY0YzkzOTNkMzIyNTMwZDc2YzBiZGMyZTliNGVjZjBmOC4uMTg0NmU4ZTFiNjAxNTQ0
YzgzOTE1YzA2Mzk1ZjViYTk5Y2M5MTRlZSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTYxLDYgKzYxLDcgQEAKIAkJMUE2RkJEMjkxMUU2OUJDMjAwREIx
MzcxIC8qIE5ldHNjYXBlUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNkZCRDI3MTFFNjlCQzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdp
bi5jcHAgKi87IH07CiAJCTFBQTFDQzVEMTAwRkExQTEwMDc4REVCQyAvKiBRdWFydHpDb3JlLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDFBQTFDQzVDMTAwRkExQTEwMDc4REVCQyAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLzsgfTsK
IAkJMUFBMUNEMDcxMDBGQTFCQTAwNzhERUJDIC8qIENhcmJvbi5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUExQ0QwNjEwMEZBMUJB
MDA3OERFQkMgLyogQ2FyYm9uLmZyYW1ld29yayAqLzsgfTsKKwkJMUFBNTZGMjkxMUU5MkJDODAw
NjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTU2RjI4MTFFOTJCQzgwMDYxQjg4MiAvKiBQbHVnaW5Db250
cm9sbGVyLmggKi87IH07CiAJCTFBQURFNkZGMTBEODU1RkMwMEQzRDYzRCAvKiBBcHBsaWNhdGlv
blNlcnZpY2VzLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQURFNkZFMTBEODU1RkMwMEQzRDYzRCAvKiBBcHBsaWNhdGlvblNlcnZp
Y2VzLmZyYW1ld29yayAqLzsgfTsKIAkJMUFFMTE3RjYxMURCQjMwOTAwOTgxNjE1IC8qIFByb2Nl
c3NMYXVuY2hlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUUxMTdGNTExREJCMzA5MDA5ODE2MTUgLyogUHJvY2Vzc0xhdW5jaGVyLmNwcCAqLzsg
fTsKIAkJMUFFNUI3RkIxMUU3QUVEMjAwQkE2NzY3IC8qIE5ldHNjYXBlUGx1Z2luTWFjLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTVCN0Y5MTFF
N0FFRDIwMEJBNjc2NyAvKiBOZXRzY2FwZVBsdWdpbk1hYy5jcHAgKi87IH07CkBAIC0zMzEsNiAr
MzMyLDcgQEAKIAkJMUFBMUM3REUxMDBFODQ2RTAwNzhERUJDIC8qIEphdmFTY3JpcHRDb3JlLmZy
YW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQUExQ0M1QzEwMEZBMUExMDA3OERF
QkMgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFF1YXJ0ekNvcmUu
ZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUXVhcnR6Q29yZS5m
cmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTFBQTFDRDA2MTAwRkEx
QkEwMDc4REVCQyAvKiBDYXJib24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDYXJib24u
ZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZyYW1l
d29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKKwkJMUFBNTZGMjgxMUU5MkJDODAw
NjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGx1Z2luQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QUFERTZGRTEwRDg1NUZDMDBEM0Q2M0QgLyogQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVy
LmZyYW1ld29yazsgbmFtZSA9IEFwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrOyBwYXRoID0g
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1ld29yazsg
c291cmNlVHJlZSA9IFNES1JPT1Q7IH07CiAJCTFBRTExN0Y1MTFEQkIzMDkwMDk4MTYxNSAvKiBQ
cm9jZXNzTGF1bmNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJvY2Vzc0xhdW5jaGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFNUI3
RjkxMUU3QUVEMjAwQkE2NzY3IC8qIE5ldHNjYXBlUGx1Z2luTWFjLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luTWFjLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0OCw2ICs2NTAsNyBAQAogCQkJCTFBNkZCN0U0MTFFNjUz
MDUwMERCMTM3MSAvKiBEdW1teVBsdWdpbi5oICovLAogCQkJCTFBNkZCN0QwMTFFNjUxRTIwMERC
MTM3MSAvKiBQbHVnaW4uY3BwICovLAogCQkJCTFBNkZCN0QxMTFFNjUxRTIwMERCMTM3MSAvKiBQ
bHVnaW4uaCAqLywKKwkJCQkxQUE1NkYyODExRTkyQkM4MDA2MUI4ODIgLyogUGx1Z2luQ29udHJv
bGxlci5oICovLAogCQkJCTFBNkZCN0FDMTFFNjRCNjgwMERCMTM3MSAvKiBQbHVnaW5WaWV3LmNw
cCAqLywKIAkJCQkxQTZGQjdBRDExRTY0QjY4MDBEQjEzNzEgLyogUGx1Z2luVmlldy5oICovLAog
CQkJKTsKQEAgLTEyMjcsNiArMTIzMCw3IEBACiAJCQkJMUE2RkI5MEIxMUU2NkZCQzAwREIxMzcx
IC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZGQkEyQTEx
RTY4NjI3MDBEQjEzNzEgLyogTmV0c2NhcGVCcm93c2VyRnVuY3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBNkZCRDI4MTFFNjlCQzIwMERCMTM3MSAvKiBOZXRzY2FwZVBsdWdpbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMUFBNTZGMjkxMUU5MkJDODAwNjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
RHVtbXlQbHVnaW4uY3BwIGIvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvRHVtbXlQbHVnaW4u
Y3BwCmluZGV4IDQ4YWY4YjIxYmNmZWNiMWYzYzMzYTAxNzRlMGQ4MTE5MGU4MjAzNTEuLjIxODQx
ZDBmOTJhNzFlNTEwMWU0MzRiNmQ0NzA4NDM2MWEzMzU3ZjQgMTAwNjQ0Ci0tLSBhL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL0R1bW15UGx1Z2luLmNwcAorKysgYi9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9EdW1teVBsdWdpbi5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgRHVtbXlQbHVnaW46
OkR1bW15UGx1Z2luKCkKIHsKIH0KIAotYm9vbCBEdW1teVBsdWdpbjo6aW5pdGlhbGl6ZShjb25z
dCBQYXJhbWV0ZXJzJikKK2Jvb2wgRHVtbXlQbHVnaW46OmluaXRpYWxpemUoUGx1Z2luQ29udHJv
bGxlciosIGNvbnN0IFBhcmFtZXRlcnMmKQogewogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvRHVtbXlQbHVnaW4uaCBiL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL0R1bW15UGx1Z2luLmgKaW5kZXggODBiNTdmMWE5MmI5NjE4Yjcz
YzQwYmQ1YTJkYTM5NjRhOGUzODEzZC4uODYwYzQ5NTI3MzVlYjRiNTc0YjYwN2FlZjVhZjZjOWFl
OTdhMmRhYSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvRHVtbXlQbHVn
aW4uaAorKysgYi9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9EdW1teVBsdWdpbi5oCkBAIC00
Miw3ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgRHVtbXlQbHVnaW4oKTsKIAogICAgIC8vIFBsdWdp
bgotICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShQbHVnaW5Db250cm9sbGVyKiwgY29uc3QgUGFyYW1ldGVy
cyYpOwogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5
UmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIGZyYW1lUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVC
cm93c2VyRnVuY3MuY3BwIGIvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0
c2NhcGVCcm93c2VyRnVuY3MuY3BwCmluZGV4IDA5ZGQ2ODQzOWIxNjY4ZTIzNjkzNjdhNzk5ZjY0
N2FkYmFiNzA5NDUuLjhhNzYxNTA1ODk2NmI3ZWJhMzdlYjY3NDlkOTAyODQ4ZDE5ZTZjNzMgMTAw
NjQ0Ci0tLSBhL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJv
d3NlckZ1bmNzLmNwcAorKysgYi9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZUJyb3dzZXJGdW5jcy5jcHAKQEAgLTE1MCwyMCArMTUwLDI3IEBAIHZvaWQgTlBOX1N0
YXR1cyhOUFAgaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KICAgICAKLWNvbnN0IGNoYXIqIE5QTl9Vc2VyQWdlbnQoTlBQIGluc3RhbmNlKQor
Y29uc3QgY2hhciogTlBOX1VzZXJBZ2VudChOUFAgbnBwKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFucHApCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIFJlZlB0cjxOZXRzY2FwZVBsdWdpbj4gcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmZy
b21OUFAobnBwKTsKKyAgICByZXR1cm4gcGx1Z2luLT51c2VyQWdlbnQoKTsKIH0KIAogdm9pZCog
TlBOX01lbUFsbG9jKHVpbnQzMl90IHNpemUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKKyAgICAvLyBXZSBjb3VsZCB1c2UgZmFzdE1hbGxvYyBoZXJlLCBidXQgdGhl
cmUgbWlnaHQgYmUgcGx1Zy1pbnMgdGhhdCBtaXggTlBOX01lbUFsbG9jL05QTl9NZW1GcmVlIHdp
dGggbWFsbG9jIGFuZCBmcmVlLAorICAgIC8vIHNvIGhhdmluZyB0aGVtIGJlIGVxdWl2YWxlbnQg
c2VlbXMgbGlrZSBhIGdvb2QgaWRlYS4KKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOwogfQogCiB2
b2lkIE5QTl9NZW1GcmVlKHZvaWQqIHB0cikKIHsKKyAgICAvLyBXZSBjb3VsZCB1c2UgZmFzdEZy
ZWUgaGVyZSwgYnV0IHRoZXJlIG1pZ2h0IGJlIHBsdWctaW5zIHRoYXQgbWl4IE5QTl9NZW1BbGxv
Yy9OUE5fTWVtRnJlZSB3aXRoIG1hbGxvYyBhbmQgZnJlZSwKKyAgICAvLyBzbyBoYXZpbmcgdGhl
bSBiZSBlcXVpdmFsZW50IHNlZW1zIGxpa2UgYSBnb29kIGlkZWEuCisgICAgZnJlZShwdHIpOwog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKQEAgLTI1MCwxNCArMjU3LDE3IEBAIE5QRXJyb3Ig
TlBOX1NldFZhbHVlKE5QUCBucHAsIE5QUFZhcmlhYmxlIHZhcmlhYmxlLCB2b2lkICp2YWx1ZSkK
ICAgICByZXR1cm4gTlBFUlJfTk9fRVJST1I7CiB9CiAKLXZvaWQgTlBOX0ludmFsaWRhdGVSZWN0
KE5QUCBpbnN0YW5jZSwgTlBSZWN0ICppbnZhbGlkUmVjdCkKK3ZvaWQgTlBOX0ludmFsaWRhdGVS
ZWN0KE5QUCBucHAsIE5QUmVjdCAqaW52YWxpZFJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBlUGx1Z2luOjpm
cm9tTlBQKG5wcCk7CisgICAgcGx1Z2luLT5pbnZhbGlkYXRlKGludmFsaWRSZWN0KTsKIH0KIAot
dm9pZCBOUE5fSW52YWxpZGF0ZVJlZ2lvbihOUFAgaW5zdGFuY2UsIE5QUmVnaW9uIGludmFsaWRS
ZWdpb24pCit2b2lkIE5QTl9JbnZhbGlkYXRlUmVnaW9uKE5QUCBucHAsIE5QUmVnaW9uIGludmFs
aWRSZWdpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBGSVhNRTogV2UgY291
bGQgYXQgbGVhc3QgZmlndXJlIG91dCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBpbnZh
bGlkIHJlZ2lvbi4KKyAgICBSZWZQdHI8TmV0c2NhcGVQbHVnaW4+IHBsdWdpbiA9IE5ldHNjYXBl
UGx1Z2luOjpmcm9tTlBQKG5wcCk7CisgICAgcGx1Z2luLT5pbnZhbGlkYXRlKDApOwogfQogCiB2
b2lkIE5QTl9Gb3JjZVJlZHJhdyhOUFAgaW5zdGFuY2UpCmRpZmYgLS1naXQgYS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAgYi9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAKaW5kZXggM2JiZjVl
OWFkMjllOTcxNjI5NGVkZDcwZjY5ZjVkMTk2OGJmN2U1ZC4uYjRiNGUxZGYyMjk3Mzk1MWM0ZmJk
YmVlOGM4OGYwZmVhZjU3YWE4YiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCisrKyBiL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW5jbHVkZSAiTmV0c2NhcGVQbHVnaW4uaCIKIAorI2luY2x1ZGUgIlBsdWdpbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvS1VSTC5oPgpAQCAtMzUsNyArMzYsOCBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBOZXRzY2Fw
ZVBsdWdpbjo6TmV0c2NhcGVQbHVnaW4oUGFzc1JlZlB0cjxOZXRzY2FwZVBsdWdpbk1vZHVsZT4g
cGx1Z2luTW9kdWxlKQotICAgIDogbV9wbHVnaW5Nb2R1bGUocGx1Z2luTW9kdWxlKQorICAgIDog
bV9wbHVnaW5Db250cm9sbGVyKDApCisgICAgLCBtX3BsdWdpbk1vZHVsZShwbHVnaW5Nb2R1bGUp
CiAgICAgLCBtX25wV2luZG93KCkKICAgICAsIG1faXNTdGFydGVkKGZhbHNlKQogICAgICwgbV9p
bk5QUE5ldyhmYWxzZSkKQEAgLTcxLDYgKzczLDMwIEBAIFBhc3NSZWZQdHI8TmV0c2NhcGVQbHVn
aW4+IE5ldHNjYXBlUGx1Z2luOjpmcm9tTlBQKE5QUCBucHApCiAgICAgcmV0dXJuIDA7CiB9CiAK
K3ZvaWQgTmV0c2NhcGVQbHVnaW46OmludmFsaWRhdGUoTlBSZWN0KiBpbnZhbGlkUmVjdCkKK3sK
KyAgICBJbnRSZWN0IHJlY3Q7CisgICAgCisgICAgaWYgKCFpbnZhbGlkUmVjdCkKKyAgICAgICAg
cmVjdCA9IEludFJlY3QoMCwgMCwgbV9mcmFtZVJlY3Qud2lkdGgoKSwgbV9mcmFtZVJlY3QuaGVp
Z2h0KCkpOworICAgIGVsc2UKKyAgICAgICAgcmVjdCA9IEludFJlY3QoaW52YWxpZFJlY3QtPmxl
ZnQsIGludmFsaWRSZWN0LT50b3AsCisgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRSZWN0
LT5yaWdodCAtIGludmFsaWRSZWN0LT5sZWZ0LCBpbnZhbGlkUmVjdC0+Ym90dG9tIC0gaW52YWxp
ZFJlY3QtPnRvcCk7CisgICAgCisgICAgbV9wbHVnaW5Db250cm9sbGVyLT5pbnZhbGlkYXRlKHJl
Y3QpOworfQorCitjb25zdCBjaGFyKiBOZXRzY2FwZVBsdWdpbjo6dXNlckFnZW50KCkKK3sKKyAg
ICBpZiAobV91c2VyQWdlbnQuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFBhc3MgdGhl
IHNyYyBVUkwuCisgICAgICAgIG1fdXNlckFnZW50ID0gbV9wbHVnaW5Db250cm9sbGVyLT51c2Vy
QWdlbnQoS1VSTCgpKS51dGY4KCk7CisgICAgICAgIEFTU0VSVCghbV91c2VyQWdlbnQuaXNOdWxs
KCkpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbV91c2VyQWdlbnQuZGF0YSgpOworfQorCiB2
b2lkIE5ldHNjYXBlUGx1Z2luOjpjYWxsU2V0V2luZG93KCkKIHsKICAgICBtX25wV2luZG93Lngg
PSBtX2ZyYW1lUmVjdC54KCk7CkBAIC04NSw4ICsxMTEsMTEgQEAgdm9pZCBOZXRzY2FwZVBsdWdp
bjo6Y2FsbFNldFdpbmRvdygpCiAgICAgbV9wbHVnaW5Nb2R1bGUtPnBsdWdpbkZ1bmNzKCkuc2V0
d2luZG93KCZtX25wcCwgJm1fbnBXaW5kb3cpOwogfQogCi1ib29sIE5ldHNjYXBlUGx1Z2luOjpp
bml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCitib29sIE5ldHNjYXBlUGx1
Z2luOjppbml0aWFsaXplKFBsdWdpbkNvbnRyb2xsZXIqIHBsdWdpbkNvbnRyb2xsZXIsIGNvbnN0
IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CisgICAgQVNTRVJUKCFtX3BsdWdpbkNvbnRyb2xs
ZXIpOworICAgIG1fcGx1Z2luQ29udHJvbGxlciA9IHBsdWdpbkNvbnRyb2xsZXI7CisgICAgCiAg
ICAgdWludDE2X3QgbW9kZSA9IHBhcmFtZXRlcnMubG9hZE1hbnVhbGx5ID8gTlBfRlVMTCA6IE5Q
X0VNQkVEOwogICAgIAogICAgIG1faW5OUFBOZXcgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaCBiL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmgKaW5kZXggMzA1OTVk
NjE4YWMyY2FjMGJmM2IwMzUyNDIyNjMwZDFhODJhZGM5ZC4uMDYxMTYzNGE1ZjJkMmU4MjkwYmI2
NGY2OTIzOTI1YzE4YTdkMGE0MCAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uaAorKysgYi9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5oCkBAIC00Nyw2ICs0Nyw5IEBAIHB1YmxpYzoK
ICAgICBOUEVycm9yIHNldEV2ZW50TW9kZWwoTlBFdmVudE1vZGVsKTsKICNlbmRpZgogCisgICAg
dm9pZCBpbnZhbGlkYXRlKE5QUmVjdCopOworICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCgpOwor
ICAgIAogcHJpdmF0ZToKICAgICBOZXRzY2FwZVBsdWdpbihQYXNzUmVmUHRyPE5ldHNjYXBlUGx1
Z2luTW9kdWxlPiBwbHVnaW5Nb2R1bGUpOwogCkBAIC01NiwxOCArNTksMjIgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHBsYXRmb3JtUGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKIAogICAgIC8vIFBsdWdpbgotICAgIHZpcnR1
YWwgYm9vbCBpbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aW5pdGlhbGl6ZShQbHVnaW5Db250cm9sbGVyKiwgY29uc3QgUGFyYW1ldGVycyYpOwogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRpcnR5UmVjdCk7CiAgICAg
dmlydHVhbCB2b2lkIGdlb21ldHJ5RGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZy
YW1lUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2xpcFJlY3QpOwotICAgIAorCisgICAg
UGx1Z2luQ29udHJvbGxlciogbV9wbHVnaW5Db250cm9sbGVyOworCiAgICAgUmVmUHRyPE5ldHNj
YXBlUGx1Z2luTW9kdWxlPiBtX3BsdWdpbk1vZHVsZTsKICAgICBOUFBfdCBtX25wcDsKICAgICBO
UFdpbmRvdyBtX25wV2luZG93OwogCiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX2ZyYW1lUmVjdDsK
ICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fY2xpcFJlY3Q7Ci0gICAgCisKKyAgICBDU3RyaW5nIG1f
dXNlckFnZW50OworCiAgICAgYm9vbCBtX2lzU3RhcnRlZDsKICAgICBib29sIG1faW5OUFBOZXc7
CiAKZGlmZiAtLWdpdCBhL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbi5oIGIvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKaW5kZXggNzkxMDdlMzhjY2E5NTQyODlj
NTAwNGFmOTA2NmFiNDgwOWQ5ZDQwZC4uYTJlNWFiOTk3NDNjODM1ODE2NGM1NDZmYTZmMDMxNjc2
ZGY3MTg1MSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgK
KysrIGIvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luLmgKQEAgLTM3LDYgKzM3LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgUGx1
Z2luQ29udHJvbGxlcjsKKwogY2xhc3MgUGx1Z2luIDogcHVibGljIFJlZkNvdW50ZWQ8UGx1Z2lu
PiB7CiBwdWJsaWM6CiAgICAgc3RydWN0IFBhcmFtZXRlcnMgewpAQCAtNDksNyArNTEsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIH5QbHVnaW4oKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wg
aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplKFBsdWdpbkNvbnRyb2xsZXIqLCBjb25zdCBQYXJhbWV0ZXJzJikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgZnJhbWVSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlwUmVjdCkgPSAwOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luQ29udHJvbGxlci5o
IGIvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luQ29udHJvbGxlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmY5Nzk4YjA2MjliMTIyZGIzNWZlMmE2NjQ3MDVlZDFhYjFmZDJhNjcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Db250cm9sbGVyLmgKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGx1Z2luQ29udHJvbGxlcl9oCisj
ZGVmaW5lIFBsdWdpbkNvbnRyb2xsZXJfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xh
c3MgSW50UmVjdDsKKyAgICBjbGFzcyBLVVJMOworICAgIGNsYXNzIFN0cmluZzsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFBsdWdpbkNvbnRyb2xsZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgflBsdWdpbkNvbnRyb2xsZXIoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCBXZWJDb3Jl
OjpTdHJpbmcgdXNlckFnZW50KGNvbnN0IFdlYkNvcmU6OktVUkwmKSA9IDA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBsdWdpbkNvbnRyb2xsZXJfaApkaWZmIC0t
Z2l0IGEvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCBlY2EwODA5NWVhOTU5MTJk
MWNjMmM3NTlkODc4MDc4NzllNDljNjQ2Li44NjY5NDc5YjMzMDE1MjcxNTY2ODMxNDU4NzJjNjkz
MzcwOTUwYmI0IDEwMDY0NAotLS0gYS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAorKysgYi9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApA
QCAtMjYsOSArMjYsMTEgQEAKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCiAKICNpbmNsdWRlICJQ
bHVnaW4uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyQ2xpZW50Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFBsdWdJbkVsZW1lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0hvc3RXaW5kb3cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxWaWV3Lmg+CiAKQEAgLTc5LDcgKzgxLDcgQEAgdm9pZCBQ
bHVnaW5WaWV3Ojppbml0aWFsaXplUGx1Z2luKCkKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBpZiAoIW1fcGx1Z2luLT5pbml0aWFsaXplKG1fcGFyYW1ldGVycykpIHsKKyAgICBpZiAoIW1f
cGx1Z2luLT5pbml0aWFsaXplKHRoaXMsIG1fcGFyYW1ldGVycykpIHsKICAgICAgICAgLy8gV2Ug
ZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHBsdWctaW4uCiAgICAgICAgIG1fcGx1Z2luID0gMDsK
IApAQCAtMTU4LDggKzE2MCwxNCBAQCBJbnRSZWN0IFBsdWdpblZpZXc6OmNsaXBSZWN0SW5XaW5k
b3dDb29yZGluYXRlcygpIGNvbnN0CiAgICAgcmV0dXJuIGludGVyc2VjdGlvbihmcmFtZVJlY3RJ
bldpbmRvd0Nvb3JkaW5hdGVzLCB3aW5kb3dDbGlwUmVjdCk7CiB9CiAKLXZvaWQgUGx1Z2luVmll
dzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYpCit2b2lkIFBsdWdpblZpZXc6OmludmFs
aWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKKyAgICBpZiAoIXBhcmVudCgp
IHx8ICFtX3BsdWdpbiB8fCAhbV9pc0luaXRpYWxpemVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRSZWN0IGRpcnR5UmVjdEluV2luZG93Q29vcmRpbmF0ZXMgPSBjb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KGRpcnR5UmVjdCk7CisKKyAgICBwYXJlbnQoKS0+aG9zdFdpbmRvdygpLT5pbnZh
bGlkYXRlQ29udGVudHNBbmRXaW5kb3coaW50ZXJzZWN0aW9uKGRpcnR5UmVjdEluV2luZG93Q29v
cmRpbmF0ZXMsIGNsaXBSZWN0SW5XaW5kb3dDb29yZGluYXRlcygpKSwgZmFsc2UpOwogfQogCiB2
b2lkIFBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQoKQpAQCAtMTcwLDQgKzE3OCwxNyBAQCB2b2lk
IFBsdWdpblZpZXc6Om1lZGlhQ2FuU3RhcnQoKQogICAgIGluaXRpYWxpemVQbHVnaW4oKTsKIH0K
IAordm9pZCBQbHVnaW5WaWV3OjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
K3sKKyAgICBpbnZhbGlkYXRlUmVjdChkaXJ0eVJlY3QpOworfQorCitTdHJpbmcgUGx1Z2luVmll
dzo6dXNlckFnZW50KGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0g
bV9wbHVnaW5FbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICByZXR1cm4gZnJh
bWUtPmxvYWRlcigpLT5jbGllbnQoKS0+dXNlckFnZW50KHVybCk7CisKKyAgICByZXR1cm4gU3Ry
aW5nKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5oIGIvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5oCmluZGV4IDU1NWYyMTRmZDc2ZmFhNzBlYWZjMzc0ODFjOGMwZjAwODkz
YjgwMWUuLjQyYWFkZGFkMGZjZjY2N2ExM2Y0MjRmM2NlNTk4OWEwMmJhYjdjNDcgMTAwNjQ0Ci0t
LSBhL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuaAorKysgYi9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmgKQEAgLTI3LDYgKzI3LDggQEAKICNkZWZp
bmUgUGx1Z2luVmlld19oCiAKICNpbmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJQbHVnaW5D
b250cm9sbGVyLmgiCisKICNpbmNsdWRlIDxXZWJDb3JlL01lZGlhQ2FuU3RhcnRMaXN0ZW5lci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvV2lkZ2V0Lmg+CiAKQEAgLTM4LDcgKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgUGx1Z2luVmlldyA6
IHB1YmxpYyBXZWJDb3JlOjpXaWRnZXQsIFdlYkNvcmU6Ok1lZGlhQ2FuU3RhcnRMaXN0ZW5lciB7
CitjbGFzcyBQbHVnaW5WaWV3IDogcHVibGljIFdlYkNvcmU6OldpZGdldCwgV2ViQ29yZTo6TWVk
aWFDYW5TdGFydExpc3RlbmVyLCBQbHVnaW5Db250cm9sbGVyIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQbHVnaW5WaWV3PiBjcmVhdGUoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1l
bnQqIHBsdWdpbkVsZW1lbnQsIFBhc3NSZWZQdHI8UGx1Z2luPiBwbHVnaW4sIGNvbnN0IFBsdWdp
bjo6UGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICB7CkBAIC02NSw2ICs2NywxMCBAQCBwcml2
YXRlOgogICAgIC8vIFdlYkNvcmU6Ok1lZGlhQ2FuU3RhcnRMaXN0ZW5lcgogICAgIHZpcnR1YWwg
dm9pZCBtZWRpYUNhblN0YXJ0KCk7CiAKKyAgICAvLyBQbHVnaW5Db250cm9sbGVyCisgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6U3RyaW5nIHVzZXJBZ2VudChjb25zdCBXZWJDb3JlOjpLVVJMJik7CisKICAg
ICBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogbV9wbHVnaW5FbGVtZW50OwogICAgIFJlZlB0
cjxQbHVnaW4+IG1fcGx1Z2luOwogICAgIFBsdWdpbjo6UGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7
Cg==
</data>
<flag name="review"
          id="49223"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>