<?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>112314</bug_id>
          
          <creation_ts>2013-03-13 19:46:33 -0700</creation_ts>
          <short_desc>Add support of sending blob data for RTCDataChannel.</short_desc>
          <delta_ts>2023-08-23 07:59:23 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>56459</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Li Yin">li.yin</reporter>
          <assigned_to name="Li Yin">li.yin</assigned_to>
          <cc>abarth</cc>
    
    <cc>annevk</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>haraken</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mkwst+watchlist</cc>
    
    <cc>nick.diego</cc>
    
    <cc>peter+ews</cc>
    
    <cc>syoichi</cc>
    
    <cc>tkent</cc>
    
    <cc>tommyw</cc>
    
    <cc>toyoshim</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>854880</commentid>
    <comment_count>0</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-13 19:46:33 -0700</bug_when>
    <thetext>From spec: http://dev.w3.org/2011/webrtc/editor/webrtc.html#widl-RTCDataChannel-send-void-Blob-data
RTCDataChannel can send blob data, WebKit doesn&apos;t implement it.
I am preparing the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855676</commentid>
    <comment_count>1</comment_count>
      <attachid>193229</attachid>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-14 21:17:01 -0700</bug_when>
    <thetext>Created attachment 193229
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855679</commentid>
    <comment_count>2</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2013-03-14 21:22:45 -0700</bug_when>
    <thetext>tommyw: would you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855830</commentid>
    <comment_count>3</comment_count>
      <attachid>193229</attachid>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2013-03-15 02:39:11 -0700</bug_when>
    <thetext>Comment on attachment 193229
Patch

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

It looks really good but maybe you should try to get someone from e.g. WebSocket to have a look as well.

&gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:172
&gt;  {

Please check that the data channel isn&apos;t closed first.

&gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:299
&gt; +            // FIXME: Will determine if raising exception should be necessary.

It isn&apos;t possible to throw an exception here so you can remove the comment.

&gt; LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html:87
&gt; +shouldBe(&quot;dc.binaryType&quot;, &quot;&apos;blob&apos;&quot;);

Nit: You can use shouldBeEqualToString here instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855848</commentid>
    <comment_count>4</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-15 03:17:40 -0700</bug_when>
    <thetext>Hi Takashi Toyoshima,
Could you please review this patch? The implementation looks like WebSocket. Thanks in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855862</commentid>
    <comment_count>5</comment_count>
      <attachid>193273</attachid>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-15 03:40:07 -0700</bug_when>
    <thetext>Created attachment 193273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855863</commentid>
    <comment_count>6</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-15 03:42:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 193229 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193229&amp;action=review
&gt; 
&gt; It looks really good but maybe you should try to get someone from e.g. WebSocket to have a look as well.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:172
&gt; &gt;  {
&gt; 
&gt; Please check that the data channel isn&apos;t closed first.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:299
&gt; &gt; +            // FIXME: Will determine if raising exception should be necessary.
&gt; 
&gt; It isn&apos;t possible to throw an exception here so you can remove the comment.
&gt; 
&gt; &gt; LayoutTests/fast/mediastream/RTCPeerConnection-datachannel.html:87
&gt; &gt; +shouldBe(&quot;dc.binaryType&quot;, &quot;&apos;blob&apos;&quot;);
&gt; 
&gt; Nit: You can use shouldBeEqualToString here instead.

Fixed.
Thanks for your review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>856639</commentid>
    <comment_count>7</comment_count>
    <who name="Takashi Toyoshima">toyoshim</who>
    <bug_when>2013-03-16 18:13:10 -0700</bug_when>
    <thetext>+tkent

Hi Li,
I&apos;m familiar with WebSocket, but not a WebKit reviewer yet.
tkent or ap looks proper reviewers in this case.

Kent-san, can you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857060</commentid>
    <comment_count>8</comment_count>
      <attachid>193549</attachid>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-18 06:40:40 -0700</bug_when>
    <thetext>Created attachment 193549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857062</commentid>
    <comment_count>9</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-18 06:44:57 -0700</bug_when>
    <thetext>Update the patch for handling failed blob loading.
When the blob data can&apos;t be loaded correctly (e.g. the File or Blob resource could not be found at the time the read was processed), skip the blob, and continue to send the next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857072</commentid>
    <comment_count>10</comment_count>
      <attachid>193549</attachid>
    <who name="Mike West">mkwst</who>
    <bug_when>2013-03-18 06:59:37 -0700</bug_when>
    <thetext>Comment on attachment 193549
Patch

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

&gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:278
&gt; +        String errorMessage(&quot;Failed to load Blob: error code = &quot; + String::number(errorCode));

Nit: There&apos;s no need for a temporary String here; you can simply add the string directly to the call to &apos;addConsoleMessage&apos;.

Relatedly, is there any more detail we can provide here beyond an opaque number? Does &quot;1&quot; in the error code that shows up in the tests actually mean anything? As a developer, I&apos;m not sure what I&apos;d do with this information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857073</commentid>
    <comment_count>11</comment_count>
      <attachid>193549</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2013-03-18 07:05:17 -0700</bug_when>
    <thetext>Comment on attachment 193549
Patch

Attachment 193549 did not pass cr-android-ews (chromium-android):
Output: http://webkit-commit-queue.appspot.com/results/17066817</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858188</commentid>
    <comment_count>12</comment_count>
      <attachid>193800</attachid>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-19 05:25:30 -0700</bug_when>
    <thetext>Created attachment 193800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858191</commentid>
    <comment_count>13</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-19 05:30:21 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Update the patch for handling failed blob loading.
&gt; When the blob data can&apos;t be loaded correctly (e.g. the File or Blob resource could not be found at the time the read was processed), skip the blob, and continue to send the next.

When the blob data can&apos;t be loaded successfully, user agent must close the channel, like what WebSocket is doing.
And add the sub test for failed blob loading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858195</commentid>
    <comment_count>14</comment_count>
    <who name="Tommy Widenflycht">tommyw</who>
    <bug_when>2013-03-19 05:43:12 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #9)
&gt; &gt; Update the patch for handling failed blob loading.
&gt; &gt; When the blob data can&apos;t be loaded correctly (e.g. the File or Blob resource could not be found at the time the read was processed), skip the blob, and continue to send the next.
&gt; 
&gt; When the blob data can&apos;t be loaded successfully, user agent must close the channel, like what WebSocket is doing.
&gt; And add the sub test for failed blob loading.

Actually it isn&apos;t specified in the WebRTC spec what should happen if a blob fails to load but after discussing it with hta we agree that this is probably the best thing to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858201</commentid>
    <comment_count>15</comment_count>
    <who name="Harald Alvestrand">hta</who>
    <bug_when>2013-03-19 05:56:52 -0700</bug_when>
    <thetext>I think this (closing) is the right way - but can you point me at the place in the WebSocket API spec that says what to do when the data can&apos;t be loaded correctly? I couldn&apos;t find it on a quick read - the send data methods all say &quot;fail with prejudice if the data can&apos;t be sent&quot; - is that the one you&apos;re thinking of?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858203</commentid>
    <comment_count>16</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-19 06:02:46 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think this (closing) is the right way - but can you point me at the place in the WebSocket API spec that says what to do when the data can&apos;t be loaded correctly? I couldn&apos;t find it on a quick read - the send data methods all say &quot;fail with prejudice if the data can&apos;t be sent&quot; - is that the one you&apos;re thinking of?

Yes, and see the discussion https://bugs.webkit.org/show_bug.cgi?id=112534#c5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>859892</commentid>
    <comment_count>17</comment_count>
      <attachid>193800</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-20 17:43:38 -0700</bug_when>
    <thetext>Comment on attachment 193800
Patch

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

&gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:178
&gt; +    m_outgoingBlobQueue.append(Blob::create(data-&gt;url(), data-&gt;type(), data-&gt;size()));

Why do we need to create a new blob here?

&gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:229
&gt; +        OwnPtr&lt;Vector&lt;char&gt; &gt; binaryData = adoptPtr(new Vector&lt;char&gt;(dataLength));
&gt; +        memcpy(binaryData-&gt;data(), data, dataLength);
&gt; +        RefPtr&lt;RawData&gt; rawData = RawData::create();
&gt; +        binaryData-&gt;swap(*rawData-&gt;mutableData());
&gt; +        OwnPtr&lt;BlobData&gt; blobData = BlobData::create();
&gt; +        blobData-&gt;appendData(rawData.release(), 0, BlobDataItem::toEndOfFile);
&gt; +        RefPtr&lt;Blob&gt; blob = Blob::create(blobData.release(), dataLength);

This all seems really low-level for this file.  Does Blob not know how to create itself from a sequence of bytes?

The benefit of using a blob is that you don&apos;t need to bring all the data into memory.  If you&apos;re going to bring all the data into memory anyway, you might as well use an array buffer.  To have a high-quality blob implementation, we&apos;d need to pass an opaque handle to the data from its source all the way here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860287</commentid>
    <comment_count>18</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-21 06:45:56 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 193800 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193800&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:178
&gt; &gt; +    m_outgoingBlobQueue.append(Blob::create(data-&gt;url(), data-&gt;type(), data-&gt;size()));
&gt; 
&gt; Why do we need to create a new blob here?
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:229
&gt; &gt; +        OwnPtr&lt;Vector&lt;char&gt; &gt; binaryData = adoptPtr(new Vector&lt;char&gt;(dataLength));
&gt; &gt; +        memcpy(binaryData-&gt;data(), data, dataLength);
&gt; &gt; +        RefPtr&lt;RawData&gt; rawData = RawData::create();
&gt; &gt; +        binaryData-&gt;swap(*rawData-&gt;mutableData());
&gt; &gt; +        OwnPtr&lt;BlobData&gt; blobData = BlobData::create();
&gt; &gt; +        blobData-&gt;appendData(rawData.release(), 0, BlobDataItem::toEndOfFile);
&gt; &gt; +        RefPtr&lt;Blob&gt; blob = Blob::create(blobData.release(), dataLength);
&gt; 
&gt; This all seems really low-level for this file.  Does Blob not know how to create itself from a sequence of bytes?

Blob has no direct method to do that, it can be created through BlobData.

&gt; 
&gt; The benefit of using a blob is that you don&apos;t need to bring all the data into memory.  If you&apos;re going to bring all the data into memory anyway, you might as well use an array buffer.  To have a high-quality blob implementation, we&apos;d need to pass an opaque handle to the data from its source all the way here.

The data has been in memory already, I encapsulated the raw data into a blob object, meet the requirement of RTCDataChannel API. And WebSocket is doing the same thing.
Please See: http://trac.webkit.org/browser/trunk/Source/WebCore/Modules/websockets/WebSocket.cpp#L531</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860643</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-03-21 13:49:19 -0700</bug_when>
    <thetext>&gt; Blob has no direct method to do that, it can be created through BlobData.

Yes, we would need to change that.

&gt; The data has been in memory already, I encapsulated the raw data into a blob object, meet the requirement of RTCDataChannel API.

I understand.  I&apos;m saying that&apos;s a poor implementation.

&gt; And WebSocket is doing the same thing.

WebSockets has a different architecture.  In WebSockets, we need to bring all the data into memory because the protocol handling is done in WebCore.  For WebRTC, the protocol handling is done outside of WebCore.  That means the handle to the data should be created outside of WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>860962</commentid>
    <comment_count>20</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-21 18:19:07 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; Blob has no direct method to do that, it can be created through BlobData.
&gt; 
&gt; Yes, we would need to change that.

I agree with you, we can move the implementation to Blob.cpp, avoid code copies in WebSocket and RTCDataChannel.

&gt; 
&gt; &gt; The data has been in memory already, I encapsulated the raw data into a blob object, meet the requirement of RTCDataChannel API.
&gt; 
&gt; I understand.  I&apos;m saying that&apos;s a poor implementation.
&gt; 
&gt; &gt; And WebSocket is doing the same thing.
&gt; 
&gt; WebSockets has a different architecture.  In WebSockets, we need to bring all the data into memory because the protocol handling is done in WebCore.  For WebRTC, the protocol handling is done outside of WebCore.  That means the handle to the data should be created outside of WebCore.

Do you mean we save the raw data into a file and return the file object to Web Developers when onmessage event handle was triggered?
If that is true, the data will be copied from memory to disk at first, and then copied from disk to memory when Web developers read the blob(in fact File object).
It will have two extra functions, reading and writing file, I think there will be a lower performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862480</commentid>
    <comment_count>21</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-24 19:58:02 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 193800 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=193800&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:178
&gt; &gt; +    m_outgoingBlobQueue.append(Blob::create(data-&gt;url(), data-&gt;type(), data-&gt;size()));
&gt; 
&gt; Why do we need to create a new blob here?

Because blob will be handled asynchronously, we need create a new Blob object.
The original blob may be destructed because of gc when the loading resource function is invoked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>862490</commentid>
    <comment_count>22</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-03-24 20:15:33 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; WebSockets has a different architecture.  In WebSockets, we need to bring all the data into memory because the protocol handling is done in WebCore.  For WebRTC, the protocol handling is done outside of WebCore.  That means the handle to the data should be created outside of WebCore.

I don&apos;t think so, there are two reasons as followed:
1. the binary data will be interpreted to be arraybuffer or blob, which is determined by m_binaryType, and m_binaryType variable is only accessed in WebCore.
2. If we move this code away from WebCore, all other ports will implement the same codes like chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868368</commentid>
    <comment_count>23</comment_count>
    <who name="Li Yin">li.yin</who>
    <bug_when>2013-04-02 17:35:35 -0700</bug_when>
    <thetext>Hi abarth,
Do you think my clarification is reasonable? Could you please have a look again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1972992</commentid>
    <comment_count>24</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2023-08-23 07:59:23 -0700</bug_when>
    <thetext>Closing as this is no longer relevant.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193229</attachid>
            <date>2013-03-14 21:17:01 -0700</date>
            <delta_ts>2013-03-15 03:40:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112314-20130315121257.patch</filename>
            <type>text/plain</type>
            <size>17893</size>
            <attacher name="Li Yin">li.yin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjIzN2NmOGVmMWVkOWM3
MTRkMDYzMTg2NTM0OTZmODVjNzliZjVjZi4uMGRhNDhlMGU5YzhlZjIyYmNmOTUxODBjZGE5NjEx
OGYxZjlmODEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEzLTAzLTE0ICBMaSBZ
aW4gIDxsaS55aW5AaW50ZWwuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IG9mIHNlbmRpbmcg
YmxvYiBkYXRhIGZvciBSVENEYXRhQ2hhbm5lbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjMxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNwZWM6IGh0dHA6Ly9kZXYudzMub3JnLzIwMTEvd2VicnRj
L2VkaXRvci93ZWJydGMuaHRtbCN3aWRsLVJUQ0RhdGFDaGFubmVsLXNlbmQtdm9pZC1CbG9iLWRh
dGEKKyAgICAgICAgUmVmZXIgdGhlIGNvZGUgb2YgV2ViU29ja2V0Q2hhbm5lbC5jcHAsIHNpbmNl
IFdlYlNvY2tldCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBmZWF0dXJlLAorICAgICAgICBhbmQgdGhl
aXIgZnVuY3Rpb25zIGxvb2sgdmVyeSBzaW1pbGFyIHRvIHNvbWUgZXh0ZW50LgorCisgICAgICAg
IFRlc3Q6IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtc2Vu
ZGJsb2IuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5l
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5lbDo6UlRDRGF0YUNoYW5uZWwp
OgorICAgICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OnNldEJpbmFyeVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
UlRDRGF0YUNoYW5uZWw6OmRpZFJlY2VpdmVSYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OmRpZFN0YXJ0TG9hZGluZyk6IENhbGxi
YWNrIG9mIEZpbGVSZWFkZXJMb2FkZXIKKyAgICAgICAgKFdlYkNvcmU6OlJUQ0RhdGFDaGFubmVs
OjpkaWRSZWNlaXZlRGF0YSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5l
bDo6ZGlkRmluaXNoTG9hZGluZyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hh
bm5lbDo6ZGlkRmFpbCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5lbDo6
cHJvY2Vzc091dGdvaW5nQmxvYlF1ZXVlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0RhdGFDaGFubmVsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJUQ0RhdGFD
aGFubmVsKToKKwogMjAxMy0wMy0xMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLiBTb3J0IHRoZSBYY29kZSBwcm9qZWN0IGZpbGUuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
Y3BwCmluZGV4IGYyMDE4ODNjYjYwY2Q2MWJkMmI0NjhmNWYwMzgyZThlMGM3NmFkMWQuLjcyM2Vm
ZjY3ZTAxOTE0NGNkZDc1ZjVlMDYwMThmNWQ5MDViYzE2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZpbGVSZWFkZXJMb2FkZXIuaCIKICNpbmNs
dWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIK
ICNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCIKQEAgLTYxLDggKzYyLDExIEBA
IFJUQ0RhdGFDaGFubmVsOjpSVENEYXRhQ2hhbm5lbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzT3duUHRyPFJUQ0RhCiAgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKICAgICAs
IG1fc3RvcHBlZChmYWxzZSkKICAgICAsIG1fcmVhZHlTdGF0ZShSZWFkeVN0YXRlQ29ubmVjdGlu
ZykKLSAgICAsIG1fYmluYXJ5VHlwZShCaW5hcnlUeXBlQXJyYXlCdWZmZXIpCisgICAgLCBtX2Jp
bmFyeVR5cGUoQmluYXJ5VHlwZUJsb2IpCiAgICAgLCBtX3NjaGVkdWxlZEV2ZW50VGltZXIodGhp
cywgJlJUQ0RhdGFDaGFubmVsOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQpCisjaWYgRU5BQkxF
KEJMT0IpCisgICAgLCBtX2Jsb2JMb2FkZXJTdGF0dXMoQmxvYkxvYWRlck5vdFN0YXJ0ZWQpCisj
ZW5kaWYKIHsKICAgICBtX2hhbmRsZXItPnNldENsaWVudCh0aGlzKTsKIH0KQEAgLTExOCw3ICsx
MjIsNyBAQCBTdHJpbmcgUlRDRGF0YUNoYW5uZWw6OmJpbmFyeVR5cGUoKSBjb25zdAogdm9pZCBS
VENEYXRhQ2hhbm5lbDo6c2V0QmluYXJ5VHlwZShjb25zdCBTdHJpbmcmIGJpbmFyeVR5cGUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChiaW5hcnlUeXBlID09ICJibG9iIikKLSAgICAg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgbV9iaW5hcnlUeXBlID0gQmluYXJ5
VHlwZUJsb2I7CiAgICAgZWxzZSBpZiAoYmluYXJ5VHlwZSA9PSAiYXJyYXlidWZmZXIiKQogICAg
ICAgICBtX2JpbmFyeVR5cGUgPSBCaW5hcnlUeXBlQXJyYXlCdWZmZXI7CiAgICAgZWxzZQpAQCAt
MTY2LDggKzE3MCw4IEBAIHZvaWQgUlRDRGF0YUNoYW5uZWw6OnNlbmQoUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIFJUQ0RhdGFDaGFu
bmVsOjpzZW5kKFBhc3NSZWZQdHI8QmxvYj4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAg
bV9vdXRnb2luZ0Jsb2JRdWV1ZS5hcHBlbmQoQmxvYjo6Y3JlYXRlKGRhdGEtPnVybCgpLCBkYXRh
LT50eXBlKCksIGRhdGEtPnNpemUoKSkpOworICAgIHByb2Nlc3NPdXRnb2luZ0Jsb2JRdWV1ZSgp
OwogfQogCiB2b2lkIFJUQ0RhdGFDaGFubmVsOjpjbG9zZSgpCkBAIC0yMTEsNyArMjE1LDE0IEBA
IHZvaWQgUlRDRGF0YUNoYW5uZWw6OmRpZFJlY2VpdmVSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBkYXRhTGVuZ3RoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9iaW5hcnlU
eXBlID09IEJpbmFyeVR5cGVCbG9iKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisg
ICAgICAgIE93blB0cjxWZWN0b3I8Y2hhcj4gPiBiaW5hcnlEYXRhID0gYWRvcHRQdHIobmV3IFZl
Y3RvcjxjaGFyPihkYXRhTGVuZ3RoKSk7CisgICAgICAgIG1lbWNweShiaW5hcnlEYXRhLT5kYXRh
KCksIGRhdGEsIGRhdGFMZW5ndGgpOworICAgICAgICBSZWZQdHI8UmF3RGF0YT4gcmF3RGF0YSA9
IFJhd0RhdGE6OmNyZWF0ZSgpOworICAgICAgICBiaW5hcnlEYXRhLT5zd2FwKCpyYXdEYXRhLT5t
dXRhYmxlRGF0YSgpKTsKKyAgICAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JE
YXRhOjpjcmVhdGUoKTsKKyAgICAgICAgYmxvYkRhdGEtPmFwcGVuZERhdGEocmF3RGF0YS5yZWxl
YXNlKCksIDAsIEJsb2JEYXRhSXRlbTo6dG9FbmRPZkZpbGUpOworICAgICAgICBSZWZQdHI8Qmxv
Yj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShibG9iRGF0YS5yZWxlYXNlKCksIGRhdGFMZW5ndGgpOwor
ICAgICAgICBzY2hlZHVsZURpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoYmxvYi5y
ZWxlYXNlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobV9iaW5hcnlUeXBl
ID09IEJpbmFyeVR5cGVBcnJheUJ1ZmZlcikgewpAQCAtMjMwLDYgKzI0MSw2OSBAQCB2b2lkIFJU
Q0RhdGFDaGFubmVsOjpkaWREZXRlY3RFcnJvcigpCiAgICAgc2NoZWR1bGVEaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwog
fQogCisjaWYgRU5BQkxFKEJMT0IpCit2b2lkIFJUQ0RhdGFDaGFubmVsOjpkaWRTdGFydExvYWRp
bmcoKQoreworICAgIEFTU0VSVChtX2Jsb2JMb2FkZXIpOworICAgIEFTU0VSVChtX2Jsb2JMb2Fk
ZXJTdGF0dXMgPT0gQmxvYkxvYWRlclN0YXJ0ZWQpOworfQorCit2b2lkIFJUQ0RhdGFDaGFubmVs
OjpkaWRSZWNlaXZlRGF0YSgpCit7CisgICAgQVNTRVJUKG1fYmxvYkxvYWRlcik7CisgICAgQVNT
RVJUKG1fYmxvYkxvYWRlclN0YXR1cyA9PSBCbG9iTG9hZGVyU3RhcnRlZCk7Cit9CisKK3ZvaWQg
UlRDRGF0YUNoYW5uZWw6OmRpZEZpbmlzaExvYWRpbmcoKQoreworICAgIEFTU0VSVChtX2Jsb2JM
b2FkZXIpOworICAgIEFTU0VSVChtX2Jsb2JMb2FkZXJTdGF0dXMgPT0gQmxvYkxvYWRlclN0YXJ0
ZWQpOworICAgIG1fYmxvYkxvYWRlclN0YXR1cyA9IEJsb2JMb2FkZXJGaW5pc2hlZDsKKyAgICBw
cm9jZXNzT3V0Z29pbmdCbG9iUXVldWUoKTsKKyAgICBkZXJlZigpOworfQorCit2b2lkIFJUQ0Rh
dGFDaGFubmVsOjpkaWRGYWlsKGludCBlcnJvckNvZGUpCit7CisgICAgQVNTRVJUKG1fYmxvYkxv
YWRlcik7CisgICAgQVNTRVJUKG1fYmxvYkxvYWRlclN0YXR1cyA9PSBCbG9iTG9hZGVyU3RhcnRl
ZCk7CisgICAgbV9ibG9iTG9hZGVyLmNsZWFyKCk7CisgICAgbV9ibG9iTG9hZGVyU3RhdHVzID0g
QmxvYkxvYWRlck5vdFN0YXJ0ZWQ7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBSVENEYXRhQ2hh
bm5lbDo6cHJvY2Vzc091dGdvaW5nQmxvYlF1ZXVlKCkKK3sKKyAgICB3aGlsZSAoIW1fb3V0Z29p
bmdCbG9iUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxCbG9iPiBibG9iID0gbV9v
dXRnb2luZ0Jsb2JRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgc3dpdGNoIChtX2Jsb2JMb2Fk
ZXJTdGF0dXMpIHsKKyAgICAgICAgY2FzZSBCbG9iTG9hZGVyTm90U3RhcnRlZDoKKyAgICAgICAg
ICAgIHJlZigpOyAvLyBXaWxsIGJlIGRlcmVmZWQgYWZ0ZXIgZGlkRmluaXNoTG9hZGluZygpIG9y
IGRpZEZhaWwoKS4KKyAgICAgICAgICAgIEFTU0VSVCghbV9ibG9iTG9hZGVyKTsKKyAgICAgICAg
ICAgIG1fYmxvYkxvYWRlciA9IGFkb3B0UHRyKG5ldyBGaWxlUmVhZGVyTG9hZGVyKEZpbGVSZWFk
ZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyLCB0aGlzKSk7CisgICAgICAgICAgICBtX2Jsb2JM
b2FkZXJTdGF0dXMgPSBCbG9iTG9hZGVyU3RhcnRlZDsKKyAgICAgICAgICAgIG1fYmxvYkxvYWRl
ci0+c3RhcnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBibG9iLmdldCgpKTsKKyAgICAgICAg
ICAgIG1fb3V0Z29pbmdCbG9iUXVldWUucHJlcGVuZChibG9iLnJlbGVhc2UoKSk7CisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBCbG9iTG9hZGVyU3RhcnRlZDoKKyAgICAgICAg
Y2FzZSBCbG9iTG9hZGVyRmFpbGVkOgorICAgICAgICAgICAgbV9vdXRnb2luZ0Jsb2JRdWV1ZS5w
cmVwZW5kKGJsb2IucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
YXNlIEJsb2JMb2FkZXJGaW5pc2hlZDogeworICAgICAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiByZXN1bHQgPSBtX2Jsb2JMb2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCk7CisgICAgICAgICAg
ICBtX2Jsb2JMb2FkZXIuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fYmxvYkxvYWRlclN0YXR1cyA9
IEJsb2JMb2FkZXJOb3RTdGFydGVkOworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXaWxsIGRldGVybWluZSBpZiByYWlzaW5nIGV4Y2VwdGlvbiBz
aG91bGQgYmUgbmVjZXNzYXJ5LgorICAgICAgICAgICAgc2VuZChyZXN1bHQucmVsZWFzZSgpLCBl
Yyk7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKyNlbmRpZgorCiBjb25zdCBBdG9t
aWNTdHJpbmcmIFJUQ0RhdGFDaGFubmVsOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gZXZlbnROYW1lcygpLmludGVyZmFjZUZvclJUQ0RhdGFDaGFubmVsOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5oCmluZGV4
IGY4NTVjOTBlNDE5NmU1MmIxOTBhNTk4MDg1M2IzZjEwNmEzMTBhZGEuLjcwNWZhZWM4ZWI1YjIz
YzRjZWZhZjA2MjNlMjU3MzY0ZGQxMjc2YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmgKQEAgLTI4LDE3ICsyOCwyNCBAQAog
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2lu
Y2x1ZGUgIkZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJSVENEYXRhQ2hhbm5l
bEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQmxvYjsKK2NsYXNzIEZpbGVSZWFkZXJMb2FkZXI7CiBjbGFzcyBSVENEYXRhQ2hh
bm5lbEhhbmRsZXI7CiBjbGFzcyBSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXI7CiAKLWNsYXNzIFJU
Q0RhdGFDaGFubmVsIDogcHVibGljIFJlZkNvdW50ZWQ8UlRDRGF0YUNoYW5uZWw+LCBwdWJsaWMg
RXZlbnRUYXJnZXQsIHB1YmxpYyBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQgeworY2xhc3Mg
UlRDRGF0YUNoYW5uZWwgOiBwdWJsaWMgUmVmQ291bnRlZDxSVENEYXRhQ2hhbm5lbD4sIHB1Ymxp
YyBFdmVudFRhcmdldCwgcHVibGljIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudAorI2lmIEVO
QUJMRShCTE9CKQorICAgICwgcHVibGljIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQKKyNlbmRpZgor
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJUQ0RhdGFDaGFubmVsPiBjcmVhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciosIGNvbnN0
IFN0cmluZyYgbGFiZWwsIGJvb2wgcmVsaWFibGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSVENEYXRhQ2hhbm5lbD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzT3duUHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4pOwpAQCAtNzAsNiArNzcsMTQg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1l
KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAKKyNpZiBFTkFCTEUoQkxP
QikKKyAgICAvLyBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkU3RhcnRMb2FkaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRh
KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChpbnQgZXJyb3JDb2RlKTsKKyNlbmRpZgorCiAgICAgdXNpbmcgUmVmQ291bnRl
ZDxSVENEYXRhQ2hhbm5lbD46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPFJUQ0RhdGFDaGFu
bmVsPjo6ZGVyZWY7CiAKQEAgLTc5LDYgKzk0LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hl
ZHVsZURpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAgIHZvaWQgc2NoZWR1bGVk
RXZlbnRUaW1lckZpcmVkKFRpbWVyPFJUQ0RhdGFDaGFubmVsPiopOwogCisjaWYgRU5BQkxFKEJM
T0IpCisgICAgdm9pZCBwcm9jZXNzT3V0Z29pbmdCbG9iUXVldWUoKTsKKyNlbmRpZgorCiAgICAg
Ly8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXRE
YXRhKCk7CiAgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0
YSgpOwpAQCAtMTAyLDEwICsxMjEsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgQmluYXJ5VHlwZUJs
b2IsCiAgICAgICAgIEJpbmFyeVR5cGVBcnJheUJ1ZmZlcgogICAgIH07CisKKyNpZiBFTkFCTEUo
QkxPQikKKyAgICBlbnVtIEJsb2JMb2FkZXJTdGF0dXMgeworICAgICAgICBCbG9iTG9hZGVyTm90
U3RhcnRlZCwKKyAgICAgICAgQmxvYkxvYWRlclN0YXJ0ZWQsCisgICAgICAgIEJsb2JMb2FkZXJG
aW5pc2hlZCwKKyAgICAgICAgQmxvYkxvYWRlckZhaWxlZAorICAgIH07CisjZW5kaWYKKwogICAg
IEJpbmFyeVR5cGUgbV9iaW5hcnlUeXBlOwogCiAgICAgVGltZXI8UlRDRGF0YUNoYW5uZWw+IG1f
c2NoZWR1bGVkRXZlbnRUaW1lcjsKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IG1fc2NoZWR1
bGVkRXZlbnRzOworCisjaWYgRU5BQkxFKEJMT0IpCisgICAgLy8gRklYTUU6IExvYWQgdHdvIG9y
IG1vcmUgQmxvYnMgc2ltdWx0YW5lb3VzbHkgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICBP
d25QdHI8RmlsZVJlYWRlckxvYWRlcj4gbV9ibG9iTG9hZGVyOworICAgIEJsb2JMb2FkZXJTdGF0
dXMgbV9ibG9iTG9hZGVyU3RhdHVzOworICAgIERlcXVlPFJlZlB0cjxCbG9iPiA+IG1fb3V0Z29p
bmdCbG9iUXVldWU7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA1YzEwNWQxMDA1MjI4YTdkOGExMjhkY2ExOGFlZWUxODhjMDdhYzUzLi5lMTY0OGQxNzg4ZmZk
OTdiYTIzNzgwMmFkOWNmYzcxYjkwNzU1ODJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTMt
MDMtMTQgIExpIFlpbiAgPGxpLnlpbkBpbnRlbC5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQg
b2Ygc2VuZGluZyBibG9iIGRhdGEgZm9yIFJUQ0RhdGFDaGFubmVsLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyMzE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1kYXRhY2hhbm5lbC1zZW5kYmxvYi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLmh0bWw6IEFkZCBkZWZhdWx0IHZh
bHVlIGNoZWNraW5nIG9mIGJpbmFyeVR5cGUuCisKIDIwMTMtMDMtMTMgIERlYW4gSmFja3NvbiAg
PGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHTF0gYXJyYXktYm91bmRzLWNsYW1waW5n
IHNob3VsZCB1c2UgbGVzcyBkcmFtYXRpYyBudW1iZXJzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0
YWNoYW5uZWwtZXhwZWN0ZWQudHh0CmluZGV4IDY3YmU4ODE3ZDA5MzVlMTczM2YxODIxMDlkNDg0
NTM5N2I5Yjc2ZGEuLmU0MWE1NDY0YjJmNGZkNjg3MzI1MmE2Yzk1NDM1NjU4MWQ3NTc0ZTggMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
ZGF0YWNoYW5uZWwtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtZXhwZWN0ZWQudHh0CkBAIC01LDYgKzUs
NyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURQogCiBQQVNTIGRjID0gcGMuY3JlYXRlRGF0YUNo
YW5uZWwoImxhYmVsMSIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1MgZGMucmVsaWFi
bGUgaXMgdHJ1ZQorUEFTUyBkYy5iaW5hcnlUeXBlIGlzICdibG9iJwogUEFTUyBkYyA9IHBjLmNy
ZWF0ZURhdGFDaGFubmVsKCJsYWJlbDIiLCB7fSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgog
UEFTUyBkYy5yZWxpYWJsZSBpcyB0cnVlCiBQQVNTIGRjID0gcGMuY3JlYXRlRGF0YUNoYW5uZWwo
ImxhYmVsMyIsIHtyZWxpYWJsZTp0cnVlfSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1k
YXRhY2hhbm5lbC1zZW5kYmxvYi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40NzQ1Y2E4NGYyNDE0ODRhZTE0OWUyZGEzN2QyNzRhZWVjNDBmYjU0Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1kYXRhY2hhbm5lbC1zZW5kYmxvYi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzMSBA
QAorVGVzdHMgUlRDRGF0YUNoYW5uZWwgc2VuZGluZyBibG9iIGRhdGEuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIHBjIGlzIGNvbm5lY3RlZAorUEFTUyBkYyA9IHBjLmNy
ZWF0ZURhdGFDaGFubmVsKCJsYWJlbCIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mg
ZGMucmVhZHlTdGF0ZSBpcyAnY29ubmVjdGluZycKK1BBU1MgZGNfb25vcGVuIHdhcyBjYWxsZWQK
K1BBU1MgZGMucmVhZHlTdGF0ZSBpcyAnb3BlbicKK1BBU1MgZGMubGFiZWwgaXMgJ2xhYmVsJwor
UEFTUyBkYy5zZW5kKGJsb2IpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgZGNfb25t
ZXNzYWdlX2Jsb2Igd2FzIGNhbGxlZAorUEFTUyBkYXRhIGluc3RhbmNlb2Ygd2luZG93LkJsb2Ig
aXMgdHJ1ZQorUEFTUyBCbG9iIGRhdGEgd2FzIHJldmVpdmVkIGNvcnJlY3RseS4KK0dvdCBGaWxl
U3lzdGVtIG9iamVjdC4KK0ZpbGUgY3JlYXRlZC4KK1BBU1MgZmlsZUVudHJ5LmlzRmlsZSBpcyB0
cnVlCitXcm90ZSB0byBmaWxlLgorR290IEZpbGUgb2JqZWN0LgorUEFTUyBkYy5zZW5kKGJsb2Ip
OyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgZGNfb25tZXNzYWdlX2ZpbGUgd2FzIGNh
bGxlZAorUEFTUyBkYXRhIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyBGaWxl
IGRhdGEgd2FzIHJldmVpdmVkIGNvcnJlY3RseS4KK0RlbGV0aW5nIHRoZSBmaWxlLgorUEFTUyBk
Y19vbmNsb3NlIHdhcyBjYWxsZWQKK1BBU1MgZGMucmVhZHlTdGF0ZSBpcyAnY2xvc2VkJworUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNo
YW5uZWwtc2VuZGJsb2IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtc2VuZGJsb2IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzgwNzkx
YjYzYzg1OGQwNjBhOTAxMTVlZmE4ZDhiNzI1NTI1MTcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1z
ZW5kYmxvYi5odG1sCkBAIC0wLDAgKzEsMTc4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgUlRDRGF0YUNoYW5uZWwgc2VuZGluZyBibG9iIGRh
dGEuIik7CisKK3ZhciBwYyA9IG51bGw7Cit2YXIgZGMgPSBudWxsOwordmFyIGRhdGE7Cit2YXIg
YmxvYjsKKwordmFyIGZpbGVTeXN0ZW1TaXplID0gMTAyNDsKK3ZhciBmaWxlTmFtZSA9ICJSVENE
YXRhQ2hhbm5lbC1zZW5kLWZpbGUtYmxvYi50eHQiOwordmFyIG1lc3NhZ2VUb1dyaXRlID0gIkhl
bGxvLCB3b3JsZCEiOwordmFyIGZpbGVFbnRyeTsKKworZnVuY3Rpb24gY3JlYXRlQmxvYkNvbnRh
aW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkgeworICAgIHZhciBibG9iRGF0YSA9IG5ldyBVaW50OEFy
cmF5KDI1Nik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkKKyAgICAgICAgYmxv
YkRhdGFbaV0gPSBpOworICAgIHJldHVybiBuZXcgQmxvYihbYmxvYkRhdGFdKTsKK30KKworZnVu
Y3Rpb24gY2hlY2tSZWNlaXZlZEJsb2JEYXRhKGFycmF5QnVmZmVyKSB7CisgICAgaWYgKGFycmF5
QnVmZmVyLmJ5dGVMZW5ndGggIT0gMjU2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2
YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIDAsIGFycmF5QnVmZmVyLmJ5
dGVMZW5ndGgpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkgeworICAgICAg
ICBpZiAocmVzdWx0W2ldICE9IGkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBjaGVja1JlY2VpdmVkRmlsZUJsb2Ioc3Ry
aW5nTWVzc2FnZSkgeworICAgIGlmIChzdHJpbmdNZXNzYWdlID09PSBtZXNzYWdlVG9Xcml0ZSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiB0
ZXN0U2VuZEZpbGVCbG9iKCkgeworICAgIGlmICghd2luZG93LndlYmtpdFJlcXVlc3RGaWxlU3lz
dGVtKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIndpbmRvdy53ZWJraXRSZXF1ZXN0RmlsZVN5c3Rl
bSBpcyBub3QgYXZhaWxhYmxlLiIpOworICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgd2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0oVEVNUE9SQVJZLCBmaWxlU3lz
dGVtU2l6ZSwgZGlkR2V0RmlsZVN5c3RlbSwgZGlkRmFpbCk7Cit9CisKK2Z1bmN0aW9uIGRpZEdl
dEZpbGVTeXN0ZW0oZmlsZVN5c3RlbSkgeworICAgIGRlYnVnKCJHb3QgRmlsZVN5c3RlbSBvYmpl
Y3QuIik7CisgICAgZmlsZVN5c3RlbS5yb290LmdldEZpbGUoZmlsZU5hbWUsIHtjcmVhdGU6IHRy
dWV9LCBkaWRDcmVhdGVGaWxlLCBkaWRGYWlsKTsKK30KKworZnVuY3Rpb24gZGlkQ3JlYXRlRmls
ZShlbnRyeSkgeworICAgIGRlYnVnKCJGaWxlIGNyZWF0ZWQuIik7CisgICAgZmlsZUVudHJ5ID0g
ZW50cnk7CisgICAgc2hvdWxkQmVUcnVlKCJmaWxlRW50cnkuaXNGaWxlIik7CisgICAgZmlsZUVu
dHJ5LmNyZWF0ZVdyaXRlcihkaWRHZXRGaWxlV3JpdGVyLCBkaWRGYWlsKTsKK30KKworZnVuY3Rp
b24gZGlkR2V0RmlsZVdyaXRlcih3cml0ZXIpIHsKKyAgICB3cml0ZXIudHJ1bmNhdGUoMCk7Cisg
ICAgd3JpdGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRmls
ZVdyaXRlciBvcGVyYXRpb24gZmFpbGVkLiIpOworICAgICAgICBkZWxldGVGaWxlQW5kRW5kVGVz
dCgpOworICAgIH07CisgICAgd3JpdGVyLm9ud3JpdGUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
d3JpdGVyLndyaXRlKG5ldyBCbG9iKFttZXNzYWdlVG9Xcml0ZV0pKTsKKyAgICAgICAgd3JpdGVy
Lm9ud3JpdGUgPSBkaWRXcml0ZUZpbGU7CisgICAgfTsKK30KKworZnVuY3Rpb24gZGlkV3JpdGVG
aWxlKCkgeworICAgIGRlYnVnKCJXcm90ZSB0byBmaWxlLiIpOworICAgIGZpbGVFbnRyeS5maWxl
KGRpZEdldEZpbGUsIGRpZEZhaWwpOworfQorCitmdW5jdGlvbiBkaWRHZXRGaWxlKGZpbGUpIHsK
KyAgICBkZWJ1ZygiR290IEZpbGUgb2JqZWN0LiIpOworICAgIGJsb2IgPSBmaWxlOworICAgIGRj
Lm9ubWVzc2FnZSA9IGRjX29ubWVzc2FnZV9maWxlOworICAgIHNob3VsZE5vdFRocm93KCJkYy5z
ZW5kKGJsb2IpOyIpOworfQorCitmdW5jdGlvbiBkaWRGYWlsKGZpbGVFcnJvcikgeworICAgIHRl
c3RGYWlsZWQoIkZpbGVTeXN0ZW0gQVBJIG9wZXJhdGlvbiBmYWlsZWQ6IGVycm9yIGNvZGUgPSAi
ICsgZmlsZUVycm9yLmNvZGUpOworICAgIGRlbGV0ZUZpbGVBbmRFbmRUZXN0KCk7Cit9CisKK2Z1
bmN0aW9uIGRlbGV0ZUZpbGVBbmRFbmRUZXN0KCkgeworICAgIGlmIChmaWxlRW50cnkpIHsKKyAg
ICAgICAgZGVidWcoIkRlbGV0aW5nIHRoZSBmaWxlLiIpOworICAgICAgICBmaWxlRW50cnkucmVt
b3ZlKGVuZFRlc3QsIGVuZFRlc3QpOworICAgIH0gZWxzZQorICAgICAgICBlbmRUZXN0KCk7Cit9
CisKK2Z1bmN0aW9uIGRjX29ubWVzc2FnZV9maWxlKGUpIHsKKyAgICB0ZXN0UGFzc2VkKCJkY19v
bm1lc3NhZ2VfZmlsZSB3YXMgY2FsbGVkIik7CisgICAgZGF0YSA9IGUuZGF0YTsKKyAgICBzaG91
bGRCZVRydWUoImRhdGEgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworCisgICAgdmFyIHJlYWRl
ciA9IG5ldyBGaWxlUmVhZGVyKCk7CisgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgICAgIGlmIChjaGVja1JlY2VpdmVkRmlsZUJsb2IoZXZlbnQudGFyZ2V0LnJlc3Vs
dCkpCisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJGaWxlIGRhdGEgd2FzIHJldmVpdmVkIGNvcnJl
Y3RseS4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiRmlsZSBkYXRh
IHNob3VsZCBiZSByZWNlaXZlZCBjb3JyZWN0bHkiKTsKKworICAgICAgICBkZWxldGVGaWxlQW5k
RW5kVGVzdCgpOworICAgIH07CisgICAgcmVhZGVyLnJlYWRBc1RleHQoZGF0YSk7Cit9CisKK2Z1
bmN0aW9uIGRjX29ubWVzc2FnZV9ibG9iKGUpIHsKKyAgICB0ZXN0UGFzc2VkKCJkY19vbm1lc3Nh
Z2VfYmxvYiB3YXMgY2FsbGVkIik7CisgICAgZGF0YSA9IGUuZGF0YTsKKyAgICBzaG91bGRCZVRy
dWUoImRhdGEgaW5zdGFuY2VvZiB3aW5kb3cuQmxvYiIpOworICAgIAorICAgIHZhciByZWFkZXIg
PSBuZXcgRmlsZVJlYWRlcigpOworICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkg
eworICAgICAgICBpZiAoY2hlY2tSZWNlaXZlZEJsb2JEYXRhKGV2ZW50LnRhcmdldC5yZXN1bHQp
KSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJCbG9iIGRhdGEgd2FzIHJldmVpdmVkIGNvcnJl
Y3RseS4iKTsKKyAgICAgICAgICAgIHRlc3RTZW5kRmlsZUJsb2IoKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkJsb2IgZGF0YSBzaG91bGQgYmUgcmVjZWl2ZWQg
Y29ycmVjdGx5Iik7CisgICAgICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihkYXRhKTsKK30KKworZnVuY3Rpb24gZGNfb25j
bG9zZSgpIHsKKyAgICB0ZXN0UGFzc2VkKCJkY19vbmNsb3NlIHdhcyBjYWxsZWQiKTsKKyAgICBz
aG91bGRCZSgiZGMucmVhZHlTdGF0ZSIsICInY2xvc2VkJyIpOworCisgICAgZmluaXNoSlNUZXN0
KCk7Cit9CisKK2Z1bmN0aW9uIGRjX29ub3BlbigpIHsKKyAgICB0ZXN0UGFzc2VkKCJkY19vbm9w
ZW4gd2FzIGNhbGxlZCIpOworICAgIHNob3VsZEJlKCJkYy5yZWFkeVN0YXRlIiwgIidvcGVuJyIp
OworICAgIHNob3VsZEJlKCJkYy5sYWJlbCIsICInbGFiZWwnIik7CisKKyAgICBkYy5vbm1lc3Nh
Z2UgPSBkY19vbm1lc3NhZ2VfYmxvYjsKKyAgICBibG9iID0gY3JlYXRlQmxvYkNvbnRhaW5pbmdB
bGxEaXN0aW5jdEJ5dGVzKCk7CisgICAgc2hvdWxkTm90VGhyb3coImRjLnNlbmQoYmxvYik7Iik7
Cit9CisKK2Z1bmN0aW9uIHBjX29uaWNlY2hhbmdlKCkgeworICAgIGlmIChwYy5pY2VDb25uZWN0
aW9uU3RhdGUgPT09ICJjb21wbGV0ZWQiKSB7CisgICAgICAgIHRlc3RQYXNzZWQoInBjIGlzIGNv
bm5lY3RlZCIpOworICAgICAgICBzaG91bGROb3RUaHJvdygnZGMgPSBwYy5jcmVhdGVEYXRhQ2hh
bm5lbCgibGFiZWwiKTsnKTsKKyAgICAgICAgc2hvdWxkQmUoImRjLnJlYWR5U3RhdGUiLCAiJ2Nv
bm5lY3RpbmcnIik7CisgICAgICAgIGRjLm9ub3BlbiA9IGRjX29ub3BlbjsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIGVuZFRlc3QoKSB7CisgICAgZGMub25jbG9zZSA9IGRjX29uY2xvc2U7CisgICAg
ZGMuY2xvc2UoKTsKK30KKworcGMgPSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24obnVsbCwg
bnVsbCk7CitwYy5vbmljZWNoYW5nZSA9IHBjX29uaWNlY2hhbmdlOworCit3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7Cit3aW5kb3cuc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC5odG1sCmluZGV4
IDEyZWQ3NjYwMTE0YWIzYzFhMzY2YTVjN2E3YjcwNjIxZDQyOTYxYmQuLjY3YTdlNTcxYzAwZGNl
Zjc2NTc5YjQ5ZDI0YmFkMzkxMjA5Y2FiYzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLmh0
bWwKQEAgLTg0LDYgKzg0LDcgQEAgZnVuY3Rpb24gcGNfb25pY2VjaGFuZ2UoKSB7CiBwYyA9IG5l
dyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihudWxsLCBudWxsKTsKIHNob3VsZE5vdFRocm93KCdk
YyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJsYWJlbDEiKTsnKTsKIHNob3VsZEJlKCJkYy5yZWxp
YWJsZSIsICJ0cnVlIik7CitzaG91bGRCZSgiZGMuYmluYXJ5VHlwZSIsICInYmxvYiciKTsKIHNo
b3VsZE5vdFRocm93KCdkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJsYWJlbDIiLCB7fSk7Jyk7
CiBzaG91bGRCZSgiZGMucmVsaWFibGUiLCAidHJ1ZSIpOwogc2hvdWxkTm90VGhyb3coJ2RjID0g
cGMuY3JlYXRlRGF0YUNoYW5uZWwoImxhYmVsMyIsIHtyZWxpYWJsZTp0cnVlfSk7Jyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193273</attachid>
            <date>2013-03-15 03:40:07 -0700</date>
            <delta_ts>2013-03-18 06:40:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112314-20130315183603.patch</filename>
            <type>text/plain</type>
            <size>17927</size>
            <attacher name="Li Yin">li.yin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1NzgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjIzN2NmOGVmMWVkOWM3
MTRkMDYzMTg2NTM0OTZmODVjNzliZjVjZi4uMGRhNDhlMGU5YzhlZjIyYmNmOTUxODBjZGE5NjEx
OGYxZjlmODEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEzLTAzLTE0ICBMaSBZ
aW4gIDxsaS55aW5AaW50ZWwuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IG9mIHNlbmRpbmcg
YmxvYiBkYXRhIGZvciBSVENEYXRhQ2hhbm5lbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjMxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNwZWM6IGh0dHA6Ly9kZXYudzMub3JnLzIwMTEvd2VicnRj
L2VkaXRvci93ZWJydGMuaHRtbCN3aWRsLVJUQ0RhdGFDaGFubmVsLXNlbmQtdm9pZC1CbG9iLWRh
dGEKKyAgICAgICAgUmVmZXIgdGhlIGNvZGUgb2YgV2ViU29ja2V0Q2hhbm5lbC5jcHAsIHNpbmNl
IFdlYlNvY2tldCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBmZWF0dXJlLAorICAgICAgICBhbmQgdGhl
aXIgZnVuY3Rpb25zIGxvb2sgdmVyeSBzaW1pbGFyIHRvIHNvbWUgZXh0ZW50LgorCisgICAgICAg
IFRlc3Q6IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtc2Vu
ZGJsb2IuaHRtbAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5l
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5lbDo6UlRDRGF0YUNoYW5uZWwp
OgorICAgICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OnNldEJpbmFyeVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OnNlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
UlRDRGF0YUNoYW5uZWw6OmRpZFJlY2VpdmVSYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OmRpZFN0YXJ0TG9hZGluZyk6IENhbGxi
YWNrIG9mIEZpbGVSZWFkZXJMb2FkZXIKKyAgICAgICAgKFdlYkNvcmU6OlJUQ0RhdGFDaGFubmVs
OjpkaWRSZWNlaXZlRGF0YSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5l
bDo6ZGlkRmluaXNoTG9hZGluZyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hh
bm5lbDo6ZGlkRmFpbCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5lbDo6
cHJvY2Vzc091dGdvaW5nQmxvYlF1ZXVlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0RhdGFDaGFubmVsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFJUQ0RhdGFD
aGFubmVsKToKKwogMjAxMy0wMy0xMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLiBTb3J0IHRoZSBYY29kZSBwcm9qZWN0IGZpbGUuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
Y3BwCmluZGV4IGYyMDE4ODNjYjYwY2Q2MWJkMmI0NjhmNWYwMzgyZThlMGM3NmFkMWQuLmI1YzZl
MWFkOTgwYzA4MzkyMzA0MDdkZWU5M2EwNDJiNDE5ZGM0MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZpbGVSZWFkZXJMb2FkZXIuaCIKICNpbmNs
dWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIK
ICNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbkhhbmRsZXIuaCIKQEAgLTYxLDggKzYyLDExIEBA
IFJUQ0RhdGFDaGFubmVsOjpSVENEYXRhQ2hhbm5lbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzT3duUHRyPFJUQ0RhCiAgICAgLCBtX2hhbmRsZXIoaGFuZGxlcikKICAgICAs
IG1fc3RvcHBlZChmYWxzZSkKICAgICAsIG1fcmVhZHlTdGF0ZShSZWFkeVN0YXRlQ29ubmVjdGlu
ZykKLSAgICAsIG1fYmluYXJ5VHlwZShCaW5hcnlUeXBlQXJyYXlCdWZmZXIpCisgICAgLCBtX2Jp
bmFyeVR5cGUoQmluYXJ5VHlwZUJsb2IpCiAgICAgLCBtX3NjaGVkdWxlZEV2ZW50VGltZXIodGhp
cywgJlJUQ0RhdGFDaGFubmVsOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQpCisjaWYgRU5BQkxF
KEJMT0IpCisgICAgLCBtX2Jsb2JMb2FkZXJTdGF0dXMoQmxvYkxvYWRlck5vdFN0YXJ0ZWQpCisj
ZW5kaWYKIHsKICAgICBtX2hhbmRsZXItPnNldENsaWVudCh0aGlzKTsKIH0KQEAgLTExOCw3ICsx
MjIsNyBAQCBTdHJpbmcgUlRDRGF0YUNoYW5uZWw6OmJpbmFyeVR5cGUoKSBjb25zdAogdm9pZCBS
VENEYXRhQ2hhbm5lbDo6c2V0QmluYXJ5VHlwZShjb25zdCBTdHJpbmcmIGJpbmFyeVR5cGUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChiaW5hcnlUeXBlID09ICJibG9iIikKLSAgICAg
ICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgbV9iaW5hcnlUeXBlID0gQmluYXJ5
VHlwZUJsb2I7CiAgICAgZWxzZSBpZiAoYmluYXJ5VHlwZSA9PSAiYXJyYXlidWZmZXIiKQogICAg
ICAgICBtX2JpbmFyeVR5cGUgPSBCaW5hcnlUeXBlQXJyYXlCdWZmZXI7CiAgICAgZWxzZQpAQCAt
MTY2LDggKzE3MCwxMyBAQCB2b2lkIFJUQ0RhdGFDaGFubmVsOjpzZW5kKFBhc3NSZWZQdHI8QXJy
YXlCdWZmZXJWaWV3PiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKIAogdm9pZCBSVENEYXRhQ2hh
bm5lbDo6c2VuZChQYXNzUmVmUHRyPEJsb2I+IGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAg
IGlmIChtX3JlYWR5U3RhdGUgIT0gUmVhZHlTdGF0ZU9wZW4pIHsKKyAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fb3V0Z29pbmdC
bG9iUXVldWUuYXBwZW5kKEJsb2I6OmNyZWF0ZShkYXRhLT51cmwoKSwgZGF0YS0+dHlwZSgpLCBk
YXRhLT5zaXplKCkpKTsKKyAgICBwcm9jZXNzT3V0Z29pbmdCbG9iUXVldWUoKTsKIH0KIAogdm9p
ZCBSVENEYXRhQ2hhbm5lbDo6Y2xvc2UoKQpAQCAtMjExLDcgKzIyMCwxNCBAQCB2b2lkIFJUQ0Rh
dGFDaGFubmVsOjpkaWRSZWNlaXZlUmF3RGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgZGF0
YUxlbmd0aCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fYmluYXJ5VHlwZSA9PSBCaW5h
cnlUeXBlQmxvYikgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgICAgICBPd25Q
dHI8VmVjdG9yPGNoYXI+ID4gYmluYXJ5RGF0YSA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8Y2hhcj4o
ZGF0YUxlbmd0aCkpOworICAgICAgICBtZW1jcHkoYmluYXJ5RGF0YS0+ZGF0YSgpLCBkYXRhLCBk
YXRhTGVuZ3RoKTsKKyAgICAgICAgUmVmUHRyPFJhd0RhdGE+IHJhd0RhdGEgPSBSYXdEYXRhOjpj
cmVhdGUoKTsKKyAgICAgICAgYmluYXJ5RGF0YS0+c3dhcCgqcmF3RGF0YS0+bXV0YWJsZURhdGEo
KSk7CisgICAgICAgIE93blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEgPSBCbG9iRGF0YTo6Y3JlYXRl
KCk7CisgICAgICAgIGJsb2JEYXRhLT5hcHBlbmREYXRhKHJhd0RhdGEucmVsZWFzZSgpLCAwLCBC
bG9iRGF0YUl0ZW06OnRvRW5kT2ZGaWxlKTsKKyAgICAgICAgUmVmUHRyPEJsb2I+IGJsb2IgPSBC
bG9iOjpjcmVhdGUoYmxvYkRhdGEucmVsZWFzZSgpLCBkYXRhTGVuZ3RoKTsKKyAgICAgICAgc2No
ZWR1bGVEaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKGJsb2IucmVsZWFzZSgpKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1fYmluYXJ5VHlwZSA9PSBCaW5hcnlU
eXBlQXJyYXlCdWZmZXIpIHsKQEAgLTIzMCw2ICsyNDYsNjggQEAgdm9pZCBSVENEYXRhQ2hhbm5l
bDo6ZGlkRGV0ZWN0RXJyb3IoKQogICAgIHNjaGVkdWxlRGlzcGF0Y2hFdmVudChFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAorI2lmIEVO
QUJMRShCTE9CKQordm9pZCBSVENEYXRhQ2hhbm5lbDo6ZGlkU3RhcnRMb2FkaW5nKCkKK3sKKyAg
ICBBU1NFUlQobV9ibG9iTG9hZGVyKTsKKyAgICBBU1NFUlQobV9ibG9iTG9hZGVyU3RhdHVzID09
IEJsb2JMb2FkZXJTdGFydGVkKTsKK30KKwordm9pZCBSVENEYXRhQ2hhbm5lbDo6ZGlkUmVjZWl2
ZURhdGEoKQoreworICAgIEFTU0VSVChtX2Jsb2JMb2FkZXIpOworICAgIEFTU0VSVChtX2Jsb2JM
b2FkZXJTdGF0dXMgPT0gQmxvYkxvYWRlclN0YXJ0ZWQpOworfQorCit2b2lkIFJUQ0RhdGFDaGFu
bmVsOjpkaWRGaW5pc2hMb2FkaW5nKCkKK3sKKyAgICBBU1NFUlQobV9ibG9iTG9hZGVyKTsKKyAg
ICBBU1NFUlQobV9ibG9iTG9hZGVyU3RhdHVzID09IEJsb2JMb2FkZXJTdGFydGVkKTsKKyAgICBt
X2Jsb2JMb2FkZXJTdGF0dXMgPSBCbG9iTG9hZGVyRmluaXNoZWQ7CisgICAgcHJvY2Vzc091dGdv
aW5nQmxvYlF1ZXVlKCk7CisgICAgZGVyZWYoKTsKK30KKwordm9pZCBSVENEYXRhQ2hhbm5lbDo6
ZGlkRmFpbChpbnQgZXJyb3JDb2RlKQoreworICAgIEFTU0VSVChtX2Jsb2JMb2FkZXIpOworICAg
IEFTU0VSVChtX2Jsb2JMb2FkZXJTdGF0dXMgPT0gQmxvYkxvYWRlclN0YXJ0ZWQpOworICAgIG1f
YmxvYkxvYWRlci5jbGVhcigpOworICAgIG1fYmxvYkxvYWRlclN0YXR1cyA9IEJsb2JMb2FkZXJO
b3RTdGFydGVkOworICAgIGRlcmVmKCk7Cit9CisKK3ZvaWQgUlRDRGF0YUNoYW5uZWw6OnByb2Nl
c3NPdXRnb2luZ0Jsb2JRdWV1ZSgpCit7CisgICAgd2hpbGUgKCFtX291dGdvaW5nQmxvYlF1ZXVl
LmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IG1fb3V0Z29pbmdCbG9i
UXVldWUudGFrZUZpcnN0KCk7CisgICAgICAgIHN3aXRjaCAobV9ibG9iTG9hZGVyU3RhdHVzKSB7
CisgICAgICAgIGNhc2UgQmxvYkxvYWRlck5vdFN0YXJ0ZWQ6CisgICAgICAgICAgICByZWYoKTsg
Ly8gV2lsbCBiZSBkZXJlZmVkIGFmdGVyIGRpZEZpbmlzaExvYWRpbmcoKSBvciBkaWRGYWlsKCku
CisgICAgICAgICAgICBBU1NFUlQoIW1fYmxvYkxvYWRlcik7CisgICAgICAgICAgICBtX2Jsb2JM
b2FkZXIgPSBhZG9wdFB0cihuZXcgRmlsZVJlYWRlckxvYWRlcihGaWxlUmVhZGVyTG9hZGVyOjpS
ZWFkQXNBcnJheUJ1ZmZlciwgdGhpcykpOworICAgICAgICAgICAgbV9ibG9iTG9hZGVyU3RhdHVz
ID0gQmxvYkxvYWRlclN0YXJ0ZWQ7CisgICAgICAgICAgICBtX2Jsb2JMb2FkZXItPnN0YXJ0KG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYi5nZXQoKSk7CisgICAgICAgICAgICBtX291dGdv
aW5nQmxvYlF1ZXVlLnByZXBlbmQoYmxvYi5yZWxlYXNlKCkpOworICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGNhc2UgQmxvYkxvYWRlclN0YXJ0ZWQ6CisgICAgICAgIGNhc2UgQmxvYkxv
YWRlckZhaWxlZDoKKyAgICAgICAgICAgIG1fb3V0Z29pbmdCbG9iUXVldWUucHJlcGVuZChibG9i
LnJlbGVhc2UoKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBCbG9iTG9h
ZGVyRmluaXNoZWQ6IHsKKyAgICAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gcmVzdWx0ID0g
bV9ibG9iTG9hZGVyLT5hcnJheUJ1ZmZlclJlc3VsdCgpOworICAgICAgICAgICAgbV9ibG9iTG9h
ZGVyLmNsZWFyKCk7CisgICAgICAgICAgICBtX2Jsb2JMb2FkZXJTdGF0dXMgPSBCbG9iTG9hZGVy
Tm90U3RhcnRlZDsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgICAgICBz
ZW5kKHJlc3VsdC5yZWxlYXNlKCksIGVjKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorI2VuZGlmCisKIGNvbnN0IEF0b21pY1N0cmluZyYgUlRDRGF0YUNoYW5uZWw6OmludGVyZmFj
ZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yUlRD
RGF0YUNoYW5uZWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0RhdGFDaGFubmVsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0RhdGFDaGFubmVsLmgKaW5kZXggZjg1NWM5MGU0MTk2ZTUyYjE5MGE1OTgwODUzYjNmMTA2
YTMxMGFkYS4uNzA1ZmFlYzhlYjViMjNjNGNlZmFmMDYyM2UyNTczNjRkZDEyNzZjMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwu
aApAQCAtMjgsMTcgKzI4LDI0IEBACiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAogI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIgog
I2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudC5oIgogI2luY2x1ZGUgIlRpbWVy
LmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCbG9iOworY2xhc3MgRmlsZVJlYWRlckxv
YWRlcjsKIGNsYXNzIFJUQ0RhdGFDaGFubmVsSGFuZGxlcjsKIGNsYXNzIFJUQ1BlZXJDb25uZWN0
aW9uSGFuZGxlcjsKIAotY2xhc3MgUlRDRGF0YUNoYW5uZWwgOiBwdWJsaWMgUmVmQ291bnRlZDxS
VENEYXRhQ2hhbm5lbD4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIFJUQ0RhdGFDaGFubmVs
SGFuZGxlckNsaWVudCB7CitjbGFzcyBSVENEYXRhQ2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudGVk
PFJUQ0RhdGFDaGFubmVsPiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgUlRDRGF0YUNoYW5u
ZWxIYW5kbGVyQ2xpZW50CisjaWYgRU5BQkxFKEJMT0IpCisgICAgLCBwdWJsaWMgRmlsZVJlYWRl
ckxvYWRlckNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UlRDRGF0YUNoYW5uZWw+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUlRDUGVlckNv
bm5lY3Rpb25IYW5kbGVyKiwgY29uc3QgU3RyaW5nJiBsYWJlbCwgYm9vbCByZWxpYWJsZSwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJUQ0RhdGFDaGFubmVsPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NPd25QdHI8UlRDRGF0YUNoYW5uZWxIYW5k
bGVyPik7CkBAIC03MCw2ICs3NywxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBPVkVS
UklERTsKIAorI2lmIEVOQUJMRShCTE9CKQorICAgIC8vIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQg
ZnVuY3Rpb25zLgorICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydExvYWRpbmcoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9h
ZGluZygpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGludCBlcnJvckNvZGUpOworI2VuZGlm
CisKICAgICB1c2luZyBSZWZDb3VudGVkPFJUQ0RhdGFDaGFubmVsPjo6cmVmOwogICAgIHVzaW5n
IFJlZkNvdW50ZWQ8UlRDRGF0YUNoYW5uZWw+OjpkZXJlZjsKIApAQCAtNzksNiArOTQsMTAgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
Pik7CiAgICAgdm9pZCBzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoVGltZXI8UlRDRGF0YUNoYW5u
ZWw+Kik7CiAKKyNpZiBFTkFCTEUoQkxPQikKKyAgICB2b2lkIHByb2Nlc3NPdXRnb2luZ0Jsb2JR
dWV1ZSgpOworI2VuZGlmCisKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0
YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CkBAIC0xMDIsMTAgKzEyMSwyNyBAQCBwcml2YXRl
OgogICAgICAgICBCaW5hcnlUeXBlQmxvYiwKICAgICAgICAgQmluYXJ5VHlwZUFycmF5QnVmZmVy
CiAgICAgfTsKKworI2lmIEVOQUJMRShCTE9CKQorICAgIGVudW0gQmxvYkxvYWRlclN0YXR1cyB7
CisgICAgICAgIEJsb2JMb2FkZXJOb3RTdGFydGVkLAorICAgICAgICBCbG9iTG9hZGVyU3RhcnRl
ZCwKKyAgICAgICAgQmxvYkxvYWRlckZpbmlzaGVkLAorICAgICAgICBCbG9iTG9hZGVyRmFpbGVk
CisgICAgfTsKKyNlbmRpZgorCiAgICAgQmluYXJ5VHlwZSBtX2JpbmFyeVR5cGU7CiAKICAgICBU
aW1lcjxSVENEYXRhQ2hhbm5lbD4gbV9zY2hlZHVsZWRFdmVudFRpbWVyOwogICAgIFZlY3RvcjxS
ZWZQdHI8RXZlbnQ+ID4gbV9zY2hlZHVsZWRFdmVudHM7CisKKyNpZiBFTkFCTEUoQkxPQikKKyAg
ICAvLyBGSVhNRTogTG9hZCB0d28gb3IgbW9yZSBCbG9icyBzaW11bHRhbmVvdXNseSBmb3IgYmV0
dGVyIHBlcmZvcm1hbmNlLgorICAgIE93blB0cjxGaWxlUmVhZGVyTG9hZGVyPiBtX2Jsb2JMb2Fk
ZXI7CisgICAgQmxvYkxvYWRlclN0YXR1cyBtX2Jsb2JMb2FkZXJTdGF0dXM7CisgICAgRGVxdWU8
UmVmUHRyPEJsb2I+ID4gbV9vdXRnb2luZ0Jsb2JRdWV1ZTsKKyNlbmRpZgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDVjMTA1ZDEwMDUyMjhhN2Q4YTEyOGRjYTE4YWVlZTE4
OGMwN2FjNTMuLmUxNjQ4ZDE3ODhmZmQ5N2JhMjM3ODAyYWQ5Y2ZjNzFiOTA3NTU4MmEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxMy0wMy0xNCAgTGkgWWluICA8bGkueWluQGludGVsLmNvbT4K
KworICAgICAgICBBZGQgc3VwcG9ydCBvZiBzZW5kaW5nIGJsb2IgZGF0YSBmb3IgUlRDRGF0YUNo
YW5uZWwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTIzMTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNo
YW5uZWwtc2VuZGJsb2ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5u
ZWwuaHRtbDogQWRkIGRlZmF1bHQgdmFsdWUgY2hlY2tpbmcgb2YgYmluYXJ5VHlwZS4KKwogMjAx
My0wMy0xMyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdM
XSBhcnJheS1ib3VuZHMtY2xhbXBpbmcgc2hvdWxkIHVzZSBsZXNzIGRyYW1hdGljIG51bWJlcnMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24tZGF0YWNoYW5uZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1leHBlY3RlZC50eHQKaW5kZXggNjdiZTg4
MTdkMDkzNWUxNzMzZjE4MjEwOWQ0ODQ1Mzk3YjliNzZkYS4uMjYyYjQzMWUyMTMwODc5YjdmZjFj
ZGE0ZmFkY2FhMDk0ZGMyMGRjOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1l
eHBlY3RlZC50eHQKQEAgLTUsNiArNSw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFCiAKIFBB
U1MgZGMgPSBwYy5jcmVhdGVEYXRhQ2hhbm5lbCgibGFiZWwxIik7IGRpZCBub3QgdGhyb3cgZXhj
ZXB0aW9uLgogUEFTUyBkYy5yZWxpYWJsZSBpcyB0cnVlCitQQVNTIGRjLmJpbmFyeVR5cGUgaXMg
ImJsb2IiCiBQQVNTIGRjID0gcGMuY3JlYXRlRGF0YUNoYW5uZWwoImxhYmVsMiIsIHt9KTsgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIGRjLnJlbGlhYmxlIGlzIHRydWUKIFBBU1MgZGMg
PSBwYy5jcmVhdGVEYXRhQ2hhbm5lbCgibGFiZWwzIiwge3JlbGlhYmxlOnRydWV9KTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5u
ZWwtc2VuZGJsb2ItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3NDVjYTg0ZjI0MTQ4NGFlMTQ5
ZTJkYTM3ZDI3NGFlZWM0MGZiNTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDMxIEBACitUZXN0cyBSVENEYXRhQ2hhbm5lbCBzZW5kaW5nIGJs
b2IgZGF0YS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcGMgaXMgY29u
bmVjdGVkCitQQVNTIGRjID0gcGMuY3JlYXRlRGF0YUNoYW5uZWwoImxhYmVsIik7IGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgorUEFTUyBkYy5yZWFkeVN0YXRlIGlzICdjb25uZWN0aW5nJworUEFT
UyBkY19vbm9wZW4gd2FzIGNhbGxlZAorUEFTUyBkYy5yZWFkeVN0YXRlIGlzICdvcGVuJworUEFT
UyBkYy5sYWJlbCBpcyAnbGFiZWwnCitQQVNTIGRjLnNlbmQoYmxvYik7IGRpZCBub3QgdGhyb3cg
ZXhjZXB0aW9uLgorUEFTUyBkY19vbm1lc3NhZ2VfYmxvYiB3YXMgY2FsbGVkCitQQVNTIGRhdGEg
aW5zdGFuY2VvZiB3aW5kb3cuQmxvYiBpcyB0cnVlCitQQVNTIEJsb2IgZGF0YSB3YXMgcmV2ZWl2
ZWQgY29ycmVjdGx5LgorR290IEZpbGVTeXN0ZW0gb2JqZWN0LgorRmlsZSBjcmVhdGVkLgorUEFT
UyBmaWxlRW50cnkuaXNGaWxlIGlzIHRydWUKK1dyb3RlIHRvIGZpbGUuCitHb3QgRmlsZSBvYmpl
Y3QuCitQQVNTIGRjLnNlbmQoYmxvYik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBk
Y19vbm1lc3NhZ2VfZmlsZSB3YXMgY2FsbGVkCitQQVNTIGRhdGEgaW5zdGFuY2VvZiB3aW5kb3cu
QmxvYiBpcyB0cnVlCitQQVNTIEZpbGUgZGF0YSB3YXMgcmV2ZWl2ZWQgY29ycmVjdGx5LgorRGVs
ZXRpbmcgdGhlIGZpbGUuCitQQVNTIGRjX29uY2xvc2Ugd2FzIGNhbGxlZAorUEFTUyBkYy5yZWFk
eVN0YXRlIGlzICdjbG9zZWQnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1zZW5kYmxvYi5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1zZW5kYmxvYi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjEzODA3OTFiNjNjODU4ZDA2MGE5MDExNWVmYThkOGI3MjU1MjUxNzAK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLmh0bWwKQEAgLTAsMCArMSwxNzggQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBSVENEYXRh
Q2hhbm5lbCBzZW5kaW5nIGJsb2IgZGF0YS4iKTsKKwordmFyIHBjID0gbnVsbDsKK3ZhciBkYyA9
IG51bGw7Cit2YXIgZGF0YTsKK3ZhciBibG9iOworCit2YXIgZmlsZVN5c3RlbVNpemUgPSAxMDI0
OwordmFyIGZpbGVOYW1lID0gIlJUQ0RhdGFDaGFubmVsLXNlbmQtZmlsZS1ibG9iLnR4dCI7Cit2
YXIgbWVzc2FnZVRvV3JpdGUgPSAiSGVsbG8sIHdvcmxkISI7Cit2YXIgZmlsZUVudHJ5OworCitm
dW5jdGlvbiBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKSB7CisgICAgdmFy
IGJsb2JEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDI1NjsgKytpKQorICAgICAgICBibG9iRGF0YVtpXSA9IGk7CisgICAgcmV0dXJuIG5ldyBCbG9i
KFtibG9iRGF0YV0pOworfQorCitmdW5jdGlvbiBjaGVja1JlY2VpdmVkQmxvYkRhdGEoYXJyYXlC
dWZmZXIpIHsKKyAgICBpZiAoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCAhPSAyNTYpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShhcnJheUJ1
ZmZlciwgMCwgYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDI1NjsgKytpKSB7CisgICAgICAgIGlmIChyZXN1bHRbaV0gIT0gaSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGNo
ZWNrUmVjZWl2ZWRGaWxlQmxvYihzdHJpbmdNZXNzYWdlKSB7CisgICAgaWYgKHN0cmluZ01lc3Nh
Z2UgPT09IG1lc3NhZ2VUb1dyaXRlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZW5kRmlsZUJsb2IoKSB7CisgICAgaWYgKCF3aW5k
b3cud2Via2l0UmVxdWVzdEZpbGVTeXN0ZW0pIHsKKyAgICAgICAgdGVzdEZhaWxlZCgid2luZG93
LndlYmtpdFJlcXVlc3RGaWxlU3lzdGVtIGlzIG5vdCBhdmFpbGFibGUuIik7CisgICAgICAgIGVu
ZFRlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB3ZWJraXRSZXF1ZXN0RmlsZVN5
c3RlbShURU1QT1JBUlksIGZpbGVTeXN0ZW1TaXplLCBkaWRHZXRGaWxlU3lzdGVtLCBkaWRGYWls
KTsKK30KKworZnVuY3Rpb24gZGlkR2V0RmlsZVN5c3RlbShmaWxlU3lzdGVtKSB7CisgICAgZGVi
dWcoIkdvdCBGaWxlU3lzdGVtIG9iamVjdC4iKTsKKyAgICBmaWxlU3lzdGVtLnJvb3QuZ2V0Rmls
ZShmaWxlTmFtZSwge2NyZWF0ZTogdHJ1ZX0sIGRpZENyZWF0ZUZpbGUsIGRpZEZhaWwpOworfQor
CitmdW5jdGlvbiBkaWRDcmVhdGVGaWxlKGVudHJ5KSB7CisgICAgZGVidWcoIkZpbGUgY3JlYXRl
ZC4iKTsKKyAgICBmaWxlRW50cnkgPSBlbnRyeTsKKyAgICBzaG91bGRCZVRydWUoImZpbGVFbnRy
eS5pc0ZpbGUiKTsKKyAgICBmaWxlRW50cnkuY3JlYXRlV3JpdGVyKGRpZEdldEZpbGVXcml0ZXIs
IGRpZEZhaWwpOworfQorCitmdW5jdGlvbiBkaWRHZXRGaWxlV3JpdGVyKHdyaXRlcikgeworICAg
IHdyaXRlci50cnVuY2F0ZSgwKTsKKyAgICB3cml0ZXIub25lcnJvciA9IGZ1bmN0aW9uKCkgewor
ICAgICAgICB0ZXN0RmFpbGVkKCJGaWxlV3JpdGVyIG9wZXJhdGlvbiBmYWlsZWQuIik7CisgICAg
ICAgIGRlbGV0ZUZpbGVBbmRFbmRUZXN0KCk7CisgICAgfTsKKyAgICB3cml0ZXIub253cml0ZSA9
IGZ1bmN0aW9uKCkgeworICAgICAgICB3cml0ZXIud3JpdGUobmV3IEJsb2IoW21lc3NhZ2VUb1dy
aXRlXSkpOworICAgICAgICB3cml0ZXIub253cml0ZSA9IGRpZFdyaXRlRmlsZTsKKyAgICB9Owor
fQorCitmdW5jdGlvbiBkaWRXcml0ZUZpbGUoKSB7CisgICAgZGVidWcoIldyb3RlIHRvIGZpbGUu
Iik7CisgICAgZmlsZUVudHJ5LmZpbGUoZGlkR2V0RmlsZSwgZGlkRmFpbCk7Cit9CisKK2Z1bmN0
aW9uIGRpZEdldEZpbGUoZmlsZSkgeworICAgIGRlYnVnKCJHb3QgRmlsZSBvYmplY3QuIik7Cisg
ICAgYmxvYiA9IGZpbGU7CisgICAgZGMub25tZXNzYWdlID0gZGNfb25tZXNzYWdlX2ZpbGU7Cisg
ICAgc2hvdWxkTm90VGhyb3coImRjLnNlbmQoYmxvYik7Iik7Cit9CisKK2Z1bmN0aW9uIGRpZEZh
aWwoZmlsZUVycm9yKSB7CisgICAgdGVzdEZhaWxlZCgiRmlsZVN5c3RlbSBBUEkgb3BlcmF0aW9u
IGZhaWxlZDogZXJyb3IgY29kZSA9ICIgKyBmaWxlRXJyb3IuY29kZSk7CisgICAgZGVsZXRlRmls
ZUFuZEVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gZGVsZXRlRmlsZUFuZEVuZFRlc3QoKSB7Cisg
ICAgaWYgKGZpbGVFbnRyeSkgeworICAgICAgICBkZWJ1ZygiRGVsZXRpbmcgdGhlIGZpbGUuIik7
CisgICAgICAgIGZpbGVFbnRyeS5yZW1vdmUoZW5kVGVzdCwgZW5kVGVzdCk7CisgICAgfSBlbHNl
CisgICAgICAgIGVuZFRlc3QoKTsKK30KKworZnVuY3Rpb24gZGNfb25tZXNzYWdlX2ZpbGUoZSkg
eworICAgIHRlc3RQYXNzZWQoImRjX29ubWVzc2FnZV9maWxlIHdhcyBjYWxsZWQiKTsKKyAgICBk
YXRhID0gZS5kYXRhOworICAgIHNob3VsZEJlVHJ1ZSgiZGF0YSBpbnN0YW5jZW9mIHdpbmRvdy5C
bG9iIik7CisKKyAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKKyAgICByZWFkZXIu
b25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKGNoZWNrUmVjZWl2ZWRGaWxl
QmxvYihldmVudC50YXJnZXQucmVzdWx0KSkKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkZpbGUg
ZGF0YSB3YXMgcmV2ZWl2ZWQgY29ycmVjdGx5LiIpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICB0ZXN0RmFpbGVkKCJGaWxlIGRhdGEgc2hvdWxkIGJlIHJlY2VpdmVkIGNvcnJlY3RseSIpOwor
CisgICAgICAgIGRlbGV0ZUZpbGVBbmRFbmRUZXN0KCk7CisgICAgfTsKKyAgICByZWFkZXIucmVh
ZEFzVGV4dChkYXRhKTsKK30KKworZnVuY3Rpb24gZGNfb25tZXNzYWdlX2Jsb2IoZSkgeworICAg
IHRlc3RQYXNzZWQoImRjX29ubWVzc2FnZV9ibG9iIHdhcyBjYWxsZWQiKTsKKyAgICBkYXRhID0g
ZS5kYXRhOworICAgIHNob3VsZEJlVHJ1ZSgiZGF0YSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7
CisgICAgCisgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CisgICAgcmVhZGVyLm9u
bG9hZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChjaGVja1JlY2VpdmVkQmxvYkRh
dGEoZXZlbnQudGFyZ2V0LnJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkJsb2Ig
ZGF0YSB3YXMgcmV2ZWl2ZWQgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgdGVzdFNlbmRGaWxl
QmxvYigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiQmxvYiBk
YXRhIHNob3VsZCBiZSByZWNlaXZlZCBjb3JyZWN0bHkiKTsKKyAgICAgICAgICAgIGVuZFRlc3Qo
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGRhdGEp
OworfQorCitmdW5jdGlvbiBkY19vbmNsb3NlKCkgeworICAgIHRlc3RQYXNzZWQoImRjX29uY2xv
c2Ugd2FzIGNhbGxlZCIpOworICAgIHNob3VsZEJlKCJkYy5yZWFkeVN0YXRlIiwgIidjbG9zZWQn
Iik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gZGNfb25vcGVuKCkgewor
ICAgIHRlc3RQYXNzZWQoImRjX29ub3BlbiB3YXMgY2FsbGVkIik7CisgICAgc2hvdWxkQmUoImRj
LnJlYWR5U3RhdGUiLCAiJ29wZW4nIik7CisgICAgc2hvdWxkQmUoImRjLmxhYmVsIiwgIidsYWJl
bCciKTsKKworICAgIGRjLm9ubWVzc2FnZSA9IGRjX29ubWVzc2FnZV9ibG9iOworICAgIGJsb2Ig
PSBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKTsKKyAgICBzaG91bGROb3RU
aHJvdygiZGMuc2VuZChibG9iKTsiKTsKK30KKworZnVuY3Rpb24gcGNfb25pY2VjaGFuZ2UoKSB7
CisgICAgaWYgKHBjLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gImNvbXBsZXRlZCIpIHsKKyAgICAg
ICAgdGVzdFBhc3NlZCgicGMgaXMgY29ubmVjdGVkIik7CisgICAgICAgIHNob3VsZE5vdFRocm93
KCdkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJsYWJlbCIpOycpOworICAgICAgICBzaG91bGRC
ZSgiZGMucmVhZHlTdGF0ZSIsICInY29ubmVjdGluZyciKTsKKyAgICAgICAgZGMub25vcGVuID0g
ZGNfb25vcGVuOworICAgIH0KK30KKworZnVuY3Rpb24gZW5kVGVzdCgpIHsKKyAgICBkYy5vbmNs
b3NlID0gZGNfb25jbG9zZTsKKyAgICBkYy5jbG9zZSgpOworfQorCitwYyA9IG5ldyB3ZWJraXRS
VENQZWVyQ29ubmVjdGlvbihudWxsLCBudWxsKTsKK3BjLm9uaWNlY2hhbmdlID0gcGNfb25pY2Vj
aGFuZ2U7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK3dpbmRvdy5zdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFu
bmVsLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LWRhdGFjaGFubmVsLmh0bWwKaW5kZXggMTJlZDc2NjAxMTRhYjNjMWEzNjZhNWM3YTdiNzA2MjFk
NDI5NjFiZC4uOWZjMzk0YTc1M2YyNWE0OTNmYzExNGNmYTViNzUyZDE1NGEwYTAyNSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRh
Y2hhbm5lbC5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tZGF0YWNoYW5uZWwuaHRtbApAQCAtODQsNiArODQsNyBAQCBmdW5jdGlvbiBwY19v
bmljZWNoYW5nZSgpIHsKIHBjID0gbmV3IHdlYmtpdFJUQ1BlZXJDb25uZWN0aW9uKG51bGwsIG51
bGwpOwogc2hvdWxkTm90VGhyb3coJ2RjID0gcGMuY3JlYXRlRGF0YUNoYW5uZWwoImxhYmVsMSIp
OycpOwogc2hvdWxkQmUoImRjLnJlbGlhYmxlIiwgInRydWUiKTsKK3Nob3VsZEJlRXF1YWxUb1N0
cmluZygiZGMuYmluYXJ5VHlwZSIsICJibG9iIik7CiBzaG91bGROb3RUaHJvdygnZGMgPSBwYy5j
cmVhdGVEYXRhQ2hhbm5lbCgibGFiZWwyIiwge30pOycpOwogc2hvdWxkQmUoImRjLnJlbGlhYmxl
IiwgInRydWUiKTsKIHNob3VsZE5vdFRocm93KCdkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJs
YWJlbDMiLCB7cmVsaWFibGU6dHJ1ZX0pOycpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193549</attachid>
            <date>2013-03-18 06:40:40 -0700</date>
            <delta_ts>2013-03-19 05:25:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112314-20130318213636.patch</filename>
            <type>text/plain</type>
            <size>17847</size>
            <attacher name="Li Yin">li.yin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmYzNzM2YzNhM2YzNjNh
N2JhNGE5NGRhN2YzZmE2NjUwZTNmNWQ0OS4uMTYzM2UzNjNlYTc4NzA2ODgzNTI5ZjI4MzYyY2Yw
M2EzMGJiNjkwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAzLTE4ICBMaSBZ
aW4gIDxsaS55aW5AaW50ZWwuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IG9mIHNlbmRpbmcg
YmxvYiBkYXRhIGZvciBSVENEYXRhQ2hhbm5lbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjMxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNwZWM6IGh0dHA6Ly9kZXYudzMub3JnLzIwMTEvd2VicnRj
L2VkaXRvci93ZWJydGMuaHRtbCN3aWRsLVJUQ0RhdGFDaGFubmVsLXNlbmQtdm9pZC1CbG9iLWRh
dGEKKyAgICAgICAgUmVmZXIgdGhlIGNvZGUgb2YgV2ViU29ja2V0Q2hhbm5lbC5jcHAsIHNpbmNl
IFdlYlNvY2tldCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBmZWF0dXJlLAorICAgICAgICBhbmQgdGhl
aXIgZnVuY3Rpb25zIGxvb2sgdmVyeSBzaW1pbGFyIHRvIHNvbWUgZXh0ZW50LgorICAgICAgICBX
aGVuIGJsb2IgY2FuJ3QgYmUgbG9hZGVkIHN1Y2Nlc3NmdWxseSwgc2tpcCB0aGlzIGJsb2IgYW5k
IGNvbnRpbnVlIHRvIHNlbmQgdGhlIG5leHQuCisKKyAgICAgICAgVGVzdDogZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1zZW5kYmxvYi5odG1sCisKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJUQ0RhdGFDaGFubmVsOjpSVENEYXRhQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSVENEYXRhQ2hhbm5lbDo6c2V0QmluYXJ5VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSVENE
YXRhQ2hhbm5lbDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5lbDo6ZGlk
UmVjZWl2ZVJhd0RhdGEpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpS
VENEYXRhQ2hhbm5lbDo6ZGlkU3RhcnRMb2FkaW5nKTogQ2FsbGJhY2sgb2YgRmlsZVJlYWRlckxv
YWRlcgorICAgICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OmRpZFJlY2VpdmVEYXRhKTog
ZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJUQ0RhdGFDaGFubmVsOjpkaWRGaW5pc2hMb2FkaW5n
KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJUQ0RhdGFDaGFubmVsOjpkaWRGYWlsKTogZGl0
dG8KKyAgICAgICAgKFdlYkNvcmU6OlJUQ0RhdGFDaGFubmVsOjpwcm9jZXNzT3V0Z29pbmdCbG9i
UXVldWUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUlRDRGF0YUNoYW5uZWwpOgorCiAyMDEzLTAz
LTE4ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCB0
b3VjaCBzdXBwb3J0IHRvIHRoZSBjYWxlbmRhciBwaWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKaW5kZXggZjIwMTg4
M2NiNjBjZDYxYmQyYjQ2OGY1ZjAzODJlOGUwYzc2YWQxZC4uNjRlYTYwOGYyYzc0YjdjMDAzMzNj
Njc2MTAzY2MxNThjNTgxMDc0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiRmlsZVJlYWRlckxvYWRlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVu
dC5oIgogI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oIgogI2luY2x1ZGUgIlJUQ1Bl
ZXJDb25uZWN0aW9uSGFuZGxlci5oIgpAQCAtNjEsOCArNjIsMTEgQEAgUlRDRGF0YUNoYW5uZWw6
OlJUQ0RhdGFDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NPd25Q
dHI8UlRDRGEKICAgICAsIG1faGFuZGxlcihoYW5kbGVyKQogICAgICwgbV9zdG9wcGVkKGZhbHNl
KQogICAgICwgbV9yZWFkeVN0YXRlKFJlYWR5U3RhdGVDb25uZWN0aW5nKQotICAgICwgbV9iaW5h
cnlUeXBlKEJpbmFyeVR5cGVBcnJheUJ1ZmZlcikKKyAgICAsIG1fYmluYXJ5VHlwZShCaW5hcnlU
eXBlQmxvYikKICAgICAsIG1fc2NoZWR1bGVkRXZlbnRUaW1lcih0aGlzLCAmUlRDRGF0YUNoYW5u
ZWw6OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCkKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAsIG1f
YmxvYkxvYWRlclN0YXR1cyhCbG9iTG9hZGVyTm90U3RhcnRlZCkKKyNlbmRpZgogewogICAgIG1f
aGFuZGxlci0+c2V0Q2xpZW50KHRoaXMpOwogfQpAQCAtMTE4LDcgKzEyMiw3IEBAIFN0cmluZyBS
VENEYXRhQ2hhbm5lbDo6YmluYXJ5VHlwZSgpIGNvbnN0CiB2b2lkIFJUQ0RhdGFDaGFubmVsOjpz
ZXRCaW5hcnlUeXBlKGNvbnN0IFN0cmluZyYgYmluYXJ5VHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgaWYgKGJpbmFyeVR5cGUgPT0gImJsb2IiKQotICAgICAgICBlYyA9IE5PVF9TVVBQ
T1JURURfRVJSOworICAgICAgICBtX2JpbmFyeVR5cGUgPSBCaW5hcnlUeXBlQmxvYjsKICAgICBl
bHNlIGlmIChiaW5hcnlUeXBlID09ICJhcnJheWJ1ZmZlciIpCiAgICAgICAgIG1fYmluYXJ5VHlw
ZSA9IEJpbmFyeVR5cGVBcnJheUJ1ZmZlcjsKICAgICBlbHNlCkBAIC0xNjYsOCArMTcwLDEzIEBA
IHZvaWQgUlRDRGF0YUNoYW5uZWw6OnNlbmQoUGFzc1JlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IGRh
dGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIFJUQ0RhdGFDaGFubmVsOjpzZW5kKFBhc3NS
ZWZQdHI8QmxvYj4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudAotICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgaWYgKG1fcmVhZHlTdGF0
ZSAhPSBSZWFkeVN0YXRlT3BlbikgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vdXRnb2luZ0Jsb2JRdWV1ZS5hcHBlbmQo
QmxvYjo6Y3JlYXRlKGRhdGEtPnVybCgpLCBkYXRhLT50eXBlKCksIGRhdGEtPnNpemUoKSkpOwor
ICAgIHByb2Nlc3NPdXRnb2luZ0Jsb2JRdWV1ZSgpOwogfQogCiB2b2lkIFJUQ0RhdGFDaGFubmVs
OjpjbG9zZSgpCkBAIC0yMTEsNyArMjIwLDE0IEBAIHZvaWQgUlRDRGF0YUNoYW5uZWw6OmRpZFJl
Y2VpdmVSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBkYXRhTGVuZ3RoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobV9iaW5hcnlUeXBlID09IEJpbmFyeVR5cGVCbG9iKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgICAgIE93blB0cjxWZWN0b3I8Y2hhcj4g
PiBiaW5hcnlEYXRhID0gYWRvcHRQdHIobmV3IFZlY3RvcjxjaGFyPihkYXRhTGVuZ3RoKSk7Cisg
ICAgICAgIG1lbWNweShiaW5hcnlEYXRhLT5kYXRhKCksIGRhdGEsIGRhdGFMZW5ndGgpOworICAg
ICAgICBSZWZQdHI8UmF3RGF0YT4gcmF3RGF0YSA9IFJhd0RhdGE6OmNyZWF0ZSgpOworICAgICAg
ICBiaW5hcnlEYXRhLT5zd2FwKCpyYXdEYXRhLT5tdXRhYmxlRGF0YSgpKTsKKyAgICAgICAgT3du
UHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKKyAgICAgICAgYmxv
YkRhdGEtPmFwcGVuZERhdGEocmF3RGF0YS5yZWxlYXNlKCksIDAsIEJsb2JEYXRhSXRlbTo6dG9F
bmRPZkZpbGUpOworICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6OmNyZWF0ZShibG9i
RGF0YS5yZWxlYXNlKCksIGRhdGFMZW5ndGgpOworICAgICAgICBzY2hlZHVsZURpc3BhdGNoRXZl
bnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoYmxvYi5yZWxlYXNlKCkpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBpZiAobV9iaW5hcnlUeXBlID09IEJpbmFyeVR5cGVBcnJheUJ1ZmZlcikg
ewpAQCAtMjMwLDYgKzI0Niw3NyBAQCB2b2lkIFJUQ0RhdGFDaGFubmVsOjpkaWREZXRlY3RFcnJv
cigpCiAgICAgc2NoZWR1bGVEaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmVycm9yRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCisjaWYgRU5BQkxFKEJMT0IpCit2b2lk
IFJUQ0RhdGFDaGFubmVsOjpkaWRTdGFydExvYWRpbmcoKQoreworICAgIEFTU0VSVChtX2Jsb2JM
b2FkZXIpOworICAgIEFTU0VSVChtX2Jsb2JMb2FkZXJTdGF0dXMgPT0gQmxvYkxvYWRlclN0YXJ0
ZWQpOworfQorCit2b2lkIFJUQ0RhdGFDaGFubmVsOjpkaWRSZWNlaXZlRGF0YSgpCit7CisgICAg
QVNTRVJUKG1fYmxvYkxvYWRlcik7CisgICAgQVNTRVJUKG1fYmxvYkxvYWRlclN0YXR1cyA9PSBC
bG9iTG9hZGVyU3RhcnRlZCk7Cit9CisKK3ZvaWQgUlRDRGF0YUNoYW5uZWw6OmRpZEZpbmlzaExv
YWRpbmcoKQoreworICAgIEFTU0VSVChtX2Jsb2JMb2FkZXIpOworICAgIEFTU0VSVChtX2Jsb2JM
b2FkZXJTdGF0dXMgPT0gQmxvYkxvYWRlclN0YXJ0ZWQpOworICAgIG1fYmxvYkxvYWRlclN0YXR1
cyA9IEJsb2JMb2FkZXJGaW5pc2hlZDsKKyAgICBwcm9jZXNzT3V0Z29pbmdCbG9iUXVldWUoKTsK
KyAgICBkZXJlZigpOworfQorCit2b2lkIFJUQ0RhdGFDaGFubmVsOjpkaWRGYWlsKGludCBlcnJv
ckNvZGUpCit7CisgICAgQVNTRVJUKG1fYmxvYkxvYWRlcik7CisgICAgQVNTRVJUKG1fYmxvYkxv
YWRlclN0YXR1cyA9PSBCbG9iTG9hZGVyU3RhcnRlZCk7CisgICAgbV9ibG9iTG9hZGVyLmNsZWFy
KCk7CisgICAgbV9ibG9iTG9hZGVyU3RhdHVzID0gQmxvYkxvYWRlckZhaWxlZDsKKyAgICBpZiAo
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KSB7CisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2Uo
IkZhaWxlZCB0byBsb2FkIEJsb2I6IGVycm9yIGNvZGUgPSAiICsgU3RyaW5nOjpudW1iZXIoZXJy
b3JDb2RlKSk7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+YWRkQ29uc29sZU1l
c3NhZ2UoSlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgZXJyb3JNZXNzYWdlKTsK
KyAgICB9CisgICAgcHJvY2Vzc091dGdvaW5nQmxvYlF1ZXVlKCk7CisgICAgZGVyZWYoKTsKK30K
Kwordm9pZCBSVENEYXRhQ2hhbm5lbDo6cHJvY2Vzc091dGdvaW5nQmxvYlF1ZXVlKCkKK3sKKyAg
ICB3aGlsZSAoIW1fb3V0Z29pbmdCbG9iUXVldWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0
cjxCbG9iPiBibG9iID0gbV9vdXRnb2luZ0Jsb2JRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAg
c3dpdGNoIChtX2Jsb2JMb2FkZXJTdGF0dXMpIHsKKyAgICAgICAgY2FzZSBCbG9iTG9hZGVyTm90
U3RhcnRlZDoKKyAgICAgICAgICAgIHJlZigpOyAvLyBXaWxsIGJlIGRlcmVmZWQgYWZ0ZXIgZGlk
RmluaXNoTG9hZGluZygpIG9yIGRpZEZhaWwoKS4KKyAgICAgICAgICAgIEFTU0VSVCghbV9ibG9i
TG9hZGVyKTsKKyAgICAgICAgICAgIG1fYmxvYkxvYWRlciA9IGFkb3B0UHRyKG5ldyBGaWxlUmVh
ZGVyTG9hZGVyKEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyLCB0aGlzKSk7Cisg
ICAgICAgICAgICBtX2Jsb2JMb2FkZXJTdGF0dXMgPSBCbG9iTG9hZGVyU3RhcnRlZDsKKyAgICAg
ICAgICAgIG1fYmxvYkxvYWRlci0+c3RhcnQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBibG9i
LmdldCgpKTsKKyAgICAgICAgICAgIG1fb3V0Z29pbmdCbG9iUXVldWUucHJlcGVuZChibG9iLnJl
bGVhc2UoKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBCbG9iTG9hZGVy
U3RhcnRlZDoKKyAgICAgICAgICAgIG1fb3V0Z29pbmdCbG9iUXVldWUucHJlcGVuZChibG9iLnJl
bGVhc2UoKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBCbG9iTG9hZGVy
RmFpbGVkOgorICAgICAgICAgICAgbV9ibG9iTG9hZGVyU3RhdHVzID0gQmxvYkxvYWRlck5vdFN0
YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJsb2JMb2FkZXJGaW5p
c2hlZDogeworICAgICAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiByZXN1bHQgPSBtX2Jsb2JM
b2FkZXItPmFycmF5QnVmZmVyUmVzdWx0KCk7CisgICAgICAgICAgICBtX2Jsb2JMb2FkZXIuY2xl
YXIoKTsKKyAgICAgICAgICAgIG1fYmxvYkxvYWRlclN0YXR1cyA9IEJsb2JMb2FkZXJOb3RTdGFy
dGVkOworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgICAgIHNlbmQocmVz
dWx0LnJlbGVhc2UoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKyNlbmRpZgorCiBjb25zdCBBdG9taWNTdHJpbmcmIFJUQ0RhdGFDaGFu
bmVsOjppbnRlcmZhY2VOYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gZXZlbnROYW1lcygpLmlu
dGVyZmFjZUZvclJUQ0RhdGFDaGFubmVsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5oCmluZGV4IGY4NTVjOTBlNDE5NmU1MmIxOTBh
NTk4MDg1M2IzZjEwNmEzMTBhZGEuLjcwNWZhZWM4ZWI1YjIzYzRjZWZhZjA2MjNlMjU3MzY0ZGQx
Mjc2YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
RGF0YUNoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0RhdGFDaGFubmVsLmgKQEAgLTI4LDE3ICsyOCwyNCBAQAogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCiAKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIkZpbGVSZWFkZXJMb2Fk
ZXJDbGllbnQuaCIKICNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQuaCIKICNp
bmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYjsKK2NsYXNz
IEZpbGVSZWFkZXJMb2FkZXI7CiBjbGFzcyBSVENEYXRhQ2hhbm5lbEhhbmRsZXI7CiBjbGFzcyBS
VENQZWVyQ29ubmVjdGlvbkhhbmRsZXI7CiAKLWNsYXNzIFJUQ0RhdGFDaGFubmVsIDogcHVibGlj
IFJlZkNvdW50ZWQ8UlRDRGF0YUNoYW5uZWw+LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBS
VENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQgeworY2xhc3MgUlRDRGF0YUNoYW5uZWwgOiBwdWJs
aWMgUmVmQ291bnRlZDxSVENEYXRhQ2hhbm5lbD4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGlj
IFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudAorI2lmIEVOQUJMRShCTE9CKQorICAgICwgcHVi
bGljIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQKKyNlbmRpZgorewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJUQ0RhdGFDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFJUQ1BlZXJDb25uZWN0aW9uSGFuZGxlciosIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wg
cmVsaWFibGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSVENEYXRh
Q2hhbm5lbD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzT3duUHRyPFJUQ0Rh
dGFDaGFubmVsSGFuZGxlcj4pOwpAQCAtNzAsNiArNzcsMTQgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgY29uc3QgQXRvbWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3QgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3QgT1ZFUlJJREU7CiAKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAvLyBGaWxlUmVhZGVy
TG9hZGVyQ2xpZW50IGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRMb2FkaW5n
KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKCk7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChpbnQgZXJyb3JD
b2RlKTsKKyNlbmRpZgorCiAgICAgdXNpbmcgUmVmQ291bnRlZDxSVENEYXRhQ2hhbm5lbD46OnJl
ZjsKICAgICB1c2luZyBSZWZDb3VudGVkPFJUQ0RhdGFDaGFubmVsPjo6ZGVyZWY7CiAKQEAgLTc5
LDYgKzk0LDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2hlZHVsZURpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4pOwogICAgIHZvaWQgc2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKFRpbWVy
PFJUQ0RhdGFDaGFubmVsPiopOwogCisjaWYgRU5BQkxFKEJMT0IpCisgICAgdm9pZCBwcm9jZXNz
T3V0Z29pbmdCbG9iUXVldWUoKTsKKyNlbmRpZgorCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2
aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7CiAgICAgdmlydHVhbCBF
dmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwpAQCAtMTAyLDEwICsxMjEs
MjcgQEAgcHJpdmF0ZToKICAgICAgICAgQmluYXJ5VHlwZUJsb2IsCiAgICAgICAgIEJpbmFyeVR5
cGVBcnJheUJ1ZmZlcgogICAgIH07CisKKyNpZiBFTkFCTEUoQkxPQikKKyAgICBlbnVtIEJsb2JM
b2FkZXJTdGF0dXMgeworICAgICAgICBCbG9iTG9hZGVyTm90U3RhcnRlZCwKKyAgICAgICAgQmxv
YkxvYWRlclN0YXJ0ZWQsCisgICAgICAgIEJsb2JMb2FkZXJGaW5pc2hlZCwKKyAgICAgICAgQmxv
YkxvYWRlckZhaWxlZAorICAgIH07CisjZW5kaWYKKwogICAgIEJpbmFyeVR5cGUgbV9iaW5hcnlU
eXBlOwogCiAgICAgVGltZXI8UlRDRGF0YUNoYW5uZWw+IG1fc2NoZWR1bGVkRXZlbnRUaW1lcjsK
ICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IG1fc2NoZWR1bGVkRXZlbnRzOworCisjaWYgRU5B
QkxFKEJMT0IpCisgICAgLy8gRklYTUU6IExvYWQgdHdvIG9yIG1vcmUgQmxvYnMgc2ltdWx0YW5l
b3VzbHkgZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KKyAgICBPd25QdHI8RmlsZVJlYWRlckxvYWRl
cj4gbV9ibG9iTG9hZGVyOworICAgIEJsb2JMb2FkZXJTdGF0dXMgbV9ibG9iTG9hZGVyU3RhdHVz
OworICAgIERlcXVlPFJlZlB0cjxCbG9iPiA+IG1fb3V0Z29pbmdCbG9iUXVldWU7CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkYzkwNjlmN2U1ZTI1MDQyOTZm
N2M4NzJmMTdjNjY3NmRhNTJiNzMzLi41MWUwMmQ1ZGIzNWNhNjg5OWMxOGQ3ODA0OTM4OTIxZmQy
OWRjYmEzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDMtMTggIExpIFlpbiAgPGxpLnlp
bkBpbnRlbC5jb20+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgb2Ygc2VuZGluZyBibG9iIGRhdGEg
Zm9yIFJUQ0RhdGFDaGFubmVsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEyMzE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFu
bmVsLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1zZW5kYmxv
Yi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLWRhdGFjaGFubmVsLmh0bWw6IEFkZCBkZWZhdWx0IHZhbHVlIGNoZWNraW5nIG9mIGJpbmFy
eVR5cGUuCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9yZXNvdXJjZXMvUlRDRGF0YUNoYW5u
ZWwtc2VuZC1maWxlLWJsb2IudHh0OiBBZGRlZC4KKwogMjAxMy0wMy0xOCAgS2Vpc2hpIEhhdHRv
cmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgdG91Y2ggc3VwcG9ydCB0byB0
aGUgY2FsZW5kYXIgcGlja2VyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtZXhwZWN0
ZWQudHh0CmluZGV4IDY3YmU4ODE3ZDA5MzVlMTczM2YxODIxMDlkNDg0NTM5N2I5Yjc2ZGEuLjI2
MmI0MzFlMjEzMDg3OWI3ZmYxY2RhNGZhZGNhYTA5NGRjMjBkYzkgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtZXhw
ZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24tZGF0YWNoYW5uZWwtZXhwZWN0ZWQudHh0CkBAIC01LDYgKzUsNyBAQCBPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURQogCiBQQVNTIGRjID0gcGMuY3JlYXRlRGF0YUNoYW5uZWwoImxhYmVsMSIp
OyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1MgZGMucmVsaWFibGUgaXMgdHJ1ZQorUEFT
UyBkYy5iaW5hcnlUeXBlIGlzICJibG9iIgogUEFTUyBkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVs
KCJsYWJlbDIiLCB7fSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgogUEFTUyBkYy5yZWxpYWJs
ZSBpcyB0cnVlCiBQQVNTIGRjID0gcGMuY3JlYXRlRGF0YUNoYW5uZWwoImxhYmVsMyIsIHtyZWxp
YWJsZTp0cnVlfSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1zZW5k
YmxvYi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
M2U0ODY0ZWM5MzU0Mjc3YjE2MDE0NDI0OWIxZDU0NjBhYTVjOTY4Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hh
bm5lbC1zZW5kYmxvYi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorQ09OU09MRSBNRVNT
QUdFOiBGYWlsZWQgdG8gbG9hZCBCbG9iOiBlcnJvciBjb2RlID0gMQorCitUZXN0cyBSVENEYXRh
Q2hhbm5lbCBzZW5kaW5nIGJsb2IgZGF0YS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CitQQVNTIHBjIGlzIGNvbm5lY3RlZAorUEFTUyBkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJs
YWJlbCIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgZGMucmVhZHlTdGF0ZSBpcyAn
Y29ubmVjdGluZycKK1BBU1MgZGNfb25vcGVuIHdhcyBjYWxsZWQKK1BBU1MgZGMucmVhZHlTdGF0
ZSBpcyAnb3BlbicKK1BBU1MgZGMubGFiZWwgaXMgJ2xhYmVsJworUEFTUyBkYy5zZW5kKGJsb2Ip
OyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgZGNfb25tZXNzYWdlX2Jsb2Igd2FzIGNh
bGxlZAorUEFTUyBkYXRhIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorUEFTUyBCbG9i
IGRhdGEgd2FzIHJldmVpdmVkIGNvcnJlY3RseS4KK1BBU1MgZGMuc2VuZChmaWxlTGlzdC5pdGVt
KDApKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgZGMuc2VuZChmaWxlTGlzdC5pdGVt
KDEpKSBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgZGNfb25tZXNzYWdlX2ZpbGUgd2Fz
IGNhbGxlZAorUEFTUyBkYXRhIGluc3RhbmNlb2Ygd2luZG93LkJsb2IgaXMgdHJ1ZQorRkFJTCBG
aWxlIGRhdGEgc2hvdWxkIGJlIHJlY2VpdmVkIGNvcnJlY3RseQorUEFTUyBkY19vbmNsb3NlIHdh
cyBjYWxsZWQKK1BBU1MgZGMucmVhZHlTdGF0ZSBpcyAnY2xvc2VkJworUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtc2VuZGJs
b2IuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
ZGF0YWNoYW5uZWwtc2VuZGJsb2IuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWM4ZmRjMDJmZTZmMTk1YTdi
N2MxOGZjMTkxOTgwYzhiMTMxNmYwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1zZW5kYmxvYi5odG1s
CkBAIC0wLDAgKzEsMTM1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpbnB1dCB0eXBlPSJm
aWxlIiBtdWx0aXBsZSBvbmNoYW5nZT0ib25JbnB1dEZpbGVDaGFuZ2UodGhpcy5maWxlcykiPgor
PGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIFJUQ0RhdGFDaGFubmVsIHNlbmRpbmcgYmxvYiBk
YXRhLiIpOworCit2YXIgcGMgPSBudWxsOwordmFyIGRjID0gbnVsbDsKK3ZhciBkYXRhOwordmFy
IGJsb2I7Cit2YXIgZmlsZUxpc3Q7Cit2YXIgc3RyaW5nRnJvbUZpbGUgPSAiSGVsbG8sIHdvcmxk
ISI7CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVuY3Rpb24gY3JlYXRlQmxv
YkNvbnRhaW5pbmdBbGxEaXN0aW5jdEJ5dGVzKCkgeworICAgIHZhciBibG9iRGF0YSA9IG5ldyBV
aW50OEFycmF5KDI1Nik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkKKyAgICAg
ICAgYmxvYkRhdGFbaV0gPSBpOworICAgIHJldHVybiBuZXcgQmxvYihbYmxvYkRhdGFdKTsKK30K
KworZnVuY3Rpb24gY2hlY2tSZWNlaXZlZEJsb2JEYXRhKGFycmF5QnVmZmVyKSB7CisgICAgaWYg
KGFycmF5QnVmZmVyLmJ5dGVMZW5ndGggIT0gMjU2KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIsIDAsIGFycmF5QnVm
ZmVyLmJ5dGVMZW5ndGgpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkgewor
ICAgICAgICBpZiAocmVzdWx0W2ldICE9IGkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBjaGVja1JlY2VpdmVkRmlsZUJs
b2Ioc3RyaW5nTWVzc2FnZSkgeworICAgIGlmIChzdHJpbmdNZXNzYWdlID09PSBzdHJpbmdGcm9t
RmlsZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5j
dGlvbiBkY19vbm1lc3NhZ2VfZmlsZShlKSB7CisgICAgdGVzdFBhc3NlZCgiZGNfb25tZXNzYWdl
X2ZpbGUgd2FzIGNhbGxlZCIpOworICAgIGRhdGEgPSBlLmRhdGE7CisgICAgc2hvdWxkQmVUcnVl
KCJkYXRhIGluc3RhbmNlb2Ygd2luZG93LkJsb2IiKTsKKworICAgIHZhciByZWFkZXIgPSBuZXcg
RmlsZVJlYWRlcigpOworICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICBpZiAoY2hlY2tSZWNlaXZlZEZpbGVCbG9iKGV2ZW50LnRhcmdldC5yZXN1bHQpKQorICAg
ICAgICAgICAgdGVzdFBhc3NlZCgiRmlsZSBkYXRhIHdhcyByZXZlaXZlZCBjb3JyZWN0bHkuIik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkZpbGUgZGF0YSBzaG91bGQg
YmUgcmVjZWl2ZWQgY29ycmVjdGx5Iik7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9OworICAg
IHJlYWRlci5yZWFkQXNUZXh0KGRhdGEpOworfQorCitmdW5jdGlvbiB0ZXN0U2VuZEZpbGVCbG9i
KCkgeworICAgIGRjLm9ubWVzc2FnZSA9IGRjX29ubWVzc2FnZV9maWxlOworICAgIC8vIFdoZW4g
YmxvYiBjYW4ndCBiZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCBpdCBoYXMgYmVlbiBza2lwcGVkLCBu
ZXh0IGJsb2Igd2lsbCBiZSBzZW50LgorICAgIHNob3VsZE5vdFRocm93KCJkYy5zZW5kKGZpbGVM
aXN0Lml0ZW0oMCkpIik7CisgICAgc2hvdWxkTm90VGhyb3coImRjLnNlbmQoZmlsZUxpc3QuaXRl
bSgxKSkiKTsKK30KKworZnVuY3Rpb24gZGNfb25tZXNzYWdlX2Jsb2IoZSkgeworICAgIHRlc3RQ
YXNzZWQoImRjX29ubWVzc2FnZV9ibG9iIHdhcyBjYWxsZWQiKTsKKyAgICBkYXRhID0gZS5kYXRh
OworICAgIHNob3VsZEJlVHJ1ZSgiZGF0YSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIik7CisgICAg
CisgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CisgICAgcmVhZGVyLm9ubG9hZCA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChjaGVja1JlY2VpdmVkQmxvYkRhdGEoZXZl
bnQudGFyZ2V0LnJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkJsb2IgZGF0YSB3
YXMgcmV2ZWl2ZWQgY29ycmVjdGx5LiIpOworICAgICAgICAgICAgdGVzdFNlbmRGaWxlQmxvYigp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiQmxvYiBkYXRhIHNo
b3VsZCBiZSByZWNlaXZlZCBjb3JyZWN0bHkiKTsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsKKyAg
ICAgICAgfQorICAgIH07CisgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGRhdGEpOworfQor
CitmdW5jdGlvbiBkY19vbmNsb3NlKCkgeworICAgIHRlc3RQYXNzZWQoImRjX29uY2xvc2Ugd2Fz
IGNhbGxlZCIpOworICAgIHNob3VsZEJlKCJkYy5yZWFkeVN0YXRlIiwgIidjbG9zZWQnIik7CisK
KyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24gZGNfb25vcGVuKCkgeworICAgIHRl
c3RQYXNzZWQoImRjX29ub3BlbiB3YXMgY2FsbGVkIik7CisgICAgc2hvdWxkQmUoImRjLnJlYWR5
U3RhdGUiLCAiJ29wZW4nIik7CisgICAgc2hvdWxkQmUoImRjLmxhYmVsIiwgIidsYWJlbCciKTsK
KworICAgIGRjLm9ubWVzc2FnZSA9IGRjX29ubWVzc2FnZV9ibG9iOworICAgIGJsb2IgPSBjcmVh
dGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKTsKKyAgICBzaG91bGROb3RUaHJvdygi
ZGMuc2VuZChibG9iKTsiKTsKK30KKworZnVuY3Rpb24gcGNfb25pY2VjaGFuZ2UoKSB7CisgICAg
aWYgKHBjLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gImNvbXBsZXRlZCIpIHsKKyAgICAgICAgdGVz
dFBhc3NlZCgicGMgaXMgY29ubmVjdGVkIik7CisgICAgICAgIHNob3VsZE5vdFRocm93KCdkYyA9
IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJsYWJlbCIpOycpOworICAgICAgICBzaG91bGRCZSgiZGMu
cmVhZHlTdGF0ZSIsICInY29ubmVjdGluZyciKTsKKyAgICAgICAgZGMub25vcGVuID0gZGNfb25v
cGVuOworICAgIH0KK30KKworZnVuY3Rpb24gZW5kVGVzdCgpIHsKKyAgICBkYy5vbmNsb3NlID0g
ZGNfb25jbG9zZTsKKyAgICBkYy5jbG9zZSgpOworfQorCitmdW5jdGlvbiBvbklucHV0RmlsZUNo
YW5nZShmaWxlcykgeworICAgIGZpbGVMaXN0ID0gZmlsZXM7CisgICAgcGMgPSBuZXcgd2Via2l0
UlRDUGVlckNvbm5lY3Rpb24obnVsbCwgbnVsbCk7CisgICAgcGMub25pY2VjaGFuZ2UgPSBwY19v
bmljZWNoYW5nZTsKK30KKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIGV2ZW50U2Vu
ZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhbInJlc291cmNlcy9ub24tZXhpc3RlbmNlIiwgInJlc291
cmNlcy9SVENEYXRhQ2hhbm5lbC1zZW5kLWZpbGUtYmxvYi50eHQiXSk7CisgICAgZXZlbnRTZW5k
ZXIubW91c2VNb3ZlVG8oMTAsIDEwKTsKKyAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Cit9CisK
Kzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC5odG1s
CmluZGV4IDEyZWQ3NjYwMTE0YWIzYzFhMzY2YTVjN2E3YjcwNjIxZDQyOTYxYmQuLjlmYzM5NGE3
NTNmMjVhNDkzZmMxMTRjZmE1Yjc1MmQxNTRhMGEwMjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFu
bmVsLmh0bWwKQEAgLTg0LDYgKzg0LDcgQEAgZnVuY3Rpb24gcGNfb25pY2VjaGFuZ2UoKSB7CiBw
YyA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihudWxsLCBudWxsKTsKIHNob3VsZE5vdFRo
cm93KCdkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJsYWJlbDEiKTsnKTsKIHNob3VsZEJlKCJk
Yy5yZWxpYWJsZSIsICJ0cnVlIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoImRjLmJpbmFyeVR5
cGUiLCAiYmxvYiIpOwogc2hvdWxkTm90VGhyb3coJ2RjID0gcGMuY3JlYXRlRGF0YUNoYW5uZWwo
ImxhYmVsMiIsIHt9KTsnKTsKIHNob3VsZEJlKCJkYy5yZWxpYWJsZSIsICJ0cnVlIik7CiBzaG91
bGROb3RUaHJvdygnZGMgPSBwYy5jcmVhdGVEYXRhQ2hhbm5lbCgibGFiZWwzIiwge3JlbGlhYmxl
OnRydWV9KTsnKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vcmVz
b3VyY2VzL1JUQ0RhdGFDaGFubmVsLXNlbmQtZmlsZS1ibG9iLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vcmVzb3VyY2VzL1JUQ0RhdGFDaGFubmVsLXNlbmQtZmlsZS1ibG9iLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hZjU2MjZiNGExMTRhYmNiODJkNjNkYjdjODA4MmMzYzQ3NTZlNTFiCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9yZXNvdXJjZXMv
UlRDRGF0YUNoYW5uZWwtc2VuZC1maWxlLWJsb2IudHh0CkBAIC0wLDAgKzEgQEAKK0hlbGxvLCB3
b3JsZCEK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193800</attachid>
            <date>2013-03-19 05:25:30 -0700</date>
            <delta_ts>2013-03-20 17:43:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112314-20130319202128.patch</filename>
            <type>text/plain</type>
            <size>17503</size>
            <attacher name="Li Yin">li.yin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmYzNzM2YzNhM2YzNjNh
N2JhNGE5NGRhN2YzZmE2NjUwZTNmNWQ0OS4uMjNlYzU4MzY3ODQ1ZWQ5YmVjZDU5YWUwYWU5YTNh
YjI0YjQ4N2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEzLTAzLTE4ICBMaSBZ
aW4gIDxsaS55aW5AaW50ZWwuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IG9mIHNlbmRpbmcg
YmxvYiBkYXRhIGZvciBSVENEYXRhQ2hhbm5lbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTExMjMxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFNwZWM6IGh0dHA6Ly9kZXYudzMub3JnLzIwMTEvd2VicnRj
L2VkaXRvci93ZWJydGMuaHRtbCN3aWRsLVJUQ0RhdGFDaGFubmVsLXNlbmQtdm9pZC1CbG9iLWRh
dGEKKyAgICAgICAgUmVmZXIgdGhlIGNvZGUgb2YgV2ViU29ja2V0Q2hhbm5lbC5jcHAsIHNpbmNl
IFdlYlNvY2tldCBoYXMgaW1wbGVtZW50ZWQgdGhpcyBmZWF0dXJlLAorICAgICAgICBhbmQgdGhl
aXIgZnVuY3Rpb25zIGxvb2sgdmVyeSBzaW1pbGFyIHRvIHNvbWUgZXh0ZW50LgorICAgICAgICBX
aGVuIGJsb2IgY2FuJ3QgYmUgbG9hZGVkIHN1Y2Nlc3NmdWxseSwgY2xvc2UgdGhlIGRhdGEgY2hh
bm5lbCwgbGlrZSB3aGF0IHdlYnNvY2tldCBpcyBkb2luZy4KKworICAgICAgICBUZXN0OiBmYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLmh0bWwK
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OlJUQ0RhdGFDaGFubmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJUQ0RhdGFDaGFubmVsOjpzZXRCaW5hcnlUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJUQ0RhdGFDaGFubmVsOjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ0RhdGFDaGFu
bmVsOjpkaWRSZWNlaXZlUmF3RGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJUQ0RhdGFDaGFubmVsOjpkaWRTdGFydExvYWRpbmcpOiBDYWxsYmFjayBvZiBGaWxl
UmVhZGVyTG9hZGVyCisgICAgICAgIChXZWJDb3JlOjpSVENEYXRhQ2hhbm5lbDo6ZGlkUmVjZWl2
ZURhdGEpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OmRpZEZpbmlz
aExvYWRpbmcpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OmRpZEZh
aWwpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UlRDRGF0YUNoYW5uZWw6OnByb2Nlc3NPdXRn
b2luZ0Jsb2JRdWV1ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hh
bm5lbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChSVENEYXRhQ2hhbm5lbCk6CisK
IDIwMTMtMDMtMTggIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQWRkIHRvdWNoIHN1cHBvcnQgdG8gdGhlIGNhbGVuZGFyIHBpY2tlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAppbmRl
eCBmMjAxODgzY2I2MGNkNjFiZDJiNDY4ZjVmMDM4MmU4ZTBjNzZhZDFkLi41YWVlNGFkN2UxOWVi
YzY5Y2NjMjBmY2JiNmNjYWY4NzBlMmUxNmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyLmgiCiAjaW5jbHVkZSAiTWVz
c2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmgiCiAjaW5jbHVk
ZSAiUlRDUGVlckNvbm5lY3Rpb25IYW5kbGVyLmgiCkBAIC02MSw4ICs2MiwxMSBAQCBSVENEYXRh
Q2hhbm5lbDo6UlRDRGF0YUNoYW5uZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc093blB0cjxSVENEYQogICAgICwgbV9oYW5kbGVyKGhhbmRsZXIpCiAgICAgLCBtX3N0b3Bw
ZWQoZmFsc2UpCiAgICAgLCBtX3JlYWR5U3RhdGUoUmVhZHlTdGF0ZUNvbm5lY3RpbmcpCi0gICAg
LCBtX2JpbmFyeVR5cGUoQmluYXJ5VHlwZUFycmF5QnVmZmVyKQorICAgICwgbV9iaW5hcnlUeXBl
KEJpbmFyeVR5cGVCbG9iKQogICAgICwgbV9zY2hlZHVsZWRFdmVudFRpbWVyKHRoaXMsICZSVENE
YXRhQ2hhbm5lbDo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKQorI2lmIEVOQUJMRShCTE9CKQor
ICAgICwgbV9ibG9iTG9hZGVyU3RhdHVzKEJsb2JMb2FkZXJOb3RTdGFydGVkKQorI2VuZGlmCiB7
CiAgICAgbV9oYW5kbGVyLT5zZXRDbGllbnQodGhpcyk7CiB9CkBAIC0xMTgsNyArMTIyLDcgQEAg
U3RyaW5nIFJUQ0RhdGFDaGFubmVsOjpiaW5hcnlUeXBlKCkgY29uc3QKIHZvaWQgUlRDRGF0YUNo
YW5uZWw6OnNldEJpbmFyeVR5cGUoY29uc3QgU3RyaW5nJiBiaW5hcnlUeXBlLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBpZiAoYmluYXJ5VHlwZSA9PSAiYmxvYiIpCi0gICAgICAgIGVjID0g
Tk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIG1fYmluYXJ5VHlwZSA9IEJpbmFyeVR5cGVCbG9i
OwogICAgIGVsc2UgaWYgKGJpbmFyeVR5cGUgPT0gImFycmF5YnVmZmVyIikKICAgICAgICAgbV9i
aW5hcnlUeXBlID0gQmluYXJ5VHlwZUFycmF5QnVmZmVyOwogICAgIGVsc2UKQEAgLTE2Niw4ICsx
NzAsMTMgQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c2VuZChQYXNzUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz4gZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKIHZvaWQgUlRDRGF0YUNoYW5uZWw6OnNl
bmQoUGFzc1JlZlB0cjxCbG9iPiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyBG
SVhNRTogaW1wbGVtZW50Ci0gICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICBpZiAobV9y
ZWFkeVN0YXRlICE9IFJlYWR5U3RhdGVPcGVuKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFU
RV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX291dGdvaW5nQmxvYlF1ZXVl
LmFwcGVuZChCbG9iOjpjcmVhdGUoZGF0YS0+dXJsKCksIGRhdGEtPnR5cGUoKSwgZGF0YS0+c2l6
ZSgpKSk7CisgICAgcHJvY2Vzc091dGdvaW5nQmxvYlF1ZXVlKCk7CiB9CiAKIHZvaWQgUlRDRGF0
YUNoYW5uZWw6OmNsb3NlKCkKQEAgLTIxMSw3ICsyMjAsMTQgQEAgdm9pZCBSVENEYXRhQ2hhbm5l
bDo6ZGlkUmVjZWl2ZVJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGRhdGFMZW5ndGgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2JpbmFyeVR5cGUgPT0gQmluYXJ5VHlwZUJs
b2IpIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICAgICAgT3duUHRyPFZlY3Rv
cjxjaGFyPiA+IGJpbmFyeURhdGEgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGNoYXI+KGRhdGFMZW5n
dGgpKTsKKyAgICAgICAgbWVtY3B5KGJpbmFyeURhdGEtPmRhdGEoKSwgZGF0YSwgZGF0YUxlbmd0
aCk7CisgICAgICAgIFJlZlB0cjxSYXdEYXRhPiByYXdEYXRhID0gUmF3RGF0YTo6Y3JlYXRlKCk7
CisgICAgICAgIGJpbmFyeURhdGEtPnN3YXAoKnJhd0RhdGEtPm11dGFibGVEYXRhKCkpOworICAg
ICAgICBPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhID0gQmxvYkRhdGE6OmNyZWF0ZSgpOworICAg
ICAgICBibG9iRGF0YS0+YXBwZW5kRGF0YShyYXdEYXRhLnJlbGVhc2UoKSwgMCwgQmxvYkRhdGFJ
dGVtOjp0b0VuZE9mRmlsZSk7CisgICAgICAgIFJlZlB0cjxCbG9iPiBibG9iID0gQmxvYjo6Y3Jl
YXRlKGJsb2JEYXRhLnJlbGVhc2UoKSwgZGF0YUxlbmd0aCk7CisgICAgICAgIHNjaGVkdWxlRGlz
cGF0Y2hFdmVudChNZXNzYWdlRXZlbnQ6OmNyZWF0ZShibG9iLnJlbGVhc2UoKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX2JpbmFyeVR5cGUgPT0gQmluYXJ5VHlwZUFycmF5
QnVmZmVyKSB7CkBAIC0yMzAsNiArMjQ2LDcxIEBAIHZvaWQgUlRDRGF0YUNoYW5uZWw6OmRpZERl
dGVjdEVycm9yKCkKICAgICBzY2hlZHVsZURpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiB9CiAKKyNpZiBFTkFCTEUoQkxP
QikKK3ZvaWQgUlRDRGF0YUNoYW5uZWw6OmRpZFN0YXJ0TG9hZGluZygpCit7CisgICAgQVNTRVJU
KG1fYmxvYkxvYWRlcik7CisgICAgQVNTRVJUKG1fYmxvYkxvYWRlclN0YXR1cyA9PSBCbG9iTG9h
ZGVyU3RhcnRlZCk7Cit9CisKK3ZvaWQgUlRDRGF0YUNoYW5uZWw6OmRpZFJlY2VpdmVEYXRhKCkK
K3sKKyAgICBBU1NFUlQobV9ibG9iTG9hZGVyKTsKKyAgICBBU1NFUlQobV9ibG9iTG9hZGVyU3Rh
dHVzID09IEJsb2JMb2FkZXJTdGFydGVkKTsKK30KKwordm9pZCBSVENEYXRhQ2hhbm5lbDo6ZGlk
RmluaXNoTG9hZGluZygpCit7CisgICAgQVNTRVJUKG1fYmxvYkxvYWRlcik7CisgICAgQVNTRVJU
KG1fYmxvYkxvYWRlclN0YXR1cyA9PSBCbG9iTG9hZGVyU3RhcnRlZCk7CisgICAgbV9ibG9iTG9h
ZGVyU3RhdHVzID0gQmxvYkxvYWRlckZpbmlzaGVkOworICAgIHByb2Nlc3NPdXRnb2luZ0Jsb2JR
dWV1ZSgpOworICAgIGRlcmVmKCk7Cit9CisKK3ZvaWQgUlRDRGF0YUNoYW5uZWw6OmRpZEZhaWwo
aW50IGVycm9yQ29kZSkKK3sKKyAgICBBU1NFUlQobV9ibG9iTG9hZGVyKTsKKyAgICBBU1NFUlQo
bV9ibG9iTG9hZGVyU3RhdHVzID09IEJsb2JMb2FkZXJTdGFydGVkKTsKKyAgICBtX2Jsb2JMb2Fk
ZXIuY2xlYXIoKTsKKyAgICBtX2Jsb2JMb2FkZXJTdGF0dXMgPSBCbG9iTG9hZGVyRmFpbGVkOwor
ICAgIC8vIEZJWE1FOiBXaWxsIHRyaWdnZXIgZXJyb3IgZXZlbnQKKyAgICBjbG9zZSgpOworICAg
IGRlcmVmKCk7Cit9CisKK3ZvaWQgUlRDRGF0YUNoYW5uZWw6OnByb2Nlc3NPdXRnb2luZ0Jsb2JR
dWV1ZSgpCit7CisgICAgd2hpbGUgKCFtX291dGdvaW5nQmxvYlF1ZXVlLmlzRW1wdHkoKSkgewor
ICAgICAgICBSZWZQdHI8QmxvYj4gYmxvYiA9IG1fb3V0Z29pbmdCbG9iUXVldWUudGFrZUZpcnN0
KCk7CisgICAgICAgIHN3aXRjaCAobV9ibG9iTG9hZGVyU3RhdHVzKSB7CisgICAgICAgIGNhc2Ug
QmxvYkxvYWRlck5vdFN0YXJ0ZWQ6CisgICAgICAgICAgICByZWYoKTsgLy8gV2lsbCBiZSBkZXJl
ZmVkIGFmdGVyIGRpZEZpbmlzaExvYWRpbmcoKSBvciBkaWRGYWlsKCkuCisgICAgICAgICAgICBB
U1NFUlQoIW1fYmxvYkxvYWRlcik7CisgICAgICAgICAgICBtX2Jsb2JMb2FkZXIgPSBhZG9wdFB0
cihuZXcgRmlsZVJlYWRlckxvYWRlcihGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNBcnJheUJ1ZmZl
ciwgdGhpcykpOworICAgICAgICAgICAgbV9ibG9iTG9hZGVyU3RhdHVzID0gQmxvYkxvYWRlclN0
YXJ0ZWQ7CisgICAgICAgICAgICBtX2Jsb2JMb2FkZXItPnN0YXJ0KG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgYmxvYi5nZXQoKSk7CisgICAgICAgICAgICBtX291dGdvaW5nQmxvYlF1ZXVlLnBy
ZXBlbmQoYmxvYi5yZWxlYXNlKCkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNh
c2UgQmxvYkxvYWRlclN0YXJ0ZWQ6CisgICAgICAgIGNhc2UgQmxvYkxvYWRlckZhaWxlZDoKKyAg
ICAgICAgICAgIG1fb3V0Z29pbmdCbG9iUXVldWUucHJlcGVuZChibG9iLnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBCbG9iTG9hZGVyRmluaXNoZWQ6IHsK
KyAgICAgICAgICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gcmVzdWx0ID0gbV9ibG9iTG9hZGVyLT5h
cnJheUJ1ZmZlclJlc3VsdCgpOworICAgICAgICAgICAgbV9ibG9iTG9hZGVyLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX2Jsb2JMb2FkZXJTdGF0dXMgPSBCbG9iTG9hZGVyTm90U3RhcnRlZDsKKyAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgICAgICBzZW5kKHJlc3VsdC5yZWxl
YXNlKCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisjZW5kaWYKKwogY29uc3QgQXRvbWljU3RyaW5nJiBSVENEYXRhQ2hhbm5lbDo6aW50
ZXJmYWNlTmFtZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5pbnRlcmZhY2VG
b3JSVENEYXRhQ2hhbm5lbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDRGF0YUNoYW5uZWwuaAppbmRleCBmODU1YzkwZTQxOTZlNTJiMTkwYTU5ODA4NTNi
M2YxMDZhMzEwYWRhLi43MDVmYWVjOGViNWIyM2M0Y2VmYWYwNjIzZTI1NzM2NGRkMTI3NmMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFu
bmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hh
bm5lbC5oCkBAIC0yOCwxNyArMjgsMjQgQEAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCiAj
aW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJsb2I7CitjbGFzcyBGaWxlUmVh
ZGVyTG9hZGVyOwogY2xhc3MgUlRDRGF0YUNoYW5uZWxIYW5kbGVyOwogY2xhc3MgUlRDUGVlckNv
bm5lY3Rpb25IYW5kbGVyOwogCi1jbGFzcyBSVENEYXRhQ2hhbm5lbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJUQ0RhdGFDaGFubmVsPiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgUlRDRGF0YUNo
YW5uZWxIYW5kbGVyQ2xpZW50IHsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsIDogcHVibGljIFJlZkNv
dW50ZWQ8UlRDRGF0YUNoYW5uZWw+LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBSVENEYXRh
Q2hhbm5lbEhhbmRsZXJDbGllbnQKKyNpZiBFTkFCTEUoQkxPQikKKyAgICAsIHB1YmxpYyBGaWxl
UmVhZGVyTG9hZGVyQ2xpZW50CisjZW5kaWYKK3sKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSVENEYXRhQ2hhbm5lbD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBSVENQ
ZWVyQ29ubmVjdGlvbkhhbmRsZXIqLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBib29sIHJlbGlhYmxl
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UlRDRGF0YUNoYW5uZWw+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc093blB0cjxSVENEYXRhQ2hhbm5l
bEhhbmRsZXI+KTsKQEAgLTcwLDYgKzc3LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1
YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
IE9WRVJSSURFOwogCisjaWYgRU5BQkxFKEJMT0IpCisgICAgLy8gRmlsZVJlYWRlckxvYWRlckNs
aWVudCBmdW5jdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0TG9hZGluZygpOworICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoaW50IGVycm9yQ29kZSk7Cisj
ZW5kaWYKKwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8UlRDRGF0YUNoYW5uZWw+OjpyZWY7CiAgICAg
dXNpbmcgUmVmQ291bnRlZDxSVENEYXRhQ2hhbm5lbD46OmRlcmVmOwogCkBAIC03OSw2ICs5NCwx
MCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+KTsKICAgICB2b2lkIHNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZChUaW1lcjxSVENEYXRh
Q2hhbm5lbD4qKTsKIAorI2lmIEVOQUJMRShCTE9CKQorICAgIHZvaWQgcHJvY2Vzc091dGdvaW5n
QmxvYlF1ZXVlKCk7CisjZW5kaWYKKwogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCBF
dmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJn
ZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKQEAgLTEwMiwxMCArMTIxLDI3IEBAIHBy
aXZhdGU6CiAgICAgICAgIEJpbmFyeVR5cGVCbG9iLAogICAgICAgICBCaW5hcnlUeXBlQXJyYXlC
dWZmZXIKICAgICB9OworCisjaWYgRU5BQkxFKEJMT0IpCisgICAgZW51bSBCbG9iTG9hZGVyU3Rh
dHVzIHsKKyAgICAgICAgQmxvYkxvYWRlck5vdFN0YXJ0ZWQsCisgICAgICAgIEJsb2JMb2FkZXJT
dGFydGVkLAorICAgICAgICBCbG9iTG9hZGVyRmluaXNoZWQsCisgICAgICAgIEJsb2JMb2FkZXJG
YWlsZWQKKyAgICB9OworI2VuZGlmCisKICAgICBCaW5hcnlUeXBlIG1fYmluYXJ5VHlwZTsKIAog
ICAgIFRpbWVyPFJUQ0RhdGFDaGFubmVsPiBtX3NjaGVkdWxlZEV2ZW50VGltZXI7CiAgICAgVmVj
dG9yPFJlZlB0cjxFdmVudD4gPiBtX3NjaGVkdWxlZEV2ZW50czsKKworI2lmIEVOQUJMRShCTE9C
KQorICAgIC8vIEZJWE1FOiBMb2FkIHR3byBvciBtb3JlIEJsb2JzIHNpbXVsdGFuZW91c2x5IGZv
ciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgT3duUHRyPEZpbGVSZWFkZXJMb2FkZXI+IG1fYmxv
YkxvYWRlcjsKKyAgICBCbG9iTG9hZGVyU3RhdHVzIG1fYmxvYkxvYWRlclN0YXR1czsKKyAgICBE
ZXF1ZTxSZWZQdHI8QmxvYj4gPiBtX291dGdvaW5nQmxvYlF1ZXVlOworI2VuZGlmCiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGM5MDY5ZjdlNWUyNTA0Mjk2ZjdjODcyZjE3
YzY2NzZkYTUyYjczMy4uNTFlMDJkNWRiMzVjYTY4OTljMThkNzgwNDkzODkyMWZkMjlkY2JhMyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAzLTE4ICBMaSBZaW4gIDxsaS55aW5AaW50ZWwu
Y29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IG9mIHNlbmRpbmcgYmxvYiBkYXRhIGZvciBSVENE
YXRhQ2hhbm5lbC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMjMxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1k
YXRhY2hhbm5lbC1zZW5kYmxvYi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtc2VuZGJsb2IuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRh
Y2hhbm5lbC5odG1sOiBBZGQgZGVmYXVsdCB2YWx1ZSBjaGVja2luZyBvZiBiaW5hcnlUeXBlLgor
ICAgICAgICAqIGZhc3QvbWVkaWFzdHJlYW0vcmVzb3VyY2VzL1JUQ0RhdGFDaGFubmVsLXNlbmQt
ZmlsZS1ibG9iLnR4dDogQWRkZWQuCisKIDIwMTMtMDMtMTggIEtlaXNoaSBIYXR0b3JpICA8a2Vp
c2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIHRvdWNoIHN1cHBvcnQgdG8gdGhlIGNhbGVu
ZGFyIHBpY2tlcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLWV4cGVjdGVkLnR4dApp
bmRleCA2N2JlODgxN2QwOTM1ZTE3MzNmMTgyMTA5ZDQ4NDUzOTdiOWI3NmRhLi4yNjJiNDMxZTIx
MzA4NzliN2ZmMWNkYTRmYWRjYWEwOTRkYzIwZGM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRh
dGFjaGFubmVsLWV4cGVjdGVkLnR4dApAQCAtNSw2ICs1LDcgQEAgT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUKIAogUEFTUyBkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJsYWJlbDEiKTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCiBQQVNTIGRjLnJlbGlhYmxlIGlzIHRydWUKK1BBU1MgZGMuYmlu
YXJ5VHlwZSBpcyAiYmxvYiIKIFBBU1MgZGMgPSBwYy5jcmVhdGVEYXRhQ2hhbm5lbCgibGFiZWwy
Iiwge30pOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KIFBBU1MgZGMucmVsaWFibGUgaXMgdHJ1
ZQogUEFTUyBkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJsYWJlbDMiLCB7cmVsaWFibGU6dHJ1
ZX0pOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtc2VuZGJsb2ItZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1kYXRhY2hhbm5lbC1zZW5kYmxvYi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQyNDFhMDdk
Y2Y1YjhkMTJhZWRmMWQ3Y2Q3NGQ1YjZmNTNjZjU0MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwtc2Vu
ZGJsb2ItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAKKworVGVzdHMgUlRDRGF0YUNoYW5u
ZWwgc2VuZGluZyBibG9iIGRhdGEuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFT
UyBwYyBpcyBjb25uZWN0ZWQKK1BBU1MgZGMgPSBwYy5jcmVhdGVEYXRhQ2hhbm5lbCgibGFiZWwi
KTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGRjLnJlYWR5U3RhdGUgaXMgJ2Nvbm5l
Y3RpbmcnCitQQVNTIGRjX29ub3BlbiB3YXMgY2FsbGVkCitQQVNTIGRjLnJlYWR5U3RhdGUgaXMg
J29wZW4nCitQQVNTIGRjLmxhYmVsIGlzICdsYWJlbCcKK1BBU1MgZGMuc2VuZChibG9iKTsgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGRjX29ubWVzc2FnZV9ibG9iIHdhcyBjYWxsZWQK
K1BBU1MgZGF0YSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgQmxvYiBkYXRh
IHdhcyByZXZlaXZlZCBjb3JyZWN0bHkuCitQQVNTIGRjLnNlbmQoZmlsZUxpc3QuaXRlbSgwKSkg
ZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGRjX29ubWVzc2FnZV9maWxlIHdhcyBjYWxs
ZWQKK1BBU1MgZGF0YSBpbnN0YW5jZW9mIHdpbmRvdy5CbG9iIGlzIHRydWUKK1BBU1MgRmlsZSBk
YXRhIHdhcyByZXZlaXZlZCBjb3JyZWN0bHkuCitQQVNTIGRjLnNlbmQoZmlsZUxpc3QuaXRlbSgx
KSkgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIGRjX29uY2xvc2Ugd2FzIGNhbGxlZAor
UEFTUyBkYy5yZWFkeVN0YXRlIGlzICdjbG9zZWQnCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC1zZW5kYmxvYi5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5l
bC1zZW5kYmxvYi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjNTA4MDFjZDJjZTk5ZjUzZWMxYjQ1N2QzZDM2
ZWNlNDQ0MjU5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLXNlbmRibG9iLmh0bWwKQEAgLTAsMCAr
MSwxMzMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlucHV0IHR5cGU9ImZpbGUiIG11bHRp
cGxlIG9uY2hhbmdlPSJvbklucHV0RmlsZUNoYW5nZSh0aGlzLmZpbGVzKSI+Cis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbigiVGVzdHMgUlRDRGF0YUNoYW5uZWwgc2VuZGluZyBibG9iIGRhdGEuIik7CisK
K3ZhciBwYyA9IG51bGw7Cit2YXIgZGMgPSBudWxsOwordmFyIGRhdGE7Cit2YXIgYmxvYjsKK3Zh
ciBmaWxlTGlzdDsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCitmdW5jdGlvbiBj
cmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKSB7CisgICAgdmFyIGJsb2JEYXRh
ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytp
KQorICAgICAgICBibG9iRGF0YVtpXSA9IGk7CisgICAgcmV0dXJuIG5ldyBCbG9iKFtibG9iRGF0
YV0pOworfQorCitmdW5jdGlvbiBjaGVja1JlY2VpdmVkQmxvYkRhdGEoYXJyYXlCdWZmZXIpIHsK
KyAgICBpZiAoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCAhPSAyNTYpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShhcnJheUJ1ZmZlciwgMCwg
YXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1Njsg
KytpKSB7CisgICAgICAgIGlmIChyZXN1bHRbaV0gIT0gaSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIGRjX29ubWVzc2Fn
ZV9maWxlKGUpIHsKKyAgICB0ZXN0UGFzc2VkKCJkY19vbm1lc3NhZ2VfZmlsZSB3YXMgY2FsbGVk
Iik7CisgICAgZGF0YSA9IGUuZGF0YTsKKyAgICBzaG91bGRCZVRydWUoImRhdGEgaW5zdGFuY2Vv
ZiB3aW5kb3cuQmxvYiIpOworCisgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7Cisg
ICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHJlYWRlci5vbmxv
YWQgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBpZiAoZS50YXJnZXQucmVzdWx0ID09PSBl
dmVudC50YXJnZXQucmVzdWx0KSB7CisgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiRmlsZSBk
YXRhIHdhcyByZXZlaXZlZCBjb3JyZWN0bHkuIik7CisgICAgICAgICAgICAgICAgLy8gV2hlbiBi
bG9iIGNhbid0IGJlIGxvYWRlZCBzdWNjZXNzZnVsbHksIGRhdGEgY2hhbm5lbCBtdXN0IGJlIGNs
b3NlZC4KKyAgICAgICAgICAgICAgICBzaG91bGROb3RUaHJvdygiZGMuc2VuZChmaWxlTGlzdC5p
dGVtKDEpKSIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFp
bGVkKCJGaWxlIGRhdGEgc2hvdWxkIGJlIHJlY2VpdmVkIGNvcnJlY3RseS4iKTsKKyAgICAgICAg
ICAgICAgICBlbmRUZXN0KCk7CisgICAgICAgICAgICB9ICAgCisgICAgICAgIH07CisgICAgICAg
IHJlYWRlci5yZWFkQXNUZXh0KGZpbGVMaXN0Lml0ZW0oMCkpOworICAgIH07CisgICAgcmVhZGVy
LnJlYWRBc1RleHQoZGF0YSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RTZW5kRmlsZUJsb2IoKSB7Cisg
ICAgZGMub25tZXNzYWdlID0gZGNfb25tZXNzYWdlX2ZpbGU7CisgICAgc2hvdWxkTm90VGhyb3co
ImRjLnNlbmQoZmlsZUxpc3QuaXRlbSgwKSkiKTsKK30KKworZnVuY3Rpb24gZGNfb25tZXNzYWdl
X2Jsb2IoZSkgeworICAgIHRlc3RQYXNzZWQoImRjX29ubWVzc2FnZV9ibG9iIHdhcyBjYWxsZWQi
KTsKKyAgICBkYXRhID0gZS5kYXRhOworICAgIHNob3VsZEJlVHJ1ZSgiZGF0YSBpbnN0YW5jZW9m
IHdpbmRvdy5CbG9iIik7CisgICAgCisgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7
CisgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChjaGVj
a1JlY2VpdmVkQmxvYkRhdGEoZXZlbnQudGFyZ2V0LnJlc3VsdCkpIHsKKyAgICAgICAgICAgIHRl
c3RQYXNzZWQoIkJsb2IgZGF0YSB3YXMgcmV2ZWl2ZWQgY29ycmVjdGx5LiIpOworICAgICAgICAg
ICAgdGVzdFNlbmRGaWxlQmxvYigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVz
dEZhaWxlZCgiQmxvYiBkYXRhIHNob3VsZCBiZSByZWNlaXZlZCBjb3JyZWN0bHkiKTsKKyAgICAg
ICAgICAgIGVuZFRlc3QoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgcmVhZGVyLnJlYWRBc0Fy
cmF5QnVmZmVyKGRhdGEpOworfQorCitmdW5jdGlvbiBkY19vbmNsb3NlKCkgeworICAgIHRlc3RQ
YXNzZWQoImRjX29uY2xvc2Ugd2FzIGNhbGxlZCIpOworICAgIHNob3VsZEJlKCJkYy5yZWFkeVN0
YXRlIiwgIidjbG9zZWQnIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworZnVuY3Rpb24g
ZGNfb25vcGVuKCkgeworICAgIHRlc3RQYXNzZWQoImRjX29ub3BlbiB3YXMgY2FsbGVkIik7Cisg
ICAgc2hvdWxkQmUoImRjLnJlYWR5U3RhdGUiLCAiJ29wZW4nIik7CisgICAgc2hvdWxkQmUoImRj
LmxhYmVsIiwgIidsYWJlbCciKTsKKworICAgIGRjLm9ubWVzc2FnZSA9IGRjX29ubWVzc2FnZV9i
bG9iOworICAgIGJsb2IgPSBjcmVhdGVCbG9iQ29udGFpbmluZ0FsbERpc3RpbmN0Qnl0ZXMoKTsK
KyAgICBzaG91bGROb3RUaHJvdygiZGMuc2VuZChibG9iKTsiKTsKK30KKworZnVuY3Rpb24gcGNf
b25pY2VjaGFuZ2UoKSB7CisgICAgaWYgKHBjLmljZUNvbm5lY3Rpb25TdGF0ZSA9PT0gImNvbXBs
ZXRlZCIpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgicGMgaXMgY29ubmVjdGVkIik7CisgICAgICAg
IHNob3VsZE5vdFRocm93KCdkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJsYWJlbCIpOycpOwor
ICAgICAgICBzaG91bGRCZSgiZGMucmVhZHlTdGF0ZSIsICInY29ubmVjdGluZyciKTsKKyAgICAg
ICAgZGMub25vcGVuID0gZGNfb25vcGVuOworICAgICAgICBkYy5vbmNsb3NlID0gZGNfb25jbG9z
ZTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3QoKSB7CisgICAgZGMub25jbG9zZSA9IGRj
X29uY2xvc2U7CisgICAgZGMuY2xvc2UoKTsKK30KKworZnVuY3Rpb24gb25JbnB1dEZpbGVDaGFu
Z2UoZmlsZXMpIHsKKyAgICBmaWxlTGlzdCA9IGZpbGVzOworICAgIHBjID0gbmV3IHdlYmtpdFJU
Q1BlZXJDb25uZWN0aW9uKG51bGwsIG51bGwpOworICAgIHBjLm9uaWNlY2hhbmdlID0gcGNfb25p
Y2VjaGFuZ2U7Cit9CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVudFNlbmRl
ci5iZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvUlRDRGF0YUNoYW5uZWwtc2VuZC1maWxl
LWJsb2IudHh0IiwgInJlc291cmNlcy9ub24tZXhpc3RlbmNlIl0pOworICAgIGV2ZW50U2VuZGVy
Lm1vdXNlTW92ZVRvKDEwLCAxMCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworfQorCis8
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tZGF0YWNoYW5uZWwuaHRtbApp
bmRleCAxMmVkNzY2MDExNGFiM2MxYTM2NmE1YzdhN2I3MDYyMWQ0Mjk2MWJkLi45ZmMzOTRhNzUz
ZjI1YTQ5M2ZjMTE0Y2ZhNWI3NTJkMTU0YTBhMDI1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5l
bC5odG1sCkBAIC04NCw2ICs4NCw3IEBAIGZ1bmN0aW9uIHBjX29uaWNlY2hhbmdlKCkgewogcGMg
PSBuZXcgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24obnVsbCwgbnVsbCk7CiBzaG91bGROb3RUaHJv
dygnZGMgPSBwYy5jcmVhdGVEYXRhQ2hhbm5lbCgibGFiZWwxIik7Jyk7CiBzaG91bGRCZSgiZGMu
cmVsaWFibGUiLCAidHJ1ZSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkYy5iaW5hcnlUeXBl
IiwgImJsb2IiKTsKIHNob3VsZE5vdFRocm93KCdkYyA9IHBjLmNyZWF0ZURhdGFDaGFubmVsKCJs
YWJlbDIiLCB7fSk7Jyk7CiBzaG91bGRCZSgiZGMucmVsaWFibGUiLCAidHJ1ZSIpOwogc2hvdWxk
Tm90VGhyb3coJ2RjID0gcGMuY3JlYXRlRGF0YUNoYW5uZWwoImxhYmVsMyIsIHtyZWxpYWJsZTp0
cnVlfSk7Jyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhc3RyZWFtL3Jlc291
cmNlcy9SVENEYXRhQ2hhbm5lbC1zZW5kLWZpbGUtYmxvYi50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhc3RyZWFtL3Jlc291cmNlcy9SVENEYXRhQ2hhbm5lbC1zZW5kLWZpbGUtYmxvYi50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWY1NjI2YjRhMTE0YWJjYjgyZDYzZGI3YzgwODJjM2M0NzU2ZTUxYgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWFzdHJlYW0vcmVzb3VyY2VzL1JU
Q0RhdGFDaGFubmVsLXNlbmQtZmlsZS1ibG9iLnR4dApAQCAtMCwwICsxIEBACitIZWxsbywgd29y
bGQhCg==
</data>
<flag name="review"
          id="215411"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>