<?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>102694</bug_id>
          
          <creation_ts>2012-11-19 08:35:25 -0800</creation_ts>
          <short_desc>[Skia] Encapsulate access to PlatformContextSkia&apos;s SkCanvas</short_desc>
          <delta_ts>2012-11-21 05:43:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>102272</blocked>
    
    <blocked>102824</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Florin Malita">fmalita</reporter>
          <assigned_to name="Florin Malita">fmalita</assigned_to>
          <cc>alokp</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>dino</cc>
    
    <cc>d-r</cc>
    
    <cc>jamesr</cc>
    
    <cc>junov</cc>
    
    <cc>pdr</cc>
    
    <cc>reed</cc>
    
    <cc>schenney</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tomhudson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>770779</commentid>
    <comment_count>0</comment_count>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-19 08:35:25 -0800</bug_when>
    <thetext>PlatformContextSkia&apos;s underlying SkCanvas is accessible via canvas() and there are 90+ call sites that use it directly.

This bug focuses on refactoring and adding the SkCanvas wrapper methods necessary to reduce the number of direct canvas users to a manageable level, in order to facilitate https://bugs.webkit.org/show_bug.cgi?id=102272.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770800</commentid>
    <comment_count>1</comment_count>
      <attachid>174995</attachid>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-19 09:01:57 -0800</bug_when>
    <thetext>Created attachment 174995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770839</commentid>
    <comment_count>2</comment_count>
      <attachid>174995</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-11-19 10:18:51 -0800</bug_when>
    <thetext>Comment on attachment 174995
Patch

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

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:206
&gt; +    SkDevice* getTopDevice(bool updateMatrixClip = false) const;

It looks like this parameter isn&apos;t used by any of the current callers.  Could we eliminate it?

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:214
&gt; +    bool clipPath(const SkPath&amp;, SkRegion::Op = SkRegion::kIntersect_Op, bool = false);
&gt; +    bool clipRect(const SkRect&amp;, SkRegion::Op = SkRegion::kIntersect_Op, bool = false);

Prefer a new enum here, instead of a bool.  This would make the call sites self-documenting.  See #10 in the WebKit coding style doc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770845</commentid>
    <comment_count>3</comment_count>
      <attachid>174995</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-11-19 10:27:59 -0800</bug_when>
    <thetext>Comment on attachment 174995
Patch

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

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:298
&gt; +    m_canvas-&gt;writePixels(bitmap, x, y, config8888);

This should call didDrawRect, passing in the bitmap as well, with an SkPaint with Xfermode set to kSrc_Mode.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:354
&gt; +    m_canvas-&gt;drawBitmap(bitmap, left, top, paint);

This should call didDrawRect, passing in the bitmap as well.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:360
&gt; +    m_canvas-&gt;drawBitmapRect(bitmap, isrc, dst, paint);

This should call didDrawRect, passing in the bitmap as well.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:396
&gt; +    m_canvas-&gt;drawIRect(rect, paint);

Have this call didDrawRect() also.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:402
&gt; +    m_canvas-&gt;drawPosText(text, byteLength, pos, paint);

This should call didDrawBounded with the bounds of the text, or didDrawUnbounded if the bounds of the text aren&apos;t known.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:408
&gt; +    m_canvas-&gt;drawPosTextH(text, byteLength, xpos, constY, paint);

This should call didDrawBounded with the bounds of the text, or didDrawUnbounded if the bounds of the text aren&apos;t known.

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:414
&gt; +    m_canvas-&gt;drawTextOnPath(text, byteLength, path, matrix, paint);

This should call didDrawBounded with the bounds of the text, or didDrawUnbounded if the bounds of the text aren&apos;t known.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770846</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-11-19 10:29:01 -0800</bug_when>
    <thetext>Can we add unit tests for all the new draw methods to Source/WebKit/chromium/tests/PlatformContextSkiaTest.cpp to make sure they are recording draws.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771962</commentid>
    <comment_count>5</comment_count>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-20 10:10:28 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:206
&gt; &gt; +    SkDevice* getTopDevice(bool updateMatrixClip = false) const;
&gt; 
&gt; It looks like this parameter isn&apos;t used by any of the current callers.  Could we eliminate it?

Sure, will do.

&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:214
&gt; &gt; +    bool clipPath(const SkPath&amp;, SkRegion::Op = SkRegion::kIntersect_Op, bool = false);
&gt; &gt; +    bool clipRect(const SkRect&amp;, SkRegion::Op = SkRegion::kIntersect_Op, bool = false);
&gt; 
&gt; Prefer a new enum here, instead of a bool.  This would make the call sites self-documenting.  See #10 in the WebKit coding style doc.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771965</commentid>
    <comment_count>6</comment_count>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-20 10:15:13 -0800</bug_when>
    <thetext>Sounds good Dana, but could we do this in a follow-up patch? I&apos;d rather keep this one refactoring-only since it&apos;s grown quite a bit.

(In reply to comment #3) 
&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:402
&gt; &gt; +    m_canvas-&gt;drawPosText(text, byteLength, pos, paint);
&gt; 
&gt; This should call didDrawBounded with the bounds of the text, or didDrawUnbounded if the bounds of the text aren&apos;t known.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:408
&gt; &gt; +    m_canvas-&gt;drawPosTextH(text, byteLength, xpos, constY, paint);
&gt; 
&gt; This should call didDrawBounded with the bounds of the text, or didDrawUnbounded if the bounds of the text aren&apos;t known.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:414
&gt; &gt; +    m_canvas-&gt;drawTextOnPath(text, byteLength, path, matrix, paint);
&gt; 
&gt; This should call didDrawBounded with the bounds of the text, or didDrawUnbounded if the bounds of the text aren&apos;t known.

There doesn&apos;t seem to be a good way for getting the positioned text bounds, but maybe we can add something to Skia to avoid didDrawUnbounded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771981</commentid>
    <comment_count>7</comment_count>
      <attachid>175243</attachid>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-20 10:31:20 -0800</bug_when>
    <thetext>Created attachment 175243
Patch

Take two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771997</commentid>
    <comment_count>8</comment_count>
      <attachid>175243</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-11-20 10:45:02 -0800</bug_when>
    <thetext>Comment on attachment 175243
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp:54
&gt; -    return canvasForContext(context)-&gt;getTopDevice()-&gt;accessBitmap(false);
&gt; +    return context.platformContext()-&gt;getTopDevice()-&gt;accessBitmap(false);

Not essential for this patch, but it looks like the only use we make of the device is to access the backing store, or to test whether it&apos;s vectorial.

I wonder if we should provide an &quot;accessBitmap()&quot; (or &quot;accessBackingStore()&quot;) and &quot;isVector()&quot; on PlatformContextSkia, so that we can avoid exposing the SkDevice?

(As a side note, I think all places where we are calling getDevice()-&gt;accessBitmap() could equally (and more correctly?) be calling getTopDevice()-&gt;accessBitmap(), but they&apos;re semantically equivalent because we&apos;re not in the middle of a saveLayer().  Mike can correct me if I&apos;m wrong.  Also not new to this patch.)

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:48
&gt; +enum AntiAliasingMode { BW, AntiAliased };

BW is not a clear antonym of AntiAliased.  How about NonAntiAliased?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772002</commentid>
    <comment_count>9</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2012-11-20 10:48:55 -0800</bug_when>
    <thetext>+1 for hiding access to SkDevice.... our longer term goal is to remove *all* references to SkDevice, and add the necessary APIs on SkCanvas. Not required, but doing that encapsulation now on PlatformContextSkia would be a nice step forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772018</commentid>
    <comment_count>10</comment_count>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-20 10:56:23 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:48
&gt; &gt; +enum AntiAliasingMode { BW, AntiAliased };
&gt; 
&gt; BW is not a clear antonym of AntiAliased.  How about NonAntiAliased?

Sounds good.


&gt; &gt; Source/WebCore/platform/graphics/chromium/TransparencyWin.cpp:54
&gt; &gt; -    return canvasForContext(context)-&gt;getTopDevice()-&gt;accessBitmap(false);
&gt; &gt; +    return context.platformContext()-&gt;getTopDevice()-&gt;accessBitmap(false);
&gt; 
&gt; Not essential for this patch, but it looks like the only use we make of the device is to access the backing store, or to test whether it&apos;s vectorial.
&gt; 
&gt; I wonder if we should provide an &quot;accessBitmap()&quot; (or &quot;accessBackingStore()&quot;) and &quot;isVector()&quot; on PlatformContextSkia, so that we can avoid exposing the SkDevice?

(In reply to comment #9)
&gt; +1 for hiding access to SkDevice.... our longer term goal is to remove *all* references to SkDevice, and add the necessary APIs on SkCanvas. Not required, but doing that encapsulation now on PlatformContextSkia would be a nice step forward.

Alright, I&apos;ll give that a shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772107</commentid>
    <comment_count>11</comment_count>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-20 13:12:13 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; I wonder if we should provide an &quot;accessBitmap()&quot; (or &quot;accessBackingStore()&quot;) and &quot;isVector()&quot; on PlatformContextSkia, so that we can avoid exposing the SkDevice?

I just noticed there&apos;s already a bitmap() method which provides read-only access to the base device bitmap. So maybe add a &quot;layerBitmap()&quot; with an access mode flag to cover the remaining users?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772141</commentid>
    <comment_count>12</comment_count>
      <attachid>175271</attachid>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-20 13:53:04 -0800</bug_when>
    <thetext>Created attachment 175271
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772142</commentid>
    <comment_count>13</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-11-20 13:54:37 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; I wonder if we should provide an &quot;accessBitmap()&quot; (or &quot;accessBackingStore()&quot;) and &quot;isVector()&quot; on PlatformContextSkia, so that we can avoid exposing the SkDevice?
&gt; 
&gt; I just noticed there&apos;s already a bitmap() method which provides read-only access to the base device bitmap. So maybe add a &quot;layerBitmap()&quot; with an access mode flag to cover the remaining users?

Sounds good.

I&apos;ve always found it kind of unfortunate that bitmap() returns a const SkBitmap*, but that&apos;s a refactoring for another day.  I&apos;d have your layerBitmap() return a const SkBitmap&amp;, as accessBitmap() does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772144</commentid>
    <comment_count>14</comment_count>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-20 13:55:53 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; I wonder if we should provide an &quot;accessBitmap()&quot; (or &quot;accessBackingStore()&quot;) and &quot;isVector()&quot; on PlatformContextSkia, so that we can avoid exposing the SkDevice?
&gt; &gt; 
&gt; &gt; I just noticed there&apos;s already a bitmap() method which provides read-only access to the base device bitmap. So maybe add a &quot;layerBitmap()&quot; with an access mode flag to cover the remaining users?
&gt; 
&gt; Sounds good.
&gt; 
&gt; I&apos;ve always found it kind of unfortunate that bitmap() returns a const SkBitmap*, but that&apos;s a refactoring for another day.  I&apos;d have your layerBitmap() return a const SkBitmap&amp;, as accessBitmap() does.

Thanks, I&apos;ll update the patch then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772174</commentid>
    <comment_count>15</comment_count>
      <attachid>175279</attachid>
    <who name="Florin Malita">fmalita</who>
    <bug_when>2012-11-20 14:24:56 -0800</bug_when>
    <thetext>Created attachment 175279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772260</commentid>
    <comment_count>16</comment_count>
      <attachid>175279</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2012-11-20 16:14:14 -0800</bug_when>
    <thetext>Comment on attachment 175279
Patch

Looks great!  Thanks for the extra effort.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772838</commentid>
    <comment_count>17</comment_count>
      <attachid>175279</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 05:43:00 -0800</bug_when>
    <thetext>Comment on attachment 175279
Patch

Clearing flags on attachment: 175279

Committed r135390: &lt;http://trac.webkit.org/changeset/135390&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772839</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 05:43:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174995</attachid>
            <date>2012-11-19 09:01:57 -0800</date>
            <delta_ts>2012-11-20 10:31:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102694-20121119115947.patch</filename>
            <type>text/plain</type>
            <size>67871</size>
            <attacher name="Florin Malita">fmalita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTk4NGY4ZTg2ZTE3ZGRi
ZjRlMGVjMjAyNGRlMjhjNjdjNjdjY2EzZS4uYzMzNmUxNmYwYTBhOTY3MGUyYTA2MTRjNmFhN2Y1
YmU5YTNiODNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNiBAQAorMjAxMi0xMS0xOSAgRmxv
cmluIE1hbGl0YSAgPGZtYWxpdGFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtTa2lhXSBFbmNh
cHN1bGF0ZSBhY2Nlc3MgdG8gUGxhdGZvcm1Db250ZXh0U2tpYSdzIFNrQ2FudmFzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2OTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgU2tDYW52YXMtZXF1
aXZhbGVudCBtZXRob2RzIHRvIFBsYXRmb3JtQ29udGV4dFNraWEsIGFuZCByZWZhY3RvciBkaXJl
Y3QgY2FudmFzIGNhbGwKKyAgICAgICAgc2l0ZXMgdG8gdXNlIHRoZXNlIHdyYXBwZXJzIGluc3Rl
YWQuIFRoaXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNhbnZhcygpIHVzZXJzIGZyb20gOTArCisg
ICAgICAgIHRvIDIyIChtb3N0bHkgdGhlbWUvdWkgY29kZSkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzOiByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1UaGVtZUNocm9taXVtTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1U
aGVtZUNocm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyYW5zcGFyZW5jeVdpbjo6Y29tcHV0ZUxheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZU9wYXF1ZUNvbXBvc2l0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3NpdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUJsZW5kU2tpYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U2tpYSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29sb3JNYXRyaXhTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTa2lhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb21wb25lbnRUcmFuc2ZlclNraWEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNr
aWEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUxpZ2h0aW5n
U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U2tp
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZvbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RD
bGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpkcmF3T3V0ZXJQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVs
dGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmRyYXdSZXNhbXBsZWRCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9u
OTByb3RhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpwYWludFNrQml0bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
U2tpYTo6YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tp
YTo6Y291bGRVc2VMQ0RSZW5kZXJlZFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tp
YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXREZXZpY2UpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
OjpnZXRUb3BEZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp3cml0
ZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjppc0RyYXdp
bmdUb0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmdldENsaXBCb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0TWF0cml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmdldFRvdGFsTWF0cml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNvbmNhdCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0U2tpYTo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNr
aWE6OmRyYXdCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
ZHJhd0JpdG1hcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
ZHJhd092YWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1BvaW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3SVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1Bvc1RleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1Bvc1RleHRIKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdUZXh0T25QYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNr
aWFEcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFNraWFUZXh0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwUmVjdFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Nr
aWFVdGlscy5oOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTEtMTkgIElseWEgVGlraG9u
b3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHdlYmF1ZGlvOiBjbGVhbi11
cC4gUmVwbGFjZSBBdWRpb0NvbnRleHQ6Om1fZG9jdW1lbnQgbWVtYmVyIHdpdGggQ29udGV4dERl
c3RydWN0aW9uT2JzZXJ2ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggNTg1ZjZiNWM2MzNhYzIwMTg1NDk5YjgzZGRiMDgyYjUwNTg4ZDcy
My4uY2IxMmU5OTVkM2M1MzE2MWJlYTFjYThjNzU3NDJiN2E3YmIwYWY4YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMS0xOSAgRmxvcmluIE1hbGl0
YSAgPGZtYWxpdGFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtTa2lhXSBFbmNhcHN1bGF0ZSBh
Y2Nlc3MgdG8gUGxhdGZvcm1Db250ZXh0U2tpYSdzIFNrQ2FudmFzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2OTQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgUGxhdGZvcm1Db250ZXh0U2tpYSdz
IHdyYXBwZXIgbWV0aG9kcyBpbnN0ZWFkIG9mIGFjY2Vzc2luZyB0aGUgY2FudmFzIGRpcmVjdGx5
LgorCisgICAgICAgICogdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpnZXRQaXhlbEF0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBo
YUNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJUb3BMYXllckFscGhhUGl4ZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTItMTEtMTkgIFNhbWkgS3lvc3RpbGEgIDxz
a3lvc3RpbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2UgZGV2aWNlUGl4
ZWxSYXRpbyBpbnN0ZWFkIG9mIHNjcmVlbiBEUEkgZm9yIGNvbXB1dGluZyB2aWV3cG9ydCBhdHRy
aWJ1dGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0
Zm9ybVRoZW1lQ2hyb21pdW1MaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9QbGF0Zm9ybVRoZW1lQ2hyb21pdW1MaW51eC5jcHAKaW5kZXggYmU0Zjg1MGE4NWUyNzZh
NTliMGI5MDIzNWMwMTkwZDBhZDU5M2QwOS4uNzBjYzY0YmE5NmVlMjQ0NTZmYjIxNWVhNDJjZmU1
YTI3ZTgzODBmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
UGxhdGZvcm1UaGVtZUNocm9taXVtTGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1BsYXRmb3JtVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApAQCAtOTksNyArOTks
NyBAQCBTa0NvbG9yIFBsYXRmb3JtVGhlbWVDaHJvbWl1bUxpbnV4OjpvdXRsaW5lQ29sb3IoY29u
c3QgU2tTY2FsYXIgaHN2MVszXSwgY29uc3QgUwogCiB2b2lkIFBsYXRmb3JtVGhlbWVDaHJvbWl1
bUxpbnV4OjpwYWludEFycm93QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIEFycm93RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ29udHJvbFN0YXRlcyBzdGF0ZXMp
CiB7Ci0gICAgU2tDYW52YXMqIGNvbnN0IGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCk7CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0ID0gZ2Mt
PnBsYXRmb3JtQ29udGV4dCgpOwogICAgIGludCB3aWR0aE1pZGRsZSwgbGVuZ3RoTWlkZGxlOwog
ICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBOb3J0aCB8fCBkaXJlY3Rp
b24gPT0gU291dGgpIHsKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtVGhlbWVDaHJv
bWl1bUxpbnV4OjpwYWludEFycm93QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IElu
dAogICAgIHNrcmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCByZWN0LngoKSArIHJlY3Qud2lk
dGgoKSwgcmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKICAgICAvLyBQYWludCB0aGUgYmFja2dy
b3VuZCAodGhlIGFyZWEgdmlzaWJsZSBiZWhpbmQgdGhlIHJvdW5kZWQgY29ybmVycykuCiAgICAg
cGFpbnQuc2V0Q29sb3IoYmFja2dyb3VuZENvbG9yKTsKLSAgICBjYW52YXMtPmRyYXdJUmVjdChz
a3JlY3QsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQtPmRyYXdJUmVjdChza3JlY3QsIHBh
aW50KTsKIAogICAgIC8vIFBhaW50IHRoZSBidXR0b24ncyBvdXRsaW5lIGFuZCBmaWxsIHRoZSBt
aWRkbGUKICAgICBTa1BhdGggb3V0bGluZTsKQEAgLTE3MSwxNCArMTcxLDE0IEBAIHZvaWQgUGxh
dGZvcm1UaGVtZUNocm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24oR3JhcGhpY3NDb250ZXh0
KiBnYywgY29uc3QgSW50CiAKICAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHls
ZSk7CiAgICAgcGFpbnQuc2V0Q29sb3IoYnV0dG9uQ29sb3IpOwotICAgIGNhbnZhcy0+ZHJhd1Bh
dGgob3V0bGluZSwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1BhdGgob3V0bGlu
ZSwgcGFpbnQpOwogCiAgICAgcGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOwogICAgIHBhaW50LnNl
dFN0eWxlKFNrUGFpbnQ6OmtTdHJva2VfU3R5bGUpOwogICAgIFNrU2NhbGFyIHRodW1iSFNWWzNd
OwogICAgIFNrQ29sb3JUb0hTVih0aHVtYkluYWN0aXZlQ29sb3IoKSwgdGh1bWJIU1YpOwogICAg
IHBhaW50LnNldENvbG9yKG91dGxpbmVDb2xvcih0cmFja0hTViwgdGh1bWJIU1YpKTsKLSAgICBj
YW52YXMtPmRyYXdQYXRoKG91dGxpbmUsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQtPmRy
YXdQYXRoKG91dGxpbmUsIHBhaW50KTsKIAogICAgIC8vIElmIHRoZSBidXR0b24gaXMgZGlzYWJs
ZWQgb3IgcmVhZC1vbmx5LCB0aGUgYXJyb3cgaXMgZHJhd24gd2l0aCB0aGUgb3V0bGluZSBjb2xv
ci4KICAgICBpZiAoc3RhdGVzICYgRW5hYmxlZFN0YXRlICYmICEoc3RhdGVzICYgUmVhZE9ubHlT
dGF0ZSkpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1MaW51
eDo6cGFpbnRBcnJvd0J1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnQKICAgICB9
CiAgICAgcGF0aC5jbG9zZSgpOwogCi0gICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWludCk7
CisgICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCmluZGV4IGFmZDA4ZGI3
ODA2ZjliY2Q3MGIwY2YyNWUyYzRiZTdiYWMxMjRiMzguLjJlZmMyYTRkZjUzYWMzN2FjMGEwNmNk
MzMyOTQzNTE2MTYzYTc1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcApAQCAtMTQwLDcg
KzE0MCw3IEBAIHZvaWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGlhbGl6ZUZv
ckdESSgpCiAgICAgICAgIC8vIHRoaXMgbW9kZSBhbmQgaXQgd2lsbCBhcHBseSB0aGUgY29sb3Iu
CiAgICAgICAgIG1fdHJhbnNwYXJlbmN5LnNldFRleHRDb21wb3NpdGVDb2xvcihjb2xvcik7CiAg
ICAgICAgIGNvbG9yID0gU2tDb2xvclNldFJHQigwLCAwLCAwKTsKLSAgICB9IGVsc2UgaWYgKG1f
Y3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyIHx8IG1fcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKS0+
aXNEcmF3aW5nVG9MYXllcigpKSB7CisgICAgfSBlbHNlIGlmIChtX2NyZWF0ZWRUcmFuc3BhcmVu
Y3lMYXllciB8fCBtX3BsYXRmb3JtQ29udGV4dC0+aXNEcmF3aW5nVG9MYXllcigpKSB7CiAgICAg
ICAgIC8vIFdoZW4gd2UncmUgZHJhd2luZyBhIHdlYiBwYWdlLCB3ZSBrbm93IHRoZSBiYWNrZ3Jv
dW5kIGlzIG9wYXF1ZSwKICAgICAgICAgLy8gYnV0IGlmIHdlJ3JlIGRyYXdpbmcgdG8gYSBsYXll
ciwgd2Ugc3RpbGwgbmVlZCBleHRyYSB3b3JrLgogICAgICAgICBsYXllck1vZGUgPSBUcmFuc3Bh
cmVuY3lXaW46Ok9wYXF1ZUNvbXBvc2l0ZUxheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAK
aW5kZXggMjhiMWI4ZTY4YzIwMWE1Zjk0YjY5MjkxOWViYzA1ODBmYmMyN2EzYi4uZGU1NWMxY2Yz
NmUxZTlkOTI1ZTI4OGI3ZWIwY2M3NzBiMDE3ZDVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4u
Y3BwCkBAIC00OSwxNCArNDksOSBAQCBuYW1lc3BhY2UgewogLy8gaW50by4gQnVmZmVycyBsYXJn
ZXIgdGhhbiB0aGlzIHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gd2UncmUgZG9uZSB3aXRoIHRoZW0u
CiBjb25zdCBpbnQgbWF4Q2FjaGVkQnVmZmVyUGl4ZWxTaXplID0gNjU1MzY7CiAKLWlubGluZSBT
a0NhbnZhcyogY2FudmFzRm9yQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgcmV0dXJuIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotfQot
CiBpbmxpbmUgY29uc3QgU2tCaXRtYXAmIGJpdG1hcEZvckNvbnRleHQoY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBjYW52YXNGb3JDb250ZXh0KGNvbnRleHQp
LT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICByZXR1cm4gY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7
CiB9CiAKIHZvaWQgY29tcG9zaXRlVG9Db3B5KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgc291cmNl
TGF5ZXJzLApAQCAtNzYsNyArNzEsNyBAQCB2b2lkIGNvbXBvc2l0ZVRvQ29weShjb25zdCBHcmFw
aGljc0NvbnRleHQmIHNvdXJjZUxheWVycywKICAgICAgICAgaW50IHk7CiAgICAgfTsKICAgICBW
ZWN0b3I8RGV2aWNlSW5mbz4gZGV2aWNlczsKLSAgICBTa0NhbnZhcyogc291cmNlQ2FudmFzID0g
Y2FudmFzRm9yQ29udGV4dChzb3VyY2VMYXllcnMpOworICAgIFNrQ2FudmFzKiBzb3VyY2VDYW52
YXMgPSBzb3VyY2VMYXllcnMucGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIFNrQ2Fu
dmFzOjpMYXllckl0ZXIgaXRlcihzb3VyY2VDYW52YXMsIGZhbHNlKTsKICAgICB3aGlsZSAoIWl0
ZXIuZG9uZSgpKSB7CiAgICAgICAgIGRldmljZXMuYXBwZW5kKERldmljZUluZm8oaXRlci5kZXZp
Y2UoKSwgaXRlci54KCksIGl0ZXIueSgpKSk7CkBAIC0yMTQsNyArMjA5LDcgQEAgdm9pZCBUcmFu
c3BhcmVuY3lXaW46OmNvbXB1dGVMYXllclNpemUoKQogICAgICAgICAvLyBGSVhNRTogc3VwcG9y
dCBjbGlwcGluZyBmb3Igb3RoZXIgbW9kZXMKICAgICAgICAgSW50UmVjdCBjbGlwcGVkU291cmNl
UmVjdCA9IG1fc291cmNlUmVjdDsKICAgICAgICAgU2tSZWN0IGNsaXBCb3VuZHM7Ci0gICAgICAg
IGlmIChtX2Rlc3RDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldENsaXBC
b3VuZHMoJmNsaXBCb3VuZHMpKSB7CisgICAgICAgIGlmIChtX2Rlc3RDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Z2V0Q2xpcEJvdW5kcygmY2xpcEJvdW5kcykpIHsKICAgICAgICAgICAgIEZs
b2F0UmVjdCBjbGlwUmVjdChjbGlwQm91bmRzLmxlZnQoKSwgY2xpcEJvdW5kcy50b3AoKSwgY2xp
cEJvdW5kcy53aWR0aCgpLCBjbGlwQm91bmRzLmhlaWdodCgpKTsKICAgICAgICAgICAgIGNsaXBw
ZWRTb3VyY2VSZWN0LmludGVyc2VjdChlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KSk7CiAgICAg
ICAgIH0KQEAgLTQxNiw4ICs0MTEsOCBAQCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRl
T3BhcXVlQ29tcG9zaXRlKCkKICAgICBpZiAoIW1fdmFsaWRMYXllcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU2tDYW52YXMqIGRlc3RDYW52YXMgPSBjYW52YXNGb3JDb250ZXh0KCptX2Rlc3RD
b250ZXh0KTsKLSAgICBkZXN0Q2FudmFzLT5zYXZlKCk7CisgICAgUGxhdGZvcm1Db250ZXh0U2tp
YSogZGVzdFBsYXRmb3JtQ29udGV4dCA9IG1fZGVzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OworICAgIGRlc3RQbGF0Zm9ybUNvbnRleHQtPnNhdmUoKTsKIAogICAgIFNrQml0bWFwKiBiaXRt
YXAgPSBjb25zdF9jYXN0PFNrQml0bWFwKj4oCiAgICAgICAgICZiaXRtYXBGb3JDb250ZXh0KCpt
X2xheWVyQnVmZmVyLT5jb250ZXh0KCkpKTsKQEAgLTQ1Miw3ICs0NDcsNyBAQCB2b2lkIFRyYW5z
cGFyZW5jeVdpbjo6Y29tcG9zaXRlT3BhcXVlQ29tcG9zaXRlKCkKICAgICAgICAgLy8ganVzdCBk
cmF3IHRoZSBpbWFnZSBmcm9tIGluc2lkZSB0aGUgZGVzdGluYXRpb24gY29udGV4dC4KICAgICAg
ICAgU2tNYXRyaXggaWRlbnRpdHk7CiAgICAgICAgIGlkZW50aXR5LnJlc2V0KCk7Ci0gICAgICAg
IGRlc3RDYW52YXMtPnNldE1hdHJpeChpZGVudGl0eSk7CisgICAgICAgIGRlc3RQbGF0Zm9ybUNv
bnRleHQtPnNldE1hdHJpeChpZGVudGl0eSk7CiAKICAgICAgICAgZGVzdFJlY3Quc2V0KG1fdHJh
bnNmb3JtZWRTb3VyY2VSZWN0LngoKSwgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QueSgpLCBtX3Ry
YW5zZm9ybWVkU291cmNlUmVjdC5tYXhYKCksIG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0Lm1heFko
KSk7CiAgICAgfSBlbHNlCkBAIC00NjUsOCArNDYwLDggQEAgdm9pZCBUcmFuc3BhcmVuY3lXaW46
OmNvbXBvc2l0ZU9wYXF1ZUNvbXBvc2l0ZSgpCiAgICAgLy8gTm90ZSB0aGF0IHdlIG5lZWQgdG8g
c3BlY2lmeSB0aGUgc291cmNlIGxheWVyIHN1YnNldCwgc2luY2UgdGhlIGJpdG1hcAogICAgIC8v
IG1heSBoYXZlIGJlZW4gY2FjaGVkIGFuZCBpdCBjb3VsZCBiZSBsYXJnZXIgdGhhbiB3aGF0IHdl
J3JlIHVzaW5nLgogICAgIFNrSVJlY3Qgc291cmNlUmVjdCA9IHsgMCwgMCwgbV9sYXllclNpemUu
d2lkdGgoKSwgbV9sYXllclNpemUuaGVpZ2h0KCkgfTsKLSAgICBkZXN0Q2FudmFzLT5kcmF3Qml0
bWFwUmVjdCgqYml0bWFwLCAmc291cmNlUmVjdCwgZGVzdFJlY3QsICZwYWludCk7Ci0gICAgZGVz
dENhbnZhcy0+cmVzdG9yZSgpOworICAgIGRlc3RQbGF0Zm9ybUNvbnRleHQtPmRyYXdCaXRtYXBS
ZWN0KCpiaXRtYXAsICZzb3VyY2VSZWN0LCBkZXN0UmVjdCwgJnBhaW50KTsKKyAgICBkZXN0UGxh
dGZvcm1Db250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21w
b3NpdGVUZXh0Q29tcG9zaXRlKCkKQEAgLTQ3NCw3ICs0NjksNyBAQCB2b2lkIFRyYW5zcGFyZW5j
eVdpbjo6Y29tcG9zaXRlVGV4dENvbXBvc2l0ZSgpCiAgICAgaWYgKCFtX3ZhbGlkTGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVm
ZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNl
KCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9s
YXllckJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VG9wRGV2aWNlKCkt
PmFjY2Vzc0JpdG1hcCh0cnVlKTsKICAgICBTa0NvbG9yIHRleHRDb2xvciA9IG1fdGV4dENvbXBv
c2l0ZUNvbG9yLnJnYigpOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9sYXllclNpemUuaGVp
Z2h0KCk7IHkrKykgewogICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigw
LCB5KTsKQEAgLTQ4OCwyMCArNDgzLDIwIEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21wb3Np
dGVUZXh0Q29tcG9zaXRlKCkKICAgICB9CiAKICAgICAvLyBOb3cgdGhlIGxheWVyIGhhcyB0ZXh0
IHdpdGggdGhlIHByb3BlciBjb2xvciBhbmQgb3BhY2l0eS4KLSAgICBTa0NhbnZhcyogZGVzdENh
bnZhcyA9IGNhbnZhc0ZvckNvbnRleHQoKm1fZGVzdENvbnRleHQpOwotICAgIGRlc3RDYW52YXMt
PnNhdmUoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBkZXN0UGxhdGZvcm1Db250ZXh0ID0g
bV9kZXN0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgZGVzdFBsYXRmb3JtQ29udGV4
dC0+c2F2ZSgpOwogCiAgICAgLy8gV2Ugd2FudCB0byB1c2UgVW50cmFuc2Zvcm1lZCBzcGFjZSAo
c2VlIGFib3ZlKQogICAgIFNrTWF0cml4IGlkZW50aXR5OwogICAgIGlkZW50aXR5LnJlc2V0KCk7
Ci0gICAgZGVzdENhbnZhcy0+c2V0TWF0cml4KGlkZW50aXR5KTsKKyAgICBkZXN0UGxhdGZvcm1D
b250ZXh0LT5zZXRNYXRyaXgoaWRlbnRpdHkpOwogICAgIFNrUmVjdCBkZXN0UmVjdCA9IHsgbV90
cmFuc2Zvcm1lZFNvdXJjZVJlY3QueCgpLCBtX3RyYW5zZm9ybWVkU291cmNlUmVjdC55KCksIG1f
dHJhbnNmb3JtZWRTb3VyY2VSZWN0Lm1heFgoKSwgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QubWF4
WSgpIH07CiAKICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBzcGVjaWZ5IHRoZSBzb3VyY2Ug
bGF5ZXIgc3Vic2V0LCBzaW5jZSB0aGUgYml0bWFwCiAgICAgLy8gbWF5IGhhdmUgYmVlbiBjYWNo
ZWQgYW5kIGl0IGNvdWxkIGJlIGxhcmdlciB0aGFuIHdoYXQgd2UncmUgdXNpbmcuCiAgICAgU2tJ
UmVjdCBzb3VyY2VSZWN0ID0geyAwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6
ZS5oZWlnaHQoKSB9OwotICAgIGRlc3RDYW52YXMtPmRyYXdCaXRtYXBSZWN0KGJpdG1hcCwgJnNv
dXJjZVJlY3QsIGRlc3RSZWN0LCAwKTsKLSAgICBkZXN0Q2FudmFzLT5yZXN0b3JlKCk7CisgICAg
ZGVzdFBsYXRmb3JtQ29udGV4dC0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLCAmc291cmNlUmVjdCwg
ZGVzdFJlY3QsIDApOworICAgIGRlc3RQbGF0Zm9ybUNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAog
dm9pZCBUcmFuc3BhcmVuY3lXaW46Om1ha2VMYXllck9wYXF1ZSgpCkBAIC01MDksOCArNTA0LDcg
QEAgdm9pZCBUcmFuc3BhcmVuY3lXaW46Om1ha2VMYXllck9wYXF1ZSgpCiAgICAgaWYgKCFtX3Zh
bGlkTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25z
dF9jYXN0PFNrQml0bWFwJj4obV9kcmF3Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPgotICAg
ICAgICBjYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKSk7CisgICAg
U2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihtX2RyYXdDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKSk7CiAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xheWVyU2l6ZS5oZWlnaHQoKTsgeSsrKSB7CiAgICAg
ICAgIHVpbnQzMl90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwogICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IG1fbGF5ZXJTaXplLndpZHRoKCk7IHgrKykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUJsZW5kU2tpYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVCbGVu
ZFNraWEuY3BwCmluZGV4IDgwODlmM2I1MGQ2MDU5NmZmYjg0NjlhNTRiNWIzZTRmODhmMWI4NjIu
LmI1OTdiYTJhZTczZDA2MTBjM2ZiMWE1MGFiYTIwZDU3ZjM0MDJlZWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUJsZW5kU2tpYS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZF
QmxlbmRTa2lhLmNwcApAQCAtODAsOCArODAsNyBAQCBib29sIEZFQmxlbmQ6OnBsYXRmb3JtQXBw
bHlTa2lhKCkKICAgICBTa0F1dG9UVW5yZWY8U2tJbWFnZUZpbHRlcj4gYmxlbmQobmV3IFNrQmxl
bmRJbWFnZUZpbHRlcihtb2RlLCBiYWNrZ3JvdW5kU291cmNlKSk7CiAgICAgU2tQYWludCBwYWlu
dDsKICAgICBwYWludC5zZXRJbWFnZUZpbHRlcihibGVuZCk7Ci0gICAgU2tDYW52YXMqIGNhbnZh
cyA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsK
LSAgICBjYW52YXMtPmRyYXdCaXRtYXAoZm9yZWdyb3VuZEJpdG1hcCwgMCwgMCwgJnBhaW50KTsK
KyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0JpdG1h
cChmb3JlZ3JvdW5kQml0bWFwLCAwLCAwLCAmcGFpbnQpOwogICAgIHJldHVybiB0cnVlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3Nr
aWEvRkVDb2xvck1hdHJpeFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9za2lhL0ZFQ29sb3JNYXRyaXhTa2lhLmNwcAppbmRleCBhZmZiYWVhZDA0ODA1
OTdlZmE5YzAzYWJmZTdjYmUyMzU2ZjJjMDEwLi4zMjI4Y2Q4YTM5ZGM4ZWY4NDhmOGRkMzA2NTRm
Njg1MmNiZTU0OGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL3NraWEvRkVDb2xvck1hdHJpeFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUNvbG9yTWF0cml4U2tpYS5jcHAKQEAg
LTEyNywxMSArMTI3LDEwIEBAIGJvb2wgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNraWEo
KQogICAgIGlmICghbmF0aXZlSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFNr
Q2FudmFzKiBjYW52YXMgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCk7CiAgICAgU2tQYWludCBwYWludDsKICAgICBwYWludC5zZXRDb2xvckZpbHRl
cihmaWx0ZXIpOwogICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2RlOjprU3JjX01v
ZGUpOwotICAgIGNhbnZhcy0+ZHJhd0JpdG1hcChuYXRpdmVJbWFnZS0+Yml0bWFwKCksIDAsIDAs
ICZwYWludCk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmRyYXdCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1hcCgpLCAwLCAwLCAmcGFpbnQpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL3NraWEvRkVDb21wb25lbnRUcmFuc2ZlclNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29tcG9uZW50VHJhbnNmZXJT
a2lhLmNwcAppbmRleCA4NmQ1ZDdlNjYyYWY1ODI3OTIxYTg0MzQxNTJhMTBjYmU0NzA4MmYyLi42
YjVmYjY5OTFhYjY5ZWFmNDU1ZTBkODI0ZmQ1OGIxZTMxODQ1M2RhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb21wb25lbnRUcmFu
c2ZlclNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc2tpYS9GRUNvbXBvbmVudFRyYW5zZmVyU2tpYS5jcHAKQEAgLTQ4LDExICs0OCwxMCBAQCBi
b29sIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTa2lhKCkKICAgICB1bnNpZ25l
ZCBjaGFyIHJWYWx1ZXNbMjU2XSwgZ1ZhbHVlc1syNTZdLCBiVmFsdWVzWzI1Nl0sIGFWYWx1ZXNb
MjU2XTsKICAgICBnZXRWYWx1ZXMoclZhbHVlcywgZ1ZhbHVlcywgYlZhbHVlcywgYVZhbHVlcyk7
CiAKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGFpbnQuc2V0
Q29sb3JGaWx0ZXIoU2tUYWJsZUNvbG9yRmlsdGVyOjpDcmVhdGVBUkdCKGFWYWx1ZXMsIHJWYWx1
ZXMsIGdWYWx1ZXMsIGJWYWx1ZXMpKS0+dW5yZWYoKTsKICAgICBwYWludC5zZXRYZmVybW9kZU1v
ZGUoU2tYZmVybW9kZTo6a1NyY19Nb2RlKTsKLSAgICBjYW52YXMtPmRyYXdCaXRtYXAoYml0bWFw
LCAwLCAwLCAmcGFpbnQpOworICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpLT5kcmF3Qml0bWFwKGJpdG1hcCwgMCwgMCwgJnBhaW50KTsKIAogICAgIHJldHVybiB0
cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9za2lhL0ZFTGlnaHRpbmdTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUxpZ2h0aW5nU2tpYS5jcHAKaW5kZXggMTY3MjM0ZDNiMzU5
YTBlYTUwYzczMjIxYjIzM2RiNjA4ZThiYWQ5Zi4uNWYzMzcyN2I1YWY1MzMyOTQyMjEwODIzNDVi
NDE3OGYwMmU1YWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9za2lhL0ZFTGlnaHRpbmdTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVMaWdodGluZ1NraWEuY3BwCkBAIC0xMDMs
NyArMTAzLDcgQEAgYm9vbCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U2tpYSgpCiAKICAgICBT
a1BhaW50IHBhaW50OwogICAgIHBhaW50LnNldEltYWdlRmlsdGVyKGNyZWF0ZUltYWdlRmlsdGVy
KDApKS0+dW5yZWYoKTsKLSAgICBkc3RDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCktPmRyYXdCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1hcCgpLCBkcmF3aW5nUmVnaW9uLmxvY2F0
aW9uKCkueCgpLCBkcmF3aW5nUmVnaW9uLmxvY2F0aW9uKCkueSgpLCAmcGFpbnQpOworICAgIGRz
dENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3Qml0bWFwKG5hdGl2ZUltYWdlLT5iaXRt
YXAoKSwgZHJhd2luZ1JlZ2lvbi5sb2NhdGlvbigpLngoKSwgZHJhd2luZ1JlZ2lvbi5sb2NhdGlv
bigpLnkoKSwgJnBhaW50KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5j
cHAKaW5kZXggOTdhZGQ2MjI1YTI2M2YzYTgyOGRiYjk5MjRmMjYzZjcwODY5YzI2ZC4uNWM3OTAw
NDg4ZDAyYmJjYjQxNzc2NTc4MGFkNGU2OTNiNjdlN2RiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3Bw
CkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQq
IGdjLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKICAgICAgICAgeSArPSBTa0Zsb2F0VG9T
Y2FsYXIoYWR2W2ldLmhlaWdodCgpKTsKICAgICB9CiAKLSAgICBTa0NhbnZhcyogY2FudmFzID0g
Z2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lh
KiBwbGF0Zm9ybUNvbnRleHQgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgVGV4dERyYXdp
bmdNb2RlRmxhZ3MgdGV4dE1vZGUgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmdldFRleHREcmF3
aW5nTW9kZSgpOwogCiAgICAgLy8gV2UgZHJhdyB0ZXh0IHVwIHRvIHR3byB0aW1lcyAob25jZSBm
b3IgZmlsbCwgb25jZSBmb3Igc3Ryb2tlKS4KQEAgLTExNSwxMCArMTE1LDEwIEBAIHZvaWQgRm9u
dDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVGb250RGF0YSog
Zm9udCwKICAgICAgICAgICAgICAgICBwYXRoLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgcGF0
aC5tb3ZlVG8odlBvc0JlZ2luW2ldKTsKICAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyh2UG9z
RW5kW2ldKTsKLSAgICAgICAgICAgICAgICBjYW52YXMtPmRyYXdUZXh0T25QYXRoKGdseXBocyAr
IGksIDIsIHBhdGgsIDAsIHBhaW50KTsKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQt
PmRyYXdUZXh0T25QYXRoKGdseXBocyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGds
eXBocywgbnVtR2x5cGhzIDw8IDEsIHBvcywgcGFpbnQpOworICAgICAgICAgICAgcGxhdGZvcm1D
b250ZXh0LT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyA8PCAxLCBwb3MsIHBhaW50KTsK
ICAgICB9CiAKICAgICBpZiAoKHRleHRNb2RlICYgVGV4dE1vZGVTdHJva2UpCkBAIC0xNDQsMTAg
KzE0NCwxMCBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgICAgICAgICAgICAgcGF0aC5yZXNldCgpOwog
ICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKHZQb3NCZWdpbltpXSk7CiAgICAgICAgICAgICAg
ICAgcGF0aC5saW5lVG8odlBvc0VuZFtpXSk7Ci0gICAgICAgICAgICAgICAgY2FudmFzLT5kcmF3
VGV4dE9uUGF0aChnbHlwaHMgKyBpLCAyLCBwYXRoLCAwLCBwYWludCk7CisgICAgICAgICAgICAg
ICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3VGV4dE9uUGF0aChnbHlwaHMgKyBpLCAyLCBwYXRoLCAw
LCBwYWludCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2Fu
dmFzLT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyA8PCAxLCBwb3MsIHBhaW50KTsKKyAg
ICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMg
PDwgMSwgcG9zLCBwYWludCk7CiAgICAgfQogfQogCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBG
b250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYg
cnVuLAogICAgIEZsb2F0UG9pbnQgYWRqdXN0ZWRQb2ludCA9IHNoYXBlci5hZGp1c3RTdGFydFBv
aW50KHBvaW50KTsKICAgICBkcmF3R2x5cGhCdWZmZXIoZ2MsIHJ1biwgZ2x5cGhCdWZmZXIsIGFk
anVzdGVkUG9pbnQpOwogI2Vsc2UKLSAgICBTa0NhbnZhcyogY2FudmFzID0gZ2MtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNv
bnRleHQgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29tcGxleFRleHRDb250cm9sbGVy
IGNvbnRyb2xsZXIodGhpcywgcnVuLCBwb2ludC54KCksIHBvaW50LnkoKSk7CiAgICAgaWYgKHJ1
bi5ydGwoKSkKICAgICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwpAQCAtMjA2LDEzICsy
MDYsMTMgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBnYywg
Y29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICBpZiAoZmlsbCkgewogICAgICAgICAgICAgY29u
dHJvbGxlci5mb250UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCktPnNldHVwUGFpbnQoJmZpbGxQ
YWludCk7CiAgICAgICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmFkanVzdFRleHRSZW5k
ZXJNb2RlKCZmaWxsUGFpbnQpOwotICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChjb250
cm9sbGVyLmdseXBocygpICsgZnJvbUdseXBoLCBnbHlwaExlbmd0aCA8PCAxLCBjb250cm9sbGVy
LnBvc2l0aW9ucygpICsgZnJvbUdseXBoLCBmaWxsUGFpbnQpOworICAgICAgICAgICAgcGxhdGZv
cm1Db250ZXh0LT5kcmF3UG9zVGV4dChjb250cm9sbGVyLmdseXBocygpICsgZnJvbUdseXBoLCBn
bHlwaExlbmd0aCA8PCAxLCBjb250cm9sbGVyLnBvc2l0aW9ucygpICsgZnJvbUdseXBoLCBmaWxs
UGFpbnQpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHN0cm9rZSkgewogICAgICAgICAgICAg
Y29udHJvbGxlci5mb250UGxhdGZvcm1EYXRhRm9yU2NyaXB0UnVuKCktPnNldHVwUGFpbnQoJnN0
cm9rZVBhaW50KTsKICAgICAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0VGV4
dFJlbmRlck1vZGUoJnN0cm9rZVBhaW50KTsKLSAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1Rl
eHQoY29udHJvbGxlci5nbHlwaHMoKSArIGZyb21HbHlwaCwgZ2x5cGhMZW5ndGggPDwgMSwgY29u
dHJvbGxlci5wb3NpdGlvbnMoKSArIGZyb21HbHlwaCwgc3Ryb2tlUGFpbnQpOworICAgICAgICAg
ICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3UG9zVGV4dChjb250cm9sbGVyLmdseXBocygpICsgZnJv
bUdseXBoLCBnbHlwaExlbmd0aCA8PCAxLCBjb250cm9sbGVyLnBvc2l0aW9ucygpICsgZnJvbUds
eXBoLCBzdHJva2VQYWludCk7CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAKaW5kZXggYzgw
OTdlMzQ5MWFhNzViN2NhNWU2MmYzNjU2NWU5ZWYyYjIyNGYzYS4uNjU1YTc0YmI4NjM3YWY1MTU1
NDc1ZjBiNzYyOWYzYjQ4ODFmNWQ0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAKQEAgLTEzNSwxMCArMTM1LDEwIEBAIHZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udCwKICAgICAgICAgeSArPSBTa0Zsb2F0VG9TY2FsYXIoYWR2W2ldLmhlaWdodCgpKTsK
ICAgICB9CiAKLSAgICBTa0NhbnZhcyogY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBnYy0+
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWwpIHsKLSAgICAgICAgY2FudmFzLT5zYXZlKCk7Ci0gICAgICAgIGNh
bnZhcy0+cm90YXRlKC05MCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+c2F2ZSgpOworICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQtPnJvdGF0ZSgtOTApOwogICAgICAgICBTa01hdHJpeCByb3Rh
dG9yOwogICAgICAgICByb3RhdG9yLnJlc2V0KCk7CiAgICAgICAgIHJvdGF0b3Iuc2V0Um90YXRl
KDkwKTsKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgICAgIGdjLT5wbGF0
Zm9ybUNvbnRleHQoKS0+YWRqdXN0VGV4dFJlbmRlck1vZGUoJnBhaW50KTsKICAgICAgICAgcGFp
bnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CiAKLSAg
ICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyAqIHNpemVvZih1aW50
MTZfdCksIHBvcywgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPmRyYXdQb3NUZXh0
KGdseXBocywgbnVtR2x5cGhzICogc2l6ZW9mKHVpbnQxNl90KSwgcG9zLCBwYWludCk7CiAgICAg
fQogCiAgICAgaWYgKCh0ZXh0TW9kZSAmIFRleHRNb2RlU3Ryb2tlKQpAQCAtMTczLDEwICsxNzMs
MTAgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250LAogICAgICAgICAgICAgcGFpbnQuc2V0TG9vcGVyKDApOwogICAg
ICAgICB9CiAKLSAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyAq
IHNpemVvZih1aW50MTZfdCksIHBvcywgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQt
PmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzICogc2l6ZW9mKHVpbnQxNl90KSwgcG9zLCBw
YWludCk7CiAgICAgfQogICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsKQotICAgICAgICBjYW52YXMtPnJlc3RvcmUoKTsKKyAgICAgICAgcGxhdGZv
cm1Db250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBo
aWNzQ29udGV4dFNraWEuY3BwCmluZGV4IGZjOTcxNDY3MWZlZGU4ODU1ZDYwYjlhZWVkMjBmYTM5
ZGVlNWIzZmYuLmJiYTQxYTE0MWMzMTA3N2I5Zjk5MzVlM2QyMjE1M2YwYTNlNDg0NWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcApAQCAtMjkxLDcgKzI5MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQg
dGhpY2tuZXNzCiAgICAgICAgIHIuaW5zZXQoU2tJbnRUb1NjYWxhcih0aGlja25lc3MgKyAxKSwg
U2tJbnRUb1NjYWxhcih0aGlja25lc3MgKyAxKSk7CiAgICAgICAgIHBhdGguYWRkT3ZhbChyLCBT
a1BhdGg6OmtDQ1dfRGlyZWN0aW9uKTsKICAgICB9Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNs
aXBQYXRoQW50aUFsaWFzZWQocGF0aCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBQYXRo
KHBhdGgsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wLCB0cnVlKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQpAQCAtMzEwLDggKzMxMCw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIFNr
UGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5n
KCZwYWludCk7CiAgICAgcGFpbnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtDbGVhcl9N
b2RlKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdSZWN0KHIsIHBhaW50
KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1JlY3QociwgcGFpbnQpOworICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5kcmF3UmVjdChyLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTMxOSw3ICszMTgsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpLT5jbGlwUmVjdChyZWN0KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2xpcFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBh
dGgmIHBhdGgpCkBAIC0zMjcsNyArMzI2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAo
Y29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBh
dGhBbnRpQWxpYXNlZCgqcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisgICAgcGxhdGZvcm1Db250ZXh0
KCktPmNsaXBQYXRoKCpwYXRoLnBsYXRmb3JtUGF0aCgpLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9P
cCwgdHJ1ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBh
dGgmIHBhdGgpCkBAIC0zNDMsNyArMzQyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQoY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmNsaXBSZWN0
KHJlY3QsIFNrUmVnaW9uOjprRGlmZmVyZW5jZV9PcCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCkt
PmNsaXBSZWN0KHJlY3QsIFNrUmVnaW9uOjprRGlmZmVyZW5jZV9PcCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHApCkBAIC0zNTQsNyArMzUzLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcCkKICAgICAvLyBXZSBt
dXN0IG1ha2UgYSBjb3B5IG9mIHRoZSBwYXRoLCB0byBtYXJrIGl0IGFzIGludmVyc2UtZmlsbGVk
LgogICAgIFNrUGF0aCBwYXRoKHAuaXNOdWxsKCkgPyBTa1BhdGgoKSA6ICpwLnBsYXRmb3JtUGF0
aCgpKTsKICAgICBwYXRoLnRvZ2dsZUludmVyc2VGaWxsVHlwZSgpOwotICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHBhdGgpOworICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jbGlwUGF0aChwYXRoLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCwgdHJ1ZSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoVG9DbGlwLCBXaW5k
UnVsZSBjbGlwUnVsZSkKQEAgLTM3Miw3ICszNzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aFRvQ2xpcCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAg
ICAgIHN0b3JhZ2Uuc2V0RmlsbFR5cGUoZnR5cGUpOwogICAgICAgICBwYXRoID0gJnN0b3JhZ2U7
CiAgICAgfQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKCpwYXRo
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgoKnBhdGgsIFNrUmVnaW9uOjprSW50
ZXJzZWN0X09wLCB0cnVlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZSkKQEAgLTM4MCw3ICszNzksNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Y29uY2F0KGFmZmluZSk7CisgICAgcGxhdGZvcm1Db250
ZXh0KCktPmNvbmNhdChhZmZpbmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQpAQCAtMzg4LDcgKzM4Nyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT5zZXRNYXRyaXgoYWZmaW5lKTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+c2V0TWF0cml4KGFmZmluZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFBhdGhGcm9t
Q29udmV4UG9pbnRzKFNrUGF0aCogcGF0aCwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQ
b2ludCogcG9pbnRzKQpAQCAtNDI5LDE0ICs0MjgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsCiAgICAgU2tQYWludCBwYWludDsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAg
ICBwYWludC5zZXRBbnRpQWxpYXMoc2hvdWxkQW50aWFsaWFzKTsKLSAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5k
cmF3UGF0aChwYXRoLCBwYWludCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9r
ZSkgewogICAgICAgICBwYWludC5yZXNldCgpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7Ci0gICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogICAgIH0KIH0KIApAQCAtNDUwLDEwICs0
NDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51
bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbgogCiAgICAgU2tQYXRoIHBhdGg7CiAgICAg
c2V0UGF0aEZyb21Db252ZXhQb2ludHMoJnBhdGgsIG51bVBvaW50cywgcG9pbnRzKTsKLSAgICBp
ZiAoYW50aWFsaWFzZWQpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlB
bGlhc2VkKHBhdGgpOwotICAgIGVsc2UKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5jbGlwUGF0aChwYXRoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgocGF0
aCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3AsIGFudGlhbGlhc2VkKTsKIH0KIAogLy8gVGhpcyBt
ZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlz
dHMuCkBAIC00NjUsMTQgKzQ1OSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlw
c2UoY29uc3QgSW50UmVjdCYgZWxpcHNlUmVjdCkKICAgICBTa1JlY3QgcmVjdCA9IGVsaXBzZVJl
Y3Q7CiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWlu
dEZvckZpbGxpbmcoJnBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRy
YXdPdmFsKHJlY3QsIHBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd0JvdW5k
ZWQocmVjdCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3T3ZhbChyZWN0LCBw
YWludCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBw
YWludC5yZXNldCgpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0
cm9raW5nKCZwYWludCwgJnJlY3QsIDApOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
dmFzKCktPmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCkt
PmRpZERyYXdCb3VuZGVkKHJlY3QsIHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCkt
PmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKICAgICB9CiB9CiAKQEAgLTQ5MSw4ICs0ODMsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgZHJhd091dGVyUGF0aChQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250
ZXh0LCBjb25zdCBTa1BhdGgmIHBhdAogICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKDEpOwogICAg
IHBhaW50LnNldFBhdGhFZmZlY3QobmV3IFNrQ29ybmVyUGF0aEVmZmVjdCgxKSktPnVucmVmKCk7
CiAjZW5kaWYKLSAgICBjb250ZXh0LT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwot
ICAgIGNvbnRleHQtPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBjb250ZXh0LT5kcmF3
UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3SW5uZXJQYXRo
KFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tQYWlu
dCYgcGFpbnQsIGludCB3aWR0aCkKQEAgLTU4MiwxNyArNTczLDE0IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYg
cG9pbnQyKQogICAgICAgICB9CiAgICAgICAgIFNrUGFpbnQgZmlsbFBhaW50OwogICAgICAgICBm
aWxsUGFpbnQuc2V0Q29sb3IocGFpbnQuZ2V0Q29sb3IoKSk7Ci0gICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocjEsIGZpbGxQYWludCk7Ci0gICAgICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocjIsIGZpbGxQYWludCk7Ci0gICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyMSwgZmlsbFBhaW50KTsKLSAgICAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdSZWN0KHIyLCBmaWxsUGFpbnQpOworICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1JlY3QocjEsIGZpbGxQYWludCk7CisgICAgICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5kcmF3UmVjdChyMiwgZmlsbFBhaW50KTsKICAgICB9CiAKICAgICBhZGp1
c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocDEsIHAyLCB3aWR0aCwgcGVuU3R5bGUpOwogICAgIFNr
UG9pbnQgcHRzWzJdID0geyAoU2tQb2ludClwMSwgKFNrUG9pbnQpcDIgfTsKIAotICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BvaW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50
TW9kZSwgMiwgcHRzLCBwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQb2lu
dHMoU2tDYW52YXM6OmtMaW5lc19Qb2ludE1vZGUsIDIsIHB0cywgcGFpbnQpOworICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5kcmF3UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBw
dHMsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKQEAgLTcyMSwxNCArNzA5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBmbG9h
dCB3aWR0CiAgICAgcmVjdC5zZXQob3JpZ2luWCwgb3JpZ2luWSwgb3JpZ2luWCArIFdlYkNvcmVG
bG9hdFRvU2tTY2FsYXIod2lkdGgpICogZGV2aWNlU2NhbGVGYWN0b3IsIG9yaWdpblkgKyBTa0lu
dFRvU2NhbGFyKG1pc3NwZWxsQml0bWFwW2luZGV4XS0+aGVpZ2h0KCkpKTsKIAogICAgIGlmIChk
ZXZpY2VTY2FsZUZhY3RvciA9PSAyKSB7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKS0+c2F2ZSgpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnNjYWxl
KFNLX1NjYWxhckhhbGYsIFNLX1NjYWxhckhhbGYpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+c2F2ZSgpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2NhbGUoU0tfU2NhbGFySGFs
ZiwgU0tfU2NhbGFySGFsZik7CiAgICAgfQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UmVj
dChyZWN0LCBwYWludCk7CiAgICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID09IDIpCi0gICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+cmVzdG9yZSgpOwotCi0gICAgcGxhdGZvcm1D
b250ZXh0KCktPmRpZERyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnJlc3RvcmUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwdCwKQEAgLTc1Myw4ICs3MzksNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LAogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIC8vIFRl
eHQgbGluZXMgYXJlIGRyYXduIHVzaW5nIHRoZSBzdHJva2UgY29sb3IuCiAgICAgcGFpbnQuc2V0
Q29sb3IocGxhdGZvcm1Db250ZXh0KCktPmVmZmVjdGl2ZVN0cm9rZUNvbG9yKCkpOwotICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0
KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xl
IHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAgLTc5MCw4ICs3NzUsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aFRvRmlsbCkKICAgICBTa1BhaW50IHBh
aW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQp
OwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aCgqcGF0aCwgcGFp
bnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UGF0aCgqcGF0aCwgcGFpbnQpOwor
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGF0aCgqcGF0aCwgcGFpbnQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODAz
LDggKzc4Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
ZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3
UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIsIHBhaW50
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC04MTYs
OCArNzk5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclMKICAgICBTa1BhaW50IHBhaW50Owog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Q29tbW9uKCZwYWludCk7CiAgICAgcGFp
bnQuc2V0Q29sb3IoY29sb3IucmdiKCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVj
dChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIsIHBhaW50KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0LApAQCAtODUyLDggKzgzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50
LnNldENvbG9yKGNvbG9yLnJnYigpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkt
PmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1Bh
dGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGF0aChwYXRoLCBw
YWludCk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNs
dWRlRGV2aWNlU2NhbGUpIGNvbnN0CkBAIC04NjEsNyArODQyLDcgQEAgQWZmaW5lVHJhbnNmb3Jt
IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7
CiAKLSAgICBjb25zdCBTa01hdHJpeCYgbSA9IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
Z2V0VG90YWxNYXRyaXgoKTsKKyAgICBjb25zdCBTa01hdHJpeCYgbSA9IHBsYXRmb3JtQ29udGV4
dCgpLT5nZXRUb3RhbE1hdHJpeCgpOwogICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oU2tTY2Fs
YXJUb0RvdWJsZShtLmdldFNjYWxlWCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNr
U2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3WSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3WCgpKSwKQEAgLTg4MCw3ICs4NjEsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+c2NhbGUoV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihzaXplLndpZHRoKCkp
LAorICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zY2FsZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHNp
emUud2lkdGgoKSksCiAgICAgICAgIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2l6ZS5oZWlnaHQo
KSkpOwogfQogCkBAIC0xMTQwLDggKzExMjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlQXJjKGNvbnN0IEludFJlY3QmIHIsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKQog
CiAgICAgU2tQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRBcmMob3ZhbCwgU2tJbnRUb1NjYWxhcigt
c3RhcnRBbmdsZSksIFNrSW50VG9TY2FsYXIoLWFuZ2xlU3BhbikpOwotICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5kaWREcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCkt
PmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQpAQCAtMTE1Miw4ICsxMTMyLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQog
ICAgIGNvbnN0IFNrUGF0aCYgcGF0aCA9ICpwYXRoVG9TdHJva2UucGxhdGZvcm1QYXRoKCk7CiAg
ICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0
cm9raW5nKCZwYWludCwgMCwgMCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5k
cmF3UGF0aChwYXRoLCBwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRo
KHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BhdGgocGF0aCwgcGFp
bnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKQEAgLTExNzAsMTAgKzExNDksOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKICAgICBTa1JlY3QgcihyZWN0KTsKICAgICBib29sIHZhbGlkVyA9IHIud2lkdGgo
KSA+IDA7CiAgICAgYm9vbCB2YWxpZEggPSByLmhlaWdodCgpID4gMDsKLSAgICBTa0NhbnZhcyog
Y2FudmFzID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIGlmICh2YWxpZFcgJiYg
dmFsaWRIKSB7Ci0gICAgICAgIGNhbnZhcy0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1JlY3QociwgcGFpbnQpOworICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwogICAgIH0gZWxzZSBpZiAodmFsaWRXIHx8
IHZhbGlkSCkgewogICAgICAgICAvLyB3ZSBhcmUgZXhwZWN0ZWQgdG8gcmVzcGVjdCB0aGUgbGlu
ZUpvaW4sIHNvIHdlIGNhbid0IGp1c3QgY2FsbAogICAgICAgICAvLyBkcmF3TGluZSAtLSB3ZSBo
YXZlIHRvIGNyZWF0ZSBhIHBhdGggdGhhdCBkb3VibGVzIGJhY2sgb24gaXRzZWxmLgpAQCAtMTE4
MSw4ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgIHBhdGgubW92ZVRvKHIuZkxl
ZnQsIHIuZlRvcCk7CiAgICAgICAgIHBhdGgubGluZVRvKHIuZlJpZ2h0LCByLmZCb3R0b20pOwog
ICAgICAgICBwYXRoLmNsb3NlKCk7Ci0gICAgICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFp
bnQpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQp
OworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogICAg
IH0KIH0KIApAQCAtMTE5MSw4ICsxMTY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0
ZShmbG9hdCBhbmdsZUluUmFkaWFucykKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnJvdGF0ZShX
ZWJDb3JlRmxvYXRUb1NrU2NhbGFyKAotICAgICAgICBhbmdsZUluUmFkaWFucyAqICgxODAuMGYg
LyAzLjE0MTU5MjY1ZikpKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cm90YXRlKFdlYkNvcmVG
bG9hdFRvU2tTY2FsYXIoYW5nbGVJblJhZGlhbnMgKiAoMTgwLjBmIC8gMy4xNDE1OTI2NWYpKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgdywgZmxvYXQgaCkK
QEAgLTEyMDAsOCArMTE3NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxv
YXQgdywgZmxvYXQgaCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnRyYW5zbGF0ZShXZWJDb3Jl
RmxvYXRUb1NrU2NhbGFyKHcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoaCkpOworICAgIHBsYXRmb3JtQ29udGV4dCgp
LT50cmFuc2xhdGUoV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcih3KSwgV2ViQ29yZUZsb2F0VG9Ta1Nj
YWxhcihoKSk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4
dCgpIGNvbnN0CkBAIC0xMjI1LDggKzExOTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiAgICAgU2tSZWN0IHJl
Y3QgPSBlbGxpcHNlOwogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCkt
PnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRp
ZERyYXdCb3VuZGVkKHJlY3QsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd092
YWwocmVjdCwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTEyMzcsOCArMTIxMCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKQogICAgIFNrUmVjdCByZWN0KGVsbGlwc2UpOwogICAgIFNrUGFpbnQgcGFp
bnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQs
IDAsIDApOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVjdCwg
cGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3Qm91bmRlZChyZWN0LCBwYWlu
dCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKIH0KIAog
fSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAppbmRleCAyNWYzNDNlYTVi
MWM1NDQ2MDNkODY5OTAyMzM5NDM2OWYxYmEyYjJkLi5kNDkyMWU4Y2JhZDdiYjcyNzQ5NjU2N2Qz
NWEwMDQ4MTI0YWI1M2RiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAg
dm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3Rv
cjxpbnQ+JiBsb29rVXBUYWJsZSkKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+
Ci1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCwgU2tDYW52YXMqIGNhbnZhcywKK1Bhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBj
b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXpl
JiBzaXplKQogewogICAgIGZsb2F0IGFyZWEgPSA0LjBmICogcmVjdC53aWR0aCgpICogcmVjdC5o
ZWlnaHQoKTsKQEAgLTI3NiwyMyArMjc2LDIyIEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBTa0NhbnZhcyogY2FudmFzCiAg
ICAgZWxzZQogICAgICAgICBjb25maWc4ODg4ID0gU2tDYW52YXM6OmtSR0JBX1VucHJlbXVsX0Nv
bmZpZzg4ODg7CiAKLSAgICBjYW52YXMtPnJlYWRQaXhlbHMoJmRlc3RCaXRtYXAsIHJlY3QueCgp
LCByZWN0LnkoKSwgY29uZmlnODg4OCk7CisgICAgY29udGV4dC0+cmVhZFBpeGVscygmZGVzdEJp
dG1hcCwgcmVjdC54KCksIHJlY3QueSgpLCBjb25maWc4ODg4KTsKICAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGlu
YXRlU3lzdGVtKSBjb25zdAogewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8VW5tdWx0aXBsaWVk
PihyZWN0LCBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgbV9zaXplKTsK
KyAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgY29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKSwgbV9zaXplKTsKIH0KIAogUGFzc1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhPFByZW11bHRpcGxpZWQ+KHJlY3QsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLCBtX3NpemUpOworICAgIHJldHVybiBnZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4o
cmVjdCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9zaXplKTsKIH0KIAogdm9pZCBJ
bWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBl
ZEFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0p
CiB7Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpOwogICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NF
UlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwogCkBAIC0zMzAsNyArMzI5LDcgQEAgdm9pZCBJ
bWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBl
ZEFycmF5KiBzb3VyY2UsIGMKICAgICBlbHNlCiAgICAgICAgIGNvbmZpZzg4ODggPSBTa0NhbnZh
czo6a1JHQkFfVW5wcmVtdWxfQ29uZmlnODg4ODsKIAotICAgIGNhbnZhcy0+d3JpdGVQaXhlbHMo
c3JjQml0bWFwLCBkZXN0WCwgZGVzdFksIGNvbmZpZzg4ODgpOworICAgIGNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCktPndyaXRlUGl4ZWxzKHNyY0JpdG1hcCwgZGVzdFgsIGRlc3RZLCBjb25m
aWc4ODg4KTsKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkBAIC0zNjYsNyArMzY1LDcgQEAg
U3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29u
c3QgZG91YmxlKiBxdWFsaXR5LCBDb28KICAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKIAogICAgIFZlY3Rv
cjxjaGFyPiBlbmNvZGVkSW1hZ2U7Ci0gICAgU2tEZXZpY2UqIGRldmljZSA9IGNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKTsKKyAgICBTa0RldmljZSog
ZGV2aWNlID0gY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0RGV2aWNlKCk7CiAgICAg
aWYgKCFlbmNvZGVJbWFnZShkZXZpY2UtPmFjY2Vzc0JpdG1hcChmYWxzZSksIG1pbWVUeXBlLCBx
dWFsaXR5LCAmZW5jb2RlZEltYWdlKSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAK
aW5kZXggMWRiZGEwZmRhMTg5ZmFlNTlkYWIwNDI4NzA1ZmNkN2ViZDkxN2RlMy4uY2NjYmQ5MDA3
NTlkODQzOGZmNTg0Y2JiNWQyOTIyMDVkNzY2M2Y4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtMjk1LDcgKzI5NSw3
IEBAIHN0YXRpYyBTa0JpdG1hcCBleHRyYWN0U2NhbGVkSW1hZ2VGcmFnbWVudChjb25zdCBOYXRp
dmVJbWFnZVNraWEmIGJpdG1hcCwgY29uc3QKIC8vCiAvLyBOb3RlOiB0aGlzIGNvZGUgaXMgb25s
eSB1c2VkIHdoZW4gdGhlIGNhbnZhcyB0cmFuc2Zvcm1hdGlvbiBpcyBsaW1pdGVkIHRvCiAvLyBz
Y2FsaW5nIG9yIHRyYW5zbGF0aW9uLgotc3RhdGljIHZvaWQgZHJhd1Jlc2FtcGxlZEJpdG1hcChT
a0NhbnZhcyYgY2FudmFzLCBTa1BhaW50JiBwYWludCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBi
aXRtYXAsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCkKK3N0
YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4
dCwgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBjb25zdCBT
a1JlY3QmIHNyY1JlY3QsIGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QpCiB7CiAjaWYgUExBVEZPUk0o
Q0hST01JVU0pCiAgICAgVFJBQ0VfRVZFTlQwKCJza2lhIiwgImRyYXdSZXNhbXBsZWRCaXRtYXAi
KTsKQEAgLTMwNCwxMyArMzA0LDEzIEBAIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAo
U2tDYW52YXMmIGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgLy8g
dGhlIGZpbmFsIHNjYWxlLiBUaGUgZmluYWwgc2NhbGUgaXMgYSBjb21iaW5hdGlvbiBvZiBzY2Fs
ZSB0cmFuc2Zvcm0KICAgICAvLyBpbiBjYW52YXMgYW5kIGV4cGxpY2l0IHNjYWxpbmcgKHNyY1Jl
Y3QgYW5kIGRlc3RSZWN0KS4KICAgICBTa1JlY3Qgc2NyZWVuUmVjdDsKLSAgICBjYW52YXMuZ2V0
VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZzY3JlZW5SZWN0LCBkZXN0UmVjdCk7CisgICAgY29udGV4
dC0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZzY3JlZW5SZWN0LCBkZXN0UmVjdCk7CiAgICAg
ZmxvYXQgcmVhbFNjYWxlWCA9IHNjcmVlblJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsK
ICAgICBmbG9hdCByZWFsU2NhbGVZID0gc2NyZWVuUmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVp
Z2h0KCk7CiAKICAgICAvLyBUaGlzIHBhcnQgb2YgY29kZSBsaW1pdHMgc2NhbGluZyBvbmx5IHRv
IHZpc2libGUgcG9ydGlvbiBpbiB0aGUKICAgICBTa1JlY3QgZGVzdFJlY3RWaXNpYmxlU3Vic2V0
OwotICAgIENsaXBSZWN0VG9DYW52YXMoY2FudmFzLCBkZXN0UmVjdCwgJmRlc3RSZWN0VmlzaWJs
ZVN1YnNldCk7CisgICAgQ2xpcFJlY3RUb0NhbnZhcyhjb250ZXh0LCBkZXN0UmVjdCwgJmRlc3RS
ZWN0VmlzaWJsZVN1YnNldCk7CiAKICAgICAvLyBDbGlwUmVjdFRvQ2FudmFzIG9mdGVuIG92ZXJz
aG9vdHMsIHJlc3VsdGluZyBpbiBhIGxhcmdlciByZWdpb24gdGhhbiBvdXIKICAgICAvLyBvcmln
aW5hbCBkZXN0UmVjdC4gSW50ZXJzZWN0aW5nIGdldHMgdXMgYmFjayBpbnNpZGUuCkBAIC0zNDAs
OCArMzQwLDggQEAgc3RhdGljIHZvaWQgZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0NhbnZhcyYgY2Fu
dmFzLCBTa1BhaW50JiBwYWludCwgY29uc3QgTmF0aXZlSW0KICAgICAvLyBXaGVuIFNraWEgc3Vw
cG9ydHMgdGhlbiB1c2UgdGhpcyBhcyB0aGUgc291cmNlIHJlY3QgdG8gcmVwbGFjZSAwLgogICAg
IC8vCiAgICAgLy8gc2NhbGVkU3JjUmVjdC5vZmZzZXQoLWVuY2xvc2luZ1NjYWxlZFNyY1JlY3Qu
eCgpLCAtZW5jbG9zaW5nU2NhbGVkU3JjUmVjdC55KCkpOwotICAgIGNhbnZhcy5zYXZlKCk7Ci0g
ICAgY2FudmFzLmNsaXBSZWN0KGRlc3RSZWN0VmlzaWJsZVN1YnNldCk7CisgICAgY29udGV4dC0+
c2F2ZSgpOworICAgIGNvbnRleHQtPmNsaXBSZWN0KGRlc3RSZWN0VmlzaWJsZVN1YnNldCk7CiAK
ICAgICAvLyBCZWNhdXNlIHRoZSBpbWFnZSBmcmFnbWVudCBpcyBnZW5lcmF0ZWQgd2l0aCBhbiBh
cHByb3htaWF0ZWQgc2NhbGluZwogICAgIC8vIGZhY3Rvci4gVGhpcyBkcmF3IHdpbGwgcGVyZm9y
bSBhIGNsb3NlIHRvIDEgc2NhbGluZy4KQEAgLTM0OSwxMyArMzQ5LDEzIEBAIHN0YXRpYyB2b2lk
IGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMmIGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNv
bnN0IE5hdGl2ZUltCiAgICAgLy8gTk9URTogRm9yIGZ1dHVyZSBvcHRpbWl6YXRpb24uIElmIHRo
ZSBkaWZmZXJlbmNlIGluIHNjYWxlIGlzIHNvIHNtYWxsCiAgICAgLy8gdGhhdCBTa2lhIGRvZXNu
J3QgcHJvZHVjZSBhIGRpZmZlcmVuY2UgdGhlbiB3ZSBjYW4ganVzdCBibGl0IGl0IGRpcmVjdGx5
CiAgICAgLy8gdG8gZW5oYW5jZSBwZXJmb3JtYW5jZS4KLSAgICBjYW52YXMuZHJhd0JpdG1hcFJl
Y3Qoc2NhbGVkSW1hZ2VGcmFnbWVudCwgMCwgZW5jbG9zaW5nRGVzdFJlY3QsICZwYWludCk7Ci0g
ICAgY2FudmFzLnJlc3RvcmUoKTsKKyAgICBjb250ZXh0LT5kcmF3Qml0bWFwUmVjdChzY2FsZWRJ
bWFnZUZyYWdtZW50LCAwLCBlbmNsb3NpbmdEZXN0UmVjdCwgJnBhaW50KTsKKyAgICBjb250ZXh0
LT5yZXN0b3JlKCk7CiB9CiAKIHN0YXRpYyBib29sIGhhc05vbjkwcm90YXRpb24oUGxhdGZvcm1D
b250ZXh0U2tpYSogY29udGV4dCkKIHsKLSAgICByZXR1cm4gIWNvbnRleHQtPmNhbnZhcygpLT5n
ZXRUb3RhbE1hdHJpeCgpLnJlY3RTdGF5c1JlY3QoKTsKKyAgICByZXR1cm4gIWNvbnRleHQtPmdl
dFRvdGFsTWF0cml4KCkucmVjdFN0YXlzUmVjdCgpOwogfQogCiBzdGF0aWMgdm9pZCBwYWludFNr
Qml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgTmF0aXZl
SW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgY29uc3QgU2tSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgU2tYZmVybW9kZTo6TW9kZSYgY29tcE9wKQpAQCAtMzcwLDggKzM3MCw2
IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgLy8gb25seSBhbnRpYWxpYXMgaWYgd2Un
cmUgcm90YXRlZCBvciBza2V3ZWQKICAgICBwYWludC5zZXRBbnRpQWxpYXMoaGFzTm9uOTByb3Rh
dGlvbihwbGF0Zm9ybUNvbnRleHQpKTsKIAotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9y
bUNvbnRleHQtPmNhbnZhcygpOwotCiAgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKICAg
ICBpZiAocGxhdGZvcm1Db250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIHJlc2FtcGxp
bmcgPSBSRVNBTVBMRV9MSU5FQVI7CkBAIC0zODAsMTAgKzM3OCwxMCBAQCBzdGF0aWMgdm9pZCBw
YWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3Qg
TmF0aXZlSW1hZwogICAgIGVsc2UgewogICAgICAgICAvLyBUYWtlIGludG8gYWNjb3VudCBzY2Fs
ZSBhcHBsaWVkIHRvIHRoZSBjYW52YXMgd2hlbiBjb21wdXRpbmcgc2FtcGxpbmcgbW9kZSAoZS5n
LiBDU1Mgc2NhbGUgb3IgcGFnZSBzY2FsZSkuCiAgICAgICAgIFNrUmVjdCBkZXN0UmVjdFRhcmdl
dCA9IGRlc3RSZWN0OwotICAgICAgICBpZiAoIShjYW52YXMtPmdldFRvdGFsTWF0cml4KCkuZ2V0
VHlwZSgpICYgKFNrTWF0cml4OjprQWZmaW5lX01hc2sgfCBTa01hdHJpeDo6a1BlcnNwZWN0aXZl
X01hc2spKSkKLSAgICAgICAgICAgIGNhbnZhcy0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZk
ZXN0UmVjdFRhcmdldCwgZGVzdFJlY3QpOworICAgICAgICBpZiAoIShwbGF0Zm9ybUNvbnRleHQt
PmdldFRvdGFsTWF0cml4KCkuZ2V0VHlwZSgpICYgKFNrTWF0cml4OjprQWZmaW5lX01hc2sgfCBT
a01hdHJpeDo6a1BlcnNwZWN0aXZlX01hc2spKSkKKyAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4
dC0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZkZXN0UmVjdFRhcmdldCwgZGVzdFJlY3QpOwog
Ci0gICAgICAgIHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY2FudmFzLT5nZXRU
b3RhbE1hdHJpeCgpLCBiaXRtYXAsCisgICAgICAgIHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1w
bGluZ01vZGUocGxhdGZvcm1Db250ZXh0LT5nZXRUb3RhbE1hdHJpeCgpLCBiaXRtYXAsCiAgICAg
ICAgICAgICBTa1NjYWxhclRvRmxvYXQoc3JjUmVjdC53aWR0aCgpKSwgU2tTY2FsYXJUb0Zsb2F0
KHNyY1JlY3QuaGVpZ2h0KCkpLAogICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0
VGFyZ2V0LndpZHRoKCkpLCBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3RUYXJnZXQuaGVpZ2h0KCkp
KTsKICAgICB9CkBAIC0zOTcsNyArMzk1LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTa0JpdG1hcChQ
bGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IE5hdGl2ZUltYWcKICAg
ICByZXNhbXBsaW5nID0gbGltaXRSZXNhbXBsaW5nTW9kZShwbGF0Zm9ybUNvbnRleHQsIHJlc2Ft
cGxpbmcpOwogICAgIHBhaW50LnNldEZpbHRlckJpdG1hcChyZXNhbXBsaW5nID09IFJFU0FNUExF
X0xJTkVBUik7CiAgICAgaWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdFU09NRSkKLSAgICAg
ICAgZHJhd1Jlc2FtcGxlZEJpdG1hcCgqY2FudmFzLCBwYWludCwgYml0bWFwLCBzcmNSZWN0LCBk
ZXN0UmVjdCk7CisgICAgICAgIGRyYXdSZXNhbXBsZWRCaXRtYXAocGxhdGZvcm1Db250ZXh0LCBw
YWludCwgYml0bWFwLCBzcmNSZWN0LCBkZXN0UmVjdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IE5vIHJlc2FtcGxpbmcgbmVjZXNzYXJ5LCB3ZSBjYW4ganVzdCBkcmF3IHRoZSBiaXRtYXAuIFdl
IHdhbnQgdG8KICAgICAgICAgLy8gZmlsdGVyIGl0IGlmIHdlIGRlY2lkZWQgdG8gZG8gbGluZWFy
IGludGVycG9sYXRpb24gYWJvdmUsIG9yIGlmIHRoZXJlCkBAIC00MTgsMTAgKzQxNiwxMCBAQCBz
dGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29u
dGV4dCwgY29uc3QgTmF0aXZlSW1hZwogICAgICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS8x
NDU1NDAuCiAgICAgICAgIGlmIChuZWVkc0NsaXBwaW5nKSB7CiAgICAgICAgICAgICBwbGF0Zm9y
bUNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCkt
PmNsaXBSZWN0KGRlc3RSZWN0KTsKKyAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+Y2xpcFJl
Y3QoZGVzdFJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FudmFzLT5kcmF3Qml0bWFwUmVj
dChiaXRtYXAuYml0bWFwKCksICZlbmNsb3NpbmdTcmNSZWN0LCBlbmNsb3NpbmdEZXN0UmVjdCwg
JnBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3Qml0bWFwUmVjdChiaXRtYXAu
Yml0bWFwKCksICZlbmNsb3NpbmdTcmNSZWN0LCBlbmNsb3NpbmdEZXN0UmVjdCwgJnBhaW50KTsK
IAogICAgICAgICBpZiAobmVlZHNDbGlwcGluZykKICAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4
dC0+cmVzdG9yZSgpOwpAQCAtNDgxLDcgKzQ3OSw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8
IG5vcm1TcmNSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRy
YXcKIAotICAgIFNrTWF0cml4IGN0bSA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKS0+Z2V0VG90YWxNYXRyaXgoKTsKKyAgICBTa01hdHJpeCBjdG0gPSBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Z2V0VG90YWxNYXRyaXgoKTsKICAgICBTa01hdHJpeCB0b3RhbE1hdHJp
eDsKICAgICB0b3RhbE1hdHJpeC5zZXRDb25jYXQoY3RtLCBwYXR0ZXJuVHJhbnNmb3JtKTsKIApA
QCAtNTUyLDcgKzU1MCw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwKICAgICBwYWludC5zZXRYZmVybW9kZU1vZGUoV2ViQ29yZUNvbXBvc2l0ZVRv
U2tpYUNvbXBvc2l0ZShjb21wb3NpdGVPcCkpOwogICAgIHBhaW50LnNldEZpbHRlckJpdG1hcChy
ZXNhbXBsaW5nID09IFJFU0FNUExFX0xJTkVBUik7CiAKLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+cGFpbnRTa1BhaW50KGRlc3RSZWN0LCBwYWludCk7CisgICAgY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KGRlc3RSZWN0LCBwYWludCk7CiB9CiAKIC8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5jcHAKaW5kZXggMzQ0YmMxN2QzNzQ3YjRhMjQ2Nzk1NzVmODE1MDAwODAxZjEzZGM1
MS4uYjQ2NjQ2OWNmY2JmNWU2YzYzMmEyNjJlMTVlY2NjYzU3NzI2YTc0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpzYXZlKCkKICAgICBtX3N0YXRlLT5tX2ltYWdlQnVmZmVyQ2xpcC5yZXNldCgpOwogCiAg
ICAgLy8gU2F2ZSBvdXIgbmF0aXZlIGNhbnZhcy4KLSAgICBjYW52YXMoKS0+c2F2ZSgpOworICAg
IG1fY2FudmFzLT5zYXZlKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2F2ZUxh
eWVyKGNvbnN0IFNrUmVjdCogYm91bmRzLCBjb25zdCBTa1BhaW50KiBwYWludCkKQEAgLTI3NSw3
ICsyNzUsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9J
bWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsCiAgICAgbV9zdGF0ZS0+bV9jbGlwID0gYm91bmRz
OwogICAgIC8vIEdldCB0aGUgYWJzb2x1dGUgY29vcmRpbmF0ZXMgb2YgdGhlIHN0b3JlZCBjbGlw
cGluZyByZWN0YW5nbGUgdG8gbWFrZSBpdAogICAgIC8vIGluZGVwZW5kZW50IG9mIGFueSB0cmFu
c2Zvcm0gY2hhbmdlcy4KLSAgICBjYW52YXMoKS0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZt
X3N0YXRlLT5tX2NsaXApOworICAgIGdldFRvdGFsTWF0cml4KCkubWFwUmVjdCgmbV9zdGF0ZS0+
bV9jbGlwKTsKIAogICAgIFNrQ2FudmFzOjpTYXZlRmxhZ3Mgc2F2ZUZsYWdzID0gc3RhdGljX2Nh
c3Q8U2tDYW52YXM6OlNhdmVGbGFncz4oU2tDYW52YXM6OmtIYXNBbHBoYUxheWVyX1NhdmVGbGFn
IHwgU2tDYW52YXM6OmtGdWxsQ29sb3JMYXllcl9TYXZlRmxhZyk7CiAgICAgc2F2ZUxheWVyKCZi
b3VuZHMsIDAsIHNhdmVGbGFncyk7CkBAIC0yOTcsMjMgKzI5NywxOCBAQCB2b2lkIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsCiAgICAgfQogfQogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBQYXRoQW50aUFs
aWFzZWQoY29uc3QgU2tQYXRoJiBjbGlwUGF0aCkKLXsKLSAgICBjYW52YXMoKS0+Y2xpcFBhdGgo
Y2xpcFBhdGgsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wLCB0cnVlKTsKLX0KLQogdm9pZCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlKCkKIHsKICAgICBpZiAoIW1fc3RhdGUtPm1faW1hZ2VC
dWZmZXJDbGlwLmVtcHR5KCkpIHsKICAgICAgICAgYXBwbHlDbGlwRnJvbUltYWdlKG1fc3RhdGUt
Pm1fY2xpcCwgbV9zdGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXApOwotICAgICAgICBjYW52YXMoKS0+
cmVzdG9yZSgpOworICAgICAgICBtX2NhbnZhcy0+cmVzdG9yZSgpOwogICAgIH0KIAogICAgIG1f
c3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFz
dCgpOwogCiAgICAgLy8gUmVzdG9yZSBvdXIgbmF0aXZlIGNhbnZhcy4KLSAgICBjYW52YXMoKS0+
cmVzdG9yZSgpOworICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJlY3QpCkBAIC0zMjIsOCArMzE3LDcgQEAgdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdChTa1JlY3QgcmVjdCkKICAgICBpbnQgZmls
bGNvbG9yTm90VHJhbnNwYXJlbnQgPSBtX3N0YXRlLT5tX2ZpbGxDb2xvciAmIDB4RkYwMDAwMDA7
CiAgICAgaWYgKGZpbGxjb2xvck5vdFRyYW5zcGFyZW50KSB7CiAgICAgICAgIHNldHVwUGFpbnRG
b3JGaWxsaW5nKCZwYWludCk7Ci0gICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWlu
dCk7Ci0gICAgICAgIGRpZERyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICAgICAgZHJhd1JlY3Qo
cmVjdCwgcGFpbnQpOwogICAgIH0KIAogICAgIGlmIChtX3N0YXRlLT5tX3N0cm9rZVN0eWxlICE9
IE5vU3Ryb2tlCkBAIC0zMzUsMTcgKzMyOSwxMyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6
OmRyYXdSZWN0KFNrUmVjdCByZWN0KQogICAgICAgICBwYWludC5zZXRDb2xvcih0aGlzLT5lZmZl
Y3RpdmVTdHJva2VDb2xvcigpKTsKIAogICAgICAgICBTa1JlY3QgdG9wQm9yZGVyID0geyByZWN0
LmZMZWZ0LCByZWN0LmZUb3AsIHJlY3QuZlJpZ2h0LCByZWN0LmZUb3AgKyAxIH07Ci0gICAgICAg
IGNhbnZhcygpLT5kcmF3UmVjdCh0b3BCb3JkZXIsIHBhaW50KTsKLSAgICAgICAgZGlkRHJhd1Jl
Y3QodG9wQm9yZGVyLCBwYWludCk7CisgICAgICAgIGRyYXdSZWN0KHRvcEJvcmRlciwgcGFpbnQp
OwogICAgICAgICBTa1JlY3QgYm90dG9tQm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZCb3R0
b20gLSAxLCByZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tIH07Ci0gICAgICAgIGNhbnZhcygpLT5k
cmF3UmVjdChib3R0b21Cb3JkZXIsIHBhaW50KTsKLSAgICAgICAgZGlkRHJhd1JlY3QoYm90dG9t
Qm9yZGVyLCBwYWludCk7CisgICAgICAgIGRyYXdSZWN0KGJvdHRvbUJvcmRlciwgcGFpbnQpOwog
ICAgICAgICBTa1JlY3QgbGVmdEJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mVG9wICsgMSwg
cmVjdC5mTGVmdCArIDEsIHJlY3QuZkJvdHRvbSAtIDEgfTsKLSAgICAgICAgY2FudmFzKCktPmRy
YXdSZWN0KGxlZnRCb3JkZXIsIHBhaW50KTsKLSAgICAgICAgZGlkRHJhd1JlY3QobGVmdEJvcmRl
ciwgcGFpbnQpOworICAgICAgICBkcmF3UmVjdChsZWZ0Qm9yZGVyLCBwYWludCk7CiAgICAgICAg
IFNrUmVjdCByaWdodEJvcmRlciA9IHsgcmVjdC5mUmlnaHQgLSAxLCByZWN0LmZUb3AgKyAxLCBy
ZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tIC0gMSB9OwotICAgICAgICBjYW52YXMoKS0+ZHJhd1Jl
Y3QocmlnaHRCb3JkZXIsIHBhaW50KTsKLSAgICAgICAgZGlkRHJhd1JlY3QocmlnaHRCb3JkZXIs
IHBhaW50KTsKKyAgICAgICAgZHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50KTsKICAgICB9CiB9
CiAKQEAgLTU4MSwxMyArNTcxLDYgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXREYXNo
UGF0aEVmZmVjdChTa0Rhc2hQYXRoRWZmZWN0KiBkYXNoKQogICAgIH0KIH0KIAotdm9pZCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpwYWludFNrUGFpbnQoY29uc3QgU2tSZWN0JiByZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQYWludCYgcGFpbnQpCi17
Ci0gICAgbV9jYW52YXMtPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKLSAgICBkaWREcmF3UmVjdChy
ZWN0LCBwYWludCk7Ci19Ci0KIGNvbnN0IFNrQml0bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpi
aXRtYXAoKSBjb25zdAogewogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpAQCAtNjI1LDI0ICs2MDgs
NiBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRpZERyYXdSZWN0KGNvbnN0IFNrUmVjdCYg
cmVjdCwgY29uc3QgU2tQYWludCYgcGFpbnQsCiAgICAgICAgIG1fb3BhcXVlUmVnaW9uLmRpZERy
YXdSZWN0KHRoaXMsIHJlY3QsIHBhaW50LCBiaXRtYXApOwogfQogCi12b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OmRpZERyYXdQYXRoKGNvbnN0IFNrUGF0aCYgcGF0aCwgY29uc3QgU2tQYWludCYg
cGFpbnQpCi17Ci0gICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCi0gICAgICAgIG1fb3BhcXVl
UmVnaW9uLmRpZERyYXdQYXRoKHRoaXMsIHBhdGgsIHBhaW50KTsKLX0KLQotdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpkaWREcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1vZGUgbW9kZSwgaW50
IG51bVBvaW50cywgY29uc3QgU2tQb2ludCBwb2ludHNbXSwgY29uc3QgU2tQYWludCYgcGFpbnQp
Ci17Ci0gICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCi0gICAgICAgIG1fb3BhcXVlUmVnaW9u
LmRpZERyYXdQb2ludHModGhpcywgbW9kZSwgbnVtUG9pbnRzLCBwb2ludHMsIHBhaW50KTsKLX0K
LQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkaWREcmF3Qm91bmRlZChjb25zdCBTa1JlY3Qm
IHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIGlmIChtX3RyYWNrT3BhcXVlUmVn
aW9uKQotICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3Qm91bmRlZCh0aGlzLCByZWN0LCBw
YWludCk7Ci19Ci0KIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6YWRqdXN0VGV4dFJlbmRlck1v
ZGUoU2tQYWludCogcGFpbnQpCiB7CiAgICAgaWYgKCFwYWludC0+aXNMQ0RSZW5kZXJUZXh0KCkp
CkBAIC02NTcsNyArNjIyLDcgQEAgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjb3VsZFVzZUxD
RFJlbmRlcmVkVGV4dCgpCiAgICAgLy8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRl
ZCBjb3JyZWN0bHkgd2hlbiB0aGUgbGF5ZXIgaXMKICAgICAvLyBjb2xsYXBzZWQuIFRoZXJlZm9y
ZSwgc3VicGl4ZWwgdGV4dCBpcyBkaXNhYmxlZCB3aGVuIHdlIGFyZSBkcmF3aW5nCiAgICAgLy8g
b250byBhIGxheWVyLgotICAgIGlmIChjYW52YXMoKS0+aXNEcmF3aW5nVG9MYXllcigpKQorICAg
IGlmIChpc0RyYXdpbmdUb0xheWVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8v
IElmIHRoaXMgdGV4dCBpcyBub3QgaW4gYW4gaW1hZ2UgYnVmZmVyIGFuZCBzbyB3b24ndCBiZSBl
eHRlcm5hbGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmluZGV4IDIzNjlmMzIwOTk2YTQxMWIzMWJi
OGY3M2NiYWU2ZGVhNGQ5YmUxZjQuLjJhMjhkM2QyYTE2Yjk3ZDQ2MWJkZDZmYzg0OGUyYWJkYjg5
NzRlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC0xMDEsNyArMTAxLDYgQEAgcHVibGlj
OgogICAgIC8vIGludm9rZWQuCiAgICAgLy8gTk9URTogfGltYWdlQnVmZmVyfCBtYXkgYmUgZGVs
ZXRlZCBiZWZvcmUgdGhlIHxyZXN0b3JlfCBpcyBpbnZva2VkLgogICAgIHZvaWQgYmVnaW5MYXll
ckNsaXBwZWRUb0ltYWdlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKik7Ci0g
ICAgdm9pZCBjbGlwUGF0aEFudGlBbGlhc2VkKGNvbnN0IFNrUGF0aCYpOwogCiAgICAgLy8gU2V0
cyB1cCB0aGUgY29tbW9uIGZsYWdzIG9uIGEgcGFpbnQgZm9yIGFudGlhbGlhc2luZywgZWZmZWN0
cywgZXRjLgogICAgIC8vIFRoaXMgaXMgaW1wbGljaXRseSBjYWxsZWQgYnkgc2V0dXBQYWludEZp
bGwgYW5kIHNldHVwUGFpbnRTdHJva2UsIGJ1dApAQCAtMTYxLDkgKzE2MCw2IEBAIHB1YmxpYzoK
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHVzaGVkIGRvd24gdG8gR3JhcGhpY3NDb250
ZXh0LgogICAgIHZvaWQgZHJhd1JlY3QoU2tSZWN0IHJlY3QpOwogCi0gICAgLy8gRklYTUU6IEkn
bSBzdGlsbCB1bnN1cmUgaG93IEkgd2lsbCBzZXJpYWxpemUgdGhpcyBjYWxsLgotICAgIHZvaWQg
cGFpbnRTa1BhaW50KGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKLQogICAgIGNvbnN0
IFNrQml0bWFwKiBiaXRtYXAoKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgaWYgdGhlIGNvbnRl
eHQgaXMgYSBwcmludGluZyBjb250ZXh0IGluc3RlYWQgb2YgYSBkaXNwbGF5CkBAIC0xOTUsMTcg
KzE5MSw0OSBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyB3aWxsIGJlIGFuIGVtcHR5IHJlZ2lvbiB1
bmxlc3MgdHJhY2tpbmcgaXMgZW5hYmxlZC4KICAgICBjb25zdCBPcGFxdWVSZWdpb25Ta2lhJiBv
cGFxdWVSZWdpb24oKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZVJlZ2lvbjsgfQogCi0gICAgLy8g
QWZ0ZXIgZHJhd2luZyBpbiB0aGUgY29udGV4dCdzIGNhbnZhcywgdXNlIHRoZXNlIGZ1bmN0aW9u
cyB0byBub3RpZnkgdGhlIGNvbnRleHQgc28gaXQgY2FuIHRyYWNrIHRoZSBvcGFxdWUgcmVnaW9u
LgorICAgIC8vIEFmdGVyIGRyYXdpbmcgZGlyZWN0bHkgdG8gdGhlIGNvbnRleHQncyBjYW52YXMs
IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIG5vdGlmeSB0aGUgY29udGV4dCBzbworICAgIC8vIGl0IGNh
biB0cmFjayB0aGUgb3BhcXVlIHJlZ2lvbi4KKyAgICAvLyBGSVhNRTogdGhpcyBpcyBzdGlsbCBu
ZWVkZWQgb25seSBiZWNhdXNlIEltYWdlU2tpYTo6cGFpbnRTa0JpdG1hcCgpIG1heSBuZWVkIHRv
IG5vdGlmeSBmb3IgYQorICAgIC8vICAgICAgICBzbWFsbGVyIHJlY3QgdGhhbiB0aGUgb25lIGRy
YXduIHRvLCBkdWUgdG8gaXRzIGNsaXBwaW5nIGxvZ2ljLgogICAgIHZvaWQgZGlkRHJhd1JlY3Qo
Y29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYsIGNvbnN0IFNrQml0bWFwKiA9IDApOwotICAg
IHZvaWQgZGlkRHJhd1BhdGgoY29uc3QgU2tQYXRoJiwgY29uc3QgU2tQYWludCYpOwotICAgIHZv
aWQgZGlkRHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25z
dCBTa1BvaW50W10sIGNvbnN0IFNrUGFpbnQmKTsKLSAgICAvLyBGb3IgZHJhd2luZyBvcGVyYXRp
b25zIHRoYXQgZG8gbm90IGZpbGwgdGhlIGVudGlyZSByZWN0LgotICAgIHZvaWQgZGlkRHJhd0Jv
dW5kZWQoY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOwogCiAgICAgLy8gVHVybiBvZmYg
TENEIHRleHQgZm9yIHRoZSBwYWludCBpZiBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29udGV4dC4K
ICAgICB2b2lkIGFkanVzdFRleHRSZW5kZXJNb2RlKFNrUGFpbnQqKTsKICAgICBib29sIGNvdWxk
VXNlTENEUmVuZGVyZWRUZXh0KCk7CiAKKyAgICAvLyBTa0NhbnZhcyB3cmFwcGVycy4KKyAgICBT
a0RldmljZSogZ2V0RGV2aWNlKCkgY29uc3Q7CisgICAgU2tEZXZpY2UqIGdldFRvcERldmljZShi
b29sIHVwZGF0ZU1hdHJpeENsaXAgPSBmYWxzZSkgY29uc3Q7CisgICAgYm9vbCByZWFkUGl4ZWxz
KFNrQml0bWFwKiwgaW50IHgsIGludCB5LAorICAgICAgICBTa0NhbnZhczo6Q29uZmlnODg4OCA9
IFNrQ2FudmFzOjprTmF0aXZlX1ByZW11bF9Db25maWc4ODg4KTsKKyAgICB2b2lkIHdyaXRlUGl4
ZWxzKGNvbnN0IFNrQml0bWFwJiwgaW50IHgsIGludCB5LAorICAgICAgICBTa0NhbnZhczo6Q29u
ZmlnODg4OCA9IFNrQ2FudmFzOjprTmF0aXZlX1ByZW11bF9Db25maWc4ODg4KTsKKyAgICBib29s
IGlzRHJhd2luZ1RvTGF5ZXIoKSBjb25zdDsKKworICAgIGJvb2wgY2xpcFBhdGgoY29uc3QgU2tQ
YXRoJiwgU2tSZWdpb246Ok9wID0gU2tSZWdpb246OmtJbnRlcnNlY3RfT3AsIGJvb2wgPSBmYWxz
ZSk7CisgICAgYm9vbCBjbGlwUmVjdChjb25zdCBTa1JlY3QmLCBTa1JlZ2lvbjo6T3AgPSBTa1Jl
Z2lvbjo6a0ludGVyc2VjdF9PcCwgYm9vbCA9IGZhbHNlKTsKKyAgICBib29sIGdldENsaXBCb3Vu
ZHMoU2tSZWN0KikgY29uc3Q7CisKKyAgICB2b2lkIHNldE1hdHJpeChjb25zdCBTa01hdHJpeCYp
OworICAgIGNvbnN0IFNrTWF0cml4JiBnZXRUb3RhbE1hdHJpeCgpIGNvbnN0OworICAgIGJvb2wg
Y29uY2F0KGNvbnN0IFNrTWF0cml4Jik7CisgICAgYm9vbCByb3RhdGUoU2tTY2FsYXIgZGVncmVl
cyk7CisgICAgYm9vbCBzY2FsZShTa1NjYWxhciBzeCwgU2tTY2FsYXIgc3kpOworICAgIGJvb2wg
dHJhbnNsYXRlKFNrU2NhbGFyIGR4LCBTa1NjYWxhciBkeSk7CisKKyAgICB2b2lkIGRyYXdCaXRt
YXAoY29uc3QgU2tCaXRtYXAmLCBTa1NjYWxhciwgU2tTY2FsYXIsIGNvbnN0IFNrUGFpbnQqID0g
MCk7CisgICAgdm9pZCBkcmF3Qml0bWFwUmVjdChjb25zdCBTa0JpdG1hcCYsIGNvbnN0IFNrSVJl
Y3QqLCBjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50KiA9IDApOworICAgIHZvaWQgZHJhd092
YWwoY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZHJhd1BhdGgoY29u
c3QgU2tQYXRoJiwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZHJhd1BvaW50cyhTa0NhbnZh
czo6UG9pbnRNb2RlLCBzaXplX3QgY291bnQsIGNvbnN0IFNrUG9pbnQgcHRzW10sIGNvbnN0IFNr
UGFpbnQmKTsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQm
KTsKKyAgICB2b2lkIGRyYXdJUmVjdChjb25zdCBTa0lSZWN0JiwgY29uc3QgU2tQYWludCYpOwor
ICAgIHZvaWQgZHJhd1Bvc1RleHQoY29uc3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVMZW5ndGgs
IGNvbnN0IFNrUG9pbnQgcG9zW10sIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIGRyYXdQb3NU
ZXh0SChjb25zdCB2b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwgY29uc3QgU2tTY2FsYXIg
eHBvc1tdLCBTa1NjYWxhciBjb25zdFksCisgICAgICAgIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2
b2lkIGRyYXdUZXh0T25QYXRoKGNvbnN0IHZvaWQqIHRleHQsIHNpemVfdCBieXRlTGVuZ3RoLCBj
b25zdCBTa1BhdGgmLAorICAgICAgICBjb25zdCBTa01hdHJpeCosIGNvbnN0IFNrUGFpbnQmKTsK
KwogI2lmIGRlZmluZWQoU0tfU1VQUE9SVF9ISU5USU5HX1NDQUxFX0ZBQ1RPUikKICAgICB2b2lk
IHNldEhpbnRpbmdTY2FsZUZhY3RvcihTa1NjYWxhciBmYWN0b3IpIHsgbV9oaW50aW5nU2NhbGVG
YWN0b3IgPSBmYWN0b3I7IH0KICAgICBTa1NjYWxhciBoaW50aW5nU2NhbGVGYWN0b3IoKSBjb25z
dCB7IHJldHVybiBtX2hpbnRpbmdTY2FsZUZhY3RvcjsgfQpAQCAtMjQ4LDUgKzI3NiwxNDMgQEAg
cHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5lIFNrRGV2aWNlKiBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpnZXREZXZpY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhbnZhcy0+Z2V0RGV2aWNl
KCk7Cit9CisKK2lubGluZSBTa0RldmljZSogUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0VG9wRGV2
aWNlKGJvb2wgdXBkYXRlTWF0cml4Q2xpcCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYW52YXMt
PmdldFRvcERldmljZSh1cGRhdGVNYXRyaXhDbGlwKTsKK30KKworaW5saW5lIGJvb2wgUGxhdGZv
cm1Db250ZXh0U2tpYTo6cmVhZFBpeGVscyhTa0JpdG1hcCogYml0bWFwLCBpbnQgeCwgaW50IHks
CisgICAgU2tDYW52YXM6OkNvbmZpZzg4ODggY29uZmlnODg4OCkKK3sKKyAgICByZXR1cm4gbV9j
YW52YXMtPnJlYWRQaXhlbHMoYml0bWFwLCB4LCB5LCBjb25maWc4ODg4KTsKK30KKworaW5saW5l
IHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6d3JpdGVQaXhlbHMoY29uc3QgU2tCaXRtYXAmIGJp
dG1hcCwgaW50IHgsIGludCB5LAorICAgIFNrQ2FudmFzOjpDb25maWc4ODg4IGNvbmZpZzg4ODgp
Cit7CisgICAgbV9jYW52YXMtPndyaXRlUGl4ZWxzKGJpdG1hcCwgeCwgeSwgY29uZmlnODg4OCk7
Cit9CisKK2lubGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmlzRHJhd2luZ1RvTGF5ZXIo
KSBjb25zdAoreworICAgIHJldHVybiBtX2NhbnZhcy0+aXNEcmF3aW5nVG9MYXllcigpOworfQor
CitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlwUGF0aChjb25zdCBTa1BhdGgm
IHBhdGgsIFNrUmVnaW9uOjpPcCBvcCwgYm9vbCBkb0FudGlBbGlhcykKK3sKKyAgICByZXR1cm4g
bV9jYW52YXMtPmNsaXBQYXRoKHBhdGgsIG9wLCBkb0FudGlBbGlhcyk7Cit9CisKK2lubGluZSBi
b29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBSZWN0KGNvbnN0IFNrUmVjdCYgcmVjdCwgU2tS
ZWdpb246Ok9wIG9wLCBib29sIGRvQW50aUFsaWFzKQoreworICAgIHJldHVybiBtX2NhbnZhcy0+
Y2xpcFJlY3QocmVjdCwgb3AsIGRvQW50aUFsaWFzKTsKK30KKworaW5saW5lIGJvb2wgUGxhdGZv
cm1Db250ZXh0U2tpYTo6Z2V0Q2xpcEJvdW5kcyhTa1JlY3QqIGJvdW5kcykgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jYW52YXMtPmdldENsaXBCb3VuZHMoYm91bmRzKTsKK30KKworaW5saW5lIHZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0TWF0cml4KGNvbnN0IFNrTWF0cml4JiBtYXRyaXgp
Cit7CisgICAgbV9jYW52YXMtPnNldE1hdHJpeChtYXRyaXgpOworfQorCitpbmxpbmUgY29uc3Qg
U2tNYXRyaXgmIFBsYXRmb3JtQ29udGV4dFNraWE6OmdldFRvdGFsTWF0cml4KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9jYW52YXMtPmdldFRvdGFsTWF0cml4KCk7Cit9CisKK2lubGluZSBib29s
IFBsYXRmb3JtQ29udGV4dFNraWE6OmNvbmNhdChjb25zdCBTa01hdHJpeCYgbWF0cml4KQorewor
ICAgIHJldHVybiBtX2NhbnZhcy0+Y29uY2F0KG1hdHJpeCk7Cit9CisKK2lubGluZSBib29sIFBs
YXRmb3JtQ29udGV4dFNraWE6OnJvdGF0ZShTa1NjYWxhciBkZWdyZWVzKQoreworICAgIHJldHVy
biBtX2NhbnZhcy0+cm90YXRlKGRlZ3JlZXMpOworfQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpzY2FsZShTa1NjYWxhciBzeCwgU2tTY2FsYXIgc3kpCit7CisgICAgcmV0dXJu
IG1fY2FudmFzLT5zY2FsZShzeCwgc3kpOworfQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjp0cmFuc2xhdGUoU2tTY2FsYXIgZHgsIFNrU2NhbGFyIGR5KQoreworICAgIHJldHVy
biBtX2NhbnZhcy0+dHJhbnNsYXRlKGR4LCBkeSk7Cit9CisKK2lubGluZSB2b2lkIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmRyYXdCaXRtYXAoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgU2tTY2FsYXIg
bGVmdCwgU2tTY2FsYXIgdG9wLAorICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KQoreworICAgIG1f
Y2FudmFzLT5kcmF3Qml0bWFwKGJpdG1hcCwgbGVmdCwgdG9wLCBwYWludCk7Cit9CisKK2lubGlu
ZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdCaXRtYXBSZWN0KGNvbnN0IFNrQml0bWFw
JiBiaXRtYXAsIGNvbnN0IFNrSVJlY3QqIGlzcmMsCisgICAgY29uc3QgU2tSZWN0JiBkc3QsIGNv
bnN0IFNrUGFpbnQqIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3Qml0bWFwUmVjdChiaXRt
YXAsIGlzcmMsIGRzdCwgcGFpbnQpOworfQorCitpbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjpkcmF3T3ZhbChjb25zdCBTa1JlY3QmIG92YWwsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQor
eworICAgIG1fY2FudmFzLT5kcmF3T3ZhbChvdmFsLCBwYWludCk7CisKKyAgICBpZiAobV90cmFj
a09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd0JvdW5kZWQodGhp
cywgb3ZhbCwgcGFpbnQpOworfQorCitpbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpk
cmF3UGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAg
IG1fY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisKKyAgICBpZiAobV90cmFja09wYXF1
ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1BhdGgodGhpcywgcGF0aCwg
cGFpbnQpOworfQorCitpbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UG9pbnRz
KFNrQ2FudmFzOjpQb2ludE1vZGUgbW9kZSwgc2l6ZV90IGNvdW50LAorICAgIGNvbnN0IFNrUG9p
bnQgcHRzW10sIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3UG9p
bnRzKG1vZGUsIGNvdW50LCBwdHMsIHBhaW50KTsKKworICAgIGlmIChtX3RyYWNrT3BhcXVlUmVn
aW9uKQorICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3UG9pbnRzKHRoaXMsIG1vZGUsIGNv
dW50LCBwdHMsIHBhaW50KTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6
ZHJhd1JlY3QoY29uc3QgU2tSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAg
ICBtX2NhbnZhcy0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOworICAgIGRpZERyYXdSZWN0KHJlY3Qs
IHBhaW50KTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd0lSZWN0
KGNvbnN0IFNrSVJlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIG1fY2Fu
dmFzLT5kcmF3SVJlY3QocmVjdCwgcGFpbnQpOworfQorCitpbmxpbmUgdm9pZCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpkcmF3UG9zVGV4dChjb25zdCB2b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0
aCwKKyAgICBjb25zdCBTa1BvaW50IHBvc1tdLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAg
ICBtX2NhbnZhcy0+ZHJhd1Bvc1RleHQodGV4dCwgYnl0ZUxlbmd0aCwgcG9zLCBwYWludCk7Cit9
CisKK2lubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdQb3NUZXh0SChjb25zdCB2
b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwKKyAgICBjb25zdCBTa1NjYWxhciB4cG9zW10s
IFNrU2NhbGFyIGNvbnN0WSwgY29uc3QgU2tQYWludCYgcGFpbnQpCit7CisgICAgbV9jYW52YXMt
PmRyYXdQb3NUZXh0SCh0ZXh0LCBieXRlTGVuZ3RoLCB4cG9zLCBjb25zdFksIHBhaW50KTsKK30K
KworaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1RleHRPblBhdGgoY29uc3Qg
dm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVMZW5ndGgsCisgICAgY29uc3QgU2tQYXRoJiBwYXRoLCBj
b25zdCBTa01hdHJpeCogbWF0cml4LCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBtX2Nh
bnZhcy0+ZHJhd1RleHRPblBhdGgodGV4dCwgYnl0ZUxlbmd0aCwgcGF0aCwgbWF0cml4LCBwYWlu
dCk7Cit9CisKIH0KICNlbmRpZiAvLyBQbGF0Zm9ybUNvbnRleHRTa2lhX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKaW5k
ZXggYTZmMzdjZmYwNzRlMmJjMjMwMzliNTM5MzkzNjBjYTdmYjAxYjNkOC4uM2RkYzNjYTY1Yjc3
ODg4NjU1NjAzNWJhOTExOWYxOTBhNTRkNzcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKQEAgLTk5LDcgKzk5LDcg
QEAgYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERyYXdpbmdXaXRob3V0U2hhZG93KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCkKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBza2lhRHJhd1RleHQo
U2tDYW52YXMqIGNhbnZhcywKK3N0YXRpYyB2b2lkIHNraWFEcmF3VGV4dChQbGF0Zm9ybUNvbnRl
eHRTa2lhKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQm
IHBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIFNrUGFpbnQqIHBhaW50LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQqIGdseXBocywKQEAgLTEyNCw3ICsxMjQsNyBA
QCBzdGF0aWMgdm9pZCBza2lhRHJhd1RleHQoU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAg
ICAgICAgICAgICAgeSArIC1Ta0ludFRvU2NhbGFyKG9mZnNldHNbaV0uZHYpKTsKICAgICAgICAg
ICAgIHggKz0gU2tJbnRUb1NjYWxhcihhZHZhbmNlc1tpXSk7CiAgICAgICAgIH0KLSAgICAgICAg
Y2FudmFzLT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyAqIHNpemVvZih1aW50MTZfdCks
IHBvcywgKnBhaW50KTsKKyAgICAgICAgY29udGV4dC0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1H
bHlwaHMgKiBzaXplb2YodWludDE2X3QpLCBwb3MsICpwYWludCk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgU2tBdXRvU1RBcnJheTxrTG9jYWxHbHlwaE1heCAqIDIsIFNrU2NhbGFyPiBzdG9yYWdl
KG51bUdseXBocyk7CiAgICAgICAgIFNrU2NhbGFyKiB4cG9zID0gc3RvcmFnZS5nZXQoKTsKQEAg
LTEzMiw3ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCBza2lhRHJhd1RleHQoU2tDYW52YXMqIGNhbnZh
cywKICAgICAgICAgICAgIHhwb3NbaV0gPSB4OwogICAgICAgICAgICAgeCArPSBTa0ludFRvU2Nh
bGFyKGFkdmFuY2VzW2ldKTsKICAgICAgICAgfQotICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0
SChnbHlwaHMsIG51bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksCisgICAgICAgIGNvbnRleHQt
PmRyYXdQb3NUZXh0SChnbHlwaHMsIG51bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhwb3MsIHksICpwYWludCk7CiAgICAgfQogfQpAQCAt
MjE4LDEwICsyMTgsOSBAQCBzdGF0aWMgdm9pZCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgSEZPTlQgaGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNrUG9pbnQqIG9yaWdpbikKIHsKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNv
bnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBTa0NhbnZhcyogY2FudmFz
ID0gcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKTsKICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0
ZXh0TW9kZSA9IHBsYXRmb3JtQ29udGV4dC0+Z2V0VGV4dERyYXdpbmdNb2RlKCk7CiAgICAgLy8g
RW5zdXJlIGZvbnQgbG9hZCBmb3IgcHJpbnRpbmcsIGJlY2F1c2UgUERGIGRldmljZSBuZWVkcyBp
dC4KLSAgICBpZiAoY2FudmFzLT5nZXRUb3BEZXZpY2UoKS0+Z2V0RGV2aWNlQ2FwYWJpbGl0aWVz
KCkgJiBTa0RldmljZTo6a1ZlY3Rvcl9DYXBhYmlsaXR5KQorICAgIGlmIChwbGF0Zm9ybUNvbnRl
eHQtPmdldFRvcERldmljZSgpLT5nZXREZXZpY2VDYXBhYmlsaXRpZXMoKSAmIFNrRGV2aWNlOjpr
VmVjdG9yX0NhcGFiaWxpdHkpCiAgICAgICAgIFBsYXRmb3JtU3VwcG9ydDo6ZW5zdXJlRm9udExv
YWRlZChoZm9udCk7CiAKICAgICAvLyBGaWxsaW5nIChpZiBuZWNlc3NhcnkpLiBUaGlzIGlzIHRo
ZSBjb21tb24gY2FzZS4KQEAgLTIzMyw3ICsyMzIsNyBAQCBzdGF0aWMgdm9pZCBwYWludFNraWFU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSEZPTlQgaGZvbnQsCiAgICAgYm9vbCBkaWRG
aWxsID0gZmFsc2U7CiAKICAgICBpZiAoKHRleHRNb2RlICYgVGV4dE1vZGVGaWxsKSAmJiAoU2tD
b2xvckdldEEocGFpbnQuZ2V0Q29sb3IoKSkgfHwgcGFpbnQuZ2V0TG9vcGVyKCkpKSB7Ci0gICAg
ICAgIHNraWFEcmF3VGV4dChjYW52YXMsICpvcmlnaW4sICZwYWludCwgJmdseXBoc1swXSwgJmFk
dmFuY2VzWzBdLCAmb2Zmc2V0c1swXSwgbnVtR2x5cGhzKTsKKyAgICAgICAgc2tpYURyYXdUZXh0
KHBsYXRmb3JtQ29udGV4dCwgKm9yaWdpbiwgJnBhaW50LCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNb
MF0sICZvZmZzZXRzWzBdLCBudW1HbHlwaHMpOwogICAgICAgICBkaWRGaWxsID0gdHJ1ZTsKICAg
ICB9CiAKQEAgLTI2MCw3ICsyNTksNyBAQCBzdGF0aWMgdm9pZCBwYWludFNraWFUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgSEZPTlQgaGZvbnQsCiAgICAgICAgICAgICBwYWludC5zZXRM
b29wZXIoMCk7CiAgICAgICAgIH0KIAotICAgICAgICBza2lhRHJhd1RleHQoY2FudmFzLCAqb3Jp
Z2luLCAmcGFpbnQsICZnbHlwaHNbMF0sICZhZHZhbmNlc1swXSwgJm9mZnNldHNbMF0sIG51bUds
eXBocyk7CisgICAgICAgIHNraWFEcmF3VGV4dChwbGF0Zm9ybUNvbnRleHQsICpvcmlnaW4sICZw
YWludCwgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCAmb2Zmc2V0c1swXSwgbnVtR2x5cGhzKTsK
ICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvU2tpYVV0aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvU2tpYVV0aWxzLmNwcAppbmRleCAxZTJjOGRhYjhhNjU1ODgzMGE5MDdjODYxMDE5NDM3MDRk
Zjk2YmRhLi5jODQxOTk0M2VjNTk5NDBkY2I4YTUyZTVlNDQ5NjI2MmMyMDhmZGE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3Bw
CkBAIC0xMDYsOSArMTA2LDkgQEAgQ29sb3IgU2tQTUNvbG9yVG9XZWJDb3JlQ29sb3IoU2tQTUNv
bG9yIHBtKQogICAgIHJldHVybiBTa1BNQ29sb3JUb0NvbG9yKHBtKTsKIH0KIAotdm9pZCBDbGlw
UmVjdFRvQ2FudmFzKGNvbnN0IFNrQ2FudmFzJiBjYW52YXMsIGNvbnN0IFNrUmVjdCYgc3JjUmVj
dCwgU2tSZWN0KiBkZXN0UmVjdCkKK3ZvaWQgQ2xpcFJlY3RUb0NhbnZhcyhjb25zdCBQbGF0Zm9y
bUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1JlY3QmIHNyY1JlY3QsIFNrUmVjdCogZGVz
dFJlY3QpCiB7Ci0gICAgaWYgKCFjYW52YXMuZ2V0Q2xpcEJvdW5kcyhkZXN0UmVjdCkgfHwgIWRl
c3RSZWN0LT5pbnRlcnNlY3Qoc3JjUmVjdCkpCisgICAgaWYgKCFjb250ZXh0LT5nZXRDbGlwQm91
bmRzKGRlc3RSZWN0KSB8fCAhZGVzdFJlY3QtPmludGVyc2VjdChzcmNSZWN0KSkKICAgICAgICAg
ZGVzdFJlY3QtPnNldEVtcHR5KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5oCmluZGV4IDY4MWRjZDU1ZTc5N2I2ZDVhOWUwNDk3
YmRlMDI0MDA0ODU4MjFkODguLjM1OGY4NmQxMTY5OTVkMGUzMTQ0ZWU0MWY4MDhmMjA0NzI3MWRi
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tp
YVV0aWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lh
VXRpbHMuaApAQCAtNjcsNyArNjcsNyBAQCBpbmxpbmUgU2tTY2FsYXIgV2ViQ29yZURvdWJsZVRv
U2tTY2FsYXIoZG91YmxlIGQpCiAvLyBjbGlwLCBkb2luZyB0aGUgbmVjZXNzYXJ5IGNvb3JkaW5h
dGUgdHJhbnNmb3Jtcy4KIC8vCiAvLyBzcmNSZWN0IGFuZCBkZXN0UmVjdCBjYW4gYmUgdGhlIHNh
bWUuCi12b2lkIENsaXBSZWN0VG9DYW52YXMoY29uc3QgU2tDYW52YXMmLCBjb25zdCBTa1JlY3Qm
IHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpOwordm9pZCBDbGlwUmVjdFRvQ2FudmFzKGNvbnN0
IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBTa1JlY3QmIHNyY1JlY3QsIFNrUmVjdCogZGVz
dFJlY3QpOwogCiAvLyBEZXRlcm1pbmUgaWYgYSBnaXZlbiBXZWJLaXQgcG9pbnQgaXMgY29udGFp
bmVkIGluIGEgcGF0aAogYm9vbCBTa1BhdGhDb250YWluc1BvaW50KFNrUGF0aCosIGNvbnN0IEZs
b2F0UG9pbnQmLCBTa1BhdGg6OkZpbGxUeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwCmluZGV4IGFlMzA5MGQ4YzUwN2U5
NDA0NTlmZmVhNzQwYTMwYjcwMGJjYjcyZjEuLmUzYmNiNTNkYzA2NGZiYTBlMTA2NDlmODczNGRl
MWNmM2ZhYzg4YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJh
bnNwYXJlbmN5V2luVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
cmFuc3BhcmVuY3lXaW5UZXN0LmNwcApAQCAtNjYsNyArNjYsNyBAQCBzdGF0aWMgdm9pZCBkcmF3
TmF0aXZlUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAKIHN0YXRpYyBDb2xvciBnZXRQ
aXhlbEF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHgsIGludCB5KQogewotICAgIGNv
bnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGNvbnN0IFNrQml0
bWFwJiBiaXRtYXAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VG9wRGV2aWNlKCkt
PmFjY2Vzc0JpdG1hcChmYWxzZSk7CiAgICAgcmV0dXJuIENvbG9yKCpyZWludGVycHJldF9jYXN0
PGNvbnN0IFJHQkEzMio+KGJpdG1hcC5nZXRBZGRyMzIoeCwgeSkpKTsKIH0KIApAQCAtNzQsNyAr
NzQsNyBAQCBzdGF0aWMgQ29sb3IgZ2V0UGl4ZWxBdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGludCB4LCBpbnQgeSkKIC8vIFdpbmRvd3MgbWVzc2luZyBpdCB1cC4KIHN0YXRpYyB2b2lkIGNs
ZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewotICAg
IFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNl
KSk7CisgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSkp
OwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgYml0bWFwLmhlaWdodCgpOyB5KyspIHsKICAgICAg
ICAgdWludDMyX3QqIHJvdyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CiAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgYml0bWFwLndpZHRoKCk7IHgrKykKQEAgLTg1LDcgKzg1LDcgQEAgc3Rh
dGljIHZvaWQgY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQpCiAvLyBDbGVhcnMgdGhlIGFscGhhIGNoYW5uZWwgb24gdGhlIHNwZWNpZmllZCBwaXhlbC4K
IHN0YXRpYyB2b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYVBpeGVsKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgaW50IHgsIGludCB5KQogewotICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0
PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3BE
ZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKSk7CisgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNv
bnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VG9wRGV2
aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOwogICAgICpiaXRtYXAuZ2V0QWRkcjMyKHgsIHkp
ICY9IDB4MDBGRkZGRkY7CiB9CiAKQEAgLTYxNiw3ICs2MTYsNyBAQCBURVNUKFRyYW5zcGFyZW5j
eVdpbiwgU2NhbGUpCiAgICAgICAgIC8vIHRoZSBoZWxwZXIgZ29lcyBvdXQgb2Ygc2NvcGUuIFdl
IGRvbid0IHdhbnQgdG8gY2FsbAogICAgICAgICAvLyBjbGVhclRvcExheWVyQWxwaGFDaGFubmVs
IGJlY2F1c2UgdGhhdCB3aWxsIGFjdHVhbGx5IGNsZWFyIHRoZSB3aG9sZQogICAgICAgICAvLyBj
YW52YXMgKHNpbmNlIHdlIGhhdmUgbm8gZXh0cmEgbGF5ZXIhKS4KLSAgICAgICAgU2tCaXRtYXAm
IGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2Up
KTsKKyAgICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihoZWxw
ZXIuY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0Jp
dG1hcChmYWxzZSkpOwogICAgICAgICAqYml0bWFwLmdldEFkZHIzMigyLCAyKSAmPSAweDAwRkZG
RkZGOwogICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175243</attachid>
            <date>2012-11-20 10:31:20 -0800</date>
            <delta_ts>2012-11-20 13:52:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102694-20121120132908.patch</filename>
            <type>text/plain</type>
            <size>67833</size>
            <attacher name="Florin Malita">fmalita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJjZDZlODk3MDI5ZjQ3
NTc1NTc2ZTI4ZGJkYmEzYTA5NjE3MDYxYS4uMTQxNjBhZjZjYjM1Mjk3MWU4MWYwZDc3YzA5MmQ2
N2FhMzRmNmQxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNiBAQAorMjAxMi0xMS0yMCAgRmxv
cmluIE1hbGl0YSAgPGZtYWxpdGFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtTa2lhXSBFbmNh
cHN1bGF0ZSBhY2Nlc3MgdG8gUGxhdGZvcm1Db250ZXh0U2tpYSdzIFNrQ2FudmFzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2OTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgU2tDYW52YXMtZXF1
aXZhbGVudCBtZXRob2RzIHRvIFBsYXRmb3JtQ29udGV4dFNraWEsIGFuZCByZWZhY3RvciBkaXJl
Y3QgY2FudmFzIGNhbGwKKyAgICAgICAgc2l0ZXMgdG8gdXNlIHRoZXNlIHdyYXBwZXJzIGluc3Rl
YWQuIFRoaXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNhbnZhcygpIHVzZXJzIGZyb20gOTArCisg
ICAgICAgIHRvIDIyIChtb3N0bHkgdGhlbWUvdWkgY29kZSkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzOiByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1UaGVtZUNocm9taXVtTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1U
aGVtZUNocm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyYW5zcGFyZW5jeVdpbjo6Y29tcHV0ZUxheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZU9wYXF1ZUNvbXBvc2l0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3NpdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUJsZW5kU2tpYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U2tpYSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29sb3JNYXRyaXhTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTa2lhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb21wb25lbnRUcmFuc2ZlclNraWEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNr
aWEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUxpZ2h0aW5n
U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U2tp
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZvbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RD
bGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpkcmF3T3V0ZXJQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVs
dGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmRyYXdSZXNhbXBsZWRCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9u
OTByb3RhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpwYWludFNrQml0bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
U2tpYTo6YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tp
YTo6Y291bGRVc2VMQ0RSZW5kZXJlZFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tp
YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXREZXZpY2UpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
OjpnZXRUb3BEZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp3cml0
ZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjppc0RyYXdp
bmdUb0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmdldENsaXBCb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0TWF0cml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmdldFRvdGFsTWF0cml4KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNvbmNhdCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0U2tpYTo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNr
aWE6OmRyYXdCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
ZHJhd0JpdG1hcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
ZHJhd092YWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1Bh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1BvaW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3SVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1Bvc1RleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1Bvc1RleHRIKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdUZXh0T25QYXRoKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNr
aWFEcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFNraWFUZXh0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwUmVjdFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Nr
aWFVdGlscy5oOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTEtMjAgIEtlaXNoaSBIYXR0
b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2VlayBwaWNrZXIgd2lkdGggaXMg
dG9vIHNtYWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDk2ZmQxZWE5NzNhN2Y3Yzk5
NjQ4Mzg1MmVlMzM1YWJjNzcxNjQ3NmQuLjAzMTc4NjIyNWI5MWUwZGQ2ODAxNDRmZTZkNzNkMDJh
YmI4ZjIwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIw
MTItMTEtMjAgIEZsb3JpbiBNYWxpdGEgIDxmbWFsaXRhQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBbU2tpYV0gRW5jYXBzdWxhdGUgYWNjZXNzIHRvIFBsYXRmb3JtQ29udGV4dFNraWEncyBTa0Nh
bnZhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAy
Njk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNl
IFBsYXRmb3JtQ29udGV4dFNraWEncyB3cmFwcGVyIG1ldGhvZHMgaW5zdGVhZCBvZiBhY2Nlc3Np
bmcgdGhlIGNhbnZhcyBkaXJlY3RseS4KKworICAgICAgICAqIHRlc3RzL1RyYW5zcGFyZW5jeVdp
blRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGl4ZWxBdCk6CisgICAgICAgIChXZWJD
b3JlOjpjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFy
VG9wTGF5ZXJBbHBoYVBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDEyLTEx
LTE5ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQuIEZpeCBDaHJvbWl1bSBXaW4gY29tcGlsYXRpb24gYWZ0ZXIgcjEzNTE5Ni4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhlbWVD
aHJvbWl1bUxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRm
b3JtVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCBiZTRmODUwYTg1ZTI3NmE1OWIwYjkwMjM1
YzAxOTBkMGFkNTkzZDA5Li43MGNjNjRiYTk2ZWUyNDQ1NmZiMjE1ZWE0MmNmZTVhMjdlODM4MGY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVRo
ZW1lQ2hyb21pdW1MaW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vUGxhdGZvcm1UaGVtZUNocm9taXVtTGludXguY3BwCkBAIC05OSw3ICs5OSw3IEBAIFNrQ29s
b3IgUGxhdGZvcm1UaGVtZUNocm9taXVtTGludXg6Om91dGxpbmVDb2xvcihjb25zdCBTa1NjYWxh
ciBoc3YxWzNdLCBjb25zdCBTCiAKIHZvaWQgUGxhdGZvcm1UaGVtZUNocm9taXVtTGludXg6OnBh
aW50QXJyb3dCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgcmVjdCwg
QXJyb3dEaXJlY3Rpb24gZGlyZWN0aW9uLCBDb250cm9sU3RhdGVzIHN0YXRlcykKIHsKLSAgICBT
a0NhbnZhcyogY29uc3QgY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsK
KyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBnYy0+cGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgaW50IHdpZHRoTWlkZGxlLCBsZW5ndGhNaWRkbGU7CiAgICAgU2tQYWlu
dCBwYWludDsKICAgICBpZiAoZGlyZWN0aW9uID09IE5vcnRoIHx8IGRpcmVjdGlvbiA9PSBTb3V0
aCkgewpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgUGxhdGZvcm1UaGVtZUNocm9taXVtTGludXg6
OnBhaW50QXJyb3dCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50CiAgICAgc2ty
ZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3QueCgpICsgcmVjdC53aWR0aCgpLCByZWN0
LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIC8vIFBhaW50IHRoZSBiYWNrZ3JvdW5kICh0aGUg
YXJlYSB2aXNpYmxlIGJlaGluZCB0aGUgcm91bmRlZCBjb3JuZXJzKS4KICAgICBwYWludC5zZXRD
b2xvcihiYWNrZ3JvdW5kQ29sb3IpOwotICAgIGNhbnZhcy0+ZHJhd0lSZWN0KHNrcmVjdCwgcGFp
bnQpOworICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd0lSZWN0KHNrcmVjdCwgcGFpbnQpOwogCiAg
ICAgLy8gUGFpbnQgdGhlIGJ1dHRvbidzIG91dGxpbmUgYW5kIGZpbGwgdGhlIG1pZGRsZQogICAg
IFNrUGF0aCBvdXRsaW5lOwpAQCAtMTcxLDE0ICsxNzEsMTQgQEAgdm9pZCBQbGF0Zm9ybVRoZW1l
Q2hyb21pdW1MaW51eDo6cGFpbnRBcnJvd0J1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBjb25z
dCBJbnQKIAogICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKICAgICBw
YWludC5zZXRDb2xvcihidXR0b25Db2xvcik7Ci0gICAgY2FudmFzLT5kcmF3UGF0aChvdXRsaW5l
LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3UGF0aChvdXRsaW5lLCBwYWludCk7
CiAKICAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CiAgICAgcGFpbnQuc2V0U3R5bGUoU2tQ
YWludDo6a1N0cm9rZV9TdHlsZSk7CiAgICAgU2tTY2FsYXIgdGh1bWJIU1ZbM107CiAgICAgU2tD
b2xvclRvSFNWKHRodW1iSW5hY3RpdmVDb2xvcigpLCB0aHVtYkhTVik7CiAgICAgcGFpbnQuc2V0
Q29sb3Iob3V0bGluZUNvbG9yKHRyYWNrSFNWLCB0aHVtYkhTVikpOwotICAgIGNhbnZhcy0+ZHJh
d1BhdGgob3V0bGluZSwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1BhdGgob3V0
bGluZSwgcGFpbnQpOwogCiAgICAgLy8gSWYgdGhlIGJ1dHRvbiBpcyBkaXNhYmxlZCBvciByZWFk
LW9ubHksIHRoZSBhcnJvdyBpcyBkcmF3biB3aXRoIHRoZSBvdXRsaW5lIGNvbG9yLgogICAgIGlm
IChzdGF0ZXMgJiBFbmFibGVkU3RhdGUgJiYgIShzdGF0ZXMgJiBSZWFkT25seVN0YXRlKSkKQEAg
LTIxNCw3ICsyMTQsNyBAQCB2b2lkIFBsYXRmb3JtVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludEFy
cm93QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludAogICAgIH0KICAgICBwYXRo
LmNsb3NlKCk7CiAKLSAgICBjYW52YXMtPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0
Zm9ybUNvbnRleHQtPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udENocm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKaW5kZXggYWZkMDhkYjc4MDZmOWJjZDcw
YjBjZjI1ZTJjNGJlN2JhYzEyNGIzOC4uMmVmYzJhNGRmNTNhYzM3YWMwYTA2Y2QzMzI5NDM1MTYx
NjNhNzU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udENocm9taXVtV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAg
dm9pZCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0aWFsaXplRm9yR0RJKCkKICAg
ICAgICAgLy8gdGhpcyBtb2RlIGFuZCBpdCB3aWxsIGFwcGx5IHRoZSBjb2xvci4KICAgICAgICAg
bV90cmFuc3BhcmVuY3kuc2V0VGV4dENvbXBvc2l0ZUNvbG9yKGNvbG9yKTsKICAgICAgICAgY29s
b3IgPSBTa0NvbG9yU2V0UkdCKDAsIDAsIDApOwotICAgIH0gZWxzZSBpZiAobV9jcmVhdGVkVHJh
bnNwYXJlbmN5TGF5ZXIgfHwgbV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLT5pc0RyYXdpbmdU
b0xheWVyKCkpIHsKKyAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyIHx8
IG1fcGxhdGZvcm1Db250ZXh0LT5pc0RyYXdpbmdUb0xheWVyKCkpIHsKICAgICAgICAgLy8gV2hl
biB3ZSdyZSBkcmF3aW5nIGEgd2ViIHBhZ2UsIHdlIGtub3cgdGhlIGJhY2tncm91bmQgaXMgb3Bh
cXVlLAogICAgICAgICAvLyBidXQgaWYgd2UncmUgZHJhd2luZyB0byBhIGxheWVyLCB3ZSBzdGls
bCBuZWVkIGV4dHJhIHdvcmsuCiAgICAgICAgIGxheWVyTW9kZSA9IFRyYW5zcGFyZW5jeVdpbjo6
T3BhcXVlQ29tcG9zaXRlTGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAppbmRleCAyOGIx
YjhlNjhjMjAxYTVmOTRiNjkyOTE5ZWJjMDU4MGZiYzI3YTNiLi5kZTU1YzFjZjM2ZTFlOWQ5MjVl
Mjg4YjdlYjBjYzc3MGIwMTdkNWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAKQEAgLTQ5
LDE0ICs0OSw5IEBAIG5hbWVzcGFjZSB7CiAvLyBpbnRvLiBCdWZmZXJzIGxhcmdlciB0aGFuIHRo
aXMgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB3ZSdyZSBkb25lIHdpdGggdGhlbS4KIGNvbnN0IGlu
dCBtYXhDYWNoZWRCdWZmZXJQaXhlbFNpemUgPSA2NTUzNjsKIAotaW5saW5lIFNrQ2FudmFzKiBj
YW52YXNGb3JDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBy
ZXR1cm4gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci19Ci0KIGlubGluZSBj
b25zdCBTa0JpdG1hcCYgYml0bWFwRm9yQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiB7Ci0gICAgcmV0dXJuIGNhbnZhc0ZvckNvbnRleHQoY29udGV4dCktPmdldFRvcERl
dmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIHJldHVybiBjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKIH0KIAogdm9p
ZCBjb21wb3NpdGVUb0NvcHkoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBzb3VyY2VMYXllcnMsCkBA
IC03Niw3ICs3MSw3IEBAIHZvaWQgY29tcG9zaXRlVG9Db3B5KGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgc291cmNlTGF5ZXJzLAogICAgICAgICBpbnQgeTsKICAgICB9OwogICAgIFZlY3RvcjxEZXZp
Y2VJbmZvPiBkZXZpY2VzOwotICAgIFNrQ2FudmFzKiBzb3VyY2VDYW52YXMgPSBjYW52YXNGb3JD
b250ZXh0KHNvdXJjZUxheWVycyk7CisgICAgU2tDYW52YXMqIHNvdXJjZUNhbnZhcyA9IHNvdXJj
ZUxheWVycy5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CiAgICAgU2tDYW52YXM6OkxheWVy
SXRlciBpdGVyKHNvdXJjZUNhbnZhcywgZmFsc2UpOwogICAgIHdoaWxlICghaXRlci5kb25lKCkp
IHsKICAgICAgICAgZGV2aWNlcy5hcHBlbmQoRGV2aWNlSW5mbyhpdGVyLmRldmljZSgpLCBpdGVy
LngoKSwgaXRlci55KCkpKTsKQEAgLTIxNCw3ICsyMDksNyBAQCB2b2lkIFRyYW5zcGFyZW5jeVdp
bjo6Y29tcHV0ZUxheWVyU2l6ZSgpCiAgICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IGNsaXBwaW5n
IGZvciBvdGhlciBtb2RlcwogICAgICAgICBJbnRSZWN0IGNsaXBwZWRTb3VyY2VSZWN0ID0gbV9z
b3VyY2VSZWN0OwogICAgICAgICBTa1JlY3QgY2xpcEJvdW5kczsKLSAgICAgICAgaWYgKG1fZGVz
dENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0Q2xpcEJvdW5kcygmY2xp
cEJvdW5kcykpIHsKKyAgICAgICAgaWYgKG1fZGVzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5nZXRDbGlwQm91bmRzKCZjbGlwQm91bmRzKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IGNs
aXBSZWN0KGNsaXBCb3VuZHMubGVmdCgpLCBjbGlwQm91bmRzLnRvcCgpLCBjbGlwQm91bmRzLndp
ZHRoKCksIGNsaXBCb3VuZHMuaGVpZ2h0KCkpOwogICAgICAgICAgICAgY2xpcHBlZFNvdXJjZVJl
Y3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKICAgICAgICAgfQpAQCAt
NDE2LDggKzQxMSw4IEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21wb3NpdGVPcGFxdWVDb21w
b3NpdGUoKQogICAgIGlmICghbV92YWxpZExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
a0NhbnZhcyogZGVzdENhbnZhcyA9IGNhbnZhc0ZvckNvbnRleHQoKm1fZGVzdENvbnRleHQpOwot
ICAgIGRlc3RDYW52YXMtPnNhdmUoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBkZXN0UGxh
dGZvcm1Db250ZXh0ID0gbV9kZXN0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgZGVz
dFBsYXRmb3JtQ29udGV4dC0+c2F2ZSgpOwogCiAgICAgU2tCaXRtYXAqIGJpdG1hcCA9IGNvbnN0
X2Nhc3Q8U2tCaXRtYXAqPigKICAgICAgICAgJmJpdG1hcEZvckNvbnRleHQoKm1fbGF5ZXJCdWZm
ZXItPmNvbnRleHQoKSkpOwpAQCAtNDUyLDcgKzQ0Nyw3IEBAIHZvaWQgVHJhbnNwYXJlbmN5V2lu
Ojpjb21wb3NpdGVPcGFxdWVDb21wb3NpdGUoKQogICAgICAgICAvLyBqdXN0IGRyYXcgdGhlIGlt
YWdlIGZyb20gaW5zaWRlIHRoZSBkZXN0aW5hdGlvbiBjb250ZXh0LgogICAgICAgICBTa01hdHJp
eCBpZGVudGl0eTsKICAgICAgICAgaWRlbnRpdHkucmVzZXQoKTsKLSAgICAgICAgZGVzdENhbnZh
cy0+c2V0TWF0cml4KGlkZW50aXR5KTsKKyAgICAgICAgZGVzdFBsYXRmb3JtQ29udGV4dC0+c2V0
TWF0cml4KGlkZW50aXR5KTsKIAogICAgICAgICBkZXN0UmVjdC5zZXQobV90cmFuc2Zvcm1lZFNv
dXJjZVJlY3QueCgpLCBtX3RyYW5zZm9ybWVkU291cmNlUmVjdC55KCksIG1fdHJhbnNmb3JtZWRT
b3VyY2VSZWN0Lm1heFgoKSwgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QubWF4WSgpKTsKICAgICB9
IGVsc2UKQEAgLTQ2NSw4ICs0NjAsOCBAQCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRl
T3BhcXVlQ29tcG9zaXRlKCkKICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBzcGVjaWZ5IHRo
ZSBzb3VyY2UgbGF5ZXIgc3Vic2V0LCBzaW5jZSB0aGUgYml0bWFwCiAgICAgLy8gbWF5IGhhdmUg
YmVlbiBjYWNoZWQgYW5kIGl0IGNvdWxkIGJlIGxhcmdlciB0aGFuIHdoYXQgd2UncmUgdXNpbmcu
CiAgICAgU2tJUmVjdCBzb3VyY2VSZWN0ID0geyAwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBt
X2xheWVyU2l6ZS5oZWlnaHQoKSB9OwotICAgIGRlc3RDYW52YXMtPmRyYXdCaXRtYXBSZWN0KCpi
aXRtYXAsICZzb3VyY2VSZWN0LCBkZXN0UmVjdCwgJnBhaW50KTsKLSAgICBkZXN0Q2FudmFzLT5y
ZXN0b3JlKCk7CisgICAgZGVzdFBsYXRmb3JtQ29udGV4dC0+ZHJhd0JpdG1hcFJlY3QoKmJpdG1h
cCwgJnNvdXJjZVJlY3QsIGRlc3RSZWN0LCAmcGFpbnQpOworICAgIGRlc3RQbGF0Zm9ybUNvbnRl
eHQtPnJlc3RvcmUoKTsKIH0KIAogdm9pZCBUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRD
b21wb3NpdGUoKQpAQCAtNDc0LDcgKzQ2OSw3IEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21w
b3NpdGVUZXh0Q29tcG9zaXRlKCkKICAgICBpZiAoIW1fdmFsaWRMYXllcikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fbGF5ZXJCdWZmZXItPmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNz
Qml0bWFwKHRydWUpOworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVmZmVy
LT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0
bWFwKHRydWUpOwogICAgIFNrQ29sb3IgdGV4dENvbG9yID0gbV90ZXh0Q29tcG9zaXRlQ29sb3Iu
cmdiKCk7CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xheWVyU2l6ZS5oZWlnaHQoKTsgeSsr
KSB7CiAgICAgICAgIHVpbnQzMl90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpAQCAt
NDg4LDIwICs0ODMsMjAgQEAgdm9pZCBUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21w
b3NpdGUoKQogICAgIH0KIAogICAgIC8vIE5vdyB0aGUgbGF5ZXIgaGFzIHRleHQgd2l0aCB0aGUg
cHJvcGVyIGNvbG9yIGFuZCBvcGFjaXR5LgotICAgIFNrQ2FudmFzKiBkZXN0Q2FudmFzID0gY2Fu
dmFzRm9yQ29udGV4dCgqbV9kZXN0Q29udGV4dCk7Ci0gICAgZGVzdENhbnZhcy0+c2F2ZSgpOwor
ICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIGRlc3RQbGF0Zm9ybUNvbnRleHQgPSBtX2Rlc3RDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBkZXN0UGxhdGZvcm1Db250ZXh0LT5zYXZlKCk7
CiAKICAgICAvLyBXZSB3YW50IHRvIHVzZSBVbnRyYW5zZm9ybWVkIHNwYWNlIChzZWUgYWJvdmUp
CiAgICAgU2tNYXRyaXggaWRlbnRpdHk7CiAgICAgaWRlbnRpdHkucmVzZXQoKTsKLSAgICBkZXN0
Q2FudmFzLT5zZXRNYXRyaXgoaWRlbnRpdHkpOworICAgIGRlc3RQbGF0Zm9ybUNvbnRleHQtPnNl
dE1hdHJpeChpZGVudGl0eSk7CiAgICAgU2tSZWN0IGRlc3RSZWN0ID0geyBtX3RyYW5zZm9ybWVk
U291cmNlUmVjdC54KCksIG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0LnkoKSwgbV90cmFuc2Zvcm1l
ZFNvdXJjZVJlY3QubWF4WCgpLCBtX3RyYW5zZm9ybWVkU291cmNlUmVjdC5tYXhZKCkgfTsKIAog
ICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHNwZWNpZnkgdGhlIHNvdXJjZSBsYXllciBzdWJz
ZXQsIHNpbmNlIHRoZSBiaXRtYXAKICAgICAvLyBtYXkgaGF2ZSBiZWVuIGNhY2hlZCBhbmQgaXQg
Y291bGQgYmUgbGFyZ2VyIHRoYW4gd2hhdCB3ZSdyZSB1c2luZy4KICAgICBTa0lSZWN0IHNvdXJj
ZVJlY3QgPSB7IDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhlaWdodCgp
IH07Ci0gICAgZGVzdENhbnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLCAmc291cmNlUmVjdCwg
ZGVzdFJlY3QsIDApOwotICAgIGRlc3RDYW52YXMtPnJlc3RvcmUoKTsKKyAgICBkZXN0UGxhdGZv
cm1Db250ZXh0LT5kcmF3Qml0bWFwUmVjdChiaXRtYXAsICZzb3VyY2VSZWN0LCBkZXN0UmVjdCwg
MCk7CisgICAgZGVzdFBsYXRmb3JtQ29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFRyYW5z
cGFyZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVlKCkKQEAgLTUwOSw4ICs1MDQsNyBAQCB2b2lkIFRy
YW5zcGFyZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVlKCkKICAgICBpZiAoIW1fdmFsaWRMYXllcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tC
aXRtYXAmPihtX2RyYXdDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Ci0gICAgICAgIGNhbnZh
cygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpKTsKKyAgICBTa0JpdG1hcCYg
Yml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KG1fZHJhd0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpKTsKICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IG1fbGF5ZXJTaXplLmhlaWdodCgpOyB5KyspIHsKICAgICAgICAgdWludDMy
X3QqIHJvdyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgbV9sYXllclNpemUud2lkdGgoKTsgeCsrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQmxlbmRTa2lhLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUJsZW5kU2tpYS5jcHAK
aW5kZXggODA4OWYzYjUwZDYwNTk2ZmZiODQ2OWE1NGI1YjNlNGY4OGYxYjg2Mi4uYjU5N2JhMmFl
NzNkMDYxMGMzZmIxYTUwYWJhMjBkNTdmMzQwMmVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQmxlbmRTa2lhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVCbGVuZFNraWEu
Y3BwCkBAIC04MCw4ICs4MCw3IEBAIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNraWEoKQog
ICAgIFNrQXV0b1RVbnJlZjxTa0ltYWdlRmlsdGVyPiBibGVuZChuZXcgU2tCbGVuZEltYWdlRmls
dGVyKG1vZGUsIGJhY2tncm91bmRTb3VyY2UpKTsKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBh
aW50LnNldEltYWdlRmlsdGVyKGJsZW5kKTsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgIGNhbnZh
cy0+ZHJhd0JpdG1hcChmb3JlZ3JvdW5kQml0bWFwLCAwLCAwLCAmcGFpbnQpOworICAgIHJlc3Vs
dEltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3Qml0bWFwKGZvcmVncm91
bmRCaXRtYXAsIDAsIDAsICZwYWludCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUNvbG9y
TWF0cml4U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NraWEvRkVDb2xvck1hdHJpeFNraWEuY3BwCmluZGV4IGFmZmJhZWFkMDQ4MDU5N2VmYTljMDNh
YmZlN2NiZTIzNTZmMmMwMTAuLjMyMjhjZDhhMzlkYzhlZjg0OGY4ZGQzMDY1NGY2ODUyY2JlNTQ4
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c2tpYS9GRUNvbG9yTWF0cml4U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29sb3JNYXRyaXhTa2lhLmNwcApAQCAtMTI3LDExICsx
MjcsMTAgQEAgYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U2tpYSgpCiAgICAgaWYg
KCFuYXRpdmVJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU2tDYW52YXMqIGNh
bnZhcyA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KTsKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBhaW50LnNldENvbG9yRmlsdGVyKGZpbHRlcik7
CiAgICAgcGFpbnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtTcmNfTW9kZSk7Ci0gICAg
Y2FudmFzLT5kcmF3Qml0bWFwKG5hdGl2ZUltYWdlLT5iaXRtYXAoKSwgMCwgMCwgJnBhaW50KTsK
KyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0JpdG1h
cChuYXRpdmVJbWFnZS0+Yml0bWFwKCksIDAsIDAsICZwYWludCk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvc2tpYS9GRUNvbXBvbmVudFRyYW5zZmVyU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb21wb25lbnRUcmFuc2ZlclNraWEuY3BwCmlu
ZGV4IDg2ZDVkN2U2NjJhZjU4Mjc5MjFhODQzNDE1MmExMGNiZTQ3MDgyZjIuLjZiNWZiNjk5MWFi
NjllYWY0NTVlMGQ4MjRmZDU4YjFlMzE4NDUzZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUNvbXBvbmVudFRyYW5zZmVyU2tpYS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZF
Q29tcG9uZW50VHJhbnNmZXJTa2lhLmNwcApAQCAtNDgsMTEgKzQ4LDEwIEBAIGJvb2wgRkVDb21w
b25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNraWEoKQogICAgIHVuc2lnbmVkIGNoYXIgclZh
bHVlc1syNTZdLCBnVmFsdWVzWzI1Nl0sIGJWYWx1ZXNbMjU2XSwgYVZhbHVlc1syNTZdOwogICAg
IGdldFZhbHVlcyhyVmFsdWVzLCBnVmFsdWVzLCBiVmFsdWVzLCBhVmFsdWVzKTsKIAotICAgIFNr
Q2FudmFzKiBjYW52YXMgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCk7CiAgICAgU2tQYWludCBwYWludDsKICAgICBwYWludC5zZXRDb2xvckZpbHRl
cihTa1RhYmxlQ29sb3JGaWx0ZXI6OkNyZWF0ZUFSR0IoYVZhbHVlcywgclZhbHVlcywgZ1ZhbHVl
cywgYlZhbHVlcykpLT51bnJlZigpOwogICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJt
b2RlOjprU3JjX01vZGUpOwotICAgIGNhbnZhcy0+ZHJhd0JpdG1hcChiaXRtYXAsIDAsIDAsICZw
YWludCk7CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmRy
YXdCaXRtYXAoYml0bWFwLCAwLCAwLCAmcGFpbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEv
RkVMaWdodGluZ1NraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9za2lhL0ZFTGlnaHRpbmdTa2lhLmNwcAppbmRleCAxNjcyMzRkM2IzNTlhMGVhNTBjNzMy
MjFiMjMzZGI2MDhlOGJhZDlmLi41ZjMzNzI3YjVhZjUzMzI5NDIyMTA4MjM0NWI0MTc4ZjAyZTVh
YjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L3NraWEvRkVMaWdodGluZ1NraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUxpZ2h0aW5nU2tpYS5jcHAKQEAgLTEwMyw3ICsxMDMsNyBA
QCBib29sIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTa2lhKCkKIAogICAgIFNrUGFpbnQgcGFp
bnQ7CiAgICAgcGFpbnQuc2V0SW1hZ2VGaWx0ZXIoY3JlYXRlSW1hZ2VGaWx0ZXIoMCkpLT51bnJl
ZigpOwotICAgIGRzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd0Jp
dG1hcChuYXRpdmVJbWFnZS0+Yml0bWFwKCksIGRyYXdpbmdSZWdpb24ubG9jYXRpb24oKS54KCks
IGRyYXdpbmdSZWdpb24ubG9jYXRpb24oKS55KCksICZwYWludCk7CisgICAgZHN0Q29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmRyYXdCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1hcCgpLCBkcmF3
aW5nUmVnaW9uLmxvY2F0aW9uKCkueCgpLCBkcmF3aW5nUmVnaW9uLmxvY2F0aW9uKCkueSgpLCAm
cGFpbnQpOwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAppbmRleCA5
N2FkZDYyMjVhMjYzZjNhODI4ZGJiOTkyNGYyNjNmNzA4NjljMjZkLi41Yzc5MDA0ODhkMDJiYmNi
NDE3NzY1NzgwYWQ0ZTY5M2I2N2U3ZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKQEAgLTk4LDcg
Kzk4LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250LAogICAgICAgICB5ICs9IFNrRmxvYXRUb1NjYWxhcihhZHZb
aV0uaGVpZ2h0KCkpOwogICAgIH0KIAotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpOworICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3Jt
Q29udGV4dCA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBUZXh0RHJhd2luZ01vZGVGbGFn
cyB0ZXh0TW9kZSA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VGV4dERyYXdpbmdNb2RlKCk7
CiAKICAgICAvLyBXZSBkcmF3IHRleHQgdXAgdG8gdHdvIHRpbWVzIChvbmNlIGZvciBmaWxsLCBv
bmNlIGZvciBzdHJva2UpLgpAQCAtMTE1LDEwICsxMTUsMTAgQEAgdm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAogICAg
ICAgICAgICAgICAgIHBhdGgucmVzZXQoKTsKICAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyh2
UG9zQmVnaW5baV0pOwogICAgICAgICAgICAgICAgIHBhdGgubGluZVRvKHZQb3NFbmRbaV0pOwot
ICAgICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0
aCwgMCwgcGFpbnQpOworICAgICAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1RleHRP
blBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0aCwgMCwgcGFpbnQpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1H
bHlwaHMgPDwgMSwgcG9zLCBwYWludCk7CisgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPmRy
YXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzIDw8IDEsIHBvcywgcGFpbnQpOwogICAgIH0KIAog
ICAgIGlmICgodGV4dE1vZGUgJiBUZXh0TW9kZVN0cm9rZSkKQEAgLTE0NCwxMCArMTQ0LDEwIEBA
IHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udCwKICAgICAgICAgICAgICAgICBwYXRoLnJlc2V0KCk7CiAgICAgICAgICAg
ICAgICAgcGF0aC5tb3ZlVG8odlBvc0JlZ2luW2ldKTsKICAgICAgICAgICAgICAgICBwYXRoLmxp
bmVUbyh2UG9zRW5kW2ldKTsKLSAgICAgICAgICAgICAgICBjYW52YXMtPmRyYXdUZXh0T25QYXRo
KGdseXBocyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsKKyAgICAgICAgICAgICAgICBwbGF0Zm9y
bUNvbnRleHQtPmRyYXdUZXh0T25QYXRoKGdseXBocyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYW52YXMtPmRyYXdQ
b3NUZXh0KGdseXBocywgbnVtR2x5cGhzIDw8IDEsIHBvcywgcGFpbnQpOworICAgICAgICAgICAg
cGxhdGZvcm1Db250ZXh0LT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyA8PCAxLCBwb3Ms
IHBhaW50KTsKICAgICB9CiB9CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAg
RmxvYXRQb2ludCBhZGp1c3RlZFBvaW50ID0gc2hhcGVyLmFkanVzdFN0YXJ0UG9pbnQocG9pbnQp
OwogICAgIGRyYXdHbHlwaEJ1ZmZlcihnYywgcnVuLCBnbHlwaEJ1ZmZlciwgYWRqdXN0ZWRQb2lu
dCk7CiAjZWxzZQotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpOworICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCA9IGdj
LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxl
cih0aGlzLCBydW4sIHBvaW50LngoKSwgcG9pbnQueSgpKTsKICAgICBpZiAocnVuLnJ0bCgpKQog
ICAgICAgICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7CkBAIC0yMDYsMTMgKzIwNiwxMyBAQCB2
b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBUZXh0
UnVuJiBydW4sCiAgICAgICAgIGlmIChmaWxsKSB7CiAgICAgICAgICAgICBjb250cm9sbGVyLmZv
bnRQbGF0Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+c2V0dXBQYWludCgmZmlsbFBhaW50KTsKICAg
ICAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0VGV4dFJlbmRlck1vZGUoJmZp
bGxQYWludCk7Ci0gICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGNvbnRyb2xsZXIuZ2x5
cGhzKCkgKyBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoIDw8IDEsIGNvbnRyb2xsZXIucG9zaXRpb25z
KCkgKyBmcm9tR2x5cGgsIGZpbGxQYWludCk7CisgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQt
PmRyYXdQb3NUZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkgKyBmcm9tR2x5cGgsIGdseXBoTGVuZ3Ro
IDw8IDEsIGNvbnRyb2xsZXIucG9zaXRpb25zKCkgKyBmcm9tR2x5cGgsIGZpbGxQYWludCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoc3Ryb2tlKSB7CiAgICAgICAgICAgICBjb250cm9sbGVy
LmZvbnRQbGF0Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+c2V0dXBQYWludCgmc3Ryb2tlUGFpbnQp
OwogICAgICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGp1c3RUZXh0UmVuZGVyTW9k
ZSgmc3Ryb2tlUGFpbnQpOwotICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChjb250cm9s
bGVyLmdseXBocygpICsgZnJvbUdseXBoLCBnbHlwaExlbmd0aCA8PCAxLCBjb250cm9sbGVyLnBv
c2l0aW9ucygpICsgZnJvbUdseXBoLCBzdHJva2VQYWludCk7CisgICAgICAgICAgICBwbGF0Zm9y
bUNvbnRleHQtPmRyYXdQb3NUZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkgKyBmcm9tR2x5cGgsIGds
eXBoTGVuZ3RoIDw8IDEsIGNvbnRyb2xsZXIucG9zaXRpb25zKCkgKyBmcm9tR2x5cGgsIHN0cm9r
ZVBhaW50KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcAppbmRleCBjODA5N2UzNDkxYWE3
NWI3Y2E1ZTYyZjM2NTY1ZTllZjJiMjI0ZjNhLi42NTVhNzRiYjg2MzdhZjUxNTU0NzVmMGI3NjI5
ZjNiNDg4MWY1ZDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ZvbnRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ZvbnRTa2lhLmNwcApAQCAtMTM1LDEwICsxMzUsMTAgQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAog
ICAgICAgICB5ICs9IFNrRmxvYXRUb1NjYWxhcihhZHZbaV0uaGVpZ2h0KCkpOwogICAgIH0KIAot
ICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwor
ICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCA9IGdjLT5wbGF0Zm9ybUNv
bnRleHQoKTsKICAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbCkgewotICAgICAgICBjYW52YXMtPnNhdmUoKTsKLSAgICAgICAgY2FudmFzLT5yb3Rh
dGUoLTkwKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5zYXZlKCk7CisgICAgICAgIHBsYXRm
b3JtQ29udGV4dC0+cm90YXRlKC05MCk7CiAgICAgICAgIFNrTWF0cml4IHJvdGF0b3I7CiAgICAg
ICAgIHJvdGF0b3IucmVzZXQoKTsKICAgICAgICAgcm90YXRvci5zZXRSb3RhdGUoOTApOwpAQCAt
MTU0LDcgKzE1NCw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdj
LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4
dCgpLT5hZGp1c3RUZXh0UmVuZGVyTW9kZSgmcGFpbnQpOwogICAgICAgICBwYWludC5zZXRUZXh0
RW5jb2RpbmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKIAotICAgICAgICBjYW52
YXMtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzICogc2l6ZW9mKHVpbnQxNl90KSwgcG9z
LCBwYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBu
dW1HbHlwaHMgKiBzaXplb2YodWludDE2X3QpLCBwb3MsIHBhaW50KTsKICAgICB9CiAKICAgICBp
ZiAoKHRleHRNb2RlICYgVGV4dE1vZGVTdHJva2UpCkBAIC0xNzMsMTAgKzE3MywxMCBAQCB2b2lk
IEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnQsCiAgICAgICAgICAgICBwYWludC5zZXRMb29wZXIoMCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzICogc2l6ZW9mKHVp
bnQxNl90KSwgcG9zLCBwYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1Rl
eHQoZ2x5cGhzLCBudW1HbHlwaHMgKiBzaXplb2YodWludDE2X3QpLCBwb3MsIHBhaW50KTsKICAg
ICB9CiAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwpCi0gICAgICAgIGNhbnZhcy0+cmVzdG9yZSgpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQt
PnJlc3RvcmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0
U2tpYS5jcHAKaW5kZXggZmM5NzE0NjcxZmVkZTg4NTVkNjBiOWFlZWQyMGZhMzlkZWU1YjNmZi4u
OTE1ZTc2MDI5YTBiMTBiZDQ5Y2Q4NTE2YzU0NDI5ZWZmNzRiZDcyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFNraWEuY3BwCkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFk
ZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCB0aGlja25lc3MK
ICAgICAgICAgci5pbnNldChTa0ludFRvU2NhbGFyKHRoaWNrbmVzcyArIDEpLCBTa0ludFRvU2Nh
bGFyKHRoaWNrbmVzcyArIDEpKTsKICAgICAgICAgcGF0aC5hZGRPdmFsKHIsIFNrUGF0aDo6a0ND
V19EaXJlY3Rpb24pOwogICAgIH0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGhBbnRp
QWxpYXNlZChwYXRoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgocGF0aCwgQW50
aUFsaWFzZWQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRv
dygpCkBAIC0zMTAsOCArMzEwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwYWludC5zZXRYZmVy
bW9kZU1vZGUoU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOwotICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5k
aWREcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIs
IHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQpAQCAtMzE5LDcgKzMxOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmNsaXBSZWN0KHJl
Y3QpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUmVjdChyZWN0KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTMyNyw3ICszMjYsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKCpwYXRoLnBsYXRmb3Jt
UGF0aCgpKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgoKnBhdGgucGxhdGZvcm1Q
YXRoKCksIEFudGlBbGlhc2VkKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0Ns
aXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM0Myw3ICszNDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+Y2xpcFJlY3QocmVjdCwgU2tSZWdpb246OmtEaWZmZXJlbmNlX09wKTsKKyAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2xpcFJlY3QocmVjdCwgQlcsIFNrUmVnaW9uOjprRGlmZmVyZW5jZV9PcCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHApCkBAIC0z
NTQsNyArMzUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYg
cCkKICAgICAvLyBXZSBtdXN0IG1ha2UgYSBjb3B5IG9mIHRoZSBwYXRoLCB0byBtYXJrIGl0IGFz
IGludmVyc2UtZmlsbGVkLgogICAgIFNrUGF0aCBwYXRoKHAuaXNOdWxsKCkgPyBTa1BhdGgoKSA6
ICpwLnBsYXRmb3JtUGF0aCgpKTsKICAgICBwYXRoLnRvZ2dsZUludmVyc2VGaWxsVHlwZSgpOwot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHBhdGgpOworICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aChwYXRoLCBBbnRpQWxpYXNlZCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoVG9DbGlwLCBXaW5kUnVs
ZSBjbGlwUnVsZSkKQEAgLTM3Miw3ICszNzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aFRvQ2xpcCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgICAg
IHN0b3JhZ2Uuc2V0RmlsbFR5cGUoZnR5cGUpOwogICAgICAgICBwYXRoID0gJnN0b3JhZ2U7CiAg
ICAgfQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKCpwYXRoKTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgoKnBhdGgsIEFudGlBbGlhc2VkKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGFmZmluZSkKQEAgLTM4MCw3ICszNzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+Y29uY2F0KGFmZmluZSk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmNvbmNhdChhZmZpbmUp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWZmaW5lKQpAQCAtMzg4LDcgKzM4Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LT5zZXRNYXRyaXgoYWZmaW5lKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0TWF0cml4KGFm
ZmluZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFBhdGhGcm9tQ29udmV4UG9pbnRzKFNrUGF0aCog
cGF0aCwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQpAQCAtNDI5
LDE0ICs0MjgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwYWludC5zZXRBbnRpQWxpYXMo
c2hvdWxkQW50aWFsaWFzKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQ
YXRoKHBhdGgsIHBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0
aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7
CiAKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBwYWludC5y
ZXNldCgpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5n
KCZwYWludCwgMCwgMCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJh
d1BhdGgocGF0aCwgcGFpbnQpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1Bh
dGgocGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BhdGgocGF0
aCwgcGFpbnQpOwogICAgIH0KIH0KIApAQCAtNDUwLDEwICs0NDcsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQ
b2ludCogcG9pbgogCiAgICAgU2tQYXRoIHBhdGg7CiAgICAgc2V0UGF0aEZyb21Db252ZXhQb2lu
dHMoJnBhdGgsIG51bVBvaW50cywgcG9pbnRzKTsKLSAgICBpZiAoYW50aWFsaWFzZWQpCi0gICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHBhdGgpOwotICAgIGVs
c2UKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5jbGlwUGF0aChwYXRoKTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgocGF0aCwgYW50aWFsaWFzZWQgPyBBbnRp
QWxpYXNlZCA6IEJXKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcg
dGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCkBAIC00NjUsMTQgKzQ1OSwxMiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgZWxpcHNlUmVj
dCkKICAgICBTa1JlY3QgcmVjdCA9IGVsaXBzZVJlY3Q7CiAgICAgU2tQYWludCBwYWludDsKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKLSAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKLSAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd0JvdW5kZWQocmVjdCwgcGFpbnQpOworICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5
bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBwYWludC5yZXNldCgpOwogICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgJnJlY3QsIDApOwot
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdPdmFsKHJlY3QsIHBhaW50
KTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdCb3VuZGVkKHJlY3QsIHBhaW50
KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKICAg
ICB9CiB9CiAKQEAgLTQ5MSw4ICs0ODMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJhd091dGVy
UGF0aChQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1BhdGgmIHBhdAogICAg
IHBhaW50LnNldFN0cm9rZVdpZHRoKDEpOwogICAgIHBhaW50LnNldFBhdGhFZmZlY3QobmV3IFNr
Q29ybmVyUGF0aEVmZmVjdCgxKSktPnVucmVmKCk7CiAjZW5kaWYKLSAgICBjb250ZXh0LT5jYW52
YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotICAgIGNvbnRleHQtPmRpZERyYXdQYXRoKHBh
dGgsIHBhaW50KTsKKyAgICBjb250ZXh0LT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBkcmF3SW5uZXJQYXRoKFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRl
eHQsIGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tQYWludCYgcGFpbnQsIGludCB3aWR0aCkKQEAgLTU4
MiwxNyArNTczLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQ
b2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgICAgICB9CiAgICAgICAg
IFNrUGFpbnQgZmlsbFBhaW50OwogICAgICAgICBmaWxsUGFpbnQuc2V0Q29sb3IocGFpbnQuZ2V0
Q29sb3IoKSk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3Qo
cjEsIGZpbGxQYWludCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJh
d1JlY3QocjIsIGZpbGxQYWludCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3
UmVjdChyMSwgZmlsbFBhaW50KTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdS
ZWN0KHIyLCBmaWxsUGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1JlY3Qo
cjEsIGZpbGxQYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UmVjdChyMiwg
ZmlsbFBhaW50KTsKICAgICB9CiAKICAgICBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocDEs
IHAyLCB3aWR0aCwgcGVuU3R5bGUpOwogICAgIFNrUG9pbnQgcHRzWzJdID0geyAoU2tQb2ludClw
MSwgKFNrUG9pbnQpcDIgfTsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJh
d1BvaW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBwYWludCk7Ci0gICAg
cGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQb2ludHMoU2tDYW52YXM6OmtMaW5lc19Qb2ludE1v
ZGUsIDIsIHB0cywgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UG9pbnRzKFNr
Q2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBwdHMsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYg
cHQsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKQEAgLTcyMSwx
NCArNzA5LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBmbG9hdCB3aWR0CiAgICAgcmVjdC5zZXQob3JpZ2lu
WCwgb3JpZ2luWSwgb3JpZ2luWCArIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIod2lkdGgpICogZGV2
aWNlU2NhbGVGYWN0b3IsIG9yaWdpblkgKyBTa0ludFRvU2NhbGFyKG1pc3NwZWxsQml0bWFwW2lu
ZGV4XS0+aGVpZ2h0KCkpKTsKIAogICAgIGlmIChkZXZpY2VTY2FsZUZhY3RvciA9PSAyKSB7Ci0g
ICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+c2F2ZSgpOwotICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnNjYWxlKFNLX1NjYWxhckhhbGYsIFNLX1NjYWxhckhh
bGYpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2F2ZSgpOworICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+c2NhbGUoU0tfU2NhbGFySGFsZiwgU0tfU2NhbGFySGFsZik7CiAgICAgfQot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOwor
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7CiAgICAgaWYgKGRl
dmljZVNjYWxlRmFjdG9yID09IDIpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+cmVzdG9yZSgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdSZWN0KHJlY3Qs
IHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUoKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwdCwK
QEAgLTc1Myw4ICs3MzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHB0LAogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIC8vIFRleHQgbGluZXMgYXJlIGRyYXduIHVzaW5nIHRo
ZSBzdHJva2UgY29sb3IuCiAgICAgcGFpbnQuc2V0Q29sb3IocGxhdGZvcm1Db250ZXh0KCktPmVm
ZmVjdGl2ZVN0cm9rZUNvbG9yKCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChy
LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKIH0K
IAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAg
LTc5MCw4ICs3NzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aFRvRmlsbCkKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpLT5kcmF3UGF0aCgqcGF0aCwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5kaWREcmF3UGF0aCgqcGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3
UGF0aCgqcGF0aCwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODAzLDggKzc4Nyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKICAgICBTa1BhaW50IHBh
aW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQp
OwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZv
cm1Db250ZXh0KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC04MTYsOCArNzk5LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb2xvclMKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1
cFBhaW50Q29tbW9uKCZwYWludCk7CiAgICAgcGFpbnQuc2V0Q29sb3IoY29sb3IucmdiKCkpOwot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1D
b250ZXh0KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LApAQCAtODUyLDggKzgzNCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50
Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50LnNldENvbG9yKGNvbG9yLnJnYigpKTsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIEFmZmluZVRyYW5zZm9y
bSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0CkBAIC04
NjEsNyArODQyLDcgQEAgQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CiAKLSAgICBjb25zdCBTa01hdHJpeCYgbSA9
IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG90YWxNYXRyaXgoKTsKKyAgICBjb25z
dCBTa01hdHJpeCYgbSA9IHBsYXRmb3JtQ29udGV4dCgpLT5nZXRUb3RhbE1hdHJpeCgpOwogICAg
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oU2tTY2FsYXJUb0RvdWJsZShtLmdldFNjYWxlWCgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3WSgp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUobS5nZXRTa2V3
WCgpKSwKQEAgLTg4MCw3ICs4NjEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+c2NhbGUoV2ViQ29y
ZUZsb2F0VG9Ta1NjYWxhcihzaXplLndpZHRoKCkpLAorICAgIHBsYXRmb3JtQ29udGV4dCgpLT5z
Y2FsZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHNpemUud2lkdGgoKSksCiAgICAgICAgIFdlYkNv
cmVGbG9hdFRvU2tTY2FsYXIoc2l6ZS5oZWlnaHQoKSkpOwogfQogCkBAIC0xMTQwLDggKzExMjEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHIsIGlu
dCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKQogCiAgICAgU2tQYXRoIHBhdGg7CiAgICAgcGF0
aC5hZGRBcmMob3ZhbCwgU2tJbnRUb1NjYWxhcigtc3RhcnRBbmdsZSksIFNrSW50VG9TY2FsYXIo
LWFuZ2xlU3BhbikpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgo
cGF0aCwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UGF0aChwYXRoLCBw
YWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aFRvU3Ry
b2tlKQpAQCAtMTE1Miw4ICsxMTMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgoY29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQogICAgIGNvbnN0IFNrUGF0aCYgcGF0aCA9ICpw
YXRoVG9TdHJva2UucGxhdGZvcm1QYXRoKCk7CiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7Ci0gICAg
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Ci0gICAg
cGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkK
QEAgLTExNzAsMTAgKzExNDksOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBTa1JlY3QgcihyZWN0
KTsKICAgICBib29sIHZhbGlkVyA9IHIud2lkdGgoKSA+IDA7CiAgICAgYm9vbCB2YWxpZEggPSBy
LmhlaWdodCgpID4gMDsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpOwogICAgIGlmICh2YWxpZFcgJiYgdmFsaWRIKSB7Ci0gICAgICAgIGNhbnZhcy0+
ZHJhd1JlY3QociwgcGFpbnQpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1Jl
Y3QociwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1JlY3QociwgcGFp
bnQpOwogICAgIH0gZWxzZSBpZiAodmFsaWRXIHx8IHZhbGlkSCkgewogICAgICAgICAvLyB3ZSBh
cmUgZXhwZWN0ZWQgdG8gcmVzcGVjdCB0aGUgbGluZUpvaW4sIHNvIHdlIGNhbid0IGp1c3QgY2Fs
bAogICAgICAgICAvLyBkcmF3TGluZSAtLSB3ZSBoYXZlIHRvIGNyZWF0ZSBhIHBhdGggdGhhdCBk
b3VibGVzIGJhY2sgb24gaXRzZWxmLgpAQCAtMTE4MSw4ICsxMTU4LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lk
dGgpCiAgICAgICAgIHBhdGgubW92ZVRvKHIuZkxlZnQsIHIuZlRvcCk7CiAgICAgICAgIHBhdGgu
bGluZVRvKHIuZlJpZ2h0LCByLmZCb3R0b20pOwogICAgICAgICBwYXRoLmNsb3NlKCk7Ci0gICAg
ICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogICAgIH0KIH0KIApAQCAtMTE5MSw4ICsxMTY3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPnJvdGF0ZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKAotICAg
ICAgICBhbmdsZUluUmFkaWFucyAqICgxODAuMGYgLyAzLjE0MTU5MjY1ZikpKTsKKyAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+cm90YXRlKFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoYW5nbGVJblJhZGlh
bnMgKiAoMTgwLjBmIC8gMy4xNDE1OTI2NWYpKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
Ojp0cmFuc2xhdGUoZmxvYXQgdywgZmxvYXQgaCkKQEAgLTEyMDAsOCArMTE3NSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgdywgZmxvYXQgaCkKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCktPnRyYW5zbGF0ZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHcpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmVGbG9hdFRvU2tTY2Fs
YXIoaCkpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFuc2xhdGUoV2ViQ29yZUZsb2F0VG9T
a1NjYWxhcih3KSwgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihoKSk7CiB9CiAKIGJvb2wgR3JhcGhp
Y3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0CkBAIC0xMjI1LDggKzExOTks
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpCiAgICAgU2tSZWN0IHJlY3QgPSBlbGxpcHNlOwogICAgIFNrUGFpbnQg
cGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWlu
dCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWlu
dCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdCb3VuZGVkKHJlY3QsIHBhaW50KTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd092YWwocmVjdCwgcGFpbnQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKQEAgLTEyMzcsOCArMTIxMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIFNrUmVjdCBy
ZWN0KGVsbGlwc2UpOwogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCkt
PnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVjdCwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5kaWREcmF3Qm91bmRlZChyZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCkt
PmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZm
ZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcAppbmRleCAyNWYzNDNlYTViMWM1NDQ2MDNkODY5OTAyMzM5NDM2OWYxYmEy
YjJkLi5kNDkyMWU4Y2JhZDdiYjcyNzQ5NjU2N2QzNWEwMDQ4MTI0YWI1M2RiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBUYWJsZSkKIH0KIAog
dGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgU2tDYW52YXMqIGNhbnZhcywK
K1Bhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JiByZWN0LCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGZsb2F0IGFyZWEg
PSA0LjBmICogcmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKTsKQEAgLTI3NiwyMyArMjc2LDIy
IEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0LCBTa0NhbnZhcyogY2FudmFzCiAgICAgZWxzZQogICAgICAgICBjb25maWc4ODg4
ID0gU2tDYW52YXM6OmtSR0JBX1VucHJlbXVsX0NvbmZpZzg4ODg7CiAKLSAgICBjYW52YXMtPnJl
YWRQaXhlbHMoJmRlc3RCaXRtYXAsIHJlY3QueCgpLCByZWN0LnkoKSwgY29uZmlnODg4OCk7Cisg
ICAgY29udGV4dC0+cmVhZFBpeGVscygmZGVzdEJpdG1hcCwgcmVjdC54KCksIHJlY3QueSgpLCBj
b25maWc4ODg4KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAogUGFzc1JlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRlU3lzdGVtKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihyZWN0LCBjb250ZXh0KCktPnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKSwgbV9zaXplKTsKKyAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFVu
bXVsdGlwbGllZD4ocmVjdCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9zaXplKTsK
IH0KIAogUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHJlY3QsIGNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBtX3NpemUpOworICAgIHJldHVy
biBnZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgY29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKSwgbV9zaXplKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11
bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2UsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pCiB7Ci0gICAgU2tDYW52YXMqIGNhbnZhcyA9
IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIEFTU0VSVChzb3Vy
Y2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDAp
OwogCkBAIC0zMzAsNyArMzI5LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KE11
bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2UsIGMKICAgICBlbHNl
CiAgICAgICAgIGNvbmZpZzg4ODggPSBTa0NhbnZhczo6a1JHQkFfVW5wcmVtdWxfQ29uZmlnODg4
ODsKIAotICAgIGNhbnZhcy0+d3JpdGVQaXhlbHMoc3JjQml0bWFwLCBkZXN0WCwgZGVzdFksIGNv
bmZpZzg4ODgpOworICAgIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPndyaXRlUGl4ZWxz
KHNyY0JpdG1hcCwgZGVzdFgsIGRlc3RZLCBjb25maWc4ODg4KTsKIH0KIAogdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CkBAIC0zNjYsNyArMzY1LDcgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBDb28KICAg
ICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5j
b2RpbmcobWltZVR5cGUpKTsKIAogICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVkSW1hZ2U7Ci0gICAg
U2tEZXZpY2UqIGRldmljZSA9IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LT5nZXREZXZpY2UoKTsKKyAgICBTa0RldmljZSogZGV2aWNlID0gY29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Z2V0RGV2aWNlKCk7CiAgICAgaWYgKCFlbmNvZGVJbWFnZShkZXZpY2UtPmFj
Y2Vzc0JpdG1hcChmYWxzZSksIG1pbWVUeXBlLCBxdWFsaXR5LCAmZW5jb2RlZEltYWdlKSkKICAg
ICAgICAgcmV0dXJuICJkYXRhOiwiOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKaW5kZXggMWRiZGEwZmRhMTg5ZmFlNTlkYWIw
NDI4NzA1ZmNkN2ViZDkxN2RlMy4uY2NjYmQ5MDA3NTlkODQzOGZmNTg0Y2JiNWQyOTIyMDVkNzY2
M2Y4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9J
bWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcApAQCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBTa0JpdG1hcCBleHRyYWN0
U2NhbGVkSW1hZ2VGcmFnbWVudChjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgY29uc3QK
IC8vCiAvLyBOb3RlOiB0aGlzIGNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIGNhbnZhcyB0cmFu
c2Zvcm1hdGlvbiBpcyBsaW1pdGVkIHRvCiAvLyBzY2FsaW5nIG9yIHRyYW5zbGF0aW9uLgotc3Rh
dGljIHZvaWQgZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0NhbnZhcyYgY2FudmFzLCBTa1BhaW50JiBw
YWludCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNrUmVjdCYgc3JjUmVj
dCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCkKK3N0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRt
YXAoUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5h
dGl2ZUltYWdlU2tpYSYgYml0bWFwLCBjb25zdCBTa1JlY3QmIHNyY1JlY3QsIGNvbnN0IFNrUmVj
dCYgZGVzdFJlY3QpCiB7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgVFJBQ0VfRVZFTlQw
KCJza2lhIiwgImRyYXdSZXNhbXBsZWRCaXRtYXAiKTsKQEAgLTMwNCwxMyArMzA0LDEzIEBAIHN0
YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMmIGNhbnZhcywgU2tQYWludCYg
cGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgLy8gdGhlIGZpbmFsIHNjYWxlLiBUaGUgZmluYWwg
c2NhbGUgaXMgYSBjb21iaW5hdGlvbiBvZiBzY2FsZSB0cmFuc2Zvcm0KICAgICAvLyBpbiBjYW52
YXMgYW5kIGV4cGxpY2l0IHNjYWxpbmcgKHNyY1JlY3QgYW5kIGRlc3RSZWN0KS4KICAgICBTa1Jl
Y3Qgc2NyZWVuUmVjdDsKLSAgICBjYW52YXMuZ2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZzY3Jl
ZW5SZWN0LCBkZXN0UmVjdCk7CisgICAgY29udGV4dC0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0
KCZzY3JlZW5SZWN0LCBkZXN0UmVjdCk7CiAgICAgZmxvYXQgcmVhbFNjYWxlWCA9IHNjcmVlblJl
Y3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKICAgICBmbG9hdCByZWFsU2NhbGVZID0gc2Ny
ZWVuUmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7CiAKICAgICAvLyBUaGlzIHBhcnQg
b2YgY29kZSBsaW1pdHMgc2NhbGluZyBvbmx5IHRvIHZpc2libGUgcG9ydGlvbiBpbiB0aGUKICAg
ICBTa1JlY3QgZGVzdFJlY3RWaXNpYmxlU3Vic2V0OwotICAgIENsaXBSZWN0VG9DYW52YXMoY2Fu
dmFzLCBkZXN0UmVjdCwgJmRlc3RSZWN0VmlzaWJsZVN1YnNldCk7CisgICAgQ2xpcFJlY3RUb0Nh
bnZhcyhjb250ZXh0LCBkZXN0UmVjdCwgJmRlc3RSZWN0VmlzaWJsZVN1YnNldCk7CiAKICAgICAv
LyBDbGlwUmVjdFRvQ2FudmFzIG9mdGVuIG92ZXJzaG9vdHMsIHJlc3VsdGluZyBpbiBhIGxhcmdl
ciByZWdpb24gdGhhbiBvdXIKICAgICAvLyBvcmlnaW5hbCBkZXN0UmVjdC4gSW50ZXJzZWN0aW5n
IGdldHMgdXMgYmFjayBpbnNpZGUuCkBAIC0zNDAsOCArMzQwLDggQEAgc3RhdGljIHZvaWQgZHJh
d1Jlc2FtcGxlZEJpdG1hcChTa0NhbnZhcyYgY2FudmFzLCBTa1BhaW50JiBwYWludCwgY29uc3Qg
TmF0aXZlSW0KICAgICAvLyBXaGVuIFNraWEgc3VwcG9ydHMgdGhlbiB1c2UgdGhpcyBhcyB0aGUg
c291cmNlIHJlY3QgdG8gcmVwbGFjZSAwLgogICAgIC8vCiAgICAgLy8gc2NhbGVkU3JjUmVjdC5v
ZmZzZXQoLWVuY2xvc2luZ1NjYWxlZFNyY1JlY3QueCgpLCAtZW5jbG9zaW5nU2NhbGVkU3JjUmVj
dC55KCkpOwotICAgIGNhbnZhcy5zYXZlKCk7Ci0gICAgY2FudmFzLmNsaXBSZWN0KGRlc3RSZWN0
VmlzaWJsZVN1YnNldCk7CisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIGNvbnRleHQtPmNsaXBS
ZWN0KGRlc3RSZWN0VmlzaWJsZVN1YnNldCk7CiAKICAgICAvLyBCZWNhdXNlIHRoZSBpbWFnZSBm
cmFnbWVudCBpcyBnZW5lcmF0ZWQgd2l0aCBhbiBhcHByb3htaWF0ZWQgc2NhbGluZwogICAgIC8v
IGZhY3Rvci4gVGhpcyBkcmF3IHdpbGwgcGVyZm9ybSBhIGNsb3NlIHRvIDEgc2NhbGluZy4KQEAg
LTM0OSwxMyArMzQ5LDEzIEBAIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52
YXMmIGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgLy8gTk9URTog
Rm9yIGZ1dHVyZSBvcHRpbWl6YXRpb24uIElmIHRoZSBkaWZmZXJlbmNlIGluIHNjYWxlIGlzIHNv
IHNtYWxsCiAgICAgLy8gdGhhdCBTa2lhIGRvZXNuJ3QgcHJvZHVjZSBhIGRpZmZlcmVuY2UgdGhl
biB3ZSBjYW4ganVzdCBibGl0IGl0IGRpcmVjdGx5CiAgICAgLy8gdG8gZW5oYW5jZSBwZXJmb3Jt
YW5jZS4KLSAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3Qoc2NhbGVkSW1hZ2VGcmFnbWVudCwgMCwg
ZW5jbG9zaW5nRGVzdFJlY3QsICZwYWludCk7Ci0gICAgY2FudmFzLnJlc3RvcmUoKTsKKyAgICBj
b250ZXh0LT5kcmF3Qml0bWFwUmVjdChzY2FsZWRJbWFnZUZyYWdtZW50LCAwLCBlbmNsb3NpbmdE
ZXN0UmVjdCwgJnBhaW50KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIHN0YXRpYyBi
b29sIGhhc05vbjkwcm90YXRpb24oUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCkKIHsKLSAg
ICByZXR1cm4gIWNvbnRleHQtPmNhbnZhcygpLT5nZXRUb3RhbE1hdHJpeCgpLnJlY3RTdGF5c1Jl
Y3QoKTsKKyAgICByZXR1cm4gIWNvbnRleHQtPmdldFRvdGFsTWF0cml4KCkucmVjdFN0YXlzUmVj
dCgpOwogfQogCiBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEq
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAsIGNvbnN0IFNr
UmVjdCYgc3JjUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCwgY29uc3QgU2tYZmVybW9kZTo6
TW9kZSYgY29tcE9wKQpAQCAtMzcwLDggKzM3MCw2IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRt
YXAoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFn
CiAgICAgLy8gb25seSBhbnRpYWxpYXMgaWYgd2UncmUgcm90YXRlZCBvciBza2V3ZWQKICAgICBw
YWludC5zZXRBbnRpQWxpYXMoaGFzTm9uOTByb3RhdGlvbihwbGF0Zm9ybUNvbnRleHQpKTsKIAot
ICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOwotCiAgICAg
UmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKICAgICBpZiAocGxhdGZvcm1Db250ZXh0LT5pc0Fj
Y2VsZXJhdGVkKCkpCiAgICAgICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CkBAIC0z
ODAsMTAgKzM3OCwxMCBAQCBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4
dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgTmF0aXZlSW1hZwogICAgIGVsc2UgewogICAg
ICAgICAvLyBUYWtlIGludG8gYWNjb3VudCBzY2FsZSBhcHBsaWVkIHRvIHRoZSBjYW52YXMgd2hl
biBjb21wdXRpbmcgc2FtcGxpbmcgbW9kZSAoZS5nLiBDU1Mgc2NhbGUgb3IgcGFnZSBzY2FsZSku
CiAgICAgICAgIFNrUmVjdCBkZXN0UmVjdFRhcmdldCA9IGRlc3RSZWN0OwotICAgICAgICBpZiAo
IShjYW52YXMtPmdldFRvdGFsTWF0cml4KCkuZ2V0VHlwZSgpICYgKFNrTWF0cml4OjprQWZmaW5l
X01hc2sgfCBTa01hdHJpeDo6a1BlcnNwZWN0aXZlX01hc2spKSkKLSAgICAgICAgICAgIGNhbnZh
cy0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZkZXN0UmVjdFRhcmdldCwgZGVzdFJlY3QpOwor
ICAgICAgICBpZiAoIShwbGF0Zm9ybUNvbnRleHQtPmdldFRvdGFsTWF0cml4KCkuZ2V0VHlwZSgp
ICYgKFNrTWF0cml4OjprQWZmaW5lX01hc2sgfCBTa01hdHJpeDo6a1BlcnNwZWN0aXZlX01hc2sp
KSkKKyAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0
KCZkZXN0UmVjdFRhcmdldCwgZGVzdFJlY3QpOwogCi0gICAgICAgIHJlc2FtcGxpbmcgPSBjb21w
dXRlUmVzYW1wbGluZ01vZGUoY2FudmFzLT5nZXRUb3RhbE1hdHJpeCgpLCBiaXRtYXAsCisgICAg
ICAgIHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZvcm1Db250ZXh0LT5n
ZXRUb3RhbE1hdHJpeCgpLCBiaXRtYXAsCiAgICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoc3Jj
UmVjdC53aWR0aCgpKSwgU2tTY2FsYXJUb0Zsb2F0KHNyY1JlY3QuaGVpZ2h0KCkpLAogICAgICAg
ICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0VGFyZ2V0LndpZHRoKCkpLCBTa1NjYWxhclRv
RmxvYXQoZGVzdFJlY3RUYXJnZXQuaGVpZ2h0KCkpKTsKICAgICB9CkBAIC0zOTcsNyArMzk1LDcg
QEAgc3RhdGljIHZvaWQgcGFpbnRTa0JpdG1hcChQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IE5hdGl2ZUltYWcKICAgICByZXNhbXBsaW5nID0gbGltaXRSZXNhbXBs
aW5nTW9kZShwbGF0Zm9ybUNvbnRleHQsIHJlc2FtcGxpbmcpOwogICAgIHBhaW50LnNldEZpbHRl
ckJpdG1hcChyZXNhbXBsaW5nID09IFJFU0FNUExFX0xJTkVBUik7CiAgICAgaWYgKHJlc2FtcGxp
bmcgPT0gUkVTQU1QTEVfQVdFU09NRSkKLSAgICAgICAgZHJhd1Jlc2FtcGxlZEJpdG1hcCgqY2Fu
dmFzLCBwYWludCwgYml0bWFwLCBzcmNSZWN0LCBkZXN0UmVjdCk7CisgICAgICAgIGRyYXdSZXNh
bXBsZWRCaXRtYXAocGxhdGZvcm1Db250ZXh0LCBwYWludCwgYml0bWFwLCBzcmNSZWN0LCBkZXN0
UmVjdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE5vIHJlc2FtcGxpbmcgbmVjZXNzYXJ5LCB3
ZSBjYW4ganVzdCBkcmF3IHRoZSBiaXRtYXAuIFdlIHdhbnQgdG8KICAgICAgICAgLy8gZmlsdGVy
IGl0IGlmIHdlIGRlY2lkZWQgdG8gZG8gbGluZWFyIGludGVycG9sYXRpb24gYWJvdmUsIG9yIGlm
IHRoZXJlCkBAIC00MTgsMTAgKzQxNiwxMCBAQCBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBs
YXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgTmF0aXZlSW1hZwogICAg
ICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS8xNDU1NDAuCiAgICAgICAgIGlmIChuZWVkc0Ns
aXBwaW5nKSB7CiAgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAg
ICAgIHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCktPmNsaXBSZWN0KGRlc3RSZWN0KTsKKyAgICAg
ICAgICAgIHBsYXRmb3JtQ29udGV4dC0+Y2xpcFJlY3QoZGVzdFJlY3QpOwogICAgICAgICB9CiAK
LSAgICAgICAgY2FudmFzLT5kcmF3Qml0bWFwUmVjdChiaXRtYXAuYml0bWFwKCksICZlbmNsb3Np
bmdTcmNSZWN0LCBlbmNsb3NpbmdEZXN0UmVjdCwgJnBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1D
b250ZXh0LT5kcmF3Qml0bWFwUmVjdChiaXRtYXAuYml0bWFwKCksICZlbmNsb3NpbmdTcmNSZWN0
LCBlbmNsb3NpbmdEZXN0UmVjdCwgJnBhaW50KTsKIAogICAgICAgICBpZiAobmVlZHNDbGlwcGlu
ZykKICAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+cmVzdG9yZSgpOwpAQCAtNDgxLDcgKzQ3
OSw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwK
ICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IG5vcm1TcmNSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRyYXcKIAotICAgIFNrTWF0cml4IGN0bSA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG90YWxNYXRyaXgoKTsKKyAg
ICBTa01hdHJpeCBjdG0gPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VG90YWxNYXRy
aXgoKTsKICAgICBTa01hdHJpeCB0b3RhbE1hdHJpeDsKICAgICB0b3RhbE1hdHJpeC5zZXRDb25j
YXQoY3RtLCBwYXR0ZXJuVHJhbnNmb3JtKTsKIApAQCAtNTUyLDcgKzU1MCw3IEBAIHZvaWQgSW1h
Z2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwKICAgICBwYWludC5zZXRY
ZmVybW9kZU1vZGUoV2ViQ29yZUNvbXBvc2l0ZVRvU2tpYUNvbXBvc2l0ZShjb21wb3NpdGVPcCkp
OwogICAgIHBhaW50LnNldEZpbHRlckJpdG1hcChyZXNhbXBsaW5nID09IFJFU0FNUExFX0xJTkVB
Uik7CiAKLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRTa1BhaW50KGRlc3RS
ZWN0LCBwYWludCk7CisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KGRl
c3RSZWN0LCBwYWludCk7CiB9CiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKaW5kZXggMzQ0YmMxN2Qz
NzQ3YjRhMjQ2Nzk1NzVmODE1MDAwODAxZjEzZGM1MS4uYjQ2NjQ2OWNmY2JmNWU2YzYzMmEyNjJl
MTVlY2NjYzU3NzI2YTc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC0yMjksNyAr
MjI5LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzYXZlKCkKICAgICBtX3N0YXRlLT5t
X2ltYWdlQnVmZmVyQ2xpcC5yZXNldCgpOwogCiAgICAgLy8gU2F2ZSBvdXIgbmF0aXZlIGNhbnZh
cy4KLSAgICBjYW52YXMoKS0+c2F2ZSgpOworICAgIG1fY2FudmFzLT5zYXZlKCk7CiB9CiAKIHZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2F2ZUxheWVyKGNvbnN0IFNrUmVjdCogYm91bmRzLCBj
b25zdCBTa1BhaW50KiBwYWludCkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
CiAgICAgbV9zdGF0ZS0+bV9jbGlwID0gYm91bmRzOwogICAgIC8vIEdldCB0aGUgYWJzb2x1dGUg
Y29vcmRpbmF0ZXMgb2YgdGhlIHN0b3JlZCBjbGlwcGluZyByZWN0YW5nbGUgdG8gbWFrZSBpdAog
ICAgIC8vIGluZGVwZW5kZW50IG9mIGFueSB0cmFuc2Zvcm0gY2hhbmdlcy4KLSAgICBjYW52YXMo
KS0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZtX3N0YXRlLT5tX2NsaXApOworICAgIGdldFRv
dGFsTWF0cml4KCkubWFwUmVjdCgmbV9zdGF0ZS0+bV9jbGlwKTsKIAogICAgIFNrQ2FudmFzOjpT
YXZlRmxhZ3Mgc2F2ZUZsYWdzID0gc3RhdGljX2Nhc3Q8U2tDYW52YXM6OlNhdmVGbGFncz4oU2tD
YW52YXM6OmtIYXNBbHBoYUxheWVyX1NhdmVGbGFnIHwgU2tDYW52YXM6OmtGdWxsQ29sb3JMYXll
cl9TYXZlRmxhZyk7CiAgICAgc2F2ZUxheWVyKCZib3VuZHMsIDAsIHNhdmVGbGFncyk7CkBAIC0y
OTcsMjMgKzI5NywxOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlw
cGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsCiAgICAgfQogfQogCi12b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OmNsaXBQYXRoQW50aUFsaWFzZWQoY29uc3QgU2tQYXRoJiBjbGlwUGF0
aCkKLXsKLSAgICBjYW52YXMoKS0+Y2xpcFBhdGgoY2xpcFBhdGgsIFNrUmVnaW9uOjprSW50ZXJz
ZWN0X09wLCB0cnVlKTsKLX0KLQogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlKCkK
IHsKICAgICBpZiAoIW1fc3RhdGUtPm1faW1hZ2VCdWZmZXJDbGlwLmVtcHR5KCkpIHsKICAgICAg
ICAgYXBwbHlDbGlwRnJvbUltYWdlKG1fc3RhdGUtPm1fY2xpcCwgbV9zdGF0ZS0+bV9pbWFnZUJ1
ZmZlckNsaXApOwotICAgICAgICBjYW52YXMoKS0+cmVzdG9yZSgpOworICAgICAgICBtX2NhbnZh
cy0+cmVzdG9yZSgpOwogICAgIH0KIAogICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CiAg
ICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwogCiAgICAgLy8gUmVzdG9yZSBvdXIg
bmF0aXZlIGNhbnZhcy4KLSAgICBjYW52YXMoKS0+cmVzdG9yZSgpOworICAgIG1fY2FudmFzLT5y
ZXN0b3JlKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0
IHJlY3QpCkBAIC0zMjIsOCArMzE3LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3
UmVjdChTa1JlY3QgcmVjdCkKICAgICBpbnQgZmlsbGNvbG9yTm90VHJhbnNwYXJlbnQgPSBtX3N0
YXRlLT5tX2ZpbGxDb2xvciAmIDB4RkYwMDAwMDA7CiAgICAgaWYgKGZpbGxjb2xvck5vdFRyYW5z
cGFyZW50KSB7CiAgICAgICAgIHNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7Ci0gICAgICAg
IGNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7Ci0gICAgICAgIGRpZERyYXdSZWN0KHJl
Y3QsIHBhaW50KTsKKyAgICAgICAgZHJhd1JlY3QocmVjdCwgcGFpbnQpOwogICAgIH0KIAogICAg
IGlmIChtX3N0YXRlLT5tX3N0cm9rZVN0eWxlICE9IE5vU3Ryb2tlCkBAIC0zMzUsMTcgKzMyOSwx
MyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KFNrUmVjdCByZWN0KQogICAg
ICAgICBwYWludC5zZXRDb2xvcih0aGlzLT5lZmZlY3RpdmVTdHJva2VDb2xvcigpKTsKIAogICAg
ICAgICBTa1JlY3QgdG9wQm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZUb3AsIHJlY3QuZlJp
Z2h0LCByZWN0LmZUb3AgKyAxIH07Ci0gICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdCh0b3BCb3Jk
ZXIsIHBhaW50KTsKLSAgICAgICAgZGlkRHJhd1JlY3QodG9wQm9yZGVyLCBwYWludCk7CisgICAg
ICAgIGRyYXdSZWN0KHRvcEJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1JlY3QgYm90dG9tQm9y
ZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZCb3R0b20gLSAxLCByZWN0LmZSaWdodCwgcmVjdC5m
Qm90dG9tIH07Ci0gICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChib3R0b21Cb3JkZXIsIHBhaW50
KTsKLSAgICAgICAgZGlkRHJhd1JlY3QoYm90dG9tQm9yZGVyLCBwYWludCk7CisgICAgICAgIGRy
YXdSZWN0KGJvdHRvbUJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1JlY3QgbGVmdEJvcmRlciA9
IHsgcmVjdC5mTGVmdCwgcmVjdC5mVG9wICsgMSwgcmVjdC5mTGVmdCArIDEsIHJlY3QuZkJvdHRv
bSAtIDEgfTsKLSAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KGxlZnRCb3JkZXIsIHBhaW50KTsK
LSAgICAgICAgZGlkRHJhd1JlY3QobGVmdEJvcmRlciwgcGFpbnQpOworICAgICAgICBkcmF3UmVj
dChsZWZ0Qm9yZGVyLCBwYWludCk7CiAgICAgICAgIFNrUmVjdCByaWdodEJvcmRlciA9IHsgcmVj
dC5mUmlnaHQgLSAxLCByZWN0LmZUb3AgKyAxLCByZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tIC0g
MSB9OwotICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50KTsKLSAg
ICAgICAgZGlkRHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50KTsKKyAgICAgICAgZHJhd1JlY3Qo
cmlnaHRCb3JkZXIsIHBhaW50KTsKICAgICB9CiB9CiAKQEAgLTU4MSwxMyArNTcxLDYgQEAgdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXREYXNoUGF0aEVmZmVjdChTa0Rhc2hQYXRoRWZmZWN0
KiBkYXNoKQogICAgIH0KIH0KIAotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwYWludFNrUGFp
bnQoY29uc3QgU2tSZWN0JiByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU2tQYWludCYgcGFpbnQpCi17Ci0gICAgbV9jYW52YXMtPmRyYXdSZWN0KHJl
Y3QsIHBhaW50KTsKLSAgICBkaWREcmF3UmVjdChyZWN0LCBwYWludCk7Ci19Ci0KIGNvbnN0IFNr
Qml0bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXRtYXAoKSBjb25zdAogewogI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQpAQCAtNjI1LDI0ICs2MDgsNiBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OmRpZERyYXdSZWN0KGNvbnN0IFNrUmVjdCYgcmVjdCwgY29uc3QgU2tQYWludCYgcGFpbnQs
CiAgICAgICAgIG1fb3BhcXVlUmVnaW9uLmRpZERyYXdSZWN0KHRoaXMsIHJlY3QsIHBhaW50LCBi
aXRtYXApOwogfQogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRpZERyYXdQYXRoKGNvbnN0
IFNrUGF0aCYgcGF0aCwgY29uc3QgU2tQYWludCYgcGFpbnQpCi17Ci0gICAgaWYgKG1fdHJhY2tP
cGFxdWVSZWdpb24pCi0gICAgICAgIG1fb3BhcXVlUmVnaW9uLmRpZERyYXdQYXRoKHRoaXMsIHBh
dGgsIHBhaW50KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkaWREcmF3UG9pbnRz
KFNrQ2FudmFzOjpQb2ludE1vZGUgbW9kZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludCBw
b2ludHNbXSwgY29uc3QgU2tQYWludCYgcGFpbnQpCi17Ci0gICAgaWYgKG1fdHJhY2tPcGFxdWVS
ZWdpb24pCi0gICAgICAgIG1fb3BhcXVlUmVnaW9uLmRpZERyYXdQb2ludHModGhpcywgbW9kZSwg
bnVtUG9pbnRzLCBwb2ludHMsIHBhaW50KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpkaWREcmF3Qm91bmRlZChjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0IFNrUGFpbnQmIHBhaW50
KQotewotICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQotICAgICAgICBtX29wYXF1ZVJlZ2lv
bi5kaWREcmF3Qm91bmRlZCh0aGlzLCByZWN0LCBwYWludCk7Ci19Ci0KIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6YWRqdXN0VGV4dFJlbmRlck1vZGUoU2tQYWludCogcGFpbnQpCiB7CiAgICAg
aWYgKCFwYWludC0+aXNMQ0RSZW5kZXJUZXh0KCkpCkBAIC02NTcsNyArNjIyLDcgQEAgYm9vbCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpjb3VsZFVzZUxDRFJlbmRlcmVkVGV4dCgpCiAgICAgLy8gcmVu
ZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRlZCBjb3JyZWN0bHkgd2hlbiB0aGUgbGF5ZXIg
aXMKICAgICAvLyBjb2xsYXBzZWQuIFRoZXJlZm9yZSwgc3VicGl4ZWwgdGV4dCBpcyBkaXNhYmxl
ZCB3aGVuIHdlIGFyZSBkcmF3aW5nCiAgICAgLy8gb250byBhIGxheWVyLgotICAgIGlmIChjYW52
YXMoKS0+aXNEcmF3aW5nVG9MYXllcigpKQorICAgIGlmIChpc0RyYXdpbmdUb0xheWVyKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHRoaXMgdGV4dCBpcyBub3QgaW4gYW4g
aW1hZ2UgYnVmZmVyIGFuZCBzbyB3b24ndCBiZSBleHRlcm5hbGx5CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oCmluZGV4IDIzNjlmMzIwOTk2YTQxMWIzMWJiOGY3M2NiYWU2ZGVhNGQ5YmUxZjQuLjUzYzVi
MjUzMjY2OTlmOTRkOTQyMmFiZTM2MTkyMjU0ZDc3YTI1NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5oCkBAIC00NSw2ICs0NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorZW51bSBBbnRp
QWxpYXNpbmdNb2RlIHsgQlcsIEFudGlBbGlhc2VkIH07CiBlbnVtIENvbXBvc2l0ZU9wZXJhdG9y
OwogY2xhc3MgVGV4dHVyZTsKIApAQCAtMTAxLDcgKzEwMiw2IEBAIHB1YmxpYzoKICAgICAvLyBp
bnZva2VkLgogICAgIC8vIE5PVEU6IHxpbWFnZUJ1ZmZlcnwgbWF5IGJlIGRlbGV0ZWQgYmVmb3Jl
IHRoZSB8cmVzdG9yZXwgaXMgaW52b2tlZC4KICAgICB2b2lkIGJlZ2luTGF5ZXJDbGlwcGVkVG9J
bWFnZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopOwotICAgIHZvaWQgY2xp
cFBhdGhBbnRpQWxpYXNlZChjb25zdCBTa1BhdGgmKTsKIAogICAgIC8vIFNldHMgdXAgdGhlIGNv
bW1vbiBmbGFncyBvbiBhIHBhaW50IGZvciBhbnRpYWxpYXNpbmcsIGVmZmVjdHMsIGV0Yy4KICAg
ICAvLyBUaGlzIGlzIGltcGxpY2l0bHkgY2FsbGVkIGJ5IHNldHVwUGFpbnRGaWxsIGFuZCBzZXR1
cFBhaW50U3Ryb2tlLCBidXQKQEAgLTE2MSw5ICsxNjEsNiBAQCBwdWJsaWM6CiAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIHB1c2hlZCBkb3duIHRvIEdyYXBoaWNzQ29udGV4dC4KICAgICB2
b2lkIGRyYXdSZWN0KFNrUmVjdCByZWN0KTsKIAotICAgIC8vIEZJWE1FOiBJJ20gc3RpbGwgdW5z
dXJlIGhvdyBJIHdpbGwgc2VyaWFsaXplIHRoaXMgY2FsbC4KLSAgICB2b2lkIHBhaW50U2tQYWlu
dChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50Jik7Ci0KICAgICBjb25zdCBTa0JpdG1hcCog
Yml0bWFwKCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIGlmIHRoZSBjb250ZXh0IGlzIGEgcHJp
bnRpbmcgY29udGV4dCBpbnN0ZWFkIG9mIGEgZGlzcGxheQpAQCAtMTk1LDE3ICsxOTIsNDkgQEAg
cHVibGljOgogICAgIC8vIFRoaXMgd2lsbCBiZSBhbiBlbXB0eSByZWdpb24gdW5sZXNzIHRyYWNr
aW5nIGlzIGVuYWJsZWQuCiAgICAgY29uc3QgT3BhcXVlUmVnaW9uU2tpYSYgb3BhcXVlUmVnaW9u
KCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWVSZWdpb247IH0KIAotICAgIC8vIEFmdGVyIGRyYXdp
bmcgaW4gdGhlIGNvbnRleHQncyBjYW52YXMsIHVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gbm90aWZ5
IHRoZSBjb250ZXh0IHNvIGl0IGNhbiB0cmFjayB0aGUgb3BhcXVlIHJlZ2lvbi4KKyAgICAvLyBB
ZnRlciBkcmF3aW5nIGRpcmVjdGx5IHRvIHRoZSBjb250ZXh0J3MgY2FudmFzLCB1c2UgdGhpcyBm
dW5jdGlvbiB0byBub3RpZnkgdGhlIGNvbnRleHQgc28KKyAgICAvLyBpdCBjYW4gdHJhY2sgdGhl
IG9wYXF1ZSByZWdpb24uCisgICAgLy8gRklYTUU6IHRoaXMgaXMgc3RpbGwgbmVlZGVkIG9ubHkg
YmVjYXVzZSBJbWFnZVNraWE6OnBhaW50U2tCaXRtYXAoKSBtYXkgbmVlZCB0byBub3RpZnkgZm9y
IGEKKyAgICAvLyAgICAgICAgc21hbGxlciByZWN0IHRoYW4gdGhlIG9uZSBkcmF3biB0bywgZHVl
IHRvIGl0cyBjbGlwcGluZyBsb2dpYy4KICAgICB2b2lkIGRpZERyYXdSZWN0KGNvbnN0IFNrUmVj
dCYsIGNvbnN0IFNrUGFpbnQmLCBjb25zdCBTa0JpdG1hcCogPSAwKTsKLSAgICB2b2lkIGRpZERy
YXdQYXRoKGNvbnN0IFNrUGF0aCYsIGNvbnN0IFNrUGFpbnQmKTsKLSAgICB2b2lkIGRpZERyYXdQ
b2ludHMoU2tDYW52YXM6OlBvaW50TW9kZSwgaW50IG51bVBvaW50cywgY29uc3QgU2tQb2ludFtd
LCBjb25zdCBTa1BhaW50Jik7Ci0gICAgLy8gRm9yIGRyYXdpbmcgb3BlcmF0aW9ucyB0aGF0IGRv
IG5vdCBmaWxsIHRoZSBlbnRpcmUgcmVjdC4KLSAgICB2b2lkIGRpZERyYXdCb3VuZGVkKGNvbnN0
IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKIAogICAgIC8vIFR1cm4gb2ZmIExDRCB0ZXh0IGZv
ciB0aGUgcGFpbnQgaWYgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGNvbnRleHQuCiAgICAgdm9pZCBh
ZGp1c3RUZXh0UmVuZGVyTW9kZShTa1BhaW50Kik7CiAgICAgYm9vbCBjb3VsZFVzZUxDRFJlbmRl
cmVkVGV4dCgpOwogCisgICAgLy8gU2tDYW52YXMgd3JhcHBlcnMuCisgICAgU2tEZXZpY2UqIGdl
dERldmljZSgpIGNvbnN0OworICAgIFNrRGV2aWNlKiBnZXRUb3BEZXZpY2UoKSBjb25zdDsKKyAg
ICBib29sIHJlYWRQaXhlbHMoU2tCaXRtYXAqLCBpbnQgeCwgaW50IHksCisgICAgICAgIFNrQ2Fu
dmFzOjpDb25maWc4ODg4ID0gU2tDYW52YXM6OmtOYXRpdmVfUHJlbXVsX0NvbmZpZzg4ODgpOwor
ICAgIHZvaWQgd3JpdGVQaXhlbHMoY29uc3QgU2tCaXRtYXAmLCBpbnQgeCwgaW50IHksCisgICAg
ICAgIFNrQ2FudmFzOjpDb25maWc4ODg4ID0gU2tDYW52YXM6OmtOYXRpdmVfUHJlbXVsX0NvbmZp
Zzg4ODgpOworICAgIGJvb2wgaXNEcmF3aW5nVG9MYXllcigpIGNvbnN0OworCisgICAgYm9vbCBj
bGlwUGF0aChjb25zdCBTa1BhdGgmLCBBbnRpQWxpYXNpbmdNb2RlID0gQlcsIFNrUmVnaW9uOjpP
cCA9IFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKKyAgICBib29sIGNsaXBSZWN0KGNvbnN0IFNr
UmVjdCYsIEFudGlBbGlhc2luZ01vZGUgPSBCVywgU2tSZWdpb246Ok9wID0gU2tSZWdpb246OmtJ
bnRlcnNlY3RfT3ApOworICAgIGJvb2wgZ2V0Q2xpcEJvdW5kcyhTa1JlY3QqKSBjb25zdDsKKwor
ICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IFNrTWF0cml4Jik7CisgICAgY29uc3QgU2tNYXRyaXgm
IGdldFRvdGFsTWF0cml4KCkgY29uc3Q7CisgICAgYm9vbCBjb25jYXQoY29uc3QgU2tNYXRyaXgm
KTsKKyAgICBib29sIHJvdGF0ZShTa1NjYWxhciBkZWdyZWVzKTsKKyAgICBib29sIHNjYWxlKFNr
U2NhbGFyIHN4LCBTa1NjYWxhciBzeSk7CisgICAgYm9vbCB0cmFuc2xhdGUoU2tTY2FsYXIgZHgs
IFNrU2NhbGFyIGR5KTsKKworICAgIHZvaWQgZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCYsIFNr
U2NhbGFyLCBTa1NjYWxhciwgY29uc3QgU2tQYWludCogPSAwKTsKKyAgICB2b2lkIGRyYXdCaXRt
YXBSZWN0KGNvbnN0IFNrQml0bWFwJiwgY29uc3QgU2tJUmVjdCosIGNvbnN0IFNrUmVjdCYsIGNv
bnN0IFNrUGFpbnQqID0gMCk7CisgICAgdm9pZCBkcmF3T3ZhbChjb25zdCBTa1JlY3QmLCBjb25z
dCBTa1BhaW50Jik7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBTa1BhdGgmLCBjb25zdCBTa1Bh
aW50Jik7CisgICAgdm9pZCBkcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1vZGUsIHNpemVfdCBj
b3VudCwgY29uc3QgU2tQb2ludCBwdHNbXSwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZHJh
d1JlY3QoY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZHJhd0lSZWN0
KGNvbnN0IFNrSVJlY3QmLCBjb25zdCBTa1BhaW50Jik7CisgICAgdm9pZCBkcmF3UG9zVGV4dChj
b25zdCB2b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwgY29uc3QgU2tQb2ludCBwb3NbXSwg
Y29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZHJhd1Bvc1RleHRIKGNvbnN0IHZvaWQqIHRleHQs
IHNpemVfdCBieXRlTGVuZ3RoLCBjb25zdCBTa1NjYWxhciB4cG9zW10sIFNrU2NhbGFyIGNvbnN0
WSwKKyAgICAgICAgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZHJhd1RleHRPblBhdGgoY29u
c3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVMZW5ndGgsIGNvbnN0IFNrUGF0aCYsCisgICAgICAg
IGNvbnN0IFNrTWF0cml4KiwgY29uc3QgU2tQYWludCYpOworCiAjaWYgZGVmaW5lZChTS19TVVBQ
T1JUX0hJTlRJTkdfU0NBTEVfRkFDVE9SKQogICAgIHZvaWQgc2V0SGludGluZ1NjYWxlRmFjdG9y
KFNrU2NhbGFyIGZhY3RvcikgeyBtX2hpbnRpbmdTY2FsZUZhY3RvciA9IGZhY3RvcjsgfQogICAg
IFNrU2NhbGFyIGhpbnRpbmdTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGludGluZ1Nj
YWxlRmFjdG9yOyB9CkBAIC0yNDgsNSArMjc3LDE0NSBAQCBwcml2YXRlOgogI2VuZGlmCiB9Owog
CitpbmxpbmUgU2tEZXZpY2UqIFBsYXRmb3JtQ29udGV4dFNraWE6OmdldERldmljZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY2FudmFzLT5nZXREZXZpY2UoKTsKK30KKworaW5saW5lIFNrRGV2
aWNlKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRUb3BEZXZpY2UoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2NhbnZhcy0+Z2V0VG9wRGV2aWNlKCk7Cit9CisKK2lubGluZSBib29sIFBsYXRmb3Jt
Q29udGV4dFNraWE6OnJlYWRQaXhlbHMoU2tCaXRtYXAqIGJpdG1hcCwgaW50IHgsIGludCB5LAor
ICAgIFNrQ2FudmFzOjpDb25maWc4ODg4IGNvbmZpZzg4ODgpCit7CisgICAgcmV0dXJuIG1fY2Fu
dmFzLT5yZWFkUGl4ZWxzKGJpdG1hcCwgeCwgeSwgY29uZmlnODg4OCk7Cit9CisKK2lubGluZSB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OndyaXRlUGl4ZWxzKGNvbnN0IFNrQml0bWFwJiBiaXRt
YXAsIGludCB4LCBpbnQgeSwKKyAgICBTa0NhbnZhczo6Q29uZmlnODg4OCBjb25maWc4ODg4KQor
eworICAgIG1fY2FudmFzLT53cml0ZVBpeGVscyhiaXRtYXAsIHgsIHksIGNvbmZpZzg4ODgpOwor
fQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjppc0RyYXdpbmdUb0xheWVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPmlzRHJhd2luZ1RvTGF5ZXIoKTsKK30KKwor
aW5saW5lIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y2xpcFBhdGgoY29uc3QgU2tQYXRoJiBw
YXRoLCBBbnRpQWxpYXNpbmdNb2RlIGFhLCBTa1JlZ2lvbjo6T3Agb3ApCit7CisgICAgcmV0dXJu
IG1fY2FudmFzLT5jbGlwUGF0aChwYXRoLCBvcCwgYWEgPT0gQW50aUFsaWFzZWQpOworfQorCitp
bmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlwUmVjdChjb25zdCBTa1JlY3QmIHJl
Y3QsIEFudGlBbGlhc2luZ01vZGUgYWEsIFNrUmVnaW9uOjpPcCBvcCkKK3sKKyAgICByZXR1cm4g
bV9jYW52YXMtPmNsaXBSZWN0KHJlY3QsIG9wLCBhYSA9PSBBbnRpQWxpYXNlZCk7Cit9CisKK2lu
bGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmdldENsaXBCb3VuZHMoU2tSZWN0KiBib3Vu
ZHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FudmFzLT5nZXRDbGlwQm91bmRzKGJvdW5kcyk7
Cit9CisKK2lubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldE1hdHJpeChjb25zdCBT
a01hdHJpeCYgbWF0cml4KQoreworICAgIG1fY2FudmFzLT5zZXRNYXRyaXgobWF0cml4KTsKK30K
KworaW5saW5lIGNvbnN0IFNrTWF0cml4JiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRUb3RhbE1h
dHJpeCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FudmFzLT5nZXRUb3RhbE1hdHJpeCgpOwor
fQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjb25jYXQoY29uc3QgU2tNYXRy
aXgmIG1hdHJpeCkKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPmNvbmNhdChtYXRyaXgpOworfQor
CitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyb3RhdGUoU2tTY2FsYXIgZGVncmVl
cykKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPnJvdGF0ZShkZWdyZWVzKTsKK30KKworaW5saW5l
IGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2NhbGUoU2tTY2FsYXIgc3gsIFNrU2NhbGFyIHN5
KQoreworICAgIHJldHVybiBtX2NhbnZhcy0+c2NhbGUoc3gsIHN5KTsKK30KKworaW5saW5lIGJv
b2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhbnNsYXRlKFNrU2NhbGFyIGR4LCBTa1NjYWxhciBk
eSkKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPnRyYW5zbGF0ZShkeCwgZHkpOworfQorCitpbmxp
bmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3Qml0bWFwKGNvbnN0IFNrQml0bWFwJiBi
aXRtYXAsIFNrU2NhbGFyIGxlZnQsIFNrU2NhbGFyIHRvcCwKKyAgICBjb25zdCBTa1BhaW50KiBw
YWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd0JpdG1hcChiaXRtYXAsIGxlZnQsIHRvcCwgcGFp
bnQpOworfQorCitpbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3Qml0bWFwUmVj
dChjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBjb25zdCBTa0lSZWN0KiBpc3JjLAorICAgIGNvbnN0
IFNrUmVjdCYgZHN0LCBjb25zdCBTa1BhaW50KiBwYWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJh
d0JpdG1hcFJlY3QoYml0bWFwLCBpc3JjLCBkc3QsIHBhaW50KTsKK30KKworaW5saW5lIHZvaWQg
UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd092YWwoY29uc3QgU2tSZWN0JiBvdmFsLCBjb25zdCBT
a1BhaW50JiBwYWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd092YWwob3ZhbCwgcGFpbnQpOwor
CisgICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCisgICAgICAgIG1fb3BhcXVlUmVnaW9uLmRp
ZERyYXdCb3VuZGVkKHRoaXMsIG92YWwsIHBhaW50KTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZv
cm1Db250ZXh0U2tpYTo6ZHJhd1BhdGgoY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa1BhaW50
JiBwYWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOworCisgICAg
aWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCisgICAgICAgIG1fb3BhcXVlUmVnaW9uLmRpZERyYXdQ
YXRoKHRoaXMsIHBhdGgsIHBhaW50KTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6ZHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2RlIG1vZGUsIHNpemVfdCBjb3VudCwK
KyAgICBjb25zdCBTa1BvaW50IHB0c1tdLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBt
X2NhbnZhcy0+ZHJhd1BvaW50cyhtb2RlLCBjb3VudCwgcHRzLCBwYWludCk7CisKKyAgICBpZiAo
bV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd1BvaW50
cyh0aGlzLCBtb2RlLCBjb3VudCwgcHRzLCBwYWludCk7Cit9CisKK2lubGluZSB2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OmRyYXdSZWN0KGNvbnN0IFNrUmVjdCYgcmVjdCwgY29uc3QgU2tQYWlu
dCYgcGFpbnQpCit7CisgICAgbV9jYW52YXMtPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKKworICAg
IGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQorICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3
UmVjdCh0aGlzLCByZWN0LCBwYWludCwgMCk7Cit9CisKK2lubGluZSB2b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OmRyYXdJUmVjdChjb25zdCBTa0lSZWN0JiByZWN0LCBjb25zdCBTa1BhaW50JiBw
YWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd0lSZWN0KHJlY3QsIHBhaW50KTsKK30KKworaW5s
aW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1Bvc1RleHQoY29uc3Qgdm9pZCogdGV4
dCwgc2l6ZV90IGJ5dGVMZW5ndGgsCisgICAgY29uc3QgU2tQb2ludCBwb3NbXSwgY29uc3QgU2tQ
YWludCYgcGFpbnQpCit7CisgICAgbV9jYW52YXMtPmRyYXdQb3NUZXh0KHRleHQsIGJ5dGVMZW5n
dGgsIHBvcywgcGFpbnQpOworfQorCitpbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpk
cmF3UG9zVGV4dEgoY29uc3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVMZW5ndGgsCisgICAgY29u
c3QgU2tTY2FsYXIgeHBvc1tdLCBTa1NjYWxhciBjb25zdFksIGNvbnN0IFNrUGFpbnQmIHBhaW50
KQoreworICAgIG1fY2FudmFzLT5kcmF3UG9zVGV4dEgodGV4dCwgYnl0ZUxlbmd0aCwgeHBvcywg
Y29uc3RZLCBwYWludCk7Cit9CisKK2lubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRy
YXdUZXh0T25QYXRoKGNvbnN0IHZvaWQqIHRleHQsIHNpemVfdCBieXRlTGVuZ3RoLAorICAgIGNv
bnN0IFNrUGF0aCYgcGF0aCwgY29uc3QgU2tNYXRyaXgqIG1hdHJpeCwgY29uc3QgU2tQYWludCYg
cGFpbnQpCit7CisgICAgbV9jYW52YXMtPmRyYXdUZXh0T25QYXRoKHRleHQsIGJ5dGVMZW5ndGgs
IHBhdGgsIG1hdHJpeCwgcGFpbnQpOworfQorCiB9CiAjZW5kaWYgLy8gUGxhdGZvcm1Db250ZXh0
U2tpYV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1NraWFGb250V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
U2tpYUZvbnRXaW4uY3BwCmluZGV4IGE2ZjM3Y2ZmMDc0ZTJiYzIzMDM5YjUzOTM5MzYwY2E3ZmIw
MWIzZDguLjNkZGMzY2E2NWI3Nzg4ODY1NTYwMzViYTkxMTlmMTkwYTU0ZDc3MGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4u
Y3BwCkBAIC05OSw3ICs5OSw3IEBAIGJvb2wgd2luZG93c0NhbkhhbmRsZVRleHREcmF3aW5nV2l0
aG91dFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB9CiAjZW5kaWYKIAotc3RhdGlj
IHZvaWQgc2tpYURyYXdUZXh0KFNrQ2FudmFzKiBjYW52YXMsCitzdGF0aWMgdm9pZCBza2lhRHJh
d1RleHQoUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTa1BvaW50JiBwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICBTa1Bh
aW50KiBwYWludCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXT1JEKiBnbHlwaHMs
CkBAIC0xMjQsNyArMTI0LDcgQEAgc3RhdGljIHZvaWQgc2tpYURyYXdUZXh0KFNrQ2FudmFzKiBj
YW52YXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHkgKyAtU2tJbnRUb1NjYWxhcihvZmZzZXRz
W2ldLmR2KSk7CiAgICAgICAgICAgICB4ICs9IFNrSW50VG9TY2FsYXIoYWR2YW5jZXNbaV0pOwog
ICAgICAgICB9Ci0gICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMg
KiBzaXplb2YodWludDE2X3QpLCBwb3MsICpwYWludCk7CisgICAgICAgIGNvbnRleHQtPmRyYXdQ
b3NUZXh0KGdseXBocywgbnVtR2x5cGhzICogc2l6ZW9mKHVpbnQxNl90KSwgcG9zLCAqcGFpbnQp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIFNrQXV0b1NUQXJyYXk8a0xvY2FsR2x5cGhNYXggKiAy
LCBTa1NjYWxhcj4gc3RvcmFnZShudW1HbHlwaHMpOwogICAgICAgICBTa1NjYWxhciogeHBvcyA9
IHN0b3JhZ2UuZ2V0KCk7CkBAIC0xMzIsNyArMTMyLDcgQEAgc3RhdGljIHZvaWQgc2tpYURyYXdU
ZXh0KFNrQ2FudmFzKiBjYW52YXMsCiAgICAgICAgICAgICB4cG9zW2ldID0geDsKICAgICAgICAg
ICAgIHggKz0gU2tJbnRUb1NjYWxhcihhZHZhbmNlc1tpXSk7CiAgICAgICAgIH0KLSAgICAgICAg
Y2FudmFzLT5kcmF3UG9zVGV4dEgoZ2x5cGhzLCBudW1HbHlwaHMgKiBzaXplb2YodWludDE2X3Qp
LAorICAgICAgICBjb250ZXh0LT5kcmF3UG9zVGV4dEgoZ2x5cGhzLCBudW1HbHlwaHMgKiBzaXpl
b2YodWludDE2X3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cG9zLCB5LCAqcGFp
bnQpOwogICAgIH0KIH0KQEAgLTIxOCwxMCArMjE4LDkgQEAgc3RhdGljIHZvaWQgcGFpbnRTa2lh
VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEhGT05UIGhmb250LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTa1BvaW50KiBvcmlnaW4pCiB7CiAgICAgUGxhdGZvcm1Db250
ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0g
ICAgU2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCk7CiAgICAgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgdGV4dE1vZGUgPSBwbGF0Zm9ybUNvbnRleHQtPmdldFRleHREcmF3
aW5nTW9kZSgpOwogICAgIC8vIEVuc3VyZSBmb250IGxvYWQgZm9yIHByaW50aW5nLCBiZWNhdXNl
IFBERiBkZXZpY2UgbmVlZHMgaXQuCi0gICAgaWYgKGNhbnZhcy0+Z2V0VG9wRGV2aWNlKCktPmdl
dERldmljZUNhcGFiaWxpdGllcygpICYgU2tEZXZpY2U6OmtWZWN0b3JfQ2FwYWJpbGl0eSkKKyAg
ICBpZiAocGxhdGZvcm1Db250ZXh0LT5nZXRUb3BEZXZpY2UoKS0+Z2V0RGV2aWNlQ2FwYWJpbGl0
aWVzKCkgJiBTa0RldmljZTo6a1ZlY3Rvcl9DYXBhYmlsaXR5KQogICAgICAgICBQbGF0Zm9ybVN1
cHBvcnQ6OmVuc3VyZUZvbnRMb2FkZWQoaGZvbnQpOwogCiAgICAgLy8gRmlsbGluZyAoaWYgbmVj
ZXNzYXJ5KS4gVGhpcyBpcyB0aGUgY29tbW9uIGNhc2UuCkBAIC0yMzMsNyArMjMyLDcgQEAgc3Rh
dGljIHZvaWQgcGFpbnRTa2lhVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEhGT05UIGhm
b250LAogICAgIGJvb2wgZGlkRmlsbCA9IGZhbHNlOwogCiAgICAgaWYgKCh0ZXh0TW9kZSAmIFRl
eHRNb2RlRmlsbCkgJiYgKFNrQ29sb3JHZXRBKHBhaW50LmdldENvbG9yKCkpIHx8IHBhaW50Lmdl
dExvb3BlcigpKSkgewotICAgICAgICBza2lhRHJhd1RleHQoY2FudmFzLCAqb3JpZ2luLCAmcGFp
bnQsICZnbHlwaHNbMF0sICZhZHZhbmNlc1swXSwgJm9mZnNldHNbMF0sIG51bUdseXBocyk7Cisg
ICAgICAgIHNraWFEcmF3VGV4dChwbGF0Zm9ybUNvbnRleHQsICpvcmlnaW4sICZwYWludCwgJmds
eXBoc1swXSwgJmFkdmFuY2VzWzBdLCAmb2Zmc2V0c1swXSwgbnVtR2x5cGhzKTsKICAgICAgICAg
ZGlkRmlsbCA9IHRydWU7CiAgICAgfQogCkBAIC0yNjAsNyArMjU5LDcgQEAgc3RhdGljIHZvaWQg
cGFpbnRTa2lhVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIEhGT05UIGhmb250LAogICAg
ICAgICAgICAgcGFpbnQuc2V0TG9vcGVyKDApOwogICAgICAgICB9CiAKLSAgICAgICAgc2tpYURy
YXdUZXh0KGNhbnZhcywgKm9yaWdpbiwgJnBhaW50LCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0s
ICZvZmZzZXRzWzBdLCBudW1HbHlwaHMpOworICAgICAgICBza2lhRHJhd1RleHQocGxhdGZvcm1D
b250ZXh0LCAqb3JpZ2luLCAmcGFpbnQsICZnbHlwaHNbMF0sICZhZHZhbmNlc1swXSwgJm9mZnNl
dHNbMF0sIG51bUdseXBocyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAKaW5kZXggMWUyYzhkYWI4YTY1NTg4
MzBhOTA3Yzg2MTAxOTQzNzA0ZGY5NmJkYS4uYzg0MTk5NDNlYzU5OTQwZGNiOGE1MmU1ZTQ0OTYy
NjJjMjA4ZmRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9Ta2lhVXRpbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvU2tpYVV0aWxzLmNwcApAQCAtMTA2LDkgKzEwNiw5IEBAIENvbG9yIFNrUE1Db2xvclRv
V2ViQ29yZUNvbG9yKFNrUE1Db2xvciBwbSkKICAgICByZXR1cm4gU2tQTUNvbG9yVG9Db2xvcihw
bSk7CiB9CiAKLXZvaWQgQ2xpcFJlY3RUb0NhbnZhcyhjb25zdCBTa0NhbnZhcyYgY2FudmFzLCBj
b25zdCBTa1JlY3QmIHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpCit2b2lkIENsaXBSZWN0VG9D
YW52YXMoY29uc3QgUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgU2tSZWN0JiBz
cmNSZWN0LCBTa1JlY3QqIGRlc3RSZWN0KQogewotICAgIGlmICghY2FudmFzLmdldENsaXBCb3Vu
ZHMoZGVzdFJlY3QpIHx8ICFkZXN0UmVjdC0+aW50ZXJzZWN0KHNyY1JlY3QpKQorICAgIGlmICgh
Y29udGV4dC0+Z2V0Q2xpcEJvdW5kcyhkZXN0UmVjdCkgfHwgIWRlc3RSZWN0LT5pbnRlcnNlY3Qo
c3JjUmVjdCkpCiAgICAgICAgIGRlc3RSZWN0LT5zZXRFbXB0eSgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuaAppbmRleCA2ODFk
Y2Q1NWU3OTdiNmQ1YTllMDQ5N2JkZTAyNDAwNDg1ODIxZDg4Li4zNThmODZkMTE2OTk1ZDBlMzE0
NGVlNDFmODA4ZjIwNDcyNzFkYjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmgKQEAgLTY3LDcgKzY3LDcgQEAgaW5saW5lIFNrU2Nh
bGFyIFdlYkNvcmVEb3VibGVUb1NrU2NhbGFyKGRvdWJsZSBkKQogLy8gY2xpcCwgZG9pbmcgdGhl
IG5lY2Vzc2FyeSBjb29yZGluYXRlIHRyYW5zZm9ybXMuCiAvLwogLy8gc3JjUmVjdCBhbmQgZGVz
dFJlY3QgY2FuIGJlIHRoZSBzYW1lLgotdm9pZCBDbGlwUmVjdFRvQ2FudmFzKGNvbnN0IFNrQ2Fu
dmFzJiwgY29uc3QgU2tSZWN0JiBzcmNSZWN0LCBTa1JlY3QqIGRlc3RSZWN0KTsKK3ZvaWQgQ2xp
cFJlY3RUb0NhbnZhcyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiwgY29uc3QgU2tSZWN0JiBz
cmNSZWN0LCBTa1JlY3QqIGRlc3RSZWN0KTsKIAogLy8gRGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gV2Vi
S2l0IHBvaW50IGlzIGNvbnRhaW5lZCBpbiBhIHBhdGgKIGJvb2wgU2tQYXRoQ29udGFpbnNQb2lu
dChTa1BhdGgqLCBjb25zdCBGbG9hdFBvaW50JiwgU2tQYXRoOjpGaWxsVHlwZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcApp
bmRleCBhZTMwOTBkOGM1MDdlOTQwNDU5ZmZlYTc0MGEzMGI3MDBiY2I3MmYxLi5lM2JjYjUzZGMw
NjRmYmEwZTEwNjQ5Zjg3MzRkZTFjZjNmYWM4OGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAKQEAgLTY2LDcgKzY2LDcg
QEAgc3RhdGljIHZvaWQgZHJhd05hdGl2ZVJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAog
CiBzdGF0aWMgQ29sb3IgZ2V0UGl4ZWxBdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB4
LCBpbnQgeSkKIHsKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNl
KTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogICAgIHJldHVybiBDb2xv
cigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBSR0JBMzIqPihiaXRtYXAuZ2V0QWRkcjMyKHgsIHkp
KSk7CiB9CiAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIENvbG9yIGdldFBpeGVsQXQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBpbnQgeCwgaW50IHkpCiAvLyBXaW5kb3dzIG1lc3NpbmcgaXQg
dXAuCiBzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKIHsKLSAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1h
cCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCkt
PmFjY2Vzc0JpdG1hcChmYWxzZSkpOworICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0
PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdldFRvcERldmljZSgpLT5h
Y2Nlc3NCaXRtYXAoZmFsc2UpKTsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGJpdG1hcC5oZWln
aHQoKTsgeSsrKSB7CiAgICAgICAgIHVpbnQzMl90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAs
IHkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGJpdG1hcC53aWR0aCgpOyB4KyspCkBA
IC04NSw3ICs4NSw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0KQogLy8gQ2xlYXJzIHRoZSBhbHBoYSBjaGFubmVsIG9uIHRo
ZSBzcGVjaWZpZWQgcGl4ZWwuCiBzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFQaXhlbChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB4LCBpbnQgeSkKIHsKLSAgICBTa0JpdG1hcCYg
Yml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOworICAgIFNr
Qml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKICAgICAqYml0
bWFwLmdldEFkZHIzMih4LCB5KSAmPSAweDAwRkZGRkZGOwogfQogCkBAIC02MTYsNyArNjE2LDcg
QEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFNjYWxlKQogICAgICAgICAvLyB0aGUgaGVscGVyIGdv
ZXMgb3V0IG9mIHNjb3BlLiBXZSBkb24ndCB3YW50IHRvIGNhbGwKICAgICAgICAgLy8gY2xlYXJU
b3BMYXllckFscGhhQ2hhbm5lbCBiZWNhdXNlIHRoYXQgd2lsbCBhY3R1YWxseSBjbGVhciB0aGUg
d2hvbGUKICAgICAgICAgLy8gY2FudmFzIChzaW5jZSB3ZSBoYXZlIG5vIGV4dHJhIGxheWVyISku
Ci0gICAgICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oaGVscGVy
LmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+
YWNjZXNzQml0bWFwKGZhbHNlKSk7CisgICAgICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9j
YXN0PFNrQml0bWFwJj4oaGVscGVyLmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmdldFRv
cERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKICAgICAgICAgKmJpdG1hcC5nZXRBZGRy
MzIoMiwgMikgJj0gMHgwMEZGRkZGRjsKICAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOwogICAg
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175271</attachid>
            <date>2012-11-20 13:53:04 -0800</date>
            <delta_ts>2012-11-20 14:24:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102694-20121120165052.patch</filename>
            <type>text/plain</type>
            <size>70984</size>
            <attacher name="Florin Malita">fmalita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJjZDZlODk3MDI5ZjQ3
NTc1NTc2ZTI4ZGJkYmEzYTA5NjE3MDYxYS4uZWRkM2ZkMjJmYThmMjAyNjgwZjMyODg5ODdkMDkz
NjYzZDEwYTNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExOCBAQAorMjAxMi0xMS0yMCAgRmxv
cmluIE1hbGl0YSAgPGZtYWxpdGFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtTa2lhXSBFbmNh
cHN1bGF0ZSBhY2Nlc3MgdG8gUGxhdGZvcm1Db250ZXh0U2tpYSdzIFNrQ2FudmFzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2OTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgU2tDYW52YXMtZXF1
aXZhbGVudCBtZXRob2RzIHRvIFBsYXRmb3JtQ29udGV4dFNraWEsIGFuZCByZWZhY3RvciBkaXJl
Y3QgY2FudmFzIGNhbGwKKyAgICAgICAgc2l0ZXMgdG8gdXNlIHRoZXNlIHdyYXBwZXJzIGluc3Rl
YWQuIFRoaXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNhbnZhcygpIHVzZXJzIGZyb20gOTArCisg
ICAgICAgIHRvIDIyIChtb3N0bHkgdGhlbWUvdWkgY29kZSkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzOiByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1UaGVtZUNocm9taXVtTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1U
aGVtZUNocm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyYW5zcGFyZW5jeVdpbjo6Y29tcHV0ZUxheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lXaW46OnNldHVwTGF5ZXJGb3JPcGFxdWVDb21wb3NpdGVMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmluaXRpYWxpemVOZXdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRlT3BhcXVlQ29tcG9z
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRlVGV4dENv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46Om1ha2VMYXllck9w
YXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQmxlbmRT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTa2lhKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb2xvck1hdHJpeFNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNr
aWEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUNvbXBvbmVu
dFRyYW5zZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVy
OjpwbGF0Zm9ybUFwcGx5U2tpYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9za2lhL0ZFTGlnaHRpbmdTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6
OnBsYXRmb3JtQXBwbHlTa2lhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9Gb250SGFyZkJ1enouY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c0NvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRk
SW5uZXJSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Nv
bnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQ29u
dmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxp
cHNlKToKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdPdXRlclBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJv
dW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJv
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2Up
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OnRvRGF0YVVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1Jlc2FtcGxlZEJpdG1hcCk6CisgICAgICAg
IChXZWJDb3JlOjpoYXNOb245MHJvdGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U2tC
aXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2F2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpiZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpjb3VsZFVzZUxDRFJlbmRlcmVkVGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisgICAgICAgIChQ
bGF0Zm9ybUNvbnRleHRTa2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNr
aWE6OmxheWVyQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNvbnRleHRTa2lhOjp3cml0ZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUNvbnRleHRTa2lhOjppc0RyYXdpbmdUb0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OmlzVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29u
dGV4dFNraWE6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNr
aWE6OmNsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6Omdl
dENsaXBCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmdldFRvdGFs
TWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNvbmNhdCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpyb3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQ29udGV4dFNraWE6OmRyYXdCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0U2tpYTo6ZHJhd0JpdG1hcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1Db250ZXh0U2tpYTo6ZHJhd092YWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tp
YTo6ZHJhd1BvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpk
cmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3SVJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1Bvc1RleHQp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1Bvc1RleHRIKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdUZXh0T25QYXRoKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFGb250V2luLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnNraWFEcmF3VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFNraWFU
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGlwUmVjdFRvQ2FudmFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1NraWFVdGlscy5oOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMTEt
MjAgIEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgV2VlayBw
aWNrZXIgd2lkdGggaXMgdG9vIHNtYWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDk2
ZmQxZWE5NzNhN2Y3Yzk5NjQ4Mzg1MmVlMzM1YWJjNzcxNjQ3NmQuLjAzMTc4NjIyNWI5MWUwZGQ2
ODAxNDRmZTZkNzNkMDJhYmI4ZjIwZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTItMTEtMjAgIEZsb3JpbiBNYWxpdGEgIDxmbWFsaXRhQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBbU2tpYV0gRW5jYXBzdWxhdGUgYWNjZXNzIHRvIFBsYXRmb3JtQ29u
dGV4dFNraWEncyBTa0NhbnZhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAyNjk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVXNlIFBsYXRmb3JtQ29udGV4dFNraWEncyB3cmFwcGVyIG1ldGhvZHMgaW5z
dGVhZCBvZiBhY2Nlc3NpbmcgdGhlIGNhbnZhcyBkaXJlY3RseS4KKworICAgICAgICAqIHRlc3Rz
L1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGl4ZWxBdCk6
CisgICAgICAgIChXZWJDb3JlOjpjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBoYVBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlRF
U1QpOgorCiAyMDEyLTExLTE5ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBDaHJvbWl1bSBXaW4gY29tcGlsYXRpb24gYWZ0
ZXIgcjEzNTE5Ni4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1BsYXRmb3JtVGhlbWVDaHJvbWl1bUxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1BsYXRmb3JtVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCBiZTRmODUwYTg1
ZTI3NmE1OWIwYjkwMjM1YzAxOTBkMGFkNTkzZDA5Li43MGNjNjRiYTk2ZWUyNDQ1NmZiMjE1ZWE0
MmNmZTVhMjdlODM4MGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9QbGF0Zm9ybVRoZW1lQ2hyb21pdW1MaW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1UaGVtZUNocm9taXVtTGludXguY3BwCkBAIC05OSw3
ICs5OSw3IEBAIFNrQ29sb3IgUGxhdGZvcm1UaGVtZUNocm9taXVtTGludXg6Om91dGxpbmVDb2xv
cihjb25zdCBTa1NjYWxhciBoc3YxWzNdLCBjb25zdCBTCiAKIHZvaWQgUGxhdGZvcm1UaGVtZUNo
cm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3Qg
SW50UmVjdCYgcmVjdCwgQXJyb3dEaXJlY3Rpb24gZGlyZWN0aW9uLCBDb250cm9sU3RhdGVzIHN0
YXRlcykKIHsKLSAgICBTa0NhbnZhcyogY29uc3QgY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQg
PSBnYy0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaW50IHdpZHRoTWlkZGxlLCBsZW5ndGhNaWRk
bGU7CiAgICAgU2tQYWludCBwYWludDsKICAgICBpZiAoZGlyZWN0aW9uID09IE5vcnRoIHx8IGRp
cmVjdGlvbiA9PSBTb3V0aCkgewpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgUGxhdGZvcm1UaGVt
ZUNocm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgY29u
c3QgSW50CiAgICAgc2tyZWN0LnNldChyZWN0LngoKSwgcmVjdC55KCksIHJlY3QueCgpICsgcmVj
dC53aWR0aCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIC8vIFBhaW50IHRoZSBi
YWNrZ3JvdW5kICh0aGUgYXJlYSB2aXNpYmxlIGJlaGluZCB0aGUgcm91bmRlZCBjb3JuZXJzKS4K
ICAgICBwYWludC5zZXRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOwotICAgIGNhbnZhcy0+ZHJhd0lS
ZWN0KHNrcmVjdCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd0lSZWN0KHNrcmVj
dCwgcGFpbnQpOwogCiAgICAgLy8gUGFpbnQgdGhlIGJ1dHRvbidzIG91dGxpbmUgYW5kIGZpbGwg
dGhlIG1pZGRsZQogICAgIFNrUGF0aCBvdXRsaW5lOwpAQCAtMTcxLDE0ICsxNzEsMTQgQEAgdm9p
ZCBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRBcnJvd0J1dHRvbihHcmFwaGljc0Nv
bnRleHQqIGdjLCBjb25zdCBJbnQKIAogICAgIHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxs
X1N0eWxlKTsKICAgICBwYWludC5zZXRDb2xvcihidXR0b25Db2xvcik7Ci0gICAgY2FudmFzLT5k
cmF3UGF0aChvdXRsaW5lLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3UGF0aChv
dXRsaW5lLCBwYWludCk7CiAKICAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CiAgICAgcGFp
bnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7CiAgICAgU2tTY2FsYXIgdGh1bWJI
U1ZbM107CiAgICAgU2tDb2xvclRvSFNWKHRodW1iSW5hY3RpdmVDb2xvcigpLCB0aHVtYkhTVik7
CiAgICAgcGFpbnQuc2V0Q29sb3Iob3V0bGluZUNvbG9yKHRyYWNrSFNWLCB0aHVtYkhTVikpOwot
ICAgIGNhbnZhcy0+ZHJhd1BhdGgob3V0bGluZSwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4
dC0+ZHJhd1BhdGgob3V0bGluZSwgcGFpbnQpOwogCiAgICAgLy8gSWYgdGhlIGJ1dHRvbiBpcyBk
aXNhYmxlZCBvciByZWFkLW9ubHksIHRoZSBhcnJvdyBpcyBkcmF3biB3aXRoIHRoZSBvdXRsaW5l
IGNvbG9yLgogICAgIGlmIChzdGF0ZXMgJiBFbmFibGVkU3RhdGUgJiYgIShzdGF0ZXMgJiBSZWFk
T25seVN0YXRlKSkKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIFBsYXRmb3JtVGhlbWVDaHJvbWl1
bUxpbnV4OjpwYWludEFycm93QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludAog
ICAgIH0KICAgICBwYXRoLmNsb3NlKCk7CiAKLSAgICBjYW52YXMtPmRyYXdQYXRoKHBhdGgsIHBh
aW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQtPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKaW5kZXggYWZk
MDhkYjc4MDZmOWJjZDcwYjBjZjI1ZTJjNGJlN2JhYzEyNGIzOC4uMmVmYzJhNGRmNTNhYzM3YWMw
YTA2Y2QzMzI5NDM1MTYxNjNhNzU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCkBAIC0x
NDAsNyArMTQwLDcgQEAgdm9pZCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0aWFs
aXplRm9yR0RJKCkKICAgICAgICAgLy8gdGhpcyBtb2RlIGFuZCBpdCB3aWxsIGFwcGx5IHRoZSBj
b2xvci4KICAgICAgICAgbV90cmFuc3BhcmVuY3kuc2V0VGV4dENvbXBvc2l0ZUNvbG9yKGNvbG9y
KTsKICAgICAgICAgY29sb3IgPSBTa0NvbG9yU2V0UkdCKDAsIDAsIDApOwotICAgIH0gZWxzZSBp
ZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIgfHwgbV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZh
cygpLT5pc0RyYXdpbmdUb0xheWVyKCkpIHsKKyAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRyYW5z
cGFyZW5jeUxheWVyIHx8IG1fcGxhdGZvcm1Db250ZXh0LT5pc0RyYXdpbmdUb0xheWVyKCkpIHsK
ICAgICAgICAgLy8gV2hlbiB3ZSdyZSBkcmF3aW5nIGEgd2ViIHBhZ2UsIHdlIGtub3cgdGhlIGJh
Y2tncm91bmQgaXMgb3BhcXVlLAogICAgICAgICAvLyBidXQgaWYgd2UncmUgZHJhd2luZyB0byBh
IGxheWVyLCB3ZSBzdGlsbCBuZWVkIGV4dHJhIHdvcmsuCiAgICAgICAgIGxheWVyTW9kZSA9IFRy
YW5zcGFyZW5jeVdpbjo6T3BhcXVlQ29tcG9zaXRlTGF5ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2lu
LmNwcAppbmRleCAyOGIxYjhlNjhjMjAxYTVmOTRiNjkyOTE5ZWJjMDU4MGZiYzI3YTNiLi41YjRm
YmRlOWE5Y2M1NTJlODY3N2MzYWU3YjBhZGE1MzZhOWRiNzgzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5j
eVdpbi5jcHAKQEAgLTQ5LDE0ICs0OSw5IEBAIG5hbWVzcGFjZSB7CiAvLyBpbnRvLiBCdWZmZXJz
IGxhcmdlciB0aGFuIHRoaXMgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB3ZSdyZSBkb25lIHdpdGgg
dGhlbS4KIGNvbnN0IGludCBtYXhDYWNoZWRCdWZmZXJQaXhlbFNpemUgPSA2NTUzNjsKIAotaW5s
aW5lIFNrQ2FudmFzKiBjYW52YXNGb3JDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKK2lubGluZSBjb25zdCBTa0JpdG1hcCogYml0bWFwRm9yQ29udGV4dChjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpOwotfQotCi1pbmxpbmUgY29uc3QgU2tCaXRtYXAmIGJpdG1hcEZvckNv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBjYW52
YXNGb3JDb250ZXh0KGNvbnRleHQpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNl
KTsKKyAgICByZXR1cm4gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+bGF5ZXJCaXRtYXAoKTsK
IH0KIAogdm9pZCBjb21wb3NpdGVUb0NvcHkoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBzb3VyY2VM
YXllcnMsCkBAIC03Niw3ICs3MSw3IEBAIHZvaWQgY29tcG9zaXRlVG9Db3B5KGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgc291cmNlTGF5ZXJzLAogICAgICAgICBpbnQgeTsKICAgICB9OwogICAgIFZl
Y3RvcjxEZXZpY2VJbmZvPiBkZXZpY2VzOwotICAgIFNrQ2FudmFzKiBzb3VyY2VDYW52YXMgPSBj
YW52YXNGb3JDb250ZXh0KHNvdXJjZUxheWVycyk7CisgICAgU2tDYW52YXMqIHNvdXJjZUNhbnZh
cyA9IHNvdXJjZUxheWVycy5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CiAgICAgU2tDYW52
YXM6OkxheWVySXRlciBpdGVyKHNvdXJjZUNhbnZhcywgZmFsc2UpOwogICAgIHdoaWxlICghaXRl
ci5kb25lKCkpIHsKICAgICAgICAgZGV2aWNlcy5hcHBlbmQoRGV2aWNlSW5mbyhpdGVyLmRldmlj
ZSgpLCBpdGVyLngoKSwgaXRlci55KCkpKTsKQEAgLTg0LDcgKzc5LDcgQEAgdm9pZCBjb21wb3Np
dGVUb0NvcHkoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBzb3VyY2VMYXllcnMsCiAgICAgfQogCiAg
ICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGNhbnZhcyBmb3IgdGhlIGNvbXBvc2l0aW5nIGludG8g
dGhlIGRlc3RpbmF0aW9uLgotICAgIFNrQml0bWFwKiBkZXN0Qm1wID0gY29uc3RfY2FzdDxTa0Jp
dG1hcCo+KCZiaXRtYXBGb3JDb250ZXh0KGRlc3RDb250ZXh0KSk7CisgICAgU2tCaXRtYXAqIGRl
c3RCbXAgPSBjb25zdF9jYXN0PFNrQml0bWFwKj4oYml0bWFwRm9yQ29udGV4dChkZXN0Q29udGV4
dCkpOwogICAgIFNrQ2FudmFzIGRlc3RDYW52YXMoKmRlc3RCbXApOwogICAgIGRlc3RDYW52YXMu
c2V0TWF0cml4KG1hdHJpeCk7CiAKQEAgLTIxNCw3ICsyMDksNyBAQCB2b2lkIFRyYW5zcGFyZW5j
eVdpbjo6Y29tcHV0ZUxheWVyU2l6ZSgpCiAgICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IGNsaXBw
aW5nIGZvciBvdGhlciBtb2RlcwogICAgICAgICBJbnRSZWN0IGNsaXBwZWRTb3VyY2VSZWN0ID0g
bV9zb3VyY2VSZWN0OwogICAgICAgICBTa1JlY3QgY2xpcEJvdW5kczsKLSAgICAgICAgaWYgKG1f
ZGVzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0Q2xpcEJvdW5kcygm
Y2xpcEJvdW5kcykpIHsKKyAgICAgICAgaWYgKG1fZGVzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5nZXRDbGlwQm91bmRzKCZjbGlwQm91bmRzKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0
IGNsaXBSZWN0KGNsaXBCb3VuZHMubGVmdCgpLCBjbGlwQm91bmRzLnRvcCgpLCBjbGlwQm91bmRz
LndpZHRoKCksIGNsaXBCb3VuZHMuaGVpZ2h0KCkpOwogICAgICAgICAgICAgY2xpcHBlZFNvdXJj
ZVJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpKTsKICAgICAgICAgfQpA
QCAtMjY2LDcgKzI2MSw3IEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpzZXR1cExheWVyRm9yT3Bh
cXVlQ29tcG9zaXRlTGF5ZXIoKQogCiAgICAgLy8gU2F2ZSB0aGUgcmVmZXJlbmNlIGxheWVyIHNv
IHdlIGNhbiB0ZWxsIHdoYXQgY2hhbmdlZC4KICAgICBTa0NhbnZhcyByZWZlcmVuY2VDYW52YXMo
Km1fcmVmZXJlbmNlQml0bWFwKTsKLSAgICByZWZlcmVuY2VDYW52YXMuZHJhd0JpdG1hcChiaXRt
YXBGb3JDb250ZXh0KCptX2RyYXdDb250ZXh0KSwgMCwgMCk7CisgICAgcmVmZXJlbmNlQ2FudmFz
LmRyYXdCaXRtYXAoKmJpdG1hcEZvckNvbnRleHQoKm1fZHJhd0NvbnRleHQpLCAwLCAwKTsKICAg
ICAvLyBMYXllciByZWN0IHJlcHJlc2VudHMgdGhlIHBhcnQgb2YgdGhlIG9yaWdpbmFsIGxheWVy
LgogfQogCkBAIC0zOTMsNyArMzg4LDcgQEAgdm9pZCBUcmFuc3BhcmVuY3lXaW46OmluaXRpYWxp
emVOZXdDb250ZXh0KCkKICAgICAgICAgLy8gYWxsIGxheWVyIG1vZGVzIHdpbGwgY2xlYXIgaXQg
aW4gdGhlaXIgaW5pdGlhbGl6YXRpb24uCiAgICAgICAgIG1fbGF5ZXJCdWZmZXIgPSBtX2NhY2hl
ZEJ1ZmZlcnMtPmRlc3RCaXRtYXAoKTsKICAgICAgICAgbV9kcmF3Q29udGV4dCA9IG1fY2FjaGVk
QnVmZmVycy0+ZGVzdEJpdG1hcCgpLT5jb250ZXh0KCk7Ci0gICAgICAgIGJpdG1hcEZvckNvbnRl
eHQoKm1fZHJhd0NvbnRleHQpLmVyYXNlQVJHQigwLCAwLCAwLCAwKTsKKyAgICAgICAgYml0bWFw
Rm9yQ29udGV4dCgqbV9kcmF3Q29udGV4dCktPmVyYXNlQVJHQigwLCAwLCAwLCAwKTsKICAgICAg
ICAgbV9yZWZlcmVuY2VCaXRtYXAgPSBtX2NhY2hlZEJ1ZmZlcnMtPnJlZmVyZW5jZUJpdG1hcCgp
OwogICAgICAgICBtX3JlZmVyZW5jZUJpdG1hcC0+ZXJhc2VBUkdCKDAsIDAsIDAsIDApOwogICAg
ICAgICBtX3ZhbGlkTGF5ZXIgPSB0cnVlOwpAQCAtNDE2LDExICs0MTEsMTAgQEAgdm9pZCBUcmFu
c3BhcmVuY3lXaW46OmNvbXBvc2l0ZU9wYXF1ZUNvbXBvc2l0ZSgpCiAgICAgaWYgKCFtX3ZhbGlk
TGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNrQ2FudmFzKiBkZXN0Q2FudmFzID0gY2Fu
dmFzRm9yQ29udGV4dCgqbV9kZXN0Q29udGV4dCk7Ci0gICAgZGVzdENhbnZhcy0+c2F2ZSgpOwor
ICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIGRlc3RQbGF0Zm9ybUNvbnRleHQgPSBtX2Rlc3RDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBkZXN0UGxhdGZvcm1Db250ZXh0LT5zYXZlKCk7
CiAKLSAgICBTa0JpdG1hcCogYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCo+KAotICAgICAg
ICAmYml0bWFwRm9yQ29udGV4dCgqbV9sYXllckJ1ZmZlci0+Y29udGV4dCgpKSk7CisgICAgU2tC
aXRtYXAqIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAqPihiaXRtYXBGb3JDb250ZXh0KCpt
X2xheWVyQnVmZmVyLT5jb250ZXh0KCkpKTsKICAgICAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdp
bGwgYmUgY2FsbGVkIGZvciBXaGl0ZUxheWVyIGFzIHdlbGwsIHdoaWNoIHdlIGRvbid0IHdhbnQK
ICAgICAvLyB0byBjaGFuZ2UuCkBAIC00NTIsNyArNDQ2LDcgQEAgdm9pZCBUcmFuc3BhcmVuY3lX
aW46OmNvbXBvc2l0ZU9wYXF1ZUNvbXBvc2l0ZSgpCiAgICAgICAgIC8vIGp1c3QgZHJhdyB0aGUg
aW1hZ2UgZnJvbSBpbnNpZGUgdGhlIGRlc3RpbmF0aW9uIGNvbnRleHQuCiAgICAgICAgIFNrTWF0
cml4IGlkZW50aXR5OwogICAgICAgICBpZGVudGl0eS5yZXNldCgpOwotICAgICAgICBkZXN0Q2Fu
dmFzLT5zZXRNYXRyaXgoaWRlbnRpdHkpOworICAgICAgICBkZXN0UGxhdGZvcm1Db250ZXh0LT5z
ZXRNYXRyaXgoaWRlbnRpdHkpOwogCiAgICAgICAgIGRlc3RSZWN0LnNldChtX3RyYW5zZm9ybWVk
U291cmNlUmVjdC54KCksIG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0LnkoKSwgbV90cmFuc2Zvcm1l
ZFNvdXJjZVJlY3QubWF4WCgpLCBtX3RyYW5zZm9ybWVkU291cmNlUmVjdC5tYXhZKCkpOwogICAg
IH0gZWxzZQpAQCAtNDY1LDggKzQ1OSw4IEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21wb3Np
dGVPcGFxdWVDb21wb3NpdGUoKQogICAgIC8vIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIHNwZWNpZnkg
dGhlIHNvdXJjZSBsYXllciBzdWJzZXQsIHNpbmNlIHRoZSBiaXRtYXAKICAgICAvLyBtYXkgaGF2
ZSBiZWVuIGNhY2hlZCBhbmQgaXQgY291bGQgYmUgbGFyZ2VyIHRoYW4gd2hhdCB3ZSdyZSB1c2lu
Zy4KICAgICBTa0lSZWN0IHNvdXJjZVJlY3QgPSB7IDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCks
IG1fbGF5ZXJTaXplLmhlaWdodCgpIH07Ci0gICAgZGVzdENhbnZhcy0+ZHJhd0JpdG1hcFJlY3Qo
KmJpdG1hcCwgJnNvdXJjZVJlY3QsIGRlc3RSZWN0LCAmcGFpbnQpOwotICAgIGRlc3RDYW52YXMt
PnJlc3RvcmUoKTsKKyAgICBkZXN0UGxhdGZvcm1Db250ZXh0LT5kcmF3Qml0bWFwUmVjdCgqYml0
bWFwLCAmc291cmNlUmVjdCwgZGVzdFJlY3QsICZwYWludCk7CisgICAgZGVzdFBsYXRmb3JtQ29u
dGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRlVGV4
dENvbXBvc2l0ZSgpCkBAIC00NzQsMTAgKzQ2OCwxMCBAQCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6
Y29tcG9zaXRlVGV4dENvbXBvc2l0ZSgpCiAgICAgaWYgKCFtX3ZhbGlkTGF5ZXIpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVmZmVyLT5j
b250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFj
Y2Vzc0JpdG1hcCh0cnVlKTsKKyAgICBjb25zdCBTa0JpdG1hcCogYml0bWFwID0gbV9sYXllckJ1
ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+bGF5ZXJCaXRtYXAoUGxhdGZvcm1D
b250ZXh0U2tpYTo6UmVhZFdyaXRlKTsKICAgICBTa0NvbG9yIHRleHRDb2xvciA9IG1fdGV4dENv
bXBvc2l0ZUNvbG9yLnJnYigpOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9sYXllclNpemUu
aGVpZ2h0KCk7IHkrKykgewotICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIz
MigwLCB5KTsKKyAgICAgICAgdWludDMyX3QqIHJvdyA9IGJpdG1hcC0+Z2V0QWRkcjMyKDAsIHkp
OwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbGF5ZXJTaXplLndpZHRoKCk7IHgrKykg
ewogICAgICAgICAgICAgLy8gVGhlIGFscGhhIGlzIHRoZSBhdmVyYWdlIG9mIHRoZSBSLCBHLCBh
bmQgQiBjaGFubmVscy4KICAgICAgICAgICAgIGludCBhbHBoYSA9IChTa0dldFBhY2tlZFIzMihy
b3dbeF0pICsgU2tHZXRQYWNrZWRHMzIocm93W3hdKSArIFNrR2V0UGFja2VkQjMyKHJvd1t4XSkp
IC8gMzsKQEAgLTQ4OCwyMCArNDgyLDIwIEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21wb3Np
dGVUZXh0Q29tcG9zaXRlKCkKICAgICB9CiAKICAgICAvLyBOb3cgdGhlIGxheWVyIGhhcyB0ZXh0
IHdpdGggdGhlIHByb3BlciBjb2xvciBhbmQgb3BhY2l0eS4KLSAgICBTa0NhbnZhcyogZGVzdENh
bnZhcyA9IGNhbnZhc0ZvckNvbnRleHQoKm1fZGVzdENvbnRleHQpOwotICAgIGRlc3RDYW52YXMt
PnNhdmUoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBkZXN0UGxhdGZvcm1Db250ZXh0ID0g
bV9kZXN0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgZGVzdFBsYXRmb3JtQ29udGV4
dC0+c2F2ZSgpOwogCiAgICAgLy8gV2Ugd2FudCB0byB1c2UgVW50cmFuc2Zvcm1lZCBzcGFjZSAo
c2VlIGFib3ZlKQogICAgIFNrTWF0cml4IGlkZW50aXR5OwogICAgIGlkZW50aXR5LnJlc2V0KCk7
Ci0gICAgZGVzdENhbnZhcy0+c2V0TWF0cml4KGlkZW50aXR5KTsKKyAgICBkZXN0UGxhdGZvcm1D
b250ZXh0LT5zZXRNYXRyaXgoaWRlbnRpdHkpOwogICAgIFNrUmVjdCBkZXN0UmVjdCA9IHsgbV90
cmFuc2Zvcm1lZFNvdXJjZVJlY3QueCgpLCBtX3RyYW5zZm9ybWVkU291cmNlUmVjdC55KCksIG1f
dHJhbnNmb3JtZWRTb3VyY2VSZWN0Lm1heFgoKSwgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QubWF4
WSgpIH07CiAKICAgICAvLyBOb3RlIHRoYXQgd2UgbmVlZCB0byBzcGVjaWZ5IHRoZSBzb3VyY2Ug
bGF5ZXIgc3Vic2V0LCBzaW5jZSB0aGUgYml0bWFwCiAgICAgLy8gbWF5IGhhdmUgYmVlbiBjYWNo
ZWQgYW5kIGl0IGNvdWxkIGJlIGxhcmdlciB0aGFuIHdoYXQgd2UncmUgdXNpbmcuCiAgICAgU2tJ
UmVjdCBzb3VyY2VSZWN0ID0geyAwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6
ZS5oZWlnaHQoKSB9OwotICAgIGRlc3RDYW52YXMtPmRyYXdCaXRtYXBSZWN0KGJpdG1hcCwgJnNv
dXJjZVJlY3QsIGRlc3RSZWN0LCAwKTsKLSAgICBkZXN0Q2FudmFzLT5yZXN0b3JlKCk7CisgICAg
ZGVzdFBsYXRmb3JtQ29udGV4dC0+ZHJhd0JpdG1hcFJlY3QoKmJpdG1hcCwgJnNvdXJjZVJlY3Qs
IGRlc3RSZWN0LCAwKTsKKyAgICBkZXN0UGxhdGZvcm1Db250ZXh0LT5yZXN0b3JlKCk7CiB9CiAK
IHZvaWQgVHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUoKQpAQCAtNTA5LDEwICs1MDMs
OSBAQCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVlKCkKICAgICBpZiAoIW1f
dmFsaWRMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNv
bnN0X2Nhc3Q8U2tCaXRtYXAmPihtX2RyYXdDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Ci0g
ICAgICAgIGNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpKTsKKyAg
ICBTa0JpdG1hcCogYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCo+KG1fZHJhd0NvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5sYXllckJpdG1hcChQbGF0Zm9ybUNvbnRleHRTa2lhOjpSZWFk
V3JpdGUpKTsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbGF5ZXJTaXplLmhlaWdodCgpOyB5
KyspIHsKLSAgICAgICAgdWludDMyX3QqIHJvdyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7Cisg
ICAgICAgIHVpbnQzMl90KiByb3cgPSBiaXRtYXAtPmdldEFkZHIzMigwLCB5KTsKICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBtX2xheWVyU2l6ZS53aWR0aCgpOyB4KyspCiAgICAgICAgICAg
ICByb3dbeF0gfD0gMHhGRjAwMDAwMDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVCbGVuZFNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQmxlbmRTa2lhLmNwcApp
bmRleCA4MDg5ZjNiNTBkNjA1OTZmZmI4NDY5YTU0YjViM2U0Zjg4ZjFiODYyLi5iNTk3YmEyYWU3
M2QwNjEwYzNmYjFhNTBhYmEyMGQ1N2YzNDAyZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVCbGVuZFNraWEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUJsZW5kU2tpYS5j
cHAKQEAgLTgwLDggKzgwLDcgQEAgYm9vbCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U2tpYSgpCiAg
ICAgU2tBdXRvVFVucmVmPFNrSW1hZ2VGaWx0ZXI+IGJsZW5kKG5ldyBTa0JsZW5kSW1hZ2VGaWx0
ZXIobW9kZSwgYmFja2dyb3VuZFNvdXJjZSkpOwogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGFp
bnQuc2V0SW1hZ2VGaWx0ZXIoYmxlbmQpOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Ci0gICAgY2FudmFz
LT5kcmF3Qml0bWFwKGZvcmVncm91bmRCaXRtYXAsIDAsIDAsICZwYWludCk7CisgICAgcmVzdWx0
SW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdCaXRtYXAoZm9yZWdyb3Vu
ZEJpdG1hcCwgMCwgMCwgJnBhaW50KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29sb3JN
YXRyaXhTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c2tpYS9GRUNvbG9yTWF0cml4U2tpYS5jcHAKaW5kZXggYWZmYmFlYWQwNDgwNTk3ZWZhOWMwM2Fi
ZmU3Y2JlMjM1NmYyYzAxMC4uMzIyOGNkOGEzOWRjOGVmODQ4ZjhkZDMwNjU0ZjY4NTJjYmU1NDhi
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
a2lhL0ZFQ29sb3JNYXRyaXhTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb2xvck1hdHJpeFNraWEuY3BwCkBAIC0xMjcsMTEgKzEy
NywxMCBAQCBib29sIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTa2lhKCkKICAgICBpZiAo
IW5hdGl2ZUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTa0NhbnZhcyogY2Fu
dmFzID0gcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
OwogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGFpbnQuc2V0Q29sb3JGaWx0ZXIoZmlsdGVyKTsK
ICAgICBwYWludC5zZXRYZmVybW9kZU1vZGUoU2tYZmVybW9kZTo6a1NyY19Nb2RlKTsKLSAgICBj
YW52YXMtPmRyYXdCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1hcCgpLCAwLCAwLCAmcGFpbnQpOwor
ICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3Qml0bWFw
KG5hdGl2ZUltYWdlLT5iaXRtYXAoKSwgMCwgMCwgJnBhaW50KTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9za2lhL0ZFQ29tcG9uZW50VHJhbnNmZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUNvbXBvbmVudFRyYW5zZmVyU2tpYS5jcHAKaW5k
ZXggODZkNWQ3ZTY2MmFmNTgyNzkyMWE4NDM0MTUyYTEwY2JlNDcwODJmMi4uNmI1ZmI2OTkxYWI2
OWVhZjQ1NWUwZDgyNGZkNThiMWUzMTg0NTNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29tcG9uZW50VHJhbnNmZXJTa2lhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVD
b21wb25lbnRUcmFuc2ZlclNraWEuY3BwCkBAIC00OCwxMSArNDgsMTAgQEAgYm9vbCBGRUNvbXBv
bmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U2tpYSgpCiAgICAgdW5zaWduZWQgY2hhciByVmFs
dWVzWzI1Nl0sIGdWYWx1ZXNbMjU2XSwgYlZhbHVlc1syNTZdLCBhVmFsdWVzWzI1Nl07CiAgICAg
Z2V0VmFsdWVzKHJWYWx1ZXMsIGdWYWx1ZXMsIGJWYWx1ZXMsIGFWYWx1ZXMpOwogCi0gICAgU2tD
YW52YXMqIGNhbnZhcyA9IHJlc3VsdEltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKTsKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBhaW50LnNldENvbG9yRmlsdGVy
KFNrVGFibGVDb2xvckZpbHRlcjo6Q3JlYXRlQVJHQihhVmFsdWVzLCByVmFsdWVzLCBnVmFsdWVz
LCBiVmFsdWVzKSktPnVucmVmKCk7CiAgICAgcGFpbnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1v
ZGU6OmtTcmNfTW9kZSk7Ci0gICAgY2FudmFzLT5kcmF3Qml0bWFwKGJpdG1hcCwgMCwgMCwgJnBh
aW50KTsKKyAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJh
d0JpdG1hcChiaXRtYXAsIDAsIDAsICZwYWludCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9G
RUxpZ2h0aW5nU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL3NraWEvRkVMaWdodGluZ1NraWEuY3BwCmluZGV4IDE2NzIzNGQzYjM1OWEwZWE1MGM3MzIy
MWIyMzNkYjYwOGU4YmFkOWYuLjVmMzM3MjdiNWFmNTMzMjk0MjIxMDgyMzQ1YjQxNzhmMDJlNWFi
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
c2tpYS9GRUxpZ2h0aW5nU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9za2lhL0ZFTGlnaHRpbmdTa2lhLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBA
IGJvb2wgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNraWEoKQogCiAgICAgU2tQYWludCBwYWlu
dDsKICAgICBwYWludC5zZXRJbWFnZUZpbHRlcihjcmVhdGVJbWFnZUZpbHRlcigwKSktPnVucmVm
KCk7Ci0gICAgZHN0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3Qml0
bWFwKG5hdGl2ZUltYWdlLT5iaXRtYXAoKSwgZHJhd2luZ1JlZ2lvbi5sb2NhdGlvbigpLngoKSwg
ZHJhd2luZ1JlZ2lvbi5sb2NhdGlvbigpLnkoKSwgJnBhaW50KTsKKyAgICBkc3RDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0JpdG1hcChuYXRpdmVJbWFnZS0+Yml0bWFwKCksIGRyYXdp
bmdSZWdpb24ubG9jYXRpb24oKS54KCksIGRyYXdpbmdSZWdpb24ubG9jYXRpb24oKS55KCksICZw
YWludCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCmluZGV4IDk3
YWRkNjIyNWEyNjNmM2E4MjhkYmI5OTI0ZjI2M2Y3MDg2OWMyNmQuLjVjNzkwMDQ4OGQwMmJiY2I0
MTc3NjU3ODBhZDRlNjkzYjY3ZTdkYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcApAQCAtOTgsNyAr
OTgsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgICAgIHkgKz0gU2tGbG9hdFRvU2NhbGFyKGFkdltp
XS5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAgU2tDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCk7CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1D
b250ZXh0ID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdz
IHRleHRNb2RlID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUoKTsK
IAogICAgIC8vIFdlIGRyYXcgdGV4dCB1cCB0byB0d28gdGltZXMgKG9uY2UgZm9yIGZpbGwsIG9u
Y2UgZm9yIHN0cm9rZSkuCkBAIC0xMTUsMTAgKzExNSwxMCBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlw
aHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAg
ICAgICAgICAgICAgcGF0aC5yZXNldCgpOwogICAgICAgICAgICAgICAgIHBhdGgubW92ZVRvKHZQ
b3NCZWdpbltpXSk7CiAgICAgICAgICAgICAgICAgcGF0aC5saW5lVG8odlBvc0VuZFtpXSk7Ci0g
ICAgICAgICAgICAgICAgY2FudmFzLT5kcmF3VGV4dE9uUGF0aChnbHlwaHMgKyBpLCAyLCBwYXRo
LCAwLCBwYWludCk7CisgICAgICAgICAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3VGV4dE9u
UGF0aChnbHlwaHMgKyBpLCAyLCBwYXRoLCAwLCBwYWludCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUds
eXBocyA8PCAxLCBwb3MsIHBhaW50KTsKKyAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJh
d1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9zLCBwYWludCk7CiAgICAgfQogCiAg
ICAgaWYgKCh0ZXh0TW9kZSAmIFRleHRNb2RlU3Ryb2tlKQpAQCAtMTQ0LDEwICsxNDQsMTAgQEAg
dm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250LAogICAgICAgICAgICAgICAgIHBhdGgucmVzZXQoKTsKICAgICAgICAgICAg
ICAgICBwYXRoLm1vdmVUbyh2UG9zQmVnaW5baV0pOwogICAgICAgICAgICAgICAgIHBhdGgubGlu
ZVRvKHZQb3NFbmRbaV0pOwotICAgICAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1RleHRPblBhdGgo
Z2x5cGhzICsgaSwgMiwgcGF0aCwgMCwgcGFpbnQpOworICAgICAgICAgICAgICAgIHBsYXRmb3Jt
Q29udGV4dC0+ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0aCwgMCwgcGFpbnQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bv
c1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgPDwgMSwgcG9zLCBwYWludCk7CisgICAgICAgICAgICBw
bGF0Zm9ybUNvbnRleHQtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzIDw8IDEsIHBvcywg
cGFpbnQpOwogICAgIH0KIH0KIApAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgRm9udDo6ZHJhd0Nv
bXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICBG
bG9hdFBvaW50IGFkanVzdGVkUG9pbnQgPSBzaGFwZXIuYWRqdXN0U3RhcnRQb2ludChwb2ludCk7
CiAgICAgZHJhd0dseXBoQnVmZmVyKGdjLCBydW4sIGdseXBoQnVmZmVyLCBhZGp1c3RlZFBvaW50
KTsKICNlbHNlCi0gICAgU2tDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCk7CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0ID0gZ2Mt
PnBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVy
KHRoaXMsIHJ1biwgcG9pbnQueCgpLCBwb2ludC55KCkpOwogICAgIGlmIChydW4ucnRsKCkpCiAg
ICAgICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JSVEwoKTsKQEAgLTIwNiwxMyArMjA2LDEzIEBAIHZv
aWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRS
dW4mIHJ1biwKICAgICAgICAgaWYgKGZpbGwpIHsKICAgICAgICAgICAgIGNvbnRyb2xsZXIuZm9u
dFBsYXRmb3JtRGF0YUZvclNjcmlwdFJ1bigpLT5zZXR1cFBhaW50KCZmaWxsUGFpbnQpOwogICAg
ICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGp1c3RUZXh0UmVuZGVyTW9kZSgmZmls
bFBhaW50KTsKLSAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoY29udHJvbGxlci5nbHlw
aHMoKSArIGZyb21HbHlwaCwgZ2x5cGhMZW5ndGggPDwgMSwgY29udHJvbGxlci5wb3NpdGlvbnMo
KSArIGZyb21HbHlwaCwgZmlsbFBhaW50KTsKKyAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+
ZHJhd1Bvc1RleHQoY29udHJvbGxlci5nbHlwaHMoKSArIGZyb21HbHlwaCwgZ2x5cGhMZW5ndGgg
PDwgMSwgY29udHJvbGxlci5wb3NpdGlvbnMoKSArIGZyb21HbHlwaCwgZmlsbFBhaW50KTsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChzdHJva2UpIHsKICAgICAgICAgICAgIGNvbnRyb2xsZXIu
Zm9udFBsYXRmb3JtRGF0YUZvclNjcmlwdFJ1bigpLT5zZXR1cFBhaW50KCZzdHJva2VQYWludCk7
CiAgICAgICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmFkanVzdFRleHRSZW5kZXJNb2Rl
KCZzdHJva2VQYWludCk7Ci0gICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGNvbnRyb2xs
ZXIuZ2x5cGhzKCkgKyBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoIDw8IDEsIGNvbnRyb2xsZXIucG9z
aXRpb25zKCkgKyBmcm9tR2x5cGgsIHN0cm9rZVBhaW50KTsKKyAgICAgICAgICAgIHBsYXRmb3Jt
Q29udGV4dC0+ZHJhd1Bvc1RleHQoY29udHJvbGxlci5nbHlwaHMoKSArIGZyb21HbHlwaCwgZ2x5
cGhMZW5ndGggPDwgMSwgY29udHJvbGxlci5wb3NpdGlvbnMoKSArIGZyb21HbHlwaCwgc3Ryb2tl
UGFpbnQpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udFNraWEuY3BwCmluZGV4IGM4MDk3ZTM0OTFhYTc1
YjdjYTVlNjJmMzY1NjVlOWVmMmIyMjRmM2EuLjY1NWE3NGJiODYzN2FmNTE1NTQ3NWYwYjc2Mjlm
M2I0ODgxZjVkNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvRm9udFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvRm9udFNraWEuY3BwCkBAIC0xMzUsMTAgKzEzNSwxMCBAQCB2b2lkIEZvbnQ6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAg
ICAgICAgIHkgKz0gU2tGbG9hdFRvU2NhbGFyKGFkdltpXS5oZWlnaHQoKSk7CiAgICAgfQogCi0g
ICAgU2tDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Cisg
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0ID0gZ2MtPnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsKSB7Ci0gICAgICAgIGNhbnZhcy0+c2F2ZSgpOwotICAgICAgICBjYW52YXMtPnJvdGF0
ZSgtOTApOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgcGxhdGZv
cm1Db250ZXh0LT5yb3RhdGUoLTkwKTsKICAgICAgICAgU2tNYXRyaXggcm90YXRvcjsKICAgICAg
ICAgcm90YXRvci5yZXNldCgpOwogICAgICAgICByb3RhdG9yLnNldFJvdGF0ZSg5MCk7CkBAIC0x
NTQsNyArMTU0LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2Ms
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0
KCktPmFkanVzdFRleHRSZW5kZXJNb2RlKCZwYWludCk7CiAgICAgICAgIHBhaW50LnNldFRleHRF
bmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwogCi0gICAgICAgIGNhbnZh
cy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgKiBzaXplb2YodWludDE2X3QpLCBwb3Ms
IHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3UG9zVGV4dChnbHlwaHMsIG51
bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksIHBvcywgcGFpbnQpOwogICAgIH0KIAogICAgIGlm
ICgodGV4dE1vZGUgJiBUZXh0TW9kZVN0cm9rZSkKQEAgLTE3MywxMCArMTczLDEwIEBAIHZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udCwKICAgICAgICAgICAgIHBhaW50LnNldExvb3BlcigwKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgKiBzaXplb2YodWlu
dDE2X3QpLCBwb3MsIHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3UG9zVGV4
dChnbHlwaHMsIG51bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksIHBvcywgcGFpbnQpOwogICAg
IH0KICAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCkKLSAgICAgICAgY2FudmFzLT5yZXN0b3JlKCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+
cmVzdG9yZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRT
a2lhLmNwcAppbmRleCBmYzk3MTQ2NzFmZWRlODg1NWQ2MGI5YWVlZDIwZmEzOWRlZTViM2ZmLi4z
Y2Y0MzFiMDQ4YjNmOTU3ZmM3MDA3NjllYzVmMjJhMGQyZTI3Y2YzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0U2tpYS5jcHAKQEAgLTI5MSw3ICsyOTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRk
SW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcwog
ICAgICAgICByLmluc2V0KFNrSW50VG9TY2FsYXIodGhpY2tuZXNzICsgMSksIFNrSW50VG9TY2Fs
YXIodGhpY2tuZXNzICsgMSkpOwogICAgICAgICBwYXRoLmFkZE92YWwociwgU2tQYXRoOjprQ0NX
X0RpcmVjdGlvbik7CiAgICAgfQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlB
bGlhc2VkKHBhdGgpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aChwYXRoLCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpBbnRpQWxpYXNlZCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKQEAgLTMxMCw4ICszMTAsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBTa1BhaW50IHBh
aW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQp
OwogICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSk7Ci0g
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBwYWludCk7Ci0gICAg
cGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC0zMTksNyArMzE4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+Y2xpcFJlY3QocmVjdCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBSZWN0
KHJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRo
KQpAQCAtMzI3LDcgKzMyNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBh
dGgmIHBhdGgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBQYXRoQW50aUFs
aWFzZWQoKnBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlw
UGF0aCgqcGF0aC5wbGF0Zm9ybVBhdGgoKSwgUGxhdGZvcm1Db250ZXh0U2tpYTo6QW50aUFsaWFz
ZWQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBw
YXRoKQpAQCAtMzQzLDcgKzM0Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5jbGlwUmVjdChyZWN0
LCBTa1JlZ2lvbjo6a0RpZmZlcmVuY2VfT3ApOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlw
UmVjdChyZWN0LCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpOb3RBbnRpQWxpYXNlZCwgU2tSZWdpb246
OmtEaWZmZXJlbmNlX09wKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29u
c3QgUGF0aCYgcCkKQEAgLTM1NCw3ICszNTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cE91dChjb25zdCBQYXRoJiBwKQogICAgIC8vIFdlIG11c3QgbWFrZSBhIGNvcHkgb2YgdGhlIHBh
dGgsIHRvIG1hcmsgaXQgYXMgaW52ZXJzZS1maWxsZWQuCiAgICAgU2tQYXRoIHBhdGgocC5pc051
bGwoKSA/IFNrUGF0aCgpIDogKnAucGxhdGZvcm1QYXRoKCkpOwogICAgIHBhdGgudG9nZ2xlSW52
ZXJzZUZpbGxUeXBlKCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBQYXRoQW50aUFsaWFz
ZWQocGF0aCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBQYXRoKHBhdGgsIFBsYXRmb3Jt
Q29udGV4dFNraWE6OkFudGlBbGlhc2VkKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb0NsaXAsIFdpbmRSdWxlIGNsaXBSdWxlKQpAQCAtMzcy
LDcgKzM3MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoVG9DbGlwLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICAgICAgc3RvcmFnZS5zZXRGaWxsVHlw
ZShmdHlwZSk7CiAgICAgICAgIHBhdGggPSAmc3RvcmFnZTsKICAgICB9Ci0gICAgcGxhdGZvcm1D
b250ZXh0KCktPmNsaXBQYXRoQW50aUFsaWFzZWQoKnBhdGgpOworICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jbGlwUGF0aCgqcGF0aCwgUGxhdGZvcm1Db250ZXh0U2tpYTo6QW50aUFsaWFzZWQpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgYWZmaW5lKQpAQCAtMzgwLDcgKzM3OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5jb25jYXQoYWZmaW5lKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y29uY2F0KGFmZmlu
ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBhZmZpbmUpCkBAIC0zODgsNyArMzg3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZSkKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCktPnNldE1hdHJpeChhZmZpbmUpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRNYXRyaXgo
YWZmaW5lKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0UGF0aEZyb21Db252ZXhQb2ludHMoU2tQYXRo
KiBwYXRoLCBzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCkBAIC00
MjksMTQgKzQyOCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24o
c2l6ZV90IG51bVBvaW50cywKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50LnNldEFudGlBbGlh
cyhzaG91bGRBbnRpYWxpYXMpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJh
d1BhdGgocGF0aCwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UGF0aChw
YXRoLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdQYXRoKHBhdGgsIHBhaW50
KTsKIAogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKSB7CiAgICAgICAgIHBhaW50
LnJlc2V0KCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tp
bmcoJnBhaW50LCAwLCAwKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5k
cmF3UGF0aChwYXRoLCBwYWludCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3
UGF0aChwYXRoLCBwYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGF0aChw
YXRoLCBwYWludCk7CiAgICAgfQogfQogCkBAIC00NTAsMTAgKzQ0Nyw5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2luCiAKICAgICBTa1BhdGggcGF0aDsKICAgICBzZXRQYXRoRnJvbUNvbnZleFBv
aW50cygmcGF0aCwgbnVtUG9pbnRzLCBwb2ludHMpOwotICAgIGlmIChhbnRpYWxpYXNlZCkKLSAg
ICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBQYXRoQW50aUFsaWFzZWQocGF0aCk7Ci0gICAg
ZWxzZQotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmNsaXBQYXRoKHBhdGgp
OworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aChwYXRoLCBhbnRpYWxpYXNlZAorICAg
ICAgICA/IFBsYXRmb3JtQ29udGV4dFNraWE6OkFudGlBbGlhc2VkCisgICAgICAgIDogUGxhdGZv
cm1Db250ZXh0U2tpYTo6Tm90QW50aUFsaWFzZWQpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBv
bmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KQEAgLTQ2
NSwxNCArNDYxLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJ
bnRSZWN0JiBlbGlwc2VSZWN0KQogICAgIFNrUmVjdCByZWN0ID0gZWxpcHNlUmVjdDsKICAgICBT
a1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGlu
ZygmcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVj
dCwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3Qm91bmRlZChyZWN0LCBw
YWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKIAog
ICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKSB7CiAgICAgICAgIHBhaW50LnJlc2V0
KCk7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBh
aW50LCAmcmVjdCwgMCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJh
d092YWwocmVjdCwgcGFpbnQpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd0Jv
dW5kZWQocmVjdCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd092YWwo
cmVjdCwgcGFpbnQpOwogICAgIH0KIH0KIApAQCAtNDkxLDggKzQ4NSw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBkcmF3T3V0ZXJQYXRoKFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIGNvbnN0
IFNrUGF0aCYgcGF0CiAgICAgcGFpbnQuc2V0U3Ryb2tlV2lkdGgoMSk7CiAgICAgcGFpbnQuc2V0
UGF0aEVmZmVjdChuZXcgU2tDb3JuZXJQYXRoRWZmZWN0KDEpKS0+dW5yZWYoKTsKICNlbmRpZgot
ICAgIGNvbnRleHQtPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Ci0gICAgY29udGV4
dC0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgIGNvbnRleHQtPmRyYXdQYXRoKHBhdGgs
IHBhaW50KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRyYXdJbm5lclBhdGgoUGxhdGZvcm1D
b250ZXh0U2tpYSogY29udGV4dCwgY29uc3QgU2tQYXRoJiBwYXRoLCBTa1BhaW50JiBwYWludCwg
aW50IHdpZHRoKQpAQCAtNTgyLDE3ICs1NzUsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIpCiAg
ICAgICAgIH0KICAgICAgICAgU2tQYWludCBmaWxsUGFpbnQ7CiAgICAgICAgIGZpbGxQYWludC5z
ZXRDb2xvcihwYWludC5nZXRDb2xvcigpKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLT5kcmF3UmVjdChyMSwgZmlsbFBhaW50KTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5kcmF3UmVjdChyMiwgZmlsbFBhaW50KTsKLSAgICAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmRpZERyYXdSZWN0KHIxLCBmaWxsUGFpbnQpOwotICAgICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+ZGlkRHJhd1JlY3QocjIsIGZpbGxQYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5kcmF3UmVjdChyMSwgZmlsbFBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmRyYXdSZWN0KHIyLCBmaWxsUGFpbnQpOwogICAgIH0KIAogICAgIGFkanVzdExpbmVUb1Bp
eGVsQm91bmRhcmllcyhwMSwgcDIsIHdpZHRoLCBwZW5TdHlsZSk7CiAgICAgU2tQb2ludCBwdHNb
Ml0gPSB7IChTa1BvaW50KXAxLCAoU2tQb2ludClwMiB9OwogCi0gICAgcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5kcmF3UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBw
dHMsIHBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BvaW50cyhTa0NhbnZh
czo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0
KCktPmRyYXdQb2ludHMoU2tDYW52YXM6OmtMaW5lc19Qb2ludE1vZGUsIDIsIHB0cywgcGFpbnQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lkdGgsIERvY3VtZW50TWFya2VyTGluZVN0eWxl
IHN0eWxlKQpAQCAtNzIxLDE0ICs3MTEsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHQKICAg
ICByZWN0LnNldChvcmlnaW5YLCBvcmlnaW5ZLCBvcmlnaW5YICsgV2ViQ29yZUZsb2F0VG9Ta1Nj
YWxhcih3aWR0aCkgKiBkZXZpY2VTY2FsZUZhY3Rvciwgb3JpZ2luWSArIFNrSW50VG9TY2FsYXIo
bWlzc3BlbGxCaXRtYXBbaW5kZXhdLT5oZWlnaHQoKSkpOwogCiAgICAgaWYgKGRldmljZVNjYWxl
RmFjdG9yID09IDIpIHsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5zYXZl
KCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+c2NhbGUoU0tfU2NhbGFy
SGFsZiwgU0tfU2NhbGFySGFsZik7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zYXZlKCk7
CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zY2FsZShTS19TY2FsYXJIYWxmLCBTS19TY2Fs
YXJIYWxmKTsKICAgICB9Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVj
dChyZWN0LCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHJlY3QsIHBh
aW50KTsKICAgICBpZiAoZGV2aWNlU2NhbGVGYWN0b3IgPT0gMikKLSAgICAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5yZXN0b3JlKCk7Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
ZGlkRHJhd1JlY3QocmVjdCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVz
dG9yZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHB0LApAQCAtNzUzLDggKzc0MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcHQsCiAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgLy8gVGV4dCBsaW5lcyBh
cmUgZHJhd24gdXNpbmcgdGhlIHN0cm9rZSBjb2xvci4KICAgICBwYWludC5zZXRDb2xvcihwbGF0
Zm9ybUNvbnRleHQoKS0+ZWZmZWN0aXZlU3Ryb2tlQ29sb3IoKSk7Ci0gICAgcGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVjdChyLCBwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0
KCktPmRpZERyYXdSZWN0KHIsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1Jl
Y3QociwgcGFpbnQpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0
cm9rZWQgYm9yZGVyLgpAQCAtNzkwLDggKzc3Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoVG9GaWxsKQogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAKLSAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKCpwYXRoLCBwYWludCk7Ci0gICAg
cGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKCpwYXRoLCBwYWludCk7CisgICAgcGxhdGZv
cm1Db250ZXh0KCktPmRyYXdQYXRoKCpwYXRoLCBwYWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCkBAIC04MDMsOCArNzg5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IAogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRG
b3JGaWxsaW5nKCZwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3
UmVjdChyLCBwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdSZWN0KHIsIHBh
aW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKQEAgLTgxNiw4ICs4MDEsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbG9yUwogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldHVwUGFpbnRDb21tb24oJnBhaW50KTsKICAgICBwYWludC5zZXRDb2xv
cihjb2xvci5yZ2IoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UmVj
dChyLCBwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdSZWN0KHIsIHBhaW50
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsCkBA
IC04NTIsOCArODM2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0LAogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAgICAgcGFpbnQuc2V0Q29sb3Io
Y29sb3IucmdiKCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1BhdGgo
cGF0aCwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UGF0aChwYXRoLCBw
YWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdQYXRoKHBhdGgsIHBhaW50KTsKIH0K
IAogQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VT
Y2FsZSkgY29uc3QKQEAgLTg2MSw3ICs4NDQsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3ND
b250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlKSBjb25zdAogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKIAotICAgIGNv
bnN0IFNrTWF0cml4JiBtID0gcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3RhbE1h
dHJpeCgpOworICAgIGNvbnN0IFNrTWF0cml4JiBtID0gcGxhdGZvcm1Db250ZXh0KCktPmdldFRv
dGFsTWF0cml4KCk7CiAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybShTa1NjYWxhclRvRG91Ymxl
KG0uZ2V0U2NhbGVYKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Rv
dWJsZShtLmdldFNrZXdZKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJU
b0RvdWJsZShtLmdldFNrZXdYKCkpLApAQCAtODgwLDcgKzg2Myw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5zY2FsZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHNpemUud2lkdGgoKSksCisgICAgcGxh
dGZvcm1Db250ZXh0KCktPnNjYWxlKFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2l6ZS53aWR0aCgp
KSwKICAgICAgICAgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihzaXplLmhlaWdodCgpKSk7CiB9CiAK
QEAgLTExNDAsOCArMTEyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29u
c3QgSW50UmVjdCYgciwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiAKICAgICBTa1Bh
dGggcGF0aDsKICAgICBwYXRoLmFkZEFyYyhvdmFsLCBTa0ludFRvU2NhbGFyKC1zdGFydEFuZ2xl
KSwgU2tJbnRUb1NjYWxhcigtYW5nbGVTcGFuKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRp
ZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BhdGgo
cGF0aCwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoVG9TdHJva2UpCkBAIC0xMTUyLDggKzExMzQsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoVG9TdHJva2UpCiAgICAgY29uc3Qg
U2tQYXRoJiBwYXRoID0gKnBhdGhUb1N0cm9rZS5wbGF0Zm9ybVBhdGgoKTsKICAgICBTa1BhaW50
IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBh
aW50LCAwLCAwKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBh
dGgsIHBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFp
bnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgbGluZVdpZHRoKQpAQCAtMTE3MCwxMCArMTE1MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
ICAgIFNrUmVjdCByKHJlY3QpOwogICAgIGJvb2wgdmFsaWRXID0gci53aWR0aCgpID4gMDsKICAg
ICBib29sIHZhbGlkSCA9IHIuaGVpZ2h0KCkgPiAwOwotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBw
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CiAgICAgaWYgKHZhbGlkVyAmJiB2YWxpZEgpIHsK
LSAgICAgICAgY2FudmFzLT5kcmF3UmVjdChyLCBwYWludCk7Ci0gICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5kcmF3UmVjdChyLCBwYWludCk7CiAgICAgfSBlbHNlIGlmICh2YWxpZFcgfHwgdmFsaWRIKSB7
CiAgICAgICAgIC8vIHdlIGFyZSBleHBlY3RlZCB0byByZXNwZWN0IHRoZSBsaW5lSm9pbiwgc28g
d2UgY2FuJ3QganVzdCBjYWxsCiAgICAgICAgIC8vIGRyYXdMaW5lIC0tIHdlIGhhdmUgdG8gY3Jl
YXRlIGEgcGF0aCB0aGF0IGRvdWJsZXMgYmFjayBvbiBpdHNlbGYuCkBAIC0xMTgxLDggKzExNjAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgcGF0aC5tb3ZlVG8oci5mTGVmdCwgci5mVG9w
KTsKICAgICAgICAgcGF0aC5saW5lVG8oci5mUmlnaHQsIHIuZkJvdHRvbSk7CiAgICAgICAgIHBh
dGguY2xvc2UoKTsKLSAgICAgICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWludCk7Ci0gICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiAgICAgfQogfQogCkBA
IC0xMTkxLDggKzExNjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFu
Z2xlSW5SYWRpYW5zKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+cm90YXRlKFdlYkNvcmVGbG9h
dFRvU2tTY2FsYXIoCi0gICAgICAgIGFuZ2xlSW5SYWRpYW5zICogKDE4MC4wZiAvIDMuMTQxNTky
NjVmKSkpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yb3RhdGUoV2ViQ29yZUZsb2F0VG9Ta1Nj
YWxhcihhbmdsZUluUmFkaWFucyAqICgxODAuMGYgLyAzLjE0MTU5MjY1ZikpKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB3LCBmbG9hdCBoKQpAQCAtMTIwMCw4
ICsxMTc3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB3LCBmbG9h
dCBoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+dHJhbnNsYXRlKFdlYkNvcmVGbG9hdFRvU2tT
Y2FsYXIodyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
Q29yZUZsb2F0VG9Ta1NjYWxhcihoKSk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnRyYW5zbGF0
ZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHcpLCBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKGgpKTsK
IH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QK
QEAgLTEyMjUsOCArMTIwMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBTa1JlY3QgcmVjdCA9IGVsbGlw
c2U7CiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWlu
dEZvckZpbGxpbmcoJnBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRy
YXdPdmFsKHJlY3QsIHBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd0JvdW5k
ZWQocmVjdCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3T3ZhbChyZWN0LCBw
YWludCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQpAQCAtMTIzNyw4ICsxMjEyLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlw
c2UpCiAgICAgU2tSZWN0IHJlY3QoZWxsaXBzZSk7CiAgICAgU2tQYWludCBwYWludDsKICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwgMCk7Ci0g
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7Ci0g
ICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdCb3VuZGVkKHJlY3QsIHBhaW50KTsKKyAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+ZHJhd092YWwocmVjdCwgcGFpbnQpOwogfQogCiB9ICAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCmluZGV4IDI1ZjM0M2VhNWIxYzU0NDYwM2Q4
Njk5MDIzMzk0MzY5ZjFiYTJiMmQuLjE3ZTkxZGI3ZWU2YTdkN2M1MjdkNjg4NjBkNTgxZjg3NjZm
NDRhOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VCdWZmZXJTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEltYWdl
QnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3QgVmVjdG9yPGludD4mIGxv
b2tVcFRhYmxlKQogfQogCiB0ZW1wbGF0ZSA8TXVsdGlwbHkgbXVsdGlwbGllZD4KLVBhc3NSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBT
a0NhbnZhcyogY2FudmFzLAorUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHNpemUpCiB7
CiAgICAgZmxvYXQgYXJlYSA9IDQuMGYgKiByZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpOwpA
QCAtMjc2LDIzICsyNzYsMjIgQEAgUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIFNrQ2FudmFzKiBjYW52YXMKICAgICBlbHNlCiAg
ICAgICAgIGNvbmZpZzg4ODggPSBTa0NhbnZhczo6a1JHQkFfVW5wcmVtdWxfQ29uZmlnODg4ODsK
IAotICAgIGNhbnZhcy0+cmVhZFBpeGVscygmZGVzdEJpdG1hcCwgcmVjdC54KCksIHJlY3QueSgp
LCBjb25maWc4ODg4KTsKKyAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKCZkZXN0Qml0bWFwLCByZWN0
LngoKSwgcmVjdC55KCksIGNvbmZpZzg4ODgpOwogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OwogfQogCiBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxVbm11bHRpcGxpZWQ+KHJlY3QsIGNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBtX3NpemUpOworICAgIHJldHVy
biBnZXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihyZWN0LCBjb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpLCBtX3NpemUpOwogfQogCiBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFn
ZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBD
b29yZGluYXRlU3lzdGVtKSBjb25zdAogewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8UHJlbXVs
dGlwbGllZD4ocmVjdCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIG1f
c2l6ZSk7CisgICAgcmV0dXJuIGdldEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihyZWN0LCBjb250
ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLCBtX3NpemUpOwogfQogCiB2b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWludDhDbGFtcGVkQXJyYXkqIHNv
dXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkKIHsKLSAgICBT
a0NhbnZhcyogY2FudmFzID0gY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7
CiAgICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwogICAgIEFTU0VSVChzb3VyY2VS
ZWN0LmhlaWdodCgpID4gMCk7CiAKQEAgLTMzMCw3ICszMjksNyBAQCB2b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoTXVsdGlwbHkgbXVsdGlwbGllZCwgVWludDhDbGFtcGVkQXJyYXkqIHNv
dXJjZSwgYwogICAgIGVsc2UKICAgICAgICAgY29uZmlnODg4OCA9IFNrQ2FudmFzOjprUkdCQV9V
bnByZW11bF9Db25maWc4ODg4OwogCi0gICAgY2FudmFzLT53cml0ZVBpeGVscyhzcmNCaXRtYXAs
IGRlc3RYLCBkZXN0WSwgY29uZmlnODg4OCk7CisgICAgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+d3JpdGVQaXhlbHMoc3JjQml0bWFwLCBkZXN0WCwgZGVzdFksIGNvbmZpZzg4ODgpOwog
fQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KQEAgLTM2Niw4ICszNjUsNyBAQCBTdHJpbmcgSW1h
Z2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUq
IHF1YWxpdHksIENvbwogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCiAgICAgVmVjdG9yPGNoYXI+IGVu
Y29kZWRJbWFnZTsKLSAgICBTa0RldmljZSogZGV2aWNlID0gY29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCktPmdldERldmljZSgpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoZGV2
aWNlLT5hY2Nlc3NCaXRtYXAoZmFsc2UpLCBtaW1lVHlwZSwgcXVhbGl0eSwgJmVuY29kZWRJbWFn
ZSkpCisgICAgaWYgKCFlbmNvZGVJbWFnZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+
Yml0bWFwKCksIG1pbWVUeXBlLCBxdWFsaXR5LCAmZW5jb2RlZEltYWdlKSkKICAgICAgICAgcmV0
dXJuICJkYXRhOiwiOwogCiAgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKaW5kZXgg
MWRiZGEwZmRhMTg5ZmFlNTlkYWIwNDI4NzA1ZmNkN2ViZDkxN2RlMy4uY2NjYmQ5MDA3NTlkODQz
OGZmNTg0Y2JiNWQyOTIyMDVkNzY2M2Y4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcApAQCAtMjk1LDcgKzI5NSw3IEBAIHN0
YXRpYyBTa0JpdG1hcCBleHRyYWN0U2NhbGVkSW1hZ2VGcmFnbWVudChjb25zdCBOYXRpdmVJbWFn
ZVNraWEmIGJpdG1hcCwgY29uc3QKIC8vCiAvLyBOb3RlOiB0aGlzIGNvZGUgaXMgb25seSB1c2Vk
IHdoZW4gdGhlIGNhbnZhcyB0cmFuc2Zvcm1hdGlvbiBpcyBsaW1pdGVkIHRvCiAvLyBzY2FsaW5n
IG9yIHRyYW5zbGF0aW9uLgotc3RhdGljIHZvaWQgZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0NhbnZh
cyYgY2FudmFzLCBTa1BhaW50JiBwYWludCwgY29uc3QgTmF0aXZlSW1hZ2VTa2lhJiBiaXRtYXAs
IGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVjdCkKK3N0YXRpYyB2
b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tpYSogY29udGV4dCwgU2tQ
YWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBjb25zdCBTa1JlY3Qm
IHNyY1JlY3QsIGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QpCiB7CiAjaWYgUExBVEZPUk0oQ0hST01J
VU0pCiAgICAgVFJBQ0VfRVZFTlQwKCJza2lhIiwgImRyYXdSZXNhbXBsZWRCaXRtYXAiKTsKQEAg
LTMwNCwxMyArMzA0LDEzIEBAIHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52
YXMmIGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgLy8gdGhlIGZp
bmFsIHNjYWxlLiBUaGUgZmluYWwgc2NhbGUgaXMgYSBjb21iaW5hdGlvbiBvZiBzY2FsZSB0cmFu
c2Zvcm0KICAgICAvLyBpbiBjYW52YXMgYW5kIGV4cGxpY2l0IHNjYWxpbmcgKHNyY1JlY3QgYW5k
IGRlc3RSZWN0KS4KICAgICBTa1JlY3Qgc2NyZWVuUmVjdDsKLSAgICBjYW52YXMuZ2V0VG90YWxN
YXRyaXgoKS5tYXBSZWN0KCZzY3JlZW5SZWN0LCBkZXN0UmVjdCk7CisgICAgY29udGV4dC0+Z2V0
VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZzY3JlZW5SZWN0LCBkZXN0UmVjdCk7CiAgICAgZmxvYXQg
cmVhbFNjYWxlWCA9IHNjcmVlblJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qud2lkdGgoKTsKICAgICBm
bG9hdCByZWFsU2NhbGVZID0gc2NyZWVuUmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCk7
CiAKICAgICAvLyBUaGlzIHBhcnQgb2YgY29kZSBsaW1pdHMgc2NhbGluZyBvbmx5IHRvIHZpc2li
bGUgcG9ydGlvbiBpbiB0aGUKICAgICBTa1JlY3QgZGVzdFJlY3RWaXNpYmxlU3Vic2V0OwotICAg
IENsaXBSZWN0VG9DYW52YXMoY2FudmFzLCBkZXN0UmVjdCwgJmRlc3RSZWN0VmlzaWJsZVN1YnNl
dCk7CisgICAgQ2xpcFJlY3RUb0NhbnZhcyhjb250ZXh0LCBkZXN0UmVjdCwgJmRlc3RSZWN0Vmlz
aWJsZVN1YnNldCk7CiAKICAgICAvLyBDbGlwUmVjdFRvQ2FudmFzIG9mdGVuIG92ZXJzaG9vdHMs
IHJlc3VsdGluZyBpbiBhIGxhcmdlciByZWdpb24gdGhhbiBvdXIKICAgICAvLyBvcmlnaW5hbCBk
ZXN0UmVjdC4gSW50ZXJzZWN0aW5nIGdldHMgdXMgYmFjayBpbnNpZGUuCkBAIC0zNDAsOCArMzQw
LDggQEAgc3RhdGljIHZvaWQgZHJhd1Jlc2FtcGxlZEJpdG1hcChTa0NhbnZhcyYgY2FudmFzLCBT
a1BhaW50JiBwYWludCwgY29uc3QgTmF0aXZlSW0KICAgICAvLyBXaGVuIFNraWEgc3VwcG9ydHMg
dGhlbiB1c2UgdGhpcyBhcyB0aGUgc291cmNlIHJlY3QgdG8gcmVwbGFjZSAwLgogICAgIC8vCiAg
ICAgLy8gc2NhbGVkU3JjUmVjdC5vZmZzZXQoLWVuY2xvc2luZ1NjYWxlZFNyY1JlY3QueCgpLCAt
ZW5jbG9zaW5nU2NhbGVkU3JjUmVjdC55KCkpOwotICAgIGNhbnZhcy5zYXZlKCk7Ci0gICAgY2Fu
dmFzLmNsaXBSZWN0KGRlc3RSZWN0VmlzaWJsZVN1YnNldCk7CisgICAgY29udGV4dC0+c2F2ZSgp
OworICAgIGNvbnRleHQtPmNsaXBSZWN0KGRlc3RSZWN0VmlzaWJsZVN1YnNldCk7CiAKICAgICAv
LyBCZWNhdXNlIHRoZSBpbWFnZSBmcmFnbWVudCBpcyBnZW5lcmF0ZWQgd2l0aCBhbiBhcHByb3ht
aWF0ZWQgc2NhbGluZwogICAgIC8vIGZhY3Rvci4gVGhpcyBkcmF3IHdpbGwgcGVyZm9ybSBhIGNs
b3NlIHRvIDEgc2NhbGluZy4KQEAgLTM0OSwxMyArMzQ5LDEzIEBAIHN0YXRpYyB2b2lkIGRyYXdS
ZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMmIGNhbnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5h
dGl2ZUltCiAgICAgLy8gTk9URTogRm9yIGZ1dHVyZSBvcHRpbWl6YXRpb24uIElmIHRoZSBkaWZm
ZXJlbmNlIGluIHNjYWxlIGlzIHNvIHNtYWxsCiAgICAgLy8gdGhhdCBTa2lhIGRvZXNuJ3QgcHJv
ZHVjZSBhIGRpZmZlcmVuY2UgdGhlbiB3ZSBjYW4ganVzdCBibGl0IGl0IGRpcmVjdGx5CiAgICAg
Ly8gdG8gZW5oYW5jZSBwZXJmb3JtYW5jZS4KLSAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3Qoc2Nh
bGVkSW1hZ2VGcmFnbWVudCwgMCwgZW5jbG9zaW5nRGVzdFJlY3QsICZwYWludCk7Ci0gICAgY2Fu
dmFzLnJlc3RvcmUoKTsKKyAgICBjb250ZXh0LT5kcmF3Qml0bWFwUmVjdChzY2FsZWRJbWFnZUZy
YWdtZW50LCAwLCBlbmNsb3NpbmdEZXN0UmVjdCwgJnBhaW50KTsKKyAgICBjb250ZXh0LT5yZXN0
b3JlKCk7CiB9CiAKIHN0YXRpYyBib29sIGhhc05vbjkwcm90YXRpb24oUGxhdGZvcm1Db250ZXh0
U2tpYSogY29udGV4dCkKIHsKLSAgICByZXR1cm4gIWNvbnRleHQtPmNhbnZhcygpLT5nZXRUb3Rh
bE1hdHJpeCgpLnJlY3RTdGF5c1JlY3QoKTsKKyAgICByZXR1cm4gIWNvbnRleHQtPmdldFRvdGFs
TWF0cml4KCkucmVjdFN0YXlzUmVjdCgpOwogfQogCiBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFw
KFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgTmF0aXZlSW1hZ2VT
a2lhJiBiaXRtYXAsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgY29uc3QgU2tSZWN0JiBkZXN0UmVj
dCwgY29uc3QgU2tYZmVybW9kZTo6TW9kZSYgY29tcE9wKQpAQCAtMzcwLDggKzM3MCw2IEBAIHN0
YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgLy8gb25seSBhbnRpYWxpYXMgaWYgd2UncmUgcm90
YXRlZCBvciBza2V3ZWQKICAgICBwYWludC5zZXRBbnRpQWxpYXMoaGFzTm9uOTByb3RhdGlvbihw
bGF0Zm9ybUNvbnRleHQpKTsKIAotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRl
eHQtPmNhbnZhcygpOwotCiAgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKICAgICBpZiAo
cGxhdGZvcm1Db250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIHJlc2FtcGxpbmcgPSBS
RVNBTVBMRV9MSU5FQVI7CkBAIC0zODAsMTAgKzM3OCwxMCBAQCBzdGF0aWMgdm9pZCBwYWludFNr
Qml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgTmF0aXZl
SW1hZwogICAgIGVsc2UgewogICAgICAgICAvLyBUYWtlIGludG8gYWNjb3VudCBzY2FsZSBhcHBs
aWVkIHRvIHRoZSBjYW52YXMgd2hlbiBjb21wdXRpbmcgc2FtcGxpbmcgbW9kZSAoZS5nLiBDU1Mg
c2NhbGUgb3IgcGFnZSBzY2FsZSkuCiAgICAgICAgIFNrUmVjdCBkZXN0UmVjdFRhcmdldCA9IGRl
c3RSZWN0OwotICAgICAgICBpZiAoIShjYW52YXMtPmdldFRvdGFsTWF0cml4KCkuZ2V0VHlwZSgp
ICYgKFNrTWF0cml4OjprQWZmaW5lX01hc2sgfCBTa01hdHJpeDo6a1BlcnNwZWN0aXZlX01hc2sp
KSkKLSAgICAgICAgICAgIGNhbnZhcy0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZkZXN0UmVj
dFRhcmdldCwgZGVzdFJlY3QpOworICAgICAgICBpZiAoIShwbGF0Zm9ybUNvbnRleHQtPmdldFRv
dGFsTWF0cml4KCkuZ2V0VHlwZSgpICYgKFNrTWF0cml4OjprQWZmaW5lX01hc2sgfCBTa01hdHJp
eDo6a1BlcnNwZWN0aXZlX01hc2spKSkKKyAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+Z2V0
VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZkZXN0UmVjdFRhcmdldCwgZGVzdFJlY3QpOwogCi0gICAg
ICAgIHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY2FudmFzLT5nZXRUb3RhbE1h
dHJpeCgpLCBiaXRtYXAsCisgICAgICAgIHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01v
ZGUocGxhdGZvcm1Db250ZXh0LT5nZXRUb3RhbE1hdHJpeCgpLCBiaXRtYXAsCiAgICAgICAgICAg
ICBTa1NjYWxhclRvRmxvYXQoc3JjUmVjdC53aWR0aCgpKSwgU2tTY2FsYXJUb0Zsb2F0KHNyY1Jl
Y3QuaGVpZ2h0KCkpLAogICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0VGFyZ2V0
LndpZHRoKCkpLCBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3RUYXJnZXQuaGVpZ2h0KCkpKTsKICAg
ICB9CkBAIC0zOTcsNyArMzk1LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTa0JpdG1hcChQbGF0Zm9y
bUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IE5hdGl2ZUltYWcKICAgICByZXNh
bXBsaW5nID0gbGltaXRSZXNhbXBsaW5nTW9kZShwbGF0Zm9ybUNvbnRleHQsIHJlc2FtcGxpbmcp
OwogICAgIHBhaW50LnNldEZpbHRlckJpdG1hcChyZXNhbXBsaW5nID09IFJFU0FNUExFX0xJTkVB
Uik7CiAgICAgaWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdFU09NRSkKLSAgICAgICAgZHJh
d1Jlc2FtcGxlZEJpdG1hcCgqY2FudmFzLCBwYWludCwgYml0bWFwLCBzcmNSZWN0LCBkZXN0UmVj
dCk7CisgICAgICAgIGRyYXdSZXNhbXBsZWRCaXRtYXAocGxhdGZvcm1Db250ZXh0LCBwYWludCwg
Yml0bWFwLCBzcmNSZWN0LCBkZXN0UmVjdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE5vIHJl
c2FtcGxpbmcgbmVjZXNzYXJ5LCB3ZSBjYW4ganVzdCBkcmF3IHRoZSBiaXRtYXAuIFdlIHdhbnQg
dG8KICAgICAgICAgLy8gZmlsdGVyIGl0IGlmIHdlIGRlY2lkZWQgdG8gZG8gbGluZWFyIGludGVy
cG9sYXRpb24gYWJvdmUsIG9yIGlmIHRoZXJlCkBAIC00MTgsMTAgKzQxNiwxMCBAQCBzdGF0aWMg
dm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgTmF0aXZlSW1hZwogICAgICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS8xNDU1NDAu
CiAgICAgICAgIGlmIChuZWVkc0NsaXBwaW5nKSB7CiAgICAgICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQtPnNhdmUoKTsKLSAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCktPmNsaXBS
ZWN0KGRlc3RSZWN0KTsKKyAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+Y2xpcFJlY3QoZGVz
dFJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FudmFzLT5kcmF3Qml0bWFwUmVjdChiaXRt
YXAuYml0bWFwKCksICZlbmNsb3NpbmdTcmNSZWN0LCBlbmNsb3NpbmdEZXN0UmVjdCwgJnBhaW50
KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5kcmF3Qml0bWFwUmVjdChiaXRtYXAuYml0bWFw
KCksICZlbmNsb3NpbmdTcmNSZWN0LCBlbmNsb3NpbmdEZXN0UmVjdCwgJnBhaW50KTsKIAogICAg
ICAgICBpZiAobmVlZHNDbGlwcGluZykKICAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+cmVz
dG9yZSgpOwpAQCAtNDgxLDcgKzQ3OSw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IG5vcm1T
cmNSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOyAvLyBub3RoaW5nIHRvIGRyYXcKIAot
ICAgIFNrTWF0cml4IGN0bSA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
Z2V0VG90YWxNYXRyaXgoKTsKKyAgICBTa01hdHJpeCBjdG0gPSBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Z2V0VG90YWxNYXRyaXgoKTsKICAgICBTa01hdHJpeCB0b3RhbE1hdHJpeDsKICAg
ICB0b3RhbE1hdHJpeC5zZXRDb25jYXQoY3RtLCBwYXR0ZXJuVHJhbnNmb3JtKTsKIApAQCAtNTUy
LDcgKzU1MCw3IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwKICAgICBwYWludC5zZXRYZmVybW9kZU1vZGUoV2ViQ29yZUNvbXBvc2l0ZVRvU2tpYUNv
bXBvc2l0ZShjb21wb3NpdGVPcCkpOwogICAgIHBhaW50LnNldEZpbHRlckJpdG1hcChyZXNhbXBs
aW5nID09IFJFU0FNUExFX0xJTkVBUik7CiAKLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+cGFpbnRTa1BhaW50KGRlc3RSZWN0LCBwYWludCk7CisgICAgY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmRyYXdSZWN0KGRlc3RSZWN0LCBwYWludCk7CiB9CiAKIC8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tp
YS5jcHAKaW5kZXggMzQ0YmMxN2QzNzQ3YjRhMjQ2Nzk1NzVmODE1MDAwODAxZjEzZGM1MS4uYjQ2
NjQ2OWNmY2JmNWU2YzYzMmEyNjJlMTVlY2NjYzU3NzI2YTc0ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpz
YXZlKCkKICAgICBtX3N0YXRlLT5tX2ltYWdlQnVmZmVyQ2xpcC5yZXNldCgpOwogCiAgICAgLy8g
U2F2ZSBvdXIgbmF0aXZlIGNhbnZhcy4KLSAgICBjYW52YXMoKS0+c2F2ZSgpOworICAgIG1fY2Fu
dmFzLT5zYXZlKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2F2ZUxheWVyKGNv
bnN0IFNrUmVjdCogYm91bmRzLCBjb25zdCBTa1BhaW50KiBwYWludCkKQEAgLTI3NSw3ICsyNzUs
NyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsCiAgICAgbV9zdGF0ZS0+bV9jbGlwID0gYm91bmRzOwogICAg
IC8vIEdldCB0aGUgYWJzb2x1dGUgY29vcmRpbmF0ZXMgb2YgdGhlIHN0b3JlZCBjbGlwcGluZyBy
ZWN0YW5nbGUgdG8gbWFrZSBpdAogICAgIC8vIGluZGVwZW5kZW50IG9mIGFueSB0cmFuc2Zvcm0g
Y2hhbmdlcy4KLSAgICBjYW52YXMoKS0+Z2V0VG90YWxNYXRyaXgoKS5tYXBSZWN0KCZtX3N0YXRl
LT5tX2NsaXApOworICAgIGdldFRvdGFsTWF0cml4KCkubWFwUmVjdCgmbV9zdGF0ZS0+bV9jbGlw
KTsKIAogICAgIFNrQ2FudmFzOjpTYXZlRmxhZ3Mgc2F2ZUZsYWdzID0gc3RhdGljX2Nhc3Q8U2tD
YW52YXM6OlNhdmVGbGFncz4oU2tDYW52YXM6OmtIYXNBbHBoYUxheWVyX1NhdmVGbGFnIHwgU2tD
YW52YXM6OmtGdWxsQ29sb3JMYXllcl9TYXZlRmxhZyk7CiAgICAgc2F2ZUxheWVyKCZib3VuZHMs
IDAsIHNhdmVGbGFncyk7CkBAIC0yOTcsMjMgKzI5NywxOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OmJlZ2luTGF5ZXJDbGlwcGVkVG9JbWFnZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsCiAg
ICAgfQogfQogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBQYXRoQW50aUFsaWFzZWQo
Y29uc3QgU2tQYXRoJiBjbGlwUGF0aCkKLXsKLSAgICBjYW52YXMoKS0+Y2xpcFBhdGgoY2xpcFBh
dGgsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wLCB0cnVlKTsKLX0KLQogdm9pZCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpyZXN0b3JlKCkKIHsKICAgICBpZiAoIW1fc3RhdGUtPm1faW1hZ2VCdWZmZXJD
bGlwLmVtcHR5KCkpIHsKICAgICAgICAgYXBwbHlDbGlwRnJvbUltYWdlKG1fc3RhdGUtPm1fY2xp
cCwgbV9zdGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXApOwotICAgICAgICBjYW52YXMoKS0+cmVzdG9y
ZSgpOworICAgICAgICBtX2NhbnZhcy0+cmVzdG9yZSgpOwogICAgIH0KIAogICAgIG1fc3RhdGVT
dGFjay5yZW1vdmVMYXN0KCk7CiAgICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwog
CiAgICAgLy8gUmVzdG9yZSBvdXIgbmF0aXZlIGNhbnZhcy4KLSAgICBjYW52YXMoKS0+cmVzdG9y
ZSgpOworICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJlY3QpCkBAIC0zMjIsOCArMzE3LDcgQEAgdm9pZCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdChTa1JlY3QgcmVjdCkKICAgICBpbnQgZmlsbGNvbG9y
Tm90VHJhbnNwYXJlbnQgPSBtX3N0YXRlLT5tX2ZpbGxDb2xvciAmIDB4RkYwMDAwMDA7CiAgICAg
aWYgKGZpbGxjb2xvck5vdFRyYW5zcGFyZW50KSB7CiAgICAgICAgIHNldHVwUGFpbnRGb3JGaWxs
aW5nKCZwYWludCk7Ci0gICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7Ci0g
ICAgICAgIGRpZERyYXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICAgICAgZHJhd1JlY3QocmVjdCwg
cGFpbnQpOwogICAgIH0KIAogICAgIGlmIChtX3N0YXRlLT5tX3N0cm9rZVN0eWxlICE9IE5vU3Ry
b2tlCkBAIC0zMzUsMTcgKzMyOSwxMyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdS
ZWN0KFNrUmVjdCByZWN0KQogICAgICAgICBwYWludC5zZXRDb2xvcih0aGlzLT5lZmZlY3RpdmVT
dHJva2VDb2xvcigpKTsKIAogICAgICAgICBTa1JlY3QgdG9wQm9yZGVyID0geyByZWN0LmZMZWZ0
LCByZWN0LmZUb3AsIHJlY3QuZlJpZ2h0LCByZWN0LmZUb3AgKyAxIH07Ci0gICAgICAgIGNhbnZh
cygpLT5kcmF3UmVjdCh0b3BCb3JkZXIsIHBhaW50KTsKLSAgICAgICAgZGlkRHJhd1JlY3QodG9w
Qm9yZGVyLCBwYWludCk7CisgICAgICAgIGRyYXdSZWN0KHRvcEJvcmRlciwgcGFpbnQpOwogICAg
ICAgICBTa1JlY3QgYm90dG9tQm9yZGVyID0geyByZWN0LmZMZWZ0LCByZWN0LmZCb3R0b20gLSAx
LCByZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tIH07Ci0gICAgICAgIGNhbnZhcygpLT5kcmF3UmVj
dChib3R0b21Cb3JkZXIsIHBhaW50KTsKLSAgICAgICAgZGlkRHJhd1JlY3QoYm90dG9tQm9yZGVy
LCBwYWludCk7CisgICAgICAgIGRyYXdSZWN0KGJvdHRvbUJvcmRlciwgcGFpbnQpOwogICAgICAg
ICBTa1JlY3QgbGVmdEJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mVG9wICsgMSwgcmVjdC5m
TGVmdCArIDEsIHJlY3QuZkJvdHRvbSAtIDEgfTsKLSAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0
KGxlZnRCb3JkZXIsIHBhaW50KTsKLSAgICAgICAgZGlkRHJhd1JlY3QobGVmdEJvcmRlciwgcGFp
bnQpOworICAgICAgICBkcmF3UmVjdChsZWZ0Qm9yZGVyLCBwYWludCk7CiAgICAgICAgIFNrUmVj
dCByaWdodEJvcmRlciA9IHsgcmVjdC5mUmlnaHQgLSAxLCByZWN0LmZUb3AgKyAxLCByZWN0LmZS
aWdodCwgcmVjdC5mQm90dG9tIC0gMSB9OwotICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3Qocmln
aHRCb3JkZXIsIHBhaW50KTsKLSAgICAgICAgZGlkRHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50
KTsKKyAgICAgICAgZHJhd1JlY3QocmlnaHRCb3JkZXIsIHBhaW50KTsKICAgICB9CiB9CiAKQEAg
LTU4MSwxMyArNTcxLDYgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXREYXNoUGF0aEVm
ZmVjdChTa0Rhc2hQYXRoRWZmZWN0KiBkYXNoKQogICAgIH0KIH0KIAotdm9pZCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpwYWludFNrUGFpbnQoY29uc3QgU2tSZWN0JiByZWN0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQYWludCYgcGFpbnQpCi17Ci0gICAg
bV9jYW52YXMtPmRyYXdSZWN0KHJlY3QsIHBhaW50KTsKLSAgICBkaWREcmF3UmVjdChyZWN0LCBw
YWludCk7Ci19Ci0KIGNvbnN0IFNrQml0bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXRtYXAo
KSBjb25zdAogewogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQpAQCAtNjI1LDI0ICs2MDgsNiBAQCB2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRpZERyYXdSZWN0KGNvbnN0IFNrUmVjdCYgcmVjdCwg
Y29uc3QgU2tQYWludCYgcGFpbnQsCiAgICAgICAgIG1fb3BhcXVlUmVnaW9uLmRpZERyYXdSZWN0
KHRoaXMsIHJlY3QsIHBhaW50LCBiaXRtYXApOwogfQogCi12b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OmRpZERyYXdQYXRoKGNvbnN0IFNrUGF0aCYgcGF0aCwgY29uc3QgU2tQYWludCYgcGFpbnQp
Ci17Ci0gICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCi0gICAgICAgIG1fb3BhcXVlUmVnaW9u
LmRpZERyYXdQYXRoKHRoaXMsIHBhdGgsIHBhaW50KTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpkaWREcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1vZGUgbW9kZSwgaW50IG51bVBv
aW50cywgY29uc3QgU2tQb2ludCBwb2ludHNbXSwgY29uc3QgU2tQYWludCYgcGFpbnQpCi17Ci0g
ICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCi0gICAgICAgIG1fb3BhcXVlUmVnaW9uLmRpZERy
YXdQb2ludHModGhpcywgbW9kZSwgbnVtUG9pbnRzLCBwb2ludHMsIHBhaW50KTsKLX0KLQotdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkaWREcmF3Qm91bmRlZChjb25zdCBTa1JlY3QmIHJlY3Qs
IGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQot
ICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3Qm91bmRlZCh0aGlzLCByZWN0LCBwYWludCk7
Ci19Ci0KIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6YWRqdXN0VGV4dFJlbmRlck1vZGUoU2tQ
YWludCogcGFpbnQpCiB7CiAgICAgaWYgKCFwYWludC0+aXNMQ0RSZW5kZXJUZXh0KCkpCkBAIC02
NTcsNyArNjIyLDcgQEAgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjb3VsZFVzZUxDRFJlbmRl
cmVkVGV4dCgpCiAgICAgLy8gcmVuZGVyZWQgdGV4dCBjYW5ub3QgYmUgY29tcG9zaXRlZCBjb3Jy
ZWN0bHkgd2hlbiB0aGUgbGF5ZXIgaXMKICAgICAvLyBjb2xsYXBzZWQuIFRoZXJlZm9yZSwgc3Vi
cGl4ZWwgdGV4dCBpcyBkaXNhYmxlZCB3aGVuIHdlIGFyZSBkcmF3aW5nCiAgICAgLy8gb250byBh
IGxheWVyLgotICAgIGlmIChjYW52YXMoKS0+aXNEcmF3aW5nVG9MYXllcigpKQorICAgIGlmIChp
c0RyYXdpbmdUb0xheWVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIElmIHRo
aXMgdGV4dCBpcyBub3QgaW4gYW4gaW1hZ2UgYnVmZmVyIGFuZCBzbyB3b24ndCBiZSBleHRlcm5h
bGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCmluZGV4IDIzNjlmMzIwOTk2YTQxMWIzMWJiOGY3M2Ni
YWU2ZGVhNGQ5YmUxZjQuLjcyOWUzYTg1NGFhOTkyNWMwMTE2OWExMGZjNmVlMzhjYWNhZmUyZWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlICJT
a0NhbnZhcy5oIgogI2luY2x1ZGUgIlNrRGFzaFBhdGhFZmZlY3QuaCIKKyNpbmNsdWRlICJTa0Rl
dmljZS5oIgogI2luY2x1ZGUgIlNrRHJhd0xvb3Blci5oIgogI2luY2x1ZGUgIlNrUGFpbnQuaCIK
ICNpbmNsdWRlICJTa1BhdGguaCIKQEAgLTEwMSw3ICsxMDIsNiBAQCBwdWJsaWM6CiAgICAgLy8g
aW52b2tlZC4KICAgICAvLyBOT1RFOiB8aW1hZ2VCdWZmZXJ8IG1heSBiZSBkZWxldGVkIGJlZm9y
ZSB0aGUgfHJlc3RvcmV8IGlzIGludm9rZWQuCiAgICAgdm9pZCBiZWdpbkxheWVyQ2xpcHBlZFRv
SW1hZ2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKTsKLSAgICB2b2lkIGNs
aXBQYXRoQW50aUFsaWFzZWQoY29uc3QgU2tQYXRoJik7CiAKICAgICAvLyBTZXRzIHVwIHRoZSBj
b21tb24gZmxhZ3Mgb24gYSBwYWludCBmb3IgYW50aWFsaWFzaW5nLCBlZmZlY3RzLCBldGMuCiAg
ICAgLy8gVGhpcyBpcyBpbXBsaWNpdGx5IGNhbGxlZCBieSBzZXR1cFBhaW50RmlsbCBhbmQgc2V0
dXBQYWludFN0cm9rZSwgYnV0CkBAIC0xNjEsMTEgKzE2MSw2IEBAIHB1YmxpYzoKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgcHVzaGVkIGRvd24gdG8gR3JhcGhpY3NDb250ZXh0LgogICAg
IHZvaWQgZHJhd1JlY3QoU2tSZWN0IHJlY3QpOwogCi0gICAgLy8gRklYTUU6IEknbSBzdGlsbCB1
bnN1cmUgaG93IEkgd2lsbCBzZXJpYWxpemUgdGhpcyBjYWxsLgotICAgIHZvaWQgcGFpbnRTa1Bh
aW50KGNvbnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKLQotICAgIGNvbnN0IFNrQml0bWFw
KiBiaXRtYXAoKSBjb25zdDsKLQogICAgIC8vIFJldHVybnMgaWYgdGhlIGNvbnRleHQgaXMgYSBw
cmludGluZyBjb250ZXh0IGluc3RlYWQgb2YgYSBkaXNwbGF5CiAgICAgLy8gY29udGV4dC4gQml0
bWFwIHNob3VsZG4ndCBiZSByZXNhbXBsZWQgd2hlbiBwcmludGluZyB0byBrZWVwIHRoZSBiZXN0
CiAgICAgLy8gcG9zc2libGUgcXVhbGl0eS4KQEAgLTE5NSwxNyArMTkwLDYxIEBAIHB1YmxpYzoK
ICAgICAvLyBUaGlzIHdpbGwgYmUgYW4gZW1wdHkgcmVnaW9uIHVubGVzcyB0cmFja2luZyBpcyBl
bmFibGVkLgogICAgIGNvbnN0IE9wYXF1ZVJlZ2lvblNraWEmIG9wYXF1ZVJlZ2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3BhcXVlUmVnaW9uOyB9CiAKLSAgICAvLyBBZnRlciBkcmF3aW5nIGluIHRo
ZSBjb250ZXh0J3MgY2FudmFzLCB1c2UgdGhlc2UgZnVuY3Rpb25zIHRvIG5vdGlmeSB0aGUgY29u
dGV4dCBzbyBpdCBjYW4gdHJhY2sgdGhlIG9wYXF1ZSByZWdpb24uCisgICAgLy8gQWZ0ZXIgZHJh
d2luZyBkaXJlY3RseSB0byB0aGUgY29udGV4dCdzIGNhbnZhcywgdXNlIHRoaXMgZnVuY3Rpb24g
dG8gbm90aWZ5IHRoZSBjb250ZXh0IHNvCisgICAgLy8gaXQgY2FuIHRyYWNrIHRoZSBvcGFxdWUg
cmVnaW9uLgorICAgIC8vIEZJWE1FOiB0aGlzIGlzIHN0aWxsIG5lZWRlZCBvbmx5IGJlY2F1c2Ug
SW1hZ2VTa2lhOjpwYWludFNrQml0bWFwKCkgbWF5IG5lZWQgdG8gbm90aWZ5IGZvciBhCisgICAg
Ly8gICAgICAgIHNtYWxsZXIgcmVjdCB0aGFuIHRoZSBvbmUgZHJhd24gdG8sIGR1ZSB0byBpdHMg
Y2xpcHBpbmcgbG9naWMuCiAgICAgdm9pZCBkaWREcmF3UmVjdChjb25zdCBTa1JlY3QmLCBjb25z
dCBTa1BhaW50JiwgY29uc3QgU2tCaXRtYXAqID0gMCk7Ci0gICAgdm9pZCBkaWREcmF3UGF0aChj
b25zdCBTa1BhdGgmLCBjb25zdCBTa1BhaW50Jik7Ci0gICAgdm9pZCBkaWREcmF3UG9pbnRzKFNr
Q2FudmFzOjpQb2ludE1vZGUsIGludCBudW1Qb2ludHMsIGNvbnN0IFNrUG9pbnRbXSwgY29uc3Qg
U2tQYWludCYpOwotICAgIC8vIEZvciBkcmF3aW5nIG9wZXJhdGlvbnMgdGhhdCBkbyBub3QgZmls
bCB0aGUgZW50aXJlIHJlY3QuCi0gICAgdm9pZCBkaWREcmF3Qm91bmRlZChjb25zdCBTa1JlY3Qm
LCBjb25zdCBTa1BhaW50Jik7CiAKICAgICAvLyBUdXJuIG9mZiBMQ0QgdGV4dCBmb3IgdGhlIHBh
aW50IGlmIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBjb250ZXh0LgogICAgIHZvaWQgYWRqdXN0VGV4
dFJlbmRlck1vZGUoU2tQYWludCopOwogICAgIGJvb2wgY291bGRVc2VMQ0RSZW5kZXJlZFRleHQo
KTsKIAorICAgIGVudW0gQW50aUFsaWFzaW5nTW9kZSB7CisgICAgICAgIE5vdEFudGlBbGlhc2Vk
LAorICAgICAgICBBbnRpQWxpYXNlZAorICAgIH07CisgICAgZW51bSBBY2Nlc3NNb2RlIHsKKyAg
ICAgICAgUmVhZE9ubHksCisgICAgICAgIFJlYWRXcml0ZQorICAgIH07CisKKyAgICAvLyBTa0Nh
bnZhcyB3cmFwcGVycy4KKyAgICBjb25zdCBTa0JpdG1hcCogYml0bWFwKCkgY29uc3Q7CisgICAg
Y29uc3QgU2tCaXRtYXAqIGxheWVyQml0bWFwKEFjY2Vzc01vZGUgPSBSZWFkT25seSkgY29uc3Q7
CisgICAgYm9vbCByZWFkUGl4ZWxzKFNrQml0bWFwKiwgaW50IHgsIGludCB5LAorICAgICAgICBT
a0NhbnZhczo6Q29uZmlnODg4OCA9IFNrQ2FudmFzOjprTmF0aXZlX1ByZW11bF9Db25maWc4ODg4
KTsKKyAgICB2b2lkIHdyaXRlUGl4ZWxzKGNvbnN0IFNrQml0bWFwJiwgaW50IHgsIGludCB5LAor
ICAgICAgICBTa0NhbnZhczo6Q29uZmlnODg4OCA9IFNrQ2FudmFzOjprTmF0aXZlX1ByZW11bF9D
b25maWc4ODg4KTsKKyAgICBib29sIGlzRHJhd2luZ1RvTGF5ZXIoKSBjb25zdDsKKyAgICBib29s
IGlzVmVjdG9yKCkgY29uc3Q7CisKKyAgICBib29sIGNsaXBQYXRoKGNvbnN0IFNrUGF0aCYsIEFu
dGlBbGlhc2luZ01vZGUgPSBOb3RBbnRpQWxpYXNlZCwKKyAgICAgICAgU2tSZWdpb246Ok9wID0g
U2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgIGJvb2wgY2xpcFJlY3QoY29uc3QgU2tSZWN0
JiwgQW50aUFsaWFzaW5nTW9kZSA9IE5vdEFudGlBbGlhc2VkLAorICAgICAgICBTa1JlZ2lvbjo6
T3AgPSBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgYm9vbCBnZXRDbGlwQm91bmRzKFNr
UmVjdCopIGNvbnN0OworCisgICAgdm9pZCBzZXRNYXRyaXgoY29uc3QgU2tNYXRyaXgmKTsKKyAg
ICBjb25zdCBTa01hdHJpeCYgZ2V0VG90YWxNYXRyaXgoKSBjb25zdDsKKyAgICBib29sIGNvbmNh
dChjb25zdCBTa01hdHJpeCYpOworICAgIGJvb2wgcm90YXRlKFNrU2NhbGFyIGRlZ3JlZXMpOwor
ICAgIGJvb2wgc2NhbGUoU2tTY2FsYXIgc3gsIFNrU2NhbGFyIHN5KTsKKyAgICBib29sIHRyYW5z
bGF0ZShTa1NjYWxhciBkeCwgU2tTY2FsYXIgZHkpOworCisgICAgdm9pZCBkcmF3Qml0bWFwKGNv
bnN0IFNrQml0bWFwJiwgU2tTY2FsYXIsIFNrU2NhbGFyLCBjb25zdCBTa1BhaW50KiA9IDApOwor
ICAgIHZvaWQgZHJhd0JpdG1hcFJlY3QoY29uc3QgU2tCaXRtYXAmLCBjb25zdCBTa0lSZWN0Kiwg
Y29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCogPSAwKTsKKyAgICB2b2lkIGRyYXdPdmFsKGNv
bnN0IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFNr
UGF0aCYsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2b2lkIGRyYXdQb2ludHMoU2tDYW52YXM6OlBv
aW50TW9kZSwgc2l6ZV90IGNvdW50LCBjb25zdCBTa1BvaW50IHB0c1tdLCBjb25zdCBTa1BhaW50
Jik7CisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50Jik7Cisg
ICAgdm9pZCBkcmF3SVJlY3QoY29uc3QgU2tJUmVjdCYsIGNvbnN0IFNrUGFpbnQmKTsKKyAgICB2
b2lkIGRyYXdQb3NUZXh0KGNvbnN0IHZvaWQqIHRleHQsIHNpemVfdCBieXRlTGVuZ3RoLCBjb25z
dCBTa1BvaW50IHBvc1tdLCBjb25zdCBTa1BhaW50Jik7CisgICAgdm9pZCBkcmF3UG9zVGV4dEgo
Y29uc3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVMZW5ndGgsIGNvbnN0IFNrU2NhbGFyIHhwb3Nb
XSwgU2tTY2FsYXIgY29uc3RZLAorICAgICAgICBjb25zdCBTa1BhaW50Jik7CisgICAgdm9pZCBk
cmF3VGV4dE9uUGF0aChjb25zdCB2b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwgY29uc3Qg
U2tQYXRoJiwKKyAgICAgICAgY29uc3QgU2tNYXRyaXgqLCBjb25zdCBTa1BhaW50Jik7CisKICNp
ZiBkZWZpbmVkKFNLX1NVUFBPUlRfSElOVElOR19TQ0FMRV9GQUNUT1IpCiAgICAgdm9pZCBzZXRI
aW50aW5nU2NhbGVGYWN0b3IoU2tTY2FsYXIgZmFjdG9yKSB7IG1faGludGluZ1NjYWxlRmFjdG9y
ID0gZmFjdG9yOyB9CiAgICAgU2tTY2FsYXIgaGludGluZ1NjYWxlRmFjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9oaW50aW5nU2NhbGVGYWN0b3I7IH0KQEAgLTI0OCw1ICsyODcsMTQ1IEBAIHByaXZh
dGU6CiAjZW5kaWYKIH07CiAKK2lubGluZSBjb25zdCBTa0JpdG1hcCogUGxhdGZvcm1Db250ZXh0
U2tpYTo6bGF5ZXJCaXRtYXAoQWNjZXNzTW9kZSBhY2Nlc3MpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICZtX2NhbnZhcy0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChhY2Nlc3MgPT0gUmVhZFdy
aXRlKTsKK30KKworaW5saW5lIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZFBpeGVscyhT
a0JpdG1hcCogYml0bWFwLCBpbnQgeCwgaW50IHksCisgICAgU2tDYW52YXM6OkNvbmZpZzg4ODgg
Y29uZmlnODg4OCkKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPnJlYWRQaXhlbHMoYml0bWFwLCB4
LCB5LCBjb25maWc4ODg4KTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6
d3JpdGVQaXhlbHMoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IHgsIGludCB5LAorICAgIFNr
Q2FudmFzOjpDb25maWc4ODg4IGNvbmZpZzg4ODgpCit7CisgICAgbV9jYW52YXMtPndyaXRlUGl4
ZWxzKGJpdG1hcCwgeCwgeSwgY29uZmlnODg4OCk7Cit9CisKK2lubGluZSBib29sIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmlzRHJhd2luZ1RvTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2Nh
bnZhcy0+aXNEcmF3aW5nVG9MYXllcigpOworfQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjppc1ZlY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FudmFzLT5nZXRUb3BE
ZXZpY2UoKS0+Z2V0RGV2aWNlQ2FwYWJpbGl0aWVzKCkgJiBTa0RldmljZTo6a1ZlY3Rvcl9DYXBh
YmlsaXR5OworfQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlwUGF0aChj
b25zdCBTa1BhdGgmIHBhdGgsIEFudGlBbGlhc2luZ01vZGUgYWEsIFNrUmVnaW9uOjpPcCBvcCkK
K3sKKyAgICByZXR1cm4gbV9jYW52YXMtPmNsaXBQYXRoKHBhdGgsIG9wLCBhYSA9PSBBbnRpQWxp
YXNlZCk7Cit9CisKK2lubGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBSZWN0KGNv
bnN0IFNrUmVjdCYgcmVjdCwgQW50aUFsaWFzaW5nTW9kZSBhYSwgU2tSZWdpb246Ok9wIG9wKQor
eworICAgIHJldHVybiBtX2NhbnZhcy0+Y2xpcFJlY3QocmVjdCwgb3AsIGFhID09IEFudGlBbGlh
c2VkKTsKK30KKworaW5saW5lIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0Q2xpcEJvdW5k
cyhTa1JlY3QqIGJvdW5kcykgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPmdldENsaXBC
b3VuZHMoYm91bmRzKTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0
TWF0cml4KGNvbnN0IFNrTWF0cml4JiBtYXRyaXgpCit7CisgICAgbV9jYW52YXMtPnNldE1hdHJp
eChtYXRyaXgpOworfQorCitpbmxpbmUgY29uc3QgU2tNYXRyaXgmIFBsYXRmb3JtQ29udGV4dFNr
aWE6OmdldFRvdGFsTWF0cml4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPmdldFRv
dGFsTWF0cml4KCk7Cit9CisKK2lubGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmNvbmNh
dChjb25zdCBTa01hdHJpeCYgbWF0cml4KQoreworICAgIHJldHVybiBtX2NhbnZhcy0+Y29uY2F0
KG1hdHJpeCk7Cit9CisKK2lubGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OnJvdGF0ZShT
a1NjYWxhciBkZWdyZWVzKQoreworICAgIHJldHVybiBtX2NhbnZhcy0+cm90YXRlKGRlZ3JlZXMp
OworfQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzY2FsZShTa1NjYWxhciBz
eCwgU2tTY2FsYXIgc3kpCit7CisgICAgcmV0dXJuIG1fY2FudmFzLT5zY2FsZShzeCwgc3kpOwor
fQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp0cmFuc2xhdGUoU2tTY2FsYXIg
ZHgsIFNrU2NhbGFyIGR5KQoreworICAgIHJldHVybiBtX2NhbnZhcy0+dHJhbnNsYXRlKGR4LCBk
eSk7Cit9CisKK2lubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdCaXRtYXAoY29u
c3QgU2tCaXRtYXAmIGJpdG1hcCwgU2tTY2FsYXIgbGVmdCwgU2tTY2FsYXIgdG9wLAorICAgIGNv
bnN0IFNrUGFpbnQqIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3Qml0bWFwKGJpdG1hcCwg
bGVmdCwgdG9wLCBwYWludCk7Cit9CisKK2lubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6
OmRyYXdCaXRtYXBSZWN0KGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IFNrSVJlY3QqIGlz
cmMsCisgICAgY29uc3QgU2tSZWN0JiBkc3QsIGNvbnN0IFNrUGFpbnQqIHBhaW50KQoreworICAg
IG1fY2FudmFzLT5kcmF3Qml0bWFwUmVjdChiaXRtYXAsIGlzcmMsIGRzdCwgcGFpbnQpOworfQor
CitpbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3T3ZhbChjb25zdCBTa1JlY3Qm
IG92YWwsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3T3ZhbChv
dmFsLCBwYWludCk7CisKKyAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9v
cGFxdWVSZWdpb24uZGlkRHJhd0JvdW5kZWQodGhpcywgb3ZhbCwgcGFpbnQpOworfQorCitpbmxp
bmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UGF0aChjb25zdCBTa1BhdGgmIHBhdGgs
IGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3UGF0aChwYXRoLCBw
YWludCk7CisKKyAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVS
ZWdpb24uZGlkRHJhd1BhdGgodGhpcywgcGF0aCwgcGFpbnQpOworfQorCitpbmxpbmUgdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1vZGUgbW9kZSwg
c2l6ZV90IGNvdW50LAorICAgIGNvbnN0IFNrUG9pbnQgcHRzW10sIGNvbnN0IFNrUGFpbnQmIHBh
aW50KQoreworICAgIG1fY2FudmFzLT5kcmF3UG9pbnRzKG1vZGUsIGNvdW50LCBwdHMsIHBhaW50
KTsKKworICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQorICAgICAgICBtX29wYXF1ZVJlZ2lv
bi5kaWREcmF3UG9pbnRzKHRoaXMsIG1vZGUsIGNvdW50LCBwdHMsIHBhaW50KTsKK30KKworaW5s
aW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoY29uc3QgU2tSZWN0JiByZWN0
LCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd1JlY3QocmVjdCwg
cGFpbnQpOworCisgICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCisgICAgICAgIG1fb3BhcXVl
UmVnaW9uLmRpZERyYXdSZWN0KHRoaXMsIHJlY3QsIHBhaW50LCAwKTsKK30KKworaW5saW5lIHZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd0lSZWN0KGNvbnN0IFNrSVJlY3QmIHJlY3QsIGNv
bnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3SVJlY3QocmVjdCwgcGFp
bnQpOworfQorCitpbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UG9zVGV4dChj
b25zdCB2b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwKKyAgICBjb25zdCBTa1BvaW50IHBv
c1tdLCBjb25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd1Bvc1RleHQo
dGV4dCwgYnl0ZUxlbmd0aCwgcG9zLCBwYWludCk7Cit9CisKK2lubGluZSB2b2lkIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmRyYXdQb3NUZXh0SChjb25zdCB2b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxl
bmd0aCwKKyAgICBjb25zdCBTa1NjYWxhciB4cG9zW10sIFNrU2NhbGFyIGNvbnN0WSwgY29uc3Qg
U2tQYWludCYgcGFpbnQpCit7CisgICAgbV9jYW52YXMtPmRyYXdQb3NUZXh0SCh0ZXh0LCBieXRl
TGVuZ3RoLCB4cG9zLCBjb25zdFksIHBhaW50KTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6ZHJhd1RleHRPblBhdGgoY29uc3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVM
ZW5ndGgsCisgICAgY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa01hdHJpeCogbWF0cml4LCBj
b25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd1RleHRPblBhdGgodGV4
dCwgYnl0ZUxlbmd0aCwgcGF0aCwgbWF0cml4LCBwYWludCk7Cit9CisKIH0KICNlbmRpZiAvLyBQ
bGF0Zm9ybUNvbnRleHRTa2lhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKaW5kZXggYTZmMzdjZmYwNzRlMmJjMjMwMzli
NTM5MzkzNjBjYTdmYjAxYjNkOC4uYjhhMDU1MGFkMTE2Y2QyOTk4YmQ0NzJiYTcxZmZjYmU2ZTUy
Y2UzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9T
a2lhRm9udFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9Ta2lhRm9udFdpbi5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCB3aW5kb3dzQ2FuSGFuZGxl
VGV4dERyYXdpbmdXaXRob3V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIH0KICNl
bmRpZgogCi1zdGF0aWMgdm9pZCBza2lhRHJhd1RleHQoU2tDYW52YXMqIGNhbnZhcywKK3N0YXRp
YyB2b2lkIHNraWFEcmF3VGV4dChQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQmIHBvaW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIFNrUGFpbnQqIHBhaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdPUkQqIGdseXBocywKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgdm9pZCBza2lhRHJhd1Rl
eHQoU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgeSArIC1Ta0ludFRv
U2NhbGFyKG9mZnNldHNbaV0uZHYpKTsKICAgICAgICAgICAgIHggKz0gU2tJbnRUb1NjYWxhcihh
ZHZhbmNlc1tpXSk7CiAgICAgICAgIH0KLSAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChnbHlw
aHMsIG51bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksIHBvcywgKnBhaW50KTsKKyAgICAgICAg
Y29udGV4dC0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgKiBzaXplb2YodWludDE2X3Qp
LCBwb3MsICpwYWludCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU2tBdXRvU1RBcnJheTxrTG9j
YWxHbHlwaE1heCAqIDIsIFNrU2NhbGFyPiBzdG9yYWdlKG51bUdseXBocyk7CiAgICAgICAgIFNr
U2NhbGFyKiB4cG9zID0gc3RvcmFnZS5nZXQoKTsKQEAgLTEzMiw3ICsxMzIsNyBAQCBzdGF0aWMg
dm9pZCBza2lhRHJhd1RleHQoU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAgIHhwb3NbaV0g
PSB4OwogICAgICAgICAgICAgeCArPSBTa0ludFRvU2NhbGFyKGFkdmFuY2VzW2ldKTsKICAgICAg
ICAgfQotICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0SChnbHlwaHMsIG51bUdseXBocyAqIHNp
emVvZih1aW50MTZfdCksCisgICAgICAgIGNvbnRleHQtPmRyYXdQb3NUZXh0SChnbHlwaHMsIG51
bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHhwb3MsIHksICpwYWludCk7CiAgICAgfQogfQpAQCAtMjE4LDEwICsyMTgsOSBAQCBzdGF0aWMg
dm9pZCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSEZPTlQgaGZvbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQqIG9yaWdpbikKIHsKICAg
ICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0LT5jYW52
YXMoKTsKICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0TW9kZSA9IHBsYXRmb3JtQ29udGV4
dC0+Z2V0VGV4dERyYXdpbmdNb2RlKCk7CiAgICAgLy8gRW5zdXJlIGZvbnQgbG9hZCBmb3IgcHJp
bnRpbmcsIGJlY2F1c2UgUERGIGRldmljZSBuZWVkcyBpdC4KLSAgICBpZiAoY2FudmFzLT5nZXRU
b3BEZXZpY2UoKS0+Z2V0RGV2aWNlQ2FwYWJpbGl0aWVzKCkgJiBTa0RldmljZTo6a1ZlY3Rvcl9D
YXBhYmlsaXR5KQorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPmlzVmVjdG9yKCkpCiAgICAgICAg
IFBsYXRmb3JtU3VwcG9ydDo6ZW5zdXJlRm9udExvYWRlZChoZm9udCk7CiAKICAgICAvLyBGaWxs
aW5nIChpZiBuZWNlc3NhcnkpLiBUaGlzIGlzIHRoZSBjb21tb24gY2FzZS4KQEAgLTIzMyw3ICsy
MzIsNyBAQCBzdGF0aWMgdm9pZCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgSEZPTlQgaGZvbnQsCiAgICAgYm9vbCBkaWRGaWxsID0gZmFsc2U7CiAKICAgICBpZiAoKHRl
eHRNb2RlICYgVGV4dE1vZGVGaWxsKSAmJiAoU2tDb2xvckdldEEocGFpbnQuZ2V0Q29sb3IoKSkg
fHwgcGFpbnQuZ2V0TG9vcGVyKCkpKSB7Ci0gICAgICAgIHNraWFEcmF3VGV4dChjYW52YXMsICpv
cmlnaW4sICZwYWludCwgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCAmb2Zmc2V0c1swXSwgbnVt
R2x5cGhzKTsKKyAgICAgICAgc2tpYURyYXdUZXh0KHBsYXRmb3JtQ29udGV4dCwgKm9yaWdpbiwg
JnBhaW50LCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sICZvZmZzZXRzWzBdLCBudW1HbHlwaHMp
OwogICAgICAgICBkaWRGaWxsID0gdHJ1ZTsKICAgICB9CiAKQEAgLTI2MCw3ICsyNTksNyBAQCBz
dGF0aWMgdm9pZCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSEZPTlQg
aGZvbnQsCiAgICAgICAgICAgICBwYWludC5zZXRMb29wZXIoMCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBza2lhRHJhd1RleHQoY2FudmFzLCAqb3JpZ2luLCAmcGFpbnQsICZnbHlwaHNbMF0sICZh
ZHZhbmNlc1swXSwgJm9mZnNldHNbMF0sIG51bUdseXBocyk7CisgICAgICAgIHNraWFEcmF3VGV4
dChwbGF0Zm9ybUNvbnRleHQsICpvcmlnaW4sICZwYWludCwgJmdseXBoc1swXSwgJmFkdmFuY2Vz
WzBdLCAmb2Zmc2V0c1swXSwgbnVtR2x5cGhzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmNwcAppbmRleCAxZTJj
OGRhYjhhNjU1ODgzMGE5MDdjODYxMDE5NDM3MDRkZjk2YmRhLi5jODQxOTk0M2VjNTk5NDBkY2I4
YTUyZTVlNDQ5NjI2MmMyMDhmZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3BwCkBAIC0xMDYsOSArMTA2LDkgQEAgQ29sb3Ig
U2tQTUNvbG9yVG9XZWJDb3JlQ29sb3IoU2tQTUNvbG9yIHBtKQogICAgIHJldHVybiBTa1BNQ29s
b3JUb0NvbG9yKHBtKTsKIH0KIAotdm9pZCBDbGlwUmVjdFRvQ2FudmFzKGNvbnN0IFNrQ2FudmFz
JiBjYW52YXMsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgU2tSZWN0KiBkZXN0UmVjdCkKK3ZvaWQg
Q2xpcFJlY3RUb0NhbnZhcyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25z
dCBTa1JlY3QmIHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpCiB7Ci0gICAgaWYgKCFjYW52YXMu
Z2V0Q2xpcEJvdW5kcyhkZXN0UmVjdCkgfHwgIWRlc3RSZWN0LT5pbnRlcnNlY3Qoc3JjUmVjdCkp
CisgICAgaWYgKCFjb250ZXh0LT5nZXRDbGlwQm91bmRzKGRlc3RSZWN0KSB8fCAhZGVzdFJlY3Qt
PmludGVyc2VjdChzcmNSZWN0KSkKICAgICAgICAgZGVzdFJlY3QtPnNldEVtcHR5KCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0
aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5o
CmluZGV4IDY4MWRjZDU1ZTc5N2I2ZDVhOWUwNDk3YmRlMDI0MDA0ODU4MjFkODguLjM1OGY4NmQx
MTY5OTVkMGUzMTQ0ZWU0MWY4MDhmMjA0NzI3MWRiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuaApAQCAtNjcsNyArNjcsNyBAQCBp
bmxpbmUgU2tTY2FsYXIgV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoZG91YmxlIGQpCiAvLyBjbGlw
LCBkb2luZyB0aGUgbmVjZXNzYXJ5IGNvb3JkaW5hdGUgdHJhbnNmb3Jtcy4KIC8vCiAvLyBzcmNS
ZWN0IGFuZCBkZXN0UmVjdCBjYW4gYmUgdGhlIHNhbWUuCi12b2lkIENsaXBSZWN0VG9DYW52YXMo
Y29uc3QgU2tDYW52YXMmLCBjb25zdCBTa1JlY3QmIHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3Qp
Owordm9pZCBDbGlwUmVjdFRvQ2FudmFzKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25z
dCBTa1JlY3QmIHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpOwogCiAvLyBEZXRlcm1pbmUgaWYg
YSBnaXZlbiBXZWJLaXQgcG9pbnQgaXMgY29udGFpbmVkIGluIGEgcGF0aAogYm9vbCBTa1BhdGhD
b250YWluc1BvaW50KFNrUGF0aCosIGNvbnN0IEZsb2F0UG9pbnQmLCBTa1BhdGg6OkZpbGxUeXBl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5
V2luVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdp
blRlc3QuY3BwCmluZGV4IGFlMzA5MGQ4YzUwN2U5NDA0NTlmZmVhNzQwYTMwYjcwMGJjYjcyZjEu
LjVhYjQxNjIyYjYxZWI1OTkyNmIyZWE5YmFiMjU5MTA3MThiNmNiNmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcApAQCAt
NjYsMTggKzY2LDE4IEBAIHN0YXRpYyB2b2lkIGRyYXdOYXRpdmVSZWN0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwKIAogc3RhdGljIENvbG9yIGdldFBpeGVsQXQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vz
c0JpdG1hcChmYWxzZSk7Ci0gICAgcmV0dXJuIENvbG9yKCpyZWludGVycHJldF9jYXN0PGNvbnN0
IFJHQkEzMio+KGJpdG1hcC5nZXRBZGRyMzIoeCwgeSkpKTsKKyAgICBjb25zdCBTa0JpdG1hcCog
Yml0bWFwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmxheWVyQml0bWFwKCk7CisgICAg
cmV0dXJuIENvbG9yKCpyZWludGVycHJldF9jYXN0PGNvbnN0IFJHQkEzMio+KGJpdG1hcC0+Z2V0
QWRkcjMyKHgsIHkpKSk7CiB9CiAKIC8vIFJlc2V0cyB0aGUgdG9wIGxheWVyJ3MgYWxwaGEgY2hh
bm5lbCB0byAwIGZvciBlYWNoIHBpeGVsLiBUaGlzIHNpbXVsYXRlcwogLy8gV2luZG93cyBtZXNz
aW5nIGl0IHVwLgogc3RhdGljIHZvaWQgY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8
U2tCaXRtYXAmPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERl
dmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGJp
dG1hcC5oZWlnaHQoKTsgeSsrKSB7Ci0gICAgICAgIHVpbnQzMl90KiByb3cgPSBiaXRtYXAuZ2V0
QWRkcjMyKDAsIHkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGJpdG1hcC53aWR0aCgp
OyB4KyspCisgICAgU2tCaXRtYXAqIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAqPihjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+bGF5ZXJCaXRtYXAoKSk7CisgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBiaXRtYXAtPmhlaWdodCgpOyB5KyspIHsKKyAgICAgICAgdWludDMyX3QqIHJvdyA9
IGJpdG1hcC0+Z2V0QWRkcjMyKDAsIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGJp
dG1hcC0+d2lkdGgoKTsgeCsrKQogICAgICAgICAgICAgcm93W3hdICY9IDB4MDBGRkZGRkY7CiAg
ICAgfQogfQpAQCAtODUsOCArODUsOCBAQCBzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFD
aGFubmVsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIC8vIENsZWFycyB0aGUgYWxwaGEgY2hh
bm5lbCBvbiB0aGUgc3BlY2lmaWVkIHBpeGVsLgogc3RhdGljIHZvaWQgY2xlYXJUb3BMYXllckFs
cGhhUGl4ZWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAg
U2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2Up
KTsKLSAgICAqYml0bWFwLmdldEFkZHIzMih4LCB5KSAmPSAweDAwRkZGRkZGOworICAgIFNrQml0
bWFwKiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwKj4oY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPmxheWVyQml0bWFwKCkpOworICAgICpiaXRtYXAtPmdldEFkZHIzMih4LCB5KSAmPSAw
eDAwRkZGRkZGOwogfQogCiBzdGF0aWMgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0
cmVhbSYgb3V0LCBjb25zdCBDb2xvciYgYykKQEAgLTYxNiw4ICs2MTYsOCBAQCBURVNUKFRyYW5z
cGFyZW5jeVdpbiwgU2NhbGUpCiAgICAgICAgIC8vIHRoZSBoZWxwZXIgZ29lcyBvdXQgb2Ygc2Nv
cGUuIFdlIGRvbid0IHdhbnQgdG8gY2FsbAogICAgICAgICAvLyBjbGVhclRvcExheWVyQWxwaGFD
aGFubmVsIGJlY2F1c2UgdGhhdCB3aWxsIGFjdHVhbGx5IGNsZWFyIHRoZSB3aG9sZQogICAgICAg
ICAvLyBjYW52YXMgKHNpbmNlIHdlIGhhdmUgbm8gZXh0cmEgbGF5ZXIhKS4KLSAgICAgICAgU2tC
aXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAo
ZmFsc2UpKTsKLSAgICAgICAgKmJpdG1hcC5nZXRBZGRyMzIoMiwgMikgJj0gMHgwMEZGRkZGRjsK
KyAgICAgICAgU2tCaXRtYXAqIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAqPihoZWxwZXIu
Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+bGF5ZXJCaXRtYXAoKSk7CisgICAgICAgICpi
aXRtYXAtPmdldEFkZHIzMigyLCAyKSAmPSAweDAwRkZGRkZGOwogICAgICAgICBoZWxwZXIuY29t
cG9zaXRlKCk7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175279</attachid>
            <date>2012-11-20 14:24:56 -0800</date>
            <delta_ts>2012-11-21 05:43:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102694-20121120172244.patch</filename>
            <type>text/plain</type>
            <size>68434</size>
            <attacher name="Florin Malita">fmalita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWJjZDZlODk3MDI5ZjQ3
NTc1NTc2ZTI4ZGJkYmEzYTA5NjE3MDYxYS4uMTMwOGVmYmRiYmYzZDE0YmJkMzk2YTk5NGIxYTVl
MjdiMGE5ZDg3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNiBAQAorMjAxMi0xMS0yMCAgRmxv
cmluIE1hbGl0YSAgPGZtYWxpdGFAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtTa2lhXSBFbmNh
cHN1bGF0ZSBhY2Nlc3MgdG8gUGxhdGZvcm1Db250ZXh0U2tpYSdzIFNrQ2FudmFzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2OTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgU2tDYW52YXMtZXF1
aXZhbGVudCBtZXRob2RzIHRvIFBsYXRmb3JtQ29udGV4dFNraWEsIGFuZCByZWZhY3RvciBkaXJl
Y3QgY2FudmFzIGNhbGwKKyAgICAgICAgc2l0ZXMgdG8gdXNlIHRoZXNlIHdyYXBwZXJzIGluc3Rl
YWQuIFRoaXMgcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGNhbnZhcygpIHVzZXJzIGZyb20gOTArCisg
ICAgICAgIHRvIDIyIChtb3N0bHkgdGhlbWUvdWkgY29kZSkuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzOiByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1UaGVtZUNocm9taXVtTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1U
aGVtZUNocm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24pOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyYW5zcGFyZW5jeVdpbjo6Y29tcHV0ZUxheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZU9wYXF1ZUNvbXBvc2l0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3NpdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUJsZW5kU2tpYS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U2tpYSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29sb3JNYXRyaXhTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTa2lhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb21wb25lbnRUcmFuc2ZlclNraWEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNr
aWEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUxpZ2h0aW5n
U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U2tp
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZvbnRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RD
bGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNv
bmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpkcmF3T3V0ZXJQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlQXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVs
dGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmRyYXdSZXNhbXBsZWRCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6aGFzTm9u
OTByb3RhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpwYWludFNrQml0bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
U2tpYTo6YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tp
YTo6Y291bGRVc2VMQ0RSZW5kZXJlZFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tp
YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpsYXllckJpdG1hcCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNr
aWE6OnJlYWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6
d3JpdGVQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6aXNE
cmF3aW5nVG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpp
c1ZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlwUGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlwUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRDbGlwQm91bmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnNldE1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpnZXRUb3RhbE1hdHJpeCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpjb25jYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4
dFNraWE6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
OjpkcmF3Qml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRy
YXdCaXRtYXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRy
YXdPdmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdQb2ludHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd0lSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdQb3NUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdQb3NUZXh0SCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3VGV4dE9uUGF0aCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpza2lh
RHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa2lhVGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2xpcFJlY3RUb0NhbnZhcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lh
VXRpbHMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTExLTIwICBLZWlzaGkgSGF0dG9y
aSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFdlZWsgcGlja2VyIHdpZHRoIGlzIHRv
byBzbWFsbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5NmZkMWVhOTczYTdmN2M5OTY0
ODM4NTJlZTMzNWFiYzc3MTY0NzZkLi4wMzE3ODYyMjViOTFlMGRkNjgwMTQ0ZmU2ZDczZDAyYWJi
OGYyMGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDEy
LTExLTIwICBGbG9yaW4gTWFsaXRhICA8Zm1hbGl0YUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W1NraWFdIEVuY2Fwc3VsYXRlIGFjY2VzcyB0byBQbGF0Zm9ybUNvbnRleHRTa2lhJ3MgU2tDYW52
YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjY5
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBQ
bGF0Zm9ybUNvbnRleHRTa2lhJ3Mgd3JhcHBlciBtZXRob2RzIGluc3RlYWQgb2YgYWNjZXNzaW5n
IHRoZSBjYW52YXMgZGlyZWN0bHkuCisKKyAgICAgICAgKiB0ZXN0cy9UcmFuc3BhcmVuY3lXaW5U
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFBpeGVsQXQpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhclRv
cExheWVyQWxwaGFQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMi0xMS0x
OSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLiBGaXggQ2hyb21pdW0gV2luIGNvbXBpbGF0aW9uIGFmdGVyIHIxMzUxOTYuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVRoZW1lQ2hy
b21pdW1MaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9y
bVRoZW1lQ2hyb21pdW1MaW51eC5jcHAKaW5kZXggYmU0Zjg1MGE4NWUyNzZhNTliMGI5MDIzNWMw
MTkwZDBhZDU5M2QwOS4uNzBjYzY0YmE5NmVlMjQ0NTZmYjIxNWVhNDJjZmU1YTI3ZTgzODBmNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1UaGVt
ZUNocm9taXVtTGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1BsYXRmb3JtVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApAQCAtOTksNyArOTksNyBAQCBTa0NvbG9y
IFBsYXRmb3JtVGhlbWVDaHJvbWl1bUxpbnV4OjpvdXRsaW5lQ29sb3IoY29uc3QgU2tTY2FsYXIg
aHN2MVszXSwgY29uc3QgUwogCiB2b2lkIFBsYXRmb3JtVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWlu
dEFycm93QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFJlY3QmIHJlY3QsIEFy
cm93RGlyZWN0aW9uIGRpcmVjdGlvbiwgQ29udHJvbFN0YXRlcyBzdGF0ZXMpCiB7Ci0gICAgU2tD
YW52YXMqIGNvbnN0IGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Cisg
ICAgUGxhdGZvcm1Db250ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0ID0gZ2MtPnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIGludCB3aWR0aE1pZGRsZSwgbGVuZ3RoTWlkZGxlOwogICAgIFNrUGFpbnQg
cGFpbnQ7CiAgICAgaWYgKGRpcmVjdGlvbiA9PSBOb3J0aCB8fCBkaXJlY3Rpb24gPT0gU291dGgp
IHsKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtVGhlbWVDaHJvbWl1bUxpbnV4Ojpw
YWludEFycm93QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludAogICAgIHNrcmVj
dC5zZXQocmVjdC54KCksIHJlY3QueSgpLCByZWN0LngoKSArIHJlY3Qud2lkdGgoKSwgcmVjdC55
KCkgKyByZWN0LmhlaWdodCgpKTsKICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZCAodGhlIGFy
ZWEgdmlzaWJsZSBiZWhpbmQgdGhlIHJvdW5kZWQgY29ybmVycykuCiAgICAgcGFpbnQuc2V0Q29s
b3IoYmFja2dyb3VuZENvbG9yKTsKLSAgICBjYW52YXMtPmRyYXdJUmVjdChza3JlY3QsIHBhaW50
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQtPmRyYXdJUmVjdChza3JlY3QsIHBhaW50KTsKIAogICAg
IC8vIFBhaW50IHRoZSBidXR0b24ncyBvdXRsaW5lIGFuZCBmaWxsIHRoZSBtaWRkbGUKICAgICBT
a1BhdGggb3V0bGluZTsKQEAgLTE3MSwxNCArMTcxLDE0IEBAIHZvaWQgUGxhdGZvcm1UaGVtZUNo
cm9taXVtTGludXg6OnBhaW50QXJyb3dCdXR0b24oR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3Qg
SW50CiAKICAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7CiAgICAgcGFp
bnQuc2V0Q29sb3IoYnV0dG9uQ29sb3IpOwotICAgIGNhbnZhcy0+ZHJhd1BhdGgob3V0bGluZSwg
cGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1BhdGgob3V0bGluZSwgcGFpbnQpOwog
CiAgICAgcGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOwogICAgIHBhaW50LnNldFN0eWxlKFNrUGFp
bnQ6OmtTdHJva2VfU3R5bGUpOwogICAgIFNrU2NhbGFyIHRodW1iSFNWWzNdOwogICAgIFNrQ29s
b3JUb0hTVih0aHVtYkluYWN0aXZlQ29sb3IoKSwgdGh1bWJIU1YpOwogICAgIHBhaW50LnNldENv
bG9yKG91dGxpbmVDb2xvcih0cmFja0hTViwgdGh1bWJIU1YpKTsKLSAgICBjYW52YXMtPmRyYXdQ
YXRoKG91dGxpbmUsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQtPmRyYXdQYXRoKG91dGxp
bmUsIHBhaW50KTsKIAogICAgIC8vIElmIHRoZSBidXR0b24gaXMgZGlzYWJsZWQgb3IgcmVhZC1v
bmx5LCB0aGUgYXJyb3cgaXMgZHJhd24gd2l0aCB0aGUgb3V0bGluZSBjb2xvci4KICAgICBpZiAo
c3RhdGVzICYgRW5hYmxlZFN0YXRlICYmICEoc3RhdGVzICYgUmVhZE9ubHlTdGF0ZSkpCkBAIC0y
MTQsNyArMjE0LDcgQEAgdm9pZCBQbGF0Zm9ybVRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRBcnJv
d0J1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnQKICAgICB9CiAgICAgcGF0aC5j
bG9zZSgpOwogCi0gICAgY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CisgICAgcGxhdGZv
cm1Db250ZXh0LT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCmluZGV4IGFmZDA4ZGI3ODA2ZjliY2Q3MGIw
Y2YyNWUyYzRiZTdiYWMxMjRiMzguLjJlZmMyYTRkZjUzYWMzN2FjMGEwNmNkMzMyOTQzNTE2MTYz
YTc1NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcApAQCAtMTQwLDcgKzE0MCw3IEBAIHZv
aWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGlhbGl6ZUZvckdESSgpCiAgICAg
ICAgIC8vIHRoaXMgbW9kZSBhbmQgaXQgd2lsbCBhcHBseSB0aGUgY29sb3IuCiAgICAgICAgIG1f
dHJhbnNwYXJlbmN5LnNldFRleHRDb21wb3NpdGVDb2xvcihjb2xvcik7CiAgICAgICAgIGNvbG9y
ID0gU2tDb2xvclNldFJHQigwLCAwLCAwKTsKLSAgICB9IGVsc2UgaWYgKG1fY3JlYXRlZFRyYW5z
cGFyZW5jeUxheWVyIHx8IG1fcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKS0+aXNEcmF3aW5nVG9M
YXllcigpKSB7CisgICAgfSBlbHNlIGlmIChtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllciB8fCBt
X3BsYXRmb3JtQ29udGV4dC0+aXNEcmF3aW5nVG9MYXllcigpKSB7CiAgICAgICAgIC8vIFdoZW4g
d2UncmUgZHJhd2luZyBhIHdlYiBwYWdlLCB3ZSBrbm93IHRoZSBiYWNrZ3JvdW5kIGlzIG9wYXF1
ZSwKICAgICAgICAgLy8gYnV0IGlmIHdlJ3JlIGRyYXdpbmcgdG8gYSBsYXllciwgd2Ugc3RpbGwg
bmVlZCBleHRyYSB3b3JrLgogICAgICAgICBsYXllck1vZGUgPSBUcmFuc3BhcmVuY3lXaW46Ok9w
YXF1ZUNvbXBvc2l0ZUxheWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAKaW5kZXggMjhiMWI4
ZTY4YzIwMWE1Zjk0YjY5MjkxOWViYzA1ODBmYmMyN2EzYi4uODhjMTUzZWE4MzI5MGU4NGQ5Njdm
ZjMyNzIyZTFjMzM5MzMxZjNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCkBAIC00OSwx
NCArNDksOSBAQCBuYW1lc3BhY2UgewogLy8gaW50by4gQnVmZmVycyBsYXJnZXIgdGhhbiB0aGlz
IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gd2UncmUgZG9uZSB3aXRoIHRoZW0uCiBjb25zdCBpbnQg
bWF4Q2FjaGVkQnVmZmVyUGl4ZWxTaXplID0gNjU1MzY7CiAKLWlubGluZSBTa0NhbnZhcyogY2Fu
dmFzRm9yQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgcmV0
dXJuIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotfQotCiBpbmxpbmUgY29u
c3QgU2tCaXRtYXAmIGJpdG1hcEZvckNvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQogewotICAgIHJldHVybiBjYW52YXNGb3JDb250ZXh0KGNvbnRleHQpLT5nZXRUb3BEZXZp
Y2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICByZXR1cm4gY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+bGF5ZXJCaXRtYXAoKTsKIH0KIAogdm9pZCBjb21wb3NpdGVUb0NvcHkoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBzb3VyY2VMYXllcnMsCkBAIC03Niw3ICs3MSw3IEBAIHZvaWQgY29t
cG9zaXRlVG9Db3B5KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgc291cmNlTGF5ZXJzLAogICAgICAg
ICBpbnQgeTsKICAgICB9OwogICAgIFZlY3RvcjxEZXZpY2VJbmZvPiBkZXZpY2VzOwotICAgIFNr
Q2FudmFzKiBzb3VyY2VDYW52YXMgPSBjYW52YXNGb3JDb250ZXh0KHNvdXJjZUxheWVycyk7Cisg
ICAgU2tDYW52YXMqIHNvdXJjZUNhbnZhcyA9IHNvdXJjZUxheWVycy5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCk7CiAgICAgU2tDYW52YXM6OkxheWVySXRlciBpdGVyKHNvdXJjZUNhbnZhcywg
ZmFsc2UpOwogICAgIHdoaWxlICghaXRlci5kb25lKCkpIHsKICAgICAgICAgZGV2aWNlcy5hcHBl
bmQoRGV2aWNlSW5mbyhpdGVyLmRldmljZSgpLCBpdGVyLngoKSwgaXRlci55KCkpKTsKQEAgLTIx
NCw3ICsyMDksNyBAQCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6Y29tcHV0ZUxheWVyU2l6ZSgpCiAg
ICAgICAgIC8vIEZJWE1FOiBzdXBwb3J0IGNsaXBwaW5nIGZvciBvdGhlciBtb2RlcwogICAgICAg
ICBJbnRSZWN0IGNsaXBwZWRTb3VyY2VSZWN0ID0gbV9zb3VyY2VSZWN0OwogICAgICAgICBTa1Jl
Y3QgY2xpcEJvdW5kczsKLSAgICAgICAgaWYgKG1fZGVzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+Z2V0Q2xpcEJvdW5kcygmY2xpcEJvdW5kcykpIHsKKyAgICAgICAgaWYg
KG1fZGVzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRDbGlwQm91bmRzKCZjbGlwQm91
bmRzKSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IGNsaXBSZWN0KGNsaXBCb3VuZHMubGVmdCgp
LCBjbGlwQm91bmRzLnRvcCgpLCBjbGlwQm91bmRzLndpZHRoKCksIGNsaXBCb3VuZHMuaGVpZ2h0
KCkpOwogICAgICAgICAgICAgY2xpcHBlZFNvdXJjZVJlY3QuaW50ZXJzZWN0KGVuY2xvc2luZ0lu
dFJlY3QoY2xpcFJlY3QpKTsKICAgICAgICAgfQpAQCAtNDE2LDggKzQxMSw4IEBAIHZvaWQgVHJh
bnNwYXJlbmN5V2luOjpjb21wb3NpdGVPcGFxdWVDb21wb3NpdGUoKQogICAgIGlmICghbV92YWxp
ZExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBTa0NhbnZhcyogZGVzdENhbnZhcyA9IGNh
bnZhc0ZvckNvbnRleHQoKm1fZGVzdENvbnRleHQpOwotICAgIGRlc3RDYW52YXMtPnNhdmUoKTsK
KyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBkZXN0UGxhdGZvcm1Db250ZXh0ID0gbV9kZXN0Q29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgZGVzdFBsYXRmb3JtQ29udGV4dC0+c2F2ZSgp
OwogCiAgICAgU2tCaXRtYXAqIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAqPigKICAgICAg
ICAgJmJpdG1hcEZvckNvbnRleHQoKm1fbGF5ZXJCdWZmZXItPmNvbnRleHQoKSkpOwpAQCAtNDUy
LDcgKzQ0Nyw3IEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21wb3NpdGVPcGFxdWVDb21wb3Np
dGUoKQogICAgICAgICAvLyBqdXN0IGRyYXcgdGhlIGltYWdlIGZyb20gaW5zaWRlIHRoZSBkZXN0
aW5hdGlvbiBjb250ZXh0LgogICAgICAgICBTa01hdHJpeCBpZGVudGl0eTsKICAgICAgICAgaWRl
bnRpdHkucmVzZXQoKTsKLSAgICAgICAgZGVzdENhbnZhcy0+c2V0TWF0cml4KGlkZW50aXR5KTsK
KyAgICAgICAgZGVzdFBsYXRmb3JtQ29udGV4dC0+c2V0TWF0cml4KGlkZW50aXR5KTsKIAogICAg
ICAgICBkZXN0UmVjdC5zZXQobV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QueCgpLCBtX3RyYW5zZm9y
bWVkU291cmNlUmVjdC55KCksIG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0Lm1heFgoKSwgbV90cmFu
c2Zvcm1lZFNvdXJjZVJlY3QubWF4WSgpKTsKICAgICB9IGVsc2UKQEAgLTQ2NSw4ICs0NjAsOCBA
QCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRlT3BhcXVlQ29tcG9zaXRlKCkKICAgICAv
LyBOb3RlIHRoYXQgd2UgbmVlZCB0byBzcGVjaWZ5IHRoZSBzb3VyY2UgbGF5ZXIgc3Vic2V0LCBz
aW5jZSB0aGUgYml0bWFwCiAgICAgLy8gbWF5IGhhdmUgYmVlbiBjYWNoZWQgYW5kIGl0IGNvdWxk
IGJlIGxhcmdlciB0aGFuIHdoYXQgd2UncmUgdXNpbmcuCiAgICAgU2tJUmVjdCBzb3VyY2VSZWN0
ID0geyAwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSB9Owot
ICAgIGRlc3RDYW52YXMtPmRyYXdCaXRtYXBSZWN0KCpiaXRtYXAsICZzb3VyY2VSZWN0LCBkZXN0
UmVjdCwgJnBhaW50KTsKLSAgICBkZXN0Q2FudmFzLT5yZXN0b3JlKCk7CisgICAgZGVzdFBsYXRm
b3JtQ29udGV4dC0+ZHJhd0JpdG1hcFJlY3QoKmJpdG1hcCwgJnNvdXJjZVJlY3QsIGRlc3RSZWN0
LCAmcGFpbnQpOworICAgIGRlc3RQbGF0Zm9ybUNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogdm9p
ZCBUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3NpdGUoKQpAQCAtNDc0LDcgKzQ2
OSw3IEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjpjb21wb3NpdGVUZXh0Q29tcG9zaXRlKCkKICAg
ICBpZiAoIW1fdmFsaWRMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgU2tCaXRt
YXAmIGJpdG1hcCA9IG1fbGF5ZXJCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpOworICAgIGNvbnN0
IFNrQml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpLT5sYXllckJpdG1hcChQbGF0Zm9ybUNvbnRleHRTa2lhOjpSZWFkV3JpdGUpOwogICAg
IFNrQ29sb3IgdGV4dENvbG9yID0gbV90ZXh0Q29tcG9zaXRlQ29sb3IucmdiKCk7CiAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBtX2xheWVyU2l6ZS5oZWlnaHQoKTsgeSsrKSB7CiAgICAgICAgIHVp
bnQzMl90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpAQCAtNDg4LDIwICs0ODMsMjAg
QEAgdm9pZCBUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3NpdGUoKQogICAgIH0K
IAogICAgIC8vIE5vdyB0aGUgbGF5ZXIgaGFzIHRleHQgd2l0aCB0aGUgcHJvcGVyIGNvbG9yIGFu
ZCBvcGFjaXR5LgotICAgIFNrQ2FudmFzKiBkZXN0Q2FudmFzID0gY2FudmFzRm9yQ29udGV4dCgq
bV9kZXN0Q29udGV4dCk7Ci0gICAgZGVzdENhbnZhcy0+c2F2ZSgpOworICAgIFBsYXRmb3JtQ29u
dGV4dFNraWEqIGRlc3RQbGF0Zm9ybUNvbnRleHQgPSBtX2Rlc3RDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICBkZXN0UGxhdGZvcm1Db250ZXh0LT5zYXZlKCk7CiAKICAgICAvLyBXZSB3
YW50IHRvIHVzZSBVbnRyYW5zZm9ybWVkIHNwYWNlIChzZWUgYWJvdmUpCiAgICAgU2tNYXRyaXgg
aWRlbnRpdHk7CiAgICAgaWRlbnRpdHkucmVzZXQoKTsKLSAgICBkZXN0Q2FudmFzLT5zZXRNYXRy
aXgoaWRlbnRpdHkpOworICAgIGRlc3RQbGF0Zm9ybUNvbnRleHQtPnNldE1hdHJpeChpZGVudGl0
eSk7CiAgICAgU2tSZWN0IGRlc3RSZWN0ID0geyBtX3RyYW5zZm9ybWVkU291cmNlUmVjdC54KCks
IG1fdHJhbnNmb3JtZWRTb3VyY2VSZWN0LnkoKSwgbV90cmFuc2Zvcm1lZFNvdXJjZVJlY3QubWF4
WCgpLCBtX3RyYW5zZm9ybWVkU291cmNlUmVjdC5tYXhZKCkgfTsKIAogICAgIC8vIE5vdGUgdGhh
dCB3ZSBuZWVkIHRvIHNwZWNpZnkgdGhlIHNvdXJjZSBsYXllciBzdWJzZXQsIHNpbmNlIHRoZSBi
aXRtYXAKICAgICAvLyBtYXkgaGF2ZSBiZWVuIGNhY2hlZCBhbmQgaXQgY291bGQgYmUgbGFyZ2Vy
IHRoYW4gd2hhdCB3ZSdyZSB1c2luZy4KICAgICBTa0lSZWN0IHNvdXJjZVJlY3QgPSB7IDAsIDAs
IG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhlaWdodCgpIH07Ci0gICAgZGVzdENh
bnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLCAmc291cmNlUmVjdCwgZGVzdFJlY3QsIDApOwot
ICAgIGRlc3RDYW52YXMtPnJlc3RvcmUoKTsKKyAgICBkZXN0UGxhdGZvcm1Db250ZXh0LT5kcmF3
Qml0bWFwUmVjdChiaXRtYXAsICZzb3VyY2VSZWN0LCBkZXN0UmVjdCwgMCk7CisgICAgZGVzdFBs
YXRmb3JtQ29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6bWFr
ZUxheWVyT3BhcXVlKCkKQEAgLTUwOSw4ICs1MDQsNyBAQCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6
bWFrZUxheWVyT3BhcXVlKCkKICAgICBpZiAoIW1fdmFsaWRMYXllcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihtX2RyYXdD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Ci0gICAgICAgIGNhbnZhcygpLT5nZXRUb3BEZXZp
Y2UoKS0+YWNjZXNzQml0bWFwKHRydWUpKTsKKyAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3Rf
Y2FzdDxTa0JpdG1hcCY+KG1fZHJhd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5sYXllckJp
dG1hcChQbGF0Zm9ybUNvbnRleHRTa2lhOjpSZWFkV3JpdGUpKTsKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG1fbGF5ZXJTaXplLmhlaWdodCgpOyB5KyspIHsKICAgICAgICAgdWludDMyX3QqIHJv
dyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bV9sYXllclNpemUud2lkdGgoKTsgeCsrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQmxlbmRTa2lhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUJsZW5kU2tpYS5jcHAKaW5kZXgg
ODA4OWYzYjUwZDYwNTk2ZmZiODQ2OWE1NGI1YjNlNGY4OGYxYjg2Mi4uYjU5N2JhMmFlNzNkMDYx
MGMzZmIxYTUwYWJhMjBkNTdmMzQwMmVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQmxlbmRTa2lhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVCbGVuZFNraWEuY3BwCkBA
IC04MCw4ICs4MCw3IEBAIGJvb2wgRkVCbGVuZDo6cGxhdGZvcm1BcHBseVNraWEoKQogICAgIFNr
QXV0b1RVbnJlZjxTa0ltYWdlRmlsdGVyPiBibGVuZChuZXcgU2tCbGVuZEltYWdlRmlsdGVyKG1v
ZGUsIGJhY2tncm91bmRTb3VyY2UpKTsKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBhaW50LnNl
dEltYWdlRmlsdGVyKGJsZW5kKTsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgIGNhbnZhcy0+ZHJh
d0JpdG1hcChmb3JlZ3JvdW5kQml0bWFwLCAwLCAwLCAmcGFpbnQpOworICAgIHJlc3VsdEltYWdl
LT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3Qml0bWFwKGZvcmVncm91bmRCaXRt
YXAsIDAsIDAsICZwYWludCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUNvbG9yTWF0cml4
U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEv
RkVDb2xvck1hdHJpeFNraWEuY3BwCmluZGV4IGFmZmJhZWFkMDQ4MDU5N2VmYTljMDNhYmZlN2Ni
ZTIzNTZmMmMwMTAuLjMyMjhjZDhhMzlkYzhlZjg0OGY4ZGQzMDY1NGY2ODUyY2JlNTQ4YjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9G
RUNvbG9yTWF0cml4U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9za2lhL0ZFQ29sb3JNYXRyaXhTa2lhLmNwcApAQCAtMTI3LDExICsxMjcsMTAg
QEAgYm9vbCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U2tpYSgpCiAgICAgaWYgKCFuYXRp
dmVJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU2tDYW52YXMqIGNhbnZhcyA9
IHJlc3VsdEltYWdlLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKICAg
ICBTa1BhaW50IHBhaW50OwogICAgIHBhaW50LnNldENvbG9yRmlsdGVyKGZpbHRlcik7CiAgICAg
cGFpbnQuc2V0WGZlcm1vZGVNb2RlKFNrWGZlcm1vZGU6OmtTcmNfTW9kZSk7Ci0gICAgY2FudmFz
LT5kcmF3Qml0bWFwKG5hdGl2ZUltYWdlLT5iaXRtYXAoKSwgMCwgMCwgJnBhaW50KTsKKyAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0JpdG1hcChuYXRp
dmVJbWFnZS0+Yml0bWFwKCksIDAsIDAsICZwYWludCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tp
YS9GRUNvbXBvbmVudFRyYW5zZmVyU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL3NraWEvRkVDb21wb25lbnRUcmFuc2ZlclNraWEuY3BwCmluZGV4IDg2
ZDVkN2U2NjJhZjU4Mjc5MjFhODQzNDE1MmExMGNiZTQ3MDgyZjIuLjZiNWZiNjk5MWFiNjllYWY0
NTVlMGQ4MjRmZDU4YjFlMzE4NDUzZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvc2tpYS9GRUNvbXBvbmVudFRyYW5zZmVyU2tpYS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9za2lhL0ZFQ29tcG9u
ZW50VHJhbnNmZXJTa2lhLmNwcApAQCAtNDgsMTEgKzQ4LDEwIEBAIGJvb2wgRkVDb21wb25lbnRU
cmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNraWEoKQogICAgIHVuc2lnbmVkIGNoYXIgclZhbHVlc1sy
NTZdLCBnVmFsdWVzWzI1Nl0sIGJWYWx1ZXNbMjU2XSwgYVZhbHVlc1syNTZdOwogICAgIGdldFZh
bHVlcyhyVmFsdWVzLCBnVmFsdWVzLCBiVmFsdWVzLCBhVmFsdWVzKTsKIAotICAgIFNrQ2FudmFz
KiBjYW52YXMgPSByZXN1bHRJbWFnZS0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
dmFzKCk7CiAgICAgU2tQYWludCBwYWludDsKICAgICBwYWludC5zZXRDb2xvckZpbHRlcihTa1Rh
YmxlQ29sb3JGaWx0ZXI6OkNyZWF0ZUFSR0IoYVZhbHVlcywgclZhbHVlcywgZ1ZhbHVlcywgYlZh
bHVlcykpLT51bnJlZigpOwogICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2RlOjpr
U3JjX01vZGUpOwotICAgIGNhbnZhcy0+ZHJhd0JpdG1hcChiaXRtYXAsIDAsIDAsICZwYWludCk7
CisgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdCaXRt
YXAoYml0bWFwLCAwLCAwLCAmcGFpbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEvRkVMaWdo
dGluZ1NraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9z
a2lhL0ZFTGlnaHRpbmdTa2lhLmNwcAppbmRleCAxNjcyMzRkM2IzNTlhMGVhNTBjNzMyMjFiMjMz
ZGI2MDhlOGJhZDlmLi41ZjMzNzI3YjVhZjUzMzI5NDIyMTA4MjM0NWI0MTc4ZjAyZTVhYjNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL3NraWEv
RkVMaWdodGluZ1NraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvc2tpYS9GRUxpZ2h0aW5nU2tpYS5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBib29s
IEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTa2lhKCkKIAogICAgIFNrUGFpbnQgcGFpbnQ7CiAg
ICAgcGFpbnQuc2V0SW1hZ2VGaWx0ZXIoY3JlYXRlSW1hZ2VGaWx0ZXIoMCkpLT51bnJlZigpOwot
ICAgIGRzdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd0JpdG1hcChu
YXRpdmVJbWFnZS0+Yml0bWFwKCksIGRyYXdpbmdSZWdpb24ubG9jYXRpb24oKS54KCksIGRyYXdp
bmdSZWdpb24ubG9jYXRpb24oKS55KCksICZwYWludCk7CisgICAgZHN0Q29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmRyYXdCaXRtYXAobmF0aXZlSW1hZ2UtPmJpdG1hcCgpLCBkcmF3aW5nUmVn
aW9uLmxvY2F0aW9uKCkueCgpLCBkcmF3aW5nUmVnaW9uLmxvY2F0aW9uKCkueSgpLCAmcGFpbnQp
OwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovRm9udEhhcmZCdXp6LmNwcAppbmRleCA5N2FkZDYy
MjVhMjYzZjNhODI4ZGJiOTkyNGYyNjNmNzA4NjljMjZkLi41Yzc5MDA0ODhkMDJiYmNiNDE3NzY1
NzgwYWQ0ZTY5M2I2N2U3ZGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9Gb250SGFyZkJ1enouY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0ZvbnRIYXJmQnV6ei5jcHAKQEAgLTk4LDcgKzk4LDcg
QEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LAogICAgICAgICB5ICs9IFNrRmxvYXRUb1NjYWxhcihhZHZbaV0uaGVp
Z2h0KCkpOwogICAgIH0KIAotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpOworICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4
dCA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0
TW9kZSA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VGV4dERyYXdpbmdNb2RlKCk7CiAKICAg
ICAvLyBXZSBkcmF3IHRleHQgdXAgdG8gdHdvIHRpbWVzIChvbmNlIGZvciBmaWxsLCBvbmNlIGZv
ciBzdHJva2UpLgpAQCAtMTE1LDEwICsxMTUsMTAgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAogICAgICAgICAg
ICAgICAgIHBhdGgucmVzZXQoKTsKICAgICAgICAgICAgICAgICBwYXRoLm1vdmVUbyh2UG9zQmVn
aW5baV0pOwogICAgICAgICAgICAgICAgIHBhdGgubGluZVRvKHZQb3NFbmRbaV0pOwotICAgICAg
ICAgICAgICAgIGNhbnZhcy0+ZHJhd1RleHRPblBhdGgoZ2x5cGhzICsgaSwgMiwgcGF0aCwgMCwg
cGFpbnQpOworICAgICAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1RleHRPblBhdGgo
Z2x5cGhzICsgaSwgMiwgcGF0aCwgMCwgcGFpbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMg
PDwgMSwgcG9zLCBwYWludCk7CisgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPmRyYXdQb3NU
ZXh0KGdseXBocywgbnVtR2x5cGhzIDw8IDEsIHBvcywgcGFpbnQpOwogICAgIH0KIAogICAgIGlm
ICgodGV4dE1vZGUgJiBUZXh0TW9kZVN0cm9rZSkKQEAgLTE0NCwxMCArMTQ0LDEwIEBAIHZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udCwKICAgICAgICAgICAgICAgICBwYXRoLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAg
cGF0aC5tb3ZlVG8odlBvc0JlZ2luW2ldKTsKICAgICAgICAgICAgICAgICBwYXRoLmxpbmVUbyh2
UG9zRW5kW2ldKTsKLSAgICAgICAgICAgICAgICBjYW52YXMtPmRyYXdUZXh0T25QYXRoKGdseXBo
cyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQtPmRyYXdUZXh0T25QYXRoKGdseXBocyArIGksIDIsIHBhdGgsIDAsIHBhaW50KTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0
KGdseXBocywgbnVtR2x5cGhzIDw8IDEsIHBvcywgcGFpbnQpOworICAgICAgICAgICAgcGxhdGZv
cm1Db250ZXh0LT5kcmF3UG9zVGV4dChnbHlwaHMsIG51bUdseXBocyA8PCAxLCBwb3MsIHBhaW50
KTsKICAgICB9CiB9CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgRmxvYXRQ
b2ludCBhZGp1c3RlZFBvaW50ID0gc2hhcGVyLmFkanVzdFN0YXJ0UG9pbnQocG9pbnQpOwogICAg
IGRyYXdHbHlwaEJ1ZmZlcihnYywgcnVuLCBnbHlwaEJ1ZmZlciwgYWRqdXN0ZWRQb2ludCk7CiAj
ZWxzZQotICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpOworICAgIFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCA9IGdjLT5wbGF0
Zm9ybUNvbnRleHQoKTsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcih0aGlz
LCBydW4sIHBvaW50LngoKSwgcG9pbnQueSgpKTsKICAgICBpZiAocnVuLnJ0bCgpKQogICAgICAg
ICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7CkBAIC0yMDYsMTMgKzIwNiwxMyBAQCB2b2lkIEZv
bnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBUZXh0UnVuJiBy
dW4sCiAgICAgICAgIGlmIChmaWxsKSB7CiAgICAgICAgICAgICBjb250cm9sbGVyLmZvbnRQbGF0
Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+c2V0dXBQYWludCgmZmlsbFBhaW50KTsKICAgICAgICAg
ICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+YWRqdXN0VGV4dFJlbmRlck1vZGUoJmZpbGxQYWlu
dCk7Ci0gICAgICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkg
KyBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoIDw8IDEsIGNvbnRyb2xsZXIucG9zaXRpb25zKCkgKyBm
cm9tR2x5cGgsIGZpbGxQYWludCk7CisgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPmRyYXdQ
b3NUZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkgKyBmcm9tR2x5cGgsIGdseXBoTGVuZ3RoIDw8IDEs
IGNvbnRyb2xsZXIucG9zaXRpb25zKCkgKyBmcm9tR2x5cGgsIGZpbGxQYWludCk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoc3Ryb2tlKSB7CiAgICAgICAgICAgICBjb250cm9sbGVyLmZvbnRQ
bGF0Zm9ybURhdGFGb3JTY3JpcHRSdW4oKS0+c2V0dXBQYWludCgmc3Ryb2tlUGFpbnQpOwogICAg
ICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5hZGp1c3RUZXh0UmVuZGVyTW9kZSgmc3Ry
b2tlUGFpbnQpOwotICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChjb250cm9sbGVyLmds
eXBocygpICsgZnJvbUdseXBoLCBnbHlwaExlbmd0aCA8PCAxLCBjb250cm9sbGVyLnBvc2l0aW9u
cygpICsgZnJvbUdseXBoLCBzdHJva2VQYWludCk7CisgICAgICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQtPmRyYXdQb3NUZXh0KGNvbnRyb2xsZXIuZ2x5cGhzKCkgKyBmcm9tR2x5cGgsIGdseXBoTGVu
Z3RoIDw8IDEsIGNvbnRyb2xsZXIucG9zaXRpb25zKCkgKyBmcm9tR2x5cGgsIHN0cm9rZVBhaW50
KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRTa2lhLmNwcAppbmRleCBjODA5N2UzNDkxYWE3NWI3Y2E1
ZTYyZjM2NTY1ZTllZjJiMjI0ZjNhLi42NTVhNzRiYjg2MzdhZjUxNTU0NzVmMGI3NjI5ZjNiNDg4
MWY1ZDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ZvbnRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ZvbnRTa2lhLmNwcApAQCAtMTM1LDEwICsxMzUsMTAgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAogICAgICAg
ICB5ICs9IFNrRmxvYXRUb1NjYWxhcihhZHZbaV0uaGVpZ2h0KCkpOwogICAgIH0KIAotICAgIFNr
Q2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOworICAgIFBs
YXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCA9IGdjLT5wbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bCkgewotICAgICAgICBjYW52YXMtPnNhdmUoKTsKLSAgICAgICAgY2FudmFzLT5yb3RhdGUoLTkw
KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5zYXZlKCk7CisgICAgICAgIHBsYXRmb3JtQ29u
dGV4dC0+cm90YXRlKC05MCk7CiAgICAgICAgIFNrTWF0cml4IHJvdGF0b3I7CiAgICAgICAgIHJv
dGF0b3IucmVzZXQoKTsKICAgICAgICAgcm90YXRvci5zZXRSb3RhdGUoOTApOwpAQCAtMTU0LDcg
KzE1NCw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udCwKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5h
ZGp1c3RUZXh0UmVuZGVyTW9kZSgmcGFpbnQpOwogICAgICAgICBwYWludC5zZXRUZXh0RW5jb2Rp
bmcoU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nKTsKIAotICAgICAgICBjYW52YXMtPmRy
YXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzICogc2l6ZW9mKHVpbnQxNl90KSwgcG9zLCBwYWlu
dCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlw
aHMgKiBzaXplb2YodWludDE2X3QpLCBwb3MsIHBhaW50KTsKICAgICB9CiAKICAgICBpZiAoKHRl
eHRNb2RlICYgVGV4dE1vZGVTdHJva2UpCkBAIC0xNzMsMTAgKzE3MywxMCBAQCB2b2lkIEZvbnQ6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnQsCiAgICAgICAgICAgICBwYWludC5zZXRMb29wZXIoMCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBjYW52YXMtPmRyYXdQb3NUZXh0KGdseXBocywgbnVtR2x5cGhzICogc2l6ZW9mKHVpbnQxNl90
KSwgcG9zLCBwYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd1Bvc1RleHQoZ2x5
cGhzLCBudW1HbHlwaHMgKiBzaXplb2YodWludDE2X3QpLCBwb3MsIHBhaW50KTsKICAgICB9CiAg
ICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWwpCi0g
ICAgICAgIGNhbnZhcy0+cmVzdG9yZSgpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPnJlc3Rv
cmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5j
cHAKaW5kZXggZmM5NzE0NjcxZmVkZTg4NTVkNjBiOWFlZWQyMGZhMzlkZWU1YjNmZi4uM2NmNDMx
YjA0OGIzZjk1N2ZjNzAwNzY5ZWM1ZjIyYTBkMmUyN2NmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNr
aWEuY3BwCkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVy
Um91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGludCB0aGlja25lc3MKICAgICAg
ICAgci5pbnNldChTa0ludFRvU2NhbGFyKHRoaWNrbmVzcyArIDEpLCBTa0ludFRvU2NhbGFyKHRo
aWNrbmVzcyArIDEpKTsKICAgICAgICAgcGF0aC5hZGRPdmFsKHIsIFNrUGF0aDo6a0NDV19EaXJl
Y3Rpb24pOwogICAgIH0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGhBbnRpQWxpYXNl
ZChwYXRoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgocGF0aCwgUGxhdGZvcm1D
b250ZXh0U2tpYTo6QW50aUFsaWFzZWQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJQbGF0Zm9ybVNoYWRvdygpCkBAIC0zMTAsOCArMzEwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgU2tQYWludCBwYWludDsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAg
ICBwYWludC5zZXRYZmVybW9kZU1vZGUoU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOwotICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0
KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMzE5LDcgKzMxOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCktPmNsaXBSZWN0KHJlY3QpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUmVjdChyZWN0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKQEAg
LTMyNyw3ICszMjYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBw
YXRoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2Vk
KCpwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgo
KnBhdGgucGxhdGZvcm1QYXRoKCksIFBsYXRmb3JtQ29udGV4dFNraWE6OkFudGlBbGlhc2VkKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkK
QEAgLTM0Myw3ICszNDIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJ
bnRSZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Y2xpcFJlY3QocmVjdCwgU2tS
ZWdpb246OmtEaWZmZXJlbmNlX09wKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFJlY3Qo
cmVjdCwgUGxhdGZvcm1Db250ZXh0U2tpYTo6Tm90QW50aUFsaWFzZWQsIFNrUmVnaW9uOjprRGlm
ZmVyZW5jZV9PcCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBh
dGgmIHApCkBAIC0zNTQsNyArMzUzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgUGF0aCYgcCkKICAgICAvLyBXZSBtdXN0IG1ha2UgYSBjb3B5IG9mIHRoZSBwYXRoLCB0
byBtYXJrIGl0IGFzIGludmVyc2UtZmlsbGVkLgogICAgIFNrUGF0aCBwYXRoKHAuaXNOdWxsKCkg
PyBTa1BhdGgoKSA6ICpwLnBsYXRmb3JtUGF0aCgpKTsKICAgICBwYXRoLnRvZ2dsZUludmVyc2VG
aWxsVHlwZSgpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHBh
dGgpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aChwYXRoLCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpBbnRpQWxpYXNlZCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0
aChjb25zdCBQYXRoJiBwYXRoVG9DbGlwLCBXaW5kUnVsZSBjbGlwUnVsZSkKQEAgLTM3Miw3ICsz
NzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aFRv
Q2xpcCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgICAgIHN0b3JhZ2Uuc2V0RmlsbFR5cGUoZnR5
cGUpOwogICAgICAgICBwYXRoID0gJnN0b3JhZ2U7CiAgICAgfQotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKCpwYXRoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2xpcFBhdGgoKnBhdGgsIFBsYXRmb3JtQ29udGV4dFNraWE6OkFudGlBbGlhc2VkKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFm
ZmluZSkKQEAgLTM4MCw3ICszNzksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
Y29uY2F0KGFmZmluZSk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmNvbmNhdChhZmZpbmUpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
YWZmaW5lKQpAQCAtMzg4LDcgKzM4Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5z
ZXRNYXRyaXgoYWZmaW5lKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0TWF0cml4KGFmZmlu
ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldFBhdGhGcm9tQ29udmV4UG9pbnRzKFNrUGF0aCogcGF0
aCwgc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQpAQCAtNDI5LDE0
ICs0MjgsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVf
dCBudW1Qb2ludHMsCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
c2V0dXBQYWludEZvckZpbGxpbmcoJnBhaW50KTsKICAgICBwYWludC5zZXRBbnRpQWxpYXMoc2hv
dWxkQW50aWFsaWFzKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRo
KHBhdGgsIHBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwg
cGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiAK
ICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBwYWludC5yZXNl
dCgpOwogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZw
YWludCwgMCwgMCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1Bh
dGgocGF0aCwgcGFpbnQpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgo
cGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BhdGgocGF0aCwg
cGFpbnQpOwogICAgIH0KIH0KIApAQCAtNDUwLDEwICs0NDcsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2lu
dCogcG9pbgogCiAgICAgU2tQYXRoIHBhdGg7CiAgICAgc2V0UGF0aEZyb21Db252ZXhQb2ludHMo
JnBhdGgsIG51bVBvaW50cywgcG9pbnRzKTsKLSAgICBpZiAoYW50aWFsaWFzZWQpCi0gICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHBhdGgpOwotICAgIGVsc2UK
LSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5jbGlwUGF0aChwYXRoKTsKKyAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGgocGF0aCwgYW50aWFsaWFzZWQKKyAgICAgICAg
PyBQbGF0Zm9ybUNvbnRleHRTa2lhOjpBbnRpQWxpYXNlZAorICAgICAgICA6IFBsYXRmb3JtQ29u
dGV4dFNraWE6Ok5vdEFudGlBbGlhc2VkKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1
c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCkBAIC00NjUsMTQg
KzQ2MSwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVj
dCYgZWxpcHNlUmVjdCkKICAgICBTa1JlY3QgcmVjdCA9IGVsaXBzZVJlY3Q7CiAgICAgU2tQYWlu
dCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJnBh
aW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdPdmFsKHJlY3QsIHBh
aW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd0JvdW5kZWQocmVjdCwgcGFpbnQp
OworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7CiAKICAgICBp
ZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkgewogICAgICAgICBwYWludC5yZXNldCgpOwog
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwg
JnJlY3QsIDApOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdPdmFs
KHJlY3QsIHBhaW50KTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdCb3VuZGVk
KHJlY3QsIHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdPdmFsKHJlY3Qs
IHBhaW50KTsKICAgICB9CiB9CiAKQEAgLTQ5MSw4ICs0ODUsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgZHJhd091dGVyUGF0aChQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1Bh
dGgmIHBhdAogICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKDEpOwogICAgIHBhaW50LnNldFBhdGhF
ZmZlY3QobmV3IFNrQ29ybmVyUGF0aEVmZmVjdCgxKSktPnVucmVmKCk7CiAjZW5kaWYKLSAgICBj
b250ZXh0LT5jYW52YXMoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotICAgIGNvbnRleHQtPmRp
ZERyYXdQYXRoKHBhdGgsIHBhaW50KTsKKyAgICBjb250ZXh0LT5kcmF3UGF0aChwYXRoLCBwYWlu
dCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcmF3SW5uZXJQYXRoKFBsYXRmb3JtQ29udGV4
dFNraWEqIGNvbnRleHQsIGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tQYWludCYgcGFpbnQsIGludCB3
aWR0aCkKQEAgLTU4MiwxNyArNTc1LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgICAg
ICB9CiAgICAgICAgIFNrUGFpbnQgZmlsbFBhaW50OwogICAgICAgICBmaWxsUGFpbnQuc2V0Q29s
b3IocGFpbnQuZ2V0Q29sb3IoKSk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+ZHJhd1JlY3QocjEsIGZpbGxQYWludCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+ZHJhd1JlY3QocjIsIGZpbGxQYWludCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5kaWREcmF3UmVjdChyMSwgZmlsbFBhaW50KTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmRpZERyYXdSZWN0KHIyLCBmaWxsUGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+ZHJhd1JlY3QocjEsIGZpbGxQYWludCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5k
cmF3UmVjdChyMiwgZmlsbFBhaW50KTsKICAgICB9CiAKICAgICBhZGp1c3RMaW5lVG9QaXhlbEJv
dW5kYXJpZXMocDEsIHAyLCB3aWR0aCwgcGVuU3R5bGUpOwogICAgIFNrUG9pbnQgcHRzWzJdID0g
eyAoU2tQb2ludClwMSwgKFNrUG9pbnQpcDIgfTsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKS0+ZHJhd1BvaW50cyhTa0NhbnZhczo6a0xpbmVzX1BvaW50TW9kZSwgMiwgcHRzLCBw
YWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQb2ludHMoU2tDYW52YXM6OmtM
aW5lc19Qb2ludE1vZGUsIDIsIHB0cywgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5k
cmF3UG9pbnRzKFNrQ2FudmFzOjprTGluZXNfUG9pbnRNb2RlLCAyLCBwdHMsIHBhaW50KTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHls
ZSkKQEAgLTcyMSwxNCArNzExLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBmbG9hdCB3aWR0CiAgICAgcmVj
dC5zZXQob3JpZ2luWCwgb3JpZ2luWSwgb3JpZ2luWCArIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIo
d2lkdGgpICogZGV2aWNlU2NhbGVGYWN0b3IsIG9yaWdpblkgKyBTa0ludFRvU2NhbGFyKG1pc3Nw
ZWxsQml0bWFwW2luZGV4XS0+aGVpZ2h0KCkpKTsKIAogICAgIGlmIChkZXZpY2VTY2FsZUZhY3Rv
ciA9PSAyKSB7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+c2F2ZSgpOwot
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnNjYWxlKFNLX1NjYWxhckhhbGYs
IFNLX1NjYWxhckhhbGYpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2F2ZSgpOworICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2NhbGUoU0tfU2NhbGFySGFsZiwgU0tfU2NhbGFySGFs
Zik7CiAgICAgfQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3QocmVj
dCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UmVjdChyZWN0LCBwYWludCk7
CiAgICAgaWYgKGRldmljZVNjYWxlRmFjdG9yID09IDIpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+cmVzdG9yZSgpOwotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERy
YXdSZWN0KHJlY3QsIHBhaW50KTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUo
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwdCwKQEAgLTc1Myw4ICs3NDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LAogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIC8vIFRleHQgbGluZXMgYXJlIGRy
YXduIHVzaW5nIHRoZSBzdHJva2UgY29sb3IuCiAgICAgcGFpbnQuc2V0Q29sb3IocGxhdGZvcm1D
b250ZXh0KCktPmVmZmVjdGl2ZVN0cm9rZUNvbG9yKCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5k
aWREcmF3UmVjdChyLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIs
IHBhaW50KTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2Vk
IGJvcmRlci4KQEAgLTc5MCw4ICs3NzcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgoY29uc3QgUGF0aCYgcGF0aFRvRmlsbCkKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogCi0gICAgcGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aCgqcGF0aCwgcGFpbnQpOwotICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5kaWREcmF3UGF0aCgqcGF0aCwgcGFpbnQpOworICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5kcmF3UGF0aCgqcGF0aCwgcGFpbnQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtODAzLDggKzc4OSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKICAg
ICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmls
bGluZygmcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3Qo
ciwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7
CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC04MTYsOCArODAxLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclMKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5zZXR1cFBhaW50Q29tbW9uKCZwYWludCk7CiAgICAgcGFpbnQuc2V0Q29sb3IoY29s
b3IucmdiKCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd1JlY3Qociwg
cGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3UmVjdChyLCBwYWludCk7Cisg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdSZWN0KHIsIHBhaW50KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LApAQCAtODUy
LDggKzgzNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCwKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAgIHBhaW50LnNldENvbG9yKGNvbG9y
LnJnYigpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdQYXRoKHBhdGgs
IHBhaW50KTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQp
OworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kcmF3UGF0aChwYXRoLCBwYWludCk7CiB9CiAKIEFm
ZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0CkBAIC04NjEsNyArODQ0LDcgQEAgQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4
dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CiAKLSAgICBjb25zdCBT
a01hdHJpeCYgbSA9IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG90YWxNYXRyaXgo
KTsKKyAgICBjb25zdCBTa01hdHJpeCYgbSA9IHBsYXRmb3JtQ29udGV4dCgpLT5nZXRUb3RhbE1h
dHJpeCgpOwogICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oU2tTY2FsYXJUb0RvdWJsZShtLmdl
dFNjYWxlWCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3VibGUo
bS5nZXRTa2V3WSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9Eb3Vi
bGUobS5nZXRTa2V3WCgpKSwKQEAgLTg4MCw3ICs4NjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
c2NhbGUoV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihzaXplLndpZHRoKCkpLAorICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5zY2FsZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHNpemUud2lkdGgoKSksCiAg
ICAgICAgIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2l6ZS5oZWlnaHQoKSkpOwogfQogCkBAIC0x
MTQwLDggKzExMjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IElu
dFJlY3QmIHIsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKQogCiAgICAgU2tQYXRoIHBh
dGg7CiAgICAgcGF0aC5hZGRBcmMob3ZhbCwgU2tJbnRUb1NjYWxhcigtc3RhcnRBbmdsZSksIFNr
SW50VG9TY2FsYXIoLWFuZ2xlU3BhbikpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5kaWREcmF3
UGF0aChwYXRoLCBwYWludCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPmRyYXdQYXRoKHBhdGgs
IHBhaW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aFRvU3Ryb2tlKQpAQCAtMTE1Miw4ICsxMTM0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQogICAgIGNvbnN0IFNrUGF0
aCYgcGF0aCA9ICpwYXRoVG9TdHJva2UucGxhdGZvcm1QYXRoKCk7CiAgICAgU2tQYWludCBwYWlu
dDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwg
MCwgMCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3UGF0aChwYXRoLCBw
YWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdQYXRoKHBhdGgsIHBhaW50KTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKQEAgLTExNzAsMTAgKzExNTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBT
a1JlY3QgcihyZWN0KTsKICAgICBib29sIHZhbGlkVyA9IHIud2lkdGgoKSA+IDA7CiAgICAgYm9v
bCB2YWxpZEggPSByLmhlaWdodCgpID4gMDsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIGlmICh2YWxpZFcgJiYgdmFsaWRIKSB7Ci0gICAg
ICAgIGNhbnZhcy0+ZHJhd1JlY3QociwgcGFpbnQpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+ZGlkRHJhd1JlY3QociwgcGFpbnQpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJh
d1JlY3QociwgcGFpbnQpOwogICAgIH0gZWxzZSBpZiAodmFsaWRXIHx8IHZhbGlkSCkgewogICAg
ICAgICAvLyB3ZSBhcmUgZXhwZWN0ZWQgdG8gcmVzcGVjdCB0aGUgbGluZUpvaW4sIHNvIHdlIGNh
bid0IGp1c3QgY2FsbAogICAgICAgICAvLyBkcmF3TGluZSAtLSB3ZSBoYXZlIHRvIGNyZWF0ZSBh
IHBhdGggdGhhdCBkb3VibGVzIGJhY2sgb24gaXRzZWxmLgpAQCAtMTE4MSw4ICsxMTYwLDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBsaW5lV2lkdGgpCiAgICAgICAgIHBhdGgubW92ZVRvKHIuZkxlZnQsIHIuZlRvcCk7CiAg
ICAgICAgIHBhdGgubGluZVRvKHIuZlJpZ2h0LCByLmZCb3R0b20pOwogICAgICAgICBwYXRoLmNs
b3NlKCk7Ci0gICAgICAgIGNhbnZhcy0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwotICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+ZGlkRHJhd1BhdGgocGF0aCwgcGFpbnQpOworICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+ZHJhd1BhdGgocGF0aCwgcGFpbnQpOwogICAgIH0KIH0KIApAQCAtMTE5
MSw4ICsxMTY5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucykKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnJvdGF0ZShXZWJDb3JlRmxvYXRUb1Nr
U2NhbGFyKAotICAgICAgICBhbmdsZUluUmFkaWFucyAqICgxODAuMGYgLyAzLjE0MTU5MjY1Zikp
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cm90YXRlKFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIo
YW5nbGVJblJhZGlhbnMgKiAoMTgwLjBmIC8gMy4xNDE1OTI2NWYpKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgdywgZmxvYXQgaCkKQEAgLTEyMDAsOCArMTE3
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgdywgZmxvYXQgaCkK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnRyYW5zbGF0ZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFy
KHcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkNvcmVG
bG9hdFRvU2tTY2FsYXIoaCkpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT50cmFuc2xhdGUoV2Vi
Q29yZUZsb2F0VG9Ta1NjYWxhcih3KSwgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihoKSk7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0CkBAIC0x
MjI1LDggKzEyMDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiAgICAgU2tSZWN0IHJlY3QgPSBlbGxpcHNlOwog
ICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JG
aWxsaW5nKCZwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3Zh
bChyZWN0LCBwYWludCk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPmRpZERyYXdCb3VuZGVkKHJl
Y3QsIHBhaW50KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd092YWwocmVjdCwgcGFpbnQp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTEyMzcsOCArMTIxMiw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQog
ICAgIFNrUmVjdCByZWN0KGVsbGlwc2UpOwogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwotICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVjdCwgcGFpbnQpOwotICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5kaWREcmF3Qm91bmRlZChyZWN0LCBwYWludCk7CisgICAgcGxhdGZv
cm1Db250ZXh0KCktPmRyYXdPdmFsKHJlY3QsIHBhaW50KTsKIH0KIAogfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAppbmRleCAyNWYzNDNlYTViMWM1NDQ2MDNkODY5OTAy
MzM5NDM2OWYxYmEyYjJkLi4xN2U5MWRiN2VlNmE3ZDdjNTI3ZDY4ODYwZDU4MWY4NzY2ZjQ0YTlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IFZlY3RvcjxpbnQ+JiBsb29rVXBU
YWJsZSkKIH0KIAogdGVtcGxhdGUgPE11bHRpcGx5IG11bHRpcGxpZWQ+Ci1QYXNzUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgU2tDYW52
YXMqIGNhbnZhcywKK1Bhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAg
IGZsb2F0IGFyZWEgPSA0LjBmICogcmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKTsKQEAgLTI3
NiwyMyArMjc2LDIyIEBAIFBhc3NSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBTa0NhbnZhcyogY2FudmFzCiAgICAgZWxzZQogICAgICAg
ICBjb25maWc4ODg4ID0gU2tDYW52YXM6OmtSR0JBX1VucHJlbXVsX0NvbmZpZzg4ODg7CiAKLSAg
ICBjYW52YXMtPnJlYWRQaXhlbHMoJmRlc3RCaXRtYXAsIHJlY3QueCgpLCByZWN0LnkoKSwgY29u
ZmlnODg4OCk7CisgICAgY29udGV4dC0+cmVhZFBpeGVscygmZGVzdEJpdG1hcCwgcmVjdC54KCks
IHJlY3QueSgpLCBjb25maWc4ODg4KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0K
IAogUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRlU3lzdGVtKSBjb25z
dAogewotICAgIHJldHVybiBnZXRJbWFnZURhdGE8VW5tdWx0aXBsaWVkPihyZWN0LCBjb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgbV9zaXplKTsKKyAgICByZXR1cm4gZ2V0
SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KSwgbV9zaXplKTsKIH0KIAogUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFByZW11bHRpcGxp
ZWQ+KHJlY3QsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBtX3NpemUp
OworICAgIHJldHVybiBnZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4ocmVjdCwgY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9zaXplKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2Us
IGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pCiB7Ci0gICAgU2tDYW52
YXMqIGNhbnZhcyA9IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAg
IEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKICAgICBBU1NFUlQoc291cmNlUmVjdC5o
ZWlnaHQoKSA+IDApOwogCkBAIC0zMzAsNyArMzI5LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KE11bHRpcGx5IG11bHRpcGxpZWQsIFVpbnQ4Q2xhbXBlZEFycmF5KiBzb3VyY2Us
IGMKICAgICBlbHNlCiAgICAgICAgIGNvbmZpZzg4ODggPSBTa0NhbnZhczo6a1JHQkFfVW5wcmVt
dWxfQ29uZmlnODg4ODsKIAotICAgIGNhbnZhcy0+d3JpdGVQaXhlbHMoc3JjQml0bWFwLCBkZXN0
WCwgZGVzdFksIGNvbmZpZzg4ODgpOworICAgIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkt
PndyaXRlUGl4ZWxzKHNyY0JpdG1hcCwgZGVzdFgsIGRlc3RZLCBjb25maWc4ODg4KTsKIH0KIAog
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkBAIC0zNjYsOCArMzY1LDcgQEAgU3RyaW5nIEltYWdlQnVm
ZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFs
aXR5LCBDb28KICAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKIAogICAgIFZlY3RvcjxjaGFyPiBlbmNvZGVk
SW1hZ2U7Ci0gICAgU2tEZXZpY2UqIGRldmljZSA9IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGRldmljZS0+
YWNjZXNzQml0bWFwKGZhbHNlKSwgbWltZVR5cGUsIHF1YWxpdHksICZlbmNvZGVkSW1hZ2UpKQor
ICAgIGlmICghZW5jb2RlSW1hZ2UoKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1h
cCgpLCBtaW1lVHlwZSwgcXVhbGl0eSwgJmVuY29kZWRJbWFnZSkpCiAgICAgICAgIHJldHVybiAi
ZGF0YTosIjsKIAogICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCmluZGV4IDFkYmRh
MGZkYTE4OWZhZTU5ZGFiMDQyODcwNWZjZDdlYmQ5MTdkZTMuLmNjY2JkOTAwNzU5ZDg0MzhmZjU4
NGNiYjVkMjkyMjA1ZDc2NjNmOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0aWMg
U2tCaXRtYXAgZXh0cmFjdFNjYWxlZEltYWdlRnJhZ21lbnQoY29uc3QgTmF0aXZlSW1hZ2VTa2lh
JiBiaXRtYXAsIGNvbnN0CiAvLwogLy8gTm90ZTogdGhpcyBjb2RlIGlzIG9ubHkgdXNlZCB3aGVu
IHRoZSBjYW52YXMgdHJhbnNmb3JtYXRpb24gaXMgbGltaXRlZCB0bwogLy8gc2NhbGluZyBvciB0
cmFuc2xhdGlvbi4KLXN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMmIGNh
bnZhcywgU2tQYWludCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYgYml0bWFwLCBjb25z
dCBTa1JlY3QmIHNyY1JlY3QsIGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QpCitzdGF0aWMgdm9pZCBk
cmF3UmVzYW1wbGVkQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIGNvbnRleHQsIFNrUGFpbnQm
IHBhaW50LCBjb25zdCBOYXRpdmVJbWFnZVNraWEmIGJpdG1hcCwgY29uc3QgU2tSZWN0JiBzcmNS
ZWN0LCBjb25zdCBTa1JlY3QmIGRlc3RSZWN0KQogewogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQog
ICAgIFRSQUNFX0VWRU5UMCgic2tpYSIsICJkcmF3UmVzYW1wbGVkQml0bWFwIik7CkBAIC0zMDQs
MTMgKzMwNCwxMyBAQCBzdGF0aWMgdm9pZCBkcmF3UmVzYW1wbGVkQml0bWFwKFNrQ2FudmFzJiBj
YW52YXMsIFNrUGFpbnQmIHBhaW50LCBjb25zdCBOYXRpdmVJbQogICAgIC8vIHRoZSBmaW5hbCBz
Y2FsZS4gVGhlIGZpbmFsIHNjYWxlIGlzIGEgY29tYmluYXRpb24gb2Ygc2NhbGUgdHJhbnNmb3Jt
CiAgICAgLy8gaW4gY2FudmFzIGFuZCBleHBsaWNpdCBzY2FsaW5nIChzcmNSZWN0IGFuZCBkZXN0
UmVjdCkuCiAgICAgU2tSZWN0IHNjcmVlblJlY3Q7Ci0gICAgY2FudmFzLmdldFRvdGFsTWF0cml4
KCkubWFwUmVjdCgmc2NyZWVuUmVjdCwgZGVzdFJlY3QpOworICAgIGNvbnRleHQtPmdldFRvdGFs
TWF0cml4KCkubWFwUmVjdCgmc2NyZWVuUmVjdCwgZGVzdFJlY3QpOwogICAgIGZsb2F0IHJlYWxT
Y2FsZVggPSBzY3JlZW5SZWN0LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCk7CiAgICAgZmxvYXQg
cmVhbFNjYWxlWSA9IHNjcmVlblJlY3QuaGVpZ2h0KCkgLyBzcmNSZWN0LmhlaWdodCgpOwogCiAg
ICAgLy8gVGhpcyBwYXJ0IG9mIGNvZGUgbGltaXRzIHNjYWxpbmcgb25seSB0byB2aXNpYmxlIHBv
cnRpb24gaW4gdGhlCiAgICAgU2tSZWN0IGRlc3RSZWN0VmlzaWJsZVN1YnNldDsKLSAgICBDbGlw
UmVjdFRvQ2FudmFzKGNhbnZhcywgZGVzdFJlY3QsICZkZXN0UmVjdFZpc2libGVTdWJzZXQpOwor
ICAgIENsaXBSZWN0VG9DYW52YXMoY29udGV4dCwgZGVzdFJlY3QsICZkZXN0UmVjdFZpc2libGVT
dWJzZXQpOwogCiAgICAgLy8gQ2xpcFJlY3RUb0NhbnZhcyBvZnRlbiBvdmVyc2hvb3RzLCByZXN1
bHRpbmcgaW4gYSBsYXJnZXIgcmVnaW9uIHRoYW4gb3VyCiAgICAgLy8gb3JpZ2luYWwgZGVzdFJl
Y3QuIEludGVyc2VjdGluZyBnZXRzIHVzIGJhY2sgaW5zaWRlLgpAQCAtMzQwLDggKzM0MCw4IEBA
IHN0YXRpYyB2b2lkIGRyYXdSZXNhbXBsZWRCaXRtYXAoU2tDYW52YXMmIGNhbnZhcywgU2tQYWlu
dCYgcGFpbnQsIGNvbnN0IE5hdGl2ZUltCiAgICAgLy8gV2hlbiBTa2lhIHN1cHBvcnRzIHRoZW4g
dXNlIHRoaXMgYXMgdGhlIHNvdXJjZSByZWN0IHRvIHJlcGxhY2UgMC4KICAgICAvLwogICAgIC8v
IHNjYWxlZFNyY1JlY3Qub2Zmc2V0KC1lbmNsb3NpbmdTY2FsZWRTcmNSZWN0LngoKSwgLWVuY2xv
c2luZ1NjYWxlZFNyY1JlY3QueSgpKTsKLSAgICBjYW52YXMuc2F2ZSgpOwotICAgIGNhbnZhcy5j
bGlwUmVjdChkZXN0UmVjdFZpc2libGVTdWJzZXQpOworICAgIGNvbnRleHQtPnNhdmUoKTsKKyAg
ICBjb250ZXh0LT5jbGlwUmVjdChkZXN0UmVjdFZpc2libGVTdWJzZXQpOwogCiAgICAgLy8gQmVj
YXVzZSB0aGUgaW1hZ2UgZnJhZ21lbnQgaXMgZ2VuZXJhdGVkIHdpdGggYW4gYXBwcm94bWlhdGVk
IHNjYWxpbmcKICAgICAvLyBmYWN0b3IuIFRoaXMgZHJhdyB3aWxsIHBlcmZvcm0gYSBjbG9zZSB0
byAxIHNjYWxpbmcuCkBAIC0zNDksMTMgKzM0OSwxMyBAQCBzdGF0aWMgdm9pZCBkcmF3UmVzYW1w
bGVkQml0bWFwKFNrQ2FudmFzJiBjYW52YXMsIFNrUGFpbnQmIHBhaW50LCBjb25zdCBOYXRpdmVJ
bQogICAgIC8vIE5PVEU6IEZvciBmdXR1cmUgb3B0aW1pemF0aW9uLiBJZiB0aGUgZGlmZmVyZW5j
ZSBpbiBzY2FsZSBpcyBzbyBzbWFsbAogICAgIC8vIHRoYXQgU2tpYSBkb2Vzbid0IHByb2R1Y2Ug
YSBkaWZmZXJlbmNlIHRoZW4gd2UgY2FuIGp1c3QgYmxpdCBpdCBkaXJlY3RseQogICAgIC8vIHRv
IGVuaGFuY2UgcGVyZm9ybWFuY2UuCi0gICAgY2FudmFzLmRyYXdCaXRtYXBSZWN0KHNjYWxlZElt
YWdlRnJhZ21lbnQsIDAsIGVuY2xvc2luZ0Rlc3RSZWN0LCAmcGFpbnQpOwotICAgIGNhbnZhcy5y
ZXN0b3JlKCk7CisgICAgY29udGV4dC0+ZHJhd0JpdG1hcFJlY3Qoc2NhbGVkSW1hZ2VGcmFnbWVu
dCwgMCwgZW5jbG9zaW5nRGVzdFJlY3QsICZwYWludCk7CisgICAgY29udGV4dC0+cmVzdG9yZSgp
OwogfQogCiBzdGF0aWMgYm9vbCBoYXNOb245MHJvdGF0aW9uKFBsYXRmb3JtQ29udGV4dFNraWEq
IGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuICFjb250ZXh0LT5jYW52YXMoKS0+Z2V0VG90YWxNYXRy
aXgoKS5yZWN0U3RheXNSZWN0KCk7CisgICAgcmV0dXJuICFjb250ZXh0LT5nZXRUb3RhbE1hdHJp
eCgpLnJlY3RTdGF5c1JlY3QoKTsKIH0KIAogc3RhdGljIHZvaWQgcGFpbnRTa0JpdG1hcChQbGF0
Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IE5hdGl2ZUltYWdlU2tpYSYg
Yml0bWFwLCBjb25zdCBTa1JlY3QmIHNyY1JlY3QsIGNvbnN0IFNrUmVjdCYgZGVzdFJlY3QsIGNv
bnN0IFNrWGZlcm1vZGU6Ok1vZGUmIGNvbXBPcCkKQEAgLTM3MCw4ICszNzAsNiBAQCBzdGF0aWMg
dm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4dFNraWEqIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgTmF0aXZlSW1hZwogICAgIC8vIG9ubHkgYW50aWFsaWFzIGlmIHdlJ3JlIHJvdGF0ZWQg
b3Igc2tld2VkCiAgICAgcGFpbnQuc2V0QW50aUFsaWFzKGhhc05vbjkwcm90YXRpb24ocGxhdGZv
cm1Db250ZXh0KSk7CiAKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0LT5j
YW52YXMoKTsKLQogICAgIFJlc2FtcGxpbmdNb2RlIHJlc2FtcGxpbmc7CiAgICAgaWYgKHBsYXRm
b3JtQ29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQogICAgICAgICByZXNhbXBsaW5nID0gUkVTQU1Q
TEVfTElORUFSOwpAQCAtMzgwLDEwICszNzgsMTAgQEAgc3RhdGljIHZvaWQgcGFpbnRTa0JpdG1h
cChQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IE5hdGl2ZUltYWcK
ICAgICBlbHNlIHsKICAgICAgICAgLy8gVGFrZSBpbnRvIGFjY291bnQgc2NhbGUgYXBwbGllZCB0
byB0aGUgY2FudmFzIHdoZW4gY29tcHV0aW5nIHNhbXBsaW5nIG1vZGUgKGUuZy4gQ1NTIHNjYWxl
IG9yIHBhZ2Ugc2NhbGUpLgogICAgICAgICBTa1JlY3QgZGVzdFJlY3RUYXJnZXQgPSBkZXN0UmVj
dDsKLSAgICAgICAgaWYgKCEoY2FudmFzLT5nZXRUb3RhbE1hdHJpeCgpLmdldFR5cGUoKSAmIChT
a01hdHJpeDo6a0FmZmluZV9NYXNrIHwgU2tNYXRyaXg6OmtQZXJzcGVjdGl2ZV9NYXNrKSkpCi0g
ICAgICAgICAgICBjYW52YXMtPmdldFRvdGFsTWF0cml4KCkubWFwUmVjdCgmZGVzdFJlY3RUYXJn
ZXQsIGRlc3RSZWN0KTsKKyAgICAgICAgaWYgKCEocGxhdGZvcm1Db250ZXh0LT5nZXRUb3RhbE1h
dHJpeCgpLmdldFR5cGUoKSAmIChTa01hdHJpeDo6a0FmZmluZV9NYXNrIHwgU2tNYXRyaXg6OmtQ
ZXJzcGVjdGl2ZV9NYXNrKSkpCisgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPmdldFRvdGFs
TWF0cml4KCkubWFwUmVjdCgmZGVzdFJlY3RUYXJnZXQsIGRlc3RSZWN0KTsKIAotICAgICAgICBy
ZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2RlKGNhbnZhcy0+Z2V0VG90YWxNYXRyaXgo
KSwgYml0bWFwLAorICAgICAgICByZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2RlKHBs
YXRmb3JtQ29udGV4dC0+Z2V0VG90YWxNYXRyaXgoKSwgYml0bWFwLAogICAgICAgICAgICAgU2tT
Y2FsYXJUb0Zsb2F0KHNyY1JlY3Qud2lkdGgoKSksIFNrU2NhbGFyVG9GbG9hdChzcmNSZWN0Lmhl
aWdodCgpKSwKICAgICAgICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdFRhcmdldC53aWR0
aCgpKSwgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0VGFyZ2V0LmhlaWdodCgpKSk7CiAgICAgfQpA
QCAtMzk3LDcgKzM5NSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250
ZXh0U2tpYSogcGxhdGZvcm1Db250ZXh0LCBjb25zdCBOYXRpdmVJbWFnCiAgICAgcmVzYW1wbGlu
ZyA9IGxpbWl0UmVzYW1wbGluZ01vZGUocGxhdGZvcm1Db250ZXh0LCByZXNhbXBsaW5nKTsKICAg
ICBwYWludC5zZXRGaWx0ZXJCaXRtYXAocmVzYW1wbGluZyA9PSBSRVNBTVBMRV9MSU5FQVIpOwog
ICAgIGlmIChyZXNhbXBsaW5nID09IFJFU0FNUExFX0FXRVNPTUUpCi0gICAgICAgIGRyYXdSZXNh
bXBsZWRCaXRtYXAoKmNhbnZhcywgcGFpbnQsIGJpdG1hcCwgc3JjUmVjdCwgZGVzdFJlY3QpOwor
ICAgICAgICBkcmF3UmVzYW1wbGVkQml0bWFwKHBsYXRmb3JtQ29udGV4dCwgcGFpbnQsIGJpdG1h
cCwgc3JjUmVjdCwgZGVzdFJlY3QpOwogICAgIGVsc2UgewogICAgICAgICAvLyBObyByZXNhbXBs
aW5nIG5lY2Vzc2FyeSwgd2UgY2FuIGp1c3QgZHJhdyB0aGUgYml0bWFwLiBXZSB3YW50IHRvCiAg
ICAgICAgIC8vIGZpbHRlciBpdCBpZiB3ZSBkZWNpZGVkIHRvIGRvIGxpbmVhciBpbnRlcnBvbGF0
aW9uIGFib3ZlLCBvciBpZiB0aGVyZQpAQCAtNDE4LDEwICs0MTYsMTAgQEAgc3RhdGljIHZvaWQg
cGFpbnRTa0JpdG1hcChQbGF0Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0
IE5hdGl2ZUltYWcKICAgICAgICAgLy8gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vMTQ1NTQwLgogICAg
ICAgICBpZiAobmVlZHNDbGlwcGluZykgewogICAgICAgICAgICAgcGxhdGZvcm1Db250ZXh0LT5z
YXZlKCk7Ci0gICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLT5jbGlwUmVjdChk
ZXN0UmVjdCk7CisgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPmNsaXBSZWN0KGRlc3RSZWN0
KTsKICAgICAgICAgfQogCi0gICAgICAgIGNhbnZhcy0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLmJp
dG1hcCgpLCAmZW5jbG9zaW5nU3JjUmVjdCwgZW5jbG9zaW5nRGVzdFJlY3QsICZwYWludCk7Cisg
ICAgICAgIHBsYXRmb3JtQ29udGV4dC0+ZHJhd0JpdG1hcFJlY3QoYml0bWFwLmJpdG1hcCgpLCAm
ZW5jbG9zaW5nU3JjUmVjdCwgZW5jbG9zaW5nRGVzdFJlY3QsICZwYWludCk7CiAKICAgICAgICAg
aWYgKG5lZWRzQ2xpcHBpbmcpCiAgICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQtPnJlc3RvcmUo
KTsKQEAgLTQ4MSw3ICs0NzksNyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsCiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSB8fCBub3JtU3JjUmVj
dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsgLy8gbm90aGluZyB0byBkcmF3CiAKLSAgICBT
a01hdHJpeCBjdG0gPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRv
dGFsTWF0cml4KCk7CisgICAgU2tNYXRyaXggY3RtID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmdldFRvdGFsTWF0cml4KCk7CiAgICAgU2tNYXRyaXggdG90YWxNYXRyaXg7CiAgICAgdG90
YWxNYXRyaXguc2V0Q29uY2F0KGN0bSwgcGF0dGVyblRyYW5zZm9ybSk7CiAKQEAgLTU1Miw3ICs1
NTAsNyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
CiAgICAgcGFpbnQuc2V0WGZlcm1vZGVNb2RlKFdlYkNvcmVDb21wb3NpdGVUb1NraWFDb21wb3Np
dGUoY29tcG9zaXRlT3ApKTsKICAgICBwYWludC5zZXRGaWx0ZXJCaXRtYXAocmVzYW1wbGluZyA9
PSBSRVNBTVBMRV9MSU5FQVIpOwogCi0gICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnBh
aW50U2tQYWludChkZXN0UmVjdCwgcGFpbnQpOworICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5kcmF3UmVjdChkZXN0UmVjdCwgcGFpbnQpOwogfQogCiAvLyA9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3Bw
CmluZGV4IDM0NGJjMTdkMzc0N2I0YTI0Njc5NTc1ZjgxNTAwMDgwMWYxM2RjNTEuLmI0NjY0Njlj
ZmNiZjVlNmM2MzJhMjYyZTE1ZWNjY2M1NzcyNmE3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2F2ZSgp
CiAgICAgbV9zdGF0ZS0+bV9pbWFnZUJ1ZmZlckNsaXAucmVzZXQoKTsKIAogICAgIC8vIFNhdmUg
b3VyIG5hdGl2ZSBjYW52YXMuCi0gICAgY2FudmFzKCktPnNhdmUoKTsKKyAgICBtX2NhbnZhcy0+
c2F2ZSgpOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNhdmVMYXllcihjb25zdCBT
a1JlY3QqIGJvdW5kcywgY29uc3QgU2tQYWludCogcGFpbnQpCkBAIC0yNzUsNyArMjc1LDcgQEAg
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LAogICAgIG1fc3RhdGUtPm1fY2xpcCA9IGJvdW5kczsKICAgICAvLyBH
ZXQgdGhlIGFic29sdXRlIGNvb3JkaW5hdGVzIG9mIHRoZSBzdG9yZWQgY2xpcHBpbmcgcmVjdGFu
Z2xlIHRvIG1ha2UgaXQKICAgICAvLyBpbmRlcGVuZGVudCBvZiBhbnkgdHJhbnNmb3JtIGNoYW5n
ZXMuCi0gICAgY2FudmFzKCktPmdldFRvdGFsTWF0cml4KCkubWFwUmVjdCgmbV9zdGF0ZS0+bV9j
bGlwKTsKKyAgICBnZXRUb3RhbE1hdHJpeCgpLm1hcFJlY3QoJm1fc3RhdGUtPm1fY2xpcCk7CiAK
ICAgICBTa0NhbnZhczo6U2F2ZUZsYWdzIHNhdmVGbGFncyA9IHN0YXRpY19jYXN0PFNrQ2FudmFz
OjpTYXZlRmxhZ3M+KFNrQ2FudmFzOjprSGFzQWxwaGFMYXllcl9TYXZlRmxhZyB8IFNrQ2FudmFz
OjprRnVsbENvbG9yTGF5ZXJfU2F2ZUZsYWcpOwogICAgIHNhdmVMYXllcigmYm91bmRzLCAwLCBz
YXZlRmxhZ3MpOwpAQCAtMjk3LDIzICsyOTcsMTggQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjpiZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LAogICAgIH0K
IH0KIAotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlwUGF0aEFudGlBbGlhc2VkKGNvbnN0
IFNrUGF0aCYgY2xpcFBhdGgpCi17Ci0gICAgY2FudmFzKCktPmNsaXBQYXRoKGNsaXBQYXRoLCBT
a1JlZ2lvbjo6a0ludGVyc2VjdF9PcCwgdHJ1ZSk7Ci19Ci0KIHZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6cmVzdG9yZSgpCiB7CiAgICAgaWYgKCFtX3N0YXRlLT5tX2ltYWdlQnVmZmVyQ2xpcC5l
bXB0eSgpKSB7CiAgICAgICAgIGFwcGx5Q2xpcEZyb21JbWFnZShtX3N0YXRlLT5tX2NsaXAsIG1f
c3RhdGUtPm1faW1hZ2VCdWZmZXJDbGlwKTsKLSAgICAgICAgY2FudmFzKCktPnJlc3RvcmUoKTsK
KyAgICAgICAgbV9jYW52YXMtPnJlc3RvcmUoKTsKICAgICB9CiAKICAgICBtX3N0YXRlU3RhY2su
cmVtb3ZlTGFzdCgpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKIAogICAg
IC8vIFJlc3RvcmUgb3VyIG5hdGl2ZSBjYW52YXMuCi0gICAgY2FudmFzKCktPnJlc3RvcmUoKTsK
KyAgICBtX2NhbnZhcy0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6
OmRyYXdSZWN0KFNrUmVjdCByZWN0KQpAQCAtMzIyLDggKzMxNyw3IEBAIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6ZHJhd1JlY3QoU2tSZWN0IHJlY3QpCiAgICAgaW50IGZpbGxjb2xvck5vdFRy
YW5zcGFyZW50ID0gbV9zdGF0ZS0+bV9maWxsQ29sb3IgJiAweEZGMDAwMDAwOwogICAgIGlmIChm
aWxsY29sb3JOb3RUcmFuc3BhcmVudCkgewogICAgICAgICBzZXR1cFBhaW50Rm9yRmlsbGluZygm
cGFpbnQpOwotICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QocmVjdCwgcGFpbnQpOwotICAgICAg
ICBkaWREcmF3UmVjdChyZWN0LCBwYWludCk7CisgICAgICAgIGRyYXdSZWN0KHJlY3QsIHBhaW50
KTsKICAgICB9CiAKICAgICBpZiAobV9zdGF0ZS0+bV9zdHJva2VTdHlsZSAhPSBOb1N0cm9rZQpA
QCAtMzM1LDE3ICszMjksMTMgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UmVjdChT
a1JlY3QgcmVjdCkKICAgICAgICAgcGFpbnQuc2V0Q29sb3IodGhpcy0+ZWZmZWN0aXZlU3Ryb2tl
Q29sb3IoKSk7CiAKICAgICAgICAgU2tSZWN0IHRvcEJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVj
dC5mVG9wLCByZWN0LmZSaWdodCwgcmVjdC5mVG9wICsgMSB9OwotICAgICAgICBjYW52YXMoKS0+
ZHJhd1JlY3QodG9wQm9yZGVyLCBwYWludCk7Ci0gICAgICAgIGRpZERyYXdSZWN0KHRvcEJvcmRl
ciwgcGFpbnQpOworICAgICAgICBkcmF3UmVjdCh0b3BCb3JkZXIsIHBhaW50KTsKICAgICAgICAg
U2tSZWN0IGJvdHRvbUJvcmRlciA9IHsgcmVjdC5mTGVmdCwgcmVjdC5mQm90dG9tIC0gMSwgcmVj
dC5mUmlnaHQsIHJlY3QuZkJvdHRvbSB9OwotICAgICAgICBjYW52YXMoKS0+ZHJhd1JlY3QoYm90
dG9tQm9yZGVyLCBwYWludCk7Ci0gICAgICAgIGRpZERyYXdSZWN0KGJvdHRvbUJvcmRlciwgcGFp
bnQpOworICAgICAgICBkcmF3UmVjdChib3R0b21Cb3JkZXIsIHBhaW50KTsKICAgICAgICAgU2tS
ZWN0IGxlZnRCb3JkZXIgPSB7IHJlY3QuZkxlZnQsIHJlY3QuZlRvcCArIDEsIHJlY3QuZkxlZnQg
KyAxLCByZWN0LmZCb3R0b20gLSAxIH07Ci0gICAgICAgIGNhbnZhcygpLT5kcmF3UmVjdChsZWZ0
Qm9yZGVyLCBwYWludCk7Ci0gICAgICAgIGRpZERyYXdSZWN0KGxlZnRCb3JkZXIsIHBhaW50KTsK
KyAgICAgICAgZHJhd1JlY3QobGVmdEJvcmRlciwgcGFpbnQpOwogICAgICAgICBTa1JlY3Qgcmln
aHRCb3JkZXIgPSB7IHJlY3QuZlJpZ2h0IC0gMSwgcmVjdC5mVG9wICsgMSwgcmVjdC5mUmlnaHQs
IHJlY3QuZkJvdHRvbSAtIDEgfTsKLSAgICAgICAgY2FudmFzKCktPmRyYXdSZWN0KHJpZ2h0Qm9y
ZGVyLCBwYWludCk7Ci0gICAgICAgIGRpZERyYXdSZWN0KHJpZ2h0Qm9yZGVyLCBwYWludCk7Cisg
ICAgICAgIGRyYXdSZWN0KHJpZ2h0Qm9yZGVyLCBwYWludCk7CiAgICAgfQogfQogCkBAIC01ODEs
MTMgKzU3MSw2IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0RGFzaFBhdGhFZmZlY3Qo
U2tEYXNoUGF0aEVmZmVjdCogZGFzaCkKICAgICB9CiB9CiAKLXZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6cGFpbnRTa1BhaW50KGNvbnN0IFNrUmVjdCYgcmVjdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIG1fY2Fu
dmFzLT5kcmF3UmVjdChyZWN0LCBwYWludCk7Ci0gICAgZGlkRHJhd1JlY3QocmVjdCwgcGFpbnQp
OwotfQotCiBjb25zdCBTa0JpdG1hcCogUGxhdGZvcm1Db250ZXh0U2tpYTo6Yml0bWFwKCkgY29u
c3QKIHsKICNpZiBQTEFURk9STShDSFJPTUlVTSkKQEAgLTYyNSwyNCArNjA4LDYgQEAgdm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpkaWREcmF3UmVjdChjb25zdCBTa1JlY3QmIHJlY3QsIGNvbnN0
IFNrUGFpbnQmIHBhaW50LAogICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3UmVjdCh0aGlz
LCByZWN0LCBwYWludCwgYml0bWFwKTsKIH0KIAotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpk
aWREcmF3UGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewot
ICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQotICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWRE
cmF3UGF0aCh0aGlzLCBwYXRoLCBwYWludCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tp
YTo6ZGlkRHJhd1BvaW50cyhTa0NhbnZhczo6UG9pbnRNb2RlIG1vZGUsIGludCBudW1Qb2ludHMs
IGNvbnN0IFNrUG9pbnQgcG9pbnRzW10sIGNvbnN0IFNrUGFpbnQmIHBhaW50KQotewotICAgIGlm
IChtX3RyYWNrT3BhcXVlUmVnaW9uKQotICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWREcmF3UG9p
bnRzKHRoaXMsIG1vZGUsIG51bVBvaW50cywgcG9pbnRzLCBwYWludCk7Ci19Ci0KLXZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6ZGlkRHJhd0JvdW5kZWQoY29uc3QgU2tSZWN0JiByZWN0LCBjb25z
dCBTa1BhaW50JiBwYWludCkKLXsKLSAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKLSAgICAg
ICAgbV9vcGFxdWVSZWdpb24uZGlkRHJhd0JvdW5kZWQodGhpcywgcmVjdCwgcGFpbnQpOwotfQot
CiB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFkanVzdFRleHRSZW5kZXJNb2RlKFNrUGFpbnQq
IHBhaW50KQogewogICAgIGlmICghcGFpbnQtPmlzTENEUmVuZGVyVGV4dCgpKQpAQCAtNjU3LDcg
KzYyMiw3IEBAIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y291bGRVc2VMQ0RSZW5kZXJlZFRl
eHQoKQogICAgIC8vIHJlbmRlcmVkIHRleHQgY2Fubm90IGJlIGNvbXBvc2l0ZWQgY29ycmVjdGx5
IHdoZW4gdGhlIGxheWVyIGlzCiAgICAgLy8gY29sbGFwc2VkLiBUaGVyZWZvcmUsIHN1YnBpeGVs
IHRleHQgaXMgZGlzYWJsZWQgd2hlbiB3ZSBhcmUgZHJhd2luZwogICAgIC8vIG9udG8gYSBsYXll
ci4KLSAgICBpZiAoY2FudmFzKCktPmlzRHJhd2luZ1RvTGF5ZXIoKSkKKyAgICBpZiAoaXNEcmF3
aW5nVG9MYXllcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBJZiB0aGlzIHRl
eHQgaXMgbm90IGluIGFuIGltYWdlIGJ1ZmZlciBhbmQgc28gd29uJ3QgYmUgZXh0ZXJuYWxseQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9y
bUNvbnRleHRTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaAppbmRleCAyMzY5ZjMyMDk5NmE0MTFiMzFiYjhmNzNjYmFlNmRl
YTRkOWJlMWY0Li40OTRhMTM4Yjg2NGEwZGRhYWRiMTZjZmMxZjExNjQ3ODA5ZDhlODJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaApAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSAiU2tDYW52
YXMuaCIKICNpbmNsdWRlICJTa0Rhc2hQYXRoRWZmZWN0LmgiCisjaW5jbHVkZSAiU2tEZXZpY2Uu
aCIKICNpbmNsdWRlICJTa0RyYXdMb29wZXIuaCIKICNpbmNsdWRlICJTa1BhaW50LmgiCiAjaW5j
bHVkZSAiU2tQYXRoLmgiCkBAIC0xMDEsNyArMTAyLDYgQEAgcHVibGljOgogICAgIC8vIGludm9r
ZWQuCiAgICAgLy8gTk9URTogfGltYWdlQnVmZmVyfCBtYXkgYmUgZGVsZXRlZCBiZWZvcmUgdGhl
IHxyZXN0b3JlfCBpcyBpbnZva2VkLgogICAgIHZvaWQgYmVnaW5MYXllckNsaXBwZWRUb0ltYWdl
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKik7Ci0gICAgdm9pZCBjbGlwUGF0
aEFudGlBbGlhc2VkKGNvbnN0IFNrUGF0aCYpOwogCiAgICAgLy8gU2V0cyB1cCB0aGUgY29tbW9u
IGZsYWdzIG9uIGEgcGFpbnQgZm9yIGFudGlhbGlhc2luZywgZWZmZWN0cywgZXRjLgogICAgIC8v
IFRoaXMgaXMgaW1wbGljaXRseSBjYWxsZWQgYnkgc2V0dXBQYWludEZpbGwgYW5kIHNldHVwUGFp
bnRTdHJva2UsIGJ1dApAQCAtMTYxLDExICsxNjEsNiBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIHB1c2hlZCBkb3duIHRvIEdyYXBoaWNzQ29udGV4dC4KICAgICB2b2lk
IGRyYXdSZWN0KFNrUmVjdCByZWN0KTsKIAotICAgIC8vIEZJWE1FOiBJJ20gc3RpbGwgdW5zdXJl
IGhvdyBJIHdpbGwgc2VyaWFsaXplIHRoaXMgY2FsbC4KLSAgICB2b2lkIHBhaW50U2tQYWludChj
b25zdCBTa1JlY3QmLCBjb25zdCBTa1BhaW50Jik7Ci0KLSAgICBjb25zdCBTa0JpdG1hcCogYml0
bWFwKCkgY29uc3Q7Ci0KICAgICAvLyBSZXR1cm5zIGlmIHRoZSBjb250ZXh0IGlzIGEgcHJpbnRp
bmcgY29udGV4dCBpbnN0ZWFkIG9mIGEgZGlzcGxheQogICAgIC8vIGNvbnRleHQuIEJpdG1hcCBz
aG91bGRuJ3QgYmUgcmVzYW1wbGVkIHdoZW4gcHJpbnRpbmcgdG8ga2VlcCB0aGUgYmVzdAogICAg
IC8vIHBvc3NpYmxlIHF1YWxpdHkuCkBAIC0xOTUsMTcgKzE5MCw2MSBAQCBwdWJsaWM6CiAgICAg
Ly8gVGhpcyB3aWxsIGJlIGFuIGVtcHR5IHJlZ2lvbiB1bmxlc3MgdHJhY2tpbmcgaXMgZW5hYmxl
ZC4KICAgICBjb25zdCBPcGFxdWVSZWdpb25Ta2lhJiBvcGFxdWVSZWdpb24oKSBjb25zdCB7IHJl
dHVybiBtX29wYXF1ZVJlZ2lvbjsgfQogCi0gICAgLy8gQWZ0ZXIgZHJhd2luZyBpbiB0aGUgY29u
dGV4dCdzIGNhbnZhcywgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBub3RpZnkgdGhlIGNvbnRleHQg
c28gaXQgY2FuIHRyYWNrIHRoZSBvcGFxdWUgcmVnaW9uLgorICAgIC8vIEFmdGVyIGRyYXdpbmcg
ZGlyZWN0bHkgdG8gdGhlIGNvbnRleHQncyBjYW52YXMsIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIG5v
dGlmeSB0aGUgY29udGV4dCBzbworICAgIC8vIGl0IGNhbiB0cmFjayB0aGUgb3BhcXVlIHJlZ2lv
bi4KKyAgICAvLyBGSVhNRTogdGhpcyBpcyBzdGlsbCBuZWVkZWQgb25seSBiZWNhdXNlIEltYWdl
U2tpYTo6cGFpbnRTa0JpdG1hcCgpIG1heSBuZWVkIHRvIG5vdGlmeSBmb3IgYQorICAgIC8vICAg
ICAgICBzbWFsbGVyIHJlY3QgdGhhbiB0aGUgb25lIGRyYXduIHRvLCBkdWUgdG8gaXRzIGNsaXBw
aW5nIGxvZ2ljLgogICAgIHZvaWQgZGlkRHJhd1JlY3QoY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQ
YWludCYsIGNvbnN0IFNrQml0bWFwKiA9IDApOwotICAgIHZvaWQgZGlkRHJhd1BhdGgoY29uc3Qg
U2tQYXRoJiwgY29uc3QgU2tQYWludCYpOwotICAgIHZvaWQgZGlkRHJhd1BvaW50cyhTa0NhbnZh
czo6UG9pbnRNb2RlLCBpbnQgbnVtUG9pbnRzLCBjb25zdCBTa1BvaW50W10sIGNvbnN0IFNrUGFp
bnQmKTsKLSAgICAvLyBGb3IgZHJhd2luZyBvcGVyYXRpb25zIHRoYXQgZG8gbm90IGZpbGwgdGhl
IGVudGlyZSByZWN0LgotICAgIHZvaWQgZGlkRHJhd0JvdW5kZWQoY29uc3QgU2tSZWN0JiwgY29u
c3QgU2tQYWludCYpOwogCiAgICAgLy8gVHVybiBvZmYgTENEIHRleHQgZm9yIHRoZSBwYWludCBp
ZiBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgY29udGV4dC4KICAgICB2b2lkIGFkanVzdFRleHRSZW5k
ZXJNb2RlKFNrUGFpbnQqKTsKICAgICBib29sIGNvdWxkVXNlTENEUmVuZGVyZWRUZXh0KCk7CiAK
KyAgICBlbnVtIEFudGlBbGlhc2luZ01vZGUgeworICAgICAgICBOb3RBbnRpQWxpYXNlZCwKKyAg
ICAgICAgQW50aUFsaWFzZWQKKyAgICB9OworICAgIGVudW0gQWNjZXNzTW9kZSB7CisgICAgICAg
IFJlYWRPbmx5LAorICAgICAgICBSZWFkV3JpdGUKKyAgICB9OworCisgICAgLy8gU2tDYW52YXMg
d3JhcHBlcnMuCisgICAgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCgpIGNvbnN0OworICAgIGNvbnN0
IFNrQml0bWFwJiBsYXllckJpdG1hcChBY2Nlc3NNb2RlID0gUmVhZE9ubHkpIGNvbnN0OworICAg
IGJvb2wgcmVhZFBpeGVscyhTa0JpdG1hcCosIGludCB4LCBpbnQgeSwKKyAgICAgICAgU2tDYW52
YXM6OkNvbmZpZzg4ODggPSBTa0NhbnZhczo6a05hdGl2ZV9QcmVtdWxfQ29uZmlnODg4OCk7Cisg
ICAgdm9pZCB3cml0ZVBpeGVscyhjb25zdCBTa0JpdG1hcCYsIGludCB4LCBpbnQgeSwKKyAgICAg
ICAgU2tDYW52YXM6OkNvbmZpZzg4ODggPSBTa0NhbnZhczo6a05hdGl2ZV9QcmVtdWxfQ29uZmln
ODg4OCk7CisgICAgYm9vbCBpc0RyYXdpbmdUb0xheWVyKCkgY29uc3Q7CisgICAgYm9vbCBpc1Zl
Y3RvcigpIGNvbnN0OworCisgICAgYm9vbCBjbGlwUGF0aChjb25zdCBTa1BhdGgmLCBBbnRpQWxp
YXNpbmdNb2RlID0gTm90QW50aUFsaWFzZWQsCisgICAgICAgIFNrUmVnaW9uOjpPcCA9IFNrUmVn
aW9uOjprSW50ZXJzZWN0X09wKTsKKyAgICBib29sIGNsaXBSZWN0KGNvbnN0IFNrUmVjdCYsIEFu
dGlBbGlhc2luZ01vZGUgPSBOb3RBbnRpQWxpYXNlZCwKKyAgICAgICAgU2tSZWdpb246Ok9wID0g
U2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgIGJvb2wgZ2V0Q2xpcEJvdW5kcyhTa1JlY3Qq
KSBjb25zdDsKKworICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IFNrTWF0cml4Jik7CisgICAgY29u
c3QgU2tNYXRyaXgmIGdldFRvdGFsTWF0cml4KCkgY29uc3Q7CisgICAgYm9vbCBjb25jYXQoY29u
c3QgU2tNYXRyaXgmKTsKKyAgICBib29sIHJvdGF0ZShTa1NjYWxhciBkZWdyZWVzKTsKKyAgICBi
b29sIHNjYWxlKFNrU2NhbGFyIHN4LCBTa1NjYWxhciBzeSk7CisgICAgYm9vbCB0cmFuc2xhdGUo
U2tTY2FsYXIgZHgsIFNrU2NhbGFyIGR5KTsKKworICAgIHZvaWQgZHJhd0JpdG1hcChjb25zdCBT
a0JpdG1hcCYsIFNrU2NhbGFyLCBTa1NjYWxhciwgY29uc3QgU2tQYWludCogPSAwKTsKKyAgICB2
b2lkIGRyYXdCaXRtYXBSZWN0KGNvbnN0IFNrQml0bWFwJiwgY29uc3QgU2tJUmVjdCosIGNvbnN0
IFNrUmVjdCYsIGNvbnN0IFNrUGFpbnQqID0gMCk7CisgICAgdm9pZCBkcmF3T3ZhbChjb25zdCBT
a1JlY3QmLCBjb25zdCBTa1BhaW50Jik7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBTa1BhdGgm
LCBjb25zdCBTa1BhaW50Jik7CisgICAgdm9pZCBkcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1v
ZGUsIHNpemVfdCBjb3VudCwgY29uc3QgU2tQb2ludCBwdHNbXSwgY29uc3QgU2tQYWludCYpOwor
ICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgU2tSZWN0JiwgY29uc3QgU2tQYWludCYpOworICAgIHZv
aWQgZHJhd0lSZWN0KGNvbnN0IFNrSVJlY3QmLCBjb25zdCBTa1BhaW50Jik7CisgICAgdm9pZCBk
cmF3UG9zVGV4dChjb25zdCB2b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwgY29uc3QgU2tQ
b2ludCBwb3NbXSwgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZHJhd1Bvc1RleHRIKGNvbnN0
IHZvaWQqIHRleHQsIHNpemVfdCBieXRlTGVuZ3RoLCBjb25zdCBTa1NjYWxhciB4cG9zW10sIFNr
U2NhbGFyIGNvbnN0WSwKKyAgICAgICAgY29uc3QgU2tQYWludCYpOworICAgIHZvaWQgZHJhd1Rl
eHRPblBhdGgoY29uc3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVMZW5ndGgsIGNvbnN0IFNrUGF0
aCYsCisgICAgICAgIGNvbnN0IFNrTWF0cml4KiwgY29uc3QgU2tQYWludCYpOworCiAjaWYgZGVm
aW5lZChTS19TVVBQT1JUX0hJTlRJTkdfU0NBTEVfRkFDVE9SKQogICAgIHZvaWQgc2V0SGludGlu
Z1NjYWxlRmFjdG9yKFNrU2NhbGFyIGZhY3RvcikgeyBtX2hpbnRpbmdTY2FsZUZhY3RvciA9IGZh
Y3RvcjsgfQogICAgIFNrU2NhbGFyIGhpbnRpbmdTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1faGludGluZ1NjYWxlRmFjdG9yOyB9CkBAIC0yNDgsNSArMjg3LDE0NSBAQCBwcml2YXRlOgog
I2VuZGlmCiB9OwogCitpbmxpbmUgY29uc3QgU2tCaXRtYXAmIFBsYXRmb3JtQ29udGV4dFNraWE6
OmxheWVyQml0bWFwKEFjY2Vzc01vZGUgYWNjZXNzKSBjb25zdAoreworICAgIHJldHVybiBtX2Nh
bnZhcy0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChhY2Nlc3MgPT0gUmVhZFdyaXRlKTsK
K30KKworaW5saW5lIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZFBpeGVscyhTa0JpdG1h
cCogYml0bWFwLCBpbnQgeCwgaW50IHksCisgICAgU2tDYW52YXM6OkNvbmZpZzg4ODggY29uZmln
ODg4OCkKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPnJlYWRQaXhlbHMoYml0bWFwLCB4LCB5LCBj
b25maWc4ODg4KTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6d3JpdGVQ
aXhlbHMoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IHgsIGludCB5LAorICAgIFNrQ2FudmFz
OjpDb25maWc4ODg4IGNvbmZpZzg4ODgpCit7CisgICAgbV9jYW52YXMtPndyaXRlUGl4ZWxzKGJp
dG1hcCwgeCwgeSwgY29uZmlnODg4OCk7Cit9CisKK2lubGluZSBib29sIFBsYXRmb3JtQ29udGV4
dFNraWE6OmlzRHJhd2luZ1RvTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2NhbnZhcy0+
aXNEcmF3aW5nVG9MYXllcigpOworfQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lh
Ojppc1ZlY3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY2FudmFzLT5nZXRUb3BEZXZpY2Uo
KS0+Z2V0RGV2aWNlQ2FwYWJpbGl0aWVzKCkgJiBTa0RldmljZTo6a1ZlY3Rvcl9DYXBhYmlsaXR5
OworfQorCitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlwUGF0aChjb25zdCBT
a1BhdGgmIHBhdGgsIEFudGlBbGlhc2luZ01vZGUgYWEsIFNrUmVnaW9uOjpPcCBvcCkKK3sKKyAg
ICByZXR1cm4gbV9jYW52YXMtPmNsaXBQYXRoKHBhdGgsIG9wLCBhYSA9PSBBbnRpQWxpYXNlZCk7
Cit9CisKK2lubGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBSZWN0KGNvbnN0IFNr
UmVjdCYgcmVjdCwgQW50aUFsaWFzaW5nTW9kZSBhYSwgU2tSZWdpb246Ok9wIG9wKQoreworICAg
IHJldHVybiBtX2NhbnZhcy0+Y2xpcFJlY3QocmVjdCwgb3AsIGFhID09IEFudGlBbGlhc2VkKTsK
K30KKworaW5saW5lIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6Z2V0Q2xpcEJvdW5kcyhTa1Jl
Y3QqIGJvdW5kcykgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPmdldENsaXBCb3VuZHMo
Ym91bmRzKTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0TWF0cml4
KGNvbnN0IFNrTWF0cml4JiBtYXRyaXgpCit7CisgICAgbV9jYW52YXMtPnNldE1hdHJpeChtYXRy
aXgpOworfQorCitpbmxpbmUgY29uc3QgU2tNYXRyaXgmIFBsYXRmb3JtQ29udGV4dFNraWE6Omdl
dFRvdGFsTWF0cml4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jYW52YXMtPmdldFRvdGFsTWF0
cml4KCk7Cit9CisKK2lubGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmNvbmNhdChjb25z
dCBTa01hdHJpeCYgbWF0cml4KQoreworICAgIHJldHVybiBtX2NhbnZhcy0+Y29uY2F0KG1hdHJp
eCk7Cit9CisKK2lubGluZSBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OnJvdGF0ZShTa1NjYWxh
ciBkZWdyZWVzKQoreworICAgIHJldHVybiBtX2NhbnZhcy0+cm90YXRlKGRlZ3JlZXMpOworfQor
CitpbmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzY2FsZShTa1NjYWxhciBzeCwgU2tT
Y2FsYXIgc3kpCit7CisgICAgcmV0dXJuIG1fY2FudmFzLT5zY2FsZShzeCwgc3kpOworfQorCitp
bmxpbmUgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp0cmFuc2xhdGUoU2tTY2FsYXIgZHgsIFNr
U2NhbGFyIGR5KQoreworICAgIHJldHVybiBtX2NhbnZhcy0+dHJhbnNsYXRlKGR4LCBkeSk7Cit9
CisKK2lubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdCaXRtYXAoY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCwgU2tTY2FsYXIgbGVmdCwgU2tTY2FsYXIgdG9wLAorICAgIGNvbnN0IFNr
UGFpbnQqIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3Qml0bWFwKGJpdG1hcCwgbGVmdCwg
dG9wLCBwYWludCk7Cit9CisKK2lubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmRyYXdC
aXRtYXBSZWN0KGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGNvbnN0IFNrSVJlY3QqIGlzcmMsCisg
ICAgY29uc3QgU2tSZWN0JiBkc3QsIGNvbnN0IFNrUGFpbnQqIHBhaW50KQoreworICAgIG1fY2Fu
dmFzLT5kcmF3Qml0bWFwUmVjdChiaXRtYXAsIGlzcmMsIGRzdCwgcGFpbnQpOworfQorCitpbmxp
bmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3T3ZhbChjb25zdCBTa1JlY3QmIG92YWws
IGNvbnN0IFNrUGFpbnQmIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3T3ZhbChvdmFsLCBw
YWludCk7CisKKyAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVS
ZWdpb24uZGlkRHJhd0JvdW5kZWQodGhpcywgb3ZhbCwgcGFpbnQpOworfQorCitpbmxpbmUgdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UGF0aChjb25zdCBTa1BhdGgmIHBhdGgsIGNvbnN0
IFNrUGFpbnQmIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3UGF0aChwYXRoLCBwYWludCk7
CisKKyAgICBpZiAobV90cmFja09wYXF1ZVJlZ2lvbikKKyAgICAgICAgbV9vcGFxdWVSZWdpb24u
ZGlkRHJhd1BhdGgodGhpcywgcGF0aCwgcGFpbnQpOworfQorCitpbmxpbmUgdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpkcmF3UG9pbnRzKFNrQ2FudmFzOjpQb2ludE1vZGUgbW9kZSwgc2l6ZV90
IGNvdW50LAorICAgIGNvbnN0IFNrUG9pbnQgcHRzW10sIGNvbnN0IFNrUGFpbnQmIHBhaW50KQor
eworICAgIG1fY2FudmFzLT5kcmF3UG9pbnRzKG1vZGUsIGNvdW50LCBwdHMsIHBhaW50KTsKKwor
ICAgIGlmIChtX3RyYWNrT3BhcXVlUmVnaW9uKQorICAgICAgICBtX29wYXF1ZVJlZ2lvbi5kaWRE
cmF3UG9pbnRzKHRoaXMsIG1vZGUsIGNvdW50LCBwdHMsIHBhaW50KTsKK30KKworaW5saW5lIHZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6ZHJhd1JlY3QoY29uc3QgU2tSZWN0JiByZWN0LCBjb25z
dCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd1JlY3QocmVjdCwgcGFpbnQp
OworCisgICAgaWYgKG1fdHJhY2tPcGFxdWVSZWdpb24pCisgICAgICAgIG1fb3BhcXVlUmVnaW9u
LmRpZERyYXdSZWN0KHRoaXMsIHJlY3QsIHBhaW50LCAwKTsKK30KKworaW5saW5lIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6ZHJhd0lSZWN0KGNvbnN0IFNrSVJlY3QmIHJlY3QsIGNvbnN0IFNr
UGFpbnQmIHBhaW50KQoreworICAgIG1fY2FudmFzLT5kcmF3SVJlY3QocmVjdCwgcGFpbnQpOwor
fQorCitpbmxpbmUgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpkcmF3UG9zVGV4dChjb25zdCB2
b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwKKyAgICBjb25zdCBTa1BvaW50IHBvc1tdLCBj
b25zdCBTa1BhaW50JiBwYWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd1Bvc1RleHQodGV4dCwg
Ynl0ZUxlbmd0aCwgcG9zLCBwYWludCk7Cit9CisKK2lubGluZSB2b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OmRyYXdQb3NUZXh0SChjb25zdCB2b2lkKiB0ZXh0LCBzaXplX3QgYnl0ZUxlbmd0aCwK
KyAgICBjb25zdCBTa1NjYWxhciB4cG9zW10sIFNrU2NhbGFyIGNvbnN0WSwgY29uc3QgU2tQYWlu
dCYgcGFpbnQpCit7CisgICAgbV9jYW52YXMtPmRyYXdQb3NUZXh0SCh0ZXh0LCBieXRlTGVuZ3Ro
LCB4cG9zLCBjb25zdFksIHBhaW50KTsKK30KKworaW5saW5lIHZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6ZHJhd1RleHRPblBhdGgoY29uc3Qgdm9pZCogdGV4dCwgc2l6ZV90IGJ5dGVMZW5ndGgs
CisgICAgY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBTa01hdHJpeCogbWF0cml4LCBjb25zdCBT
a1BhaW50JiBwYWludCkKK3sKKyAgICBtX2NhbnZhcy0+ZHJhd1RleHRPblBhdGgodGV4dCwgYnl0
ZUxlbmd0aCwgcGF0aCwgbWF0cml4LCBwYWludCk7Cit9CisKIH0KICNlbmRpZiAvLyBQbGF0Zm9y
bUNvbnRleHRTa2lhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvU2tpYUZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9Ta2lhRm9udFdpbi5jcHAKaW5kZXggYTZmMzdjZmYwNzRlMmJjMjMwMzliNTM5Mzkz
NjBjYTdmYjAxYjNkOC4uYjhhMDU1MGFkMTE2Y2QyOTk4YmQ0NzJiYTcxZmZjYmU2ZTUyY2UzNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhRm9u
dFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lh
Rm9udFdpbi5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCB3aW5kb3dzQ2FuSGFuZGxlVGV4dERy
YXdpbmdXaXRob3V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKIH0KICNlbmRpZgog
Ci1zdGF0aWMgdm9pZCBza2lhRHJhd1RleHQoU2tDYW52YXMqIGNhbnZhcywKK3N0YXRpYyB2b2lk
IHNraWFEcmF3VGV4dChQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQmIHBvaW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIFNrUGFpbnQqIHBhaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdPUkQq
IGdseXBocywKQEAgLTEyNCw3ICsxMjQsNyBAQCBzdGF0aWMgdm9pZCBza2lhRHJhd1RleHQoU2tD
YW52YXMqIGNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgeSArIC1Ta0ludFRvU2NhbGFy
KG9mZnNldHNbaV0uZHYpKTsKICAgICAgICAgICAgIHggKz0gU2tJbnRUb1NjYWxhcihhZHZhbmNl
c1tpXSk7CiAgICAgICAgIH0KLSAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dChnbHlwaHMsIG51
bUdseXBocyAqIHNpemVvZih1aW50MTZfdCksIHBvcywgKnBhaW50KTsKKyAgICAgICAgY29udGV4
dC0+ZHJhd1Bvc1RleHQoZ2x5cGhzLCBudW1HbHlwaHMgKiBzaXplb2YodWludDE2X3QpLCBwb3Ms
ICpwYWludCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU2tBdXRvU1RBcnJheTxrTG9jYWxHbHlw
aE1heCAqIDIsIFNrU2NhbGFyPiBzdG9yYWdlKG51bUdseXBocyk7CiAgICAgICAgIFNrU2NhbGFy
KiB4cG9zID0gc3RvcmFnZS5nZXQoKTsKQEAgLTEzMiw3ICsxMzIsNyBAQCBzdGF0aWMgdm9pZCBz
a2lhRHJhd1RleHQoU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAgIHhwb3NbaV0gPSB4Owog
ICAgICAgICAgICAgeCArPSBTa0ludFRvU2NhbGFyKGFkdmFuY2VzW2ldKTsKICAgICAgICAgfQot
ICAgICAgICBjYW52YXMtPmRyYXdQb3NUZXh0SChnbHlwaHMsIG51bUdseXBocyAqIHNpemVvZih1
aW50MTZfdCksCisgICAgICAgIGNvbnRleHQtPmRyYXdQb3NUZXh0SChnbHlwaHMsIG51bUdseXBo
cyAqIHNpemVvZih1aW50MTZfdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhwb3Ms
IHksICpwYWludCk7CiAgICAgfQogfQpAQCAtMjE4LDEwICsyMTgsOSBAQCBzdGF0aWMgdm9pZCBw
YWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSEZPTlQgaGZvbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUG9pbnQqIG9yaWdpbikKIHsKICAgICBQbGF0
Zm9ybUNvbnRleHRTa2lhKiBwbGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKLSAgICBTa0NhbnZhcyogY2FudmFzID0gcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKTsK
ICAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0TW9kZSA9IHBsYXRmb3JtQ29udGV4dC0+Z2V0
VGV4dERyYXdpbmdNb2RlKCk7CiAgICAgLy8gRW5zdXJlIGZvbnQgbG9hZCBmb3IgcHJpbnRpbmcs
IGJlY2F1c2UgUERGIGRldmljZSBuZWVkcyBpdC4KLSAgICBpZiAoY2FudmFzLT5nZXRUb3BEZXZp
Y2UoKS0+Z2V0RGV2aWNlQ2FwYWJpbGl0aWVzKCkgJiBTa0RldmljZTo6a1ZlY3Rvcl9DYXBhYmls
aXR5KQorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQtPmlzVmVjdG9yKCkpCiAgICAgICAgIFBsYXRm
b3JtU3VwcG9ydDo6ZW5zdXJlRm9udExvYWRlZChoZm9udCk7CiAKICAgICAvLyBGaWxsaW5nIChp
ZiBuZWNlc3NhcnkpLiBUaGlzIGlzIHRoZSBjb21tb24gY2FzZS4KQEAgLTIzMyw3ICsyMzIsNyBA
QCBzdGF0aWMgdm9pZCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSEZP
TlQgaGZvbnQsCiAgICAgYm9vbCBkaWRGaWxsID0gZmFsc2U7CiAKICAgICBpZiAoKHRleHRNb2Rl
ICYgVGV4dE1vZGVGaWxsKSAmJiAoU2tDb2xvckdldEEocGFpbnQuZ2V0Q29sb3IoKSkgfHwgcGFp
bnQuZ2V0TG9vcGVyKCkpKSB7Ci0gICAgICAgIHNraWFEcmF3VGV4dChjYW52YXMsICpvcmlnaW4s
ICZwYWludCwgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCAmb2Zmc2V0c1swXSwgbnVtR2x5cGhz
KTsKKyAgICAgICAgc2tpYURyYXdUZXh0KHBsYXRmb3JtQ29udGV4dCwgKm9yaWdpbiwgJnBhaW50
LCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sICZvZmZzZXRzWzBdLCBudW1HbHlwaHMpOwogICAg
ICAgICBkaWRGaWxsID0gdHJ1ZTsKICAgICB9CiAKQEAgLTI2MCw3ICsyNTksNyBAQCBzdGF0aWMg
dm9pZCBwYWludFNraWFUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgSEZPTlQgaGZvbnQs
CiAgICAgICAgICAgICBwYWludC5zZXRMb29wZXIoMCk7CiAgICAgICAgIH0KIAotICAgICAgICBz
a2lhRHJhd1RleHQoY2FudmFzLCAqb3JpZ2luLCAmcGFpbnQsICZnbHlwaHNbMF0sICZhZHZhbmNl
c1swXSwgJm9mZnNldHNbMF0sIG51bUdseXBocyk7CisgICAgICAgIHNraWFEcmF3VGV4dChwbGF0
Zm9ybUNvbnRleHQsICpvcmlnaW4sICZwYWludCwgJmdseXBoc1swXSwgJmFkdmFuY2VzWzBdLCAm
b2Zmc2V0c1swXSwgbnVtR2x5cGhzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmNwcAppbmRleCAxZTJjOGRhYjhh
NjU1ODgzMGE5MDdjODYxMDE5NDM3MDRkZjk2YmRhLi5jODQxOTk0M2VjNTk5NDBkY2I4YTUyZTVl
NDQ5NjI2MmMyMDhmZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1NraWFVdGlscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9Ta2lhVXRpbHMuY3BwCkBAIC0xMDYsOSArMTA2LDkgQEAgQ29sb3IgU2tQTUNv
bG9yVG9XZWJDb3JlQ29sb3IoU2tQTUNvbG9yIHBtKQogICAgIHJldHVybiBTa1BNQ29sb3JUb0Nv
bG9yKHBtKTsKIH0KIAotdm9pZCBDbGlwUmVjdFRvQ2FudmFzKGNvbnN0IFNrQ2FudmFzJiBjYW52
YXMsIGNvbnN0IFNrUmVjdCYgc3JjUmVjdCwgU2tSZWN0KiBkZXN0UmVjdCkKK3ZvaWQgQ2xpcFJl
Y3RUb0NhbnZhcyhjb25zdCBQbGF0Zm9ybUNvbnRleHRTa2lhKiBjb250ZXh0LCBjb25zdCBTa1Jl
Y3QmIHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpCiB7Ci0gICAgaWYgKCFjYW52YXMuZ2V0Q2xp
cEJvdW5kcyhkZXN0UmVjdCkgfHwgIWRlc3RSZWN0LT5pbnRlcnNlY3Qoc3JjUmVjdCkpCisgICAg
aWYgKCFjb250ZXh0LT5nZXRDbGlwQm91bmRzKGRlc3RSZWN0KSB8fCAhZGVzdFJlY3QtPmludGVy
c2VjdChzcmNSZWN0KSkKICAgICAgICAgZGVzdFJlY3QtPnNldEVtcHR5KCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NraWFVdGlscy5oCmluZGV4
IDY4MWRjZDU1ZTc5N2I2ZDVhOWUwNDk3YmRlMDI0MDA0ODU4MjFkODguLjM1OGY4NmQxMTY5OTVk
MGUzMTQ0ZWU0MWY4MDhmMjA0NzI3MWRiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvU2tpYVV0aWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9Ta2lhVXRpbHMuaApAQCAtNjcsNyArNjcsNyBAQCBpbmxpbmUg
U2tTY2FsYXIgV2ViQ29yZURvdWJsZVRvU2tTY2FsYXIoZG91YmxlIGQpCiAvLyBjbGlwLCBkb2lu
ZyB0aGUgbmVjZXNzYXJ5IGNvb3JkaW5hdGUgdHJhbnNmb3Jtcy4KIC8vCiAvLyBzcmNSZWN0IGFu
ZCBkZXN0UmVjdCBjYW4gYmUgdGhlIHNhbWUuCi12b2lkIENsaXBSZWN0VG9DYW52YXMoY29uc3Qg
U2tDYW52YXMmLCBjb25zdCBTa1JlY3QmIHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpOwordm9p
ZCBDbGlwUmVjdFRvQ2FudmFzKGNvbnN0IFBsYXRmb3JtQ29udGV4dFNraWEqLCBjb25zdCBTa1Jl
Y3QmIHNyY1JlY3QsIFNrUmVjdCogZGVzdFJlY3QpOwogCiAvLyBEZXRlcm1pbmUgaWYgYSBnaXZl
biBXZWJLaXQgcG9pbnQgaXMgY29udGFpbmVkIGluIGEgcGF0aAogYm9vbCBTa1BhdGhDb250YWlu
c1BvaW50KFNrUGF0aCosIGNvbnN0IEZsb2F0UG9pbnQmLCBTa1BhdGg6OkZpbGxUeXBlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3Qu
Y3BwCmluZGV4IGFlMzA5MGQ4YzUwN2U5NDA0NTlmZmVhNzQwYTMwYjcwMGJjYjcyZjEuLjZkNzNj
YWY1MTk1ZjkxY2VlMjI2NTE3NzZhNWZhNTJlNjgyMWM1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcApAQCAtNjYsNyAr
NjYsNyBAQCBzdGF0aWMgdm9pZCBkcmF3TmF0aXZlUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsCiAKIHN0YXRpYyBDb2xvciBnZXRQaXhlbEF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
aW50IHgsIGludCB5KQogewotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAo
ZmFsc2UpOworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+bGF5ZXJCaXRtYXAoKTsKICAgICByZXR1cm4gQ29sb3IoKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgUkdCQTMyKj4oYml0bWFwLmdldEFkZHIzMih4LCB5KSkpOwogfQogCkBAIC03NCw3
ICs3NCw3IEBAIHN0YXRpYyBDb2xvciBnZXRQaXhlbEF0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgaW50IHgsIGludCB5KQogLy8gV2luZG93cyBtZXNzaW5nIGl0IHVwLgogc3RhdGljIHZvaWQg
Y2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFs
c2UpKTsKKyAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5sYXllckJpdG1hcCgpKTsKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGJpdG1hcC5oZWlnaHQoKTsgeSsrKSB7CiAgICAgICAgIHVpbnQzMl90KiByb3cgPSBi
aXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGJpdG1h
cC53aWR0aCgpOyB4KyspCkBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyVG9wTGF5
ZXJBbHBoYUNoYW5uZWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogLy8gQ2xlYXJzIHRoZSBh
bHBoYSBjaGFubmVsIG9uIHRoZSBzcGVjaWZpZWQgcGl4ZWwuCiBzdGF0aWMgdm9pZCBjbGVhclRv
cExheWVyQWxwaGFQaXhlbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB4LCBpbnQgeSkK
IHsKLSAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1h
cChmYWxzZSkpOworICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4o
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmxheWVyQml0bWFwKCkpOwogICAgICpiaXRtYXAu
Z2V0QWRkcjMyKHgsIHkpICY9IDB4MDBGRkZGRkY7CiB9CiAKQEAgLTYxNiw3ICs2MTYsNyBAQCBU
RVNUKFRyYW5zcGFyZW5jeVdpbiwgU2NhbGUpCiAgICAgICAgIC8vIHRoZSBoZWxwZXIgZ29lcyBv
dXQgb2Ygc2NvcGUuIFdlIGRvbid0IHdhbnQgdG8gY2FsbAogICAgICAgICAvLyBjbGVhclRvcExh
eWVyQWxwaGFDaGFubmVsIGJlY2F1c2UgdGhhdCB3aWxsIGFjdHVhbGx5IGNsZWFyIHRoZSB3aG9s
ZQogICAgICAgICAvLyBjYW52YXMgKHNpbmNlIHdlIGhhdmUgbm8gZXh0cmEgbGF5ZXIhKS4KLSAg
ICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihoZWxwZXIuY29u
dGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nl
c3NCaXRtYXAoZmFsc2UpKTsKKyAgICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8
U2tCaXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+bGF5ZXJCaXRt
YXAoKSk7CiAgICAgICAgICpiaXRtYXAuZ2V0QWRkcjMyKDIsIDIpICY9IDB4MDBGRkZGRkY7CiAg
ICAgICAgIGhlbHBlci5jb21wb3NpdGUoKTsKICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>