<?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>92975</bug_id>
          
          <creation_ts>2012-08-02 04:17:15 -0700</creation_ts>
          <short_desc>Introduce InternalsClient for handling port specific details as resource urls etc. for Internals object</short_desc>
          <delta_ts>2012-08-28 05:52:15 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>90675</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Vivek Galatage">vivekgalatage</reporter>
          <assigned_to name="Vivek Galatage">vivekgalatage</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>hausmann</cc>
    
    <cc>morrita</cc>
    
    <cc>pfeldman</cc>
    
    <cc>rniwa</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>685214</commentid>
    <comment_count>0</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-02 04:17:15 -0700</bug_when>
    <thetext>Introduce InternalsClient for handling port specific details as resource urls etc. for Internals object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685290</commentid>
    <comment_count>1</comment_count>
      <attachid>156062</attachid>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-02 06:16:38 -0700</bug_when>
    <thetext>Created attachment 156062
Work In Progress Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685299</commentid>
    <comment_count>2</comment_count>
      <attachid>156062</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-08-02 06:25:42 -0700</bug_when>
    <thetext>Comment on attachment 156062
Work In Progress Patch

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

&gt; Source/WebCore/testing/InternalsClient.h:40
&gt; +PassOwnPtr&lt;InternalsClient&gt; provideInternalsClient();

What prevents you from adding InternalsClient* a parameter to Internals::Internals ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685318</commentid>
    <comment_count>3</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-02 06:46:32 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 156062 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156062&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/testing/InternalsClient.h:40
&gt; &gt; +PassOwnPtr&lt;InternalsClient&gt; provideInternalsClient();
&gt; 
&gt; What prevents you from adding InternalsClient* a parameter to Internals::Internals ?

:) I thought of doing so. As I was rushing back home from office, I thought quickly upload the patch and work on it from home. I will correct this one. It would need modifications to WebCoreTestSupport::injectInternalsObject signature as WebCoreTestSupport::injectInternalsObject(JSContextRef context, InternalsClient* client).  This function is being called from all the platform specific DumpRenderTree implementations. So its easy to pass the direct client implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686093</commentid>
    <comment_count>4</comment_count>
      <attachid>156230</attachid>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-02 18:30:26 -0700</bug_when>
    <thetext>Created attachment 156230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686251</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-08-02 23:08:17 -0700</bug_when>
    <thetext>We missed one important thing: Internals object was introduced to avoid writing platform-specific code when we need to test platform-independent WebCore functionality. Now we are going to introduce a platform-specific part to it, this seems to contradict Internals design. Sorry for not bringing this up earlier. If opening an alternative front-end for the protocol tests requires some platform-specific logic then I&apos;d rather put it into layoutTestController(or testRunner whichever name now is in fashion).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686332</commentid>
    <comment_count>6</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-08-03 00:49:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; We missed one important thing: Internals object was introduced to avoid writing platform-specific code when we need to test platform-independent WebCore functionality. Now we are going to introduce a platform-specific part to it, this seems to contradict Internals design. Sorry for not bringing this up earlier. If opening an alternative front-end for the protocol tests requires some platform-specific logic then I&apos;d rather put it into layoutTestController(or testRunner whichever name now is in fashion).

This is true in principle.
But for this case,that only platform specific bit is the URL of inspector.html
and bunch of other logic can be shared. 
If we move things to TestRunner, we need to duplicate these for each port,
which will be sad. IMO having InternalsClient is not that bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686549</commentid>
    <comment_count>7</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-03 04:11:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; We missed one important thing: Internals object was introduced to avoid writing platform-specific code when we need to test platform-independent WebCore functionality. Now we are going to introduce a platform-specific part to it, this seems to contradict Internals design. Sorry for not bringing this up earlier. If opening an alternative front-end for the protocol tests requires some platform-specific logic then I&apos;d rather put it into layoutTestController(or testRunner whichever name now is in fashion).
&gt; 
&gt; This is true in principle.
&gt; But for this case,that only platform specific bit is the URL of inspector.html
&gt; and bunch of other logic can be shared. 
&gt; If we move things to TestRunner, we need to duplicate these for each port,
&gt; which will be sad. IMO having InternalsClient is not that bad.

Thank you Yury and Morrita, so whats the next step that we are gonna take?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686774</commentid>
    <comment_count>8</comment_count>
      <attachid>156230</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-08-03 08:34:16 -0700</bug_when>
    <thetext>Comment on attachment 156230
Patch

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

&gt; Tools/DumpRenderTree/win/FrameLoadDelegate.cpp:58
&gt; +    String inspectorProtocolVerifierURL() { return String(&quot;TO-BE-ADDED-URL&quot;); }

Why not to use http://localhost:8000/inspector/resources/protocol-tests-frontend.html ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686776</commentid>
    <comment_count>9</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-08-03 08:37:21 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 156230 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156230&amp;action=review
&gt; 
&gt; &gt; Tools/DumpRenderTree/win/FrameLoadDelegate.cpp:58
&gt; &gt; +    String inspectorProtocolVerifierURL() { return String(&quot;TO-BE-ADDED-URL&quot;); }
&gt; 
&gt; Why not to use http://localhost:8000/inspector/resources/protocol-tests-frontend.html ?

Sounds like a good solution as we are going to use the front-end only in layout tests. If we decide to serve the front-end this way we will need to put all protocol tests under LayoutTests/http so that we have the web server started for them but that shouldn&apos;t be an issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686781</commentid>
    <comment_count>10</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-03 08:44:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 156230 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156230&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/DumpRenderTree/win/FrameLoadDelegate.cpp:58
&gt; &gt; &gt; +    String inspectorProtocolVerifierURL() { return String(&quot;TO-BE-ADDED-URL&quot;); }
&gt; &gt; 
&gt; &gt; Why not to use http://localhost:8000/inspector/resources/protocol-tests-frontend.html ?
&gt; 
&gt; Sounds like a good solution as we are going to use the front-end only in layout tests. If we decide to serve the front-end this way we will need to put all protocol tests under LayoutTests/http so that we have the web server started for them but that shouldn&apos;t be an issue.

+1. Sounds great. 

One question about inspector/resources/protocol-tests-frontend.html. How will this resource be placed? Or we need not worry about this at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686807</commentid>
    <comment_count>11</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-03 08:59:51 -0700</bug_when>
    <thetext>So now that we are considering this localhost based url, then I guess we wouldn&apos;t need this InternalsClient. Correct me if you have other opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686819</commentid>
    <comment_count>12</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-08-03 09:18:04 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (From update of attachment 156230 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=156230&amp;action=review
&gt; 
&gt; One question about inspector/resources/protocol-tests-frontend.html. How will this resource be placed? Or we need not worry about this at all?

Layout test runner will launch a web server for tests and we just need to make sure that it serves the directory where the protocol-tests-frontend.html lies.


(In reply to comment #11)
&gt; So now that we are considering this localhost based url, then I guess we wouldn&apos;t need this InternalsClient. Correct me if you have other opinion.

That&apos;s true. We can hardcode the URL into Internals.cpp as it is going to be the same on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689247</commentid>
    <comment_count>13</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-07 11:49:47 -0700</bug_when>
    <thetext>With the URL, we now I have another problem in hand. Now with the raw WebCore::Page object created, when we try to load the above URL(giving the EmptyFrameLoaderClient instance for frame loading), no n/w request is being made. This behavior is obvious considering none of the methods of FrameLoaderClient being implemented in EmptyFrameLoaderClient. 

In order to have this request go through, we need to have the FrameLoaderClient interface with the necessary methods implemented. But this implementation would need the n/w stack for its operation. This mandates of using port specific n/w stack. So having this implemented from Internals is not completely straight forward in that it involves port specific components.

Hence I was thinking of following options:

1. Move the logic from internals to DRT and implement port specific Page object and url/resource loading mechanism.

pros:
* implementation becomes straight forward
* we can think of using the resource location directly as now we are platform dependent. We can have a re-look of using either the localhost based url or port specific resource location.
* limits(if not completely eliminates the need for) the export symbols from webcore 

cons:
* need to patch almost all ports
* code duplication with similar logic
* doubtful about a chrome-less(headless) page as we will be using port specific page objects such as QWebPage, WebPage etc.

2. We can reuse the existing frameloader client from the layout test&apos;s Page object. Again this object can&apos;t be inferred directly. Hence we need to implement something like prototype design pattern ( http://en.wikipedia.org/wiki/Prototype_pattern ) and providing method like
virtual PassOwnPtr&lt;FrameLoaderClient&gt; FrameLoaderClient::clone() = 0;
Using this clone method, we can get the handle to the port specific implementation of frame loader client and simply pass this instance for loading the above url. 

pros:
* looks elegant from code re-usability
* requires minimal coding effort as most of the code is already implemented

cons:
* need to modify core interface class(es) like FrameLoaderClient etc.
* the modification is required only for the test harness. So not sure if this will be accepted in general by most of the community members as this would add the overhead of a new virtual method.

3. Implement the FrameLoaderClient within internals for all the ports

pros:
* none. Rather it has all drawbacks.

cons:
* code duplication as ports already implements this
* maintenance would be a difficult
* keeping in sync would be tedious because of the code duplication.


Please let me know your thoughts on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689255</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-07 11:57:54 -0700</bug_when>
    <thetext>I&apos;d like to help by suggesting approaches, but I feel like I&apos;m jump into the middle of a movie here.  Would you be willing to explain what problem you&apos;re trying to solve?  I understand that this is related to being able to test the inspector protocol without the normal inspector front-end, but I don&apos;t understand how that relates to needing to fake out FrameLoader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689262</commentid>
    <comment_count>15</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-07 12:15:30 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I&apos;d like to help by suggesting approaches, but I feel like I&apos;m jump into the middle of a movie here. 

Thank you Adam for your help. 

&gt; Would you be willing to explain what problem you&apos;re trying to solve?  I understand that this is related to being able to test the inspector protocol without the normal inspector front-end, but I don&apos;t understand how that relates to needing to fake out FrameLoader.

You are right. We are trying to come up with the test harness for testing pure inspector protocol only tests. As for this, we are trying the option of creating a dummy page (in our case, we are trying to create a raw WebCore::Page object) and then loading only the bare minimal JavaScript resources needed for protocol handling like InspectorBackend.js and InspectorBackendCommands.js in this new page through the protocol-tests-frontend.html. 

So as to minimize having platform specific resource handling for this protocol-tests-frontend.html, we thought of using the localhost based url. Now, the page is created with EmptyFrameLoaderClient. And this is where the url will not be loaded as we have empty frame loader client.

Hence I proposed above approaches to address this issue. I would be glad to receive your feedback. Thanks once again for helping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689280</commentid>
    <comment_count>16</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-07 12:32:51 -0700</bug_when>
    <thetext>This is very rough outline code which illustrates what we are trying to achieve. http://pastebin.com/VyeJQq0y (this code is not following any standards as such. It might contain lot of errors as well as it also leaks the memory. This is just for illustration purpose)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689324</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-07 13:19:47 -0700</bug_when>
    <thetext>Sorry if this is a dumb question, but what do you gain by using a fake page rather than a real page?  It looks like the code is trying to inject a mock InspectorFrontendClient of some sort.  I wonder if it would be easier to create a real page and then replace its InspectorFrontendClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689734</commentid>
    <comment_count>18</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-07 18:44:13 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Sorry if this is a dumb question, but what do you gain by using a fake page rather than a real page?  It looks like the code is trying to inject a mock InspectorFrontendClient of some sort.  I wonder if it would be easier to create a real page and then replace its InspectorFrontendClient.

The reason of using the fake page(raw Page object) is that we just needed a placeholder for containing the backend js code without the need of rendering capability. Also creating this way, we would avoid platform specific code as there isn&apos;t much support needed from port specific details. Hence we thought we would create a fake page and then install the mock frontend client using a mock channel so that the protocol alone can be tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689902</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-07 22:33:30 -0700</bug_when>
    <thetext>I would just use a real page.  There are plenty of tests that create a new window using window.open.  You can then mock out whatever you need in that page, but at least the rest of the machinery will actually exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>706261</commentid>
    <comment_count>20</comment_count>
    <who name="Vivek Galatage">vivekgalatage</who>
    <bug_when>2012-08-28 05:52:15 -0700</bug_when>
    <thetext>Closing the bug as introducing InternalsClient is not required.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156062</attachid>
            <date>2012-08-02 06:16:38 -0700</date>
            <delta_ts>2012-08-02 18:30:10 -0700</delta_ts>
            <desc>Work In Progress Patch</desc>
            <filename>WIP.patch</filename>
            <type>text/plain</type>
            <size>11002</size>
            <attacher name="Vivek Galatage">vivekgalatage</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTI0MTcwKQorKysgU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTIyMyw2ICsxMjIzLDcgQEAgU09VUkNFUyArPSBc
CiAgICAgc3RvcmFnZS9TdG9yYWdlU3luY01hbmFnZXIuY3BwIFwKICAgICBzdG9yYWdlL1N0b3Jh
Z2VUcmFja2VyLmNwcCBcCiAgICAgdGVzdGluZy9JbnRlcm5hbHMuY3BwIFwKKyAgICB0ZXN0aW5n
L0ludGVybmFsc0NsaWVudC5jcHAgXAogICAgIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAg
XAogICAgIHhtbC9ET01QYXJzZXIuY3BwIFwKICAgICB4bWwvTmF0aXZlWFBhdGhOU1Jlc29sdmVy
LmNwcCBcCkBAIC0yNjUxLDYgKzI2NTIsNyBAQCBIRUFERVJTICs9IFwKICAgICBzdmcvU1ZHWm9v
bUV2ZW50LmggXAogICAgIHRlc3RpbmcvRmFzdE1hbGxvY1N0YXRpc3RpY3MuaCBcCiAgICAgdGVz
dGluZy9JbnRlcm5hbHMuaCBcCisgICAgdGVzdGluZy9JbnRlcm5hbHNDbGllbnQuaCBcCiAgICAg
dGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmggXAogICAgIHdvcmtlcnMvQWJzdHJhY3RXb3JrZXIu
aCBcCiAgICAgd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0LmggXApJbmRleDogU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTI0MTcwKQorKysgU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3
IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ291bnRlcnMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnN0cnVtZW50aW5nQWdlbnRzLmgiCisjaW5j
bHVkZSAiSW50ZXJuYWxzQ2xpZW50LmgiCiAjaW5jbHVkZSAiSW50ZXJuYWxTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJMYW5ndWFnZS5oIgpAQCAtMTU1LDYgKzE1
Niw3IEBAIEludGVybmFsczo6fkludGVybmFscygpCiBJbnRlcm5hbHM6OkludGVybmFscyhEb2N1
bWVudCogZG9jdW1lbnQpCiAgICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihkb2N1bWVu
dCkKIHsKKyAgICBtX2ludGVybmFsc0NsaWVudCA9IHByb3ZpZGVJbnRlcm5hbHNDbGllbnQoKTsK
IH0KIAogRG9jdW1lbnQqIEludGVybmFsczo6Y29udGV4dERvY3VtZW50KCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTI0MTcwKQorKysgU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIs
NyBAQCBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIERvY3VtZW50TWFya2VyOwogY2xhc3MgRWxlbWVu
dDsKIGNsYXNzIEZyYW1lOworY2xhc3MgSW50ZXJuYWxzQ2xpZW50OwogY2xhc3MgSW50ZXJuYWxT
ZXR0aW5nczsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlUG9wdXBDb250cm9sbGVyOwpAQCAtMjE4
LDYgKzIxOSw4IEBAIHByaXZhdGU6CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7CiAKICAgICBE
b2N1bWVudE1hcmtlciogbWFya2VyQXQoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwg
dW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIE93blB0cjxJbnRlcm5hbHND
bGllbnQ+IG1faW50ZXJuYWxzQ2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNDbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzQ2xpZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzQ2xpZW50LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBWaXZl
ayBHYWxhdGFnZSA8dml2ZWtnYWxhdGFnZUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbnRlcm5hbHNDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitLVVJMIEludGVybmFsc0NsaWVudDo6aW5zcGVjdG9yUHJvdG9jb2xWZXJpZmllclVSTCgp
Cit7CisgICAgcmV0dXJuIGJsYW5rVVJMKCk7Cit9CisKKyNpZiAhUExBVEZPUk0oUVQpCitQYXNz
T3duUHRyPEludGVybmFsc0NsaWVudD4gcHJvdmlkZUludGVybmFsc0NsaWVudCgpCit7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBJbnRlcm5hbHNDbGllbnQoKSk7Cit9CisjZW5kaWYgCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHNDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgVml2ZWsgR2FsYXRhZ2UgPHZpdmVrZ2FsYXRhZ2VAZ21haWwuY29tPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisg
CisjaWZuZGVmIEludGVybmFsc0NsaWVudF9oCisjZGVmaW5lIEludGVybmFsc0NsaWVudF9oCisK
KyNpbmNsdWRlICJLVVJMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAKK2NsYXNzIEludGVy
bmFsc0NsaWVudAoreworcHVibGljOgorICAgIHZpcnR1YWwgfkludGVybmFsc0NsaWVudCgpIHsg
fQorICAgIHZpcnR1YWwgS1VSTCBpbnNwZWN0b3JQcm90b2NvbFZlcmlmaWVyVVJMKCk7Cit9Owor
CitQYXNzT3duUHRyPEludGVybmFsc0NsaWVudD4gcHJvdmlkZUludGVybmFsc0NsaWVudCgpOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJbnRlcm5hbHNDbGllbnRfaApJ
bmRleDogU291cmNlL1dlYktpdC9XZWJLaXQxLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYktpdDEucHJvCShyZXZpc2lvbiAxMjQxNzApCisrKyBTb3VyY2UvV2ViS2l0L1dlYktp
dDEucHJvCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIFNPVVJDRVMgKz0gXAogICAg
ICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L0luaXRXZWJDb3JlUXQuY3BwIFwKICAgICAkJFBXRC9x
dC9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRRdC5jcHAgXAogICAgICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L0luc3BlY3RvclNlcnZlclF0LmNwcCBcCisgICAgJCRQV0QvcXQvV2ViQ29y
ZVN1cHBvcnQvSW50ZXJuYWxzQ2xpZW50UXQuY3BwIFwKICAgICAkJFBXRC9xdC9XZWJDb3JlU3Vw
cG9ydC9Ob3RpZmljYXRpb25QcmVzZW50ZXJDbGllbnRRdC5jcHAgXAogICAgICQkUFdEL3F0L1dl
YkNvcmVTdXBwb3J0L1BhZ2VDbGllbnRRdC5jcHAgXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L1BvcHVwTWVudVF0LmNwcCBcCkBAIC03OCw2ICs3OSw3IEBAIEhFQURFUlMgKz0gXAogICAg
ICQkUFdEL3F0L0FwaS9xaHR0cGhlYWRlcl9wLmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBw
b3J0L0luaXRXZWJDb3JlUXQuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yU2VydmVyUXQuaCBcCisgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvSW50ZXJuYWxzQ2xp
ZW50UXQuaCBcCiAgICAgJCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvUXRGYWxsYmFja1dlYlBvcHVw
LmggXAogICAgICQkUFdEL3F0L1dlYkNvcmVTdXBwb3J0L1F0V2ViQ29tYm9Cb3guaCBcCiAgICAg
JCRQV0QvcXQvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRRdC5oIFwKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW50ZXJuYWxzQ2xpZW50UXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW50ZXJuYWxzQ2xpZW50
UXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9J
bnRlcm5hbHNDbGllbnRRdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgVml2ZWsgR2FsYXRhZ2UgPHZpdmVrZ2FsYXRhZ2VAZ21haWwu
Y29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisgCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZXJuYWxzQ2xpZW50
UXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitLVVJMIEludGVybmFsc0NsaWVudFF0Ojpp
bnNwZWN0b3JQcm90b2NvbFZlcmlmaWVyVVJMKCkKK3sKKyAgICAvL0ZJWE1FOiBUaGlzIHdpbGwg
YmUgcmVwbGFjZWQgd2l0aCBpbnNwZWN0b3IgcHJvdG9jb2wgdmVyaWZpZXIgdXJsIGFsb25nCisg
ICAgLy93aXRoIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDY3NSAK
KyAgICByZXR1cm4gYmxhbmtVUkwoKTsKK30KKworUGFzc093blB0cjxJbnRlcm5hbHNDbGllbnQ+
IHByb3ZpZGVJbnRlcm5hbHNDbGllbnQoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW50
ZXJuYWxzQ2xpZW50UXQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvSW50ZXJuYWxzQ2xpZW50UXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ludGVybmFsc0NsaWVudFF0
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0ludGVy
bmFsc0NsaWVudFF0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgVml2ZWsgR2FsYXRhZ2UgPHZpdmVrZ2FsYXRhZ2VAZ21haWwuY29tPgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisgCisjaWZuZGVmIEludGVybmFsc0NsaWVudFF0X2gKKyNkZWZpbmUgSW50ZXJuYWxzQ2xpZW50
UXRfaAorCisjaW5jbHVkZSAiSW50ZXJuYWxzQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAKK2NsYXNzIEludGVybmFsc0NsaWVudFF0IDogcHVibGljIEludGVybmFsc0NsaWVudAor
eworcHVibGljOgorICAgIEtVUkwgaW5zcGVjdG9yUHJvdG9jb2xWZXJpZmllclVSTCgpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSW50ZXJuYWxzQ2xpZW50UXRf
aA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156230</attachid>
            <date>2012-08-02 18:30:26 -0700</date>
            <delta_ts>2012-08-03 09:18:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92975-20120803065954.patch</filename>
            <type>text/plain</type>
            <size>18076</size>
            <attacher name="Vivek Galatage">vivekgalatage</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTA4LTAyICBWaXZlayBH
YWxhdGFnZSAgPHZpdmVrZ2FsYXRhZ2VAZ21haWwuY29tPgorCisgICAgICAgIEludHJvZHVjZSBJ
bnRlcm5hbHNDbGllbnQgZm9yIGhhbmRsaW5nIHBvcnQgc3BlY2lmaWMgZGV0YWlscyBhcyByZXNv
dXJjZSB1cmxzIGV0Yy4gZm9yIEludGVybmFscyBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0lQIHBhdGNoCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiBXSVAgUGF0Y2gKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmVUZXN0U3Vw
cG9ydC52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovY29weUZvcndhcmRpbmdIZWFk
ZXJzLmNtZDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Oklu
dGVybmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKEludGVy
bmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHNDbGllbnQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzQ2xpZW50OjppbnNw
ZWN0b3JQcm90b2NvbFZlcmlmaWVyVVJMKToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsc0Ns
aWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoSW50ZXJuYWxzQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsc0NsaWVudDo6fkludGVybmFsc0NsaWVu
dCk6CisgICAgICAgICogdGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QpOgorICAgICAgICAq
IHRlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0Lmg6CisgICAgICAgIChXZWJDb3JlVGVzdFN1
cHBvcnQpOgorICAgICAgICAqIHRlc3RpbmcvdjgvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KToKKyAgICAg
ICAgKiB0ZXN0aW5nL3Y4L1dlYkNvcmVUZXN0U3VwcG9ydC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlVGVzdFN1cHBvcnQpOgorCiAyMDEyLTA3LTMxICBLZWlzaGkgSGF0
dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNsaWRlciB0aWNrcyBhcmUgZHJh
d24gYXQgd3JvbmcgcG9zaXRpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlVGVzdFN1cHBvcnQudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmVUZXN0U3VwcG9ydC52Y3Byb2oJKHJldmlzaW9uIDEyNDE5
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmVUZXN0U3VwcG9ydC52
Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTYyNyw2ICs2MjcsNzQgQEAKIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHRlc3RpbmdcSW50ZXJuYWxzLmgiCiAJCQkJPgogCQkJPC9GaWxlPgorICAgICAgICAg
ICAgPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHRlc3RpbmdcSW50ZXJuYWxzQ2xpZW50LmNw
cCIKKwkJCQk+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMy
IgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJ
CQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5n
cz0iNDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyIgorCQkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSIk
KE5PSU5IRVJJVCkiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJPgorCQkJCQk8
VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCVVzZVByZWNvbXBpbGVk
SGVhZGVyPSIwIgorCQkJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQwNjU7NDI3Mzs0NTY1
OzQ3MDE7NDcwMiIKKwkJCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iJChOT0lOSEVSSVQpIgorCQkJ
CQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJ
CQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJPgorCQkJCQk8VG9vbAor
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVy
PSIwIgorCQkJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQwNjU7NDI3Mzs0NTY1OzQ3MDE7
NDcwMiIKKwkJCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iJChOT0lOSEVSSVQpIgorCQkJCQkvPgor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5h
bWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAi
CisJCQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAy
IgorCQkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCkiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
RGVidWdfQWxsfFdpbjMyIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJCQlEaXNhYmxl
U3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyIgorCQkJCQkJRm9yY2Vk
SW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCkiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4z
MiIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJ
CQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCQkJRGlzYWJsZVNwZWNpZmljV2Fybmlu
Z3M9IjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMiIKKwkJCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0i
JChOT0lOSEVSSVQpIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0Zp
bGU+CisgICAgICAgICAgICA8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cdGVzdGluZ1xJbnRl
cm5hbHNDbGllbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cdGVzdGluZ1xJbnRlcm5hbFNldHRpbmdzLmNwcCIKIAkJCQk+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVh
ZGVycy5jbWQJKHJldmlzaW9uIDEyNDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQJKHdvcmtpbmcgY29weSkKQEAgLTk4LDUgKzk4
LDYgQEAgeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXEZvcndhcmRpbmdIZQogeGNvcHkgL3kg
L2QgIiVQcm9qZWN0RGlyJS4uXEZvcndhcmRpbmdIZWFkZXJzXHlhcnJcKi5oIiAiJUNPTkZJR1VS
QVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlXEZvcndhcmRpbmdIZWFkZXJzXHlhcnIiCiAK
IHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlx0ZXN0aW5nXGpzXFdlYkNvcmVUZXN0U3VwcG9y
dC5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlVGVzdFN1cHBvcnQi
Cit4Y29weSAveSAvZCAiJVByb2plY3REaXIlLi5cdGVzdGluZ1xJbnRlcm5hbHNDbGllbnQuaCIg
IiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2ViQ29yZVRlc3RTdXBwb3J0IgogCiBp
ZiBleGlzdCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcYnVpbGRmYWlsZWQiIGRlbCAiJUNPTkZJ
R1VSQVRJT05CVUlMRERJUiVcYnVpbGRmYWlsZWQiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCShyZXZpc2lvbiAxMjQxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MywxNyArMTQzLDE4IEBAIHN0YXRp
YyBTcGVsbENoZWNrZXIqIHNwZWxsY2hlY2tlcihEb2N1bWUKIAogY29uc3QgY2hhciogSW50ZXJu
YWxzOjppbnRlcm5hbHNJZCA9ICJpbnRlcm5hbHMiOwogCi1QYXNzUmVmUHRyPEludGVybmFscz4g
SW50ZXJuYWxzOjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQorUGFzc1JlZlB0cjxJbnRlcm5h
bHM+IEludGVybmFsczo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgUGFzc093blB0cjxJbnRl
cm5hbHNDbGllbnQ+IGludGVybmFsc0NsaWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEludGVybmFscyhkb2N1bWVudCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW50ZXJuYWxz
KGRvY3VtZW50LCBpbnRlcm5hbHNDbGllbnQpKTsKIH0KIAogSW50ZXJuYWxzOjp+SW50ZXJuYWxz
KCkKIHsKIH0KIAotSW50ZXJuYWxzOjpJbnRlcm5hbHMoRG9jdW1lbnQqIGRvY3VtZW50KQorSW50
ZXJuYWxzOjpJbnRlcm5hbHMoRG9jdW1lbnQqIGRvY3VtZW50LCBQYXNzT3duUHRyPEludGVybmFs
c0NsaWVudD4gaW50ZXJuYWxzQ2xpZW50KQogICAgIDogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2
ZXIoZG9jdW1lbnQpCisgICAgLCBtX2ludGVybmFsc0NsaWVudChpbnRlcm5hbHNDbGllbnQpCiB7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTI0MTk4
KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBJbnRlcm5hbHNfaAogCiAjaW5jbHVkZSAiQ29udGV4
dERlc3RydWN0aW9uT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJJbnRlcm5hbHNDbGllbnQuaCIKICNp
bmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTU2LDcgKzU3LDcgQEAgdHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKIGNsYXNzIEludGVybmFscyA6IHB1YmxpYyBSZWZDb3VudGVkPEludGVybmFscz4K
ICAgICAgICAgICAgICAgICAsIHB1YmxpYyBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlciB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZXJuYWxzPiBjcmVhdGUoRG9jdW1lbnQq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnRlcm5hbHM+IGNyZWF0ZShEb2N1bWVudCosIFBh
c3NPd25QdHI8SW50ZXJuYWxzQ2xpZW50Pik7CiAgICAgdmlydHVhbCB+SW50ZXJuYWxzKCk7CiAK
ICAgICBTdHJpbmcgZWxlbWVudFJlbmRlclRyZWVBc1RleHQoRWxlbWVudCosIEV4Y2VwdGlvbkNv
ZGUmKTsKQEAgLTIxMywxMSArMjE0LDEzIEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPEZhc3RN
YWxsb2NTdGF0aXN0aWNzPiBmYXN0TWFsbG9jU3RhdGlzdGljcygpIGNvbnN0OwogCiBwcml2YXRl
OgotICAgIGV4cGxpY2l0IEludGVybmFscyhEb2N1bWVudCopOworICAgIGV4cGxpY2l0IEludGVy
bmFscyhEb2N1bWVudCosIFBhc3NPd25QdHI8SW50ZXJuYWxzQ2xpZW50Pik7CiAgICAgRG9jdW1l
bnQqIGNvbnRleHREb2N1bWVudCgpIGNvbnN0OwogICAgIEZyYW1lKiBmcmFtZSgpIGNvbnN0Owog
CiAgICAgRG9jdW1lbnRNYXJrZXIqIG1hcmtlckF0KE5vZGUqLCBjb25zdCBTdHJpbmcmIG1hcmtl
clR5cGUsIHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBPd25QdHI8SW50
ZXJuYWxzQ2xpZW50PiBtX2ludGVybmFsc0NsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzQ2xpZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc0NsaWVudC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc0NsaWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBWaXZlayBHYWxhdGFnZSA8dml2ZWtnYWxhdGFnZUBnbWFpbC5jb20+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRlcm5hbHNDbGllbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitTdHJpbmcgSW50ZXJuYWxzQ2xpZW50OjppbnNwZWN0b3JQcm90b2NvbFZl
cmlmaWVyVVJMKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzQ2xpZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc0NsaWVudC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc0NsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzQ2xpZW50LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQojIyAtMCwwICsxICMjCisqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNDbGllbnQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBWaXZlayBHYWxh
dGFnZSA8dml2ZWtnYWxhdGFnZUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyAKKyNpZm5kZWYgSW50ZXJuYWxzQ2xp
ZW50X2gKKyNkZWZpbmUgSW50ZXJuYWxzQ2xpZW50X2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgCitjbGFzcyBJbnRlcm5hbHNDbGll
bnQKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbnRlcm5hbHNDbGllbnQoKSB7IH0KKyAgICB2
aXJ0dWFsIFN0cmluZyBpbnNwZWN0b3JQcm90b2NvbFZlcmlmaWVyVVJMKCk7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBJbnRlcm5hbHNDbGllbnRfaApJbmRleDog
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsc0NsaWVudC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNDbGllbnQuaAkod29ya2luZyBjb3B5KQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHNDbGll
bnQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMCwwICsxICMjCisqClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlzaW9uIDEyNDE5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMTQgKzM5LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBu
YW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0IHsKIAotdm9pZCBpbmplY3RJbnRlcm5hbHNPYmpl
Y3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIGluamVjdEludGVybmFsc09iamVjdChKU0Nv
bnRleHRSZWYgY29udGV4dCwgUGFzc093blB0cjxJbnRlcm5hbHNDbGllbnQ+IGludGVybmFsc0Ns
aWVudCkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGNvbnRleHQpOwogICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOwogICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
OwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnbG9iYWxPYmpl
Y3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoc2NyaXB0Q29udGV4dC0+aXNE
b2N1bWVudCgpKQotICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxE
YXRhKCksIElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRlcm5hbHNJZCksIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KHNjcmlwdENvbnRleHQpKSkpOworICAgICAgICBnbG9iYWxPYmplY3QtPnB1dERpcmVjdChleGVj
LT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIoZXhlYywgSW50ZXJuYWxzOjppbnRlcm5hbHNJZCks
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBJbnRlcm5hbHM6OmNyZWF0ZShzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KHNjcmlwdENvbnRleHQpLCBpbnRlcm5hbHNDbGllbnQpKSk7CiB9CiAKIHZvaWQg
cmVzZXRJbnRlcm5hbHNPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgJKHJldmlzaW9uIDEy
NDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxNyBAQAogI2lmbmRlZiBXZWJDb3JlVGVzdFN1
cHBvcnRfaAogI2RlZmluZSBXZWJDb3JlVGVzdFN1cHBvcnRfaAogCisjaW5jbHVkZSAiSW50ZXJu
YWxzQ2xpZW50LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCiB0eXBlZGVmIGNv
bnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKIAogbmFtZXNwYWNlIFdl
YkNvcmVUZXN0U3VwcG9ydCB7CiAKLXZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KEpTQ29udGV4
dFJlZik7Cit2b2lkIGluamVjdEludGVybmFsc09iamVjdChKU0NvbnRleHRSZWYsIFBhc3NPd25Q
dHI8V2ViQ29yZTo6SW50ZXJuYWxzQ2xpZW50Pik7CiB2b2lkIHJlc2V0SW50ZXJuYWxzT2JqZWN0
KEpTQ29udGV4dFJlZik7CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmVUZXN0U3VwcG9ydAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvdjgvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL3Y4L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAJKHJldmlzaW9uIDEyNDE5OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvdjgvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksMTQgKzM5LDE0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBu
YW1lc3BhY2UgV2ViQ29yZVRlc3RTdXBwb3J0IHsKIAotdm9pZCBpbmplY3RJbnRlcm5hbHNPYmpl
Y3Qodjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0KQordm9pZCBpbmplY3RJbnRlcm5hbHNP
YmplY3Qodjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0LCBQYXNzT3duUHRyPFdlYkNvcmU6
OkludGVybmFsc0NsaWVudD4gaW50ZXJuYWxzQ2xpZW50KQogewogICAgIHY4OjpDb250ZXh0OjpT
Y29wZSBjb250ZXh0U2NvcGUoY29udGV4dCk7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwog
CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdldFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoc2NyaXB0Q29udGV4dC0+aXNEb2N1bWVudCgpKQot
ICAgICAgICBjb250ZXh0LT5HbG9iYWwoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhJbnRlcm5hbHM6
OmludGVybmFsc0lkKSwgdG9WOChJbnRlcm5hbHM6OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KHNjcmlwdENvbnRleHQpKSkpOworICAgICAgICBjb250ZXh0LT5HbG9iYWwoKS0+U2V0KHY4
OjpTdHJpbmc6Ok5ldyhJbnRlcm5hbHM6OmludGVybmFsc0lkKSwgdG9WOChJbnRlcm5hbHM6OmNy
ZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHNjcmlwdENvbnRleHQpLCBpbnRlcm5hbHNDbGll
bnQpKSk7CiB9CiAKIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3Qodjg6OkxvY2FsPHY4OjpDb250
ZXh0PiBjb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy92OC9XZWJDb3JlVGVz
dFN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL3Y4L1dlYkNv
cmVUZXN0U3VwcG9ydC5oCShyZXZpc2lvbiAxMjQxOTgpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL3Y4L1dlYkNvcmVUZXN0U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4
IEBACiAjaWZuZGVmIFdlYkNvcmVUZXN0U3VwcG9ydF9oCiAjZGVmaW5lIFdlYkNvcmVUZXN0U3Vw
cG9ydF9oCiAKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCiBuYW1lc3BhY2Ugdjggewog
Y2xhc3MgQ29udGV4dDsKIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBMb2NhbDsKQEAgLTMzLDE0
ICszNSwxNSBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgTG9jYWw7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEZyYW1lOworY2xhc3MgSW50ZXJuYWxzQ2xpZW50OwogY2xhc3MgUGFn
ZVBvcHVwQ29udHJvbGxlcjsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9ydCB7CiAK
LXZvaWQgaW5qZWN0SW50ZXJuYWxzT2JqZWN0KHY4OjpMb2NhbDx2ODo6Q29udGV4dD4pOwordm9p
ZCBpbmplY3RJbnRlcm5hbHNPYmplY3Qodjg6OkxvY2FsPHY4OjpDb250ZXh0PiwgUGFzc093blB0
cjxXZWJDb3JlOjpJbnRlcm5hbHNDbGllbnQ+KTsKIHZvaWQgcmVzZXRJbnRlcm5hbHNPYmplY3Qo
djg6OkxvY2FsPHY4OjpDb250ZXh0Pik7CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmVUZXN0U3VwcG9ydAogCiAjZW5kaWYKSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNDE5OCkKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA4
LTAyICBWaXZlayBHYWxhdGFnZSAgPHZpdmVrZ2FsYXRhZ2VAZ21haWwuY29tPgorCisgICAgICAg
IEludHJvZHVjZSBJbnRlcm5hbHNDbGllbnQgZm9yIGhhbmRsaW5nIHBvcnQgc3BlY2lmaWMgZGV0
YWlscyBhcyByZXNvdXJjZSB1cmxzIGV0Yy4gZm9yIEludGVybmFscyBvYmplY3QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyOTc1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0lQIHBhdGNoLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcDoKKyAgICAgICAg
KEludGVybmFsc0NsaWVudFdpbik6CisgICAgICAgIChJbnRlcm5hbHNDbGllbnRXaW46Omluc3Bl
Y3RvclByb3RvY29sVmVyaWZpZXJVUkwpOgorICAgICAgICAoRnJhbWVMb2FkRGVsZWdhdGU6OmRp
ZENsZWFyV2luZG93T2JqZWN0Rm9yRnJhbWVJblN0YW5kYXJkV29ybGQpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0ZvckZyYW1lKToK
KwogMjAxMi0wNy0zMSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbY2hyb21pdW1dIG1vdmUgRXZlbnRTZW5kZXIgaW50byBUZXN0UnVubmVyLmEKSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcAko
cmV2aXNpb24gMTI0MTk4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERl
bGVnYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKICNpbmNsdWRlICJHQ0Nv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnRlcm5hbHNDbGllbnQuaCIKICNpbmNsdWRlICJMYXlv
dXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlVGVzdFN1cHBvcnQuaCIKQEAgLTUyLDYgKzUzLDExIEBAIHVzaW5nIHN0
ZDo6c3RyaW5nOwogCiBzdGF0aWMgRnJhbWVMb2FkRGVsZWdhdGUqIGdfZGVsZWdhdGVXYWl0aW5n
T25UaW1lcjsKIAorY2xhc3MgSW50ZXJuYWxzQ2xpZW50V2luIDogcHVibGljIFdlYkNvcmU6Oklu
dGVybmFsc0NsaWVudCB7CitwdWJsaWM6CisgICAgU3RyaW5nIGluc3BlY3RvclByb3RvY29sVmVy
aWZpZXJVUkwoKSB7IHJldHVybiBTdHJpbmcoIlRPLUJFLUFEREVELVVSTCIpOyB9Cit9OworCiBz
dHJpbmcgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoSVdlYkZyYW1lKiB3ZWJGcmFt
ZSkKIHsKICAgICBDT01QdHI8SVdlYlZpZXc+IHdlYlZpZXc7CkBAIC0zNzcsNyArMzgzLDcgQEAg
dm9pZCBGcmFtZUxvYWREZWxlZ2F0ZTo6ZGlkQ2xlYXJXaW5kb3dPYgogICAgIEpTT2JqZWN0U2V0
UHJvcGVydHkoY29udGV4dCwgd2luZG93T2JqZWN0LCBldmVudFNlbmRlclN0ciwgZXZlbnRTZW5k
ZXIsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUsIDApOwogICAgIEpTU3RyaW5nUmVsZWFzZShldmVudFNlbmRlclN0cik7CiAKLSAg
ICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKKyAg
ICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0LCBhZG9w
dFB0cihuZXcgSW50ZXJuYWxzQ2xpZW50V2luKSk7CiB9CiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgRnJhbWVMb2FkRGVsZWdhdGU6OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKCAK
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDEyNDE5OCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODYyLDcgKzg2Miw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRDbGVhcldpbmRvd0YKICNpZiBQTEFURk9STShRVCkKICAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRRdDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRleHQpOwogI2Vsc2UKLSAgICBXZWJD
b3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKKyAgICAvLyBX
ZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVjdEludGVybmFsc09iamVjdChjb250ZXh0KTsKICNlbmRp
ZgogfQogCg==
</data>
<flag name="review"
          id="165879"
          type_id="1"
          status="-"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>