<?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>63189</bug_id>
          
          <creation_ts>2011-06-22 14:56:28 -0700</creation_ts>
          <short_desc>Fix latch deadlock when GPU process crashes or context is lost</short_desc>
          <delta_ts>2011-06-23 17:12:08 -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="John Bates">jbates</reporter>
          <assigned_to name="John Bates">jbates</assigned_to>
          <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>425637</commentid>
    <comment_count>0</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-06-22 14:56:28 -0700</bug_when>
    <thetext>Fix latch deadlock when GPU process crashes or context is lost</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425654</commentid>
    <comment_count>1</comment_count>
      <attachid>98248</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-06-22 15:15:21 -0700</bug_when>
    <thetext>Created attachment 98248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425658</commentid>
    <comment_count>2</comment_count>
    <who name="John Bates">jbates</who>
    <bug_when>2011-06-22 15:21:28 -0700</bug_when>
    <thetext>This patch solves the deadlock problem with latches when the GPU process crashes or in some cases when a context is lost because of errors.

This does not recreate the failed child contexts, because that is already done by WebGLRenderingContext when the application supports it.

This also does not reparent the child contexts to the new compositor context when the LayerRendererChromium is recreated. A separate patch needs to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425676</commentid>
    <comment_count>3</comment_count>
      <attachid>98248</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-22 15:40:45 -0700</bug_when>
    <thetext>Comment on attachment 98248
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +
&gt; +        Test: open particles WebGL demo in chrome, kill GPU process from Task Manager; observe no deadlock.
&gt; +

you need at least a little bit of explanation here of what&apos;s going on

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-379
&gt; -
&gt; -    // After updateCompositorResources, set/wait latches for all child
&gt; -    // contexts. This will prevent the compositor from using any of the child
&gt; -    // parent textures while WebGL commands are executing from javascript *and*
&gt; -    // while the final parent texture is being blit&apos;d. copyTexImage2D
&gt; -    // uses the parent texture as a temporary resolve buffer, so that&apos;s why the
&gt; -    // waitLatch is below, to block the compositor from using the parent texture
&gt; -    // until the next WebGL SwapBuffers (or copyTextureToParentTexture for
&gt; -    // Canvas2D).
&gt; -    if (hardwareCompositing() &amp;&amp; m_contextSupportsLatch) {
&gt; -        m_childContextsWereCopied = true;
&gt; -        // For each child context:
&gt; -        //   glSetLatch(Offscreen-&gt;Compositor);
&gt; -        //   glWaitLatch(Compositor-&gt;Offscreen);
&gt; -        ChildContextMap::iterator i = m_childContexts.begin();
&gt; -        for (; i != m_childContexts.end(); ++i) {
&gt; -            Extensions3DChromium* ext = static_cast&lt;Extensions3DChromium*&gt;(i-&gt;first-&gt;getExtensions());
&gt; -            GC3Duint childToParentLatchId, parentToChildLatchId;
&gt; -            ext-&gt;getParentToChildLatchCHROMIUM(&amp;parentToChildLatchId);
&gt; -            ext-&gt;getChildToParentLatchCHROMIUM(&amp;childToParentLatchId);
&gt; -            ext-&gt;setLatchCHROMIUM(childToParentLatchId);
&gt; -            ext-&gt;waitLatchCHROMIUM(parentToChildLatchId);
&gt; -        }
&gt; -    }

why&apos;s this going away?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425792</commentid>
    <comment_count>4</comment_count>
      <attachid>98248</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-06-22 17:51:08 -0700</bug_when>
    <thetext>Comment on attachment 98248
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +
&gt; 
&gt; you need at least a little bit of explanation here of what&apos;s going on

Will do.

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-379
&gt;&gt; -    }
&gt; 
&gt; why&apos;s this going away?

It turned out to be premature to try and plan ahead for the threaded compositor with lots of nasty comments. For now, it&apos;s much safer to do all latching in one place (above in updateAndDrawLayers). It&apos;s also best to do the corresponding set before the wait, so consolidating the latching code above allows us to do that. When the threaded compositor comes online, we need to redo the latching code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425815</commentid>
    <comment_count>5</comment_count>
      <attachid>98248</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-06-22 18:11:01 -0700</bug_when>
    <thetext>Comment on attachment 98248
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt;&gt; +
&gt;&gt; 
&gt;&gt; you need at least a little bit of explanation here of what&apos;s going on
&gt; 
&gt; Will do.

This is what I&apos;m adding:
The main bug fix is to only set/wait latches if the child context has no errors.
Additionally, the LayerChromium classes needed to be modified to not continue drawing when their corresponding contexts have errors. Otherwise, they would draw with invalid texture ids.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425856</commentid>
    <comment_count>6</comment_count>
      <attachid>98248</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-22 18:45:00 -0700</bug_when>
    <thetext>Comment on attachment 98248
Patch

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

The logic changes look fine but there&apos;s an important documentation update that needs to be incorporated into this patch.

&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:68
&gt; +            &amp;&amp; (context-&gt;getExtensions()-&gt;getGraphicsResetStatusARB() == GraphicsContext3D::NO_ERROR));

I made a mistake when originally adding getGraphicsResetStatusARB to Extensions3D.h. In the real OpenGL API, this function only returns the error state once; subsequent calls generally return NO_ERROR. In WebKit, this entry point&apos;s state needs to be sticky; it needs to continue to return the error state essentially forever, because context recovery is implemented by throwing away the GraphicsContext3D instance and creating a new one. Please update the comments in Extensions3D.h indicating that any error returned needs to be persistent for the lifetime of the GraphicsContext3D object, unlike the behavior of the actual GL_ARB_robustness extension.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426571</commentid>
    <comment_count>7</comment_count>
      <attachid>98423</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-06-23 15:59:38 -0700</bug_when>
    <thetext>Created attachment 98423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426574</commentid>
    <comment_count>8</comment_count>
      <attachid>98248</attachid>
    <who name="John Bates">jbates</who>
    <bug_when>2011-06-23 16:00:53 -0700</bug_when>
    <thetext>Comment on attachment 98248
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/Canvas2DLayerChromium.cpp:68
&gt;&gt; +            &amp;&amp; (context-&gt;getExtensions()-&gt;getGraphicsResetStatusARB() == GraphicsContext3D::NO_ERROR));
&gt; 
&gt; I made a mistake when originally adding getGraphicsResetStatusARB to Extensions3D.h. In the real OpenGL API, this function only returns the error state once; subsequent calls generally return NO_ERROR. In WebKit, this entry point&apos;s state needs to be sticky; it needs to continue to return the error state essentially forever, because context recovery is implemented by throwing away the GraphicsContext3D instance and creating a new one. Please update the comments in Extensions3D.h indicating that any error returned needs to be persistent for the lifetime of the GraphicsContext3D object, unlike the behavior of the actual GL_ARB_robustness extension.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426576</commentid>
    <comment_count>9</comment_count>
      <attachid>98423</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-06-23 16:01:44 -0700</bug_when>
    <thetext>Comment on attachment 98423
Patch

Seems good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426634</commentid>
    <comment_count>10</comment_count>
      <attachid>98423</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-23 17:01:00 -0700</bug_when>
    <thetext>Comment on attachment 98423
Patch

As we&apos;ve discussed offline, I have some remaining concerns about the asynchronous nature of the loss of contexts and whether a synchronous check before issuing the latch command will really be sufficient. However this seems to be a step forward. cq=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426643</commentid>
    <comment_count>11</comment_count>
      <attachid>98423</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-23 17:12:04 -0700</bug_when>
    <thetext>Comment on attachment 98423
Patch

Clearing flags on attachment: 98423

Committed r89635: &lt;http://trac.webkit.org/changeset/89635&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426644</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-23 17:12:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98248</attachid>
            <date>2011-06-22 15:15:21 -0700</date>
            <delta_ts>2011-06-23 16:00:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63189-20110622151519.patch</filename>
            <type>text/plain</type>
            <size>15274</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkyMzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZjU2YmY0NTVlMTJlZDEw
ZTEyNDk1MDIyZDc4NzAxMGQ1MjlkZTNmLi4yZGEyYTgwN2RhMjI4OTRlMjg4YjQ4MjBhODg2MGY0
OGNjZGJkZjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDYtMjIgIEpvaG4g
QmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGaXggbGF0Y2ggZGVhZGxvY2sgd2hlbiBHUFUgcHJvY2VzcyBj
cmFzaGVzIG9yIGNvbnRleHQgaXMgbG9zdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjMxODkKKworICAgICAgICBUZXN0OiBvcGVuIHBhcnRpY2xlcyBX
ZWJHTCBkZW1vIGluIGNocm9tZSwga2lsbCBHUFUgcHJvY2VzcyBmcm9tIFRhc2sgTWFuYWdlcjsg
b2JzZXJ2ZSBubyBkZWFkbG9jay4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0NvbXBvc2l0b3JDb250ZXh0TG9zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06
OnNldENvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVy
Q2hyb21pdW06OmRyYXdzQ29udGVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6CisKIDIwMTEtMDYtMTkgIE1PUklUQSBIYWpp
bWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBH
bGF6a292LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOTI3NTk1
MDQ4MWY3MTYxMzFiYTgyZTFhNGU2MDQ1YmM0MWE4ODE2MS4uMDFhNTJjOTI1NTAyNjEzMDE5Mzkz
NzI2NTI1MmE2M2Q0MTk5NzJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
Y3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzMkRMYXllckNocm9taXVtLmgi
CiAKICNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogCkBAIC01OSw5ICs2MCwxNyBAQCBDYW52YXMyRExheWVyQ2hy
b21pdW06On5DYW52YXMyRExheWVyQ2hyb21pdW0oKQogICAgICAgICBsYXllclJlbmRlcmVyKCkt
PnJlbW92ZUNoaWxkQ29udGV4dChtX2RyYXdpbmdCdWZmZXItPmdyYXBoaWNzQ29udGV4dDNEKCku
Z2V0KCkpOwogfQogCitib29sIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkg
Y29uc3QKK3sKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDsKKyAgICByZXR1cm4gKG1f
ZHJhd2luZ0J1ZmZlcgorICAgICAgICAgICAgJiYgKGNvbnRleHQgPSBtX2RyYXdpbmdCdWZmZXIt
PmdyYXBoaWNzQ29udGV4dDNEKCkuZ2V0KCkpCisgICAgICAgICAgICAmJiAoY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKSk7Cit9CisKIHZvaWQgQ2FudmFzMkRMYXllckNocm9taXVtOjp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKLSAgICBpZiAoIW1fY29udGVudHNEaXJ0eSB8fCAh
bV9kcmF3aW5nQnVmZmVyKQorICAgIGlmICghbV9jb250ZW50c0RpcnR5IHx8ICFkcmF3c0NvbnRl
bnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX3RleHR1cmVDaGFuZ2VkKSB7IC8vIFdl
IGhhdmUgdG8gZ2VuZXJhdGUgYSBuZXcgYmFja2luZyB0ZXh0dXJlLgogICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5oCmluZGV4IDQyMjRhYjFkYjkwNjVmYmVhZWQ1MGIwNzVjMjQy
ZDUzNGU0Njk3NTkuLmRkZWVlZjViMTE3MTlhN2M0YjQ4NDBjMTAyM2VhNTZiN2Q5MGMyMjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZh
czJETGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNz
IENhbnZhczJETGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBDYW52YXNMYXllckNocm9taXVtIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0
ZShEcmF3aW5nQnVmZmVyKiwgR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CiAgICAgdmly
dHVhbCB+Q2FudmFzMkRMYXllckNocm9taXVtKCk7Ci0gICAgdmlydHVhbCBib29sIGRyYXdzQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250
ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
KTsKIAogICAgIHZvaWQgc2V0VGV4dHVyZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCmluZGV4IGQzM2JmODQ3ZmUwYTAyNWU4YmI0ZTMyNzkzODUzODFmYjUz
Nzg3ZjIuLjJjMzk0NGVmNGQ4ZTAyNjdmYjljMzA0YjU3YWY3ZDczZTAxNjhjMzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtMTIwLDcgKzEyMCw2IEBAIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRlCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQoMCkKICAg
ICAsIG1fY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQp
Ci0gICAgLCBtX2NoaWxkQ29udGV4dHNXZXJlQ29waWVkKGZhbHNlKQogICAgICwgbV9jb250ZXh0
U3VwcG9ydHNMYXRjaChmYWxzZSkKICAgICAsIG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9k
ZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQpAQCAtMjQ1LDIyICsyNDQsMTkgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQogICAgICAgICAvLyB0aHJlYWQg
Y2FuIGV4ZWN1dGUgV2ViR0wgY2FsbHMgb24gdGhlIGNoaWxkIGNvbnRleHQgYXQgYW55IHRpbWUs
CiAgICAgICAgIC8vIHBvdGVudGlhbGx5IGNsb2JiZXJpbmcgdGhlIHBhcmVudCB0ZXh0dXJlIHRo
YXQgaXMgYmVpbmcgcmVuZGVyZXJlZAogICAgICAgICAvLyBieSB0aGUgY29tcG9zaXRvciB0aHJl
YWQuCi0gICAgICAgIGlmIChtX2NoaWxkQ29udGV4dHNXZXJlQ29waWVkKSB7Ci0gICAgICAgICAg
ICBFeHRlbnNpb25zM0RDaHJvbWl1bSogcGFyZW50RXh0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9u
czNEQ2hyb21pdW0qPihtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgICAgICAgICAv
LyBGb3IgZWFjaCBjaGlsZCBjb250ZXh0OgotICAgICAgICAgICAgLy8gICBnbFdhaXRMYXRjaChP
ZmZzY3JlZW4tPkNvbXBvc2l0b3IpOwotICAgICAgICAgICAgQ2hpbGRDb250ZXh0TWFwOjppdGVy
YXRvciBpID0gbV9jaGlsZENvbnRleHRzLmJlZ2luKCk7Ci0gICAgICAgICAgICBmb3IgKDsgaSAh
PSBtX2NoaWxkQ29udGV4dHMuZW5kKCk7ICsraSkgewotICAgICAgICAgICAgICAgIEV4dGVuc2lv
bnMzRENocm9taXVtKiBjaGlsZEV4dCA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVt
Kj4oaS0+Zmlyc3QtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgICAgICAgICAgICAgR0MzRHVpbnQg
bGF0Y2hJZDsKLSAgICAgICAgICAgICAgICBjaGlsZEV4dC0+Z2V0Q2hpbGRUb1BhcmVudExhdGNo
Q0hST01JVU0oJmxhdGNoSWQpOwotICAgICAgICAgICAgICAgIHBhcmVudEV4dC0+d2FpdExhdGNo
Q0hST01JVU0obGF0Y2hJZCk7CisgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBwYXJlbnRF
eHQgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpKTsKKyAgICAgICAgLy8gRm9yIGVhY2ggY2hpbGQgY29udGV4dDoKKyAgICAgICAg
Ly8gICBnbFdhaXRMYXRjaChPZmZzY3JlZW4tPkNvbXBvc2l0b3IpOworICAgICAgICBDaGlsZENv
bnRleHRNYXA6Oml0ZXJhdG9yIGkgPSBtX2NoaWxkQ29udGV4dHMuYmVnaW4oKTsKKyAgICAgICAg
Zm9yICg7IGkgIT0gbV9jaGlsZENvbnRleHRzLmVuZCgpOyArK2kpIHsKKyAgICAgICAgICAgIEV4
dGVuc2lvbnMzRENocm9taXVtKiBjaGlsZEV4dCA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENo
cm9taXVtKj4oaS0+Zmlyc3QtPmdldEV4dGVuc2lvbnMoKSk7CisgICAgICAgICAgICBpZiAoY2hp
bGRFeHQtPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICBHQzNEdWludCBjaGlsZFRvUGFyZW50TGF0Y2hJ
ZDsKKyAgICAgICAgICAgICAgICBjaGlsZEV4dC0+Z2V0Q2hpbGRUb1BhcmVudExhdGNoQ0hST01J
VU0oJmNoaWxkVG9QYXJlbnRMYXRjaElkKTsKKyAgICAgICAgICAgICAgICBjaGlsZEV4dC0+c2V0
TGF0Y2hDSFJPTUlVTShjaGlsZFRvUGFyZW50TGF0Y2hJZCk7CisgICAgICAgICAgICAgICAgcGFy
ZW50RXh0LT53YWl0TGF0Y2hDSFJPTUlVTShjaGlsZFRvUGFyZW50TGF0Y2hJZCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgLy8gUmVzZXQgdG8gZmFsc2UgdG8gaW5kaWNhdGUg
dGhhdCB3ZSBoYXZlIGNvbnN1bWVkIHRoZSBkaXJ0eSBjaGlsZAotICAgICAgICAvLyBjb250ZXh0
cycgcGFyZW50IHRleHR1cmVzLiAoVGhpcyBpcyBvbmx5IHVzZWZ1bCB3aGVuIHRoZSBjb21wb3Np
dG9yCi0gICAgICAgIC8vIGlzIG11bHRpdGhyZWFkZWQuKQotICAgICAgICBtX2NoaWxkQ29udGV4
dHNXZXJlQ29waWVkID0gZmFsc2U7CiAgICAgfQogCiAgICAgZHJhd0xheWVycyhyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKQEAgLTI3NSw5ICsyNzEsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQogICAgICAgICBDaGlsZENvbnRleHRNYXA6Oml0
ZXJhdG9yIGkgPSBtX2NoaWxkQ29udGV4dHMuYmVnaW4oKTsKICAgICAgICAgZm9yICg7IGkgIT0g
bV9jaGlsZENvbnRleHRzLmVuZCgpOyArK2kpIHsKICAgICAgICAgICAgIEV4dGVuc2lvbnMzRENo
cm9taXVtKiBjaGlsZEV4dCA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oaS0+
Zmlyc3QtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgICAgICAgICBHQzNEdWludCBsYXRjaElkOwot
ICAgICAgICAgICAgY2hpbGRFeHQtPmdldFBhcmVudFRvQ2hpbGRMYXRjaENIUk9NSVVNKCZsYXRj
aElkKTsKLSAgICAgICAgICAgIHBhcmVudEV4dC0+c2V0TGF0Y2hDSFJPTUlVTShsYXRjaElkKTsK
KyAgICAgICAgICAgIGlmIChjaGlsZEV4dC0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICAgICAgICAgIEdDM0R1aW50
IHBhcmVudFRvQ2hpbGRMYXRjaElkOworICAgICAgICAgICAgICAgIGNoaWxkRXh0LT5nZXRQYXJl
bnRUb0NoaWxkTGF0Y2hDSFJPTUlVTSgmcGFyZW50VG9DaGlsZExhdGNoSWQpOworICAgICAgICAg
ICAgICAgIHBhcmVudEV4dC0+c2V0TGF0Y2hDSFJPTUlVTShwYXJlbnRUb0NoaWxkTGF0Y2hJZCk7
CisgICAgICAgICAgICAgICAgY2hpbGRFeHQtPndhaXRMYXRjaENIUk9NSVVNKHBhcmVudFRvQ2hp
bGRMYXRjaElkKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMzMwLDUz
ICszMjksMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyhMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCiAgICAgc19pblBhaW50TGF5ZXJDb250ZW50
cyA9IGZhbHNlOwogI2VuZGlmCiAKLSAgICAvLyBGSVhNRTogQmVmb3JlIHVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMsIHdoZW4gdGhlIGNvbXBvc2l0b3IgcnVucyBpbgotICAgIC8vIGl0cyBvd24g
dGhyZWFkLCBhbmQgd2hlbiB0aGUgY29weVRleEltYWdlMkQgYnVnIGlzIGZpeGVkLCBpbnNlcnQK
LSAgICAvLyBhIGdsV2FpdExhdGNoKENvbXBvc2l0b3ItPk9mZnNjcmVlbikgb24gYWxsIGNoaWxk
IGNvbnRleHRzIGhlcmUgaW5zdGVhZAotICAgIC8vIG9mIGFmdGVyIHVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMuCi0gICAgLy8gQWxzbyB1bmNvbW1lbnQgdGhlIGdsU2V0TGF0Y2goQ29tcG9zaXRv
ci0+T2Zmc2NyZWVuKSBjb2RlIGluIGFkZENoaWxkQ29udGV4dC4KLS8vICBpZiAoaGFyZHdhcmVD
b21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzTGF0Y2gpIHsKLS8vICAgICAgLy8gRm9y
IGVhY2ggY2hpbGQgY29udGV4dDoKLS8vICAgICAgLy8gICBnbFdhaXRMYXRjaChDb21wb3NpdG9y
LT5PZmZzY3JlZW4pOwotLy8gICAgICBDaGlsZENvbnRleHRNYXA6Oml0ZXJhdG9yIGkgPSBtX2No
aWxkQ29udGV4dHMuYmVnaW4oKTsKLS8vICAgICAgZm9yICg7IGkgIT0gbV9jaGlsZENvbnRleHRz
LmVuZCgpOyArK2kpIHsKLS8vICAgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHQgPSBz
dGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGktPmZpcnN0LT5nZXRFeHRlbnNpb25z
KCkpOwotLy8gICAgICAgICAgR0MzRHVpbnQgY2hpbGRUb1BhcmVudExhdGNoSWQsIHBhcmVudFRv
Q2hpbGRMYXRjaElkOwotLy8gICAgICAgICAgZXh0LT5nZXRQYXJlbnRUb0NoaWxkTGF0Y2hDSFJP
TUlVTSgmcGFyZW50VG9DaGlsZExhdGNoSWQpOwotLy8gICAgICAgICAgZXh0LT53YWl0TGF0Y2hD
SFJPTUlVTShwYXJlbnRUb0NoaWxkTGF0Y2hJZCk7Ci0vLyAgICAgIH0KLS8vICB9Ci0KICAgICB1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIC8v
IFVwZGF0ZSBjb21wb3NpdG9yIHJlc291cmNlcyBmb3Igcm9vdCBsYXllci4KICAgICB7CiAgICAg
ICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVyOjp1cGRh
dGVSb290IiwgdGhpcywgMCk7CiAgICAgICAgIG1fcm9vdExheWVyQ29udGVudFRpbGVyLT51cGRh
dGVSZWN0KCk7CiAgICAgfQotCi0gICAgLy8gQWZ0ZXIgdXBkYXRlQ29tcG9zaXRvclJlc291cmNl
cywgc2V0L3dhaXQgbGF0Y2hlcyBmb3IgYWxsIGNoaWxkCi0gICAgLy8gY29udGV4dHMuIFRoaXMg
d2lsbCBwcmV2ZW50IHRoZSBjb21wb3NpdG9yIGZyb20gdXNpbmcgYW55IG9mIHRoZSBjaGlsZAot
ICAgIC8vIHBhcmVudCB0ZXh0dXJlcyB3aGlsZSBXZWJHTCBjb21tYW5kcyBhcmUgZXhlY3V0aW5n
IGZyb20gamF2YXNjcmlwdCAqYW5kKgotICAgIC8vIHdoaWxlIHRoZSBmaW5hbCBwYXJlbnQgdGV4
dHVyZSBpcyBiZWluZyBibGl0J2QuIGNvcHlUZXhJbWFnZTJECi0gICAgLy8gdXNlcyB0aGUgcGFy
ZW50IHRleHR1cmUgYXMgYSB0ZW1wb3JhcnkgcmVzb2x2ZSBidWZmZXIsIHNvIHRoYXQncyB3aHkg
dGhlCi0gICAgLy8gd2FpdExhdGNoIGlzIGJlbG93LCB0byBibG9jayB0aGUgY29tcG9zaXRvciBm
cm9tIHVzaW5nIHRoZSBwYXJlbnQgdGV4dHVyZQotICAgIC8vIHVudGlsIHRoZSBuZXh0IFdlYkdM
IFN3YXBCdWZmZXJzIChvciBjb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZSBmb3IKLSAgICAvLyBD
YW52YXMyRCkuCi0gICAgaWYgKGhhcmR3YXJlQ29tcG9zaXRpbmcoKSAmJiBtX2NvbnRleHRTdXBw
b3J0c0xhdGNoKSB7Ci0gICAgICAgIG1fY2hpbGRDb250ZXh0c1dlcmVDb3BpZWQgPSB0cnVlOwot
ICAgICAgICAvLyBGb3IgZWFjaCBjaGlsZCBjb250ZXh0OgotICAgICAgICAvLyAgIGdsU2V0TGF0
Y2goT2Zmc2NyZWVuLT5Db21wb3NpdG9yKTsKLSAgICAgICAgLy8gICBnbFdhaXRMYXRjaChDb21w
b3NpdG9yLT5PZmZzY3JlZW4pOwotICAgICAgICBDaGlsZENvbnRleHRNYXA6Oml0ZXJhdG9yIGkg
PSBtX2NoaWxkQ29udGV4dHMuYmVnaW4oKTsKLSAgICAgICAgZm9yICg7IGkgIT0gbV9jaGlsZENv
bnRleHRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBl
eHQgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGktPmZpcnN0LT5nZXRFeHRl
bnNpb25zKCkpOwotICAgICAgICAgICAgR0MzRHVpbnQgY2hpbGRUb1BhcmVudExhdGNoSWQsIHBh
cmVudFRvQ2hpbGRMYXRjaElkOwotICAgICAgICAgICAgZXh0LT5nZXRQYXJlbnRUb0NoaWxkTGF0
Y2hDSFJPTUlVTSgmcGFyZW50VG9DaGlsZExhdGNoSWQpOwotICAgICAgICAgICAgZXh0LT5nZXRD
aGlsZFRvUGFyZW50TGF0Y2hDSFJPTUlVTSgmY2hpbGRUb1BhcmVudExhdGNoSWQpOwotICAgICAg
ICAgICAgZXh0LT5zZXRMYXRjaENIUk9NSVVNKGNoaWxkVG9QYXJlbnRMYXRjaElkKTsKLSAgICAg
ICAgICAgIGV4dC0+d2FpdExhdGNoQ0hST01JVU0ocGFyZW50VG9DaGlsZExhdGNoSWQpOwotICAg
ICAgICB9Ci0gICAgfQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cGFpbnRMYXll
ckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKQEAgLTEy
NzMsNiArMTIzMSwxMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVtb3ZlQ2hpbGRD
b250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBjdHgpCiAgICAgfQogfQogCitib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKQoreworICAgIHJldHVybiAo
bV9jb250ZXh0LmdldCgpLT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOworfQorCiB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5k
ZW50LCBMYXllckNocm9taXVtKiBsYXllcikgY29uc3QKIHsKICAgICBpZiAobGF5ZXItPmNjTGF5
ZXJJbXBsKCktPnJlbmRlclN1cmZhY2UoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgKaW5kZXggZGI2ZmYzZWQ0MGEzYmRjYWNlMjVhNzg4MGNmMGRlYjMzYzNhMmQ3Yy4uNTFiMDlk
ZTViYWU2MTU5ZWU5ODBjMWIyYWQyZjY2M2E2ZmRlZTM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKQEAgLTE0OSw2ICsxNDksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRD
aGlsZENvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2b2lkIHJlbW92ZUNoaWxkQ29u
dGV4dChHcmFwaGljc0NvbnRleHQzRCopOwogCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGNv
bXBvc2l0b3IgY29udGV4dCBoYXMgYW4gZXJyb3IuCisgICAgYm9vbCBpc0NvbXBvc2l0b3JDb250
ZXh0TG9zdCgpOworCiAjaWZuZGVmIE5ERUJVRwogICAgIHN0YXRpYyBib29sIHNfaW5QYWludExh
eWVyQ29udGVudHM7CiAjZW5kaWYKQEAgLTIzOSwxMSArMjQyLDYgQEAgcHJpdmF0ZToKICNlbmRp
ZgogCiAgICAgQ2hpbGRDb250ZXh0TWFwIG1fY2hpbGRDb250ZXh0czsKLSAgICAvLyBJZiB0cnVl
LCB0aGUgY2hpbGQgY29udGV4dHMgd2VyZSBjb3BpZWQgdG8gdGhlIGNvbXBvc2l0b3IgdGV4dHVy
ZSB0YXJnZXRzCi0gICAgLy8gYW5kIHRoZSBjb21wb3NpdG9yIHdpbGwgbmVlZCB0byB3YWl0IG9u
IHRoZSBwcm9wZXIgbGF0Y2hlcyBiZWZvcmUgdXNpbmcKLSAgICAvLyB0aGUgdGFyZ2V0IHRleHR1
cmVzLiBJZiBmYWxzZSwgdGhlIGNvbXBvc2l0b3IgaXMgcmV1c2luZyB0aGUgdGV4dHVyZXMKLSAg
ICAvLyBmcm9tIGxhc3QgZnJhbWUuCi0gICAgYm9vbCBtX2NoaWxkQ29udGV4dHNXZXJlQ29waWVk
OwogCiAgICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0c0xhdGNoOwogICAgIGJvb2wgbV9jb250ZXh0
U3VwcG9ydHNNYXBTdWI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAppbmRleCAyMjA1
MjhjOWM3NmQzNjc0OWY4MjYwMDk5MjEwMGI1YWU4ZjM4ZWZiLi5iZDUwNjQxYjkyODYzMjA2MmEw
M2I2OWQyODM1ZTc1MmZjMDdkYTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTYxLDkgKzYxLDE0IEBAIFdlYkdMTGF5ZXJDaHJvbWl1bTo6fldlYkdMTGF5ZXJDaHJvbWl1
bSgpCiAgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+cmVtb3ZlQ2hpbGRDb250ZXh0KG1fY29udGV4
dCk7CiB9CiAKK2Jvb2wgV2ViR0xMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAor
eworICAgIHJldHVybiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5n
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9S
KTsKK30KKwogdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoKQogewotICAgIGlmICghbV9jb250ZXh0KQorICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9jb250ZW50c0RpcnR5KQpAQCAtMTAzLDcgKzEw
OCw4IEBAIHZvaWQgV2ViR0xMYXllckNocm9taXVtOjpzZXRUZXh0dXJlVXBkYXRlZCgpCiAKIHZv
aWQgV2ViR0xMYXllckNocm9taXVtOjpzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KQogewotICAgIGlmIChtX2NvbnRleHQgIT0gY29udGV4dCAmJiBsYXllclJlbmRl
cmVyKCkpIHsKKyAgICBib29sIGNvbnRleHRDaGFuZ2VkID0gKG1fY29udGV4dCAhPSBjb250ZXh0
KTsKKyAgICBpZiAoY29udGV4dENoYW5nZWQgJiYgbGF5ZXJSZW5kZXJlcigpKSB7CiAgICAgICAg
IGlmIChtX2NvbnRleHQpCiAgICAgICAgICAgICBsYXllclJlbmRlcmVyKCktPnJlbW92ZUNoaWxk
Q29udGV4dChtX2NvbnRleHQpOwogICAgICAgICBpZiAoY29udGV4dCkKQEAgLTExNiw3ICsxMjIs
NyBAQCB2b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGV4dChjb25zdCBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgaW50IHRl
eHR1cmVJZCA9IG1fY29udGV4dC0+cGxhdGZvcm1UZXh0dXJlKCk7Ci0gICAgaWYgKHRleHR1cmVJ
ZCAhPSBtX3RleHR1cmVJZCkgeworICAgIGlmICh0ZXh0dXJlSWQgIT0gbV90ZXh0dXJlSWQgfHwg
Y29udGV4dENoYW5nZWQpIHsKICAgICAgICAgbV90ZXh0dXJlQ2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgIG1fdGV4dHVyZVVwZGF0ZWQgPSB0cnVlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9t
aXVtLmgKaW5kZXggZWU4NTI4NmUyZGU1Y2YyMjc1YTFkZGZmMjdlOGQyNWRkNmRmN2ViYi4uMTg2
ZTVjMTM5OGI5YTY1ZDQzMWZjYTQ0ZTQ0MzdiYjQzMmJkOTYwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXll
ckNocm9taXVtLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+V2Vi
R0xMYXllckNocm9taXVtKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CiAg
ICAgdm9pZCBzZXRUZXh0dXJlVXBkYXRlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDY5OWE3NmUwOGU4NjhiM2I3OTcwN2JmMDJiZjY2OTBlZjJmNTc2OWQuLmZiYTg2N2Y3ZmNm
NjY2YTM3ZjU5NDM2YjdkMjUxMzg5ZDVhYmRkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDYtMjIgIEpvaG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBG
aXggbGF0Y2ggZGVhZGxvY2sgd2hlbiBHUFUgcHJvY2VzcyBjcmFzaGVzIG9yIGNvbnRleHQgaXMg
bG9zdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMx
ODkKKworICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpjb21wb3NpdGUpOgorCiAyMDExLTA2LTE5ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJvbGxlZCBERVBTLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDA4Nzg2ZDkzYWFkMDhhMDcyMzRmYjJhMGRl
YTA4NThlZDI1OWNiZTUuLjczMmNlNTAzYjI5YTcwMTBhMzUwZjIxNWFiNjVlMGE0YjExOTBhMDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTExNTQs
OCArMTE1NCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKICAg
ICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgogICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgp
OwogCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2xheWVyUmVuZGVyZXItPmNv
bnRleHQoKTsKLSAgICBpZiAoY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jl
c2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgaWYg
KG1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgewogICAgICAgICAv
LyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4dCByaWdodCBoZXJlIHdpbGwgbm90IHdvcmsg
aWYgR1BVIHByb2Nlc3MKICAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNoYW5u
ZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKICAgICAgICAgLy8gY2FsbGVkIGF0
IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29wLCByZXZlcnRpbmcgb3VyCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98423</attachid>
            <date>2011-06-23 15:59:38 -0700</date>
            <delta_ts>2011-06-23 17:12:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63189-20110623155937.patch</filename>
            <type>text/plain</type>
            <size>16407</size>
            <attacher name="John Bates">jbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzOTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNmZiNmIxN2VjNGZlZTZj
NDZlOGI0MzM2N2NmZDFmMTk4ZmE4NmZlLi45ZGYzZmI4Yzc0NmVkOWI1NGUyMmNiNzg2MzM2NjE1
OGQ0NmIyMTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDYtMjIgIEpvaG4g
QmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGaXggbGF0Y2ggZGVhZGxvY2sgd2hlbiBHUFUgcHJvY2VzcyBj
cmFzaGVzIG9yIGNvbnRleHQgaXMgbG9zdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYzMTg5CisgICAgICAgIFRoZSBtYWluIGJ1ZyBmaXggaXMgdG8g
b25seSBzZXQvd2FpdCBsYXRjaGVzIGlmIHRoZSBjaGlsZCBjb250ZXh0IGhhcyBubyBlcnJvcnMu
CisgICAgICAgIEFkZGl0aW9uYWxseSwgdGhlIExheWVyQ2hyb21pdW0gY2xhc3NlcyBuZWVkZWQg
dG8gYmUgbW9kaWZpZWQgdG8gbm90IGNvbnRpbnVlIGRyYXdpbmcgd2hlbgorICAgICAgICB0aGVp
ciBjb3JyZXNwb25kaW5nIGNvbnRleHRzIGhhdmUgZXJyb3JzLiBPdGhlcndpc2UsIHRoZXkgd291
bGQgZHJhdyB3aXRoIGludmFsaWQgdGV4dHVyZSBpZHMuCisKKyAgICAgICAgVGVzdDogb3BlbiBw
YXJ0aWNsZXMgV2ViR0wgZGVtbyBpbiBjaHJvbWUsIGtpbGwgR1BVIHByb2Nlc3MgZnJvbSBUYXNr
IE1hbmFnZXI7IG9ic2VydmUgbm8gZGVhZGxvY2suCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNDb21wb3NpdG9yQ29u
dGV4dExvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dl
YkdMTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21p
dW06OmRyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTExheWVyQ2hyb21pdW06
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXll
ckNocm9taXVtOjpzZXRDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOgorCiAyMDExLTA2LTIxICBa
aGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0
aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5zaW9uczNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNp
b25zM0QuaAppbmRleCBmZWUxMTMzNmI3ZmJlMWVlMmM1NWJhYzViYjBmMGIyZDMzOWQ3ZDk0Li4x
NzUyNjNlN2Y5ZTgzYWQ1ZDU3ZTdlODM2OTgzYTdiYWUxZGRiODk0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaApAQCAtMTA2LDYgKzEwNiwx
MiBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIEdMX0FSQl9yb2J1c3RuZXNzCisgICAgLy8g
Tm90ZTogVGhpcyBtZXRob2QncyBiZWhhdmlvciBkaWZmZXJzIGZyb20gdGhlIEdMX0FSQl9yb2J1
c3RuZXNzCisgICAgLy8gc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9sbG93aW5nIHdheToKKyAgICAv
LyBUaGUgaW1wbGVtZW50YXRpb24gbXVzdCBub3QgcmVzZXQgdGhlIGVycm9yIHN0YXRlIGR1cmlu
ZyB0aGlzIGNhbGwuCisgICAgLy8gSWYgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiByZXR1cm5z
IGFuIGVycm9yLCBpdCBzaG91bGQgY29udGludWUKKyAgICAvLyByZXR1cm5pbmcgdGhlIHNhbWUg
ZXJyb3IuIFJlc3RvcmluZyB0aGUgR3JhcGhpY3NDb250ZXh0M0QgaXMgaGFuZGxlZAorICAgIC8v
IGV4dGVybmFsbHkuCiAgICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
ID0gMDsKICAgICAKICAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q2FudmFzMkRMYXllckNocm9taXVtLmNwcAppbmRleCA5Mjc1OTUwNDgxZjcxNjEzMWJhODJlMWE0
ZTYwNDViYzQxYTg4MTYxLi4wMWE1MmM5MjU1MDI2MTMwMTkzOTM3MjY1MjUyYTYzZDQxOTk3MmYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
YW52YXMyRExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlICJDYW52YXMyRExheWVyQ2hyb21pdW0uaCIKIAogI2luY2x1ZGUgIkRyYXdp
bmdCdWZmZXIuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CiAKQEAgLTU5LDkgKzYwLDE3IEBAIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6fkNhbnZhczJETGF5
ZXJDaHJvbWl1bSgpCiAgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+cmVtb3ZlQ2hpbGRDb250ZXh0
KG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0QoKS5nZXQoKSk7CiB9CiAKK2Jvb2wg
Q2FudmFzMkRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAoreworICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0OworICAgIHJldHVybiAobV9kcmF3aW5nQnVmZmVyCisgICAg
ICAgICAgICAmJiAoY29udGV4dCA9IG1fZHJhd2luZ0J1ZmZlci0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS5nZXQoKSkKKyAgICAgICAgICAgICYmIChjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdy
YXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpKTsK
K30KKwogdm9pZCBDYW52YXMyRExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoKQogewotICAgIGlmICghbV9jb250ZW50c0RpcnR5IHx8ICFtX2RyYXdpbmdCdWZmZXIpCisg
ICAgaWYgKCFtX2NvbnRlbnRzRGlydHkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKG1fdGV4dHVyZUNoYW5nZWQpIHsgLy8gV2UgaGF2ZSB0byBnZW5lcmF0ZSBh
IG5ldyBiYWNraW5nIHRleHR1cmUuCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVt
LmgKaW5kZXggNDIyNGFiMWRiOTA2NWZiZWFlZDUwYjA3NWMyNDJkNTM0ZTQ2OTc1OS4uZGRlZWVm
NWIxMTcxOWE3YzRiNDg0MGMxMDIzZWE1NmI3ZDkwYzIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRM
YXllckNocm9taXVtLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ2FudmFzMkRMYXllckNocm9t
aXVtIDogcHVibGljIENhbnZhc0xheWVyQ2hyb21pdW0gewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENhbnZhczJETGF5ZXJDaHJvbWl1bT4gY3JlYXRlKERyYXdpbmdCdWZmZXIqLCBH
cmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKICAgICB2aXJ0dWFsIH5DYW52YXMyRExheWVy
Q2hyb21pdW0oKTsKLSAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogCiAgICAgdm9pZCBzZXRU
ZXh0dXJlQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5k
ZXggZDMzYmY4NDdmZTBhMDI1ZThiYjRlMzI3OTM4NTM4MWZiNTM3ODdmMi4uMmMzOTQ0ZWY0ZDhl
MDI2N2ZiOWMzMDRiNTdhZjdkNzNlMDE2OGMzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCkBAIC0xMjAsNyArMTIwLDYgQEAgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpM
YXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGUK
ICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9jb21wb3NpdGVPZmZz
Y3JlZW4oZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fY2hpbGRDb250
ZXh0c1dlcmVDb3BpZWQoZmFsc2UpCiAgICAgLCBtX2NvbnRleHRTdXBwb3J0c0xhdGNoKGZhbHNl
KQogICAgICwgbV9hbmltYXRpbmcoZmFsc2UpCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNl
KDApCkBAIC0yNDUsMjIgKzI0NCwxOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlQW5kRHJhd0xheWVycygpCiAgICAgICAgIC8vIHRocmVhZCBjYW4gZXhlY3V0ZSBXZWJHTCBj
YWxscyBvbiB0aGUgY2hpbGQgY29udGV4dCBhdCBhbnkgdGltZSwKICAgICAgICAgLy8gcG90ZW50
aWFsbHkgY2xvYmJlcmluZyB0aGUgcGFyZW50IHRleHR1cmUgdGhhdCBpcyBiZWluZyByZW5kZXJl
cmVkCiAgICAgICAgIC8vIGJ5IHRoZSBjb21wb3NpdG9yIHRocmVhZC4KLSAgICAgICAgaWYgKG1f
Y2hpbGRDb250ZXh0c1dlcmVDb3BpZWQpIHsKLSAgICAgICAgICAgIEV4dGVuc2lvbnMzRENocm9t
aXVtKiBwYXJlbnRFeHQgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKLSAgICAgICAgICAgIC8vIEZvciBlYWNoIGNoaWxkIGNv
bnRleHQ6Ci0gICAgICAgICAgICAvLyAgIGdsV2FpdExhdGNoKE9mZnNjcmVlbi0+Q29tcG9zaXRv
cik7Ci0gICAgICAgICAgICBDaGlsZENvbnRleHRNYXA6Oml0ZXJhdG9yIGkgPSBtX2NoaWxkQ29u
dGV4dHMuYmVnaW4oKTsKLSAgICAgICAgICAgIGZvciAoOyBpICE9IG1fY2hpbGRDb250ZXh0cy5l
bmQoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGNoaWxk
RXh0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihpLT5maXJzdC0+Z2V0RXh0
ZW5zaW9ucygpKTsKLSAgICAgICAgICAgICAgICBHQzNEdWludCBsYXRjaElkOwotICAgICAgICAg
ICAgICAgIGNoaWxkRXh0LT5nZXRDaGlsZFRvUGFyZW50TGF0Y2hDSFJPTUlVTSgmbGF0Y2hJZCk7
Ci0gICAgICAgICAgICAgICAgcGFyZW50RXh0LT53YWl0TGF0Y2hDSFJPTUlVTShsYXRjaElkKTsK
KyAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIHBhcmVudEV4dCA9IHN0YXRpY19jYXN0PEV4
dGVuc2lvbnMzRENocm9taXVtKj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOworICAgICAg
ICAvLyBGb3IgZWFjaCBjaGlsZCBjb250ZXh0OgorICAgICAgICAvLyAgIGdsV2FpdExhdGNoKE9m
ZnNjcmVlbi0+Q29tcG9zaXRvcik7CisgICAgICAgIENoaWxkQ29udGV4dE1hcDo6aXRlcmF0b3Ig
aSA9IG1fY2hpbGRDb250ZXh0cy5iZWdpbigpOworICAgICAgICBmb3IgKDsgaSAhPSBtX2NoaWxk
Q29udGV4dHMuZW5kKCk7ICsraSkgeworICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0q
IGNoaWxkRXh0ID0gc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihpLT5maXJzdC0+
Z2V0RXh0ZW5zaW9ucygpKTsKKyAgICAgICAgICAgIGlmIChjaGlsZEV4dC0+Z2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAg
ICAgICAgICAgIEdDM0R1aW50IGNoaWxkVG9QYXJlbnRMYXRjaElkOworICAgICAgICAgICAgICAg
IGNoaWxkRXh0LT5nZXRDaGlsZFRvUGFyZW50TGF0Y2hDSFJPTUlVTSgmY2hpbGRUb1BhcmVudExh
dGNoSWQpOworICAgICAgICAgICAgICAgIGNoaWxkRXh0LT5zZXRMYXRjaENIUk9NSVVNKGNoaWxk
VG9QYXJlbnRMYXRjaElkKTsKKyAgICAgICAgICAgICAgICBwYXJlbnRFeHQtPndhaXRMYXRjaENI
Uk9NSVVNKGNoaWxkVG9QYXJlbnRMYXRjaElkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICAvLyBSZXNldCB0byBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGhhdmUgY29uc3Vt
ZWQgdGhlIGRpcnR5IGNoaWxkCi0gICAgICAgIC8vIGNvbnRleHRzJyBwYXJlbnQgdGV4dHVyZXMu
IChUaGlzIGlzIG9ubHkgdXNlZnVsIHdoZW4gdGhlIGNvbXBvc2l0b3IKLSAgICAgICAgLy8gaXMg
bXVsdGl0aHJlYWRlZC4pCi0gICAgICAgIG1fY2hpbGRDb250ZXh0c1dlcmVDb3BpZWQgPSBmYWxz
ZTsKICAgICB9CiAKICAgICBkcmF3TGF5ZXJzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwpAQCAt
Mjc1LDkgKzI3MSwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJh
d0xheWVycygpCiAgICAgICAgIENoaWxkQ29udGV4dE1hcDo6aXRlcmF0b3IgaSA9IG1fY2hpbGRD
b250ZXh0cy5iZWdpbigpOwogICAgICAgICBmb3IgKDsgaSAhPSBtX2NoaWxkQ29udGV4dHMuZW5k
KCk7ICsraSkgewogICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGNoaWxkRXh0ID0g
c3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihpLT5maXJzdC0+Z2V0RXh0ZW5zaW9u
cygpKTsKLSAgICAgICAgICAgIEdDM0R1aW50IGxhdGNoSWQ7Ci0gICAgICAgICAgICBjaGlsZEV4
dC0+Z2V0UGFyZW50VG9DaGlsZExhdGNoQ0hST01JVU0oJmxhdGNoSWQpOwotICAgICAgICAgICAg
cGFyZW50RXh0LT5zZXRMYXRjaENIUk9NSVVNKGxhdGNoSWQpOworICAgICAgICAgICAgaWYgKGNo
aWxkRXh0LT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgR0MzRHVpbnQgcGFyZW50VG9DaGlsZExhdGNo
SWQ7CisgICAgICAgICAgICAgICAgY2hpbGRFeHQtPmdldFBhcmVudFRvQ2hpbGRMYXRjaENIUk9N
SVVNKCZwYXJlbnRUb0NoaWxkTGF0Y2hJZCk7CisgICAgICAgICAgICAgICAgcGFyZW50RXh0LT5z
ZXRMYXRjaENIUk9NSVVNKHBhcmVudFRvQ2hpbGRMYXRjaElkKTsKKyAgICAgICAgICAgICAgICBj
aGlsZEV4dC0+d2FpdExhdGNoQ0hST01JVU0ocGFyZW50VG9DaGlsZExhdGNoSWQpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0zMzAsNTMgKzMyOSwxMiBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCkKICAgICBzX2luUGFpbnRMYXllckNvbnRlbnRzID0gZmFsc2U7CiAjZW5kaWYK
IAotICAgIC8vIEZJWE1FOiBCZWZvcmUgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcywgd2hlbiB0
aGUgY29tcG9zaXRvciBydW5zIGluCi0gICAgLy8gaXRzIG93biB0aHJlYWQsIGFuZCB3aGVuIHRo
ZSBjb3B5VGV4SW1hZ2UyRCBidWcgaXMgZml4ZWQsIGluc2VydAotICAgIC8vIGEgZ2xXYWl0TGF0
Y2goQ29tcG9zaXRvci0+T2Zmc2NyZWVuKSBvbiBhbGwgY2hpbGQgY29udGV4dHMgaGVyZSBpbnN0
ZWFkCi0gICAgLy8gb2YgYWZ0ZXIgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcy4KLSAgICAvLyBB
bHNvIHVuY29tbWVudCB0aGUgZ2xTZXRMYXRjaChDb21wb3NpdG9yLT5PZmZzY3JlZW4pIGNvZGUg
aW4gYWRkQ2hpbGRDb250ZXh0LgotLy8gIGlmIChoYXJkd2FyZUNvbXBvc2l0aW5nKCkgJiYgbV9j
b250ZXh0U3VwcG9ydHNMYXRjaCkgewotLy8gICAgICAvLyBGb3IgZWFjaCBjaGlsZCBjb250ZXh0
OgotLy8gICAgICAvLyAgIGdsV2FpdExhdGNoKENvbXBvc2l0b3ItPk9mZnNjcmVlbik7Ci0vLyAg
ICAgIENoaWxkQ29udGV4dE1hcDo6aXRlcmF0b3IgaSA9IG1fY2hpbGRDb250ZXh0cy5iZWdpbigp
OwotLy8gICAgICBmb3IgKDsgaSAhPSBtX2NoaWxkQ29udGV4dHMuZW5kKCk7ICsraSkgewotLy8g
ICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dCA9IHN0YXRpY19jYXN0PEV4dGVuc2lv
bnMzRENocm9taXVtKj4oaS0+Zmlyc3QtPmdldEV4dGVuc2lvbnMoKSk7Ci0vLyAgICAgICAgICBH
QzNEdWludCBjaGlsZFRvUGFyZW50TGF0Y2hJZCwgcGFyZW50VG9DaGlsZExhdGNoSWQ7Ci0vLyAg
ICAgICAgICBleHQtPmdldFBhcmVudFRvQ2hpbGRMYXRjaENIUk9NSVVNKCZwYXJlbnRUb0NoaWxk
TGF0Y2hJZCk7Ci0vLyAgICAgICAgICBleHQtPndhaXRMYXRjaENIUk9NSVVNKHBhcmVudFRvQ2hp
bGRMYXRjaElkKTsKLS8vICAgICAgfQotLy8gIH0KLQogICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgLy8gVXBkYXRlIGNvbXBvc2l0b3Ig
cmVzb3VyY2VzIGZvciByb290IGxheWVyLgogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXI6OnVwZGF0ZVJvb3QiLCB0aGlzLCAwKTsK
ICAgICAgICAgbV9yb290TGF5ZXJDb250ZW50VGlsZXItPnVwZGF0ZVJlY3QoKTsKICAgICB9Ci0K
LSAgICAvLyBBZnRlciB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzLCBzZXQvd2FpdCBsYXRjaGVz
IGZvciBhbGwgY2hpbGQKLSAgICAvLyBjb250ZXh0cy4gVGhpcyB3aWxsIHByZXZlbnQgdGhlIGNv
bXBvc2l0b3IgZnJvbSB1c2luZyBhbnkgb2YgdGhlIGNoaWxkCi0gICAgLy8gcGFyZW50IHRleHR1
cmVzIHdoaWxlIFdlYkdMIGNvbW1hbmRzIGFyZSBleGVjdXRpbmcgZnJvbSBqYXZhc2NyaXB0ICph
bmQqCi0gICAgLy8gd2hpbGUgdGhlIGZpbmFsIHBhcmVudCB0ZXh0dXJlIGlzIGJlaW5nIGJsaXQn
ZC4gY29weVRleEltYWdlMkQKLSAgICAvLyB1c2VzIHRoZSBwYXJlbnQgdGV4dHVyZSBhcyBhIHRl
bXBvcmFyeSByZXNvbHZlIGJ1ZmZlciwgc28gdGhhdCdzIHdoeSB0aGUKLSAgICAvLyB3YWl0TGF0
Y2ggaXMgYmVsb3csIHRvIGJsb2NrIHRoZSBjb21wb3NpdG9yIGZyb20gdXNpbmcgdGhlIHBhcmVu
dCB0ZXh0dXJlCi0gICAgLy8gdW50aWwgdGhlIG5leHQgV2ViR0wgU3dhcEJ1ZmZlcnMgKG9yIGNv
cHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlIGZvcgotICAgIC8vIENhbnZhczJEKS4KLSAgICBpZiAo
aGFyZHdhcmVDb21wb3NpdGluZygpICYmIG1fY29udGV4dFN1cHBvcnRzTGF0Y2gpIHsKLSAgICAg
ICAgbV9jaGlsZENvbnRleHRzV2VyZUNvcGllZCA9IHRydWU7Ci0gICAgICAgIC8vIEZvciBlYWNo
IGNoaWxkIGNvbnRleHQ6Ci0gICAgICAgIC8vICAgZ2xTZXRMYXRjaChPZmZzY3JlZW4tPkNvbXBv
c2l0b3IpOwotICAgICAgICAvLyAgIGdsV2FpdExhdGNoKENvbXBvc2l0b3ItPk9mZnNjcmVlbik7
Ci0gICAgICAgIENoaWxkQ29udGV4dE1hcDo6aXRlcmF0b3IgaSA9IG1fY2hpbGRDb250ZXh0cy5i
ZWdpbigpOwotICAgICAgICBmb3IgKDsgaSAhPSBtX2NoaWxkQ29udGV4dHMuZW5kKCk7ICsraSkg
ewotICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4dCA9IHN0YXRpY19jYXN0PEV4
dGVuc2lvbnMzRENocm9taXVtKj4oaS0+Zmlyc3QtPmdldEV4dGVuc2lvbnMoKSk7Ci0gICAgICAg
ICAgICBHQzNEdWludCBjaGlsZFRvUGFyZW50TGF0Y2hJZCwgcGFyZW50VG9DaGlsZExhdGNoSWQ7
Ci0gICAgICAgICAgICBleHQtPmdldFBhcmVudFRvQ2hpbGRMYXRjaENIUk9NSVVNKCZwYXJlbnRU
b0NoaWxkTGF0Y2hJZCk7Ci0gICAgICAgICAgICBleHQtPmdldENoaWxkVG9QYXJlbnRMYXRjaENI
Uk9NSVVNKCZjaGlsZFRvUGFyZW50TGF0Y2hJZCk7Ci0gICAgICAgICAgICBleHQtPnNldExhdGNo
Q0hST01JVU0oY2hpbGRUb1BhcmVudExhdGNoSWQpOwotICAgICAgICAgICAgZXh0LT53YWl0TGF0
Y2hDSFJPTUlVTShwYXJlbnRUb0NoaWxkTGF0Y2hJZCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CiAK
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5
ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQpAQCAtMTI3Myw2ICsxMjMxLDExIEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW1vdmVDaGlsZENvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0QqIGN0eCkKICAgICB9CiB9CiAKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0Nv
bXBvc2l0b3JDb250ZXh0TG9zdCgpCit7CisgICAgcmV0dXJuIChtX2NvbnRleHQuZ2V0KCktPmdl
dEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUik7Cit9CisKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkdW1w
UmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQsIExheWVyQ2hyb21pdW0q
IGxheWVyKSBjb25zdAogewogICAgIGlmIChsYXllci0+Y2NMYXllckltcGwoKS0+cmVuZGVyU3Vy
ZmFjZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBkYjZmZjNlZDQw
YTNiZGNhY2UyNWE3ODgwY2YwZGViMzNjM2EyZDdjLi41MWIwOWRlNWJhZTYxNTllZTk4MGMxYjJh
ZDJmNjYzYTZmZGVlMzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAt
MTQ5LDYgKzE0OSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENoaWxkQ29udGV4dChHcmFwaGlj
c0NvbnRleHQzRCopOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGRDb250ZXh0KEdyYXBoaWNzQ29udGV4
dDNEKik7CiAKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGhh
cyBhbiBlcnJvci4KKyAgICBib29sIGlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCk7CisKICNpZm5k
ZWYgTkRFQlVHCiAgICAgc3RhdGljIGJvb2wgc19pblBhaW50TGF5ZXJDb250ZW50czsKICNlbmRp
ZgpAQCAtMjM5LDExICsyNDIsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBDaGlsZENvbnRl
eHRNYXAgbV9jaGlsZENvbnRleHRzOwotICAgIC8vIElmIHRydWUsIHRoZSBjaGlsZCBjb250ZXh0
cyB3ZXJlIGNvcGllZCB0byB0aGUgY29tcG9zaXRvciB0ZXh0dXJlIHRhcmdldHMKLSAgICAvLyBh
bmQgdGhlIGNvbXBvc2l0b3Igd2lsbCBuZWVkIHRvIHdhaXQgb24gdGhlIHByb3BlciBsYXRjaGVz
IGJlZm9yZSB1c2luZwotICAgIC8vIHRoZSB0YXJnZXQgdGV4dHVyZXMuIElmIGZhbHNlLCB0aGUg
Y29tcG9zaXRvciBpcyByZXVzaW5nIHRoZSB0ZXh0dXJlcwotICAgIC8vIGZyb20gbGFzdCBmcmFt
ZS4KLSAgICBib29sIG1fY2hpbGRDb250ZXh0c1dlcmVDb3BpZWQ7CiAKICAgICBib29sIG1fY29u
dGV4dFN1cHBvcnRzTGF0Y2g7CiAgICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdM
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDIyMDUyOGM5Yzc2ZDM2NzQ5ZjgyNjAw
OTkyMTAwYjVhZThmMzhlZmIuLmJkNTA2NDFiOTI4NjMyMDYyYTAzYjY5ZDI4MzVlNzUyZmMwN2Rh
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcApAQCAtNjEsOSArNjEsMTQgQEAg
V2ViR0xMYXllckNocm9taXVtOjp+V2ViR0xMYXllckNocm9taXVtKCkKICAgICAgICAgbGF5ZXJS
ZW5kZXJlcigpLT5yZW1vdmVDaGlsZENvbnRleHQobV9jb250ZXh0KTsKIH0KIAorYm9vbCBXZWJH
TExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtX2Nv
bnRleHQgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOworfQorCiB2b2lkIFdlYkdM
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCiB7Ci0gICAgaWYgKCFt
X2NvbnRleHQpCisgICAgaWYgKCFkcmF3c0NvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFtX2NvbnRlbnRzRGlydHkpCkBAIC0xMDMsNyArMTA4LDggQEAgdm9pZCBXZWJHTExh
eWVyQ2hyb21pdW06OnNldFRleHR1cmVVcGRhdGVkKCkKIAogdm9pZCBXZWJHTExheWVyQ2hyb21p
dW06OnNldENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiB7Ci0gICAg
aWYgKG1fY29udGV4dCAhPSBjb250ZXh0ICYmIGxheWVyUmVuZGVyZXIoKSkgeworICAgIGJvb2wg
Y29udGV4dENoYW5nZWQgPSAobV9jb250ZXh0ICE9IGNvbnRleHQpOworICAgIGlmIChjb250ZXh0
Q2hhbmdlZCAmJiBsYXllclJlbmRlcmVyKCkpIHsKICAgICAgICAgaWYgKG1fY29udGV4dCkKICAg
ICAgICAgICAgIGxheWVyUmVuZGVyZXIoKS0+cmVtb3ZlQ2hpbGRDb250ZXh0KG1fY29udGV4dCk7
CiAgICAgICAgIGlmIChjb250ZXh0KQpAQCAtMTE2LDcgKzEyMiw3IEBAIHZvaWQgV2ViR0xMYXll
ckNocm9taXVtOjpzZXRDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQog
ICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZUlkID0gbV9jb250ZXh0
LT5wbGF0Zm9ybVRleHR1cmUoKTsKLSAgICBpZiAodGV4dHVyZUlkICE9IG1fdGV4dHVyZUlkKSB7
CisgICAgaWYgKHRleHR1cmVJZCAhPSBtX3RleHR1cmVJZCB8fCBjb250ZXh0Q2hhbmdlZCkgewog
ICAgICAgICBtX3RleHR1cmVDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgbV90ZXh0dXJlVXBkYXRl
ZCA9IHRydWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAppbmRleCBlZTg1Mjg2
ZTJkZTVjZjIyNzVhMWRkZmYyN2U4ZDI1ZGQ2ZGY3ZWJiLi4xODZlNWMxMzk4YjlhNjVkNDMxZmNh
NDRlNDQzN2JiNDMyYmQ5NjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaApAQCAtNDks
NyArNDksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5XZWJHTExheWVyQ2hyb21pdW0oKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKICAgICB2b2lkIHNldFRleHR1cmVV
cGRhdGVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjc5MDNmMzE3OWQzNDY5
MDc1NTYxNmEwNDczN2E4YzY1NTYzNjA4Yi4uNmEzYzExYmMxYmI3NjgyNmM3OTQ3ZTNjN2Y0MjMz
NzRmZjU0NTA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMS0wNi0yMiAgSm9obiBCYXRlcyAgPGpiYXRlc0Bnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBsYXRjaCBkZWFkbG9jayB3
aGVuIEdQVSBwcm9jZXNzIGNyYXNoZXMgb3IgY29udGV4dCBpcyBsb3N0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzE4OQorCisgICAgICAgICogc3Jj
L1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXBvc2l0
ZSk6CisKIDIwMTEtMDYtMjEgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggMDg3ODZkOTNhYWQwOGEwNzIzNGZiMmEwZGVhMDg1OGVk
MjU5Y2JlNS4uNzMyY2U1MDNiMjlhNzAxMGEzNTBmMjE1YWI2NWUwYTRiMTE5MGEwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMTE1NCw4ICsxMTU0
LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogICAgIC8vIFB1
dCByZXN1bHQgb25zY3JlZW4uCiAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgp
OwotICAgIGlmIChjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICBpZiAobV9sYXll
clJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7CiAgICAgICAgIC8vIFRyeWlu
ZyB0byByZWNvdmVyIHRoZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2lsbCBub3Qgd29yayBpZiBHUFUg
cHJvY2VzcwogICAgICAgICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1c2UgR3B1Q2hhbm5lbEhvc3Q6
Ok9uRXJyb3JNZXNzYWdlIHdpbGwgb25seSBiZQogICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5l
eHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVydGluZyBvdXIK
</data>

          </attachment>
      

    </bug>

</bugzilla>