<?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>97918</bug_id>
          
          <creation_ts>2012-09-28 08:39:38 -0700</creation_ts>
          <short_desc>[Chromium] Smoother animation for non-RAF 2D canvas animations</short_desc>
          <delta_ts>2012-10-10 19:05:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Novosad">junov</reporter>
          <assigned_to name="Justin Novosad">junov</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>730685</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-09-28 08:39:38 -0700</bug_when>
    <thetext>[Chromium] Smoother animation for non-RAF 2D canvas animations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730797</commentid>
    <comment_count>1</comment_count>
      <attachid>166277</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-09-28 10:49:33 -0700</bug_when>
    <thetext>Created attachment 166277
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>730841</commentid>
    <comment_count>2</comment_count>
      <attachid>166277</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-09-28 11:41:22 -0700</bug_when>
    <thetext>Comment on attachment 166277
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:139
&gt; +    m_flushNeeded = false;
&gt; +    switch (m_state) {
&gt; +    case FreshState:
&gt; +        if (m_didRecordDrawCommand &amp;&amp; !isFreshFrame())
&gt; +            m_state = StaleState;
&gt; +        break;
&gt; +    case StaleState:
&gt; +        if (m_didRecordDrawCommand) {
&gt; +            if (isFreshFrame())
&gt; +                m_state = FreshState;
&gt; +            else {
&gt; +                if (!m_didFlushSinceLastRecordedFrame)
&gt; +                    m_flushNeeded = true;
&gt; +            }
&gt; +        }
&gt; +        break;
&gt; +    }
&gt; +    if (m_didRecordDrawCommand)
&gt; +        m_didFlushSinceLastRecordedFrame = false;
&gt; +    m_didRecordDrawCommand = false;

As discussed, I think this logic would be a lot clearer if we replaced isFreshFrame() with a &quot;skippedPendingCommands()&quot; notification from the deferred canvas.

Then we could simply have a counter on the bridge which counts the frames-since-last-flush, which is reset to zero on flushedPendingCommands() or skippedPendingCommands(), and we don&apos;t need this state machine at all.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerManager.cpp:89
&gt; +        for (Canvas2DLayerBridge* layer = m_layerList.head(); layer; layer = layer-&gt;next())
&gt; +            layer-&gt;flush();

As discussed, I think we can get away with only flushing the one layer, since the rest of the layers will be taken care of at commit time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733054</commentid>
    <comment_count>3</comment_count>
      <attachid>166746</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-10-02 14:01:46 -0700</bug_when>
    <thetext>Created attachment 166746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733080</commentid>
    <comment_count>4</comment_count>
      <attachid>166746</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-02 14:27:53 -0700</bug_when>
    <thetext>Comment on attachment 166746
Patch

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

Thanks, this seems much cleaner to me.  Just some naming and we&apos;re done, I think.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerManager.cpp:82
&gt; +        layer-&gt;didDrawFrame();

&lt;bikeshed&gt; Perhaps didDrawFrame() is misnamed?  It seems to be called regardless of whether that particular canvas drew anything or not. Unless we mean a compositor frame, in which case maybe it should be didDrawCompositorFrame()? &lt;/bikeshed&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733653</commentid>
    <comment_count>5</comment_count>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-10-03 06:54:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 166746 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166746&amp;action=review
&gt; 
&gt; Thanks, this seems much cleaner to me.  Just some naming and we&apos;re done, I think.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerManager.cpp:82
&gt; &gt; +        layer-&gt;didDrawFrame();
&gt; 
&gt; &lt;bikeshed&gt; Perhaps didDrawFrame() is misnamed?  It seems to be called regardless of whether that particular canvas drew anything or not. Unless we mean a compositor frame, in which case maybe it should be didDrawCompositorFrame()? &lt;/bikeshed&gt;

This does not refer to a compositor frame, but to a frame in the atomic JS execution sense.  Since we are just propagating the task observer signal, we could just use the same name as the observer interface: didProcessTask, The it would be up to the Canvas2DLayerBridge to figure out whether the task drew a new canvas frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733667</commentid>
    <comment_count>6</comment_count>
      <attachid>166746</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-03 07:21:14 -0700</bug_when>
    <thetext>Comment on attachment 166746
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerManager.cpp:82
&gt;&gt;&gt; +        layer-&gt;didDrawFrame();
&gt;&gt; 
&gt;&gt; &lt;bikeshed&gt; Perhaps didDrawFrame() is misnamed?  It seems to be called regardless of whether that particular canvas drew anything or not. Unless we mean a compositor frame, in which case maybe it should be didDrawCompositorFrame()? &lt;/bikeshed&gt;
&gt; 
&gt; This does not refer to a compositor frame, but to a frame in the atomic JS execution sense.  Since we are just propagating the task observer signal, we could just use the same name as the observer interface: didProcessTask, The it would be up to the Canvas2DLayerBridge to figure out whether the task drew a new canvas frame.

You&apos;re right; it&apos;s not a compositor frame.    didProcessTask() is a bit generic, though, and I usually prefer to name things by what they do, rather than when they&apos;re called.  Maybe flushFrameBacklog()?  rateLimit()?  limitPendingFrames()?  flushExcessiveFrames()?

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerManager.cpp:96
&gt; +        m_deferredFrameStarted = true;

More bikeshedding, just &apos;cause I&apos;m annoying that way:  m_taskObserverStarted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733842</commentid>
    <comment_count>7</comment_count>
      <attachid>166922</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-10-03 10:56:24 -0700</bug_when>
    <thetext>Created attachment 166922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733888</commentid>
    <comment_count>8</comment_count>
      <attachid>166922</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-03 11:46:17 -0700</bug_when>
    <thetext>Comment on attachment 166922
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerBridge.cpp:139
&gt;      storageAllocatedForRecordingChanged(deferredCanvas()-&gt;storageAllocatedForRecording());

As discussed, let&apos;s mock storageAllocatedForRecordingChanged() itself, instead of creating didFlushPendingCommands() for mocking purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733998</commentid>
    <comment_count>9</comment_count>
      <attachid>166952</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-10-03 13:39:45 -0700</bug_when>
    <thetext>Created attachment 166952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734005</commentid>
    <comment_count>10</comment_count>
      <attachid>166952</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-03 13:50:31 -0700</bug_when>
    <thetext>Comment on attachment 166952
Patch

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

&gt; Source/WebKit/chromium/tests/Canvas2DLayerManagerTest.cpp:88
&gt; +    size_t m_fakeStorageAllocatedForRecording;

This member variable seems to be unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734692</commentid>
    <comment_count>11</comment_count>
      <attachid>167105</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-10-04 07:59:36 -0700</bug_when>
    <thetext>Created attachment 167105
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734741</commentid>
    <comment_count>12</comment_count>
      <attachid>167105</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-04 09:11:48 -0700</bug_when>
    <thetext>Comment on attachment 167105
Patch

Looks good.  Looks like the patch has conflicts, but I trust you to fix them.  :)  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734780</commentid>
    <comment_count>13</comment_count>
      <attachid>167116</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-10-04 10:06:20 -0700</bug_when>
    <thetext>Created attachment 167116
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734844</commentid>
    <comment_count>14</comment_count>
      <attachid>167116</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-04 11:12:42 -0700</bug_when>
    <thetext>Comment on attachment 167116
Patch for landing

Rejecting attachment 167116 from commit-queue.

New failing tests:
Canvas2DLayerManagerTest.testDeferredFrame
Full output: http://queues.webkit.org/results/14183038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739278</commentid>
    <comment_count>15</comment_count>
      <attachid>168067</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-10-10 13:57:51 -0700</bug_when>
    <thetext>Created attachment 168067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739279</commentid>
    <comment_count>16</comment_count>
      <attachid>168067</attachid>
    <who name="Justin Novosad">junov</who>
    <bug_when>2012-10-10 13:59:59 -0700</bug_when>
    <thetext>Comment on attachment 168067
Patch

Fixed release build test failure caused by uninitialized m_taskObserverActive in Canvas2DLayerManager</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739281</commentid>
    <comment_count>17</comment_count>
      <attachid>168067</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-10-10 14:00:57 -0700</bug_when>
    <thetext>Comment on attachment 168067
Patch

Looks good (bots willing).  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739506</commentid>
    <comment_count>18</comment_count>
      <attachid>168067</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 19:05:13 -0700</bug_when>
    <thetext>Comment on attachment 168067
Patch

Clearing flags on attachment: 168067

Committed r130994: &lt;http://trac.webkit.org/changeset/130994&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739507</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 19:05:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166277</attachid>
            <date>2012-09-28 10:49:33 -0700</date>
            <delta_ts>2012-10-02 14:01:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97918-20120928134850.patch</filename>
            <type>text/plain</type>
            <size>18318</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyOTg5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDEyLTA5LTI4ICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFNtb290
aGVyIGFuaW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWR1Y2VzIGFuaW1hdGlvbiBq
YW5rIGJ5IHByZXZlbnRpbmcgdGhlIGFjY3VtdWxhdGlvbiBvZiBtdWx0aXBsZQorICAgICAgICBm
cmFtZXMgb2YgYmFja2xvZyBpbiB0aGUgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZyBxdWV1ZS4g
V2hlbiB0aGUKKyAgICAgICAgYW5pbWF0aW9uIGlzIG1vcmUgdGhhbiBvbmUgZnVsbCBmcmFtZSBh
aGVhZCBvZiB0aGUgY29tcG9zaXRvciwgYW4KKyAgICAgICAgaW1tZWRpYXRlIGZsdXNoIGlzIHRy
aWdnZXJlZC4gIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IG92ZXJkcmF3CisgICAgICAgIGVsaW1p
bmF0aW9uIGJ5IHRoZSBza2lwLW9uLWNsZWFyIG9wdGltaXphdGlvbiB0aGF0IGlzIGJ1aWx0LWlu
IHRvCisgICAgICAgIFNrRGVmZXJyZWRDYW52YXMsIHRvIGFsbG93IG5vbi1SQUYgYW5pbWF0aW9u
cyB0aGF0IGNsZWFyIHRoZSBjYW52YXMgYXQKKyAgICAgICAgZWFjaCBmcmFtZSB0byBydW4gd2l0
aG91dCBhbnkgcmF0ZSBsaW1pdGluZy4gVGhpcyBjaGFuZ2UgYWxzbworICAgICAgICBpbmNpZGVu
dGFsbHkgaW1wcm92ZXMgZnJhbWUgcmF0ZSBpbiBtYW55IGNhc2VzIGJ5IHByb3ZpZGluZyBtb3Jl
CisgICAgICAgIGdyYW51bGFyIGJhdGNoaW5nIG9mIEdQVSBBUEkgY2FsbHMsIHJlc3VsdGluZyBp
biBiZXR0ZXIgcGlwZWxpbmluZworICAgICAgICB0aHJvdWdoIHRoZSBjb21tYW5kIGJ1ZmZlci4K
KworICAgICAgICBUZXN0OiB3ZWJraXRfdW5pdF90ZXN0IENhbnZhczJETGF5ZXJNYW5hZ2VyVGVz
dC50ZXN0RGVmZXJyZWRGcmFtZQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmlzRnJlc2hGcmFtZSk6CisgICAgICAgIHJldHVybnMgdHJ1ZSBpZiB0
aGUgY3VycmVudCBmcmFtZSBpcyBmcmVzaCwgbWVhbmluZyB0aGF0IG5vbmUgb2YgaXRzCisgICAg
ICAgIHBpeGVscyBhcmUgYWZmZWN0ZWQgYnkgZHJhdyBjb21tYW5kcyBmcm9tIHByZXZpb3VzIGZy
YW1lcywgd2hpY2gKKyAgICAgICAgaW1wbGllcyB0aGF0IFNrRGVmZXJyZWRDYW52YXMgd2lsbCBo
YXZlIG9wdGltaXplZC1vdXQgZHJhdyBjb21tYW5kcworICAgICAgICBmcm9tIHRoZSBwcmV2aW91
cyBmcmFtZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckJyaWRnZTo6dXBkYXRlU3RhdGVBZnRlckRlZmVycmVkRnJhbWUpOgorICAgICAgICBTdGF0
ZSB0cmFuc2l0aW9uIGxvZ2ljIHRvIHRyYWNrIGZyZXNoIHZzLiBzdGFsZSBzdGF0ZQorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2hOZWVkZWQpOgorICAgICAgICBS
ZXR1cm5zIHRydWUgd2hlbiB0aGUgY2FudmFzIGhhcyBtb3JlIHRoYW4gb25lIGZyYW1lIG9mIHN0
YWxlIGJhY2tsb2csCisgICAgICAgIGFuZCB0aGVyZWZvcmUgcmVxdWlyZXMgZmx1c2hpbmcuCisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjppc0RlZmVycmVkKToKKyAgICAg
ICAgUkV0dXJucyB0cnVlIGlmIHRoZSBjYW52YXMgbGF5ZXIgaXMgZGVmZXJyZWQuCisgICAgICAg
IChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0NvbW1hbmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmRpZEZsdXNoUGVuZGluZ0NvbW1h
bmRzKToKKyAgICAgICAgVXBkYXRlIGludGVybmFsIHN0YXRlIGFmdGVyIGEgZmx1c2gsIHNlcGFy
dGVkIGZyb20gZmx1c2hlZERyYXdDb21tYW5kcworICAgICAgICBmb3IgdW5pdCB0ZXN0aW5nIHB1
cm9zZXMuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0QWNxdWlyZWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2Uu
aDoKKyAgICAgICAgKENhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjp+Q2FudmFzMkRMYXllck1hbmFnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1hbmFnZXI6OndpbGxQcm9jZXNzVGFzayk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpk
aWRQcm9jZXNzVGFzayk6CisgICAgICAgIFRhc2tPYnNlcnZlciBpbXBsZW1lbnRhdGlvbiwgdXNl
ZCB0byB0cmFjayB0aGUgZW5kIG9mIHNjcmlwdCBzY2hlZHVsZWQKKyAgICAgICAgYWN0aW9ucyB0
aGF0IHBlcmZvcm0gMmQgY2FudmFzIGRyYXdzLCB3aGljaCBtYXJrcyB0aGUgZW5kIG9mIGFuCisg
ICAgICAgIGFuaW1hdGlvbiBmcmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJN
YW5hZ2VyOjpsYXllckRpZERyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmg6CisgICAgICAgIChDYW52YXMyRExheWVyTWFuYWdl
cik6CisKIDIwMTItMDktMjggIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogZGVmaW5lIENodW5rZWRSZWFkZXIgaW50ZXJmYWNl
IGZvciBjb21waWxhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAJ
KHJldmlzaW9uIDEyOTUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NhbnZhczJETGF5ZXJCcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1
MSwxMCBAQCBDYW52YXMyRExheWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlCiAgICAgLCBt
X2NhbnZhcygwKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2J5dGVzQWxsb2Nh
dGVkKDApCisgICAgLCBtX2ZsdXNoTmVlZGVkKGZhbHNlKQorICAgICwgbV9kaWRSZWNvcmREcmF3
Q29tbWFuZChmYWxzZSkKKyAgICAsIG1fZGlkRmx1c2hTaW5jZUxhc3RSZWNvcmRlZEZyYW1lKGZh
bHNlKQorICAgICwgbV9zdGF0ZShGcmVzaFN0YXRlKQogICAgICwgbV9uZXh0KDApCiAgICAgLCBt
X3ByZXYoMCkKIHsKQEAgLTEwNiw2ICsxMTAsNDUgQEAgU2tEZWZlcnJlZENhbnZhcyogQ2FudmFz
MkRMYXllckJyaWRnZTo6ZAogICAgIHJldHVybiAwOwogfQogCitib29sIENhbnZhczJETGF5ZXJC
cmlkZ2U6OmlzRnJlc2hGcmFtZSgpCit7CisgICAgcmV0dXJuIG1fZGVmZXJyYWxNb2RlID09IERl
ZmVycmVkID8gZGVmZXJyZWRDYW52YXMoKS0+aXNGcmVzaEZyYW1lKCkgOiB0cnVlOworfQorCit2
b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6OnVwZGF0ZVN0YXRlQWZ0ZXJEZWZlcnJlZEZyYW1lKCkK
K3sKKyAgICBtX2ZsdXNoTmVlZGVkID0gZmFsc2U7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7Cisg
ICAgY2FzZSBGcmVzaFN0YXRlOgorICAgICAgICBpZiAobV9kaWRSZWNvcmREcmF3Q29tbWFuZCAm
JiAhaXNGcmVzaEZyYW1lKCkpCisgICAgICAgICAgICBtX3N0YXRlID0gU3RhbGVTdGF0ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFsZVN0YXRlOgorICAgICAgICBpZiAobV9kaWRSZWNv
cmREcmF3Q29tbWFuZCkgeworICAgICAgICAgICAgaWYgKGlzRnJlc2hGcmFtZSgpKQorICAgICAg
ICAgICAgICAgIG1fc3RhdGUgPSBGcmVzaFN0YXRlOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFtX2RpZEZsdXNoU2luY2VMYXN0UmVjb3JkZWRGcmFtZSkKKyAgICAg
ICAgICAgICAgICAgICAgbV9mbHVzaE5lZWRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChtX2RpZFJlY29yZERyYXdDb21t
YW5kKQorICAgICAgICBtX2RpZEZsdXNoU2luY2VMYXN0UmVjb3JkZWRGcmFtZSA9IGZhbHNlOwor
ICAgIG1fZGlkUmVjb3JkRHJhd0NvbW1hbmQgPSBmYWxzZTsKK30KKworYm9vbCBDYW52YXMyRExh
eWVyQnJpZGdlOjpmbHVzaE5lZWRlZCgpCit7CisgICAgcmV0dXJuIG1fZmx1c2hOZWVkZWQ7Cit9
CisKK2Jvb2wgQ2FudmFzMkRMYXllckJyaWRnZTo6aXNEZWZlcnJlZCgpCit7CisgICAgcmV0dXJu
IG1fZGVmZXJyYWxNb2RlID09IERlZmVycmVkOworfQorCiB2b2lkIENhbnZhczJETGF5ZXJCcmlk
Z2U6OnByZXBhcmVGb3JEcmF3KCkKIHsKICAgICBBU1NFUlQoZGVmZXJyZWRDYW52YXMoKSk7CkBA
IC0xMjUsNiArMTY4LDEzIEBAIHZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6c3RvcmFnZUFsbG9j
YXQKIHZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2hlZERyYXdDb21tYW5kcygpCiB7CiAg
ICAgc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoZGVmZXJyZWRDYW52YXMoKS0+
c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZygpKTsKKyAgICBkaWRGbHVzaFBlbmRpbmdDb21t
YW5kcygpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6OmRpZEZsdXNoUGVuZGluZ0Nv
bW1hbmRzKCkKK3sKKyAgICBtX2RpZEZsdXNoU2luY2VMYXN0UmVjb3JkZWRGcmFtZSA9IHRydWU7
CisgICAgbV9mbHVzaE5lZWRlZCA9IGZhbHNlOwogfQogCiBzaXplX3QgQ2FudmFzMkRMYXllckJy
aWRnZTo6ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5dGVzVG9GcmVlKQpAQCAtMTQwLDcg
KzE5MCw4IEBAIHNpemVfdCBDYW52YXMyRExheWVyQnJpZGdlOjpmcmVlTWVtb3J5SWYKIHZvaWQg
Q2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2goKQogewogICAgIEFTU0VSVChkZWZlcnJlZENhbnZh
cygpKTsKLSAgICBtX2NhbnZhcy0+Zmx1c2goKTsKKyAgICBpZiAoZGVmZXJyZWRDYW52YXMoKS0+
aGFzUGVuZGluZ0NvbW1hbmRzKCkpCisgICAgICAgIG1fY2FudmFzLT5mbHVzaCgpOwogfQogCiBT
a0NhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6c2tDYW52YXMoU2tEZXZpY2UqIGRldmljZSkK
QEAgLTE5Niw4ICsyNDcsMTAgQEAgdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0QWNx
dWlyZQogewogICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCAmJiAhbV91c2VE
b3VibGVCdWZmZXJpbmcpCiAgICAgICAgIG1fbGF5ZXItPndpbGxNb2RpZnlUZXh0dXJlKCk7Ci0g
ICAgZWxzZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpCisgICAgZWxzZSBpZiAobV9k
ZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKICAgICAgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6
OmdldCgpLmxheWVyRGlkRHJhdyh0aGlzKTsKKyAgICAgICAgbV9kaWRSZWNvcmREcmF3Q29tbWFu
ZCA9IHRydWU7CisgICAgfQogfQogCiB1bnNpZ25lZCBDYW52YXMyRExheWVyQnJpZGdlOjpiYWNr
QnVmZmVyVGV4dHVyZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCShyZXZp
c2lvbiAxMjk1MzApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDkgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgc2l6ZV90IGZyZWVNZW1vcnlJZlBvc3NpYmxlKHNpemVfdCk7
IC8vIHZpcnR1YWwgZm9yIG1vY2tpbmcKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKTsgLy8gdmly
dHVhbCBmb3IgbW9ja2luZwogICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIGNvbnN0IHtyZXR1
cm4gbV9ieXRlc0FsbG9jYXRlZDt9CisgICAgdm9pZCB1cGRhdGVTdGF0ZUFmdGVyRGVmZXJyZWRG
cmFtZSgpOworICAgIGJvb2wgZmx1c2hOZWVkZWQoKTsKKyAgICBib29sIGlzRGVmZXJyZWQoKTsK
IAogICAgIFNrQ2FudmFzKiBza0NhbnZhcyhTa0RldmljZSopOwogICAgIFdlYktpdDo6V2ViTGF5
ZXIqIGxheWVyKCk7CkBAIC03Nyw2ICs4MCw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBD
YW52YXMyRExheWVyQnJpZGdlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBJ
bnRTaXplJiwgRGVmZXJyYWxNb2RlLCB1bnNpZ25lZCB0ZXh0dXJlSWQpOwogICAgIFNrRGVmZXJy
ZWRDYW52YXMqIGRlZmVycmVkQ2FudmFzKCk7CisgICAgdmlydHVhbCBib29sIGlzRnJlc2hGcmFt
ZSgpOworICAgIHZvaWQgZGlkRmx1c2hQZW5kaW5nQ29tbWFuZHMoKTsKIAogICAgIERlZmVycmFs
TW9kZSBtX2RlZmVycmFsTW9kZTsKICAgICBib29sIG1fdXNlRG91YmxlQnVmZmVyaW5nOwpAQCAt
ODcsNiArOTIsMTQgQEAgcHJvdGVjdGVkOgogICAgIE93blB0cjxXZWJLaXQ6OldlYkV4dGVybmFs
VGV4dHVyZUxheWVyPiBtX2xheWVyOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9j
b250ZXh0OwogICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOworICAgIGJvb2wgbV9mbHVzaE5l
ZWRlZDsKKyAgICBib29sIG1fZGlkUmVjb3JkRHJhd0NvbW1hbmQ7CisgICAgYm9vbCBtX2RpZEZs
dXNoU2luY2VMYXN0UmVjb3JkZWRGcmFtZTsKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgRnJl
c2hTdGF0ZSwKKyAgICAgICAgU3RhbGVTdGF0ZSwKKyAgICB9OworICAgIFN0YXRlIG1fc3RhdGU7
CiAKICAgICBmcmllbmQgY2xhc3MgV1RGOjpEb3VibHlMaW5rZWRMaXN0Tm9kZTxDYW52YXMyRExh
eWVyQnJpZGdlPjsKICAgICBDYW52YXMyRExheWVyQnJpZGdlKiBtX25leHQ7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3BwCShyZXZpc2lvbiAxMjk1MzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDExIEBAIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQkkKIAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJNYW5hZ2Vy
LmgiCiAKKyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKK3VzaW5nIFdlYktpdDo6V2ViVGhyZWFkOworCiBuYW1lc3BhY2UgewogZW51
bSB7CiAgICAgRGVmYXVsdE1heEJ5dGVzQWxsb2NhdGVkID0gNjQqMTAyNCoxMDI0LApAQCAtNDcs
NiArNTAsNyBAQCBDYW52YXMyRExheWVyTWFuYWdlcjo6fkNhbnZhczJETGF5ZXJNYW5hCiB7CiAg
ICAgQVNTRVJUKCFtX2J5dGVzQWxsb2NhdGVkKTsKICAgICBBU1NFUlQoIW1fbGF5ZXJMaXN0Lmhl
YWQoKSk7CisgICAgQVNTRVJUKCFtX2RlZmVycmVkRnJhbWVTdGFydGVkKTsKIH0KIAogdm9pZCBD
YW52YXMyRExheWVyTWFuYWdlcjo6aW5pdChzaXplX3QgbWF4Qnl0ZXNBbGxvY2F0ZWQsIHNpemVf
dCB0YXJnZXRCeXRlc0FsbG9jYXRlZCkKQEAgLTYyLDYgKzY2LDMwIEBAIENhbnZhczJETGF5ZXJN
YW5hZ2VyJiBDYW52YXMyRExheWVyTWFuYWcKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIAordm9p
ZCBDYW52YXMyRExheWVyTWFuYWdlcjo6d2lsbFByb2Nlc3NUYXNrKCkKK3sKKyAgICAvLyBPYnNl
cnZlciBpcyByZWdpc3RlcmVkIGR1cmluZyBhIHRhc2sgYW5kIGRlcmVnaXN0ZXJlZCB1cG9uIHRh
c2sgY29tcGxldGlvbi4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDYW52
YXMyRExheWVyTWFuYWdlcjo6ZGlkUHJvY2Vzc1Rhc2soKQoreworICAgIC8vIENhbGxlZCBhZnRl
ciB0aGUgc2NyaXB0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIGJlZW4gcHJvY2Vz
c2VkLgorICAgIEFTU0VSVChtX2RlZmVycmVkRnJhbWVTdGFydGVkKTsKKyAgICBXZWJLaXQ6OlBs
YXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cmVtb3ZlVGFza09ic2VydmVyKHRo
aXMpOworICAgIG1fZGVmZXJyZWRGcmFtZVN0YXJ0ZWQgPSBmYWxzZTsKKyAgICBib29sIGZsdXNo
TmVlZGVkID0gZmFsc2U7CisgICAgZm9yIChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllciA9IG1f
bGF5ZXJMaXN0LmhlYWQoKTsgbGF5ZXI7IGxheWVyID0gbGF5ZXItPm5leHQoKSkgeworICAgICAg
ICBsYXllci0+dXBkYXRlU3RhdGVBZnRlckRlZmVycmVkRnJhbWUoKTsKKyAgICAgICAgZmx1c2hO
ZWVkZWQgfD0gbGF5ZXItPmZsdXNoTmVlZGVkKCk7CisgICAgfQorCisgICAgaWYgKGZsdXNoTmVl
ZGVkKSB7CisgICAgICAgIGZvciAoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIgPSBtX2xheWVy
TGlzdC5oZWFkKCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5uZXh0KCkpCisgICAgICAgICAgICBs
YXllci0+Zmx1c2goKTsKKyAgICB9Cit9CisKIHZvaWQgQ2FudmFzMkRMYXllck1hbmFnZXI6Omxh
eWVyRGlkRHJhdyhDYW52YXMyRExheWVyQnJpZGdlKiBsYXllcikKIHsKICAgICBpZiAoaXNJbkxp
c3QobGF5ZXIpKSB7CkBAIC03MCw3ICs5OCwxMyBAQCB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpsYXllckRpZERyYXcoCiAgICAgICAgICAgICBtX2xheWVyTGlzdC5wdXNoKGxheWVyKTsgLy8g
U2V0IGFzIE1SVQogICAgICAgICB9CiAgICAgfSBlbHNlCi0gICAgICAgIGFkZExheWVyVG9MaXN0
KGxheWVyKTsgCisgICAgICAgIGFkZExheWVyVG9MaXN0KGxheWVyKTsKKworICAgIGlmICghbV9k
ZWZlcnJlZEZyYW1lU3RhcnRlZCAmJiBsYXllci0+aXNEZWZlcnJlZCgpKSB7CisgICAgICAgIG1f
ZGVmZXJyZWRGcmFtZVN0YXJ0ZWQgPSB0cnVlOworICAgICAgICAvLyBTY2hlZHVsZSBhIGNhbGwg
dG8gZGlkUHJvY2Vzc1Rhc2soKSBhZnRlciBjb21wbGV0aW9uIG9mIHRoZSBjdXJyZW50IHNjcmlw
dCB0YXNrLgorICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJl
YWQoKS0+YWRkVGFza09ic2VydmVyKHRoaXMpOworICAgIH0KIH0KIAogdm9pZCBDYW52YXMyRExh
eWVyTWFuYWdlcjo6YWRkTGF5ZXJUb0xpc3QoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmgJKHJldmlzaW9uIDEyOTUzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJN
YW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEyICsyNiwxMyBAQCBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJCiAjZGVmaW5lIENhbnZhczJETGF5ZXJNYW5hZ2Vy
X2gKIAogI2luY2x1ZGUgIkNhbnZhczJETGF5ZXJCcmlkZ2UuaCIKKyNpbmNsdWRlIDxwdWJsaWMv
V2ViVGhyZWFkLmg+CiAKIGNsYXNzIENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYW52YXMyRExheWVyTWFuYWdlciB7CitjbGFzcyBDYW52
YXMyRExheWVyTWFuYWdlciA6IHB1YmxpYyBXZWJLaXQ6OldlYlRocmVhZDo6VGFza09ic2VydmVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FudmFzMkRMYXllck1hbmFnZXImIGdldCgpOwogICAg
IHZvaWQgaW5pdChzaXplX3QgbWF4Qnl0ZXNBbGxvY2F0ZWQsIHNpemVfdCB0YXJnZXRCeXRlc0Fs
bG9jYXRlZCk7CkBAIC00OCwxMCArNDksMTMgQEAgcHJpdmF0ZToKICAgICBib29sIGlzSW5MaXN0
KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKICAgICB2b2lkIGFkZExheWVyVG9MaXN0KENhbnZhczJE
TGF5ZXJCcmlkZ2UqKTsKICAgICB2b2lkIHJlbW92ZUxheWVyRnJvbUxpc3QoQ2FudmFzMkRMYXll
ckJyaWRnZSopOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUHJvY2Vzc1Rhc2soKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUHJvY2Vzc1Rhc2soKSBPVkVSUklERTsKIAogICAgIHNpemVf
dCBtX2J5dGVzQWxsb2NhdGVkOwogICAgIHNpemVfdCBtX21heEJ5dGVzQWxsb2NhdGVkOwogICAg
IHNpemVfdCBtX3RhcmdldEJ5dGVzQWxsb2NhdGVkOworICAgIGJvb2wgbV9kZWZlcnJlZEZyYW1l
U3RhcnRlZDsKICAgICBEb3VibHlMaW5rZWRMaXN0PENhbnZhczJETGF5ZXJCcmlkZ2U+IG1fbGF5
ZXJMaXN0OwogCiAgICAgZnJpZW5kIGNsYXNzIDo6Q2FudmFzMkRMYXllck1hbmFnZXJUZXN0OyAv
LyBmb3IgdW5pdCB0ZXN0aW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNp
b24gMTI5ODk5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMi0wOS0yOCAgSnVzdGluIE5vdm9zYWQgIDxqdW5v
dkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBTbW9vdGhlciBhbmltYXRpb24g
Zm9yIG5vbi1SQUYgMkQgY2FudmFzIGFuaW1hdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3OTE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHVuaXQgdGVzdCB0byB2ZXJpZnkgdGhlIGF1dG9t
YXRpYyBmbHVzaGluZyBvZiBkZWZlcnJlZCAyZCBjYW52YXMKKyAgICAgICAgbGF5ZXJzIHdoZW4g
c2NyaXB0ZWQgYW5pbWF0aW9ucyBhcmUgbW9yZSB0aGFuIG9uZSBmdWxsIGZyYW1lIGFoZWFkIAor
ICAgICAgICBvZiB0aGUgY29tcG9zaXRvci4gQWxzbyB2ZXJpZmllcyB0aGF0IGF1dG9tYXRpYyBm
bHVzaGluZyBkb2VzIG5vdAorICAgICAgICBraWNrLWluIHdoZW4gdGhlIHNraXAgb24gY2xlYXIg
b3B0aW1pemF0aW9uIGtpY2tzIGluLCB3aGljaCBpcyBzaWduYWxlZAorICAgICAgICB0aHJvdWdo
IHRoZSBpc0ZyZXNoRnJhbWUgcXVlcnkgb24gdGhlIGNhbnZhcyBsYXllci4KKworICAgICAgICAq
IHRlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdC5jcHA6CisgICAgICAgIChGYWtlQ2FudmFz
MkRMYXllckJyaWRnZTo6RmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoRmFrZUNh
bnZhczJETGF5ZXJCcmlkZ2U6OmZha2VGcmVzaEZyYW1lKToKKyAgICAgICAgVG8gZmFrZSB0aGUg
aXNGcmVzaEZyYW1lIHF1ZXJ5LgorICAgICAgICAoRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UpOgor
ICAgICAgICAoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0KToKKyAgICAgICAgKENhbnZhczJETGF5
ZXJNYW5hZ2VyVGVzdDo6ZG9EZWZlcnJlZEZyYW1lVGVzdFRhc2spOgorICAgICAgICBNZXRob2Qg
dGhhdCBzaW11bGF0ZXMgYSBqYXZhc2NyaXB0IHNjaGVkdWxlZCBhY3Rpb24gdGhhdCBkcmF3cyB0
bworICAgICAgICBhIDJEIGNhbnZhcyBsYXllcgorICAgICAgICAoRGVmZXJyZWRGcmFtZVRlc3RU
YXNrKToKKyAgICAgICAgVGFzayBvYmplY3QgdG8gc2ltdWxhdGUgYSBzY2hlZHVsZWQgYWN0aW9u
LiBUaGlzIGlzIHNvIHRoZSB1bml0CisgICAgICAgIHRlc3QgY2FuIGNvdmVyIHRoZSBUYXNrT2Jz
ZXJ2ZXIgYmVoYXZpb3Igb2YgQ2FudmFzMkRMYXllck1hbmFnZXIuCisgICAgICAgIChDYW52YXMy
RExheWVyTWFuYWdlclRlc3Q6OkRlZmVycmVkRnJhbWVUZXN0VGFzazo6RGVmZXJyZWRGcmFtZVRl
c3RUYXNrKToKKyAgICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDo6ZGVmZXJyZWRGcmFt
ZVRlc3QpOgorICAgICAgICBUaGUgdW5pdCB0ZXN0IGltcGxlbWVudGF0aW9uLCB3aGljaCB1c2Vz
IHRoZSBXZWJUaHJlYWQgcnVuIGxvb3AgdG8KKyAgICAgICAgcG9zdCB0YXNrcyB0aGF0IHRvdWNo
IHRoZSBjYW52YXMgbGF5ZXIuCisKIDIwMTItMDktMjggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJl
dmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIx
Mjk4ODIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJN
YW5hZ2VyVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DYW52YXMyRExheWVyTWFuYWdlclRlc3QuY3BwCShyZXZpc2lvbiAxMjk1MzApCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuaCIKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8cHVibGljL1dl
YlRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIHRlc3Rpbmc6Oklu
U2VxdWVuY2U7CkBAIC00NCw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2ZyZWVhYmxl
Qnl0ZXMoMCkKICAgICAgICAgLCBtX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQoMCkKICAgICAg
ICAgLCBtX2ZsdXNoQ291bnQoMCkKKyAgICAgICAgLCBtX2ZyZXNoRnJhbWUodHJ1ZSkKICAgICB7
CiAgICAgfQogCkBAIC02Myw4ICs2NiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBieXRl
c0ZyZWVkOwogICAgIH0KIAorICAgIHZvaWQgZmFrZUZyZXNoRnJhbWUoYm9vbCBmcmVzaEZyYW1l
KQorICAgIHsKKyAgICAgICAgbV9mcmVzaEZyYW1lID0gZnJlc2hGcmFtZTsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgaXNGcmVzaEZyYW1lKCkgT1ZFUlJJREUKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2ZyZXNoRnJhbWU7CisgICAgfQorCitwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGZsdXNoKCkgT1ZFUlJJREUKICAgICB7CisgICAgICAgIGRpZEZsdXNoUGVuZGlu
Z0NvbW1hbmRzKCk7CiAgICAgICAgIG1fZmx1c2hDb3VudCsrOwogICAgIH0KIApAQCAtNzIsNiAr
ODgsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IG1fZnJlZWFibGVCeXRlczsKICAgICBpbnQgbV9m
cmVlTWVtb3J5SWZQb3NzaWJsZUNvdW50OwogICAgIGludCBtX2ZsdXNoQ291bnQ7CisgICAgYm9v
bCBtX2ZyZXNoRnJhbWU7CiB9OwogCiBjbGFzcyBDYW52YXMyRExheWVyTWFuYWdlclRlc3QgOiBw
dWJsaWMgVGVzdCB7CkBAIC0xMzMsNiArMTUwLDc4IEBAIHByb3RlY3RlZDoKICAgICAgICAgRVhQ
RUNUX0VRKChzaXplX3QpMTEsIGxheWVyLmJ5dGVzQWxsb2NhdGVkKCkpOyAvLyBmbHVzaCBkcm9w
cyB0aGUgbGF5ZXIgZnJvbSBtYW5hZ2VyJ3MgdHJhY2tpbmcgbGlzdAogICAgICAgICBFWFBFQ1Rf
RkFMU0UobWFuYWdlci5pc0luTGlzdCgmbGF5ZXIpKTsKICAgICB9CisKKyAgICB2b2lkIGRvRGVm
ZXJyZWRGcmFtZVRlc3RUYXNrKEZha2VDYW52YXMyRExheWVyQnJpZGdlKiBsYXllcikKKyAgICB7
CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV9kZWZl
cnJlZEZyYW1lU3RhcnRlZCk7CisgICAgICAgIGxheWVyLT5jb250ZXh0QWNxdWlyZWQoKTsKKyAg
ICAgICAgbGF5ZXItPnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDEpOworICAg
ICAgICBFWFBFQ1RfVFJVRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV9kZWZlcnJlZEZy
YW1lU3RhcnRlZCk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVu
dFRocmVhZCgpLT5leGl0UnVuTG9vcCgpOworICAgIH0KKworICAgIGNsYXNzIERlZmVycmVkRnJh
bWVUZXN0VGFzayA6IHB1YmxpYyBXZWJLaXQ6OldlYlRocmVhZDo6VGFzayB7CisgICAgcHVibGlj
OgorICAgICAgICBEZWZlcnJlZEZyYW1lVGVzdFRhc2soQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0
KiB0ZXN0LCBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fdGVzdCA9IHRlc3Q7CisgICAgICAgICAgICBtX2xheWVyID0gbGF5ZXI7CisgICAg
ICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgT1ZFUlJJREUKKyAgICAgICAgewor
ICAgICAgICAgICAgbV90ZXN0LT5kb0RlZmVycmVkRnJhbWVUZXN0VGFzayhtX2xheWVyKTsKKyAg
ICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdCog
bV90ZXN0OworICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSogbV9sYXllcjsKKyAgICB9
OworCisgICAgdm9pZCBkZWZlcnJlZEZyYW1lVGVzdCgpCisgICAgeworICAgICAgICBDYW52YXMy
RExheWVyTWFuYWdlcjo6Z2V0KCkuaW5pdCgxMCwgMTApOworICAgICAgICBGYWtlQ2FudmFzMkRM
YXllckJyaWRnZSBmYWtlTGF5ZXI7CisgICAgICAgIGZha2VMYXllci5mYWtlRnJlc2hGcmFtZSh0
cnVlKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFk
KCktPnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVzdFRhc2sodGhpcywgJmZha2VMYXllcikp
OworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+
ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IGRpZFByb2Nlc3NUYXNrIHdh
cyBjYWxsZWQgdXBvbiBjb21wbGV0aW9uCisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExh
eWVyTWFuYWdlcjo6Z2V0KCkubV9kZWZlcnJlZEZyYW1lU3RhcnRlZCk7CisgICAgICAgIC8vIFZl
cmlmeSB0aGF0IG5vIGZsdXNoIHdhcyBwZXJmb3JtZWQgYmVjYXVzZSBmcmFtZSBpcyBmcmVzaAor
ICAgICAgICBFWFBFQ1RfRVEoMCwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAg
Ly8gVmVyaWZ5IHRoYXQgbm8gZmx1c2hlcyBhcmUgdHJpZ2dlcmVkIGFzIGxvbmcgYXMgZnJhbWUg
YXJlIGZyZXNoCisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRo
cmVhZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5
ZXIpKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFk
KCktPmVudGVyUnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1h
bmFnZXI6OmdldCgpLm1fZGVmZXJyZWRGcmFtZVN0YXJ0ZWQpOworICAgICAgICBFWFBFQ1RfRVEo
MCwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6
Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVz
dFRhc2sodGhpcywgJmZha2VMYXllcikpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV9kZWZlcnJlZEZyYW1lU3RhcnRlZCk7
CisgICAgICAgIEVYUEVDVF9FUSgwLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAg
ICAvLyBWZXJpZnkgdGhhdCBhIGZsdXNoIGlzIHRyaWdnZXJlZCBldmVyeSB0d28gZnJhbWVzIHdo
ZW4gdGhleSBhcmUgc3RhbGUuCisgICAgICAgIGZha2VMYXllci5mYWtlRnJlc2hGcmFtZShmYWxz
ZSk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgp
LT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5ZXIpKTsK
KyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVu
dGVyUnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6
OmdldCgpLm1fZGVmZXJyZWRGcmFtZVN0YXJ0ZWQpOworICAgICAgICBFWFBFQ1RfRVEoMCwgZmFr
ZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVzdFRhc2so
dGhpcywgJmZha2VMYXllcikpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCkt
PmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShD
YW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV9kZWZlcnJlZEZyYW1lU3RhcnRlZCk7CisgICAg
ICAgIEVYUEVDVF9FUSgxLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAgICBXZWJL
aXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERl
ZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyKSk7CisgICAgICAgIFdlYktpdDo6
UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX2RlZmVycmVk
RnJhbWVTdGFydGVkKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGZha2VMYXllci5tX2ZsdXNoQ291
bnQpOworCisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVh
ZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5ZXIp
KTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCkt
PmVudGVyUnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFn
ZXI6OmdldCgpLm1fZGVmZXJyZWRGcmFtZVN0YXJ0ZWQpOworICAgICAgICBFWFBFQ1RfRVEoMiwg
ZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisgICAgfQogfTsKIAogbmFtZXNwYWNlIHsKQEAgLTE1
Miw1ICsyNDEsMTAgQEAgVEVTVF9GKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdEZsdQog
ICAgIGZsdXNoRXZpY3Rpb25UZXN0KCk7CiB9CiAKK1RFU1RfRihDYW52YXMyRExheWVyTWFuYWdl
clRlc3QsIHRlc3REZWZlcnJlZEZyYW1lKQoreworICAgIGRlZmVycmVkRnJhbWVUZXN0KCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166746</attachid>
            <date>2012-10-02 14:01:46 -0700</date>
            <delta_ts>2012-10-03 10:56:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97918-20121002170057.patch</filename>
            <type>text/plain</type>
            <size>16907</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTEwLTAyICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFNtb290
aGVyIGFuaW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWR1Y2VzIGFuaW1hdGlvbiBq
YW5rIGJ5IHByZXZlbnRpbmcgdGhlIGFjY3VtdWxhdGlvbiBvZiBtdWx0aXBsZQorICAgICAgICBm
cmFtZXMgb2YgYmFja2xvZyBpbiB0aGUgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZyBxdWV1ZS4g
V2hlbiB0aGUKKyAgICAgICAgYW5pbWF0aW9uIGlzIG1vcmUgdGhhbiBvbmUgZnVsbCBmcmFtZSBh
aGVhZCBvZiB0aGUgY29tcG9zaXRvciwgYW4KKyAgICAgICAgaW1tZWRpYXRlIGZsdXNoIGlzIHRy
aWdnZXJlZC4gIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IG92ZXJkcmF3CisgICAgICAgIGVsaW1p
bmF0aW9uIGJ5IHRoZSBza2lwLW9uLWNsZWFyIG9wdGltaXphdGlvbiB0aGF0IGlzIGJ1aWx0LWlu
IHRvCisgICAgICAgIFNrRGVmZXJyZWRDYW52YXMsIHRvIGFsbG93IG5vbi1SQUYgYW5pbWF0aW9u
cyB0aGF0IGNsZWFyIHRoZSBjYW52YXMgYXQKKyAgICAgICAgZWFjaCBmcmFtZSB0byBydW4gd2l0
aG91dCBhbnkgcmF0ZSBsaW1pdGluZy4gVGhpcyBjaGFuZ2UgYWxzbworICAgICAgICBpbmNpZGVu
dGFsbHkgaW1wcm92ZXMgZnJhbWUgcmF0ZSBpbiBtYW55IGNhc2VzIGJ5IHByb3ZpZGluZyBtb3Jl
CisgICAgICAgIGdyYW51bGFyIGJhdGNoaW5nIG9mIEdQVSBBUEkgY2FsbHMsIHJlc3VsdGluZyBp
biBiZXR0ZXIgcGlwZWxpbmluZworICAgICAgICB0aHJvdWdoIHRoZSBjb21tYW5kIGJ1ZmZlci4K
KworICAgICAgICBUZXN0OiB3ZWJraXRfdW5pdF90ZXN0IENhbnZhczJETGF5ZXJNYW5hZ2VyVGVz
dC50ZXN0RGVmZXJyZWRGcmFtZQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmRpZERyYXdGcmFtZSk6CisgICAgICAgIENhbGxlZCBhdCB0aGUgZW5k
IG9mIGEgdGFzayAodXN1YWxseSBhIHNjaGVkdWxlZCBzY3JpcHQgYWN0aW9uKSB0aGF0CisgICAg
ICAgIGludm9rZWQgMmQgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMuIFRoZSBlbmQg
b2YgdGhlIHRhc2sKKyAgICAgICAgbWFya3MgdGhlIGNvbXBsZXRpb24gb2YgYSBkaXNwbGF5YWJs
ZSBmcmFtZS4gVGhpcyBtZXRob2Qgd2lsbCB0cmlnZ2VyCisgICAgICAgIGEgZmx1c2ggaWYgaXQg
ZGV0ZWN0cyB0aGF0IHRoZSBsYXllciBoYXMgcGVuZGluZyBkcmF3IGNvbW1hbmRzIHRoYXQKKyAg
ICAgICAgYXJlIG1vcmUgdGhhdCBvbmUgZnJhbWUgb2xkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0NvbW1hbmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmRpZEZsdXNoUGVuZGlu
Z0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OnNraXBw
ZWRQZW5kaW5nRHJhd0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJC
cmlkZ2U6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmNv
bnRleHRBY3F1aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckJyaWRnZS5oOgorICAgICAgICAoQ2FudmFzMkRMYXllckJyaWRnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1hbmFnZXI6On5DYW52YXMyRExheWVy
TWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6d2lsbFBy
b2Nlc3NUYXNrKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
MkRMYXllck1hbmFnZXI6OmRpZFByb2Nlc3NUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJNYW5hZ2VyOjpsYXllckRpZERyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmg6CisgICAgICAgIChDYW52YXMyRExh
eWVyTWFuYWdlcik6CisKIDIwMTItMTAtMDIgIERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2luZGV4ZWRkYi9kYXRhYmFz
ZS1zdHJ1Y3R1cmUuaHRtbCBzdGFydCB0byBjcmFzaCBhZnRlciByMTI0Njc1CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcAkocmV2aXNpb24gMTMwMTk3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgQ2FudmFzMkRMYXllckJyaWRnZTo6
Q2FudmFzMkRMYXllckJyaWRnZQogICAgICwgbV9jYW52YXMoMCkKICAgICAsIG1fY29udGV4dChj
b250ZXh0KQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9kaWRSZWNvcmREcmF3
Q29tbWFuZChmYWxzZSkKKyAgICAsIG1fZnJhbWVzUGVuZGluZygwKQogICAgICwgbV9uZXh0KDAp
CiAgICAgLCBtX3ByZXYoMCkKIHsKQEAgLTEwNiw2ICsxMDgsMTYgQEAgU2tEZWZlcnJlZENhbnZh
cyogQ2FudmFzMkRMYXllckJyaWRnZTo6ZAogICAgIHJldHVybiAwOwogfQogCit2b2lkIENhbnZh
czJETGF5ZXJCcmlkZ2U6OmRpZERyYXdGcmFtZSgpCit7CisgICAgaWYgKG1fZGlkUmVjb3JkRHJh
d0NvbW1hbmQpIHsKKyAgICAgICAgbV9mcmFtZXNQZW5kaW5nKys7CisgICAgICAgIG1fZGlkUmVj
b3JkRHJhd0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZnJhbWVzUGVuZGluZyA+IDEp
CisgICAgICAgICAgICBmbHVzaCgpOworICAgIH0KK30KKwogdm9pZCBDYW52YXMyRExheWVyQnJp
ZGdlOjpwcmVwYXJlRm9yRHJhdygpCiB7CiAgICAgQVNTRVJUKGRlZmVycmVkQ2FudmFzKCkpOwpA
QCAtMTI1LDYgKzEzNywxNyBAQCB2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6OnN0b3JhZ2VBbGxv
Y2F0CiB2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6OmZsdXNoZWREcmF3Q29tbWFuZHMoKQogewog
ICAgIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKGRlZmVycmVkQ2FudmFzKCkt
PnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKSk7CisgICAgZGlkRmx1c2hQZW5kaW5nQ29t
bWFuZHMoKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpkaWRGbHVzaFBlbmRpbmdD
b21tYW5kcygpCit7CisgICAgbV9mcmFtZXNQZW5kaW5nID0gMDsKK30KKwordm9pZCBDYW52YXMy
RExheWVyQnJpZGdlOjpza2lwcGVkUGVuZGluZ0RyYXdDb21tYW5kcygpCit7CisgICAgZmx1c2hl
ZERyYXdDb21tYW5kcygpOwogfQogCiBzaXplX3QgQ2FudmFzMkRMYXllckJyaWRnZTo6ZnJlZU1l
bW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5dGVzVG9GcmVlKQpAQCAtMTQwLDcgKzE2Myw4IEBAIHNp
emVfdCBDYW52YXMyRExheWVyQnJpZGdlOjpmcmVlTWVtb3J5SWYKIHZvaWQgQ2FudmFzMkRMYXll
ckJyaWRnZTo6Zmx1c2goKQogewogICAgIEFTU0VSVChkZWZlcnJlZENhbnZhcygpKTsKLSAgICBt
X2NhbnZhcy0+Zmx1c2goKTsKKyAgICBpZiAoZGVmZXJyZWRDYW52YXMoKS0+aGFzUGVuZGluZ0Nv
bW1hbmRzKCkpCisgICAgICAgIG1fY2FudmFzLT5mbHVzaCgpOwogfQogCiBTa0NhbnZhcyogQ2Fu
dmFzMkRMYXllckJyaWRnZTo6c2tDYW52YXMoU2tEZXZpY2UqIGRldmljZSkKQEAgLTE5Niw4ICsy
MjAsMTAgQEAgdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0QWNxdWlyZQogewogICAg
IGlmIChtX2RlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCAmJiAhbV91c2VEb3VibGVCdWZmZXJp
bmcpCiAgICAgICAgIG1fbGF5ZXItPndpbGxNb2RpZnlUZXh0dXJlKCk7Ci0gICAgZWxzZSBpZiAo
bV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpCisgICAgZWxzZSBpZiAobV9kZWZlcnJhbE1vZGUg
PT0gRGVmZXJyZWQpIHsKICAgICAgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVy
RGlkRHJhdyh0aGlzKTsKKyAgICAgICAgbV9kaWRSZWNvcmREcmF3Q29tbWFuZCA9IHRydWU7Cisg
ICAgfQogfQogCiB1bnNpZ25lZCBDYW52YXMyRExheWVyQnJpZGdlOjpiYWNrQnVmZmVyVGV4dHVy
ZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCShyZXZpc2lvbiAxMzAxOTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExh
eWVyQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDExICs2MiwxMyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2
b2lkIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKHNpemVfdCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoZWREcmF3Q29tbWFuZHMoKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2tpcHBlZFBlbmRpbmdEcmF3Q29tbWFuZHMoKSBPVkVSUklERTsKIAogICAg
IC8vIE1ldGhvZHMgdXNlZCBieSBDYW52YXMyRExheWVyTWFuYWdlcgogICAgIHZpcnR1YWwgc2l6
ZV90IGZyZWVNZW1vcnlJZlBvc3NpYmxlKHNpemVfdCk7IC8vIHZpcnR1YWwgZm9yIG1vY2tpbmcK
ICAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKTsgLy8gdmlydHVhbCBmb3IgbW9ja2luZwogICAgIHNp
emVfdCBieXRlc0FsbG9jYXRlZCgpIGNvbnN0IHtyZXR1cm4gbV9ieXRlc0FsbG9jYXRlZDt9Cisg
ICAgdm9pZCBkaWREcmF3RnJhbWUoKTsKIAogICAgIFNrQ2FudmFzKiBza0NhbnZhcyhTa0Rldmlj
ZSopOwogICAgIFdlYktpdDo6V2ViTGF5ZXIqIGxheWVyKCk7CkBAIC03Nyw2ICs3OSw3IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICBDYW52YXMyRExheWVyQnJpZGdlKFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+LCBjb25zdCBJbnRTaXplJiwgRGVmZXJyYWxNb2RlLCB1bnNpZ25lZCB0
ZXh0dXJlSWQpOwogICAgIFNrRGVmZXJyZWRDYW52YXMqIGRlZmVycmVkQ2FudmFzKCk7CisgICAg
dm9pZCBkaWRGbHVzaFBlbmRpbmdDb21tYW5kcygpOwogCiAgICAgRGVmZXJyYWxNb2RlIG1fZGVm
ZXJyYWxNb2RlOwogICAgIGJvb2wgbV91c2VEb3VibGVCdWZmZXJpbmc7CkBAIC04Nyw2ICs5MCw4
IEBAIHByb3RlY3RlZDoKICAgICBPd25QdHI8V2ViS2l0OjpXZWJFeHRlcm5hbFRleHR1cmVMYXll
cj4gbV9sYXllcjsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKICAg
ICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKKyAgICBib29sIG1fZGlkUmVjb3JkRHJhd0NvbW1h
bmQ7CisgICAgaW50IG1fZnJhbWVzUGVuZGluZzsKIAogICAgIGZyaWVuZCBjbGFzcyBXVEY6OkRv
dWJseUxpbmtlZExpc3ROb2RlPENhbnZhczJETGF5ZXJCcmlkZ2U+OwogICAgIENhbnZhczJETGF5
ZXJCcmlkZ2UqIG1fbmV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5j
cHAJKHJldmlzaW9uIDEzMDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUs
OCArMjUsMTEgQEAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSQogCiAj
aW5jbHVkZSAiQ2FudmFzMkRMYXllck1hbmFnZXIuaCIKIAorI2luY2x1ZGUgPHB1YmxpYy9QbGF0
Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAordXNpbmcgV2ViS2l0OjpX
ZWJUaHJlYWQ7CisKIG5hbWVzcGFjZSB7CiBlbnVtIHsKICAgICBEZWZhdWx0TWF4Qnl0ZXNBbGxv
Y2F0ZWQgPSA2NCoxMDI0KjEwMjQsCkBAIC00Nyw2ICs1MCw3IEBAIENhbnZhczJETGF5ZXJNYW5h
Z2VyOjp+Q2FudmFzMkRMYXllck1hbmEKIHsKICAgICBBU1NFUlQoIW1fYnl0ZXNBbGxvY2F0ZWQp
OwogICAgIEFTU0VSVCghbV9sYXllckxpc3QuaGVhZCgpKTsKKyAgICBBU1NFUlQoIW1fZGVmZXJy
ZWRGcmFtZVN0YXJ0ZWQpOwogfQogCiB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjppbml0KHNp
emVfdCBtYXhCeXRlc0FsbG9jYXRlZCwgc2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKQpAQCAt
NjIsNiArNjYsMjIgQEAgQ2FudmFzMkRMYXllck1hbmFnZXImIENhbnZhczJETGF5ZXJNYW5hZwog
ICAgIHJldHVybiBtYW5hZ2VyOwogfQogCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjp3aWxs
UHJvY2Vzc1Rhc2soKQoreworICAgIC8vIE9ic2VydmVyIGlzIHJlZ2lzdGVyZWQgZHVyaW5nIGEg
dGFzayBhbmQgZGVyZWdpc3RlcmVkIHVwb24gdGFzayBjb21wbGV0aW9uLgorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpkaWRQcm9jZXNz
VGFzaygpCit7CisgICAgLy8gQ2FsbGVkIGFmdGVyIHRoZSBzY3JpcHQgYWN0aW9uIGZvciB0aGUg
Y3VycmVudCBmcmFtZSBoYXMgYmVlbiBwcm9jZXNzZWQuCisgICAgQVNTRVJUKG1fZGVmZXJyZWRG
cmFtZVN0YXJ0ZWQpOworICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRo
cmVhZCgpLT5yZW1vdmVUYXNrT2JzZXJ2ZXIodGhpcyk7CisgICAgbV9kZWZlcnJlZEZyYW1lU3Rh
cnRlZCA9IGZhbHNlOworICAgIGZvciAoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIgPSBtX2xh
eWVyTGlzdC5oZWFkKCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5uZXh0KCkpCisgICAgICAgIGxh
eWVyLT5kaWREcmF3RnJhbWUoKTsKK30KKwogdm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5
ZXJEaWREcmF3KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyKQogewogICAgIGlmIChpc0luTGlz
dChsYXllcikpIHsKQEAgLTcwLDcgKzkwLDEzIEBAIHZvaWQgQ2FudmFzMkRMYXllck1hbmFnZXI6
OmxheWVyRGlkRHJhdygKICAgICAgICAgICAgIG1fbGF5ZXJMaXN0LnB1c2gobGF5ZXIpOyAvLyBT
ZXQgYXMgTVJVCiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgYWRkTGF5ZXJUb0xpc3Qo
bGF5ZXIpOyAKKyAgICAgICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIpOworCisgICAgaWYgKCFtX2Rl
ZmVycmVkRnJhbWVTdGFydGVkKSB7CisgICAgICAgIG1fZGVmZXJyZWRGcmFtZVN0YXJ0ZWQgPSB0
cnVlOworICAgICAgICAvLyBTY2hlZHVsZSBhIGNhbGwgdG8gZGlkUHJvY2Vzc1Rhc2soKSBhZnRl
ciBjb21wbGV0aW9uIG9mIHRoZSBjdXJyZW50IHNjcmlwdCB0YXNrLgorICAgICAgICBXZWJLaXQ6
OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+YWRkVGFza09ic2VydmVyKHRo
aXMpOworICAgIH0KIH0KIAogdm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6YWRkTGF5ZXJUb0xp
c3QoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJNYW5hZ2VyLmgJKHJldmlzaW9uIDEzMDE5NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDEyICsyNiwxMyBAQCBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJCiAjZGVmaW5lIENhbnZhczJETGF5ZXJNYW5hZ2VyX2gKIAogI2luY2x1ZGUgIkNhbnZhczJE
TGF5ZXJCcmlkZ2UuaCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVGhyZWFkLmg+CiAKIGNsYXNzIENh
bnZhczJETGF5ZXJNYW5hZ2VyVGVzdDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBD
YW52YXMyRExheWVyTWFuYWdlciB7CitjbGFzcyBDYW52YXMyRExheWVyTWFuYWdlciA6IHB1Ymxp
YyBXZWJLaXQ6OldlYlRocmVhZDo6VGFza09ic2VydmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
Q2FudmFzMkRMYXllck1hbmFnZXImIGdldCgpOwogICAgIHZvaWQgaW5pdChzaXplX3QgbWF4Qnl0
ZXNBbGxvY2F0ZWQsIHNpemVfdCB0YXJnZXRCeXRlc0FsbG9jYXRlZCk7CkBAIC00OCwxMCArNDks
MTMgQEAgcHJpdmF0ZToKICAgICBib29sIGlzSW5MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsK
ICAgICB2b2lkIGFkZExheWVyVG9MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKICAgICB2b2lk
IHJlbW92ZUxheWVyRnJvbUxpc3QoQ2FudmFzMkRMYXllckJyaWRnZSopOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsUHJvY2Vzc1Rhc2soKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUHJv
Y2Vzc1Rhc2soKSBPVkVSUklERTsKIAogICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOwogICAg
IHNpemVfdCBtX21heEJ5dGVzQWxsb2NhdGVkOwogICAgIHNpemVfdCBtX3RhcmdldEJ5dGVzQWxs
b2NhdGVkOworICAgIGJvb2wgbV9kZWZlcnJlZEZyYW1lU3RhcnRlZDsKICAgICBEb3VibHlMaW5r
ZWRMaXN0PENhbnZhczJETGF5ZXJCcmlkZ2U+IG1fbGF5ZXJMaXN0OwogCiAgICAgZnJpZW5kIGNs
YXNzIDo6Q2FudmFzMkRMYXllck1hbmFnZXJUZXN0OyAvLyBmb3IgdW5pdCB0ZXN0aW5nCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwMTk4KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAor
MjAxMi0xMC0wMiAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgW0Nocm9taXVtXSBTbW9vdGhlciBhbmltYXRpb24gZm9yIG5vbi1SQUYgMkQgY2FudmFzIGFu
aW1hdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk3OTE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TmV3IHVuaXQgdGVzdCB0byB2ZXJpZnkgdGhlIGF1dG9tYXRpYyBmbHVzaGluZyBvZiBkZWZlcnJl
ZCAyZCBjYW52YXMKKyAgICAgICAgbGF5ZXJzIHdoZW4gc2NyaXB0ZWQgYW5pbWF0aW9ucyBhcmUg
bW9yZSB0aGFuIG9uZSBmdWxsIGZyYW1lIGFoZWFkIAorICAgICAgICBvZiB0aGUgY29tcG9zaXRv
ci4gQWxzbyB2ZXJpZmllcyB0aGF0IGF1dG9tYXRpYyBmbHVzaGluZyBkb2VzIG5vdAorICAgICAg
ICBraWNrLWluIHdoZW4gdGhlIHNraXAgb24gY2xlYXIgb3B0aW1pemF0aW9uIGZpcmVzCisKKyAg
ICAgICAgKiBERVBTOgorICAgICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdC5j
cHA6CisgICAgICAgIChGYWtlQ2FudmFzMkRMYXllckJyaWRnZTo6ZmFrZVNraXBQZW5kaW5nRHJh
d0NvbW1hbmRzKToKKyAgICAgICAgVG8gZmFrZSB0aGUgc2tpcCBvbiBjbGVhciBvcHRpbWl6YXRp
b24KKyAgICAgICAgKEZha2VDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKENhbnZhczJE
TGF5ZXJNYW5hZ2VyVGVzdCk6CisgICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlclRlc3Q6OmRv
RGVmZXJyZWRGcmFtZVRlc3RUYXNrKToKKyAgICAgICAgTWV0aG9kIHRoYXQgc2ltdWxhdGVzIGEg
amF2YXNjcmlwdCBzY2hlZHVsZWQgYWN0aW9uIHRoYXQgZHJhd3MgdG8KKyAgICAgICAgYSAyRCBj
YW52YXMgbGF5ZXIKKyAgICAgICAgKERlZmVycmVkRnJhbWVUZXN0VGFzayk6CisgICAgICAgIFRh
c2sgb2JqZWN0IHRvIHNpbXVsYXRlIGEgc2NoZWR1bGVkIGFjdGlvbi4gVGhpcyBpcyBzbyB0aGUg
dW5pdAorICAgICAgICB0ZXN0IGNhbiBjb3ZlciB0aGUgVGFza09ic2VydmVyIGJlaGF2aW9yIG9m
IENhbnZhczJETGF5ZXJNYW5hZ2VyLgorICAgICAgICAoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0
OjpEZWZlcnJlZEZyYW1lVGVzdFRhc2s6OkRlZmVycmVkRnJhbWVUZXN0VGFzayk6CisgICAgICAg
IChDYW52YXMyRExheWVyTWFuYWdlclRlc3Q6OmRlZmVycmVkRnJhbWVUZXN0KToKKyAgICAgICAg
VGhlIHVuaXQgdGVzdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggdXNlcyB0aGUgV2ViVGhyZWFkIHJ1
biBsb29wIHRvCisgICAgICAgIHBvc3QgdGFza3MgdGhhdCB0b3VjaCB0aGUgY2FudmFzIGxheWVy
LgorCiAyMDEyLTEwLTAyICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1ha2Ugc3VyZSB0aGUgdG91Y2gtcG9pbnRzIGlu
IHRoZSB0b3VjaC1ldmVudHMgaGF2ZSB0aGUgY29ycmVjdCBzdGF0ZS4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vREVQUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0RFUFMJKHJldmlzaW9uIDEzMDE5NykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vREVQUwko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiB2YXJzID0gewogICAnY2hyb21pdW1f
c3ZuJzogJ2h0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3N2bi90cnVuay9zcmMnLAotICAnY2hyb21p
dW1fcmV2JzogJzE1OTAxOScKKyAgJ2Nocm9taXVtX3Jldic6ICcxNTk2ODEnCiB9CiAKIGRlcHMg
PSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJNYW5h
Z2VyVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
YW52YXMyRExheWVyTWFuYWdlclRlc3QuY3BwCShyZXZpc2lvbiAxMzAxOTcpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGUuaCIKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0
Lmg+CisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlRo
cmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIHRlc3Rpbmc6OkluU2Vx
dWVuY2U7CkBAIC02NSw5ICs2NywxNSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZmx1
c2goKSBPVkVSUklERQogICAgIHsKKyAgICAgICAgZGlkRmx1c2hQZW5kaW5nQ29tbWFuZHMoKTsK
ICAgICAgICAgbV9mbHVzaENvdW50Kys7CiAgICAgfQogCisgICAgdm9pZCBmYWtlU2tpcFBlbmRp
bmdEcmF3Q29tbWFuZHMoKQorICAgIHsKKyAgICAgICAgZGlkRmx1c2hQZW5kaW5nQ29tbWFuZHMo
KTsKKyAgICB9CisKIHB1YmxpYzoKICAgICBzaXplX3QgbV9mcmVlYWJsZUJ5dGVzOwogICAgIGlu
dCBtX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQ7CkBAIC0xMzMsNiArMTQxLDgzIEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMTEsIGxheWVyLmJ5dGVzQWxsb2NhdGVk
KCkpOyAvLyBmbHVzaCBkcm9wcyB0aGUgbGF5ZXIgZnJvbSBtYW5hZ2VyJ3MgdHJhY2tpbmcgbGlz
dAogICAgICAgICBFWFBFQ1RfRkFMU0UobWFuYWdlci5pc0luTGlzdCgmbGF5ZXIpKTsKICAgICB9
CisKKyAgICB2b2lkIGRvRGVmZXJyZWRGcmFtZVRlc3RUYXNrKEZha2VDYW52YXMyRExheWVyQnJp
ZGdlKiBsYXllciwgYm9vbCBza2lwQ29tbWFuZHMpCisgICAgeworICAgICAgICBFWFBFQ1RfRkFM
U0UoQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLm1fZGVmZXJyZWRGcmFtZVN0YXJ0ZWQpOwor
ICAgICAgICBsYXllci0+Y29udGV4dEFjcXVpcmVkKCk7CisgICAgICAgIGxheWVyLT5zdG9yYWdl
QWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZCgxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoQ2Fu
dmFzMkRMYXllck1hbmFnZXI6OmdldCgpLm1fZGVmZXJyZWRGcmFtZVN0YXJ0ZWQpOworICAgICAg
ICBpZiAoc2tpcENvbW1hbmRzKSB7CisgICAgICAgICAgICBsYXllci0+Y29udGV4dEFjcXVpcmVk
KCk7CisgICAgICAgICAgICBsYXllci0+c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5n
ZWQoMCk7CisgICAgICAgICAgICBsYXllci0+ZmFrZVNraXBQZW5kaW5nRHJhd0NvbW1hbmRzKCk7
CisgICAgICAgIH0KKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50
VGhyZWFkKCktPmV4aXRSdW5Mb29wKCk7CisgICAgfQorCisgICAgY2xhc3MgRGVmZXJyZWRGcmFt
ZVRlc3RUYXNrIDogcHVibGljIFdlYktpdDo6V2ViVGhyZWFkOjpUYXNrIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIERlZmVycmVkRnJhbWVUZXN0VGFzayhDYW52YXMyRExheWVyTWFuYWdlclRlc3Qq
IHRlc3QsIEZha2VDYW52YXMyRExheWVyQnJpZGdlKiBsYXllciwgYm9vbCBza2lwQ29tbWFuZHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdGVzdCA9IHRlc3Q7CisgICAgICAgICAgICBtX2xh
eWVyID0gbGF5ZXI7CisgICAgICAgICAgICBtX3NraXBDb21tYW5kcyA9IHNraXBDb21tYW5kczsK
KyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERQorICAgICAg
ICB7CisgICAgICAgICAgICBtX3Rlc3QtPmRvRGVmZXJyZWRGcmFtZVRlc3RUYXNrKG1fbGF5ZXIs
IG1fc2tpcENvbW1hbmRzKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIENhbnZh
czJETGF5ZXJNYW5hZ2VyVGVzdCogbV90ZXN0OworICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJy
aWRnZSogbV9sYXllcjsKKyAgICAgICAgYm9vbCBtX3NraXBDb21tYW5kczsKKyAgICB9OworCisg
ICAgdm9pZCBkZWZlcnJlZEZyYW1lVGVzdCgpCisgICAgeworICAgICAgICBDYW52YXMyRExheWVy
TWFuYWdlcjo6Z2V0KCkuaW5pdCgxMCwgMTApOworICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJy
aWRnZSBmYWtlTGF5ZXI7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3Vy
cmVudFRocmVhZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZm
YWtlTGF5ZXIsIHRydWUpKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5j
dXJyZW50VGhyZWFkKCktPmVudGVyUnVuTG9vcCgpOworICAgICAgICAvLyBWZXJpZnkgdGhhdCBk
aWRQcm9jZXNzVGFzayB3YXMgY2FsbGVkIHVwb24gY29tcGxldGlvbgorICAgICAgICBFWFBFQ1Rf
RkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLm1fZGVmZXJyZWRGcmFtZVN0YXJ0ZWQp
OworICAgICAgICAvLyBWZXJpZnkgdGhhdCBubyBmbHVzaCB3YXMgcGVyZm9ybWVkIGJlY2F1c2Ug
ZnJhbWUgaXMgZnJlc2gKKyAgICAgICAgRVhQRUNUX0VRKDAsIGZha2VMYXllci5tX2ZsdXNoQ291
bnQpOworCisgICAgICAgIC8vIFZlcmlmeSB0aGF0IG5vIGZsdXNoZXMgYXJlIHRyaWdnZXJlZCBh
cyBsb25nIGFzIGZyYW1lIGFyZSBmcmVzaAorICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJhbWVUZXN0VGFz
ayh0aGlzLCAmZmFrZUxheWVyLCB0cnVlKSk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1
cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX2RlZmVycmVkRnJhbWVTdGFydGVk
KTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGZha2VMYXllci5tX2ZsdXNoQ291bnQpOworCisgICAg
ICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0VGFz
ayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5ZXIsIHRydWUpKTsKKyAg
ICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVudGVy
UnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6Omdl
dCgpLm1fZGVmZXJyZWRGcmFtZVN0YXJ0ZWQpOworICAgICAgICBFWFBFQ1RfRVEoMCwgZmFrZUxh
eWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgYSBmbHVzaCBpcyB0
cmlnZ2VyZWQgZXZlcnkgdHdvIGZyYW1lcyB3aGVuIHRoZXkgYXJlIHN0YWxlLgorICAgICAgICBX
ZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3
IERlZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCBmYWxzZSkpOworICAgICAg
ICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5M
b29wKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCku
bV9kZWZlcnJlZEZyYW1lU3RhcnRlZCk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBmYWtlTGF5ZXIu
bV9mbHVzaENvdW50KTsKKworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1
cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAm
ZmFrZUxheWVyLCBmYWxzZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCkt
PmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShD
YW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV9kZWZlcnJlZEZyYW1lU3RhcnRlZCk7CisgICAg
ICAgIEVYUEVDVF9FUSgxLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAgICBXZWJL
aXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERl
ZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCBmYWxzZSkpOworICAgICAgICBX
ZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29w
KCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV9k
ZWZlcnJlZEZyYW1lU3RhcnRlZCk7CisgICAgICAgIEVYUEVDVF9FUSgyLCBmYWtlTGF5ZXIubV9m
bHVzaENvdW50KTsKKworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJl
bnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAmZmFr
ZUxheWVyLCBmYWxzZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1
cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52
YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV9kZWZlcnJlZEZyYW1lU3RhcnRlZCk7CisgICAgICAg
IEVYUEVDVF9FUSgyLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKyAgICB9CiB9OwogCiBuYW1l
c3BhY2UgewpAQCAtMTUyLDUgKzIzNywxMCBAQCBURVNUX0YoQ2FudmFzMkRMYXllck1hbmFnZXJU
ZXN0LCB0ZXN0Rmx1CiAgICAgZmx1c2hFdmljdGlvblRlc3QoKTsKIH0KIAorVEVTVF9GKENhbnZh
czJETGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdERlZmVycmVkRnJhbWUpCit7CisgICAgZGVmZXJyZWRG
cmFtZVRlc3QoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166922</attachid>
            <date>2012-10-03 10:56:24 -0700</date>
            <delta_ts>2012-10-03 13:39:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97918-20121003135535.patch</filename>
            <type>text/plain</type>
            <size>16901</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTEwLTAyICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFNtb290
aGVyIGFuaW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWR1Y2VzIGFuaW1hdGlvbiBq
YW5rIGJ5IHByZXZlbnRpbmcgdGhlIGFjY3VtdWxhdGlvbiBvZiBtdWx0aXBsZQorICAgICAgICBm
cmFtZXMgb2YgYmFja2xvZyBpbiB0aGUgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZyBxdWV1ZS4g
V2hlbiB0aGUKKyAgICAgICAgYW5pbWF0aW9uIGlzIG1vcmUgdGhhbiBvbmUgZnVsbCBmcmFtZSBh
aGVhZCBvZiB0aGUgY29tcG9zaXRvciwgYW4KKyAgICAgICAgaW1tZWRpYXRlIGZsdXNoIGlzIHRy
aWdnZXJlZC4gIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IG92ZXJkcmF3CisgICAgICAgIGVsaW1p
bmF0aW9uIGJ5IHRoZSBza2lwLW9uLWNsZWFyIG9wdGltaXphdGlvbiB0aGF0IGlzIGJ1aWx0LWlu
IHRvCisgICAgICAgIFNrRGVmZXJyZWRDYW52YXMsIHRvIGFsbG93IG5vbi1SQUYgYW5pbWF0aW9u
cyB0aGF0IGNsZWFyIHRoZSBjYW52YXMgYXQKKyAgICAgICAgZWFjaCBmcmFtZSB0byBydW4gd2l0
aG91dCBhbnkgcmF0ZSBsaW1pdGluZy4gVGhpcyBjaGFuZ2UgYWxzbworICAgICAgICBpbmNpZGVu
dGFsbHkgaW1wcm92ZXMgZnJhbWUgcmF0ZSBpbiBtYW55IGNhc2VzIGJ5IHByb3ZpZGluZyBtb3Jl
CisgICAgICAgIGdyYW51bGFyIGJhdGNoaW5nIG9mIEdQVSBBUEkgY2FsbHMsIHJlc3VsdGluZyBp
biBiZXR0ZXIgcGlwZWxpbmluZworICAgICAgICB0aHJvdWdoIHRoZSBjb21tYW5kIGJ1ZmZlci4K
KworICAgICAgICBUZXN0OiB3ZWJraXRfdW5pdF90ZXN0IENhbnZhczJETGF5ZXJNYW5hZ2VyVGVz
dC50ZXN0RGVmZXJyZWRGcmFtZQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmxpbWl0UGVuZGluZ0ZyYW1lcyk6CisgICAgICAgIENhbGxlZCBhdCB0
aGUgZW5kIG9mIGEgdGFzayAodXN1YWxseSBhIHNjaGVkdWxlZCBzY3JpcHQgYWN0aW9uKSB0aGF0
CisgICAgICAgIGludm9rZWQgMmQgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMuIFRo
ZSBlbmQgb2YgdGhlIHRhc2sKKyAgICAgICAgbWFya3MgdGhlIGNvbXBsZXRpb24gb2YgYSBkaXNw
bGF5YWJsZSBmcmFtZS4gVGhpcyBtZXRob2Qgd2lsbCB0cmlnZ2VyCisgICAgICAgIGEgZmx1c2gg
aWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBsYXllciBoYXMgcGVuZGluZyBkcmF3IGNvbW1hbmRzIHRo
YXQKKyAgICAgICAgYXJlIG1vcmUgdGhhdCBvbmUgZnJhbWUgb2xkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0Nv
bW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmRpZEZsdXNo
UGVuZGluZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6
OnNraXBwZWRQZW5kaW5nRHJhd0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJE
TGF5ZXJCcmlkZ2U6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlk
Z2U6OmNvbnRleHRBY3F1aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckJyaWRnZS5oOgorICAgICAgICAoQ2FudmFzMkRMYXllckJyaWRnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1hbmFnZXI6On5DYW52YXMy
RExheWVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6
d2lsbFByb2Nlc3NUYXNrKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllck1hbmFnZXI6OmRpZFByb2Nlc3NUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckRpZERyYXcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmg6CisgICAgICAgIChDYW52
YXMyRExheWVyTWFuYWdlcik6CisKIDIwMTItMTAtMDIgIERhdmlkIEdyb2dhbiAgPGRncm9nYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2luZGV4ZWRkYi9k
YXRhYmFzZS1zdHJ1Y3R1cmUuaHRtbCBzdGFydCB0byBjcmFzaCBhZnRlciByMTI0Njc1CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
QnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcAkocmV2aXNpb24gMTMwMTk3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJy
aWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgQ2FudmFzMkRMYXllckJy
aWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZQogICAgICwgbV9jYW52YXMoMCkKICAgICAsIG1fY29u
dGV4dChjb250ZXh0KQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9kaWRSZWNv
cmREcmF3Q29tbWFuZChmYWxzZSkKKyAgICAsIG1fZnJhbWVzUGVuZGluZygwKQogICAgICwgbV9u
ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKIHsKQEAgLTEwNiw2ICsxMDgsMTYgQEAgU2tEZWZlcnJl
ZENhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6ZAogICAgIHJldHVybiAwOwogfQogCit2b2lk
IENhbnZhczJETGF5ZXJCcmlkZ2U6OmxpbWl0UGVuZGluZ0ZyYW1lcygpCit7CisgICAgaWYgKG1f
ZGlkUmVjb3JkRHJhd0NvbW1hbmQpIHsKKyAgICAgICAgbV9mcmFtZXNQZW5kaW5nKys7CisgICAg
ICAgIG1fZGlkUmVjb3JkRHJhd0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZnJhbWVz
UGVuZGluZyA+IDEpCisgICAgICAgICAgICBmbHVzaCgpOworICAgIH0KK30KKwogdm9pZCBDYW52
YXMyRExheWVyQnJpZGdlOjpwcmVwYXJlRm9yRHJhdygpCiB7CiAgICAgQVNTRVJUKGRlZmVycmVk
Q2FudmFzKCkpOwpAQCAtMTI1LDYgKzEzNywxNyBAQCB2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6
OnN0b3JhZ2VBbGxvY2F0CiB2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6OmZsdXNoZWREcmF3Q29t
bWFuZHMoKQogewogICAgIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKGRlZmVy
cmVkQ2FudmFzKCktPnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKSk7CisgICAgZGlkRmx1
c2hQZW5kaW5nQ29tbWFuZHMoKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpkaWRG
bHVzaFBlbmRpbmdDb21tYW5kcygpCit7CisgICAgbV9mcmFtZXNQZW5kaW5nID0gMDsKK30KKwor
dm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpza2lwcGVkUGVuZGluZ0RyYXdDb21tYW5kcygpCit7
CisgICAgZmx1c2hlZERyYXdDb21tYW5kcygpOwogfQogCiBzaXplX3QgQ2FudmFzMkRMYXllckJy
aWRnZTo6ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5dGVzVG9GcmVlKQpAQCAtMTQwLDcg
KzE2Myw4IEBAIHNpemVfdCBDYW52YXMyRExheWVyQnJpZGdlOjpmcmVlTWVtb3J5SWYKIHZvaWQg
Q2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2goKQogewogICAgIEFTU0VSVChkZWZlcnJlZENhbnZh
cygpKTsKLSAgICBtX2NhbnZhcy0+Zmx1c2goKTsKKyAgICBpZiAoZGVmZXJyZWRDYW52YXMoKS0+
aGFzUGVuZGluZ0NvbW1hbmRzKCkpCisgICAgICAgIG1fY2FudmFzLT5mbHVzaCgpOwogfQogCiBT
a0NhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6c2tDYW52YXMoU2tEZXZpY2UqIGRldmljZSkK
QEAgLTE5Niw4ICsyMjAsMTAgQEAgdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpjb250ZXh0QWNx
dWlyZQogewogICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCAmJiAhbV91c2VE
b3VibGVCdWZmZXJpbmcpCiAgICAgICAgIG1fbGF5ZXItPndpbGxNb2RpZnlUZXh0dXJlKCk7Ci0g
ICAgZWxzZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpCisgICAgZWxzZSBpZiAobV9k
ZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKICAgICAgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6
OmdldCgpLmxheWVyRGlkRHJhdyh0aGlzKTsKKyAgICAgICAgbV9kaWRSZWNvcmREcmF3Q29tbWFu
ZCA9IHRydWU7CisgICAgfQogfQogCiB1bnNpZ25lZCBDYW52YXMyRExheWVyQnJpZGdlOjpiYWNr
QnVmZmVyVGV4dHVyZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5oCShyZXZp
c2lvbiAxMzAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDExICs2MiwxMyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKHNpemVf
dCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoZWREcmF3Q29tbWFuZHMoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2tpcHBlZFBlbmRpbmdEcmF3Q29tbWFuZHMoKSBPVkVS
UklERTsKIAogICAgIC8vIE1ldGhvZHMgdXNlZCBieSBDYW52YXMyRExheWVyTWFuYWdlcgogICAg
IHZpcnR1YWwgc2l6ZV90IGZyZWVNZW1vcnlJZlBvc3NpYmxlKHNpemVfdCk7IC8vIHZpcnR1YWwg
Zm9yIG1vY2tpbmcKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKTsgLy8gdmlydHVhbCBmb3IgbW9j
a2luZwogICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIGNvbnN0IHtyZXR1cm4gbV9ieXRlc0Fs
bG9jYXRlZDt9CisgICAgdm9pZCBsaW1pdFBlbmRpbmdGcmFtZXMoKTsKIAogICAgIFNrQ2FudmFz
KiBza0NhbnZhcyhTa0RldmljZSopOwogICAgIFdlYktpdDo6V2ViTGF5ZXIqIGxheWVyKCk7CkBA
IC03Nyw2ICs3OSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBDYW52YXMyRExheWVyQnJp
ZGdlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBjb25zdCBJbnRTaXplJiwgRGVmZXJy
YWxNb2RlLCB1bnNpZ25lZCB0ZXh0dXJlSWQpOwogICAgIFNrRGVmZXJyZWRDYW52YXMqIGRlZmVy
cmVkQ2FudmFzKCk7CisgICAgdm9pZCBkaWRGbHVzaFBlbmRpbmdDb21tYW5kcygpOwogCiAgICAg
RGVmZXJyYWxNb2RlIG1fZGVmZXJyYWxNb2RlOwogICAgIGJvb2wgbV91c2VEb3VibGVCdWZmZXJp
bmc7CkBAIC04Nyw2ICs5MCw4IEBAIHByb3RlY3RlZDoKICAgICBPd25QdHI8V2ViS2l0OjpXZWJF
eHRlcm5hbFRleHR1cmVMYXllcj4gbV9sYXllcjsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IG1fY29udGV4dDsKICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKKyAgICBib29sIG1f
ZGlkUmVjb3JkRHJhd0NvbW1hbmQ7CisgICAgaW50IG1fZnJhbWVzUGVuZGluZzsKIAogICAgIGZy
aWVuZCBjbGFzcyBXVEY6OkRvdWJseUxpbmtlZExpc3ROb2RlPENhbnZhczJETGF5ZXJCcmlkZ2U+
OwogICAgIENhbnZhczJETGF5ZXJCcmlkZ2UqIG1fbmV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyTWFuYWdlci5jcHAJKHJldmlzaW9uIDEzMDE5NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTEgQEAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSQogCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllck1hbmFnZXIuaCIKIAorI2lu
Y2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IAordXNpbmcgV2ViS2l0OjpXZWJUaHJlYWQ7CisKIG5hbWVzcGFjZSB7CiBlbnVtIHsKICAgICBE
ZWZhdWx0TWF4Qnl0ZXNBbGxvY2F0ZWQgPSA2NCoxMDI0KjEwMjQsCkBAIC00Nyw2ICs1MCw3IEBA
IENhbnZhczJETGF5ZXJNYW5hZ2VyOjp+Q2FudmFzMkRMYXllck1hbmEKIHsKICAgICBBU1NFUlQo
IW1fYnl0ZXNBbGxvY2F0ZWQpOwogICAgIEFTU0VSVCghbV9sYXllckxpc3QuaGVhZCgpKTsKKyAg
ICBBU1NFUlQoIW1fdGFza09ic2VydmVyQWN0aXZlKTsKIH0KIAogdm9pZCBDYW52YXMyRExheWVy
TWFuYWdlcjo6aW5pdChzaXplX3QgbWF4Qnl0ZXNBbGxvY2F0ZWQsIHNpemVfdCB0YXJnZXRCeXRl
c0FsbG9jYXRlZCkKQEAgLTYyLDYgKzY2LDIyIEBAIENhbnZhczJETGF5ZXJNYW5hZ2VyJiBDYW52
YXMyRExheWVyTWFuYWcKICAgICByZXR1cm4gbWFuYWdlcjsKIH0KIAordm9pZCBDYW52YXMyRExh
eWVyTWFuYWdlcjo6d2lsbFByb2Nlc3NUYXNrKCkKK3sKKyAgICAvLyBPYnNlcnZlciBpcyByZWdp
c3RlcmVkIGR1cmluZyBhIHRhc2sgYW5kIGRlcmVnaXN0ZXJlZCB1cG9uIHRhc2sgY29tcGxldGlv
bi4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyTWFu
YWdlcjo6ZGlkUHJvY2Vzc1Rhc2soKQoreworICAgIC8vIENhbGxlZCBhZnRlciB0aGUgc2NyaXB0
IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIGJlZW4gcHJvY2Vzc2VkLgorICAgIEFT
U0VSVChtX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5jdXJyZW50VGhyZWFkKCktPnJlbW92ZVRhc2tPYnNlcnZlcih0aGlzKTsKKyAgICBtX3Rh
c2tPYnNlcnZlckFjdGl2ZSA9IGZhbHNlOworICAgIGZvciAoQ2FudmFzMkRMYXllckJyaWRnZSog
bGF5ZXIgPSBtX2xheWVyTGlzdC5oZWFkKCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5uZXh0KCkp
CisgICAgICAgIGxheWVyLT5saW1pdFBlbmRpbmdGcmFtZXMoKTsKK30KKwogdm9pZCBDYW52YXMy
RExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyKQog
ewogICAgIGlmIChpc0luTGlzdChsYXllcikpIHsKQEAgLTcwLDcgKzkwLDEzIEBAIHZvaWQgQ2Fu
dmFzMkRMYXllck1hbmFnZXI6OmxheWVyRGlkRHJhdygKICAgICAgICAgICAgIG1fbGF5ZXJMaXN0
LnB1c2gobGF5ZXIpOyAvLyBTZXQgYXMgTVJVCiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAg
ICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIpOyAKKyAgICAgICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIp
OworCisgICAgaWYgKCFtX3Rhc2tPYnNlcnZlckFjdGl2ZSkgeworICAgICAgICBtX3Rhc2tPYnNl
cnZlckFjdGl2ZSA9IHRydWU7CisgICAgICAgIC8vIFNjaGVkdWxlIGEgY2FsbCB0byBkaWRQcm9j
ZXNzVGFzaygpIGFmdGVyIGNvbXBsZXRpb24gb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHRhc2suCisg
ICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5hZGRU
YXNrT2JzZXJ2ZXIodGhpcyk7CisgICAgfQogfQogCiB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2Vy
OjphZGRMYXllclRvTGlzdChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaAkocmV2aXNpb24gMTMwMTk3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDEzIEBAIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQkkKICNkZWZpbmUgQ2FudmFzMkRMYXllck1hbmFnZXJfaAogCiAjaW5j
bHVkZSAiQ2FudmFzMkRMYXllckJyaWRnZS5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUaHJlYWQu
aD4KIAogY2xhc3MgQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0OwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIENhbnZhczJETGF5ZXJNYW5hZ2VyIHsKK2NsYXNzIENhbnZhczJETGF5ZXJN
YW5hZ2VyIDogcHVibGljIFdlYktpdDo6V2ViVGhyZWFkOjpUYXNrT2JzZXJ2ZXIgewogcHVibGlj
OgogICAgIHN0YXRpYyBDYW52YXMyRExheWVyTWFuYWdlciYgZ2V0KCk7CiAgICAgdm9pZCBpbml0
KHNpemVfdCBtYXhCeXRlc0FsbG9jYXRlZCwgc2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKTsK
QEAgLTQ4LDEwICs0OSwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNJbkxpc3QoQ2FudmFzMkRM
YXllckJyaWRnZSopOwogICAgIHZvaWQgYWRkTGF5ZXJUb0xpc3QoQ2FudmFzMkRMYXllckJyaWRn
ZSopOwogICAgIHZvaWQgcmVtb3ZlTGF5ZXJGcm9tTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7
CisgICAgdmlydHVhbCB2b2lkIHdpbGxQcm9jZXNzVGFzaygpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBkaWRQcm9jZXNzVGFzaygpIE9WRVJSSURFOwogCiAgICAgc2l6ZV90IG1fYnl0ZXNB
bGxvY2F0ZWQ7CiAgICAgc2l6ZV90IG1fbWF4Qnl0ZXNBbGxvY2F0ZWQ7CiAgICAgc2l6ZV90IG1f
dGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQ7CisgICAgYm9vbCBtX3Rhc2tPYnNlcnZlckFjdGl2ZTsKICAg
ICBEb3VibHlMaW5rZWRMaXN0PENhbnZhczJETGF5ZXJCcmlkZ2U+IG1fbGF5ZXJMaXN0OwogCiAg
ICAgZnJpZW5kIGNsYXNzIDo6Q2FudmFzMkRMYXllck1hbmFnZXJUZXN0OyAvLyBmb3IgdW5pdCB0
ZXN0aW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwMTk4KQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzMiBAQAorMjAxMi0xMC0wMiAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgW0Nocm9taXVtXSBTbW9vdGhlciBhbmltYXRpb24gZm9yIG5vbi1SQUYg
MkQgY2FudmFzIGFuaW1hdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk3OTE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTmV3IHVuaXQgdGVzdCB0byB2ZXJpZnkgdGhlIGF1dG9tYXRpYyBmbHVzaGlu
ZyBvZiBkZWZlcnJlZCAyZCBjYW52YXMKKyAgICAgICAgbGF5ZXJzIHdoZW4gc2NyaXB0ZWQgYW5p
bWF0aW9ucyBhcmUgbW9yZSB0aGFuIG9uZSBmdWxsIGZyYW1lIGFoZWFkIAorICAgICAgICBvZiB0
aGUgY29tcG9zaXRvci4gQWxzbyB2ZXJpZmllcyB0aGF0IGF1dG9tYXRpYyBmbHVzaGluZyBkb2Vz
IG5vdAorICAgICAgICBraWNrLWluIHdoZW4gdGhlIHNraXAgb24gY2xlYXIgb3B0aW1pemF0aW9u
IGZpcmVzCisKKyAgICAgICAgKiBERVBTOgorICAgICAgICAqIHRlc3RzL0NhbnZhczJETGF5ZXJN
YW5hZ2VyVGVzdC5jcHA6CisgICAgICAgIChGYWtlQ2FudmFzMkRMYXllckJyaWRnZTo6ZmFrZVNr
aXBQZW5kaW5nRHJhd0NvbW1hbmRzKToKKyAgICAgICAgVG8gZmFrZSB0aGUgc2tpcCBvbiBjbGVh
ciBvcHRpbWl6YXRpb24KKyAgICAgICAgKEZha2VDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAg
ICAgKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdCk6CisgICAgICAgIChDYW52YXMyRExheWVyTWFu
YWdlclRlc3Q6OmRvRGVmZXJyZWRGcmFtZVRlc3RUYXNrKToKKyAgICAgICAgTWV0aG9kIHRoYXQg
c2ltdWxhdGVzIGEgamF2YXNjcmlwdCBzY2hlZHVsZWQgYWN0aW9uIHRoYXQgZHJhd3MgdG8KKyAg
ICAgICAgYSAyRCBjYW52YXMgbGF5ZXIKKyAgICAgICAgKERlZmVycmVkRnJhbWVUZXN0VGFzayk6
CisgICAgICAgIFRhc2sgb2JqZWN0IHRvIHNpbXVsYXRlIGEgc2NoZWR1bGVkIGFjdGlvbi4gVGhp
cyBpcyBzbyB0aGUgdW5pdAorICAgICAgICB0ZXN0IGNhbiBjb3ZlciB0aGUgVGFza09ic2VydmVy
IGJlaGF2aW9yIG9mIENhbnZhczJETGF5ZXJNYW5hZ2VyLgorICAgICAgICAoQ2FudmFzMkRMYXll
ck1hbmFnZXJUZXN0OjpEZWZlcnJlZEZyYW1lVGVzdFRhc2s6OkRlZmVycmVkRnJhbWVUZXN0VGFz
ayk6CisgICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlclRlc3Q6OmRlZmVycmVkRnJhbWVUZXN0
KToKKyAgICAgICAgVGhlIHVuaXQgdGVzdCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggdXNlcyB0aGUg
V2ViVGhyZWFkIHJ1biBsb29wIHRvCisgICAgICAgIHBvc3QgdGFza3MgdGhhdCB0b3VjaCB0aGUg
Y2FudmFzIGxheWVyLgorCiAyMDEyLTEwLTAyICBTYWRydWwgSGFiaWIgQ2hvd2RodXJ5ICA8c2Fk
cnVsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1ha2Ugc3VyZSB0aGUgdG91
Y2gtcG9pbnRzIGluIHRoZSB0b3VjaC1ldmVudHMgaGF2ZSB0aGUgY29ycmVjdCBzdGF0ZS4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vREVQUwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0RFUFMJKHJldmlzaW9uIDEzMDE5NykKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vREVQUwkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiB2YXJzID0gewog
ICAnY2hyb21pdW1fc3ZuJzogJ2h0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3N2bi90cnVuay9zcmMn
LAotICAnY2hyb21pdW1fcmV2JzogJzE1OTAxOScKKyAgJ2Nocm9taXVtX3Jldic6ICcxNTk2ODEn
CiB9CiAKIGRlcHMgPSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZh
czJETGF5ZXJNYW5hZ2VyVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DYW52YXMyRExheWVyTWFuYWdlclRlc3QuY3BwCShyZXZpc2lvbiAxMzAxOTcp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJNYW5hZ2VyVGVz
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlIDxnbW9jay9nbW9jay5oPgogI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8
cHVibGljL1dlYlRocmVhZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIHRl
c3Rpbmc6OkluU2VxdWVuY2U7CkBAIC02NSw5ICs2NywxNSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZmx1c2goKSBPVkVSUklERQogICAgIHsKKyAgICAgICAgZGlkRmx1c2hQZW5kaW5n
Q29tbWFuZHMoKTsKICAgICAgICAgbV9mbHVzaENvdW50Kys7CiAgICAgfQogCisgICAgdm9pZCBm
YWtlU2tpcFBlbmRpbmdEcmF3Q29tbWFuZHMoKQorICAgIHsKKyAgICAgICAgZGlkRmx1c2hQZW5k
aW5nQ29tbWFuZHMoKTsKKyAgICB9CisKIHB1YmxpYzoKICAgICBzaXplX3QgbV9mcmVlYWJsZUJ5
dGVzOwogICAgIGludCBtX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQ7CkBAIC0xMzMsNiArMTQx
LDgzIEBAIHByb3RlY3RlZDoKICAgICAgICAgRVhQRUNUX0VRKChzaXplX3QpMTEsIGxheWVyLmJ5
dGVzQWxsb2NhdGVkKCkpOyAvLyBmbHVzaCBkcm9wcyB0aGUgbGF5ZXIgZnJvbSBtYW5hZ2VyJ3Mg
dHJhY2tpbmcgbGlzdAogICAgICAgICBFWFBFQ1RfRkFMU0UobWFuYWdlci5pc0luTGlzdCgmbGF5
ZXIpKTsKICAgICB9CisKKyAgICB2b2lkIGRvRGVmZXJyZWRGcmFtZVRlc3RUYXNrKEZha2VDYW52
YXMyRExheWVyQnJpZGdlKiBsYXllciwgYm9vbCBza2lwQ29tbWFuZHMpCisgICAgeworICAgICAg
ICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLm1fdGFza09ic2VydmVy
QWN0aXZlKTsKKyAgICAgICAgbGF5ZXItPmNvbnRleHRBY3F1aXJlZCgpOworICAgICAgICBsYXll
ci0+c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoMSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7
CisgICAgICAgIGlmIChza2lwQ29tbWFuZHMpIHsKKyAgICAgICAgICAgIGxheWVyLT5jb250ZXh0
QWNxdWlyZWQoKTsKKyAgICAgICAgICAgIGxheWVyLT5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3Jk
aW5nQ2hhbmdlZCgwKTsKKyAgICAgICAgICAgIGxheWVyLT5mYWtlU2tpcFBlbmRpbmdEcmF3Q29t
bWFuZHMoKTsKKyAgICAgICAgfQorICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCkt
PmN1cnJlbnRUaHJlYWQoKS0+ZXhpdFJ1bkxvb3AoKTsKKyAgICB9CisKKyAgICBjbGFzcyBEZWZl
cnJlZEZyYW1lVGVzdFRhc2sgOiBwdWJsaWMgV2ViS2l0OjpXZWJUaHJlYWQ6OlRhc2sgeworICAg
IHB1YmxpYzoKKyAgICAgICAgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKENhbnZhczJETGF5ZXJNYW5h
Z2VyVGVzdCogdGVzdCwgRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyLCBib29sIHNraXBD
b21tYW5kcykKKyAgICAgICAgeworICAgICAgICAgICAgbV90ZXN0ID0gdGVzdDsKKyAgICAgICAg
ICAgIG1fbGF5ZXIgPSBsYXllcjsKKyAgICAgICAgICAgIG1fc2tpcENvbW1hbmRzID0gc2tpcENv
bW1hbmRzOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJ1bigpIE9WRVJSSURF
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdGVzdC0+ZG9EZWZlcnJlZEZyYW1lVGVzdFRhc2so
bV9sYXllciwgbV9za2lwQ29tbWFuZHMpOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0KiBtX3Rlc3Q7CisgICAgICAgIEZha2VDYW52YXMy
RExheWVyQnJpZGdlKiBtX2xheWVyOworICAgICAgICBib29sIG1fc2tpcENvbW1hbmRzOworICAg
IH07CisKKyAgICB2b2lkIGRlZmVycmVkRnJhbWVUZXN0KCkKKyAgICB7CisgICAgICAgIENhbnZh
czJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5pbml0KDEwLCAxMCk7CisgICAgICAgIEZha2VDYW52YXMy
RExheWVyQnJpZGdlIGZha2VMYXllcjsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVzdFRhc2so
dGhpcywgJmZha2VMYXllciwgdHJ1ZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIC8vIFZlcmlm
eSB0aGF0IGRpZFByb2Nlc3NUYXNrIHdhcyBjYWxsZWQgdXBvbiBjb21wbGV0aW9uCisgICAgICAg
IEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJB
Y3RpdmUpOworICAgICAgICAvLyBWZXJpZnkgdGhhdCBubyBmbHVzaCB3YXMgcGVyZm9ybWVkIGJl
Y2F1c2UgZnJhbWUgaXMgZnJlc2gKKyAgICAgICAgRVhQRUNUX0VRKDAsIGZha2VMYXllci5tX2Zs
dXNoQ291bnQpOworCisgICAgICAgIC8vIFZlcmlmeSB0aGF0IG5vIGZsdXNoZXMgYXJlIHRyaWdn
ZXJlZCBhcyBsb25nIGFzIGZyYW1lIGFyZSBmcmVzaAorICAgICAgICBXZWJLaXQ6OlBsYXRmb3Jt
OjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJhbWVU
ZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCB0cnVlKSk7CisgICAgICAgIFdlYktpdDo6UGxhdGZv
cm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX3Rhc2tPYnNlcnZlckFj
dGl2ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKwor
ICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9z
dFRhc2sobmV3IERlZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCB0cnVlKSk7
CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5l
bnRlclJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2Vy
OjpnZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBmYWtl
TGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAgICAvLyBWZXJpZnkgdGhhdCBhIGZsdXNoIGlz
IHRyaWdnZXJlZCBldmVyeSB0d28gZnJhbWVzIHdoZW4gdGhleSBhcmUgc3RhbGUuCisgICAgICAg
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0VGFzayhu
ZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5ZXIsIGZhbHNlKSk7CisgICAg
ICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1
bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQo
KS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBmYWtlTGF5ZXIu
bV9mbHVzaENvdW50KTsKKworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1
cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAm
ZmFrZUxheWVyLCBmYWxzZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCkt
PmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShD
YW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOworICAgICAg
ICBFWFBFQ1RfRVEoMSwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgV2ViS2l0
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZl
cnJlZEZyYW1lVGVzdFRhc2sodGhpcywgJmZha2VMYXllciwgZmFsc2UpKTsKKyAgICAgICAgV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVudGVyUnVuTG9vcCgp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLm1fdGFz
a09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGZha2VMYXllci5tX2ZsdXNo
Q291bnQpOworCisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRo
cmVhZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5
ZXIsIGZhbHNlKSk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVu
dFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJE
TGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAgIEVYUEVD
VF9FUSgyLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKyAgICB9CiB9OwogCiBuYW1lc3BhY2Ug
ewpAQCAtMTUyLDUgKzIzNywxMCBAQCBURVNUX0YoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LCB0
ZXN0Rmx1CiAgICAgZmx1c2hFdmljdGlvblRlc3QoKTsKIH0KIAorVEVTVF9GKENhbnZhczJETGF5
ZXJNYW5hZ2VyVGVzdCwgdGVzdERlZmVycmVkRnJhbWUpCit7CisgICAgZGVmZXJyZWRGcmFtZVRl
c3QoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166952</attachid>
            <date>2012-10-03 13:39:45 -0700</date>
            <delta_ts>2012-10-04 07:59:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97918-20121003163856.patch</filename>
            <type>text/plain</type>
            <size>17548</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTEwLTAyICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFNtb290
aGVyIGFuaW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWR1Y2VzIGFuaW1hdGlvbiBq
YW5rIGJ5IHByZXZlbnRpbmcgdGhlIGFjY3VtdWxhdGlvbiBvZiBtdWx0aXBsZQorICAgICAgICBm
cmFtZXMgb2YgYmFja2xvZyBpbiB0aGUgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZyBxdWV1ZS4g
V2hlbiB0aGUKKyAgICAgICAgYW5pbWF0aW9uIGlzIG1vcmUgdGhhbiBvbmUgZnVsbCBmcmFtZSBh
aGVhZCBvZiB0aGUgY29tcG9zaXRvciwgYW4KKyAgICAgICAgaW1tZWRpYXRlIGZsdXNoIGlzIHRy
aWdnZXJlZC4gIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IG92ZXJkcmF3CisgICAgICAgIGVsaW1p
bmF0aW9uIGJ5IHRoZSBza2lwLW9uLWNsZWFyIG9wdGltaXphdGlvbiB0aGF0IGlzIGJ1aWx0LWlu
IHRvCisgICAgICAgIFNrRGVmZXJyZWRDYW52YXMsIHRvIGFsbG93IG5vbi1SQUYgYW5pbWF0aW9u
cyB0aGF0IGNsZWFyIHRoZSBjYW52YXMgYXQKKyAgICAgICAgZWFjaCBmcmFtZSB0byBydW4gd2l0
aG91dCBhbnkgcmF0ZSBsaW1pdGluZy4gVGhpcyBjaGFuZ2UgYWxzbworICAgICAgICBpbmNpZGVu
dGFsbHkgaW1wcm92ZXMgZnJhbWUgcmF0ZSBpbiBtYW55IGNhc2VzIGJ5IHByb3ZpZGluZyBtb3Jl
CisgICAgICAgIGdyYW51bGFyIGJhdGNoaW5nIG9mIEdQVSBBUEkgY2FsbHMsIHJlc3VsdGluZyBp
biBiZXR0ZXIgcGlwZWxpbmluZworICAgICAgICB0aHJvdWdoIHRoZSBjb21tYW5kIGJ1ZmZlci4K
KworICAgICAgICBUZXN0OiB3ZWJraXRfdW5pdF90ZXN0IENhbnZhczJETGF5ZXJNYW5hZ2VyVGVz
dC50ZXN0RGVmZXJyZWRGcmFtZQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmxpbWl0UGVuZGluZ0ZyYW1lcyk6CisgICAgICAgIENhbGxlZCBhdCB0
aGUgZW5kIG9mIGEgdGFzayAodXN1YWxseSBhIHNjaGVkdWxlZCBzY3JpcHQgYWN0aW9uKSB0aGF0
CisgICAgICAgIGludm9rZWQgMmQgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMuIFRo
ZSBlbmQgb2YgdGhlIHRhc2sKKyAgICAgICAgbWFya3MgdGhlIGNvbXBsZXRpb24gb2YgYSBkaXNw
bGF5YWJsZSBmcmFtZS4gVGhpcyBtZXRob2Qgd2lsbCB0cmlnZ2VyCisgICAgICAgIGEgZmx1c2gg
aWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBsYXllciBoYXMgcGVuZGluZyBkcmF3IGNvbW1hbmRzIHRo
YXQKKyAgICAgICAgYXJlIG1vcmUgdGhhdCBvbmUgZnJhbWUgb2xkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0Nv
bW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmRpZEZsdXNo
UGVuZGluZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6
OnNraXBwZWRQZW5kaW5nRHJhd0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJE
TGF5ZXJCcmlkZ2U6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlk
Z2U6OmNvbnRleHRBY3F1aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckJyaWRnZS5oOgorICAgICAgICAoQ2FudmFzMkRMYXllckJyaWRnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1hbmFnZXI6On5DYW52YXMy
RExheWVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6
d2lsbFByb2Nlc3NUYXNrKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllck1hbmFnZXI6OmRpZFByb2Nlc3NUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckRpZERyYXcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmg6CisgICAgICAgIChDYW52
YXMyRExheWVyTWFuYWdlcik6CisKIDIwMTItMTAtMDIgIERhdmlkIEdyb2dhbiAgPGRncm9nYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2luZGV4ZWRkYi9k
YXRhYmFzZS1zdHJ1Y3R1cmUuaHRtbCBzdGFydCB0byBjcmFzaCBhZnRlciByMTI0Njc1CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
QnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcAkocmV2aXNpb24gMTMwMTk3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJy
aWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgQ2FudmFzMkRMYXllckJy
aWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZQogICAgICwgbV9jYW52YXMoMCkKICAgICAsIG1fY29u
dGV4dChjb250ZXh0KQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9kaWRSZWNv
cmREcmF3Q29tbWFuZChmYWxzZSkKKyAgICAsIG1fZnJhbWVzUGVuZGluZygwKQogICAgICwgbV9u
ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKIHsKQEAgLTEwNiw2ICsxMDgsMTYgQEAgU2tEZWZlcnJl
ZENhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6ZAogICAgIHJldHVybiAwOwogfQogCit2b2lk
IENhbnZhczJETGF5ZXJCcmlkZ2U6OmxpbWl0UGVuZGluZ0ZyYW1lcygpCit7CisgICAgaWYgKG1f
ZGlkUmVjb3JkRHJhd0NvbW1hbmQpIHsKKyAgICAgICAgbV9mcmFtZXNQZW5kaW5nKys7CisgICAg
ICAgIG1fZGlkUmVjb3JkRHJhd0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZnJhbWVz
UGVuZGluZyA+IDEpCisgICAgICAgICAgICBmbHVzaCgpOworICAgIH0KK30KKwogdm9pZCBDYW52
YXMyRExheWVyQnJpZGdlOjpwcmVwYXJlRm9yRHJhdygpCiB7CiAgICAgQVNTRVJUKGRlZmVycmVk
Q2FudmFzKCkpOwpAQCAtMTIyLDkgKzEzNCwyMCBAQCB2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6
OnN0b3JhZ2VBbGxvY2F0CiAgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVyQWxs
b2NhdGVkU3RvcmFnZUNoYW5nZWQodGhpcywgZGVsdGEpOwogfQogCitzaXplX3QgQ2FudmFzMkRM
YXllckJyaWRnZTo6c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZygpCit7CisgICAgcmV0dXJu
IGRlZmVycmVkQ2FudmFzKCktPnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKTsKK30KKwog
dm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0NvbW1hbmRzKCkKIHsKLSAgICBz
dG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZChkZWZlcnJlZENhbnZhcygpLT5zdG9y
YWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nKCkpOworICAgIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNv
cmRpbmdDaGFuZ2VkKHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKSk7CisgICAgbV9mcmFt
ZXNQZW5kaW5nID0gMDsKK30KKwordm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpza2lwcGVkUGVu
ZGluZ0RyYXdDb21tYW5kcygpCit7CisgICAgZmx1c2hlZERyYXdDb21tYW5kcygpOwogfQogCiBz
aXplX3QgQ2FudmFzMkRMYXllckJyaWRnZTo6ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5
dGVzVG9GcmVlKQpAQCAtMTQwLDcgKzE2Myw4IEBAIHNpemVfdCBDYW52YXMyRExheWVyQnJpZGdl
OjpmcmVlTWVtb3J5SWYKIHZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2goKQogewogICAg
IEFTU0VSVChkZWZlcnJlZENhbnZhcygpKTsKLSAgICBtX2NhbnZhcy0+Zmx1c2goKTsKKyAgICBp
ZiAoZGVmZXJyZWRDYW52YXMoKS0+aGFzUGVuZGluZ0NvbW1hbmRzKCkpCisgICAgICAgIG1fY2Fu
dmFzLT5mbHVzaCgpOwogfQogCiBTa0NhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6c2tDYW52
YXMoU2tEZXZpY2UqIGRldmljZSkKQEAgLTE5Niw4ICsyMjAsMTAgQEAgdm9pZCBDYW52YXMyRExh
eWVyQnJpZGdlOjpjb250ZXh0QWNxdWlyZQogewogICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBO
b25EZWZlcnJlZCAmJiAhbV91c2VEb3VibGVCdWZmZXJpbmcpCiAgICAgICAgIG1fbGF5ZXItPndp
bGxNb2RpZnlUZXh0dXJlKCk7Ci0gICAgZWxzZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJy
ZWQpCisgICAgZWxzZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKICAgICAgICAg
Q2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVyRGlkRHJhdyh0aGlzKTsKKyAgICAgICAg
bV9kaWRSZWNvcmREcmF3Q29tbWFuZCA9IHRydWU7CisgICAgfQogfQogCiB1bnNpZ25lZCBDYW52
YXMyRExheWVyQnJpZGdlOjpiYWNrQnVmZmVyVGV4dHVyZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckJyaWRnZS5oCShyZXZpc2lvbiAxMzAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDExICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVG
b3JEcmF3KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VBbGxvY2F0ZWRGb3JS
ZWNvcmRpbmdDaGFuZ2VkKHNpemVfdCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNo
ZWREcmF3Q29tbWFuZHMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2tpcHBlZFBlbmRp
bmdEcmF3Q29tbWFuZHMoKSBPVkVSUklERTsKIAogICAgIC8vIE1ldGhvZHMgdXNlZCBieSBDYW52
YXMyRExheWVyTWFuYWdlcgogICAgIHZpcnR1YWwgc2l6ZV90IGZyZWVNZW1vcnlJZlBvc3NpYmxl
KHNpemVfdCk7IC8vIHZpcnR1YWwgZm9yIG1vY2tpbmcKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2go
KTsgLy8gdmlydHVhbCBmb3IgbW9ja2luZworICAgIHZpcnR1YWwgc2l6ZV90IHN0b3JhZ2VBbGxv
Y2F0ZWRGb3JSZWNvcmRpbmcoKTsgLy8gdmlydHVhbCBmb3IgZmFraW5nCiAgICAgc2l6ZV90IGJ5
dGVzQWxsb2NhdGVkKCkgY29uc3Qge3JldHVybiBtX2J5dGVzQWxsb2NhdGVkO30KKyAgICB2b2lk
IGxpbWl0UGVuZGluZ0ZyYW1lcygpOwogCiAgICAgU2tDYW52YXMqIHNrQ2FudmFzKFNrRGV2aWNl
Kik7CiAgICAgV2ViS2l0OjpXZWJMYXllciogbGF5ZXIoKTsKQEAgLTg3LDYgKzkwLDggQEAgcHJv
dGVjdGVkOgogICAgIE93blB0cjxXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVyPiBtX2xh
eWVyOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIHNpemVf
dCBtX2J5dGVzQWxsb2NhdGVkOworICAgIGJvb2wgbV9kaWRSZWNvcmREcmF3Q29tbWFuZDsKKyAg
ICBpbnQgbV9mcmFtZXNQZW5kaW5nOwogCiAgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlu
a2VkTGlzdE5vZGU8Q2FudmFzMkRMYXllckJyaWRnZT47CiAgICAgQ2FudmFzMkRMYXllckJyaWRn
ZSogbV9uZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMTMwMTk3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwx
MSBAQCBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJCiAKICNpbmNsdWRl
ICJDYW52YXMyRExheWVyTWFuYWdlci5oIgogCisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCit1c2luZyBXZWJLaXQ6OldlYlRocmVh
ZDsKKwogbmFtZXNwYWNlIHsKIGVudW0gewogICAgIERlZmF1bHRNYXhCeXRlc0FsbG9jYXRlZCA9
IDY0KjEwMjQqMTAyNCwKQEAgLTQ3LDYgKzUwLDcgQEAgQ2FudmFzMkRMYXllck1hbmFnZXI6On5D
YW52YXMyRExheWVyTWFuYQogewogICAgIEFTU0VSVCghbV9ieXRlc0FsbG9jYXRlZCk7CiAgICAg
QVNTRVJUKCFtX2xheWVyTGlzdC5oZWFkKCkpOworICAgIEFTU0VSVCghbV90YXNrT2JzZXJ2ZXJB
Y3RpdmUpOwogfQogCiB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjppbml0KHNpemVfdCBtYXhC
eXRlc0FsbG9jYXRlZCwgc2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKQpAQCAtNjIsNiArNjYs
MjIgQEAgQ2FudmFzMkRMYXllck1hbmFnZXImIENhbnZhczJETGF5ZXJNYW5hZwogICAgIHJldHVy
biBtYW5hZ2VyOwogfQogCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjp3aWxsUHJvY2Vzc1Rh
c2soKQoreworICAgIC8vIE9ic2VydmVyIGlzIHJlZ2lzdGVyZWQgZHVyaW5nIGEgdGFzayBhbmQg
ZGVyZWdpc3RlcmVkIHVwb24gdGFzayBjb21wbGV0aW9uLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpkaWRQcm9jZXNzVGFzaygpCit7
CisgICAgLy8gQ2FsbGVkIGFmdGVyIHRoZSBzY3JpcHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBm
cmFtZSBoYXMgYmVlbiBwcm9jZXNzZWQuCisgICAgQVNTRVJUKG1fdGFza09ic2VydmVyQWN0aXZl
KTsKKyAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cmVt
b3ZlVGFza09ic2VydmVyKHRoaXMpOworICAgIG1fdGFza09ic2VydmVyQWN0aXZlID0gZmFsc2U7
CisgICAgZm9yIChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllciA9IG1fbGF5ZXJMaXN0LmhlYWQo
KTsgbGF5ZXI7IGxheWVyID0gbGF5ZXItPm5leHQoKSkKKyAgICAgICAgbGF5ZXItPmxpbWl0UGVu
ZGluZ0ZyYW1lcygpOworfQorCiB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckRpZERy
YXcoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCiB7CiAgICAgaWYgKGlzSW5MaXN0KGxheWVy
KSkgewpAQCAtNzAsNyArOTAsMTMgQEAgdm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJE
aWREcmF3KAogICAgICAgICAgICAgbV9sYXllckxpc3QucHVzaChsYXllcik7IC8vIFNldCBhcyBN
UlUKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7
IAorICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7CisKKyAgICBpZiAoIW1fdGFza09ic2Vy
dmVyQWN0aXZlKSB7CisgICAgICAgIG1fdGFza09ic2VydmVyQWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgLy8gU2NoZWR1bGUgYSBjYWxsIHRvIGRpZFByb2Nlc3NUYXNrKCkgYWZ0ZXIgY29tcGxldGlv
biBvZiB0aGUgY3VycmVudCBzY3JpcHQgdGFzay4KKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6
Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmFkZFRhc2tPYnNlcnZlcih0aGlzKTsKKyAgICB9
CiB9CiAKIHZvaWQgQ2FudmFzMkRMYXllck1hbmFnZXI6OmFkZExheWVyVG9MaXN0KENhbnZhczJE
TGF5ZXJCcmlkZ2UqIGxheWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5o
CShyZXZpc2lvbiAxMzAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiAr
MjYsMTMgQEAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSQogI2RlZmlu
ZSBDYW52YXMyRExheWVyTWFuYWdlcl9oCiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdl
LmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlRocmVhZC5oPgogCiBjbGFzcyBDYW52YXMyRExheWVy
TWFuYWdlclRlc3Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FudmFzMkRMYXll
ck1hbmFnZXIgeworY2xhc3MgQ2FudmFzMkRMYXllck1hbmFnZXIgOiBwdWJsaWMgV2ViS2l0OjpX
ZWJUaHJlYWQ6OlRhc2tPYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIENhbnZhczJETGF5
ZXJNYW5hZ2VyJiBnZXQoKTsKICAgICB2b2lkIGluaXQoc2l6ZV90IG1heEJ5dGVzQWxsb2NhdGVk
LCBzaXplX3QgdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpOwpAQCAtNDgsMTAgKzQ5LDEzIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBpc0luTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7CiAgICAgdm9pZCBh
ZGRMYXllclRvTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7CiAgICAgdm9pZCByZW1vdmVMYXll
ckZyb21MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBy
b2Nlc3NUYXNrKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFByb2Nlc3NUYXNrKCkg
T1ZFUlJJREU7CiAKICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKICAgICBzaXplX3QgbV9t
YXhCeXRlc0FsbG9jYXRlZDsKICAgICBzaXplX3QgbV90YXJnZXRCeXRlc0FsbG9jYXRlZDsKKyAg
ICBib29sIG1fdGFza09ic2VydmVyQWN0aXZlOwogICAgIERvdWJseUxpbmtlZExpc3Q8Q2FudmFz
MkRMYXllckJyaWRnZT4gbV9sYXllckxpc3Q7CiAKICAgICBmcmllbmQgY2xhc3MgOjpDYW52YXMy
RExheWVyTWFuYWdlclRlc3Q7IC8vIGZvciB1bml0IHRlc3RpbmcKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTAyICBK
dXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IFNtb290aGVyIGFuaW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0
IHRvIHZlcmlmeSB0aGUgYXV0b21hdGljIGZsdXNoaW5nIG9mIGRlZmVycmVkIDJkIGNhbnZhcwor
ICAgICAgICBsYXllcnMgd2hlbiBzY3JpcHRlZCBhbmltYXRpb25zIGFyZSBtb3JlIHRoYW4gb25l
IGZ1bGwgZnJhbWUgYWhlYWQgCisgICAgICAgIG9mIHRoZSBjb21wb3NpdG9yLiBBbHNvIHZlcmlm
aWVzIHRoYXQgYXV0b21hdGljIGZsdXNoaW5nIGRvZXMgbm90CisgICAgICAgIGtpY2staW4gd2hl
biB0aGUgc2tpcCBvbiBjbGVhciBvcHRpbWl6YXRpb24gZmlyZXMKKworICAgICAgICAqIERFUFM6
CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcDoKKyAgICAgICAg
KEZha2VDYW52YXMyRExheWVyQnJpZGdlOjpmYWtlU2tpcFBlbmRpbmdEcmF3Q29tbWFuZHMpOgor
ICAgICAgICBUbyBmYWtlIHRoZSBza2lwIG9uIGNsZWFyIG9wdGltaXphdGlvbgorICAgICAgICAo
RmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoQ2FudmFzMkRMYXllck1hbmFnZXJU
ZXN0KToKKyAgICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDo6ZG9EZWZlcnJlZEZyYW1l
VGVzdFRhc2spOgorICAgICAgICBNZXRob2QgdGhhdCBzaW11bGF0ZXMgYSBqYXZhc2NyaXB0IHNj
aGVkdWxlZCBhY3Rpb24gdGhhdCBkcmF3cyB0bworICAgICAgICBhIDJEIGNhbnZhcyBsYXllcgor
ICAgICAgICAoRGVmZXJyZWRGcmFtZVRlc3RUYXNrKToKKyAgICAgICAgVGFzayBvYmplY3QgdG8g
c2ltdWxhdGUgYSBzY2hlZHVsZWQgYWN0aW9uLiBUaGlzIGlzIHNvIHRoZSB1bml0CisgICAgICAg
IHRlc3QgY2FuIGNvdmVyIHRoZSBUYXNrT2JzZXJ2ZXIgYmVoYXZpb3Igb2YgQ2FudmFzMkRMYXll
ck1hbmFnZXIuCisgICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlclRlc3Q6OkRlZmVycmVkRnJh
bWVUZXN0VGFzazo6RGVmZXJyZWRGcmFtZVRlc3RUYXNrKToKKyAgICAgICAgKENhbnZhczJETGF5
ZXJNYW5hZ2VyVGVzdDo6ZGVmZXJyZWRGcmFtZVRlc3QpOgorICAgICAgICBUaGUgdW5pdCB0ZXN0
IGltcGxlbWVudGF0aW9uLCB3aGljaCB1c2VzIHRoZSBXZWJUaHJlYWQgcnVuIGxvb3AgdG8KKyAg
ICAgICAgcG9zdCB0YXNrcyB0aGF0IHRvdWNoIHRoZSBjYW52YXMgbGF5ZXIuCisKIDIwMTItMTAt
MDIgIFNhZHJ1bCBIYWJpYiBDaG93ZGh1cnkgIDxzYWRydWxAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gTWFrZSBzdXJlIHRoZSB0b3VjaC1wb2ludHMgaW4gdGhlIHRvdWNoLWV2
ZW50cyBoYXZlIHRoZSBjb3JyZWN0IHN0YXRlLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9ERVBTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vREVQUwkocmV2aXNp
b24gMTMwMTk3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9ERVBTCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBACiAKIHZhcnMgPSB7CiAgICdjaHJvbWl1bV9zdm4nOiAnaHR0cDov
L3NyYy5jaHJvbWl1bS5vcmcvc3ZuL3RydW5rL3NyYycsCi0gICdjaHJvbWl1bV9yZXYnOiAnMTU5
MDE5JworICAnY2hyb21pdW1fcmV2JzogJzE1OTY4MScKIH0KIAogZGVwcyA9IHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJN
YW5hZ2VyVGVzdC5jcHAJKHJldmlzaW9uIDEzMDE5NykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRl
IDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVGhyZWFkLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgdGVzdGluZzo6SW5TZXF1ZW5jZTsKQEAgLTQ0
LDkgKzQ2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2ZyZWVhYmxlQnl0ZXMoMCkKICAgICAg
ICAgLCBtX2ZyZWVNZW1vcnlJZlBvc3NpYmxlQ291bnQoMCkKICAgICAgICAgLCBtX2ZsdXNoQ291
bnQoMCkKKyAgICAgICAgLCBtX2Zha2VTdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nKDApCiAg
ICAgewogICAgIH0KIAorICAgIHZpcnR1YWwgc2l6ZV90IHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNv
cmRpbmcoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgLy8gQmVjYXVzZSB0aGUgZmFrZSBsYXll
ciBoYXMgbm8gY2FudmFzIHRvIHF1ZXJ5LCBqdXN0CisgICAgICAgIC8vIHJldHVybiBzdGF0dXMg
cXVvLiBBbGxvY2F0aW9uIGNoYW5nZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZQorICAgICAgICAv
LyBpbml0aWF0ZWQgYnkgdGhlIGNhbnZhcyBjYW4gYmUgZmFrZWQgYnkgaW52b2tpbmcKKyAgICAg
ICAgLy8gc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQKKyAgICAgICAgcmV0dXJu
IG1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgfQorCiAgICAgdm9pZCBmYWtlRnJlZWFibGVCeXRlcyhz
aXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1fZnJlZWFibGVCeXRlcyA9IHNpemU7CkBAIC02
NSw2ICs3Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpIE9WRVJSSURF
CiAgICAgeworICAgICAgICBmbHVzaGVkRHJhd0NvbW1hbmRzKCk7CiAgICAgICAgIG1fZmx1c2hD
b3VudCsrOwogICAgIH0KIApAQCAtNzIsNiArODUsNyBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IG1f
ZnJlZWFibGVCeXRlczsKICAgICBpbnQgbV9mcmVlTWVtb3J5SWZQb3NzaWJsZUNvdW50OwogICAg
IGludCBtX2ZsdXNoQ291bnQ7CisgICAgc2l6ZV90IG1fZmFrZVN0b3JhZ2VBbGxvY2F0ZWRGb3JS
ZWNvcmRpbmc7CiB9OwogCiBjbGFzcyBDYW52YXMyRExheWVyTWFuYWdlclRlc3QgOiBwdWJsaWMg
VGVzdCB7CkBAIC0xMzMsNiArMTQ3LDgzIEBAIHByb3RlY3RlZDoKICAgICAgICAgRVhQRUNUX0VR
KChzaXplX3QpMTEsIGxheWVyLmJ5dGVzQWxsb2NhdGVkKCkpOyAvLyBmbHVzaCBkcm9wcyB0aGUg
bGF5ZXIgZnJvbSBtYW5hZ2VyJ3MgdHJhY2tpbmcgbGlzdAogICAgICAgICBFWFBFQ1RfRkFMU0Uo
bWFuYWdlci5pc0luTGlzdCgmbGF5ZXIpKTsKICAgICB9CisKKyAgICB2b2lkIGRvRGVmZXJyZWRG
cmFtZVRlc3RUYXNrKEZha2VDYW52YXMyRExheWVyQnJpZGdlKiBsYXllciwgYm9vbCBza2lwQ29t
bWFuZHMpCisgICAgeworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6
OmdldCgpLm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgbGF5ZXItPmNvbnRleHRBY3F1
aXJlZCgpOworICAgICAgICBsYXllci0+c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5n
ZWQoMSk7CisgICAgICAgIEVYUEVDVF9UUlVFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5t
X3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAgIGlmIChza2lwQ29tbWFuZHMpIHsKKyAgICAg
ICAgICAgIGxheWVyLT5jb250ZXh0QWNxdWlyZWQoKTsKKyAgICAgICAgICAgIGxheWVyLT5zdG9y
YWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZCgwKTsKKyAgICAgICAgICAgIGxheWVyLT5z
a2lwcGVkUGVuZGluZ0RyYXdDb21tYW5kcygpOworICAgICAgICB9CisgICAgICAgIFdlYktpdDo6
UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5leGl0UnVuTG9vcCgpOworICAg
IH0KKworICAgIGNsYXNzIERlZmVycmVkRnJhbWVUZXN0VGFzayA6IHB1YmxpYyBXZWJLaXQ6Oldl
YlRocmVhZDo6VGFzayB7CisgICAgcHVibGljOgorICAgICAgICBEZWZlcnJlZEZyYW1lVGVzdFRh
c2soQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0KiB0ZXN0LCBGYWtlQ2FudmFzMkRMYXllckJyaWRn
ZSogbGF5ZXIsIGJvb2wgc2tpcENvbW1hbmRzKQorICAgICAgICB7CisgICAgICAgICAgICBtX3Rl
c3QgPSB0ZXN0OworICAgICAgICAgICAgbV9sYXllciA9IGxheWVyOworICAgICAgICAgICAgbV9z
a2lwQ29tbWFuZHMgPSBza2lwQ29tbWFuZHM7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFs
IHZvaWQgcnVuKCkgT1ZFUlJJREUKKyAgICAgICAgeworICAgICAgICAgICAgbV90ZXN0LT5kb0Rl
ZmVycmVkRnJhbWVUZXN0VGFzayhtX2xheWVyLCBtX3NraXBDb21tYW5kcyk7CisgICAgICAgIH0K
KyAgICBwcml2YXRlOgorICAgICAgICBDYW52YXMyRExheWVyTWFuYWdlclRlc3QqIG1fdGVzdDsK
KyAgICAgICAgRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UqIG1fbGF5ZXI7CisgICAgICAgIGJvb2wg
bV9za2lwQ29tbWFuZHM7CisgICAgfTsKKworICAgIHZvaWQgZGVmZXJyZWRGcmFtZVRlc3QoKQor
ICAgIHsKKyAgICAgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLmluaXQoMTAsIDEwKTsK
KyAgICAgICAgRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UgZmFrZUxheWVyOworICAgICAgICBXZWJL
aXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERl
ZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCB0cnVlKSk7CisgICAgICAgIFdl
YktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxvb3Ao
KTsKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgZGlkUHJvY2Vzc1Rhc2sgd2FzIGNhbGxlZCB1cG9u
IGNvbXBsZXRpb24KKyAgICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpn
ZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IG5vIGZs
dXNoIHdhcyBwZXJmb3JtZWQgYmVjYXVzZSBmcmFtZSBpcyBmcmVzaAorICAgICAgICBFWFBFQ1Rf
RVEoMCwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQg
bm8gZmx1c2hlcyBhcmUgdHJpZ2dlcmVkIGFzIGxvbmcgYXMgZnJhbWUgYXJlIGZyZXNoCisgICAg
ICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0VGFz
ayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5ZXIsIHRydWUpKTsKKyAg
ICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVudGVy
UnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6Omdl
dCgpLm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIGZha2VMYXll
ci5tX2ZsdXNoQ291bnQpOworCisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+
Y3VycmVudFRocmVhZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMs
ICZmYWtlTGF5ZXIsIHRydWUpKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgp
LT5jdXJyZW50VGhyZWFkKCktPmVudGVyUnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
Q2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAg
ICAgRVhQRUNUX0VRKDAsIGZha2VMYXllci5tX2ZsdXNoQ291bnQpOworCisgICAgICAgIC8vIFZl
cmlmeSB0aGF0IGEgZmx1c2ggaXMgdHJpZ2dlcmVkIGV2ZXJ5IHR3byBmcmFtZXMgd2hlbiB0aGV5
IGFyZSBzdGFsZS4KKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50
VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVzdFRhc2sodGhpcywgJmZha2VM
YXllciwgZmFsc2UpKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJy
ZW50VGhyZWFkKCktPmVudGVyUnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFz
MkRMYXllck1hbmFnZXI6OmdldCgpLm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKDEsIGZha2VMYXllci5tX2ZsdXNoQ291bnQpOworCisgICAgICAgIFdlYktpdDo6UGxh
dGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRG
cmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5ZXIsIGZhbHNlKSk7CisgICAgICAgIFdlYktpdDo6
UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX3Rhc2tPYnNl
cnZlckFjdGl2ZSk7CisgICAgICAgIEVYUEVDVF9FUSgxLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50
KTsKKworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQo
KS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCBm
YWxzZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJl
YWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVy
TWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOworICAgICAgICBFWFBFQ1RfRVEo
MiwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6
Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVz
dFRhc2sodGhpcywgJmZha2VMYXllciwgZmFsc2UpKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9y
bTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVudGVyUnVuTG9vcCgpOworICAgICAgICBF
WFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLm1fdGFza09ic2VydmVyQWN0
aXZlKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIGZha2VMYXllci5tX2ZsdXNoQ291bnQpOworICAg
IH0KIH07CiAKIG5hbWVzcGFjZSB7CkBAIC0xNTIsNSArMjQzLDEwIEBAIFRFU1RfRihDYW52YXMy
RExheWVyTWFuYWdlclRlc3QsIHRlc3RGbHUKICAgICBmbHVzaEV2aWN0aW9uVGVzdCgpOwogfQog
CitURVNUX0YoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LCB0ZXN0RGVmZXJyZWRGcmFtZSkKK3sK
KyAgICBkZWZlcnJlZEZyYW1lVGVzdCgpOworfQorCiB9IC8vIG5hbWVzcGFjZQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167105</attachid>
            <date>2012-10-04 07:59:36 -0700</date>
            <delta_ts>2012-10-04 10:06:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97918-20121004105846.patch</filename>
            <type>text/plain</type>
            <size>17211</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDE5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTEwLTAyICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFNtb290
aGVyIGFuaW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWR1Y2VzIGFuaW1hdGlvbiBq
YW5rIGJ5IHByZXZlbnRpbmcgdGhlIGFjY3VtdWxhdGlvbiBvZiBtdWx0aXBsZQorICAgICAgICBm
cmFtZXMgb2YgYmFja2xvZyBpbiB0aGUgZGVmZXJyZWQgY2FudmFzIHJlbmRlcmluZyBxdWV1ZS4g
V2hlbiB0aGUKKyAgICAgICAgYW5pbWF0aW9uIGlzIG1vcmUgdGhhbiBvbmUgZnVsbCBmcmFtZSBh
aGVhZCBvZiB0aGUgY29tcG9zaXRvciwgYW4KKyAgICAgICAgaW1tZWRpYXRlIGZsdXNoIGlzIHRy
aWdnZXJlZC4gIFRoaXMgdGFrZXMgaW50byBhY2NvdW50IG92ZXJkcmF3CisgICAgICAgIGVsaW1p
bmF0aW9uIGJ5IHRoZSBza2lwLW9uLWNsZWFyIG9wdGltaXphdGlvbiB0aGF0IGlzIGJ1aWx0LWlu
IHRvCisgICAgICAgIFNrRGVmZXJyZWRDYW52YXMsIHRvIGFsbG93IG5vbi1SQUYgYW5pbWF0aW9u
cyB0aGF0IGNsZWFyIHRoZSBjYW52YXMgYXQKKyAgICAgICAgZWFjaCBmcmFtZSB0byBydW4gd2l0
aG91dCBhbnkgcmF0ZSBsaW1pdGluZy4gVGhpcyBjaGFuZ2UgYWxzbworICAgICAgICBpbmNpZGVu
dGFsbHkgaW1wcm92ZXMgZnJhbWUgcmF0ZSBpbiBtYW55IGNhc2VzIGJ5IHByb3ZpZGluZyBtb3Jl
CisgICAgICAgIGdyYW51bGFyIGJhdGNoaW5nIG9mIEdQVSBBUEkgY2FsbHMsIHJlc3VsdGluZyBp
biBiZXR0ZXIgcGlwZWxpbmluZworICAgICAgICB0aHJvdWdoIHRoZSBjb21tYW5kIGJ1ZmZlci4K
KworICAgICAgICBUZXN0OiB3ZWJraXRfdW5pdF90ZXN0IENhbnZhczJETGF5ZXJNYW5hZ2VyVGVz
dC50ZXN0RGVmZXJyZWRGcmFtZQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExh
eWVyQnJpZGdlOjpDYW52YXMyRExheWVyQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
czJETGF5ZXJCcmlkZ2U6OmxpbWl0UGVuZGluZ0ZyYW1lcyk6CisgICAgICAgIENhbGxlZCBhdCB0
aGUgZW5kIG9mIGEgdGFzayAodXN1YWxseSBhIHNjaGVkdWxlZCBzY3JpcHQgYWN0aW9uKSB0aGF0
CisgICAgICAgIGludm9rZWQgMmQgY2FudmFzIHJlbmRlcmluZyBjb250ZXh0IG1ldGhvZHMuIFRo
ZSBlbmQgb2YgdGhlIHRhc2sKKyAgICAgICAgbWFya3MgdGhlIGNvbXBsZXRpb24gb2YgYSBkaXNw
bGF5YWJsZSBmcmFtZS4gVGhpcyBtZXRob2Qgd2lsbCB0cmlnZ2VyCisgICAgICAgIGEgZmx1c2gg
aWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBsYXllciBoYXMgcGVuZGluZyBkcmF3IGNvbW1hbmRzIHRo
YXQKKyAgICAgICAgYXJlIG1vcmUgdGhhdCBvbmUgZnJhbWUgb2xkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0Nv
bW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmRpZEZsdXNo
UGVuZGluZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6
OnNraXBwZWRQZW5kaW5nRHJhd0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJE
TGF5ZXJCcmlkZ2U6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlk
Z2U6OmNvbnRleHRBY3F1aXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllckJyaWRnZS5oOgorICAgICAgICAoQ2FudmFzMkRMYXllckJyaWRnZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFn
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllck1hbmFnZXI6On5DYW52YXMy
RExheWVyTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6
d2lsbFByb2Nlc3NUYXNrKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllck1hbmFnZXI6OmRpZFByb2Nlc3NUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckRpZERyYXcpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmg6CisgICAgICAgIChDYW52
YXMyRExheWVyTWFuYWdlcik6CisKIDIwMTItMTAtMDIgIERhdmlkIEdyb2dhbiAgPGRncm9nYW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2luZGV4ZWRkYi9k
YXRhYmFzZS1zdHJ1Y3R1cmUuaHRtbCBzdGFydCB0byBjcmFzaCBhZnRlciByMTI0Njc1CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
QnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcAkocmV2aXNpb24gMTMwMTk3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJy
aWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgQ2FudmFzMkRMYXllckJy
aWRnZTo6Q2FudmFzMkRMYXllckJyaWRnZQogICAgICwgbV9jYW52YXMoMCkKICAgICAsIG1fY29u
dGV4dChjb250ZXh0KQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9kaWRSZWNv
cmREcmF3Q29tbWFuZChmYWxzZSkKKyAgICAsIG1fZnJhbWVzUGVuZGluZygwKQogICAgICwgbV9u
ZXh0KDApCiAgICAgLCBtX3ByZXYoMCkKIHsKQEAgLTEwNiw2ICsxMDgsMTYgQEAgU2tEZWZlcnJl
ZENhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6ZAogICAgIHJldHVybiAwOwogfQogCit2b2lk
IENhbnZhczJETGF5ZXJCcmlkZ2U6OmxpbWl0UGVuZGluZ0ZyYW1lcygpCit7CisgICAgaWYgKG1f
ZGlkUmVjb3JkRHJhd0NvbW1hbmQpIHsKKyAgICAgICAgbV9mcmFtZXNQZW5kaW5nKys7CisgICAg
ICAgIG1fZGlkUmVjb3JkRHJhd0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZnJhbWVz
UGVuZGluZyA+IDEpCisgICAgICAgICAgICBmbHVzaCgpOworICAgIH0KK30KKwogdm9pZCBDYW52
YXMyRExheWVyQnJpZGdlOjpwcmVwYXJlRm9yRHJhdygpCiB7CiAgICAgQVNTRVJUKGRlZmVycmVk
Q2FudmFzKCkpOwpAQCAtMTIyLDkgKzEzNCwyMCBAQCB2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6
OnN0b3JhZ2VBbGxvY2F0CiAgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVyQWxs
b2NhdGVkU3RvcmFnZUNoYW5nZWQodGhpcywgZGVsdGEpOwogfQogCitzaXplX3QgQ2FudmFzMkRM
YXllckJyaWRnZTo6c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZygpCit7CisgICAgcmV0dXJu
IGRlZmVycmVkQ2FudmFzKCktPnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKTsKK30KKwog
dm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0NvbW1hbmRzKCkKIHsKLSAgICBz
dG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nQ2hhbmdlZChkZWZlcnJlZENhbnZhcygpLT5zdG9y
YWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5nKCkpOworICAgIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNv
cmRpbmdDaGFuZ2VkKHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKSk7CisgICAgbV9mcmFt
ZXNQZW5kaW5nID0gMDsKK30KKwordm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpza2lwcGVkUGVu
ZGluZ0RyYXdDb21tYW5kcygpCit7CisgICAgZmx1c2hlZERyYXdDb21tYW5kcygpOwogfQogCiBz
aXplX3QgQ2FudmFzMkRMYXllckJyaWRnZTo6ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5
dGVzVG9GcmVlKQpAQCAtMTQwLDcgKzE2Myw4IEBAIHNpemVfdCBDYW52YXMyRExheWVyQnJpZGdl
OjpmcmVlTWVtb3J5SWYKIHZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2goKQogewogICAg
IEFTU0VSVChkZWZlcnJlZENhbnZhcygpKTsKLSAgICBtX2NhbnZhcy0+Zmx1c2goKTsKKyAgICBp
ZiAoZGVmZXJyZWRDYW52YXMoKS0+aGFzUGVuZGluZ0NvbW1hbmRzKCkpCisgICAgICAgIG1fY2Fu
dmFzLT5mbHVzaCgpOwogfQogCiBTa0NhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6c2tDYW52
YXMoU2tEZXZpY2UqIGRldmljZSkKQEAgLTE5Niw4ICsyMjAsMTAgQEAgdm9pZCBDYW52YXMyRExh
eWVyQnJpZGdlOjpjb250ZXh0QWNxdWlyZQogewogICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBO
b25EZWZlcnJlZCAmJiAhbV91c2VEb3VibGVCdWZmZXJpbmcpCiAgICAgICAgIG1fbGF5ZXItPndp
bGxNb2RpZnlUZXh0dXJlKCk7Ci0gICAgZWxzZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJy
ZWQpCisgICAgZWxzZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKICAgICAgICAg
Q2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVyRGlkRHJhdyh0aGlzKTsKKyAgICAgICAg
bV9kaWRSZWNvcmREcmF3Q29tbWFuZCA9IHRydWU7CisgICAgfQogfQogCiB1bnNpZ25lZCBDYW52
YXMyRExheWVyQnJpZGdlOjpiYWNrQnVmZmVyVGV4dHVyZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckJyaWRnZS5oCShyZXZpc2lvbiAxMzAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYyLDExICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVG
b3JEcmF3KCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VBbGxvY2F0ZWRGb3JS
ZWNvcmRpbmdDaGFuZ2VkKHNpemVfdCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNo
ZWREcmF3Q29tbWFuZHMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2tpcHBlZFBlbmRp
bmdEcmF3Q29tbWFuZHMoKSBPVkVSUklERTsKIAogICAgIC8vIE1ldGhvZHMgdXNlZCBieSBDYW52
YXMyRExheWVyTWFuYWdlcgogICAgIHZpcnR1YWwgc2l6ZV90IGZyZWVNZW1vcnlJZlBvc3NpYmxl
KHNpemVfdCk7IC8vIHZpcnR1YWwgZm9yIG1vY2tpbmcKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2go
KTsgLy8gdmlydHVhbCBmb3IgbW9ja2luZworICAgIHZpcnR1YWwgc2l6ZV90IHN0b3JhZ2VBbGxv
Y2F0ZWRGb3JSZWNvcmRpbmcoKTsgLy8gdmlydHVhbCBmb3IgZmFraW5nCiAgICAgc2l6ZV90IGJ5
dGVzQWxsb2NhdGVkKCkgY29uc3Qge3JldHVybiBtX2J5dGVzQWxsb2NhdGVkO30KKyAgICB2b2lk
IGxpbWl0UGVuZGluZ0ZyYW1lcygpOwogCiAgICAgU2tDYW52YXMqIHNrQ2FudmFzKFNrRGV2aWNl
Kik7CiAgICAgV2ViS2l0OjpXZWJMYXllciogbGF5ZXIoKTsKQEAgLTg3LDYgKzkwLDggQEAgcHJv
dGVjdGVkOgogICAgIE93blB0cjxXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVyPiBtX2xh
eWVyOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIHNpemVf
dCBtX2J5dGVzQWxsb2NhdGVkOworICAgIGJvb2wgbV9kaWRSZWNvcmREcmF3Q29tbWFuZDsKKyAg
ICBpbnQgbV9mcmFtZXNQZW5kaW5nOwogCiAgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlu
a2VkTGlzdE5vZGU8Q2FudmFzMkRMYXllckJyaWRnZT47CiAgICAgQ2FudmFzMkRMYXllckJyaWRn
ZSogbV9uZXh0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMTMwMTk3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vQ2FudmFzMkRMYXllck1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwx
MSBAQCBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJCiAKICNpbmNsdWRl
ICJDYW52YXMyRExheWVyTWFuYWdlci5oIgogCisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCit1c2luZyBXZWJLaXQ6OldlYlRocmVh
ZDsKKwogbmFtZXNwYWNlIHsKIGVudW0gewogICAgIERlZmF1bHRNYXhCeXRlc0FsbG9jYXRlZCA9
IDY0KjEwMjQqMTAyNCwKQEAgLTQ3LDYgKzUwLDcgQEAgQ2FudmFzMkRMYXllck1hbmFnZXI6On5D
YW52YXMyRExheWVyTWFuYQogewogICAgIEFTU0VSVCghbV9ieXRlc0FsbG9jYXRlZCk7CiAgICAg
QVNTRVJUKCFtX2xheWVyTGlzdC5oZWFkKCkpOworICAgIEFTU0VSVCghbV90YXNrT2JzZXJ2ZXJB
Y3RpdmUpOwogfQogCiB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjppbml0KHNpemVfdCBtYXhC
eXRlc0FsbG9jYXRlZCwgc2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKQpAQCAtNjIsNiArNjYs
MjIgQEAgQ2FudmFzMkRMYXllck1hbmFnZXImIENhbnZhczJETGF5ZXJNYW5hZwogICAgIHJldHVy
biBtYW5hZ2VyOwogfQogCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjp3aWxsUHJvY2Vzc1Rh
c2soKQoreworICAgIC8vIE9ic2VydmVyIGlzIHJlZ2lzdGVyZWQgZHVyaW5nIGEgdGFzayBhbmQg
ZGVyZWdpc3RlcmVkIHVwb24gdGFzayBjb21wbGV0aW9uLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpkaWRQcm9jZXNzVGFzaygpCit7
CisgICAgLy8gQ2FsbGVkIGFmdGVyIHRoZSBzY3JpcHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBm
cmFtZSBoYXMgYmVlbiBwcm9jZXNzZWQuCisgICAgQVNTRVJUKG1fdGFza09ic2VydmVyQWN0aXZl
KTsKKyAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cmVt
b3ZlVGFza09ic2VydmVyKHRoaXMpOworICAgIG1fdGFza09ic2VydmVyQWN0aXZlID0gZmFsc2U7
CisgICAgZm9yIChDYW52YXMyRExheWVyQnJpZGdlKiBsYXllciA9IG1fbGF5ZXJMaXN0LmhlYWQo
KTsgbGF5ZXI7IGxheWVyID0gbGF5ZXItPm5leHQoKSkKKyAgICAgICAgbGF5ZXItPmxpbWl0UGVu
ZGluZ0ZyYW1lcygpOworfQorCiB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckRpZERy
YXcoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIpCiB7CiAgICAgaWYgKGlzSW5MaXN0KGxheWVy
KSkgewpAQCAtNzAsNyArOTAsMTMgQEAgdm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJE
aWREcmF3KAogICAgICAgICAgICAgbV9sYXllckxpc3QucHVzaChsYXllcik7IC8vIFNldCBhcyBN
UlUKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7
IAorICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7CisKKyAgICBpZiAoIW1fdGFza09ic2Vy
dmVyQWN0aXZlKSB7CisgICAgICAgIG1fdGFza09ic2VydmVyQWN0aXZlID0gdHJ1ZTsKKyAgICAg
ICAgLy8gU2NoZWR1bGUgYSBjYWxsIHRvIGRpZFByb2Nlc3NUYXNrKCkgYWZ0ZXIgY29tcGxldGlv
biBvZiB0aGUgY3VycmVudCBzY3JpcHQgdGFzay4KKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6
Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmFkZFRhc2tPYnNlcnZlcih0aGlzKTsKKyAgICB9
CiB9CiAKIHZvaWQgQ2FudmFzMkRMYXllck1hbmFnZXI6OmFkZExheWVyVG9MaXN0KENhbnZhczJE
TGF5ZXJCcmlkZ2UqIGxheWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5o
CShyZXZpc2lvbiAxMzAxOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiAr
MjYsMTMgQEAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSQogI2RlZmlu
ZSBDYW52YXMyRExheWVyTWFuYWdlcl9oCiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdl
LmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlRocmVhZC5oPgogCiBjbGFzcyBDYW52YXMyRExheWVy
TWFuYWdlclRlc3Q7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FudmFzMkRMYXll
ck1hbmFnZXIgeworY2xhc3MgQ2FudmFzMkRMYXllck1hbmFnZXIgOiBwdWJsaWMgV2ViS2l0OjpX
ZWJUaHJlYWQ6OlRhc2tPYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIENhbnZhczJETGF5
ZXJNYW5hZ2VyJiBnZXQoKTsKICAgICB2b2lkIGluaXQoc2l6ZV90IG1heEJ5dGVzQWxsb2NhdGVk
LCBzaXplX3QgdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQpOwpAQCAtNDgsMTAgKzQ5LDEzIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBpc0luTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7CiAgICAgdm9pZCBh
ZGRMYXllclRvTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7CiAgICAgdm9pZCByZW1vdmVMYXll
ckZyb21MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBy
b2Nlc3NUYXNrKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFByb2Nlc3NUYXNrKCkg
T1ZFUlJJREU7CiAKICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKICAgICBzaXplX3QgbV9t
YXhCeXRlc0FsbG9jYXRlZDsKICAgICBzaXplX3QgbV90YXJnZXRCeXRlc0FsbG9jYXRlZDsKKyAg
ICBib29sIG1fdGFza09ic2VydmVyQWN0aXZlOwogICAgIERvdWJseUxpbmtlZExpc3Q8Q2FudmFz
MkRMYXllckJyaWRnZT4gbV9sYXllckxpc3Q7CiAKICAgICBmcmllbmQgY2xhc3MgOjpDYW52YXMy
RExheWVyTWFuYWdlclRlc3Q7IC8vIGZvciB1bml0IHRlc3RpbmcKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzAxOTgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTAyICBK
dXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IFNtb290aGVyIGFuaW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0
IHRvIHZlcmlmeSB0aGUgYXV0b21hdGljIGZsdXNoaW5nIG9mIGRlZmVycmVkIDJkIGNhbnZhcwor
ICAgICAgICBsYXllcnMgd2hlbiBzY3JpcHRlZCBhbmltYXRpb25zIGFyZSBtb3JlIHRoYW4gb25l
IGZ1bGwgZnJhbWUgYWhlYWQgCisgICAgICAgIG9mIHRoZSBjb21wb3NpdG9yLiBBbHNvIHZlcmlm
aWVzIHRoYXQgYXV0b21hdGljIGZsdXNoaW5nIGRvZXMgbm90CisgICAgICAgIGtpY2staW4gd2hl
biB0aGUgc2tpcCBvbiBjbGVhciBvcHRpbWl6YXRpb24gZmlyZXMKKworICAgICAgICAqIERFUFM6
CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcDoKKyAgICAgICAg
KEZha2VDYW52YXMyRExheWVyQnJpZGdlOjpmYWtlU2tpcFBlbmRpbmdEcmF3Q29tbWFuZHMpOgor
ICAgICAgICBUbyBmYWtlIHRoZSBza2lwIG9uIGNsZWFyIG9wdGltaXphdGlvbgorICAgICAgICAo
RmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoQ2FudmFzMkRMYXllck1hbmFnZXJU
ZXN0KToKKyAgICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDo6ZG9EZWZlcnJlZEZyYW1l
VGVzdFRhc2spOgorICAgICAgICBNZXRob2QgdGhhdCBzaW11bGF0ZXMgYSBqYXZhc2NyaXB0IHNj
aGVkdWxlZCBhY3Rpb24gdGhhdCBkcmF3cyB0bworICAgICAgICBhIDJEIGNhbnZhcyBsYXllcgor
ICAgICAgICAoRGVmZXJyZWRGcmFtZVRlc3RUYXNrKToKKyAgICAgICAgVGFzayBvYmplY3QgdG8g
c2ltdWxhdGUgYSBzY2hlZHVsZWQgYWN0aW9uLiBUaGlzIGlzIHNvIHRoZSB1bml0CisgICAgICAg
IHRlc3QgY2FuIGNvdmVyIHRoZSBUYXNrT2JzZXJ2ZXIgYmVoYXZpb3Igb2YgQ2FudmFzMkRMYXll
ck1hbmFnZXIuCisgICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlclRlc3Q6OkRlZmVycmVkRnJh
bWVUZXN0VGFzazo6RGVmZXJyZWRGcmFtZVRlc3RUYXNrKToKKyAgICAgICAgKENhbnZhczJETGF5
ZXJNYW5hZ2VyVGVzdDo6ZGVmZXJyZWRGcmFtZVRlc3QpOgorICAgICAgICBUaGUgdW5pdCB0ZXN0
IGltcGxlbWVudGF0aW9uLCB3aGljaCB1c2VzIHRoZSBXZWJUaHJlYWQgcnVuIGxvb3AgdG8KKyAg
ICAgICAgcG9zdCB0YXNrcyB0aGF0IHRvdWNoIHRoZSBjYW52YXMgbGF5ZXIuCisKIDIwMTItMTAt
MDIgIFNhZHJ1bCBIYWJpYiBDaG93ZGh1cnkgIDxzYWRydWxAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gTWFrZSBzdXJlIHRoZSB0b3VjaC1wb2ludHMgaW4gdGhlIHRvdWNoLWV2
ZW50cyBoYXZlIHRoZSBjb3JyZWN0IHN0YXRlLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9ERVBTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vREVQUwkocmV2aXNp
b24gMTMwMTk3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9ERVBTCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBACiAKIHZhcnMgPSB7CiAgICdjaHJvbWl1bV9zdm4nOiAnaHR0cDov
L3NyYy5jaHJvbWl1bS5vcmcvc3ZuL3RydW5rL3NyYycsCi0gICdjaHJvbWl1bV9yZXYnOiAnMTU5
MDE5JworICAnY2hyb21pdW1fcmV2JzogJzE1OTY4MScKIH0KIAogZGVwcyA9IHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJETGF5ZXJN
YW5hZ2VyVGVzdC5jcHAJKHJldmlzaW9uIDEzMDE5NykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRl
IDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVGhyZWFkLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgdGVzdGluZzo6SW5TZXF1ZW5jZTsKQEAgLTQ3
LDYgKzQ5LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgdmlydHVhbCBzaXplX3Qg
c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZygpIE9WRVJSSURFCisgICAgeworICAgICAgICAv
LyBCZWNhdXNlIHRoZSBmYWtlIGxheWVyIGhhcyBubyBjYW52YXMgdG8gcXVlcnksIGp1c3QKKyAg
ICAgICAgLy8gcmV0dXJuIHN0YXR1cyBxdW8uIEFsbG9jYXRpb24gY2hhbmdlcyB0aGF0IHdvdWxk
IG5vcm1hbGx5IGJlCisgICAgICAgIC8vIGluaXRpYXRlZCBieSB0aGUgY2FudmFzIGNhbiBiZSBm
YWtlZCBieSBpbnZva2luZworICAgICAgICAvLyBzdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5n
Q2hhbmdlZCBkaXJlY3RseSBmcm9tIHRoZSB0ZXN0IGNvZGUuCisgICAgICAgIHJldHVybiBtX2J5
dGVzQWxsb2NhdGVkOworICAgIH0KKwogICAgIHZvaWQgZmFrZUZyZWVhYmxlQnl0ZXMoc2l6ZV90
IHNpemUpCiAgICAgewogICAgICAgICBtX2ZyZWVhYmxlQnl0ZXMgPSBzaXplOwpAQCAtNjUsNiAr
NzYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSBPVkVSUklERQogICAg
IHsKKyAgICAgICAgZmx1c2hlZERyYXdDb21tYW5kcygpOwogICAgICAgICBtX2ZsdXNoQ291bnQr
KzsKICAgICB9CiAKQEAgLTEzMyw2ICsxNDUsODMgQEAgcHJvdGVjdGVkOgogICAgICAgICBFWFBF
Q1RfRVEoKHNpemVfdCkxMSwgbGF5ZXIuYnl0ZXNBbGxvY2F0ZWQoKSk7IC8vIGZsdXNoIGRyb3Bz
IHRoZSBsYXllciBmcm9tIG1hbmFnZXIncyB0cmFja2luZyBsaXN0CiAgICAgICAgIEVYUEVDVF9G
QUxTRShtYW5hZ2VyLmlzSW5MaXN0KCZsYXllcikpOwogICAgIH0KKworICAgIHZvaWQgZG9EZWZl
cnJlZEZyYW1lVGVzdFRhc2soRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyLCBib29sIHNr
aXBDb21tYW5kcykKKyAgICB7CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFu
YWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOworICAgICAgICBsYXllci0+Y29udGV4
dEFjcXVpcmVkKCk7CisgICAgICAgIGxheWVyLT5zdG9yYWdlQWxsb2NhdGVkRm9yUmVjb3JkaW5n
Q2hhbmdlZCgxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoQ2FudmFzMkRMYXllck1hbmFnZXI6Omdl
dCgpLm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgaWYgKHNraXBDb21tYW5kcykgewor
ICAgICAgICAgICAgbGF5ZXItPmNvbnRleHRBY3F1aXJlZCgpOworICAgICAgICAgICAgbGF5ZXIt
PnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDApOworICAgICAgICAgICAgbGF5
ZXItPnNraXBwZWRQZW5kaW5nRHJhd0NvbW1hbmRzKCk7CisgICAgICAgIH0KKyAgICAgICAgV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmV4aXRSdW5Mb29wKCk7
CisgICAgfQorCisgICAgY2xhc3MgRGVmZXJyZWRGcmFtZVRlc3RUYXNrIDogcHVibGljIFdlYktp
dDo6V2ViVGhyZWFkOjpUYXNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmVycmVkRnJhbWVU
ZXN0VGFzayhDYW52YXMyRExheWVyTWFuYWdlclRlc3QqIHRlc3QsIEZha2VDYW52YXMyRExheWVy
QnJpZGdlKiBsYXllciwgYm9vbCBza2lwQ29tbWFuZHMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fdGVzdCA9IHRlc3Q7CisgICAgICAgICAgICBtX2xheWVyID0gbGF5ZXI7CisgICAgICAgICAg
ICBtX3NraXBDb21tYW5kcyA9IHNraXBDb21tYW5kczsKKyAgICAgICAgfQorCisgICAgICAgIHZp
cnR1YWwgdm9pZCBydW4oKSBPVkVSUklERQorICAgICAgICB7CisgICAgICAgICAgICBtX3Rlc3Qt
PmRvRGVmZXJyZWRGcmFtZVRlc3RUYXNrKG1fbGF5ZXIsIG1fc2tpcENvbW1hbmRzKTsKKyAgICAg
ICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdCogbV90
ZXN0OworICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSogbV9sYXllcjsKKyAgICAgICAg
Ym9vbCBtX3NraXBDb21tYW5kczsKKyAgICB9OworCisgICAgdm9pZCBkZWZlcnJlZEZyYW1lVGVz
dCgpCisgICAgeworICAgICAgICBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkuaW5pdCgxMCwg
MTApOworICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSBmYWtlTGF5ZXI7CisgICAgICAg
IFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0VGFzayhu
ZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5ZXIsIHRydWUpKTsKKyAgICAg
ICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVudGVyUnVu
TG9vcCgpOworICAgICAgICAvLyBWZXJpZnkgdGhhdCBkaWRQcm9jZXNzVGFzayB3YXMgY2FsbGVk
IHVwb24gY29tcGxldGlvbgorICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFn
ZXI6OmdldCgpLm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQg
bm8gZmx1c2ggd2FzIHBlcmZvcm1lZCBiZWNhdXNlIGZyYW1lIGlzIGZyZXNoCisgICAgICAgIEVY
UEVDVF9FUSgwLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAgICAvLyBWZXJpZnkg
dGhhdCBubyBmbHVzaGVzIGFyZSB0cmlnZ2VyZWQgYXMgbG9uZyBhcyBmcmFtZSBhcmUgZnJlc2gK
KyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBv
c3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVzdFRhc2sodGhpcywgJmZha2VMYXllciwgdHJ1ZSkp
OworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+
ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdl
cjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOworICAgICAgICBFWFBFQ1RfRVEoMCwgZmFr
ZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVu
dCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVzdFRhc2so
dGhpcywgJmZha2VMYXllciwgdHJ1ZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOwor
ICAgICAgICBFWFBFQ1RfRVEoMCwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAg
Ly8gVmVyaWZ5IHRoYXQgYSBmbHVzaCBpcyB0cmlnZ2VyZWQgZXZlcnkgdHdvIGZyYW1lcyB3aGVu
IHRoZXkgYXJlIHN0YWxlLgorICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1
cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAm
ZmFrZUxheWVyLCBmYWxzZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCkt
PmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShD
YW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOworICAgICAg
ICBFWFBFQ1RfRVEoMSwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgV2ViS2l0
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZl
cnJlZEZyYW1lVGVzdFRhc2sodGhpcywgJmZha2VMYXllciwgZmFsc2UpKTsKKyAgICAgICAgV2Vi
S2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVudGVyUnVuTG9vcCgp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLm1fdGFz
a09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGZha2VMYXllci5tX2ZsdXNo
Q291bnQpOworCisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRo
cmVhZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5
ZXIsIGZhbHNlKSk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVu
dFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJE
TGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAgIEVYUEVD
VF9FUSgyLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAgICBXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJh
bWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCBmYWxzZSkpOworICAgICAgICBXZWJLaXQ6OlBs
YXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2
ZXJBY3RpdmUpOworICAgICAgICBFWFBFQ1RfRVEoMiwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7
CisgICAgfQogfTsKIAogbmFtZXNwYWNlIHsKQEAgLTE1Miw1ICsyNDEsMTAgQEAgVEVTVF9GKENh
bnZhczJETGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdEZsdQogICAgIGZsdXNoRXZpY3Rpb25UZXN0KCk7
CiB9CiAKK1RFU1RfRihDYW52YXMyRExheWVyTWFuYWdlclRlc3QsIHRlc3REZWZlcnJlZEZyYW1l
KQoreworICAgIGRlZmVycmVkRnJhbWVUZXN0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167116</attachid>
            <date>2012-10-04 10:06:20 -0700</date>
            <delta_ts>2012-10-10 13:57:48 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-97918-20121004130529.patch</filename>
            <type>text/plain</type>
            <size>16862</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDM5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTEwLTAyICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFNtb290
aGVyIGFuaW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgIFJlZHVjZXMgYW5pbWF0aW9uIGph
bmsgYnkgcHJldmVudGluZyB0aGUgYWNjdW11bGF0aW9uIG9mIG11bHRpcGxlCisgICAgICAgIGZy
YW1lcyBvZiBiYWNrbG9nIGluIHRoZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIHF1ZXVlLiBX
aGVuIHRoZQorICAgICAgICBhbmltYXRpb24gaXMgbW9yZSB0aGFuIG9uZSBmdWxsIGZyYW1lIGFo
ZWFkIG9mIHRoZSBjb21wb3NpdG9yLCBhbgorICAgICAgICBpbW1lZGlhdGUgZmx1c2ggaXMgdHJp
Z2dlcmVkLiAgVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgb3ZlcmRyYXcKKyAgICAgICAgZWxpbWlu
YXRpb24gYnkgdGhlIHNraXAtb24tY2xlYXIgb3B0aW1pemF0aW9uIHRoYXQgaXMgYnVpbHQtaW4g
dG8KKyAgICAgICAgU2tEZWZlcnJlZENhbnZhcywgdG8gYWxsb3cgbm9uLVJBRiBhbmltYXRpb25z
IHRoYXQgY2xlYXIgdGhlIGNhbnZhcyBhdAorICAgICAgICBlYWNoIGZyYW1lIHRvIHJ1biB3aXRo
b3V0IGFueSByYXRlIGxpbWl0aW5nLiBUaGlzIGNoYW5nZSBhbHNvCisgICAgICAgIGluY2lkZW50
YWxseSBpbXByb3ZlcyBmcmFtZSByYXRlIGluIG1hbnkgY2FzZXMgYnkgcHJvdmlkaW5nIG1vcmUK
KyAgICAgICAgZ3JhbnVsYXIgYmF0Y2hpbmcgb2YgR1BVIEFQSSBjYWxscywgcmVzdWx0aW5nIGlu
IGJldHRlciBwaXBlbGluaW5nCisgICAgICAgIHRocm91Z2ggdGhlIGNvbW1hbmQgYnVmZmVyLgor
CisgICAgICAgIFRlc3Q6IHdlYmtpdF91bml0X3Rlc3QgQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0
LnRlc3REZWZlcnJlZEZyYW1lCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5
ZXJCcmlkZ2U6OkNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
MkRMYXllckJyaWRnZTo6bGltaXRQZW5kaW5nRnJhbWVzKToKKyAgICAgICAgQ2FsbGVkIGF0IHRo
ZSBlbmQgb2YgYSB0YXNrICh1c3VhbGx5IGEgc2NoZWR1bGVkIHNjcmlwdCBhY3Rpb24pIHRoYXQK
KyAgICAgICAgaW52b2tlZCAyZCBjYW52YXMgcmVuZGVyaW5nIGNvbnRleHQgbWV0aG9kcy4gVGhl
IGVuZCBvZiB0aGUgdGFzaworICAgICAgICBtYXJrcyB0aGUgY29tcGxldGlvbiBvZiBhIGRpc3Bs
YXlhYmxlIGZyYW1lLiBUaGlzIG1ldGhvZCB3aWxsIHRyaWdnZXIKKyAgICAgICAgYSBmbHVzaCBp
ZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGxheWVyIGhhcyBwZW5kaW5nIGRyYXcgY29tbWFuZHMgdGhh
dAorICAgICAgICBhcmUgbW9yZSB0aGF0IG9uZSBmcmFtZSBvbGQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmZsdXNoZWREcmF3Q29t
bWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6ZGlkRmx1c2hQ
ZW5kaW5nQ29tbWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6
c2tpcHBlZFBlbmRpbmdEcmF3Q29tbWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckJyaWRnZTo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRn
ZTo6Y29udGV4dEFjcXVpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQnJpZGdlLmg6CisgICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6fkNhbnZhczJE
TGF5ZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjp3
aWxsUHJvY2Vzc1Rhc2spOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyTWFuYWdlcjo6ZGlkUHJvY2Vzc1Rhc2spOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllck1hbmFnZXI6OmxheWVyRGlkRHJhdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaDoKKyAgICAgICAgKENhbnZh
czJETGF5ZXJNYW5hZ2VyKToKKwogMjAxMi0xMC0wNCAgVnNldm9sb2QgVmxhc292ICA8dnNldmlr
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTY3JpcHRzIHBhbmVsIHNo
b3VsZCBub3QgYXV0b21hdGljYWxseSBzd2l0Y2ggdG8gc25pcHBldCBldmFsdWF0aW9uIHdoZW4g
cHJldmlvdXNseSBldmFsdWF0ZWQgc25pcHBldCBpcyBlZGl0ZWQuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQnJpZGdlLmNwcAkocmV2aXNpb24gMTMwMzkxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgQ2FudmFzMkRMYXllckJyaWRnZTo6Q2FudmFz
MkRMYXllckJyaWRnZQogICAgICwgbV9jYW52YXMoMCkKICAgICAsIG1fY29udGV4dChjb250ZXh0
KQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9kaWRSZWNvcmREcmF3Q29tbWFu
ZChmYWxzZSkKKyAgICAsIG1fZnJhbWVzUGVuZGluZygwKQogICAgICwgbV9uZXh0KDApCiAgICAg
LCBtX3ByZXYoMCkKIHsKQEAgLTEwNiw2ICsxMDgsMTYgQEAgU2tEZWZlcnJlZENhbnZhcyogQ2Fu
dmFzMkRMYXllckJyaWRnZTo6ZAogICAgIHJldHVybiAwOwogfQogCit2b2lkIENhbnZhczJETGF5
ZXJCcmlkZ2U6OmxpbWl0UGVuZGluZ0ZyYW1lcygpCit7CisgICAgaWYgKG1fZGlkUmVjb3JkRHJh
d0NvbW1hbmQpIHsKKyAgICAgICAgbV9mcmFtZXNQZW5kaW5nKys7CisgICAgICAgIG1fZGlkUmVj
b3JkRHJhd0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZnJhbWVzUGVuZGluZyA+IDEp
CisgICAgICAgICAgICBmbHVzaCgpOworICAgIH0KK30KKwogdm9pZCBDYW52YXMyRExheWVyQnJp
ZGdlOjpwcmVwYXJlRm9yRHJhdygpCiB7CiAgICAgQVNTRVJUKGRlZmVycmVkQ2FudmFzKCkpOwpA
QCAtMTIyLDkgKzEzNCwyMCBAQCB2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6OnN0b3JhZ2VBbGxv
Y2F0CiAgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVyQWxsb2NhdGVkU3RvcmFn
ZUNoYW5nZWQodGhpcywgZGVsdGEpOwogfQogCitzaXplX3QgQ2FudmFzMkRMYXllckJyaWRnZTo6
c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZygpCit7CisgICAgcmV0dXJuIGRlZmVycmVkQ2Fu
dmFzKCktPnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKTsKK30KKwogdm9pZCBDYW52YXMy
RExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0NvbW1hbmRzKCkKIHsKLSAgICBzdG9yYWdlQWxsb2Nh
dGVkRm9yUmVjb3JkaW5nQ2hhbmdlZChkZWZlcnJlZENhbnZhcygpLT5zdG9yYWdlQWxsb2NhdGVk
Rm9yUmVjb3JkaW5nKCkpOworICAgIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2Vk
KHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKSk7CisgICAgbV9mcmFtZXNQZW5kaW5nID0g
MDsKK30KKwordm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpza2lwcGVkUGVuZGluZ0RyYXdDb21t
YW5kcygpCit7CisgICAgZmx1c2hlZERyYXdDb21tYW5kcygpOwogfQogCiBzaXplX3QgQ2FudmFz
MkRMYXllckJyaWRnZTo6ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5dGVzVG9GcmVlKQpA
QCAtMTQwLDcgKzE2Myw4IEBAIHNpemVfdCBDYW52YXMyRExheWVyQnJpZGdlOjpmcmVlTWVtb3J5
SWYKIHZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2goKQogewogICAgIEFTU0VSVChkZWZl
cnJlZENhbnZhcygpKTsKLSAgICBtX2NhbnZhcy0+Zmx1c2goKTsKKyAgICBpZiAoZGVmZXJyZWRD
YW52YXMoKS0+aGFzUGVuZGluZ0NvbW1hbmRzKCkpCisgICAgICAgIG1fY2FudmFzLT5mbHVzaCgp
OwogfQogCiBTa0NhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6c2tDYW52YXMoU2tEZXZpY2Uq
IGRldmljZSkKQEAgLTE5Niw4ICsyMjAsMTAgQEAgdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpj
b250ZXh0QWNxdWlyZQogewogICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCAm
JiAhbV91c2VEb3VibGVCdWZmZXJpbmcpCiAgICAgICAgIG1fbGF5ZXItPndpbGxNb2RpZnlUZXh0
dXJlKCk7Ci0gICAgZWxzZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpCisgICAgZWxz
ZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKICAgICAgICAgQ2FudmFzMkRMYXll
ck1hbmFnZXI6OmdldCgpLmxheWVyRGlkRHJhdyh0aGlzKTsKKyAgICAgICAgbV9kaWRSZWNvcmRE
cmF3Q29tbWFuZCA9IHRydWU7CisgICAgfQogfQogCiB1bnNpZ25lZCBDYW52YXMyRExheWVyQnJp
ZGdlOjpiYWNrQnVmZmVyVGV4dHVyZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRn
ZS5oCShyZXZpc2lvbiAxMzAzOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEx
ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFu
Z2VkKHNpemVfdCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoZWREcmF3Q29tbWFu
ZHMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2tpcHBlZFBlbmRpbmdEcmF3Q29tbWFu
ZHMoKSBPVkVSUklERTsKIAogICAgIC8vIE1ldGhvZHMgdXNlZCBieSBDYW52YXMyRExheWVyTWFu
YWdlcgogICAgIHZpcnR1YWwgc2l6ZV90IGZyZWVNZW1vcnlJZlBvc3NpYmxlKHNpemVfdCk7IC8v
IHZpcnR1YWwgZm9yIG1vY2tpbmcKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKTsgLy8gdmlydHVh
bCBmb3IgbW9ja2luZworICAgIHZpcnR1YWwgc2l6ZV90IHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNv
cmRpbmcoKTsgLy8gdmlydHVhbCBmb3IgZmFraW5nCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVk
KCkgY29uc3Qge3JldHVybiBtX2J5dGVzQWxsb2NhdGVkO30KKyAgICB2b2lkIGxpbWl0UGVuZGlu
Z0ZyYW1lcygpOwogCiAgICAgU2tDYW52YXMqIHNrQ2FudmFzKFNrRGV2aWNlKik7CiAgICAgV2Vi
S2l0OjpXZWJMYXllciogbGF5ZXIoKTsKQEAgLTg3LDYgKzkwLDggQEAgcHJvdGVjdGVkOgogICAg
IE93blB0cjxXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVyPiBtX2xheWVyOwogICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIHNpemVfdCBtX2J5dGVzQWxs
b2NhdGVkOworICAgIGJvb2wgbV9kaWRSZWNvcmREcmF3Q29tbWFuZDsKKyAgICBpbnQgbV9mcmFt
ZXNQZW5kaW5nOwogCiAgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8
Q2FudmFzMkRMYXllckJyaWRnZT47CiAgICAgQ2FudmFzMkRMYXllckJyaWRnZSogbV9uZXh0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllck1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTMwMzkx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllck1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMSBAQCBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJCiAKICNpbmNsdWRlICJDYW52YXMyRExh
eWVyTWFuYWdlci5oIgogCisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCit1c2luZyBXZWJLaXQ6OldlYlRocmVhZDsKKwogbmFtZXNw
YWNlIHsKIGVudW0gewogICAgIERlZmF1bHRNYXhCeXRlc0FsbG9jYXRlZCA9IDY0KjEwMjQqMTAy
NCwKQEAgLTQ3LDYgKzUwLDcgQEAgQ2FudmFzMkRMYXllck1hbmFnZXI6On5DYW52YXMyRExheWVy
TWFuYQogewogICAgIEFTU0VSVCghbV9ieXRlc0FsbG9jYXRlZCk7CiAgICAgQVNTRVJUKCFtX2xh
eWVyTGlzdC5oZWFkKCkpOworICAgIEFTU0VSVCghbV90YXNrT2JzZXJ2ZXJBY3RpdmUpOwogfQog
CiB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjppbml0KHNpemVfdCBtYXhCeXRlc0FsbG9jYXRl
ZCwgc2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKQpAQCAtNjIsNiArNjYsMjIgQEAgQ2FudmFz
MkRMYXllck1hbmFnZXImIENhbnZhczJETGF5ZXJNYW5hZwogICAgIHJldHVybiBtYW5hZ2VyOwog
fQogCit2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjp3aWxsUHJvY2Vzc1Rhc2soKQoreworICAg
IC8vIE9ic2VydmVyIGlzIHJlZ2lzdGVyZWQgZHVyaW5nIGEgdGFzayBhbmQgZGVyZWdpc3RlcmVk
IHVwb24gdGFzayBjb21wbGV0aW9uLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpkaWRQcm9jZXNzVGFzaygpCit7CisgICAgLy8gQ2Fs
bGVkIGFmdGVyIHRoZSBzY3JpcHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBmcmFtZSBoYXMgYmVl
biBwcm9jZXNzZWQuCisgICAgQVNTRVJUKG1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICBXZWJL
aXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cmVtb3ZlVGFza09ic2Vy
dmVyKHRoaXMpOworICAgIG1fdGFza09ic2VydmVyQWN0aXZlID0gZmFsc2U7CisgICAgZm9yIChD
YW52YXMyRExheWVyQnJpZGdlKiBsYXllciA9IG1fbGF5ZXJMaXN0LmhlYWQoKTsgbGF5ZXI7IGxh
eWVyID0gbGF5ZXItPm5leHQoKSkKKyAgICAgICAgbGF5ZXItPmxpbWl0UGVuZGluZ0ZyYW1lcygp
OworfQorCiB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpsYXllckRpZERyYXcoQ2FudmFzMkRM
YXllckJyaWRnZSogbGF5ZXIpCiB7CiAgICAgaWYgKGlzSW5MaXN0KGxheWVyKSkgewpAQCAtNzAs
NyArOTAsMTMgQEAgdm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJEaWREcmF3KAogICAg
ICAgICAgICAgbV9sYXllckxpc3QucHVzaChsYXllcik7IC8vIFNldCBhcyBNUlUKICAgICAgICAg
fQogICAgIH0gZWxzZQotICAgICAgICBhZGRMYXllclRvTGlzdChsYXllcik7IAorICAgICAgICBh
ZGRMYXllclRvTGlzdChsYXllcik7CisKKyAgICBpZiAoIW1fdGFza09ic2VydmVyQWN0aXZlKSB7
CisgICAgICAgIG1fdGFza09ic2VydmVyQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgLy8gU2NoZWR1
bGUgYSBjYWxsIHRvIGRpZFByb2Nlc3NUYXNrKCkgYWZ0ZXIgY29tcGxldGlvbiBvZiB0aGUgY3Vy
cmVudCBzY3JpcHQgdGFzay4KKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5j
dXJyZW50VGhyZWFkKCktPmFkZFRhc2tPYnNlcnZlcih0aGlzKTsKKyAgICB9CiB9CiAKIHZvaWQg
Q2FudmFzMkRMYXllck1hbmFnZXI6OmFkZExheWVyVG9MaXN0KENhbnZhczJETGF5ZXJCcmlkZ2Uq
IGxheWVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdlci5oCShyZXZpc2lvbiAx
MzAzOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52
YXMyRExheWVyTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMTMgQEAgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSQogI2RlZmluZSBDYW52YXMyRExh
eWVyTWFuYWdlcl9oCiAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQnJpZGdlLmgiCisjaW5jbHVk
ZSA8cHVibGljL1dlYlRocmVhZC5oPgogCiBjbGFzcyBDYW52YXMyRExheWVyTWFuYWdlclRlc3Q7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FudmFzMkRMYXllck1hbmFnZXIgewor
Y2xhc3MgQ2FudmFzMkRMYXllck1hbmFnZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJUaHJlYWQ6OlRh
c2tPYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIENhbnZhczJETGF5ZXJNYW5hZ2VyJiBn
ZXQoKTsKICAgICB2b2lkIGluaXQoc2l6ZV90IG1heEJ5dGVzQWxsb2NhdGVkLCBzaXplX3QgdGFy
Z2V0Qnl0ZXNBbGxvY2F0ZWQpOwpAQCAtNDgsMTAgKzQ5LDEzIEBAIHByaXZhdGU6CiAgICAgYm9v
bCBpc0luTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7CiAgICAgdm9pZCBhZGRMYXllclRvTGlz
dChDYW52YXMyRExheWVyQnJpZGdlKik7CiAgICAgdm9pZCByZW1vdmVMYXllckZyb21MaXN0KENh
bnZhczJETGF5ZXJCcmlkZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFByb2Nlc3NUYXNrKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZFByb2Nlc3NUYXNrKCkgT1ZFUlJJREU7CiAK
ICAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKICAgICBzaXplX3QgbV9tYXhCeXRlc0FsbG9j
YXRlZDsKICAgICBzaXplX3QgbV90YXJnZXRCeXRlc0FsbG9jYXRlZDsKKyAgICBib29sIG1fdGFz
a09ic2VydmVyQWN0aXZlOwogICAgIERvdWJseUxpbmtlZExpc3Q8Q2FudmFzMkRMYXllckJyaWRn
ZT4gbV9sYXllckxpc3Q7CiAKICAgICBmcmllbmQgY2xhc3MgOjpDYW52YXMyRExheWVyTWFuYWdl
clRlc3Q7IC8vIGZvciB1bml0IHRlc3RpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMzAzOTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEyLTEwLTAyICBKdXN0aW4gTm92b3Nh
ZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFNtb290aGVyIGFu
aW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgIE5ldyB1bml0IHRlc3QgdG8gdmVyaWZ5IHRo
ZSBhdXRvbWF0aWMgZmx1c2hpbmcgb2YgZGVmZXJyZWQgMmQgY2FudmFzCisgICAgICAgIGxheWVy
cyB3aGVuIHNjcmlwdGVkIGFuaW1hdGlvbnMgYXJlIG1vcmUgdGhhbiBvbmUgZnVsbCBmcmFtZSBh
aGVhZCAKKyAgICAgICAgb2YgdGhlIGNvbXBvc2l0b3IuIEFsc28gdmVyaWZpZXMgdGhhdCBhdXRv
bWF0aWMgZmx1c2hpbmcgZG9lcyBub3QKKyAgICAgICAga2ljay1pbiB3aGVuIHRoZSBza2lwIG9u
IGNsZWFyIG9wdGltaXphdGlvbiBmaXJlcworCisgICAgICAgICogREVQUzoKKyAgICAgICAgKiB0
ZXN0cy9DYW52YXMyRExheWVyTWFuYWdlclRlc3QuY3BwOgorICAgICAgICAoRmFrZUNhbnZhczJE
TGF5ZXJCcmlkZ2U6OmZha2VTa2lwUGVuZGluZ0RyYXdDb21tYW5kcyk6CisgICAgICAgIFRvIGZh
a2UgdGhlIHNraXAgb24gY2xlYXIgb3B0aW1pemF0aW9uCisgICAgICAgIChGYWtlQ2FudmFzMkRM
YXllckJyaWRnZSk6CisgICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlclRlc3QpOgorICAgICAg
ICAoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0Ojpkb0RlZmVycmVkRnJhbWVUZXN0VGFzayk6Cisg
ICAgICAgIE1ldGhvZCB0aGF0IHNpbXVsYXRlcyBhIGphdmFzY3JpcHQgc2NoZWR1bGVkIGFjdGlv
biB0aGF0IGRyYXdzIHRvCisgICAgICAgIGEgMkQgY2FudmFzIGxheWVyCisgICAgICAgIChEZWZl
cnJlZEZyYW1lVGVzdFRhc2spOgorICAgICAgICBUYXNrIG9iamVjdCB0byBzaW11bGF0ZSBhIHNj
aGVkdWxlZCBhY3Rpb24uIFRoaXMgaXMgc28gdGhlIHVuaXQKKyAgICAgICAgdGVzdCBjYW4gY292
ZXIgdGhlIFRhc2tPYnNlcnZlciBiZWhhdmlvciBvZiBDYW52YXMyRExheWVyTWFuYWdlci4KKyAg
ICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDo6RGVmZXJyZWRGcmFtZVRlc3RUYXNrOjpE
ZWZlcnJlZEZyYW1lVGVzdFRhc2spOgorICAgICAgICAoQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0
OjpkZWZlcnJlZEZyYW1lVGVzdCk6CisgICAgICAgIFRoZSB1bml0IHRlc3QgaW1wbGVtZW50YXRp
b24sIHdoaWNoIHVzZXMgdGhlIFdlYlRocmVhZCBydW4gbG9vcCB0bworICAgICAgICBwb3N0IHRh
c2tzIHRoYXQgdG91Y2ggdGhlIGNhbnZhcyBsYXllci4KKwogMjAxMi0xMC0wNSAgS2VudCBUYW11
cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBFbmFibGUgdGhl
IG11bHRpcGxlIGZpZWxkcyBVSSBmb3IgaW5wdXRbdHlwZT1kYXRlXQpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DYW52YXMyRExheWVyTWFuYWdlclRlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJU
ZXN0LmNwcAkocmV2aXNpb24gMTMwMzkxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DYW52YXMyRExheWVyTWFuYWdlclRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw4IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSA8
Z21vY2svZ21vY2suaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHB1Ymxp
Yy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUaHJlYWQuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiB1c2luZyB0ZXN0aW5nOjpJblNlcXVlbmNlOwpAQCAtNDcsNiArNDks
MTUgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICB2aXJ0dWFsIHNpemVfdCBzdG9yYWdl
QWxsb2NhdGVkRm9yUmVjb3JkaW5nKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIC8vIEJlY2F1
c2UgdGhlIGZha2UgbGF5ZXIgaGFzIG5vIGNhbnZhcyB0byBxdWVyeSwganVzdAorICAgICAgICAv
LyByZXR1cm4gc3RhdHVzIHF1by4gQWxsb2NhdGlvbiBjaGFuZ2VzIHRoYXQgd291bGQgbm9ybWFs
bHkgYmUKKyAgICAgICAgLy8gaW5pdGlhdGVkIGJ5IHRoZSBjYW52YXMgY2FuIGJlIGZha2VkIGJ5
IGludm9raW5nCisgICAgICAgIC8vIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2Vk
IGRpcmVjdGx5IGZyb20gdGhlIHRlc3QgY29kZS4KKyAgICAgICAgcmV0dXJuIG1fYnl0ZXNBbGxv
Y2F0ZWQ7CisgICAgfQorCiAgICAgdm9pZCBmYWtlRnJlZWFibGVCeXRlcyhzaXplX3Qgc2l6ZSkK
ICAgICB7CiAgICAgICAgIG1fZnJlZWFibGVCeXRlcyA9IHNpemU7CkBAIC02NSw2ICs3Niw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpIE9WRVJSSURFCiAgICAgeworICAg
ICAgICBmbHVzaGVkRHJhd0NvbW1hbmRzKCk7CiAgICAgICAgIG1fZmx1c2hDb3VudCsrOwogICAg
IH0KIApAQCAtMTMzLDYgKzE0NSw4MyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEVYUEVDVF9FUSgo
c2l6ZV90KTExLCBsYXllci5ieXRlc0FsbG9jYXRlZCgpKTsgLy8gZmx1c2ggZHJvcHMgdGhlIGxh
eWVyIGZyb20gbWFuYWdlcidzIHRyYWNraW5nIGxpc3QKICAgICAgICAgRVhQRUNUX0ZBTFNFKG1h
bmFnZXIuaXNJbkxpc3QoJmxheWVyKSk7CiAgICAgfQorCisgICAgdm9pZCBkb0RlZmVycmVkRnJh
bWVUZXN0VGFzayhGYWtlQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIsIGJvb2wgc2tpcENvbW1h
bmRzKQorICAgIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpn
ZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAgIGxheWVyLT5jb250ZXh0QWNxdWly
ZWQoKTsKKyAgICAgICAgbGF5ZXItPnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2Vk
KDEpOworICAgICAgICBFWFBFQ1RfVFJVRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90
YXNrT2JzZXJ2ZXJBY3RpdmUpOworICAgICAgICBpZiAoc2tpcENvbW1hbmRzKSB7CisgICAgICAg
ICAgICBsYXllci0+Y29udGV4dEFjcXVpcmVkKCk7CisgICAgICAgICAgICBsYXllci0+c3RvcmFn
ZUFsbG9jYXRlZEZvclJlY29yZGluZ0NoYW5nZWQoMCk7CisgICAgICAgICAgICBsYXllci0+c2tp
cHBlZFBlbmRpbmdEcmF3Q29tbWFuZHMoKTsKKyAgICAgICAgfQorICAgICAgICBXZWJLaXQ6OlBs
YXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZXhpdFJ1bkxvb3AoKTsKKyAgICB9
CisKKyAgICBjbGFzcyBEZWZlcnJlZEZyYW1lVGVzdFRhc2sgOiBwdWJsaWMgV2ViS2l0OjpXZWJU
aHJlYWQ6OlRhc2sgeworICAgIHB1YmxpYzoKKyAgICAgICAgRGVmZXJyZWRGcmFtZVRlc3RUYXNr
KENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdCogdGVzdCwgRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2Uq
IGxheWVyLCBib29sIHNraXBDb21tYW5kcykKKyAgICAgICAgeworICAgICAgICAgICAgbV90ZXN0
ID0gdGVzdDsKKyAgICAgICAgICAgIG1fbGF5ZXIgPSBsYXllcjsKKyAgICAgICAgICAgIG1fc2tp
cENvbW1hbmRzID0gc2tpcENvbW1hbmRzOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2
b2lkIHJ1bigpIE9WRVJSSURFCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdGVzdC0+ZG9EZWZl
cnJlZEZyYW1lVGVzdFRhc2sobV9sYXllciwgbV9za2lwQ29tbWFuZHMpOworICAgICAgICB9Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0KiBtX3Rlc3Q7Cisg
ICAgICAgIEZha2VDYW52YXMyRExheWVyQnJpZGdlKiBtX2xheWVyOworICAgICAgICBib29sIG1f
c2tpcENvbW1hbmRzOworICAgIH07CisKKyAgICB2b2lkIGRlZmVycmVkRnJhbWVUZXN0KCkKKyAg
ICB7CisgICAgICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5pbml0KDEwLCAxMCk7Cisg
ICAgICAgIEZha2VDYW52YXMyRExheWVyQnJpZGdlIGZha2VMYXllcjsKKyAgICAgICAgV2ViS2l0
OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZl
cnJlZEZyYW1lVGVzdFRhc2sodGhpcywgJmZha2VMYXllciwgdHJ1ZSkpOworICAgICAgICBXZWJL
aXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7
CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IGRpZFByb2Nlc3NUYXNrIHdhcyBjYWxsZWQgdXBvbiBj
b21wbGV0aW9uCisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0
KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOworICAgICAgICAvLyBWZXJpZnkgdGhhdCBubyBmbHVz
aCB3YXMgcGVyZm9ybWVkIGJlY2F1c2UgZnJhbWUgaXMgZnJlc2gKKyAgICAgICAgRVhQRUNUX0VR
KDAsIGZha2VMYXllci5tX2ZsdXNoQ291bnQpOworCisgICAgICAgIC8vIFZlcmlmeSB0aGF0IG5v
IGZsdXNoZXMgYXJlIHRyaWdnZXJlZCBhcyBsb25nIGFzIGZyYW1lIGFyZSBmcmVzaAorICAgICAg
ICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2so
bmV3IERlZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCB0cnVlKSk7CisgICAg
ICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1
bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQo
KS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAgIEVYUEVDVF9FUSgwLCBmYWtlTGF5ZXIu
bV9mbHVzaENvdW50KTsKKworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1
cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJhbWVUZXN0VGFzayh0aGlzLCAm
ZmFrZUxheWVyLCB0cnVlKSk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+
Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKENh
bnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAg
IEVYUEVDVF9FUSgwLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAgICAvLyBWZXJp
ZnkgdGhhdCBhIGZsdXNoIGlzIHRyaWdnZXJlZCBldmVyeSB0d28gZnJhbWVzIHdoZW4gdGhleSBh
cmUgc3RhbGUuCisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRo
cmVhZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5
ZXIsIGZhbHNlKSk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVu
dFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKENhbnZhczJE
TGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAgIEVYUEVD
VF9FUSgxLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAgICBXZWJLaXQ6OlBsYXRm
b3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJh
bWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCBmYWxzZSkpOworICAgICAgICBXZWJLaXQ6OlBs
YXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2
ZXJBY3RpdmUpOworICAgICAgICBFWFBFQ1RfRVEoMSwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7
CisKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCkt
PnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVzdFRhc2sodGhpcywgJmZha2VMYXllciwgZmFs
c2UpKTsKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFk
KCktPmVudGVyUnVuTG9vcCgpOworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1h
bmFnZXI6OmdldCgpLm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgRVhQRUNUX0VRKDIs
IGZha2VMYXllci5tX2ZsdXNoQ291bnQpOworCisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1
cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RU
YXNrKHRoaXMsICZmYWtlTGF5ZXIsIGZhbHNlKSk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06
OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKENhbnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2
ZSk7CisgICAgICAgIEVYUEVDVF9FUSgyLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKyAgICB9
CiB9OwogCiBuYW1lc3BhY2UgewpAQCAtMTUyLDUgKzI0MSwxMCBAQCBURVNUX0YoQ2FudmFzMkRM
YXllck1hbmFnZXJUZXN0LCB0ZXN0Rmx1CiAgICAgZmx1c2hFdmljdGlvblRlc3QoKTsKIH0KIAor
VEVTVF9GKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdERlZmVycmVkRnJhbWUpCit7Cisg
ICAgZGVmZXJyZWRGcmFtZVRlc3QoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168067</attachid>
            <date>2012-10-10 13:57:51 -0700</date>
            <delta_ts>2012-10-10 19:05:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97918-20121010165650.patch</filename>
            <type>text/plain</type>
            <size>17103</size>
            <attacher name="Justin Novosad">junov</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDM5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTEwLTAyICBKdXN0aW4g
Tm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIFNtb290
aGVyIGFuaW1hdGlvbiBmb3Igbm9uLVJBRiAyRCBjYW52YXMgYW5pbWF0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTc5MTgKKworICAgICAgICBS
ZXZpZXdlZCBieSBTdGVwaGVuIFdoaXRlLgorCisgICAgICAgIFJlZHVjZXMgYW5pbWF0aW9uIGph
bmsgYnkgcHJldmVudGluZyB0aGUgYWNjdW11bGF0aW9uIG9mIG11bHRpcGxlCisgICAgICAgIGZy
YW1lcyBvZiBiYWNrbG9nIGluIHRoZSBkZWZlcnJlZCBjYW52YXMgcmVuZGVyaW5nIHF1ZXVlLiBX
aGVuIHRoZQorICAgICAgICBhbmltYXRpb24gaXMgbW9yZSB0aGFuIG9uZSBmdWxsIGZyYW1lIGFo
ZWFkIG9mIHRoZSBjb21wb3NpdG9yLCBhbgorICAgICAgICBpbW1lZGlhdGUgZmx1c2ggaXMgdHJp
Z2dlcmVkLiAgVGhpcyB0YWtlcyBpbnRvIGFjY291bnQgb3ZlcmRyYXcKKyAgICAgICAgZWxpbWlu
YXRpb24gYnkgdGhlIHNraXAtb24tY2xlYXIgb3B0aW1pemF0aW9uIHRoYXQgaXMgYnVpbHQtaW4g
dG8KKyAgICAgICAgU2tEZWZlcnJlZENhbnZhcywgdG8gYWxsb3cgbm9uLVJBRiBhbmltYXRpb25z
IHRoYXQgY2xlYXIgdGhlIGNhbnZhcyBhdAorICAgICAgICBlYWNoIGZyYW1lIHRvIHJ1biB3aXRo
b3V0IGFueSByYXRlIGxpbWl0aW5nLiBUaGlzIGNoYW5nZSBhbHNvCisgICAgICAgIGluY2lkZW50
YWxseSBpbXByb3ZlcyBmcmFtZSByYXRlIGluIG1hbnkgY2FzZXMgYnkgcHJvdmlkaW5nIG1vcmUK
KyAgICAgICAgZ3JhbnVsYXIgYmF0Y2hpbmcgb2YgR1BVIEFQSSBjYWxscywgcmVzdWx0aW5nIGlu
IGJldHRlciBwaXBlbGluaW5nCisgICAgICAgIHRocm91Z2ggdGhlIGNvbW1hbmQgYnVmZmVyLgor
CisgICAgICAgIFRlc3Q6IHdlYmtpdF91bml0X3Rlc3QgQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0
LnRlc3REZWZlcnJlZEZyYW1lCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5
ZXJCcmlkZ2U6OkNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
MkRMYXllckJyaWRnZTo6bGltaXRQZW5kaW5nRnJhbWVzKToKKyAgICAgICAgQ2FsbGVkIGF0IHRo
ZSBlbmQgb2YgYSB0YXNrICh1c3VhbGx5IGEgc2NoZWR1bGVkIHNjcmlwdCBhY3Rpb24pIHRoYXQK
KyAgICAgICAgaW52b2tlZCAyZCBjYW52YXMgcmVuZGVyaW5nIGNvbnRleHQgbWV0aG9kcy4gVGhl
IGVuZCBvZiB0aGUgdGFzaworICAgICAgICBtYXJrcyB0aGUgY29tcGxldGlvbiBvZiBhIGRpc3Bs
YXlhYmxlIGZyYW1lLiBUaGlzIG1ldGhvZCB3aWxsIHRyaWdnZXIKKyAgICAgICAgYSBmbHVzaCBp
ZiBpdCBkZXRlY3RzIHRoYXQgdGhlIGxheWVyIGhhcyBwZW5kaW5nIGRyYXcgY29tbWFuZHMgdGhh
dAorICAgICAgICBhcmUgbW9yZSB0aGF0IG9uZSBmcmFtZSBvbGQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJCcmlkZ2U6OmZsdXNoZWREcmF3Q29t
bWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6ZGlkRmx1c2hQ
ZW5kaW5nQ29tbWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRnZTo6
c2tpcHBlZFBlbmRpbmdEcmF3Q29tbWFuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRM
YXllckJyaWRnZTo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzMkRMYXllckJyaWRn
ZTo6Y29udGV4dEFjcXVpcmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXMyRExheWVyQnJpZGdlLmg6CisgICAgICAgIChDYW52YXMyRExheWVyQnJpZGdlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyTWFuYWdl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVyTWFuYWdlcjo6fkNhbnZhczJE
TGF5ZXJNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJNYW5hZ2VyOjp3
aWxsUHJvY2Vzc1Rhc2spOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXMyRExheWVyTWFuYWdlcjo6ZGlkUHJvY2Vzc1Rhc2spOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzMkRMYXllck1hbmFnZXI6OmxheWVyRGlkRHJhdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaDoKKyAgICAgICAgKENhbnZh
czJETGF5ZXJNYW5hZ2VyKToKKwogMjAxMi0xMC0wNCAgVnNldm9sb2QgVmxhc292ICA8dnNldmlr
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTY3JpcHRzIHBhbmVsIHNo
b3VsZCBub3QgYXV0b21hdGljYWxseSBzd2l0Y2ggdG8gc25pcHBldCBldmFsdWF0aW9uIHdoZW4g
cHJldmlvdXNseSBldmFsdWF0ZWQgc25pcHBldCBpcyBlZGl0ZWQuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQnJpZGdlLmNwcAkocmV2aXNpb24gMTMwMzkxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgQ2FudmFzMkRMYXllckJyaWRnZTo6Q2FudmFz
MkRMYXllckJyaWRnZQogICAgICwgbV9jYW52YXMoMCkKICAgICAsIG1fY29udGV4dChjb250ZXh0
KQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9kaWRSZWNvcmREcmF3Q29tbWFu
ZChmYWxzZSkKKyAgICAsIG1fZnJhbWVzUGVuZGluZygwKQogICAgICwgbV9uZXh0KDApCiAgICAg
LCBtX3ByZXYoMCkKIHsKQEAgLTEwNiw2ICsxMDgsMTYgQEAgU2tEZWZlcnJlZENhbnZhcyogQ2Fu
dmFzMkRMYXllckJyaWRnZTo6ZAogICAgIHJldHVybiAwOwogfQogCit2b2lkIENhbnZhczJETGF5
ZXJCcmlkZ2U6OmxpbWl0UGVuZGluZ0ZyYW1lcygpCit7CisgICAgaWYgKG1fZGlkUmVjb3JkRHJh
d0NvbW1hbmQpIHsKKyAgICAgICAgbV9mcmFtZXNQZW5kaW5nKys7CisgICAgICAgIG1fZGlkUmVj
b3JkRHJhd0NvbW1hbmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZnJhbWVzUGVuZGluZyA+IDEp
CisgICAgICAgICAgICBmbHVzaCgpOworICAgIH0KK30KKwogdm9pZCBDYW52YXMyRExheWVyQnJp
ZGdlOjpwcmVwYXJlRm9yRHJhdygpCiB7CiAgICAgQVNTRVJUKGRlZmVycmVkQ2FudmFzKCkpOwpA
QCAtMTIyLDkgKzEzNCwyMCBAQCB2b2lkIENhbnZhczJETGF5ZXJCcmlkZ2U6OnN0b3JhZ2VBbGxv
Y2F0CiAgICAgQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgpLmxheWVyQWxsb2NhdGVkU3RvcmFn
ZUNoYW5nZWQodGhpcywgZGVsdGEpOwogfQogCitzaXplX3QgQ2FudmFzMkRMYXllckJyaWRnZTo6
c3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZygpCit7CisgICAgcmV0dXJuIGRlZmVycmVkQ2Fu
dmFzKCktPnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKTsKK30KKwogdm9pZCBDYW52YXMy
RExheWVyQnJpZGdlOjpmbHVzaGVkRHJhd0NvbW1hbmRzKCkKIHsKLSAgICBzdG9yYWdlQWxsb2Nh
dGVkRm9yUmVjb3JkaW5nQ2hhbmdlZChkZWZlcnJlZENhbnZhcygpLT5zdG9yYWdlQWxsb2NhdGVk
Rm9yUmVjb3JkaW5nKCkpOworICAgIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2Vk
KHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmcoKSk7CisgICAgbV9mcmFtZXNQZW5kaW5nID0g
MDsKK30KKwordm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpza2lwcGVkUGVuZGluZ0RyYXdDb21t
YW5kcygpCit7CisgICAgZmx1c2hlZERyYXdDb21tYW5kcygpOwogfQogCiBzaXplX3QgQ2FudmFz
MkRMYXllckJyaWRnZTo6ZnJlZU1lbW9yeUlmUG9zc2libGUoc2l6ZV90IGJ5dGVzVG9GcmVlKQpA
QCAtMTQwLDcgKzE2Myw4IEBAIHNpemVfdCBDYW52YXMyRExheWVyQnJpZGdlOjpmcmVlTWVtb3J5
SWYKIHZvaWQgQ2FudmFzMkRMYXllckJyaWRnZTo6Zmx1c2goKQogewogICAgIEFTU0VSVChkZWZl
cnJlZENhbnZhcygpKTsKLSAgICBtX2NhbnZhcy0+Zmx1c2goKTsKKyAgICBpZiAoZGVmZXJyZWRD
YW52YXMoKS0+aGFzUGVuZGluZ0NvbW1hbmRzKCkpCisgICAgICAgIG1fY2FudmFzLT5mbHVzaCgp
OwogfQogCiBTa0NhbnZhcyogQ2FudmFzMkRMYXllckJyaWRnZTo6c2tDYW52YXMoU2tEZXZpY2Uq
IGRldmljZSkKQEAgLTE5Niw4ICsyMjAsMTAgQEAgdm9pZCBDYW52YXMyRExheWVyQnJpZGdlOjpj
b250ZXh0QWNxdWlyZQogewogICAgIGlmIChtX2RlZmVycmFsTW9kZSA9PSBOb25EZWZlcnJlZCAm
JiAhbV91c2VEb3VibGVCdWZmZXJpbmcpCiAgICAgICAgIG1fbGF5ZXItPndpbGxNb2RpZnlUZXh0
dXJlKCk7Ci0gICAgZWxzZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpCisgICAgZWxz
ZSBpZiAobV9kZWZlcnJhbE1vZGUgPT0gRGVmZXJyZWQpIHsKICAgICAgICAgQ2FudmFzMkRMYXll
ck1hbmFnZXI6OmdldCgpLmxheWVyRGlkRHJhdyh0aGlzKTsKKyAgICAgICAgbV9kaWRSZWNvcmRE
cmF3Q29tbWFuZCA9IHRydWU7CisgICAgfQogfQogCiB1bnNpZ25lZCBDYW52YXMyRExheWVyQnJp
ZGdlOjpiYWNrQnVmZmVyVGV4dHVyZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckJyaWRn
ZS5oCShyZXZpc2lvbiAxMzAzOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXMyRExheWVyQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEx
ICs2MiwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEcmF3KCkgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFu
Z2VkKHNpemVfdCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGZsdXNoZWREcmF3Q29tbWFu
ZHMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2tpcHBlZFBlbmRpbmdEcmF3Q29tbWFu
ZHMoKSBPVkVSUklERTsKIAogICAgIC8vIE1ldGhvZHMgdXNlZCBieSBDYW52YXMyRExheWVyTWFu
YWdlcgogICAgIHZpcnR1YWwgc2l6ZV90IGZyZWVNZW1vcnlJZlBvc3NpYmxlKHNpemVfdCk7IC8v
IHZpcnR1YWwgZm9yIG1vY2tpbmcKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKTsgLy8gdmlydHVh
bCBmb3IgbW9ja2luZworICAgIHZpcnR1YWwgc2l6ZV90IHN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNv
cmRpbmcoKTsgLy8gdmlydHVhbCBmb3IgZmFraW5nCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVk
KCkgY29uc3Qge3JldHVybiBtX2J5dGVzQWxsb2NhdGVkO30KKyAgICB2b2lkIGxpbWl0UGVuZGlu
Z0ZyYW1lcygpOwogCiAgICAgU2tDYW52YXMqIHNrQ2FudmFzKFNrRGV2aWNlKik7CiAgICAgV2Vi
S2l0OjpXZWJMYXllciogbGF5ZXIoKTsKQEAgLTg3LDYgKzkwLDggQEAgcHJvdGVjdGVkOgogICAg
IE93blB0cjxXZWJLaXQ6OldlYkV4dGVybmFsVGV4dHVyZUxheWVyPiBtX2xheWVyOwogICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIHNpemVfdCBtX2J5dGVzQWxs
b2NhdGVkOworICAgIGJvb2wgbV9kaWRSZWNvcmREcmF3Q29tbWFuZDsKKyAgICBpbnQgbV9mcmFt
ZXNQZW5kaW5nOwogCiAgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8
Q2FudmFzMkRMYXllckJyaWRnZT47CiAgICAgQ2FudmFzMkRMYXllckJyaWRnZSogbV9uZXh0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllck1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTMwMzkx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllck1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMSBAQCBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJCiAKICNpbmNsdWRlICJDYW52YXMyRExh
eWVyTWFuYWdlci5oIgogCisjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCit1c2luZyBXZWJLaXQ6OldlYlRocmVhZDsKKwogbmFtZXNw
YWNlIHsKIGVudW0gewogICAgIERlZmF1bHRNYXhCeXRlc0FsbG9jYXRlZCA9IDY0KjEwMjQqMTAy
NCwKQEAgLTQwLDYgKzQzLDcgQEAgQ2FudmFzMkRMYXllck1hbmFnZXI6OkNhbnZhczJETGF5ZXJN
YW5hZwogICAgIDogbV9ieXRlc0FsbG9jYXRlZCgwKQogICAgICwgbV9tYXhCeXRlc0FsbG9jYXRl
ZChEZWZhdWx0TWF4Qnl0ZXNBbGxvY2F0ZWQpCiAgICAgLCBtX3RhcmdldEJ5dGVzQWxsb2NhdGVk
KERlZmF1bHRUYXJnZXRCeXRlc0FsbG9jYXRlZCkKKyAgICAsIG1fdGFza09ic2VydmVyQWN0aXZl
KGZhbHNlKQogewogfQogCkBAIC00Nyw2ICs1MSw3IEBAIENhbnZhczJETGF5ZXJNYW5hZ2VyOjp+
Q2FudmFzMkRMYXllck1hbmEKIHsKICAgICBBU1NFUlQoIW1fYnl0ZXNBbGxvY2F0ZWQpOwogICAg
IEFTU0VSVCghbV9sYXllckxpc3QuaGVhZCgpKTsKKyAgICBBU1NFUlQoIW1fdGFza09ic2VydmVy
QWN0aXZlKTsKIH0KIAogdm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6aW5pdChzaXplX3QgbWF4
Qnl0ZXNBbGxvY2F0ZWQsIHNpemVfdCB0YXJnZXRCeXRlc0FsbG9jYXRlZCkKQEAgLTYyLDYgKzY3
LDIyIEBAIENhbnZhczJETGF5ZXJNYW5hZ2VyJiBDYW52YXMyRExheWVyTWFuYWcKICAgICByZXR1
cm4gbWFuYWdlcjsKIH0KIAordm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6d2lsbFByb2Nlc3NU
YXNrKCkKK3sKKyAgICAvLyBPYnNlcnZlciBpcyByZWdpc3RlcmVkIGR1cmluZyBhIHRhc2sgYW5k
IGRlcmVnaXN0ZXJlZCB1cG9uIHRhc2sgY29tcGxldGlvbi4KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6ZGlkUHJvY2Vzc1Rhc2soKQor
eworICAgIC8vIENhbGxlZCBhZnRlciB0aGUgc2NyaXB0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQg
ZnJhbWUgaGFzIGJlZW4gcHJvY2Vzc2VkLgorICAgIEFTU0VSVChtX3Rhc2tPYnNlcnZlckFjdGl2
ZSk7CisgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnJl
bW92ZVRhc2tPYnNlcnZlcih0aGlzKTsKKyAgICBtX3Rhc2tPYnNlcnZlckFjdGl2ZSA9IGZhbHNl
OworICAgIGZvciAoQ2FudmFzMkRMYXllckJyaWRnZSogbGF5ZXIgPSBtX2xheWVyTGlzdC5oZWFk
KCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5uZXh0KCkpCisgICAgICAgIGxheWVyLT5saW1pdFBl
bmRpbmdGcmFtZXMoKTsKK30KKwogdm9pZCBDYW52YXMyRExheWVyTWFuYWdlcjo6bGF5ZXJEaWRE
cmF3KENhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyKQogewogICAgIGlmIChpc0luTGlzdChsYXll
cikpIHsKQEAgLTcwLDcgKzkxLDEzIEBAIHZvaWQgQ2FudmFzMkRMYXllck1hbmFnZXI6OmxheWVy
RGlkRHJhdygKICAgICAgICAgICAgIG1fbGF5ZXJMaXN0LnB1c2gobGF5ZXIpOyAvLyBTZXQgYXMg
TVJVCiAgICAgICAgIH0KICAgICB9IGVsc2UKLSAgICAgICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIp
OyAKKyAgICAgICAgYWRkTGF5ZXJUb0xpc3QobGF5ZXIpOworCisgICAgaWYgKCFtX3Rhc2tPYnNl
cnZlckFjdGl2ZSkgeworICAgICAgICBtX3Rhc2tPYnNlcnZlckFjdGl2ZSA9IHRydWU7CisgICAg
ICAgIC8vIFNjaGVkdWxlIGEgY2FsbCB0byBkaWRQcm9jZXNzVGFzaygpIGFmdGVyIGNvbXBsZXRp
b24gb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHRhc2suCisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06
OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5hZGRUYXNrT2JzZXJ2ZXIodGhpcyk7CisgICAg
fQogfQogCiB2b2lkIENhbnZhczJETGF5ZXJNYW5hZ2VyOjphZGRMYXllclRvTGlzdChDYW52YXMy
RExheWVyQnJpZGdlKiBsYXllcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIu
aAkocmV2aXNpb24gMTMwMzkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzMkRMYXllck1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIg
KzI2LDEzIEBAIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQkkKICNkZWZp
bmUgQ2FudmFzMkRMYXllck1hbmFnZXJfaAogCiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckJyaWRn
ZS5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUaHJlYWQuaD4KIAogY2xhc3MgQ2FudmFzMkRMYXll
ck1hbmFnZXJUZXN0OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhbnZhczJETGF5
ZXJNYW5hZ2VyIHsKK2NsYXNzIENhbnZhczJETGF5ZXJNYW5hZ2VyIDogcHVibGljIFdlYktpdDo6
V2ViVGhyZWFkOjpUYXNrT2JzZXJ2ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBDYW52YXMyRExh
eWVyTWFuYWdlciYgZ2V0KCk7CiAgICAgdm9pZCBpbml0KHNpemVfdCBtYXhCeXRlc0FsbG9jYXRl
ZCwgc2l6ZV90IHRhcmdldEJ5dGVzQWxsb2NhdGVkKTsKQEAgLTQ4LDEwICs0OSwxMyBAQCBwcml2
YXRlOgogICAgIGJvb2wgaXNJbkxpc3QoQ2FudmFzMkRMYXllckJyaWRnZSopOwogICAgIHZvaWQg
YWRkTGF5ZXJUb0xpc3QoQ2FudmFzMkRMYXllckJyaWRnZSopOwogICAgIHZvaWQgcmVtb3ZlTGF5
ZXJGcm9tTGlzdChDYW52YXMyRExheWVyQnJpZGdlKik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQ
cm9jZXNzVGFzaygpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRQcm9jZXNzVGFzaygp
IE9WRVJSSURFOwogCiAgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWQ7CiAgICAgc2l6ZV90IG1f
bWF4Qnl0ZXNBbGxvY2F0ZWQ7CiAgICAgc2l6ZV90IG1fdGFyZ2V0Qnl0ZXNBbGxvY2F0ZWQ7Cisg
ICAgYm9vbCBtX3Rhc2tPYnNlcnZlckFjdGl2ZTsKICAgICBEb3VibHlMaW5rZWRMaXN0PENhbnZh
czJETGF5ZXJCcmlkZ2U+IG1fbGF5ZXJMaXN0OwogCiAgICAgZnJpZW5kIGNsYXNzIDo6Q2FudmFz
MkRMYXllck1hbmFnZXJUZXN0OyAvLyBmb3IgdW5pdCB0ZXN0aW5nCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTMwMzkxKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxMi0xMC0wMiAg
SnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVt
XSBTbW9vdGhlciBhbmltYXRpb24gZm9yIG5vbi1SQUYgMkQgY2FudmFzIGFuaW1hdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3OTE4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU3RlcGhlbiBXaGl0ZS4KKworICAgICAgICBOZXcgdW5pdCB0ZXN0
IHRvIHZlcmlmeSB0aGUgYXV0b21hdGljIGZsdXNoaW5nIG9mIGRlZmVycmVkIDJkIGNhbnZhcwor
ICAgICAgICBsYXllcnMgd2hlbiBzY3JpcHRlZCBhbmltYXRpb25zIGFyZSBtb3JlIHRoYW4gb25l
IGZ1bGwgZnJhbWUgYWhlYWQgCisgICAgICAgIG9mIHRoZSBjb21wb3NpdG9yLiBBbHNvIHZlcmlm
aWVzIHRoYXQgYXV0b21hdGljIGZsdXNoaW5nIGRvZXMgbm90CisgICAgICAgIGtpY2staW4gd2hl
biB0aGUgc2tpcCBvbiBjbGVhciBvcHRpbWl6YXRpb24gZmlyZXMKKworICAgICAgICAqIERFUFM6
CisgICAgICAgICogdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcDoKKyAgICAgICAg
KEZha2VDYW52YXMyRExheWVyQnJpZGdlOjpmYWtlU2tpcFBlbmRpbmdEcmF3Q29tbWFuZHMpOgor
ICAgICAgICBUbyBmYWtlIHRoZSBza2lwIG9uIGNsZWFyIG9wdGltaXphdGlvbgorICAgICAgICAo
RmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UpOgorICAgICAgICAoQ2FudmFzMkRMYXllck1hbmFnZXJU
ZXN0KToKKyAgICAgICAgKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdDo6ZG9EZWZlcnJlZEZyYW1l
VGVzdFRhc2spOgorICAgICAgICBNZXRob2QgdGhhdCBzaW11bGF0ZXMgYSBqYXZhc2NyaXB0IHNj
aGVkdWxlZCBhY3Rpb24gdGhhdCBkcmF3cyB0bworICAgICAgICBhIDJEIGNhbnZhcyBsYXllcgor
ICAgICAgICAoRGVmZXJyZWRGcmFtZVRlc3RUYXNrKToKKyAgICAgICAgVGFzayBvYmplY3QgdG8g
c2ltdWxhdGUgYSBzY2hlZHVsZWQgYWN0aW9uLiBUaGlzIGlzIHNvIHRoZSB1bml0CisgICAgICAg
IHRlc3QgY2FuIGNvdmVyIHRoZSBUYXNrT2JzZXJ2ZXIgYmVoYXZpb3Igb2YgQ2FudmFzMkRMYXll
ck1hbmFnZXIuCisgICAgICAgIChDYW52YXMyRExheWVyTWFuYWdlclRlc3Q6OkRlZmVycmVkRnJh
bWVUZXN0VGFzazo6RGVmZXJyZWRGcmFtZVRlc3RUYXNrKToKKyAgICAgICAgKENhbnZhczJETGF5
ZXJNYW5hZ2VyVGVzdDo6ZGVmZXJyZWRGcmFtZVRlc3QpOgorICAgICAgICBUaGUgdW5pdCB0ZXN0
IGltcGxlbWVudGF0aW9uLCB3aGljaCB1c2VzIHRoZSBXZWJUaHJlYWQgcnVuIGxvb3AgdG8KKyAg
ICAgICAgcG9zdCB0YXNrcyB0aGF0IHRvdWNoIHRoZSBjYW52YXMgbGF5ZXIuCisKIDIwMTItMTAt
MDUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gRW5hYmxlIHRoZSBtdWx0aXBsZSBmaWVsZHMgVUkgZm9yIGlucHV0W3R5cGU9ZGF0ZV0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NhbnZhczJE
TGF5ZXJNYW5hZ2VyVGVzdC5jcHAJKHJldmlzaW9uIDEzMDM5MSkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ2FudmFzMkRMYXllck1hbmFnZXJUZXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5o
IgogI2luY2x1ZGUgPGdtb2NrL2dtb2NrLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNp
bmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVGhyZWFkLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgdGVzdGluZzo6SW5TZXF1ZW5jZTsK
QEAgLTQ3LDYgKzQ5LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgdmlydHVhbCBz
aXplX3Qgc3RvcmFnZUFsbG9jYXRlZEZvclJlY29yZGluZygpIE9WRVJSSURFCisgICAgeworICAg
ICAgICAvLyBCZWNhdXNlIHRoZSBmYWtlIGxheWVyIGhhcyBubyBjYW52YXMgdG8gcXVlcnksIGp1
c3QKKyAgICAgICAgLy8gcmV0dXJuIHN0YXR1cyBxdW8uIEFsbG9jYXRpb24gY2hhbmdlcyB0aGF0
IHdvdWxkIG5vcm1hbGx5IGJlCisgICAgICAgIC8vIGluaXRpYXRlZCBieSB0aGUgY2FudmFzIGNh
biBiZSBmYWtlZCBieSBpbnZva2luZworICAgICAgICAvLyBzdG9yYWdlQWxsb2NhdGVkRm9yUmVj
b3JkaW5nQ2hhbmdlZCBkaXJlY3RseSBmcm9tIHRoZSB0ZXN0IGNvZGUuCisgICAgICAgIHJldHVy
biBtX2J5dGVzQWxsb2NhdGVkOworICAgIH0KKwogICAgIHZvaWQgZmFrZUZyZWVhYmxlQnl0ZXMo
c2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2ZyZWVhYmxlQnl0ZXMgPSBzaXplOwpAQCAt
NjUsNiArNzYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2goKSBPVkVSUklE
RQogICAgIHsKKyAgICAgICAgZmx1c2hlZERyYXdDb21tYW5kcygpOwogICAgICAgICBtX2ZsdXNo
Q291bnQrKzsKICAgICB9CiAKQEAgLTEzMyw2ICsxNDUsODMgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBFWFBFQ1RfRVEoKHNpemVfdCkxMSwgbGF5ZXIuYnl0ZXNBbGxvY2F0ZWQoKSk7IC8vIGZsdXNo
IGRyb3BzIHRoZSBsYXllciBmcm9tIG1hbmFnZXIncyB0cmFja2luZyBsaXN0CiAgICAgICAgIEVY
UEVDVF9GQUxTRShtYW5hZ2VyLmlzSW5MaXN0KCZsYXllcikpOwogICAgIH0KKworICAgIHZvaWQg
ZG9EZWZlcnJlZEZyYW1lVGVzdFRhc2soRmFrZUNhbnZhczJETGF5ZXJCcmlkZ2UqIGxheWVyLCBi
b29sIHNraXBDb21tYW5kcykKKyAgICB7CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExh
eWVyTWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOworICAgICAgICBsYXllci0+
Y29udGV4dEFjcXVpcmVkKCk7CisgICAgICAgIGxheWVyLT5zdG9yYWdlQWxsb2NhdGVkRm9yUmVj
b3JkaW5nQ2hhbmdlZCgxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoQ2FudmFzMkRMYXllck1hbmFn
ZXI6OmdldCgpLm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgaWYgKHNraXBDb21tYW5k
cykgeworICAgICAgICAgICAgbGF5ZXItPmNvbnRleHRBY3F1aXJlZCgpOworICAgICAgICAgICAg
bGF5ZXItPnN0b3JhZ2VBbGxvY2F0ZWRGb3JSZWNvcmRpbmdDaGFuZ2VkKDApOworICAgICAgICAg
ICAgbGF5ZXItPnNraXBwZWRQZW5kaW5nRHJhd0NvbW1hbmRzKCk7CisgICAgICAgIH0KKyAgICAg
ICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmV4aXRSdW5M
b29wKCk7CisgICAgfQorCisgICAgY2xhc3MgRGVmZXJyZWRGcmFtZVRlc3RUYXNrIDogcHVibGlj
IFdlYktpdDo6V2ViVGhyZWFkOjpUYXNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIERlZmVycmVk
RnJhbWVUZXN0VGFzayhDYW52YXMyRExheWVyTWFuYWdlclRlc3QqIHRlc3QsIEZha2VDYW52YXMy
RExheWVyQnJpZGdlKiBsYXllciwgYm9vbCBza2lwQ29tbWFuZHMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fdGVzdCA9IHRlc3Q7CisgICAgICAgICAgICBtX2xheWVyID0gbGF5ZXI7CisgICAg
ICAgICAgICBtX3NraXBDb21tYW5kcyA9IHNraXBDb21tYW5kczsKKyAgICAgICAgfQorCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBydW4oKSBPVkVSUklERQorICAgICAgICB7CisgICAgICAgICAgICBt
X3Rlc3QtPmRvRGVmZXJyZWRGcmFtZVRlc3RUYXNrKG1fbGF5ZXIsIG1fc2tpcENvbW1hbmRzKTsK
KyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIENhbnZhczJETGF5ZXJNYW5hZ2VyVGVz
dCogbV90ZXN0OworICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSogbV9sYXllcjsKKyAg
ICAgICAgYm9vbCBtX3NraXBDb21tYW5kczsKKyAgICB9OworCisgICAgdm9pZCBkZWZlcnJlZEZy
YW1lVGVzdCgpCisgICAgeworICAgICAgICBDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkuaW5p
dCgxMCwgMTApOworICAgICAgICBGYWtlQ2FudmFzMkRMYXllckJyaWRnZSBmYWtlTGF5ZXI7Cisg
ICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3VycmVudFRocmVhZCgpLT5wb3N0
VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZmYWtlTGF5ZXIsIHRydWUpKTsK
KyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVu
dGVyUnVuTG9vcCgpOworICAgICAgICAvLyBWZXJpZnkgdGhhdCBkaWRQcm9jZXNzVGFzayB3YXMg
Y2FsbGVkIHVwb24gY29tcGxldGlvbgorICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXll
ck1hbmFnZXI6OmdldCgpLm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgLy8gVmVyaWZ5
IHRoYXQgbm8gZmx1c2ggd2FzIHBlcmZvcm1lZCBiZWNhdXNlIGZyYW1lIGlzIGZyZXNoCisgICAg
ICAgIEVYUEVDVF9FUSgwLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAgICAvLyBW
ZXJpZnkgdGhhdCBubyBmbHVzaGVzIGFyZSB0cmlnZ2VyZWQgYXMgbG9uZyBhcyBmcmFtZSBhcmUg
ZnJlc2gKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFk
KCktPnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVzdFRhc2sodGhpcywgJmZha2VMYXllciwg
dHJ1ZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJl
YWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVy
TWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOworICAgICAgICBFWFBFQ1RfRVEo
MCwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6
Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5ldyBEZWZlcnJlZEZyYW1lVGVz
dFRhc2sodGhpcywgJmZha2VMYXllciwgdHJ1ZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3Jt
OjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3Rp
dmUpOworICAgICAgICBFWFBFQ1RfRVEoMCwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAg
ICAgICAgLy8gVmVyaWZ5IHRoYXQgYSBmbHVzaCBpcyB0cmlnZ2VyZWQgZXZlcnkgdHdvIGZyYW1l
cyB3aGVuIHRoZXkgYXJlIHN0YWxlLgorICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJyZW50
KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVycmVkRnJhbWVUZXN0VGFzayh0
aGlzLCAmZmFrZUxheWVyLCBmYWxzZSkpOworICAgICAgICBXZWJLaXQ6OlBsYXRmb3JtOjpjdXJy
ZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90YXNrT2JzZXJ2ZXJBY3RpdmUpOwor
ICAgICAgICBFWFBFQ1RfRVEoMSwgZmFrZUxheWVyLm1fZmx1c2hDb3VudCk7CisKKyAgICAgICAg
V2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RUYXNrKG5l
dyBEZWZlcnJlZEZyYW1lVGVzdFRhc2sodGhpcywgJmZha2VMYXllciwgZmFsc2UpKTsKKyAgICAg
ICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVudGVyUnVu
TG9vcCgpOworICAgICAgICBFWFBFQ1RfRkFMU0UoQ2FudmFzMkRMYXllck1hbmFnZXI6OmdldCgp
Lm1fdGFza09ic2VydmVyQWN0aXZlKTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIGZha2VMYXllci5t
X2ZsdXNoQ291bnQpOworCisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3Vy
cmVudFRocmVhZCgpLT5wb3N0VGFzayhuZXcgRGVmZXJyZWRGcmFtZVRlc3RUYXNrKHRoaXMsICZm
YWtlTGF5ZXIsIGZhbHNlKSk7CisgICAgICAgIFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+
Y3VycmVudFRocmVhZCgpLT5lbnRlclJ1bkxvb3AoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKENh
bnZhczJETGF5ZXJNYW5hZ2VyOjpnZXQoKS5tX3Rhc2tPYnNlcnZlckFjdGl2ZSk7CisgICAgICAg
IEVYUEVDVF9FUSgyLCBmYWtlTGF5ZXIubV9mbHVzaENvdW50KTsKKworICAgICAgICBXZWJLaXQ6
OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+cG9zdFRhc2sobmV3IERlZmVy
cmVkRnJhbWVUZXN0VGFzayh0aGlzLCAmZmFrZUxheWVyLCBmYWxzZSkpOworICAgICAgICBXZWJL
aXQ6OlBsYXRmb3JtOjpjdXJyZW50KCktPmN1cnJlbnRUaHJlYWQoKS0+ZW50ZXJSdW5Mb29wKCk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShDYW52YXMyRExheWVyTWFuYWdlcjo6Z2V0KCkubV90YXNr
T2JzZXJ2ZXJBY3RpdmUpOworICAgICAgICBFWFBFQ1RfRVEoMiwgZmFrZUxheWVyLm1fZmx1c2hD
b3VudCk7CisgICAgfQogfTsKIAogbmFtZXNwYWNlIHsKQEAgLTE1Miw1ICsyNDEsMTAgQEAgVEVT
VF9GKENhbnZhczJETGF5ZXJNYW5hZ2VyVGVzdCwgdGVzdEZsdQogICAgIGZsdXNoRXZpY3Rpb25U
ZXN0KCk7CiB9CiAKK1RFU1RfRihDYW52YXMyRExheWVyTWFuYWdlclRlc3QsIHRlc3REZWZlcnJl
ZEZyYW1lKQoreworICAgIGRlZmVycmVkRnJhbWVUZXN0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>