<?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>113318</bug_id>
          
          <creation_ts>2013-03-26 10:06:09 -0700</creation_ts>
          <short_desc>[GTK][AC] Support preserves3D css property for clutter ac backend.</short_desc>
          <delta_ts>2013-04-02 10:14:45 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          <dependson>110470</dependson>
    
    <dependson>113317</dependson>
          <blocked>105699</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="ChangSeok Oh">kevin.cs.oh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>joone</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>863761</commentid>
    <comment_count>0</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-03-26 10:06:09 -0700</bug_when>
    <thetext>Support preserves3D css property for clutter ac backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866232</commentid>
    <comment_count>1</comment_count>
      <attachid>195763</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-03-29 10:53:35 -0700</bug_when>
    <thetext>Created attachment 195763
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866543</commentid>
    <comment_count>2</comment_count>
      <attachid>195839</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-03-29 21:12:13 -0700</bug_when>
    <thetext>Created attachment 195839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866551</commentid>
    <comment_count>3</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-03-29 22:12:31 -0700</bug_when>
    <thetext>For webkit-clutter port, http://cgit.collabora.com/git/webkit-clutter.git/commit/?h=wip/changseok/unreviewed&amp;id=84b0e7866bd8581d4d021ef852f6924d3ee80f92</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866592</commentid>
    <comment_count>4</comment_count>
      <attachid>195839</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-03-30 02:37:29 -0700</bug_when>
    <thetext>Comment on attachment 195839
Patch

Attachment 195839 did not pass gtk-ews (gtk):
Output: http://webkit-commit-queue.appspot.com/results/17370048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866620</commentid>
    <comment_count>5</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-03-30 09:57:32 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 195839 [details])
&gt; Attachment 195839 [details] did not pass gtk-ews (gtk):
&gt; Output: http://webkit-commit-queue.appspot.com/results/17370048

It seems jhbuild issue..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867193</commentid>
    <comment_count>6</comment_count>
      <attachid>195839</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-04-01 10:00:00 -0700</bug_when>
    <thetext>Comment on attachment 195839
Patch

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

r- because of the comments

&gt; Source/WebCore/ChangeLog:9
&gt; +        Most of all codes are based on Mac port&apos;s implementation. The core concept is that

s/Most of all codes are/Most of the code is/

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:48
&gt; +    gboolean flattening;

flatten is a better name since it&apos;s imperative, or flattens to follow the drawContents convention, present continuous indicates things are happening at that time, usually we use that only for tracking whether something is happening - like stating that layout is underway to avoid triggering it again; btw, we can use bool here instead of gboolean, I think we should!

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:517
&gt; +void graphicsLayerActorSetFlattening(GraphicsLayerActor* layer, gboolean flattening)

We should change the method name too.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:584
&gt;      // FIXME: Save the state before sending down to kids and restore it after
&gt;      TransformState localState = state;
&gt; +    CommitState childCommitState = commitState;

Looks like the state is not restored anywhere. Is this what the FIXME is about? Is it because the child tries to change the state that is passed to it, so we need a modifiable copy of those? Could we drop the assignments for now and add them when we are actually restoring state?

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:712
&gt; +        // If the preserves3D of a layer is false, itself and its immediate children should be flattened.
&gt; +        graphicsLayerActorSetFlattening(childLayer, !(preserves3D() || currentChild-&gt;preserves3D()));

Not sure I understand this comment. What this is doing is telling the child to flatten if neither the &quot;this&quot; layer nor the currentChild has preserve3D set. If that is correct behaviour, then I think we can do away with the comment. The comment implies the layer and its children should be flattened if the &quot;this&quot; layer has preserves3D set to false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867300</commentid>
    <comment_count>7</comment_count>
      <attachid>195839</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2013-04-01 12:58:22 -0700</bug_when>
    <thetext>Comment on attachment 195839
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:712
&gt;&gt; +        graphicsLayerActorSetFlattening(childLayer, !(preserves3D() || currentChild-&gt;preserves3D()));
&gt; 
&gt; Not sure I understand this comment. What this is doing is telling the child to flatten if neither the &quot;this&quot; layer nor the currentChild has preserve3D set. If that is correct behaviour, then I think we can do away with the comment. The comment implies the layer and its children should be flattened if the &quot;this&quot; layer has preserves3D set to false.

All elements transform-style property has false value by default, so preserve3D() usually returns false. I think we can change the comment as follws:
&quot;If the preserve3D() of this layer returns true, its children should not be flattened&quot;

By the way, do we really need to check currentChild-&gt;preserves3D()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867375</commentid>
    <comment_count>8</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-04-01 14:58:24 -0700</bug_when>
    <thetext>If we change the code to not check currentChild-&gt;preserves3D(), then the comment you propose makes more sense =). But that would make the code obvious enough that I think we should just remove the comment. Why we check currentChild-&gt;preserves3D() is one of the doubts I had, I don&apos;t know why. Does it work without that check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867552</commentid>
    <comment_count>9</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-04-01 22:34:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; If we change the code to not check currentChild-&gt;preserves3D(), then the comment you propose makes more sense =). But that would make the code obvious enough that I think we should just remove the comment. Why we check currentChild-&gt;preserves3D() is one of the doubts I had, I don&apos;t know why. Does it work without that check?

No. it doesn&apos;t. I know a sample working wrong without it.
Please run http://www.webkit.org/blog-files/3d-transforms/poster-circle.html

If a layer has preserve-3d true, and it should not be flattened though its parent has preserve-3d false. In other words, if we check only current layer&apos;s preserve-3d(false), children layers might be flattened even though children layers have preserve-3d true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867560</commentid>
    <comment_count>10</comment_count>
      <attachid>195839</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-04-01 22:45:18 -0700</bug_when>
    <thetext>Comment on attachment 195839
Patch

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

Thank you for the comments!

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:48
&gt;&gt; +    gboolean flattening;
&gt; 
&gt; flatten is a better name since it&apos;s imperative, or flattens to follow the drawContents convention, present continuous indicates things are happening at that time, usually we use that only for tracking whether something is happening - like stating that layout is underway to avoid triggering it again; btw, we can use bool here instead of gboolean, I think we should!

Done.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:584
&gt;&gt; +    CommitState childCommitState = commitState;
&gt; 
&gt; Looks like the state is not restored anywhere. Is this what the FIXME is about? Is it because the child tries to change the state that is passed to it, so we need a modifiable copy of those? Could we drop the assignments for now and add them when we are actually restoring state?

O.K. Make sense. We&apos;re not using them, so we don&apos;t need to keep them as local variables.

&gt;&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:712
&gt;&gt;&gt; +        graphicsLayerActorSetFlattening(childLayer, !(preserves3D() || currentChild-&gt;preserves3D()));
&gt;&gt; 
&gt;&gt; Not sure I understand this comment. What this is doing is telling the child to flatten if neither the &quot;this&quot; layer nor the currentChild has preserve3D set. If that is correct behaviour, then I think we can do away with the comment. The comment implies the layer and its children should be flattened if the &quot;this&quot; layer has preserves3D set to false.
&gt; 
&gt; All elements transform-style property has false value by default, so preserve3D() usually returns false. I think we can change the comment as follws:
&gt; &quot;If the preserve3D() of this layer returns true, its children should not be flattened&quot;
&gt; 
&gt; By the way, do we really need to check currentChild-&gt;preserves3D()?

&quot;If the preserve3D() of this layer returns true, itself and its children should not be flattened&quot; is better to me.
But I don&apos;t mind removing the comment if it causes that you&apos;re confused. :p</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867600</commentid>
    <comment_count>11</comment_count>
      <attachid>196080</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-04-01 23:44:44 -0700</bug_when>
    <thetext>Created attachment 196080
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867757</commentid>
    <comment_count>12</comment_count>
      <attachid>196080</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-04-02 05:43:47 -0700</bug_when>
    <thetext>Comment on attachment 196080
Patch

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

cq- because of the suggestion

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:707
&gt; -        newSublayers.append(childLayer);
&gt; +        graphicsLayerActorSetFlatten(childLayer, !(preserves3D() || currentChild-&gt;preserves3D()));

&gt; &quot;If the preserve3D() of this layer returns true, itself and its children should not be flattened&quot; is better to me.
&gt; But I don&apos;t mind removing the comment if it causes that you&apos;re confused. :p

The thing is that comment you suggest does not describe what the code is doing, do you agree with that? What the code does is set flatten to true on the child layer if both the current layer and the child do *not* preserve 3D. So I think you could say this:

&quot;The child layer only preserves 3D if both itself and its parent have preserves3D set.&quot;

But feel free to omit the comment, I think the code speaks for itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867845</commentid>
    <comment_count>13</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-04-02 08:05:00 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 196080 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=196080&amp;action=review
&gt; 
&gt; cq- because of the suggestion
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerClutter.cpp:707
&gt; &gt; -        newSublayers.append(childLayer);
&gt; &gt; +        graphicsLayerActorSetFlatten(childLayer, !(preserves3D() || currentChild-&gt;preserves3D()));
&gt; 
&gt; &gt; &quot;If the preserve3D() of this layer returns true, itself and its children should not be flattened&quot; is better to me.
&gt; &gt; But I don&apos;t mind removing the comment if it causes that you&apos;re confused. :p
&gt; 
&gt; The thing is that comment you suggest does not describe what the code is doing, do you agree with that? What the code does is set flatten to true on the child layer if both the current layer and the child do *not* preserve 3D. So I think you could say this:
&gt; 
&gt; &quot;The child layer only preserves 3D if both itself and its parent have preserves3D set.&quot;
&gt; 
&gt; But feel free to omit the comment, I think the code speaks for itself.

kov, I think &quot;The child layer only preserves 3D if either itself or its parent has preserves3D set.&quot; is correct, not *both*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867862</commentid>
    <comment_count>14</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-04-02 08:21:20 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; &gt; +        graphicsLayerActorSetFlatten(childLayer, !(preserves3D() || currentChild-&gt;preserves3D()));
[...]
&gt; &gt; &quot;The child layer only preserves 3D if both itself and its parent have preserves3D set.&quot;
&gt; &gt; 
&gt; &gt; But feel free to omit the comment, I think the code speaks for itself.
&gt; 
&gt; kov, I think &quot;The child layer only preserves 3D if either itself or its parent has preserves3D set.&quot; is correct, not *both*

Oops, yes, go ahead!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867944</commentid>
    <comment_count>15</comment_count>
      <attachid>196166</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2013-04-02 09:34:25 -0700</bug_when>
    <thetext>Created attachment 196166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867977</commentid>
    <comment_count>16</comment_count>
      <attachid>196166</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-02 10:14:41 -0700</bug_when>
    <thetext>Comment on attachment 196166
Patch

Clearing flags on attachment: 196166

Committed r147443: &lt;http://trac.webkit.org/changeset/147443&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867978</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-04-02 10:14:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195763</attachid>
            <date>2013-03-29 10:53:35 -0700</date>
            <delta_ts>2013-03-29 21:12:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113318-20130330025331.patch</filename>
            <type>text/plain</type>
            <size>24551</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3MjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE5ZTk0MWI1NzRjOTZj
MjBmMThmNmZmODI2OTcxYTRiZmIxMzhiZS4uOGRjNmRjOGQ4OWY1OGIzMGI0OTY4NjZmMzkxZmEy
Nzg2MzdiZWJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAzLTI5ICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2sub2hAY29sbGFib3JhLmNvbT4KKworICAgICAgICBbR1RLXVtB
Q10gU3VwcG9ydCBwcmVzZXJ2ZXMzRCBjc3MgcHJvcGVydHkgZm9yIGNsdXR0ZXIgYWMgYmFja2Vu
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzMx
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYnJpbmdzIHByZXNlcnZlLTNEIGNzcyBwcm9wZXJ0eSBzdXBwb3J0IHRvIFdlYktpdEd0
aysgd2l0aCBjbHV0dGVyIGFjIGJhY2tlZC4KKyAgICAgICAgTW9zdCBvZiBhbGwgY29kZXMgYXJl
IGJhc2VkIG9uIE1hYyBwb3J0J3MgaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIGNvbmNlcHQgaXMg
dGhhdAorICAgICAgICBpZiBhIGxheWVyIGhhcyBwcmVzZXJ2ZS0zZCBwcm9wZXJ0eSBmYWxzZSwg
d2UgbWFyayBpdHNlbGYgYW5kIGl0cyBpbW1lZGlhdGUgY2hpbGRyZW4KKyAgICAgICAgdG8gbWFr
ZSB0aGVtIGZsYXR0ZW4uIEFuZCB0aGVuIHdlIHJlbW92ZSAzRCBmYWN0b3IgaW4gYSBtb2RlbFZp
ZXcgbWF0cml4CisgICAgICAgIHdoZW4gYXBwbHlpbmcgaXQgdG8gZWFjaCBhY3Rvci4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyBjb3ZlcmVkIHdpdGggZXhpc3RpbmcgQUMgdGVz
dHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJB
Y3Rvci5jcHA6CisgICAgICAgIChfR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSk6CisgICAgICAg
IChncmFwaGljc19sYXllcl9hY3Rvcl9pbml0KToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rv
ckFwcGx5VHJhbnNmb3JtKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyk6CisgICAg
ICAgIChncmFwaGljc0xheWVyQWN0b3JSZW1vdmVGcm9tU3VwZXJMYXllcik6CisgICAgICAgIChn
cmFwaGljc0xheWVyQWN0b3JTZXRGbGF0dGVuaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6On5HcmFwaGljc0xheWVyQ2x1dHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6bW92ZU9yQ29weUFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRl
cjo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hhbmdl
c0JlZm9yZVN1YmxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRl
cjo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnVwZGF0ZVN1YmxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2x1dHRlcjo6dXBkYXRlU3RydWN0dXJhbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnN0cnVjdHVyYWxMYXllclB1cnBvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmxheWVyRm9yU3VwZXJsYXllcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5o
OgorICAgICAgICAoQ29tbWl0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsdXR0ZXI6OkNvbW1pdFN0YXRlOjpDb21taXRTdGF0ZSk6CisgICAgICAgIChHcmFwaGljc0xh
eWVyQ2x1dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cHJp
bWFyeUxheWVyKToKKwogMjAxMy0wMy0yOSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE0MzEwMik6IElnbm9yZSB0YWJsZSBjZWxsJ3MgaGVp
Z2h0IGF0dHJpYnV0ZSB3aGVuIGNoZWNraW5nIGlmIGNvbnRhaW5pbmcgYmxvY2sgaGFzIGF1dG8g
aGVpZ2h0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwCmluZGV4IDA3ZmRiNDI0NzEyNTRi
YWYwOTNjOGE3MjI1MDM2NzI2OGViMTQ2M2QuLjk5N2MyY2M0ZmRjOTI1ZDk3NGE4ZWFhYTgxNDZi
N2M0OGM0YzFiZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NCw2ICs0NSw3IEBAIHN0cnVjdCBf
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSB7CiAKICAgICBQbGF0Zm9ybUNsdXR0ZXJMYXllckNs
aWVudCogbGF5ZXJDbGllbnQ7CiAKKyAgICBnYm9vbGVhbiBmbGF0dGVuaW5nOwogICAgIGdib29s
ZWFuIGRyYXdzQ29udGVudDsKIAogICAgIGZsb2F0IHNjcm9sbFg7CkBAIC0xMDIsNiArMTA0LDgg
QEAgc3RhdGljIHZvaWQgZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfaW5pdChHcmFwaGljc0xheWVyQWN0
b3IqIHNlbGYpCiAKICAgICBjbHV0dGVyX2FjdG9yX3NldF9yZWFjdGl2ZShDTFVUVEVSX0FDVE9S
KHNlbGYpLCBGQUxTRSk7CiAKKyAgICBzZWxmLT5wcml2LT5mbGF0dGVuaW5nID0gdHJ1ZTsKKwog
ICAgIC8vIERlZmF1bHQgdXNlZCBieSBHcmFwaGljc0xheWVyLgogICAgIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldEFuY2hvclBvaW50KHNlbGYsIDAuNSwgMC41LCAwLjApOwogCkBAIC0yMDIsNyArMjA2
LDEyIEBAIHN0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckFwcGx5VHJhbnNmb3JtKENsdXR0
ZXJBY3RvciogYWN0b3IsIENvZ2xNYXRyaXgqIG1hCiAgICAgaWYgKHRyYW5zbGF0ZVggfHwgdHJh
bnNsYXRlWSkKICAgICAgICAgY29nbF9tYXRyaXhfdHJhbnNsYXRlKG1hdHJpeCwgdHJhbnNsYXRl
WCwgdHJhbnNsYXRlWSwgMCk7CiAKLSAgICBDTFVUVEVSX0FDVE9SX0NMQVNTKGdyYXBoaWNzX2xh
eWVyX2FjdG9yX3BhcmVudF9jbGFzcyktPmFwcGx5X3RyYW5zZm9ybShhY3RvciwgbWF0cml4KTsK
KyAgICBDb2dsTWF0cml4IG1vZGVsVmlld1RyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KCk7CisgICAgQ0xVVFRFUl9BQ1RPUl9DTEFTUyhncmFwaGljc19sYXllcl9hY3Rvcl9wYXJlbnRf
Y2xhc3MpLT5hcHBseV90cmFuc2Zvcm0oYWN0b3IsICZtb2RlbFZpZXdUcmFuc2Zvcm0pOworCisg
ICAgaWYgKHByaXYtPmZsYXR0ZW5pbmcpCisgICAgICAgIG1vZGVsVmlld1RyYW5zZm9ybSA9IFRy
YW5zZm9ybWF0aW9uTWF0cml4KCZtb2RlbFZpZXdUcmFuc2Zvcm0pLnRvMmRUcmFuc2Zvcm0oKTsK
KyAgICBjb2dsX21hdHJpeF9tdWx0aXBseShtYXRyaXgsIG1hdHJpeCwgJm1vZGVsVmlld1RyYW5z
Zm9ybSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBhaW50KENsdXR0ZXJB
Y3RvciogYWN0b3IpCkBAIC0yOTksNyArMzA4LDExIEBAIHN0YXRpYyB2b2lkIGRyYXdMYXllckNv
bnRlbnRzKENsdXR0ZXJBY3RvciogYWN0b3IsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIEdy
YXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NMYXllckFjdG9yTmV3KEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpMYXllclR5cGUgdHlwZSkKIHsKICAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0g
R1JBUEhJQ1NfTEFZRVJfQUNUT1IoZ19vYmplY3RfbmV3KEdSQVBISUNTX0xBWUVSX1RZUEVfQUNU
T1IsIDApKTsKLSAgICBsYXllci0+cHJpdi0+bGF5ZXJUeXBlID0gdHlwZTsKKyAgICBHcmFwaGlj
c0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IobGF5ZXIpLT5w
cml2OworCisgICAgcHJpdi0+bGF5ZXJUeXBlID0gdHlwZTsKKyAgICBpZiAocHJpdi0+bGF5ZXJU
eXBlID09IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllcikKKyAg
ICAgICAgcHJpdi0+ZmxhdHRlbmluZyA9IGZhbHNlOwogCiAgICAgcmV0dXJuIGxheWVyOwogfQpA
QCAtNDM2LDYgKzQ0OSwxNiBAQCB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhH
cmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBHcmFwaGljc0xheWVyQWN0bwogICAgIH0KIH0KIAor
dm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVGcm9tU3VwZXJMYXllcihHcmFwaGljc0xheWVy
QWN0b3IqIGxheWVyKQoreworICAgIENsdXR0ZXJBY3RvciogYWN0b3IgPSBDTFVUVEVSX0FDVE9S
KGxheWVyKTsKKyAgICBDbHV0dGVyQWN0b3IqIHBhcmVudEFjdG9yID0gY2x1dHRlcl9hY3Rvcl9n
ZXRfcGFyZW50KGFjdG9yKTsKKyAgICBpZiAoIXBhcmVudEFjdG9yKQorICAgICAgICByZXR1cm47
CisKKyAgICBjbHV0dGVyX2FjdG9yX3JlbW92ZV9jaGlsZChwYXJlbnRBY3RvciwgYWN0b3IpOwor
fQorCiBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIGdyYXBoaWNzTGF5ZXJBY3Rvckdl
dExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQogewogICAgIEdyYXBoaWNzTGF5
ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKQEAgLTQ5MSw2ICs1MTQsMTUgQEAg
Z2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJB
Y3RvciogbGF5ZXIpCiAgICAgcmV0dXJuIGxheWVyLT5wcml2LT5kcmF3c0NvbnRlbnQ7CiB9CiAK
K3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RmxhdHRlbmluZyhHcmFwaGljc0xheWVyQWN0b3Iq
IGxheWVyLCBnYm9vbGVhbiBmbGF0dGVuaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclBy
aXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAgICBpZiAoZmxhdHRlbmluZyA9PSBwcml2LT5m
bGF0dGVuaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5mbGF0dGVuaW5nID0gZmxh
dHRlbmluZzsKK30KKwogV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBncmFwaGlj
c0xheWVyQWN0b3JHZXRBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwg
Y29uc3QgU3RyaW5nIGtleSkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UGxh
dGZvcm1DbHV0dGVyQW5pbWF0aW9uKj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QobGF5ZXIp
LCBrZXkudXRmOCgpLmRhdGEoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKaW5kZXggOWEz
YzdhZWVmZTVmYmE2NjNjZDdkNDg5MzAwZjBjYjdjNDk1MjIwYy4uNzVkM2RiNGE0NzFjMmIxZDQ4
MTM1YTYxNmE3ZTZmYzc0OTAxNDQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oCkBAIC04
OSwxMSArODksMTQgQEAgZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWChHcmFw
aGljc0xheWVyQWN0b3IqKTsKIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShH
cmFwaGljc0xheWVyQWN0b3IqLCBmbG9hdCk7CiBmbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRU
cmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJBY3RvciopOwogZ2ludCBncmFwaGljc0xheWVyQWN0b3JH
ZXRuQ2hpbGRyZW4oR3JhcGhpY3NMYXllckFjdG9yKik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
clJlbW92ZUZyb21TdXBlckxheWVyKEdyYXBoaWNzTGF5ZXJBY3RvciopOwogV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSBncmFwaGljc0xheWVyQWN0b3JHZXRMYXllclR5
cGUoR3JhcGhpY3NMYXllckFjdG9yKik7CiB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldExheWVy
VHlwZShHcmFwaGljc0xheWVyQWN0b3IqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6
TGF5ZXJUeXBlKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUmVwbGFjZVN1YmxheWVyKEdyYXBo
aWNzTGF5ZXJBY3RvciosIENsdXR0ZXJBY3RvciosIENsdXR0ZXJBY3RvciopOwogdm9pZCBncmFw
aGljc0xheWVyQWN0b3JTZXRTdWJsYXllcnMoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckFjdG9yTGlzdCYpOwogZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0
RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciopOwogdm9pZCBncmFwaGljc0xheWVyQWN0
b3JTZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgZ2Jvb2xlYW4gZHJhd3NDb250
ZW50KTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RmxhdHRlbmluZyhHcmFwaGljc0xheWVy
QWN0b3IqLCBnYm9vbGVhbiBmbGF0dGVuaW5nKTsKIAogV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVy
QW5pbWF0aW9uKiBncmFwaGljc0xheWVyQWN0b3JHZXRBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NM
YXllckFjdG9yKiwgY29uc3QgU3RyaW5nKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVy
LmNwcAppbmRleCBhYjA0Y2M0YWJjNjVmZTM2ZjczYTI0NGM0NzViYTU0ZGEzMWU3ZTRkLi5iMjg5
M2Y5YWU5NDE0NTU5MDEwMjRkNjlkZGMxY2QwOTYwZjcwYmVlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNz
TGF5ZXJDbHV0dGVyLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUg
PGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTI5Nyw2ICsyOTgs
MTEgQEAgR3JhcGhpY3NMYXllckNsdXR0ZXI6On5HcmFwaGljc0xheWVyQ2x1dHRlcigpCiAgICAg
ICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChtX2xheWVyLmdldCgpLCAwKTsKICAgICAg
ICAgZ19pZGxlX2FkZChpZGxlRGVzdHJveSwgbV9sYXllci5sZWFrUmVmKCkpOwogICAgIH0KKwor
ICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikgeworICAgICAgICBncmFwaGljc0xheWVyQWN0b3JT
ZXRDbGllbnQobV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCksIDApOworICAgICAgICBnX2lkbGVfYWRk
KGlkbGVEZXN0cm95LCBtX3N0cnVjdHVyYWxMYXllci5sZWFrUmVmKCkpOworICAgIH0KIH0KIAog
dm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCkBA
IC0zMDgsNyArMzE0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmFtZShjb25z
dCBTdHJpbmcmIG5hbWUpCiAKIENsdXR0ZXJBY3RvciogR3JhcGhpY3NMYXllckNsdXR0ZXI6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBDTFVUVEVSX0FDVE9SKG1fbGF5ZXIu
Z2V0KCkpOworICAgIHJldHVybiBDTFVUVEVSX0FDVE9SKHByaW1hcnlMYXllcigpKTsKIH0KIAog
dm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNwbGF5KCkKQEAgLTM4OCw2ICsz
OTQsMjAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0KQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChUcmFu
c2Zvcm1DaGFuZ2VkKTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6bW92ZU9yQ29w
eUFuaW1hdGlvbnMoTW92ZU9yQ29weSBvcGVyYXRpb24sIEdyYXBoaWNzTGF5ZXJBY3RvciogZnJv
bUxheWVyLCBHcmFwaGljc0xheWVyQWN0b3IqIHRvTGF5ZXIpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0UHJlc2VydmVzM0QoYm9v
bCBwcmVzZXJ2ZXMzRCkKK3sKKyAgICBpZiAocHJlc2VydmVzM0QgPT0gbV9wcmVzZXJ2ZXMzRCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QocHJl
c2VydmVzM0QpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChQcmVzZXJ2ZXMzRENoYW5n
ZWQpOworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXREcmF3c0NvbnRlbnQoYm9v
bCBkcmF3c0NvbnRlbnQpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCA9PSBtX2RyYXdzQ29udGVu
dCkKQEAgLTU1NCwxMyArNTc0LDE0IEBAIEZsb2F0UG9pbnQgR3JhcGhpY3NMYXllckNsdXR0ZXI6
OmNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdlU2NhbGUpCiB2b2lkIEdy
YXBoaWNzTGF5ZXJDbHV0dGVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0
JiBjbGlwUmVjdCkKIHsKICAgICBUcmFuc2Zvcm1TdGF0ZSBzdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6
VW5hcHBseUludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24sIEZsb2F0UXVhZChjbGlwUmVjdCkpOwot
ICAgIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoc3RhdGUpOworICAgIHJlY3Vyc2l2ZUNvbW1pdENo
YW5nZXMoQ29tbWl0U3RhdGUoKSwgc3RhdGUpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IFRyYW5zZm9ybVN0YXRlJiBzdGF0ZSwg
ZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZl
VG9CYXNlLCBib29sIGFmZmVjdGVkQnlQYWdlU2NhbGUpCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IENvbW1pdFN0YXRlJiBjb21taXRTdGF0
ZSwgY29uc3QgVHJhbnNmb3JtU3RhdGUmIHN0YXRlLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIGJvb2wgYWZmZWN0ZWRCeVBh
Z2VTY2FsZSkKIHsKICAgICAvLyBGSVhNRTogU2F2ZSB0aGUgc3RhdGUgYmVmb3JlIHNlbmRpbmcg
ZG93biB0byBraWRzIGFuZCByZXN0b3JlIGl0IGFmdGVyCiAgICAgVHJhbnNmb3JtU3RhdGUgbG9j
YWxTdGF0ZSA9IHN0YXRlOworICAgIENvbW1pdFN0YXRlIGNoaWxkQ29tbWl0U3RhdGUgPSBjb21t
aXRTdGF0ZTsKIAogICAgIGlmIChhcHBsaWVzUGFnZVNjYWxlKCkpIHsKICAgICAgICAgcGFnZVNj
YWxlRmFjdG9yID0gdGhpcy0+cGFnZVNjYWxlRmFjdG9yKCk7CkBAIC01NzksNyArNjAwLDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhjb25zdCBU
cmFuc2Zvcm1TdGF0ZSYgc3RhdGUsIGYKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
Q2hpbGRyZW47ICsraSkgewogICAgICAgICBHcmFwaGljc0xheWVyQ2x1dHRlciogY3VycmVudENo
aWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNsdXR0ZXIqPihjaGlsZExheWVyc1tpXSk7
Ci0gICAgICAgIGN1cnJlbnRDaGlsZC0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhsb2NhbFN0YXRl
LCBwYWdlU2NhbGVGYWN0b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9uLCBhZmZlY3RlZEJ5UGFnZVNj
YWxlKTsKKyAgICAgICAgY3VycmVudENoaWxkLT5yZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNoaWxk
Q29tbWl0U3RhdGUsIGxvY2FsU3RhdGUsIHBhZ2VTY2FsZUZhY3RvciwgYmFzZVJlbGF0aXZlUG9z
aXRpb24sIGFmZmVjdGVkQnlQYWdlU2NhbGUpOwogICAgIH0KIAogICAgIGNvbW1pdExheWVyQ2hh
bmdlc0FmdGVyU3VibGF5ZXJzKCk7CkBAIC01OTgsNiArNjE5LDkgQEAgdm9pZCBHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMoKQogICAgIGlmICgh
bV91bmNvbW1pdHRlZENoYW5nZXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChtX3VuY29t
bWl0dGVkQ2hhbmdlcyAmIENoaWxkcmVuQ2hhbmdlZCkKKyAgICAgICAgdXBkYXRlU3VibGF5ZXJM
aXN0KCk7CisKICAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcyA9IE5vQ2hhbmdlOwogfQogdm9pZCBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6bm90ZVN1YmxheWVyc0NoYW5nZWQoKQpAQCAtNjE4LDM0ICs2
NDIsNDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJDaGFuZ2VzQmVm
b3JlU3VibGF5ZXJzKGZsb2F0IHBhZ2VTY2FsZUZhY3QKICAgICBpZiAoIW1fdW5jb21taXR0ZWRD
aGFuZ2VzKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMg
JiBOYW1lQ2hhbmdlZCkKLSAgICAgICAgdXBkYXRlTGF5ZXJOYW1lcygpOwotCi0gICAgaWYgKG1f
dW5jb21taXR0ZWRDaGFuZ2VzICYgQ2hpbGRyZW5DaGFuZ2VkKQotICAgICAgICB1cGRhdGVTdWJs
YXllckxpc3QoKTsKKyAgICAvLyBOZWVkIHRvIGhhbmRsZSBQcmVzZXJ2ZXMzRENoYW5nZWQgZmly
c3QsIGJlY2F1c2UgaXQgYWZmZWN0cyB3aGljaCBsYXllcnMgc3Vic2VxdWVudCBwcm9wZXJ0aWVz
IGFyZSBhcHBsaWVkIHRvCisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgUHJlc2VydmVz
M0RDaGFuZ2VkKQorICAgICAgICB1cGRhdGVTdHJ1Y3R1cmFsTGF5ZXIoKTsKIAogICAgIGlmICht
X3VuY29tbWl0dGVkQ2hhbmdlcyAmIEdlb21ldHJ5Q2hhbmdlZCkKICAgICAgICAgdXBkYXRlR2Vv
bWV0cnkocGFnZVNjYWxlRmFjdG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKIAotICAgIGlm
IChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIFRyYW5zZm9ybUNoYW5nZWQpCi0gICAgICAgIHVwZGF0
ZVRyYW5zZm9ybSgpOwotCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgRHJhd3NDb250
ZW50Q2hhbmdlZCkKICAgICAgICAgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQocGFnZVNjYWxlRmFj
dG9yLCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKTsKIAotICAgIGlmIChtX3VuY29tbWl0dGVkQ2hh
bmdlcyAmIERpcnR5UmVjdHNDaGFuZ2VkKQotICAgICAgICByZXBhaW50TGF5ZXJEaXJ0eVJlY3Rz
KCk7CisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgTmFtZUNoYW5nZWQpCisgICAgICAg
IHVwZGF0ZUxheWVyTmFtZXMoKTsKKworICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIFRy
YW5zZm9ybUNoYW5nZWQpCisgICAgICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwogCiAgICAgaWYgKG1f
dW5jb21taXR0ZWRDaGFuZ2VzICYgT3BhY2l0eUNoYW5nZWQpCiAgICAgICAgIHVwZGF0ZU9wYWNp
dHlPbkxheWVyKCk7CiAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBBbmltYXRpb25D
aGFuZ2VkKQogICAgICAgICB1cGRhdGVBbmltYXRpb25zKCk7CisKKyAgICBpZiAobV91bmNvbW1p
dHRlZENoYW5nZXMgJiBEaXJ0eVJlY3RzQ2hhbmdlZCkKKyAgICAgICAgcmVwYWludExheWVyRGly
dHlSZWN0cygpOworCisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQ2hpbGRyZW5DaGFu
Z2VkKSB7CisgICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOworICAgICAgICAvLyBTdWJsYXll
cnMgbWF5IHNldCB0aGlzIGZsYWcgYWdhaW4sIHNvIGNsZWFyIGl0IHRvIGF2b2lkIGFsd2F5cyB1
cGRhdGluZyBzdWJsYXllcnMgaW4gY29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMoKS4K
KyAgICAgICAgbV91bmNvbW1pdHRlZENoYW5nZXMgJj0gfkNoaWxkcmVuQ2hhbmdlZDsKKyAgICB9
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZUdlb21ldHJ5KGZsb2F0IHBh
Z2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkK
IHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0IHBhZ2Ugc2NhbGluZy4KKyAgICBpZiAo
bV9zdHJ1Y3R1cmFsTGF5ZXIpIHsKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcG9zaXRpb24o
Q0xVVFRFUl9BQ1RPUihtX3N0cnVjdHVyYWxMYXllci5nZXQoKSksIG1fcG9zaXRpb24ueCgpLCBt
X3Bvc2l0aW9uLnkoKSk7CisgICAgICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3NpemUoQ0xVVFRFUl9B
Q1RPUihtX3N0cnVjdHVyYWxMYXllci5nZXQoKSksIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpOworICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNob3JQb2ludChtX3N0cnVj
dHVyYWxMYXllci5nZXQoKSwgbV9hbmNob3JQb2ludC54KCksIG1fYW5jaG9yUG9pbnQueSgpLCBt
X2FuY2hvclBvaW50LnooKSk7CisgICAgfQorCiAgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcG9zaXRp
b24oQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSwgbV9wb3NpdGlvbi54KCksIG1fcG9zaXRp
b24ueSgpKTsKICAgICBjbHV0dGVyX2FjdG9yX3NldF9zaXplKENMVVRURVJfQUNUT1IobV9sYXll
ci5nZXQoKSksIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwogICAgIGdyYXBoaWNz
TGF5ZXJBY3RvclNldEFuY2hvclBvaW50KG1fbGF5ZXIuZ2V0KCksIG1fYW5jaG9yUG9pbnQueCgp
LCBtX2FuY2hvclBvaW50LnkoKSwgbV9hbmNob3JQb2ludC56KCkpOwpAQCAtNjU1LDE5ICs2OTIs
MzAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW4KIC8vIFNvIHdoZW5ldmVyIHRoZSBsaXN0IG9m
IGNoaWxkIGxheWVyIGNoYW5nZXMsIHRoZSBsaXN0IG9mIEdyYXBoaWNzTGF5ZXJBY3RvciBzaG91
bGQgYmUgdXBkYXRlZCBhY2NvcmRpbmdseS4KIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnVw
ZGF0ZVN1YmxheWVyTGlzdCgpCiB7Ci0gICAgR3JhcGhpY3NMYXllckFjdG9yTGlzdCBuZXdTdWJs
YXllcnM7Ci0gICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRMYXllcnMgPSBj
aGlsZHJlbigpOworICAgIEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3Qgc3RydWN0dXJhbExheWVyQ2hp
bGRyZW47CisgICAgR3JhcGhpY3NMYXllckFjdG9yTGlzdCBwcmltYXJ5TGF5ZXJDaGlsZHJlbjsK
IAorICAgIEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3QmIGNoaWxkTGlzdEZvclN1YmxheWVycyA9IG1f
c3RydWN0dXJhbExheWVyID8gc3RydWN0dXJhbExheWVyQ2hpbGRyZW4gOiBwcmltYXJ5TGF5ZXJD
aGlsZHJlbjsKKworICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikKKyAgICAgICAgc3RydWN0dXJh
bExheWVyQ2hpbGRyZW4uYXBwZW5kKG1fbGF5ZXIpOworCisgICAgY29uc3QgVmVjdG9yPEdyYXBo
aWNzTGF5ZXIqPiYgY2hpbGRMYXllcnMgPSBjaGlsZHJlbigpOwogICAgIHNpemVfdCBudW1DaGls
ZHJlbiA9IGNoaWxkTGF5ZXJzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUNoaWxkcmVuOyArK2kpIHsKICAgICAgICAgR3JhcGhpY3NMYXllckNsdXR0ZXIqIGN1cnJlbnRD
aGlsZCA9IHN0YXRpY19jYXN0PEdyYXBoaWNzTGF5ZXJDbHV0dGVyKj4oY2hpbGRMYXllcnNbaV0p
OwogICAgICAgICBHcmFwaGljc0xheWVyQWN0b3IqIGNoaWxkTGF5ZXIgPSBjdXJyZW50Q2hpbGQt
PmxheWVyRm9yU3VwZXJsYXllcigpOwogICAgICAgICBBU1NFUlQoR1JBUEhJQ1NfTEFZRVJfSVNf
QUNUT1IoY2hpbGRMYXllcikpOworICAgICAgICBjaGlsZExpc3RGb3JTdWJsYXllcnMuYXBwZW5k
KGNoaWxkTGF5ZXIpOwogCi0gICAgICAgIG5ld1N1YmxheWVycy5hcHBlbmQoY2hpbGRMYXllcik7
CisgICAgICAgIC8vIElmIHRoZSBwcmVzZXJ2ZXMzRCBvZiBhIGxheWVyIGlzIGZhbHNlLCBpdHNl
bGYgYW5kIGl0cyBpbW1lZGlhdGUgY2hpbGRyZW4gc2hvdWxkIGJlIGZsYXR0ZW5lZC4KKyAgICAg
ICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0RmxhdHRlbmluZyhjaGlsZExheWVyLCAhKHByZXNlcnZl
czNEKCkgfHwgY3VycmVudENoaWxkLT5wcmVzZXJ2ZXMzRCgpKSk7CiAgICAgfQogCi0gICAgZ3Jh
cGhpY3NMYXllckFjdG9yU2V0U3VibGF5ZXJzKG1fbGF5ZXIuZ2V0KCksIG5ld1N1YmxheWVycyk7
CisgICAgaWYgKG1fc3RydWN0dXJhbExheWVyKQorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JT
ZXRTdWJsYXllcnMobV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCksIHN0cnVjdHVyYWxMYXllckNoaWxk
cmVuKTsKKworICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhtX2xheWVyLmdldCgp
LCBwcmltYXJ5TGF5ZXJDaGlsZHJlbik7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6
OnVwZGF0ZUxheWVyTmFtZXMoKQpAQCAtNjgxLDYgKzcyOSw5MiBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3RyYW5z
Zm9ybShDTFVUVEVSX0FDVE9SKHByaW1hcnlMYXllcigpKSwgJm1hdHJpeCk7CiB9CiAKK3ZvaWQg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZVN0cnVjdHVyYWxMYXllcigpCit7CisgICAgZW5z
dXJlU3RydWN0dXJhbExheWVyKHN0cnVjdHVyYWxMYXllclB1cnBvc2UoKSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFsTGF5
ZXJQdXJwb3NlIHB1cnBvc2UpCit7CisgICAgY29uc3QgTGF5ZXJDaGFuZ2VGbGFncyBzdHJ1Y3R1
cmFsTGF5ZXJDaGFuZ2VGbGFncyA9IE5hbWVDaGFuZ2VkCisgICAgICAgIHwgR2VvbWV0cnlDaGFu
Z2VkCisgICAgICAgIHwgVHJhbnNmb3JtQ2hhbmdlZAorICAgICAgICB8IENoaWxkcmVuVHJhbnNm
b3JtQ2hhbmdlZAorICAgICAgICB8IENoaWxkcmVuQ2hhbmdlZAorICAgICAgICB8IEJhY2tmYWNl
VmlzaWJpbGl0eUNoYW5nZWQKKyAgICAgICAgfCBPcGFjaXR5Q2hhbmdlZDsKKworICAgIGlmIChw
dXJwb3NlID09IE5vU3RydWN0dXJhbExheWVyKSB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyYWxM
YXllcikgeworICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdHJhbnNmb3JtTGF5ZXIgaW4gdGhl
IHBhcmVudCB3aXRoIHRoaXMgbGF5ZXIuCisgICAgICAgICAgICBncmFwaGljc0xheWVyQWN0b3JS
ZW1vdmVGcm9tU3VwZXJMYXllcihtX2xheWVyLmdldCgpKTsKKworICAgICAgICAgICAgLy8gSWYg
bV9sYXllciBkb2Vzbid0IGhhdmUgYSBwYXJlbnQsIGl0IG1lYW5zIGl0J3MgdGhlIHJvb3QgbGF5
ZXIgYW5kCisgICAgICAgICAgICAvLyBpcyBsaWtlbHkgaG9zdGVkIGJ5IHNvbWV0aGluZyB0aGF0
IGlzIG5vdCBleHBlY3RpbmcgdG8gYmUgY2hhbmdlZAorICAgICAgICAgICAgQ2x1dHRlckFjdG9y
KiBwYXJlbnRBY3RvciA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3BhcmVudChDTFVUVEVSX0FDVE9SKG1f
c3RydWN0dXJhbExheWVyLmdldCgpKSk7CisgICAgICAgICAgICBBU1NFUlQocGFyZW50QWN0b3Ip
OworICAgICAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yUmVwbGFjZVN1YmxheWVyKEdSQVBISUNT
X0xBWUVSX0FDVE9SKHBhcmVudEFjdG9yKSwgQ0xVVFRFUl9BQ1RPUihtX3N0cnVjdHVyYWxMYXll
ci5nZXQoKSksIENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSkpOworCisgICAgICAgICAgICBt
b3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlLCBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSwgbV9sYXll
ci5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIHN0cnVjdHVyYWwgbGF5ZXIu
CisgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IDA7CisKKyAgICAgICAgICAgIG1fdW5j
b21taXR0ZWRDaGFuZ2VzIHw9IHN0cnVjdHVyYWxMYXllckNoYW5nZUZsYWdzOworICAgICAgICB9
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIHN0cnVjdHVyYWxMYXllckNoYW5n
ZWQgPSBmYWxzZTsKKyAgICBpZiAocHVycG9zZSA9PSBTdHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2
ZXMzRCkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmFsTGF5ZXIgJiYgKGdyYXBoaWNzTGF5ZXJB
Y3RvckdldExheWVyVHlwZShtX3N0cnVjdHVyYWxMYXllci5nZXQoKSkgIT0gR3JhcGhpY3NMYXll
ckNsdXR0ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyKSkKKyAgICAgICAgICAgIG1fc3RydWN0
dXJhbExheWVyID0gMDsKKworICAgICAgICBpZiAoIW1fc3RydWN0dXJhbExheWVyKSB7CisgICAg
ICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGll
bnQoR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyLCB0aGlzKTsK
KyAgICAgICAgICAgIHN0cnVjdHVyYWxMYXllckNoYW5nZWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJhbExheWVyICYmIChncmFwaGljc0xh
eWVyQWN0b3JHZXRMYXllclR5cGUobV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkpICE9IEdyYXBoaWNz
TGF5ZXJDbHV0dGVyOjpMYXllclR5cGVMYXllcikpCisgICAgICAgICAgICBtX3N0cnVjdHVyYWxM
YXllciA9IDA7CisKKyAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllcikgeworICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSBncmFwaGljc0xheWVyQWN0b3JOZXdXaXRoQ2xpZW50KEdy
YXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVMYXllciwgdGhpcyk7CisgICAgICAgICAgICBz
dHJ1Y3R1cmFsTGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghc3RydWN0dXJhbExheWVyQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV91bmNv
bW1pdHRlZENoYW5nZXMgfD0gc3RydWN0dXJhbExheWVyQ2hhbmdlRmxhZ3M7CisKKyAgICAvLyBX
ZSd2ZSBjaGFuZ2VkIHRoZSBsYXllciB0aGF0IG91ciBwYXJlbnQgYWRkZWQgdG8gaXRzIHN1Ymxh
eWVyIGxpc3QsIHNvIHRlbGwgaXQgdG8gdXBkYXRlCisgICAgLy8gc3VibGF5ZXJzIGFnYWluIGlu
IGl0cyBjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpLgorICAgIHN0YXRpY19jYXN0
PEdyYXBoaWNzTGF5ZXJDbHV0dGVyKj4ocGFyZW50KCkpLT5ub3RlU3VibGF5ZXJzQ2hhbmdlZCgp
OworCisgICAgLy8gU2V0IHByb3BlcnRpZXMgb2YgbV9sYXllciB0byB0aGVpciBkZWZhdWx0IHZh
bHVlcywgc2luY2UgdGhlc2UgYXJlIGV4cHJlc3NlZCBvbiBvbiB0aGUgc3RydWN0dXJhbCBsYXll
ci4KKyAgICBGbG9hdFBvaW50IHBvaW50KDAsIDApOworICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQ
b2ludCgwLjVmLCAwLjVmLCAwKTsKKyAgICBjbHV0dGVyX2FjdG9yX3NldF9wb3NpdGlvbihDTFVU
VEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpLCBwb2ludC54KCksIHBvaW50LnkoKSk7CisgICAgZ3Jh
cGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQobV9sYXllci5nZXQoKSwgYW5jaG9yUG9pbnQu
eCgpLCBhbmNob3JQb2ludC55KCksIGFuY2hvclBvaW50LnooKSk7CisKKyAgICBDb2dsTWF0cml4
IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgY2x1dHRlcl9hY3Rvcl9zZXRf
dHJhbnNmb3JtKENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSksICZtYXRyaXgpOworCisgICAg
Y2x1dHRlcl9hY3Rvcl9zZXRfb3BhY2l0eShDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpLCAy
NTUpOworCisgICAgbW92ZU9yQ29weUFuaW1hdGlvbnMoTW92ZSwgbV9sYXllci5nZXQoKSwgbV9z
dHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkpOworfQorCitHcmFwaGljc0xheWVyQ2x1dHRlcjo6U3RydWN0
dXJhbExheWVyUHVycG9zZSBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c3RydWN0dXJhbExheWVyUHVy
cG9zZSgpIGNvbnN0Cit7CisgICAgaWYgKHByZXNlcnZlczNEKCkpCisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2ZXMzRDsKKworICAgIHJldHVybiBOb1N0cnVjdHVyYWxM
YXllcjsKK30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlTGF5ZXJEcmF3c0Nv
bnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJl
bGF0aXZlVG9CYXNlKQogewogICAgIGlmIChtX2RyYXdzQ29udGVudCkgewpAQCAtMTA5OSw3ICsx
MjMzLDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0QW5pbWF0aW9uS2V5ZnJhbWVz
KGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUwKIAogR3JhcGhpY3NMYXllckFjdG9yKiBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6bGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9sYXllci5nZXQoKTsKKyAgICByZXR1cm4gbV9zdHJ1Y3R1cmFsTGF5ZXIgPyBtX3N0
cnVjdHVyYWxMYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7CiB9CiAKIEdyYXBoaWNzTGF5ZXJB
Y3RvciogR3JhcGhpY3NMYXllckNsdXR0ZXI6OmFuaW1hdGVkTGF5ZXIoQW5pbWF0ZWRQcm9wZXJ0
eUlEIHByb3BlcnR5KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oCmluZGV4IDQy
MWFhOTYxODQ4YWE0Y2JkNGJiNjg0OTU3NmY5ZmE3NzZhODIwMzUuLjdmMzBmMTQ5MWU4NTQxMzFh
MTZkODRmZGI5OGNkYzA1NjYwOTJkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmgK
QEAgLTc5LDEzICs3OSwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlz
cGxheSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCk7CisKICAg
ICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29u
c3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFu
aW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpOwogCiAgICAgdmlydHVhbCB2b2lk
IGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIHZv
aWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCi0gICAgdm9pZCBy
ZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IFRyYW5zZm9ybVN0YXRlJiwgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yID0gMSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSA9
IEZsb2F0UG9pbnQoKSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlID0gZmFsc2UpOworICAgIHN0
cnVjdCBDb21taXRTdGF0ZSB7CisgICAgICAgIGJvb2wgYW5jZXN0b3JIYXNUcmFuc2Zvcm1Bbmlt
YXRpb247CisgICAgICAgIENvbW1pdFN0YXRlKCkKKyAgICAgICAgICAgIDogYW5jZXN0b3JIYXNU
cmFuc2Zvcm1BbmltYXRpb24oZmFsc2UpCisgICAgICAgIHsgfQorICAgIH07CisgICAgdm9pZCBy
ZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IENvbW1pdFN0YXRlJiwgY29uc3QgVHJhbnNmb3Jt
U3RhdGUmLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IgPSAxLCBjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvblJlbGF0aXZlVG9CYXNlID0gRmxvYXRQb2ludCgpLCBib29sIGFmZmVjdGVkQnlQYWdlU2Nh
bGUgPSBmYWxzZSk7CiAKIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBjb21wdXRlUG9zaXRpb25S
ZWxhdGl2ZVRvQmFzZShmbG9hdCYgcGFnZVNjYWxlKSBjb25zdDsKQEAgLTEwMyw3ICsxMTEsNyBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNsdXR0ZXJMYXllckFuaW1hdGlv
blN0YXJ0ZWQoZG91YmxlIGJlZ2luVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2x1
dHRlckxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBj
bGlwKTsKIAotICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogcHJpbWFyeUxheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllci5nZXQoKTsgfQorICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogcHJpbWFyeUxh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkgPyBtX3N0cnVjdHVy
YWxMYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KICAgICBHcmFwaGljc0xheWVyQWN0b3Iq
IGxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0OwogICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogYW5p
bWF0ZWRMYXllcihBbmltYXRlZFByb3BlcnR5SUQpIGNvbnN0OwogCkBAIC0xMjYsNiArMTM0LDkg
QEAgcHJpdmF0ZToKICAgICBib29sIHNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIFBsYXRmb3JtQ2x1dHRlckFu
aW1hdGlvbiosIGludCBmdW5jdGlvbkluZGV4LCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlv
blR5cGUsIGJvb2wgaXNNYXRyaXhBbmltYXRpb24sIGNvbnN0IEludFNpemUmIGJveFNpemUpOwog
ICAgIGJvb2wgc2V0VHJhbnNmb3JtQW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiwgaW50
IGZ1bmN0aW9uSW5kZXgsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgYm9vbCBp
c01hdHJpeEFuaW1hdGlvbiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSk7CiAKKyAgICBlbnVtIE1v
dmVPckNvcHkgeyBNb3ZlLCBDb3B5IH07CisgICAgdm9pZCBtb3ZlT3JDb3B5QW5pbWF0aW9ucyhN
b3ZlT3JDb3B5LCBHcmFwaGljc0xheWVyQWN0b3IqIGZyb21MYXllciwgR3JhcGhpY3NMYXllckFj
dG9yKiB0b0xheWVyKTsKKwogICAgIGJvb2wgYXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlvbnMo
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiwgY29u
c3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBjb25zdCBJbnRTaXpl
JiBib3hTaXplLCBpbnQgYW5pbWF0aW9uSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sIGlz
TWF0cml4QW5pbWF0aW9uKTsKIAogICAgIGVudW0gTGF5ZXJDaGFuZ2UgewpAQCAtMTQ3LDEyICsx
NTgsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgQ29udGVudHNJbWFnZUNoYW5nZWQgPSAxIDw8IDE1
LAogICAgICAgICBDb250ZW50c01lZGlhTGF5ZXJDaGFuZ2VkID0gMSA8PCAxNiwKICAgICAgICAg
Q29udGVudHNDYW52YXNMYXllckNoYW5nZWQgPSAxIDw8IDE3LAotICAgICAgICBDb250ZW50c1Jl
Y3RDaGFuZ2VkID0gMSA8PCAxOCwKLSAgICAgICAgTWFza0xheWVyQ2hhbmdlZCA9IDEgPDwgMTks
Ci0gICAgICAgIFJlcGxpY2F0ZWRMYXllckNoYW5nZWQgPSAxIDw8IDIwLAotICAgICAgICBDb250
ZW50c05lZWRzRGlzcGxheSA9IDEgPDwgMjEsCi0gICAgICAgIEFjY2VsZXJhdGVzRHJhd2luZ0No
YW5nZWQgPSAxIDw8IDIyLAotICAgICAgICBDb250ZW50c1NjYWxlQ2hhbmdlZCA9IDEgPDwgMjMK
KyAgICAgICAgQ29udGVudHNDb2xvckxheWVyQ2hhbmdlZCA9IDEgPDwgMTgsCisgICAgICAgIENv
bnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDE5LAorICAgICAgICBNYXNrTGF5ZXJDaGFuZ2VkID0g
MSA8PCAyMCwKKyAgICAgICAgUmVwbGljYXRlZExheWVyQ2hhbmdlZCA9IDEgPDwgMjEsCisgICAg
ICAgIENvbnRlbnRzTmVlZHNEaXNwbGF5ID0gMSA8PCAyMiwKKyAgICAgICAgQWNjZWxlcmF0ZXNE
cmF3aW5nQ2hhbmdlZCA9IDEgPDwgMjMsCisgICAgICAgIENvbnRlbnRzU2NhbGVDaGFuZ2VkID0g
MSA8PCAyNCwKKyAgICAgICAgQ29udGVudHNWaXNpYmlsaXR5Q2hhbmdlZCA9IDEgPDwgMjUsCisg
ICAgICAgIFZpc2libGVSZWN0Q2hhbmdlZCA9IDEgPDwgMjYsCisgICAgICAgIEZpbHRlcnNDaGFu
Z2VkID0gMSA8PCAyNywKKyAgICAgICAgRGVidWdJbmRpY2F0b3JzQ2hhbmdlZCA9IDEgPDwgMjgK
ICAgICB9OwogCiAgICAgdHlwZWRlZiB1bnNpZ25lZCBMYXllckNoYW5nZUZsYWdzOwpAQCAtMTYw
LDYgKzE3Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RlU3VibGF5ZXJzQ2hhbmdlZCgpOwog
CiAgICAgdm9pZCB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICB2b2lkIHVwZGF0ZVN0
cnVjdHVyYWxMYXllcigpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJOYW1lcygpOwogICAgIHZvaWQg
dXBkYXRlU3VibGF5ZXJMaXN0KCk7CiAgICAgdm9pZCB1cGRhdGVHZW9tZXRyeShmbG9hdCBwaXhl
bEFsaWdubWVudFNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNl
KTsKQEAgLTE2OCw5ICsxODUsMTggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQW5pbWF0
aW9ucygpOwogCisgICAgZW51bSBTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHsKKyAgICAgICAgTm9T
dHJ1Y3R1cmFsTGF5ZXIgPSAwLAorICAgICAgICBTdHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2ZXMz
RCwKKyAgICAgICAgU3RydWN0dXJhbExheWVyRm9yUmVwbGljYUZsYXR0ZW5pbmcKKyAgICB9Owor
ICAgIHZvaWQgZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UpOwor
ICAgIFN0cnVjdHVyYWxMYXllclB1cnBvc2Ugc3RydWN0dXJhbExheWVyUHVycG9zZSgpIGNvbnN0
OworCiAgICAgdm9pZCByZXBhaW50TGF5ZXJEaXJ0eVJlY3RzKCk7CiAKICAgICBHUmVmUHRyPEdy
YXBoaWNzTGF5ZXJBY3Rvcj4gbV9sYXllcjsKKyAgICBHUmVmUHRyPEdyYXBoaWNzTGF5ZXJBY3Rv
cj4gbV9zdHJ1Y3R1cmFsTGF5ZXI7IC8vIEEgbGF5ZXIgdXNlZCBmb3Igc3RydWN0dXJhbCByZWFz
b25zLCBsaWtlIHByZXNlcnZlcy0zZCBvciByZXBsaWNhLWZsYXR0ZW5pbmcuIElzIHRoZSBwYXJl
bnQgb2YgbV9sYXllci4KIAogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZGlydHlSZWN0czsKICAg
ICBMYXllckNoYW5nZUZsYWdzIG1fdW5jb21taXR0ZWRDaGFuZ2VzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195839</attachid>
            <date>2013-03-29 21:12:13 -0700</date>
            <delta_ts>2013-04-01 23:44:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113318-20130330131209.patch</filename>
            <type>text/plain</type>
            <size>24529</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3MjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODE5ZTk0MWI1NzRjOTZj
MjBmMThmNmZmODI2OTcxYTRiZmIxMzhiZS4uOGRjNmRjOGQ4OWY1OGIzMGI0OTY4NjZmMzkxZmEy
Nzg2MzdiZWJjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTAzLTI5ICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2sub2hAY29sbGFib3JhLmNvbT4KKworICAgICAgICBbR1RLXVtB
Q10gU3VwcG9ydCBwcmVzZXJ2ZXMzRCBjc3MgcHJvcGVydHkgZm9yIGNsdXR0ZXIgYWMgYmFja2Vu
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzMx
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYnJpbmdzIHByZXNlcnZlLTNEIGNzcyBwcm9wZXJ0eSBzdXBwb3J0IHRvIFdlYktpdEd0
aysgd2l0aCBjbHV0dGVyIGFjIGJhY2tlZC4KKyAgICAgICAgTW9zdCBvZiBhbGwgY29kZXMgYXJl
IGJhc2VkIG9uIE1hYyBwb3J0J3MgaW1wbGVtZW50YXRpb24uIFRoZSBjb3JlIGNvbmNlcHQgaXMg
dGhhdAorICAgICAgICBpZiBhIGxheWVyIGhhcyBwcmVzZXJ2ZS0zZCBwcm9wZXJ0eSBmYWxzZSwg
d2UgbWFyayBpdHNlbGYgYW5kIGl0cyBpbW1lZGlhdGUgY2hpbGRyZW4KKyAgICAgICAgdG8gbWFr
ZSB0aGVtIGZsYXR0ZW4uIEFuZCB0aGVuIHdlIHJlbW92ZSAzRCBmYWN0b3IgaW4gYSBtb2RlbFZp
ZXcgbWF0cml4CisgICAgICAgIHdoZW4gYXBwbHlpbmcgaXQgdG8gZWFjaCBhY3Rvci4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyBjb3ZlcmVkIHdpdGggZXhpc3RpbmcgQUMgdGVz
dHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJB
Y3Rvci5jcHA6CisgICAgICAgIChfR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSk6CisgICAgICAg
IChncmFwaGljc19sYXllcl9hY3Rvcl9pbml0KToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rv
ckFwcGx5VHJhbnNmb3JtKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyk6CisgICAg
ICAgIChncmFwaGljc0xheWVyQWN0b3JSZW1vdmVGcm9tU3VwZXJMYXllcik6CisgICAgICAgIChn
cmFwaGljc0xheWVyQWN0b3JTZXRGbGF0dGVuaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6On5HcmFwaGljc0xheWVyQ2x1dHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6bW92ZU9yQ29weUFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRl
cjo6c2V0UHJlc2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hhbmdl
c0JlZm9yZVN1YmxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRl
cjo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0
ZXI6OnVwZGF0ZVN1YmxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2x1dHRlcjo6dXBkYXRlU3RydWN0dXJhbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnN0cnVjdHVyYWxMYXllclB1cnBvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmxheWVyRm9yU3VwZXJsYXllcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5o
OgorICAgICAgICAoQ29tbWl0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNsdXR0ZXI6OkNvbW1pdFN0YXRlOjpDb21taXRTdGF0ZSk6CisgICAgICAgIChHcmFwaGljc0xh
eWVyQ2x1dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cHJp
bWFyeUxheWVyKToKKwogMjAxMy0wMy0yOSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE0MzEwMik6IElnbm9yZSB0YWJsZSBjZWxsJ3MgaGVp
Z2h0IGF0dHJpYnV0ZSB3aGVuIGNoZWNraW5nIGlmIGNvbnRhaW5pbmcgYmxvY2sgaGFzIGF1dG8g
aGVpZ2h0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwCmluZGV4IDA3ZmRiNDI0NzEyNTRi
YWYwOTNjOGE3MjI1MDM2NzI2OGViMTQ2M2QuLmJkYmY3YjcwZTQxMDIwNTQ5MmY5N2EwMDczNzVk
MDcxYzQzM2E1MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NCw2ICs0NSw3IEBAIHN0cnVjdCBf
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSB7CiAKICAgICBQbGF0Zm9ybUNsdXR0ZXJMYXllckNs
aWVudCogbGF5ZXJDbGllbnQ7CiAKKyAgICBnYm9vbGVhbiBmbGF0dGVuaW5nOwogICAgIGdib29s
ZWFuIGRyYXdzQ29udGVudDsKIAogICAgIGZsb2F0IHNjcm9sbFg7CkBAIC0xMDIsNiArMTA0LDgg
QEAgc3RhdGljIHZvaWQgZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfaW5pdChHcmFwaGljc0xheWVyQWN0
b3IqIHNlbGYpCiAKICAgICBjbHV0dGVyX2FjdG9yX3NldF9yZWFjdGl2ZShDTFVUVEVSX0FDVE9S
KHNlbGYpLCBGQUxTRSk7CiAKKyAgICBzZWxmLT5wcml2LT5mbGF0dGVuaW5nID0gdHJ1ZTsKKwog
ICAgIC8vIERlZmF1bHQgdXNlZCBieSBHcmFwaGljc0xheWVyLgogICAgIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldEFuY2hvclBvaW50KHNlbGYsIDAuNSwgMC41LCAwLjApOwogCkBAIC0yMDIsNyArMjA2
LDEyIEBAIHN0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckFwcGx5VHJhbnNmb3JtKENsdXR0
ZXJBY3RvciogYWN0b3IsIENvZ2xNYXRyaXgqIG1hCiAgICAgaWYgKHRyYW5zbGF0ZVggfHwgdHJh
bnNsYXRlWSkKICAgICAgICAgY29nbF9tYXRyaXhfdHJhbnNsYXRlKG1hdHJpeCwgdHJhbnNsYXRl
WCwgdHJhbnNsYXRlWSwgMCk7CiAKLSAgICBDTFVUVEVSX0FDVE9SX0NMQVNTKGdyYXBoaWNzX2xh
eWVyX2FjdG9yX3BhcmVudF9jbGFzcyktPmFwcGx5X3RyYW5zZm9ybShhY3RvciwgbWF0cml4KTsK
KyAgICBDb2dsTWF0cml4IG1vZGVsVmlld1RyYW5zZm9ybSA9IFRyYW5zZm9ybWF0aW9uTWF0cml4
KCk7CisgICAgQ0xVVFRFUl9BQ1RPUl9DTEFTUyhncmFwaGljc19sYXllcl9hY3Rvcl9wYXJlbnRf
Y2xhc3MpLT5hcHBseV90cmFuc2Zvcm0oYWN0b3IsICZtb2RlbFZpZXdUcmFuc2Zvcm0pOworCisg
ICAgaWYgKHByaXYtPmZsYXR0ZW5pbmcpCisgICAgICAgIG1vZGVsVmlld1RyYW5zZm9ybSA9IFRy
YW5zZm9ybWF0aW9uTWF0cml4KCZtb2RlbFZpZXdUcmFuc2Zvcm0pLnRvMmRUcmFuc2Zvcm0oKTsK
KyAgICBjb2dsX21hdHJpeF9tdWx0aXBseShtYXRyaXgsIG1hdHJpeCwgJm1vZGVsVmlld1RyYW5z
Zm9ybSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBhaW50KENsdXR0ZXJB
Y3RvciogYWN0b3IpCkBAIC0yOTksNyArMzA4LDExIEBAIHN0YXRpYyB2b2lkIGRyYXdMYXllckNv
bnRlbnRzKENsdXR0ZXJBY3RvciogYWN0b3IsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIEdy
YXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NMYXllckFjdG9yTmV3KEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpMYXllclR5cGUgdHlwZSkKIHsKICAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0g
R1JBUEhJQ1NfTEFZRVJfQUNUT1IoZ19vYmplY3RfbmV3KEdSQVBISUNTX0xBWUVSX1RZUEVfQUNU
T1IsIDApKTsKLSAgICBsYXllci0+cHJpdi0+bGF5ZXJUeXBlID0gdHlwZTsKKyAgICBHcmFwaGlj
c0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBwcml2LT5sYXll
clR5cGUgPSB0eXBlOworICAgIGlmIChwcml2LT5sYXllclR5cGUgPT0gR3JhcGhpY3NMYXllckNs
dXR0ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyKQorICAgICAgICBwcml2LT5mbGF0dGVuaW5n
ID0gZmFsc2U7CiAKICAgICByZXR1cm4gbGF5ZXI7CiB9CkBAIC00MzYsNiArNDQ5LDE2IEBAIHZv
aWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U3VibGF5ZXJzKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5
ZXIsIEdyYXBoaWNzTGF5ZXJBY3RvCiAgICAgfQogfQogCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
clJlbW92ZUZyb21TdXBlckxheWVyKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAg
Q2x1dHRlckFjdG9yKiBhY3RvciA9IENMVVRURVJfQUNUT1IobGF5ZXIpOworICAgIENsdXR0ZXJB
Y3RvciogcGFyZW50QWN0b3IgPSBjbHV0dGVyX2FjdG9yX2dldF9wYXJlbnQoYWN0b3IpOworICAg
IGlmICghcGFyZW50QWN0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIGNsdXR0ZXJfYWN0b3Jf
cmVtb3ZlX2NoaWxkKHBhcmVudEFjdG9yLCBhY3Rvcik7Cit9CisKIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpMYXllclR5cGUgZ3JhcGhpY3NMYXllckFjdG9yR2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5
ZXJBY3RvciogbGF5ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9
IGxheWVyLT5wcml2OwpAQCAtNDkxLDYgKzUxNCwxNSBAQCBnYm9vbGVhbiBncmFwaGljc0xheWVy
QWN0b3JHZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKICAgICByZXR1
cm4gbGF5ZXItPnByaXYtPmRyYXdzQ29udGVudDsKIH0KIAordm9pZCBncmFwaGljc0xheWVyQWN0
b3JTZXRGbGF0dGVuaW5nKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGdib29sZWFuIGZsYXR0
ZW5pbmcpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5w
cml2OworICAgIGlmIChmbGF0dGVuaW5nID09IHByaXYtPmZsYXR0ZW5pbmcpCisgICAgICAgIHJl
dHVybjsKKworICAgIHByaXYtPmZsYXR0ZW5pbmcgPSBmbGF0dGVuaW5nOworfQorCiBXZWJDb3Jl
OjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGdyYXBoaWNzTGF5ZXJBY3RvckdldEFuaW1hdGlv
bkZvcktleShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBjb25zdCBTdHJpbmcga2V5KQogewog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24q
PihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChsYXllciksIGtleS51dGY4KCkuZGF0YSgpKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJBY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaAppbmRleCA5YTNjN2FlZWZlNWZiYTY2M2NkN2Q0ODkz
MDBmMGNiN2M0OTUyMjBjLi43NWQzZGI0YTQ3MWMyYjFkNDgxMzVhNjE2YTdlNmZjNzQ5MDE0NDg1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJBY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKQEAgLTg5LDExICs4OSwxNCBAQCBmbG9hdCBn
cmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVYKEdyYXBoaWNzTGF5ZXJBY3RvciopOwogdm9p
ZCBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJBY3RvciosIGZs
b2F0KTsKIGZsb2F0IGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkoR3JhcGhpY3NMYXll
ckFjdG9yKik7CiBnaW50IGdyYXBoaWNzTGF5ZXJBY3RvckdldG5DaGlsZHJlbihHcmFwaGljc0xh
eWVyQWN0b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlRnJvbVN1cGVyTGF5ZXIo
R3JhcGhpY3NMYXllckFjdG9yKik7CiBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5
ZXJUeXBlIGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3Iq
KTsKIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3Rv
ciosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUpOwordm9pZCBncmFw
aGljc0xheWVyQWN0b3JSZXBsYWNlU3VibGF5ZXIoR3JhcGhpY3NMYXllckFjdG9yKiwgQ2x1dHRl
ckFjdG9yKiwgQ2x1dHRlckFjdG9yKik7CiB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1Ymxh
eWVycyhHcmFwaGljc0xheWVyQWN0b3IqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQWN0b3JMaXN0
Jik7CiBnYm9vbGVhbiBncmFwaGljc0xheWVyQWN0b3JHZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NM
YXllckFjdG9yKik7CiB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldERyYXdzQ29udGVudChHcmFw
aGljc0xheWVyQWN0b3IqLCBnYm9vbGVhbiBkcmF3c0NvbnRlbnQpOwordm9pZCBncmFwaGljc0xh
eWVyQWN0b3JTZXRGbGF0dGVuaW5nKEdyYXBoaWNzTGF5ZXJBY3RvciosIGdib29sZWFuIGZsYXR0
ZW5pbmcpOwogCiBXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qIGdyYXBoaWNzTGF5
ZXJBY3RvckdldEFuaW1hdGlvbkZvcktleShHcmFwaGljc0xheWVyQWN0b3IqLCBjb25zdCBTdHJp
bmcpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwCmluZGV4IGFiMDRjYzRhYmM2
NWZlMzZmNzNhMjQ0YzQ3NWJhNTRkYTMxZTdlNGQuLmIyODkzZjlhZTk0MTQ1NTkwMTAyNGQ2OWRk
YzFjZDA5NjBmNzBiZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwCkBAIC00
MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5j
bHVkZSAiU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0
ZS5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMjk3LDYgKzI5OCwxMSBAQCBHcmFwaGljc0xheWVyQ2x1
dHRlcjo6fkdyYXBoaWNzTGF5ZXJDbHV0dGVyKCkKICAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9y
U2V0Q2xpZW50KG1fbGF5ZXIuZ2V0KCksIDApOwogICAgICAgICBnX2lkbGVfYWRkKGlkbGVEZXN0
cm95LCBtX2xheWVyLmxlYWtSZWYoKSk7CiAgICAgfQorCisgICAgaWYgKG1fc3RydWN0dXJhbExh
eWVyKSB7CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChtX3N0cnVjdHVyYWxM
YXllci5nZXQoKSwgMCk7CisgICAgICAgIGdfaWRsZV9hZGQoaWRsZURlc3Ryb3ksIG1fc3RydWN0
dXJhbExheWVyLmxlYWtSZWYoKSk7CisgICAgfQogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTMwOCw3ICszMTQsNyBAQCB2b2lk
IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKIAogQ2x1
dHRlckFjdG9yKiBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSk7CisgICAgcmV0dXJuIENM
VVRURVJfQUNUT1IocHJpbWFyeUxheWVyKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpzZXROZWVkc0Rpc3BsYXkoKQpAQCAtMzg4LDYgKzM5NCwyMCBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDbHV0dGVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQp
CiAgICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKFRyYW5zZm9ybUNoYW5nZWQpOwogfQogCit2
b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlT3JDb3B5
IG9wZXJhdGlvbiwgR3JhcGhpY3NMYXllckFjdG9yKiBmcm9tTGF5ZXIsIEdyYXBoaWNzTGF5ZXJB
Y3RvciogdG9MYXllcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIHByZXNlcnZlczNEKQoreworICAg
IGlmIChwcmVzZXJ2ZXMzRCA9PSBtX3ByZXNlcnZlczNEKQorICAgICAgICByZXR1cm47CisKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChwcmVzZXJ2ZXMzRCk7CisgICAgbm90ZUxh
eWVyUHJvcGVydHlDaGFuZ2VkKFByZXNlcnZlczNEQ2hhbmdlZCk7Cit9CisKIHZvaWQgR3JhcGhp
Y3NMYXllckNsdXR0ZXI6OnNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkKIHsKICAg
ICBpZiAoZHJhd3NDb250ZW50ID09IG1fZHJhd3NDb250ZW50KQpAQCAtNTU0LDEzICs1NzQsMTQg
QEAgRmxvYXRQb2ludCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRp
dmVUb0Jhc2UoZmxvYXQmIHBhZ2VTY2FsZSkKIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQogewogICAgIFRy
YW5zZm9ybVN0YXRlIHN0YXRlKFRyYW5zZm9ybVN0YXRlOjpVbmFwcGx5SW52ZXJzZVRyYW5zZm9y
bURpcmVjdGlvbiwgRmxvYXRRdWFkKGNsaXBSZWN0KSk7Ci0gICAgcmVjdXJzaXZlQ29tbWl0Q2hh
bmdlcyhzdGF0ZSk7CisgICAgcmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhDb21taXRTdGF0ZSgpLCBz
dGF0ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlY3Vyc2l2ZUNvbW1pdENo
YW5nZXMoY29uc3QgVHJhbnNmb3JtU3RhdGUmIHN0YXRlLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3Is
IGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIGJvb2wgYWZmZWN0ZWRC
eVBhZ2VTY2FsZSkKK3ZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnJlY3Vyc2l2ZUNvbW1pdENo
YW5nZXMoY29uc3QgQ29tbWl0U3RhdGUmIGNvbW1pdFN0YXRlLCBjb25zdCBUcmFuc2Zvcm1TdGF0
ZSYgc3RhdGUsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b25SZWxhdGl2ZVRvQmFzZSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlKQogewogICAgIC8vIEZJ
WE1FOiBTYXZlIHRoZSBzdGF0ZSBiZWZvcmUgc2VuZGluZyBkb3duIHRvIGtpZHMgYW5kIHJlc3Rv
cmUgaXQgYWZ0ZXIKICAgICBUcmFuc2Zvcm1TdGF0ZSBsb2NhbFN0YXRlID0gc3RhdGU7CisgICAg
Q29tbWl0U3RhdGUgY2hpbGRDb21taXRTdGF0ZSA9IGNvbW1pdFN0YXRlOwogCiAgICAgaWYgKGFw
cGxpZXNQYWdlU2NhbGUoKSkgewogICAgICAgICBwYWdlU2NhbGVGYWN0b3IgPSB0aGlzLT5wYWdl
U2NhbGVGYWN0b3IoKTsKQEAgLTU3OSw3ICs2MDAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IFRyYW5zZm9ybVN0YXRlJiBzdGF0ZSwg
ZgogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1DaGlsZHJlbjsgKytpKSB7CiAgICAg
ICAgIEdyYXBoaWNzTGF5ZXJDbHV0dGVyKiBjdXJyZW50Q2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFw
aGljc0xheWVyQ2x1dHRlcio+KGNoaWxkTGF5ZXJzW2ldKTsKLSAgICAgICAgY3VycmVudENoaWxk
LT5yZWN1cnNpdmVDb21taXRDaGFuZ2VzKGxvY2FsU3RhdGUsIHBhZ2VTY2FsZUZhY3RvciwgYmFz
ZVJlbGF0aXZlUG9zaXRpb24sIGFmZmVjdGVkQnlQYWdlU2NhbGUpOworICAgICAgICBjdXJyZW50
Q2hpbGQtPnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoY2hpbGRDb21taXRTdGF0ZSwgbG9jYWxTdGF0
ZSwgcGFnZVNjYWxlRmFjdG9yLCBiYXNlUmVsYXRpdmVQb3NpdGlvbiwgYWZmZWN0ZWRCeVBhZ2VT
Y2FsZSk7CiAgICAgfQogCiAgICAgY29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMoKTsK
QEAgLTU5OCw2ICs2MTksOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjb21taXRMYXll
ckNoYW5nZXNBZnRlclN1YmxheWVycygpCiAgICAgaWYgKCFtX3VuY29tbWl0dGVkQ2hhbmdlcykK
ICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQ2hpbGRy
ZW5DaGFuZ2VkKQorICAgICAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKKwogICAgIG1fdW5jb21t
aXR0ZWRDaGFuZ2VzID0gTm9DaGFuZ2U7CiB9CiB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpu
b3RlU3VibGF5ZXJzQ2hhbmdlZCgpCkBAIC02MTgsMzQgKzY0Miw0NyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDbHV0dGVyOjpjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoZmxvYXQgcGFn
ZVNjYWxlRmFjdAogICAgIGlmICghbV91bmNvbW1pdHRlZENoYW5nZXMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIE5hbWVDaGFuZ2VkKQotICAgICAg
ICB1cGRhdGVMYXllck5hbWVzKCk7Ci0KLSAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBD
aGlsZHJlbkNoYW5nZWQpCi0gICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOworICAgIC8vIE5l
ZWQgdG8gaGFuZGxlIFByZXNlcnZlczNEQ2hhbmdlZCBmaXJzdCwgYmVjYXVzZSBpdCBhZmZlY3Rz
IHdoaWNoIGxheWVycyBzdWJzZXF1ZW50IHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8KKyAgICBp
ZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBQcmVzZXJ2ZXMzRENoYW5nZWQpCisgICAgICAgIHVw
ZGF0ZVN0cnVjdHVyYWxMYXllcigpOwogCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYg
R2VvbWV0cnlDaGFuZ2VkKQogICAgICAgICB1cGRhdGVHZW9tZXRyeShwYWdlU2NhbGVGYWN0b3Is
IHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogCi0gICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2Vz
ICYgVHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCk7Ci0KICAgICBp
ZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBEcmF3c0NvbnRlbnRDaGFuZ2VkKQogICAgICAgICB1
cGRhdGVMYXllckRyYXdzQ29udGVudChwYWdlU2NhbGVGYWN0b3IsIHBvc2l0aW9uUmVsYXRpdmVU
b0Jhc2UpOwogCi0gICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgRGlydHlSZWN0c0NoYW5n
ZWQpCi0gICAgICAgIHJlcGFpbnRMYXllckRpcnR5UmVjdHMoKTsKKyAgICBpZiAobV91bmNvbW1p
dHRlZENoYW5nZXMgJiBOYW1lQ2hhbmdlZCkKKyAgICAgICAgdXBkYXRlTGF5ZXJOYW1lcygpOwor
CisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgVHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAg
ICAgdXBkYXRlVHJhbnNmb3JtKCk7CiAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBP
cGFjaXR5Q2hhbmdlZCkKICAgICAgICAgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKIAogICAgIGlm
IChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIEFuaW1hdGlvbkNoYW5nZWQpCiAgICAgICAgIHVwZGF0
ZUFuaW1hdGlvbnMoKTsKKworICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIERpcnR5UmVj
dHNDaGFuZ2VkKQorICAgICAgICByZXBhaW50TGF5ZXJEaXJ0eVJlY3RzKCk7CisKKyAgICBpZiAo
bV91bmNvbW1pdHRlZENoYW5nZXMgJiBDaGlsZHJlbkNoYW5nZWQpIHsKKyAgICAgICAgdXBkYXRl
U3VibGF5ZXJMaXN0KCk7CisgICAgICAgIC8vIFN1YmxheWVycyBtYXkgc2V0IHRoaXMgZmxhZyBh
Z2Fpbiwgc28gY2xlYXIgaXQgdG8gYXZvaWQgYWx3YXlzIHVwZGF0aW5nIHN1YmxheWVycyBpbiBj
b21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpLgorICAgICAgICBtX3VuY29tbWl0dGVk
Q2hhbmdlcyAmPSB+Q2hpbGRyZW5DaGFuZ2VkOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQogewogICAgIC8vIEZJWE1FOiBOZWVk
IHRvIHN1cHBvcnQgcGFnZSBzY2FsaW5nLgorICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikgewor
ICAgICAgICBjbHV0dGVyX2FjdG9yX3NldF9wb3NpdGlvbihDTFVUVEVSX0FDVE9SKG1fc3RydWN0
dXJhbExheWVyLmdldCgpKSwgbV9wb3NpdGlvbi54KCksIG1fcG9zaXRpb24ueSgpKTsKKyAgICAg
ICAgY2x1dHRlcl9hY3Rvcl9zZXRfc2l6ZShDTFVUVEVSX0FDVE9SKG1fc3RydWN0dXJhbExheWVy
LmdldCgpKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGdyYXBo
aWNzTGF5ZXJBY3RvclNldEFuY2hvclBvaW50KG1fc3RydWN0dXJhbExheWVyLmdldCgpLCBtX2Fu
Y2hvclBvaW50LngoKSwgbV9hbmNob3JQb2ludC55KCksIG1fYW5jaG9yUG9pbnQueigpKTsKKyAg
ICB9CisKICAgICBjbHV0dGVyX2FjdG9yX3NldF9wb3NpdGlvbihDTFVUVEVSX0FDVE9SKG1fbGF5
ZXIuZ2V0KCkpLCBtX3Bvc2l0aW9uLngoKSwgbV9wb3NpdGlvbi55KCkpOwogICAgIGNsdXR0ZXJf
YWN0b3Jfc2V0X3NpemUoQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSwgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9p
bnQobV9sYXllci5nZXQoKSwgbV9hbmNob3JQb2ludC54KCksIG1fYW5jaG9yUG9pbnQueSgpLCBt
X2FuY2hvclBvaW50LnooKSk7CkBAIC02NTUsMTkgKzY5MiwzMCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZs
b2F0UG9pbgogLy8gU28gd2hlbmV2ZXIgdGhlIGxpc3Qgb2YgY2hpbGQgbGF5ZXIgY2hhbmdlcywg
dGhlIGxpc3Qgb2YgR3JhcGhpY3NMYXllckFjdG9yIHNob3VsZCBiZSB1cGRhdGVkIGFjY29yZGlu
Z2x5Lgogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlU3VibGF5ZXJMaXN0KCkKIHsK
LSAgICBHcmFwaGljc0xheWVyQWN0b3JMaXN0IG5ld1N1YmxheWVyczsKLSAgICBjb25zdCBWZWN0
b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNoaWxkcmVuKCk7CisgICAgR3JhcGhp
Y3NMYXllckFjdG9yTGlzdCBzdHJ1Y3R1cmFsTGF5ZXJDaGlsZHJlbjsKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3JMaXN0IHByaW1hcnlMYXllckNoaWxkcmVuOwogCisgICAgR3JhcGhpY3NMYXllckFj
dG9yTGlzdCYgY2hpbGRMaXN0Rm9yU3VibGF5ZXJzID0gbV9zdHJ1Y3R1cmFsTGF5ZXIgPyBzdHJ1
Y3R1cmFsTGF5ZXJDaGlsZHJlbiA6IHByaW1hcnlMYXllckNoaWxkcmVuOworCisgICAgaWYgKG1f
c3RydWN0dXJhbExheWVyKQorICAgICAgICBzdHJ1Y3R1cmFsTGF5ZXJDaGlsZHJlbi5hcHBlbmQo
bV9sYXllcik7CisKKyAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVy
cyA9IGNoaWxkcmVuKCk7CiAgICAgc2l6ZV90IG51bUNoaWxkcmVuID0gY2hpbGRMYXllcnMuc2l6
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewogICAg
ICAgICBHcmFwaGljc0xheWVyQ2x1dHRlciogY3VycmVudENoaWxkID0gc3RhdGljX2Nhc3Q8R3Jh
cGhpY3NMYXllckNsdXR0ZXIqPihjaGlsZExheWVyc1tpXSk7CiAgICAgICAgIEdyYXBoaWNzTGF5
ZXJBY3RvciogY2hpbGRMYXllciA9IGN1cnJlbnRDaGlsZC0+bGF5ZXJGb3JTdXBlcmxheWVyKCk7
CiAgICAgICAgIEFTU0VSVChHUkFQSElDU19MQVlFUl9JU19BQ1RPUihjaGlsZExheWVyKSk7Cisg
ICAgICAgIGNoaWxkTGlzdEZvclN1YmxheWVycy5hcHBlbmQoY2hpbGRMYXllcik7CiAKLSAgICAg
ICAgbmV3U3VibGF5ZXJzLmFwcGVuZChjaGlsZExheWVyKTsKKyAgICAgICAgLy8gSWYgdGhlIHBy
ZXNlcnZlczNEIG9mIGEgbGF5ZXIgaXMgZmFsc2UsIGl0c2VsZiBhbmQgaXRzIGltbWVkaWF0ZSBj
aGlsZHJlbiBzaG91bGQgYmUgZmxhdHRlbmVkLgorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JT
ZXRGbGF0dGVuaW5nKGNoaWxkTGF5ZXIsICEocHJlc2VydmVzM0QoKSB8fCBjdXJyZW50Q2hpbGQt
PnByZXNlcnZlczNEKCkpKTsKICAgICB9CiAKLSAgICBncmFwaGljc0xheWVyQWN0b3JTZXRTdWJs
YXllcnMobV9sYXllci5nZXQoKSwgbmV3U3VibGF5ZXJzKTsKKyAgICBpZiAobV9zdHJ1Y3R1cmFs
TGF5ZXIpCisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhtX3N0cnVjdHVy
YWxMYXllci5nZXQoKSwgc3RydWN0dXJhbExheWVyQ2hpbGRyZW4pOworCisgICAgZ3JhcGhpY3NM
YXllckFjdG9yU2V0U3VibGF5ZXJzKG1fbGF5ZXIuZ2V0KCksIHByaW1hcnlMYXllckNoaWxkcmVu
KTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlTGF5ZXJOYW1lcygpCkBA
IC02ODEsNiArNzI5LDkyIEBAIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZVRyYW5z
Zm9ybSgpCiAgICAgY2x1dHRlcl9hY3Rvcl9zZXRfdHJhbnNmb3JtKENMVVRURVJfQUNUT1IocHJp
bWFyeUxheWVyKCkpLCAmbWF0cml4KTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6
dXBkYXRlU3RydWN0dXJhbExheWVyKCkKK3sKKyAgICBlbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoc3Ry
dWN0dXJhbExheWVyUHVycG9zZSgpKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6
ZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSkKK3sK
KyAgICBjb25zdCBMYXllckNoYW5nZUZsYWdzIHN0cnVjdHVyYWxMYXllckNoYW5nZUZsYWdzID0g
TmFtZUNoYW5nZWQKKyAgICAgICAgfCBHZW9tZXRyeUNoYW5nZWQKKyAgICAgICAgfCBUcmFuc2Zv
cm1DaGFuZ2VkCisgICAgICAgIHwgQ2hpbGRyZW5UcmFuc2Zvcm1DaGFuZ2VkCisgICAgICAgIHwg
Q2hpbGRyZW5DaGFuZ2VkCisgICAgICAgIHwgQmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlZAorICAg
ICAgICB8IE9wYWNpdHlDaGFuZ2VkOworCisgICAgaWYgKHB1cnBvc2UgPT0gTm9TdHJ1Y3R1cmFs
TGF5ZXIpIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJhbExheWVyKSB7CisgICAgICAgICAgICAv
LyBSZXBsYWNlIHRoZSB0cmFuc2Zvcm1MYXllciBpbiB0aGUgcGFyZW50IHdpdGggdGhpcyBsYXll
ci4KKyAgICAgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUZyb21TdXBlckxheWVyKG1f
bGF5ZXIuZ2V0KCkpOworCisgICAgICAgICAgICAvLyBJZiBtX2xheWVyIGRvZXNuJ3QgaGF2ZSBh
IHBhcmVudCwgaXQgbWVhbnMgaXQncyB0aGUgcm9vdCBsYXllciBhbmQKKyAgICAgICAgICAgIC8v
IGlzIGxpa2VseSBob3N0ZWQgYnkgc29tZXRoaW5nIHRoYXQgaXMgbm90IGV4cGVjdGluZyB0byBi
ZSBjaGFuZ2VkCisgICAgICAgICAgICBDbHV0dGVyQWN0b3IqIHBhcmVudEFjdG9yID0gY2x1dHRl
cl9hY3Rvcl9nZXRfcGFyZW50KENMVVRURVJfQUNUT1IobV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkp
KTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJlbnRBY3Rvcik7CisgICAgICAgICAgICBncmFwaGlj
c0xheWVyQWN0b3JSZXBsYWNlU3VibGF5ZXIoR1JBUEhJQ1NfTEFZRVJfQUNUT1IocGFyZW50QWN0
b3IpLCBDTFVUVEVSX0FDVE9SKG1fc3RydWN0dXJhbExheWVyLmdldCgpKSwgQ0xVVFRFUl9BQ1RP
UihtX2xheWVyLmdldCgpKSk7CisKKyAgICAgICAgICAgIG1vdmVPckNvcHlBbmltYXRpb25zKE1v
dmUsIG1fc3RydWN0dXJhbExheWVyLmdldCgpLCBtX2xheWVyLmdldCgpKTsKKworICAgICAgICAg
ICAgLy8gUmVsZWFzZSB0aGUgc3RydWN0dXJhbCBsYXllci4KKyAgICAgICAgICAgIG1fc3RydWN0
dXJhbExheWVyID0gMDsKKworICAgICAgICAgICAgbV91bmNvbW1pdHRlZENoYW5nZXMgfD0gc3Ry
dWN0dXJhbExheWVyQ2hhbmdlRmxhZ3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGJvb2wgc3RydWN0dXJhbExheWVyQ2hhbmdlZCA9IGZhbHNlOworICAgIGlmIChw
dXJwb3NlID09IFN0cnVjdHVyYWxMYXllckZvclByZXNlcnZlczNEKSB7CisgICAgICAgIGlmICht
X3N0cnVjdHVyYWxMYXllciAmJiAoZ3JhcGhpY3NMYXllckFjdG9yR2V0TGF5ZXJUeXBlKG1fc3Ry
dWN0dXJhbExheWVyLmdldCgpKSAhPSBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlVHJh
bnNmb3JtTGF5ZXIpKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSAwOworCisgICAg
ICAgIGlmICghbV9zdHJ1Y3R1cmFsTGF5ZXIpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJhbExh
eWVyID0gZ3JhcGhpY3NMYXllckFjdG9yTmV3V2l0aENsaWVudChHcmFwaGljc0xheWVyQ2x1dHRl
cjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIsIHRoaXMpOworICAgICAgICAgICAgc3RydWN0dXJh
bExheWVyQ2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmFsTGF5ZXIgJiYgKGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZSht
X3N0cnVjdHVyYWxMYXllci5nZXQoKSkgIT0gR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlw
ZUxheWVyKSkKKyAgICAgICAgICAgIG1fc3RydWN0dXJhbExheWVyID0gMDsKKworICAgICAgICBp
ZiAoIW1fc3RydWN0dXJhbExheWVyKSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9
IGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQoR3JhcGhpY3NMYXllckNsdXR0ZXI6Okxh
eWVyVHlwZUxheWVyLCB0aGlzKTsKKyAgICAgICAgICAgIHN0cnVjdHVyYWxMYXllckNoYW5nZWQg
PSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFzdHJ1Y3R1cmFsTGF5ZXJDaGFu
Z2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcyB8PSBzdHJ1
Y3R1cmFsTGF5ZXJDaGFuZ2VGbGFnczsKKworICAgIC8vIFdlJ3ZlIGNoYW5nZWQgdGhlIGxheWVy
IHRoYXQgb3VyIHBhcmVudCBhZGRlZCB0byBpdHMgc3VibGF5ZXIgbGlzdCwgc28gdGVsbCBpdCB0
byB1cGRhdGUKKyAgICAvLyBzdWJsYXllcnMgYWdhaW4gaW4gaXRzIGNvbW1pdExheWVyQ2hhbmdl
c0FmdGVyU3VibGF5ZXJzKCkuCisgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNsdXR0ZXIq
PihwYXJlbnQoKSktPm5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7CisKKyAgICAvLyBTZXQgcHJvcGVy
dGllcyBvZiBtX2xheWVyIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBzaW5jZSB0aGVzZSBhcmUg
ZXhwcmVzc2VkIG9uIG9uIHRoZSBzdHJ1Y3R1cmFsIGxheWVyLgorICAgIEZsb2F0UG9pbnQgcG9p
bnQoMCwgMCk7CisgICAgRmxvYXRQb2ludDNEIGFuY2hvclBvaW50KDAuNWYsIDAuNWYsIDApOwor
ICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3Bvc2l0aW9uKENMVVRURVJfQUNUT1IobV9sYXllci5nZXQo
KSksIHBvaW50LngoKSwgcG9pbnQueSgpKTsKKyAgICBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNo
b3JQb2ludChtX2xheWVyLmdldCgpLCBhbmNob3JQb2ludC54KCksIGFuY2hvclBvaW50LnkoKSwg
YW5jaG9yUG9pbnQueigpKTsKKworICAgIENvZ2xNYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRp
b25NYXRyaXgoKTsKKyAgICBjbHV0dGVyX2FjdG9yX3NldF90cmFuc2Zvcm0oQ0xVVFRFUl9BQ1RP
UihtX2xheWVyLmdldCgpKSwgJm1hdHJpeCk7CisKKyAgICBjbHV0dGVyX2FjdG9yX3NldF9vcGFj
aXR5KENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSksIDI1NSk7CisKKyAgICBtb3ZlT3JDb3B5
QW5pbWF0aW9ucyhNb3ZlLCBtX2xheWVyLmdldCgpLCBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSk7
Cit9CisKK0dyYXBoaWNzTGF5ZXJDbHV0dGVyOjpTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpzdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlKCkgY29uc3QKK3sKKyAgICBp
ZiAocHJlc2VydmVzM0QoKSkKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyYWxMYXllckZvclByZXNl
cnZlczNEOworCisgICAgcmV0dXJuIE5vU3RydWN0dXJhbExheWVyOworfQorCiB2b2lkIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVMYXllckRyYXdzQ29udGVudChmbG9hdCBwYWdlU2NhbGVG
YWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpCiB7CiAgICAg
aWYgKG1fZHJhd3NDb250ZW50KSB7CkBAIC0xMDk5LDcgKzEyMzMsNyBAQCBib29sIEdyYXBoaWNz
TGF5ZXJDbHV0dGVyOjpzZXRBbmltYXRpb25LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmIHZhbHVlTAogCiBHcmFwaGljc0xheWVyQWN0b3IqIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjps
YXllckZvclN1cGVybGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX2xheWVyLmdldCgpOwor
ICAgIHJldHVybiBtX3N0cnVjdHVyYWxMYXllciA/IG1fc3RydWN0dXJhbExheWVyLmdldCgpIDog
bV9sYXllci5nZXQoKTsKIH0KIAogR3JhcGhpY3NMYXllckFjdG9yKiBHcmFwaGljc0xheWVyQ2x1
dHRlcjo6YW5pbWF0ZWRMYXllcihBbmltYXRlZFByb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBo
aWNzTGF5ZXJDbHV0dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmgKaW5kZXggNDIxYWE5NjE4NDhhYTRjYmQ0YmI2ODQ5
NTc2ZjlmYTc3NmE4MjAzNS4uN2YzMGYxNDkxZTg1NDEzMWExNmQ4NGZkYjk4Y2RjMDU2NjA5MmRm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0xheWVyQ2x1dHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaApAQCAtNzksMTMgKzc5LDIxIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHZpcnR1
YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKTsKKwogICAgIHZpcnR1YWwgYm9vbCBhZGRBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBj
b25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
T2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRl
KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3Rh
dGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAKLSAgICB2b2lkIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMo
Y29uc3QgVHJhbnNmb3JtU3RhdGUmLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IgPSAxLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlID0gRmxvYXRQb2ludCgpLCBib29sIGFm
ZmVjdGVkQnlQYWdlU2NhbGUgPSBmYWxzZSk7CisgICAgc3RydWN0IENvbW1pdFN0YXRlIHsKKyAg
ICAgICAgYm9vbCBhbmNlc3Rvckhhc1RyYW5zZm9ybUFuaW1hdGlvbjsKKyAgICAgICAgQ29tbWl0
U3RhdGUoKQorICAgICAgICAgICAgOiBhbmNlc3Rvckhhc1RyYW5zZm9ybUFuaW1hdGlvbihmYWxz
ZSkKKyAgICAgICAgeyB9CisgICAgfTsKKyAgICB2b2lkIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMo
Y29uc3QgQ29tbWl0U3RhdGUmLCBjb25zdCBUcmFuc2Zvcm1TdGF0ZSYsIGZsb2F0IHBhZ2VTY2Fs
ZUZhY3RvciA9IDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UgPSBG
bG9hdFBvaW50KCksIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSA9IGZhbHNlKTsKIAogcHJpdmF0
ZToKICAgICBGbG9hdFBvaW50IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBw
YWdlU2NhbGUpIGNvbnN0OwpAQCAtMTAzLDcgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQ2x1dHRlckxheWVyQW5pbWF0aW9uU3RhcnRlZChkb3VibGUgYmVnaW5U
aW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbHV0dGVyTGF5ZXJQYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOwogCi0gICAgR3JhcGhpY3NM
YXllckFjdG9yKiBwcmltYXJ5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9
CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBwcmltYXJ5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X3N0cnVjdHVyYWxMYXllci5nZXQoKSA/IG1fc3RydWN0dXJhbExheWVyLmdldCgpIDogbV9sYXll
ci5nZXQoKTsgfQogICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXJGb3JTdXBlcmxheWVyKCkg
Y29uc3Q7CiAgICAgR3JhcGhpY3NMYXllckFjdG9yKiBhbmltYXRlZExheWVyKEFuaW1hdGVkUHJv
cGVydHlJRCkgY29uc3Q7CiAKQEAgLTEyNiw2ICsxMzQsOSBAQCBwcml2YXRlOgogICAgIGJvb2wg
c2V0VHJhbnNmb3JtQW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jiwg
Y29uc3QgQW5pbWF0aW9uKiwgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiwgaW50IGZ1bmN0aW9u
SW5kZXgsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgYm9vbCBpc01hdHJpeEFu
aW1hdGlvbiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSk7CiAgICAgYm9vbCBzZXRUcmFuc2Zvcm1B
bmltYXRpb25LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRp
b24qLCBQbGF0Zm9ybUNsdXR0ZXJBbmltYXRpb24qLCBpbnQgZnVuY3Rpb25JbmRleCwgVHJhbnNm
b3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlLCBib29sIGlzTWF0cml4QW5pbWF0aW9uLCBjb25z
dCBJbnRTaXplJiBib3hTaXplKTsKIAorICAgIGVudW0gTW92ZU9yQ29weSB7IE1vdmUsIENvcHkg
fTsKKyAgICB2b2lkIG1vdmVPckNvcHlBbmltYXRpb25zKE1vdmVPckNvcHksIEdyYXBoaWNzTGF5
ZXJBY3RvciogZnJvbUxheWVyLCBHcmFwaGljc0xheWVyQWN0b3IqIHRvTGF5ZXIpOworCiAgICAg
Ym9vbCBhcHBlbmRUb1VuY29tbWl0dGVkQW5pbWF0aW9ucyhjb25zdCBLZXlmcmFtZVZhbHVlTGlz
dCYsIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGNvbnN0IEludFNpemUmIGJveFNpemUsIGludCBhbmltYXRp
b25JbmRleCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wgaXNNYXRyaXhBbmltYXRpb24pOwogCiAg
ICAgZW51bSBMYXllckNoYW5nZSB7CkBAIC0xNDcsMTIgKzE1OCwxNyBAQCBwcml2YXRlOgogICAg
ICAgICBDb250ZW50c0ltYWdlQ2hhbmdlZCA9IDEgPDwgMTUsCiAgICAgICAgIENvbnRlbnRzTWVk
aWFMYXllckNoYW5nZWQgPSAxIDw8IDE2LAogICAgICAgICBDb250ZW50c0NhbnZhc0xheWVyQ2hh
bmdlZCA9IDEgPDwgMTcsCi0gICAgICAgIENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDE4LAot
ICAgICAgICBNYXNrTGF5ZXJDaGFuZ2VkID0gMSA8PCAxOSwKLSAgICAgICAgUmVwbGljYXRlZExh
eWVyQ2hhbmdlZCA9IDEgPDwgMjAsCi0gICAgICAgIENvbnRlbnRzTmVlZHNEaXNwbGF5ID0gMSA8
PCAyMSwKLSAgICAgICAgQWNjZWxlcmF0ZXNEcmF3aW5nQ2hhbmdlZCA9IDEgPDwgMjIsCi0gICAg
ICAgIENvbnRlbnRzU2NhbGVDaGFuZ2VkID0gMSA8PCAyMworICAgICAgICBDb250ZW50c0NvbG9y
TGF5ZXJDaGFuZ2VkID0gMSA8PCAxOCwKKyAgICAgICAgQ29udGVudHNSZWN0Q2hhbmdlZCA9IDEg
PDwgMTksCisgICAgICAgIE1hc2tMYXllckNoYW5nZWQgPSAxIDw8IDIwLAorICAgICAgICBSZXBs
aWNhdGVkTGF5ZXJDaGFuZ2VkID0gMSA8PCAyMSwKKyAgICAgICAgQ29udGVudHNOZWVkc0Rpc3Bs
YXkgPSAxIDw8IDIyLAorICAgICAgICBBY2NlbGVyYXRlc0RyYXdpbmdDaGFuZ2VkID0gMSA8PCAy
MywKKyAgICAgICAgQ29udGVudHNTY2FsZUNoYW5nZWQgPSAxIDw8IDI0LAorICAgICAgICBDb250
ZW50c1Zpc2liaWxpdHlDaGFuZ2VkID0gMSA8PCAyNSwKKyAgICAgICAgVmlzaWJsZVJlY3RDaGFu
Z2VkID0gMSA8PCAyNiwKKyAgICAgICAgRmlsdGVyc0NoYW5nZWQgPSAxIDw8IDI3LAorICAgICAg
ICBEZWJ1Z0luZGljYXRvcnNDaGFuZ2VkID0gMSA8PCAyOAogICAgIH07CiAKICAgICB0eXBlZGVm
IHVuc2lnbmVkIExheWVyQ2hhbmdlRmxhZ3M7CkBAIC0xNjAsNiArMTc2LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIG5vdGVTdWJsYXllcnNDaGFuZ2VkKCk7CiAKICAgICB2b2lkIHVwZGF0ZUJhY2tm
YWNlVmlzaWJpbGl0eSgpOworICAgIHZvaWQgdXBkYXRlU3RydWN0dXJhbExheWVyKCk7CiAgICAg
dm9pZCB1cGRhdGVMYXllck5hbWVzKCk7CiAgICAgdm9pZCB1cGRhdGVTdWJsYXllckxpc3QoKTsK
ICAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5KGZsb2F0IHBpeGVsQWxpZ25tZW50U2NhbGUsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwpAQCAtMTY4LDkgKzE4NSwxOCBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25zKCk7CiAKKyAgICBlbnVtIFN0
cnVjdHVyYWxMYXllclB1cnBvc2UgeworICAgICAgICBOb1N0cnVjdHVyYWxMYXllciA9IDAsCisg
ICAgICAgIFN0cnVjdHVyYWxMYXllckZvclByZXNlcnZlczNELAorICAgICAgICBTdHJ1Y3R1cmFs
TGF5ZXJGb3JSZXBsaWNhRmxhdHRlbmluZworICAgIH07CisgICAgdm9pZCBlbnN1cmVTdHJ1Y3R1
cmFsTGF5ZXIoU3RydWN0dXJhbExheWVyUHVycG9zZSk7CisgICAgU3RydWN0dXJhbExheWVyUHVy
cG9zZSBzdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlKCkgY29uc3Q7CisKICAgICB2b2lkIHJlcGFpbnRM
YXllckRpcnR5UmVjdHMoKTsKIAogICAgIEdSZWZQdHI8R3JhcGhpY3NMYXllckFjdG9yPiBtX2xh
eWVyOworICAgIEdSZWZQdHI8R3JhcGhpY3NMYXllckFjdG9yPiBtX3N0cnVjdHVyYWxMYXllcjsg
Ly8gQSBsYXllciB1c2VkIGZvciBzdHJ1Y3R1cmFsIHJlYXNvbnMsIGxpa2UgcHJlc2VydmVzLTNk
IG9yIHJlcGxpY2EtZmxhdHRlbmluZy4gSXMgdGhlIHBhcmVudCBvZiBtX2xheWVyLgogCiAgICAg
VmVjdG9yPEZsb2F0UmVjdD4gbV9kaXJ0eVJlY3RzOwogICAgIExheWVyQ2hhbmdlRmxhZ3MgbV91
bmNvbW1pdHRlZENoYW5nZXM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196080</attachid>
            <date>2013-04-01 23:44:44 -0700</date>
            <delta_ts>2013-04-02 09:52:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113318-20130402154435.patch</filename>
            <type>text/plain</type>
            <size>24839</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3Mzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDYwNDNiZWQ0MDFiOWFk
YzQxYjI3M2VjNjIwOTQ2NzI5YzllOTVjOC4uZGJlNWM2MTYyNWMyZWQzNTRkNzVmZjEwOWRkMjE4
NTQyYzY2YWY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTA0LTAxICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2sub2hAY29sbGFib3JhLmNvbT4KKworICAgICAgICBbR1RLXVtB
Q10gU3VwcG9ydCBwcmVzZXJ2ZXMzRCBjc3MgcHJvcGVydHkgZm9yIGNsdXR0ZXIgYWMgYmFja2Vu
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzMx
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYnJpbmdzIHByZXNlcnZlLTNEIGNzcyBwcm9wZXJ0eSBzdXBwb3J0IHRvIFdlYktpdEd0
aysgd2l0aCBjbHV0dGVyIGFjIGJhY2tlZC4KKyAgICAgICAgTW9zdCBvZiB0aGUgY29kZSBpcyBi
YXNlZCBvbiBNYWMgcG9ydCdzIGltcGxlbWVudGF0aW9uLiBUaGUgY29yZSBjb25jZXB0IGlzIHRo
YXQKKyAgICAgICAgaWYgYSBsYXllciBoYXMgcHJlc2VydmUtM2QgcHJvcGVydHkgZmFsc2UsIHdl
IG1hcmsgaXRzZWxmIGFuZCBpdHMgaW1tZWRpYXRlIGNoaWxkcmVuCisgICAgICAgIHRvIG1ha2Ug
dGhlbSBmbGF0dGVuLiBBbmQgdGhlbiB3ZSByZW1vdmUgM0QgZmFjdG9yIGluIGEgbW9kZWxWaWV3
IG1hdHJpeAorICAgICAgICB3aGVuIGFwcGx5aW5nIGl0IHRvIGVhY2ggYWN0b3IuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMgY292ZXJlZCB3aXRoIGV4aXN0aW5nIEFDIHRlc3Rz
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0
b3IuY3BwOgorICAgICAgICAoX0dyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUpOgorICAgICAgICAo
Z3JhcGhpY3NfbGF5ZXJfYWN0b3JfaW5pdCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JB
cHBseVRyYW5zZm9ybSk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JOZXcpOgorICAgICAg
ICAoZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlRnJvbVN1cGVyTGF5ZXIpOgorICAgICAgICAoZ3Jh
cGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJB
Y3RvclNldEZsYXR0ZW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NMYXllckFjdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0xheWVyQ2x1dHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2x1dHRlcjo6fkdyYXBoaWNzTGF5ZXJDbHV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjptb3ZlT3JDb3B5QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRQcmVzZXJ2ZXMz
RCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6Zmx1c2hDb21wb3Np
dGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZWN1
cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJDaGFuZ2VzQmVmb3JlU3VibGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVHZW9tZXRy
eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlU3VibGF5
ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVT
dHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6
OmVuc3VyZVN0cnVjdHVyYWxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2x1dHRlcjo6c3RydWN0dXJhbExheWVyUHVycG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2x1dHRlcjo6bGF5ZXJGb3JTdXBlcmxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmg6CisgICAgICAgIChDb21t
aXRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6Q29tbWl0
U3RhdGU6OkNvbW1pdFN0YXRlKToKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXJDbHV0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpwcmltYXJ5TGF5ZXIpOgorCiAy
MDEzLTA0LTAxICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
VlMyMDEwIFdlYkNvcmVHZW5lcmF0ZWQgYnVpbGQgc2NyaXB0cyBzaG91bGQgdXNlIG5ldyBmZWF0
dXJlLWRlZmluZXMgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwCmluZGV4IDA3
ZmRiNDI0NzEyNTRiYWYwOTNjOGE3MjI1MDM2NzI2OGViMTQ2M2QuLmU3MjAzYzVjMzMwMjQwMWZi
MWMwYzIwZGRmYjJkYzM0OTllNTE0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAK
QEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fp
cm8uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NCw3ICs0NSw4
IEBAIHN0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSB7CiAKICAgICBQbGF0Zm9ybUNs
dXR0ZXJMYXllckNsaWVudCogbGF5ZXJDbGllbnQ7CiAKLSAgICBnYm9vbGVhbiBkcmF3c0NvbnRl
bnQ7CisgICAgYm9vbCBmbGF0dGVuOworICAgIGJvb2wgZHJhd3NDb250ZW50OwogCiAgICAgZmxv
YXQgc2Nyb2xsWDsKICAgICBmbG9hdCBzY3JvbGxZOwpAQCAtMTAyLDYgKzEwNCw4IEBAIHN0YXRp
YyB2b2lkIGdyYXBoaWNzX2xheWVyX2FjdG9yX2luaXQoR3JhcGhpY3NMYXllckFjdG9yKiBzZWxm
KQogCiAgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcmVhY3RpdmUoQ0xVVFRFUl9BQ1RPUihzZWxmKSwg
RkFMU0UpOwogCisgICAgc2VsZi0+cHJpdi0+ZmxhdHRlbiA9IHRydWU7CisKICAgICAvLyBEZWZh
dWx0IHVzZWQgYnkgR3JhcGhpY3NMYXllci4KICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNo
b3JQb2ludChzZWxmLCAwLjUsIDAuNSwgMC4wKTsKIApAQCAtMjAyLDcgKzIwNiwxMiBAQCBzdGF0
aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybShDbHV0dGVyQWN0b3IqIGFj
dG9yLCBDb2dsTWF0cml4KiBtYQogICAgIGlmICh0cmFuc2xhdGVYIHx8IHRyYW5zbGF0ZVkpCiAg
ICAgICAgIGNvZ2xfbWF0cml4X3RyYW5zbGF0ZShtYXRyaXgsIHRyYW5zbGF0ZVgsIHRyYW5zbGF0
ZVksIDApOwogCi0gICAgQ0xVVFRFUl9BQ1RPUl9DTEFTUyhncmFwaGljc19sYXllcl9hY3Rvcl9w
YXJlbnRfY2xhc3MpLT5hcHBseV90cmFuc2Zvcm0oYWN0b3IsIG1hdHJpeCk7CisgICAgQ29nbE1h
dHJpeCBtb2RlbFZpZXdUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworICAgIENM
VVRURVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfcGFyZW50X2NsYXNzKS0+YXBw
bHlfdHJhbnNmb3JtKGFjdG9yLCAmbW9kZWxWaWV3VHJhbnNmb3JtKTsKKworICAgIGlmIChwcml2
LT5mbGF0dGVuKQorICAgICAgICBtb2RlbFZpZXdUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCgmbW9kZWxWaWV3VHJhbnNmb3JtKS50bzJkVHJhbnNmb3JtKCk7CisgICAgY29nbF9tYXRy
aXhfbXVsdGlwbHkobWF0cml4LCBtYXRyaXgsICZtb2RlbFZpZXdUcmFuc2Zvcm0pOwogfQogCiBz
dGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQYWludChDbHV0dGVyQWN0b3IqIGFjdG9yKQpA
QCAtMjk5LDcgKzMwOCwxMSBAQCBzdGF0aWMgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDbHV0dGVy
QWN0b3IqIGFjdG9yLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiBHcmFwaGljc0xheWVyQWN0
b3IqIGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyhHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBl
IHR5cGUpCiB7CiAgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xBWUVS
X0FDVE9SKGdfb2JqZWN0X25ldyhHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCAwKSk7Ci0gICAg
bGF5ZXItPnByaXYtPmxheWVyVHlwZSA9IHR5cGU7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJp
dmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgcHJpdi0+bGF5ZXJUeXBlID0gdHlwZTsK
KyAgICBpZiAocHJpdi0+bGF5ZXJUeXBlID09IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5
cGVUcmFuc2Zvcm1MYXllcikKKyAgICAgICAgcHJpdi0+ZmxhdHRlbiA9IGZhbHNlOwogCiAgICAg
cmV0dXJuIGxheWVyOwogfQpAQCAtNDM2LDYgKzQ0OSwxNiBAQCB2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldFN1YmxheWVycyhHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBHcmFwaGljc0xheWVy
QWN0bwogICAgIH0KIH0KIAordm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVGcm9tU3VwZXJM
YXllcihHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIENsdXR0ZXJBY3RvciogYWN0
b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKKyAgICBDbHV0dGVyQWN0b3IqIHBhcmVudEFjdG9y
ID0gY2x1dHRlcl9hY3Rvcl9nZXRfcGFyZW50KGFjdG9yKTsKKyAgICBpZiAoIXBhcmVudEFjdG9y
KQorICAgICAgICByZXR1cm47CisKKyAgICBjbHV0dGVyX2FjdG9yX3JlbW92ZV9jaGlsZChwYXJl
bnRBY3RvciwgYWN0b3IpOworfQorCiBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIGdy
YXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQog
ewogICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKQEAg
LTQ3NCw3ICs0OTcsNyBAQCBmbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZKEdy
YXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCiAgICAgcmV0dXJuIHByaXYtPnRyYW5zbGF0ZVk7CiB9
CiAKLXZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJB
Y3RvciogbGF5ZXIsIGdib29sZWFuIGRyYXdzQ29udGVudCkKK3ZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yU2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGJvb2wgZHJhd3ND
b250ZW50KQogewogICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+
cHJpdjsKIApAQCAtNDkxLDYgKzUxNCwxNSBAQCBnYm9vbGVhbiBncmFwaGljc0xheWVyQWN0b3JH
ZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKICAgICByZXR1cm4gbGF5
ZXItPnByaXYtPmRyYXdzQ29udGVudDsKIH0KIAordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRG
bGF0dGVuKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGJvb2wgZmxhdHRlbikKK3sKKyAgICBH
cmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgaWYgKGZs
YXR0ZW4gPT0gcHJpdi0+ZmxhdHRlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+Zmxh
dHRlbiA9IGZsYXR0ZW47Cit9CisKIFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbiog
Z3JhcGhpY3NMYXllckFjdG9yR2V0QW5pbWF0aW9uRm9yS2V5KEdyYXBoaWNzTGF5ZXJBY3Rvciog
bGF5ZXIsIGNvbnN0IFN0cmluZyBrZXkpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNv
cmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbio+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNU
KGxheWVyKSwga2V5LnV0ZjgoKS5kYXRhKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oCmlu
ZGV4IDlhM2M3YWVlZmU1ZmJhNjYzY2Q3ZDQ4OTMwMGYwY2I3YzQ5NTIyMGMuLmY4YmQ3N2ViMjc5
ZGYxMDBjNGY3Y2JjYzVhMmQxYjM5MzMyY2ZmNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3Iu
aApAQCAtODksMTEgKzg5LDE0IEBAIGZsb2F0IGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0
ZVgoR3JhcGhpY3NMYXllckFjdG9yKik7CiB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5z
bGF0ZVkoR3JhcGhpY3NMYXllckFjdG9yKiwgZmxvYXQpOwogZmxvYXQgZ3JhcGhpY3NMYXllckFj
dG9yR2V0VHJhbnNsYXRlWShHcmFwaGljc0xheWVyQWN0b3IqKTsKIGdpbnQgZ3JhcGhpY3NMYXll
ckFjdG9yR2V0bkNoaWxkcmVuKEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBncmFwaGljc0xh
eWVyQWN0b3JSZW1vdmVGcm9tU3VwZXJMYXllcihHcmFwaGljc0xheWVyQWN0b3IqKTsKIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgZ3JhcGhpY3NMYXllckFjdG9yR2V0
TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3RvciopOwogdm9pZCBncmFwaGljc0xheWVyQWN0b3JT
ZXRMYXllclR5cGUoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNs
dXR0ZXI6OkxheWVyVHlwZSk7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJlcGxhY2VTdWJsYXll
cihHcmFwaGljc0xheWVyQWN0b3IqLCBDbHV0dGVyQWN0b3IqLCBDbHV0dGVyQWN0b3IqKTsKIHZv
aWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U3VibGF5ZXJzKEdyYXBoaWNzTGF5ZXJBY3RvciosIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJBY3Rvckxpc3QmKTsKIGdib29sZWFuIGdyYXBoaWNzTGF5ZXJB
Y3RvckdldERyYXdzQ29udGVudChHcmFwaGljc0xheWVyQWN0b3IqKTsKLXZvaWQgZ3JhcGhpY3NM
YXllckFjdG9yU2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciosIGdib29sZWFuIGRy
YXdzQ29udGVudCk7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldERyYXdzQ29udGVudChHcmFw
aGljc0xheWVyQWN0b3IqLCBib29sIGRyYXdzQ29udGVudCk7Cit2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldEZsYXR0ZW4oR3JhcGhpY3NMYXllckFjdG9yKiwgYm9vbCBmbGF0dGVuKTsKIAogV2Vi
Q29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBncmFwaGljc0xheWVyQWN0b3JHZXRBbmlt
YXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiwgY29uc3QgU3RyaW5nKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xh
eWVyQ2x1dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVy
L0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAppbmRleCBhYjA0Y2M0YWJjNjVmZTM2ZjczYTI0NGM0
NzViYTU0ZGEzMWU3ZTRkLi41ZmFmMjcxODM0NTAzM2U3YzFkZGI2YTMyMzU1MTc0ODZjOTVmMjAw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcApAQCAtNDAsNiArNDAsNyBAQAog
I2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIlNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRl
ICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KQEAgLTI5Nyw2ICsyOTgsMTEgQEAgR3JhcGhpY3NMYXllckNsdXR0ZXI6On5HcmFwaGlj
c0xheWVyQ2x1dHRlcigpCiAgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChtX2xh
eWVyLmdldCgpLCAwKTsKICAgICAgICAgZ19pZGxlX2FkZChpZGxlRGVzdHJveSwgbV9sYXllci5s
ZWFrUmVmKCkpOwogICAgIH0KKworICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikgeworICAgICAg
ICBncmFwaGljc0xheWVyQWN0b3JTZXRDbGllbnQobV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCksIDAp
OworICAgICAgICBnX2lkbGVfYWRkKGlkbGVEZXN0cm95LCBtX3N0cnVjdHVyYWxMYXllci5sZWFr
UmVmKCkpOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpCkBAIC0zMDgsNyArMzE0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVy
Q2x1dHRlcjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCiAKIENsdXR0ZXJBY3RvciogR3Jh
cGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiBD
TFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpOworICAgIHJldHVybiBDTFVUVEVSX0FDVE9SKHBy
aW1hcnlMYXllcigpKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNE
aXNwbGF5KCkKQEAgLTM4OCw2ICszOTQsMjAgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQogICAgIG5vdGVMYXll
clByb3BlcnR5Q2hhbmdlZChUcmFuc2Zvcm1DaGFuZ2VkKTsKIH0KIAordm9pZCBHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6bW92ZU9yQ29weUFuaW1hdGlvbnMoTW92ZU9yQ29weSBvcGVyYXRpb24sIEdy
YXBoaWNzTGF5ZXJBY3RvciogZnJvbUxheWVyLCBHcmFwaGljc0xheWVyQWN0b3IqIHRvTGF5ZXIp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRl
cjo6c2V0UHJlc2VydmVzM0QoYm9vbCBwcmVzZXJ2ZXMzRCkKK3sKKyAgICBpZiAocHJlc2VydmVz
M0QgPT0gbV9wcmVzZXJ2ZXMzRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXll
cjo6c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QpOworICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChQcmVzZXJ2ZXMzRENoYW5nZWQpOworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVy
OjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRlbnQpCiB7CiAgICAgaWYgKGRyYXdzQ29u
dGVudCA9PSBtX2RyYXdzQ29udGVudCkKQEAgLTU1NCwxNCArNTc0LDExIEBAIEZsb2F0UG9pbnQg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0
JiBwYWdlU2NhbGUpCiB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpmbHVzaENvbXBvc2l0aW5n
U3RhdGUoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKIHsKICAgICBUcmFuc2Zvcm1TdGF0ZSBz
dGF0ZShUcmFuc2Zvcm1TdGF0ZTo6VW5hcHBseUludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24sIEZs
b2F0UXVhZChjbGlwUmVjdCkpOwotICAgIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoc3RhdGUpOwor
ICAgIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUoKSwgc3RhdGUpOwogfQogCi12
b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IFRy
YW5zZm9ybVN0YXRlJiBzdGF0ZSwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlLCBib29sIGFmZmVjdGVkQnlQYWdlU2NhbGUpCit2
b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IENv
bW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhbnNmb3JtU3RhdGUmIHN0YXRlLCBmbG9h
dCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jh
c2UsIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSkKIHsKLSAgICAvLyBGSVhNRTogU2F2ZSB0aGUg
c3RhdGUgYmVmb3JlIHNlbmRpbmcgZG93biB0byBraWRzIGFuZCByZXN0b3JlIGl0IGFmdGVyCi0g
ICAgVHJhbnNmb3JtU3RhdGUgbG9jYWxTdGF0ZSA9IHN0YXRlOwotCiAgICAgaWYgKGFwcGxpZXNQ
YWdlU2NhbGUoKSkgewogICAgICAgICBwYWdlU2NhbGVGYWN0b3IgPSB0aGlzLT5wYWdlU2NhbGVG
YWN0b3IoKTsKICAgICAgICAgYWZmZWN0ZWRCeVBhZ2VTY2FsZSA9IHRydWU7CkBAIC01NzksNyAr
NTk2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdl
cyhjb25zdCBUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUsIGYKIAogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewogICAgICAgICBHcmFwaGljc0xheWVyQ2x1dHRlciog
Y3VycmVudENoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNsdXR0ZXIqPihjaGlsZExh
eWVyc1tpXSk7Ci0gICAgICAgIGN1cnJlbnRDaGlsZC0+cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhs
b2NhbFN0YXRlLCBwYWdlU2NhbGVGYWN0b3IsIGJhc2VSZWxhdGl2ZVBvc2l0aW9uLCBhZmZlY3Rl
ZEJ5UGFnZVNjYWxlKTsKKyAgICAgICAgY3VycmVudENoaWxkLT5yZWN1cnNpdmVDb21taXRDaGFu
Z2VzKGNvbW1pdFN0YXRlLCBzdGF0ZSwgcGFnZVNjYWxlRmFjdG9yLCBiYXNlUmVsYXRpdmVQb3Np
dGlvbiwgYWZmZWN0ZWRCeVBhZ2VTY2FsZSk7CiAgICAgfQogCiAgICAgY29tbWl0TGF5ZXJDaGFu
Z2VzQWZ0ZXJTdWJsYXllcnMoKTsKQEAgLTU5OCw2ICs2MTUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpCiAgICAgaWYgKCFt
X3VuY29tbWl0dGVkQ2hhbmdlcykKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fdW5jb21t
aXR0ZWRDaGFuZ2VzICYgQ2hpbGRyZW5DaGFuZ2VkKQorICAgICAgICB1cGRhdGVTdWJsYXllckxp
c3QoKTsKKwogICAgIG1fdW5jb21taXR0ZWRDaGFuZ2VzID0gTm9DaGFuZ2U7CiB9CiB2b2lkIEdy
YXBoaWNzTGF5ZXJDbHV0dGVyOjpub3RlU3VibGF5ZXJzQ2hhbmdlZCgpCkBAIC02MTgsMzQgKzYz
OCw0NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjb21taXRMYXllckNoYW5nZXNCZWZv
cmVTdWJsYXllcnMoZmxvYXQgcGFnZVNjYWxlRmFjdAogICAgIGlmICghbV91bmNvbW1pdHRlZENo
YW5nZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAm
IE5hbWVDaGFuZ2VkKQotICAgICAgICB1cGRhdGVMYXllck5hbWVzKCk7Ci0KLSAgICBpZiAobV91
bmNvbW1pdHRlZENoYW5nZXMgJiBDaGlsZHJlbkNoYW5nZWQpCi0gICAgICAgIHVwZGF0ZVN1Ymxh
eWVyTGlzdCgpOworICAgIC8vIE5lZWQgdG8gaGFuZGxlIFByZXNlcnZlczNEQ2hhbmdlZCBmaXJz
dCwgYmVjYXVzZSBpdCBhZmZlY3RzIHdoaWNoIGxheWVycyBzdWJzZXF1ZW50IHByb3BlcnRpZXMg
YXJlIGFwcGxpZWQgdG8KKyAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBQcmVzZXJ2ZXMz
RENoYW5nZWQpCisgICAgICAgIHVwZGF0ZVN0cnVjdHVyYWxMYXllcigpOwogCiAgICAgaWYgKG1f
dW5jb21taXR0ZWRDaGFuZ2VzICYgR2VvbWV0cnlDaGFuZ2VkKQogICAgICAgICB1cGRhdGVHZW9t
ZXRyeShwYWdlU2NhbGVGYWN0b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogCi0gICAgaWYg
KG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgVHJhbnNmb3JtQ2hhbmdlZCkKLSAgICAgICAgdXBkYXRl
VHJhbnNmb3JtKCk7Ci0KICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBEcmF3c0NvbnRl
bnRDaGFuZ2VkKQogICAgICAgICB1cGRhdGVMYXllckRyYXdzQ29udGVudChwYWdlU2NhbGVGYWN0
b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogCi0gICAgaWYgKG1fdW5jb21taXR0ZWRDaGFu
Z2VzICYgRGlydHlSZWN0c0NoYW5nZWQpCi0gICAgICAgIHJlcGFpbnRMYXllckRpcnR5UmVjdHMo
KTsKKyAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBOYW1lQ2hhbmdlZCkKKyAgICAgICAg
dXBkYXRlTGF5ZXJOYW1lcygpOworCisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgVHJh
bnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CiAKICAgICBpZiAobV91
bmNvbW1pdHRlZENoYW5nZXMgJiBPcGFjaXR5Q2hhbmdlZCkKICAgICAgICAgdXBkYXRlT3BhY2l0
eU9uTGF5ZXIoKTsKIAogICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIEFuaW1hdGlvbkNo
YW5nZWQpCiAgICAgICAgIHVwZGF0ZUFuaW1hdGlvbnMoKTsKKworICAgIGlmIChtX3VuY29tbWl0
dGVkQ2hhbmdlcyAmIERpcnR5UmVjdHNDaGFuZ2VkKQorICAgICAgICByZXBhaW50TGF5ZXJEaXJ0
eVJlY3RzKCk7CisKKyAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBDaGlsZHJlbkNoYW5n
ZWQpIHsKKyAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CisgICAgICAgIC8vIFN1YmxheWVy
cyBtYXkgc2V0IHRoaXMgZmxhZyBhZ2Fpbiwgc28gY2xlYXIgaXQgdG8gYXZvaWQgYWx3YXlzIHVw
ZGF0aW5nIHN1YmxheWVycyBpbiBjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpLgor
ICAgICAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcyAmPSB+Q2hpbGRyZW5DaGFuZ2VkOworICAgIH0K
IH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlKQog
ewogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgcGFnZSBzY2FsaW5nLgorICAgIGlmICht
X3N0cnVjdHVyYWxMYXllcikgeworICAgICAgICBjbHV0dGVyX2FjdG9yX3NldF9wb3NpdGlvbihD
TFVUVEVSX0FDVE9SKG1fc3RydWN0dXJhbExheWVyLmdldCgpKSwgbV9wb3NpdGlvbi54KCksIG1f
cG9zaXRpb24ueSgpKTsKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9zZXRfc2l6ZShDTFVUVEVSX0FD
VE9SKG1fc3RydWN0dXJhbExheWVyLmdldCgpKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldEFuY2hvclBvaW50KG1fc3RydWN0
dXJhbExheWVyLmdldCgpLCBtX2FuY2hvclBvaW50LngoKSwgbV9hbmNob3JQb2ludC55KCksIG1f
YW5jaG9yUG9pbnQueigpKTsKKyAgICB9CisKICAgICBjbHV0dGVyX2FjdG9yX3NldF9wb3NpdGlv
bihDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpLCBtX3Bvc2l0aW9uLngoKSwgbV9wb3NpdGlv
bi55KCkpOwogICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3NpemUoQ0xVVFRFUl9BQ1RPUihtX2xheWVy
LmdldCgpKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgZ3JhcGhpY3NM
YXllckFjdG9yU2V0QW5jaG9yUG9pbnQobV9sYXllci5nZXQoKSwgbV9hbmNob3JQb2ludC54KCks
IG1fYW5jaG9yUG9pbnQueSgpLCBtX2FuY2hvclBvaW50LnooKSk7CkBAIC02NTUsMTkgKzY4OCwy
OSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdl
U2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbgogLy8gU28gd2hlbmV2ZXIgdGhlIGxpc3Qgb2Yg
Y2hpbGQgbGF5ZXIgY2hhbmdlcywgdGhlIGxpc3Qgb2YgR3JhcGhpY3NMYXllckFjdG9yIHNob3Vs
ZCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5Lgogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBk
YXRlU3VibGF5ZXJMaXN0KCkKIHsKLSAgICBHcmFwaGljc0xheWVyQWN0b3JMaXN0IG5ld1N1Ymxh
eWVyczsKLSAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNo
aWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXllckFjdG9yTGlzdCBzdHJ1Y3R1cmFsTGF5ZXJDaGls
ZHJlbjsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JMaXN0IHByaW1hcnlMYXllckNoaWxkcmVuOwor
CisgICAgR3JhcGhpY3NMYXllckFjdG9yTGlzdCYgY2hpbGRMaXN0Rm9yU3VibGF5ZXJzID0gbV9z
dHJ1Y3R1cmFsTGF5ZXIgPyBzdHJ1Y3R1cmFsTGF5ZXJDaGlsZHJlbiA6IHByaW1hcnlMYXllckNo
aWxkcmVuOworCisgICAgaWYgKG1fc3RydWN0dXJhbExheWVyKQorICAgICAgICBzdHJ1Y3R1cmFs
TGF5ZXJDaGlsZHJlbi5hcHBlbmQobV9sYXllcik7CiAKKyAgICBjb25zdCBWZWN0b3I8R3JhcGhp
Y3NMYXllcio+JiBjaGlsZExheWVycyA9IGNoaWxkcmVuKCk7CiAgICAgc2l6ZV90IG51bUNoaWxk
cmVuID0gY2hpbGRMYXllcnMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
Q2hpbGRyZW47ICsraSkgewogICAgICAgICBHcmFwaGljc0xheWVyQ2x1dHRlciogY3VycmVudENo
aWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNsdXR0ZXIqPihjaGlsZExheWVyc1tpXSk7
CiAgICAgICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogY2hpbGRMYXllciA9IGN1cnJlbnRDaGlsZC0+
bGF5ZXJGb3JTdXBlcmxheWVyKCk7CiAgICAgICAgIEFTU0VSVChHUkFQSElDU19MQVlFUl9JU19B
Q1RPUihjaGlsZExheWVyKSk7CisgICAgICAgIGNoaWxkTGlzdEZvclN1YmxheWVycy5hcHBlbmQo
Y2hpbGRMYXllcik7CiAKLSAgICAgICAgbmV3U3VibGF5ZXJzLmFwcGVuZChjaGlsZExheWVyKTsK
KyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0RmxhdHRlbihjaGlsZExheWVyLCAhKHByZXNl
cnZlczNEKCkgfHwgY3VycmVudENoaWxkLT5wcmVzZXJ2ZXMzRCgpKSk7CiAgICAgfQogCi0gICAg
Z3JhcGhpY3NMYXllckFjdG9yU2V0U3VibGF5ZXJzKG1fbGF5ZXIuZ2V0KCksIG5ld1N1YmxheWVy
cyk7CisgICAgaWYgKG1fc3RydWN0dXJhbExheWVyKQorICAgICAgICBncmFwaGljc0xheWVyQWN0
b3JTZXRTdWJsYXllcnMobV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCksIHN0cnVjdHVyYWxMYXllckNo
aWxkcmVuKTsKKworICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhtX2xheWVyLmdl
dCgpLCBwcmltYXJ5TGF5ZXJDaGlsZHJlbik7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0
ZXI6OnVwZGF0ZUxheWVyTmFtZXMoKQpAQCAtNjgxLDYgKzcyNCw5MiBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJDbHV0dGVyOjp1cGRhdGVUcmFuc2Zvcm0oKQogICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3Ry
YW5zZm9ybShDTFVUVEVSX0FDVE9SKHByaW1hcnlMYXllcigpKSwgJm1hdHJpeCk7CiB9CiAKK3Zv
aWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZVN0cnVjdHVyYWxMYXllcigpCit7CisgICAg
ZW5zdXJlU3RydWN0dXJhbExheWVyKHN0cnVjdHVyYWxMYXllclB1cnBvc2UoKSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmVuc3VyZVN0cnVjdHVyYWxMYXllcihTdHJ1Y3R1cmFs
TGF5ZXJQdXJwb3NlIHB1cnBvc2UpCit7CisgICAgY29uc3QgTGF5ZXJDaGFuZ2VGbGFncyBzdHJ1
Y3R1cmFsTGF5ZXJDaGFuZ2VGbGFncyA9IE5hbWVDaGFuZ2VkCisgICAgICAgIHwgR2VvbWV0cnlD
aGFuZ2VkCisgICAgICAgIHwgVHJhbnNmb3JtQ2hhbmdlZAorICAgICAgICB8IENoaWxkcmVuVHJh
bnNmb3JtQ2hhbmdlZAorICAgICAgICB8IENoaWxkcmVuQ2hhbmdlZAorICAgICAgICB8IEJhY2tm
YWNlVmlzaWJpbGl0eUNoYW5nZWQKKyAgICAgICAgfCBPcGFjaXR5Q2hhbmdlZDsKKworICAgIGlm
IChwdXJwb3NlID09IE5vU3RydWN0dXJhbExheWVyKSB7CisgICAgICAgIGlmIChtX3N0cnVjdHVy
YWxMYXllcikgeworICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdHJhbnNmb3JtTGF5ZXIgaW4g
dGhlIHBhcmVudCB3aXRoIHRoaXMgbGF5ZXIuCisgICAgICAgICAgICBncmFwaGljc0xheWVyQWN0
b3JSZW1vdmVGcm9tU3VwZXJMYXllcihtX2xheWVyLmdldCgpKTsKKworICAgICAgICAgICAgLy8g
SWYgbV9sYXllciBkb2Vzbid0IGhhdmUgYSBwYXJlbnQsIGl0IG1lYW5zIGl0J3MgdGhlIHJvb3Qg
bGF5ZXIgYW5kCisgICAgICAgICAgICAvLyBpcyBsaWtlbHkgaG9zdGVkIGJ5IHNvbWV0aGluZyB0
aGF0IGlzIG5vdCBleHBlY3RpbmcgdG8gYmUgY2hhbmdlZAorICAgICAgICAgICAgQ2x1dHRlckFj
dG9yKiBwYXJlbnRBY3RvciA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3BhcmVudChDTFVUVEVSX0FDVE9S
KG1fc3RydWN0dXJhbExheWVyLmdldCgpKSk7CisgICAgICAgICAgICBBU1NFUlQocGFyZW50QWN0
b3IpOworICAgICAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yUmVwbGFjZVN1YmxheWVyKEdSQVBI
SUNTX0xBWUVSX0FDVE9SKHBhcmVudEFjdG9yKSwgQ0xVVFRFUl9BQ1RPUihtX3N0cnVjdHVyYWxM
YXllci5nZXQoKSksIENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSkpOworCisgICAgICAgICAg
ICBtb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlLCBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSwgbV9s
YXllci5nZXQoKSk7CisKKyAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIHN0cnVjdHVyYWwgbGF5
ZXIuCisgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IDA7CisKKyAgICAgICAgICAgIG1f
dW5jb21taXR0ZWRDaGFuZ2VzIHw9IHN0cnVjdHVyYWxMYXllckNoYW5nZUZsYWdzOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIHN0cnVjdHVyYWxMYXllckNo
YW5nZWQgPSBmYWxzZTsKKyAgICBpZiAocHVycG9zZSA9PSBTdHJ1Y3R1cmFsTGF5ZXJGb3JQcmVz
ZXJ2ZXMzRCkgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmFsTGF5ZXIgJiYgKGdyYXBoaWNzTGF5
ZXJBY3RvckdldExheWVyVHlwZShtX3N0cnVjdHVyYWxMYXllci5nZXQoKSkgIT0gR3JhcGhpY3NM
YXllckNsdXR0ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyKSkKKyAgICAgICAgICAgIG1fc3Ry
dWN0dXJhbExheWVyID0gMDsKKworICAgICAgICBpZiAoIW1fc3RydWN0dXJhbExheWVyKSB7Cisg
ICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhD
bGllbnQoR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyLCB0aGlz
KTsKKyAgICAgICAgICAgIHN0cnVjdHVyYWxMYXllckNoYW5nZWQgPSB0cnVlOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJhbExheWVyICYmIChncmFwaGlj
c0xheWVyQWN0b3JHZXRMYXllclR5cGUobV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkpICE9IEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVMYXllcikpCisgICAgICAgICAgICBtX3N0cnVjdHVy
YWxMYXllciA9IDA7CisKKyAgICAgICAgaWYgKCFtX3N0cnVjdHVyYWxMYXllcikgeworICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSBncmFwaGljc0xheWVyQWN0b3JOZXdXaXRoQ2xpZW50
KEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVMYXllciwgdGhpcyk7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmFsTGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICghc3RydWN0dXJhbExheWVyQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV91
bmNvbW1pdHRlZENoYW5nZXMgfD0gc3RydWN0dXJhbExheWVyQ2hhbmdlRmxhZ3M7CisKKyAgICAv
LyBXZSd2ZSBjaGFuZ2VkIHRoZSBsYXllciB0aGF0IG91ciBwYXJlbnQgYWRkZWQgdG8gaXRzIHN1
YmxheWVyIGxpc3QsIHNvIHRlbGwgaXQgdG8gdXBkYXRlCisgICAgLy8gc3VibGF5ZXJzIGFnYWlu
IGluIGl0cyBjb21taXRMYXllckNoYW5nZXNBZnRlclN1YmxheWVycygpLgorICAgIHN0YXRpY19j
YXN0PEdyYXBoaWNzTGF5ZXJDbHV0dGVyKj4ocGFyZW50KCkpLT5ub3RlU3VibGF5ZXJzQ2hhbmdl
ZCgpOworCisgICAgLy8gU2V0IHByb3BlcnRpZXMgb2YgbV9sYXllciB0byB0aGVpciBkZWZhdWx0
IHZhbHVlcywgc2luY2UgdGhlc2UgYXJlIGV4cHJlc3NlZCBvbiBvbiB0aGUgc3RydWN0dXJhbCBs
YXllci4KKyAgICBGbG9hdFBvaW50IHBvaW50KDAsIDApOworICAgIEZsb2F0UG9pbnQzRCBhbmNo
b3JQb2ludCgwLjVmLCAwLjVmLCAwKTsKKyAgICBjbHV0dGVyX2FjdG9yX3NldF9wb3NpdGlvbihD
TFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpLCBwb2ludC54KCksIHBvaW50LnkoKSk7CisgICAg
Z3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQobV9sYXllci5nZXQoKSwgYW5jaG9yUG9p
bnQueCgpLCBhbmNob3JQb2ludC55KCksIGFuY2hvclBvaW50LnooKSk7CisKKyAgICBDb2dsTWF0
cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgY2x1dHRlcl9hY3Rvcl9z
ZXRfdHJhbnNmb3JtKENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSksICZtYXRyaXgpOworCisg
ICAgY2x1dHRlcl9hY3Rvcl9zZXRfb3BhY2l0eShDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkp
LCAyNTUpOworCisgICAgbW92ZU9yQ29weUFuaW1hdGlvbnMoTW92ZSwgbV9sYXllci5nZXQoKSwg
bV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkpOworfQorCitHcmFwaGljc0xheWVyQ2x1dHRlcjo6U3Ry
dWN0dXJhbExheWVyUHVycG9zZSBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c3RydWN0dXJhbExheWVy
UHVycG9zZSgpIGNvbnN0Cit7CisgICAgaWYgKHByZXNlcnZlczNEKCkpCisgICAgICAgIHJldHVy
biBTdHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2ZXMzRDsKKworICAgIHJldHVybiBOb1N0cnVjdHVy
YWxMYXllcjsKK30KKwogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlTGF5ZXJEcmF3
c0NvbnRlbnQoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlv
blJlbGF0aXZlVG9CYXNlKQogewogICAgIGlmIChtX2RyYXdzQ29udGVudCkgewpAQCAtMTA5OSw3
ICsxMjI4LDcgQEAgYm9vbCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0QW5pbWF0aW9uS2V5ZnJh
bWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUwKIAogR3JhcGhpY3NMYXllckFjdG9y
KiBHcmFwaGljc0xheWVyQ2x1dHRlcjo6bGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9sYXllci5nZXQoKTsKKyAgICByZXR1cm4gbV9zdHJ1Y3R1cmFsTGF5ZXIgPyBt
X3N0cnVjdHVyYWxMYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7CiB9CiAKIEdyYXBoaWNzTGF5
ZXJBY3RvciogR3JhcGhpY3NMYXllckNsdXR0ZXI6OmFuaW1hdGVkTGF5ZXIoQW5pbWF0ZWRQcm9w
ZXJ0eUlEIHByb3BlcnR5KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oCmluZGV4
IDQyMWFhOTYxODQ4YWE0Y2JkNGJiNjg0OTU3NmY5ZmE3NzZhODIwMzUuLjdmMzBmMTQ5MWU4NTQx
MzFhMTZkODRmZGI5OGNkYzA1NjYwOTJkZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVy
LmgKQEAgLTc5LDEzICs3OSwyMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
RGlzcGxheSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc2VydmVzM0QoYm9vbCk7CisK
ICAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jiwg
Y29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lLCBkb3VibGUgdGltZU9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpOwogCiAgICAgdmlydHVhbCB2
b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwogCi0gICAgdm9p
ZCByZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IFRyYW5zZm9ybVN0YXRlJiwgZmxvYXQgcGFn
ZVNjYWxlRmFjdG9yID0gMSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFz
ZSA9IEZsb2F0UG9pbnQoKSwgYm9vbCBhZmZlY3RlZEJ5UGFnZVNjYWxlID0gZmFsc2UpOworICAg
IHN0cnVjdCBDb21taXRTdGF0ZSB7CisgICAgICAgIGJvb2wgYW5jZXN0b3JIYXNUcmFuc2Zvcm1B
bmltYXRpb247CisgICAgICAgIENvbW1pdFN0YXRlKCkKKyAgICAgICAgICAgIDogYW5jZXN0b3JI
YXNUcmFuc2Zvcm1BbmltYXRpb24oZmFsc2UpCisgICAgICAgIHsgfQorICAgIH07CisgICAgdm9p
ZCByZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbnN0IENvbW1pdFN0YXRlJiwgY29uc3QgVHJhbnNm
b3JtU3RhdGUmLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IgPSAxLCBjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvblJlbGF0aXZlVG9CYXNlID0gRmxvYXRQb2ludCgpLCBib29sIGFmZmVjdGVkQnlQYWdl
U2NhbGUgPSBmYWxzZSk7CiAKIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBjb21wdXRlUG9zaXRp
b25SZWxhdGl2ZVRvQmFzZShmbG9hdCYgcGFnZVNjYWxlKSBjb25zdDsKQEAgLTEwMyw3ICsxMTEs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNsdXR0ZXJMYXllckFuaW1h
dGlvblN0YXJ0ZWQoZG91YmxlIGJlZ2luVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3Jt
Q2x1dHRlckxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0
JiBjbGlwKTsKIAotICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogcHJpbWFyeUxheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllci5nZXQoKTsgfQorICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogcHJpbWFy
eUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkgPyBtX3N0cnVj
dHVyYWxMYXllci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KICAgICBHcmFwaGljc0xheWVyQWN0
b3IqIGxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0OwogICAgIEdyYXBoaWNzTGF5ZXJBY3Rvciog
YW5pbWF0ZWRMYXllcihBbmltYXRlZFByb3BlcnR5SUQpIGNvbnN0OwogCkBAIC0xMjYsNiArMTM0
LDkgQEAgcHJpdmF0ZToKICAgICBib29sIHNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEFuaW1hdGlvbiosIFBsYXRmb3JtQ2x1dHRl
ckFuaW1hdGlvbiosIGludCBmdW5jdGlvbkluZGV4LCBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJh
dGlvblR5cGUsIGJvb2wgaXNNYXRyaXhBbmltYXRpb24sIGNvbnN0IEludFNpemUmIGJveFNpemUp
OwogICAgIGJvb2wgc2V0VHJhbnNmb3JtQW5pbWF0aW9uS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1l
VmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgUGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiwg
aW50IGZ1bmN0aW9uSW5kZXgsIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSwgYm9v
bCBpc01hdHJpeEFuaW1hdGlvbiwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSk7CiAKKyAgICBlbnVt
IE1vdmVPckNvcHkgeyBNb3ZlLCBDb3B5IH07CisgICAgdm9pZCBtb3ZlT3JDb3B5QW5pbWF0aW9u
cyhNb3ZlT3JDb3B5LCBHcmFwaGljc0xheWVyQWN0b3IqIGZyb21MYXllciwgR3JhcGhpY3NMYXll
ckFjdG9yKiB0b0xheWVyKTsKKwogICAgIGJvb2wgYXBwZW5kVG9VbmNvbW1pdHRlZEFuaW1hdGlv
bnMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiwg
Y29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBjb25zdCBJbnRT
aXplJiBib3hTaXplLCBpbnQgYW5pbWF0aW9uSW5kZXgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29s
IGlzTWF0cml4QW5pbWF0aW9uKTsKIAogICAgIGVudW0gTGF5ZXJDaGFuZ2UgewpAQCAtMTQ3LDEy
ICsxNTgsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgQ29udGVudHNJbWFnZUNoYW5nZWQgPSAxIDw8
IDE1LAogICAgICAgICBDb250ZW50c01lZGlhTGF5ZXJDaGFuZ2VkID0gMSA8PCAxNiwKICAgICAg
ICAgQ29udGVudHNDYW52YXNMYXllckNoYW5nZWQgPSAxIDw8IDE3LAotICAgICAgICBDb250ZW50
c1JlY3RDaGFuZ2VkID0gMSA8PCAxOCwKLSAgICAgICAgTWFza0xheWVyQ2hhbmdlZCA9IDEgPDwg
MTksCi0gICAgICAgIFJlcGxpY2F0ZWRMYXllckNoYW5nZWQgPSAxIDw8IDIwLAotICAgICAgICBD
b250ZW50c05lZWRzRGlzcGxheSA9IDEgPDwgMjEsCi0gICAgICAgIEFjY2VsZXJhdGVzRHJhd2lu
Z0NoYW5nZWQgPSAxIDw8IDIyLAotICAgICAgICBDb250ZW50c1NjYWxlQ2hhbmdlZCA9IDEgPDwg
MjMKKyAgICAgICAgQ29udGVudHNDb2xvckxheWVyQ2hhbmdlZCA9IDEgPDwgMTgsCisgICAgICAg
IENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDE5LAorICAgICAgICBNYXNrTGF5ZXJDaGFuZ2Vk
ID0gMSA8PCAyMCwKKyAgICAgICAgUmVwbGljYXRlZExheWVyQ2hhbmdlZCA9IDEgPDwgMjEsCisg
ICAgICAgIENvbnRlbnRzTmVlZHNEaXNwbGF5ID0gMSA8PCAyMiwKKyAgICAgICAgQWNjZWxlcmF0
ZXNEcmF3aW5nQ2hhbmdlZCA9IDEgPDwgMjMsCisgICAgICAgIENvbnRlbnRzU2NhbGVDaGFuZ2Vk
ID0gMSA8PCAyNCwKKyAgICAgICAgQ29udGVudHNWaXNpYmlsaXR5Q2hhbmdlZCA9IDEgPDwgMjUs
CisgICAgICAgIFZpc2libGVSZWN0Q2hhbmdlZCA9IDEgPDwgMjYsCisgICAgICAgIEZpbHRlcnND
aGFuZ2VkID0gMSA8PCAyNywKKyAgICAgICAgRGVidWdJbmRpY2F0b3JzQ2hhbmdlZCA9IDEgPDwg
MjgKICAgICB9OwogCiAgICAgdHlwZWRlZiB1bnNpZ25lZCBMYXllckNoYW5nZUZsYWdzOwpAQCAt
MTYwLDYgKzE3Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBub3RlU3VibGF5ZXJzQ2hhbmdlZCgp
OwogCiAgICAgdm9pZCB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAgICB2b2lkIHVwZGF0
ZVN0cnVjdHVyYWxMYXllcigpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJOYW1lcygpOwogICAgIHZv
aWQgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiAgICAgdm9pZCB1cGRhdGVHZW9tZXRyeShmbG9hdCBw
aXhlbEFsaWdubWVudFNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9C
YXNlKTsKQEAgLTE2OCw5ICsxODUsMTggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlQW5p
bWF0aW9ucygpOwogCisgICAgZW51bSBTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIHsKKyAgICAgICAg
Tm9TdHJ1Y3R1cmFsTGF5ZXIgPSAwLAorICAgICAgICBTdHJ1Y3R1cmFsTGF5ZXJGb3JQcmVzZXJ2
ZXMzRCwKKyAgICAgICAgU3RydWN0dXJhbExheWVyRm9yUmVwbGljYUZsYXR0ZW5pbmcKKyAgICB9
OworICAgIHZvaWQgZW5zdXJlU3RydWN0dXJhbExheWVyKFN0cnVjdHVyYWxMYXllclB1cnBvc2Up
OworICAgIFN0cnVjdHVyYWxMYXllclB1cnBvc2Ugc3RydWN0dXJhbExheWVyUHVycG9zZSgpIGNv
bnN0OworCiAgICAgdm9pZCByZXBhaW50TGF5ZXJEaXJ0eVJlY3RzKCk7CiAKICAgICBHUmVmUHRy
PEdyYXBoaWNzTGF5ZXJBY3Rvcj4gbV9sYXllcjsKKyAgICBHUmVmUHRyPEdyYXBoaWNzTGF5ZXJB
Y3Rvcj4gbV9zdHJ1Y3R1cmFsTGF5ZXI7IC8vIEEgbGF5ZXIgdXNlZCBmb3Igc3RydWN0dXJhbCBy
ZWFzb25zLCBsaWtlIHByZXNlcnZlcy0zZCBvciByZXBsaWNhLWZsYXR0ZW5pbmcuIElzIHRoZSBw
YXJlbnQgb2YgbV9sYXllci4KIAogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IG1fZGlydHlSZWN0czsK
ICAgICBMYXllckNoYW5nZUZsYWdzIG1fdW5jb21taXR0ZWRDaGFuZ2VzOwo=
</data>
<flag name="commit-queue"
          id="218069"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196166</attachid>
            <date>2013-04-02 09:34:25 -0700</date>
            <delta_ts>2013-04-02 10:14:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-113318-20130403013416.patch</filename>
            <type>text/plain</type>
            <size>24904</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3NDM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmU1NTRkM2YyNmQ1MjJk
MTg2YmY4ZDY5NGQ0NDE4NmVmOTYzZDBjNC4uYjk0NjJlNjZlYzliMWI4NDNkNDAyMTk2MDA3MzUx
NDhlOTNlNzAwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTA0LTAyICBDaGFu
Z1Nlb2sgT2ggIDxjaGFuZ3Nlb2sub2hAY29sbGFib3JhLmNvbT4KKworICAgICAgICBbR1RLXVtB
Q10gU3VwcG9ydCBwcmVzZXJ2ZXMzRCBjc3MgcHJvcGVydHkgZm9yIGNsdXR0ZXIgYWMgYmFja2Vu
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzMx
OAorCisgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGJyaW5ncyBwcmVzZXJ2ZS0zRCBjc3MgcHJvcGVydHkgc3VwcG9ydCB0byBX
ZWJLaXRHdGsrIHdpdGggY2x1dHRlciBhYyBiYWNrZWQuCisgICAgICAgIE1vc3Qgb2YgdGhlIGNv
ZGUgaXMgYmFzZWQgb24gTWFjIHBvcnQncyBpbXBsZW1lbnRhdGlvbi4gVGhlIGNvcmUgY29uY2Vw
dCBpcyB0aGF0CisgICAgICAgIGlmIGEgbGF5ZXIgaGFzIHByZXNlcnZlLTNkIHByb3BlcnR5IGZh
bHNlLCB3ZSBtYXJrIGl0c2VsZiBhbmQgaXRzIGltbWVkaWF0ZSBjaGlsZHJlbgorICAgICAgICB0
byBtYWtlIHRoZW0gZmxhdHRlbi4gQW5kIHRoZW4gd2UgcmVtb3ZlIDNEIGZhY3RvciBpbiBhIG1v
ZGVsVmlldyBtYXRyaXgKKyAgICAgICAgd2hlbiBhcHBseWluZyBpdCB0byBlYWNoIGFjdG9yLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlzIGNvdmVyZWQgd2l0aCBleGlzdGluZyBB
QyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NM
YXllckFjdG9yLmNwcDoKKyAgICAgICAgKF9HcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKToKKyAg
ICAgICAgKGdyYXBoaWNzX2xheWVyX2FjdG9yX2luaXQpOgorICAgICAgICAoZ3JhcGhpY3NMYXll
ckFjdG9yQXBwbHlUcmFuc2Zvcm0pOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yTmV3KToK
KyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUZyb21TdXBlckxheWVyKToKKyAgICAg
ICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldERyYXdzQ29udGVudCk6CisgICAgICAgIChncmFwaGlj
c0xheWVyQWN0b3JTZXRGbGF0dGVuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNsdXR0ZXI6On5HcmFwaGljc0xheWVyQ2x1dHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6bW92ZU9yQ29weUFuaW1hdGlvbnMpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0UHJl
c2VydmVzM0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmZsdXNo
Q29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRl
cjo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6Y29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbW1pdExheWVyQ2hhbmdlc0JlZm9yZVN1
YmxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRl
R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0
ZVN1YmxheWVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6
dXBkYXRlU3RydWN0dXJhbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJD
bHV0dGVyOjplbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNsdXR0ZXI6OnN0cnVjdHVyYWxMYXllclB1cnBvc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OmxheWVyRm9yU3VwZXJsYXllcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oOgorICAgICAg
ICAoQ29tbWl0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6
OkNvbW1pdFN0YXRlOjpDb21taXRTdGF0ZSk6CisgICAgICAgIChHcmFwaGljc0xheWVyQ2x1dHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6cHJpbWFyeUxheWVy
KToKKwogMjAxMy0wNC0wMiAgQWxleGFuZHJlIEVsaWFzICA8YWVsaWFzQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTQ3Mzg5LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGlj
c0xheWVyQWN0b3IuY3BwCmluZGV4IDA3ZmRiNDI0NzEyNTRiYWYwOTNjOGE3MjI1MDM2NzI2OGVi
MTQ2M2QuLmU3MjAzYzVjMzMwMjQwMWZiMWMwYzIwZGRmYjJkYzM0OTllNTE0NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXll
ckFjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVy
L0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJQbGF0
Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CkBAIC00NCw3ICs0NSw4IEBAIHN0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9yUHJp
dmF0ZSB7CiAKICAgICBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCogbGF5ZXJDbGllbnQ7CiAK
LSAgICBnYm9vbGVhbiBkcmF3c0NvbnRlbnQ7CisgICAgYm9vbCBmbGF0dGVuOworICAgIGJvb2wg
ZHJhd3NDb250ZW50OwogCiAgICAgZmxvYXQgc2Nyb2xsWDsKICAgICBmbG9hdCBzY3JvbGxZOwpA
QCAtMTAyLDYgKzEwNCw4IEBAIHN0YXRpYyB2b2lkIGdyYXBoaWNzX2xheWVyX2FjdG9yX2luaXQo
R3JhcGhpY3NMYXllckFjdG9yKiBzZWxmKQogCiAgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcmVhY3Rp
dmUoQ0xVVFRFUl9BQ1RPUihzZWxmKSwgRkFMU0UpOwogCisgICAgc2VsZi0+cHJpdi0+ZmxhdHRl
biA9IHRydWU7CisKICAgICAvLyBEZWZhdWx0IHVzZWQgYnkgR3JhcGhpY3NMYXllci4KICAgICBn
cmFwaGljc0xheWVyQWN0b3JTZXRBbmNob3JQb2ludChzZWxmLCAwLjUsIDAuNSwgMC4wKTsKIApA
QCAtMjAyLDcgKzIwNiwxMiBAQCBzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBcHBseVRy
YW5zZm9ybShDbHV0dGVyQWN0b3IqIGFjdG9yLCBDb2dsTWF0cml4KiBtYQogICAgIGlmICh0cmFu
c2xhdGVYIHx8IHRyYW5zbGF0ZVkpCiAgICAgICAgIGNvZ2xfbWF0cml4X3RyYW5zbGF0ZShtYXRy
aXgsIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVksIDApOwogCi0gICAgQ0xVVFRFUl9BQ1RPUl9DTEFT
UyhncmFwaGljc19sYXllcl9hY3Rvcl9wYXJlbnRfY2xhc3MpLT5hcHBseV90cmFuc2Zvcm0oYWN0
b3IsIG1hdHJpeCk7CisgICAgQ29nbE1hdHJpeCBtb2RlbFZpZXdUcmFuc2Zvcm0gPSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpOworICAgIENMVVRURVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJf
YWN0b3JfcGFyZW50X2NsYXNzKS0+YXBwbHlfdHJhbnNmb3JtKGFjdG9yLCAmbW9kZWxWaWV3VHJh
bnNmb3JtKTsKKworICAgIGlmIChwcml2LT5mbGF0dGVuKQorICAgICAgICBtb2RlbFZpZXdUcmFu
c2Zvcm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgmbW9kZWxWaWV3VHJhbnNmb3JtKS50bzJkVHJh
bnNmb3JtKCk7CisgICAgY29nbF9tYXRyaXhfbXVsdGlwbHkobWF0cml4LCBtYXRyaXgsICZtb2Rl
bFZpZXdUcmFuc2Zvcm0pOwogfQogCiBzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQYWlu
dChDbHV0dGVyQWN0b3IqIGFjdG9yKQpAQCAtMjk5LDcgKzMwOCwxMSBAQCBzdGF0aWMgdm9pZCBk
cmF3TGF5ZXJDb250ZW50cyhDbHV0dGVyQWN0b3IqIGFjdG9yLCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiBHcmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyhHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIHR5cGUpCiB7CiAgICAgR3JhcGhpY3NMYXllckFjdG9y
KiBsYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGdfb2JqZWN0X25ldyhHUkFQSElDU19MQVlF
Ul9UWVBFX0FDVE9SLCAwKSk7Ci0gICAgbGF5ZXItPnByaXYtPmxheWVyVHlwZSA9IHR5cGU7Cisg
ICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAg
cHJpdi0+bGF5ZXJUeXBlID0gdHlwZTsKKyAgICBpZiAocHJpdi0+bGF5ZXJUeXBlID09IEdyYXBo
aWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllcikKKyAgICAgICAgcHJpdi0+
ZmxhdHRlbiA9IGZhbHNlOwogCiAgICAgcmV0dXJuIGxheWVyOwogfQpAQCAtNDM2LDYgKzQ0OSwx
NiBAQCB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhHcmFwaGljc0xheWVyQWN0
b3IqIGxheWVyLCBHcmFwaGljc0xheWVyQWN0bwogICAgIH0KIH0KIAordm9pZCBncmFwaGljc0xh
eWVyQWN0b3JSZW1vdmVGcm9tU3VwZXJMYXllcihHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQor
eworICAgIENsdXR0ZXJBY3RvciogYWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKKyAgICBD
bHV0dGVyQWN0b3IqIHBhcmVudEFjdG9yID0gY2x1dHRlcl9hY3Rvcl9nZXRfcGFyZW50KGFjdG9y
KTsKKyAgICBpZiAoIXBhcmVudEFjdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBjbHV0dGVy
X2FjdG9yX3JlbW92ZV9jaGlsZChwYXJlbnRBY3RvciwgYWN0b3IpOworfQorCiBHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShHcmFw
aGljc0xheWVyQWN0b3IqIGxheWVyKQogewogICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUq
IHByaXYgPSBsYXllci0+cHJpdjsKQEAgLTQ3NCw3ICs0OTcsNyBAQCBmbG9hdCBncmFwaGljc0xh
eWVyQWN0b3JHZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCiAgICAgcmV0
dXJuIHByaXYtPnRyYW5zbGF0ZVk7CiB9CiAKLXZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJh
d3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGdib29sZWFuIGRyYXdzQ29udGVu
dCkKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJB
Y3RvciogbGF5ZXIsIGJvb2wgZHJhd3NDb250ZW50KQogewogICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
clByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKIApAQCAtNDkxLDYgKzUxNCwxNSBAQCBnYm9v
bGVhbiBncmFwaGljc0xheWVyQWN0b3JHZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9y
KiBsYXllcikKICAgICByZXR1cm4gbGF5ZXItPnByaXYtPmRyYXdzQ29udGVudDsKIH0KIAordm9p
ZCBncmFwaGljc0xheWVyQWN0b3JTZXRGbGF0dGVuKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIs
IGJvb2wgZmxhdHRlbikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0g
bGF5ZXItPnByaXY7CisgICAgaWYgKGZsYXR0ZW4gPT0gcHJpdi0+ZmxhdHRlbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgcHJpdi0+ZmxhdHRlbiA9IGZsYXR0ZW47Cit9CisKIFdlYkNvcmU6OlBs
YXRmb3JtQ2x1dHRlckFuaW1hdGlvbiogZ3JhcGhpY3NMYXllckFjdG9yR2V0QW5pbWF0aW9uRm9y
S2V5KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGNvbnN0IFN0cmluZyBrZXkpCiB7CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckFuaW1hdGlvbio+KGdf
b2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGxheWVyKSwga2V5LnV0ZjgoKS5kYXRhKCkpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhp
Y3NMYXllckFjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVy
L0dyYXBoaWNzTGF5ZXJBY3Rvci5oCmluZGV4IDlhM2M3YWVlZmU1ZmJhNjYzY2Q3ZDQ4OTMwMGYw
Y2I3YzQ5NTIyMGMuLmY4YmQ3N2ViMjc5ZGYxMDBjNGY3Y2JjYzVhMmQxYjM5MzMyY2ZmNjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhp
Y3NMYXllckFjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaApAQCAtODksMTEgKzg5LDE0IEBAIGZsb2F0IGdyYXBo
aWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKik7CiB2b2lkIGdy
YXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVkoR3JhcGhpY3NMYXllckFjdG9yKiwgZmxvYXQp
OwogZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWShHcmFwaGljc0xheWVyQWN0
b3IqKTsKIGdpbnQgZ3JhcGhpY3NMYXllckFjdG9yR2V0bkNoaWxkcmVuKEdyYXBoaWNzTGF5ZXJB
Y3RvciopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVGcm9tU3VwZXJMYXllcihHcmFw
aGljc0xheWVyQWN0b3IqKTsKIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5
cGUgZ3JhcGhpY3NMYXllckFjdG9yR2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3RvciopOwog
dm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRMYXllclR5cGUoR3JhcGhpY3NMYXllckFjdG9yKiwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSk7Cit2b2lkIGdyYXBoaWNz
TGF5ZXJBY3RvclJlcGxhY2VTdWJsYXllcihHcmFwaGljc0xheWVyQWN0b3IqLCBDbHV0dGVyQWN0
b3IqLCBDbHV0dGVyQWN0b3IqKTsKIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U3VibGF5ZXJz
KEdyYXBoaWNzTGF5ZXJBY3RvciosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBY3Rvckxpc3QmKTsK
IGdib29sZWFuIGdyYXBoaWNzTGF5ZXJBY3RvckdldERyYXdzQ29udGVudChHcmFwaGljc0xheWVy
QWN0b3IqKTsKLXZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KEdyYXBoaWNz
TGF5ZXJBY3RvciosIGdib29sZWFuIGRyYXdzQ29udGVudCk7Cit2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldERyYXdzQ29udGVudChHcmFwaGljc0xheWVyQWN0b3IqLCBib29sIGRyYXdzQ29udGVu
dCk7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldEZsYXR0ZW4oR3JhcGhpY3NMYXllckFjdG9y
KiwgYm9vbCBmbGF0dGVuKTsKIAogV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyQW5pbWF0aW9uKiBn
cmFwaGljc0xheWVyQWN0b3JHZXRBbmltYXRpb25Gb3JLZXkoR3JhcGhpY3NMYXllckFjdG9yKiwg
Y29uc3QgU3RyaW5nKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAppbmRleCBh
YjA0Y2M0YWJjNjVmZTM2ZjczYTI0NGM0NzViYTU0ZGEzMWU3ZTRkLi4zMWIxN2RmMmMzNzNkYzQ4
NjBjZDliNzUwZjQ4NmFmYzlkYmEwNTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVy
LmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1
ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTI5Nyw2ICsyOTgsMTEgQEAgR3JhcGhp
Y3NMYXllckNsdXR0ZXI6On5HcmFwaGljc0xheWVyQ2x1dHRlcigpCiAgICAgICAgIGdyYXBoaWNz
TGF5ZXJBY3RvclNldENsaWVudChtX2xheWVyLmdldCgpLCAwKTsKICAgICAgICAgZ19pZGxlX2Fk
ZChpZGxlRGVzdHJveSwgbV9sYXllci5sZWFrUmVmKCkpOwogICAgIH0KKworICAgIGlmIChtX3N0
cnVjdHVyYWxMYXllcikgeworICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRDbGllbnQobV9z
dHJ1Y3R1cmFsTGF5ZXIuZ2V0KCksIDApOworICAgICAgICBnX2lkbGVfYWRkKGlkbGVEZXN0cm95
LCBtX3N0cnVjdHVyYWxMYXllci5sZWFrUmVmKCkpOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC0zMDgsNyArMzE0
LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmFtZShjb25zdCBTdHJpbmcmIG5h
bWUpCiAKIENsdXR0ZXJBY3RvciogR3JhcGhpY3NMYXllckNsdXR0ZXI6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAogewotICAgIHJldHVybiBDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpOworICAg
IHJldHVybiBDTFVUVEVSX0FDVE9SKHByaW1hcnlMYXllcigpKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNwbGF5KCkKQEAgLTM4OCw2ICszOTQsMjAgQEAgdm9p
ZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0KQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChUcmFuc2Zvcm1DaGFuZ2Vk
KTsKIH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6bW92ZU9yQ29weUFuaW1hdGlvbnMo
TW92ZU9yQ29weSBvcGVyYXRpb24sIEdyYXBoaWNzTGF5ZXJBY3RvciogZnJvbUxheWVyLCBHcmFw
aGljc0xheWVyQWN0b3IqIHRvTGF5ZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0UHJlc2VydmVzM0QoYm9vbCBwcmVzZXJ2ZXMz
RCkKK3sKKyAgICBpZiAocHJlc2VydmVzM0QgPT0gbV9wcmVzZXJ2ZXMzRCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QocHJlc2VydmVzM0QpOwor
ICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZChQcmVzZXJ2ZXMzRENoYW5nZWQpOworfQorCiB2
b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBkcmF3c0NvbnRl
bnQpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCA9PSBtX2RyYXdzQ29udGVudCkKQEAgLTU1NCwx
NCArNTc0LDExIEBAIEZsb2F0UG9pbnQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OmNvbXB1dGVQb3Np
dGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdlU2NhbGUpCiB2b2lkIEdyYXBoaWNzTGF5ZXJD
bHV0dGVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkK
IHsKICAgICBUcmFuc2Zvcm1TdGF0ZSBzdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6VW5hcHBseUludmVy
c2VUcmFuc2Zvcm1EaXJlY3Rpb24sIEZsb2F0UXVhZChjbGlwUmVjdCkpOwotICAgIHJlY3Vyc2l2
ZUNvbW1pdENoYW5nZXMoc3RhdGUpOworICAgIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0
U3RhdGUoKSwgc3RhdGUpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZWN1cnNp
dmVDb21taXRDaGFuZ2VzKGNvbnN0IFRyYW5zZm9ybVN0YXRlJiBzdGF0ZSwgZmxvYXQgcGFnZVNj
YWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0aXZlVG9CYXNlLCBib29s
IGFmZmVjdGVkQnlQYWdlU2NhbGUpCit2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpyZWN1cnNp
dmVDb21taXRDaGFuZ2VzKGNvbnN0IENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJh
bnNmb3JtU3RhdGUmIHN0YXRlLCBmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIGJvb2wgYWZmZWN0ZWRCeVBhZ2VTY2FsZSkKIHsK
LSAgICAvLyBGSVhNRTogU2F2ZSB0aGUgc3RhdGUgYmVmb3JlIHNlbmRpbmcgZG93biB0byBraWRz
IGFuZCByZXN0b3JlIGl0IGFmdGVyCi0gICAgVHJhbnNmb3JtU3RhdGUgbG9jYWxTdGF0ZSA9IHN0
YXRlOwotCiAgICAgaWYgKGFwcGxpZXNQYWdlU2NhbGUoKSkgewogICAgICAgICBwYWdlU2NhbGVG
YWN0b3IgPSB0aGlzLT5wYWdlU2NhbGVGYWN0b3IoKTsKICAgICAgICAgYWZmZWN0ZWRCeVBhZ2VT
Y2FsZSA9IHRydWU7CkBAIC01NzksNyArNTk2LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRl
cjo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhjb25zdCBUcmFuc2Zvcm1TdGF0ZSYgc3RhdGUsIGYK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewogICAgICAg
ICBHcmFwaGljc0xheWVyQ2x1dHRlciogY3VycmVudENoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhp
Y3NMYXllckNsdXR0ZXIqPihjaGlsZExheWVyc1tpXSk7Ci0gICAgICAgIGN1cnJlbnRDaGlsZC0+
cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhsb2NhbFN0YXRlLCBwYWdlU2NhbGVGYWN0b3IsIGJhc2VS
ZWxhdGl2ZVBvc2l0aW9uLCBhZmZlY3RlZEJ5UGFnZVNjYWxlKTsKKyAgICAgICAgY3VycmVudENo
aWxkLT5yZWN1cnNpdmVDb21taXRDaGFuZ2VzKGNvbW1pdFN0YXRlLCBzdGF0ZSwgcGFnZVNjYWxl
RmFjdG9yLCBiYXNlUmVsYXRpdmVQb3NpdGlvbiwgYWZmZWN0ZWRCeVBhZ2VTY2FsZSk7CiAgICAg
fQogCiAgICAgY29tbWl0TGF5ZXJDaGFuZ2VzQWZ0ZXJTdWJsYXllcnMoKTsKQEAgLTU5OCw2ICs2
MTUsOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpjb21taXRMYXllckNoYW5nZXNBZnRl
clN1YmxheWVycygpCiAgICAgaWYgKCFtX3VuY29tbWl0dGVkQ2hhbmdlcykKICAgICAgICAgcmV0
dXJuOwogCisgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgQ2hpbGRyZW5DaGFuZ2VkKQor
ICAgICAgICB1cGRhdGVTdWJsYXllckxpc3QoKTsKKwogICAgIG1fdW5jb21taXR0ZWRDaGFuZ2Vz
ID0gTm9DaGFuZ2U7CiB9CiB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpub3RlU3VibGF5ZXJz
Q2hhbmdlZCgpCkBAIC02MTgsMzQgKzYzOCw0NyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVy
Ojpjb21taXRMYXllckNoYW5nZXNCZWZvcmVTdWJsYXllcnMoZmxvYXQgcGFnZVNjYWxlRmFjdAog
ICAgIGlmICghbV91bmNvbW1pdHRlZENoYW5nZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIE5hbWVDaGFuZ2VkKQotICAgICAgICB1cGRhdGVMYXll
ck5hbWVzKCk7Ci0KLSAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBDaGlsZHJlbkNoYW5n
ZWQpCi0gICAgICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOworICAgIC8vIE5lZWQgdG8gaGFuZGxl
IFByZXNlcnZlczNEQ2hhbmdlZCBmaXJzdCwgYmVjYXVzZSBpdCBhZmZlY3RzIHdoaWNoIGxheWVy
cyBzdWJzZXF1ZW50IHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8KKyAgICBpZiAobV91bmNvbW1p
dHRlZENoYW5nZXMgJiBQcmVzZXJ2ZXMzRENoYW5nZWQpCisgICAgICAgIHVwZGF0ZVN0cnVjdHVy
YWxMYXllcigpOwogCiAgICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgR2VvbWV0cnlDaGFu
Z2VkKQogICAgICAgICB1cGRhdGVHZW9tZXRyeShwYWdlU2NhbGVGYWN0b3IsIHBvc2l0aW9uUmVs
YXRpdmVUb0Jhc2UpOwogCi0gICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgVHJhbnNmb3Jt
Q2hhbmdlZCkKLSAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCk7Ci0KICAgICBpZiAobV91bmNvbW1p
dHRlZENoYW5nZXMgJiBEcmF3c0NvbnRlbnRDaGFuZ2VkKQogICAgICAgICB1cGRhdGVMYXllckRy
YXdzQ29udGVudChwYWdlU2NhbGVGYWN0b3IsIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpOwogCi0g
ICAgaWYgKG1fdW5jb21taXR0ZWRDaGFuZ2VzICYgRGlydHlSZWN0c0NoYW5nZWQpCi0gICAgICAg
IHJlcGFpbnRMYXllckRpcnR5UmVjdHMoKTsKKyAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMg
JiBOYW1lQ2hhbmdlZCkKKyAgICAgICAgdXBkYXRlTGF5ZXJOYW1lcygpOworCisgICAgaWYgKG1f
dW5jb21taXR0ZWRDaGFuZ2VzICYgVHJhbnNmb3JtQ2hhbmdlZCkKKyAgICAgICAgdXBkYXRlVHJh
bnNmb3JtKCk7CiAKICAgICBpZiAobV91bmNvbW1pdHRlZENoYW5nZXMgJiBPcGFjaXR5Q2hhbmdl
ZCkKICAgICAgICAgdXBkYXRlT3BhY2l0eU9uTGF5ZXIoKTsKIAogICAgIGlmIChtX3VuY29tbWl0
dGVkQ2hhbmdlcyAmIEFuaW1hdGlvbkNoYW5nZWQpCiAgICAgICAgIHVwZGF0ZUFuaW1hdGlvbnMo
KTsKKworICAgIGlmIChtX3VuY29tbWl0dGVkQ2hhbmdlcyAmIERpcnR5UmVjdHNDaGFuZ2VkKQor
ICAgICAgICByZXBhaW50TGF5ZXJEaXJ0eVJlY3RzKCk7CisKKyAgICBpZiAobV91bmNvbW1pdHRl
ZENoYW5nZXMgJiBDaGlsZHJlbkNoYW5nZWQpIHsKKyAgICAgICAgdXBkYXRlU3VibGF5ZXJMaXN0
KCk7CisgICAgICAgIC8vIFN1YmxheWVycyBtYXkgc2V0IHRoaXMgZmxhZyBhZ2Fpbiwgc28gY2xl
YXIgaXQgdG8gYXZvaWQgYWx3YXlzIHVwZGF0aW5nIHN1YmxheWVycyBpbiBjb21taXRMYXllckNo
YW5nZXNBZnRlclN1YmxheWVycygpLgorICAgICAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcyAmPSB+
Q2hpbGRyZW5DaGFuZ2VkOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6
dXBkYXRlR2VvbWV0cnkoZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvblJlbGF0aXZlVG9CYXNlKQogewogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQg
cGFnZSBzY2FsaW5nLgorICAgIGlmIChtX3N0cnVjdHVyYWxMYXllcikgeworICAgICAgICBjbHV0
dGVyX2FjdG9yX3NldF9wb3NpdGlvbihDTFVUVEVSX0FDVE9SKG1fc3RydWN0dXJhbExheWVyLmdl
dCgpKSwgbV9wb3NpdGlvbi54KCksIG1fcG9zaXRpb24ueSgpKTsKKyAgICAgICAgY2x1dHRlcl9h
Y3Rvcl9zZXRfc2l6ZShDTFVUVEVSX0FDVE9SKG1fc3RydWN0dXJhbExheWVyLmdldCgpKSwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3Rv
clNldEFuY2hvclBvaW50KG1fc3RydWN0dXJhbExheWVyLmdldCgpLCBtX2FuY2hvclBvaW50Lngo
KSwgbV9hbmNob3JQb2ludC55KCksIG1fYW5jaG9yUG9pbnQueigpKTsKKyAgICB9CisKICAgICBj
bHV0dGVyX2FjdG9yX3NldF9wb3NpdGlvbihDTFVUVEVSX0FDVE9SKG1fbGF5ZXIuZ2V0KCkpLCBt
X3Bvc2l0aW9uLngoKSwgbV9wb3NpdGlvbi55KCkpOwogICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3Np
emUoQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSk7CiAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQobV9sYXllci5n
ZXQoKSwgbV9hbmNob3JQb2ludC54KCksIG1fYW5jaG9yUG9pbnQueSgpLCBtX2FuY2hvclBvaW50
LnooKSk7CkBAIC02NTUsMTkgKzY4OCwzMCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1
cGRhdGVHZW9tZXRyeShmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbgogLy8g
U28gd2hlbmV2ZXIgdGhlIGxpc3Qgb2YgY2hpbGQgbGF5ZXIgY2hhbmdlcywgdGhlIGxpc3Qgb2Yg
R3JhcGhpY3NMYXllckFjdG9yIHNob3VsZCBiZSB1cGRhdGVkIGFjY29yZGluZ2x5Lgogdm9pZCBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlU3VibGF5ZXJMaXN0KCkKIHsKLSAgICBHcmFwaGlj
c0xheWVyQWN0b3JMaXN0IG5ld1N1YmxheWVyczsKLSAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NM
YXllcio+JiBjaGlsZExheWVycyA9IGNoaWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXllckFjdG9y
TGlzdCBzdHJ1Y3R1cmFsTGF5ZXJDaGlsZHJlbjsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JMaXN0
IHByaW1hcnlMYXllckNoaWxkcmVuOworCisgICAgR3JhcGhpY3NMYXllckFjdG9yTGlzdCYgY2hp
bGRMaXN0Rm9yU3VibGF5ZXJzID0gbV9zdHJ1Y3R1cmFsTGF5ZXIgPyBzdHJ1Y3R1cmFsTGF5ZXJD
aGlsZHJlbiA6IHByaW1hcnlMYXllckNoaWxkcmVuOworCisgICAgaWYgKG1fc3RydWN0dXJhbExh
eWVyKQorICAgICAgICBzdHJ1Y3R1cmFsTGF5ZXJDaGlsZHJlbi5hcHBlbmQobV9sYXllcik7CiAK
KyAgICBjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExheWVycyA9IGNoaWxkcmVu
KCk7CiAgICAgc2l6ZV90IG51bUNoaWxkcmVuID0gY2hpbGRMYXllcnMuc2l6ZSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQ2hpbGRyZW47ICsraSkgewogICAgICAgICBHcmFwaGlj
c0xheWVyQ2x1dHRlciogY3VycmVudENoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNs
dXR0ZXIqPihjaGlsZExheWVyc1tpXSk7CiAgICAgICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogY2hp
bGRMYXllciA9IGN1cnJlbnRDaGlsZC0+bGF5ZXJGb3JTdXBlcmxheWVyKCk7CiAgICAgICAgIEFT
U0VSVChHUkFQSElDU19MQVlFUl9JU19BQ1RPUihjaGlsZExheWVyKSk7CisgICAgICAgIGNoaWxk
TGlzdEZvclN1YmxheWVycy5hcHBlbmQoY2hpbGRMYXllcik7CiAKLSAgICAgICAgbmV3U3VibGF5
ZXJzLmFwcGVuZChjaGlsZExheWVyKTsKKyAgICAgICAgLy8gVGhlIGNoaWxkIGxheWVyIG9ubHkg
cHJlc2VydmVzIDNEIGlmIGVpdGhlciBpdHNlbGYgb3IgaXRzIHBhcmVudCBoYXMgcHJlc2VydmVz
M0Qgc2V0LgorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRGbGF0dGVuKGNoaWxkTGF5ZXIs
ICEocHJlc2VydmVzM0QoKSB8fCBjdXJyZW50Q2hpbGQtPnByZXNlcnZlczNEKCkpKTsKICAgICB9
CiAKLSAgICBncmFwaGljc0xheWVyQWN0b3JTZXRTdWJsYXllcnMobV9sYXllci5nZXQoKSwgbmV3
U3VibGF5ZXJzKTsKKyAgICBpZiAobV9zdHJ1Y3R1cmFsTGF5ZXIpCisgICAgICAgIGdyYXBoaWNz
TGF5ZXJBY3RvclNldFN1YmxheWVycyhtX3N0cnVjdHVyYWxMYXllci5nZXQoKSwgc3RydWN0dXJh
bExheWVyQ2hpbGRyZW4pOworCisgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0U3VibGF5ZXJzKG1f
bGF5ZXIuZ2V0KCksIHByaW1hcnlMYXllckNoaWxkcmVuKTsKIH0KIAogdm9pZCBHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6dXBkYXRlTGF5ZXJOYW1lcygpCkBAIC02ODEsNiArNzI1LDkyIEBAIHZvaWQg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OnVwZGF0ZVRyYW5zZm9ybSgpCiAgICAgY2x1dHRlcl9hY3Rv
cl9zZXRfdHJhbnNmb3JtKENMVVRURVJfQUNUT1IocHJpbWFyeUxheWVyKCkpLCAmbWF0cml4KTsK
IH0KIAordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6dXBkYXRlU3RydWN0dXJhbExheWVyKCkK
K3sKKyAgICBlbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoc3RydWN0dXJhbExheWVyUHVycG9zZSgpKTsK
K30KKwordm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6ZW5zdXJlU3RydWN0dXJhbExheWVyKFN0
cnVjdHVyYWxMYXllclB1cnBvc2UgcHVycG9zZSkKK3sKKyAgICBjb25zdCBMYXllckNoYW5nZUZs
YWdzIHN0cnVjdHVyYWxMYXllckNoYW5nZUZsYWdzID0gTmFtZUNoYW5nZWQKKyAgICAgICAgfCBH
ZW9tZXRyeUNoYW5nZWQKKyAgICAgICAgfCBUcmFuc2Zvcm1DaGFuZ2VkCisgICAgICAgIHwgQ2hp
bGRyZW5UcmFuc2Zvcm1DaGFuZ2VkCisgICAgICAgIHwgQ2hpbGRyZW5DaGFuZ2VkCisgICAgICAg
IHwgQmFja2ZhY2VWaXNpYmlsaXR5Q2hhbmdlZAorICAgICAgICB8IE9wYWNpdHlDaGFuZ2VkOwor
CisgICAgaWYgKHB1cnBvc2UgPT0gTm9TdHJ1Y3R1cmFsTGF5ZXIpIHsKKyAgICAgICAgaWYgKG1f
c3RydWN0dXJhbExheWVyKSB7CisgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB0cmFuc2Zvcm1M
YXllciBpbiB0aGUgcGFyZW50IHdpdGggdGhpcyBsYXllci4KKyAgICAgICAgICAgIGdyYXBoaWNz
TGF5ZXJBY3RvclJlbW92ZUZyb21TdXBlckxheWVyKG1fbGF5ZXIuZ2V0KCkpOworCisgICAgICAg
ICAgICAvLyBJZiBtX2xheWVyIGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgaXQgbWVhbnMgaXQncyB0
aGUgcm9vdCBsYXllciBhbmQKKyAgICAgICAgICAgIC8vIGlzIGxpa2VseSBob3N0ZWQgYnkgc29t
ZXRoaW5nIHRoYXQgaXMgbm90IGV4cGVjdGluZyB0byBiZSBjaGFuZ2VkCisgICAgICAgICAgICBD
bHV0dGVyQWN0b3IqIHBhcmVudEFjdG9yID0gY2x1dHRlcl9hY3Rvcl9nZXRfcGFyZW50KENMVVRU
RVJfQUNUT1IobV9zdHJ1Y3R1cmFsTGF5ZXIuZ2V0KCkpKTsKKyAgICAgICAgICAgIEFTU0VSVChw
YXJlbnRBY3Rvcik7CisgICAgICAgICAgICBncmFwaGljc0xheWVyQWN0b3JSZXBsYWNlU3VibGF5
ZXIoR1JBUEhJQ1NfTEFZRVJfQUNUT1IocGFyZW50QWN0b3IpLCBDTFVUVEVSX0FDVE9SKG1fc3Ry
dWN0dXJhbExheWVyLmdldCgpKSwgQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSk7CisKKyAg
ICAgICAgICAgIG1vdmVPckNvcHlBbmltYXRpb25zKE1vdmUsIG1fc3RydWN0dXJhbExheWVyLmdl
dCgpLCBtX2xheWVyLmdldCgpKTsKKworICAgICAgICAgICAgLy8gUmVsZWFzZSB0aGUgc3RydWN0
dXJhbCBsYXllci4KKyAgICAgICAgICAgIG1fc3RydWN0dXJhbExheWVyID0gMDsKKworICAgICAg
ICAgICAgbV91bmNvbW1pdHRlZENoYW5nZXMgfD0gc3RydWN0dXJhbExheWVyQ2hhbmdlRmxhZ3M7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgc3RydWN0dXJh
bExheWVyQ2hhbmdlZCA9IGZhbHNlOworICAgIGlmIChwdXJwb3NlID09IFN0cnVjdHVyYWxMYXll
ckZvclByZXNlcnZlczNEKSB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyYWxMYXllciAmJiAoZ3Jh
cGhpY3NMYXllckFjdG9yR2V0TGF5ZXJUeXBlKG1fc3RydWN0dXJhbExheWVyLmdldCgpKSAhPSBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpKQorICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmFsTGF5ZXIgPSAwOworCisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmFsTGF5
ZXIpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJhbExheWVyID0gZ3JhcGhpY3NMYXllckFjdG9y
TmV3V2l0aENsaWVudChHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5
ZXIsIHRoaXMpOworICAgICAgICAgICAgc3RydWN0dXJhbExheWVyQ2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmFsTGF5ZXIgJiYg
KGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShtX3N0cnVjdHVyYWxMYXllci5nZXQoKSkg
IT0gR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZUxheWVyKSkKKyAgICAgICAgICAgIG1f
c3RydWN0dXJhbExheWVyID0gMDsKKworICAgICAgICBpZiAoIW1fc3RydWN0dXJhbExheWVyKSB7
CisgICAgICAgICAgICBtX3N0cnVjdHVyYWxMYXllciA9IGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dp
dGhDbGllbnQoR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKKyAg
ICAgICAgICAgIHN0cnVjdHVyYWxMYXllckNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFzdHJ1Y3R1cmFsTGF5ZXJDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3VuY29tbWl0dGVkQ2hhbmdlcyB8PSBzdHJ1Y3R1cmFsTGF5ZXJDaGFuZ2VGbGFnczsK
KworICAgIC8vIFdlJ3ZlIGNoYW5nZWQgdGhlIGxheWVyIHRoYXQgb3VyIHBhcmVudCBhZGRlZCB0
byBpdHMgc3VibGF5ZXIgbGlzdCwgc28gdGVsbCBpdCB0byB1cGRhdGUKKyAgICAvLyBzdWJsYXll
cnMgYWdhaW4gaW4gaXRzIGNvbW1pdExheWVyQ2hhbmdlc0FmdGVyU3VibGF5ZXJzKCkuCisgICAg
c3RhdGljX2Nhc3Q8R3JhcGhpY3NMYXllckNsdXR0ZXIqPihwYXJlbnQoKSktPm5vdGVTdWJsYXll
cnNDaGFuZ2VkKCk7CisKKyAgICAvLyBTZXQgcHJvcGVydGllcyBvZiBtX2xheWVyIHRvIHRoZWly
IGRlZmF1bHQgdmFsdWVzLCBzaW5jZSB0aGVzZSBhcmUgZXhwcmVzc2VkIG9uIG9uIHRoZSBzdHJ1
Y3R1cmFsIGxheWVyLgorICAgIEZsb2F0UG9pbnQgcG9pbnQoMCwgMCk7CisgICAgRmxvYXRQb2lu
dDNEIGFuY2hvclBvaW50KDAuNWYsIDAuNWYsIDApOworICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3Bv
c2l0aW9uKENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSksIHBvaW50LngoKSwgcG9pbnQueSgp
KTsKKyAgICBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNob3JQb2ludChtX2xheWVyLmdldCgpLCBh
bmNob3JQb2ludC54KCksIGFuY2hvclBvaW50LnkoKSwgYW5jaG9yUG9pbnQueigpKTsKKworICAg
IENvZ2xNYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKyAgICBjbHV0dGVy
X2FjdG9yX3NldF90cmFuc2Zvcm0oQ0xVVFRFUl9BQ1RPUihtX2xheWVyLmdldCgpKSwgJm1hdHJp
eCk7CisKKyAgICBjbHV0dGVyX2FjdG9yX3NldF9vcGFjaXR5KENMVVRURVJfQUNUT1IobV9sYXll
ci5nZXQoKSksIDI1NSk7CisKKyAgICBtb3ZlT3JDb3B5QW5pbWF0aW9ucyhNb3ZlLCBtX2xheWVy
LmdldCgpLCBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSk7Cit9CisKK0dyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpTdHJ1Y3R1cmFsTGF5ZXJQdXJwb3NlIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzdHJ1Y3R1
cmFsTGF5ZXJQdXJwb3NlKCkgY29uc3QKK3sKKyAgICBpZiAocHJlc2VydmVzM0QoKSkKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyYWxMYXllckZvclByZXNlcnZlczNEOworCisgICAgcmV0dXJuIE5v
U3RydWN0dXJhbExheWVyOworfQorCiB2b2lkIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjp1cGRhdGVM
YXllckRyYXdzQ29udGVudChmbG9hdCBwYWdlU2NhbGVGYWN0b3IsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UpCiB7CiAgICAgaWYgKG1fZHJhd3NDb250ZW50KSB7CkBA
IC0xMDk5LDcgKzEyMjksNyBAQCBib29sIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpzZXRBbmltYXRp
b25LZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTAogCiBHcmFwaGljc0xh
eWVyQWN0b3IqIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpsYXllckZvclN1cGVybGF5ZXIoKSBjb25z
dAogewotICAgIHJldHVybiBtX2xheWVyLmdldCgpOworICAgIHJldHVybiBtX3N0cnVjdHVyYWxM
YXllciA/IG1fc3RydWN0dXJhbExheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsKIH0KIAogR3Jh
cGhpY3NMYXllckFjdG9yKiBHcmFwaGljc0xheWVyQ2x1dHRlcjo6YW5pbWF0ZWRMYXllcihBbmlt
YXRlZFByb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVy
LmgKaW5kZXggNDIxYWE5NjE4NDhhYTRjYmQ0YmI2ODQ5NTc2ZjlmYTc3NmE4MjAzNS4uN2YzMGYx
NDkxZTg1NDEzMWExNmQ4NGZkYjk4Y2RjMDU2NjA5MmRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXll
ckNsdXR0ZXIuaApAQCAtNzksMTMgKzc5LDIxIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChi
b29sKTsKKwogICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmLCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lT2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpOwogICAg
IHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CiAK
LSAgICB2b2lkIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoY29uc3QgVHJhbnNmb3JtU3RhdGUmLCBm
bG9hdCBwYWdlU2NhbGVGYWN0b3IgPSAxLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvblJlbGF0
aXZlVG9CYXNlID0gRmxvYXRQb2ludCgpLCBib29sIGFmZmVjdGVkQnlQYWdlU2NhbGUgPSBmYWxz
ZSk7CisgICAgc3RydWN0IENvbW1pdFN0YXRlIHsKKyAgICAgICAgYm9vbCBhbmNlc3Rvckhhc1Ry
YW5zZm9ybUFuaW1hdGlvbjsKKyAgICAgICAgQ29tbWl0U3RhdGUoKQorICAgICAgICAgICAgOiBh
bmNlc3Rvckhhc1RyYW5zZm9ybUFuaW1hdGlvbihmYWxzZSkKKyAgICAgICAgeyB9CisgICAgfTsK
KyAgICB2b2lkIHJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoY29uc3QgQ29tbWl0U3RhdGUmLCBjb25z
dCBUcmFuc2Zvcm1TdGF0ZSYsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvciA9IDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UgPSBGbG9hdFBvaW50KCksIGJvb2wgYWZmZWN0
ZWRCeVBhZ2VTY2FsZSA9IGZhbHNlKTsKIAogcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IGNvbXB1
dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKGZsb2F0JiBwYWdlU2NhbGUpIGNvbnN0OwpAQCAtMTAz
LDcgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2x1dHRlckxh
eWVyQW5pbWF0aW9uU3RhcnRlZChkb3VibGUgYmVnaW5UaW1lKTsKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1DbHV0dGVyTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFJlY3QmIGNsaXApOwogCi0gICAgR3JhcGhpY3NMYXllckFjdG9yKiBwcmltYXJ5TGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9CisgICAgR3JhcGhpY3NMYXllckFjdG9y
KiBwcmltYXJ5TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyYWxMYXllci5nZXQoKSA/
IG1fc3RydWN0dXJhbExheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsgfQogICAgIEdyYXBoaWNz
TGF5ZXJBY3RvciogbGF5ZXJGb3JTdXBlcmxheWVyKCkgY29uc3Q7CiAgICAgR3JhcGhpY3NMYXll
ckFjdG9yKiBhbmltYXRlZExheWVyKEFuaW1hdGVkUHJvcGVydHlJRCkgY29uc3Q7CiAKQEAgLTEy
Niw2ICsxMzQsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0VHJhbnNmb3JtQW5pbWF0aW9uRW5k
cG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgQW5pbWF0aW9uKiwgUGxhdGZv
cm1DbHV0dGVyQW5pbWF0aW9uKiwgaW50IGZ1bmN0aW9uSW5kZXgsIFRyYW5zZm9ybU9wZXJhdGlv
bjo6T3BlcmF0aW9uVHlwZSwgYm9vbCBpc01hdHJpeEFuaW1hdGlvbiwgY29uc3QgSW50U2l6ZSYg
Ym94U2l6ZSk7CiAgICAgYm9vbCBzZXRUcmFuc2Zvcm1BbmltYXRpb25LZXlmcmFtZXMoY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBBbmltYXRpb24qLCBQbGF0Zm9ybUNsdXR0ZXJBbmlt
YXRpb24qLCBpbnQgZnVuY3Rpb25JbmRleCwgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlLCBib29sIGlzTWF0cml4QW5pbWF0aW9uLCBjb25zdCBJbnRTaXplJiBib3hTaXplKTsKIAor
ICAgIGVudW0gTW92ZU9yQ29weSB7IE1vdmUsIENvcHkgfTsKKyAgICB2b2lkIG1vdmVPckNvcHlB
bmltYXRpb25zKE1vdmVPckNvcHksIEdyYXBoaWNzTGF5ZXJBY3RvciogZnJvbUxheWVyLCBHcmFw
aGljc0xheWVyQWN0b3IqIHRvTGF5ZXIpOworCiAgICAgYm9vbCBhcHBlbmRUb1VuY29tbWl0dGVk
QW5pbWF0aW9ucyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMqLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGNv
bnN0IEludFNpemUmIGJveFNpemUsIGludCBhbmltYXRpb25JbmRleCwgZG91YmxlIHRpbWVPZmZz
ZXQsIGJvb2wgaXNNYXRyaXhBbmltYXRpb24pOwogCiAgICAgZW51bSBMYXllckNoYW5nZSB7CkBA
IC0xNDcsMTIgKzE1OCwxNyBAQCBwcml2YXRlOgogICAgICAgICBDb250ZW50c0ltYWdlQ2hhbmdl
ZCA9IDEgPDwgMTUsCiAgICAgICAgIENvbnRlbnRzTWVkaWFMYXllckNoYW5nZWQgPSAxIDw8IDE2
LAogICAgICAgICBDb250ZW50c0NhbnZhc0xheWVyQ2hhbmdlZCA9IDEgPDwgMTcsCi0gICAgICAg
IENvbnRlbnRzUmVjdENoYW5nZWQgPSAxIDw8IDE4LAotICAgICAgICBNYXNrTGF5ZXJDaGFuZ2Vk
ID0gMSA8PCAxOSwKLSAgICAgICAgUmVwbGljYXRlZExheWVyQ2hhbmdlZCA9IDEgPDwgMjAsCi0g
ICAgICAgIENvbnRlbnRzTmVlZHNEaXNwbGF5ID0gMSA8PCAyMSwKLSAgICAgICAgQWNjZWxlcmF0
ZXNEcmF3aW5nQ2hhbmdlZCA9IDEgPDwgMjIsCi0gICAgICAgIENvbnRlbnRzU2NhbGVDaGFuZ2Vk
ID0gMSA8PCAyMworICAgICAgICBDb250ZW50c0NvbG9yTGF5ZXJDaGFuZ2VkID0gMSA8PCAxOCwK
KyAgICAgICAgQ29udGVudHNSZWN0Q2hhbmdlZCA9IDEgPDwgMTksCisgICAgICAgIE1hc2tMYXll
ckNoYW5nZWQgPSAxIDw8IDIwLAorICAgICAgICBSZXBsaWNhdGVkTGF5ZXJDaGFuZ2VkID0gMSA8
PCAyMSwKKyAgICAgICAgQ29udGVudHNOZWVkc0Rpc3BsYXkgPSAxIDw8IDIyLAorICAgICAgICBB
Y2NlbGVyYXRlc0RyYXdpbmdDaGFuZ2VkID0gMSA8PCAyMywKKyAgICAgICAgQ29udGVudHNTY2Fs
ZUNoYW5nZWQgPSAxIDw8IDI0LAorICAgICAgICBDb250ZW50c1Zpc2liaWxpdHlDaGFuZ2VkID0g
MSA8PCAyNSwKKyAgICAgICAgVmlzaWJsZVJlY3RDaGFuZ2VkID0gMSA8PCAyNiwKKyAgICAgICAg
RmlsdGVyc0NoYW5nZWQgPSAxIDw8IDI3LAorICAgICAgICBEZWJ1Z0luZGljYXRvcnNDaGFuZ2Vk
ID0gMSA8PCAyOAogICAgIH07CiAKICAgICB0eXBlZGVmIHVuc2lnbmVkIExheWVyQ2hhbmdlRmxh
Z3M7CkBAIC0xNjAsNiArMTc2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5vdGVTdWJsYXllcnND
aGFuZ2VkKCk7CiAKICAgICB2b2lkIHVwZGF0ZUJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAgIHZv
aWQgdXBkYXRlU3RydWN0dXJhbExheWVyKCk7CiAgICAgdm9pZCB1cGRhdGVMYXllck5hbWVzKCk7
CiAgICAgdm9pZCB1cGRhdGVTdWJsYXllckxpc3QoKTsKICAgICB2b2lkIHVwZGF0ZUdlb21ldHJ5
KGZsb2F0IHBpeGVsQWxpZ25tZW50U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uUmVs
YXRpdmVUb0Jhc2UpOwpAQCAtMTY4LDkgKzE4NSwxOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1
cGRhdGVBbmltYXRpb25zKCk7CiAKKyAgICBlbnVtIFN0cnVjdHVyYWxMYXllclB1cnBvc2Ugewor
ICAgICAgICBOb1N0cnVjdHVyYWxMYXllciA9IDAsCisgICAgICAgIFN0cnVjdHVyYWxMYXllckZv
clByZXNlcnZlczNELAorICAgICAgICBTdHJ1Y3R1cmFsTGF5ZXJGb3JSZXBsaWNhRmxhdHRlbmlu
ZworICAgIH07CisgICAgdm9pZCBlbnN1cmVTdHJ1Y3R1cmFsTGF5ZXIoU3RydWN0dXJhbExheWVy
UHVycG9zZSk7CisgICAgU3RydWN0dXJhbExheWVyUHVycG9zZSBzdHJ1Y3R1cmFsTGF5ZXJQdXJw
b3NlKCkgY29uc3Q7CisKICAgICB2b2lkIHJlcGFpbnRMYXllckRpcnR5UmVjdHMoKTsKIAogICAg
IEdSZWZQdHI8R3JhcGhpY3NMYXllckFjdG9yPiBtX2xheWVyOworICAgIEdSZWZQdHI8R3JhcGhp
Y3NMYXllckFjdG9yPiBtX3N0cnVjdHVyYWxMYXllcjsgLy8gQSBsYXllciB1c2VkIGZvciBzdHJ1
Y3R1cmFsIHJlYXNvbnMsIGxpa2UgcHJlc2VydmVzLTNkIG9yIHJlcGxpY2EtZmxhdHRlbmluZy4g
SXMgdGhlIHBhcmVudCBvZiBtX2xheWVyLgogCiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gbV9kaXJ0
eVJlY3RzOwogICAgIExheWVyQ2hhbmdlRmxhZ3MgbV91bmNvbW1pdHRlZENoYW5nZXM7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>