<?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>90573</bug_id>
          
          <creation_ts>2012-07-04 12:42:15 -0700</creation_ts>
          <short_desc>[chromium] Decouple RenderPass drawing from CCRenderSurface</short_desc>
          <delta_ts>2012-07-09 22:16:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90848</dependson>
          <blocked>90702</blocked>
    
    <blocked>90825</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>aelias</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>piman</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wjmaclean</cc>
    
    <cc>zlieber</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>663101</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-04 12:42:15 -0700</bug_when>
    <thetext>[chromium] Decouple RenderPass cacheing decisions from CCRenderSurface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663764</commentid>
    <comment_count>1</comment_count>
      <attachid>150995</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-05 16:03:13 -0700</bug_when>
    <thetext>Created attachment 150995
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663777</commentid>
    <comment_count>2</comment_count>
      <attachid>151001</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-05 16:30:26 -0700</bug_when>
    <thetext>Created attachment 151001
Patch

- move the contentsChanged flag into RenderPassDrawQuad instead of RenderPass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664215</commentid>
    <comment_count>3</comment_count>
      <attachid>151107</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-06 11:53:40 -0700</bug_when>
    <thetext>Created attachment 151107
Patch

- rebase and remove unused drawingSurface variable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665036</commentid>
    <comment_count>4</comment_count>
      <attachid>151107</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-09 11:50:49 -0700</bug_when>
    <thetext>Comment on attachment 151107
Patch

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

A few random comments, but I like the way this looks in general.

&gt; Source/WebCore/ChangeLog:8
&gt; +        We Remove the managed textures from CCRenderSurface and store them in a

s/We //

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:298
&gt; +        // FIXME: Make this id global across all compositors (include a compositor id?)

(Alternatively, maybe you won&apos;t need a compositor id here, since the host compositor will know which embedded compositor this pass/quad came from?)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h:56
&gt; +    static PassOwnPtr&lt;CCRenderPass&gt; create(CCRenderSurface*, unsigned id);

Should id be an int here to match the type in CCLayerImpl::id()?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.h:60
&gt; +    bool m_contentsChangedSinceLastFrame;

Can you just make this the full damage rect? I suspect that eventually we&apos;ll want that information so that if a surface texture is cached we can do a partial update of it.

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:130
&gt; -        OwnPtr&lt;CCLayerImpl&gt; root = CCLayerImpl::create(0);
&gt; +        OwnPtr&lt;CCLayerImpl&gt; root = CCLayerImpl::create(1);

...how were these all passing before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665117</commentid>
    <comment_count>5</comment_count>
      <attachid>151107</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 13:21:44 -0700</bug_when>
    <thetext>Comment on attachment 151107
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:298
&gt;&gt; +        // FIXME: Make this id global across all compositors (include a compositor id?)
&gt; 
&gt; (Alternatively, maybe you won&apos;t need a compositor id here, since the host compositor will know which embedded compositor this pass/quad came from?)

We could add the compositor id but I&apos;d rather do it here I think. That said, I found a compositor id in CCProxy, so I can just do that now and no fixme.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.h:56
&gt;&gt; +    static PassOwnPtr&lt;CCRenderPass&gt; create(CCRenderSurface*, unsigned id);
&gt; 
&gt; Should id be an int here to match the type in CCLayerImpl::id()?

ya, sure. matches compositor id too, which i will mashup with it.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPassDrawQuad.h:60
&gt;&gt; +    bool m_contentsChangedSinceLastFrame;
&gt; 
&gt; Can you just make this the full damage rect? I suspect that eventually we&apos;ll want that information so that if a surface texture is cached we can do a partial update of it.

Hm ya, can do that.

&gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:130
&gt;&gt; +        OwnPtr&lt;CCLayerImpl&gt; root = CCLayerImpl::create(1);
&gt; 
&gt; ...how were these all passing before?

I think because none of them call drawLayers, they didn&apos;t hit that HashMap issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665120</commentid>
    <comment_count>6</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-09 13:30:10 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 151107 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=151107&amp;action=review
&gt;
&gt; &gt;&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:130
&gt; &gt;&gt; +        OwnPtr&lt;CCLayerImpl&gt; root = CCLayerImpl::create(1);
&gt; &gt; 
&gt; &gt; ...how were these all passing before?
&gt; 
&gt; I think because none of them call drawLayers, they didn&apos;t hit that HashMap issue.

Ohhh.

In that case, maybe we should assert that ids are non-zero in CCLayerImpl.  Either that, or you need to use different hash traits on your maps that allow for zero ids.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665148</commentid>
    <comment_count>7</comment_count>
      <attachid>151107</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 14:03:26 -0700</bug_when>
    <thetext>Comment on attachment 151107
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:298
&gt;&gt;&gt; +        // FIXME: Make this id global across all compositors (include a compositor id?)
&gt;&gt; 
&gt;&gt; (Alternatively, maybe you won&apos;t need a compositor id here, since the host compositor will know which embedded compositor this pass/quad came from?)
&gt; 
&gt; We could add the compositor id but I&apos;d rather do it here I think. That said, I found a compositor id in CCProxy, so I can just do that now and no fixme.

I&apos;d like to punt on this for this patch. Its not needed for it strictly, and there&apos;s some work to be done. (SingleThreadProxy has compositorId == -1 always, and its not clear to me that&apos;s the correct id to use anyhow.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665155</commentid>
    <comment_count>8</comment_count>
      <attachid>151314</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 14:09:54 -0700</bug_when>
    <thetext>Created attachment 151314
Patch

Changed the assert in CCLayerImpl from &gt;= 0 to &gt; 0. A bunch of tests had to be updated but it&apos;s simple changes. Addressed other comments also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665168</commentid>
    <comment_count>9</comment_count>
      <attachid>151314</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-07-09 14:25:02 -0700</bug_when>
    <thetext>Comment on attachment 151314
Patch

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

R=me.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:52
&gt; +    ASSERT(id);

nit: id &gt; 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665172</commentid>
    <comment_count>10</comment_count>
      <attachid>151320</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 14:26:58 -0700</bug_when>
    <thetext>Created attachment 151320
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665174</commentid>
    <comment_count>11</comment_count>
      <attachid>151314</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-07-09 14:27:14 -0700</bug_when>
    <thetext>Comment on attachment 151314
Patch

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

thanks!

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCRenderPass.cpp:52
&gt;&gt; +    ASSERT(id);
&gt; 
&gt; nit: id &gt; 0

oo right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665231</commentid>
    <comment_count>12</comment_count>
      <attachid>151320</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-09 15:31:42 -0700</bug_when>
    <thetext>Comment on attachment 151320
Patch for landing

Clearing flags on attachment: 151320

Committed r122160: &lt;http://trac.webkit.org/changeset/122160&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665232</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-09 15:31:47 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150995</attachid>
            <date>2012-07-05 16:03:13 -0700</date>
            <delta_ts>2012-07-05 16:30:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90573-20120705190311.patch</filename>
            <type>text/plain</type>
            <size>72588</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uYmFhN2Y4ZmM2OTVjOWM4ZWI3NGQzYjYzYjQ4NjMy
ZWMzZjJmMDc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTA3LTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRGVj
b3VwbGUgUmVuZGVyUGFzcyBkcmF3aW5nIGZyb20gQ0NSZW5kZXJTdXJmYWNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIFJlbW92ZSB0aGUgbWFuYWdl
ZCB0ZXh0dXJlcyBmcm9tIENDUmVuZGVyU3VyZmFjZSBhbmQgc3RvcmUgdGhlbSBpbiBhCisgICAg
ICAgIEhhc2hNYXAgaW4gTGF5ZXJSZW5kZXJlckNocm9taXVtLgorCisgICAgICAgIEF0IHRoZSBz
dGFydCBvZiBhIGZyYW1lLCBhbGwgdGV4dHVyZXMgZm9yIHRoZSBmcmFtZSBhcmUgcmVzZXJ2ZWQs
IGFuZAorICAgICAgICB1bm5lZWRlZCB0ZXh0dXJlcyBhcmUgZGVsZXRlZC4gQWZ0ZXIgZWFjaCBx
dWFkIGlzIGRyYXduLCBldmljdGVkIHRleHR1cmVzCisgICAgICAgIChpZSB0ZW1wb3JhcnkgdGV4
dHVyZXMgdXNlZCBmb3IgYmFja2dyb3VuZCBmaWx0ZXJzKSBhcmUgZGVsZXRlZCB0byBrZWVwCisg
ICAgICAgIHdpdGhpbiBtZW1vcnkgbGltaXRzLiBBdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSwgYWxs
IHN1cmZhY2UgY29udGVudHMKKyAgICAgICAgdGV4dHVyZXMgYXJlIGtlcHQgcmVzZXJ2ZWQgYW5k
IHRodXMgbm90IGRlbGV0ZWQuCisKKyAgICAgICAgV2UgYWRkIGEgbnVtZXJpYyBpZGVudGlmaWVy
IHRvIENDUmVuZGVyUGFzcyB3aGljaCBjYW4gYmUgdXNlZCB0bworICAgICAgICBpZGVudGlmeSB0
aGUgcGFzcyBhY3Jvc3Mgc2VyaWFsaXphdGlvbiBpbiB0aGUgZnV0dXJlLCBhbmQgaXMgdXNlZAor
ICAgICAgICBpbiB0aGUgaW50ZXJmYWNlIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bS4gQWxzbyB3
ZSBhZGQgdG8gdGhlCisgICAgICAgIENDUmVuZGVyUGFzcyBhIGNvbnRlbnRzQ2hhbmdlZFNpbmNl
TGFzdEZyYW1lKCkgZmxhZyBzbyB0aGF0IHRoZQorICAgICAgICB2YWx1ZSBkb2VzIG5vdCBuZWVk
IHRvIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBDQ1JlbmRlclN1cmZhY2UuCisKKyAgICAgICAgVGhl
IHBvaW50ZXIgZnJvbSBDQ1JlbmRlclBhc3MgdG8gQ0NSZW5kZXJTdXJmYWNlIHJlbWFpbnMgZm9y
IHNvbWUKKyAgICAgICAgY29kZSBpbiB0aGUgQ0NMYXllclRyZWVIb3N0SW1wbCwgYW5kIHdpbGwg
YmUgYWRkcmVzc2VkIGluIHRoZSBmdXR1cmUsIGJ1dAorICAgICAgICB0aGUgcG9pbnRlciBpcyBu
byBsb25nZXIgdXNlZCBhdCBhbGwgd2hpbGUgZHJhd2luZyBhIGZyYW1lIGluc2lkZQorICAgICAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW0uCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0
ZXN0cywgbm8gaW50ZW5kZWQgY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5k
ZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJl
bmRlclBhc3NJZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0Jh
Y2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1JlbmRlclBhc3NRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KExheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNz
OjpDQ1JlbmRlclBhc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyUGFzczo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpj
b250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRl
clBhc3M6OnNldENvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyUGFzczo6c2V0RnJhbWVidWZmZXJPdXRwdXRSZWN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaDoKKyAgICAgICAgKENDUmVu
ZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6cHVzaFRp
bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmg6CisgICAgICAgIChDQ1RpbGVkTGF5ZXJJbXBsKToKKwogMjAxMi0w
Ny0wNCAgSm9obiBNZWxsb3IgIDxqb2hubWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFRleHQg
QXV0b3NpemluZzogQWRkIGJhc2ljIGZyYW1ld29yawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCA5MjY0NGUzMTg4N2QxODgzYjlhN2I0OTZkZTFmZDZiYTk4YzAxZGM5Li4xZGZjYjA4NTdm
ODdhODk0MjNiM2ZhYjY3NDczYjQ5YTdkNjk4MDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA3LTA1ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRGVjb3VwbGUgUmVuZGVyUGFzcyBkcmF3
aW5nIGZyb20gQ0NSZW5kZXJTdXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05MDU3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwOgorICAg
ICAgICAqIHRlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAgICAoRmFr
ZUNDUmVuZGVyZXJDbGllbnQ6OkZha2VDQ1JlbmRlcmVyQ2xpZW50KToKKwogMjAxMi0wNy0wNCAg
RGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1d
IENsZWFyIFJlbmRlclN1cmZhY2VzIHN0aWxsIHdoZW4gbm8gaWRsZSBwYWludCB3aWxsIGJlIGRv
bmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGRkZDdkNTE1MzNl
NWU4MjgwZTBjYmFkMDNhMzgyNGEwYzA0YWZlZGEuLjhmNDQxY2M5ODgwMTA1MzExY2JlNjllN2Jj
MTEzY2QyYjM2ZjUyNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApA
QCAtMjc0LDggKzI3NCwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0VmlzaWJs
ZShib29sIHZpc2libGUpCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVu
ZGVyUGFzc1RleHR1cmVzKCkKIHsKLSAgICBpZiAobV9pbXBsVGV4dHVyZU1hbmFnZXIpCi0gICAg
ICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKG1faW1w
bFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOworICAgIGlmICghbV9pbXBsVGV4dHVyZU1hbmFnZXIp
CisgICAgICAgIHJldHVybjsKKyAgICBtX3JlbmRlclBhc3NUZXh0dXJlcy5jbGVhcigpOworICAg
IG1faW1wbFRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9pbXBsVGV4dHVy
ZUFsbG9jYXRvci5nZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3
cG9ydENoYW5nZWQoKQpAQCAtMzE1LDEyICszMTcsNTQgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNsZWFyUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGNv
bnMKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRlclBhc3NBbGxvY2F0
aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3QmIHJlbmRlclBhc3Nlc0luRHJhd09y
ZGVyKQogewotICAgIC8vIEZJWE1FOiBHZXQgdGhpcyBtZW1vcnkgbGltaXQgZnJvbSBHUFUgTWVt
b3J5IE1hbmFnZXIKLSAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKLSAgICBzaXplX3Qg
bWF4TGltaXRCeXRlcyA9IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNp
emUoKSk7Ci0gICAgc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMgPSBtYXhMaW1pdEJ5dGVzIC0gY29u
dGVudHNNZW1vcnlVc2VCeXRlcyA+IDB1ID8gbWF4TGltaXRCeXRlcyAtIGNvbnRlbnRzTWVtb3J5
VXNlQnl0ZXMgOiAwdTsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBjb25zdCBDQ1JlbmRlclBhc3Mq
PiBwYXNzZXNJbkZyYW1lOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2Vz
SW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpCisgICAgICAgIHBhc3Nlc0luRnJhbWUuc2V0KHJlbmRl
clBhc3Nlc0luRHJhd09yZGVyW2ldLT5pZCgpLCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS5n
ZXQoKSk7CisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHBhc3Nlc1RvRGVsZXRlOworICAgIEhhc2hN
YXA8dW5zaWduZWQsIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gPjo6Y29uc3RfaXRlcmF0b3IgcGFz
c0l0ZXJhdG9yOworICAgIGZvciAocGFzc0l0ZXJhdG9yID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMu
YmVnaW4oKTsgcGFzc0l0ZXJhdG9yICE9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmVuZCgpOyArK3Bh
c3NJdGVyYXRvcikgeworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3NJbkZy
YW1lID0gcGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CisgICAgICAgIGlm
ICghcmVuZGVyUGFzc0luRnJhbWUpIHsKKyAgICAgICAgICAgIHBhc3Nlc1RvRGVsZXRlLmFwcGVu
ZChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRTaXplID0gcmVuZGVyUGFzc0luRnJh
bWUtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpLnNpemUoKTsKKyAgICAgICAgR0MzRGVudW0gcmVx
dWlyZWRGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICAgICAgTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUgPSBwYXNzSXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAgICAgaWYg
KCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkU2l6ZSwgcmVxdWlyZWRGb3Jt
YXQpKSB7CisgICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5m
aXJzdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIG1f
aW1wbFRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUxpbWl0Qnl0
ZXMpOworICAgIC8vIERlbGV0ZSBSZW5kZXJQYXNzIHRleHR1cmVzIGZyb20gdGhlIHByZXZpb3Vz
IGZyYW1lIHRoYXQgd2lsbCBub3QgYmUgdXNlZCBhZ2Fpbi4KKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBhc3Nlc1RvRGVsZXRlLnNpemUoKTsgKytpKQorICAgICAgICBtX3JlbmRlclBhc3NU
ZXh0dXJlcy5yZW1vdmUocGFzc2VzVG9EZWxldGVbaV0pOworICAgIG1faW1wbFRleHR1cmVNYW5h
Z2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7
CisKKyAgICAvLyBBbGwgUmVuZGVyUGFzcyB0ZXh0dXJlcyBzaG91bGQgYmUgcmVzZXJ2ZWQgZm9y
IHRoZSBjdXJyZW50IGZyYW1lLiBFdmVyeSBSZW5kZXJQYXNzIHRleHR1cmUKKyAgICAvLyBpcyBr
ZXB0IHJlc2VydmVkIHVudGlsIGl0IGlzIHJlbW92ZWQgYW5kIGRlbGV0ZWQuCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkgewor
ICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdl
dChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSk7CisgICAgICAgIGlmICghdGV4dHVy
ZSkgeworICAgICAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBvd25UZXh0dXJlID0gTWFu
YWdlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7CisgICAgICAg
ICAgICB0ZXh0dXJlID0gb3duVGV4dHVyZS5nZXQoKTsKKyAgICAgICAgICAgIG1fcmVuZGVyUGFz
c1RleHR1cmVzLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgb3duVGV4dHVy
ZS5yZWxlYXNlKCkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWly
ZWRTaXplID0gcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmZyYW1lYnVmZmVyT3V0cHV0UmVj
dCgpLnNpemUoKTsKKyAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQTsKKyAgICAgICAgYm9vbCByZXNlcnZlZCA9IHRleHR1cmUtPnJlc2VydmUo
cmVxdWlyZWRTaXplLCByZXF1aXJlZEZvcm1hdCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVz
ZXJ2ZWQsIHJlc2VydmVkKTsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHVuc2lnbmVkIGlkKSBjb25zdAor
eworICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0
KGlkKTsKKyAgICByZXR1cm4gdGV4dHVyZSAmJiB0ZXh0dXJlLT50ZXh0dXJlSWQoKTsKIH0KIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmJlZ2luRHJhd2luZ0ZyYW1lKGNvbnN0IENDUmVu
ZGVyUGFzcyogcm9vdFJlbmRlclBhc3MpCkBAIC00MTksNiArNDYzLDggQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQpCiAgICAgICAg
IGRyYXdZVVZWaWRlb1F1YWQocXVhZC0+dG9ZVVZWaWRlb0RyYXdRdWFkKCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CisKKyAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRl
eHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogfQogCiB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmRE
cmF3UXVhZCogcXVhZCkKQEAgLTQ4OCw3ICs1MzQsNyBAQCBzdGF0aWMgaW5saW5lIFNrQml0bWFw
IGFwcGx5RmlsdGVycyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0
CiAgICAgcmV0dXJuIENDUmVuZGVyU3VyZmFjZUZpbHRlcnM6OmFwcGx5KGZpbHRlcnMsIHNvdXJj
ZVRleHR1cmUtPnRleHR1cmVJZCgpLCBzb3VyY2VUZXh0dXJlLT5zaXplKCksIGZpbHRlckNvbnRl
eHQuZ2V0KCkpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91
bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkLCBjb25zdCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pCitQYXNzT3duUHRyPE1h
bmFnZWRUZXh0dXJlPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVy
cyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQogewogICAgIC8vIFRoaXMgbWV0aG9k
IGRyYXdzIGEgYmFja2dyb3VuZCBmaWx0ZXIsIHdoaWNoIGFwcGxpZXMgYSBmaWx0ZXIgdG8gYW55
IHBpeGVscyBiZWhpbmQgdGhlIHF1YWQgYW5kIHNlZW4gdGhyb3VnaCBpdHMgYmFja2dyb3VuZC4K
ICAgICAvLyBUaGUgYWxnb3JpdGhtIHdvcmtzIGFzIGZvbGxvd3M6CkBAIC01MDQsMTQgKzU1MCwx
MyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNv
bnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdQogICAgIC8vCiAgICAgLy8gUGl4ZWwgY29waWVz
IGluIHRoaXMgYWxnb3JpdGhtIG9jY3VyIGF0IHN0ZXBzIDIsIDMsIDQsIGFuZCA1LgogCi0gICAg
Q0NSZW5kZXJTdXJmYWNlKiBkcmF3aW5nU3VyZmFjZSA9IHF1YWQtPnJlbmRlclBhc3MoKS0+dGFy
Z2V0U3VyZmFjZSgpOwogICAgIGlmIChxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJ
WE1FOiBXZSBvbmx5IGFsbG93IGJhY2tncm91bmQgZmlsdGVycyBvbiBhbiBvcGFxdWUgcmVuZGVy
IHN1cmZhY2UgYmVjYXVzZSBvdGhlciBzdXJmYWNlcyBtYXkgY29udGFpbgogICAgIC8vIHRyYW5z
bHVjZW50IHBpeGVscywgYW5kIHRoZSBjb250ZW50cyBiZWhpbmQgdGhvc2UgdHJhbnNsdWNlbnQg
cGl4ZWxzIHdvdWxkbid0IGhhdmUgdGhlIGZpbHRlciBhcHBsaWVkLgogICAgIGlmIChtX2N1cnJl
bnRSZW5kZXJQYXNzLT5oYXNUcmFuc3BhcmVudEJhY2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBBU1NFUlQoIW1fY3VycmVudE1hbmFnZWRU
ZXh0dXJlKTsKIAogICAgIC8vIEZJWE1FOiBEbyBhIHNpbmdsZSByZWFkYmFjayBmb3IgYm90aCB0
aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2FjaGUgdGhlIGZpbHRlcmVkIHJlc3VsdHMgKG9u
Y2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1c2VkKS4KQEAgLTUyNiwyMCArNTcxLDIzIEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3Qg
Q0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1CiAKICAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IGRl
dmljZUJhY2tncm91bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0
dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlclRleHR1cmUoZGV2aWNl
QmFja2dyb3VuZFRleHR1cmUuZ2V0KCksIGRldmljZVJlY3QpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgU2tCaXRtYXAgZmlsdGVyZWREZXZpY2VCYWNr
Z3JvdW5kID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmJhY2tncm91bmRGaWx0ZXJzKCksIGRl
dmljZUJhY2tncm91bmRUZXh0dXJlLmdldCgpKTsKICAgICBpZiAoIWZpbHRlcmVkRGV2aWNlQmFj
a2dyb3VuZC5nZXRUZXh0dXJlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBHclRleHR1cmUqIHRleHR1cmUgPSByZWludGVycHJldF9jYXN0PEdyVGV4
dHVyZSo+KGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZC5nZXRUZXh0dXJlKCkpOwogICAgIGludCBm
aWx0ZXJlZERldmljZUJhY2tncm91bmRUZXh0dXJlSWQgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlSGFu
ZGxlKCk7CiAKLSAgICBpZiAoIWRyYXdpbmdTdXJmYWNlLT5wcmVwYXJlQmFja2dyb3VuZFRleHR1
cmUodGhpcykpCi0gICAgICAgIHJldHVybjsKKyAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IGJh
Y2tncm91bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFu
YWdlci5nZXQoKSk7CisgICAgaWYgKCFiYWNrZ3JvdW5kVGV4dHVyZS0+cmVzZXJ2ZShxdWFkLT5x
dWFkUmVjdCgpLnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0IENDUmVuZGVyUGFzcyogdGFyZ2V0UmVuZGVyUGFzcyA9
IG1fY3VycmVudFJlbmRlclBhc3M7Ci0gICAgaWYgKHVzZU1hbmFnZWRUZXh0dXJlKGRyYXdpbmdT
dXJmYWNlLT5iYWNrZ3JvdW5kVGV4dHVyZSgpLCBxdWFkLT5xdWFkUmVjdCgpKSkgeworICAgIGJv
b2wgdXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSA9IHVzZU1hbmFnZWRUZXh0dXJlKGJhY2tncm91bmRU
ZXh0dXJlLmdldCgpLCBxdWFkLT5xdWFkUmVjdCgpKTsKKworICAgIGlmICh1c2luZ0JhY2tncm91
bmRUZXh0dXJlKSB7CiAgICAgICAgIC8vIENvcHkgdGhlIHJlYWRiYWNrIHBpeGVscyBmcm9tIGRl
dmljZSB0byB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGZvciB0aGUgc3VyZmFjZS4KICAgICAgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5zZm9ybTsKICAg
ICAgICAgZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5zZm9ybS50cmFuc2xhdGUocXVhZC0+cXVhZFJl
Y3QoKS53aWR0aCgpIC8gMi4wLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpIC8gMi4wKTsKQEAg
LTU0OSw0NiArNTk3LDQ1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dy
b3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1CiAgICAgICAgIGRldmlj
ZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0udHJhbnNsYXRlKGRldmljZVJlY3QueCgpLCBkZXZpY2VS
ZWN0LnkoKSk7CiAKICAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGZpbHRlcmVkRGV2
aWNlQmFja2dyb3VuZFRleHR1cmVJZCwgZGV2aWNlUmVjdC5zaXplKCksIGRldmljZVRvRnJhbWVi
dWZmZXJUcmFuc2Zvcm0pOwotCi0gICAgICAgIHVzZVJlbmRlclBhc3ModGFyZ2V0UmVuZGVyUGFz
cyk7CiAgICAgfQorCisgICAgdXNlUmVuZGVyUGFzcyh0YXJnZXRSZW5kZXJQYXNzKTsKKworICAg
IGlmICghdXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIGJhY2tncm91bmRUZXh0dXJlLnJlbGVhc2UoKTsKIH0KIAogdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBDQ1JlbmRlclBhc3NEcmF3
UXVhZCogcXVhZCkKIHsKLSAgICAvLyBUaGUgcmVwbGljYSBpcyBhbHdheXMgZHJhd24gZmlyc3Qs
IHNvIGZyZWUgYWZ0ZXIgZHJhd2luZyB0aGUgY29udGVudHMuCi0gICAgYm9vbCBzaG91bGRSZWxl
YXNlVGV4dHVyZXMgPSAhcXVhZC0+aXNSZXBsaWNhKCk7Ci0KLSAgICBDQ1JlbmRlclN1cmZhY2Uq
IGRyYXdpbmdTdXJmYWNlID0gcXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCk7Ci0K
ICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJUcmFuc2Zvcm0gPSBxdWFkLT5sYXll
clRyYW5zZm9ybSgpOwogICAgIC8vIEFwcGx5IGEgc2NhbGluZyBmYWN0b3IgdG8gc2l6ZSB0aGUg
cXVhZCBmcm9tIDF4MSB0byBpdHMgaW50ZW5kZWQgc2l6ZS4KICAgICByZW5kZXJUcmFuc2Zvcm0u
c2NhbGUzZChxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0
KCksIDEpOwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJhbnNm
b3JtID0gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgod2luZG93TWF0cml4KCkgKiBwcm9qZWN0aW9u
TWF0cml4KCkgKiByZW5kZXJUcmFuc2Zvcm0pLnRvMmRUcmFuc2Zvcm0oKTsKIAogICAgIC8vIENh
biBvbmx5IGRyYXcgc3VyZmFjZSBpZiBkZXZpY2UgbWF0cml4IGlzIGludmVydGlibGUuCi0gICAg
aWYgKCFjb250ZW50c0RldmljZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSB8fCAhZHJhd2luZ1N1
cmZhY2UtPmhhc1ZhbGlkQ29udGVudHNUZXh0dXJlKCkpIHsKLSAgICAgICAgaWYgKHNob3VsZFJl
bGVhc2VUZXh0dXJlcykgewotICAgICAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VCYWNr
Z3JvdW5kVGV4dHVyZSgpOwotICAgICAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VDb250
ZW50c1RleHR1cmUoKTsKLSAgICAgICAgfQorICAgIGlmICghY29udGVudHNEZXZpY2VUcmFuc2Zv
cm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBkcmF3QmFj
a2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pOworICAgIE1hbmFn
ZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocXVh
ZC0+cmVuZGVyUGFzcygpLT5pZCgpKTsKKyAgICBBU1NFUlQoY29udGVudHNUZXh0dXJlICYmIGNv
bnRlbnRzVGV4dHVyZS0+dGV4dHVyZUlkKCkpOworCisgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJl
PiBiYWNrZ3JvdW5kVGV4dHVyZSA9IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkLCBjb250ZW50
c0RldmljZVRyYW5zZm9ybSk7CiAKICAgICAvLyBGSVhNRTogQ2FjaGUgdGhpcyB2YWx1ZSBzbyB0
aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gaXQgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIGl0cyBy
ZXBsaWNhLgogICAgIC8vIEFwcGx5IGZpbHRlcnMgdG8gdGhlIGNvbnRlbnRzIHRleHR1cmUuCi0g
ICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmZpbHRl
cnMoKSwgZHJhd2luZ1N1cmZhY2UtPmNvbnRlbnRzVGV4dHVyZSgpKTsKLSAgICBpbnQgY29udGVu
dHNUZXh0dXJlSWQgPSBkcmF3aW5nU3VyZmFjZS0+Y29udGVudHNUZXh0dXJlKCktPnRleHR1cmVJ
ZCgpOworICAgIFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFwcGx5RmlsdGVycyh0aGlzLCBxdWFk
LT5maWx0ZXJzKCksIGNvbnRlbnRzVGV4dHVyZSk7CisgICAgaW50IGNvbnRlbnRzVGV4dHVyZUlk
ID0gY29udGVudHNUZXh0dXJlLT50ZXh0dXJlSWQoKTsKICAgICBpZiAoZmlsdGVyQml0bWFwLmdl
dFRleHR1cmUoKSkgewogICAgICAgICBHclRleHR1cmUqIHRleHR1cmUgPSByZWludGVycHJldF9j
YXN0PEdyVGV4dHVyZSo+KGZpbHRlckJpdG1hcC5nZXRUZXh0dXJlKCkpOwogICAgICAgICBjb250
ZW50c1RleHR1cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVIYW5kbGUoKTsKICAgICB9CiAKICAg
ICAvLyBEcmF3IHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgaWYgdGhlcmUgaXMgb25lLgotICAgIGlm
IChkcmF3aW5nU3VyZmFjZS0+aGFzVmFsaWRCYWNrZ3JvdW5kVGV4dHVyZSgpKQotICAgICAgICBj
b3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRUZXh0dXJl
KCktPnRleHR1cmVJZCgpLCBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgcXVhZC0+bGF5ZXJUcmFu
c2Zvcm0oKSk7CisgICAgaWYgKGJhY2tncm91bmRUZXh0dXJlKSB7CisgICAgICAgIEFTU0VSVChi
YWNrZ3JvdW5kVGV4dHVyZS0+c2l6ZSgpID09IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpKTsKKyAg
ICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGJhY2tncm91bmRUZXh0dXJlLT50ZXh0dXJl
SWQoKSwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQtPmxheWVyVHJhbnNmb3JtKCkpOwor
ICAgIH0KIAogICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOwogICAgIEZsb2F0UXVhZCBkZXZpY2VR
dWFkID0gQ0NNYXRoVXRpbDo6bWFwUXVhZChjb250ZW50c0RldmljZVRyYW5zZm9ybSwgc2hhcmVk
R2VvbWV0cnlRdWFkKCksIGNsaXBwZWQpOwpAQCAtNjcxLDExICs3MTgsNiBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0Ry
YXdRdWFkKiBxdWFkKQogCiAgICAgZHJhd1RleHR1cmVkUXVhZChxdWFkLT5sYXllclRyYW5zZm9y
bSgpLCBxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCks
IHF1YWQtPm9wYWNpdHkoKSwgc3VyZmFjZVF1YWQsCiAgICAgICAgICAgICAgICAgICAgICBzaGFk
ZXJNYXRyaXhMb2NhdGlvbiwgc2hhZGVyQWxwaGFMb2NhdGlvbiwgc2hhZGVyUXVhZExvY2F0aW9u
KTsKLQotICAgIGlmIChzaG91bGRSZWxlYXNlVGV4dHVyZXMpIHsKLSAgICAgICAgZHJhd2luZ1N1
cmZhY2UtPnJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpOwotICAgICAgICBkcmF3aW5nU3VyZmFj
ZS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOwotICAgIH0KIH0KIAogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVh
ZCogcXVhZCkKQEAgLTEwNzcsOSArMTExOSw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpmaW5pc2hEcmF3aW5nRnJhbWUoKQogewogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+
ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgR0xDKG1fY29u
dGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotCi0g
ICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7Ci0gICAgbV9p
bXBsVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxs
b2NhdG9yLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRvR0xNYXRy
aXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCkBA
IC0xMzM3LDEwICsxMzc2LDEwIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5k
ZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcykKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgaWYgKCFyZW5kZXJQYXNzLT50YXJnZXRTdXJmYWNlKCktPnByZXBh
cmVDb250ZW50c1RleHR1cmUodGhpcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNz
LT5pZCgpKTsKKyAgICBBU1NFUlQodGV4dHVyZSk7CiAKLSAgICByZXR1cm4gYmluZEZyYW1lYnVm
ZmVyVG9UZXh0dXJlKHJlbmRlclBhc3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJl
KCksIHJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpKTsKKyAgICByZXR1cm4gYmlu
ZEZyYW1lYnVmZmVyVG9UZXh0dXJlKHRleHR1cmUsIHJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0
cHV0UmVjdCgpKTsKIH0KIAogYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZU1hbmFnZWRU
ZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJl
Y3QpCkBAIC0xNDI5LDkgKzE0NjgsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5p
dGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5m
bHVzaCgpKTsKIAotICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNy
ZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlTWFu
YWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NhcGFiaWxpdGllcy5tYXhUZXh0
dXJlU2l6ZSk7CisgICAgbV9pbXBsVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksIHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCksIG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKICAgICBt
X3RleHR1cmVDb3BpZXIgPSBBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI6OmNyZWF0ZShtX2NvbnRl
eHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsKICAgICBpZiAobV90ZXh0dXJlVXBsb2FkZXJTZXR0
aW5nID09IFRocm90dGxlZFVwbG9hZGVyKQogICAgICAgICBtX3RleHR1cmVVcGxvYWRlciA9IFRo
cm90dGxlZFRleHR1cmVVcGxvYWRlcjo6Y3JlYXRlKG1fY29udGV4dCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDYyNWU4MmYwODhlMDcyMTUyZWVkYmNjNjQ4Y2JjODUy
OWVmYzVhMTguLmZlYzUwMWY5M2E2ZTViYmIyYzA1MDgyOTUyMTBiZDRiYjNlMzNhOGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC04MCw2ICs4MCw4IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBGbG9hdFF1YWQmIHNoYXJlZEdlb21ldHJ5UXVhZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hhcmVkR2VvbWV0cnlRdWFkOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlUmVuZGVy
UGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHVu
c2lnbmVkIGlkKSBjb25zdCBPVkVSUklERTsKKwogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkRyYXdp
bmdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3MqIGRlZmF1bHRSZW5kZXJQYXNzKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29u
c3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2hEcmF3aW5nRnJhbWUoKSBPVkVSUklERTsKQEAgLTEyMywxMyArMTI1LDE1
IEBAIHByb3RlY3RlZDoKICAgICBib29sIGlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7IH0KICAgICBib29sIGluaXRpYWxpemUo
KTsKIAorICAgIHZvaWQgcmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOworCiBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4Jik7CiAKICAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQq
KTsKICAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJh
d1F1YWQqKTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRl
ckRyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBk
ZXZpY2VUcmFuc2Zvcm0pOworICAgIFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IGRyYXdCYWNr
Z3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSk7CiAgICAgdm9pZCBkcmF3
UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqKTsKICAgICB2b2lkIGRy
YXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOwogICAgIHZvaWQg
ZHJhd1N0cmVhbVZpZGVvUXVhZChjb25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqKTsKQEAgLTE0
OSw4ICsxNTMsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjbGVhclJlbmRlclBhc3MoY29uc3Qg
Q0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpOwog
Ci0gICAgdm9pZCByZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCk7Ci0KICAgICBib29sIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogCiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOwpA
QCAtMjYzLDYgKzI2NSw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFRyYWNraW5nVGV4dHVyZUFs
bG9jYXRvcj4gbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3I7CiAgICAgT3duUHRyPFRyYWNraW5n
VGV4dHVyZUFsbG9jYXRvcj4gbV9pbXBsVGV4dHVyZUFsbG9jYXRvcjsKIAorICAgIEhhc2hNYXA8
dW5zaWduZWQsIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0dXJlczsK
KwogICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIAogICAgIGNv
bnN0IENDUmVuZGVyUGFzcyogbV9kZWZhdWx0UmVuZGVyUGFzczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggMTk1NzQzNzY1NTg2MGJjOTk1MWY0YTEwZWM0ZWVl
ZGIyMTA3MDM5MC4uNjNlODZhMWFiYzdkNWMwZDhlODZhYTBhNWJkNjc3MDRhYTNiOWFhMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTI5NSw3ICsyOTUsMTAg
QEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoRnJhbWVE
YXRhJiBmcmFtZSkKICAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZhY2VMYXllciA9ICgq
ZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdClbc3VyZmFjZUluZGV4XTsKICAgICAgICAgQ0NS
ZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxheWVyLT5yZW5kZXJT
dXJmYWNlKCk7CiAKLSAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVy
UGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UpOworICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlz
IGlkIGdsb2JhbCBhY3Jvc3MgYWxsIGNvbXBvc2l0b3JzIChpbmNsdWRlIGEgY29tcG9zaXRvciBp
ZD8pCisgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRlclBhc3M6OmNy
ZWF0ZShyZW5kZXJTdXJmYWNlLCByZW5kZXJTdXJmYWNlTGF5ZXItPmlkKCkpOworICAgICAgICBw
YXNzLT5zZXRDb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZShyZW5kZXJTdXJmYWNlLT5jb250
ZW50c0NoYW5nZWQoKSk7CisgICAgICAgIHBhc3MtPnNldEZyYW1lYnVmZmVyT3V0cHV0UmVjdChy
ZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpKTsKICAgICAgICAgc3VyZmFjZVBhc3NNYXAuYWRk
KHJlbmRlclN1cmZhY2UsIHBhc3MuZ2V0KCkpOwogICAgICAgICBmcmFtZS5yZW5kZXJQYXNzZXMu
YXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKICAgICB9CkBAIC0zNTEsNyArMzU0LDcgQEAgYm9vbCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoRnJhbWVEYXRhJiBmcmFt
ZSkKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKS5yZWNvcmRNZXRy
aWNzKHRoaXMpOwogCiAgICAgbV9sYXllclJlbmRlcmVyLT5kZWNpZGVSZW5kZXJQYXNzQWxsb2Nh
dGlvbnNGb3JGcmFtZShmcmFtZS5yZW5kZXJQYXNzZXMpOwotICAgIHJlbW92ZVBhc3Nlc1dpdGhD
YWNoZWRUZXh0dXJlcyhmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnNraXBwZWRQYXNzZXMpOwor
ICAgIHJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhmcmFtZS5yZW5kZXJQYXNzZXMsIGZy
YW1lLnNraXBwZWRQYXNzZXMsIG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAKICAgICByZXR1cm4g
ZHJhd0ZyYW1lOwogfQpAQCAtNDMxLDcgKzQzNCw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywK
ICAgICBza2lwcGVkUGFzc2VzLmFwcGVuZChyZW1vdmVkUGFzcy5yZWxlYXNlKCkpOwogfQogCi12
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhD
Q1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDUmVuZGVyUGFzc0xpc3QmIHNraXBwZWRQYXNzZXMp
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJl
cyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDUmVuZGVyUGFzc0xpc3QmIHNraXBwZWRQYXNz
ZXMsIGNvbnN0IENDUmVuZGVyZXIqIHJlbmRlcmVyKQogewogICAgIGZvciAoaW50IHBhc3NJbmRl
eCA9IHBhc3Nlcy5zaXplKCkgLSAxOyBwYXNzSW5kZXggPj0gMDsgLS1wYXNzSW5kZXgpIHsKICAg
ICAgICAgQ0NSZW5kZXJQYXNzKiBjdXJyZW50UGFzcyA9IHBhc3Nlc1twYXNzSW5kZXhdLmdldCgp
OwpAQCAtNDQ1LDE0ICs0NDgsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBh
c3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVu
ZGVyUGFzc1F1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRR
dWFkKTsKLSAgICAgICAgICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSA9IHJlbmRl
clBhc3NRdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKTsKKyAgICAgICAgICAgIGNv
bnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcyA9IHJlbmRlclBhc3NRdWFkLT5yZW5kZXJQYXNz
KCk7CiAKLSAgICAgICAgICAgIGlmICh0YXJnZXRTdXJmYWNlLT5jb250ZW50c0NoYW5nZWQoKSB8
fCAhdGFyZ2V0U3VyZmFjZS0+aGFzQ2FjaGVkQ29udGVudHNUZXh0dXJlKCkpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIFJlc2VydmUgdGhlIHRleHR1cmUgaW1t
ZWRpYXRlbHkuIFdlIGRvIG5vdCBuZWVkIHRvIHBhc3MgaW4gbGF5ZXIgcmVuZGVyZXIKLSAgICAg
ICAgICAgIC8vIHNpbmNlIHRoZSB0ZXh0dXJlIGFscmVhZHkgZXhpc3RzLCBqdXN0IG5lZWRzIHRv
IGJlIHJlc2VydmVkLgotICAgICAgICAgICAgaWYgKCF0YXJnZXRTdXJmYWNlLT5wcmVwYXJlQ29u
dGVudHNUZXh0dXJlKDApKQorICAgICAgICAgICAgaWYgKHJlbmRlclBhc3MtPmNvbnRlbnRzQ2hh
bmdlZFNpbmNlTGFzdEZyYW1lKCkgfHwgIXJlbmRlcmVyLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9y
UmVuZGVyUGFzc0lkKHJlbmRlclBhc3MtPmlkKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICAvLyBXZSBhcmUgY2hhbmdpbmcgdGhlIHZlY3RvciBpbiB0aGUgbWlk
ZGxlIG9mIHJldmVyc2UgaXRlcmF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oCmluZGV4IDlkOGZiM2M0NTc1YWVjYWM3YWFmOGNkMDBkOGZhOTZkN2YxYWIwOTIuLjk2N2Rm
ODFhNGQxZThjMTJiZDhmYjgxMDkyMjVjMjEwMGZkOGVmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgQ0NEZWJ1
Z1JlY3RIaXN0b3J5KiBkZWJ1Z1JlY3RIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z1Jl
Y3RIaXN0b3J5LmdldCgpOyB9CiAKICAgICAvLyBSZW1vdmVzIGFsbCByZW5kZXIgcGFzc2VzIGZv
ciB3aGljaCB3ZSBoYXZlIGNhY2hlZCB0ZXh0dXJlcywgYW5kIHdoaWNoIGRpZCBub3QgY2hhbmdl
IHRoZWlyIGNvbnRlbnQuCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRl
eHR1cmVzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBl
ZFBhc3Nlcyk7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVz
KENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3Nl
cywgY29uc3QgQ0NSZW5kZXJlciopOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0
SW1wbChjb25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVu
dCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggMjhhY2RkN2M5YjQ3YmRmYjdmMmI4
NWY1ZTkxOThiOGZlODdlN2UzMy4uYWY1YWJiYTU3M2E1MTA1Y2YxOGM2YmJkMjM1OWVjOGM1OWFh
ZGZjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0zNywxNyArMzcsMTkgQEAgdXNp
bmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1QYXNzT3duUHRyPENDUmVuZGVyUGFzcz4gQ0NSZW5kZXJQYXNzOjpjcmVhdGUoQ0NSZW5k
ZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQorUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IENDUmVu
ZGVyUGFzczo6Y3JlYXRlKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgdW5zaWduZWQg
aWQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclBhc3ModGFyZ2V0U3VyZmFj
ZSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzKHRhcmdldFN1cmZhY2Us
IGlkKSk7CiB9CiAKLUNDUmVuZGVyUGFzczo6Q0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSog
dGFyZ2V0U3VyZmFjZSkKLSAgICA6IG1fdGFyZ2V0U3VyZmFjZSh0YXJnZXRTdXJmYWNlKQotICAg
ICwgbV9mcmFtZWJ1ZmZlck91dHB1dFJlY3QodGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3QoKSkK
K0NDUmVuZGVyUGFzczo6Q0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFj
ZSwgdW5zaWduZWQgaWQpCisgICAgOiBtX2lkKGlkKQorICAgICwgbV90YXJnZXRTdXJmYWNlKHRh
cmdldFN1cmZhY2UpCisgICAgLCBtX2NvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKHRydWUp
CiAgICAgLCBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCh0cnVlKQogewotICAgIEFTU0VSVCht
X3RhcmdldFN1cmZhY2UpOworICAgIEFTU0VSVCh0YXJnZXRTdXJmYWNlKTsKKyAgICBBU1NFUlQo
aWQpOwogfQogCiB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVy
SW1wbCogbGF5ZXIsIENDT2NjbHVzaW9uVHJhY2tlckltcGwqIG9jY2x1c2lvblRyYWNrZXIsIGJv
b2wmIGhhZE1pc3NpbmdUaWxlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggZGVlNTViZjdm
NmNmZWYxOTI0YmNhYjUzY2RlZWVlMTlkNjllMjhhYy4uNDVmMmE5ZjJmYzM3ZGNlOThmZmUyMDFl
ODYxYzM5ZWQyM2QxOTE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTUzLDI0ICs1Mywz
MyBAQCBwdWJsaWM6CiBjbGFzcyBDQ1JlbmRlclBhc3MgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENDUmVuZGVyUGFzcyk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5k
ZXJQYXNzPiBjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiwgdW5zaWduZWQgaWQpOwogCiAg
ICAgdm9pZCBhcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5ZXJJbXBsKiwgQ0NPY2NsdXNpb25UcmFj
a2VySW1wbCosIGJvb2wmIGhhZE1pc3NpbmdUaWxlcyk7CiAgICAgdm9pZCBhcHBlbmRRdWFkc0Zv
clJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCosIGNvbnN0IENDUmVuZGVyUGFzcyogY29u
dHJpYnV0aW5nUmVuZGVyUGFzcywgQ0NPY2NsdXNpb25UcmFja2VySW1wbCopOwogICAgIHZvaWQg
YXBwZW5kUXVhZHNUb0ZpbGxTY3JlZW4oQ0NMYXllckltcGwqIHJvb3RMYXllciwgU2tDb2xvciBz
Y3JlZW5CYWNrZ3JvdW5kQ29sb3IsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlckltcGwmKTsKIAog
ICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9xdWFkTGlz
dDsgfQorCisgICAgdW5zaWduZWQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgQ0NS
ZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRTdXJm
YWNlOyB9CisKKyAgICBib29sIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZTsgfQorICAgIHZvaWQgc2V0
Q29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUoYm9vbCBjaGFuZ2VkKSB7IG1fY29udGVudHND
aGFuZ2VkU2luY2VMYXN0RnJhbWUgPSBjaGFuZ2VkOyB9CisKICAgICAvLyBUaGlzIGRlbm90ZXMg
dGhlIGJvdW5kcyBpbiBwaHlzaWNhbCBwaXhlbHMgb2YgdGhlIG91dHB1dCBnZW5lcmF0ZWQgYnkg
dGhpcyBSZW5kZXJQYXNzLgogICAgIGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyT3V0cHV0UmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVidWZmZXJPdXRwdXRSZWN0OyB9CisgICAgdm9pZCBz
ZXRGcmFtZWJ1ZmZlck91dHB1dFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgeyBtX2ZyYW1lYnVm
ZmVyT3V0cHV0UmVjdCA9IHJlY3Q7IH0KIAogICAgIGJvb2wgaGFzVHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUcmFuc3BhcmVudEJhY2tncm91bmQ7IH0KICAgICB2
b2lkIHNldEhhc1RyYW5zcGFyZW50QmFja2dyb3VuZChib29sIHRyYW5zcGFyZW50KSB7IG1faGFz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kID0gdHJhbnNwYXJlbnQ7IH0KIAogcHJvdGVjdGVkOgotICAg
IGV4cGxpY2l0IENDUmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZhY2UqKTsKKyAgICBDQ1JlbmRlclBh
c3MoQ0NSZW5kZXJTdXJmYWNlKiwgdW5zaWduZWQgaWQpOwogCisgICAgdW5zaWduZWQgbV9pZDsK
ICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fdGFyZ2V0U3VyZmFjZTsKKyAgICBib29sIG1fY29udGVu
dHNDaGFuZ2VkU2luY2VMYXN0RnJhbWU7CiAgICAgQ0NRdWFkTGlzdCBtX3F1YWRMaXN0OwogICAg
IEludFJlY3QgbV9mcmFtZWJ1ZmZlck91dHB1dFJlY3Q7CiAgICAgVmVjdG9yPE93blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gPiBtX3NoYXJlZFF1YWRTdGF0ZUxpc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJTdXJmYWNlLmNwcAppbmRleCBkMDk0MDFjNGYyM2UwOWU1MTJlNjI0OTk4NGJlNGNkZThhOTRh
MmExLi5iMzMxYjIzMDA0MTcyNjc1M2QzNGQ0NTcyNWRlY2YwNDExNTkyZjA3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0j
aW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5j
bHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRy
YXdRdWFkLmgiCkBAIC04NSw3NSArODQsNiBAQCBGbG9hdFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpk
cmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKICAgICByZXR1cm4gZHJhd2FibGVDb250ZW50UmVj
dDsKIH0KIAotYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVDb250ZW50c1RleHR1cmUoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIC8vIEZJWE1FOiBUaGlz
IG1ldGhvZCBzaG91bGQgYmUgc2VwYXJhdGVkIGludG8gdHdvOiBvbmUgdG8gcmVzZXJ2ZSBhbgot
ICAgIC8vIGV4aXN0aW5nIHN1cmZhY2UsIGFuZCBvbmUgdG8gY3JlYXRlIGEgbmV3IG9uZS4gVGhh
dCB3YXkgd2Ugd2lsbCBub3QKLSAgICAvLyBuZWVkIHRvIHBhc3MgbnVsbCBsYXllclJlbmRlcmVy
LgotICAgIGlmIChsYXllclJlbmRlcmVyKSB7Ci0gICAgICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0
dXJlTWFuYWdlciA9IGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlTWFuYWdlcigpOwotCi0gICAg
ICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAgICAgICBtX2NvbnRlbnRzVGV4dHVy
ZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUodGV4dHVyZU1hbmFnZXIpOwotICAgIH0KLQotICAg
IGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUobV9jb250ZW50UmVjdC5zaXpl
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQ29udGVu
dHNUZXh0dXJlKCkKLXsKLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFtX2NvbnRlbnRz
VGV4dHVyZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZW50c1Rl
eHR1cmUtPnVucmVzZXJ2ZSgpOwotfQotCi1ib29sIENDUmVuZGVyU3VyZmFjZTo6aGFzVmFsaWRD
b250ZW50c1RleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAm
JiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpICYmIG1fY29udGVudHNUZXh0dXJlLT5p
c1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Ci19
Ci0KLWJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNDYWNoZWRDb250ZW50c1RleHR1cmUoKSBjb25z
dAotewotICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+
aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpOwot
fQotCi1ib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKLXsKLSAgICBUZXh0dXJlTWFuYWdlciog
dGV4dHVyZU1hbmFnZXIgPSBsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFnZXIoKTsKLQot
ICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZSkKLSAgICAgICAgbV9iYWNrZ3JvdW5kVGV4dHVy
ZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUodGV4dHVyZU1hbmFnZXIpOwotCi0gICAgaWYgKG1f
YmFja2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUtPnJlc2VydmUobV9jb250ZW50UmVjdC5zaXpl
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQmFja2dy
b3VuZFRleHR1cmUoKQotewotICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZSB8fCAhbV9iYWNr
Z3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9iYWNr
Z3JvdW5kVGV4dHVyZS0+dW5yZXNlcnZlKCk7Ci19Ci0KLWJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpo
YXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNrZ3Jv
dW5kVGV4dHVyZSAmJiBtX2JhY2tncm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9iYWNr
Z3JvdW5kVGV4dHVyZS0+aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpOwotfQotCiBTdHJpbmcgQ0NSZW5kZXJTdXJmYWNlOjpuYW1lKCkgY29uc3QK
IHsKICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlJlbmRlclN1cmZhY2UoaWQ9JWksb3duZXI9
JXMpIiwgbV9vd25pbmdMYXllci0+aWQoKSwgbV9vd25pbmdMYXllci0+ZGVidWdOYW1lKCkudXRm
OCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDAyOWUxZjYwNDQx
NGNjZmViMTMwNThlZjRhYWM4MTM3OWY5NTA4ZjQuLjg5NGVhNWFlYTJlZmFlZTZiY2YwMTViMzgw
ZTAzMTIyMzM0YTlkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC0zMSw3ICsz
MSw2IEBACiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3Bl
cmF0aW9ucy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNDUsNyArNDQsNiBAQCBjbGFzcyBDQ1Jl
bmRlclBhc3M7CiBjbGFzcyBDQ1NoYXJlZFF1YWRTdGF0ZTsKIGNsYXNzIENDTGF5ZXJJbXBsOwog
Y2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7CiBjbGFz
cyBUZXh0U3RyZWFtOwogCiBjbGFzcyBDQ1JlbmRlclN1cmZhY2UgewpAQCAtNTQsMTUgKzUyLDYg
QEAgcHVibGljOgogICAgIGV4cGxpY2l0IENDUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCopOwog
ICAgIHZpcnR1YWwgfkNDUmVuZGVyU3VyZmFjZSgpOwogCi0gICAgdmlydHVhbCBib29sIHByZXBh
cmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7Ci0gICAgdm9pZCByZWxl
YXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgYm9vbCBoYXNWYWxpZENvbnRlbnRzVGV4dHVyZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNDYWNoZWRDb250ZW50c1RleHR1cmUoKSBjb25z
dDsKLQotICAgIGJvb2wgcHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJv
bWl1bSopOwotICAgIHZvaWQgcmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7Ci0gICAgYm9vbCBo
YXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkgY29uc3Q7Ci0KICAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0
OwogCkBAIC0xMTYsNyArMTA1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Npc3NvclJlY3Qo
Y29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0
OyB9CiAgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Nj
aXNzb3JSZWN0OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgY29udGVudHNDaGFuZ2VkKCkgY29uc3Q7
CisgICAgYm9vbCBjb250ZW50c0NoYW5nZWQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0Q29udGVu
dFJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQpAQCAtMTI0LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCkgeyBtX2xheWVyTGlzdC5jbGVhcigpOyB9CiAg
ICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCgpIHsgcmV0dXJuIG1fbGF5ZXJMaXN0
OyB9CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KLSAgICBNYW5hZ2VkVGV4dHVyZSogYmFja2dy
b3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRUZXh0dXJlLmdldCgpOyB9
Ci0KICAgICBpbnQgb3duaW5nTGF5ZXJJZCgpIGNvbnN0OwogICAgIENDUmVuZGVyU3VyZmFjZSog
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0OwogCkBAIC0xNTUsOSArMTQxLDYgQEAgcHJpdmF0
ZToKICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAgICAgYm9vbCBtX3N1cmZhY2VQcm9wZXJ0
eUNoYW5nZWQ7CiAKLSAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fY29udGVudHNUZXh0dXJl
OwotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9iYWNrZ3JvdW5kVGV4dHVyZTsKLQogICAg
IGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9vbCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7
CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlcmVyLmgKaW5kZXggYWJhZDAyYmI3ZDlkN2FkNTdkM2FkMzRmNzU0MzVjNDU4N2Nl
ZDM3Ny4uYzM4OWU5YzY1OTU5MTljMjM4YjAzNjlkZWFjZWE2OTFiNjI2NTQ1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyZXIuaApAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgd2luZG93TWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV93
aW5kb3dNYXRyaXg7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVSZW5kZXJQYXNzQWxsb2Nh
dGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHVuc2lnbmVkKSBjb25zdCA9
IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoY29uc3QgQ0NSZW5kZXJQ
YXNzKiBkZWZhdWx0UmVuZGVyUGFzcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVy
UGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVj
dEluQ3VycmVudFBhc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1l
KCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCAzNzMxODA4Y2I1
ZGEyOWI0MzA5YmQ4ZWQ1NGMzZTkyZTQ3YWYxNjc4Li41NjRlMzY5NmJlMTU1MmVmNGY0YjQ1ZDA1
NGFlYWQzZmFhNTY0NDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTa0NvbG9yLmgiCiAjaW5jbHVk
ZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgImNjL0NDQ2hlY2tlcmJvYXJkRHJhd1F1YWQuaCIK
QEAgLTIyMCw3ICsyMjEsNyBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OnNldFRpbGluZ0RhdGEo
Y29uc3QgQ0NMYXllclRpbGluZ0RhdGEmIHRpbGVyKQogICAgICptX3RpbGVyID0gdGlsZXI7CiB9
CiAKLXZvaWQgQ0NUaWxlZExheWVySW1wbDo6cHVzaFRpbGVQcm9wZXJ0aWVzKGludCBpLCBpbnQg
aiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIG9wYXF1ZVJlY3Qp
Cit2b2lkIENDVGlsZWRMYXllckltcGw6OnB1c2hUaWxlUHJvcGVydGllcyhpbnQgaSwgaW50IGos
IHVuc2lnbmVkIHRleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgb3BhcXVlUmVjdCkKIHsKICAgICBE
cmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CiAgICAgaWYgKCF0aWxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IDEzMWEzMmZjZWZhYzFiMTgxNTUxZjA0MTA1ZjIz
OGVhMGUwNzdmZDYuLjRjODJjZGM4Y2FmN2U3MWI5Njk3MTZjNGFmNWUxOTZjMjc5MTA0ODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lwc0RyYXcgPSBz
a2lwc0RyYXc7IH0KICAgICB2b2lkIHNldFRpbGluZ0RhdGEoY29uc3QgQ0NMYXllclRpbGluZ0Rh
dGEmIHRpbGVyKTsKLSAgICB2b2lkIHB1c2hUaWxlUHJvcGVydGllcyhpbnQsIGludCwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIG9wYXF1ZVJlY3QpOworICAgIHZv
aWQgcHVzaFRpbGVQcm9wZXJ0aWVzKGludCwgaW50LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0
IEludFJlY3QmIG9wYXF1ZVJlY3QpOwogCiAgICAgdm9pZCBzZXRDb250ZW50c1N3aXp6bGVkKGJv
b2wgY29udGVudHNTd2l6emxlZCkgeyBtX2NvbnRlbnRzU3dpenpsZWQgPSBjb250ZW50c1N3aXp6
bGVkOyB9CiAgICAgYm9vbCBjb250ZW50c1N3aXp6bGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50c1N3aXp6bGVkOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDRmYTE2NWNlNDVhZmRlNWViMzdl
OWU5ODlmOTQzZmMzZTc3MGVkY2UuLjY4YjI0MzdjMTI1ZTQ4MmU5NjdiNTU0ZDg2Njg5NjM5OWJh
YWUzOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xMjcsMTEgKzEyNywxMSBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoY29uc3QgSW50U2l6ZSYgY29u
dGVudFNpemUpCiAgICAgewotICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDApOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUp
OwogICAgICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAgICAg
ICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnRlbnRTaXplKTsKLSAgICAgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiBjb250ZW50cyA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAg
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudHMgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIp
OwogICAgICAgICBjb250ZW50cy0+c2V0RHJhd3NDb250ZW50KHRydWUpOwogICAgICAgICBjb250
ZW50cy0+c2V0Qm91bmRzKGNvbnRlbnRTaXplKTsKICAgICAgICAgY29udGVudHMtPnNldENvbnRl
bnRCb3VuZHMoY29udGVudFNpemUpOwpAQCAtMTg2LDEyICsxODYsMTIgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YU5vTGF5ZXJzKQogVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YVRyZWVCdXROb0NoYW5nZXMpCiB7CiAgICAgewot
ICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDAp
OwotICAgICAgICByb290LT5hZGRDaGlsZChDQ0xheWVySW1wbDo6Y3JlYXRlKDEpKTsKKyAgICAg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAg
ICAgICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSgyKSk7Ci0gICAgICAgIHJv
b3QtPmNoaWxkcmVuKClbMV0tPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUoMykpOworICAg
ICAgICByb290LT5hZGRDaGlsZChDQ0xheWVySW1wbDo6Y3JlYXRlKDMpKTsKICAgICAgICAgcm9v
dC0+Y2hpbGRyZW4oKVsxXS0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSg0KSk7Ci0gICAg
ICAgIHJvb3QtPmNoaWxkcmVuKClbMV0tPmNoaWxkcmVuKClbMF0tPmFkZENoaWxkKENDTGF5ZXJJ
bXBsOjpjcmVhdGUoNSkpOworICAgICAgICByb290LT5jaGlsZHJlbigpWzFdLT5hZGRDaGlsZChD
Q0xheWVySW1wbDo6Y3JlYXRlKDUpKTsKKyAgICAgICAgcm9vdC0+Y2hpbGRyZW4oKVsxXS0+Y2hp
bGRyZW4oKVswXS0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSg2KSk7CiAgICAgICAgIG1f
aG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CiAgICAgfQogICAgIENDTGF5
ZXJJbXBsKiByb290ID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCk7CkBAIC0yMTQsNyArMjE0LDcg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YVJlcGVhdGVkU2Ny
b2xscykKICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigyMCwgMzApOwogICAgIEludFNpemUg
c2Nyb2xsRGVsdGEoMTEsIC0xNSk7CiAgICAgewotICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEwKTsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICAgICAgcm9vdC0+c2V0U2Ny
b2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwogICAgICAgICByb290LT5zZXRTY3JvbGxhYmxl
KHRydWUpOwogICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwg
MTAwKSk7CkBAIC0yNjMsNyArMjYzLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxXaXRob3V0Um9vdExheWVyKQogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHJlcGxhY2VUcmVlV2hpbGVTY3JvbGxpbmcpCiB7Ci0gICAgY29uc3QgaW50IHNjcm9sbExh
eWVySWQgPSAwOworICAgIGNvbnN0IGludCBzY3JvbGxMYXllcklkID0gMTsKIAogICAgIHNldHVw
U2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOwpAQCAtNjI1LDggKzYyNSwxMCBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIHNldENvbnRlbnRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsK
ICAgICAgICAgc2V0RHJhd3NDb250ZW50KHRydWUpOwogICAgICAgICBzZXRTa2lwc0RyYXcoZmFs
c2UpOworICAgICAgICBzZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAsIDEwKSk7
CiAKICAgICAgICAgT3duUHRyPENDTGF5ZXJUaWxpbmdEYXRhPiB0aWxlciA9IENDTGF5ZXJUaWxp
bmdEYXRhOjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEwMCksIENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNC
b3JkZXJUZXhlbHMpOworICAgICAgICB0aWxlci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMoKSk7
CiAgICAgICAgIHNldFRpbGluZ0RhdGEoKnRpbGVyLmdldCgpKTsKICAgICB9CiAKQEAgLTYzOSwx
MSArNjQxLDExIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZGlkRHJhd05vdENh
bGxlZE9uSGlkZGVuTGF5ZXIpCiB7CiAgICAgLy8gVGhlIHJvb3QgbGF5ZXIgaXMgYWx3YXlzIGRy
YXduLCBzbyBydW4gdGhpcyB0ZXN0IG9uIGEgY2hpbGQgbGF5ZXIgdGhhdAogICAgIC8vIHdpbGwg
YmUgbWFza2VkIG91dCBieSB0aGUgcm9vdCBsYXllcidzIGJvdW5kcy4KLSAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwogICAgIERp
ZERyYXdDaGVja0xheWVyKiByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPiht
X2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7CiAgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5kcyh0cnVl
KTsKIAotICAgIHJvb3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwor
ICAgIHJvb3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMikpOwogICAgIERp
ZERyYXdDaGVja0xheWVyKiBsYXllciA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVja0xheWVyKj4o
cm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAgICAgLy8gRW5zdXJlIHZpc2libGVMYXllclJl
Y3QgZm9yIGxheWVyIGlzIGVtcHR5CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
MTAwLCAxMDApKTsKQEAgLTY4NiwxMyArNjg4LDEzIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgd2lsbERyYXdOb3RDYWxsZWRPbk9jY2x1ZGVkTGF5ZXIpCiAgICAgSW50U2l6ZSBi
aWdTaXplKDEwMDAsIDEwMDApOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShiaWdT
aXplKTsKIAotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6
Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5
ZXI6OmNyZWF0ZSgxKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2Fz
dDxEaWREcmF3Q2hlY2tMYXllcio+KG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKIAotICAgIHJv
b3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOworICAgIHJvb3QtPmFk
ZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMikpOwogICAgIERpZERyYXdDaGVja0xh
eWVyKiBvY2NsdWRlZExheWVyID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihyb290
LT5jaGlsZHJlbigpWzBdLmdldCgpKTsKIAotICAgIHJvb3QtPmFkZENoaWxkKERpZERyYXdDaGVj
a0xheWVyOjpjcmVhdGUoMikpOworICAgIHJvb3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVy
OjpjcmVhdGUoMykpOwogICAgIERpZERyYXdDaGVja0xheWVyKiB0b3BMYXllciA9IHN0YXRpY19j
YXN0PERpZERyYXdDaGVja0xheWVyKj4ocm9vdC0+Y2hpbGRyZW4oKVsxXS5nZXQoKSk7CiAgICAg
Ly8gVGhpcyBsYXllciBjb3ZlcnMgdGhlIG9jY2x1ZGVkTGF5ZXIgYWJvdmUuIE1ha2UgdGhpcyBs
YXllciBsYXJnZSBzbyBpdCBjYW4gb2NjbHVkZS4KICAgICB0b3BMYXllci0+c2V0Qm91bmRzKGJp
Z1NpemUpOwpAQCAtNzE4LDEzICs3MjAsMTMgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCB3aWxsRHJhd05vdENhbGxlZE9uT2NjbHVkZWRMYXllcikKIAogVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBkaWREcmF3Q2FsbGVkT25BbGxMYXllcnMpCiB7Ci0gICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMCkpOworICAgIG1f
aG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKICAg
ICBEaWREcmF3Q2hlY2tMYXllciogcm9vdCA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVja0xheWVy
Kj4obV9ob3N0SW1wbC0+cm9vdExheWVyKCkpOwogCi0gICAgcm9vdC0+YWRkQ2hpbGQoRGlkRHJh
d0NoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoRGlkRHJhd0NoZWNr
TGF5ZXI6OmNyZWF0ZSgyKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIGxheWVyMSA9IHN0YXRp
Y19jYXN0PERpZERyYXdDaGVja0xheWVyKj4ocm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAK
LSAgICBsYXllcjEtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMikpOworICAg
IGxheWVyMS0+YWRkQ2hpbGQoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgzKSk7CiAgICAgRGlk
RHJhd0NoZWNrTGF5ZXIqIGxheWVyMiA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVja0xheWVyKj4o
bGF5ZXIxLT5jaGlsZHJlbigpWzBdLmdldCgpKTsKIAogICAgIGxheWVyMS0+c2V0T3BhY2l0eSgw
LjNmKTsKQEAgLTc2OSw5ICs3NzEsOSBAQCBwcml2YXRlOgogVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBwcmVwYXJlVG9EcmF3RmFpbHNXaGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJib2Fy
ZCkKIHsKICAgICAvLyBXaGVuIHRoZSB0ZXh0dXJlIGlzIG5vdCBtaXNzaW5nLCB3ZSBkcmF3IGFz
IHVzdWFsLgotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6
Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5
ZXI6OmNyZWF0ZSgxKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2Fz
dDxEaWREcmF3Q2hlY2tMYXllcio+KG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKLSAgICByb290
LT5hZGRDaGlsZChNaXNzaW5nVGV4dHVyZUFuaW1hdGluZ0xheWVyOjpjcmVhdGUoMSwgZmFsc2Us
IGZhbHNlLCB0cnVlKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRp
bmdMYXllcjo6Y3JlYXRlKDIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpOwogCiAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOwogCkBAIC03ODAsMjcgKzc4MiwyNyBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1doZW5BbmltYXRp
b25Vc2VzQ2hlY2tlcmJvYXJkKQogICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJh
bWUpOwogCiAgICAgLy8gV2hlbiBhIHRleHR1cmUgaXMgbWlzc2luZyBhbmQgd2UncmUgbm90IGFu
aW1hdGluZywgd2UgZHJhdyBhcyB1c3VhbCB3aXRoIGNoZWNrZXJib2FyZGluZy4KLSAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwog
ICAgIHJvb3QgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KG1faG9zdEltcGwtPnJv
b3RMYXllcigpKTsKLSAgICByb290LT5hZGRDaGlsZChNaXNzaW5nVGV4dHVyZUFuaW1hdGluZ0xh
eWVyOjpjcmVhdGUoMSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
TWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDIsIHRydWUsIGZhbHNlLCBmYWxz
ZSkpOwogCiAgICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkp
OwogICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgIG1faG9zdEltcGwtPmRp
ZERyYXdBbGxMYXllcnMoZnJhbWUpOwogCiAgICAgLy8gV2hlbiBhIHRleHR1cmUgaXMgbWlzc2lu
ZyBhbmQgd2UncmUgYW5pbWF0aW5nLCB3ZSBkb24ndCB3YW50IHRvIGRyYXcgYW55dGhpbmcuCi0g
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMCkp
OworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRl
KDEpKTsKICAgICByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJ
bXBsLT5yb290TGF5ZXIoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmlt
YXRpbmdMYXllcjo6Y3JlYXRlKDEsIHRydWUsIGZhbHNlLCB0cnVlKSk7CisgICAgcm9vdC0+YWRk
Q2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDIsIHRydWUsIGZhbHNl
LCB0cnVlKSk7CiAKICAgICBFWFBFQ1RfRkFMU0UobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhm
cmFtZSkpOwogICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgIG1faG9zdElt
cGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwogCiAgICAgLy8gV2hlbiB0aGUgbGF5ZXIgc2tp
cHMgZHJhdyBhbmQgd2UncmUgYW5pbWF0aW5nLCB3ZSBzdGlsbCBkcmF3IHRoZSBmcmFtZS4KLSAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUo
MSkpOwogICAgIHJvb3QgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KG1faG9zdElt
cGwtPnJvb3RMYXllcigpKTsKLSAgICByb290LT5hZGRDaGlsZChNaXNzaW5nVGV4dHVyZUFuaW1h
dGluZ0xheWVyOjpjcmVhdGUoMSwgZmFsc2UsIHRydWUsIHRydWUpKTsKKyAgICByb290LT5hZGRD
aGlsZChNaXNzaW5nVGV4dHVyZUFuaW1hdGluZ0xheWVyOjpjcmVhdGUoMiwgZmFsc2UsIHRydWUs
IHRydWUpKTsKIAogICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJh
bWUpKTsKICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKQEAgLTgwOSw3ICs4MTEs
NyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1do
ZW5BbmltYXRpb25Vc2VzQ2hlY2tlcmJvYXJkKQogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHNjcm9sbFJvb3RJZ25vcmVkKQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNl
KTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CkBAIC04MzMsNyArODM1LDcgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxOb25Db21wb3NpdGVkUm9vdCkK
ICAgICBjb250ZW50TGF5ZXItPnNldEJvdW5kcyhzdXJmYWNlU2l6ZSk7CiAgICAgY29udGVudExh
eWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoc3VyZmFjZVNpemUud2lkdGgoKSAqIDIsIHN1
cmZhY2VTaXplLmhlaWdodCgpICogMikpOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3Jv
bGxMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBzY3JvbGxMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CiAgICAgc2Nyb2xsTGF5ZXIt
PnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgc2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0
aW9uKHN1cmZhY2VTaXplKTsKICAgICBzY3JvbGxMYXllci0+YWRkQ2hpbGQoY29udGVudExheWVy
LnJlbGVhc2UoKSk7CkBAIC04NTIsOCArODU0LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzY3JvbGxOb25Db21wb3NpdGVkUm9vdCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykKIHsKICAgICBJbnRTaXpl
IHN1cmZhY2VTaXplKDEwLCAxMCk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxl
TGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIHJvb3QtPmFkZENo
aWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6
ZSkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CiAgICAg
bV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKICAgICBpbml0aWFsaXpl
TGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwpAQCAtODY4LDggKzg3MCw4IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykK
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hpbGQpCiB7CiAg
ICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBy
b290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1LCA1KSwg
c3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNl
KCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAgICAg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKQEAgLTg4Myw4ICs4ODUsOCBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0NoaWxkKQogVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNrZmFjaW5nQ2hpbGQp
CiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xs
YWJsZUxheWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKICAgICBtX2hvc3RJ
bXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwogCiAgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4OwpAQCAtOTA2LDExICs5MDgsMTEgQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNrZmFjaW5nQ2hpbGQpCiBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJsb2NrZWRCeUNvbnRlbnRMYXllcikKIHsKICAgICBJ
bnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjb250
ZW50TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudExheWVyID0gY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKICAgICBj
b250ZW50TGF5ZXItPnNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZCh0cnVlKTsKICAgICBjb250
ZW50TGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBzY3JvbGxMYXllciA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUp
LCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IGNy
ZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CiAg
ICAgc2Nyb2xsTGF5ZXItPmFkZENoaWxkKGNvbnRlbnRMYXllci5yZWxlYXNlKCkpOwogCiAgICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9sbExheWVyLnJlbGVhc2UoKSk7CkBAIC05MjUs
NyArOTI3LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5k
Q2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUo
MTAsIDEwKTsKICAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOwotICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJm
YWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJs
ZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKICAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdw
b3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3
RnJhbWUoKTsKQEAgLTk0Myw3ICs5NDUsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCiAgICAgLy8gVGhl
IHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgogICAgIGV4cGVjdGVkU2Ny
b2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNl
dD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBl
eHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMCwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7
CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIG1faG9zdEltcGwtPnJvb3RM
YXllcigpLT5pZCgpLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKIAogICAgIC8vIFRoZSBzY3JvbGwg
cmFuZ2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9s
bCk7CkBAIC05NTYsNyArOTU4LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFkKQogewogICAgIEludFNpemUg
c3VyZmFjZVNpemUoMTAsIDEwKTsKICAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOwotICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3Jl
YXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKICAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0UGFn
ZVNjYWxlRmFjdG9yQW5kTGltaXRzKDEsIDEsIHBhZ2VTY2FsZSk7CkBAIC05NzYsNyArOTc4LDcg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFn
ZVNjYWxlT25JbXBsVGhyZWFkKQogCiAgICAgLy8gVGhlIHNjcm9sbCBkZWx0YSBpcyBub3Qgc2Nh
bGVkIGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIGRpZCBub3Qgc2NhbGUuCiAgICAgT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xs
RGVsdGFzKCk7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDAsIGV4cGVj
dGVkU2Nyb2xsRGVsdGEpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBt
X2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+aWQoKSwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CiAKICAg
ICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBhbHNvIGhhdmUgYmVlbiB1cGRhdGVkLgogICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRpb24oKSwg
ZXhwZWN0ZWRNYXhTY3JvbGwpOwpAQCAtOTg4LDEwICs5OTAsMTEgQEAgVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFk
KQogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBh
Z2VTY2FsZU9uTWFpblRocmVhZCkKIHsKICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7
Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwog
ICAgIC8vIEFsc28gbWFyayB0aGUgcm9vdCBzY3JvbGxhYmxlIHNvIGl0IGJlY29tZXMgdGhlIHJv
b3Qgc2Nyb2xsIGxheWVyLgogICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7Ci0gICAgcm9v
dC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1
cmZhY2VTaXplKSk7CisgICAgaW50IHNjcm9sbExheWVySWQgPSAyOworICAgIHJvb3QtPmFkZENo
aWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcihzY3JvbGxMYXllcklkLCBGbG9hdFBvaW50KDUsIDUp
LCBzdXJmYWNlU2l6ZSkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVh
c2UoKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKICAg
ICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwpAQCAtMTAxMSw3ICsxMDE0
LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5n
ZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKICAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRv
IHRoZSBzY3JvbGwgZGVsdGEuCiAgICAgZXhwZWN0ZWRTY3JvbGxEZWx0YS5zY2FsZShwYWdlU2Nh
bGUpOwogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0
SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJ
bmZvLmdldCgpLCAxLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKKyAgICBleHBlY3RDb250YWlucygq
c2Nyb2xsSW5mby5nZXQoKSwgc2Nyb2xsTGF5ZXJJZCwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CiAK
ICAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBub3QgaGF2ZSBjaGFuZ2VkLgogICAgIEVY
UEVDVF9FUShjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOwpA
QCAtMTAyNiwxMiArMTAyOSwxMiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNj
cm9sbENoaWxkQmV5b25kTGltaXQpCiAgICAgLy8gcGFyZW50IGxheWVyIGlzIHNjcm9sbGVkIG9u
IHRoZSBheGlzIG9uIHdoaWNoIHRoZSBjaGlsZCB3YXMgdW5hYmxlIHRvCiAgICAgLy8gc2Nyb2xs
LgogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKLSAgICBPd25QdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFi
bGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CiAKLSAgICBPd25QdHI8
Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQ
b2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRD
aGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigzLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNl
U2l6ZSk7CiAgICAgZ3JhbmRDaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgNSkp
OwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXll
cigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSk7CiAgICAgY2hpbGQtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDMsIDAp
KTsKICAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOwogCkBAIC0xMDYy
LDggKzEwNjUsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEV2ZW50
QnViYmxpbmcpCiAgICAgLy8gV2hlbiB3ZSB0cnkgdG8gc2Nyb2xsIGEgbm9uLXNjcm9sbGFibGUg
Y2hpbGQgbGF5ZXIsIHRoZSBzY3JvbGwgZGVsdGEKICAgICAvLyBzaG91bGQgYmUgYXBwbGllZCB0
byBvbmUgb2YgaXRzIGFuY2VzdG9ycyBpZiBwb3NzaWJsZS4KICAgICBJbnRTaXplIHN1cmZhY2VT
aXplKDEwLCAxMCk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xs
YWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKLSAgICBPd25QdHI8
Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwogCiAgICAgY2hpbGQtPnNldFNjcm9sbGFibGUo
ZmFsc2UpOwogICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CkBAIC0xMDg4LDEz
ICsxMDkxLDEzIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRXZlbnRC
dWJibGluZykKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQmVmb3JlUmVk
cmF3KQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKLSAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSks
IHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9s
bGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOwogICAgIG1faG9z
dEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAKICAgICAvLyBEcmF3IG9uZSBm
cmFtZSBhbmQgdGhlbiBpbW1lZGlhdGVseSByZWJ1aWxkIHRoZSBsYXllciB0cmVlIHRvIG1pbWlj
IGEgdHJlZSBzeW5jaHJvbml6YXRpb24uCiAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmRE
cmF3RnJhbWUoKTsKICAgICBtX2hvc3RJbXBsLT5kZXRhY2hMYXllclRyZWUoKTsKLSAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0
ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOwogCiAg
ICAgLy8gU2Nyb2xsaW5nIHNob3VsZCBzdGlsbCB3b3JrIGV2ZW4gdGhvdWdoIHdlIGRpZCBub3Qg
ZHJhdyB5ZXQuCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0xMTg2LDcgKzExODksNyBAQCBURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5nT2ZmV2hlbkRyYXdpbmdPcGFxdWVMYXllcnMpCiB7CiAK
ICAgICB7Ci0gICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMSk7CiAgICAgICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwg
MCkpOwogICAgICAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICAgICAg
cm9vdC0+c2V0Q29udGVudEJvdW5kcyhyb290LT5ib3VuZHMoKSk7CkBAIC0xMTk1LDcgKzExOTgs
NyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5nT2ZmV2hlbkRyYXdp
bmdPcGFxdWVMYXllcnMpCiAgICAgfQogICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9ob3N0SW1w
bC0+cm9vdExheWVyKCk7CiAKLSAgICByb290LT5hZGRDaGlsZChCbGVuZFN0YXRlQ2hlY2tMYXll
cjo6Y3JlYXRlKDEpKTsKKyAgICByb290LT5hZGRDaGlsZChCbGVuZFN0YXRlQ2hlY2tMYXllcjo6
Y3JlYXRlKDIpKTsKICAgICBCbGVuZFN0YXRlQ2hlY2tMYXllciogbGF5ZXIxID0gc3RhdGljX2Nh
c3Q8QmxlbmRTdGF0ZUNoZWNrTGF5ZXIqPihyb290LT5jaGlsZHJlbigpWzBdLmdldCgpKTsKIAog
ICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKQEAgLTEyNDcsNyArMTI1
MCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgYmxlbmRpbmdPZmZXaGVuRHJh
d2luZ09wYXF1ZUxheWVycykKICAgICBFWFBFQ1RfVFJVRShsYXllcjEtPnF1YWRzQXBwZW5kZWQo
KSk7CiAgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CiAKLSAgICBsYXll
cjEtPmFkZENoaWxkKEJsZW5kU3RhdGVDaGVja0xheWVyOjpjcmVhdGUoMikpOworICAgIGxheWVy
MS0+YWRkQ2hpbGQoQmxlbmRTdGF0ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgzKSk7CiAgICAgQmxlbmRT
dGF0ZUNoZWNrTGF5ZXIqIGxheWVyMiA9IHN0YXRpY19jYXN0PEJsZW5kU3RhdGVDaGVja0xheWVy
Kj4obGF5ZXIxLT5jaGlsZHJlbigpWzBdLmdldCgpKTsKIAogICAgIC8vIDIgb3BhcXVlIGxheWVy
cywgZHJhd24gd2l0aG91dCBibGVuZGluZy4KQEAgLTE0MDcsNyArMTQxMCw3IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgdmlld3BvcnRDb3ZlcmVkKQogICAgIEludFNpemUgdmll
d3BvcnRTaXplKDEwMDAsIDEwMDApOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZSh2
aWV3cG9ydFNpemUpOwogCi0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKEJsZW5kU3RhdGVD
aGVja0xheWVyOjpjcmVhdGUoMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihCbGVu
ZFN0YXRlQ2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKICAgICBCbGVuZFN0YXRlQ2hlY2tMYXllciog
cm9vdCA9IHN0YXRpY19jYXN0PEJsZW5kU3RhdGVDaGVja0xheWVyKj4obV9ob3N0SW1wbC0+cm9v
dExheWVyKCkpOwogICAgIHJvb3QtPnNldEV4cGVjdGF0aW9uKGZhbHNlLCB0cnVlKTsKICAgICBy
b290LT5zZXRPcGFxdWUodHJ1ZSk7CkBAIC0xOTk3LDcgKzIwMDAsNyBAQCBwcml2YXRlOgogCiBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGNvbnRleHRMb3N0QW5kUmVzdG9yZWROb3Rp
ZmljYXRpb25TZW50VG9BbGxMYXllcnMpCiB7Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KENvbnRleHRMb3N0Tm90aWZpY2F0aW9uQ2hlY2tMYXllcjo6Y3JlYXRlKDApKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoQ29udGV4dExvc3ROb3RpZmljYXRpb25DaGVja0xheWVyOjpj
cmVhdGUoMSkpOwogICAgIENvbnRleHRMb3N0Tm90aWZpY2F0aW9uQ2hlY2tMYXllciogcm9vdCA9
IHN0YXRpY19jYXN0PENvbnRleHRMb3N0Tm90aWZpY2F0aW9uQ2hlY2tMYXllcio+KG1faG9zdElt
cGwtPnJvb3RMYXllcigpKTsKIAogICAgIHJvb3QtPmFkZENoaWxkKENvbnRleHRMb3N0Tm90aWZp
Y2F0aW9uQ2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKQEAgLTIyMDAsMTEgKzIyMDMsMTEgQEAgcHVi
bGljOgogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJj
ZXNBZnRlckxvc3RDb250ZXh0KQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdExheWVy
KENDTGF5ZXJJbXBsOjpjcmVhdGUoMCkpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdExh
eWVyKENDTGF5ZXJJbXBsOjpjcmVhdGUoMSkpOwogICAgIHJvb3RMYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CiAgICAgcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
KDAsIDApKTsKIAotICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiB0aWxlTGF5ZXIgPSBDQ1Rp
bGVkTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IHRp
bGVMYXllciA9IENDVGlsZWRMYXllckltcGw6OmNyZWF0ZSgyKTsKICAgICB0aWxlTGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHRpbGVMYXllci0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgwLCAwKSk7CiAgICAgdGlsZUxheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNp
emUoMTAsIDEwKSk7CkBAIC0yMjE2LDcgKzIyMTksNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJjZXNBZnRlckxvc3RDb250ZXh0KQogICAgIHRpbGVM
YXllci0+cHVzaFRpbGVQcm9wZXJ0aWVzKDAsIDAsIDEsIEludFJlY3QoMCwgMCwgMTAsIDEwKSk7
CiAgICAgcm9vdExheWVyLT5hZGRDaGlsZCh0aWxlTGF5ZXIucmVsZWFzZSgpKTsKIAotICAgIE93
blB0cjxDQ1RleHR1cmVMYXllckltcGw+IHRleHR1cmVMYXllciA9IENDVGV4dHVyZUxheWVySW1w
bDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ1RleHR1cmVMYXllckltcGw+IHRleHR1cmVMYXll
ciA9IENDVGV4dHVyZUxheWVySW1wbDo6Y3JlYXRlKDMpOwogICAgIHRleHR1cmVMYXllci0+c2V0
Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgdGV4dHVyZUxheWVyLT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50KDAsIDApKTsKICAgICB0ZXh0dXJlTGF5ZXItPnNldENvbnRlbnRCb3VuZHMo
SW50U2l6ZSgxMCwgMTApKTsKQEAgLTIyMjUsNyArMjIyOCw3IEBAIFRFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgZG9udFVzZU9sZFJlc291cmNlc0FmdGVyTG9zdENvbnRleHQpCiAgICAg
cm9vdExheWVyLT5hZGRDaGlsZCh0ZXh0dXJlTGF5ZXIucmVsZWFzZSgpKTsKIAogICAgIEZha2VW
aWRlb0ZyYW1lUHJvdmlkZXIgcHJvdmlkZXI7Ci0gICAgT3duUHRyPENDVmlkZW9MYXllckltcGw+
IHZpZGVvTGF5ZXIgPSBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUoMywgJnByb3ZpZGVyKTsKKyAg
ICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbD4gdmlkZW9MYXllciA9IENDVmlkZW9MYXllckltcGw6
OmNyZWF0ZSg0LCAmcHJvdmlkZXIpOwogICAgIHZpZGVvTGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDEwLCAxMCkpOwogICAgIHZpZGVvTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwg
MCkpOwogICAgIHZpZGVvTGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsK
QEAgLTIyMzMsNyArMjIzNiw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZG9u
dFVzZU9sZFJlc291cmNlc0FmdGVyTG9zdENvbnRleHQpCiAgICAgdmlkZW9MYXllci0+c2V0TGF5
ZXJUcmVlSG9zdEltcGwobV9ob3N0SW1wbC5nZXQoKSk7CiAgICAgcm9vdExheWVyLT5hZGRDaGls
ZCh2aWRlb0xheWVyLnJlbGVhc2UoKSk7CiAKLSAgICBPd25QdHI8Q0NJT1N1cmZhY2VMYXllcklt
cGw+IGlvU3VyZmFjZUxheWVyID0gQ0NJT1N1cmZhY2VMYXllckltcGw6OmNyZWF0ZSg0KTsKKyAg
ICBPd25QdHI8Q0NJT1N1cmZhY2VMYXllckltcGw+IGlvU3VyZmFjZUxheWVyID0gQ0NJT1N1cmZh
Y2VMYXllckltcGw6OmNyZWF0ZSg1KTsKICAgICBpb1N1cmZhY2VMYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CiAgICAgaW9TdXJmYWNlTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoMCwgMCkpOwogICAgIGlvU3VyZmFjZUxheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNp
emUoMTAsIDEwKSk7CkBAIC0yNDY1LDYgKzI0NjgsMTEgQEAgc3RhdGljIHZvaWQgc2V0dXBMYXll
cnNGb3JUZXh0dXJlQ2FjaGluZyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1w
bCwKICAgICBzdXJmYWNlTGF5ZXJQdHItPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CiB9CiAK
K2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bVdpdGhSZWxlYXNlVGV4dHVyZXMgOiBwdWJsaWMg
TGF5ZXJSZW5kZXJlckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB1c2luZyBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXM7Cit9OworCiBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKIHsKICAgICBDQ1NldHRp
bmdzOjpzZXRQYXJ0aWFsU3dhcEVuYWJsZWQodHJ1ZSk7CkBAIC0yNTQ4LDIyICsyNTU2LDkgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmcpCiAg
ICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwogICAgIH0KIAotICAg
IC8vIENoYW5nZSBvcGFjaXR5IGFnYWluLCBidXQgZXZpY3QgdGhlIGNhY2hlZCBzdXJmYWNlIHRl
eHR1cmUKKyAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhZ2FpbiwgYW5kIGV2aWN0IHRoZSBjYWNoZWQg
c3VyZmFjZSB0ZXh0dXJlLgogICAgIHN1cmZhY2VMYXllclB0ci0+c2V0T3BhY2l0eSgwLjVmKTsK
LSAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlID0gc3VyZmFjZUxheWVyUHRyLT5y
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpOwotICAgIEFTU0VSVF9UUlVFKGNvbnRl
bnRzVGV4dHVyZS0+aXNWYWxpZChjb250ZW50c1RleHR1cmUtPnNpemUoKSwgY29udGVudHNUZXh0
dXJlLT5mb3JtYXQoKSkpOwotICAgIENDUmVuZGVyZXIqIHJlbmRlcmVyID0gbXlIb3N0SW1wbC0+
bGF5ZXJSZW5kZXJlcigpOwotICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlciA9IHJl
bmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFnZXIoKTsKLSAgICBzaXplX3QgbWF4TWVtb3J5TGltaXQg
PSB0ZXh0dXJlTWFuYWdlci0+bWF4TWVtb3J5TGltaXRCeXRlcygpOwotCi0gICAgLy8gVGhpcyBz
aG91bGQgZXZpY2UgYWxsIGNhY2hlZCBzdXJmYWNlcwotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRN
YXhNZW1vcnlMaW1pdEJ5dGVzKDApOwotCi0gICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBsaW1pdAot
ICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heE1lbW9yeUxpbWl0
KTsKLQotICAgIC8vIFdhcyBvdXIgc3VyZmFjZSBldmljdGVkPwotICAgIEFTU0VSVF9GQUxTRShj
b250ZW50c1RleHR1cmUtPmlzVmFsaWQoY29udGVudHNUZXh0dXJlLT5zaXplKCksIGNvbnRlbnRz
VGV4dHVyZS0+Zm9ybWF0KCkpKTsKKyAgICBzdGF0aWNfY2FzdDxMYXllclJlbmRlcmVyQ2hyb21p
dW1XaXRoUmVsZWFzZVRleHR1cmVzKj4obXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpKS0+cmVs
ZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwogCiAgICAgLy8gQ2hhbmdlIG9wYWNpdHkgYW5kIGRy
YXcKICAgICBzdXJmYWNlTGF5ZXJQdHItPnNldE9wYWNpdHkoMC42Zik7CkBAIC0yNTgzLDYgKzI1
NzgsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2Fj
aGluZykKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNfY2FzdDxD
Q1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVsw
XS5nZXQoKSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdl
dFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCisgICAgICAgIC8vIFdhcyBvdXIgc3Vy
ZmFjZSBldmljdGVkPworICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5k
ZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJlbmRlclBh
c3MoKS0+aWQoKSkpOworCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwog
ICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKICAgICB9CkBAIC0y
NzA2LDIyICsyNzA0LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNl
VGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3
QWxsTGF5ZXJzKGZyYW1lKTsKICAgICB9CiAKLSAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhZ2Fpbiwg
YnV0IGV2aWN0IHRoZSBjYWNoZWQgc3VyZmFjZSB0ZXh0dXJlCisgICAgLy8gQ2hhbmdlIG9wYWNp
dHkgYWdhaW4sIGFuZCBldmljdCB0aGUgY2FjaGVkIHN1cmZhY2UgdGV4dHVyZS4KICAgICBzdXJm
YWNlTGF5ZXJQdHItPnNldE9wYWNpdHkoMC41Zik7Ci0gICAgTWFuYWdlZFRleHR1cmUqIGNvbnRl
bnRzVGV4dHVyZSA9IHN1cmZhY2VMYXllclB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1Rl
eHR1cmUoKTsKLSAgICBBU1NFUlRfVFJVRShjb250ZW50c1RleHR1cmUtPmlzVmFsaWQoY29udGVu
dHNUZXh0dXJlLT5zaXplKCksIGNvbnRlbnRzVGV4dHVyZS0+Zm9ybWF0KCkpKTsKLSAgICBDQ1Jl
bmRlcmVyKiByZW5kZXJlciA9IG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKTsKLSAgICBUZXh0
dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIgPSByZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2Vy
KCk7Ci0gICAgc2l6ZV90IG1heE1lbW9yeUxpbWl0ID0gdGV4dHVyZU1hbmFnZXItPm1heE1lbW9y
eUxpbWl0Qnl0ZXMoKTsKLQotICAgIC8vIFRoaXMgc2hvdWxkIGV2aWNlIGFsbCBjYWNoZWQgc3Vy
ZmFjZXMKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygwKTsKLQot
ICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgbGltaXQKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4
TWVtb3J5TGltaXRCeXRlcyhtYXhNZW1vcnlMaW1pdCk7Ci0KLSAgICAvLyBXYXMgb3VyIHN1cmZh
Y2UgZXZpY3RlZD8KLSAgICBBU1NFUlRfRkFMU0UoY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKGNv
bnRlbnRzVGV4dHVyZS0+c2l6ZSgpLCBjb250ZW50c1RleHR1cmUtPmZvcm1hdCgpKSk7CisgICAg
c3RhdGljX2Nhc3Q8TGF5ZXJSZW5kZXJlckNocm9taXVtV2l0aFJlbGVhc2VUZXh0dXJlcyo+KG15
SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSktPnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsK
IAogICAgIC8vIENoYW5nZSBvcGFjaXR5IGFuZCBkcmF3CiAgICAgc3VyZmFjZUxheWVyUHRyLT5z
ZXRPcGFjaXR5KDAuNmYpOwpAQCAtMjc0MSw2ICsyNzI2LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogICAgICAg
ICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0Ry
YXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKICAg
ICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5j
b250ZW50c0NoYW5nZWQoKSk7CiAKKyAgICAgICAgLy8gV2FzIG91ciBzdXJmYWNlIGV2aWN0ZWQ/
CisgICAgICAgIEVYUEVDVF9GQUxTRShteUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmhhdmVD
YWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQocXVhZC0+cmVuZGVyUGFzcygpLT5pZCgpKSk7
CisKICAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9z
dEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwogICAgIH0KQEAgLTI4OTgsODcgKzI4ODYs
NzYgQEAgc3RydWN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEgewogICAgIE93blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlOwogfTsKIAotY2xhc3MgRmFrZVJlbmRlclN1
cmZhY2UgOiBwdWJsaWMgQ0NSZW5kZXJTdXJmYWNlIHsKLXByaXZhdGU6Ci0gICAgYm9vbCBtX2hh
c0NhY2hlZFRleHR1cmU7Ci0gICAgYm9vbCBtX2NvbnRlbnRzQ2hhbmdlZDsKLQorY2xhc3MgQ0NU
ZXN0UmVuZGVyUGFzczogcHVibGljIENDUmVuZGVyUGFzcyB7CiBwdWJsaWM6Ci0gICAgRmFrZVJl
bmRlclN1cmZhY2UoQ0NMYXllckltcGwqIGxheWVySW1wbCkKLSAgICAgICAgOiBDQ1JlbmRlclN1
cmZhY2UobGF5ZXJJbXBsKSwKLSAgICAgICAgICBtX2hhc0NhY2hlZFRleHR1cmUoZmFsc2UpCi0g
ICAgewotICAgIH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShD
Q1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIHVuc2lnbmVkIGlkKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgQ0NUZXN0UmVuZGVyUGFzcyh0YXJnZXRTdXJmYWNlLCBpZCkpOyB9CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaGFzQ2FjaGVkQ29udGVudHNUZXh0dXJlKCkgY29uc3QgT1ZFUlJJREUKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2hhc0NhY2hlZFRleHR1cmU7Ci0gICAgfQorICAgIHZvaWQg
YXBwZW5kUXVhZChQYXNzT3duUHRyPENDRHJhd1F1YWQ+IHF1YWQpIHsgbV9xdWFkTGlzdC5hcHBl
bmQocXVhZCk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbHJjKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQorcHJvdGVjdGVkOgorICAgIENDVGVzdFJlbmRlclBhc3MoQ0NSZW5kZXJT
dXJmYWNlKiB0YXJnZXRTdXJmYWNlLCB1bnNpZ25lZCBpZCkgOiBDQ1JlbmRlclBhc3ModGFyZ2V0
U3VyZmFjZSwgaWQpIHsgfQorfTsKIAotICAgIHZpcnR1YWwgYm9vbCBjb250ZW50c0NoYW5nZWQo
KSBjb25zdCBPVkVSUklERQorY2xhc3MgQ0NUZXN0UmVuZGVyZXIgOiBwdWJsaWMgTGF5ZXJSZW5k
ZXJlckNocm9taXVtLCBwdWJsaWMgQ0NSZW5kZXJlckNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NUZXN0UmVuZGVyZXI+IGNyZWF0ZShXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29udGVudHNDaGFu
Z2VkOwotICAgIH0KKyAgICAgICAgT3duUHRyPENDVGVzdFJlbmRlcmVyPiByZW5kZXJlcihhZG9w
dFB0cihuZXcgQ0NUZXN0UmVuZGVyZXIoY29udGV4dCkpKTsKKyAgICAgICAgaWYgKCFyZW5kZXJl
ci0+aW5pdGlhbGl6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICB2b2lk
IHNldEhhc0NhY2hlZFRleHR1cmUoYm9vbCBoYXNDYWNoZWRUZXh0dXJlKQotICAgIHsKLSAgICAg
ICAgbV9oYXNDYWNoZWRUZXh0dXJlID0gaGFzQ2FjaGVkVGV4dHVyZTsKKyAgICAgICAgcmV0dXJu
IHJlbmRlcmVyLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRzQ2hhbmdl
ZChib29sIGNvbnRlbnRzQ2hhbmdlZCkKLSAgICB7Ci0gICAgICAgIG1fY29udGVudHNDaGFuZ2Vk
ID0gY29udGVudHNDaGFuZ2VkOwotICAgIH0KLX07CisgICAgdm9pZCBjbGVhckNhY2hlZFRleHR1
cmVzKCkgeyBtX3RleHR1cmVzLmNsZWFyKCk7IH0KKyAgICB2b2lkIHNldEhhdmVDYWNoZWRSZXNv
dXJjZXNGb3JSZW5kZXJQYXNzSWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlcy5hZGQoaWQpOyB9
CiAKLWNsYXNzIENDVGVzdFJlbmRlclBhc3M6IHB1YmxpYyBDQ1JlbmRlclBhc3MgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFzcz4gY3JlYXRlKENDUmVuZGVyU3Vy
ZmFjZSogdGFyZ2V0U3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NUZXN0UmVuZGVyUGFzcyh0YXJnZXRTdXJmYWNlKSk7Ci0gICAgfQorICAgIHZpcnR1YWwgYm9v
bCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHVuc2lnbmVkIGlkKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX3RleHR1cmVzLmNvbnRhaW5zKGlkKTsgfQorCisgICAgLy8gQ0NS
ZW5kZXJlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUm
IGRldmljZVZpZXdwb3J0U2l6ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmlld3BvcnRT
aXplOyB9CisgICAgdmlydHVhbCBjb25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJiBzZXR0aW5ncygp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkTG9zZUNvbnRleHQoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVm
ZmVyc0NvbXBsZXRlKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZ1bGxSb290
TGF5ZXJEYW1hZ2UoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUNvbnRl
bnRzVGV4dHVyZXMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxs
b2NhdGlvbkxpbWl0Qnl0ZXMoc2l6ZV90KSBPVkVSUklERSB7IH0KIAogcHJvdGVjdGVkOgotICAg
IENDVGVzdFJlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKQotICAgICAgICA6IEND
UmVuZGVyUGFzcyhzdXJmYWNlKQotICAgIHsKLSAgICB9CisgICAgQ0NUZXN0UmVuZGVyZXIoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkgOiBMYXllclJlbmRlcmVyQ2hyb21p
dW0odGhpcywgY29udGV4dCwgVW50aHJvdHRsZWRVcGxvYWRlcikgeyB9CiAKLXB1YmxpYzoKLSAg
ICB2b2lkIGFwcGVuZFF1YWQoUGFzc093blB0cjxDQ0RyYXdRdWFkPiBxdWFkKQotICAgIHsKLSAg
ICAgICAgbV9xdWFkTGlzdC5hcHBlbmQocXVhZCk7Ci0gICAgfQorcHJpdmF0ZToKKyAgICBDQ0xh
eWVyVHJlZVNldHRpbmdzIG1fc2V0dGluZ3M7CisgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsK
KyAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX3RleHR1cmVzOwogfTsKIAotc3RhdGljIFBhc3NPd25Q
dHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGVEdW1teVJlbmRlclBhc3MoUmVuZGVyUGFzc1JlbW92YWxU
ZXN0RGF0YSYgdGVzdERhdGEpCitzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0
ZUR1bW15UmVuZGVyUGFzcyhSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSwgdW5z
aWduZWQgaWQpCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBsYXllckltcGwgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDEpOwotICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IG5l
dyBGYWtlUmVuZGVyU3VyZmFjZShsYXllckltcGwuZ2V0KCkpOwotICAgIE93blB0cjxDQ1JlbmRl
clBhc3M+IHJlbmRlclBhc3NQdHIgPSBDQ1Rlc3RSZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3Vy
ZmFjZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBsYXllckltcGwoQ0NMYXllckltcGw6OmNy
ZWF0ZShpZCkpOworICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U+IHJlbmRlclN1cmZhY2UoYWRv
cHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZShsYXllckltcGwuZ2V0KCkpKSk7CisgICAgT3duUHRy
PENDUmVuZGVyUGFzcz4gcmVuZGVyUGFzc1B0cihDQ1Rlc3RSZW5kZXJQYXNzOjpjcmVhdGUocmVu
ZGVyU3VyZmFjZS5nZXQoKSwgbGF5ZXJJbXBsLT5pZCgpKSk7CiAKLSAgICB0ZXN0RGF0YS5yZW5k
ZXJTdXJmYWNlU3RvcmUuYXBwZW5kKGFkb3B0UHRyKHJlbmRlclN1cmZhY2UpKTsKKyAgICB0ZXN0
RGF0YS5yZW5kZXJTdXJmYWNlU3RvcmUuYXBwZW5kKHJlbmRlclN1cmZhY2UucmVsZWFzZSgpKTsK
ICAgICB0ZXN0RGF0YS5sYXllclN0b3JlLmFwcGVuZChsYXllckltcGwucmVsZWFzZSgpKTsKICAg
ICByZXR1cm4gcmVuZGVyUGFzc1B0ci5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbmZp
Z3VyZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0U2NyaXB0LCBSZW5kZXJQYXNz
UmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSkKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZVJlbmRlclBh
c3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0U2NyaXB0LCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3RE
YXRhJiB0ZXN0RGF0YSwgQ0NUZXN0UmVuZGVyZXIqIHJlbmRlcmVyKQogeworICAgIHJlbmRlcmVy
LT5jbGVhckNhY2hlZFRleHR1cmVzKCk7CisKICAgICAvLyBPbmUgc2hhcmVkIHN0YXRlIGZvciBh
bGwgcXVhZHMgLSB3ZSBkb24ndCBuZWVkIHRoZSBjb3JyZWN0IGRldGFpbHMKICAgICB0ZXN0RGF0
YS5zaGFyZWRRdWFkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIEludFJlY3QoKSwgSW50
UmVjdCgpLCAxLjAsIHRydWUpOwogCiAgICAgY29uc3QgY2hhciogY3VycmVudENoYXIgPSB0ZXN0
U2NyaXB0OwogCiAgICAgLy8gUHJlLWNyZWF0ZSByb290IHBhc3MKLSAgICBPd25QdHI8Q0NSZW5k
ZXJQYXNzPiByb290UmVuZGVyUGFzcyA9IGNyZWF0ZUR1bW15UmVuZGVyUGFzcyh0ZXN0RGF0YSk7
Ci0gICAgdGVzdERhdGEucmVuZGVyUGFzc0lkLmluc2VydChzdGQ6OnBhaXI8Q0NSZW5kZXJQYXNz
KiwgY2hhcj4ocm9vdFJlbmRlclBhc3MuZ2V0KCksIHRlc3RTY3JpcHRbMF0pKTsKLSAgICB0ZXN0
RGF0YS5yZW5kZXJQYXNzQ2FjaGUuaW5zZXJ0KHN0ZDo6cGFpcjxjaGFyLCBSZW5kZXJQYXNzQ2Fj
aGVFbnRyeT4odGVzdFNjcmlwdFswXSwgUmVuZGVyUGFzc0NhY2hlRW50cnkocm9vdFJlbmRlclBh
c3MucmVsZWFzZSgpKSkpOwotICAgIHdoaWxlICgqY3VycmVudENoYXIgIT0gJ1wwJykgeworICAg
IGNoYXIgcm9vdFJlbmRlclBhc3NJZCA9IHRlc3RTY3JpcHRbMF07CisgICAgT3duUHRyPENDUmVu
ZGVyUGFzcz4gcm9vdFJlbmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3ModGVzdERhdGEs
IHJvb3RSZW5kZXJQYXNzSWQpOworICAgIHRlc3REYXRhLnJlbmRlclBhc3NJZC5pbnNlcnQoc3Rk
OjpwYWlyPENDUmVuZGVyUGFzcyosIGNoYXI+KHJvb3RSZW5kZXJQYXNzLmdldCgpLCByb290UmVu
ZGVyUGFzc0lkKSk7CisgICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmluc2VydChzdGQ6OnBh
aXI8Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50cnk+KHJvb3RSZW5kZXJQYXNzSWQsIFJlbmRlclBh
c3NDYWNoZUVudHJ5KHJvb3RSZW5kZXJQYXNzLnJlbGVhc2UoKSkpKTsKKyAgICB3aGlsZSAoKmN1
cnJlbnRDaGFyKSB7CiAgICAgICAgIGNoYXIgcmVuZGVyUGFzc0lkID0gY3VycmVudENoYXJbMF07
CiAgICAgICAgIGN1cnJlbnRDaGFyKys7CiAKQEAgLTI5OTEsNyArMjk2OCw3IEBAIHN0YXRpYyB2
b2lkIGNvbmZpZ3VyZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0U2NyaXB0LCBS
ZW5kZXJQYXNzUmVtb3ZhCiAgICAgICAgIHJlbmRlclBhc3MgPSB0ZXN0RGF0YS5yZW5kZXJQYXNz
Q2FjaGVbcmVuZGVyUGFzc0lkXS5yZW5kZXJQYXNzUHRyLnJlbGVhc2UoKTsKIAogICAgICAgICAv
LyBDeWNsZSB0aHJvdWdoIHF1YWQgZGF0YSBhbmQgY3JlYXRlIGFsbCBxdWFkcwotICAgICAgICB3
aGlsZSAoKmN1cnJlbnRDaGFyICE9ICdcbicgJiYgKmN1cnJlbnRDaGFyICE9ICdcMCcpIHsKKyAg
ICAgICAgd2hpbGUgKCpjdXJyZW50Q2hhciAmJiAqY3VycmVudENoYXIgIT0gJ1xuJykgewogICAg
ICAgICAgICAgaWYgKCpjdXJyZW50Q2hhciA9PSAncycpIHsKICAgICAgICAgICAgICAgICAvLyBT
b2xpZCBjb2xvciBkcmF3IHF1YWQKICAgICAgICAgICAgICAgICBPd25QdHI8Q0NEcmF3UXVhZD4g
cXVhZCA9IENDU29saWRDb2xvckRyYXdRdWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0
YXRlLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwLCAxMCksIFNLX0NvbG9yV0hJVEUpOwpAQCAtMzAw
MSwxMyArMjk3OCwxNCBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEo
Y29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAgICAgICAgICAgfSBl
bHNlIGlmICgoKmN1cnJlbnRDaGFyID49ICdBJykgJiYgKCpjdXJyZW50Q2hhciA8PSAnWicpKSB7
CiAgICAgICAgICAgICAgICAgLy8gUmVuZGVyUGFzcyBkcmF3IHF1YWQKICAgICAgICAgICAgICAg
ICBjaGFyIG5ld1JlbmRlclBhc3NJZCA9ICpjdXJyZW50Q2hhcjsKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTkUocm9vdFJlbmRlclBhc3NJZCwgbmV3UmVuZGVyUGFzc0lkKTsKICAgICAgICAgICAg
ICAgICBjdXJyZW50Q2hhcisrOwogICAgICAgICAgICAgICAgIGJvb2wgaGFzVGV4dHVyZSA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIGJvb2wgY29udGVudHNDaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoKmN1cnJlbnRDaGFyID09ICdbJykgewog
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcisrOwotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoKCpjdXJyZW50Q2hhciAhPSAnXScpICYmICgqY3VycmVudENoYXIgIT0gJ1wwJykpIHsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50Q2hhciAmJiAqY3VycmVudENoYXIg
IT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCpjdXJyZW50Q2hhcikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGVudHNDaGFuZ2VkID0gZmFsc2U7CkBAIC0zMDI1LDExICszMDAzLDEyIEBA
IHN0YXRpYyB2b2lkIGNvbmZpZ3VyZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0
U2NyaXB0LCBSZW5kZXJQYXNzUmVtb3ZhCiAgICAgICAgICAgICAgICAgQ0NSZW5kZXJQYXNzKiBy
ZWZSZW5kZXJQYXNzUHRyOwogCiAgICAgICAgICAgICAgICAgaWYgKHRlc3REYXRhLnJlbmRlclBh
c3NDYWNoZS5maW5kKG5ld1JlbmRlclBhc3NJZCkgPT0gdGVzdERhdGEucmVuZGVyUGFzc0NhY2hl
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlZlJl
bmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3ModGVzdERhdGEpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzVGV4dHVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVy
LT5zZXRIYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKG5ld1JlbmRlclBhc3NJZCk7
CisKKyAgICAgICAgICAgICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcmVmUmVuZGVyUGFz
cyA9IGNyZWF0ZUR1bW15UmVuZGVyUGFzcyh0ZXN0RGF0YSwgbmV3UmVuZGVyUGFzc0lkKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVmUmVuZGVyUGFzcy0+c2V0Q29udGVudHNDaGFuZ2VkU2luY2VM
YXN0RnJhbWUoY29udGVudHNDaGFuZ2VkKTsKICAgICAgICAgICAgICAgICAgICAgcmVmUmVuZGVy
UGFzc1B0ciA9IHJlZlJlbmRlclBhc3MuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEZha2VS
ZW5kZXJTdXJmYWNlKiByZWZSZW5kZXJTdXJmYWNlID0gc3RhdGljX2Nhc3Q8RmFrZVJlbmRlclN1
cmZhY2UqPihyZWZSZW5kZXJQYXNzLT50YXJnZXRTdXJmYWNlKCkpOwotICAgICAgICAgICAgICAg
ICAgICByZWZSZW5kZXJTdXJmYWNlLT5zZXRIYXNDYWNoZWRUZXh0dXJlKGhhc1RleHR1cmUpOwot
ICAgICAgICAgICAgICAgICAgICByZWZSZW5kZXJTdXJmYWNlLT5zZXRDb250ZW50c0NoYW5nZWQo
Y29udGVudHNDaGFuZ2VkKTsKICAgICAgICAgICAgICAgICAgICAgdGVzdERhdGEucmVuZGVyUGFz
c0lkLmluc2VydChzdGQ6OnBhaXI8Q0NSZW5kZXJQYXNzKiwgY2hhcj4ocmVmUmVuZGVyUGFzcy5n
ZXQoKSwgbmV3UmVuZGVyUGFzc0lkKSk7CiAgICAgICAgICAgICAgICAgICAgIHRlc3REYXRhLnJl
bmRlclBhc3NDYWNoZS5pbnNlcnQoc3RkOjpwYWlyPGNoYXIsIFJlbmRlclBhc3NDYWNoZUVudHJ5
PihuZXdSZW5kZXJQYXNzSWQsIFJlbmRlclBhc3NDYWNoZUVudHJ5KHJlZlJlbmRlclBhc3MucmVs
ZWFzZSgpKSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQpAQCAtMzA0MCw3ICszMDE5LDcgQEAg
c3RhdGljIHZvaWQgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IGNoYXIqIHRlc3RT
Y3JpcHQsIFJlbmRlclBhc3NSZW1vdmEKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICB0ZXN0RGF0YS5yZW5kZXJQYXNzTGlzdC5pbnNlcnQoMCwgcmVuZGVyUGFzcy5yZWxlYXNlKCkp
OwotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyICE9ICdcMCcpCisgICAgICAgIGlmICgqY3VycmVu
dENoYXIpCiAgICAgICAgICAgICBjdXJyZW50Q2hhcisrOwogICAgIH0KIH0KQEAgLTMwNjMsMTUg
KzMwNDIsMTQgQEAgdm9pZCBkdW1wUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IFJlbmRlclBhc3NS
ZW1vdmFsVGVzdERhdGEmIHRlc3REYXRhLCBjaGFyKiBidWYKICAgICAgICAgICAgICAgICAqcG9z
ID0gJ3MnOwogICAgICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzOgotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHJlbmRlclBhc3NE
cmF3UXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4oY3VycmVudFF1YWQp
OwotICAgICAgICAgICAgICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlZlBhc3MgPSByZW5k
ZXJQYXNzRHJhd1F1YWQtPnJlbmRlclBhc3MoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBy
ZWZQYXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmluZChyZWZQYXNzKS0+c2Vjb25kOwot
ICAgICAgICAgICAgICAgICAgICAqcG9zID0gcmVmUGFzc0lkOwotICAgICAgICAgICAgICAgICAg
ICBwb3MrKzsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENDRHJhd1F1YWQ6
OlJlbmRlclBhc3M6IHsKKyAgICAgICAgICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVu
ZGVyUGFzc0RyYXdRdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihjdXJy
ZW50UXVhZCk7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZWZQYXNzID0g
cmVuZGVyUGFzc0RyYXdRdWFkLT5yZW5kZXJQYXNzKCk7CisgICAgICAgICAgICAgICAgY2hhciBy
ZWZQYXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmluZChyZWZQYXNzKS0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgICpwb3MgPSByZWZQYXNzSWQ7CisgICAgICAgICAgICAgICAgcG9zKys7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgICpwb3MgPSAneCc7CiAgICAgICAgICAgICAgICAgcG9zKys7
CkBAIC0zMjM1LDE1ICszMjEzLDE5IEBAIHN0YXRpYyB2b2lkIHZlcmlmeVJlbmRlclBhc3NUZXN0
RGF0YShUZXN0Q2FzZSYgdGVzdENhc2UsIFJlbmRlclBhc3NSZW1vdmFsVGVzdERhCiAgICAgRVhQ
RUNUX1NUUkVRKHRlc3RDYXNlLmV4cGVjdGVkUmVzdWx0LCBhY3R1YWxSZXN1bHQpIDw8ICJJbiB0
ZXN0IGNhc2U6ICIgPDwgdGVzdENhc2UubmFtZTsKIH0KIAotVEVTVChSZW5kZXJQYXNzUmVtb3Zh
bFRlc3QsIHRlc3RSZW1vdmVSZW5kZXJQYXNzZXMpCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHRlc3RSZW1vdmVSZW5kZXJQYXNzZXMpCiB7CisgICAgT3duUHRyPENDR3JhcGhpY3ND
b250ZXh0PiBjb250ZXh0KGNyZWF0ZUNvbnRleHQoKSk7CisgICAgV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dDNkID0gY29udGV4dC0+Y29udGV4dDNEKCk7CisgICAgQVNTRVJU
X1RSVUUoY29udGV4dDNkKTsKKyAgICBPd25QdHI8Q0NUZXN0UmVuZGVyZXI+IHJlbmRlcmVyKEND
VGVzdFJlbmRlcmVyOjpjcmVhdGUoY29udGV4dDNkKSk7CisKICAgICBpbnQgdGVzdENhc2VJbmRl
eCA9IDA7CiAgICAgd2hpbGUgKHJlbW92ZVJlbmRlclBhc3Nlc0Nhc2VzW3Rlc3RDYXNlSW5kZXhd
Lm5hbWUpIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAg
ICAgICAgIFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEgdGVzdERhdGE7CiAgICAgICAgIENDUmVu
ZGVyUGFzc0xpc3Qgc2tpcHBlZFBhc3NlczsKLSAgICAgICAgY29uZmlndXJlUmVuZGVyUGFzc1Rl
c3REYXRhKHJlbW92ZVJlbmRlclBhc3Nlc0Nhc2VzW3Rlc3RDYXNlSW5kZXhdLmluaXRTY3JpcHQs
IHRlc3REYXRhKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0
aENhY2hlZFRleHR1cmVzKHRlc3REYXRhLnJlbmRlclBhc3NMaXN0LCBza2lwcGVkUGFzc2VzKTsK
KyAgICAgICAgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKHJlbW92ZVJlbmRlclBhc3Nlc0Nh
c2VzW3Rlc3RDYXNlSW5kZXhdLmluaXRTY3JpcHQsIHRlc3REYXRhLCByZW5kZXJlci5nZXQoKSk7
CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0
dXJlcyh0ZXN0RGF0YS5yZW5kZXJQYXNzTGlzdCwgc2tpcHBlZFBhc3NlcywgcmVuZGVyZXIuZ2V0
KCkpOwogICAgICAgICB2ZXJpZnlSZW5kZXJQYXNzVGVzdERhdGEocmVtb3ZlUmVuZGVyUGFzc2Vz
Q2FzZXNbdGVzdENhc2VJbmRleF0sIHRlc3REYXRhKTsKICAgICAgICAgdGVzdENhc2VJbmRleCsr
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJS
ZW5kZXJlckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGNmZGNkYzE1NmE3MmI2OWU5OGM2MTZh
ZGVhYWMyNDE4Y2YyYjY2ZTQuLjljOWVjMjViMDNlZDEwYjUyOTExOGZlN2NlMTBiYzNkMTRlMWU0
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJl
ckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXll
clJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAg
ICAgICwgbV9tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygwKQogICAgIHsKICAgICAgICAgbV9y
b290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgbV9yb290UmVuZGVyUGFz
cyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKG1fcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgICAgICBtX3Jvb3RSZW5kZXJQYXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUobV9yb290TGF5
ZXItPnJlbmRlclN1cmZhY2UoKSwgbV9yb290TGF5ZXItPmlkKCkpOwogICAgIH0KIAogICAgIC8v
IENDUmVuZGVyZXJDbGllbnQgbWV0aG9kcy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151001</attachid>
            <date>2012-07-05 16:30:26 -0700</date>
            <delta_ts>2012-07-06 11:53:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90573-20120705193024.patch</filename>
            <type>text/plain</type>
            <size>78030</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uZTM3ZGRiZWMwZjI1MWFiYTRkYjM2YmEzYzM0ODIx
ZGY5NzkzNmUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA3LTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRGVj
b3VwbGUgUmVuZGVyUGFzcyBkcmF3aW5nIGZyb20gQ0NSZW5kZXJTdXJmYWNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIFJlbW92ZSB0aGUgbWFuYWdl
ZCB0ZXh0dXJlcyBmcm9tIENDUmVuZGVyU3VyZmFjZSBhbmQgc3RvcmUgdGhlbSBpbiBhCisgICAg
ICAgIEhhc2hNYXAgaW4gTGF5ZXJSZW5kZXJlckNocm9taXVtLgorCisgICAgICAgIEF0IHRoZSBz
dGFydCBvZiBhIGZyYW1lLCBhbGwgdGV4dHVyZXMgZm9yIHRoZSBmcmFtZSBhcmUgcmVzZXJ2ZWQs
IGFuZAorICAgICAgICB1bm5lZWRlZCB0ZXh0dXJlcyBhcmUgZGVsZXRlZC4gQWZ0ZXIgZWFjaCBx
dWFkIGlzIGRyYXduLCBldmljdGVkIHRleHR1cmVzCisgICAgICAgIChpZSB0ZW1wb3JhcnkgdGV4
dHVyZXMgdXNlZCBmb3IgYmFja2dyb3VuZCBmaWx0ZXJzKSBhcmUgZGVsZXRlZCB0byBrZWVwCisg
ICAgICAgIHdpdGhpbiBtZW1vcnkgbGltaXRzLiBBdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSwgYWxs
IHN1cmZhY2UgY29udGVudHMKKyAgICAgICAgdGV4dHVyZXMgYXJlIGtlcHQgcmVzZXJ2ZWQgYW5k
IHRodXMgbm90IGRlbGV0ZWQuCisKKyAgICAgICAgV2UgYWRkIGEgbnVtZXJpYyBpZGVudGlmaWVy
IHRvIENDUmVuZGVyUGFzcyB3aGljaCBjYW4gYmUgdXNlZCB0bworICAgICAgICBpZGVudGlmeSB0
aGUgcGFzcyBhY3Jvc3Mgc2VyaWFsaXphdGlvbiBpbiB0aGUgZnV0dXJlLCBhbmQgaXMgdXNlZAor
ICAgICAgICBpbiB0aGUgaW50ZXJmYWNlIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bS4gQWxzbyB3
ZSBhZGQgdG8gdGhlCisgICAgICAgIENDUmVuZGVyUGFzcyBhIGNvbnRlbnRzQ2hhbmdlZFNpbmNl
TGFzdEZyYW1lKCkgZmxhZyBzbyB0aGF0IHRoZQorICAgICAgICB2YWx1ZSBkb2VzIG5vdCBuZWVk
IHRvIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBDQ1JlbmRlclN1cmZhY2UuCisKKyAgICAgICAgVGhl
IHBvaW50ZXIgZnJvbSBDQ1JlbmRlclBhc3MgdG8gQ0NSZW5kZXJTdXJmYWNlIHJlbWFpbnMgZm9y
IHNvbWUKKyAgICAgICAgY29kZSBpbiB0aGUgQ0NMYXllclRyZWVIb3N0SW1wbCwgYW5kIHdpbGwg
YmUgYWRkcmVzc2VkIGluIHRoZSBmdXR1cmUsIGJ1dAorICAgICAgICB0aGUgcG9pbnRlciBpcyBu
byBsb25nZXIgdXNlZCBhdCBhbGwgd2hpbGUgZHJhd2luZyBhIGZyYW1lIGluc2lkZQorICAgICAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW0uCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0
ZXN0cywgbm8gaW50ZW5kZWQgY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5k
ZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJl
bmRlclBhc3NJZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0Jh
Y2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1JlbmRlclBhc3NRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KExheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNz
OjpDQ1JlbmRlclBhc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyUGFzczo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpz
ZXRGcmFtZWJ1ZmZlck91dHB1dFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
UmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQ
YXNzRHJhd1F1YWQ6OkNDUmVuZGVyUGFzc0RyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oOgorICAgICAgICAoQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzRHJhd1F1
YWQ6OnJlbmRlclBhc3NJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVh
ZDo6Y29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQ0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmg6CisgICAgICAgIChDQ1JlbmRlcmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnB1c2hUaWxlUHJvcGVydGllcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5o
OgorICAgICAgICAoQ0NUaWxlZExheWVySW1wbCk6CisKIDIwMTItMDctMDQgIEpvaG4gTWVsbG9y
ICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBUZXh0IEF1dG9zaXppbmc6IEFkZCBi
YXNpYyBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTI2NDRlMzE4ODdk
MTg4M2I5YTdiNDk2ZGUxZmQ2YmE5OGMwMWRjOS4uMWRmY2IwODU3Zjg3YTg5NDIzYjNmYWI2NzQ3
M2I0OWE3ZDY5ODA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxMi0wNy0wNSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbY2hyb21pdW1dIERlY291cGxlIFJlbmRlclBhc3MgZHJhd2luZyBmcm9tIENDUmVuZGVy
U3VyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTA1NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9MYXll
clJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKEZha2VDQ1JlbmRlcmVyQ2xpZW50
OjpGYWtlQ0NSZW5kZXJlckNsaWVudCk6CisKIDIwMTItMDctMDQgIERhbmEgSmFuc2VucyAgPGRh
bmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDbGVhciBSZW5kZXJTdXJm
YWNlcyBzdGlsbCB3aGVuIG5vIGlkbGUgcGFpbnQgd2lsbCBiZSBkb25lCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCBkZGQ3ZDUxNTMzZTVlODI4MGUwY2JhZDAzYTM4
MjRhMGMwNGFmZWRhLi4zNTNkNDVlODUzNzM1MjFlMjg4MTIxZjM0YjUwOWI5ZDVhZGM5OTkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTI3NCw4ICsyNzQsMTAg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQog
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygp
CiB7Ci0gICAgaWYgKG1faW1wbFRleHR1cmVNYW5hZ2VyKQotICAgICAgICBtX2ltcGxUZXh0dXJl
TWFuYWdlci0+ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2NhdG9y
LmdldCgpKTsKKyAgICBpZiAoIW1faW1wbFRleHR1cmVNYW5hZ2VyKQorICAgICAgICByZXR1cm47
CisgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMuY2xlYXIoKTsKKyAgICBtX2ltcGxUZXh0dXJlTWFu
YWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkp
OwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKQEAg
LTMxNSwxMiArMzE3LDU0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRl
clBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zCiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25z
dCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikKIHsKLSAgICAvLyBG
SVhNRTogR2V0IHRoaXMgbWVtb3J5IGxpbWl0IGZyb20gR1BVIE1lbW9yeSBNYW5hZ2VyCi0gICAg
c2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRv
ci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1heExpbWl0Qnl0ZXMgPSBU
ZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpOwotICAgIHNpemVf
dCBtZW1vcnlMaW1pdEJ5dGVzID0gbWF4TGltaXRCeXRlcyAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0
ZXMgPiAwdSA/IG1heExpbWl0Qnl0ZXMgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzIDogMHU7Cisg
ICAgSGFzaE1hcDx1bnNpZ25lZCwgY29uc3QgQ0NSZW5kZXJQYXNzKj4gcGFzc2VzSW5GcmFtZTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUo
KTsgKytpKQorICAgICAgICBwYXNzZXNJbkZyYW1lLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRl
cltpXS0+aWQoKSwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0uZ2V0KCkpOworCisgICAgVmVj
dG9yPHVuc2lnbmVkPiBwYXNzZXNUb0RlbGV0ZTsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBPd25Q
dHI8TWFuYWdlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsKKyAgICBm
b3IgKHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBhc3NJdGVy
YXRvciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3IpIHsKKyAg
ICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHBhc3Nlc0luRnJh
bWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICBpZiAoIXJlbmRlclBhc3NJbkZy
YW1lKSB7CisgICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJhdG9yLT5m
aXJzdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJlbmRlclBhc3NJbkZyYW1lLT5mcmFtZWJ1ZmZlck91
dHB1dFJlY3QoKS5zaXplKCk7CisgICAgICAgIEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0g
cGFzc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmICghdGV4dHVyZSB8fCAhdGV4
dHVyZS0+aXNWYWxpZChyZXF1aXJlZFNpemUsIHJlcXVpcmVkRm9ybWF0KSkgeworICAgICAgICAg
ICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBtX2ltcGxUZXh0dXJlTWFuYWdl
ci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtZW1vcnlMaW1pdEJ5dGVzKTsKKyAgICAvLyBEZWxl
dGUgUmVuZGVyUGFzcyB0ZXh0dXJlcyBmcm9tIHRoZSBwcmV2aW91cyBmcmFtZSB0aGF0IHdpbGwg
bm90IGJlIHVzZWQgYWdhaW4uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNzZXNUb0Rl
bGV0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMucmVtb3ZlKHBh
c3Nlc1RvRGVsZXRlW2ldKTsKKyAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3Rl
ZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOworCisgICAgLy8gQWxsIFJl
bmRlclBhc3MgdGV4dHVyZXMgc2hvdWxkIGJlIHJlc2VydmVkIGZvciB0aGUgY3VycmVudCBmcmFt
ZS4gRXZlcnkgUmVuZGVyUGFzcyB0ZXh0dXJlCisgICAgLy8gaXMga2VwdCByZXNlcnZlZCB1bnRp
bCBpdCBpcyByZW1vdmVkIGFuZCBkZWxldGVkLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTWFuYWdlZFRl
eHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFzc2VzSW5E
cmF3T3JkZXJbaV0tPmlkKCkpOworICAgICAgICBpZiAoIXRleHR1cmUpIHsKKyAgICAgICAgICAg
IE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gb3duVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVh
dGUobV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCkpOworICAgICAgICAgICAgdGV4dHVyZSA9IG93
blRleHR1cmUuZ2V0KCk7CisgICAgICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlcy5zZXQocmVu
ZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIG93blRleHR1cmUucmVsZWFzZSgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJlbmRlclBh
c3Nlc0luRHJhd09yZGVyW2ldLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKS5zaXplKCk7CisgICAg
ICAgIEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Cisg
ICAgICAgIGJvb2wgcmVzZXJ2ZWQgPSB0ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkU2l6ZSwgcmVx
dWlyZWRGb3JtYXQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc2VydmVkLCByZXNlcnZlZCk7
CisgICAgfQorfQorCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291
cmNlc0ZvclJlbmRlclBhc3NJZCh1bnNpZ25lZCBpZCkgY29uc3QKK3sKKyAgICBNYW5hZ2VkVGV4
dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChpZCk7CisgICAgcmV0dXJu
IHRleHR1cmUgJiYgdGV4dHVyZS0+dGV4dHVyZUlkKCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3MqIHJvb3RSZW5k
ZXJQYXNzKQpAQCAtNDE5LDYgKzQ2Myw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQogICAgICAgICBkcmF3WVVWVmlkZW9RdWFk
KHF1YWQtPnRvWVVWVmlkZW9EcmF3UXVhZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2ltcGxUZXh0
dXJlQWxsb2NhdG9yLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHF1YWQpCkBA
IC00ODgsNyArNTM0LDcgQEAgc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZpbHRlcnMoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdAogICAgIHJldHVybiBDQ1Jl
bmRlclN1cmZhY2VGaWx0ZXJzOjphcHBseShmaWx0ZXJzLCBzb3VyY2VUZXh0dXJlLT50ZXh0dXJl
SWQoKSwgc291cmNlVGV4dHVyZS0+c2l6ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsKIH0KIAot
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBD
Q1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQorUGFzc093blB0cjxNYW5hZ2VkVGV4dHVyZT4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQqIHF1YWQsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50
c0RldmljZVRyYW5zZm9ybSkKIHsKICAgICAvLyBUaGlzIG1ldGhvZCBkcmF3cyBhIGJhY2tncm91
bmQgZmlsdGVyLCB3aGljaCBhcHBsaWVzIGEgZmlsdGVyIHRvIGFueSBwaXhlbHMgYmVoaW5kIHRo
ZSBxdWFkIGFuZCBzZWVuIHRocm91Z2ggaXRzIGJhY2tncm91bmQuCiAgICAgLy8gVGhlIGFsZ29y
aXRobSB3b3JrcyBhcyBmb2xsb3dzOgpAQCAtNTA0LDE0ICs1NTAsMTMgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NE
cmF3UXVhZCogcXUKICAgICAvLwogICAgIC8vIFBpeGVsIGNvcGllcyBpbiB0aGlzIGFsZ29yaXRo
bSBvY2N1ciBhdCBzdGVwcyAyLCAzLCA0LCBhbmQgNS4KIAotICAgIENDUmVuZGVyU3VyZmFjZSog
ZHJhd2luZ1N1cmZhY2UgPSBxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKTsKICAg
ICBpZiAocXVhZC0+YmFja2dyb3VuZEZpbHRlcnMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTogV2Ugb25seSBhbGxv
dyBiYWNrZ3JvdW5kIGZpbHRlcnMgb24gYW4gb3BhcXVlIHJlbmRlciBzdXJmYWNlIGJlY2F1c2Ug
b3RoZXIgc3VyZmFjZXMgbWF5IGNvbnRhaW4KICAgICAvLyB0cmFuc2x1Y2VudCBwaXhlbHMsIGFu
ZCB0aGUgY29udGVudHMgYmVoaW5kIHRob3NlIHRyYW5zbHVjZW50IHBpeGVscyB3b3VsZG4ndCBo
YXZlIHRoZSBmaWx0ZXIgYXBwbGllZC4KICAgICBpZiAobV9jdXJyZW50UmVuZGVyUGFzcy0+aGFz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZSk7CiAKICAgICAv
LyBGSVhNRTogRG8gYSBzaW5nbGUgcmVhZGJhY2sgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIHJl
cGxpY2EgYW5kIGNhY2hlIHRoZSBmaWx0ZXJlZCByZXN1bHRzIChvbmNlIGZpbHRlciB0ZXh0dXJl
cyBhcmUgbm90IHJldXNlZCkuCkBAIC01MjYsMjAgKzU3MSwyMyBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdR
dWFkKiBxdQogCiAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBkZXZpY2VCYWNrZ3JvdW5kVGV4
dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCkp
OwogICAgIGlmICghZ2V0RnJhbWVidWZmZXJUZXh0dXJlKGRldmljZUJhY2tncm91bmRUZXh0dXJl
LmdldCgpLCBkZXZpY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIFNrQml0bWFwIGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZCA9IGFwcGx5Rmls
dGVycyh0aGlzLCBxdWFkLT5iYWNrZ3JvdW5kRmlsdGVycygpLCBkZXZpY2VCYWNrZ3JvdW5kVGV4
dHVyZS5nZXQoKSk7CiAgICAgaWYgKCFmaWx0ZXJlZERldmljZUJhY2tncm91bmQuZ2V0VGV4dHVy
ZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgR3JU
ZXh0dXJlKiB0ZXh0dXJlID0gcmVpbnRlcnByZXRfY2FzdDxHclRleHR1cmUqPihmaWx0ZXJlZERl
dmljZUJhY2tncm91bmQuZ2V0VGV4dHVyZSgpKTsKICAgICBpbnQgZmlsdGVyZWREZXZpY2VCYWNr
Z3JvdW5kVGV4dHVyZUlkID0gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwogCi0gICAgaWYg
KCFkcmF3aW5nU3VyZmFjZS0+cHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKHRoaXMpKQotICAgICAg
ICByZXR1cm47CisgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4dHVyZSA9
IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCkpOworICAg
IGlmICghYmFja2dyb3VuZFRleHR1cmUtPnJlc2VydmUocXVhZC0+cXVhZFJlY3QoKS5zaXplKCks
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBjb25zdCBDQ1JlbmRlclBhc3MqIHRhcmdldFJlbmRlclBhc3MgPSBtX2N1cnJlbnRSZW5kZXJQ
YXNzOwotICAgIGlmICh1c2VNYW5hZ2VkVGV4dHVyZShkcmF3aW5nU3VyZmFjZS0+YmFja2dyb3Vu
ZFRleHR1cmUoKSwgcXVhZC0+cXVhZFJlY3QoKSkpIHsKKyAgICBib29sIHVzaW5nQmFja2dyb3Vu
ZFRleHR1cmUgPSB1c2VNYW5hZ2VkVGV4dHVyZShiYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwgcXVh
ZC0+cXVhZFJlY3QoKSk7CisKKyAgICBpZiAodXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSkgewogICAg
ICAgICAvLyBDb3B5IHRoZSByZWFkYmFjayBwaXhlbHMgZnJvbSBkZXZpY2UgdG8gdGhlIGJhY2tn
cm91bmQgdGV4dHVyZSBmb3IgdGhlIHN1cmZhY2UuCiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm07CiAgICAgICAgIGRldmljZVRvRnJh
bWVidWZmZXJUcmFuc2Zvcm0udHJhbnNsYXRlKHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSAvIDIu
MCwgcXVhZC0+cXVhZFJlY3QoKS5oZWlnaHQoKSAvIDIuMCk7CkBAIC01NDksNDYgKzU5Nyw0NSBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0
IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdQogICAgICAgICBkZXZpY2VUb0ZyYW1lYnVmZmVyVHJh
bnNmb3JtLnRyYW5zbGF0ZShkZXZpY2VSZWN0LngoKSwgZGV2aWNlUmVjdC55KCkpOwogCiAgICAg
ICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihmaWx0ZXJlZERldmljZUJhY2tncm91bmRUZXh0
dXJlSWQsIGRldmljZVJlY3Quc2l6ZSgpLCBkZXZpY2VUb0ZyYW1lYnVmZmVyVHJhbnNmb3JtKTsK
LQotICAgICAgICB1c2VSZW5kZXJQYXNzKHRhcmdldFJlbmRlclBhc3MpOwogICAgIH0KKworICAg
IHVzZVJlbmRlclBhc3ModGFyZ2V0UmVuZGVyUGFzcyk7CisKKyAgICBpZiAoIXVzaW5nQmFja2dy
b3VuZFRleHR1cmUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBiYWNrZ3Jv
dW5kVGV4dHVyZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiB7Ci0g
ICAgLy8gVGhlIHJlcGxpY2EgaXMgYWx3YXlzIGRyYXduIGZpcnN0LCBzbyBmcmVlIGFmdGVyIGRy
YXdpbmcgdGhlIGNvbnRlbnRzLgotICAgIGJvb2wgc2hvdWxkUmVsZWFzZVRleHR1cmVzID0gIXF1
YWQtPmlzUmVwbGljYSgpOwotCi0gICAgQ0NSZW5kZXJTdXJmYWNlKiBkcmF3aW5nU3VyZmFjZSA9
IHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpOwotCiAgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggcmVuZGVyVHJhbnNmb3JtID0gcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKTsKICAg
ICAvLyBBcHBseSBhIHNjYWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8g
aXRzIGludGVuZGVkIHNpemUuCiAgICAgcmVuZGVyVHJhbnNmb3JtLnNjYWxlM2QocXVhZC0+cXVh
ZFJlY3QoKS53aWR0aCgpLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpLCAxKTsKICAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9ybSA9IFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4KHdpbmRvd01hdHJpeCgpICogcHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVy
VHJhbnNmb3JtKS50bzJkVHJhbnNmb3JtKCk7CiAKICAgICAvLyBDYW4gb25seSBkcmF3IHN1cmZh
Y2UgaWYgZGV2aWNlIG1hdHJpeCBpcyBpbnZlcnRpYmxlLgotICAgIGlmICghY29udGVudHNEZXZp
Y2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkgfHwgIWRyYXdpbmdTdXJmYWNlLT5oYXNWYWxpZENv
bnRlbnRzVGV4dHVyZSgpKSB7Ci0gICAgICAgIGlmIChzaG91bGRSZWxlYXNlVGV4dHVyZXMpIHsK
LSAgICAgICAgICAgIGRyYXdpbmdTdXJmYWNlLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsK
LSAgICAgICAgICAgIGRyYXdpbmdTdXJmYWNlLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Ci0g
ICAgICAgIH0KKyAgICBpZiAoIWNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1
YWQsIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKKyAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVu
dHNUZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgp
KTsKKyAgICBBU1NFUlQoY29udGVudHNUZXh0dXJlICYmIGNvbnRlbnRzVGV4dHVyZS0+dGV4dHVy
ZUlkKCkpOworCisgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4dHVyZSA9
IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhxdWFkLCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7CiAK
ICAgICAvLyBGSVhNRTogQ2FjaGUgdGhpcyB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8g
ZG8gaXQgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLgogICAgIC8vIEFwcGx5
IGZpbHRlcnMgdG8gdGhlIGNvbnRlbnRzIHRleHR1cmUuCi0gICAgU2tCaXRtYXAgZmlsdGVyQml0
bWFwID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmZpbHRlcnMoKSwgZHJhd2luZ1N1cmZhY2Ut
PmNvbnRlbnRzVGV4dHVyZSgpKTsKLSAgICBpbnQgY29udGVudHNUZXh0dXJlSWQgPSBkcmF3aW5n
U3VyZmFjZS0+Y29udGVudHNUZXh0dXJlKCktPnRleHR1cmVJZCgpOworICAgIFNrQml0bWFwIGZp
bHRlckJpdG1hcCA9IGFwcGx5RmlsdGVycyh0aGlzLCBxdWFkLT5maWx0ZXJzKCksIGNvbnRlbnRz
VGV4dHVyZSk7CisgICAgaW50IGNvbnRlbnRzVGV4dHVyZUlkID0gY29udGVudHNUZXh0dXJlLT50
ZXh0dXJlSWQoKTsKICAgICBpZiAoZmlsdGVyQml0bWFwLmdldFRleHR1cmUoKSkgewogICAgICAg
ICBHclRleHR1cmUqIHRleHR1cmUgPSByZWludGVycHJldF9jYXN0PEdyVGV4dHVyZSo+KGZpbHRl
ckJpdG1hcC5nZXRUZXh0dXJlKCkpOwogICAgICAgICBjb250ZW50c1RleHR1cmVJZCA9IHRleHR1
cmUtPmdldFRleHR1cmVIYW5kbGUoKTsKICAgICB9CiAKICAgICAvLyBEcmF3IHRoZSBiYWNrZ3Jv
dW5kIHRleHR1cmUgaWYgdGhlcmUgaXMgb25lLgotICAgIGlmIChkcmF3aW5nU3VyZmFjZS0+aGFz
VmFsaWRCYWNrZ3JvdW5kVGV4dHVyZSgpKQotICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZm
ZXIoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRUZXh0dXJlKCktPnRleHR1cmVJZCgpLCBxdWFk
LT5xdWFkUmVjdCgpLnNpemUoKSwgcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAgaWYgKGJh
Y2tncm91bmRUZXh0dXJlKSB7CisgICAgICAgIEFTU0VSVChiYWNrZ3JvdW5kVGV4dHVyZS0+c2l6
ZSgpID09IHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpKTsKKyAgICAgICAgY29weVRleHR1cmVUb0Zy
YW1lYnVmZmVyKGJhY2tncm91bmRUZXh0dXJlLT50ZXh0dXJlSWQoKSwgcXVhZC0+cXVhZFJlY3Qo
KS5zaXplKCksIHF1YWQtPmxheWVyVHJhbnNmb3JtKCkpOworICAgIH0KIAogICAgIGJvb2wgY2xp
cHBlZCA9IGZhbHNlOwogICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkID0gQ0NNYXRoVXRpbDo6bWFw
UXVhZChjb250ZW50c0RldmljZVRyYW5zZm9ybSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksIGNsaXBw
ZWQpOwpAQCAtNjcxLDExICs3MTgsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogCiAgICAg
ZHJhd1RleHR1cmVkUXVhZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBxdWFkLT5xdWFkUmVjdCgp
LndpZHRoKCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc3Vy
ZmFjZVF1YWQsCiAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiwgc2hh
ZGVyQWxwaGFMb2NhdGlvbiwgc2hhZGVyUXVhZExvY2F0aW9uKTsKLQotICAgIGlmIChzaG91bGRS
ZWxlYXNlVGV4dHVyZXMpIHsKLSAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VCYWNrZ3Jv
dW5kVGV4dHVyZSgpOwotICAgICAgICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUNvbnRlbnRzVGV4
dHVyZSgpOwotICAgIH0KIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTb2xp
ZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCogcXVhZCkKQEAgLTEwNzcsOSAr
MTExOSw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUo
KQogewogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRl
eHQzRDo6U0NJU1NPUl9URVNUKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCkpOwotCi0gICAgbV9pbXBsVGV4dHVyZU1hbmFn
ZXItPnVucHJvdGVjdEFsbFRleHR1cmVzKCk7Ci0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPmRl
bGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIH0KIAog
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwg
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCkBAIC0xMzM3LDEwICsxMzc2LDEwIEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1c2VSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVy
UGFzcyogcmVuZGVyUGFzcykKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYg
KCFyZW5kZXJQYXNzLT50YXJnZXRTdXJmYWNlKCktPnByZXBhcmVDb250ZW50c1RleHR1cmUodGhp
cykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9
IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChyZW5kZXJQYXNzLT5pZCgpKTsKKyAgICBBU1NFUlQo
dGV4dHVyZSk7CiAKLSAgICByZXR1cm4gYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKHJlbmRlclBh
c3MtPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCksIHJlbmRlclBhc3MtPmZyYW1l
YnVmZmVyT3V0cHV0UmVjdCgpKTsKKyAgICByZXR1cm4gYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJl
KHRleHR1cmUsIHJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpKTsKIH0KIAogYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVzZU1hbmFnZWRUZXh0dXJlKE1hbmFnZWRUZXh0dXJl
KiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpCkBAIC0xNDI5LDkgKzE0Njgs
NyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMo
KQogCiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAotICAgIG1faW1w
bFRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6
aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0
ZXModmlld3BvcnRTaXplKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9pbXBs
VGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksIG1f
Y2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKICAgICBtX3RleHR1cmVDb3BpZXIgPSBBY2Nl
bGVyYXRlZFRleHR1cmVDb3BpZXI6OmNyZWF0ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRVbmlm
b3JtKTsKICAgICBpZiAobV90ZXh0dXJlVXBsb2FkZXJTZXR0aW5nID09IFRocm90dGxlZFVwbG9h
ZGVyKQogICAgICAgICBtX3RleHR1cmVVcGxvYWRlciA9IFRocm90dGxlZFRleHR1cmVVcGxvYWRl
cjo6Y3JlYXRlKG1fY29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmlu
ZGV4IDYyNWU4MmYwODhlMDcyMTUyZWVkYmNjNjQ4Y2JjODUyOWVmYzVhMTguLmZlYzUwMWY5M2E2
ZTViYmIyYzA1MDgyOTUyMTBiZDRiYjNlMzNhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCkBAIC04MCw2ICs4MCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBGbG9hdFF1YWQm
IHNoYXJlZEdlb21ldHJ5UXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkR2VvbWV0cnlRdWFk
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJh
bWUoY29uc3QgQ0NSZW5kZXJQYXNzTGlzdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBo
YXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHVuc2lnbmVkIGlkKSBjb25zdCBPVkVS
UklERTsKKwogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZShjb25zdCBDQ1JlbmRl
clBhc3MqIGRlZmF1bHRSZW5kZXJQYXNzKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZHJh
d1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1
ZmZlckRhbWFnZVJlY3QpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hEcmF3aW5n
RnJhbWUoKSBPVkVSUklERTsKQEAgLTEyMywxMyArMTI1LDE1IEBAIHByb3RlY3RlZDoKICAgICBi
b29sIGlzRnJhbWVidWZmZXJEaXNjYXJkZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVidWZm
ZXJEaXNjYXJkZWQ7IH0KICAgICBib29sIGluaXRpYWxpemUoKTsKIAorICAgIHZvaWQgcmVsZWFz
ZVJlbmRlclBhc3NUZXh0dXJlcygpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHRvR0xN
YXRyaXgoZmxvYXQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAK
ICAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdDaGVj
a2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqKTsKICAgICB2b2lkIGRy
YXdEZWJ1Z0JvcmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7Ci0gICAgdm9p
ZCBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqLCBjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pOworICAg
IFBhc3NPd25QdHI8TWFuYWdlZFRleHR1cmU+IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBD
Q1JlbmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGRldmljZVRyYW5zZm9ybSk7CiAgICAgdm9pZCBkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3Qg
Q0NSZW5kZXJQYXNzRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdTb2xpZENvbG9yUXVhZChjb25z
dCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd1N0cmVhbVZpZGVvUXVhZChj
b25zdCBDQ1N0cmVhbVZpZGVvRHJhd1F1YWQqKTsKQEAgLTE0OSw4ICsxNTMsNiBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBjbGVhclJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3Qg
RmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpOwogCi0gICAgdm9pZCByZWxlYXNlUmVu
ZGVyUGFzc1RleHR1cmVzKCk7Ci0KICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAg
ICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOwpAQCAtMjYzLDYgKzI2NSw4IEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gbV9jb250ZW50c1Rl
eHR1cmVBbGxvY2F0b3I7CiAgICAgT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gbV9p
bXBsVGV4dHVyZUFsbG9jYXRvcjsKIAorICAgIEhhc2hNYXA8dW5zaWduZWQsIE93blB0cjxNYW5h
Z2VkVGV4dHVyZT4gPiBtX3JlbmRlclBhc3NUZXh0dXJlczsKKwogICAgIFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKIAogICAgIGNvbnN0IENDUmVuZGVyUGFzcyogbV9k
ZWZhdWx0UmVuZGVyUGFzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAK
aW5kZXggMTk1NzQzNzY1NTg2MGJjOTk1MWY0YTEwZWM0ZWVlZGIyMTA3MDM5MC4uYTZiYzU3NTFm
MGZjNTBkODJjZWNjZTkzMDBhZWVmY2NhYTlkYzM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKQEAgLTI5NSw3ICsyOTUsOCBAQCBib29sIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhGcmFtZURhdGEmIGZyYW1lKQogICAgICAgICBD
Q0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyID0gKCpmcmFtZS5yZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KVtzdXJmYWNlSW5kZXhdOwogICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1
cmZhY2UgPSByZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKIAotICAgICAgICBP
d25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3Vy
ZmFjZSk7CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgaWQgZ2xvYmFsIGFjcm9zcyBhbGwg
Y29tcG9zaXRvcnMgKGluY2x1ZGUgYSBjb21wb3NpdG9yIGlkPykKKyAgICAgICAgT3duUHRyPEND
UmVuZGVyUGFzcz4gcGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UsIHJl
bmRlclN1cmZhY2VMYXllci0+aWQoKSk7CiAgICAgICAgIHN1cmZhY2VQYXNzTWFwLmFkZChyZW5k
ZXJTdXJmYWNlLCBwYXNzLmdldCgpKTsKICAgICAgICAgZnJhbWUucmVuZGVyUGFzc2VzLmFwcGVu
ZChwYXNzLnJlbGVhc2UoKSk7CiAgICAgfQpAQCAtMzUxLDcgKzM1Miw3IEBAIGJvb2wgQ0NMYXll
clRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFzc2VzKEZyYW1lRGF0YSYgZnJhbWUpCiAg
ICAgICAgIG9jY2x1c2lvblRyYWNrZXIub3ZlcmRyYXdNZXRyaWNzKCkucmVjb3JkTWV0cmljcyh0
aGlzKTsKIAogICAgIG1fbGF5ZXJSZW5kZXJlci0+ZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25z
Rm9yRnJhbWUoZnJhbWUucmVuZGVyUGFzc2VzKTsKLSAgICByZW1vdmVQYXNzZXNXaXRoQ2FjaGVk
VGV4dHVyZXMoZnJhbWUucmVuZGVyUGFzc2VzLCBmcmFtZS5za2lwcGVkUGFzc2VzKTsKKyAgICBy
ZW1vdmVQYXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXMoZnJhbWUucmVuZGVyUGFzc2VzLCBmcmFtZS5z
a2lwcGVkUGFzc2VzLCBtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGRyYXdG
cmFtZTsKIH0KQEAgLTQzMSw3ICs0MzIsNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJl
bW92ZVJlbmRlclBhc3Nlc1JlY3Vyc2l2ZShDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsCiAgICAg
c2tpcHBlZFBhc3Nlcy5hcHBlbmQocmVtb3ZlZFBhc3MucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpyZW1vdmVQYXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXMoQ0NSZW5k
ZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ1JlbmRlclBhc3NMaXN0JiBza2lwcGVkUGFzc2VzKQordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZW1vdmVQYXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXMoQ0NS
ZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ1JlbmRlclBhc3NMaXN0JiBza2lwcGVkUGFzc2VzLCBj
b25zdCBDQ1JlbmRlcmVyKiByZW5kZXJlcikKIHsKICAgICBmb3IgKGludCBwYXNzSW5kZXggPSBw
YXNzZXMuc2l6ZSgpIC0gMTsgcGFzc0luZGV4ID49IDA7IC0tcGFzc0luZGV4KSB7CiAgICAgICAg
IENDUmVuZGVyUGFzcyogY3VycmVudFBhc3MgPSBwYXNzZXNbcGFzc0luZGV4XS5nZXQoKTsKQEAg
LTQ0NSwxNCArNDQ2LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZW1vdmVQYXNzZXNX
aXRoQ2FjaGVkVGV4dHVyZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2UKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHJlbmRlclBh
c3NRdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihjdXJyZW50UXVhZCk7
Ci0gICAgICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UgPSByZW5kZXJQYXNz
UXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCk7Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXRTdXJmYWNlLT5jb250ZW50c0NoYW5nZWQoKSB8fCAhdGFyZ2V0U3VyZmFjZS0+aGFzQ2Fj
aGVkQ29udGVudHNUZXh0dXJlKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgIC8vIFJlc2VydmUgdGhlIHRleHR1cmUgaW1tZWRpYXRlbHkuIFdlIGRvIG5vdCBuZWVk
IHRvIHBhc3MgaW4gbGF5ZXIgcmVuZGVyZXIKLSAgICAgICAgICAgIC8vIHNpbmNlIHRoZSB0ZXh0
dXJlIGFscmVhZHkgZXhpc3RzLCBqdXN0IG5lZWRzIHRvIGJlIHJlc2VydmVkLgotICAgICAgICAg
ICAgaWYgKCF0YXJnZXRTdXJmYWNlLT5wcmVwYXJlQ29udGVudHNUZXh0dXJlKDApKQorICAgICAg
ICAgICAgaWYgKHJlbmRlclBhc3NRdWFkLT5jb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSgp
IHx8ICFyZW5kZXJlci0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChyZW5kZXJQ
YXNzUXVhZC0+cmVuZGVyUGFzc0lkKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgICAgICAvLyBXZSBhcmUgY2hhbmdpbmcgdGhlIHZlY3RvciBpbiB0aGUgbWlkZGxlIG9m
IHJldmVyc2UgaXRlcmF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmlu
ZGV4IDlkOGZiM2M0NTc1YWVjYWM3YWFmOGNkMDBkOGZhOTZkN2YxYWIwOTIuLjk2N2RmODFhNGQx
ZThjMTJiZDhmYjgxMDkyMjVjMjEwMGZkOGVmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgQ0NEZWJ1Z1JlY3RI
aXN0b3J5KiBkZWJ1Z1JlY3RIaXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z1JlY3RIaXN0
b3J5LmdldCgpOyB9CiAKICAgICAvLyBSZW1vdmVzIGFsbCByZW5kZXIgcGFzc2VzIGZvciB3aGlj
aCB3ZSBoYXZlIGNhY2hlZCB0ZXh0dXJlcywgYW5kIHdoaWNoIGRpZCBub3QgY2hhbmdlIHRoZWly
IGNvbnRlbnQuCi0gICAgc3RhdGljIHZvaWQgcmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVz
KENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3Nl
cyk7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKENDUmVu
ZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3NlcywgY29u
c3QgQ0NSZW5kZXJlciopOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbChj
b25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggMjhhY2RkN2M5YjQ3YmRmYjdmMmI4NWY1ZTkx
OThiOGZlODdlN2UzMy4uYzMyN2FmN2VkZGU0NDI0YWM4ZGRhMGJkYmIyMjMxZDI0OTBlZjg0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0zNywxNyArMzcsMTkgQEAgdXNpbmcgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzT3duUHRyPENDUmVuZGVyUGFzcz4gQ0NSZW5kZXJQYXNzOjpjcmVhdGUoQ0NSZW5kZXJTdXJm
YWNlKiB0YXJnZXRTdXJmYWNlKQorUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IENDUmVuZGVyUGFz
czo6Y3JlYXRlKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgdW5zaWduZWQgaWQpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1JlbmRlclBhc3ModGFyZ2V0U3VyZmFjZSkpOwor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzKHRhcmdldFN1cmZhY2UsIGlkKSk7
CiB9CiAKLUNDUmVuZGVyUGFzczo6Q0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0
U3VyZmFjZSkKLSAgICA6IG1fdGFyZ2V0U3VyZmFjZSh0YXJnZXRTdXJmYWNlKQorQ0NSZW5kZXJQ
YXNzOjpDQ1JlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlLCB1bnNpZ25l
ZCBpZCkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3RhcmdldFN1cmZhY2UodGFyZ2V0U3VyZmFj
ZSkKICAgICAsIG1fZnJhbWVidWZmZXJPdXRwdXRSZWN0KHRhcmdldFN1cmZhY2UtPmNvbnRlbnRS
ZWN0KCkpCiAgICAgLCBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCh0cnVlKQogewotICAgIEFT
U0VSVChtX3RhcmdldFN1cmZhY2UpOworICAgIEFTU0VSVCh0YXJnZXRTdXJmYWNlKTsKKyAgICBB
U1NFUlQoaWQpOwogfQogCiB2b2lkIENDUmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JMYXllcihD
Q0xheWVySW1wbCogbGF5ZXIsIENDT2NjbHVzaW9uVHJhY2tlckltcGwqIG9jY2x1c2lvblRyYWNr
ZXIsIGJvb2wmIGhhZE1pc3NpbmdUaWxlcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggZGVl
NTViZjdmNmNmZWYxOTI0YmNhYjUzY2RlZWVlMTlkNjllMjhhYy4uODYxY2YyNzMxODNkMjY1NTMx
Zjk1NGNjNTU1ZWMyYTE4NjkyNjY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTUzLDE0
ICs1MywxNyBAQCBwdWJsaWM6CiBjbGFzcyBDQ1JlbmRlclBhc3MgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENDUmVuZGVyUGFzcyk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8
Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKik7CisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiwgdW5zaWduZWQgaWQp
OwogCiAgICAgdm9pZCBhcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5ZXJJbXBsKiwgQ0NPY2NsdXNp
b25UcmFja2VySW1wbCosIGJvb2wmIGhhZE1pc3NpbmdUaWxlcyk7CiAgICAgdm9pZCBhcHBlbmRR
dWFkc0ZvclJlbmRlclN1cmZhY2VMYXllcihDQ0xheWVySW1wbCosIGNvbnN0IENDUmVuZGVyUGFz
cyogY29udHJpYnV0aW5nUmVuZGVyUGFzcywgQ0NPY2NsdXNpb25UcmFja2VySW1wbCopOwogICAg
IHZvaWQgYXBwZW5kUXVhZHNUb0ZpbGxTY3JlZW4oQ0NMYXllckltcGwqIHJvb3RMYXllciwgU2tD
b2xvciBzY3JlZW5CYWNrZ3JvdW5kQ29sb3IsIGNvbnN0IENDT2NjbHVzaW9uVHJhY2tlckltcGwm
KTsKIAogICAgIGNvbnN0IENDUXVhZExpc3QmIHF1YWRMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9x
dWFkTGlzdDsgfQorCisgICAgdW5zaWduZWQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAg
ICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXRTdXJmYWNlOyB9CisKICAgICAvLyBUaGlzIGRlbm90ZXMgdGhlIGJvdW5kcyBpbiBwaHlzaWNh
bCBwaXhlbHMgb2YgdGhlIG91dHB1dCBnZW5lcmF0ZWQgYnkgdGhpcyBSZW5kZXJQYXNzLgogICAg
IGNvbnN0IEludFJlY3QmIGZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWVidWZmZXJPdXRwdXRSZWN0OyB9CiAKQEAgLTY4LDggKzcxLDkgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0SGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wgdHJhbnNwYXJlbnQpIHsgbV9o
YXNUcmFuc3BhcmVudEJhY2tncm91bmQgPSB0cmFuc3BhcmVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0g
ICAgZXhwbGljaXQgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSopOworICAgIENDUmVuZGVy
UGFzcyhDQ1JlbmRlclN1cmZhY2UqLCB1bnNpZ25lZCBpZCk7CiAKKyAgICB1bnNpZ25lZCBtX2lk
OwogICAgIENDUmVuZGVyU3VyZmFjZSogbV90YXJnZXRTdXJmYWNlOwogICAgIENDUXVhZExpc3Qg
bV9xdWFkTGlzdDsKICAgICBJbnRSZWN0IG1fZnJhbWVidWZmZXJPdXRwdXRSZWN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwCmluZGV4IDhkYzRmZjY2YTFjNzE3M2Jl
NzM3NGE2MjVkYjk5Y2Y0MDdiMWQ2ZTMuLjU0Zjc3ZGI2NGQwYzAxNTFhYjE4MmMwYjc2ZjM0ODA1
NDY4YzBjOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAKQEAg
LTI3LDIwICsyNywyNCBAQAogCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaCIK
IAorI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzcy5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IENDUmVuZGVyUGFzc0RyYXdRdWFkOjpj
cmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50
UmVjdCYgcXVhZFJlY3QsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgYm9vbCBpc1Jl
cGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3Qg
V2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQg
bWFza1RleHR1cmVJZCkKK1Bhc3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IENDUmVuZGVy
UGFzc0RyYXdRdWFkOjpjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRT
dGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVy
UGFzcywgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
ZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmls
dGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgYm9vbCBjb250ZW50c0NoYW5nZWRTaW5jZUxh
c3RGcmFtZSkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDUmVuZGVyUGFzc0RyYXdRdWFk
KHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHJlbmRlclBhc3MsIGlzUmVwbGljYSwgZmlsdGVy
cywgYmFja2dyb3VuZEZpbHRlcnMsIG1hc2tUZXh0dXJlSWQpKTsKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDUmVuZGVyUGFzc0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgcXVhZFJlY3QsIHJl
bmRlclBhc3MsIGlzUmVwbGljYSwgZmlsdGVycywgYmFja2dyb3VuZEZpbHRlcnMsIG1hc2tUZXh0
dXJlSWQsIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKSk7CiB9CiAKLUNDUmVuZGVyUGFz
c0RyYXdRdWFkOjpDQ1JlbmRlclBhc3NEcmF3UXVhZChjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSog
c2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgQ0NSZW5kZXJQ
YXNzKiByZW5kZXJQYXNzLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJh
Y2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKQorQ0NSZW5kZXJQYXNzRHJh
d1F1YWQ6OkNDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFy
ZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDQ1JlbmRlclBhc3Mq
IHJlbmRlclBhc3MsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dy
b3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGJvb2wgY29udGVudHNDaGFuZ2Vk
U2luY2VMYXN0RnJhbWUpCiAgICAgOiBDQ0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3
UXVhZDo6UmVuZGVyUGFzcywgcXVhZFJlY3QpCiAgICAgLCBtX3JlbmRlclBhc3MocmVuZGVyUGFz
cykKKyAgICAsIG1fcmVuZGVyUGFzc0lkKHJlbmRlclBhc3MtPmlkKCkpCiAgICAgLCBtX2lzUmVw
bGljYShpc1JlcGxpY2EpCiAgICAgLCBtX2ZpbHRlcnMoZmlsdGVycykKICAgICAsIG1fYmFja2dy
b3VuZEZpbHRlcnMoYmFja2dyb3VuZEZpbHRlcnMpCiAgICAgLCBtX21hc2tUZXh0dXJlSWQobWFz
a1RleHR1cmVJZCkKKyAgICAsIG1fY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUoY29udGVu
dHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyUGFzcyk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaAppbmRleCAzY2M2ZjI2MDcxYTMz
YzAyMzA2YWVhZDllMDhiMDg3MzMzNGUzMWU4Li45NTVkMDBiZjg0YmJmOTQwMmRhNWRmMjkzMDdh
ZGU5NDIwMDNkY2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgKQEAg
LTM3LDIzICszNywyNyBAQCBjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBDQ1JlbmRlclBhc3NE
cmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q1JlbmRlclBhc3NEcmF3UXVhZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NS
ZW5kZXJQYXNzRHJhd1F1YWQ+IGNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0
IEludFJlY3QmLCBjb25zdCBDQ1JlbmRlclBhc3MqLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRl
ck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gY3JlYXRlKGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyos
IGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMs
IHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGJvb2wgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJh
bWUpOwogCiAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKCkgY29uc3QgeyByZXR1
cm4gbV9yZW5kZXJQYXNzOyB9CisgICAgdW5zaWduZWQgcmVuZGVyUGFzc0lkKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJQYXNzSWQ7IH0KICAgICBib29sIGlzUmVwbGljYSgpIGNvbnN0IHsgcmV0
dXJuIG1faXNSZXBsaWNhOyB9CiAgICAgdW5zaWduZWQgbWFza1RleHR1cmVJZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFza1RleHR1cmVJZDsgfQorICAgIGJvb2wgY29udGVudHNDaGFuZ2VkU2luY2VM
YXN0RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1l
OyB9CiAKICAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBj
b25zdCB7IHJldHVybiBtX2ZpbHRlcnM7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9w
ZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5k
RmlsdGVyczsgfQogCiBwcml2YXRlOgotICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyosIGJv
b2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMs
IGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVu
c2lnbmVkIG1hc2tUZXh0dXJlSWQpOworICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyosIGJv
b2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMs
IGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVu
c2lnbmVkIG1hc2tUZXh0dXJlSWQsIGJvb2wgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUp
OwogCiAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBtX3JlbmRlclBhc3M7CisgICAgdW5zaWduZWQg
bV9yZW5kZXJQYXNzSWQ7CiAgICAgYm9vbCBtX2lzUmVwbGljYTsKICAgICBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMgbV9maWx0ZXJzOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9u
cyBtX2JhY2tncm91bmRGaWx0ZXJzOwogICAgIHVuc2lnbmVkIG1fbWFza1RleHR1cmVJZDsKKyAg
ICBib29sIG1fY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWU7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCBkMDk0MDFjNGYyM2UwOWU1MTJlNjI0OTk4NGJl
NGNkZThhOTRhMmExLi5mY2E0YTcxMzg2ZDc2OTQ5NDc5OGNkODI2MmMxZWE4YWViMzRiZjdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCi0jaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFt
LmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1hZ2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1
Z0JvcmRlckRyYXdRdWFkLmgiCkBAIC04NSw3NSArODQsNiBAQCBGbG9hdFJlY3QgQ0NSZW5kZXJT
dXJmYWNlOjpkcmF3YWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKICAgICByZXR1cm4gZHJhd2FibGVD
b250ZW50UmVjdDsKIH0KIAotYm9vbCBDQ1JlbmRlclN1cmZhY2U6OnByZXBhcmVDb250ZW50c1Rl
eHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIC8vIEZJ
WE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgc2VwYXJhdGVkIGludG8gdHdvOiBvbmUgdG8gcmVz
ZXJ2ZSBhbgotICAgIC8vIGV4aXN0aW5nIHN1cmZhY2UsIGFuZCBvbmUgdG8gY3JlYXRlIGEgbmV3
IG9uZS4gVGhhdCB3YXkgd2Ugd2lsbCBub3QKLSAgICAvLyBuZWVkIHRvIHBhc3MgbnVsbCBsYXll
clJlbmRlcmVyLgotICAgIGlmIChsYXllclJlbmRlcmVyKSB7Ci0gICAgICAgIFRleHR1cmVNYW5h
Z2VyKiB0ZXh0dXJlTWFuYWdlciA9IGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlTWFuYWdlcigp
OwotCi0gICAgICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAgICAgICBtX2NvbnRl
bnRzVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUodGV4dHVyZU1hbmFnZXIpOwotICAg
IH0KLQotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUtPnJlc2VydmUobV9jb250ZW50
UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxl
YXNlQ29udGVudHNUZXh0dXJlKCkKLXsKLSAgICBpZiAoIW1fY29udGVudHNUZXh0dXJlIHx8ICFt
X2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9j
b250ZW50c1RleHR1cmUtPnVucmVzZXJ2ZSgpOwotfQotCi1ib29sIENDUmVuZGVyU3VyZmFjZTo6
aGFzVmFsaWRDb250ZW50c1RleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRz
VGV4dHVyZSAmJiBtX2NvbnRlbnRzVGV4dHVyZS0+aXNSZXNlcnZlZCgpICYmIG1fY29udGVudHNU
ZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSk7Ci19Ci0KLWJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNDYWNoZWRDb250ZW50c1RleHR1
cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZSAmJiBtX2NvbnRlbnRz
VGV4dHVyZS0+aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEpOwotfQotCi1ib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUJhY2tncm91bmRUZXh0
dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKLXsKLSAgICBUZXh0dXJl
TWFuYWdlciogdGV4dHVyZU1hbmFnZXIgPSBsYXllclJlbmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFn
ZXIoKTsKLQotICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZSkKLSAgICAgICAgbV9iYWNrZ3Jv
dW5kVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUodGV4dHVyZU1hbmFnZXIpOwotCi0g
ICAgaWYgKG1fYmFja2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoIW1fYmFja2dyb3VuZFRleHR1cmUtPnJlc2VydmUobV9jb250ZW50
UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxl
YXNlQmFja2dyb3VuZFRleHR1cmUoKQotewotICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZSB8
fCAhbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+dW5yZXNlcnZlKCk7Ci19Ci0KLWJvb2wgQ0NSZW5kZXJT
dXJmYWNlOjpoYXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9iYWNrZ3JvdW5kVGV4dHVyZSAmJiBtX2JhY2tncm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkg
JiYgbV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNWYWxpZChtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEpOwotfQotCiBTdHJpbmcgQ0NSZW5kZXJTdXJmYWNlOjpuYW1l
KCkgY29uc3QKIHsKICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlJlbmRlclN1cmZhY2UoaWQ9
JWksb3duZXI9JXMpIiwgbV9vd25pbmdMYXllci0+aWQoKSwgbV9vd25pbmdMYXllci0+ZGVidWdO
YW1lKCkudXRmOCgpLmRhdGEoKSk7CkBAIC0zMDMsNyArMjMzLDcgQEAgdm9pZCBDQ1JlbmRlclN1
cmZhY2U6OmFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYgcXVhZExpc3QsIENDU2hhcmVkUXVhZFN0
YXRlKiBzaGEKIAogICAgIGludCBtYXNrVGV4dHVyZUlkID0gbWFza0xheWVyID8gbWFza0xheWVy
LT5jb250ZW50c1RleHR1cmVJZCgpIDogMDsKIAotICAgIHF1YWRMaXN0LmFwcGVuZFN1cmZhY2Uo
Q0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0
KCksIHJlbmRlclBhc3MsIGZvclJlcGxpY2EsIGZpbHRlcnMoKSwgYmFja2dyb3VuZEZpbHRlcnMo
KSwgbWFza1RleHR1cmVJZCkpOworICAgIHF1YWRMaXN0LmFwcGVuZFN1cmZhY2UoQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQ6OmNyZWF0ZShzaGFyZWRRdWFkU3RhdGUsIGNvbnRlbnRSZWN0KCksIHJlbmRl
clBhc3MsIGZvclJlcGxpY2EsIGZpbHRlcnMoKSwgYmFja2dyb3VuZEZpbHRlcnMoKSwgbWFza1Rl
eHR1cmVJZCwgY29udGVudHNDaGFuZ2VkKCkpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1
cmZhY2UuaAppbmRleCAwMjllMWY2MDQ0MTRjY2ZlYjEzMDU4ZWY0YWFjODEzNzlmOTUwOGY0Li44
OTRlYTVhZWEyZWZhZWU2YmNmMDE1YjM4MGUwMzEyMjMzNGE5ZDcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuaApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5j
bHVkZSA8cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxwdWJsaWMvV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAg
LTQ1LDcgKzQ0LDYgQEAgY2xhc3MgQ0NSZW5kZXJQYXNzOwogY2xhc3MgQ0NTaGFyZWRRdWFkU3Rh
dGU7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bTsKLWNs
YXNzIE1hbmFnZWRUZXh0dXJlOwogY2xhc3MgVGV4dFN0cmVhbTsKIAogY2xhc3MgQ0NSZW5kZXJT
dXJmYWNlIHsKQEAgLTU0LDE1ICs1Miw2IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBDQ1JlbmRl
clN1cmZhY2UoQ0NMYXllckltcGwqKTsKICAgICB2aXJ0dWFsIH5DQ1JlbmRlclN1cmZhY2UoKTsK
IAotICAgIHZpcnR1YWwgYm9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSopOwotICAgIHZvaWQgcmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOwotICAgIGJvb2wg
aGFzVmFsaWRDb250ZW50c1RleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQ2Fj
aGVkQ29udGVudHNUZXh0dXJlKCkgY29uc3Q7Ci0KLSAgICBib29sIHByZXBhcmVCYWNrZ3JvdW5k
VGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKLSAgICB2b2lkIHJlbGVhc2VCYWNrZ3Jv
dW5kVGV4dHVyZSgpOwotICAgIGJvb2wgaGFzVmFsaWRCYWNrZ3JvdW5kVGV4dHVyZSgpIGNvbnN0
OwotCiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdDsKICAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRT
dHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIApAQCAtMTE2LDcgKzEwNSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFNjaXNzb3JSZWN0KGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0KSB7IG1f
c2Npc3NvclJlY3QgPSBzY2lzc29yUmVjdDsgfQogICAgIGNvbnN0IEludFJlY3QmIHNjaXNzb3JS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zY2lzc29yUmVjdDsgfQogCi0gICAgdmlydHVhbCBib29s
IGNvbnRlbnRzQ2hhbmdlZCgpIGNvbnN0OworICAgIGJvb2wgY29udGVudHNDaGFuZ2VkKCkgY29u
c3Q7CiAKICAgICB2b2lkIHNldENvbnRlbnRSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICBjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFJlY3Q7IH0K
QEAgLTEyNCw5ICsxMTMsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckxheWVyTGlzdCgpIHsg
bV9sYXllckxpc3QuY2xlYXIoKTsgfQogICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxp
c3QoKSB7IHJldHVybiBtX2xheWVyTGlzdDsgfQogCi0gICAgTWFuYWdlZFRleHR1cmUqIGNvbnRl
bnRzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlLmdldCgpOyB9Ci0g
ICAgTWFuYWdlZFRleHR1cmUqIGJhY2tncm91bmRUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZ3JvdW5kVGV4dHVyZS5nZXQoKTsgfQotCiAgICAgaW50IG93bmluZ0xheWVySWQoKSBjb25z
dDsKICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFJlbmRlclN1cmZhY2UoKSBjb25zdDsKIApA
QCAtMTU1LDkgKzE0MSw2IEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX2NvbnRlbnRSZWN0Owog
ICAgIGJvb2wgbV9zdXJmYWNlUHJvcGVydHlDaGFuZ2VkOwogCi0gICAgT3duUHRyPE1hbmFnZWRU
ZXh0dXJlPiBtX2NvbnRlbnRzVGV4dHVyZTsKLSAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1f
YmFja2dyb3VuZFRleHR1cmU7Ci0KICAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OwogICAgIGJvb2wg
bV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nOwogICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9kcmF3VHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCmluZGV4IGFiYWQwMmJiN2Q5
ZDdhZDU3ZDNhZDM0Zjc1NDM1YzQ1ODdjZWQzNzcuLmMzODllOWM2NTk1OTE5YzIzOGIwMzY5ZGVh
Y2VhNjkxYjYyNjU0NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKQEAgLTcyLDYgKzcyLDggQEAgcHVi
bGljOgogICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHdpbmRvd01h
dHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZG93TWF0cml4OyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNz
TGlzdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRl
clBhc3NJZCh1bnNpZ25lZCkgY29uc3QgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luRHJh
d2luZ0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzcyogZGVmYXVsdFJlbmRlclBhc3MpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3Qg
RmxvYXRSZWN0JiByb290U2Npc3NvclJlY3RJbkN1cnJlbnRQYXNzKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5jcHAKaW5kZXggMzczMTgwOGNiNWRhMjliNDMwOWJkOGVkNTRjM2U5MmU0N2FmMTY3OC4u
NTY0ZTM2OTZiZTE1NTJlZjRmNGI0NWQwNTRhZWFkM2ZhYTU2NDQ1MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgImNjL0ND
VGlsZWRMYXllckltcGwuaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5j
bHVkZSAiU2tDb2xvci5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJjYy9D
Q0NoZWNrZXJib2FyZERyYXdRdWFkLmgiCkBAIC0yMjAsNyArMjIxLDcgQEAgdm9pZCBDQ1RpbGVk
TGF5ZXJJbXBsOjpzZXRUaWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcikK
ICAgICAqbV90aWxlciA9IHRpbGVyOwogfQogCi12b2lkIENDVGlsZWRMYXllckltcGw6OnB1c2hU
aWxlUHJvcGVydGllcyhpbnQgaSwgaW50IGosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBj
b25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KQordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpwdXNoVGls
ZVByb3BlcnRpZXMoaW50IGksIGludCBqLCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IEludFJl
Y3QmIG9wYXF1ZVJlY3QpCiB7CiAgICAgRHJhd2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGop
OwogICAgIGlmICghdGlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCAxMzFh
MzJmY2VmYWMxYjE4MTU1MWYwNDEwNWYyMzhlYTBlMDc3ZmQ2Li40YzgyY2RjOGNhZjdlNzFiOTY5
NzE2YzRhZjVlMTk2YzI3OTEwNDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBA
IC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJvb2wgc2tp
cHNEcmF3KSB7IG1fc2tpcHNEcmF3ID0gc2tpcHNEcmF3OyB9CiAgICAgdm9pZCBzZXRUaWxpbmdE
YXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcik7Ci0gICAgdm9pZCBwdXNoVGlsZVBy
b3BlcnRpZXMoaW50LCBpbnQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRS
ZWN0JiBvcGFxdWVSZWN0KTsKKyAgICB2b2lkIHB1c2hUaWxlUHJvcGVydGllcyhpbnQsIGludCwg
dW5zaWduZWQgdGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KTsKIAogICAgIHZv
aWQgc2V0Q29udGVudHNTd2l6emxlZChib29sIGNvbnRlbnRzU3dpenpsZWQpIHsgbV9jb250ZW50
c1N3aXp6bGVkID0gY29udGVudHNTd2l6emxlZDsgfQogICAgIGJvb2wgY29udGVudHNTd2l6emxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTd2l6emxlZDsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApp
bmRleCA0ZmExNjVjZTQ1YWZkZTVlYjM3ZTllOTg5Zjk0M2ZjM2U3NzBlZGNlLi44MjA0MDllZmMx
OGRjNjkyMWYwNWQ2NTU5OWU2MmM0YzZmZjY2YzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMTI3
LDExICsxMjcsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXR1cFNjcm9sbEFuZENvbnRlbnRz
TGF5ZXJzKGNvbnN0IEludFNpemUmIGNvbnRlbnRTaXplKQogICAgIHsKLSAgICAgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICAgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICAgICAg
cm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRp
b24oSW50UG9pbnQoMCwgMCkpOwogICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihj
b250ZW50U2l6ZSk7Ci0gICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudHMgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDEpOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNvbnRlbnRz
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKICAgICAgICAgY29udGVudHMtPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKICAgICAgICAgY29udGVudHMtPnNldEJvdW5kcyhjb250ZW50U2l6ZSk7CiAg
ICAgICAgIGNvbnRlbnRzLT5zZXRDb250ZW50Qm91bmRzKGNvbnRlbnRTaXplKTsKQEAgLTE4Niwx
MiArMTg2LDEyIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFO
b0xheWVycykKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFUcmVl
QnV0Tm9DaGFuZ2VzKQogewogICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICAgICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXll
ckltcGw6OmNyZWF0ZSgxKSk7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAgICAgICAgIHJvb3QtPmFkZENoaWxkKENDTGF5ZXJJbXBs
OjpjcmVhdGUoMikpOwotICAgICAgICByb290LT5jaGlsZHJlbigpWzFdLT5hZGRDaGlsZChDQ0xh
eWVySW1wbDo6Y3JlYXRlKDMpKTsKKyAgICAgICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXllckltcGw6
OmNyZWF0ZSgzKSk7CiAgICAgICAgIHJvb3QtPmNoaWxkcmVuKClbMV0tPmFkZENoaWxkKENDTGF5
ZXJJbXBsOjpjcmVhdGUoNCkpOwotICAgICAgICByb290LT5jaGlsZHJlbigpWzFdLT5jaGlsZHJl
bigpWzBdLT5hZGRDaGlsZChDQ0xheWVySW1wbDo6Y3JlYXRlKDUpKTsKKyAgICAgICAgcm9vdC0+
Y2hpbGRyZW4oKVsxXS0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSg1KSk7CisgICAgICAg
IHJvb3QtPmNoaWxkcmVuKClbMV0tPmNoaWxkcmVuKClbMF0tPmFkZENoaWxkKENDTGF5ZXJJbXBs
OjpjcmVhdGUoNikpOwogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxl
YXNlKCkpOwogICAgIH0KICAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RM
YXllcigpOwpAQCAtMjE0LDcgKzIxNCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc2Nyb2xsRGVsdGFSZXBlYXRlZFNjcm9sbHMpCiAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRp
b24oMjAsIDMwKTsKICAgICBJbnRTaXplIHNjcm9sbERlbHRhKDExLCAtMTUpOwogICAgIHsKLSAg
ICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMCk7
CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
MSk7CiAgICAgICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAg
ICAgICAgcm9vdC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0TWF4U2Ny
b2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwpAQCAtMjYzLDcgKzI2Myw3IEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsV2l0aG91dFJvb3RMYXllcikKIAogVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCByZXBsYWNlVHJlZVdoaWxlU2Nyb2xsaW5nKQog
ewotICAgIGNvbnN0IGludCBzY3JvbGxMYXllcklkID0gMDsKKyAgICBjb25zdCBpbnQgc2Nyb2xs
TGF5ZXJJZCA9IDE7CiAKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUo
MTAwLCAxMDApKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1MCwg
NTApKTsKQEAgLTYyNSw4ICs2MjUsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICBzZXRDb250ZW50
Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgICAgIHNldERyYXdzQ29udGVudCh0cnVlKTsK
ICAgICAgICAgc2V0U2tpcHNEcmF3KGZhbHNlKTsKKyAgICAgICAgc2V0VmlzaWJsZUxheWVyUmVj
dChJbnRSZWN0KDAsIDAsIDEwLCAxMCkpOwogCiAgICAgICAgIE93blB0cjxDQ0xheWVyVGlsaW5n
RGF0YT4gdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDAp
LCBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKKyAgICAgICAgdGlsZXItPnNl
dEJvdW5kcyhjb250ZW50Qm91bmRzKCkpOwogICAgICAgICBzZXRUaWxpbmdEYXRhKCp0aWxlci5n
ZXQoKSk7CiAgICAgfQogCkBAIC02MzksMTEgKzY0MSwxMSBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIGRpZERyYXdOb3RDYWxsZWRPbkhpZGRlbkxheWVyKQogewogICAgIC8vIFRo
ZSByb290IGxheWVyIGlzIGFsd2F5cyBkcmF3biwgc28gcnVuIHRoaXMgdGVzdCBvbiBhIGNoaWxk
IGxheWVyIHRoYXQKICAgICAvLyB3aWxsIGJlIG1hc2tlZCBvdXQgYnkgdGhlIHJvb3QgbGF5ZXIn
cyBib3VuZHMuCi0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVy
OjpjcmVhdGUoMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tM
YXllcjo6Y3JlYXRlKDEpKTsKICAgICBEaWREcmF3Q2hlY2tMYXllciogcm9vdCA9IHN0YXRpY19j
YXN0PERpZERyYXdDaGVja0xheWVyKj4obV9ob3N0SW1wbC0+cm9vdExheWVyKCkpOwogICAgIHJv
b3QtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CiAKLSAgICByb290LT5hZGRDaGlsZChEaWREcmF3
Q2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKKyAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tM
YXllcjo6Y3JlYXRlKDIpKTsKICAgICBEaWREcmF3Q2hlY2tMYXllciogbGF5ZXIgPSBzdGF0aWNf
Y2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCkpOwogICAg
IC8vIEVuc3VyZSB2aXNpYmxlTGF5ZXJSZWN0IGZvciBsYXllciBpcyBlbXB0eQogICAgIGxheWVy
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDEwMCwgMTAwKSk7CkBAIC02ODYsMTMgKzY4OCwxMyBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHdpbGxEcmF3Tm90Q2FsbGVkT25PY2Ns
dWRlZExheWVyKQogICAgIEludFNpemUgYmlnU2l6ZSgxMDAwLCAxMDAwKTsKICAgICBtX2hvc3RJ
bXBsLT5zZXRWaWV3cG9ydFNpemUoYmlnU2l6ZSk7CiAKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0
Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwogICAgIERpZERyYXdDaGVj
a0xheWVyKiByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJbXBs
LT5yb290TGF5ZXIoKSk7CiAKLSAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6
Y3JlYXRlKDEpKTsKKyAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRl
KDIpKTsKICAgICBEaWREcmF3Q2hlY2tMYXllciogb2NjbHVkZWRMYXllciA9IHN0YXRpY19jYXN0
PERpZERyYXdDaGVja0xheWVyKj4ocm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAKLSAgICBy
b290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDIpKTsKKyAgICByb290LT5h
ZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDMpKTsKICAgICBEaWREcmF3Q2hlY2tM
YXllciogdG9wTGF5ZXIgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KHJvb3QtPmNo
aWxkcmVuKClbMV0uZ2V0KCkpOwogICAgIC8vIFRoaXMgbGF5ZXIgY292ZXJzIHRoZSBvY2NsdWRl
ZExheWVyIGFib3ZlLiBNYWtlIHRoaXMgbGF5ZXIgbGFyZ2Ugc28gaXQgY2FuIG9jY2x1ZGUuCiAg
ICAgdG9wTGF5ZXItPnNldEJvdW5kcyhiaWdTaXplKTsKQEAgLTcxOCwxMyArNzIwLDEzIEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgd2lsbERyYXdOb3RDYWxsZWRPbk9jY2x1ZGVk
TGF5ZXIpCiAKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZGlkRHJhd0NhbGxlZE9u
QWxsTGF5ZXJzKQogewotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tM
YXllcjo6Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0No
ZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0
aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKIAot
ICAgIHJvb3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOworICAgIHJv
b3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMikpOwogICAgIERpZERyYXdD
aGVja0xheWVyKiBsYXllcjEgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KHJvb3Qt
PmNoaWxkcmVuKClbMF0uZ2V0KCkpOwogCi0gICAgbGF5ZXIxLT5hZGRDaGlsZChEaWREcmF3Q2hl
Y2tMYXllcjo6Y3JlYXRlKDIpKTsKKyAgICBsYXllcjEtPmFkZENoaWxkKERpZERyYXdDaGVja0xh
eWVyOjpjcmVhdGUoMykpOwogICAgIERpZERyYXdDaGVja0xheWVyKiBsYXllcjIgPSBzdGF0aWNf
Y2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KGxheWVyMS0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAK
ICAgICBsYXllcjEtPnNldE9wYWNpdHkoMC4zZik7CkBAIC03NjksOSArNzcxLDkgQEAgcHJpdmF0
ZToKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hl
bkFuaW1hdGlvblVzZXNDaGVja2VyYm9hcmQpCiB7CiAgICAgLy8gV2hlbiB0aGUgdGV4dHVyZSBp
cyBub3QgbWlzc2luZywgd2UgZHJhdyBhcyB1c3VhbC4KLSAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0
Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwogICAgIERpZERyYXdDaGVj
a0xheWVyKiByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJbXBs
LT5yb290TGF5ZXIoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRp
bmdMYXllcjo6Y3JlYXRlKDEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpOworICAgIHJvb3QtPmFkZENo
aWxkKE1pc3NpbmdUZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgyLCBmYWxzZSwgZmFsc2Us
IHRydWUpKTsKIAogICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKIApA
QCAtNzgwLDI3ICs3ODIsMjcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwcmVw
YXJlVG9EcmF3RmFpbHNXaGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJib2FyZCkKICAgICBtX2hvc3RJ
bXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKIAogICAgIC8vIFdoZW4gYSB0ZXh0dXJlIGlz
IG1pc3NpbmcgYW5kIHdlJ3JlIG5vdCBhbmltYXRpbmcsIHdlIGRyYXcgYXMgdXN1YWwgd2l0aCBj
aGVja2VyYm9hcmRpbmcuCi0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVj
a0xheWVyOjpjcmVhdGUoMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3
Q2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKICAgICByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0No
ZWNrTGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQo
TWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDEsIHRydWUsIGZhbHNlLCBmYWxz
ZSkpOworICAgIHJvb3QtPmFkZENoaWxkKE1pc3NpbmdUZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNy
ZWF0ZSgyLCB0cnVlLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIEVYUEVDVF9UUlVFKG1faG9zdElt
cGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZy
YW1lKTsKICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKIAogICAgIC8v
IFdoZW4gYSB0ZXh0dXJlIGlzIG1pc3NpbmcgYW5kIHdlJ3JlIGFuaW1hdGluZywgd2UgZG9uJ3Qg
d2FudCB0byBkcmF3IGFueXRoaW5nLgotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWRE
cmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
RGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CiAgICAgcm9vdCA9IHN0YXRpY19jYXN0PERp
ZERyYXdDaGVja0xheWVyKj4obV9ob3N0SW1wbC0+cm9vdExheWVyKCkpOwotICAgIHJvb3QtPmFk
ZENoaWxkKE1pc3NpbmdUZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgxLCB0cnVlLCBmYWxz
ZSwgdHJ1ZSkpOworICAgIHJvb3QtPmFkZENoaWxkKE1pc3NpbmdUZXh0dXJlQW5pbWF0aW5nTGF5
ZXI6OmNyZWF0ZSgyLCB0cnVlLCBmYWxzZSwgdHJ1ZSkpOwogCiAgICAgRVhQRUNUX0ZBTFNFKG1f
aG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5
ZXJzKGZyYW1lKTsKICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKIAog
ICAgIC8vIFdoZW4gdGhlIGxheWVyIHNraXBzIGRyYXcgYW5kIHdlJ3JlIGFuaW1hdGluZywgd2Ug
c3RpbGwgZHJhdyB0aGUgZnJhbWUuCi0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERy
YXdDaGVja0xheWVyOjpjcmVhdGUoMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihE
aWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKICAgICByb290ID0gc3RhdGljX2Nhc3Q8RGlk
RHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7Ci0gICAgcm9vdC0+YWRk
Q2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDEsIGZhbHNlLCB0cnVl
LCB0cnVlKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXll
cjo6Y3JlYXRlKDIsIGZhbHNlLCB0cnVlLCB0cnVlKSk7CiAKICAgICBFWFBFQ1RfVFJVRShtX2hv
c3RJbXBsLT5wcmVwYXJlVG9EcmF3KGZyYW1lKSk7CiAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVy
cyhmcmFtZSk7CkBAIC04MDksNyArODExLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBwcmVwYXJlVG9EcmF3RmFpbHNXaGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJib2FyZCkKIAog
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKIHsKLSAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAgICAg
cm9vdC0+c2V0U2Nyb2xsYWJsZShmYWxzZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KHJvb3QucmVsZWFzZSgpKTsKICAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFt
ZSgpOwpAQCAtODMzLDcgKzgzNSw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QpCiAgICAgY29udGVudExheWVyLT5zZXRCb3VuZHMoc3Vy
ZmFjZVNpemUpOwogICAgIGNvbnRlbnRMYXllci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKHN1
cmZhY2VTaXplLndpZHRoKCkgKiAyLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSAqIDIpKTsKIAotICAg
IE93blB0cjxDQ0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDAp
OworICAgIE93blB0cjxDQ0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3Jl
YXRlKDIpOwogICAgIHNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgIHNjcm9s
bExheWVyLT5zZXRNYXhTY3JvbGxQb3NpdGlvbihzdXJmYWNlU2l6ZSk7CiAgICAgc2Nyb2xsTGF5
ZXItPmFkZENoaWxkKGNvbnRlbnRMYXllci5yZWxlYXNlKCkpOwpAQCAtODUyLDggKzg1NCw4IEBA
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3Qp
CiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRB
bmRSZWRyYXcpCiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+
YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZh
Y2VTaXplKSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgxKTsKKyAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5
ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJm
YWNlU2l6ZSk7CiAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKQEAg
LTg2OCw4ICs4NzAsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENo
aWxkQ2FsbHNDb21taXRBbmRSZWRyYXcpCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHNjcm9sbE1pc3Nlc0NoaWxkKQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsK
LSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwot
ICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUs
IDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxh
eWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CiAgICAgbV9ob3N0SW1wbC0+
c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoc3VyZmFjZVNpemUpOwogICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0Zy
YW1lKCk7CkBAIC04ODMsOCArODg1LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxNaXNzZXNDaGlsZCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Ny
b2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkKQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAs
IDEwKTsKLSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDApOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5
ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXpl
KTsKIAogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKQEAgLTkwNiwxMSArOTA4
LDExIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQmFja2Zh
Y2luZ0NoaWxkKQogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCbG9ja2Vk
QnlDb250ZW50TGF5ZXIpCiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVy
KDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGNvbnRlbnRMYXllciA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUs
IDUpLCBzdXJmYWNlU2l6ZSk7CiAgICAgY29udGVudExheWVyLT5zZXRTaG91bGRTY3JvbGxPbk1h
aW5UaHJlYWQodHJ1ZSk7CiAgICAgY29udGVudExheWVyLT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsK
IAotICAgIE93blB0cjxDQ0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxl
TGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2lu
dCg1LCA1KSwgc3VyZmFjZVNpemUpOwogICAgIHNjcm9sbExheWVyLT5hZGRDaGlsZChjb250ZW50
TGF5ZXIucmVsZWFzZSgpKTsKIAogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxM
YXllci5yZWxlYXNlKCkpOwpAQCAtOTI1LDcgKzkyNyw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKIHsK
ICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CiAgICAgZmxvYXQgcGFnZVNjYWxlID0g
MjsKLSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIo
MCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJm
YWNlU2l6ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsK
ICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwogICAgIGluaXRp
YWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CkBAIC05NDMsNyArOTQ1LDcgQEAgVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxl
T25NYWluVGhyZWFkKQogICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHNjcm9s
bCBkZWx0YS4KICAgICBleHBlY3RlZFNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZSk7CiAgICAg
T3duUHRyPENDU2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9j
ZXNzU2Nyb2xsRGVsdGFzKCk7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCks
IDAsIGV4cGVjdGVkU2Nyb2xsRGVsdGEpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZv
LmdldCgpLCBtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+aWQoKSwgZXhwZWN0ZWRTY3JvbGxEZWx0
YSk7CiAKICAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBhbHNvIGhhdmUgYmVlbiB1cGRh
dGVkLgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9z
aXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOwpAQCAtOTU2LDcgKzk1OCw3IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uSW1w
bFRocmVhZCkKIHsKICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CiAgICAgZmxvYXQg
cGFnZVNjYWxlID0gMjsKLSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3Jv
bGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3Qu
cmVsZWFzZSgpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUp
OwogICAgIG1faG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCAxLCBwYWdl
U2NhbGUpOwpAQCAtOTc2LDcgKzk3OCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKIAogICAgIC8vIFRo
ZSBzY3JvbGwgZGVsdGEgaXMgbm90IHNjYWxlZCBiZWNhdXNlIHRoZSBtYWluIHRocmVhZCBkaWQg
bm90IHNjYWxlLgogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0g
bV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIGV4cGVjdENvbnRhaW5zKCpz
Y3JvbGxJbmZvLmdldCgpLCAwLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKKyAgICBleHBlY3RDb250
YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgbV9ob3N0SW1wbC0+cm9vdExheWVyKCktPmlkKCksIGV4
cGVjdGVkU2Nyb2xsRGVsdGEpOwogCiAgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgYWxz
byBoYXZlIGJlZW4gdXBkYXRlZC4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExheWVy
KCktPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKQEAgLTk4OCwxMCAr
OTkwLDExIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENo
YW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc2Nyb2xsQ2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCiB7CiAgICAgSW50
U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICAvLyBBbHNvIG1hcmsgdGhlIHJvb3Qgc2Nyb2xs
YWJsZSBzbyBpdCBiZWNvbWVzIHRoZSByb290IHNjcm9sbCBsYXllci4KICAgICByb290LT5zZXRT
Y3JvbGxhYmxlKHRydWUpOwotICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXll
cigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIGludCBzY3JvbGxMYXll
cklkID0gMjsKKyAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoc2Nyb2xs
TGF5ZXJJZCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdw
b3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3
RnJhbWUoKTsKQEAgLTEwMTEsNyArMTAxNCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdCwgc2Nyb2xsQ2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCiAgICAgLy8g
VGhlIHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgogICAgIGV4cGVjdGVk
U2Nyb2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2Fs
ZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAg
ICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMSwgZXhwZWN0ZWRTY3JvbGxEZWx0
YSk7CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHNjcm9sbExheWVySWQs
IGV4cGVjdGVkU2Nyb2xsRGVsdGEpOwogCiAgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQg
bm90IGhhdmUgY2hhbmdlZC4KICAgICBFWFBFQ1RfRVEoY2hpbGQtPm1heFNjcm9sbFBvc2l0aW9u
KCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKQEAgLTEwMjYsMTIgKzEwMjksMTIgQEAgVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEJleW9uZExpbWl0KQogICAgIC8vIHBh
cmVudCBsYXllciBpcyBzY3JvbGxlZCBvbiB0aGUgYXhpcyBvbiB3aGljaCB0aGUgY2hpbGQgd2Fz
IHVuYWJsZSB0bwogICAgIC8vIHNjcm9sbC4KICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAx
MCk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVy
KDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMywg
RmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwogICAgIGdyYW5kQ2hpbGQtPnNldFNjcm9s
bFBvc2l0aW9uKEludFBvaW50KDAsIDUpKTsKIAotICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hp
bGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNp
emUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5
ZXIoMiwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwogICAgIGNoaWxkLT5zZXRTY3Jv
bGxQb3NpdGlvbihJbnRQb2ludCgzLCAwKSk7CiAgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hp
bGQucmVsZWFzZSgpKTsKIApAQCAtMTA2Miw4ICsxMDY1LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzY3JvbGxFdmVudEJ1YmJsaW5nKQogICAgIC8vIFdoZW4gd2UgdHJ5IHRv
IHNjcm9sbCBhIG5vbi1zY3JvbGxhYmxlIGNoaWxkIGxheWVyLCB0aGUgc2Nyb2xsIGRlbHRhCiAg
ICAgLy8gc2hvdWxkIGJlIGFwcGxpZWQgdG8gb25lIG9mIGl0cyBhbmNlc3RvcnMgaWYgcG9zc2li
bGUuCiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9s
bGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3Jl
YXRlU2Nyb2xsYWJsZUxheWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKIAog
ICAgIGNoaWxkLT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKICAgICByb290LT5hZGRDaGlsZChjaGls
ZC5yZWxlYXNlKCkpOwpAQCAtMTA4OCwxMyArMTA5MSwxMyBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIHNjcm9sbEV2ZW50QnViYmxpbmcpCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIHNjcm9sbEJlZm9yZVJlZHJhdykKIHsKICAgICBJbnRTaXplIHN1cmZhY2VTaXpl
KDEwLCAxMCk7Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVM
YXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwt
PnNldFJvb3RMYXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwg
c3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNp
emUpOwogCiAgICAgLy8gRHJhdyBvbmUgZnJhbWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVidWls
ZCB0aGUgbGF5ZXIgdHJlZSB0byBtaW1pYyBhIHRyZWUgc3luY2hyb25pemF0aW9uLgogICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgbV9ob3N0SW1wbC0+ZGV0
YWNoTGF5ZXJUcmVlKCk7Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9s
bGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9z
dEltcGwtPnNldFJvb3RMYXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1
LCA1KSwgc3VyZmFjZVNpemUpKTsKIAogICAgIC8vIFNjcm9sbGluZyBzaG91bGQgc3RpbGwgd29y
ayBldmVuIHRob3VnaCB3ZSBkaWQgbm90IGRyYXcgeWV0LgogICAgIEVYUEVDVF9FUShtX2hvc3RJ
bXBsLT5zY3JvbGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6Oldo
ZWVsKSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMTE4Niw3ICsx
MTg5LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBibGVuZGluZ09mZldoZW5E
cmF3aW5nT3BhcXVlTGF5ZXJzKQogewogCiAgICAgewotICAgICAgICBPd25QdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgICAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgICAgICByb290LT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICAgICAgcm9vdC0+c2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CiAgICAgICAgIHJvb3QtPnNldENvbnRlbnRCb3VuZHMocm9vdC0+Ym91
bmRzKCkpOwpAQCAtMTE5NSw3ICsxMTk4LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBibGVuZGluZ09mZldoZW5EcmF3aW5nT3BhcXVlTGF5ZXJzKQogICAgIH0KICAgICBDQ0xh
eWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpOwogCi0gICAgcm9vdC0+YWRk
Q2hpbGQoQmxlbmRTdGF0ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CisgICAgcm9vdC0+YWRkQ2hp
bGQoQmxlbmRTdGF0ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgyKSk7CiAgICAgQmxlbmRTdGF0ZUNoZWNr
TGF5ZXIqIGxheWVyMSA9IHN0YXRpY19jYXN0PEJsZW5kU3RhdGVDaGVja0xheWVyKj4ocm9vdC0+
Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURh
dGEgZnJhbWU7CkBAIC0xMjQ3LDcgKzEyNTAsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIGJsZW5kaW5nT2ZmV2hlbkRyYXdpbmdPcGFxdWVMYXllcnMpCiAgICAgRVhQRUNUX1RS
VUUobGF5ZXIxLT5xdWFkc0FwcGVuZGVkKCkpOwogICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxM
YXllcnMoZnJhbWUpOwogCi0gICAgbGF5ZXIxLT5hZGRDaGlsZChCbGVuZFN0YXRlQ2hlY2tMYXll
cjo6Y3JlYXRlKDIpKTsKKyAgICBsYXllcjEtPmFkZENoaWxkKEJsZW5kU3RhdGVDaGVja0xheWVy
OjpjcmVhdGUoMykpOwogICAgIEJsZW5kU3RhdGVDaGVja0xheWVyKiBsYXllcjIgPSBzdGF0aWNf
Y2FzdDxCbGVuZFN0YXRlQ2hlY2tMYXllcio+KGxheWVyMS0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7
CiAKICAgICAvLyAyIG9wYXF1ZSBsYXllcnMsIGRyYXduIHdpdGhvdXQgYmxlbmRpbmcuCkBAIC0x
NDA3LDcgKzE0MTAsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHZpZXdwb3J0
Q292ZXJlZCkKICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZSgxMDAwLCAxMDAwKTsKICAgICBtX2hv
c3RJbXBsLT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKIAotICAgIG1faG9zdEltcGwt
PnNldFJvb3RMYXllcihCbGVuZFN0YXRlQ2hlY2tMYXllcjo6Y3JlYXRlKDApKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoQmxlbmRTdGF0ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CiAg
ICAgQmxlbmRTdGF0ZUNoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2FzdDxCbGVuZFN0YXRlQ2hl
Y2tMYXllcio+KG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKICAgICByb290LT5zZXRFeHBlY3Rh
dGlvbihmYWxzZSwgdHJ1ZSk7CiAgICAgcm9vdC0+c2V0T3BhcXVlKHRydWUpOwpAQCAtMTk5Nyw3
ICsyMDAwLDcgQEAgcHJpdmF0ZToKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBj
b250ZXh0TG9zdEFuZFJlc3RvcmVkTm90aWZpY2F0aW9uU2VudFRvQWxsTGF5ZXJzKQogewotICAg
IG1faG9zdEltcGwtPnNldFJvb3RMYXllcihDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5
ZXI6OmNyZWF0ZSgwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKENvbnRleHRMb3N0
Tm90aWZpY2F0aW9uQ2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKICAgICBDb250ZXh0TG9zdE5vdGlm
aWNhdGlvbkNoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2FzdDxDb250ZXh0TG9zdE5vdGlmaWNh
dGlvbkNoZWNrTGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7CiAKICAgICByb290LT5h
ZGRDaGlsZChDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CkBA
IC0yMjAwLDExICsyMjAzLDExIEBAIHB1YmxpYzoKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBkb250VXNlT2xkUmVzb3VyY2VzQWZ0ZXJMb3N0Q29udGV4dCkKIHsKLSAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3RMYXllcihDQ0xheWVySW1wbDo6Y3JlYXRlKDApKTsKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3RMYXllcihDQ0xheWVySW1wbDo6Y3JlYXRlKDEpKTsKICAg
ICByb290TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHJvb3RMYXllci0+
c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CiAKLSAgICBPd25QdHI8Q0NUaWxlZExh
eWVySW1wbD4gdGlsZUxheWVyID0gQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93
blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiB0aWxlTGF5ZXIgPSBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVh
dGUoMik7CiAgICAgdGlsZUxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICB0
aWxlTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwogICAgIHRpbGVMYXll
ci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwpAQCAtMjIxNiw3ICsyMjE5LDcg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBkb250VXNlT2xkUmVzb3VyY2VzQWZ0
ZXJMb3N0Q29udGV4dCkKICAgICB0aWxlTGF5ZXItPnB1c2hUaWxlUHJvcGVydGllcygwLCAwLCAx
LCBJbnRSZWN0KDAsIDAsIDEwLCAxMCkpOwogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodGlsZUxh
eWVyLnJlbGVhc2UoKSk7CiAKLSAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJbXBsPiB0ZXh0dXJl
TGF5ZXIgPSBDQ1RleHR1cmVMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NUZXh0
dXJlTGF5ZXJJbXBsPiB0ZXh0dXJlTGF5ZXIgPSBDQ1RleHR1cmVMYXllckltcGw6OmNyZWF0ZSgz
KTsKICAgICB0ZXh0dXJlTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHRl
eHR1cmVMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CiAgICAgdGV4dHVy
ZUxheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CkBAIC0yMjI1LDcgKzIy
MjgsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJj
ZXNBZnRlckxvc3RDb250ZXh0KQogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodGV4dHVyZUxheWVy
LnJlbGVhc2UoKSk7CiAKICAgICBGYWtlVmlkZW9GcmFtZVByb3ZpZGVyIHByb3ZpZGVyOwotICAg
IE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiB2aWRlb0xheWVyID0gQ0NWaWRlb0xheWVySW1wbDo6
Y3JlYXRlKDMsICZwcm92aWRlcik7CisgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw+IHZpZGVv
TGF5ZXIgPSBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUoNCwgJnByb3ZpZGVyKTsKICAgICB2aWRl
b0xheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICB2aWRlb0xheWVyLT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICB2aWRlb0xheWVyLT5zZXRDb250ZW50
Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CkBAIC0yMjMzLDcgKzIyMzYsNyBAQCBURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJjZXNBZnRlckxvc3RDb250ZXh0
KQogICAgIHZpZGVvTGF5ZXItPnNldExheWVyVHJlZUhvc3RJbXBsKG1faG9zdEltcGwuZ2V0KCkp
OwogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodmlkZW9MYXllci5yZWxlYXNlKCkpOwogCi0gICAg
T3duUHRyPENDSU9TdXJmYWNlTGF5ZXJJbXBsPiBpb1N1cmZhY2VMYXllciA9IENDSU9TdXJmYWNl
TGF5ZXJJbXBsOjpjcmVhdGUoNCk7CisgICAgT3duUHRyPENDSU9TdXJmYWNlTGF5ZXJJbXBsPiBp
b1N1cmZhY2VMYXllciA9IENDSU9TdXJmYWNlTGF5ZXJJbXBsOjpjcmVhdGUoNSk7CiAgICAgaW9T
dXJmYWNlTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIGlvU3VyZmFjZUxh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICBpb1N1cmZhY2VMYXll
ci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwpAQCAtMjQ2NSw2ICsyNDY4LDEx
IEBAIHN0YXRpYyB2b2lkIHNldHVwTGF5ZXJzRm9yVGV4dHVyZUNhY2hpbmcoQ0NMYXllclRyZWVI
b3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwsCiAgICAgc3VyZmFjZUxheWVyUHRyLT5hZGRDaGls
ZChjaGlsZC5yZWxlYXNlKCkpOwogfQogCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1XaXRo
UmVsZWFzZVRleHR1cmVzIDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bSB7CitwdWJsaWM6
CisgICAgdXNpbmcgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyUGFzc1RleHR1
cmVzOworfTsKKwogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVy
ZUNhY2hpbmcpCiB7CiAgICAgQ0NTZXR0aW5nczo6c2V0UGFydGlhbFN3YXBFbmFibGVkKHRydWUp
OwpAQCAtMjU0OCwyMiArMjU1Niw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwg
c3VyZmFjZVRleHR1cmVDYWNoaW5nKQogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5
ZXJzKGZyYW1lKTsKICAgICB9CiAKLSAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhZ2FpbiwgYnV0IGV2
aWN0IHRoZSBjYWNoZWQgc3VyZmFjZSB0ZXh0dXJlCisgICAgLy8gQ2hhbmdlIG9wYWNpdHkgYWdh
aW4sIGFuZCBldmljdCB0aGUgY2FjaGVkIHN1cmZhY2UgdGV4dHVyZS4KICAgICBzdXJmYWNlTGF5
ZXJQdHItPnNldE9wYWNpdHkoMC41Zik7Ci0gICAgTWFuYWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4
dHVyZSA9IHN1cmZhY2VMYXllclB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUo
KTsKLSAgICBBU1NFUlRfVFJVRShjb250ZW50c1RleHR1cmUtPmlzVmFsaWQoY29udGVudHNUZXh0
dXJlLT5zaXplKCksIGNvbnRlbnRzVGV4dHVyZS0+Zm9ybWF0KCkpKTsKLSAgICBDQ1JlbmRlcmVy
KiByZW5kZXJlciA9IG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKTsKLSAgICBUZXh0dXJlTWFu
YWdlciogdGV4dHVyZU1hbmFnZXIgPSByZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2VyKCk7Ci0g
ICAgc2l6ZV90IG1heE1lbW9yeUxpbWl0ID0gdGV4dHVyZU1hbmFnZXItPm1heE1lbW9yeUxpbWl0
Qnl0ZXMoKTsKLQotICAgIC8vIFRoaXMgc2hvdWxkIGV2aWNlIGFsbCBjYWNoZWQgc3VyZmFjZXMK
LSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygwKTsKLQotICAgIC8v
IFJlc3RvcmUgb3JpZ2luYWwgbGltaXQKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5
TGltaXRCeXRlcyhtYXhNZW1vcnlMaW1pdCk7Ci0KLSAgICAvLyBXYXMgb3VyIHN1cmZhY2UgZXZp
Y3RlZD8KLSAgICBBU1NFUlRfRkFMU0UoY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKGNvbnRlbnRz
VGV4dHVyZS0+c2l6ZSgpLCBjb250ZW50c1RleHR1cmUtPmZvcm1hdCgpKSk7CisgICAgc3RhdGlj
X2Nhc3Q8TGF5ZXJSZW5kZXJlckNocm9taXVtV2l0aFJlbGVhc2VUZXh0dXJlcyo+KG15SG9zdElt
cGwtPmxheWVyUmVuZGVyZXIoKSktPnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKIAogICAg
IC8vIENoYW5nZSBvcGFjaXR5IGFuZCBkcmF3CiAgICAgc3VyZmFjZUxheWVyUHRyLT5zZXRPcGFj
aXR5KDAuNmYpOwpAQCAtMjU4Myw2ICsyNTc4LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmcpCiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdR
dWFkKiBxdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5k
ZXJQYXNzZXNbMV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwogICAgICAgICBFWFBFQ1RfRkFMU0Uo
cXVhZC0+cmVuZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsK
IAorICAgICAgICAvLyBXYXMgb3VyIHN1cmZhY2UgZXZpY3RlZD8KKyAgICAgICAgRVhQRUNUX0ZB
TFNFKG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJl
bmRlclBhc3NJZChxdWFkLT5yZW5kZXJQYXNzKCktPmlkKCkpKTsKKwogICAgICAgICBteUhvc3RJ
bXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExh
eWVycyhmcmFtZSk7CiAgICAgfQpAQCAtMjcwNiwyMiArMjcwNCw5IEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFsU3dhcCkKICAg
ICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CiAgICAgfQogCi0gICAg
Ly8gQ2hhbmdlIG9wYWNpdHkgYWdhaW4sIGJ1dCBldmljdCB0aGUgY2FjaGVkIHN1cmZhY2UgdGV4
dHVyZQorICAgIC8vIENoYW5nZSBvcGFjaXR5IGFnYWluLCBhbmQgZXZpY3QgdGhlIGNhY2hlZCBz
dXJmYWNlIHRleHR1cmUuCiAgICAgc3VyZmFjZUxheWVyUHRyLT5zZXRPcGFjaXR5KDAuNWYpOwot
ICAgIE1hbmFnZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUgPSBzdXJmYWNlTGF5ZXJQdHItPnJl
bmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCk7Ci0gICAgQVNTRVJUX1RSVUUoY29udGVu
dHNUZXh0dXJlLT5pc1ZhbGlkKGNvbnRlbnRzVGV4dHVyZS0+c2l6ZSgpLCBjb250ZW50c1RleHR1
cmUtPmZvcm1hdCgpKSk7Ci0gICAgQ0NSZW5kZXJlciogcmVuZGVyZXIgPSBteUhvc3RJbXBsLT5s
YXllclJlbmRlcmVyKCk7Ci0gICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gcmVu
ZGVyZXItPmltcGxUZXh0dXJlTWFuYWdlcigpOwotICAgIHNpemVfdCBtYXhNZW1vcnlMaW1pdCA9
IHRleHR1cmVNYW5hZ2VyLT5tYXhNZW1vcnlMaW1pdEJ5dGVzKCk7Ci0KLSAgICAvLyBUaGlzIHNo
b3VsZCBldmljZSBhbGwgY2FjaGVkIHN1cmZhY2VzCi0gICAgdGV4dHVyZU1hbmFnZXItPnNldE1h
eE1lbW9yeUxpbWl0Qnl0ZXMoMCk7Ci0KLSAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGxpbWl0Ci0g
ICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMobWF4TWVtb3J5TGltaXQp
OwotCi0gICAgLy8gV2FzIG91ciBzdXJmYWNlIGV2aWN0ZWQ/Ci0gICAgQVNTRVJUX0ZBTFNFKGNv
bnRlbnRzVGV4dHVyZS0+aXNWYWxpZChjb250ZW50c1RleHR1cmUtPnNpemUoKSwgY29udGVudHNU
ZXh0dXJlLT5mb3JtYXQoKSkpOworICAgIHN0YXRpY19jYXN0PExheWVyUmVuZGVyZXJDaHJvbWl1
bVdpdGhSZWxlYXNlVGV4dHVyZXMqPihteUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkpLT5yZWxl
YXNlUmVuZGVyUGFzc1RleHR1cmVzKCk7CiAKICAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhbmQgZHJh
dwogICAgIHN1cmZhY2VMYXllclB0ci0+c2V0T3BhY2l0eSgwLjZmKTsKQEAgLTI3NDEsNiArMjcy
Niw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNo
aW5nTm9QYXJ0aWFsU3dhcCkKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBz
dGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+
cXVhZExpc3QoKVswXS5nZXQoKSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQ
YXNzKCktPnRhcmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCisgICAgICAgIC8v
IFdhcyBvdXIgc3VyZmFjZSBldmljdGVkPworICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1w
bC0+bGF5ZXJSZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHF1
YWQtPnJlbmRlclBhc3MoKS0+aWQoKSkpOworCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXll
cnMoZnJhbWUpOwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsK
ICAgICB9CkBAIC0yODk4LDg3ICsyODg2LDc2IEBAIHN0cnVjdCBSZW5kZXJQYXNzUmVtb3ZhbFRl
c3REYXRhIHsKICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZTsK
IH07CiAKLWNsYXNzIEZha2VSZW5kZXJTdXJmYWNlIDogcHVibGljIENDUmVuZGVyU3VyZmFjZSB7
Ci1wcml2YXRlOgotICAgIGJvb2wgbV9oYXNDYWNoZWRUZXh0dXJlOwotICAgIGJvb2wgbV9jb250
ZW50c0NoYW5nZWQ7Ci0KK2NsYXNzIENDVGVzdFJlbmRlclBhc3M6IHB1YmxpYyBDQ1JlbmRlclBh
c3MgewogcHVibGljOgotICAgIEZha2VSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBsYXllcklt
cGwpCi0gICAgICAgIDogQ0NSZW5kZXJTdXJmYWNlKGxheWVySW1wbCksCi0gICAgICAgICAgbV9o
YXNDYWNoZWRUZXh0dXJlKGZhbHNlKQotICAgIHsKLSAgICB9CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlLCB1
bnNpZ25lZCBpZCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENDVGVzdFJlbmRlclBhc3ModGFyZ2V0
U3VyZmFjZSwgaWQpKTsgfQogCi0gICAgdmlydHVhbCBib29sIGhhc0NhY2hlZENvbnRlbnRzVGV4
dHVyZSgpIGNvbnN0IE9WRVJSSURFCi0gICAgewotICAgICAgICByZXR1cm4gbV9oYXNDYWNoZWRU
ZXh0dXJlOwotICAgIH0KKyAgICB2b2lkIGFwcGVuZFF1YWQoUGFzc093blB0cjxDQ0RyYXdRdWFk
PiBxdWFkKSB7IG1fcXVhZExpc3QuYXBwZW5kKHF1YWQpOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wg
cHJlcGFyZUNvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxyYykgT1ZFUlJJ
REUKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KK3Byb3RlY3RlZDoKKyAgICBD
Q1Rlc3RSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgdW5zaWduZWQg
aWQpIDogQ0NSZW5kZXJQYXNzKHRhcmdldFN1cmZhY2UsIGlkKSB7IH0KK307CiAKLSAgICB2aXJ0
dWFsIGJvb2wgY29udGVudHNDaGFuZ2VkKCkgY29uc3QgT1ZFUlJJREUKK2NsYXNzIENDVGVzdFJl
bmRlcmVyIDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bSwgcHVibGljIENDUmVuZGVyZXJD
bGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGVzdFJlbmRlcmVyPiBj
cmVhdGUoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NvbnRlbnRzQ2hhbmdlZDsKLSAgICB9CisgICAgICAgIE93blB0cjxDQ1Rl
c3RSZW5kZXJlcj4gcmVuZGVyZXIoYWRvcHRQdHIobmV3IENDVGVzdFJlbmRlcmVyKGNvbnRleHQp
KSk7CisgICAgICAgIGlmICghcmVuZGVyZXItPmluaXRpYWxpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgdm9pZCBzZXRIYXNDYWNoZWRUZXh0dXJlKGJvb2wgaGFzQ2Fj
aGVkVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1faGFzQ2FjaGVkVGV4dHVyZSA9IGhhc0NhY2hl
ZFRleHR1cmU7CisgICAgICAgIHJldHVybiByZW5kZXJlci5yZWxlYXNlKCk7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRDb250ZW50c0NoYW5nZWQoYm9vbCBjb250ZW50c0NoYW5nZWQpCi0gICAgewot
ICAgICAgICBtX2NvbnRlbnRzQ2hhbmdlZCA9IGNvbnRlbnRzQ2hhbmdlZDsKLSAgICB9Ci19Owor
ICAgIHZvaWQgY2xlYXJDYWNoZWRUZXh0dXJlcygpIHsgbV90ZXh0dXJlcy5jbGVhcigpOyB9Cisg
ICAgdm9pZCBzZXRIYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHVuc2lnbmVkIGlk
KSB7IG1fdGV4dHVyZXMuYWRkKGlkKTsgfQogCi1jbGFzcyBDQ1Rlc3RSZW5kZXJQYXNzOiBwdWJs
aWMgQ0NSZW5kZXJQYXNzIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRl
clBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGVzdFJlbmRlclBhc3ModGFyZ2V0U3VyZmFjZSkp
OwotICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgaGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBh
c3NJZCh1bnNpZ25lZCBpZCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90ZXh0dXJlcy5jb250
YWlucyhpZCk7IH0KKworICAgIC8vIENDUmVuZGVyZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCisg
ICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBkZXZpY2VWaWV3cG9ydFNpemUoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQorICAgIHZpcnR1YWwgY29uc3QgQ0NMYXll
clRyZWVTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3NldHRp
bmdzOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZExvc2VDb250ZXh0KCkgT1ZFUlJJREUgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIG9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpIE9WRVJSSURFIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRGdWxsUm9vdExheWVyRGFtYWdlKCkgT1ZFUlJJREUgeyB9CisgICAg
dmlydHVhbCB2b2lkIHJlbGVhc2VDb250ZW50c1RleHR1cmVzKCkgT1ZFUlJJREUgeyB9CisgICAg
dmlydHVhbCB2b2lkIHNldE1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKHNpemVfdCkgT1ZFUlJJ
REUgeyB9CiAKIHByb3RlY3RlZDoKLSAgICBDQ1Rlc3RSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFj
ZSogc3VyZmFjZSkKLSAgICAgICAgOiBDQ1JlbmRlclBhc3Moc3VyZmFjZSkKLSAgICB7Ci0gICAg
fQorICAgIENDVGVzdFJlbmRlcmVyKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpIDogTGF5ZXJSZW5kZXJlckNocm9taXVtKHRoaXMsIGNvbnRleHQsIFVudGhyb3R0bGVkVXBs
b2FkZXIpIHsgfQogCi1wdWJsaWM6Ci0gICAgdm9pZCBhcHBlbmRRdWFkKFBhc3NPd25QdHI8Q0NE
cmF3UXVhZD4gcXVhZCkKLSAgICB7Ci0gICAgICAgIG1fcXVhZExpc3QuYXBwZW5kKHF1YWQpOwot
ICAgIH0KK3ByaXZhdGU6CisgICAgQ0NMYXllclRyZWVTZXR0aW5ncyBtX3NldHRpbmdzOworICAg
IEludFNpemUgbV92aWV3cG9ydFNpemU7CisgICAgSGFzaFNldDx1bnNpZ25lZD4gbV90ZXh0dXJl
czsKIH07CiAKLXN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFzcz4gY3JlYXRlRHVtbXlSZW5k
ZXJQYXNzKFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEmIHRlc3REYXRhKQorc3RhdGljIFBhc3NP
d25QdHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGVEdW1teVJlbmRlclBhc3MoUmVuZGVyUGFzc1JlbW92
YWxUZXN0RGF0YSYgdGVzdERhdGEsIHVuc2lnbmVkIGlkKQogewotICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gbGF5ZXJJbXBsID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKLSAgICBDQ1JlbmRlclN1
cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBuZXcgRmFrZVJlbmRlclN1cmZhY2UobGF5ZXJJbXBsLmdl
dCgpKTsKLSAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW5kZXJQYXNzUHRyID0gQ0NUZXN0UmVu
ZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4g
bGF5ZXJJbXBsKENDTGF5ZXJJbXBsOjpjcmVhdGUoaWQpKTsKKyAgICBPd25QdHI8Q0NSZW5kZXJT
dXJmYWNlPiByZW5kZXJTdXJmYWNlKGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZhY2UobGF5ZXJJ
bXBsLmdldCgpKSkpOworICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlbmRlclBhc3NQdHIoQ0NU
ZXN0UmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UuZ2V0KCksIGxheWVySW1wbC0+aWQo
KSkpOwogCi0gICAgdGVzdERhdGEucmVuZGVyU3VyZmFjZVN0b3JlLmFwcGVuZChhZG9wdFB0cihy
ZW5kZXJTdXJmYWNlKSk7CisgICAgdGVzdERhdGEucmVuZGVyU3VyZmFjZVN0b3JlLmFwcGVuZChy
ZW5kZXJTdXJmYWNlLnJlbGVhc2UoKSk7CiAgICAgdGVzdERhdGEubGF5ZXJTdG9yZS5hcHBlbmQo
bGF5ZXJJbXBsLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJlbmRlclBhc3NQdHIucmVsZWFzZSgp
OwogfQogCi1zdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hh
ciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYgdGVzdERhdGEpCitzdGF0
aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlw
dCwgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYgdGVzdERhdGEsIENDVGVzdFJlbmRlcmVyKiBy
ZW5kZXJlcikKIHsKKyAgICByZW5kZXJlci0+Y2xlYXJDYWNoZWRUZXh0dXJlcygpOworCiAgICAg
Ly8gT25lIHNoYXJlZCBzdGF0ZSBmb3IgYWxsIHF1YWRzIC0gd2UgZG9uJ3QgbmVlZCB0aGUgY29y
cmVjdCBkZXRhaWxzCiAgICAgdGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlID0gQ0NTaGFyZWRRdWFk
U3RhdGU6OmNyZWF0ZShXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCBJbnRSZWN0KCksIEludFJlY3QoKSwgMS4wLCB0cnVlKTsKIAogICAgIGNvbnN0
IGNoYXIqIGN1cnJlbnRDaGFyID0gdGVzdFNjcmlwdDsKIAogICAgIC8vIFByZS1jcmVhdGUgcm9v
dCBwYXNzCi0gICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcm9vdFJlbmRlclBhc3MgPSBjcmVhdGVE
dW1teVJlbmRlclBhc3ModGVzdERhdGEpOwotICAgIHRlc3REYXRhLnJlbmRlclBhc3NJZC5pbnNl
cnQoc3RkOjpwYWlyPENDUmVuZGVyUGFzcyosIGNoYXI+KHJvb3RSZW5kZXJQYXNzLmdldCgpLCB0
ZXN0U2NyaXB0WzBdKSk7Ci0gICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmluc2VydChzdGQ6
OnBhaXI8Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50cnk+KHRlc3RTY3JpcHRbMF0sIFJlbmRlclBh
c3NDYWNoZUVudHJ5KHJvb3RSZW5kZXJQYXNzLnJlbGVhc2UoKSkpKTsKLSAgICB3aGlsZSAoKmN1
cnJlbnRDaGFyICE9ICdcMCcpIHsKKyAgICBjaGFyIHJvb3RSZW5kZXJQYXNzSWQgPSB0ZXN0U2Ny
aXB0WzBdOworICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJvb3RSZW5kZXJQYXNzID0gY3JlYXRl
RHVtbXlSZW5kZXJQYXNzKHRlc3REYXRhLCByb290UmVuZGVyUGFzc0lkKTsKKyAgICB0ZXN0RGF0
YS5yZW5kZXJQYXNzSWQuaW5zZXJ0KHN0ZDo6cGFpcjxDQ1JlbmRlclBhc3MqLCBjaGFyPihyb290
UmVuZGVyUGFzcy5nZXQoKSwgcm9vdFJlbmRlclBhc3NJZCkpOworICAgIHRlc3REYXRhLnJlbmRl
clBhc3NDYWNoZS5pbnNlcnQoc3RkOjpwYWlyPGNoYXIsIFJlbmRlclBhc3NDYWNoZUVudHJ5Pihy
b290UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeShyb290UmVuZGVyUGFzcy5yZWxl
YXNlKCkpKSk7CisgICAgd2hpbGUgKCpjdXJyZW50Q2hhcikgewogICAgICAgICBjaGFyIHJlbmRl
clBhc3NJZCA9IGN1cnJlbnRDaGFyWzBdOwogICAgICAgICBjdXJyZW50Q2hhcisrOwogCkBAIC0y
OTkxLDcgKzI5NjgsNyBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEo
Y29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAgICAgICByZW5kZXJQ
YXNzID0gdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlW3JlbmRlclBhc3NJZF0ucmVuZGVyUGFzc1B0
ci5yZWxlYXNlKCk7CiAKICAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCBxdWFkIGRhdGEgYW5kIGNy
ZWF0ZSBhbGwgcXVhZHMKLSAgICAgICAgd2hpbGUgKCpjdXJyZW50Q2hhciAhPSAnXG4nICYmICpj
dXJyZW50Q2hhciAhPSAnXDAnKSB7CisgICAgICAgIHdoaWxlICgqY3VycmVudENoYXIgJiYgKmN1
cnJlbnRDaGFyICE9ICdcbicpIHsKICAgICAgICAgICAgIGlmICgqY3VycmVudENoYXIgPT0gJ3Mn
KSB7CiAgICAgICAgICAgICAgICAgLy8gU29saWQgY29sb3IgZHJhdyBxdWFkCiAgICAgICAgICAg
ICAgICAgT3duUHRyPENDRHJhd1F1YWQ+IHF1YWQgPSBDQ1NvbGlkQ29sb3JEcmF3UXVhZDo6Y3Jl
YXRlKHRlc3REYXRhLnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgSW50UmVjdCgwLCAwLCAxMCwgMTAp
LCBTS19Db2xvcldISVRFKTsKQEAgLTMwMDEsMTMgKzI5NzgsMTQgQEAgc3RhdGljIHZvaWQgY29u
ZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IGNoYXIqIHRlc3RTY3JpcHQsIFJlbmRlclBh
c3NSZW1vdmEKICAgICAgICAgICAgIH0gZWxzZSBpZiAoKCpjdXJyZW50Q2hhciA+PSAnQScpICYm
ICgqY3VycmVudENoYXIgPD0gJ1onKSkgewogICAgICAgICAgICAgICAgIC8vIFJlbmRlclBhc3Mg
ZHJhdyBxdWFkCiAgICAgICAgICAgICAgICAgY2hhciBuZXdSZW5kZXJQYXNzSWQgPSAqY3VycmVu
dENoYXI7CisgICAgICAgICAgICAgICAgQVNTRVJUX05FKHJvb3RSZW5kZXJQYXNzSWQsIG5ld1Jl
bmRlclBhc3NJZCk7CiAgICAgICAgICAgICAgICAgY3VycmVudENoYXIrKzsKICAgICAgICAgICAg
ICAgICBib29sIGhhc1RleHR1cmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBib29sIGNvbnRl
bnRzQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KCpjdXJyZW50Q2hhciA9PSAnWycpIHsKICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXIr
KzsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgqY3VycmVudENoYXIgIT0gJ10nKSAmJiAo
KmN1cnJlbnRDaGFyICE9ICdcMCcpKSB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqY3Vy
cmVudENoYXIgJiYgKmN1cnJlbnRDaGFyICE9ICddJykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoICgqY3VycmVudENoYXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J2MnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzQ2hhbmdlZCA9IGZhbHNl
OwpAQCAtMzAyNSwyMiArMzAwMywyMiBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNz
VGVzdERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAgICAg
ICAgICAgICAgIENDUmVuZGVyUGFzcyogcmVmUmVuZGVyUGFzc1B0cjsKIAogICAgICAgICAgICAg
ICAgIGlmICh0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGUuZmluZChuZXdSZW5kZXJQYXNzSWQpID09
IHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZS5lbmQoKSkgewotICAgICAgICAgICAgICAgICAgICBP
d25QdHI8Q0NSZW5kZXJQYXNzPiByZWZSZW5kZXJQYXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNz
KHRlc3REYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1RleHR1cmUpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZW5kZXJlci0+c2V0SGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRl
clBhc3NJZChuZXdSZW5kZXJQYXNzSWQpOworCisgICAgICAgICAgICAgICAgICAgIE93blB0cjxD
Q1JlbmRlclBhc3M+IHJlZlJlbmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3ModGVzdERh
dGEsIG5ld1JlbmRlclBhc3NJZCk7CiAgICAgICAgICAgICAgICAgICAgIHJlZlJlbmRlclBhc3NQ
dHIgPSByZWZSZW5kZXJQYXNzLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBGYWtlUmVuZGVy
U3VyZmFjZSogcmVmUmVuZGVyU3VyZmFjZSA9IHN0YXRpY19jYXN0PEZha2VSZW5kZXJTdXJmYWNl
Kj4ocmVmUmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
cmVmUmVuZGVyU3VyZmFjZS0+c2V0SGFzQ2FjaGVkVGV4dHVyZShoYXNUZXh0dXJlKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmVmUmVuZGVyU3VyZmFjZS0+c2V0Q29udGVudHNDaGFuZ2VkKGNvbnRl
bnRzQ2hhbmdlZCk7CiAgICAgICAgICAgICAgICAgICAgIHRlc3REYXRhLnJlbmRlclBhc3NJZC5p
bnNlcnQoc3RkOjpwYWlyPENDUmVuZGVyUGFzcyosIGNoYXI+KHJlZlJlbmRlclBhc3MuZ2V0KCks
IG5ld1JlbmRlclBhc3NJZCkpOwogICAgICAgICAgICAgICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQ
YXNzQ2FjaGUuaW5zZXJ0KHN0ZDo6cGFpcjxjaGFyLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeT4obmV3
UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeShyZWZSZW5kZXJQYXNzLnJlbGVhc2Uo
KSkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmVmUmVu
ZGVyUGFzc1B0ciA9IHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZVtuZXdSZW5kZXJQYXNzSWRdLnJl
bmRlclBhc3M7CiAKLSAgICAgICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+
IHF1YWQgPSBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHRlc3REYXRhLnNoYXJlZFF1YWRT
dGF0ZS5nZXQoKSwgSW50UmVjdCgpLCByZWZSZW5kZXJQYXNzUHRyLCBpc1JlcGxpY2EsIFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucygpLCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMoKSwg
MSk7CisgICAgICAgICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBxdWFkID0g
Q0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZSh0ZXN0RGF0YS5zaGFyZWRRdWFkU3RhdGUuZ2V0
KCksIEludFJlY3QoKSwgcmVmUmVuZGVyUGFzc1B0ciwgaXNSZXBsaWNhLCBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMoKSwgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCksIDEsIGNvbnRl
bnRzQ2hhbmdlZCk7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q0NUZXN0UmVuZGVyUGFz
cyo+KHJlbmRlclBhc3MuZ2V0KCkpLT5hcHBlbmRRdWFkKHF1YWQucmVsZWFzZSgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzTGlzdC5pbnNl
cnQoMCwgcmVuZGVyUGFzcy5yZWxlYXNlKCkpOwotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyICE9
ICdcMCcpCisgICAgICAgIGlmICgqY3VycmVudENoYXIpCiAgICAgICAgICAgICBjdXJyZW50Q2hh
cisrOwogICAgIH0KIH0KQEAgLTMwNjMsMTUgKzMwNDEsMTQgQEAgdm9pZCBkdW1wUmVuZGVyUGFz
c1Rlc3REYXRhKGNvbnN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEmIHRlc3REYXRhLCBjaGFy
KiBidWYKICAgICAgICAgICAgICAgICAqcG9zID0gJ3MnOwogICAgICAgICAgICAgICAgIHBvcysr
OwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDQ0RyYXdRdWFkOjpS
ZW5kZXJQYXNzOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ0NSZW5k
ZXJQYXNzRHJhd1F1YWQqIHJlbmRlclBhc3NEcmF3UXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVy
UGFzc0RyYXdRdWFkKj4oY3VycmVudFF1YWQpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBD
Q1JlbmRlclBhc3MqIHJlZlBhc3MgPSByZW5kZXJQYXNzRHJhd1F1YWQtPnJlbmRlclBhc3MoKTsK
LSAgICAgICAgICAgICAgICAgICAgY2hhciByZWZQYXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNz
SWQuZmluZChyZWZQYXNzKS0+c2Vjb25kOwotICAgICAgICAgICAgICAgICAgICAqcG9zID0gcmVm
UGFzc0lkOwotICAgICAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjYXNlIENDRHJhd1F1YWQ6OlJlbmRlclBhc3M6IHsKKyAgICAgICAgICAgICAg
ICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVyUGFzc0RyYXdRdWFkID0gc3RhdGljX2Nhc3Q8
Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihjdXJyZW50UXVhZCk7CisgICAgICAgICAgICAgICAgY29u
c3QgQ0NSZW5kZXJQYXNzKiByZWZQYXNzID0gcmVuZGVyUGFzc0RyYXdRdWFkLT5yZW5kZXJQYXNz
KCk7CisgICAgICAgICAgICAgICAgY2hhciByZWZQYXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNz
SWQuZmluZChyZWZQYXNzKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICpwb3MgPSByZWZQYXNz
SWQ7CisgICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICpwb3MgPSAn
eCc7CiAgICAgICAgICAgICAgICAgcG9zKys7CkBAIC0zMjM1LDE1ICszMjEyLDE5IEBAIHN0YXRp
YyB2b2lkIHZlcmlmeVJlbmRlclBhc3NUZXN0RGF0YShUZXN0Q2FzZSYgdGVzdENhc2UsIFJlbmRl
clBhc3NSZW1vdmFsVGVzdERhCiAgICAgRVhQRUNUX1NUUkVRKHRlc3RDYXNlLmV4cGVjdGVkUmVz
dWx0LCBhY3R1YWxSZXN1bHQpIDw8ICJJbiB0ZXN0IGNhc2U6ICIgPDwgdGVzdENhc2UubmFtZTsK
IH0KIAotVEVTVChSZW5kZXJQYXNzUmVtb3ZhbFRlc3QsIHRlc3RSZW1vdmVSZW5kZXJQYXNzZXMp
CitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHRlc3RSZW1vdmVSZW5kZXJQYXNzZXMp
CiB7CisgICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjb250ZXh0KGNyZWF0ZUNvbnRleHQo
KSk7CisgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gY29udGV4
dC0+Y29udGV4dDNEKCk7CisgICAgQVNTRVJUX1RSVUUoY29udGV4dDNkKTsKKyAgICBPd25QdHI8
Q0NUZXN0UmVuZGVyZXI+IHJlbmRlcmVyKENDVGVzdFJlbmRlcmVyOjpjcmVhdGUoY29udGV4dDNk
KSk7CisKICAgICBpbnQgdGVzdENhc2VJbmRleCA9IDA7CiAgICAgd2hpbGUgKHJlbW92ZVJlbmRl
clBhc3Nlc0Nhc2VzW3Rlc3RDYXNlSW5kZXhdLm5hbWUpIHsKLSAgICAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIFJlbmRlclBhc3NSZW1vdmFsVGVzdERh
dGEgdGVzdERhdGE7CiAgICAgICAgIENDUmVuZGVyUGFzc0xpc3Qgc2tpcHBlZFBhc3NlczsKLSAg
ICAgICAgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKHJlbW92ZVJlbmRlclBhc3Nlc0Nhc2Vz
W3Rlc3RDYXNlSW5kZXhdLmluaXRTY3JpcHQsIHRlc3REYXRhKTsKLSAgICAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKHRlc3REYXRhLnJlbmRl
clBhc3NMaXN0LCBza2lwcGVkUGFzc2VzKTsKKyAgICAgICAgY29uZmlndXJlUmVuZGVyUGFzc1Rl
c3REYXRhKHJlbW92ZVJlbmRlclBhc3Nlc0Nhc2VzW3Rlc3RDYXNlSW5kZXhdLmluaXRTY3JpcHQs
IHRlc3REYXRhLCByZW5kZXJlci5nZXQoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyh0ZXN0RGF0YS5yZW5kZXJQYXNzTGlzdCwg
c2tpcHBlZFBhc3NlcywgcmVuZGVyZXIuZ2V0KCkpOwogICAgICAgICB2ZXJpZnlSZW5kZXJQYXNz
VGVzdERhdGEocmVtb3ZlUmVuZGVyUGFzc2VzQ2FzZXNbdGVzdENhc2VJbmRleF0sIHRlc3REYXRh
KTsKICAgICAgICAgdGVzdENhc2VJbmRleCsrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwCmlu
ZGV4IGNmZGNkYzE1NmE3MmI2OWU5OGM2MTZhZGVhYWMyNDE4Y2YyYjY2ZTQuLjljOWVjMjViMDNl
ZDEwYjUyOTExOGZlN2NlMTBiYzNkMTRlMWU0NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcApAQCAt
NzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9tZW1vcnlBbGxvY2F0aW9uTGltaXRC
eXRlcygwKQogICAgIHsKICAgICAgICAgbV9yb290TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKLSAgICAgICAgbV9yb290UmVuZGVyUGFzcyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKG1fcm9v
dExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgICAgICBtX3Jvb3RSZW5kZXJQYXNzID0gQ0NS
ZW5kZXJQYXNzOjpjcmVhdGUobV9yb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKSwgbV9yb290TGF5
ZXItPmlkKCkpOwogICAgIH0KIAogICAgIC8vIENDUmVuZGVyZXJDbGllbnQgbWV0aG9kcy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151107</attachid>
            <date>2012-07-06 11:53:40 -0700</date>
            <delta_ts>2012-07-09 14:09:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90573-20120706145339.patch</filename>
            <type>text/plain</type>
            <size>78062</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxOTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzhlZGY0OTJjZWNkZTUw
YTE3ZmJjMjZiMWMyMDA3YTY3N2UyY2I5MS4uMmU1NDMxYjVmMmUzZGM1YTlkZTYzM2FmYTc2ZGE5
NTY4YTc0YTgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA3LTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRGVj
b3VwbGUgUmVuZGVyUGFzcyBkcmF3aW5nIGZyb20gQ0NSZW5kZXJTdXJmYWNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIFJlbW92ZSB0aGUgbWFuYWdl
ZCB0ZXh0dXJlcyBmcm9tIENDUmVuZGVyU3VyZmFjZSBhbmQgc3RvcmUgdGhlbSBpbiBhCisgICAg
ICAgIEhhc2hNYXAgaW4gTGF5ZXJSZW5kZXJlckNocm9taXVtLgorCisgICAgICAgIEF0IHRoZSBz
dGFydCBvZiBhIGZyYW1lLCBhbGwgdGV4dHVyZXMgZm9yIHRoZSBmcmFtZSBhcmUgcmVzZXJ2ZWQs
IGFuZAorICAgICAgICB1bm5lZWRlZCB0ZXh0dXJlcyBhcmUgZGVsZXRlZC4gQWZ0ZXIgZWFjaCBx
dWFkIGlzIGRyYXduLCBldmljdGVkIHRleHR1cmVzCisgICAgICAgIChpZSB0ZW1wb3JhcnkgdGV4
dHVyZXMgdXNlZCBmb3IgYmFja2dyb3VuZCBmaWx0ZXJzKSBhcmUgZGVsZXRlZCB0byBrZWVwCisg
ICAgICAgIHdpdGhpbiBtZW1vcnkgbGltaXRzLiBBdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSwgYWxs
IHN1cmZhY2UgY29udGVudHMKKyAgICAgICAgdGV4dHVyZXMgYXJlIGtlcHQgcmVzZXJ2ZWQgYW5k
IHRodXMgbm90IGRlbGV0ZWQuCisKKyAgICAgICAgV2UgYWRkIGEgbnVtZXJpYyBpZGVudGlmaWVy
IHRvIENDUmVuZGVyUGFzcyB3aGljaCBjYW4gYmUgdXNlZCB0bworICAgICAgICBpZGVudGlmeSB0
aGUgcGFzcyBhY3Jvc3Mgc2VyaWFsaXphdGlvbiBpbiB0aGUgZnV0dXJlLCBhbmQgaXMgdXNlZAor
ICAgICAgICBpbiB0aGUgaW50ZXJmYWNlIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bS4gQWxzbyB3
ZSBhZGQgdG8gdGhlCisgICAgICAgIENDUmVuZGVyUGFzcyBhIGNvbnRlbnRzQ2hhbmdlZFNpbmNl
TGFzdEZyYW1lKCkgZmxhZyBzbyB0aGF0IHRoZQorICAgICAgICB2YWx1ZSBkb2VzIG5vdCBuZWVk
IHRvIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBDQ1JlbmRlclN1cmZhY2UuCisKKyAgICAgICAgVGhl
IHBvaW50ZXIgZnJvbSBDQ1JlbmRlclBhc3MgdG8gQ0NSZW5kZXJTdXJmYWNlIHJlbWFpbnMgZm9y
IHNvbWUKKyAgICAgICAgY29kZSBpbiB0aGUgQ0NMYXllclRyZWVIb3N0SW1wbCwgYW5kIHdpbGwg
YmUgYWRkcmVzc2VkIGluIHRoZSBmdXR1cmUsIGJ1dAorICAgICAgICB0aGUgcG9pbnRlciBpcyBu
byBsb25nZXIgdXNlZCBhdCBhbGwgd2hpbGUgZHJhd2luZyBhIGZyYW1lIGluc2lkZQorICAgICAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW0uCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0
ZXN0cywgbm8gaW50ZW5kZWQgY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5k
ZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJl
bmRlclBhc3NJZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0Jh
Y2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1JlbmRlclBhc3NRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KExheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNz
OjpDQ1JlbmRlclBhc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyUGFzczo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpz
ZXRGcmFtZWJ1ZmZlck91dHB1dFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
UmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQ
YXNzRHJhd1F1YWQ6OkNDUmVuZGVyUGFzc0RyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oOgorICAgICAgICAoQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzRHJhd1F1
YWQ6OnJlbmRlclBhc3NJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVh
ZDo6Y29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQ0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmg6CisgICAgICAgIChDQ1JlbmRlcmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnB1c2hUaWxlUHJvcGVydGllcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5o
OgorICAgICAgICAoQ0NUaWxlZExheWVySW1wbCk6CisKIDIwMTItMDctMDYgIFZzZXZvbG9kIFZs
YXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogU25p
cHBldCByZW5hbWluZyBiZWhhdmlvciBpcyBub3QgY29ycmVjdC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKaW5kZXggNzM4NDk0MDQ3MGJmZDMyOTM0YTdjNDk3ZGE1OWVkNTNjNWQ0ZTRiMi4uYTQy
MWI0ZTY3YWZmZmMxMjRhNzFjNGVlMWZmMmZkZDdkMzM4OTUxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0wNSAgRGFuYSBKYW5zZW5zICA8ZGFu
YWtqQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIFJlbmRlclBh
c3MgZHJhd2luZyBmcm9tIENDUmVuZGVyU3VyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA1NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNw
cDoKKyAgICAgICAgKiB0ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAg
ICAgKEZha2VDQ1JlbmRlcmVyQ2xpZW50OjpGYWtlQ0NSZW5kZXJlckNsaWVudCk6CisKIDIwMTIt
MDctMDUgIFlvc2hpZnVtaSBJbm91ZSAgPHlvc2luQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkIENocm9taXVtIGdhcmRlbmluZy4gUm9sbCBDaHJvbWl1bSBERVBTCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA4MzVkZmJkN2YxOTdjMDk0ZDc0OTM0
ODkxNGNiYzY0YWY4ODE5N2JjLi5iMTk1YmU1OWM1NTA3YzRiMjE5ZDU4ZTIyMzI3MDEwYzIzMjUx
YTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTI3NCw4ICsy
NzQsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldFZpc2libGUoYm9vbCB2aXNp
YmxlKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRlclBhc3NUZXh0
dXJlcygpCiB7Ci0gICAgaWYgKG1faW1wbFRleHR1cmVNYW5hZ2VyKQotICAgICAgICBtX2ltcGxU
ZXh0dXJlTWFuYWdlci0+ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxs
b2NhdG9yLmdldCgpKTsKKyAgICBpZiAoIW1faW1wbFRleHR1cmVNYW5hZ2VyKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMuY2xlYXIoKTsKKyAgICBtX2ltcGxUZXh0
dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3Iu
Z2V0KCkpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2Vk
KCkKQEAgLTMxNSwxMiArMzE3LDU0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVh
clJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBjb25zCiAKIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFt
ZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiByZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikKIHsKLSAg
ICAvLyBGSVhNRTogR2V0IHRoaXMgbWVtb3J5IGxpbWl0IGZyb20gR1BVIE1lbW9yeSBNYW5hZ2Vy
Ci0gICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFs
bG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCk7Ci0gICAgc2l6ZV90IG1heExpbWl0Qnl0
ZXMgPSBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXModmlld3BvcnRTaXplKCkpOwotICAg
IHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzID0gbWF4TGltaXRCeXRlcyAtIGNvbnRlbnRzTWVtb3J5
VXNlQnl0ZXMgPiAwdSA/IG1heExpbWl0Qnl0ZXMgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzIDog
MHU7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgY29uc3QgQ0NSZW5kZXJQYXNzKj4gcGFzc2VzSW5G
cmFtZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVy
LnNpemUoKTsgKytpKQorICAgICAgICBwYXNzZXNJbkZyYW1lLnNldChyZW5kZXJQYXNzZXNJbkRy
YXdPcmRlcltpXS0+aWQoKSwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0uZ2V0KCkpOworCisg
ICAgVmVjdG9yPHVuc2lnbmVkPiBwYXNzZXNUb0RlbGV0ZTsKKyAgICBIYXNoTWFwPHVuc2lnbmVk
LCBPd25QdHI8TWFuYWdlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9yIHBhc3NJdGVyYXRvcjsK
KyAgICBmb3IgKHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmJlZ2luKCk7IHBh
c3NJdGVyYXRvciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsgKytwYXNzSXRlcmF0b3Ip
IHsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzSW5GcmFtZSA9IHBhc3Nl
c0luRnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAgICBpZiAoIXJlbmRlclBh
c3NJbkZyYW1lKSB7CisgICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJh
dG9yLT5maXJzdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJlbmRlclBhc3NJbkZyYW1lLT5mcmFtZWJ1
ZmZlck91dHB1dFJlY3QoKS5zaXplKCk7CisgICAgICAgIEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0
dXJlID0gcGFzc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgICAgIGlmICghdGV4dHVyZSB8
fCAhdGV4dHVyZS0+aXNWYWxpZChyZXF1aXJlZFNpemUsIHJlcXVpcmVkRm9ybWF0KSkgeworICAg
ICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBtX2ltcGxUZXh0dXJl
TWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtZW1vcnlMaW1pdEJ5dGVzKTsKKyAgICAv
LyBEZWxldGUgUmVuZGVyUGFzcyB0ZXh0dXJlcyBmcm9tIHRoZSBwcmV2aW91cyBmcmFtZSB0aGF0
IHdpbGwgbm90IGJlIHVzZWQgYWdhaW4uCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNz
ZXNUb0RlbGV0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9yZW5kZXJQYXNzVGV4dHVyZXMucmVt
b3ZlKHBhc3Nlc1RvRGVsZXRlW2ldKTsKKyAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZGVsZXRl
RXZpY3RlZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOworCisgICAgLy8g
QWxsIFJlbmRlclBhc3MgdGV4dHVyZXMgc2hvdWxkIGJlIHJlc2VydmVkIGZvciB0aGUgY3VycmVu
dCBmcmFtZS4gRXZlcnkgUmVuZGVyUGFzcyB0ZXh0dXJlCisgICAgLy8gaXMga2VwdCByZXNlcnZl
ZCB1bnRpbCBpdCBpcyByZW1vdmVkIGFuZCBkZWxldGVkLgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgTWFu
YWdlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocmVuZGVyUGFz
c2VzSW5EcmF3T3JkZXJbaV0tPmlkKCkpOworICAgICAgICBpZiAoIXRleHR1cmUpIHsKKyAgICAg
ICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gb3duVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJl
OjpjcmVhdGUobV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCkpOworICAgICAgICAgICAgdGV4dHVy
ZSA9IG93blRleHR1cmUuZ2V0KCk7CisgICAgICAgICAgICBtX3JlbmRlclBhc3NUZXh0dXJlcy5z
ZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIG93blRleHR1cmUucmVsZWFzZSgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJl
bmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKS5zaXplKCk7
CisgICAgICAgIEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE7CisgICAgICAgIGJvb2wgcmVzZXJ2ZWQgPSB0ZXh0dXJlLT5yZXNlcnZlKHJlcXVpcmVkU2l6
ZSwgcmVxdWlyZWRGb3JtYXQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc2VydmVkLCByZXNl
cnZlZCk7CisgICAgfQorfQorCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hl
ZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZCh1bnNpZ25lZCBpZCkgY29uc3QKK3sKKyAgICBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdldChpZCk7CisgICAg
cmV0dXJuIHRleHR1cmUgJiYgdGV4dHVyZS0+dGV4dHVyZUlkKCk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3MqIHJv
b3RSZW5kZXJQYXNzKQpAQCAtNDE5LDYgKzQ2Myw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQogICAgICAgICBkcmF3WVVWVmlk
ZW9RdWFkKHF1YWQtPnRvWVVWVmlkZW9EcmF3UXVhZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorCisgICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2lt
cGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHF1
YWQpCkBAIC00ODgsNyArNTM0LDcgQEAgc3RhdGljIGlubGluZSBTa0JpdG1hcCBhcHBseUZpbHRl
cnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdAogICAgIHJldHVy
biBDQ1JlbmRlclN1cmZhY2VGaWx0ZXJzOjphcHBseShmaWx0ZXJzLCBzb3VyY2VUZXh0dXJlLT50
ZXh0dXJlSWQoKSwgc291cmNlVGV4dHVyZS0+c2l6ZSgpLCBmaWx0ZXJDb250ZXh0LmdldCgpKTsK
IH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhj
b25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQorUGFzc093blB0cjxNYW5hZ2VkVGV4dHVy
ZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBj
b250ZW50c0RldmljZVRyYW5zZm9ybSkKIHsKICAgICAvLyBUaGlzIG1ldGhvZCBkcmF3cyBhIGJh
Y2tncm91bmQgZmlsdGVyLCB3aGljaCBhcHBsaWVzIGEgZmlsdGVyIHRvIGFueSBwaXhlbHMgYmVo
aW5kIHRoZSBxdWFkIGFuZCBzZWVuIHRocm91Z2ggaXRzIGJhY2tncm91bmQuCiAgICAgLy8gVGhl
IGFsZ29yaXRobSB3b3JrcyBhcyBmb2xsb3dzOgpAQCAtNTA2LDE0ICs1NTIsMTMgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRl
clBhc3NEcmF3UXVhZCogcXUKIAogICAgIC8vIEZJWE1FOiBXaGVuIHRoaXMgYWxnb3JpdGhtIGNo
YW5nZXMsIHVwZGF0ZSBDQ0xheWVyVHJlZUhvc3Q6OnByaW9yaXRpemVUZXh0dXJlcygpIGFjY29y
ZGluZ2x5LgogCi0gICAgQ0NSZW5kZXJTdXJmYWNlKiBkcmF3aW5nU3VyZmFjZSA9IHF1YWQtPnJl
bmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpOwogICAgIGlmIChxdWFkLT5iYWNrZ3JvdW5kRmls
dGVycygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIC8vIEZJWE1FOiBXZSBvbmx5IGFsbG93IGJhY2tncm91bmQgZmlsdGVycyBvbiBh
biBvcGFxdWUgcmVuZGVyIHN1cmZhY2UgYmVjYXVzZSBvdGhlciBzdXJmYWNlcyBtYXkgY29udGFp
bgogICAgIC8vIHRyYW5zbHVjZW50IHBpeGVscywgYW5kIHRoZSBjb250ZW50cyBiZWhpbmQgdGhv
c2UgdHJhbnNsdWNlbnQgcGl4ZWxzIHdvdWxkbid0IGhhdmUgdGhlIGZpbHRlciBhcHBsaWVkLgog
ICAgIGlmIChtX2N1cnJlbnRSZW5kZXJQYXNzLT5oYXNUcmFuc3BhcmVudEJhY2tncm91bmQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBBU1NFUlQoIW1f
Y3VycmVudE1hbmFnZWRUZXh0dXJlKTsKIAogICAgIC8vIEZJWE1FOiBEbyBhIHNpbmdsZSByZWFk
YmFjayBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2FjaGUgdGhlIGZpbHRl
cmVkIHJlc3VsdHMgKG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1c2VkKS4KQEAgLTUy
OCwyMCArNTczLDIzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3Vu
ZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1CiAKICAgICBPd25QdHI8TWFu
YWdlZFRleHR1cmU+IGRldmljZUJhY2tncm91bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNy
ZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgaWYgKCFnZXRGcmFtZWJ1ZmZl
clRleHR1cmUoZGV2aWNlQmFja2dyb3VuZFRleHR1cmUuZ2V0KCksIGRldmljZVJlY3QpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgU2tCaXRtYXAgZmls
dGVyZWREZXZpY2VCYWNrZ3JvdW5kID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmJhY2tncm91
bmRGaWx0ZXJzKCksIGRldmljZUJhY2tncm91bmRUZXh0dXJlLmdldCgpKTsKICAgICBpZiAoIWZp
bHRlcmVkRGV2aWNlQmFja2dyb3VuZC5nZXRUZXh0dXJlKCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBHclRleHR1cmUqIHRleHR1cmUgPSByZWludGVy
cHJldF9jYXN0PEdyVGV4dHVyZSo+KGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZC5nZXRUZXh0dXJl
KCkpOwogICAgIGludCBmaWx0ZXJlZERldmljZUJhY2tncm91bmRUZXh0dXJlSWQgPSB0ZXh0dXJl
LT5nZXRUZXh0dXJlSGFuZGxlKCk7CiAKLSAgICBpZiAoIWRyYXdpbmdTdXJmYWNlLT5wcmVwYXJl
QmFja2dyb3VuZFRleHR1cmUodGhpcykpCi0gICAgICAgIHJldHVybjsKKyAgICBPd25QdHI8TWFu
YWdlZFRleHR1cmU+IGJhY2tncm91bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZSht
X2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7CisgICAgaWYgKCFiYWNrZ3JvdW5kVGV4dHVyZS0+
cmVzZXJ2ZShxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0IENDUmVuZGVyUGFzcyogdGFy
Z2V0UmVuZGVyUGFzcyA9IG1fY3VycmVudFJlbmRlclBhc3M7Ci0gICAgaWYgKHVzZU1hbmFnZWRU
ZXh0dXJlKGRyYXdpbmdTdXJmYWNlLT5iYWNrZ3JvdW5kVGV4dHVyZSgpLCBxdWFkLT5xdWFkUmVj
dCgpKSkgeworICAgIGJvb2wgdXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSA9IHVzZU1hbmFnZWRUZXh0
dXJlKGJhY2tncm91bmRUZXh0dXJlLmdldCgpLCBxdWFkLT5xdWFkUmVjdCgpKTsKKworICAgIGlm
ICh1c2luZ0JhY2tncm91bmRUZXh0dXJlKSB7CiAgICAgICAgIC8vIENvcHkgdGhlIHJlYWRiYWNr
IHBpeGVscyBmcm9tIGRldmljZSB0byB0aGUgYmFja2dyb3VuZCB0ZXh0dXJlIGZvciB0aGUgc3Vy
ZmFjZS4KICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNlVG9GcmFtZWJ1ZmZl
clRyYW5zZm9ybTsKICAgICAgICAgZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5zZm9ybS50cmFuc2xh
dGUocXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpIC8gMi4wLCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdo
dCgpIC8gMi4wKTsKQEAgLTU1MSw0NiArNTk5LDQ1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1
CiAgICAgICAgIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0udHJhbnNsYXRlKGRldmljZVJl
Y3QueCgpLCBkZXZpY2VSZWN0LnkoKSk7CiAKICAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVm
ZmVyKGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCwgZGV2aWNlUmVjdC5zaXplKCks
IGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0pOwotCi0gICAgICAgIHVzZVJlbmRlclBhc3Mo
dGFyZ2V0UmVuZGVyUGFzcyk7CiAgICAgfQorCisgICAgdXNlUmVuZGVyUGFzcyh0YXJnZXRSZW5k
ZXJQYXNzKTsKKworICAgIGlmICghdXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJhY2tncm91bmRUZXh0dXJlLnJlbGVhc2UoKTsKIH0K
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBD
Q1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCkKIHsKLSAgICAvLyBUaGUgcmVwbGljYSBpcyBhbHdh
eXMgZHJhd24gZmlyc3QsIHNvIGZyZWUgYWZ0ZXIgZHJhd2luZyB0aGUgY29udGVudHMuCi0gICAg
Ym9vbCBzaG91bGRSZWxlYXNlVGV4dHVyZXMgPSAhcXVhZC0+aXNSZXBsaWNhKCk7Ci0KLSAgICBD
Q1JlbmRlclN1cmZhY2UqIGRyYXdpbmdTdXJmYWNlID0gcXVhZC0+cmVuZGVyUGFzcygpLT50YXJn
ZXRTdXJmYWNlKCk7Ci0KICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJUcmFuc2Zv
cm0gPSBxdWFkLT5sYXllclRyYW5zZm9ybSgpOwogICAgIC8vIEFwcGx5IGEgc2NhbGluZyBmYWN0
b3IgdG8gc2l6ZSB0aGUgcXVhZCBmcm9tIDF4MSB0byBpdHMgaW50ZW5kZWQgc2l6ZS4KICAgICBy
ZW5kZXJUcmFuc2Zvcm0uc2NhbGUzZChxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCksIHF1YWQtPnF1
YWRSZWN0KCkuaGVpZ2h0KCksIDEpOwogICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRl
bnRzRGV2aWNlVHJhbnNmb3JtID0gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgod2luZG93TWF0cml4
KCkgKiBwcm9qZWN0aW9uTWF0cml4KCkgKiByZW5kZXJUcmFuc2Zvcm0pLnRvMmRUcmFuc2Zvcm0o
KTsKIAogICAgIC8vIENhbiBvbmx5IGRyYXcgc3VyZmFjZSBpZiBkZXZpY2UgbWF0cml4IGlzIGlu
dmVydGlibGUuCi0gICAgaWYgKCFjb250ZW50c0RldmljZVRyYW5zZm9ybS5pc0ludmVydGlibGUo
KSB8fCAhZHJhd2luZ1N1cmZhY2UtPmhhc1ZhbGlkQ29udGVudHNUZXh0dXJlKCkpIHsKLSAgICAg
ICAgaWYgKHNob3VsZFJlbGVhc2VUZXh0dXJlcykgewotICAgICAgICAgICAgZHJhd2luZ1N1cmZh
Y2UtPnJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpOwotICAgICAgICAgICAgZHJhd2luZ1N1cmZh
Y2UtPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKLSAgICAgICAgfQorICAgIGlmICghY29udGVu
dHNEZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9
CiAKLSAgICBkcmF3QmFja2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVudHNEZXZpY2VUcmFuc2Zv
cm0pOworICAgIE1hbmFnZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUgPSBtX3JlbmRlclBhc3NU
ZXh0dXJlcy5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgIEFTU0VSVChjb250ZW50c1Rl
eHR1cmUgJiYgY29udGVudHNUZXh0dXJlLT50ZXh0dXJlSWQoKSk7CisKKyAgICBPd25QdHI8TWFu
YWdlZFRleHR1cmU+IGJhY2tncm91bmRUZXh0dXJlID0gZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1
YWQsIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiBDYWNoZSB0aGlz
IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90aCB0aGUgc3VyZmFj
ZSBhbmQgaXRzIHJlcGxpY2EuCiAgICAgLy8gQXBwbHkgZmlsdGVycyB0byB0aGUgY29udGVudHMg
dGV4dHVyZS4KLSAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZpbHRlcnModGhpcywg
cXVhZC0+ZmlsdGVycygpLCBkcmF3aW5nU3VyZmFjZS0+Y29udGVudHNUZXh0dXJlKCkpOwotICAg
IGludCBjb250ZW50c1RleHR1cmVJZCA9IGRyYXdpbmdTdXJmYWNlLT5jb250ZW50c1RleHR1cmUo
KS0+dGV4dHVyZUlkKCk7CisgICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0ZXJz
KHRoaXMsIHF1YWQtPmZpbHRlcnMoKSwgY29udGVudHNUZXh0dXJlKTsKKyAgICBpbnQgY29udGVu
dHNUZXh0dXJlSWQgPSBjb250ZW50c1RleHR1cmUtPnRleHR1cmVJZCgpOwogICAgIGlmIChmaWx0
ZXJCaXRtYXAuZ2V0VGV4dHVyZSgpKSB7CiAgICAgICAgIEdyVGV4dHVyZSogdGV4dHVyZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVyQml0bWFwLmdldFRleHR1cmUoKSk7CiAg
ICAgICAgIGNvbnRlbnRzVGV4dHVyZUlkID0gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwog
ICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgdGV4dHVyZSBpZiB0aGVyZSBpcyBv
bmUuCi0gICAgaWYgKGRyYXdpbmdTdXJmYWNlLT5oYXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkp
Ci0gICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihkcmF3aW5nU3VyZmFjZS0+YmFja2dy
b3VuZFRleHR1cmUoKS0+dGV4dHVyZUlkKCksIHF1YWQtPnF1YWRSZWN0KCkuc2l6ZSgpLCBxdWFk
LT5sYXllclRyYW5zZm9ybSgpKTsKKyAgICBpZiAoYmFja2dyb3VuZFRleHR1cmUpIHsKKyAgICAg
ICAgQVNTRVJUKGJhY2tncm91bmRUZXh0dXJlLT5zaXplKCkgPT0gcXVhZC0+cXVhZFJlY3QoKS5z
aXplKCkpOworICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoYmFja2dyb3VuZFRleHR1
cmUtPnRleHR1cmVJZCgpLCBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgcXVhZC0+bGF5ZXJUcmFu
c2Zvcm0oKSk7CisgICAgfQogCiAgICAgYm9vbCBjbGlwcGVkID0gZmFsc2U7CiAgICAgRmxvYXRR
dWFkIGRldmljZVF1YWQgPSBDQ01hdGhVdGlsOjptYXBRdWFkKGNvbnRlbnRzRGV2aWNlVHJhbnNm
b3JtLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwgY2xpcHBlZCk7CkBAIC02NzMsMTEgKzcyMCw2IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiAKICAgICBkcmF3VGV4dHVyZWRRdWFkKHF1YWQtPmxh
eWVyVHJhbnNmb3JtKCksIHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSwgcXVhZC0+cXVhZFJlY3Qo
KS5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzdXJmYWNlUXVhZCwKICAgICAgICAgICAgICAg
ICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uLCBzaGFkZXJBbHBoYUxvY2F0aW9uLCBzaGFkZXJR
dWFkTG9jYXRpb24pOwotCi0gICAgaWYgKHNob3VsZFJlbGVhc2VUZXh0dXJlcykgewotICAgICAg
ICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7Ci0gICAgICAgIGRy
YXdpbmdTdXJmYWNlLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgfQogfQogCiB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRD
b2xvckRyYXdRdWFkKiBxdWFkKQpAQCAtMTA3OSw5ICsxMTIxLDYgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSgpCiB7CiAgICAgR0xDKG1fY29udGV4dCwg
bV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAg
ICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKSk7Ci0KLSAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0QWxsVGV4dHVyZXMo
KTsKLSAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1faW1w
bFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbSkKQEAgLTEzMzksMTAgKzEzNzgsMTAgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIXJlbmRlclBhc3MtPnRhcmdldFN1cmZh
Y2UoKS0+cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSh0aGlzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNzVGV4dHVyZXMuZ2V0
KHJlbmRlclBhc3MtPmlkKCkpOworICAgIEFTU0VSVCh0ZXh0dXJlKTsKIAotICAgIHJldHVybiBi
aW5kRnJhbWVidWZmZXJUb1RleHR1cmUocmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpLT5jb250
ZW50c1RleHR1cmUoKSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkpOworICAg
IHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUodGV4dHVyZSwgcmVuZGVyUGFzcy0+ZnJh
bWVidWZmZXJPdXRwdXRSZWN0KCkpOwogfQogCiBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXNlTWFuYWdlZFRleHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3Qm
IHZpZXdwb3J0UmVjdCkKQEAgLTE0MzEsOSArMTQ3MCw3IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LCBt
X2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJl
TWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRlcyh2aWV3cG9ydFNp
emUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2FwYWJpbGl0
aWVzLm1heFRleHR1cmVTaXplKTsKKyAgICBtX2ltcGxUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNp
emUpOwogICAgIG1fdGV4dHVyZUNvcGllciA9IEFjY2VsZXJhdGVkVGV4dHVyZUNvcGllcjo6Y3Jl
YXRlKG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwogICAgIGlmIChtX3RleHR1cmVV
cGxvYWRlclNldHRpbmcgPT0gVGhyb3R0bGVkVXBsb2FkZXIpCiAgICAgICAgIG1fdGV4dHVyZVVw
bG9hZGVyID0gVGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyOjpjcmVhdGUobV9jb250ZXh0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNjI1ZTgyZjA4OGUwNzIxNTJlZWRi
Y2M2NDhjYmM4NTI5ZWZjNWExOC4uZmVjNTAxZjkzYTZlNWJiYjJjMDUwODI5NTIxMGJkNGJiM2Uz
M2E4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTgwLDYgKzgwLDgg
QEAgcHVibGljOgogICAgIGNvbnN0IEZsb2F0UXVhZCYgc2hhcmVkR2VvbWV0cnlRdWFkKCkgY29u
c3QgeyByZXR1cm4gbV9zaGFyZWRHZW9tZXRyeVF1YWQ7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBk
ZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0
JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhdmVDYWNoZWRSZXNvdXJjZXNGb3JSZW5k
ZXJQYXNzSWQodW5zaWduZWQgaWQpIGNvbnN0IE9WRVJSSURFOworCiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luRHJhd2luZ0ZyYW1lKGNvbnN0IENDUmVuZGVyUGFzcyogZGVmYXVsdFJlbmRlclBhc3Mp
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRl
clBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFtYWdlUmVjdCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaERyYXdpbmdGcmFtZSgpIE9WRVJSSURFOwpAQCAtMTIz
LDEzICsxMjUsMTUgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaXNGcmFtZWJ1ZmZlckRpc2NhcmRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGcmFtZWJ1ZmZlckRpc2NhcmRlZDsgfQogICAgIGJvb2wg
aW5pdGlhbGl6ZSgpOwogCisgICAgdm9pZCByZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCk7CisK
IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdG9HTE1hdHJpeChmbG9hdCosIGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKIAogICAgIHZvaWQgZHJhd1F1YWQoY29uc3Qg
Q0NEcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVj
a2VyYm9hcmREcmF3UXVhZCopOwogICAgIHZvaWQgZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBD
Q0RlYnVnQm9yZGVyRHJhd1F1YWQqKTsKLSAgICB2b2lkIGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhj
b25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSk7CisgICAgUGFzc093blB0cjxNYW5hZ2VkVGV4dHVy
ZT4gZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiwgY29u
c3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKICAg
ICB2b2lkIGRyYXdSZW5kZXJQYXNzUXVhZChjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCopOwog
ICAgIHZvaWQgZHJhd1NvbGlkQ29sb3JRdWFkKGNvbnN0IENDU29saWRDb2xvckRyYXdRdWFkKik7
CiAgICAgdm9pZCBkcmF3U3RyZWFtVmlkZW9RdWFkKGNvbnN0IENDU3RyZWFtVmlkZW9EcmF3UXVh
ZCopOwpAQCAtMTQ5LDggKzE1Myw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNsZWFyUmVuZGVy
UGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIGZyYW1lYnVmZmVyRGFt
YWdlUmVjdCk7CiAKLSAgICB2b2lkIHJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKLQogICAg
IGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBib29sIGluaXRpYWxpemVTaGFyZWRP
YmplY3RzKCk7CkBAIC0yNjMsNiArMjY1LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8VHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yPiBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcjsKICAgICBPd25Q
dHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX2ltcGxUZXh0dXJlQWxsb2NhdG9yOwogCisg
ICAgSGFzaE1hcDx1bnNpZ25lZCwgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiA+IG1fcmVuZGVyUGFz
c1RleHR1cmVzOworCiAgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0
OwogCiAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBtX2RlZmF1bHRSZW5kZXJQYXNzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCAxOTU3NDM3NjU1ODYwYmM5OTUx
ZjRhMTBlYzRlZWVkYjIxMDcwMzkwLi5hNmJjNTc1MWYwZmM1MGQ4MmNlY2NlOTMwMGFlZWZjY2Fh
OWRjMzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMjk1
LDcgKzI5NSw4IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFz
c2VzKEZyYW1lRGF0YSYgZnJhbWUpCiAgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNl
TGF5ZXIgPSAoKmZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QpW3N1cmZhY2VJbmRleF07CiAg
ICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXll
ci0+cmVuZGVyU3VyZmFjZSgpOwogCi0gICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3Mg
PSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgLy8gRklYTUU6
IE1ha2UgdGhpcyBpZCBnbG9iYWwgYWNyb3NzIGFsbCBjb21wb3NpdG9ycyAoaW5jbHVkZSBhIGNv
bXBvc2l0b3IgaWQ/KQorICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNzID0gQ0NSZW5k
ZXJQYXNzOjpjcmVhdGUocmVuZGVyU3VyZmFjZSwgcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpKTsK
ICAgICAgICAgc3VyZmFjZVBhc3NNYXAuYWRkKHJlbmRlclN1cmZhY2UsIHBhc3MuZ2V0KCkpOwog
ICAgICAgICBmcmFtZS5yZW5kZXJQYXNzZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKICAgICB9
CkBAIC0zNTEsNyArMzUyLDcgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVS
ZW5kZXJQYXNzZXMoRnJhbWVEYXRhJiBmcmFtZSkKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5v
dmVyZHJhd01ldHJpY3MoKS5yZWNvcmRNZXRyaWNzKHRoaXMpOwogCiAgICAgbV9sYXllclJlbmRl
cmVyLT5kZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShmcmFtZS5yZW5kZXJQYXNz
ZXMpOwotICAgIHJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhmcmFtZS5yZW5kZXJQYXNz
ZXMsIGZyYW1lLnNraXBwZWRQYXNzZXMpOworICAgIHJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0
dXJlcyhmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnNraXBwZWRQYXNzZXMsIG1fbGF5ZXJSZW5k
ZXJlci5nZXQoKSk7CiAKICAgICByZXR1cm4gZHJhd0ZyYW1lOwogfQpAQCAtNDMxLDcgKzQzMiw3
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZl
KENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywKICAgICBza2lwcGVkUGFzc2VzLmFwcGVuZChyZW1v
dmVkUGFzcy5yZWxlYXNlKCkpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92
ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDUmVu
ZGVyUGFzc0xpc3QmIHNraXBwZWRQYXNzZXMpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJl
bW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIEND
UmVuZGVyUGFzc0xpc3QmIHNraXBwZWRQYXNzZXMsIGNvbnN0IENDUmVuZGVyZXIqIHJlbmRlcmVy
KQogewogICAgIGZvciAoaW50IHBhc3NJbmRleCA9IHBhc3Nlcy5zaXplKCkgLSAxOyBwYXNzSW5k
ZXggPj0gMDsgLS1wYXNzSW5kZXgpIHsKICAgICAgICAgQ0NSZW5kZXJQYXNzKiBjdXJyZW50UGFz
cyA9IHBhc3Nlc1twYXNzSW5kZXhdLmdldCgpOwpAQCAtNDQ1LDE0ICs0NDYsNyBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRl
clBhc3NMaXN0JiBwYXNzZQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAg
ICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVyUGFzc1F1YWQgPSBzdGF0aWNfY2FzdDxDQ1Jl
bmRlclBhc3NEcmF3UXVhZCo+KGN1cnJlbnRRdWFkKTsKLSAgICAgICAgICAgIENDUmVuZGVyU3Vy
ZmFjZSogdGFyZ2V0U3VyZmFjZSA9IHJlbmRlclBhc3NRdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdl
dFN1cmZhY2UoKTsKLQotICAgICAgICAgICAgaWYgKHRhcmdldFN1cmZhY2UtPmNvbnRlbnRzQ2hh
bmdlZCgpIHx8ICF0YXJnZXRTdXJmYWNlLT5oYXNDYWNoZWRDb250ZW50c1RleHR1cmUoKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gUmVzZXJ2ZSB0aGUgdGV4
dHVyZSBpbW1lZGlhdGVseS4gV2UgZG8gbm90IG5lZWQgdG8gcGFzcyBpbiBsYXllciByZW5kZXJl
cgotICAgICAgICAgICAgLy8gc2luY2UgdGhlIHRleHR1cmUgYWxyZWFkeSBleGlzdHMsIGp1c3Qg
bmVlZHMgdG8gYmUgcmVzZXJ2ZWQuCi0gICAgICAgICAgICBpZiAoIXRhcmdldFN1cmZhY2UtPnBy
ZXBhcmVDb250ZW50c1RleHR1cmUoMCkpCisgICAgICAgICAgICBpZiAocmVuZGVyUGFzc1F1YWQt
PmNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKCkgfHwgIXJlbmRlcmVyLT5oYXZlQ2FjaGVk
UmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHJlbmRlclBhc3NRdWFkLT5yZW5kZXJQYXNzSWQoKSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIC8vIFdlIGFyZSBjaGFu
Z2luZyB0aGUgdmVjdG9yIGluIHRoZSBtaWRkbGUgb2YgcmV2ZXJzZSBpdGVyYXRpb24uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggOWQ4ZmIzYzQ1NzVhZWNhYzdhYWY4
Y2QwMGQ4ZmE5NmQ3ZjFhYjA5Mi4uOTY3ZGY4MWE0ZDFlOGMxMmJkOGZiODEwOTIyNWMyMTAwZmQ4
ZWZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMTc4LDcgKzE3
OCw3IEBAIHB1YmxpYzoKICAgICBDQ0RlYnVnUmVjdEhpc3RvcnkqIGRlYnVnUmVjdEhpc3Rvcnko
KSBjb25zdCB7IHJldHVybiBtX2RlYnVnUmVjdEhpc3RvcnkuZ2V0KCk7IH0KIAogICAgIC8vIFJl
bW92ZXMgYWxsIHJlbmRlciBwYXNzZXMgZm9yIHdoaWNoIHdlIGhhdmUgY2FjaGVkIHRleHR1cmVz
LCBhbmQgd2hpY2ggZGlkIG5vdCBjaGFuZ2UgdGhlaXIgY29udGVudC4KLSAgICBzdGF0aWMgdm9p
ZCByZW1vdmVQYXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2Vz
LCBDQ1JlbmRlclBhc3NMaXN0JiBza2lwcGVkUGFzc2VzKTsKKyAgICBzdGF0aWMgdm9pZCByZW1v
dmVQYXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXMoQ0NSZW5kZXJQYXNzTGlzdCYgcGFzc2VzLCBDQ1Jl
bmRlclBhc3NMaXN0JiBza2lwcGVkUGFzc2VzLCBjb25zdCBDQ1JlbmRlcmVyKik7CiAKIHByb3Rl
Y3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDTGF5ZXJUcmVlU2V0dGluZ3Mm
LCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcApp
bmRleCAyOGFjZGQ3YzliNDdiZGZiN2YyYjg1ZjVlOTE5OGI4ZmU4N2U3ZTMzLi5jMzI3YWY3ZWRk
ZTQ0MjRhYzhkZGEwYmRiYjIyMzFkMjQ5MGVmODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5j
cHAKQEAgLTM3LDE3ICszNywxOSBAQCB1c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBD
Q1JlbmRlclBhc3M6OmNyZWF0ZShDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCitQYXNz
T3duUHRyPENDUmVuZGVyUGFzcz4gQ0NSZW5kZXJQYXNzOjpjcmVhdGUoQ0NSZW5kZXJTdXJmYWNl
KiB0YXJnZXRTdXJmYWNlLCB1bnNpZ25lZCBpZCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDUmVuZGVyUGFzcyh0YXJnZXRTdXJmYWNlKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q1JlbmRlclBhc3ModGFyZ2V0U3VyZmFjZSwgaWQpKTsKIH0KIAotQ0NSZW5kZXJQYXNzOjpDQ1Jl
bmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQotICAgIDogbV90YXJnZXRT
dXJmYWNlKHRhcmdldFN1cmZhY2UpCitDQ1JlbmRlclBhc3M6OkNDUmVuZGVyUGFzcyhDQ1JlbmRl
clN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIHVuc2lnbmVkIGlkKQorICAgIDogbV9pZChpZCkKKyAg
ICAsIG1fdGFyZ2V0U3VyZmFjZSh0YXJnZXRTdXJmYWNlKQogICAgICwgbV9mcmFtZWJ1ZmZlck91
dHB1dFJlY3QodGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3QoKSkKICAgICAsIG1faGFzVHJhbnNw
YXJlbnRCYWNrZ3JvdW5kKHRydWUpCiB7Ci0gICAgQVNTRVJUKG1fdGFyZ2V0U3VyZmFjZSk7Cisg
ICAgQVNTRVJUKHRhcmdldFN1cmZhY2UpOworICAgIEFTU0VSVChpZCk7CiB9CiAKIHZvaWQgQ0NS
ZW5kZXJQYXNzOjphcHBlbmRRdWFkc0ZvckxheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NPY2Ns
dXNpb25UcmFja2VySW1wbCogb2NjbHVzaW9uVHJhY2tlciwgYm9vbCYgaGFkTWlzc2luZ1RpbGVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3MuaAppbmRleCBkZWU1NWJmN2Y2Y2ZlZjE5MjRiY2FiNTNjZGVl
ZWUxOWQ2OWUyOGFjLi44NjFjZjI3MzE4M2QyNjU1MzFmOTU0Y2M1NTVlYzJhMTg2OTI2NjcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclBhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1JlbmRlclBhc3MuaApAQCAtNTMsMTQgKzUzLDE3IEBAIHB1YmxpYzoKIGNsYXNz
IENDUmVuZGVyUGFzcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NSZW5kZXJQYXNzKTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShDQ1Jl
bmRlclN1cmZhY2UqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0
ZShDQ1JlbmRlclN1cmZhY2UqLCB1bnNpZ25lZCBpZCk7CiAKICAgICB2b2lkIGFwcGVuZFF1YWRz
Rm9yTGF5ZXIoQ0NMYXllckltcGwqLCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsKiwgYm9vbCYgaGFk
TWlzc2luZ1RpbGVzKTsKICAgICB2b2lkIGFwcGVuZFF1YWRzRm9yUmVuZGVyU3VyZmFjZUxheWVy
KENDTGF5ZXJJbXBsKiwgY29uc3QgQ0NSZW5kZXJQYXNzKiBjb250cmlidXRpbmdSZW5kZXJQYXNz
LCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsKik7CiAgICAgdm9pZCBhcHBlbmRRdWFkc1RvRmlsbFNj
cmVlbihDQ0xheWVySW1wbCogcm9vdExheWVyLCBTa0NvbG9yIHNjcmVlbkJhY2tncm91bmRDb2xv
ciwgY29uc3QgQ0NPY2NsdXNpb25UcmFja2VySW1wbCYpOwogCiAgICAgY29uc3QgQ0NRdWFkTGlz
dCYgcXVhZExpc3QoKSBjb25zdCB7IHJldHVybiBtX3F1YWRMaXN0OyB9CisKKyAgICB1bnNpZ25l
ZCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdl
dFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2U7IH0KKwogICAgIC8vIFRo
aXMgZGVub3RlcyB0aGUgYm91bmRzIGluIHBoeXNpY2FsIHBpeGVscyBvZiB0aGUgb3V0cHV0IGdl
bmVyYXRlZCBieSB0aGlzIFJlbmRlclBhc3MuCiAgICAgY29uc3QgSW50UmVjdCYgZnJhbWVidWZm
ZXJPdXRwdXRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZWJ1ZmZlck91dHB1dFJlY3Q7IH0K
IApAQCAtNjgsOCArNzEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNUcmFuc3BhcmVudEJh
Y2tncm91bmQoYm9vbCB0cmFuc3BhcmVudCkgeyBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9
IHRyYW5zcGFyZW50OyB9CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBDQ1JlbmRlclBhc3Mo
Q0NSZW5kZXJTdXJmYWNlKik7CisgICAgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSosIHVu
c2lnbmVkIGlkKTsKIAorICAgIHVuc2lnbmVkIG1faWQ7CiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBt
X3RhcmdldFN1cmZhY2U7CiAgICAgQ0NRdWFkTGlzdCBtX3F1YWRMaXN0OwogICAgIEludFJlY3Qg
bV9mcmFtZWJ1ZmZlck91dHB1dFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3
UXVhZC5jcHAKaW5kZXggOGRjNGZmNjZhMWM3MTczYmU3Mzc0YTYyNWRiOTljZjQwN2IxZDZlMy4u
NTRmNzdkYjY0ZDBjMDE1MWFiMTgyYzBiNzZmMzQ4MDU0NjhjMGM4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJh
d1F1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcApAQCAtMjcsMjAgKzI3LDI0IEBACiAKICNpbmNs
dWRlICJjYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oIgogCisjaW5jbHVkZSAiY2MvQ0NSZW5kZXJQ
YXNzLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1JlbmRlclBhc3NE
cmF3UXVhZD4gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZShjb25zdCBDQ1NoYXJlZFF1YWRT
dGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCwgY29uc3QgQ0NS
ZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlv
bnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKQorUGFzc093blB0
cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZShjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSogc2hhcmVkUXVhZFN0YXRlLCBjb25zdCBJbnRSZWN0JiBxdWFk
UmVjdCwgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNzLCBib29sIGlzUmVwbGljYSwgY29u
c3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6Oldl
YkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVy
ZUlkLCBib29sIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKQogewotICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVj
dCwgcmVuZGVyUGFzcywgaXNSZXBsaWNhLCBmaWx0ZXJzLCBiYWNrZ3JvdW5kRmlsdGVycywgbWFz
a1RleHR1cmVJZCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgcmVuZGVyUGFzcywgaXNSZXBsaWNhLCBmaWx0
ZXJzLCBiYWNrZ3JvdW5kRmlsdGVycywgbWFza1RleHR1cmVJZCwgY29udGVudHNDaGFuZ2VkU2lu
Y2VMYXN0RnJhbWUpKTsKIH0KIAotQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OkNDUmVuZGVyUGFzc0Ry
YXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IElu
dFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGJvb2wgaXNS
ZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0
IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVk
IG1hc2tUZXh0dXJlSWQpCitDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1
YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVj
dCYgcXVhZFJlY3QsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgYm9vbCBpc1JlcGxp
Y2EsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2Vi
S2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFz
a1RleHR1cmVJZCwgYm9vbCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkKICAgICA6IEND
RHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzLCBxdWFkUmVj
dCkKICAgICAsIG1fcmVuZGVyUGFzcyhyZW5kZXJQYXNzKQorICAgICwgbV9yZW5kZXJQYXNzSWQo
cmVuZGVyUGFzcy0+aWQoKSkKICAgICAsIG1faXNSZXBsaWNhKGlzUmVwbGljYSkKICAgICAsIG1f
ZmlsdGVycyhmaWx0ZXJzKQogICAgICwgbV9iYWNrZ3JvdW5kRmlsdGVycyhiYWNrZ3JvdW5kRmls
dGVycykKICAgICAsIG1fbWFza1RleHR1cmVJZChtYXNrVGV4dHVyZUlkKQorICAgICwgbV9jb250
ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZShjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkK
IHsKICAgICBBU1NFUlQobV9yZW5kZXJQYXNzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBh
c3NEcmF3UXVhZC5oCmluZGV4IDNjYzZmMjYwNzFhMzNjMDIzMDZhZWFkOWUwOGIwODczMzM0ZTMx
ZTguLjk1NWQwMGJmODRiYmY5NDAyZGE1ZGYyOTMwN2FkZTk0MjAwM2RjZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
c0RyYXdRdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuaApAQCAtMzcsMjMgKzM3LDI3IEBAIGNsYXNzIEND
UmVuZGVyUGFzczsKIGNsYXNzIENDUmVuZGVyUGFzc0RyYXdRdWFkIDogcHVibGljIENDRHJhd1F1
YWQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyUGFzc0RyYXdRdWFkKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gY3JlYXRl
KGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENDUmVuZGVy
UGFzcyosIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMm
IGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZp
bHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
UmVuZGVyUGFzc0RyYXdRdWFkPiBjcmVhdGUoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdl
YktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0
ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwg
Ym9vbCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSk7CiAKICAgICBjb25zdCBDQ1JlbmRl
clBhc3MqIHJlbmRlclBhc3MoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclBhc3M7IH0KKyAgICB1
bnNpZ25lZCByZW5kZXJQYXNzSWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclBhc3NJZDsgfQog
ICAgIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGxpY2E7IH0KICAgICB1
bnNpZ25lZCBtYXNrVGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUlkOyB9
CisgICAgYm9vbCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWU7IH0KIAogICAgIGNvbnN0IFdlYktpdDo6
V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyczsg
fQogICAgIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRl
cnMoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRGaWx0ZXJzOyB9CiAKIHByaXZhdGU6Ci0g
ICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCk7Cisg
ICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgQ0NTaGFyZWRRdWFkU3RhdGUqLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgQ0NSZW5kZXJQYXNzKiwgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgYm9v
bCBjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSk7CiAKICAgICBjb25zdCBDQ1JlbmRlclBh
c3MqIG1fcmVuZGVyUGFzczsKKyAgICB1bnNpZ25lZCBtX3JlbmRlclBhc3NJZDsKICAgICBib29s
IG1faXNSZXBsaWNhOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7
CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dyb3VuZEZpbHRlcnM7CiAg
ICAgdW5zaWduZWQgbV9tYXNrVGV4dHVyZUlkOworICAgIGJvb2wgbV9jb250ZW50c0NoYW5nZWRT
aW5jZUxhc3RGcmFtZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCmlu
ZGV4IGQwOTQwMWM0ZjIzZTA5ZTUxMmU2MjQ5OTg0YmU0Y2RlOGE5NGEyYTEuLmZjYTRhNzEzODZk
NzY5NDk0Nzk4Y2Q4MjYyYzFlYThhZWIzNGJmN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJm
YWNlLmNwcApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJNYW5hZ2Vk
VGV4dHVyZS5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFn
ZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKQEAgLTg1
LDc1ICs4NCw2IEBAIEZsb2F0UmVjdCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdhYmxlQ29udGVudFJl
Y3QoKSBjb25zdAogICAgIHJldHVybiBkcmF3YWJsZUNvbnRlbnRSZWN0OwogfQogCi1ib29sIEND
UmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBi
ZSBzZXBhcmF0ZWQgaW50byB0d286IG9uZSB0byByZXNlcnZlIGFuCi0gICAgLy8gZXhpc3Rpbmcg
c3VyZmFjZSwgYW5kIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lLiBUaGF0IHdheSB3ZSB3aWxsIG5v
dAotICAgIC8vIG5lZWQgdG8gcGFzcyBudWxsIGxheWVyUmVuZGVyZXIuCi0gICAgaWYgKGxheWVy
UmVuZGVyZXIpIHsKLSAgICAgICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gbGF5
ZXJSZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2VyKCk7Ci0KLSAgICAgICAgaWYgKCFtX2NvbnRl
bnRzVGV4dHVyZSkKLSAgICAgICAgICAgIG1fY29udGVudHNUZXh0dXJlID0gTWFuYWdlZFRleHR1
cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcik7Ci0gICAgfQotCi0gICAgaWYgKCFtX2NvbnRlbnRz
VGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fY29udGVudHNUZXh0
dXJlLT5pc1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX2Nv
bnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250ZW50c1RleHR1cmUoKQotewot
ICAgIGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2Vy
dmVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZS0+dW5yZXNlcnZl
KCk7Ci19Ci0KLWJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxpZENvbnRlbnRzVGV4dHVyZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVudHNUZXh0
dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9jb250ZW50c1RleHR1cmUtPmlzVmFsaWQobV9jb250ZW50
UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsKLX0KLQotYm9vbCBDQ1JlbmRl
clN1cmZhY2U6Omhhc0NhY2hlZENvbnRlbnRzVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVu
dFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Ci19Ci0KLWJvb2wgQ0NSZW5k
ZXJTdXJmYWNlOjpwcmVwYXJlQmFja2dyb3VuZFRleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiBsYXllclJlbmRlcmVyKQotewotICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlciA9
IGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlTWFuYWdlcigpOwotCi0gICAgaWYgKCFtX2JhY2tn
cm91bmRUZXh0dXJlKQotICAgICAgICBtX2JhY2tncm91bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1
cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcik7Ci0KLSAgICBpZiAobV9iYWNrZ3JvdW5kVGV4dHVy
ZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbV9iYWNr
Z3JvdW5kVGV4dHVyZS0+cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNpemUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpCi17
Ci0gICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlIHx8ICFtX2JhY2tncm91bmRUZXh0dXJlLT5p
c1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2JhY2tncm91bmRUZXh0dXJlLT51
bnJlc2VydmUoKTsKLX0KLQotYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhhc1ZhbGlkQmFja2dyb3Vu
ZFRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tncm91bmRUZXh0dXJlICYmIG1f
YmFja2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSAmJiBtX2JhY2tncm91bmRUZXh0dXJlLT5p
c1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7Ci19
Ci0KIFN0cmluZyBDQ1JlbmRlclN1cmZhY2U6Om5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiUmVuZGVyU3VyZmFjZShpZD0laSxvd25lcj0lcykiLCBtX293bmluZ0xh
eWVyLT5pZCgpLCBtX293bmluZ0xheWVyLT5kZWJ1Z05hbWUoKS51dGY4KCkuZGF0YSgpKTsKQEAg
LTMwMyw3ICsyMzMsNyBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFk
Q3VsbGVyJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3RhdGUqIHNoYQogCiAgICAgaW50IG1hc2tU
ZXh0dXJlSWQgPSBtYXNrTGF5ZXIgPyBtYXNrTGF5ZXItPmNvbnRlbnRzVGV4dHVyZUlkKCkgOiAw
OwogCi0gICAgcXVhZExpc3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3Jl
YXRlKHNoYXJlZFF1YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgcmVuZGVyUGFzcywgZm9yUmVwbGlj
YSwgZmlsdGVycygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkKSk7CisgICAg
cXVhZExpc3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHNoYXJl
ZFF1YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgcmVuZGVyUGFzcywgZm9yUmVwbGljYSwgZmlsdGVy
cygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkLCBjb250ZW50c0NoYW5nZWQo
KSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmluZGV4IDAyOWUxZjYwNDQx
NGNjZmViMTMwNThlZjRhYWM4MTM3OWY5NTA4ZjQuLjg5NGVhNWFlYTJlZmFlZTZiY2YwMTViMzgw
ZTAzMTIyMzM0YTlkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCkBAIC0zMSw3ICsz
MSw2IEBACiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3Bl
cmF0aW9ucy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNDUsNyArNDQsNiBAQCBjbGFzcyBDQ1Jl
bmRlclBhc3M7CiBjbGFzcyBDQ1NoYXJlZFF1YWRTdGF0ZTsKIGNsYXNzIENDTGF5ZXJJbXBsOwog
Y2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwotY2xhc3MgTWFuYWdlZFRleHR1cmU7CiBjbGFz
cyBUZXh0U3RyZWFtOwogCiBjbGFzcyBDQ1JlbmRlclN1cmZhY2UgewpAQCAtNTQsMTUgKzUyLDYg
QEAgcHVibGljOgogICAgIGV4cGxpY2l0IENDUmVuZGVyU3VyZmFjZShDQ0xheWVySW1wbCopOwog
ICAgIHZpcnR1YWwgfkNDUmVuZGVyU3VyZmFjZSgpOwogCi0gICAgdmlydHVhbCBib29sIHByZXBh
cmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7Ci0gICAgdm9pZCByZWxl
YXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgYm9vbCBoYXNWYWxpZENvbnRlbnRzVGV4dHVyZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNDYWNoZWRDb250ZW50c1RleHR1cmUoKSBjb25z
dDsKLQotICAgIGJvb2wgcHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJv
bWl1bSopOwotICAgIHZvaWQgcmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7Ci0gICAgYm9vbCBo
YXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkgY29uc3Q7Ci0KICAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0
OwogCkBAIC0xMTYsNyArMTA1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Npc3NvclJlY3Qo
Y29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVjdCA9IHNjaXNzb3JSZWN0
OyB9CiAgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25zdCB7IHJldHVybiBtX3Nj
aXNzb3JSZWN0OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgY29udGVudHNDaGFuZ2VkKCkgY29uc3Q7
CisgICAgYm9vbCBjb250ZW50c0NoYW5nZWQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0Q29udGVu
dFJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQpAQCAtMTI0LDkgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCkgeyBtX2xheWVyTGlzdC5jbGVhcigpOyB9CiAg
ICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCgpIHsgcmV0dXJuIG1fbGF5ZXJMaXN0
OyB9CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KLSAgICBNYW5hZ2VkVGV4dHVyZSogYmFja2dy
b3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRUZXh0dXJlLmdldCgpOyB9
Ci0KICAgICBpbnQgb3duaW5nTGF5ZXJJZCgpIGNvbnN0OwogICAgIENDUmVuZGVyU3VyZmFjZSog
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0OwogCkBAIC0xNTUsOSArMTQxLDYgQEAgcHJpdmF0
ZToKICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAgICAgYm9vbCBtX3N1cmZhY2VQcm9wZXJ0
eUNoYW5nZWQ7CiAKLSAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1fY29udGVudHNUZXh0dXJl
OwotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9iYWNrZ3JvdW5kVGV4dHVyZTsKLQogICAg
IGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9vbCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7
CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlcmVyLmgKaW5kZXggYWJhZDAyYmI3ZDlkN2FkNTdkM2FkMzRmNzU0MzVjNDU4N2Nl
ZDM3Ny4uYzM4OWU5YzY1OTU5MTljMjM4YjAzNjlkZWFjZWE2OTFiNjI2NTQ1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyZXIuaApAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgd2luZG93TWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV93
aW5kb3dNYXRyaXg7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVSZW5kZXJQYXNzQWxsb2Nh
dGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHVuc2lnbmVkKSBjb25zdCA9
IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoY29uc3QgQ0NSZW5kZXJQ
YXNzKiBkZWZhdWx0UmVuZGVyUGFzcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVuZGVy
UGFzcyhjb25zdCBDQ1JlbmRlclBhc3MqLCBjb25zdCBGbG9hdFJlY3QmIHJvb3RTY2lzc29yUmVj
dEluQ3VycmVudFBhc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1l
KCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCAzNzMxODA4Y2I1
ZGEyOWI0MzA5YmQ4ZWQ1NGMzZTkyZTQ3YWYxNjc4Li41NjRlMzY5NmJlMTU1MmVmNGY0YjQ1ZDA1
NGFlYWQzZmFhNTY0NDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiY2MvQ0NUaWxlZExheWVySW1wbC5oIgogCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJTa0NvbG9yLmgiCiAjaW5jbHVk
ZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgImNjL0NDQ2hlY2tlcmJvYXJkRHJhd1F1YWQuaCIK
QEAgLTIyMCw3ICsyMjEsNyBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OnNldFRpbGluZ0RhdGEo
Y29uc3QgQ0NMYXllclRpbGluZ0RhdGEmIHRpbGVyKQogICAgICptX3RpbGVyID0gdGlsZXI7CiB9
CiAKLXZvaWQgQ0NUaWxlZExheWVySW1wbDo6cHVzaFRpbGVQcm9wZXJ0aWVzKGludCBpLCBpbnQg
aiwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIG9wYXF1ZVJlY3Qp
Cit2b2lkIENDVGlsZWRMYXllckltcGw6OnB1c2hUaWxlUHJvcGVydGllcyhpbnQgaSwgaW50IGos
IHVuc2lnbmVkIHRleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgb3BhcXVlUmVjdCkKIHsKICAgICBE
cmF3YWJsZVRpbGUqIHRpbGUgPSB0aWxlQXQoaSwgaik7CiAgICAgaWYgKCF0aWxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxl
ZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IDEzMWEzMmZjZWZhYzFiMTgxNTUxZjA0MTA1ZjIz
OGVhMGUwNzdmZDYuLjRjODJjZGM4Y2FmN2U3MWI5Njk3MTZjNGFmNWUxOTZjMjc5MTA0ODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRTa2lwc0RyYXcoYm9vbCBza2lwc0RyYXcpIHsgbV9za2lwc0RyYXcgPSBz
a2lwc0RyYXc7IH0KICAgICB2b2lkIHNldFRpbGluZ0RhdGEoY29uc3QgQ0NMYXllclRpbGluZ0Rh
dGEmIHRpbGVyKTsKLSAgICB2b2lkIHB1c2hUaWxlUHJvcGVydGllcyhpbnQsIGludCwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIG9wYXF1ZVJlY3QpOworICAgIHZv
aWQgcHVzaFRpbGVQcm9wZXJ0aWVzKGludCwgaW50LCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0
IEludFJlY3QmIG9wYXF1ZVJlY3QpOwogCiAgICAgdm9pZCBzZXRDb250ZW50c1N3aXp6bGVkKGJv
b2wgY29udGVudHNTd2l6emxlZCkgeyBtX2NvbnRlbnRzU3dpenpsZWQgPSBjb250ZW50c1N3aXp6
bGVkOyB9CiAgICAgYm9vbCBjb250ZW50c1N3aXp6bGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZW50c1N3aXp6bGVkOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCmluZGV4IDRmYTE2NWNlNDVhZmRlNWViMzdl
OWU5ODlmOTQzZmMzZTc3MGVkY2UuLjgyMDQwOWVmYzE4ZGM2OTIxZjA1ZDY1NTk5ZTYyYzRjNmZm
NjZjMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0xMjcsMTEgKzEyNywxMSBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldHVwU2Nyb2xsQW5kQ29udGVudHNMYXllcnMoY29uc3QgSW50U2l6ZSYgY29u
dGVudFNpemUpCiAgICAgewotICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDApOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUp
OwogICAgICAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCAwKSk7CiAgICAg
ICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnRlbnRTaXplKTsKLSAgICAgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiBjb250ZW50cyA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAg
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudHMgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIp
OwogICAgICAgICBjb250ZW50cy0+c2V0RHJhd3NDb250ZW50KHRydWUpOwogICAgICAgICBjb250
ZW50cy0+c2V0Qm91bmRzKGNvbnRlbnRTaXplKTsKICAgICAgICAgY29udGVudHMtPnNldENvbnRl
bnRCb3VuZHMoY29udGVudFNpemUpOwpAQCAtMTg2LDEyICsxODYsMTIgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YU5vTGF5ZXJzKQogVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YVRyZWVCdXROb0NoYW5nZXMpCiB7CiAgICAgewot
ICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDAp
OwotICAgICAgICByb290LT5hZGRDaGlsZChDQ0xheWVySW1wbDo6Y3JlYXRlKDEpKTsKKyAgICAg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAg
ICAgICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSgyKSk7Ci0gICAgICAgIHJv
b3QtPmNoaWxkcmVuKClbMV0tPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUoMykpOworICAg
ICAgICByb290LT5hZGRDaGlsZChDQ0xheWVySW1wbDo6Y3JlYXRlKDMpKTsKICAgICAgICAgcm9v
dC0+Y2hpbGRyZW4oKVsxXS0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSg0KSk7Ci0gICAg
ICAgIHJvb3QtPmNoaWxkcmVuKClbMV0tPmNoaWxkcmVuKClbMF0tPmFkZENoaWxkKENDTGF5ZXJJ
bXBsOjpjcmVhdGUoNSkpOworICAgICAgICByb290LT5jaGlsZHJlbigpWzFdLT5hZGRDaGlsZChD
Q0xheWVySW1wbDo6Y3JlYXRlKDUpKTsKKyAgICAgICAgcm9vdC0+Y2hpbGRyZW4oKVsxXS0+Y2hp
bGRyZW4oKVswXS0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSg2KSk7CiAgICAgICAgIG1f
aG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CiAgICAgfQogICAgIENDTGF5
ZXJJbXBsKiByb290ID0gbV9ob3N0SW1wbC0+cm9vdExheWVyKCk7CkBAIC0yMTQsNyArMjE0LDcg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxEZWx0YVJlcGVhdGVkU2Ny
b2xscykKICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigyMCwgMzApOwogICAgIEludFNpemUg
c2Nyb2xsRGVsdGEoMTEsIC0xNSk7CiAgICAgewotICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEwKTsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICAgICAgcm9vdC0+c2V0U2Ny
b2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwogICAgICAgICByb290LT5zZXRTY3JvbGxhYmxl
KHRydWUpOwogICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihJbnRTaXplKDEwMCwg
MTAwKSk7CkBAIC0yNjMsNyArMjYzLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0
LCBzY3JvbGxXaXRob3V0Um9vdExheWVyKQogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHJlcGxhY2VUcmVlV2hpbGVTY3JvbGxpbmcpCiB7Ci0gICAgY29uc3QgaW50IHNjcm9sbExh
eWVySWQgPSAwOworICAgIGNvbnN0IGludCBzY3JvbGxMYXllcklkID0gMTsKIAogICAgIHNldHVw
U2Nyb2xsQW5kQ29udGVudHNMYXllcnMoSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShJbnRTaXplKDUwLCA1MCkpOwpAQCAtNjI1LDggKzYyNSwxMCBA
QCBwcm90ZWN0ZWQ6CiAgICAgICAgIHNldENvbnRlbnRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsK
ICAgICAgICAgc2V0RHJhd3NDb250ZW50KHRydWUpOwogICAgICAgICBzZXRTa2lwc0RyYXcoZmFs
c2UpOworICAgICAgICBzZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwgMCwgMTAsIDEwKSk7
CiAKICAgICAgICAgT3duUHRyPENDTGF5ZXJUaWxpbmdEYXRhPiB0aWxlciA9IENDTGF5ZXJUaWxp
bmdEYXRhOjpjcmVhdGUoSW50U2l6ZSgxMDAsIDEwMCksIENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNC
b3JkZXJUZXhlbHMpOworICAgICAgICB0aWxlci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMoKSk7
CiAgICAgICAgIHNldFRpbGluZ0RhdGEoKnRpbGVyLmdldCgpKTsKICAgICB9CiAKQEAgLTYzOSwx
MSArNjQxLDExIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZGlkRHJhd05vdENh
bGxlZE9uSGlkZGVuTGF5ZXIpCiB7CiAgICAgLy8gVGhlIHJvb3QgbGF5ZXIgaXMgYWx3YXlzIGRy
YXduLCBzbyBydW4gdGhpcyB0ZXN0IG9uIGEgY2hpbGQgbGF5ZXIgdGhhdAogICAgIC8vIHdpbGwg
YmUgbWFza2VkIG91dCBieSB0aGUgcm9vdCBsYXllcidzIGJvdW5kcy4KLSAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwogICAgIERp
ZERyYXdDaGVja0xheWVyKiByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPiht
X2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7CiAgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5kcyh0cnVl
KTsKIAotICAgIHJvb3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwor
ICAgIHJvb3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMikpOwogICAgIERp
ZERyYXdDaGVja0xheWVyKiBsYXllciA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVja0xheWVyKj4o
cm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAgICAgLy8gRW5zdXJlIHZpc2libGVMYXllclJl
Y3QgZm9yIGxheWVyIGlzIGVtcHR5CiAgICAgbGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
MTAwLCAxMDApKTsKQEAgLTY4NiwxMyArNjg4LDEzIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgd2lsbERyYXdOb3RDYWxsZWRPbk9jY2x1ZGVkTGF5ZXIpCiAgICAgSW50U2l6ZSBi
aWdTaXplKDEwMDAsIDEwMDApOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShiaWdT
aXplKTsKIAotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6
Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5
ZXI6OmNyZWF0ZSgxKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2Fz
dDxEaWREcmF3Q2hlY2tMYXllcio+KG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKIAotICAgIHJv
b3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOworICAgIHJvb3QtPmFk
ZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMikpOwogICAgIERpZERyYXdDaGVja0xh
eWVyKiBvY2NsdWRlZExheWVyID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihyb290
LT5jaGlsZHJlbigpWzBdLmdldCgpKTsKIAotICAgIHJvb3QtPmFkZENoaWxkKERpZERyYXdDaGVj
a0xheWVyOjpjcmVhdGUoMikpOworICAgIHJvb3QtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVy
OjpjcmVhdGUoMykpOwogICAgIERpZERyYXdDaGVja0xheWVyKiB0b3BMYXllciA9IHN0YXRpY19j
YXN0PERpZERyYXdDaGVja0xheWVyKj4ocm9vdC0+Y2hpbGRyZW4oKVsxXS5nZXQoKSk7CiAgICAg
Ly8gVGhpcyBsYXllciBjb3ZlcnMgdGhlIG9jY2x1ZGVkTGF5ZXIgYWJvdmUuIE1ha2UgdGhpcyBs
YXllciBsYXJnZSBzbyBpdCBjYW4gb2NjbHVkZS4KICAgICB0b3BMYXllci0+c2V0Qm91bmRzKGJp
Z1NpemUpOwpAQCAtNzE4LDEzICs3MjAsMTMgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCB3aWxsRHJhd05vdENhbGxlZE9uT2NjbHVkZWRMYXllcikKIAogVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBkaWREcmF3Q2FsbGVkT25BbGxMYXllcnMpCiB7Ci0gICAgbV9ob3N0
SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMCkpOworICAgIG1f
aG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKICAg
ICBEaWREcmF3Q2hlY2tMYXllciogcm9vdCA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVja0xheWVy
Kj4obV9ob3N0SW1wbC0+cm9vdExheWVyKCkpOwogCi0gICAgcm9vdC0+YWRkQ2hpbGQoRGlkRHJh
d0NoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoRGlkRHJhd0NoZWNr
TGF5ZXI6OmNyZWF0ZSgyKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIGxheWVyMSA9IHN0YXRp
Y19jYXN0PERpZERyYXdDaGVja0xheWVyKj4ocm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAK
LSAgICBsYXllcjEtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMikpOworICAg
IGxheWVyMS0+YWRkQ2hpbGQoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgzKSk7CiAgICAgRGlk
RHJhd0NoZWNrTGF5ZXIqIGxheWVyMiA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVja0xheWVyKj4o
bGF5ZXIxLT5jaGlsZHJlbigpWzBdLmdldCgpKTsKIAogICAgIGxheWVyMS0+c2V0T3BhY2l0eSgw
LjNmKTsKQEAgLTc2OSw5ICs3NzEsOSBAQCBwcml2YXRlOgogVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0LCBwcmVwYXJlVG9EcmF3RmFpbHNXaGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJib2Fy
ZCkKIHsKICAgICAvLyBXaGVuIHRoZSB0ZXh0dXJlIGlzIG5vdCBtaXNzaW5nLCB3ZSBkcmF3IGFz
IHVzdWFsLgotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6
Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5
ZXI6OmNyZWF0ZSgxKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2Fz
dDxEaWREcmF3Q2hlY2tMYXllcio+KG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKLSAgICByb290
LT5hZGRDaGlsZChNaXNzaW5nVGV4dHVyZUFuaW1hdGluZ0xheWVyOjpjcmVhdGUoMSwgZmFsc2Us
IGZhbHNlLCB0cnVlKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRp
bmdMYXllcjo6Y3JlYXRlKDIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpOwogCiAgICAgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6RnJhbWVEYXRhIGZyYW1lOwogCkBAIC03ODAsMjcgKzc4MiwyNyBAQCBURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1doZW5BbmltYXRp
b25Vc2VzQ2hlY2tlcmJvYXJkKQogICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJh
bWUpOwogCiAgICAgLy8gV2hlbiBhIHRleHR1cmUgaXMgbWlzc2luZyBhbmQgd2UncmUgbm90IGFu
aW1hdGluZywgd2UgZHJhdyBhcyB1c3VhbCB3aXRoIGNoZWNrZXJib2FyZGluZy4KLSAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwog
ICAgIHJvb3QgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KG1faG9zdEltcGwtPnJv
b3RMYXllcigpKTsKLSAgICByb290LT5hZGRDaGlsZChNaXNzaW5nVGV4dHVyZUFuaW1hdGluZ0xh
eWVyOjpjcmVhdGUoMSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQo
TWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDIsIHRydWUsIGZhbHNlLCBmYWxz
ZSkpOwogCiAgICAgRVhQRUNUX1RSVUUobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhmcmFtZSkp
OwogICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgIG1faG9zdEltcGwtPmRp
ZERyYXdBbGxMYXllcnMoZnJhbWUpOwogCiAgICAgLy8gV2hlbiBhIHRleHR1cmUgaXMgbWlzc2lu
ZyBhbmQgd2UncmUgYW5pbWF0aW5nLCB3ZSBkb24ndCB3YW50IHRvIGRyYXcgYW55dGhpbmcuCi0g
ICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMCkp
OworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRl
KDEpKTsKICAgICByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJ
bXBsLT5yb290TGF5ZXIoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmlt
YXRpbmdMYXllcjo6Y3JlYXRlKDEsIHRydWUsIGZhbHNlLCB0cnVlKSk7CisgICAgcm9vdC0+YWRk
Q2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDIsIHRydWUsIGZhbHNl
LCB0cnVlKSk7CiAKICAgICBFWFBFQ1RfRkFMU0UobV9ob3N0SW1wbC0+cHJlcGFyZVRvRHJhdyhm
cmFtZSkpOwogICAgIG1faG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAgIG1faG9zdElt
cGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwogCiAgICAgLy8gV2hlbiB0aGUgbGF5ZXIgc2tp
cHMgZHJhdyBhbmQgd2UncmUgYW5pbWF0aW5nLCB3ZSBzdGlsbCBkcmF3IHRoZSBmcmFtZS4KLSAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUo
MSkpOwogICAgIHJvb3QgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KG1faG9zdElt
cGwtPnJvb3RMYXllcigpKTsKLSAgICByb290LT5hZGRDaGlsZChNaXNzaW5nVGV4dHVyZUFuaW1h
dGluZ0xheWVyOjpjcmVhdGUoMSwgZmFsc2UsIHRydWUsIHRydWUpKTsKKyAgICByb290LT5hZGRD
aGlsZChNaXNzaW5nVGV4dHVyZUFuaW1hdGluZ0xheWVyOjpjcmVhdGUoMiwgZmFsc2UsIHRydWUs
IHRydWUpKTsKIAogICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0RyYXcoZnJh
bWUpKTsKICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKQEAgLTgwOSw3ICs4MTEs
NyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHByZXBhcmVUb0RyYXdGYWlsc1do
ZW5BbmltYXRpb25Vc2VzQ2hlY2tlcmJvYXJkKQogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIHNjcm9sbFJvb3RJZ25vcmVkKQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICByb290LT5zZXRTY3JvbGxhYmxlKGZhbHNl
KTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CkBAIC04MzMsNyArODM1LDcgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxOb25Db21wb3NpdGVkUm9vdCkK
ICAgICBjb250ZW50TGF5ZXItPnNldEJvdW5kcyhzdXJmYWNlU2l6ZSk7CiAgICAgY29udGVudExh
eWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUoc3VyZmFjZVNpemUud2lkdGgoKSAqIDIsIHN1
cmZhY2VTaXplLmhlaWdodCgpICogMikpOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3Jv
bGxMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBzY3JvbGxMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CiAgICAgc2Nyb2xsTGF5ZXIt
PnNldFNjcm9sbGFibGUodHJ1ZSk7CiAgICAgc2Nyb2xsTGF5ZXItPnNldE1heFNjcm9sbFBvc2l0
aW9uKHN1cmZhY2VTaXplKTsKICAgICBzY3JvbGxMYXllci0+YWRkQ2hpbGQoY29udGVudExheWVy
LnJlbGVhc2UoKSk7CkBAIC04NTIsOCArODU0LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzY3JvbGxOb25Db21wb3NpdGVkUm9vdCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykKIHsKICAgICBJbnRTaXpl
IHN1cmZhY2VTaXplKDEwLCAxMCk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgwKTsKLSAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxl
TGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIHJvb3QtPmFkZENo
aWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6
ZSkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVhc2UoKSk7CiAgICAg
bV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKICAgICBpbml0aWFsaXpl
TGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwpAQCAtODY4LDggKzg3MCw4IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRDYWxsc0NvbW1pdEFuZFJlZHJhdykK
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQ2hpbGQpCiB7CiAg
ICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBy
b290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1LCA1KSwg
c3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNl
KCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAgICAg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKQEAgLTg4Myw4ICs4ODUsOCBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0NoaWxkKQogVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNrZmFjaW5nQ2hpbGQp
CiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgxKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xs
YWJsZUxheWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKICAgICBtX2hvc3RJ
bXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwogCiAgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggbWF0cml4OwpAQCAtOTA2LDExICs5MDgsMTEgQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXNCYWNrZmFjaW5nQ2hpbGQpCiBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEJsb2NrZWRCeUNvbnRlbnRMYXllcikKIHsKICAgICBJ
bnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjb250
ZW50TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudExheWVyID0gY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKICAgICBj
b250ZW50TGF5ZXItPnNldFNob3VsZFNjcm9sbE9uTWFpblRocmVhZCh0cnVlKTsKICAgICBjb250
ZW50TGF5ZXItPnNldFNjcm9sbGFibGUoZmFsc2UpOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBzY3JvbGxMYXllciA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUp
LCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBzY3JvbGxMYXllciA9IGNy
ZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CiAg
ICAgc2Nyb2xsTGF5ZXItPmFkZENoaWxkKGNvbnRlbnRMYXllci5yZWxlYXNlKCkpOwogCiAgICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHNjcm9sbExheWVyLnJlbGVhc2UoKSk7CkBAIC05MjUs
NyArOTI3LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5k
Q2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUo
MTAsIDEwKTsKICAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOwotICAgIE93blB0cjxDQ0xheWVySW1w
bD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJm
YWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJs
ZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKICAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdw
b3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3
RnJhbWUoKTsKQEAgLTk0Myw3ICs5NDUsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbFJvb3RBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCiAgICAgLy8gVGhl
IHNjYWxlIHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgogICAgIGV4cGVjdGVkU2Ny
b2xsRGVsdGEuc2NhbGUocGFnZVNjYWxlKTsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNl
dD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBl
eHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMCwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7
CisgICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIG1faG9zdEltcGwtPnJvb3RM
YXllcigpLT5pZCgpLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKIAogICAgIC8vIFRoZSBzY3JvbGwg
cmFuZ2Ugc2hvdWxkIGFsc28gaGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAgRVhQRUNUX0VRKG1faG9z
dEltcGwtPnJvb3RMYXllcigpLT5tYXhTY3JvbGxQb3NpdGlvbigpLCBleHBlY3RlZE1heFNjcm9s
bCk7CkBAIC05NTYsNyArOTU4LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFkKQogewogICAgIEludFNpemUg
c3VyZmFjZVNpemUoMTAsIDEwKTsKICAgICBmbG9hdCBwYWdlU2NhbGUgPSAyOwotICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3Jl
YXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKICAg
ICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdElt
cGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0UGFn
ZVNjYWxlRmFjdG9yQW5kTGltaXRzKDEsIDEsIHBhZ2VTY2FsZSk7CkBAIC05NzYsNyArOTc4LDcg
QEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFn
ZVNjYWxlT25JbXBsVGhyZWFkKQogCiAgICAgLy8gVGhlIHNjcm9sbCBkZWx0YSBpcyBub3Qgc2Nh
bGVkIGJlY2F1c2UgdGhlIG1haW4gdGhyZWFkIGRpZCBub3Qgc2NhbGUuCiAgICAgT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xs
RGVsdGFzKCk7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDAsIGV4cGVj
dGVkU2Nyb2xsRGVsdGEpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBt
X2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+aWQoKSwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CiAKICAg
ICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBhbHNvIGhhdmUgYmVlbiB1cGRhdGVkLgogICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRpb24oKSwg
ZXhwZWN0ZWRNYXhTY3JvbGwpOwpAQCAtOTg4LDEwICs5OTAsMTEgQEAgVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25JbXBsVGhyZWFk
KQogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5nZVBh
Z2VTY2FsZU9uTWFpblRocmVhZCkKIHsKICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7
Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwog
ICAgIC8vIEFsc28gbWFyayB0aGUgcm9vdCBzY3JvbGxhYmxlIHNvIGl0IGJlY29tZXMgdGhlIHJv
b3Qgc2Nyb2xsIGxheWVyLgogICAgIHJvb3QtPnNldFNjcm9sbGFibGUodHJ1ZSk7Ci0gICAgcm9v
dC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1
cmZhY2VTaXplKSk7CisgICAgaW50IHNjcm9sbExheWVySWQgPSAyOworICAgIHJvb3QtPmFkZENo
aWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcihzY3JvbGxMYXllcklkLCBGbG9hdFBvaW50KDUsIDUp
LCBzdXJmYWNlU2l6ZSkpOwogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihyb290LnJlbGVh
c2UoKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKICAg
ICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwpAQCAtMTAxMSw3ICsxMDE0
LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEFuZENoYW5n
ZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKICAgICAvLyBUaGUgc2NhbGUgc2hvdWxkIGFwcGx5IHRv
IHRoZSBzY3JvbGwgZGVsdGEuCiAgICAgZXhwZWN0ZWRTY3JvbGxEZWx0YS5zY2FsZShwYWdlU2Nh
bGUpOwogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0
SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJ
bmZvLmdldCgpLCAxLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKKyAgICBleHBlY3RDb250YWlucygq
c2Nyb2xsSW5mby5nZXQoKSwgc2Nyb2xsTGF5ZXJJZCwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CiAK
ICAgICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBub3QgaGF2ZSBjaGFuZ2VkLgogICAgIEVY
UEVDVF9FUShjaGlsZC0+bWF4U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0ZWRNYXhTY3JvbGwpOwpA
QCAtMTAyNiwxMiArMTAyOSwxMiBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNj
cm9sbENoaWxkQmV5b25kTGltaXQpCiAgICAgLy8gcGFyZW50IGxheWVyIGlzIHNjcm9sbGVkIG9u
IHRoZSBheGlzIG9uIHdoaWNoIHRoZSBjaGlsZCB3YXMgdW5hYmxlIHRvCiAgICAgLy8gc2Nyb2xs
LgogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKLSAgICBPd25QdHI8Q0NMYXllcklt
cGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFi
bGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CiAKLSAgICBPd25QdHI8
Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQ
b2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRD
aGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigzLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNl
U2l6ZSk7CiAgICAgZ3JhbmRDaGlsZC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgNSkp
OwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXll
cigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSk7CiAgICAgY2hpbGQtPnNldFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDMsIDAp
KTsKICAgICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOwogCkBAIC0xMDYy
LDggKzEwNjUsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbEV2ZW50
QnViYmxpbmcpCiAgICAgLy8gV2hlbiB3ZSB0cnkgdG8gc2Nyb2xsIGEgbm9uLXNjcm9sbGFibGUg
Y2hpbGQgbGF5ZXIsIHRoZSBzY3JvbGwgZGVsdGEKICAgICAvLyBzaG91bGQgYmUgYXBwbGllZCB0
byBvbmUgb2YgaXRzIGFuY2VzdG9ycyBpZiBwb3NzaWJsZS4KICAgICBJbnRTaXplIHN1cmZhY2VT
aXplKDEwLCAxMCk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xs
YWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKLSAgICBPd25QdHI8
Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwogCiAgICAgY2hpbGQtPnNldFNjcm9sbGFibGUo
ZmFsc2UpOwogICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CkBAIC0xMDg4LDEz
ICsxMDkxLDEzIEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRXZlbnRC
dWJibGluZykKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQmVmb3JlUmVk
cmF3KQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKLSAgICBtX2hvc3RJbXBs
LT5zZXRSb290TGF5ZXIoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQoNSwgNSks
IHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9s
bGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOwogICAgIG1faG9z
dEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAKICAgICAvLyBEcmF3IG9uZSBm
cmFtZSBhbmQgdGhlbiBpbW1lZGlhdGVseSByZWJ1aWxkIHRoZSBsYXllciB0cmVlIHRvIG1pbWlj
IGEgdHJlZSBzeW5jaHJvbml6YXRpb24uCiAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmRE
cmF3RnJhbWUoKTsKICAgICBtX2hvc3RJbXBsLT5kZXRhY2hMYXllclRyZWUoKTsKLSAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0
ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOwogCiAg
ICAgLy8gU2Nyb2xsaW5nIHNob3VsZCBzdGlsbCB3b3JrIGV2ZW4gdGhvdWdoIHdlIGRpZCBub3Qg
ZHJhdyB5ZXQuCiAgICAgRVhQRUNUX0VRKG1faG9zdEltcGwtPnNjcm9sbEJlZ2luKEludFBvaW50
KDUsIDUpLCBDQ0lucHV0SGFuZGxlckNsaWVudDo6V2hlZWwpLCBDQ0lucHV0SGFuZGxlckNsaWVu
dDo6U2Nyb2xsU3RhcnRlZCk7CkBAIC0xMTg2LDcgKzExODksNyBAQCBURVNUX0YoQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5nT2ZmV2hlbkRyYXdpbmdPcGFxdWVMYXllcnMpCiB7CiAK
ICAgICB7Ci0gICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMSk7CiAgICAgICAgIHJvb3QtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwg
MCkpOwogICAgICAgICByb290LT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICAgICAg
cm9vdC0+c2V0Q29udGVudEJvdW5kcyhyb290LT5ib3VuZHMoKSk7CkBAIC0xMTk1LDcgKzExOTgs
NyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5nT2ZmV2hlbkRyYXdp
bmdPcGFxdWVMYXllcnMpCiAgICAgfQogICAgIENDTGF5ZXJJbXBsKiByb290ID0gbV9ob3N0SW1w
bC0+cm9vdExheWVyKCk7CiAKLSAgICByb290LT5hZGRDaGlsZChCbGVuZFN0YXRlQ2hlY2tMYXll
cjo6Y3JlYXRlKDEpKTsKKyAgICByb290LT5hZGRDaGlsZChCbGVuZFN0YXRlQ2hlY2tMYXllcjo6
Y3JlYXRlKDIpKTsKICAgICBCbGVuZFN0YXRlQ2hlY2tMYXllciogbGF5ZXIxID0gc3RhdGljX2Nh
c3Q8QmxlbmRTdGF0ZUNoZWNrTGF5ZXIqPihyb290LT5jaGlsZHJlbigpWzBdLmdldCgpKTsKIAog
ICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKQEAgLTEyNDcsNyArMTI1
MCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgYmxlbmRpbmdPZmZXaGVuRHJh
d2luZ09wYXF1ZUxheWVycykKICAgICBFWFBFQ1RfVFJVRShsYXllcjEtPnF1YWRzQXBwZW5kZWQo
KSk7CiAgICAgbV9ob3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CiAKLSAgICBsYXll
cjEtPmFkZENoaWxkKEJsZW5kU3RhdGVDaGVja0xheWVyOjpjcmVhdGUoMikpOworICAgIGxheWVy
MS0+YWRkQ2hpbGQoQmxlbmRTdGF0ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgzKSk7CiAgICAgQmxlbmRT
dGF0ZUNoZWNrTGF5ZXIqIGxheWVyMiA9IHN0YXRpY19jYXN0PEJsZW5kU3RhdGVDaGVja0xheWVy
Kj4obGF5ZXIxLT5jaGlsZHJlbigpWzBdLmdldCgpKTsKIAogICAgIC8vIDIgb3BhcXVlIGxheWVy
cywgZHJhd24gd2l0aG91dCBibGVuZGluZy4KQEAgLTE0MDcsNyArMTQxMCw3IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgdmlld3BvcnRDb3ZlcmVkKQogICAgIEludFNpemUgdmll
d3BvcnRTaXplKDEwMDAsIDEwMDApOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZSh2
aWV3cG9ydFNpemUpOwogCi0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKEJsZW5kU3RhdGVD
aGVja0xheWVyOjpjcmVhdGUoMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihCbGVu
ZFN0YXRlQ2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKICAgICBCbGVuZFN0YXRlQ2hlY2tMYXllciog
cm9vdCA9IHN0YXRpY19jYXN0PEJsZW5kU3RhdGVDaGVja0xheWVyKj4obV9ob3N0SW1wbC0+cm9v
dExheWVyKCkpOwogICAgIHJvb3QtPnNldEV4cGVjdGF0aW9uKGZhbHNlLCB0cnVlKTsKICAgICBy
b290LT5zZXRPcGFxdWUodHJ1ZSk7CkBAIC0xOTk3LDcgKzIwMDAsNyBAQCBwcml2YXRlOgogCiBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGNvbnRleHRMb3N0QW5kUmVzdG9yZWROb3Rp
ZmljYXRpb25TZW50VG9BbGxMYXllcnMpCiB7Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KENvbnRleHRMb3N0Tm90aWZpY2F0aW9uQ2hlY2tMYXllcjo6Y3JlYXRlKDApKTsKKyAgICBtX2hv
c3RJbXBsLT5zZXRSb290TGF5ZXIoQ29udGV4dExvc3ROb3RpZmljYXRpb25DaGVja0xheWVyOjpj
cmVhdGUoMSkpOwogICAgIENvbnRleHRMb3N0Tm90aWZpY2F0aW9uQ2hlY2tMYXllciogcm9vdCA9
IHN0YXRpY19jYXN0PENvbnRleHRMb3N0Tm90aWZpY2F0aW9uQ2hlY2tMYXllcio+KG1faG9zdElt
cGwtPnJvb3RMYXllcigpKTsKIAogICAgIHJvb3QtPmFkZENoaWxkKENvbnRleHRMb3N0Tm90aWZp
Y2F0aW9uQ2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKQEAgLTIyMDAsMTEgKzIyMDMsMTEgQEAgcHVi
bGljOgogCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJj
ZXNBZnRlckxvc3RDb250ZXh0KQogewotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdExheWVy
KENDTGF5ZXJJbXBsOjpjcmVhdGUoMCkpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdExh
eWVyKENDTGF5ZXJJbXBsOjpjcmVhdGUoMSkpOwogICAgIHJvb3RMYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CiAgICAgcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
KDAsIDApKTsKIAotICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiB0aWxlTGF5ZXIgPSBDQ1Rp
bGVkTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IHRp
bGVMYXllciA9IENDVGlsZWRMYXllckltcGw6OmNyZWF0ZSgyKTsKICAgICB0aWxlTGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHRpbGVMYXllci0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgwLCAwKSk7CiAgICAgdGlsZUxheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNp
emUoMTAsIDEwKSk7CkBAIC0yMjE2LDcgKzIyMTksNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJjZXNBZnRlckxvc3RDb250ZXh0KQogICAgIHRpbGVM
YXllci0+cHVzaFRpbGVQcm9wZXJ0aWVzKDAsIDAsIDEsIEludFJlY3QoMCwgMCwgMTAsIDEwKSk7
CiAgICAgcm9vdExheWVyLT5hZGRDaGlsZCh0aWxlTGF5ZXIucmVsZWFzZSgpKTsKIAotICAgIE93
blB0cjxDQ1RleHR1cmVMYXllckltcGw+IHRleHR1cmVMYXllciA9IENDVGV4dHVyZUxheWVySW1w
bDo6Y3JlYXRlKDIpOworICAgIE93blB0cjxDQ1RleHR1cmVMYXllckltcGw+IHRleHR1cmVMYXll
ciA9IENDVGV4dHVyZUxheWVySW1wbDo6Y3JlYXRlKDMpOwogICAgIHRleHR1cmVMYXllci0+c2V0
Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CiAgICAgdGV4dHVyZUxheWVyLT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50KDAsIDApKTsKICAgICB0ZXh0dXJlTGF5ZXItPnNldENvbnRlbnRCb3VuZHMo
SW50U2l6ZSgxMCwgMTApKTsKQEAgLTIyMjUsNyArMjIyOCw3IEBAIFRFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgZG9udFVzZU9sZFJlc291cmNlc0FmdGVyTG9zdENvbnRleHQpCiAgICAg
cm9vdExheWVyLT5hZGRDaGlsZCh0ZXh0dXJlTGF5ZXIucmVsZWFzZSgpKTsKIAogICAgIEZha2VW
aWRlb0ZyYW1lUHJvdmlkZXIgcHJvdmlkZXI7Ci0gICAgT3duUHRyPENDVmlkZW9MYXllckltcGw+
IHZpZGVvTGF5ZXIgPSBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUoMywgJnByb3ZpZGVyKTsKKyAg
ICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbD4gdmlkZW9MYXllciA9IENDVmlkZW9MYXllckltcGw6
OmNyZWF0ZSg0LCAmcHJvdmlkZXIpOwogICAgIHZpZGVvTGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDEwLCAxMCkpOwogICAgIHZpZGVvTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwg
MCkpOwogICAgIHZpZGVvTGF5ZXItPnNldENvbnRlbnRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsK
QEAgLTIyMzMsNyArMjIzNiw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZG9u
dFVzZU9sZFJlc291cmNlc0FmdGVyTG9zdENvbnRleHQpCiAgICAgdmlkZW9MYXllci0+c2V0TGF5
ZXJUcmVlSG9zdEltcGwobV9ob3N0SW1wbC5nZXQoKSk7CiAgICAgcm9vdExheWVyLT5hZGRDaGls
ZCh2aWRlb0xheWVyLnJlbGVhc2UoKSk7CiAKLSAgICBPd25QdHI8Q0NJT1N1cmZhY2VMYXllcklt
cGw+IGlvU3VyZmFjZUxheWVyID0gQ0NJT1N1cmZhY2VMYXllckltcGw6OmNyZWF0ZSg0KTsKKyAg
ICBPd25QdHI8Q0NJT1N1cmZhY2VMYXllckltcGw+IGlvU3VyZmFjZUxheWVyID0gQ0NJT1N1cmZh
Y2VMYXllckltcGw6OmNyZWF0ZSg1KTsKICAgICBpb1N1cmZhY2VMYXllci0+c2V0Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CiAgICAgaW9TdXJmYWNlTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQoMCwgMCkpOwogICAgIGlvU3VyZmFjZUxheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNp
emUoMTAsIDEwKSk7CkBAIC0yNDY1LDYgKzI0NjgsMTEgQEAgc3RhdGljIHZvaWQgc2V0dXBMYXll
cnNGb3JUZXh0dXJlQ2FjaGluZyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1w
bCwKICAgICBzdXJmYWNlTGF5ZXJQdHItPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CiB9CiAK
K2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bVdpdGhSZWxlYXNlVGV4dHVyZXMgOiBwdWJsaWMg
TGF5ZXJSZW5kZXJlckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICB1c2luZyBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXM7Cit9OworCiBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2FjaGluZykKIHsKICAgICBDQ1NldHRp
bmdzOjpzZXRQYXJ0aWFsU3dhcEVuYWJsZWQodHJ1ZSk7CkBAIC0yNTQ4LDIyICsyNTU2LDkgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmcpCiAg
ICAgICAgIG15SG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwogICAgIH0KIAotICAg
IC8vIENoYW5nZSBvcGFjaXR5IGFnYWluLCBidXQgZXZpY3QgdGhlIGNhY2hlZCBzdXJmYWNlIHRl
eHR1cmUKKyAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhZ2FpbiwgYW5kIGV2aWN0IHRoZSBjYWNoZWQg
c3VyZmFjZSB0ZXh0dXJlLgogICAgIHN1cmZhY2VMYXllclB0ci0+c2V0T3BhY2l0eSgwLjVmKTsK
LSAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlID0gc3VyZmFjZUxheWVyUHRyLT5y
ZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpOwotICAgIEFTU0VSVF9UUlVFKGNvbnRl
bnRzVGV4dHVyZS0+aXNWYWxpZChjb250ZW50c1RleHR1cmUtPnNpemUoKSwgY29udGVudHNUZXh0
dXJlLT5mb3JtYXQoKSkpOwotICAgIENDUmVuZGVyZXIqIHJlbmRlcmVyID0gbXlIb3N0SW1wbC0+
bGF5ZXJSZW5kZXJlcigpOwotICAgIFRleHR1cmVNYW5hZ2VyKiB0ZXh0dXJlTWFuYWdlciA9IHJl
bmRlcmVyLT5pbXBsVGV4dHVyZU1hbmFnZXIoKTsKLSAgICBzaXplX3QgbWF4TWVtb3J5TGltaXQg
PSB0ZXh0dXJlTWFuYWdlci0+bWF4TWVtb3J5TGltaXRCeXRlcygpOwotCi0gICAgLy8gVGhpcyBz
aG91bGQgZXZpY2UgYWxsIGNhY2hlZCBzdXJmYWNlcwotICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRN
YXhNZW1vcnlMaW1pdEJ5dGVzKDApOwotCi0gICAgLy8gUmVzdG9yZSBvcmlnaW5hbCBsaW1pdAot
ICAgIHRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1heE1lbW9yeUxpbWl0
KTsKLQotICAgIC8vIFdhcyBvdXIgc3VyZmFjZSBldmljdGVkPwotICAgIEFTU0VSVF9GQUxTRShj
b250ZW50c1RleHR1cmUtPmlzVmFsaWQoY29udGVudHNUZXh0dXJlLT5zaXplKCksIGNvbnRlbnRz
VGV4dHVyZS0+Zm9ybWF0KCkpKTsKKyAgICBzdGF0aWNfY2FzdDxMYXllclJlbmRlcmVyQ2hyb21p
dW1XaXRoUmVsZWFzZVRleHR1cmVzKj4obXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpKS0+cmVs
ZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwogCiAgICAgLy8gQ2hhbmdlIG9wYWNpdHkgYW5kIGRy
YXcKICAgICBzdXJmYWNlTGF5ZXJQdHItPnNldE9wYWNpdHkoMC42Zik7CkBAIC0yNTgzLDYgKzI1
NzgsOSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHN1cmZhY2VUZXh0dXJlQ2Fj
aGluZykKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNfY2FzdDxD
Q1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVsw
XS5nZXQoKSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdl
dFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCisgICAgICAgIC8vIFdhcyBvdXIgc3Vy
ZmFjZSBldmljdGVkPworICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5k
ZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJlbmRlclBh
c3MoKS0+aWQoKSkpOworCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwog
ICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKICAgICB9CkBAIC0y
NzA2LDIyICsyNzA0LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNl
VGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3
QWxsTGF5ZXJzKGZyYW1lKTsKICAgICB9CiAKLSAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhZ2Fpbiwg
YnV0IGV2aWN0IHRoZSBjYWNoZWQgc3VyZmFjZSB0ZXh0dXJlCisgICAgLy8gQ2hhbmdlIG9wYWNp
dHkgYWdhaW4sIGFuZCBldmljdCB0aGUgY2FjaGVkIHN1cmZhY2UgdGV4dHVyZS4KICAgICBzdXJm
YWNlTGF5ZXJQdHItPnNldE9wYWNpdHkoMC41Zik7Ci0gICAgTWFuYWdlZFRleHR1cmUqIGNvbnRl
bnRzVGV4dHVyZSA9IHN1cmZhY2VMYXllclB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1Rl
eHR1cmUoKTsKLSAgICBBU1NFUlRfVFJVRShjb250ZW50c1RleHR1cmUtPmlzVmFsaWQoY29udGVu
dHNUZXh0dXJlLT5zaXplKCksIGNvbnRlbnRzVGV4dHVyZS0+Zm9ybWF0KCkpKTsKLSAgICBDQ1Jl
bmRlcmVyKiByZW5kZXJlciA9IG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKTsKLSAgICBUZXh0
dXJlTWFuYWdlciogdGV4dHVyZU1hbmFnZXIgPSByZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2Vy
KCk7Ci0gICAgc2l6ZV90IG1heE1lbW9yeUxpbWl0ID0gdGV4dHVyZU1hbmFnZXItPm1heE1lbW9y
eUxpbWl0Qnl0ZXMoKTsKLQotICAgIC8vIFRoaXMgc2hvdWxkIGV2aWNlIGFsbCBjYWNoZWQgc3Vy
ZmFjZXMKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygwKTsKLQot
ICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgbGltaXQKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4
TWVtb3J5TGltaXRCeXRlcyhtYXhNZW1vcnlMaW1pdCk7Ci0KLSAgICAvLyBXYXMgb3VyIHN1cmZh
Y2UgZXZpY3RlZD8KLSAgICBBU1NFUlRfRkFMU0UoY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKGNv
bnRlbnRzVGV4dHVyZS0+c2l6ZSgpLCBjb250ZW50c1RleHR1cmUtPmZvcm1hdCgpKSk7CisgICAg
c3RhdGljX2Nhc3Q8TGF5ZXJSZW5kZXJlckNocm9taXVtV2l0aFJlbGVhc2VUZXh0dXJlcyo+KG15
SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSktPnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsK
IAogICAgIC8vIENoYW5nZSBvcGFjaXR5IGFuZCBkcmF3CiAgICAgc3VyZmFjZUxheWVyUHRyLT5z
ZXRPcGFjaXR5KDAuNmYpOwpAQCAtMjc0MSw2ICsyNzI2LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmdOb1BhcnRpYWxTd2FwKQogICAgICAg
ICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0Ry
YXdRdWFkKj4oZnJhbWUucmVuZGVyUGFzc2VzWzFdLT5xdWFkTGlzdCgpWzBdLmdldCgpKTsKICAg
ICAgICAgRVhQRUNUX0ZBTFNFKHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpLT5j
b250ZW50c0NoYW5nZWQoKSk7CiAKKyAgICAgICAgLy8gV2FzIG91ciBzdXJmYWNlIGV2aWN0ZWQ/
CisgICAgICAgIEVYUEVDVF9GQUxTRShteUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmhhdmVD
YWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQocXVhZC0+cmVuZGVyUGFzcygpLT5pZCgpKSk7
CisKICAgICAgICAgbXlIb3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CiAgICAgICAgIG15SG9z
dEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwogICAgIH0KQEAgLTI4OTgsODcgKzI4ODYs
NzYgQEAgc3RydWN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEgewogICAgIE93blB0cjxDQ1No
YXJlZFF1YWRTdGF0ZT4gc2hhcmVkUXVhZFN0YXRlOwogfTsKIAotY2xhc3MgRmFrZVJlbmRlclN1
cmZhY2UgOiBwdWJsaWMgQ0NSZW5kZXJTdXJmYWNlIHsKLXByaXZhdGU6Ci0gICAgYm9vbCBtX2hh
c0NhY2hlZFRleHR1cmU7Ci0gICAgYm9vbCBtX2NvbnRlbnRzQ2hhbmdlZDsKLQorY2xhc3MgQ0NU
ZXN0UmVuZGVyUGFzczogcHVibGljIENDUmVuZGVyUGFzcyB7CiBwdWJsaWM6Ci0gICAgRmFrZVJl
bmRlclN1cmZhY2UoQ0NMYXllckltcGwqIGxheWVySW1wbCkKLSAgICAgICAgOiBDQ1JlbmRlclN1
cmZhY2UobGF5ZXJJbXBsKSwKLSAgICAgICAgICBtX2hhc0NhY2hlZFRleHR1cmUoZmFsc2UpCi0g
ICAgewotICAgIH0KKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShD
Q1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIHVuc2lnbmVkIGlkKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgQ0NUZXN0UmVuZGVyUGFzcyh0YXJnZXRTdXJmYWNlLCBpZCkpOyB9CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaGFzQ2FjaGVkQ29udGVudHNUZXh0dXJlKCkgY29uc3QgT1ZFUlJJREUKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2hhc0NhY2hlZFRleHR1cmU7Ci0gICAgfQorICAgIHZvaWQg
YXBwZW5kUXVhZChQYXNzT3duUHRyPENDRHJhd1F1YWQ+IHF1YWQpIHsgbV9xdWFkTGlzdC5hcHBl
bmQocXVhZCk7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBwcmVwYXJlQ29udGVudHNUZXh0dXJlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbHJjKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQorcHJvdGVjdGVkOgorICAgIENDVGVzdFJlbmRlclBhc3MoQ0NSZW5kZXJT
dXJmYWNlKiB0YXJnZXRTdXJmYWNlLCB1bnNpZ25lZCBpZCkgOiBDQ1JlbmRlclBhc3ModGFyZ2V0
U3VyZmFjZSwgaWQpIHsgfQorfTsKIAotICAgIHZpcnR1YWwgYm9vbCBjb250ZW50c0NoYW5nZWQo
KSBjb25zdCBPVkVSUklERQorY2xhc3MgQ0NUZXN0UmVuZGVyZXIgOiBwdWJsaWMgTGF5ZXJSZW5k
ZXJlckNocm9taXVtLCBwdWJsaWMgQ0NSZW5kZXJlckNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NUZXN0UmVuZGVyZXI+IGNyZWF0ZShXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29udGVudHNDaGFu
Z2VkOwotICAgIH0KKyAgICAgICAgT3duUHRyPENDVGVzdFJlbmRlcmVyPiByZW5kZXJlcihhZG9w
dFB0cihuZXcgQ0NUZXN0UmVuZGVyZXIoY29udGV4dCkpKTsKKyAgICAgICAgaWYgKCFyZW5kZXJl
ci0+aW5pdGlhbGl6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICB2b2lk
IHNldEhhc0NhY2hlZFRleHR1cmUoYm9vbCBoYXNDYWNoZWRUZXh0dXJlKQotICAgIHsKLSAgICAg
ICAgbV9oYXNDYWNoZWRUZXh0dXJlID0gaGFzQ2FjaGVkVGV4dHVyZTsKKyAgICAgICAgcmV0dXJu
IHJlbmRlcmVyLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRzQ2hhbmdl
ZChib29sIGNvbnRlbnRzQ2hhbmdlZCkKLSAgICB7Ci0gICAgICAgIG1fY29udGVudHNDaGFuZ2Vk
ID0gY29udGVudHNDaGFuZ2VkOwotICAgIH0KLX07CisgICAgdm9pZCBjbGVhckNhY2hlZFRleHR1
cmVzKCkgeyBtX3RleHR1cmVzLmNsZWFyKCk7IH0KKyAgICB2b2lkIHNldEhhdmVDYWNoZWRSZXNv
dXJjZXNGb3JSZW5kZXJQYXNzSWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlcy5hZGQoaWQpOyB9
CiAKLWNsYXNzIENDVGVzdFJlbmRlclBhc3M6IHB1YmxpYyBDQ1JlbmRlclBhc3MgewotcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUmVuZGVyUGFzcz4gY3JlYXRlKENDUmVuZGVyU3Vy
ZmFjZSogdGFyZ2V0U3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
Q0NUZXN0UmVuZGVyUGFzcyh0YXJnZXRTdXJmYWNlKSk7Ci0gICAgfQorICAgIHZpcnR1YWwgYm9v
bCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHVuc2lnbmVkIGlkKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX3RleHR1cmVzLmNvbnRhaW5zKGlkKTsgfQorCisgICAgLy8gQ0NS
ZW5kZXJlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGNvbnN0IEludFNpemUm
IGRldmljZVZpZXdwb3J0U2l6ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmlld3BvcnRT
aXplOyB9CisgICAgdmlydHVhbCBjb25zdCBDQ0xheWVyVHJlZVNldHRpbmdzJiBzZXR0aW5ncygp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkTG9zZUNvbnRleHQoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25Td2FwQnVm
ZmVyc0NvbXBsZXRlKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEZ1bGxSb290
TGF5ZXJEYW1hZ2UoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUNvbnRl
bnRzVGV4dHVyZXMoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWVtb3J5QWxs
b2NhdGlvbkxpbWl0Qnl0ZXMoc2l6ZV90KSBPVkVSUklERSB7IH0KIAogcHJvdGVjdGVkOgotICAg
IENDVGVzdFJlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKiBzdXJmYWNlKQotICAgICAgICA6IEND
UmVuZGVyUGFzcyhzdXJmYWNlKQotICAgIHsKLSAgICB9CisgICAgQ0NUZXN0UmVuZGVyZXIoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkgOiBMYXllclJlbmRlcmVyQ2hyb21p
dW0odGhpcywgY29udGV4dCwgVW50aHJvdHRsZWRVcGxvYWRlcikgeyB9CiAKLXB1YmxpYzoKLSAg
ICB2b2lkIGFwcGVuZFF1YWQoUGFzc093blB0cjxDQ0RyYXdRdWFkPiBxdWFkKQotICAgIHsKLSAg
ICAgICAgbV9xdWFkTGlzdC5hcHBlbmQocXVhZCk7Ci0gICAgfQorcHJpdmF0ZToKKyAgICBDQ0xh
eWVyVHJlZVNldHRpbmdzIG1fc2V0dGluZ3M7CisgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsK
KyAgICBIYXNoU2V0PHVuc2lnbmVkPiBtX3RleHR1cmVzOwogfTsKIAotc3RhdGljIFBhc3NPd25Q
dHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGVEdW1teVJlbmRlclBhc3MoUmVuZGVyUGFzc1JlbW92YWxU
ZXN0RGF0YSYgdGVzdERhdGEpCitzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0
ZUR1bW15UmVuZGVyUGFzcyhSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSwgdW5z
aWduZWQgaWQpCiB7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBsYXllckltcGwgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDEpOwotICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IG5l
dyBGYWtlUmVuZGVyU3VyZmFjZShsYXllckltcGwuZ2V0KCkpOwotICAgIE93blB0cjxDQ1JlbmRl
clBhc3M+IHJlbmRlclBhc3NQdHIgPSBDQ1Rlc3RSZW5kZXJQYXNzOjpjcmVhdGUocmVuZGVyU3Vy
ZmFjZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBsYXllckltcGwoQ0NMYXllckltcGw6OmNy
ZWF0ZShpZCkpOworICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U+IHJlbmRlclN1cmZhY2UoYWRv
cHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZShsYXllckltcGwuZ2V0KCkpKSk7CisgICAgT3duUHRy
PENDUmVuZGVyUGFzcz4gcmVuZGVyUGFzc1B0cihDQ1Rlc3RSZW5kZXJQYXNzOjpjcmVhdGUocmVu
ZGVyU3VyZmFjZS5nZXQoKSwgbGF5ZXJJbXBsLT5pZCgpKSk7CiAKLSAgICB0ZXN0RGF0YS5yZW5k
ZXJTdXJmYWNlU3RvcmUuYXBwZW5kKGFkb3B0UHRyKHJlbmRlclN1cmZhY2UpKTsKKyAgICB0ZXN0
RGF0YS5yZW5kZXJTdXJmYWNlU3RvcmUuYXBwZW5kKHJlbmRlclN1cmZhY2UucmVsZWFzZSgpKTsK
ICAgICB0ZXN0RGF0YS5sYXllclN0b3JlLmFwcGVuZChsYXllckltcGwucmVsZWFzZSgpKTsKICAg
ICByZXR1cm4gcmVuZGVyUGFzc1B0ci5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvbmZp
Z3VyZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0U2NyaXB0LCBSZW5kZXJQYXNz
UmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSkKK3N0YXRpYyB2b2lkIGNvbmZpZ3VyZVJlbmRlclBh
c3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0U2NyaXB0LCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3RE
YXRhJiB0ZXN0RGF0YSwgQ0NUZXN0UmVuZGVyZXIqIHJlbmRlcmVyKQogeworICAgIHJlbmRlcmVy
LT5jbGVhckNhY2hlZFRleHR1cmVzKCk7CisKICAgICAvLyBPbmUgc2hhcmVkIHN0YXRlIGZvciBh
bGwgcXVhZHMgLSB3ZSBkb24ndCBuZWVkIHRoZSBjb3JyZWN0IGRldGFpbHMKICAgICB0ZXN0RGF0
YS5zaGFyZWRRdWFkU3RhdGUgPSBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4KCksIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIEludFJlY3QoKSwgSW50
UmVjdCgpLCAxLjAsIHRydWUpOwogCiAgICAgY29uc3QgY2hhciogY3VycmVudENoYXIgPSB0ZXN0
U2NyaXB0OwogCiAgICAgLy8gUHJlLWNyZWF0ZSByb290IHBhc3MKLSAgICBPd25QdHI8Q0NSZW5k
ZXJQYXNzPiByb290UmVuZGVyUGFzcyA9IGNyZWF0ZUR1bW15UmVuZGVyUGFzcyh0ZXN0RGF0YSk7
Ci0gICAgdGVzdERhdGEucmVuZGVyUGFzc0lkLmluc2VydChzdGQ6OnBhaXI8Q0NSZW5kZXJQYXNz
KiwgY2hhcj4ocm9vdFJlbmRlclBhc3MuZ2V0KCksIHRlc3RTY3JpcHRbMF0pKTsKLSAgICB0ZXN0
RGF0YS5yZW5kZXJQYXNzQ2FjaGUuaW5zZXJ0KHN0ZDo6cGFpcjxjaGFyLCBSZW5kZXJQYXNzQ2Fj
aGVFbnRyeT4odGVzdFNjcmlwdFswXSwgUmVuZGVyUGFzc0NhY2hlRW50cnkocm9vdFJlbmRlclBh
c3MucmVsZWFzZSgpKSkpOwotICAgIHdoaWxlICgqY3VycmVudENoYXIgIT0gJ1wwJykgeworICAg
IGNoYXIgcm9vdFJlbmRlclBhc3NJZCA9IHRlc3RTY3JpcHRbMF07CisgICAgT3duUHRyPENDUmVu
ZGVyUGFzcz4gcm9vdFJlbmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3ModGVzdERhdGEs
IHJvb3RSZW5kZXJQYXNzSWQpOworICAgIHRlc3REYXRhLnJlbmRlclBhc3NJZC5pbnNlcnQoc3Rk
OjpwYWlyPENDUmVuZGVyUGFzcyosIGNoYXI+KHJvb3RSZW5kZXJQYXNzLmdldCgpLCByb290UmVu
ZGVyUGFzc0lkKSk7CisgICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlLmluc2VydChzdGQ6OnBh
aXI8Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50cnk+KHJvb3RSZW5kZXJQYXNzSWQsIFJlbmRlclBh
c3NDYWNoZUVudHJ5KHJvb3RSZW5kZXJQYXNzLnJlbGVhc2UoKSkpKTsKKyAgICB3aGlsZSAoKmN1
cnJlbnRDaGFyKSB7CiAgICAgICAgIGNoYXIgcmVuZGVyUGFzc0lkID0gY3VycmVudENoYXJbMF07
CiAgICAgICAgIGN1cnJlbnRDaGFyKys7CiAKQEAgLTI5OTEsNyArMjk2OCw3IEBAIHN0YXRpYyB2
b2lkIGNvbmZpZ3VyZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0U2NyaXB0LCBS
ZW5kZXJQYXNzUmVtb3ZhCiAgICAgICAgIHJlbmRlclBhc3MgPSB0ZXN0RGF0YS5yZW5kZXJQYXNz
Q2FjaGVbcmVuZGVyUGFzc0lkXS5yZW5kZXJQYXNzUHRyLnJlbGVhc2UoKTsKIAogICAgICAgICAv
LyBDeWNsZSB0aHJvdWdoIHF1YWQgZGF0YSBhbmQgY3JlYXRlIGFsbCBxdWFkcwotICAgICAgICB3
aGlsZSAoKmN1cnJlbnRDaGFyICE9ICdcbicgJiYgKmN1cnJlbnRDaGFyICE9ICdcMCcpIHsKKyAg
ICAgICAgd2hpbGUgKCpjdXJyZW50Q2hhciAmJiAqY3VycmVudENoYXIgIT0gJ1xuJykgewogICAg
ICAgICAgICAgaWYgKCpjdXJyZW50Q2hhciA9PSAncycpIHsKICAgICAgICAgICAgICAgICAvLyBT
b2xpZCBjb2xvciBkcmF3IHF1YWQKICAgICAgICAgICAgICAgICBPd25QdHI8Q0NEcmF3UXVhZD4g
cXVhZCA9IENDU29saWRDb2xvckRyYXdRdWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0
YXRlLmdldCgpLCBJbnRSZWN0KDAsIDAsIDEwLCAxMCksIFNLX0NvbG9yV0hJVEUpOwpAQCAtMzAw
MSwxMyArMjk3OCwxNCBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEo
Y29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAgICAgICAgICAgfSBl
bHNlIGlmICgoKmN1cnJlbnRDaGFyID49ICdBJykgJiYgKCpjdXJyZW50Q2hhciA8PSAnWicpKSB7
CiAgICAgICAgICAgICAgICAgLy8gUmVuZGVyUGFzcyBkcmF3IHF1YWQKICAgICAgICAgICAgICAg
ICBjaGFyIG5ld1JlbmRlclBhc3NJZCA9ICpjdXJyZW50Q2hhcjsKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTkUocm9vdFJlbmRlclBhc3NJZCwgbmV3UmVuZGVyUGFzc0lkKTsKICAgICAgICAgICAg
ICAgICBjdXJyZW50Q2hhcisrOwogICAgICAgICAgICAgICAgIGJvb2wgaGFzVGV4dHVyZSA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIGJvb2wgY29udGVudHNDaGFuZ2VkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoKmN1cnJlbnRDaGFyID09ICdbJykgewog
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q2hhcisrOwotICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoKCpjdXJyZW50Q2hhciAhPSAnXScpICYmICgqY3VycmVudENoYXIgIT0gJ1wwJykpIHsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50Q2hhciAmJiAqY3VycmVudENoYXIg
IT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCpjdXJyZW50Q2hhcikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGVudHNDaGFuZ2VkID0gZmFsc2U7CkBAIC0zMDI1LDIyICszMDAzLDIyIEBA
IHN0YXRpYyB2b2lkIGNvbmZpZ3VyZVJlbmRlclBhc3NUZXN0RGF0YShjb25zdCBjaGFyKiB0ZXN0
U2NyaXB0LCBSZW5kZXJQYXNzUmVtb3ZhCiAgICAgICAgICAgICAgICAgQ0NSZW5kZXJQYXNzKiBy
ZWZSZW5kZXJQYXNzUHRyOwogCiAgICAgICAgICAgICAgICAgaWYgKHRlc3REYXRhLnJlbmRlclBh
c3NDYWNoZS5maW5kKG5ld1JlbmRlclBhc3NJZCkgPT0gdGVzdERhdGEucmVuZGVyUGFzc0NhY2hl
LmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlZlJl
bmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3ModGVzdERhdGEpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzVGV4dHVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVy
LT5zZXRIYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKG5ld1JlbmRlclBhc3NJZCk7
CisKKyAgICAgICAgICAgICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcmVmUmVuZGVyUGFz
cyA9IGNyZWF0ZUR1bW15UmVuZGVyUGFzcyh0ZXN0RGF0YSwgbmV3UmVuZGVyUGFzc0lkKTsKICAg
ICAgICAgICAgICAgICAgICAgcmVmUmVuZGVyUGFzc1B0ciA9IHJlZlJlbmRlclBhc3MuZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIEZha2VSZW5kZXJTdXJmYWNlKiByZWZSZW5kZXJTdXJmYWNl
ID0gc3RhdGljX2Nhc3Q8RmFrZVJlbmRlclN1cmZhY2UqPihyZWZSZW5kZXJQYXNzLT50YXJnZXRT
dXJmYWNlKCkpOwotICAgICAgICAgICAgICAgICAgICByZWZSZW5kZXJTdXJmYWNlLT5zZXRIYXND
YWNoZWRUZXh0dXJlKGhhc1RleHR1cmUpOwotICAgICAgICAgICAgICAgICAgICByZWZSZW5kZXJT
dXJmYWNlLT5zZXRDb250ZW50c0NoYW5nZWQoY29udGVudHNDaGFuZ2VkKTsKICAgICAgICAgICAg
ICAgICAgICAgdGVzdERhdGEucmVuZGVyUGFzc0lkLmluc2VydChzdGQ6OnBhaXI8Q0NSZW5kZXJQ
YXNzKiwgY2hhcj4ocmVmUmVuZGVyUGFzcy5nZXQoKSwgbmV3UmVuZGVyUGFzc0lkKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZS5pbnNlcnQoc3RkOjpwYWly
PGNoYXIsIFJlbmRlclBhc3NDYWNoZUVudHJ5PihuZXdSZW5kZXJQYXNzSWQsIFJlbmRlclBhc3ND
YWNoZUVudHJ5KHJlZlJlbmRlclBhc3MucmVsZWFzZSgpKSkpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgICAgICByZWZSZW5kZXJQYXNzUHRyID0gdGVzdERhdGEucmVu
ZGVyUGFzc0NhY2hlW25ld1JlbmRlclBhc3NJZF0ucmVuZGVyUGFzczsKIAotICAgICAgICAgICAg
ICAgIE93blB0cjxDQ1JlbmRlclBhc3NEcmF3UXVhZD4gcXVhZCA9IENDUmVuZGVyUGFzc0RyYXdR
dWFkOjpjcmVhdGUodGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlLmdldCgpLCBJbnRSZWN0KCksIHJl
ZlJlbmRlclBhc3NQdHIsIGlzUmVwbGljYSwgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zKCks
IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucygpLCAxKTsKKyAgICAgICAgICAgICAgICBPd25Q
dHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IHF1YWQgPSBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3Jl
YXRlKHRlc3REYXRhLnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgSW50UmVjdCgpLCByZWZSZW5kZXJQ
YXNzUHRyLCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucygpLCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMoKSwgMSwgY29udGVudHNDaGFuZ2VkKTsKICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDQ1Rlc3RSZW5kZXJQYXNzKj4ocmVuZGVyUGFzcy5nZXQoKSktPmFw
cGVuZFF1YWQocXVhZC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIHRlc3REYXRhLnJlbmRlclBhc3NMaXN0Lmluc2VydCgwLCByZW5kZXJQYXNzLnJlbGVhc2Uo
KSk7Ci0gICAgICAgIGlmICgqY3VycmVudENoYXIgIT0gJ1wwJykKKyAgICAgICAgaWYgKCpjdXJy
ZW50Q2hhcikKICAgICAgICAgICAgIGN1cnJlbnRDaGFyKys7CiAgICAgfQogfQpAQCAtMzA2Mywx
NSArMzA0MSwxNCBAQCB2b2lkIGR1bXBSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgUmVuZGVyUGFz
c1JlbW92YWxUZXN0RGF0YSYgdGVzdERhdGEsIGNoYXIqIGJ1ZgogICAgICAgICAgICAgICAgICpw
b3MgPSAncyc7CiAgICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIENDRHJhd1F1YWQ6OlJlbmRlclBhc3M6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcmVuZGVyUGFz
c0RyYXdRdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihjdXJyZW50UXVh
ZCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IENDUmVuZGVyUGFzcyogcmVmUGFzcyA9IHJl
bmRlclBhc3NEcmF3UXVhZC0+cmVuZGVyUGFzcygpOwotICAgICAgICAgICAgICAgICAgICBjaGFy
IHJlZlBhc3NJZCA9IHRlc3REYXRhLnJlbmRlclBhc3NJZC5maW5kKHJlZlBhc3MpLT5zZWNvbmQ7
Ci0gICAgICAgICAgICAgICAgICAgICpwb3MgPSByZWZQYXNzSWQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHBvcysrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ0NEcmF3UXVh
ZDo6UmVuZGVyUGFzczogeworICAgICAgICAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBy
ZW5kZXJQYXNzRHJhd1F1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1
cnJlbnRRdWFkKTsKKyAgICAgICAgICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlZlBhc3Mg
PSByZW5kZXJQYXNzRHJhd1F1YWQtPnJlbmRlclBhc3MoKTsKKyAgICAgICAgICAgICAgICBjaGFy
IHJlZlBhc3NJZCA9IHRlc3REYXRhLnJlbmRlclBhc3NJZC5maW5kKHJlZlBhc3MpLT5zZWNvbmQ7
CisgICAgICAgICAgICAgICAgKnBvcyA9IHJlZlBhc3NJZDsKKyAgICAgICAgICAgICAgICBwb3Mr
KzsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgKnBvcyA9ICd4JzsKICAgICAgICAgICAgICAgICBwb3Mr
KzsKQEAgLTMyMzUsMTUgKzMyMTIsMTkgQEAgc3RhdGljIHZvaWQgdmVyaWZ5UmVuZGVyUGFzc1Rl
c3REYXRhKFRlc3RDYXNlJiB0ZXN0Q2FzZSwgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGEKICAgICBF
WFBFQ1RfU1RSRVEodGVzdENhc2UuZXhwZWN0ZWRSZXN1bHQsIGFjdHVhbFJlc3VsdCkgPDwgIklu
IHRlc3QgY2FzZTogIiA8PCB0ZXN0Q2FzZS5uYW1lOwogfQogCi1URVNUKFJlbmRlclBhc3NSZW1v
dmFsVGVzdCwgdGVzdFJlbW92ZVJlbmRlclBhc3NlcykKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgdGVzdFJlbW92ZVJlbmRlclBhc3NlcykKIHsKKyAgICBPd25QdHI8Q0NHcmFwaGlj
c0NvbnRleHQ+IGNvbnRleHQoY3JlYXRlQ29udGV4dCgpKTsKKyAgICBXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0M2QgPSBjb250ZXh0LT5jb250ZXh0M0QoKTsKKyAgICBBU1NF
UlRfVFJVRShjb250ZXh0M2QpOworICAgIE93blB0cjxDQ1Rlc3RSZW5kZXJlcj4gcmVuZGVyZXIo
Q0NUZXN0UmVuZGVyZXI6OmNyZWF0ZShjb250ZXh0M2QpKTsKKwogICAgIGludCB0ZXN0Q2FzZUlu
ZGV4ID0gMDsKICAgICB3aGlsZSAocmVtb3ZlUmVuZGVyUGFzc2VzQ2FzZXNbdGVzdENhc2VJbmRl
eF0ubmFtZSkgewotICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsK
ICAgICAgICAgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSB0ZXN0RGF0YTsKICAgICAgICAgQ0NS
ZW5kZXJQYXNzTGlzdCBza2lwcGVkUGFzc2VzOwotICAgICAgICBjb25maWd1cmVSZW5kZXJQYXNz
VGVzdERhdGEocmVtb3ZlUmVuZGVyUGFzc2VzQ2FzZXNbdGVzdENhc2VJbmRleF0uaW5pdFNjcmlw
dCwgdGVzdERhdGEpOwotICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZW1vdmVQYXNzZXNX
aXRoQ2FjaGVkVGV4dHVyZXModGVzdERhdGEucmVuZGVyUGFzc0xpc3QsIHNraXBwZWRQYXNzZXMp
OworICAgICAgICBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEocmVtb3ZlUmVuZGVyUGFzc2Vz
Q2FzZXNbdGVzdENhc2VJbmRleF0uaW5pdFNjcmlwdCwgdGVzdERhdGEsIHJlbmRlcmVyLmdldCgp
KTsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRl
eHR1cmVzKHRlc3REYXRhLnJlbmRlclBhc3NMaXN0LCBza2lwcGVkUGFzc2VzLCByZW5kZXJlci5n
ZXQoKSk7CiAgICAgICAgIHZlcmlmeVJlbmRlclBhc3NUZXN0RGF0YShyZW1vdmVSZW5kZXJQYXNz
ZXNDYXNlc1t0ZXN0Q2FzZUluZGV4XSwgdGVzdERhdGEpOwogICAgICAgICB0ZXN0Q2FzZUluZGV4
Kys7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXll
clJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
TGF5ZXJSZW5kZXJlckNocm9taXVtVGVzdC5jcHAKaW5kZXggY2ZkY2RjMTU2YTcyYjY5ZTk4YzYx
NmFkZWFhYzI0MThjZjJiNjZlNC4uOWM5ZWMyNWIwM2VkMTBiNTI5MTE4ZmU3Y2UxMGJjM2QxNGUx
ZTQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRl
cmVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX21lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKDApCiAgICAgewogICAgICAgICBt
X3Jvb3RMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwotICAgICAgICBtX3Jvb3RSZW5kZXJQ
YXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUobV9yb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7
CisgICAgICAgIG1fcm9vdFJlbmRlclBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShtX3Jvb3RM
YXllci0+cmVuZGVyU3VyZmFjZSgpLCBtX3Jvb3RMYXllci0+aWQoKSk7CiAgICAgfQogCiAgICAg
Ly8gQ0NSZW5kZXJlckNsaWVudCBtZXRob2RzLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151314</attachid>
            <date>2012-07-09 14:09:54 -0700</date>
            <delta_ts>2012-07-09 14:27:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90573-20120709170953.patch</filename>
            <type>text/plain</type>
            <size>98627</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMyNzI4OGRmNDY4MDI1
ODk2NDNlZGQ3OWIzMTQ1ZmUyYzQwYTZiMy4uM2Q4ZDk0YjVmYjgzZWFjYjFjYTU4ODM0NjllZjg5
MTYxZmEzMzA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA3LTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRGVj
b3VwbGUgUmVuZGVyUGFzcyBkcmF3aW5nIGZyb20gQ0NSZW5kZXJTdXJmYWNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZXMgdGhlIG1hbmFnZWQg
dGV4dHVyZXMgZnJvbSBDQ1JlbmRlclN1cmZhY2UgYW5kIHN0b3JlcyB0aGVtIGluIGEKKyAgICAg
ICAgSGFzaE1hcCBpbiBMYXllclJlbmRlcmVyQ2hyb21pdW0uCisKKyAgICAgICAgQXQgdGhlIHN0
YXJ0IG9mIGEgZnJhbWUsIGFsbCB0ZXh0dXJlcyBmb3IgdGhlIGZyYW1lIGFyZSByZXNlcnZlZCwg
YW5kCisgICAgICAgIHVubmVlZGVkIHRleHR1cmVzIGFyZSBkZWxldGVkLiBBZnRlciBlYWNoIHF1
YWQgaXMgZHJhd24sIGV2aWN0ZWQgdGV4dHVyZXMKKyAgICAgICAgKGllIHRlbXBvcmFyeSB0ZXh0
dXJlcyB1c2VkIGZvciBiYWNrZ3JvdW5kIGZpbHRlcnMpIGFyZSBkZWxldGVkIHRvIGtlZXAKKyAg
ICAgICAgd2l0aGluIG1lbW9yeSBsaW1pdHMuIEF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLCBhbGwg
c3VyZmFjZSBjb250ZW50cworICAgICAgICB0ZXh0dXJlcyBhcmUga2VwdCByZXNlcnZlZCBhbmQg
dGh1cyBub3QgZGVsZXRlZC4KKworICAgICAgICBXZSBhZGQgYSBudW1lcmljIGlkZW50aWZpZXIg
dG8gQ0NSZW5kZXJQYXNzIHdoaWNoIGNhbiBiZSB1c2VkIHRvCisgICAgICAgIGlkZW50aWZ5IHRo
ZSBwYXNzIGFjcm9zcyBzZXJpYWxpemF0aW9uIGluIHRoZSBmdXR1cmUsIGFuZCBpcyB1c2VkCisg
ICAgICAgIGluIHRoZSBpbnRlcmZhY2UgdG8gTGF5ZXJSZW5kZXJlckNocm9taXVtLiBBbHNvIHdl
IGFkZCB0byB0aGUKKyAgICAgICAgQ0NSZW5kZXJQYXNzIGEgY29udGVudHNDaGFuZ2VkU2luY2VM
YXN0RnJhbWUoKSBmbGFnIHNvIHRoYXQgdGhlCisgICAgICAgIHZhbHVlIGRvZXMgbm90IG5lZWQg
dG8gYmUgcmV0cmlldmVkIGZyb20gdGhlIENDUmVuZGVyU3VyZmFjZS4KKworICAgICAgICBUaGUg
cG9pbnRlciBmcm9tIENDUmVuZGVyUGFzcyB0byBDQ1JlbmRlclN1cmZhY2UgcmVtYWlucyBmb3Ig
c29tZQorICAgICAgICBjb2RlIGluIHRoZSBDQ0xheWVyVHJlZUhvc3RJbXBsLCBhbmQgd2lsbCBi
ZSBhZGRyZXNzZWQgaW4gdGhlIGZ1dHVyZSwgYnV0CisgICAgICAgIHRoZSBwb2ludGVyIGlzIG5v
IGxvbmdlciB1c2VkIGF0IGFsbCB3aGlsZSBkcmF3aW5nIGEgZnJhbWUgaW5zaWRlCisgICAgICAg
IExheWVyUmVuZGVyZXJDaHJvbWl1bS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzLCBubyBpbnRlbmRlZCBjaGFuZ2UgaW4gYmVoYXZpb3VyLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRlclBhc3NUZXh0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlY2lkZVJlbmRl
clBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVu
ZGVyUGFzc0lkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFj
a2dyb3VuZEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkcmF3UmVuZGVyUGFzc1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1c2VSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAo
TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3Nlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZW1vdmVQYXNzZXNXaXRoQ2FjaGVkVGV4dHVyZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdEltcGwpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclBhc3M6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6
OkNDUmVuZGVyUGFzcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmg6CisgICAgICAgIChDQ1JlbmRlclBhc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3M6OnNl
dEZyYW1lYnVmZmVyT3V0cHV0UmVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NS
ZW5kZXJQYXNzRHJhd1F1YWQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBh
c3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmg6CisgICAgICAgIChDQ1Jl
bmRlclBhc3NEcmF3UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVh
ZDo6cmVuZGVyUGFzc0lkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDUmVuZGVyUGFzc0RyYXdRdWFk
Ojpjb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDUmVuZGVyU3VyZmFjZTo6YXBwZW5kUXVhZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChDQ1JlbmRlclN1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyZXIuaDoKKyAgICAgICAgKENDUmVuZGVyZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6cHVzaFRpbGVQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6
CisgICAgICAgIChDQ1RpbGVkTGF5ZXJJbXBsKToKKwogMjAxMi0wNy0wOSAgSm9zaHVhIE5ldHRl
cmZpZWxkICA8am5ldHRlcmZpZWxkQHJpbS5jb20+CiAgICAgICAgIE1ha2UgR0MzRCBhbmQgRTNE
IG1vcmUgbWFpbnRhaW5hYmxlIGZvciBHTEVTIHBsYXRmb3JtcwogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA1NjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKaW5kZXggNTdiOWZhODAyMzY5NGYwZWMyZDA1MDFjZmRkNDRjN2Y5MGY4YTZkNC4uZmY5MmFm
YTNjMjljYzYzZTMwYzExZWI1NGRiNzVhNGZiNmQ4YjBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNy0wNSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtq
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIFJlbmRlclBhc3Mg
ZHJhd2luZyBmcm9tIENDUmVuZGVyU3VyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA1NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoK
KyAgICAgICAgKiB0ZXN0cy9MYXllclJlbmRlcmVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAg
KEZha2VDQ1JlbmRlcmVyQ2xpZW50OjpGYWtlQ0NSZW5kZXJlckNsaWVudCk6CisKIDIwMTItMDct
MDIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBIVE1M
Q29sbGVjdGlvbiBSZWZDb3VudGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAppbmRleCA4MzVkZmJkN2YxOTdjMDk0ZDc0OTM0ODkxNGNiYzY0YWY4ODE5N2JjLi41OWNlZDg2
OWJiYzcyMDhkMDNkNWVjY2ViMGUxMmE3MzYzYTg5MmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTI3NCw4ICsyNzQsMTAgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpCiB7Ci0gICAgaWYgKG1faW1wbFRl
eHR1cmVNYW5hZ2VyKQotICAgICAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZXZpY3RBbmREZWxl
dGVBbGxUZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKKyAgICBpZiAoIW1f
aW1wbFRleHR1cmVNYW5hZ2VyKQorICAgICAgICByZXR1cm47CisgICAgbV9yZW5kZXJQYXNzVGV4
dHVyZXMuY2xlYXIoKTsKKyAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRl
eHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogfQogCiB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkKQEAgLTMxNSwxMiArMzE3LDU0IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQ
YXNzKiByZW5kZXJQYXNzLCBjb25zCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNp
ZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JiBy
ZW5kZXJQYXNzZXNJbkRyYXdPcmRlcikKIHsKLSAgICAvLyBGSVhNRTogR2V0IHRoaXMgbWVtb3J5
IGxpbWl0IGZyb20gR1BVIE1lbW9yeSBNYW5hZ2VyCi0gICAgc2l6ZV90IGNvbnRlbnRzTWVtb3J5
VXNlQnl0ZXMgPSBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci0+Y3VycmVudE1lbW9yeVVzZUJ5
dGVzKCk7Ci0gICAgc2l6ZV90IG1heExpbWl0Qnl0ZXMgPSBUZXh0dXJlTWFuYWdlcjo6aGlnaExp
bWl0Qnl0ZXModmlld3BvcnRTaXplKCkpOwotICAgIHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzID0g
bWF4TGltaXRCeXRlcyAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgPiAwdSA/IG1heExpbWl0Qnl0
ZXMgLSBjb250ZW50c01lbW9yeVVzZUJ5dGVzIDogMHU7CisgICAgSGFzaE1hcDxpbnQsIGNvbnN0
IENDUmVuZGVyUGFzcyo+IHBhc3Nlc0luRnJhbWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsraSkKKyAgICAgICAgcGFzc2VzSW5G
cmFtZS5zZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIHJlbmRlclBhc3Nlc0lu
RHJhd09yZGVyW2ldLmdldCgpKTsKKworICAgIFZlY3RvcjxpbnQ+IHBhc3Nlc1RvRGVsZXRlOwor
ICAgIEhhc2hNYXA8aW50LCBPd25QdHI8TWFuYWdlZFRleHR1cmU+ID46OmNvbnN0X2l0ZXJhdG9y
IHBhc3NJdGVyYXRvcjsKKyAgICBmb3IgKHBhc3NJdGVyYXRvciA9IG1fcmVuZGVyUGFzc1RleHR1
cmVzLmJlZ2luKCk7IHBhc3NJdGVyYXRvciAhPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5lbmQoKTsg
KytwYXNzSXRlcmF0b3IpIHsKKyAgICAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQYXNz
SW5GcmFtZSA9IHBhc3Nlc0luRnJhbWUuZ2V0KHBhc3NJdGVyYXRvci0+Zmlyc3QpOworICAgICAg
ICBpZiAoIXJlbmRlclBhc3NJbkZyYW1lKSB7CisgICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5h
cHBlbmQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnN0IEludFNpemUmIHJlcXVpcmVkU2l6ZSA9IHJlbmRlclBhc3NJ
bkZyYW1lLT5mcmFtZWJ1ZmZlck91dHB1dFJlY3QoKS5zaXplKCk7CisgICAgICAgIEdDM0RlbnVt
IHJlcXVpcmVkRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgIE1hbmFn
ZWRUZXh0dXJlKiB0ZXh0dXJlID0gcGFzc0l0ZXJhdG9yLT5zZWNvbmQuZ2V0KCk7CisgICAgICAg
IGlmICghdGV4dHVyZSB8fCAhdGV4dHVyZS0+aXNWYWxpZChyZXF1aXJlZFNpemUsIHJlcXVpcmVk
Rm9ybWF0KSkgeworICAgICAgICAgICAgcGFzc2VzVG9EZWxldGUuYXBwZW5kKHBhc3NJdGVyYXRv
ci0+Zmlyc3QpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtZW1vcnlMaW1p
dEJ5dGVzKTsKKyAgICAvLyBEZWxldGUgUmVuZGVyUGFzcyB0ZXh0dXJlcyBmcm9tIHRoZSBwcmV2
aW91cyBmcmFtZSB0aGF0IHdpbGwgbm90IGJlIHVzZWQgYWdhaW4uCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwYXNzZXNUb0RlbGV0ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9yZW5kZXJQ
YXNzVGV4dHVyZXMucmVtb3ZlKHBhc3Nlc1RvRGVsZXRlW2ldKTsKKyAgICBtX2ltcGxUZXh0dXJl
TWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0
KCkpOworCisgICAgLy8gQWxsIFJlbmRlclBhc3MgdGV4dHVyZXMgc2hvdWxkIGJlIHJlc2VydmVk
IGZvciB0aGUgY3VycmVudCBmcmFtZS4gRXZlcnkgUmVuZGVyUGFzcyB0ZXh0dXJlCisgICAgLy8g
aXMga2VwdCByZXNlcnZlZCB1bnRpbCBpdCBpcyByZW1vdmVkIGFuZCBkZWxldGVkLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXIuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJl
cy5nZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCkpOworICAgICAgICBpZiAoIXRl
eHR1cmUpIHsKKyAgICAgICAgICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gb3duVGV4dHVyZSA9
IE1hbmFnZWRUZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCkpOworICAg
ICAgICAgICAgdGV4dHVyZSA9IG93blRleHR1cmUuZ2V0KCk7CisgICAgICAgICAgICBtX3JlbmRl
clBhc3NUZXh0dXJlcy5zZXQocmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmlkKCksIG93blRl
eHR1cmUucmVsZWFzZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEludFNpemUmIHJl
cXVpcmVkU2l6ZSA9IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyW2ldLT5mcmFtZWJ1ZmZlck91dHB1
dFJlY3QoKS5zaXplKCk7CisgICAgICAgIEdDM0RlbnVtIHJlcXVpcmVkRm9ybWF0ID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgIGJvb2wgcmVzZXJ2ZWQgPSB0ZXh0dXJlLT5yZXNl
cnZlKHJlcXVpcmVkU2l6ZSwgcmVxdWlyZWRGb3JtYXQpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHJlc2VydmVkLCByZXNlcnZlZCk7CisgICAgfQorfQorCitib29sIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChpbnQgaWQpIGNvbnN0Cit7
CisgICAgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUgPSBtX3JlbmRlclBhc3NUZXh0dXJlcy5nZXQo
aWQpOworICAgIHJldHVybiB0ZXh0dXJlICYmIHRleHR1cmUtPnRleHR1cmVJZCgpOwogfQogCiB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6YmVnaW5EcmF3aW5nRnJhbWUoY29uc3QgQ0NSZW5k
ZXJQYXNzKiByb290UmVuZGVyUGFzcykKQEAgLTQxOSw2ICs0NjMsOCBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVhZCogcXVhZCkKICAgICAgICAg
ZHJhd1lVVlZpZGVvUXVhZChxdWFkLT50b1lVVlZpZGVvRHJhd1F1YWQoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKworICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4
dHVyZXMobV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3Q2hlY2tlcmJvYXJkUXVhZChjb25zdCBDQ0NoZWNrZXJib2FyZERy
YXdRdWFkKiBxdWFkKQpAQCAtNDg4LDcgKzUzNCw3IEBAIHN0YXRpYyBpbmxpbmUgU2tCaXRtYXAg
YXBwbHlGaWx0ZXJzKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QK
ICAgICByZXR1cm4gQ0NSZW5kZXJTdXJmYWNlRmlsdGVyczo6YXBwbHkoZmlsdGVycywgc291cmNl
VGV4dHVyZS0+dGV4dHVyZUlkKCksIHNvdXJjZVRleHR1cmUtPnNpemUoKSwgZmlsdGVyQ29udGV4
dC5nZXQoKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3Vu
ZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQsIGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkKK1Bhc3NPd25QdHI8TWFu
YWdlZFRleHR1cmU+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJz
KGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkLCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgY29udGVudHNEZXZpY2VUcmFuc2Zvcm0pCiB7CiAgICAgLy8gVGhpcyBtZXRob2Qg
ZHJhd3MgYSBiYWNrZ3JvdW5kIGZpbHRlciwgd2hpY2ggYXBwbGllcyBhIGZpbHRlciB0byBhbnkg
cGl4ZWxzIGJlaGluZCB0aGUgcXVhZCBhbmQgc2VlbiB0aHJvdWdoIGl0cyBiYWNrZ3JvdW5kLgog
ICAgIC8vIFRoZSBhbGdvcml0aG0gd29ya3MgYXMgZm9sbG93czoKQEAgLTUwNiwxNCArNTUyLDEz
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29u
c3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1CiAKICAgICAvLyBGSVhNRTogV2hlbiB0aGlzIGFs
Z29yaXRobSBjaGFuZ2VzLCB1cGRhdGUgQ0NMYXllclRyZWVIb3N0Ojpwcmlvcml0aXplVGV4dHVy
ZXMoKSBhY2NvcmRpbmdseS4KIAotICAgIENDUmVuZGVyU3VyZmFjZSogZHJhd2luZ1N1cmZhY2Ug
PSBxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKTsKICAgICBpZiAocXVhZC0+YmFj
a2dyb3VuZEZpbHRlcnMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICAvLyBGSVhNRTogV2Ugb25seSBhbGxvdyBiYWNrZ3JvdW5kIGZp
bHRlcnMgb24gYW4gb3BhcXVlIHJlbmRlciBzdXJmYWNlIGJlY2F1c2Ugb3RoZXIgc3VyZmFjZXMg
bWF5IGNvbnRhaW4KICAgICAvLyB0cmFuc2x1Y2VudCBwaXhlbHMsIGFuZCB0aGUgY29udGVudHMg
YmVoaW5kIHRob3NlIHRyYW5zbHVjZW50IHBpeGVscyB3b3VsZG4ndCBoYXZlIHRoZSBmaWx0ZXIg
YXBwbGllZC4KICAgICBpZiAobV9jdXJyZW50UmVuZGVyUGFzcy0+aGFzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
QVNTRVJUKCFtX2N1cnJlbnRNYW5hZ2VkVGV4dHVyZSk7CiAKICAgICAvLyBGSVhNRTogRG8gYSBz
aW5nbGUgcmVhZGJhY2sgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5kIHJlcGxpY2EgYW5kIGNhY2hl
IHRoZSBmaWx0ZXJlZCByZXN1bHRzIChvbmNlIGZpbHRlciB0ZXh0dXJlcyBhcmUgbm90IHJldXNl
ZCkuCkBAIC01MjgsMjAgKzU3MywyMyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdQogCiAgICAg
T3duUHRyPE1hbmFnZWRUZXh0dXJlPiBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZSA9IE1hbmFnZWRU
ZXh0dXJlOjpjcmVhdGUobV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCkpOwogICAgIGlmICghZ2V0
RnJhbWVidWZmZXJUZXh0dXJlKGRldmljZUJhY2tncm91bmRUZXh0dXJlLmdldCgpLCBkZXZpY2VS
ZWN0KSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFNr
Qml0bWFwIGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZCA9IGFwcGx5RmlsdGVycyh0aGlzLCBxdWFk
LT5iYWNrZ3JvdW5kRmlsdGVycygpLCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSk7CiAg
ICAgaWYgKCFmaWx0ZXJlZERldmljZUJhY2tncm91bmQuZ2V0VGV4dHVyZSgpKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgR3JUZXh0dXJlKiB0ZXh0dXJl
ID0gcmVpbnRlcnByZXRfY2FzdDxHclRleHR1cmUqPihmaWx0ZXJlZERldmljZUJhY2tncm91bmQu
Z2V0VGV4dHVyZSgpKTsKICAgICBpbnQgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlk
ID0gdGV4dHVyZS0+Z2V0VGV4dHVyZUhhbmRsZSgpOwogCi0gICAgaWYgKCFkcmF3aW5nU3VyZmFj
ZS0+cHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKHRoaXMpKQotICAgICAgICByZXR1cm47CisgICAg
T3duUHRyPE1hbmFnZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4dHVyZSA9IE1hbmFnZWRUZXh0dXJl
OjpjcmVhdGUobV9pbXBsVGV4dHVyZU1hbmFnZXIuZ2V0KCkpOworICAgIGlmICghYmFja2dyb3Vu
ZFRleHR1cmUtPnJlc2VydmUocXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBjb25zdCBDQ1JlbmRl
clBhc3MqIHRhcmdldFJlbmRlclBhc3MgPSBtX2N1cnJlbnRSZW5kZXJQYXNzOwotICAgIGlmICh1
c2VNYW5hZ2VkVGV4dHVyZShkcmF3aW5nU3VyZmFjZS0+YmFja2dyb3VuZFRleHR1cmUoKSwgcXVh
ZC0+cXVhZFJlY3QoKSkpIHsKKyAgICBib29sIHVzaW5nQmFja2dyb3VuZFRleHR1cmUgPSB1c2VN
YW5hZ2VkVGV4dHVyZShiYWNrZ3JvdW5kVGV4dHVyZS5nZXQoKSwgcXVhZC0+cXVhZFJlY3QoKSk7
CisKKyAgICBpZiAodXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSkgewogICAgICAgICAvLyBDb3B5IHRo
ZSByZWFkYmFjayBwaXhlbHMgZnJvbSBkZXZpY2UgdG8gdGhlIGJhY2tncm91bmQgdGV4dHVyZSBm
b3IgdGhlIHN1cmZhY2UuCiAgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGRldmljZVRv
RnJhbWVidWZmZXJUcmFuc2Zvcm07CiAgICAgICAgIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zv
cm0udHJhbnNsYXRlKHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSAvIDIuMCwgcXVhZC0+cXVhZFJl
Y3QoKS5oZWlnaHQoKSAvIDIuMCk7CkBAIC01NTEsNDYgKzU5OSw0NSBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd0JhY2tncm91bmRGaWx0ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0Ry
YXdRdWFkKiBxdQogICAgICAgICBkZXZpY2VUb0ZyYW1lYnVmZmVyVHJhbnNmb3JtLnRyYW5zbGF0
ZShkZXZpY2VSZWN0LngoKSwgZGV2aWNlUmVjdC55KCkpOwogCiAgICAgICAgIGNvcHlUZXh0dXJl
VG9GcmFtZWJ1ZmZlcihmaWx0ZXJlZERldmljZUJhY2tncm91bmRUZXh0dXJlSWQsIGRldmljZVJl
Y3Quc2l6ZSgpLCBkZXZpY2VUb0ZyYW1lYnVmZmVyVHJhbnNmb3JtKTsKLQotICAgICAgICB1c2VS
ZW5kZXJQYXNzKHRhcmdldFJlbmRlclBhc3MpOwogICAgIH0KKworICAgIHVzZVJlbmRlclBhc3Mo
dGFyZ2V0UmVuZGVyUGFzcyk7CisKKyAgICBpZiAoIXVzaW5nQmFja2dyb3VuZFRleHR1cmUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBiYWNrZ3JvdW5kVGV4dHVyZS5yZWxl
YXNlKCk7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1
YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgLy8gVGhlIHJlcGxp
Y2EgaXMgYWx3YXlzIGRyYXduIGZpcnN0LCBzbyBmcmVlIGFmdGVyIGRyYXdpbmcgdGhlIGNvbnRl
bnRzLgotICAgIGJvb2wgc2hvdWxkUmVsZWFzZVRleHR1cmVzID0gIXF1YWQtPmlzUmVwbGljYSgp
OwotCi0gICAgQ0NSZW5kZXJTdXJmYWNlKiBkcmF3aW5nU3VyZmFjZSA9IHF1YWQtPnJlbmRlclBh
c3MoKS0+dGFyZ2V0U3VyZmFjZSgpOwotCiAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVu
ZGVyVHJhbnNmb3JtID0gcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKTsKICAgICAvLyBBcHBseSBhIHNj
YWxpbmcgZmFjdG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGludGVuZGVkIHNp
emUuCiAgICAgcmVuZGVyVHJhbnNmb3JtLnNjYWxlM2QocXVhZC0+cXVhZFJlY3QoKS53aWR0aCgp
LCBxdWFkLT5xdWFkUmVjdCgpLmhlaWdodCgpLCAxKTsKICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9ybSA9IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KHdp
bmRvd01hdHJpeCgpICogcHJvamVjdGlvbk1hdHJpeCgpICogcmVuZGVyVHJhbnNmb3JtKS50bzJk
VHJhbnNmb3JtKCk7CiAKICAgICAvLyBDYW4gb25seSBkcmF3IHN1cmZhY2UgaWYgZGV2aWNlIG1h
dHJpeCBpcyBpbnZlcnRpYmxlLgotICAgIGlmICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJ
bnZlcnRpYmxlKCkgfHwgIWRyYXdpbmdTdXJmYWNlLT5oYXNWYWxpZENvbnRlbnRzVGV4dHVyZSgp
KSB7Ci0gICAgICAgIGlmIChzaG91bGRSZWxlYXNlVGV4dHVyZXMpIHsKLSAgICAgICAgICAgIGRy
YXdpbmdTdXJmYWNlLT5yZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKTsKLSAgICAgICAgICAgIGRy
YXdpbmdTdXJmYWNlLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgICAgIH0KKyAgICBp
ZiAoIWNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgZHJhd0JhY2tncm91bmRGaWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2
aWNlVHJhbnNmb3JtKTsKKyAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlID0gbV9y
ZW5kZXJQYXNzVGV4dHVyZXMuZ2V0KHF1YWQtPnJlbmRlclBhc3NJZCgpKTsKKyAgICBBU1NFUlQo
Y29udGVudHNUZXh0dXJlICYmIGNvbnRlbnRzVGV4dHVyZS0+dGV4dHVyZUlkKCkpOworCisgICAg
T3duUHRyPE1hbmFnZWRUZXh0dXJlPiBiYWNrZ3JvdW5kVGV4dHVyZSA9IGRyYXdCYWNrZ3JvdW5k
RmlsdGVycyhxdWFkLCBjb250ZW50c0RldmljZVRyYW5zZm9ybSk7CiAKICAgICAvLyBGSVhNRTog
Q2FjaGUgdGhpcyB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gaXQgZm9yIGJvdGgg
dGhlIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLgogICAgIC8vIEFwcGx5IGZpbHRlcnMgdG8gdGhl
IGNvbnRlbnRzIHRleHR1cmUuCi0gICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0gYXBwbHlGaWx0
ZXJzKHRoaXMsIHF1YWQtPmZpbHRlcnMoKSwgZHJhd2luZ1N1cmZhY2UtPmNvbnRlbnRzVGV4dHVy
ZSgpKTsKLSAgICBpbnQgY29udGVudHNUZXh0dXJlSWQgPSBkcmF3aW5nU3VyZmFjZS0+Y29udGVu
dHNUZXh0dXJlKCktPnRleHR1cmVJZCgpOworICAgIFNrQml0bWFwIGZpbHRlckJpdG1hcCA9IGFw
cGx5RmlsdGVycyh0aGlzLCBxdWFkLT5maWx0ZXJzKCksIGNvbnRlbnRzVGV4dHVyZSk7CisgICAg
aW50IGNvbnRlbnRzVGV4dHVyZUlkID0gY29udGVudHNUZXh0dXJlLT50ZXh0dXJlSWQoKTsKICAg
ICBpZiAoZmlsdGVyQml0bWFwLmdldFRleHR1cmUoKSkgewogICAgICAgICBHclRleHR1cmUqIHRl
eHR1cmUgPSByZWludGVycHJldF9jYXN0PEdyVGV4dHVyZSo+KGZpbHRlckJpdG1hcC5nZXRUZXh0
dXJlKCkpOwogICAgICAgICBjb250ZW50c1RleHR1cmVJZCA9IHRleHR1cmUtPmdldFRleHR1cmVI
YW5kbGUoKTsKICAgICB9CiAKICAgICAvLyBEcmF3IHRoZSBiYWNrZ3JvdW5kIHRleHR1cmUgaWYg
dGhlcmUgaXMgb25lLgotICAgIGlmIChkcmF3aW5nU3VyZmFjZS0+aGFzVmFsaWRCYWNrZ3JvdW5k
VGV4dHVyZSgpKQotICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoZHJhd2luZ1N1cmZh
Y2UtPmJhY2tncm91bmRUZXh0dXJlKCktPnRleHR1cmVJZCgpLCBxdWFkLT5xdWFkUmVjdCgpLnNp
emUoKSwgcXVhZC0+bGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAgaWYgKGJhY2tncm91bmRUZXh0dXJl
KSB7CisgICAgICAgIEFTU0VSVChiYWNrZ3JvdW5kVGV4dHVyZS0+c2l6ZSgpID09IHF1YWQtPnF1
YWRSZWN0KCkuc2l6ZSgpKTsKKyAgICAgICAgY29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKGJhY2tn
cm91bmRUZXh0dXJlLT50ZXh0dXJlSWQoKSwgcXVhZC0+cXVhZFJlY3QoKS5zaXplKCksIHF1YWQt
PmxheWVyVHJhbnNmb3JtKCkpOworICAgIH0KIAogICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOwog
ICAgIEZsb2F0UXVhZCBkZXZpY2VRdWFkID0gQ0NNYXRoVXRpbDo6bWFwUXVhZChjb250ZW50c0Rl
dmljZVRyYW5zZm9ybSwgc2hhcmVkR2VvbWV0cnlRdWFkKCksIGNsaXBwZWQpOwpAQCAtNjczLDEx
ICs3MjAsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1JlbmRlclBhc3NRdWFk
KGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkKQogCiAgICAgZHJhd1RleHR1cmVkUXVh
ZChxdWFkLT5sYXllclRyYW5zZm9ybSgpLCBxdWFkLT5xdWFkUmVjdCgpLndpZHRoKCksIHF1YWQt
PnF1YWRSZWN0KCkuaGVpZ2h0KCksIHF1YWQtPm9wYWNpdHkoKSwgc3VyZmFjZVF1YWQsCiAgICAg
ICAgICAgICAgICAgICAgICBzaGFkZXJNYXRyaXhMb2NhdGlvbiwgc2hhZGVyQWxwaGFMb2NhdGlv
biwgc2hhZGVyUXVhZExvY2F0aW9uKTsKLQotICAgIGlmIChzaG91bGRSZWxlYXNlVGV4dHVyZXMp
IHsKLSAgICAgICAgZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpOwot
ICAgICAgICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUNvbnRlbnRzVGV4dHVyZSgpOwotICAgIH0K
IH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTb2xpZENvbG9yUXVhZChjb25z
dCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCogcXVhZCkKQEAgLTEwNzksOSArMTEyMSw2IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUoKQogewogICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCkpOwotCi0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFs
bFRleHR1cmVzKCk7Ci0gICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0
dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG0pCkBAIC0xMzM5LDEwICsxMzc4LDEwIEBAIGJvb2wgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1c2VSZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFz
cykKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKCFyZW5kZXJQYXNzLT50
YXJnZXRTdXJmYWNlKCktPnByZXBhcmVDb250ZW50c1RleHR1cmUodGhpcykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1Rl
eHR1cmVzLmdldChyZW5kZXJQYXNzLT5pZCgpKTsKKyAgICBBU1NFUlQodGV4dHVyZSk7CiAKLSAg
ICByZXR1cm4gYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKHJlbmRlclBhc3MtPnRhcmdldFN1cmZh
Y2UoKS0+Y29udGVudHNUZXh0dXJlKCksIHJlbmRlclBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVj
dCgpKTsKKyAgICByZXR1cm4gYmluZEZyYW1lYnVmZmVyVG9UZXh0dXJlKHRleHR1cmUsIHJlbmRl
clBhc3MtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpKTsKIH0KIAogYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnVzZU1hbmFnZWRUZXh0dXJlKE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25z
dCBJbnRSZWN0JiB2aWV3cG9ydFJlY3QpCkBAIC0xNDMxLDkgKzE0NzAsNyBAQCBib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKQogCiAgICAgR0xDKG1f
Y29udGV4dCwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAotICAgIG1faW1wbFRleHR1cmVNYW5hZ2Vy
ID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMo
dmlld3BvcnRTaXplKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXModmlld3BvcnRTaXpl
KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9pbXBsVGV4dHVyZU1hbmFnZXIg
PSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCksIG1fY2FwYWJpbGl0aWVzLm1h
eFRleHR1cmVTaXplKTsKICAgICBtX3RleHR1cmVDb3BpZXIgPSBBY2NlbGVyYXRlZFRleHR1cmVD
b3BpZXI6OmNyZWF0ZShtX2NvbnRleHQsIG1faXNVc2luZ0JpbmRVbmlmb3JtKTsKICAgICBpZiAo
bV90ZXh0dXJlVXBsb2FkZXJTZXR0aW5nID09IFRocm90dGxlZFVwbG9hZGVyKQogICAgICAgICBt
X3RleHR1cmVVcGxvYWRlciA9IFRocm90dGxlZFRleHR1cmVVcGxvYWRlcjo6Y3JlYXRlKG1fY29u
dGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDYyNWU4MmYwODhl
MDcyMTUyZWVkYmNjNjQ4Y2JjODUyOWVmYzVhMTguLmY0NjRlYWUxYjU4MDQ2N2U0YWU5MjI1NTc4
OWQ3MzI2YWI3OGUxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC04
MCw2ICs4MCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBGbG9hdFF1YWQmIHNoYXJlZEdlb21ldHJ5
UXVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkR2VvbWV0cnlRdWFkOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgZGVjaWRlUmVuZGVyUGFzc0FsbG9jYXRpb25zRm9yRnJhbWUoY29uc3QgQ0NSZW5k
ZXJQYXNzTGlzdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBoYXZlQ2FjaGVkUmVzb3Vy
Y2VzRm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3QgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5EcmF3aW5nRnJhbWUoY29uc3QgQ0NSZW5kZXJQYXNzKiBkZWZhdWx0UmVuZGVy
UGFzcykgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdSZW5kZXJQYXNzKGNvbnN0IEND
UmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgZnJhbWVidWZmZXJEYW1hZ2VSZWN0KSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoRHJhd2luZ0ZyYW1lKCkgT1ZFUlJJREU7CkBA
IC0xMjMsMTMgKzEyNSwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBpc0ZyYW1lYnVmZmVyRGlz
Y2FyZGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0ZyYW1lYnVmZmVyRGlzY2FyZGVkOyB9CiAgICAg
Ym9vbCBpbml0aWFsaXplKCk7CiAKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMo
KTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiwgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogCiAgICAgdm9pZCBkcmF3UXVhZChj
b25zdCBDQ0RyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3Q2hlY2tlcmJvYXJkUXVhZChjb25zdCBD
Q0NoZWNrZXJib2FyZERyYXdRdWFkKik7CiAgICAgdm9pZCBkcmF3RGVidWdCb3JkZXJRdWFkKGNv
bnN0IENDRGVidWdCb3JkZXJEcmF3UXVhZCopOwotICAgIHZvaWQgZHJhd0JhY2tncm91bmRGaWx0
ZXJzKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFkKiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKTsKKyAgICBQYXNzT3duUHRyPE1hbmFnZWRU
ZXh0dXJlPiBkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQq
LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0p
OwogICAgIHZvaWQgZHJhd1JlbmRlclBhc3NRdWFkKGNvbnN0IENDUmVuZGVyUGFzc0RyYXdRdWFk
Kik7CiAgICAgdm9pZCBkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1
YWQqKTsKICAgICB2b2lkIGRyYXdTdHJlYW1WaWRlb1F1YWQoY29uc3QgQ0NTdHJlYW1WaWRlb0Ry
YXdRdWFkKik7CkBAIC0xNDksOCArMTUzLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY2xlYXJS
ZW5kZXJQYXNzKGNvbnN0IENDUmVuZGVyUGFzcyosIGNvbnN0IEZsb2F0UmVjdCYgZnJhbWVidWZm
ZXJEYW1hZ2VSZWN0KTsKIAotICAgIHZvaWQgcmVsZWFzZVJlbmRlclBhc3NUZXh0dXJlcygpOwot
CiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZVNo
YXJlZE9iamVjdHMoKTsKQEAgLTI2Myw2ICsyNjUsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxU
cmFja2luZ1RleHR1cmVBbGxvY2F0b3I+IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yOwogICAg
IE93blB0cjxUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I+IG1faW1wbFRleHR1cmVBbGxvY2F0b3I7
CiAKKyAgICBIYXNoTWFwPGludCwgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiA+IG1fcmVuZGVyUGFz
c1RleHR1cmVzOworCiAgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0
OwogCiAgICAgY29uc3QgQ0NSZW5kZXJQYXNzKiBtX2RlZmF1bHRSZW5kZXJQYXNzOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCmluZGV4IDgzNjY2YjA0NjRmNjc2NGY2ODhjYTZmZDVjMmJmYmYyNzcx
YWY0NjguLjQ0NzcyMTU2ZGM5ZWI2MmYxNmY4M2FlNDZmOWUzMjY4OTk2ZDg2NjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgQ0NMYXllckltcGw6OkNDTGF5ZXJJ
bXBsKGludCBpZCkKICAgICAsIG1fbGF5ZXJBbmltYXRpb25Db250cm9sbGVyKENDTGF5ZXJBbmlt
YXRpb25Db250cm9sbGVyOjpjcmVhdGUodGhpcykpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpKTsKLSAgICBBU1NFUlQobV9sYXllcklkID49IDApOworICAgIEFTU0VSVCht
X2xheWVySWQgPiAwKTsKIH0KIAogQ0NMYXllckltcGw6On5DQ0xheWVySW1wbCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDE5NTc0Mzc2NTU4NjBiYzk5NTFm
NGExMGVjNGVlZWRiMjEwNzAzOTAuLjAyOGIyMTVhZmY2NTFjODBhZjA2OGIxMzMxZTcwYjg5M2Fj
MGE2ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0yOTUs
NyArMjk1LDEwIEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyUGFz
c2VzKEZyYW1lRGF0YSYgZnJhbWUpCiAgICAgICAgIENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNl
TGF5ZXIgPSAoKmZyYW1lLnJlbmRlclN1cmZhY2VMYXllckxpc3QpW3N1cmZhY2VJbmRleF07CiAg
ICAgICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3VyZmFjZSA9IHJlbmRlclN1cmZhY2VMYXll
ci0+cmVuZGVyU3VyZmFjZSgpOwogCi0gICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3Mg
PSBDQ1JlbmRlclBhc3M6OmNyZWF0ZShyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgLy8gRklYTUU6
IE1ha2UgdGhpcyB1bmlxdWUgYWNyb3NzIGFsbCBDQ0xheWVyVHJlZUhvc3RJbXBscy4KKyAgICAg
ICAgaW50IGdsb2JhbFJlbmRlclBhc3NJZCA9IHJlbmRlclN1cmZhY2VMYXllci0+aWQoKTsKKwor
ICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiBwYXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUo
cmVuZGVyU3VyZmFjZSwgZ2xvYmFsUmVuZGVyUGFzc0lkKTsKICAgICAgICAgc3VyZmFjZVBhc3NN
YXAuYWRkKHJlbmRlclN1cmZhY2UsIHBhc3MuZ2V0KCkpOwogICAgICAgICBmcmFtZS5yZW5kZXJQ
YXNzZXMuYXBwZW5kKHBhc3MucmVsZWFzZSgpKTsKICAgICB9CkBAIC0zNTEsNyArMzU0LDcgQEAg
Ym9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMoRnJhbWVEYXRh
JiBmcmFtZSkKICAgICAgICAgb2NjbHVzaW9uVHJhY2tlci5vdmVyZHJhd01ldHJpY3MoKS5yZWNv
cmRNZXRyaWNzKHRoaXMpOwogCiAgICAgbV9sYXllclJlbmRlcmVyLT5kZWNpZGVSZW5kZXJQYXNz
QWxsb2NhdGlvbnNGb3JGcmFtZShmcmFtZS5yZW5kZXJQYXNzZXMpOwotICAgIHJlbW92ZVBhc3Nl
c1dpdGhDYWNoZWRUZXh0dXJlcyhmcmFtZS5yZW5kZXJQYXNzZXMsIGZyYW1lLnNraXBwZWRQYXNz
ZXMpOworICAgIHJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhmcmFtZS5yZW5kZXJQYXNz
ZXMsIGZyYW1lLnNraXBwZWRQYXNzZXMsIG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAKICAgICBy
ZXR1cm4gZHJhd0ZyYW1lOwogfQpAQCAtNDMxLDcgKzQzNCw3IEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6cmVtb3ZlUmVuZGVyUGFzc2VzUmVjdXJzaXZlKENDUmVuZGVyUGFzc0xpc3QmIHBh
c3NlcywKICAgICBza2lwcGVkUGFzc2VzLmFwcGVuZChyZW1vdmVkUGFzcy5yZWxlYXNlKCkpOwog
fQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0
dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDUmVuZGVyUGFzc0xpc3QmIHNraXBwZWRQ
YXNzZXMpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRU
ZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMsIENDUmVuZGVyUGFzc0xpc3QmIHNraXBw
ZWRQYXNzZXMsIGNvbnN0IENDUmVuZGVyZXIqIHJlbmRlcmVyKQogewogICAgIGZvciAoaW50IHBh
c3NJbmRleCA9IHBhc3Nlcy5zaXplKCkgLSAxOyBwYXNzSW5kZXggPj0gMDsgLS1wYXNzSW5kZXgp
IHsKICAgICAgICAgQ0NSZW5kZXJQYXNzKiBjdXJyZW50UGFzcyA9IHBhc3Nlc1twYXNzSW5kZXhd
LmdldCgpOwpAQCAtNDQ1LDE0ICs0NDgsOSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJl
bW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBDQ1JlbmRlclBhc3NEcmF3UXVh
ZCogcmVuZGVyUGFzc1F1YWQgPSBzdGF0aWNfY2FzdDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGN1
cnJlbnRRdWFkKTsKLSAgICAgICAgICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSA9
IHJlbmRlclBhc3NRdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1cmZhY2UoKTsKLQotICAgICAg
ICAgICAgaWYgKHRhcmdldFN1cmZhY2UtPmNvbnRlbnRzQ2hhbmdlZCgpIHx8ICF0YXJnZXRTdXJm
YWNlLT5oYXNDYWNoZWRDb250ZW50c1RleHR1cmUoKSkKKyAgICAgICAgICAgIGlmICghcmVuZGVy
UGFzc1F1YWQtPmNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKCkuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBSZXNlcnZlIHRoZSB0ZXh0
dXJlIGltbWVkaWF0ZWx5LiBXZSBkbyBub3QgbmVlZCB0byBwYXNzIGluIGxheWVyIHJlbmRlcmVy
Ci0gICAgICAgICAgICAvLyBzaW5jZSB0aGUgdGV4dHVyZSBhbHJlYWR5IGV4aXN0cywganVzdCBu
ZWVkcyB0byBiZSByZXNlcnZlZC4KLSAgICAgICAgICAgIGlmICghdGFyZ2V0U3VyZmFjZS0+cHJl
cGFyZUNvbnRlbnRzVGV4dHVyZSgwKSkKKyAgICAgICAgICAgIGlmICghcmVuZGVyZXItPmhhdmVD
YWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQocmVuZGVyUGFzc1F1YWQtPnJlbmRlclBhc3NJ
ZCgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgLy8gV2UgYXJl
IGNoYW5naW5nIHRoZSB2ZWN0b3IgaW4gdGhlIG1pZGRsZSBvZiByZXZlcnNlIGl0ZXJhdGlvbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCA5ZDhmYjNjNDU3NWFlY2Fj
N2FhZjhjZDAwZDhmYTk2ZDdmMWFiMDkyLi45NjdkZjgxYTRkMWU4YzEyYmQ4ZmI4MTA5MjI1YzIx
MDBmZDhlZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0xNzgs
NyArMTc4LDcgQEAgcHVibGljOgogICAgIENDRGVidWdSZWN0SGlzdG9yeSogZGVidWdSZWN0SGlz
dG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdSZWN0SGlzdG9yeS5nZXQoKTsgfQogCiAgICAg
Ly8gUmVtb3ZlcyBhbGwgcmVuZGVyIHBhc3NlcyBmb3Igd2hpY2ggd2UgaGF2ZSBjYWNoZWQgdGV4
dHVyZXMsIGFuZCB3aGljaCBkaWQgbm90IGNoYW5nZSB0aGVpciBjb250ZW50LgotICAgIHN0YXRp
YyB2b2lkIHJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBw
YXNzZXMsIENDUmVuZGVyUGFzc0xpc3QmIHNraXBwZWRQYXNzZXMpOworICAgIHN0YXRpYyB2b2lk
IHJlbW92ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyhDQ1JlbmRlclBhc3NMaXN0JiBwYXNzZXMs
IENDUmVuZGVyUGFzc0xpc3QmIHNraXBwZWRQYXNzZXMsIGNvbnN0IENDUmVuZGVyZXIqKTsKIAog
cHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NMYXllclRyZWVTZXR0
aW5ncyYsIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwCmluZGV4IDI4YWNkZDdjOWI0N2JkZmI3ZjJiODVmNWU5MTk4YjhmZTg3ZTdlMzMuLjMxMWRm
MDE5NWRlNjkxYTM0N2U4MGUxNDhmYTlkODFiYjI0ZWM0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQ
YXNzLmNwcApAQCAtMzcsMTcgKzM3LDE5IEBAIHVzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ1JlbmRlclBh
c3M+IENDUmVuZGVyUGFzczo6Y3JlYXRlKENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSkK
K1Bhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBDQ1JlbmRlclBhc3M6OmNyZWF0ZShDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UsIGludCBpZCkKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDUmVuZGVyUGFzcyh0YXJnZXRTdXJmYWNlKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q1JlbmRlclBhc3ModGFyZ2V0U3VyZmFjZSwgaWQpKTsKIH0KIAotQ0NSZW5kZXJQYXNzOjpDQ1Jl
bmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlKQotICAgIDogbV90YXJnZXRT
dXJmYWNlKHRhcmdldFN1cmZhY2UpCitDQ1JlbmRlclBhc3M6OkNDUmVuZGVyUGFzcyhDQ1JlbmRl
clN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIGludCBpZCkKKyAgICA6IG1faWQoaWQpCisgICAgLCBt
X3RhcmdldFN1cmZhY2UodGFyZ2V0U3VyZmFjZSkKICAgICAsIG1fZnJhbWVidWZmZXJPdXRwdXRS
ZWN0KHRhcmdldFN1cmZhY2UtPmNvbnRlbnRSZWN0KCkpCiAgICAgLCBtX2hhc1RyYW5zcGFyZW50
QmFja2dyb3VuZCh0cnVlKQogewotICAgIEFTU0VSVChtX3RhcmdldFN1cmZhY2UpOworICAgIEFT
U0VSVCh0YXJnZXRTdXJmYWNlKTsKKyAgICBBU1NFUlQoaWQpOwogfQogCiB2b2lkIENDUmVuZGVy
UGFzczo6YXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDT2NjbHVzaW9u
VHJhY2tlckltcGwqIG9jY2x1c2lvblRyYWNrZXIsIGJvb2wmIGhhZE1pc3NpbmdUaWxlcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggZGVlNTViZjdmNmNmZWYxOTI0YmNhYjUzY2RlZWVlMTlk
NjllMjhhYy4uNDdhZTJmNzQ3ZThkZDA3YTU0ZWIwYjJjOGU0NjJhZWIwYTU3OGFlZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTUzLDE0ICs1MywxNyBAQCBwdWJsaWM6CiBjbGFzcyBDQ1Jl
bmRlclBhc3MgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyUGFzcyk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NSZW5kZXJT
dXJmYWNlKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NS
ZW5kZXJTdXJmYWNlKiwgaW50IGlkKTsKIAogICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JMYXllcihD
Q0xheWVySW1wbCosIENDT2NjbHVzaW9uVHJhY2tlckltcGwqLCBib29sJiBoYWRNaXNzaW5nVGls
ZXMpOwogICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NMYXllcklt
cGwqLCBjb25zdCBDQ1JlbmRlclBhc3MqIGNvbnRyaWJ1dGluZ1JlbmRlclBhc3MsIENDT2NjbHVz
aW9uVHJhY2tlckltcGwqKTsKICAgICB2b2lkIGFwcGVuZFF1YWRzVG9GaWxsU2NyZWVuKENDTGF5
ZXJJbXBsKiByb290TGF5ZXIsIFNrQ29sb3Igc2NyZWVuQmFja2dyb3VuZENvbG9yLCBjb25zdCBD
Q09jY2x1c2lvblRyYWNrZXJJbXBsJik7CiAKICAgICBjb25zdCBDQ1F1YWRMaXN0JiBxdWFkTGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZExpc3Q7IH0KKworICAgIGludCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UoKSBjb25z
dCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2U7IH0KKwogICAgIC8vIFRoaXMgZGVub3RlcyB0aGUg
Ym91bmRzIGluIHBoeXNpY2FsIHBpeGVscyBvZiB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGlz
IFJlbmRlclBhc3MuCiAgICAgY29uc3QgSW50UmVjdCYgZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZWJ1ZmZlck91dHB1dFJlY3Q7IH0KIApAQCAtNjgsOCArNzEs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCB0
cmFuc3BhcmVudCkgeyBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRyYW5zcGFyZW50OyB9
CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBDQ1JlbmRlclBhc3MoQ0NSZW5kZXJTdXJmYWNl
Kik7CisgICAgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSosIGludCBpZCk7CiAKKyAgICBp
bnQgbV9pZDsKICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fdGFyZ2V0U3VyZmFjZTsKICAgICBDQ1F1
YWRMaXN0IG1fcXVhZExpc3Q7CiAgICAgSW50UmVjdCBtX2ZyYW1lYnVmZmVyT3V0cHV0UmVjdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcAppbmRleCA4ZGM0ZmY2NmEx
YzcxNzNiZTczNzRhNjI1ZGI5OWNmNDA3YjFkNmUzLi43NWJkNzYxZDE1NTM1ODY5MWMyYjA0Y2Qx
ZTc2YmM3YTkzODM4MjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJhd1F1YWQu
Y3BwCkBAIC0yNywyMCArMjcsMjQgQEAKIAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFzc0RyYXdR
dWFkLmgiCiAKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBDQ1JlbmRlclBhc3NEcmF3
UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNv
bnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGJv
b2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMs
IGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVu
c2lnbmVkIG1hc2tUZXh0dXJlSWQpCitQYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBD
Q1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFy
ZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDQ1JlbmRlclBhc3Mq
IHJlbmRlclBhc3MsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJh
dGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dy
b3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRl
bnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgcmVuZGVyUGFzcywg
aXNSZXBsaWNhLCBmaWx0ZXJzLCBiYWNrZ3JvdW5kRmlsdGVycywgbWFza1RleHR1cmVJZCkpOwor
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoc2hhcmVkUXVhZFN0
YXRlLCBxdWFkUmVjdCwgcmVuZGVyUGFzcywgaXNSZXBsaWNhLCBmaWx0ZXJzLCBiYWNrZ3JvdW5k
RmlsdGVycywgbWFza1RleHR1cmVJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpKTsK
IH0KIAotQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OkNDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IEND
U2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0
LCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBX
ZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQp
CitDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3QgQ0NTaGFy
ZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJlY3QsIGNv
bnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgYm9vbCBpc1JlcGxpY2EsIGNvbnN0IFdlYktp
dDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJP
cGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJZCwgY29u
c3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCiAgICAgOiBDQ0RyYXdR
dWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgcXVhZFJlY3QpCiAg
ICAgLCBtX3JlbmRlclBhc3MocmVuZGVyUGFzcykKKyAgICAsIG1fcmVuZGVyUGFzc0lkKHJlbmRl
clBhc3MtPmlkKCkpCiAgICAgLCBtX2lzUmVwbGljYShpc1JlcGxpY2EpCiAgICAgLCBtX2ZpbHRl
cnMoZmlsdGVycykKICAgICAsIG1fYmFja2dyb3VuZEZpbHRlcnMoYmFja2dyb3VuZEZpbHRlcnMp
CiAgICAgLCBtX21hc2tUZXh0dXJlSWQobWFza1RleHR1cmVJZCkKKyAgICAsIG1fY29udGVudHND
aGFuZ2VkU2luY2VMYXN0RnJhbWUoY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCiB7CiAg
ICAgQVNTRVJUKG1fcmVuZGVyUGFzcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJh
d1F1YWQuaAppbmRleCAzY2M2ZjI2MDcxYTMzYzAyMzA2YWVhZDllMDhiMDg3MzMzNGUzMWU4Li5i
NjNhNzY0NDY4Mzk2OTgyMGE1YmQzMDFkMTA2NmEyNmM0ZTQ3NjI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3
UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgKQEAgLTM3LDIzICszNywyNyBAQCBjbGFzcyBDQ1JlbmRl
clBhc3M7CiBjbGFzcyBDQ1JlbmRlclBhc3NEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdRdWFkIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1JlbmRlclBhc3NEcmF3UXVhZCk7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IGNyZWF0ZShjb25z
dCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDQ1JlbmRlclBhc3Mq
LCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zJiBmaWx0
ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRGaWx0ZXJz
LCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRl
clBhc3NEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyosIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6
OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3Bl
cmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0
IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKIAogICAgIGNvbnN0IEND
UmVuZGVyUGFzcyogcmVuZGVyUGFzcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUGFzczsgfQor
ICAgIGludCByZW5kZXJQYXNzSWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclBhc3NJZDsgfQog
ICAgIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGxpY2E7IH0KICAgICB1
bnNpZ25lZCBtYXNrVGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVyZUlkOyB9
CisgICAgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lOyB9CiAKICAgICBjb25z
dCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBt
X2ZpbHRlcnM7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tn
cm91bmRGaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRmlsdGVyczsgfQogCiBw
cml2YXRlOgotICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyosIGJvb2wgaXNSZXBsaWNhLCBj
b25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6
V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0
dXJlSWQpOworICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyosIGJvb2wgaXNSZXBsaWNhLCBj
b25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6
V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0
dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKIAog
ICAgIGNvbnN0IENDUmVuZGVyUGFzcyogbV9yZW5kZXJQYXNzOworICAgIGludCBtX3JlbmRlclBh
c3NJZDsKICAgICBib29sIG1faXNSZXBsaWNhOwogICAgIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucyBtX2ZpbHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1fYmFja2dy
b3VuZEZpbHRlcnM7CiAgICAgdW5zaWduZWQgbV9tYXNrVGV4dHVyZUlkOworICAgIEludFJlY3Qg
bV9jb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Jl
bmRlclN1cmZhY2UuY3BwCmluZGV4IGQwOTQwMWM0ZjIzZTA5ZTUxMmU2MjQ5OTg0YmU0Y2RlOGE5
NGEyYTEuLmQzYTg1ZDJkYTg0MTE5YTZmMmM3M2FkM2YxZDMwMjNlZDY3NDE4MjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIK
LSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNp
bmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVnQm9yZGVy
RHJhd1F1YWQuaCIKQEAgLTg1LDc1ICs4NCw2IEBAIEZsb2F0UmVjdCBDQ1JlbmRlclN1cmZhY2U6
OmRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAogICAgIHJldHVybiBkcmF3YWJsZUNvbnRlbnRS
ZWN0OwogfQogCi1ib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4dHVyZShM
YXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi17Ci0gICAgLy8gRklYTUU6IFRo
aXMgbWV0aG9kIHNob3VsZCBiZSBzZXBhcmF0ZWQgaW50byB0d286IG9uZSB0byByZXNlcnZlIGFu
Ci0gICAgLy8gZXhpc3Rpbmcgc3VyZmFjZSwgYW5kIG9uZSB0byBjcmVhdGUgYSBuZXcgb25lLiBU
aGF0IHdheSB3ZSB3aWxsIG5vdAotICAgIC8vIG5lZWQgdG8gcGFzcyBudWxsIGxheWVyUmVuZGVy
ZXIuCi0gICAgaWYgKGxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgVGV4dHVyZU1hbmFnZXIqIHRl
eHR1cmVNYW5hZ2VyID0gbGF5ZXJSZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2VyKCk7Ci0KLSAg
ICAgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgICAgIG1fY29udGVudHNUZXh0
dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcik7Ci0gICAgfQotCi0g
ICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNp
emUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VDb250
ZW50c1RleHR1cmUoKQotewotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1fY29udGVu
dHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRlbnRz
VGV4dHVyZS0+dW5yZXNlcnZlKCk7Ci19Ci0KLWJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpoYXNWYWxp
ZENvbnRlbnRzVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJl
ICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9jb250ZW50c1RleHR1cmUt
PmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKTsK
LX0KLQotYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhhc0NhY2hlZENvbnRlbnRzVGV4dHVyZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJl
LT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSk7
Ci19Ci0KLWJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQmFja2dyb3VuZFRleHR1cmUoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIFRleHR1cmVNYW5hZ2Vy
KiB0ZXh0dXJlTWFuYWdlciA9IGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlTWFuYWdlcigpOwot
Ci0gICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlKQotICAgICAgICBtX2JhY2tncm91bmRUZXh0
dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcik7Ci0KLSAgICBpZiAo
bV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZS0+cmVzZXJ2ZShtX2NvbnRlbnRSZWN0LnNp
emUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVhc2VCYWNr
Z3JvdW5kVGV4dHVyZSgpCi17Ci0gICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlIHx8ICFtX2Jh
Y2tncm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Jh
Y2tncm91bmRUZXh0dXJlLT51bnJlc2VydmUoKTsKLX0KLQotYm9vbCBDQ1JlbmRlclN1cmZhY2U6
Omhhc1ZhbGlkQmFja2dyb3VuZFRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tn
cm91bmRUZXh0dXJlICYmIG1fYmFja2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSAmJiBtX2Jh
Y2tncm91bmRUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSk7Ci19Ci0KIFN0cmluZyBDQ1JlbmRlclN1cmZhY2U6Om5hbWUoKSBjb25z
dAogewogICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiUmVuZGVyU3VyZmFjZShpZD0laSxvd25l
cj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293bmluZ0xheWVyLT5kZWJ1Z05hbWUoKS51
dGY4KCkuZGF0YSgpKTsKQEAgLTMwMiw4ICsyMzIsOSBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6
YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3RhdGUqIHNo
YQogICAgIH0KIAogICAgIGludCBtYXNrVGV4dHVyZUlkID0gbWFza0xheWVyID8gbWFza0xheWVy
LT5jb250ZW50c1RleHR1cmVJZCgpIDogMDsKKyAgICBJbnRSZWN0IGNvbnRlbnRzQ2hhbmdlZFNp
bmNlTGFzdEZyYW1lID0gY29udGVudHNDaGFuZ2VkKCkgPyBtX2NvbnRlbnRSZWN0IDogSW50UmVj
dCgpOwogCi0gICAgcXVhZExpc3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclBhc3NEcmF3UXVhZDo6
Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgcmVuZGVyUGFzcywgZm9yUmVw
bGljYSwgZmlsdGVycygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkKSk7Cisg
ICAgcXVhZExpc3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHNo
YXJlZFF1YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgcmVuZGVyUGFzcywgZm9yUmVwbGljYSwgZmls
dGVycygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkLCBjb250ZW50c0NoYW5n
ZWRTaW5jZUxhc3RGcmFtZSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCmlu
ZGV4IDAyOWUxZjYwNDQxNGNjZmViMTMwNThlZjRhYWM4MTM3OWY5NTA4ZjQuLjg5NGVhNWFlYTJl
ZmFlZTZiY2YwMTViMzgwZTAzMTIyMzM0YTlkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5oCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlIDxwdWJs
aWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNDUsNyArNDQs
NiBAQCBjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBDQ1NoYXJlZFF1YWRTdGF0ZTsKIGNsYXNz
IENDTGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwotY2xhc3MgTWFuYWdl
ZFRleHR1cmU7CiBjbGFzcyBUZXh0U3RyZWFtOwogCiBjbGFzcyBDQ1JlbmRlclN1cmZhY2UgewpA
QCAtNTQsMTUgKzUyLDYgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IENDUmVuZGVyU3VyZmFjZShD
Q0xheWVySW1wbCopOwogICAgIHZpcnR1YWwgfkNDUmVuZGVyU3VyZmFjZSgpOwogCi0gICAgdmly
dHVhbCBib29sIHByZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7
Ci0gICAgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgYm9vbCBoYXNWYWxpZENv
bnRlbnRzVGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNDYWNoZWRDb250ZW50
c1RleHR1cmUoKSBjb25zdDsKLQotICAgIGJvb2wgcHJlcGFyZUJhY2tncm91bmRUZXh0dXJlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopOwotICAgIHZvaWQgcmVsZWFzZUJhY2tncm91bmRUZXh0dXJl
KCk7Ci0gICAgYm9vbCBoYXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkgY29uc3Q7Ci0KICAgICBT
dHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVhbSYsIGlu
dCBpbmRlbnQpIGNvbnN0OwogCkBAIC0xMTYsNyArMTA1LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lzc29yUmVj
dCA9IHNjaXNzb3JSZWN0OyB9CiAgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgY29udGVudHND
aGFuZ2VkKCkgY29uc3Q7CisgICAgYm9vbCBjb250ZW50c0NoYW5nZWQoKSBjb25zdDsKIAogICAg
IHZvaWQgc2V0Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQpAQCAtMTI0LDkg
KzExMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCkgeyBtX2xheWVyTGlz
dC5jbGVhcigpOyB9CiAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCgpIHsgcmV0
dXJuIG1fbGF5ZXJMaXN0OyB9CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KLSAgICBNYW5hZ2Vk
VGV4dHVyZSogYmFja2dyb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRU
ZXh0dXJlLmdldCgpOyB9Ci0KICAgICBpbnQgb3duaW5nTGF5ZXJJZCgpIGNvbnN0OwogICAgIEND
UmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0OwogCkBAIC0xNTUsOSAr
MTQxLDYgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAgICAgYm9vbCBt
X3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQ7CiAKLSAgICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IG1f
Y29udGVudHNUZXh0dXJlOwotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9iYWNrZ3JvdW5k
VGV4dHVyZTsKLQogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9vbCBtX2RyYXdPcGFj
aXR5SXNBbmltYXRpbmc7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2Ry
YXdUcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKaW5kZXggYWJhZDAyYmI3ZDlkN2FkNTdkM2Fk
MzRmNzU0MzVjNDU4N2NlZDM3Ny4uNDE4NTlmMzAyZWVhOWY5MTkzYjMyNDVmOGJlM2Y5ODJmNzZl
ODIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaApAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAgICAg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgd2luZG93TWF0cml4KCkgY29u
c3QgeyByZXR1cm4gbV93aW5kb3dNYXRyaXg7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVS
ZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0JikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGlu
dCkgY29uc3QgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luRHJhd2luZ0ZyYW1lKGNvbnN0
IENDUmVuZGVyUGFzcyogZGVmYXVsdFJlbmRlclBhc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiByb290
U2Npc3NvclJlY3RJbkN1cnJlbnRQYXNzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaERy
YXdpbmdGcmFtZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKaW5kZXgg
MzczMTgwOGNiNWRhMjliNDMwOWJkOGVkNTRjM2U5MmU0N2FmMTY3OC4uNTY0ZTM2OTZiZTE1NTJl
ZjRmNGI0NWQwNTRhZWFkM2ZhYTU2NDQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwu
aCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU2tDb2xvci5o
IgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJjYy9DQ0NoZWNrZXJib2FyZERy
YXdRdWFkLmgiCkBAIC0yMjAsNyArMjIxLDcgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpzZXRU
aWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcikKICAgICAqbV90aWxlciA9
IHRpbGVyOwogfQogCi12b2lkIENDVGlsZWRMYXllckltcGw6OnB1c2hUaWxlUHJvcGVydGllcyhp
bnQgaSwgaW50IGosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBv
cGFxdWVSZWN0KQordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpwdXNoVGlsZVByb3BlcnRpZXMoaW50
IGksIGludCBqLCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIG9wYXF1ZVJlY3Qp
CiB7CiAgICAgRHJhd2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwogICAgIGlmICghdGls
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCAxMzFhMzJmY2VmYWMxYjE4MTU1
MWYwNDEwNWYyMzhlYTBlMDc3ZmQ2Li40YzgyY2RjOGNhZjdlNzFiOTY5NzE2YzRhZjVlMTk2YzI3
OTEwNDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC01MCw3ICs1MCw3IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7IG1fc2tp
cHNEcmF3ID0gc2tpcHNEcmF3OyB9CiAgICAgdm9pZCBzZXRUaWxpbmdEYXRhKGNvbnN0IENDTGF5
ZXJUaWxpbmdEYXRhJiB0aWxlcik7Ci0gICAgdm9pZCBwdXNoVGlsZVByb3BlcnRpZXMoaW50LCBp
bnQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0
KTsKKyAgICB2b2lkIHB1c2hUaWxlUHJvcGVydGllcyhpbnQsIGludCwgdW5zaWduZWQgdGV4dHVy
ZUlkLCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KTsKIAogICAgIHZvaWQgc2V0Q29udGVudHNT
d2l6emxlZChib29sIGNvbnRlbnRzU3dpenpsZWQpIHsgbV9jb250ZW50c1N3aXp6bGVkID0gY29u
dGVudHNTd2l6emxlZDsgfQogICAgIGJvb2wgY29udGVudHNTd2l6emxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudHNTd2l6emxlZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCA0ZmExNjVjZTQ1
YWZkZTVlYjM3ZTllOTg5Zjk0M2ZjM2U3NzBlZGNlLi42MzZlMTBmMjI2NTI5MzdjN2I2OWY1Zjgw
ZDU5YzllMGE1YTQ3YTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMTI3LDExICsxMjcsMTEgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKGNvbnN0IElu
dFNpemUmIGNvbnRlbnRTaXplKQogICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xs
YWJsZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwg
MCkpOwogICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihjb250ZW50U2l6ZSk7Ci0g
ICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudHMgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDEpOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNvbnRlbnRzID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgyKTsKICAgICAgICAgY29udGVudHMtPnNldERyYXdzQ29udGVudCh0cnVlKTsKICAg
ICAgICAgY29udGVudHMtPnNldEJvdW5kcyhjb250ZW50U2l6ZSk7CiAgICAgICAgIGNvbnRlbnRz
LT5zZXRDb250ZW50Qm91bmRzKGNvbnRlbnRTaXplKTsKQEAgLTE4NiwxMiArMTg2LDEyIEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFOb0xheWVycykKIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFUcmVlQnV0Tm9DaGFuZ2VzKQog
ewogICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgwKTsKLSAgICAgICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSgx
KSk7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVh
dGUoMSk7CiAgICAgICAgIHJvb3QtPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUoMikpOwot
ICAgICAgICByb290LT5jaGlsZHJlbigpWzFdLT5hZGRDaGlsZChDQ0xheWVySW1wbDo6Y3JlYXRl
KDMpKTsKKyAgICAgICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSgzKSk7CiAg
ICAgICAgIHJvb3QtPmNoaWxkcmVuKClbMV0tPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUo
NCkpOwotICAgICAgICByb290LT5jaGlsZHJlbigpWzFdLT5jaGlsZHJlbigpWzBdLT5hZGRDaGls
ZChDQ0xheWVySW1wbDo6Y3JlYXRlKDUpKTsKKyAgICAgICAgcm9vdC0+Y2hpbGRyZW4oKVsxXS0+
YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSg1KSk7CisgICAgICAgIHJvb3QtPmNoaWxkcmVu
KClbMV0tPmNoaWxkcmVuKClbMF0tPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUoNikpOwog
ICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIH0K
ICAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpOwpAQCAtMjE0
LDcgKzIxNCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFS
ZXBlYXRlZFNjcm9sbHMpCiAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oMjAsIDMwKTsKICAg
ICBJbnRTaXplIHNjcm9sbERlbHRhKDExLCAtMTUpOwogICAgIHsKLSAgICAgICAgT3duUHRyPEND
TGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMCk7CisgICAgICAgIE93blB0
cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAgICAgICAgIHJv
b3QtPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICAgICAgcm9vdC0+c2V0
U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50
U2l6ZSgxMDAsIDEwMCkpOwpAQCAtMjYzLDcgKzI2Myw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdCwgc2Nyb2xsV2l0aG91dFJvb3RMYXllcikKIAogVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCByZXBsYWNlVHJlZVdoaWxlU2Nyb2xsaW5nKQogewotICAgIGNvbnN0IGlu
dCBzY3JvbGxMYXllcklkID0gMDsKKyAgICBjb25zdCBpbnQgc2Nyb2xsTGF5ZXJJZCA9IDE7CiAK
ICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAxMDApKTsKICAg
ICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1MCwgNTApKTsKQEAgLTYyNSw4
ICs2MjUsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICBzZXRDb250ZW50Qm91bmRzKEludFNpemUo
MTAsIDEwKSk7CiAgICAgICAgIHNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICAgICAgc2V0U2tp
cHNEcmF3KGZhbHNlKTsKKyAgICAgICAgc2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAsIDAs
IDEwLCAxMCkpOwogCiAgICAgICAgIE93blB0cjxDQ0xheWVyVGlsaW5nRGF0YT4gdGlsZXIgPSBD
Q0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCBDQ0xheWVyVGlsaW5n
RGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKKyAgICAgICAgdGlsZXItPnNldEJvdW5kcyhjb250ZW50
Qm91bmRzKCkpOwogICAgICAgICBzZXRUaWxpbmdEYXRhKCp0aWxlci5nZXQoKSk7CiAgICAgfQog
CkBAIC02MzksMTEgKzY0MSwxMSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRp
ZERyYXdOb3RDYWxsZWRPbkhpZGRlbkxheWVyKQogewogICAgIC8vIFRoZSByb290IGxheWVyIGlz
IGFsd2F5cyBkcmF3biwgc28gcnVuIHRoaXMgdGVzdCBvbiBhIGNoaWxkIGxheWVyIHRoYXQKICAg
ICAvLyB3aWxsIGJlIG1hc2tlZCBvdXQgYnkgdGhlIHJvb3QgbGF5ZXIncyBib3VuZHMuCi0gICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMCkpOwor
ICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDEp
KTsKICAgICBEaWREcmF3Q2hlY2tMYXllciogcm9vdCA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVj
a0xheWVyKj4obV9ob3N0SW1wbC0+cm9vdExheWVyKCkpOwogICAgIHJvb3QtPnNldE1hc2tzVG9C
b3VuZHModHJ1ZSk7CiAKLSAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3Jl
YXRlKDEpKTsKKyAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDIp
KTsKICAgICBEaWREcmF3Q2hlY2tMYXllciogbGF5ZXIgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hl
Y2tMYXllcio+KHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCkpOwogICAgIC8vIEVuc3VyZSB2aXNp
YmxlTGF5ZXJSZWN0IGZvciBsYXllciBpcyBlbXB0eQogICAgIGxheWVyLT5zZXRQb3NpdGlvbihG
bG9hdFBvaW50KDEwMCwgMTAwKSk7CkBAIC02ODYsMTMgKzY4OCwxMyBAQCBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHdpbGxEcmF3Tm90Q2FsbGVkT25PY2NsdWRlZExheWVyKQogICAg
IEludFNpemUgYmlnU2l6ZSgxMDAwLCAxMDAwKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9y
dFNpemUoYmlnU2l6ZSk7CiAKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0No
ZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERy
YXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwogICAgIERpZERyYXdDaGVja0xheWVyKiByb290ID0g
c3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7
CiAKLSAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKKyAg
ICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDIpKTsKICAgICBEaWRE
cmF3Q2hlY2tMYXllciogb2NjbHVkZWRMYXllciA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVja0xh
eWVyKj4ocm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAKLSAgICByb290LT5hZGRDaGlsZChE
aWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDIpKTsKKyAgICByb290LT5hZGRDaGlsZChEaWREcmF3
Q2hlY2tMYXllcjo6Y3JlYXRlKDMpKTsKICAgICBEaWREcmF3Q2hlY2tMYXllciogdG9wTGF5ZXIg
PSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KHJvb3QtPmNoaWxkcmVuKClbMV0uZ2V0
KCkpOwogICAgIC8vIFRoaXMgbGF5ZXIgY292ZXJzIHRoZSBvY2NsdWRlZExheWVyIGFib3ZlLiBN
YWtlIHRoaXMgbGF5ZXIgbGFyZ2Ugc28gaXQgY2FuIG9jY2x1ZGUuCiAgICAgdG9wTGF5ZXItPnNl
dEJvdW5kcyhiaWdTaXplKTsKQEAgLTcxOCwxMyArNzIwLDEzIEBAIFRFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgd2lsbERyYXdOb3RDYWxsZWRPbk9jY2x1ZGVkTGF5ZXIpCiAKIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZGlkRHJhd0NhbGxlZE9uQWxsTGF5ZXJzKQogewot
ICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDAp
KTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6OmNyZWF0
ZSgxKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2FzdDxEaWREcmF3
Q2hlY2tMYXllcio+KG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKIAotICAgIHJvb3QtPmFkZENo
aWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOworICAgIHJvb3QtPmFkZENoaWxkKERp
ZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMikpOwogICAgIERpZERyYXdDaGVja0xheWVyKiBsYXll
cjEgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KHJvb3QtPmNoaWxkcmVuKClbMF0u
Z2V0KCkpOwogCi0gICAgbGF5ZXIxLT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRl
KDIpKTsKKyAgICBsYXllcjEtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMykp
OwogICAgIERpZERyYXdDaGVja0xheWVyKiBsYXllcjIgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hl
Y2tMYXllcio+KGxheWVyMS0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAKICAgICBsYXllcjEtPnNl
dE9wYWNpdHkoMC4zZik7CkBAIC03NjksOSArNzcxLDkgQEAgcHJpdmF0ZToKIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hlbkFuaW1hdGlvblVzZXND
aGVja2VyYm9hcmQpCiB7CiAgICAgLy8gV2hlbiB0aGUgdGV4dHVyZSBpcyBub3QgbWlzc2luZywg
d2UgZHJhdyBhcyB1c3VhbC4KLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0No
ZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERy
YXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwogICAgIERpZERyYXdDaGVja0xheWVyKiByb290ID0g
c3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7
Ci0gICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRl
KDEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpOworICAgIHJvb3QtPmFkZENoaWxkKE1pc3NpbmdUZXh0
dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgyLCBmYWxzZSwgZmFsc2UsIHRydWUpKTsKIAogICAg
IENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKIApAQCAtNzgwLDI3ICs3ODIs
MjcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwcmVwYXJlVG9EcmF3RmFpbHNX
aGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJib2FyZCkKICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxs
TGF5ZXJzKGZyYW1lKTsKIAogICAgIC8vIFdoZW4gYSB0ZXh0dXJlIGlzIG1pc3NpbmcgYW5kIHdl
J3JlIG5vdCBhbmltYXRpbmcsIHdlIGRyYXcgYXMgdXN1YWwgd2l0aCBjaGVja2VyYm9hcmRpbmcu
Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUo
MCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3Jl
YXRlKDEpKTsKICAgICByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hv
c3RJbXBsLT5yb290TGF5ZXIoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVB
bmltYXRpbmdMYXllcjo6Y3JlYXRlKDEsIHRydWUsIGZhbHNlLCBmYWxzZSkpOworICAgIHJvb3Qt
PmFkZENoaWxkKE1pc3NpbmdUZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgyLCB0cnVlLCBm
YWxzZSwgZmFsc2UpKTsKIAogICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBhcmVUb0Ry
YXcoZnJhbWUpKTsKICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAgICBtX2hv
c3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKIAogICAgIC8vIFdoZW4gYSB0ZXh0dXJl
IGlzIG1pc3NpbmcgYW5kIHdlJ3JlIGFuaW1hdGluZywgd2UgZG9uJ3Qgd2FudCB0byBkcmF3IGFu
eXRoaW5nLgotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6
Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5
ZXI6OmNyZWF0ZSgxKSk7CiAgICAgcm9vdCA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVja0xheWVy
Kj4obV9ob3N0SW1wbC0+cm9vdExheWVyKCkpOwotICAgIHJvb3QtPmFkZENoaWxkKE1pc3NpbmdU
ZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgxLCB0cnVlLCBmYWxzZSwgdHJ1ZSkpOworICAg
IHJvb3QtPmFkZENoaWxkKE1pc3NpbmdUZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgyLCB0
cnVlLCBmYWxzZSwgdHJ1ZSkpOwogCiAgICAgRVhQRUNUX0ZBTFNFKG1faG9zdEltcGwtPnByZXBh
cmVUb0RyYXcoZnJhbWUpKTsKICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAg
ICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKIAogICAgIC8vIFdoZW4gdGhl
IGxheWVyIHNraXBzIGRyYXcgYW5kIHdlJ3JlIGFuaW1hdGluZywgd2Ugc3RpbGwgZHJhdyB0aGUg
ZnJhbWUuCi0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpj
cmVhdGUoMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXll
cjo6Y3JlYXRlKDEpKTsKICAgICByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIq
PihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1Rl
eHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDEsIGZhbHNlLCB0cnVlLCB0cnVlKSk7CisgICAg
cm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDIsIGZh
bHNlLCB0cnVlLCB0cnVlKSk7CiAKICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5wcmVwYXJl
VG9EcmF3KGZyYW1lKSk7CiAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7CkBAIC04
MDksNyArODExLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwcmVwYXJlVG9E
cmF3RmFpbHNXaGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJib2FyZCkKIAogVEVTVF9GKENDTGF5ZXJU
cmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKIHsKLSAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAgICAgcm9vdC0+c2V0U2Nyb2xs
YWJsZShmYWxzZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgp
KTsKICAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwpAQCAtODMzLDcg
KzgzNSw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTm9uQ29tcG9z
aXRlZFJvb3QpCiAgICAgY29udGVudExheWVyLT5zZXRCb3VuZHMoc3VyZmFjZVNpemUpOwogICAg
IGNvbnRlbnRMYXllci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKHN1cmZhY2VTaXplLndpZHRo
KCkgKiAyLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSAqIDIpKTsKIAotICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gc2Nyb2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOwogICAgIHNj
cm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgIHNjcm9sbExheWVyLT5zZXRNYXhT
Y3JvbGxQb3NpdGlvbihzdXJmYWNlU2l6ZSk7CiAgICAgc2Nyb2xsTGF5ZXItPmFkZENoaWxkKGNv
bnRlbnRMYXllci5yZWxlYXNlKCkpOwpAQCAtODUyLDggKzg1NCw4IEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QpCiBURVNUX0YoQ0NMYXll
clRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRBbmRSZWRyYXcpCiB7CiAg
ICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRl
U2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICBy
b290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1LCA1KSwg
c3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNl
KCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7CiAgICAg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKQEAgLTg2OCw4ICs4NzAsOCBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRB
bmRSZWRyYXcpCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1pc3Nlc0No
aWxkKQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKLSAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwotICAgIHJvb3QtPmFkZENo
aWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6
ZSkpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUo
MSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDIsIEZsb2F0UG9p
bnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJv
b3QucmVsZWFzZSgpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNp
emUpOwogICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CkBAIC04ODMs
OCArODg1LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxNaXNzZXND
aGlsZCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQmFja2Zh
Y2luZ0NoaWxkKQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKLSAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwotICAgIE93blB0
cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2lu
dCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNy
ZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CiAg
ICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKIAogICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKQEAgLTkwNiwxMSArOTA4LDExIEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxkKQogVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCbG9ja2VkQnlDb250ZW50TGF5ZXIp
CiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gY29udGVudExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNvbnRlbnRMYXll
ciA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6
ZSk7CiAgICAgY29udGVudExheWVyLT5zZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQodHJ1ZSk7
CiAgICAgY29udGVudExheWVyLT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKIAotICAgIE93blB0cjxD
Q0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQ
b2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gc2Nyb2xs
TGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFj
ZVNpemUpOwogICAgIHNjcm9sbExheWVyLT5hZGRDaGlsZChjb250ZW50TGF5ZXIucmVsZWFzZSgp
KTsKIAogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxMYXllci5yZWxlYXNlKCkp
OwpAQCAtOTI1LDcgKzkyNyw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Ny
b2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKIHsKICAgICBJbnRTaXplIHN1
cmZhY2VTaXplKDEwLCAxMCk7CiAgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKLSAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQb2ludCg1
LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0
ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CiAgICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKICAgICBtX2hvc3RJbXBs
LT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwogICAgIGluaXRpYWxpemVMYXllclJlbmRl
cmVyQW5kRHJhd0ZyYW1lKCk7CkBAIC05NDMsNyArOTQ1LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25NYWluVGhyZWFkKQog
ICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHNjcm9sbCBkZWx0YS4KICAgICBl
eHBlY3RlZFNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZSk7CiAgICAgT3duUHRyPENDU2Nyb2xs
QW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFz
KCk7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDAsIGV4cGVjdGVkU2Ny
b2xsRGVsdGEpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBtX2hvc3RJ
bXBsLT5yb290TGF5ZXIoKS0+aWQoKSwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CiAKICAgICAvLyBU
aGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBhbHNvIGhhdmUgYmVlbiB1cGRhdGVkLgogICAgIEVYUEVD
VF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRpb24oKSwgZXhwZWN0
ZWRNYXhTY3JvbGwpOwpAQCAtOTU2LDcgKzk1OCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKIHsKICAg
ICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CiAgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsK
LSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwg
RmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNl
U2l6ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKICAg
ICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwogICAgIG1faG9zdElt
cGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCAxLCBwYWdlU2NhbGUpOwpAQCAtOTc2
LDcgKzk3OCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFu
ZENoYW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKIAogICAgIC8vIFRoZSBzY3JvbGwgZGVsdGEg
aXMgbm90IHNjYWxlZCBiZWNhdXNlIHRoZSBtYWluIHRocmVhZCBkaWQgbm90IHNjYWxlLgogICAg
IE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJv
Y2Vzc1Njcm9sbERlbHRhcygpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgp
LCAwLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5m
by5nZXQoKSwgbV9ob3N0SW1wbC0+cm9vdExheWVyKCktPmlkKCksIGV4cGVjdGVkU2Nyb2xsRGVs
dGEpOwogCiAgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgYWxzbyBoYXZlIGJlZW4gdXBk
YXRlZC4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNjcm9sbFBv
c2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKQEAgLTk4OCwxMCArOTkwLDExIEBAIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9u
SW1wbFRocmVhZCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hpbGRB
bmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6
ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgxKTsKICAgICAvLyBBbHNvIG1hcmsgdGhlIHJvb3Qgc2Nyb2xsYWJsZSBzbyBpdCBiZWNv
bWVzIHRoZSByb290IHNjcm9sbCBsYXllci4KICAgICByb290LT5zZXRTY3JvbGxhYmxlKHRydWUp
OwotICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50
KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIGludCBzY3JvbGxMYXllcklkID0gMjsKKyAgICBy
b290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoc2Nyb2xsTGF5ZXJJZCwgRmxvYXRQ
b2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIo
cm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNl
U2l6ZSk7CiAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKQEAgLTEw
MTEsNyArMTAxNCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsQ2hp
bGRBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCiAgICAgLy8gVGhlIHNjYWxlIHNob3Vs
ZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgogICAgIGV4cGVjdGVkU2Nyb2xsRGVsdGEuc2Nh
bGUocGFnZVNjYWxlKTsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Nyb2xsSW5m
byA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBleHBlY3RDb250YWlu
cygqc2Nyb2xsSW5mby5nZXQoKSwgMSwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CisgICAgZXhwZWN0
Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHNjcm9sbExheWVySWQsIGV4cGVjdGVkU2Nyb2xs
RGVsdGEpOwogCiAgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgbm90IGhhdmUgY2hhbmdl
ZC4KICAgICBFWFBFQ1RfRVEoY2hpbGQtPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4
U2Nyb2xsKTsKQEAgLTEwMjYsMTIgKzEwMjksMTIgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LCBzY3JvbGxDaGlsZEJleW9uZExpbWl0KQogICAgIC8vIHBhcmVudCBsYXllciBpcyBz
Y3JvbGxlZCBvbiB0aGUgYXhpcyBvbiB3aGljaCB0aGUgY2hpbGQgd2FzIHVuYWJsZSB0bwogICAg
IC8vIHNjcm9sbC4KICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7Ci0gICAgT3duUHRy
PENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0UG9pbnQo
NSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVh
dGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwogCi0g
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVy
KDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGdyYW5kQ2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMywgRmxvYXRQb2ludCg1LCA1
KSwgc3VyZmFjZVNpemUpOwogICAgIGdyYW5kQ2hpbGQtPnNldFNjcm9sbFBvc2l0aW9uKEludFBv
aW50KDAsIDUpKTsKIAotICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3Jv
bGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0
cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2lu
dCg1LCA1KSwgc3VyZmFjZVNpemUpOwogICAgIGNoaWxkLT5zZXRTY3JvbGxQb3NpdGlvbihJbnRQ
b2ludCgzLCAwKSk7CiAgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFzZSgpKTsK
IApAQCAtMTA2Miw4ICsxMDY1LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
Y3JvbGxFdmVudEJ1YmJsaW5nKQogICAgIC8vIFdoZW4gd2UgdHJ5IHRvIHNjcm9sbCBhIG5vbi1z
Y3JvbGxhYmxlIGNoaWxkIGxheWVyLCB0aGUgc2Nyb2xsIGRlbHRhCiAgICAgLy8gc2hvdWxkIGJl
IGFwcGxpZWQgdG8gb25lIG9mIGl0cyBhbmNlc3RvcnMgaWYgcG9zc2libGUuCiAgICAgSW50U2l6
ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNy
ZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7Ci0g
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBG
bG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VT
aXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xsYWJsZUxh
eWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKIAogICAgIGNoaWxkLT5zZXRT
Y3JvbGxhYmxlKGZhbHNlKTsKICAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNlKCkpOwpA
QCAtMTA4OCwxMyArMTA5MSwxMyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNj
cm9sbEV2ZW50QnViYmxpbmcpCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9s
bEJlZm9yZVJlZHJhdykKIHsKICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7Ci0gICAg
bV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBv
aW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihj
cmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsK
ICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwogCiAgICAgLy8g
RHJhdyBvbmUgZnJhbWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVidWlsZCB0aGUgbGF5ZXIgdHJl
ZSB0byBtaW1pYyBhIHRyZWUgc3luY2hyb25pemF0aW9uLgogICAgIGluaXRpYWxpemVMYXllclJl
bmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgbV9ob3N0SW1wbC0+ZGV0YWNoTGF5ZXJUcmVlKCk7
Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBG
bG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNp
emUpKTsKIAogICAgIC8vIFNjcm9sbGluZyBzaG91bGQgc3RpbGwgd29yayBldmVuIHRob3VnaCB3
ZSBkaWQgbm90IGRyYXcgeWV0LgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3JvbGxCZWdp
bihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJbnB1dEhh
bmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMTE4Niw3ICsxMTg5LDcgQEAgVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBibGVuZGluZ09mZldoZW5EcmF3aW5nT3BhcXVlTGF5
ZXJzKQogewogCiAgICAgewotICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKDApOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBD
Q0xheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgICAgICByb290LT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50KDAsIDApKTsKICAgICAgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAsIDEwKSk7
CiAgICAgICAgIHJvb3QtPnNldENvbnRlbnRCb3VuZHMocm9vdC0+Ym91bmRzKCkpOwpAQCAtMTE5
NSw3ICsxMTk4LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBibGVuZGluZ09m
ZldoZW5EcmF3aW5nT3BhcXVlTGF5ZXJzKQogICAgIH0KICAgICBDQ0xheWVySW1wbCogcm9vdCA9
IG1faG9zdEltcGwtPnJvb3RMYXllcigpOwogCi0gICAgcm9vdC0+YWRkQ2hpbGQoQmxlbmRTdGF0
ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoQmxlbmRTdGF0ZUNo
ZWNrTGF5ZXI6OmNyZWF0ZSgyKSk7CiAgICAgQmxlbmRTdGF0ZUNoZWNrTGF5ZXIqIGxheWVyMSA9
IHN0YXRpY19jYXN0PEJsZW5kU3RhdGVDaGVja0xheWVyKj4ocm9vdC0+Y2hpbGRyZW4oKVswXS5n
ZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7CkBAIC0x
MjQ3LDcgKzEyNTAsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJsZW5kaW5n
T2ZmV2hlbkRyYXdpbmdPcGFxdWVMYXllcnMpCiAgICAgRVhQRUNUX1RSVUUobGF5ZXIxLT5xdWFk
c0FwcGVuZGVkKCkpOwogICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJhbWUpOwog
Ci0gICAgbGF5ZXIxLT5hZGRDaGlsZChCbGVuZFN0YXRlQ2hlY2tMYXllcjo6Y3JlYXRlKDIpKTsK
KyAgICBsYXllcjEtPmFkZENoaWxkKEJsZW5kU3RhdGVDaGVja0xheWVyOjpjcmVhdGUoMykpOwog
ICAgIEJsZW5kU3RhdGVDaGVja0xheWVyKiBsYXllcjIgPSBzdGF0aWNfY2FzdDxCbGVuZFN0YXRl
Q2hlY2tMYXllcio+KGxheWVyMS0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAKICAgICAvLyAyIG9w
YXF1ZSBsYXllcnMsIGRyYXduIHdpdGhvdXQgYmxlbmRpbmcuCkBAIC0xNDA3LDcgKzE0MTAsNyBA
QCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHZpZXdwb3J0Q292ZXJlZCkKICAgICBJ
bnRTaXplIHZpZXdwb3J0U2l6ZSgxMDAwLCAxMDAwKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3
cG9ydFNpemUodmlld3BvcnRTaXplKTsKIAotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihC
bGVuZFN0YXRlQ2hlY2tMYXllcjo6Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIoQmxlbmRTdGF0ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CiAgICAgQmxlbmRTdGF0ZUNo
ZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2FzdDxCbGVuZFN0YXRlQ2hlY2tMYXllcio+KG1faG9z
dEltcGwtPnJvb3RMYXllcigpKTsKICAgICByb290LT5zZXRFeHBlY3RhdGlvbihmYWxzZSwgdHJ1
ZSk7CiAgICAgcm9vdC0+c2V0T3BhcXVlKHRydWUpOwpAQCAtMTk5Nyw3ICsyMDAwLDcgQEAgcHJp
dmF0ZToKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBjb250ZXh0TG9zdEFuZFJl
c3RvcmVkTm90aWZpY2F0aW9uU2VudFRvQWxsTGF5ZXJzKQogewotICAgIG1faG9zdEltcGwtPnNl
dFJvb3RMYXllcihDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7
CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKENvbnRleHRMb3N0Tm90aWZpY2F0aW9uQ2hl
Y2tMYXllcjo6Y3JlYXRlKDEpKTsKICAgICBDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5
ZXIqIHJvb3QgPSBzdGF0aWNfY2FzdDxDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5ZXIq
PihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7CiAKICAgICByb290LT5hZGRDaGlsZChDb250ZXh0
TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CkBAIC0yMjAwLDExICsyMjAz
LDExIEBAIHB1YmxpYzoKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBkb250VXNl
T2xkUmVzb3VyY2VzQWZ0ZXJMb3N0Q29udGV4dCkKIHsKLSAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3RMYXllcihDQ0xheWVySW1wbDo6Y3JlYXRlKDApKTsKKyAgICBPd25QdHI8Q0NMYXllcklt
cGw+IHJvb3RMYXllcihDQ0xheWVySW1wbDo6Y3JlYXRlKDEpKTsKICAgICByb290TGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHJvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludCgwLCAwKSk7CiAKLSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gdGlsZUxh
eWVyID0gQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ1RpbGVkTGF5
ZXJJbXBsPiB0aWxlTGF5ZXIgPSBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUoMik7CiAgICAgdGls
ZUxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICB0aWxlTGF5ZXItPnNldEFu
Y2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwogICAgIHRpbGVMYXllci0+c2V0Q29udGVudEJv
dW5kcyhJbnRTaXplKDEwLCAxMCkpOwpAQCAtMjIxNiw3ICsyMjE5LDcgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBkb250VXNlT2xkUmVzb3VyY2VzQWZ0ZXJMb3N0Q29udGV4dCkK
ICAgICB0aWxlTGF5ZXItPnB1c2hUaWxlUHJvcGVydGllcygwLCAwLCAxLCBJbnRSZWN0KDAsIDAs
IDEwLCAxMCkpOwogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodGlsZUxheWVyLnJlbGVhc2UoKSk7
CiAKLSAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJbXBsPiB0ZXh0dXJlTGF5ZXIgPSBDQ1RleHR1
cmVMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJbXBsPiB0
ZXh0dXJlTGF5ZXIgPSBDQ1RleHR1cmVMYXllckltcGw6OmNyZWF0ZSgzKTsKICAgICB0ZXh0dXJl
TGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHRleHR1cmVMYXllci0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CiAgICAgdGV4dHVyZUxheWVyLT5zZXRDb250
ZW50Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CkBAIC0yMjI1LDcgKzIyMjgsNyBAQCBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJjZXNBZnRlckxvc3RDb250
ZXh0KQogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodGV4dHVyZUxheWVyLnJlbGVhc2UoKSk7CiAK
ICAgICBGYWtlVmlkZW9GcmFtZVByb3ZpZGVyIHByb3ZpZGVyOwotICAgIE93blB0cjxDQ1ZpZGVv
TGF5ZXJJbXBsPiB2aWRlb0xheWVyID0gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKDMsICZwcm92
aWRlcik7CisgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw+IHZpZGVvTGF5ZXIgPSBDQ1ZpZGVv
TGF5ZXJJbXBsOjpjcmVhdGUoNCwgJnByb3ZpZGVyKTsKICAgICB2aWRlb0xheWVyLT5zZXRCb3Vu
ZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICB2aWRlb0xheWVyLT5zZXRBbmNob3JQb2ludChGbG9h
dFBvaW50KDAsIDApKTsKICAgICB2aWRlb0xheWVyLT5zZXRDb250ZW50Qm91bmRzKEludFNpemUo
MTAsIDEwKSk7CkBAIC0yMjMzLDcgKzIyMzYsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1w
bFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJjZXNBZnRlckxvc3RDb250ZXh0KQogICAgIHZpZGVvTGF5
ZXItPnNldExheWVyVHJlZUhvc3RJbXBsKG1faG9zdEltcGwuZ2V0KCkpOwogICAgIHJvb3RMYXll
ci0+YWRkQ2hpbGQodmlkZW9MYXllci5yZWxlYXNlKCkpOwogCi0gICAgT3duUHRyPENDSU9TdXJm
YWNlTGF5ZXJJbXBsPiBpb1N1cmZhY2VMYXllciA9IENDSU9TdXJmYWNlTGF5ZXJJbXBsOjpjcmVh
dGUoNCk7CisgICAgT3duUHRyPENDSU9TdXJmYWNlTGF5ZXJJbXBsPiBpb1N1cmZhY2VMYXllciA9
IENDSU9TdXJmYWNlTGF5ZXJJbXBsOjpjcmVhdGUoNSk7CiAgICAgaW9TdXJmYWNlTGF5ZXItPnNl
dEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIGlvU3VyZmFjZUxheWVyLT5zZXRBbmNob3JQ
b2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICBpb1N1cmZhY2VMYXllci0+c2V0Q29udGVudEJv
dW5kcyhJbnRTaXplKDEwLCAxMCkpOwpAQCAtMjQ2NSw2ICsyNDY4LDExIEBAIHN0YXRpYyB2b2lk
IHNldHVwTGF5ZXJzRm9yVGV4dHVyZUNhY2hpbmcoQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJU
cmVlSG9zdEltcGwsCiAgICAgc3VyZmFjZUxheWVyUHRyLT5hZGRDaGlsZChjaGlsZC5yZWxlYXNl
KCkpOwogfQogCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1XaXRoUmVsZWFzZVRleHR1cmVz
IDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdXNpbmcgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzOworfTsKKwogVEVT
VF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmcpCiB7CiAg
ICAgQ0NTZXR0aW5nczo6c2V0UGFydGlhbFN3YXBFbmFibGVkKHRydWUpOwpAQCAtMjU0OCwyMiAr
MjU1Niw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVD
YWNoaW5nKQogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKICAg
ICB9CiAKLSAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhZ2FpbiwgYnV0IGV2aWN0IHRoZSBjYWNoZWQg
c3VyZmFjZSB0ZXh0dXJlCisgICAgLy8gQ2hhbmdlIG9wYWNpdHkgYWdhaW4sIGFuZCBldmljdCB0
aGUgY2FjaGVkIHN1cmZhY2UgdGV4dHVyZS4KICAgICBzdXJmYWNlTGF5ZXJQdHItPnNldE9wYWNp
dHkoMC41Zik7Ci0gICAgTWFuYWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSA9IHN1cmZhY2VM
YXllclB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKTsKLSAgICBBU1NFUlRf
VFJVRShjb250ZW50c1RleHR1cmUtPmlzVmFsaWQoY29udGVudHNUZXh0dXJlLT5zaXplKCksIGNv
bnRlbnRzVGV4dHVyZS0+Zm9ybWF0KCkpKTsKLSAgICBDQ1JlbmRlcmVyKiByZW5kZXJlciA9IG15
SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKTsKLSAgICBUZXh0dXJlTWFuYWdlciogdGV4dHVyZU1h
bmFnZXIgPSByZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2VyKCk7Ci0gICAgc2l6ZV90IG1heE1l
bW9yeUxpbWl0ID0gdGV4dHVyZU1hbmFnZXItPm1heE1lbW9yeUxpbWl0Qnl0ZXMoKTsKLQotICAg
IC8vIFRoaXMgc2hvdWxkIGV2aWNlIGFsbCBjYWNoZWQgc3VyZmFjZXMKLSAgICB0ZXh0dXJlTWFu
YWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygwKTsKLQotICAgIC8vIFJlc3RvcmUgb3JpZ2lu
YWwgbGltaXQKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcyhtYXhN
ZW1vcnlMaW1pdCk7Ci0KLSAgICAvLyBXYXMgb3VyIHN1cmZhY2UgZXZpY3RlZD8KLSAgICBBU1NF
UlRfRkFMU0UoY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKGNvbnRlbnRzVGV4dHVyZS0+c2l6ZSgp
LCBjb250ZW50c1RleHR1cmUtPmZvcm1hdCgpKSk7CisgICAgc3RhdGljX2Nhc3Q8TGF5ZXJSZW5k
ZXJlckNocm9taXVtV2l0aFJlbGVhc2VUZXh0dXJlcyo+KG15SG9zdEltcGwtPmxheWVyUmVuZGVy
ZXIoKSktPnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKIAogICAgIC8vIENoYW5nZSBvcGFj
aXR5IGFuZCBkcmF3CiAgICAgc3VyZmFjZUxheWVyUHRyLT5zZXRPcGFjaXR5KDAuNmYpOwpAQCAt
MjU4Myw2ICsyNTc4LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNl
VGV4dHVyZUNhY2hpbmcpCiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFkID0gc3Rh
dGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNbMV0tPnF1
YWRMaXN0KClbMF0uZ2V0KCkpOwogICAgICAgICBFWFBFQ1RfRkFMU0UocXVhZC0+cmVuZGVyUGFz
cygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAorICAgICAgICAvLyBX
YXMgb3VyIHN1cmZhY2UgZXZpY3RlZD8KKyAgICAgICAgRVhQRUNUX0ZBTFNFKG15SG9zdEltcGwt
PmxheWVyUmVuZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChxdWFk
LT5yZW5kZXJQYXNzKCktPmlkKCkpKTsKKwogICAgICAgICBteUhvc3RJbXBsLT5kcmF3TGF5ZXJz
KGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CiAg
ICAgfQpAQCAtMjcwNiwyMiArMjcwNCw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFsU3dhcCkKICAgICAgICAgbXlIb3N0SW1w
bC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CiAgICAgfQogCi0gICAgLy8gQ2hhbmdlIG9wYWNp
dHkgYWdhaW4sIGJ1dCBldmljdCB0aGUgY2FjaGVkIHN1cmZhY2UgdGV4dHVyZQorICAgIC8vIENo
YW5nZSBvcGFjaXR5IGFnYWluLCBhbmQgZXZpY3QgdGhlIGNhY2hlZCBzdXJmYWNlIHRleHR1cmUu
CiAgICAgc3VyZmFjZUxheWVyUHRyLT5zZXRPcGFjaXR5KDAuNWYpOwotICAgIE1hbmFnZWRUZXh0
dXJlKiBjb250ZW50c1RleHR1cmUgPSBzdXJmYWNlTGF5ZXJQdHItPnJlbmRlclN1cmZhY2UoKS0+
Y29udGVudHNUZXh0dXJlKCk7Ci0gICAgQVNTRVJUX1RSVUUoY29udGVudHNUZXh0dXJlLT5pc1Zh
bGlkKGNvbnRlbnRzVGV4dHVyZS0+c2l6ZSgpLCBjb250ZW50c1RleHR1cmUtPmZvcm1hdCgpKSk7
Ci0gICAgQ0NSZW5kZXJlciogcmVuZGVyZXIgPSBteUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCk7
Ci0gICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gcmVuZGVyZXItPmltcGxUZXh0
dXJlTWFuYWdlcigpOwotICAgIHNpemVfdCBtYXhNZW1vcnlMaW1pdCA9IHRleHR1cmVNYW5hZ2Vy
LT5tYXhNZW1vcnlMaW1pdEJ5dGVzKCk7Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBldmljZSBhbGwg
Y2FjaGVkIHN1cmZhY2VzCi0gICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0
ZXMoMCk7Ci0KLSAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGxpbWl0Ci0gICAgdGV4dHVyZU1hbmFn
ZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMobWF4TWVtb3J5TGltaXQpOwotCi0gICAgLy8gV2Fz
IG91ciBzdXJmYWNlIGV2aWN0ZWQ/Ci0gICAgQVNTRVJUX0ZBTFNFKGNvbnRlbnRzVGV4dHVyZS0+
aXNWYWxpZChjb250ZW50c1RleHR1cmUtPnNpemUoKSwgY29udGVudHNUZXh0dXJlLT5mb3JtYXQo
KSkpOworICAgIHN0YXRpY19jYXN0PExheWVyUmVuZGVyZXJDaHJvbWl1bVdpdGhSZWxlYXNlVGV4
dHVyZXMqPihteUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkpLT5yZWxlYXNlUmVuZGVyUGFzc1Rl
eHR1cmVzKCk7CiAKICAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhbmQgZHJhdwogICAgIHN1cmZhY2VM
YXllclB0ci0+c2V0T3BhY2l0eSgwLjZmKTsKQEAgLTI3NDEsNiArMjcyNiw5IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFsU3dh
cCkKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNfY2FzdDxDQ1Jl
bmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3QoKVswXS5n
ZXQoKSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQYXNzKCktPnRhcmdldFN1
cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCisgICAgICAgIC8vIFdhcyBvdXIgc3VyZmFj
ZSBldmljdGVkPworICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJSZW5kZXJl
cigpLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJlbmRlclBhc3Mo
KS0+aWQoKSkpOworCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUpOwogICAg
ICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKICAgICB9CkBAIC0yODk4
LDg3ICsyODg2LDc2IEBAIHN0cnVjdCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhIHsKICAgICBP
d25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZTsKIH07CiAKLWNsYXNzIEZh
a2VSZW5kZXJTdXJmYWNlIDogcHVibGljIENDUmVuZGVyU3VyZmFjZSB7Ci1wcml2YXRlOgotICAg
IGJvb2wgbV9oYXNDYWNoZWRUZXh0dXJlOwotICAgIGJvb2wgbV9jb250ZW50c0NoYW5nZWQ7Ci0K
K2NsYXNzIENDVGVzdFJlbmRlclBhc3M6IHB1YmxpYyBDQ1JlbmRlclBhc3MgewogcHVibGljOgot
ICAgIEZha2VSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBsYXllckltcGwpCi0gICAgICAgIDog
Q0NSZW5kZXJTdXJmYWNlKGxheWVySW1wbCksCi0gICAgICAgICAgbV9oYXNDYWNoZWRUZXh0dXJl
KGZhbHNlKQotICAgIHsKLSAgICB9CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNz
PiBjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlLCBpbnQgaWQpIHsgcmV0dXJu
IGFkb3B0UHRyKG5ldyBDQ1Rlc3RSZW5kZXJQYXNzKHRhcmdldFN1cmZhY2UsIGlkKSk7IH0KIAot
ICAgIHZpcnR1YWwgYm9vbCBoYXNDYWNoZWRDb250ZW50c1RleHR1cmUoKSBjb25zdCBPVkVSUklE
RQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGFzQ2FjaGVkVGV4dHVyZTsKLSAgICB9CisgICAg
dm9pZCBhcHBlbmRRdWFkKFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4gcXVhZCkgeyBtX3F1YWRMaXN0
LmFwcGVuZChxdWFkKTsgfQogCi0gICAgdmlydHVhbCBib29sIHByZXBhcmVDb250ZW50c1RleHR1
cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBscmMpIE9WRVJSSURFCi0gICAgewotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Citwcm90ZWN0ZWQ6CisgICAgQ0NUZXN0UmVuZGVyUGFzcyhDQ1Jl
bmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIGludCBpZCkgOiBDQ1JlbmRlclBhc3ModGFyZ2V0
U3VyZmFjZSwgaWQpIHsgfQorfTsKIAotICAgIHZpcnR1YWwgYm9vbCBjb250ZW50c0NoYW5nZWQo
KSBjb25zdCBPVkVSUklERQorY2xhc3MgQ0NUZXN0UmVuZGVyZXIgOiBwdWJsaWMgTGF5ZXJSZW5k
ZXJlckNocm9taXVtLCBwdWJsaWMgQ0NSZW5kZXJlckNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NUZXN0UmVuZGVyZXI+IGNyZWF0ZShXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29udGVudHNDaGFu
Z2VkOwotICAgIH0KKyAgICAgICAgT3duUHRyPENDVGVzdFJlbmRlcmVyPiByZW5kZXJlcihhZG9w
dFB0cihuZXcgQ0NUZXN0UmVuZGVyZXIoY29udGV4dCkpKTsKKyAgICAgICAgaWYgKCFyZW5kZXJl
ci0+aW5pdGlhbGl6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICB2b2lk
IHNldEhhc0NhY2hlZFRleHR1cmUoYm9vbCBoYXNDYWNoZWRUZXh0dXJlKQotICAgIHsKLSAgICAg
ICAgbV9oYXNDYWNoZWRUZXh0dXJlID0gaGFzQ2FjaGVkVGV4dHVyZTsKKyAgICAgICAgcmV0dXJu
IHJlbmRlcmVyLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRzQ2hhbmdl
ZChib29sIGNvbnRlbnRzQ2hhbmdlZCkKLSAgICB7Ci0gICAgICAgIG1fY29udGVudHNDaGFuZ2Vk
ID0gY29udGVudHNDaGFuZ2VkOwotICAgIH0KLX07CisgICAgdm9pZCBjbGVhckNhY2hlZFRleHR1
cmVzKCkgeyBtX3RleHR1cmVzLmNsZWFyKCk7IH0KKyAgICB2b2lkIHNldEhhdmVDYWNoZWRSZXNv
dXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSB7IG1fdGV4dHVyZXMuYWRkKGlkKTsgfQogCi1j
bGFzcyBDQ1Rlc3RSZW5kZXJQYXNzOiBwdWJsaWMgQ0NSZW5kZXJQYXNzIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1cmZhY2Uq
IHRhcmdldFN1cmZhY2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGVz
dFJlbmRlclBhc3ModGFyZ2V0U3VyZmFjZSkpOwotICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgaGF2
ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChpbnQgaWQpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1fdGV4dHVyZXMuY29udGFpbnMoaWQpOyB9CisKKyAgICAvLyBDQ1JlbmRlcmVyQ2xp
ZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgZGV2aWNlVmll
d3BvcnRTaXplKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92aWV3cG9ydFNpemU7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IENDTGF5ZXJUcmVlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbV9zZXR0aW5nczsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29u
dGV4dCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxl
dGUoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXllckRhbWFn
ZSgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJl
cygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlBbGxvY2F0aW9uTGlt
aXRCeXRlcyhzaXplX3QpIE9WRVJSSURFIHsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NUZXN0UmVu
ZGVyUGFzcyhDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpCi0gICAgICAgIDogQ0NSZW5kZXJQYXNz
KHN1cmZhY2UpCi0gICAgewotICAgIH0KKyAgICBDQ1Rlc3RSZW5kZXJlcihXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KSA6IExheWVyUmVuZGVyZXJDaHJvbWl1bSh0aGlzLCBj
b250ZXh0LCBVbnRocm90dGxlZFVwbG9hZGVyKSB7IH0KIAotcHVibGljOgotICAgIHZvaWQgYXBw
ZW5kUXVhZChQYXNzT3duUHRyPENDRHJhd1F1YWQ+IHF1YWQpCi0gICAgewotICAgICAgICBtX3F1
YWRMaXN0LmFwcGVuZChxdWFkKTsKLSAgICB9Citwcml2YXRlOgorICAgIENDTGF5ZXJUcmVlU2V0
dGluZ3MgbV9zZXR0aW5nczsKKyAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOworICAgIEhhc2hT
ZXQ8aW50PiBtX3RleHR1cmVzOwogfTsKIAotc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNz
PiBjcmVhdGVEdW1teVJlbmRlclBhc3MoUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYgdGVzdERh
dGEpCitzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZUR1bW15UmVuZGVyUGFz
cyhSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSwgaW50IGlkKQogewotICAgIE93
blB0cjxDQ0xheWVySW1wbD4gbGF5ZXJJbXBsID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKLSAg
ICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBuZXcgRmFrZVJlbmRlclN1cmZhY2Uo
bGF5ZXJJbXBsLmdldCgpKTsKLSAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW5kZXJQYXNzUHRy
ID0gQ0NUZXN0UmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UpOworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gbGF5ZXJJbXBsKENDTGF5ZXJJbXBsOjpjcmVhdGUoaWQpKTsKKyAgICBPd25Q
dHI8Q0NSZW5kZXJTdXJmYWNlPiByZW5kZXJTdXJmYWNlKGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1
cmZhY2UobGF5ZXJJbXBsLmdldCgpKSkpOworICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlbmRl
clBhc3NQdHIoQ0NUZXN0UmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UuZ2V0KCksIGxh
eWVySW1wbC0+aWQoKSkpOwogCi0gICAgdGVzdERhdGEucmVuZGVyU3VyZmFjZVN0b3JlLmFwcGVu
ZChhZG9wdFB0cihyZW5kZXJTdXJmYWNlKSk7CisgICAgdGVzdERhdGEucmVuZGVyU3VyZmFjZVN0
b3JlLmFwcGVuZChyZW5kZXJTdXJmYWNlLnJlbGVhc2UoKSk7CiAgICAgdGVzdERhdGEubGF5ZXJT
dG9yZS5hcHBlbmQobGF5ZXJJbXBsLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJlbmRlclBhc3NQ
dHIucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERh
dGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYgdGVz
dERhdGEpCitzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hh
ciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYgdGVzdERhdGEsIENDVGVz
dFJlbmRlcmVyKiByZW5kZXJlcikKIHsKKyAgICByZW5kZXJlci0+Y2xlYXJDYWNoZWRUZXh0dXJl
cygpOworCiAgICAgLy8gT25lIHNoYXJlZCBzdGF0ZSBmb3IgYWxsIHF1YWRzIC0gd2UgZG9uJ3Qg
bmVlZCB0aGUgY29ycmVjdCBkZXRhaWxzCiAgICAgdGVzdERhdGEuc2hhcmVkUXVhZFN0YXRlID0g
Q0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBJbnRSZWN0KCksIEludFJlY3QoKSwgMS4wLCB0cnVlKTsK
IAogICAgIGNvbnN0IGNoYXIqIGN1cnJlbnRDaGFyID0gdGVzdFNjcmlwdDsKIAogICAgIC8vIFBy
ZS1jcmVhdGUgcm9vdCBwYXNzCi0gICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcm9vdFJlbmRlclBh
c3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3ModGVzdERhdGEpOwotICAgIHRlc3REYXRhLnJlbmRl
clBhc3NJZC5pbnNlcnQoc3RkOjpwYWlyPENDUmVuZGVyUGFzcyosIGNoYXI+KHJvb3RSZW5kZXJQ
YXNzLmdldCgpLCB0ZXN0U2NyaXB0WzBdKSk7Ci0gICAgdGVzdERhdGEucmVuZGVyUGFzc0NhY2hl
Lmluc2VydChzdGQ6OnBhaXI8Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50cnk+KHRlc3RTY3JpcHRb
MF0sIFJlbmRlclBhc3NDYWNoZUVudHJ5KHJvb3RSZW5kZXJQYXNzLnJlbGVhc2UoKSkpKTsKLSAg
ICB3aGlsZSAoKmN1cnJlbnRDaGFyICE9ICdcMCcpIHsKKyAgICBjaGFyIHJvb3RSZW5kZXJQYXNz
SWQgPSB0ZXN0U2NyaXB0WzBdOworICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJvb3RSZW5kZXJQ
YXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRhLCByb290UmVuZGVyUGFzc0lkKTsK
KyAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuaW5zZXJ0KHN0ZDo6cGFpcjxDQ1JlbmRlclBhc3Mq
LCBjaGFyPihyb290UmVuZGVyUGFzcy5nZXQoKSwgcm9vdFJlbmRlclBhc3NJZCkpOworICAgIHRl
c3REYXRhLnJlbmRlclBhc3NDYWNoZS5pbnNlcnQoc3RkOjpwYWlyPGNoYXIsIFJlbmRlclBhc3ND
YWNoZUVudHJ5Pihyb290UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeShyb290UmVu
ZGVyUGFzcy5yZWxlYXNlKCkpKSk7CisgICAgd2hpbGUgKCpjdXJyZW50Q2hhcikgewogICAgICAg
ICBjaGFyIHJlbmRlclBhc3NJZCA9IGN1cnJlbnRDaGFyWzBdOwogICAgICAgICBjdXJyZW50Q2hh
cisrOwogCkBAIC0yOTkxLDcgKzI5NjgsNyBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQ
YXNzVGVzdERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YQogICAg
ICAgICByZW5kZXJQYXNzID0gdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlW3JlbmRlclBhc3NJZF0u
cmVuZGVyUGFzc1B0ci5yZWxlYXNlKCk7CiAKICAgICAgICAgLy8gQ3ljbGUgdGhyb3VnaCBxdWFk
IGRhdGEgYW5kIGNyZWF0ZSBhbGwgcXVhZHMKLSAgICAgICAgd2hpbGUgKCpjdXJyZW50Q2hhciAh
PSAnXG4nICYmICpjdXJyZW50Q2hhciAhPSAnXDAnKSB7CisgICAgICAgIHdoaWxlICgqY3VycmVu
dENoYXIgJiYgKmN1cnJlbnRDaGFyICE9ICdcbicpIHsKICAgICAgICAgICAgIGlmICgqY3VycmVu
dENoYXIgPT0gJ3MnKSB7CiAgICAgICAgICAgICAgICAgLy8gU29saWQgY29sb3IgZHJhdyBxdWFk
CiAgICAgICAgICAgICAgICAgT3duUHRyPENDRHJhd1F1YWQ+IHF1YWQgPSBDQ1NvbGlkQ29sb3JE
cmF3UXVhZDo6Y3JlYXRlKHRlc3REYXRhLnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgSW50UmVjdCgw
LCAwLCAxMCwgMTApLCBTS19Db2xvcldISVRFKTsKQEAgLTMwMDEsMTMgKzI5NzgsMTQgQEAgc3Rh
dGljIHZvaWQgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IGNoYXIqIHRlc3RTY3Jp
cHQsIFJlbmRlclBhc3NSZW1vdmEKICAgICAgICAgICAgIH0gZWxzZSBpZiAoKCpjdXJyZW50Q2hh
ciA+PSAnQScpICYmICgqY3VycmVudENoYXIgPD0gJ1onKSkgewogICAgICAgICAgICAgICAgIC8v
IFJlbmRlclBhc3MgZHJhdyBxdWFkCiAgICAgICAgICAgICAgICAgY2hhciBuZXdSZW5kZXJQYXNz
SWQgPSAqY3VycmVudENoYXI7CisgICAgICAgICAgICAgICAgQVNTRVJUX05FKHJvb3RSZW5kZXJQ
YXNzSWQsIG5ld1JlbmRlclBhc3NJZCk7CiAgICAgICAgICAgICAgICAgY3VycmVudENoYXIrKzsK
ICAgICAgICAgICAgICAgICBib29sIGhhc1RleHR1cmUgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICBib29sIGNvbnRlbnRzQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgaWYgKCpjdXJyZW50Q2hhciA9PSAnWycpIHsKICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudENoYXIrKzsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgqY3VycmVudENoYXIg
IT0gJ10nKSAmJiAoKmN1cnJlbnRDaGFyICE9ICdcMCcpKSB7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlICgqY3VycmVudENoYXIgJiYgKmN1cnJlbnRDaGFyICE9ICddJykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoICgqY3VycmVudENoYXIpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ2MnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzQ2hh
bmdlZCA9IGZhbHNlOwpAQCAtMzAyNSwyMiArMzAwMywyNCBAQCBzdGF0aWMgdm9pZCBjb25maWd1
cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1Jl
bW92YQogICAgICAgICAgICAgICAgIENDUmVuZGVyUGFzcyogcmVmUmVuZGVyUGFzc1B0cjsKIAog
ICAgICAgICAgICAgICAgIGlmICh0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGUuZmluZChuZXdSZW5k
ZXJQYXNzSWQpID09IHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZS5lbmQoKSkgewotICAgICAgICAg
ICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZWZSZW5kZXJQYXNzID0gY3JlYXRlRHVt
bXlSZW5kZXJQYXNzKHRlc3REYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1RleHR1
cmUpCisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci0+c2V0SGF2ZUNhY2hlZFJlc291
cmNlc0ZvclJlbmRlclBhc3NJZChuZXdSZW5kZXJQYXNzSWQpOworCisgICAgICAgICAgICAgICAg
ICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlZlJlbmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRl
clBhc3ModGVzdERhdGEsIG5ld1JlbmRlclBhc3NJZCk7CiAgICAgICAgICAgICAgICAgICAgIHJl
ZlJlbmRlclBhc3NQdHIgPSByZWZSZW5kZXJQYXNzLmdldCgpOwotICAgICAgICAgICAgICAgICAg
ICBGYWtlUmVuZGVyU3VyZmFjZSogcmVmUmVuZGVyU3VyZmFjZSA9IHN0YXRpY19jYXN0PEZha2VS
ZW5kZXJTdXJmYWNlKj4ocmVmUmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmVmUmVuZGVyU3VyZmFjZS0+c2V0SGFzQ2FjaGVkVGV4dHVyZShoYXNUZXh0
dXJlKTsKLSAgICAgICAgICAgICAgICAgICAgcmVmUmVuZGVyU3VyZmFjZS0+c2V0Q29udGVudHND
aGFuZ2VkKGNvbnRlbnRzQ2hhbmdlZCk7CiAgICAgICAgICAgICAgICAgICAgIHRlc3REYXRhLnJl
bmRlclBhc3NJZC5pbnNlcnQoc3RkOjpwYWlyPENDUmVuZGVyUGFzcyosIGNoYXI+KHJlZlJlbmRl
clBhc3MuZ2V0KCksIG5ld1JlbmRlclBhc3NJZCkpOwogICAgICAgICAgICAgICAgICAgICB0ZXN0
RGF0YS5yZW5kZXJQYXNzQ2FjaGUuaW5zZXJ0KHN0ZDo6cGFpcjxjaGFyLCBSZW5kZXJQYXNzQ2Fj
aGVFbnRyeT4obmV3UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeShyZWZSZW5kZXJQ
YXNzLnJlbGVhc2UoKSkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgcmVmUmVuZGVyUGFzc1B0ciA9IHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZVtuZXdSZW5k
ZXJQYXNzSWRdLnJlbmRlclBhc3M7CiAKLSAgICAgICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQ
YXNzRHJhd1F1YWQ+IHF1YWQgPSBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHRlc3REYXRh
LnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgSW50UmVjdCgpLCByZWZSZW5kZXJQYXNzUHRyLCBpc1Jl
cGxpY2EsIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucygpLCBXZWJLaXQ6OldlYkZpbHRlck9w
ZXJhdGlvbnMoKSwgMSk7CisgICAgICAgICAgICAgICAgSW50UmVjdCBxdWFkUmVjdCA9IEludFJl
Y3QoMCwgMCwgMSwgMSk7CisgICAgICAgICAgICAgICAgSW50UmVjdCBjb250ZW50c0NoYW5nZWRS
ZWN0ID0gY29udGVudHNDaGFuZ2VkID8gcXVhZFJlY3QgOiBJbnRSZWN0KCk7CisgICAgICAgICAg
ICAgICAgT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBxdWFkID0gQ0NSZW5kZXJQYXNzRHJh
d1F1YWQ6OmNyZWF0ZSh0ZXN0RGF0YS5zaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHF1YWRSZWN0LCBy
ZWZSZW5kZXJQYXNzUHRyLCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucygp
LCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMoKSwgMSwgY29udGVudHNDaGFuZ2VkUmVjdCk7
CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q0NUZXN0UmVuZGVyUGFzcyo+KHJlbmRlclBh
c3MuZ2V0KCkpLT5hcHBlbmRRdWFkKHF1YWQucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzTGlzdC5pbnNlcnQoMCwgcmVuZGVy
UGFzcy5yZWxlYXNlKCkpOwotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyICE9ICdcMCcpCisgICAg
ICAgIGlmICgqY3VycmVudENoYXIpCiAgICAgICAgICAgICBjdXJyZW50Q2hhcisrOwogICAgIH0K
IH0KQEAgLTMwNjMsMTUgKzMwNDMsMTQgQEAgdm9pZCBkdW1wUmVuZGVyUGFzc1Rlc3REYXRhKGNv
bnN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEmIHRlc3REYXRhLCBjaGFyKiBidWYKICAgICAg
ICAgICAgICAgICAqcG9zID0gJ3MnOwogICAgICAgICAgICAgICAgIHBvcysrOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDQ0RyYXdRdWFkOjpSZW5kZXJQYXNzOgot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQqIHJlbmRlclBhc3NEcmF3UXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFk
Kj4oY3VycmVudFF1YWQpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3Mq
IHJlZlBhc3MgPSByZW5kZXJQYXNzRHJhd1F1YWQtPnJlbmRlclBhc3MoKTsKLSAgICAgICAgICAg
ICAgICAgICAgY2hhciByZWZQYXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmluZChyZWZQ
YXNzKS0+c2Vjb25kOwotICAgICAgICAgICAgICAgICAgICAqcG9zID0gcmVmUGFzc0lkOwotICAg
ICAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXNlIENDRHJhd1F1YWQ6OlJlbmRlclBhc3M6IHsKKyAgICAgICAgICAgICAgICBDQ1JlbmRlclBh
c3NEcmF3UXVhZCogcmVuZGVyUGFzc0RyYXdRdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNz
RHJhd1F1YWQqPihjdXJyZW50UXVhZCk7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NSZW5kZXJQ
YXNzKiByZWZQYXNzID0gcmVuZGVyUGFzc0RyYXdRdWFkLT5yZW5kZXJQYXNzKCk7CisgICAgICAg
ICAgICAgICAgY2hhciByZWZQYXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmluZChyZWZQ
YXNzKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICpwb3MgPSByZWZQYXNzSWQ7CisgICAgICAg
ICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICpwb3MgPSAneCc7CiAgICAgICAg
ICAgICAgICAgcG9zKys7CkBAIC0zMjM1LDE1ICszMjE0LDE5IEBAIHN0YXRpYyB2b2lkIHZlcmlm
eVJlbmRlclBhc3NUZXN0RGF0YShUZXN0Q2FzZSYgdGVzdENhc2UsIFJlbmRlclBhc3NSZW1vdmFs
VGVzdERhCiAgICAgRVhQRUNUX1NUUkVRKHRlc3RDYXNlLmV4cGVjdGVkUmVzdWx0LCBhY3R1YWxS
ZXN1bHQpIDw8ICJJbiB0ZXN0IGNhc2U6ICIgPDwgdGVzdENhc2UubmFtZTsKIH0KIAotVEVTVChS
ZW5kZXJQYXNzUmVtb3ZhbFRlc3QsIHRlc3RSZW1vdmVSZW5kZXJQYXNzZXMpCitURVNUX0YoQ0NM
YXllclRyZWVIb3N0SW1wbFRlc3QsIHRlc3RSZW1vdmVSZW5kZXJQYXNzZXMpCiB7CisgICAgT3du
UHRyPENDR3JhcGhpY3NDb250ZXh0PiBjb250ZXh0KGNyZWF0ZUNvbnRleHQoKSk7CisgICAgV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gY29udGV4dC0+Y29udGV4dDNE
KCk7CisgICAgQVNTRVJUX1RSVUUoY29udGV4dDNkKTsKKyAgICBPd25QdHI8Q0NUZXN0UmVuZGVy
ZXI+IHJlbmRlcmVyKENDVGVzdFJlbmRlcmVyOjpjcmVhdGUoY29udGV4dDNkKSk7CisKICAgICBp
bnQgdGVzdENhc2VJbmRleCA9IDA7CiAgICAgd2hpbGUgKHJlbW92ZVJlbmRlclBhc3Nlc0Nhc2Vz
W3Rlc3RDYXNlSW5kZXhdLm5hbWUpIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7CiAgICAgICAgIFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEgdGVzdERhdGE7
CiAgICAgICAgIENDUmVuZGVyUGFzc0xpc3Qgc2tpcHBlZFBhc3NlczsKLSAgICAgICAgY29uZmln
dXJlUmVuZGVyUGFzc1Rlc3REYXRhKHJlbW92ZVJlbmRlclBhc3Nlc0Nhc2VzW3Rlc3RDYXNlSW5k
ZXhdLmluaXRTY3JpcHQsIHRlc3REYXRhKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6
cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKHRlc3REYXRhLnJlbmRlclBhc3NMaXN0LCBz
a2lwcGVkUGFzc2VzKTsKKyAgICAgICAgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKHJlbW92
ZVJlbmRlclBhc3Nlc0Nhc2VzW3Rlc3RDYXNlSW5kZXhdLmluaXRTY3JpcHQsIHRlc3REYXRhLCBy
ZW5kZXJlci5nZXQoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92ZVBhc3Nl
c1dpdGhDYWNoZWRUZXh0dXJlcyh0ZXN0RGF0YS5yZW5kZXJQYXNzTGlzdCwgc2tpcHBlZFBhc3Nl
cywgcmVuZGVyZXIuZ2V0KCkpOwogICAgICAgICB2ZXJpZnlSZW5kZXJQYXNzVGVzdERhdGEocmVt
b3ZlUmVuZGVyUGFzc2VzQ2FzZXNbdGVzdENhc2VJbmRleF0sIHRlc3REYXRhKTsKICAgICAgICAg
dGVzdENhc2VJbmRleCsrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCmluZGV4IGVlNWUyOTA3ZGUxZDM1
ZTJjZWI1NmZlNGViOTAwYjg2ZTc1ZjA4YmIuLjIyZWQ1YTk5Nzg5NDA5NjdmZDEyODczYzM0NzUy
OTY4ZDBkMjEzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHN0cnVjdCBD
Q09jY2x1c2lvblRyYWNrZXJUZXN0SW1wbFRocmVhZFR5cGVzIHsKICAgICBzdGF0aWMgaW50IG5l
eHRDQ0xheWVySW1wbElkOwogfTsKIAotaW50IENDT2NjbHVzaW9uVHJhY2tlclRlc3RJbXBsVGhy
ZWFkVHlwZXM6Om5leHRDQ0xheWVySW1wbElkID0gMDsKK2ludCBDQ09jY2x1c2lvblRyYWNrZXJU
ZXN0SW1wbFRocmVhZFR5cGVzOjpuZXh0Q0NMYXllckltcGxJZCA9IDE7CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFR5cGVzLCBib29sIG9wYXF1ZUxheWVycz4KIGNsYXNzIENDT2NjbHVzaW9uVHJhY2tl
clRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcAppbmRleCAxMGVlYjBmNzQ0ODE4NGQyM2My
Y2U5ZjA1Nzk3NGMyOWE3MGQ2NTMyLi5kMGQ4N2QyNTI0N2MwM2FiMjBhMzFlYTcwNDFkNDk1NzFl
M2FiMDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUXVhZEN1
bGxlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3Vs
bGVyVGVzdC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8Q0NM
YXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGEKIAog
c3RhdGljIFBhc3NPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gbWFrZUxheWVyKENDVGlsZWRMYXll
ckltcGwqIHBhcmVudCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zv
cm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUs
IGNvbnN0IEludFJlY3QmIGxheWVyT3BhcXVlUmVjdCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHN1
cmZhY2VMYXllckxpc3QpCiB7Ci0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IGxheWVyID0g
Q0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBs
PiBsYXllciA9IENDVGlsZWRMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICBPd25QdHI8Q0NMYXll
clRpbGluZ0RhdGE+IHRpbGVyID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0ZShJbnRTaXplKDEw
MCwgMTAwKSwgQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICB0aWxlci0+
c2V0Qm91bmRzKGxheWVyUmVjdC5zaXplKCkpOwogICAgIGxheWVyLT5zZXRUaWxpbmdEYXRhKCp0
aWxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVy
U3VyZmFjZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1
cmZhY2VUZXN0LmNwcAppbmRleCBjOGIwZWRhZWQxOGEyMmVkMzQ0OGQ5MWJlZjg1YTFhNjlkZmQy
ZDQ3Li5iNjVlNmU3MmJmNThjMWYzMDBhZmVhY2EwZDE5NmMxMzRlOWJlNWRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAK
QEAgLTU3LDcgKzU3LDcgQEAgVEVTVChDQ1JlbmRlclN1cmZhY2VUZXN0LCB2ZXJpZnlTdXJmYWNl
Q2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICAvLyBUaGlzIHdpbGwgZmFrZSB0aGF0IHdl
IGFyZSBvbiB0aGUgY29ycmVjdCB0aHJlYWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCiAgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxUaHJlYWQ7CiAKLSAgICBPd25QdHI8Q0NMYXll
ckltcGw+IG93bmluZ0xheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IG93bmluZ0xheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICBv
d25pbmdMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIEFTU0VSVF9UUlVFKG93bmlu
Z0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIENDUmVuZGVyU3VyZmFjZSogcmVuZGVyU3Vy
ZmFjZSA9IG93bmluZ0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CkBAIC05NSw3ICs5NSw3IEBAIFRF
U1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwgc2FuaXR5Q2hlY2tTdXJmYWNlQ3JlYXRlc0NvcnJlY3RT
aGFyZWRRdWFkU3RhdGUpCiAgICAgLy8gVGhpcyB3aWxsIGZha2UgdGhhdCB3ZSBhcmUgb24gdGhl
IGNvcnJlY3QgdGhyZWFkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgogICAgIERlYnVnU2NvcGVkU2V0
SW1wbFRocmVhZCBzZXRJbXBsVGhyZWFkOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBvd25p
bmdMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBvd25pbmdMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAgICAgb3duaW5nTGF5ZXIt
PmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICBBU1NFUlRfVFJVRShvd25pbmdMYXllci0+cmVu
ZGVyU3VyZmFjZSgpKTsKICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBvd25p
bmdMYXllci0+cmVuZGVyU3VyZmFjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAKaW5kZXggYjQ3Njg1
ZGY0NGMwMTdiNWE4ZTYwYjE5YWYzMWZiZDZiZmYzZmM2ZC4uMjI3NjNjZWYzMzllNWJmZWVhOTIw
YTU0M2FkYzRmZjViMTFjYjY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwCkBAIC00Nyw3ICs0Nyw3
IEBAIFRFU1QoQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5VGlsaW5nQ29tcGxldGVB
bmROb092ZXJsYXApCiAgICAgSW50U2l6ZSBsYXllclNpemUgPSBJbnRTaXplKDgwMCwgNjAwKTsK
ICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVy
U2l6ZSk7CiAKLSAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBsYXllciA9IENDU29s
aWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93blB0cjxDQ1NvbGlkQ29sb3JMYXll
ckltcGw+IGxheWVyID0gQ0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAgICAgbGF5
ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CiAgICAgbGF5ZXItPnNl
dEJvdW5kcyhsYXllclNpemUpOwogCkBAIC02OCw3ICs2OCw3IEBAIFRFU1QoQ0NTb2xpZENvbG9y
TGF5ZXJJbXBsVGVzdCwgdmVyaWZ5Q29ycmVjdEJhY2tncm91bmRDb2xvckluUXVhZCkKICAgICBJ
bnRTaXplIGxheWVyU2l6ZSA9IEludFNpemUoMTAwLCAxMDApOwogICAgIEludFJlY3QgdmlzaWJs
ZUxheWVyUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXJTaXplKTsKIAotICAgIE93blB0
cjxDQ1NvbGlkQ29sb3JMYXllckltcGw+IGxheWVyID0gQ0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgT3duUHRyPENDU29saWRDb2xvckxheWVySW1wbD4gbGF5ZXIgPSBDQ1Nv
bGlkQ29sb3JMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVy
UmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKICAgICBsYXllci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7
CiAgICAgbGF5ZXItPnNldEJhY2tncm91bmRDb2xvcih0ZXN0Q29sb3IpOwpAQCAtOTEsNyArOTEs
NyBAQCBURVNUKENDU29saWRDb2xvckxheWVySW1wbFRlc3QsIHZlcmlmeUNvcnJlY3RPcGFjaXR5
SW5RdWFkKQogICAgIEludFNpemUgbGF5ZXJTaXplID0gSW50U2l6ZSgxMDAsIDEwMCk7CiAgICAg
SW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllclNpemUp
OwogCi0gICAgT3duUHRyPENDU29saWRDb2xvckxheWVySW1wbD4gbGF5ZXIgPSBDQ1NvbGlkQ29s
b3JMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBs
PiBsYXllciA9IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgIGxheWVyLT5z
ZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwogICAgIGxheWVyLT5zZXRCb3Vu
ZHMobGF5ZXJTaXplKTsKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkob3BhY2l0eSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllckltcGxUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3Qu
Y3BwCmluZGV4IDg1ZGFlYTg2YjZkYjk4NGUyZjM0MzAzY2NjOWQ2M2VjMzU0ZTQ1ZjMuLmVmYjNh
NmExNjkwMzE4YzU3MTVkODA1NTFkOWJmMTg2M2RhNmY4NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwCkBAIC00Myw3
ICs0Myw3IEBAIG5hbWVzcGFjZSB7CiAvLyB2aXNpYmlsaXR5IG9mIHRoZSBlbnRpcmUgbGF5ZXIg
c2l6ZS4KIHN0YXRpYyBQYXNzT3duUHRyPENDVGlsZWRMYXllckltcGw+IGNyZWF0ZUxheWVyKGNv
bnN0IEludFNpemUmIHRpbGVTaXplLCBjb25zdCBJbnRTaXplJiBsYXllclNpemUsIENDTGF5ZXJU
aWxpbmdEYXRhOjpCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXJUZXhlbHMpCiB7Ci0gICAgT3duUHRy
PENDVGlsZWRMYXllckltcGw+IGxheWVyID0gQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKDApOwor
ICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllciA9IENDVGlsZWRMYXllckltcGw6OmNy
ZWF0ZSgxKTsKICAgICBPd25QdHI8Q0NMYXllclRpbGluZ0RhdGE+IHRpbGVyID0gQ0NMYXllclRp
bGluZ0RhdGE6OmNyZWF0ZSh0aWxlU2l6ZSwgYm9yZGVyVGV4ZWxzKTsKICAgICB0aWxlci0+c2V0
Qm91bmRzKGxheWVyU2l6ZSk7CiAgICAgbGF5ZXItPnNldFRpbGluZ0RhdGEoKnRpbGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9t
aXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVuZGVyZXJD
aHJvbWl1bVRlc3QuY3BwCmluZGV4IGNmZGNkYzE1NmE3MmI2OWU5OGM2MTZhZGVhYWMyNDE4Y2Yy
YjY2ZTQuLjljOWVjMjViMDNlZDEwYjUyOTExOGZlN2NlMTBiYzNkMTRlMWU0NzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9taXVtVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRlcmVyQ2hy
b21pdW1UZXN0LmNwcApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9tZW1v
cnlBbGxvY2F0aW9uTGltaXRCeXRlcygwKQogICAgIHsKICAgICAgICAgbV9yb290TGF5ZXItPmNy
ZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgbV9yb290UmVuZGVyUGFzcyA9IENDUmVuZGVy
UGFzczo6Y3JlYXRlKG1fcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgICAgICBtX3Jv
b3RSZW5kZXJQYXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUobV9yb290TGF5ZXItPnJlbmRlclN1
cmZhY2UoKSwgbV9yb290TGF5ZXItPmlkKCkpOwogICAgIH0KIAogICAgIC8vIENDUmVuZGVyZXJD
bGllbnQgbWV0aG9kcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGM5MzE1OGFiMmQzNTE0MjI4ZGNhZmU4
YTkzZjY4ODUwMTEzMTAxMmQuLjViMzEwNDJhZjBkZmMyNDg0NGUyNmVkOTNhNGVhNTU2MGE0YzI3
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNo
cm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExh
eWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtOTcsNyArOTcsNyBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6
OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsK
IAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBh
bmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgx
MDAsIDIwMCkpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1U
ZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVzKQogICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
OjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNo
cm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1
cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5
ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7
CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIAogICAgIC8vIFRoZSB0aWxl
IHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdv
IHRpbGVzLgpAQCAtMTgwLDcgKzE4MCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwdXNoRGVsZXRlZFRpbGVzKQogICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFn
ZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUo
NCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBs
YXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2Vy
LmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAg
T3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VD
Q1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKICAgICAv
LyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5kIHRoZW4g
cGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAwLCAyMDAp
KTsKQEAgLTIyNiw3ICsyMjYsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVz
aElkbGVQYWludFRpbGVzKQogICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+
IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCox
MDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXll
ciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdl
dCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3du
UHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
ckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKICAgICAvLyBU
aGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2aXNpYmxl
IHRpbGUgaW4gdGhlIGNlbnRlci4KICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAwLCA1MDAp
OwpAQCAtMjg1LDkgKzI4NSw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwdXNo
VGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6
Y3JlYXRlKDIqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbFRocmVhZDsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkp
KTsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbDEoYWRvcHRQdHIo
bmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5
ZXJJbXBsPiBsYXllckltcGwxKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkp
OwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwotICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsMihhZG9wdFB0cihuZXcgRmFrZUND
VGlsZWRMYXllckltcGwoMCkpKTsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxh
eWVySW1wbDIoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDIpKSk7CiAKICAgICAv
LyBGb3IgdGhpcyB0ZXN0IHdlIGhhdmUgdHdvIGxheWVycy4gbGF5ZXIxIGV4aGF1c3RzIG1vc3Qg
dGV4dHVyZSBtZW1vcnksIGxlYXZpbmcgcm9vbSBmb3IgMiBtb3JlIHRpbGVzIGZyb20KICAgICAv
LyBsYXllcjIsIGJ1dCBub3QgYWxsIHRocmVlIHRpbGVzLiBGaXJzdCB3ZSBwYWludCBsYXllcjEs
IGFuZCBvbmUgdGlsZSBmcm9tIGxheWVyMi4gVGhlbiB3aGVuIHdlIGlkbGUgcGFpbnQKQEAgLTM2
OCw3ICszNjgsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWlu
dGVkT2NjbHVkZWRUaWxlcykKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQq
MTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5n
ZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93
blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NU
aWxlZExheWVySW1wbCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgIFRlc3RD
Q09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEw
MHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgb25lIG9jY2x1ZGVkIHRpbGUsIGN1bGxzIGl0IGR1
cmluZyBwYWludCwgYnV0IHByZXBhaW50cyBpdC4KQEAgLTM5NSw3ICszOTUsNyBAQCBURVNUX0Yo
VGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQYWludCkK
ICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9
IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsK
ICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcg
RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVn
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExh
eWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkp
OworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAx
MDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGlsZXMuCiAg
ICAgLy8gSG93ZXZlciwgZHVyaW5nIHRoZSBwYWludCwgd2UgaW52YWxpZGF0ZSBvbmUgb2YgdGhl
IHRpbGVzLiBUaGlzIHNob3VsZApAQCAtNDIyLDggKzQyMiw4IEBAIFRFU1RfRihUaWxlZExheWVy
Q2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRPbk5leHRM
YXllcikKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAg
ICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYobmV3IEZh
a2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGxheWVyMUltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7
Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gbGF5ZXIxSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsK
KyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDIpKSk7CiAKICAgICBsYXllcjEtPnNldEJvdW5kcyhJbnRT
aXplKDEwMCwgMjAwKSk7CiAgICAgbGF5ZXIxLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3Qo
MCwgMCwgMTAwLCAyMDApKTsKQEAgLTQ2MCw4ICs0NjAsOCBAQCBURVNUX0YoVGlsZWRMYXllckNo
cm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25QcmV2aW91
c0xheQogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjEgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihuZXcgRmFr
ZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gbGF5ZXIxSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsK
LSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBsYXllcjFJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwor
ICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0cihuZXcg
RmFrZUNDVGlsZWRMYXllckltcGwoMikpKTsKIAogICAgIGxheWVyMS0+c2V0Qm91bmRzKEludFNp
emUoMTAwLCAyMDApKTsKICAgICBsYXllcjEtPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdCgw
LCAwLCAxMDAsIDIwMCkpOwpAQCAtNTAzLDcgKzUwMyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKICAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5
ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0
ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
VGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgx
KSkpOwogCiAgICAgLy8gSW52YWxpZGF0ZXMgOSB0aWxlcyBhbmQgdGhlbiBwYWludHMgb25lIHZp
c2libGUgdGlsZS4KICAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOwpAQCAtNTM3
LDcgKzUzNyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJv
U2l6ZWRMYXllcikKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0
dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAwLCAx
MDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gVGhlIGxheWVyJ3Mg
Ym91bmRzIGFyZSBlbXB0eS4KICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0OwpAQCAtNTc4LDcgKzU3
OCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJvU2l6ZWRB
bmltYXRpbmdMYXllcikKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0
ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIwMDAw
LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwog
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFk
b3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gUHJldGVuZCB0
aGUgbGF5ZXIgaXMgYW5pbWF0aW5nLgogICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtSXNBbmlt
YXRpbmcodHJ1ZSk7CkBAIC02MjUsNyArNjI1LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1
bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCiAgICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hy
b21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVy
ZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVh
ZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihu
ZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXll
ckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsK
IAogICAgIC8vIEludmFsaWRhdGUgdGhlIGxheWVyIGJ1dCBtYWtlIG5vbmUgb2YgaXQgdmlzaWJs
ZSwgc28gbm90aGluZyBwYWludHMuCiAgICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKQEAgLTY3OCw3
ICs2NzgsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50Tm9uVmlz
aWJsZUFuaW1hdGluZ0xheWVycykKICAgICBmb3IgKGludCBqID0gMDsgaGVpZ2h0W2pdOyArK2op
IHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IHdpZHRoW2ldOyArK2kpIHsKICAgICAgICAgICAg
IFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtl
VGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgICAgICAgICBP
d25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUND
VGlsZWRMYXllckltcGwoMCkpKTsKKyAgICAgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVy
SW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwog
CiAgICAgICAgICAgICAvLyBQcmV0ZW5kIHRoZSBsYXllciBpcyBhbmltYXRpbmcuCiAgICAgICAg
ICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKHRydWUpOwpAQCAtNzQ3LDcg
Kzc0Nyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRlRnJvbVBy
ZXBhcmUpCiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1h
bmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwg
MTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRS
ZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUND
VGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMCkpKTsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIEZha2VUZXh0dXJlQWxs
b2NhdG9yIGZha2VBbGxvY2F0b3I7CiAgICAgRmFrZVRleHR1cmVDb3BpZXIgZmFrZUNvcGllcjsK
QEAgLTgzNiw3ICs4MzYsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdmVyaWZ5
SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIE93blB0cjxDQ1ByaW9y
aXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1
cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGls
ZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9t
aXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwo
YWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VD
Q1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsKDEpKSk7CiAKICAgICAvLyBDcmVhdGUgYSBsYXllciB3aXRoIG9uZSB0aWxlLgogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOwpAQCAtMTAwMSw3ICsxMDAxLDcgQEAg
VEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQogICAgIGNjTGF5
ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsIHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6
ZV90Pjo6bWF4KCkpOwogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBs
KGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOworICAgICAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoMSkpKTsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7CiAgICAgICAgIEVYUEVD
VF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7
CiAgICAgICAgIEVYUEVDVF9UUlVFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CkBAIC0xMDE5
LDcgKzEwMTksNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0
ZXMpCiAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgc3RkOjpudW1l
cmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CiAgICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNl
dEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7Cisg
ICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgICAgICB1cGRhdGVUZXh0dXJlcyg0KTsK
ICAgICAgICAgRVhQRUNUX0VRKDMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRlcigpLT51
cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNUX1RSVUUodXBkYXRlci5oYXNNb3JlVXBkYXRl
cygpKTsKQEAgLTEwMzYsNyArMTAzNiw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwYXJ0aWFsVXBkYXRlcykKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCg1MCwg
NTAsIDIwMCwgMTAwKSk7CiAgICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcklt
cGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgICAgIE93blB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxl
ZExheWVySW1wbCgxKSkpOwogICAgICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1
cGRhdGVyLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKICAgICAgICAgdXBk
YXRlVGV4dHVyZXMoNCk7CiAgICAgICAgIEVYUEVDVF9FUSgyLCBsYXllci0+ZmFrZUxheWVyVGV4
dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CkBAIC0xMDU0LDcgKzEwNTQsNyBAQCBURVNU
X0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAgICAgbGF5ZXItPmlu
dmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMzAwLCAyMDApKTsKICAgICB7CiAgICAgICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBPd25QdHI8RmFrZUND
VGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMCkpKTsKKyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwo
YWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAgICAgICAgIGxheWVyLT5w
dXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CiAgICAgfQogICAgIGNjTGF5ZXJUcmVl
SG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKQEAgLTEwNjMsNyArMTA2Myw3IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICBsYXllci0+aW52YWxpZGF0
ZVJlY3QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMTAwKSk7CiAgICAgewogICAgICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVk
TGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDAp
KSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgICAgICBjY0xheWVyVHJlZUhv
c3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpKTsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7CiAgICAgICAgIEVYUEVDVF9FUSg0LCBs
YXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CkBAIC0xMDgx
LDcgKzEwODEsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0
ZXMpCiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoNTAsIDUwLCAxMDAsIDEwMCkp
OwogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0g
ICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5l
dyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOworICAgICAgICBPd25QdHI8RmFrZUNDVGlsZWRM
YXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkp
KTsKICAgICAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgc3RkOjpu
dW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CiAgICAgICAgIHVwZGF0ZVRleHR1cmVzKDQp
OwogICAgICAgICBFWFBFQ1RfRVEoNCwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRhdGVyKCkt
PnVwZGF0ZUNvdW50KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151320</attachid>
            <date>2012-07-09 14:26:58 -0700</date>
            <delta_ts>2012-07-09 15:31:42 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-90573-20120709172657.patch</filename>
            <type>text/plain</type>
            <size>98633</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMyNzI4OGRmNDY4MDI1
ODk2NDNlZGQ3OWIzMTQ1ZmUyYzQwYTZiMy4uOTQ2ZmVjMGFlOGU0OTJhMjEwYWQ5NWFlMzQwYTNk
ZmUxOTI3ZTA2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA3LTA1ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gRGVj
b3VwbGUgUmVuZGVyUGFzcyBkcmF3aW5nIGZyb20gQ0NSZW5kZXJTdXJmYWNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IEFkcmllbm5lIFdhbGtlci4KKworICAgICAgICBSZW1vdmVzIHRoZSBtYW5hZ2Vk
IHRleHR1cmVzIGZyb20gQ0NSZW5kZXJTdXJmYWNlIGFuZCBzdG9yZXMgdGhlbSBpbiBhCisgICAg
ICAgIEhhc2hNYXAgaW4gTGF5ZXJSZW5kZXJlckNocm9taXVtLgorCisgICAgICAgIEF0IHRoZSBz
dGFydCBvZiBhIGZyYW1lLCBhbGwgdGV4dHVyZXMgZm9yIHRoZSBmcmFtZSBhcmUgcmVzZXJ2ZWQs
IGFuZAorICAgICAgICB1bm5lZWRlZCB0ZXh0dXJlcyBhcmUgZGVsZXRlZC4gQWZ0ZXIgZWFjaCBx
dWFkIGlzIGRyYXduLCBldmljdGVkIHRleHR1cmVzCisgICAgICAgIChpZSB0ZW1wb3JhcnkgdGV4
dHVyZXMgdXNlZCBmb3IgYmFja2dyb3VuZCBmaWx0ZXJzKSBhcmUgZGVsZXRlZCB0byBrZWVwCisg
ICAgICAgIHdpdGhpbiBtZW1vcnkgbGltaXRzLiBBdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSwgYWxs
IHN1cmZhY2UgY29udGVudHMKKyAgICAgICAgdGV4dHVyZXMgYXJlIGtlcHQgcmVzZXJ2ZWQgYW5k
IHRodXMgbm90IGRlbGV0ZWQuCisKKyAgICAgICAgV2UgYWRkIGEgbnVtZXJpYyBpZGVudGlmaWVy
IHRvIENDUmVuZGVyUGFzcyB3aGljaCBjYW4gYmUgdXNlZCB0bworICAgICAgICBpZGVudGlmeSB0
aGUgcGFzcyBhY3Jvc3Mgc2VyaWFsaXphdGlvbiBpbiB0aGUgZnV0dXJlLCBhbmQgaXMgdXNlZAor
ICAgICAgICBpbiB0aGUgaW50ZXJmYWNlIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bS4gQWxzbyB3
ZSBhZGQgdG8gdGhlCisgICAgICAgIENDUmVuZGVyUGFzcyBhIGNvbnRlbnRzQ2hhbmdlZFNpbmNl
TGFzdEZyYW1lKCkgZmxhZyBzbyB0aGF0IHRoZQorICAgICAgICB2YWx1ZSBkb2VzIG5vdCBuZWVk
IHRvIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBDQ1JlbmRlclN1cmZhY2UuCisKKyAgICAgICAgVGhl
IHBvaW50ZXIgZnJvbSBDQ1JlbmRlclBhc3MgdG8gQ0NSZW5kZXJTdXJmYWNlIHJlbWFpbnMgZm9y
IHNvbWUKKyAgICAgICAgY29kZSBpbiB0aGUgQ0NMYXllclRyZWVIb3N0SW1wbCwgYW5kIHdpbGwg
YmUgYWRkcmVzc2VkIGluIHRoZSBmdXR1cmUsIGJ1dAorICAgICAgICB0aGUgcG9pbnRlciBpcyBu
byBsb25nZXIgdXNlZCBhdCBhbGwgd2hpbGUgZHJhd2luZyBhIGZyYW1lIGluc2lkZQorICAgICAg
ICBMYXllclJlbmRlcmVyQ2hyb21pdW0uCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0
ZXN0cywgbm8gaW50ZW5kZWQgY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkZWNpZGVSZW5k
ZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJl
bmRlclBhc3NJZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0Jh
Y2tncm91bmRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd1JlbmRlclBhc3NRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZmluaXNoRHJhd2luZ0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyUGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAg
KExheWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQYXNzZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NSZW5kZXJQYXNzOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNz
OjpDQ1JlbmRlclBhc3MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyUGFzcy5oOgorICAgICAgICAoQ0NSZW5kZXJQYXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDUmVuZGVyUGFzczo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzOjpz
ZXRGcmFtZWJ1ZmZlck91dHB1dFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
UmVuZGVyUGFzc0RyYXdRdWFkOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQ
YXNzRHJhd1F1YWQ6OkNDUmVuZGVyUGFzc0RyYXdRdWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5oOgorICAgICAgICAoQ0NS
ZW5kZXJQYXNzRHJhd1F1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NSZW5kZXJQYXNzRHJhd1F1
YWQ6OnJlbmRlclBhc3NJZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1JlbmRlclBhc3NEcmF3UXVh
ZDo6Y29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclN1cmZhY2U6OmFwcGVuZFF1YWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoQ0NSZW5kZXJTdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmg6CisgICAgICAgIChDQ1JlbmRlcmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllckltcGw6OnB1c2hUaWxlUHJvcGVydGllcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5o
OgorICAgICAgICAoQ0NUaWxlZExheWVySW1wbCk6CisKIDIwMTItMDctMDkgIEpvc2h1YSBOZXR0
ZXJmaWVsZCAgPGpuZXR0ZXJmaWVsZEByaW0uY29tPgogICAgICAgICBNYWtlIEdDM0QgYW5kIEUz
RCBtb3JlIG1haW50YWluYWJsZSBmb3IgR0xFUyBwbGF0Zm9ybXMKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNTY3CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDU3YjlmYTgwMjM2OTRmMGVjMmQwNTAxY2ZkZDQ0YzdmOTBmOGE2ZDQuLjlmZTZm
OTgwYjkwOTc4YjNjNDY1Y2YyMDQ3MGI0N2I4YzA0MjM0ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDctMDUgIERhbmEgSmFuc2VucyAgPGRhbmFr
akBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBEZWNvdXBsZSBSZW5kZXJQYXNz
IGRyYXdpbmcgZnJvbSBDQ1JlbmRlclN1cmZhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNTczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRyaWVu
bmUgV2Fsa2VyLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3Bw
OgorICAgICAgICAqIHRlc3RzL0xheWVyUmVuZGVyZXJDaHJvbWl1bVRlc3QuY3BwOgorICAgICAg
ICAoRmFrZUNDUmVuZGVyZXJDbGllbnQ6OkZha2VDQ1JlbmRlcmVyQ2xpZW50KToKKwogMjAxMi0w
Ny0wMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIEhU
TUxDb2xsZWN0aW9uIFJlZkNvdW50ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IDgzNWRmYmQ3ZjE5N2MwOTRkNzQ5MzQ4OTE0Y2JjNjRhZjg4MTk3YmMuLjU5Y2Vk
ODY5YmJjNzIwOGQwM2Q1ZWNjZWIwZTEyYTczNjNhODkyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtMjc0LDggKzI3NCwxMCBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiAKIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpyZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCkKIHsKLSAgICBpZiAobV9pbXBs
VGV4dHVyZU1hbmFnZXIpCi0gICAgICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5ldmljdEFuZERl
bGV0ZUFsbFRleHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOworICAgIGlmICgh
bV9pbXBsVGV4dHVyZU1hbmFnZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3JlbmRlclBhc3NU
ZXh0dXJlcy5jbGVhcigpOworICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVk
VGV4dHVyZXMobV9pbXBsVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQpAQCAtMzE1LDEyICszMTcsNTQgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUmVuZGVyUGFzcyhjb25zdCBDQ1JlbmRl
clBhc3MqIHJlbmRlclBhc3MsIGNvbnMKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRl
Y2lkZVJlbmRlclBhc3NBbGxvY2F0aW9uc0ZvckZyYW1lKGNvbnN0IENDUmVuZGVyUGFzc0xpc3Qm
IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyKQogewotICAgIC8vIEZJWE1FOiBHZXQgdGhpcyBtZW1v
cnkgbGltaXQgZnJvbSBHUFUgTWVtb3J5IE1hbmFnZXIKLSAgICBzaXplX3QgY29udGVudHNNZW1v
cnlVc2VCeXRlcyA9IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNl
Qnl0ZXMoKTsKLSAgICBzaXplX3QgbWF4TGltaXRCeXRlcyA9IFRleHR1cmVNYW5hZ2VyOjpoaWdo
TGltaXRCeXRlcyh2aWV3cG9ydFNpemUoKSk7Ci0gICAgc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMg
PSBtYXhMaW1pdEJ5dGVzIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyA+IDB1ID8gbWF4TGltaXRC
eXRlcyAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMgOiAwdTsKKyAgICBIYXNoTWFwPGludCwgY29u
c3QgQ0NSZW5kZXJQYXNzKj4gcGFzc2VzSW5GcmFtZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlbmRlclBhc3Nlc0luRHJhd09yZGVyLnNpemUoKTsgKytpKQorICAgICAgICBwYXNzZXNJ
bkZyYW1lLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgcmVuZGVyUGFzc2Vz
SW5EcmF3T3JkZXJbaV0uZ2V0KCkpOworCisgICAgVmVjdG9yPGludD4gcGFzc2VzVG9EZWxldGU7
CisgICAgSGFzaE1hcDxpbnQsIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gPjo6Y29uc3RfaXRlcmF0
b3IgcGFzc0l0ZXJhdG9yOworICAgIGZvciAocGFzc0l0ZXJhdG9yID0gbV9yZW5kZXJQYXNzVGV4
dHVyZXMuYmVnaW4oKTsgcGFzc0l0ZXJhdG9yICE9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmVuZCgp
OyArK3Bhc3NJdGVyYXRvcikgeworICAgICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBh
c3NJbkZyYW1lID0gcGFzc2VzSW5GcmFtZS5nZXQocGFzc0l0ZXJhdG9yLT5maXJzdCk7CisgICAg
ICAgIGlmICghcmVuZGVyUGFzc0luRnJhbWUpIHsKKyAgICAgICAgICAgIHBhc3Nlc1RvRGVsZXRl
LmFwcGVuZChwYXNzSXRlcmF0b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgY29uc3QgSW50U2l6ZSYgcmVxdWlyZWRTaXplID0gcmVuZGVyUGFz
c0luRnJhbWUtPmZyYW1lYnVmZmVyT3V0cHV0UmVjdCgpLnNpemUoKTsKKyAgICAgICAgR0MzRGVu
dW0gcmVxdWlyZWRGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICAgICAgTWFu
YWdlZFRleHR1cmUqIHRleHR1cmUgPSBwYXNzSXRlcmF0b3ItPnNlY29uZC5nZXQoKTsKKyAgICAg
ICAgaWYgKCF0ZXh0dXJlIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHJlcXVpcmVkU2l6ZSwgcmVxdWly
ZWRGb3JtYXQpKSB7CisgICAgICAgICAgICBwYXNzZXNUb0RlbGV0ZS5hcHBlbmQocGFzc0l0ZXJh
dG9yLT5maXJzdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KIAot
ICAgIG1faW1wbFRleHR1cmVNYW5hZ2VyLT5zZXRNYXhNZW1vcnlMaW1pdEJ5dGVzKG1lbW9yeUxp
bWl0Qnl0ZXMpOworICAgIC8vIERlbGV0ZSBSZW5kZXJQYXNzIHRleHR1cmVzIGZyb20gdGhlIHBy
ZXZpb3VzIGZyYW1lIHRoYXQgd2lsbCBub3QgYmUgdXNlZCBhZ2Fpbi4KKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBhc3Nlc1RvRGVsZXRlLnNpemUoKTsgKytpKQorICAgICAgICBtX3JlbmRl
clBhc3NUZXh0dXJlcy5yZW1vdmUocGFzc2VzVG9EZWxldGVbaV0pOworICAgIG1faW1wbFRleHR1
cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9pbXBsVGV4dHVyZUFsbG9jYXRvci5n
ZXQoKSk7CisKKyAgICAvLyBBbGwgUmVuZGVyUGFzcyB0ZXh0dXJlcyBzaG91bGQgYmUgcmVzZXJ2
ZWQgZm9yIHRoZSBjdXJyZW50IGZyYW1lLiBFdmVyeSBSZW5kZXJQYXNzIHRleHR1cmUKKyAgICAv
LyBpcyBrZXB0IHJlc2VydmVkIHVudGlsIGl0IGlzIHJlbW92ZWQgYW5kIGRlbGV0ZWQuCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJQYXNzZXNJbkRyYXdPcmRlci5zaXplKCk7ICsr
aSkgeworICAgICAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1
cmVzLmdldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSk7CisgICAgICAgIGlmICgh
dGV4dHVyZSkgeworICAgICAgICAgICAgT3duUHRyPE1hbmFnZWRUZXh0dXJlPiBvd25UZXh0dXJl
ID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7Cisg
ICAgICAgICAgICB0ZXh0dXJlID0gb3duVGV4dHVyZS5nZXQoKTsKKyAgICAgICAgICAgIG1fcmVu
ZGVyUGFzc1RleHR1cmVzLnNldChyZW5kZXJQYXNzZXNJbkRyYXdPcmRlcltpXS0+aWQoKSwgb3du
VGV4dHVyZS5yZWxlYXNlKCkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgSW50U2l6ZSYg
cmVxdWlyZWRTaXplID0gcmVuZGVyUGFzc2VzSW5EcmF3T3JkZXJbaV0tPmZyYW1lYnVmZmVyT3V0
cHV0UmVjdCgpLnNpemUoKTsKKyAgICAgICAgR0MzRGVudW0gcmVxdWlyZWRGb3JtYXQgPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICAgICAgYm9vbCByZXNlcnZlZCA9IHRleHR1cmUtPnJl
c2VydmUocmVxdWlyZWRTaXplLCByZXF1aXJlZEZvcm1hdCk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQocmVzZXJ2ZWQsIHJlc2VydmVkKTsKKyAgICB9Cit9CisKK2Jvb2wgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKGludCBpZCkgY29uc3QK
K3sKKyAgICBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSA9IG1fcmVuZGVyUGFzc1RleHR1cmVzLmdl
dChpZCk7CisgICAgcmV0dXJuIHRleHR1cmUgJiYgdGV4dHVyZS0+dGV4dHVyZUlkKCk7CiB9CiAK
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpiZWdpbkRyYXdpbmdGcmFtZShjb25zdCBDQ1Jl
bmRlclBhc3MqIHJvb3RSZW5kZXJQYXNzKQpAQCAtNDE5LDYgKzQ2Myw4IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3UXVhZChjb25zdCBDQ0RyYXdRdWFkKiBxdWFkKQogICAgICAg
ICBkcmF3WVVWVmlkZW9RdWFkKHF1YWQtPnRvWVVWVmlkZW9EcmF3UXVhZCgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQorCisgICAgbV9pbXBsVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRU
ZXh0dXJlcyhtX2ltcGxUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJk
RHJhd1F1YWQqIHF1YWQpCkBAIC00ODgsNyArNTM0LDcgQEAgc3RhdGljIGlubGluZSBTa0JpdG1h
cCBhcHBseUZpbHRlcnMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25z
dAogICAgIHJldHVybiBDQ1JlbmRlclN1cmZhY2VGaWx0ZXJzOjphcHBseShmaWx0ZXJzLCBzb3Vy
Y2VUZXh0dXJlLT50ZXh0dXJlSWQoKSwgc291cmNlVGV4dHVyZS0+c2l6ZSgpLCBmaWx0ZXJDb250
ZXh0LmdldCgpKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3Jv
dW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCwgY29uc3QgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKQorUGFzc093blB0cjxN
YW5hZ2VkVGV4dHVyZT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRl
cnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQsIGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBjb250ZW50c0RldmljZVRyYW5zZm9ybSkKIHsKICAgICAvLyBUaGlzIG1ldGhv
ZCBkcmF3cyBhIGJhY2tncm91bmQgZmlsdGVyLCB3aGljaCBhcHBsaWVzIGEgZmlsdGVyIHRvIGFu
eSBwaXhlbHMgYmVoaW5kIHRoZSBxdWFkIGFuZCBzZWVuIHRocm91Z2ggaXRzIGJhY2tncm91bmQu
CiAgICAgLy8gVGhlIGFsZ29yaXRobSB3b3JrcyBhcyBmb2xsb3dzOgpAQCAtNTA2LDE0ICs1NTIs
MTMgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhj
b25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXUKIAogICAgIC8vIEZJWE1FOiBXaGVuIHRoaXMg
YWxnb3JpdGhtIGNoYW5nZXMsIHVwZGF0ZSBDQ0xheWVyVHJlZUhvc3Q6OnByaW9yaXRpemVUZXh0
dXJlcygpIGFjY29yZGluZ2x5LgogCi0gICAgQ0NSZW5kZXJTdXJmYWNlKiBkcmF3aW5nU3VyZmFj
ZSA9IHF1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpOwogICAgIGlmIChxdWFkLT5i
YWNrZ3JvdW5kRmlsdGVycygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIEZJWE1FOiBXZSBvbmx5IGFsbG93IGJhY2tncm91bmQg
ZmlsdGVycyBvbiBhbiBvcGFxdWUgcmVuZGVyIHN1cmZhY2UgYmVjYXVzZSBvdGhlciBzdXJmYWNl
cyBtYXkgY29udGFpbgogICAgIC8vIHRyYW5zbHVjZW50IHBpeGVscywgYW5kIHRoZSBjb250ZW50
cyBiZWhpbmQgdGhvc2UgdHJhbnNsdWNlbnQgcGl4ZWxzIHdvdWxkbid0IGhhdmUgdGhlIGZpbHRl
ciBhcHBsaWVkLgogICAgIGlmIChtX2N1cnJlbnRSZW5kZXJQYXNzLT5oYXNUcmFuc3BhcmVudEJh
Y2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBBU1NFUlQoIW1fY3VycmVudE1hbmFnZWRUZXh0dXJlKTsKIAogICAgIC8vIEZJWE1FOiBEbyBh
IHNpbmdsZSByZWFkYmFjayBmb3IgYm90aCB0aGUgc3VyZmFjZSBhbmQgcmVwbGljYSBhbmQgY2Fj
aGUgdGhlIGZpbHRlcmVkIHJlc3VsdHMgKG9uY2UgZmlsdGVyIHRleHR1cmVzIGFyZSBub3QgcmV1
c2VkKS4KQEAgLTUyOCwyMCArNTczLDIzIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1CiAKICAg
ICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IGRldmljZUJhY2tncm91bmRUZXh0dXJlID0gTWFuYWdl
ZFRleHR1cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7CiAgICAgaWYgKCFn
ZXRGcmFtZWJ1ZmZlclRleHR1cmUoZGV2aWNlQmFja2dyb3VuZFRleHR1cmUuZ2V0KCksIGRldmlj
ZVJlY3QpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
U2tCaXRtYXAgZmlsdGVyZWREZXZpY2VCYWNrZ3JvdW5kID0gYXBwbHlGaWx0ZXJzKHRoaXMsIHF1
YWQtPmJhY2tncm91bmRGaWx0ZXJzKCksIGRldmljZUJhY2tncm91bmRUZXh0dXJlLmdldCgpKTsK
ICAgICBpZiAoIWZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZC5nZXRUZXh0dXJlKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBHclRleHR1cmUqIHRleHR1
cmUgPSByZWludGVycHJldF9jYXN0PEdyVGV4dHVyZSo+KGZpbHRlcmVkRGV2aWNlQmFja2dyb3Vu
ZC5nZXRUZXh0dXJlKCkpOwogICAgIGludCBmaWx0ZXJlZERldmljZUJhY2tncm91bmRUZXh0dXJl
SWQgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlSGFuZGxlKCk7CiAKLSAgICBpZiAoIWRyYXdpbmdTdXJm
YWNlLT5wcmVwYXJlQmFja2dyb3VuZFRleHR1cmUodGhpcykpCi0gICAgICAgIHJldHVybjsKKyAg
ICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IGJhY2tncm91bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1
cmU6OmNyZWF0ZShtX2ltcGxUZXh0dXJlTWFuYWdlci5nZXQoKSk7CisgICAgaWYgKCFiYWNrZ3Jv
dW5kVGV4dHVyZS0+cmVzZXJ2ZShxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGNvbnN0IENDUmVu
ZGVyUGFzcyogdGFyZ2V0UmVuZGVyUGFzcyA9IG1fY3VycmVudFJlbmRlclBhc3M7Ci0gICAgaWYg
KHVzZU1hbmFnZWRUZXh0dXJlKGRyYXdpbmdTdXJmYWNlLT5iYWNrZ3JvdW5kVGV4dHVyZSgpLCBx
dWFkLT5xdWFkUmVjdCgpKSkgeworICAgIGJvb2wgdXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSA9IHVz
ZU1hbmFnZWRUZXh0dXJlKGJhY2tncm91bmRUZXh0dXJlLmdldCgpLCBxdWFkLT5xdWFkUmVjdCgp
KTsKKworICAgIGlmICh1c2luZ0JhY2tncm91bmRUZXh0dXJlKSB7CiAgICAgICAgIC8vIENvcHkg
dGhlIHJlYWRiYWNrIHBpeGVscyBmcm9tIGRldmljZSB0byB0aGUgYmFja2dyb3VuZCB0ZXh0dXJl
IGZvciB0aGUgc3VyZmFjZS4KICAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNl
VG9GcmFtZWJ1ZmZlclRyYW5zZm9ybTsKICAgICAgICAgZGV2aWNlVG9GcmFtZWJ1ZmZlclRyYW5z
Zm9ybS50cmFuc2xhdGUocXVhZC0+cXVhZFJlY3QoKS53aWR0aCgpIC8gMi4wLCBxdWFkLT5xdWFk
UmVjdCgpLmhlaWdodCgpIC8gMi4wKTsKQEAgLTU1MSw0NiArNTk5LDQ1IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNz
RHJhd1F1YWQqIHF1CiAgICAgICAgIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0udHJhbnNs
YXRlKGRldmljZVJlY3QueCgpLCBkZXZpY2VSZWN0LnkoKSk7CiAKICAgICAgICAgY29weVRleHR1
cmVUb0ZyYW1lYnVmZmVyKGZpbHRlcmVkRGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCwgZGV2aWNl
UmVjdC5zaXplKCksIGRldmljZVRvRnJhbWVidWZmZXJUcmFuc2Zvcm0pOwotCi0gICAgICAgIHVz
ZVJlbmRlclBhc3ModGFyZ2V0UmVuZGVyUGFzcyk7CiAgICAgfQorCisgICAgdXNlUmVuZGVyUGFz
cyh0YXJnZXRSZW5kZXJQYXNzKTsKKworICAgIGlmICghdXNpbmdCYWNrZ3JvdW5kVGV4dHVyZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJhY2tncm91bmRUZXh0dXJlLnJl
bGVhc2UoKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJQYXNz
UXVhZChjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVhZCogcXVhZCkKIHsKLSAgICAvLyBUaGUgcmVw
bGljYSBpcyBhbHdheXMgZHJhd24gZmlyc3QsIHNvIGZyZWUgYWZ0ZXIgZHJhd2luZyB0aGUgY29u
dGVudHMuCi0gICAgYm9vbCBzaG91bGRSZWxlYXNlVGV4dHVyZXMgPSAhcXVhZC0+aXNSZXBsaWNh
KCk7Ci0KLSAgICBDQ1JlbmRlclN1cmZhY2UqIGRyYXdpbmdTdXJmYWNlID0gcXVhZC0+cmVuZGVy
UGFzcygpLT50YXJnZXRTdXJmYWNlKCk7Ci0KICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBy
ZW5kZXJUcmFuc2Zvcm0gPSBxdWFkLT5sYXllclRyYW5zZm9ybSgpOwogICAgIC8vIEFwcGx5IGEg
c2NhbGluZyBmYWN0b3IgdG8gc2l6ZSB0aGUgcXVhZCBmcm9tIDF4MSB0byBpdHMgaW50ZW5kZWQg
c2l6ZS4KICAgICByZW5kZXJUcmFuc2Zvcm0uc2NhbGUzZChxdWFkLT5xdWFkUmVjdCgpLndpZHRo
KCksIHF1YWQtPnF1YWRSZWN0KCkuaGVpZ2h0KCksIDEpOwogICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtID0gV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
d2luZG93TWF0cml4KCkgKiBwcm9qZWN0aW9uTWF0cml4KCkgKiByZW5kZXJUcmFuc2Zvcm0pLnRv
MmRUcmFuc2Zvcm0oKTsKIAogICAgIC8vIENhbiBvbmx5IGRyYXcgc3VyZmFjZSBpZiBkZXZpY2Ug
bWF0cml4IGlzIGludmVydGlibGUuCi0gICAgaWYgKCFjb250ZW50c0RldmljZVRyYW5zZm9ybS5p
c0ludmVydGlibGUoKSB8fCAhZHJhd2luZ1N1cmZhY2UtPmhhc1ZhbGlkQ29udGVudHNUZXh0dXJl
KCkpIHsKLSAgICAgICAgaWYgKHNob3VsZFJlbGVhc2VUZXh0dXJlcykgewotICAgICAgICAgICAg
ZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VCYWNrZ3JvdW5kVGV4dHVyZSgpOwotICAgICAgICAgICAg
ZHJhd2luZ1N1cmZhY2UtPnJlbGVhc2VDb250ZW50c1RleHR1cmUoKTsKLSAgICAgICAgfQorICAg
IGlmICghY29udGVudHNEZXZpY2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKLSAgICBkcmF3QmFja2dyb3VuZEZpbHRlcnMocXVhZCwgY29udGVudHNE
ZXZpY2VUcmFuc2Zvcm0pOworICAgIE1hbmFnZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUgPSBt
X3JlbmRlclBhc3NUZXh0dXJlcy5nZXQocXVhZC0+cmVuZGVyUGFzc0lkKCkpOworICAgIEFTU0VS
VChjb250ZW50c1RleHR1cmUgJiYgY29udGVudHNUZXh0dXJlLT50ZXh0dXJlSWQoKSk7CisKKyAg
ICBPd25QdHI8TWFuYWdlZFRleHR1cmU+IGJhY2tncm91bmRUZXh0dXJlID0gZHJhd0JhY2tncm91
bmRGaWx0ZXJzKHF1YWQsIGNvbnRlbnRzRGV2aWNlVHJhbnNmb3JtKTsKIAogICAgIC8vIEZJWE1F
OiBDYWNoZSB0aGlzIHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBkbyBpdCBmb3IgYm90
aCB0aGUgc3VyZmFjZSBhbmQgaXRzIHJlcGxpY2EuCiAgICAgLy8gQXBwbHkgZmlsdGVycyB0byB0
aGUgY29udGVudHMgdGV4dHVyZS4KLSAgICBTa0JpdG1hcCBmaWx0ZXJCaXRtYXAgPSBhcHBseUZp
bHRlcnModGhpcywgcXVhZC0+ZmlsdGVycygpLCBkcmF3aW5nU3VyZmFjZS0+Y29udGVudHNUZXh0
dXJlKCkpOwotICAgIGludCBjb250ZW50c1RleHR1cmVJZCA9IGRyYXdpbmdTdXJmYWNlLT5jb250
ZW50c1RleHR1cmUoKS0+dGV4dHVyZUlkKCk7CisgICAgU2tCaXRtYXAgZmlsdGVyQml0bWFwID0g
YXBwbHlGaWx0ZXJzKHRoaXMsIHF1YWQtPmZpbHRlcnMoKSwgY29udGVudHNUZXh0dXJlKTsKKyAg
ICBpbnQgY29udGVudHNUZXh0dXJlSWQgPSBjb250ZW50c1RleHR1cmUtPnRleHR1cmVJZCgpOwog
ICAgIGlmIChmaWx0ZXJCaXRtYXAuZ2V0VGV4dHVyZSgpKSB7CiAgICAgICAgIEdyVGV4dHVyZSog
dGV4dHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3JUZXh0dXJlKj4oZmlsdGVyQml0bWFwLmdldFRl
eHR1cmUoKSk7CiAgICAgICAgIGNvbnRlbnRzVGV4dHVyZUlkID0gdGV4dHVyZS0+Z2V0VGV4dHVy
ZUhhbmRsZSgpOwogICAgIH0KIAogICAgIC8vIERyYXcgdGhlIGJhY2tncm91bmQgdGV4dHVyZSBp
ZiB0aGVyZSBpcyBvbmUuCi0gICAgaWYgKGRyYXdpbmdTdXJmYWNlLT5oYXNWYWxpZEJhY2tncm91
bmRUZXh0dXJlKCkpCi0gICAgICAgIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihkcmF3aW5nU3Vy
ZmFjZS0+YmFja2dyb3VuZFRleHR1cmUoKS0+dGV4dHVyZUlkKCksIHF1YWQtPnF1YWRSZWN0KCku
c2l6ZSgpLCBxdWFkLT5sYXllclRyYW5zZm9ybSgpKTsKKyAgICBpZiAoYmFja2dyb3VuZFRleHR1
cmUpIHsKKyAgICAgICAgQVNTRVJUKGJhY2tncm91bmRUZXh0dXJlLT5zaXplKCkgPT0gcXVhZC0+
cXVhZFJlY3QoKS5zaXplKCkpOworICAgICAgICBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoYmFj
a2dyb3VuZFRleHR1cmUtPnRleHR1cmVJZCgpLCBxdWFkLT5xdWFkUmVjdCgpLnNpemUoKSwgcXVh
ZC0+bGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAgfQogCiAgICAgYm9vbCBjbGlwcGVkID0gZmFsc2U7
CiAgICAgRmxvYXRRdWFkIGRldmljZVF1YWQgPSBDQ01hdGhVdGlsOjptYXBRdWFkKGNvbnRlbnRz
RGV2aWNlVHJhbnNmb3JtLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwgY2xpcHBlZCk7CkBAIC02NzMs
MTEgKzcyMCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UmVuZGVyUGFzc1F1
YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQpCiAKICAgICBkcmF3VGV4dHVyZWRR
dWFkKHF1YWQtPmxheWVyVHJhbnNmb3JtKCksIHF1YWQtPnF1YWRSZWN0KCkud2lkdGgoKSwgcXVh
ZC0+cXVhZFJlY3QoKS5oZWlnaHQoKSwgcXVhZC0+b3BhY2l0eSgpLCBzdXJmYWNlUXVhZCwKICAg
ICAgICAgICAgICAgICAgICAgIHNoYWRlck1hdHJpeExvY2F0aW9uLCBzaGFkZXJBbHBoYUxvY2F0
aW9uLCBzaGFkZXJRdWFkTG9jYXRpb24pOwotCi0gICAgaWYgKHNob3VsZFJlbGVhc2VUZXh0dXJl
cykgewotICAgICAgICBkcmF3aW5nU3VyZmFjZS0+cmVsZWFzZUJhY2tncm91bmRUZXh0dXJlKCk7
Ci0gICAgICAgIGRyYXdpbmdTdXJmYWNlLT5yZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAg
fQogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JRdWFkKGNv
bnN0IENDU29saWRDb2xvckRyYXdRdWFkKiBxdWFkKQpAQCAtMTA3OSw5ICsxMTIxLDYgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmZpbmlzaERyYXdpbmdGcmFtZSgpCiB7CiAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKSk7Ci0KLSAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+dW5wcm90ZWN0
QWxsVGV4dHVyZXMoKTsKLSAgICBtX2ltcGxUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRl
eHR1cmVzKG1faW1wbFRleHR1cmVBbGxvY2F0b3IuZ2V0KCkpOwogfQogCiB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbSkKQEAgLTEzMzksMTAgKzEzNzgsMTAgQEAgYm9vbCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiByZW5kZXJQ
YXNzKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoIXJlbmRlclBhc3Mt
PnRhcmdldFN1cmZhY2UoKS0+cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSh0aGlzKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlID0gbV9yZW5kZXJQYXNz
VGV4dHVyZXMuZ2V0KHJlbmRlclBhc3MtPmlkKCkpOworICAgIEFTU0VSVCh0ZXh0dXJlKTsKIAot
ICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUocmVuZGVyUGFzcy0+dGFyZ2V0U3Vy
ZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSwgcmVuZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRS
ZWN0KCkpOworICAgIHJldHVybiBiaW5kRnJhbWVidWZmZXJUb1RleHR1cmUodGV4dHVyZSwgcmVu
ZGVyUGFzcy0+ZnJhbWVidWZmZXJPdXRwdXRSZWN0KCkpOwogfQogCiBib29sIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXNlTWFuYWdlZFRleHR1cmUoTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNv
bnN0IEludFJlY3QmIHZpZXdwb3J0UmVjdCkKQEAgLTE0MzEsOSArMTQ3MCw3IEBAIGJvb2wgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9pbXBsVGV4dHVyZU1hbmFn
ZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRCeXRl
cyh2aWV3cG9ydFNpemUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcyh2aWV3cG9ydFNp
emUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKTsKKyAgICBtX2ltcGxUZXh0dXJlTWFuYWdl
ciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+Ojpt
YXgoKSwgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSwgbV9jYXBhYmlsaXRpZXMu
bWF4VGV4dHVyZVNpemUpOwogICAgIG1fdGV4dHVyZUNvcGllciA9IEFjY2VsZXJhdGVkVGV4dHVy
ZUNvcGllcjo6Y3JlYXRlKG1fY29udGV4dCwgbV9pc1VzaW5nQmluZFVuaWZvcm0pOwogICAgIGlm
IChtX3RleHR1cmVVcGxvYWRlclNldHRpbmcgPT0gVGhyb3R0bGVkVXBsb2FkZXIpCiAgICAgICAg
IG1fdGV4dHVyZVVwbG9hZGVyID0gVGhyb3R0bGVkVGV4dHVyZVVwbG9hZGVyOjpjcmVhdGUobV9j
b250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggNjI1ZTgyZjA4
OGUwNzIxNTJlZWRiY2M2NDhjYmM4NTI5ZWZjNWExOC4uZjQ2NGVhZTFiNTgwNDY3ZTRhZTkyMjU1
Nzg5ZDczMjZhYjc4ZTE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAg
LTgwLDYgKzgwLDggQEAgcHVibGljOgogICAgIGNvbnN0IEZsb2F0UXVhZCYgc2hhcmVkR2VvbWV0
cnlRdWFkKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRHZW9tZXRyeVF1YWQ7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBkZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1Jl
bmRlclBhc3NMaXN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGhhdmVDYWNoZWRSZXNv
dXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSBjb25zdCBPVkVSUklERTsKKwogICAgIHZpcnR1
YWwgdm9pZCBiZWdpbkRyYXdpbmdGcmFtZShjb25zdCBDQ1JlbmRlclBhc3MqIGRlZmF1bHRSZW5k
ZXJQYXNzKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3Qg
Q0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1ZmZlckRhbWFnZVJlY3QpIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hEcmF3aW5nRnJhbWUoKSBPVkVSUklERTsK
QEAgLTEyMywxMyArMTI1LDE1IEBAIHByb3RlY3RlZDoKICAgICBib29sIGlzRnJhbWVidWZmZXJE
aXNjYXJkZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRnJhbWVidWZmZXJEaXNjYXJkZWQ7IH0KICAg
ICBib29sIGluaXRpYWxpemUoKTsKIAorICAgIHZvaWQgcmVsZWFzZVJlbmRlclBhc3NUZXh0dXJl
cygpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAKICAgICB2b2lkIGRyYXdRdWFk
KGNvbnN0IENDRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0
IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqKTsKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlclF1YWQo
Y29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKik7Ci0gICAgdm9pZCBkcmF3QmFja2dyb3VuZEZp
bHRlcnMoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pOworICAgIFBhc3NPd25QdHI8TWFuYWdl
ZFRleHR1cmU+IGRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclBhc3NEcmF3UXVh
ZCosIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9y
bSk7CiAgICAgdm9pZCBkcmF3UmVuZGVyUGFzc1F1YWQoY29uc3QgQ0NSZW5kZXJQYXNzRHJhd1F1
YWQqKTsKICAgICB2b2lkIGRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3
UXVhZCopOwogICAgIHZvaWQgZHJhd1N0cmVhbVZpZGVvUXVhZChjb25zdCBDQ1N0cmVhbVZpZGVv
RHJhd1F1YWQqKTsKQEAgLTE0OSw4ICsxNTMsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjbGVh
clJlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZWJ1
ZmZlckRhbWFnZVJlY3QpOwogCi0gICAgdm9pZCByZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzKCk7
Ci0KICAgICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgYm9vbCBpbml0aWFsaXpl
U2hhcmVkT2JqZWN0cygpOwpAQCAtMjYzLDYgKzI2NSw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gbV9jb250ZW50c1RleHR1cmVBbGxvY2F0b3I7CiAg
ICAgT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcj4gbV9pbXBsVGV4dHVyZUFsbG9jYXRv
cjsKIAorICAgIEhhc2hNYXA8aW50LCBPd25QdHI8TWFuYWdlZFRleHR1cmU+ID4gbV9yZW5kZXJQ
YXNzVGV4dHVyZXM7CisKICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBtX2NvbnRl
eHQ7CiAKICAgICBjb25zdCBDQ1JlbmRlclBhc3MqIG1fZGVmYXVsdFJlbmRlclBhc3M7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5jcHAKaW5kZXggODM2NjZiMDQ2NGY2NzY0ZjY4OGNhNmZkNWMyYmZiZjI3
NzFhZjQ2OC4uNDQ3NzIxNTZkYzllYjYyZjE2ZjgzYWU0NmY5ZTMyNjg5OTZkODY2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtODUsNyArODUsNyBAQCBDQ0xheWVySW1wbDo6Q0NMYXll
ckltcGwoaW50IGlkKQogICAgICwgbV9sYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoQ0NMYXllckFu
aW1hdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZSh0aGlzKSkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX2xheWVySWQgPj0gMCk7CisgICAgQVNTRVJU
KG1fbGF5ZXJJZCA+IDApOwogfQogCiBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggMTk1NzQzNzY1NTg2MGJjOTk1
MWY0YTEwZWM0ZWVlZGIyMTA3MDM5MC4uMDI4YjIxNWFmZjY1MWM4MGFmMDY4YjEzMzFlNzBiODkz
YWMwYTZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTI5
NSw3ICsyOTUsMTAgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJQ
YXNzZXMoRnJhbWVEYXRhJiBmcmFtZSkKICAgICAgICAgQ0NMYXllckltcGwqIHJlbmRlclN1cmZh
Y2VMYXllciA9ICgqZnJhbWUucmVuZGVyU3VyZmFjZUxheWVyTGlzdClbc3VyZmFjZUluZGV4XTsK
ICAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlID0gcmVuZGVyU3VyZmFjZUxh
eWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAKLSAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcGFz
cyA9IENDUmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UpOworICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIHVuaXF1ZSBhY3Jvc3MgYWxsIENDTGF5ZXJUcmVlSG9zdEltcGxzLgorICAg
ICAgICBpbnQgZ2xvYmFsUmVuZGVyUGFzc0lkID0gcmVuZGVyU3VyZmFjZUxheWVyLT5pZCgpOwor
CisgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHBhc3MgPSBDQ1JlbmRlclBhc3M6OmNyZWF0
ZShyZW5kZXJTdXJmYWNlLCBnbG9iYWxSZW5kZXJQYXNzSWQpOwogICAgICAgICBzdXJmYWNlUGFz
c01hcC5hZGQocmVuZGVyU3VyZmFjZSwgcGFzcy5nZXQoKSk7CiAgICAgICAgIGZyYW1lLnJlbmRl
clBhc3Nlcy5hcHBlbmQocGFzcy5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTM1MSw3ICszNTQsNyBA
QCBib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNhbGN1bGF0ZVJlbmRlclBhc3NlcyhGcmFtZURh
dGEmIGZyYW1lKQogICAgICAgICBvY2NsdXNpb25UcmFja2VyLm92ZXJkcmF3TWV0cmljcygpLnJl
Y29yZE1ldHJpY3ModGhpcyk7CiAKICAgICBtX2xheWVyUmVuZGVyZXItPmRlY2lkZVJlbmRlclBh
c3NBbGxvY2F0aW9uc0ZvckZyYW1lKGZyYW1lLnJlbmRlclBhc3Nlcyk7Ci0gICAgcmVtb3ZlUGFz
c2VzV2l0aENhY2hlZFRleHR1cmVzKGZyYW1lLnJlbmRlclBhc3NlcywgZnJhbWUuc2tpcHBlZFBh
c3Nlcyk7CisgICAgcmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKGZyYW1lLnJlbmRlclBh
c3NlcywgZnJhbWUuc2tpcHBlZFBhc3NlcywgbV9sYXllclJlbmRlcmVyLmdldCgpKTsKIAogICAg
IHJldHVybiBkcmF3RnJhbWU7CiB9CkBAIC00MzEsNyArNDM0LDcgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpyZW1vdmVSZW5kZXJQYXNzZXNSZWN1cnNpdmUoQ0NSZW5kZXJQYXNzTGlzdCYg
cGFzc2VzLAogICAgIHNraXBwZWRQYXNzZXMuYXBwZW5kKHJlbW92ZWRQYXNzLnJlbGVhc2UoKSk7
CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRl
eHR1cmVzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBl
ZFBhc3NlcykKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENhY2hl
ZFRleHR1cmVzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlcywgQ0NSZW5kZXJQYXNzTGlzdCYgc2tp
cHBlZFBhc3NlcywgY29uc3QgQ0NSZW5kZXJlciogcmVuZGVyZXIpCiB7CiAgICAgZm9yIChpbnQg
cGFzc0luZGV4ID0gcGFzc2VzLnNpemUoKSAtIDE7IHBhc3NJbmRleCA+PSAwOyAtLXBhc3NJbmRl
eCkgewogICAgICAgICBDQ1JlbmRlclBhc3MqIGN1cnJlbnRQYXNzID0gcGFzc2VzW3Bhc3NJbmRl
eF0uZ2V0KCk7CkBAIC00NDUsMTQgKzQ0OCw5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6
cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3NlCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdR
dWFkKiByZW5kZXJQYXNzUXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0RyYXdRdWFkKj4o
Y3VycmVudFF1YWQpOwotICAgICAgICAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNl
ID0gcmVuZGVyUGFzc1F1YWQtPnJlbmRlclBhc3MoKS0+dGFyZ2V0U3VyZmFjZSgpOwotCi0gICAg
ICAgICAgICBpZiAodGFyZ2V0U3VyZmFjZS0+Y29udGVudHNDaGFuZ2VkKCkgfHwgIXRhcmdldFN1
cmZhY2UtPmhhc0NhY2hlZENvbnRlbnRzVGV4dHVyZSgpKQorICAgICAgICAgICAgaWYgKCFyZW5k
ZXJQYXNzUXVhZC0+Y29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUoKS5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIFJlc2VydmUgdGhlIHRl
eHR1cmUgaW1tZWRpYXRlbHkuIFdlIGRvIG5vdCBuZWVkIHRvIHBhc3MgaW4gbGF5ZXIgcmVuZGVy
ZXIKLSAgICAgICAgICAgIC8vIHNpbmNlIHRoZSB0ZXh0dXJlIGFscmVhZHkgZXhpc3RzLCBqdXN0
IG5lZWRzIHRvIGJlIHJlc2VydmVkLgotICAgICAgICAgICAgaWYgKCF0YXJnZXRTdXJmYWNlLT5w
cmVwYXJlQ29udGVudHNUZXh0dXJlKDApKQorICAgICAgICAgICAgaWYgKCFyZW5kZXJlci0+aGF2
ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChyZW5kZXJQYXNzUXVhZC0+cmVuZGVyUGFz
c0lkKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAvLyBXZSBh
cmUgY2hhbmdpbmcgdGhlIHZlY3RvciBpbiB0aGUgbWlkZGxlIG9mIHJldmVyc2UgaXRlcmF0aW9u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDlkOGZiM2M0NTc1YWVj
YWM3YWFmOGNkMDBkOGZhOTZkN2YxYWIwOTIuLjk2N2RmODFhNGQxZThjMTJiZDhmYjgxMDkyMjVj
MjEwMGZkOGVmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTE3
OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAgICAgQ0NEZWJ1Z1JlY3RIaXN0b3J5KiBkZWJ1Z1JlY3RI
aXN0b3J5KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z1JlY3RIaXN0b3J5LmdldCgpOyB9CiAKICAg
ICAvLyBSZW1vdmVzIGFsbCByZW5kZXIgcGFzc2VzIGZvciB3aGljaCB3ZSBoYXZlIGNhY2hlZCB0
ZXh0dXJlcywgYW5kIHdoaWNoIGRpZCBub3QgY2hhbmdlIHRoZWlyIGNvbnRlbnQuCi0gICAgc3Rh
dGljIHZvaWQgcmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKENDUmVuZGVyUGFzc0xpc3Qm
IHBhc3NlcywgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3Nlcyk7CisgICAgc3RhdGljIHZv
aWQgcmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKENDUmVuZGVyUGFzc0xpc3QmIHBhc3Nl
cywgQ0NSZW5kZXJQYXNzTGlzdCYgc2tpcHBlZFBhc3NlcywgY29uc3QgQ0NSZW5kZXJlciopOwog
CiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBDQ0xheWVyVHJlZVNl
dHRpbmdzJiwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFz
cy5jcHAKaW5kZXggMjhhY2RkN2M5YjQ3YmRmYjdmMmI4NWY1ZTkxOThiOGZlODdlN2UzMy4uOTBh
NmVlNjBhZDc1ZjY1YTdjNTFmMDE5NzgzMDU1NGQ2ZTM1ZWFmNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clBhc3MuY3BwCkBAIC0zNywxNyArMzcsMTkgQEAgdXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDUmVuZGVy
UGFzcz4gQ0NSZW5kZXJQYXNzOjpjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNl
KQorUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IENDUmVuZGVyUGFzczo6Y3JlYXRlKENDUmVuZGVy
U3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgaW50IGlkKQogewotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NSZW5kZXJQYXNzKHRhcmdldFN1cmZhY2UpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDUmVuZGVyUGFzcyh0YXJnZXRTdXJmYWNlLCBpZCkpOwogfQogCi1DQ1JlbmRlclBhc3M6OkND
UmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UpCi0gICAgOiBtX3Rhcmdl
dFN1cmZhY2UodGFyZ2V0U3VyZmFjZSkKK0NDUmVuZGVyUGFzczo6Q0NSZW5kZXJQYXNzKENDUmVu
ZGVyU3VyZmFjZSogdGFyZ2V0U3VyZmFjZSwgaW50IGlkKQorICAgIDogbV9pZChpZCkKKyAgICAs
IG1fdGFyZ2V0U3VyZmFjZSh0YXJnZXRTdXJmYWNlKQogICAgICwgbV9mcmFtZWJ1ZmZlck91dHB1
dFJlY3QodGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3QoKSkKICAgICAsIG1faGFzVHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKHRydWUpCiB7Ci0gICAgQVNTRVJUKG1fdGFyZ2V0U3VyZmFjZSk7CisgICAg
QVNTRVJUKHRhcmdldFN1cmZhY2UpOworICAgIEFTU0VSVChpZCA+IDApOwogfQogCiB2b2lkIEND
UmVuZGVyUGFzczo6YXBwZW5kUXVhZHNGb3JMYXllcihDQ0xheWVySW1wbCogbGF5ZXIsIENDT2Nj
bHVzaW9uVHJhY2tlckltcGwqIG9jY2x1c2lvblRyYWNrZXIsIGJvb2wmIGhhZE1pc3NpbmdUaWxl
cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUmVuZGVyUGFzcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKaW5kZXggZGVlNTViZjdmNmNmZWYxOTI0YmNhYjUzY2Rl
ZWVlMTlkNjllMjhhYy4uNDdhZTJmNzQ3ZThkZDA3YTU0ZWIwYjJjOGU0NjJhZWIwYTU3OGFlZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NSZW5kZXJQYXNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJQYXNzLmgKQEAgLTUzLDE0ICs1MywxNyBAQCBwdWJsaWM6CiBjbGFz
cyBDQ1JlbmRlclBhc3MgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUmVuZGVyUGFzcyk7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBjcmVhdGUoQ0NS
ZW5kZXJTdXJmYWNlKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzPiBjcmVh
dGUoQ0NSZW5kZXJTdXJmYWNlKiwgaW50IGlkKTsKIAogICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JM
YXllcihDQ0xheWVySW1wbCosIENDT2NjbHVzaW9uVHJhY2tlckltcGwqLCBib29sJiBoYWRNaXNz
aW5nVGlsZXMpOwogICAgIHZvaWQgYXBwZW5kUXVhZHNGb3JSZW5kZXJTdXJmYWNlTGF5ZXIoQ0NM
YXllckltcGwqLCBjb25zdCBDQ1JlbmRlclBhc3MqIGNvbnRyaWJ1dGluZ1JlbmRlclBhc3MsIEND
T2NjbHVzaW9uVHJhY2tlckltcGwqKTsKICAgICB2b2lkIGFwcGVuZFF1YWRzVG9GaWxsU2NyZWVu
KENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIFNrQ29sb3Igc2NyZWVuQmFja2dyb3VuZENvbG9yLCBj
b25zdCBDQ09jY2x1c2lvblRyYWNrZXJJbXBsJik7CiAKICAgICBjb25zdCBDQ1F1YWRMaXN0JiBx
dWFkTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZExpc3Q7IH0KKworICAgIGludCBpZCgpIGNv
bnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2Uo
KSBjb25zdCB7IHJldHVybiBtX3RhcmdldFN1cmZhY2U7IH0KKwogICAgIC8vIFRoaXMgZGVub3Rl
cyB0aGUgYm91bmRzIGluIHBoeXNpY2FsIHBpeGVscyBvZiB0aGUgb3V0cHV0IGdlbmVyYXRlZCBi
eSB0aGlzIFJlbmRlclBhc3MuCiAgICAgY29uc3QgSW50UmVjdCYgZnJhbWVidWZmZXJPdXRwdXRS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZWJ1ZmZlck91dHB1dFJlY3Q7IH0KIApAQCAtNjgs
OCArNzEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRIYXNUcmFuc3BhcmVudEJhY2tncm91bmQo
Ym9vbCB0cmFuc3BhcmVudCkgeyBtX2hhc1RyYW5zcGFyZW50QmFja2dyb3VuZCA9IHRyYW5zcGFy
ZW50OyB9CiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBDQ1JlbmRlclBhc3MoQ0NSZW5kZXJT
dXJmYWNlKik7CisgICAgQ0NSZW5kZXJQYXNzKENDUmVuZGVyU3VyZmFjZSosIGludCBpZCk7CiAK
KyAgICBpbnQgbV9pZDsKICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fdGFyZ2V0U3VyZmFjZTsKICAg
ICBDQ1F1YWRMaXN0IG1fcXVhZExpc3Q7CiAgICAgSW50UmVjdCBtX2ZyYW1lYnVmZmVyT3V0cHV0
UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmNwcAppbmRleCA4ZGM0
ZmY2NmExYzcxNzNiZTczNzRhNjI1ZGI5OWNmNDA3YjFkNmUzLi43NWJkNzYxZDE1NTM1ODY5MWMy
YjA0Y2QxZTc2YmM3YTkzODM4MjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQYXNzRHJh
d1F1YWQuY3BwCkBAIC0yNywyMCArMjcsMjQgQEAKIAogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFz
c0RyYXdRdWFkLmgiCiAKKyNpbmNsdWRlICJjYy9DQ1JlbmRlclBhc3MuaCIKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBDQ1JlbmRlclBh
c3NEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3Rh
dGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBh
c3MsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRl
cnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQpCitQYXNzT3duUHRyPENDUmVuZGVyUGFzc0RyYXdR
dWFkPiBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRl
KiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1YWRSZWN0LCBjb25zdCBDQ1JlbmRl
clBhc3MqIHJlbmRlclBhc3MsIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYg
YmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3Qm
IGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKQogewotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoc2hhcmVkUXVhZFN0YXRlLCBxdWFkUmVjdCwgcmVuZGVy
UGFzcywgaXNSZXBsaWNhLCBmaWx0ZXJzLCBiYWNrZ3JvdW5kRmlsdGVycywgbWFza1RleHR1cmVJ
ZCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NSZW5kZXJQYXNzRHJhd1F1YWQoc2hhcmVk
UXVhZFN0YXRlLCBxdWFkUmVjdCwgcmVuZGVyUGFzcywgaXNSZXBsaWNhLCBmaWx0ZXJzLCBiYWNr
Z3JvdW5kRmlsdGVycywgbWFza1RleHR1cmVJZCwgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJh
bWUpKTsKIH0KIAotQ0NSZW5kZXJQYXNzRHJhd1F1YWQ6OkNDUmVuZGVyUGFzc0RyYXdRdWFkKGNv
bnN0IENDU2hhcmVkUXVhZFN0YXRlKiBzaGFyZWRRdWFkU3RhdGUsIGNvbnN0IEludFJlY3QmIHF1
YWRSZWN0LCBjb25zdCBDQ1JlbmRlclBhc3MqIHJlbmRlclBhc3MsIGJvb2wgaXNSZXBsaWNhLCBj
b25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6
V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0
dXJlSWQpCitDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Q0NSZW5kZXJQYXNzRHJhd1F1YWQoY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqIHNoYXJlZFF1YWRTdGF0ZSwgY29uc3QgSW50UmVjdCYgcXVhZFJl
Y3QsIGNvbnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcywgYm9vbCBpc1JlcGxpY2EsIGNvbnN0
IFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycywgY29uc3QgV2ViS2l0OjpXZWJG
aWx0ZXJPcGVyYXRpb25zJiBiYWNrZ3JvdW5kRmlsdGVycywgdW5zaWduZWQgbWFza1RleHR1cmVJ
ZCwgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUpCiAgICAgOiBD
Q0RyYXdRdWFkKHNoYXJlZFF1YWRTdGF0ZSwgQ0NEcmF3UXVhZDo6UmVuZGVyUGFzcywgcXVhZFJl
Y3QpCiAgICAgLCBtX3JlbmRlclBhc3MocmVuZGVyUGFzcykKKyAgICAsIG1fcmVuZGVyUGFzc0lk
KHJlbmRlclBhc3MtPmlkKCkpCiAgICAgLCBtX2lzUmVwbGljYShpc1JlcGxpY2EpCiAgICAgLCBt
X2ZpbHRlcnMoZmlsdGVycykKICAgICAsIG1fYmFja2dyb3VuZEZpbHRlcnMoYmFja2dyb3VuZEZp
bHRlcnMpCiAgICAgLCBtX21hc2tUZXh0dXJlSWQobWFza1RleHR1cmVJZCkKKyAgICAsIG1fY29u
dGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUoY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUp
CiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyUGFzcyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3NEcmF3UXVhZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQuaAppbmRleCAzY2M2ZjI2MDcxYTMzYzAyMzA2YWVhZDllMDhiMDg3MzMzNGUz
MWU4Li5iNjNhNzY0NDY4Mzk2OTgyMGE1YmQzMDFkMTA2NmEyNmM0ZTQ3NjI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBh
c3NEcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUmVuZGVyUGFzc0RyYXdRdWFkLmgKQEAgLTM3LDIzICszNywyNyBAQCBjbGFzcyBD
Q1JlbmRlclBhc3M7CiBjbGFzcyBDQ1JlbmRlclBhc3NEcmF3UXVhZCA6IHB1YmxpYyBDQ0RyYXdR
dWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1JlbmRlclBhc3NEcmF3UXVhZCk7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5kZXJQYXNzRHJhd1F1YWQ+IGNyZWF0
ZShjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBDQ1JlbmRl
clBhc3MqLCBib29sIGlzUmVwbGljYSwgY29uc3QgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGJhY2tncm91bmRG
aWx0ZXJzLCB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q1JlbmRlclBhc3NEcmF3UXVhZD4gY3JlYXRlKGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyosIGJvb2wgaXNSZXBsaWNhLCBjb25zdCBX
ZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdlYktpdDo6V2ViRmls
dGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1hc2tUZXh0dXJlSWQs
IGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lKTsKIAogICAgIGNv
bnN0IENDUmVuZGVyUGFzcyogcmVuZGVyUGFzcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUGFz
czsgfQorICAgIGludCByZW5kZXJQYXNzSWQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclBhc3NJ
ZDsgfQogICAgIGJvb2wgaXNSZXBsaWNhKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlcGxpY2E7IH0K
ICAgICB1bnNpZ25lZCBtYXNrVGV4dHVyZUlkKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrVGV4dHVy
ZUlkOyB9CisgICAgY29uc3QgSW50UmVjdCYgY29udGVudHNDaGFuZ2VkU2luY2VMYXN0RnJhbWUo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1lOyB9CiAKICAg
ICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlcnM7IH0KICAgICBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMm
IGJhY2tncm91bmRGaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRmlsdGVyczsg
fQogCiBwcml2YXRlOgotICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyosIGJvb2wgaXNSZXBs
aWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdl
YktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1h
c2tUZXh0dXJlSWQpOworICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKGNvbnN0IENDU2hhcmVkUXVh
ZFN0YXRlKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENDUmVuZGVyUGFzcyosIGJvb2wgaXNSZXBs
aWNhLCBjb25zdCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIGNvbnN0IFdl
YktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucyYgYmFja2dyb3VuZEZpbHRlcnMsIHVuc2lnbmVkIG1h
c2tUZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzQ2hhbmdlZFNpbmNlTGFzdEZyYW1l
KTsKIAogICAgIGNvbnN0IENDUmVuZGVyUGFzcyogbV9yZW5kZXJQYXNzOworICAgIGludCBtX3Jl
bmRlclBhc3NJZDsKICAgICBib29sIG1faXNSZXBsaWNhOwogICAgIFdlYktpdDo6V2ViRmlsdGVy
T3BlcmF0aW9ucyBtX2ZpbHRlcnM7CiAgICAgV2ViS2l0OjpXZWJGaWx0ZXJPcGVyYXRpb25zIG1f
YmFja2dyb3VuZEZpbHRlcnM7CiAgICAgdW5zaWduZWQgbV9tYXNrVGV4dHVyZUlkOworICAgIElu
dFJlY3QgbV9jb250ZW50c0NoYW5nZWRTaW5jZUxhc3RGcmFtZTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IGQwOTQwMWM0ZjIzZTA5ZTUxMmU2MjQ5OTg0YmU0
Y2RlOGE5NGEyYTEuLmQzYTg1ZDJkYTg0MTE5YTZmMmM3M2FkM2YxZDMwMjNlZDY3NDE4MjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21p
dW0uaCIKLSNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0u
aCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ0RlYnVn
Qm9yZGVyRHJhd1F1YWQuaCIKQEAgLTg1LDc1ICs4NCw2IEBAIEZsb2F0UmVjdCBDQ1JlbmRlclN1
cmZhY2U6OmRyYXdhYmxlQ29udGVudFJlY3QoKSBjb25zdAogICAgIHJldHVybiBkcmF3YWJsZUNv
bnRlbnRSZWN0OwogfQogCi1ib29sIENDUmVuZGVyU3VyZmFjZTo6cHJlcGFyZUNvbnRlbnRzVGV4
dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCi17Ci0gICAgLy8gRklY
TUU6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBzZXBhcmF0ZWQgaW50byB0d286IG9uZSB0byByZXNl
cnZlIGFuCi0gICAgLy8gZXhpc3Rpbmcgc3VyZmFjZSwgYW5kIG9uZSB0byBjcmVhdGUgYSBuZXcg
b25lLiBUaGF0IHdheSB3ZSB3aWxsIG5vdAotICAgIC8vIG5lZWQgdG8gcGFzcyBudWxsIGxheWVy
UmVuZGVyZXIuCi0gICAgaWYgKGxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgVGV4dHVyZU1hbmFn
ZXIqIHRleHR1cmVNYW5hZ2VyID0gbGF5ZXJSZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2VyKCk7
Ci0KLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgICAgIG1fY29udGVu
dHNUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcik7Ci0gICAg
fQotCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgaWYgKCFtX2NvbnRlbnRzVGV4dHVyZS0+cmVzZXJ2ZShtX2NvbnRlbnRS
ZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVh
c2VDb250ZW50c1RleHR1cmUoKQotewotICAgIGlmICghbV9jb250ZW50c1RleHR1cmUgfHwgIW1f
Y29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRlbnRzVGV4dHVyZS0+dW5yZXNlcnZlKCk7Ci19Ci0KLWJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpo
YXNWYWxpZENvbnRlbnRzVGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHNU
ZXh0dXJlICYmIG1fY29udGVudHNUZXh0dXJlLT5pc1Jlc2VydmVkKCkgJiYgbV9jb250ZW50c1Rl
eHR1cmUtPmlzVmFsaWQobV9jb250ZW50UmVjdC5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBKTsKLX0KLQotYm9vbCBDQ1JlbmRlclN1cmZhY2U6Omhhc0NhY2hlZENvbnRlbnRzVGV4dHVy
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlICYmIG1fY29udGVudHNU
ZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSk7Ci19Ci0KLWJvb2wgQ0NSZW5kZXJTdXJmYWNlOjpwcmVwYXJlQmFja2dyb3VuZFRleHR1
cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKQotewotICAgIFRleHR1cmVN
YW5hZ2VyKiB0ZXh0dXJlTWFuYWdlciA9IGxheWVyUmVuZGVyZXItPmltcGxUZXh0dXJlTWFuYWdl
cigpOwotCi0gICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlKQotICAgICAgICBtX2JhY2tncm91
bmRUZXh0dXJlID0gTWFuYWdlZFRleHR1cmU6OmNyZWF0ZSh0ZXh0dXJlTWFuYWdlcik7Ci0KLSAg
ICBpZiAobV9iYWNrZ3JvdW5kVGV4dHVyZS0+aXNSZXNlcnZlZCgpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmICghbV9iYWNrZ3JvdW5kVGV4dHVyZS0+cmVzZXJ2ZShtX2NvbnRlbnRS
ZWN0LnNpemUoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDQ1JlbmRlclN1cmZhY2U6OnJlbGVh
c2VCYWNrZ3JvdW5kVGV4dHVyZSgpCi17Ci0gICAgaWYgKCFtX2JhY2tncm91bmRUZXh0dXJlIHx8
ICFtX2JhY2tncm91bmRUZXh0dXJlLT5pc1Jlc2VydmVkKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2JhY2tncm91bmRUZXh0dXJlLT51bnJlc2VydmUoKTsKLX0KLQotYm9vbCBDQ1JlbmRlclN1
cmZhY2U6Omhhc1ZhbGlkQmFja2dyb3VuZFRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBt
X2JhY2tncm91bmRUZXh0dXJlICYmIG1fYmFja2dyb3VuZFRleHR1cmUtPmlzUmVzZXJ2ZWQoKSAm
JiBtX2JhY2tncm91bmRUZXh0dXJlLT5pc1ZhbGlkKG1fY29udGVudFJlY3Quc2l6ZSgpLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSk7Ci19Ci0KIFN0cmluZyBDQ1JlbmRlclN1cmZhY2U6Om5hbWUo
KSBjb25zdAogewogICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiUmVuZGVyU3VyZmFjZShpZD0l
aSxvd25lcj0lcykiLCBtX293bmluZ0xheWVyLT5pZCgpLCBtX293bmluZ0xheWVyLT5kZWJ1Z05h
bWUoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTMwMiw4ICsyMzIsOSBAQCB2b2lkIENDUmVuZGVyU3Vy
ZmFjZTo6YXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiBxdWFkTGlzdCwgQ0NTaGFyZWRRdWFkU3Rh
dGUqIHNoYQogICAgIH0KIAogICAgIGludCBtYXNrVGV4dHVyZUlkID0gbWFza0xheWVyID8gbWFz
a0xheWVyLT5jb250ZW50c1RleHR1cmVJZCgpIDogMDsKKyAgICBJbnRSZWN0IGNvbnRlbnRzQ2hh
bmdlZFNpbmNlTGFzdEZyYW1lID0gY29udGVudHNDaGFuZ2VkKCkgPyBtX2NvbnRlbnRSZWN0IDog
SW50UmVjdCgpOwogCi0gICAgcXVhZExpc3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclBhc3NEcmF3
UXVhZDo6Y3JlYXRlKHNoYXJlZFF1YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgcmVuZGVyUGFzcywg
Zm9yUmVwbGljYSwgZmlsdGVycygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlk
KSk7CisgICAgcXVhZExpc3QuYXBwZW5kU3VyZmFjZShDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3Jl
YXRlKHNoYXJlZFF1YWRTdGF0ZSwgY29udGVudFJlY3QoKSwgcmVuZGVyUGFzcywgZm9yUmVwbGlj
YSwgZmlsdGVycygpLCBiYWNrZ3JvdW5kRmlsdGVycygpLCBtYXNrVGV4dHVyZUlkLCBjb250ZW50
c0NoYW5nZWRTaW5jZUxhc3RGcmFtZSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFj
ZS5oCmluZGV4IDAyOWUxZjYwNDQxNGNjZmViMTMwNThlZjRhYWM4MTM3OWY5NTA4ZjQuLjg5NGVh
NWFlYTJlZmFlZTZiY2YwMTViMzgwZTAzMTIyMzM0YTlkNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVy
U3VyZmFjZS5oCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRl
IDxwdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNDUs
NyArNDQsNiBAQCBjbGFzcyBDQ1JlbmRlclBhc3M7CiBjbGFzcyBDQ1NoYXJlZFF1YWRTdGF0ZTsK
IGNsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwotY2xhc3Mg
TWFuYWdlZFRleHR1cmU7CiBjbGFzcyBUZXh0U3RyZWFtOwogCiBjbGFzcyBDQ1JlbmRlclN1cmZh
Y2UgewpAQCAtNTQsMTUgKzUyLDYgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IENDUmVuZGVyU3Vy
ZmFjZShDQ0xheWVySW1wbCopOwogICAgIHZpcnR1YWwgfkNDUmVuZGVyU3VyZmFjZSgpOwogCi0g
ICAgdmlydHVhbCBib29sIHByZXBhcmVDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKik7Ci0gICAgdm9pZCByZWxlYXNlQ29udGVudHNUZXh0dXJlKCk7Ci0gICAgYm9vbCBoYXNW
YWxpZENvbnRlbnRzVGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBoYXNDYWNoZWRD
b250ZW50c1RleHR1cmUoKSBjb25zdDsKLQotICAgIGJvb2wgcHJlcGFyZUJhY2tncm91bmRUZXh0
dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopOwotICAgIHZvaWQgcmVsZWFzZUJhY2tncm91bmRU
ZXh0dXJlKCk7Ci0gICAgYm9vbCBoYXNWYWxpZEJhY2tncm91bmRUZXh0dXJlKCkgY29uc3Q7Ci0K
ICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0OwogICAgIHZvaWQgZHVtcFN1cmZhY2UoVGV4dFN0cmVh
bSYsIGludCBpbmRlbnQpIGNvbnN0OwogCkBAIC0xMTYsNyArMTA1LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U2Npc3NvclJlY3QoY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QpIHsgbV9zY2lz
c29yUmVjdCA9IHNjaXNzb3JSZWN0OyB9CiAgICAgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3NjaXNzb3JSZWN0OyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgY29u
dGVudHNDaGFuZ2VkKCkgY29uc3Q7CisgICAgYm9vbCBjb250ZW50c0NoYW5nZWQoKSBjb25zdDsK
IAogICAgIHZvaWQgc2V0Q29udGVudFJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UmVjdDsgfQpAQCAt
MTI0LDkgKzExMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTGF5ZXJMaXN0KCkgeyBtX2xh
eWVyTGlzdC5jbGVhcigpOyB9CiAgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4mIGxheWVyTGlzdCgp
IHsgcmV0dXJuIG1fbGF5ZXJMaXN0OyB9CiAKLSAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVudHNU
ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KLSAgICBN
YW5hZ2VkVGV4dHVyZSogYmFja2dyb3VuZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tn
cm91bmRUZXh0dXJlLmdldCgpOyB9Ci0KICAgICBpbnQgb3duaW5nTGF5ZXJJZCgpIGNvbnN0Owog
ICAgIENDUmVuZGVyU3VyZmFjZSogdGFyZ2V0UmVuZGVyU3VyZmFjZSgpIGNvbnN0OwogCkBAIC0x
NTUsOSArMTQxLDYgQEAgcHJpdmF0ZToKICAgICBJbnRSZWN0IG1fY29udGVudFJlY3Q7CiAgICAg
Ym9vbCBtX3N1cmZhY2VQcm9wZXJ0eUNoYW5nZWQ7CiAKLSAgICBPd25QdHI8TWFuYWdlZFRleHR1
cmU+IG1fY29udGVudHNUZXh0dXJlOwotICAgIE93blB0cjxNYW5hZ2VkVGV4dHVyZT4gbV9iYWNr
Z3JvdW5kVGV4dHVyZTsKLQogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7CiAgICAgYm9vbCBtX2Ry
YXdPcGFjaXR5SXNBbmltYXRpbmc7CiAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX2RyYXdUcmFuc2Zvcm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlcmVyLmgKaW5kZXggYWJhZDAyYmI3ZDlkN2Fk
NTdkM2FkMzRmNzU0MzVjNDU4N2NlZDM3Ny4uNDE4NTlmMzAyZWVhOWY5MTkzYjMyNDVmOGJlM2Y5
ODJmNzZlODIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NSZW5kZXJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyZXIuaApAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6
CiAgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgd2luZG93TWF0cml4
KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dNYXRyaXg7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBk
ZWNpZGVSZW5kZXJQYXNzQWxsb2NhdGlvbnNGb3JGcmFtZShjb25zdCBDQ1JlbmRlclBhc3NMaXN0
JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFz
c0lkKGludCkgY29uc3QgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luRHJhd2luZ0ZyYW1l
KGNvbnN0IENDUmVuZGVyUGFzcyogZGVmYXVsdFJlbmRlclBhc3MpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZHJhd1JlbmRlclBhc3MoY29uc3QgQ0NSZW5kZXJQYXNzKiwgY29uc3QgRmxvYXRSZWN0
JiByb290U2Npc3NvclJlY3RJbkN1cnJlbnRQYXNzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGZp
bmlzaERyYXdpbmdGcmFtZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAK
aW5kZXggMzczMTgwOGNiNWRhMjliNDMwOWJkOGVkNTRjM2U5MmU0N2FmMTY3OC4uNTY0ZTM2OTZi
ZTE1NTJlZjRmNGI0NWQwNTRhZWFkM2ZhYTU2NDQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExh
eWVySW1wbC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXll
ckltcGwuaCIKIAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiU2tD
b2xvci5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJjYy9DQ0NoZWNrZXJi
b2FyZERyYXdRdWFkLmgiCkBAIC0yMjAsNyArMjIxLDcgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJbXBs
OjpzZXRUaWxpbmdEYXRhKGNvbnN0IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcikKICAgICAqbV90
aWxlciA9IHRpbGVyOwogfQogCi12b2lkIENDVGlsZWRMYXllckltcGw6OnB1c2hUaWxlUHJvcGVy
dGllcyhpbnQgaSwgaW50IGosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRS
ZWN0JiBvcGFxdWVSZWN0KQordm9pZCBDQ1RpbGVkTGF5ZXJJbXBsOjpwdXNoVGlsZVByb3BlcnRp
ZXMoaW50IGksIGludCBqLCB1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IEludFJlY3QmIG9wYXF1
ZVJlY3QpCiB7CiAgICAgRHJhd2FibGVUaWxlKiB0aWxlID0gdGlsZUF0KGksIGopOwogICAgIGlm
ICghdGlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCAxMzFhMzJmY2VmYWMx
YjE4MTU1MWYwNDEwNWYyMzhlYTBlMDc3ZmQ2Li40YzgyY2RjOGNhZjdlNzFiOTY5NzE2YzRhZjVl
MTk2YzI3OTEwNDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC01MCw3ICs1
MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2tpcHNEcmF3KGJvb2wgc2tpcHNEcmF3KSB7
IG1fc2tpcHNEcmF3ID0gc2tpcHNEcmF3OyB9CiAgICAgdm9pZCBzZXRUaWxpbmdEYXRhKGNvbnN0
IENDTGF5ZXJUaWxpbmdEYXRhJiB0aWxlcik7Ci0gICAgdm9pZCBwdXNoVGlsZVByb3BlcnRpZXMo
aW50LCBpbnQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBvcGFx
dWVSZWN0KTsKKyAgICB2b2lkIHB1c2hUaWxlUHJvcGVydGllcyhpbnQsIGludCwgdW5zaWduZWQg
dGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KTsKIAogICAgIHZvaWQgc2V0Q29u
dGVudHNTd2l6emxlZChib29sIGNvbnRlbnRzU3dpenpsZWQpIHsgbV9jb250ZW50c1N3aXp6bGVk
ID0gY29udGVudHNTd2l6emxlZDsgfQogICAgIGJvb2wgY29udGVudHNTd2l6emxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudHNTd2l6emxlZDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCA0ZmEx
NjVjZTQ1YWZkZTVlYjM3ZTllOTg5Zjk0M2ZjM2U3NzBlZGNlLi42MzZlMTBmMjI2NTI5MzdjN2I2
OWY1ZjgwZDU5YzllMGE1YTQ3YTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMTI3LDExICsxMjcs
MTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKGNv
bnN0IEludFNpemUmIGNvbnRlbnRTaXplKQogICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICAgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICAgICAgcm9vdC0+c2V0
U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9p
bnQoMCwgMCkpOwogICAgICAgICByb290LT5zZXRNYXhTY3JvbGxQb3NpdGlvbihjb250ZW50U2l6
ZSk7Ci0gICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY29udGVudHMgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDEpOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNvbnRlbnRzID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgyKTsKICAgICAgICAgY29udGVudHMtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKICAgICAgICAgY29udGVudHMtPnNldEJvdW5kcyhjb250ZW50U2l6ZSk7CiAgICAgICAgIGNv
bnRlbnRzLT5zZXRDb250ZW50Qm91bmRzKGNvbnRlbnRTaXplKTsKQEAgLTE4NiwxMiArMTg2LDEy
IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFOb0xheWVycykK
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFUcmVlQnV0Tm9DaGFu
Z2VzKQogewogICAgIHsKLSAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgwKTsKLSAgICAgICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNy
ZWF0ZSgxKSk7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMSk7CiAgICAgICAgIHJvb3QtPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUo
MikpOwotICAgICAgICByb290LT5jaGlsZHJlbigpWzFdLT5hZGRDaGlsZChDQ0xheWVySW1wbDo6
Y3JlYXRlKDMpKTsKKyAgICAgICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSgz
KSk7CiAgICAgICAgIHJvb3QtPmNoaWxkcmVuKClbMV0tPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpj
cmVhdGUoNCkpOwotICAgICAgICByb290LT5jaGlsZHJlbigpWzFdLT5jaGlsZHJlbigpWzBdLT5h
ZGRDaGlsZChDQ0xheWVySW1wbDo6Y3JlYXRlKDUpKTsKKyAgICAgICAgcm9vdC0+Y2hpbGRyZW4o
KVsxXS0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSg1KSk7CisgICAgICAgIHJvb3QtPmNo
aWxkcmVuKClbMV0tPmNoaWxkcmVuKClbMF0tPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUo
NikpOwogICAgICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwog
ICAgIH0KICAgICBDQ0xheWVySW1wbCogcm9vdCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpOwpA
QCAtMjE0LDcgKzIxNCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
RGVsdGFSZXBlYXRlZFNjcm9sbHMpCiAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oMjAsIDMw
KTsKICAgICBJbnRTaXplIHNjcm9sbERlbHRhKDExLCAtMTUpOwogICAgIHsKLSAgICAgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMCk7CisgICAgICAg
IE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAgICAg
ICAgIHJvb3QtPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICAgICAgcm9v
dC0+c2V0U2Nyb2xsYWJsZSh0cnVlKTsKICAgICAgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRp
b24oSW50U2l6ZSgxMDAsIDEwMCkpOwpAQCAtMjYzLDcgKzI2Myw3IEBAIFRFU1RfRihDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsV2l0aG91dFJvb3RMYXllcikKIAogVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCByZXBsYWNlVHJlZVdoaWxlU2Nyb2xsaW5nKQogewotICAgIGNv
bnN0IGludCBzY3JvbGxMYXllcklkID0gMDsKKyAgICBjb25zdCBpbnQgc2Nyb2xsTGF5ZXJJZCA9
IDE7CiAKICAgICBzZXR1cFNjcm9sbEFuZENvbnRlbnRzTGF5ZXJzKEludFNpemUoMTAwLCAxMDAp
KTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoSW50U2l6ZSg1MCwgNTApKTsKQEAg
LTYyNSw4ICs2MjUsMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICBzZXRDb250ZW50Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CiAgICAgICAgIHNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICAgICAg
c2V0U2tpcHNEcmF3KGZhbHNlKTsKKyAgICAgICAgc2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0
KDAsIDAsIDEwLCAxMCkpOwogCiAgICAgICAgIE93blB0cjxDQ0xheWVyVGlsaW5nRGF0YT4gdGls
ZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRlKEludFNpemUoMTAwLCAxMDApLCBDQ0xheWVy
VGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKKyAgICAgICAgdGlsZXItPnNldEJvdW5kcyhj
b250ZW50Qm91bmRzKCkpOwogICAgICAgICBzZXRUaWxpbmdEYXRhKCp0aWxlci5nZXQoKSk7CiAg
ICAgfQogCkBAIC02MzksMTEgKzY0MSwxMSBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIGRpZERyYXdOb3RDYWxsZWRPbkhpZGRlbkxheWVyKQogewogICAgIC8vIFRoZSByb290IGxh
eWVyIGlzIGFsd2F5cyBkcmF3biwgc28gcnVuIHRoaXMgdGVzdCBvbiBhIGNoaWxkIGxheWVyIHRo
YXQKICAgICAvLyB3aWxsIGJlIG1hc2tlZCBvdXQgYnkgdGhlIHJvb3QgbGF5ZXIncyBib3VuZHMu
Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUo
MCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3Jl
YXRlKDEpKTsKICAgICBEaWREcmF3Q2hlY2tMYXllciogcm9vdCA9IHN0YXRpY19jYXN0PERpZERy
YXdDaGVja0xheWVyKj4obV9ob3N0SW1wbC0+cm9vdExheWVyKCkpOwogICAgIHJvb3QtPnNldE1h
c2tzVG9Cb3VuZHModHJ1ZSk7CiAKLSAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXll
cjo6Y3JlYXRlKDEpKTsKKyAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3Jl
YXRlKDIpKTsKICAgICBEaWREcmF3Q2hlY2tMYXllciogbGF5ZXIgPSBzdGF0aWNfY2FzdDxEaWRE
cmF3Q2hlY2tMYXllcio+KHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCkpOwogICAgIC8vIEVuc3Vy
ZSB2aXNpYmxlTGF5ZXJSZWN0IGZvciBsYXllciBpcyBlbXB0eQogICAgIGxheWVyLT5zZXRQb3Np
dGlvbihGbG9hdFBvaW50KDEwMCwgMTAwKSk7CkBAIC02ODYsMTMgKzY4OCwxMyBAQCBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHdpbGxEcmF3Tm90Q2FsbGVkT25PY2NsdWRlZExheWVy
KQogICAgIEludFNpemUgYmlnU2l6ZSgxMDAwLCAxMDAwKTsKICAgICBtX2hvc3RJbXBsLT5zZXRW
aWV3cG9ydFNpemUoYmlnU2l6ZSk7CiAKLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlk
RHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwogICAgIERpZERyYXdDaGVja0xheWVyKiBy
b290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5
ZXIoKSk7CiAKLSAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDEp
KTsKKyAgICByb290LT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDIpKTsKICAg
ICBEaWREcmF3Q2hlY2tMYXllciogb2NjbHVkZWRMYXllciA9IHN0YXRpY19jYXN0PERpZERyYXdD
aGVja0xheWVyKj4ocm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAKLSAgICByb290LT5hZGRD
aGlsZChEaWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDIpKTsKKyAgICByb290LT5hZGRDaGlsZChE
aWREcmF3Q2hlY2tMYXllcjo6Y3JlYXRlKDMpKTsKICAgICBEaWREcmF3Q2hlY2tMYXllciogdG9w
TGF5ZXIgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KHJvb3QtPmNoaWxkcmVuKClb
MV0uZ2V0KCkpOwogICAgIC8vIFRoaXMgbGF5ZXIgY292ZXJzIHRoZSBvY2NsdWRlZExheWVyIGFi
b3ZlLiBNYWtlIHRoaXMgbGF5ZXIgbGFyZ2Ugc28gaXQgY2FuIG9jY2x1ZGUuCiAgICAgdG9wTGF5
ZXItPnNldEJvdW5kcyhiaWdTaXplKTsKQEAgLTcxOCwxMyArNzIwLDEzIEBAIFRFU1RfRihDQ0xh
eWVyVHJlZUhvc3RJbXBsVGVzdCwgd2lsbERyYXdOb3RDYWxsZWRPbk9jY2x1ZGVkTGF5ZXIpCiAK
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgZGlkRHJhd0NhbGxlZE9uQWxsTGF5ZXJz
KQogewotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXllcjo6Y3Jl
YXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0NoZWNrTGF5ZXI6
OmNyZWF0ZSgxKSk7CiAgICAgRGlkRHJhd0NoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2FzdDxE
aWREcmF3Q2hlY2tMYXllcio+KG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKIAotICAgIHJvb3Qt
PmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOworICAgIHJvb3QtPmFkZENo
aWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMikpOwogICAgIERpZERyYXdDaGVja0xheWVy
KiBsYXllcjEgPSBzdGF0aWNfY2FzdDxEaWREcmF3Q2hlY2tMYXllcio+KHJvb3QtPmNoaWxkcmVu
KClbMF0uZ2V0KCkpOwogCi0gICAgbGF5ZXIxLT5hZGRDaGlsZChEaWREcmF3Q2hlY2tMYXllcjo6
Y3JlYXRlKDIpKTsKKyAgICBsYXllcjEtPmFkZENoaWxkKERpZERyYXdDaGVja0xheWVyOjpjcmVh
dGUoMykpOwogICAgIERpZERyYXdDaGVja0xheWVyKiBsYXllcjIgPSBzdGF0aWNfY2FzdDxEaWRE
cmF3Q2hlY2tMYXllcio+KGxheWVyMS0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAKICAgICBsYXll
cjEtPnNldE9wYWNpdHkoMC4zZik7CkBAIC03NjksOSArNzcxLDkgQEAgcHJpdmF0ZToKIFRFU1Rf
RihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgcHJlcGFyZVRvRHJhd0ZhaWxzV2hlbkFuaW1hdGlv
blVzZXNDaGVja2VyYm9hcmQpCiB7CiAgICAgLy8gV2hlbiB0aGUgdGV4dHVyZSBpcyBub3QgbWlz
c2luZywgd2UgZHJhdyBhcyB1c3VhbC4KLSAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlk
RHJhd0NoZWNrTGF5ZXI6OmNyZWF0ZSgwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVy
KERpZERyYXdDaGVja0xheWVyOjpjcmVhdGUoMSkpOwogICAgIERpZERyYXdDaGVja0xheWVyKiBy
b290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5
ZXIoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6
Y3JlYXRlKDEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkpOworICAgIHJvb3QtPmFkZENoaWxkKE1pc3Np
bmdUZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgyLCBmYWxzZSwgZmFsc2UsIHRydWUpKTsK
IAogICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OkZyYW1lRGF0YSBmcmFtZTsKIApAQCAtNzgwLDI3
ICs3ODIsMjcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwcmVwYXJlVG9EcmF3
RmFpbHNXaGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJib2FyZCkKICAgICBtX2hvc3RJbXBsLT5kaWRE
cmF3QWxsTGF5ZXJzKGZyYW1lKTsKIAogICAgIC8vIFdoZW4gYSB0ZXh0dXJlIGlzIG1pc3Npbmcg
YW5kIHdlJ3JlIG5vdCBhbmltYXRpbmcsIHdlIGRyYXcgYXMgdXN1YWwgd2l0aCBjaGVja2VyYm9h
cmRpbmcuCi0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xheWVyOjpj
cmVhdGUoMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tMYXll
cjo6Y3JlYXRlKDEpKTsKICAgICByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNrTGF5ZXIq
PihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1Rl
eHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDEsIHRydWUsIGZhbHNlLCBmYWxzZSkpOworICAg
IHJvb3QtPmFkZENoaWxkKE1pc3NpbmdUZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgyLCB0
cnVlLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIEVYUEVDVF9UUlVFKG1faG9zdEltcGwtPnByZXBh
cmVUb0RyYXcoZnJhbWUpKTsKICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1lKTsKICAg
ICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKIAogICAgIC8vIFdoZW4gYSB0
ZXh0dXJlIGlzIG1pc3NpbmcgYW5kIHdlJ3JlIGFuaW1hdGluZywgd2UgZG9uJ3Qgd2FudCB0byBk
cmF3IGFueXRoaW5nLgotICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hlY2tM
YXllcjo6Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIoRGlkRHJhd0No
ZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CiAgICAgcm9vdCA9IHN0YXRpY19jYXN0PERpZERyYXdDaGVj
a0xheWVyKj4obV9ob3N0SW1wbC0+cm9vdExheWVyKCkpOwotICAgIHJvb3QtPmFkZENoaWxkKE1p
c3NpbmdUZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0ZSgxLCB0cnVlLCBmYWxzZSwgdHJ1ZSkp
OworICAgIHJvb3QtPmFkZENoaWxkKE1pc3NpbmdUZXh0dXJlQW5pbWF0aW5nTGF5ZXI6OmNyZWF0
ZSgyLCB0cnVlLCBmYWxzZSwgdHJ1ZSkpOwogCiAgICAgRVhQRUNUX0ZBTFNFKG1faG9zdEltcGwt
PnByZXBhcmVUb0RyYXcoZnJhbWUpKTsKICAgICBtX2hvc3RJbXBsLT5kcmF3TGF5ZXJzKGZyYW1l
KTsKICAgICBtX2hvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKIAogICAgIC8vIFdo
ZW4gdGhlIGxheWVyIHNraXBzIGRyYXcgYW5kIHdlJ3JlIGFuaW1hdGluZywgd2Ugc3RpbGwgZHJh
dyB0aGUgZnJhbWUuCi0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKERpZERyYXdDaGVja0xh
eWVyOjpjcmVhdGUoMCkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihEaWREcmF3Q2hl
Y2tMYXllcjo6Y3JlYXRlKDEpKTsKICAgICByb290ID0gc3RhdGljX2Nhc3Q8RGlkRHJhd0NoZWNr
TGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQoTWlz
c2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRlKDEsIGZhbHNlLCB0cnVlLCB0cnVlKSk7
CisgICAgcm9vdC0+YWRkQ2hpbGQoTWlzc2luZ1RleHR1cmVBbmltYXRpbmdMYXllcjo6Y3JlYXRl
KDIsIGZhbHNlLCB0cnVlLCB0cnVlKSk7CiAKICAgICBFWFBFQ1RfVFJVRShtX2hvc3RJbXBsLT5w
cmVwYXJlVG9EcmF3KGZyYW1lKSk7CiAgICAgbV9ob3N0SW1wbC0+ZHJhd0xheWVycyhmcmFtZSk7
CkBAIC04MDksNyArODExLDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBwcmVw
YXJlVG9EcmF3RmFpbHNXaGVuQW5pbWF0aW9uVXNlc0NoZWNrZXJib2FyZCkKIAogVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290SWdub3JlZCkKIHsKLSAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAgICAgcm9vdC0+c2V0
U2Nyb2xsYWJsZShmYWxzZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVs
ZWFzZSgpKTsKICAgICBpbml0aWFsaXplTGF5ZXJSZW5kZXJlckFuZERyYXdGcmFtZSgpOwpAQCAt
ODMzLDcgKzgzNSw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTm9u
Q29tcG9zaXRlZFJvb3QpCiAgICAgY29udGVudExheWVyLT5zZXRCb3VuZHMoc3VyZmFjZVNpemUp
OwogICAgIGNvbnRlbnRMYXllci0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKHN1cmZhY2VTaXpl
LndpZHRoKCkgKiAyLCBzdXJmYWNlU2l6ZS5oZWlnaHQoKSAqIDIpKTsKIAotICAgIE93blB0cjxD
Q0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOwog
ICAgIHNjcm9sbExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpOwogICAgIHNjcm9sbExheWVyLT5z
ZXRNYXhTY3JvbGxQb3NpdGlvbihzdXJmYWNlU2l6ZSk7CiAgICAgc2Nyb2xsTGF5ZXItPmFkZENo
aWxkKGNvbnRlbnRMYXllci5yZWxlYXNlKCkpOwpAQCAtODUyLDggKzg1NCw4IEBAIFRFU1RfRihD
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTm9uQ29tcG9zaXRlZFJvb3QpCiBURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHNDb21taXRBbmRSZWRyYXcp
CiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7Ci0gICAgcm9vdC0+YWRkQ2hpbGQo
Y3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7
CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsK
KyAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1
LCA1KSwgc3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdC5y
ZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShzdXJmYWNlU2l6ZSk7
CiAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsKQEAgLTg2OCw4ICs4
NzAsOCBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbENoaWxkQ2FsbHND
b21taXRBbmRSZWRyYXcpCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbE1p
c3Nlc0NoaWxkKQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKLSAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwotICAgIHJvb3Qt
PmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJm
YWNlU2l6ZSkpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDIsIEZs
b2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExh
eWVyKHJvb3QucmVsZWFzZSgpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3Vy
ZmFjZVNpemUpOwogICAgIGluaXRpYWxpemVMYXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CkBA
IC04ODMsOCArODg1LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxN
aXNzZXNDaGlsZCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2Vz
QmFja2ZhY2luZ0NoaWxkKQogewogICAgIEludFNpemUgc3VyZmFjZVNpemUoMTAsIDEwKTsKLSAg
ICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOwotICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGls
ZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigyLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6
ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Vmlld3BvcnRTaXplKHN1cmZhY2VTaXplKTsKIAogICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKQEAgLTkwNiwxMSArOTA4LDExIEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsTWlzc2VzQmFja2ZhY2luZ0NoaWxk
KQogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxCbG9ja2VkQnlDb250ZW50
TGF5ZXIpCiB7CiAgICAgSW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxD
Q0xheWVySW1wbD4gY29udGVudExheWVyID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0
UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNvbnRl
bnRMYXllciA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJm
YWNlU2l6ZSk7CiAgICAgY29udGVudExheWVyLT5zZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQo
dHJ1ZSk7CiAgICAgY29udGVudExheWVyLT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKIAotICAgIE93
blB0cjxDQ0xheWVySW1wbD4gc2Nyb2xsTGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwg
RmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4g
c2Nyb2xsTGF5ZXIgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1LCA1KSwg
c3VyZmFjZVNpemUpOwogICAgIHNjcm9sbExheWVyLT5hZGRDaGlsZChjb250ZW50TGF5ZXIucmVs
ZWFzZSgpKTsKIAogICAgIG1faG9zdEltcGwtPnNldFJvb3RMYXllcihzY3JvbGxMYXllci5yZWxl
YXNlKCkpOwpAQCAtOTI1LDcgKzkyNyw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVz
dCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uTWFpblRocmVhZCkKIHsKICAgICBJbnRT
aXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CiAgICAgZmxvYXQgcGFnZVNjYWxlID0gMjsKLSAgICBP
d25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMCwgRmxvYXRQ
b2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9
IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7
CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgpKTsKICAgICBtX2hv
c3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwogICAgIGluaXRpYWxpemVMYXll
clJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CkBAIC05NDMsNyArOTQ1LDcgQEAgVEVTVF9GKENDTGF5
ZXJUcmVlSG9zdEltcGxUZXN0LCBzY3JvbGxSb290QW5kQ2hhbmdlUGFnZVNjYWxlT25NYWluVGhy
ZWFkKQogICAgIC8vIFRoZSBzY2FsZSBzaG91bGQgYXBwbHkgdG8gdGhlIHNjcm9sbCBkZWx0YS4K
ICAgICBleHBlY3RlZFNjcm9sbERlbHRhLnNjYWxlKHBhZ2VTY2FsZSk7CiAgICAgT3duUHRyPEND
U2Nyb2xsQW5kU2NhbGVTZXQ+IHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xs
RGVsdGFzKCk7Ci0gICAgZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIDAsIGV4cGVj
dGVkU2Nyb2xsRGVsdGEpOworICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZvLmdldCgpLCBt
X2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+aWQoKSwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CiAKICAg
ICAvLyBUaGUgc2Nyb2xsIHJhbmdlIHNob3VsZCBhbHNvIGhhdmUgYmVlbiB1cGRhdGVkLgogICAg
IEVYUEVDVF9FUShtX2hvc3RJbXBsLT5yb290TGF5ZXIoKS0+bWF4U2Nyb2xsUG9zaXRpb24oKSwg
ZXhwZWN0ZWRNYXhTY3JvbGwpOwpAQCAtOTU2LDcgKzk1OCw3IEBAIFRFU1RfRihDQ0xheWVyVHJl
ZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkK
IHsKICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7CiAgICAgZmxvYXQgcGFnZVNjYWxl
ID0gMjsKLSAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBjcmVhdGVTY3JvbGxhYmxlTGF5
ZXIoMCwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9hdFBvaW50KDUsIDUpLCBz
dXJmYWNlU2l6ZSk7CiAgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QucmVsZWFzZSgp
KTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwogICAgIG1f
aG9zdEltcGwtPnNldFBhZ2VTY2FsZUZhY3RvckFuZExpbWl0cygxLCAxLCBwYWdlU2NhbGUpOwpA
QCAtOTc2LDcgKzk3OCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
Um9vdEFuZENoYW5nZVBhZ2VTY2FsZU9uSW1wbFRocmVhZCkKIAogICAgIC8vIFRoZSBzY3JvbGwg
ZGVsdGEgaXMgbm90IHNjYWxlZCBiZWNhdXNlIHRoZSBtYWluIHRocmVhZCBkaWQgbm90IHNjYWxl
LgogICAgIE93blB0cjxDQ1Njcm9sbEFuZFNjYWxlU2V0PiBzY3JvbGxJbmZvID0gbV9ob3N0SW1w
bC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwotICAgIGV4cGVjdENvbnRhaW5zKCpzY3JvbGxJbmZv
LmdldCgpLCAwLCBleHBlY3RlZFNjcm9sbERlbHRhKTsKKyAgICBleHBlY3RDb250YWlucygqc2Ny
b2xsSW5mby5nZXQoKSwgbV9ob3N0SW1wbC0+cm9vdExheWVyKCktPmlkKCksIGV4cGVjdGVkU2Ny
b2xsRGVsdGEpOwogCiAgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgYWxzbyBoYXZlIGJl
ZW4gdXBkYXRlZC4KICAgICBFWFBFQ1RfRVEobV9ob3N0SW1wbC0+cm9vdExheWVyKCktPm1heFNj
cm9sbFBvc2l0aW9uKCksIGV4cGVjdGVkTWF4U2Nyb2xsKTsKQEAgLTk4OCwxMCArOTkwLDExIEBA
IFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsUm9vdEFuZENoYW5nZVBhZ2VT
Y2FsZU9uSW1wbFRocmVhZCkKIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xs
Q2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCiB7CiAgICAgSW50U2l6ZSBzdXJm
YWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllcklt
cGw6OmNyZWF0ZSgxKTsKICAgICAvLyBBbHNvIG1hcmsgdGhlIHJvb3Qgc2Nyb2xsYWJsZSBzbyBp
dCBiZWNvbWVzIHRoZSByb290IHNjcm9sbCBsYXllci4KICAgICByb290LT5zZXRTY3JvbGxhYmxl
KHRydWUpOwotICAgIHJvb3QtPmFkZENoaWxkKGNyZWF0ZVNjcm9sbGFibGVMYXllcigxLCBGbG9h
dFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIGludCBzY3JvbGxMYXllcklkID0gMjsK
KyAgICByb290LT5hZGRDaGlsZChjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoc2Nyb2xsTGF5ZXJJZCwg
RmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdC5yZWxlYXNlKCkpOwogICAgIG1faG9zdEltcGwtPnNldFZpZXdwb3J0U2l6ZShz
dXJmYWNlU2l6ZSk7CiAgICAgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJBbmREcmF3RnJhbWUoKTsK
QEAgLTEwMTEsNyArMTAxNCw3IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Ny
b2xsQ2hpbGRBbmRDaGFuZ2VQYWdlU2NhbGVPbk1haW5UaHJlYWQpCiAgICAgLy8gVGhlIHNjYWxl
IHNob3VsZCBhcHBseSB0byB0aGUgc2Nyb2xsIGRlbHRhLgogICAgIGV4cGVjdGVkU2Nyb2xsRGVs
dGEuc2NhbGUocGFnZVNjYWxlKTsKICAgICBPd25QdHI8Q0NTY3JvbGxBbmRTY2FsZVNldD4gc2Ny
b2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKLSAgICBleHBlY3RD
b250YWlucygqc2Nyb2xsSW5mby5nZXQoKSwgMSwgZXhwZWN0ZWRTY3JvbGxEZWx0YSk7CisgICAg
ZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHNjcm9sbExheWVySWQsIGV4cGVjdGVk
U2Nyb2xsRGVsdGEpOwogCiAgICAgLy8gVGhlIHNjcm9sbCByYW5nZSBzaG91bGQgbm90IGhhdmUg
Y2hhbmdlZC4KICAgICBFWFBFQ1RfRVEoY2hpbGQtPm1heFNjcm9sbFBvc2l0aW9uKCksIGV4cGVj
dGVkTWF4U2Nyb2xsKTsKQEAgLTEwMjYsMTIgKzEwMjksMTIgQEAgVEVTVF9GKENDTGF5ZXJUcmVl
SG9zdEltcGxUZXN0LCBzY3JvbGxDaGlsZEJleW9uZExpbWl0KQogICAgIC8vIHBhcmVudCBsYXll
ciBpcyBzY3JvbGxlZCBvbiB0aGUgYXhpcyBvbiB3aGljaCB0aGUgY2hpbGQgd2FzIHVuYWJsZSB0
bwogICAgIC8vIHNjcm9sbC4KICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7Ci0gICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDAsIEZsb2F0
UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUp
OwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkID0gY3JlYXRlU2Nyb2xsYWJs
ZUxheWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IGdyYW5kQ2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMywgRmxvYXRQb2lu
dCg1LCA1KSwgc3VyZmFjZVNpemUpOwogICAgIGdyYW5kQ2hpbGQtPnNldFNjcm9sbFBvc2l0aW9u
KEludFBvaW50KDAsIDUpKTsKIAotICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVh
dGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOworICAg
IE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxv
YXRQb2ludCg1LCA1KSwgc3VyZmFjZVNpemUpOwogICAgIGNoaWxkLT5zZXRTY3JvbGxQb3NpdGlv
bihJbnRQb2ludCgzLCAwKSk7CiAgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQucmVsZWFz
ZSgpKTsKIApAQCAtMTA2Miw4ICsxMDY1LDggQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxU
ZXN0LCBzY3JvbGxFdmVudEJ1YmJsaW5nKQogICAgIC8vIFdoZW4gd2UgdHJ5IHRvIHNjcm9sbCBh
IG5vbi1zY3JvbGxhYmxlIGNoaWxkIGxheWVyLCB0aGUgc2Nyb2xsIGRlbHRhCiAgICAgLy8gc2hv
dWxkIGJlIGFwcGxpZWQgdG8gb25lIG9mIGl0cyBhbmNlc3RvcnMgaWYgcG9zc2libGUuCiAgICAg
SW50U2l6ZSBzdXJmYWNlU2l6ZSgxMCwgMTApOwotICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9v
dCA9IGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6
ZSk7Ci0gICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IGNyZWF0ZVNjcm9sbGFibGVMYXll
cigxLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSk7CisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gY3JlYXRlU2Nyb2xsYWJsZUxheWVyKDEsIEZsb2F0UG9pbnQoNSwgNSksIHN1
cmZhY2VTaXplKTsKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gY3JlYXRlU2Nyb2xs
YWJsZUxheWVyKDIsIEZsb2F0UG9pbnQoNSwgNSksIHN1cmZhY2VTaXplKTsKIAogICAgIGNoaWxk
LT5zZXRTY3JvbGxhYmxlKGZhbHNlKTsKICAgICByb290LT5hZGRDaGlsZChjaGlsZC5yZWxlYXNl
KCkpOwpAQCAtMTA4OCwxMyArMTA5MSwxMyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRl
c3QsIHNjcm9sbEV2ZW50QnViYmxpbmcpCiBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3Qs
IHNjcm9sbEJlZm9yZVJlZHJhdykKIHsKICAgICBJbnRTaXplIHN1cmZhY2VTaXplKDEwLCAxMCk7
Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXllcigwLCBG
bG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMSwgRmxvYXRQb2ludCg1LCA1KSwgc3VyZmFjZVNp
emUpKTsKICAgICBtX2hvc3RJbXBsLT5zZXRWaWV3cG9ydFNpemUoc3VyZmFjZVNpemUpOwogCiAg
ICAgLy8gRHJhdyBvbmUgZnJhbWUgYW5kIHRoZW4gaW1tZWRpYXRlbHkgcmVidWlsZCB0aGUgbGF5
ZXIgdHJlZSB0byBtaW1pYyBhIHRyZWUgc3luY2hyb25pemF0aW9uLgogICAgIGluaXRpYWxpemVM
YXllclJlbmRlcmVyQW5kRHJhd0ZyYW1lKCk7CiAgICAgbV9ob3N0SW1wbC0+ZGV0YWNoTGF5ZXJU
cmVlKCk7Ci0gICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKGNyZWF0ZVNjcm9sbGFibGVMYXll
cigwLCBGbG9hdFBvaW50KDUsIDUpLCBzdXJmYWNlU2l6ZSkpOworICAgIG1faG9zdEltcGwtPnNl
dFJvb3RMYXllcihjcmVhdGVTY3JvbGxhYmxlTGF5ZXIoMiwgRmxvYXRQb2ludCg1LCA1KSwgc3Vy
ZmFjZVNpemUpKTsKIAogICAgIC8vIFNjcm9sbGluZyBzaG91bGQgc3RpbGwgd29yayBldmVuIHRo
b3VnaCB3ZSBkaWQgbm90IGRyYXcgeWV0LgogICAgIEVYUEVDVF9FUShtX2hvc3RJbXBsLT5zY3Jv
bGxCZWdpbihJbnRQb2ludCg1LCA1KSwgQ0NJbnB1dEhhbmRsZXJDbGllbnQ6OldoZWVsKSwgQ0NJ
bnB1dEhhbmRsZXJDbGllbnQ6OlNjcm9sbFN0YXJ0ZWQpOwpAQCAtMTE4Niw3ICsxMTg5LDcgQEAg
VEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBibGVuZGluZ09mZldoZW5EcmF3aW5nT3Bh
cXVlTGF5ZXJzKQogewogCiAgICAgewotICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3Qg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDApOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgICAgICByb290LT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50KDAsIDApKTsKICAgICAgICAgcm9vdC0+c2V0Qm91bmRzKEludFNpemUoMTAs
IDEwKSk7CiAgICAgICAgIHJvb3QtPnNldENvbnRlbnRCb3VuZHMocm9vdC0+Ym91bmRzKCkpOwpA
QCAtMTE5NSw3ICsxMTk4LDcgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBibGVu
ZGluZ09mZldoZW5EcmF3aW5nT3BhcXVlTGF5ZXJzKQogICAgIH0KICAgICBDQ0xheWVySW1wbCog
cm9vdCA9IG1faG9zdEltcGwtPnJvb3RMYXllcigpOwogCi0gICAgcm9vdC0+YWRkQ2hpbGQoQmxl
bmRTdGF0ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CisgICAgcm9vdC0+YWRkQ2hpbGQoQmxlbmRT
dGF0ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgyKSk7CiAgICAgQmxlbmRTdGF0ZUNoZWNrTGF5ZXIqIGxh
eWVyMSA9IHN0YXRpY19jYXN0PEJsZW5kU3RhdGVDaGVja0xheWVyKj4ocm9vdC0+Y2hpbGRyZW4o
KVswXS5nZXQoKSk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsOjpGcmFtZURhdGEgZnJhbWU7
CkBAIC0xMjQ3LDcgKzEyNTAsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGJs
ZW5kaW5nT2ZmV2hlbkRyYXdpbmdPcGFxdWVMYXllcnMpCiAgICAgRVhQRUNUX1RSVUUobGF5ZXIx
LT5xdWFkc0FwcGVuZGVkKCkpOwogICAgIG1faG9zdEltcGwtPmRpZERyYXdBbGxMYXllcnMoZnJh
bWUpOwogCi0gICAgbGF5ZXIxLT5hZGRDaGlsZChCbGVuZFN0YXRlQ2hlY2tMYXllcjo6Y3JlYXRl
KDIpKTsKKyAgICBsYXllcjEtPmFkZENoaWxkKEJsZW5kU3RhdGVDaGVja0xheWVyOjpjcmVhdGUo
MykpOwogICAgIEJsZW5kU3RhdGVDaGVja0xheWVyKiBsYXllcjIgPSBzdGF0aWNfY2FzdDxCbGVu
ZFN0YXRlQ2hlY2tMYXllcio+KGxheWVyMS0+Y2hpbGRyZW4oKVswXS5nZXQoKSk7CiAKICAgICAv
LyAyIG9wYXF1ZSBsYXllcnMsIGRyYXduIHdpdGhvdXQgYmxlbmRpbmcuCkBAIC0xNDA3LDcgKzE0
MTAsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHZpZXdwb3J0Q292ZXJlZCkK
ICAgICBJbnRTaXplIHZpZXdwb3J0U2l6ZSgxMDAwLCAxMDAwKTsKICAgICBtX2hvc3RJbXBsLT5z
ZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKIAotICAgIG1faG9zdEltcGwtPnNldFJvb3RM
YXllcihCbGVuZFN0YXRlQ2hlY2tMYXllcjo6Y3JlYXRlKDApKTsKKyAgICBtX2hvc3RJbXBsLT5z
ZXRSb290TGF5ZXIoQmxlbmRTdGF0ZUNoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CiAgICAgQmxlbmRT
dGF0ZUNoZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2FzdDxCbGVuZFN0YXRlQ2hlY2tMYXllcio+
KG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKICAgICByb290LT5zZXRFeHBlY3RhdGlvbihmYWxz
ZSwgdHJ1ZSk7CiAgICAgcm9vdC0+c2V0T3BhcXVlKHRydWUpOwpAQCAtMTk5Nyw3ICsyMDAwLDcg
QEAgcHJpdmF0ZToKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBjb250ZXh0TG9z
dEFuZFJlc3RvcmVkTm90aWZpY2F0aW9uU2VudFRvQWxsTGF5ZXJzKQogewotICAgIG1faG9zdElt
cGwtPnNldFJvb3RMYXllcihDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5ZXI6OmNyZWF0
ZSgwKSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKENvbnRleHRMb3N0Tm90aWZpY2F0
aW9uQ2hlY2tMYXllcjo6Y3JlYXRlKDEpKTsKICAgICBDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNo
ZWNrTGF5ZXIqIHJvb3QgPSBzdGF0aWNfY2FzdDxDb250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNr
TGF5ZXIqPihtX2hvc3RJbXBsLT5yb290TGF5ZXIoKSk7CiAKICAgICByb290LT5hZGRDaGlsZChD
b250ZXh0TG9zdE5vdGlmaWNhdGlvbkNoZWNrTGF5ZXI6OmNyZWF0ZSgxKSk7CkBAIC0yMjAwLDEx
ICsyMjAzLDExIEBAIHB1YmxpYzoKIAogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBk
b250VXNlT2xkUmVzb3VyY2VzQWZ0ZXJMb3N0Q29udGV4dCkKIHsKLSAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3RMYXllcihDQ0xheWVySW1wbDo6Y3JlYXRlKDApKTsKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3RMYXllcihDQ0xheWVySW1wbDo6Y3JlYXRlKDEpKTsKICAgICByb290TGF5
ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHJvb3RMYXllci0+c2V0QW5jaG9y
UG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CiAKLSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4g
dGlsZUxheWVyID0gQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIE93blB0cjxDQ1Rp
bGVkTGF5ZXJJbXBsPiB0aWxlTGF5ZXIgPSBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUoMik7CiAg
ICAgdGlsZUxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICB0aWxlTGF5ZXIt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwogICAgIHRpbGVMYXllci0+c2V0Q29u
dGVudEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwpAQCAtMjIxNiw3ICsyMjE5LDcgQEAgVEVTVF9G
KENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBkb250VXNlT2xkUmVzb3VyY2VzQWZ0ZXJMb3N0Q29u
dGV4dCkKICAgICB0aWxlTGF5ZXItPnB1c2hUaWxlUHJvcGVydGllcygwLCAwLCAxLCBJbnRSZWN0
KDAsIDAsIDEwLCAxMCkpOwogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodGlsZUxheWVyLnJlbGVh
c2UoKSk7CiAKLSAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJbXBsPiB0ZXh0dXJlTGF5ZXIgPSBD
Q1RleHR1cmVMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJ
bXBsPiB0ZXh0dXJlTGF5ZXIgPSBDQ1RleHR1cmVMYXllckltcGw6OmNyZWF0ZSgzKTsKICAgICB0
ZXh0dXJlTGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIHRleHR1cmVMYXll
ci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludCgwLCAwKSk7CiAgICAgdGV4dHVyZUxheWVyLT5z
ZXRDb250ZW50Qm91bmRzKEludFNpemUoMTAsIDEwKSk7CkBAIC0yMjI1LDcgKzIyMjgsNyBAQCBU
RVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJjZXNBZnRlckxv
c3RDb250ZXh0KQogICAgIHJvb3RMYXllci0+YWRkQ2hpbGQodGV4dHVyZUxheWVyLnJlbGVhc2Uo
KSk7CiAKICAgICBGYWtlVmlkZW9GcmFtZVByb3ZpZGVyIHByb3ZpZGVyOwotICAgIE93blB0cjxD
Q1ZpZGVvTGF5ZXJJbXBsPiB2aWRlb0xheWVyID0gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKDMs
ICZwcm92aWRlcik7CisgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw+IHZpZGVvTGF5ZXIgPSBD
Q1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUoNCwgJnByb3ZpZGVyKTsKICAgICB2aWRlb0xheWVyLT5z
ZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsKICAgICB2aWRlb0xheWVyLT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50KDAsIDApKTsKICAgICB2aWRlb0xheWVyLT5zZXRDb250ZW50Qm91bmRzKElu
dFNpemUoMTAsIDEwKSk7CkBAIC0yMjMzLDcgKzIyMzYsNyBAQCBURVNUX0YoQ0NMYXllclRyZWVI
b3N0SW1wbFRlc3QsIGRvbnRVc2VPbGRSZXNvdXJjZXNBZnRlckxvc3RDb250ZXh0KQogICAgIHZp
ZGVvTGF5ZXItPnNldExheWVyVHJlZUhvc3RJbXBsKG1faG9zdEltcGwuZ2V0KCkpOwogICAgIHJv
b3RMYXllci0+YWRkQ2hpbGQodmlkZW9MYXllci5yZWxlYXNlKCkpOwogCi0gICAgT3duUHRyPEND
SU9TdXJmYWNlTGF5ZXJJbXBsPiBpb1N1cmZhY2VMYXllciA9IENDSU9TdXJmYWNlTGF5ZXJJbXBs
OjpjcmVhdGUoNCk7CisgICAgT3duUHRyPENDSU9TdXJmYWNlTGF5ZXJJbXBsPiBpb1N1cmZhY2VM
YXllciA9IENDSU9TdXJmYWNlTGF5ZXJJbXBsOjpjcmVhdGUoNSk7CiAgICAgaW9TdXJmYWNlTGF5
ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwogICAgIGlvU3VyZmFjZUxheWVyLT5zZXRB
bmNob3JQb2ludChGbG9hdFBvaW50KDAsIDApKTsKICAgICBpb1N1cmZhY2VMYXllci0+c2V0Q29u
dGVudEJvdW5kcyhJbnRTaXplKDEwLCAxMCkpOwpAQCAtMjQ2NSw2ICsyNDY4LDExIEBAIHN0YXRp
YyB2b2lkIHNldHVwTGF5ZXJzRm9yVGV4dHVyZUNhY2hpbmcoQ0NMYXllclRyZWVIb3N0SW1wbCog
bGF5ZXJUcmVlSG9zdEltcGwsCiAgICAgc3VyZmFjZUxheWVyUHRyLT5hZGRDaGlsZChjaGlsZC5y
ZWxlYXNlKCkpOwogfQogCitjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW1XaXRoUmVsZWFzZVRl
eHR1cmVzIDogcHVibGljIExheWVyUmVuZGVyZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgdXNp
bmcgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyUGFzc1RleHR1cmVzOworfTsK
KwogVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBzdXJmYWNlVGV4dHVyZUNhY2hpbmcp
CiB7CiAgICAgQ0NTZXR0aW5nczo6c2V0UGFydGlhbFN3YXBFbmFibGVkKHRydWUpOwpAQCAtMjU0
OCwyMiArMjU1Niw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRl
eHR1cmVDYWNoaW5nKQogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1l
KTsKICAgICB9CiAKLSAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhZ2FpbiwgYnV0IGV2aWN0IHRoZSBj
YWNoZWQgc3VyZmFjZSB0ZXh0dXJlCisgICAgLy8gQ2hhbmdlIG9wYWNpdHkgYWdhaW4sIGFuZCBl
dmljdCB0aGUgY2FjaGVkIHN1cmZhY2UgdGV4dHVyZS4KICAgICBzdXJmYWNlTGF5ZXJQdHItPnNl
dE9wYWNpdHkoMC41Zik7Ci0gICAgTWFuYWdlZFRleHR1cmUqIGNvbnRlbnRzVGV4dHVyZSA9IHN1
cmZhY2VMYXllclB0ci0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKTsKLSAgICBB
U1NFUlRfVFJVRShjb250ZW50c1RleHR1cmUtPmlzVmFsaWQoY29udGVudHNUZXh0dXJlLT5zaXpl
KCksIGNvbnRlbnRzVGV4dHVyZS0+Zm9ybWF0KCkpKTsKLSAgICBDQ1JlbmRlcmVyKiByZW5kZXJl
ciA9IG15SG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKTsKLSAgICBUZXh0dXJlTWFuYWdlciogdGV4
dHVyZU1hbmFnZXIgPSByZW5kZXJlci0+aW1wbFRleHR1cmVNYW5hZ2VyKCk7Ci0gICAgc2l6ZV90
IG1heE1lbW9yeUxpbWl0ID0gdGV4dHVyZU1hbmFnZXItPm1heE1lbW9yeUxpbWl0Qnl0ZXMoKTsK
LQotICAgIC8vIFRoaXMgc2hvdWxkIGV2aWNlIGFsbCBjYWNoZWQgc3VyZmFjZXMKLSAgICB0ZXh0
dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRlcygwKTsKLQotICAgIC8vIFJlc3RvcmUg
b3JpZ2luYWwgbGltaXQKLSAgICB0ZXh0dXJlTWFuYWdlci0+c2V0TWF4TWVtb3J5TGltaXRCeXRl
cyhtYXhNZW1vcnlMaW1pdCk7Ci0KLSAgICAvLyBXYXMgb3VyIHN1cmZhY2UgZXZpY3RlZD8KLSAg
ICBBU1NFUlRfRkFMU0UoY29udGVudHNUZXh0dXJlLT5pc1ZhbGlkKGNvbnRlbnRzVGV4dHVyZS0+
c2l6ZSgpLCBjb250ZW50c1RleHR1cmUtPmZvcm1hdCgpKSk7CisgICAgc3RhdGljX2Nhc3Q8TGF5
ZXJSZW5kZXJlckNocm9taXVtV2l0aFJlbGVhc2VUZXh0dXJlcyo+KG15SG9zdEltcGwtPmxheWVy
UmVuZGVyZXIoKSktPnJlbGVhc2VSZW5kZXJQYXNzVGV4dHVyZXMoKTsKIAogICAgIC8vIENoYW5n
ZSBvcGFjaXR5IGFuZCBkcmF3CiAgICAgc3VyZmFjZUxheWVyUHRyLT5zZXRPcGFjaXR5KDAuNmYp
OwpAQCAtMjU4Myw2ICsyNTc4LDkgQEAgVEVTVF9GKENDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LCBz
dXJmYWNlVGV4dHVyZUNhY2hpbmcpCiAgICAgICAgIENDUmVuZGVyUGFzc0RyYXdRdWFkKiBxdWFk
ID0gc3RhdGljX2Nhc3Q8Q0NSZW5kZXJQYXNzRHJhd1F1YWQqPihmcmFtZS5yZW5kZXJQYXNzZXNb
MV0tPnF1YWRMaXN0KClbMF0uZ2V0KCkpOwogICAgICAgICBFWFBFQ1RfRkFMU0UocXVhZC0+cmVu
ZGVyUGFzcygpLT50YXJnZXRTdXJmYWNlKCktPmNvbnRlbnRzQ2hhbmdlZCgpKTsKIAorICAgICAg
ICAvLyBXYXMgb3VyIHN1cmZhY2UgZXZpY3RlZD8KKyAgICAgICAgRVhQRUNUX0ZBTFNFKG15SG9z
dEltcGwtPmxheWVyUmVuZGVyZXIoKS0+aGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJ
ZChxdWFkLT5yZW5kZXJQYXNzKCktPmlkKCkpKTsKKwogICAgICAgICBteUhvc3RJbXBsLT5kcmF3
TGF5ZXJzKGZyYW1lKTsKICAgICAgICAgbXlIb3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFt
ZSk7CiAgICAgfQpAQCAtMjcwNiwyMiArMjcwNCw5IEBAIFRFU1RfRihDQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0aWFsU3dhcCkKICAgICAgICAgbXlI
b3N0SW1wbC0+ZGlkRHJhd0FsbExheWVycyhmcmFtZSk7CiAgICAgfQogCi0gICAgLy8gQ2hhbmdl
IG9wYWNpdHkgYWdhaW4sIGJ1dCBldmljdCB0aGUgY2FjaGVkIHN1cmZhY2UgdGV4dHVyZQorICAg
IC8vIENoYW5nZSBvcGFjaXR5IGFnYWluLCBhbmQgZXZpY3QgdGhlIGNhY2hlZCBzdXJmYWNlIHRl
eHR1cmUuCiAgICAgc3VyZmFjZUxheWVyUHRyLT5zZXRPcGFjaXR5KDAuNWYpOwotICAgIE1hbmFn
ZWRUZXh0dXJlKiBjb250ZW50c1RleHR1cmUgPSBzdXJmYWNlTGF5ZXJQdHItPnJlbmRlclN1cmZh
Y2UoKS0+Y29udGVudHNUZXh0dXJlKCk7Ci0gICAgQVNTRVJUX1RSVUUoY29udGVudHNUZXh0dXJl
LT5pc1ZhbGlkKGNvbnRlbnRzVGV4dHVyZS0+c2l6ZSgpLCBjb250ZW50c1RleHR1cmUtPmZvcm1h
dCgpKSk7Ci0gICAgQ0NSZW5kZXJlciogcmVuZGVyZXIgPSBteUhvc3RJbXBsLT5sYXllclJlbmRl
cmVyKCk7Ci0gICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyID0gcmVuZGVyZXItPmlt
cGxUZXh0dXJlTWFuYWdlcigpOwotICAgIHNpemVfdCBtYXhNZW1vcnlMaW1pdCA9IHRleHR1cmVN
YW5hZ2VyLT5tYXhNZW1vcnlMaW1pdEJ5dGVzKCk7Ci0KLSAgICAvLyBUaGlzIHNob3VsZCBldmlj
ZSBhbGwgY2FjaGVkIHN1cmZhY2VzCi0gICAgdGV4dHVyZU1hbmFnZXItPnNldE1heE1lbW9yeUxp
bWl0Qnl0ZXMoMCk7Ci0KLSAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGxpbWl0Ci0gICAgdGV4dHVy
ZU1hbmFnZXItPnNldE1heE1lbW9yeUxpbWl0Qnl0ZXMobWF4TWVtb3J5TGltaXQpOwotCi0gICAg
Ly8gV2FzIG91ciBzdXJmYWNlIGV2aWN0ZWQ/Ci0gICAgQVNTRVJUX0ZBTFNFKGNvbnRlbnRzVGV4
dHVyZS0+aXNWYWxpZChjb250ZW50c1RleHR1cmUtPnNpemUoKSwgY29udGVudHNUZXh0dXJlLT5m
b3JtYXQoKSkpOworICAgIHN0YXRpY19jYXN0PExheWVyUmVuZGVyZXJDaHJvbWl1bVdpdGhSZWxl
YXNlVGV4dHVyZXMqPihteUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkpLT5yZWxlYXNlUmVuZGVy
UGFzc1RleHR1cmVzKCk7CiAKICAgICAvLyBDaGFuZ2Ugb3BhY2l0eSBhbmQgZHJhdwogICAgIHN1
cmZhY2VMYXllclB0ci0+c2V0T3BhY2l0eSgwLjZmKTsKQEAgLTI3NDEsNiArMjcyNiw5IEBAIFRF
U1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc3VyZmFjZVRleHR1cmVDYWNoaW5nTm9QYXJ0
aWFsU3dhcCkKICAgICAgICAgQ0NSZW5kZXJQYXNzRHJhd1F1YWQqIHF1YWQgPSBzdGF0aWNfY2Fz
dDxDQ1JlbmRlclBhc3NEcmF3UXVhZCo+KGZyYW1lLnJlbmRlclBhc3Nlc1sxXS0+cXVhZExpc3Qo
KVswXS5nZXQoKSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLT5yZW5kZXJQYXNzKCktPnRh
cmdldFN1cmZhY2UoKS0+Y29udGVudHNDaGFuZ2VkKCkpOwogCisgICAgICAgIC8vIFdhcyBvdXIg
c3VyZmFjZSBldmljdGVkPworICAgICAgICBFWFBFQ1RfRkFMU0UobXlIb3N0SW1wbC0+bGF5ZXJS
ZW5kZXJlcigpLT5oYXZlQ2FjaGVkUmVzb3VyY2VzRm9yUmVuZGVyUGFzc0lkKHF1YWQtPnJlbmRl
clBhc3MoKS0+aWQoKSkpOworCiAgICAgICAgIG15SG9zdEltcGwtPmRyYXdMYXllcnMoZnJhbWUp
OwogICAgICAgICBteUhvc3RJbXBsLT5kaWREcmF3QWxsTGF5ZXJzKGZyYW1lKTsKICAgICB9CkBA
IC0yODk4LDg3ICsyODg2LDc2IEBAIHN0cnVjdCBSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhIHsK
ICAgICBPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZTsKIH07CiAKLWNs
YXNzIEZha2VSZW5kZXJTdXJmYWNlIDogcHVibGljIENDUmVuZGVyU3VyZmFjZSB7Ci1wcml2YXRl
OgotICAgIGJvb2wgbV9oYXNDYWNoZWRUZXh0dXJlOwotICAgIGJvb2wgbV9jb250ZW50c0NoYW5n
ZWQ7Ci0KK2NsYXNzIENDVGVzdFJlbmRlclBhc3M6IHB1YmxpYyBDQ1JlbmRlclBhc3MgewogcHVi
bGljOgotICAgIEZha2VSZW5kZXJTdXJmYWNlKENDTGF5ZXJJbXBsKiBsYXllckltcGwpCi0gICAg
ICAgIDogQ0NSZW5kZXJTdXJmYWNlKGxheWVySW1wbCksCi0gICAgICAgICAgbV9oYXNDYWNoZWRU
ZXh0dXJlKGZhbHNlKQotICAgIHsKLSAgICB9CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5k
ZXJQYXNzPiBjcmVhdGUoQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRTdXJmYWNlLCBpbnQgaWQpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Rlc3RSZW5kZXJQYXNzKHRhcmdldFN1cmZhY2UsIGlkKSk7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBoYXNDYWNoZWRDb250ZW50c1RleHR1cmUoKSBjb25zdCBP
VkVSUklERQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGFzQ2FjaGVkVGV4dHVyZTsKLSAgICB9
CisgICAgdm9pZCBhcHBlbmRRdWFkKFBhc3NPd25QdHI8Q0NEcmF3UXVhZD4gcXVhZCkgeyBtX3F1
YWRMaXN0LmFwcGVuZChxdWFkKTsgfQogCi0gICAgdmlydHVhbCBib29sIHByZXBhcmVDb250ZW50
c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBscmMpIE9WRVJSSURFCi0gICAgewotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Citwcm90ZWN0ZWQ6CisgICAgQ0NUZXN0UmVuZGVyUGFz
cyhDQ1JlbmRlclN1cmZhY2UqIHRhcmdldFN1cmZhY2UsIGludCBpZCkgOiBDQ1JlbmRlclBhc3Mo
dGFyZ2V0U3VyZmFjZSwgaWQpIHsgfQorfTsKIAotICAgIHZpcnR1YWwgYm9vbCBjb250ZW50c0No
YW5nZWQoKSBjb25zdCBPVkVSUklERQorY2xhc3MgQ0NUZXN0UmVuZGVyZXIgOiBwdWJsaWMgTGF5
ZXJSZW5kZXJlckNocm9taXVtLCBwdWJsaWMgQ0NSZW5kZXJlckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUZXN0UmVuZGVyZXI+IGNyZWF0ZShXZWJLaXQ6OldlYkdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY29udGVu
dHNDaGFuZ2VkOwotICAgIH0KKyAgICAgICAgT3duUHRyPENDVGVzdFJlbmRlcmVyPiByZW5kZXJl
cihhZG9wdFB0cihuZXcgQ0NUZXN0UmVuZGVyZXIoY29udGV4dCkpKTsKKyAgICAgICAgaWYgKCFy
ZW5kZXJlci0+aW5pdGlhbGl6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICB2b2lkIHNldEhhc0NhY2hlZFRleHR1cmUoYm9vbCBoYXNDYWNoZWRUZXh0dXJlKQotICAgIHsK
LSAgICAgICAgbV9oYXNDYWNoZWRUZXh0dXJlID0gaGFzQ2FjaGVkVGV4dHVyZTsKKyAgICAgICAg
cmV0dXJuIHJlbmRlcmVyLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbnRlbnRz
Q2hhbmdlZChib29sIGNvbnRlbnRzQ2hhbmdlZCkKLSAgICB7Ci0gICAgICAgIG1fY29udGVudHND
aGFuZ2VkID0gY29udGVudHNDaGFuZ2VkOwotICAgIH0KLX07CisgICAgdm9pZCBjbGVhckNhY2hl
ZFRleHR1cmVzKCkgeyBtX3RleHR1cmVzLmNsZWFyKCk7IH0KKyAgICB2b2lkIHNldEhhdmVDYWNo
ZWRSZXNvdXJjZXNGb3JSZW5kZXJQYXNzSWQoaW50IGlkKSB7IG1fdGV4dHVyZXMuYWRkKGlkKTsg
fQogCi1jbGFzcyBDQ1Rlc3RSZW5kZXJQYXNzOiBwdWJsaWMgQ0NSZW5kZXJQYXNzIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZShDQ1JlbmRlclN1
cmZhY2UqIHRhcmdldFN1cmZhY2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IENDVGVzdFJlbmRlclBhc3ModGFyZ2V0U3VyZmFjZSkpOwotICAgIH0KKyAgICB2aXJ0dWFsIGJv
b2wgaGF2ZUNhY2hlZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChpbnQgaWQpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fdGV4dHVyZXMuY29udGFpbnMoaWQpOyB9CisKKyAgICAvLyBDQ1JlbmRl
cmVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgorICAgIHZpcnR1YWwgY29uc3QgSW50U2l6ZSYgZGV2
aWNlVmlld3BvcnRTaXplKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92aWV3cG9ydFNpemU7
IH0KKyAgICB2aXJ0dWFsIGNvbnN0IENDTGF5ZXJUcmVlU2V0dGluZ3MmIHNldHRpbmdzKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV9zZXR0aW5nczsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRM
b3NlQ29udGV4dCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJz
Q29tcGxldGUoKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0RnVsbFJvb3RMYXll
ckRhbWFnZSgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlQ29udGVudHNU
ZXh0dXJlcygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlBbGxvY2F0
aW9uTGltaXRCeXRlcyhzaXplX3QpIE9WRVJSSURFIHsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NU
ZXN0UmVuZGVyUGFzcyhDQ1JlbmRlclN1cmZhY2UqIHN1cmZhY2UpCi0gICAgICAgIDogQ0NSZW5k
ZXJQYXNzKHN1cmZhY2UpCi0gICAgewotICAgIH0KKyAgICBDQ1Rlc3RSZW5kZXJlcihXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KSA6IExheWVyUmVuZGVyZXJDaHJvbWl1bSh0
aGlzLCBjb250ZXh0LCBVbnRocm90dGxlZFVwbG9hZGVyKSB7IH0KIAotcHVibGljOgotICAgIHZv
aWQgYXBwZW5kUXVhZChQYXNzT3duUHRyPENDRHJhd1F1YWQ+IHF1YWQpCi0gICAgewotICAgICAg
ICBtX3F1YWRMaXN0LmFwcGVuZChxdWFkKTsKLSAgICB9Citwcml2YXRlOgorICAgIENDTGF5ZXJU
cmVlU2V0dGluZ3MgbV9zZXR0aW5nczsKKyAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOworICAg
IEhhc2hTZXQ8aW50PiBtX3RleHR1cmVzOwogfTsKIAotc3RhdGljIFBhc3NPd25QdHI8Q0NSZW5k
ZXJQYXNzPiBjcmVhdGVEdW1teVJlbmRlclBhc3MoUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYg
dGVzdERhdGEpCitzdGF0aWMgUGFzc093blB0cjxDQ1JlbmRlclBhc3M+IGNyZWF0ZUR1bW15UmVu
ZGVyUGFzcyhSZW5kZXJQYXNzUmVtb3ZhbFRlc3REYXRhJiB0ZXN0RGF0YSwgaW50IGlkKQogewot
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gbGF5ZXJJbXBsID0gQ0NMYXllckltcGw6OmNyZWF0ZSgx
KTsKLSAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSBuZXcgRmFrZVJlbmRlclN1
cmZhY2UobGF5ZXJJbXBsLmdldCgpKTsKLSAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZW5kZXJQ
YXNzUHRyID0gQ0NUZXN0UmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UpOworICAgIE93
blB0cjxDQ0xheWVySW1wbD4gbGF5ZXJJbXBsKENDTGF5ZXJJbXBsOjpjcmVhdGUoaWQpKTsKKyAg
ICBPd25QdHI8Q0NSZW5kZXJTdXJmYWNlPiByZW5kZXJTdXJmYWNlKGFkb3B0UHRyKG5ldyBDQ1Jl
bmRlclN1cmZhY2UobGF5ZXJJbXBsLmdldCgpKSkpOworICAgIE93blB0cjxDQ1JlbmRlclBhc3M+
IHJlbmRlclBhc3NQdHIoQ0NUZXN0UmVuZGVyUGFzczo6Y3JlYXRlKHJlbmRlclN1cmZhY2UuZ2V0
KCksIGxheWVySW1wbC0+aWQoKSkpOwogCi0gICAgdGVzdERhdGEucmVuZGVyU3VyZmFjZVN0b3Jl
LmFwcGVuZChhZG9wdFB0cihyZW5kZXJTdXJmYWNlKSk7CisgICAgdGVzdERhdGEucmVuZGVyU3Vy
ZmFjZVN0b3JlLmFwcGVuZChyZW5kZXJTdXJmYWNlLnJlbGVhc2UoKSk7CiAgICAgdGVzdERhdGEu
bGF5ZXJTdG9yZS5hcHBlbmQobGF5ZXJJbXBsLnJlbGVhc2UoKSk7CiAgICAgcmV0dXJuIHJlbmRl
clBhc3NQdHIucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNz
VGVzdERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0
YSYgdGVzdERhdGEpCitzdGF0aWMgdm9pZCBjb25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29u
c3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92YWxUZXN0RGF0YSYgdGVzdERhdGEs
IENDVGVzdFJlbmRlcmVyKiByZW5kZXJlcikKIHsKKyAgICByZW5kZXJlci0+Y2xlYXJDYWNoZWRU
ZXh0dXJlcygpOworCiAgICAgLy8gT25lIHNoYXJlZCBzdGF0ZSBmb3IgYWxsIHF1YWRzIC0gd2Ug
ZG9uJ3QgbmVlZCB0aGUgY29ycmVjdCBkZXRhaWxzCiAgICAgdGVzdERhdGEuc2hhcmVkUXVhZFN0
YXRlID0gQ0NTaGFyZWRRdWFkU3RhdGU6OmNyZWF0ZShXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBJbnRSZWN0KCksIEludFJlY3QoKSwgMS4wLCB0
cnVlKTsKIAogICAgIGNvbnN0IGNoYXIqIGN1cnJlbnRDaGFyID0gdGVzdFNjcmlwdDsKIAogICAg
IC8vIFByZS1jcmVhdGUgcm9vdCBwYXNzCi0gICAgT3duUHRyPENDUmVuZGVyUGFzcz4gcm9vdFJl
bmRlclBhc3MgPSBjcmVhdGVEdW1teVJlbmRlclBhc3ModGVzdERhdGEpOwotICAgIHRlc3REYXRh
LnJlbmRlclBhc3NJZC5pbnNlcnQoc3RkOjpwYWlyPENDUmVuZGVyUGFzcyosIGNoYXI+KHJvb3RS
ZW5kZXJQYXNzLmdldCgpLCB0ZXN0U2NyaXB0WzBdKSk7Ci0gICAgdGVzdERhdGEucmVuZGVyUGFz
c0NhY2hlLmluc2VydChzdGQ6OnBhaXI8Y2hhciwgUmVuZGVyUGFzc0NhY2hlRW50cnk+KHRlc3RT
Y3JpcHRbMF0sIFJlbmRlclBhc3NDYWNoZUVudHJ5KHJvb3RSZW5kZXJQYXNzLnJlbGVhc2UoKSkp
KTsKLSAgICB3aGlsZSAoKmN1cnJlbnRDaGFyICE9ICdcMCcpIHsKKyAgICBjaGFyIHJvb3RSZW5k
ZXJQYXNzSWQgPSB0ZXN0U2NyaXB0WzBdOworICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJvb3RS
ZW5kZXJQYXNzID0gY3JlYXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRhLCByb290UmVuZGVyUGFz
c0lkKTsKKyAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuaW5zZXJ0KHN0ZDo6cGFpcjxDQ1JlbmRl
clBhc3MqLCBjaGFyPihyb290UmVuZGVyUGFzcy5nZXQoKSwgcm9vdFJlbmRlclBhc3NJZCkpOwor
ICAgIHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZS5pbnNlcnQoc3RkOjpwYWlyPGNoYXIsIFJlbmRl
clBhc3NDYWNoZUVudHJ5Pihyb290UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeShy
b290UmVuZGVyUGFzcy5yZWxlYXNlKCkpKSk7CisgICAgd2hpbGUgKCpjdXJyZW50Q2hhcikgewog
ICAgICAgICBjaGFyIHJlbmRlclBhc3NJZCA9IGN1cnJlbnRDaGFyWzBdOwogICAgICAgICBjdXJy
ZW50Q2hhcisrOwogCkBAIC0yOTkxLDcgKzI5NjgsNyBAQCBzdGF0aWMgdm9pZCBjb25maWd1cmVS
ZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVyUGFzc1JlbW92
YQogICAgICAgICByZW5kZXJQYXNzID0gdGVzdERhdGEucmVuZGVyUGFzc0NhY2hlW3JlbmRlclBh
c3NJZF0ucmVuZGVyUGFzc1B0ci5yZWxlYXNlKCk7CiAKICAgICAgICAgLy8gQ3ljbGUgdGhyb3Vn
aCBxdWFkIGRhdGEgYW5kIGNyZWF0ZSBhbGwgcXVhZHMKLSAgICAgICAgd2hpbGUgKCpjdXJyZW50
Q2hhciAhPSAnXG4nICYmICpjdXJyZW50Q2hhciAhPSAnXDAnKSB7CisgICAgICAgIHdoaWxlICgq
Y3VycmVudENoYXIgJiYgKmN1cnJlbnRDaGFyICE9ICdcbicpIHsKICAgICAgICAgICAgIGlmICgq
Y3VycmVudENoYXIgPT0gJ3MnKSB7CiAgICAgICAgICAgICAgICAgLy8gU29saWQgY29sb3IgZHJh
dyBxdWFkCiAgICAgICAgICAgICAgICAgT3duUHRyPENDRHJhd1F1YWQ+IHF1YWQgPSBDQ1NvbGlk
Q29sb3JEcmF3UXVhZDo6Y3JlYXRlKHRlc3REYXRhLnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgSW50
UmVjdCgwLCAwLCAxMCwgMTApLCBTS19Db2xvcldISVRFKTsKQEAgLTMwMDEsMTMgKzI5NzgsMTQg
QEAgc3RhdGljIHZvaWQgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKGNvbnN0IGNoYXIqIHRl
c3RTY3JpcHQsIFJlbmRlclBhc3NSZW1vdmEKICAgICAgICAgICAgIH0gZWxzZSBpZiAoKCpjdXJy
ZW50Q2hhciA+PSAnQScpICYmICgqY3VycmVudENoYXIgPD0gJ1onKSkgewogICAgICAgICAgICAg
ICAgIC8vIFJlbmRlclBhc3MgZHJhdyBxdWFkCiAgICAgICAgICAgICAgICAgY2hhciBuZXdSZW5k
ZXJQYXNzSWQgPSAqY3VycmVudENoYXI7CisgICAgICAgICAgICAgICAgQVNTRVJUX05FKHJvb3RS
ZW5kZXJQYXNzSWQsIG5ld1JlbmRlclBhc3NJZCk7CiAgICAgICAgICAgICAgICAgY3VycmVudENo
YXIrKzsKICAgICAgICAgICAgICAgICBib29sIGhhc1RleHR1cmUgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICBib29sIGNvbnRlbnRzQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKCpjdXJyZW50Q2hhciA9PSAnWycpIHsKICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudENoYXIrKzsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCgqY3VycmVu
dENoYXIgIT0gJ10nKSAmJiAoKmN1cnJlbnRDaGFyICE9ICdcMCcpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHdoaWxlICgqY3VycmVudENoYXIgJiYgKmN1cnJlbnRDaGFyICE9ICddJykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgqY3VycmVudENoYXIpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgJ2MnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
bnRzQ2hhbmdlZCA9IGZhbHNlOwpAQCAtMzAyNSwyMiArMzAwMywyNCBAQCBzdGF0aWMgdm9pZCBj
b25maWd1cmVSZW5kZXJQYXNzVGVzdERhdGEoY29uc3QgY2hhciogdGVzdFNjcmlwdCwgUmVuZGVy
UGFzc1JlbW92YQogICAgICAgICAgICAgICAgIENDUmVuZGVyUGFzcyogcmVmUmVuZGVyUGFzc1B0
cjsKIAogICAgICAgICAgICAgICAgIGlmICh0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGUuZmluZChu
ZXdSZW5kZXJQYXNzSWQpID09IHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZS5lbmQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBPd25QdHI8Q0NSZW5kZXJQYXNzPiByZWZSZW5kZXJQYXNzID0gY3Jl
YXRlRHVtbXlSZW5kZXJQYXNzKHRlc3REYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c1RleHR1cmUpCisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci0+c2V0SGF2ZUNhY2hl
ZFJlc291cmNlc0ZvclJlbmRlclBhc3NJZChuZXdSZW5kZXJQYXNzSWQpOworCisgICAgICAgICAg
ICAgICAgICAgIE93blB0cjxDQ1JlbmRlclBhc3M+IHJlZlJlbmRlclBhc3MgPSBjcmVhdGVEdW1t
eVJlbmRlclBhc3ModGVzdERhdGEsIG5ld1JlbmRlclBhc3NJZCk7CiAgICAgICAgICAgICAgICAg
ICAgIHJlZlJlbmRlclBhc3NQdHIgPSByZWZSZW5kZXJQYXNzLmdldCgpOwotICAgICAgICAgICAg
ICAgICAgICBGYWtlUmVuZGVyU3VyZmFjZSogcmVmUmVuZGVyU3VyZmFjZSA9IHN0YXRpY19jYXN0
PEZha2VSZW5kZXJTdXJmYWNlKj4ocmVmUmVuZGVyUGFzcy0+dGFyZ2V0U3VyZmFjZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmVmUmVuZGVyU3VyZmFjZS0+c2V0SGFzQ2FjaGVkVGV4dHVyZSho
YXNUZXh0dXJlKTsKLSAgICAgICAgICAgICAgICAgICAgcmVmUmVuZGVyU3VyZmFjZS0+c2V0Q29u
dGVudHNDaGFuZ2VkKGNvbnRlbnRzQ2hhbmdlZCk7CiAgICAgICAgICAgICAgICAgICAgIHRlc3RE
YXRhLnJlbmRlclBhc3NJZC5pbnNlcnQoc3RkOjpwYWlyPENDUmVuZGVyUGFzcyosIGNoYXI+KHJl
ZlJlbmRlclBhc3MuZ2V0KCksIG5ld1JlbmRlclBhc3NJZCkpOwogICAgICAgICAgICAgICAgICAg
ICB0ZXN0RGF0YS5yZW5kZXJQYXNzQ2FjaGUuaW5zZXJ0KHN0ZDo6cGFpcjxjaGFyLCBSZW5kZXJQ
YXNzQ2FjaGVFbnRyeT4obmV3UmVuZGVyUGFzc0lkLCBSZW5kZXJQYXNzQ2FjaGVFbnRyeShyZWZS
ZW5kZXJQYXNzLnJlbGVhc2UoKSkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgcmVmUmVuZGVyUGFzc1B0ciA9IHRlc3REYXRhLnJlbmRlclBhc3NDYWNoZVtu
ZXdSZW5kZXJQYXNzSWRdLnJlbmRlclBhc3M7CiAKLSAgICAgICAgICAgICAgICBPd25QdHI8Q0NS
ZW5kZXJQYXNzRHJhd1F1YWQ+IHF1YWQgPSBDQ1JlbmRlclBhc3NEcmF3UXVhZDo6Y3JlYXRlKHRl
c3REYXRhLnNoYXJlZFF1YWRTdGF0ZS5nZXQoKSwgSW50UmVjdCgpLCByZWZSZW5kZXJQYXNzUHRy
LCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0aW9ucygpLCBXZWJLaXQ6OldlYkZp
bHRlck9wZXJhdGlvbnMoKSwgMSk7CisgICAgICAgICAgICAgICAgSW50UmVjdCBxdWFkUmVjdCA9
IEludFJlY3QoMCwgMCwgMSwgMSk7CisgICAgICAgICAgICAgICAgSW50UmVjdCBjb250ZW50c0No
YW5nZWRSZWN0ID0gY29udGVudHNDaGFuZ2VkID8gcXVhZFJlY3QgOiBJbnRSZWN0KCk7CisgICAg
ICAgICAgICAgICAgT3duUHRyPENDUmVuZGVyUGFzc0RyYXdRdWFkPiBxdWFkID0gQ0NSZW5kZXJQ
YXNzRHJhd1F1YWQ6OmNyZWF0ZSh0ZXN0RGF0YS5zaGFyZWRRdWFkU3RhdGUuZ2V0KCksIHF1YWRS
ZWN0LCByZWZSZW5kZXJQYXNzUHRyLCBpc1JlcGxpY2EsIFdlYktpdDo6V2ViRmlsdGVyT3BlcmF0
aW9ucygpLCBXZWJLaXQ6OldlYkZpbHRlck9wZXJhdGlvbnMoKSwgMSwgY29udGVudHNDaGFuZ2Vk
UmVjdCk7CiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q0NUZXN0UmVuZGVyUGFzcyo+KHJl
bmRlclBhc3MuZ2V0KCkpLT5hcHBlbmRRdWFkKHF1YWQucmVsZWFzZSgpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgICAgICB0ZXN0RGF0YS5yZW5kZXJQYXNzTGlzdC5pbnNlcnQoMCwg
cmVuZGVyUGFzcy5yZWxlYXNlKCkpOwotICAgICAgICBpZiAoKmN1cnJlbnRDaGFyICE9ICdcMCcp
CisgICAgICAgIGlmICgqY3VycmVudENoYXIpCiAgICAgICAgICAgICBjdXJyZW50Q2hhcisrOwog
ICAgIH0KIH0KQEAgLTMwNjMsMTUgKzMwNDMsMTQgQEAgdm9pZCBkdW1wUmVuZGVyUGFzc1Rlc3RE
YXRhKGNvbnN0IFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEmIHRlc3REYXRhLCBjaGFyKiBidWYK
ICAgICAgICAgICAgICAgICAqcG9zID0gJ3MnOwogICAgICAgICAgICAgICAgIHBvcysrOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDQ0RyYXdRdWFkOjpSZW5kZXJQ
YXNzOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ0NSZW5kZXJQYXNz
RHJhd1F1YWQqIHJlbmRlclBhc3NEcmF3UXVhZCA9IHN0YXRpY19jYXN0PENDUmVuZGVyUGFzc0Ry
YXdRdWFkKj4oY3VycmVudFF1YWQpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBDQ1JlbmRl
clBhc3MqIHJlZlBhc3MgPSByZW5kZXJQYXNzRHJhd1F1YWQtPnJlbmRlclBhc3MoKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2hhciByZWZQYXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmlu
ZChyZWZQYXNzKS0+c2Vjb25kOwotICAgICAgICAgICAgICAgICAgICAqcG9zID0gcmVmUGFzc0lk
OwotICAgICAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjYXNlIENDRHJhd1F1YWQ6OlJlbmRlclBhc3M6IHsKKyAgICAgICAgICAgICAgICBDQ1Jl
bmRlclBhc3NEcmF3UXVhZCogcmVuZGVyUGFzc0RyYXdRdWFkID0gc3RhdGljX2Nhc3Q8Q0NSZW5k
ZXJQYXNzRHJhd1F1YWQqPihjdXJyZW50UXVhZCk7CisgICAgICAgICAgICAgICAgY29uc3QgQ0NS
ZW5kZXJQYXNzKiByZWZQYXNzID0gcmVuZGVyUGFzc0RyYXdRdWFkLT5yZW5kZXJQYXNzKCk7Cisg
ICAgICAgICAgICAgICAgY2hhciByZWZQYXNzSWQgPSB0ZXN0RGF0YS5yZW5kZXJQYXNzSWQuZmlu
ZChyZWZQYXNzKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICpwb3MgPSByZWZQYXNzSWQ7Cisg
ICAgICAgICAgICAgICAgcG9zKys7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICpwb3MgPSAneCc7CiAg
ICAgICAgICAgICAgICAgcG9zKys7CkBAIC0zMjM1LDE1ICszMjE0LDE5IEBAIHN0YXRpYyB2b2lk
IHZlcmlmeVJlbmRlclBhc3NUZXN0RGF0YShUZXN0Q2FzZSYgdGVzdENhc2UsIFJlbmRlclBhc3NS
ZW1vdmFsVGVzdERhCiAgICAgRVhQRUNUX1NUUkVRKHRlc3RDYXNlLmV4cGVjdGVkUmVzdWx0LCBh
Y3R1YWxSZXN1bHQpIDw8ICJJbiB0ZXN0IGNhc2U6ICIgPDwgdGVzdENhc2UubmFtZTsKIH0KIAot
VEVTVChSZW5kZXJQYXNzUmVtb3ZhbFRlc3QsIHRlc3RSZW1vdmVSZW5kZXJQYXNzZXMpCitURVNU
X0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHRlc3RSZW1vdmVSZW5kZXJQYXNzZXMpCiB7Cisg
ICAgT3duUHRyPENDR3JhcGhpY3NDb250ZXh0PiBjb250ZXh0KGNyZWF0ZUNvbnRleHQoKSk7Cisg
ICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogY29udGV4dDNkID0gY29udGV4dC0+Y29u
dGV4dDNEKCk7CisgICAgQVNTRVJUX1RSVUUoY29udGV4dDNkKTsKKyAgICBPd25QdHI8Q0NUZXN0
UmVuZGVyZXI+IHJlbmRlcmVyKENDVGVzdFJlbmRlcmVyOjpjcmVhdGUoY29udGV4dDNkKSk7CisK
ICAgICBpbnQgdGVzdENhc2VJbmRleCA9IDA7CiAgICAgd2hpbGUgKHJlbW92ZVJlbmRlclBhc3Nl
c0Nhc2VzW3Rlc3RDYXNlSW5kZXhdLm5hbWUpIHsKLSAgICAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGxUaHJlYWQ7CiAgICAgICAgIFJlbmRlclBhc3NSZW1vdmFsVGVzdERhdGEgdGVz
dERhdGE7CiAgICAgICAgIENDUmVuZGVyUGFzc0xpc3Qgc2tpcHBlZFBhc3NlczsKLSAgICAgICAg
Y29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRhKHJlbW92ZVJlbmRlclBhc3Nlc0Nhc2VzW3Rlc3RD
YXNlSW5kZXhdLmluaXRTY3JpcHQsIHRlc3REYXRhKTsKLSAgICAgICAgQ0NMYXllclRyZWVIb3N0
SW1wbDo6cmVtb3ZlUGFzc2VzV2l0aENhY2hlZFRleHR1cmVzKHRlc3REYXRhLnJlbmRlclBhc3NM
aXN0LCBza2lwcGVkUGFzc2VzKTsKKyAgICAgICAgY29uZmlndXJlUmVuZGVyUGFzc1Rlc3REYXRh
KHJlbW92ZVJlbmRlclBhc3Nlc0Nhc2VzW3Rlc3RDYXNlSW5kZXhdLmluaXRTY3JpcHQsIHRlc3RE
YXRhLCByZW5kZXJlci5nZXQoKSk7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlbW92
ZVBhc3Nlc1dpdGhDYWNoZWRUZXh0dXJlcyh0ZXN0RGF0YS5yZW5kZXJQYXNzTGlzdCwgc2tpcHBl
ZFBhc3NlcywgcmVuZGVyZXIuZ2V0KCkpOwogICAgICAgICB2ZXJpZnlSZW5kZXJQYXNzVGVzdERh
dGEocmVtb3ZlUmVuZGVyUGFzc2VzQ2FzZXNbdGVzdENhc2VJbmRleF0sIHRlc3REYXRhKTsKICAg
ICAgICAgdGVzdENhc2VJbmRleCsrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwCmluZGV4IGVlNWUyOTA3
ZGUxZDM1ZTJjZWI1NmZlNGViOTAwYjg2ZTc1ZjA4YmIuLjIyZWQ1YTk5Nzg5NDA5NjdmZDEyODcz
YzM0NzUyOTY4ZDBkMjEzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NPY2NsdXNpb25UcmFja2VyVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcApAQCAtMTU2LDcgKzE1Niw3IEBAIHN0
cnVjdCBDQ09jY2x1c2lvblRyYWNrZXJUZXN0SW1wbFRocmVhZFR5cGVzIHsKICAgICBzdGF0aWMg
aW50IG5leHRDQ0xheWVySW1wbElkOwogfTsKIAotaW50IENDT2NjbHVzaW9uVHJhY2tlclRlc3RJ
bXBsVGhyZWFkVHlwZXM6Om5leHRDQ0xheWVySW1wbElkID0gMDsKK2ludCBDQ09jY2x1c2lvblRy
YWNrZXJUZXN0SW1wbFRocmVhZFR5cGVzOjpuZXh0Q0NMYXllckltcGxJZCA9IDE7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFR5cGVzLCBib29sIG9wYXF1ZUxheWVycz4KIGNsYXNzIENDT2NjbHVzaW9u
VHJhY2tlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUXVhZEN1bGxlclRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcAppbmRleCAxMGVlYjBmNzQ0ODE4
NGQyM2MyY2U5ZjA1Nzk3NGMyOWE3MGQ2NTMyLi5kMGQ4N2QyNTI0N2MwM2FiMjBhMzFlYTcwNDFk
NDk1NzFlM2FiMDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
UXVhZEN1bGxlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NR
dWFkQ3VsbGVyVGVzdC5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdHlwZWRlZiBDQ0xheWVySXRlcmF0
b3I8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIEND
TGEKIAogc3RhdGljIFBhc3NPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gbWFrZUxheWVyKENDVGls
ZWRMYXllckltcGwqIHBhcmVudCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdU
cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBv
cGFxdWUsIGNvbnN0IEludFJlY3QmIGxheWVyT3BhcXVlUmVjdCwgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4mIHN1cmZhY2VMYXllckxpc3QpCiB7Ci0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IGxh
eWVyID0gQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93blB0cjxDQ1RpbGVkTGF5
ZXJJbXBsPiBsYXllciA9IENDVGlsZWRMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICBPd25QdHI8
Q0NMYXllclRpbGluZ0RhdGE+IHRpbGVyID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0ZShJbnRT
aXplKDEwMCwgMTAwKSwgQ0NMYXllclRpbGluZ0RhdGE6Ok5vQm9yZGVyVGV4ZWxzKTsKICAgICB0
aWxlci0+c2V0Qm91bmRzKGxheWVyUmVjdC5zaXplKCkpOwogICAgIGxheWVyLT5zZXRUaWxpbmdE
YXRhKCp0aWxlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
UmVuZGVyU3VyZmFjZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Jl
bmRlclN1cmZhY2VUZXN0LmNwcAppbmRleCBjOGIwZWRhZWQxOGEyMmVkMzQ0OGQ5MWJlZjg1YTFh
NjlkZmQyZDQ3Li5iNjVlNmU3MmJmNThjMWYzMDBhZmVhY2EwZDE5NmMxMzRlOWJlNWRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFjZVRlc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NSZW5kZXJTdXJmYWNlVGVz
dC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgVEVTVChDQ1JlbmRlclN1cmZhY2VUZXN0LCB2ZXJpZnlT
dXJmYWNlQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICAvLyBUaGlzIHdpbGwgZmFrZSB0
aGF0IHdlIGFyZSBvbiB0aGUgY29ycmVjdCB0aHJlYWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuCiAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIHNldEltcGxUaHJlYWQ7CiAKLSAgICBPd25QdHI8
Q0NMYXllckltcGw+IG93bmluZ0xheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBP
d25QdHI8Q0NMYXllckltcGw+IG93bmluZ0xheWVyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsK
ICAgICBvd25pbmdMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwogICAgIEFTU0VSVF9UUlVF
KG93bmluZ0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIENDUmVuZGVyU3VyZmFjZSogcmVu
ZGVyU3VyZmFjZSA9IG93bmluZ0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CkBAIC05NSw3ICs5NSw3
IEBAIFRFU1QoQ0NSZW5kZXJTdXJmYWNlVGVzdCwgc2FuaXR5Q2hlY2tTdXJmYWNlQ3JlYXRlc0Nv
cnJlY3RTaGFyZWRRdWFkU3RhdGUpCiAgICAgLy8gVGhpcyB3aWxsIGZha2UgdGhhdCB3ZSBhcmUg
b24gdGhlIGNvcnJlY3QgdGhyZWFkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgogICAgIERlYnVnU2Nv
cGVkU2V0SW1wbFRocmVhZCBzZXRJbXBsVGhyZWFkOwogCi0gICAgT3duUHRyPENDTGF5ZXJJbXBs
PiBvd25pbmdMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDTGF5
ZXJJbXBsPiBvd25pbmdMYXllciA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAgICAgb3duaW5n
TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKICAgICBBU1NFUlRfVFJVRShvd25pbmdMYXll
ci0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2Ug
PSBvd25pbmdMYXllci0+cmVuZGVyU3VyZmFjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdC5jcHAKaW5kZXgg
YjQ3Njg1ZGY0NGMwMTdiNWE4ZTYwYjE5YWYzMWZiZDZiZmYzZmM2ZC4uMjI3NjNjZWYzMzllNWJm
ZWVhOTIwYTU0M2FkYzRmZjViMTFjYjY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1NvbGlkQ29sb3JMYXllckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDU29saWRDb2xvckxheWVySW1wbFRlc3QuY3BwCkBAIC00Nyw3
ICs0Nyw3IEBAIFRFU1QoQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5VGlsaW5nQ29t
cGxldGVBbmROb092ZXJsYXApCiAgICAgSW50U2l6ZSBsYXllclNpemUgPSBJbnRTaXplKDgwMCwg
NjAwKTsKICAgICBJbnRSZWN0IHZpc2libGVMYXllclJlY3QgPSBJbnRSZWN0KEludFBvaW50KCks
IGxheWVyU2l6ZSk7CiAKLSAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5ZXJJbXBsPiBsYXllciA9
IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDApOworICAgIE93blB0cjxDQ1NvbGlkQ29s
b3JMYXllckltcGw+IGxheWVyID0gQ0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CiAg
ICAgbGF5ZXItPnNldFZpc2libGVMYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCk7CiAgICAgbGF5
ZXItPnNldEJvdW5kcyhsYXllclNpemUpOwogCkBAIC02OCw3ICs2OCw3IEBAIFRFU1QoQ0NTb2xp
ZENvbG9yTGF5ZXJJbXBsVGVzdCwgdmVyaWZ5Q29ycmVjdEJhY2tncm91bmRDb2xvckluUXVhZCkK
ICAgICBJbnRTaXplIGxheWVyU2l6ZSA9IEludFNpemUoMTAwLCAxMDApOwogICAgIEludFJlY3Qg
dmlzaWJsZUxheWVyUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXJTaXplKTsKIAotICAg
IE93blB0cjxDQ1NvbGlkQ29sb3JMYXllckltcGw+IGxheWVyID0gQ0NTb2xpZENvbG9yTGF5ZXJJ
bXBsOjpjcmVhdGUoMCk7CisgICAgT3duUHRyPENDU29saWRDb2xvckxheWVySW1wbD4gbGF5ZXIg
PSBDQ1NvbGlkQ29sb3JMYXllckltcGw6OmNyZWF0ZSgxKTsKICAgICBsYXllci0+c2V0VmlzaWJs
ZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKICAgICBsYXllci0+c2V0Qm91bmRzKGxheWVy
U2l6ZSk7CiAgICAgbGF5ZXItPnNldEJhY2tncm91bmRDb2xvcih0ZXN0Q29sb3IpOwpAQCAtOTEs
NyArOTEsNyBAQCBURVNUKENDU29saWRDb2xvckxheWVySW1wbFRlc3QsIHZlcmlmeUNvcnJlY3RP
cGFjaXR5SW5RdWFkKQogICAgIEludFNpemUgbGF5ZXJTaXplID0gSW50U2l6ZSgxMDAsIDEwMCk7
CiAgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXll
clNpemUpOwogCi0gICAgT3duUHRyPENDU29saWRDb2xvckxheWVySW1wbD4gbGF5ZXIgPSBDQ1Nv
bGlkQ29sb3JMYXllckltcGw6OmNyZWF0ZSgwKTsKKyAgICBPd25QdHI8Q0NTb2xpZENvbG9yTGF5
ZXJJbXBsPiBsYXllciA9IENDU29saWRDb2xvckxheWVySW1wbDo6Y3JlYXRlKDEpOwogICAgIGxh
eWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KHZpc2libGVMYXllclJlY3QpOwogICAgIGxheWVyLT5z
ZXRCb3VuZHMobGF5ZXJTaXplKTsKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkob3BhY2l0eSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllcklt
cGxUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVySW1w
bFRlc3QuY3BwCmluZGV4IDg1ZGFlYTg2YjZkYjk4NGUyZjM0MzAzY2NjOWQ2M2VjMzU0ZTQ1ZjMu
LmVmYjNhNmExNjkwMzE4YzU3MTVkODA1NTFkOWJmMTg2M2RhNmY4NGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVySW1wbFRlc3QuY3BwCkBA
IC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSB7CiAvLyB2aXNpYmlsaXR5IG9mIHRoZSBlbnRpcmUg
bGF5ZXIgc2l6ZS4KIHN0YXRpYyBQYXNzT3duUHRyPENDVGlsZWRMYXllckltcGw+IGNyZWF0ZUxh
eWVyKGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBjb25zdCBJbnRTaXplJiBsYXllclNpemUsIEND
TGF5ZXJUaWxpbmdEYXRhOjpCb3JkZXJUZXhlbE9wdGlvbiBib3JkZXJUZXhlbHMpCiB7Ci0gICAg
T3duUHRyPENDVGlsZWRMYXllckltcGw+IGxheWVyID0gQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRl
KDApOworICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllciA9IENDVGlsZWRMYXllcklt
cGw6OmNyZWF0ZSgxKTsKICAgICBPd25QdHI8Q0NMYXllclRpbGluZ0RhdGE+IHRpbGVyID0gQ0NM
YXllclRpbGluZ0RhdGE6OmNyZWF0ZSh0aWxlU2l6ZSwgYm9yZGVyVGV4ZWxzKTsKICAgICB0aWxl
ci0+c2V0Qm91bmRzKGxheWVyU2l6ZSk7CiAgICAgbGF5ZXItPnNldFRpbGluZ0RhdGEoKnRpbGVy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJl
ckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGNmZGNkYzE1NmE3MmI2OWU5OGM2MTZhZGVhYWMy
NDE4Y2YyYjY2ZTQuLjljOWVjMjViMDNlZDEwYjUyOTExOGZlN2NlMTBiYzNkMTRlMWU0NzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJSZW5kZXJlckNocm9t
aXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllclJlbmRl
cmVyQ2hyb21pdW1UZXN0LmNwcApAQCAtNzksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICAgICwg
bV9tZW1vcnlBbGxvY2F0aW9uTGltaXRCeXRlcygwKQogICAgIHsKICAgICAgICAgbV9yb290TGF5
ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgbV9yb290UmVuZGVyUGFzcyA9IEND
UmVuZGVyUGFzczo6Y3JlYXRlKG1fcm9vdExheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgICAg
ICBtX3Jvb3RSZW5kZXJQYXNzID0gQ0NSZW5kZXJQYXNzOjpjcmVhdGUobV9yb290TGF5ZXItPnJl
bmRlclN1cmZhY2UoKSwgbV9yb290TGF5ZXItPmlkKCkpOwogICAgIH0KIAogICAgIC8vIENDUmVu
ZGVyZXJDbGllbnQgbWV0aG9kcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCmluZGV4IGM5MzE1OGFiMmQzNTE0MjI4
ZGNhZmU4YTkzZjY4ODUwMTEzMTAxMmQuLjViMzEwNDJhZjBkZmMyNDg0NGUyNmVkOTNhNGVhNTU2
MGE0YzI3OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRM
YXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9U
aWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcApAQCAtOTcsNyArOTcsNyBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgcHVzaERpcnR5VGlsZXMpCiAgICAgT3duUHRyPENDUHJpb3JpdGl6
ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSg0KjEwMjQqMTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKyAgICBPd25QdHI8RmFrZUNDVGls
ZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MSkpKTsKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlk
YXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50
U2l6ZSgxMDAsIDIwMCkpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hy
b21pdW1UZXN0LCBwdXNoT2NjbHVkZWREaXJ0eVRpbGVzKQogICAgIE93blB0cjxDQ1ByaW9yaXRp
emVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRM
YXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVt
KHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRv
cHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBs
KDEpKSk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlciBvY2NsdWRlZDsKIAogICAgIC8vIFRo
ZSB0aWxlIHNpemUgaXMgMTAweDEwMCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWlu
dHMgdHdvIHRpbGVzLgpAQCAtMTgwLDcgKzE4MCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwdXNoRGVsZXRlZFRpbGVzKQogICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVy
ZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpj
cmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9t
aXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVN
YW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7
Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3
IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAK
ICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgYW5k
IHRoZW4gcGFpbnRzIHR3byB0aWxlcy4KICAgICBsYXllci0+c2V0Qm91bmRzKEludFNpemUoMTAw
LCAyMDApKTsKQEAgLTIyNiw3ICsyMjYsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgcHVzaElkbGVQYWludFRpbGVzKQogICAgIE93blB0cjxDQ1ByaW9yaXRpemVkVGV4dHVyZU1h
bmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVt
PiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5h
Z2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJlYWQ7Ci0g
ICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZh
a2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBs
PiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAKICAg
ICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAuIFNldHVwIDV4NSB0aWxlcyB3aXRoIG9uZSB2
aXNpYmxlIHRpbGUgaW4gdGhlIGNlbnRlci4KICAgICBJbnRTaXplIGNvbnRlbnRCb3VuZHMoNTAw
LCA1MDApOwpAQCAtMjg1LDkgKzI4NSw5IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0
LCBwdXNoVGlsZXNBZnRlcklkbGVQYWludEZhaWxlZCkKICAgICBPd25QdHI8Q0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFu
YWdlcjo6Y3JlYXRlKDIqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5
ZXIxID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIu
Z2V0KCkpKTsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbDEoYWRv
cHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1Rp
bGVkTGF5ZXJJbXBsPiBsYXllckltcGwxKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bCgxKSkpOwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjIgPSBhZG9w
dFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwot
ICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsMihhZG9wdFB0cihuZXcg
RmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllcklt
cGw+IGxheWVySW1wbDIoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDIpKSk7CiAK
ICAgICAvLyBGb3IgdGhpcyB0ZXN0IHdlIGhhdmUgdHdvIGxheWVycy4gbGF5ZXIxIGV4aGF1c3Rz
IG1vc3QgdGV4dHVyZSBtZW1vcnksIGxlYXZpbmcgcm9vbSBmb3IgMiBtb3JlIHRpbGVzIGZyb20K
ICAgICAvLyBsYXllcjIsIGJ1dCBub3QgYWxsIHRocmVlIHRpbGVzLiBGaXJzdCB3ZSBwYWludCBs
YXllcjEsIGFuZCBvbmUgdGlsZSBmcm9tIGxheWVyMi4gVGhlbiB3aGVuIHdlIGlkbGUgcGFpbnQK
QEAgLTM2OCw3ICszNjgsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElk
bGVQYWludGVkT2NjbHVkZWRUaWxlcykKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVN
YW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3Jl
YXRlKDQqMTAyNCoxMDI0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1
bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFu
YWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwot
ICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBG
YWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1w
bD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAg
IFRlc3RDQ09jY2x1c2lvblRyYWNrZXIgb2NjbHVkZWQ7CiAKICAgICAvLyBUaGUgdGlsZSBzaXpl
IGlzIDEwMHgxMDAsIHNvIHRoaXMgaW52YWxpZGF0ZXMgb25lIG9jY2x1ZGVkIHRpbGUsIGN1bGxz
IGl0IGR1cmluZyBwYWludCwgYnV0IHByZXBhaW50cyBpdC4KQEAgLTM5NSw3ICszOTUsNyBAQCBU
RVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTWFya2VkRGlydHlEdXJpbmdQ
YWludCkKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFu
YWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDQqMTAyNCoxMDI0LCAx
MDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJl
ZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAg
IERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NU
aWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1w
bCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gVGhlIHRpbGUgc2l6
ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0d28gdGls
ZXMuCiAgICAgLy8gSG93ZXZlciwgZHVyaW5nIHRoZSBwYWludCwgd2UgaW52YWxpZGF0ZSBvbmUg
b2YgdGhlIHRpbGVzLiBUaGlzIHNob3VsZApAQCAtNDIyLDggKzQyMiw4IEBAIFRFU1RfRihUaWxl
ZExheWVyQ2hyb21pdW1UZXN0LCBwdXNoVGlsZXNMYXllck1hcmtlZERpcnR5RHVyaW5nUGFpbnRP
bk5leHRMYXllcikKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIxID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkp
KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIyID0gYWRvcHRSZWYo
bmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGls
ZWRMYXllckltcGw+IGxheWVyMUltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBs
KDApKSk7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllcjJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXIxSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MSkpKTsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDIpKSk7CiAKICAgICBsYXllcjEtPnNldEJvdW5k
cyhJbnRTaXplKDEwMCwgMjAwKSk7CiAgICAgbGF5ZXIxLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KElu
dFJlY3QoMCwgMCwgMTAwLCAyMDApKTsKQEAgLTQ2MCw4ICs0NjAsOCBAQCBURVNUX0YoVGlsZWRM
YXllckNocm9taXVtVGVzdCwgcHVzaFRpbGVzTGF5ZXJNYXJrZWREaXJ0eUR1cmluZ1BhaW50T25Q
cmV2aW91c0xheQogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjEgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllcjIgPSBhZG9wdFJlZihu
ZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERl
YnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXIxSW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MCkpKTsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVyMkltcGwoYWRvcHRQ
dHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRyPEZha2VDQ1RpbGVk
TGF5ZXJJbXBsPiBsYXllcjFJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgx
KSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXIySW1wbChhZG9wdFB0
cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMikpKTsKIAogICAgIGxheWVyMS0+c2V0Qm91bmRz
KEludFNpemUoMTAwLCAyMDApKTsKICAgICBsYXllcjEtPnNldFZpc2libGVMYXllclJlY3QoSW50
UmVjdCgwLCAwLCAxMDAsIDIwMCkpOwpAQCAtNTAzLDcgKzUwMyw3IEBAIFRFU1RfRihUaWxlZExh
eWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRPdXRPZk1lbW9yeSkKICAgICBPd25QdHI8Q0NQcmlv
cml0aXplZFRleHR1cmVNYW5hZ2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0
dXJlTWFuYWdlcjo6Y3JlYXRlKG1lbW9yeUxpbWl0LCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRp
bGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJv
bWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBs
KGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOworICAgIE93blB0cjxGYWtl
Q0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVy
SW1wbCgxKSkpOwogCiAgICAgLy8gSW52YWxpZGF0ZXMgOSB0aWxlcyBhbmQgdGhlbiBwYWludHMg
b25lIHZpc2libGUgdGlsZS4KICAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMpOwpA
QCAtNTM3LDcgKzUzNyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFp
bnRaZXJvU2l6ZWRMYXllcikKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5hZ2Vy
PiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKDIw
MDAwLCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIgPSBh
ZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQoKSkp
OwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0cjxG
YWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExh
eWVySW1wbCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBs
KGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gVGhlIGxh
eWVyJ3MgYm91bmRzIGFyZSBlbXB0eS4KICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0OwpAQCAtNTc4
LDcgKzU3OCw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpZGxlUGFpbnRaZXJv
U2l6ZWRBbmltYXRpbmdMYXllcikKICAgICBPd25QdHI8Q0NQcmlvcml0aXplZFRleHR1cmVNYW5h
Z2VyPiB0ZXh0dXJlTWFuYWdlciA9IENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcjo6Y3JlYXRl
KDIwMDAwLCAxMDI0KTsKICAgICBSZWZQdHI8RmFrZVRpbGVkTGF5ZXJDaHJvbWl1bT4gbGF5ZXIg
PSBhZG9wdFJlZihuZXcgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bSh0ZXh0dXJlTWFuYWdlci5nZXQo
KSkpOwogICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgIE93blB0
cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxl
ZExheWVySW1wbCgwKSkpOworICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJ
bXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogCiAgICAgLy8gUHJl
dGVuZCB0aGUgbGF5ZXIgaXMgYW5pbWF0aW5nLgogICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3Jt
SXNBbmltYXRpbmcodHJ1ZSk7CkBAIC02MjUsNyArNjI1LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QsIGlkbGVQYWludE5vblZpc2libGVMYXllcnMpCiAgICAgT3duUHRyPENDUHJp
b3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSgyMDAwMCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExh
eWVyQ2hyb21pdW0+IGxheWVyID0gYWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0o
dGV4dHVyZU1hbmFnZXIuZ2V0KCkpKTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1w
bFRocmVhZDsKLSAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9w
dFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKyAgICBPd25QdHI8RmFrZUNDVGls
ZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwo
MSkpKTsKIAogICAgIC8vIEludmFsaWRhdGUgdGhlIGxheWVyIGJ1dCBtYWtlIG5vbmUgb2YgaXQg
dmlzaWJsZSwgc28gbm90aGluZyBwYWludHMuCiAgICAgSW50UmVjdCB2aXNpYmxlUmVjdDsKQEAg
LTY3OCw3ICs2NzgsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgaWRsZVBhaW50
Tm9uVmlzaWJsZUFuaW1hdGluZ0xheWVycykKICAgICBmb3IgKGludCBqID0gMDsgaGVpZ2h0W2pd
OyArK2opIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IHdpZHRoW2ldOyArK2kpIHsKICAgICAg
ICAgICAgIFJlZlB0cjxGYWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5l
dyBGYWtlVGlsZWRMYXllckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7Ci0gICAgICAg
ICAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcg
RmFrZUNDVGlsZWRMYXllckltcGwoMCkpKTsKKyAgICAgICAgICAgIE93blB0cjxGYWtlQ0NUaWxl
ZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgx
KSkpOwogCiAgICAgICAgICAgICAvLyBQcmV0ZW5kIHRoZSBsYXllciBpcyBhbmltYXRpbmcuCiAg
ICAgICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKHRydWUpOwpAQCAt
NzQ3LDcgKzc0Nyw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBpbnZhbGlkYXRl
RnJvbVByZXBhcmUpCiAgICAgT3duUHRyPENDUHJpb3JpdGl6ZWRUZXh0dXJlTWFuYWdlcj4gdGV4
dHVyZU1hbmFnZXIgPSBDQ1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSg0KjEwMjQq
MTAyNCwgMTAyNCk7CiAgICAgUmVmUHRyPEZha2VUaWxlZExheWVyQ2hyb21pdW0+IGxheWVyID0g
YWRvcHRSZWYobmV3IEZha2VUaWxlZExheWVyQ2hyb21pdW0odGV4dHVyZU1hbmFnZXIuZ2V0KCkp
KTsKICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoMCkpKTsKKyAgICBPd25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1w
bChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllckltcGwoMSkpKTsKIAogICAgIEZha2VUZXh0
dXJlQWxsb2NhdG9yIGZha2VBbGxvY2F0b3I7CiAgICAgRmFrZVRleHR1cmVDb3BpZXIgZmFrZUNv
cGllcjsKQEAgLTgzNiw3ICs4MzYsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
dmVyaWZ5SW52YWxpZGF0aW9uV2hlbkNvbnRlbnRzU2NhbGVDaGFuZ2VzKQogICAgIE93blB0cjxD
Q1ByaW9yaXRpemVkVGV4dHVyZU1hbmFnZXI+IHRleHR1cmVNYW5hZ2VyID0gQ0NQcmlvcml0aXpl
ZFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUoNCoxMDI0KjEwMjQsIDEwMjQpOwogICAgIFJlZlB0cjxG
YWtlVGlsZWRMYXllckNocm9taXVtPiBsYXllciA9IGFkb3B0UmVmKG5ldyBGYWtlVGlsZWRMYXll
ckNocm9taXVtKHRleHR1cmVNYW5hZ2VyLmdldCgpKSk7CiAgICAgRGVidWdTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGxUaHJlYWQ7Ci0gICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
ckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgT3duUHRy
PEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVk
TGF5ZXJJbXBsKDEpKSk7CiAKICAgICAvLyBDcmVhdGUgYSBsYXllciB3aXRoIG9uZSB0aWxlLgog
ICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOwpAQCAtMTAwMSw3ICsxMDAx
LDcgQEAgVEVTVF9GKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHBhcnRpYWxVcGRhdGVzKQogICAg
IGNjTGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsIHN0ZDo6bnVtZXJpY19saW1p
dHM8c2l6ZV90Pjo6bWF4KCkpOwogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGxUaHJlYWQ7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5
ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOworICAgICAgICBP
d25QdHI8RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUND
VGlsZWRMYXllckltcGwoMSkpKTsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7CiAgICAgICAg
IEVYUEVDVF9FUSg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291
bnQoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHVwZGF0ZXIuaGFzTW9yZVVwZGF0ZXMoKSk7CkBA
IC0xMDE5LDcgKzEwMTksNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlh
bFVwZGF0ZXMpCiAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CiAgICAgewogICAgICAgICBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVk
TGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDAp
KSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgICAgICB1cGRhdGVUZXh0dXJl
cyg0KTsKICAgICAgICAgRVhQRUNUX0VRKDMsIGxheWVyLT5mYWtlTGF5ZXJUZXh0dXJlVXBkYXRl
cigpLT51cGRhdGVDb3VudCgpKTsKICAgICAgICAgRVhQRUNUX1RSVUUodXBkYXRlci5oYXNNb3Jl
VXBkYXRlcygpKTsKQEAgLTEwMzYsNyArMTAzNiw3IEBAIFRFU1RfRihUaWxlZExheWVyQ2hyb21p
dW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVj
dCg1MCwgNTAsIDIwMCwgMTAwKSk7CiAgICAgewogICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxU
aHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBs
YXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDApKSk7CisgICAgICAg
IE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0UHRyKG5ldyBGYWtl
Q0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgICAgICBjY0xheWVyVHJlZUhvc3QtPnVwZGF0ZUxh
eWVycyh1cGRhdGVyLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKICAgICAg
ICAgdXBkYXRlVGV4dHVyZXMoNCk7CiAgICAgICAgIEVYUEVDVF9FUSgyLCBsYXllci0+ZmFrZUxh
eWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CkBAIC0xMDU0LDcgKzEwNTQsNyBA
QCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlhbFVwZGF0ZXMpCiAgICAgbGF5
ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgMzAwLCAyMDApKTsKICAgICB7CiAgICAg
ICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsVGhyZWFkOwotICAgICAgICBPd25QdHI8
RmFrZUNDVGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRM
YXllckltcGwoMCkpKTsKKyAgICAgICAgT3duUHRyPEZha2VDQ1RpbGVkTGF5ZXJJbXBsPiBsYXll
ckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJbXBsKDEpKSk7CiAgICAgICAgIGxh
eWVyLT5wdXNoUHJvcGVydGllc1RvKGxheWVySW1wbC5nZXQoKSk7CiAgICAgfQogICAgIGNjTGF5
ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKQEAgLTEwNjMsNyArMTA2Myw3IEBAIFRFU1Rf
RihUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwYXJ0aWFsVXBkYXRlcykKICAgICBsYXllci0+aW52
YWxpZGF0ZVJlY3QoSW50UmVjdCg1MCwgNTAsIDIwMCwgMTAwKSk7CiAgICAgewogICAgICAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbFRocmVhZDsKLSAgICAgICAgT3duUHRyPEZha2VD
Q1RpbGVkTGF5ZXJJbXBsPiBsYXllckltcGwoYWRvcHRQdHIobmV3IEZha2VDQ1RpbGVkTGF5ZXJJ
bXBsKDApKSk7CisgICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBs
KGFkb3B0UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgxKSkpOwogICAgICAgICBjY0xheWVy
VHJlZUhvc3QtPnVwZGF0ZUxheWVycyh1cGRhdGVyLCBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVf
dD46Om1heCgpKTsKICAgICAgICAgdXBkYXRlVGV4dHVyZXMoNCk7CiAgICAgICAgIEVYUEVDVF9F
USg0LCBsYXllci0+ZmFrZUxheWVyVGV4dHVyZVVwZGF0ZXIoKS0+dXBkYXRlQ291bnQoKSk7CkBA
IC0xMDgxLDcgKzEwODEsNyBAQCBURVNUX0YoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGFydGlh
bFVwZGF0ZXMpCiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoNTAsIDUwLCAxMDAs
IDEwMCkpOwogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGxUaHJl
YWQ7Ci0gICAgICAgIE93blB0cjxGYWtlQ0NUaWxlZExheWVySW1wbD4gbGF5ZXJJbXBsKGFkb3B0
UHRyKG5ldyBGYWtlQ0NUaWxlZExheWVySW1wbCgwKSkpOworICAgICAgICBPd25QdHI8RmFrZUND
VGlsZWRMYXllckltcGw+IGxheWVySW1wbChhZG9wdFB0cihuZXcgRmFrZUNDVGlsZWRMYXllcklt
cGwoMSkpKTsKICAgICAgICAgY2NMYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwg
c3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSk7CiAgICAgICAgIHVwZGF0ZVRleHR1
cmVzKDQpOwogICAgICAgICBFWFBFQ1RfRVEoNCwgbGF5ZXItPmZha2VMYXllclRleHR1cmVVcGRh
dGVyKCktPnVwZGF0ZUNvdW50KCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>