<?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>110778</bug_id>
          
          <creation_ts>2013-02-25 11:43:21 -0800</creation_ts>
          <short_desc>Unlock partially decoded images after passing them to the ImageDecodingStore</short_desc>
          <delta_ts>2013-02-27 14:51:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Min Qin">qinmin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>hclam</cc>
    
    <cc>jamesr</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>841154</commentid>
    <comment_count>0</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2013-02-25 11:43:21 -0800</bug_when>
    <thetext>Unlock partially decoded images after passing them to the ImageDecodingStore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841162</commentid>
    <comment_count>1</comment_count>
      <attachid>190101</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2013-02-25 11:48:56 -0800</bug_when>
    <thetext>Created attachment 190101
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841173</commentid>
    <comment_count>2</comment_count>
      <attachid>190101</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-25 12:03:41 -0800</bug_when>
    <thetext>Comment on attachment 190101
Patch

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

Please move locking logic of ImageDecoder into ImageDecodingStore. ImageFrameGenerator shouldn&apos;t know about the underlying, it should only know that when an entry is locked, all locked resources are ready to be used.

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:145
&gt; +        cachedDecoder-&gt;lockFrameBuffers();

You want to call this in ImageDecodingStore::lockCache() such that if lockFrameBuffers fails then a new decoder is created.

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:150
&gt; +            cachedDecoder-&gt;unlockFrameBuffers();

Move this to ImageDecodingStore as well.

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:178
&gt; +        decoder-&gt;unlockFrameBuffers();

Move this to ImageDecodingStore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841194</commentid>
    <comment_count>3</comment_count>
      <attachid>190101</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2013-02-25 12:32:47 -0800</bug_when>
    <thetext>Comment on attachment 190101
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:145
&gt;&gt; +        cachedDecoder-&gt;lockFrameBuffers();
&gt; 
&gt; You want to call this in ImageDecodingStore::lockCache() such that if lockFrameBuffers fails then a new decoder is created.

The lockFrameBuffers() will not fail here. We reach here only if ImageDecodingStore::lockCache() succeeds. Since that call will lock the DiscardablePixelRef, so lockFrameBuffers() will not fail. It only increments the pixelref lock count by 1.
Maybe I should add a comment to mention that the FrameBuffer is already locked when this gets called, so we are safe to use the same decoder.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:150
&gt;&gt; +            cachedDecoder-&gt;unlockFrameBuffers();
&gt; 
&gt; Move this to ImageDecodingStore as well.

same reason

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:178
&gt;&gt; +        decoder-&gt;unlockFrameBuffers();
&gt; 
&gt; Move this to ImageDecodingStore.

same reason, we are safe to call this here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841340</commentid>
    <comment_count>4</comment_count>
      <attachid>190101</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2013-02-25 15:19:46 -0800</bug_when>
    <thetext>Comment on attachment 190101
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:145
&gt;&gt;&gt; +        cachedDecoder-&gt;lockFrameBuffers();
&gt;&gt; 
&gt;&gt; You want to call this in ImageDecodingStore::lockCache() such that if lockFrameBuffers fails then a new decoder is created.
&gt; 
&gt; The lockFrameBuffers() will not fail here. We reach here only if ImageDecodingStore::lockCache() succeeds. Since that call will lock the DiscardablePixelRef, so lockFrameBuffers() will not fail. It only increments the pixelref lock count by 1.
&gt; Maybe I should add a comment to mention that the FrameBuffer is already locked when this gets called, so we are safe to use the same decoder.

One more thing: ImageDecodingStore doesn&apos;t know the status of the decoding, while ImageFrameGenerator keeps track of the decoding status.
If we lock the frameBuffer inside lockCache(), imageDecodingStore will have a problem to determine when to unlock the framebuffer. The next call can be either unlockCache, insertAndLockCache, or overwriteAndLockCache.
Since this lock is associated with decoder, i think it should belong to ImageFrameGenerator, not the ImageDecodingStore. ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843266</commentid>
    <comment_count>5</comment_count>
      <attachid>190101</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-27 11:02:48 -0800</bug_when>
    <thetext>Comment on attachment 190101
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:145
&gt;&gt;&gt;&gt; +        cachedDecoder-&gt;lockFrameBuffers();
&gt;&gt;&gt; 
&gt;&gt;&gt; You want to call this in ImageDecodingStore::lockCache() such that if lockFrameBuffers fails then a new decoder is created.
&gt;&gt; 
&gt;&gt; The lockFrameBuffers() will not fail here. We reach here only if ImageDecodingStore::lockCache() succeeds. Since that call will lock the DiscardablePixelRef, so lockFrameBuffers() will not fail. It only increments the pixelref lock count by 1.
&gt;&gt; Maybe I should add a comment to mention that the FrameBuffer is already locked when this gets called, so we are safe to use the same decoder.
&gt; 
&gt; One more thing: ImageDecodingStore doesn&apos;t know the status of the decoding, while ImageFrameGenerator keeps track of the decoding status.
&gt; If we lock the frameBuffer inside lockCache(), imageDecodingStore will have a problem to determine when to unlock the framebuffer. The next call can be either unlockCache, insertAndLockCache, or overwriteAndLockCache.
&gt; Since this lock is associated with decoder, i think it should belong to ImageFrameGenerator, not the ImageDecodingStore. ideas?

This is probably okay for now for single frame images but won&apos;t work well for multiframe images.

Please add a comment here to explain why this call is safe and that it only works for single frame images. I would even do this:

bool frameBuffersLocked = cacheDecoder-&gt;lockFrameBuffers();
ASSERT_UNUSED(frameBuffersLocked, frameBuffersLocked);

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:150
&gt;&gt;&gt; +            cachedDecoder-&gt;unlockFrameBuffers();
&gt;&gt; 
&gt;&gt; Move this to ImageDecodingStore as well.
&gt; 
&gt; same reason

Also add an explanation here why unlock is needed. The reason here is because ImageDecodingStore deletes the ImageDecoder if image is complete.

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:178
&gt;&gt;&gt; +        decoder-&gt;unlockFrameBuffers();
&gt;&gt; 
&gt;&gt; Move this to ImageDecodingStore.
&gt; 
&gt; same reason, we are safe to call this here.

Same here, add explanation please.

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:426
&gt; +        virtual void lockFrameBuffers()

Can you change this to bool? It returns true if all frames are locked, false otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843268</commentid>
    <comment_count>6</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-27 11:03:34 -0800</bug_when>
    <thetext>I&apos;m okay to keep this change simple and leave the problems for multiframe images later.

A few more changes and this is good to go! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843373</commentid>
    <comment_count>7</comment_count>
      <attachid>190576</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2013-02-27 12:22:11 -0800</bug_when>
    <thetext>Created attachment 190576
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843376</commentid>
    <comment_count>8</comment_count>
      <attachid>190101</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2013-02-27 12:23:27 -0800</bug_when>
    <thetext>Comment on attachment 190101
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:145
&gt;&gt;&gt;&gt;&gt; +        cachedDecoder-&gt;lockFrameBuffers();
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; You want to call this in ImageDecodingStore::lockCache() such that if lockFrameBuffers fails then a new decoder is created.
&gt;&gt;&gt; 
&gt;&gt;&gt; The lockFrameBuffers() will not fail here. We reach here only if ImageDecodingStore::lockCache() succeeds. Since that call will lock the DiscardablePixelRef, so lockFrameBuffers() will not fail. It only increments the pixelref lock count by 1.
&gt;&gt;&gt; Maybe I should add a comment to mention that the FrameBuffer is already locked when this gets called, so we are safe to use the same decoder.
&gt;&gt; 
&gt;&gt; One more thing: ImageDecodingStore doesn&apos;t know the status of the decoding, while ImageFrameGenerator keeps track of the decoding status.
&gt;&gt; If we lock the frameBuffer inside lockCache(), imageDecodingStore will have a problem to determine when to unlock the framebuffer. The next call can be either unlockCache, insertAndLockCache, or overwriteAndLockCache.
&gt;&gt; Since this lock is associated with decoder, i think it should belong to ImageFrameGenerator, not the ImageDecodingStore. ideas?
&gt; 
&gt; This is probably okay for now for single frame images but won&apos;t work well for multiframe images.
&gt; 
&gt; Please add a comment here to explain why this call is safe and that it only works for single frame images. I would even do this:
&gt; 
&gt; bool frameBuffersLocked = cacheDecoder-&gt;lockFrameBuffers();
&gt; ASSERT_UNUSED(frameBuffersLocked, frameBuffersLocked);

Done.

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:150
&gt;&gt;&gt;&gt; +            cachedDecoder-&gt;unlockFrameBuffers();
&gt;&gt;&gt; 
&gt;&gt;&gt; Move this to ImageDecodingStore as well.
&gt;&gt; 
&gt;&gt; same reason
&gt; 
&gt; Also add an explanation here why unlock is needed. The reason here is because ImageDecodingStore deletes the ImageDecoder if image is complete.

Done.

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:178
&gt;&gt;&gt;&gt; +        decoder-&gt;unlockFrameBuffers();
&gt;&gt;&gt; 
&gt;&gt;&gt; Move this to ImageDecodingStore.
&gt;&gt; 
&gt;&gt; same reason, we are safe to call this here.
&gt; 
&gt; Same here, add explanation please.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:426
&gt;&gt; +        virtual void lockFrameBuffers()
&gt; 
&gt; Can you change this to bool? It returns true if all frames are locked, false otherwise.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843457</commentid>
    <comment_count>9</comment_count>
      <attachid>190576</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-27 13:42:02 -0800</bug_when>
    <thetext>Comment on attachment 190576
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843458</commentid>
    <comment_count>10</comment_count>
    <who name="Min Qin">qinmin</who>
    <bug_when>2013-02-27 13:42:58 -0800</bug_when>
    <thetext>Stephen, would you please take a look? Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843469</commentid>
    <comment_count>11</comment_count>
      <attachid>190576</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-02-27 13:53:38 -0800</bug_when>
    <thetext>Comment on attachment 190576
Patch

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

Pretty much a rubber-stamp.  r=me

&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:157
&gt; +        // ImageDecodingStore should have deleted the decoder here.

Nit:  Is this something worth asserting in code of instead of in a comment, if possible?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843490</commentid>
    <comment_count>12</comment_count>
      <attachid>190576</attachid>
    <who name="Min Qin">qinmin</who>
    <bug_when>2013-02-27 14:09:10 -0800</bug_when>
    <thetext>Comment on attachment 190576
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/ImageFrameGenerator.cpp:157
&gt;&gt; +        // ImageDecodingStore should have deleted the decoder here.
&gt; 
&gt; Nit:  Is this something worth asserting in code of instead of in a comment, if possible?

hmm... probably this is not a good place to put the assertion. The cachedDecoder here is a dumb pointer. In order to check whether the decoder is deleted, we have to call lockCache() again. But that would break the lock/unlock situation.
An alternative is to put the assertion check into overwriteAndLockCache(). But the logic is already pretty straightforward inside that function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843530</commentid>
    <comment_count>13</comment_count>
      <attachid>190576</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-27 14:51:26 -0800</bug_when>
    <thetext>Comment on attachment 190576
Patch

Clearing flags on attachment: 190576

Committed r144242: &lt;http://trac.webkit.org/changeset/144242&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843531</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-27 14:51:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190101</attachid>
            <date>2013-02-25 11:48:56 -0800</date>
            <delta_ts>2013-02-27 12:23:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110778-20130225114512.patch</filename>
            <type>text/plain</type>
            <size>15538</size>
            <attacher name="Min Qin">qinmin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzNjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjBiMWViNWYzYmM5YjU3
OTczZWE2MDY3ODNmYzBmYjcwNjZkNzlmZC4uMDkxZTg3MjQ4MTA3YjFmNTc4MzA1MTRlNzNkODRh
MTNhNDRhZmFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTAyLTI1ICBNaW4g
UWluICA8cWlubWluQGNocm9taXVtLm9yZz4KKworICAgICAgICBVbmxvY2sgcGFydGlhbGx5IGRl
Y29kZWQgaW1hZ2VzIGFmdGVyIHBhc3NpbmcgdGhlbSB0byB0aGUgSW1hZ2VEZWNvZGluZ1N0b3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA3NzgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb3IgcGFy
dGlhbGx5IGRlY29kZWQgaW1hZ2VzLCB3ZSBuZWVkIHRvIHVubG9jayB0aGVtIHNvIHRoYXQgdGhl
IG1lbW9yeSBjYW4gYmUgZnJlZWQuCisgICAgICAgIFRoaXMgY2hhbmdlIHVubG9ja3MgYWxsIHRo
ZSBpbWFnZSBmcmFtZXMgYWZ0ZXIgdGhleSBhcmUgcGFzc2VkIHRvIEltYWdlRGVjb2RpbmdTdG9y
ZS4KKyAgICAgICAgVW5pdCB0ZXN0cyBhcmUgYWRkZWQgaW4gSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRv
UmVzdW1lRGVjb2RlQW5kU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVy
YXRvcjo6dHJ5VG9EZWNvZGVBbmRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
R2VuZXJhdG9yOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oOgorICAgICAgICAoSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6bG9ja0ZyYW1lQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OnVubG9ja0ZyYW1lQnVmZmVycyk6CisKIDIwMTMtMDItMjEgIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBUaHJlYWRlZCBIVE1MIFBhcnNlciBmYWls
cyBmYXN0L2RvbS9Eb2N1bWVudC9yZWFkeXN0YXRlLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggMmUxM2JmYmEwM2NlY2IwOTNhYWRjY2E1MjhhNDdmMmUyYzFhYTdlNC4uNjUyODNi
MDFkNzY2YjhmMzNlYzM3MTU2NDMwYjhiM2Y0MTEwYTEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMy0wMi0yNSAgTWluIFFpbiAgPHFpbm1pbkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgVW5sb2NrIHBhcnRpYWxseSBkZWNvZGVkIGltYWdlcyBhZnRl
ciBwYXNzaW5nIHRoZW0gdG8gdGhlIEltYWdlRGVjb2RpbmdTdG9yZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwNzc4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdCBmb3IgdGVzdGluZyB0aGF0IGlt
YWdlIGZyYW1lcyBhcmUgdW5sb2NrZWQgYWZ0ZXIgcGFzc2luZyB0byBJbWFnZURlY29kaW5nU3Rv
cmUuCisKKyAgICAgICAgKiB0ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdDo6U2V0VXApOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmZyYW1lQnVmZmVyc1VubG9ja2VkKToK
KyAgICAgICAgKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVHZW5lcmF0b3JUZXN0OjpmcmFtZUJ1ZmZlcnNMb2NrZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VEZWNvZGVyQ2xpZW50OjpmcmFtZUJ1ZmZlcnNMb2NrZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2RlckNsaWVudDo6ZnJhbWVCdWZmZXJz
VW5sb2NrZWQpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0ltYWdlRGVjb2Rlcjo6dW5sb2NrRnJh
bWVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXI6OmxvY2tGcmFt
ZUJ1ZmZlcnMpOgorICAgICAgICAoTW9ja0ltYWdlRGVjb2Rlcik6CisKIDIwMTMtMDItMjEgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQuICBSb2xsZWQgQ2hyb21pdW0gREVQUyB0byByMTgzOTA1LiAgUmVxdWVzdGVkIGJ5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUZyYW1lR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCmluZGV4IGQzNGY1NDZjMWY3OTQwMDdiYTIz
ZjExNDMwMmVlM2ViNmQxMzkxM2IuLjhiN2JjMTkxYjUyMWQ3ZTU2YjY0MjgyMDVkZTIzNTRmMTRk
ZjQ4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwCkBAIC0xNDIsOSArMTQy
LDEyIEBAIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIEltYWdlRnJhbWVHZW5lcmF0b3I6OnRy
eVRvUmVzdW1lRGVjb2RlQW5kU2NhbGUoY29uc3QKICAgICBBU1NFUlQoY2FjaGVkRGVjb2Rlcik7
CiAKICAgICBpZiAobV9kYXRhLmhhc05ld0RhdGEoKSkgeworICAgICAgICBjYWNoZWREZWNvZGVy
LT5sb2NrRnJhbWVCdWZmZXJzKCk7CiAgICAgICAgIC8vIE9ubHkgZG8gZGVjb2RpbmcgaWYgdGhl
cmUgaXMgbmV3IGRhdGEuCiAgICAgICAgIE93blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBmdWxs
U2l6ZUltYWdlID0gZGVjb2RlKCZjYWNoZWREZWNvZGVyKTsKICAgICAgICAgY2FjaGVkSW1hZ2Ug
PSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPm92ZXJ3cml0ZUFuZExvY2tDYWNoZSh0
aGlzLCBjYWNoZWRJbWFnZSwgZnVsbFNpemVJbWFnZS5yZWxlYXNlKCkpOworICAgICAgICBpZiAo
IWNhY2hlZEltYWdlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBjYWNoZWREZWNvZGVyLT51
bmxvY2tGcmFtZUJ1ZmZlcnMoKTsKICAgICB9CiAKICAgICBpZiAobV9mdWxsU2l6ZSA9PSBzY2Fs
ZWRTaXplKQpAQCAtMTcxLDYgKzE3NCw4IEBAIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIElt
YWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRvRGVjb2RlQW5kU2NhbGUoY29uc3QgU2tJU2l6CiAKICAg
ICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBjYWNoZWRGdWxsU2l6ZUltYWdlID0gSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5pbnNlcnRBbmRMb2NrQ2FjaGUoCiAgICAgICAgIHRo
aXMsIGZ1bGxTaXplSW1hZ2UucmVsZWFzZSgpLCBkZWNvZGVyQ29udGFpbmVyLnJlbGVhc2UoKSk7
CisgICAgaWYgKCFjYWNoZWRGdWxsU2l6ZUltYWdlLT5pc0NvbXBsZXRlKCkpCisgICAgICAgIGRl
Y29kZXItPnVubG9ja0ZyYW1lQnVmZmVycygpOwogCiAgICAgaWYgKG1fZnVsbFNpemUgPT0gc2Nh
bGVkU2l6ZSkKICAgICAgICAgcmV0dXJuIGNhY2hlZEZ1bGxTaXplSW1hZ2U7CkBAIC0yMDEsOSAr
MjA2LDggQEAgUGFzc093blB0cjxTY2FsZWRJbWFnZUZyYWdtZW50PiBJbWFnZUZyYW1lR2VuZXJh
dG9yOjpkZWNvZGUoSW1hZ2VEZWNvZGVyKiogZGVjb2QKICAgICAoKmRlY29kZXIpLT5zZXREYXRh
KGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgLy8gSWYgdGhpcyBjYWxsIHJldHVybnMgYSBu
ZXdseSBhbGxvY2F0ZWQgRGlzY2FyZGFibGVQaXhlbFJlZiwgdGhlbgogICAgIC8vIEltYWdlRnJh
bWU6Om1fYml0bWFwIGFuZCB0aGUgY29udGFpbmVkIERpc2NhcmRhYmxlUGl4ZWxSZWYgYXJlIGxv
Y2tlZC4KLSAgICAvLyBUaGV5IHdpbGwgYmUgdW5sb2NrZWQgd2hlbiBJbWFnZURlY29kZXIgaXMg
ZGVzdHJveWVkIHNpbmNlIEltYWdlRGVjb2RlcgotICAgIC8vIG93bnMgdGhlIEltYWdlRnJhbWUu
IFBhcnRpYWxseSBkZWNvZGVkIFNrQml0bWFwIGlzIHRodXMgaW5zZXJ0ZWQgaW50byB0aGUKLSAg
ICAvLyBJbWFnZURlY29kaW5nU3RvcmUgd2hpbGUgbG9ja2VkLgorICAgIC8vIFRoZXkgd2lsbCBi
ZSB1bmxvY2tlZCBhZnRlciB0aGUgaW1hZ2UgZnJhZ21lbnQgaXMgaW5zZXJ0ZWQgaW50bworICAg
IC8vIEltYWdlRGVjb2RpbmdTdG9yZS4KICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9ICgqZGVjb2Rl
ciktPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKICAgICAoKmRlY29kZXIpLT5zZXREYXRhKDAsIGZh
bHNlKTsgLy8gVW5yZWYgU2hhcmVkQnVmZmVyIGZyb20gSW1hZ2VEZWNvZGVyLgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
CmluZGV4IDJlMGI1N2YxZDIzMTM1OTJjM2Q4NjQ3MzllM2I0YTJjYjVkNDk5OTMuLjQ3ZDVlYzhk
NjU5Y2UzZWIzYmY4ZjAyNWYyMGM2NWJmNzAyYTFhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC00MjIsNiAr
NDIyLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICBtX2ZyYW1lQnVm
ZmVyQ2FjaGUucmVzaXplKDEpOwogICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNl
dE1lbW9yeUFsbG9jYXRvcihhbGxvY2F0b3IpOwogICAgICAgICB9CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIGxvY2tGcmFtZUJ1ZmZlcnMoKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5nZXRTa0JpdG1hcCgpLmxvY2tQaXhlbHMo
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCB1bmxvY2tGcmFtZUJ1ZmZlcnMo
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mcmFt
ZUJ1ZmZlckNhY2hlLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJD
YWNoZVtpXS5nZXRTa0JpdG1hcCgpLnVubG9ja1BpeGVscygpOworICAgICAgICB9CiAjZW5kaWYK
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ltYWdlRnJhbWVH
ZW5lcmF0b3JUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFt
ZUdlbmVyYXRvclRlc3QuY3BwCmluZGV4IDExM2Q3ODgxNmVkMWQ5MTJlYjUxMzY4YTdhOGZmODE4
ODIyMTVmMzkuLjU5ODNhNDM4OTkxZjI2OTQ2ZTk5MzE3NzYzZjQ1YTk3ZGZhZTk4YjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVy
YXRvclRlc3QuY3BwCkBAIC03Myw2ICs3Myw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9nZW5lcmF0
b3ItPnNldEltYWdlRGVjb2RlckZhY3RvcnlGb3JUZXN0aW5nKE1vY2tJbWFnZURlY29kZXJGYWN0
b3J5OjpjcmVhdGUodGhpcykpOwogICAgICAgICBtX2RlY29kZXJzRGVzdHJveWVkID0gMDsKICAg
ICAgICAgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCA9IDA7CisgICAgICAgIG1fZnJhbWVCdWZm
ZXJMb2NrQ291bnQgPSAwOworICAgICAgICBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291bnQgPSAwOwog
ICAgICAgICBtX2ZyYW1lU3RhdHVzID0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eTsKICAgICB9CiAK
QEAgLTkxLDYgKzkzLDE2IEBAIHB1YmxpYzoKICAgICAgICAgKyttX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50OwogICAgIH0KIAorICAgIHZpcnR1YWwgdm9pZCBmcmFtZUJ1ZmZlcnNVbmxvY2tlZCgp
CisgICAgeworICAgICAgICArK21fZnJhbWVCdWZmZXJVbmxvY2tDb3VudDsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVCdWZmZXJzTG9ja2VkKCkKKyAgICB7CisgICAgICAgICsrbV9m
cmFtZUJ1ZmZlckxvY2tDb3VudDsKKyAgICB9CisKICAgICB2aXJ0dWFsIEltYWdlRnJhbWU6OkZy
YW1lU3RhdHVzIGZyYW1lU3RhdHVzKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ZyYW1lU3Rh
dHVzOwpAQCAtMTE3LDYgKzEyOSw4IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8SW1hZ2VGcmFt
ZUdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CiAgICAgaW50IG1fZGVjb2RlcnNEZXN0cm95ZWQ7CiAg
ICAgaW50IG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7CisgICAgaW50IG1fZnJhbWVCdWZmZXJM
b2NrQ291bnQ7CisgICAgaW50IG1fZnJhbWVCdWZmZXJVbmxvY2tDb3VudDsKICAgICBJbWFnZUZy
YW1lOjpGcmFtZVN0YXR1cyBtX2ZyYW1lU3RhdHVzOwogfTsKIApAQCAtMTQxLDYgKzE1NSw3IEBA
IFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVIaXQpCiAgICAgRVhQRUNUX1RS
VUUobV9nZW5lcmF0b3ItPmhhc0FscGhhKCkpOwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CiAgICAg
RVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUSgw
LCBtX2ZyYW1lQnVmZmVyTG9ja0NvdW50KTsKIH0KIAogVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0
b3JUZXN0LCBjYWNoZU1pc3NXaXRoU2NhbGUpCkBAIC0xNjQsNiArMTc5LDggQEAgVEVTVF9GKElt
YWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoU2NhbGUpCiAgICAgRVhQRUNUX1RS
VUUobV9nZW5lcmF0b3ItPmhhc0FscGhhKCkpOwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5z
dGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CiAgICAg
RVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUSgw
LCBtX2ZyYW1lQnVmZmVyTG9ja0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZl
clVubG9ja0NvdW50KTsKIH0KIAogVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNo
ZU1pc3NXaXRoRGVjb2RlQW5kU2NhbGUpCkBAIC0xNzMsNiArMTkwLDggQEAgVEVTVF9GKEltYWdl
RnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoRGVjb2RlQW5kU2NhbGUpCiAgICAgLy8g
Q2FjaGUgbWlzcy4KICAgICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiBzY2FsZWRJbWFnZSA9
IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShzY2FsZWRTaXplKCkpOwogICAgIEVYUEVDVF9F
USgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFt
ZUJ1ZmZlckxvY2tDb3VudCk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJVbmxvY2tD
b3VudCk7CiAgICAgRVhQRUNUX0VRKHNjYWxlZFNpemUoKSwgc2NhbGVkSW1hZ2UtPnNjYWxlZFNp
emUoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG1fZ2VuZXJhdG9yLT5oYXNBbHBoYSgpKTsKICAgICBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdl
dCgpLCBzY2FsZWRJbWFnZSk7CkBAIC0xOTIsNiArMjExLDggQEAgVEVTVF9GKEltYWdlRnJhbWVH
ZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoRGVjb2RlQW5kU2NhbGUpCiAgICAgRVhQRUNUX0ZB
TFNFKG1fZ2VuZXJhdG9yLT5oYXNBbHBoYSgpKTsKICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOwogICAg
IEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEo
MCwgbV9mcmFtZUJ1ZmZlckxvY2tDb3VudCk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZm
ZXJVbmxvY2tDb3VudCk7CiB9CiAKIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2Fj
aGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGUpCkBAIC0yMDEsNiArMjIyLDggQEAgVEVTVF9GKElt
YWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoSW5jb21wbGV0ZURlY29kZSkKICAg
ICBjb25zdCBTY2FsZWRJbWFnZUZyYWdtZW50KiB0ZW1wSW1hZ2U9IG1fZ2VuZXJhdG9yLT5kZWNv
ZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKICAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0Nv
bXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlckxvY2tDb3VudCk7CisgICAgRVhQRUNUX0VR
KDEsIG1fZnJhbWVCdWZmZXJVbmxvY2tDb3VudCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAg
ICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRy
aWVzKCkpOwogCkBAIC0yMDgsNiArMjMxLDggQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LCBjYWNoZU1pc3NXaXRoSW5jb21wbGV0ZURlY29kZSkKICAgICB0ZW1wSW1hZ2UgPSBtX2dl
bmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHRl
bXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKICAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJl
cXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJMb2NrQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291bnQpOwogICAgIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRl
bXBJbWFnZSk7CiAgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNl
KCktPmNhY2hlRW50cmllcygpKTsKICAgICBFWFBFQ1RfRVEoMCwgbV9kZWNvZGVyc0Rlc3Ryb3ll
ZCk7CkBAIC0yMjAsMTIgKzI0NSwxNiBAQCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Qs
IGNhY2hlTWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlTm9OZXdEYXRhKQogICAgIGNvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFnZT0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1
bGxTaXplKCkpOwogICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CiAg
ICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9F
USgwLCBtX2ZyYW1lQnVmZmVyTG9ja0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1
ZmZlclVubG9ja0NvdW50KTsKICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVu
bG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOwogICAgIEVYUEVDVF9FUSgx
dSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CiAKICAg
ICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKICAgICBFWFBFQ1RfRVEo
MSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJhbWVC
dWZmZXJMb2NrQ291bnQpOworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291
bnQpOwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9n
ZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CiAgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29k
aW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKICAgICBFWFBFQ1RfRVEoMCwg
bV9kZWNvZGVyc0Rlc3Ryb3llZCk7CkBAIC0yMzgsNiArMjY3LDggQEAgVEVTVF9GKEltYWdlRnJh
bWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoSW5jb21wbGV0ZURlY29kZUFuZFNjYWxlKQog
ICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIHRlbXBJbWFnZT0gbV9nZW5lcmF0b3ItPmRl
Y29kZUFuZFNjYWxlKHNjYWxlZFNpemUoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHRlbXBJbWFnZS0+
aXNDb21wbGV0ZSgpKTsKICAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3Vu
dCk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJMb2NrQ291bnQpOworICAgIEVYUEVD
VF9FUSgxLCBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291bnQpOwogICAgIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7
CiAgICAgRVhQRUNUX0VRKDJ1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hl
RW50cmllcygpKTsKIApAQCAtMjQ1LDYgKzI3Niw4IEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJh
dG9yVGVzdCwgY2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNvZGVBbmRTY2FsZSkKICAgICB0ZW1w
SW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsKICAgICBF
WFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgyLCBt
X2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZl
ckxvY2tDb3VudCk7CisgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJVbmxvY2tDb3VudCk7
CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVy
YXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAgICBFWFBFQ1RfRVEoMnUsIEltYWdlRGVjb2RpbmdT
dG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogICAgIEVYUEVDVF9FUSgwLCBtX2Rl
Y29kZXJzRGVzdHJveWVkKTsKQEAgLTI1OCw2ICsyOTEsOCBAQCBURVNUX0YoSW1hZ2VGcmFtZUdl
bmVyYXRvclRlc3QsIGluY29tcGxldGVEZWNvZGVCZWNvbWVzQ29tcGxldGUpCiAgICAgRVhQRUNU
X0ZBTFNFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKICAgICBFWFBFQ1RfRVEoMSwgbV9mcmFt
ZUJ1ZmZlclJlcXVlc3RDb3VudCk7CiAgICAgRVhQRUNUX0VRKDAsIG1fZGVjb2RlcnNEZXN0cm95
ZWQpOworICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1lQnVmZmVyTG9ja0NvdW50KTsKKyAgICBFWFBF
Q1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclVubG9ja0NvdW50KTsKICAgICBJbWFnZURlY29kaW5nU3Rv
cmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2Up
OwogICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNo
ZUVudHJpZXMoKSk7CiAKQEAgLTI2OCw2ICszMDMsOCBAQCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVy
YXRvclRlc3QsIGluY29tcGxldGVEZWNvZGVCZWNvbWVzQ29tcGxldGUpCiAgICAgRVhQRUNUX1RS
VUUodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVm
ZmVyUmVxdWVzdENvdW50KTsKICAgICBFWFBFQ1RfRVEoMSwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7
CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJMb2NrQ291bnQpOworICAgIEVYUEVDVF9F
USgxLCBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291bnQpOwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CiAg
ICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50
cmllcygpKTsKIApAQCAtMjg1LDYgKzMyMiw4IEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9y
VGVzdCwgaW5jb21wbGV0ZURlY29kZUFuZFNjYWxlQmVjb21lc0NvbXBsZXRlKQogICAgIEVYUEVD
VF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CiAgICAgRVhQRUNUX0VRKDEsIG1fZnJh
bWVCdWZmZXJSZXF1ZXN0Q291bnQpOwogICAgIEVYUEVDVF9FUSgwLCBtX2RlY29kZXJzRGVzdHJv
eWVkKTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlckxvY2tDb3VudCk7CisgICAgRVhQ
RUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJVbmxvY2tDb3VudCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0
b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdl
KTsKICAgICBFWFBFQ1RfRVEoMnUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2Fj
aGVFbnRyaWVzKCkpOwogCkBAIC0yOTUsNiArMzM0LDggQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5l
cmF0b3JUZXN0LCBpbmNvbXBsZXRlRGVjb2RlQW5kU2NhbGVCZWNvbWVzQ29tcGxldGUpCiAgICAg
RVhQRUNUX1RSVUUodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgyLCBt
X2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKICAgICBFWFBFQ1RfRVEoMSwgbV9kZWNvZGVyc0Rl
c3Ryb3llZCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJMb2NrQ291bnQpOworICAg
IEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291bnQpOwogICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJ
bWFnZSk7CiAgICAgRVhQRUNUX0VRKDJ1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCkt
PmNhY2hlRW50cmllcygpKTsKIApAQCAtMzI1LDYgKzM2Niw4IEBAIFRFU1RfRihJbWFnZUZyYW1l
R2VuZXJhdG9yVGVzdCwgaW5jb21wbGV0ZURlY29kZUJlY29tZXNDb21wbGV0ZU11bHRpVGhyZWFk
ZWQpCiAgICAgRVhQRUNUX0ZBTFNFKHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKICAgICBFWFBF
Q1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CiAgICAgRVhQRUNUX0VRKDAsIG1f
ZGVjb2RlcnNEZXN0cm95ZWQpOworICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1lQnVmZmVyTG9ja0Nv
dW50KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclVubG9ja0NvdW50KTsKICAgICBJ
bWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdl
dCgpLCB0ZW1wSW1hZ2UpOwogICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjpp
bnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CiAKQEAgLTMzNiwxMSArMzc5LDE1IEBAIFRFU1Rf
RihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgaW5jb21wbGV0ZURlY29kZUJlY29tZXNDb21wbGV0
ZU11bHRpVGhyZWFkZWQpCiAKICAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudCk7CiAgICAgRVhQRUNUX0VRKDEsIG1fZGVjb2RlcnNEZXN0cm95ZWQpOworICAgIEVYUEVD
VF9FUSgxLCBtX2ZyYW1lQnVmZmVyTG9ja0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFt
ZUJ1ZmZlclVubG9ja0NvdW50KTsKICAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9y
ZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogCiAgICAgdGVtcEltYWdlID0gbV9nZW5l
cmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOwogICAgIEVYUEVDVF9UUlVFKHRlbXBJ
bWFnZS0+aXNDb21wbGV0ZSgpKTsKICAgICBFWFBFQ1RfRVEoMiwgbV9mcmFtZUJ1ZmZlclJlcXVl
c3RDb3VudCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJMb2NrQ291bnQpOworICAg
IEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291bnQpOwogICAgIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJ
bWFnZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTW9j
a0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VE
ZWNvZGVyLmgKaW5kZXggYmEzNDIxNzhhYjMwOWZiOWYyZGFlNjQ5OTg4ZGY2MDIxZTJmNjIwMi4u
ODZiMjIzYjM3YjlmMGVjYTQ5ODQ0OGM2MmZlNzQwNDRiZjg2MDUwNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmgKQEAgLTMzLDYgKzMzLDgg
QEAgY2xhc3MgTW9ja0ltYWdlRGVjb2RlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGRlY29kZXJCZWluZ0Rlc3Ryb3llZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVC
dWZmZXJSZXF1ZXN0ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZyYW1lQnVmZmVyc0xvY2tl
ZCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBmcmFtZUJ1ZmZlcnNVbmxvY2tlZCgpIHsgfQogICAg
IHZpcnR1YWwgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgZnJhbWVTdGF0dXMoKSA9IDA7CiB9Owog
CkBAIC03NSw2ICs3Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF07CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIHVubG9ja0ZyYW1lQnVmZmVycygp
IHsgbV9jbGllbnQtPmZyYW1lQnVmZmVyc1VubG9ja2VkKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
bG9ja0ZyYW1lQnVmZmVycygpIHsgbV9jbGllbnQtPmZyYW1lQnVmZmVyc0xvY2tlZCgpOyB9CisK
ICAgICBpbnQgZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
QnVmZmVyUmVxdWVzdENvdW50OyB9CiAKIHByaXZhdGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190576</attachid>
            <date>2013-02-27 12:22:11 -0800</date>
            <delta_ts>2013-02-27 14:51:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-110778-20130227121824.patch</filename>
            <type>text/plain</type>
            <size>16521</size>
            <attacher name="Min Qin">qinmin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ0MDI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjE4YTQyNDJkZTQyZWI2
MDY5NjljZTc1MDYzN2NmNDFmZjkyN2RjZi4uZDZkMzRhOTc5YzY3OWJmOTUyZmE4ZTBkN2ZjYzQw
NmQyYWNkZDA2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTAyLTI1ICBNaW4g
UWluICA8cWlubWluQGNocm9taXVtLm9yZz4KKworICAgICAgICBVbmxvY2sgcGFydGlhbGx5IGRl
Y29kZWQgaW1hZ2VzIGFmdGVyIHBhc3NpbmcgdGhlbSB0byB0aGUgSW1hZ2VEZWNvZGluZ1N0b3Jl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTA3NzgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb3IgcGFy
dGlhbGx5IGRlY29kZWQgaW1hZ2VzLCB3ZSBuZWVkIHRvIHVubG9jayB0aGVtIHNvIHRoYXQgdGhl
IG1lbW9yeSBjYW4gYmUgZnJlZWQuCisgICAgICAgIFRoaXMgY2hhbmdlIHVubG9ja3MgYWxsIHRo
ZSBpbWFnZSBmcmFtZXMgYWZ0ZXIgdGhleSBhcmUgcGFzc2VkIHRvIEltYWdlRGVjb2RpbmdTdG9y
ZS4KKyAgICAgICAgVW5pdCB0ZXN0cyBhcmUgYWRkZWQgaW4gSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUZyYW1lR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0b3I6OnRyeVRv
UmVzdW1lRGVjb2RlQW5kU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVy
YXRvcjo6dHJ5VG9EZWNvZGVBbmRTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
R2VuZXJhdG9yOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oOgorICAgICAgICAoSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6bG9ja0ZyYW1lQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OnVubG9ja0ZyYW1lQnVmZmVycyk6CisKIDIwMTMtMDItMjYgIEVyaWMgU2VpZGVs
ICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFRocmVhZGVkIEhUTUwgcGFyc2VyIGZhaWxz
IGZhc3QvbG9hZGVyL3N0YXRlb2JqZWN0cy9zdGF0ZS1hdHRyaWJ1dGUtaGlzdG9yeS1nZXR0ZXIu
aHRtbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjOTk2MjA1M2RjZWNjYjZiNmEyODdl
OWI5OThjZjQzOGNmMTI2OGQ2Li43ZWMyZWRhOTRiNjQ1MTU2ZDdlODUyNGJhYTYzMTM5YzA1N2E0
MTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEzLTAy
LTI1ICBNaW4gUWluICA8cWlubWluQGNocm9taXVtLm9yZz4KKworICAgICAgICBVbmxvY2sgcGFy
dGlhbGx5IGRlY29kZWQgaW1hZ2VzIGFmdGVyIHBhc3NpbmcgdGhlbSB0byB0aGUgSW1hZ2VEZWNv
ZGluZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTA3NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0IGZvciB0ZXN0aW5nIHRoYXQgaW1hZ2UgZnJhbWVzIGFyZSB1bmxvY2tlZCBhZnRlciBw
YXNzaW5nIHRvIEltYWdlRGVjb2RpbmdTdG9yZS4KKworICAgICAgICAqIHRlc3RzL0ltYWdlRnJh
bWVHZW5lcmF0b3JUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVHZW5lcmF0
b3JUZXN0OjpTZXRVcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lR2VuZXJhdG9yVGVz
dDo6ZnJhbWVCdWZmZXJzVW5sb2NrZWQpOgorICAgICAgICAoSW1hZ2VGcmFtZUdlbmVyYXRvclRl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3Q6OmZyYW1lQnVm
ZmVyc0xvY2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAgICAqIHRlc3Rz
L01vY2tJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tJbWFnZURlY29kZXJD
bGllbnQ6OmZyYW1lQnVmZmVyc0xvY2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrSW1hZ2VE
ZWNvZGVyQ2xpZW50OjpmcmFtZUJ1ZmZlcnNVbmxvY2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrSW1hZ2VEZWNvZGVyOjp1bmxvY2tGcmFtZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0ltYWdlRGVjb2Rlcjo6bG9ja0ZyYW1lQnVmZmVycyk6CisgICAgICAgIChNb2NrSW1hZ2VE
ZWNvZGVyKToKKwogMjAxMy0wMi0yNiAgVGllbi1SZW4gQ2hlbiAgPHRyY2hlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgSW1wbGVtZW50IGNvb3JkaW5hdGVkIHNjcm9sbGJhciBmb3Igc3ViZnJh
bWVzIGFuZCBvdmVyZmxvdzpzY3JvbGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlRnJhbWVHZW5lcmF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAK
aW5kZXggZDM0ZjU0NmMxZjc5NDAwN2JhMjNmMTE0MzAyZWUzZWI2ZDEzOTEzYi4uNGRkNTIxNWQw
ZDYxZDY1MzIzNmE4M2ZkNTI2YmRhYzU5MTdlMzZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VGcmFtZUdl
bmVyYXRvci5jcHAKQEAgLTE0Miw5ICsxNDIsMjEgQEAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9SZXN1bWVEZWNvZGVBbmRTY2FsZShjb25zdAog
ICAgIEFTU0VSVChjYWNoZWREZWNvZGVyKTsKIAogICAgIGlmIChtX2RhdGEuaGFzTmV3RGF0YSgp
KSB7CisgICAgICAgIC8vIEZvciBzaW5nbGUgZnJhbWUgaW1hZ2VzLCB0aGUgYWJvdmUgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjpsb2NrQ2FjaGUoKQorICAgICAgICAvLyBjYWxsIHNob3VsZCBsb2NrIHRo
ZSBwaXhlbFJlZi4gQXMgYSByZXN1bHQsIHRoaXMgbG9ja0ZyYW1lQnVmZmVycygpCisgICAgICAg
IC8vIGNhbGwgc2hvdWxkIGFsd2F5cyBzdWNjZWVkLgorICAgICAgICAvLyBUT0RPOiB0aGlzIGRv
ZXMgbm90IHdvcmsgZm9yIHRoZSBtdWx0aWZyYW1lIGltYWdlcywgd2hpY2ggYXJlIG5vdAorICAg
ICAgICAvLyB5ZXQgc3VwcG9ydGVkIGJ5IHRoaXMgY2xhc3MuCisgICAgICAgIGJvb2wgZnJhbWVC
dWZmZXJzTG9ja2VkID0gY2FjaGVkRGVjb2Rlci0+bG9ja0ZyYW1lQnVmZmVycygpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGZyYW1lQnVmZmVyc0xvY2tlZCwgZnJhbWVCdWZmZXJzTG9ja2VkKTsK
ICAgICAgICAgLy8gT25seSBkbyBkZWNvZGluZyBpZiB0aGVyZSBpcyBuZXcgZGF0YS4KICAgICAg
ICAgT3duUHRyPFNjYWxlZEltYWdlRnJhZ21lbnQ+IGZ1bGxTaXplSW1hZ2UgPSBkZWNvZGUoJmNh
Y2hlZERlY29kZXIpOwogICAgICAgICBjYWNoZWRJbWFnZSA9IEltYWdlRGVjb2RpbmdTdG9yZTo6
aW5zdGFuY2UoKS0+b3ZlcndyaXRlQW5kTG9ja0NhY2hlKHRoaXMsIGNhY2hlZEltYWdlLCBmdWxs
U2l6ZUltYWdlLnJlbGVhc2UoKSk7CisgICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBwYXJ0aWFs
bHkgZGVjb2RlZCwgdW5sb2NrIHRoZSBmcmFtZXMgc28gdGhhdCBpdAorICAgICAgICAvLyBjYW4g
YmUgZXZpY3RlZCBmcm9tIHRoZSBtZW1vcnkuIEZvciBmdWxseSBkZWNvZGVkIGltYWdlcywKKyAg
ICAgICAgLy8gSW1hZ2VEZWNvZGluZ1N0b3JlIHNob3VsZCBoYXZlIGRlbGV0ZWQgdGhlIGRlY29k
ZXIgaGVyZS4KKyAgICAgICAgaWYgKCFjYWNoZWRJbWFnZS0+aXNDb21wbGV0ZSgpKQorICAgICAg
ICAgICAgY2FjaGVkRGVjb2Rlci0+dW5sb2NrRnJhbWVCdWZmZXJzKCk7CiAgICAgfQogCiAgICAg
aWYgKG1fZnVsbFNpemUgPT0gc2NhbGVkU2l6ZSkKQEAgLTE3MSw2ICsxODMsMTAgQEAgY29uc3Qg
U2NhbGVkSW1hZ2VGcmFnbWVudCogSW1hZ2VGcmFtZUdlbmVyYXRvcjo6dHJ5VG9EZWNvZGVBbmRT
Y2FsZShjb25zdCBTa0lTaXoKIAogICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQqIGNhY2hl
ZEZ1bGxTaXplSW1hZ2UgPSBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmluc2VydEFu
ZExvY2tDYWNoZSgKICAgICAgICAgdGhpcywgZnVsbFNpemVJbWFnZS5yZWxlYXNlKCksIGRlY29k
ZXJDb250YWluZXIucmVsZWFzZSgpKTsKKyAgICAvLyBUaGUgbmV3bHkgY3JlYXRlZCBTa0JpdG1h
cCBpbiB0aGUgZGVjb2RlciBpcyBsb2NrZWQuIFVubG9jayBpdCBoZXJlCisgICAgLy8gaWYgdGhl
IGltYWdlIGlzIHBhcnRpYWxseSBkZWNvZGVkLgorICAgIGlmICghY2FjaGVkRnVsbFNpemVJbWFn
ZS0+aXNDb21wbGV0ZSgpKQorICAgICAgICBkZWNvZGVyLT51bmxvY2tGcmFtZUJ1ZmZlcnMoKTsK
IAogICAgIGlmIChtX2Z1bGxTaXplID09IHNjYWxlZFNpemUpCiAgICAgICAgIHJldHVybiBjYWNo
ZWRGdWxsU2l6ZUltYWdlOwpAQCAtMjAxLDkgKzIxNyw4IEBAIFBhc3NPd25QdHI8U2NhbGVkSW1h
Z2VGcmFnbWVudD4gSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlKEltYWdlRGVjb2RlcioqIGRl
Y29kCiAgICAgKCpkZWNvZGVyKS0+c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOwogICAg
IC8vIElmIHRoaXMgY2FsbCByZXR1cm5zIGEgbmV3bHkgYWxsb2NhdGVkIERpc2NhcmRhYmxlUGl4
ZWxSZWYsIHRoZW4KICAgICAvLyBJbWFnZUZyYW1lOjptX2JpdG1hcCBhbmQgdGhlIGNvbnRhaW5l
ZCBEaXNjYXJkYWJsZVBpeGVsUmVmIGFyZSBsb2NrZWQuCi0gICAgLy8gVGhleSB3aWxsIGJlIHVu
bG9ja2VkIHdoZW4gSW1hZ2VEZWNvZGVyIGlzIGRlc3Ryb3llZCBzaW5jZSBJbWFnZURlY29kZXIK
LSAgICAvLyBvd25zIHRoZSBJbWFnZUZyYW1lLiBQYXJ0aWFsbHkgZGVjb2RlZCBTa0JpdG1hcCBp
cyB0aHVzIGluc2VydGVkIGludG8gdGhlCi0gICAgLy8gSW1hZ2VEZWNvZGluZ1N0b3JlIHdoaWxl
IGxvY2tlZC4KKyAgICAvLyBUaGV5IHdpbGwgYmUgdW5sb2NrZWQgYWZ0ZXIgdGhlIGltYWdlIGZy
YWdtZW50IGlzIGluc2VydGVkIGludG8KKyAgICAvLyBJbWFnZURlY29kaW5nU3RvcmUuCiAgICAg
SW1hZ2VGcmFtZSogZnJhbWUgPSAoKmRlY29kZXIpLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CiAg
ICAgKCpkZWNvZGVyKS0+c2V0RGF0YSgwLCBmYWxzZSk7IC8vIFVucmVmIFNoYXJlZEJ1ZmZlciBm
cm9tIEltYWdlRGVjb2Rlci4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCAyZTBiNTdmMWQyMzEzNTkyYzNkODY0
NzM5ZTNiNGEyY2I1ZDQ5OTkzLi4xMDQyNGE1NWZiYTRkYWYxYzBjYWVlMzViNzUyY2ZjYWYxMmFh
M2JkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuaApAQCAtNDIyLDYgKzQyMiwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKICAgICAgICAg
ICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRNZW1vcnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsK
ICAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBsb2NrRnJhbWVCdWZmZXJzKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgYm9vbCByZXQgPSB0cnVlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
aV0uZ2V0U2tCaXRtYXAoKTsKKyAgICAgICAgICAgICAgICBiaXRtYXAubG9ja1BpeGVscygpOwor
ICAgICAgICAgICAgICAgIHJldCA9IHJldCAmJiBiaXRtYXAuZ2V0UGl4ZWxzKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIHVubG9ja0ZyYW1lQnVmZmVycygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlW2ldLmdldFNrQml0bWFwKCkudW5sb2Nr
UGl4ZWxzKCk7CisgICAgICAgIH0KICNlbmRpZgogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9p
ZCBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAKaW5kZXggMTEz
ZDc4ODE2ZWQxZDkxMmViNTEzNjhhN2E4ZmY4MTg4MjIxNWYzOS4uNTk4M2E0Mzg5OTFmMjY5NDZl
OTkzMTc3NjNmNDVhOTdkZmFlOThiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JbWFnZUZyYW1lR2VuZXJhdG9yVGVzdC5jcHAKQEAgLTczLDYgKzczLDgg
QEAgcHVibGljOgogICAgICAgICBtX2dlbmVyYXRvci0+c2V0SW1hZ2VEZWNvZGVyRmFjdG9yeUZv
clRlc3RpbmcoTW9ja0ltYWdlRGVjb2RlckZhY3Rvcnk6OmNyZWF0ZSh0aGlzKSk7CiAgICAgICAg
IG1fZGVjb2RlcnNEZXN0cm95ZWQgPSAwOwogICAgICAgICBtX2ZyYW1lQnVmZmVyUmVxdWVzdENv
dW50ID0gMDsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckxvY2tDb3VudCA9IDA7CisgICAgICAgIG1f
ZnJhbWVCdWZmZXJVbmxvY2tDb3VudCA9IDA7CiAgICAgICAgIG1fZnJhbWVTdGF0dXMgPSBJbWFn
ZUZyYW1lOjpGcmFtZUVtcHR5OwogICAgIH0KIApAQCAtOTEsNiArOTMsMTYgQEAgcHVibGljOgog
ICAgICAgICArK21fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7CiAgICAgfQogCisgICAgdmlydHVh
bCB2b2lkIGZyYW1lQnVmZmVyc1VubG9ja2VkKCkKKyAgICB7CisgICAgICAgICsrbV9mcmFtZUJ1
ZmZlclVubG9ja0NvdW50OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmcmFtZUJ1ZmZlcnNM
b2NrZWQoKQorICAgIHsKKyAgICAgICAgKyttX2ZyYW1lQnVmZmVyTG9ja0NvdW50OworICAgIH0K
KwogICAgIHZpcnR1YWwgSW1hZ2VGcmFtZTo6RnJhbWVTdGF0dXMgZnJhbWVTdGF0dXMoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fZnJhbWVTdGF0dXM7CkBAIC0xMTcsNiArMTI5LDggQEAgcHJv
dGVjdGVkOgogICAgIFJlZlB0cjxJbWFnZUZyYW1lR2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKICAg
ICBpbnQgbV9kZWNvZGVyc0Rlc3Ryb3llZDsKICAgICBpbnQgbV9mcmFtZUJ1ZmZlclJlcXVlc3RD
b3VudDsKKyAgICBpbnQgbV9mcmFtZUJ1ZmZlckxvY2tDb3VudDsKKyAgICBpbnQgbV9mcmFtZUJ1
ZmZlclVubG9ja0NvdW50OwogICAgIEltYWdlRnJhbWU6OkZyYW1lU3RhdHVzIG1fZnJhbWVTdGF0
dXM7CiB9OwogCkBAIC0xNDEsNiArMTU1LDcgQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JU
ZXN0LCBjYWNoZUhpdCkKICAgICBFWFBFQ1RfVFJVRShtX2dlbmVyYXRvci0+aGFzQWxwaGEoKSk7
CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVy
YXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlclJl
cXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJMb2NrQ291bnQpOwog
fQogCiBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhTY2FsZSkK
QEAgLTE2NCw2ICsxNzksOCBAQCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hl
TWlzc1dpdGhTY2FsZSkKICAgICBFWFBFQ1RfVFJVRShtX2dlbmVyYXRvci0+aGFzQWxwaGEoKSk7
CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVy
YXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlclJl
cXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJMb2NrQ291bnQpOwor
ICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291bnQpOwogfQogCiBURVNUX0Yo
SW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhEZWNvZGVBbmRTY2FsZSkKQEAg
LTE3Myw2ICsxOTAsOCBAQCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlz
c1dpdGhEZWNvZGVBbmRTY2FsZSkKICAgICAvLyBDYWNoZSBtaXNzLgogICAgIGNvbnN0IFNjYWxl
ZEltYWdlRnJhZ21lbnQqIHNjYWxlZEltYWdlID0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxl
KHNjYWxlZFNpemUoKSk7CiAgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291
bnQpOworICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1lQnVmZmVyTG9ja0NvdW50KTsKKyAgICBFWFBF
Q1RfRVEoMCwgbV9mcmFtZUJ1ZmZlclVubG9ja0NvdW50KTsKICAgICBFWFBFQ1RfRVEoc2NhbGVk
U2l6ZSgpLCBzY2FsZWRJbWFnZS0+c2NhbGVkU2l6ZSgpKTsKICAgICBFWFBFQ1RfRkFMU0UobV9n
ZW5lcmF0b3ItPmhhc0FscGhhKCkpOwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHNjYWxlZEltYWdlKTsKQEAgLTE5Miw2
ICsyMTEsOCBAQCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhE
ZWNvZGVBbmRTY2FsZSkKICAgICBFWFBFQ1RfRkFMU0UobV9nZW5lcmF0b3ItPmhhc0FscGhhKCkp
OwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5l
cmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CiAgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJS
ZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1lQnVmZmVyTG9ja0NvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlclVubG9ja0NvdW50KTsKIH0KIAogVEVTVF9G
KEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoSW5jb21wbGV0ZURlY29kZSkK
QEAgLTIwMSw2ICsyMjIsOCBAQCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hl
TWlzc1dpdGhJbmNvbXBsZXRlRGVjb2RlKQogICAgIGNvbnN0IFNjYWxlZEltYWdlRnJhZ21lbnQq
IHRlbXBJbWFnZT0gbV9nZW5lcmF0b3ItPmRlY29kZUFuZFNjYWxlKGZ1bGxTaXplKCkpOwogICAg
IEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7CiAgICAgRVhQRUNUX0VRKDEs
IG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOworICAgIEVYUEVDVF9FUSgwLCBtX2ZyYW1lQnVm
ZmVyTG9ja0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclVubG9ja0NvdW50
KTsKICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2Vu
ZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOwogICAgIEVYUEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGlu
Z1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CiAKQEAgLTIwOCw2ICsyMzEsOCBA
QCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dpdGhJbmNvbXBsZXRl
RGVjb2RlKQogICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVBbmRTY2FsZShmdWxs
U2l6ZSgpKTsKICAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAg
IEVYUEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEo
MSwgbV9mcmFtZUJ1ZmZlckxvY2tDb3VudCk7CisgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZm
ZXJVbmxvY2tDb3VudCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxv
Y2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAgICBFWFBFQ1RfRVEoMXUs
IEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogICAgIEVY
UEVDVF9FUSgwLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKQEAgLTIyMCwxMiArMjQ1LDE2IEBAIFRF
U1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgY2FjaGVNaXNzV2l0aEluY29tcGxldGVEZWNv
ZGVOb05ld0RhdGEpCiAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVudCogdGVtcEltYWdlPSBt
X2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNpemUoKSk7CiAgICAgRVhQRUNUX0ZBTFNF
KHRlbXBJbWFnZS0+aXNDb21wbGV0ZSgpKTsKICAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZl
clJlcXVlc3RDb3VudCk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJMb2NrQ291bnQp
OworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291bnQpOwogICAgIEltYWdl
RGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCks
IHRlbXBJbWFnZSk7CiAgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3Rh
bmNlKCktPmNhY2hlRW50cmllcygpKTsKIAogICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5k
ZWNvZGVBbmRTY2FsZShmdWxsU2l6ZSgpKTsKICAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5p
c0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50
KTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFtZUJ1ZmZlckxvY2tDb3VudCk7CisgICAgRVhQRUNU
X0VRKDEsIG1fZnJhbWVCdWZmZXJVbmxvY2tDb3VudCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3Jl
OjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsK
ICAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVF
bnRyaWVzKCkpOwogICAgIEVYUEVDVF9FUSgwLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKQEAgLTIz
OCw2ICsyNjcsOCBAQCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGNhY2hlTWlzc1dp
dGhJbmNvbXBsZXRlRGVjb2RlQW5kU2NhbGUpCiAgICAgY29uc3QgU2NhbGVkSW1hZ2VGcmFnbWVu
dCogdGVtcEltYWdlPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoc2NhbGVkU2l6ZSgpKTsK
ICAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9F
USgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMCwgbV9mcmFt
ZUJ1ZmZlckxvY2tDb3VudCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJVbmxvY2tD
b3VudCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZSht
X2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAgICBFWFBFQ1RfRVEoMnUsIEltYWdlRGVj
b2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogCkBAIC0yNDUsNiArMjc2
LDggQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBjYWNoZU1pc3NXaXRoSW5jb21w
bGV0ZURlY29kZUFuZFNjYWxlKQogICAgIHRlbXBJbWFnZSA9IG1fZ2VuZXJhdG9yLT5kZWNvZGVB
bmRTY2FsZShzY2FsZWRTaXplKCkpOwogICAgIEVYUEVDVF9GQUxTRSh0ZW1wSW1hZ2UtPmlzQ29t
cGxldGUoKSk7CiAgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOwor
ICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyTG9ja0NvdW50KTsKKyAgICBFWFBFQ1RfRVEo
MiwgbV9mcmFtZUJ1ZmZlclVubG9ja0NvdW50KTsKICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omlu
c3RhbmNlKCktPnVubG9ja0NhY2hlKG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOwogICAg
IEVYUEVDVF9FUSgydSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJp
ZXMoKSk7CiAgICAgRVhQRUNUX0VRKDAsIG1fZGVjb2RlcnNEZXN0cm95ZWQpOwpAQCAtMjU4LDYg
KzI5MSw4IEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgaW5jb21wbGV0ZURlY29k
ZUJlY29tZXNDb21wbGV0ZSkKICAgICBFWFBFQ1RfRkFMU0UodGVtcEltYWdlLT5pc0NvbXBsZXRl
KCkpOwogICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKICAgICBF
WFBFQ1RfRVEoMCwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7CisgICAgRVhQRUNUX0VRKDAsIG1fZnJh
bWVCdWZmZXJMb2NrQ291bnQpOworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyVW5sb2Nr
Q291bnQpOwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+dW5sb2NrQ2FjaGUo
bV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CiAgICAgRVhQRUNUX0VRKDF1LCBJbWFnZURl
Y29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsKIApAQCAtMjY4LDYgKzMw
Myw4IEBAIFRFU1RfRihJbWFnZUZyYW1lR2VuZXJhdG9yVGVzdCwgaW5jb21wbGV0ZURlY29kZUJl
Y29tZXNDb21wbGV0ZSkKICAgICBFWFBFQ1RfVFJVRSh0ZW1wSW1hZ2UtPmlzQ29tcGxldGUoKSk7
CiAgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOwogICAgIEVYUEVD
VF9FUSgxLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1
ZmZlckxvY2tDb3VudCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJVbmxvY2tDb3Vu
dCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tDYWNoZShtX2dl
bmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAgICBFWFBFQ1RfRVEoMXUsIEltYWdlRGVjb2Rp
bmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogCkBAIC0yODUsNiArMzIyLDgg
QEAgVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBpbmNvbXBsZXRlRGVjb2RlQW5kU2Nh
bGVCZWNvbWVzQ29tcGxldGUpCiAgICAgRVhQRUNUX0ZBTFNFKHRlbXBJbWFnZS0+aXNDb21wbGV0
ZSgpKTsKICAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCk7CiAgICAg
RVhQRUNUX0VRKDAsIG1fZGVjb2RlcnNEZXN0cm95ZWQpOworICAgIEVYUEVDVF9FUSgwLCBtX2Zy
YW1lQnVmZmVyTG9ja0NvdW50KTsKKyAgICBFWFBFQ1RfRVEoMSwgbV9mcmFtZUJ1ZmZlclVubG9j
a0NvdW50KTsKICAgICBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPnVubG9ja0NhY2hl
KG1fZ2VuZXJhdG9yLmdldCgpLCB0ZW1wSW1hZ2UpOwogICAgIEVYUEVDVF9FUSgydSwgSW1hZ2VE
ZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMoKSk7CiAKQEAgLTI5NSw2ICsz
MzQsOCBAQCBURVNUX0YoSW1hZ2VGcmFtZUdlbmVyYXRvclRlc3QsIGluY29tcGxldGVEZWNvZGVB
bmRTY2FsZUJlY29tZXNDb21wbGV0ZSkKICAgICBFWFBFQ1RfVFJVRSh0ZW1wSW1hZ2UtPmlzQ29t
cGxldGUoKSk7CiAgICAgRVhQRUNUX0VRKDIsIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQpOwog
ICAgIEVYUEVDVF9FUSgxLCBtX2RlY29kZXJzRGVzdHJveWVkKTsKKyAgICBFWFBFQ1RfRVEoMSwg
bV9mcmFtZUJ1ZmZlckxvY2tDb3VudCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJV
bmxvY2tDb3VudCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tD
YWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKICAgICBFWFBFQ1RfRVEoMnUsIElt
YWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2UoKS0+Y2FjaGVFbnRyaWVzKCkpOwogCkBAIC0zMjUs
NiArMzY2LDggQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBpbmNvbXBsZXRlRGVj
b2RlQmVjb21lc0NvbXBsZXRlTXVsdGlUaHJlYWRlZCkKICAgICBFWFBFQ1RfRkFMU0UodGVtcElt
YWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyUmVxdWVz
dENvdW50KTsKICAgICBFWFBFQ1RfRVEoMCwgbV9kZWNvZGVyc0Rlc3Ryb3llZCk7CisgICAgRVhQ
RUNUX0VRKDAsIG1fZnJhbWVCdWZmZXJMb2NrQ291bnQpOworICAgIEVYUEVDVF9FUSgxLCBtX2Zy
YW1lQnVmZmVyVW5sb2NrQ291bnQpOwogICAgIEltYWdlRGVjb2RpbmdTdG9yZTo6aW5zdGFuY2Uo
KS0+dW5sb2NrQ2FjaGUobV9nZW5lcmF0b3IuZ2V0KCksIHRlbXBJbWFnZSk7CiAgICAgRVhQRUNU
X0VRKDF1LCBJbWFnZURlY29kaW5nU3RvcmU6Omluc3RhbmNlKCktPmNhY2hlRW50cmllcygpKTsK
IApAQCAtMzM2LDExICszNzksMTUgQEAgVEVTVF9GKEltYWdlRnJhbWVHZW5lcmF0b3JUZXN0LCBp
bmNvbXBsZXRlRGVjb2RlQmVjb21lc0NvbXBsZXRlTXVsdGlUaHJlYWRlZCkKIAogICAgIEVYUEVD
VF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKICAgICBFWFBFQ1RfRVEoMSwgbV9k
ZWNvZGVyc0Rlc3Ryb3llZCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJMb2NrQ291
bnQpOworICAgIEVYUEVDVF9FUSgxLCBtX2ZyYW1lQnVmZmVyVW5sb2NrQ291bnQpOwogICAgIEVY
UEVDVF9FUSgxdSwgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT5jYWNoZUVudHJpZXMo
KSk7CiAKICAgICB0ZW1wSW1hZ2UgPSBtX2dlbmVyYXRvci0+ZGVjb2RlQW5kU2NhbGUoZnVsbFNp
emUoKSk7CiAgICAgRVhQRUNUX1RSVUUodGVtcEltYWdlLT5pc0NvbXBsZXRlKCkpOwogICAgIEVY
UEVDVF9FUSgyLCBtX2ZyYW1lQnVmZmVyUmVxdWVzdENvdW50KTsKKyAgICBFWFBFQ1RfRVEoMSwg
bV9mcmFtZUJ1ZmZlckxvY2tDb3VudCk7CisgICAgRVhQRUNUX0VRKDEsIG1fZnJhbWVCdWZmZXJV
bmxvY2tDb3VudCk7CiAgICAgSW1hZ2VEZWNvZGluZ1N0b3JlOjppbnN0YW5jZSgpLT51bmxvY2tD
YWNoZShtX2dlbmVyYXRvci5nZXQoKSwgdGVtcEltYWdlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Nb2NrSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJbWFnZURlY29kZXIuaAppbmRleCBiYTM0MjE3OGFiMzA5
ZmI5ZjJkYWU2NDk5ODhkZjYwMjFlMmY2MjAyLi42N2IyNDg5N2E2ZGJjMmJkMDk4MGQzOWZhYjY0
NzU2N2E1NTZkOGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01v
Y2tJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL01vY2tJ
bWFnZURlY29kZXIuaApAQCAtMzMsNiArMzMsOCBAQCBjbGFzcyBNb2NrSW1hZ2VEZWNvZGVyQ2xp
ZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVjb2RlckJlaW5nRGVzdHJveWVkKCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBmcmFtZUJ1ZmZlclJlcXVlc3RlZCgpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZnJhbWVCdWZmZXJzTG9ja2VkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGZy
YW1lQnVmZmVyc1VubG9ja2VkKCkgeyB9CiAgICAgdmlydHVhbCBJbWFnZUZyYW1lOjpGcmFtZVN0
YXR1cyBmcmFtZVN0YXR1cygpID0gMDsKIH07CiAKQEAgLTc1LDYgKzc3LDEzIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICZtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgfQogCisgICAgdmly
dHVhbCBib29sIGxvY2tGcmFtZUJ1ZmZlcnMoKQorICAgIHsKKyAgICAgICAgbV9jbGllbnQtPmZy
YW1lQnVmZmVyc0xvY2tlZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgdmly
dHVhbCB2b2lkIHVubG9ja0ZyYW1lQnVmZmVycygpIHsgbV9jbGllbnQtPmZyYW1lQnVmZmVyc1Vu
bG9ja2VkKCk7IH0KKwogICAgIGludCBmcmFtZUJ1ZmZlclJlcXVlc3RDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWVCdWZmZXJSZXF1ZXN0Q291bnQ7IH0KIAogcHJpdmF0ZToK
</data>

          </attachment>
      

    </bug>

</bugzilla>